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 BAD95C3F2CD for ; Fri, 28 Feb 2020 17:08:18 +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 548FC24691 for ; Fri, 28 Feb 2020 17:08:18 +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="VKUlLWub" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 548FC24691 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]:50962 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j7j7Z-0006t6-HT for qemu-devel@archiver.kernel.org; Fri, 28 Feb 2020 12:08:17 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:57936) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j7iks-0003Gm-Kb for qemu-devel@nongnu.org; Fri, 28 Feb 2020 11:44:57 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j7ikm-0005fd-0P for qemu-devel@nongnu.org; Fri, 28 Feb 2020 11:44:50 -0500 Received: from alexa-out-sd-02.qualcomm.com ([199.106.114.39]:27049) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1j7ikl-0005V5-L6 for qemu-devel@nongnu.org; Fri, 28 Feb 2020 11:44:43 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=quicinc.com; i=@quicinc.com; q=dns/txt; s=qcdkim; t=1582908283; x=1614444283; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=9aIttf7UcD9044RLHEgGht175STSqx9gFKbkoNKl1Dk=; b=VKUlLWub+t2KBj40UHm1PoGw7f/V8qodwBRUkuv5QITb4xW/rY/OV341 F22tozD0nsFrmoVWG/wy+EMwJQFRBnISn9rpXM2bTiWZ6Y76paG0rtTK2 mGdTdF28t1XDJ3r5gYxmEYJto/0p6WNXEQ9gs+34XpU4IcNHbV6yDnG1n 8=; Received: from unknown (HELO ironmsg01-sd.qualcomm.com) ([10.53.140.141]) by alexa-out-sd-02.qualcomm.com with ESMTP; 28 Feb 2020 08:44:30 -0800 Received: from vu-tsimpson-aus.qualcomm.com (HELO vu-tsimpson1-aus.qualcomm.com) ([10.222.150.1]) by ironmsg01-sd.qualcomm.com with ESMTP; 28 Feb 2020 08:44:29 -0800 Received: by vu-tsimpson1-aus.qualcomm.com (Postfix, from userid 47164) id 88C821110; Fri, 28 Feb 2020 10:44:29 -0600 (CST) From: Taylor Simpson To: qemu-devel@nongnu.org Subject: [RFC PATCH v2 20/67] Hexagon instruction utility functions Date: Fri, 28 Feb 2020 10:43:16 -0600 Message-Id: <1582908244-304-21-git-send-email-tsimpson@quicinc.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1582908244-304-1-git-send-email-tsimpson@quicinc.com> References: <1582908244-304-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" VXRpbGl0eSBmdW5jdGlvbnMgY2FsbGVkIGJ5IHZhcmlvdXMgaW5zdHJ1Y3Rpb25zCgpTaWduZWQt b2ZmLWJ5OiBUYXlsb3IgU2ltcHNvbiA8dHNpbXBzb25AcXVpY2luYy5jb20+Ci0tLQogdGFyZ2V0 L2hleGFnb24vYXJjaC5oICAgICB8ICA2MiArKysrCiB0YXJnZXQvaGV4YWdvbi9jb252X2VtdS5o IHwgIDUwICsrKwogdGFyZ2V0L2hleGFnb24vZm1hX2VtdS5oICB8ICAzMCArKwogdGFyZ2V0L2hl eGFnb24vYXJjaC5jICAgICB8IDY2MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysK IHRhcmdldC9oZXhhZ29uL2NvbnZfZW11LmMgfCAzNjkgKysrKysrKysrKysrKysrKysrKwogdGFy Z2V0L2hleGFnb24vZm1hX2VtdS5jICB8IDkxNiArKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrCiA2IGZpbGVzIGNoYW5nZWQsIDIwOTAgaW5zZXJ0aW9ucygrKQog Y3JlYXRlIG1vZGUgMTAwNjQ0IHRhcmdldC9oZXhhZ29uL2FyY2guaAogY3JlYXRlIG1vZGUgMTAw NjQ0IHRhcmdldC9oZXhhZ29uL2NvbnZfZW11LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0YXJnZXQv aGV4YWdvbi9mbWFfZW11LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0YXJnZXQvaGV4YWdvbi9hcmNo LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0YXJnZXQvaGV4YWdvbi9jb252X2VtdS5jCiBjcmVhdGUg bW9kZSAxMDA2NDQgdGFyZ2V0L2hleGFnb24vZm1hX2VtdS5jCgpkaWZmIC0tZ2l0IGEvdGFyZ2V0 L2hleGFnb24vYXJjaC5oIGIvdGFyZ2V0L2hleGFnb24vYXJjaC5oCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLjcxNmJiZGQKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvaGV4 YWdvbi9hcmNoLmgKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqICBDb3B5cmlnaHQoYykgMjAxOS0y MDIwIFF1YWxjb21tIElubm92YXRpb24gQ2VudGVyLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICog IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07 IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaWZu ZGVmIEhFWEFHT05fQVJDSF9ICisjZGVmaW5lIEhFWEFHT05fQVJDSF9ICisKKyNpbmNsdWRlICJj cHUuaCIKKyNpbmNsdWRlICJoZXhfYXJjaF90eXBlcy5oIgorCitleHRlcm4gc2l6ZTF1X3QgckxQ U190YWJsZV82NHg0WzY0XVs0XTsKK2V4dGVybiBzaXplMXVfdCBBQ19uZXh0X3N0YXRlX01QU182 NFs2NF07CitleHRlcm4gc2l6ZTF1X3QgQUNfbmV4dF9zdGF0ZV9MUFNfNjRbNjRdOworCitleHRl cm4gc2l6ZTR1X3QgZmJyZXZhZGRyKHNpemU0dV90IHBvaW50ZXIpOworZXh0ZXJuIHNpemU0dV90 IGNvdW50X29uZXNfMihzaXplMnVfdCBzcmMpOworZXh0ZXJuIHNpemU0dV90IGNvdW50X29uZXNf NChzaXplNHVfdCBzcmMpOworZXh0ZXJuIHNpemU0dV90IGNvdW50X29uZXNfOChzaXplOHVfdCBz cmMpOworZXh0ZXJuIHNpemU0dV90IGNvdW50X2xlYWRpbmdfb25lc184KHNpemU4dV90IHNyYyk7 CitleHRlcm4gc2l6ZTR1X3QgY291bnRfbGVhZGluZ19vbmVzXzQoc2l6ZTR1X3Qgc3JjKTsKK2V4 dGVybiBzaXplNHVfdCBjb3VudF9sZWFkaW5nX29uZXNfMihzaXplMnVfdCBzcmMpOworZXh0ZXJu IHNpemU0dV90IGNvdW50X2xlYWRpbmdfb25lc18xKHNpemUxdV90IHNyYyk7CitleHRlcm4gc2l6 ZTh1X3QgcmV2ZXJzZV9iaXRzXzgoc2l6ZTh1X3Qgc3JjKTsKK2V4dGVybiBzaXplNHVfdCByZXZl cnNlX2JpdHNfNChzaXplNHVfdCBzcmMpOworZXh0ZXJuIHNpemU0dV90IHJldmVyc2VfYml0c18y KHNpemUydV90IHNyYyk7CitleHRlcm4gc2l6ZTR1X3QgcmV2ZXJzZV9iaXRzXzEoc2l6ZTF1X3Qg c3JjKTsKK2V4dGVybiBzaXplOHVfdCBleGNoYW5nZShzaXplOHVfdCBiaXRzLCBzaXplNHVfdCBj bnRybCk7CitleHRlcm4gc2l6ZTh1X3QgaW50ZXJsZWF2ZShzaXplNHVfdCBvZGQsIHNpemU0dV90 IGV2ZW4pOworZXh0ZXJuIHNpemU4dV90IGRlaW50ZXJsZWF2ZShzaXplOHVfdCBzcmMpOworZXh0 ZXJuIHNpemU0dV90IGNhcnJ5X2Zyb21fYWRkNjQoc2l6ZTh1X3QgYSwgc2l6ZTh1X3QgYiwgc2l6 ZTR1X3QgYyk7CitleHRlcm4gc2l6ZTRzX3QgY29udl9yb3VuZChzaXplNHNfdCBhLCBpbnQgbik7 CitleHRlcm4gc2l6ZTE2c190IGNhc3Q4c190b18xNnMoc2l6ZThzX3QgYSk7CitleHRlcm4gc2l6 ZThzX3QgY2FzdDE2c190b184cyhzaXplMTZzX3QgYSk7CitleHRlcm4gc2l6ZTRzX3QgY2FzdDE2 c190b180cyhzaXplMTZzX3QgYSk7CitleHRlcm4gc2l6ZTE2c190IGFkZDEyOChzaXplMTZzX3Qg YSwgc2l6ZTE2c190IGIpOworZXh0ZXJuIHNpemUxNnNfdCBzdWIxMjgoc2l6ZTE2c190IGEsIHNp emUxNnNfdCBiKTsKK2V4dGVybiBzaXplMTZzX3Qgc2hpZnRyMTI4KHNpemUxNnNfdCBhLCBzaXpl NHVfdCBuKTsKK2V4dGVybiBzaXplMTZzX3Qgc2hpZnRsMTI4KHNpemUxNnNfdCBhLCBzaXplNHVf dCBuKTsKK2V4dGVybiBzaXplMTZzX3QgYW5kMTI4KHNpemUxNnNfdCBhLCBzaXplMTZzX3QgYik7 CitleHRlcm4gdm9pZCBhcmNoX2Zwb3Bfc3RhcnQoQ1BVSGV4YWdvblN0YXRlICplbnYpOworZXh0 ZXJuIHZvaWQgYXJjaF9mcG9wX2VuZChDUFVIZXhhZ29uU3RhdGUgKmVudik7CitleHRlcm4gdm9p ZCBhcmNoX3JhaXNlX2ZwZmxhZyh1bnNpZ25lZCBpbnQgZmxhZ3MpOworZXh0ZXJuIGludCBhcmNo X3NmX3JlY2lwX2NvbW1vbihzaXplNHNfdCAqUnMsIHNpemU0c190ICpSdCwgc2l6ZTRzX3QgKlJk LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmFkanVzdCk7CitleHRlcm4g aW50IGFyY2hfc2ZfaW52c3FydF9jb21tb24oc2l6ZTRzX3QgKlJzLCBzaXplNHNfdCAqUmQsIGlu dCAqYWRqdXN0KTsKK2V4dGVybiBpbnQgYXJjaF9yZWNpcF9sb29rdXAoaW50IGluZGV4KTsKK2V4 dGVybiBpbnQgYXJjaF9pbnZzcXJ0X2xvb2t1cChpbnQgaW5kZXgpOworCisjZW5kaWYKZGlmZiAt LWdpdCBhL3RhcmdldC9oZXhhZ29uL2NvbnZfZW11LmggYi90YXJnZXQvaGV4YWdvbi9jb252X2Vt dS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwZDlkMmMKLS0tIC9kZXYv bnVsbAorKysgYi90YXJnZXQvaGV4YWdvbi9jb252X2VtdS5oCkBAIC0wLDAgKzEsNTAgQEAKKy8q CisgKiAgQ29weXJpZ2h0KGMpIDIwMTktMjAyMCBRdWFsY29tbSBJbm5vdmF0aW9uIENlbnRlciwg SW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlz aGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24g MiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz aW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3Jn L2xpY2Vuc2VzLz4uCisgKi8KKworI2lmbmRlZiBIRVhBR09OX0NPTlZfRU1VX0gKKyNkZWZpbmUg SEVYQUdPTl9DT05WX0VNVV9ICisKKyNpbmNsdWRlICJoZXhfYXJjaF90eXBlcy5oIgorCitleHRl cm4gc2l6ZTh1X3QgY29udl9zZl90b184dShmbG9hdCBpbik7CitleHRlcm4gc2l6ZTR1X3QgY29u dl9zZl90b180dShmbG9hdCBpbik7CitleHRlcm4gc2l6ZThzX3QgY29udl9zZl90b184cyhmbG9h dCBpbik7CitleHRlcm4gc2l6ZTRzX3QgY29udl9zZl90b180cyhmbG9hdCBpbik7CisKK2V4dGVy biBzaXplOHVfdCBjb252X2RmX3RvXzh1KGRvdWJsZSBpbik7CitleHRlcm4gc2l6ZTR1X3QgY29u dl9kZl90b180dShkb3VibGUgaW4pOworZXh0ZXJuIHNpemU4c190IGNvbnZfZGZfdG9fOHMoZG91 YmxlIGluKTsKK2V4dGVybiBzaXplNHNfdCBjb252X2RmX3RvXzRzKGRvdWJsZSBpbik7CisKK2V4 dGVybiBkb3VibGUgY29udl84dV90b19kZihzaXplOHVfdCBpbik7CitleHRlcm4gZG91YmxlIGNv bnZfNHVfdG9fZGYoc2l6ZTR1X3QgaW4pOworZXh0ZXJuIGRvdWJsZSBjb252XzhzX3RvX2RmKHNp emU4c190IGluKTsKK2V4dGVybiBkb3VibGUgY29udl80c190b19kZihzaXplNHNfdCBpbik7CisK K2V4dGVybiBmbG9hdCBjb252Xzh1X3RvX3NmKHNpemU4dV90IGluKTsKK2V4dGVybiBmbG9hdCBj b252XzR1X3RvX3NmKHNpemU0dV90IGluKTsKK2V4dGVybiBmbG9hdCBjb252XzhzX3RvX3NmKHNp emU4c190IGluKTsKK2V4dGVybiBmbG9hdCBjb252XzRzX3RvX3NmKHNpemU0c190IGluKTsKKwor ZXh0ZXJuIGZsb2F0IGNvbnZfZGZfdG9fc2YoZG91YmxlIGluKTsKKworc3RhdGljIGlubGluZSBk b3VibGUgY29udl9zZl90b19kZihmbG9hdCBpbikKK3sKKyAgICByZXR1cm4gaW47Cit9CisKKyNl bmRpZgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2hleGFnb24vZm1hX2VtdS5oIGIvdGFyZ2V0L2hleGFn b24vZm1hX2VtdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhNTRmMjUK LS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvaGV4YWdvbi9mbWFfZW11LmgKQEAgLTAsMCArMSwz MCBAQAorLyoKKyAqICBDb3B5cmlnaHQoYykgMjAxOS0yMDIwIFF1YWxjb21tIElubm92YXRpb24g Q2VudGVyLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogIFRoaXMgcHJvZ3JhbSBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cisg KiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBh cyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIg dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxh dGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBz aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3 LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaWZuZGVmIEhFWEFHT05fRk1BX0VNVV9ICisj ZGVmaW5lIEhFWEFHT05fRk1BX0VNVV9ICisKK2V4dGVybiBmbG9hdCBpbnRlcm5hbF9mbWFmeChm bG9hdCBhX2luLCBmbG9hdCBiX2luLCBmbG9hdCBjX2luLCBpbnQgc2NhbGUpOworZXh0ZXJuIGZs b2F0IGludGVybmFsX2ZtYWYoZmxvYXQgYV9pbiwgZmxvYXQgYl9pbiwgZmxvYXQgY19pbik7Citl eHRlcm4gZG91YmxlIGludGVybmFsX2ZtYShkb3VibGUgYV9pbiwgZG91YmxlIGJfaW4sIGRvdWJs ZSBjX2luKTsKK2V4dGVybiBkb3VibGUgaW50ZXJuYWxfZm1heChkb3VibGUgYV9pbiwgZG91Ymxl IGJfaW4sIGRvdWJsZSBjX2luLCBpbnQgc2NhbGUpOworZXh0ZXJuIGZsb2F0IGludGVybmFsX21w eWYoZmxvYXQgYV9pbiwgZmxvYXQgYl9pbik7CitleHRlcm4gZG91YmxlIGludGVybmFsX21weShk b3VibGUgYV9pbiwgZG91YmxlIGJfaW4pOworZXh0ZXJuIGRvdWJsZSBpbnRlcm5hbF9tcHloaChk b3VibGUgYV9pbiwgZG91YmxlIGJfaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu c2lnbmVkIGxvbmcgbG9uZyBpbnQgYWNjdW11bGF0ZWQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBh L3RhcmdldC9oZXhhZ29uL2FyY2guYyBiL3RhcmdldC9oZXhhZ29uL2FyY2guYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODMxZTJjCi0tLSAvZGV2L251bGwKKysrIGIvdGFy Z2V0L2hleGFnb24vYXJjaC5jCkBAIC0wLDAgKzEsNjYzIEBACisvKgorICogIENvcHlyaWdodChj KSAyMDE5LTIwMjAgUXVhbGNvbW0gSW5ub3ZhdGlvbiBDZW50ZXIsIEluYy4gQWxsIFJpZ2h0cyBS ZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us IG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhp cyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm dWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w eSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMg cHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICov CisKKyNpbmNsdWRlICJxZW11L29zZGVwLmgiCisjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUg ImZtYV9lbXUuaCIKKyNpbmNsdWRlICJhcmNoLmgiCisjaW5jbHVkZSAibWFjcm9zLmgiCisKKy8q CisgKiBUaGVzZSB0aHJlZSB0YWJsZXMgYXJlIHVzZWQgYnkgdGhlIGNhYmFjZGVjYmluIGluc3Ry dWN0aW9uCisgKi8KK3NpemUxdV90IHJMUFNfdGFibGVfNjR4NFs2NF1bNF0gPSB7CisgICAgezEy OCwgMTc2LCAyMDgsIDI0MH0sCisgICAgezEyOCwgMTY3LCAxOTcsIDIyN30sCisgICAgezEyOCwg MTU4LCAxODcsIDIxNn0sCisgICAgezEyMywgMTUwLCAxNzgsIDIwNX0sCisgICAgezExNiwgMTQy LCAxNjksIDE5NX0sCisgICAgezExMSwgMTM1LCAxNjAsIDE4NX0sCisgICAgezEwNSwgMTI4LCAx NTIsIDE3NX0sCisgICAgezEwMCwgMTIyLCAxNDQsIDE2Nn0sCisgICAgezk1LCAxMTYsIDEzNywg MTU4fSwKKyAgICB7OTAsIDExMCwgMTMwLCAxNTB9LAorICAgIHs4NSwgMTA0LCAxMjMsIDE0Mn0s CisgICAgezgxLCA5OSwgMTE3LCAxMzV9LAorICAgIHs3NywgOTQsIDExMSwgMTI4fSwKKyAgICB7 NzMsIDg5LCAxMDUsIDEyMn0sCisgICAgezY5LCA4NSwgMTAwLCAxMTZ9LAorICAgIHs2NiwgODAs IDk1LCAxMTB9LAorICAgIHs2MiwgNzYsIDkwLCAxMDR9LAorICAgIHs1OSwgNzIsIDg2LCA5OX0s CisgICAgezU2LCA2OSwgODEsIDk0fSwKKyAgICB7NTMsIDY1LCA3NywgODl9LAorICAgIHs1MSwg NjIsIDczLCA4NX0sCisgICAgezQ4LCA1OSwgNjksIDgwfSwKKyAgICB7NDYsIDU2LCA2NiwgNzZ9 LAorICAgIHs0MywgNTMsIDYzLCA3Mn0sCisgICAgezQxLCA1MCwgNTksIDY5fSwKKyAgICB7Mzks IDQ4LCA1NiwgNjV9LAorICAgIHszNywgNDUsIDU0LCA2Mn0sCisgICAgezM1LCA0MywgNTEsIDU5 fSwKKyAgICB7MzMsIDQxLCA0OCwgNTZ9LAorICAgIHszMiwgMzksIDQ2LCA1M30sCisgICAgezMw LCAzNywgNDMsIDUwfSwKKyAgICB7MjksIDM1LCA0MSwgNDh9LAorICAgIHsyNywgMzMsIDM5LCA0 NX0sCisgICAgezI2LCAzMSwgMzcsIDQzfSwKKyAgICB7MjQsIDMwLCAzNSwgNDF9LAorICAgIHsy MywgMjgsIDMzLCAzOX0sCisgICAgezIyLCAyNywgMzIsIDM3fSwKKyAgICB7MjEsIDI2LCAzMCwg MzV9LAorICAgIHsyMCwgMjQsIDI5LCAzM30sCisgICAgezE5LCAyMywgMjcsIDMxfSwKKyAgICB7 MTgsIDIyLCAyNiwgMzB9LAorICAgIHsxNywgMjEsIDI1LCAyOH0sCisgICAgezE2LCAyMCwgMjMs IDI3fSwKKyAgICB7MTUsIDE5LCAyMiwgMjV9LAorICAgIHsxNCwgMTgsIDIxLCAyNH0sCisgICAg ezE0LCAxNywgMjAsIDIzfSwKKyAgICB7MTMsIDE2LCAxOSwgMjJ9LAorICAgIHsxMiwgMTUsIDE4 LCAyMX0sCisgICAgezEyLCAxNCwgMTcsIDIwfSwKKyAgICB7MTEsIDE0LCAxNiwgMTl9LAorICAg IHsxMSwgMTMsIDE1LCAxOH0sCisgICAgezEwLCAxMiwgMTUsIDE3fSwKKyAgICB7MTAsIDEyLCAx NCwgMTZ9LAorICAgIHs5LCAxMSwgMTMsIDE1fSwKKyAgICB7OSwgMTEsIDEyLCAxNH0sCisgICAg ezgsIDEwLCAxMiwgMTR9LAorICAgIHs4LCA5LCAxMSwgMTN9LAorICAgIHs3LCA5LCAxMSwgMTJ9 LAorICAgIHs3LCA5LCAxMCwgMTJ9LAorICAgIHs3LCA4LCAxMCwgMTF9LAorICAgIHs2LCA4LCA5 LCAxMX0sCisgICAgezYsIDcsIDksIDEwfSwKKyAgICB7NiwgNywgOCwgOX0sCisgICAgezIsIDIs IDIsIDJ9Cit9OworCitzaXplMXVfdCBBQ19uZXh0X3N0YXRlX01QU182NFs2NF0gPSB7CisgICAg MSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsCisgICAgMTEsIDEyLCAxMywgMTQsIDE1LCAx NiwgMTcsIDE4LCAxOSwgMjAsCisgICAgMjEsIDIyLCAyMywgMjQsIDI1LCAyNiwgMjcsIDI4LCAy OSwgMzAsCisgICAgMzEsIDMyLCAzMywgMzQsIDM1LCAzNiwgMzcsIDM4LCAzOSwgNDAsCisgICAg NDEsIDQyLCA0MywgNDQsIDQ1LCA0NiwgNDcsIDQ4LCA0OSwgNTAsCisgICAgNTEsIDUyLCA1Mywg NTQsIDU1LCA1NiwgNTcsIDU4LCA1OSwgNjAsCisgICAgNjEsIDYyLCA2MiwgNjMKK307CisKKwor c2l6ZTF1X3QgQUNfbmV4dF9zdGF0ZV9MUFNfNjRbNjRdID0geworICAgIDAsIDAsIDEsIDIsIDIs IDQsIDQsIDUsIDYsIDcsCisgICAgOCwgOSwgOSwgMTEsIDExLCAxMiwgMTMsIDEzLCAxNSwgMTUs CisgICAgMTYsIDE2LCAxOCwgMTgsIDE5LCAxOSwgMjEsIDIxLCAyMiwgMjIsCisgICAgMjMsIDI0 LCAyNCwgMjUsIDI2LCAyNiwgMjcsIDI3LCAyOCwgMjksCisgICAgMjksIDMwLCAzMCwgMzAsIDMx LCAzMiwgMzIsIDMzLCAzMywgMzMsCisgICAgMzQsIDM0LCAzNSwgMzUsIDM1LCAzNiwgMzYsIDM2 LCAzNywgMzcsCisgICAgMzcsIDM4LCAzOCwgNjMKK307CisKK3NpemU0dV90IGZicmV2YWRkcihz aXplNHVfdCBwb2ludGVyKQoreworICAgIHNpemU0dV90IG9mZnNldCA9IHBvaW50ZXIgJiAweGZm ZmY7CisgICAgc2l6ZTR1X3QgYnJldm9mZnNldCA9IDA7CisgICAgaW50IGk7CisKKyAgICBmb3Ig KGkgPSAwOyBpIDwgMTY7IGkrKykgeworICAgICAgICBmU0VUQklUKGksIGJyZXZvZmZzZXQsIChm R0VUQklUKCgxNSAtIGkpLCBvZmZzZXQpKSk7CisgICAgfQorICAgIHJldHVybiAocG9pbnRlciAm IDB4ZmZmZjAwMDApIHwgYnJldm9mZnNldDsKK30KKworLyoKKyAqIENvdW50aW5nIGJpdHMgc2V0 LCBCcmlhbiBLZXJuaWdoYW4ncyB3YXkKKyAqIEJyaWFuIEtlcm5pZ2hhbidzIG1ldGhvZCBnb2Vz IHRocm91Z2ggYXMgbWFueSBpdGVyYXRpb25zIGFzIHRoZXJlIGFyZQorICogc2V0IGJpdHMuIFNv IGlmIHdlIGhhdmUgYSAzMi1iaXQgd29yZCB3aXRoIG9ubHkgdGhlIGhpZ2ggYml0IHNldCwKKyAq IHRoZW4gaXQgd2lsbCBvbmx5IGdvIG9uY2UgdGhyb3VnaCB0aGUgbG9vcC4KKyAqLworc2l6ZTR1 X3QgY291bnRfb25lc18yKHNpemUydV90IHNyYykKK3sKKyAgICBpbnQgcmV0OworICAgIGZvciAo cmV0ID0gMDsgc3JjOyByZXQrKykgeworICAgICAgICBzcmMgJj0gc3JjIC0gMTsgICAgLyogY2xl YXIgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdCBzZXQgKi8KKyAgICB9CisgICAgcmV0dXJuIHJl dDsKK30KKworIHNpemU0dV90IGNvdW50X29uZXNfNChzaXplNHVfdCBzcmMpCit7CisgICAgaW50 IHJldDsKKyAgICBmb3IgKHJldCA9IDA7IHNyYzsgcmV0KyspIHsKKyAgICAgICAgc3JjICY9IHNy YyAtIDE7ICAgIC8qIGNsZWFyIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQgc2V0ICovCisgICAg fQorICAgIHJldHVybiByZXQ7Cit9CisKK3NpemU0dV90IGNvdW50X29uZXNfOChzaXplOHVfdCBz cmMpCit7CisgICAgaW50IHJldDsKKyAgICBmb3IgKHJldCA9IDA7IHNyYzsgcmV0KyspIHsKKyAg ICAgICAgc3JjICY9IHNyYyAtIDE7ICAgIC8qIGNsZWFyIHRoZSBsZWFzdCBzaWduaWZpY2FudCBi aXQgc2V0ICovCisgICAgfQorICAgIHJldHVybiByZXQ7Cit9CisKK3NpemU0dV90IGNvdW50X2xl YWRpbmdfb25lc184KHNpemU4dV90IHNyYykKK3sKKyAgICBpbnQgcmV0OworICAgIGZvciAocmV0 ID0gMDsgc3JjICYgMHg4MDAwMDAwMDAwMDAwMDAwTEw7IHNyYyA8PD0gMSkgeworICAgICAgICBy ZXQrKzsKKyAgICB9CisgICAgcmV0dXJuIHJldDsKK30KKworCitzaXplNHVfdCBjb3VudF9sZWFk aW5nX29uZXNfNChzaXplNHVfdCBzcmMpCit7CisgICAgaW50IHJldDsKKyAgICBmb3IgKHJldCA9 IDA7IHNyYyAmIDB4ODAwMDAwMDA7IHNyYyA8PD0gMSkgeworICAgICAgICByZXQrKzsKKyAgICB9 CisgICAgcmV0dXJuIHJldDsKK30KKworc2l6ZTR1X3QgY291bnRfbGVhZGluZ19vbmVzXzIoc2l6 ZTJ1X3Qgc3JjKQoreworICAgIGludCByZXQ7CisgICAgZm9yIChyZXQgPSAwOyBzcmMgJiAweDgw MDA7IHNyYyA8PD0gMSkgeworICAgICAgICByZXQrKzsKKyAgICB9CisgICAgcmV0dXJuIHJldDsK K30KKworc2l6ZTR1X3QgY291bnRfbGVhZGluZ19vbmVzXzEoc2l6ZTF1X3Qgc3JjKQoreworICAg IGludCByZXQ7CisgICAgZm9yIChyZXQgPSAwOyBzcmMgJiAweDgwOyBzcmMgPDw9IDEpIHsKKyAg ICAgICAgcmV0Kys7CisgICAgfQorICAgIHJldHVybiByZXQ7Cit9CisKKyNkZWZpbmUgQklUU19N QVNLXzggMHg1NTU1NTU1NTU1NTU1NTU1VUxMCisjZGVmaW5lIFBBSVJfTUFTS184IDB4MzMzMzMz MzMzMzMzMzMzM1VMTAorI2RlZmluZSBOWUJMX01BU0tfOCAweDBmMGYwZjBmMGYwZjBmMGZVTEwK KyNkZWZpbmUgQllURV9NQVNLXzggMHgwMGZmMDBmZjAwZmYwMGZmVUxMCisjZGVmaW5lIEhBTEZf TUFTS184IDB4MDAwMGZmZmYwMDAwZmZmZlVMTAorI2RlZmluZSBXT1JEX01BU0tfOCAweDAwMDAw MDAwZmZmZmZmZmZVTEwKKworc2l6ZTh1X3QgcmV2ZXJzZV9iaXRzXzgoc2l6ZTh1X3Qgc3JjKQor eworICAgIHNyYyA9ICgoc3JjID4+IDEpICYgQklUU19NQVNLXzgpIHwgKChzcmMgJiBCSVRTX01B U0tfOCkgPDwgMSk7CisgICAgc3JjID0gKChzcmMgPj4gMikgJiBQQUlSX01BU0tfOCkgfCAoKHNy YyAmIFBBSVJfTUFTS184KSA8PCAyKTsKKyAgICBzcmMgPSAoKHNyYyA+PiA0KSAmIE5ZQkxfTUFT S184KSB8ICgoc3JjICYgTllCTF9NQVNLXzgpIDw8IDQpOworICAgIHNyYyA9ICgoc3JjID4+IDgp ICYgQllURV9NQVNLXzgpIHwgKChzcmMgJiBCWVRFX01BU0tfOCkgPDwgOCk7CisgICAgc3JjID0g KChzcmMgPj4gMTYpICYgSEFMRl9NQVNLXzgpIHwgKChzcmMgJiBIQUxGX01BU0tfOCkgPDwgMTYp OworICAgIHNyYyA9ICgoc3JjID4+IDMyKSAmIFdPUkRfTUFTS184KSB8ICgoc3JjICYgV09SRF9N QVNLXzgpIDw8IDMyKTsKKyAgICByZXR1cm4gc3JjOworfQorCisKKyNkZWZpbmUgQklUU19NQVNL XzQgMHg1NTU1NTU1NVVMTAorI2RlZmluZSBQQUlSX01BU0tfNCAweDMzMzMzMzMzVUxMCisjZGVm aW5lIE5ZQkxfTUFTS180IDB4MGYwZjBmMGZVTEwKKyNkZWZpbmUgQllURV9NQVNLXzQgMHgwMGZm MDBmZlVMTAorI2RlZmluZSBIQUxGX01BU0tfNCAweDAwMDBmZmZmVUxMCisKK3NpemU0dV90IHJl dmVyc2VfYml0c180KHNpemU0dV90IHNyYykKK3sKKyAgICBzcmMgPSAoKHNyYyA+PiAxKSAmIEJJ VFNfTUFTS180KSB8ICgoc3JjICYgQklUU19NQVNLXzQpIDw8IDEpOworICAgIHNyYyA9ICgoc3Jj ID4+IDIpICYgUEFJUl9NQVNLXzQpIHwgKChzcmMgJiBQQUlSX01BU0tfNCkgPDwgMik7CisgICAg c3JjID0gKChzcmMgPj4gNCkgJiBOWUJMX01BU0tfNCkgfCAoKHNyYyAmIE5ZQkxfTUFTS180KSA8 PCA0KTsKKyAgICBzcmMgPSAoKHNyYyA+PiA4KSAmIEJZVEVfTUFTS180KSB8ICgoc3JjICYgQllU RV9NQVNLXzQpIDw8IDgpOworICAgIHNyYyA9ICgoc3JjID4+IDE2KSAmIEhBTEZfTUFTS180KSB8 ICgoc3JjICYgSEFMRl9NQVNLXzQpIDw8IDE2KTsKKyAgICByZXR1cm4gc3JjOworfQorCisjZGVm aW5lIEJJVFNfTUFTS18yIDB4NTU1NVVMTAorI2RlZmluZSBQQUlSX01BU0tfMiAweDMzMzNVTEwK KyNkZWZpbmUgTllCTF9NQVNLXzIgMHgwZjBmVUxMCisjZGVmaW5lIEJZVEVfTUFTS18yIDB4MDBm ZlVMTAorI2RlZmluZSBIQUxGX01BU0tfMiAweDAwMDBVTEwKKworc2l6ZTR1X3QgcmV2ZXJzZV9i aXRzXzIoc2l6ZTJ1X3Qgc3JjKQoreworICAgIHNyYyA9ICgoc3JjID4+IDEpICYgQklUU19NQVNL XzIpIHwgKChzcmMgJiBCSVRTX01BU0tfMikgPDwgMSk7CisgICAgc3JjID0gKChzcmMgPj4gMikg JiBQQUlSX01BU0tfMikgfCAoKHNyYyAmIFBBSVJfTUFTS18yKSA8PCAyKTsKKyAgICBzcmMgPSAo KHNyYyA+PiA0KSAmIE5ZQkxfTUFTS18yKSB8ICgoc3JjICYgTllCTF9NQVNLXzIpIDw8IDQpOwor ICAgIHNyYyA9ICgoc3JjID4+IDgpICYgQllURV9NQVNLXzIpIHwgKChzcmMgJiBCWVRFX01BU0tf MikgPDwgOCk7CisgICAgcmV0dXJuIHNyYzsKK30KKworI2RlZmluZSBCSVRTX01BU0tfMSAweDU1 VUxMCisjZGVmaW5lIFBBSVJfTUFTS18xIDB4MzNVTEwKKyNkZWZpbmUgTllCTF9NQVNLXzEgMHgw ZlVMTAorI2RlZmluZSBCWVRFX01BU0tfMSAweDAwVUxMCisjZGVmaW5lIEhBTEZfTUFTS18xIDB4 MDBVTEwKKworc2l6ZTR1X3QgcmV2ZXJzZV9iaXRzXzEoc2l6ZTF1X3Qgc3JjKQoreworICAgIHNy YyA9ICgoc3JjID4+IDEpICYgQklUU19NQVNLXzEpIHwgKChzcmMgJiBCSVRTX01BU0tfMSkgPDwg MSk7CisgICAgc3JjID0gKChzcmMgPj4gMikgJiBQQUlSX01BU0tfMSkgfCAoKHNyYyAmIFBBSVJf TUFTS18xKSA8PCAyKTsKKyAgICBzcmMgPSAoKHNyYyA+PiA0KSAmIE5ZQkxfTUFTS18xKSB8ICgo c3JjICYgTllCTF9NQVNLXzEpIDw8IDQpOworICAgIHJldHVybiBzcmM7Cit9CisKK3NpemU4dV90 IGV4Y2hhbmdlKHNpemU4dV90IGJpdHMsIHNpemU0dV90IGNudHJsKQoreworICAgIGludCBpOwor ICAgIHNpemU0dV90IG1hc2sgPSAxIDw8IDMxOworICAgIHNpemU4dV90IG1hc2swID0gMHgxTEwg PDwgNjI7CisgICAgc2l6ZTh1X3QgbWFzazEgPSAweDJMTCA8PCA2MjsKKyAgICBzaXplOHVfdCBv dXRiaXRzID0gMDsKKyAgICBzaXplOHVfdCBiMCwgYjE7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwg MzI7IGkrKykgeworICAgICAgICBiMCA9IChiaXRzICYgbWFzazApID4+ICgyICogaSk7CisgICAg ICAgIGIxID0gKGJpdHMgJiBtYXNrMSkgPj4gKDIgKiBpKTsKKyAgICAgICAgaWYgKGNudHJsICYg bWFzaykgeworICAgICAgICAgICAgb3V0Yml0cyB8PSAoYjEgPj4gMSkgfCAoYjAgPDwgMSk7Cisg ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBvdXRiaXRzIHw9IChiMSB8IGIwKTsKKyAgICAg ICAgfQorICAgICAgICBvdXRiaXRzIDw8PSAyOworICAgICAgICBtYXNrID4+PSAxOworICAgICAg ICBtYXNrMCA+Pj0gMjsKKyAgICAgICAgbWFzazEgPj49IDI7CisgICAgfQorICAgIHJldHVybiBv dXRiaXRzOworfQorCitzaXplOHVfdCBpbnRlcmxlYXZlKHNpemU0dV90IG9kZCwgc2l6ZTR1X3Qg ZXZlbikKK3sKKyAgICAvKiBDb252ZXJ0IHRvIGxvbmcgbG9uZyAqLworICAgIHNpemU4dV90IG15 b2RkID0gb2RkOworICAgIHNpemU4dV90IG15ZXZlbiA9IGV2ZW47CisgICAgLyogRmlyc3QsIHNw cmVhZCBiaXRzIG91dCAqLworICAgIG15b2RkID0gKG15b2RkIHwgKG15b2RkIDw8IDE2KSkgJiBI QUxGX01BU0tfODsKKyAgICBteWV2ZW4gPSAobXlldmVuIHwgKG15ZXZlbiA8PCAxNikpICYgSEFM Rl9NQVNLXzg7CisgICAgbXlvZGQgPSAobXlvZGQgfCAobXlvZGQgPDwgOCkpICYgQllURV9NQVNL Xzg7CisgICAgbXlldmVuID0gKG15ZXZlbiB8IChteWV2ZW4gPDwgOCkpICYgQllURV9NQVNLXzg7 CisgICAgbXlvZGQgPSAobXlvZGQgfCAobXlvZGQgPDwgNCkpICYgTllCTF9NQVNLXzg7CisgICAg bXlldmVuID0gKG15ZXZlbiB8IChteWV2ZW4gPDwgNCkpICYgTllCTF9NQVNLXzg7CisgICAgbXlv ZGQgPSAobXlvZGQgfCAobXlvZGQgPDwgMikpICYgUEFJUl9NQVNLXzg7CisgICAgbXlldmVuID0g KG15ZXZlbiB8IChteWV2ZW4gPDwgMikpICYgUEFJUl9NQVNLXzg7CisgICAgbXlvZGQgPSAobXlv ZGQgfCAobXlvZGQgPDwgMSkpICYgQklUU19NQVNLXzg7CisgICAgbXlldmVuID0gKG15ZXZlbiB8 IChteWV2ZW4gPDwgMSkpICYgQklUU19NQVNLXzg7CisgICAgLyogTm93IE9SIHRvZ2V0aGVyICov CisgICAgcmV0dXJuIG15ZXZlbiB8IChteW9kZCA8PCAxKTsKK30KKworc2l6ZTh1X3QgZGVpbnRl cmxlYXZlKHNpemU4dV90IHNyYykKK3sKKyAgICAvKiBHZXQgb2RkIGFuZCBldmVuIGJpdHMgKi8K KyAgICBzaXplOHVfdCBteW9kZCA9ICgoc3JjID4+IDEpICYgQklUU19NQVNLXzgpOworICAgIHNp emU4dV90IG15ZXZlbiA9IChzcmMgJiBCSVRTX01BU0tfOCk7CisKKyAgICAvKiBVbnNwcmVhZCBi aXRzICovCisgICAgbXlldmVuID0gKG15ZXZlbiB8IChteWV2ZW4gPj4gMSkpICYgUEFJUl9NQVNL Xzg7CisgICAgbXlvZGQgPSAobXlvZGQgfCAobXlvZGQgPj4gMSkpICYgUEFJUl9NQVNLXzg7Cisg ICAgbXlldmVuID0gKG15ZXZlbiB8IChteWV2ZW4gPj4gMikpICYgTllCTF9NQVNLXzg7CisgICAg bXlvZGQgPSAobXlvZGQgfCAobXlvZGQgPj4gMikpICYgTllCTF9NQVNLXzg7CisgICAgbXlldmVu ID0gKG15ZXZlbiB8IChteWV2ZW4gPj4gNCkpICYgQllURV9NQVNLXzg7CisgICAgbXlvZGQgPSAo bXlvZGQgfCAobXlvZGQgPj4gNCkpICYgQllURV9NQVNLXzg7CisgICAgbXlldmVuID0gKG15ZXZl biB8IChteWV2ZW4gPj4gOCkpICYgSEFMRl9NQVNLXzg7CisgICAgbXlvZGQgPSAobXlvZGQgfCAo bXlvZGQgPj4gOCkpICYgSEFMRl9NQVNLXzg7CisgICAgbXlldmVuID0gKG15ZXZlbiB8IChteWV2 ZW4gPj4gMTYpKSAmIFdPUkRfTUFTS184OworICAgIG15b2RkID0gKG15b2RkIHwgKG15b2RkID4+ IDE2KSkgJiBXT1JEX01BU0tfODsKKworICAgIC8qIFJldHVybiBvZGQgYml0cyBpbiB1cHBlciBo YWxmICovCisgICAgcmV0dXJuIG15ZXZlbiB8IChteW9kZCA8PCAzMik7Cit9CisKK3NpemU0dV90 IGNhcnJ5X2Zyb21fYWRkNjQoc2l6ZTh1X3QgYSwgc2l6ZTh1X3QgYiwgc2l6ZTR1X3QgYykKK3sK KyAgICBzaXplOHVfdCB0bXBhLCB0bXBiLCB0bXBjOworICAgIHRtcGEgPSBmR0VUVVdPUkQoMCwg YSk7CisgICAgdG1wYiA9IGZHRVRVV09SRCgwLCBiKTsKKyAgICB0bXBjID0gdG1wYSArIHRtcGIg KyBjOworICAgIHRtcGEgPSBmR0VUVVdPUkQoMSwgYSk7CisgICAgdG1wYiA9IGZHRVRVV09SRCgx LCBiKTsKKyAgICB0bXBjID0gdG1wYSArIHRtcGIgKyBmR0VUVVdPUkQoMSwgdG1wYyk7CisgICAg dG1wYyA9IGZHRVRVV09SRCgxLCB0bXBjKTsKKyAgICByZXR1cm4gdG1wYzsKK30KKworc2l6ZTRz X3QgY29udl9yb3VuZChzaXplNHNfdCBhLCBpbnQgbikKK3sKKyAgICBzaXplOHNfdCB2YWw7CisK KyAgICBpZiAobiA9PSAwKSB7CisgICAgICAgIHZhbCA9IGE7CisgICAgfSBlbHNlIGlmICgoYSAm ICgoMSA8PCAobiAtIDEpKSAtIDEpKSA9PSAwKSB7ICAgIC8qIE4tMS4uMCBhbGwgemVybz8gKi8K KyAgICAgICAgLyogQWRkIExTQiBmcm9tIGludCBwYXJ0ICovCisgICAgICAgIHZhbCA9ICgoZlNF MzJfNjQoYSkpICsgKHNpemU4c190KSAoKChzaXplNHVfdCkgKCgxIDw8IG4pICYgYSkpID4+IDEp KTsKKyAgICB9IGVsc2UgeworICAgICAgICB2YWwgPSAoKGZTRTMyXzY0KGEpKSArICgxIDw8IChu IC0gMSkpKTsKKyAgICB9CisKKyAgICB2YWwgPSB2YWwgPj4gbjsKKyAgICByZXR1cm4gKHNpemU0 c190KXZhbDsKK30KKworc2l6ZTE2c190IGNhc3Q4c190b18xNnMoc2l6ZThzX3QgYSkKK3sKKyAg ICBzaXplMTZzX3QgcmVzdWx0ID0gey5oaSA9IDAsIC5sbyA9IDB9OworICAgIHJlc3VsdC5sbyA9 IGE7CisgICAgaWYgKGEgPCAwKSB7CisgICAgICAgIHJlc3VsdC5oaSA9IC0xOworICAgIH0KKyAg ICByZXR1cm4gcmVzdWx0OworfQorCitzaXplOHNfdCBjYXN0MTZzX3RvXzhzKHNpemUxNnNfdCBh KQoreworICAgIHJldHVybiBhLmxvOworfQorCitzaXplNHNfdCBjYXN0MTZzX3RvXzRzKHNpemUx NnNfdCBhKQoreworICAgIHJldHVybiAoc2l6ZTRzX3QpYS5sbzsKK30KKworc2l6ZTE2c190IGFk ZDEyOChzaXplMTZzX3QgYSwgc2l6ZTE2c190IGIpCit7CisgICAgc2l6ZTE2c190IHJlc3VsdCA9 IHsuaGkgPSAwLCAubG8gPSAwfTsKKyAgICByZXN1bHQubG8gPSBhLmxvICsgYi5sbzsKKyAgICBy ZXN1bHQuaGkgPSBhLmhpICsgYi5oaTsKKworICAgIGlmIChyZXN1bHQubG8gPCBiLmxvKSB7Cisg ICAgICAgIHJlc3VsdC5oaSsrOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3Np emUxNnNfdCBzdWIxMjgoc2l6ZTE2c190IGEsIHNpemUxNnNfdCBiKQoreworICAgIHNpemUxNnNf dCByZXN1bHQgPSB7LmhpID0gMCwgLmxvID0gMH07CisgICAgcmVzdWx0LmxvID0gYS5sbyAtIGIu bG87CisgICAgcmVzdWx0LmhpID0gYS5oaSAtIGIuaGk7CisgICAgaWYgKHJlc3VsdC5sbyA+IGEu bG8pIHsKKyAgICAgICAgcmVzdWx0LmhpLS07CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsK K30KKworc2l6ZTE2c190IHNoaWZ0cjEyOChzaXplMTZzX3QgYSwgc2l6ZTR1X3QgbikKK3sKKyAg ICBzaXplMTZzX3QgcmVzdWx0OworICAgIHJlc3VsdC5sbyA9IChhLmxvID4+IG4pIHwgKGEuaGkg PDwgKDY0IC0gbikpOworICAgIHJlc3VsdC5oaSA9IGEuaGkgPj4gbjsKKyAgICByZXR1cm4gcmVz dWx0OworfQorCitzaXplMTZzX3Qgc2hpZnRsMTI4KHNpemUxNnNfdCBhLCBzaXplNHVfdCBuKQor eworICAgIHNpemUxNnNfdCByZXN1bHQ7CisgICAgcmVzdWx0LmxvID0gYS5sbyA8PCBuOworICAg IHJlc3VsdC5oaSA9IChhLmhpIDw8IG4pIHwgKGEubG8gPj4gKDY0IC0gbikpOworICAgIHJldHVy biByZXN1bHQ7Cit9CisKK3NpemUxNnNfdCBhbmQxMjgoc2l6ZTE2c190IGEsIHNpemUxNnNfdCBi KQoreworICAgIHNpemUxNnNfdCByZXN1bHQ7CisgICAgcmVzdWx0LmxvID0gYS5sbyAmIGIubG87 CisgICAgcmVzdWx0LmhpID0gYS5oaSAmIGIuaGk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor LyogRmxvYXRpbmcgUG9pbnQgU3R1ZmYgKi8KKworc3RhdGljIGNvbnN0IGludCByb3VuZGluZ21v ZGVzW10gPSB7CisgICAgRkVfVE9ORUFSRVNULAorICAgIEZFX1RPV0FSRFpFUk8sCisgICAgRkVf RE9XTldBUkQsCisgICAgRkVfVVBXQVJECit9OworCit2b2lkIGFyY2hfZnBvcF9zdGFydChDUFVI ZXhhZ29uU3RhdGUgKmVudikKK3sKKyAgICBmZWdldGVudigmZW52LT5mZW52KTsKKyAgICBmZWNs ZWFyZXhjZXB0KEZFX0FMTF9FWENFUFQpOworICAgIGZlc2V0cm91bmQocm91bmRpbmdtb2Rlc1tm UkVBRF9SRUdfRklFTEQoVVNSLCBVU1JfRlBSTkQpXSk7Cit9CisKKyNkZWZpbmUgTk9USElORyAg ICAgICAgICAgICAvKiBEb24ndCBkbyBhbnl0aGluZyAqLworCisjZGVmaW5lIFRFU1RfRkxBRyhM SUJDRiwgTVlGLCBNWUUpIFwKKyAgICBkbyB7IFwKKyAgICAgICAgaWYgKGZldGVzdGV4Y2VwdChM SUJDRikpIHsgXAorICAgICAgICAgICAgaWYgKEdFVF9VU1JfRklFTEQoVVNSXyMjTVlGKSA9PSAw KSB7IFwKKyAgICAgICAgICAgICAgICBTRVRfVVNSX0ZJRUxEKFVTUl8jI01ZRiwgMSk7IFwKKyAg ICAgICAgICAgICAgICBpZiAoR0VUX1VTUl9GSUVMRChVU1JfIyNNWUUpKSB7IFwKKyAgICAgICAg ICAgICAgICAgICAgTk9USElORyBcCisgICAgICAgICAgICAgICAgfSBcCisgICAgICAgICAgICB9 IFwKKyAgICAgICAgfSBcCisgICAgfSB3aGlsZSAoMCkKKwordm9pZCBhcmNoX2Zwb3BfZW5kKENQ VUhleGFnb25TdGF0ZSAqZW52KQoreworICAgIGlmIChmZXRlc3RleGNlcHQoRkVfQUxMX0VYQ0VQ VCkpIHsKKyAgICAgICAgVEVTVF9GTEFHKEZFX0lORVhBQ1QsIEZQSU5QRiwgRlBJTlBFKTsKKyAg ICAgICAgVEVTVF9GTEFHKEZFX0RJVkJZWkVSTywgRlBEQlpGLCBGUERCWkUpOworICAgICAgICBU RVNUX0ZMQUcoRkVfSU5WQUxJRCwgRlBJTlZGLCBGUElOVkUpOworICAgICAgICBURVNUX0ZMQUco RkVfT1ZFUkZMT1csIEZQT1ZGRiwgRlBPVkZFKTsKKyAgICAgICAgVEVTVF9GTEFHKEZFX1VOREVS RkxPVywgRlBVTkZGLCBGUFVORkUpOworICAgIH0KKyAgICBmZXNldGVudigmZW52LT5mZW52KTsK K30KKworI3VuZGVmIFRFU1RfRkxBRworCisKK3ZvaWQgYXJjaF9yYWlzZV9mcGZsYWcodW5zaWdu ZWQgaW50IGZsYWdzKQoreworICAgIGZlcmFpc2VleGNlcHQoZmxhZ3MpOworfQorCitpbnQgYXJj aF9zZl9yZWNpcF9jb21tb24oc2l6ZTRzX3QgKlJzLCBzaXplNHNfdCAqUnQsIHNpemU0c190ICpS ZCwgaW50ICphZGp1c3QpCit7CisgICAgaW50IG5fY2xhc3M7CisgICAgaW50IGRfY2xhc3M7Cisg ICAgaW50IG5fZXhwOworICAgIGludCBkX2V4cDsKKyAgICBpbnQgcmV0ID0gMDsKKyAgICBzaXpl NHNfdCBSc1YsIFJ0ViwgUmRWOworICAgIGludCBQZVYgPSAwOworICAgIFJzViA9ICpSczsKKyAg ICBSdFYgPSAqUnQ7CisgICAgbl9jbGFzcyA9IGZwY2xhc3NpZnkoZkZMT0FUKFJzVikpOworICAg IGRfY2xhc3MgPSBmcGNsYXNzaWZ5KGZGTE9BVChSdFYpKTsKKyAgICBpZiAoKG5fY2xhc3MgPT0g RlBfTkFOKSAmJiAoZF9jbGFzcyA9PSBGUF9OQU4pKSB7CisgICAgICAgIGlmIChmR0VUQklUKDIy LCBSc1YgJiBSdFYpID09IDApIHsKKyAgICAgICAgICAgIGZSQUlTRUZMQUdTKEZFX0lOVkFMSUQp OworICAgICAgICB9CisgICAgICAgIFJkViA9IFJzViA9IFJ0ViA9IGZTRk5BTlZBTCgpOworICAg IH0gZWxzZSBpZiAobl9jbGFzcyA9PSBGUF9OQU4pIHsKKyAgICAgICAgaWYgKGZHRVRCSVQoMjIs IFJzVikgPT0gMCkgeworICAgICAgICAgICAgZlJBSVNFRkxBR1MoRkVfSU5WQUxJRCk7CisgICAg ICAgIH0KKyAgICAgICAgUmRWID0gUnNWID0gUnRWID0gZlNGTkFOVkFMKCk7CisgICAgfSBlbHNl IGlmIChkX2NsYXNzID09IEZQX05BTikgeworICAgICAgICAvKiBFSlA6IG9yIHB1dCBOYU4gaW4g bnVtL2RlbiBmaXh1cD8gKi8KKyAgICAgICAgaWYgKGZHRVRCSVQoMjIsIFJ0VikgPT0gMCkgewor ICAgICAgICAgICAgZlJBSVNFRkxBR1MoRkVfSU5WQUxJRCk7CisgICAgICAgIH0KKyAgICAgICAg UmRWID0gUnNWID0gUnRWID0gZlNGTkFOVkFMKCk7CisgICAgfSBlbHNlIGlmICgobl9jbGFzcyA9 PSBGUF9JTkZJTklURSkgJiYgKGRfY2xhc3MgPT0gRlBfSU5GSU5JVEUpKSB7CisgICAgICAgIC8q IEVKUDogb3IgcHV0IEluZiBpbiBudW0gZml4dXA/ICovCisgICAgICAgIFJkViA9IFJzViA9IFJ0 ViA9IGZTRk5BTlZBTCgpOworICAgICAgICBmUkFJU0VGTEFHUyhGRV9JTlZBTElEKTsKKyAgICB9 IGVsc2UgaWYgKChuX2NsYXNzID09IEZQX1pFUk8pICYmIChkX2NsYXNzID09IEZQX1pFUk8pKSB7 CisgICAgICAgIC8qIEVKUDogb3IgcHV0IHplcm8gaW4gbnVtIGZpeHVwPyAqLworICAgICAgICBS ZFYgPSBSc1YgPSBSdFYgPSBmU0ZOQU5WQUwoKTsKKyAgICAgICAgZlJBSVNFRkxBR1MoRkVfSU5W QUxJRCk7CisgICAgfSBlbHNlIGlmIChkX2NsYXNzID09IEZQX1pFUk8pIHsKKyAgICAgICAgLyog RUpQOiBvciBwdXQgSW5mIGluIG51bSBmaXh1cD8gKi8KKyAgICAgICAgUnNWID0gZlNGSU5GVkFM KFJzViBeIFJ0Vik7CisgICAgICAgIFJ0ViA9IGZTRk9ORVZBTCgwKTsKKyAgICAgICAgUmRWID0g ZlNGT05FVkFMKDApOworICAgICAgICBpZiAobl9jbGFzcyAhPSBGUF9JTkZJTklURSkgeworICAg ICAgICAgICAgZlJBSVNFRkxBR1MoRkVfRElWQllaRVJPKTsKKyAgICAgICAgfQorICAgIH0gZWxz ZSBpZiAoZF9jbGFzcyA9PSBGUF9JTkZJTklURSkgeworICAgICAgICBSc1YgPSAweDgwMDAwMDAw ICYgKFJzViBeIFJ0Vik7CisgICAgICAgIFJ0ViA9IGZTRk9ORVZBTCgwKTsKKyAgICAgICAgUmRW ID0gZlNGT05FVkFMKDApOworICAgIH0gZWxzZSBpZiAobl9jbGFzcyA9PSBGUF9aRVJPKSB7Cisg ICAgICAgIC8qIEVKUDogRG9lcyB0aGlzIGp1c3Qgd29yayBpdHNlbGYgb3V0PyAqLworICAgICAg ICAvKiBFSlA6IE5vLCAwL0luZiBjYXVzZXMgcHJvYmxlbXMuICovCisgICAgICAgIFJzViA9IDB4 ODAwMDAwMDAgJiAoUnNWIF4gUnRWKTsKKyAgICAgICAgUnRWID0gZlNGT05FVkFMKDApOworICAg ICAgICBSZFYgPSBmU0ZPTkVWQUwoMCk7CisgICAgfSBlbHNlIGlmIChuX2NsYXNzID09IEZQX0lO RklOSVRFKSB7CisgICAgICAgIC8qIEVKUDogRG9lcyB0aGlzIGp1c3Qgd29yayBpdHNlbGYgb3V0 PyAqLworICAgICAgICBSc1YgPSBmU0ZJTkZWQUwoUnNWIF4gUnRWKTsKKyAgICAgICAgUnRWID0g ZlNGT05FVkFMKDApOworICAgICAgICBSZFYgPSBmU0ZPTkVWQUwoMCk7CisgICAgfSBlbHNlIHsK KyAgICAgICAgUGVWID0gMHgwMDsKKyAgICAgICAgLyogQmFzaWMgY2hlY2tzIHBhc3NlZCAqLwor ICAgICAgICBuX2V4cCA9IGZTRl9HRVRFWFAoUnNWKTsKKyAgICAgICAgZF9leHAgPSBmU0ZfR0VU RVhQKFJ0Vik7CisgICAgICAgIGlmICgobl9leHAgLSBkX2V4cCArIGZTRl9CSUFTKCkpIDw9IGZT Rl9NQU5UQklUUygpKSB7CisgICAgICAgICAgICAvKiBOZWFyIHF1b3RpZW50IHVuZGVyZmxvdyAv IGluZXhhY3QgUSAqLworICAgICAgICAgICAgUGVWID0gMHg4MDsKKyAgICAgICAgICAgIFJ0ViA9 IGZTRl9NVUxfUE9XMihSdFYsIC02NCk7CisgICAgICAgICAgICBSc1YgPSBmU0ZfTVVMX1BPVzIo UnNWLCA2NCk7CisgICAgICAgIH0gZWxzZSBpZiAoKG5fZXhwIC0gZF9leHAgKyBmU0ZfQklBUygp KSA+IChmU0ZfTUFYRVhQKCkgLSAyNCkpIHsKKyAgICAgICAgICAgIC8qIE5lYXIgcXVvdGllbnQg b3ZlcmZsb3cgKi8KKyAgICAgICAgICAgIFBlViA9IDB4NDA7CisgICAgICAgICAgICBSdFYgPSBm U0ZfTVVMX1BPVzIoUnRWLCAzMik7CisgICAgICAgICAgICBSc1YgPSBmU0ZfTVVMX1BPVzIoUnNW LCAtMzIpOworICAgICAgICB9IGVsc2UgaWYgKG5fZXhwIDw9IGZTRl9NQU5UQklUUygpICsgMikg eworICAgICAgICAgICAgUnRWID0gZlNGX01VTF9QT1cyKFJ0ViwgNjQpOworICAgICAgICAgICAg UnNWID0gZlNGX01VTF9QT1cyKFJzViwgNjQpOworICAgICAgICB9IGVsc2UgaWYgKGRfZXhwIDw9 IDEpIHsKKyAgICAgICAgICAgIFJ0ViA9IGZTRl9NVUxfUE9XMihSdFYsIDMyKTsKKyAgICAgICAg ICAgIFJzViA9IGZTRl9NVUxfUE9XMihSc1YsIDMyKTsKKyAgICAgICAgfSBlbHNlIGlmIChkX2V4 cCA+IDI1MikgeworICAgICAgICAgICAgUnRWID0gZlNGX01VTF9QT1cyKFJ0ViwgLTMyKTsKKyAg ICAgICAgICAgIFJzViA9IGZTRl9NVUxfUE9XMihSc1YsIC0zMik7CisgICAgICAgIH0KKyAgICAg ICAgUmRWID0gMDsKKyAgICAgICAgcmV0ID0gMTsKKyAgICB9CisgICAgKlJzID0gUnNWOworICAg ICpSdCA9IFJ0VjsKKyAgICAqUmQgPSBSZFY7CisgICAgKmFkanVzdCA9IFBlVjsKKyAgICByZXR1 cm4gcmV0OworfQorCitpbnQgYXJjaF9zZl9pbnZzcXJ0X2NvbW1vbihzaXplNHNfdCAqUnMsIHNp emU0c190ICpSZCwgaW50ICphZGp1c3QpCit7CisgICAgaW50IHJfY2xhc3M7CisgICAgc2l6ZTRz X3QgUnNWLCBSZFY7CisgICAgaW50IFBlViA9IDA7CisgICAgaW50IHJfZXhwOworICAgIGludCBy ZXQgPSAwOworICAgIFJzViA9ICpSczsKKyAgICByX2NsYXNzID0gZnBjbGFzc2lmeShmRkxPQVQo UnNWKSk7CisgICAgaWYgKHJfY2xhc3MgPT0gRlBfTkFOKSB7CisgICAgICAgIGlmIChmR0VUQklU KDIyLCBSc1YpID09IDApIHsKKyAgICAgICAgICAgIGZSQUlTRUZMQUdTKEZFX0lOVkFMSUQpOwor ICAgICAgICB9CisgICAgICAgIFJkViA9IFJzViA9IGZTRk5BTlZBTCgpOworICAgIH0gZWxzZSBp ZiAoZkZMT0FUKFJzVikgPCAwLjApIHsKKyAgICAgICAgLyogTmVnYXRpdmUgbm9uemVybyB2YWx1 ZXMgYXJlIE5hTiAqLworICAgICAgICBmUkFJU0VGTEFHUyhGRV9JTlZBTElEKTsKKyAgICAgICAg UnNWID0gZlNGTkFOVkFMKCk7CisgICAgICAgIFJkViA9IGZTRk5BTlZBTCgpOworICAgIH0gZWxz ZSBpZiAocl9jbGFzcyA9PSBGUF9JTkZJTklURSkgeworICAgICAgICAvKiBFSlA6IG9yIHB1dCBJ bmYgaW4gbnVtIGZpeHVwPyAqLworICAgICAgICBSc1YgPSBmU0ZJTkZWQUwoLTEpOworICAgICAg ICBSZFYgPSBmU0ZJTkZWQUwoLTEpOworICAgIH0gZWxzZSBpZiAocl9jbGFzcyA9PSBGUF9aRVJP KSB7CisgICAgICAgIC8qIEVKUDogb3IgcHV0IHplcm8gaW4gbnVtIGZpeHVwPyAqLworICAgICAg ICBSc1YgPSBSc1Y7CisgICAgICAgIFJkViA9IGZTRk9ORVZBTCgwKTsKKyAgICB9IGVsc2Ugewor ICAgICAgICBQZVYgPSAweDAwOworICAgICAgICAvKiBCYXNpYyBjaGVja3MgcGFzc2VkICovCisg ICAgICAgIHJfZXhwID0gZlNGX0dFVEVYUChSc1YpOworICAgICAgICBpZiAocl9leHAgPD0gMjQp IHsKKyAgICAgICAgICAgIFJzViA9IGZTRl9NVUxfUE9XMihSc1YsIDY0KTsKKyAgICAgICAgICAg IFBlViA9IDB4ZTA7CisgICAgICAgIH0KKyAgICAgICAgUmRWID0gMDsKKyAgICAgICAgcmV0ID0g MTsKKyAgICB9CisgICAgKlJzID0gUnNWOworICAgICpSZCA9IFJkVjsKKyAgICAqYWRqdXN0ID0g UGVWOworICAgIHJldHVybiByZXQ7Cit9CisKK2ludCBhcmNoX3JlY2lwX2xvb2t1cChpbnQgaW5k ZXgpCit7CisgICAgaW5kZXggJj0gMHg3ZjsKKyAgICB1bnNpZ25lZCBjb25zdCBpbnQgcm91bmRy b21bMTI4XSA9IHsKKyAgICAgICAgMHgwZmUsIDB4MGZhLCAweDBmNiwgMHgwZjIsIDB4MGVmLCAw eDBlYiwgMHgwZTcsIDB4MGU0LAorICAgICAgICAweDBlMCwgMHgwZGQsIDB4MGQ5LCAweDBkNiwg MHgwZDIsIDB4MGNmLCAweDBjYywgMHgwYzksCisgICAgICAgIDB4MGM2LCAweDBjMiwgMHgwYmYs IDB4MGJjLCAweDBiOSwgMHgwYjYsIDB4MGIzLCAweDBiMSwKKyAgICAgICAgMHgwYWUsIDB4MGFi LCAweDBhOCwgMHgwYTUsIDB4MGEzLCAweDBhMCwgMHgwOWQsIDB4MDliLAorICAgICAgICAweDA5 OCwgMHgwOTYsIDB4MDkzLCAweDA5MSwgMHgwOGUsIDB4MDhjLCAweDA4YSwgMHgwODcsCisgICAg ICAgIDB4MDg1LCAweDA4MywgMHgwODAsIDB4MDdlLCAweDA3YywgMHgwN2EsIDB4MDc4LCAweDA3 NSwKKyAgICAgICAgMHgwNzMsIDB4MDcxLCAweDA2ZiwgMHgwNmQsIDB4MDZiLCAweDA2OSwgMHgw NjcsIDB4MDY1LAorICAgICAgICAweDA2MywgMHgwNjEsIDB4MDVmLCAweDA1ZSwgMHgwNWMsIDB4 MDVhLCAweDA1OCwgMHgwNTYsCisgICAgICAgIDB4MDU0LCAweDA1MywgMHgwNTEsIDB4MDRmLCAw eDA0ZSwgMHgwNGMsIDB4MDRhLCAweDA0OSwKKyAgICAgICAgMHgwNDcsIDB4MDQ1LCAweDA0NCwg MHgwNDIsIDB4MDQwLCAweDAzZiwgMHgwM2QsIDB4MDNjLAorICAgICAgICAweDAzYSwgMHgwMzks IDB4MDM3LCAweDAzNiwgMHgwMzQsIDB4MDMzLCAweDAzMiwgMHgwMzAsCisgICAgICAgIDB4MDJm LCAweDAyZCwgMHgwMmMsIDB4MDJiLCAweDAyOSwgMHgwMjgsIDB4MDI3LCAweDAyNSwKKyAgICAg ICAgMHgwMjQsIDB4MDIzLCAweDAyMSwgMHgwMjAsIDB4MDFmLCAweDAxZSwgMHgwMWMsIDB4MDFi LAorICAgICAgICAweDAxYSwgMHgwMTksIDB4MDE3LCAweDAxNiwgMHgwMTUsIDB4MDE0LCAweDAx MywgMHgwMTIsCisgICAgICAgIDB4MDExLCAweDAwZiwgMHgwMGUsIDB4MDBkLCAweDAwYywgMHgw MGIsIDB4MDBhLCAweDAwOSwKKyAgICAgICAgMHgwMDgsIDB4MDA3LCAweDAwNiwgMHgwMDUsIDB4 MDA0LCAweDAwMywgMHgwMDIsIDB4MDAwLAorICAgIH07CisgICAgcmV0dXJuIHJvdW5kcm9tW2lu ZGV4XTsKK307CisKK2ludCBhcmNoX2ludnNxcnRfbG9va3VwKGludCBpbmRleCkKK3sKKyAgICBp bmRleCAmPSAweDdmOworICAgIHVuc2lnbmVkIGNvbnN0IGludCByb3VuZHJvbVsxMjhdID0gewor ICAgICAgICAweDA2OSwgMHgwNjYsIDB4MDYzLCAweDA2MSwgMHgwNWUsIDB4MDViLCAweDA1OSwg MHgwNTcsCisgICAgICAgIDB4MDU0LCAweDA1MiwgMHgwNTAsIDB4MDRkLCAweDA0YiwgMHgwNDks IDB4MDQ3LCAweDA0NSwKKyAgICAgICAgMHgwNDMsIDB4MDQxLCAweDAzZiwgMHgwM2QsIDB4MDNi LCAweDAzOSwgMHgwMzcsIDB4MDM2LAorICAgICAgICAweDAzNCwgMHgwMzIsIDB4MDMwLCAweDAy ZiwgMHgwMmQsIDB4MDJjLCAweDAyYSwgMHgwMjgsCisgICAgICAgIDB4MDI3LCAweDAyNSwgMHgw MjQsIDB4MDIyLCAweDAyMSwgMHgwMWYsIDB4MDFlLCAweDAxZCwKKyAgICAgICAgMHgwMWIsIDB4 MDFhLCAweDAxOSwgMHgwMTcsIDB4MDE2LCAweDAxNSwgMHgwMTQsIDB4MDEyLAorICAgICAgICAw eDAxMSwgMHgwMTAsIDB4MDBmLCAweDAwZCwgMHgwMGMsIDB4MDBiLCAweDAwYSwgMHgwMDksCisg ICAgICAgIDB4MDA4LCAweDAwNywgMHgwMDYsIDB4MDA1LCAweDAwNCwgMHgwMDMsIDB4MDAyLCAw eDAwMSwKKyAgICAgICAgMHgwZmUsIDB4MGZhLCAweDBmNiwgMHgwZjMsIDB4MGVmLCAweDBlYiwg MHgwZTgsIDB4MGU0LAorICAgICAgICAweDBlMSwgMHgwZGUsIDB4MGRiLCAweDBkNywgMHgwZDQs IDB4MGQxLCAweDBjZSwgMHgwY2IsCisgICAgICAgIDB4MGM5LCAweDBjNiwgMHgwYzMsIDB4MGMw LCAweDBiZSwgMHgwYmIsIDB4MGI4LCAweDBiNiwKKyAgICAgICAgMHgwYjMsIDB4MGIxLCAweDBh ZiwgMHgwYWMsIDB4MGFhLCAweDBhOCwgMHgwYTUsIDB4MGEzLAorICAgICAgICAweDBhMSwgMHgw OWYsIDB4MDlkLCAweDA5YiwgMHgwOTksIDB4MDk3LCAweDA5NSwgMHgwOTMsCisgICAgICAgIDB4 MDkxLCAweDA4ZiwgMHgwOGQsIDB4MDhiLCAweDA4OSwgMHgwODcsIDB4MDg2LCAweDA4NCwKKyAg ICAgICAgMHgwODIsIDB4MDgwLCAweDA3ZiwgMHgwN2QsIDB4MDdiLCAweDA3YSwgMHgwNzgsIDB4 MDc3LAorICAgICAgICAweDA3NSwgMHgwNzQsIDB4MDcyLCAweDA3MSwgMHgwNmYsIDB4MDZlLCAw eDA2YywgMHgwNmIsCisgICAgfTsKKyAgICByZXR1cm4gcm91bmRyb21baW5kZXhdOworfTsKKwpk aWZmIC0tZ2l0IGEvdGFyZ2V0L2hleGFnb24vY29udl9lbXUuYyBiL3RhcmdldC9oZXhhZ29uL2Nv bnZfZW11LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjMxZmYzMgotLS0g L2Rldi9udWxsCisrKyBiL3RhcmdldC9oZXhhZ29uL2NvbnZfZW11LmMKQEAgLTAsMCArMSwzNjkg QEAKKy8qCisgKiAgQ29weXJpZ2h0KGMpIDIwMTktMjAyMCBRdWFsY29tbSBJbm5vdmF0aW9uIENl bnRlciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICog IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMg cHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZl cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl ciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hv dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5n bnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlICJx ZW11L29zZGVwLmgiCisjaW5jbHVkZSAiaGV4X2FyY2hfdHlwZXMuaCIKKyNpbmNsdWRlICJtYWNy b3MuaCIKKyNpbmNsdWRlICJjb252X2VtdS5oIgorCisjZGVmaW5lIGlzeihYKSAoZnBjbGFzc2lm eShYKSA9PSBGUF9aRVJPKQorI2RlZmluZSBERl9CSUFTIDEwMjMKKyNkZWZpbmUgU0ZfQklBUyAx MjcKKworI2RlZmluZSBMTF9NQVhfUE9TIDB4N2ZmZmZmZmZmZmZmZmZmZlVMTAorI2RlZmluZSBN QVhfUE9TIDB4N2ZmZmZmZmZVCisKKyNpZmRlZiBWQ1BQCisvKgorICogVmlzdWFsIEMgaXNuJ3Qg R05VIEMgYW5kIGRvZXNuJ3QgaGF2ZSBfX2J1aWx0aW5fY2x6bGwKKyAqLworCitzdGF0aWMgaW50 IF9fYnVpbHRpbl9jbHpsbCh1bnNpZ25lZCBsb25nIGxvbmcgaW50IGlucHV0KQoreworICAgIGlu dCB0b3RhbCA9IDA7CisgICAgaWYgKGlucHV0ID09IDApIHsKKyAgICAgICAgcmV0dXJuIDY0Owor ICAgIH0KKyAgICB0b3RhbCArPSAoKGlucHV0ID4+ICh0b3RhbCArIDMyKSkgIT0gMCkgPyAzMiA6 IDA7CisgICAgdG90YWwgKz0gKChpbnB1dCA+PiAodG90YWwgKyAxNikpICE9IDApID8gMTYgOiAw OworICAgIHRvdGFsICs9ICgoaW5wdXQgPj4gKHRvdGFsICsgIDgpKSAhPSAwKSA/ICA4IDogMDsK KyAgICB0b3RhbCArPSAoKGlucHV0ID4+ICh0b3RhbCArICA0KSkgIT0gMCkgPyAgNCA6IDA7Cisg ICAgdG90YWwgKz0gKChpbnB1dCA+PiAodG90YWwgKyAgMikpICE9IDApID8gIDIgOiAwOworICAg IHRvdGFsICs9ICgoaW5wdXQgPj4gKHRvdGFsICsgIDEpKSAhPSAwKSA/ICAxIDogMDsKKyAgICBy ZXR1cm4gNjMgLSB0b3RhbDsKK30KKyNlbmRpZgorCit0eXBlZGVmIHVuaW9uIHsKKyAgICBkb3Vi bGUgZjsKKyAgICBzaXplOHVfdCBpOworICAgIHN0cnVjdCB7CisgICAgICAgIHNpemU4dV90IG1h bnQ6NTI7CisgICAgICAgIHNpemU4dV90IGV4cDoxMTsKKyAgICAgICAgc2l6ZTh1X3Qgc2lnbjox OworICAgIH0geDsKK30gZGZfdDsKKworCit0eXBlZGVmIHVuaW9uIHsKKyAgICBmbG9hdCBmOwor ICAgIHNpemU0dV90IGk7CisgICAgc3RydWN0IHsKKyAgICAgICAgc2l6ZTR1X3QgbWFudDoyMzsK KyAgICAgICAgc2l6ZTR1X3QgZXhwOjg7CisgICAgICAgIHNpemU0dV90IHNpZ246MTsKKyAgICB9 IHg7Cit9IHNmX3Q7CisKKworI2RlZmluZSBNQUtFX0NPTlZfOFVfVE9fWEZfTihGTE9BVElELCBC SUdGTE9BVElELCBSRVRUWVBFKSBcCitzdGF0aWMgUkVUVFlQRSBjb252Xzh1X3RvXyMjRkxPQVRJ RCMjX24oc2l6ZTh1X3QgaW4sIGludCBuZWdhdGUpIFwKK3sgXAorICAgIEZMT0FUSUQjI190IHg7 IFwKKyAgICBzaXplOHVfdCB0bXAsIHRydW5jYml0cywgc2hhbXQ7IFwKKyAgICBpbnQgbGVhZGlu Z196ZXJvczsgXAorICAgIGlmIChpbiA9PSAwKSB7IFwKKyAgICAgICAgcmV0dXJuIDAuMDsgXAor ICAgIH0gXAorICAgIGxlYWRpbmdfemVyb3MgPSBfX2J1aWx0aW5fY2x6bGwoaW4pOyBcCisgICAg dG1wID0gaW4gPDwgKGxlYWRpbmdfemVyb3MpOyBcCisgICAgdG1wIDw8PSAxOyBcCisgICAgc2hh bXQgPSA2NCAtIGYjI0JJR0ZMT0FUSUQjI19NQU5UQklUUygpOyBcCisgICAgdHJ1bmNiaXRzID0g dG1wICYgKCgxVUxMIDw8IChzaGFtdCkpIC0gMSk7IFwKKyAgICB0bXAgPj49IHNoYW10OyBcCisg ICAgaWYgKHRydW5jYml0cyAhPSAwKSB7IFwKKyAgICAgICAgZmVyYWlzZWV4Y2VwdChGRV9JTkVY QUNUKTsgXAorICAgICAgICBzd2l0Y2ggKGZlZ2V0cm91bmQoKSkgeyBcCisgICAgICAgIGNhc2Ug RkVfVE9XQVJEWkVSTzogXAorICAgICAgICAgICAgYnJlYWs7IFwKKyAgICAgICAgY2FzZSBGRV9E T1dOV0FSRDogXAorICAgICAgICAgICAgaWYgKG5lZ2F0ZSkgeyBcCisgICAgICAgICAgICAgICAg dG1wICs9IDE7IFwKKyAgICAgICAgICAgIH0gXAorICAgICAgICAgICAgYnJlYWs7IFwKKyAgICAg ICAgY2FzZSBGRV9VUFdBUkQ6IFwKKyAgICAgICAgICAgIGlmICghbmVnYXRlKSB7IFwKKyAgICAg ICAgICAgICAgICB0bXAgKz0gMTsgXAorICAgICAgICAgICAgfSBcCisgICAgICAgICAgICBicmVh azsgXAorICAgICAgICBkZWZhdWx0OiBcCisgICAgICAgICAgICBpZiAoKHRydW5jYml0cyAmICgo MVVMTCA8PCAoc2hhbXQgLSAxKSkgLSAxKSkgPT0gMCkgeyBcCisgICAgICAgICAgICAgICAgdG1w ICs9ICh0bXAgJiAxKTsgXAorICAgICAgICAgICAgfSBlbHNlIHsgXAorICAgICAgICAgICAgICAg IHRtcCArPSAoKHRydW5jYml0cyA+PiAoc2hhbXQgLSAxKSkgJiAxKTsgXAorICAgICAgICAgICAg fSBcCisgICAgICAgICAgICBicmVhazsgXAorICAgICAgICB9IFwKKyAgICB9IFwKKyAgICBpZiAo KCh0bXAgPDwgc2hhbXQpID4+IHNoYW10KSAhPSB0bXApIHsgXAorICAgICAgICBsZWFkaW5nX3pl cm9zLS07IFwKKyAgICB9IFwKKyAgICB4LngubWFudCA9IHRtcDsgXAorICAgIHgueC5leHAgPSBC SUdGTE9BVElEIyNfQklBUyArIGYjI0JJR0ZMT0FUSUQjI19NQU5UQklUUygpIC0gXAorICAgICAg ICAgICAgICBsZWFkaW5nX3plcm9zICsgc2hhbXQgLSAxOyBcCisgICAgeC54LnNpZ24gPSBuZWdh dGU7IFwKKyAgICByZXR1cm4geC5mOyBcCit9CisKK01BS0VfQ09OVl84VV9UT19YRl9OKGRmLCBE RiwgZG91YmxlKQorTUFLRV9DT05WXzhVX1RPX1hGX04oc2YsIFNGLCBmbG9hdCkKKworZG91Ymxl IGNvbnZfOHVfdG9fZGYoc2l6ZTh1X3QgaW4pCit7CisgICAgcmV0dXJuIGNvbnZfOHVfdG9fZGZf bihpbiwgMCk7Cit9CisKK2RvdWJsZSBjb252XzhzX3RvX2RmKHNpemU4c190IGluKQoreworICAg IGlmIChpbiA9PSAweDgwMDAwMDAwMDAwMDAwMDApIHsKKyAgICAgICAgcmV0dXJuIC0weDFwNjM7 CisgICAgfQorICAgIGlmIChpbiA8IDApIHsKKyAgICAgICAgcmV0dXJuIGNvbnZfOHVfdG9fZGZf bigtaW4sIDEpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBjb252Xzh1X3RvX2RmX24o aW4sIDApOworICAgIH0KK30KKworZG91YmxlIGNvbnZfNHVfdG9fZGYoc2l6ZTR1X3QgaW4pCit7 CisgICAgcmV0dXJuIGNvbnZfOHVfdG9fZGYoKHNpemU4dV90KSBpbik7Cit9CisKK2RvdWJsZSBj b252XzRzX3RvX2RmKHNpemU0c190IGluKQoreworICAgIHJldHVybiBjb252XzhzX3RvX2RmKGlu KTsKK30KKworZmxvYXQgY29udl84dV90b19zZihzaXplOHVfdCBpbikKK3sKKyAgICByZXR1cm4g Y29udl84dV90b19zZl9uKGluLCAwKTsKK30KKworZmxvYXQgY29udl84c190b19zZihzaXplOHNf dCBpbikKK3sKKyAgICBpZiAoaW4gPT0gMHg4MDAwMDAwMDAwMDAwMDAwKSB7CisgICAgICAgIHJl dHVybiAtMHgxcDYzOworICAgIH0KKyAgICBpZiAoaW4gPCAwKSB7CisgICAgICAgIHJldHVybiBj b252Xzh1X3RvX3NmX24oLWluLCAxKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gY29u dl84dV90b19zZl9uKGluLCAwKTsKKyAgICB9Cit9CisKK2Zsb2F0IGNvbnZfNHVfdG9fc2Yoc2l6 ZTR1X3QgaW4pCit7CisgICAgcmV0dXJuIGNvbnZfOHVfdG9fc2YoaW4pOworfQorCitmbG9hdCBj b252XzRzX3RvX3NmKHNpemU0c190IGluKQoreworICAgIHJldHVybiBjb252XzhzX3RvX3NmKGlu KTsKK30KKworCitzdGF0aWMgc2l6ZTh1X3QgY29udl9kZl90b184dV9uKGRvdWJsZSBpbiwgaW50 IHdpbGxfbmVnYXRlKQoreworICAgIGRmX3QgeDsKKyAgICBpbnQgZnJhY3NoaWZ0LCBlbmRzaGlm dDsKKyAgICBzaXplOHVfdCB0bXAsIHRydW5jYml0czsKKyAgICB4LmYgPSBpbjsKKyAgICBpZiAo aXNpbmYoaW4pKSB7CisgICAgICAgIGZlcmFpc2VleGNlcHQoRkVfSU5WQUxJRCk7CisgICAgICAg IGlmIChpbiA+IDAuMCkgeworICAgICAgICAgICAgcmV0dXJuIH4wVUxMOworICAgICAgICB9IGVs c2UgeworICAgICAgICAgICAgcmV0dXJuIDBVTEw7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYg KGlzbmFuKGluKSkgeworICAgICAgICBmZXJhaXNlZXhjZXB0KEZFX0lOVkFMSUQpOworICAgICAg ICByZXR1cm4gfjBVTEw7CisgICAgfQorICAgIGlmIChpc3ooaW4pKSB7CisgICAgICAgIHJldHVy biAwOworICAgIH0KKyAgICBpZiAoeC54LnNpZ24pIHsKKyAgICAgICAgZmVyYWlzZWV4Y2VwdChG RV9JTlZBTElEKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmIChpbiA8IDAuNSkg eworICAgICAgICAvKiBOZWFyIHplcm8sIGNhcHR1cmVzIGxhcmdlIGZyYWNzaGlmdHMsIGRlbm9y bXMsIGV0YyAqLworICAgICAgICBmZXJhaXNlZXhjZXB0KEZFX0lORVhBQ1QpOworICAgICAgICBz d2l0Y2ggKGZlZ2V0cm91bmQoKSkgeworICAgICAgICBjYXNlIEZFX0RPV05XQVJEOgorICAgICAg ICAgICAgaWYgKHdpbGxfbmVnYXRlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAg ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAg fQorICAgICAgICBjYXNlIEZFX1VQV0FSRDoKKyAgICAgICAgICAgIGlmICghd2lsbF9uZWdhdGUp IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6Cisg ICAgICAgICAgICByZXR1cm4gMDsgICAgLyogbmVhcmVzdCBvciB0b3dhcmRzIHplcm8gKi8KKyAg ICAgICAgfQorICAgIH0KKyAgICBpZiAoKHgueC5leHAgLSBERl9CSUFTKSA+PSA2NCkgeworICAg ICAgICAvKiB3YXkgdG9vIGJpZyAqLworICAgICAgICBmZXJhaXNlZXhjZXB0KEZFX0lOVkFMSUQp OworICAgICAgICByZXR1cm4gfjBVTEw7CisgICAgfQorICAgIGZyYWNzaGlmdCA9IGZNQVgoMCwg KGZERl9NQU5UQklUUygpIC0gKHgueC5leHAgLSBERl9CSUFTKSkpOworICAgIGVuZHNoaWZ0ID0g Zk1BWCgwLCAoKHgueC5leHAgLSBERl9CSUFTIC0gZkRGX01BTlRCSVRTKCkpKSk7CisgICAgdG1w ID0geC54Lm1hbnQgfCAoMVVMTCA8PCBmREZfTUFOVEJJVFMoKSk7CisgICAgdHJ1bmNiaXRzID0g dG1wICYgKCgxVUxMIDw8IGZyYWNzaGlmdCkgLSAxKTsKKyAgICB0bXAgPj49IGZyYWNzaGlmdDsK KyAgICBpZiAodHJ1bmNiaXRzKSB7CisgICAgICAgIC8qIEFwcGx5IFJvdW5kaW5nICovCisgICAg ICAgIGZlcmFpc2VleGNlcHQoRkVfSU5FWEFDVCk7CisgICAgICAgIHN3aXRjaCAoZmVnZXRyb3Vu ZCgpKSB7CisgICAgICAgIGNhc2UgRkVfVE9XQVJEWkVSTzoKKyAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICBjYXNlIEZFX0RPV05XQVJEOgorICAgICAgICAgICAgaWYgKHdpbGxfbmVnYXRlKSB7 CisgICAgICAgICAgICAgICAgdG1wICs9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgY2FzZSBGRV9VUFdBUkQ6CisgICAgICAgICAgICBpZiAoIXdpbGxfbmVn YXRlKSB7CisgICAgICAgICAgICAgICAgdG1wICs9IDE7CisgICAgICAgICAgICB9CisgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGlmICgodHJ1bmNiaXRz ICYgKCgxVUxMIDw8IChmcmFjc2hpZnQgLSAxKSkgLSAxKSkgPT0gMCkgeworICAgICAgICAgICAg ICAgIC8qIEV4YWN0bHkgLjUgKi8KKyAgICAgICAgICAgICAgICB0bXAgKz0gKHRtcCAmIDEpOwor ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB0bXAgKz0gKCh0cnVuY2JpdHMg Pj4gKGZyYWNzaGlmdCAtIDEpKSAmIDEpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg fQorICAgIC8qCisgICAgICogSWYgd2UgYWRkZWQgb25lIGFuZCBpdCBjYXJyaWVkIGFsbCB0aGUg d2F5IG91dCwKKyAgICAgKiBjaGVjayB0byBzZWUgaWYgb3ZlcmZsb3cKKyAgICAgKi8KKyAgICBp ZiAoKHRtcCAmICgoMVVMTCA8PCAoZkRGX01BTlRCSVRTKCkgKyAxKSkgLSAxKSkgPT0gMCkgewor ICAgICAgICBpZiAoKHgueC5leHAgLSBERl9CSUFTKSA9PSA2MykgeworICAgICAgICAgICAgZmVj bGVhcmV4Y2VwdChGRV9JTkVYQUNUKTsKKyAgICAgICAgICAgIGZlcmFpc2VleGNlcHQoRkVfSU5W QUxJRCk7CisgICAgICAgICAgICByZXR1cm4gfjBVTEw7CisgICAgICAgIH0KKyAgICB9CisgICAg dG1wIDw8PSBlbmRzaGlmdDsKKyAgICByZXR1cm4gdG1wOworfQorCitzdGF0aWMgc2l6ZTR1X3Qg Y29udl9kZl90b180dV9uKGRvdWJsZSBpbiwgaW50IHdpbGxfbmVnYXRlKQoreworICAgIHNpemU4 dV90IHRtcDsKKyAgICB0bXAgPSBjb252X2RmX3RvXzh1X24oaW4sIHdpbGxfbmVnYXRlKTsKKyAg ICBpZiAodG1wID4gMHgwMDAwMDAwMGZmZmZmZmZmVUxMKSB7CisgICAgICAgIGZlY2xlYXJleGNl cHQoRkVfSU5FWEFDVCk7CisgICAgICAgIGZlcmFpc2VleGNlcHQoRkVfSU5WQUxJRCk7CisgICAg ICAgIHJldHVybiB+MFU7CisgICAgfQorICAgIHJldHVybiAoc2l6ZTR1X3QpdG1wOworfQorCitz aXplOHVfdCBjb252X2RmX3RvXzh1KGRvdWJsZSBpbikKK3sKKyAgICByZXR1cm4gY29udl9kZl90 b184dV9uKGluLCAwKTsKK30KKworc2l6ZTR1X3QgY29udl9kZl90b180dShkb3VibGUgaW4pCit7 CisgICAgcmV0dXJuIGNvbnZfZGZfdG9fNHVfbihpbiwgMCk7Cit9CisKK3NpemU4c190IGNvbnZf ZGZfdG9fOHMoZG91YmxlIGluKQoreworICAgIHNpemU4dV90IHRtcDsKKyAgICBkZl90IHg7Cisg ICAgeC5mID0gaW47CisgICAgaWYgKGlzbmFuKGluKSkgeworICAgICAgICBmZXJhaXNlZXhjZXB0 KEZFX0lOVkFMSUQpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGlmICh4Lnguc2ln bikgeworICAgICAgICB0bXAgPSBjb252X2RmX3RvXzh1X24oLWluLCAxKTsKKyAgICB9IGVsc2Ug eworICAgICAgICB0bXAgPSBjb252X2RmX3RvXzh1X24oaW4sIDApOworICAgIH0KKyAgICBpZiAo dG1wID4gKExMX01BWF9QT1MgKyB4Lnguc2lnbikpIHsKKyAgICAgICAgZmVjbGVhcmV4Y2VwdChG RV9JTkVYQUNUKTsKKyAgICAgICAgZmVyYWlzZWV4Y2VwdChGRV9JTlZBTElEKTsKKyAgICAgICAg dG1wID0gKExMX01BWF9QT1MgKyB4Lnguc2lnbik7CisgICAgfQorICAgIGlmICh4Lnguc2lnbikg eworICAgICAgICByZXR1cm4gLXRtcDsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gdG1w OworICAgIH0KK30KKworc2l6ZTRzX3QgY29udl9kZl90b180cyhkb3VibGUgaW4pCit7CisgICAg c2l6ZTh1X3QgdG1wOworICAgIGRmX3QgeDsKKyAgICB4LmYgPSBpbjsKKyAgICBpZiAoaXNuYW4o aW4pKSB7CisgICAgICAgIGZlcmFpc2VleGNlcHQoRkVfSU5WQUxJRCk7CisgICAgICAgIHJldHVy biAtMTsKKyAgICB9CisgICAgaWYgKHgueC5zaWduKSB7CisgICAgICAgIHRtcCA9IGNvbnZfZGZf dG9fOHVfbigtaW4sIDEpOworICAgIH0gZWxzZSB7CisgICAgICAgIHRtcCA9IGNvbnZfZGZfdG9f OHVfbihpbiwgMCk7CisgICAgfQorICAgIGlmICh0bXAgPiAoTUFYX1BPUyArIHgueC5zaWduKSkg eworICAgICAgICBmZWNsZWFyZXhjZXB0KEZFX0lORVhBQ1QpOworICAgICAgICBmZXJhaXNlZXhj ZXB0KEZFX0lOVkFMSUQpOworICAgICAgICB0bXAgPSAoTUFYX1BPUyArIHgueC5zaWduKTsKKyAg ICB9CisgICAgaWYgKHgueC5zaWduKSB7CisgICAgICAgIHJldHVybiAtdG1wOworICAgIH0gZWxz ZSB7CisgICAgICAgIHJldHVybiB0bXA7CisgICAgfQorfQorCitzaXplOHVfdCBjb252X3NmX3Rv Xzh1KGZsb2F0IGluKQoreworICAgIHJldHVybiBjb252X2RmX3RvXzh1KGluKTsKK30KKworc2l6 ZTR1X3QgY29udl9zZl90b180dShmbG9hdCBpbikKK3sKKyAgICByZXR1cm4gY29udl9kZl90b180 dShpbik7Cit9CisKK3NpemU4c190IGNvbnZfc2ZfdG9fOHMoZmxvYXQgaW4pCit7CisgICAgcmV0 dXJuIGNvbnZfZGZfdG9fOHMoaW4pOworfQorCitzaXplNHNfdCBjb252X3NmX3RvXzRzKGZsb2F0 IGluKQoreworICAgIHJldHVybiBjb252X2RmX3RvXzRzKGluKTsKK30KKwpkaWZmIC0tZ2l0IGEv dGFyZ2V0L2hleGFnb24vZm1hX2VtdS5jIGIvdGFyZ2V0L2hleGFnb24vZm1hX2VtdS5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxY2NhODMKLS0tIC9kZXYvbnVsbAorKysg Yi90YXJnZXQvaGV4YWdvbi9mbWFfZW11LmMKQEAgLTAsMCArMSw5MTYgQEAKKy8qCisgKiAgQ29w eXJpZ2h0KGMpIDIwMTktMjAyMCBRdWFsY29tbSBJbm5vdmF0aW9uIENlbnRlciwgSW5jLiBBbGwg UmlnaHRzIFJlc2VydmVkLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cisg KiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUg TGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK KyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2 ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdp dGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2Vz Lz4uCisgKi8KKworI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlICJxZW11L29zZGVwLmgiCisj aW5jbHVkZSAibWFjcm9zLmgiCisjaW5jbHVkZSAiY29udl9lbXUuaCIKKyNpbmNsdWRlICJmbWFf ZW11LmgiCisKKyNkZWZpbmUgREZfSU5GX0VYUCAweDdmZgorI2RlZmluZSBERl9CSUFTIDEwMjMK KworI2RlZmluZSBTRl9JTkZfRVhQIDB4ZmYKKyNkZWZpbmUgU0ZfQklBUyAxMjcKKworI2RlZmlu ZSBIRl9JTkZfRVhQIDB4MWYKKyNkZWZpbmUgSEZfQklBUyAxNQorCisjZGVmaW5lIFdBWV9CSUdf RVhQIDQwOTYKKworI2RlZmluZSBpc3ooWCkgKGZwY2xhc3NpZnkoWCkgPT0gRlBfWkVSTykKKwor I2RlZmluZSBkZWJ1Z19mcHJpbnRmKC4uLikgICAgLyogbm90aGluZyAqLworCit0eXBlZGVmIHVu aW9uIHsKKyAgICBkb3VibGUgZjsKKyAgICBzaXplOHVfdCBpOworICAgIHN0cnVjdCB7CisgICAg ICAgIHNpemU4dV90IG1hbnQ6NTI7CisgICAgICAgIHNpemU4dV90IGV4cDoxMTsKKyAgICAgICAg c2l6ZTh1X3Qgc2lnbjoxOworICAgIH0geDsKK30gZGZfdDsKKwordHlwZWRlZiB1bmlvbiB7Cisg ICAgZmxvYXQgZjsKKyAgICBzaXplNHVfdCBpOworICAgIHN0cnVjdCB7CisgICAgICAgIHNpemU0 dV90IG1hbnQ6MjM7CisgICAgICAgIHNpemU0dV90IGV4cDo4OworICAgICAgICBzaXplNHVfdCBz aWduOjE7CisgICAgfSB4OworfSBzZl90OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgdW5pb24g eworICAgICAgICBzaXplOHVfdCBsb3c7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBz aXplNHVfdCB3MDsKKyAgICAgICAgICAgIHNpemU0dV90IHcxOworICAgICAgICB9OworICAgIH07 CisgICAgdW5pb24geworICAgICAgICBzaXplOHVfdCBoaWdoOworICAgICAgICBzdHJ1Y3Qgewor ICAgICAgICAgICAgc2l6ZTR1X3QgdzM7CisgICAgICAgICAgICBzaXplNHVfdCB3MjsKKyAgICAg ICAgfTsKKyAgICB9OworfSBpbnQxMjhfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGludDEy OF90IG1hbnQ7CisgICAgc2l6ZTRzX3QgZXhwOworICAgIHNpemUxdV90IHNpZ247CisgICAgc2l6 ZTF1X3QgZ3VhcmQ7CisgICAgc2l6ZTF1X3Qgcm91bmQ7CisgICAgc2l6ZTF1X3Qgc3RpY2t5Owor fSB4Zl90OworCitzdGF0aWMgaW5saW5lIHZvaWQgeGZfZGVidWcoY29uc3QgY2hhciAqbXNnLCB4 Zl90IGEpCit7CisgICAgZGVidWdfZnByaW50ZihzdGRvdXQsICIlcyAlYzB4JTAxNmxseF8lMDE2 bGx4IC8lZC8lZC8lZCBwJWRcbiIsIG1zZywKKyAgICAgICAgICAgICAgICAgIGEuc2lnbiA/ICct JyA6ICcrJywgYS5tYW50LmhpZ2gsIGEubWFudC5sb3csIGEuZ3VhcmQsCisgICAgICAgICAgICAg ICAgICBhLnJvdW5kLCBhLnN0aWNreSwgYS5leHApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQg eGZfaW5pdCh4Zl90ICpwKQoreworICAgIHAtPm1hbnQubG93ID0gMDsKKyAgICBwLT5tYW50Lmhp Z2ggPSAwOworICAgIHAtPmV4cCA9IDA7CisgICAgcC0+c2lnbiA9IDA7CisgICAgcC0+Z3VhcmQg PSAwOworICAgIHAtPnJvdW5kID0gMDsKKyAgICBwLT5zdGlja3kgPSAwOworfQorCitzdGF0aWMg aW5saW5lIHNpemU4dV90IGRmX2dldG1hbnQoZGZfdCBhKQoreworICAgIGludCBjbGFzcyA9IGZw Y2xhc3NpZnkoYS5mKTsKKyAgICBzd2l0Y2ggKGNsYXNzKSB7CisgICAgY2FzZSBGUF9OT1JNQUw6 CisgICAgcmV0dXJuIGEueC5tYW50IHwgMVVMTCA8PCA1MjsKKyAgICBjYXNlIEZQX1pFUk86Cisg ICAgICAgIHJldHVybiAwOworICAgIGNhc2UgRlBfU1VCTk9STUFMOgorICAgICAgICByZXR1cm4g YS54Lm1hbnQ7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH07Cit9CisK K3N0YXRpYyBpbmxpbmUgc2l6ZTRzX3QgZGZfZ2V0ZXhwKGRmX3QgYSkKK3sKKyAgICBpbnQgY2xh c3MgPSBmcGNsYXNzaWZ5KGEuZik7CisgICAgc3dpdGNoIChjbGFzcykgeworICAgIGNhc2UgRlBf Tk9STUFMOgorICAgICAgICByZXR1cm4gYS54LmV4cDsKKyAgICBjYXNlIEZQX1NVQk5PUk1BTDoK KyAgICAgICAgcmV0dXJuIGEueC5leHAgKyAxOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVy biAtMTsKKyAgICB9OworfQorCitzdGF0aWMgaW5saW5lIHNpemU4dV90IHNmX2dldG1hbnQoc2Zf dCBhKQoreworICAgIGludCBjbGFzcyA9IGZwY2xhc3NpZnkoYS5mKTsKKyAgICBzd2l0Y2ggKGNs YXNzKSB7CisgICAgY2FzZSBGUF9OT1JNQUw6CisgICAgICAgIHJldHVybiBhLngubWFudCB8IDFV TEwgPDwgMjM7CisgICAgY2FzZSBGUF9aRVJPOgorICAgICAgICByZXR1cm4gMDsKKyAgICBjYXNl IEZQX1NVQk5PUk1BTDoKKyAgICAgICAgcmV0dXJuIGEueC5tYW50IHwgMFVMTDsKKyAgICBkZWZh dWx0OgorICAgICAgICByZXR1cm4gLTE7CisgICAgfTsKK30KKworc3RhdGljIGlubGluZSBzaXpl NHNfdCBzZl9nZXRleHAoc2ZfdCBhKQoreworICAgIGludCBjbGFzcyA9IGZwY2xhc3NpZnkoYS5m KTsKKyAgICBzd2l0Y2ggKGNsYXNzKSB7CisgICAgY2FzZSBGUF9OT1JNQUw6CisgICAgICAgIHJl dHVybiBhLnguZXhwOworICAgIGNhc2UgRlBfU1VCTk9STUFMOgorICAgICAgICByZXR1cm4gYS54 LmV4cCArIDE7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH07Cit9CisK K3N0YXRpYyBpbmxpbmUgaW50MTI4X3QgaW50MTI4X211bF82NDY0KHNpemU4dV90IGFpLCBzaXpl OHVfdCBiaSkKK3sKKyAgICBpbnQxMjhfdCByZXQ7CisgICAgaW50MTI4X3QgYSwgYjsKKyAgICBz aXplOHVfdCBwcDAsIHBwMWEsIHBwMWIsIHBwMXMsIHBwMjsKKworICAgIGRlYnVnX2ZwcmludGYo c3Rkb3V0LCAiYWkvYmk6IDB4JTAxNmxseC8weCUwMTZsbHhcbiIsIGFpLCBiaSk7CisKKyAgICBh LmhpZ2ggPSBiLmhpZ2ggPSAwOworICAgIGEubG93ID0gYWk7CisgICAgYi5sb3cgPSBiaTsKKyAg ICBwcDAgPSAoc2l6ZTh1X3QpYS53MCAqIChzaXplOHVfdCliLncwOworICAgIHBwMWEgPSAoc2l6 ZTh1X3QpYS53MSAqIChzaXplOHVfdCliLncwOworICAgIHBwMWIgPSAoc2l6ZTh1X3QpYi53MSAq IChzaXplOHVfdClhLncwOworICAgIHBwMiA9IChzaXplOHVfdClhLncxICogKHNpemU4dV90KWIu dzE7CisKKyAgICBkZWJ1Z19mcHJpbnRmKHN0ZG91dCwKKyAgICAgICAgICAgICAgICAgICJwcDIv MWIvMWEvMDogMHglMDE2bGx4LzB4JTAxNmxseC8weCUwMTZsbHgvMHglMDE2bGx4XG4iLAorICAg ICAgICAgICAgICAgICAgcHAyLCBwcDFiLCBwcDFhLCBwcDApOworCisgICAgcHAxcyA9IHBwMWEg KyBwcDFiOworICAgIGlmICgocHAxcyA8IHBwMWEpIHx8IChwcDFzIDwgcHAxYikpIHsKKyAgICAg ICAgcHAyICs9ICgxVUxMIDw8IDMyKTsKKyAgICB9CisgICAgcmV0LmxvdyA9IHBwMCArIChwcDFz IDw8IDMyKTsKKyAgICBpZiAoKHJldC5sb3cgPCBwcDApIHx8IChyZXQubG93IDwgKHBwMXMgPDwg MzIpKSkgeworICAgICAgICBwcDIgKz0gMTsKKyAgICB9CisgICAgcmV0LmhpZ2ggPSBwcDIgKyAo cHAxcyA+PiAzMik7CisKKyAgICBkZWJ1Z19mcHJpbnRmKHN0ZG91dCwKKyAgICAgICAgICAgICAg ICAgICJwcDFzL3JldGhpL3JldGxvOiAweCUwMTZsbHgvMHglMDE2bGx4LzB4JTAxNmxseFxuIiwK KyAgICAgICAgICAgICAgICAgIHBwMXMsIHJldC5oaWdoLCByZXQubG93KTsKKworICAgIHJldHVy biByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50MTI4X3QgaW50MTI4X3NobChpbnQxMjhfdCBh LCBzaXplNHVfdCBhbXQpCit7CisgICAgaW50MTI4X3QgcmV0OworICAgIGlmIChhbXQgPT0gMCkg eworICAgICAgICByZXR1cm4gYTsKKyAgICB9CisgICAgaWYgKGFtdCA+IDEyOCkgeworICAgICAg ICByZXQuaGlnaCA9IDA7CisgICAgICAgIHJldC5sb3cgPSAwOworICAgICAgICByZXR1cm4gcmV0 OworICAgIH0KKyAgICBpZiAoYW10ID49IDY0KSB7CisgICAgICAgIGFtdCAtPSA2NDsKKyAgICAg ICAgYS5oaWdoID0gYS5sb3c7CisgICAgICAgIGEubG93ID0gMDsKKyAgICB9CisgICAgcmV0Lmhp Z2ggPSBhLmhpZ2ggPDwgYW10OworICAgIHJldC5oaWdoIHw9IChhLmxvdyA+PiAoNjQgLSBhbXQp KTsKKyAgICByZXQubG93ID0gYS5sb3cgPDwgYW10OworICAgIHJldHVybiByZXQ7Cit9CisKK3N0 YXRpYyBpbmxpbmUgaW50MTI4X3QgaW50MTI4X3NocihpbnQxMjhfdCBhLCBzaXplNHVfdCBhbXQp Cit7CisgICAgaW50MTI4X3QgcmV0OworICAgIGlmIChhbXQgPT0gMCkgeworICAgICAgICByZXR1 cm4gYTsKKyAgICB9CisgICAgaWYgKGFtdCA+IDEyOCkgeworICAgICAgICByZXQuaGlnaCA9IDA7 CisgICAgICAgIHJldC5sb3cgPSAwOworICAgICAgICByZXR1cm4gcmV0OworICAgIH0KKyAgICBp ZiAoYW10ID49IDY0KSB7CisgICAgICAgIGFtdCAtPSA2NDsKKyAgICAgICAgYS5sb3cgPSBhLmhp Z2g7CisgICAgICAgIGEuaGlnaCA9IDA7CisgICAgfQorICAgIHJldC5sb3cgPSBhLmxvdyA+PiBh bXQ7CisgICAgcmV0LmxvdyB8PSAoYS5oaWdoIDw8ICg2NCAtIGFtdCkpOworICAgIHJldC5oaWdo ID0gYS5oaWdoID4+IGFtdDsKKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIGlu dDEyOF90IGludDEyOF9hZGQoaW50MTI4X3QgYSwgaW50MTI4X3QgYikKK3sKKyAgICBpbnQxMjhf dCByZXQ7CisgICAgcmV0LmxvdyA9IGEubG93ICsgYi5sb3c7CisgICAgaWYgKChyZXQubG93IDwg YS5sb3cpIHx8IChyZXQubG93IDwgYi5sb3cpKSB7CisgICAgICAgIC8qIGNhcnJ5IGludG8gaGln aCBwYXJ0ICovCisgICAgICAgIGEuaGlnaCArPSAxOworICAgIH0KKyAgICByZXQuaGlnaCA9IGEu aGlnaCArIGIuaGlnaDsKKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIGludDEy OF90IGludDEyOF9zdWIoaW50MTI4X3QgYSwgaW50MTI4X3QgYiwgaW50IGJvcnJvdykKK3sKKyAg ICBpbnQxMjhfdCByZXQ7CisgICAgcmV0LmxvdyA9IGEubG93IC0gYi5sb3c7CisgICAgaWYgKHJl dC5sb3cgPiBhLmxvdykgeworICAgICAgICAvKiBib3Jyb3cgaW50byBoaWdoIHBhcnQgKi8KKyAg ICAgICAgYS5oaWdoIC09IDE7CisgICAgfQorICAgIHJldC5oaWdoID0gYS5oaWdoIC0gYi5oaWdo OworICAgIGlmIChib3Jyb3cgPT0gMCkgeworICAgICAgICByZXR1cm4gcmV0OworICAgIH0gZWxz ZSB7CisgICAgICAgIGEuaGlnaCA9IDA7CisgICAgICAgIGEubG93ID0gMTsKKyAgICAgICAgcmV0 dXJuIGludDEyOF9zdWIocmV0LCBhLCAwKTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50 IGludDEyOF9ndChpbnQxMjhfdCBhLCBpbnQxMjhfdCBiKQoreworICAgIGlmIChhLmhpZ2ggPT0g Yi5oaWdoKSB7CisgICAgICAgIHJldHVybiBhLmxvdyA+IGIubG93OworICAgIH0KKyAgICByZXR1 cm4gYS5oaWdoID4gYi5oaWdoOworfQorCitzdGF0aWMgaW5saW5lIHhmX3QgeGZfbm9ybV9sZWZ0 KHhmX3QgYSkKK3sKKyAgICBhLmV4cC0tOworICAgIGEubWFudCA9IGludDEyOF9zaGwoYS5tYW50 LCAxKTsKKyAgICBhLm1hbnQubG93IHw9IGEuZ3VhcmQ7CisgICAgYS5ndWFyZCA9IGEucm91bmQ7 CisgICAgYS5yb3VuZCA9IGEuc3RpY2t5OworICAgIHJldHVybiBhOworfQorCitzdGF0aWMgaW5s aW5lIHhmX3QgeGZfbm9ybV9yaWdodCh4Zl90IGEsIGludCBhbXQpCit7CisgICAgaWYgKGFtdCA+ IDEzMCkgeworICAgICAgICBhLnN0aWNreSB8PQorICAgICAgICAgICAgYS5yb3VuZCB8IGEuZ3Vh cmQgfCAoYS5tYW50LmxvdyAhPSAwKSB8IChhLm1hbnQuaGlnaCAhPSAwKTsKKyAgICAgICAgYS5n dWFyZCA9IGEucm91bmQgPSBhLm1hbnQuaGlnaCA9IGEubWFudC5sb3cgPSAwOworICAgICAgICBh LmV4cCArPSBhbXQ7CisgICAgICAgIHJldHVybiBhOworCisgICAgfQorICAgIHdoaWxlIChhbXQg Pj0gNjQpIHsKKyAgICAgICAgYS5zdGlja3kgfD0gYS5yb3VuZCB8IGEuZ3VhcmQgfCAoYS5tYW50 LmxvdyAhPSAwKTsKKyAgICAgICAgYS5ndWFyZCA9IChhLm1hbnQubG93ID4+IDYzKSAmIDE7Cisg ICAgICAgIGEucm91bmQgPSAoYS5tYW50LmxvdyA+PiA2MikgJiAxOworICAgICAgICBhLm1hbnQu bG93ID0gYS5tYW50LmhpZ2g7CisgICAgICAgIGEubWFudC5oaWdoID0gMDsKKyAgICAgICAgYS5l eHAgKz0gNjQ7CisgICAgICAgIGFtdCAtPSA2NDsKKyAgICB9CisgICAgd2hpbGUgKGFtdCA+IDAp IHsKKyAgICAgICAgYS5leHArKzsKKyAgICAgICAgYS5zdGlja3kgfD0gYS5yb3VuZDsKKyAgICAg ICAgYS5yb3VuZCA9IGEuZ3VhcmQ7CisgICAgICAgIGEuZ3VhcmQgPSBhLm1hbnQubG93ICYgMTsK KyAgICAgICAgYS5tYW50ID0gaW50MTI4X3NocihhLm1hbnQsIDEpOworICAgICAgICBhbXQtLTsK KyAgICB9CisgICAgcmV0dXJuIGE7Cit9CisKKworLyoKKyAqIE9uIHRoZSBhZGQvc3ViLCB3ZSBu ZWVkIHRvIGJlIGFibGUgdG8gc2hpZnQgb3V0IGxvdHMgb2YgYml0cywgYnV0IG5lZWQgYQorICog c3RpY2t5IGJpdCBmb3Igd2hhdCB3YXMgc2hpZnRlZCBvdXQsIEkgdGhpbmsuCisgKi8KK3N0YXRp YyB4Zl90IHhmX2FkZCh4Zl90IGEsIHhmX3QgYik7CisKK3N0YXRpYyBpbmxpbmUgeGZfdCB4Zl9z dWIoeGZfdCBhLCB4Zl90IGIsIGludCBuZWdhdGUpCit7CisgICAgeGZfdCByZXQ7CisgICAgeGZf aW5pdCgmcmV0KTsKKyAgICBpbnQgYm9ycm93OworCisgICAgeGZfZGVidWcoIi0tPlN1Yi9hOiAi LCBhKTsKKyAgICB4Zl9kZWJ1ZygiLS0+U3ViL2I6ICIsIGIpOworCisgICAgaWYgKGEuc2lnbiAh PSBiLnNpZ24pIHsKKyAgICAgICAgYi5zaWduID0gIWIuc2lnbjsKKyAgICAgICAgcmV0dXJuIHhm X2FkZChhLCBiKTsKKyAgICB9CisgICAgaWYgKGIuZXhwID4gYS5leHApIHsKKyAgICAgICAgLyog c21hbGwgLSBiaWcgPT0gLSAoYmlnIC0gc21hbGwpICovCisgICAgICAgIHJldHVybiB4Zl9zdWIo YiwgYSwgIW5lZ2F0ZSk7CisgICAgfQorICAgIGlmICgoYi5leHAgPT0gYS5leHApICYmIChpbnQx MjhfZ3QoYi5tYW50LCBhLm1hbnQpKSkgeworICAgICAgICAvKiBzbWFsbCAtIGJpZyA9PSAtIChi aWcgLSBzbWFsbCkgKi8KKyAgICAgICAgcmV0dXJuIHhmX3N1YihiLCBhLCAhbmVnYXRlKTsKKyAg ICB9CisKKyAgICB4Zl9kZWJ1ZygiT0s6IFN1Yi9hOiAiLCBhKTsKKyAgICB4Zl9kZWJ1ZygiT0s6 IFN1Yi9iOiAiLCBiKTsKKworICAgIHdoaWxlIChhLmV4cCA+IGIuZXhwKSB7CisgICAgICAgIC8q IFRyeSB0byBub3JtYWxpemUgZXhwb25lbnRzOiBzaHJpbmsgYSBleHBvbmVudCBhbmQgZ3JvdyBt YW50aXNzYSAqLworICAgICAgICBpZiAoYS5tYW50LmhpZ2ggJiAoMVVMTCA8PCA2MikpIHsKKyAg ICAgICAgICAgIC8qIENhbid0IGdyb3cgYSBhbnkgbW9yZSAqLworICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhID0geGZfbm9ybV9sZWZ0KGEpOworICAg ICAgICB9CisgICAgfQorCisgICAgeGZfZGVidWcoIm5vcm1fbDogU3ViL2E6ICIsIGEpOworICAg IHhmX2RlYnVnKCJub3JtX2w6IFN1Yi9iOiAiLCBiKTsKKworICAgIHdoaWxlIChhLmV4cCA+IGIu ZXhwKSB7CisgICAgICAgIC8qIFRyeSB0byBub3JtYWxpemUgZXhwb25lbnRzOiBncm93IGIgZXhw b25lbnQgYW5kIHNocmluayBtYW50aXNzYSAqLworICAgICAgICAvKiBLZWVwIGFyb3VuZCBzaGlm dGVkIG91dCBiaXRzLi4uIHdlIG1pZ2h0IG5lZWQgdGhvc2UgbGF0ZXIgKi8KKyAgICAgICAgYiA9 IHhmX25vcm1fcmlnaHQoYiwgYS5leHAgLSBiLmV4cCk7CisgICAgfQorCisgICAgeGZfZGVidWco Im5vcm1fcjogU3ViL2E6ICIsIGEpOworICAgIHhmX2RlYnVnKCJub3JtX3I6IFN1Yi9iOiAiLCBi KTsKKworICAgIGlmICgoaW50MTI4X2d0KGIubWFudCwgYS5tYW50KSkpIHsKKyAgICAgICAgeGZf ZGVidWcoInJldHJ5OiBTdWIvYTogIiwgYSk7CisgICAgICAgIHhmX2RlYnVnKCJyZXRyeTogU3Vi L2I6ICIsIGIpOworICAgICAgICByZXR1cm4geGZfc3ViKGIsIGEsICFuZWdhdGUpOworICAgIH0K KworICAgIC8qIE9LLCBub3cgdGhpbmdzIHNob3VsZCBiZSBub3JtYWxpemVkISAqLworICAgIHJl dC5zaWduID0gYS5zaWduOworICAgIHJldC5leHAgPSBhLmV4cDsKKyAgICBhc3NlcnQoIWludDEy OF9ndChiLm1hbnQsIGEubWFudCkpOworICAgIGJvcnJvdyA9IChiLnJvdW5kIDw8IDIpIHwgKGIu Z3VhcmQgPDwgMSkgfCBiLnN0aWNreTsKKyAgICByZXQubWFudCA9IGludDEyOF9zdWIoYS5tYW50 LCBiLm1hbnQsIChib3Jyb3cgIT0gMCkpOworICAgIGJvcnJvdyA9IDAgLSBib3Jyb3c7CisgICAg cmV0Lmd1YXJkID0gKGJvcnJvdyA+PiAyKSAmIDE7CisgICAgcmV0LnJvdW5kID0gKGJvcnJvdyA+ PiAxKSAmIDE7CisgICAgcmV0LnN0aWNreSA9IChib3Jyb3cgPj4gMCkgJiAxOworICAgIGlmIChu ZWdhdGUpIHsKKyAgICAgICAgcmV0LnNpZ24gPSAhcmV0LnNpZ247CisgICAgfQorICAgIHJldHVy biByZXQ7Cit9CisKK3N0YXRpYyB4Zl90IHhmX2FkZCh4Zl90IGEsIHhmX3QgYikKK3sKKyAgICB4 Zl90IHJldDsKKyAgICB4Zl9pbml0KCZyZXQpOworICAgIHhmX2RlYnVnKCItLT5BZGQvYTogIiwg YSk7CisgICAgeGZfZGVidWcoIi0tPkFkZC9iOiAiLCBiKTsKKyAgICBpZiAoYS5zaWduICE9IGIu c2lnbikgeworICAgICAgICBiLnNpZ24gPSAhYi5zaWduOworICAgICAgICByZXR1cm4geGZfc3Vi KGEsIGIsIDApOworICAgIH0KKyAgICBpZiAoYi5leHAgPiBhLmV4cCkgeworICAgICAgICAvKiBz bWFsbCArIGJpZyA9PSAgKGJpZyArIHNtYWxsKSAqLworICAgICAgICByZXR1cm4geGZfYWRkKGIs IGEpOworICAgIH0KKyAgICBpZiAoKGIuZXhwID09IGEuZXhwKSAmJiBpbnQxMjhfZ3QoYi5tYW50 LCBhLm1hbnQpKSB7CisgICAgICAgIC8qIHNtYWxsICsgYmlnID09ICAoYmlnICsgc21hbGwpICov CisgICAgICAgIHJldHVybiB4Zl9hZGQoYiwgYSk7CisgICAgfQorCisgICAgeGZfZGVidWcoIk9L PyBBZGQvYTogIiwgYSk7CisgICAgeGZfZGVidWcoIk9LPyBBZGQvYjogIiwgYik7CisKKyAgICB3 aGlsZSAoYS5leHAgPiBiLmV4cCkgeworICAgICAgICAvKiBUcnkgdG8gbm9ybWFsaXplIGV4cG9u ZW50czogc2hyaW5rIGEgZXhwb25lbnQgYW5kIGdyb3cgbWFudGlzc2EgKi8KKyAgICAgICAgaWYg KGEubWFudC5oaWdoICYgKDFVTEwgPDwgNjIpKSB7CisgICAgICAgICAgICAvKiBDYW4ndCBncm93 IGEgYW55IG1vcmUgKi8KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9IGVsc2UgeworICAg ICAgICAgICAgYSA9IHhmX25vcm1fbGVmdChhKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHhm X2RlYnVnKCJub3JtX2w6IEFkZC9hOiAiLCBhKTsKKyAgICB4Zl9kZWJ1Zygibm9ybV9sOiBBZGQv YjogIiwgYik7CisKKyAgICB3aGlsZSAoYS5leHAgPiBiLmV4cCkgeworICAgICAgICAvKiBUcnkg dG8gbm9ybWFsaXplIGV4cG9uZW50czogZ3JvdyBiIGV4cG9uZW50IGFuZCBzaHJpbmsgbWFudGlz c2EgKi8KKyAgICAgICAgLyogS2VlcCBhcm91bmQgc2hpZnRlZCBvdXQgYml0cy4uLiB3ZSBtaWdo dCBuZWVkIHRob3NlIGxhdGVyICovCisgICAgICAgIGIgPSB4Zl9ub3JtX3JpZ2h0KGIsIGEuZXhw IC0gYi5leHApOworICAgIH0KKworICAgIHhmX2RlYnVnKCJub3JtX3I6IEFkZC9hOiAiLCBhKTsK KyAgICB4Zl9kZWJ1Zygibm9ybV9yOiBBZGQvYjogIiwgYik7CisKKyAgICAvKiBPSywgbm93IHRo aW5ncyBzaG91bGQgYmUgbm9ybWFsaXplZCEgKi8KKyAgICBpZiAoaW50MTI4X2d0KGIubWFudCwg YS5tYW50KSkgeworICAgICAgICB4Zl9kZWJ1ZygicmV0cnk6IEFkZC9hOiAiLCBhKTsKKyAgICAg ICAgeGZfZGVidWcoInJldHJ5OiBBZGQvYjogIiwgYik7CisgICAgICAgIHJldHVybiB4Zl9hZGQo YiwgYSk7CisgICAgfTsKKyAgICByZXQuc2lnbiA9IGEuc2lnbjsKKyAgICByZXQuZXhwID0gYS5l eHA7CisgICAgYXNzZXJ0KCFpbnQxMjhfZ3QoYi5tYW50LCBhLm1hbnQpKTsKKyAgICByZXQubWFu dCA9IGludDEyOF9hZGQoYS5tYW50LCBiLm1hbnQpOworICAgIHJldC5ndWFyZCA9IGIuZ3VhcmQ7 CisgICAgcmV0LnJvdW5kID0gYi5yb3VuZDsKKyAgICByZXQuc3RpY2t5ID0gYi5zdGlja3k7Cisg ICAgcmV0dXJuIHJldDsKK30KKworLyogUmV0dXJuIGFuIGluZmluaXR5IHdpdGggdGhlIHNhbWUg c2lnbiBhcyBhICovCitzdGF0aWMgaW5saW5lIGRmX3QgaW5maW5pdGVfZGZfdCh4Zl90IGEpCit7 CisgICAgZGZfdCByZXQ7CisgICAgcmV0Lnguc2lnbiA9IGEuc2lnbjsKKyAgICByZXQueC5leHAg PSBERl9JTkZfRVhQOworICAgIHJldC54Lm1hbnQgPSAwVUxMOworICAgIHJldHVybiByZXQ7Cit9 CisKKy8qIFJldHVybiBhIG1heGltdW0gZmluaXRlIHZhbHVlIHdpdGggdGhlIHNhbWUgc2lnbiBh cyBhICovCitzdGF0aWMgaW5saW5lIGRmX3QgbWF4ZmluaXRlX2RmX3QoeGZfdCBhKQoreworICAg IGRmX3QgcmV0OworICAgIHJldC54LnNpZ24gPSBhLnNpZ247CisgICAgcmV0LnguZXhwID0gREZf SU5GX0VYUCAtIDE7CisgICAgcmV0LngubWFudCA9IDB4MDAwZmZmZmZmZmZmZmZmZlVMTDsKKyAg ICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIGRmX3QgZjJkZl90KGRvdWJsZSBpbikK K3sKKyAgICBkZl90IHJldDsKKyAgICByZXQuZiA9IGluOworICAgIHJldHVybiByZXQ7Cit9CisK Ky8qIFJldHVybiBhbiBpbmZpbml0eSB3aXRoIHRoZSBzYW1lIHNpZ24gYXMgYSAqLworc3RhdGlj IGlubGluZSBzZl90IGluZmluaXRlX3NmX3QoeGZfdCBhKQoreworICAgIHNmX3QgcmV0OworICAg IHJldC54LnNpZ24gPSBhLnNpZ247CisgICAgcmV0LnguZXhwID0gU0ZfSU5GX0VYUDsKKyAgICBy ZXQueC5tYW50ID0gMFVMTDsKKyAgICByZXR1cm4gcmV0OworfQorCisvKiBSZXR1cm4gYSBtYXhp bXVtIGZpbml0ZSB2YWx1ZSB3aXRoIHRoZSBzYW1lIHNpZ24gYXMgYSAqLworc3RhdGljIGlubGlu ZSBzZl90IG1heGZpbml0ZV9zZl90KHhmX3QgYSkKK3sKKyAgICBzZl90IHJldDsKKyAgICByZXQu eC5zaWduID0gYS5zaWduOworICAgIHJldC54LmV4cCA9IFNGX0lORl9FWFAgLSAxOworICAgIHJl dC54Lm1hbnQgPSAweDAwN2ZmZmZmVUw7CisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlu bGluZSBzZl90IGYyc2ZfdChmbG9hdCBpbikKK3sKKyAgICBzZl90IHJldDsKKyAgICByZXQuZiA9 IGluOworICAgIHJldHVybiByZXQ7Cit9CisKKyNkZWZpbmUgR0VOX1hGX1JPVU5EKFRZUEUsIE1B TlRCSVRTLCBJTkZfRVhQKSBcCitzdGF0aWMgaW5saW5lIFRZUEUgeGZfcm91bmRfIyNUWVBFKHhm X3QgYSkgXAoreyBcCisgICAgVFlQRSByZXQ7IFwKKyAgICByZXQuaSA9IDA7IFwKKyAgICByZXQu eC5zaWduID0gYS5zaWduOyBcCisgICAgaWYgKChhLm1hbnQuaGlnaCA9PSAwKSAmJiAoYS5tYW50 LmxvdyA9PSAwKSBcCisgICAgICAgICYmICgoYS5ndWFyZCB8IGEucm91bmQgfCBhLnN0aWNreSkg PT0gMCkpIHsgXAorICAgICAgICAvKiByZXN1bHQgemVybyAqLyBcCisgICAgICAgIHN3aXRjaCAo ZmVnZXRyb3VuZCgpKSB7IFwKKyAgICAgICAgY2FzZSBGRV9ET1dOV0FSRDogXAorICAgICAgICAg ICAgcmV0dXJuIGYyIyNUWVBFKC0wLjApOyBcCisgICAgICAgIGRlZmF1bHQ6IFwKKyAgICAgICAg ICAgIHJldHVybiBmMiMjVFlQRSgwLjApOyBcCisgICAgICAgIH0gXAorICAgIH0gXAorICAgIC8q IE5vcm1hbGl6ZSByaWdodCAqLyBcCisgICAgLyogV2Ugd2FudCBNQU5UQklUUyBiaXRzIG9mIG1h bnRpc3NhIHBsdXMgdGhlIGxlYWRpbmcgb25lLiAqLyBcCisgICAgLyogVGhhdCBtZWFucyB0aGF0 IHdlIHdhbnQgTUFOVEJJVFMrMSBiaXRzLCBvciAweDAwMDAwMDAwMDAwMEZGX0ZGRkYgKi8gXAor ICAgIC8qIFNvIHdlIG5lZWQgdG8gbm9ybWFsaXplIHJpZ2h0IHdoaWxlIHRoZSBoaWdoIHdvcmQg aXMgbm9uLXplcm8gYW5kIFwKKyAgICAqIHdoaWxlIHRoZSBsb3cgd29yZCBpcyBub256ZXJvIHdo ZW4gbWFza2VkIHdpdGggMHhmZmUwXzAwMDBfMDAwMF8wMDAwICovIFwKKyAgICB4Zl9kZWJ1Zygi aW5wdXQ6ICIsIGEpOyBcCisgICAgd2hpbGUgKChhLm1hbnQuaGlnaCAhPSAwKSB8fCAoKGEubWFu dC5sb3cgPj4gKE1BTlRCSVRTICsgMSkpICE9IDApKSB7IFwKKyAgICAgICAgYSA9IHhmX25vcm1f cmlnaHQoYSwgMSk7IFwKKyAgICB9IFwKKyAgICB4Zl9kZWJ1Zygibm9ybV9yaWdodDogIiwgYSk7 IFwKKyAgICAvKiBcCisgICAgICogT0ssIG5vdyBub3JtYWxpemUgbGVmdCBcCisgICAgICogV2Ug d2FudCB0byBub3JtYWxpemUgbGVmdCB1bnRpbCB3ZSBoYXZlIGEgbGVhZGluZyBvbmUgaW4gYml0 IDI0IFwKKyAgICAgKiBUaGVvcmV0aWNhbGx5LCB3ZSBvbmx5IG5lZWQgdG8gc2hpZnQgYSBtYXhp bXVtIG9mIG9uZSB0byB0aGUgbGVmdCBpZiB3ZSBcCisgICAgICogc2hpZnRlZCBvdXQgbG90cyBv ZiBiaXRzIGZyb20gQiwgb3IgaWYgd2UgaGFkIG5vIHNoaWZ0IC8gMSBzaGlmdCBzdGlja3kgXAor ICAgICAqIHNob3VkbCBiZSAwICBcCisgICAgICovIFwKKyAgICB3aGlsZSAoKGEubWFudC5sb3cg JiAoMVVMTCA8PCBNQU5UQklUUykpID09IDApIHsgXAorICAgICAgICBhID0geGZfbm9ybV9sZWZ0 KGEpOyBcCisgICAgfSBcCisgICAgeGZfZGVidWcoIm5vcm1fbGVmdDogIiwgYSk7IFwKKyAgICAv KiBcCisgICAgICogT0ssIG5vdyB3ZSBtaWdodCBuZWVkIHRvIGRlbm9ybWFsaXplIGJlY2F1c2Ug b2YgcG90ZW50aWFsIHVuZGVyZmxvdy4gXAorICAgICAqIFdlIG5lZWQgdG8gZG8gdGhpcyBiZWZv cmUgcm91bmRpbmcsIGFuZCByb3VuZGluZyBtaWdodCBtYWtlIHVzIG5vcm1hbCBcCisgICAgICog YWdhaW4gXAorICAgICAqLyBcCisgICAgd2hpbGUgKGEuZXhwIDw9IDApIHsgXAorICAgICAgICBh ID0geGZfbm9ybV9yaWdodChhLCAxIC0gYS5leHApOyBcCisgICAgICAgIC8qIFwKKyAgICAgICAg ICogRG8gd2UgaGF2ZSB1bmRlcmZsb3c/IFwKKyAgICAgICAgICogVGhhdCdzIHdoZW4gd2UgZ2V0 IGFuIGluZXhhY3QgYW5zd2VyIGJlY2F1c2Ugd2UgcmFuIG91dCBvZiBiaXRzIFwKKyAgICAgICAg ICogaW4gYSBkZW5vcm1hbC4gXAorICAgICAgICAgKi8gXAorICAgICAgICBpZiAoYS5ndWFyZCB8 fCBhLnJvdW5kIHx8IGEuc3RpY2t5KSB7IFwKKyAgICAgICAgICAgIGZlcmFpc2VleGNlcHQoRkVf VU5ERVJGTE9XKTsgXAorICAgICAgICB9IFwKKyAgICB9IFwKKyAgICB4Zl9kZWJ1Zygibm9ybV9k ZW5vcm06ICIsIGEpOyBcCisgICAgLyogT0ssIHdlJ3JlIHJlbGF0aXZlbHkgY2Fub25pY2FsLi4u IG5vdyB3ZSBuZWVkIHRvIHJvdW5kICovIFwKKyAgICBpZiAoYS5ndWFyZCB8fCBhLnJvdW5kIHx8 IGEuc3RpY2t5KSB7IFwKKyAgICAgICAgZmVyYWlzZWV4Y2VwdChGRV9JTkVYQUNUKTsgXAorICAg ICAgICBzd2l0Y2ggKGZlZ2V0cm91bmQoKSkgeyBcCisgICAgICAgIGNhc2UgRkVfVE9XQVJEWkVS TzogXAorICAgICAgICAgICAgLyogQ2hvcCBhbmQgd2UncmUgZG9uZSAqLyBcCisgICAgICAgICAg ICBicmVhazsgXAorICAgICAgICBjYXNlIEZFX1VQV0FSRDogXAorICAgICAgICAgICAgaWYgKGEu c2lnbiA9PSAwKSB7IFwKKyAgICAgICAgICAgICAgICBhLm1hbnQubG93ICs9IDE7IFwKKyAgICAg ICAgICAgIH0gXAorICAgICAgICAgICAgYnJlYWs7IFwKKyAgICAgICAgY2FzZSBGRV9ET1dOV0FS RDogXAorICAgICAgICAgICAgaWYgKGEuc2lnbiAhPSAwKSB7IFwKKyAgICAgICAgICAgICAgICBh Lm1hbnQubG93ICs9IDE7IFwKKyAgICAgICAgICAgIH0gXAorICAgICAgICAgICAgYnJlYWs7IFwK KyAgICAgICAgZGVmYXVsdDogXAorICAgICAgICAgICAgaWYgKGEucm91bmQgfHwgYS5zdGlja3kp IHsgXAorICAgICAgICAgICAgICAgIC8qIHJvdW5kIHVwIGlmIGd1YXJkIGlzIDEsIGRvd24gaWYg Z3VhcmQgaXMgemVybyAqLyBcCisgICAgICAgICAgICAgICAgYS5tYW50LmxvdyArPSBhLmd1YXJk OyBcCisgICAgICAgICAgICB9IGVsc2UgaWYgKGEuZ3VhcmQpIHsgXAorICAgICAgICAgICAgICAg IC8qIGV4YWN0bHkgLjUsIHJvdW5kIHVwIGlmIG9kZCAqLyBcCisgICAgICAgICAgICAgICAgYS5t YW50LmxvdyArPSAoYS5tYW50LmxvdyAmIDEpOyBcCisgICAgICAgICAgICB9IFwKKyAgICAgICAg ICAgIGJyZWFrOyBcCisgICAgICAgIH0gXAorICAgIH0gXAorICAgIHhmX2RlYnVnKCJwb3N0X3Jv dW5kOiAiLCBhKTsgXAorICAgIC8qIFwKKyAgICAgKiBPSywgbm93IHdlIG1pZ2h0IGhhdmUgY2Fy cmllZCBhbGwgdGhlIHdheSB1cC4gXAorICAgICAqIFNvIHdlIG1pZ2h0IG5lZWQgdG8gc2hyIG9u Y2UgXAorICAgICAqIGF0IGxlYXN0IHdlIGtub3cgdGhhdCB0aGUgbHNiIHNob3VsZCBiZSB6ZXJv IGlmIHdlIHJvdW5kZWQgYW5kIFwKKyAgICAgKiBnb3QgYSBjYXJyeSBvdXQuLi4gXAorICAgICAq LyBcCisgICAgaWYgKChhLm1hbnQubG93ID4+IChNQU5UQklUUyArIDEpKSAhPSAwKSB7IFwKKyAg ICAgICAgYSA9IHhmX25vcm1fcmlnaHQoYSwgMSk7IFwKKyAgICB9IFwKKyAgICB4Zl9kZWJ1Zygi b25jZV9ub3JtX3JpZ2h0OiAiLCBhKTsgXAorICAgIC8qIE92ZXJmbG93PyAqLyBcCisgICAgaWYg KGEuZXhwID49IElORl9FWFApIHsgXAorICAgICAgICAvKiBZZXAsIGluZiByZXN1bHQgKi8gXAor ICAgICAgICB4Zl9kZWJ1ZygiaW5mOiAiLCBhKTsgXAorICAgICAgICBmZXJhaXNlZXhjZXB0KEZF X09WRVJGTE9XKTsgXAorICAgICAgICBmZXJhaXNlZXhjZXB0KEZFX0lORVhBQ1QpOyBcCisgICAg ICAgIHN3aXRjaCAoZmVnZXRyb3VuZCgpKSB7IFwKKyAgICAgICAgY2FzZSBGRV9UT1dBUkRaRVJP OiBcCisgICAgICAgICAgICByZXR1cm4gbWF4ZmluaXRlXyMjVFlQRShhKTsgXAorICAgICAgICBj YXNlIEZFX1VQV0FSRDogXAorICAgICAgICAgICAgaWYgKGEuc2lnbiA9PSAwKSB7IFwKKyAgICAg ICAgICAgICAgICByZXR1cm4gaW5maW5pdGVfIyNUWVBFKGEpOyBcCisgICAgICAgICAgICB9IGVs c2UgeyBcCisgICAgICAgICAgICAgICAgcmV0dXJuIG1heGZpbml0ZV8jI1RZUEUoYSk7IFwKKyAg ICAgICAgICAgIH0gXAorICAgICAgICBjYXNlIEZFX0RPV05XQVJEOiBcCisgICAgICAgICAgICBp ZiAoYS5zaWduICE9IDApIHsgXAorICAgICAgICAgICAgICAgIHJldHVybiBpbmZpbml0ZV8jI1RZ UEUoYSk7IFwKKyAgICAgICAgICAgIH0gZWxzZSB7IFwKKyAgICAgICAgICAgICAgICByZXR1cm4g bWF4ZmluaXRlXyMjVFlQRShhKTsgXAorICAgICAgICAgICAgfSBcCisgICAgICAgIGRlZmF1bHQ6 IFwKKyAgICAgICAgICAgIHJldHVybiBpbmZpbml0ZV8jI1RZUEUoYSk7IFwKKyAgICAgICAgfSBc CisgICAgfSBcCisgICAgLyogVW5kZXJmbG93PyAqLyBcCisgICAgaWYgKGEubWFudC5sb3cgJiAo MVVMTCA8PCBNQU5UQklUUykpIHsgXAorICAgICAgICAvKiBMZWFkaW5nIG9uZSBtZWFuczogTm8s IHdlJ3JlIG5vcm1hbC4gU28sIHdlIHNob3VsZCBiZSBkb25lLi4uICovIFwKKyAgICAgICAgeGZf ZGVidWcoIm5vcm06ICIsIGEpOyBcCisgICAgICAgIHJldC54LmV4cCA9IGEuZXhwOyBcCisgICAg ICAgIHJldC54Lm1hbnQgPSBhLm1hbnQubG93OyBcCisgICAgICAgIHJldHVybiByZXQ7IFwKKyAg ICB9IFwKKyAgICB4Zl9kZWJ1ZygiZGVub3JtOiAiLCBhKTsgXAorICAgIGlmIChhLmV4cCAhPSAx KSB7IFwKKyAgICAgICAgcHJpbnRmKCJhLmV4cCA9PSAlZFxuIiwgYS5leHApOyBcCisgICAgfSBc CisgICAgYXNzZXJ0KGEuZXhwID09IDEpOyBcCisgICAgcmV0LnguZXhwID0gMDsgXAorICAgIHJl dC54Lm1hbnQgPSBhLm1hbnQubG93OyBcCisgICAgcmV0dXJuIHJldDsgXAorfQorCitHRU5fWEZf Uk9VTkQoZGZfdCwgZkRGX01BTlRCSVRTKCksIERGX0lORl9FWFApCitHRU5fWEZfUk9VTkQoc2Zf dCwgZlNGX01BTlRCSVRTKCksIFNGX0lORl9FWFApCisKK3N0YXRpYyBpbmxpbmUgZG91YmxlIHNw ZWNpYWxfZm1hKGRmX3QgYSwgZGZfdCBiLCBkZl90IGMpCit7CisgICAgZGZfdCByZXQ7CisgICAg cmV0LmkgPSAwOworCisgICAgLyoKKyAgICAgKiBJZiBBIG11bHRpcGxpZWQgYnkgQiBpcyBhbiBl eGFjdCBpbmZpbml0eSBhbmQgQyBpcyBhbHNvIGFuIGluZmluaXR5CisgICAgICogYnV0IHdpdGgg dGhlIG9wcG9zaXRlIHNpZ24sIEZNQSByZXR1cm5zIE5hTiBhbmQgcmFpc2VzIGludmFsaWQuCisg ICAgICovCisgICAgaWYgKGZJU0lORlBST0QoYS5mLCBiLmYpICYmIGlzaW5mKGMuZikpIHsKKyAg ICAgICAgaWYgKChhLnguc2lnbiBeIGIueC5zaWduKSAhPSBjLnguc2lnbikgeworICAgICAgICAg ICAgcmV0LmkgPSBmREZOQU5WQUwoKTsKKyAgICAgICAgICAgIGZlcmFpc2VleGNlcHQoRkVfSU5W QUxJRCk7CisgICAgICAgICAgICByZXR1cm4gcmV0LmY7CisgICAgICAgIH0KKyAgICB9CisgICAg aWYgKChpc2luZihhLmYpICYmIGlzeihiLmYpKSB8fCAoaXN6KGEuZikgJiYgaXNpbmYoYi5mKSkp IHsKKyAgICAgICAgcmV0LmkgPSBmREZOQU5WQUwoKTsKKyAgICAgICAgZmVyYWlzZWV4Y2VwdChG RV9JTlZBTElEKTsKKyAgICAgICAgcmV0dXJuIHJldC5mOworICAgIH0KKyAgICAvKgorICAgICAq IElmIG5vbmUgb2YgdGhlIGFib3ZlIGNoZWNrcyBhcmUgdHJ1ZSBhbmQgQyBpcyBhIE5hTiwKKyAg ICAgKiBhIE5hTiBzaGFsbCBiZSByZXR1cm5lZAorICAgICAqIElmIEEgb3IgQiBhcmUgTmFOLCBh IE5BTiBzaGFsbCBiZSByZXR1cm5lZC4KKyAgICAgKi8KKyAgICBpZiAoaXNuYW4oYS5mKSB8fCBp c25hbihiLmYpIHx8IChpc25hbihjLmYpKSkgeworICAgICAgICBpZiAoaXNuYW4oYS5mKSAmJiAo ZkdFVEJJVCg1MSwgYS5pKSA9PSAwKSkgeworICAgICAgICAgICAgZmVyYWlzZWV4Y2VwdChGRV9J TlZBTElEKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXNuYW4oYi5mKSAmJiAoZkdFVEJJVCg1 MSwgYi5pKSA9PSAwKSkgeworICAgICAgICAgICAgZmVyYWlzZWV4Y2VwdChGRV9JTlZBTElEKTsK KyAgICAgICAgfQorICAgICAgICBpZiAoaXNuYW4oYy5mKSAmJiAoZkdFVEJJVCg1MSwgYy5pKSA9 PSAwKSkgeworICAgICAgICAgICAgZmVyYWlzZWV4Y2VwdChGRV9JTlZBTElEKTsKKyAgICAgICAg fQorICAgICAgICByZXQuaSA9IGZERk5BTlZBTCgpOworICAgICAgICByZXR1cm4gcmV0LmY7Cisg ICAgfQorICAgIC8qCisgICAgICogV2UgaGF2ZSBjaGVja2VkIGZvciBhZGRpbmcgb3Bwb3NpdGUt c2lnbmVkIGluZmluaXRpZXMuCisgICAgICogT3RoZXIgaW5maW5pdGllcyByZXR1cm4gaW5maW5p dHkgd2l0aCB0aGUgY29ycmVjdCBzaWduCisgICAgICovCisgICAgaWYgKGlzaW5mKGMuZikpIHsK KyAgICAgICAgcmV0LnguZXhwID0gREZfSU5GX0VYUDsKKyAgICAgICAgcmV0LngubWFudCA9IDA7 CisgICAgICAgIHJldC54LnNpZ24gPSBjLnguc2lnbjsKKyAgICAgICAgcmV0dXJuIHJldC5mOwor ICAgIH0KKyAgICBpZiAoaXNpbmYoYS5mKSB8fCBpc2luZihiLmYpKSB7CisgICAgICAgIHJldC54 LmV4cCA9IERGX0lORl9FWFA7CisgICAgICAgIHJldC54Lm1hbnQgPSAwOworICAgICAgICByZXQu eC5zaWduID0gKGEueC5zaWduIF4gYi54LnNpZ24pOworICAgICAgICByZXR1cm4gcmV0LmY7Cisg ICAgfQorICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7CisgICAgcmV0LnguZXhwID0gMHgxMjM7 CisgICAgcmV0LngubWFudCA9IDB4ZGVhZDsKKyAgICByZXR1cm4gcmV0LmY7Cit9CisKK3N0YXRp YyBpbmxpbmUgZmxvYXQgc3BlY2lhbF9mbWFmKHNmX3QgYSwgc2ZfdCBiLCBzZl90IGMpCit7Cisg ICAgZGZfdCBhYSwgYmIsIGNjOworICAgIGFhLmYgPSBhLmY7CisgICAgYmIuZiA9IGIuZjsKKyAg ICBjYy5mID0gYy5mOworICAgIHJldHVybiBzcGVjaWFsX2ZtYShhYSwgYmIsIGNjKTsKK30KKwor ZG91YmxlIGludGVybmFsX2ZtYXgoZG91YmxlIGFfaW4sIGRvdWJsZSBiX2luLCBkb3VibGUgY19p biwgaW50IHNjYWxlKQoreworICAgIGRmX3QgYSwgYiwgYzsKKyAgICB4Zl90IHByb2Q7CisgICAg eGZfdCBhY2M7CisgICAgeGZfdCByZXN1bHQ7CisgICAgeGZfaW5pdCgmcHJvZCk7CisgICAgeGZf aW5pdCgmYWNjKTsKKyAgICB4Zl9pbml0KCZyZXN1bHQpOworICAgIGEuZiA9IGFfaW47CisgICAg Yi5mID0gYl9pbjsKKyAgICBjLmYgPSBjX2luOworCisgICAgZGVidWdfZnByaW50ZihzdGRvdXQs CisgICAgICAgICAgICAgICAgICAiaW50ZXJuYWxfZm1heDogMHglMDE2bGx4ICogMHglMDE2bGx4 ICsgMHglMDE2bGx4IHNjOiAlZFxuIiwKKyAgICAgICAgICAgICAgICAgIGZVTkRPVUJMRShhX2lu KSwgZlVORE9VQkxFKGJfaW4pLCBmVU5ET1VCTEUoY19pbiksCisgICAgICAgICAgICAgICAgICBz Y2FsZSk7CisKKyAgICBpZiAoaXNpbmYoYS5mKSB8fCBpc2luZihiLmYpIHx8IGlzaW5mKGMuZikp IHsKKyAgICAgICAgcmV0dXJuIHNwZWNpYWxfZm1hKGEsIGIsIGMpOworICAgIH0KKyAgICBpZiAo aXNuYW4oYS5mKSB8fCBpc25hbihiLmYpIHx8IGlzbmFuKGMuZikpIHsKKyAgICAgICAgcmV0dXJu IHNwZWNpYWxfZm1hKGEsIGIsIGMpOworICAgIH0KKyAgICBpZiAoKHNjYWxlID09IDApICYmIChp c3ooYS5mKSB8fCBpc3ooYi5mKSkpIHsKKyAgICAgICAgcmV0dXJuIGEuZiAqIGIuZiArIGMuZjsK KyAgICB9CisKKyAgICAvKiAoYSAqIDIqKmIpICogKGMgKiAyKipkKSA9PSBhKmMgKiAyKiooYitk KSAqLworICAgIHByb2QubWFudCA9IGludDEyOF9tdWxfNjQ2NChkZl9nZXRtYW50KGEpLCBkZl9n ZXRtYW50KGIpKTsKKworICAgIC8qCisgICAgICogTm90ZTogZXh0cmFjdGluZyB0aGUgbWFudGlz c2EgaW50byBhbiBpbnQgaXMgbXVsdGlwbHlpbmcgYnkKKyAgICAgKiAyKio1Miwgc28gYWRqdXN0 IGhlcmUKKyAgICAgKi8KKyAgICBwcm9kLmV4cCA9IGRmX2dldGV4cChhKSArIGRmX2dldGV4cChi KSAtIERGX0JJQVMgLSA1MjsKKyAgICBwcm9kLnNpZ24gPSBhLnguc2lnbiBeIGIueC5zaWduOwor ICAgIHhmX2RlYnVnKCJwcm9kOiAiLCBwcm9kKTsKKyAgICBpZiAoIWlzeihjLmYpKSB7CisgICAg ICAgIGFjYy5tYW50ID0gaW50MTI4X211bF82NDY0KGRmX2dldG1hbnQoYyksIDEpOworICAgICAg ICBhY2MuZXhwID0gZGZfZ2V0ZXhwKGMpOworICAgICAgICBhY2Muc2lnbiA9IGMueC5zaWduOwor ICAgICAgICB4Zl9kZWJ1ZygiYWNjOiAiLCBhY2MpOworICAgICAgICByZXN1bHQgPSB4Zl9hZGQo cHJvZCwgYWNjKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXN1bHQgPSBwcm9kOworICAgIH0K KyAgICB4Zl9kZWJ1Zygic3VtOiAiLCByZXN1bHQpOworICAgIGRlYnVnX2ZwcmludGYoc3Rkb3V0 LCAiU2NhbGluZzogJWRcbiIsIHNjYWxlKTsKKyAgICByZXN1bHQuZXhwICs9IHNjYWxlOworICAg IHhmX2RlYnVnKCJwb3N0LXNjYWxlOiAiLCByZXN1bHQpOworICAgIHJldHVybiB4Zl9yb3VuZF9k Zl90KHJlc3VsdCkuZjsKK30KKworZmxvYXQgaW50ZXJuYWxfZm1hZngoZmxvYXQgYV9pbiwgZmxv YXQgYl9pbiwgZmxvYXQgY19pbiwgaW50IHNjYWxlKQoreworICAgIHNmX3QgYSwgYiwgYzsKKyAg ICB4Zl90IHByb2Q7CisgICAgeGZfdCBhY2M7CisgICAgeGZfdCByZXN1bHQ7CisgICAgeGZfaW5p dCgmcHJvZCk7CisgICAgeGZfaW5pdCgmYWNjKTsKKyAgICB4Zl9pbml0KCZyZXN1bHQpOworICAg IGEuZiA9IGFfaW47CisgICAgYi5mID0gYl9pbjsKKyAgICBjLmYgPSBjX2luOworCisgICAgZGVi dWdfZnByaW50ZihzdGRvdXQsCisgICAgICAgICAgICAgICAgICAiaW50ZXJuYWxfZm1heDogMHgl MDE2eCAqIDB4JTAxNnggKyAweCUwMTZ4IHNjOiAlZFxuIiwKKyAgICAgICAgICAgICAgICAgIGZV TkZMT0FUKGFfaW4pLCBmVU5GTE9BVChiX2luKSwgZlVORkxPQVQoY19pbiksIHNjYWxlKTsKKyAg ICBpZiAoaXNpbmYoYS5mKSB8fCBpc2luZihiLmYpIHx8IGlzaW5mKGMuZikpIHsKKyAgICAgICAg cmV0dXJuIHNwZWNpYWxfZm1hZihhLCBiLCBjKTsKKyAgICB9CisgICAgaWYgKGlzbmFuKGEuZikg fHwgaXNuYW4oYi5mKSB8fCBpc25hbihjLmYpKSB7CisgICAgICAgIHJldHVybiBzcGVjaWFsX2Zt YWYoYSwgYiwgYyk7CisgICAgfQorICAgIGlmICgoc2NhbGUgPT0gMCkgJiYgKGlzeihhLmYpIHx8 IGlzeihiLmYpKSkgeworICAgICAgICByZXR1cm4gYS5mICogYi5mICsgYy5mOworICAgIH0KKwor ICAgIC8qIChhICogMioqYikgKiAoYyAqIDIqKmQpID09IGEqYyAqIDIqKihiK2QpICovCisgICAg cHJvZC5tYW50ID0gaW50MTI4X211bF82NDY0KHNmX2dldG1hbnQoYSksIHNmX2dldG1hbnQoYikp OworCisgICAgLyoKKyAgICAgKiBOb3RlOiBleHRyYWN0aW5nIHRoZSBtYW50aXNzYSBpbnRvIGFu IGludCBpcyBtdWx0aXBseWluZyBieQorICAgICAqIDIqKjIzLCBzbyBhZGp1c3QgaGVyZQorICAg ICAqLworICAgIHByb2QuZXhwID0gc2ZfZ2V0ZXhwKGEpICsgc2ZfZ2V0ZXhwKGIpIC0gU0ZfQklB UyAtIDIzOworICAgIHByb2Quc2lnbiA9IGEueC5zaWduIF4gYi54LnNpZ247CisgICAgaWYgKGlz eihhLmYpIHx8IGlzeihiLmYpKSB7CisgICAgICAgIHByb2QuZXhwID0gLTIgKiBXQVlfQklHX0VY UDsKKyAgICB9CisgICAgeGZfZGVidWcoInByb2Q6ICIsIHByb2QpOworICAgIGlmICgoc2NhbGUg PiAwKSAmJiAoZnBjbGFzc2lmeShjLmYpID09IEZQX1NVQk5PUk1BTCkpIHsKKyAgICAgICAgYWNj Lm1hbnQgPSBpbnQxMjhfbXVsXzY0NjQoMCwgMCk7CisgICAgICAgIGFjYy5leHAgPSAtV0FZX0JJ R19FWFA7CisgICAgICAgIGFjYy5zaWduID0gYy54LnNpZ247CisgICAgICAgIGFjYy5zdGlja3kg PSAxOworICAgICAgICB4Zl9kZWJ1Zygic3BlY2lhbCBkZW5vcm0gYWNjOiAiLCBhY2MpOworICAg ICAgICByZXN1bHQgPSB4Zl9hZGQocHJvZCwgYWNjKTsKKyAgICB9IGVsc2UgaWYgKCFpc3ooYy5m KSkgeworICAgICAgICBhY2MubWFudCA9IGludDEyOF9tdWxfNjQ2NChzZl9nZXRtYW50KGMpLCAx KTsKKyAgICAgICAgYWNjLmV4cCA9IHNmX2dldGV4cChjKTsKKyAgICAgICAgYWNjLnNpZ24gPSBj Lnguc2lnbjsKKyAgICAgICAgeGZfZGVidWcoImFjYzogIiwgYWNjKTsKKyAgICAgICAgcmVzdWx0 ID0geGZfYWRkKHByb2QsIGFjYyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmVzdWx0ID0gcHJv ZDsKKyAgICB9CisgICAgeGZfZGVidWcoInN1bTogIiwgcmVzdWx0KTsKKyAgICBkZWJ1Z19mcHJp bnRmKHN0ZG91dCwgIlNjYWxpbmc6ICVkXG4iLCBzY2FsZSk7CisgICAgcmVzdWx0LmV4cCArPSBz Y2FsZTsKKyAgICB4Zl9kZWJ1ZygicG9zdC1zY2FsZTogIiwgcmVzdWx0KTsKKyAgICByZXR1cm4g eGZfcm91bmRfc2ZfdChyZXN1bHQpLmY7Cit9CisKKworZmxvYXQgaW50ZXJuYWxfZm1hZihmbG9h dCBhX2luLCBmbG9hdCBiX2luLCBmbG9hdCBjX2luKQoreworICAgIHJldHVybiBpbnRlcm5hbF9m bWFmeChhX2luLCBiX2luLCBjX2luLCAwKTsKK30KKworZG91YmxlIGludGVybmFsX2ZtYShkb3Vi bGUgYV9pbiwgZG91YmxlIGJfaW4sIGRvdWJsZSBjX2luKQoreworICAgIHJldHVybiBpbnRlcm5h bF9mbWF4KGFfaW4sIGJfaW4sIGNfaW4sIDApOworfQorCitmbG9hdCBpbnRlcm5hbF9tcHlmKGZs b2F0IGFfaW4sIGZsb2F0IGJfaW4pCit7CisgICAgaWYgKGlzeihhX2luKSB8fCBpc3ooYl9pbikp IHsKKyAgICAgICAgcmV0dXJuIGFfaW4gKiBiX2luOworICAgIH0KKyAgICByZXR1cm4gaW50ZXJu YWxfZm1hZngoYV9pbiwgYl9pbiwgMC4wLCAwKTsKK30KKworZG91YmxlIGludGVybmFsX21weShk b3VibGUgYV9pbiwgZG91YmxlIGJfaW4pCit7CisgICAgaWYgKGlzeihhX2luKSB8fCBpc3ooYl9p bikpIHsKKyAgICAgICAgcmV0dXJuIGFfaW4gKiBiX2luOworICAgIH0KKyAgICByZXR1cm4gaW50 ZXJuYWxfZm1heChhX2luLCBiX2luLCAwLjAsIDApOworfQorCitzdGF0aWMgaW5saW5lIGRvdWJs ZSBpbnRlcm5hbF9tcHloaF9zcGVjaWFsKGRvdWJsZSBhLCBkb3VibGUgYikKK3sKKyAgICByZXR1 cm4gYSAqIGI7Cit9CisKK2RvdWJsZSBpbnRlcm5hbF9tcHloaChkb3VibGUgYV9pbiwgZG91Ymxl IGJfaW4sCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIGludCBhY2N1 bXVsYXRlZCkKK3sKKyAgICBkZl90IGEsIGI7CisgICAgeGZfdCB4OworICAgIHVuc2lnbmVkIGxv bmcgbG9uZyBpbnQgcHJvZDsKKyAgICB1bnNpZ25lZCBpbnQgc3RpY2t5OworCisgICAgYS5mID0g YV9pbjsKKyAgICBiLmYgPSBiX2luOworICAgIHN0aWNreSA9IGFjY3VtdWxhdGVkICYgMTsKKyAg ICBhY2N1bXVsYXRlZCA+Pj0gMTsKKyAgICB4Zl9pbml0KCZ4KTsKKyAgICBpZiAoaXN6KGFfaW4p IHx8IGlzbmFuKGFfaW4pIHx8IGlzaW5mKGFfaW4pKSB7CisgICAgICAgIHJldHVybiBpbnRlcm5h bF9tcHloaF9zcGVjaWFsKGFfaW4sIGJfaW4pOworICAgIH0KKyAgICBpZiAoaXN6KGJfaW4pIHx8 IGlzbmFuKGJfaW4pIHx8IGlzaW5mKGJfaW4pKSB7CisgICAgICAgIHJldHVybiBpbnRlcm5hbF9t cHloaF9zcGVjaWFsKGFfaW4sIGJfaW4pOworICAgIH0KKyAgICB4Lm1hbnQgPSBpbnQxMjhfbXVs XzY0NjQoYWNjdW11bGF0ZWQsIDEpOworICAgIHguc3RpY2t5ID0gc3RpY2t5OworICAgIHByb2Qg PSBmR0VUVVdPUkQoMSwgZGZfZ2V0bWFudChhKSkgKiBmR0VUVVdPUkQoMSwgZGZfZ2V0bWFudChi KSk7CisgICAgeC5tYW50ID0gaW50MTI4X2FkZCh4Lm1hbnQsIGludDEyOF9tdWxfNjQ2NChwcm9k LCAweDEwMDAwMDAwMFVMTCkpOworICAgIHguZXhwID0gZGZfZ2V0ZXhwKGEpICsgZGZfZ2V0ZXhw KGIpIC0gREZfQklBUyAtIDIwOworICAgIHhmX2RlYnVnKCJmb3JtZWQ6ICIsIHgpOworICAgIGlm ICghaXNub3JtYWwoYV9pbikgfHwgIWlzbm9ybWFsKGJfaW4pKSB7CisgICAgICAgIC8qIGNydXNo IHRvIGluZXhhY3QgemVybyAqLworICAgICAgICB4LnN0aWNreSA9IDE7CisgICAgICAgIHguZXhw ID0gLTQwOTY7CisgICAgICAgIHhmX2RlYnVnKCJjcnVzaGluZzogIiwgeCk7CisgICAgfQorICAg IHguc2lnbiA9IGEueC5zaWduIF4gYi54LnNpZ247CisgICAgeGZfZGVidWcoIndpdGggc2lnbjog IiwgeCk7CisgICAgcmV0dXJuIHhmX3JvdW5kX2RmX3QoeCkuZjsKK30KKworZmxvYXQgY29udl9k Zl90b19zZihkb3VibGUgaW5fZikKK3sKKyAgICB4Zl90IHg7CisgICAgZGZfdCBpbjsKKyAgICBp ZiAoaXN6KGluX2YpIHx8IGlzbmFuKGluX2YpIHx8IGlzaW5mKGluX2YpKSB7CisgICAgICAgIHJl dHVybiBpbl9mOworICAgIH0KKyAgICB4Zl9pbml0KCZ4KTsKKyAgICBpbi5mID0gaW5fZjsKKyAg ICB4Lm1hbnQgPSBpbnQxMjhfbXVsXzY0NjQoZGZfZ2V0bWFudChpbiksIDEpOworICAgIHguZXhw ID0gZGZfZ2V0ZXhwKGluKSAtIERGX0JJQVMgKyBTRl9CSUFTIC0gNTIgKyAyMzsKKyAgICB4LnNp Z24gPSBpbi54LnNpZ247CisgICAgeGZfZGVidWcoImNvbnYgdG8gc2Y6IHg6ICIsIHgpOworICAg IHJldHVybiB4Zl9yb3VuZF9zZl90KHgpLmY7Cit9CisKLS0gCjIuNy40Cgo=