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 1wBCbu-000pt5-2g for pgsql-hackers@arkaria.postgresql.org; Fri, 10 Apr 2026 14:13:27 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wBCbs-00CPN9-2M for pgsql-hackers@arkaria.postgresql.org; Fri, 10 Apr 2026 14:13:25 +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 1wBCbs-00CPN1-11 for pgsql-hackers@lists.postgresql.org; Fri, 10 Apr 2026 14:13:25 +0000 Received: from mail-yw1-x112e.google.com ([2607:f8b0:4864:20::112e]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wBCbr-00000000LLP-0Kjv for pgsql-hackers@postgresql.org; Fri, 10 Apr 2026 14:13:24 +0000 Received: by mail-yw1-x112e.google.com with SMTP id 00721157ae682-793fdbb8d3aso23952597b3.3 for ; Fri, 10 Apr 2026 07:13:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1775830402; cv=none; d=google.com; s=arc-20240605; b=lkRVr2oy6vSv+HTHjMj1feYJ/wPmVcJZWqwQRY4dD5g36M9Qgh4EqCny7v4wV24qE2 8dyAImVwy+AxcPv+qtYc5dnRyNWaasP/zKsZ5UA/Xlhz4F88hgVQ8KLRSx8JjSv/AIIo vc1yl34VyMqwVKY9WO0dm+K+bJ8BrlaCExu8Vzjf1WM9Homo+o3adDEx40e9iF8cOuzl MWKfi94YA/wNkIVC3lIp1Mdszkr33EuTfqMMfWNeVxSKXC/vbYuFnSDX4iCjBOeMS9jM J17OODcUGubtzWpSOHcUhisD/KCBbV/x1g+CmMFY8jVkd5TCk7P0f6ckfzCknHu6iHu9 MXNw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :dkim-signature; bh=EgbWdHfQLBQNCzaHESKklwWzzT4ykOwj1dGps79jysM=; fh=33OU7BWuulPFH378PdKTnpeW+jw3IP20DTmpLDeQ3pE=; b=NQ1Qhe6hYhfiImmyAVTqvyOYYlneLAI+YbwyN4h0TrPAWGGNDjF1D/4MLfbglOOEFJ XSGdEY5iJk8LRAubAdp1w1gH63+9oEVu8ior4giz3CuflYj+Eclbhdk4ScdQFh678h6U ZXr35VvRNvj2MxwlTkRPzyHuzfjKkb9ybOyU/HkEvVaE0e17L20vq/MjVRHSDMVlGTO1 Q3NycmY7cApOwW2UBkArNw68vWpQLLHy5VJPARmiqHb9k8Wppob4LiLb8Xwnuk2Fv2KN F7/PUWaAHVEg5Lr/A0B0E+LI2cR19SFTHYiILQvcHpUVputdciG3FQ+feQEXjkNrZYY4 LRdA==; darn=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=1775830402; x=1776435202; darn=postgresql.org; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=EgbWdHfQLBQNCzaHESKklwWzzT4ykOwj1dGps79jysM=; b=ePVgyTSnYKsDUhLX65mBFu8/7gC2hnR/vCVvAWavZwl8xOqv9gZoXhnpYavzLssMHy kzZCn2nHDWnMttvKuWd+5CdVtIRgQwjyrkIjgE+oiV/MtA29SGUZBKjhlrhKKM/jjNUO P3RmDqDJ3fmdBKQTyAaHrc+mWJjg69Z8fG1jLjbgUnIUxA2QHgeOi8FQJkmcbhNb/P5P PfBJ+AhmRlqJrh2zB/jIpdgJCagJ9xjz+dIR/KY1A6T2K3xZ2nWrVEJ2aGF2Dn6Bl+W5 oriWw8U4UrPXXA5V4OBzSTfd9f642VeLd74DUrN6MrvuZcAIT1VZUpInGTLhrloeMybr pKOw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775830402; x=1776435202; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=EgbWdHfQLBQNCzaHESKklwWzzT4ykOwj1dGps79jysM=; b=irFuVOXTmv7Gn/9xWt7pjhZ4JZgRhDoEPMEquvcf2A/VC+8Lu+BI8+mbXxZGjhwjn2 O8xsRGLd6q7m4duRAEf12I+shPyQEx8a2JgJDCiQGQC6AEOf7qH/aPyBAJhrSvWEFVXb A8NBghBsMghGtJT5J+v+Yy7zWyMotVZ2fkSmYELMrTosPd7vk3y6Ld1m5SqUK2VUpNlA him3nL3NlsZS9cPVHp4tGzzTdssKAMHcSDx5Sz2EaZ0rB4JgCVZzGGxrsODkxGy0Bzo6 GVNmHgF1WvblseS94io0LPzomRYNRkf6C7ioAISi4uJTCgWkvAGNuqY4mzAJnO16BKzD q8YQ== X-Gm-Message-State: AOJu0YwU+OyT9exyO5cKMh80Ml9KRcvkxj/D6c1VcMebDwFj/qcNgEGd Y/kSdWq6t1jAGUjOIcvuKmm2DGHTgZNlI3XJFl5+3SF8+Y9UjgXqwGuuBc83EVd/5teaJBtbHtY 7EboYq0RKleQT4lAsCj/88pwaoZAD7TEjxB5m X-Gm-Gg: AeBDiev6YBP29l9K+SJyTYj1hpWtCzLloKLEChHbRKQRP7q66XB2Lbyi/7fcFSeELJp sPw0psFGh3ZZSFTrQfUdeWlQVgMKYABnLqxgdRmKHXITOoQsJd2cYyfzGCITy2mZiy+flS20ybJ 8N8AFL0oHB+jsa08S0QSLgZG6FuM4crAuDMILIY9p85Ue5eg4K4RE7qXjGt28chKre6gq6FlHKQ RPWtW62V8mvpgetPRzMQzmyRvba13Sd5cYHPtWxktOmv7sW1F1xSYP0ba16EdeffVopwMXZ4MWe SvwUjA== X-Received: by 2002:a05:690c:9:b0:79b:ccb6:a837 with SMTP id 00721157ae682-7af6ee461e0mr33466597b3.5.1775830401935; Fri, 10 Apr 2026 07:13:21 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Ayush Tiwari Date: Fri, 10 Apr 2026 19:43:10 +0530 X-Gm-Features: AQROBzB0blP5Pv50hiODQwOGsFNSfLBYWkmBZORv9wlaMzOSdiMJ4mY1P-SeBQY Message-ID: Subject: Re: [PATCH] Fix NULL dereference in pg_get_database_ddl() To: pgsql-hackers@postgresql.org Content-Type: multipart/mixed; boundary="0000000000004a77a8064f1bbc10" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000004a77a8064f1bbc10 Content-Type: multipart/alternative; boundary="0000000000004a77a4064f1bbc0e" --0000000000004a77a4064f1bbc0e Content-Type: text/plain; charset="UTF-8" On Fri, 10 Apr 2026 at 19:27, Ayush Tiwari wrote: > Hi, > > pg_get_database_ddl_internal() can dereference a NULL pointer when > pg_database.dattablespace points to a tablespace OID that no longer > exists. > > The immediate issue is that get_tablespace_name() may return NULL, but > the result is passed directly to pg_strcasecmp(): > > spcname = get_tablespace_name(dbform->dattablespace); > if (pg_strcasecmp(spcname, "pg_default") != 0) > ... > > That leads to a backend crash. I reproduced it on current master as a > SIGSEGV with crash recovery. > > This function was introduced by commit a4f774cf1c7. > > Deterministic reproduction: > > CREATE DATABASE regression_testdb; > SET allow_system_table_mods = on; > UPDATE pg_database > SET dattablespace = 99999 > WHERE datname = 'regression_testdb'; > RESET allow_system_table_mods; > > SELECT * FROM pg_get_database_ddl('regression_testdb'); > > The attached patch fixes this by checking for NULL before calling > pg_strcasecmp(). In that case, pg_get_database_ddl() simply omits the > TABLESPACE clause. > > I also added a regression test in database_ddl.sql that exercises this > case by setting dattablespace to a non-existent OID and verifying that > the function returns successfully. > > Patch attached. Please review and let me know if it needs any edits. > Thanks! > > Regards, > Ayush Tiwari > Re-attaching patch without trailing white-space Regards, Ayush --0000000000004a77a4064f1bbc0e Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable


On Fri, 10 Apr = 2026 at 19:27, Ayush Tiwari <ayushtiwari.slg01@gmail.com> wrote:
Hi,

pg_get_databas= e_ddl_internal() can dereference a NULL pointer when pg_database.dattablesp= ace points to a tablespace OID that no longer
exists.

The immedia= te issue is that get_tablespace_name() may return NULL, but
the result i= s passed directly to pg_strcasecmp():

spcname =3D get_tablespace_na= me(dbform->dattablespace);
if (pg_strcasecmp(spcname, "pg_defau= lt") !=3D 0)
...

That leads to a backend crash.=C2=A0 I re= produced it on current master as a
SIGSEGV with crash recovery.

T= his function was introduced by commit a4f774cf1c7.

Deterministic rep= roduction:

CREATE DATABASE regression_testdb;
SET allow_system_= table_mods =3D on;
UPDATE pg_database
=C2=A0SET dattablespace =3D = 99999
=C2=A0WHERE datname =3D 'regression_testdb';
RESET a= llow_system_table_mods;

SELECT * FROM pg_get_database_ddl('regr= ession_testdb');

The attached patch fixes this by checking for N= ULL before calling
pg_strcasecmp().=C2=A0 In that case, pg_get_database_= ddl() simply omits the
TABLESPACE clause.

I also added a regressi= on test in database_ddl.sql that exercises this
case by setting dattable= space to a non-existent OID and verifying that
the function returns succ= essfully.

Patch attached. Please review and let me know if it needs = any edits. Thanks!

Regards,
Ayush Tiwari
<= br>
Re-attaching patch without trailing white-space

Regards,
Ayush=C2=A0
--0000000000004a77a4064f1bbc0e-- --0000000000004a77a8064f1bbc10 Content-Type: application/octet-stream; name="0001-Fix-NULL-dereference-in-pg_get_database_ddl.patch" Content-Disposition: attachment; filename="0001-Fix-NULL-dereference-in-pg_get_database_ddl.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnszivn40 RnJvbSAyZDM1OGFjNDhjOTQ1MjA2Mjg2ODJkZjFmMzY2NjFmZDI0MjkyZTc2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBeXVzaCBUaXdhcmkgPGF5dGl3YXJpQG1pY3Jvc29mdC5jb20+ CkRhdGU6IEZyaSwgMTAgQXByIDIwMjYgMTk6MTc6MTIgKzA1MzAKU3ViamVjdDogW1BBVENIXSBG aXggTlVMTCBkZXJlZmVyZW5jZSBpbiBwZ19nZXRfZGF0YWJhc2VfZGRsKCkKCnBnX2dldF9kYXRh YmFzZV9kZGxfaW50ZXJuYWwoKSBjYW4gZGVyZWZlcmVuY2UgYSBOVUxMIHBvaW50ZXIgd2hlbgpw Z19kYXRhYmFzZS5kYXR0YWJsZXNwYWNlIHBvaW50cyB0byBhIHRhYmxlc3BhY2UgT0lEIHRoYXQg bm8gbG9uZ2VyCmV4aXN0cy4KClRoZSBpbW1lZGlhdGUgaXNzdWUgaXMgdGhhdCBnZXRfdGFibGVz cGFjZV9uYW1lKCkgbWF5IHJldHVybiBOVUxMLCBidXQKdGhlIHJlc3VsdCBpcyBwYXNzZWQgZGly ZWN0bHkgdG8gcGdfc3RyY2FzZWNtcCgpOgoKICAgIHNwY25hbWUgPSBnZXRfdGFibGVzcGFjZV9u YW1lKGRiZm9ybS0+ZGF0dGFibGVzcGFjZSk7CiAgICBpZiAocGdfc3RyY2FzZWNtcChzcGNuYW1l LCAicGdfZGVmYXVsdCIpICE9IDApCiAgICAgICAgLi4uCgpUaGF0IGxlYWRzIHRvIGEgYmFja2Vu ZCBjcmFzaCAoU0lHU0VHVikuCgpUaGlzIGZ1bmN0aW9uIHdhcyBpbnRyb2R1Y2VkIGJ5IGNvbW1p dCBhNGY3NzRjZjFjNy4KClRoZSBwYXRjaCBmaXhlcyB0aGlzIGJ5IGNoZWNraW5nIGZvciBOVUxM IGJlZm9yZSBjYWxsaW5nCnBnX3N0cmNhc2VjbXAoKS4gSW4gdGhhdCBjYXNlLCBwZ19nZXRfZGF0 YWJhc2VfZGRsKCkgc2ltcGx5IG9taXRzIHRoZQpUQUJMRVNQQUNFIGNsYXVzZS4KCkEgcmVncmVz c2lvbiB0ZXN0IGlzIGFkZGVkIGluIGRhdGFiYXNlX2RkbC5zcWwgdGhhdCBleGVyY2lzZXMgdGhp cwpjYXNlIGJ5IHNldHRpbmcgZGF0dGFibGVzcGFjZSB0byBhIG5vbi1leGlzdGVudCBPSUQgYW5k IHZlcmlmeWluZyB0aGF0CnRoZSBmdW5jdGlvbiByZXR1cm5zIHN1Y2Nlc3NmdWxseSB3aXRob3V0 IGNyYXNoaW5nLgotLS0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9kZGx1dGlscy5jICAgICAgICAg ICB8ICAyICstCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2RhdGFiYXNlX2RkbC5vdXQgfCAy MiArKysrKysrKysrKysrKysrKysrKysrCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9kYXRhYmFzZV9k ZGwuc3FsICAgICAgfCAxNyArKysrKysrKysrKysrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCA0MCBp bnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L2RkbHV0aWxzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvZGRsdXRpbHMuYwppbmRl eCBiMTZjMjc3ZDAwMC4uYzU4ODViMTg5NTggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC9kZGx1dGlscy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9kZGx1dGlscy5jCkBA IC05NzYsNyArOTc2LDcgQEAgcGdfZ2V0X2RhdGFiYXNlX2RkbF9pbnRlcm5hbChPaWQgZGJpZCwg Ym9vbCBwcmV0dHksCiAJewogCQljaGFyCSAgICpzcGNuYW1lID0gZ2V0X3RhYmxlc3BhY2VfbmFt ZShkYmZvcm0tPmRhdHRhYmxlc3BhY2UpOwogCi0JCWlmIChwZ19zdHJjYXNlY21wKHNwY25hbWUs ICJwZ19kZWZhdWx0IikgIT0gMCkKKwkJaWYgKHNwY25hbWUgIT0gTlVMTCAmJiBwZ19zdHJjYXNl Y21wKHNwY25hbWUsICJwZ19kZWZhdWx0IikgIT0gMCkKIAkJCWFwcGVuZF9kZGxfb3B0aW9uKCZi dWYsIHByZXR0eSwgNCwgIlRBQkxFU1BBQ0UgPSAlcyIsCiAJCQkJCQkJICBxdW90ZV9pZGVudGlm aWVyKHNwY25hbWUpKTsKIAl9CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L2RhdGFiYXNlX2RkbC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2RhdGFiYXNlX2Rk bC5vdXQKaW5kZXggOTc2NTdlNTJjZmEuLjAwZWMxYmRjMWY5IDEwMDY0NAotLS0gYS9zcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL2RhdGFiYXNlX2RkbC5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9kYXRhYmFzZV9kZGwub3V0CkBAIC04Myw2ICs4MywyOCBAQCBFUlJPUjogIHBl cm1pc3Npb24gZGVuaWVkIGZvciBkYXRhYmFzZSByZWdyZXNzaW9uX2RhdGFiYXNlX2RkbAogUkVT RVQgUk9MRTsKIEdSQU5UIENPTk5FQ1QgT04gREFUQUJBU0UgcmVncmVzc2lvbl9kYXRhYmFzZV9k ZGwgVE8gUFVCTElDOwogRFJPUCBST0xFIHJlZ3Jlc3NfZGJfZGRsX25vYWNjZXNzOworLS0gVGVz dCBmb3IgZHJvcHBlZCB0YWJsZXNwYWNlOiBkYXR0YWJsZXNwYWNlIHBvaW50aW5nIHRvIGEgbm9u LWV4aXN0ZW50IE9JRAorLS0gc2hvdWxkIG5vdCBjcmFzaCAoc2VlIGNvbW1pdCBmaXhpbmcgTlVM TCBkZXJlZiBpbiBwZ19nZXRfZGF0YWJhc2VfZGRsX2ludGVybmFsKQorQ1JFQVRFIERBVEFCQVNF IHJlZ3Jlc3Npb25fZGF0YWJhc2VfZGRsMgorICBFTkNPRElORyB1dGY4IExDX0NPTExBVEUgIkMi IExDX0NUWVBFICJDIiBURU1QTEFURSB0ZW1wbGF0ZTAKKyAgT1dORVIgcmVncmVzc19kYXRkYmE7 CitTRVQgYWxsb3dfc3lzdGVtX3RhYmxlX21vZHMgPSBvbjsKK1VQREFURSBwZ19kYXRhYmFzZSBT RVQgZGF0dGFibGVzcGFjZSA9IDk5OTk5CisgICAgV0hFUkUgZGF0bmFtZSA9ICdyZWdyZXNzaW9u X2RhdGFiYXNlX2RkbDInOworUkVTRVQgYWxsb3dfc3lzdGVtX3RhYmxlX21vZHM7CitTRUxFQ1Qg ZGRsX2ZpbHRlcihwZ19nZXRfZGF0YWJhc2VfZGRsKSBGUk9NIHBnX2dldF9kYXRhYmFzZV9kZGwo J3JlZ3Jlc3Npb25fZGF0YWJhc2VfZGRsMicpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBkZGxfZmlsdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgREFUQUJBU0UgcmVn cmVzc2lvbl9kYXRhYmFzZV9kZGwyIFdJVEggVEVNUExBVEUgPSB0ZW1wbGF0ZTAgRU5DT0RJTkcg PSAnVVRGOCc7CisgQUxURVIgREFUQUJBU0UgcmVncmVzc2lvbl9kYXRhYmFzZV9kZGwyIE9XTkVS IFRPIHJlZ3Jlc3NfZGF0ZGJhOworKDIgcm93cykKKworU0VUIGFsbG93X3N5c3RlbV90YWJsZV9t b2RzID0gb247CitVUERBVEUgcGdfZGF0YWJhc2UgU0VUIGRhdHRhYmxlc3BhY2UgPQorICAoU0VM RUNUIG9pZCBGUk9NIHBnX3RhYmxlc3BhY2UgV0hFUkUgc3BjbmFtZSA9ICdwZ19kZWZhdWx0JykK KyAgICBXSEVSRSBkYXRuYW1lID0gJ3JlZ3Jlc3Npb25fZGF0YWJhc2VfZGRsMic7CitSRVNFVCBh bGxvd19zeXN0ZW1fdGFibGVfbW9kczsKK0RST1AgREFUQUJBU0UgcmVncmVzc2lvbl9kYXRhYmFz ZV9kZGwyOwogRFJPUCBEQVRBQkFTRSByZWdyZXNzaW9uX2RhdGFiYXNlX2RkbDsKIERST1AgRlVO Q1RJT04gZGRsX2ZpbHRlcih0ZXh0KTsKIERST1AgUk9MRSByZWdyZXNzX2RhdGRiYTsKZGlmZiAt LWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2RhdGFiYXNlX2RkbC5zcWwgYi9zcmMvdGVzdC9y ZWdyZXNzL3NxbC9kYXRhYmFzZV9kZGwuc3FsCmluZGV4IDg5NzUzYWM2NDExLi4wNzkyYTRhOWYz NSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZGF0YWJhc2VfZGRsLnNxbAorKysg Yi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9kYXRhYmFzZV9kZGwuc3FsCkBAIC02MSw2ICs2MSwyMyBA QCBSRVNFVCBST0xFOwogR1JBTlQgQ09OTkVDVCBPTiBEQVRBQkFTRSByZWdyZXNzaW9uX2RhdGFi YXNlX2RkbCBUTyBQVUJMSUM7CiBEUk9QIFJPTEUgcmVncmVzc19kYl9kZGxfbm9hY2Nlc3M7CiAK Ky0tIFRlc3QgZm9yIGRyb3BwZWQgdGFibGVzcGFjZTogZGF0dGFibGVzcGFjZSBwb2ludGluZyB0 byBhIG5vbi1leGlzdGVudCBPSUQKKy0tIHNob3VsZCBub3QgY3Jhc2ggKHNlZSBjb21taXQgZml4 aW5nIE5VTEwgZGVyZWYgaW4gcGdfZ2V0X2RhdGFiYXNlX2RkbF9pbnRlcm5hbCkKK0NSRUFURSBE QVRBQkFTRSByZWdyZXNzaW9uX2RhdGFiYXNlX2RkbDIKKyAgRU5DT0RJTkcgdXRmOCBMQ19DT0xM QVRFICJDIiBMQ19DVFlQRSAiQyIgVEVNUExBVEUgdGVtcGxhdGUwCisgIE9XTkVSIHJlZ3Jlc3Nf ZGF0ZGJhOworU0VUIGFsbG93X3N5c3RlbV90YWJsZV9tb2RzID0gb247CitVUERBVEUgcGdfZGF0 YWJhc2UgU0VUIGRhdHRhYmxlc3BhY2UgPSA5OTk5OQorICAgIFdIRVJFIGRhdG5hbWUgPSAncmVn cmVzc2lvbl9kYXRhYmFzZV9kZGwyJzsKK1JFU0VUIGFsbG93X3N5c3RlbV90YWJsZV9tb2RzOwor U0VMRUNUIGRkbF9maWx0ZXIocGdfZ2V0X2RhdGFiYXNlX2RkbCkgRlJPTSBwZ19nZXRfZGF0YWJh c2VfZGRsKCdyZWdyZXNzaW9uX2RhdGFiYXNlX2RkbDInKTsKK1NFVCBhbGxvd19zeXN0ZW1fdGFi bGVfbW9kcyA9IG9uOworVVBEQVRFIHBnX2RhdGFiYXNlIFNFVCBkYXR0YWJsZXNwYWNlID0KKyAg KFNFTEVDVCBvaWQgRlJPTSBwZ190YWJsZXNwYWNlIFdIRVJFIHNwY25hbWUgPSAncGdfZGVmYXVs dCcpCisgICAgV0hFUkUgZGF0bmFtZSA9ICdyZWdyZXNzaW9uX2RhdGFiYXNlX2RkbDInOworUkVT RVQgYWxsb3dfc3lzdGVtX3RhYmxlX21vZHM7CitEUk9QIERBVEFCQVNFIHJlZ3Jlc3Npb25fZGF0 YWJhc2VfZGRsMjsKKwogRFJPUCBEQVRBQkFTRSByZWdyZXNzaW9uX2RhdGFiYXNlX2RkbDsKIERS T1AgRlVOQ1RJT04gZGRsX2ZpbHRlcih0ZXh0KTsKIERST1AgUk9MRSByZWdyZXNzX2RhdGRiYTsK LS0gCjIuMzQuMQoK --0000000000004a77a8064f1bbc10--