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 1tjxWb-00FEH1-Dn for pgsql-hackers@arkaria.postgresql.org; Mon, 17 Feb 2025 09:34:49 +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 1tjxWa-00Em6T-3P for pgsql-hackers@arkaria.postgresql.org; Mon, 17 Feb 2025 09:34:48 +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 1tjxWZ-00Em6L-ME for pgsql-hackers@lists.postgresql.org; Mon, 17 Feb 2025 09:34:47 +0000 Received: from forward103b.mail.yandex.net ([178.154.239.150]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1tjxWW-001JOS-2i for pgsql-hackers@postgresql.org; Mon, 17 Feb 2025 09:34:47 +0000 Received: from mail-nwsmtp-smtp-production-main-91.sas.yp-c.yandex.net (mail-nwsmtp-smtp-production-main-91.sas.yp-c.yandex.net [IPv6:2a02:6b8:c10:2d9f:0:640:f6ce:0]) by forward103b.mail.yandex.net (Yandex) with ESMTPS id 9308B60D14; Mon, 17 Feb 2025 12:34:42 +0300 (MSK) Received: by mail-nwsmtp-smtp-production-main-91.sas.yp-c.yandex.net (smtp/Yandex) with ESMTPSA id cYQ8V4lMnqM0-H5FG1SIF; Mon, 17 Feb 2025 12:34:41 +0300 X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tantorlabs.com; s=mail; t=1739784881; bh=SSHC98xh3GntInGeTvbRkuD0nOj+lH0/QEJWcatfZW8=; h=In-Reply-To:Cc:Date:References:To:Subject:Message-ID:From; b=uEihhJYVG1L2dtIFtIjR1+FIDP+FBTyuHd0K7g5dFc9CMYUslZZ4cv0Ht4mnbEQJD Qg3Vuj5GGYkHfyoKCvcWEksy32gJ/abg61/m7n6Tm76c95AjmB7tAjQte3o0q9z5TY 7Lq1t1H9sXXB7vCePyNm4pCHFC/wA4DX8tuIU1YY= Authentication-Results: mail-nwsmtp-smtp-production-main-91.sas.yp-c.yandex.net; dkim=pass header.i=@tantorlabs.com Content-Type: multipart/mixed; boundary="------------aCdPOOLXtGWFY9dK9EiskLzg" Message-ID: Date: Mon, 17 Feb 2025 12:34:37 +0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Sample rate added to pg_stat_statements From: Ilia Evdokimov To: Sami Imseih , Alexander Korotkov , Michael Paquier , Greg Sabino Mullane , Andrey Borodin , Alena Rybakina Cc: pgsql-hackers References: <3a27c830-b81f-4560-9774-a87d9b922fbd@tantorlabs.com> <7AD765EF-14DE-4B3E-8282-E82A9B44DBAA@yandex-team.ru> <0c7770bd-9750-4200-a472-bdb262583c2f@tantorlabs.com> <18631d46-1741-4edc-b116-8d9631cdf919@tantorlabs.com> <4f98ec33-c627-4eb4-84f3-9994a0982277@tantorlabs.com> <623db69f-b40a-4d50-b1bd-bb073fcc4336@tantorlabs.com> <3546e2a7-5831-4c0a-996b-358d4ec483a6@tantorlabs.com> <6bf3059f-7ebe-4640-8870-1220f83b88ed@tantorlabs.com> Content-Language: en-US In-Reply-To: <6bf3059f-7ebe-4640-8870-1220f83b88ed@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. --------------aCdPOOLXtGWFY9dK9EiskLzg Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 14.02.2025 16:17, Ilia Evdokimov wrote: > Hi hackers, > > I've decided to explore a slightly different approach to reducing > spinlock contention—by introducing a simple execution time threshold. > If a query’s execution time exceeds this threshold, it is recorded in > pg_stat_statements; otherwise, it is ignored. As Alexander [0] pointed > out, this helps retain valuable queries for further analysis. A > similar mechanism is already present in auto_explain and > pg_store_plans. When pg_stat_statements.track_min_duration = -1, > disable tracking. If pg_stat_statements.track_min_duration = -1, all > statements are tracked. > > I benchmarked this approach using -M prepared -S on my machine with 48 > CPUs. However, I couldn’t reproduce spinlock contention because the > machine isn’t large enough to create sufficient concurrency. > Nevertheless, I’m sharing my results for reference and checking > correct results of threshold. > > Here’s the benchmarking procedure I followed: >     createdb pgbench >     pgbench -i -s 3000 pgbench >     psql -c 'SELECT pg_stat_statements_reset()' >     pgbench -c 46 -j 46 -T 120 -M prepared -S --progress=10 pgbench > > select query, calls, min_exec_time, max_exec_time, mean_exec_time, > stddev_exec_time from pg_stat_statements where query = 'SELECT > abalance FROM pgbench_accounts WHERE aid = $1'; > > track_min_duration |     calls | min_exec_time | max_exec_time |     > mean_exec_time | stddev_exec_time >                  0 | 111282955 |       0.00365 |      15.56946 | > 0.015042374707317802 | 0.06067634978916631 >                  5 |       458 |       5.00627 |      15.699129 |    > 5.962879746724887 | 1.1432124887616204 >                 10 |        14 |      10.538461 |      16.113204 |   > 12.415218999999999 | 1.5598854455354354 >                 20 |         - |              - |              - |     >                - | - >                 -1 |         - |              - |              - |     >                - | - > > I’d greatly appreciate any feedback on this alternative approach, as > well as benchmarking on a pretty large machine to see its impact at > scale. > > [0]: > https://www.postgresql.org/message-id/CAPpHfdsTKAQqC3A48-MGQhrhfEamXZPb64w%3Dutk7thQcOMNr7Q%40mail.gmail.com > > -- > Best regards, > Ilia Evdokimov, > Tantor Labs LLC. I have rebased the v16 patch to v17. I updated the extra description in accordance with commit 977d865 [0] and removed the additional test with pg_sleep, as it may produce different results on different platforms. [0]: https://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=977d865c36cc6ed4e813b8545b09d06f51534011 -- Best regards, Ilia Evdokimov, Tantor Labs LLC. --------------aCdPOOLXtGWFY9dK9EiskLzg Content-Type: text/x-patch; charset=UTF-8; name="v17-0001-Allow-setting-execution-time-threshold-for-pgss.patch" Content-Disposition: attachment; filename*0="v17-0001-Allow-setting-execution-time-threshold-for-pgss.pat"; filename*1="ch" Content-Transfer-Encoding: base64 RnJvbSA2YjEyZDY1YTFhMTU3MGQyZTZmMjRjNDkxYzI1ZjBiMGM0MzJiODhlIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBJbGlhIEV2ZG9raW1vdiA8aWx5YS5ldmRva2ltb3ZA dGFudG9ybGFicy5ydT4KRGF0ZTogTW9uLCAxNyBGZWIgMjAyNSAxMjoxODowNiArMDMwMApT dWJqZWN0OiBbUEFUQ0ggdjE3XSBBbGxvdyBzZXR0aW5nIGV4ZWN1dGlvbiB0aW1lIHRocmVz aG9sZCBmb3IKIHBnX3N0YXRfc3RhdGVtZW50cwoKTmV3IGNvbmZpZ3VyYXRpb24gcGFyYW1l dGVyIHBnX3N0YXRfc3RhdGVtZW50cy50cmFja19taW5fZHVyYXRpb24gbWFrZXMgaXQKcG9z c2libGUgdG8gdHJhY2sgc3RhdGVtZW50cyB3aG9zZSBleGVjdXRpb24gdGltZSBpcyBncmVh dGVyIHRoYW4gdGhyZXNob2xkLAp0byByZWR1Y2UgdGhlIGFtb3VudCBvZiB0cmFja2luZy4K LS0tCiBjb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9NYWtlZmlsZSAgICAgICAgICAgfCAg IDIgKy0KIC4uLi9leHBlY3RlZC9taW5fZHVyYXRpb24ub3V0ICAgICAgICAgICAgICAgICB8 IDE3NCArKysrKysrKysrKysrKysrKysKIGNvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL21l c29uLmJ1aWxkICAgICAgICB8ICAgMSArCiAuLi4vcGdfc3RhdF9zdGF0ZW1lbnRzL3BnX3N0 YXRfc3RhdGVtZW50cy5jICAgfCAgNzkgKysrKystLS0KIC4uLi9wZ19zdGF0X3N0YXRlbWVu dHMvc3FsL21pbl9kdXJhdGlvbi5zcWwgICB8ICA1MCArKysrKwogZG9jL3NyYy9zZ21sL3Bn c3RhdHN0YXRlbWVudHMuc2dtbCAgICAgICAgICAgIHwgIDIxICsrKwogNiBmaWxlcyBjaGFu Z2VkLCAyOTcgaW5zZXJ0aW9ucygrKSwgMzAgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAx MDA2NDQgY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvZXhwZWN0ZWQvbWluX2R1cmF0aW9u Lm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL3Nx bC9taW5fZHVyYXRpb24uc3FsCgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19zdGF0X3N0YXRl bWVudHMvTWFrZWZpbGUgYi9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9NYWtlZmlsZQpp bmRleCAyNDFjMDI1ODdiLi5kZjUxMmU0MjhlIDEwMDY0NAotLS0gYS9jb250cmliL3BnX3N0 YXRfc3RhdGVtZW50cy9NYWtlZmlsZQorKysgYi9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50 cy9NYWtlZmlsZQpAQCAtMjAsNyArMjAsNyBAQCBMREZMQUdTX1NMICs9ICQoZmlsdGVyIC1s bSwgJChMSUJTKSkKIFJFR1JFU1NfT1BUUyA9IC0tdGVtcC1jb25maWcgJCh0b3Bfc3JjZGly KS9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9wZ19zdGF0X3N0YXRlbWVudHMuY29uZgog UkVHUkVTUyA9IHNlbGVjdCBkbWwgY3Vyc29ycyB1dGlsaXR5IGxldmVsX3RyYWNraW5nIHBs YW5uaW5nIFwKIAl1c2VyX2FjdGl2aXR5IHdhbCBlbnRyeV90aW1lc3RhbXAgcHJpdmlsZWdl cyBleHRlbmRlZCBcCi0JcGFyYWxsZWwgY2xlYW51cCBvbGRleHR2ZXJzaW9ucworCXBhcmFs bGVsIG1pbl9kdXJhdGlvbiBjbGVhbnVwIG9sZGV4dHZlcnNpb25zCiAjIERpc2FibGVkIGJl Y2F1c2UgdGhlc2UgdGVzdHMgcmVxdWlyZSAic2hhcmVkX3ByZWxvYWRfbGlicmFyaWVzPXBn X3N0YXRfc3RhdGVtZW50cyIsCiAjIHdoaWNoIHR5cGljYWwgaW5zdGFsbGNoZWNrIHVzZXJz IGRvIG5vdCBoYXZlIChlLmcuIGJ1aWxkZmFybSBjbGllbnRzKS4KIE5PX0lOU1RBTExDSEVD SyA9IDEKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL2V4cGVjdGVk L21pbl9kdXJhdGlvbi5vdXQgYi9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9leHBlY3Rl ZC9taW5fZHVyYXRpb24ub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAuLmVmNmYyYTQ0MzcKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3N0YXRfc3Rh dGVtZW50cy9leHBlY3RlZC9taW5fZHVyYXRpb24ub3V0CkBAIC0wLDAgKzEsMTc0IEBACist LQorLS0gdHJhY2tfbWluX2R1cmF0aW9uCistLQorLS0gdG9wLWxldmVsIHRyYWNraW5nIC0g c2ltcGxlIHF1ZXJ5IHByb3RvY29sCitTSE9XIHBnX3N0YXRfc3RhdGVtZW50cy50cmFjazsK KyBwZ19zdGF0X3N0YXRlbWVudHMudHJhY2sgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIHRvcAorKDEgcm93KQorCitTRVQgcGdfc3RhdF9zdGF0ZW1lbnRzLnRyYWNrX21pbl9k dXJhdGlvbiA9IC0xOworU0VMRUNUIHBnX3N0YXRfc3RhdGVtZW50c19yZXNldCgpIElTIE5P VCBOVUxMIEFTIHQ7CisgdCAKKy0tLQorIHQKKygxIHJvdykKKworU0VMRUNUIDEgQVMgImlu dCI7CisgaW50IAorLS0tLS0KKyAgIDEKKygxIHJvdykKKworU0VMRUNUIHF1ZXJ5LCBjYWxs cyBGUk9NIHBnX3N0YXRfc3RhdGVtZW50cyBPUkRFUiBCWSBxdWVyeSBDT0xMQVRFICJDIjsK KyBxdWVyeSB8IGNhbGxzIAorLS0tLS0tLSstLS0tLS0tCisoMCByb3dzKQorCitTRVQgcGdf c3RhdF9zdGF0ZW1lbnRzLnRyYWNrX21pbl9kdXJhdGlvbiA9IDA7CitTRUxFQ1QgMSBBUyAi aW50IjsKKyBpbnQgCistLS0tLQorICAgMQorKDEgcm93KQorCitTRUxFQ1QgcXVlcnksIGNh bGxzIEZST00gcGdfc3RhdF9zdGF0ZW1lbnRzIE9SREVSIEJZIHF1ZXJ5IENPTExBVEUgIkMi OworICAgICAgIHF1ZXJ5ICAgICAgICB8IGNhbGxzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLQorIFNFTEVDVCAkMSBBUyAiaW50IiB8ICAgICAxCisoMSByb3cpCisKKy0tIHRv cC1sZXZlbCB0cmFja2luZyAtIGV4dGVuZGVkIHF1ZXJ5IHByb3RvY29sCitTRVQgcGdfc3Rh dF9zdGF0ZW1lbnRzLnRyYWNrX21pbl9kdXJhdGlvbiA9IC0xOworU0VMRUNUIHBnX3N0YXRf c3RhdGVtZW50c19yZXNldCgpIElTIE5PVCBOVUxMIEFTIHQ7CisgdCAKKy0tLQorIHQKKygx IHJvdykKKworU0VMRUNUIDEgXHBhcnNlIHN0bXQKK1xiaW5kX25hbWVkIHN0bXQgXGcKKyA/ Y29sdW1uPyAKKy0tLS0tLS0tLS0KKyAgICAgICAgMQorKDEgcm93KQorCitTRUxFQ1QgcXVl cnksIGNhbGxzIEZST00gcGdfc3RhdF9zdGF0ZW1lbnRzIE9SREVSIEJZIHF1ZXJ5IENPTExB VEUgIkMiOworIHF1ZXJ5IHwgY2FsbHMgCistLS0tLS0tKy0tLS0tLS0KKygwIHJvd3MpCisK K1NFVCBwZ19zdGF0X3N0YXRlbWVudHMudHJhY2tfbWluX2R1cmF0aW9uID0gMDsKK1xiaW5k X25hbWVkIHN0bXQgXGcKKyA/Y29sdW1uPyAKKy0tLS0tLS0tLS0KKyAgICAgICAgMQorKDEg cm93KQorCitTRUxFQ1QgcXVlcnksIGNhbGxzIEZST00gcGdfc3RhdF9zdGF0ZW1lbnRzIE9S REVSIEJZIHF1ZXJ5IENPTExBVEUgIkMiOworICAgcXVlcnkgICB8IGNhbGxzIAorLS0tLS0t LS0tLS0rLS0tLS0tLQorIFNFTEVDVCAkMSB8ICAgICAxCisoMSByb3cpCisKK1NFTEVDVCBw Z19zdGF0X3N0YXRlbWVudHNfcmVzZXQoKSBJUyBOT1QgTlVMTCBBUyB0OworIHQgCistLS0K KyB0CisoMSByb3cpCisKK0RFQUxMT0NBVEUgc3RtdDsKKy0tIG5lc3RlZCB0cmFja2luZyAt IHNpbXBsZSBxdWVyeSBwcm90b2NvbAorU0VUIHBnX3N0YXRfc3RhdGVtZW50cy50cmFjayA9 ICJhbGwiOworU0VMRUNUIHBnX3N0YXRfc3RhdGVtZW50c19yZXNldCgpIElTIE5PVCBOVUxM IEFTIHQ7CisgdCAKKy0tLQorIHQKKygxIHJvdykKKworU0VUIHBnX3N0YXRfc3RhdGVtZW50 cy50cmFja19taW5fZHVyYXRpb24gPSAwOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1Qg MTsKKyBRVUVSWSBQTEFOIAorLS0tLS0tLS0tLS0tCisgUmVzdWx0CisoMSByb3cpCisKK0VY UExBSU4gKENPU1RTIE9GRikgU0VMRUNUIDE7CisgUVVFUlkgUExBTiAKKy0tLS0tLS0tLS0t LQorIFJlc3VsdAorKDEgcm93KQorCitTRVQgcGdfc3RhdF9zdGF0ZW1lbnRzLnRyYWNrX21p bl9kdXJhdGlvbiA9IC0xOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgMTsKKyBRVUVS WSBQTEFOIAorLS0tLS0tLS0tLS0tCisgUmVzdWx0CisoMSByb3cpCisKK0VYUExBSU4gKENP U1RTIE9GRikgU0VMRUNUIDE7CisgUVVFUlkgUExBTiAKKy0tLS0tLS0tLS0tLQorIFJlc3Vs dAorKDEgcm93KQorCitTRUxFQ1QgdG9wbGV2ZWwsIGNhbGxzLCBxdWVyeSBGUk9NIHBnX3N0 YXRfc3RhdGVtZW50cworICBPUkRFUiBCWSBxdWVyeSBDT0xMQVRFICJDIjsKKyB0b3BsZXZl bCB8IGNhbGxzIHwgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5ICAgICAgICAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAgIHwgICAgIDIgfCBFWFBM QUlOIChDT1NUUyBPRkYpIFNFTEVDVCAkMQorIGYgICAgICAgIHwgICAgIDIgfCBTRUxFQ1Qg JDEKKyB0ICAgICAgICB8ICAgICAxIHwgU0VMRUNUIHBnX3N0YXRfc3RhdGVtZW50c19yZXNl dCgpIElTIE5PVCBOVUxMIEFTIHQKKyB0ICAgICAgICB8ICAgICAyIHwgU0VUIHBnX3N0YXRf c3RhdGVtZW50cy50cmFja19taW5fZHVyYXRpb24gPSAkMQorKDQgcm93cykKKworLS0gbmVz dGVkIHRyYWNraW5nIC0gZXh0ZW5kZWQgcXVlcnkgcHJvdG9jb2wKK1NFVCBwZ19zdGF0X3N0 YXRlbWVudHMudHJhY2sgPSAiYWxsIjsKK1NFTEVDVCBwZ19zdGF0X3N0YXRlbWVudHNfcmVz ZXQoKSBJUyBOT1QgTlVMTCBBUyB0OworIHQgCistLS0KKyB0CisoMSByb3cpCisKK1NFVCBw Z19zdGF0X3N0YXRlbWVudHMudHJhY2tfbWluX2R1cmF0aW9uID0gMDsKK0VYUExBSU4gKENP U1RTIE9GRikgU0VMRUNUIDE7IFxwYXJzZSBzdG10CisgUVVFUlkgUExBTiAKKy0tLS0tLS0t LS0tLQorIFJlc3VsdAorKDEgcm93KQorCitcYmluZF9uYW1lZCBzdG10IFxnCisgUVVFUlkg UExBTiAKKy0tLS0tLS0tLS0tLQorIFJlc3VsdAorKDEgcm93KQorCitcYmluZF9uYW1lZCBz dG10IFxnCisgUVVFUlkgUExBTiAKKy0tLS0tLS0tLS0tLQorIFJlc3VsdAorKDEgcm93KQor CitTRVQgcGdfc3RhdF9zdGF0ZW1lbnRzLnRyYWNrX21pbl9kdXJhdGlvbiA9IC0xOworXGJp bmRfbmFtZWQgc3RtdCBcZworIFFVRVJZIFBMQU4gCistLS0tLS0tLS0tLS0KKyBSZXN1bHQK KygxIHJvdykKKworXGJpbmRfbmFtZWQgc3RtdCBcZworIFFVRVJZIFBMQU4gCistLS0tLS0t LS0tLS0KKyBSZXN1bHQKKygxIHJvdykKKworU0VMRUNUIHRvcGxldmVsLCBjYWxscywgcXVl cnkgRlJPTSBwZ19zdGF0X3N0YXRlbWVudHMKKyAgT1JERVIgQlkgcXVlcnkgQ09MTEFURSAi QyI7CisgdG9wbGV2ZWwgfCBjYWxscyB8ICAgICAgICAgICAgICAgICAgICAgcXVlcnkgICAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgfCAgICAgMiB8 IEVYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUICQxCisgZiAgICAgICAgfCAgICAgMyB8IFNF TEVDVCAkMQorIHQgICAgICAgIHwgICAgIDEgfCBTRVQgcGdfc3RhdF9zdGF0ZW1lbnRzLnRy YWNrX21pbl9kdXJhdGlvbiA9ICQxCisoMyByb3dzKQorCmRpZmYgLS1naXQgYS9jb250cmli L3BnX3N0YXRfc3RhdGVtZW50cy9tZXNvbi5idWlsZCBiL2NvbnRyaWIvcGdfc3RhdF9zdGF0 ZW1lbnRzL21lc29uLmJ1aWxkCmluZGV4IDQ0NDZhZjU4YzUuLjY0Mjc2NjVlZTEgMTAwNjQ0 Ci0tLSBhL2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL21lc29uLmJ1aWxkCisrKyBiL2Nv bnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL21lc29uLmJ1aWxkCkBAIC01NCw2ICs1NCw3IEBA IHRlc3RzICs9IHsKICAgICAgICdwcml2aWxlZ2VzJywKICAgICAgICdleHRlbmRlZCcsCiAg ICAgICAncGFyYWxsZWwnLAorICAgICAgJ21pbl9kdXJhdGlvbicsCiAgICAgICAnY2xlYW51 cCcsCiAgICAgICAnb2xkZXh0dmVyc2lvbnMnLAogICAgIF0sCmRpZmYgLS1naXQgYS9jb250 cmliL3BnX3N0YXRfc3RhdGVtZW50cy9wZ19zdGF0X3N0YXRlbWVudHMuYyBiL2NvbnRyaWIv cGdfc3RhdF9zdGF0ZW1lbnRzL3BnX3N0YXRfc3RhdGVtZW50cy5jCmluZGV4IDRhM2U4NTVj ZTkuLmU5MGNmNTBmZGIgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRz L3BnX3N0YXRfc3RhdGVtZW50cy5jCisrKyBiL2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRz L3BnX3N0YXRfc3RhdGVtZW50cy5jCkBAIC0yOTEsNiArMjkxLDcgQEAgc3RhdGljIGNvbnN0 IHN0cnVjdCBjb25maWdfZW51bV9lbnRyeSB0cmFja19vcHRpb25zW10gPQogCiBzdGF0aWMg aW50CXBnc3NfbWF4ID0gNTAwMDsJLyogbWF4ICMgc3RhdGVtZW50cyB0byB0cmFjayAqLwog c3RhdGljIGludAlwZ3NzX3RyYWNrID0gUEdTU19UUkFDS19UT1A7CS8qIHRyYWNraW5nIGxl dmVsICovCitzdGF0aWMgaW50CXBnc3NfdHJhY2tfbWluX2R1cmF0aW9uID0gMDsgLyogbXNl YyBvciAtMSAqLwogc3RhdGljIGJvb2wgcGdzc190cmFja191dGlsaXR5ID0gdHJ1ZTsJLyog d2hldGhlciB0byB0cmFjayB1dGlsaXR5IGNvbW1hbmRzICovCiBzdGF0aWMgYm9vbCBwZ3Nz X3RyYWNrX3BsYW5uaW5nID0gZmFsc2U7CS8qIHdoZXRoZXIgdG8gdHJhY2sgcGxhbm5pbmcK IAkJCQkJCQkJCQkJICogZHVyYXRpb24gKi8KQEAgLTQxNSw2ICs0MTYsMTggQEAgX1BHX2lu aXQodm9pZCkKIAkJCQkJCQlOVUxMLAogCQkJCQkJCU5VTEwpOwogCisJRGVmaW5lQ3VzdG9t SW50VmFyaWFibGUoInBnX3N0YXRfc3RhdGVtZW50cy50cmFja19taW5fZHVyYXRpb24iLAor CQkJCQkJCSJTZXRzIHRoZSBtaW5pbXVtIGV4ZWN1dGlvbiB0aW1lIGFib3ZlIHdoaWNoIHN0 YXRlbWVudHMgd2lsbCBiZSB0cmFja2VkLiIsCisJCQkJCQkJIjAgdHJhY2tzIGFsbCBzdGF0 ZW1lbnRzLiAtMSB0dXJucyB0aGlzIGZlYXR1cmUgb2ZmLiIsCisJCQkJCQkJJnBnc3NfdHJh Y2tfbWluX2R1cmF0aW9uLAorCQkJCQkJCTAsCisJCQkJCQkJLTEsIElOVF9NQVgsCisJCQkJ CQkJUEdDX1NVU0VULAorCQkJCQkJCUdVQ19VTklUX01TLAorCQkJCQkJCU5VTEwsCisJCQkJ CQkJTlVMTCwKKwkJCQkJCQlOVUxMKTsKKwogCURlZmluZUN1c3RvbUVudW1WYXJpYWJsZSgi cGdfc3RhdF9zdGF0ZW1lbnRzLnRyYWNrIiwKIAkJCQkJCQkgIlNlbGVjdHMgd2hpY2ggc3Rh dGVtZW50cyBhcmUgdHJhY2tlZCBieSBwZ19zdGF0X3N0YXRlbWVudHMuIiwKIAkJCQkJCQkg TlVMTCwKQEAgLTEwMDAsNyArMTAxMyw4IEBAIHBnc3NfRXhlY3V0b3JTdGFydChRdWVyeURl c2MgKnF1ZXJ5RGVzYywgaW50IGVmbGFncykKIAkgKiBjb3VudGluZyBvZiBvcHRpbWl6YWJs ZSBzdGF0ZW1lbnRzIHRoYXQgYXJlIGRpcmVjdGx5IGNvbnRhaW5lZCBpbgogCSAqIHV0aWxp dHkgc3RhdGVtZW50cy4KIAkgKi8KLQlpZiAocGdzc19lbmFibGVkKG5lc3RpbmdfbGV2ZWwp ICYmIHF1ZXJ5RGVzYy0+cGxhbm5lZHN0bXQtPnF1ZXJ5SWQgIT0gVUlOVDY0Q09OU1QoMCkp CisJaWYgKHBnc3NfZW5hYmxlZChuZXN0aW5nX2xldmVsKSAmJiBwZ3NzX3RyYWNrX21pbl9k dXJhdGlvbiA+PSAwICYmCisJCXF1ZXJ5RGVzYy0+cGxhbm5lZHN0bXQtPnF1ZXJ5SWQgIT0g VUlOVDY0Q09OU1QoMCkpCiAJewogCQkvKgogCQkgKiBTZXQgdXAgdG8gdHJhY2sgdG90YWwg ZWxhcHNlZCB0aW1lIGluIEV4ZWN1dG9yUnVuLiAgTWFrZSBzdXJlIHRoZQpAQCAtMTA2OSwy NyArMTA4MywzMCBAQCBwZ3NzX0V4ZWN1dG9yRW5kKFF1ZXJ5RGVzYyAqcXVlcnlEZXNjKQog CXVpbnQ2NAkJcXVlcnlJZCA9IHF1ZXJ5RGVzYy0+cGxhbm5lZHN0bXQtPnF1ZXJ5SWQ7CiAK IAlpZiAocXVlcnlJZCAhPSBVSU5UNjRDT05TVCgwKSAmJiBxdWVyeURlc2MtPnRvdGFsdGlt ZSAmJgotCQlwZ3NzX2VuYWJsZWQobmVzdGluZ19sZXZlbCkpCisJCXBnc3NfZW5hYmxlZChu ZXN0aW5nX2xldmVsKSAmJiBwZ3NzX3RyYWNrX21pbl9kdXJhdGlvbiA+PSAwKQogCXsKKwkJ ZG91YmxlCQltc2VjOwogCQkvKgogCQkgKiBNYWtlIHN1cmUgc3RhdHMgYWNjdW11bGF0aW9u IGlzIGRvbmUuICAoTm90ZTogaXQncyBva2F5IGlmIHNldmVyYWwKIAkJICogbGV2ZWxzIG9m IGhvb2sgYWxsIGRvIHRoaXMuKQogCQkgKi8KIAkJSW5zdHJFbmRMb29wKHF1ZXJ5RGVzYy0+ dG90YWx0aW1lKTsKIAotCQlwZ3NzX3N0b3JlKHF1ZXJ5RGVzYy0+c291cmNlVGV4dCwKLQkJ CQkgICBxdWVyeUlkLAotCQkJCSAgIHF1ZXJ5RGVzYy0+cGxhbm5lZHN0bXQtPnN0bXRfbG9j YXRpb24sCi0JCQkJICAgcXVlcnlEZXNjLT5wbGFubmVkc3RtdC0+c3RtdF9sZW4sCi0JCQkJ ICAgUEdTU19FWEVDLAotCQkJCSAgIHF1ZXJ5RGVzYy0+dG90YWx0aW1lLT50b3RhbCAqIDEw MDAuMCwJLyogY29udmVydCB0byBtc2VjICovCi0JCQkJICAgcXVlcnlEZXNjLT5lc3RhdGUt PmVzX3RvdGFsX3Byb2Nlc3NlZCwKLQkJCQkgICAmcXVlcnlEZXNjLT50b3RhbHRpbWUtPmJ1 ZnVzYWdlLAotCQkJCSAgICZxdWVyeURlc2MtPnRvdGFsdGltZS0+d2FsdXNhZ2UsCi0JCQkJ ICAgcXVlcnlEZXNjLT5lc3RhdGUtPmVzX2ppdCA/ICZxdWVyeURlc2MtPmVzdGF0ZS0+ZXNf aml0LT5pbnN0ciA6IE5VTEwsCi0JCQkJICAgTlVMTCwKLQkJCQkgICBxdWVyeURlc2MtPmVz dGF0ZS0+ZXNfcGFyYWxsZWxfd29ya2Vyc190b19sYXVuY2gsCi0JCQkJICAgcXVlcnlEZXNj LT5lc3RhdGUtPmVzX3BhcmFsbGVsX3dvcmtlcnNfbGF1bmNoZWQpOworCQltc2VjID0gcXVl cnlEZXNjLT50b3RhbHRpbWUtPnRvdGFsICogMTAwMC4wOworCQlpZiAobXNlYyA+PSBwZ3Nz X3RyYWNrX21pbl9kdXJhdGlvbikKKwkJCXBnc3Nfc3RvcmUocXVlcnlEZXNjLT5zb3VyY2VU ZXh0LAorCQkJCQkJcXVlcnlJZCwKKwkJCQkJCXF1ZXJ5RGVzYy0+cGxhbm5lZHN0bXQtPnN0 bXRfbG9jYXRpb24sCisJCQkJCQlxdWVyeURlc2MtPnBsYW5uZWRzdG10LT5zdG10X2xlbiwK KwkJCQkJCVBHU1NfRVhFQywKKwkJCQkJCW1zZWMsCisJCQkJCQlxdWVyeURlc2MtPmVzdGF0 ZS0+ZXNfdG90YWxfcHJvY2Vzc2VkLAorCQkJCQkJJnF1ZXJ5RGVzYy0+dG90YWx0aW1lLT5i dWZ1c2FnZSwKKwkJCQkJCSZxdWVyeURlc2MtPnRvdGFsdGltZS0+d2FsdXNhZ2UsCisJCQkJ CQlxdWVyeURlc2MtPmVzdGF0ZS0+ZXNfaml0ID8gJnF1ZXJ5RGVzYy0+ZXN0YXRlLT5lc19q aXQtPmluc3RyIDogTlVMTCwKKwkJCQkJCU5VTEwsCisJCQkJCQlxdWVyeURlc2MtPmVzdGF0 ZS0+ZXNfcGFyYWxsZWxfd29ya2Vyc190b19sYXVuY2gsCisJCQkJCQlxdWVyeURlc2MtPmVz dGF0ZS0+ZXNfcGFyYWxsZWxfd29ya2Vyc19sYXVuY2hlZCk7CiAJfQogCiAJaWYgKHByZXZf RXhlY3V0b3JFbmQpCkBAIC0xMTEyLDcgKzExMjksOCBAQCBwZ3NzX1Byb2Nlc3NVdGlsaXR5 KFBsYW5uZWRTdG10ICpwc3RtdCwgY29uc3QgY2hhciAqcXVlcnlTdHJpbmcsCiAJdWludDY0 CQlzYXZlZF9xdWVyeUlkID0gcHN0bXQtPnF1ZXJ5SWQ7CiAJaW50CQkJc2F2ZWRfc3RtdF9s b2NhdGlvbiA9IHBzdG10LT5zdG10X2xvY2F0aW9uOwogCWludAkJCXNhdmVkX3N0bXRfbGVu ID0gcHN0bXQtPnN0bXRfbGVuOwotCWJvb2wJCWVuYWJsZWQgPSBwZ3NzX3RyYWNrX3V0aWxp dHkgJiYgcGdzc19lbmFibGVkKG5lc3RpbmdfbGV2ZWwpOworCWJvb2wJCWVuYWJsZWQgPSBw Z3NzX3RyYWNrX3V0aWxpdHkgJiYgcGdzc19lbmFibGVkKG5lc3RpbmdfbGV2ZWwpICYmCisJ CQkJCQkgIHBnc3NfdHJhY2tfbWluX2R1cmF0aW9uID49IDA7CiAKIAkvKgogCSAqIEZvcmNl IHV0aWxpdHkgc3RhdGVtZW50cyB0byBnZXQgcXVlcnlJZCB6ZXJvLiAgV2UgZG8gdGhpcyBl dmVuIGluIGNhc2VzCkBAIC0xMTU1LDYgKzExNzMsNyBAQCBwZ3NzX1Byb2Nlc3NVdGlsaXR5 KFBsYW5uZWRTdG10ICpwc3RtdCwgY29uc3QgY2hhciAqcXVlcnlTdHJpbmcsCiAJCQkJCWJ1 ZnVzYWdlOwogCQlXYWxVc2FnZQl3YWx1c2FnZV9zdGFydCwKIAkJCQkJd2FsdXNhZ2U7CisJ CWRvdWJsZQkJbXNlYzsKIAogCQlidWZ1c2FnZV9zdGFydCA9IHBnQnVmZmVyVXNhZ2U7CiAJ CXdhbHVzYWdlX3N0YXJ0ID0gcGdXYWxVc2FnZTsKQEAgLTEyMTAsMTkgKzEyMjksMjEgQEAg cGdzc19Qcm9jZXNzVXRpbGl0eShQbGFubmVkU3RtdCAqcHN0bXQsIGNvbnN0IGNoYXIgKnF1 ZXJ5U3RyaW5nLAogCQltZW1zZXQoJndhbHVzYWdlLCAwLCBzaXplb2YoV2FsVXNhZ2UpKTsK IAkJV2FsVXNhZ2VBY2N1bURpZmYoJndhbHVzYWdlLCAmcGdXYWxVc2FnZSwgJndhbHVzYWdl X3N0YXJ0KTsKIAotCQlwZ3NzX3N0b3JlKHF1ZXJ5U3RyaW5nLAotCQkJCSAgIHNhdmVkX3F1 ZXJ5SWQsCi0JCQkJICAgc2F2ZWRfc3RtdF9sb2NhdGlvbiwKLQkJCQkgICBzYXZlZF9zdG10 X2xlbiwKLQkJCQkgICBQR1NTX0VYRUMsCi0JCQkJICAgSU5TVFJfVElNRV9HRVRfTUlMTElT RUMoZHVyYXRpb24pLAotCQkJCSAgIHJvd3MsCi0JCQkJICAgJmJ1ZnVzYWdlLAotCQkJCSAg ICZ3YWx1c2FnZSwKLQkJCQkgICBOVUxMLAotCQkJCSAgIE5VTEwsCi0JCQkJICAgMCwKLQkJ CQkgICAwKTsKKwkJbXNlYyA9IElOU1RSX1RJTUVfR0VUX01JTExJU0VDKGR1cmF0aW9uKTsK KwkJaWYgKG1zZWMgPj0gcGdzc190cmFja19taW5fZHVyYXRpb24pCisJCQlwZ3NzX3N0b3Jl KHF1ZXJ5U3RyaW5nLAorCQkJCQkJc2F2ZWRfcXVlcnlJZCwKKwkJCQkJCXNhdmVkX3N0bXRf bG9jYXRpb24sCisJCQkJCQlzYXZlZF9zdG10X2xlbiwKKwkJCQkJCVBHU1NfRVhFQywKKwkJ CQkJCW1zZWMsCisJCQkJCQlyb3dzLAorCQkJCQkJJmJ1ZnVzYWdlLAorCQkJCQkJJndhbHVz YWdlLAorCQkJCQkJTlVMTCwKKwkJCQkJCU5VTEwsCisJCQkJCQkwLAorCQkJCQkJMCk7CiAJ fQogCWVsc2UKIAl7CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9z cWwvbWluX2R1cmF0aW9uLnNxbCBiL2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL3NxbC9t aW5fZHVyYXRpb24uc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAu LjYzOTAzY2MzODgKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3N0YXRfc3RhdGVt ZW50cy9zcWwvbWluX2R1cmF0aW9uLnNxbApAQCAtMCwwICsxLDUwIEBACistLQorLS0gdHJh Y2tfbWluX2R1cmF0aW9uCistLQorCistLSB0b3AtbGV2ZWwgdHJhY2tpbmcgLSBzaW1wbGUg cXVlcnkgcHJvdG9jb2wKK1NIT1cgcGdfc3RhdF9zdGF0ZW1lbnRzLnRyYWNrOworU0VUIHBn X3N0YXRfc3RhdGVtZW50cy50cmFja19taW5fZHVyYXRpb24gPSAtMTsKK1NFTEVDVCBwZ19z dGF0X3N0YXRlbWVudHNfcmVzZXQoKSBJUyBOT1QgTlVMTCBBUyB0OworU0VMRUNUIDEgQVMg ImludCI7CitTRUxFQ1QgcXVlcnksIGNhbGxzIEZST00gcGdfc3RhdF9zdGF0ZW1lbnRzIE9S REVSIEJZIHF1ZXJ5IENPTExBVEUgIkMiOworU0VUIHBnX3N0YXRfc3RhdGVtZW50cy50cmFj a19taW5fZHVyYXRpb24gPSAwOworU0VMRUNUIDEgQVMgImludCI7CitTRUxFQ1QgcXVlcnks IGNhbGxzIEZST00gcGdfc3RhdF9zdGF0ZW1lbnRzIE9SREVSIEJZIHF1ZXJ5IENPTExBVEUg IkMiOworCistLSB0b3AtbGV2ZWwgdHJhY2tpbmcgLSBleHRlbmRlZCBxdWVyeSBwcm90b2Nv bAorU0VUIHBnX3N0YXRfc3RhdGVtZW50cy50cmFja19taW5fZHVyYXRpb24gPSAtMTsKK1NF TEVDVCBwZ19zdGF0X3N0YXRlbWVudHNfcmVzZXQoKSBJUyBOT1QgTlVMTCBBUyB0OworU0VM RUNUIDEgXHBhcnNlIHN0bXQKK1xiaW5kX25hbWVkIHN0bXQgXGcKK1NFTEVDVCBxdWVyeSwg Y2FsbHMgRlJPTSBwZ19zdGF0X3N0YXRlbWVudHMgT1JERVIgQlkgcXVlcnkgQ09MTEFURSAi QyI7CitTRVQgcGdfc3RhdF9zdGF0ZW1lbnRzLnRyYWNrX21pbl9kdXJhdGlvbiA9IDA7Citc YmluZF9uYW1lZCBzdG10IFxnCitTRUxFQ1QgcXVlcnksIGNhbGxzIEZST00gcGdfc3RhdF9z dGF0ZW1lbnRzIE9SREVSIEJZIHF1ZXJ5IENPTExBVEUgIkMiOworU0VMRUNUIHBnX3N0YXRf c3RhdGVtZW50c19yZXNldCgpIElTIE5PVCBOVUxMIEFTIHQ7CitERUFMTE9DQVRFIHN0bXQ7 CisKKy0tIG5lc3RlZCB0cmFja2luZyAtIHNpbXBsZSBxdWVyeSBwcm90b2NvbAorU0VUIHBn X3N0YXRfc3RhdGVtZW50cy50cmFjayA9ICJhbGwiOworU0VMRUNUIHBnX3N0YXRfc3RhdGVt ZW50c19yZXNldCgpIElTIE5PVCBOVUxMIEFTIHQ7CitTRVQgcGdfc3RhdF9zdGF0ZW1lbnRz LnRyYWNrX21pbl9kdXJhdGlvbiA9IDA7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAx OworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgMTsKK1NFVCBwZ19zdGF0X3N0YXRlbWVu dHMudHJhY2tfbWluX2R1cmF0aW9uID0gLTE7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVD VCAxOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgMTsKK1NFTEVDVCB0b3BsZXZlbCwg Y2FsbHMsIHF1ZXJ5IEZST00gcGdfc3RhdF9zdGF0ZW1lbnRzCisgIE9SREVSIEJZIHF1ZXJ5 IENPTExBVEUgIkMiOworCistLSBuZXN0ZWQgdHJhY2tpbmcgLSBleHRlbmRlZCBxdWVyeSBw cm90b2NvbAorU0VUIHBnX3N0YXRfc3RhdGVtZW50cy50cmFjayA9ICJhbGwiOworU0VMRUNU IHBnX3N0YXRfc3RhdGVtZW50c19yZXNldCgpIElTIE5PVCBOVUxMIEFTIHQ7CitTRVQgcGdf c3RhdF9zdGF0ZW1lbnRzLnRyYWNrX21pbl9kdXJhdGlvbiA9IDA7CitFWFBMQUlOIChDT1NU UyBPRkYpIFNFTEVDVCAxOyBccGFyc2Ugc3RtdAorXGJpbmRfbmFtZWQgc3RtdCBcZworXGJp bmRfbmFtZWQgc3RtdCBcZworU0VUIHBnX3N0YXRfc3RhdGVtZW50cy50cmFja19taW5fZHVy YXRpb24gPSAtMTsKK1xiaW5kX25hbWVkIHN0bXQgXGcKK1xiaW5kX25hbWVkIHN0bXQgXGcK K1NFTEVDVCB0b3BsZXZlbCwgY2FsbHMsIHF1ZXJ5IEZST00gcGdfc3RhdF9zdGF0ZW1lbnRz CisgIE9SREVSIEJZIHF1ZXJ5IENPTExBVEUgIkMiOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9m IGZpbGUKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9wZ3N0YXRzdGF0ZW1lbnRzLnNnbWwg Yi9kb2Mvc3JjL3NnbWwvcGdzdGF0c3RhdGVtZW50cy5zZ21sCmluZGV4IGUyYWMxYzJkNTAu LmNhZTU2YWUxNTMgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9wZ3N0YXRzdGF0ZW1lbnRz LnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3Bnc3RhdHN0YXRlbWVudHMuc2dtbApAQCAtOTQ1 LDYgKzk0NSwyNyBAQAogICAgIDwvbGlzdGl0ZW0+CiAgICA8L3Zhcmxpc3RlbnRyeT4KIAor ICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT4KKyAgICAgPHZhcm5hbWU+cGdfc3RhdF9z dGF0ZW1lbnRzLnRyYWNrX21pbl9kdXJhdGlvbjwvdmFybmFtZT4gKDx0eXBlPnJlYWw8L3R5 cGU+KQorICAgICA8aW5kZXh0ZXJtPgorICAgICAgPHByaW1hcnk+PHZhcm5hbWU+cGdfc3Rh dF9zdGF0ZW1lbnRzLnRyYWNrX21pbl9kdXJhdGlvbjwvdmFybmFtZT4gY29uZmlndXJhdGlv biBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAgIDwvaW5kZXh0ZXJtPgorICAgIDwvdGVybT4K KworICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICA8dmFybmFtZT5wZ19zdGF0 X3N0YXRlbWVudHMudHJhY2tfbWluX2R1cmF0aW9uPC92YXJuYW1lPiBpcyB0aGUgbWluaW11 bSBzdGF0ZW1lbnQKKyAgICAgIGV4ZWN1dGlvbiB0aW1lLCBpbiBtaWxsaXNlY29uZHMsIHRo YXQgd2lsbCBjYXVzZSB0aGUgc3RhdGVtZW50IHRvCisgICAgICBiZSB0cmFja2VkLiBTZXR0 aW5nIHRoaXMgdG8gPGxpdGVyYWw+MDwvbGl0ZXJhbD4gdHJhY2tzIGFsbCBzdGF0ZW1lbnRz LgorICAgICAgPGxpdGVyYWw+LTE8L2xpdGVyYWw+ICh0aGUgZGVmYXVsdCkgZGlzYWJsZXMg dHJhY2tpbmcgb2Ygc3RhdGVtZW50cy4gRm9yCisgICAgICBleGFtcGxlLCBpZiB5b3Ugc2V0 IGl0IHRvIDxsaXRlcmFsPjI1MG1zPC9saXRlcmFsPiB0aGVuIGFsbCBzdGF0ZW1lbnRzCisg ICAgICB0aGF0IHJ1biAyNTBtcyBvciBsb25nZXIgd2lsbCBiZSB0cmFja2VkLiBPbmx5IHN1 cGVydXNlcnMgY2FuIGNoYW5nZSB0aGlzCisgICAgICBzZXR0aW5nLgorICAgICA8L3BhcmE+ CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCiAgICA8dmFybGlzdGVu dHJ5PgogICAgIDx0ZXJtPgogICAgICA8dmFybmFtZT5wZ19zdGF0X3N0YXRlbWVudHMuc2F2 ZTwvdmFybmFtZT4gKDx0eXBlPmJvb2xlYW48L3R5cGU+KQotLSAKMi4zNC4xCgo= --------------aCdPOOLXtGWFY9dK9EiskLzg--