Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pYTwS-0006Cm-MN for pgsql-hackers@arkaria.postgresql.org; Sat, 04 Mar 2023 15:37:01 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1pYTwR-00033k-IO for pgsql-hackers@arkaria.postgresql.org; Sat, 04 Mar 2023 15:36:59 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pYTwQ-00033V-PL for pgsql-hackers@lists.postgresql.org; Sat, 04 Mar 2023 15:36:59 +0000 Received: from mail.postgrespro.ru ([93.174.131.139]) by makus.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1pYTwL-0001oT-DR for pgsql-hackers@lists.postgresql.org; Sat, 04 Mar 2023 15:36:57 +0000 Received: from mail.postgrespro.ru (webmail.mstn.postgrespro.ru [192.168.2.26]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) by mail.postgrespro.ru (Postfix) with ESMTPSA id CFF6721CC89E; Sat, 4 Mar 2023 18:36:49 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mail; t=1677944209; bh=CwvR9WlVypjgYPCEeJytMCt52nsBylU7bIDZIon/IMY=; h=Date:From:To:Cc:Subject:In-Reply-To:References; b=dnFFhSUIDOtu6+F6Wr4SBeUMEU8wBwd91kisuOib6HoWNUXyL5nWm/zMvBAdg+cTN vB6iKbso7t/XAJTSvVeyfQbBN7gdh4P4kv1GRwKDXEog7CIlbii/BHCMpp2eil9O8O eXaIYJNAxbhJa9VEG+KIQk6cXYhu6RtUJAXX5Tyw= MIME-Version: 1.0 Date: Sat, 04 Mar 2023 18:36:49 +0300 From: Kartyshov Ivan To: Peter Eisentraut Cc: pgsql-hackers@lists.postgresql.org Subject: Re: [HACKERS] make async slave to wait for lsn to be replayed In-Reply-To: <8b5b172f-0ae7-d644-8358-e2851dded43b@enterprisedb.com> References: <8b5b172f-0ae7-d644-8358-e2851dded43b@enterprisedb.com> User-Agent: Roundcube Webmail/1.4.11 Message-ID: <65b254a128385ba5256f640402952321@postgrespro.ru> X-Sender: i.kartyshov@postgrespro.ru Content-Type: multipart/mixed; boundary="=_243e2775ef3879a9330f07a115c62b75" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=_243e2775ef3879a9330f07a115c62b75 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8; format=flowed Here I made new patch of feature, discussed above. WAIT FOR procedure - waits for certain lsn on pause ========== Synopsis ========== SELECT pg_wait_lsn(‘LSN’, timeout) returns boolean Where timeout = 0, will wait infinite without timeout And if timeout = 1, then just check if lsn was replayed How to use it ========== Greg Stark wrote: > That said, I'm not a fan of the specific function names. Remember that > we have polymorphic functions so you could probably just have an > option argument: If you have any example, I will be glade to see them. Ьy searches have not been fruitful. Michael Paquier wrote: > While looking at all the patches proposed, I have noticed that all the > approaches proposed force a wakeup of the waiters in the redo loop of > the startup process for each record, before reading the next record. > It strikes me that there is some interaction with custom resource > managers here, where it is possible to poke at the waiters not for > each record, but after reading some specific records. Something > out-of-core would not be as responsive as the per-record approach, > still responsive enough that the waiters wait on input for an > acceptable amount of time, depending on the frequency of the records > generated by a primary to wake them up. Just something that popped > into my mind while looking a bit at the threads. I`ll work on this idea to have less impact on the redo system. On 2023-03-02 13:33, Peter Eisentraut wrote: > But I wonder how a client is going to get the LSN. How would all of > this be used by a client? As I wrote earlier main purpose of the feature is to achieve read-your-writes-consistency, while using async replica for reads and primary for writes. In that case lsn of last modification is stored inside application. > I'm tempted to think this could be a protocol-layer facility. Every > query automatically returns the current LSN, and every query can also > send along an LSN to wait for, and the client library would just keep > track of the LSN for (what it thinks of as) the connection. So you > get some automatic serialization without having to modify your client > code. Yes it sounds very tempted. But I think community will be against it. -- Ivan Kartyshov Postgres Professional: http://www.postgrespro.com The Russian Postgres Company --=_243e2775ef3879a9330f07a115c62b75 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=wait_proc_v2.patch Content-Disposition: attachment; filename=wait_proc_v2.patch; size=15486 ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dyZWNvdmVyeS5jIGIv c3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3JlY292ZXJ5LmMKaW5kZXggZGJlOTM5NDc2 Mi4uNDIyYmIxZWQ4MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxv Z3JlY292ZXJ5LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3JlY292ZXJ5 LmMKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlICJiYWNrdXAvYmFzZWJhY2t1cC5oIgogI2lu Y2x1ZGUgImNhdGFsb2cvcGdfY29udHJvbC5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3RhYmxlc3Bh Y2UuaCIKKyNpbmNsdWRlICJjb21tYW5kcy93YWl0LmgiCiAjaW5jbHVkZSAiY29tbW9uL2ZpbGVf dXRpbHMuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKQEAg LTE3NTIsNiArMTc1MywxNSBAQCBQZXJmb3JtV2FsUmVjb3Zlcnkodm9pZCkKIAkJCQlicmVhazsK IAkJCX0KIAorCQkJLyoKKwkJCSAqIElmIHdlIHJlcGxheWVkIGFuIExTTiB0aGF0IHNvbWVvbmUg d2FzIHdhaXRpbmcgZm9yLAorCQkJICogc2V0IGxhdGNoZXMgaW4gc2hhcmVkIG1lbW9yeSBhcnJh eSB0byBub3RpZnkgdGhlIHdhaXRlci4KKwkJCSAqLworCQkJaWYgKFhMb2dSZWNvdmVyeUN0bC0+ bGFzdFJlcGxheWVkRW5kUmVjUHRyID49IEdldE1pbldhaXRlZExTTigpKQorCQkJeworCQkJCVdh aXRTZXRMYXRjaChYTG9nUmVjb3ZlcnlDdGwtPmxhc3RSZXBsYXllZEVuZFJlY1B0cik7CisJCQl9 CisKIAkJCS8qIEVsc2UsIHRyeSB0byBmZXRjaCB0aGUgbmV4dCBXQUwgcmVjb3JkICovCiAJCQly ZWNvcmQgPSBSZWFkUmVjb3JkKHhsb2dwcmVmZXRjaGVyLCBMT0csIGZhbHNlLCByZXBsYXlUTEkp OwogCQl9IHdoaWxlIChyZWNvcmQgIT0gTlVMTCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9j b21tYW5kcy9NYWtlZmlsZSBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL01ha2VmaWxlCmluZGV4IDQ4 ZjczNDhmOTEuLmQ4ZjY5NjVkOGMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL01h a2VmaWxlCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL01ha2VmaWxlCkBAIC02MSw2ICs2MSw3 IEBAIE9CSlMgPSBcCiAJdmFjdXVtLm8gXAogCXZhY3V1bXBhcmFsbGVsLm8gXAogCXZhcmlhYmxl Lm8gXAotCXZpZXcubworCXZpZXcubyBcCisJd2FpdC5vCiAKIGluY2x1ZGUgJCh0b3Bfc3JjZGly KS9zcmMvYmFja2VuZC9jb21tb24ubWsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRz L3dhaXQuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3dhaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwLi4zNDY1NjczZjBhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvd2FpdC5jCkBAIC0wLDAgKzEsMjc1IEBACisvKi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAqCisgKiB3YWl0LmMKKyAqCSAgSW1wbGVtZW50cyB3YWl0IGxzbiwgd2hpY2ggYWxsb3dz IHdhaXRpbmcgZm9yIGV2ZW50cyBzdWNoIGFzCisgKgkgIExTTiBoYXZpbmcgYmVlbiByZXBsYXll ZCBvbiByZXBsaWNhLgorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDIwLCBQ b3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0 IChjKSAyMDIwLCBSZWdlbnRzIG9mIFBvc3RncmVzUHJvCisgKgorICogSURFTlRJRklDQVRJT04K KyAqCSAgc3JjL2JhY2tlbmQvY29tbWFuZHMvd2FpdC5jCisgKgorICotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSA8bWF0aC5oPgorCisjaW5j bHVkZSAiYWNjZXNzL3hhY3QuaCIKKyNpbmNsdWRlICJhY2Nlc3MveGxvZ3JlY292ZXJ5LmgiCisj aW5jbHVkZSAiYWNjZXNzL3hsb2dkZWZzLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvd2FpdC5oIgor I2luY2x1ZGUgImZ1bmNhcGkuaCIKKyNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJw Z3N0YXQuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2JhY2tlbmRpZC5oIgorI2luY2x1ZGUgInN0b3Jh Z2UvcG1zaWduYWwuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3Byb2MuaCIKKyNpbmNsdWRlICJzdG9y YWdlL3NobWVtLmgiCisjaW5jbHVkZSAic3RvcmFnZS9zaW52YWxhZHQuaCIKKyNpbmNsdWRlICJz dG9yYWdlL3NwaW4uaCIKKyNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0 aWxzL3BnX2xzbi5oIgorI2luY2x1ZGUgInV0aWxzL3RpbWVzdGFtcC5oIgorCisvKiBBZGQgdG8g c2hhcmVkIG1lbW9yeSBhcnJheSAqLworc3RhdGljIHZvaWQgQWRkV2FpdGVkTFNOKFhMb2dSZWNQ dHIgbHNuX3RvX3dhaXQpOworCisvKiBTaGFyZWQgbWVtb3J5IHN0cnVjdHVyZSAqLwordHlwZWRl ZiBzdHJ1Y3QKK3sKKwlpbnQJCQliYWNrZW5kX21heGlkOworCXBnX2F0b21pY191aW50NjQgbWlu X2xzbjsgLyogWExvZ1JlY1B0ciBvZiBtaW5pbWFsIHdhaXRlZCBmb3IgTFNOICovCisJc2xvY2tf dAkJbXV0ZXg7CisJLyogTFNOcyB0aGF0IGRpZmZlcmVudCBiYWNrZW5kcyBhcmUgd2FpdGluZyAq LworCVhMb2dSZWNQdHIJbHNuW0ZMRVhJQkxFX0FSUkFZX01FTUJFUl07Cit9IFdhaXRTdGF0ZTsK Kworc3RhdGljIFdhaXRTdGF0ZSAqc3RhdGU7CisKKy8qCisgKiBBZGQgdGhlIHdhaXQgZXZlbnQg b2YgdGhlIGN1cnJlbnQgYmFja2VuZCB0byBzaGFyZWQgbWVtb3J5IGFycmF5CisgKi8KK3N0YXRp YyB2b2lkCitBZGRXYWl0ZWRMU04oWExvZ1JlY1B0ciBsc25fdG9fd2FpdCkKK3sKKwlTcGluTG9j a0FjcXVpcmUoJnN0YXRlLT5tdXRleCk7CisJaWYgKHN0YXRlLT5iYWNrZW5kX21heGlkIDwgTXlC YWNrZW5kSWQpCisJCXN0YXRlLT5iYWNrZW5kX21heGlkID0gTXlCYWNrZW5kSWQ7CisKKwlzdGF0 ZS0+bHNuW015QmFja2VuZElkXSA9IGxzbl90b193YWl0OworCisJaWYgKGxzbl90b193YWl0IDwg c3RhdGUtPm1pbl9sc24udmFsdWUpCisJCXN0YXRlLT5taW5fbHNuLnZhbHVlID0gbHNuX3RvX3dh aXQ7CisJU3BpbkxvY2tSZWxlYXNlKCZzdGF0ZS0+bXV0ZXgpOworfQorCisvKgorICogRGVsZXRl IHdhaXQgZXZlbnQgb2YgdGhlIGN1cnJlbnQgYmFja2VuZCBmcm9tIHRoZSBzaGFyZWQgbWVtb3J5 IGFycmF5LgorICovCit2b2lkCitEZWxldGVXYWl0ZWRMU04odm9pZCkKK3sKKwlpbnQJCQlpOwor CVhMb2dSZWNQdHIJbHNuX3RvX2RlbGV0ZTsKKworCVNwaW5Mb2NrQWNxdWlyZSgmc3RhdGUtPm11 dGV4KTsKKworCWxzbl90b19kZWxldGUgPSBzdGF0ZS0+bHNuW015QmFja2VuZElkXTsKKwlzdGF0 ZS0+bHNuW015QmFja2VuZElkXSA9IEludmFsaWRYTG9nUmVjUHRyOworCisJLyogSWYgd2UgYXJl IGRlbGV0aW5nIHRoZSBtaW5pbWFsIExTTiwgdGhlbiBjaG9vc2UgdGhlIG5leHQgbWluX2xzbiAq LworCWlmIChsc25fdG9fZGVsZXRlICE9IEludmFsaWRYTG9nUmVjUHRyICYmCisJCWxzbl90b19k ZWxldGUgPT0gc3RhdGUtPm1pbl9sc24udmFsdWUpCisJeworCQlzdGF0ZS0+bWluX2xzbi52YWx1 ZSA9IFBHX1VJTlQ2NF9NQVg7CisJCWZvciAoaSA9IDI7IGkgPD0gc3RhdGUtPmJhY2tlbmRfbWF4 aWQ7IGkrKykKKwkJCWlmIChzdGF0ZS0+bHNuW2ldICE9IEludmFsaWRYTG9nUmVjUHRyICYmCisJ CQkJc3RhdGUtPmxzbltpXSA8IHN0YXRlLT5taW5fbHNuLnZhbHVlKQorCQkJCXN0YXRlLT5taW5f bHNuLnZhbHVlID0gc3RhdGUtPmxzbltpXTsKKwl9CisKKwkvKiBJZiBkZWxldGluZyBmcm9tIHRo ZSBlbmQgb2YgdGhlIGFycmF5LCBzaG9ydGVuIHRoZSBhcnJheSdzIHVzZWQgcGFydCAqLworCWlm IChzdGF0ZS0+YmFja2VuZF9tYXhpZCA9PSBNeUJhY2tlbmRJZCkKKwkJZm9yIChpID0gKE15QmFj a2VuZElkKTsgaSA+PSAyOyBpLS0pCisJCQlpZiAoc3RhdGUtPmxzbltpXSAhPSBJbnZhbGlkWExv Z1JlY1B0cikKKwkJCXsKKwkJCQlzdGF0ZS0+YmFja2VuZF9tYXhpZCA9IGk7CisJCQkJYnJlYWs7 CisJCQl9CisKKwlTcGluTG9ja1JlbGVhc2UoJnN0YXRlLT5tdXRleCk7Cit9CisKKy8qCisgKiBS ZXBvcnQgYW1vdW50IG9mIHNoYXJlZCBtZW1vcnkgc3BhY2UgbmVlZGVkIGZvciBXYWl0U3RhdGUK KyAqLworU2l6ZQorV2FpdFNobWVtU2l6ZSh2b2lkKQoreworCVNpemUJCXNpemU7CisKKwlzaXpl ID0gb2Zmc2V0b2YoV2FpdFN0YXRlLCBsc24pOworCXNpemUgPSBhZGRfc2l6ZShzaXplLCBtdWxf c2l6ZShNYXhCYWNrZW5kcyArIDEsIHNpemVvZihYTG9nUmVjUHRyKSkpOworCXJldHVybiBzaXpl OworfQorCisvKgorICogSW5pdGlhbGl6ZSBhbiBhcnJheSBvZiBldmVudHMgdG8gd2FpdCBmb3Ig aW4gc2hhcmVkIG1lbW9yeQorICovCit2b2lkCitXYWl0U2htZW1Jbml0KHZvaWQpCit7CisJYm9v bAkJZm91bmQ7CisJdWludDMyCQlpOworCisJc3RhdGUgPSAoV2FpdFN0YXRlICopIFNobWVtSW5p dFN0cnVjdCgicGdfd2FpdF9sc24iLAorCQkJCQkJCQkJCSAgV2FpdFNobWVtU2l6ZSgpLAorCQkJ CQkJCQkJCSAgJmZvdW5kKTsKKwlpZiAoIWZvdW5kKQorCXsKKwkJU3BpbkxvY2tJbml0KCZzdGF0 ZS0+bXV0ZXgpOworCisJCWZvciAoaSA9IDA7IGkgPCAoTWF4QmFja2VuZHMgKyAxKTsgaSsrKQor CQkJc3RhdGUtPmxzbltpXSA9IEludmFsaWRYTG9nUmVjUHRyOworCisJCXN0YXRlLT5iYWNrZW5k X21heGlkID0gMDsKKwkJc3RhdGUtPm1pbl9sc24udmFsdWUgPSBQR19VSU5UNjRfTUFYOworCX0K K30KKworLyoKKyAqIFNldCBsYXRjaGVzIGluIHNoYXJlZCBtZW1vcnkgdG8gc2lnbmFsIHRoYXQg bmV3IExTTiBoYXMgYmVlbiByZXBsYXllZAorICovCit2b2lkCitXYWl0U2V0TGF0Y2goWExvZ1Jl Y1B0ciBjdXJfbHNuKQoreworCXVpbnQzMgkJaTsKKwlpbnQJCQliYWNrZW5kX21heGlkOworCVBH UFJPQwkgICAqYmFja2VuZDsKKworCVNwaW5Mb2NrQWNxdWlyZSgmc3RhdGUtPm11dGV4KTsKKwli YWNrZW5kX21heGlkID0gc3RhdGUtPmJhY2tlbmRfbWF4aWQ7CisKKwlmb3IgKGkgPSAyOyBpIDw9 IGJhY2tlbmRfbWF4aWQ7IGkrKykKKwl7CisJCWJhY2tlbmQgPSBCYWNrZW5kSWRHZXRQcm9jKGkp OworCisJCWlmIChiYWNrZW5kICYmIHN0YXRlLT5sc25baV0gIT0gMCAmJgorCQkJc3RhdGUtPmxz bltpXSA8PSBjdXJfbHNuKQorCQl7CisJCQlTZXRMYXRjaCgmYmFja2VuZC0+cHJvY0xhdGNoKTsK KwkJfQorCX0KKwlTcGluTG9ja1JlbGVhc2UoJnN0YXRlLT5tdXRleCk7Cit9CisKKy8qCisgKiBH ZXQgbWluaW1hbCBMU04gdGhhdCBzb21lb25lIHdhaXRzIGZvcgorICovCitYTG9nUmVjUHRyCitH ZXRNaW5XYWl0ZWRMU04odm9pZCkKK3sKKwlyZXR1cm4gc3RhdGUtPm1pbl9sc24udmFsdWU7Cit9 CisKKy8qCisgKiBPbiBXQUlUIHVzZSBhIGxhdGNoIHRvIHdhaXQgdGlsbCBMU04gaXMgcmVwbGF5 ZWQsCisgKiBwb3N0bWFzdGVyIGRpZXMgb3IgdGltZW91dCBoYXBwZW5zLiBUaW1lb3V0IGlzIHNw ZWNpZmllZCBpbiBtaWxsaXNlY29uZHMuCisgKiBSZXR1cm5zIHRydWUgaWYgTFNOIHdhcyByZWFj aGVkIGFuZCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK2Jvb2wKK1dhaXRVdGlsaXR5KFhMb2dSZWNQ dHIgdGFyZ2V0X2xzbiwgY29uc3QgaW50IHRpbWVvdXRfbXMpCit7CisJWExvZ1JlY1B0cgljdXJf bHNuID0gR2V0WExvZ1JlcGxheVJlY1B0cihOVUxMKTsKKwlpbnQJCQlsYXRjaF9ldmVudHM7CisJ ZmxvYXQ4CQllbmR0aW1lOworCWJvb2wJCXJlcyA9IGZhbHNlOworCWJvb2wJCXdhaXRfZm9yZXZl ciA9ICh0aW1lb3V0X21zIDw9IDApOworCisJLyoKKwkgKiBJbiB0cmFuc2FjdGlvbnMsIHRoYXQg aGF2ZSBpc29sYXRpb24gbGV2ZWwgcmVwZWF0YWJsZSByZWFkIG9yIGhpZ2hlcgorCSAqIHdhaXQg bHNuIGNyZWF0ZXMgYSBzbmFwc2hvdCBpZiBjYWxsZWQgZmlyc3QgaW4gYSBibG9jaywgd2hpY2gg Y2FuCisJICogbGVhZCB0aGUgdHJhbnNhY3Rpb24gdG8gd29ya2luZyBpbmNvcnJlY3RseQorCSAq LworCisJaWYgKElzVHJhbnNhY3Rpb25CbG9jaygpICYmIFhhY3RJc29MZXZlbCAhPSBYQUNUX1JF QURfQ09NTUlUVEVEKSB7CisJCWVyZXBvcnQoV0FSTklORywKKwkJCQllcnJtc2coIldhaXRsc24g bWF5IHdvcmsgaW5jb3JyZWN0bHkgaW4gdGhpcyBpc29sYXRpb24gbGV2ZWwiKSwKKwkJCQllcnJo aW50KCJDYWxsIHdhaXQgbHNuIGJlZm9yZSBzdGFydGluZyB0aGUgdHJhbnNhY3Rpb24iKSk7CisJ fQorCisJZW5kdGltZSA9IEdldE5vd0Zsb2F0KCkgKyB0aW1lb3V0X21zIC8gMTAwMC4wOworCisJ bGF0Y2hfZXZlbnRzID0gV0xfTEFUQ0hfU0VUIHwgV0xfVElNRU9VVCB8IFdMX0VYSVRfT05fUE1f REVBVEg7CisKKwkvKiBDaGVjayBpZiB3ZSBhbHJlYWR5IHJlYWNoZWQgdGhlIG5lZWRlZCBMU04g Ki8KKwlpZiAoY3VyX2xzbiA+PSB0YXJnZXRfbHNuKQorCQlyZXR1cm4gdHJ1ZTsKKworCUFkZFdh aXRlZExTTih0YXJnZXRfbHNuKTsKKworCWZvciAoOzspCisJeworCQlpbnQJCQlyYzsKKwkJZmxv YXQ4CQl0aW1lX2xlZnQgPSAwOworCQlsb25nCQl0aW1lX2xlZnRfbXMgPSAwOworCisJCXRpbWVf bGVmdCA9IGVuZHRpbWUgLSBHZXROb3dGbG9hdCgpOworCisJCS8qIFVzZSAxMDAgbXMgYXMgdGhl IGRlZmF1bHQgdGltZW91dCB0byBjaGVjayBmb3IgaW50ZXJydXB0cyAqLworCQlpZiAod2FpdF9m b3JldmVyIHx8IHRpbWVfbGVmdCA8IDAgfHwgdGltZV9sZWZ0ID4gMC4xKQorCQkJdGltZV9sZWZ0 X21zID0gMTAwOworCQllbHNlCisJCQl0aW1lX2xlZnRfbXMgPSAobG9uZykgY2VpbCh0aW1lX2xl ZnQgKiAxMDAwLjApOworCisJCS8qIElmIGludGVycnVwdCwgTG9ja0Vycm9yQ2xlYW51cCgpIHdp bGwgZG8gRGVsZXRlV2FpdGVkTFNOKCkgZm9yIHVzICovCisJCUNIRUNLX0ZPUl9JTlRFUlJVUFRT KCk7CisKKwkJLyogSWYgcG9zdG1hc3RlciBkaWVzLCBmaW5pc2ggaW1tZWRpYXRlbHkgKi8KKwkJ aWYgKCFQb3N0bWFzdGVySXNBbGl2ZSgpKQorCQkJYnJlYWs7CisKKwkJcmMgPSBXYWl0TGF0Y2go TXlMYXRjaCwgbGF0Y2hfZXZlbnRzLCB0aW1lX2xlZnRfbXMsCisJCQkJCSAgIFdBSVRfRVZFTlRf Q0xJRU5UX1JFQUQpOworCisJCVJlc2V0TGF0Y2goTXlMYXRjaCk7CisKKwkJaWYgKHJjICYgV0xf TEFUQ0hfU0VUKQorCQkJY3VyX2xzbiA9IEdldFhMb2dSZXBsYXlSZWNQdHIoTlVMTCk7CisKKwkJ aWYgKHJjICYgV0xfVElNRU9VVCkKKwkJeworCQkJY3VyX2xzbiA9IEdldFhMb2dSZXBsYXlSZWNQ dHIoTlVMTCk7CisJCQkvKiBJZiB0aGUgdGltZSBzcGVjaWZpZWQgYnkgdXNlciBoYXMgcGFzc2Vk LCBzdG9wIHdhaXRpbmcgKi8KKwkJCXRpbWVfbGVmdCA9IGVuZHRpbWUgLSBHZXROb3dGbG9hdCgp OworCQkJaWYgKCF3YWl0X2ZvcmV2ZXIgJiYgdGltZV9sZWZ0IDw9IDAuMCkKKwkJCQlicmVhazsK KwkJfQorCisJCS8qIElmIExTTiBoYXMgYmVlbiByZXBsYXllZCAqLworCQlpZiAodGFyZ2V0X2xz biA8PSBjdXJfbHNuKQorCQkJYnJlYWs7CisJfQorCisJRGVsZXRlV2FpdGVkTFNOKCk7CisKKwlp ZiAoY3VyX2xzbiA8IHRhcmdldF9sc24pCisJCWVyZXBvcnQoV0FSTklORywKKwkJCQkgZXJybXNn KCJMU04gd2FzIG5vdCByZWFjaGVkIiksCisJCQkJIGVycmhpbnQoIlRyeSB0byBpbmNyZWFzZSB3 YWl0IHRpbWUuIikpOworCWVsc2UKKwkJcmVzID0gdHJ1ZTsKKworCXJldHVybiByZXM7Cit9CisK K0RhdHVtCitwZ193YWl0X2xzbihQR19GVU5DVElPTl9BUkdTKQoreworCVhMb2dSZWNQdHIJCXRy Z19sc24gPSBQR19HRVRBUkdfTFNOKDApOworCXVpbnQ2NF90CQlkZWxheSA9IFBHX0dFVEFSR19J TlQzMigxKTsKKworCVBHX1JFVFVSTl9CT09MKFdhaXRVdGlsaXR5KHRyZ19sc24sIGRlbGF5KSk7 Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMgYi9zcmMvYmFj a2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMKaW5kZXggOGYxZGVkNzMzOC4uNzYwZDc2MDM1NiAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jCisrKyBiL3NyYy9iYWNrZW5k L3N0b3JhZ2UvaXBjL2lwY2kuYwpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgImFjY2Vzcy94 bG9ncHJlZmV0Y2hlci5oIgogI2luY2x1ZGUgImFjY2Vzcy94bG9ncmVjb3ZlcnkuaCIKICNpbmNs dWRlICJjb21tYW5kcy9hc3luYy5oIgorI2luY2x1ZGUgImNvbW1hbmRzL3dhaXQuaCIKICNpbmNs dWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJwb3N0bWFz dGVyL2F1dG92YWN1dW0uaCIKQEAgLTE0Miw2ICsxNDMsNyBAQCBDYWxjdWxhdGVTaG1lbVNpemUo aW50ICpudW1fc2VtYXBob3JlcykKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgU3luY1NjYW5TaG1l bVNpemUoKSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIEFzeW5jU2htZW1TaXplKCkpOwogCXNp emUgPSBhZGRfc2l6ZShzaXplLCBTdGF0c1NobWVtU2l6ZSgpKTsKKwlzaXplID0gYWRkX3NpemUo c2l6ZSwgV2FpdFNobWVtU2l6ZSgpKTsKICNpZmRlZiBFWEVDX0JBQ0tFTkQKIAlzaXplID0gYWRk X3NpemUoc2l6ZSwgU2htZW1CYWNrZW5kQXJyYXlTaXplKCkpOwogI2VuZGlmCkBAIC0yOTUsNiAr Mjk3LDExIEBAIENyZWF0ZVNoYXJlZE1lbW9yeUFuZFNlbWFwaG9yZXModm9pZCkKIAlBc3luY1No bWVtSW5pdCgpOwogCVN0YXRzU2htZW1Jbml0KCk7CiAKKwkvKgorCSAqIEluaXQgYXJyYXkgb2Yg ZXZlbnRzIGZvciB0aGUgd2FpdCBjbGF1c2UgaW4gc2hhcmVkIG1lbW9yeQorCSAqLworCVdhaXRT aG1lbUluaXQoKTsKKwogI2lmZGVmIEVYRUNfQkFDS0VORAogCiAJLyoKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3Iv cHJvYy5jCmluZGV4IDIyYjQyNzg2MTAuLjFkZWM0MTg5OTIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3By b2MuYwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgImFjY2Vzcy90cmFuc2FtLmgiCiAjaW5j bHVkZSAiYWNjZXNzL3R3b3BoYXNlLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3hsb2d1dGlscy5oIgor I2luY2x1ZGUgImNvbW1hbmRzL3dhaXQuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNs dWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL2F1dG92YWN1dW0uaCIKQEAgLTcw NCw2ICs3MDUsOSBAQCBMb2NrRXJyb3JDbGVhbnVwKHZvaWQpCiAKIAlBYm9ydFN0cm9uZ0xvY2tB Y3F1aXJlKCk7CiAKKwkvKiBJZiB3YWl0IGxzbiB3YXMgaW50ZXJydXB0ZWQsIHRoZW4gc3RvcCB3 YWl0aW5nIGZvciB0aGF0IExTTiAqLworCURlbGV0ZVdhaXRlZExTTigpOworCiAJLyogTm90aGlu ZyB0byBkbyBpZiB3ZSB3ZXJlbid0IHdhaXRpbmcgZm9yIGEgbG9jayAqLwogCWlmIChsb2NrQXdh aXRlZCA9PSBOVUxMKQogCXsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9taXNj LmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvbWlzYy5jCmluZGV4IDIyMGRkYjhjMDEuLmZkNzMx NTk1YjIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9taXNjLmMKKysrIGIvc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L21pc2MuYwpAQCAtMzg0LDggKzM4NCw2IEBAIHBnX3NsZWVwKFBH X0ZVTkNUSU9OX0FSR1MpCiAJICogbGVzcyB0aGFuIHRoZSBzcGVjaWZpZWQgdGltZSB3aGVuIFdh aXRMYXRjaCBpcyB0ZXJtaW5hdGVkIGVhcmx5IGJ5IGEKIAkgKiBub24tcXVlcnktY2FuY2VsaW5n IHNpZ25hbCBzdWNoIGFzIFNJR0hVUC4KIAkgKi8KLSNkZWZpbmUgR2V0Tm93RmxvYXQoKQkoKGZs b2F0OCkgR2V0Q3VycmVudFRpbWVzdGFtcCgpIC8gMTAwMDAwMC4wKQotCiAJZW5kdGltZSA9IEdl dE5vd0Zsb2F0KCkgKyBzZWNzOwogCiAJZm9yICg7OykKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L2NhdGFsb2cvcGdfcHJvYy5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0Cmlu ZGV4IDY2YjczYzM5MDAuLjA0ZGRlMDNkNzIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFs b2cvcGdfcHJvYy5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdApAQCAt MTE5MjcsNCArMTE5MjcsOSBAQAogICBwcm9yZXR0eXBlID0+ICdieXRlYScsIHByb2FyZ3R5cGVz ID0+ICdwZ19icmluX21pbm1heF9tdWx0aV9zdW1tYXJ5JywKICAgcHJvc3JjID0+ICdicmluX21p bm1heF9tdWx0aV9zdW1tYXJ5X3NlbmQnIH0sCiAKK3sgb2lkID0+ICcxNjM4NycsIGRlc2NyID0+ ICd3YWl0IGZvciBMU04gdW50aWwgdGltZW91dCcsCisgIHByb25hbWUgPT4gJ3BnX3dhaXRfbHNu JywgcHJvcmV0dHlwZSA9PiAnYm9vbCcsIHByb2FyZ3R5cGVzID0+ICdwZ19sc24gaW50OCcsCisg IHByb2FyZ25hbWVzID0+ICd7dHJnX2xzbixkZWxheX0nLAorICBwcm9zcmMgPT4gJ3BnX3dhaXRf bHNuJyB9LAorCiBdCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21tYW5kcy93YWl0LmggYi9z cmMvaW5jbHVkZS9jb21tYW5kcy93YWl0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMC4uZmQyMWU0MzQxNgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1h bmRzL3dhaXQuaApAQCAtMCwwICsxLDI2IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiB3 YWl0LmgKKyAqCSAgcHJvdG90eXBlcyBmb3IgY29tbWFuZHMvd2FpdC5jCisgKgorICogUG9ydGlv bnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjAsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50 IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMjAsIFJlZ2VudHMgb2YgUG9zdGdy ZXNQcm8KKyAqCisgKiBzcmMvaW5jbHVkZS9jb21tYW5kcy93YWl0LmgKKyAqCisgKi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAqLworI2lmbmRlZiBXQUlUX0gKKyNkZWZpbmUgV0FJVF9ICisjaW5jbHVkZSAi cG9zdGdyZXMuaCIKKyNpbmNsdWRlICJ0Y29wL2Rlc3QuaCIKKyNpbmNsdWRlICJub2Rlcy9wYXJz ZW5vZGVzLmgiCisKK2V4dGVybiBib29sIFdhaXRVdGlsaXR5KFhMb2dSZWNQdHIgbHNuLCBjb25z dCBpbnQgdGltZW91dF9tcyk7CitleHRlcm4gU2l6ZSBXYWl0U2htZW1TaXplKHZvaWQpOworZXh0 ZXJuIHZvaWQgV2FpdFNobWVtSW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIFdhaXRTZXRMYXRjaChY TG9nUmVjUHRyIGN1cl9sc24pOworZXh0ZXJuIFhMb2dSZWNQdHIgR2V0TWluV2FpdGVkTFNOKHZv aWQpOworZXh0ZXJuIHZvaWQgRGVsZXRlV2FpdGVkTFNOKHZvaWQpOworCisjZW5kaWYJCQkJCQkJ LyogV0FJVF9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy90aW1lc3RhbXAuaCBi L3NyYy9pbmNsdWRlL3V0aWxzL3RpbWVzdGFtcC5oCmluZGV4IGVkZDU5ZGM0MzIuLmRiMjkyNmY5 NjUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL3RpbWVzdGFtcC5oCisrKyBiL3NyYy9p bmNsdWRlL3V0aWxzL3RpbWVzdGFtcC5oCkBAIC0xNDAsNCArMTQwLDYgQEAgZXh0ZXJuIGludAlk YXRlMmlzb3llYXJkYXkoaW50IHllYXIsIGludCBtb24sIGludCBtZGF5KTsKIAogZXh0ZXJuIGJv b2wgVGltZXN0YW1wVGltZXN0YW1wVHpSZXF1aXJlc1Jld3JpdGUodm9pZCk7CiAKKyNkZWZpbmUg R2V0Tm93RmxvYXQoKSAoKGZsb2F0OCkgR2V0Q3VycmVudFRpbWVzdGFtcCgpIC8gMTAwMDAwMC4w KQorCiAjZW5kaWYJCQkJCQkJLyogVElNRVNUQU1QX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy90ZXN0 L3JlY292ZXJ5L3QvMDM0X3dhaXRsc24ucGwgYi9zcmMvdGVzdC9yZWNvdmVyeS90LzAzNF93YWl0 bHNuLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmRjOWU4OTk2NzEK LS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9yZWNvdmVyeS90LzAzNF93YWl0bHNuLnBsCkBA IC0wLDAgKzEsNzYgQEAKKyMgQ2hlY2tzIHdhaXQgbHNuCit1c2Ugc3RyaWN0OwordXNlIHdhcm5p bmdzOworCit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3JlU1FMOjpU ZXN0OjpVdGlsczsKK3VzZSBUZXN0OjpNb3JlOworCisjIEluaXRpYWxpemUgcHJpbWFyeSBub2Rl CitteSAkbm9kZV9wcmltYXJ5ID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdwcmlt YXJ5Jyk7Ciskbm9kZV9wcmltYXJ5LT5pbml0KGFsbG93c19zdHJlYW1pbmcgPT4gMSk7Ciskbm9k ZV9wcmltYXJ5LT5zdGFydDsKKworIyBBbmQgc29tZSBjb250ZW50IGFuZCB0YWtlIGEgYmFja3Vw Ciskbm9kZV9wcmltYXJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFRBQkxFIHdh aXRfdGVzdCBBUyBTRUxFQ1QgZ2VuZXJhdGVfc2VyaWVzKDEsMTApIEFTIGEiKTsKK215ICRiYWNr dXBfbmFtZSA9ICdteV9iYWNrdXAnOworJG5vZGVfcHJpbWFyeS0+YmFja3VwKCRiYWNrdXBfbmFt ZSk7CisKKyMgVXNpbmcgdGhlIGJhY2t1cCwgY3JlYXRlIGEgc3RyZWFtaW5nIHN0YW5kYnkgd2l0 aCBhIDEgc2Vjb25kIGRlbGF5CitteSAkbm9kZV9zdGFuZGJ5ID0gUG9zdGdyZVNRTDo6VGVzdDo6 Q2x1c3Rlci0+bmV3KCdzdGFuZGJ5Jyk7CitteSAkZGVsYXkgICAgICAgID0gMTsKKyRub2RlX3N0 YW5kYnktPmluaXRfZnJvbV9iYWNrdXAoJG5vZGVfcHJpbWFyeSwgJGJhY2t1cF9uYW1lLAorCWhh c19zdHJlYW1pbmcgPT4gMSk7Ciskbm9kZV9zdGFuZGJ5LT5hcHBlbmRfY29uZigncG9zdGdyZXNx bC5jb25mJywgcXFbCisJcmVjb3ZlcnlfbWluX2FwcGx5X2RlbGF5ID0gJyR7ZGVsYXl9cycKK10p OworJG5vZGVfc3RhbmRieS0+c3RhcnQ7CisKKyMgQ2hlY2sgdGhhdCB0aW1lb3V0cyBtYWtlIHVz IHdhaXQgZm9yIHRoZSBzcGVjaWZpZWQgdGltZSAoMXMgaGVyZSkKK215ICRjdXJyZW50X3RpbWUg PSAkbm9kZV9zdGFuZGJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBub3coKSIpOwor bXkgJHR3b19zZWNvbmRzID0gMjAwMDsgIyBpbiBtaWxsaXNlY29uZHMKK215ICRzdGFydF90aW1l ID0gdGltZSgpOworJG5vZGVfc3RhbmRieS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVD VCBwZ193YWl0X2xzbignMC9GRkZGRkZGRicsICR0d29fc2Vjb25kcykiKTsKK215ICR0aW1lX3dh aXRlZCA9ICh0aW1lKCkgLSAkc3RhcnRfdGltZSkgKiAxMDAwOyAjIGNvbnZlcnQgdG8gbWlsbGlz ZWNvbmRzCitvaygkdGltZV93YWl0ZWQgPj0gJHR3b19zZWNvbmRzLCAid2FpdCBsc24gd2FpdHMg Zm9yIGVub3VnaCB0aW1lIik7CisKKyMgQ2hlY2sgdGhhdCB0aW1lb3V0cyBsZXQgdXMgc3RvcCB3 YWl0aW5nIHJpZ2h0IGF3YXksIGJlZm9yZSByZWFjaGluZyB0YXJnZXQgTFNOCisjIFdhaXQgZm9y IG5vIHdhaXQKKyRub2RlX3ByaW1hcnktPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJJTlNFUlQg SU5UTyB3YWl0X3Rlc3QgVkFMVUVTIChnZW5lcmF0ZV9zZXJpZXMoMTEsIDIwKSkiKTsKK215ICRs c24xID0gJG5vZGVfcHJpbWFyeS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgcGdfY3Vy cmVudF93YWxfbHNuKCkiKTsKK215ICgkcmV0LCAkb3V0LCAkZXJyKSA9ICRub2RlX3N0YW5kYnkt PnBzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIHBnX3dhaXRfbHNuKCckbHNuMScsIDEpIik7CisK K29rKCRyZXQgPT0gMCwgInplcm8gcmV0dXJuIHZhbHVlIHdoZW4gZmFpbGVkIHRvIHdhaXQgbHNu IG9uIHN0YW5kYnkiKTsKK29rKCRlcnIgPX4gL1dBUk5JTkc6ICBMU04gd2FzIG5vdCByZWFjaGVk LywKKwkiY29ycmVjdCBlcnJvciBtZXNzYWdlIHdoZW4gZmFpbGVkIHRvIHdhaXQgbHNuIG9uIHN0 YW5kYnkiKTsKK29rKCRvdXQgZXEgImYiLCAiaWYgZ2l2ZW4gdG9vIGxpdHRsZSB3YWl0IHRpbWUs IFdBSVQgZG9lc24ndCByZWFjaCB0YXJnZXQgTFNOIik7CisKKworIyBDaGVjayB0aGF0IHdhaXQg bHNuIHdvcmtzIGZpbmUgYW5kIHJlYWNoZXMgdGFyZ2V0IExTTiBpZiBnaXZlbiBubyB0aW1lb3V0 CisjIFdhaXQgZm9yIGluZmluaXRlCisKKyMgQWRkIGRhdGEgb24gcHJpbWFyeSwgbWVtb3JpemUg cHJpbWFyeSdzIGxhc3QgTFNOCiskbm9kZV9wcmltYXJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywK KwkiSU5TRVJUIElOVE8gd2FpdF90ZXN0IFZBTFVFUyAoZ2VuZXJhdGVfc2VyaWVzKDIxLCAzMCkp Iik7CitteSAkbHNuMiA9ICRub2RlX3ByaW1hcnktPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VM RUNUIHBnX2N1cnJlbnRfd2FsX2xzbigpIik7CisKKyMgV2FpdCBmb3IgaXQgdG8gYXBwZWFyIG9u IHJlcGxpY2EsIG1lbW9yaXplIHJlcGxpY2EncyBsYXN0IExTTgorJG5vZGVfc3RhbmRieS0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBwZ193YWl0X2xzbignJGxzbjInLCAwKSIpOwor bXkgJHJlYWNoZWRfbHNuID0gJG5vZGVfc3RhbmRieS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJ IlNFTEVDVCBwZ19sYXN0X3dhbF9yZXBsYXlfbHNuKCkiKTsKKworIyBNYWtlIHN1cmUgdGhhdCBw cmltYXJ5J3MgYW5kIHJlcGxpY2EncyBMU05zIGFyZSB0aGUgc2FtZSBhZnRlciBXQUlUCitteSAk Y29tcGFyZV9sc25zID0gJG5vZGVfc3RhbmRieS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNF TEVDVCBwZ19sc25fY21wKCckcmVhY2hlZF9sc24nOjpwZ19sc24sICckbHNuMic6OnBnX2xzbiki KTsKK29rKCRjb21wYXJlX2xzbnMgZXEgMCwKKwkic3RhbmRieSByZWFjaGVkIHRoZSBzYW1lIExT TiBhcyBwcmltYXJ5IGJlZm9yZSBzdGFydGluZyB0cmFuc2FjdGlvbiIpOworCiskbm9kZV9zdGFu ZGJ5LT5zdG9wOworJG5vZGVfcHJpbWFyeS0+c3RvcDsKKworZG9uZV90ZXN0aW5nKCk7CmRpZmYg LS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2lu ZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDIyZWE0MmMxNmIuLjY0MTNhNjYxY2YgMTAwNjQ0Ci0t LSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2lu ZGVudC90eXBlZGVmcy5saXN0CkBAIC0yOTY0LDYgKzI5NjQsNyBAQCBXYWl0RXZlbnRJUEMKIFdh aXRFdmVudFNldAogV2FpdEV2ZW50VGltZW91dAogV2FpdFBNUmVzdWx0CitXYWl0U3RhdGUKIFdh bENsb3NlTWV0aG9kCiBXYWxDb21wcmVzc2lvbgogV2FsTGV2ZWwK --=_243e2775ef3879a9330f07a115c62b75--