Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lb04v-0000QL-8S for pgsql-hackers@arkaria.postgresql.org; Mon, 26 Apr 2021 12:11:05 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1lb04u-00060P-1k for pgsql-hackers@arkaria.postgresql.org; Mon, 26 Apr 2021 12:11:04 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lb04t-00060I-89 for pgsql-hackers@lists.postgresql.org; Mon, 26 Apr 2021 12:11:03 +0000 Received: from wforward5-smtp.messagingengine.com ([64.147.123.35]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lb04j-0005Yz-2A for pgsql-hackers@lists.postgresql.org; Mon, 26 Apr 2021 12:11:02 +0000 Received: from compute2.internal (compute2.nyi.internal [10.202.2.42]) by mailforward.west.internal (Postfix) with ESMTP id 62CBD1646; Mon, 26 Apr 2021 08:10:49 -0400 (EDT) Received: from mailfrontend1 ([10.202.2.162]) by compute2.internal (MEProxy); Mon, 26 Apr 2021 08:10:49 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to:x-me-proxy :x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm2; bh=BNAGnm WOFLIzGEgtsq1ODv8dQ3fRwmUPT2kCKOKGZIM=; b=p//5V3SYDl07eLoKXMiGx2 Dq63nRTqX3bneaSRbWOVuEWWLPTMllafnxMd7dzKjaUn3Yu81D7IH/SKj6EZ1dSB 1w+4r1Rwupbtgq3z8WZZGd07WXlcGZ2Oz4UgrC3XhEUZJj8gzol+BmQcz9qLJSRv 1Ugwj3t8FJafo26cjqwz/90WVakqVsS7FumVmM/lNrRuoDgytseIUxK51J4qHguH P7DCQC50MV6QgzzZ7NDf/rbnBgXp7dLCyPVfe0tE8/J262Dhf7YlQmPSk6RBemG5 oGGYbbZMQvL8S7w6dpJrUl6ZP6Saa9GWfDkaRMwOxmLX9XS6TSPD9Vnf8egJHRdg == X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduledrvddukedghedtucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhepuffhvfhfkffffgggjggtsehmtderredtfeejnecuhfhrohhmpefrvghtvghr ucfgihhsvghnthhrrghuthcuoehpvghtvghrrdgvihhsvghnthhrrghuthesvghnthgvrh hprhhishgvuggsrdgtohhmqeenucggtffrrghtthgvrhhnpeduveeigedutdekfeeftdel veelhfeuvdffvdfhkeefieetveeuffeujeekgeelhfenucfkphepledurddugedrvddvge druddvtdenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfhhrohhm pehpvghtvghrrdgvihhsvghnthhrrghuthesvghnthgvrhhprhhishgvuggsrdgtohhm X-ME-Proxy: Received: from laptop206oxuk.local (p5b0ee078.dip0.t-ipconnect.de [91.14.224.120]) by mail.messagingengine.com (Postfix) with ESMTPA; Mon, 26 Apr 2021 08:10:46 -0400 (EDT) Subject: Re: Dumping/restoring fails on inherited generated column From: Peter Eisentraut To: PostgreSQL Hackers Cc: Tom Lane , Masahiko Sawada , Zhihong Yu , Masahiko Sawada References: <15830.1575468847@sss.pgh.pa.us> <24369.1580758361@sss.pgh.pa.us> <3f272982-0e0d-17a1-3fb6-fedc74197676@2ndquadrant.com> <3169466.1594841366@sss.pgh.pa.us> <0f57d5e9-4112-1ba8-64d8-c02062c1e95d@postgrespro.ru> <41888c80-e5bd-f9e5-75dc-fb377113168c@2ndquadrant.com> <2808494.1611938475@sss.pgh.pa.us> <22de27f6-7096-8d96-4619-7b882932ca25@2ndquadrant.com> <0dbc982e-fbb3-911e-eb80-130494664940@2ndquadrant.com> Message-ID: Date: Mon, 26 Apr 2021 14:10:44 +0200 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0) Gecko/20100101 Thunderbird/78.10.0 MIME-Version: 1.0 In-Reply-To: <0dbc982e-fbb3-911e-eb80-130494664940@2ndquadrant.com> Content-Type: multipart/mixed; boundary="------------9A8D7BFFFDCCD2D728FF316B" Content-Language: en-US List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------9A8D7BFFFDCCD2D728FF316B Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit On 05.02.21 15:18, Peter Eisentraut wrote: > Anyway, I figured out how to take account of generation expressions with > different column orders.  I used the same approach that we use for check > constraints.  The attached patch is good to go from my perspective. Dusting this off ... this patch should go into the next minor releases. The attached patch is for master but backpatches without manual intervention to PG13 and PG12. --------------9A8D7BFFFDCCD2D728FF316B Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="v3-0001-Fix-ALTER-TABLE-INHERIT-with-generated-columns.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename*0="v3-0001-Fix-ALTER-TABLE-INHERIT-with-generated-columns.patch" RnJvbSA1YTI0ZWEwZGM4OWM4MmE4NGVmZTU5ZWY4MjU1N2I4Y2QwMTdkZWY2IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBFaXNlbnRyYXV0IDxwZXRlckBlaXNlbnRy YXV0Lm9yZz4KRGF0ZTogTW9uLCAyNiBBcHIgMjAyMSAxMzo1NDozNCArMDIwMApTdWJqZWN0 OiBbUEFUQ0ggdjNdIEZpeCBBTFRFUiBUQUJMRSAvIElOSEVSSVQgd2l0aCBnZW5lcmF0ZWQg Y29sdW1ucwoKV2hlbiBydW5uaW5nIEFMVEVSIFRBQkxFIHQyIElOSEVSSVQgdDEsIHdlIG11 c3QgY2hlY2sgdGhhdCBjb2x1bW5zIGluCnQyIHRoYXQgY29ycmVzcG9uZCB0byBhIGdlbmVy YXRlZCBjb2x1bW4gaW4gdDEgYXJlIGFsc28gZ2VuZXJhdGVkIGFuZApoYXZlIHRoZSBzYW1l IGdlbmVyYXRpb24gZXhwcmVzc2lvbi4gIE90aGVyd2lzZSwgdGhpcyB3b3VsZCBhbGxvdwpj cmVhdGluZyBzZXR1cHMgdGhhdCBhIG5vcm1hbCBDUkVBVEUgVEFCTEUgc2VxdWVuY2Ugd291 bGQgbm90IGFsbG93LgoKRGlzY3Vzc2lvbjogaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcv bWVzc2FnZS1pZC8yMmRlMjdmNi03MDk2LThkOTYtNDYxOS03Yjg4MjkzMmNhMjVAMm5kcXVh ZHJhbnQuY29tCi0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMgICAgICAg IHwgNjAgKysrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9nZW5lcmF0ZWQub3V0IHwgMjEgKysrKysrKysrCiBzcmMvdGVzdC9yZWdyZXNzL3Nx bC9nZW5lcmF0ZWQuc3FsICAgICAgfCAxNCArKysrKysKIDMgZmlsZXMgY2hhbmdlZCwgOTUg aW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxl Y21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKaW5kZXggN2QwMGY0 ZWIyNS4uMWI3YTQyODJiZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFi bGVjbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKQEAgLTE0 Mzk4LDYgKzE0Mzk4LDY2IEBAIE1lcmdlQXR0cmlidXRlc0ludG9FeGlzdGluZyhSZWxhdGlv biBjaGlsZF9yZWwsIFJlbGF0aW9uIHBhcmVudF9yZWwpCiAJCQkJCQkgZXJybXNnKCJjb2x1 bW4gXCIlc1wiIGluIGNoaWxkIHRhYmxlIG11c3QgYmUgbWFya2VkIE5PVCBOVUxMIiwKIAkJ CQkJCQkJYXR0cmlidXRlTmFtZSkpKTsKIAorCQkJLyoKKwkJCSAqIElmIHBhcmVudCBjb2x1 bW4gaXMgZ2VuZXJhdGVkLCBjaGlsZCBjb2x1bW4gbXVzdCBiZSwgdG9vLgorCQkJICovCisJ CQlpZiAoYXR0cmlidXRlLT5hdHRnZW5lcmF0ZWQgJiYgIWNoaWxkYXR0LT5hdHRnZW5lcmF0 ZWQpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfREFUQVRZ UEVfTUlTTUFUQ0gpLAorCQkJCQkJIGVycm1zZygiY29sdW1uIFwiJXNcIiBpbiBjaGlsZCB0 YWJsZSBtdXN0IGJlIGEgZ2VuZXJhdGVkIGNvbHVtbiIsCisJCQkJCQkJCWF0dHJpYnV0ZU5h bWUpKSk7CisKKwkJCS8qCisJCQkgKiBDaGVjayB0aGF0IGJvdGggZ2VuZXJhdGlvbiBleHBy ZXNzaW9ucyBtYXRjaC4KKwkJCSAqCisJCQkgKiBUaGUgdGVzdCB3ZSBhcHBseSBpcyB0byBz ZWUgd2hldGhlciB0aGV5IHJldmVyc2UtY29tcGlsZSB0byB0aGUKKwkJCSAqIHNhbWUgc291 cmNlIHN0cmluZy4gIFRoaXMgaW5zdWxhdGVzIHVzIGZyb20gaXNzdWVzIGxpa2Ugd2hldGhl cgorCQkJICogYXR0cmlidXRlcyBoYXZlIHRoZSBzYW1lIHBoeXNpY2FsIGNvbHVtbiBudW1i ZXJzIGluIHBhcmVudCBhbmQKKwkJCSAqIGNoaWxkIHJlbGF0aW9ucy4gIChTZWUgYWxzbyBj b25zdHJhaW50c19lcXVpdmFsZW50KCkuKQorCQkJICovCisJCQlpZiAoYXR0cmlidXRlLT5h dHRnZW5lcmF0ZWQgJiYgY2hpbGRhdHQtPmF0dGdlbmVyYXRlZCkKKwkJCXsKKwkJCQlUdXBs ZUNvbnN0ciAqY2hpbGRfY29uc3RyID0gY2hpbGRfcmVsLT5yZF9hdHQtPmNvbnN0cjsKKwkJ CQlUdXBsZUNvbnN0ciAqcGFyZW50X2NvbnN0ciA9IHBhcmVudF9yZWwtPnJkX2F0dC0+Y29u c3RyOworCQkJCWNoYXIJICAgKmNoaWxkX2V4cHIgPSBOVUxMOworCQkJCWNoYXIJICAgKnBh cmVudF9leHByID0gTlVMTDsKKworCQkJCUFzc2VydChjaGlsZF9jb25zdHIgIT0gTlVMTCk7 CisJCQkJQXNzZXJ0KHBhcmVudF9jb25zdHIgIT0gTlVMTCk7CisKKwkJCQlmb3IgKGludCBp ID0gMDsgaSA8IGNoaWxkX2NvbnN0ci0+bnVtX2RlZnZhbDsgaSsrKQorCQkJCXsKKwkJCQkJ aWYgKGNoaWxkX2NvbnN0ci0+ZGVmdmFsW2ldLmFkbnVtID09IGNoaWxkYXR0LT5hdHRudW0p CisJCQkJCXsKKwkJCQkJCWNoaWxkX2V4cHIgPQorCQkJCQkJCVRleHREYXR1bUdldENTdHJp bmcoRGlyZWN0RnVuY3Rpb25DYWxsMihwZ19nZXRfZXhwciwKKwkJCQkJCQkJCQkJCQkJCQkJ Q1N0cmluZ0dldFRleHREYXR1bShjaGlsZF9jb25zdHItPmRlZnZhbFtpXS5hZGJpbiksCisJ CQkJCQkJCQkJCQkJCQkJCU9iamVjdElkR2V0RGF0dW0oY2hpbGRfcmVsLT5yZF9pZCkpKTsK KwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJCUFzc2VydChjaGlsZF9leHByICE9 IE5VTEwpOworCisJCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBwYXJlbnRfY29uc3RyLT5udW1f ZGVmdmFsOyBpKyspCisJCQkJeworCQkJCQlpZiAocGFyZW50X2NvbnN0ci0+ZGVmdmFsW2ld LmFkbnVtID09IGF0dHJpYnV0ZS0+YXR0bnVtKQorCQkJCQl7CisJCQkJCQlwYXJlbnRfZXhw ciA9CisJCQkJCQkJVGV4dERhdHVtR2V0Q1N0cmluZyhEaXJlY3RGdW5jdGlvbkNhbGwyKHBn X2dldF9leHByLAorCQkJCQkJCQkJCQkJCQkJCQlDU3RyaW5nR2V0VGV4dERhdHVtKHBhcmVu dF9jb25zdHItPmRlZnZhbFtpXS5hZGJpbiksCisJCQkJCQkJCQkJCQkJCQkJCU9iamVjdElk R2V0RGF0dW0ocGFyZW50X3JlbC0+cmRfaWQpKSk7CisJCQkJCQlicmVhazsKKwkJCQkJfQor CQkJCX0KKwkJCQlBc3NlcnQocGFyZW50X2V4cHIgIT0gTlVMTCk7CisKKwkJCQlpZiAoc3Ry Y21wKGNoaWxkX2V4cHIsIHBhcmVudF9leHByKSAhPSAwKQorCQkJCQllcmVwb3J0KEVSUk9S LAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9EQVRBVFlQRV9NSVNNQVRDSCksCisJCQkJCQkg ZXJybXNnKCJjb2x1bW4gXCIlc1wiIGluIGNoaWxkIHRhYmxlIGhhcyBhIGNvbmZsaWN0aW5n IGdlbmVyYXRpb24gZXhwcmVzc2lvbiIsCisJCQkJCQkJCWF0dHJpYnV0ZU5hbWUpKSk7CisJ CQl9CisKIAkJCS8qCiAJCQkgKiBPSywgYnVtcCB0aGUgY2hpbGQgY29sdW1uJ3MgaW5oZXJp dGFuY2UgY291bnQuICAoSWYgd2UgZmFpbAogCQkJICogbGF0ZXIgb24sIHRoaXMgY2hhbmdl IHdpbGwganVzdCByb2xsIGJhY2suKQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9nZW5lcmF0ZWQub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9nZW5l cmF0ZWQub3V0CmluZGV4IGNhNzIxZDM4YmYuLjY3NTc3M2YwYzEgMTAwNjQ0Ci0tLSBhL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZ2VuZXJhdGVkLm91dAorKysgYi9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL2dlbmVyYXRlZC5vdXQKQEAgLTI4MSw2ICsyODEsMTcgQEAgU0VM RUNUICogRlJPTSBndGVzdF9ub3JtYWw7CiAgMiB8IDQKICgyIHJvd3MpCiAKK0NSRUFURSBU QUJMRSBndGVzdF9ub3JtYWxfY2hpbGQyIChhIGludCwgYiBpbnQgR0VORVJBVEVEIEFMV0FZ UyBBUyAoYSAqIDMpIFNUT1JFRCk7CitBTFRFUiBUQUJMRSBndGVzdF9ub3JtYWxfY2hpbGQy IElOSEVSSVQgZ3Rlc3Rfbm9ybWFsOworSU5TRVJUIElOVE8gZ3Rlc3Rfbm9ybWFsX2NoaWxk MiAoYSkgVkFMVUVTICgzKTsKK1NFTEVDVCAqIEZST00gZ3Rlc3Rfbm9ybWFsOworIGEgfCBi IAorLS0tKy0tLQorIDEgfCAgCisgMiB8IDQKKyAzIHwgOQorKDMgcm93cykKKwogLS0gdGVz dCBpbmhlcml0YW5jZSBtaXNtYXRjaGVzIGJldHdlZW4gcGFyZW50IGFuZCBjaGlsZAogQ1JF QVRFIFRBQkxFIGd0ZXN0eCAoeCBpbnQsIGIgaW50IEdFTkVSQVRFRCBBTFdBWVMgQVMgKGEg KiAyMikgU1RPUkVEKSBJTkhFUklUUyAoZ3Rlc3QxKTsgIC0tIGVycm9yCiBOT1RJQ0U6ICBt ZXJnaW5nIGNvbHVtbiAiYiIgd2l0aCBpbmhlcml0ZWQgZGVmaW5pdGlvbgpAQCAtMjkyLDYg KzMwMywxNiBAQCBFUlJPUjogIGNvbHVtbiAiYiIgaW5oZXJpdHMgZnJvbSBnZW5lcmF0ZWQg Y29sdW1uIGJ1dCBzcGVjaWZpZXMgZGVmYXVsdAogQ1JFQVRFIFRBQkxFIGd0ZXN0eCAoeCBp bnQsIGIgaW50IEdFTkVSQVRFRCBBTFdBWVMgQVMgSURFTlRJVFkpIElOSEVSSVRTIChndGVz dDEpOyAgLS0gZXJyb3IKIE5PVElDRTogIG1lcmdpbmcgY29sdW1uICJiIiB3aXRoIGluaGVy aXRlZCBkZWZpbml0aW9uCiBFUlJPUjogIGNvbHVtbiAiYiIgaW5oZXJpdHMgZnJvbSBnZW5l cmF0ZWQgY29sdW1uIGJ1dCBzcGVjaWZpZXMgaWRlbnRpdHkKK0NSRUFURSBUQUJMRSBndGVz dHh4XzEgKGEgaW50IE5PVCBOVUxMLCBiIGludCk7CitBTFRFUiBUQUJMRSBndGVzdHh4XzEg SU5IRVJJVCBndGVzdDE7ICAtLSBlcnJvcgorRVJST1I6ICBjb2x1bW4gImIiIGluIGNoaWxk IHRhYmxlIG11c3QgYmUgYSBnZW5lcmF0ZWQgY29sdW1uCitDUkVBVEUgVEFCTEUgZ3Rlc3R4 eF8yIChhIGludCBOT1QgTlVMTCwgYiBpbnQgR0VORVJBVEVEIEFMV0FZUyBBUyAoYSAqIDIy KSBTVE9SRUQpOworQUxURVIgVEFCTEUgZ3Rlc3R4eF8yIElOSEVSSVQgZ3Rlc3QxOyAgLS0g ZXJyb3IKK0VSUk9SOiAgY29sdW1uICJiIiBpbiBjaGlsZCB0YWJsZSBoYXMgYSBjb25mbGlj dGluZyBnZW5lcmF0aW9uIGV4cHJlc3Npb24KK0NSRUFURSBUQUJMRSBndGVzdHh4XzMgKGEg aW50IE5PVCBOVUxMLCBiIGludCBHRU5FUkFURUQgQUxXQVlTIEFTIChhICogMikgU1RPUkVE KTsKK0FMVEVSIFRBQkxFIGd0ZXN0eHhfMyBJTkhFUklUIGd0ZXN0MTsgIC0tIG9rCitDUkVB VEUgVEFCTEUgZ3Rlc3R4eF80IChiIGludCBHRU5FUkFURUQgQUxXQVlTIEFTIChhICogMikg U1RPUkVELCBhIGludCBOT1QgTlVMTCk7CitBTFRFUiBUQUJMRSBndGVzdHh4XzQgSU5IRVJJ VCBndGVzdDE7ICAtLSBvawogLS0gdGVzdCBtdWx0aXBsZSBpbmhlcml0YW5jZSBtaXNtYXRj aGVzCiBDUkVBVEUgVEFCTEUgZ3Rlc3R5ICh4IGludCwgYiBpbnQpOwogQ1JFQVRFIFRBQkxF IGd0ZXN0MV8yICgpIElOSEVSSVRTIChndGVzdDEsIGd0ZXN0eSk7ICAtLSBlcnJvcgpkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZ2VuZXJhdGVkLnNxbCBiL3NyYy90ZXN0 L3JlZ3Jlc3Mvc3FsL2dlbmVyYXRlZC5zcWwKaW5kZXggYmQyYjBiZmFhYS4uNjMyNTFjNDQz YSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZ2VuZXJhdGVkLnNxbAorKysg Yi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9nZW5lcmF0ZWQuc3FsCkBAIC0xMTMsMTEgKzExMywy NSBAQCBDUkVBVEUgVEFCTEUgZ3Rlc3Rfbm9ybWFsX2NoaWxkIChhIGludCwgYiBpbnQgR0VO RVJBVEVEIEFMV0FZUyBBUyAoYSAqIDIpIFNUT1JFRAogSU5TRVJUIElOVE8gZ3Rlc3Rfbm9y bWFsX2NoaWxkIChhKSBWQUxVRVMgKDIpOwogU0VMRUNUICogRlJPTSBndGVzdF9ub3JtYWw7 CiAKK0NSRUFURSBUQUJMRSBndGVzdF9ub3JtYWxfY2hpbGQyIChhIGludCwgYiBpbnQgR0VO RVJBVEVEIEFMV0FZUyBBUyAoYSAqIDMpIFNUT1JFRCk7CitBTFRFUiBUQUJMRSBndGVzdF9u b3JtYWxfY2hpbGQyIElOSEVSSVQgZ3Rlc3Rfbm9ybWFsOworSU5TRVJUIElOVE8gZ3Rlc3Rf bm9ybWFsX2NoaWxkMiAoYSkgVkFMVUVTICgzKTsKK1NFTEVDVCAqIEZST00gZ3Rlc3Rfbm9y bWFsOworCiAtLSB0ZXN0IGluaGVyaXRhbmNlIG1pc21hdGNoZXMgYmV0d2VlbiBwYXJlbnQg YW5kIGNoaWxkCiBDUkVBVEUgVEFCTEUgZ3Rlc3R4ICh4IGludCwgYiBpbnQgR0VORVJBVEVE IEFMV0FZUyBBUyAoYSAqIDIyKSBTVE9SRUQpIElOSEVSSVRTIChndGVzdDEpOyAgLS0gZXJy b3IKIENSRUFURSBUQUJMRSBndGVzdHggKHggaW50LCBiIGludCBERUZBVUxUIDEwKSBJTkhF UklUUyAoZ3Rlc3QxKTsgIC0tIGVycm9yCiBDUkVBVEUgVEFCTEUgZ3Rlc3R4ICh4IGludCwg YiBpbnQgR0VORVJBVEVEIEFMV0FZUyBBUyBJREVOVElUWSkgSU5IRVJJVFMgKGd0ZXN0MSk7 ICAtLSBlcnJvcgogCitDUkVBVEUgVEFCTEUgZ3Rlc3R4eF8xIChhIGludCBOT1QgTlVMTCwg YiBpbnQpOworQUxURVIgVEFCTEUgZ3Rlc3R4eF8xIElOSEVSSVQgZ3Rlc3QxOyAgLS0gZXJy b3IKK0NSRUFURSBUQUJMRSBndGVzdHh4XzIgKGEgaW50IE5PVCBOVUxMLCBiIGludCBHRU5F UkFURUQgQUxXQVlTIEFTIChhICogMjIpIFNUT1JFRCk7CitBTFRFUiBUQUJMRSBndGVzdHh4 XzIgSU5IRVJJVCBndGVzdDE7ICAtLSBlcnJvcgorQ1JFQVRFIFRBQkxFIGd0ZXN0eHhfMyAo YSBpbnQgTk9UIE5VTEwsIGIgaW50IEdFTkVSQVRFRCBBTFdBWVMgQVMgKGEgKiAyKSBTVE9S RUQpOworQUxURVIgVEFCTEUgZ3Rlc3R4eF8zIElOSEVSSVQgZ3Rlc3QxOyAgLS0gb2sKK0NS RUFURSBUQUJMRSBndGVzdHh4XzQgKGIgaW50IEdFTkVSQVRFRCBBTFdBWVMgQVMgKGEgKiAy KSBTVE9SRUQsIGEgaW50IE5PVCBOVUxMKTsKK0FMVEVSIFRBQkxFIGd0ZXN0eHhfNCBJTkhF UklUIGd0ZXN0MTsgIC0tIG9rCisKIC0tIHRlc3QgbXVsdGlwbGUgaW5oZXJpdGFuY2UgbWlz bWF0Y2hlcwogQ1JFQVRFIFRBQkxFIGd0ZXN0eSAoeCBpbnQsIGIgaW50KTsKIENSRUFURSBU QUJMRSBndGVzdDFfMiAoKSBJTkhFUklUUyAoZ3Rlc3QxLCBndGVzdHkpOyAgLS0gZXJyb3IK CmJhc2UtY29tbWl0OiA2ZDJlODdhMDc3YjNjMjM5NGU0YWRiOGViMjI2YjNkY2ZlM2YzMzQ2 Ci0tIAoyLjMxLjEKCg== --------------9A8D7BFFFDCCD2D728FF316B--