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 1wDQEX-002wq1-0d for pgsql-hackers@arkaria.postgresql.org; Thu, 16 Apr 2026 17:10:29 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wDQEW-006Sv7-1j for pgsql-hackers@arkaria.postgresql.org; Thu, 16 Apr 2026 17:10:28 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wDQE0-006PKO-06 for pgsql-hackers@lists.postgresql.org; Thu, 16 Apr 2026 17:09:56 +0000 Received: from mail-ua1-x931.google.com ([2607:f8b0:4864:20::931]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wDQDx-00000001LMw-3OHP for pgsql-hackers@lists.postgresql.org; Thu, 16 Apr 2026 17:09:55 +0000 Received: by mail-ua1-x931.google.com with SMTP id a1e0cc1a2514c-94e578a0fa5so3761251241.0 for ; Thu, 16 Apr 2026 10:09:53 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1776359392; cv=none; d=google.com; s=arc-20240605; b=Z9Uc7Vnp330atEcERCRd/R+2JQkrudAMh/ekjOSM9o/sUg8MFB8hTIHyEVTxx0Kdgg 301if3H37VaS3pEzVHnpvP6/CQuCoSORVxWgs7BPkGmZC0vLE5gLa9jcn0JBLwVEjWZB EFrGS4IRBV3lYlsxsLCC/NuJSLEsRv36XCg9teOD5xLzkQq9FkEW8HpFxTSdvrQ8PIbr uAaoLv/QZI3IIqO3VcyPUhXJEGIfd2D+RhonMAXjACxwLAFqm9OgThE7plFKfgBymF/O +tQmFzxBC3GUhR9ma0HpXbodC6umi2Di3Sk4QhBzgY2Vdy4yRX4SfeALmS2b9FG1MJcU MeZQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:mime-version:dkim-signature; bh=T1ArxJOqkygjax5pA+oiUCend8MZE6T4jDLdYiSC1DQ=; fh=TCIvoR+6qXagDyXa87P9ubOD4xX0rE2gSVG/913BBec=; b=TUljFdxtevwZPywQdlmsk6BBPmCpP2Ez4tGdnda2dGfV/OzB7FuYBKflEitDgW7Iyc AK9PHpTH9SyxhqPQj1ZRMWmU6YH2ozoK5LOTUPiIKV+e8i3MQJwoFkVEUzcypfKa+C+O T1bjRMoEGqPlJRhyc9va/8vCl9r8UT04WlWXDQkmzgOLdgwq4jLYpa0kmooXEazTTIPx x8R1E8O+gFjJVYz9bXvNU24MoJK70JILBs/qvSScMDZsPQb3vBfZLeapSZFPsvJwBScF t8YyI19Chk7kVtqr94gvxdgEIyGCmTKA4ClIGzZHUfXpR4UjthrTnejtUC2s6PHb7BAo eNXw==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1776359392; x=1776964192; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=T1ArxJOqkygjax5pA+oiUCend8MZE6T4jDLdYiSC1DQ=; b=bg9ExnVMeAvYqtLpuMdgNP6NDe19k65++jILTllqfLhJWGL+raG7P29pY4s3yCSXyA mdrrX7UlypylNWr6v2EzVYWwvbdwcRyrG+4FqgkmPCXeEMesyqu+qbXQpAWehNrKAKvQ 3/LElyMTXqXX1s3DFDR9CUw8vwfyZjIVDi/k8JjygLfphaSD3PnnCGZQAMyS9JNPVJ84 wJ8KN2xVxJbaUL1xR/dl3+L0LNZgra+jMQJr1s48p9PG6mEbmuw3rMn5tQ3Ygw0SguMF vmqoPO2IO0615nLLSr1M/WvjlX4MLKhj+fMxcxkgnvQFviR4pMNhPlIlKJ1b3iNr4Pai VMtg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776359392; x=1776964192; h=cc: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=T1ArxJOqkygjax5pA+oiUCend8MZE6T4jDLdYiSC1DQ=; b=OGl5gGNDVtd60MMypOuL07BJ306++bw2TvkzIG0Qc/YubiKMGlas47q7AJ4NcT2LFJ h9YkuX26QGd5ngkkB9KO9RR3P/s42e1WQv6UZoztkJjnJ96ut1ETWgLfbiDHxMHyPc9d XSQfD06z9NpLJMdOniXfMYD8H/pdyfM2ARzp3gh59e5wmqZI1sWSk72I5TDQcpbMPp9Q jsJKTJySwKlDTgBtGdVqzuOrwRLs2eoAnj9RUonhCn3Ec1iUVuK0Iqf+ZNmJHwSTKp5+ /zOteMqJ3QiPK+BN5vyXA2KrKheKHTHI621Vjy+92yEfNOumxxsTWLxc94U83bDHLUnI 3fDg== X-Gm-Message-State: AOJu0Ywtuh8a0LDH/RmYEKZN6UYh+xQn9ITgVISjHD9kV+YWvAF492y9 zD0NDoATxP/rbr+uIRssLJr+OnJ+oWAkcIPDr53lUV9Pz/BVCSKX4eAWIEd+EA5tM7mwXtIg0kT pxazqz1sSIsVeyBUXzr+W6bZxUcNIZlfrDhvN X-Gm-Gg: AeBDiesf61/6DQcaIwbR+u93d6JCwQfHy0a1IeeBcjUxzaR6/1gp6U1M3lT4uAzhGpV FQWxFTQrEltJnsgxGy6DZg5t0nrGFt3Ull/JFN6touR3Z+6Sfuu+qSJlck8e8iWMDN/514lqY2G 2nM/XNEDD0YNORYgsJLut+8dOVmXsOUX3cnQvxWtq0OrxWGqgWLjyKIQpoUGiqe7sxwEJGDc8uj CS+q8mopi07JM330TOT0XdHbxWh/P7weHmgB445Tlsah/iCSkCtmyw3g9iGZz5y7PbcWs/KsYQZ RZrXFVP9RSKNvnA+yA== X-Received: by 2002:a05:6102:291e:b0:602:b037:4de8 with SMTP id ada2fe7eead31-609fe8a45fbmr13928516137.4.1776359392063; Thu, 16 Apr 2026 10:09:52 -0700 (PDT) MIME-Version: 1.0 From: SATYANARAYANA NARLAPURAM Date: Thu, 16 Apr 2026 10:09:40 -0700 X-Gm-Features: AQROBzD_TrqVYqsmuhoSHPKrC91-H9H2YP92czhkM0YChjzGe1IrcLU5UomACTg Message-ID: Subject: COPY FROM ON_ERROR SET_NULL bypasses domain NOT NULL with partial column list To: PostgreSQL Hackers Cc: jian he Content-Type: multipart/mixed; boundary="0000000000008eda9f064f96e672" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000008eda9f064f96e672 Content-Type: multipart/alternative; boundary="0000000000008eda9e064f96e670" --0000000000008eda9e064f96e670 Content-Type: text/plain; charset="UTF-8" HI hackers, domain_with_constraint[] was allocated with list_length(attnumlist) elements and indexed sequentially via foreach_current_index(), but copyfromparse.c accesses it via attnum - 1 (physical attribute index). With a partial column list targeting high-numbered columns, this caused an out-of-bounds read that bypassed domain NOT NULL checks, silently inserting NULL into NOT NULL domain columns. Fix by allocating with num_phys_attrs and indexing by attnum - 1, consistent with all other per-column arrays in BeginCopyFrom(). Patch is attached, and added a new test case to cover this scenario. Repro: CREATE DOMAIN d_notnull_int AS int NOT NULL; CREATE TABLE t ( c1 text, c2 text, c3 text, c4 text, c5 text, c6 text, c7 text, c8 text, c9 text, c10 d_notnull_int ); COPY t(c1, c10) FROM stdin WITH (on_error set_null); hello bad \. SELECT c10 IS NULL FROM t; Thanks, Satya --0000000000008eda9e064f96e670 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
HI hackers,

domain_with_constraint[] wa= s allocated with list_length(attnumlist)
elements and indexed sequential= ly via foreach_current_index(), but
copyfromparse.c accesses it via attn= um - 1 (physical attribute index).
With a partial column list targeting = high-numbered columns, this caused
an out-of-bounds read that bypassed d= omain NOT NULL checks, silently
inserting NULL into NOT NULL domain colu= mns.

Fix by allocating with num_phys_attrs and indexing by attnum - = 1,
consistent with all other per-column arrays in BeginCopyFrom().
=

Patch is attached, and added a new test case to cover t= his scenario.

Repro:

CREA= TE DOMAIN d_notnull_int AS int NOT NULL;
CREATE TABLE t (
=C2=A0 =C2= =A0 c1 text, c2 text, c3 text, c4 text, c5 text,
=C2=A0 =C2=A0 c6 text, = c7 text, c8 text, c9 text,
=C2=A0 =C2=A0 c10 d_notnull_int
);

= COPY t(c1, c10) FROM stdin WITH (on_error set_null);
hello=C2=A0 =C2=A0 = bad
\.

SELECT c10 IS NULL FROM t;=C2=A0

= Thanks,
Satya


--0000000000008eda9e064f96e670-- --0000000000008eda9f064f96e672 Content-Type: application/octet-stream; name="0001-Fix-COPY-FROM-ON_ERROR-SET_NULL-OOB-read-with-partia.patch" Content-Disposition: attachment; filename="0001-Fix-COPY-FROM-ON_ERROR-SET_NULL-OOB-read-with-partia.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mo1qh3ce0 RnJvbSBmZjllNTgyMzE2NDcxNGUxNGNiYTVlNzAwOTljMDUxYmMyNTcxZTcwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTYXR5YSBOYXJsYXB1cmFtIDxzYXR5YW5hcmFsYXB1cmFtQGdt YWlsLmNvbT4KRGF0ZTogVGh1LCAxNiBBcHIgMjAyNiAxNjo0MzozNCArMDAwMApTdWJqZWN0OiBb UEFUQ0hdIEZpeCBDT1BZIEZST00gT05fRVJST1IgU0VUX05VTEwgT09CIHJlYWQgd2l0aCBwYXJ0 aWFsIGNvbHVtbgogbGlzdAoKZG9tYWluX3dpdGhfY29uc3RyYWludFtdIHdhcyBhbGxvY2F0ZWQg d2l0aCBsaXN0X2xlbmd0aChhdHRudW1saXN0KQplbGVtZW50cyBhbmQgaW5kZXhlZCBzZXF1ZW50 aWFsbHkgdmlhIGZvcmVhY2hfY3VycmVudF9pbmRleCgpLCBidXQKY29weWZyb21wYXJzZS5jIGFj Y2Vzc2VzIGl0IHZpYSBhdHRudW0gLSAxIChwaHlzaWNhbCBhdHRyaWJ1dGUgaW5kZXgpLgpXaXRo IGEgcGFydGlhbCBjb2x1bW4gbGlzdCB0YXJnZXRpbmcgaGlnaC1udW1iZXJlZCBjb2x1bW5zLCB0 aGlzIGNhdXNlZAphbiBvdXQtb2YtYm91bmRzIHJlYWQgdGhhdCBieXBhc3NlZCBkb21haW4gTk9U IE5VTEwgY2hlY2tzLCBzaWxlbnRseQppbnNlcnRpbmcgTlVMTCBpbnRvIE5PVCBOVUxMIGRvbWFp biBjb2x1bW5zLgoKRml4IGJ5IGFsbG9jYXRpbmcgd2l0aCBudW1fcGh5c19hdHRycyBhbmQgaW5k ZXhpbmcgYnkgYXR0bnVtIC0gMSwKY29uc2lzdGVudCB3aXRoIGFsbCBvdGhlciBwZXItY29sdW1u IGFycmF5cyBpbiBCZWdpbkNvcHlGcm9tKCkuCi0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvY29w eWZyb20uYyAgICAgfCAgOCArKy0tLS0tLQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jb3B5 Mi5vdXQgfCAyMyArKysrKysrKysrKysrKysrKysrKysrKwogc3JjL3Rlc3QvcmVncmVzcy9zcWwv Y29weTIuc3FsICAgICAgfCAxOSArKysrKysrKysrKysrKysrKysrCiAzIGZpbGVzIGNoYW5nZWQs IDQ0IGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvY29tbWFuZHMvY29weWZyb20uYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9tLmMK aW5kZXggNjRhYzMwNjMuLjAwODc1ODViIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5k cy9jb3B5ZnJvbS5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9tLmMKQEAgLTE2 MzYsOCArMTYzNiw2IEBAIEJlZ2luQ29weUZyb20oUGFyc2VTdGF0ZSAqcHN0YXRlLAogCiAJaWYg KGNzdGF0ZS0+b3B0cy5vbl9lcnJvciA9PSBDT1BZX09OX0VSUk9SX1NFVF9OVUxMKQogCXsKLQkJ aW50CQkJYXR0cl9jb3VudCA9IGxpc3RfbGVuZ3RoKGNzdGF0ZS0+YXR0bnVtbGlzdCk7Ci0KIAkJ LyoKIAkJICogV2hlbiBkYXRhIHR5cGUgY29udmVyc2lvbiBmYWlscyBhbmQgT05fRVJST1IgaXMg U0VUX05VTEwsIHdlIG5lZWQKIAkJICogZW5zdXJlIHRoYXQgdGhlIGlucHV0IGNvbHVtbiBhbGxv dyBudWxsIHZhbHVlcy4gIEV4ZWNDb25zdHJhaW50cygpCkBAIC0xNjQ2LDE1ICsxNjQ0LDEzIEBA IEJlZ2luQ29weUZyb20oUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkgKiBjaGVjayBtdXN0IGJlIHBl cmZvcm1lZCBkdXJpbmcgdGhlIGluaXRpYWwgc3RyaW5nLXRvLWRhdHVtCiAJCSAqIGNvbnZlcnNp b24gKHNlZSBDb3B5RnJvbVRleHRMaWtlT25lUm93KCkpLgogCQkgKi8KLQkJY3N0YXRlLT5kb21h aW5fd2l0aF9jb25zdHJhaW50ID0gcGFsbG9jMF9hcnJheShib29sLCBhdHRyX2NvdW50KTsKKwkJ Y3N0YXRlLT5kb21haW5fd2l0aF9jb25zdHJhaW50ID0gcGFsbG9jMF9hcnJheShib29sLCBudW1f cGh5c19hdHRycyk7CiAKIAkJZm9yZWFjaF9pbnQoYXR0bm8sIGNzdGF0ZS0+YXR0bnVtbGlzdCkK IAkJewotCQkJaW50CQkJaSA9IGZvcmVhY2hfY3VycmVudF9pbmRleChhdHRubyk7Ci0KIAkJCUZv cm1fcGdfYXR0cmlidXRlIGF0dCA9IFR1cGxlRGVzY0F0dHIodHVwRGVzYywgYXR0bm8gLSAxKTsK IAotCQkJY3N0YXRlLT5kb21haW5fd2l0aF9jb25zdHJhaW50W2ldID0gRG9tYWluSGFzQ29uc3Ry YWludHMoYXR0LT5hdHR0eXBpZCwgTlVMTCk7CisJCQljc3RhdGUtPmRvbWFpbl93aXRoX2NvbnN0 cmFpbnRbYXR0bm8gLSAxXSA9IERvbWFpbkhhc0NvbnN0cmFpbnRzKGF0dC0+YXR0dHlwaWQsIE5V TEwpOwogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2Nv cHkyLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY29weTIub3V0CmluZGV4IDc2MDBl NTIzLi4yZDZiZmRkOCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jb3B5 Mi5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jb3B5Mi5vdXQKQEAgLTgzOSw2 ICs4MzksMjggQEAgU0VMRUNUICogRlJPTSB0X29uX2Vycm9yX251bGwgT1JERVIgQlkgYTsKICAx MyB8ICAgMTQgfCBOVUxMCiAoMyByb3dzKQogCistLSBUZXN0IG9uX2Vycm9yIHNldF9udWxsIHdp dGggcGFydGlhbCBjb2x1bW4gbGlzdCBhbmQgZG9tYWluIE5PVCBOVUxMLgorLS0gQnVnOiBkb21h aW5fd2l0aF9jb25zdHJhaW50W10gd2FzIGluZGV4ZWQgYnkgcGh5c2ljYWwgYXR0bnVtLCBidXQK Ky0tIGFsbG9jYXRlZCB3aXRoIG9ubHkgYXMgbWFueSBlbGVtZW50cyBhcyB0aGUgQ09QWSBjb2x1 bW4gbGlzdC4KKy0tIFdpdGggYSBwYXJ0aWFsIGNvbHVtbiBsaXN0IHRhcmdldGluZyBhIGhpZ2gt bnVtYmVyZWQgY29sdW1uLCB0aGlzCistLSBjYXVzZWQgYW4gb3V0LW9mLWJvdW5kcyByZWFkIHRo YXQgYnlwYXNzZWQgdGhlIGRvbWFpbiBOT1QgTlVMTCBjaGVjay4KK0NSRUFURSBUQUJMRSB0X29u X2Vycm9yX251bGxfcGFydGlhbCAoCisgICAgYzEgdGV4dCwgYzIgdGV4dCwgYzMgdGV4dCwgYzQg dGV4dCwgYzUgdGV4dCwKKyAgICBjNiB0ZXh0LCBjNyB0ZXh0LCBjOCB0ZXh0LCBjOSB0ZXh0LAor ICAgIGMxMCBkX2ludF9ub3RfbnVsbCAgIC0tIGF0dG51bSAxMCwgZG9tYWluIE5PVCBOVUxMCisp OworLS0gUGFydGlhbCBjb2x1bW4gbGlzdDogYXR0bnVtbGlzdCA9IHsxLCAxMH0uICBTaG91bGQg ZmFpbCBiZWNhdXNlCistLSB0aGUgZG9tYWluIG9uIGMxMCBkb2VzIG5vdCBhbGxvdyBudWxsLCBh bmQgJ2JhZCcgaXMgbm90IGFuIGludGVnZXIuCitDT1BZIHRfb25fZXJyb3JfbnVsbF9wYXJ0aWFs KGMxLCBjMTApIEZST00gU1RESU4gV0lUSCAob25fZXJyb3Igc2V0X251bGwpOyAtLSBmYWlsCitF UlJPUjogIGRvbWFpbiBkX2ludF9ub3RfbnVsbCBkb2VzIG5vdCBhbGxvdyBudWxsIHZhbHVlcwor REVUQUlMOiAgT05fRVJST1IgU0VUX05VTEwgY2Fubm90IGJlIGFwcGxpZWQgYmVjYXVzZSBjb2x1 bW4gImMxMCIgKGRvbWFpbiBkX2ludF9ub3RfbnVsbCkgZG9lcyBub3QgYWNjZXB0IG51bGwgdmFs dWVzLgorQ09OVEVYVDogIENPUFkgdF9vbl9lcnJvcl9udWxsX3BhcnRpYWwsIGxpbmUgMSwgY29s dW1uIGMxMDogImJhZCIKK1NFTEVDVCBjb3VudCgqKSBBUyAiZXhwZWN0XzAiIEZST00gdF9vbl9l cnJvcl9udWxsX3BhcnRpYWw7CisgZXhwZWN0XzAgCistLS0tLS0tLS0tCisgICAgICAgIDAKKygx IHJvdykKKwogXHBzZXQgbnVsbCAnJwogLS0gdGVzdHMgZm9yIG9uX2Vycm9yIG9wdGlvbiB3aXRo IGxvZ192ZXJib3NpdHkgYW5kIG51bGwgY29uc3RyYWludCB2aWEgZG9tYWluCiBDUkVBVEUgRE9N QUlOIGRjaGVja19pZ25fZXJyMiB2YXJjaGFyKDE1KSBOT1QgTlVMTDsKQEAgLTkwMCw2ICs5MjIs NyBAQCBEUk9QIFZJRVcgaW5zdGVhZF9vZl9pbnNlcnRfdGJsX3ZpZXdfMjsKIERST1AgRlVOQ1RJ T04gZnVuX2luc3RlYWRfb2ZfaW5zZXJ0X3RibCgpOwogRFJPUCBUQUJMRSBjaGVja19pZ25fZXJy OwogRFJPUCBUQUJMRSB0X29uX2Vycm9yX251bGw7CitEUk9QIFRBQkxFIHRfb25fZXJyb3JfbnVs bF9wYXJ0aWFsOwogRFJPUCBET01BSU4gZF9pbnRfbm90X251bGw7CiBEUk9QIERPTUFJTiBkX2lu dF9wb3NpdGl2ZV9tYXliZV9udWxsOwogRFJPUCBUQUJMRSBjaGVja19pZ25fZXJyMjsKZGlmZiAt LWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NvcHkyLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mv c3FsL2NvcHkyLnNxbAppbmRleCBlMDgxMDEwOS4uMjg3YzhmYjggMTAwNjQ0Ci0tLSBhL3NyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL2NvcHkyLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9jb3B5 Mi5zcWwKQEAgLTU4MCw2ICs1ODAsMjQgQEAgQ09QWSB0X29uX2Vycm9yX251bGwgRlJPTSBTVERJ TiBXSVRIIChvbl9lcnJvciBzZXRfbnVsbCwgbG9nX3ZlcmJvc2l0eSB2ZXJib3NlKTsKIAogU0VM RUNUICogRlJPTSB0X29uX2Vycm9yX251bGwgT1JERVIgQlkgYTsKIAorLS0gVGVzdCBvbl9lcnJv ciBzZXRfbnVsbCB3aXRoIHBhcnRpYWwgY29sdW1uIGxpc3QgYW5kIGRvbWFpbiBOT1QgTlVMTC4K Ky0tIEJ1ZzogZG9tYWluX3dpdGhfY29uc3RyYWludFtdIHdhcyBpbmRleGVkIGJ5IHBoeXNpY2Fs IGF0dG51bSwgYnV0CistLSBhbGxvY2F0ZWQgd2l0aCBvbmx5IGFzIG1hbnkgZWxlbWVudHMgYXMg dGhlIENPUFkgY29sdW1uIGxpc3QuCistLSBXaXRoIGEgcGFydGlhbCBjb2x1bW4gbGlzdCB0YXJn ZXRpbmcgYSBoaWdoLW51bWJlcmVkIGNvbHVtbiwgdGhpcworLS0gY2F1c2VkIGFuIG91dC1vZi1i b3VuZHMgcmVhZCB0aGF0IGJ5cGFzc2VkIHRoZSBkb21haW4gTk9UIE5VTEwgY2hlY2suCitDUkVB VEUgVEFCTEUgdF9vbl9lcnJvcl9udWxsX3BhcnRpYWwgKAorICAgIGMxIHRleHQsIGMyIHRleHQs IGMzIHRleHQsIGM0IHRleHQsIGM1IHRleHQsCisgICAgYzYgdGV4dCwgYzcgdGV4dCwgYzggdGV4 dCwgYzkgdGV4dCwKKyAgICBjMTAgZF9pbnRfbm90X251bGwgICAtLSBhdHRudW0gMTAsIGRvbWFp biBOT1QgTlVMTAorKTsKKy0tIFBhcnRpYWwgY29sdW1uIGxpc3Q6IGF0dG51bWxpc3QgPSB7MSwg MTB9LiAgU2hvdWxkIGZhaWwgYmVjYXVzZQorLS0gdGhlIGRvbWFpbiBvbiBjMTAgZG9lcyBub3Qg YWxsb3cgbnVsbCwgYW5kICdiYWQnIGlzIG5vdCBhbiBpbnRlZ2VyLgorQ09QWSB0X29uX2Vycm9y X251bGxfcGFydGlhbChjMSwgYzEwKSBGUk9NIFNURElOIFdJVEggKG9uX2Vycm9yIHNldF9udWxs KTsgLS0gZmFpbAoraGVsbG8JYmFkCitcLgorCitTRUxFQ1QgY291bnQoKikgQVMgImV4cGVjdF8w IiBGUk9NIHRfb25fZXJyb3JfbnVsbF9wYXJ0aWFsOworCiBccHNldCBudWxsICcnCiAKIC0tIHRl c3RzIGZvciBvbl9lcnJvciBvcHRpb24gd2l0aCBsb2dfdmVyYm9zaXR5IGFuZCBudWxsIGNvbnN0 cmFpbnQgdmlhIGRvbWFpbgpAQCAtNjUyLDYgKzY3MCw3IEBAIERST1AgVklFVyBpbnN0ZWFkX29m X2luc2VydF90Ymxfdmlld18yOwogRFJPUCBGVU5DVElPTiBmdW5faW5zdGVhZF9vZl9pbnNlcnRf dGJsKCk7CiBEUk9QIFRBQkxFIGNoZWNrX2lnbl9lcnI7CiBEUk9QIFRBQkxFIHRfb25fZXJyb3Jf bnVsbDsKK0RST1AgVEFCTEUgdF9vbl9lcnJvcl9udWxsX3BhcnRpYWw7CiBEUk9QIERPTUFJTiBk X2ludF9ub3RfbnVsbDsKIERST1AgRE9NQUlOIGRfaW50X3Bvc2l0aXZlX21heWJlX251bGw7CiBE Uk9QIFRBQkxFIGNoZWNrX2lnbl9lcnIyOwotLSAKMi40My4wCgo= --0000000000008eda9f064f96e672--