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 1vT3GM-00Bshq-1u for pgsql-hackers@arkaria.postgresql.org; Tue, 09 Dec 2025 19:20:42 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vT3GL-006Faz-0R for pgsql-hackers@arkaria.postgresql.org; Tue, 09 Dec 2025 19:20:41 +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 1vT3GK-006Far-1R for pgsql-hackers@lists.postgresql.org; Tue, 09 Dec 2025 19:20:41 +0000 Received: from relay4-d.mail.gandi.net ([217.70.183.196]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vT3GH-003z0C-2v for pgsql-hackers@lists.postgresql.org; Tue, 09 Dec 2025 19:20:39 +0000 Received: by mail.gandi.net (Postfix) with ESMTPSA id D355F444DA; Tue, 9 Dec 2025 19:20:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vondra.me; s=gm1; t=1765308034; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=ZC28ptdjDfIgLLuKabi9Ya0AaUGGhntbubN4C0L5x1c=; b=SPVOCwBVpXGNmofg41rIi+b+WLKasf451f8mMMk8COlF9rhy1kMqXRVam/+LitRvJnAH12 4oLj+HVf6Rt8iPF2V5wLVleQRxZ9rGgTIsJz9Gb+SVwrJU/UErCDtbyCNDhtOByxqao1je 1pJkgT3GxI/UBDLh60FaLDcIBtn5FSyMzLsE/NW8uKJzwL1/ZuYAqQ8DEtBVF/cFtX4Oq4 RMIJ03DFlJzPy3+gA47HO5Q1O3wQi8fUsy9tWHvyD/3VBn1kyWU9XxSDYNJS3xqzI34jKf cbO+hspz3XLBnMJ8569fCGT2o5m4Dd7l4s622oa745g+um1jo/D5jh6x0+3iMQ== Content-Type: multipart/mixed; boundary="------------XHbmeIxle10tMUAhlz1g7Vgy" Message-ID: <5abd6054-413c-4f48-9172-d8b31062b266@vondra.me> Date: Tue, 9 Dec 2025 20:20:32 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Add a greedy join search algorithm to handle large join problems To: Chengpeng Yan Cc: "pgsql-hackers@lists.postgresql.org" , John Naylor References: <3FF63E99-AB4F-41A9-BC78-AAB28823FBD0@Outlook.com> <6db6d2ec-7529-4add-9a95-178fc318311d@vondra.me> <313ACE5A-CBF1-43B3-9181-10D3E8ADF424@Outlook.com> Content-Language: en-US From: Tomas Vondra In-Reply-To: <313ACE5A-CBF1-43B3-9181-10D3E8ADF424@Outlook.com> X-GND-Sasl: tomas@vondra.me X-GND-Cause: gggruggvucftvghtrhhoucdtuddrgeefgedrtddtgddvtdeflecutefuodetggdotefrodftvfcurf hrohhfihhlvgemucfitefpfffkpdcuggftfghnshhusghstghrihgsvgenuceurghilhhouhhtmecu fedtudenucesvcftvggtihhpihgvnhhtshculddquddttddmnecujfgurheptgfkffggfgfuvfevfh fhjgesmhdtreertddvjeenucfhrhhomhepvfhomhgrshcugghonhgurhgruceothhomhgrshesvhho nhgurhgrrdhmvgeqnecuggftrfgrthhtvghrnhepkeduhffgleeghfejtdehlefhgfdugeejudefff etuddtheelhfejfedtveeifeeinecukfhppeekiedrgeelrddvfedtrddvtdeinecuvehluhhsthgv rhfuihiivgeptdenucfrrghrrghmpehinhgvthepkeeirdegledrvdeftddrvddtiedphhgvlhhope gluddtrddufeejrddtrddvngdpmhgrihhlfhhrohhmpehtohhmrghssehvohhnughrrgdrmhgvpdhq ihgupefffeehhefhgeeggefftedpmhhouggvpehsmhhtphhouhhtpdhnsggprhgtphhtthhopeefpd hrtghpthhtoheptghhvghnghhpvghnghgphigrnhesqfhuthhlohhokhdrtghomhdprhgtphhtthho pehpghhsqhhlqdhhrggtkhgvrhhssehlihhsthhsrdhpohhsthhgrhgvshhqlhdrohhrghdprhgtph htthhopehjohhhnhgtnhgrhihlohhrlhhssehgmhgrihhlrdgtohhm X-GND-State: clean X-GND-Score: -100 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. --------------XHbmeIxle10tMUAhlz1g7Vgy Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit On 12/2/25 14:04, Chengpeng Yan wrote: > Hi, > > > >> On Dec 2, 2025, at 18:56, Tomas Vondra wrote: >> >> I think a much broader evaluation will be needed, comparing not just the >> planning time, but also the quality of the final plan. Which for the >> starjoin tests does not really matter, as the plans are all equal in >> this regard. > > > Many thanks for your feedback. > > You are absolutely right — plan quality is also very important. In my > initial email I only showed the improvements in planning time, but did > not provide results regarding plan quality. I will run tests on more > complex join scenarios, evaluating both planning time and plan quality. > I was trying to do some simple experiments by comparing plans for TPC-DS queries, but unfortunately I get a lot of crashes with the patch. All the backtraces look very similar - see the attached example. The root cause seems to be that sort_inner_and_outer() sees inner_path = NULL I haven't investigated this very much, but I suppose the GOO code should be calling set_cheapest() from somewhere. regards -- Tomas Vondra --------------XHbmeIxle10tMUAhlz1g7Vgy Content-Type: text/plain; charset=UTF-8; name="crash.txt" Content-Disposition: attachment; filename="crash.txt" Content-Transfer-Encoding: base64 UHJvZ3JhbSB0ZXJtaW5hdGVkIHdpdGggc2lnbmFsIFNJR1NFR1YsIFNlZ21lbnRhdGlvbiBm YXVsdC4KIzAgIDB4MDAwMDU2MmZjY2ZlMDNhNiBpbiBzb3J0X2lubmVyX2FuZF9vdXRlciAo cm9vdD0weDU2MmZmNmE2ZjYwOCwgam9pbnJlbD0weDU2MmZmNmEyYWU5MCwgb3V0ZXJyZWw9 MHg1NjJmZjZhNzc5ZTgsIGlubmVycmVsPTB4NTYyZmY2YWE0MjQ4LCBqb2ludHlwZT1KT0lO X0lOTkVSLCBleHRyYT0weDdmZmM4NmYwM2MzMCkgYXQgam9pbnBhdGguYzoxNDA5CjE0MDkJ CQlQQVRIX1BBUkFNX0JZX1JFTChpbm5lcl9wYXRoLCBvdXRlcnJlbCkpCihnZGIpIGJ0CiMw ICAweDAwMDA1NjJmY2NmZTAzYTYgaW4gc29ydF9pbm5lcl9hbmRfb3V0ZXIgKHJvb3Q9MHg1 NjJmZjZhNmY2MDgsIGpvaW5yZWw9MHg1NjJmZjZhMmFlOTAsIG91dGVycmVsPTB4NTYyZmY2 YTc3OWU4LCBpbm5lcnJlbD0weDU2MmZmNmFhNDI0OCwgam9pbnR5cGU9Sk9JTl9JTk5FUiwg ZXh0cmE9MHg3ZmZjODZmMDNjMzApIGF0IGpvaW5wYXRoLmM6MTQwOQojMSAgYWRkX3BhdGhz X3RvX2pvaW5yZWwgKHJvb3Q9cm9vdEBlbnRyeT0weDU2MmZmNmE2ZjYwOCwgam9pbnJlbD1q b2lucmVsQGVudHJ5PTB4NTYyZmY2YTJhZTkwLCBvdXRlcnJlbD1vdXRlcnJlbEBlbnRyeT0w eDU2MmZmNmE3NzllOCwgaW5uZXJyZWw9aW5uZXJyZWxAZW50cnk9MHg1NjJmZjZhYTQyNDgs IGpvaW50eXBlPTxvcHRpbWl6ZWQgb3V0Piwgam9pbnR5cGVAZW50cnk9Sk9JTl9JTk5FUiwg CiAgICBzamluZm89c2ppbmZvQGVudHJ5PTB4N2ZmYzg2ZjAzZGEwLCByZXN0cmljdGxpc3Q9 MHg1NjJmZjZhMmE5ODApIGF0IGpvaW5wYXRoLmM6Mjg5CiMyICAweDAwMDA1NjJmY2NmZTI2 MzAgaW4gcG9wdWxhdGVfam9pbnJlbF93aXRoX3BhdGhzIChyb290PXJvb3RAZW50cnk9MHg1 NjJmZjZhNmY2MDgsIHJlbDE9MHg1NjJmZjZhNzc5ZTgsIHJlbDI9MHg1NjJmZjZhYTQyNDgs IGpvaW5yZWw9MHg1NjJmZjZhMmFlOTAsIHNqaW5mbz1zamluZm9AZW50cnk9MHg3ZmZjODZm MDNkYTAsIHJlc3RyaWN0bGlzdD1yZXN0cmljdGxpc3RAZW50cnk9MHg1NjJmZjZhMmE5ODAp CiAgICBhdCBqb2lucmVscy5jOjExMDUKIzMgIDB4MDAwMDU2MmZjY2ZlMzE1ZSBpbiBtYWtl X2dyb3VwZWRfam9pbl9yZWwgKHJvb3Q9MHg1NjJmZjZhNmY2MDgsIHJlbDE9PG9wdGltaXpl ZCBvdXQ+LCByZWwyPTxvcHRpbWl6ZWQgb3V0Piwgam9pbnJlbD08b3B0aW1pemVkIG91dD4s IHNqaW5mbz0weDdmZmM4NmYwM2RhMCwgcmVzdHJpY3RsaXN0PTB4NTYyZmY2YTJhOTgwKSBh dCBqb2lucmVscy5jOjEwNTYKIzQgIDB4MDAwMDU2MmZjY2ZlMzRjMSBpbiBtYWtlX2dyb3Vw ZWRfam9pbl9yZWwgKHJvb3Q9MHg1NjJmZjZhNmY2MDgsIHJlbDE9MHg1NjJmZjZhNzc5ZTgs IHJlbDI9MHg1NjJmZjZhYTc5YjAsIGpvaW5yZWw9MHg1NjJmZjZhOTZkMTAsIHNqaW5mbz08 b3B0aW1pemVkIG91dD4sIHJlc3RyaWN0bGlzdD08b3B0aW1pemVkIG91dD4pIGF0IGpvaW5y ZWxzLmM6OTMxCiM1ICBtYWtlX2pvaW5fcmVsIChyb290PXJvb3RAZW50cnk9MHg1NjJmZjZh NmY2MDgsIHJlbDE9cmVsMUBlbnRyeT0weDU2MmZmNmE3NzllOCwgcmVsMj1yZWwyQGVudHJ5 PTB4NTYyZmY2YWE3OWIwKSBhdCBqb2lucmVscy5jOjc3MAojNiAgMHgwMDAwNTYyZmNjZmQ5 N2M5IGluIGdvb19idWlsZF9jYW5kaWRhdGUgKHN0YXRlPTB4NTYyZmY2YTllMDE4LCBsZWZ0 PTB4NTYyZmY2YTc3OWU4LCByaWdodD0weDU2MmZmNmFhNzliMCkgYXQgZ29vLmM6NDU3CiM3 ICBnb29fc2VhcmNoX2ludGVybmFsIChzdGF0ZT0weDU2MmZmNmE5ZTAxOCkgYXQgZ29vLmM6 MzI2CiM4ICBnb29fam9pbl9zZWFyY2ggKHJvb3Q9PG9wdGltaXplZCBvdXQ+LCBsZXZlbHNf bmVlZGVkPTxvcHRpbWl6ZWQgb3V0PiwgaW5pdGlhbF9yZWxzPTxvcHRpbWl6ZWQgb3V0Pikg YXQgZ29vLmM6MTQzCiM5ICAweDAwMDA1NjJmY2NmZjRjZDIgaW4gcXVlcnlfcGxhbm5lciAo cm9vdD1yb290QGVudHJ5PTB4NTYyZmY2YTZmNjA4LCBxcF9jYWxsYmFjaz1xcF9jYWxsYmFj a0BlbnRyeT0weDU2MmZjY2ZmNTM3MCA8c3RhbmRhcmRfcXBfY2FsbGJhY2s+LCBxcF9leHRy YT1xcF9leHRyYUBlbnRyeT0weDdmZmM4NmYwNDA2MCkgYXQgcGxhbm1haW4uYzoyOTcKIzEw IDB4MDAwMDU2MmZjY2ZmYTcwOCBpbiBncm91cGluZ19wbGFubmVyIChyb290PXJvb3RAZW50 cnk9MHg1NjJmZjZhNmY2MDgsIHR1cGxlX2ZyYWN0aW9uPTxvcHRpbWl6ZWQgb3V0PiwgdHVw bGVfZnJhY3Rpb25AZW50cnk9MCwgc2V0b3BzPXNldG9wc0BlbnRyeT0weDApIGF0IHBsYW5u ZXIuYzoxNjg0CiMxMSAweDAwMDA1NjJmY2NmZmQ1MDEgaW4gc3VicXVlcnlfcGxhbm5lciAo Z2xvYj08b3B0aW1pemVkIG91dD4sIHBhcnNlPTxvcHRpbWl6ZWQgb3V0PiwgcGFyc2VAZW50 cnk9MHg1NjJmZjZhNmJjNjgsIHBsYW5fbmFtZT08b3B0aW1pemVkIG91dD4sIHBhcmVudF9y b290PXBhcmVudF9yb290QGVudHJ5PTB4NTYyZmY2YTNlMWYwLCBoYXNSZWN1cnNpb249aGFz UmVjdXJzaW9uQGVudHJ5PWZhbHNlLCAKICAgIHR1cGxlX2ZyYWN0aW9uPXR1cGxlX2ZyYWN0 aW9uQGVudHJ5PTAsIHNldG9wcz1zZXRvcHNAZW50cnk9MHgwKSBhdCBwbGFubmVyLmM6MTI1 MQojMTIgMHgwMDAwNTYyZmNjZmM4NTFhIGluIHNldF9zdWJxdWVyeV9wYXRobGlzdCAocm9v dD0weDU2MmZmNmEzZTFmMCwgcmVsPTxvcHRpbWl6ZWQgb3V0PiwgcnRpPTYsIHJ0ZT08b3B0 aW1pemVkIG91dD4pIGF0IGFsbHBhdGhzLmM6Mjc3MwojMTMgc2V0X3JlbF9zaXplIChyb290 PTB4NTYyZmY2YTNlMWYwLCByZWw9PG9wdGltaXplZCBvdXQ+LCBydGk9NiwgcnRlPTxvcHRp bWl6ZWQgb3V0PikgYXQgYWxscGF0aHMuYzo0NjcKIzE0IDB4MDAwMDU2MmZjY2ZjODAxNCBp biBzZXRfYXBwZW5kX3JlbF9zaXplIChyb290PTxvcHRpbWl6ZWQgb3V0PiwgcmVsPTB4NTYy ZmY2YTY5Yjk4LCBydGk9MSwgcnRlPTxvcHRpbWl6ZWQgb3V0PikgYXQgYWxscGF0aHMuYzox MjAwCiMxNSBzZXRfcmVsX3NpemUgKHJvb3Q9PG9wdGltaXplZCBvdXQ+LCByZWw9MHg1NjJm ZjZhNjliOTgsIHJ0aT0xLCBydGU9PG9wdGltaXplZCBvdXQ+KSBhdCBhbGxwYXRocy5jOjQy OAojMTYgMHgwMDAwNTYyZmNjZmNiNWQ5IGluIHNldF9iYXNlX3JlbF9zaXplcyAocm9vdD08 b3B0aW1pemVkIG91dD4pIGF0IGFsbHBhdGhzLmM6MzM1CiMxNyBtYWtlX29uZV9yZWwgKHJv b3Q9MHg1NjJmZjZhM2UxZjAsIGpvaW5saXN0PTB4NTYyZmY2YTZhNDg4KSBhdCBhbGxwYXRo cy5jOjE5MAojMTggMHgwMDAwNTYyZmNjZmY0Y2QyIGluIHF1ZXJ5X3BsYW5uZXIgKHJvb3Q9 cm9vdEBlbnRyeT0weDU2MmZmNmEzZTFmMCwgcXBfY2FsbGJhY2s9cXBfY2FsbGJhY2tAZW50 cnk9MHg1NjJmY2NmZjUzNzAgPHN0YW5kYXJkX3FwX2NhbGxiYWNrPiwgcXBfZXh0cmE9cXBf ZXh0cmFAZW50cnk9MHg3ZmZjODZmMDQ1ODApIGF0IHBsYW5tYWluLmM6Mjk3CiMxOSAweDAw MDA1NjJmY2NmZmE3MDggaW4gZ3JvdXBpbmdfcGxhbm5lciAocm9vdD1yb290QGVudHJ5PTB4 NTYyZmY2YTNlMWYwLCB0dXBsZV9mcmFjdGlvbj08b3B0aW1pemVkIG91dD4sIHR1cGxlX2Zy YWN0aW9uQGVudHJ5PTAsIHNldG9wcz1zZXRvcHNAZW50cnk9MHgwKSBhdCBwbGFubmVyLmM6 MTY4NAojMjAgMHgwMDAwNTYyZmNjZmZkNTAxIGluIHN1YnF1ZXJ5X3BsYW5uZXIgKGdsb2I9 Z2xvYkBlbnRyeT0weDU2MmZmNmEzMTk3OCwgcGFyc2U9PG9wdGltaXplZCBvdXQ+LCBwYXJz ZUBlbnRyeT0weDU2MmZmNjkzZmQ1OCwgcGxhbl9uYW1lPXBsYW5fbmFtZUBlbnRyeT0weDAs IHBhcmVudF9yb290PXBhcmVudF9yb290QGVudHJ5PTB4MCwgaGFzUmVjdXJzaW9uPWhhc1Jl Y3Vyc2lvbkBlbnRyeT1mYWxzZSwgdHVwbGVfZnJhY3Rpb249MCwgCiAgICBzZXRvcHM9c2V0 b3BzQGVudHJ5PTB4MCkgYXQgcGxhbm5lci5jOjEyNTEKIzIxIDB4MDAwMDU2MmZjY2ZmZGE4 MCBpbiBzdGFuZGFyZF9wbGFubmVyIChwYXJzZT0weDU2MmZmNjkzZmQ1OCwgCiAgICBxdWVy eV9zdHJpbmc9MHg1NjJmZjY5MDY5ZTAgIkVYUExBSU4gKENPU1RTIE9GRilcbiB3aXRoIHNz IGFzIChcbiBzZWxlY3QgaV9pdGVtX2lkLHN1bShzc19leHRfc2FsZXNfcHJpY2UpIHRvdGFs X3NhbGVzXG4gZnJvbVxuIFx0c3RvcmVfc2FsZXMsXG4gXHRkYXRlX2RpbSxcbiAgICAgICAg IGN1c3RvbWVyX2FkZHJlc3MsXG4gICAgICAgICBpdGVtXG4gd2hlcmUgaV9pdGVtX2lkIGlu IChzZWxlY3RcbiAgICAgaV9pdGUiLi4uLCAKICAgIGN1cnNvck9wdGlvbnM9MjA0OCwgYm91 bmRQYXJhbXM9MHgwLCBlcz0weDU2MmZmNmEzMTZjMCkgYXQgcGxhbm5lci5jOjQ3MAojMjIg MHgwMDAwNTYyZmNjZmZkZmZkIGluIHBsYW5uZXIgKHBhcnNlPXBhcnNlQGVudHJ5PTB4NTYy ZmY2OTNmZDU4LCAKICAgIHF1ZXJ5X3N0cmluZz1xdWVyeV9zdHJpbmdAZW50cnk9MHg1NjJm ZjY5MDY5ZTAgIkVYUExBSU4gKENPU1RTIE9GRilcbiB3aXRoIHNzIGFzIChcbiBzZWxlY3Qg aV9pdGVtX2lkLHN1bShzc19leHRfc2FsZXNfcHJpY2UpIHRvdGFsX3NhbGVzXG4gZnJvbVxu IFx0c3RvcmVfc2FsZXMsXG4gXHRkYXRlX2RpbSxcbiAgICAgICAgIGN1c3RvbWVyX2FkZHJl c3MsXG4gICAgICAgICBpdGVtXG4gd2hlcmUgaV9pdGVtX2lkIGluIChzZWxlY3RcbiAgICAg aV9pdGUiLi4uLCBjdXJzb3JPcHRpb25zPTxvcHRpbWl6ZWQgb3V0PiwgYm91bmRQYXJhbXM9 PG9wdGltaXplZCBvdXQ+LCBlcz08b3B0aW1pemVkIG91dD4pIGF0IHBsYW5uZXIuYzozMjQK IzIzIDB4MDAwMDU2MmZjZDBkMzU3YSBpbiBwZ19wbGFuX3F1ZXJ5IChxdWVyeXRyZWU9cXVl cnl0cmVlQGVudHJ5PTB4NTYyZmY2OTNmZDU4LCAKICAgIHF1ZXJ5X3N0cmluZz1xdWVyeV9z dHJpbmdAZW50cnk9MHg1NjJmZjY5MDY5ZTAgIkVYUExBSU4gKENPU1RTIE9GRilcbiB3aXRo IHNzIGFzIChcbiBzZWxlY3QgaV9pdGVtX2lkLHN1bShzc19leHRfc2FsZXNfcHJpY2UpIHRv dGFsX3NhbGVzXG4gZnJvbVxuIFx0c3RvcmVfc2FsZXMsXG4gXHRkYXRlX2RpbSxcbiAgICAg ICAgIGN1c3RvbWVyX2FkZHJlc3MsXG4gICAgICAgICBpdGVtXG4gd2hlcmUgaV9pdGVtX2lk IGluIChzZWxlY3RcbiAgICAgaV9pdGUiLi4uLCBjdXJzb3JPcHRpb25zPWN1cnNvck9wdGlv bnNAZW50cnk9MjA0OCwgYm91bmRQYXJhbXM9Ym91bmRQYXJhbXNAZW50cnk9MHgwLCBlcz1l c0BlbnRyeT0weDU2MmZmNmEzMTZjMCkgYXQgcG9zdGdyZXMuYzo5MDUKIzI0IDB4MDAwMDU2 MmZjY2ViMmFlNiBpbiBzdGFuZGFyZF9FeHBsYWluT25lUXVlcnkgKHF1ZXJ5PTB4NTYyZmY2 OTNmZDU4LCBjdXJzb3JPcHRpb25zPTIwNDgsIGludG89MHgwLCBlcz0weDU2MmZmNmEzMTZj MCwgCiAgICBxdWVyeVN0cmluZz0weDU2MmZmNjkwNjllMCAiRVhQTEFJTiAoQ09TVFMgT0ZG KVxuIHdpdGggc3MgYXMgKFxuIHNlbGVjdCBpX2l0ZW1faWQsc3VtKHNzX2V4dF9zYWxlc19w cmljZSkgdG90YWxfc2FsZXNcbiBmcm9tXG4gXHRzdG9yZV9zYWxlcyxcbiBcdGRhdGVfZGlt LFxuICAgICAgICAgY3VzdG9tZXJfYWRkcmVzcyxcbiAgICAgICAgIGl0ZW1cbiB3aGVyZSBp X2l0ZW1faWQgaW4gKHNlbGVjdFxuICAgICBpX2l0ZSIuLi4sIAogICAgcGFyYW1zPTB4MCwg cXVlcnlFbnY9MHgwKSBhdCBleHBsYWluLmM6MzU0CiMyNSAweDAwMDA1NjJmY2NlYjJjYmMg aW4gRXhwbGFpbk9uZVF1ZXJ5IChxdWVyeT08b3B0aW1pemVkIG91dD4sIGN1cnNvck9wdGlv bnM9PG9wdGltaXplZCBvdXQ+LCBpbnRvPTxvcHRpbWl6ZWQgb3V0PiwgZXM9PG9wdGltaXpl ZCBvdXQ+LCBwc3RhdGU9PG9wdGltaXplZCBvdXQ+LCBwYXJhbXM9PG9wdGltaXplZCBvdXQ+ KSBhdCBleHBsYWluLmM6MzEwCiMyNiAweDAwMDA1NjJmY2NlYjJkYTUgaW4gRXhwbGFpblF1 ZXJ5IChwc3RhdGU9MHg1NjJmZjY5MzNkMjgsIHN0bXQ9MHg1NjJmZjY5M2ZiYjgsIHBhcmFt cz0weDAsIGRlc3Q9MHg1NjJmZjY5MzNjYTApIGF0IGV4cGxhaW4uYzoyMjQKIzI3IDB4MDAw MDU2MmZjZDBkOGZiYiBpbiBzdGFuZGFyZF9Qcm9jZXNzVXRpbGl0eSAocHN0bXQ9MHg1NjJm ZjY5M2ZjNTAsIAogICAgcXVlcnlTdHJpbmc9MHg1NjJmZjY5MDY5ZTAgIkVYUExBSU4gKENP U1RTIE9GRilcbiB3aXRoIHNzIGFzIChcbiBzZWxlY3QgaV9pdGVtX2lkLHN1bShzc19leHRf c2FsZXNfcHJpY2UpIHRvdGFsX3NhbGVzXG4gZnJvbVxuIFx0c3RvcmVfc2FsZXMsXG4gXHRk YXRlX2RpbSxcbiAgICAgICAgIGN1c3RvbWVyX2FkZHJlc3MsXG4gICAgICAgICBpdGVtXG4g d2hlcmUgaV9pdGVtX2lkIGluIChzZWxlY3RcbiAgICAgaV9pdGUiLi4uLCAKICAgIHJlYWRP bmx5VHJlZT08b3B0aW1pemVkIG91dD4sIGNvbnRleHQ9UFJPQ0VTU19VVElMSVRZX1RPUExF VkVMLCBwYXJhbXM9MHgwLCBxdWVyeUVudj0weDAsIGRlc3Q9MHg1NjJmZjY5MzNjYTAsIHFj PTB4N2ZmYzg2ZjA0YWMwKSBhdCB1dGlsaXR5LmM6ODY4CiMyOCAweDAwMDA1NjJmY2QwZDcz OWMgaW4gUG9ydGFsUnVuVXRpbGl0eSAocG9ydGFsPXBvcnRhbEBlbnRyeT0weDU2MmZmNjk5 MDdhOCwgcHN0bXQ9MHg1NjJmZjY5M2ZjNTAsIGlzVG9wTGV2ZWw9aXNUb3BMZXZlbEBlbnRy eT10cnVlLCBzZXRIb2xkU25hcHNob3Q9c2V0SG9sZFNuYXBzaG90QGVudHJ5PXRydWUsIGRl c3Q9ZGVzdEBlbnRyeT0weDU2MmZmNjkzM2NhMCwgcWM9cWNAZW50cnk9MHg3ZmZjODZmMDRh YzApCiAgICBhdCBwcXVlcnkuYzoxMTQ4CiMyOSAweDAwMDA1NjJmY2QwZDc3MzcgaW4gRmls bFBvcnRhbFN0b3JlIChwb3J0YWw9cG9ydGFsQGVudHJ5PTB4NTYyZmY2OTkwN2E4LCBpc1Rv cExldmVsPWlzVG9wTGV2ZWxAZW50cnk9dHJ1ZSkgYXQgcHF1ZXJ5LmM6MTAyMQojMzAgMHgw MDAwNTYyZmNkMGQ3YTFkIGluIFBvcnRhbFJ1biAocG9ydGFsPXBvcnRhbEBlbnRyeT0weDU2 MmZmNjk5MDdhOCwgY291bnQ9Y291bnRAZW50cnk9OTIyMzM3MjAzNjg1NDc3NTgwNywgaXNU b3BMZXZlbD1pc1RvcExldmVsQGVudHJ5PXRydWUsIGRlc3Q9ZGVzdEBlbnRyeT0weDdmZjIw NGIyZDQyMCwgYWx0ZGVzdD1hbHRkZXN0QGVudHJ5PTB4N2ZmMjA0YjJkNDIwLCBxYz1xY0Bl bnRyeT0weDdmZmM4NmYwNGNhMCkKICAgIGF0IHBxdWVyeS5jOjc1NQojMzEgMHgwMDAwNTYy ZmNkMGQzYTQwIGluIGV4ZWNfc2ltcGxlX3F1ZXJ5ICgKICAgIHF1ZXJ5X3N0cmluZz0weDU2 MmZmNjkwNjllMCAiRVhQTEFJTiAoQ09TVFMgT0ZGKVxuIHdpdGggc3MgYXMgKFxuIHNlbGVj dCBpX2l0ZW1faWQsc3VtKHNzX2V4dF9zYWxlc19wcmljZSkgdG90YWxfc2FsZXNcbiBmcm9t XG4gXHRzdG9yZV9zYWxlcyxcbiBcdGRhdGVfZGltLFxuICAgICAgICAgY3VzdG9tZXJfYWRk cmVzcyxcbiAgICAgICAgIGl0ZW1cbiB3aGVyZSBpX2l0ZW1faWQgaW4gKHNlbGVjdFxuICAg ICBpX2l0ZSIuLi4pCiAgICBhdCBwb3N0Z3Jlcy5jOjEyNzkKIzMyIDB4MDAwMDU2MmZjZDBk NTkwZSBpbiBQb3N0Z3Jlc01haW4gKGRibmFtZT08b3B0aW1pemVkIG91dD4sIHVzZXJuYW1l PTxvcHRpbWl6ZWQgb3V0PikgYXQgcG9zdGdyZXMuYzo0Nzc1CiMzMyAweDAwMDA1NjJmY2Qw ZDAxN2YgaW4gQmFja2VuZE1haW4gKHN0YXJ0dXBfZGF0YT08b3B0aW1pemVkIG91dD4sIHN0 YXJ0dXBfZGF0YV9sZW49PG9wdGltaXplZCBvdXQ+KSBhdCBiYWNrZW5kX3N0YXJ0dXAuYzox MjQKIzM0IDB4MDAwMDU2MmZjZDAzNjc1YSBpbiBwb3N0bWFzdGVyX2NoaWxkX2xhdW5jaCAo Y2hpbGRfdHlwZT08b3B0aW1pemVkIG91dD4sIGNoaWxkX3Nsb3Q9MSwgc3RhcnR1cF9kYXRh PXN0YXJ0dXBfZGF0YUBlbnRyeT0weDdmZmM4NmYwNTEzMCwgc3RhcnR1cF9kYXRhX2xlbj1z dGFydHVwX2RhdGFfbGVuQGVudHJ5PTI0LCBjbGllbnRfc29jaz1jbGllbnRfc29ja0BlbnRy eT0weDdmZmM4NmYwNTE1MCkKICAgIGF0IGxhdW5jaF9iYWNrZW5kLmM6MjY4CiMzNSAweDAw MDA1NjJmY2QwM2EwMTAgaW4gQmFja2VuZFN0YXJ0dXAgKGNsaWVudF9zb2NrPTB4N2ZmYzg2 ZjA1MTUwKSBhdCBwb3N0bWFzdGVyLmM6MzU5OAotLVR5cGUgPFJFVD4gZm9yIG1vcmUsIHEg dG8gcXVpdCwgYyB0byBjb250aW51ZSB3aXRob3V0IHBhZ2luZy0tCiMzNiBTZXJ2ZXJMb29w ICgpIGF0IHBvc3RtYXN0ZXIuYzoxNzEzCiMzNyAweDAwMDA1NjJmY2QwM2I4ODIgaW4gUG9z dG1hc3Rlck1haW4gKGFyZ2M9YXJnY0BlbnRyeT0zLCBhcmd2PWFyZ3ZAZW50cnk9MHg1NjJm ZjY5MDBjMjApIGF0IHBvc3RtYXN0ZXIuYzoxNDAzCiMzOCAweDAwMDA1NjJmY2NkNjUyMGEg aW4gbWFpbiAoYXJnYz0zLCBhcmd2PTB4NTYyZmY2OTAwYzIwKSBhdCBtYWluLmM6MjMxCg== --------------XHbmeIxle10tMUAhlz1g7Vgy--