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 1wA2k7-0020kg-30 for pgsql-hackers@arkaria.postgresql.org; Tue, 07 Apr 2026 09:29:08 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wA2k6-00GDo7-1J for pgsql-hackers@arkaria.postgresql.org; Tue, 07 Apr 2026 09:29:06 +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 1wA2k5-00GDnz-2Y for pgsql-hackers@lists.postgresql.org; Tue, 07 Apr 2026 09:29:06 +0000 Received: from mail-ua1-x929.google.com ([2607:f8b0:4864:20::929]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wA2k4-000000010Va-1EQz for pgsql-hackers@lists.postgresql.org; Tue, 07 Apr 2026 09:29:05 +0000 Received: by mail-ua1-x929.google.com with SMTP id a1e0cc1a2514c-950bcf4df06so1352175241.2 for ; Tue, 07 Apr 2026 02:29:04 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1775554143; cv=none; d=google.com; s=arc-20240605; b=TXfTKAkywzX3ob9nifzjah0JW5ng89xgGRNHywCWW2x+aEfJXmDXnyfKwf1iCq05GC 282YkCUijpw/xdRpNgM+OVwJraip1lUBvD1v1ArPl7iLIuTfYo5vdqOId1yYdyYX9s/w QHMJnovwbIeKb+X8TC+yRXV0b7qeDNyMqMWNSnG78O6ZmyvHaq7B+Z6UmoClzHI6byxw 1P76lfAZEenQ39zJpqflZMda8CU8eJMlVE91Cz6XiDaPq/sZBKv4Ey5hpUoHjr+Zvbko ghIQz+iQfEUuvBSYG/kXiycZ8gfiI9D6RPy8t2JGx32+9mNBGu0vH9SPzIxnn5tuASMx cImg== 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=iDBkBAXuG0R5m4TMa92KGgRKpnK/K1DmhqnlQ40CH2c=; fh=a0bxEFURk+5jkpBjA2eWUGL1cbCwExLhn6UvJTgjEyQ=; b=anxFqP9rLeRwXjmAa+/M/QXcArxOQRdU8uDNNhQHHNv3wxthVlUBg2KB9ErmCA/WAV e54VzL9IFX9GNEIwwQtFLA166vIG6XLZbB9pKA0BkWNsptIPzc9n99+BOhhhJmFvd+gu fS66Y0dmtOwBk/Ov0VbrMv3E6qQwHp2H/64UjuSIp2U39AF/fa8I0mftQSP6/6gvd1wb WHJN0TndJz471Fij40IZeyrkfQTibaXbAIJQNy/GKywcwjl1ZP17VC0jBfhtXYpCA+yC gd4RhSd0H08cP7dPYXgE0fa36xSdEaV5s4ms+U650nMAHVGPcpf0hbDuBMTO/DcWf6z/ RoIw==; 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=1775554143; x=1776158943; darn=lists.postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=iDBkBAXuG0R5m4TMa92KGgRKpnK/K1DmhqnlQ40CH2c=; b=dXmliSE+g76OY0DGpF3Xv8dqJHKpcnC7raBLmDJzst7Rsh6TfuMQX6G66jo3EeSwwb 0YwvVo9xkmg7mVh+8mGotrqfv9t3+l0/1V4MTLqcSO9T3EFf4d2cLHiGcZcjuh1Fr2DM 1oLxJYLEMjw2nxzoUoCunmKJJeKgfH70BALRm7D5e0GW9BP1YNvyV5XRJisaMHEOAzzy 1M1gRKhTG9SE4UWJsOeKeuLVFYi69xRY+/AnWEjWI/3lnd6LrF0dtsBMX+FiQN4qAVo7 RplyqAH/wwJwYY4NxlLI/vmguYbF6LJaRKw0LsGYFB1lmqAjjM+rL/4lG0S3bsPvzZ6Q gSAg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775554143; x=1776158943; 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=iDBkBAXuG0R5m4TMa92KGgRKpnK/K1DmhqnlQ40CH2c=; b=FqPRqSyzhX0BeoHaP0fBdV1Grrye0OR6OoPMOBBhDIq+OKIymmjI04V2inZyxA3WXF 2gnc4GWbnAY3FKnPShxo7D+ESus7JdcXlsbk++WzF20jDcjROk+Pg+Sku6MZ1olNEu8v TQPK1s7XX6Ke7ImaRBTngvgI2R44z40azBnlIAUP0MYHV09zxEYvSE/br95K7qmffRPD vSQOwVnaT1HqzKpauMgcsdAvvcbdScImSuQRN5mojl+EOufa8EaHj9k3fQUJ2+qqxkDd yCGjmAWG82dbaw9YP1AhgbXS0hD2XLr2wrRm55GcXeb+2NTT7XRqZ3bhmiHrTgEm+Hjj S3NQ== X-Forwarded-Encrypted: i=1; AJvYcCV0Yz5HHHvLFHmPYFNcKN37zEodVR67p52lUhFNJG0DrqJx4mF9Ho84HHW/TdHAIonkvxJCDxgp+9grYIB5@lists.postgresql.org X-Gm-Message-State: AOJu0YzNiJ1s9JGSUTEOu8e9QC2weKpGD6FkkoqWlSNhNONpk+9JVxc0 m0xKp1+u2Bux6o51o4zwf03gn3JGxMiD+dNWO6vqdXU6CRuskhDPi5IthUg5X7o18U0u+SWlTGI GcPKAT2fL+743gZuqnd0FwbJMNZ2y5Dw= X-Gm-Gg: AeBDietq9Vy5VULQqMgRcCKHpY/7hRkRF0fyIsmiYuciUMYoDMnKOsToBOioAIKlxYE 7ZP92K/EJSNcxMYWA7x5XJeVgnnZfLwAniS43giM52lheTAU0HnZJFPMhqF5pY6qCpCv+RzeACs 95vnP32z0IJgCMLug4EArco66kqRoXDX3/3p1qHbXyKN9otQo7r3oZbUZ8NrjnMCpZcijZaFknW SH2TisIJucntxJsR1wmA/R5a0dlhyaYiNC1Rv3FQzVnOhXwRDou8Rusw7gFaHQ559lW5E+Wz6Pe RqAvp84= X-Received: by 2002:a05:6102:5107:b0:602:86a6:986a with SMTP id ada2fe7eead31-605a5099be6mr4905901137.27.1775554143387; Tue, 07 Apr 2026 02:29:03 -0700 (PDT) MIME-Version: 1.0 From: SATYANARAYANA NARLAPURAM Date: Tue, 7 Apr 2026 02:28:50 -0700 X-Gm-Features: AQROBzBC2fU_-gPLN5e_iALpij8VT38LdwVGfhacJBbm_fCTW-a991mQQp7gNN8 Message-ID: Subject: UPDATE FOR PORTION OF + table inheritance misroutes leftover rows to parent To: PostgreSQL-development , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000ff19ac064edb69da" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000ff19ac064edb69da Content-Type: multipart/alternative; boundary="000000000000ff19ab064edb69d8" --000000000000ff19ab064edb69d8 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi hackers, I found a bug with UPDATE ... FOR PORTION OF when used with traditional table inheritance. When an UPDATE targets a parent table and the matching row lives in a child that has extra columns, the temporal leftover rows are inserted into the parent table instead of back into the child. This causes child-specific column values to be lost. Reproduction: SET datestyle TO ISO, YMD; CREATE TABLE parent ( id int4range, valid_at daterange, name text ); CREATE TABLE child ( description text ) INHERITS (parent); INSERT INTO child (id, valid_at, name, description) VALUES ('[1,2)', '[2018-01-01,2019-01-01)', 'one', 'initial'); UPDATE parent FOR PORTION OF valid_at FROM '2018-04-01' TO '2018-10-01' SET name =3D 'one^1'; Expected: all three resulting rows stay in "child" with description preserved: child | [1,2) | [2018-01-01,2018-04-01) | one | initial child | [1,2) | [2018-04-01,2018-10-01) | one^1 | initial child | [1,2) | [2018-10-01,2019-01-01) | one | initial Actual: the two leftover rows land in "parent", losing the description column: parent | [1,2) | [2018-01-01,2018-04-01) | one child | [1,2) | [2018-04-01,2018-10-01) | one^1 | initial parent | [1,2) | [2018-10-01,2019-01-01) | one Root cause: In ExecForPortionOfLeftovers(), the code unconditionally redirects leftover inserts to ri_RootResultRelInfo whenever the current resultRelInfo has one set: if (resultRelInfo->ri_RootResultRelInfo) resultRelInfo =3D resultRelInfo->ri_RootResultRelInfo; The comment says =E2=80=9CIf there are partitions, we must insert into the = root table, so we get tuple routing.=E2=80=9D That logic makes sense for partiti= oned tables, because tuple routing will forward the INSERT to the correct partition. However, this breaks traditional inheritance. In that case there=E2=80=99s = no tuple routing, so the insert ends up going directly into the parent table. On top of that, the fp_Leftover slot uses the root=E2=80=99s tuple descriptor, whi= ch doesn=E2=80=99t include the child=E2=80=99s extra columns. Attached a draft= patch to fix this issue and also added tests. Thanks, Satya --000000000000ff19ab064edb69d8 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi hackers,

I found a bug with UPD= ATE ... FOR PORTION OF when used with traditional table inheritance.=C2=A0 = When an UPDATE targets a parent table and the matching row lives in a child= that has extra columns, the temporal leftover rows are inserted into the p= arent table instead of back into the child.=C2=A0 This causes child-specifi= c column values to be lost.

Reproduction:

=C2=A0 SET datestyl= e TO ISO, YMD;

=C2=A0 CREATE TABLE parent (
=C2=A0 =C2=A0 id int4= range,
=C2=A0 =C2=A0 valid_at daterange,
=C2=A0 =C2=A0 name text
= =C2=A0 );
=C2=A0 CREATE TABLE child (
=C2=A0 =C2=A0 description text<= br>=C2=A0 ) INHERITS (parent);

=C2=A0 INSERT INTO child (id, valid_a= t, name, description)
=C2=A0 =C2=A0 VALUES ('[1,2)', '[2018-= 01-01,2019-01-01)', 'one', 'initial');

=C2=A0 UP= DATE parent
=C2=A0 =C2=A0 FOR PORTION OF valid_at FROM '2018-04-01&#= 39; TO '2018-10-01'
=C2=A0 =C2=A0 SET name =3D 'one^1';<= br>
Expected: all three resulting rows stay in "child" with de= scription preserved:

=C2=A0 child | [1,2) | [2018-01-01,2018-04-01) = | one =C2=A0 | initial
=C2=A0 child | [1,2) | [2018-04-01,2018-10-01) | = one^1 | initial
=C2=A0 child | [1,2) | [2018-10-01,2019-01-01) | one =C2= =A0 | initial

Actual: the two leftover rows land in "parent&quo= t;, losing the description column:

=C2=A0 parent | [1,2) | [2018-01-= 01,2018-04-01) | one
=C2=A0 child =C2=A0| [1,2) | [2018-04-01,2018-10-01= ) | one^1 | initial
=C2=A0 parent | [1,2) | [2018-10-01,2019-01-01) | on= e


Root cause:

In ExecForPortionOfLeftovers(), the code u= nconditionally redirects leftover inserts to ri_RootResultRelInfo whenever = the current resultRelInfo has one set:

=C2=A0 =C2=A0 if (resultRelIn= fo->ri_RootResultRelInfo)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 resultRelInfo = =3D resultRelInfo->ri_RootResultRelInfo;


The comment says =E2= =80=9CIf there are partitions, we must insert into the root table, so we ge= t tuple routing.=E2=80=9D That logic makes sense for partitioned tables, be= cause tuple routing will forward the INSERT to the correct partition.
However, this breaks traditional inheritance. In that case there=E2=80=99= s no tuple routing, so the insert ends up going directly into the parent ta= ble. On top of that, the fp_Leftover slot uses the root=E2=80=99s tuple des= criptor, which doesn=E2=80=99t include the child=E2=80=99s extra columns. A= ttached a draft patch to fix this issue and also added tests.
Thanks,
Satya


--000000000000ff19ab064edb69d8-- --000000000000ff19ac064edb69da Content-Type: application/octet-stream; name="v1-0001-fpo-inheritance-fix.patch" Content-Disposition: attachment; filename="v1-0001-fpo-inheritance-fix.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnof1i2t0 ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNb2RpZnlUYWJsZS5jIGIvc3Jj L2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1vZGlmeVRhYmxlLmMKaW5kZXggZGZkN2IzM2EuLjMwY2Y3 Njk4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuYwor KysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuYwpAQCAtMTUyMCwxMiAr MTUyMCwyNSBAQCBFeGVjRm9yUG9ydGlvbk9mTGVmdG92ZXJzKE1vZGlmeVRhYmxlQ29udGV4dCAq Y29udGV4dCwKIAlmY2luZm8tPmFyZ3NbMV0uaXNudWxsID0gZmFsc2U7CiAKIAkvKgotCSAqIElm IHRoZXJlIGFyZSBwYXJ0aXRpb25zLCB3ZSBtdXN0IGluc2VydCBpbnRvIHRoZSByb290IHRhYmxl LCBzbyB3ZSBnZXQKLQkgKiB0dXBsZSByb3V0aW5nLiBXZSBhbHJlYWR5IHNldCB1cCBsZWZ0b3Zl clNsb3Qgd2l0aCB0aGUgcm9vdCB0dXBsZQorCSAqIElmIHRoZSB0YXJnZXQgaXMgcGFydGl0aW9u ZWQsIHdlIG11c3QgaW5zZXJ0IGludG8gdGhlIHJvb3QgdGFibGUgc28gd2UKKwkgKiBnZXQgdHVw bGUgcm91dGluZy4gIFdlIGFscmVhZHkgc2V0IHVwIGxlZnRvdmVyU2xvdCB3aXRoIHRoZSByb290 IHR1cGxlCiAJICogZGVzY3JpcHRvci4KKwkgKgorCSAqIEZvciB0cmFkaXRpb25hbCBpbmhlcml0 YW5jZSAobm8gcGFydGl0aW9uIHR1cGxlIHJvdXRpbmcpLCB3ZSBtdXN0CisJICogaW5zZXJ0IGJh Y2sgaW50byB0aGUgc2FtZSBjaGlsZCB0YWJsZSBzbyB0aGF0IGNoaWxkLXNwZWNpZmljIGNvbHVt bnMKKwkgKiBhcmUgcHJlc2VydmVkLiAgSW4gdGhhdCBjYXNlIHdlIG5lZWQgYSBsZWZ0b3ZlciBz bG90IHRoYXQgbWF0Y2hlcyB0aGUKKwkgKiBjaGlsZCdzIHR1cGxlIGRlc2NyaXB0b3IgcmF0aGVy IHRoYW4gdGhlIHJvb3Qncy4KIAkgKi8KLQlpZiAocmVzdWx0UmVsSW5mby0+cmlfUm9vdFJlc3Vs dFJlbEluZm8pCisJaWYgKHJlc3VsdFJlbEluZm8tPnJpX1Jvb3RSZXN1bHRSZWxJbmZvICYmCisJ CW10c3RhdGUtPm10X3BhcnRpdGlvbl90dXBsZV9yb3V0aW5nKQogCQlyZXN1bHRSZWxJbmZvID0g cmVzdWx0UmVsSW5mby0+cmlfUm9vdFJlc3VsdFJlbEluZm87CisJZWxzZSBpZiAocmVzdWx0UmVs SW5mby0+cmlfUm9vdFJlc3VsdFJlbEluZm8pCisJeworCQlsZWZ0b3ZlclNsb3QgPQorCQkJRXhl Y0luaXRFeHRyYVR1cGxlU2xvdChlc3RhdGUsCisJCQkJCQkJCSAgIFJlbGF0aW9uR2V0RGVzY3Io cmVzdWx0UmVsSW5mby0+cmlfUmVsYXRpb25EZXNjKSwKKwkJCQkJCQkJICAgJlRUU09wc1ZpcnR1 YWwpOworCX0KIAogCS8qCiAJICogSW5zZXJ0IGEgbGVmdG92ZXIgZm9yIGVhY2ggdmFsdWUgcmV0 dXJuZWQgYnkgdGhlIHdpdGhvdXRfcG9ydGlvbiBoZWxwZXIKQEAgLTE1NTcsOCArMTU3MCwxMiBA QCBFeGVjRm9yUG9ydGlvbk9mTGVmdG92ZXJzKE1vZGlmeVRhYmxlQ29udGV4dCAqY29udGV4dCwK IAkJCSAqIHJhbmdlIGNvbHVtbiBiZWxvdy4gQ29udmVydCBvbGR0dXBsZSB0byB0aGUgYmFzZSB0 YWJsZSdzIGZvcm1hdAogCQkJICogaWYgbmVjZXNzYXJ5LiBXZSBuZWVkIHRvIGluc2VydCB0ZW1w b3JhbCBsZWZ0b3ZlcnMgdGhyb3VnaCB0aGUKIAkJCSAqIHJvb3QgcGFydGl0aW9uIHNvIHRoZXkg Z2V0IHJvdXRlZCBjb3JyZWN0bHkuCisJCQkgKgorCQkJICogRm9yIHRyYWRpdGlvbmFsIGluaGVy aXRhbmNlIChubyBwYXJ0aXRpb24gcm91dGluZyksIHdlIGtlZXAgdGhlCisJCQkgKiBjaGlsZCdz IHR1cGxlIGZvcm1hdCBzbyB0aGF0IGNoaWxkLXNwZWNpZmljIGNvbHVtbnMgYXJlCisJCQkgKiBw cmVzZXJ2ZWQuCiAJCQkgKi8KLQkJCWlmIChtYXAgIT0gTlVMTCkKKwkJCWlmIChtYXAgIT0gTlVM TCAmJiBtdHN0YXRlLT5tdF9wYXJ0aXRpb25fdHVwbGVfcm91dGluZykKIAkJCXsKIAkJCQlsZWZ0 b3ZlclNsb3QgPSBleGVjdXRlX2F0dHJfbWFwX3Nsb3QobWFwLT5hdHRyTWFwLAogCQkJCQkJCQkJ CQkJCSBvbGR0dXBsZVNsb3QsCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L2Zvcl9wb3J0aW9uX29mLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZm9yX3BvcnRp b25fb2Yub3V0CmluZGV4IDMxZjc3MmM3Li4yNTBlMzY1MyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9mb3JfcG9ydGlvbl9vZi5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9mb3JfcG9ydGlvbl9vZi5vdXQKQEAgLTIwOTcsNCArMjA5Nyw0NCBAQCBTRUxF Q1QgKiBGUk9NIHRlbXBvcmFsX3BhcnRpdGlvbmVkXzUgT1JERVIgQlkgaWQsIHZhbGlkX2F0Owog KDQgcm93cykKIAogRFJPUCBUQUJMRSB0ZW1wb3JhbF9wYXJ0aXRpb25lZDsKKy0tIFVQREFURSBG T1IgUE9SVElPTiBPRiB3aXRoIHRhYmxlIGluaGVyaXRhbmNlCistLSBMZWZ0b3ZlciByb3dzIG11 c3Qgc3RheSBpbiB0aGUgY2hpbGQgdGFibGUsIHByZXNlcnZpbmcgY2hpbGQtc3BlY2lmaWMgY29s dW1ucy4KK0NSRUFURSBUQUJMRSBmcG9faW5oX3BhcmVudCAoCisgIGlkIGludDRyYW5nZSwKKyAg dmFsaWRfYXQgZGF0ZXJhbmdlLAorICBuYW1lIHRleHQKKyk7CitDUkVBVEUgVEFCTEUgZnBvX2lu aF9jaGlsZCAoCisgIGRlc2NyaXB0aW9uIHRleHQKKykgSU5IRVJJVFMgKGZwb19pbmhfcGFyZW50 KTsKK0lOU0VSVCBJTlRPIGZwb19pbmhfY2hpbGQgKGlkLCB2YWxpZF9hdCwgbmFtZSwgZGVzY3Jp cHRpb24pIFZBTFVFUworICAoJ1sxLDIpJywgJ1syMDE4LTAxLTAxLDIwMTktMDEtMDEpJywgJ29u ZScsICdpbml0aWFsJyk7CistLSBVcGRhdGUgdGFyZ2V0cyB0aGUgcGFyZW50OyB0aGUgbWF0Y2hp bmcgcm93IGxpdmVzIGluIHRoZSBjaGlsZC4KK1VQREFURSBmcG9faW5oX3BhcmVudCBGT1IgUE9S VElPTiBPRiB2YWxpZF9hdCBGUk9NICcyMDE4LTA0LTAxJyBUTyAnMjAxOC0xMC0wMScKKyAgU0VU IG5hbWUgPSAnb25lXjEnOworLS0gQWxsIHRocmVlIHJvd3Mgc2hvdWxkIGJlIGluIHRoZSBjaGls ZCwgd2l0aCBkZXNjcmlwdGlvbiBwcmVzZXJ2ZWQuCitTRUxFQ1QgdGFibGVvaWQ6OnJlZ2NsYXNz LCAqIEZST00gZnBvX2luaF9wYXJlbnQgT1JERVIgQlkgdmFsaWRfYXQ7CisgICB0YWJsZW9pZCAg ICB8ICBpZCAgIHwgICAgICAgIHZhbGlkX2F0ICAgICAgICAgfCBuYW1lICAKKy0tLS0tLS0tLS0t LS0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLQorIGZwb19pbmhf Y2hpbGQgfCBbMSwyKSB8IFsyMDE4LTAxLTAxLDIwMTgtMDQtMDEpIHwgb25lCisgZnBvX2luaF9j aGlsZCB8IFsxLDIpIHwgWzIwMTgtMDQtMDEsMjAxOC0xMC0wMSkgfCBvbmVeMQorIGZwb19pbmhf Y2hpbGQgfCBbMSwyKSB8IFsyMDE4LTEwLTAxLDIwMTktMDEtMDEpIHwgb25lCisoMyByb3dzKQor CitTRUxFQ1QgKiBGUk9NIGZwb19pbmhfY2hpbGQgT1JERVIgQlkgdmFsaWRfYXQ7CisgIGlkICAg fCAgICAgICAgdmFsaWRfYXQgICAgICAgICB8IG5hbWUgIHwgZGVzY3JpcHRpb24gCistLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0tLS0tCisgWzEsMikg fCBbMjAxOC0wMS0wMSwyMDE4LTA0LTAxKSB8IG9uZSAgIHwgaW5pdGlhbAorIFsxLDIpIHwgWzIw MTgtMDQtMDEsMjAxOC0xMC0wMSkgfCBvbmVeMSB8IGluaXRpYWwKKyBbMSwyKSB8IFsyMDE4LTEw LTAxLDIwMTktMDEtMDEpIHwgb25lICAgfCBpbml0aWFsCisoMyByb3dzKQorCistLSBObyByb3dz IHNob3VsZCBoYXZlIGxlYWtlZCBpbnRvIHRoZSBwYXJlbnQuCitTRUxFQ1QgKiBGUk9NIE9OTFkg ZnBvX2luaF9wYXJlbnQgT1JERVIgQlkgdmFsaWRfYXQ7CisgaWQgfCB2YWxpZF9hdCB8IG5hbWUg CistLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisoMCByb3dzKQorCitEUk9QIFRBQkxFIGZwb19pbmhf cGFyZW50IENBU0NBREU7CitOT1RJQ0U6ICBkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIGZwb19pbmhf Y2hpbGQKIFJFU0VUIGRhdGVzdHlsZTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3Fs L2Zvcl9wb3J0aW9uX29mLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2Zvcl9wb3J0aW9uX29m LnNxbAppbmRleCBkNDA2MmFjZi4uYmI3YzgwNDYgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jl c3Mvc3FsL2Zvcl9wb3J0aW9uX29mLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9mb3Jf cG9ydGlvbl9vZi5zcWwKQEAgLTEzNjUsNCArMTM2NSwzMCBAQCBTRUxFQ1QgKiBGUk9NIHRlbXBv cmFsX3BhcnRpdGlvbmVkXzUgT1JERVIgQlkgaWQsIHZhbGlkX2F0OwogCiBEUk9QIFRBQkxFIHRl bXBvcmFsX3BhcnRpdGlvbmVkOwogCistLSBVUERBVEUgRk9SIFBPUlRJT04gT0Ygd2l0aCB0YWJs ZSBpbmhlcml0YW5jZQorLS0gTGVmdG92ZXIgcm93cyBtdXN0IHN0YXkgaW4gdGhlIGNoaWxkIHRh YmxlLCBwcmVzZXJ2aW5nIGNoaWxkLXNwZWNpZmljIGNvbHVtbnMuCisKK0NSRUFURSBUQUJMRSBm cG9faW5oX3BhcmVudCAoCisgIGlkIGludDRyYW5nZSwKKyAgdmFsaWRfYXQgZGF0ZXJhbmdlLAor ICBuYW1lIHRleHQKKyk7CitDUkVBVEUgVEFCTEUgZnBvX2luaF9jaGlsZCAoCisgIGRlc2NyaXB0 aW9uIHRleHQKKykgSU5IRVJJVFMgKGZwb19pbmhfcGFyZW50KTsKK0lOU0VSVCBJTlRPIGZwb19p bmhfY2hpbGQgKGlkLCB2YWxpZF9hdCwgbmFtZSwgZGVzY3JpcHRpb24pIFZBTFVFUworICAoJ1sx LDIpJywgJ1syMDE4LTAxLTAxLDIwMTktMDEtMDEpJywgJ29uZScsICdpbml0aWFsJyk7CisKKy0t IFVwZGF0ZSB0YXJnZXRzIHRoZSBwYXJlbnQ7IHRoZSBtYXRjaGluZyByb3cgbGl2ZXMgaW4gdGhl IGNoaWxkLgorVVBEQVRFIGZwb19pbmhfcGFyZW50IEZPUiBQT1JUSU9OIE9GIHZhbGlkX2F0IEZS T00gJzIwMTgtMDQtMDEnIFRPICcyMDE4LTEwLTAxJworICBTRVQgbmFtZSA9ICdvbmVeMSc7CisK Ky0tIEFsbCB0aHJlZSByb3dzIHNob3VsZCBiZSBpbiB0aGUgY2hpbGQsIHdpdGggZGVzY3JpcHRp b24gcHJlc2VydmVkLgorU0VMRUNUIHRhYmxlb2lkOjpyZWdjbGFzcywgKiBGUk9NIGZwb19pbmhf cGFyZW50IE9SREVSIEJZIHZhbGlkX2F0OworU0VMRUNUICogRlJPTSBmcG9faW5oX2NoaWxkIE9S REVSIEJZIHZhbGlkX2F0OworLS0gTm8gcm93cyBzaG91bGQgaGF2ZSBsZWFrZWQgaW50byB0aGUg cGFyZW50LgorU0VMRUNUICogRlJPTSBPTkxZIGZwb19pbmhfcGFyZW50IE9SREVSIEJZIHZhbGlk X2F0OworCitEUk9QIFRBQkxFIGZwb19pbmhfcGFyZW50IENBU0NBREU7CisKIFJFU0VUIGRhdGVz dHlsZTsK --000000000000ff19ac064edb69da--