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 1kebS4-0002vB-32 for pgsql-hackers@arkaria.postgresql.org; Mon, 16 Nov 2020 10:09:36 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1kebS3-0004Bp-1W for pgsql-hackers@arkaria.postgresql.org; Mon, 16 Nov 2020 10:09:35 +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 1kebS2-0004Bi-HJ for pgsql-hackers@lists.postgresql.org; Mon, 16 Nov 2020 10:09:34 +0000 Received: from mail.postgrespro.ru ([93.174.131.139]) by makus.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1kebRz-0000qE-AH for pgsql-hackers@lists.postgresql.org; Mon, 16 Nov 2020 10:09:33 +0000 Received: from mail.postgrespro.ru (cyclops.postgrespro.ru [93.174.131.138]) (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 95B4D21C1C60; Mon, 16 Nov 2020 13:09:30 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mail; t=1605521370; bh=CKGNauuCqrNrgrupvvwty0QCUah5R5UanCZcBwUvR+k=; h=Date:From:To:Cc:Subject; b=Vl+v05jwYxBgv0jqGkQkxX6n4IjbmWJkVwwFXXnxc+I//JAD7LMqQLZM/GIOo1onC 5/VGZwKQZegDHJJMwgXtiY5/gkZ91rf23I2ElmWfyDa5UrOCKWLvGmLr/CdlSMJ0yp s31GBukJJCSYT9/HTQ3YmjAT6Hu+HYgWqPmWHPRo= MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_e780f69a9b7914800367139c57c384bf" Content-Transfer-Encoding: 8bit Date: Mon, 16 Nov 2020 13:09:30 +0300 From: a.pervushina@postgrespro.ru To: Anna Akenteva Cc: Daniel Gustafsson , Andres Freund , Tom Lane , Fujii Masao , Alexey Kondratov , Kyotaro Horiguchi , a.korotkov@postgrespro.ru, i.kartyshov@postgrespro.ru, amit.kapila16@gmail.com, pgsql-hackers@lists.postgresql.org Subject: Re: [HACKERS] make async slave to wait for lsn to be replayed User-Agent: Roundcube Webmail/1.4.0 Message-ID: X-Sender: a.pervushina@postgrespro.ru List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --=_e780f69a9b7914800367139c57c384bf Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8; format=flowed Hello, I've changed the BEGIN WAIT FOR LSN statement to core functions pg_waitlsn, pg_waitlsn_infinite and pg_waitlsn_no_wait. Currently the functions work inside repeatable read transactions, but waitlsn creates a snapshot if called first in a transaction block, which can possibly lead the transaction to working incorrectly, so the function gives a warning. Usage examples ========== select pg_waitlsn(‘LSN’, timeout); select pg_waitlsn_infinite(‘LSN’); select pg_waitlsn_no_wait(‘LSN’); --=_e780f69a9b7914800367139c57c384bf Content-Transfer-Encoding: base64 Content-Type: text/x-diff; charset=us-ascii; name=pg_waitlsn_v10.patch Content-Disposition: attachment; filename=pg_waitlsn_v10.patch; size=17150 ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYwppbmRleCA5ZDNmMWMxMmZjNS4uMjdlOTY0YzgxMTEg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYworKysgYi9zcmMv YmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRl ICJjYXRhbG9nL3BnX2RhdGFiYXNlLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvcHJvZ3Jlc3MuaCIK ICNpbmNsdWRlICJjb21tYW5kcy90YWJsZXNwYWNlLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvd2Fp dC5oIgogI2luY2x1ZGUgImNvbW1vbi9jb250cm9sZGF0YV91dGlscy5oIgogI2luY2x1ZGUgImV4 ZWN1dG9yL2luc3RydW1lbnQuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKQEAgLTczODcsNiAr NzM4OCwxNSBAQCBTdGFydHVwWExPRyh2b2lkKQogCQkJCQlicmVhazsKIAkJCQl9CiAKKwkJCQkv KgorCQkJCSAqIElmIHdlIHJlcGxheWVkIGFuIExTTiB0aGF0IHNvbWVvbmUgd2FzIHdhaXRpbmcg Zm9yLAorCQkJCSAqIHNldCBsYXRjaGVzIGluIHNoYXJlZCBtZW1vcnkgYXJyYXkgdG8gbm90aWZ5 IHRoZSB3YWl0ZXIuCisJCQkJICovCisJCQkJaWYgKFhMb2dDdGwtPmxhc3RSZXBsYXllZEVuZFJl Y1B0ciA+PSBHZXRNaW5XYWl0ZWRMU04oKSkKKwkJCQl7CisJCQkJCVdhaXRTZXRMYXRjaChYTG9n Q3RsLT5sYXN0UmVwbGF5ZWRFbmRSZWNQdHIpOworCQkJCX0KKwogCQkJCS8qIEVsc2UsIHRyeSB0 byBmZXRjaCB0aGUgbmV4dCBXQUwgcmVjb3JkICovCiAJCQkJcmVjb3JkID0gUmVhZFJlY29yZCh4 bG9ncmVhZGVyLCBMT0csIGZhbHNlKTsKIAkJCX0gd2hpbGUgKHJlY29yZCAhPSBOVUxMKTsKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvY29t bWFuZHMvTWFrZWZpbGUKaW5kZXggZDQ4MTVkM2NlNjUuLjliMzEwOTI2YzEyIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9jb21tYW5kcy9NYWtlZmlsZQorKysgYi9zcmMvYmFja2VuZC9jb21tYW5k cy9NYWtlZmlsZQpAQCAtNTcsNiArNTcsNyBAQCBPQkpTID0gXAogCXVzZXIubyBcCiAJdmFjdXVt Lm8gXAogCXZhcmlhYmxlLm8gXAotCXZpZXcubworCXZpZXcubyBcCisJd2FpdC5vCiAKIGluY2x1 ZGUgJCh0b3Bfc3JjZGlyKS9zcmMvYmFja2VuZC9jb21tb24ubWsKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2NvbW1hbmRzL3dhaXQuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3dhaXQuYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYWMxODA0MGMzNjIKLS0tIC9kZXYv bnVsbAorKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy93YWl0LmMKQEAgLTAsMCArMSwyOTcgQEAK Ky8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHdhaXQuYworICoJICBJbXBsZW1lbnRzIHdhaXRs c24sIHdoaWNoIGFsbG93cyB3YWl0aW5nIGZvciBldmVudHMgc3VjaCBhcworICoJICBMU04gaGF2 aW5nIGJlZW4gcmVwbGF5ZWQgb24gcmVwbGljYS4KKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQg KGMpIDE5OTYtMjAyMCwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBv cnRpb25zIENvcHlyaWdodCAoYykgMjAyMCwgUmVnZW50cyBvZiBQb3N0Z3Jlc1BybworICoKKyAq IElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3dhaXQuYworICoKKyAq LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUg PG1hdGguaD4KKworI2luY2x1ZGUgImFjY2Vzcy94YWN0LmgiCisjaW5jbHVkZSAiYWNjZXNzL3hs b2cuaCIKKyNpbmNsdWRlICJhY2Nlc3MveGxvZ2RlZnMuaCIKKyNpbmNsdWRlICJjb21tYW5kcy93 YWl0LmgiCisjaW5jbHVkZSAiZnVuY2FwaS5oIgorI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2lu Y2x1ZGUgInBnc3RhdC5oIgorI2luY2x1ZGUgInN0b3JhZ2UvYmFja2VuZGlkLmgiCisjaW5jbHVk ZSAic3RvcmFnZS9wbXNpZ25hbC5oIgorI2luY2x1ZGUgInN0b3JhZ2UvcHJvYy5oIgorI2luY2x1 ZGUgInN0b3JhZ2Uvc2htZW0uaCIKKyNpbmNsdWRlICJzdG9yYWdlL3NpbnZhbGFkdC5oIgorI2lu Y2x1ZGUgInN0b3JhZ2Uvc3Bpbi5oIgorI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisjaW5j bHVkZSAidXRpbHMvcGdfbHNuLmgiCisjaW5jbHVkZSAidXRpbHMvdGltZXN0YW1wLmgiCisKKy8q IEFkZCB0byBzaGFyZWQgbWVtb3J5IGFycmF5ICovCitzdGF0aWMgdm9pZCBBZGRXYWl0ZWRMU04o WExvZ1JlY1B0ciBsc25fdG9fd2FpdCk7CisKKy8qIFNoYXJlZCBtZW1vcnkgc3RydWN0dXJlICov Cit0eXBlZGVmIHN0cnVjdAoreworCWludAkJCWJhY2tlbmRfbWF4aWQ7CisJcGdfYXRvbWljX3Vp bnQ2NCBtaW5fbHNuOyAvKiBYTG9nUmVjUHRyIG9mIG1pbmltYWwgd2FpdGVkIGZvciBMU04gKi8K KwlzbG9ja190CQltdXRleDsKKwkvKiBMU05zIHRoYXQgZGlmZmVyZW50IGJhY2tlbmRzIGFyZSB3 YWl0aW5nICovCisJWExvZ1JlY1B0cglsc25bRkxFWElCTEVfQVJSQVlfTUVNQkVSXTsKK30gV2Fp dFN0YXRlOworCitzdGF0aWMgV2FpdFN0YXRlICpzdGF0ZTsKKworLyoKKyAqIEFkZCB0aGUgd2Fp dCBldmVudCBvZiB0aGUgY3VycmVudCBiYWNrZW5kIHRvIHNoYXJlZCBtZW1vcnkgYXJyYXkKKyAq Lworc3RhdGljIHZvaWQKK0FkZFdhaXRlZExTTihYTG9nUmVjUHRyIGxzbl90b193YWl0KQorewor CVNwaW5Mb2NrQWNxdWlyZSgmc3RhdGUtPm11dGV4KTsKKwlpZiAoc3RhdGUtPmJhY2tlbmRfbWF4 aWQgPCBNeUJhY2tlbmRJZCkKKwkJc3RhdGUtPmJhY2tlbmRfbWF4aWQgPSBNeUJhY2tlbmRJZDsK KworCXN0YXRlLT5sc25bTXlCYWNrZW5kSWRdID0gbHNuX3RvX3dhaXQ7CisKKwlpZiAobHNuX3Rv X3dhaXQgPCBzdGF0ZS0+bWluX2xzbi52YWx1ZSkKKwkJc3RhdGUtPm1pbl9sc24udmFsdWUgPSBs c25fdG9fd2FpdDsKKwlTcGluTG9ja1JlbGVhc2UoJnN0YXRlLT5tdXRleCk7Cit9CisKKy8qCisg KiBEZWxldGUgd2FpdCBldmVudCBvZiB0aGUgY3VycmVudCBiYWNrZW5kIGZyb20gdGhlIHNoYXJl ZCBtZW1vcnkgYXJyYXkuCisgKi8KK3ZvaWQKK0RlbGV0ZVdhaXRlZExTTih2b2lkKQoreworCWlu dAkJCWk7CisJWExvZ1JlY1B0cglsc25fdG9fZGVsZXRlOworCisJU3BpbkxvY2tBY3F1aXJlKCZz dGF0ZS0+bXV0ZXgpOworCisJbHNuX3RvX2RlbGV0ZSA9IHN0YXRlLT5sc25bTXlCYWNrZW5kSWRd OworCXN0YXRlLT5sc25bTXlCYWNrZW5kSWRdID0gSW52YWxpZFhMb2dSZWNQdHI7CisKKwkvKiBJ ZiB3ZSBhcmUgZGVsZXRpbmcgdGhlIG1pbmltYWwgTFNOLCB0aGVuIGNob29zZSB0aGUgbmV4dCBt aW5fbHNuICovCisJaWYgKGxzbl90b19kZWxldGUgIT0gSW52YWxpZFhMb2dSZWNQdHIgJiYKKwkJ bHNuX3RvX2RlbGV0ZSA9PSBzdGF0ZS0+bWluX2xzbi52YWx1ZSkKKwl7CisJCXN0YXRlLT5taW5f bHNuLnZhbHVlID0gUEdfVUlOVDY0X01BWDsKKwkJZm9yIChpID0gMjsgaSA8PSBzdGF0ZS0+YmFj a2VuZF9tYXhpZDsgaSsrKQorCQkJaWYgKHN0YXRlLT5sc25baV0gIT0gSW52YWxpZFhMb2dSZWNQ dHIgJiYKKwkJCQlzdGF0ZS0+bHNuW2ldIDwgc3RhdGUtPm1pbl9sc24udmFsdWUpCisJCQkJc3Rh dGUtPm1pbl9sc24udmFsdWUgPSBzdGF0ZS0+bHNuW2ldOworCX0KKworCS8qIElmIGRlbGV0aW5n IGZyb20gdGhlIGVuZCBvZiB0aGUgYXJyYXksIHNob3J0ZW4gdGhlIGFycmF5J3MgdXNlZCBwYXJ0 ICovCisJaWYgKHN0YXRlLT5iYWNrZW5kX21heGlkID09IE15QmFja2VuZElkKQorCQlmb3IgKGkg PSAoTXlCYWNrZW5kSWQpOyBpID49IDI7IGktLSkKKwkJCWlmIChzdGF0ZS0+bHNuW2ldICE9IElu dmFsaWRYTG9nUmVjUHRyKQorCQkJeworCQkJCXN0YXRlLT5iYWNrZW5kX21heGlkID0gaTsKKwkJ CQlicmVhazsKKwkJCX0KKworCVNwaW5Mb2NrUmVsZWFzZSgmc3RhdGUtPm11dGV4KTsKK30KKwor LyoKKyAqIFJlcG9ydCBhbW91bnQgb2Ygc2hhcmVkIG1lbW9yeSBzcGFjZSBuZWVkZWQgZm9yIFdh aXRTdGF0ZQorICovCitTaXplCitXYWl0U2htZW1TaXplKHZvaWQpCit7CisJU2l6ZQkJc2l6ZTsK KworCXNpemUgPSBvZmZzZXRvZihXYWl0U3RhdGUsIGxzbik7CisJc2l6ZSA9IGFkZF9zaXplKHNp emUsIG11bF9zaXplKE1heEJhY2tlbmRzICsgMSwgc2l6ZW9mKFhMb2dSZWNQdHIpKSk7CisJcmV0 dXJuIHNpemU7Cit9CisKKy8qCisgKiBJbml0aWFsaXplIGFuIGFycmF5IG9mIGV2ZW50cyB0byB3 YWl0IGZvciBpbiBzaGFyZWQgbWVtb3J5CisgKi8KK3ZvaWQKK1dhaXRTaG1lbUluaXQodm9pZCkK K3sKKwlib29sCQlmb3VuZDsKKwl1aW50MzIJCWk7CisKKwlzdGF0ZSA9IChXYWl0U3RhdGUgKikg U2htZW1Jbml0U3RydWN0KCJwZ193YWl0X2xzbiIsCisJCQkJCQkJCQkJICBXYWl0U2htZW1TaXpl KCksCisJCQkJCQkJCQkJICAmZm91bmQpOworCWlmICghZm91bmQpCisJeworCQlTcGluTG9ja0lu aXQoJnN0YXRlLT5tdXRleCk7CisKKwkJZm9yIChpID0gMDsgaSA8IChNYXhCYWNrZW5kcyArIDEp OyBpKyspCisJCQlzdGF0ZS0+bHNuW2ldID0gSW52YWxpZFhMb2dSZWNQdHI7CisKKwkJc3RhdGUt PmJhY2tlbmRfbWF4aWQgPSAwOworCQlzdGF0ZS0+bWluX2xzbi52YWx1ZSA9IFBHX1VJTlQ2NF9N QVg7CisJfQorfQorCisvKgorICogU2V0IGxhdGNoZXMgaW4gc2hhcmVkIG1lbW9yeSB0byBzaWdu YWwgdGhhdCBuZXcgTFNOIGhhcyBiZWVuIHJlcGxheWVkCisgKi8KK3ZvaWQKK1dhaXRTZXRMYXRj aChYTG9nUmVjUHRyIGN1cl9sc24pCit7CisJdWludDMyCQlpOworCWludAkJCWJhY2tlbmRfbWF4 aWQ7CisJUEdQUk9DCSAgICpiYWNrZW5kOworCisJU3BpbkxvY2tBY3F1aXJlKCZzdGF0ZS0+bXV0 ZXgpOworCWJhY2tlbmRfbWF4aWQgPSBzdGF0ZS0+YmFja2VuZF9tYXhpZDsKKworCWZvciAoaSA9 IDI7IGkgPD0gYmFja2VuZF9tYXhpZDsgaSsrKQorCXsKKwkJYmFja2VuZCA9IEJhY2tlbmRJZEdl dFByb2MoaSk7CisKKwkJaWYgKGJhY2tlbmQgJiYgc3RhdGUtPmxzbltpXSAhPSAwICYmCisJCQlz dGF0ZS0+bHNuW2ldIDw9IGN1cl9sc24pCisJCXsKKwkJCVNldExhdGNoKCZiYWNrZW5kLT5wcm9j TGF0Y2gpOworCQl9CisJfQorCVNwaW5Mb2NrUmVsZWFzZSgmc3RhdGUtPm11dGV4KTsKK30KKwor LyoKKyAqIEdldCBtaW5pbWFsIExTTiB0aGF0IHNvbWVvbmUgd2FpdHMgZm9yCisgKi8KK1hMb2dS ZWNQdHIKK0dldE1pbldhaXRlZExTTih2b2lkKQoreworCXJldHVybiBzdGF0ZS0+bWluX2xzbi52 YWx1ZTsKK30KKworLyoKKyAqIE9uIFdBSVQgdXNlIGEgbGF0Y2ggdG8gd2FpdCB0aWxsIExTTiBp cyByZXBsYXllZCwKKyAqIHBvc3RtYXN0ZXIgZGllcyBvciB0aW1lb3V0IGhhcHBlbnMuIFRpbWVv dXQgaXMgc3BlY2lmaWVkIGluIG1pbGxpc2Vjb25kcy4KKyAqIFJldHVybnMgdHJ1ZSBpZiBMU04g d2FzIHJlYWNoZWQgYW5kIGZhbHNlIG90aGVyd2lzZS4KKyAqLworYm9vbAorV2FpdFV0aWxpdHko WExvZ1JlY1B0ciB0YXJnZXRfbHNuLCBjb25zdCBpbnQgdGltZW91dF9tcykKK3sKKwlYTG9nUmVj UHRyCWN1cl9sc24gPSBHZXRYTG9nUmVwbGF5UmVjUHRyKE5VTEwpOworCWludAkJCWxhdGNoX2V2 ZW50czsKKwlmbG9hdDgJCWVuZHRpbWU7CisJYm9vbAkJcmVzID0gZmFsc2U7CisJYm9vbAkJd2Fp dF9mb3JldmVyID0gKHRpbWVvdXRfbXMgPD0gMCk7CisKKwlpZiAoIVJlY292ZXJ5SW5Qcm9ncmVz cygpKSB7CisJCWVyZXBvcnQoRVJST1IsCisJCQkJZXJybXNnKCJDYW5ub3QgdXNlIHdhaXRsc24g b24gcHJpbWFyeSIpKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qCisJICogSW4gdHJhbnNh Y3Rpb25zLCB0aGF0IGhhdmUgaXNvbGF0aW9uIGxldmVsIHJlcGVhdGFibGUgcmVhZCBvciBoaWdo ZXIKKwkgKiB3YWl0bHNuIGNyZWF0ZXMgYSBzbmFwc2hvdCBpZiBjYWxsZWQgZmlyc3QgaW4gYSBi bG9jaywgd2hpY2ggY2FuCisJICogbGVhZCB0aGUgdHJhbnNhY3Rpb24gdG8gd29ya2luZyBpbmNv cnJlY3RseQorCSAqLworCisJaWYgKElzVHJhbnNhY3Rpb25CbG9jaygpICYmIFhhY3RJc29MZXZl bCAhPSBYQUNUX1JFQURfQ09NTUlUVEVEKSB7CisJCWVyZXBvcnQoV0FSTklORywKKwkJCQllcnJt c2coIldhaXRsc24gbWF5IHdvcmsgaW5jb3JyZWN0bHkgaW4gdGhpcyBpc29sYXRpb24gbGV2ZWwi KSwKKwkJCQllcnJoaW50KCJDYWxsIHdhaXRsc24gYmVmb3JlIHN0YXJ0aW5nIHRoZSB0cmFuc2Fj dGlvbiIpKTsKKwl9CisKKwllbmR0aW1lID0gR2V0Tm93RmxvYXQoKSArIHRpbWVvdXRfbXMgLyAx MDAwLjA7CisKKwlsYXRjaF9ldmVudHMgPSBXTF9MQVRDSF9TRVQgfCBXTF9USU1FT1VUIHwgV0xf RVhJVF9PTl9QTV9ERUFUSDsKKworCS8qIENoZWNrIGlmIHdlIGFscmVhZHkgcmVhY2hlZCB0aGUg bmVlZGVkIExTTiAqLworCWlmIChjdXJfbHNuID49IHRhcmdldF9sc24pCisJCXJldHVybiB0cnVl OworCisJQWRkV2FpdGVkTFNOKHRhcmdldF9sc24pOworCisJZm9yICg7OykKKwl7CisJCWludAkJ CXJjOworCQlmbG9hdDgJCXRpbWVfbGVmdCA9IDA7CisJCWxvbmcJCXRpbWVfbGVmdF9tcyA9IDA7 CisKKwkJdGltZV9sZWZ0ID0gZW5kdGltZSAtIEdldE5vd0Zsb2F0KCk7CisKKwkJLyogVXNlIDEw MCBtcyBhcyB0aGUgZGVmYXVsdCB0aW1lb3V0IHRvIGNoZWNrIGZvciBpbnRlcnJ1cHRzICovCisJ CWlmICh3YWl0X2ZvcmV2ZXIgfHwgdGltZV9sZWZ0IDwgMCB8fCB0aW1lX2xlZnQgPiAwLjEpCisJ CQl0aW1lX2xlZnRfbXMgPSAxMDA7CisJCWVsc2UKKwkJCXRpbWVfbGVmdF9tcyA9IChsb25nKSBj ZWlsKHRpbWVfbGVmdCAqIDEwMDAuMCk7CisKKwkJLyogSWYgaW50ZXJydXB0LCBMb2NrRXJyb3JD bGVhbnVwKCkgd2lsbCBkbyBEZWxldGVXYWl0ZWRMU04oKSBmb3IgdXMgKi8KKwkJQ0hFQ0tfRk9S X0lOVEVSUlVQVFMoKTsKKworCQkvKiBJZiBwb3N0bWFzdGVyIGRpZXMsIGZpbmlzaCBpbW1lZGlh dGVseSAqLworCQlpZiAoIVBvc3RtYXN0ZXJJc0FsaXZlKCkpCisJCQlicmVhazsKKworCQlyYyA9 IFdhaXRMYXRjaChNeUxhdGNoLCBsYXRjaF9ldmVudHMsIHRpbWVfbGVmdF9tcywKKwkJCQkJICAg V0FJVF9FVkVOVF9DTElFTlRfUkVBRCk7CisKKwkJUmVzZXRMYXRjaChNeUxhdGNoKTsKKworCQlp ZiAocmMgJiBXTF9MQVRDSF9TRVQpCisJCQljdXJfbHNuID0gR2V0WExvZ1JlcGxheVJlY1B0cihO VUxMKTsKKworCQlpZiAocmMgJiBXTF9USU1FT1VUKQorCQl7CisJCQljdXJfbHNuID0gR2V0WExv Z1JlcGxheVJlY1B0cihOVUxMKTsKKwkJCS8qIElmIHRoZSB0aW1lIHNwZWNpZmllZCBieSB1c2Vy IGhhcyBwYXNzZWQsIHN0b3Agd2FpdGluZyAqLworCQkJdGltZV9sZWZ0ID0gZW5kdGltZSAtIEdl dE5vd0Zsb2F0KCk7CisJCQlpZiAoIXdhaXRfZm9yZXZlciAmJiB0aW1lX2xlZnQgPD0gMC4wKQor CQkJCWJyZWFrOworCQl9CisKKwkJLyogSWYgTFNOIGhhcyBiZWVuIHJlcGxheWVkICovCisJCWlm ICh0YXJnZXRfbHNuIDw9IGN1cl9sc24pCisJCQlicmVhazsKKwl9CisKKwlEZWxldGVXYWl0ZWRM U04oKTsKKworCWlmIChjdXJfbHNuIDwgdGFyZ2V0X2xzbikKKwkJZXJlcG9ydChXQVJOSU5HLAor CQkJCSBlcnJtc2coIkxTTiB3YXMgbm90IHJlYWNoZWQiKSwKKwkJCQkgZXJyaGludCgiVHJ5IHRv IGluY3JlYXNlIHdhaXQgdGltZS4iKSk7CisJZWxzZQorCQlyZXMgPSB0cnVlOworCisJcmV0dXJu IHJlczsKK30KKworRGF0dW0KK3BnX3dhaXRsc24oUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlYTG9n UmVjUHRyCQl0cmdfbHNuID0gUEdfR0VUQVJHX0xTTigwKTsKKwl1aW50NjRfdAkJZGVsYXkgPSBQ R19HRVRBUkdfSU5UMzIoMSk7CisKKwlQR19SRVRVUk5fQk9PTChXYWl0VXRpbGl0eSh0cmdfbHNu LCBkZWxheSkpOworfQorCitEYXR1bQorcGdfd2FpdGxzbl9pbmZpbml0ZShQR19GVU5DVElPTl9B UkdTKQoreworCVhMb2dSZWNQdHIJCXRyZ19sc24gPSBQR19HRVRBUkdfTFNOKDApOworCisJUEdf UkVUVVJOX0JPT0woV2FpdFV0aWxpdHkodHJnX2xzbiwgMCkpOworfQorCitEYXR1bQorcGdfd2Fp dGxzbl9ub193YWl0KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJWExvZ1JlY1B0cgkJdHJnX2xzbiA9 IFBHX0dFVEFSR19MU04oMCk7CisKKwlQR19SRVRVUk5fQk9PTChXYWl0VXRpbGl0eSh0cmdfbHNu LCAxKSk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5j CmluZGV4IDQyN2IwZDU5Y2RlLi4yZGNmZGRlNWYzZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv c3RvcmFnZS9pcGMvaXBjaS5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYwpA QCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgImFjY2Vzcy9zeW5jc2Nhbi5oIgogI2luY2x1ZGUg ImFjY2Vzcy90d29waGFzZS5oIgogI2luY2x1ZGUgImNvbW1hbmRzL2FzeW5jLmgiCisjaW5jbHVk ZSAiY29tbWFuZHMvd2FpdC5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBn c3RhdC5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5oIgpAQCAtMTQ3LDYgKzE0 OCw3IEBAIENyZWF0ZVNoYXJlZE1lbW9yeUFuZFNlbWFwaG9yZXModm9pZCkKIAkJc2l6ZSA9IGFk ZF9zaXplKHNpemUsIEJUcmVlU2htZW1TaXplKCkpOwogCQlzaXplID0gYWRkX3NpemUoc2l6ZSwg U3luY1NjYW5TaG1lbVNpemUoKSk7CiAJCXNpemUgPSBhZGRfc2l6ZShzaXplLCBBc3luY1NobWVt U2l6ZSgpKTsKKwkJc2l6ZSA9IGFkZF9zaXplKHNpemUsIFdhaXRTaG1lbVNpemUoKSk7CiAjaWZk ZWYgRVhFQ19CQUNLRU5ECiAJCXNpemUgPSBhZGRfc2l6ZShzaXplLCBTaG1lbUJhY2tlbmRBcnJh eVNpemUoKSk7CiAjZW5kaWYKQEAgLTI2NCw2ICsyNjYsMTEgQEAgQ3JlYXRlU2hhcmVkTWVtb3J5 QW5kU2VtYXBob3Jlcyh2b2lkKQogCVN5bmNTY2FuU2htZW1Jbml0KCk7CiAJQXN5bmNTaG1lbUlu aXQoKTsKIAorCS8qCisJICogSW5pdCBhcnJheSBvZiBldmVudHMgZm9yIHRoZSB3YWl0IGNsYXVz ZSBpbiBzaGFyZWQgbWVtb3J5CisJICovCisJV2FpdFNobWVtSW5pdCgpOworCiAjaWZkZWYgRVhF Q19CQUNLRU5ECiAKIAkvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3By b2MuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMKaW5kZXggNTg0NDU0MGNjY2Eu LjQyZjhiMzNjMmY0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5j CisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMKQEAgLTM4LDYgKzM4LDcgQEAK ICNpbmNsdWRlICJhY2Nlc3MvdHJhbnNhbS5oIgogI2luY2x1ZGUgImFjY2Vzcy90d29waGFzZS5o IgogI2luY2x1ZGUgImFjY2Vzcy94YWN0LmgiCisjaW5jbHVkZSAiY29tbWFuZHMvd2FpdC5oIgog I2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgogI2luY2x1ZGUgInBv c3RtYXN0ZXIvYXV0b3ZhY3V1bS5oIgpAQCAtNzE3LDYgKzcxOCw5IEBAIExvY2tFcnJvckNsZWFu dXAodm9pZCkKIAogCUFib3J0U3Ryb25nTG9ja0FjcXVpcmUoKTsKIAorCS8qIElmIHdhaXRsc24g d2FzIGludGVycnVwdGVkLCB0aGVuIHN0b3Agd2FpdGluZyBmb3IgdGhhdCBMU04gKi8KKwlEZWxl dGVXYWl0ZWRMU04oKTsKKwogCS8qIE5vdGhpbmcgdG8gZG8gaWYgd2Ugd2VyZW4ndCB3YWl0aW5n IGZvciBhIGxvY2sgKi8KIAlpZiAobG9ja0F3YWl0ZWQgPT0gTlVMTCkKIAl7CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC91dGlscy9hZHQvbWlzYy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L21p c2MuYwppbmRleCAzN2MyM2M5MTU1YS4uMjE4MTE5MWQ5OWUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC9taXNjLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L21pc2MuYwpA QCAtMzczLDggKzM3Myw2IEBAIHBnX3NsZWVwKFBHX0ZVTkNUSU9OX0FSR1MpCiAJICogbGVzcyB0 aGFuIHRoZSBzcGVjaWZpZWQgdGltZSB3aGVuIFdhaXRMYXRjaCBpcyB0ZXJtaW5hdGVkIGVhcmx5 IGJ5IGEKIAkgKiBub24tcXVlcnktY2FuY2VsaW5nIHNpZ25hbCBzdWNoIGFzIFNJR0hVUC4KIAkg Ki8KLSNkZWZpbmUgR2V0Tm93RmxvYXQoKQkoKGZsb2F0OCkgR2V0Q3VycmVudFRpbWVzdGFtcCgp IC8gMTAwMDAwMC4wKQotCiAJZW5kdGltZSA9IEdldE5vd0Zsb2F0KCkgKyBzZWNzOwogCiAJZm9y ICg7OykKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgYi9zcmMv aW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CmluZGV4IGMyMjg3MjczYTkzLi4xNjE3NzA0OWY2 ZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAorKysgYi9zcmMv aW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CkBAIC0xMDkzNyw0ICsxMDkzNywxOSBAQAogICBw cm9uYW1lID0+ICdpc19ub3JtYWxpemVkJywgcHJvcmV0dHlwZSA9PiAnYm9vbCcsIHByb2FyZ3R5 cGVzID0+ICd0ZXh0IHRleHQnLAogICBwcm9zcmMgPT4gJ3VuaWNvZGVfaXNfbm9ybWFsaXplZCcg fSwKIAoreyBvaWQgPT4gJzE2Mzg3JywgZGVzY3IgPT4gJ3dhaXQgZm9yIExTTiB1bnRpbCB0aW1l b3V0JywKKyAgcHJvbmFtZSA9PiAncGdfd2FpdGxzbicsIHByb3JldHR5cGUgPT4gJ2Jvb2wnLCBw cm9hcmd0eXBlcyA9PiAncGdfbHNuIGludDgnLAorICBwcm9hcmduYW1lcyA9PiAne3RyZ19sc24s ZGVsYXl9JywKKyAgcHJvc3JjID0+ICdwZ193YWl0bHNuJyB9LAorCit7IG9pZCA9PiAnMTYzODgn LCBkZXNjciA9PiAnd2FpdCBmb3IgTFNOIGZvciBhbiBpbmZpbml0ZSB0aW1lJywKKyAgcHJvbmFt ZSA9PiAncGdfd2FpdGxzbl9pbmZpbml0ZScsIHByb3JldHR5cGUgPT4gJ2Jvb2wnLCBwcm9hcmd0 eXBlcyA9PiAncGdfbHNuJywKKyAgcHJvYXJnbmFtZXMgPT4gJ3t0cmdfbHNufScsCisgIHByb3Ny YyA9PiAncGdfd2FpdGxzbl9pbmZpbml0ZScgfSwKKworeyBvaWQgPT4gJzE2Mzg5JywgZGVzY3Ig PT4gJ3dhaXQgZm9yIExTTiB3aXRoIG5vIHRpbWVvdXQnLAorICBwcm9uYW1lID0+ICdwZ193YWl0 bHNuX25vX3dhaXQnLCBwcm9yZXR0eXBlID0+ICdib29sJywgcHJvYXJndHlwZXMgPT4gJ3BnX2xz bicsCisgIHByb2FyZ25hbWVzID0+ICd7dHJnX2xzbn0nLAorICBwcm9zcmMgPT4gJ3BnX3dhaXRs c25fbm9fd2FpdCcgfSwKKwogXQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvd2Fp dC5oIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvd2FpdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwLi5mZDIxZTQzNDE2NwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNs dWRlL2NvbW1hbmRzL3dhaXQuaApAQCAtMCwwICsxLDI2IEBACisvKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqCisgKiB3YWl0LmgKKyAqCSAgcHJvdG90eXBlcyBmb3IgY29tbWFuZHMvd2FpdC5jCisgKgor ICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjAsIFBvc3RncmVTUUwgR2xvYmFsIERl dmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMjAsIFJlZ2VudHMg b2YgUG9zdGdyZXNQcm8KKyAqCisgKiBzcmMvaW5jbHVkZS9jb21tYW5kcy93YWl0LmgKKyAqCisg Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBXQUlUX0gKKyNkZWZpbmUgV0FJVF9ICisj aW5jbHVkZSAicG9zdGdyZXMuaCIKKyNpbmNsdWRlICJ0Y29wL2Rlc3QuaCIKKyNpbmNsdWRlICJu b2Rlcy9wYXJzZW5vZGVzLmgiCisKK2V4dGVybiBib29sIFdhaXRVdGlsaXR5KFhMb2dSZWNQdHIg bHNuLCBjb25zdCBpbnQgdGltZW91dF9tcyk7CitleHRlcm4gU2l6ZSBXYWl0U2htZW1TaXplKHZv aWQpOworZXh0ZXJuIHZvaWQgV2FpdFNobWVtSW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIFdhaXRT ZXRMYXRjaChYTG9nUmVjUHRyIGN1cl9sc24pOworZXh0ZXJuIFhMb2dSZWNQdHIgR2V0TWluV2Fp dGVkTFNOKHZvaWQpOworZXh0ZXJuIHZvaWQgRGVsZXRlV2FpdGVkTFNOKHZvaWQpOworCisjZW5k aWYJCQkJCQkJLyogV0FJVF9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy90aW1l c3RhbXAuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3RpbWVzdGFtcC5oCmluZGV4IDE2YzNmZDhlYzk3 Li40ZTg1YjZmOWRiMSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvdGltZXN0YW1wLmgK KysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvdGltZXN0YW1wLmgKQEAgLTExMSw0ICsxMTEsNiBAQCBl eHRlcm4gaW50CWRhdGUyaXNveWVhcmRheShpbnQgeWVhciwgaW50IG1vbiwgaW50IG1kYXkpOwog CiBleHRlcm4gYm9vbCBUaW1lc3RhbXBUaW1lc3RhbXBUelJlcXVpcmVzUmV3cml0ZSh2b2lkKTsK IAorI2RlZmluZSBHZXROb3dGbG9hdCgpICgoZmxvYXQ4KSBHZXRDdXJyZW50VGltZXN0YW1wKCkg LyAxMDAwMDAwLjApCisKICNlbmRpZgkJCQkJCQkvKiBUSU1FU1RBTVBfSCAqLwpkaWZmIC0tZ2l0 IGEvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wMjFfd2FpdGxzbi5wbCBiL3NyYy90ZXN0L3JlY292ZXJ5 L3QvMDIxX3dhaXRsc24ucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu LjgxZGQ3MGVmOTYzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wMjFf d2FpdGxzbi5wbApAQCAtMCwwICsxLDkxIEBACisjIENoZWNrcyB3YWl0bHNuCit1c2Ugc3RyaWN0 OwordXNlIHdhcm5pbmdzOworCit1c2UgUG9zdGdyZXNOb2RlOwordXNlIFRlc3RMaWI7Cit1c2Ug VGVzdDo6TW9yZSB0ZXN0cyA9PiAxMTsKKworIyBJbml0aWFsaXplIHByaW1hcnkgbm9kZQorbXkg JG5vZGVfcHJpbWFyeSA9IGdldF9uZXdfbm9kZSgncHJpbWFyeScpOworJG5vZGVfcHJpbWFyeS0+ aW5pdChhbGxvd3Nfc3RyZWFtaW5nID0+IDEpOworJG5vZGVfcHJpbWFyeS0+c3RhcnQ7CisKKyMg QW5kIHNvbWUgY29udGVudCBhbmQgdGFrZSBhIGJhY2t1cAorJG5vZGVfcHJpbWFyeS0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBUQUJMRSB3YWl0X3Rlc3QgQVMgU0VMRUNUIGdlbmVy YXRlX3NlcmllcygxLDEwKSBBUyBhIik7CitteSAkYmFja3VwX25hbWUgPSAnbXlfYmFja3VwJzsK KyRub2RlX3ByaW1hcnktPmJhY2t1cCgkYmFja3VwX25hbWUpOworCisjIFVzaW5nIHRoZSBiYWNr dXAsIGNyZWF0ZSBhIHN0cmVhbWluZyBzdGFuZGJ5IHdpdGggYSAxIHNlY29uZCBkZWxheQorbXkg JG5vZGVfc3RhbmRieSA9IGdldF9uZXdfbm9kZSgnc3RhbmRieScpOworbXkgJGRlbGF5ICAgICAg ICA9IDE7Ciskbm9kZV9zdGFuZGJ5LT5pbml0X2Zyb21fYmFja3VwKCRub2RlX3ByaW1hcnksICRi YWNrdXBfbmFtZSwKKwloYXNfc3RyZWFtaW5nID0+IDEpOworJG5vZGVfc3RhbmRieS0+YXBwZW5k X2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsIHFxWworCXJlY292ZXJ5X21pbl9hcHBseV9kZWxheSA9 ICcke2RlbGF5fXMnCitdKTsKKyRub2RlX3N0YW5kYnktPnN0YXJ0OworCisjIENoZWNrIHRoYXQg dGltZW91dHMgbWFrZSB1cyB3YWl0IGZvciB0aGUgc3BlY2lmaWVkIHRpbWUgKDFzIGhlcmUpCitt eSAkY3VycmVudF90aW1lID0gJG5vZGVfc3RhbmRieS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJT RUxFQ1Qgbm93KCkiKTsKK215ICR0d29fc2Vjb25kcyA9IDIwMDA7ICMgaW4gbWlsbGlzZWNvbmRz CitteSAkc3RhcnRfdGltZSA9IHRpbWUoKTsKKyRub2RlX3N0YW5kYnktPnNhZmVfcHNxbCgncG9z dGdyZXMnLAorCSJTRUxFQ1QgcGdfd2FpdGxzbignMC9GRkZGRkZGRicsICR0d29fc2Vjb25kcyki KTsKK215ICR0aW1lX3dhaXRlZCA9ICh0aW1lKCkgLSAkc3RhcnRfdGltZSkgKiAxMDAwOyAjIGNv bnZlcnQgdG8gbWlsbGlzZWNvbmRzCitvaygkdGltZV93YWl0ZWQgPj0gJHR3b19zZWNvbmRzLCAi d2FpdGxzbiB3YWl0cyBmb3IgZW5vdWdoIHRpbWUiKTsKKworIyBDaGVjayB0aGF0IHRpbWVvdXRz IGxldCB1cyBzdG9wIHdhaXRpbmcgcmlnaHQgYXdheSwgYmVmb3JlIHJlYWNoaW5nIHRhcmdldCBM U04KKyRub2RlX3ByaW1hcnktPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJJTlNFUlQgSU5UTyB3 YWl0X3Rlc3QgVkFMVUVTIChnZW5lcmF0ZV9zZXJpZXMoMTEsIDIwKSkiKTsKK215ICRsc24xID0g JG5vZGVfcHJpbWFyeS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgcGdfY3VycmVudF93 YWxfbHNuKCkiKTsKK215ICgkcmV0LCAkb3V0LCAkZXJyKSA9ICRub2RlX3N0YW5kYnktPnBzcWwo J3Bvc3RncmVzJywKKwkiU0VMRUNUIHBnX3dhaXRsc24oJyRsc24xJywgMSkiKTsKKworb2soJHJl dCA9PSAwLCAiemVybyByZXR1cm4gdmFsdWUgd2hlbiBmYWlsZWQgdG8gd2FpdGxzbiBvbiBzdGFu ZGJ5Iik7CitvaygkZXJyID1+IC9XQVJOSU5HOiAgTFNOIHdhcyBub3QgcmVhY2hlZC8sCisJImNv cnJlY3QgZXJyb3IgbWVzc2FnZSB3aGVuIGZhaWxlZCB0byB3YWl0bHNuIG9uIHN0YW5kYnkiKTsK K29rKCRvdXQgZXEgImYiLCAiaWYgZ2l2ZW4gdG9vIGxpdHRsZSB3YWl0IHRpbWUsIFdBSVQgZG9l c24ndCByZWFjaCB0YXJnZXQgTFNOIik7CisKKworIyBDaGVjayB0aGF0IHdhaXRsc24gd29ya3Mg ZmluZSBhbmQgcmVhY2hlcyB0YXJnZXQgTFNOIGlmIGdpdmVuIG5vIHRpbWVvdXQKKworIyBBZGQg ZGF0YSBvbiBwcmltYXJ5LCBtZW1vcml6ZSBwcmltYXJ5J3MgbGFzdCBMU04KKyRub2RlX3ByaW1h cnktPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJJTlNFUlQgSU5UTyB3YWl0X3Rlc3QgVkFMVUVT IChnZW5lcmF0ZV9zZXJpZXMoMjEsIDMwKSkiKTsKK215ICRsc24yID0gJG5vZGVfcHJpbWFyeS0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgcGdfY3VycmVudF93YWxfbHNuKCkiKTsKKwor IyBXYWl0IGZvciBpdCB0byBhcHBlYXIgb24gcmVwbGljYSwgbWVtb3JpemUgcmVwbGljYSdzIGxh c3QgTFNOCiskbm9kZV9zdGFuZGJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIHBn X3dhaXRsc25faW5maW5pdGUoJyRsc24yJykiKTsKK215ICRyZWFjaGVkX2xzbiA9ICRub2RlX3N0 YW5kYnktPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgcGdfbGFzdF93YWxfcmVwbGF5 X2xzbigpIik7CisKKyMgTWFrZSBzdXJlIHRoYXQgcHJpbWFyeSdzIGFuZCByZXBsaWNhJ3MgTFNO cyBhcmUgdGhlIHNhbWUgYWZ0ZXIgV0FJVAorbXkgJGNvbXBhcmVfbHNucyA9ICRub2RlX3N0YW5k YnktPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgcGdfbHNuX2NtcCgnJHJlYWNoZWRf bHNuJzo6cGdfbHNuLCAnJGxzbjInOjpwZ19sc24pIik7CitvaygkY29tcGFyZV9sc25zIGVxIDAs CisJInN0YW5kYnkgcmVhY2hlZCB0aGUgc2FtZSBMU04gYXMgcHJpbWFyeSBiZWZvcmUgc3RhcnRp bmcgdHJhbnNhY3Rpb24iKTsKKworCisjIE1ha2Ugc3VyZSB0aGF0IGl0J3Mgbm90IGFsbG93ZWQg dG8gdXNlIHdhaXRsc24gb24gcHJpbWFyeQorKCRyZXQsICRvdXQsICRlcnIpID0gJG5vZGVfcHJp bWFyeS0+cHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgcGdfd2FpdGxzbl9pbmZpbml0ZSgnMC9G RkZGRkZGRicpIik7CisKK29rKCRyZXQgIT0gMCwgIm5vbi16ZXJvIHJldHVybiB2YWx1ZSB3aGVu IHRyeWluZyB0byB3YWl0bHNuIG9uIHByaW1hcnkiKTsKK29rKCRlcnIgPX4gL0VSUk9SOiAgQ2Fu bm90IHVzZSB3YWl0bHNuIG9uIHByaW1hcnkvLAorCSJjb3JyZWN0IGVycm9yIG1lc3NhZ2Ugd2hl biB0cnlpbmcgdG8gd2FpdGxzbiBvbiBwcmltYXJ5Iik7Citvaygkb3V0IGVxICcnLCAiZW1wdHkg b3V0cHV0IHdoZW4gdHJ5aW5nIHRvIHdhaXRsc24gb24gcHJpbWFyeSIpOworCisjIE1ha2Ugc3Vy ZSB0aGF0IHdhaXRsc24gZ2l2ZXMgYSB3YXJuaW5nIGluc2lkZSBhIHJlYWQgY29tbWl0ZWQgdHJh bnNhY3Rpb24KKworKCRyZXQsICRvdXQsICRlcnIpID0gJG5vZGVfc3RhbmRieS0+cHNxbCgncG9z dGdyZXMnLAorCSJCRUdJTiBJU09MQVRJT04gTEVWRUwgUkVQRUFUQUJMRSBSRUFEOyBTRUxFQ1Qg cGdfd2FpdGxzbl9ub193YWl0KCcwL0ZGRkZGRkZGJykiKTsKK29rKCRyZXQgPT0gMCwgInplcm8g cmV0dXJuIHZhbHVlIHdoZW4gdHJ5aW5nIHRvIHdhaXRsc24gaW4gdHJhbnNhY3Rpb24iKTsKK29r KCRlcnIgPX4gL1dBUk5JTkc6ICBXYWl0bHNuIG1heSB3b3JrIGluY29ycmVjdGx5IGluIHRoaXMg aXNvbGF0aW9uIGxldmVsLywKKwkiY29ycmVjdCB3YXJuaW5nIG1lc3NhZ2Ugd2hlbiB0cnlpbmcg dG8gd2FpdGxzbiBpbiB0cmFuc2FjdGlvbiIpOworb2soJG91dCBlcSAiZiIsICJub24gZW1wdHkg b3V0cHV0IHdoZW4gdHJ5aW5nIHRvIHdhaXRsc24gaW4gdHJhbnNhY3Rpb24iKTsKKworJG5vZGVf c3RhbmRieS0+c3RvcDsKKyRub2RlX3ByaW1hcnktPnN0b3A7ClwgTm8gbmV3bGluZSBhdCBlbmQg b2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9z cmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCA3ZWFhYWQxZTE0MC4uMjA0YTli YzY3ZTEgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBi L3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0yNjg2LDYgKzI2ODYsNyBAQCBX YWl0RXZlbnRJUEMKIFdhaXRFdmVudFNldAogV2FpdEV2ZW50VGltZW91dAogV2FpdFBNUmVzdWx0 CitXYWl0U3RhdGUKIFdhbENsb3NlTWV0aG9kCiBXYWxMZXZlbAogV2FsUmN2RGF0YQo= --=_e780f69a9b7914800367139c57c384bf--