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 1wIJUf-007yH7-1B for pgsql-hackers@arkaria.postgresql.org; Thu, 30 Apr 2026 04:59:21 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wIJUe-00618H-1A for pgsql-hackers@arkaria.postgresql.org; Thu, 30 Apr 2026 04:59:20 +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 1wIJUd-00617v-35 for pgsql-hackers@lists.postgresql.org; Thu, 30 Apr 2026 04:59:20 +0000 Received: from mail-ot1-x32f.google.com ([2607:f8b0: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 1wIJUa-00000003vRM-2abX for pgsql-hackers@postgresql.org; Thu, 30 Apr 2026 04:59:18 +0000 Received: by mail-ot1-x32f.google.com with SMTP id 46e09a7af769-7de4be15125so467958a34.0 for ; Wed, 29 Apr 2026 21:59:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1777525153; cv=none; d=google.com; s=arc-20240605; b=cspbZnY9II9+BEZPR9K3sWUCL/lyeKea6SX7i3n0l8PPhIuZvRQ9PSczTkfb8qRuy3 n/BtyzoNfkrI79T6X9WXGjexY4N9Dd8fIkVbXhU/ER53oHYADLIQaeGMWyzrDz2ZF8BQ 9Q27RmcexPrBw+u7lDIlGNMYSynGrCtwzj5A7I1IXyEKmF8m6jCH0YAmDwwp+PZdbt7s 8GhREdcFWxAD6FXJXAI4EH+9KUim1XqVYeAC4EY8FLLej2t04zVSfNQhhmgO5LVMc8KX 2YnhiythGvamQeCu8RPP3eAbBxcZoiBWzpLezU3Oqd/c4DTAip1J/XtHKGkbACHdZham zYww== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=to:subject:message-id:date:from:mime-version:dkim-signature; bh=iQoHxIJ3klwEXUFyXtaR8yqQCjRMEaXXYWcN4Pn92wU=; fh=fehX+dSXHrIgCc3h4InFuGDgPvwzJKFBTFHKY5o6R7c=; b=TJ1jEbHDxNBI2e79Qn1VaSAJoqkhR/WQBF7A4uJ2l/Ajv/KaJyGD+gSFJxHgF6Is2r VRWO77/O5zoKTjbnlNKrWcFTemahVoxu86v8JD+NiM/rbPufyvsP2Xq6Ez7Ya9a9mliQ P8KHWzxH/aW4x8kzpPQHG/0tCbtKyN052rUUX9qxk/bUBXC9Zhtocmgh+yODoFV6lTC2 0h4EduVGA7oXFFF0gfPGy3ZC8Ndriz4C0lEY4VQGrMKcQN5BFvsJDYqfph8LZc8tfRhI bV3+i9o882ysb8JFIOv0g3jXMvAu+4THQehrKn+i3x8hIcs0YyW5A0EM9mNdSvt8zTox GA3Q==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb.com; s=google; t=1777525153; x=1778129953; darn=postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=iQoHxIJ3klwEXUFyXtaR8yqQCjRMEaXXYWcN4Pn92wU=; b=BJsOWSWvfWyP1h47ql9quqOj20zm0i1/x/sL2DI47RbPbBhsya30zdbcPGDbZPR5R2 JKwQzL6XxY6PBMFnPScvEXfU6TD4QyEzdw2tqS/Kd0fTi4DLMUZVcqPNw2X9zVwFDeMM hnAr1VUWCOdWFhSTbyZCNE9tImnviKZs1NClYivqq0X+01zFImeNBnOh+/dYNrd1htLL cjkL8/jvgSI7Hp7iSj7Jr0FIoMxhZsgdImu2Dmfon/zGt5EgjTzw8kI4tIXhq3XuW6pp 0Y5BJUxam1GdFkcFSxxF6mUSr0FkJ6st9PoZne7TLIx6YgEU0RnpdXYWLzo4Dx1yeOdT jG+Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777525153; x=1778129953; h=to:subject:message-id:date:from:mime-version:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=iQoHxIJ3klwEXUFyXtaR8yqQCjRMEaXXYWcN4Pn92wU=; b=PvTLQizIM2V5QPcDXyX35kxarFlsEpks0GCd4dm83wnXsPQUx+04t4x1khe1dMpQg6 qHgXxLzWchGFKOMLKvqyyrtyyJaivujNkSWqn1gnpMVZ4KiTttlU7uiGSP7J6sweynLW 2EiPcdA2liAgEU7cC8ojtgtMzEfXL9QnG3II3niaMD4JXhtiIB6BfGr7NQ+XQ/VujxuA 6qiwWfWiCp+zfZwn81D5p/kxNEaFH+c+44KIX6tq8qrc3ZktEjFYwP8FHR/201cUJf6g ZUYcuAtWtKnaBM+JpGRZTAxkxNFKHwk2sU1qjaXr1c2UrLNUQHtwlGJz5BA0h3s01VzX Rohw== X-Gm-Message-State: AOJu0YyD0o7+ILqZYA4S1Kmb3I7Wc3mNrxHkc/iBWM3xg0ZIKJteSGjQ QtH9GXGHshmRtuDPmBVcLCCd/vYUuaFNF2NdZJAvg7fmxKYEmVAgqdWWGuQ/cDp+zFm2xt0L31C otEf3O5Za5aEdOLyNi3aCuz1Bt8AiAGUukeUdIwwTpYHoV462zKj8oi5e X-Gm-Gg: AeBDievy3+WZIucYzNlubWHefdRxkSehUuAsK3QE3I/fm1UD2laELhzEV1DyUjbkFBy dQ6eSFNz8hgkhRPVUixiU83uCKsniwDVkhfywuadKsTdJWUJ+3DLRnAv/LO33IU/EOUyd29P/Pk n21pvJvHsUL90gke1wyBDordc+jMdx6QLGVKFJZF1Pd1m0OZ8V97Hdo8f8Sy7f5LNpLj8rnQsRH rMcKRUtuNd0b09X8oUlNSTPq0jvsmHWOKTGE1G9TaZGEsQWZAZoOBuZTZC7nwl4h+Xp/vNB1wfT 7qVa/6tlEWtNseIqVJS1 X-Received: by 2002:a05:6820:983:b0:696:15ed:69fa with SMTP id 006d021491bc7-6967a60d183mr669927eaf.48.1777525153219; Wed, 29 Apr 2026 21:59:13 -0700 (PDT) MIME-Version: 1.0 From: Mark Dilger Date: Wed, 29 Apr 2026 21:59:04 -0700 X-Gm-Features: AVHnY4I-4I0b_By2ce0-3VuUtDQ7mYYEdgWv41Y6SNGu7U1IQkRmkLY9fT_DiUA Message-ID: Subject: Bug in logical decoding with DDL and subtransactions To: Pg Hackers Content-Type: multipart/mixed; boundary="0000000000005679fa0650a653f6" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000005679fa0650a653f6 Content-Type: multipart/alternative; boundary="0000000000005679f90650a653f4" --0000000000005679f90650a653f4 Content-Type: text/plain; charset="UTF-8" There is a bug in logical decoding with CREATE and subtransactions. If a CREATE statement creates a row in a catalog during a subtransaction, but that subtransaction gets rolled back to the savepoint, and other things happen which trigger page pruning on the catalog page, and the original transaction (perhaps in a new subtransaction) then does another CREATE operation, a new row can get inserted into the same catalog at the same TID. During logical decoding, this can trigger an Assertion, and in non-assert builds, could silently corrupt the decoder's catalog visibility, which could cause it to produce incorrect output (wrong column mappings, etc.) This bug appears to go all the way back to 9.4 where logical replication was introduced. Arseny Sher hit the cmax variant of this exact bug, and Alvaro fixed the cmax version of it, but appears not to have seen the danger for cmin also existed, rather writing the comment, "if so it must have the same cmin." (commit 350cdcd5e6d, 2019) Creating a short deterministic reproducer is difficult, because the catalog table must be set up such that page pruning will happen. (I have a 24K line reproducer, which seems too big to attach for the list.) A fuzz tester is attached instead. The attached patch fixes the problem without fixing the fundamental architectural shortcut the code is taking. The comment in xl_heap_new_cid ("store toplevel xid so we don't have to merge cids from different transactions") indicates an intentional design choice. A more complete fix could also be considered, but is not included here. -- *Mark Dilger* --0000000000005679f90650a653f4 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
There is a bug in logical decoding with CREATE and su= btransactions.=C2=A0 If a CREATE statement creates a row in a catalog durin= g a subtransaction, but that subtransaction gets rolled back to the savepoi= nt, and other things happen which trigger page pruning on the catalog page,= and the original transaction (perhaps in a new subtransaction) then does a= nother CREATE operation, a new row can get inserted into the same catalog a= t the same TID.=C2=A0 During logical decoding, this can trigger an Assertio= n, and in non-assert builds, could silently=C2=A0corrupt the decoder's = catalog visibility, which could cause it to produce incorrect=C2=A0output (= wrong column mappings, etc.)

This bug appears = to go all the way back to 9.4 where logical replication was introduced.

Arseny Sher hit the cmax variant of this exact bug, a= nd Alvaro fixed the cmax version of it, but appears not to have seen the da= nger for cmin also existed, rather writing the comment, "if so it must= have the same cmin." =C2=A0(commit 350cdcd5e6d, 2019)
<= br>
Creating a short deterministic reproducer is difficult, becau= se the catalog table must be set up such that page pruning will happen. =C2= =A0(I have a 24K line reproducer, which seems too big to attach for the lis= t.) =C2=A0A fuzz tester is attached instead.

The a= ttached patch fixes the problem without fixing the fundamental architectura= l shortcut the code is taking.=C2=A0 The=C2=A0comment in xl_heap_new_cid (&= quot;store=C2=A0toplevel xid so we don't have to merge cids from differ= ent transactions") indicates an intentional design choice.=C2=A0 A mor= e complete fix could also be considered, but is not included here.

--
=
Mark Dilger=
--0000000000005679f90650a653f4-- --0000000000005679fa0650a653f6 Content-Type: application/octet-stream; name="fix-tuplecid-cmin-upstream.patch" Content-Disposition: attachment; filename="fix-tuplecid-cmin-upstream.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mokzdalc0 ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZl ci5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVmZmVyLmMKaW5k ZXggMTExMzlhOTEwYjguLjZjMDEyNTgxOGNkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIuYwpAQCAtMTQ1LDYgKzE0NSw3IEBAIHR5cGVkZWYg c3RydWN0IFJlb3JkZXJCdWZmZXJUdXBsZUNpZEVudAogCUNvbW1hbmRJZAljbWluOwogCUNvbW1h bmRJZAljbWF4OwogCUNvbW1hbmRJZAljb21ib2NpZDsJCS8qIGp1c3QgZm9yIGRlYnVnZ2luZyAq LworCVRyYW5zYWN0aW9uSWQgc3VieGlkOwkJLyogc3VidHJhbnNhY3Rpb24gdGhhdCB3cm90ZSB0 aGlzIGVudHJ5ICovCiB9IFJlb3JkZXJCdWZmZXJUdXBsZUNpZEVudDsKIAogLyogVmlydHVhbCBm aWxlIGRlc2NyaXB0b3Igd2l0aCBmaWxlIG9mZnNldCB0cmFja2luZyAqLwpAQCAtMTg3OCwxNiAr MTg3OSw2MCBAQCBSZW9yZGVyQnVmZmVyQnVpbGRUdXBsZUNpZEhhc2goUmVvcmRlckJ1ZmZlciAq cmIsIFJlb3JkZXJCdWZmZXJUWE4gKnR4bikKIAkJCWVudC0+Y21pbiA9IGNoYW5nZS0+ZGF0YS50 dXBsZWNpZC5jbWluOwogCQkJZW50LT5jbWF4ID0gY2hhbmdlLT5kYXRhLnR1cGxlY2lkLmNtYXg7 CiAJCQllbnQtPmNvbWJvY2lkID0gY2hhbmdlLT5kYXRhLnR1cGxlY2lkLmNvbWJvY2lkOworCQkJ ZW50LT5zdWJ4aWQgPSBjaGFuZ2UtPmRhdGEudHVwbGVjaWQuc3VieGlkOwogCQl9Ci0JCWVsc2UK KwkJZWxzZSBpZiAoZW50LT5jbWluICE9IGNoYW5nZS0+ZGF0YS50dXBsZWNpZC5jbWluKQogCQl7 CiAJCQkvKgotCQkJICogTWF5YmUgd2UgYWxyZWFkeSBzYXcgdGhpcyB0dXBsZSBiZWZvcmUgaW4g dGhpcyB0cmFuc2FjdGlvbiwgYnV0Ci0JCQkgKiBpZiBzbyBpdCBtdXN0IGhhdmUgdGhlIHNhbWUg Y21pbi4KKwkJCSAqIFRoZSBzYW1lIFRJRCBhcHBlYXJzIHdpdGggYSBkaWZmZXJlbnQgY21pbi4g IFRoaXMgaGFwcGVucyB3aGVuCisJCQkgKiBhIHN1YnRyYW5zYWN0aW9uIGluc2VydHMgYSBjYXRh bG9nIHR1cGxlLCB0aGVuIGEgUk9MTEJBQ0sgVE8KKwkJCSAqIFNBVkVQT0lOVCBhYm9ydHMgdGhh dCBzdWJ0cmFuc2FjdGlvbiwgYW5kIGEgbGF0ZXIgb3BlcmF0aW9uCisJCQkgKiByZXVzZXMgdGhl IHNhbWUgVElEIChhZnRlciBwYWdlIHBydW5pbmcgcmVjbGFpbXMgdGhlIGRlYWQKKwkJCSAqIHR1 cGxlJ3Mgc2xvdCkuICBCb3RoIHhsX2hlYXBfbmV3X2NpZCByZWNvcmRzIHJlbWFpbiBpbiB0aGUg V0FMCisJCQkgKiB1bmRlciB0aGUgdG9wLWxldmVsIHhpZC4KKwkJCSAqCisJCQkgKiBXZSByZXNv bHZlIHRoaXMgYnkgY2hlY2tpbmcgd2hpY2ggZW50cnkncyBzdWJ0cmFuc2FjdGlvbgorCQkJICog YWJvcnRlZC4gIFRoZSBlbnRyeSBmcm9tIHRoZSBhYm9ydGVkIHN1YnRyYW5zYWN0aW9uIGlzIHN0 YWxlCisJCQkgKiBhbmQgc2hvdWxkIGJlIGRpc2NhcmRlZC4KIAkJCSAqLwotCQkJQXNzZXJ0KGVu dC0+Y21pbiA9PSBjaGFuZ2UtPmRhdGEudHVwbGVjaWQuY21pbik7Ci0KKwkJCWlmIChUcmFuc2Fj dGlvbklkRGlkQWJvcnQoZW50LT5zdWJ4aWQpKQorCQkJeworCQkJCS8qIEV4aXN0aW5nIGVudHJ5 IGlzIGZyb20gYW4gYWJvcnRlZCBzdWJ0eG47IHJlcGxhY2UgaXQuICovCisJCQkJZW50LT5jbWlu ID0gY2hhbmdlLT5kYXRhLnR1cGxlY2lkLmNtaW47CisJCQkJZW50LT5jbWF4ID0gY2hhbmdlLT5k YXRhLnR1cGxlY2lkLmNtYXg7CisJCQkJZW50LT5jb21ib2NpZCA9IGNoYW5nZS0+ZGF0YS50dXBs ZWNpZC5jb21ib2NpZDsKKwkJCQllbnQtPnN1YnhpZCA9IGNoYW5nZS0+ZGF0YS50dXBsZWNpZC5z dWJ4aWQ7CisJCQl9CisJCQllbHNlIGlmIChUcmFuc2FjdGlvbklkRGlkQWJvcnQoY2hhbmdlLT5k YXRhLnR1cGxlY2lkLnN1YnhpZCkpCisJCQl7CisJCQkJLyogTmV3IGVudHJ5IGlzIGZyb20gYW4g YWJvcnRlZCBzdWJ0eG47IHNraXAgaXQuICovCisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJLyoK KwkJCQkgKiBOZWl0aGVyIHN1YnRyYW5zYWN0aW9uIGFib3J0ZWQg4oCUIHRoaXMgc2hvdWxkbid0 IGhhcHBlbi4KKwkJCQkgKiBLZWVwIHRoZSBleGlzdGluZyBlbnRyeSBidXQgbG9nIGEgd2Fybmlu Zy4KKwkJCQkgKi8KKwkJCQllbG9nKFdBUk5JTkcsICJ0dXBsZWNpZCBjbWluIG1pc21hdGNoIHdp dGggbm8gYWJvcnRlZCAiCisJCQkJCSAic3VidHJhbnNhY3Rpb246IHJlbCAldS8ldS8ldSB0aWQg KCV1LCV1KSAiCisJCQkJCSAiZXhpc3RpbmcgY21pbiAldSAoc3VieGlkICV1KSAiCisJCQkJCSAi bmV3IGNtaW4gJXUgKHN1YnhpZCAldSkiLAorCQkJCQkga2V5LnJsb2NhdG9yLnNwY09pZCwKKwkJ CQkJIGtleS5ybG9jYXRvci5kYk9pZCwKKwkJCQkJIGtleS5ybG9jYXRvci5yZWxOdW1iZXIsCisJ CQkJCSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKCZrZXkudGlkKSwKKwkJCQkJIEl0ZW1Qb2lu dGVyR2V0T2Zmc2V0TnVtYmVyKCZrZXkudGlkKSwKKwkJCQkJIGVudC0+Y21pbiwgZW50LT5zdWJ4 aWQsCisJCQkJCSBjaGFuZ2UtPmRhdGEudHVwbGVjaWQuY21pbiwKKwkJCQkJIGNoYW5nZS0+ZGF0 YS50dXBsZWNpZC5zdWJ4aWQpOworCQkJfQorCQl9CisJCWVsc2UKKwkJewogCQkJLyoKKwkJCSAq IFNhbWUgY21pbiDigJQgdGhpcyBpcyB0aGUgbm9ybWFsIGNhc2Ugd2hlcmUgdGhlIHNhbWUgdHVw bGUgaXMKKwkJCSAqIHNlZW4gbXVsdGlwbGUgdGltZXMgKGUuZy4gaW5zZXJ0IHRoZW4gdXBkYXRl KS4gIFVwZGF0ZSBjbWF4LgorCQkJICoKIAkJCSAqIGNtYXggbWF5IGJlIGluaXRpYWxseSBpbnZh bGlkLCBidXQgb25jZSBzZXQgaXQgY2FuIG9ubHkgZ3JvdywKIAkJCSAqIGFuZCBuZXZlciBiZWNv bWUgaW52YWxpZCBhZ2Fpbi4KIAkJCSAqLwpAQCAtMzQ0MCw3ICszNDg1LDggQEAgdm9pZAogUmVv cmRlckJ1ZmZlckFkZE5ld1R1cGxlQ2lkcyhSZW9yZGVyQnVmZmVyICpyYiwgVHJhbnNhY3Rpb25J ZCB4aWQsCiAJCQkJCQkJIFhMb2dSZWNQdHIgbHNuLCBSZWxGaWxlTG9jYXRvciBsb2NhdG9yLAog CQkJCQkJCSBJdGVtUG9pbnRlckRhdGEgdGlkLCBDb21tYW5kSWQgY21pbiwKLQkJCQkJCQkgQ29t bWFuZElkIGNtYXgsIENvbW1hbmRJZCBjb21ib2NpZCkKKwkJCQkJCQkgQ29tbWFuZElkIGNtYXgs IENvbW1hbmRJZCBjb21ib2NpZCwKKwkJCQkJCQkgVHJhbnNhY3Rpb25JZCBzdWJ4aWQpCiB7CiAJ UmVvcmRlckJ1ZmZlckNoYW5nZSAqY2hhbmdlID0gUmVvcmRlckJ1ZmZlckFsbG9jQ2hhbmdlKHJi KTsKIAlSZW9yZGVyQnVmZmVyVFhOICp0eG47CkBAIC0zNDUyLDYgKzM0OTgsNyBAQCBSZW9yZGVy QnVmZmVyQWRkTmV3VHVwbGVDaWRzKFJlb3JkZXJCdWZmZXIgKnJiLCBUcmFuc2FjdGlvbklkIHhp ZCwKIAljaGFuZ2UtPmRhdGEudHVwbGVjaWQuY21pbiA9IGNtaW47CiAJY2hhbmdlLT5kYXRhLnR1 cGxlY2lkLmNtYXggPSBjbWF4OwogCWNoYW5nZS0+ZGF0YS50dXBsZWNpZC5jb21ib2NpZCA9IGNv bWJvY2lkOworCWNoYW5nZS0+ZGF0YS50dXBsZWNpZC5zdWJ4aWQgPSBzdWJ4aWQ7CiAJY2hhbmdl LT5sc24gPSBsc247CiAJY2hhbmdlLT50eG4gPSB0eG47CiAJY2hhbmdlLT5hY3Rpb24gPSBSRU9S REVSX0JVRkZFUl9DSEFOR0VfSU5URVJOQUxfVFVQTEVDSUQ7CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3NuYXBidWlsZC5jIGIvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC9zbmFwYnVpbGQuYwppbmRleCBhZGYxOGMzOTdkYi4uM2M5ZWJhM2RiYWEg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvc25hcGJ1aWxkLmMK KysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9zbmFwYnVpbGQuYwpAQCAtNzAw LDcgKzcwMCw3IEBAIFNuYXBCdWlsZFByb2Nlc3NOZXdDaWQoU25hcEJ1aWxkICpidWlsZGVyLCBU cmFuc2FjdGlvbklkIHhpZCwKIAlSZW9yZGVyQnVmZmVyQWRkTmV3VHVwbGVDaWRzKGJ1aWxkZXIt PnJlb3JkZXIsIHhscmVjLT50b3BfeGlkLCBsc24sCiAJCQkJCQkJCSB4bHJlYy0+dGFyZ2V0X2xv Y2F0b3IsIHhscmVjLT50YXJnZXRfdGlkLAogCQkJCQkJCQkgeGxyZWMtPmNtaW4sIHhscmVjLT5j bWF4LAotCQkJCQkJCQkgeGxyZWMtPmNvbWJvY2lkKTsKKwkJCQkJCQkJIHhscmVjLT5jb21ib2Np ZCwgeGlkKTsKIAogCS8qIGZpZ3VyZSBvdXQgbmV3IGNvbW1hbmQgaWQgKi8KIAlpZiAoeGxyZWMt PmNtaW4gIT0gSW52YWxpZENvbW1hbmRJZCAmJgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVw bGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcmVvcmRl cmJ1ZmZlci5oCmluZGV4IGZhMDc0NTU1MmY4Li4wMDcyYzdlNWFhMSAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvcmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oCisrKyBiL3NyYy9pbmNsdWRlL3Jl cGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaApAQCAtMTQ2LDYgKzE0Niw3IEBAIHR5cGVkZWYgc3Ry dWN0IFJlb3JkZXJCdWZmZXJDaGFuZ2UKIAkJCUNvbW1hbmRJZAljbWluOwogCQkJQ29tbWFuZElk CWNtYXg7CiAJCQlDb21tYW5kSWQJY29tYm9jaWQ7CisJCQlUcmFuc2FjdGlvbklkIHN1YnhpZDsK IAkJfQkJCXR1cGxlY2lkOwogCiAJCS8qIEludmFsaWRhdGlvbi4gKi8KQEAgLTc0OCw3ICs3NDks OSBAQCBleHRlcm4gdm9pZCBSZW9yZGVyQnVmZmVyQWRkTmV3Q29tbWFuZElkKFJlb3JkZXJCdWZm ZXIgKnJiLCBUcmFuc2FjdGlvbklkIHhpZCwKIGV4dGVybiB2b2lkIFJlb3JkZXJCdWZmZXJBZGRO ZXdUdXBsZUNpZHMoUmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQgeGlkLAogCQkJCQkJ CQkJCSBYTG9nUmVjUHRyIGxzbiwgUmVsRmlsZUxvY2F0b3IgbG9jYXRvciwKIAkJCQkJCQkJCQkg SXRlbVBvaW50ZXJEYXRhIHRpZCwKLQkJCQkJCQkJCQkgQ29tbWFuZElkIGNtaW4sIENvbW1hbmRJ ZCBjbWF4LCBDb21tYW5kSWQgY29tYm9jaWQpOworCQkJCQkJCQkJCSBDb21tYW5kSWQgY21pbiwg Q29tbWFuZElkIGNtYXgsCisJCQkJCQkJCQkJIENvbW1hbmRJZCBjb21ib2NpZCwKKwkJCQkJCQkJ CQkgVHJhbnNhY3Rpb25JZCBzdWJ4aWQpOwogZXh0ZXJuIHZvaWQgUmVvcmRlckJ1ZmZlckFkZElu dmFsaWRhdGlvbnMoUmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVj UHRyIGxzbiwKIAkJCQkJCQkJCQkgIFNpemUgbm1zZ3MsIFNoYXJlZEludmFsaWRhdGlvbk1lc3Nh Z2UgKm1zZ3MpOwogZXh0ZXJuIHZvaWQgUmVvcmRlckJ1ZmZlckFkZERpc3RyaWJ1dGVkSW52YWxp ZGF0aW9ucyhSZW9yZGVyQnVmZmVyICpyYiwgVHJhbnNhY3Rpb25JZCB4aWQsCg== --0000000000005679fa0650a653f6 Content-Type: text/x-perl-script; charset="UTF-8"; name="fuzz_cmin.pl" Content-Disposition: attachment; filename="fuzz_cmin.pl" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mol0hugs1 IyEvdXNyL2Jpbi9lbnYgcGVybAojCiMgZnV6el9jbWluLnBsIOKAlCBGdXp6ZXIgZm9yIHR1cGxl Y2lkIGNtaW4gbWlzbWF0Y2ggaW4gbG9naWNhbCBkZWNvZGluZwojCiMgRGVtb25zdHJhdGVzIGEg YnVnIGluIFJlb3JkZXJCdWZmZXJCdWlsZFR1cGxlQ2lkSGFzaCB3aGVyZSBjYXRhbG9nCiMgVElE IHJldXNlIGFmdGVyIHNhdmVwb2ludCByb2xsYmFjayBjYXVzZXMgYW4gQXNzZXJ0IGZhaWx1cmUg KGNhc3NlcnQKIyBidWlsZHMpIG9yIHNpbGVudCBjYXRhbG9nIHZpc2liaWxpdHkgY29ycnVwdGlv biAocHJvZHVjdGlvbiBidWlsZHMpLgojCiMgV0hBVCBJVCBET0VTCiMKIyAgIDEuIEluaXRpYWxp emVzIGEgZnJlc2ggUG9zdGdyZVNRTCBjbHVzdGVyIHdpdGggd2FsX2xldmVsPWxvZ2ljYWwuCiMg ICAyLiBDcmVhdGVzIGEgZGF0YWJhc2UsIGEgbG9naWNhbCByZXBsaWNhdGlvbiBzbG90ICh0ZXN0 X2RlY29kaW5nKSwKIyAgICAgIGFuZCAzMCBzZWVkIHRhYmxlcyB0byBwb3B1bGF0ZSBjYXRhbG9n IHBhZ2VzLgojICAgMy4gUnVucyB1cCB0byBOIGl0ZXJhdGlvbnMuICBFYWNoIGl0ZXJhdGlvbjoK IyAgICAgIGEuIEdlbmVyYXRlcyBhIHJhbmRvbSB0cmFuc2FjdGlvbiB3aXRoIENSRUFURSBUQUJM RSwgRFJPUCBUQUJMRSwKIyAgICAgICAgIFNBVkVQT0lOVCwgUk9MTEJBQ0sgVE8gU0FWRVBPSU5U LCBhbmQgQUxURVIgVEFCTEUgb3BlcmF0aW9ucy4KIyAgICAgIGIuIENvbW1pdHMgdGhlIHRyYW5z YWN0aW9uLgojICAgICAgYy4gQ2FsbHMgcGdfbG9naWNhbF9zbG90X2dldF9jaGFuZ2VzKCkgdG8g dHJpZ2dlciBsb2dpY2FsIGRlY29kaW5nLgojICAgNC4gSWYgdGhlIHNlcnZlciBjcmFzaGVzIChB c3NlcnQgb3IgUEFOSUMpLCByZXBvcnRzIHRoZSBpdGVyYXRpb24KIyAgICAgIG51bWJlciBhbmQg c2F2ZXMgdGhlIGZhaWxpbmcgU1FMIHRvIGEgZmlsZS4KIwojIFdIQVQgVE8gRVhQRUNUCiMKIyAg IE9uIGFuIFVOUEFUQ0hFRCAtLWVuYWJsZS1jYXNzZXJ0IGJ1aWxkLCB0aGUgZnV6emVyIHR5cGlj YWxseSB0cmlnZ2VycwojICAgd2l0aGluIDMwMC0xMDAwIGl0ZXJhdGlvbnMgKDE1LTYwIHNlY29u ZHMpIHdpdGggb3V0cHV0IGxpa2U6CiMKIyAgICAgISEhIENNSU4gTUlTTUFUQ0ggb24gaXRlcmF0 aW9uIDM4OSAhISEKIyAgICAgUmVwcm9kdWNlcjogZnV6el9jYXNlcy9jYXNlXzM4OS5zcWwKIyAg ICAgUGFuaWMgZGV0YWlsczoKIyAgICAgVFJBUDogZmFpbGVkIEFzc2VydCgiZW50LT5jbWluID09 IGNoYW5nZS0+ZGF0YS50dXBsZWNpZC5jbWluIiksIC4uLgojCiMgICBPbiBhIFBBVENIRUQgYnVp bGQsIGl0IHJ1bnMgdG8gY29tcGxldGlvbiB3aXRoIG5vIGNyYXNoZXMuCiMKIyAgIE9uIGEgcHJv ZHVjdGlvbiAobm9uLWFzc2VydCkgYnVpbGQsIHRoZSBidWcgaXMgc2lsZW50IOKAlCBubyBjcmFz aCwKIyAgIGJ1dCB0aGUgbG9naWNhbCBkZWNvZGVyIG1heSBwcm9kdWNlIGluY29ycmVjdCBvdXRw dXQuCiMKIyBSRVFVSVJFTUVOVFMKIwojICAgLSBBIFBvc3RncmVTUUwgaW5zdGFsbGF0aW9uICgt LWVuYWJsZS1jYXNzZXJ0IHJlY29tbWVuZGVkKS4KIyAgICAgU2V0IFBHSU5TVEFMTCB0byB0aGUg aW5zdGFsbGF0aW9uIHByZWZpeCwgZS5nLjoKIyAgICAgICBleHBvcnQgUEdJTlNUQUxMPS91c3Iv bG9jYWwvcGdzcWwKIyAgICAgVGhlIGRpcmVjdG9yeSBtdXN0IGNvbnRhaW4gYmluL2luaXRkYiwg YmluL3BnX2N0bCwgYmluL3BzcWwuCiMgICAtIFRoZSB0ZXN0X2RlY29kaW5nIGNvbnRyaWIgbW9k dWxlIG11c3QgYmUgaW5zdGFsbGVkLgojICAgLSBObyBvdGhlciBQb3N0Z3JlU1FMIGluc3RhbmNl IHVzaW5nIHBvcnQgNTQzMjkgKG9yIHNldCBQR1BPUlQpLgojCiMgVVNBR0UKIwojICAgcGVybCBm dXp6X2NtaW4ucGwgW21heF9pdGVyYXRpb25zXQojCiMgICBEZWZhdWx0IGlzIDEwMDAwMCBpdGVy YXRpb25zLiAgVGhlIGZ1enplciBzdG9wcyBlYXJseSBvbiBjcmFzaC4KIyAgIERhdGEgZGlyZWN0 b3J5IGFuZCB0ZXN0IGNhc2VzIGFyZSB3cml0dGVuIHRvIGZ1enpfZGF0YS8gYW5kCiMgICBmdXp6 X2Nhc2VzLyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuCiMKIyBFTlZJUk9OTUVOVCBWQVJJQUJM RVMKIwojICAgUEdJTlNUQUxMICAgUG9zdGdyZVNRTCBpbnN0YWxsYXRpb24gcHJlZml4IChkZWZh dWx0OiAvdXNyL2xvY2FsL3Bnc3FsKQojICAgUEdQT1JUICAgICAgUG9ydCBudW1iZXIgKGRlZmF1 bHQ6IDU0MzI5KQojCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSBGaWxlOjpQYXRoIHF3 KHJtdHJlZSk7CnVzZSBQT1NJWCBxdyhXSUZFWElURUQgV0VYSVRTVEFUVVMpOwoKIyAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KIyBDb25maWd1cmF0aW9uCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpteSAkbWF4 X2l0ZXJhdGlvbnMgPSAkQVJHVlswXSB8fCAxMDBfMDAwOwpteSAkcGdfaW5zdGFsbCAgICAgPSAk RU5We1BHSU5TVEFMTH0gfHwgJy91c3IvbG9jYWwvcGdzcWwnOwpteSAkcG9ydCAgICAgICAgICAg PSAkRU5We1BHUE9SVH0gICAgfHwgNTQzMjk7Cm15ICRiYXNlX2RpciAgICAgICA9ICdmdXp6X2Rh dGEnOwpteSAkY2FzZXNfZGlyICAgICAgPSAnZnV6el9jYXNlcyc7Cm15ICRkYm5hbWUgICAgICAg ICA9ICdmdXp6ZGInOwpteSAkc2xvdF9uYW1lICAgICAgPSAnZnV6el9zbG90JzsKCm15ICRwZ19j dGwgID0gIiRwZ19pbnN0YWxsL2Jpbi9wZ19jdGwiOwpteSAkaW5pdGRiICA9ICIkcGdfaW5zdGFs bC9iaW4vaW5pdGRiIjsKbXkgJHBzcWwgICAgPSAiJHBnX2luc3RhbGwvYmluL3BzcWwiOwoKZGll ICJQR0lOU1RBTEw9JHBnX2luc3RhbGwgZG9lcyBub3QgY29udGFpbiBiaW4vaW5pdGRiXG4iCiAg ICB1bmxlc3MgLXggJGluaXRkYjsKCiMgVHVuYWJsZSByYW5nZXMgZm9yIHRlc3QgY2FzZSBnZW5l cmF0aW9uCm15ICRtaW5fb3BzX3Blcl90eG4gICAgID0gMTA7Cm15ICRtYXhfb3BzX3Blcl90eG4g ICAgID0gODA7Cm15ICRtaW5fY29sc19wZXJfdGFibGUgID0gNTsKbXkgJG1heF9jb2xzX3Blcl90 YWJsZSAgPSAyNTsKbXkgJG1heF9saXZlX3RhYmxlcyAgICAgPSAzMDsKbXkgJHNhdmVwb2ludF9w cm9iICAgICAgPSAwLjE1OwpteSAkcm9sbGJhY2tfcHJvYiAgICAgICA9IDAuNDA7Cm15ICRhbHRl cl9hZGRfcHJvYiAgICAgID0gMC4xMDsKbXkgJGFsdGVyX2Ryb3BfcHJvYiAgICAgPSAwLjA1OwoK bXkgQGNvbF90eXBlcyA9ICgKICAgICgnaW50ZWdlcicpICB4IDUsCiAgICAoJ2JpZ2ludCcpICAg eCAzLAogICAgKCd0ZXh0JykgICAgIHggNCwKICAgICgnYm9vbGVhbicpICB4IDMsCiAgICAoJ3Jl YWwnKSAgICAgeCAyLAogICAgJ2RvdWJsZSBwcmVjaXNpb24nLAogICAgJ251bWVyaWMnLAogICAg J2RhdGUnLAogICAgJ3RpbWVzdGFtcCcsCiAgICAnYnl0ZWEnLAogICAgJ3ZhcmNoYXIoMTAwKScs CiAgICAnY2hhcigxMCknLAogICAgJ3NtYWxsaW50JywKICAgICdvaWQnLAogICAgJ25hbWUnLAop OwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBIZWxwZXJzCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpz dWIgcGljayB7IHJldHVybiAkX1tpbnQocmFuZChAXykpXSB9CgpzdWIgcnVuX3BzcWwgewogICAg bXkgKCRkYiwgJHNxbCwgJW9wdHMpID0gQF87CiAgICBteSAkdGltZW91dCA9ICRvcHRze3RpbWVv dXR9IHx8IDMwOwoKICAgIG15ICR0bXBmaWxlID0gIi90bXAvZnV6el9jbWluXyQkLnNxbCI7CiAg ICBvcGVuKG15ICRmaCwgJz4nLCAkdG1wZmlsZSkgb3IgZGllICJDYW5ub3Qgd3JpdGUgJHRtcGZp bGU6ICQhXG4iOwogICAgcHJpbnQgJGZoICRzcWw7CiAgICBjbG9zZSgkZmgpOwoKICAgIG15ICRj bWQgPSAiJHBzcWwgLVggLWggL3RtcCAtcCAkcG9ydCAtZCAkZGIgLWYgJHRtcGZpbGUgMj4mMSI7 CiAgICBteSAkb3V0cHV0OwogICAgZXZhbCB7CiAgICAgICAgbG9jYWwgJFNJR3tBTFJNfSA9IHN1 YiB7IGRpZSAidGltZW91dFxuIiB9OwogICAgICAgIGFsYXJtKCR0aW1lb3V0KTsKICAgICAgICAk b3V0cHV0ID0gYCRjbWRgOwogICAgICAgIGFsYXJtKDApOwogICAgfTsKICAgIG15ICRleGl0X3N0 YXR1cyA9ICQ/OwogICAgYWxhcm0oMCk7CgogICAgdW5saW5rKCR0bXBmaWxlKTsKCiAgICBpZiAo JEAgJiYgJEAgZXEgInRpbWVvdXRcbiIpIHsKICAgICAgICByZXR1cm4gKHVuZGVmLCAiVElNRU9V VCBhZnRlciAke3RpbWVvdXR9cyIpOwogICAgfQoKICAgIG15ICRvayA9IFdJRkVYSVRFRCgkZXhp dF9zdGF0dXMpICYmIFdFWElUU1RBVFVTKCRleGl0X3N0YXR1cykgPT0gMDsKICAgIHJldHVybiAo JG9rLCAkb3V0cHV0KTsKfQoKc3ViIHNlcnZlcl9hbGl2ZSB7CiAgICBteSAoJG9rKSA9IHJ1bl9w c3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgMTsiLCB0aW1lb3V0ID0+IDEwKTsKICAgIHJldHVybiAk b2s7Cn0KCnN1YiBzdGFydF9zZXJ2ZXIgewogICAgcHJpbnQgIlN0YXJ0aW5nIHNlcnZlciBvbiBw b3J0ICRwb3J0Li4uXG4iOwogICAgc3lzdGVtKCIkcGdfY3RsIC1EICRiYXNlX2RpciAtbCAkYmFz ZV9kaXIvbG9nZmlsZSAtdyBzdGFydCAiCiAgICAgICAgIC4gIi1vICctcCAkcG9ydCAtayAvdG1w JyA+L2Rldi9udWxsIDI+JjEiKTsKICAgIGRpZSAiRmFpbGVkIHRvIHN0YXJ0IHNlcnZlclxuIiB1 bmxlc3Mgc2VydmVyX2FsaXZlKCk7CiAgICBwcmludCAiU2VydmVyIHJ1bm5pbmcuXG4iOwp9Cgpz dWIgc3RvcF9zZXJ2ZXIgewogICAgc3lzdGVtKCIkcGdfY3RsIC1EICRiYXNlX2RpciAtbSBmYXN0 IHN0b3AgPi9kZXYvbnVsbCAyPiYxIik7Cn0KCnN1YiBjaGVja19sb2dfZm9yX3BhbmljIHsKICAg IG9wZW4obXkgJGZoLCAnPCcsICIkYmFzZV9kaXIvbG9nZmlsZSIpIG9yIHJldHVybiAiIjsKICAg IG15IEBtYXRjaGVzOwogICAgd2hpbGUgKDwkZmg+KSB7CiAgICAgICAgcHVzaCBAbWF0Y2hlcywg JF8gaWYgL3R1cGxlY2lkIGNtaW4gbWlzbWF0Y2h8bWF0Y2hpbmcgZW50cnkgI3xQQU5JQ3xUUkFQ LzsKICAgIH0KICAgIGNsb3NlKCRmaCk7CiAgICByZXR1cm4gam9pbigiIiwgQG1hdGNoZXMpOwp9 CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFNldHVwCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpwcmlu dCAiPT09IGNtaW4gbWlzbWF0Y2ggZnV6emVyID09PVxuIjsKcHJpbnQgIlBHIGluc3RhbGw6ICRw Z19pbnN0YWxsXG4iOwpwcmludCAiRGF0YSBkaXI6ICAgJGJhc2VfZGlyXG4iOwpwcmludCAiUG9y dDogICAgICAgJHBvcnRcblxuIjsKCiMgQ2xlYW4gdXAgYW55IHByZXZpb3VzIHJ1bgpzdG9wX3Nl cnZlcigpOwppZiAoLWQgJGJhc2VfZGlyKSB7CiAgICBybXRyZWUoJGJhc2VfZGlyKSBvciBkaWUg IkNhbm5vdCByZW1vdmUgJGJhc2VfZGlyOiAkIVxuIjsKfQpta2RpcigkY2FzZXNfZGlyKSB1bmxl c3MgLWQgJGNhc2VzX2RpcjsKCiMgSW5pdGlhbGl6ZSBjbHVzdGVyCnByaW50ICJJbml0aWFsaXpp bmcgY2x1c3Rlci4uLlxuIjsKc3lzdGVtKCIkaW5pdGRiIC1EICRiYXNlX2RpciAtLW5vLWxvY2Fs ZSAtQSB0cnVzdCA+L2Rldi9udWxsIDI+JjEiKSA9PSAwCiAgICBvciBkaWUgImluaXRkYiBmYWls ZWRcbiI7CgojIENvbmZpZ3VyZSBmb3IgbG9naWNhbCBkZWNvZGluZwpvcGVuKG15ICRjb25mLCAn Pj4nLCAiJGJhc2VfZGlyL3Bvc3RncmVzcWwuY29uZiIpIG9yIGRpZSAkITsKcHJpbnQgJGNvbmYg PDwnQ09ORic7CndhbF9sZXZlbCA9IGxvZ2ljYWwKbWF4X3JlcGxpY2F0aW9uX3Nsb3RzID0gNApt YXhfd2FsX3NlbmRlcnMgPSA0CnNoYXJlZF9idWZmZXJzID0gJzY0TUInCmxvZ19taW5fbWVzc2Fn ZXMgPSB3YXJuaW5nCmxvZ19saW5lX3ByZWZpeCA9ICclbSBbJXBdICcKQ09ORgpjbG9zZSgkY29u Zik7CgpzdGFydF9zZXJ2ZXIoKTsKCiMgQ3JlYXRlIGRhdGFiYXNlIGFuZCBsb2dpY2FsIHJlcGxp Y2F0aW9uIHNsb3QKcHJpbnQgIkNyZWF0aW5nIGRhdGFiYXNlIGFuZCByZXBsaWNhdGlvbiBzbG90 Li4uXG4iOwpydW5fcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIERBVEFCQVNFICRkYm5hbWU7Iik7 CnJ1bl9wc3FsKCRkYm5hbWUsCiAgICAiU0VMRUNUIHBnX2NyZWF0ZV9sb2dpY2FsX3JlcGxpY2F0 aW9uX3Nsb3QoJyRzbG90X25hbWUnLCAndGVzdF9kZWNvZGluZycpOyIpOwoKIyBQcmUtc2VlZDog Y3JlYXRlIHRhYmxlcyB0byBwb3B1bGF0ZSBjYXRhbG9nIHBhZ2VzIHNvIHRoYXQgc3Vic2VxdWVu dAojIENSRUFURS9EUk9QIGN5Y2xlcyB3aXRoaW4gYSB0cmFuc2FjdGlvbiBjYW4gdHJpZ2dlciBw YWdlIHBydW5pbmcgYW5kCiMgVElEIHJldXNlIG9uIGNhdGFsb2cgcGFnZXMuCnByaW50ICJQcmUt c2VlZGluZyBjYXRhbG9nIHBhZ2VzICgzMCB0YWJsZXMpLi4uXG4iOwpmb3IgbXkgJGkgKDEuLjMw KSB7CiAgICBteSBAY29scyA9IG1hcCB7ICJjJF8gaW50ZWdlciIgfSAxLi4yMDsKICAgIHJ1bl9w c3FsKCRkYm5hbWUsICJDUkVBVEUgVEFCTEUgc2VlZF8kaSAoIiAuIGpvaW4oJywgJywgQGNvbHMp IC4gIik7Iik7Cn0KIyBDb25zdW1lIHRoZSBzZWVkaW5nIFdBTApydW5fcHNxbCgkZGJuYW1lLAog ICAgIlNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX2xvZ2ljYWxfc2xvdF9nZXRfY2hhbmdlcygnJHNs b3RfbmFtZScsIE5VTEwsIE5VTEwpOyIpOwoKcHJpbnQgIlNldHVwIGNvbXBsZXRlLiBTdGFydGlu ZyBmdXp6ZXIuXG5cbiI7CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRlc3QgY2FzZSBnZW5lcmF0 b3IKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCnN1YiBnZW5lcmF0ZV90ZXN0X2Nhc2UgewogICAgbXkg JHNxbCA9ICIiOwogICAgbXkgQGxpdmVfdGFibGVzOwogICAgbXkgQHNhdmVwb2ludHM7CiAgICBt eSAlc3BfdGFibGVzOwogICAgbXkgJHRhYmxlX2NvdW50ZXIgPSAwOwogICAgbXkgJHNwX2NvdW50 ZXIgPSAwOwogICAgbXkgJGNvbF9jb3VudGVyID0gMDsKCiAgICBteSAkbnVtX29wcyA9ICRtaW5f b3BzX3Blcl90eG4gKwogICAgICAgICAgICAgICAgICBpbnQocmFuZCgkbWF4X29wc19wZXJfdHhu IC0gJG1pbl9vcHNfcGVyX3R4bikpOwoKICAgICRzcWwgLj0gIkJFR0lOO1xuIjsKCiAgICBmb3Ig bXkgJG9wX251bSAoMS4uJG51bV9vcHMpIHsKICAgICAgICAjIE1heWJlIGNyZWF0ZSBhIHNhdmVw b2ludAogICAgICAgIGlmIChyYW5kKCkgPCAkc2F2ZXBvaW50X3Byb2IgJiYgQHNhdmVwb2ludHMg PCAzKSB7CiAgICAgICAgICAgICRzcF9jb3VudGVyKys7CiAgICAgICAgICAgIG15ICRzcCA9ICJz cF8kc3BfY291bnRlciI7CiAgICAgICAgICAgIHB1c2ggQHNhdmVwb2ludHMsICRzcDsKICAgICAg ICAgICAgJHNwX3RhYmxlc3skc3B9ID0gW107CiAgICAgICAgICAgICRzcWwgLj0gIlNBVkVQT0lO VCAkc3A7XG4iOwogICAgICAgICAgICBuZXh0OwogICAgICAgIH0KCiAgICAgICAgIyBNYXliZSBy b2xsYmFjayB0byBzYXZlcG9pbnQKICAgICAgICBpZiAocmFuZCgpIDwgJHJvbGxiYWNrX3Byb2Ig JiYgQHNhdmVwb2ludHMgPiAwKSB7CiAgICAgICAgICAgIG15ICRzcCA9ICRzYXZlcG9pbnRzWy0x XTsKICAgICAgICAgICAgZm9yIG15ICR0IChAeyRzcF90YWJsZXN7JHNwfX0pIHsKICAgICAgICAg ICAgICAgIEBsaXZlX3RhYmxlcyA9IGdyZXAgeyAkXyBuZSAkdCB9IEBsaXZlX3RhYmxlczsKICAg ICAgICAgICAgfQogICAgICAgICAgICAkc3FsIC49ICJST0xMQkFDSyBUTyBTQVZFUE9JTlQgJHNw O1xuIjsKICAgICAgICAgICAgJHNwX3RhYmxlc3skc3B9ID0gW107CiAgICAgICAgICAgIG5leHQ7 CiAgICAgICAgfQoKICAgICAgICAjIE1heWJlIEFMVEVSIFRBQkxFIEFERCBDT0xVTU4KICAgICAg ICBpZiAocmFuZCgpIDwgJGFsdGVyX2FkZF9wcm9iICYmIEBsaXZlX3RhYmxlcyA+IDApIHsKICAg ICAgICAgICAgbXkgJHRibCA9IHBpY2soQGxpdmVfdGFibGVzKTsKICAgICAgICAgICAgJGNvbF9j b3VudGVyKys7CiAgICAgICAgICAgIG15ICR0eXAgPSBwaWNrKEBjb2xfdHlwZXMpOwogICAgICAg ICAgICAkc3FsIC49ICJBTFRFUiBUQUJMRSAkdGJsIEFERCBDT0xVTU4gZXh0cmFfJGNvbF9jb3Vu dGVyICR0eXA7XG4iOwogICAgICAgICAgICBuZXh0OwogICAgICAgIH0KCiAgICAgICAgIyBNYXli ZSBBTFRFUiBUQUJMRSBEUk9QIENPTFVNTgogICAgICAgIGlmIChyYW5kKCkgPCAkYWx0ZXJfZHJv cF9wcm9iICYmIEBsaXZlX3RhYmxlcyA+IDApIHsKICAgICAgICAgICAgbXkgJHRibCA9IHBpY2so QGxpdmVfdGFibGVzKTsKICAgICAgICAgICAgaWYgKCRjb2xfY291bnRlciA+IDApIHsKICAgICAg ICAgICAgICAgIG15ICRjID0gMSArIGludChyYW5kKCRjb2xfY291bnRlcikpOwogICAgICAgICAg ICAgICAgJHNxbCAuPSAiRE8gXCRcJCBCRUdJTiAiCiAgICAgICAgICAgICAgICAgICAgICAgLiAi QUxURVIgVEFCTEUgJHRibCBEUk9QIENPTFVNTiBJRiBFWElTVFMgZXh0cmFfJGM7ICIKICAgICAg ICAgICAgICAgICAgICAgICAuICJFWENFUFRJT04gV0hFTiBPVEhFUlMgVEhFTiBOVUxMOyAiCiAg ICAgICAgICAgICAgICAgICAgICAgLiAiRU5EIFwkXCQ7XG4iOwogICAgICAgICAgICB9CiAgICAg ICAgICAgIG5leHQ7CiAgICAgICAgfQoKICAgICAgICAjIE1haW4gY2hvaWNlOiBDUkVBVEUgb3Ig RFJPUAogICAgICAgIG15ICRkb19jcmVhdGUgPSAoQGxpdmVfdGFibGVzIDwgMykgICAgICAgICAg ICAgICAgPyAxIDoKICAgICAgICAgICAgICAgICAgICAgICAgKEBsaXZlX3RhYmxlcyA+PSAkbWF4 X2xpdmVfdGFibGVzKSA/IDAgOgogICAgICAgICAgICAgICAgICAgICAgICAocmFuZCgpIDwgMC41 NSkgICAgICAgICAgICAgICAgICAgPyAxIDogMDsKCiAgICAgICAgaWYgKCRkb19jcmVhdGUpIHsK ICAgICAgICAgICAgJHRhYmxlX2NvdW50ZXIrKzsKICAgICAgICAgICAgbXkgJHRibCA9ICJmdXp6 X3QkdGFibGVfY291bnRlciI7CiAgICAgICAgICAgIG15ICRuY29scyA9ICRtaW5fY29sc19wZXJf dGFibGUgKwogICAgICAgICAgICAgICAgICAgICAgICBpbnQocmFuZCgkbWF4X2NvbHNfcGVyX3Rh YmxlIC0gJG1pbl9jb2xzX3Blcl90YWJsZSkpOwogICAgICAgICAgICBteSBAY29sczsKICAgICAg ICAgICAgZm9yIG15ICRjICgxLi4kbmNvbHMpIHsKICAgICAgICAgICAgICAgIHB1c2ggQGNvbHMs ICJjJGMgIiAuIHBpY2soQGNvbF90eXBlcyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHNx bCAuPSAiQ1JFQVRFIFRBQkxFICR0YmwgKCIgLiBqb2luKCcsICcsIEBjb2xzKSAuICIpO1xuIjsK ICAgICAgICAgICAgcHVzaCBAbGl2ZV90YWJsZXMsICR0Ymw7CiAgICAgICAgICAgIGlmIChAc2F2 ZXBvaW50cykgewogICAgICAgICAgICAgICAgcHVzaCBAeyRzcF90YWJsZXN7JHNhdmVwb2ludHNb LTFdfX0sICR0Ymw7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAg ICAgICAgIG15ICRpZHggPSBpbnQocmFuZChAbGl2ZV90YWJsZXMpKTsKICAgICAgICAgICAgbXkg JHRibCA9IHNwbGljZShAbGl2ZV90YWJsZXMsICRpZHgsIDEpOwogICAgICAgICAgICAkc3FsIC49 ICJEUk9QIFRBQkxFICR0Ymw7XG4iOwogICAgICAgIH0KICAgIH0KCiAgICAkc3FsIC49ICJDT01N SVQ7XG4iOwogICAgcmV0dXJuICRzcWw7Cn0KCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgTWFpbiBm dXp6ZXIgbG9vcAojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKbXkgJHN0YXJ0X3RpbWUgPSB0aW1lKCk7 Cgpmb3IgbXkgJGl0ZXIgKDEuLiRtYXhfaXRlcmF0aW9ucykgewogICAgbXkgJHRlc3Rfc3FsID0g Z2VuZXJhdGVfdGVzdF9jYXNlKCk7CgogICAgIyBTYXZlIHRvIGZpbGUgYmVmb3JlIGV4ZWN1dGlu ZyAoaW4gY2FzZSBzZXJ2ZXIgY3Jhc2hlcyBoYXJkKQogICAgbXkgJGNhc2VfZmlsZSA9ICIkY2Fz ZXNfZGlyL2Nhc2VfJGl0ZXIuc3FsIjsKICAgIG9wZW4obXkgJGZoLCAnPicsICRjYXNlX2ZpbGUp IG9yIGRpZSAiQ2Fubm90IHdyaXRlICRjYXNlX2ZpbGU6ICQhXG4iOwogICAgcHJpbnQgJGZoICR0 ZXN0X3NxbDsKICAgIGNsb3NlKCRmaCk7CgogICAgIyBFeGVjdXRlIHRoZSB0cmFuc2FjdGlvbgog ICAgbXkgKCR0eG5fb2ssICR0eG5fb3V0KSA9IHJ1bl9wc3FsKCRkYm5hbWUsICR0ZXN0X3NxbCwg dGltZW91dCA9PiA2MCk7CgogICAgaWYgKCEkdHhuX29rKSB7CiAgICAgICAgaWYgKCFzZXJ2ZXJf YWxpdmUoKSkgewogICAgICAgICAgICBteSAkcGFuaWMgPSBjaGVja19sb2dfZm9yX3BhbmljKCk7 CiAgICAgICAgICAgIHByaW50ICJcbiEhISBTRVJWRVIgQ1JBU0hFRCBvbiBpdGVyYXRpb24gJGl0 ZXIgISEhXG4iOwogICAgICAgICAgICBwcmludCAiUmVwcm9kdWNlcjogJGNhc2VfZmlsZVxuIjsK ICAgICAgICAgICAgcHJpbnQgIlNlcnZlciBsb2cgZXh0cmFjdDpcbiRwYW5pY1xuIiBpZiAkcGFu aWM7CiAgICAgICAgICAgIGxhc3Q7CiAgICAgICAgfQogICAgICAgICMgU2VydmVyIGFsaXZlLCB0 eG4ganVzdCBmYWlsZWQg4oCUIGNvbnN1bWUgV0FMIGFuZCBjb250aW51ZQogICAgICAgIHJ1bl9w c3FsKCRkYm5hbWUsCiAgICAgICAgICAgICJTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19sb2dpY2Fs X3Nsb3RfZ2V0X2NoYW5nZXMoIgogICAgICAgICAgICAuICInJHNsb3RfbmFtZScsIE5VTEwsIE5V TEwpOyIsIHRpbWVvdXQgPT4gMzApOwogICAgICAgIG5leHQ7CiAgICB9CgogICAgIyBUcmFuc2Fj dGlvbiBjb21taXR0ZWQg4oCUIHRyaWdnZXIgbG9naWNhbCBkZWNvZGluZwogICAgbXkgKCRkZWNf b2ssICRkZWNfb3V0KSA9IHJ1bl9wc3FsKCRkYm5hbWUsCiAgICAgICAgIlNFTEVDVCBjb3VudCgq KSBGUk9NIHBnX2xvZ2ljYWxfc2xvdF9nZXRfY2hhbmdlcygiCiAgICAgICAgLiAiJyRzbG90X25h bWUnLCBOVUxMLCBOVUxMKTsiLCB0aW1lb3V0ID0+IDEyMCk7CgogICAgaWYgKCEkZGVjX29rKSB7 CiAgICAgICAgc2xlZXAoMik7CiAgICAgICAgbXkgJHBhbmljID0gY2hlY2tfbG9nX2Zvcl9wYW5p YygpOwoKICAgICAgICBpZiAoJHBhbmljID1+IC90dXBsZWNpZCBjbWluIG1pc21hdGNofFRSQVAu KkFzc2VydC8pIHsKICAgICAgICAgICAgcHJpbnQgIlxuISEhIENNSU4gTUlTTUFUQ0ggb24gaXRl cmF0aW9uICRpdGVyICEhIVxuIjsKICAgICAgICAgICAgcHJpbnQgIlJlcHJvZHVjZXI6ICRjYXNl X2ZpbGVcbiI7CiAgICAgICAgICAgIHByaW50ICJTZXJ2ZXIgbG9nIGV4dHJhY3Q6XG4kcGFuaWNc biI7CiAgICAgICAgICAgIGxhc3Q7CiAgICAgICAgfQoKICAgICAgICBpZiAoIXNlcnZlcl9hbGl2 ZSgpKSB7CiAgICAgICAgICAgIHByaW50ICJcbiEhISBTRVJWRVIgQ1JBU0hFRCBkdXJpbmcgZGVj b2RlLCBpdGVyYXRpb24gJGl0ZXIgISEhXG4iOwogICAgICAgICAgICBwcmludCAiUmVwcm9kdWNl cjogJGNhc2VfZmlsZVxuIjsKICAgICAgICAgICAgcHJpbnQgIlNlcnZlciBsb2cgZXh0cmFjdDpc biRwYW5pY1xuIiBpZiAkcGFuaWM7CiAgICAgICAgICAgIGxhc3Q7CiAgICAgICAgfQogICAgfQoK ICAgICMgUGVyaW9kaWMgY2xlYW51cDogZHJvcCBmdXp6XyB0YWJsZXMgdG8gcHJldmVudCB1bmJv dW5kZWQgY2F0YWxvZyBncm93dGgKICAgIGlmICgkaXRlciAlIDUwID09IDApIHsKICAgICAgICBy dW5fcHNxbCgkZGJuYW1lLCA8PCdDTEVBTlVQJyk7CkRPICQkIERFQ0xBUkUgciByZWNvcmQ7CkJF R0lOCiAgICBGT1IgciBJTiBTRUxFQ1Qgc2NoZW1hbmFtZSB8fCAnLicgfHwgdGFibGVuYW1lIEFT IHQKICAgICAgICAgICAgIEZST00gcGdfdGFibGVzIFdIRVJFIHRhYmxlbmFtZSBMSUtFICdmdXp6 XyUnCiAgICBMT09QCiAgICAgICAgRVhFQ1VURSAnRFJPUCBUQUJMRSBJRiBFWElTVFMgJyB8fCBy LnQgfHwgJyBDQVNDQURFJzsKICAgIEVORCBMT09QOwpFTkQgJCQ7CkNMRUFOVVAKICAgICAgICBy dW5fcHNxbCgkZGJuYW1lLAogICAgICAgICAgICAiU0VMRUNUIGNvdW50KCopIEZST00gcGdfbG9n aWNhbF9zbG90X2dldF9jaGFuZ2VzKCIKICAgICAgICAgICAgLiAiJyRzbG90X25hbWUnLCBOVUxM LCBOVUxMKTsiLCB0aW1lb3V0ID0+IDMwKTsKICAgIH0KCiAgICAjIFByb2dyZXNzCiAgICBpZiAo JGl0ZXIgJSAxMDAgPT0gMCkgewogICAgICAgIG15ICRlbGFwc2VkID0gdGltZSgpIC0gJHN0YXJ0 X3RpbWU7CiAgICAgICAgcHJpbnRmICIgIFslZCBpdGVyYXRpb25zLCAlZHMgZWxhcHNlZCwgJS4x ZiBpdGVyL3NdXG4iLAogICAgICAgICAgICAgICAkaXRlciwgJGVsYXBzZWQsICRpdGVyIC8gKCRl bGFwc2VkIHx8IDEpOwogICAgfQp9CgpteSAkZWxhcHNlZCA9IHRpbWUoKSAtICRzdGFydF90aW1l OwpwcmludCAiXG5GdXp6ZXIgZmluaXNoZWQgYWZ0ZXIgJGVsYXBzZWQgc2Vjb25kcy5cbiI7Cgoj IENsZWFudXAKc3RvcF9zZXJ2ZXIoKTsK --0000000000005679fa0650a653f6--