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 1tXQtL-006nhL-28 for pgsql-hackers@arkaria.postgresql.org; Mon, 13 Jan 2025 20:18:31 +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 1tXQtJ-00CtLA-LI for pgsql-hackers@arkaria.postgresql.org; Mon, 13 Jan 2025 20:18:30 +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 1tXQtJ-00CtKt-7X for pgsql-hackers@lists.postgresql.org; Mon, 13 Jan 2025 20:18:29 +0000 Received: from forward502b.mail.yandex.net ([2a02:6b8:c02:900:1:45:d181:d502]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1tXQtG-000Eb0-2j for pgsql-hackers@lists.postgresql.org; Mon, 13 Jan 2025 20:18:29 +0000 Received: from mail-nwsmtp-smtp-production-main-36.sas.yp-c.yandex.net (mail-nwsmtp-smtp-production-main-36.sas.yp-c.yandex.net [IPv6:2a02:6b8:c24:18aa:0:640:5723:0]) by forward502b.mail.yandex.net (Yandex) with ESMTPS id 7BBB4610AF; Mon, 13 Jan 2025 23:18:24 +0300 (MSK) Received: by mail-nwsmtp-smtp-production-main-36.sas.yp-c.yandex.net (smtp/Yandex) with ESMTPSA id JIVUjZaOpqM0-a9CZCbdC; Mon, 13 Jan 2025 23:18:22 +0300 X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tantorlabs.com; s=mail; t=1736799502; bh=PoPbgFlkrwJxDCK5QskAxeQPcF1uYq/KnWpc+NMpLkQ=; h=In-Reply-To:Cc:Date:References:To:Subject:Message-ID:From; b=sPCnmZ5rmCgnf61sZQ1gz6B7fHf31yezXk4tGGIEfntG/aSOicZfVLqz29H/kxzUz XkIEbp6RgdC/bs+NiAWP5/nRmhbdItJY0xSoGPgUDblg6plGxv9i7Wj98P9ihGUcf8 k4TfI4h+X9XEWt7gly2c+Tvw9jNPJyUOhAHRt5so= Authentication-Results: mail-nwsmtp-smtp-production-main-36.sas.yp-c.yandex.net; dkim=pass header.i=@tantorlabs.com Content-Type: multipart/mixed; boundary="------------0ZMUea0i5h6031TW2eDnCF5C" Message-ID: <58bb3a5b-c92a-408c-b02a-f47aedc1c0e2@tantorlabs.com> Date: Mon, 13 Jan 2025 23:18:18 +0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: explain analyze rows=%.0f From: Ilia Evdokimov To: Guillaume Lelarge Cc: Daniel Gustafsson , Ibrar Ahmed , "Gregory Stark (as CFM)" , Tom Lane , Robert Haas , Amit Kapila , Justin Pryzby , Peter Geoghegan , vignesh C , "David G. Johnston" , pgsql-hackers@lists.postgresql.org References: <20220707222015.GD13040@telsasoft.com> <2954811.1667711530@sss.pgh.pa.us> <55695d15-c738-4401-8883-58bc855c9b03@tantorlabs.com> Content-Language: en-US In-Reply-To: <55695d15-c738-4401-8883-58bc855c9b03@tantorlabs.com> 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. --------------0ZMUea0i5h6031TW2eDnCF5C Content-Type: multipart/alternative; boundary="------------VaH3SsgzTi0i1EZOfSsEkHpr" --------------VaH3SsgzTi0i1EZOfSsEkHpr Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 11.01.2025 14:10, Ilia Evdokimov wrote: > > > On 11.01.2025 12:15, Guillaume Lelarge wrote: >> >> >> Thanks for your patch, this looks like a very interesting feature >> that I'd like to see in a future release. >> >> It did a quick run: patch OK, make OK, make install OK, but make >> check fails quite a lot on partition_prune.sql. >> >> I guess it would need some work on partition_prune.sql tests and >> perhaps also on the docs. >> >> Thanks again. >> >> >> -- >> Guillaume. > > > Yes, certainly. I have fixed partition_prune.sql. In the documentation > example for EXPLAIN ANALYZE where loops is greater than one, I updated > how 'rows' and 'loops' values are displayed so they appear as decimal > fractions with two digits after the decimal point. > > I attached fixed patch. > > Any suggestions? > > -- > Best regards, > Ilia Evdokimov, > Tantor Labs LLC. > I guess, it's not ideal to modify the existing example in the documentation of the v5 patch because readers wouldn't immediately understand why decimal fractions appear there. Instead, I'll add a brief note in the documentation clarifying how rows and loops are displayed when the average row count is below one. The changes the of documentation are attached v6 patch. If you have any other suggestions or different opinions, I'd be happy to discuss them. -- Best regards, Ilia Evdokimov, Tantor Labs LLC. --------------VaH3SsgzTi0i1EZOfSsEkHpr Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 8bit


On 11.01.2025 14:10, Ilia Evdokimov wrote:


On 11.01.2025 12:15, Guillaume Lelarge wrote:


Thanks for your patch, this looks like a very interesting feature that I'd like to see in a future release.

It did a quick run: patch OK, make OK, make install OK, but make check fails quite a lot on partition_prune.sql.

I guess it would need some work on partition_prune.sql tests and perhaps also on the docs.

Thanks again.


--
Guillaume.


Yes, certainly. I have fixed partition_prune.sql. In the documentation example for EXPLAIN ANALYZE where loops is greater than one, I updated how 'rows' and 'loops' values are displayed so they appear as decimal fractions with two digits after the decimal point.

I attached fixed patch.

Any suggestions?

--
Best regards,
Ilia Evdokimov,
Tantor Labs LLC.


I guess, it's not ideal to modify the existing example in the documentation of the v5 patch because readers wouldn't immediately understand why decimal fractions appear there. Instead, I'll add a brief note in the documentation clarifying how rows and loops are displayed when the average row count is below one.

The changes the of documentation are attached v6 patch.

If you have any other suggestions or different opinions, I'd be happy to discuss them.

--
Best regards,
Ilia Evdokimov,
Tantor Labs LLC.

--------------VaH3SsgzTi0i1EZOfSsEkHpr-- --------------0ZMUea0i5h6031TW2eDnCF5C Content-Type: text/x-patch; charset=UTF-8; name="v6-0001-Clarify-display-of-rows-and-loops-as-decimal-fraction.patch" Content-Disposition: attachment; filename*0="v6-0001-Clarify-display-of-rows-and-loops-as-decimal-fractio"; filename*1="n.patch" Content-Transfer-Encoding: base64 RnJvbSAwOGY5MmM3ZTExODI5MDQ1MDE0NTk4ZTFkY2MwNDJmM2U1YTFlMWEzIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBJbGlhIEV2ZG9raW1vdiA8aWx5YS5ldmRva2ltb3ZA dGFudG9ybGFicy5jb20+CkRhdGU6IE1vbiwgMTMgSmFuIDIwMjUgMjM6MDE6NDQgKzAzMDAK U3ViamVjdDogW1BBVENIXSBDbGFyaWZ5IGRpc3BsYXkgb2Ygcm93cyBhbmQgbG9vcHMgYXMg ZGVjaW1hbCBmcmFjdGlvbnMKCldoZW4gdGhlIGF2ZXJhZ2UgbnVtYmVyIG9mIHJvd3MgaXMg c21hbGwgY29tcGFyZWQgdG8gdGhlIG51bWJlciBvZiBsb29wcywKYm90aCByb3dzIGFuZCBs b29wcyBhcmUgZGlzcGxheWVkIGFzIGRlY2ltYWwgZnJhY3Rpb25zIHdpdGggdHdvIGRpZ2l0 cwphZnRlciB0aGUgZGVjaW1hbCBwb2ludCBpbiBFWFBMQUlOIEFOQUxZWkUuCi0tLQogZG9j L3NyYy9zZ21sL3BlcmZvcm0uc2dtbCAgICAgICAgICAgICAgICAgICAgIHwgIDYgKystCiBz cmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMgICAgICAgICAgICAgICAgfCA0OSArKysr KysrKysrKysrLS0tLS0tCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BhcnRpdGlvbl9w cnVuZS5vdXQgfCAxMCArKy0tCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9wYXJ0aXRpb25fcHJ1 bmUuc3FsICAgICAgfCAgMiArLQogNCBmaWxlcyBjaGFuZ2VkLCA0NCBpbnNlcnRpb25zKCsp LCAyMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcGVyZm9ybS5z Z21sIGIvZG9jL3NyYy9zZ21sL3BlcmZvcm0uc2dtbAppbmRleCBhNTAyYTJhYWJhLi4zZjEz ZDE3ZmU5IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcGVyZm9ybS5zZ21sCisrKyBiL2Rv Yy9zcmMvc2dtbC9wZXJmb3JtLnNnbWwKQEAgLTc1Nyw3ICs3NTcsMTEgQEAgV0hFUkUgdDEu dW5pcXVlMSAmbHQ7IDEwIEFORCB0MS51bmlxdWUyID0gdDIudW5pcXVlMjsKICAgICBjb21w YXJhYmxlIHdpdGggdGhlIHdheSB0aGF0IHRoZSBjb3N0IGVzdGltYXRlcyBhcmUgc2hvd24u ICBNdWx0aXBseSBieQogICAgIHRoZSA8bGl0ZXJhbD5sb29wczwvbGl0ZXJhbD4gdmFsdWUg dG8gZ2V0IHRoZSB0b3RhbCB0aW1lIGFjdHVhbGx5IHNwZW50IGluCiAgICAgdGhlIG5vZGUu ICBJbiB0aGUgYWJvdmUgZXhhbXBsZSwgd2Ugc3BlbnQgYSB0b3RhbCBvZiAwLjAzMCBtaWxs aXNlY29uZHMKLSAgICBleGVjdXRpbmcgdGhlIGluZGV4IHNjYW5zIG9uIDxsaXRlcmFsPnRl bmsyPC9saXRlcmFsPi4KKyAgICBleGVjdXRpbmcgdGhlIGluZGV4IHNjYW5zIG9uIDxsaXRl cmFsPnRlbmsyPC9saXRlcmFsPi4gICBJZiBhIHN1YnBsYW4gbm9kZQorICAgIGlzIGV4ZWN1 dGVkIG11bHRpcGxlIHRpbWVzIGFuZCB0aGUgYXZlcmFnZSBudW1iZXIgb2Ygcm93cyBpcyBs ZXNzIHRoYW4gb25lLAorICAgIHRoZSByb3dzIGFuZCA8bGl0ZXJhbD5sb29wczwvbGl0ZXJh bD4gdmFsdWVzIGFyZSBzaG93biBhcyBhIGRlY2ltYWwgZnJhY3Rpb24KKyAgICAod2l0aCB0 d28gZGlnaXRzIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50KSB0byBpbmRpY2F0ZSB0aGF0IHNv bWUgcm93cworICAgIHdlcmUgYWN0dWFsbHkgcHJvY2Vzc2VkIHJhdGhlciB0aGFuIHNpbXBs eSByb3VuZGluZyBkb3duIHRvIHplcm8uCiAgICA8L3BhcmE+CiAKICAgIDxwYXJhPgpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jIGIvc3JjL2JhY2tlbmQv Y29tbWFuZHMvZXhwbGFpbi5jCmluZGV4IGMyNGU2NmY4MmUuLjIwMDI5NGI3NTYgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYworKysgYi9zcmMvYmFja2Vu ZC9jb21tYW5kcy9leHBsYWluLmMKQEAgLTE5ODEsMTQgKzE5ODEsMTQgQEAgRXhwbGFpbk5v ZGUoUGxhblN0YXRlICpwbGFuc3RhdGUsIExpc3QgKmFuY2VzdG9ycywKIAogCQlpZiAoZXMt PmZvcm1hdCA9PSBFWFBMQUlOX0ZPUk1BVF9URVhUKQogCQl7CisJCQlhcHBlbmRTdHJpbmdJ bmZvKGVzLT5zdHIsICIgKGFjdHVhbCIpOwogCQkJaWYgKGVzLT50aW1pbmcpCi0JCQkJYXBw ZW5kU3RyaW5nSW5mbyhlcy0+c3RyLAotCQkJCQkJCQkgIiAoYWN0dWFsIHRpbWU9JS4zZi4u JS4zZiByb3dzPSUuMGYgbG9vcHM9JS4wZikiLAotCQkJCQkJCQkgc3RhcnR1cF9tcywgdG90 YWxfbXMsIHJvd3MsIG5sb29wcyk7CisJCQkJYXBwZW5kU3RyaW5nSW5mbyhlcy0+c3RyLCAi IHRpbWU9JS4zZi4uJS4zZiIsIHN0YXJ0dXBfbXMsIHRvdGFsX21zKTsKKworCQkJaWYgKG5s b29wcyA+IDEgJiYgcGxhbnN0YXRlLT5pbnN0cnVtZW50LT5udHVwbGVzIDwgbmxvb3BzKQor CQkJCWFwcGVuZFN0cmluZ0luZm8oZXMtPnN0ciwiIHJvd3M9JS4yZiBsb29wcz0lLjJmKSIs IHJvd3MsIG5sb29wcyk7CiAJCQllbHNlCi0JCQkJYXBwZW5kU3RyaW5nSW5mbyhlcy0+c3Ry LAotCQkJCQkJCQkgIiAoYWN0dWFsIHJvd3M9JS4wZiBsb29wcz0lLjBmKSIsCi0JCQkJCQkJ CSByb3dzLCBubG9vcHMpOworCQkJCWFwcGVuZFN0cmluZ0luZm8oZXMtPnN0ciwiIHJvd3M9 JS4wZiBsb29wcz0lLjBmKSIsIHJvd3MsIG5sb29wcyk7CiAJCX0KIAkJZWxzZQogCQl7CkBA IC0xOTk5LDggKzE5OTksMTYgQEAgRXhwbGFpbk5vZGUoUGxhblN0YXRlICpwbGFuc3RhdGUs IExpc3QgKmFuY2VzdG9ycywKIAkJCQlFeHBsYWluUHJvcGVydHlGbG9hdCgiQWN0dWFsIFRv dGFsIFRpbWUiLCAibXMiLCB0b3RhbF9tcywKIAkJCQkJCQkJCSAzLCBlcyk7CiAJCQl9Ci0J CQlFeHBsYWluUHJvcGVydHlGbG9hdCgiQWN0dWFsIFJvd3MiLCBOVUxMLCByb3dzLCAwLCBl cyk7Ci0JCQlFeHBsYWluUHJvcGVydHlGbG9hdCgiQWN0dWFsIExvb3BzIiwgTlVMTCwgbmxv b3BzLCAwLCBlcyk7CisJCQlpZiAobmxvb3BzID4gMSAmJiBwbGFuc3RhdGUtPmluc3RydW1l bnQtPm50dXBsZXMgPCBubG9vcHMpCisJCQl7CisJCQkJRXhwbGFpblByb3BlcnR5RmxvYXQo IkFjdHVhbCBSb3dzIiwgTlVMTCwgcm93cywgMiwgZXMpOworCQkJCUV4cGxhaW5Qcm9wZXJ0 eUZsb2F0KCJBY3R1YWwgTG9vcHMiLCBOVUxMLCBubG9vcHMsIDIsIGVzKTsKKwkJCX0KKwkJ CWVsc2UKKwkJCXsKKwkJCQlFeHBsYWluUHJvcGVydHlGbG9hdCgiQWN0dWFsIFJvd3MiLCBO VUxMLCByb3dzLCAwLCBlcyk7CisJCQkJRXhwbGFpblByb3BlcnR5RmxvYXQoIkFjdHVhbCBM b29wcyIsIE5VTEwsIG5sb29wcywgMCwgZXMpOworCQkJfQogCQl9CiAJfQogCWVsc2UgaWYg KGVzLT5hbmFseXplKQpAQCAtMjA1MiwxNCArMjA2MCwxNCBAQCBFeHBsYWluTm9kZShQbGFu U3RhdGUgKnBsYW5zdGF0ZSwgTGlzdCAqYW5jZXN0b3JzLAogCQkJaWYgKGVzLT5mb3JtYXQg PT0gRVhQTEFJTl9GT1JNQVRfVEVYVCkKIAkJCXsKIAkJCQlFeHBsYWluSW5kZW50VGV4dChl cyk7CisJCQkJYXBwZW5kU3RyaW5nSW5mbyhlcy0+c3RyLCAiYWN0dWFsIik7CiAJCQkJaWYg KGVzLT50aW1pbmcpCi0JCQkJCWFwcGVuZFN0cmluZ0luZm8oZXMtPnN0ciwKLQkJCQkJCQkJ CSAiYWN0dWFsIHRpbWU9JS4zZi4uJS4zZiByb3dzPSUuMGYgbG9vcHM9JS4wZlxuIiwKLQkJ CQkJCQkJCSBzdGFydHVwX21zLCB0b3RhbF9tcywgcm93cywgbmxvb3BzKTsKKwkJCQkJYXBw ZW5kU3RyaW5nSW5mbyhlcy0+c3RyLCAiIHRpbWU9JS4zZi4uJS4zZiIsIHN0YXJ0dXBfbXMs IHRvdGFsX21zKTsKKworCQkJCWlmIChubG9vcHMgPiAxICYmIHBsYW5zdGF0ZS0+aW5zdHJ1 bWVudC0+bnR1cGxlcyA8IG5sb29wcykKKwkJCQkJYXBwZW5kU3RyaW5nSW5mbyhlcy0+c3Ry LCIgcm93cz0lLjJmIGxvb3BzPSUuMmYpIiwgcm93cywgbmxvb3BzKTsKIAkJCQllbHNlCi0J CQkJCWFwcGVuZFN0cmluZ0luZm8oZXMtPnN0ciwKLQkJCQkJCQkJCSAiYWN0dWFsIHJvd3M9 JS4wZiBsb29wcz0lLjBmXG4iLAotCQkJCQkJCQkJIHJvd3MsIG5sb29wcyk7CisJCQkJCWFw cGVuZFN0cmluZ0luZm8oZXMtPnN0ciwiIHJvd3M9JS4wZiBsb29wcz0lLjBmKSIsIHJvd3Ms IG5sb29wcyk7CiAJCQl9CiAJCQllbHNlCiAJCQl7CkBAIC0yMDcwLDggKzIwNzgsMTcgQEAg RXhwbGFpbk5vZGUoUGxhblN0YXRlICpwbGFuc3RhdGUsIExpc3QgKmFuY2VzdG9ycywKIAkJ CQkJRXhwbGFpblByb3BlcnR5RmxvYXQoIkFjdHVhbCBUb3RhbCBUaW1lIiwgIm1zIiwKIAkJ CQkJCQkJCQkgdG90YWxfbXMsIDMsIGVzKTsKIAkJCQl9Ci0JCQkJRXhwbGFpblByb3BlcnR5 RmxvYXQoIkFjdHVhbCBSb3dzIiwgTlVMTCwgcm93cywgMCwgZXMpOwotCQkJCUV4cGxhaW5Q cm9wZXJ0eUZsb2F0KCJBY3R1YWwgTG9vcHMiLCBOVUxMLCBubG9vcHMsIDAsIGVzKTsKKwor CQkJCWlmIChubG9vcHMgPiAxICYmIHBsYW5zdGF0ZS0+aW5zdHJ1bWVudC0+bnR1cGxlcyA8 IG5sb29wcykKKwkJCQl7CisJCQkJCUV4cGxhaW5Qcm9wZXJ0eUZsb2F0KCJBY3R1YWwgUm93 cyIsIE5VTEwsIHJvd3MsIDIsIGVzKTsKKwkJCQkJRXhwbGFpblByb3BlcnR5RmxvYXQoIkFj dHVhbCBMb29wcyIsIE5VTEwsIG5sb29wcywgMiwgZXMpOworCQkJCX0KKwkJCQllbHNlCisJ CQkJeworCQkJCQlFeHBsYWluUHJvcGVydHlGbG9hdCgiQWN0dWFsIFJvd3MiLCBOVUxMLCBy b3dzLCAwLCBlcyk7CisJCQkJCUV4cGxhaW5Qcm9wZXJ0eUZsb2F0KCJBY3R1YWwgTG9vcHMi LCBOVUxMLCBubG9vcHMsIDAsIGVzKTsKKwkJCQl9CiAJCQl9CiAKIAkJCUV4cGxhaW5DbG9z ZVdvcmtlcihuLCBlcyk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L3BhcnRpdGlvbl9wcnVuZS5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BhcnRp dGlvbl9wcnVuZS5vdXQKaW5kZXggYzUyYmM0MGU4MS4uZGM2YTNjYjU0YSAxMDA2NDQKLS0t IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wYXJ0aXRpb25fcHJ1bmUub3V0CisrKyBi L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGFydGl0aW9uX3BydW5lLm91dApAQCAtMjMz OCw3ICsyMzM4LDcgQEAgYmVnaW4KICAgICAgICAgICAgICQxKQogICAgIGxvb3AKICAgICAg ICAgbG4gOj0gcmVnZXhwX3JlcGxhY2UobG4sICdXb3JrZXJzIExhdW5jaGVkOiBcZCsnLCAn V29ya2VycyBMYXVuY2hlZDogTicpOwotICAgICAgICBsbiA6PSByZWdleHBfcmVwbGFjZShs biwgJ2FjdHVhbCByb3dzPVxkKyBsb29wcz1cZCsnLCAnYWN0dWFsIHJvd3M9TiBsb29wcz1O Jyk7CisgICAgICAgIGxuIDo9IHJlZ2V4cF9yZXBsYWNlKGxuLCAnYWN0dWFsIHJvd3M9XGQr KD86XC5cZCspPyBsb29wcz1cZCsoPzpcLlxkKyk/JywgJ2FjdHVhbCByb3dzPU4gbG9vcHM9 TicpOwogICAgICAgICBsbiA6PSByZWdleHBfcmVwbGFjZShsbiwgJ1Jvd3MgUmVtb3ZlZCBi eSBGaWx0ZXI6IFxkKycsICdSb3dzIFJlbW92ZWQgYnkgRmlsdGVyOiBOJyk7CiAgICAgICAg IHJldHVybiBuZXh0IGxuOwogICAgIGVuZCBsb29wOwpAQCAtMzA0MSwxNiArMzA0MSwxNiBA QCBzZWxlY3QgKiBmcm9tIHRibDEgaW5uZXIgam9pbiB0cHJ0IG9uIHRibDEuY29sMSA+IHRw cnQuY29sMTsKIAogZXhwbGFpbiAoYW5hbHl6ZSwgY29zdHMgb2ZmLCBzdW1tYXJ5IG9mZiwg dGltaW5nIG9mZiwgYnVmZmVycyBvZmYpCiBzZWxlY3QgKiBmcm9tIHRibDEgaW5uZXIgam9p biB0cHJ0IG9uIHRibDEuY29sMSA9IHRwcnQuY29sMTsKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgTmVzdGVkIExvb3AgKGFjdHVhbCByb3dzPTMg bG9vcHM9MSkKICAgIC0+ICBTZXEgU2NhbiBvbiB0YmwxIChhY3R1YWwgcm93cz01IGxvb3Bz PTEpCi0gICAtPiAgQXBwZW5kIChhY3R1YWwgcm93cz0xIGxvb3BzPTUpCisgICAtPiAgQXBw ZW5kIChhY3R1YWwgcm93cz0wLjYwIGxvb3BzPTUuMDApCiAgICAgICAgICAtPiAgSW5kZXgg U2NhbiB1c2luZyB0cHJ0MV9pZHggb24gdHBydF8xIChuZXZlciBleGVjdXRlZCkKICAgICAg ICAgICAgICAgIEluZGV4IENvbmQ6IChjb2wxID0gdGJsMS5jb2wxKQogICAgICAgICAgLT4g IEluZGV4IFNjYW4gdXNpbmcgdHBydDJfaWR4IG9uIHRwcnRfMiAoYWN0dWFsIHJvd3M9MSBs b29wcz0yKQogICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGNvbDEgPSB0YmwxLmNvbDEp Ci0gICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyB0cHJ0M19pZHggb24gdHBydF8zIChh Y3R1YWwgcm93cz0wIGxvb3BzPTMpCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyB0 cHJ0M19pZHggb24gdHBydF8zIChhY3R1YWwgcm93cz0wLjMzIGxvb3BzPTMuMDApCiAgICAg ICAgICAgICAgICBJbmRleCBDb25kOiAoY29sMSA9IHRibDEuY29sMSkKICAgICAgICAgIC0+ ICBJbmRleCBTY2FuIHVzaW5nIHRwcnQ0X2lkeCBvbiB0cHJ0XzQgKG5ldmVyIGV4ZWN1dGVk KQogICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGNvbDEgPSB0YmwxLmNvbDEpCmRpZmYg LS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wYXJ0aXRpb25fcHJ1bmUuc3FsIGIvc3Jj L3Rlc3QvcmVncmVzcy9zcWwvcGFydGl0aW9uX3BydW5lLnNxbAppbmRleCBkNjc1OThkNWM3 Li5iYjFlMDlhNTM2IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wYXJ0aXRp b25fcHJ1bmUuc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3BhcnRpdGlvbl9wcnVu ZS5zcWwKQEAgLTU3MSw3ICs1NzEsNyBAQCBiZWdpbgogICAgICAgICAgICAgJDEpCiAgICAg bG9vcAogICAgICAgICBsbiA6PSByZWdleHBfcmVwbGFjZShsbiwgJ1dvcmtlcnMgTGF1bmNo ZWQ6IFxkKycsICdXb3JrZXJzIExhdW5jaGVkOiBOJyk7Ci0gICAgICAgIGxuIDo9IHJlZ2V4 cF9yZXBsYWNlKGxuLCAnYWN0dWFsIHJvd3M9XGQrIGxvb3BzPVxkKycsICdhY3R1YWwgcm93 cz1OIGxvb3BzPU4nKTsKKyAgICAgICAgbG4gOj0gcmVnZXhwX3JlcGxhY2UobG4sICdhY3R1 YWwgcm93cz1cZCsoPzpcLlxkKyk/IGxvb3BzPVxkKyg/OlwuXGQrKT8nLCAnYWN0dWFsIHJv d3M9TiBsb29wcz1OJyk7CiAgICAgICAgIGxuIDo9IHJlZ2V4cF9yZXBsYWNlKGxuLCAnUm93 cyBSZW1vdmVkIGJ5IEZpbHRlcjogXGQrJywgJ1Jvd3MgUmVtb3ZlZCBieSBGaWx0ZXI6IE4n KTsKICAgICAgICAgcmV0dXJuIG5leHQgbG47CiAgICAgZW5kIGxvb3A7Ci0tIAoyLjM0LjEK Cg== --------------0ZMUea0i5h6031TW2eDnCF5C--