Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vxTeX-00GGUJ-1E for pgsql-hackers@arkaria.postgresql.org; Tue, 03 Mar 2026 17:35:25 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vxTeV-0089iI-2n for pgsql-hackers@arkaria.postgresql.org; Tue, 03 Mar 2026 17:35:24 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vxTeV-0089i8-1h for pgsql-hackers@lists.postgresql.org; Tue, 03 Mar 2026 17:35:24 +0000 Received: from mail-wm1-x32f.google.com ([2a00:1450:4864:20::32f]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vxTeT-00000000I1j-20F1 for pgsql-hackers@lists.postgresql.org; Tue, 03 Mar 2026 17:35:23 +0000 Received: by mail-wm1-x32f.google.com with SMTP id 5b1f17b1804b1-48378e60742so6900115e9.1 for ; Tue, 03 Mar 2026 09:35:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1772559320; x=1773164120; darn=lists.postgresql.org; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=T/B40qQfM/Gl9fPoY+hp1/2HHNbHepvn613M3+Qyht4=; b=KrCkOTr8J9uKFLPG05x89bL9NYiCzjzGmbMkcJysUtEHSyjzD1bC4S7eaGh+i6CcLO gmUuiGejSjUTdEOqW57NbZew2L6o34PajdnV9PHQN0QcGDA1LCRpClRLbVjKwUJEGBCe UDuy8xCV52f+IBVWtxWL6N4yehH6yULU1fyVX3wzCFsyMa4UsAcOnpdXAvhaUXgOaZG3 WfKxahFhCnpHwwyY3w041Fml/QQSiy2NPoJHMkhnsUMnC2Tk/HhRB8yCuQP+K4NW7WJe WOmLRRpcQ+B4PelVTeBLaIxcm0ntCLLnRg4ZxaV8+4p4NNZZ/ykr7i2UeBmyo5wlJsQM HXlw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772559320; x=1773164120; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:x-gm-gg:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=T/B40qQfM/Gl9fPoY+hp1/2HHNbHepvn613M3+Qyht4=; b=M/j5aZb5gQDskyDB3fme0x8U8m/HVp2faYLNhoDKFBObDJebzlLFwHAzSb/q2OIAaV BgpLeHAQZMk4N+rCKY4BgRTxJGJSWV/mPLi2/BeM3Gn+64ERgEEcbPZZH5Uf++fNgmUO q4yG4FjMDQ1E0/5jakQP5daTkXKRMFm60pAqrJuwz+llgvCumeXZKBmvNA6n/7idFRcK rmOnBpFUq2TdU50xE7WM5p9eeiMgXJSFKTi4rS1naAORXl20gzaGjL0CzTmo3Kz+F/3U pei6fEegupeLxdRSo7xccBlOAy5uRb48Akw1/Qgp2qPtOfLtup7NRdd8d7mj6GtsdnAS a1wQ== X-Gm-Message-State: AOJu0YyDTYTw+uoZUJKKhFhDpNKPRpxHL9o90Xpypua9CymP2XK2PuMX EJNfDdzd6TTr2jj1bhfDEq5r4XweASh9dP04tyyI78Irxy84KolEGTp1wJUtGxpb X-Gm-Gg: ATEYQzxKQA5nqMzrr44OBK11dG+JZpNRLgIenJSyb49mj3MlmLf9QhHE06QxfGa1h/g NrCnwDKm4iUel4qLDVibM9fZ8w7Bwyt+epJB8QYIxnt/NYTs/g9YaImZ5CVm6PSQ3B1GF77Molr hmGxIsRoCVAHH//aYoZWjy9mc3bpahKn2hQMmHQvOl2RlW9XF5WAmD/MQwbCJOF/94zlLkeZjcA Gw/1oXjDW/J5XuKiOcODtJhvWvdeDPP8tZXYVkqJ8zeQZv0deTILesBoN4/+skgJaUMaZ1m/QSc SKp/1KbU80DV4IbtzxdfjM1Q/4WdZh7WpL7KnQ3xMHj5X3xSiP94k2eM/y8Kb3FGce7C4wrxa8G eTaiNaEQv1QRGDsgrrbEfs4AjNqBVffzFKbwcTpeTeNx7fWEE87QrcGUgj9g2wC5dUB0nNrymre MmOj8wgyZ0SHzp8sbCT9WojHgi71OgmAojf3Bx6zp/FR5o+A/xGIohvG47B7yMeKh/GROBCvV2Q DhqHAHLVuM= X-Received: by 2002:a05:600c:3e16:b0:483:6fc6:1e27 with SMTP id 5b1f17b1804b1-483c9bc3e28mr184985785e9.6.1772559320131; Tue, 03 Mar 2026 09:35:20 -0800 (PST) Received: from [192.168.178.68] ([163.116.235.146]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-483c3b7713csm327614745e9.11.2026.03.03.09.35.18 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 03 Mar 2026 09:35:19 -0800 (PST) Content-Type: multipart/mixed; boundary="------------JRa3K07bTaI3uGFgTC8jSkVq" Message-ID: <853e2793-c9dd-4ad5-8d0a-6e75619d46b1@gmail.com> Date: Tue, 3 Mar 2026 18:35:18 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH] pg_get_domain_ddl: DDL reconstruction function for CREATE DOMAIN statement To: Tom Lane , =?UTF-8?Q?=C3=81lvaro_Herrera?= Cc: pgsql-hackers@lists.postgresql.org References: <202603021736.6nix27wwg6e6@alvherre.pgsql> <863993.1772477782@sss.pgh.pa.us> Content-Language: en-US From: Florin Irion In-Reply-To: <863993.1772477782@sss.pgh.pa.us> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------JRa3K07bTaI3uGFgTC8jSkVq Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Tom, Álvaro, thanks for the direction — I think the v9 patch addresses both of your concerns nicely. No extra test run. The event trigger is installed once in test_setup.sql, so it piggybacks on the existing regression suite. Every CREATE that fires ddl_command_end is checked inline — there is no separate execution of the core tests. Developers don't have to remember anything. The trigger inspects command_tag to derive the object type, then probes pg_catalog for a matching pg_get__ddl() function. If one exists it round-trips the object right there; if not it silently moves on. Adding a new pg_get_type_ddl() or pg_get_sequence_ddl() in the future automatically extends coverage to every CREATE of that type across the entire suite — zero changes to the trigger or to existing tests. Inline verification at creation time. The trigger does: get DDL → DROP → CREATE from DDL → get DDL → ASSERT match Because it runs at creation time, nothing yet depends on the new object, so the drop/recreate is safe. A session-local GUC guards against recursion (the recreate fires the trigger again). Bugs of omission. Tom raised the concern that comparing DDL output against DDL output could mask a missing property. The key thing here is that the test suite continues running with the recreated object. If the DDL function omits, say, a CHECK constraint, the recreated domain silently loses it — and any subsequent test that exercises that constraint will fail. So omissions surface as unexpected failures elsewhere in the suite, not just in the DDL comparison itself. With the current patch, 160 domains across 33 test files are automatically round-tripped. The dedicated object_ddl.sql file is gone — a small set of pg_get_domain_ddl() output-format tests (pretty printing, quoted identifiers, NOT VALID rendering, built-in type name shadowing, error cases) now lives in domain.sql alongside the rest of the domain coverage. v9 attached. While working on this I bumped into an unrelated crash and started a new thread [1] for it. [1] https://www.postgresql.org/message-id/c6fff161-9aee-4290-9ada-71e21e4d84de%40gmail.com -- Cheers, Florin EDB -- www.enterprisedb.com --------------JRa3K07bTaI3uGFgTC8jSkVq Content-Type: text/plain; charset=UTF-8; name="v9-0001-Add-pg_get_domain_ddl-function-to-reconstruct-CRE.patch" Content-Disposition: attachment; filename*0="v9-0001-Add-pg_get_domain_ddl-function-to-reconstruct-CRE.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBjNjVmNWExZDdiYzY4OTNjZjcwM2U0NGRiMWY1ZDQyNjczNDFkYWUyIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBGbG9yaW4gSXJpb24gPGZsb3Jpbi5pcmlvbkBlbnRl cnByaXNlZGIuY29tPgpEYXRlOiBUaHUsIDE4IFNlcCAyMDI1IDE4OjUyOjQzICswMjAwClN1 YmplY3Q6IFtQQVRDSCB2OV0gQWRkIHBnX2dldF9kb21haW5fZGRsKCkgZnVuY3Rpb24gdG8g cmVjb25zdHJ1Y3QgQ1JFQVRFCiBET01BSU4gc3RhdGVtZW50cwpNSU1FLVZlcnNpb246IDEu MApDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKQ29udGVudC1UcmFu c2Zlci1FbmNvZGluZzogOGJpdAoKVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHN5c3Rl bSBmdW5jdGlvbiBwZ19nZXRfZG9tYWluX2RkbCgpIHRoYXQKcmVjb25zdHJ1Y3RzIHRoZSBD UkVBVEUgRE9NQUlOIHN0YXRlbWVudCBmb3IgYSBnaXZlbiBkb21haW4uIFRoZSBmdW5jdGlv bgp0YWtlcyBhIHJlZ3R5cGUgcGFyYW1ldGVyIGFuZCByZXR1cm5zIHRoZSBjb21wbGV0ZSBE REwgc3RhdGVtZW50IGluY2x1ZGluZwp0aGUgZG9tYWluIG5hbWUsIGJhc2UgdHlwZSwgZGVm YXVsdCB2YWx1ZSwgYW5kIGFsbCBhc3NvY2lhdGVkIGNvbnN0cmFpbnRzLgoKVGhlIGZ1bmN0 aW9uIGZvbGxvd3MgdGhlIHNhbWUgcGF0dGVybiBhcyBvdGhlciBEREwgcmVjb25zdHJ1Y3Rp b24gZnVuY3Rpb25zCmxpa2UgcGdfZ2V0X2Z1bmN0aW9uZGVmKCkgYW5kIHBnX2dldF9jb25z dHJhaW50ZGVmKCksIHByb3ZpZGluZyBhCmRlY29tcGlsZWQgcmVjb25zdHJ1Y3Rpb24gcmF0 aGVyIHRoYW4gdGhlIG9yaWdpbmFsIGNvbW1hbmQgdGV4dC4KCktleSBmZWF0dXJlczoKKiBT dXBwb3J0cyBkb21haW5zIHdpdGggZGVmYXVsdCB2YWx1ZXMKKiBJbmNsdWRlcyBhbGwgZG9t YWluIGNvbnN0cmFpbnRzIChDSEVDSywgTk9UIE5VTEwpCiogTk9UIFZBTElEIGNvbnN0cmFp bnRzIGFyZSBoYW5kbGVkIHdpdGggYW4gZXh0cmEgQUxURVIgY29tbWFuZAoqIFByb3Blcmx5 IHF1b3RlcyBpZGVudGlmaWVycyBhbmQgc2NoZW1hIG5hbWVzCiogSGFuZGxlcyBjb21wbGV4 IGNvbnN0cmFpbnQgZXhwcmVzc2lvbnMKKiBQcmV0dHkgcHJpbnRpbmcgc3VwcG9ydAoqIFdh cm5zIGFnYWluc3QgY29uZmxpY3RpbmcgYnVpbHQtaW4gbmFtZXMKKiBVc2VzIEdFVF9ERExf UFJFVFRZX0ZMQUdTIG1hY3JvIGZvciBjb25zaXN0ZW50IHByZXR0eS1wcmludGluZyBiZWhh dmlvcgoKQSBuZXcgZG9jdW1lbnRhdGlvbiBzZWN0aW9uICJHZXQgT2JqZWN0IERETCBGdW5j dGlvbnMiIGhhcyBiZWVuIGNyZWF0ZWQKdG8gZ3JvdXAgRERMIHJlY29uc3RydWN0aW9uIGZ1 bmN0aW9ucywgc3RhcnRpbmcgd2l0aCBwZ19nZXRfZG9tYWluX2RkbCgpLgpUaGlzIHByb3Zp ZGVzIGEgZm91bmRhdGlvbiBmb3IgZnV0dXJlIERETCBmdW5jdGlvbnMgZm9yIG90aGVyIG9i amVjdCB0eXBlcy4KClJlZ3Jlc3Npb24gdGVzdHMgZm9yIHBnX2dldF9kb21haW5fZGRsKCkg b3V0cHV0IGFyZSBpbmNsdWRlZCBpbiBkb21haW4uc3FsLApjb3ZlcmluZyBwcmV0dHktcHJp bnRpbmcsIHF1b3RlZCBpZGVudGlmaWVycywgTk9UIFZBTElEIGNvbnN0cmFpbnRzLCBkb21h aW4Kc2hhZG93aW5nIGJ1aWx0LWluIHR5cGUgbmFtZXMsIGFuZCBlcnJvciBjYXNlcy4KCkEg Z2xvYmFsIGV2ZW50IHRyaWdnZXIgaW5zdGFsbGVkIGluIHRlc3Rfc2V0dXAuc3FsIGF1dG9t YXRpY2FsbHkgcm91bmQtdHJpcHMKZXZlcnkgQ1JFQVRFIGNvbW1hbmQgd2hvc2Ugb2JqZWN0 IHR5cGUgaGFzIGEgbWF0Y2hpbmcgcGdfZ2V0Xzx0eXBlPl9kZGwoKQpmdW5jdGlvbiBpbiBw Z19jYXRhbG9nLiBPbiBlYWNoIENSRUFURSwgdGhlIHRyaWdnZXIgZXh0cmFjdHMgdGhlIERE TCwgZHJvcHMKdGhlIG9iamVjdCwgcmVjcmVhdGVzIGl0IGZyb20gdGhlIERETCwgYW5kIGFz c2VydHMgdGhlIG91dHB1dCBpcyBpZGVudGljYWwuCkJlY2F1c2UgaXQgcnVucyBpbmxpbmUg YXQgY3JlYXRpb24gdGltZSwgZXZlbiBvYmplY3RzIHRoYXQgYXJlIGxhdGVyIGRyb3BwZWQK Z2V0IHZlcmlmaWVkLiBBIHNlc3Npb24tbG9jYWwgR1VDIGd1YXJkcyBhZ2FpbnN0IHJlY3Vy c2lvbi4gVGhpcyBnaXZlcwphdXRvbWF0aWMgcm91bmQtdHJpcCBjb3ZlcmFnZSB0byBldmVy eSBkb21haW4gYWNyb3NzIHRoZSBlbnRpcmUgcmVncmVzc2lvbgpzdWl0ZSDigJQgYW5kIGV4 dGVuZHMgdG8gZnV0dXJlIHBnX2dldF88dHlwZT5fZGRsKCkgZnVuY3Rpb25zIHdpdGggemVy bwphZGRpdGlvbmFsIGVmZm9ydC4KClJlZmVyZW5jZTogUEctMTUxCkF1dGhvcjogRmxvcmlu IElyaW9uIDxmbG9yaW4uaXJpb25AZW50ZXJwcmlzZWRiLmNvbT4KQXV0aG9yOiBUaW0gV2Fp emVuZWdnZXIgPHRpbS53YWl6ZW5lZ2dlckBlbnRlcnByaXNlZGIuY29tPgpSZXZpZXdlZC1i eTogw4FsdmFybyBIZXJyZXJhIGFsdmhlcnJlQGFsdmgubm8taXAub3JnClJldmlld2VkLWJ5 OiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ClJldmlld2VkLWJ5OiBD aGFvIExpIDxsaS5ldmFuLmNoYW9AZ21haWwuY29tPgpSZXZpZXdlZC1ieTogTmVpbCBDaGVu IDxjYXJwZW50ZXIubmFpbC5jekBnbWFpbC5jb20+ClJldmlld2VkLWJ5OiBNYW4gWmVuZyA8 emVuZ21hbkBoYWxvZGJ0ZWNoLmNvbT4KUmV2aWV3ZWQtYnk6IEhhcml0YWJoIDxHdXB0YSBo YXJpdGFiaDE5OTJAZ21haWwuY29tPgotLS0KIGRvYy9zcmMvc2dtbC9mdW5jL2Z1bmMtaW5m by5zZ21sICAgICAgICAgICAgfCAgNTMgKysrKwogc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0 ZW1fZnVuY3Rpb25zLnNxbCAgICB8ICAgNyArCiBzcmMvYmFja2VuZC91dGlscy9hZHQvcnVs ZXV0aWxzLmMgICAgICAgICAgIHwgMjYwICsrKysrKysrKysrKysrKysrKysrCiBzcmMvaW5j bHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0ICAgICAgICAgICAgIHwgICAzICsKIHNyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvZG9tYWluLm91dCAgICAgICAgfCAgNzggKysrKysrCiBzcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL2V2ZW50X3RyaWdnZXIub3V0IHwgIDEzICstCiBzcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL3Rlc3Rfc2V0dXAub3V0ICAgIHwgIDUwICsrKysKIHNy Yy90ZXN0L3JlZ3Jlc3Mvc3FsL2RvbWFpbi5zcWwgICAgICAgICAgICAgfCAgMzcgKysrCiBz cmMvdGVzdC9yZWdyZXNzL3NxbC90ZXN0X3NldHVwLnNxbCAgICAgICAgIHwgIDUyICsrKysK IDkgZmlsZXMgY2hhbmdlZCwgNTQ3IGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCgpk aWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2Z1bmMvZnVuYy1pbmZvLnNnbWwgYi9kb2Mvc3Jj L3NnbWwvZnVuYy9mdW5jLWluZm8uc2dtbAppbmRleCAyOTRmNDVlODJhMy4uZWIxMjhmZWRl MDkgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9mdW5jL2Z1bmMtaW5mby5zZ21sCisrKyBi L2RvYy9zcmMvc2dtbC9mdW5jL2Z1bmMtaW5mby5zZ21sCkBAIC0zODQ1LDQgKzM4NDUsNTcg QEAgYWNsICAgICAgfCB7cG9zdGdyZXM9YXJ3ZER4dG0vcG9zdGdyZXMsZm9vPXIvcG9zdGdy ZXN9CiAKICAgPC9zZWN0Mj4KIAorICA8c2VjdDIgaWQ9ImZ1bmN0aW9ucy1nZXQtb2JqZWN0 LWRkbCI+CisgICA8dGl0bGU+R2V0IE9iamVjdCBEREwgRnVuY3Rpb25zPC90aXRsZT4KKwor ICAgPHBhcmE+CisgICAgVGhlIGZ1bmN0aW9ucyBzaG93biBpbiA8eHJlZiBsaW5rZW5kPSJm dW5jdGlvbnMtZ2V0LW9iamVjdC1kZGwtdGFibGUiLz4KKyAgICBwcmludCB0aGUgRERMIHN0 YXRlbWVudHMgZm9yIHZhcmlvdXMgZGF0YWJhc2Ugb2JqZWN0cy4KKyAgICAoVGhpcyBpcyBh IGRlY29tcGlsZWQgcmVjb25zdHJ1Y3Rpb24sIG5vdCB0aGUgb3JpZ2luYWwgdGV4dAorICAg IG9mIHRoZSBjb21tYW5kLikKKyAgIDwvcGFyYT4KKworICAgPHRhYmxlIGlkPSJmdW5jdGlv bnMtZ2V0LW9iamVjdC1kZGwtdGFibGUiPgorICAgIDx0aXRsZT5HZXQgT2JqZWN0IERETCBG dW5jdGlvbnM8L3RpdGxlPgorICAgIDx0Z3JvdXAgY29scz0iMSI+CisgICAgIDx0aGVhZD4K KyAgICAgIDxyb3c+CisgICAgICAgPGVudHJ5IHJvbGU9ImZ1bmNfdGFibGVfZW50cnkiPjxw YXJhIHJvbGU9ImZ1bmNfc2lnbmF0dXJlIj4KKyAgICAgICAgRnVuY3Rpb24KKyAgICAgICA8 L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAgICAgIERlc2NyaXB0aW9uCisgICAgICAgPC9w YXJhPjwvZW50cnk+CisgICAgICA8L3Jvdz4KKyAgICAgPC90aGVhZD4KKworICAgICA8dGJv ZHk+CisgICAgICA8cm93PgorICAgICAgIDxlbnRyeSByb2xlPSJmdW5jX3RhYmxlX2VudHJ5 Ij48cGFyYSByb2xlPSJmdW5jX3NpZ25hdHVyZSI+CisgICAgICAgIDxpbmRleHRlcm0+Cisg ICAgICAgICA8cHJpbWFyeT5wZ19nZXRfZG9tYWluX2RkbDwvcHJpbWFyeT4KKyAgICAgICAg PC9pbmRleHRlcm0+CisgICAgICAgIDxmdW5jdGlvbj5wZ19nZXRfZG9tYWluX2RkbDwvZnVu Y3Rpb24+ICggPHBhcmFtZXRlcj5kb21haW48L3BhcmFtZXRlcj4gPHR5cGU+cmVndHlwZTwv dHlwZT4KKyAgICAgICAgIDxvcHRpb25hbD4sIDxwYXJhbWV0ZXI+cHJldHR5PC9wYXJhbWV0 ZXI+IDx0eXBlPmJvb2xlYW48L3R5cGU+IDwvb3B0aW9uYWw+KQorICAgICAgICA8cmV0dXJu dmFsdWU+dGV4dDwvcmV0dXJudmFsdWU+CisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJh PgorICAgICAgICBSZWNvbnN0cnVjdHMgdGhlIGNyZWF0aW5nIGNvbW1hbmQgZm9yIGEgZG9t YWluLgorICAgICAgICBUaGUgcmVzdWx0IGlzIGEgY29tcGxldGUgPGNvbW1hbmQ+Q1JFQVRF IERPTUFJTjwvY29tbWFuZD4gc3RhdGVtZW50LgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8 cGFyYT4KKyAgICAgICAgVGhlIDxwYXJhbWV0ZXI+ZG9tYWluPC9wYXJhbWV0ZXI+IHBhcmFt ZXRlciB1c2VzIHR5cGUgPHR5cGU+cmVndHlwZTwvdHlwZT4sCisgICAgICAgIHdoaWNoIGZv bGxvd3MgdGhlIHN0YW5kYXJkIDx2YXJuYW1lPnNlYXJjaF9wYXRoPC92YXJuYW1lPiBmb3Ig dHlwZSBuYW1lCisgICAgICAgIHJlc29sdXRpb24uIElmIGEgZG9tYWluIG5hbWUgY29uZmxp Y3RzIHdpdGggYSBidWlsdC1pbiB0eXBlIG5hbWUKKyAgICAgICAgKGZvciBleGFtcGxlLCBh IGRvbWFpbiBuYW1lZCA8bGl0ZXJhbD5pbnQ8L2xpdGVyYWw+KSwgeW91IG11c3QgdXNlIGEK KyAgICAgICAgc2NoZW1hLXF1YWxpZmllZCBuYW1lIChmb3IgZXhhbXBsZSwgPGxpdGVyYWw+ J3B1YmxpYy5pbnQnOjpyZWd0eXBlPC9saXRlcmFsPikKKyAgICAgICAgdG8gcmVmZXJlbmNl IHRoZSBkb21haW4uCisgICAgICAgPC9wYXJhPjwvZW50cnk+CisgICAgICA8L3Jvdz4KKyAg ICAgPC90Ym9keT4KKyAgICA8L3Rncm91cD4KKyAgIDwvdGFibGU+CisKKyAgPC9zZWN0Mj4K KwogICA8L3NlY3QxPgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1f ZnVuY3Rpb25zLnNxbCBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX2Z1bmN0aW9ucy5z cWwKaW5kZXggNjk2OTlmODgzMGEuLmY0ODI5Y2M3NzY1IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9jYXRhbG9nL3N5c3RlbV9mdW5jdGlvbnMuc3FsCisrKyBiL3NyYy9iYWNrZW5kL2Nh dGFsb2cvc3lzdGVtX2Z1bmN0aW9ucy5zcWwKQEAgLTM3OCw2ICszNzgsMTMgQEAgQkVHSU4g QVRPTUlDCiBFTkQ7CiAKIAorQ1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04KKyBwZ19nZXRf ZG9tYWluX2RkbChkb21haW5fbmFtZSByZWd0eXBlLCBwcmV0dHkgYm9vbCBERUZBVUxUIGZh bHNlKQorIFJFVFVSTlMgdGV4dAorIExBTkdVQUdFIGludGVybmFsCisgU1RBQkxFIFBBUkFM TEVMIFNBRkUKK0FTICdwZ19nZXRfZG9tYWluX2RkbF9leHQnOworCiAtLQogLS0gVGhlIGRl ZmF1bHQgcGVybWlzc2lvbnMgZm9yIGZ1bmN0aW9ucyBtZWFuIHRoYXQgYW55b25lIGNhbiBl eGVjdXRlIHRoZW0uCiAtLSBBIG51bWJlciBvZiBmdW5jdGlvbnMgc2hvdWxkbid0IGJlIGV4 ZWN1dGFibGUgYnkganVzdCBhbnlvbmUsIGJ1dCByYXRoZXIKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9y dWxldXRpbHMuYwppbmRleCBmMTZmMTUzNTc4NS4uNDVlMDRiY2YxNWIgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYworKysgYi9zcmMvYmFja2VuZC91 dGlscy9hZHQvcnVsZXV0aWxzLmMKQEAgLTk0LDYgKzk0LDExIEBACiAJKChwcmV0dHkpID8g KFBSRVRUWUZMQUdfUEFSRU4gfCBQUkVUVFlGTEFHX0lOREVOVCB8IFBSRVRUWUZMQUdfU0NI RU1BKSBcCiAJIDogUFJFVFRZRkxBR19JTkRFTlQpCiAKKy8qIENvbnZlcnNpb24gb2YgImJv b2wgcHJldHR5IiBvcHRpb24gZm9yIERETCBzdGF0ZW1lbnRzICgwIHdoZW4gZmFsc2UpICov CisjZGVmaW5lIEdFVF9ERExfUFJFVFRZX0ZMQUdTKHByZXR0eSkgXAorCSgocHJldHR5KSA/ IChQUkVUVFlGTEFHX1BBUkVOIHwgUFJFVFRZRkxBR19JTkRFTlQgfCBQUkVUVFlGTEFHX1ND SEVNQSkgXAorCSA6IDApCisKIC8qIERlZmF1bHQgbGluZSBsZW5ndGggZm9yIHByZXR0eS1w cmludCB3cmFwcGluZzogMCBtZWFucyB3cmFwIGFsd2F5cyAqLwogI2RlZmluZSBXUkFQX0NP TFVNTl9ERUZBVUxUCQkwCiAKQEAgLTU0Nyw2ICs1NTIsMTEgQEAgc3RhdGljIHZvaWQgZ2V0 X2pzb25fdGFibGVfbmVzdGVkX2NvbHVtbnMoVGFibGVGdW5jICp0ZiwgSnNvblRhYmxlUGxh biAqcGxhbiwKIAkJCQkJCQkJCQkgIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCwKIAkJCQkJ CQkJCQkgIGJvb2wgc2hvd2ltcGxpY2l0LAogCQkJCQkJCQkJCSAgYm9vbCBuZWVkY29tbWEp Oworc3RhdGljIHZvaWQgZ2V0X2Zvcm1hdHRlZF9zdHJpbmcoU3RyaW5nSW5mbyBidWYsCisJ CQkJCQkJCSBpbnQgcHJldHR5RmxhZ3MsCisJCQkJCQkJCSBpbnQgbm9PZlRhYkNoYXJzLAor CQkJCQkJCQkgY29uc3QgY2hhciAqZm10LC4uLikgcGdfYXR0cmlidXRlX3ByaW50Zig0LCA1 KTsKK3N0YXRpYyBjaGFyICpwZ19nZXRfZG9tYWluX2RkbF93b3JrZXIoT2lkIGRvbWFpbl9v aWQsIGludCBwcmV0dHlGbGFncyk7CiAKICNkZWZpbmUgb25seV9tYXJrZXIocnRlKSAgKChy dGUpLT5pbmggPyAiIiA6ICJPTkxZICIpCiAKQEAgLTEzNzYwLDMgKzEzNzcwLDI1MyBAQCBn ZXRfcmFuZ2VfcGFydGJvdW5kX3N0cmluZyhMaXN0ICpib3VuZF9kYXR1bXMpCiAKIAlyZXR1 cm4gYnVmLmRhdGE7CiB9CisKKy8qCisgKiBnZXRfZm9ybWF0dGVkX3N0cmluZworICoKKyAq IFJldHVybiBhIGZvcm1hdHRlZCB2ZXJzaW9uIG9mIHRoZSBzdHJpbmcuCisgKgorICogcHJl dHR5RmxhZ3MgLSBJZiBwcmV0dHkgaXMgdHJ1ZSwgdGhlIG91dHB1dCBpbmNsdWRlcyB0YWJz IChcdCkgYW5kIG5ld2xpbmVzIChcbikuCisgKiBub09mVGFiQ2hhcnMgLSBpbmRlbnQgd2l0 aCBzcGVjaWZpZWQgbm8gb2YgdGFicy4KKyAqIGZtdCAtIHByaW50Zi1zdHlsZSBmb3JtYXQg c3RyaW5nIHVzZWQgYnkgYXBwZW5kU3RyaW5nSW5mb1ZBLgorICovCitzdGF0aWMgdm9pZAor Z2V0X2Zvcm1hdHRlZF9zdHJpbmcoU3RyaW5nSW5mbyBidWYsIGludCBwcmV0dHlGbGFncywg aW50IG5vT2ZUYWJDaGFycywgY29uc3QgY2hhciAqZm10LC4uLikKK3sKKwlpbnQJCQlzYXZl X2Vycm5vID0gZXJybm87CisKKwlpZiAocHJldHR5RmxhZ3MgJiBQUkVUVFlGTEFHX0lOREVO VCkKKwl7CisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1ZiwgJ1xuJyk7CisJCS8qIEluZGVu dCB3aXRoIHRhYnMgKi8KKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBub09mVGFiQ2hhcnM7IGkr KykKKwkJeworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoYnVmLCAnXHQnKTsKKwkJfQorCX0K KwllbHNlCisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1ZiwgJyAnKTsKKworCWZvciAoOzsp CisJeworCQl2YV9saXN0CQlhcmdzOworCQlpbnQJCQluZWVkZWQ7CisKKwkJZXJybm8gPSBz YXZlX2Vycm5vOworCQl2YV9zdGFydChhcmdzLCBmbXQpOworCQluZWVkZWQgPSBhcHBlbmRT dHJpbmdJbmZvVkEoYnVmLCBmbXQsIGFyZ3MpOworCQl2YV9lbmQoYXJncyk7CisKKwkJaWYg KG5lZWRlZCA9PSAwKQorCQkJYnJlYWs7CisKKwkJZW5sYXJnZVN0cmluZ0luZm8oYnVmLCBu ZWVkZWQpOworCX0KK30KKworCisvKgorICogSGVscGVyIGZ1bmN0aW9uIHRvIHNjYW4gZG9t YWluIGNvbnN0cmFpbnRzCisgKi8KK3N0YXRpYyB2b2lkCitzY2FuX2RvbWFpbl9jb25zdHJh aW50cyhPaWQgZG9tYWluX29pZCwgTGlzdCAqKnZhbGlkY29ucywgTGlzdCAqKmludmFsaWRj b25zKQoreworCVJlbGF0aW9uCWNvbnN0cmFpbnRSZWw7CisJU3lzU2NhbkRlc2Mgc3NjYW47 CisJU2NhbktleURhdGEgc2tleTsKKwlIZWFwVHVwbGUJY29uc3RyYWludFR1cDsKKworCSp2 YWxpZGNvbnMgPSBOSUw7CisJKmludmFsaWRjb25zID0gTklMOworCisJY29uc3RyYWludFJl bCA9IHRhYmxlX29wZW4oQ29uc3RyYWludFJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7 CisKKwlTY2FuS2V5SW5pdCgmc2tleSwKKwkJCQlBbnVtX3BnX2NvbnN0cmFpbnRfY29udHlw aWQsCisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCU9iamVjdElk R2V0RGF0dW0oZG9tYWluX29pZCkpOworCisJc3NjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4o Y29uc3RyYWludFJlbCwKKwkJCQkJCQkgICBDb25zdHJhaW50VHlwaWRJbmRleElkLAorCQkJ CQkJCSAgIHRydWUsCisJCQkJCQkJICAgTlVMTCwKKwkJCQkJCQkgICAxLAorCQkJCQkJCSAg ICZza2V5KTsKKworCXdoaWxlIChIZWFwVHVwbGVJc1ZhbGlkKGNvbnN0cmFpbnRUdXAgPSBz eXN0YWJsZV9nZXRuZXh0KHNzY2FuKSkpCisJeworCQlGb3JtX3BnX2NvbnN0cmFpbnQgY29u ID0gKEZvcm1fcGdfY29uc3RyYWludCkgR0VUU1RSVUNUKGNvbnN0cmFpbnRUdXApOworCisJ CWlmIChjb24tPmNvbnZhbGlkYXRlZCkKKwkJCSp2YWxpZGNvbnMgPSBsYXBwZW5kX29pZCgq dmFsaWRjb25zLCBjb24tPm9pZCk7CisJCWVsc2UKKwkJCSppbnZhbGlkY29ucyA9IGxhcHBl bmRfb2lkKCppbnZhbGlkY29ucywgY29uLT5vaWQpOworCX0KKworCXN5c3RhYmxlX2VuZHNj YW4oc3NjYW4pOworCXRhYmxlX2Nsb3NlKGNvbnN0cmFpbnRSZWwsIEFjY2Vzc1NoYXJlTG9j ayk7CisKKwkvKiBTb3J0IGNvbnN0cmFpbnRzIGJ5IE9JRCBmb3Igc3RhYmxlIG91dHB1dCAq LworCWlmIChsaXN0X2xlbmd0aCgqdmFsaWRjb25zKSA+IDEpCisJCWxpc3Rfc29ydCgqdmFs aWRjb25zLCBsaXN0X29pZF9jbXApOworCWlmIChsaXN0X2xlbmd0aCgqaW52YWxpZGNvbnMp ID4gMSkKKwkJbGlzdF9zb3J0KCppbnZhbGlkY29ucywgbGlzdF9vaWRfY21wKTsKK30KKwor LyoKKyAqIEhlbHBlciBmdW5jdGlvbiB0byBidWlsZCBDUkVBVEUgRE9NQUlOIHN0YXRlbWVu dAorICovCitzdGF0aWMgdm9pZAorYnVpbGRfY3JlYXRlX2RvbWFpbl9zdGF0ZW1lbnQoU3Ry aW5nSW5mbyBidWYsIEZvcm1fcGdfdHlwZSB0eXBGb3JtLAorCQkJCQkJCSAgTm9kZSAqZGVm YXVsdEV4cHIsIExpc3QgKnZhbGlkQ29uc3RyYWludHMsIGludCBwcmV0dHlGbGFncykKK3sK KwlIZWFwVHVwbGUJYmFzZVR5cGVUdXBsZTsKKwlGb3JtX3BnX3R5cGUgYmFzZVR5cGVGb3Jt OworCU9pZAkJCWJhc2VDb2xsYXRpb24gPSBJbnZhbGlkT2lkOworCUxpc3RDZWxsICAgKmxj OworCisJYXBwZW5kU3RyaW5nSW5mbyhidWYsICJDUkVBVEUgRE9NQUlOICVzIEFTICVzIiwK KwkJCQkJIGdlbmVyYXRlX3F1YWxpZmllZF90eXBlX25hbWUodHlwRm9ybS0+b2lkKSwKKwkJ CQkJIGZvcm1hdF90eXBlX2V4dGVuZGVkKHR5cEZvcm0tPnR5cGJhc2V0eXBlLAorCQkJCQkJ CQkJCSAgdHlwRm9ybS0+dHlwdHlwbW9kLAorCQkJCQkJCQkJCSAgRk9STUFUX1RZUEVfVFlQ RU1PRF9HSVZFTiB8CisJCQkJCQkJCQkJICBGT1JNQVRfVFlQRV9GT1JDRV9RVUFMSUZZKSk7 CisKKwkvKiBBZGQgY29sbGF0aW9uIGlmIGl0IGRpZmZlcnMgZnJvbSBiYXNlIHR5cGUncyBj b2xsYXRpb24gKi8KKwlpZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50eXBjb2xsYXRpb24pKQor CXsKKwkJLyogR2V0IGJhc2UgdHlwZSdzIGNvbGxhdGlvbiBmb3IgY29tcGFyaXNvbiAqLwor CQliYXNlVHlwZVR1cGxlID0gU2VhcmNoU3lzQ2FjaGUxKFRZUEVPSUQsIE9iamVjdElkR2V0 RGF0dW0odHlwRm9ybS0+dHlwYmFzZXR5cGUpKTsKKwkJaWYgKEhlYXBUdXBsZUlzVmFsaWQo YmFzZVR5cGVUdXBsZSkpCisJCXsKKwkJCWJhc2VUeXBlRm9ybSA9IChGb3JtX3BnX3R5cGUp IEdFVFNUUlVDVChiYXNlVHlwZVR1cGxlKTsKKwkJCWJhc2VDb2xsYXRpb24gPSBiYXNlVHlw ZUZvcm0tPnR5cGNvbGxhdGlvbjsKKwkJCVJlbGVhc2VTeXNDYWNoZShiYXNlVHlwZVR1cGxl KTsKKwkJfQorCisJCS8qIE9ubHkgYWRkIENPTExBVEUgaWYgZG9tYWluJ3MgY29sbGF0aW9u IGRpZmZlcnMgZnJvbSBiYXNlIHR5cGUncyAqLworCQlpZiAodHlwRm9ybS0+dHlwY29sbGF0 aW9uICE9IGJhc2VDb2xsYXRpb24pCisJCXsKKwkJCWdldF9mb3JtYXR0ZWRfc3RyaW5nKGJ1 ZiwgcHJldHR5RmxhZ3MsIDEsICJDT0xMQVRFICVzIiwKKwkJCQkJCQkJIGdlbmVyYXRlX2Nv bGxhdGlvbl9uYW1lKHR5cEZvcm0tPnR5cGNvbGxhdGlvbikpOworCQl9CisJfQorCisJLyog QWRkIGRlZmF1bHQgdmFsdWUgaWYgcHJlc2VudCAqLworCWlmIChkZWZhdWx0RXhwciAhPSBO VUxMKQorCXsKKwkJY2hhcgkgICAqZGVmYXVsdFZhbHVlID0gZGVwYXJzZV9leHByZXNzaW9u X3ByZXR0eShkZWZhdWx0RXhwciwgTklMLCBmYWxzZSwgZmFsc2UsIHByZXR0eUZsYWdzLCAw KTsKKworCQlnZXRfZm9ybWF0dGVkX3N0cmluZyhidWYsIHByZXR0eUZsYWdzLCAxLCAiREVG QVVMVCAlcyIsIGRlZmF1bHRWYWx1ZSk7CisJfQorCisJLyogQWRkIHZhbGlkIGNvbnN0cmFp bnRzICovCisJZm9yZWFjaChsYywgdmFsaWRDb25zdHJhaW50cykKKwl7CisJCU9pZAkJCWNv bnN0cmFpbnRPaWQgPSBsZmlyc3Rfb2lkKGxjKTsKKwkJSGVhcFR1cGxlCWNvbnN0cmFpbnRU dXA7CisJCUZvcm1fcGdfY29uc3RyYWludCBjb247CisJCWNoYXIJICAgKmNvbnN0cmFpbnRE ZWY7CisKKwkJLyogTG9vayB1cCB0aGUgY29uc3RyYWludCBpbmZvICovCisJCWNvbnN0cmFp bnRUdXAgPSBTZWFyY2hTeXNDYWNoZTEoQ09OU1RST0lELCBPYmplY3RJZEdldERhdHVtKGNv bnN0cmFpbnRPaWQpKTsKKwkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGNvbnN0cmFpbnRUdXAp KQorCQkJY29udGludWU7CQkJLyogY29uc3RyYWludCB3YXMgZHJvcHBlZCBjb25jdXJyZW50 bHkgKi8KKworCQljb24gPSAoRm9ybV9wZ19jb25zdHJhaW50KSBHRVRTVFJVQ1QoY29uc3Ry YWludFR1cCk7CisJCWNvbnN0cmFpbnREZWYgPSBwZ19nZXRfY29uc3RyYWludGRlZl93b3Jr ZXIoY29uc3RyYWludE9pZCwgZmFsc2UsIHByZXR0eUZsYWdzLCB0cnVlKTsKKworCQlnZXRf Zm9ybWF0dGVkX3N0cmluZyhidWYsIHByZXR0eUZsYWdzLCAxLCAiQ09OU1RSQUlOVCAlcyIs CisJCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIoTmFtZVN0cihjb24tPmNvbm5hbWUpKSk7CisJ CWdldF9mb3JtYXR0ZWRfc3RyaW5nKGJ1ZiwgcHJldHR5RmxhZ3MsIDIsICIlcyIsIGNvbnN0 cmFpbnREZWYpOworCisJCVJlbGVhc2VTeXNDYWNoZShjb25zdHJhaW50VHVwKTsKKwl9CisK KwlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICc7Jyk7Cit9CisKKy8qCisgKiBIZWxwZXIg ZnVuY3Rpb24gdG8gYWRkIEFMVEVSIERPTUFJTiBzdGF0ZW1lbnRzIGZvciBpbnZhbGlkIGNv bnN0cmFpbnRzCisgKi8KK3N0YXRpYyB2b2lkCithZGRfYWx0ZXJfZG9tYWluX3N0YXRlbWVu dHMoU3RyaW5nSW5mbyBidWYsIExpc3QgKmludmFsaWRDb25zdHJhaW50cywgaW50IHByZXR0 eUZsYWdzKQoreworCUxpc3RDZWxsICAgKmxjOworCisJZm9yZWFjaChsYywgaW52YWxpZENv bnN0cmFpbnRzKQorCXsKKwkJT2lkCQkJY29uc3RyYWludE9pZCA9IGxmaXJzdF9vaWQobGMp OworCQljaGFyCSAgICphbHRlclN0bXQgPSBwZ19nZXRfY29uc3RyYWludGRlZl93b3JrZXIo Y29uc3RyYWludE9pZCwgdHJ1ZSwgcHJldHR5RmxhZ3MsIHRydWUpOworCisJCWlmIChhbHRl clN0bXQpCisJCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIlxuJXM7IiwgYWx0ZXJTdG10KTsK Kwl9Cit9CisKKy8qCisgKiBwZ19nZXRfZG9tYWluX2RkbF9leHQgLSBHZXQgQ1JFQVRFIERP TUFJTiBzdGF0ZW1lbnQgZm9yIGEgZG9tYWluIHdpdGggcHJldHR5LXByaW50IG9wdGlvbgor ICovCitEYXR1bQorcGdfZ2V0X2RvbWFpbl9kZGxfZXh0KFBHX0ZVTkNUSU9OX0FSR1MpCit7 CisJT2lkCQkJZG9tYWluX29pZCA9IFBHX0dFVEFSR19PSUQoMCk7CisJYm9vbAkJcHJldHR5 ID0gUEdfR0VUQVJHX0JPT0woMSk7CisJY2hhcgkgICAqcmVzOworCWludAkJCXByZXR0eUZs YWdzOworCisJcHJldHR5RmxhZ3MgPSBHRVRfRERMX1BSRVRUWV9GTEFHUyhwcmV0dHkpOwor CisJcmVzID0gcGdfZ2V0X2RvbWFpbl9kZGxfd29ya2VyKGRvbWFpbl9vaWQsIHByZXR0eUZs YWdzKTsKKwlpZiAocmVzID09IE5VTEwpCisJCVBHX1JFVFVSTl9OVUxMKCk7CisJUEdfUkVU VVJOX1RFWFRfUChzdHJpbmdfdG9fdGV4dChyZXMpKTsKK30KKworCisKK3N0YXRpYyBjaGFy ICoKK3BnX2dldF9kb21haW5fZGRsX3dvcmtlcihPaWQgZG9tYWluX29pZCwgaW50IHByZXR0 eUZsYWdzKQoreworCVN0cmluZ0luZm9EYXRhIGJ1ZjsKKwlIZWFwVHVwbGUJdHlwZVR1cGxl OworCUZvcm1fcGdfdHlwZSB0eXBGb3JtOworCU5vZGUJICAgKmRlZmF1bHRFeHByOworCUxp c3QJICAgKnZhbGlkQ29uc3RyYWludHM7CisJTGlzdAkgICAqaW52YWxpZENvbnN0cmFpbnRz OworCisJLyogTG9vayB1cCB0aGUgZG9tYWluIGluIHBnX3R5cGUgKi8KKwl0eXBlVHVwbGUg PSBTZWFyY2hTeXNDYWNoZTEoVFlQRU9JRCwgT2JqZWN0SWRHZXREYXR1bShkb21haW5fb2lk KSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR5cGVUdXBsZSkpCisJCXJldHVybiBOVUxM OworCisJdHlwRm9ybSA9IChGb3JtX3BnX3R5cGUpIEdFVFNUUlVDVCh0eXBlVHVwbGUpOwor CisJLyogQ2hlY2sgdGhhdCB0aGlzIGlzIGFjdHVhbGx5IGEgZG9tYWluICovCisJaWYgKHR5 cEZvcm0tPnR5cHR5cGUgIT0gVFlQVFlQRV9ET01BSU4pCisJCWVyZXBvcnQoRVJST1IsCisJ CQkJKGVycmNvZGUoRVJSQ09ERV9XUk9OR19PQkpFQ1RfVFlQRSksCisJCQkJIGVycm1zZygi XCIlc1wiIGlzIG5vdCBhIGRvbWFpbiIsIGZvcm1hdF90eXBlX2JlKGRvbWFpbl9vaWQpKSwK KwkJCQkgZXJyaGludCgiVXNlIGEgc2NoZW1hLXF1YWxpZmllZCBuYW1lIGlmIHRoZSBkb21h aW4gbmFtZSBjb25mbGljdHMgd2l0aCBhIGJ1aWx0LWluIG5hbWUuIikpKTsKKworCS8qIEdl dCBkZWZhdWx0IGV4cHJlc3Npb24gKi8KKwlkZWZhdWx0RXhwciA9IGdldF90eXBkZWZhdWx0 KGRvbWFpbl9vaWQpOworCisJLyogU2NhbiBmb3IgdmFsaWQgYW5kIGludmFsaWQgY29uc3Ry YWludHMgKi8KKwlzY2FuX2RvbWFpbl9jb25zdHJhaW50cyhkb21haW5fb2lkLCAmdmFsaWRD b25zdHJhaW50cywgJmludmFsaWRDb25zdHJhaW50cyk7CisKKwkvKiBCdWlsZCB0aGUgRERM IHN0YXRlbWVudCAqLworCWluaXRTdHJpbmdJbmZvKCZidWYpOworCWJ1aWxkX2NyZWF0ZV9k b21haW5fc3RhdGVtZW50KCZidWYsIHR5cEZvcm0sIGRlZmF1bHRFeHByLCB2YWxpZENvbnN0 cmFpbnRzLCBwcmV0dHlGbGFncyk7CisKKwkvKiBBZGQgQUxURVIgRE9NQUlOIHN0YXRlbWVu dHMgZm9yIGludmFsaWQgY29uc3RyYWludHMgKi8KKwlpZiAobGlzdF9sZW5ndGgoaW52YWxp ZENvbnN0cmFpbnRzKSA+IDApCisJCWFkZF9hbHRlcl9kb21haW5fc3RhdGVtZW50cygmYnVm LCBpbnZhbGlkQ29uc3RyYWludHMsIHByZXR0eUZsYWdzKTsKKworCS8qIENsZWFudXAgKi8K KwlsaXN0X2ZyZWUodmFsaWRDb25zdHJhaW50cyk7CisJbGlzdF9mcmVlKGludmFsaWRDb25z dHJhaW50cyk7CisJUmVsZWFzZVN5c0NhY2hlKHR5cGVUdXBsZSk7CisKKwlyZXR1cm4gYnVm LmRhdGE7Cit9CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0 IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAppbmRleCBkYWM0MDk5MmNiYy4u ZDFhNGZiYWY0MGEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5k YXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdApAQCAtODUzOSw2ICs4 NTM5LDkgQEAKIHsgb2lkID0+ICcyNTA4JywgZGVzY3IgPT4gJ2NvbnN0cmFpbnQgZGVzY3Jp cHRpb24gd2l0aCBwcmV0dHktcHJpbnQgb3B0aW9uJywKICAgcHJvbmFtZSA9PiAncGdfZ2V0 X2NvbnN0cmFpbnRkZWYnLCBwcm92b2xhdGlsZSA9PiAncycsIHByb3JldHR5cGUgPT4gJ3Rl eHQnLAogICBwcm9hcmd0eXBlcyA9PiAnb2lkIGJvb2wnLCBwcm9zcmMgPT4gJ3BnX2dldF9j b25zdHJhaW50ZGVmX2V4dCcgfSwKK3sgb2lkID0+ICc4MDI0JywgZGVzY3IgPT4gJ2dldCBD UkVBVEUgc3RhdGVtZW50IGZvciBET01BSU4gd2l0aCBwcmV0dHkgb3B0aW9uJywKKyAgcHJv bmFtZSA9PiAncGdfZ2V0X2RvbWFpbl9kZGwnLCBwcm92b2xhdGlsZSA9PiAncycsIHByb3Jl dHR5cGUgPT4gJ3RleHQnLAorICBwcm9hcmd0eXBlcyA9PiAncmVndHlwZSBib29sJywgcHJv c3JjID0+ICdwZ19nZXRfZG9tYWluX2RkbF9leHQnIH0sCiB7IG9pZCA9PiAnMjUwOScsCiAg IGRlc2NyID0+ICdkZXBhcnNlIGFuIGVuY29kZWQgZXhwcmVzc2lvbiB3aXRoIHByZXR0eS1w cmludCBvcHRpb24nLAogICBwcm9uYW1lID0+ICdwZ19nZXRfZXhwcicsIHByb3ZvbGF0aWxl ID0+ICdzJywgcHJvcmV0dHlwZSA9PiAndGV4dCcsCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL2RvbWFpbi5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L2RvbWFpbi5vdXQKaW5kZXggNjJhNDhhNTIzYTIuLjZkZDY0MDhmZDc1IDEwMDY0NAotLS0g YS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2RvbWFpbi5vdXQKKysrIGIvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9kb21haW4ub3V0CkBAIC0xMzc4LDYgKzEzNzgsODQgQEAgTElO RSAxOiAuLi5tIEFERCBDT05TVFJBSU5UIHRoZV9jb25zdHJhaW50IENIRUNLICh2YWx1ZSA+ IDApIE5PVCBFTkZPUkMuLi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBeCiBEUk9QIERPTUFJTiBjb25zdHJhaW50X2Vu Zm9yY2VkX2RvbTsKIC0tCistLSBwZ19nZXRfZG9tYWluX2RkbAorLS0KKy0tIFByZXR0eSBv dXRwdXQgZm9yIGEgY29tcHJlaGVuc2l2ZSBkb21haW4gKERFRkFVTFQgKyBOT1QgTlVMTCAr IG11bHRpcGxlIENIRUNLcykKK0NSRUFURSBET01BSU4gcmVncmVzc19kZGxfY29tcHJlaGVu c2l2ZSBBUyB2YXJjaGFyKDUwKQorICAgIE5PVCBOVUxMCisgICAgREVGQVVMVCAnaGVsbG8n CisgICAgQ0hFQ0sgKExFTkdUSChWQUxVRSkgPj0gMykKKyAgICBDSEVDSyAoVkFMVUUgIX4g J15ccyokJyk7CitTRUxFQ1QgcGdfZ2V0X2RvbWFpbl9kZGwoJ3JlZ3Jlc3NfZGRsX2NvbXBy ZWhlbnNpdmUnLCBwcmV0dHkgPT4gdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcGdfZ2V0X2RvbWFpbl9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIERPTUFJTiBwdWJsaWMucmVncmVzc19kZGxfY29t cHJlaGVuc2l2ZSBBUyBjaGFyYWN0ZXIgdmFyeWluZyg1MCkrCisgICAgICAgICBERUZBVUxU ICdoZWxsbyc6OmNoYXJhY3RlciB2YXJ5aW5nICAgICAgICAgICAgICAgICAgICAgICAgICAg ICArCisgICAgICAgICBDT05TVFJBSU5UIHJlZ3Jlc3NfZGRsX2NvbXByZWhlbnNpdmVfbm90 X251bGwgICAgICAgICAgICAgICAgICArCisgICAgICAgICAgICAgICAgIE5PVCBOVUxMICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCisgICAgICAg ICBDT05TVFJBSU5UIHJlZ3Jlc3NfZGRsX2NvbXByZWhlbnNpdmVfY2hlY2sgICAgICAgICAg ICAgICAgICAgICArCisgICAgICAgICAgICAgICAgIENIRUNLIChsZW5ndGgoVkFMVUU6OnRl eHQpID49IDMpICAgICAgICAgICAgICAgICAgICAgICArCisgICAgICAgICBDT05TVFJBSU5U IHJlZ3Jlc3NfZGRsX2NvbXByZWhlbnNpdmVfY2hlY2sxICAgICAgICAgICAgICAgICAgICAr CisgICAgICAgICAgICAgICAgIENIRUNLIChWQUxVRTo6dGV4dCAhfiAnXlxzKiQnOjp0ZXh0 KTsKKygxIHJvdykKKworRFJPUCBET01BSU4gcmVncmVzc19kZGxfY29tcHJlaGVuc2l2ZTsK Ky0tIFF1b3RlZCBhbmQgc3BlY2lhbCBpZGVudGlmaWVycworQ1JFQVRFIERPTUFJTiAicmVn cmVzc19kb21haW4gd2l0aCBzcGFjZSIgQVMgaW50CisgICAgQ09OU1RSQUlOVCAicmVncmVz c19Db25zdHJhaW50IEEiIENIRUNLIChWQUxVRSA8IDEwMCkKKyAgICBDT05TVFJBSU5UICJy ZWdyZXNzX0NvbnN0cmFpbnQgQiIgQ0hFQ0sgKFZBTFVFID4gMTApOworU0VMRUNUIHBnX2dl dF9kb21haW5fZGRsKCcicmVncmVzc19kb21haW4gd2l0aCBzcGFjZSInLCBwcmV0dHkgPT4g dHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X2RvbWFpbl9kZGwgICAgICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIERPTUFJTiBwdWJsaWMuInJlZ3Jl c3NfZG9tYWluIHdpdGggc3BhY2UiIEFTIGludGVnZXIrCisgICAgICAgICBDT05TVFJBSU5U ICJyZWdyZXNzX0NvbnN0cmFpbnQgQSIgICAgICAgICAgICAgICAgICArCisgICAgICAgICAg ICAgICAgIENIRUNLIChWQUxVRSA8IDEwMCkgICAgICAgICAgICAgICAgICAgICAgICArCisg ICAgICAgICBDT05TVFJBSU5UICJyZWdyZXNzX0NvbnN0cmFpbnQgQiIgICAgICAgICAgICAg ICAgICArCisgICAgICAgICAgICAgICAgIENIRUNLIChWQUxVRSA+IDEwKTsKKygxIHJvdykK KworRFJPUCBET01BSU4gInJlZ3Jlc3NfZG9tYWluIHdpdGggc3BhY2UiOworLS0gTk9UIFZB TElEIGNvbnN0cmFpbnQgcmVuZGVyaW5nIChyZXF1aXJlcyBBTFRFUiBET01BSU4sIG5vdCBD UkVBVEUpCitDUkVBVEUgRE9NQUlOIHJlZ3Jlc3NfZGRsX25vdHZhbGlkIEFTIGludDsKK0FM VEVSIERPTUFJTiByZWdyZXNzX2RkbF9ub3R2YWxpZCBBREQgQ09OU1RSQUlOVCBjaGVja19w b3NpdGl2ZSBDSEVDSyAoVkFMVUUgPiAwKSBOT1QgVkFMSUQ7CitTRUxFQ1QgcGdfZ2V0X2Rv bWFpbl9kZGwoJ3JlZ3Jlc3NfZGRsX25vdHZhbGlkJywgcHJldHR5ID0+IHRydWUpOworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X2RvbWFpbl9k ZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIERPTUFJ TiBwdWJsaWMucmVncmVzc19kZGxfbm90dmFsaWQgQVMgaW50ZWdlcjsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKworIEFMVEVSIERPTUFJTiBwdWJs aWMucmVncmVzc19kZGxfbm90dmFsaWQgQUREIENPTlNUUkFJTlQgY2hlY2tfcG9zaXRpdmUg Q0hFQ0sgKFZBTFVFID4gMCkgTk9UIFZBTElEOworKDEgcm93KQorCitEUk9QIERPTUFJTiBy ZWdyZXNzX2RkbF9ub3R2YWxpZDsKKy0tIERvbWFpbiBzaGFkb3dpbmcgYSBidWlsdC1pbiB0 eXBlIG5hbWUKK0NSRUFURSBET01BSU4gcHVibGljLmludCBBUyBwZ19jYXRhbG9nLmludDQ7 CitTRUxFQ1QgcGdfZ2V0X2RvbWFpbl9kZGwoJ2ludCcpOyAgLS0gc2hvdWxkIGZhaWwKK0VS Uk9SOiAgImludGVnZXIiIGlzIG5vdCBhIGRvbWFpbgorSElOVDogIFVzZSBhIHNjaGVtYS1x dWFsaWZpZWQgbmFtZSBpZiB0aGUgZG9tYWluIG5hbWUgY29uZmxpY3RzIHdpdGggYSBidWls dC1pbiBuYW1lLgorU0VMRUNUIHBnX2dldF9kb21haW5fZGRsKCdwdWJsaWMuaW50Jyk7Cisg ICAgICAgICAgIHBnX2dldF9kb21haW5fZGRsICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIERPTUFJTiBwdWJsaWMuImlu dCIgQVMgaW50ZWdlcjsKKygxIHJvdykKKworRFJPUCBET01BSU4gcHVibGljLmludDsKKy0t IEVycm9yIGNhc2VzCitTRUxFQ1QgcGdfZ2V0X2RvbWFpbl9kZGwoJ25vbmV4aXN0ZW50X2Rv bWFpbl90eXBlJzo6cmVndHlwZSk7ICAtLSBzaG91bGQgZmFpbAorRVJST1I6ICB0eXBlICJu b25leGlzdGVudF9kb21haW5fdHlwZSIgZG9lcyBub3QgZXhpc3QKK0xJTkUgMTogU0VMRUNU IHBnX2dldF9kb21haW5fZGRsKCdub25leGlzdGVudF9kb21haW5fdHlwZSc6OnJlZ3R5cGUp Li4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCitTRUxFQ1QgcGdfZ2V0 X2RvbWFpbl9kZGwoTlVMTCk7ICAtLSBzaG91bGQgcmV0dXJuIE5VTEwKKyBwZ19nZXRfZG9t YWluX2RkbCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworU0VMRUNUIHBn X2dldF9kb21haW5fZGRsKCdwZ19jbGFzcycpOyAgLS0gc2hvdWxkIGZhaWwgLSBub3QgYSBk b21haW4KK0VSUk9SOiAgInBnX2NsYXNzIiBpcyBub3QgYSBkb21haW4KK0hJTlQ6ICBVc2Ug YSBzY2hlbWEtcXVhbGlmaWVkIG5hbWUgaWYgdGhlIGRvbWFpbiBuYW1lIGNvbmZsaWN0cyB3 aXRoIGEgYnVpbHQtaW4gbmFtZS4KK1NFTEVDVCBwZ19nZXRfZG9tYWluX2RkbCgnaW50ZWdl cicpOyAgLS0gc2hvdWxkIGZhaWwgLSBub3QgYSBkb21haW4KK0VSUk9SOiAgImludGVnZXIi IGlzIG5vdCBhIGRvbWFpbgorSElOVDogIFVzZSBhIHNjaGVtYS1xdWFsaWZpZWQgbmFtZSBp ZiB0aGUgZG9tYWluIG5hbWUgY29uZmxpY3RzIHdpdGggYSBidWlsdC1pbiBuYW1lLgorLS0K IC0tIEluZm9ybWF0aW9uIHNjaGVtYQogLS0KIFNFTEVDVCAqIEZST00gaW5mb3JtYXRpb25f c2NoZW1hLmNvbHVtbl9kb21haW5fdXNhZ2UKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvZXZlbnRfdHJpZ2dlci5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL2V2ZW50X3RyaWdnZXIub3V0CmluZGV4IDE2ZTQ1MzA3MDhjLi44YzcwODVlM2IyYyAx MDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ldmVudF90cmlnZ2VyLm91 dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2V2ZW50X3RyaWdnZXIub3V0CkBA IC03ODUsMTIgKzc4NSwxMyBAQCBTRUxFQ1QKICAgICBMQVRFUkFMIHBnX2lkZW50aWZ5X29i amVjdF9hc19hZGRyZXNzKCdwZ19ldmVudF90cmlnZ2VyJzo6cmVnY2xhc3MsIGUub2lkLCAw KSBhcyBiLAogICAgIExBVEVSQUwgcGdfZ2V0X29iamVjdF9hZGRyZXNzKGIudHlwZSwgYi5v YmplY3RfbmFtZXMsIGIub2JqZWN0X2FyZ3MpIGFzIGEKICAgT1JERVIgQlkgZS5ldnRuYW1l OwotICAgICAgZXZ0bmFtZSAgICAgIHwgICAgICAgICAgICAgIGRlc2NyICAgICAgICAgICAg ICB8ICAgICB0eXBlICAgICAgfCAgICBvYmplY3RfbmFtZXMgICAgIHwgb2JqZWN0X2FyZ3Mg fCAgICAgICAgICAgICAgICAgICAgICAgICBpZGVudCAgICAgICAgICAgICAgICAgICAgICAg ICAgCi0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KLSBlbmRfcmxzX2NvbW1hbmQgICB8IGV2ZW50IHRyaWdnZXIgZW5kX3Jsc19jb21t YW5kICAgfCBldmVudCB0cmlnZ2VyIHwge2VuZF9ybHNfY29tbWFuZH0gICB8IHt9ICAgICAg ICAgIHwgKCJldmVudCB0cmlnZ2VyIiwsZW5kX3Jsc19jb21tYW5kLGVuZF9ybHNfY29tbWFu ZCkKLSBzcWxfZHJvcF9jb21tYW5kICB8IGV2ZW50IHRyaWdnZXIgc3FsX2Ryb3BfY29tbWFu ZCAgfCBldmVudCB0cmlnZ2VyIHwge3NxbF9kcm9wX2NvbW1hbmR9ICB8IHt9ICAgICAgICAg IHwgKCJldmVudCB0cmlnZ2VyIiwsc3FsX2Ryb3BfY29tbWFuZCxzcWxfZHJvcF9jb21tYW5k KQotIHN0YXJ0X3Jsc19jb21tYW5kIHwgZXZlbnQgdHJpZ2dlciBzdGFydF9ybHNfY29tbWFu ZCB8IGV2ZW50IHRyaWdnZXIgfCB7c3RhcnRfcmxzX2NvbW1hbmR9IHwge30gICAgICAgICAg fCAoImV2ZW50IHRyaWdnZXIiLCxzdGFydF9ybHNfY29tbWFuZCxzdGFydF9ybHNfY29tbWFu ZCkKLSgzIHJvd3MpCisgICAgICAgICAgICBldnRuYW1lICAgICAgICAgICAgfCAgICAgICAg ICAgICAgICAgICAgZGVzY3IgICAgICAgICAgICAgICAgICAgIHwgICAgIHR5cGUgICAgICB8 ICAgICAgICAgIG9iamVjdF9uYW1lcyAgICAgICAgICAgfCBvYmplY3RfYXJncyB8ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkZW50ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIGVuZF9ybHNfY29tbWFuZCAgICAgICAg ICAgICAgIHwgZXZlbnQgdHJpZ2dlciBlbmRfcmxzX2NvbW1hbmQgICAgICAgICAgICAgICB8 IGV2ZW50IHRyaWdnZXIgfCB7ZW5kX3Jsc19jb21tYW5kfSAgICAgICAgICAgICAgIHwge30g ICAgICAgICAgfCAoImV2ZW50IHRyaWdnZXIiLCxlbmRfcmxzX2NvbW1hbmQsZW5kX3Jsc19j b21tYW5kKQorIHJlZ3Jlc3NfZGRsX3JvdW5kdHJpcF90cmlnZ2VyIHwgZXZlbnQgdHJpZ2dl ciByZWdyZXNzX2RkbF9yb3VuZHRyaXBfdHJpZ2dlciB8IGV2ZW50IHRyaWdnZXIgfCB7cmVn cmVzc19kZGxfcm91bmR0cmlwX3RyaWdnZXJ9IHwge30gICAgICAgICAgfCAoImV2ZW50IHRy aWdnZXIiLCxyZWdyZXNzX2RkbF9yb3VuZHRyaXBfdHJpZ2dlcixyZWdyZXNzX2RkbF9yb3Vu ZHRyaXBfdHJpZ2dlcikKKyBzcWxfZHJvcF9jb21tYW5kICAgICAgICAgICAgICB8IGV2ZW50 IHRyaWdnZXIgc3FsX2Ryb3BfY29tbWFuZCAgICAgICAgICAgICAgfCBldmVudCB0cmlnZ2Vy IHwge3NxbF9kcm9wX2NvbW1hbmR9ICAgICAgICAgICAgICB8IHt9ICAgICAgICAgIHwgKCJl dmVudCB0cmlnZ2VyIiwsc3FsX2Ryb3BfY29tbWFuZCxzcWxfZHJvcF9jb21tYW5kKQorIHN0 YXJ0X3Jsc19jb21tYW5kICAgICAgICAgICAgIHwgZXZlbnQgdHJpZ2dlciBzdGFydF9ybHNf Y29tbWFuZCAgICAgICAgICAgICB8IGV2ZW50IHRyaWdnZXIgfCB7c3RhcnRfcmxzX2NvbW1h bmR9ICAgICAgICAgICAgIHwge30gICAgICAgICAgfCAoImV2ZW50IHRyaWdnZXIiLCxzdGFy dF9ybHNfY29tbWFuZCxzdGFydF9ybHNfY29tbWFuZCkKKyg0IHJvd3MpCiAKIERST1AgRVZF TlQgVFJJR0dFUiBzdGFydF9ybHNfY29tbWFuZDsKIERST1AgRVZFTlQgVFJJR0dFUiBlbmRf cmxzX2NvbW1hbmQ7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3Rl c3Rfc2V0dXAub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC90ZXN0X3NldHVwLm91 dAppbmRleCA5M2E0YzI2OTFjMS4uMGQ1OGNiYjYyOGIgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvdGVzdF9zZXR1cC5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC90ZXN0X3NldHVwLm91dApAQCAtMjM1LDMgKzIzNSw1MyBAQCBjcmVhdGUg ZnVuY3Rpb24gZmlwc2hhc2godGV4dCkKICAgICByZXR1cm5zIHRleHQKICAgICBzdHJpY3Qg aW1tdXRhYmxlIHBhcmFsbGVsIHNhZmUgbGVha3Byb29mCiAgICAgcmV0dXJuIHN1YnN0cihl bmNvZGUoc2hhMjU2KCQxOjpieXRlYSksICdoZXgnKSwgMSwgMzIpOworLS0KKy0tIERETCBy b3VuZC10cmlwIHZlcmlmaWNhdGlvbiBpbmZyYXN0cnVjdHVyZS4KKy0tIEFuIGV2ZW50IHRy aWdnZXIgdGhhdCBhdXRvbWF0aWNhbGx5IHZlcmlmaWVzIHBnX2dldF88dHlwZT5fZGRsKCkg Zm9yIGV2ZXJ5CistLSBDUkVBVEUgY29tbWFuZCB0aGF0IGhhcyBhIG1hdGNoaW5nIHJlY29u c3RydWN0aW9uIGZ1bmN0aW9uLiAgUnVucyBpbmxpbmUgYXQKKy0tIGNyZWF0aW9uIHRpbWUg c28gZXZlbiBvYmplY3RzIHRoYXQgYXJlIGxhdGVyIGRyb3BwZWQgZ2V0IHRlc3RlZC4KKy0t CitDUkVBVEUgRlVOQ1RJT04gcmVncmVzc19kZGxfcm91bmR0cmlwX3RyaWdnZXJfZnVuYygp IFJFVFVSTlMgZXZlbnRfdHJpZ2dlcgorTEFOR1VBR0UgcGxwZ3NxbCBBUyAkJAorREVDTEFS RQorICAgIHIgICAgICAgICAgIFJFQ09SRDsKKyAgICBvYmpfdHlwZSAgICB0ZXh0OworICAg IG9yaWdpbmFsICAgIHRleHQ7CisgICAgcmVjcmVhdGVkICAgdGV4dDsKK0JFR0lOCisgICAg LS0gUmVjdXJzaW9uIGd1YXJkOiB0aGUgcmVjcmVhdGUgc3RlcCBmaXJlcyB0aGlzIHRyaWdn ZXIgYWdhaW4uCisgICAgSUYgY3VycmVudF9zZXR0aW5nKCdyZWdyZXNzLmRkbF9yb3VuZHRy aXBfaW5fcHJvZ3Jlc3MnLCB0cnVlKSA9ICd0cnVlJyBUSEVOCisgICAgICAgIFJFVFVSTjsK KyAgICBFTkQgSUY7CisKKyAgICBGT1IgciBJTiBTRUxFQ1QgKiBGUk9NIHBnX2V2ZW50X3Ry aWdnZXJfZGRsX2NvbW1hbmRzKCkKKyAgICBMT09QCisgICAgICAgIElGIHIuY29tbWFuZF90 YWcgTElLRSAnQ1JFQVRFICUnIFRIRU4KKyAgICAgICAgICAgIG9ial90eXBlIDo9IGxvd2Vy KHN1YnN0cmluZyhyLmNvbW1hbmRfdGFnIGZyb20gJ0NSRUFURSAoLiopJykpOworCisgICAg ICAgICAgICBJRiBFWElTVFMgKAorICAgICAgICAgICAgICAgIFNFTEVDVCAxIEZST00gcGdf cHJvYworICAgICAgICAgICAgICAgIFdIRVJFIHByb25hbWUgID0gZm9ybWF0KCdwZ19nZXRf JXNfZGRsJywgb2JqX3R5cGUpCisgICAgICAgICAgICAgICAgICBBTkQgcHJvbmFtZXNwYWNl ID0gJ3BnX2NhdGFsb2cnOjpyZWduYW1lc3BhY2UKKyAgICAgICAgICAgICkgVEhFTgorICAg ICAgICAgICAgICAgIFBFUkZPUk0gc2V0X2NvbmZpZygncmVncmVzcy5kZGxfcm91bmR0cmlw X2luX3Byb2dyZXNzJywgJ3RydWUnLCB0cnVlKTsKKworICAgICAgICAgICAgICAgIEVYRUNV VEUgZm9ybWF0KCdTRUxFQ1QgcGdfZ2V0XyVzX2RkbCglTCknLCBvYmpfdHlwZSwgci5vYmpl Y3RfaWRlbnRpdHkpCisgICAgICAgICAgICAgICAgICAgIElOVE8gb3JpZ2luYWw7CisgICAg ICAgICAgICAgICAgRVhFQ1VURSBmb3JtYXQoJ0RST1AgJXMgJXMnLCBvYmpfdHlwZSwgci5v YmplY3RfaWRlbnRpdHkpOworICAgICAgICAgICAgICAgIEVYRUNVVEUgb3JpZ2luYWw7Cisg ICAgICAgICAgICAgICAgRVhFQ1VURSBmb3JtYXQoJ1NFTEVDVCBwZ19nZXRfJXNfZGRsKCVM KScsIG9ial90eXBlLCByLm9iamVjdF9pZGVudGl0eSkKKyAgICAgICAgICAgICAgICAgICAg SU5UTyByZWNyZWF0ZWQ7CisKKyAgICAgICAgICAgICAgICBBU1NFUlQgb3JpZ2luYWwgPSBy ZWNyZWF0ZWQsCisgICAgICAgICAgICAgICAgICAgIGZvcm1hdChFJ0RETCByb3VuZC10cmlw IG1pc21hdGNoIGZvciAlcyAlczpcbiAgb3JpZ2luYWw6ICAlc1xuICByZWNyZWF0ZWQ6ICVz JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ial90eXBlLCByLm9iamVjdF9pZGVu dGl0eSwgb3JpZ2luYWwsIHJlY3JlYXRlZCk7CisKKyAgICAgICAgICAgICAgICBQRVJGT1JN IHNldF9jb25maWcoJ3JlZ3Jlc3MuZGRsX3JvdW5kdHJpcF9pbl9wcm9ncmVzcycsICdmYWxz ZScsIHRydWUpOworICAgICAgICAgICAgRU5EIElGOworICAgICAgICBFTkQgSUY7CisgICAg RU5EIExPT1A7CitFTkQ7CiskJDsKK0NSRUFURSBFVkVOVCBUUklHR0VSIHJlZ3Jlc3NfZGRs X3JvdW5kdHJpcF90cmlnZ2VyIE9OIGRkbF9jb21tYW5kX2VuZAorICAgIEVYRUNVVEUgRlVO Q1RJT04gcmVncmVzc19kZGxfcm91bmR0cmlwX3RyaWdnZXJfZnVuYygpOwpkaWZmIC0tZ2l0 IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZG9tYWluLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mv c3FsL2RvbWFpbi5zcWwKaW5kZXggYjhmNWE2Mzk3MTIuLmRkMDk5M2EwYzg0IDEwMDY0NAot LS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9kb21haW4uc3FsCisrKyBiL3NyYy90ZXN0L3Jl Z3Jlc3Mvc3FsL2RvbWFpbi5zcWwKQEAgLTg5NCw2ICs4OTQsNDMgQEAgQUxURVIgRE9NQUlO IGNvbnN0cmFpbnRfZW5mb3JjZWRfZG9tIEFERCBDT05TVFJBSU5UIHRoZV9jb25zdHJhaW50 IENIRUNLICh2YWx1ZQogQUxURVIgRE9NQUlOIGNvbnN0cmFpbnRfZW5mb3JjZWRfZG9tIEFE RCBDT05TVFJBSU5UIHRoZV9jb25zdHJhaW50IENIRUNLICh2YWx1ZSA+IDApIE5PVCBFTkZP UkNFRDsKIERST1AgRE9NQUlOIGNvbnN0cmFpbnRfZW5mb3JjZWRfZG9tOwogCistLQorLS0g cGdfZ2V0X2RvbWFpbl9kZGwKKy0tCistLSBQcmV0dHkgb3V0cHV0IGZvciBhIGNvbXByZWhl bnNpdmUgZG9tYWluIChERUZBVUxUICsgTk9UIE5VTEwgKyBtdWx0aXBsZSBDSEVDS3MpCitD UkVBVEUgRE9NQUlOIHJlZ3Jlc3NfZGRsX2NvbXByZWhlbnNpdmUgQVMgdmFyY2hhcig1MCkK KyAgICBOT1QgTlVMTAorICAgIERFRkFVTFQgJ2hlbGxvJworICAgIENIRUNLIChMRU5HVEgo VkFMVUUpID49IDMpCisgICAgQ0hFQ0sgKFZBTFVFICF+ICdeXHMqJCcpOworU0VMRUNUIHBn X2dldF9kb21haW5fZGRsKCdyZWdyZXNzX2RkbF9jb21wcmVoZW5zaXZlJywgcHJldHR5ID0+ IHRydWUpOworRFJPUCBET01BSU4gcmVncmVzc19kZGxfY29tcHJlaGVuc2l2ZTsKKworLS0g UXVvdGVkIGFuZCBzcGVjaWFsIGlkZW50aWZpZXJzCitDUkVBVEUgRE9NQUlOICJyZWdyZXNz X2RvbWFpbiB3aXRoIHNwYWNlIiBBUyBpbnQKKyAgICBDT05TVFJBSU5UICJyZWdyZXNzX0Nv bnN0cmFpbnQgQSIgQ0hFQ0sgKFZBTFVFIDwgMTAwKQorICAgIENPTlNUUkFJTlQgInJlZ3Jl c3NfQ29uc3RyYWludCBCIiBDSEVDSyAoVkFMVUUgPiAxMCk7CitTRUxFQ1QgcGdfZ2V0X2Rv bWFpbl9kZGwoJyJyZWdyZXNzX2RvbWFpbiB3aXRoIHNwYWNlIicsIHByZXR0eSA9PiB0cnVl KTsKK0RST1AgRE9NQUlOICJyZWdyZXNzX2RvbWFpbiB3aXRoIHNwYWNlIjsKKworLS0gTk9U IFZBTElEIGNvbnN0cmFpbnQgcmVuZGVyaW5nIChyZXF1aXJlcyBBTFRFUiBET01BSU4sIG5v dCBDUkVBVEUpCitDUkVBVEUgRE9NQUlOIHJlZ3Jlc3NfZGRsX25vdHZhbGlkIEFTIGludDsK K0FMVEVSIERPTUFJTiByZWdyZXNzX2RkbF9ub3R2YWxpZCBBREQgQ09OU1RSQUlOVCBjaGVj a19wb3NpdGl2ZSBDSEVDSyAoVkFMVUUgPiAwKSBOT1QgVkFMSUQ7CitTRUxFQ1QgcGdfZ2V0 X2RvbWFpbl9kZGwoJ3JlZ3Jlc3NfZGRsX25vdHZhbGlkJywgcHJldHR5ID0+IHRydWUpOwor RFJPUCBET01BSU4gcmVncmVzc19kZGxfbm90dmFsaWQ7CisKKy0tIERvbWFpbiBzaGFkb3dp bmcgYSBidWlsdC1pbiB0eXBlIG5hbWUKK0NSRUFURSBET01BSU4gcHVibGljLmludCBBUyBw Z19jYXRhbG9nLmludDQ7CitTRUxFQ1QgcGdfZ2V0X2RvbWFpbl9kZGwoJ2ludCcpOyAgLS0g c2hvdWxkIGZhaWwKK1NFTEVDVCBwZ19nZXRfZG9tYWluX2RkbCgncHVibGljLmludCcpOwor RFJPUCBET01BSU4gcHVibGljLmludDsKKworLS0gRXJyb3IgY2FzZXMKK1NFTEVDVCBwZ19n ZXRfZG9tYWluX2RkbCgnbm9uZXhpc3RlbnRfZG9tYWluX3R5cGUnOjpyZWd0eXBlKTsgIC0t IHNob3VsZCBmYWlsCitTRUxFQ1QgcGdfZ2V0X2RvbWFpbl9kZGwoTlVMTCk7ICAtLSBzaG91 bGQgcmV0dXJuIE5VTEwKK1NFTEVDVCBwZ19nZXRfZG9tYWluX2RkbCgncGdfY2xhc3MnKTsg IC0tIHNob3VsZCBmYWlsIC0gbm90IGEgZG9tYWluCitTRUxFQ1QgcGdfZ2V0X2RvbWFpbl9k ZGwoJ2ludGVnZXInKTsgIC0tIHNob3VsZCBmYWlsIC0gbm90IGEgZG9tYWluCisKIC0tCiAt LSBJbmZvcm1hdGlvbiBzY2hlbWEKIC0tCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNz L3NxbC90ZXN0X3NldHVwLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3Rlc3Rfc2V0dXAu c3FsCmluZGV4IDU4NTQzOTlhMDI4Li4xNmJmYzY4OTM0OCAxMDA2NDQKLS0tIGEvc3JjL3Rl c3QvcmVncmVzcy9zcWwvdGVzdF9zZXR1cC5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9z cWwvdGVzdF9zZXR1cC5zcWwKQEAgLTI4OSwzICsyODksNTUgQEAgY3JlYXRlIGZ1bmN0aW9u IGZpcHNoYXNoKHRleHQpCiAgICAgcmV0dXJucyB0ZXh0CiAgICAgc3RyaWN0IGltbXV0YWJs ZSBwYXJhbGxlbCBzYWZlIGxlYWtwcm9vZgogICAgIHJldHVybiBzdWJzdHIoZW5jb2RlKHNo YTI1NigkMTo6Ynl0ZWEpLCAnaGV4JyksIDEsIDMyKTsKKworLS0KKy0tIERETCByb3VuZC10 cmlwIHZlcmlmaWNhdGlvbiBpbmZyYXN0cnVjdHVyZS4KKy0tIEFuIGV2ZW50IHRyaWdnZXIg dGhhdCBhdXRvbWF0aWNhbGx5IHZlcmlmaWVzIHBnX2dldF88dHlwZT5fZGRsKCkgZm9yIGV2 ZXJ5CistLSBDUkVBVEUgY29tbWFuZCB0aGF0IGhhcyBhIG1hdGNoaW5nIHJlY29uc3RydWN0 aW9uIGZ1bmN0aW9uLiAgUnVucyBpbmxpbmUgYXQKKy0tIGNyZWF0aW9uIHRpbWUgc28gZXZl biBvYmplY3RzIHRoYXQgYXJlIGxhdGVyIGRyb3BwZWQgZ2V0IHRlc3RlZC4KKy0tCitDUkVB VEUgRlVOQ1RJT04gcmVncmVzc19kZGxfcm91bmR0cmlwX3RyaWdnZXJfZnVuYygpIFJFVFVS TlMgZXZlbnRfdHJpZ2dlcgorTEFOR1VBR0UgcGxwZ3NxbCBBUyAkJAorREVDTEFSRQorICAg IHIgICAgICAgICAgIFJFQ09SRDsKKyAgICBvYmpfdHlwZSAgICB0ZXh0OworICAgIG9yaWdp bmFsICAgIHRleHQ7CisgICAgcmVjcmVhdGVkICAgdGV4dDsKK0JFR0lOCisgICAgLS0gUmVj dXJzaW9uIGd1YXJkOiB0aGUgcmVjcmVhdGUgc3RlcCBmaXJlcyB0aGlzIHRyaWdnZXIgYWdh aW4uCisgICAgSUYgY3VycmVudF9zZXR0aW5nKCdyZWdyZXNzLmRkbF9yb3VuZHRyaXBfaW5f cHJvZ3Jlc3MnLCB0cnVlKSA9ICd0cnVlJyBUSEVOCisgICAgICAgIFJFVFVSTjsKKyAgICBF TkQgSUY7CisKKyAgICBGT1IgciBJTiBTRUxFQ1QgKiBGUk9NIHBnX2V2ZW50X3RyaWdnZXJf ZGRsX2NvbW1hbmRzKCkKKyAgICBMT09QCisgICAgICAgIElGIHIuY29tbWFuZF90YWcgTElL RSAnQ1JFQVRFICUnIFRIRU4KKyAgICAgICAgICAgIG9ial90eXBlIDo9IGxvd2VyKHN1YnN0 cmluZyhyLmNvbW1hbmRfdGFnIGZyb20gJ0NSRUFURSAoLiopJykpOworCisgICAgICAgICAg ICBJRiBFWElTVFMgKAorICAgICAgICAgICAgICAgIFNFTEVDVCAxIEZST00gcGdfcHJvYwor ICAgICAgICAgICAgICAgIFdIRVJFIHByb25hbWUgID0gZm9ybWF0KCdwZ19nZXRfJXNfZGRs Jywgb2JqX3R5cGUpCisgICAgICAgICAgICAgICAgICBBTkQgcHJvbmFtZXNwYWNlID0gJ3Bn X2NhdGFsb2cnOjpyZWduYW1lc3BhY2UKKyAgICAgICAgICAgICkgVEhFTgorICAgICAgICAg ICAgICAgIFBFUkZPUk0gc2V0X2NvbmZpZygncmVncmVzcy5kZGxfcm91bmR0cmlwX2luX3By b2dyZXNzJywgJ3RydWUnLCB0cnVlKTsKKworICAgICAgICAgICAgICAgIEVYRUNVVEUgZm9y bWF0KCdTRUxFQ1QgcGdfZ2V0XyVzX2RkbCglTCknLCBvYmpfdHlwZSwgci5vYmplY3RfaWRl bnRpdHkpCisgICAgICAgICAgICAgICAgICAgIElOVE8gb3JpZ2luYWw7CisgICAgICAgICAg ICAgICAgRVhFQ1VURSBmb3JtYXQoJ0RST1AgJXMgJXMnLCBvYmpfdHlwZSwgci5vYmplY3Rf aWRlbnRpdHkpOworICAgICAgICAgICAgICAgIEVYRUNVVEUgb3JpZ2luYWw7CisgICAgICAg ICAgICAgICAgRVhFQ1VURSBmb3JtYXQoJ1NFTEVDVCBwZ19nZXRfJXNfZGRsKCVMKScsIG9i al90eXBlLCByLm9iamVjdF9pZGVudGl0eSkKKyAgICAgICAgICAgICAgICAgICAgSU5UTyBy ZWNyZWF0ZWQ7CisKKyAgICAgICAgICAgICAgICBBU1NFUlQgb3JpZ2luYWwgPSByZWNyZWF0 ZWQsCisgICAgICAgICAgICAgICAgICAgIGZvcm1hdChFJ0RETCByb3VuZC10cmlwIG1pc21h dGNoIGZvciAlcyAlczpcbiAgb3JpZ2luYWw6ICAlc1xuICByZWNyZWF0ZWQ6ICVzJywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIG9ial90eXBlLCByLm9iamVjdF9pZGVudGl0eSwg b3JpZ2luYWwsIHJlY3JlYXRlZCk7CisKKyAgICAgICAgICAgICAgICBQRVJGT1JNIHNldF9j b25maWcoJ3JlZ3Jlc3MuZGRsX3JvdW5kdHJpcF9pbl9wcm9ncmVzcycsICdmYWxzZScsIHRy dWUpOworICAgICAgICAgICAgRU5EIElGOworICAgICAgICBFTkQgSUY7CisgICAgRU5EIExP T1A7CitFTkQ7CiskJDsKKworQ1JFQVRFIEVWRU5UIFRSSUdHRVIgcmVncmVzc19kZGxfcm91 bmR0cmlwX3RyaWdnZXIgT04gZGRsX2NvbW1hbmRfZW5kCisgICAgRVhFQ1VURSBGVU5DVElP TiByZWdyZXNzX2RkbF9yb3VuZHRyaXBfdHJpZ2dlcl9mdW5jKCk7Ci0tIAoyLjQ1LjEKCg== --------------JRa3K07bTaI3uGFgTC8jSkVq--