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 1w61pK-003sJY-2W for pgsql-hackers@arkaria.postgresql.org; Fri, 27 Mar 2026 07:41:55 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w61pJ-008AB5-0r for pgsql-hackers@arkaria.postgresql.org; Fri, 27 Mar 2026 07:41:53 +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 1w61pI-008AAw-2y for pgsql-hackers@lists.postgresql.org; Fri, 27 Mar 2026 07:41:53 +0000 Received: from mail-pf1-x436.google.com ([2607:f8b0:4864:20::436]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w61pG-00000001RJD-1sYI for pgsql-hackers@postgresql.org; Fri, 27 Mar 2026 07:41:52 +0000 Received: by mail-pf1-x436.google.com with SMTP id d2e1a72fcca58-824bcb2011bso239925b3a.3 for ; Fri, 27 Mar 2026 00:41:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1774597309; cv=none; d=google.com; s=arc-20240605; b=JYrT3Dw+LFAcfCFN6X3RNxSrbdcMZRQZHboY7nNBl9NMagbN5LenLzxSiNqxG4NgCA WrwqBz4l2L00vrzW4ks8nEczNaCQjAlDFwS2ugIpgACMK740B6d/wEyYfnVXw3WKBYL4 zlvqsaCHdnbeIP4Nx4BlhQeLbSwTFazTbbIDA10y+8rGDHIMaQYCkf+NUpj1B74ER96y zpxr7EilClu1SzM0gJpiRMqXhmhe42VUXQDfkKekBPM8wyi8/DQByFFYeAUa7P3y4lJk C8D2inzqhpoRL4rbckX79JzYFovstLNuPdoollCwUsG1Q4WtGfHmcpC7Vn2WPEZa+u5a BqQA== 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:in-reply-to:references :mime-version:dkim-signature; bh=6Qa6ys3+i0lKW+iqH7IIBOzHqYMVFlBEZbWPLS6UN9c=; fh=F0QZqiEmFa4epNcEdb4BNAvTdz0HCUNYQdfDC90PlI8=; b=IjpOEiwkbLANaY6eJjhxbyV9fSqWkBje1WFRFsvejsR1gu6vJ04I0qy/BAc2hV4oEE v6TRHfsKDU2GNNq9MFFVunh+mAJAmoo4v+Lv8KMVO5qNke4TwtRxHFzR5cgrisutcOeJ xL0RPAn85Pv96uorwVnZtrXCoGWxO23EzRbi9sRgyyhSx0oxJYnwFWplhN5gmXB+IFo5 eiKVCEiCgft8nDgAfbQmIND/tJgQGwubZCVtRl4frJcZxmoWRRI5i6t9Hd07H7ry8i61 VqzHPLx72Cyoh9BLQyT83simNA/M/yDBi78/lxAaQR0XH4g9ZUiu7mEen09u0+z1muS8 kCTg==; 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=1774597309; x=1775202109; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=6Qa6ys3+i0lKW+iqH7IIBOzHqYMVFlBEZbWPLS6UN9c=; b=OAT6iilTfBPlJ4qitonjJWPN23tGoxH4y6KfdVUge1bF4gkypzwRYW/Dpv0ZMjNTqB kCmDxpAT7IuZw2FhIZXZlSUil6VIsW8wiJLB8d1twBC0CLAoMAfKwlRu4RfWSY63hWvp b70uTu8QJU9QtlGTN6jIKH9Eui0w9rWPCqF4VL5ZeGZCzdsx0fxffIsDZkA9ra1UYBxq TV+2gY95L4HObkY463E+fk2mcfHman3+S/m5B55WF1kInOakYFfS+Bjcdf5T4y8V1wwH 4FdQ/tL5Ow1DJgkYSblBq3+r8kK/Pngi/yg5+7Zf+P2hlhivZS7nnxkxyJDk1H9NAEsV mspw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774597309; x=1775202109; h=cc: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=6Qa6ys3+i0lKW+iqH7IIBOzHqYMVFlBEZbWPLS6UN9c=; b=SI+qHlkc4DU+pz2JXzBgO+77WHMTNXO0OLet7EJ8269c9BAVcqa3xhpAyItazPm2Qv y0dI49lYbpL7Ga+8HM8qkLdHNh6Gy6eWn71d2JXj8svwk5BHr6vpxSe0IIgqKqmcBRsV 5Syv0ZLtFygI4IIlzRLaBSmi3dgrP2Lm86MG5bFpgNLsWIq1B873vLFekDtCqU1FwA4m 5SiNV6+mQNCYqSlb88mNvq4yoE4XdJInndfde6hHRhs6zgAFkv8aqYntogsCLlAsNtQ/ y8yShIQ0lZdk1Rji7grKVow3PT7ANvfa500rZtY3V6mu70Y4KAFnI3GXbvpg7Fg+H//d mqUg== X-Gm-Message-State: AOJu0YzX55+j0Kj1yWm/i+38VOOGDcwwX3tUCHHN+/WPEHcItt5alvVB kqSfml4f6qdaBgp6TFs7n5y4sH0dZ7Cp1IBAaElUHogqOBEGRPpGludcMaDemGogtBaSmxrJn57 CBdIxY+HSxTec/FWqccH9CZgKsn7S09g= X-Gm-Gg: ATEYQzyfYKmNlJLLazKXBSUk0P6fsh8o6jM3tVv9tIhWT+bcUtJf9BfWJ6Eu4tfBPJh h67xtvJDTI5my/E4FGo7G7TY2wIpA72o64UfRUhsy9eoAAryFjlKrySQy7F2QtfnBXnpUwLy9Wn bOc9RN6k43qmp+z9d2k0xGZzrdfRezmDPGEXPX/j8yQlPEiNA7OYoPtfMaj2fvpGb8nJRw8aD+/ 24tl9XnAQK8mrpMYIHAL2n/lfwk6mw3aA0WPy2Kw3r8azDJQ5vmRWIM+H09LW4WpQ+X2YVwwDmP /GRfh42f6T/UUdtuYou147J+JDgD7dCBUrr0kAlwWFLcYbY3DAo= X-Received: by 2002:a17:90a:fb51:b0:35c:30a8:31a with SMTP id 98e67ed59e1d1-35c30a80981mr633866a91.0.1774597308464; Fri, 27 Mar 2026 00:41:48 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Yasuo Honda Date: Fri, 27 Mar 2026 16:41:36 +0900 X-Gm-Features: AQROBzBNCxtln63kFmq8hzpCirQauuBP2NrTPklFgKEPsuPBAvZH1XKXl8NZUCI Message-ID: Subject: Re: [PATCH] Fix unexpected loss of DEFERRABLE property after toggling NOT ENFORCED / ENFORCED To: Fujii Masao Cc: PostgreSQL-development Content-Type: multipart/mixed; boundary="00000000000030da27064dfca298" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000030da27064dfca298 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable (Resending to the list, as my previous reply went to the sender only.) Thanks for the comment. > Regarding the regression test, would it be better to verify not only cata= log state (e.g., pg_trigger) but also the actual behavior? Agreed. In addition to inspecting pg_trigger contents, I've added test cases that verify the actual runtime behavior of deferred constraints. I've also covered INITIALLY IMMEDIATE alongside INITIALLY DEFERRED. -- Yasuo Honda On Tue, Mar 24, 2026 at 3:30=E2=80=AFPM Fujii Masao = wrote: > > On Fri, Feb 27, 2026 at 6:51=E2=80=AFPM Yasuo Honda wrote: > > > > Hi, > > > > I have encountered an unexpected behavior where the DEFERRABLE and > > INITIALLY DEFERRED properties of foreign keys are lost after toggling > > them from NOT ENFORCED to ENFORCED. > > > > Background > > > > In the Ruby on Rails framework, there is a built-in mechanism to > > temporarily bypass foreign key checks while loading test data. > > Currently, this is implemented using: ALTER TABLE ... DISABLE TRIGGER > > ALL; ALTER TABLE ... ENABLE TRIGGER ALL; > > > > However, this requires superuser privileges. With the newly introduced > > support for "NOT ENFORCED" foreign keys in PostgreSQL 18, I am > > interested in switching to: ALTER TABLE ... ALTER CONSTRAINT ... NOT > > ENFORCED; ALTER TABLE ... ALTER CONSTRAINT ... ENFORCED; > > > > This would allow the operation to be performed by the table owner > > without superuser rights. However, I discovered that switching the > > state back to ENFORCED unexpectedly strips away the DEFERRABLE > > property. > > > > Problem > > > > When re-enforcing a constraint, there is a discrepancy between the > > constraint definition and its underlying triggers. > > While the flags in pg_constraint remain correct, the corresponding > > triggers in pg_trigger (tgdeferrable and tginitdeferred) are reset to > > defaults ('f') when they are reconstructed during the ENFORCED > > operation. > > > > I have attached a reproduction SQL script that demonstrates this by > > comparing the values in pg_constraint and pg_trigger. In the current > > PostgreSQL 18.3, you can see that the triggers lose their > > deferrability even though the constraint itself is still defined as > > DEFERRABLE. This causes "SET CONSTRAINTS ... DEFERRED" to fail. > > > > After Patch > > > > * The tgdeferrable and tginitdeferred flags in pg_trigger are > > correctly preserved to match pg_constraint after the toggle, and > > deferred execution works as expected. > > > > I've attached the reproduction SQL script and a patch to fix this in > > src/backend/commands/tablecmds.c. The patch and reproduction SQL > > script were developed with the assistance of Claude Code. I have > > reviewed and verified the code myself. > > > > Any feedback is appreciated. > > Thanks for reporting the issue and providing a patch! > > I was able to reproduce the issue on the master. > > The patch looks good overall, but since I'm not very familiar with this a= rea, > I'd like to spend a bit more time reviewing the changes in detail. > > Regarding the regression test, would it be better to verify not only cata= log > state (e.g., pg_trigger) but also the actual behavior? For example, we co= uld > check that a foreign key violation is not raised immediately on INSERT, > but instead at COMMIT even after ALTER CONSTRAINT ENFORCED: > > ALTER TABLE ... ALTER CONSTRAINT ... NOT ENFORCED; > ALTER TABLE ... ALTER CONSTRAINT ... ENFORCED; > BEGIN; > INSERT INTO t VALUES (1); > COMMIT; > > In this case, the foreign key violation should be reported at COMMIT, > even after ALTER CONSTRAINT ... ENFORCED. > > Regards, > > -- > Fujii Masao --00000000000030da27064dfca298 Content-Type: application/octet-stream; name="v2-Restore-tgdeferrable-and-tginitdeferred-after-NOT.patch" Content-Disposition: attachment; filename="v2-Restore-tgdeferrable-and-tginitdeferred-after-NOT.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn8lbylb0 RnJvbSA5NGM2NmRhNTZhMGQ2NzBjOWZhYzk2ZWQzZmExY2MzNTllYjZhM2M1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBZYXN1byBIb25kYSA8eWFzdW8uaG9uZGFAZ21haWwuY29tPgpE YXRlOiBUaHUsIDI2IE1hciAyMDI2IDA4OjQwOjEyICswOTAwClN1YmplY3Q6IFtQQVRDSCB2Ml0g UmVzdG9yZSB0Z2RlZmVycmFibGUgYW5kIHRnaW5pdGRlZmVycmVkIGFmdGVyIE5PVCBFTkZPUkNF RAogdGhlbiBFTkZPUkNFRAoKV2hlbiB0b2dnbGluZyBhIGZvcmVpZ24ga2V5IGNvbnN0cmFpbnQg ZnJvbSBOT1QgRU5GT1JDRUQgdG8gRU5GT1JDRUQsCnRoZSBkZWZlcnJhYmxlIGFuZCBpbml0ZGVm ZXJyZWQgZmxhZ3Mgd2VyZSBub3QgY29waWVkIGZyb20gdGhlIGV4aXN0aW5nCmNvbnN0cmFpbnQg dG8gdGhlIG5ldyB0cmlnZ2VyIHN0cnVjdHVyZSwgY2F1c2luZyB0aGVtIHRvIGJlIGxvc3QuCgpN ZXNzYWdlLUlkOiBDQUttT1VUbXMybmt4RVpEZGNyc2pxNVAzYjJMX1BSMjY2SHY4a1c1cEFOd21W YVJKSlFAbWFpbC5nbWFpbC5jb20KLS0tCiBzcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMu YyAgICAgICAgICB8ICAyICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZm9yZWlnbl9rZXku b3V0IHwgNTggKysrKysrKysrKysrKysrKysrKysrKysKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2Zv cmVpZ25fa2V5LnNxbCAgICAgIHwgMzYgKysrKysrKysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwg OTYgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxl Y21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKaW5kZXggYzY5YzEyZGMw MTQuLmRkMDBlMzZjNjlkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNt ZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYwpAQCAtMTI1NTgsNiAr MTI1NTgsOCBAQCBBVEV4ZWNBbHRlckZLQ29uc3RyRW5mb3JjZWFiaWxpdHkoTGlzdCAqKndxdWV1 ZSwgQVRBbHRlckNvbnN0cmFpbnQgKmNtZGNvbiwKIAkJZmtjb25zdHJhaW50LT5ma19tYXRjaHR5 cGUgPSBjdXJyY29uLT5jb25mbWF0Y2h0eXBlOwogCQlma2NvbnN0cmFpbnQtPmZrX3VwZF9hY3Rp b24gPSBjdXJyY29uLT5jb25mdXBkdHlwZTsKIAkJZmtjb25zdHJhaW50LT5ma19kZWxfYWN0aW9u ID0gY3VycmNvbi0+Y29uZmRlbHR5cGU7CisJCWZrY29uc3RyYWludC0+ZGVmZXJyYWJsZSA9IGN1 cnJjb24tPmNvbmRlZmVycmFibGU7CisJCWZrY29uc3RyYWludC0+aW5pdGRlZmVycmVkID0gY3Vy cmNvbi0+Y29uZGVmZXJyZWQ7CiAKIAkJLyogQ3JlYXRlIHJlZmVyZW5jZWQgdHJpZ2dlcnMgKi8K IAkJaWYgKGN1cnJjb24tPmNvbnJlbGlkID09IGZrcmVsaWQpCmRpZmYgLS1naXQgYS9zcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL2ZvcmVpZ25fa2V5Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvZm9yZWlnbl9rZXkub3V0CmluZGV4IDlhZTRkYmYxYjBhLi40YWI4ZWQ2M2ZmNCAxMDA2 NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9mb3JlaWduX2tleS5vdXQKKysrIGIv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9mb3JlaWduX2tleS5vdXQKQEAgLTEzNDksNiArMTM0 OSw2NCBAQCBVUERBVEUgcGt0YWJsZSBTRVQgaWQgPSAxMCBXSEVSRSBpZCA9IDU7CiAtLSBkb2Vz bid0IG1hdGNoIFBLLCBidXQgbm8gZXJyb3IuCiBJTlNFUlQgSU5UTyBma3RhYmxlIFZBTFVFUyAo MCwgMjApOwogUk9MTEJBQ0s7CistLSB2ZXJpZnkgdGhhdCB0Z2RlZmVycmFibGUvdGdpbml0ZGVm ZXJyZWQgYXJlIHByZXNlcnZlZCBhZnRlciBOT1QgRU5GT1JDRUQgLT4gRU5GT1JDRUQKK0FMVEVS IFRBQkxFIEZLVEFCTEUgQUxURVIgQ09OU1RSQUlOVCBma3RhYmxlX2ZrX2ZrZXkgREVGRVJSQUJM RSBJTklUSUFMTFkgREVGRVJSRUQ7CitBTFRFUiBUQUJMRSBGS1RBQkxFIEFMVEVSIENPTlNUUkFJ TlQgZmt0YWJsZV9ma19ma2V5IE5PVCBFTkZPUkNFRDsKK0FMVEVSIFRBQkxFIEZLVEFCTEUgQUxU RVIgQ09OU1RSQUlOVCBma3RhYmxlX2ZrX2ZrZXkgRU5GT1JDRUQ7CitTRUxFQ1QgdGdkZWZlcnJh YmxlLCB0Z2luaXRkZWZlcnJlZCBGUk9NIHBnX3RyaWdnZXIKK1dIRVJFIHRnY29uc3RyYWludCA9 IChTRUxFQ1Qgb2lkIEZST00gcGdfY29uc3RyYWludAorICAgICAgICAgICAgICAgICAgICAgIFdI RVJFIGNvbnJlbGlkID0gJ2ZrdGFibGUnOjpyZWdjbGFzcworICAgICAgICAgICAgICAgICAgICAg IEFORCBjb25uYW1lID0gJ2ZrdGFibGVfZmtfZmtleScpOworIHRnZGVmZXJyYWJsZSB8IHRnaW5p dGRlZmVycmVkIAorLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAg ICB8IHQKKyB0ICAgICAgICAgICAgfCB0CisgdCAgICAgICAgICAgIHwgdAorIHQgICAgICAgICAg ICB8IHQKKyg0IHJvd3MpCisKKy0tIHZlcmlmeSBhY3R1YWwgYmVoYXZpb3I6IHZpb2xhdGlvbiBz aG91bGQgYmUgZGVmZXJyZWQgdG8gZW5kIG9mIHRyYW5zYWN0aW9uCitCRUdJTjsKKy0tIGRvZXNu J3QgbWF0Y2ggUEssIGJ1dCBubyBlcnJvciB5ZXQgKElOSVRJQUxMWSBERUZFUlJFRCkKK0lOU0VS VCBJTlRPIGZrdGFibGUgVkFMVUVTICgyLCAyMCk7CistLSBzaG91bGQgY2F0Y2ggZXJyb3IgZnJv bSBJTlNFUlQgYXQgY29tbWl0CitDT01NSVQ7CitFUlJPUjogIGluc2VydCBvciB1cGRhdGUgb24g dGFibGUgImZrdGFibGUiIHZpb2xhdGVzIGZvcmVpZ24ga2V5IGNvbnN0cmFpbnQgImZrdGFibGVf ZmtfZmtleSIKK0RFVEFJTDogIEtleSAoZmspPSgyMCkgaXMgbm90IHByZXNlbnQgaW4gdGFibGUg InBrdGFibGUiLgorLS0gcmVzZXQKK0FMVEVSIFRBQkxFIEZLVEFCTEUgQUxURVIgQ09OU1RSQUlO VCBma3RhYmxlX2ZrX2ZrZXkgTk9UIERFRkVSUkFCTEU7CistLSBzYW1lLCBidXQgd2l0aCBERUZF UlJBQkxFIElOSVRJQUxMWSBJTU1FRElBVEU6IHRnaW5pdGRlZmVycmVkIHNob3VsZCBiZSBmYWxz ZQorQUxURVIgVEFCTEUgRktUQUJMRSBBTFRFUiBDT05TVFJBSU5UIGZrdGFibGVfZmtfZmtleSBE RUZFUlJBQkxFIElOSVRJQUxMWSBJTU1FRElBVEU7CitBTFRFUiBUQUJMRSBGS1RBQkxFIEFMVEVS IENPTlNUUkFJTlQgZmt0YWJsZV9ma19ma2V5IE5PVCBFTkZPUkNFRDsKK0FMVEVSIFRBQkxFIEZL VEFCTEUgQUxURVIgQ09OU1RSQUlOVCBma3RhYmxlX2ZrX2ZrZXkgRU5GT1JDRUQ7CitTRUxFQ1Qg dGdkZWZlcnJhYmxlLCB0Z2luaXRkZWZlcnJlZCBGUk9NIHBnX3RyaWdnZXIKK1dIRVJFIHRnY29u c3RyYWludCA9IChTRUxFQ1Qgb2lkIEZST00gcGdfY29uc3RyYWludAorICAgICAgICAgICAgICAg ICAgICAgIFdIRVJFIGNvbnJlbGlkID0gJ2ZrdGFibGUnOjpyZWdjbGFzcworICAgICAgICAgICAg ICAgICAgICAgIEFORCBjb25uYW1lID0gJ2ZrdGFibGVfZmtfZmtleScpOworIHRnZGVmZXJyYWJs ZSB8IHRnaW5pdGRlZmVycmVkIAorLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLQorIHQg ICAgICAgICAgICB8IGYKKyB0ICAgICAgICAgICAgfCBmCisgdCAgICAgICAgICAgIHwgZgorIHQg ICAgICAgICAgICB8IGYKKyg0IHJvd3MpCisKKy0tIHZlcmlmeSBhY3R1YWwgYmVoYXZpb3I6IHZp b2xhdGlvbiBzaG91bGQgYmUgY2F1Z2h0IGltbWVkaWF0ZWx5IChJTklUSUFMTFkgSU1NRURJQVRF KQorLS0gZG9lc24ndCBtYXRjaCBQSywgZXJyb3IgYXQgSU5TRVJUIHRpbWUKK0lOU0VSVCBJTlRP IGZrdGFibGUgVkFMVUVTICgyLCAyMCk7CitFUlJPUjogIGluc2VydCBvciB1cGRhdGUgb24gdGFi bGUgImZrdGFibGUiIHZpb2xhdGVzIGZvcmVpZ24ga2V5IGNvbnN0cmFpbnQgImZrdGFibGVfZmtf ZmtleSIKK0RFVEFJTDogIEtleSAoZmspPSgyMCkgaXMgbm90IHByZXNlbnQgaW4gdGFibGUgInBr dGFibGUiLgorLS0gdmVyaWZ5IHRoYXQgU0VUIENPTlNUUkFJTlRTIERFRkVSUkVEIHN0aWxsIHdv cmtzCitCRUdJTjsKK1NFVCBDT05TVFJBSU5UUyBma3RhYmxlX2ZrX2ZrZXkgREVGRVJSRUQ7Cist LSBkb2Vzbid0IG1hdGNoIFBLLCBidXQgbm8gZXJyb3IgeWV0IChleHBsaWNpdGx5IGRlZmVycmVk KQorSU5TRVJUIElOVE8gZmt0YWJsZSBWQUxVRVMgKDIsIDIwKTsKKy0tIHNob3VsZCBjYXRjaCBl cnJvciBmcm9tIElOU0VSVCBhdCBjb21taXQKK0NPTU1JVDsKK0VSUk9SOiAgaW5zZXJ0IG9yIHVw ZGF0ZSBvbiB0YWJsZSAiZmt0YWJsZSIgdmlvbGF0ZXMgZm9yZWlnbiBrZXkgY29uc3RyYWludCAi Zmt0YWJsZV9ma19ma2V5IgorREVUQUlMOiAgS2V5IChmayk9KDIwKSBpcyBub3QgcHJlc2VudCBp biB0YWJsZSAicGt0YWJsZSIuCistLSByZXNldAorQUxURVIgVEFCTEUgRktUQUJMRSBBTFRFUiBD T05TVFJBSU5UIGZrdGFibGVfZmtfZmtleSBOT1QgREVGRVJSQUJMRTsKIC0tIHRyeSBhZGRpdGlv bmFsIHN5bnRheAogQUxURVIgVEFCTEUgZmt0YWJsZSBBTFRFUiBDT05TVFJBSU5UIGZrdGFibGVf ZmtfZmtleSBOT1QgREVGRVJSQUJMRTsKIC0tIGlsbGVnYWwgb3B0aW9ucwpkaWZmIC0tZ2l0IGEv c3JjL3Rlc3QvcmVncmVzcy9zcWwvZm9yZWlnbl9rZXkuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9z cWwvZm9yZWlnbl9rZXkuc3FsCmluZGV4IDNiOGM5NWJmODkzLi5kNWQ2YjlhOGNlZiAxMDA2NDQK LS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZm9yZWlnbl9rZXkuc3FsCisrKyBiL3NyYy90ZXN0 L3JlZ3Jlc3Mvc3FsL2ZvcmVpZ25fa2V5LnNxbApAQCAtMTAyMyw2ICsxMDIzLDQyIEBAIFVQREFU RSBwa3RhYmxlIFNFVCBpZCA9IDEwIFdIRVJFIGlkID0gNTsKIElOU0VSVCBJTlRPIGZrdGFibGUg VkFMVUVTICgwLCAyMCk7CiAKIFJPTExCQUNLOworLS0gdmVyaWZ5IHRoYXQgdGdkZWZlcnJhYmxl L3RnaW5pdGRlZmVycmVkIGFyZSBwcmVzZXJ2ZWQgYWZ0ZXIgTk9UIEVORk9SQ0VEIC0+IEVORk9S Q0VECitBTFRFUiBUQUJMRSBGS1RBQkxFIEFMVEVSIENPTlNUUkFJTlQgZmt0YWJsZV9ma19ma2V5 IERFRkVSUkFCTEUgSU5JVElBTExZIERFRkVSUkVEOworQUxURVIgVEFCTEUgRktUQUJMRSBBTFRF UiBDT05TVFJBSU5UIGZrdGFibGVfZmtfZmtleSBOT1QgRU5GT1JDRUQ7CitBTFRFUiBUQUJMRSBG S1RBQkxFIEFMVEVSIENPTlNUUkFJTlQgZmt0YWJsZV9ma19ma2V5IEVORk9SQ0VEOworU0VMRUNU IHRnZGVmZXJyYWJsZSwgdGdpbml0ZGVmZXJyZWQgRlJPTSBwZ190cmlnZ2VyCitXSEVSRSB0Z2Nv bnN0cmFpbnQgPSAoU0VMRUNUIG9pZCBGUk9NIHBnX2NvbnN0cmFpbnQKKyAgICAgICAgICAgICAg ICAgICAgICBXSEVSRSBjb25yZWxpZCA9ICdma3RhYmxlJzo6cmVnY2xhc3MKKyAgICAgICAgICAg ICAgICAgICAgICBBTkQgY29ubmFtZSA9ICdma3RhYmxlX2ZrX2ZrZXknKTsKKy0tIHZlcmlmeSBh Y3R1YWwgYmVoYXZpb3I6IHZpb2xhdGlvbiBzaG91bGQgYmUgZGVmZXJyZWQgdG8gZW5kIG9mIHRy YW5zYWN0aW9uCitCRUdJTjsKKy0tIGRvZXNuJ3QgbWF0Y2ggUEssIGJ1dCBubyBlcnJvciB5ZXQg KElOSVRJQUxMWSBERUZFUlJFRCkKK0lOU0VSVCBJTlRPIGZrdGFibGUgVkFMVUVTICgyLCAyMCk7 CistLSBzaG91bGQgY2F0Y2ggZXJyb3IgZnJvbSBJTlNFUlQgYXQgY29tbWl0CitDT01NSVQ7Cist LSByZXNldAorQUxURVIgVEFCTEUgRktUQUJMRSBBTFRFUiBDT05TVFJBSU5UIGZrdGFibGVfZmtf ZmtleSBOT1QgREVGRVJSQUJMRTsKKy0tIHNhbWUsIGJ1dCB3aXRoIERFRkVSUkFCTEUgSU5JVElB TExZIElNTUVESUFURTogdGdpbml0ZGVmZXJyZWQgc2hvdWxkIGJlIGZhbHNlCitBTFRFUiBUQUJM RSBGS1RBQkxFIEFMVEVSIENPTlNUUkFJTlQgZmt0YWJsZV9ma19ma2V5IERFRkVSUkFCTEUgSU5J VElBTExZIElNTUVESUFURTsKK0FMVEVSIFRBQkxFIEZLVEFCTEUgQUxURVIgQ09OU1RSQUlOVCBm a3RhYmxlX2ZrX2ZrZXkgTk9UIEVORk9SQ0VEOworQUxURVIgVEFCTEUgRktUQUJMRSBBTFRFUiBD T05TVFJBSU5UIGZrdGFibGVfZmtfZmtleSBFTkZPUkNFRDsKK1NFTEVDVCB0Z2RlZmVycmFibGUs IHRnaW5pdGRlZmVycmVkIEZST00gcGdfdHJpZ2dlcgorV0hFUkUgdGdjb25zdHJhaW50ID0gKFNF TEVDVCBvaWQgRlJPTSBwZ19jb25zdHJhaW50CisgICAgICAgICAgICAgICAgICAgICAgV0hFUkUg Y29ucmVsaWQgPSAnZmt0YWJsZSc6OnJlZ2NsYXNzCisgICAgICAgICAgICAgICAgICAgICAgQU5E IGNvbm5hbWUgPSAnZmt0YWJsZV9ma19ma2V5Jyk7CistLSB2ZXJpZnkgYWN0dWFsIGJlaGF2aW9y OiB2aW9sYXRpb24gc2hvdWxkIGJlIGNhdWdodCBpbW1lZGlhdGVseSAoSU5JVElBTExZIElNTUVE SUFURSkKKy0tIGRvZXNuJ3QgbWF0Y2ggUEssIGVycm9yIGF0IElOU0VSVCB0aW1lCitJTlNFUlQg SU5UTyBma3RhYmxlIFZBTFVFUyAoMiwgMjApOworLS0gdmVyaWZ5IHRoYXQgU0VUIENPTlNUUkFJ TlRTIERFRkVSUkVEIHN0aWxsIHdvcmtzCitCRUdJTjsKK1NFVCBDT05TVFJBSU5UUyBma3RhYmxl X2ZrX2ZrZXkgREVGRVJSRUQ7CistLSBkb2Vzbid0IG1hdGNoIFBLLCBidXQgbm8gZXJyb3IgeWV0 IChleHBsaWNpdGx5IGRlZmVycmVkKQorSU5TRVJUIElOVE8gZmt0YWJsZSBWQUxVRVMgKDIsIDIw KTsKKy0tIHNob3VsZCBjYXRjaCBlcnJvciBmcm9tIElOU0VSVCBhdCBjb21taXQKK0NPTU1JVDsK Ky0tIHJlc2V0CitBTFRFUiBUQUJMRSBGS1RBQkxFIEFMVEVSIENPTlNUUkFJTlQgZmt0YWJsZV9m a19ma2V5IE5PVCBERUZFUlJBQkxFOwogCiAtLSB0cnkgYWRkaXRpb25hbCBzeW50YXgKIEFMVEVS IFRBQkxFIGZrdGFibGUgQUxURVIgQ09OU1RSQUlOVCBma3RhYmxlX2ZrX2ZrZXkgTk9UIERFRkVS UkFCTEU7Ci0tIAoyLjUzLjAKCg== --00000000000030da27064dfca298--