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 1tkt29-007c21-3n for pgsql-hackers@arkaria.postgresql.org; Wed, 19 Feb 2025 22:59:13 +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 1tkt26-00F3PU-AX for pgsql-hackers@arkaria.postgresql.org; Wed, 19 Feb 2025 22:59:10 +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 1tkt25-00F3PL-R8 for pgsql-hackers@lists.postgresql.org; Wed, 19 Feb 2025 22:59:10 +0000 Received: from forward101b.mail.yandex.net ([2a02:6b8:c02:900:1:45:d181:d101]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1tkt23-001qez-0i for pgsql-hackers@postgresql.org; Wed, 19 Feb 2025 22:59:09 +0000 Received: from mail-nwsmtp-smtp-production-main-85.iva.yp-c.yandex.net (mail-nwsmtp-smtp-production-main-85.iva.yp-c.yandex.net [IPv6:2a02:6b8:c0c:7ca4:0:640:e165:0]) by forward101b.mail.yandex.net (Yandex) with ESMTPS id 0F35060B3D; Thu, 20 Feb 2025 01:59:05 +0300 (MSK) Received: by mail-nwsmtp-smtp-production-main-85.iva.yp-c.yandex.net (smtp/Yandex) with ESMTPSA id 2xf5SG2OceA0-0yn8SUs2; Thu, 20 Feb 2025 01:59:04 +0300 X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tantorlabs.com; s=mail; t=1740005944; bh=cv7kh9Ef1dgn4VjO9QTqJ0akjPHgUh5xqqOGopsDxq4=; h=In-Reply-To:Cc:Date:References:To:Subject:Message-ID:From; b=AJPbL0hMloEqzkW42xZsDwN6MOJT/lRch246kwawepTud/rkAG5BRh95FnbeoKiXD 1PU/rHCxgMMTSOuuwbTSCHK9z7JUQPiMhnxDYoZzLdYk3UNdhBPQc1TpyNNQ6DURNg oFKg4Oz/ILEzfOkmyu0rTXNauoxsJBWwnSOPFzQY= Authentication-Results: mail-nwsmtp-smtp-production-main-85.iva.yp-c.yandex.net; dkim=pass header.i=@tantorlabs.com Content-Type: multipart/mixed; boundary="------------gWmbr0huy407PheC91aq6Zm1" Message-ID: <6f305fd1-44c3-4189-81ef-238777277e5e@tantorlabs.com> Date: Thu, 20 Feb 2025 01:59:02 +0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Sample rate added to pg_stat_statements To: Sami Imseih Cc: Alexander Korotkov , Michael Paquier , Greg Sabino Mullane , Andrey Borodin , Alena Rybakina , pgsql-hackers References: <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> <7b9df88f-3015-464b-881e-4c6a7b3a5c03@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. --------------gWmbr0huy407PheC91aq6Zm1 Content-Type: multipart/alternative; boundary="------------Wr4xKg2TLvyAuv0Pz5Um8LHn" --------------Wr4xKg2TLvyAuv0Pz5Um8LHn Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 19.02.2025 22:11, Sami Imseih wrote: > I don't see v18 attached. Ah, sorry, I attached v18. > But, I think it's wrong that you changed the design of this patch > (sample rate to duration based ) after it was ready for committer. I've decided to reconsider how to better reduce the load on the spin-lock in pg_stat_statements. If we look at the benchmark with 192 CPUs [0], we can see that even a small reduction in the frequency of incrementing counter of entries gives a significant performance boost. For example, at sample_rate = 0.75, performance almost doubles, while at sample_rate < 0.5, the spin-lock bottleneck is already eliminated. This suggests that even small adjustments to the frequency can significantly improve the situation. But instead of blindly reducing the frequency via PRNG, we can take a more thoughtful approach with threshold by execute time: * Find the most frequent query by column 'calls' in pg_stat_statements; * In this query look at info about execution time: min_exec_time, max_exec_time, etc; * Gradually increase the threshold from min_exec_time to max_exec_time, limiting the tracking of this query. * Monitor performance: once the bottleneck is resolved, stop at the current threshold value. This approach allows us to: * Eliminate the spin-lock bottleneck; * Preserve data about slow queries, which may be critical for performance analysis; * Reduce the load on the most frequent queries causing contention, instead of uniformly reducing the frequency for all queries. BTW, I track queries in pgss_ProcessUtility without checking exec time because these queries unlikely can lead to bottleneck. Any other thoughts or objections? > > This CF [0] should go back to "Needs Review" if this is the case. Done! P.S. During the recent review, I noticed an interesting behavior: when we introduced \parse, changing the 'track' from 'none' to 'all' might lead to an undefined behavior. The steps are: postgres=# SELECT pg_stat_statements_reset() IS NOT NULL AS t; t --- t (1 row) postgres=# SET pg_stat_statements.track = "none"; SET postgres=# SELECT 1 \parse stmt ?column? ---------- 1 (1 row) postgres=# \bind_named stmt \g ?column? ---------- 1 (1 row) postgres=# SELECT query, calls FROM pg_stat_statements; query | calls -------+------- (0 rows) postgres=# SET pg_stat_statements.track = "all"; SET postgres=# \bind_named stmt \g ?column? ---------- 1 (1 row) postgres=# SELECT query, calls FROM pg_stat_statements; query | calls ----------+------- SELECT 1 | 1 (1 row) As you can see, the query has not been normalized. Is it a bug, expected or undefined behavior? [0]: https://www.postgresql.org/message-id/CAA5RZ0vxn_UiUkUK5SdngObLZzw40RhafB7SHydxzBw2_xjjiA%40mail.gmail.com -- Best regards, Ilia Evdokimov, Tantor Labs LLC. --------------Wr4xKg2TLvyAuv0Pz5Um8LHn Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 7bit


On 19.02.2025 22:11, Sami Imseih wrote:
I don't see v18 attached.


Ah, sorry, I attached v18.


But, I think it's wrong that you changed the design of this patch
(sample rate to duration based ) after it was ready for committer.



I've decided to reconsider how to better reduce the load on the spin-lock in pg_stat_statements.

If we look at the benchmark with 192 CPUs [0], we can see that even a small reduction in the frequency of incrementing counter of entries gives a significant performance boost. For example, at sample_rate = 0.75, performance almost doubles, while at sample_rate < 0.5, the spin-lock bottleneck is already eliminated. This suggests that even small adjustments to the frequency can significantly improve the situation.

But instead of blindly reducing the frequency via PRNG, we can take a more thoughtful approach with threshold by execute time:

  • Find the most frequent query by column 'calls' in pg_stat_statements;
  • In this query look at info about execution time: min_exec_time, max_exec_time, etc;
  • Gradually increase the threshold from min_exec_time to max_exec_time, limiting the tracking of this query.
  • Monitor performance: once the bottleneck is resolved, stop at the current threshold value.

This approach allows us to:

  • Eliminate the spin-lock bottleneck;
  • Preserve data about slow queries, which may be critical for performance analysis;
  • Reduce the load on the most frequent queries causing contention, instead of uniformly reducing the frequency for all queries.

BTW, I track queries in pgss_ProcessUtility without checking exec time because these queries unlikely can lead to bottleneck.

Any other thoughts or objections?



This CF [0] should go back to "Needs Review" if this is the case.


Done!

P.S. During the recent review, I noticed an interesting behavior: when we introduced \parse, changing the 'track' from 'none' to 'all' might lead to an undefined behavior. The steps are:

postgres=# SELECT pg_stat_statements_reset() IS NOT NULL AS t; t --- t (1 row) postgres=# SET pg_stat_statements.track = "none"; SET postgres=# SELECT 1 \parse stmt ?column? ---------- 1 (1 row) postgres=# \bind_named stmt \g ?column? ---------- 1 (1 row) postgres=# SELECT query, calls FROM pg_stat_statements; query | calls -------+------- (0 rows) postgres=# SET pg_stat_statements.track = "all"; SET postgres=# \bind_named stmt \g ?column? ---------- 1 (1 row) postgres=# SELECT query, calls FROM pg_stat_statements; query | calls ----------+------- SELECT 1 | 1 (1 row)

As you can see, the query has not been normalized. Is it a bug, expected or undefined behavior?

[0]: https://www.postgresql.org/message-id/CAA5RZ0vxn_UiUkUK5SdngObLZzw40RhafB7SHydxzBw2_xjjiA%40mail.gmail.com

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

--------------Wr4xKg2TLvyAuv0Pz5Um8LHn-- --------------gWmbr0huy407PheC91aq6Zm1 Content-Type: text/x-patch; charset=UTF-8; name="v18-0001-Allow-setting-execution-time-threshold-for-pgss.patch" Content-Disposition: attachment; filename*0="v18-0001-Allow-setting-execution-time-threshold-for-pgss.pat"; filename*1="ch" Content-Transfer-Encoding: base64 RnJvbSBiOGY4OGRjZDRkNDRhMTEzMDE3NzY0NTVjYzEzM2JiM2U4NTlkMDAwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBJbGlhIEV2ZG9raW1vdiA8aWx5YS5ldmRva2ltb3ZA dGFudG9ybGFicy5jb20+CkRhdGU6IFRodSwgMjAgRmViIDIwMjUgMDE6Mjk6NTUgKzAzMDAK U3ViamVjdDogW1BBVENIIHYxOF0gQWxsb3cgc2V0dGluZyBleGVjdXRpb24gdGltZSB0aHJl c2hvbGQgZm9yCiBwZ19zdGF0X3N0YXRlbWVudHMKCk5ldyBjb25maWd1cmF0aW9uIHBhcmFt ZXRlciBwZ19zdGF0X3N0YXRlbWVudHMudHJhY2tfbWluX2R1cmF0aW9uIG1ha2VzIGl0CnBv c3NpYmxlIHRvIHRyYWNrIHN0YXRlbWVudHMgd2hvc2UgZXhlY3V0aW9uIHRpbWUgaXMgZ3Jl YXRlciB0aGFuIHRocmVzaG9sZCwKdG8gcmVkdWNlIHRoZSBhbW91bnQgb2YgdHJhY2tpbmcu Ci0tLQogY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvTWFrZWZpbGUgICAgICAgICAgIHwg ICAyICstCiAuLi4vZXhwZWN0ZWQvbWluX2R1cmF0aW9uLm91dCAgICAgICAgICAgICAgICAg fCAxNzQgKysrKysrKysrKysrKysrKysrCiBjb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9t ZXNvbi5idWlsZCAgICAgICAgfCAgIDEgKwogLi4uL3BnX3N0YXRfc3RhdGVtZW50cy9wZ19z dGF0X3N0YXRlbWVudHMuYyAgIHwgIDU5ICsrKystLQogLi4uL3BnX3N0YXRfc3RhdGVtZW50 cy9zcWwvbWluX2R1cmF0aW9uLnNxbCAgIHwgIDUwICsrKysrCiBkb2Mvc3JjL3NnbWwvcGdz dGF0c3RhdGVtZW50cy5zZ21sICAgICAgICAgICAgfCAgMjIgKysrCiA2IGZpbGVzIGNoYW5n ZWQsIDI4NyBpbnNlcnRpb25zKCspLCAyMSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEw MDY0NCBjb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9leHBlY3RlZC9taW5fZHVyYXRpb24u b3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvc3Fs L21pbl9kdXJhdGlvbi5zcWwKCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3N0YXRfc3RhdGVt ZW50cy9NYWtlZmlsZSBiL2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL01ha2VmaWxlCmlu ZGV4IDI0MWMwMjU4N2IuLmRmNTEyZTQyOGUgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfc3Rh dF9zdGF0ZW1lbnRzL01ha2VmaWxlCisrKyBiL2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRz L01ha2VmaWxlCkBAIC0yMCw3ICsyMCw3IEBAIExERkxBR1NfU0wgKz0gJChmaWx0ZXIgLWxt LCAkKExJQlMpKQogUkVHUkVTU19PUFRTID0gLS10ZW1wLWNvbmZpZyAkKHRvcF9zcmNkaXIp L2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL3BnX3N0YXRfc3RhdGVtZW50cy5jb25mCiBS RUdSRVNTID0gc2VsZWN0IGRtbCBjdXJzb3JzIHV0aWxpdHkgbGV2ZWxfdHJhY2tpbmcgcGxh bm5pbmcgXAogCXVzZXJfYWN0aXZpdHkgd2FsIGVudHJ5X3RpbWVzdGFtcCBwcml2aWxlZ2Vz IGV4dGVuZGVkIFwKLQlwYXJhbGxlbCBjbGVhbnVwIG9sZGV4dHZlcnNpb25zCisJcGFyYWxs ZWwgbWluX2R1cmF0aW9uIGNsZWFudXAgb2xkZXh0dmVyc2lvbnMKICMgRGlzYWJsZWQgYmVj YXVzZSB0aGVzZSB0ZXN0cyByZXF1aXJlICJzaGFyZWRfcHJlbG9hZF9saWJyYXJpZXM9cGdf c3RhdF9zdGF0ZW1lbnRzIiwKICMgd2hpY2ggdHlwaWNhbCBpbnN0YWxsY2hlY2sgdXNlcnMg ZG8gbm90IGhhdmUgKGUuZy4gYnVpbGRmYXJtIGNsaWVudHMpLgogTk9fSU5TVEFMTENIRUNL ID0gMQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvZXhwZWN0ZWQv bWluX2R1cmF0aW9uLm91dCBiL2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL2V4cGVjdGVk L21pbl9kdXJhdGlvbi5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MC4uZWY2ZjJhNDQzNwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfc3RhdF9zdGF0 ZW1lbnRzL2V4cGVjdGVkL21pbl9kdXJhdGlvbi5vdXQKQEAgLTAsMCArMSwxNzQgQEAKKy0t CistLSB0cmFja19taW5fZHVyYXRpb24KKy0tCistLSB0b3AtbGV2ZWwgdHJhY2tpbmcgLSBz aW1wbGUgcXVlcnkgcHJvdG9jb2wKK1NIT1cgcGdfc3RhdF9zdGF0ZW1lbnRzLnRyYWNrOwor IHBnX3N0YXRfc3RhdGVtZW50cy50cmFjayAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgdG9wCisoMSByb3cpCisKK1NFVCBwZ19zdGF0X3N0YXRlbWVudHMudHJhY2tfbWluX2R1 cmF0aW9uID0gLTE7CitTRUxFQ1QgcGdfc3RhdF9zdGF0ZW1lbnRzX3Jlc2V0KCkgSVMgTk9U IE5VTEwgQVMgdDsKKyB0IAorLS0tCisgdAorKDEgcm93KQorCitTRUxFQ1QgMSBBUyAiaW50 IjsKKyBpbnQgCistLS0tLQorICAgMQorKDEgcm93KQorCitTRUxFQ1QgcXVlcnksIGNhbGxz IEZST00gcGdfc3RhdF9zdGF0ZW1lbnRzIE9SREVSIEJZIHF1ZXJ5IENPTExBVEUgIkMiOwor IHF1ZXJ5IHwgY2FsbHMgCistLS0tLS0tKy0tLS0tLS0KKygwIHJvd3MpCisKK1NFVCBwZ19z dGF0X3N0YXRlbWVudHMudHJhY2tfbWluX2R1cmF0aW9uID0gMDsKK1NFTEVDVCAxIEFTICJp bnQiOworIGludCAKKy0tLS0tCisgICAxCisoMSByb3cpCisKK1NFTEVDVCBxdWVyeSwgY2Fs bHMgRlJPTSBwZ19zdGF0X3N0YXRlbWVudHMgT1JERVIgQlkgcXVlcnkgQ09MTEFURSAiQyI7 CisgICAgICAgcXVlcnkgICAgICAgIHwgY2FsbHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tCisgU0VMRUNUICQxIEFTICJpbnQiIHwgICAgIDEKKygxIHJvdykKKworLS0gdG9w LWxldmVsIHRyYWNraW5nIC0gZXh0ZW5kZWQgcXVlcnkgcHJvdG9jb2wKK1NFVCBwZ19zdGF0 X3N0YXRlbWVudHMudHJhY2tfbWluX2R1cmF0aW9uID0gLTE7CitTRUxFQ1QgcGdfc3RhdF9z dGF0ZW1lbnRzX3Jlc2V0KCkgSVMgTk9UIE5VTEwgQVMgdDsKKyB0IAorLS0tCisgdAorKDEg cm93KQorCitTRUxFQ1QgMSBccGFyc2Ugc3RtdAorXGJpbmRfbmFtZWQgc3RtdCBcZworID9j b2x1bW4/IAorLS0tLS0tLS0tLQorICAgICAgICAxCisoMSByb3cpCisKK1NFTEVDVCBxdWVy eSwgY2FsbHMgRlJPTSBwZ19zdGF0X3N0YXRlbWVudHMgT1JERVIgQlkgcXVlcnkgQ09MTEFU RSAiQyI7CisgcXVlcnkgfCBjYWxscyAKKy0tLS0tLS0rLS0tLS0tLQorKDAgcm93cykKKwor U0VUIHBnX3N0YXRfc3RhdGVtZW50cy50cmFja19taW5fZHVyYXRpb24gPSAwOworXGJpbmRf bmFtZWQgc3RtdCBcZworID9jb2x1bW4/IAorLS0tLS0tLS0tLQorICAgICAgICAxCisoMSBy b3cpCisKK1NFTEVDVCBxdWVyeSwgY2FsbHMgRlJPTSBwZ19zdGF0X3N0YXRlbWVudHMgT1JE RVIgQlkgcXVlcnkgQ09MTEFURSAiQyI7CisgICBxdWVyeSAgIHwgY2FsbHMgCistLS0tLS0t LS0tLSstLS0tLS0tCisgU0VMRUNUICQxIHwgICAgIDEKKygxIHJvdykKKworU0VMRUNUIHBn X3N0YXRfc3RhdGVtZW50c19yZXNldCgpIElTIE5PVCBOVUxMIEFTIHQ7CisgdCAKKy0tLQor IHQKKygxIHJvdykKKworREVBTExPQ0FURSBzdG10OworLS0gbmVzdGVkIHRyYWNraW5nIC0g c2ltcGxlIHF1ZXJ5IHByb3RvY29sCitTRVQgcGdfc3RhdF9zdGF0ZW1lbnRzLnRyYWNrID0g ImFsbCI7CitTRUxFQ1QgcGdfc3RhdF9zdGF0ZW1lbnRzX3Jlc2V0KCkgSVMgTk9UIE5VTEwg QVMgdDsKKyB0IAorLS0tCisgdAorKDEgcm93KQorCitTRVQgcGdfc3RhdF9zdGF0ZW1lbnRz LnRyYWNrX21pbl9kdXJhdGlvbiA9IDA7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAx OworIFFVRVJZIFBMQU4gCistLS0tLS0tLS0tLS0KKyBSZXN1bHQKKygxIHJvdykKKworRVhQ TEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgMTsKKyBRVUVSWSBQTEFOIAorLS0tLS0tLS0tLS0t CisgUmVzdWx0CisoMSByb3cpCisKK1NFVCBwZ19zdGF0X3N0YXRlbWVudHMudHJhY2tfbWlu X2R1cmF0aW9uID0gLTE7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAxOworIFFVRVJZ IFBMQU4gCistLS0tLS0tLS0tLS0KKyBSZXN1bHQKKygxIHJvdykKKworRVhQTEFJTiAoQ09T VFMgT0ZGKSBTRUxFQ1QgMTsKKyBRVUVSWSBQTEFOIAorLS0tLS0tLS0tLS0tCisgUmVzdWx0 CisoMSByb3cpCisKK1NFTEVDVCB0b3BsZXZlbCwgY2FsbHMsIHF1ZXJ5IEZST00gcGdfc3Rh dF9zdGF0ZW1lbnRzCisgIE9SREVSIEJZIHF1ZXJ5IENPTExBVEUgIkMiOworIHRvcGxldmVs IHwgY2FsbHMgfCAgICAgICAgICAgICAgICAgICAgICAgcXVlcnkgICAgICAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgfCAgICAgMiB8IEVYUExB SU4gKENPU1RTIE9GRikgU0VMRUNUICQxCisgZiAgICAgICAgfCAgICAgMiB8IFNFTEVDVCAk MQorIHQgICAgICAgIHwgICAgIDEgfCBTRUxFQ1QgcGdfc3RhdF9zdGF0ZW1lbnRzX3Jlc2V0 KCkgSVMgTk9UIE5VTEwgQVMgdAorIHQgICAgICAgIHwgICAgIDIgfCBTRVQgcGdfc3RhdF9z dGF0ZW1lbnRzLnRyYWNrX21pbl9kdXJhdGlvbiA9ICQxCisoNCByb3dzKQorCistLSBuZXN0 ZWQgdHJhY2tpbmcgLSBleHRlbmRlZCBxdWVyeSBwcm90b2NvbAorU0VUIHBnX3N0YXRfc3Rh dGVtZW50cy50cmFjayA9ICJhbGwiOworU0VMRUNUIHBnX3N0YXRfc3RhdGVtZW50c19yZXNl dCgpIElTIE5PVCBOVUxMIEFTIHQ7CisgdCAKKy0tLQorIHQKKygxIHJvdykKKworU0VUIHBn X3N0YXRfc3RhdGVtZW50cy50cmFja19taW5fZHVyYXRpb24gPSAwOworRVhQTEFJTiAoQ09T VFMgT0ZGKSBTRUxFQ1QgMTsgXHBhcnNlIHN0bXQKKyBRVUVSWSBQTEFOIAorLS0tLS0tLS0t LS0tCisgUmVzdWx0CisoMSByb3cpCisKK1xiaW5kX25hbWVkIHN0bXQgXGcKKyBRVUVSWSBQ TEFOIAorLS0tLS0tLS0tLS0tCisgUmVzdWx0CisoMSByb3cpCisKK1xiaW5kX25hbWVkIHN0 bXQgXGcKKyBRVUVSWSBQTEFOIAorLS0tLS0tLS0tLS0tCisgUmVzdWx0CisoMSByb3cpCisK K1NFVCBwZ19zdGF0X3N0YXRlbWVudHMudHJhY2tfbWluX2R1cmF0aW9uID0gLTE7CitcYmlu ZF9uYW1lZCBzdG10IFxnCisgUVVFUlkgUExBTiAKKy0tLS0tLS0tLS0tLQorIFJlc3VsdAor KDEgcm93KQorCitcYmluZF9uYW1lZCBzdG10IFxnCisgUVVFUlkgUExBTiAKKy0tLS0tLS0t LS0tLQorIFJlc3VsdAorKDEgcm93KQorCitTRUxFQ1QgdG9wbGV2ZWwsIGNhbGxzLCBxdWVy eSBGUk9NIHBnX3N0YXRfc3RhdGVtZW50cworICBPUkRFUiBCWSBxdWVyeSBDT0xMQVRFICJD IjsKKyB0b3BsZXZlbCB8IGNhbGxzIHwgICAgICAgICAgICAgICAgICAgICBxdWVyeSAgICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICB8ICAgICAyIHwg RVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgJDEKKyBmICAgICAgICB8ICAgICAzIHwgU0VM RUNUICQxCisgdCAgICAgICAgfCAgICAgMSB8IFNFVCBwZ19zdGF0X3N0YXRlbWVudHMudHJh Y2tfbWluX2R1cmF0aW9uID0gJDEKKygzIHJvd3MpCisKZGlmZiAtLWdpdCBhL2NvbnRyaWIv cGdfc3RhdF9zdGF0ZW1lbnRzL21lc29uLmJ1aWxkIGIvY29udHJpYi9wZ19zdGF0X3N0YXRl bWVudHMvbWVzb24uYnVpbGQKaW5kZXggNDQ0NmFmNThjNS4uNjQyNzY2NWVlMSAxMDA2NDQK LS0tIGEvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvbWVzb24uYnVpbGQKKysrIGIvY29u dHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvbWVzb24uYnVpbGQKQEAgLTU0LDYgKzU0LDcgQEAg dGVzdHMgKz0gewogICAgICAgJ3ByaXZpbGVnZXMnLAogICAgICAgJ2V4dGVuZGVkJywKICAg ICAgICdwYXJhbGxlbCcsCisgICAgICAnbWluX2R1cmF0aW9uJywKICAgICAgICdjbGVhbnVw JywKICAgICAgICdvbGRleHR2ZXJzaW9ucycsCiAgICAgXSwKZGlmZiAtLWdpdCBhL2NvbnRy aWIvcGdfc3RhdF9zdGF0ZW1lbnRzL3BnX3N0YXRfc3RhdGVtZW50cy5jIGIvY29udHJpYi9w Z19zdGF0X3N0YXRlbWVudHMvcGdfc3RhdF9zdGF0ZW1lbnRzLmMKaW5kZXggNGEzZTg1NWNl OS4uMDBhYzExYWVkMCAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMv cGdfc3RhdF9zdGF0ZW1lbnRzLmMKKysrIGIvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMv cGdfc3RhdF9zdGF0ZW1lbnRzLmMKQEAgLTI5MSwxNiArMjkxLDE4IEBAIHN0YXRpYyBjb25z dCBzdHJ1Y3QgY29uZmlnX2VudW1fZW50cnkgdHJhY2tfb3B0aW9uc1tdID0KIAogc3RhdGlj IGludAlwZ3NzX21heCA9IDUwMDA7CS8qIG1heCAjIHN0YXRlbWVudHMgdG8gdHJhY2sgKi8K IHN0YXRpYyBpbnQJcGdzc190cmFjayA9IFBHU1NfVFJBQ0tfVE9QOwkvKiB0cmFja2luZyBs ZXZlbCAqLworc3RhdGljIGludAlwZ3NzX3RyYWNrX21pbl9kdXJhdGlvbiA9IDA7IC8qIG1z ZWMgb3IgLTEgKi8KIHN0YXRpYyBib29sIHBnc3NfdHJhY2tfdXRpbGl0eSA9IHRydWU7CS8q IHdoZXRoZXIgdG8gdHJhY2sgdXRpbGl0eSBjb21tYW5kcyAqLwogc3RhdGljIGJvb2wgcGdz c190cmFja19wbGFubmluZyA9IGZhbHNlOwkvKiB3aGV0aGVyIHRvIHRyYWNrIHBsYW5uaW5n CiAJCQkJCQkJCQkJCSAqIGR1cmF0aW9uICovCiBzdGF0aWMgYm9vbCBwZ3NzX3NhdmUgPSB0 cnVlOwkvKiB3aGV0aGVyIHRvIHNhdmUgc3RhdHMgYWNyb3NzIHNodXRkb3duICovCiAKIAot I2RlZmluZSBwZ3NzX2VuYWJsZWQobGV2ZWwpIFwKKyNkZWZpbmUgcGdzc19lbmFibGVkKGxl dmVsLCBza2lwX3NhbXBsZV9jaGVjaykgXAogCSghSXNQYXJhbGxlbFdvcmtlcigpICYmIFwK IAkocGdzc190cmFjayA9PSBQR1NTX1RSQUNLX0FMTCB8fCBcCi0JKHBnc3NfdHJhY2sgPT0g UEdTU19UUkFDS19UT1AgJiYgKGxldmVsKSA9PSAwKSkpCisJKHBnc3NfdHJhY2sgPT0gUEdT U19UUkFDS19UT1AgJiYgKGxldmVsKSA9PSAwKSkgJiYgXAorCShza2lwX3NhbXBsZV9jaGVj ayA9PSBQR1NTX0lOVkFMSUQgfHwgcGdzc190cmFja19taW5fZHVyYXRpb24gPj0gMCkpCiAK ICNkZWZpbmUgcmVjb3JkX2djX3F0ZXh0cygpIFwKIAlkbyB7IFwKQEAgLTQxNSw2ICs0MTcs MTggQEAgX1BHX2luaXQodm9pZCkKIAkJCQkJCQlOVUxMLAogCQkJCQkJCU5VTEwpOwogCisJ RGVmaW5lQ3VzdG9tSW50VmFyaWFibGUoInBnX3N0YXRfc3RhdGVtZW50cy50cmFja19taW5f ZHVyYXRpb24iLAorCQkJCQkJCSJTZXRzIHRoZSBtaW5pbXVtIGV4ZWN1dGlvbiB0aW1lIGFi b3ZlIHdoaWNoIHN0YXRlbWVudHMgd2lsbCBiZSB0cmFja2VkLiIsCisJCQkJCQkJIiAtMSB0 dXJucyB0aGlzIGZlYXR1cmUgb2ZmLiAwIHRyYWNrcyBhbGwgc3RhdGVtZW50cy4iLAorCQkJ CQkJCSZwZ3NzX3RyYWNrX21pbl9kdXJhdGlvbiwKKwkJCQkJCQkwLAorCQkJCQkJCS0xLCBJ TlRfTUFYLAorCQkJCQkJCVBHQ19TVVNFVCwKKwkJCQkJCQlHVUNfVU5JVF9NUywKKwkJCQkJ CQlOVUxMLAorCQkJCQkJCU5VTEwsCisJCQkJCQkJTlVMTCk7CisKIAlEZWZpbmVDdXN0b21F bnVtVmFyaWFibGUoInBnX3N0YXRfc3RhdGVtZW50cy50cmFjayIsCiAJCQkJCQkJICJTZWxl Y3RzIHdoaWNoIHN0YXRlbWVudHMgYXJlIHRyYWNrZWQgYnkgcGdfc3RhdF9zdGF0ZW1lbnRz LiIsCiAJCQkJCQkJIE5VTEwsCkBAIC04MzcsNyArODUxLDcgQEAgcGdzc19wb3N0X3BhcnNl X2FuYWx5emUoUGFyc2VTdGF0ZSAqcHN0YXRlLCBRdWVyeSAqcXVlcnksIEp1bWJsZVN0YXRl ICpqc3RhdGUpCiAJCXByZXZfcG9zdF9wYXJzZV9hbmFseXplX2hvb2socHN0YXRlLCBxdWVy eSwganN0YXRlKTsKIAogCS8qIFNhZmV0eSBjaGVjay4uLiAqLwotCWlmICghcGdzcyB8fCAh cGdzc19oYXNoIHx8ICFwZ3NzX2VuYWJsZWQobmVzdGluZ19sZXZlbCkpCisJaWYgKCFwZ3Nz IHx8ICFwZ3NzX2hhc2ggfHwgIXBnc3NfZW5hYmxlZChuZXN0aW5nX2xldmVsLCBQR1NTX0lO VkFMSUQpKQogCQlyZXR1cm47CiAKIAkvKgpAQCAtODk1LDcgKzkwOSw3IEBAIHBnc3NfcGxh bm5lcihRdWVyeSAqcGFyc2UsCiAJICogcGdzc19zdG9yZSBuZWVkcyBpdC4gIFdlIGFsc28g aWdub3JlIHF1ZXJ5IHdpdGhvdXQgcXVlcnlpZCwgYXMgaXQgd291bGQKIAkgKiBiZSB0cmVh dGVkIGFzIGEgdXRpbGl0eSBzdGF0ZW1lbnQsIHdoaWNoIG1heSBub3QgYmUgdGhlIGNhc2Uu CiAJICovCi0JaWYgKHBnc3NfZW5hYmxlZChuZXN0aW5nX2xldmVsKQorCWlmIChwZ3NzX2Vu YWJsZWQobmVzdGluZ19sZXZlbCwgUEdTU19QTEFOKQogCQkmJiBwZ3NzX3RyYWNrX3BsYW5u aW5nICYmIHF1ZXJ5X3N0cmluZwogCQkmJiBwYXJzZS0+cXVlcnlJZCAhPSBVSU5UNjRDT05T VCgwKSkKIAl7CkBAIC0xMDAwLDcgKzEwMTQsOCBAQCBwZ3NzX0V4ZWN1dG9yU3RhcnQoUXVl cnlEZXNjICpxdWVyeURlc2MsIGludCBlZmxhZ3MpCiAJICogY291bnRpbmcgb2Ygb3B0aW1p emFibGUgc3RhdGVtZW50cyB0aGF0IGFyZSBkaXJlY3RseSBjb250YWluZWQgaW4KIAkgKiB1 dGlsaXR5IHN0YXRlbWVudHMuCiAJICovCi0JaWYgKHBnc3NfZW5hYmxlZChuZXN0aW5nX2xl dmVsKSAmJiBxdWVyeURlc2MtPnBsYW5uZWRzdG10LT5xdWVyeUlkICE9IFVJTlQ2NENPTlNU KDApKQorCWlmIChwZ3NzX2VuYWJsZWQobmVzdGluZ19sZXZlbCwgUEdTU19FWEVDKSAmJgor CQlxdWVyeURlc2MtPnBsYW5uZWRzdG10LT5xdWVyeUlkICE9IFVJTlQ2NENPTlNUKDApKQog CXsKIAkJLyoKIAkJICogU2V0IHVwIHRvIHRyYWNrIHRvdGFsIGVsYXBzZWQgdGltZSBpbiBF eGVjdXRvclJ1bi4gIE1ha2Ugc3VyZSB0aGUKQEAgLTEwNjksMjcgKzEwODQsMzEgQEAgcGdz c19FeGVjdXRvckVuZChRdWVyeURlc2MgKnF1ZXJ5RGVzYykKIAl1aW50NjQJCXF1ZXJ5SWQg PSBxdWVyeURlc2MtPnBsYW5uZWRzdG10LT5xdWVyeUlkOwogCiAJaWYgKHF1ZXJ5SWQgIT0g VUlOVDY0Q09OU1QoMCkgJiYgcXVlcnlEZXNjLT50b3RhbHRpbWUgJiYKLQkJcGdzc19lbmFi bGVkKG5lc3RpbmdfbGV2ZWwpKQorCQlwZ3NzX2VuYWJsZWQobmVzdGluZ19sZXZlbCwgUEdT U19FWEVDKSkKIAl7CisJCWRvdWJsZQkJbXNlYzsKIAkJLyoKIAkJICogTWFrZSBzdXJlIHN0 YXRzIGFjY3VtdWxhdGlvbiBpcyBkb25lLiAgKE5vdGU6IGl0J3Mgb2theSBpZiBzZXZlcmFs CiAJCSAqIGxldmVscyBvZiBob29rIGFsbCBkbyB0aGlzLikKIAkJICovCiAJCUluc3RyRW5k TG9vcChxdWVyeURlc2MtPnRvdGFsdGltZSk7CiAKLQkJcGdzc19zdG9yZShxdWVyeURlc2Mt PnNvdXJjZVRleHQsCi0JCQkJICAgcXVlcnlJZCwKLQkJCQkgICBxdWVyeURlc2MtPnBsYW5u ZWRzdG10LT5zdG10X2xvY2F0aW9uLAotCQkJCSAgIHF1ZXJ5RGVzYy0+cGxhbm5lZHN0bXQt PnN0bXRfbGVuLAotCQkJCSAgIFBHU1NfRVhFQywKLQkJCQkgICBxdWVyeURlc2MtPnRvdGFs dGltZS0+dG90YWwgKiAxMDAwLjAsCS8qIGNvbnZlcnQgdG8gbXNlYyAqLwotCQkJCSAgIHF1 ZXJ5RGVzYy0+ZXN0YXRlLT5lc190b3RhbF9wcm9jZXNzZWQsCi0JCQkJICAgJnF1ZXJ5RGVz Yy0+dG90YWx0aW1lLT5idWZ1c2FnZSwKLQkJCQkgICAmcXVlcnlEZXNjLT50b3RhbHRpbWUt PndhbHVzYWdlLAotCQkJCSAgIHF1ZXJ5RGVzYy0+ZXN0YXRlLT5lc19qaXQgPyAmcXVlcnlE ZXNjLT5lc3RhdGUtPmVzX2ppdC0+aW5zdHIgOiBOVUxMLAotCQkJCSAgIE5VTEwsCi0JCQkJ ICAgcXVlcnlEZXNjLT5lc3RhdGUtPmVzX3BhcmFsbGVsX3dvcmtlcnNfdG9fbGF1bmNoLAot CQkJCSAgIHF1ZXJ5RGVzYy0+ZXN0YXRlLT5lc19wYXJhbGxlbF93b3JrZXJzX2xhdW5jaGVk KTsKKwkJLyogY29udmVydCB0byBtc2VjICovCisJCW1zZWMgPSBxdWVyeURlc2MtPnRvdGFs dGltZS0+dG90YWwgKiAxMDAwLjA7CisJCWlmIChtc2VjID49IHBnc3NfdHJhY2tfbWluX2R1 cmF0aW9uKQorCQkJcGdzc19zdG9yZShxdWVyeURlc2MtPnNvdXJjZVRleHQsCisJCQkJCQlx dWVyeUlkLAorCQkJCQkJcXVlcnlEZXNjLT5wbGFubmVkc3RtdC0+c3RtdF9sb2NhdGlvbiwK KwkJCQkJCXF1ZXJ5RGVzYy0+cGxhbm5lZHN0bXQtPnN0bXRfbGVuLAorCQkJCQkJUEdTU19F WEVDLAorCQkJCQkJbXNlYywKKwkJCQkJCXF1ZXJ5RGVzYy0+ZXN0YXRlLT5lc190b3RhbF9w cm9jZXNzZWQsCisJCQkJCQkmcXVlcnlEZXNjLT50b3RhbHRpbWUtPmJ1ZnVzYWdlLAorCQkJ CQkJJnF1ZXJ5RGVzYy0+dG90YWx0aW1lLT53YWx1c2FnZSwKKwkJCQkJCXF1ZXJ5RGVzYy0+ ZXN0YXRlLT5lc19qaXQgPyAmcXVlcnlEZXNjLT5lc3RhdGUtPmVzX2ppdC0+aW5zdHIgOiBO VUxMLAorCQkJCQkJTlVMTCwKKwkJCQkJCXF1ZXJ5RGVzYy0+ZXN0YXRlLT5lc19wYXJhbGxl bF93b3JrZXJzX3RvX2xhdW5jaCwKKwkJCQkJCXF1ZXJ5RGVzYy0+ZXN0YXRlLT5lc19wYXJh bGxlbF93b3JrZXJzX2xhdW5jaGVkKTsKIAl9CiAKIAlpZiAocHJldl9FeGVjdXRvckVuZCkK QEAgLTExMTIsNyArMTEzMSw3IEBAIHBnc3NfUHJvY2Vzc1V0aWxpdHkoUGxhbm5lZFN0bXQg KnBzdG10LCBjb25zdCBjaGFyICpxdWVyeVN0cmluZywKIAl1aW50NjQJCXNhdmVkX3F1ZXJ5 SWQgPSBwc3RtdC0+cXVlcnlJZDsKIAlpbnQJCQlzYXZlZF9zdG10X2xvY2F0aW9uID0gcHN0 bXQtPnN0bXRfbG9jYXRpb247CiAJaW50CQkJc2F2ZWRfc3RtdF9sZW4gPSBwc3RtdC0+c3Rt dF9sZW47Ci0JYm9vbAkJZW5hYmxlZCA9IHBnc3NfdHJhY2tfdXRpbGl0eSAmJiBwZ3NzX2Vu YWJsZWQobmVzdGluZ19sZXZlbCk7CisJYm9vbAkJZW5hYmxlZCA9IHBnc3NfdHJhY2tfdXRp bGl0eSAmJiBwZ3NzX2VuYWJsZWQobmVzdGluZ19sZXZlbCwgUEdTU19FWEVDKTsKIAogCS8q CiAJICogRm9yY2UgdXRpbGl0eSBzdGF0ZW1lbnRzIHRvIGdldCBxdWVyeUlkIHplcm8uICBX ZSBkbyB0aGlzIGV2ZW4gaW4gY2FzZXMKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfc3RhdF9z dGF0ZW1lbnRzL3NxbC9taW5fZHVyYXRpb24uc3FsIGIvY29udHJpYi9wZ19zdGF0X3N0YXRl bWVudHMvc3FsL21pbl9kdXJhdGlvbi5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMC4uNjM5MDNjYzM4OAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdf c3RhdF9zdGF0ZW1lbnRzL3NxbC9taW5fZHVyYXRpb24uc3FsCkBAIC0wLDAgKzEsNTAgQEAK Ky0tCistLSB0cmFja19taW5fZHVyYXRpb24KKy0tCisKKy0tIHRvcC1sZXZlbCB0cmFja2lu ZyAtIHNpbXBsZSBxdWVyeSBwcm90b2NvbAorU0hPVyBwZ19zdGF0X3N0YXRlbWVudHMudHJh Y2s7CitTRVQgcGdfc3RhdF9zdGF0ZW1lbnRzLnRyYWNrX21pbl9kdXJhdGlvbiA9IC0xOwor U0VMRUNUIHBnX3N0YXRfc3RhdGVtZW50c19yZXNldCgpIElTIE5PVCBOVUxMIEFTIHQ7CitT RUxFQ1QgMSBBUyAiaW50IjsKK1NFTEVDVCBxdWVyeSwgY2FsbHMgRlJPTSBwZ19zdGF0X3N0 YXRlbWVudHMgT1JERVIgQlkgcXVlcnkgQ09MTEFURSAiQyI7CitTRVQgcGdfc3RhdF9zdGF0 ZW1lbnRzLnRyYWNrX21pbl9kdXJhdGlvbiA9IDA7CitTRUxFQ1QgMSBBUyAiaW50IjsKK1NF TEVDVCBxdWVyeSwgY2FsbHMgRlJPTSBwZ19zdGF0X3N0YXRlbWVudHMgT1JERVIgQlkgcXVl cnkgQ09MTEFURSAiQyI7CisKKy0tIHRvcC1sZXZlbCB0cmFja2luZyAtIGV4dGVuZGVkIHF1 ZXJ5IHByb3RvY29sCitTRVQgcGdfc3RhdF9zdGF0ZW1lbnRzLnRyYWNrX21pbl9kdXJhdGlv biA9IC0xOworU0VMRUNUIHBnX3N0YXRfc3RhdGVtZW50c19yZXNldCgpIElTIE5PVCBOVUxM IEFTIHQ7CitTRUxFQ1QgMSBccGFyc2Ugc3RtdAorXGJpbmRfbmFtZWQgc3RtdCBcZworU0VM RUNUIHF1ZXJ5LCBjYWxscyBGUk9NIHBnX3N0YXRfc3RhdGVtZW50cyBPUkRFUiBCWSBxdWVy eSBDT0xMQVRFICJDIjsKK1NFVCBwZ19zdGF0X3N0YXRlbWVudHMudHJhY2tfbWluX2R1cmF0 aW9uID0gMDsKK1xiaW5kX25hbWVkIHN0bXQgXGcKK1NFTEVDVCBxdWVyeSwgY2FsbHMgRlJP TSBwZ19zdGF0X3N0YXRlbWVudHMgT1JERVIgQlkgcXVlcnkgQ09MTEFURSAiQyI7CitTRUxF Q1QgcGdfc3RhdF9zdGF0ZW1lbnRzX3Jlc2V0KCkgSVMgTk9UIE5VTEwgQVMgdDsKK0RFQUxM T0NBVEUgc3RtdDsKKworLS0gbmVzdGVkIHRyYWNraW5nIC0gc2ltcGxlIHF1ZXJ5IHByb3Rv Y29sCitTRVQgcGdfc3RhdF9zdGF0ZW1lbnRzLnRyYWNrID0gImFsbCI7CitTRUxFQ1QgcGdf c3RhdF9zdGF0ZW1lbnRzX3Jlc2V0KCkgSVMgTk9UIE5VTEwgQVMgdDsKK1NFVCBwZ19zdGF0 X3N0YXRlbWVudHMudHJhY2tfbWluX2R1cmF0aW9uID0gMDsKK0VYUExBSU4gKENPU1RTIE9G RikgU0VMRUNUIDE7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAxOworU0VUIHBnX3N0 YXRfc3RhdGVtZW50cy50cmFja19taW5fZHVyYXRpb24gPSAtMTsKK0VYUExBSU4gKENPU1RT IE9GRikgU0VMRUNUIDE7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAxOworU0VMRUNU IHRvcGxldmVsLCBjYWxscywgcXVlcnkgRlJPTSBwZ19zdGF0X3N0YXRlbWVudHMKKyAgT1JE RVIgQlkgcXVlcnkgQ09MTEFURSAiQyI7CisKKy0tIG5lc3RlZCB0cmFja2luZyAtIGV4dGVu ZGVkIHF1ZXJ5IHByb3RvY29sCitTRVQgcGdfc3RhdF9zdGF0ZW1lbnRzLnRyYWNrID0gImFs bCI7CitTRUxFQ1QgcGdfc3RhdF9zdGF0ZW1lbnRzX3Jlc2V0KCkgSVMgTk9UIE5VTEwgQVMg dDsKK1NFVCBwZ19zdGF0X3N0YXRlbWVudHMudHJhY2tfbWluX2R1cmF0aW9uID0gMDsKK0VY UExBSU4gKENPU1RTIE9GRikgU0VMRUNUIDE7IFxwYXJzZSBzdG10CitcYmluZF9uYW1lZCBz dG10IFxnCitcYmluZF9uYW1lZCBzdG10IFxnCitTRVQgcGdfc3RhdF9zdGF0ZW1lbnRzLnRy YWNrX21pbl9kdXJhdGlvbiA9IC0xOworXGJpbmRfbmFtZWQgc3RtdCBcZworXGJpbmRfbmFt ZWQgc3RtdCBcZworU0VMRUNUIHRvcGxldmVsLCBjYWxscywgcXVlcnkgRlJPTSBwZ19zdGF0 X3N0YXRlbWVudHMKKyAgT1JERVIgQlkgcXVlcnkgQ09MTEFURSAiQyI7ClwgTm8gbmV3bGlu ZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3Bnc3RhdHN0YXRl bWVudHMuc2dtbCBiL2RvYy9zcmMvc2dtbC9wZ3N0YXRzdGF0ZW1lbnRzLnNnbWwKaW5kZXgg ZTJhYzFjMmQ1MC4uMWM1ZjU3NDI1ZiAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3Bnc3Rh dHN0YXRlbWVudHMuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcGdzdGF0c3RhdGVtZW50cy5z Z21sCkBAIC05NDUsNiArOTQ1LDI4IEBACiAgICAgPC9saXN0aXRlbT4KICAgIDwvdmFybGlz dGVudHJ5PgogCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPgorICAgICA8dmFybmFt ZT5wZ19zdGF0X3N0YXRlbWVudHMudHJhY2tfbWluX2R1cmF0aW9uPC92YXJuYW1lPiAoPHR5 cGU+cmVhbDwvdHlwZT4pCisgICAgIDxpbmRleHRlcm0+CisgICAgICA8cHJpbWFyeT48dmFy bmFtZT5wZ19zdGF0X3N0YXRlbWVudHMudHJhY2tfbWluX2R1cmF0aW9uPC92YXJuYW1lPiBj b25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgPC9pbmRleHRlcm0+Cisg ICAgPC90ZXJtPgorCisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIDx2YXJu YW1lPnBnX3N0YXRfc3RhdGVtZW50cy50cmFja19taW5fZHVyYXRpb248L3Zhcm5hbWU+IGlz IHRoZSBtaW5pbXVtIHN0YXRlbWVudAorICAgICAgZXhlY3V0aW9uIHRpbWUsIGluIG1pbGxp c2Vjb25kcywgdGhhdCB3aWxsIGNhdXNlIHRoZSBzdGF0ZW1lbnQgdG8KKyAgICAgIGJlIHRy YWNrZWQuIFNldHRpbmcgdGhpcyB0byA8bGl0ZXJhbD4wPC9saXRlcmFsPiB0cmFja3MgYWxs IHN0YXRlbWVudHMuCisgICAgICA8bGl0ZXJhbD4tMTwvbGl0ZXJhbD4gKHRoZSBkZWZhdWx0 KSBkaXNhYmxlcyB0cmFja2luZyBvZiBzdGF0ZW1lbnRzLgorICAgICAgVGhlIHNhbWUgYXMg c2V0dGluZyA8dmFybmFtZT5wZ19zdGF0X3N0YXRlbWVudHMudHJhY2s8L3Zhcm5hbWU+IHRv IDxsaXRlcmFsPm5vbmU8L2xpdGVyYWw+LgorICAgICAgRm9yIGV4YW1wbGUsIGlmIHlvdSBz ZXQgaXQgdG8gPGxpdGVyYWw+MjUwbXM8L2xpdGVyYWw+IHRoZW4gYWxsIHN0YXRlbWVudHMK KyAgICAgIHRoYXQgcnVuIDI1MG1zIG9yIGxvbmdlciB3aWxsIGJlIHRyYWNrZWQuIE9ubHkg c3VwZXJ1c2VycyBjYW4gY2hhbmdlIHRoaXMKKyAgICAgIHNldHRpbmcuCisgICAgIDwvcGFy YT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKICAgIDx2YXJsaXN0 ZW50cnk+CiAgICAgPHRlcm0+CiAgICAgIDx2YXJuYW1lPnBnX3N0YXRfc3RhdGVtZW50cy5z YXZlPC92YXJuYW1lPiAoPHR5cGU+Ym9vbGVhbjwvdHlwZT4pCi0tIAoyLjM0LjEKCg== --------------gWmbr0huy407PheC91aq6Zm1--