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.98.2) (envelope-from ) id 1x9J1G-00000001uNH-1QUR for pgsql-hackers@arkaria.postgresql.org; Wed, 23 Sep 2026 09:12:03 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.98.2) (envelope-from ) id 1x9J1F-0000000481O-17EG for pgsql-hackers@arkaria.postgresql.org; Wed, 23 Sep 2026 09:12:01 +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.98.2) (envelope-from ) id 1x9J1E-0000000481E-3860 for pgsql-hackers@lists.postgresql.org; Wed, 23 Sep 2026 09:12:00 +0000 Received: from mail.postgrespro.ru ([93.174.132.70]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1x9J1B-00000000qdc-3V8O for pgsql-hackers@lists.postgresql.org; Wed, 23 Sep 2026 09:12:00 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mx2023; t=1790154716; bh=Gf9A3YFC4FxYeYREdIe6hna77+fSXZTWWntl0rU/d+Y=; h=Date:From:To:Cc:Subject:In-Reply-To:References:Message-ID:From; b=atYiVbL2eymMo6vk9feI9yEUxQR/sZapt77Hnd0j5i84XpKUn4jh61jX2zW4JaWNu d/4/vzK/CjFr7WpTP0BjD970p1SjBFazUfv0xqJT1m2Y2pbepTtMsP3nuFxIJfdGSD C+qkdUKP6MXxJT+iaqyaokVVb7UslR6EFUq3JaXGFnChxZW3zq35/VI0qqI/kHtpwh SoPNfrKC53ebP6fTgivU3IH/H15kH6YZn0HH6dsCx5rg3JxNSpMAEGjphB7WqQiBxr 8lX3+ud0hoU611jdupZmh7XTEBG5ef2J8+2q+Ugs/6DzGVZiAA7oa1zZ0/eBdc4UzC hyAlcQppLvl2Q== Received: from mail.l.postgrespro.ru (webmail-master-mstn.l.postgrespro.ru [192.168.2.26]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (Client did not present a certificate) (Authenticated sender: g.kashkin@postgrespro.ru) by mail.postgrespro.ru (Postfix/587) with ESMTPSA id 2149C6051C; Wed, 23 Sep 2026 12:11:56 +0300 (MSK) MIME-Version: 1.0 Date: Wed, 23 Sep 2026 12:11:56 +0300 From: Gleb Kashkin To: Alexander Pyhalov Cc: PostgreSQL Hackers Subject: Re: Parameterized append subpaths In-Reply-To: <588d117fb042bbae3a6e7b4379ab8ec7@postgrespro.ru> References: <588d117fb042bbae3a6e7b4379ab8ec7@postgrespro.ru> Message-ID: <98f84e7438c5b78a5a1c77539ffc7e0b@postgrespro.ru> X-Sender: g.kashkin@postgrespro.ru Content-Type: multipart/mixed; boundary="=_b565b0ed887bac9e4e5a814d54a51796" X-KSMG-AntiPhishing: NotDetected X-KSMG-AntiSpam-Interceptor-Info: not scanned X-KSMG-AntiSpam-Status: not scanned, disabled by settings X-KSMG-AntiVirus: Kaspersky Secure Mail Gateway, version 3.0.0.9059, bases: 2026/09/23 05:44:00 #28613559 X-KSMG-AntiVirus-Status: NotDetected, skipped X-KSMG-LinksScanning: not scanned, disabled by settings X-KSMG-Message-Action: skipped X-KSMG-Rule-ID: 1 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=_b565b0ed887bac9e4e5a814d54a51796 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8; format=flowed Alexander Pyhalov писал(а) 2026-09-09 10:51: > There's a (likely well known) add_path() issue - it can remove the > path, which otherwise would be useful in the future Hi! We found another way to address the issue. It could be better suited for current path selection model: Instead of keeping all parameterized foreign paths, we could re-parameterize the ones that were left after add_path() domination, as is already done with other path types. This requires a new FDW interface function, but allows to keep current path domination logic and build additional foreign paths only when they are truly required, like in parametrized NestLoop. The first attached patch implements path reparameterization in postgres_fwd and adds it to reparameterize_path(). The second patch is optional, it adds a cache for parameterized paths in postgres_fdw, so there is no excessive roundtrip for remote estimate EXPLAIN for paths that have already been costed and rejected. -- Best regards, Gleb Kashkin, Postgres Professional --=_b565b0ed887bac9e4e5a814d54a51796 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=0001-Allow-FDWs-to-reparameterize-foreign-scan-paths.patch Content-Disposition: attachment; filename=0001-Allow-FDWs-to-reparameterize-foreign-scan-paths.patch; size=17220 RnJvbSBhYWMyNTM5MjdhOGI2NWQxZDA4ZTI3YTFhMmJjZTRjOTMyMGRjNTdlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHbGViIEthc2hraW4gPGcua2FzaGtpbkBwb3N0Z3Jlc3Byby5y dT4KRGF0ZTogVHVlLCAyMiBTZXAgMjAyNiAxNzoyOTo0MyArMDMwMApTdWJqZWN0OiBbUEFUQ0gg MS8yXSBBbGxvdyBGRFdzIHRvIHJlcGFyYW1ldGVyaXplIGZvcmVpZ24gc2NhbiBwYXRocwoKV2hl biBidWlsZGluZyBhIHBhcmFtZXRlcml6ZWQgQXBwZW5kIG92ZXIgYSBwYXJ0aXRpb25lZCB0YWJs ZSwgZXZlcnkKY2hpbGQgbXVzdCBoYXZlIGEgcGF0aCB3aXRoIGV4YWN0bHkgdGhlIHJlcXVlc3Rl ZCBwYXJhbWV0ZXJpemF0aW9uLgpGb3IgbG9jYWwgc2NhbnMsIGdldF9jaGVhcGVzdF9wYXJhbWV0 ZXJpemVkX2NoaWxkX3BhdGgoKSBjYW4gb2J0YWluIG9uZQpieSBjYWxsaW5nIHJlcGFyYW1ldGVy aXplX3BhdGgoKSBvbiBhbiBleGlzdGluZyBwYXRoLCBidXQgZm9yZWlnbiBwYXRocwp3ZXJlIG5v dCBoYW5kbGVkIHRoZXJlLCBiZWNhdXNlIGNvcmUgaGFzIG5vIHdheSB0byBjb3N0IGEgZm9yZWln biBzY2FuLgpTbyBpZiBhZGRfcGF0aCgpIGhhZCBkaXNjYXJkZWQgYSBmb3JlaWduIHBhcnRpdGlv bidzIHBhcmFtZXRlcml6ZWQgcGF0aAooZS5nLiBiZWNhdXNlIHRoZSBwYXJ0aXRpb24gaXMgZW1w dHkgYW5kIHRoZSBwYXRoIHdhcyBkb21pbmF0ZWQgYnkgdGhlCnVucGFyYW1ldGVyaXplZCBvbmUp LCBubyBwYXJhbWV0ZXJpemVkIEFwcGVuZCBjb3VsZCBiZSBidWlsdCBhdCBhbGwgYW5kCnRoZSBw bGFubmVyIHdhcyBmb3JjZWQgaW50byBhIGhhc2ggb3IgbWVyZ2Ugam9pbiBldmVuIHdoZW4gYQpw YXJhbWV0ZXJpemVkIG5lc3Rsb29wIHdvdWxkIGhhdmUgYmVlbiBmYXIgY2hlYXBlci4KCkFkZCBh biBvcHRpb25hbCBSZXBhcmFtZXRlcml6ZUZvcmVpZ25QYXRoIGNhbGxiYWNrIHRvIEZkd1JvdXRp bmUsIHdoaWNoCnJlcGFyYW1ldGVyaXplX3BhdGgoKSBpbnZva2VzIGZvciBmb3JlaWduIHBhdGhz IG9mIHNpbXBsZSByZWxhdGlvbnMsIGFuZAppbXBsZW1lbnQgaXQgaW4gcG9zdGdyZXNfZmR3OiB0 aGUgY2FsbGJhY2sgbG9va3MgdXAgdGhlIFBhcmFtUGF0aEluZm8KZm9yIHRoZSByZXF1ZXN0ZWQg b3V0ZXIgcmVscywgY29zdHMgaXRzIGNsYXVzZXMgdGhlIHNhbWUgd2F5CnBvc3RncmVzR2V0Rm9y ZWlnblBhdGhzKCkgZG9lcywgYW5kIHJldHVybnMgYSBuZXcgdW5zb3J0ZWQgcGFyYW1ldGVyaXpl ZApGb3JlaWduUGF0aC4KLS0tCiAuLi4vcG9zdGdyZXNfZmR3L2V4cGVjdGVkL3Bvc3RncmVzX2Zk dy5vdXQgICAgfCAxMDMgKysrKysrKysrKysrKysrKysrCiBjb250cmliL3Bvc3RncmVzX2Zkdy9w b3N0Z3Jlc19mZHcuYyAgICAgICAgICAgfCAgNzIgKysrKysrKysrKysrCiBjb250cmliL3Bvc3Rn cmVzX2Zkdy9zcWwvcG9zdGdyZXNfZmR3LnNxbCAgICAgfCAgNDkgKysrKysrKysrCiBkb2Mvc3Jj L3NnbWwvZmR3aGFuZGxlci5zZ21sICAgICAgICAgICAgICAgICAgfCAgMzUgKysrKystCiBzcmMv YmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jICAgICAgICAgfCAgMTEgKysKIHNyYy9p bmNsdWRlL2ZvcmVpZ24vZmR3YXBpLmggICAgICAgICAgICAgICAgICB8ICAgNCArCiA2IGZpbGVz IGNoYW5nZWQsIDI3MyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEv Y29udHJpYi9wb3N0Z3Jlc19mZHcvZXhwZWN0ZWQvcG9zdGdyZXNfZmR3Lm91dCBiL2NvbnRyaWIv cG9zdGdyZXNfZmR3L2V4cGVjdGVkL3Bvc3RncmVzX2Zkdy5vdXQKaW5kZXggZTkwMjg5ZTRhYjEu LmU2YjE3ODAwZmU1IDEwMDY0NAotLS0gYS9jb250cmliL3Bvc3RncmVzX2Zkdy9leHBlY3RlZC9w b3N0Z3Jlc19mZHcub3V0CisrKyBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3L2V4cGVjdGVkL3Bvc3Rn cmVzX2Zkdy5vdXQKQEAgLTQ1ODEsNiArNDU4MSwxMDkgQEAgUkVJTkRFWCBUQUJMRSByZWluZF9m ZHdfcGFyZW50OyAtLSBvawogUkVJTkRFWCBUQUJMRSBDT05DVVJSRU5UTFkgcmVpbmRfZmR3X3Bh cmVudDsgLS0gb2sKIERST1AgVEFCTEUgcmVpbmRfZmR3X3BhcmVudDsKIC0tID09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K Ky0tIHBhcmFtZXRlcml6ZWQgQXBwZW5kIHBhdGhzIG92ZXIgZm9yZWlnbiBwYXJ0aXRpb25zCist LSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09CistLSBXaXRoIHVzZV9yZW1vdGVfZXN0aW1hdGUsIGVhY2ggZm9yZWlnbiBw YXJ0aXRpb24gZ2V0cyBhIHBhdGggcGFyYW1ldGVyaXplZAorLS0gYnkgdGhlIGpvaW4gY2xhdXNl LiAgSWYgYWRkX3BhdGgoKSBkaXNjYXJkcyB0aGF0IHBhdGggZm9yIHNvbWUgcGFydGl0aW9uCist LSAoaGVyZTogYmVjYXVzZSB0aGUgcGFydGl0aW9uIGlzIGVtcHR5LCBzbyB0aGUgcGFyYW1ldGVy aXplZCBwYXRoIGlzCistLSBkb21pbmF0ZWQgYnkgdGhlIHVucGFyYW1ldGVyaXplZCBvbmUpLCB0 aGUgcGxhbm5lciBtdXN0IHN0aWxsIGJlIGFibGUgdG8KKy0tIGJ1aWxkIGEgcGFyYW1ldGVyaXpl ZCBBcHBlbmQgYnkgcmVwYXJhbWV0ZXJpemluZyB0aGUgc3Vydml2aW5nIHBhdGguCitDUkVBVEUg VEFCTEUgcGFfbG9jMSAoYSBpbnQpOworQ1JFQVRFIFRBQkxFIHBhX2xvYzIgKGEgaW50KTsKK0NS RUFURSBJTkRFWCBPTiBwYV9sb2MxIChhKTsKK0NSRUFURSBJTkRFWCBPTiBwYV9sb2MyIChhKTsK K0NSRUFURSBUQUJMRSBwYV9wYXJlbnQgKGEgaW50KSBQQVJUSVRJT04gQlkgSEFTSCAoYSk7CitD UkVBVEUgRk9SRUlHTiBUQUJMRSBwYV9mMSBQQVJUSVRJT04gT0YgcGFfcGFyZW50CisgIEZPUiBW QUxVRVMgV0lUSCAoTU9EVUxVUyAyLCBSRU1BSU5ERVIgMCkKKyAgU0VSVkVSIGxvb3BiYWNrIE9Q VElPTlMgKHRhYmxlX25hbWUgJ3BhX2xvYzEnLCB1c2VfcmVtb3RlX2VzdGltYXRlICd0cnVlJyk7 CitDUkVBVEUgRk9SRUlHTiBUQUJMRSBwYV9mMiBQQVJUSVRJT04gT0YgcGFfcGFyZW50CisgIEZP UiBWQUxVRVMgV0lUSCAoTU9EVUxVUyAyLCBSRU1BSU5ERVIgMSkKKyAgU0VSVkVSIGxvb3BiYWNr IE9QVElPTlMgKHRhYmxlX25hbWUgJ3BhX2xvYzInLCB1c2VfcmVtb3RlX2VzdGltYXRlICd0cnVl Jyk7CitJTlNFUlQgSU5UTyBwYV9sb2MxIFNFTEVDVCBnIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEs IDEwMDAwMCkgZworICBXSEVSRSBzYXRpc2ZpZXNfaGFzaF9wYXJ0aXRpb24oJ3BhX3BhcmVudCc6 OnJlZ2NsYXNzLCAyLCAwLCBnKTsKK0lOU0VSVCBJTlRPIHBhX2xvYzIgU0VMRUNUIGcgRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMDAwKSBnCisgIFdIRVJFIHNhdGlzZmllc19oYXNoX3BhcnRp dGlvbigncGFfcGFyZW50Jzo6cmVnY2xhc3MsIDIsIDEsIGcpOworQ1JFQVRFIFRBQkxFIHBhX291 dGVyIChhIGludCk7CitJTlNFUlQgSU5UTyBwYV9vdXRlciBWQUxVRVMgKDEpOworQU5BTFlaRSBw YV9sb2MxOworQU5BTFlaRSBwYV9sb2MyOworQU5BTFlaRSBwYV9mMTsKK0FOQUxZWkUgcGFfZjI7 CitBTkFMWVpFIHBhX291dGVyOworRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNU ICogRlJPTSBwYV9vdXRlciBvIEpPSU4gcGFfcGFyZW50IHAgT04gcC5hID0gby5hOworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBM b29wCisgICBPdXRwdXQ6IG8uYSwgcC5hCisgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLnBhX291 dGVyIG8KKyAgICAgICAgIE91dHB1dDogby5hCisgICAtPiAgQXBwZW5kCisgICAgICAgICAtPiAg Rm9yZWlnbiBTY2FuIG9uIHB1YmxpYy5wYV9mMSBwXzEKKyAgICAgICAgICAgICAgIE91dHB1dDog cF8xLmEKKyAgICAgICAgICAgICAgIFJlbW90ZSBTUUw6IFNFTEVDVCBhIEZST00gcHVibGljLnBh X2xvYzEgV0hFUkUgKChhID0gJDE6OmludGVnZXIpKQorICAgICAgICAgLT4gIEZvcmVpZ24gU2Nh biBvbiBwdWJsaWMucGFfZjIgcF8yCisgICAgICAgICAgICAgICBPdXRwdXQ6IHBfMi5hCisgICAg ICAgICAgICAgICBSZW1vdGUgU1FMOiBTRUxFQ1QgYSBGUk9NIHB1YmxpYy5wYV9sb2MyIFdIRVJF ICgoYSA9ICQxOjppbnRlZ2VyKSkKKygxMSByb3dzKQorCistLSBFbXB0eSBvbmUgcGFydGl0aW9u OyBpdHMgcGFyYW1ldGVyaXplZCBwYXRoIGlzIG5vdyBkb21pbmF0ZWQgYW5kIGRyb3BwZWQuCitE RUxFVEUgRlJPTSBwYV9mMjsKK0FOQUxZWkUgcGFfbG9jMjsKK0FOQUxZWkUgcGFfZjI7CitFWFBM QUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHBhX291dGVyIG8gSk9JTiBw YV9wYXJlbnQgcCBPTiBwLmEgPSBvLmE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIE91dHB1dDogby5hLCBwLmEK KyAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMucGFfb3V0ZXIgbworICAgICAgICAgT3V0cHV0OiBv LmEKKyAgIC0+ICBBcHBlbmQKKyAgICAgICAgIC0+ICBGb3JlaWduIFNjYW4gb24gcHVibGljLnBh X2YxIHBfMQorICAgICAgICAgICAgICAgT3V0cHV0OiBwXzEuYQorICAgICAgICAgICAgICAgUmVt b3RlIFNRTDogU0VMRUNUIGEgRlJPTSBwdWJsaWMucGFfbG9jMSBXSEVSRSAoKGEgPSAkMTo6aW50 ZWdlcikpCisgICAgICAgICAtPiAgRm9yZWlnbiBTY2FuIG9uIHB1YmxpYy5wYV9mMiBwXzIKKyAg ICAgICAgICAgICAgIE91dHB1dDogcF8yLmEKKyAgICAgICAgICAgICAgIFJlbW90ZSBTUUw6IFNF TEVDVCBhIEZST00gcHVibGljLnBhX2xvYzIgV0hFUkUgKChhID0gJDE6OmludGVnZXIpKQorKDEx IHJvd3MpCisKK1NFTEVDVCAqIEZST00gcGFfb3V0ZXIgbyBKT0lOIHBhX3BhcmVudCBwIE9OIHAu YSA9IG8uYTsKKyBhIHwgYSAKKy0tLSstLS0KKyAxIHwgMQorKDEgcm93KQorCistLSBPbmNlIHRo ZSByZW1vdGUgdGFibGUgaXMga25vd24gdG8gYmUgZW1wdHksIHRoZSBzb3J0ZWQgYW5kIHVuc29y dGVkIHBsYWluCistLSBzY2FucyBhcmUgZnV6emlseSBlcXVhbCBpbiBjb3N0LCBzbyBvbmx5IHRo ZSBzb3J0ZWQgb25lIHN1cnZpdmVzOyB3ZSBtdXN0CistLSBiZSBhYmxlIHRvIHJlcGFyYW1ldGVy aXplIHRoYXQgb25lLCB0b28uCitWQUNVVU0gQU5BTFlaRSBwYV9sb2MyOworQU5BTFlaRSBwYV9m MjsKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gcGFfb3V0ZXIg byBKT0lOIHBhX3BhcmVudCBwIE9OIHAuYSA9IG8uYTsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgT3V0cHV0OiBv LmEsIHAuYQorICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5wYV9vdXRlciBvCisgICAgICAgICBP dXRwdXQ6IG8uYQorICAgLT4gIEFwcGVuZAorICAgICAgICAgLT4gIEZvcmVpZ24gU2NhbiBvbiBw dWJsaWMucGFfZjEgcF8xCisgICAgICAgICAgICAgICBPdXRwdXQ6IHBfMS5hCisgICAgICAgICAg ICAgICBSZW1vdGUgU1FMOiBTRUxFQ1QgYSBGUk9NIHB1YmxpYy5wYV9sb2MxIFdIRVJFICgoYSA9 ICQxOjppbnRlZ2VyKSkKKyAgICAgICAgIC0+ICBGb3JlaWduIFNjYW4gb24gcHVibGljLnBhX2Yy IHBfMgorICAgICAgICAgICAgICAgT3V0cHV0OiBwXzIuYQorICAgICAgICAgICAgICAgUmVtb3Rl IFNRTDogU0VMRUNUIGEgRlJPTSBwdWJsaWMucGFfbG9jMiBXSEVSRSAoKGEgPSAkMTo6aW50ZWdl cikpCisoMTEgcm93cykKKworU0VMRUNUICogRlJPTSBwYV9vdXRlciBvIEpPSU4gcGFfcGFyZW50 IHAgT04gcC5hID0gby5hOworIGEgfCBhIAorLS0tKy0tLQorIDEgfCAxCisoMSByb3cpCisKK0RS T1AgVEFCTEUgcGFfcGFyZW50LCBwYV9vdXRlciwgcGFfbG9jMSwgcGFfbG9jMjsKKy0tID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KIC0tIGNvbnZlcnNpb24gZXJyb3IKIC0tID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIEFMVEVSIEZPUkVJR04g VEFCTEUgZnQxIEFMVEVSIENPTFVNTiBjOCBUWVBFIGludDsKZGlmZiAtLWdpdCBhL2NvbnRyaWIv cG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5jIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdy ZXNfZmR3LmMKaW5kZXggMGE1ODlmOGRiNzQuLjkyOWRkMTI5NDgwIDEwMDY0NAotLS0gYS9jb250 cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYworKysgYi9jb250cmliL3Bvc3RncmVzX2Zk dy9wb3N0Z3Jlc19mZHcuYwpAQCAtNTkzLDYgKzU5Myw5IEBAIHN0YXRpYyB2b2lkIHBvc3RncmVz R2V0Rm9yZWlnbkpvaW5QYXRocyhQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJCQlSZWxPcHRJ bmZvICppbm5lcnJlbCwKIAkJCQkJCQkJCQlKb2luVHlwZSBqb2ludHlwZSwKIAkJCQkJCQkJCQlK b2luUGF0aEV4dHJhRGF0YSAqZXh0cmEpOworc3RhdGljIFBhdGggKnBvc3RncmVzUmVwYXJhbWV0 ZXJpemVGb3JlaWduUGF0aChQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkJCQkJICAgRm9yZWln blBhdGggKnBhdGgsCisJCQkJCQkJCQkJCSAgIFJlbGlkcyByZXF1aXJlZF9vdXRlcik7CiBzdGF0 aWMgYm9vbCBwb3N0Z3Jlc1JlY2hlY2tGb3JlaWduU2NhbihGb3JlaWduU2NhblN0YXRlICpub2Rl LAogCQkJCQkJCQkJICAgVHVwbGVUYWJsZVNsb3QgKnNsb3QpOwogc3RhdGljIHZvaWQgcG9zdGdy ZXNHZXRGb3JlaWduVXBwZXJQYXRocyhQbGFubmVySW5mbyAqcm9vdCwKQEAgLTgyMSw2ICs4MjQs OSBAQCBwb3N0Z3Jlc19mZHdfaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCS8qIFN1cHBvcnQg ZnVuY3Rpb25zIGZvciB1cHBlciByZWxhdGlvbiBwdXNoLWRvd24gKi8KIAlyb3V0aW5lLT5HZXRG b3JlaWduVXBwZXJQYXRocyA9IHBvc3RncmVzR2V0Rm9yZWlnblVwcGVyUGF0aHM7CiAKKwkvKiBT dXBwb3J0IGZ1bmN0aW9ucyBmb3IgcGF0aCByZXBhcmFtZXRlcml6YXRpb24gKi8KKwlyb3V0aW5l LT5SZXBhcmFtZXRlcml6ZUZvcmVpZ25QYXRoID0gcG9zdGdyZXNSZXBhcmFtZXRlcml6ZUZvcmVp Z25QYXRoOworCiAJLyogU3VwcG9ydCBmdW5jdGlvbnMgZm9yIGFzeW5jaHJvbm91cyBleGVjdXRp b24gKi8KIAlyb3V0aW5lLT5Jc0ZvcmVpZ25QYXRoQXN5bmNDYXBhYmxlID0gcG9zdGdyZXNJc0Zv cmVpZ25QYXRoQXN5bmNDYXBhYmxlOwogCXJvdXRpbmUtPkZvcmVpZ25Bc3luY1JlcXVlc3QgPSBw b3N0Z3Jlc0ZvcmVpZ25Bc3luY1JlcXVlc3Q7CkBAIC0xNDM4LDYgKzE0NDQsNzIgQEAgcG9zdGdy ZXNHZXRGb3JlaWduUGF0aHMoUGxhbm5lckluZm8gKnJvb3QsCiAJfQogfQogCisvKgorICogcG9z dGdyZXNSZXBhcmFtZXRlcml6ZUZvcmVpZ25QYXRoCisgKgkJQnVpbGQgYSB2ZXJzaW9uIG9mIGEg YmFzZS1yZWxhdGlvbiBmb3JlaWduIHNjYW4gcGF0aCB0aGF0IGlzCisgKgkJcGFyYW1ldGVyaXpl ZCBieSByZXF1aXJlZF9vdXRlciwgaS5lLiB0aGF0IGFkZGl0aW9uYWxseSBlbmZvcmNlcyB0aGUK KyAqCQlqb2luIGNsYXVzZXMgYXZhaWxhYmxlIGZyb20gdGhvc2UgcmVsYXRpb25zLgorICovCitz dGF0aWMgUGF0aCAqCitwb3N0Z3Jlc1JlcGFyYW1ldGVyaXplRm9yZWlnblBhdGgoUGxhbm5lcklu Zm8gKnJvb3QsIEZvcmVpZ25QYXRoICpwYXRoLAorCQkJCQkJCQkgIFJlbGlkcyByZXF1aXJlZF9v dXRlcikKK3sKKwlSZWxPcHRJbmZvICpiYXNlcmVsID0gcGF0aC0+cGF0aC5wYXJlbnQ7CisJUGdG ZHdSZWxhdGlvbkluZm8gKmZwaW5mbyA9IChQZ0Zkd1JlbGF0aW9uSW5mbyAqKSBiYXNlcmVsLT5m ZHdfcHJpdmF0ZTsKKwlQYXJhbVBhdGhJbmZvICpwYXJhbV9pbmZvOworCWRvdWJsZQkJcm93czsK KwlpbnQJCQl3aWR0aDsKKwlpbnQJCQlkaXNhYmxlZF9ub2RlczsKKwlDb3N0CQlzdGFydHVwX2Nv c3Q7CisJQ29zdAkJdG90YWxfY29zdDsKKworCUFzc2VydChJU19TSU1QTEVfUkVMKGJhc2VyZWwp KTsKKworCS8qCisJICogTm8gd2F5IHRvIGdldCBhIGdvb2QgZXN0aW1hdGUgb24gcHVzaGVkIGRv d24gY2xhdXNlcywgZG9uJ3QgYnVpbGQKKwkgKiBwYXJhbWV0ZXJpemVkIHBhdGhzLgorCSAqLwor CWlmICghZnBpbmZvLT51c2VfcmVtb3RlX2VzdGltYXRlKQorCQlyZXR1cm4gTlVMTDsKKworCS8q CisJICogV2UgZG9uJ3Qga25vdyBob3cgdG8gY2FycnkgYW4gRVBRIHN1YnBsYW4gYWxvbmcsIGJ1 dCBiYXNlLXJlbGF0aW9uCisJICogcGF0aHMgbmV2ZXIgaGF2ZSBvbmUgYW55d2F5LgorCSAqLwor CWlmIChwYXRoLT5mZHdfb3V0ZXJwYXRoICE9IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJLyoK KwkgKiBOb3RlIHRoYXQgd2UgaWdub3JlIHRoZSBnaXZlbiBwYXRoJ3MgcGF0aGtleXMgYW5kIGFs d2F5cyBwcm9kdWNlIGFuCisJICogdW5zb3J0ZWQgcGF0aC4gQSBwYXJhbWV0ZXJpemVkIHBhdGgg aXMgb25seSBldmVyIHVzZWQgb24gdGhlIGluc2lkZQorCSAqIG9mIGEgTmVzdExvb3AsIHdoZXJl IGl0cyBvcmRlcmluZyBpcyBvZiBubyBpbnRlcmVzdC4KKwkgKi8KKworCXBhcmFtX2luZm8gPSBn ZXRfYmFzZXJlbF9wYXJhbXBhdGhpbmZvKHJvb3QsIGJhc2VyZWwsIHJlcXVpcmVkX291dGVyKTsK KwlpZiAocGFyYW1faW5mbyA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsJCQkvKiBzaG91bGRuJ3Qg aGFwcGVuICovCisKKwkvKiBHZXQgYSBjb3N0IGVzdGltYXRlIGZyb20gdGhlIHJlbW90ZSAqLwor CWVzdGltYXRlX3BhdGhfY29zdF9zaXplKHJvb3QsIGJhc2VyZWwsCisJCQkJCQkJcGFyYW1faW5m by0+cHBpX2NsYXVzZXMsIE5JTCwgTlVMTCwKKwkJCQkJCQkmcm93cywgJndpZHRoLCAmZGlzYWJs ZWRfbm9kZXMsCisJCQkJCQkJJnN0YXJ0dXBfY29zdCwgJnRvdGFsX2Nvc3QpOworCisJcGFyYW1f aW5mby0+cHBpX3Jvd3MgPSByb3dzOworCisJcmV0dXJuIChQYXRoICopIGNyZWF0ZV9mb3JlaWdu c2Nhbl9wYXRoKHJvb3QsIGJhc2VyZWwsCisJCQkJCQkJCQkJCU5VTEwsCS8qIGRlZmF1bHQgcGF0 aHRhcmdldCAqLworCQkJCQkJCQkJCQlyb3dzLAorCQkJCQkJCQkJCQlkaXNhYmxlZF9ub2RlcywK KwkJCQkJCQkJCQkJc3RhcnR1cF9jb3N0LAorCQkJCQkJCQkJCQl0b3RhbF9jb3N0LAorCQkJCQkJ CQkJCQlOSUwsCS8qIG5vIHBhdGhrZXlzICovCisJCQkJCQkJCQkJCXBhcmFtX2luZm8tPnBwaV9y ZXFfb3V0ZXIsCisJCQkJCQkJCQkJCU5VTEwsCisJCQkJCQkJCQkJCU5JTCwJLyogbm8gZmR3X3Jl c3RyaWN0aW5mbyBsaXN0ICovCisJCQkJCQkJCQkJCU5JTCk7CS8qIG5vIGZkd19wcml2YXRlIGxp c3QgKi8KK30KKwogLyoKICAqIHBvc3RncmVzR2V0Rm9yZWlnblBsYW4KICAqCQlDcmVhdGUgRm9y ZWlnblNjYW4gcGxhbiBub2RlIHdoaWNoIGltcGxlbWVudHMgc2VsZWN0ZWQgYmVzdCBwYXRoCmRp ZmYgLS1naXQgYS9jb250cmliL3Bvc3RncmVzX2Zkdy9zcWwvcG9zdGdyZXNfZmR3LnNxbCBiL2Nv bnRyaWIvcG9zdGdyZXNfZmR3L3NxbC9wb3N0Z3Jlc19mZHcuc3FsCmluZGV4IGRmYzU4YmViMGQy Li4yY2NkYjMwZTJhMiAxMDA2NDQKLS0tIGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvc3FsL3Bvc3Rn cmVzX2Zkdy5zcWwKKysrIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvc3FsL3Bvc3RncmVzX2Zkdy5z cWwKQEAgLTEzMTUsNiArMTMxNSw1NSBAQCBSRUlOREVYIFRBQkxFIHJlaW5kX2Zkd19wYXJlbnQ7 IC0tIG9rCiBSRUlOREVYIFRBQkxFIENPTkNVUlJFTlRMWSByZWluZF9mZHdfcGFyZW50OyAtLSBv awogRFJPUCBUQUJMRSByZWluZF9mZHdfcGFyZW50OwogCistLSA9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLSBwYXJh bWV0ZXJpemVkIEFwcGVuZCBwYXRocyBvdmVyIGZvcmVpZ24gcGFydGl0aW9ucworLS0gPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQorLS0gV2l0aCB1c2VfcmVtb3RlX2VzdGltYXRlLCBlYWNoIGZvcmVpZ24gcGFydGl0aW9u IGdldHMgYSBwYXRoIHBhcmFtZXRlcml6ZWQKKy0tIGJ5IHRoZSBqb2luIGNsYXVzZS4gIElmIGFk ZF9wYXRoKCkgZGlzY2FyZHMgdGhhdCBwYXRoIGZvciBzb21lIHBhcnRpdGlvbgorLS0gKGhlcmU6 IGJlY2F1c2UgdGhlIHBhcnRpdGlvbiBpcyBlbXB0eSwgc28gdGhlIHBhcmFtZXRlcml6ZWQgcGF0 aCBpcworLS0gZG9taW5hdGVkIGJ5IHRoZSB1bnBhcmFtZXRlcml6ZWQgb25lKSwgdGhlIHBsYW5u ZXIgbXVzdCBzdGlsbCBiZSBhYmxlIHRvCistLSBidWlsZCBhIHBhcmFtZXRlcml6ZWQgQXBwZW5k IGJ5IHJlcGFyYW1ldGVyaXppbmcgdGhlIHN1cnZpdmluZyBwYXRoLgorQ1JFQVRFIFRBQkxFIHBh X2xvYzEgKGEgaW50KTsKK0NSRUFURSBUQUJMRSBwYV9sb2MyIChhIGludCk7CitDUkVBVEUgSU5E RVggT04gcGFfbG9jMSAoYSk7CitDUkVBVEUgSU5ERVggT04gcGFfbG9jMiAoYSk7CitDUkVBVEUg VEFCTEUgcGFfcGFyZW50IChhIGludCkgUEFSVElUSU9OIEJZIEhBU0ggKGEpOworQ1JFQVRFIEZP UkVJR04gVEFCTEUgcGFfZjEgUEFSVElUSU9OIE9GIHBhX3BhcmVudAorICBGT1IgVkFMVUVTIFdJ VEggKE1PRFVMVVMgMiwgUkVNQUlOREVSIDApCisgIFNFUlZFUiBsb29wYmFjayBPUFRJT05TICh0 YWJsZV9uYW1lICdwYV9sb2MxJywgdXNlX3JlbW90ZV9lc3RpbWF0ZSAndHJ1ZScpOworQ1JFQVRF IEZPUkVJR04gVEFCTEUgcGFfZjIgUEFSVElUSU9OIE9GIHBhX3BhcmVudAorICBGT1IgVkFMVUVT IFdJVEggKE1PRFVMVVMgMiwgUkVNQUlOREVSIDEpCisgIFNFUlZFUiBsb29wYmFjayBPUFRJT05T ICh0YWJsZV9uYW1lICdwYV9sb2MyJywgdXNlX3JlbW90ZV9lc3RpbWF0ZSAndHJ1ZScpOworSU5T RVJUIElOVE8gcGFfbG9jMSBTRUxFQ1QgZyBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwMDAp IGcKKyAgV0hFUkUgc2F0aXNmaWVzX2hhc2hfcGFydGl0aW9uKCdwYV9wYXJlbnQnOjpyZWdjbGFz cywgMiwgMCwgZyk7CitJTlNFUlQgSU5UTyBwYV9sb2MyIFNFTEVDVCBnIEZST00gZ2VuZXJhdGVf c2VyaWVzKDEsIDEwMDAwMCkgZworICBXSEVSRSBzYXRpc2ZpZXNfaGFzaF9wYXJ0aXRpb24oJ3Bh X3BhcmVudCc6OnJlZ2NsYXNzLCAyLCAxLCBnKTsKK0NSRUFURSBUQUJMRSBwYV9vdXRlciAoYSBp bnQpOworSU5TRVJUIElOVE8gcGFfb3V0ZXIgVkFMVUVTICgxKTsKK0FOQUxZWkUgcGFfbG9jMTsK K0FOQUxZWkUgcGFfbG9jMjsKK0FOQUxZWkUgcGFfZjE7CitBTkFMWVpFIHBhX2YyOworQU5BTFla RSBwYV9vdXRlcjsKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00g cGFfb3V0ZXIgbyBKT0lOIHBhX3BhcmVudCBwIE9OIHAuYSA9IG8uYTsKKy0tIEVtcHR5IG9uZSBw YXJ0aXRpb247IGl0cyBwYXJhbWV0ZXJpemVkIHBhdGggaXMgbm93IGRvbWluYXRlZCBhbmQgZHJv cHBlZC4KK0RFTEVURSBGUk9NIHBhX2YyOworQU5BTFlaRSBwYV9sb2MyOworQU5BTFlaRSBwYV9m MjsKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gcGFfb3V0ZXIg byBKT0lOIHBhX3BhcmVudCBwIE9OIHAuYSA9IG8uYTsKK1NFTEVDVCAqIEZST00gcGFfb3V0ZXIg byBKT0lOIHBhX3BhcmVudCBwIE9OIHAuYSA9IG8uYTsKKy0tIE9uY2UgdGhlIHJlbW90ZSB0YWJs ZSBpcyBrbm93biB0byBiZSBlbXB0eSwgdGhlIHNvcnRlZCBhbmQgdW5zb3J0ZWQgcGxhaW4KKy0t IHNjYW5zIGFyZSBmdXp6aWx5IGVxdWFsIGluIGNvc3QsIHNvIG9ubHkgdGhlIHNvcnRlZCBvbmUg c3Vydml2ZXM7IHdlIG11c3QKKy0tIGJlIGFibGUgdG8gcmVwYXJhbWV0ZXJpemUgdGhhdCBvbmUs IHRvby4KK1ZBQ1VVTSBBTkFMWVpFIHBhX2xvYzI7CitBTkFMWVpFIHBhX2YyOworRVhQTEFJTiAo VkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBwYV9vdXRlciBvIEpPSU4gcGFfcGFy ZW50IHAgT04gcC5hID0gby5hOworU0VMRUNUICogRlJPTSBwYV9vdXRlciBvIEpPSU4gcGFfcGFy ZW50IHAgT04gcC5hID0gby5hOworRFJPUCBUQUJMRSBwYV9wYXJlbnQsIHBhX291dGVyLCBwYV9s b2MxLCBwYV9sb2MyOworCiAtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAtLSBjb252ZXJzaW9uIGVycm9yCiAtLSA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvZmR3aGFuZGxlci5zZ21sIGIvZG9j L3NyYy9zZ21sL2Zkd2hhbmRsZXIuc2dtbAppbmRleCA4Njg1YTA3OGM1Mi4uYTA0YTExM2VmMmMg MTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9mZHdoYW5kbGVyLnNnbWwKKysrIGIvZG9jL3NyYy9z Z21sL2Zkd2hhbmRsZXIuc2dtbApAQCAtMTcyMSw2ICsxNzIxLDM2IEBAIFJlcGFyYW1ldGVyaXpl Rm9yZWlnblBhdGhCeUNoaWxkKFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpmZHdfcHJpdmF0ZSwK ICAgICA8bGl0ZXJhbD5hZGp1c3RfYXBwZW5kcmVsX2F0dHJzPC9saXRlcmFsPiBvcgogICAgIDxs aXRlcmFsPmFkanVzdF9hcHBlbmRyZWxfYXR0cnNfbXVsdGlsZXZlbDwvbGl0ZXJhbD4gYXMgcmVx dWlyZWQuCiAgICAgPC9wYXJhPgorCisgICAgPHBhcmE+Cis8cHJvZ3JhbWxpc3Rpbmc+CitQYXRo ICoKK1JlcGFyYW1ldGVyaXplRm9yZWlnblBhdGgoUGxhbm5lckluZm8gKnJvb3QsIEZvcmVpZ25Q YXRoICpwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICBSZWxpZHMgcmVxdWlyZWRfb3V0 ZXIpOworPC9wcm9ncmFtbGlzdGluZz4KKyAgICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVu IHRoZSBwbGFubmVyIG5lZWRzIGEgdmVyc2lvbiBvZiBhbiBleGlzdGluZworICAgIGJhc2UtcmVs YXRpb24gPHN0cnVjdG5hbWU+Rm9yZWlnblBhdGg8L3N0cnVjdG5hbWU+IHRoYXQgaXMgcGFyYW1l dGVyaXplZAorICAgIGJ5IHRoZSByZWxhdGlvbnMgaW4gPGxpdGVyYWw+cmVxdWlyZWRfb3V0ZXI8 L2xpdGVyYWw+LCB3aGljaCBpcyBhCisgICAgc3VwZXJzZXQgb2YgdGhlIHBhcmFtZXRlcml6YXRp b24gb2YgPGxpdGVyYWw+cGF0aDwvbGl0ZXJhbD4uICBUaGlzCisgICAgaGFwcGVucywgZm9yIGV4 YW1wbGUsIHdoaWxlIGJ1aWxkaW5nIGEgcGFyYW1ldGVyaXplZAorICAgIDxsaXRlcmFsPkFwcGVu ZDwvbGl0ZXJhbD4gcGF0aCBvdmVyIGEgcGFydGl0aW9uZWQgdGFibGUgd2l0aCBmb3JlaWduCisg ICAgcGFydGl0aW9ucywgc2luY2UgYWxsIGNoaWxkcmVuIG9mIHN1Y2ggYSBwYXRoIG11c3QgaGF2 ZSBleGFjdGx5IHRoZSBzYW1lCisgICAgcGFyYW1ldGVyaXphdGlvbi4gIFRoZSBmdW5jdGlvbiBt dXN0IHJldHVybiBhIG5ldworICAgIDxzdHJ1Y3RuYW1lPkZvcmVpZ25QYXRoPC9zdHJ1Y3RuYW1l PiB3aG9zZSA8bGl0ZXJhbD5wYXJhbV9pbmZvPC9saXRlcmFsPgorICAgIGlzIHRoZSB2YWx1ZSBv YnRhaW5lZCBmcm9tIDxmdW5jdGlvbj5nZXRfYmFzZXJlbF9wYXJhbXBhdGhpbmZvPC9mdW5jdGlv bj4KKyAgICBmb3IgPGxpdGVyYWw+cmVxdWlyZWRfb3V0ZXI8L2xpdGVyYWw+LCBhbmQgd2hvc2Ug cm93IGNvdW50IGFuZCBjb3N0CisgICAgZXN0aW1hdGVzIGFjY291bnQgZm9yIHRoZSBhZGRpdGlv bmFsIGpvaW4gY2xhdXNlcyBmb3VuZCBpbiB0aGF0IHZhbHVlJ3MKKyAgICA8c3RydWN0ZmllbGQ+ cHBpX2NsYXVzZXM8L3N0cnVjdGZpZWxkPjsgYWxsIG9mIHRob3NlIGNsYXVzZXMgbXVzdCBiZQor ICAgIGVuZm9yY2VkIGJ5IHRoZSByZXR1cm5lZCBwYXRoLCBlaXRoZXIgcmVtb3RlbHkgb3IgbG9j YWxseS4gIEl0IG11c3QKKyAgICByZXR1cm4gPGxpdGVyYWw+TlVMTDwvbGl0ZXJhbD4gaWYgbm8g c3VjaCBwYXRoIGNhbiBiZSBidWlsdCwgYW5kIGl0IG11c3QKKyAgICBub3QgcGFzcyB0aGUgcmV0 dXJuZWQgcGF0aCB0byA8ZnVuY3Rpb24+YWRkX3BhdGg8L2Z1bmN0aW9uPi4KKyAgICA8L3BhcmE+ CisKKyAgICA8cGFyYT4KKyAgICBUaGlzIGZ1bmN0aW9uIGlzIG9wdGlvbmFsLiAgSWYgaXQgaXMg bm90IHByb3ZpZGVkLCB0aGUgcGxhbm5lciBjYW5ub3QKKyAgICBidWlsZCBhIHBhcmFtZXRlcml6 ZWQgPGxpdGVyYWw+QXBwZW5kPC9saXRlcmFsPiBwYXRoIHVubGVzcyBldmVyeSBmb3JlaWduCisg ICAgY2hpbGQgcmVsYXRpb24gYWxyZWFkeSBoYXMgYSBwYXRoIHdpdGggdGhlIHJlcXVpcmVkIHBh cmFtZXRlcml6YXRpb24uCisgICAgPC9wYXJhPgogICAgPC9zZWN0Mj4KIAogICAgPC9zZWN0MT4K QEAgLTIwMTQsNyArMjA0NCwxMCBAQCBHZXRGb3JlaWduU2VydmVyQnlOYW1lKGNvbnN0IGNoYXIg Km5hbWUsIGJvb2wgbWlzc2luZ19vayk7CiAgICAgIHRvIGNvbXB1dGUgdGhhdCB2YWx1ZS4gIElu IDxmdW5jdGlvbj5HZXRGb3JlaWduUGxhbjwvZnVuY3Rpb24+LCB0aGUKICAgICAgPHJlcGxhY2Vh YmxlPmxvY2FsX3ZhcmlhYmxlPC9yZXBsYWNlYWJsZT4gcG9ydGlvbiBvZiB0aGUgam9pbiBjbGF1 c2Ugd291bGQgYmUgYWRkZWQKICAgICAgdG8gPHN0cnVjdGZpZWxkPmZkd19leHByczwvc3RydWN0 ZmllbGQ+LCBhbmQgdGhlbiBhdCBydW4gdGltZSB0aGUgY2FzZSB3b3JrcyB0aGUKLSAgICAgc2Ft ZSBhcyBmb3IgYW4gb3JkaW5hcnkgcmVzdHJpY3Rpb24gY2xhdXNlLgorICAgICBzYW1lIGFzIGZv ciBhbiBvcmRpbmFyeSByZXN0cmljdGlvbiBjbGF1c2UuICBJZiB0aGUgRkRXIHByb3ZpZGVzCisg ICAgIDxmdW5jdGlvbj5SZXBhcmFtZXRlcml6ZUZvcmVpZ25QYXRoPC9mdW5jdGlvbj4sIHRoZSBw bGFubmVyIGNhbiBhbHNvIGFzaworICAgICBpdCBhZnRlciB0aGUgZmFjdCBmb3IgYSB2ZXJzaW9u IG9mIGFuIGV4aXN0aW5nIHBhdGggdGhhdCB1c2VzIGFkZGl0aW9uYWwKKyAgICAgam9pbiBjbGF1 c2VzOyBzZWUgPHhyZWYgbGlua2VuZD0iZmR3LWNhbGxiYWNrcy1yZXBhcmFtZXRlcml6ZS1wYXRo cyIvPi4KICAgICA8L3BhcmE+CiAKICAgICA8cGFyYT4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L29wdGltaXplci91dGlsL3BhdGhub2RlLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9w YXRobm9kZS5jCmluZGV4IDczNTE4YzhmODcwLi41MWY0YzM4YThhNiAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGF0aG5vZGUuYworKysgYi9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvdXRpbC9wYXRobm9kZS5jCkBAIC00MDUzLDYgKzQwNTMsMTcgQEAgcmVwYXJhbWV0ZXJp emVfcGF0aChQbGFubmVySW5mbyAqcm9vdCwgUGF0aCAqcGF0aCwKIAkJCQkJCQkJCQkJCQltcGF0 aC0+YmluYXJ5X21vZGUsCiAJCQkJCQkJCQkJCQkJbXBhdGgtPmVzdF9jYWxscyk7CiAJCQl9CisJ CWNhc2UgVF9Gb3JlaWduU2NhbjoKKwkJCXsKKwkJCQlSZXBhcmFtZXRlcml6ZUZvcmVpZ25QYXRo X2Z1bmN0aW9uIHJmcF9mdW5jOworCisJCQkJaWYgKCFJU19TSU1QTEVfUkVMKHJlbCkgfHwgcmVs LT5mZHdyb3V0aW5lID09IE5VTEwpCisJCQkJCWJyZWFrOworCQkJCXJmcF9mdW5jID0gcmVsLT5m ZHdyb3V0aW5lLT5SZXBhcmFtZXRlcml6ZUZvcmVpZ25QYXRoOworCQkJCWlmIChyZnBfZnVuYyA9 PSBOVUxMKQorCQkJCQlicmVhazsKKwkJCQlyZXR1cm4gcmZwX2Z1bmMocm9vdCwgKEZvcmVpZ25Q YXRoICopIHBhdGgsIHJlcXVpcmVkX291dGVyKTsKKwkJCX0KIAkJZGVmYXVsdDoKIAkJCWJyZWFr OwogCX0KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2ZvcmVpZ24vZmR3YXBpLmggYi9zcmMvaW5j bHVkZS9mb3JlaWduL2Zkd2FwaS5oCmluZGV4IGFiZjU5YTBkOGFkLi43YTg4MTY1OTE5YSAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvZm9yZWlnbi9mZHdhcGkuaAorKysgYi9zcmMvaW5jbHVkZS9m b3JlaWduL2Zkd2FwaS5oCkBAIC0xODYsNiArMTg2LDkgQEAgdHlwZWRlZiBib29sICgqSXNGb3Jl aWduU2NhblBhcmFsbGVsU2FmZV9mdW5jdGlvbikgKFBsYW5uZXJJbmZvICpyb290LAogdHlwZWRl ZiBMaXN0ICooKlJlcGFyYW1ldGVyaXplRm9yZWlnblBhdGhCeUNoaWxkX2Z1bmN0aW9uKSAoUGxh bm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCQkJCQkJCQlMaXN0ICpmZHdfcHJpdmF0ZSwKIAkJCQkJ CQkJCQkJCQkJCVJlbE9wdEluZm8gKmNoaWxkX3JlbCk7Cit0eXBlZGVmIFBhdGggKigqUmVwYXJh bWV0ZXJpemVGb3JlaWduUGF0aF9mdW5jdGlvbikgKFBsYW5uZXJJbmZvICpyb290LAorCQkJCQkJ CQkJCQkJCSBGb3JlaWduUGF0aCAqcGF0aCwKKwkJCQkJCQkJCQkJCQkgUmVsaWRzIHJlcXVpcmVk X291dGVyKTsKIAogdHlwZWRlZiBib29sICgqSXNGb3JlaWduUGF0aEFzeW5jQ2FwYWJsZV9mdW5j dGlvbikgKEZvcmVpZ25QYXRoICpwYXRoKTsKIApAQCAtMjc3LDYgKzI4MCw3IEBAIHR5cGVkZWYg c3RydWN0IEZkd1JvdXRpbmUKIAogCS8qIFN1cHBvcnQgZnVuY3Rpb25zIGZvciBwYXRoIHJlcGFy YW1ldGVyaXphdGlvbi4gKi8KIAlSZXBhcmFtZXRlcml6ZUZvcmVpZ25QYXRoQnlDaGlsZF9mdW5j dGlvbiBSZXBhcmFtZXRlcml6ZUZvcmVpZ25QYXRoQnlDaGlsZDsKKwlSZXBhcmFtZXRlcml6ZUZv cmVpZ25QYXRoX2Z1bmN0aW9uIFJlcGFyYW1ldGVyaXplRm9yZWlnblBhdGg7CiAKIAkvKiBTdXBw b3J0IGZ1bmN0aW9ucyBmb3IgYXN5bmNocm9ub3VzIGV4ZWN1dGlvbiAqLwogCUlzRm9yZWlnblBh dGhBc3luY0NhcGFibGVfZnVuY3Rpb24gSXNGb3JlaWduUGF0aEFzeW5jQ2FwYWJsZTsKLS0gCjIu NTUuMAoK --=_b565b0ed887bac9e4e5a814d54a51796 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=0002-postgres_fdw-cache-parameterized-path-cost-estimates.patch Content-Disposition: attachment; filename=0002-postgres_fdw-cache-parameterized-path-cost-estimates.patch; size=7028 RnJvbSA4YTdiYWJhYmZkMzliNDBlMzJmOGZmZjdlZjFhODk4OTEzOGVkM2U2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHbGViIEthc2hraW4gPGcua2FzaGtpbkBwb3N0Z3Jlc3Byby5y dT4KRGF0ZTogVHVlLCAyMiBTZXAgMjAyNiAxNzoyOTo0MyArMDMwMApTdWJqZWN0OiBbUEFUQ0gg Mi8yXSBwb3N0Z3Jlc19mZHc6IGNhY2hlIHBhcmFtZXRlcml6ZWQtcGF0aCBjb3N0IGVzdGltYXRl cwoKSW4gdXNlX3JlbW90ZV9lc3RpbWF0ZSBtb2RlLCBldmVyeSBlc3RpbWF0ZSBmb3IgYSBwYXJh bWV0ZXJpemVkIHNjYW4KY29zdHMgYSByZW1vdGUgRVhQTEFJTiwgYW5kIHdpdGggdGhlIG5ldyBS ZXBhcmFtZXRlcml6ZUZvcmVpZ25QYXRoCmNhbGxiYWNrIHRoZSBwbGFubmVyIG1heSBhc2sgZm9y IHRoZSBzYW1lIHBhcmFtZXRlcml6YXRpb24gcmVwZWF0ZWRseToKb25jZSBpbiBwb3N0Z3Jlc0dl dEZvcmVpZ25QYXRocygpLCBhbmQgbGF0ZXIgb25jZSBwZXIgc3Vydml2aW5nIHBhdGggb2YKdGhl IHJlbGF0aW9uIGZyb20gZ2V0X2NoZWFwZXN0X3BhcmFtZXRlcml6ZWRfY2hpbGRfcGF0aCgpLgoK UmVtZW1iZXIgdGhlIGVzdGltYXRlcyBpbiBhIHBlci1yZWxhdGlvbiBsaXN0IGtleWVkIGJ5IHRo ZSAoaW50ZXJuZWQpClBhcmFtUGF0aEluZm8sIHNvIHRoYXQgZWFjaCBwYXJhbWV0ZXJpemF0aW9u IGlzIGNvc3RlZCBhdCBtb3N0IG9uY2UgcGVyCnJlbGF0aW9uLiAgSW4gdGhlIGNvbW1vbiBjYXNl LCB3aGVyZSB0aGUgcGFyYW1ldGVyaXplZCBwYXRoIHdhcyBhbHJlYWR5CmJ1aWx0IGFuZCBtZXJl bHkgbG9zdCB0aGUgYWRkX3BhdGgoKSB0b3VybmFtZW50LCByZXBhcmFtZXRlcml6aW5nIGl0Cm5v dyBpc3N1ZXMgbm8gcmVtb3RlIHF1ZXJpZXMgYXQgYWxsLgotLS0KIGNvbnRyaWIvcG9zdGdyZXNf ZmR3L3Bvc3RncmVzX2Zkdy5jIHwgMTA1ICsrKysrKysrKysrKysrKysrKysrKysrLS0tLS0KIGNv bnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5oIHwgICA3ICsrCiAyIGZpbGVzIGNoYW5n ZWQsIDkzIGluc2VydGlvbnMoKyksIDE5IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2NvbnRy aWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5jIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9z dGdyZXNfZmR3LmMKaW5kZXggOTI5ZGQxMjk0ODAuLmNlYTVjMDgxMWY4IDEwMDY0NAotLS0gYS9j b250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYworKysgYi9jb250cmliL3Bvc3RncmVz X2Zkdy9wb3N0Z3Jlc19mZHcuYwpAQCAtMjc4LDYgKzI3OCwyMyBAQCB0eXBlZGVmIHN0cnVjdCBQ Z0Zkd0FuYWx5emVTdGF0ZQogCU1lbW9yeUNvbnRleHQgdGVtcF9jeHQ7CQkvKiBjb250ZXh0IGZv ciBwZXItdHVwbGUgdGVtcG9yYXJ5IGRhdGEgKi8KIH0gUGdGZHdBbmFseXplU3RhdGU7CiAKKy8q CisgKiBDYWNoZWQgc2l6ZSBhbmQgY29zdCBlc3RpbWF0ZSBmb3IgYSBwYXJhbWV0ZXJpemVkIHNj YW4gb2YgYSBiYXNlIHJlbGF0aW9uLAorICoga2V5ZWQgYnkgaXRzIChpbnRlcm5lZCkgUGFyYW1Q YXRoSW5mby4gIFRoZXNlIGFyZSBrZXB0IGluIHRoZQorICogcGFyYW1fcGF0aF9jb3N0cyBsaXN0 IG9mIHRoZSByZWxhdGlvbidzIFBnRmR3UmVsYXRpb25JbmZvLCBzbyB0aGF0CisgKiByZXBhcmFt ZXRlcml6aW5nIGEgcGF0aCBkb2VzIG5vdCByZXF1aXJlIGEgc2Vjb25kIHJlbW90ZSBFWFBMQUlO IGZvciBhCisgKiBwYXJhbWV0ZXJpemF0aW9uIHdlIGFscmVhZHkgY29zdGVkLgorICovCit0eXBl ZGVmIHN0cnVjdCBQZ0Zkd1BhcmFtUGF0aENvc3QKK3sKKwlQYXJhbVBhdGhJbmZvICpwYXJhbV9p bmZvOworCWRvdWJsZQkJcm93czsKKwlpbnQJCQl3aWR0aDsKKwlpbnQJCQlkaXNhYmxlZF9ub2Rl czsKKwlDb3N0CQlzdGFydHVwX2Nvc3Q7CisJQ29zdAkJdG90YWxfY29zdDsKK30gUGdGZHdQYXJh bVBhdGhDb3N0OworCiAvKgogICogVGhpcyBlbnVtIGRlc2NyaWJlcyB3aGF0J3Mga2VwdCBpbiB0 aGUgZmR3X3ByaXZhdGUgbGlzdCBmb3IgYSBGb3JlaWduUGF0aC4KICAqIFdlIHN0b3JlOgpAQCAt NjExLDYgKzYyOCwxMiBAQCBzdGF0aWMgdm9pZCBwb3N0Z3Jlc0ZvcmVpZ25Bc3luY05vdGlmeShB c3luY1JlcXVlc3QgKmFyZXEpOwogLyoKICAqIEhlbHBlciBmdW5jdGlvbnMKICAqLworc3RhdGlj IHZvaWQgZ2V0X3BhcmFtX3BhdGhfY29zdChQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkJUmVs T3B0SW5mbyAqYmFzZXJlbCwKKwkJCQkJCQkJUGFyYW1QYXRoSW5mbyAqcGFyYW1faW5mbywKKwkJ CQkJCQkJZG91YmxlICpwX3Jvd3MsIGludCAqcF93aWR0aCwKKwkJCQkJCQkJaW50ICpwX2Rpc2Fi bGVkX25vZGVzLAorCQkJCQkJCQlDb3N0ICpwX3N0YXJ0dXBfY29zdCwgQ29zdCAqcF90b3RhbF9j b3N0KTsKIHN0YXRpYyB2b2lkIGVzdGltYXRlX3BhdGhfY29zdF9zaXplKFBsYW5uZXJJbmZvICpy b290LAogCQkJCQkJCQkJUmVsT3B0SW5mbyAqZm9yZWlnbnJlbCwKIAkJCQkJCQkJCUxpc3QgKnBh cmFtX2pvaW5fY29uZHMsCkBAIC04ODAsNiArOTAzLDkgQEAgcG9zdGdyZXNHZXRGb3JlaWduUmVs U2l6ZShQbGFubmVySW5mbyAqcm9vdCwKIAlhcHBseV9zZXJ2ZXJfb3B0aW9ucyhmcGluZm8pOwog CWFwcGx5X3RhYmxlX29wdGlvbnMoZnBpbmZvKTsKIAorCS8qIE5vIHBhcmFtZXRlcml6ZWQtcGF0 aCBlc3RpbWF0ZXMgY2FjaGVkIHlldC4gKi8KKwlmcGluZm8tPnBhcmFtX3BhdGhfY29zdHMgPSBO SUw7CisKIAkvKgogCSAqIElmIHRoZSB0YWJsZSBvciB0aGUgc2VydmVyIGlzIGNvbmZpZ3VyZWQg dG8gdXNlIHJlbW90ZSBlc3RpbWF0ZXMsCiAJICogaWRlbnRpZnkgd2hpY2ggdXNlciB0byBkbyBy ZW1vdGUgYWNjZXNzIGFzIGR1cmluZyBwbGFubmluZy4gIFRoaXMKQEAgLTE0MTYsMTcgKzE0NDIs MTAgQEAgcG9zdGdyZXNHZXRGb3JlaWduUGF0aHMoUGxhbm5lckluZm8gKnJvb3QsCiAJCUNvc3QJ CXN0YXJ0dXBfY29zdDsKIAkJQ29zdAkJdG90YWxfY29zdDsKIAotCQkvKiBHZXQgYSBjb3N0IGVz dGltYXRlIGZyb20gdGhlIHJlbW90ZSAqLwotCQllc3RpbWF0ZV9wYXRoX2Nvc3Rfc2l6ZShyb290 LCBiYXNlcmVsLAotCQkJCQkJCQlwYXJhbV9pbmZvLT5wcGlfY2xhdXNlcywgTklMLCBOVUxMLAot CQkJCQkJCQkmcm93cywgJndpZHRoLCAmZGlzYWJsZWRfbm9kZXMsCi0JCQkJCQkJCSZzdGFydHVw X2Nvc3QsICZ0b3RhbF9jb3N0KTsKLQotCQkvKgotCQkgKiBwcGlfcm93cyBjdXJyZW50bHkgd29u J3QgZ2V0IGxvb2tlZCBhdCBieSBhbnl0aGluZywgYnV0IHN0aWxsIHdlCi0JCSAqIG1heSBhcyB3 ZWxsIGVuc3VyZSB0aGF0IGl0IG1hdGNoZXMgb3VyIGlkZWEgb2YgdGhlIHJvd2NvdW50LgotCQkg Ki8KLQkJcGFyYW1faW5mby0+cHBpX3Jvd3MgPSByb3dzOworCQkvKiBHZXQgYSBjb3N0IGVzdGlt YXRlIGZyb20gdGhlIHJlbW90ZSAob3IgZnJvbSBvdXIgY2FjaGUpICovCisJCWdldF9wYXJhbV9w YXRoX2Nvc3Qocm9vdCwgYmFzZXJlbCwgcGFyYW1faW5mbywKKwkJCQkJCQkmcm93cywgJndpZHRo LCAmZGlzYWJsZWRfbm9kZXMsCisJCQkJCQkJJnN0YXJ0dXBfY29zdCwgJnRvdGFsX2Nvc3QpOwog CiAJCS8qIE1ha2UgdGhlIHBhdGggKi8KIAkJcGF0aCA9IGNyZWF0ZV9mb3JlaWduc2Nhbl9wYXRo KHJvb3QsIGJhc2VyZWwsCkBAIC0xNDQ0LDYgKzE0NjMsNTUgQEAgcG9zdGdyZXNHZXRGb3JlaWdu UGF0aHMoUGxhbm5lckluZm8gKnJvb3QsCiAJfQogfQogCisvKgorICogZ2V0X3BhcmFtX3BhdGhf Y29zdAorICoJCUVzdGltYXRlIHRoZSBzaXplIGFuZCBjb3N0IG9mIHNjYW5uaW5nIGJhc2VyZWwg d2l0aCB0aGUgam9pbiBjbGF1c2VzCisgKgkJb2YgdGhlIGdpdmVuIFBhcmFtUGF0aEluZm8gcHVz aGVkIGRvd24sIGNhY2hpbmcgdGhlIHJlc3VsdC4KKyAqLworc3RhdGljIHZvaWQKK2dldF9wYXJh bV9wYXRoX2Nvc3QoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmJhc2VyZWwsCisJCQkJ CVBhcmFtUGF0aEluZm8gKnBhcmFtX2luZm8sCisJCQkJCWRvdWJsZSAqcF9yb3dzLCBpbnQgKnBf d2lkdGgsIGludCAqcF9kaXNhYmxlZF9ub2RlcywKKwkJCQkJQ29zdCAqcF9zdGFydHVwX2Nvc3Qs IENvc3QgKnBfdG90YWxfY29zdCkKK3sKKwlQZ0Zkd1JlbGF0aW9uSW5mbyAqZnBpbmZvID0gKFBn RmR3UmVsYXRpb25JbmZvICopIGJhc2VyZWwtPmZkd19wcml2YXRlOworCVBnRmR3UGFyYW1QYXRo Q29zdCAqcHBjID0gTlVMTDsKKwlMaXN0Q2VsbCAgICpsYzsKKworCWZvcmVhY2gobGMsIGZwaW5m by0+cGFyYW1fcGF0aF9jb3N0cykKKwl7CisJCVBnRmR3UGFyYW1QYXRoQ29zdCAqY2FjaGVkID0g KFBnRmR3UGFyYW1QYXRoQ29zdCAqKSBsZmlyc3QobGMpOworCisJCWlmIChjYWNoZWQtPnBhcmFt X2luZm8gPT0gcGFyYW1faW5mbykKKwkJeworCQkJcHBjID0gY2FjaGVkOworCQkJYnJlYWs7CisJ CX0KKwl9CisKKwlpZiAocHBjID09IE5VTEwpCisJeworCQlwcGMgPSAoUGdGZHdQYXJhbVBhdGhD b3N0ICopIHBhbGxvYyhzaXplb2YoUGdGZHdQYXJhbVBhdGhDb3N0KSk7CisJCXBwYy0+cGFyYW1f aW5mbyA9IHBhcmFtX2luZm87CisKKwkJLyogR2V0IGEgY29zdCBlc3RpbWF0ZSBmcm9tIHRoZSBy ZW1vdGUgKi8KKwkJZXN0aW1hdGVfcGF0aF9jb3N0X3NpemUocm9vdCwgYmFzZXJlbCwKKwkJCQkJ CQkJcGFyYW1faW5mby0+cHBpX2NsYXVzZXMsIE5JTCwgTlVMTCwKKwkJCQkJCQkJJnBwYy0+cm93 cywgJnBwYy0+d2lkdGgsICZwcGMtPmRpc2FibGVkX25vZGVzLAorCQkJCQkJCQkmcHBjLT5zdGFy dHVwX2Nvc3QsICZwcGMtPnRvdGFsX2Nvc3QpOworCisJCXBhcmFtX2luZm8tPnBwaV9yb3dzID0g cHBjLT5yb3dzOworCisJCWZwaW5mby0+cGFyYW1fcGF0aF9jb3N0cyA9IGxhcHBlbmQoZnBpbmZv LT5wYXJhbV9wYXRoX2Nvc3RzLCBwcGMpOworCX0KKworCSpwX3Jvd3MgPSBwcGMtPnJvd3M7CisJ KnBfd2lkdGggPSBwcGMtPndpZHRoOworCSpwX2Rpc2FibGVkX25vZGVzID0gcHBjLT5kaXNhYmxl ZF9ub2RlczsKKwkqcF9zdGFydHVwX2Nvc3QgPSBwcGMtPnN0YXJ0dXBfY29zdDsKKwkqcF90b3Rh bF9jb3N0ID0gcHBjLT50b3RhbF9jb3N0OworfQorCiAvKgogICogcG9zdGdyZXNSZXBhcmFtZXRl cml6ZUZvcmVpZ25QYXRoCiAgKgkJQnVpbGQgYSB2ZXJzaW9uIG9mIGEgYmFzZS1yZWxhdGlvbiBm b3JlaWduIHNjYW4gcGF0aCB0aGF0IGlzCkBAIC0xNDgyLDIwICsxNTUwLDE5IEBAIHBvc3RncmVz UmVwYXJhbWV0ZXJpemVGb3JlaWduUGF0aChQbGFubmVySW5mbyAqcm9vdCwgRm9yZWlnblBhdGgg KnBhdGgsCiAJLyoKIAkgKiBOb3RlIHRoYXQgd2UgaWdub3JlIHRoZSBnaXZlbiBwYXRoJ3MgcGF0 aGtleXMgYW5kIGFsd2F5cyBwcm9kdWNlIGFuCiAJICogdW5zb3J0ZWQgcGF0aC4gQSBwYXJhbWV0 ZXJpemVkIHBhdGggaXMgb25seSBldmVyIHVzZWQgb24gdGhlIGluc2lkZQotCSAqIG9mIGEgTmVz dExvb3AsIHdoZXJlIGl0cyBvcmRlcmluZyBpcyBvZiBubyBpbnRlcmVzdC4KKwkgKiBvZiBhIE5l c3RMb29wLCB3aGVyZSBpdHMgb3JkZXJpbmcgaXMgb2Ygbm8gaW50ZXJlc3QuIFByb2R1Y2luZyBh bgorCSAqIHVuc29ydGVkIHBhdGggYWxzbyBtZWFucyB0aGF0IHdlIGdldCB0byByZXVzZSB0aGUg Y29zdCBlc3RpbWF0ZSB3ZQorCSAqIGFscmVhZHkgbWFkZSBmb3IgdGhpcyBwYXJhbWV0ZXJpemF0 aW9uLCBpZiBhbnkuCiAJICovCiAKIAlwYXJhbV9pbmZvID0gZ2V0X2Jhc2VyZWxfcGFyYW1wYXRo aW5mbyhyb290LCBiYXNlcmVsLCByZXF1aXJlZF9vdXRlcik7CiAJaWYgKHBhcmFtX2luZm8gPT0g TlVMTCkKIAkJcmV0dXJuIE5VTEw7CQkJLyogc2hvdWxkbid0IGhhcHBlbiAqLwogCi0JLyogR2V0 IGEgY29zdCBlc3RpbWF0ZSBmcm9tIHRoZSByZW1vdGUgKi8KLQllc3RpbWF0ZV9wYXRoX2Nvc3Rf c2l6ZShyb290LCBiYXNlcmVsLAotCQkJCQkJCXBhcmFtX2luZm8tPnBwaV9jbGF1c2VzLCBOSUws IE5VTEwsCi0JCQkJCQkJJnJvd3MsICZ3aWR0aCwgJmRpc2FibGVkX25vZGVzLAotCQkJCQkJCSZz dGFydHVwX2Nvc3QsICZ0b3RhbF9jb3N0KTsKLQotCXBhcmFtX2luZm8tPnBwaV9yb3dzID0gcm93 czsKKwkvKiBHZXQgYSBjb3N0IGVzdGltYXRlIGZyb20gdGhlIHJlbW90ZSAob3IgZnJvbSBvdXIg Y2FjaGUpICovCisJZ2V0X3BhcmFtX3BhdGhfY29zdChyb290LCBiYXNlcmVsLCBwYXJhbV9pbmZv LAorCQkJCQkJJnJvd3MsICZ3aWR0aCwgJmRpc2FibGVkX25vZGVzLAorCQkJCQkJJnN0YXJ0dXBf Y29zdCwgJnRvdGFsX2Nvc3QpOwogCiAJcmV0dXJuIChQYXRoICopIGNyZWF0ZV9mb3JlaWduc2Nh bl9wYXRoKHJvb3QsIGJhc2VyZWwsCiAJCQkJCQkJCQkJCU5VTEwsCS8qIGRlZmF1bHQgcGF0aHRh cmdldCAqLwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3Lmgg Yi9jb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuaAppbmRleCBhMmJiMWZmMzUyYy4u OWQ2MWMwMjE2Y2YgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zk dy5oCisrKyBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5oCkBAIC03NSw2ICs3 NSwxMyBAQCB0eXBlZGVmIHN0cnVjdCBQZ0Zkd1JlbGF0aW9uSW5mbwogCUNvc3QJCXJlbF9zdGFy dHVwX2Nvc3Q7CiAJQ29zdAkJcmVsX3RvdGFsX2Nvc3Q7CiAKKwkvKgorCSAqIENhY2hlZCBlc3Rp bWF0ZXMgZm9yIHBhcmFtZXRlcml6ZWQgc2NhbnMgb2YgYSBiYXNlIHJlbGF0aW9uLCBvbmUKKwkg KiBlbnRyeSBwZXIgUGFyYW1QYXRoSW5mbyAobGlzdCBvZiBQZ0Zkd1BhcmFtUGF0aENvc3QpLiBP bmx5IHVzZWQgaW4KKwkgKiB1c2VfcmVtb3RlX2VzdGltYXRlIG1vZGUuCisJICovCisJTGlzdAkg ICAqcGFyYW1fcGF0aF9jb3N0czsKKwogCS8qIE9wdGlvbnMgZXh0cmFjdGVkIGZyb20gY2F0YWxv Z3MuICovCiAJYm9vbAkJdXNlX3JlbW90ZV9lc3RpbWF0ZTsKIAlDb3N0CQlmZHdfc3RhcnR1cF9j b3N0OwotLSAKMi41NS4wCgo= --=_b565b0ed887bac9e4e5a814d54a51796--