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.94.2) (envelope-from ) id 1v91hG-008ndM-77 for pgsql-hackers@arkaria.postgresql.org; Wed, 15 Oct 2025 13:37:41 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1v91hC-006UGX-TV for pgsql-hackers@arkaria.postgresql.org; Wed, 15 Oct 2025 13:37:37 +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.94.2) (envelope-from ) id 1v91hC-006UGP-GM for pgsql-hackers@lists.postgresql.org; Wed, 15 Oct 2025 13:37:37 +0000 Received: from mail-lf1-x12a.google.com ([2a00:1450:4864:20::12a]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1v91h8-002KkM-0K for pgsql-hackers@postgresql.org; Wed, 15 Oct 2025 13:37:36 +0000 Received: by mail-lf1-x12a.google.com with SMTP id 2adb3069b0e04-579363a4602so7862486e87.0 for ; Wed, 15 Oct 2025 06:37:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb.com; s=google; t=1760535447; x=1761140247; darn=postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=Mq0a9ejbCJxroNizBdSL7RW3Em0WY4TK98iRA0hTYr0=; b=K8zZMMEbkA3nIb8GXrcXgeYWDUC97HiI10/ELA9nOjl0O896zJusp9mOBCwCXveYqD kdDg3wlyPwHqyGxB/t5tIUiytXxlck2Qj3Ko+j4SNYaFWxi2voWRYfSKtv3rUaul0CQE gKuLG1mH9iHlq/qzXgJu36wAZUt3eovTiSorqmasvLtnEJBqC25wfnLXFgHDH4EnLlLN zPN+eSBHisBTO4kkiil3z8WP3RGKqzBrP+TFZn/TaoNYlTHgPZxiEK2TaGoysUp5ptr0 SE1ybHYCLhMMd62qldclrClSb2Q+rhfuYNm9wxNSkAN43GJIjQGsAWrepT38MHZv4qry mdWA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1760535447; x=1761140247; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=Mq0a9ejbCJxroNizBdSL7RW3Em0WY4TK98iRA0hTYr0=; b=Q3ekyzzkWHMq2A1y7JPIRnE74fws10ROm/lzzqiyMjTxX+ES4kDsIRLmYiNuQe9Ljg A75BMJF2k5+Ax4oaK2/P4dq7iPE+885mAT5ZLbQAhkJkF2gakZNJgUnZLlhS+KdQ09VD kuUID9Fzu1iVLgpNjChtwd3FrEGVtduQ3LVMK+rQgPGXXvXmAsKlilWQ4Mo/RMnB47nV a25EJRDbuEiK7lDc25PzwH5K3LGXVuDVt/7U/NdAjgL4/KDERhdfRgCpD0mDh5/MLpLr V2HfJRCRD1K7FSThkZgb333cuof3YRkqKMVRTflADZTvK+P9I9BmJ0ainxNUwyXUucaH eu/Q== X-Gm-Message-State: AOJu0YwpVXxnKPs0t0uI/ChQNRE3EvVt8MoSF+lh1DGV5fEsOMSeU7m8 mP+M5wAu8NLdfWprrc+uh6UDenAHne4ne9Q6N4VsO6bDSlOjWhiBN2iHXDY6VAqqCdzwG23vosp 0CBdhvZrPkXOTz1ytXPQD+6EvkxirGY+/g3WR28LDok+CVdy3YB90lHGV X-Gm-Gg: ASbGncvPJzHStUexiXzVeB48sB0aM/giM74DWCYKH151DQ7mLj3UwMv80eV2JDHYAko feuSXSaa9NR270AHeXRXBWvVjuBSPKB4Bhab2jassutlBb9LEat6zq0poYO3kms5Vd9vi6OQYWq /1oxiXnsJSSEZbahdWrhAuF7ld4kELnD2UcJ/+ZNBnusPmn7oh9+v4hgnRi1JoP2cFBG5maPc40 CX3YcNA2iNsfiglSxx6WFDGsM2EGZBz7ntlGuI= X-Google-Smtp-Source: AGHT+IGEN5blNptoj/O8znRSKK0wKW8iQfkUuHPbvr89U5GpHTYunr3+4/N+J57Q8e4QIgJnPiwRxpRUVO4Oy1lk8UE= X-Received: by 2002:a05:6512:1190:b0:587:94d4:9f6 with SMTP id 2adb3069b0e04-5906dd7cbdemr8633338e87.52.1760535447017; Wed, 15 Oct 2025 06:37:27 -0700 (PDT) MIME-Version: 1.0 From: Akshay Joshi Date: Wed, 15 Oct 2025 19:07:12 +0530 X-Gm-Features: AS18NWAbJA-PKkEvCC1wREKyUllD5lmOnKt2GvZXjlH5qQ_Ej0wR4Tk-7w9swTY Message-ID: Subject: [PATCH] Add pg_get_policy_ddl() function to reconstruct CREATE POLICY statement To: pgsql-hackers Content-Type: multipart/mixed; boundary="000000000000ef621406413299f1" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000ef621406413299f1 Content-Type: multipart/alternative; boundary="000000000000ef621206413299ef" --000000000000ef621206413299ef Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi Hackers, I=E2=80=99m submitting a patch as part of the broader Retail DDL Functions = project described by Andrew Dunstan https://www.postgresql.org/message-id/945db7c5-be75-45bf-b55b-cb1e56f2e3e9%= 40dunslane.net This patch adds a new system function pg_get_policy_ddl(table, policy_name, pretty), which reconstructs the CREATE POLICY statement for a given table and policy. When the pretty flag is set to true, the function returns a neatly formatted, multi-line DDL statement instead of a single-line statement. Usage examples: 1) SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p8', false); -- *non-pretty formatted DDL* pg_get_policy_ddl ---------------------------------------------------------------------------= ---------------------------------------------------------------------------= --------- CREATE POLICY rls_p8 ON rls_tbl_1 AS PERMISSIVE FOR ALL TO regress_rls_alice, regress_rls_dave USING (true); 2) SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p8', true); -- *pretty formatted DDL* pg_get_policy_ddl ------------------------------------------------ CREATE POLICY rls_p8 ON rls_tbl_1 AS PERMISSIVE FOR ALL TO regress_rls_alice, regress_rls_dave USING (true) ; The patch includes documentation, in-code comments, and regression tests, all of which pass successfully. ----- Regards, Akshay Joshi EDB (EnterpriseDB) --000000000000ef621206413299ef Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi Hackers,

I=E2=80=99m submitting a patch as part = of the broader Retail DDL Functions project described by Andrew Dunstan https://www.postgresql.org/message-id/945db7c5-be75= -45bf-b55b-cb1e56f2e3e9%40dunslane.net

This patch adds a new sys= tem function pg_get_policy_ddl(table, policy_name, pretty), which reconstru= cts the CREATE POLICY statement for a given table and policy. When the pret= ty flag is set to true, the function returns a neatly formatted, multi-line= DDL statement instead of a single-line statement.

Usage examples:
1) SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p8', fa= lse); =C2=A0-- non-pretty formatted DDL
=C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0pg_get= _policy_ddl =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0
----------------------------------------= ---------------------------------------------------------------------------= --------------------------------------------
CREATE POLICY rls_p8 ON rls= _tbl_1 AS PERMISSIVE FOR ALL TO regress_rls_alice, regress_rls_dave USING (= true);

2) SELECT pg_get_policy_ddl('rls_tbl_1', 'rls_p8&= #39;, true); =C2=A0 -- pretty formatted DDL
=C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0pg_get_policy_ddl=C2=A0
--------------= ----------------------------------
=C2=A0CREATE POLICY rls_p8 ON rls_tbl= _1=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0
=C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0AS PERMISSIVE
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0FOR ALL
= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0TO regress_rls_alice, regress_rls_dave=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0USING (true)
=C2=A0;

The patch= includes documentation, in-code comments, and regression tests, all of whi= ch pass successfully.

-----
Regards,
Akshay Joshi
EDB (Ente= rpriseDB)
--000000000000ef621206413299ef-- --000000000000ef621406413299f1 Content-Type: application/octet-stream; name="0001-Add-pg_get_policy_ddl-function-to-reconstruct-CREATE.patch" Content-Disposition: attachment; filename="0001-Add-pg_get_policy_ddl-function-to-reconstruct-CREATE.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mgrzblyt0 RnJvbSA3NDQ1ZGM2MjljMjEzOTkwNWY3M2E2MTI4ZDRlZDMwNTk3YmRlY2IxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBa3NoYXkgSm9zaGkgPGFrc2hheS5qb3NoaUBlbnRlcnByaXNl ZGIuY29tPgpEYXRlOiBGcmksIDEwIE9jdCAyMDI1IDE1OjQ2OjEzICswNTMwClN1YmplY3Q6IFtQ QVRDSF0gQWRkIHBnX2dldF9wb2xpY3lfZGRsKCkgZnVuY3Rpb24gdG8gcmVjb25zdHJ1Y3QgQ1JF QVRFIFBPTElDWQogc3RhdGVtZW50cwoKVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHN5c3Rl bSBmdW5jdGlvbjoKcGdfZ2V0X3BvbGljeV9kZGwocmVnY2xhc3MgdGFibGUsIG5hbWUgcG9saWN5 X25hbWUsIGJvb2wgcHJldHR5KSwKd2hpY2ggcmVjb25zdHJ1Y3RzIHRoZSBDUkVBVEUgUE9MSUNZ IHN0YXRlbWVudCBmb3IgdGhlIHNwZWNpZmllZCBwb2xpY3kuCgpVc2FnZSBleGFtcGxlczoKU0VM RUNUIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGFibGUnLCAncG9sMScsIGZhbHNlKTsgLS0gbm9u LXByZXR0eSBmb3JtYXR0ZWQgRERMClNFTEVDVCBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3RhYmxl JywgJ3BvbDEnLCB0cnVlKTsgIC0tIHByZXR0eSBmb3JtYXR0ZWQgRERMCgpSZWZlcmVuY2U6IFBH LTE2MwpBdXRob3I6IEFrc2hheSBKb3NoaSBha3NoYXkuam9zaGlAZW50ZXJwcmlzZWRiLmNvbQot LS0KIGRvYy9zcmMvc2dtbC9mdW5jL2Z1bmMtaW5mby5zZ21sICAgICAgICAgIHwgIDQ1ICsrKysr CiBzcmMvYmFja2VuZC9jb21tYW5kcy9wb2xpY3kuYyAgICAgICAgICAgICB8ICAyNyArKysKIHNy Yy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYyAgICAgICAgIHwgMTc4ICsrKysrKysrKysr KysrKysrKysKIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgICAgICAgICAgIHwgICAz ICsKIHNyYy9pbmNsdWRlL2NvbW1hbmRzL3BvbGljeS5oICAgICAgICAgICAgIHwgICAyICsKIHNy Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcm93c2VjdXJpdHkub3V0IHwgMTk5ICsrKysrKysrKysr KysrKysrKysrKy0KIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3Jvd3NlY3VyaXR5LnNxbCAgICAgIHwg IDc4ICsrKysrKysrKwogNyBmaWxlcyBjaGFuZ2VkLCA1MzEgaW5zZXJ0aW9ucygrKSwgMSBkZWxl dGlvbigtKQoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9mdW5jL2Z1bmMtaW5mby5zZ21sIGIv ZG9jL3NyYy9zZ21sL2Z1bmMvZnVuYy1pbmZvLnNnbWwKaW5kZXggYzM5MzgzMmQ5NGMuLjRiOWM2 NjFjMjBiIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvZnVuYy9mdW5jLWluZm8uc2dtbAorKysg Yi9kb2Mvc3JjL3NnbWwvZnVuYy9mdW5jLWluZm8uc2dtbApAQCAtMzc5Nyw0ICszNzk3LDQ5IEBA IGFjbCAgICAgIHwge3Bvc3RncmVzPWFyd2REeHRtL3Bvc3RncmVzLGZvbz1yL3Bvc3RncmVzfQog CiAgIDwvc2VjdDI+CiAKKyAgPHNlY3QyIGlkPSJmdW5jdGlvbnMtZ2V0LW9iamVjdC1kZGwiPgor ICAgPHRpdGxlPkdldCBPYmplY3QgRERMIEZ1bmN0aW9uczwvdGl0bGU+CisKKyAgIDxwYXJhPgor ICAgIFRoZSBmdW5jdGlvbnMgZGVzY3JpYmVkIGluIDx4cmVmIGxpbmtlbmQ9ImZ1bmN0aW9ucy1n ZXQtb2JqZWN0LWRkbC10YWJsZSIvPgorICAgIHJldHVybiB0aGUgRGF0YSBEZWZpbml0aW9uIExh bmd1YWdlIChEREwpIHN0YXRlbWVudCBmb3IgYW55IGdpdmVuIGRhdGFiYXNlIG9iamVjdC4KKyAg ICBUaGlzIGZlYXR1cmUgaXMgaW1wbGVtZW50ZWQgYXMgYSBzZXQgb2YgZGlzdGluY3QgZnVuY3Rp b25zIGZvciBlYWNoIG9iamVjdCB0eXBlLgorICAgPC9wYXJhPgorCisgICA8dGFibGUgaWQ9ImZ1 bmN0aW9ucy1nZXQtb2JqZWN0LWRkbC10YWJsZSI+CisgICAgPHRpdGxlPkdldCBPYmplY3QgRERM IEZ1bmN0aW9uczwvdGl0bGU+CisgICAgPHRncm91cCBjb2xzPSIxIj4KKyAgICAgPHRoZWFkPgor ICAgICAgPHJvdz4KKyAgICAgICA8ZW50cnkgcm9sZT0iZnVuY190YWJsZV9lbnRyeSI+PHBhcmEg cm9sZT0iZnVuY19zaWduYXR1cmUiPgorICAgICAgICBGdW5jdGlvbgorICAgICAgIDwvcGFyYT4K KyAgICAgICA8cGFyYT4KKyAgICAgICAgRGVzY3JpcHRpb24KKyAgICAgICA8L3BhcmE+PC9lbnRy eT4KKyAgICAgIDwvcm93PgorICAgICA8L3RoZWFkPgorCisgICAgIDx0Ym9keT4KKyAgICAgIDxy b3c+CisgICAgICAgPGVudHJ5IHJvbGU9ImZ1bmNfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImZ1 bmNfc2lnbmF0dXJlIj4KKyAgICAgICAgPGluZGV4dGVybT4KKyAgICAgICAgIDxwcmltYXJ5PnBn X2dldF9wb2xpY3lfZGRsPC9wcmltYXJ5PgorICAgICAgICA8L2luZGV4dGVybT4KKyAgICAgICAg PGZ1bmN0aW9uPnBnX2dldF9wb2xpY3lfZGRsPC9mdW5jdGlvbj4KKyAgICAgICAgKCA8cGFyYW1l dGVyPnRhYmxlPC9wYXJhbWV0ZXI+IDx0eXBlPnJlZ2NsYXNzPC90eXBlPiwgPHBhcmFtZXRlcj5w b2xpY3lfbmFtZTwvcGFyYW1ldGVyPiA8dHlwZT5uYW1lPC90eXBlPiwgPHBhcmFtZXRlcj5wcmV0 dHk8L3BhcmFtZXRlcj4gPHR5cGU+Ym9vbGVhbjwvdHlwZT4gKQorICAgICAgICA8cmV0dXJudmFs dWU+dGV4dDwvcmV0dXJudmFsdWU+CisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAg ICAgICBSZWNvbnN0cnVjdHMgdGhlIENSRUFURSBQT0xJQ1kgc3RhdGVtZW50IGZyb20gdGhlIHN5 c3RlbSBjYXRhbG9ncyBmb3IgYSBzcGVjaWZpZWQgdGFibGUgYW5kIHBvbGljeSBuYW1lLgorICAg ICAgICBXaGVuIHRoZSBwcmV0dHkgZmxhZyBpcyBzZXQgdG8gdHJ1ZSwgdGhlIGZ1bmN0aW9uIHJl dHVybnMgYSB3ZWxsLWZvcm1hdHRlZCBEREwgc3RhdGVtZW50LgorICAgICAgICBUaGUgcmVzdWx0 IGlzIGEgY29tcHJlaGVuc2l2ZSA8Y29tbWFuZD5DUkVBVEUgUE9MSUNZPC9jb21tYW5kPiBzdGF0 ZW1lbnQuCisgICAgICAgPC9wYXJhPjwvZW50cnk+CisgICAgICA8L3Jvdz4KKyAgICAgPC90Ym9k eT4KKyAgICA8L3Rncm91cD4KKyAgIDwvdGFibGU+CisKKyAgPC9zZWN0Mj4KKwogICA8L3NlY3Qx PgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvcG9saWN5LmMgYi9zcmMvYmFja2Vu ZC9jb21tYW5kcy9wb2xpY3kuYwppbmRleCA4MzA1Njk2MGZlNC4uMWFiZTBjNDQzNTMgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3BvbGljeS5jCisrKyBiL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL3BvbGljeS5jCkBAIC0xMjgsNiArMTI4LDMzIEBAIHBhcnNlX3BvbGljeV9jb21tYW5k KGNvbnN0IGNoYXIgKmNtZF9uYW1lKQogCXJldHVybiBwb2xjbWQ7CiB9CiAKKy8qCisgKiBnZXRf cG9saWN5X2NtZF9uYW1lIC0KKyAqCSBoZWxwZXIgZnVuY3Rpb24gdG8gY29udmVydCBjaGFyIHJl cHJlc2VudGF0aW9uIHRvIGZ1bGwgY29tbWFuZCBzdHJpbmdzLgorICoKKyAqIGNtZCAtICBWYWxp ZCB2YWx1ZXMgYXJlICcqJywgJ3InLCAnYScsICd3JyBhbmQgJ2QnLgorICoKKyAqLworY2hhciAq CitnZXRfcG9saWN5X2NtZF9uYW1lKGNoYXIgY21kKQoreworCXN3aXRjaCAoY21kKQorCXsKKwkJ Y2FzZSAnKic6CisJCQlyZXR1cm4gIkFMTCI7CisJCWNhc2UgQUNMX1NFTEVDVF9DSFI6CisJCQly ZXR1cm4gIlNFTEVDVCI7CisJCWNhc2UgQUNMX0lOU0VSVF9DSFI6CisJCQlyZXR1cm4gIklOU0VS VCI7CisJCWNhc2UgQUNMX1VQREFURV9DSFI6CisJCQlyZXR1cm4gIlVQREFURSI7CisJCWNhc2Ug QUNMX0RFTEVURV9DSFI6CisJCQlyZXR1cm4gIkRFTEVURSI7CisJCWRlZmF1bHQ6CisJCQllbG9n KEVSUk9SLCAidW5yZWNvZ25pemVkIHBvbGljeSBjb21tYW5kIik7CisJfQorfQorCiAvKgogICog cG9saWN5X3JvbGVfbGlzdF90b19hcnJheQogICoJIGhlbHBlciBmdW5jdGlvbiB0byBjb252ZXJ0 IGEgbGlzdCBvZiBSb2xlU3BlY3MgdG8gYW4gYXJyYXkgb2YKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRp bHMuYwppbmRleCAwNTBlZWY5N2E0Yy4uNmFlZmJkMGRlMDcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVs ZXV0aWxzLmMKQEAgLTMzLDEyICszMywxNCBAQAogI2luY2x1ZGUgImNhdGFsb2cvcGdfb3BjbGFz cy5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfb3BlcmF0b3IuaCIKICNpbmNsdWRlICJjYXRhbG9n L3BnX3BhcnRpdGlvbmVkX3RhYmxlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19wb2xpY3kuaCIK ICNpbmNsdWRlICJjYXRhbG9nL3BnX3Byb2MuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3N0YXRp c3RpY19leHQuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3RyaWdnZXIuaCIKICNpbmNsdWRlICJj YXRhbG9nL3BnX3R5cGUuaCIKICNpbmNsdWRlICJjb21tYW5kcy9kZWZyZW0uaCIKICNpbmNsdWRl ICJjb21tYW5kcy90YWJsZXNwYWNlLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvcG9saWN5LmgiCiAj aW5jbHVkZSAiY29tbW9uL2tleXdvcmRzLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3Ivc3BpLmgiCiAj aW5jbHVkZSAiZnVuY2FwaS5oIgpAQCAtMTM3MzgsMyArMTM3NDAsMTc5IEBAIGdldF9yYW5nZV9w YXJ0Ym91bmRfc3RyaW5nKExpc3QgKmJvdW5kX2RhdHVtcykKIAogCXJldHVybiBidWYtPmRhdGE7 CiB9CisKKy8qCisgKiBnZXRfZm9ybWF0dGVkX3N0cmluZworICoKKyAqIFJldHVybiBhIGZvcm1h dHRlZCB2ZXJzaW9uIG9mIHRoZSBzdHJpbmcuCisgKgorICogcHJldHR5IC0gSWYgcHJldHR5IGlz IHRydWUsIHRoZSBvdXRwdXQgaW5jbHVkZXMgdGFicyAoXHQpIGFuZCBuZXdsaW5lcyAoXG4pLgor ICogbm9PZlRhYkNoYXJzIC0gaW5kZW50IHdpdGggc3BlY2lmaWVkIG5vIG9mIHRhYnMuCisgKiBm bXQgLSBwcmludGYtc3R5bGUgZm9ybWF0IHN0cmluZyB1c2VkIGJ5IGFwcGVuZFN0cmluZ0luZm9W QS4KKyAqLworc3RhdGljIHZvaWQKK2dldF9mb3JtYXR0ZWRfc3RyaW5nKFN0cmluZ0luZm8gYnVm LCBib29sIHByZXR0eSwgaW50IG5vT2ZUYWJDaGFycywgY29uc3QgY2hhciAqZm10LC4uLikKK3sK Kwl2YV9saXN0CQlhcmdzOworCisJaWYgKHByZXR0eSkKKwl7CisJCS8qIEluZGVudCB3aXRoIHRh YnMgKi8KKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBub09mVGFiQ2hhcnM7IGkrKykKKwkJeworCQkJ YXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICJcdCIpOworCQl9CisJfQorCWVsc2UKKwkJYXBw ZW5kU3RyaW5nSW5mb0NoYXIoYnVmLCAnICcpOworCisJdmFfc3RhcnQoYXJncywgZm10KTsKKwlh cHBlbmRTdHJpbmdJbmZvVkEoYnVmLCBmbXQsIGFyZ3MpOworCXZhX2VuZChhcmdzKTsKKworCS8q IElmIHByZXR0eSBtb2RlLCBhcHBlbmQgbmV3bGluZSBhdCB0aGUgZW5kICovCisJaWYgKHByZXR0 eSkKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoYnVmLCAnXG4nKTsKK30KKworLyoKKyAqIHBnX2dl dF9wb2xpY3lfZGRsCisgKgorICogR2VuZXJhdGUgYSBDUkVBVEUgUE9MSUNZIHN0YXRlbWVudCBm b3IgdGhlIHNwZWNpZmllZCBwb2xpY3kuCisgKgorICogdGFibGVJRCAtIFRhYmxlIElEIG9mIHRo ZSBwb2xpY3kuCisgKiBwb2xpY3lOYW1lIC0gTmFtZSBvZiB0aGUgcG9saWN5IGZvciB3aGljaCB0 byBnZW5lcmF0ZSB0aGUgRERMLgorICogcHJldHR5IC0gSWYgdHJ1ZSwgZm9ybWF0IHRoZSBEREwg d2l0aCBpbmRlbnRhdGlvbiBhbmQgbGluZSBicmVha3MuCisgKi8KK0RhdHVtCitwZ19nZXRfcG9s aWN5X2RkbChQR19GVU5DVElPTl9BUkdTKQoreworCU9pZAkJCXRhYmxlSUQgPSBQR19HRVRBUkdf T0lEKDApOworCU5hbWUJCXBvbGljeU5hbWUgPSBQR19HRVRBUkdfTkFNRSgxKTsKKwlib29sCQlw cmV0dHkgPSBQR19HRVRBUkdfQk9PTCgyKTsKKwlIZWFwVHVwbGUJdHVwbGVQb2xpY3k7CisJUmVs YXRpb24JcGdQb2xpY3lSZWw7CisJUmVsYXRpb24JdGFyZ2V0VGFibGU7CisJRm9ybV9wZ19wb2xp Y3kgcG9saWN5Rm9ybTsKKwlTY2FuS2V5RGF0YSBza2V5WzJdOworCVN5c1NjYW5EZXNjIHNzY2Fu OworCWJvb2wJCWF0dHJJc051bGw7CisKKwlTdHJpbmdJbmZvRGF0YSBidWY7CisKKwlpbml0U3Ry aW5nSW5mbygmYnVmKTsKKworCXRhcmdldFRhYmxlID0gcmVsYXRpb25fb3Blbih0YWJsZUlELCBO b0xvY2spOworCS8qIEZpbmQgcG9saWN5IHRvIGJlZ2luIHNjYW4gKi8KKwlwZ1BvbGljeVJlbCA9 IHRhYmxlX29wZW4oUG9saWN5UmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisKKwkvKiBT ZXQga2V5IC0gcG9saWN5J3MgcmVsYXRpb24gaWQuICovCisJU2NhbktleUluaXQoJnNrZXlbMF0s CisJCQkJQW51bV9wZ19wb2xpY3lfcG9scmVsaWQsCisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVy LCBGX09JREVRLAorCQkJCU9iamVjdElkR2V0RGF0dW0odGFibGVJRCkpOworCisJLyogU2V0IGtl eSAtIHBvbGljeSdzIG5hbWUuICovCisJU2NhbktleUluaXQoJnNrZXlbMV0sCisJCQkJQW51bV9w Z19wb2xpY3lfcG9sbmFtZSwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfTkFNRUVRLAor CQkJCUNTdHJpbmdHZXREYXR1bShOYW1lU3RyKCpwb2xpY3lOYW1lKSkpOworCisJc3NjYW4gPSBz eXN0YWJsZV9iZWdpbnNjYW4ocGdQb2xpY3lSZWwsCisJCQkJCQkJICAgUG9saWN5UG9scmVsaWRQ b2xuYW1lSW5kZXhJZCwgdHJ1ZSwgTlVMTCwgMiwKKwkJCQkJCQkgICBza2V5KTsKKworCXR1cGxl UG9saWN5ID0gc3lzdGFibGVfZ2V0bmV4dChzc2Nhbik7CisJLyogQ2hlY2sgdGhhdCB0aGUgcG9s aWN5IGlzIGZvdW5kLCByYWlzZSBhbiBlcnJvciBpZiBub3QuICovCisJaWYgKCFIZWFwVHVwbGVJ c1ZhbGlkKHR1cGxlUG9saWN5KSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJD T0RFX1VOREVGSU5FRF9PQkpFQ1QpLAorCQkJCSBlcnJtc2coInBvbGljeSBcIiVzXCIgZm9yIHRh YmxlIFwiJXNcIiBkb2VzIG5vdCBleGlzdCIsCisJCQkJCQlOYW1lU3RyKCpwb2xpY3lOYW1lKSwK KwkJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHRhcmdldFRhYmxlKSkpKTsKKworCXBvbGlj eUZvcm0gPSAoRm9ybV9wZ19wb2xpY3kpIEdFVFNUUlVDVCh0dXBsZVBvbGljeSk7CisKKwkvKiBC dWlsZCB0aGUgQ1JFQVRFIFBPTElDWSBzdGF0ZW1lbnQgKi8KKwlnZXRfZm9ybWF0dGVkX3N0cmlu ZygmYnVmLCBwcmV0dHksIDAsICJDUkVBVEUgUE9MSUNZICVzIE9OICVzIiwKKwkJCQkJCSBxdW90 ZV9pZGVudGlmaWVyKE5hbWVTdHIoKnBvbGljeU5hbWUpKSwKKwkJCQkJCSBSZWxhdGlvbkdldFJl bGF0aW9uTmFtZSh0YXJnZXRUYWJsZSkpOworCisJLyogQ2hlY2sgdGhlIHR5cGUgaXMgUEVSTUlT U0lWRSBvciBSRVNUUklDVElWRSAqLworCWdldF9mb3JtYXR0ZWRfc3RyaW5nKCZidWYsIHByZXR0 eSwgMSwKKwkJCQkJCSBwb2xpY3lGb3JtLT5wb2xwZXJtaXNzaXZlID8gIkFTIFBFUk1JU1NJVkUi IDogIkFTIFJFU1RSSUNUSVZFIik7CisKKwkvKiBDaGVjayBjb21tYW5kIHRvIHdoaWNoIHRoZSBw b2xpY3kgYXBwbGllcyAqLworCWdldF9mb3JtYXR0ZWRfc3RyaW5nKCZidWYsIHByZXR0eSwgMSwg IkZPUiAlcyIsCisJCQkJCQkgZ2V0X3BvbGljeV9jbWRfbmFtZShwb2xpY3lGb3JtLT5wb2xjbWQp KTsKKworCS8qIENoZWNrIGlmIHRoZSBwb2xpY3kgaGFzIGEgVE8gbGlzdCAqLworCURhdHVtCQl2 YWx1ZURhdHVtID0gaGVhcF9nZXRhdHRyKHR1cGxlUG9saWN5LAorCQkJCQkJCQkJCSAgQW51bV9w Z19wb2xpY3lfcG9scm9sZXMsCisJCQkJCQkJCQkJICBSZWxhdGlvbkdldERlc2NyKHBnUG9saWN5 UmVsKSwKKwkJCQkJCQkJCQkgICZhdHRySXNOdWxsKTsKKworCWlmICghYXR0cklzTnVsbCkKKwl7 CisJCUFycmF5VHlwZSAgKnBvbGljeV9yb2xlcyA9IERhdHVtR2V0QXJyYXlUeXBlUENvcHkodmFs dWVEYXR1bSk7CisJCWludAkJCW5pdGVtcyA9IEFSUl9ESU1TKHBvbGljeV9yb2xlcylbMF07CisJ CU9pZAkJICAgKnJvbGVzID0gKE9pZCAqKSBBUlJfREFUQV9QVFIocG9saWN5X3JvbGVzKTsKKwkJ U3RyaW5nSW5mb0RhdGEgcm9sZV9uYW1lczsKKworCQlpbml0U3RyaW5nSW5mbygmcm9sZV9uYW1l cyk7CisKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBuaXRlbXM7IGkrKykKKwkJeworCQkJaWYgKE9p ZElzVmFsaWQocm9sZXNbaV0pKQorCQkJeworCQkJCWNoYXIJICAgKnJvbGVuYW1lID0gR2V0VXNl ck5hbWVGcm9tSWQocm9sZXNbaV0sIGZhbHNlKTsKKworCQkJCWlmIChpID4gMCkKKwkJCQkJYXBw ZW5kU3RyaW5nSW5mb1N0cmluZygmcm9sZV9uYW1lcywgIiwgIik7CisJCQkJYXBwZW5kU3RyaW5n SW5mb1N0cmluZygmcm9sZV9uYW1lcywgcm9sZW5hbWUpOworCQkJfQorCQl9CisKKwkJaWYgKHJv bGVfbmFtZXMubGVuID4gMCkKKwkJCWdldF9mb3JtYXR0ZWRfc3RyaW5nKCZidWYsIHByZXR0eSwg MSwgIlRPICVzIiwgcm9sZV9uYW1lcy5kYXRhKTsKKwl9CisKKwkvKiBDaGVjayBpZiB0aGUgcG9s aWN5IGhhcyBhIFVTSU5HIGV4cHIgKi8KKwl2YWx1ZURhdHVtID0gaGVhcF9nZXRhdHRyKHR1cGxl UG9saWN5LAorCQkJCQkJCSAgQW51bV9wZ19wb2xpY3lfcG9scXVhbCwKKwkJCQkJCQkgIFJlbGF0 aW9uR2V0RGVzY3IocGdQb2xpY3lSZWwpLAorCQkJCQkJCSAgJmF0dHJJc051bGwpOworCWlmICgh YXR0cklzTnVsbCkKKwl7CisJCXRleHQJICAgKmV4cHJ0ZXh0ID0gRGF0dW1HZXRUZXh0UFAodmFs dWVEYXR1bSk7CisJCXRleHQJICAgKnVzaW5nRXhwcmVzc2lvbiA9IHBnX2dldF9leHByX3dvcmtl cihleHBydGV4dCwKKwkJCQkJCQkJCQkJCQkJIHBvbGljeUZvcm0tPnBvbHJlbGlkLCBmYWxzZSk7 CisKKwkJZ2V0X2Zvcm1hdHRlZF9zdHJpbmcoJmJ1ZiwgcHJldHR5LCAxLCAiVVNJTkcgKCVzKSIs CisJCQkJCQkJIHRleHRfdG9fY3N0cmluZyh1c2luZ0V4cHJlc3Npb24pKTsKKwl9CisKKwkvKiBD aGVjayBpZiB0aGUgcG9saWN5IGhhcyBhIFdJVEggQ0hFQ0sgZXhwciAqLworCXZhbHVlRGF0dW0g PSBoZWFwX2dldGF0dHIodHVwbGVQb2xpY3ksCisJCQkJCQkJICBBbnVtX3BnX3BvbGljeV9wb2x3 aXRoY2hlY2ssCisJCQkJCQkJICBSZWxhdGlvbkdldERlc2NyKHBnUG9saWN5UmVsKSwKKwkJCQkJ CQkgICZhdHRySXNOdWxsKTsKKwlpZiAoIWF0dHJJc051bGwpCisJeworCQl0ZXh0CSAgICpleHBy dGV4dCA9IERhdHVtR2V0VGV4dFBQKHZhbHVlRGF0dW0pOworCQl0ZXh0CSAgICpjaGVja0V4cHJl c3Npb24gPSBwZ19nZXRfZXhwcl93b3JrZXIoZXhwcnRleHQsCisJCQkJCQkJCQkJCQkJCSBwb2xp Y3lGb3JtLT5wb2xyZWxpZCwgZmFsc2UpOworCisJCWdldF9mb3JtYXR0ZWRfc3RyaW5nKCZidWYs IHByZXR0eSwgMSwgIldJVEggQ0hFQ0sgKCVzKSIsCisJCQkJCQkJIHRleHRfdG9fY3N0cmluZyhj aGVja0V4cHJlc3Npb24pKTsKKwl9CisKKwlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmYnVmLCAnOycp OworCisJLyogQ2xlYW4gdXAuICovCisJc3lzdGFibGVfZW5kc2Nhbihzc2Nhbik7CisJcmVsYXRp b25fY2xvc2UodGFyZ2V0VGFibGUsIE5vTG9jayk7CisJdGFibGVfY2xvc2UocGdQb2xpY3lSZWws IFJvd0V4Y2x1c2l2ZUxvY2spOworCisJUEdfUkVUVVJOX1RFWFRfUChzdHJpbmdfdG9fdGV4dChi dWYuZGF0YSkpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRh dCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKaW5kZXggYjUxZDJiMTczNzkuLmQy ODAzOWU0YzA4IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0Cisr KyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKQEAgLTQwMjEsNiArNDAyMSw5IEBA CiAgIHByb25hbWUgPT4gJ3BnX2dldF9mdW5jdGlvbl9zcWxib2R5JywgcHJvdm9sYXRpbGUgPT4g J3MnLAogICBwcm9yZXR0eXBlID0+ICd0ZXh0JywgcHJvYXJndHlwZXMgPT4gJ29pZCcsCiAgIHBy b3NyYyA9PiAncGdfZ2V0X2Z1bmN0aW9uX3NxbGJvZHknIH0sCit7IG9pZCA9PiAnODgxMScsIGRl c2NyID0+ICdnZXQgQ1JFQVRFIHN0YXRlbWVudCBmb3IgcG9saWN5JywKKyAgcHJvbmFtZSA9PiAn cGdfZ2V0X3BvbGljeV9kZGwnLCBwcm9yZXR0eXBlID0+ICd0ZXh0JywKKyAgcHJvYXJndHlwZXMg PT4gJ3JlZ2NsYXNzIG5hbWUgYm9vbCcsIHByb3NyYyA9PiAncGdfZ2V0X3BvbGljeV9kZGwnIH0s CiAKIHsgb2lkID0+ICcxNjg2JywgZGVzY3IgPT4gJ2xpc3Qgb2YgU1FMIGtleXdvcmRzJywKICAg cHJvbmFtZSA9PiAncGdfZ2V0X2tleXdvcmRzJywgcHJvY29zdCA9PiAnMTAnLCBwcm9yb3dzID0+ ICc1MDAnLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvcG9saWN5LmggYi9zcmMv aW5jbHVkZS9jb21tYW5kcy9wb2xpY3kuaAppbmRleCBmMDZhYTFkZjQzOS4uNDBlNDViNzM4ZjQg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3BvbGljeS5oCisrKyBiL3NyYy9pbmNs dWRlL2NvbW1hbmRzL3BvbGljeS5oCkBAIC0zNSw0ICszNSw2IEBAIGV4dGVybiBPYmplY3RBZGRy ZXNzIHJlbmFtZV9wb2xpY3koUmVuYW1lU3RtdCAqc3RtdCk7CiAKIGV4dGVybiBib29sIHJlbGF0 aW9uX2hhc19wb2xpY2llcyhSZWxhdGlvbiByZWwpOwogCitleHRlcm4gY2hhciAqZ2V0X3BvbGlj eV9jbWRfbmFtZShjaGFyIGNtZCk7CisKICNlbmRpZgkJCQkJCQkvKiBQT0xJQ1lfSCAqLwpkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9yb3dzZWN1cml0eS5vdXQgYi9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL3Jvd3NlY3VyaXR5Lm91dAppbmRleCA1YTE3MmM1ZDkxYy4u Nzc2M2YzMTM4OGQgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcm93c2Vj dXJpdHkub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcm93c2VjdXJpdHkub3V0 CkBAIC00ODIxLDExICs0ODIxLDIwNiBAQCByZXNldCBybHNfdGVzdC5ibGFoOwogZHJvcCBmdW5j dGlvbiBybHNfZih0ZXh0KTsKIGRyb3AgdGFibGUgcmxzX3QsIHRlc3RfdDsKIC0tCistLSBUZXN0 IGZvciBwZ19nZXRfcG9saWN5X2RkbCh0YWJsZU5hbWUsIHBvbGljeU5hbWUsIHByZXR0eSkgZnVu Y3Rpb24uCistLQorQ1JFQVRFIFRBQkxFIHJsc190YmxfMSAoCisgICAgZGlkICAgICAgICAgaW50 IHByaW1hcnkga2V5LAorICAgIGNpZCAgICAgICAgIGludCwKKyAgICBkbGV2ZWwgICAgICBpbnQg bm90IG51bGwsCisgICAgZGF1dGhvciAgICAgbmFtZSwKKyAgICBkdGl0bGUgICAgICB0ZXh0Cisp OworR1JBTlQgQUxMIE9OIHJsc190YmxfMSBUTyBwdWJsaWM7CitDUkVBVEUgVEFCTEUgcmxzX3Ri bF8yICgKKyAgICBwZ3VzZXIgICAgICBuYW1lIHByaW1hcnkga2V5LAorICAgIHNlY2x2ICAgICAg IGludAorKTsKK0dSQU5UIFNFTEVDVCBPTiBybHNfdGJsXzIgVE8gcHVibGljOworLS0gVGVzdCBQ RVJNSVNTSVZFIGFuZCBSRVNUUklDVElWRQorQ1JFQVRFIFBPTElDWSBybHNfcDEgT04gcmxzX3Ri bF8xIEFTIFBFUk1JU1NJVkUKKyAgICBVU0lORyAoZGxldmVsIDw9IChTRUxFQ1Qgc2VjbHYgRlJP TSBybHNfdGJsXzIgV0hFUkUgcGd1c2VyID0gY3VycmVudF91c2VyKSk7CitDUkVBVEUgUE9MSUNZ IHJsc19wMiBPTiBybHNfdGJsXzEgQVMgUkVTVFJJQ1RJVkUgVVNJTkcgKGNpZCA8PiA0NCBBTkQg Y2lkIDwgNTApOworLS0gVGVzdCBGT1IgQUxMIHwgU0VMRUNUIHwgSU5TRVJUIHwgVVBEQVRFIHwg REVMRVRFCitDUkVBVEUgUE9MSUNZIHJsc19wMyBPTiBybHNfdGJsXzEgRk9SIEFMTCBVU0lORyAo ZGF1dGhvciA9IGN1cnJlbnRfdXNlcik7CitDUkVBVEUgUE9MSUNZIHJsc19wNCBPTiBybHNfdGJs XzEgRk9SIFNFTEVDVCBVU0lORyAoY2lkICUgMiA9IDApOworQ1JFQVRFIFBPTElDWSBybHNfcDUg T04gcmxzX3RibF8xIEZPUiBJTlNFUlQgV0lUSCBDSEVDSyAoY2lkICUgMiA9IDEpOworQ1JFQVRF IFBPTElDWSBybHNfcDYgT04gcmxzX3RibF8xIEZPUiBVUERBVEUgVVNJTkcgKGNpZCAlIDIgPSAw KTsKK0NSRUFURSBQT0xJQ1kgcmxzX3A3IE9OIHJsc190YmxfMSBGT1IgREVMRVRFIFVTSU5HIChj aWQgPCA4KTsKKy0tIFRlc3QgVE8geyByb2xlX25hbWUgLi4uIH0KK0NSRUFURSBQT0xJQ1kgcmxz X3A4IE9OIHJsc190YmxfMSBUTyByZWdyZXNzX3Jsc19kYXZlLCByZWdyZXNzX3Jsc19hbGljZSBV U0lORyAodHJ1ZSk7CitDUkVBVEUgUE9MSUNZIHJsc19wOSBPTiBybHNfdGJsXzEgVE8gcmVncmVz c19ybHNfZXhlbXB0X3VzZXIgV0lUSCBDSEVDSyAoY2lkID0gKFNFTEVDVCBzZWNsdiBGUk9NIHJs c190YmxfMikpOworLS0gVGVzdCBOVUxMIHZhbHVlCitTRUxFQ1QgcGdfZ2V0X3BvbGljeV9kZGwo TlVMTCwgJ3Jsc19wMScsIGZhbHNlKTsKKyBwZ19nZXRfcG9saWN5X2RkbCAKKy0tLS0tLS0tLS0t LS0tLS0tLS0KKyAKKygxIHJvdykKKworU0VMRUNUIHBnX2dldF9wb2xpY3lfZGRsKCd0YWIxJywg TlVMTCwgZmFsc2UpOworRVJST1I6ICByZWxhdGlvbiAidGFiMSIgZG9lcyBub3QgZXhpc3QKK0xJ TkUgMTogU0VMRUNUIHBnX2dldF9wb2xpY3lfZGRsKCd0YWIxJywgTlVMTCwgZmFsc2UpOworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorU0VMRUNUIHBnX2dldF9wb2xpY3lfZGRs KE5VTEwsIE5VTEwsIGZhbHNlKTsKKyBwZ19nZXRfcG9saWN5X2RkbCAKKy0tLS0tLS0tLS0tLS0t LS0tLS0KKyAKKygxIHJvdykKKworLS0gVGFibGUgZG9lcyBub3QgZXhpc3QKK1NFTEVDVCBwZ19n ZXRfcG9saWN5X2RkbCgndGFiMScsICdybHNfcDEnLCBmYWxzZSk7CitFUlJPUjogIHJlbGF0aW9u ICJ0YWIxIiBkb2VzIG5vdCBleGlzdAorTElORSAxOiBTRUxFQ1QgcGdfZ2V0X3BvbGljeV9kZGwo J3RhYjEnLCAncmxzX3AxJywgZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXgorLS0gUG9saWN5IGRvZXMgbm90IGV4aXN0CitTRUxFQ1QgcGdfZ2V0X3BvbGljeV9kZGwo J3Jsc190YmxfMScsICdwb2wxJywgZmFsc2UpOworRVJST1I6ICBwb2xpY3kgInBvbDEiIGZvciB0 YWJsZSAicmxzX3RibF8xIiBkb2VzIG5vdCBleGlzdAorLS0gV2l0aG91dCBQcmV0dHkgZm9ybWF0 dGVkCitTRUxFQ1QgcGdfZ2V0X3BvbGljeV9kZGwoJ3Jsc190YmxfMScsICdybHNfcDEnLCBmYWxz ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHBnX2dldF9wb2xpY3lfZGRsICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBDUkVBVEUgUE9MSUNZ IHJsc19wMSBPTiBybHNfdGJsXzEgQVMgUEVSTUlTU0lWRSBGT1IgQUxMIFVTSU5HICgoZGxldmVs IDw9IChTRUxFQ1QgcmxzX3RibF8yLnNlY2x2IEZST00gcmxzX3RibF8yIFdIRVJFIChybHNfdGJs XzIucGd1c2VyID0gQ1VSUkVOVF9VU0VSKSkpKTsKKygxIHJvdykKKworU0VMRUNUIHBnX2dldF9w b2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3AyJywgZmFsc2UpOworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF9wb2xpY3lfZGRsICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorICBDUkVBVEUgUE9MSUNZIHJsc19wMiBPTiBybHNfdGJsXzEgQVMgUkVTVFJJ Q1RJVkUgRk9SIEFMTCBVU0lORyAoKChjaWQgPD4gNDQpIEFORCAoY2lkIDwgNTApKSk7CisoMSBy b3cpCisKK1NFTEVDVCBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wMycsIGZh bHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfcG9saWN5 X2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBDUkVBVEUgUE9MSUNZIHJsc19wMyBPTiBybHNfdGJs XzEgQVMgUEVSTUlTU0lWRSBGT1IgQUxMIFVTSU5HICgoZGF1dGhvciA9IENVUlJFTlRfVVNFUikp OworKDEgcm93KQorCitTRUxFQ1QgcGdfZ2V0X3BvbGljeV9kZGwoJ3Jsc190YmxfMScsICdybHNf cDQnLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3Bv bGljeV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAgQ1JFQVRFIFBPTElDWSBybHNfcDQgT04gcmxzX3RibF8xIEFT IFBFUk1JU1NJVkUgRk9SIFNFTEVDVCBVU0lORyAoKChjaWQgJSAyKSA9IDApKTsKKygxIHJvdykK KworU0VMRUNUIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3A1JywgZmFsc2Up OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF9wb2xpY3lfZGRs ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorICBDUkVBVEUgUE9MSUNZIHJsc19wNSBPTiBybHNfdGJsXzEgQVMg UEVSTUlTU0lWRSBGT1IgSU5TRVJUIFdJVEggQ0hFQ0sgKCgoY2lkICUgMikgPSAxKSk7CisoMSBy b3cpCisKK1NFTEVDVCBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wNicsIGZh bHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfcG9saWN5X2Rk bCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorICBDUkVBVEUgUE9MSUNZIHJsc19wNiBPTiBybHNfdGJsXzEgQVMgUEVSTUlT U0lWRSBGT1IgVVBEQVRFIFVTSU5HICgoKGNpZCAlIDIpID0gMCkpOworKDEgcm93KQorCitTRUxF Q1QgcGdfZ2V0X3BvbGljeV9kZGwoJ3Jsc190YmxfMScsICdybHNfcDcnLCBmYWxzZSk7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3BvbGljeV9kZGwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgQ1JFQVRFIFBP TElDWSBybHNfcDcgT04gcmxzX3RibF8xIEFTIFBFUk1JU1NJVkUgRk9SIERFTEVURSBVU0lORyAo KGNpZCA8IDgpKTsKKygxIHJvdykKKworU0VMRUNUIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJs XzEnLCAncmxzX3A4JywgZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBwZ19nZXRfcG9saWN5X2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgQ1JFQVRFIFBPTElDWSBybHNfcDggT04gcmxzX3RibF8x IEFTIFBFUk1JU1NJVkUgRk9SIEFMTCBUTyByZWdyZXNzX3Jsc19kYXZlLCByZWdyZXNzX3Jsc19h bGljZSBVU0lORyAodHJ1ZSk7CisoMSByb3cpCisKK1NFTEVDVCBwZ19nZXRfcG9saWN5X2RkbCgn cmxzX3RibF8xJywgJ3Jsc19wOScsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3BvbGljeV9kZGwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIENSRUFURSBQT0xJ Q1kgcmxzX3A5IE9OIHJsc190YmxfMSBBUyBQRVJNSVNTSVZFIEZPUiBBTEwgVE8gcmVncmVzc19y bHNfZXhlbXB0X3VzZXIgV0lUSCBDSEVDSyAoKGNpZCA9IChTRUxFQ1QgcmxzX3RibF8yLnNlY2x2 IEZST00gcmxzX3RibF8yKSkpOworKDEgcm93KQorCistLSBXaXRoIFByZXR0eSBmb3JtYXR0ZWQK K1xwc2V0IGZvcm1hdCB1bmFsaWduZWQKK1NFTEVDVCBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3Ri bF8xJywgJ3Jsc19wMScsIHRydWUpOworcGdfZ2V0X3BvbGljeV9kZGwKK0NSRUFURSBQT0xJQ1kg cmxzX3AxIE9OIHJsc190YmxfMQorCUFTIFBFUk1JU1NJVkUKKwlGT1IgQUxMCisJVVNJTkcgKChk bGV2ZWwgPD0gKFNFTEVDVCBybHNfdGJsXzIuc2VjbHYgRlJPTSBybHNfdGJsXzIgV0hFUkUgKHJs c190YmxfMi5wZ3VzZXIgPSBDVVJSRU5UX1VTRVIpKSkpCis7CisoMSByb3cpCitTRUxFQ1QgcGdf Z2V0X3BvbGljeV9kZGwoJ3Jsc190YmxfMScsICdybHNfcDInLCB0cnVlKTsKK3BnX2dldF9wb2xp Y3lfZGRsCitDUkVBVEUgUE9MSUNZIHJsc19wMiBPTiBybHNfdGJsXzEKKwlBUyBSRVNUUklDVElW RQorCUZPUiBBTEwKKwlVU0lORyAoKChjaWQgPD4gNDQpIEFORCAoY2lkIDwgNTApKSkKKzsKKygx IHJvdykKK1NFTEVDVCBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wMycsIHRy dWUpOworcGdfZ2V0X3BvbGljeV9kZGwKK0NSRUFURSBQT0xJQ1kgcmxzX3AzIE9OIHJsc190Ymxf MQorCUFTIFBFUk1JU1NJVkUKKwlGT1IgQUxMCisJVVNJTkcgKChkYXV0aG9yID0gQ1VSUkVOVF9V U0VSKSkKKzsKKygxIHJvdykKK1NFTEVDVCBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3RibF8xJywg J3Jsc19wNCcsIHRydWUpOworcGdfZ2V0X3BvbGljeV9kZGwKK0NSRUFURSBQT0xJQ1kgcmxzX3A0 IE9OIHJsc190YmxfMQorCUFTIFBFUk1JU1NJVkUKKwlGT1IgU0VMRUNUCisJVVNJTkcgKCgoY2lk ICUgMikgPSAwKSkKKzsKKygxIHJvdykKK1NFTEVDVCBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3Ri bF8xJywgJ3Jsc19wNScsIHRydWUpOworcGdfZ2V0X3BvbGljeV9kZGwKK0NSRUFURSBQT0xJQ1kg cmxzX3A1IE9OIHJsc190YmxfMQorCUFTIFBFUk1JU1NJVkUKKwlGT1IgSU5TRVJUCisJV0lUSCBD SEVDSyAoKChjaWQgJSAyKSA9IDEpKQorOworKDEgcm93KQorU0VMRUNUIHBnX2dldF9wb2xpY3lf ZGRsKCdybHNfdGJsXzEnLCAncmxzX3A2JywgdHJ1ZSk7CitwZ19nZXRfcG9saWN5X2RkbAorQ1JF QVRFIFBPTElDWSBybHNfcDYgT04gcmxzX3RibF8xCisJQVMgUEVSTUlTU0lWRQorCUZPUiBVUERB VEUKKwlVU0lORyAoKChjaWQgJSAyKSA9IDApKQorOworKDEgcm93KQorU0VMRUNUIHBnX2dldF9w b2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3A3JywgdHJ1ZSk7CitwZ19nZXRfcG9saWN5X2Rk bAorQ1JFQVRFIFBPTElDWSBybHNfcDcgT04gcmxzX3RibF8xCisJQVMgUEVSTUlTU0lWRQorCUZP UiBERUxFVEUKKwlVU0lORyAoKGNpZCA8IDgpKQorOworKDEgcm93KQorU0VMRUNUIHBnX2dldF9w b2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3A4JywgdHJ1ZSk7CitwZ19nZXRfcG9saWN5X2Rk bAorQ1JFQVRFIFBPTElDWSBybHNfcDggT04gcmxzX3RibF8xCisJQVMgUEVSTUlTU0lWRQorCUZP UiBBTEwKKwlUTyByZWdyZXNzX3Jsc19kYXZlLCByZWdyZXNzX3Jsc19hbGljZQorCVVTSU5HICh0 cnVlKQorOworKDEgcm93KQorU0VMRUNUIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAn cmxzX3A5JywgdHJ1ZSk7CitwZ19nZXRfcG9saWN5X2RkbAorQ1JFQVRFIFBPTElDWSBybHNfcDkg T04gcmxzX3RibF8xCisJQVMgUEVSTUlTU0lWRQorCUZPUiBBTEwKKwlUTyByZWdyZXNzX3Jsc19l eGVtcHRfdXNlcgorCVdJVEggQ0hFQ0sgKChjaWQgPSAoU0VMRUNUIHJsc190YmxfMi5zZWNsdiBG Uk9NIHJsc190YmxfMikpKQorOworKDEgcm93KQorLS0gQ2xlYW4gdXAgb2JqZWN0cyBjcmVhdGVk IGZvciB0ZXN0aW5nIHBnX2dldF9wb2xpY3lfZGRsIGZ1bmN0aW9uLgorRFJPUCBQT0xJQ1kgcmxz X3AxIE9OIHJsc190YmxfMTsKK0RST1AgUE9MSUNZIHJsc19wMiBPTiBybHNfdGJsXzE7CitEUk9Q IFBPTElDWSBybHNfcDMgT04gcmxzX3RibF8xOworRFJPUCBQT0xJQ1kgcmxzX3A0IE9OIHJsc190 YmxfMTsKK0RST1AgUE9MSUNZIHJsc19wNSBPTiBybHNfdGJsXzE7CitEUk9QIFBPTElDWSBybHNf cDYgT04gcmxzX3RibF8xOworRFJPUCBQT0xJQ1kgcmxzX3A3IE9OIHJsc190YmxfMTsKK0RST1Ag UE9MSUNZIHJsc19wOCBPTiBybHNfdGJsXzE7CitEUk9QIFBPTElDWSBybHNfcDkgT04gcmxzX3Ri bF8xOworLS0KIC0tIENsZWFuIHVwIG9iamVjdHMKIC0tCiBSRVNFVCBTRVNTSU9OIEFVVEhPUkla QVRJT047CiBEUk9QIFNDSEVNQSByZWdyZXNzX3Jsc19zY2hlbWEgQ0FTQ0FERTsKLU5PVElDRTog IGRyb3AgY2FzY2FkZXMgdG8gMzAgb3RoZXIgb2JqZWN0cworTk9USUNFOiAgZHJvcCBjYXNjYWRl cyB0byAzMiBvdGhlciBvYmplY3RzCiBERVRBSUw6ICBkcm9wIGNhc2NhZGVzIHRvIGZ1bmN0aW9u IGZfbGVhayh0ZXh0KQogZHJvcCBjYXNjYWRlcyB0byB0YWJsZSB1YWNjb3VudAogZHJvcCBjYXNj YWRlcyB0byB0YWJsZSBjYXRlZ29yeQpAQCAtNDg1Niw2ICs1MDUxLDggQEAgZHJvcCBjYXNjYWRl cyB0byB0YWJsZSBkZXAxCiBkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIGRlcDIKIGRyb3AgY2FzY2Fk ZXMgdG8gdGFibGUgZG9iX3QxCiBkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIGRvYl90MgorZHJvcCBj YXNjYWRlcyB0byB0YWJsZSBybHNfdGJsXzEKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcmxzX3Ri bF8yCiBEUk9QIFVTRVIgcmVncmVzc19ybHNfYWxpY2U7CiBEUk9QIFVTRVIgcmVncmVzc19ybHNf Ym9iOwogRFJPUCBVU0VSIHJlZ3Jlc3NfcmxzX2Nhcm9sOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qv cmVncmVzcy9zcWwvcm93c2VjdXJpdHkuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcm93c2Vj dXJpdHkuc3FsCmluZGV4IDIxYWMwY2E1MWVlLi43NWM5OWIwMWUyNyAxMDA2NDQKLS0tIGEvc3Jj L3Rlc3QvcmVncmVzcy9zcWwvcm93c2VjdXJpdHkuc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mv c3FsL3Jvd3NlY3VyaXR5LnNxbApAQCAtMjQwMCw2ICsyNDAwLDg0IEBAIHJlc2V0IHJsc190ZXN0 LmJsYWg7CiBkcm9wIGZ1bmN0aW9uIHJsc19mKHRleHQpOwogZHJvcCB0YWJsZSBybHNfdCwgdGVz dF90OwogCistLQorLS0gVGVzdCBmb3IgcGdfZ2V0X3BvbGljeV9kZGwodGFibGVOYW1lLCBwb2xp Y3lOYW1lLCBwcmV0dHkpIGZ1bmN0aW9uLgorLS0KK0NSRUFURSBUQUJMRSBybHNfdGJsXzEgKAor ICAgIGRpZCAgICAgICAgIGludCBwcmltYXJ5IGtleSwKKyAgICBjaWQgICAgICAgICBpbnQsCisg ICAgZGxldmVsICAgICAgaW50IG5vdCBudWxsLAorICAgIGRhdXRob3IgICAgIG5hbWUsCisgICAg ZHRpdGxlICAgICAgdGV4dAorKTsKK0dSQU5UIEFMTCBPTiBybHNfdGJsXzEgVE8gcHVibGljOwor Q1JFQVRFIFRBQkxFIHJsc190YmxfMiAoCisgICAgcGd1c2VyICAgICAgbmFtZSBwcmltYXJ5IGtl eSwKKyAgICBzZWNsdiAgICAgICBpbnQKKyk7CitHUkFOVCBTRUxFQ1QgT04gcmxzX3RibF8yIFRP IHB1YmxpYzsKKworLS0gVGVzdCBQRVJNSVNTSVZFIGFuZCBSRVNUUklDVElWRQorQ1JFQVRFIFBP TElDWSBybHNfcDEgT04gcmxzX3RibF8xIEFTIFBFUk1JU1NJVkUKKyAgICBVU0lORyAoZGxldmVs IDw9IChTRUxFQ1Qgc2VjbHYgRlJPTSBybHNfdGJsXzIgV0hFUkUgcGd1c2VyID0gY3VycmVudF91 c2VyKSk7CitDUkVBVEUgUE9MSUNZIHJsc19wMiBPTiBybHNfdGJsXzEgQVMgUkVTVFJJQ1RJVkUg VVNJTkcgKGNpZCA8PiA0NCBBTkQgY2lkIDwgNTApOworCistLSBUZXN0IEZPUiBBTEwgfCBTRUxF Q1QgfCBJTlNFUlQgfCBVUERBVEUgfCBERUxFVEUKK0NSRUFURSBQT0xJQ1kgcmxzX3AzIE9OIHJs c190YmxfMSBGT1IgQUxMIFVTSU5HIChkYXV0aG9yID0gY3VycmVudF91c2VyKTsKK0NSRUFURSBQ T0xJQ1kgcmxzX3A0IE9OIHJsc190YmxfMSBGT1IgU0VMRUNUIFVTSU5HIChjaWQgJSAyID0gMCk7 CitDUkVBVEUgUE9MSUNZIHJsc19wNSBPTiBybHNfdGJsXzEgRk9SIElOU0VSVCBXSVRIIENIRUNL IChjaWQgJSAyID0gMSk7CitDUkVBVEUgUE9MSUNZIHJsc19wNiBPTiBybHNfdGJsXzEgRk9SIFVQ REFURSBVU0lORyAoY2lkICUgMiA9IDApOworQ1JFQVRFIFBPTElDWSBybHNfcDcgT04gcmxzX3Ri bF8xIEZPUiBERUxFVEUgVVNJTkcgKGNpZCA8IDgpOworCistLSBUZXN0IFRPIHsgcm9sZV9uYW1l IC4uLiB9CitDUkVBVEUgUE9MSUNZIHJsc19wOCBPTiBybHNfdGJsXzEgVE8gcmVncmVzc19ybHNf ZGF2ZSwgcmVncmVzc19ybHNfYWxpY2UgVVNJTkcgKHRydWUpOworQ1JFQVRFIFBPTElDWSBybHNf cDkgT04gcmxzX3RibF8xIFRPIHJlZ3Jlc3NfcmxzX2V4ZW1wdF91c2VyIFdJVEggQ0hFQ0sgKGNp ZCA9IChTRUxFQ1Qgc2VjbHYgRlJPTSBybHNfdGJsXzIpKTsKKworLS0gVGVzdCBOVUxMIHZhbHVl CitTRUxFQ1QgcGdfZ2V0X3BvbGljeV9kZGwoTlVMTCwgJ3Jsc19wMScsIGZhbHNlKTsKK1NFTEVD VCBwZ19nZXRfcG9saWN5X2RkbCgndGFiMScsIE5VTEwsIGZhbHNlKTsKK1NFTEVDVCBwZ19nZXRf cG9saWN5X2RkbChOVUxMLCBOVUxMLCBmYWxzZSk7CisKKworLS0gVGFibGUgZG9lcyBub3QgZXhp c3QKK1NFTEVDVCBwZ19nZXRfcG9saWN5X2RkbCgndGFiMScsICdybHNfcDEnLCBmYWxzZSk7Cist LSBQb2xpY3kgZG9lcyBub3QgZXhpc3QKK1NFTEVDVCBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3Ri bF8xJywgJ3BvbDEnLCBmYWxzZSk7CisKKy0tIFdpdGhvdXQgUHJldHR5IGZvcm1hdHRlZAorU0VM RUNUIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3AxJywgZmFsc2UpOworU0VM RUNUIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3AyJywgZmFsc2UpOworU0VM RUNUIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3AzJywgZmFsc2UpOworU0VM RUNUIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3A0JywgZmFsc2UpOworU0VM RUNUIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3A1JywgZmFsc2UpOworU0VM RUNUIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3A2JywgZmFsc2UpOworU0VM RUNUIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3A3JywgZmFsc2UpOworU0VM RUNUIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3A4JywgZmFsc2UpOworU0VM RUNUIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3A5JywgZmFsc2UpOworCist LSBXaXRoIFByZXR0eSBmb3JtYXR0ZWQKK1xwc2V0IGZvcm1hdCB1bmFsaWduZWQKK1NFTEVDVCBw Z19nZXRfcG9saWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wMScsIHRydWUpOworU0VMRUNUIHBn X2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3AyJywgdHJ1ZSk7CitTRUxFQ1QgcGdf Z2V0X3BvbGljeV9kZGwoJ3Jsc190YmxfMScsICdybHNfcDMnLCB0cnVlKTsKK1NFTEVDVCBwZ19n ZXRfcG9saWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wNCcsIHRydWUpOworU0VMRUNUIHBnX2dl dF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3A1JywgdHJ1ZSk7CitTRUxFQ1QgcGdfZ2V0 X3BvbGljeV9kZGwoJ3Jsc190YmxfMScsICdybHNfcDYnLCB0cnVlKTsKK1NFTEVDVCBwZ19nZXRf cG9saWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wNycsIHRydWUpOworU0VMRUNUIHBnX2dldF9w b2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3A4JywgdHJ1ZSk7CitTRUxFQ1QgcGdfZ2V0X3Bv bGljeV9kZGwoJ3Jsc190YmxfMScsICdybHNfcDknLCB0cnVlKTsKKworLS0gQ2xlYW4gdXAgb2Jq ZWN0cyBjcmVhdGVkIGZvciB0ZXN0aW5nIHBnX2dldF9wb2xpY3lfZGRsIGZ1bmN0aW9uLgorRFJP UCBQT0xJQ1kgcmxzX3AxIE9OIHJsc190YmxfMTsKK0RST1AgUE9MSUNZIHJsc19wMiBPTiBybHNf dGJsXzE7CitEUk9QIFBPTElDWSBybHNfcDMgT04gcmxzX3RibF8xOworRFJPUCBQT0xJQ1kgcmxz X3A0IE9OIHJsc190YmxfMTsKK0RST1AgUE9MSUNZIHJsc19wNSBPTiBybHNfdGJsXzE7CitEUk9Q IFBPTElDWSBybHNfcDYgT04gcmxzX3RibF8xOworRFJPUCBQT0xJQ1kgcmxzX3A3IE9OIHJsc190 YmxfMTsKK0RST1AgUE9MSUNZIHJsc19wOCBPTiBybHNfdGJsXzE7CitEUk9QIFBPTElDWSBybHNf cDkgT04gcmxzX3RibF8xOworCiAtLQogLS0gQ2xlYW4gdXAgb2JqZWN0cwogLS0KLS0gCjIuNTEu MAoK --000000000000ef621406413299f1--