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 1qLyEg-0016Ep-Hy for pgsql-hackers@arkaria.postgresql.org; Wed, 19 Jul 2023 03:52:22 +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 1qLyEe-00H2Wf-NW for pgsql-hackers@arkaria.postgresql.org; Wed, 19 Jul 2023 03:52:20 +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 1qLyEe-00H2WX-Ak for pgsql-hackers@lists.postgresql.org; Wed, 19 Jul 2023 03:52:20 +0000 Received: from oss.nttdata.com ([49.212.34.109]) by magus.postgresql.org with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1qLyEY-000LuU-VU for pgsql-hackers@lists.postgresql.org; Wed, 19 Jul 2023 03:52:19 +0000 Received: from oss.nttdata.com (localhost [127.0.0.1]) by oss.nttdata.com (Postfix) with ESMTPA id D0CE460793; Wed, 19 Jul 2023 12:52:10 +0900 (JST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.8 at oss.nttdata.com MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_6b3742972f07bca8c6343ab7c62ad532" Content-Transfer-Encoding: 7bit Date: Wed, 19 Jul 2023 12:52:10 +0900 From: Masahiro Ikeda To: Michael Paquier , andres@anarazel.de, tristan@neon.tech Cc: pgsql-hackers@lists.postgresql.org Subject: Re: Support to define custom wait events for extensions In-Reply-To: References: <135feae32cd28f9fb555fe46acb939a0@oss.nttdata.com> User-Agent: Roundcube Webmail/1.4.11 Message-ID: <97449ae1a3b2189934890f6d78b18216@oss.nttdata.com> X-Sender: ikedamsh@oss.nttdata.com List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=_6b3742972f07bca8c6343ab7c62ad532 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed Hi, I updated the patches. * v6-0001-Support-custom-wait-events-for-extensions.patch The main diffs are * rebase it atop current HEAD * update docs to show users how to use the APIs * rename of functions and variables * fix typos * define a new spinlock in shared memory for this purpose * output an error if the number of wait event for extensions exceeds uint16 * show the wait event as "extension" if the custom wait event name is not registered, which is same as LWLock one. * add test cases which confirm it works if new wait events for extensions are defined in initialize phase and after phase. And add a boundary condition test. Please let me know if I forgot to handle something that you commented, and there are better idea. Note: I would like to change the wait event name of contrib modules for example postgres_fdw. But, I think it's better to do so after the APIs are committed. The example mentioned in docs should be updated to the contrib modules codes, not the test module. Regards, -- Masahiro Ikeda NTT DATA CORPORATION --=_6b3742972f07bca8c6343ab7c62ad532 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v6-0001-Support-custom-wait-events-for-extensions.patch Content-Disposition: attachment; filename=v6-0001-Support-custom-wait-events-for-extensions.patch; size=32479 RnJvbSA5YzVjMWYxZjRmMGJlODdjYzA2YzcxMjczOTZlN2QyMjhiNjY1YjhhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXNhaGlybyBJa2VkYSA8bWFzYWhpcm8uaWtlZGEudXNAaGNv Lm50dC5jby5qcD4KRGF0ZTogV2VkLCAxOSBKdWwgMjAyMyAxMjoyODoxMiArMDkwMApTdWJqZWN0 OiBbUEFUQ0hdIFN1cHBvcnQgY3VzdG9tIHdhaXQgZXZlbnRzIGZvciBleHRlbnNpb25zLgoKVG8g c3VwcG9ydCBjdXN0b20gd2FpdCBldmVudHMsIGl0IGFkZCAyIEFQSXMgdG8gZGVmaW5lIG5ldyB3 YWl0IGV2ZW50cwpmb3IgZXh0ZW5zaW9ucyBkeW5hbWljYWxseS4KClRoZSBBUElzIGFyZQoqIFdh aXRFdmVudEV4dGVuc2lvbk5ldygpCiogV2FpdEV2ZW50RXh0ZW5zaW9uUmVnaXN0ZXJOYW1lKCkK ClRoZXNlIGFyZSBzaW1pbGFyIHRvIHRoZSBleGlzdGluZyBMV0xvY2tOZXdUcmFuY2hlSWQoKSBh bmQKTFdMb2NrUmVnaXN0ZXJUcmFuY2hlKCkuCgpGaXJzdCwgZXh0ZW5zaW9ucyBzaG91bGQgY2Fs bCBXYWl0RXZlbnRFeHRlbnNpb25OZXcoKSB0byBnZXQgb25lCm9yIG1vcmUgbmV3IHdhaXQgZXZl bnQsIHdoaWNoIElEcyBhcmUgYWxsb2NhdGVkIGZyb20gYSBzaGFyZWQKY291bnRlci4gIE5leHQs IGVhY2ggaW5kaXZpZHVhbCBwcm9jZXNzIGNhbiB1c2UgdGhlIHdhaXQgZXZlbnQgd2l0aApXYWl0 RXZlbnRFeHRlbnNpb25SZWdpc3Rlck5hbWUoKSB0byBhc3NvY2lhdGUgdGhhdCBhIHdhaXQgZXZl bnQKc3RyaW5nIHRvIHRoZSBhc3NvY2lhdGVkIG5hbWUuCgpOb3RlIHRoYXQgdGhpcyBpbmNsdWRl cyBhIHRlc3QgbW9kdWxlLCB3aGljaCBwZXJoYXBzIHNob3VsZCBiZSBzcGxpdApsYXRlciBpbnRv IGl0cyBvd24gY29tbWl0LgotLS0KIGRvYy9zcmMvc2dtbC9tb25pdG9yaW5nLnNnbWwgICAgICAg ICAgICAgICAgICB8ICAxMCArLQogZG9jL3NyYy9zZ21sL3hmdW5jLnNnbWwgICAgICAgICAgICAg ICAgICAgICAgIHwgIDIzICsrCiBzcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMgICAgICAg ICAgICAgICAgfCAgIDMgKwogLi4uL2FjdGl2aXR5L2dlbmVyYXRlLXdhaXRfZXZlbnRfdHlwZXMu cGwgICAgIHwgICA3ICstCiBzcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50LmMg ICAgICAgfCAxNzEgKysrKysrKysrKystCiAuLi4vdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudF9u YW1lcy50eHQgICAgICAgfCAgIDIgKy0KIHNyYy9pbmNsdWRlL3V0aWxzL3dhaXRfZXZlbnQuaCAg ICAgICAgICAgICAgICB8ICAyNSArKwogc3JjL3Rlc3QvbW9kdWxlcy9NYWtlZmlsZSAgICAgICAg ICAgICAgICAgICAgIHwgICAxICsKIHNyYy90ZXN0L21vZHVsZXMvbWVzb24uYnVpbGQgICAgICAg ICAgICAgICAgICB8ICAgMSArCiAuLi4vdGVzdF9jdXN0b21fd2FpdF9ldmVudHMvLmdpdGlnbm9y ZSAgICAgICAgfCAgIDQgKwogLi4uL21vZHVsZXMvdGVzdF9jdXN0b21fd2FpdF9ldmVudHMvTWFr ZWZpbGUgIHwgIDIzICsrCiAuLi4vdGVzdF9jdXN0b21fd2FpdF9ldmVudHMvbWVzb24uYnVpbGQg ICAgICAgfCAgMzMgKysrCiAuLi4vdGVzdF9jdXN0b21fd2FpdF9ldmVudHMvdC8wMDFfYmFzaWMu cGwgICAgfCAxMzcgKysrKysrKysrKwogLi4uL3Rlc3RfY3VzdG9tX3dhaXRfZXZlbnRzLS0xLjAu c3FsICAgICAgICAgIHwgIDM5ICsrKwogLi4uL3Rlc3RfY3VzdG9tX3dhaXRfZXZlbnRzLmMgICAg ICAgICAgICAgICAgIHwgMjUzICsrKysrKysrKysrKysrKysrKwogLi4uL3Rlc3RfY3VzdG9tX3dh aXRfZXZlbnRzLmNvbnRyb2wgICAgICAgICAgIHwgICAzICsKIDE2IGZpbGVzIGNoYW5nZWQsIDcx OCBpbnNlcnRpb25zKCspLCAxNyBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMv dGVzdC9tb2R1bGVzL3Rlc3RfY3VzdG9tX3dhaXRfZXZlbnRzLy5naXRpZ25vcmUKIGNyZWF0ZSBt b2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY3VzdG9tX3dhaXRfZXZlbnRzL01ha2Vm aWxlCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2N1c3RvbV93YWl0 X2V2ZW50cy9tZXNvbi5idWlsZAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMv dGVzdF9jdXN0b21fd2FpdF9ldmVudHMvdC8wMDFfYmFzaWMucGwKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY3VzdG9tX3dhaXRfZXZlbnRzL3Rlc3RfY3VzdG9tX3dh aXRfZXZlbnRzLS0xLjAuc3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90 ZXN0X2N1c3RvbV93YWl0X2V2ZW50cy90ZXN0X2N1c3RvbV93YWl0X2V2ZW50cy5jCiBjcmVhdGUg bW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2N1c3RvbV93YWl0X2V2ZW50cy90ZXN0 X2N1c3RvbV93YWl0X2V2ZW50cy5jb250cm9sCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL21v bml0b3Jpbmcuc2dtbCBiL2RvYy9zcmMvc2dtbC9tb25pdG9yaW5nLnNnbWwKaW5kZXggNTg4Yjcy MGY1Ny4uM2FlZTVjMjQzZiAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL21vbml0b3Jpbmcuc2dt bAorKysgYi9kb2Mvc3JjL3NnbWwvbW9uaXRvcmluZy5zZ21sCkBAIC0xMTE3LDEyICsxMTE3LDEy IEBAIFNFTEVDVCBwaWQsIHdhaXRfZXZlbnRfdHlwZSwgd2FpdF9ldmVudCBGUk9NIHBnX3N0YXRf YWN0aXZpdHkgV0hFUkUgd2FpdF9ldmVudCBpCiAKICAgIDxub3RlPgogICAgIDxwYXJhPgotICAg ICBFeHRlbnNpb25zIGNhbiBhZGQgPGxpdGVyYWw+TFdMb2NrPC9saXRlcmFsPiB0eXBlcyB0byB0 aGUgbGlzdCBzaG93biBpbgotICAgICA8eHJlZiBsaW5rZW5kPSJ3YWl0LWV2ZW50LWx3bG9jay10 YWJsZSIvPi4gIEluIHNvbWUgY2FzZXMsIHRoZSBuYW1lCisgICAgIEV4dGVuc2lvbnMgY2FuIGFk ZCA8bGl0ZXJhbD5FeHRlbnNpb248L2xpdGVyYWw+IGFuZCA8bGl0ZXJhbD5MV0xvY2s8L2xpdGVy YWw+IHR5cGVzCisgICAgIHRvIHRoZSBsaXN0IHNob3duIGluIDx4cmVmIGxpbmtlbmQ9IndhaXQt ZXZlbnQtZXh0ZW5zaW9uLXRhYmxlIi8+IGFuZAorICAgICA8eHJlZiBsaW5rZW5kPSJ3YWl0LWV2 ZW50LWx3bG9jay10YWJsZSIvPi4gSW4gc29tZSBjYXNlcywgdGhlIG5hbWUKICAgICAgYXNzaWdu ZWQgYnkgYW4gZXh0ZW5zaW9uIHdpbGwgbm90IGJlIGF2YWlsYWJsZSBpbiBhbGwgc2VydmVyIHBy b2Nlc3NlczsKLSAgICAgc28gYW4gPGxpdGVyYWw+TFdMb2NrPC9saXRlcmFsPiB3YWl0IGV2ZW50 IG1pZ2h0IGJlIHJlcG9ydGVkIGFzCi0gICAgIGp1c3QgPHF1b3RlPjxsaXRlcmFsPmV4dGVuc2lv bjwvbGl0ZXJhbD48L3F1b3RlPiByYXRoZXIgdGhhbiB0aGUKLSAgICAgZXh0ZW5zaW9uLWFzc2ln bmVkIG5hbWUuCisgICAgIHNvIGFuIHdhaXQgZXZlbnQgbWlnaHQgYmUgcmVwb3J0ZWQgYXMganVz dCA8cXVvdGU+PGxpdGVyYWw+ZXh0ZW5zaW9uPC9saXRlcmFsPjwvcXVvdGU+CisgICAgIHJhdGhl ciB0aGFuIHRoZSBleHRlbnNpb24tYXNzaWduZWQgbmFtZS4KICAgICA8L3BhcmE+CiAgICA8L25v dGU+CiAgPC9zZWN0Mj4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC94ZnVuYy5zZ21sIGIvZG9j L3NyYy9zZ21sL3hmdW5jLnNnbWwKaW5kZXggOTYyMGVhOWFlMy4uYmMyMTBjZDAzYiAxMDA2NDQK LS0tIGEvZG9jL3NyYy9zZ21sL3hmdW5jLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3hmdW5jLnNn bWwKQEAgLTM0NTMsNiArMzQ1MywyOSBAQCBpZiAoIXB0cikKICAgICA8L3BhcmE+CiAgICA8L3Nl Y3QyPgogCisgICA8c2VjdDIgaWQ9InhmdW5jLWFkZGluLXdhaXQtZXZlbnRzIj4KKyAgICA8dGl0 bGU+Q3VzdG9tIFdhaXQgRXZlbnRzIGZvciBBZGQtaW5zPC90aXRsZT4KKworICAgIDxwYXJhPgor ICAgIEFkZC1pbnMgY2FuIGRlZmluZSBjdXN0b20gd2FpdCBldmVudHMgdGhhdCB0aGUgd2FpdCBl dmVudCB0eXBlIGlzCisgICAgPGxpdGVyYWw+RXh0ZW5zaW9uPC9saXRlcmFsPi4KKyAgICA8L3Bh cmE+CisgICAgPHBhcmE+CisgICAgRmlyc3QsIGFkZC1pbnMgc2hvdWxkIGdldCBuZXcgb25lIG9y IG1vcmUgd2FpdCBldmVudHMgYnkgY2FsbGluZzoKKzxwcm9ncmFtbGlzdGluZz4KKyAgICB1aW50 MzIgV2FpdEV2ZW50RXh0ZW5zaW9uTmV3KHZvaWQpCis8L3Byb2dyYW1saXN0aW5nPgorICAgIE5l eHQsIGVhY2ggaW5kaXZpZHVhbCBwcm9jZXNzIGNhbiB1c2UgdGhlbSB0byBhc3NvY2lhdGUgdGhh dAorICAgIGEgd2FpdCBldmVudCBzdHJpbmcgdG8gdGhlIGFzc29jaWF0ZWQgbmFtZSBieSBjYWxs aW5nOgorPHByb2dyYW1saXN0aW5nPgorICAgIHZvaWQgV2FpdEV2ZW50RXh0ZW5zaW9uUmVnaXN0 ZXJOYW1lKHVpbnQzMiB3YWl0X2V2ZW50X2luZm8sIGNvbnN0IGNoYXIgKndhaXRfZXZlbnRfbmFt ZSk7Cis8L3Byb2dyYW1saXN0aW5nPgorICAgIEFuIGV4YW1wbGUgY2FuIGJlIGZvdW5kIGluCisg ICAgPGZpbGVuYW1lPnNyYy90ZXN0L21vZHVsZXMvdGVzdF9jdXN0b21fd2FpdF9ldmVudHMvdGVz dF9jdXN0b21fd2FpdF9ldmVudHMuYzwvZmlsZW5hbWU+CisgICAgaW4gdGhlIFBvc3RncmVTUUwg c291cmNlIHRyZWUuCisgICAgPC9wYXJhPgorICAgPC9zZWN0Mj4KKwogICAgPHNlY3QyIGlkPSJl eHRlbmQtY3BwIj4KICAgICA8dGl0bGU+VXNpbmcgQysrIGZvciBFeHRlbnNpYmlsaXR5PC90aXRs ZT4KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jIGIvc3JjL2Jh Y2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jCmluZGV4IGNjMzg3YzAwYTEuLjU1NTFhZmZmYzAgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYworKysgYi9zcmMvYmFja2Vu ZC9zdG9yYWdlL2lwYy9pcGNpLmMKQEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlICJzdG9yYWdl L3NwaW4uaCIKICNpbmNsdWRlICJ1dGlscy9ndWMuaCIKICNpbmNsdWRlICJ1dGlscy9zbmFwbWdy LmgiCisjaW5jbHVkZSAidXRpbHMvd2FpdF9ldmVudC5oIgogCiAvKiBHVUNzICovCiBpbnQJCQlz aGFyZWRfbWVtb3J5X3R5cGUgPSBERUZBVUxUX1NIQVJFRF9NRU1PUllfVFlQRTsKQEAgLTE0Miw2 ICsxNDMsNyBAQCBDYWxjdWxhdGVTaG1lbVNpemUoaW50ICpudW1fc2VtYXBob3JlcykKIAlzaXpl ID0gYWRkX3NpemUoc2l6ZSwgU3luY1NjYW5TaG1lbVNpemUoKSk7CiAJc2l6ZSA9IGFkZF9zaXpl KHNpemUsIEFzeW5jU2htZW1TaXplKCkpOwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBTdGF0c1No bWVtU2l6ZSgpKTsKKwlzaXplID0gYWRkX3NpemUoc2l6ZSwgV2FpdEV2ZW50RXh0ZW5zaW9uU2ht ZW1TaXplKCkpOwogI2lmZGVmIEVYRUNfQkFDS0VORAogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBT aG1lbUJhY2tlbmRBcnJheVNpemUoKSk7CiAjZW5kaWYKQEAgLTMwMSw2ICszMDMsNyBAQCBDcmVh dGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVzKHZvaWQpCiAJU3luY1NjYW5TaG1lbUluaXQoKTsK IAlBc3luY1NobWVtSW5pdCgpOwogCVN0YXRzU2htZW1Jbml0KCk7CisJV2FpdEV2ZW50RXh0ZW5z aW9uU2htZW1Jbml0KCk7CiAKICNpZmRlZiBFWEVDX0JBQ0tFTkQKIApkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvZ2VuZXJhdGUtd2FpdF9ldmVudF90eXBlcy5wbCBiL3Ny Yy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L2dlbmVyYXRlLXdhaXRfZXZlbnRfdHlwZXMucGwKaW5k ZXggZjYzYzk5MTA1MS4uNTYzMzVlODczMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMv YWN0aXZpdHkvZ2VuZXJhdGUtd2FpdF9ldmVudF90eXBlcy5wbAorKysgYi9zcmMvYmFja2VuZC91 dGlscy9hY3Rpdml0eS9nZW5lcmF0ZS13YWl0X2V2ZW50X3R5cGVzLnBsCkBAIC0xMzMsMTAgKzEz MywxMSBAQCBpZiAoJGdlbl9jb2RlKQogCWZvcmVhY2ggbXkgJHdhaXRjbGFzcyAoc29ydCB7IHVj KCRhKSBjbXAgdWMoJGIpIH0ga2V5cyAlaGFzaHdlKQogCXsKIAotCQkjIERvbid0IGdlbmVyYXRl IC5jIGFuZCAuaCBmaWxlcyBmb3IgTFdMb2NrIGFuZCBMb2NrLCB0aGVzZSBhcmUKLQkJIyBoYW5k bGVkIGluZGVwZW5kZW50bHkuCisJCSMgRG9uJ3QgZ2VuZXJhdGUgLmMgYW5kIC5oIGZpbGVzIGZv ciBFeHRlbnNpb24sIExXTG9jayBhbmQKKwkJIyBMb2NrLCB0aGVzZSBhcmUgaGFuZGxlZCBpbmRl cGVuZGVudGx5LgogCQluZXh0Ci0JCSAgaWYgKCAkd2FpdGNsYXNzIGVxICdXYWl0RXZlbnRMV0xv Y2snCisJCSAgaWYgKCAkd2FpdGNsYXNzIGVxICdXYWl0RXZlbnRFeHRlbnNpb24nCisJCQl8fCAk d2FpdGNsYXNzIGVxICdXYWl0RXZlbnRMV0xvY2snCiAJCQl8fCAkd2FpdGNsYXNzIGVxICdXYWl0 RXZlbnRMb2NrJyk7CiAKIAkJbXkgJGxhc3QgPSAkd2FpdGNsYXNzOwpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudC5jIGIvc3JjL2JhY2tlbmQvdXRpbHMv YWN0aXZpdHkvd2FpdF9ldmVudC5jCmluZGV4IDRhYWQxMWMxMTEuLjAzYWNjMTA0MDcgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnQuYworKysgYi9zcmMv YmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50LmMKQEAgLTIyLDE1ICsyMiwxOCBAQAog ICovCiAjaW5jbHVkZSAicG9zdGdyZXMuaCIKIAorI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2lu Y2x1ZGUgInBvcnQvcGdfYml0dXRpbHMuaCIKICNpbmNsdWRlICJzdG9yYWdlL2xtZ3IuaCIJCS8q IGZvciBHZXRMb2NrTmFtZUZyb21UYWdUeXBlICovCiAjaW5jbHVkZSAic3RvcmFnZS9sd2xvY2su aCIJCS8qIGZvciBHZXRMV0xvY2tJZGVudGlmaWVyICovCisjaW5jbHVkZSAic3RvcmFnZS9zcGlu LmgiCisjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKICNpbmNsdWRlICJ1dGlscy93YWl0X2V2 ZW50LmgiCiAKIAogc3RhdGljIGNvbnN0IGNoYXIgKnBnc3RhdF9nZXRfd2FpdF9hY3Rpdml0eShX YWl0RXZlbnRBY3Rpdml0eSB3KTsKIHN0YXRpYyBjb25zdCBjaGFyICpwZ3N0YXRfZ2V0X3dhaXRf YnVmZmVycGluKFdhaXRFdmVudEJ1ZmZlclBpbiB3KTsKIHN0YXRpYyBjb25zdCBjaGFyICpwZ3N0 YXRfZ2V0X3dhaXRfY2xpZW50KFdhaXRFdmVudENsaWVudCB3KTsKLXN0YXRpYyBjb25zdCBjaGFy ICpwZ3N0YXRfZ2V0X3dhaXRfZXh0ZW5zaW9uKFdhaXRFdmVudEV4dGVuc2lvbiB3KTsKIHN0YXRp YyBjb25zdCBjaGFyICpwZ3N0YXRfZ2V0X3dhaXRfaXBjKFdhaXRFdmVudElQQyB3KTsKIHN0YXRp YyBjb25zdCBjaGFyICpwZ3N0YXRfZ2V0X3dhaXRfdGltZW91dChXYWl0RXZlbnRUaW1lb3V0IHcp Owogc3RhdGljIGNvbnN0IGNoYXIgKnBnc3RhdF9nZXRfd2FpdF9pbyhXYWl0RXZlbnRJTyB3KTsK QEAgLTQwLDYgKzQzLDE2MiBAQCBzdGF0aWMgdWludDMyIGxvY2FsX215X3dhaXRfZXZlbnRfaW5m bzsKIHVpbnQzMgkgICAqbXlfd2FpdF9ldmVudF9pbmZvID0gJmxvY2FsX215X3dhaXRfZXZlbnRf aW5mbzsKIAogCisKKy8qIGR5bmFtaWMgYWxsb2NhdGlvbiBjb3VudGVyIGZvciBjdXN0b20gd2Fp dCBldmVudHMgZm9yIGV4dGVuc2lvbnMgKi8KK3R5cGVkZWYgc3RydWN0IFdhaXRFdmVudEV4dGVu c2lvbkNvdW50ZXIKK3sKKwlpbnQgbmV4dElkOwkJLyogbmV4dCBJRCB0byBhc3NpZ24gKi8KKwlz bG9ja190CW11dGV4OyAgLyogcHJvdGVjdHMgdGhlIGNvdW50ZXIgb25seSAqLworfSBXYWl0RXZl bnRFeHRlbnNpb25Db3VudGVyOworCisvKiBwb2ludGVyIHRvIHRoZSBzaGFyZWQgbWVtb3J5ICov CitzdGF0aWMgV2FpdEV2ZW50RXh0ZW5zaW9uQ291bnRlciAqd2FpdEV2ZW50RXh0ZW5zaW9uQ291 bnRlcjsKKworLyogZmlyc3QgZXZlbnQgSUQgb2YgY3VzdG9tIHdhaXQgZXZlbnRzIGZvciBleHRl bnNpb25zICovCisjZGVmaW5lIE5VTV9CVUlMVElOX1dBSVRfRVZFTlRfRVhURU5TSU9OCVwKKwko V0FJVF9FVkVOVF9FWFRFTlNJT05fRklSU1RfVVNFUl9ERUZJTkVEIC0gV0FJVF9FVkVOVF9FWFRF TlNJT04pCisKKy8qCisgKiBUaGlzIGlzIGluZGV4ZWQgYnkgZXZlbnQgSUQgbWludXMgTlVNX0JV SUxUSU5fV0FJVF9FVkVOVF9FWFRFTlNJT04sIGFuZAorICogc3RvcmVzIHRoZSBuYW1lcyBvZiBh bGwgZHluYW1pY2FsbHktY3JlYXRlZCBldmVudCBJRHMga25vd24gdG8gdGhlIGN1cnJlbnQKKyAq IHByb2Nlc3MuICBBbnkgdW51c2VkIGVudHJpZXMgaW4gdGhlIGFycmF5IHdpbGwgY29udGFpbiBO VUxMLgorICovCitzdGF0aWMgY29uc3QgY2hhciAqKldhaXRFdmVudEV4dGVuc2lvbk5hbWVzID0g TlVMTDsKK3N0YXRpYyBpbnQJV2FpdEV2ZW50RXh0ZW5zaW9uTmFtZXNBbGxvY2F0ZWQgPSAwOwor CitzdGF0aWMgY29uc3QgY2hhciAqR2V0V2FpdEV2ZW50RXh0ZW5zaW9uSWRlbnRpZmllcih1aW50 MTYgZXZlbnRJZCk7CisKKy8qCisgKiAgUmV0dXJuIHRoZSBzcGFjZSBmb3IgZHluYW1pYyBhbGxv Y2F0aW9uIGNvdW50ZXIuCisgKi8KK1NpemUKK1dhaXRFdmVudEV4dGVuc2lvblNobWVtU2l6ZSh2 b2lkKQoreworCXJldHVybiBzaXplb2YoV2FpdEV2ZW50RXh0ZW5zaW9uQ291bnRlcik7Cit9CisK Ky8qCisgKiBBbGxvY2F0ZSBzaG1lbSBzcGFjZSBmb3IgZHluYW1pYyBhbGxvY2F0aW9uIGNvdW50 ZXIuCisgKi8KK3ZvaWQKK1dhaXRFdmVudEV4dGVuc2lvblNobWVtSW5pdCh2b2lkKQoreworCWJv b2wJZm91bmQ7CisKKwlpZiAoIUlzVW5kZXJQb3N0bWFzdGVyKQorCXsKKwkJLyogQWxsb2NhdGUg c3BhY2UgaW4gc2hhcmVkIG1lbW9yeS4gKi8KKwkJd2FpdEV2ZW50RXh0ZW5zaW9uQ291bnRlciA9 IChXYWl0RXZlbnRFeHRlbnNpb25Db3VudGVyICopCisJCQlTaG1lbUluaXRTdHJ1Y3QoIndhaXRF dmVudEV4dGVuc2lvbkNvdW50ZXIiLCBXYWl0RXZlbnRFeHRlbnNpb25TaG1lbVNpemUoKSwgJmZv dW5kKTsKKwkJaWYgKGZvdW5kKQorCQkJcmV0dXJuOworCisJCS8qIEluaXRpYWxpemUgdGhlIGR5 bmFtaWMtYWxsb2NhdGlvbiBjb3VudGVyIGFuZCB0aGUgc3BpbmxvY2suICovCisJCXdhaXRFdmVu dEV4dGVuc2lvbkNvdW50ZXItPm5leHRJZCA9IE5VTV9CVUlMVElOX1dBSVRfRVZFTlRfRVhURU5T SU9OOworCQlTcGluTG9ja0luaXQoJndhaXRFdmVudEV4dGVuc2lvbkNvdW50ZXItPm11dGV4KTsK Kwl9Cit9CisKKy8qCisgKiBBbGxvY2F0ZSBhIG5ldyBldmVudCBJRCBhbmQgcmV0dXJuIHRoZSB3 YWl0IGV2ZW50LgorICovCit1aW50MzIKK1dhaXRFdmVudEV4dGVuc2lvbk5ldyh2b2lkKQorewor CXVpbnQxNgkJZXZlbnRJZDsKKworCVNwaW5Mb2NrQWNxdWlyZSgmd2FpdEV2ZW50RXh0ZW5zaW9u Q291bnRlci0+bXV0ZXgpOworCisJLyogQ2hlY2sgZm9yIHRoZSBjb3VudGVyIG92ZXJmbG93LiAq LworCWlmICh3YWl0RXZlbnRFeHRlbnNpb25Db3VudGVyLT5uZXh0SWQgPiBQR19VSU5UMTZfTUFY KQorCXsKKwkJU3BpbkxvY2tSZWxlYXNlKCZ3YWl0RXZlbnRFeHRlbnNpb25Db3VudGVyLT5tdXRl eCk7CisJCWVyZXBvcnQoRVJST1IsCisJCQkJZXJyY29kZShFUlJDT0RFX1BST0dSQU1fTElNSVRf RVhDRUVERUQpLAorCQkJCWVycm1zZygidG9vIG1hbnkgd2FpdCBldmVudHMgZm9yIGV4dGVuc2lv bnMiKSk7CisJfQorCisJZXZlbnRJZCA9IHdhaXRFdmVudEV4dGVuc2lvbkNvdW50ZXItPm5leHRJ ZCsrOworCisJU3BpbkxvY2tSZWxlYXNlKCZ3YWl0RXZlbnRFeHRlbnNpb25Db3VudGVyLT5tdXRl eCk7CisKKwlyZXR1cm4gUEdfV0FJVF9FWFRFTlNJT04gfCBldmVudElkOworfQorCisvKgorICog UmVnaXN0ZXIgYSBkeW5hbWljIHdhaXQgZXZlbnQgbmFtZSBmb3IgZXh0ZW5zaW9uIGluIHRoZSBs b29rdXAgdGFibGUKKyAqIG9mIHRoZSBjdXJyZW50IHByb2Nlc3MuCisgKgorICogVGhpcyByb3V0 aW5lIHdpbGwgc2F2ZSBhIHBvaW50ZXIgdG8gdGhlIHdhaXQgZXZlbnQgbmFtZSBwYXNzZWQgYXMg YW4gYXJndW1lbnQsCisgKiBzbyB0aGUgbmFtZSBzaG91bGQgYmUgYWxsb2NhdGVkIGluIGEgYmFj a2VuZC1saWZldGltZSBjb250ZXh0CisgKiAoc2hhcmVkIG1lbW9yeSwgVG9wTWVtb3J5Q29udGV4 dCwgc3RhdGljIGNvbnN0YW50LCBvciBzaW1pbGFyKS4KKyAqCisgKiBUaGUgIndhaXRfZXZlbnRf bmFtZSIgd2lsbCBiZSB1c2VyLXZpc2libGUgYXMgYSB3YWl0IGV2ZW50IG5hbWUsIHNvIHRyeSB0 bworICogdXNlIGEgbmFtZSB0aGF0IGZpdHMgdGhlIHN0eWxlIGZvciB0aG9zZS4KKyAqLwordm9p ZAorV2FpdEV2ZW50RXh0ZW5zaW9uUmVnaXN0ZXJOYW1lKHVpbnQzMiB3YWl0X2V2ZW50X2luZm8s CisJCQkJCQkJCWNvbnN0IGNoYXIgKndhaXRfZXZlbnRfbmFtZSkKK3sKKwl1aW50MTYJCWV2ZW50 SWQ7CisKKwlldmVudElkID0gd2FpdF9ldmVudF9pbmZvICYgMHgwMDAwRkZGRjsKKworCS8qIENo ZWNrIHRoZSB3YWl0IGV2ZW50IGNsYXNzLiAqLworCUFzc2VydCgod2FpdF9ldmVudF9pbmZvICYg MHhGRjAwMDAwMCkgPT0gUEdfV0FJVF9FWFRFTlNJT04pOworCisJLyogVGhpcyBzaG91bGQgb25s eSBiZSBjYWxsZWQgZm9yIHVzZXItZGVmaW5lZCB3YWl0IGV2ZW50LiAqLworCUFzc2VydChldmVu dElkID49IE5VTV9CVUlMVElOX1dBSVRfRVZFTlRfRVhURU5TSU9OKTsKKworCS8qIENvbnZlcnQg dG8gYXJyYXkgaW5kZXguICovCisJZXZlbnRJZCAtPSBOVU1fQlVJTFRJTl9XQUlUX0VWRU5UX0VY VEVOU0lPTjsKKworCS8qIElmIG5lY2Vzc2FyeSwgY3JlYXRlIG9yIGVubGFyZ2UgYXJyYXkuICov CisJaWYgKGV2ZW50SWQgPj0gV2FpdEV2ZW50RXh0ZW5zaW9uTmFtZXNBbGxvY2F0ZWQpCisJewor CQlpbnQJCQluZXdhbGxvYzsKKworCQluZXdhbGxvYyA9IHBnX25leHRwb3dlcjJfMzIoTWF4KDgs IGV2ZW50SWQgKyAxKSk7CisKKwkJaWYgKFdhaXRFdmVudEV4dGVuc2lvbk5hbWVzID09IE5VTEwp CisJCQlXYWl0RXZlbnRFeHRlbnNpb25OYW1lcyA9IChjb25zdCBjaGFyICoqKQorCQkJCU1lbW9y eUNvbnRleHRBbGxvY1plcm8oVG9wTWVtb3J5Q29udGV4dCwKKwkJCQkJCQkJCSAgIG5ld2FsbG9j ICogc2l6ZW9mKGNoYXIgKikpOworCQllbHNlCisJCQlXYWl0RXZlbnRFeHRlbnNpb25OYW1lcyA9 CisJCQkJcmVwYWxsb2MwX2FycmF5KFdhaXRFdmVudEV4dGVuc2lvbk5hbWVzLCBjb25zdCBjaGFy ICosIFdhaXRFdmVudEV4dGVuc2lvbk5hbWVzQWxsb2NhdGVkLCBuZXdhbGxvYyk7CisJCVdhaXRF dmVudEV4dGVuc2lvbk5hbWVzQWxsb2NhdGVkID0gbmV3YWxsb2M7CisJfQorCisJV2FpdEV2ZW50 RXh0ZW5zaW9uTmFtZXNbZXZlbnRJZF0gPSB3YWl0X2V2ZW50X25hbWU7Cit9CisKKy8qCisgKiBS ZXR1cm4gdGhlIG5hbWUgb2YgYW4gd2FpdCBldmVudCBJRCBmb3IgZXh0ZW5zaW9uLgorICovCitz dGF0aWMgY29uc3QgY2hhciAqCitHZXRXYWl0RXZlbnRFeHRlbnNpb25JZGVudGlmaWVyKHVpbnQx NiBldmVudElkKQoreworCS8qIEJ1aWx0LWluIGV2ZW50PyAqLworCWlmIChldmVudElkIDwgTlVN X0JVSUxUSU5fV0FJVF9FVkVOVF9FWFRFTlNJT04pCisJCXJldHVybiAiRXh0ZW5zaW9uIjsKKwor CS8qCisJICogSXQncyBhbiB1c2VyLWRlZmluZWQgd2FpdCBldmVudCwgc28gbG9vayBpbiBXYWl0 RXZlbnRFeHRlbnNpb25OYW1lc1tdLgorCSAqIEhvd2V2ZXIsIGl0J3MgcG9zc2libGUgdGhhdCB0 aGUgbmFtZSBoYXMgbmV2ZXIgYmVlbiByZWdpc3RlcmVkIGJ5CisJICogY2FsbGluZyBXYWl0RXZl bnRFeHRlbnNpb25SZWdpc3Rlck5hbWUoKSBpbiB0aGUgY3VycmVudCBwcm9jZXNzLCBpbgorCSAq IHdoaWNoIGNhc2UgZ2l2ZSB1cCBhbmQgcmV0dXJuICJleHRlbnNpb24iLgorCSAqLworCWV2ZW50 SWQgLT0gTlVNX0JVSUxUSU5fV0FJVF9FVkVOVF9FWFRFTlNJT047CisKKwlpZiAoZXZlbnRJZCA+ PSBXYWl0RXZlbnRFeHRlbnNpb25OYW1lc0FsbG9jYXRlZCB8fAorCQlXYWl0RXZlbnRFeHRlbnNp b25OYW1lc1tldmVudElkXSA9PSBOVUxMKQorCQlyZXR1cm4gImV4dGVuc2lvbiI7CisKKwlyZXR1 cm4gV2FpdEV2ZW50RXh0ZW5zaW9uTmFtZXNbZXZlbnRJZF07Cit9CisKKwogLyoKICAqIENvbmZp Z3VyZSB3YWl0IGV2ZW50IHJlcG9ydGluZyB0byByZXBvcnQgd2FpdCBldmVudHMgdG8gKndhaXRf ZXZlbnRfaW5mby4KICAqICp3YWl0X2V2ZW50X2luZm8gbmVlZHMgdG8gYmUgdmFsaWQgdW50aWwg cGdzdGF0X3Jlc2V0X3dhaXRfZXZlbnRfc3RvcmFnZSgpCkBAIC0xNDksNiArMzA4LDkgQEAgcGdz dGF0X2dldF93YWl0X2V2ZW50KHVpbnQzMiB3YWl0X2V2ZW50X2luZm8pCiAJCWNhc2UgUEdfV0FJ VF9MT0NLOgogCQkJZXZlbnRfbmFtZSA9IEdldExvY2tOYW1lRnJvbVRhZ1R5cGUoZXZlbnRJZCk7 CiAJCQlicmVhazsKKwkJY2FzZSBQR19XQUlUX0VYVEVOU0lPTjoKKwkJCWV2ZW50X25hbWUgPSBH ZXRXYWl0RXZlbnRFeHRlbnNpb25JZGVudGlmaWVyKGV2ZW50SWQpOworCQkJYnJlYWs7CiAJCWNh c2UgUEdfV0FJVF9CVUZGRVJQSU46CiAJCQl7CiAJCQkJV2FpdEV2ZW50QnVmZmVyUGluIHcgPSAo V2FpdEV2ZW50QnVmZmVyUGluKSB3YWl0X2V2ZW50X2luZm87CkBAIC0xNzAsMTMgKzMzMiw2IEBA IHBnc3RhdF9nZXRfd2FpdF9ldmVudCh1aW50MzIgd2FpdF9ldmVudF9pbmZvKQogCQkJCWV2ZW50 X25hbWUgPSBwZ3N0YXRfZ2V0X3dhaXRfY2xpZW50KHcpOwogCQkJCWJyZWFrOwogCQkJfQotCQlj YXNlIFBHX1dBSVRfRVhURU5TSU9OOgotCQkJewotCQkJCVdhaXRFdmVudEV4dGVuc2lvbiB3ID0g KFdhaXRFdmVudEV4dGVuc2lvbikgd2FpdF9ldmVudF9pbmZvOwotCi0JCQkJZXZlbnRfbmFtZSA9 IHBnc3RhdF9nZXRfd2FpdF9leHRlbnNpb24odyk7Ci0JCQkJYnJlYWs7Ci0JCQl9CiAJCWNhc2Ug UEdfV0FJVF9JUEM6CiAJCQl7CiAJCQkJV2FpdEV2ZW50SVBDIHcgPSAoV2FpdEV2ZW50SVBDKSB3 YWl0X2V2ZW50X2luZm87CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93 YWl0X2V2ZW50X25hbWVzLnR4dCBiL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZl bnRfbmFtZXMudHh0CmluZGV4IDNmYWJhZDk2ZDkuLjJlYTQ3ODliMDAgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnRfbmFtZXMudHh0CisrKyBiL3NyYy9i YWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnRfbmFtZXMudHh0CkBAIC0yNjEsNyArMjYx LDcgQEAgV0FJVF9FVkVOVF9CVUZGRVJfUElOCUJ1ZmZlclBpbgkiV2FpdGluZyB0byBhY3F1aXJl IGFuIGV4Y2x1c2l2ZSBwaW4gb24gYSBidWZmZXIKIAogU2VjdGlvbjogQ2xhc3NOYW1lIC0gV2Fp dEV2ZW50RXh0ZW5zaW9uCiAKLVdBSVRfRVZFTlRfRVhURU5TSU9OCUV4dGVuc2lvbgkiV2FpdGlu ZyBpbiBhbiBleHRlbnNpb24uIgorV0FJVF9FVkVOVF9ET0NPTkxZCUV4dGVuc2lvbgkiV2FpdGlu ZyBpbiBhbiBleHRlbnNpb24uIgogCiAjCiAjIFdhaXQgZXZlbnRzIC0gTFdMb2NrCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS91dGlscy93YWl0X2V2ZW50LmggYi9zcmMvaW5jbHVkZS91dGlscy93 YWl0X2V2ZW50LmgKaW5kZXggNDUxNzQyNWY4NC4uYWUzZGFjODhhNCAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvdXRpbHMvd2FpdF9ldmVudC5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL3dhaXRf ZXZlbnQuaApAQCAtNjcsNiArNjcsMzEgQEAgcGdzdGF0X3JlcG9ydF93YWl0X3N0YXJ0KHVpbnQz MiB3YWl0X2V2ZW50X2luZm8pCiAJKih2b2xhdGlsZSB1aW50MzIgKikgbXlfd2FpdF9ldmVudF9p bmZvID0gd2FpdF9ldmVudF9pbmZvOwogfQogCisvKiAtLS0tLS0tLS0tCisgKiBXYWl0IEV2ZW50 cyAtIEV4dGVuc2lvbgorICoKKyAqIFVzZSB0aGlzIGNhdGVnb3J5IHdoZW4gdGhlIHNlcnZlciBw cm9jZXNzIGlzIHdhaXRpbmcgZm9yIHNvbWUgY29uZGl0aW9uCisgKiBkZWZpbmVkIGJ5IGFuIGV4 dGVuc2lvbiBtb2R1bGUuCisgKgorICogRXh0ZW5zaW9ucyBjYW4gZGVmaW5lIHRoZWlyIHdhaXQg ZXZlbnRzLiBGaXJzdCwgZXh0ZW5zaW9ucyBzaG91bGQgY2FsbAorICogV2FpdEV2ZW50RXh0ZW5z aW9uTmV3KCkgdG8gZ2V0IG9uZSBvciBtb3JlIHdhaXQgZXZlbnRzLCB3aGljaCBJRHMgYXJlCisg KiBhbGxvY2F0ZWQgZnJvbSBhIHNoYXJlZCBjb3VudGVyLiAgTmV4dCwgZWFjaCBpbmRpdmlkdWFs IHByb2Nlc3MgY2FuIHVzZQorICogdGhlbSB3aXRoIFdhaXRFdmVudEV4dGVuc2lvblJlZ2lzdGVy TmFtZSgpIHRvIGFzc29jaWF0ZSB0aGF0IGEgd2FpdAorICogZXZlbnQgc3RyaW5nIHRvIHRoZSBh c3NvY2lhdGVkIG5hbWUuCisgKi8KK3R5cGVkZWYgZW51bQoreworCVdBSVRfRVZFTlRfRVhURU5T SU9OID0gUEdfV0FJVF9FWFRFTlNJT04sCisJV0FJVF9FVkVOVF9FWFRFTlNJT05fRklSU1RfVVNF Ul9ERUZJTkVECit9IFdhaXRFdmVudEV4dGVuc2lvbjsKKworZXh0ZXJuIHZvaWQgV2FpdEV2ZW50 RXh0ZW5zaW9uU2htZW1Jbml0KHZvaWQpOworZXh0ZXJuIFNpemUgV2FpdEV2ZW50RXh0ZW5zaW9u U2htZW1TaXplKHZvaWQpOworCitleHRlcm4gdWludDMyIFdhaXRFdmVudEV4dGVuc2lvbk5ldyh2 b2lkKTsKK2V4dGVybiB2b2lkIFdhaXRFdmVudEV4dGVuc2lvblJlZ2lzdGVyTmFtZSh1aW50MzIg d2FpdF9ldmVudF9pbmZvLAorCQkJCQkJCQljb25zdCBjaGFyICp3YWl0X2V2ZW50X25hbWUpOwor CiAvKiAtLS0tLS0tLS0tCiAgKiBwZ3N0YXRfcmVwb3J0X3dhaXRfZW5kKCkgLQogICoKZGlmZiAt LWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvTWFrZWZpbGUgYi9zcmMvdGVzdC9tb2R1bGVzL01ha2Vm aWxlCmluZGV4IDYzMzFjOTc2ZGMuLjg0MzEyYjdlNTcgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21v ZHVsZXMvTWFrZWZpbGUKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9NYWtlZmlsZQpAQCAtMTcsNiAr MTcsNyBAQCBTVUJESVJTID0gXAogCQkgIHRlc3RfYmxvb21maWx0ZXIgXAogCQkgIHRlc3RfY29w eV9jYWxsYmFja3MgXAogCQkgIHRlc3RfY3VzdG9tX3JtZ3JzIFwKKwkJICB0ZXN0X2N1c3RvbV93 YWl0X2V2ZW50cyBcCiAJCSAgdGVzdF9kZGxfZGVwYXJzZSBcCiAJCSAgdGVzdF9leHRlbnNpb25z IFwKIAkJICB0ZXN0X2dpbnBvc3RpbmdsaXN0IFwKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVs ZXMvbWVzb24uYnVpbGQgYi9zcmMvdGVzdC9tb2R1bGVzL21lc29uLmJ1aWxkCmluZGV4IDE3ZDM2 OWUzNzguLjgzYTFkOGZkMTkgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvbWVzb24uYnVp bGQKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5idWlsZApAQCAtMTQsNiArMTQsNyBAQCBz dWJkaXIoJ3NzbF9wYXNzcGhyYXNlX2NhbGxiYWNrJykKIHN1YmRpcigndGVzdF9ibG9vbWZpbHRl cicpCiBzdWJkaXIoJ3Rlc3RfY29weV9jYWxsYmFja3MnKQogc3ViZGlyKCd0ZXN0X2N1c3RvbV9y bWdycycpCitzdWJkaXIoJ3Rlc3RfY3VzdG9tX3dhaXRfZXZlbnRzJykKIHN1YmRpcigndGVzdF9k ZGxfZGVwYXJzZScpCiBzdWJkaXIoJ3Rlc3RfZXh0ZW5zaW9ucycpCiBzdWJkaXIoJ3Rlc3RfZ2lu cG9zdGluZ2xpc3QnKQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2N1c3RvbV93 YWl0X2V2ZW50cy8uZ2l0aWdub3JlIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2N1c3RvbV93YWl0 X2V2ZW50cy8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAu LjVkY2IzZmY5NzIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY3Vz dG9tX3dhaXRfZXZlbnRzLy5naXRpZ25vcmUKQEAgLTAsMCArMSw0IEBACisjIEdlbmVyYXRlZCBz dWJkaXJlY3RvcmllcworL2xvZy8KKy9yZXN1bHRzLworL3RtcF9jaGVjay8KZGlmZiAtLWdpdCBh L3NyYy90ZXN0L21vZHVsZXMvdGVzdF9jdXN0b21fd2FpdF9ldmVudHMvTWFrZWZpbGUgYi9zcmMv dGVzdC9tb2R1bGVzL3Rlc3RfY3VzdG9tX3dhaXRfZXZlbnRzL01ha2VmaWxlCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmRkYTM2NWQ1MjMKLS0tIC9kZXYvbnVsbAorKysg Yi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY3VzdG9tX3dhaXRfZXZlbnRzL01ha2VmaWxlCkBAIC0w LDAgKzEsMjMgQEAKKyMgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2N1c3RvbV93YWl0X2V2ZW50cy9N YWtlZmlsZQorCitNT0RVTEVfYmlnID0gdGVzdF9jdXN0b21fd2FpdF9ldmVudHMKK09CSlMgPSBc CisJJChXSU4zMlJFUykgXAorCXRlc3RfY3VzdG9tX3dhaXRfZXZlbnRzLm8KK1BHRklMRURFU0Mg PSAidGVzdF9jdXN0b21fd2FpdF9ldmVudHMgLSB0ZXN0IGN1c3RvbSB3YWl0IGV2ZW50cyIKKwor RVhURU5TSU9OID0gdGVzdF9jdXN0b21fd2FpdF9ldmVudHMKK0RBVEEgPSB0ZXN0X2N1c3RvbV93 YWl0X2V2ZW50cy0tMS4wLnNxbAorCitUQVBfVEVTVFMgPSAxCisKK2lmZGVmIFVTRV9QR1hTCitQ R19DT05GSUcgPSBwZ19jb25maWcKK1BHWFMgOj0gJChzaGVsbCAkKFBHX0NPTkZJRykgLS1wZ3hz KQoraW5jbHVkZSAkKFBHWFMpCitlbHNlCitzdWJkaXIgPSBzcmMvdGVzdC9tb2R1bGVzL3Rlc3Rf Y3VzdG9tX3dhaXRfZXZlbnRzCit0b3BfYnVpbGRkaXIgPSAuLi8uLi8uLi8uLgoraW5jbHVkZSAk KHRvcF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2JhbAoraW5jbHVkZSAkKHRvcF9zcmNkaXIp L2NvbnRyaWIvY29udHJpYi1nbG9iYWwubWsKK2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9t b2R1bGVzL3Rlc3RfY3VzdG9tX3dhaXRfZXZlbnRzL21lc29uLmJ1aWxkIGIvc3JjL3Rlc3QvbW9k dWxlcy90ZXN0X2N1c3RvbV93YWl0X2V2ZW50cy9tZXNvbi5idWlsZApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwLi44YWQwNzNlNTc3Ci0tLSAvZGV2L251bGwKKysrIGIvc3Jj L3Rlc3QvbW9kdWxlcy90ZXN0X2N1c3RvbV93YWl0X2V2ZW50cy9tZXNvbi5idWlsZApAQCAtMCww ICsxLDMzIEBACisjIENvcHlyaWdodCAoYykgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQg R3JvdXAKKwordGVzdF9jdXN0b21fd2FpdF9ldmVudHMgPSBmaWxlcygKKyAgJ3Rlc3RfY3VzdG9t X3dhaXRfZXZlbnRzLmMnLAorKQorCitpZiBob3N0X3N5c3RlbSA9PSAnd2luZG93cycKKyAgdGVz dF9jdXN0b21fd2FpdF9ldmVudHMgKz0gcmNfbGliX2dlbi5wcm9jZXNzKHdpbjMydmVyX3JjLCBl eHRyYV9hcmdzOiBbCisgICAgJy0tTkFNRScsICd0ZXN0X2N1c3RvbV93YWl0X2V2ZW50cycsCisg ICAgJy0tRklMRURFU0MnLCAndGVzdF9jdXN0b21fd2FpdF9ldmVudHMgLSB0ZXN0IGN1c3RvbSB3 YWl0IGV2ZW50cycsXSkKK2VuZGlmCisKK3Rlc3RfY3VzdG9tX3dhaXRfZXZlbnRzID0gc2hhcmVk X21vZHVsZSgndGVzdF9jdXN0b21fd2FpdF9ldmVudHMnLAorICB0ZXN0X2N1c3RvbV93YWl0X2V2 ZW50cywKKyAga3dhcmdzOiBwZ190ZXN0X21vZF9hcmdzLAorKQordGVzdF9pbnN0YWxsX2xpYnMg Kz0gdGVzdF9jdXN0b21fd2FpdF9ldmVudHMKKwordGVzdF9pbnN0YWxsX2RhdGEgKz0gZmlsZXMo CisgICd0ZXN0X2N1c3RvbV93YWl0X2V2ZW50cy5jb250cm9sJywKKyAgJ3Rlc3RfY3VzdG9tX3dh aXRfZXZlbnRzLS0xLjAuc3FsJywKKykKKwordGVzdHMgKz0geworICAnbmFtZSc6ICd0ZXN0X2N1 c3RvbV93YWl0X2V2ZW50cycsCisgICdzZCc6IG1lc29uLmN1cnJlbnRfc291cmNlX2RpcigpLAor ICAnYmQnOiBtZXNvbi5jdXJyZW50X2J1aWxkX2RpcigpLAorICAndGFwJzogeworICAgICd0ZXN0 cyc6IFsKKyAgICAgICd0LzAwMV9iYXNpYy5wbCcsCisgICAgXSwKKyAgfSwKK30KZGlmZiAtLWdp dCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9jdXN0b21fd2FpdF9ldmVudHMvdC8wMDFfYmFzaWMu cGwgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY3VzdG9tX3dhaXRfZXZlbnRzL3QvMDAxX2Jhc2lj LnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjY4MTdlYWEyYjAKLS0t IC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY3VzdG9tX3dhaXRfZXZlbnRz L3QvMDAxX2Jhc2ljLnBsCkBAIC0wLDAgKzEsMTM3IEBACisjIENvcHlyaWdodCAoYykgMjAyMywg UG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKwordXNlIHN0cmljdDsKK3VzZSB3 YXJuaW5nczsKKwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7Cit1c2UgUG9zdGdyZVNR TDo6VGVzdDo6VXRpbHM7Cit1c2UgVGVzdDo6TW9yZTsKKworbXkgJG5vZGUgPSBQb3N0Z3JlU1FM OjpUZXN0OjpDbHVzdGVyLT5uZXcoJ21haW4nKTsKKworIyBDaGVjayB0aGF0IGEgbmV3IHdhaXQg ZXZlbnQgY2FuIGJlIGRlZmluZWQgaW4gaW5pdGlhbGl6ZWQgcGhhc2UuCiskbm9kZS0+aW5pdDsK KyRub2RlLT5hcHBlbmRfY29uZigKKwkncG9zdGdyZXNxbC5jb25mJywKKwkic2hhcmVkX3ByZWxv YWRfbGlicmFyaWVzID0gJ3Rlc3RfY3VzdG9tX3dhaXRfZXZlbnRzJyIKKyk7Ciskbm9kZS0+c3Rh cnQ7Ciskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICdDUkVBVEUgRVhURU5TSU9OIHRlc3Rf Y3VzdG9tX3dhaXRfZXZlbnRzOycpOworCiskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICdT RUxFQ1Qgc3RhcnRfYmd3b3JrZXJfd2FpdGluZ19mb3JldmVyKCk7Jyk7CisKK29rKCRub2RlLT5w b2xsX3F1ZXJ5X3VudGlsKCdwb3N0Z3JlcycsCisJcXFbU0VMRUNUCisJCShTRUxFQ1QgY291bnQo KikgRlJPTSBwZ19zdGF0X2FjdGl2aXR5CisJCQlXSEVSRSBiYWNrZW5kX3R5cGUgPSAndGVzdF9j dXN0b21fd2FpdF9ldmVudHMnCisJCQkgIEFORCB3YWl0X2V2ZW50X3R5cGUgPSAnRXh0ZW5zaW9u JworCQkJICBBTkQgd2FpdF9ldmVudCA9ICdjdXN0b21fd2FpdF9ldmVudCcKKwkJKSA9IDE7XSks CisJInJlZ2lzdGVyaW5nIGN1c3RvbSB3YWl0IGV2ZW50IGluIGluaXRpYWxpemVkIHBoYXNlIGRv ZW4ndCB3b3JrIgorKTsKKworJG5vZGUtPnN0b3A7Ciskbm9kZS0+Y2xlYW5fbm9kZTsKKworCisj IENoZWNrIHRoYXQgbXVsdGlwbGUgbmV3IHdhaXQgZXZlbnRzIGNhbiBiZSBkZWZpbmVkIGR5bmFt aWNhbGx5LgorJG5vZGUtPmluaXQ7Ciskbm9kZS0+YXBwZW5kX2NvbmYoCisJJ3Bvc3RncmVzcWwu Y29uZicsCispOworJG5vZGUtPnN0YXJ0OworJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAn Q1JFQVRFIEVYVEVOU0lPTiB0ZXN0X2N1c3RvbV93YWl0X2V2ZW50czsnKTsKKworIyBTdGFydCBu ZXcgYmFja2dyb3VuZCB3b3JrZXJzLiBUaGV5IHdhaXQgd2l0aCBuZXcgd2FpdCBldmVudHMgZGlu YW1pY2FsbHkgZGVmaW5lZC4KK215ICR3YWl0X2V2ZW50X2luZm9fMSA9ICRub2RlLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgJ1NFTEVDVCBnZXRfbmV3X3dhaXRfZXZlbnRfaW5mbygpOycpOworJG5v ZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIHN0YXJ0X2Jnd29ya2VyX3dhaXRpbmdf Zm9yZXZlcigkd2FpdF9ldmVudF9pbmZvXzEpOyIpOworbXkgJHdhaXRfZXZlbnRfaW5mb18yID0g JG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAnU0VMRUNUIGdldF9uZXdfd2FpdF9ldmVudF9p bmZvKCk7Jyk7Ciskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1Qgc3RhcnRfYmd3 b3JrZXJfd2FpdGluZ19mb3JldmVyKCR3YWl0X2V2ZW50X2luZm9fMik7Iik7CisKKyMgU2luY2Ug dGhlIG5ldyB3YWl0IGV2ZW50IG5hbWVzIGFyZSBub3QgcmVnaXN0ZXJlZCBpbiBjdXJyZW50IHBy b2Nlc3Mgbm93LAorIyAnd2FpdF9ldmVudCcgbXVzdCBiZSAnZXh0ZW5zaW9uJyB3aGljaCBtZWFu cyB0aGF0IGl0J3Mgbm90IHJlZ2lzdGVyZWQuCitvaygkbm9kZS0+cG9sbF9xdWVyeV91bnRpbCgK KwkncG9zdGdyZXMnLAorCXFxW1NFTEVDVAorCQkoU0VMRUNUIGNvdW50KCopIEZST00gcGdfc3Rh dF9hY3Rpdml0eQorCQkJV0hFUkUgYmFja2VuZF90eXBlID0gJ3Rlc3RfY3VzdG9tX3dhaXRfZXZl bnRzJworCQkJICBBTkQgd2FpdF9ldmVudF90eXBlID0gJ0V4dGVuc2lvbicKKwkJCSAgQU5EIHdh aXRfZXZlbnQgPSAnZXh0ZW5zaW9uJworCQkpID0gMjtdKSwKKwkidW5yZWdpc3RlcmQgd2FpdCBl dmVudCBuYW1lcyBhcmUgd3JvbmciCispOworCisjIFJlZ2lzdGVyIHdhaXQgZXZlbnQgbmFtZXMg YW5kIGNoZWNrIHRoYXQgdGhleSB3aWxsIGJlIHZpc2libGUuCitteSAkbmV3X3dhaXRfZXZlbnRf bmFtZV8xID0gJ25ld19keW5hbWljX3dhaXRfZXZlbnRfMSc7CitteSAkbmV3X3dhaXRfZXZlbnRf bmFtZV8yID0gJ25ld19keW5hbWljX3dhaXRfZXZlbnRfMic7CitteSAkc2Vzc2lvbiA9ICRub2Rl LT5iYWNrZ3JvdW5kX3BzcWwoJ3Bvc3RncmVzJyk7Ciskc2Vzc2lvbi0+cXVlcnlfc2FmZSgKKwki U0VMRUNUIHJlZ2lzdGVyX3dhaXRfZXZlbnRfbmFtZSgkd2FpdF9ldmVudF9pbmZvXzEsICckbmV3 X3dhaXRfZXZlbnRfbmFtZV8xJyk7Iik7Ciskc2Vzc2lvbi0+cXVlcnlfc2FmZSgKKwkiU0VMRUNU IHJlZ2lzdGVyX3dhaXRfZXZlbnRfbmFtZSgkd2FpdF9ldmVudF9pbmZvXzIsICckbmV3X3dhaXRf ZXZlbnRfbmFtZV8yJyk7Iik7CitteSAkcmVzID0gJHNlc3Npb24tPnF1ZXJ5X3NhZmUoCisJcXFb U0VMRUNUCisJCShTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19zdGF0X2FjdGl2aXR5CisJCQlXSEVS RSBiYWNrZW5kX3R5cGUgPSAndGVzdF9jdXN0b21fd2FpdF9ldmVudHMnCisJCQkgIEFORCB3YWl0 X2V2ZW50X3R5cGUgPSAnRXh0ZW5zaW9uJworCQkJICBBTkQgKHdhaXRfZXZlbnQgPSAnJG5ld193 YWl0X2V2ZW50X25hbWVfMScpCisJCSkgPSAxOworXSk7CitsaWtlKCRyZXMsIHFyL150JC9tLCAi JG5ld193YWl0X2V2ZW50X25hbWVfMSBkeW5hbWljYWxseSByZWdpc3RlcmVkIHdhc24ndCBmb3Vu ZCIpOworJHJlcyA9ICRzZXNzaW9uLT5xdWVyeV9zYWZlKAorCXFxW1NFTEVDVAorCQkoU0VMRUNU IGNvdW50KCopIEZST00gcGdfc3RhdF9hY3Rpdml0eQorCQkJV0hFUkUgYmFja2VuZF90eXBlID0g J3Rlc3RfY3VzdG9tX3dhaXRfZXZlbnRzJworCQkJICBBTkQgd2FpdF9ldmVudF90eXBlID0gJ0V4 dGVuc2lvbicKKwkJCSAgQU5EICh3YWl0X2V2ZW50ID0gJyRuZXdfd2FpdF9ldmVudF9uYW1lXzIn KQorCQkpID0gMTsKK10pOworbGlrZSgkcmVzLCBxci9edCQvbSwgIiRuZXdfd2FpdF9ldmVudF9u YW1lXzIgZHluYW1pY2FsbHkgcmVnaXN0ZXJlZCB3YXNuJ3QgZm91bmQiKTsKKyRzZXNzaW9uLT5x dWl0OworCiskbm9kZS0+c3RvcDsKKyRub2RlLT5jbGVhbl9ub2RlOworCisKKyMgQ2hlY2sgdGhl IGJvdW5kYXJ5IGNvbmRpdGlvbi4gQW4gZXJyb3Igc2hvdWxkIGhhcHBlbiBpZiB0aGUgbnVtYmVy IG9mIHdhaXQKKyMgZXZlbnRzIGZvciBleHRlbnNpb24gZXhjZWVkcyB0aGUgbGltaXRzLgorJG5v ZGUtPmluaXQ7Ciskbm9kZS0+YXBwZW5kX2NvbmYoCisJJ3Bvc3RncmVzcWwuY29uZicsCispOwor JG5vZGUtPnN0YXJ0OworJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAnQ1JFQVRFIEVYVEVO U0lPTiB0ZXN0X2N1c3RvbV93YWl0X2V2ZW50czsnKTsKKworIyBza2lwIHRvIHRoZSBtYXhpbXVt IG51bWJlciBvZiB3YWl0IGV2ZW50IGZvciBleHRlbnNpb24uICIkdWludDE2X21heCIgY2FuCisj IGJlIGFsbG9jYXRlZCBzaW5jZSB0aGUgZmlyc3Qgd2FpdCBldmVudCBpcyByZXNlcnZlZCBieSBj b3JlLgorbXkgJHVpbnQxNl9tYXg9NjU1MzU7Ciskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs CisJIlNFTEVDVCBDT1VOVChnZXRfbmV3X3dhaXRfZXZlbnRfaW5mbygpKSBGUk9NIGdlbmVyYXRl X3NlcmllcygxLCAkdWludDE2X21heCAtIDEpIik7CisKKyMgY2FuIHVzZSB0aGUgbWF4aW11bSBv bmUKK215ICR3YWl0X2V2ZW50X2luZm8gPSAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICdT RUxFQ1QgZ2V0X25ld193YWl0X2V2ZW50X2luZm8oKTsnKTsKKyRub2RlLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIlNFTEVDVCBzdGFydF9iZ3dvcmtlcl93YWl0aW5nX2ZvcmV2ZXIoJHdhaXRfZXZl bnRfaW5mbyk7Iik7Citvaygkbm9kZS0+cG9sbF9xdWVyeV91bnRpbCgKKwkncG9zdGdyZXMnLAor CXFxW1NFTEVDVAorCQkoU0VMRUNUIGNvdW50KCopIEZST00gcGdfc3RhdF9hY3Rpdml0eQorCQkJ V0hFUkUgYmFja2VuZF90eXBlID0gJ3Rlc3RfY3VzdG9tX3dhaXRfZXZlbnRzJworCQkJICBBTkQg d2FpdF9ldmVudF90eXBlID0gJ0V4dGVuc2lvbicKKwkJCSAgQU5EIHdhaXRfZXZlbnQgPSAnZXh0 ZW5zaW9uJworCQkpID0gMTtdKSwKKwkidW5yZWdpc3RlcmQgd2FpdCBldmVudCBuYW1lIGlzIHdy b25nIgorKTsKKworIyBidXQsIG5leHQgY2FsbCBzaG91bGQgb3V0cHV0IGFuIGVycm9yLgorbXkg KCRyZXQsICRzdGRvdXQsICRzdGRlcnIpID0KKwkkbm9kZS0+cHNxbCgncG9zdGdyZXMnLCAnU0VM RUNUIGdldF9uZXdfd2FpdF9ldmVudF9pbmZvKCk7Jyk7CitsaWtlKAorCSRzdGRlcnIsCisJcXIv RVJST1I6ICB0b28gbWFueSB3YWl0IGV2ZW50cyBmb3IgZXh0ZW5zaW9ucy8sCisJJ2V4cGVjdGVk IGVycm9yIHdoZW4gdGhlIG51bWJlciBvZiB3YWl0IGV2ZW50cyBmb3IgZXh0ZW5zaW9ucyBleGNl ZWRzIHRoZSBsaW1pdHMnCispOworCiskbm9kZS0+c3RvcDsKKyRub2RlLT5jbGVhbl9ub2RlOwor Citkb25lX3Rlc3RpbmcoKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9jdXN0 b21fd2FpdF9ldmVudHMvdGVzdF9jdXN0b21fd2FpdF9ldmVudHMtLTEuMC5zcWwgYi9zcmMvdGVz dC9tb2R1bGVzL3Rlc3RfY3VzdG9tX3dhaXRfZXZlbnRzL3Rlc3RfY3VzdG9tX3dhaXRfZXZlbnRz LS0xLjAuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjk5MzI4OWIx ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY3VzdG9tX3dhaXRf ZXZlbnRzL3Rlc3RfY3VzdG9tX3dhaXRfZXZlbnRzLS0xLjAuc3FsCkBAIC0wLDAgKzEsMzkgQEAK Ky8qIHNyYy90ZXN0L21vZHVsZXMvdGVzdF9jdXN0b21fd2FpdF9ldmVudHMvdGVzdF9jdXN0b21f d2FpdF9ldmVudHMtLTEuMC5zcWwgKi8KKworLS0gY29tcGxhaW4gaWYgc2NyaXB0IGlzIHNvdXJj ZWQgaW4gcHNxbCwgcmF0aGVyIHRoYW4gdmlhIENSRUFURSBFWFRFTlNJT04KK1xlY2hvIFVzZSAi Q1JFQVRFIEVYVEVOU0lPTiB0ZXN0X2N1c3RvbV93YWl0X2V2ZW50cyIgdG8gbG9hZCB0aGlzIGZp bGUuIFxxdWl0CisKKy0tCistLSBnZXRfbmV3X3dhaXRfZXZlbnRfaW5mbygpCistLQorLS0gRHlu YW1pY2FsbHkgZ2V0IGEgbmV3IHdhaXQgZXZlbnQgaW5mb3JtYXRpb24uCistLQorQ1JFQVRFIEZV TkNUSU9OIGdldF9uZXdfd2FpdF9ldmVudF9pbmZvKCkKK1JFVFVSTlMgYmlnaW50CitBUyAnTU9E VUxFX1BBVEhOQU1FJywgJ2dldF9uZXdfd2FpdF9ldmVudF9pbmZvJworTEFOR1VBR0UgQyBTVFJJ Q1QgUEFSQUxMRUwgU0FGRTsKKworLS0KKy0tIHJlZ2lzdGVyX3dhaXRfZXZlbnRfbmFtZSgpCist LQorLS0gRHluYW1pY2FsbHkgcmVnaXN0ZXIgYSB3YWl0IGV2ZW50IG5hbWUuCistLQorQ1JFQVRF IEZVTkNUSU9OIHJlZ2lzdGVyX3dhaXRfZXZlbnRfbmFtZSgKKyAgICB3YWl0X2V2ZW50X2luZm8g YmlnaW50LCB3YWl0X2V2ZW50X25hbWUgdGV4dAorKQorUkVUVVJOUyB2b2lkCitBUyAnTU9EVUxF X1BBVEhOQU1FJywgJ3JlZ2lzdGVyX3dhaXRfZXZlbnRfbmFtZScKK0xBTkdVQUdFIEMgU1RSSUNU IFBBUkFMTEVMIFNBRkU7CisKKy0tCistLSBzdGFydF9iZ3dvcmtlcl93YWl0aW5nX2ZvcmV2ZXIo KQorLS0KKy0tIER5bmFtaWNhbGx5IHN0YXJ0IGEgYmFja2dyb3VuZCB3b3JrZXIgd2FpdGluZyBm b3JldmVyCistLSB3aXRoIHRoZSBzcGVjaWZpZWQgY3VzdG9tIHdhaXQgZXZlbnQuCistLQorQ1JF QVRFIEZVTkNUSU9OIHN0YXJ0X2Jnd29ya2VyX3dhaXRpbmdfZm9yZXZlcigKKyAgICB3YWl0X2V2 ZW50X2luZm8gYmlnaW50IERFRkFVTFQgTlVMTAorKQorUkVUVVJOUyBpbnQ0CitBUyAnTU9EVUxF X1BBVEhOQU1FJywgJ3N0YXJ0X2Jnd29ya2VyX3dhaXRpbmdfZm9yZXZlcicKK0xBTkdVQUdFIEMg UEFSQUxMRUwgU0FGRTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9z cmMvdGVzdC9tb2R1bGVzL3Rlc3RfY3VzdG9tX3dhaXRfZXZlbnRzL3Rlc3RfY3VzdG9tX3dhaXRf ZXZlbnRzLmMgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY3VzdG9tX3dhaXRfZXZlbnRzL3Rlc3Rf Y3VzdG9tX3dhaXRfZXZlbnRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MC4uNzUyN2QyNWY4ZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9j dXN0b21fd2FpdF9ldmVudHMvdGVzdF9jdXN0b21fd2FpdF9ldmVudHMuYwpAQCAtMCwwICsxLDI1 MyBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHRlc3RfY3VzdG9tX3dhaXRfZXZlbnRz LmMKKyAqCQlDb2RlIGZvciB0ZXN0aW5nIGN1c3RvbSB3YWl0IGV2ZW50cyBmb3IgZXh0ZW5zaW9u cworICoKKyAqIFRoaXMgY29kZSBoYXMgc29tZSBmdW5jdGlvbnMgdG8gZGVmaW5lIGFuZCByZWdp c3RlciBuZXcgY3VzdG9tIHdhaXQKKyAqIGV2ZW50cywgYW5kIHRvIGxhdW5jaCBhIGJhY2tncm91 bmQgd29ya2VyIHdhaXRpbmcgZm9yZXZlciB3aXRoIHRoZQorICogc3BlY2lmaWVkIHdhaXQgZXZl bnQuCisgKgorICogWW91IGNhbiBkZWZpbmUgdGhlbSBub3Qgb25seSBpbiBpbml0aWFsaXplZCBw aGFzZXMgYnV0IGFsc28gZHluYW1pY2FsbHkKKyAqIHZpYSBjYWxsaW5nIHVzZXIgZnVuY3Rpb25z LiBBIG5ldyB3YWl0IGV2ZW50ICJjdXN0b21fd2FpdF9ldmVudCIgaXMKKyAqIGRlZmluZWQgYW5k IHJlZ2lzdGVyZWQgaW4gc2htZW1fc3RhcnR1cF9ob29rKCkuIEl0IHdpbGwgYmUgc2F2ZWQgaW4K KyAqIHNoYXJlZCBtZW1vcnkuIFVzZXJzIGNhbiBhbHNvIGRlZmluZSBhbmQgcmVnaXN0ZXIgbmV3 IGN1c3RvbSB3YWl0IGV2ZW50cworICogdmlhIGdldF9uZXdfd2FpdF9ldmVudF9pbmZvKCkgYW5k IHJlZ2lzdGVyX3dhaXRfZXZlbnRfbmFtZSgpIGR5bmFtaWNhbGx5LgorICoKKyAqIFlvdSBjYW4g dXNlIHRoZSB3YWl0IGV2ZW50IGZvciBhIGJhY2tncm91bmQgd29ya2VyIGxhdW5jaGVkIGluCisg KiBzdGFydF9iZ3dvcmtlcl93YWl0aW5nX2ZvcmV2ZXIoKS4gVGhlIHJlYXNvbiB3aHkgaXQgc3Rh cnRzIGJhY2tncm91bmQKKyAqIHdvcmtlcnMgaXMgZm9yIHRhcCB0ZXN0cy4gSXQgZW5hYmxlcyB0 byBjaGVjayB0aGUgd2FpdCBldmVudHMgb24KKyAqIHBnX3N0YXRfYWN0aXZpdHkgZnJvbSBvdGhl ciBwcm9jZXNzZXMuCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjMsIFBv c3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQg KGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAq IElERU5USUZJQ0FUSU9OCisgKgkJc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2N1c3RvbV93YWl0X2V2 ZW50cy90ZXN0X2N1c3RvbV93YWl0X2V2ZW50cy5jCisgKgorICogLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAiZm1nci5oIgorI2luY2x1 ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1ZGUgInBvc3RtYXN0ZXIvYmd3b3JrZXIuaCIKKyNpbmNs dWRlICJwb3N0bWFzdGVyL2ludGVycnVwdC5oIgorI2luY2x1ZGUgInN0b3JhZ2UvaXBjLmgiCisj aW5jbHVkZSAic3RvcmFnZS9sYXRjaC5oIgorI2luY2x1ZGUgInN0b3JhZ2UvbHdsb2NrLmgiCisj aW5jbHVkZSAic3RvcmFnZS9wcm9jLmgiCisjaW5jbHVkZSAic3RvcmFnZS9zaG1lbS5oIgorI2lu Y2x1ZGUgInRjb3AvdXRpbGl0eS5oIgorI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisjaW5j bHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKKyNpbmNsdWRlICJ1dGlscy93YWl0X2V2ZW50LmgiCisK K1BHX01PRFVMRV9NQUdJQzsKKworUEdfRlVOQ1RJT05fSU5GT19WMShnZXRfbmV3X3dhaXRfZXZl bnRfaW5mbyk7CitQR19GVU5DVElPTl9JTkZPX1YxKHJlZ2lzdGVyX3dhaXRfZXZlbnRfbmFtZSk7 CitQR19GVU5DVElPTl9JTkZPX1YxKHN0YXJ0X2Jnd29ya2VyX3dhaXRpbmdfZm9yZXZlcik7CisK K1BHRExMRVhQT1JUIHZvaWQgY3VzdG9tX3dlX3dvcmtlcl9tYWluKERhdHVtIG1haW5fYXJnKTsK KworLyogR1VDIHZhcmlhYmxlcyAqLwordHlwZWRlZiBzdHJ1Y3QgQ3VzdG9tV2FpdEV2ZW50U3Rh dGUKK3sKKwl1aW50MzIJCQl3YWl0X2V2ZW50X2luZm87IAkJIC8qIHRoZSB3YWl0IGV2ZW50IGRl ZmluZWQgaW4gaW5pdGlhbGl6ZWQgcGhhc2UgKi8KK30gQ3VzdG9tV2FpdEV2ZW50U3RhdGU7Citz dGF0aWMgQ3VzdG9tV2FpdEV2ZW50U3RhdGUgKnNzID0gTlVMTDsgICAgICAvKiB0aGUgcG9pbnRl ciB0byB0aGUgc2hhcmVkIG1lbW9yeSAqLworCitzdGF0aWMgY2hhciAqd2FpdF9ldmVudF9uYW1l OyAgICAgICAgICAgICAgICAvKiB0aGUgd2FpdCBldmVudCBuYW1lIGR5bmFtaWNhbGx5IHJlZ2lz dGVyZWQgICovCitzdGF0aWMgY2hhciAqd29ya2VyX2RhdGFiYXNlID0gInBvc3RncmVzIjsgICAv KiBjb25uZWN0ZWQgYnkgYSBiYWNrZ3JvdW5kIHdvcmtlciAqLworCitzdGF0aWMgc2htZW1fcmVx dWVzdF9ob29rX3R5cGUgcHJldl9zaG1lbV9yZXF1ZXN0X2hvb2sgPSBOVUxMOworc3RhdGljIHNo bWVtX3JlcXVlc3RfaG9va190eXBlIHByZXZfc2htZW1fc3RhcnR1cF9ob29rID0gTlVMTDsKKwor c3RhdGljIHZvaWQgY3VzdG9tX3dlX3NobWVtX3JlcXVlc3Qodm9pZCk7CitzdGF0aWMgdm9pZCBj dXN0b21fd2Vfc2htZW1fc3RhcnR1cCh2b2lkKTsKK3N0YXRpYyBTaXplIGN1c3RvbV93ZV9tZW1z aXplKHZvaWQpOworCit2b2lkCitfUEdfaW5pdCh2b2lkKQoreworCXByZXZfc2htZW1fcmVxdWVz dF9ob29rID0gc2htZW1fcmVxdWVzdF9ob29rOworCXNobWVtX3JlcXVlc3RfaG9vayA9IGN1c3Rv bV93ZV9zaG1lbV9yZXF1ZXN0OworCXByZXZfc2htZW1fc3RhcnR1cF9ob29rID0gc2htZW1fc3Rh cnR1cF9ob29rOworCXNobWVtX3N0YXJ0dXBfaG9vayA9IGN1c3RvbV93ZV9zaG1lbV9zdGFydHVw OworfQorCitzdGF0aWMgdm9pZAorY3VzdG9tX3dlX3NobWVtX3JlcXVlc3Qodm9pZCkKK3sKKwlp ZiAocHJldl9zaG1lbV9yZXF1ZXN0X2hvb2spCisJCXByZXZfc2htZW1fcmVxdWVzdF9ob29rKCk7 CisKKwlSZXF1ZXN0QWRkaW5TaG1lbVNwYWNlKGN1c3RvbV93ZV9tZW1zaXplKCkpOworfQorCitz dGF0aWMgU2l6ZQorY3VzdG9tX3dlX21lbXNpemUodm9pZCkKK3sKKwlyZXR1cm4gc2l6ZW9mKEN1 c3RvbVdhaXRFdmVudFN0YXRlKTsKK30KKworLyoKKyAqIERlZmluZSBhbmQgcmVnaXN0ZXIgYSBu ZXcgd2FpdCBldmVudC4KKyAqCisgKiBUaGlzIHJvdXRpbmUgZGVmaW5lcyBhIG5ldyB3YWl0IGV2 ZW50IHdoZW4gaXQncyBjYWxsZWQgZmlyc3QgdGltZS4KKyAqIEFmdGVyIHRoYXQsIHRoZSBuYW1l IG9mIHRoZSB3YWl0IGV2ZW50IGlzIGFzc29jaWF0ZWQgd2l0aCBpdC4gSXQncworICogcmVnaXN0 ZXJlZCBpbiB0aGUgbG9va3VwIHRhYmxlIG9mIGVhY2ggcHJvY2Vzc2VzLgorICovCitzdGF0aWMg dm9pZAorY3VzdG9tX3dlX3NobWVtX3N0YXJ0dXAodm9pZCkKK3sKKwlib29sCQlmb3VuZDsKKwor CWlmIChwcmV2X3NobWVtX3N0YXJ0dXBfaG9vaykKKwkJcHJldl9zaG1lbV9zdGFydHVwX2hvb2so KTsKKworCXNzID0gTlVMTDsKKworCS8qIENyZWF0ZSBvciBhdHRhY2ggdG8gdGhlIHNoYXJlZCBt ZW1vcnkgc3RhdGUgKi8KKwlMV0xvY2tBY3F1aXJlKEFkZGluU2htZW1Jbml0TG9jaywgTFdfRVhD TFVTSVZFKTsKKwlzcyA9IFNobWVtSW5pdFN0cnVjdCgiY3VzdG9tX3dhaXRfZXZlbnQiLAorCQkJ CQkJIHNpemVvZihDdXN0b21XYWl0RXZlbnRTdGF0ZSksCisJCQkJCQkgJmZvdW5kKTsKKworCS8q IERlZmluZSBhIG5ldyB3YWl0IGV2ZW50LiAqLworCWlmICghZm91bmQpCisJCXNzLT53YWl0X2V2 ZW50X2luZm8gPSBXYWl0RXZlbnRFeHRlbnNpb25OZXcoKTsKKworCUxXTG9ja1JlbGVhc2UoQWRk aW5TaG1lbUluaXRMb2NrKTsKKworCS8qCisJICogUmVnaXN0ZXIgdGhlIHdhaXQgZXZlbnQgaW4g dGhlIGxvb2t1cCB0YWJsZSBvZiB0aGUgY3VycmVudCBwcm9jZXNzLgorCSAqLworCVdhaXRFdmVu dEV4dGVuc2lvblJlZ2lzdGVyTmFtZShzcy0+d2FpdF9ldmVudF9pbmZvLAorCQkJCQkJCQkJICAi Y3VzdG9tX3dhaXRfZXZlbnQiKTsKKworCXJldHVybjsKK30KKworLyoKKyAqIENvbm5lY3QgdG8g dGhlIGRhdGFiYXNlIGFuZCB3YWl0IGZvcmV2ZXIgd2l0aCB0aGUgd2FpdCBldmVudAorICogc3Bl Y2lmaWVkIGluIGZpcnN0IGFyZ3VtZW50LgorICovCit2b2lkCitjdXN0b21fd2Vfd29ya2VyX21h aW4oRGF0dW0gbWFpbl9hcmcpCit7CisJdWludDMyIHdhaXRfZXZlbnRfaW5mbzsKKwl3YWl0X2V2 ZW50X2luZm8gPSBEYXR1bUdldFVJbnQzMihtYWluX2FyZyk7CisKKwlwcXNpZ25hbChTSUdURVJN LCBTaWduYWxIYW5kbGVyRm9yU2h1dGRvd25SZXF1ZXN0KTsKKwlCYWNrZ3JvdW5kV29ya2VyVW5i bG9ja1NpZ25hbHMoKTsKKworCS8qIENvbm5lY3QgdG8gb3VyIGRhdGFiYXNlIHRvIHNob3cgdXAg YSB3YWl0IGV2ZW50IGluIHBnX3N0YXRfYWN0aXZpdHkgKi8KKwlCYWNrZ3JvdW5kV29ya2VySW5p dGlhbGl6ZUNvbm5lY3Rpb24od29ya2VyX2RhdGFiYXNlLCBOVUxMLCAwKTsKKworCS8qIFdhaXQg Zm9yZXZlciB3aXRoIHRoZSBzcGVjaWZpZWQgd2FpdCBldmVudCAqLworCXdoaWxlICghU2h1dGRv d25SZXF1ZXN0UGVuZGluZykKKwl7CisJCSh2b2lkKSBXYWl0TGF0Y2goTXlMYXRjaCwKKwkJCQkJ CSBXTF9MQVRDSF9TRVQgfCBXTF9FWElUX09OX1BNX0RFQVRILAorCQkJCQkJIC0xTCwKKwkJCQkJ CSB3YWl0X2V2ZW50X2luZm8pOworCQlSZXNldExhdGNoKE15TGF0Y2gpOworCX0KK30KKworLyoK KyAqIER5bmFtaWNhbGx5IGdldCBhbmQgcmV0dXJuIGEgbmV3IHdhaXQgZXZlbnQuCisgKi8KK0Rh dHVtCitnZXRfbmV3X3dhaXRfZXZlbnRfaW5mbyhQR19GVU5DVElPTl9BUkdTKQoreworCVBHX1JF VFVSTl9VSU5UMzIoV2FpdEV2ZW50RXh0ZW5zaW9uTmV3KCkpOworfQorCisvKgorICogRHluYW1p Y2FsbHkgcmVnaXN0ZXIgYSB3YWl0IGV2ZW50IG5hbWUgaW4gdGhlIGxvb2t1cCB0YWJsZSBvZgor ICogY3VycmVudCBwcm9jZXNzLgorICovCitEYXR1bQorcmVnaXN0ZXJfd2FpdF9ldmVudF9uYW1l KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJdWludDMyIHdhaXRfZXZlbnRfaW5mbzsKKwljaGFyICp3 YWl0X2V2ZW50X25hbWVfYXJnOworCWludCBzaXplOworCisJd2FpdF9ldmVudF9pbmZvID0gUEdf R0VUQVJHX1VJTlQzMigwKTsKKworCS8qCisJICogQ29weSB0byB0aGUgbmFtZSBpbiBhIGJhY2tl bmQtbGlmZXRpbWUgY29udGV4dCBzaW5jZQorCSAqIFdhaXRFdmVudEV4dGVuc2lvblJlZ2lzdGVy TmFtZSgpIGRvZXNuJ3QgY29weSB0aGUgbmFtZS4KKwkgKi8KKwl3YWl0X2V2ZW50X25hbWVfYXJn ID0gdGV4dF90b19jc3RyaW5nKFBHX0dFVEFSR19URVhUX1BQKDEpKTsKKwlzaXplID0gc3RybGVu KHdhaXRfZXZlbnRfbmFtZV9hcmcpICsgMTsKKwlBc3NlcnQoc2l6ZSA8PSBOQU1FREFUQUxFTik7 CisJd2FpdF9ldmVudF9uYW1lID0gKGNoYXIgKikgTWVtb3J5Q29udGV4dEFsbG9jKFRvcE1lbW9y eUNvbnRleHQsIHNpemUpOworCXN0cmxjcHkod2FpdF9ldmVudF9uYW1lLCB3YWl0X2V2ZW50X25h bWVfYXJnLCBzaXplKTsKKworCVdhaXRFdmVudEV4dGVuc2lvblJlZ2lzdGVyTmFtZSh3YWl0X2V2 ZW50X2luZm8sIHdhaXRfZXZlbnRfbmFtZSk7CisKKwlQR19SRVRVUk5fVk9JRCgpOworfQorCisv KgorICogRHluYW1pY2FsbHkgc3RhcnQgYSBiYWNrZ3JvdW5kIHdvcmtlciB3YWl0aW5nIGZvcmV2 ZXIKKyAqIHdpdGggdGhlIGN1c3RvbSB3YWl0IGV2ZW50IHNwZWNpZmllZCBpbiB0aGUgZmlyc3QK KyAqIGFyZ3VtZW50LiBJZiB0aGUgYXJndW1lbnQgaXMgTlVMTCwgaXQgd2lsbCB3YWl0IHdpdGgK KyAqIHRoZSB3YWl0IGV2ZW50IGRlZmluZWQgaW4gaW5pdGlhbGl6ZWQgcGhhc2UuCisgKi8KK0Rh dHVtCitzdGFydF9iZ3dvcmtlcl93YWl0aW5nX2ZvcmV2ZXIoUEdfRlVOQ1RJT05fQVJHUykKK3sK Kwl1aW50MzIgd2FpdF9ldmVudF9pbmZvOworCUJhY2tncm91bmRXb3JrZXIgd29ya2VyOworCUJh Y2tncm91bmRXb3JrZXJIYW5kbGUgKmhhbmRsZTsKKwlCZ3dIYW5kbGVTdGF0dXMgc3RhdHVzOwor CXBpZF90CQlwaWQ7CisKKwlpZiAoUEdfQVJHSVNOVUxMKDApKQorCXsKKwkJaWYgKHNzID09IE5V TEwpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJybXNnKCJjYW5ub3QgdXNlIFwiJXNcIiBp ZiBcIiVzXCIgaGFzIG5vdCBiZWVuIGxvYWRlZCB3aXRoIHNoYXJlZF9wcmVsb2FkX2xpYnJhcmll cyIsCisJCQkJCQkJIndhaXRfd29ya2VyX2xhdW5jaCIsICJ0ZXN0X2N1c3RvbV93YWl0X2V2ZW50 cyIpKSk7CisKKwkJd2FpdF9ldmVudF9pbmZvID0gc3MtPndhaXRfZXZlbnRfaW5mbzsKKwl9IGVs c2UKKwkJd2FpdF9ldmVudF9pbmZvID0gUEdfR0VUQVJHX1VJTlQzMigwKTsKKworCW1lbXNldCgm d29ya2VyLCAwLCBzaXplb2Yod29ya2VyKSk7CisJd29ya2VyLmJnd19mbGFncyA9IEJHV09SS0VS X1NITUVNX0FDQ0VTUyB8CisJCUJHV09SS0VSX0JBQ0tFTkRfREFUQUJBU0VfQ09OTkVDVElPTjsK Kwl3b3JrZXIuYmd3X3N0YXJ0X3RpbWUgPSBCZ1dvcmtlclN0YXJ0X1JlY292ZXJ5RmluaXNoZWQ7 CisJd29ya2VyLmJnd19yZXN0YXJ0X3RpbWUgPSBCR1dfTkVWRVJfUkVTVEFSVDsKKwlzcHJpbnRm KHdvcmtlci5iZ3dfZnVuY3Rpb25fbmFtZSwgImN1c3RvbV93ZV93b3JrZXJfbWFpbiIpOworCXNw cmludGYod29ya2VyLmJnd19saWJyYXJ5X25hbWUsICJ0ZXN0X2N1c3RvbV93YWl0X2V2ZW50cyIp OworCXNucHJpbnRmKHdvcmtlci5iZ3dfbmFtZSwgQkdXX01BWExFTiwgInRlc3RfY3VzdG9tX3dh aXRfZXZlbnRzIHdvcmtlciIpOworCXNucHJpbnRmKHdvcmtlci5iZ3dfdHlwZSwgQkdXX01BWExF TiwgInRlc3RfY3VzdG9tX3dhaXRfZXZlbnRzIik7CisJd29ya2VyLmJnd19tYWluX2FyZyA9IHdh aXRfZXZlbnRfaW5mbzsKKwl3b3JrZXIuYmd3X25vdGlmeV9waWQgPSBNeVByb2NQaWQ7CisKKwlp ZiAoIVJlZ2lzdGVyRHluYW1pY0JhY2tncm91bmRXb3JrZXIoJndvcmtlciwgJmhhbmRsZSkpCisJ CVBHX1JFVFVSTl9OVUxMKCk7CisKKwlzdGF0dXMgPSBXYWl0Rm9yQmFja2dyb3VuZFdvcmtlclN0 YXJ0dXAoaGFuZGxlLCAmcGlkKTsKKworCWlmIChzdGF0dXMgPT0gQkdXSF9TVE9QUEVEKQorCQll cmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5TVUZGSUNJRU5UX1JFU09VUkNF UyksCisJCQkJIGVycm1zZygiY291bGQgbm90IHN0YXJ0IGJhY2tncm91bmQgcHJvY2VzcyIpLAor CQkJCSBlcnJoaW50KCJNb3JlIGRldGFpbHMgbWF5IGJlIGF2YWlsYWJsZSBpbiB0aGUgc2VydmVy IGxvZy4iKSkpOworCWlmIChzdGF0dXMgPT0gQkdXSF9QT1NUTUFTVEVSX0RJRUQpCisJCWVyZXBv cnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlNVRkZJQ0lFTlRfUkVTT1VSQ0VTKSwK KwkJCQkgZXJybXNnKCJjYW5ub3Qgc3RhcnQgYmFja2dyb3VuZCBwcm9jZXNzZXMgd2l0aG91dCBw b3N0bWFzdGVyIiksCisJCQkJIGVycmhpbnQoIktpbGwgYWxsIHJlbWFpbmluZyBkYXRhYmFzZSBw cm9jZXNzZXMgYW5kIHJlc3RhcnQgdGhlIGRhdGFiYXNlLiIpKSk7CisJQXNzZXJ0KHN0YXR1cyA9 PSBCR1dIX1NUQVJURUQpOworCisJUEdfUkVUVVJOX0lOVDMyKHBpZCk7Cit9CmRpZmYgLS1naXQg YS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY3VzdG9tX3dhaXRfZXZlbnRzL3Rlc3RfY3VzdG9tX3dh aXRfZXZlbnRzLmNvbnRyb2wgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY3VzdG9tX3dhaXRfZXZl bnRzL3Rlc3RfY3VzdG9tX3dhaXRfZXZlbnRzLmNvbnRyb2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMC4uOGRkODc1YTI1MgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0 L21vZHVsZXMvdGVzdF9jdXN0b21fd2FpdF9ldmVudHMvdGVzdF9jdXN0b21fd2FpdF9ldmVudHMu Y29udHJvbApAQCAtMCwwICsxLDMgQEAKK2NvbW1lbnQgPSAnVGVzdCBjb2RlIGZvciBjdXN0b20g d2FpdCBldmVudHMnCitkZWZhdWx0X3ZlcnNpb24gPSAnMS4wJworbW9kdWxlX3BhdGhuYW1lID0g JyRsaWJkaXIvdGVzdF9jdXN0b21fd2FpdF9ldmVudHMnCi0tIAoyLjI1LjEKCg== --=_6b3742972f07bca8c6343ab7c62ad532--