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 1tcsXz-003Nfq-16 for pgsql-hackers@arkaria.postgresql.org; Tue, 28 Jan 2025 20:50:59 +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 1tcsXw-003FV7-4D for pgsql-hackers@arkaria.postgresql.org; Tue, 28 Jan 2025 20:50:56 +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 1tcsXv-003FUy-NI for pgsql-hackers@lists.postgresql.org; Tue, 28 Jan 2025 20:50:55 +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 1tcsXs-0021aR-10 for pgsql-hackers@postgresql.org; Tue, 28 Jan 2025 20:50:55 +0000 Received: from mail-nwsmtp-smtp-production-main-63.sas.yp-c.yandex.net (mail-nwsmtp-smtp-production-main-63.sas.yp-c.yandex.net [IPv6:2a02:6b8:c08:1699:0:640:fad2:0]) by forward103b.mail.yandex.net (Yandex) with ESMTPS id 5ABC560A84; Tue, 28 Jan 2025 23:50:50 +0300 (MSK) Received: by mail-nwsmtp-smtp-production-main-63.sas.yp-c.yandex.net (smtp/Yandex) with ESMTPSA id mokmUY9OcSw0-W89Io0GW; Tue, 28 Jan 2025 23:50:49 +0300 X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tantorlabs.com; s=mail; t=1738097449; bh=JcLEF/mNpbPe875x60DSgp2wzgGGrd0PNioNLegXQ3k=; h=In-Reply-To:Cc:Date:References:To:Subject:Message-ID:From; b=kW84mhm+bbbcR7feSiJqYQrITHF7VwKcJh9AQOZq7WltCIUptC0RQAj2anPnowMPd MR6KQ1z2TG5DSDViLp8Uk5kY1k/7RmbBqFFaLlth5fIX5YpaNqAiB0QaGDLiO1zWi6 Q+Eb/3G2QTIOqejtw476adlzx4VFlr5op/Zj9hHQ= Authentication-Results: mail-nwsmtp-smtp-production-main-63.sas.yp-c.yandex.net; dkim=pass header.i=@tantorlabs.com Content-Type: multipart/mixed; boundary="------------mY6T4ZWjHDZrHvClTmWmpHFT" Message-ID: Date: Tue, 28 Jan 2025 23:50:48 +0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Sample rate added to pg_stat_statements To: Sami Imseih Cc: Andrey Borodin , Alena Rybakina , Alexander Korotkov , Michael Paquier , Greg Sabino Mullane , pgsql-hackers References: <6482A576-4465-4E46-A42C-F1767E8DDE30@yandex-team.ru> <20994d10-ab44-4c6b-91bc-c4675cd2e58e@tantorlabs.com> <9D8A5BC8-A3A5-4DA9-9382-F30D343247D1@yandex-team.ru> <6cf6270b-e8fa-4d99-b74a-17e781cdf309@tantorlabs.com> <3a27c830-b81f-4560-9774-a87d9b922fbd@tantorlabs.com> <7AD765EF-14DE-4B3E-8282-E82A9B44DBAA@yandex-team.ru> <0c7770bd-9750-4200-a472-bdb262583c2f@tantorlabs.com> Content-Language: en-US From: Ilia Evdokimov In-Reply-To: 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. --------------mY6T4ZWjHDZrHvClTmWmpHFT Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 28.01.2025 20:21, Sami Imseih wrote: >> All the changes mentioned above are included in the v13 patch. Since the >> patch status is 'Ready for Committer,' I believe it is now better for >> upstream inclusion, with improved details in tests and documentation. Do >> you have any further suggestions? > I am not quite clear on the sample_1.out. I do like the idea of separating > the sample tests, but I was thinking of something a bit more simple. > What do you think of my attached, sampling.sql, test? It tests sample > rate in both > simple and extended query protocols and for both top level and > nested levels? That sounds great! I've added your sample.sql file to my v14 patch. However, I was focused on testing sample_rate values between 0 and 1. The approach I came up with was using the sample{_1}.out files.  I’ve removed the test involving those files for now, but if the committer prefers to keep it, I can reintroduce them. > >> If anyone has the capability to run this benchmark on machines with more >> CPUs or with different queries, it would be nice. I’d appreciate any >> suggestions or feedback. > I wanted to share some additional benchmarks I ran as well > on a r8g.48xlarge ( 192 vCPUs, 1,536 GiB of memory) configured > with 16GB of shared_buffers. I also attached the benchmark.sh > script used to generate the output. > The benchmark is running the select-only pgbench workload, > so we have a single heavily contentious entry, which is the > worst case. > > The test shows that the spinlock (SpinDelay waits) > becomes an issue at high connection counts and will > become worse on larger machines. A sample_rate going from > 1 to .75 shows a 60% improvement; but this is on a single > contentious entry. Most workloads will likely not see this type > of improvement. I also could not really observe > this type of difference on smaller machines ( i.e. 32 vCPUs), > as expected. > > ## init > pgbench -i -s500 > > ### 192 connections > pgbench -c192 -j20 -S -Mprepared -T120 --progress 10 > > sample_rate = 1 > tps = 484338.769799 (without initial connection time) > waits > ----- > 11107 SpinDelay > 9568 CPU > 929 ClientRead > 13 DataFileRead > 3 BufferMapping > > sample_rate = .75 > tps = 909547.562124 (without initial connection time) > waits > ----- > 12079 CPU > 4781 SpinDelay > 2100 ClientRead > > sample_rate = .5 > tps = 1028594.555273 (without initial connection time) > waits > ----- > 13253 CPU > 3378 ClientRead > 174 SpinDelay > > sample_rate = .25 > tps = 1019507.126313 (without initial connection time) > waits > ----- > 13397 CPU > 3423 ClientRead > > sample_rate = 0 > tps = 1015425.288538 (without initial connection time) > waits > ----- > 13106 CPU > 3502 ClientRead > > ### 32 connections > pgbench -c32 -j20 -S -Mprepared -T120 --progress 10 > > sample_rate = 1 > tps = 620667.049565 (without initial connection time) > waits > ----- > 1782 CPU > 560 ClientRead > > sample_rate = .75 > tps = 620663.131347 (without initial connection time) > waits > ----- > 1736 CPU > 554 ClientRead > > sample_rate = .5 > tps = 624094.688239 (without initial connection time) > waits > ----- > 1741 CPU > 648 ClientRead > > sample_rate = .25 > tps = 628638.538204 (without initial connection time) > waits > ----- > 1702 CPU > 576 ClientRead > > sample_rate = 0 > tps = 630483.464912 (without initial connection time) > waits > ----- > 1638 CPU > 574 ClientRead > > Regards, > > Sami Thank you so much for benchmarking this on a pretty large machine with a large number of CPUs. The results look fantastic, and I truly appreciate your effort. BWT, I realized that the 'sampling' test needs to be added not only to the Makefile but also to meson.build. I've included that in the v14 patch. -- Best regards, Ilia Evdokimov, Tantor Labs LLC. --------------mY6T4ZWjHDZrHvClTmWmpHFT Content-Type: text/x-patch; charset=UTF-8; name="v14-0001-Allow-setting-sample-rate-for-pg_stat_statements.patch" Content-Disposition: attachment; filename*0="v14-0001-Allow-setting-sample-rate-for-pg_stat_statements.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA3YzlkNDUzMjVlMjlhNjUyNTk3NDBkNTI1NWQzOWY5ZjU3ZWU2ZmJhIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBJbGlhIEV2ZG9raW1vdiA8aWx5YS5ldmRva2ltb3ZA dGFudG9ybGFicy5jb20+CkRhdGU6IFR1ZSwgMjggSmFuIDIwMjUgMjM6MDQ6MzQgKzAzMDAK U3ViamVjdDogW1BBVENIXSBBbGxvdyBzZXR0aW5nIHNhbXBsZSByYXRlIGZvciBwZ19zdGF0 X3N0YXRlbWVudHMKCk5ldyBjb25maWd1cmF0aW9uIHBhcmFtZXRlciBwZ19zdGF0X3N0YXRl bWVudHMuc2FtcGxlX3JhdGUgbWFrZXMgaXQKcG9zc2libGUgdG8gdHJhY2sganVzdCBhIGZy YWN0aW9uIG9mIHRoZSBxdWVyaWVzIG1lZXRpbmcgdGhlIGNvbmZpZ3VyZWQKdGhyZXNob2xk LCB0byByZWR1Y2UgdGhlIGFtb3VudCBvZiB0cmFja2luZy4KLS0tCiBjb250cmliL3BnX3N0 YXRfc3RhdGVtZW50cy9NYWtlZmlsZSAgICAgICAgICAgfCAgIDIgKy0KIC4uLi9wZ19zdGF0 X3N0YXRlbWVudHMvZXhwZWN0ZWQvc2FtcGxpbmcub3V0ICB8IDE3NCArKysrKysrKysrKysr KysrKysKIGNvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL21lc29uLmJ1aWxkICAgICAgICB8 ICAgMSArCiAuLi4vcGdfc3RhdF9zdGF0ZW1lbnRzL3BnX3N0YXRfc3RhdGVtZW50cy5jICAg fCAgNTkgKysrKystCiBjb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9zcWwvc2FtcGxpbmcu c3FsICAgfCAgNTAgKysrKysKIGRvYy9zcmMvc2dtbC9wZ3N0YXRzdGF0ZW1lbnRzLnNnbWwg ICAgICAgICAgICB8ICAxOSArKwogNiBmaWxlcyBjaGFuZ2VkLCAyOTcgaW5zZXJ0aW9ucygr KSwgOCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3N0YXRf c3RhdGVtZW50cy9leHBlY3RlZC9zYW1wbGluZy5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBj b250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9zcWwvc2FtcGxpbmcuc3FsCgpkaWZmIC0tZ2l0 IGEvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvTWFrZWZpbGUgYi9jb250cmliL3BnX3N0 YXRfc3RhdGVtZW50cy9NYWtlZmlsZQppbmRleCAyNDFjMDI1ODdiLi5iNzBiZGZhZjJkIDEw MDY0NAotLS0gYS9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9NYWtlZmlsZQorKysgYi9j b250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9NYWtlZmlsZQpAQCAtMjAsNyArMjAsNyBAQCBM REZMQUdTX1NMICs9ICQoZmlsdGVyIC1sbSwgJChMSUJTKSkKIFJFR1JFU1NfT1BUUyA9IC0t dGVtcC1jb25maWcgJCh0b3Bfc3JjZGlyKS9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9w Z19zdGF0X3N0YXRlbWVudHMuY29uZgogUkVHUkVTUyA9IHNlbGVjdCBkbWwgY3Vyc29ycyB1 dGlsaXR5IGxldmVsX3RyYWNraW5nIHBsYW5uaW5nIFwKIAl1c2VyX2FjdGl2aXR5IHdhbCBl bnRyeV90aW1lc3RhbXAgcHJpdmlsZWdlcyBleHRlbmRlZCBcCi0JcGFyYWxsZWwgY2xlYW51 cCBvbGRleHR2ZXJzaW9ucworCXBhcmFsbGVsIHNhbXBsaW5nIGNsZWFudXAgb2xkZXh0dmVy c2lvbnMKICMgRGlzYWJsZWQgYmVjYXVzZSB0aGVzZSB0ZXN0cyByZXF1aXJlICJzaGFyZWRf cHJlbG9hZF9saWJyYXJpZXM9cGdfc3RhdF9zdGF0ZW1lbnRzIiwKICMgd2hpY2ggdHlwaWNh bCBpbnN0YWxsY2hlY2sgdXNlcnMgZG8gbm90IGhhdmUgKGUuZy4gYnVpbGRmYXJtIGNsaWVu dHMpLgogTk9fSU5TVEFMTENIRUNLID0gMQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19zdGF0 X3N0YXRlbWVudHMvZXhwZWN0ZWQvc2FtcGxpbmcub3V0IGIvY29udHJpYi9wZ19zdGF0X3N0 YXRlbWVudHMvZXhwZWN0ZWQvc2FtcGxpbmcub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAuLjIyMDQyMTVmNjQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmli L3BnX3N0YXRfc3RhdGVtZW50cy9leHBlY3RlZC9zYW1wbGluZy5vdXQKQEAgLTAsMCArMSwx NzQgQEAKKy0tCistLSBzYW1wbGUgc3RhdGVtZW50cworLS0KKy0tIHRvcC1sZXZlbCB0cmFj a2luZyAtIHNpbXBsZSBxdWVyeSBwcm90b2NvbAorU0hPVyBwZ19zdGF0X3N0YXRlbWVudHMu dHJhY2s7CisgcGdfc3RhdF9zdGF0ZW1lbnRzLnRyYWNrIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyB0b3AKKygxIHJvdykKKworU0VUIHBnX3N0YXRfc3RhdGVtZW50cy5zYW1w bGVfcmF0ZSA9IDAuMDsKK1NFTEVDVCBwZ19zdGF0X3N0YXRlbWVudHNfcmVzZXQoKSBJUyBO T1QgTlVMTCBBUyB0OworIHQgCistLS0KKyB0CisoMSByb3cpCisKK1NFTEVDVCAxIEFTICJp bnQiOworIGludCAKKy0tLS0tCisgICAxCisoMSByb3cpCisKK1NFTEVDVCBxdWVyeSwgY2Fs bHMgRlJPTSBwZ19zdGF0X3N0YXRlbWVudHMgT1JERVIgQlkgcXVlcnkgQ09MTEFURSAiQyI7 CisgcXVlcnkgfCBjYWxscyAKKy0tLS0tLS0rLS0tLS0tLQorKDAgcm93cykKKworU0VUIHBn X3N0YXRfc3RhdGVtZW50cy5zYW1wbGVfcmF0ZSA9IDEuMDsKK1NFTEVDVCAxIEFTICJpbnQi OworIGludCAKKy0tLS0tCisgICAxCisoMSByb3cpCisKK1NFTEVDVCBxdWVyeSwgY2FsbHMg RlJPTSBwZ19zdGF0X3N0YXRlbWVudHMgT1JERVIgQlkgcXVlcnkgQ09MTEFURSAiQyI7Cisg ICAgICAgcXVlcnkgICAgICAgIHwgY2FsbHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tCisgU0VMRUNUICQxIEFTICJpbnQiIHwgICAgIDEKKygxIHJvdykKKworLS0gdG9wLWxl dmVsIHRyYWNraW5nIC0gZXh0ZW5kZWQgcXVlcnkgcHJvdG9jb2wKK1NFVCBwZ19zdGF0X3N0 YXRlbWVudHMuc2FtcGxlX3JhdGUgPSAwLjA7CitTRUxFQ1QgcGdfc3RhdF9zdGF0ZW1lbnRz X3Jlc2V0KCkgSVMgTk9UIE5VTEwgQVMgdDsKKyB0IAorLS0tCisgdAorKDEgcm93KQorCitT RUxFQ1QgMSBccGFyc2Ugc3RtdAorXGJpbmRfbmFtZWQgc3RtdCBcZworID9jb2x1bW4/IAor LS0tLS0tLS0tLQorICAgICAgICAxCisoMSByb3cpCisKK1NFTEVDVCBxdWVyeSwgY2FsbHMg RlJPTSBwZ19zdGF0X3N0YXRlbWVudHMgT1JERVIgQlkgcXVlcnkgQ09MTEFURSAiQyI7Cisg cXVlcnkgfCBjYWxscyAKKy0tLS0tLS0rLS0tLS0tLQorKDAgcm93cykKKworU0VUIHBnX3N0 YXRfc3RhdGVtZW50cy5zYW1wbGVfcmF0ZSA9IDEuMDsKK1xiaW5kX25hbWVkIHN0bXQgXGcK KyA/Y29sdW1uPyAKKy0tLS0tLS0tLS0KKyAgICAgICAgMQorKDEgcm93KQorCitTRUxFQ1Qg cXVlcnksIGNhbGxzIEZST00gcGdfc3RhdF9zdGF0ZW1lbnRzIE9SREVSIEJZIHF1ZXJ5IENP TExBVEUgIkMiOworICAgcXVlcnkgICB8IGNhbGxzIAorLS0tLS0tLS0tLS0rLS0tLS0tLQor IFNFTEVDVCAkMSB8ICAgICAxCisoMSByb3cpCisKK1NFTEVDVCBwZ19zdGF0X3N0YXRlbWVu dHNfcmVzZXQoKSBJUyBOT1QgTlVMTCBBUyB0OworIHQgCistLS0KKyB0CisoMSByb3cpCisK K0RFQUxMT0NBVEUgc3RtdDsKKy0tIG5lc3RlZCB0cmFja2luZyAtIHNpbXBsZSBxdWVyeSBw cm90b2NvbAorU0VUIHBnX3N0YXRfc3RhdGVtZW50cy50cmFjayA9ICJhbGwiOworU0VMRUNU IHBnX3N0YXRfc3RhdGVtZW50c19yZXNldCgpIElTIE5PVCBOVUxMIEFTIHQ7CisgdCAKKy0t LQorIHQKKygxIHJvdykKKworU0VUIHBnX3N0YXRfc3RhdGVtZW50cy5zYW1wbGVfcmF0ZSA9 IDE7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAxOworIFFVRVJZIFBMQU4gCistLS0t LS0tLS0tLS0KKyBSZXN1bHQKKygxIHJvdykKKworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxF Q1QgMTsKKyBRVUVSWSBQTEFOIAorLS0tLS0tLS0tLS0tCisgUmVzdWx0CisoMSByb3cpCisK K1NFVCBwZ19zdGF0X3N0YXRlbWVudHMuc2FtcGxlX3JhdGUgPSAwOworRVhQTEFJTiAoQ09T VFMgT0ZGKSBTRUxFQ1QgMTsKKyBRVUVSWSBQTEFOIAorLS0tLS0tLS0tLS0tCisgUmVzdWx0 CisoMSByb3cpCisKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUIDE7CisgUVVFUlkgUExB TiAKKy0tLS0tLS0tLS0tLQorIFJlc3VsdAorKDEgcm93KQorCitTRUxFQ1QgdG9wbGV2ZWws IGNhbGxzLCBxdWVyeSBGUk9NIHBnX3N0YXRfc3RhdGVtZW50cworICBPUkRFUiBCWSBxdWVy eSBDT0xMQVRFICJDIjsKKyB0b3BsZXZlbCB8IGNhbGxzIHwgICAgICAgICAgICAgICAgICAg ICAgIHF1ZXJ5ICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tKy0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IHQgICAgICAgIHwgICAgIDIgfCBFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAkMQorIGYg ICAgICAgIHwgICAgIDIgfCBTRUxFQ1QgJDEKKyB0ICAgICAgICB8ICAgICAxIHwgU0VMRUNU IHBnX3N0YXRfc3RhdGVtZW50c19yZXNldCgpIElTIE5PVCBOVUxMIEFTIHQKKyB0ICAgICAg ICB8ICAgICAyIHwgU0VUIHBnX3N0YXRfc3RhdGVtZW50cy5zYW1wbGVfcmF0ZSA9ICQxCiso NCByb3dzKQorCistLSBuZXN0ZWQgdHJhY2tpbmcgLSBleHRlbmRlZCBxdWVyeSBwcm90b2Nv bAorU0VUIHBnX3N0YXRfc3RhdGVtZW50cy50cmFjayA9ICJhbGwiOworU0VMRUNUIHBnX3N0 YXRfc3RhdGVtZW50c19yZXNldCgpIElTIE5PVCBOVUxMIEFTIHQ7CisgdCAKKy0tLQorIHQK KygxIHJvdykKKworU0VUIHBnX3N0YXRfc3RhdGVtZW50cy5zYW1wbGVfcmF0ZSA9IDE7CitF WFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAxOyBccGFyc2Ugc3RtdAorIFFVRVJZIFBMQU4g CistLS0tLS0tLS0tLS0KKyBSZXN1bHQKKygxIHJvdykKKworXGJpbmRfbmFtZWQgc3RtdCBc ZworIFFVRVJZIFBMQU4gCistLS0tLS0tLS0tLS0KKyBSZXN1bHQKKygxIHJvdykKKworXGJp bmRfbmFtZWQgc3RtdCBcZworIFFVRVJZIFBMQU4gCistLS0tLS0tLS0tLS0KKyBSZXN1bHQK KygxIHJvdykKKworU0VUIHBnX3N0YXRfc3RhdGVtZW50cy5zYW1wbGVfcmF0ZSA9IDA7Citc YmluZF9uYW1lZCBzdG10IFxnCisgUVVFUlkgUExBTiAKKy0tLS0tLS0tLS0tLQorIFJlc3Vs dAorKDEgcm93KQorCitcYmluZF9uYW1lZCBzdG10IFxnCisgUVVFUlkgUExBTiAKKy0tLS0t LS0tLS0tLQorIFJlc3VsdAorKDEgcm93KQorCitTRUxFQ1QgdG9wbGV2ZWwsIGNhbGxzLCBx dWVyeSBGUk9NIHBnX3N0YXRfc3RhdGVtZW50cworICBPUkRFUiBCWSBxdWVyeSBDT0xMQVRF ICJDIjsKKyB0b3BsZXZlbCB8IGNhbGxzIHwgICAgICAgICAgICAgICAgICBxdWVyeSAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgfCAgICAgMiB8IEVYUExBSU4gKENP U1RTIE9GRikgU0VMRUNUICQxCisgZiAgICAgICAgfCAgICAgMyB8IFNFTEVDVCAkMQorIHQg ICAgICAgIHwgICAgIDEgfCBTRVQgcGdfc3RhdF9zdGF0ZW1lbnRzLnNhbXBsZV9yYXRlID0g JDEKKygzIHJvd3MpCisKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRz L21lc29uLmJ1aWxkIGIvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvbWVzb24uYnVpbGQK aW5kZXggNDQ0NmFmNThjNS4uMzUxMzU0YTZhNSAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ19z dGF0X3N0YXRlbWVudHMvbWVzb24uYnVpbGQKKysrIGIvY29udHJpYi9wZ19zdGF0X3N0YXRl bWVudHMvbWVzb24uYnVpbGQKQEAgLTU0LDYgKzU0LDcgQEAgdGVzdHMgKz0gewogICAgICAg J3ByaXZpbGVnZXMnLAogICAgICAgJ2V4dGVuZGVkJywKICAgICAgICdwYXJhbGxlbCcsCisg ICAgICAnc2FtcGxpbmcnLAogICAgICAgJ2NsZWFudXAnLAogICAgICAgJ29sZGV4dHZlcnNp b25zJywKICAgICBdLApkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMv cGdfc3RhdF9zdGF0ZW1lbnRzLmMgYi9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9wZ19z dGF0X3N0YXRlbWVudHMuYwppbmRleCBiZWJmODEzNGViLi5hZmQwNTM3NzEzIDEwMDY0NAot LS0gYS9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9wZ19zdGF0X3N0YXRlbWVudHMuYwor KysgYi9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9wZ19zdGF0X3N0YXRlbWVudHMuYwpA QCAtNTAsNiArNTAsNyBAQAogI2luY2x1ZGUgImFjY2Vzcy9wYXJhbGxlbC5oIgogI2luY2x1 ZGUgImNhdGFsb2cvcGdfYXV0aGlkLmgiCiAjaW5jbHVkZSAiY29tbW9uL2ludC5oIgorI2lu Y2x1ZGUgImNvbW1vbi9wZ19wcm5nLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvaW5zdHJ1bWVu dC5oIgogI2luY2x1ZGUgImZ1bmNhcGkuaCIKICNpbmNsdWRlICJqaXQvaml0LmgiCkBAIC0y NTYsNiArMjU3LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgcGdzc1NoYXJlZFN0YXRlCiAvKiBDdXJy ZW50IG5lc3RpbmcgZGVwdGggb2YgcGxhbm5lci9FeGVjdXRvclJ1bi9Qcm9jZXNzVXRpbGl0 eSBjYWxscyAqLwogc3RhdGljIGludAluZXN0aW5nX2xldmVsID0gMDsKIAorLyogSXMgdGhl IGN1cnJlbnQgdG9wLWxldmVsIHF1ZXJ5IHRvIGJlIHNhbXBsZWQ/ICovCitzdGF0aWMgYm9v bCBpc19xdWVyeV9zYW1wbGVkID0gZmFsc2U7CisKIC8qIFNhdmVkIGhvb2sgdmFsdWVzICov CiBzdGF0aWMgc2htZW1fcmVxdWVzdF9ob29rX3R5cGUgcHJldl9zaG1lbV9yZXF1ZXN0X2hv b2sgPSBOVUxMOwogc3RhdGljIHNobWVtX3N0YXJ0dXBfaG9va190eXBlIHByZXZfc2htZW1f c3RhcnR1cF9ob29rID0gTlVMTDsKQEAgLTI5NCwxMiArMjk4LDE0IEBAIHN0YXRpYyBib29s IHBnc3NfdHJhY2tfdXRpbGl0eSA9IHRydWU7CS8qIHdoZXRoZXIgdG8gdHJhY2sgdXRpbGl0 eSBjb21tYW5kcyAqLwogc3RhdGljIGJvb2wgcGdzc190cmFja19wbGFubmluZyA9IGZhbHNl OwkvKiB3aGV0aGVyIHRvIHRyYWNrIHBsYW5uaW5nCiAJCQkJCQkJCQkJCSAqIGR1cmF0aW9u ICovCiBzdGF0aWMgYm9vbCBwZ3NzX3NhdmUgPSB0cnVlOwkvKiB3aGV0aGVyIHRvIHNhdmUg c3RhdHMgYWNyb3NzIHNodXRkb3duICovCitzdGF0aWMgZG91YmxlIHBnc3Nfc2FtcGxlX3Jh dGUgPSAxLjA7IC8qIGZyYWN0aW9uIG9mIHN0YXRlbWVudHMgdG8gdHJhY2sgKi8KIAogCi0j ZGVmaW5lIHBnc3NfZW5hYmxlZChsZXZlbCkgXAorI2RlZmluZSBwZ3NzX2VuYWJsZWQobGV2 ZWwsIHNraXBfc2FtcGxpbmdfY2hlY2spIFwKIAkoIUlzUGFyYWxsZWxXb3JrZXIoKSAmJiBc CiAJKHBnc3NfdHJhY2sgPT0gUEdTU19UUkFDS19BTEwgfHwgXAotCShwZ3NzX3RyYWNrID09 IFBHU1NfVFJBQ0tfVE9QICYmIChsZXZlbCkgPT0gMCkpKQorCShwZ3NzX3RyYWNrID09IFBH U1NfVFJBQ0tfVE9QICYmIChsZXZlbCkgPT0gMCkpICYmIFwKKwljdXJyZW50X3F1ZXJ5X3Nh bXBsZWQoc2tpcF9zYW1wbGluZ19jaGVjaykpCiAKICNkZWZpbmUgcmVjb3JkX2djX3F0ZXh0 cygpIFwKIAlkbyB7IFwKQEAgLTM3Myw2ICszNzksNyBAQCBzdGF0aWMgY2hhciAqZ2VuZXJh dGVfbm9ybWFsaXplZF9xdWVyeShKdW1ibGVTdGF0ZSAqanN0YXRlLCBjb25zdCBjaGFyICpx dWVyeSwKIHN0YXRpYyB2b2lkIGZpbGxfaW5fY29uc3RhbnRfbGVuZ3RocyhKdW1ibGVTdGF0 ZSAqanN0YXRlLCBjb25zdCBjaGFyICpxdWVyeSwKIAkJCQkJCQkJCSBpbnQgcXVlcnlfbG9j KTsKIHN0YXRpYyBpbnQJY29tcF9sb2NhdGlvbihjb25zdCB2b2lkICphLCBjb25zdCB2b2lk ICpiKTsKK3N0YXRpYyBib29sCWN1cnJlbnRfcXVlcnlfc2FtcGxlZChib29sIHNraXApOwog CiAKIC8qCkBAIC00MTQsNiArNDIxLDE5IEBAIF9QR19pbml0KHZvaWQpCiAJCQkJCQkJTlVM TCwKIAkJCQkJCQlOVUxMKTsKIAorCURlZmluZUN1c3RvbVJlYWxWYXJpYWJsZSgicGdfc3Rh dF9zdGF0ZW1lbnRzLnNhbXBsZV9yYXRlIiwKKwkJCQkJCQkgIkZyYWN0aW9uIG9mIHF1ZXJp ZXMgdG8gdHJhY2suIiwKKwkJCQkJCQkgTlVMTCwKKwkJCQkJCQkgJnBnc3Nfc2FtcGxlX3Jh dGUsCisJCQkJCQkJIDEuMCwKKwkJCQkJCQkgMC4wLAorCQkJCQkJCSAxLjAsCisJCQkJCQkJ IFBHQ19TVVNFVCwKKwkJCQkJCQkgMCwKKwkJCQkJCQkgTlVMTCwKKwkJCQkJCQkgTlVMTCwK KwkJCQkJCQkgTlVMTCk7CisKIAlEZWZpbmVDdXN0b21FbnVtVmFyaWFibGUoInBnX3N0YXRf c3RhdGVtZW50cy50cmFjayIsCiAJCQkJCQkJICJTZWxlY3RzIHdoaWNoIHN0YXRlbWVudHMg YXJlIHRyYWNrZWQgYnkgcGdfc3RhdF9zdGF0ZW1lbnRzLiIsCiAJCQkJCQkJIE5VTEwsCkBA IC04MzYsNyArODU2LDcgQEAgcGdzc19wb3N0X3BhcnNlX2FuYWx5emUoUGFyc2VTdGF0ZSAq cHN0YXRlLCBRdWVyeSAqcXVlcnksIEp1bWJsZVN0YXRlICpqc3RhdGUpCiAJCXByZXZfcG9z dF9wYXJzZV9hbmFseXplX2hvb2socHN0YXRlLCBxdWVyeSwganN0YXRlKTsKIAogCS8qIFNh ZmV0eSBjaGVjay4uLiAqLwotCWlmICghcGdzcyB8fCAhcGdzc19oYXNoIHx8ICFwZ3NzX2Vu YWJsZWQobmVzdGluZ19sZXZlbCkpCisJaWYgKCFwZ3NzIHx8ICFwZ3NzX2hhc2ggfHwgIXBn c3NfZW5hYmxlZChuZXN0aW5nX2xldmVsLCB0cnVlKSkKIAkJcmV0dXJuOwogCiAJLyoKQEAg LTg5NCw3ICs5MTQsNyBAQCBwZ3NzX3BsYW5uZXIoUXVlcnkgKnBhcnNlLAogCSAqIHBnc3Nf c3RvcmUgbmVlZHMgaXQuICBXZSBhbHNvIGlnbm9yZSBxdWVyeSB3aXRob3V0IHF1ZXJ5aWQs IGFzIGl0IHdvdWxkCiAJICogYmUgdHJlYXRlZCBhcyBhIHV0aWxpdHkgc3RhdGVtZW50LCB3 aGljaCBtYXkgbm90IGJlIHRoZSBjYXNlLgogCSAqLwotCWlmIChwZ3NzX2VuYWJsZWQobmVz dGluZ19sZXZlbCkKKwlpZiAocGdzc19lbmFibGVkKG5lc3RpbmdfbGV2ZWwsIGZhbHNlKQog CQkmJiBwZ3NzX3RyYWNrX3BsYW5uaW5nICYmIHF1ZXJ5X3N0cmluZwogCQkmJiBwYXJzZS0+ cXVlcnlJZCAhPSBVSU5UNjRDT05TVCgwKSkKIAl7CkBAIC05OTksNyArMTAxOSw4IEBAIHBn c3NfRXhlY3V0b3JTdGFydChRdWVyeURlc2MgKnF1ZXJ5RGVzYywgaW50IGVmbGFncykKIAkg KiBjb3VudGluZyBvZiBvcHRpbWl6YWJsZSBzdGF0ZW1lbnRzIHRoYXQgYXJlIGRpcmVjdGx5 IGNvbnRhaW5lZCBpbgogCSAqIHV0aWxpdHkgc3RhdGVtZW50cy4KIAkgKi8KLQlpZiAocGdz c19lbmFibGVkKG5lc3RpbmdfbGV2ZWwpICYmIHF1ZXJ5RGVzYy0+cGxhbm5lZHN0bXQtPnF1 ZXJ5SWQgIT0gVUlOVDY0Q09OU1QoMCkpCisJaWYgKHBnc3NfZW5hYmxlZChuZXN0aW5nX2xl dmVsLCBmYWxzZSkgJiYKKwkJcXVlcnlEZXNjLT5wbGFubmVkc3RtdC0+cXVlcnlJZCAhPSBV SU5UNjRDT05TVCgwKSkKIAl7CiAJCS8qCiAJCSAqIFNldCB1cCB0byB0cmFjayB0b3RhbCBl bGFwc2VkIHRpbWUgaW4gRXhlY3V0b3JSdW4uICBNYWtlIHN1cmUgdGhlCkBAIC0xMDY4LDcg KzEwODksNyBAQCBwZ3NzX0V4ZWN1dG9yRW5kKFF1ZXJ5RGVzYyAqcXVlcnlEZXNjKQogCXVp bnQ2NAkJcXVlcnlJZCA9IHF1ZXJ5RGVzYy0+cGxhbm5lZHN0bXQtPnF1ZXJ5SWQ7CiAKIAlp ZiAocXVlcnlJZCAhPSBVSU5UNjRDT05TVCgwKSAmJiBxdWVyeURlc2MtPnRvdGFsdGltZSAm JgotCQlwZ3NzX2VuYWJsZWQobmVzdGluZ19sZXZlbCkpCisJCXBnc3NfZW5hYmxlZChuZXN0 aW5nX2xldmVsLCBmYWxzZSkpCiAJewogCQkvKgogCQkgKiBNYWtlIHN1cmUgc3RhdHMgYWNj dW11bGF0aW9uIGlzIGRvbmUuICAoTm90ZTogaXQncyBva2F5IGlmIHNldmVyYWwKQEAgLTEx MTEsNyArMTEzMiw3IEBAIHBnc3NfUHJvY2Vzc1V0aWxpdHkoUGxhbm5lZFN0bXQgKnBzdG10 LCBjb25zdCBjaGFyICpxdWVyeVN0cmluZywKIAl1aW50NjQJCXNhdmVkX3F1ZXJ5SWQgPSBw c3RtdC0+cXVlcnlJZDsKIAlpbnQJCQlzYXZlZF9zdG10X2xvY2F0aW9uID0gcHN0bXQtPnN0 bXRfbG9jYXRpb247CiAJaW50CQkJc2F2ZWRfc3RtdF9sZW4gPSBwc3RtdC0+c3RtdF9sZW47 Ci0JYm9vbAkJZW5hYmxlZCA9IHBnc3NfdHJhY2tfdXRpbGl0eSAmJiBwZ3NzX2VuYWJsZWQo bmVzdGluZ19sZXZlbCk7CisJYm9vbAkJZW5hYmxlZCA9IHBnc3NfdHJhY2tfdXRpbGl0eSAm JiBwZ3NzX2VuYWJsZWQobmVzdGluZ19sZXZlbCwgZmFsc2UpOwogCiAJLyoKIAkgKiBGb3Jj ZSB1dGlsaXR5IHN0YXRlbWVudHMgdG8gZ2V0IHF1ZXJ5SWQgemVyby4gIFdlIGRvIHRoaXMg ZXZlbiBpbiBjYXNlcwpAQCAtMzAxMSwzICszMDMyLDI3IEBAIGNvbXBfbG9jYXRpb24oY29u c3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKIAogCXJldHVybiBwZ19jbXBfczMyKGwsIHIp OwogfQorCisvKgorICogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGN1cnJlbnQgcXVlcnkgc2hv dWxkIGJlIHNhbXBsZWQuCisgKgorICogSW4gc29tZSBjYXNlcywgc2FtcGxpbmcgbWF5IG5l ZWQgdG8gYmUgc2tpcHBlZCBlbnRpcmVseSwgc3VjaCBhcyBkdXJpbmcKKyAqIHF1ZXJ5IHBh cnNpbmcgZm9yIG5vcm1hbGl6YXRpb24uCisgKgorICogQXQgdGhlIGJlZ2lubmluZyBvZiBl YWNoIHRvcC1sZXZlbCBzdGF0ZW1lbnQsIGRlY2lkZSB3aGV0aGVyIHdlJ2xsCisgKiBzYW1w bGUgdGhpcyBzdGF0ZW1lbnQuIElmIG5lc3RlZC1zdGF0ZW1lbnQgdHJhY2tpbmcgaXMgZW5h YmxlZCwKKyAqIGVpdGhlciBhbGwgbmVzdGVkIHN0YXRlbWVudHMgd2lsbCBiZSB0cmFja2Vk IG9yIG5vbmUgd2lsbC4KKyAqLworc3RhdGljIGJvb2wKK2N1cnJlbnRfcXVlcnlfc2FtcGxl ZChib29sIHNraXApCit7CisJaWYgKHNraXApCisJCXJldHVybiB0cnVlOworCisJaWYgKG5l c3RpbmdfbGV2ZWwgPT0gMCkKKwkJaXNfcXVlcnlfc2FtcGxlZCA9IHBnc3Nfc2FtcGxlX3Jh dGUgIT0gMC4wICYmCisJCQkocGdzc19zYW1wbGVfcmF0ZSA9PSAxLjAgfHwKKwkJCXBnX3By bmdfZG91YmxlKCZwZ19nbG9iYWxfcHJuZ19zdGF0ZSkgPD0gcGdzc19zYW1wbGVfcmF0ZSk7 CisKKwlyZXR1cm4gaXNfcXVlcnlfc2FtcGxlZDsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBv ZiBmaWxlCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9zcWwvc2Ft cGxpbmcuc3FsIGIvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvc3FsL3NhbXBsaW5nLnNx bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5iMDlmNDU5OTFiCi0t LSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvc3FsL3NhbXBs aW5nLnNxbApAQCAtMCwwICsxLDUwIEBACistLQorLS0gc2FtcGxlIHN0YXRlbWVudHMKKy0t CisKKy0tIHRvcC1sZXZlbCB0cmFja2luZyAtIHNpbXBsZSBxdWVyeSBwcm90b2NvbAorU0hP VyBwZ19zdGF0X3N0YXRlbWVudHMudHJhY2s7CitTRVQgcGdfc3RhdF9zdGF0ZW1lbnRzLnNh bXBsZV9yYXRlID0gMC4wOworU0VMRUNUIHBnX3N0YXRfc3RhdGVtZW50c19yZXNldCgpIElT IE5PVCBOVUxMIEFTIHQ7CitTRUxFQ1QgMSBBUyAiaW50IjsKK1NFTEVDVCBxdWVyeSwgY2Fs bHMgRlJPTSBwZ19zdGF0X3N0YXRlbWVudHMgT1JERVIgQlkgcXVlcnkgQ09MTEFURSAiQyI7 CitTRVQgcGdfc3RhdF9zdGF0ZW1lbnRzLnNhbXBsZV9yYXRlID0gMS4wOworU0VMRUNUIDEg QVMgImludCI7CitTRUxFQ1QgcXVlcnksIGNhbGxzIEZST00gcGdfc3RhdF9zdGF0ZW1lbnRz IE9SREVSIEJZIHF1ZXJ5IENPTExBVEUgIkMiOworCistLSB0b3AtbGV2ZWwgdHJhY2tpbmcg LSBleHRlbmRlZCBxdWVyeSBwcm90b2NvbAorU0VUIHBnX3N0YXRfc3RhdGVtZW50cy5zYW1w bGVfcmF0ZSA9IDAuMDsKK1NFTEVDVCBwZ19zdGF0X3N0YXRlbWVudHNfcmVzZXQoKSBJUyBO T1QgTlVMTCBBUyB0OworU0VMRUNUIDEgXHBhcnNlIHN0bXQKK1xiaW5kX25hbWVkIHN0bXQg XGcKK1NFTEVDVCBxdWVyeSwgY2FsbHMgRlJPTSBwZ19zdGF0X3N0YXRlbWVudHMgT1JERVIg QlkgcXVlcnkgQ09MTEFURSAiQyI7CitTRVQgcGdfc3RhdF9zdGF0ZW1lbnRzLnNhbXBsZV9y YXRlID0gMS4wOworXGJpbmRfbmFtZWQgc3RtdCBcZworU0VMRUNUIHF1ZXJ5LCBjYWxscyBG Uk9NIHBnX3N0YXRfc3RhdGVtZW50cyBPUkRFUiBCWSBxdWVyeSBDT0xMQVRFICJDIjsKK1NF TEVDVCBwZ19zdGF0X3N0YXRlbWVudHNfcmVzZXQoKSBJUyBOT1QgTlVMTCBBUyB0OworREVB TExPQ0FURSBzdG10OworCistLSBuZXN0ZWQgdHJhY2tpbmcgLSBzaW1wbGUgcXVlcnkgcHJv dG9jb2wKK1NFVCBwZ19zdGF0X3N0YXRlbWVudHMudHJhY2sgPSAiYWxsIjsKK1NFTEVDVCBw Z19zdGF0X3N0YXRlbWVudHNfcmVzZXQoKSBJUyBOT1QgTlVMTCBBUyB0OworU0VUIHBnX3N0 YXRfc3RhdGVtZW50cy5zYW1wbGVfcmF0ZSA9IDE7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNF TEVDVCAxOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgMTsKK1NFVCBwZ19zdGF0X3N0 YXRlbWVudHMuc2FtcGxlX3JhdGUgPSAwOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1Qg MTsKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUIDE7CitTRUxFQ1QgdG9wbGV2ZWwsIGNh bGxzLCBxdWVyeSBGUk9NIHBnX3N0YXRfc3RhdGVtZW50cworICBPUkRFUiBCWSBxdWVyeSBD T0xMQVRFICJDIjsKKworLS0gbmVzdGVkIHRyYWNraW5nIC0gZXh0ZW5kZWQgcXVlcnkgcHJv dG9jb2wKK1NFVCBwZ19zdGF0X3N0YXRlbWVudHMudHJhY2sgPSAiYWxsIjsKK1NFTEVDVCBw Z19zdGF0X3N0YXRlbWVudHNfcmVzZXQoKSBJUyBOT1QgTlVMTCBBUyB0OworU0VUIHBnX3N0 YXRfc3RhdGVtZW50cy5zYW1wbGVfcmF0ZSA9IDE7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNF TEVDVCAxOyBccGFyc2Ugc3RtdAorXGJpbmRfbmFtZWQgc3RtdCBcZworXGJpbmRfbmFtZWQg c3RtdCBcZworU0VUIHBnX3N0YXRfc3RhdGVtZW50cy5zYW1wbGVfcmF0ZSA9IDA7CitcYmlu ZF9uYW1lZCBzdG10IFxnCitcYmluZF9uYW1lZCBzdG10IFxnCitTRUxFQ1QgdG9wbGV2ZWws IGNhbGxzLCBxdWVyeSBGUk9NIHBnX3N0YXRfc3RhdGVtZW50cworICBPUkRFUiBCWSBxdWVy eSBDT0xMQVRFICJDIjsKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9wZ3N0YXRzdGF0ZW1l bnRzLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcGdzdGF0c3RhdGVtZW50cy5zZ21sCmluZGV4IDUw MWI0NjhlOWEuLmNkM2ZkYWVmZmUgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9wZ3N0YXRz dGF0ZW1lbnRzLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3Bnc3RhdHN0YXRlbWVudHMuc2dt bApAQCAtOTM2LDYgKzkzNiwyNSBAQAogICAgIDwvbGlzdGl0ZW0+CiAgICA8L3Zhcmxpc3Rl bnRyeT4KIAorICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT4KKyAgICAgPHZhcm5hbWU+ cGdfc3RhdF9zdGF0ZW1lbnRzLnNhbXBsZV9yYXRlPC92YXJuYW1lPiAoPHR5cGU+cmVhbDwv dHlwZT4pCisgICAgIDxpbmRleHRlcm0+CisgICAgICA8cHJpbWFyeT48dmFybmFtZT5wZ19z dGF0X3N0YXRlbWVudHMuc2FtcGxlX3JhdGU8L3Zhcm5hbWU+IGNvbmZpZ3VyYXRpb24gcGFy YW1ldGVyPC9wcmltYXJ5PgorICAgICA8L2luZGV4dGVybT4KKyAgICA8L3Rlcm0+CisKKyAg ICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgPHZhcm5hbWU+cGdfc3RhdF9zdGF0 ZW1lbnRzLnNhbXBsZV9yYXRlPC92YXJuYW1lPiBjYXVzZXMgcGdfc3RhdF9zdGF0ZW1lbnRz IHRvIG9ubHkKKyAgICAgIHRyYWNrIGEgZnJhY3Rpb24gb2YgdGhlIHN0YXRlbWVudHMgaW4g ZWFjaCBzZXNzaW9uLiBUaGUgZGVmYXVsdCBpcyA8bGl0ZXJhbD4xPC9saXRlcmFsPiwKKyAg ICAgIG1lYW5pbmcgdHJhY2sgYWxsIHRoZSBxdWVyaWVzLiBTZXR0aW5nIHRoaXMgdG8gPGxp dGVyYWw+MDwvbGl0ZXJhbD4gZGlzYWJsZXMgc2FtcGxlZCBzdGF0ZW1lbnRzCisgICAgICB0 cmFja2luZywgdGhlIHNhbWUgYXMgc2V0dGluZyA8dmFybmFtZT5wZ19zdGF0X3N0YXRlbWVu dHMudHJhY2s8L3Zhcm5hbWU+IHRvIDxsaXRlcmFsPm5vbmU8L2xpdGVyYWw+LgorICAgICAg SW4gY2FzZSBvZiBuZXN0ZWQgc3RhdGVtZW50cywgZWl0aGVyIGFsbCB3aWxsIGJlIHRyYWNr ZWQgb3Igbm9uZS4gT25seSBzdXBlcnVzZXJzIGNhbiBjaGFuZ2UgdGhpcyBzZXR0aW5nLgor ICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCiAg ICA8dmFybGlzdGVudHJ5PgogICAgIDx0ZXJtPgogICAgICA8dmFybmFtZT5wZ19zdGF0X3N0 YXRlbWVudHMuc2F2ZTwvdmFybmFtZT4gKDx0eXBlPmJvb2xlYW48L3R5cGU+KQotLSAKMi4z NC4xCgo= --------------mY6T4ZWjHDZrHvClTmWmpHFT--