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.94.2) (envelope-from ) id 1uOnCu-00BNnH-VV for pgsql-performance@arkaria.postgresql.org; Tue, 10 Jun 2025 00:51:17 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1uOnCr-00FQyM-JN for pgsql-performance@arkaria.postgresql.org; Tue, 10 Jun 2025 00:51:14 +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.94.2) (envelope-from ) id 1uOnCr-00FQyE-6I for pgsql-performance@lists.postgresql.org; Tue, 10 Jun 2025 00:51:13 +0000 Received: from mout.gmx.net ([212.227.17.21]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1uOnCp-00190h-2e for pgsql-performance@lists.postgresql.org; Tue, 10 Jun 2025 00:51:13 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.net; s=s31663417; t=1749516664; x=1750121464; i=jimis@gmx.net; bh=LCw9RqmnJHa5ZxC16uMgdFLBkNTojXnKUGmT0098Gv0=; h=X-UI-Sender-Class:Date:From:To:cc:Subject:In-Reply-To:Message-ID: References:MIME-Version:Content-Type:cc:content-transfer-encoding: content-type:date:from:message-id:mime-version:reply-to:subject: to; b=Hgg3txTC4KNYEM5asYkLwLSES7ysLmfAclpv/rAwtst+lXhtKzQwi9lAk/Utxpjq KM5fxdlWJVz1Nn4Ey5G+JMUJ/iDiMcwRfMUWdgKyS0EHoejoJwra2Ie7vw5sYudi9 FuSktcczsHEh7orj/jRijUwemklUeVv0eULOs/RGUMvZdolFW7rycoov7Vd6Dft1K vyyKJrrYhqFq4dwQ1tlKNmvofKmNHirJspFUjiNYAx77u2kYPz1OjgvQIRZXYGG6N qSG5PnJz+HzXpnHMTjXy04NsrWJ0lhlty+fO2IoB4JxKImP6iau0J2R2ssXSejRSf 5HiW8uG5s65rpI4f/w== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from [192.168.1.75] ([84.215.109.181]) by mail.gmx.net (mrgmx104 [212.227.17.168]) with ESMTPSA (Nemesis) id 1M89L1-1uSNy7274F-002nim; Tue, 10 Jun 2025 02:51:04 +0200 Date: Tue, 10 Jun 2025 02:51:01 +0200 (CEST) From: Dimitrios Apostolou To: =?UTF-8?Q?Fr=C3=A9d=C3=A9ric_Yhuel?= cc: pgsql-performance@lists.postgresql.org, bruce@momjian.us, Christophe Courtois Subject: [PATCH] ALTER TABLE ADD FOREIGN KEY to partitioned table, is not parallelized In-Reply-To: <90e55c6b-3d79-4bf8-8874-a64dd10a0286@dalibo.com> Message-ID: References: <5f002654-92e9-8032-3e1a-134461b4e819@gmx.net> <90e55c6b-3d79-4bf8-8874-a64dd10a0286@dalibo.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="-1463770111-80708404-1749516664=:87001" X-Provags-ID: V03:K1:8OT2eceQVWLmIBENmE8NuErJ72wXNTICsyQcIlfdtAi5T/WiLBH yF1Isiex1qkAIgbWUcodJ8+SmoBubE4eyk21iQbEc5z2NehRe/LN2HIVquSb6klQUkTQmBV IItS/r30eCPzNbsz0tBs1Swu2+eSnae6kbXv/2AGsjt8VrzsbJomm+GTMBJFZLwhO3Agqyz x13L4Uv/PDaI4hitWG/rA== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:4QQno6Dyy3o=;nNK+CgIaDMK74u0QfM8cJ9+6Jfv 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 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. ---1463770111-80708404-1749516664=:87001 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: quoted-printable On Thu, 5 Jun 2025, Fr=C3=A9d=C3=A9ric Yhuel wrote: > > On 6/4/25 16:12, Dimitrios Apostolou wrote: >> In general I have noticed most operations are slower after a succesful >> pg_restore until VACUUM is complete, which is unfortunate as the datab= ase >> is huge and it takes days to run. Something I have on my list to try, = is >> whether a COPY FREEZE would alleviate all this trouble, since all tupl= es >> are immediately visible then. Maybe a patch for a new pg_restore optio= n >> --freeze is a better solution. Are my assumptions right? > > It seems that the idea has already been discussed:=20 > https://www.postgresql.org/message-id/flat/CA%2BU5nM%2BXvkUu9ran%2B5cY%3= DTWQquLTpvzte4KVMK%3DaDfbr-xfNXA%40mail.gmail.com#b61a7fee06e10e61afa68712= bc0b3c5b > > I've CCed Bruce Mojman, in the hope that he can tell us more about it. Thanks for all the pointers, it shows that changes in postgres are harder= =20 than they appear. FWIW I implemented a pg_restore --freeze patch, see attached. It needs=20 another patch of mine from [1] that implements pg_restore --data-only=20 =2D-clean, which for parallel restores encases each COPY in its own=20 transaction and prepends it with a TRUNCATE. All feedback is welcome. [1] https://www.postgresql.org/message-id/c61263f2-7472-5dd8-703d-01e68342= 1f61%40gmx.net It works really fast for the data, and I see that some, but not all items= =20 from section=3Dpost-data, start parallel plans. For example I see CREATE= =20 INDEX spawns parallel workers. But unfortunately the item in question (ADD FOREIGN KEY) is not parallel= =20 (probably because the discussion [2] you posted in your previous email=20 never concluded). I /think/ though it's reading all the data faster than= =20 before, but still has to go through terabytes of data and this takes a=20 long time, for each of the foreign keys it adds. [2] https://www.postgresql.org/message-id/flat/0d21e3b4-dcde-290c-875e-6ed= 5013e8e52@dalibo.com Still I wonder why pg_restore can't issue many ADD FOREIGN=20 KEY for the same table in parallel. Regards, Dimitris ---1463770111-80708404-1749516664=:87001 Content-Type: text/x-patch; name=v1-0001-pg_restore-freeze.patch Content-Transfer-Encoding: BASE64 Content-ID: <003f323c-4e15-eabb-d009-668d0f948c34@NO.WHERE> Content-Description: Content-Disposition: attachment; filename=v1-0001-pg_restore-freeze.patch RnJvbSBhYTVkZjFmOWU1ZjQ1YWE0NWE4ZDdhYjNlMWNkNmU5NmZlZTgyZjE3 IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQ0KRnJvbTogRGltaXRyaW9zIEFw b3N0b2xvdSA8amltaXNAcXQuaW8+DQpEYXRlOiBGcmksIDYgSnVuIDIwMjUg MTk6MDM6NTEgKzAyMDANClN1YmplY3Q6IFtQQVRDSCB2MV0gcGdfcmVzdG9y ZSAtLWZyZWV6ZQ0KDQpwZ19yZXN0b3JlIG5vdyBpbnZva2VzDQoNCiAgQ09Q WSBGUk9NIC4uLiBXSVRIIChGUkVFWkUpDQoNCk5lZWRzIGFsc28gb3B0aW9u cw0KDQogIC0tc2VjdGlvbj1kYXRhIC0tY2xlYW4gLWogTg0KDQpzbyB0aGF0 IGVhY2ggcGdfcmVzdG9yZSB3b3JrZXIgcHJvY2VzcyB3cmFwcyBlYWNoIENP UFkgaW4gYSB0cmFuc2FjdGlvbg0KYW5kIHByZWNlZGVzIGl0IHdpdGggVFJV TkNBVEUuIFRoYXQgd2F5IHRoZSBkYXRhIGluc2VydGlvbiBpcyBvcHRpbWl6 ZWQNCmFuZCB0aGUgdmlzaWJpbGl0eSB0YWJsZSBpcyB3cml0dGVuIHdpdGhv dXQgbmVlZGluZyBWQUNVVU1pbmcuDQotLS0NCiBzcmMvYmluL3BnX2R1bXAv cGdfYmFja3VwLmggICAgICAgICAgfCAgMSArDQogc3JjL2Jpbi9wZ19kdW1w L3BnX2JhY2t1cF9hcmNoaXZlci5jIHwgNDMgKysrKysrKysrKysrKysrKysr KysrKysrKysrLQ0KIHNyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMgICAgICAg ICAgICB8ICA5ICsrKysrLQ0KIHNyYy9iaW4vcGdfZHVtcC9wZ19yZXN0b3Jl LmMgICAgICAgICB8ICA1ICsrKysNCiA0IGZpbGVzIGNoYW5nZWQsIDU2IGlu c2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pDQoNCmRpZmYgLS1naXQgYS9z cmMvYmluL3BnX2R1bXAvcGdfYmFja3VwLmggYi9zcmMvYmluL3BnX2R1bXAv cGdfYmFja3VwLmgNCmluZGV4IDk0MjhiMzYyYzkyLi5mNDNkMmMxOTZmNyAx MDA2NDQNCi0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXAuaA0KKysr IGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cC5oDQpAQCAtMTEyLDE2ICsx MTIsMTcgQEAgdHlwZWRlZiBzdHJ1Y3QgX3Jlc3RvcmVPcHRpb25zDQogCWlu dAkJCWNvbHVtbl9pbnNlcnRzOw0KIAlpbnQJCQlpZl9leGlzdHM7DQogCWlu dAkJCW5vX2NvbW1lbnRzOwkvKiBTa2lwIGNvbW1lbnRzICovDQogCWludAkJ CW5vX3BvbGljaWVzOwkvKiBTa2lwIHJvdyBzZWN1cml0eSBwb2xpY2llcyAq Lw0KIAlpbnQJCQlub19wdWJsaWNhdGlvbnM7CS8qIFNraXAgcHVibGljYXRp b24gZW50cmllcyAqLw0KIAlpbnQJCQlub19zZWN1cml0eV9sYWJlbHM7IC8q IFNraXAgc2VjdXJpdHkgbGFiZWwgZW50cmllcyAqLw0KIAlpbnQJCQlub19z dWJzY3JpcHRpb25zOwkvKiBTa2lwIHN1YnNjcmlwdGlvbiBlbnRyaWVzICov DQogCWludAkJCXN0cmljdF9uYW1lczsNCisJaW50CQkJZnJlZXplOwkJCS8q IENPUFkgRlJFRVpFICovDQogDQogCWNvbnN0IGNoYXIgKmZpbGVuYW1lOw0K IAlpbnQJCQlkdW1wU2VjdGlvbnM7DQogCWludAkJCXZlcmJvc2U7DQogCWlu dAkJCWFjbHNTa2lwOw0KIAljb25zdCBjaGFyICpsb2NrV2FpdFRpbWVvdXQ7 DQogCWludAkJCWluY2x1ZGVfZXZlcnl0aGluZzsNCiANCmRpZmYgLS1naXQg YS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMgYi9zcmMv YmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMNCmluZGV4IGQ0OGM2 ZDExZTdjLi44YTYyMGZhNzRhZSAxMDA2NDQNCi0tLSBhL3NyYy9iaW4vcGdf ZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYw0KKysrIGIvc3JjL2Jpbi9wZ19k dW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jDQpAQCAtOTIsMTYgKzkyLDE5IEBA IHN0YXRpYyB2b2lkIFJlc3RvcmVPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgs IENvbXByZXNzRmlsZUhhbmRsZSAqc2F2ZWRPdXRwdXQpOw0KIHN0YXRpYyBp bnQJcmVzdG9yZV90b2NfZW50cnkoQXJjaGl2ZUhhbmRsZSAqQUgsIFRvY0Vu dHJ5ICp0ZSwgYm9vbCBpc19wYXJhbGxlbCk7DQogc3RhdGljIHZvaWQgcmVz dG9yZV90b2NfZW50cmllc19wcmVmb3JrKEFyY2hpdmVIYW5kbGUgKkFILA0K IAkJCQkJCQkJCQlUb2NFbnRyeSAqcGVuZGluZ19saXN0KTsNCiBzdGF0aWMg dm9pZCByZXN0b3JlX3RvY19lbnRyaWVzX3BhcmFsbGVsKEFyY2hpdmVIYW5k bGUgKkFILA0KIAkJCQkJCQkJCQkgUGFyYWxsZWxTdGF0ZSAqcHN0YXRlLA0K IAkJCQkJCQkJCQkgVG9jRW50cnkgKnBlbmRpbmdfbGlzdCk7DQogc3RhdGlj IHZvaWQgcmVzdG9yZV90b2NfZW50cmllc19wb3N0Zm9yayhBcmNoaXZlSGFu ZGxlICpBSCwNCiAJCQkJCQkJCQkJIFRvY0VudHJ5ICpwZW5kaW5nX2xpc3Qp Ow0KK3N0YXRpYyB2b2lkIGRvX2NvcHkoQXJjaGl2ZUhhbmRsZSAqQUgsDQor CQkJCQljb25zdCBjaGFyICpjcCwNCisJCQkJCWJvb2wgZnJlZXplKTsNCiBz dGF0aWMgdm9pZCBwZW5kaW5nX2xpc3RfaGVhZGVyX2luaXQoVG9jRW50cnkg KmwpOw0KIHN0YXRpYyB2b2lkIHBlbmRpbmdfbGlzdF9hcHBlbmQoVG9jRW50 cnkgKmwsIFRvY0VudHJ5ICp0ZSk7DQogc3RhdGljIHZvaWQgcGVuZGluZ19s aXN0X3JlbW92ZShUb2NFbnRyeSAqdGUpOw0KIHN0YXRpYyBpbnQJVG9jRW50 cnlTaXplQ29tcGFyZVFzb3J0KGNvbnN0IHZvaWQgKnAxLCBjb25zdCB2b2lk ICpwMik7DQogc3RhdGljIGludAlUb2NFbnRyeVNpemVDb21wYXJlQmluYXJ5 aGVhcCh2b2lkICpwMSwgdm9pZCAqcDIsIHZvaWQgKmFyZyk7DQogc3RhdGlj IHZvaWQgbW92ZV90b19yZWFkeV9oZWFwKFRvY0VudHJ5ICpwZW5kaW5nX2xp c3QsDQogCQkJCQkJCSAgIGJpbmFyeWhlYXAgKnJlYWR5X2hlYXAsDQogCQkJ CQkJCSAgIFJlc3RvcmVQYXNzIHBhc3MpOw0KQEAgLTEwMjMsMTcgKzEwMjYs MTcgQEAgcmVzdG9yZV90b2NfZW50cnkoQXJjaGl2ZUhhbmRsZSAqQUgsIFRv Y0VudHJ5ICp0ZSwgYm9vbCBpc19wYXJhbGxlbCkNCiAJCQkJCQkJCSBmbXRR dWFsaWZpZWRJZCh0ZS0+bmFtZXNwYWNlLCB0ZS0+dGFnKSk7DQogCQkJCQl9 DQogDQogCQkJCQkvKg0KIAkJCQkJICogSWYgd2UgaGF2ZSBhIGNvcHkgc3Rh dGVtZW50LCB1c2UgaXQuDQogCQkJCQkgKi8NCiAJCQkJCWlmICh0ZS0+Y29w eVN0bXQgJiYgc3RybGVuKHRlLT5jb3B5U3RtdCkgPiAwKQ0KIAkJCQkJew0K LQkJCQkJCWFocHJpbnRmKEFILCAiJXMiLCB0ZS0+Y29weVN0bXQpOw0KKwkJ CQkJCWRvX2NvcHkoQUgsIHRlLT5jb3B5U3RtdCwgcm9wdC0+ZnJlZXplKTsN CiAJCQkJCQlBSC0+b3V0cHV0S2luZCA9IE9VVFBVVF9DT1BZREFUQTsNCiAJ CQkJCX0NCiAJCQkJCWVsc2UNCiAJCQkJCQlBSC0+b3V0cHV0S2luZCA9IE9V VFBVVF9PVEhFUkRBVEE7DQogDQogCQkJCQlBSC0+UHJpbnRUb2NEYXRhUHRy KEFILCB0ZSk7DQogDQogCQkJCQkvKg0KQEAgLTEwODYsMTYgKzEwODksNTQg QEAgcmVzdG9yZV90b2NfZW50cnkoQXJjaGl2ZUhhbmRsZSAqQUgsIFRvY0Vu dHJ5ICp0ZSwgYm9vbCBpc19wYXJhbGxlbCkNCiAJfQ0KIA0KIAlpZiAoQUgt PnB1YmxpYy5uX2Vycm9ycyA+IDAgJiYgc3RhdHVzID09IFdPUktFUl9PSykN CiAJCXN0YXR1cyA9IFdPUktFUl9JR05PUkVEX0VSUk9SUzsNCiANCiAJcmV0 dXJuIHN0YXR1czsNCiB9DQogDQorc3RhdGljIHZvaWQNCitkb19jb3B5KEFy Y2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICpjcCwgYm9vbCBmcmVlemUp DQorew0KKwljb25zdCBzaXplX3QgY3BfbGVuID0gc3RybGVuKGNwKTsNCisJ Ym9vbAkJY3BfaXNfd2VsbF9mb3JtZWQgPSBmYWxzZTsNCisJY29uc3QgY2hh ciAqY3BfZW5kOw0KKw0KKwlBc3NlcnQoY3BfbGVuID4gMCk7CQkJLyogSGF2 ZSBjaGVja2VkIGl0IGluIGNhbGxlciAqLw0KKw0KKwkvKg0KKwkgKiBDaGVj ayBpZiB0aGUgQ09QWSBzdGF0ZW1lbnQgaXMgd2VsbCB3cml0dGVuIHNvIHRo YXQgd2UgY2FuIGluamVjdCB0aGUNCisJICogRlJFRVpFIG9wdGlvbi4NCisJ ICovDQorCWlmIChmcmVlemUpDQorCXsNCisJCWludAkJCWkgPSBjcF9sZW4g LSAxOw0KKw0KKwkJLyogQ3V0IG9mZiB0aGUgdHJhaWxpbmcgc2VtaWNvbG9u IGFuZCB3aGl0ZXNwYWNlLiAqLw0KKwkJd2hpbGUgKGkgPiAwICYmDQorCQkJ ICAgKGNwW2ldID09ICcgJyB8fCBjcFtpXSA9PSAnXG4nIHx8IGNwW2ldID09 ICc7JykpDQorCQkJaS0tOw0KKwkJY3BfZW5kID0gJmNwW2kgKyAxXTsNCisN CisJCWlmIChjcF9lbmQgLSAxMCA+IGNwICYmDQorCQkJc3RybmNtcChjcF9l bmQgLSAxMCwgIkZST00gc3RkaW4iLCAxMCkgPT0gMA0KKwkJCSkNCisJCQlj cF9pc193ZWxsX2Zvcm1lZCA9IHRydWU7DQorCQllbHNlDQorCQkJcGdfbG9n X3dhcm5pbmcoIkNPUFkgc3RhdGVtZW50IGZyb20gZHVtcCBmaWxlIGlzIG5v dCBpbiB0aGUgcmlnaHQgZm9ybTsgV2lsbCBub3QgaW5qZWN0IHRoZSBGUkVF WkUgb3B0aW9uIik7DQorCX0NCisNCisJaWYgKGZyZWV6ZSAmJiBjcF9pc193 ZWxsX2Zvcm1lZCkNCisJCWFocHJpbnRmKEFILCAiJS4qcyBXSVRIIChGUkVF WkUpO1xuIiwNCisJCQkJIChpbnQpIChjcF9lbmQgLSBjcCksIGNwKTsNCisJ ZWxzZQ0KKwkJYWhwcmludGYoQUgsICIlcyIsIGNwKTsNCit9DQorDQogLyoN CiAgKiBBbGxvY2F0ZSBhIG5ldyBSZXN0b3JlT3B0aW9ucyBibG9jay4NCiAg KiBUaGlzIGlzIG1haW5seSBzbyB3ZSBjYW4gaW5pdGlhbGl6ZSBpdCwgYnV0 IGFsc28gZm9yIGZ1dHVyZSBleHBhbnNpb24sDQogICovDQogUmVzdG9yZU9w dGlvbnMgKg0KIE5ld1Jlc3RvcmVPcHRpb25zKHZvaWQpDQogew0KIAlSZXN0 b3JlT3B0aW9ucyAqb3B0czsNCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1 bXAvcGdfZHVtcC5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYw0KaW5k ZXggMzc0MzJlNjZlZmQuLmZkNTc0NTdjMDgwIDEwMDY0NA0KLS0tIGEvc3Jj L2Jpbi9wZ19kdW1wL3BnX2R1bXAuYw0KKysrIGIvc3JjL2Jpbi9wZ19kdW1w L3BnX2R1bXAuYw0KQEAgLTI4MTEsMTcgKzI4MTEsMjQgQEAgZHVtcFRhYmxl RGF0YShBcmNoaXZlICpmb3V0LCBjb25zdCBUYWJsZURhdGFJbmZvICp0ZGlu Zm8pDQogCQkJCQkJICBjb3B5RnJvbSk7DQogCQl0ZERlZm4gPSBwZ19zdHJk dXAoY29weUJ1Zi0+ZGF0YSk7DQogCX0NCiAJZWxzZQ0KIAkJY29weUZyb20g PSBmbXRRdWFsaWZpZWREdW1wYWJsZSh0YmluZm8pOw0KIA0KIAlpZiAoZG9w dC0+ZHVtcF9pbnNlcnRzID09IDApDQogCXsNCi0JCS8qIER1bXAvcmVzdG9y ZSB1c2luZyBDT1BZICovDQorCQkvKg0KKwkJICogRHVtcC9yZXN0b3JlIHVz aW5nIENPUFkuDQorCQkgKg0KKwkJICogTk9URTogZG8gbm90IHVzZSBvcHRp b25zIGluIHRoZSBDT1BZIHN0YXRlbWVudCwgYXMgdGhlIHJlc3RvcmUNCisJ CSAqIHByb2Nlc3MgYXBwZW5kcyBpdHMgb3duIG9wdGlvbnMuIEluIGZhY3Qg cGdfcmVzdG9yZSBhbHdheXMgZXhwZWN0cw0KKwkJICoNCisJCSAqIENPUFkg Li4uIEZST00gc3RkaW47DQorCQkgKi8NCiAJCWR1bXBGbiA9IGR1bXBUYWJs ZURhdGFfY29weTsNCiAJCS8qIG11c3QgdXNlIDIgc3RlcHMgaGVyZSAnY2F1 c2UgZm10SWQgaXMgbm9ucmVlbnRyYW50ICovDQogCQlwcmludGZQUUV4cEJ1 ZmZlcihjb3B5QnVmLCAiQ09QWSAlcyAiLA0KIAkJCQkJCSAgY29weUZyb20p Ow0KIAkJYXBwZW5kUFFFeHBCdWZmZXIoY29weUJ1ZiwgIiVzIEZST00gc3Rk aW47XG4iLA0KIAkJCQkJCSAgZm10Q29weUNvbHVtbkxpc3QodGJpbmZvLCBj bGlzdEJ1ZikpOw0KIAkJY29weVN0bXQgPSBjb3B5QnVmLT5kYXRhOw0KIAl9 DQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX3Jlc3RvcmUuYyBi L3NyYy9iaW4vcGdfZHVtcC9wZ19yZXN0b3JlLmMNCmluZGV4IGQwOGQzOTc5 YzQxLi5jN2NmNWMxNDkwZSAxMDA2NDQNCi0tLSBhL3NyYy9iaW4vcGdfZHVt cC9wZ19yZXN0b3JlLmMNCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19yZXN0 b3JlLmMNCkBAIC0xMDksMTYgKzEwOSwxNyBAQCBtYWluKGludCBhcmdjLCBj aGFyICoqYXJndikNCiAJc3RhdGljIGludAlub19zZWN1cml0eV9sYWJlbHMg PSAwOw0KIAlzdGF0aWMgaW50CW5vX3N0YXRpc3RpY3MgPSAwOw0KIAlzdGF0 aWMgaW50CW5vX3N1YnNjcmlwdGlvbnMgPSAwOw0KIAlzdGF0aWMgaW50CXN0 cmljdF9uYW1lcyA9IDA7DQogCXN0YXRpYyBpbnQJc3RhdGlzdGljc19vbmx5 ID0gMDsNCiAJc3RhdGljIGludAl3aXRoX2RhdGEgPSAwOw0KIAlzdGF0aWMg aW50CXdpdGhfc2NoZW1hID0gMDsNCiAJc3RhdGljIGludAl3aXRoX3N0YXRp c3RpY3MgPSAwOw0KKwlzdGF0aWMgaW50CWZyZWV6ZSA9IDA7DQogDQogCXN0 cnVjdCBvcHRpb24gY21kb3B0c1tdID0gew0KIAkJeyJjbGVhbiIsIDAsIE5V TEwsICdjJ30sDQogCQl7ImNyZWF0ZSIsIDAsIE5VTEwsICdDJ30sDQogCQl7 ImRhdGEtb25seSIsIDAsIE5VTEwsICdhJ30sDQogCQl7Imdsb2JhbHMtb25s eSIsIDAsIE5VTEwsICdnJ30sDQogCQl7ImRibmFtZSIsIDEsIE5VTEwsICdk J30sDQogCQl7ImV4aXQtb24tZXJyb3IiLCAwLCBOVUxMLCAnZSd9LA0KQEAg LTE3MCwxNiArMTcxLDE3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2 KQ0KIAkJeyJuby1zdWJzY3JpcHRpb25zIiwgbm9fYXJndW1lbnQsICZub19z dWJzY3JpcHRpb25zLCAxfSwNCiAJCXsibm8tc3RhdGlzdGljcyIsIG5vX2Fy Z3VtZW50LCAmbm9fc3RhdGlzdGljcywgMX0sDQogCQl7IndpdGgtZGF0YSIs IG5vX2FyZ3VtZW50LCAmd2l0aF9kYXRhLCAxfSwNCiAJCXsid2l0aC1zY2hl bWEiLCBub19hcmd1bWVudCwgJndpdGhfc2NoZW1hLCAxfSwNCiAJCXsid2l0 aC1zdGF0aXN0aWNzIiwgbm9fYXJndW1lbnQsICZ3aXRoX3N0YXRpc3RpY3Ms IDF9LA0KIAkJeyJzdGF0aXN0aWNzLW9ubHkiLCBub19hcmd1bWVudCwgJnN0 YXRpc3RpY3Nfb25seSwgMX0sDQogCQl7ImZpbHRlciIsIHJlcXVpcmVkX2Fy Z3VtZW50LCBOVUxMLCA0fSwNCiAJCXsiZXhjbHVkZS1kYXRhYmFzZSIsIHJl cXVpcmVkX2FyZ3VtZW50LCBOVUxMLCA2fSwNCisJCXsiZnJlZXplIiwgbm9f YXJndW1lbnQsICZmcmVlemUsIDF9LA0KIA0KIAkJe05VTEwsIDAsIE5VTEws IDB9DQogCX07DQogDQogCXBnX2xvZ2dpbmdfaW5pdChhcmd2WzBdKTsNCiAJ cGdfbG9nZ2luZ19zZXRfbGV2ZWwoUEdfTE9HX1dBUk5JTkcpOw0KIAlzZXRf cGdsb2NhbGVfcGdzZXJ2aWNlKGFyZ3ZbMF0sIFBHX1RFWFRET01BSU4oInBn X2R1bXAiKSk7DQogDQpAQCAtNDYyLDE2ICs0NjQsMTcgQEAgbWFpbihpbnQg YXJnYywgY2hhciAqKmFyZ3YpDQogCW9wdHMtPm5vVGFibGVBbSA9IG91dHB1 dE5vVGFibGVBbTsNCiAJb3B0cy0+bm9UYWJsZXNwYWNlID0gb3V0cHV0Tm9U YWJsZXNwYWNlczsNCiAJb3B0cy0+dXNlX3NldHNlc3NhdXRoID0gdXNlX3Nl dHNlc3NhdXRoOw0KIAlvcHRzLT5ub19jb21tZW50cyA9IG5vX2NvbW1lbnRz Ow0KIAlvcHRzLT5ub19wb2xpY2llcyA9IG5vX3BvbGljaWVzOw0KIAlvcHRz LT5ub19wdWJsaWNhdGlvbnMgPSBub19wdWJsaWNhdGlvbnM7DQogCW9wdHMt Pm5vX3NlY3VyaXR5X2xhYmVscyA9IG5vX3NlY3VyaXR5X2xhYmVsczsNCiAJ b3B0cy0+bm9fc3Vic2NyaXB0aW9ucyA9IG5vX3N1YnNjcmlwdGlvbnM7DQor CW9wdHMtPmZyZWV6ZSA9IGZyZWV6ZTsNCiANCiAJaWYgKGlmX2V4aXN0cyAm JiAhb3B0cy0+ZHJvcFNjaGVtYSkNCiAJCXBnX2ZhdGFsKCJvcHRpb24gLS1p Zi1leGlzdHMgcmVxdWlyZXMgb3B0aW9uIC1jLy0tY2xlYW4iKTsNCiAJb3B0 cy0+aWZfZXhpc3RzID0gaWZfZXhpc3RzOw0KIAlvcHRzLT5zdHJpY3RfbmFt ZXMgPSBzdHJpY3RfbmFtZXM7DQogDQogCWlmIChvcHRzLT5mb3JtYXROYW1l KQ0KIAl7DQpAQCAtNzEwLDE2ICs3MTMsMTggQEAgdXNhZ2UoY29uc3QgY2hh ciAqcHJvZ25hbWUpDQogCQkJICIgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbWF0Y2ggYXQgbGVhc3Qgb25lIGVudGl0eSBlYWNoXG4iKSk7DQog CXByaW50ZihfKCIgIC0tdHJhbnNhY3Rpb24tc2l6ZT1OICAgICAgICAgY29t bWl0IGFmdGVyIGV2ZXJ5IE4gb2JqZWN0c1xuIikpOw0KIAlwcmludGYoXygi ICAtLXVzZS1zZXQtc2Vzc2lvbi1hdXRob3JpemF0aW9uXG4iDQogCQkJICIg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlIFNFVCBTRVNTSU9O IEFVVEhPUklaQVRJT04gY29tbWFuZHMgaW5zdGVhZCBvZlxuIg0KIAkJCSAi ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFMVEVSIE9XTkVSIGNv bW1hbmRzIHRvIHNldCBvd25lcnNoaXBcbiIpKTsNCiAJcHJpbnRmKF8oIiAg LS13aXRoLWRhdGEgICAgICAgICAgICAgICAgICBkdW1wIHRoZSBkYXRhXG4i KSk7DQogCXByaW50ZihfKCIgIC0td2l0aC1zY2hlbWEgICAgICAgICAgICAg ICAgZHVtcCB0aGUgc2NoZW1hXG4iKSk7DQogCXByaW50ZihfKCIgIC0td2l0 aC1zdGF0aXN0aWNzICAgICAgICAgICAgZHVtcCB0aGUgc3RhdGlzdGljc1xu IikpOw0KKwlwcmludGYoXygiICAtLWZyZWV6ZSAgICAgICAgICAgICAgICAg ICAgIENPUFkgRlJFRVpFIChyZWFkIHRoZSBtYW51YWwgZm9yIGNhdmVhdHMp XG4iKSk7DQorDQogDQogCXByaW50ZihfKCJcbkNvbm5lY3Rpb24gb3B0aW9u czpcbiIpKTsNCiAJcHJpbnRmKF8oIiAgLWgsIC0taG9zdD1IT1NUTkFNRSAg ICAgIGRhdGFiYXNlIHNlcnZlciBob3N0IG9yIHNvY2tldCBkaXJlY3Rvcnlc biIpKTsNCiAJcHJpbnRmKF8oIiAgLXAsIC0tcG9ydD1QT1JUICAgICAgICAg IGRhdGFiYXNlIHNlcnZlciBwb3J0IG51bWJlclxuIikpOw0KIAlwcmludGYo XygiICAtVSwgLS11c2VybmFtZT1OQU1FICAgICAgY29ubmVjdCBhcyBzcGVj aWZpZWQgZGF0YWJhc2UgdXNlclxuIikpOw0KIAlwcmludGYoXygiICAtdywg LS1uby1wYXNzd29yZCAgICAgICAgbmV2ZXIgcHJvbXB0IGZvciBwYXNzd29y ZFxuIikpOw0KIAlwcmludGYoXygiICAtVywgLS1wYXNzd29yZCAgICAgICAg ICAgZm9yY2UgcGFzc3dvcmQgcHJvbXB0IChzaG91bGQgaGFwcGVuIGF1dG9t YXRpY2FsbHkpXG4iKSk7DQogCXByaW50ZihfKCIgIC0tcm9sZT1ST0xFTkFN RSAgICAgICAgICBkbyBTRVQgUk9MRSBiZWZvcmUgcmVzdG9yZVxuIikpOw0K LS0gDQoyLjQ5LjANCg0K ---1463770111-80708404-1749516664=:87001--