Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1hTpNR-0005I8-J9 for pgsql-hackers@arkaria.postgresql.org; Thu, 23 May 2019 15:11:30 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1hTpNP-0002Cn-CQ for pgsql-hackers@arkaria.postgresql.org; Thu, 23 May 2019 15:11:27 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1hTpNP-0002BJ-07 for pgsql-hackers@lists.postgresql.org; Thu, 23 May 2019 15:11:27 +0000 Received: from courriel.mines-paristech.fr ([77.158.173.149] helo=antispam-1.ensmp.fr) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1hTpNK-0004Gp-97 for pgsql-hackers@lists.postgresql.org; Thu, 23 May 2019 15:11:26 +0000 Received: from smtp-5.mines-paristech.fr (smtp.mines-paristech.fr [77.158.173.146]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by antispam-1.ensmp.fr (antispam.mines-paristech.fr) with ESMTPS id 3CE9555F25; Thu, 23 May 2019 17:11:21 +0200 (CEST) Received: from lancre.paris.ensmp.fr (lancre.paris.ensmp.fr [192.168.152.103]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp-5.mines-paristech.fr (Postfix) with ESMTPSA id 1A5ED202D3; Thu, 23 May 2019 17:11:21 +0200 (CEST) Date: Thu, 23 May 2019 17:11:20 +0200 (CEST) From: Fabien COELHO X-X-Sender: fabien@lancre Reply-To: Fabien COELHO To: Daniel Verite cc: "Iwata, Aya" , PostgreSQL Developers Subject: RE: psql - add SHOW_ALL_RESULTS option In-Reply-To: Message-ID: References: <710caf32-a5f9-4511-bd9d-736c1a91f4c3@manitou-mail.org> User-Agent: Alpine 2.21 (DEB 202 2017-01-01) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="8323329-870365450-1558624281=:28482" X-CLAMAV-SCAN: ok X-VRSPAM-SCORE: -100 X-VRSPAM-STATE: legit X-VRSPAM-CAUSE: gggruggvucftvghtrhhoucdtuddrgeduuddruddugedgkeejucetufdoteggodetrfcurfhrohhfihhlvgemucggtfgfnhhsuhgsshgtrhhisggvnecuuegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenucfjughrpeffhfhrvffujgfkfhgfgggtsehmtderredtredvnecuhfhrohhmpefhrggsihgvnhcuvefqgffnjffquceotghovghlhhhosegtrhhirdgvnhhsmhhprdhfrheqnecurfgrrhgrmhepmhhouggvpehsmhhtphhouhht X-VRSPAM-EXTCAUSE: mhhouggvpehsmhhtphhouhht List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. --8323329-870365450-1558624281=:28482 Content-Type: text/plain; charset=US-ASCII; format=flowed > Here is a v3 which fixes \errverbose, hopefully. V5 is a rebase and an slightly improved documentation. -- Fabien. --8323329-870365450-1558624281=:28482 Content-Type: text/x-diff; name=psql-show-all-results-4.patch Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename=psql-show-all-results-4.patch ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcHNxbC1yZWYuc2dtbCBi L2RvYy9zcmMvc2dtbC9yZWYvcHNxbC1yZWYuc2dtbA0KaW5kZXggYjg2NzY0 MDAzZC4uNGExYjU2MmYyNCAxMDA2NDQNCi0tLSBhL2RvYy9zcmMvc2dtbC9y ZWYvcHNxbC1yZWYuc2dtbA0KKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9wc3Fs LXJlZi5zZ21sDQpAQCAtMzM0MSw3ICszMzQxLDcgQEAgc2VsZWN0IDFcOyBz ZWxlY3QgMlw7IHNlbGVjdCAzOw0KICAgICAgICAgPGFwcGxpY2F0aW9uPnBz cWw8L2FwcGxpY2F0aW9uPiBwcmludHMgb25seSB0aGUgbGFzdCBxdWVyeSBy ZXN1bHQNCiAgICAgICAgIGl0IHJlY2VpdmVzIGZvciBlYWNoIHJlcXVlc3Q7 IGluIHRoaXMgZXhhbXBsZSwgYWx0aG91Z2ggYWxsDQogICAgICAgICB0aHJl ZSA8Y29tbWFuZD5TRUxFQ1Q8L2NvbW1hbmQ+cyBhcmUgaW5kZWVkIGV4ZWN1 dGVkLCA8YXBwbGljYXRpb24+cHNxbDwvYXBwbGljYXRpb24+DQotICAgICAg ICBvbmx5IHByaW50cyB0aGUgPGxpdGVyYWw+MzwvbGl0ZXJhbD4uDQorICAg ICAgICBvbmx5IHByaW50cyB0aGUgPGxpdGVyYWw+MzwvbGl0ZXJhbD4sIHVu bGVzcyA8dmFybmFtZT5TSE9XX0FMTF9SRVNVTFRTPC92YXJuYW1lPiBpcyBz ZXQuDQogICAgICAgICA8L3BhcmE+DQogICAgICAgICA8L2xpc3RpdGVtPg0K ICAgICAgIDwvdmFybGlzdGVudHJ5Pg0KQEAgLTM5MTgsNiArMzkxOCwxNyBA QCBiYXINCiAgICAgICAgIDwvbGlzdGl0ZW0+DQogICAgICAgPC92YXJsaXN0 ZW50cnk+DQogDQorICAgICAgPHZhcmxpc3RlbnRyeT4NCisgICAgICAgIDx0 ZXJtPjx2YXJuYW1lPlNIT1dfQUxMX1JFU1VMVFM8L3Zhcm5hbWU+PC90ZXJt Pg0KKyAgICAgICAgPGxpc3RpdGVtPg0KKyAgICAgICAgPHBhcmE+DQorICAg ICAgICBXaGVuIHRoaXMgdmFyaWFibGUgaXMgc2V0IHRvIDxsaXRlcmFsPm9u PC9saXRlcmFsPiwgYWxsIHJlc3VsdHMgb2YgYSBjb21iaW5lZA0KKyAgICAg ICAgKDxsaXRlcmFsPlw7PC9saXRlcmFsPikgcXVlcnkgYXJlIHNob3duIGlu c3RlYWQgb2YganVzdCB0aGUgbGFzdCBvbmUuDQorICAgICAgICBEZWZhdWx0 IGlzIDxsaXRlcmFsPm9mZjwvbGl0ZXJhbD4uDQorICAgICAgICA8L3BhcmE+ DQorICAgICAgICA8L2xpc3RpdGVtPg0KKyAgICAgIDwvdmFybGlzdGVudHJ5 Pg0KKw0KICAgICAgIDx2YXJsaXN0ZW50cnk+DQogICAgICAgICA8dGVybT48 dmFybmFtZT5TSE9XX0NPTlRFWFQ8L3Zhcm5hbWU+PC90ZXJtPg0KICAgICAg ICAgPGxpc3RpdGVtPg0KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcHNxbC9jb21t b24uYyBiL3NyYy9iaW4vcHNxbC9jb21tb24uYw0KaW5kZXggNDRhNzgyNDc4 ZC4uZGM1NzU5MTFjZSAxMDA2NDQNCi0tLSBhL3NyYy9iaW4vcHNxbC9jb21t b24uYw0KKysrIGIvc3JjL2Jpbi9wc3FsL2NvbW1vbi5jDQpAQCAtNDcyLDYg KzQ3MiwxNiBAQCBSZXNldENhbmNlbENvbm4odm9pZCkNCiAjZW5kaWYNCiB9 DQogDQorc3RhdGljIHZvaWQNCitTaG93RXJyb3JNZXNzYWdlKGNvbnN0IFBH cmVzdWx0ICpyZXN1bHQpDQorew0KKwljb25zdCBjaGFyICplcnJvciA9IFBR ZXJyb3JNZXNzYWdlKHBzZXQuZGIpOw0KKw0KKwlpZiAoc3RybGVuKGVycm9y KSkNCisJCXBnX2xvZ19pbmZvKCIlcyIsIGVycm9yKTsNCisNCisJQ2hlY2tD b25uZWN0aW9uKCk7DQorfQ0KIA0KIC8qDQogICogQWNjZXB0UmVzdWx0DQpA QCAtNDgyLDcgKzQ5Miw3IEBAIFJlc2V0Q2FuY2VsQ29ubih2b2lkKQ0KICAq IFJldHVybnMgdHJ1ZSBmb3IgdmFsaWQgcmVzdWx0LCBmYWxzZSBmb3IgZXJy b3Igc3RhdGUuDQogICovDQogc3RhdGljIGJvb2wNCi1BY2NlcHRSZXN1bHQo Y29uc3QgUEdyZXN1bHQgKnJlc3VsdCkNCitBY2NlcHRSZXN1bHQoY29uc3Qg UEdyZXN1bHQgKnJlc3VsdCwgYm9vbCBzaG93X2Vycm9yKQ0KIHsNCiAJYm9v bAkJT0s7DQogDQpAQCAtNTEzLDE1ICs1MjMsOCBAQCBBY2NlcHRSZXN1bHQo Y29uc3QgUEdyZXN1bHQgKnJlc3VsdCkNCiAJCQkJYnJlYWs7DQogCQl9DQog DQotCWlmICghT0spDQotCXsNCi0JCWNvbnN0IGNoYXIgKmVycm9yID0gUFFl cnJvck1lc3NhZ2UocHNldC5kYik7DQotDQotCQlpZiAoc3RybGVuKGVycm9y KSkNCi0JCQlwZ19sb2dfaW5mbygiJXMiLCBlcnJvcik7DQotDQotCQlDaGVj a0Nvbm5lY3Rpb24oKTsNCi0JfQ0KKwlpZiAoIU9LICYmIHNob3dfZXJyb3Ip DQorCQlTaG93RXJyb3JNZXNzYWdlKHJlc3VsdCk7DQogDQogCXJldHVybiBP SzsNCiB9DQpAQCAtNzAxLDcgKzcwNCw3IEBAIFBTUUxleGVjKGNvbnN0IGNo YXIgKnF1ZXJ5KQ0KIA0KIAlSZXNldENhbmNlbENvbm4oKTsNCiANCi0JaWYg KCFBY2NlcHRSZXN1bHQocmVzKSkNCisJaWYgKCFBY2NlcHRSZXN1bHQocmVz LCB0cnVlKSkNCiAJew0KIAkJQ2xlYXJPclNhdmVSZXN1bHQocmVzKTsNCiAJ CXJlcyA9IE5VTEw7DQpAQCAtNzQzLDcgKzc0Niw3IEBAIFBTUUxleGVjV2F0 Y2goY29uc3QgY2hhciAqcXVlcnksIGNvbnN0IHByaW50UXVlcnlPcHQgKm9w dCkNCiANCiAJUmVzZXRDYW5jZWxDb25uKCk7DQogDQotCWlmICghQWNjZXB0 UmVzdWx0KHJlcykpDQorCWlmICghQWNjZXB0UmVzdWx0KHJlcywgdHJ1ZSkp DQogCXsNCiAJCUNsZWFyT3JTYXZlUmVzdWx0KHJlcyk7DQogCQlyZXR1cm4g MDsNCkBAIC05OTksMTk5ICsxMDAyLDExMyBAQCBsb29wX2V4aXQ6DQogCXJl dHVybiBzdWNjZXNzOw0KIH0NCiANCi0NCiAvKg0KLSAqIFByb2Nlc3NSZXN1 bHQ6IHV0aWxpdHkgZnVuY3Rpb24gZm9yIHVzZSBieSBTZW5kUXVlcnkoKSBv bmx5DQotICoNCi0gKiBXaGVuIG91ciBjb21tYW5kIHN0cmluZyBjb250YWlu ZWQgYSBDT1BZIEZST00gU1RESU4gb3IgQ09QWSBUTyBTVERPVVQsDQotICog UFFleGVjKCkgaGFzIHN0b3BwZWQgYXQgdGhlIFBHcmVzdWx0IGFzc29jaWF0 ZWQgd2l0aCB0aGUgZmlyc3Qgc3VjaA0KLSAqIGNvbW1hbmQuICBJbiB0aGF0 IGV2ZW50LCB3ZSdsbCBtYXJzaGFsIGRhdGEgZm9yIHRoZSBDT1BZIGFuZCB0 aGVuIGN5Y2xlDQotICogdGhyb3VnaCBhbnkgc3Vic2VxdWVudCBQR3Jlc3Vs dCBvYmplY3RzLg0KLSAqDQotICogV2hlbiB0aGUgY29tbWFuZCBzdHJpbmcg Y29udGFpbmVkIG5vIHN1Y2ggQ09QWSBjb21tYW5kLCB0aGlzIGZ1bmN0aW9u DQotICogZGVnZW5lcmF0ZXMgdG8gYW4gQWNjZXB0UmVzdWx0KCkgY2FsbC4N Ci0gKg0KLSAqIENoYW5nZXMgaXRzIGFyZ3VtZW50IHRvIHBvaW50IHRvIHRo ZSBsYXN0IFBHcmVzdWx0IG9mIHRoZSBjb21tYW5kIHN0cmluZywNCi0gKiBv ciBOVUxMIGlmIHRoYXQgcmVzdWx0IHdhcyBmb3IgYSBDT1BZIFRPIFNURE9V VC4gIChSZXR1cm5pbmcgTlVMTCBwcmV2ZW50cw0KLSAqIHRoZSBjb21tYW5k IHN0YXR1cyBmcm9tIGJlaW5nIHByaW50ZWQsIHdoaWNoIHdlIHdhbnQgaW4g dGhhdCBjYXNlIHNvIHRoYXQNCi0gKiB0aGUgc3RhdHVzIGxpbmUgZG9lc24n dCBnZXQgdGFrZW4gYXMgcGFydCBvZiB0aGUgQ09QWSBkYXRhLikNCi0gKg0K LSAqIFJldHVybnMgdHJ1ZSBvbiBjb21wbGV0ZSBzdWNjZXNzLCBmYWxzZSBv dGhlcndpc2UuICBQb3NzaWJsZSBmYWlsdXJlIG1vZGVzDQotICogaW5jbHVk ZSBwdXJlbHkgY2xpZW50LXNpZGUgcHJvYmxlbXM7IGNoZWNrIHRoZSB0cmFu c2FjdGlvbiBzdGF0dXMgZm9yIHRoZQ0KLSAqIHNlcnZlci1zaWRlIG9waW5p b24uDQorICogTWFyc2hhbCB0aGUgQ09QWSBkYXRhLiAgRWl0aGVyIHN1YnJv dXRpbmUgd2lsbCBnZXQgdGhlDQorICogY29ubmVjdGlvbiBvdXQgb2YgaXRz IENPUFkgc3RhdGUsIHRoZW4gY2FsbCBQUXJlc3VsdFN0YXR1cygpDQorICog b25jZSBhbmQgcmVwb3J0IGFueSBlcnJvci4NCisgKg0KKyAqIEZvciBDT1BZ IE9VVCwgZGlyZWN0IHRoZSBvdXRwdXQgdG8gcHNldC5jb3B5U3RyZWFtIGlm IGl0J3Mgc2V0LA0KKyAqIG90aGVyd2lzZSB0byBwc2V0LmdmbmFtZSBpZiBp dCdzIHNldCwgb3RoZXJ3aXNlIHRvIHF1ZXJ5Rm91dC4NCisgKiBGb3IgQ09Q WSBJTiwgdXNlIHBzZXQuY29weVN0cmVhbSBhcyBkYXRhIHNvdXJjZSBpZiBp dCdzIHNldCwNCisgKiBvdGhlcndpc2UgY3VyX2NtZF9zb3VyY2UuDQorICoN CisgKiBVcGRhdGUgcmVzdWx0IGlmIGZ1cnRoZXIgcHJvY2Vzc2luZyBpcyBu ZWNlc3NhcnkuICAoUmV0dXJuaW5nIE5VTEwNCisgKiBwcmV2ZW50cyB0aGUg Y29tbWFuZCBzdGF0dXMgZnJvbSBiZWluZyBwcmludGVkLCB3aGljaCB3ZSB3 YW50IGluIHRoYXQNCisgKiBjYXNlIHNvIHRoYXQgdGhlIHN0YXR1cyBsaW5l IGRvZXNuJ3QgZ2V0IHRha2VuIGFzIHBhcnQgb2YgdGhlIENPUFkgZGF0YS4p DQogICovDQogc3RhdGljIGJvb2wNCi1Qcm9jZXNzUmVzdWx0KFBHcmVzdWx0 ICoqcmVzdWx0cykNCitIYW5kbGVDb3B5UmVzdWx0KFBHcmVzdWx0ICoqcmVz dWx0KQ0KIHsNCiAJYm9vbAkJc3VjY2VzcyA9IHRydWU7DQotCWJvb2wJCWZp cnN0X2N5Y2xlID0gdHJ1ZTsNCisJRklMRQkgICAqY29weXN0cmVhbTsNCisJ UEdyZXN1bHQgICAqY29weV9yZXN1bHQ7DQorCUV4ZWNTdGF0dXNUeXBlIHJl c3VsdF9zdGF0dXMgPSBQUXJlc3VsdFN0YXR1cygqcmVzdWx0KTsNCiANCi0J Zm9yICg7OykNCisJQXNzZXJ0KHJlc3VsdF9zdGF0dXMgPT0gUEdSRVNfQ09Q WV9PVVQgfHwNCisJCSAgIHJlc3VsdF9zdGF0dXMgPT0gUEdSRVNfQ09QWV9J Tik7DQorDQorCVNldENhbmNlbENvbm4oKTsNCisJaWYgKHJlc3VsdF9zdGF0 dXMgPT0gUEdSRVNfQ09QWV9PVVQpDQogCXsNCi0JCUV4ZWNTdGF0dXNUeXBl IHJlc3VsdF9zdGF0dXM7DQotCQlib29sCQlpc19jb3B5Ow0KLQkJUEdyZXN1 bHQgICAqbmV4dF9yZXN1bHQ7DQorCQlib29sCQluZWVkX2Nsb3NlID0gZmFs c2U7DQorCQlib29sCQlpc19waXBlID0gZmFsc2U7DQogDQotCQlpZiAoIUFj Y2VwdFJlc3VsdCgqcmVzdWx0cykpDQorCQlpZiAocHNldC5jb3B5U3RyZWFt KQ0KIAkJew0KLQkJCS8qDQotCQkJICogRmFpbHVyZSBhdCB0aGlzIHBvaW50 IGlzIGFsd2F5cyBhIHNlcnZlci1zaWRlIGZhaWx1cmUgb3IgYQ0KLQkJCSAq IGZhaWx1cmUgdG8gc3VibWl0IHRoZSBjb21tYW5kIHN0cmluZy4gIEVpdGhl ciB3YXksIHdlJ3JlDQotCQkJICogZmluaXNoZWQgd2l0aCB0aGlzIGNvbW1h bmQgc3RyaW5nLg0KLQkJCSAqLw0KLQkJCXN1Y2Nlc3MgPSBmYWxzZTsNCi0J CQlicmVhazsNCisJCQkvKiBpbnZva2VkIGJ5IFxjb3B5ICovDQorCQkJY29w eXN0cmVhbSA9IHBzZXQuY29weVN0cmVhbTsNCiAJCX0NCi0NCi0JCXJlc3Vs dF9zdGF0dXMgPSBQUXJlc3VsdFN0YXR1cygqcmVzdWx0cyk7DQotCQlzd2l0 Y2ggKHJlc3VsdF9zdGF0dXMpDQorCQllbHNlIGlmIChwc2V0LmdmbmFtZSkN CiAJCXsNCi0JCQljYXNlIFBHUkVTX0VNUFRZX1FVRVJZOg0KLQkJCWNhc2Ug UEdSRVNfQ09NTUFORF9PSzoNCi0JCQljYXNlIFBHUkVTX1RVUExFU19PSzoN Ci0JCQkJaXNfY29weSA9IGZhbHNlOw0KLQkJCQlicmVhazsNCi0NCi0JCQlj YXNlIFBHUkVTX0NPUFlfT1VUOg0KLQkJCWNhc2UgUEdSRVNfQ09QWV9JTjoN Ci0JCQkJaXNfY29weSA9IHRydWU7DQotCQkJCWJyZWFrOw0KLQ0KLQkJCWRl ZmF1bHQ6DQotCQkJCS8qIEFjY2VwdFJlc3VsdCgpIHNob3VsZCBoYXZlIGNh dWdodCBhbnl0aGluZyBlbHNlLiAqLw0KLQkJCQlpc19jb3B5ID0gZmFsc2U7 DQotCQkJCXBnX2xvZ19lcnJvcigidW5leHBlY3RlZCBQUXJlc3VsdFN0YXR1 czogJWQiLCByZXN1bHRfc3RhdHVzKTsNCi0JCQkJYnJlYWs7DQotCQl9DQot DQotCQlpZiAoaXNfY29weSkNCi0JCXsNCi0JCQkvKg0KLQkJCSAqIE1hcnNo YWwgdGhlIENPUFkgZGF0YS4gIEVpdGhlciBzdWJyb3V0aW5lIHdpbGwgZ2V0 IHRoZQ0KLQkJCSAqIGNvbm5lY3Rpb24gb3V0IG9mIGl0cyBDT1BZIHN0YXRl LCB0aGVuIGNhbGwgUFFyZXN1bHRTdGF0dXMoKQ0KLQkJCSAqIG9uY2UgYW5k IHJlcG9ydCBhbnkgZXJyb3IuDQotCQkJICoNCi0JCQkgKiBGb3IgQ09QWSBP VVQsIGRpcmVjdCB0aGUgb3V0cHV0IHRvIHBzZXQuY29weVN0cmVhbSBpZiBp dCdzIHNldCwNCi0JCQkgKiBvdGhlcndpc2UgdG8gcHNldC5nZm5hbWUgaWYg aXQncyBzZXQsIG90aGVyd2lzZSB0byBxdWVyeUZvdXQuDQotCQkJICogRm9y IENPUFkgSU4sIHVzZSBwc2V0LmNvcHlTdHJlYW0gYXMgZGF0YSBzb3VyY2Ug aWYgaXQncyBzZXQsDQotCQkJICogb3RoZXJ3aXNlIGN1cl9jbWRfc291cmNl Lg0KLQkJCSAqLw0KLQkJCUZJTEUJICAgKmNvcHlzdHJlYW07DQotCQkJUEdy ZXN1bHQgICAqY29weV9yZXN1bHQ7DQotDQotCQkJU2V0Q2FuY2VsQ29ubigp Ow0KLQkJCWlmIChyZXN1bHRfc3RhdHVzID09IFBHUkVTX0NPUFlfT1VUKQ0K KwkJCS8qIGludm9rZWQgYnkgXGcgKi8NCisJCQlpZiAob3BlblF1ZXJ5T3V0 cHV0RmlsZShwc2V0LmdmbmFtZSwNCisJCQkJCQkJCQkmY29weXN0cmVhbSwg JmlzX3BpcGUpKQ0KIAkJCXsNCi0JCQkJYm9vbAkJbmVlZF9jbG9zZSA9IGZh bHNlOw0KLQkJCQlib29sCQlpc19waXBlID0gZmFsc2U7DQotDQotCQkJCWlm IChwc2V0LmNvcHlTdHJlYW0pDQotCQkJCXsNCi0JCQkJCS8qIGludm9rZWQg YnkgXGNvcHkgKi8NCi0JCQkJCWNvcHlzdHJlYW0gPSBwc2V0LmNvcHlTdHJl YW07DQotCQkJCX0NCi0JCQkJZWxzZSBpZiAocHNldC5nZm5hbWUpDQotCQkJ CXsNCi0JCQkJCS8qIGludm9rZWQgYnkgXGcgKi8NCi0JCQkJCWlmIChvcGVu UXVlcnlPdXRwdXRGaWxlKHBzZXQuZ2ZuYW1lLA0KLQkJCQkJCQkJCQkJJmNv cHlzdHJlYW0sICZpc19waXBlKSkNCi0JCQkJCXsNCi0JCQkJCQluZWVkX2Ns b3NlID0gdHJ1ZTsNCi0JCQkJCQlpZiAoaXNfcGlwZSkNCi0JCQkJCQkJZGlz YWJsZV9zaWdwaXBlX3RyYXAoKTsNCi0JCQkJCX0NCi0JCQkJCWVsc2UNCi0J CQkJCQljb3B5c3RyZWFtID0gTlVMTDsJLyogZGlzY2FyZCBDT1BZIGRhdGEg ZW50aXJlbHkgKi8NCi0JCQkJfQ0KLQkJCQllbHNlDQotCQkJCXsNCi0JCQkJ CS8qIGZhbGwgYmFjayB0byB0aGUgZ2VuZXJpYyBxdWVyeSBvdXRwdXQgc3Ry ZWFtICovDQotCQkJCQljb3B5c3RyZWFtID0gcHNldC5xdWVyeUZvdXQ7DQot CQkJCX0NCi0NCi0JCQkJc3VjY2VzcyA9IGhhbmRsZUNvcHlPdXQocHNldC5k YiwNCi0JCQkJCQkJCQkJY29weXN0cmVhbSwNCi0JCQkJCQkJCQkJJmNvcHlf cmVzdWx0KQ0KLQkJCQkJJiYgc3VjY2Vzcw0KLQkJCQkJJiYgKGNvcHlzdHJl YW0gIT0gTlVMTCk7DQotDQotCQkJCS8qDQotCQkJCSAqIFN1cHByZXNzIHN0 YXR1cyBwcmludGluZyBpZiB0aGUgcmVwb3J0IHdvdWxkIGdvIHRvIHRoZSBz YW1lDQotCQkJCSAqIHBsYWNlIGFzIHRoZSBDT1BZIGRhdGEganVzdCB3ZW50 LiAgTm90ZSB0aGlzIGRvZXNuJ3QNCi0JCQkJICogcHJldmVudCBlcnJvciBy ZXBvcnRpbmcsIHNpbmNlIGhhbmRsZUNvcHlPdXQgZGlkIHRoYXQuDQotCQkJ CSAqLw0KLQkJCQlpZiAoY29weXN0cmVhbSA9PSBwc2V0LnF1ZXJ5Rm91dCkN Ci0JCQkJew0KLQkJCQkJUFFjbGVhcihjb3B5X3Jlc3VsdCk7DQotCQkJCQlj b3B5X3Jlc3VsdCA9IE5VTEw7DQotCQkJCX0NCi0NCi0JCQkJaWYgKG5lZWRf Y2xvc2UpDQotCQkJCXsNCi0JCQkJCS8qIGNsb3NlIFxnIGFyZ3VtZW50IGZp bGUvcGlwZSAqLw0KLQkJCQkJaWYgKGlzX3BpcGUpDQotCQkJCQl7DQotCQkJ CQkJcGNsb3NlKGNvcHlzdHJlYW0pOw0KLQkJCQkJCXJlc3RvcmVfc2lncGlw ZV90cmFwKCk7DQotCQkJCQl9DQotCQkJCQllbHNlDQotCQkJCQl7DQotCQkJ CQkJZmNsb3NlKGNvcHlzdHJlYW0pOw0KLQkJCQkJfQ0KLQkJCQl9DQorCQkJ CW5lZWRfY2xvc2UgPSB0cnVlOw0KKwkJCQlpZiAoaXNfcGlwZSkNCisJCQkJ CWRpc2FibGVfc2lncGlwZV90cmFwKCk7DQogCQkJfQ0KIAkJCWVsc2UNCi0J CQl7DQotCQkJCS8qIENPUFkgSU4gKi8NCi0JCQkJY29weXN0cmVhbSA9IHBz ZXQuY29weVN0cmVhbSA/IHBzZXQuY29weVN0cmVhbSA6IHBzZXQuY3VyX2Nt ZF9zb3VyY2U7DQotCQkJCXN1Y2Nlc3MgPSBoYW5kbGVDb3B5SW4ocHNldC5k YiwNCi0JCQkJCQkJCQkgICBjb3B5c3RyZWFtLA0KLQkJCQkJCQkJCSAgIFBR YmluYXJ5VHVwbGVzKCpyZXN1bHRzKSwNCi0JCQkJCQkJCQkgICAmY29weV9y ZXN1bHQpICYmIHN1Y2Nlc3M7DQotCQkJfQ0KLQkJCVJlc2V0Q2FuY2VsQ29u bigpOw0KLQ0KLQkJCS8qDQotCQkJICogUmVwbGFjZSB0aGUgUEdSRVNfQ09Q WV9PVVQvSU4gcmVzdWx0IHdpdGggQ09QWSBjb21tYW5kJ3MgZXhpdA0KLQkJ CSAqIHN0YXR1cywgb3Igd2l0aCBOVUxMIGlmIHdlIHdhbnQgdG8gc3VwcHJl c3MgcHJpbnRpbmcgYW55dGhpbmcuDQotCQkJICovDQotCQkJUFFjbGVhcigq cmVzdWx0cyk7DQotCQkJKnJlc3VsdHMgPSBjb3B5X3Jlc3VsdDsNCisJCQkJ Y29weXN0cmVhbSA9IE5VTEw7CS8qIGRpc2NhcmQgQ09QWSBkYXRhIGVudGly ZWx5ICovDQogCQl9DQotCQllbHNlIGlmIChmaXJzdF9jeWNsZSkNCisJCWVs c2UNCiAJCXsNCi0JCQkvKiBmYXN0IHBhdGg6IG5vIENPUFkgY29tbWFuZHM7 IFBRZXhlYyB2aXNpdGVkIGFsbCByZXN1bHRzICovDQotCQkJYnJlYWs7DQor CQkJLyogZmFsbCBiYWNrIHRvIHRoZSBnZW5lcmljIHF1ZXJ5IG91dHB1dCBz dHJlYW0gKi8NCisJCQljb3B5c3RyZWFtID0gcHNldC5xdWVyeUZvdXQ7DQog CQl9DQogDQorCQlzdWNjZXNzID0gaGFuZGxlQ29weU91dChwc2V0LmRiLA0K KwkJCQkJCQkJY29weXN0cmVhbSwNCisJCQkJCQkJCSZjb3B5X3Jlc3VsdCkN CisJCQkmJiBzdWNjZXNzDQorCQkJJiYgKGNvcHlzdHJlYW0gIT0gTlVMTCk7 DQorDQogCQkvKg0KLQkJICogQ2hlY2sgUFFnZXRSZXN1bHQoKSBhZ2Fpbi4g IEluIHRoZSB0eXBpY2FsIGNhc2Ugb2YgYSBzaW5nbGUtY29tbWFuZA0KLQkJ ICogc3RyaW5nLCBpdCB3aWxsIHJldHVybiBOVUxMLiAgT3RoZXJ3aXNlLCB3 ZSdsbCBoYXZlIG90aGVyIHJlc3VsdHMNCi0JCSAqIHRvIHByb2Nlc3MgdGhh dCBtYXkgaW5jbHVkZSBvdGhlciBDT1BZcy4gIFdlIGtlZXAgdGhlIGxhc3Qg cmVzdWx0Lg0KKwkJICogU3VwcHJlc3Mgc3RhdHVzIHByaW50aW5nIGlmIHRo ZSByZXBvcnQgd291bGQgZ28gdG8gdGhlIHNhbWUNCisJCSAqIHBsYWNlIGFz IHRoZSBDT1BZIGRhdGEganVzdCB3ZW50LiAgTm90ZSB0aGlzIGRvZXNuJ3QN CisJCSAqIHByZXZlbnQgZXJyb3IgcmVwb3J0aW5nLCBzaW5jZSBoYW5kbGVD b3B5T3V0IGRpZCB0aGF0Lg0KIAkJICovDQotCQluZXh0X3Jlc3VsdCA9IFBR Z2V0UmVzdWx0KHBzZXQuZGIpOw0KLQkJaWYgKCFuZXh0X3Jlc3VsdCkNCi0J CQlicmVhazsNCisJCWlmIChjb3B5c3RyZWFtID09IHBzZXQucXVlcnlGb3V0 KQ0KKwkJew0KKwkJCVBRY2xlYXIoY29weV9yZXN1bHQpOw0KKwkJCWNvcHlf cmVzdWx0ID0gTlVMTDsNCisJCX0NCiANCi0JCVBRY2xlYXIoKnJlc3VsdHMp Ow0KLQkJKnJlc3VsdHMgPSBuZXh0X3Jlc3VsdDsNCi0JCWZpcnN0X2N5Y2xl ID0gZmFsc2U7DQorCQlpZiAobmVlZF9jbG9zZSkNCisJCXsNCisJCQkvKiBj bG9zZSBcZyBhcmd1bWVudCBmaWxlL3BpcGUgKi8NCisJCQlpZiAoaXNfcGlw ZSkNCisJCQl7DQorCQkJCXBjbG9zZShjb3B5c3RyZWFtKTsNCisJCQkJcmVz dG9yZV9zaWdwaXBlX3RyYXAoKTsNCisJCQl9DQorCQkJZWxzZQ0KKwkJCXsN CisJCQkJZmNsb3NlKGNvcHlzdHJlYW0pOw0KKwkJCX0NCisJCX0NCiAJfQ0K KwllbHNlDQorCXsNCisJCS8qIENPUFkgSU4gKi8NCisJCWNvcHlzdHJlYW0g PSBwc2V0LmNvcHlTdHJlYW0gPyBwc2V0LmNvcHlTdHJlYW0gOiBwc2V0LmN1 cl9jbWRfc291cmNlOw0KKwkJc3VjY2VzcyA9IGhhbmRsZUNvcHlJbihwc2V0 LmRiLA0KKwkJCQkJCQkgICBjb3B5c3RyZWFtLA0KKwkJCQkJCQkgICBQUWJp bmFyeVR1cGxlcygqcmVzdWx0KSwNCisJCQkJCQkJICAgJmNvcHlfcmVzdWx0 KSAmJiBzdWNjZXNzOw0KKwl9DQorCVJlc2V0Q2FuY2VsQ29ubigpOw0KIA0K LQlTZXRSZXN1bHRWYXJpYWJsZXMoKnJlc3VsdHMsIHN1Y2Nlc3MpOw0KLQ0K LQkvKiBtYXkgbmVlZCB0aGlzIHRvIHJlY292ZXIgZnJvbSBjb25uIGxvc3Mg ZHVyaW5nIENPUFkgKi8NCi0JaWYgKCFmaXJzdF9jeWNsZSAmJiAhQ2hlY2tD b25uZWN0aW9uKCkpDQotCQlyZXR1cm4gZmFsc2U7DQorCVBRY2xlYXIoKnJl c3VsdCk7DQorCSpyZXN1bHQgPSBjb3B5X3Jlc3VsdDsNCiANCiAJcmV0dXJu IHN1Y2Nlc3M7DQogfQ0KIA0KLQ0KIC8qDQogICogUHJpbnRRdWVyeVN0YXR1 czogcmVwb3J0IGNvbW1hbmQgc3RhdHVzIGFzIHJlcXVpcmVkDQogICoNCi0g KiBOb3RlOiBVdGlsaXR5IGZ1bmN0aW9uIGZvciB1c2UgYnkgUHJpbnRRdWVy eVJlc3VsdHMoKSBvbmx5Lg0KKyAqIE5vdGU6IFV0aWxpdHkgZnVuY3Rpb24g Zm9yIHVzZSBieSBIYW5kbGVRdWVyeVJlc3VsdCgpIG9ubHkuDQogICovDQog c3RhdGljIHZvaWQNCiBQcmludFF1ZXJ5U3RhdHVzKFBHcmVzdWx0ICpyZXN1 bHRzKQ0KQEAgLTEyMTksNDMgKzExMzYsNDkgQEAgUHJpbnRRdWVyeVN0YXR1 cyhQR3Jlc3VsdCAqcmVzdWx0cykNCiANCiANCiAvKg0KLSAqIFByaW50UXVl cnlSZXN1bHRzOiBwcmludCBvdXQgKG9yIHN0b3JlIG9yIGV4ZWN1dGUpIHF1 ZXJ5IHJlc3VsdHMgYXMgcmVxdWlyZWQNCi0gKg0KLSAqIE5vdGU6IFV0aWxp dHkgZnVuY3Rpb24gZm9yIHVzZSBieSBTZW5kUXVlcnkoKSBvbmx5Lg0KKyAq IEhhbmRsZVF1ZXJ5UmVzdWx0OiBwcmludCBvdXQsIHN0b3JlIG9yIGV4ZWN1 dGUgb25lIHF1ZXJ5IHJlc3VsdA0KKyAqIGFzIHJlcXVpcmVkLg0KICAqDQog ICogUmV0dXJucyB0cnVlIGlmIHRoZSBxdWVyeSBleGVjdXRlZCBzdWNjZXNz ZnVsbHksIGZhbHNlIG90aGVyd2lzZS4NCiAgKi8NCiBzdGF0aWMgYm9vbA0K LVByaW50UXVlcnlSZXN1bHRzKFBHcmVzdWx0ICpyZXN1bHRzKQ0KK0hhbmRs ZVF1ZXJ5UmVzdWx0KFBHcmVzdWx0ICpyZXN1bHQsIGJvb2wgbGFzdCkNCiB7 DQogCWJvb2wJCXN1Y2Nlc3M7DQogCWNvbnN0IGNoYXIgKmNtZHN0YXR1czsN CiANCi0JaWYgKCFyZXN1bHRzKQ0KKwlpZiAocmVzdWx0ID09IE5VTEwpDQog CQlyZXR1cm4gZmFsc2U7DQogDQotCXN3aXRjaCAoUFFyZXN1bHRTdGF0dXMo cmVzdWx0cykpDQorCXN3aXRjaCAoUFFyZXN1bHRTdGF0dXMocmVzdWx0KSkN CiAJew0KIAkJY2FzZSBQR1JFU19UVVBMRVNfT0s6DQogCQkJLyogc3RvcmUg b3IgZXhlY3V0ZSBvciBwcmludCB0aGUgZGF0YSAuLi4gKi8NCi0JCQlpZiAo cHNldC5nc2V0X3ByZWZpeCkNCi0JCQkJc3VjY2VzcyA9IFN0b3JlUXVlcnlU dXBsZShyZXN1bHRzKTsNCi0JCQllbHNlIGlmIChwc2V0LmdleGVjX2ZsYWcp DQotCQkJCXN1Y2Nlc3MgPSBFeGVjUXVlcnlUdXBsZXMocmVzdWx0cyk7DQot CQkJZWxzZSBpZiAocHNldC5jcm9zc3RhYl9mbGFnKQ0KLQkJCQlzdWNjZXNz ID0gUHJpbnRSZXN1bHRzSW5Dcm9zc3RhYihyZXN1bHRzKTsNCisJCQlpZiAo bGFzdCAmJiBwc2V0LmdzZXRfcHJlZml4KQ0KKwkJCQlzdWNjZXNzID0gU3Rv cmVRdWVyeVR1cGxlKHJlc3VsdCk7DQorCQkJZWxzZSBpZiAobGFzdCAmJiBw c2V0LmdleGVjX2ZsYWcpDQorCQkJCXN1Y2Nlc3MgPSBFeGVjUXVlcnlUdXBs ZXMocmVzdWx0KTsNCisJCQllbHNlIGlmIChsYXN0ICYmIHBzZXQuY3Jvc3N0 YWJfZmxhZykNCisJCQkJc3VjY2VzcyA9IFByaW50UmVzdWx0c0luQ3Jvc3N0 YWIocmVzdWx0KTsNCisJCQllbHNlIGlmIChsYXN0IHx8IHBzZXQuc2hvd19h bGxfcmVzdWx0cykNCisJCQkJc3VjY2VzcyA9IFByaW50UXVlcnlUdXBsZXMo cmVzdWx0KTsNCisJCQkJLyogaWYgaXQncyBJTlNFUlQvVVBEQVRFL0RFTEVU RSBSRVRVUk5JTkcsIGFsc28gcHJpbnQgc3RhdHVzICovDQogCQkJZWxzZQ0K LQkJCQlzdWNjZXNzID0gUHJpbnRRdWVyeVR1cGxlcyhyZXN1bHRzKTsNCi0J CQkvKiBpZiBpdCdzIElOU0VSVC9VUERBVEUvREVMRVRFIFJFVFVSTklORywg YWxzbyBwcmludCBzdGF0dXMgKi8NCi0JCQljbWRzdGF0dXMgPSBQUWNtZFN0 YXR1cyhyZXN1bHRzKTsNCi0JCQlpZiAoc3RybmNtcChjbWRzdGF0dXMsICJJ TlNFUlQiLCA2KSA9PSAwIHx8DQotCQkJCXN0cm5jbXAoY21kc3RhdHVzLCAi VVBEQVRFIiwgNikgPT0gMCB8fA0KLQkJCQlzdHJuY21wKGNtZHN0YXR1cywg IkRFTEVURSIsIDYpID09IDApDQotCQkJCVByaW50UXVlcnlTdGF0dXMocmVz dWx0cyk7DQorCQkJCXN1Y2Nlc3MgPSB0cnVlOw0KKw0KKwkJCWlmIChsYXN0 IHx8IHBzZXQuc2hvd19hbGxfcmVzdWx0cykNCisJCQl7DQorCQkJCWNtZHN0 YXR1cyA9IFBRY21kU3RhdHVzKHJlc3VsdCk7DQorCQkJCWlmIChzdHJuY21w KGNtZHN0YXR1cywgIklOU0VSVCIsIDYpID09IDAgfHwNCisJCQkJCXN0cm5j bXAoY21kc3RhdHVzLCAiVVBEQVRFIiwgNikgPT0gMCB8fA0KKwkJCQkJc3Ry bmNtcChjbWRzdGF0dXMsICJERUxFVEUiLCA2KSA9PSAwKQ0KKwkJCQkJUHJp bnRRdWVyeVN0YXR1cyhyZXN1bHQpOw0KKwkJCX0NCiAJCQlicmVhazsNCiAN CiAJCWNhc2UgUEdSRVNfQ09NTUFORF9PSzoNCi0JCQlQcmludFF1ZXJ5U3Rh dHVzKHJlc3VsdHMpOw0KKwkJCWlmIChsYXN0IHx8IHBzZXQuc2hvd19hbGxf cmVzdWx0cykNCisJCQkJUHJpbnRRdWVyeVN0YXR1cyhyZXN1bHQpOw0KIAkJ CXN1Y2Nlc3MgPSB0cnVlOw0KIAkJCWJyZWFrOw0KIA0KQEAgLTEyNjUsNyAr MTE4OCw3IEBAIFByaW50UXVlcnlSZXN1bHRzKFBHcmVzdWx0ICpyZXN1bHRz KQ0KIA0KIAkJY2FzZSBQR1JFU19DT1BZX09VVDoNCiAJCWNhc2UgUEdSRVNf Q09QWV9JTjoNCi0JCQkvKiBub3RoaW5nIHRvIGRvIGhlcmUgKi8NCisJCQkv KiBub3RoaW5nIHRvIGRvIGhlcmU6IGFscmVhZHkgcHJvY2Vzc2VkICovDQog CQkJc3VjY2VzcyA9IHRydWU7DQogCQkJYnJlYWs7DQogDQpAQCAtMTI3OCw3 ICsxMjAxLDcgQEAgUHJpbnRRdWVyeVJlc3VsdHMoUEdyZXN1bHQgKnJlc3Vs dHMpDQogCQlkZWZhdWx0Og0KIAkJCXN1Y2Nlc3MgPSBmYWxzZTsNCiAJCQlw Z19sb2dfZXJyb3IoInVuZXhwZWN0ZWQgUFFyZXN1bHRTdGF0dXM6ICVkIiwN Ci0JCQkJCQkgUFFyZXN1bHRTdGF0dXMocmVzdWx0cykpOw0KKwkJCQkJCSBQ UXJlc3VsdFN0YXR1cyhyZXN1bHQpKTsNCiAJCQlicmVhazsNCiAJfQ0KIA0K QEAgLTEyODcsNiArMTIxMCwxNTMgQEAgUHJpbnRRdWVyeVJlc3VsdHMoUEdy ZXN1bHQgKnJlc3VsdHMpDQogCXJldHVybiBzdWNjZXNzOw0KIH0NCiANCisv Kg0KKyAqIERhdGEgc3RydWN0dXJlIGFuZCBmdW5jdGlvbnMgdG8gcmVjb3Jk IG5vdGljZXMgd2hpbGUgdGhleSBhcmUNCisgKiBlbWl0dGVkLCBzbyB0aGF0 IHRoZXkgY2FuIGJlIHNob3duIGxhdGVyLg0KKyAqDQorICogV2UgbmVlZCB0 byBrbm93IHdoaWNoIHJlc3VsdCBpcyBsYXN0LCB3aGljaCByZXF1aXJlcyB0 byBleHRyYWN0DQorICogb25lIHJlc3VsdCBpbiBhZHZhbmNlLCBoZW5jZSB0 d28gYnVmZmVycyBhcmUgbmVlZGVkLg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0 IHsNCisJYm9vbAkJCWluX2ZsaXA7DQorCVBRRXhwQnVmZmVyRGF0YQlmbGlw Ow0KKwlQUUV4cEJ1ZmZlckRhdGEJZmxvcDsNCit9IHRfbm90aWNlX21lc3Nh Z2VzOw0KKw0KK3N0YXRpYyB2b2lkDQorQXBwZW5kTm90aWNlTWVzc2FnZSh2 b2lkICphcmcsIGNvbnN0IGNoYXIgKm1zZykNCit7DQorCXRfbm90aWNlX21l c3NhZ2VzICpub3RlcyA9ICh0X25vdGljZV9tZXNzYWdlcyopIGFyZzsNCisJ YXBwZW5kUFFFeHBCdWZmZXJTdHIobm90ZXMtPmluX2ZsaXAgPyAmbm90ZXMt PmZsaXAgOiAmbm90ZXMtPmZsb3AsIG1zZyk7DQorfQ0KKw0KK3N0YXRpYyB2 b2lkDQorU2hvd05vdGljZU1lc3NhZ2UodF9ub3RpY2VfbWVzc2FnZXMgKm5v dGVzKQ0KK3sNCisJUFFFeHBCdWZmZXJEYXRhCSpjdXJyZW50ID0gbm90ZXMt PmluX2ZsaXAgPyAmbm90ZXMtPmZsaXAgOiAmbm90ZXMtPmZsb3A7DQorCWlm IChjdXJyZW50LT5kYXRhICE9IE5VTEwgJiYgKmN1cnJlbnQtPmRhdGEgIT0g J1wwJykNCisJCXBnX2xvZ19pbmZvKCIlcyIsIGN1cnJlbnQtPmRhdGEpOw0K KwlyZXNldFBRRXhwQnVmZmVyKGN1cnJlbnQpOw0KK30NCisNCisvKg0KKyAq IFNlbmRRdWVyeUFuZFByb2Nlc3NSZXN1bHRzOiB1dGlsaXR5IGZ1bmN0aW9u IGZvciB1c2UgYnkgU2VuZFF1ZXJ5KCkgb25seQ0KKyAqDQorICogU2VuZHMg cXVlcnkgYW5kIGN5Y2xlcyB0aHJvdWdoIFBHcmVzdWx0IG9iamVjdHMuDQor ICoNCisgKiBXaGVuIG91ciBjb21tYW5kIHN0cmluZyBjb250YWluZWQgYSBD T1BZIEZST00gU1RESU4gb3IgQ09QWSBUTyBTVERPVVQsDQorICogdGhlIFBH cmVzdWx0IGFzc29jaWF0ZWQgd2l0aCB0aGVzZSBjb21tYW5kcyBtdXN0IGJl IHByb2Nlc3NlZC4gIEluIHRoYXQNCisgKiBldmVudCwgd2UnbGwgbWFyc2hh bCBkYXRhIGZvciB0aGUgQ09QWS4NCisgKg0KKyAqIFJldHVybnMgdHJ1ZSBv biBjb21wbGV0ZSBzdWNjZXNzLCBmYWxzZSBvdGhlcndpc2UuICBQb3NzaWJs ZSBmYWlsdXJlIG1vZGVzDQorICogaW5jbHVkZSBwdXJlbHkgY2xpZW50LXNp ZGUgcHJvYmxlbXM7IGNoZWNrIHRoZSB0cmFuc2FjdGlvbiBzdGF0dXMgZm9y IHRoZQ0KKyAqIHNlcnZlci1zaWRlIG9waW5pb24uDQorICoNCisgKiBOb3Rl IHRoYXQgb24gYSBjb21iaW5lZCBxdWVyeSwgZmFpbHVyZSBkb2VzIG5vdCBt ZWFuIHRoYXQgbm90aGluZyB3YXMNCisgKiBjb21taXR0ZWQuDQorICovDQor c3RhdGljIGJvb2wNCitTZW5kUXVlcnlBbmRQcm9jZXNzUmVzdWx0cyhjb25z dCBjaGFyICpxdWVyeSwgZG91YmxlICpwZWxhcHNlZF9tc2VjKQ0KK3sNCisJ Ym9vbAkJCQlzdWNjZXNzOw0KKwlpbnN0cl90aW1lCQkJYmVmb3JlOw0KKwlQ R3Jlc3VsdAkJICAgKnJlc3VsdDsNCisJdF9ub3RpY2VfbWVzc2FnZXMJbm90 ZXM7DQorDQorCWlmIChwc2V0LnRpbWluZykNCisJCUlOU1RSX1RJTUVfU0VU X0NVUlJFTlQoYmVmb3JlKTsNCisNCisJc3VjY2VzcyA9IFBRc2VuZFF1ZXJ5 KHBzZXQuZGIsIHF1ZXJ5KTsNCisJUmVzZXRDYW5jZWxDb25uKCk7DQorDQor CWlmICghc3VjY2VzcykNCisJCXJldHVybiBmYWxzZTsNCisNCisJLyogaW50 ZXJjZXB0IG5vdGljZXMgKi8NCisJbm90ZXMuaW5fZmxpcCA9IHRydWU7DQor CWluaXRQUUV4cEJ1ZmZlcigmbm90ZXMuZmxpcCk7DQorCWluaXRQUUV4cEJ1 ZmZlcigmbm90ZXMuZmxvcCk7DQorCVBRc2V0Tm90aWNlUHJvY2Vzc29yKHBz ZXQuZGIsIEFwcGVuZE5vdGljZU1lc3NhZ2UsICZub3Rlcyk7DQorDQorCS8q IGZpcnN0IHJlc3VsdCAqLw0KKwlyZXN1bHQgPSBQUWdldFJlc3VsdChwc2V0 LmRiKTsNCisNCisJd2hpbGUgKHJlc3VsdCAhPSBOVUxMKQ0KKwl7DQorCQlF eGVjU3RhdHVzVHlwZSByZXN1bHRfc3RhdHVzOw0KKwkJUEdyZXN1bHQgICAq bmV4dF9yZXN1bHQ7DQorCQlib29sCQlsYXN0Ow0KKw0KKwkJaWYgKCFBY2Nl cHRSZXN1bHQocmVzdWx0LCBmYWxzZSkpDQorCQl7DQorCQkJLyogc29tZSBl cnJvciBvY2N1cmVkLCByZWNvcmQgdGhhdCAqLw0KKwkJCVNob3dOb3RpY2VN ZXNzYWdlKCZub3Rlcyk7DQorCQkJU2hvd0Vycm9yTWVzc2FnZShyZXN1bHQp Ow0KKwkJCVNldFJlc3VsdFZhcmlhYmxlcyhyZXN1bHQsIGZhbHNlKTsNCisJ CQlDbGVhck9yU2F2ZVJlc3VsdChyZXN1bHQpOw0KKwkJCXN1Y2Nlc3MgPSBm YWxzZTsNCisNCisJCQkvKiBhbmQgc3dpdGNoIHRvIG5leHQgcmVzdWx0ICov DQorCQkJcmVzdWx0ID0gUFFnZXRSZXN1bHQocHNldC5kYik7DQorCQkJY29u dGludWU7DQorCQl9DQorDQorCQkvKiBtdXN0IGhhbmRsZSBDT1BZIGJlZm9y ZSBjaGFuZ2luZyB0aGUgY3VycmVudCByZXN1bHQgKi8NCisJCXJlc3VsdF9z dGF0dXMgPSBQUXJlc3VsdFN0YXR1cyhyZXN1bHQpOw0KKwkJaWYgKHJlc3Vs dF9zdGF0dXMgPT0gUEdSRVNfQ09QWV9JTiB8fA0KKwkJCXJlc3VsdF9zdGF0 dXMgPT0gUEdSRVNfQ09QWV9PVVQpDQorCQl7DQorCQkJU2hvd05vdGljZU1l c3NhZ2UoJm5vdGVzKTsNCisJCQlIYW5kbGVDb3B5UmVzdWx0KCZyZXN1bHQp Ow0KKwkJfQ0KKw0KKwkJLyoNCisJCSAqIENoZWNrIFBRZ2V0UmVzdWx0KCkg YWdhaW4uICBJbiB0aGUgdHlwaWNhbCBjYXNlIG9mIGEgc2luZ2xlLWNvbW1h bmQNCisJCSAqIHN0cmluZywgaXQgd2lsbCByZXR1cm4gTlVMTC4gIE90aGVy d2lzZSwgd2UnbGwgaGF2ZSBvdGhlciByZXN1bHRzDQorCQkgKiB0byBwcm9j ZXNzIHRoYXQgbWF5IGluY2x1ZGUgb3RoZXIgQ09QWXMuDQorCQkgKi8NCisJ CW5vdGVzLmluX2ZsaXAgPSAhbm90ZXMuaW5fZmxpcDsNCisJCW5leHRfcmVz dWx0ID0gUFFnZXRSZXN1bHQocHNldC5kYik7DQorCQlub3Rlcy5pbl9mbGlw ID0gIW5vdGVzLmluX2ZsaXA7DQorCQlsYXN0ID0gKG5leHRfcmVzdWx0ID09 IE5VTEwpOw0KKw0KKwkJLyogdGltaW5nIG1lYXN1cmUgYmVmb3JlIHByaW50 aW5nIHRoZSBsYXN0IHJlc3VsdCAqLw0KKwkJaWYgKGxhc3QgJiYgcHNldC50 aW1pbmcpDQorCQl7DQorCQkJaW5zdHJfdGltZQlub3c7DQorCQkJSU5TVFJf VElNRV9TRVRfQ1VSUkVOVChub3cpOw0KKwkJCUlOU1RSX1RJTUVfU1VCVFJB Q1Qobm93LCBiZWZvcmUpOw0KKwkJCSpwZWxhcHNlZF9tc2VjID0gSU5TVFJf VElNRV9HRVRfTUlMTElTRUMobm93KTsNCisJCX0NCisNCisJCS8qIG5vdGlj ZXMgYWxyZWFkeSBzaG93IGFib3ZlIGZvciBjb3B5ICovDQorCQlTaG93Tm90 aWNlTWVzc2FnZSgmbm90ZXMpOw0KKw0KKwkJLyogdGhpcyBtYXkgb3IgbWF5 IG5vdCBwcmludCBzb21ldGhpbmcgZGVwZW5kaW5nIG9uIHNldHRpbmdzICov DQorCQlpZiAocmVzdWx0ICE9IE5VTEwpDQorCQkJc3VjY2VzcyAmPSBIYW5k bGVRdWVyeVJlc3VsdChyZXN1bHQsIGxhc3QpOw0KKw0KKwkJLyogc2V0IHZh cmlhYmxlcyBvbiBsYXN0IHJlc3VsdCBpZiBhbGwgd2VudCB3ZWxsICovDQor CQlpZiAobGFzdCAmJiBzdWNjZXNzKQ0KKwkJCVNldFJlc3VsdFZhcmlhYmxl cyhyZXN1bHQsIHRydWUpOw0KKw0KKwkJQ2xlYXJPclNhdmVSZXN1bHQocmVz dWx0KTsNCisJCW5vdGVzLmluX2ZsaXAgPSAhbm90ZXMuaW5fZmxpcDsNCisJ CXJlc3VsdCA9IG5leHRfcmVzdWx0Ow0KKwl9DQorDQorCS8qIHJlc2V0IG5v dGljZSBob29rICovDQorCVBRc2V0Tm90aWNlUHJvY2Vzc29yKHBzZXQuZGIs IE5vdGljZVByb2Nlc3NvciwgTlVMTCk7DQorCXRlcm1QUUV4cEJ1ZmZlcigm bm90ZXMuZmxpcCk7DQorCXRlcm1QUUV4cEJ1ZmZlcigmbm90ZXMuZmxvcCk7 DQorDQorCS8qIG1heSBuZWVkIHRoaXMgdG8gcmVjb3ZlciBmcm9tIGNvbm4g bG9zcyBkdXJpbmcgQ09QWSAqLw0KKwlpZiAoIUNoZWNrQ29ubmVjdGlvbigp KQ0KKwkJcmV0dXJuIGZhbHNlOw0KKw0KKwlyZXR1cm4gc3VjY2VzczsNCit9 DQorDQogDQogLyoNCiAgKiBTZW5kUXVlcnk6IHNlbmQgdGhlIHF1ZXJ5IHN0 cmluZyB0byB0aGUgYmFja2VuZA0KQEAgLTEzMDMsNyArMTM3Myw3IEBAIFBy aW50UXVlcnlSZXN1bHRzKFBHcmVzdWx0ICpyZXN1bHRzKQ0KIGJvb2wNCiBT ZW5kUXVlcnkoY29uc3QgY2hhciAqcXVlcnkpDQogew0KLQlQR3Jlc3VsdCAg ICpyZXN1bHRzOw0KKwlQR3Jlc3VsdCAgICpyZXN1bHRzID0gTlVMTDsNCiAJ UEdUcmFuc2FjdGlvblN0YXR1c1R5cGUgdHJhbnNhY3Rpb25fc3RhdHVzOw0K IAlkb3VibGUJCWVsYXBzZWRfbXNlYyA9IDA7DQogCWJvb2wJCU9LID0gZmFs c2U7DQpAQCAtMTQwOCwyOCArMTQ3OCw3IEBAIFNlbmRRdWVyeShjb25zdCBj aGFyICpxdWVyeSkNCiAJCQkgcHNldC5jcm9zc3RhYl9mbGFnIHx8ICFpc19z ZWxlY3RfY29tbWFuZChxdWVyeSkpDQogCXsNCiAJCS8qIERlZmF1bHQgZmV0 Y2gtaXQtYWxsLWFuZC1wcmludCBtb2RlICovDQotCQlpbnN0cl90aW1lCWJl Zm9yZSwNCi0JCQkJCWFmdGVyOw0KLQ0KLQkJaWYgKHBzZXQudGltaW5nKQ0K LQkJCUlOU1RSX1RJTUVfU0VUX0NVUlJFTlQoYmVmb3JlKTsNCi0NCi0JCXJl c3VsdHMgPSBQUWV4ZWMocHNldC5kYiwgcXVlcnkpOw0KLQ0KLQkJLyogdGhl c2Ugb3BlcmF0aW9ucyBhcmUgaW5jbHVkZWQgaW4gdGhlIHRpbWluZyByZXN1 bHQ6ICovDQotCQlSZXNldENhbmNlbENvbm4oKTsNCi0JCU9LID0gUHJvY2Vz c1Jlc3VsdCgmcmVzdWx0cyk7DQotDQotCQlpZiAocHNldC50aW1pbmcpDQot CQl7DQotCQkJSU5TVFJfVElNRV9TRVRfQ1VSUkVOVChhZnRlcik7DQotCQkJ SU5TVFJfVElNRV9TVUJUUkFDVChhZnRlciwgYmVmb3JlKTsNCi0JCQllbGFw c2VkX21zZWMgPSBJTlNUUl9USU1FX0dFVF9NSUxMSVNFQyhhZnRlcik7DQot CQl9DQotDQotCQkvKiBidXQgcHJpbnRpbmcgcmVzdWx0cyBpc24ndDogKi8N Ci0JCWlmIChPSyAmJiByZXN1bHRzKQ0KLQkJCU9LID0gUHJpbnRRdWVyeVJl c3VsdHMocmVzdWx0cyk7DQorCQlPSyA9IFNlbmRRdWVyeUFuZFByb2Nlc3NS ZXN1bHRzKHF1ZXJ5LCAmZWxhcHNlZF9tc2VjKTsNCiAJfQ0KIAllbHNlDQog CXsNCkBAIC0xNjA2LDcgKzE2NTUsNyBAQCBEZXNjcmliZVF1ZXJ5KGNvbnN0 IGNoYXIgKnF1ZXJ5LCBkb3VibGUgKmVsYXBzZWRfbXNlYykNCiAJUFFjbGVh cihyZXN1bHRzKTsNCiANCiAJcmVzdWx0cyA9IFBRZGVzY3JpYmVQcmVwYXJl ZChwc2V0LmRiLCAiIik7DQotCU9LID0gQWNjZXB0UmVzdWx0KHJlc3VsdHMp ICYmDQorCU9LID0gQWNjZXB0UmVzdWx0KHJlc3VsdHMsIHRydWUpICYmDQog CQkoUFFyZXN1bHRTdGF0dXMocmVzdWx0cykgPT0gUEdSRVNfQ09NTUFORF9P Syk7DQogCWlmIChPSyAmJiByZXN1bHRzKQ0KIAl7DQpAQCAtMTY1NCw3ICsx NzAzLDcgQEAgRGVzY3JpYmVRdWVyeShjb25zdCBjaGFyICpxdWVyeSwgZG91 YmxlICplbGFwc2VkX21zZWMpDQogCQkJUFFjbGVhcihyZXN1bHRzKTsNCiAN CiAJCQlyZXN1bHRzID0gUFFleGVjKHBzZXQuZGIsIGJ1Zi5kYXRhKTsNCi0J CQlPSyA9IEFjY2VwdFJlc3VsdChyZXN1bHRzKTsNCisJCQlPSyA9IEFjY2Vw dFJlc3VsdChyZXN1bHRzLCB0cnVlKTsNCiANCiAJCQlpZiAocHNldC50aW1p bmcpDQogCQkJew0KQEAgLTE2NjQsNyArMTcxMyw3IEBAIERlc2NyaWJlUXVl cnkoY29uc3QgY2hhciAqcXVlcnksIGRvdWJsZSAqZWxhcHNlZF9tc2VjKQ0K IAkJCX0NCiANCiAJCQlpZiAoT0sgJiYgcmVzdWx0cykNCi0JCQkJT0sgPSBQ cmludFF1ZXJ5UmVzdWx0cyhyZXN1bHRzKTsNCisJCQkJT0sgPSBIYW5kbGVR dWVyeVJlc3VsdChyZXN1bHRzLCB0cnVlKTsNCiANCiAJCQl0ZXJtUFFFeHBC dWZmZXIoJmJ1Zik7DQogCQl9DQpAQCAtMTcyMyw3ICsxNzcyLDcgQEAgRXhl Y1F1ZXJ5VXNpbmdDdXJzb3IoY29uc3QgY2hhciAqcXVlcnksIGRvdWJsZSAq ZWxhcHNlZF9tc2VjKQ0KIAlpZiAoUFF0cmFuc2FjdGlvblN0YXR1cyhwc2V0 LmRiKSA9PSBQUVRSQU5TX0lETEUpDQogCXsNCiAJCXJlc3VsdHMgPSBQUWV4 ZWMocHNldC5kYiwgIkJFR0lOIik7DQotCQlPSyA9IEFjY2VwdFJlc3VsdChy ZXN1bHRzKSAmJg0KKwkJT0sgPSBBY2NlcHRSZXN1bHQocmVzdWx0cywgdHJ1 ZSkgJiYNCiAJCQkoUFFyZXN1bHRTdGF0dXMocmVzdWx0cykgPT0gUEdSRVNf Q09NTUFORF9PSyk7DQogCQlDbGVhck9yU2F2ZVJlc3VsdChyZXN1bHRzKTsN CiAJCWlmICghT0spDQpAQCAtMTczNyw3ICsxNzg2LDcgQEAgRXhlY1F1ZXJ5 VXNpbmdDdXJzb3IoY29uc3QgY2hhciAqcXVlcnksIGRvdWJsZSAqZWxhcHNl ZF9tc2VjKQ0KIAkJCQkJICBxdWVyeSk7DQogDQogCXJlc3VsdHMgPSBQUWV4 ZWMocHNldC5kYiwgYnVmLmRhdGEpOw0KLQlPSyA9IEFjY2VwdFJlc3VsdChy ZXN1bHRzKSAmJg0KKwlPSyA9IEFjY2VwdFJlc3VsdChyZXN1bHRzLCB0cnVl KSAmJg0KIAkJKFBRcmVzdWx0U3RhdHVzKHJlc3VsdHMpID09IFBHUkVTX0NP TU1BTkRfT0spOw0KIAlpZiAoIU9LKQ0KIAkJU2V0UmVzdWx0VmFyaWFibGVz KHJlc3VsdHMsIE9LKTsNCkBAIC0xODE0LDcgKzE4NjMsNyBAQCBFeGVjUXVl cnlVc2luZ0N1cnNvcihjb25zdCBjaGFyICpxdWVyeSwgZG91YmxlICplbGFw c2VkX21zZWMpDQogCQkJCWlzX3BhZ2VyID0gZmFsc2U7DQogCQkJfQ0KIA0K LQkJCU9LID0gQWNjZXB0UmVzdWx0KHJlc3VsdHMpOw0KKwkJCU9LID0gQWNj ZXB0UmVzdWx0KHJlc3VsdHMsIHRydWUpOw0KIAkJCUFzc2VydCghT0spOw0K IAkJCVNldFJlc3VsdFZhcmlhYmxlcyhyZXN1bHRzLCBPSyk7DQogCQkJQ2xl YXJPclNhdmVSZXN1bHQocmVzdWx0cyk7DQpAQCAtMTkyMyw3ICsxOTcyLDcg QEAgY2xlYW51cDoNCiAJcmVzdWx0cyA9IFBRZXhlYyhwc2V0LmRiLCAiQ0xP U0UgX3BzcWxfY3Vyc29yIik7DQogCWlmIChPSykNCiAJew0KLQkJT0sgPSBB Y2NlcHRSZXN1bHQocmVzdWx0cykgJiYNCisJCU9LID0gQWNjZXB0UmVzdWx0 KHJlc3VsdHMsIHRydWUpICYmDQogCQkJKFBRcmVzdWx0U3RhdHVzKHJlc3Vs dHMpID09IFBHUkVTX0NPTU1BTkRfT0spOw0KIAkJQ2xlYXJPclNhdmVSZXN1 bHQocmVzdWx0cyk7DQogCX0NCkBAIC0xOTMzLDcgKzE5ODIsNyBAQCBjbGVh bnVwOg0KIAlpZiAoc3RhcnRlZF90eG4pDQogCXsNCiAJCXJlc3VsdHMgPSBQ UWV4ZWMocHNldC5kYiwgT0sgPyAiQ09NTUlUIiA6ICJST0xMQkFDSyIpOw0K LQkJT0sgJj0gQWNjZXB0UmVzdWx0KHJlc3VsdHMpICYmDQorCQlPSyAmPSBB Y2NlcHRSZXN1bHQocmVzdWx0cywgdHJ1ZSkgJiYNCiAJCQkoUFFyZXN1bHRT dGF0dXMocmVzdWx0cykgPT0gUEdSRVNfQ09NTUFORF9PSyk7DQogCQlDbGVh ck9yU2F2ZVJlc3VsdChyZXN1bHRzKTsNCiAJfQ0KZGlmZiAtLWdpdCBhL3Ny Yy9iaW4vcHNxbC9oZWxwLmMgYi9zcmMvYmluL3BzcWwvaGVscC5jDQppbmRl eCA1ZmIxYmFhZGM1Li41ZDA0NDljMjZjIDEwMDY0NA0KLS0tIGEvc3JjL2Jp bi9wc3FsL2hlbHAuYw0KKysrIGIvc3JjL2Jpbi9wc3FsL2hlbHAuYw0KQEAg LTQwNCw2ICs0MDQsOCBAQCBoZWxwVmFyaWFibGVzKHVuc2lnbmVkIHNob3J0 IGludCBwYWdlcikNCiAJZnByaW50ZihvdXRwdXQsIF8oIiAgU0VSVkVSX1ZF UlNJT05fTkFNRVxuIg0KIAkJCQkJICAiICBTRVJWRVJfVkVSU0lPTl9OVU1c biINCiAJCQkJCSAgIiAgICBzZXJ2ZXIncyB2ZXJzaW9uIChpbiBzaG9ydCBz dHJpbmcgb3IgbnVtZXJpYyBmb3JtYXQpXG4iKSk7DQorCWZwcmludGYob3V0 cHV0LCBfKCIgIFNIT1dfQUxMX1JFU1VMVFNcbiINCisJCQkJCSAgIiAgICBz aG93IGFsbCByZXN1bHRzIG9mIGEgY29tYmluZWQgcXVlcnkgKFxcOykgaW5z dGVhZCBvZiBvbmx5IHRoZSBsYXN0XG4iKSk7DQogCWZwcmludGYob3V0cHV0 LCBfKCIgIFNIT1dfQ09OVEVYVFxuIg0KIAkJCQkJICAiICAgIGNvbnRyb2xz IGRpc3BsYXkgb2YgbWVzc2FnZSBjb250ZXh0IGZpZWxkcyBbbmV2ZXIsIGVy cm9ycywgYWx3YXlzXVxuIikpOw0KIAlmcHJpbnRmKG91dHB1dCwgXygiICBT SU5HTEVMSU5FXG4iDQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wc3FsL3NldHRp bmdzLmggYi9zcmMvYmluL3BzcWwvc2V0dGluZ3MuaA0KaW5kZXggNWJlNTA5 MWYwZS4uZjI2YmY3ZmM2YiAxMDA2NDQNCi0tLSBhL3NyYy9iaW4vcHNxbC9z ZXR0aW5ncy5oDQorKysgYi9zcmMvYmluL3BzcWwvc2V0dGluZ3MuaA0KQEAg LTEyNyw2ICsxMjcsNyBAQCB0eXBlZGVmIHN0cnVjdCBfcHNxbFNldHRpbmdz DQogCWJvb2wJCXF1aWV0Ow0KIAlib29sCQlzaW5nbGVsaW5lOw0KIAlib29s CQlzaW5nbGVzdGVwOw0KKwlib29sCQlzaG93X2FsbF9yZXN1bHRzOw0KIAli b29sCQloaWRlX3RhYmxlYW07DQogCWludAkJCWZldGNoX2NvdW50Ow0KIAlp bnQJCQloaXN0c2l6ZTsNCmRpZmYgLS1naXQgYS9zcmMvYmluL3BzcWwvc3Rh cnR1cC5jIGIvc3JjL2Jpbi9wc3FsL3N0YXJ0dXAuYw0KaW5kZXggYmI5OTIx YTg5NC4uOGI1MDM4ZTQ3MSAxMDA2NDQNCi0tLSBhL3NyYy9iaW4vcHNxbC9z dGFydHVwLmMNCisrKyBiL3NyYy9iaW4vcHNxbC9zdGFydHVwLmMNCkBAIC04 ODMsNiArODgzLDEyIEBAIHNpbmdsZXN0ZXBfaG9vayhjb25zdCBjaGFyICpu ZXd2YWwpDQogCXJldHVybiBQYXJzZVZhcmlhYmxlQm9vbChuZXd2YWwsICJT SU5HTEVTVEVQIiwgJnBzZXQuc2luZ2xlc3RlcCk7DQogfQ0KIA0KK3N0YXRp YyBib29sDQorc2hvd19hbGxfcmVzdWx0c19ob29rKGNvbnN0IGNoYXIgKm5l d3ZhbCkNCit7DQorCXJldHVybiBQYXJzZVZhcmlhYmxlQm9vbChuZXd2YWws ICJTSE9XX0FMTF9SRVNVTFRTIiwgJnBzZXQuc2hvd19hbGxfcmVzdWx0cyk7 DQorfQ0KKw0KIHN0YXRpYyBjaGFyICoNCiBmZXRjaF9jb3VudF9zdWJzdGl0 dXRlX2hvb2soY2hhciAqbmV3dmFsKQ0KIHsNCkBAIC0xMTgzLDYgKzExODks OSBAQCBFc3RhYmxpc2hWYXJpYWJsZVNwYWNlKHZvaWQpDQogCVNldFZhcmlh YmxlSG9va3MocHNldC52YXJzLCAiU0lOR0xFU1RFUCIsDQogCQkJCQkgYm9v bF9zdWJzdGl0dXRlX2hvb2ssDQogCQkJCQkgc2luZ2xlc3RlcF9ob29rKTsN CisJU2V0VmFyaWFibGVIb29rcyhwc2V0LnZhcnMsICJTSE9XX0FMTF9SRVNV TFRTIiwNCisJCQkJCSBib29sX3N1YnN0aXR1dGVfaG9vaywNCisJCQkJCSBz aG93X2FsbF9yZXN1bHRzX2hvb2spOw0KIAlTZXRWYXJpYWJsZUhvb2tzKHBz ZXQudmFycywgIkZFVENIX0NPVU5UIiwNCiAJCQkJCSBmZXRjaF9jb3VudF9z dWJzdGl0dXRlX2hvb2ssDQogCQkJCQkgZmV0Y2hfY291bnRfaG9vayk7DQpk aWZmIC0tZ2l0IGEvc3JjL2Jpbi9wc3FsL3RhYi1jb21wbGV0ZS5jIGIvc3Jj L2Jpbi9wc3FsL3RhYi1jb21wbGV0ZS5jDQppbmRleCBjNjM0N2I2MTkwLi40 YjI4NTM2M2FiIDEwMDY0NA0KLS0tIGEvc3JjL2Jpbi9wc3FsL3RhYi1jb21w bGV0ZS5jDQorKysgYi9zcmMvYmluL3BzcWwvdGFiLWNvbXBsZXRlLmMNCkBA IC0zNjY0LDcgKzM2NjQsNyBAQCBwc3FsX2NvbXBsZXRpb24oY29uc3QgY2hh ciAqdGV4dCwgaW50IHN0YXJ0LCBpbnQgZW5kKQ0KIAllbHNlIGlmIChUYWls TWF0Y2hlc0NTKCJcXHNldCIsIE1hdGNoQW55KSkNCiAJew0KIAkJaWYgKFRh aWxNYXRjaGVzQ1MoIkFVVE9DT01NSVR8T05fRVJST1JfU1RPUHxRVUlFVHwi DQotCQkJCQkJICAiU0lOR0xFTElORXxTSU5HTEVTVEVQIikpDQorCQkJCQkJ ICAiU0lOR0xFTElORXxTSU5HTEVTVEVQfFNIT1dfQUxMX1JFU1VMVFMiKSkN CiAJCQlDT01QTEVURV9XSVRIX0NTKCJvbiIsICJvZmYiKTsNCiAJCWVsc2Ug aWYgKFRhaWxNYXRjaGVzQ1MoIkNPTVBfS0VZV09SRF9DQVNFIikpDQogCQkJ Q09NUExFVEVfV0lUSF9DUygibG93ZXIiLCAidXBwZXIiLA0KZGlmZiAtLWdp dCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY29weTIub3V0IGIvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jb3B5Mi5vdXQNCmluZGV4IGM1M2Vk M2ViZjUuLjljOGM4MzYxZjggMTAwNjQ0DQotLS0gYS9zcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL2NvcHkyLm91dA0KKysrIGIvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9jb3B5Mi5vdXQNCkBAIC00NzUsMTAgKzQ3NSwxMCBAQCBj b3B5IGNoZWNrX2Nvbl90YmwgZnJvbSBzdGRpbjsNCiBOT1RJQ0U6ICBpbnB1 dCA9IHsiZjEiOjF9DQogTk9USUNFOiAgaW5wdXQgPSB7ImYxIjpudWxsfQ0K IGNvcHkgY2hlY2tfY29uX3RibCBmcm9tIHN0ZGluOw0KLU5PVElDRTogIGlu cHV0ID0geyJmMSI6MH0NCiBFUlJPUjogIG5ldyByb3cgZm9yIHJlbGF0aW9u ICJjaGVja19jb25fdGJsIiB2aW9sYXRlcyBjaGVjayBjb25zdHJhaW50ICJj aGVja19jb25fdGJsX2NoZWNrIg0KIERFVEFJTDogIEZhaWxpbmcgcm93IGNv bnRhaW5zICgwKS4NCiBDT05URVhUOiAgQ09QWSBjaGVja19jb25fdGJsLCBs aW5lIDE6ICIwIg0KK05PVElDRTogIGlucHV0ID0geyJmMSI6MH0NCiBzZWxl Y3QgKiBmcm9tIGNoZWNrX2Nvbl90Ymw7DQogIGYxIA0KIC0tLS0NCmRpZmYg LS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NvcHlkbWwub3V0 IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jb3B5ZG1sLm91dA0KaW5k ZXggMWI1MzM5NjJjNi4uYjVhMjI1NjI4ZiAxMDA2NDQNCi0tLSBhL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY29weWRtbC5vdXQNCisrKyBiL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY29weWRtbC5vdXQNCkBAIC04NCwxMCAr ODQsMTAgQEAgZHJvcCBydWxlIHFxcSBvbiBjb3B5ZG1sX3Rlc3Q7DQogY3Jl YXRlIGZ1bmN0aW9uIHFxcV90cmlnKCkgcmV0dXJucyB0cmlnZ2VyIGFzICQk DQogYmVnaW4NCiBpZiB0Z19vcCBpbiAoJ0lOU0VSVCcsICdVUERBVEUnKSB0 aGVuDQotICAgIHJhaXNlIG5vdGljZSAnJSAlJywgdGdfb3AsIG5ldy5pZDsN CisgICAgcmFpc2Ugbm90aWNlICclICUgJScsIHRnX3doZW4sIHRnX29wLCBu ZXcuaWQ7DQogICAgIHJldHVybiBuZXc7DQogZWxzZQ0KLSAgICByYWlzZSBu b3RpY2UgJyUgJScsIHRnX29wLCBvbGQuaWQ7DQorICAgIHJhaXNlIG5vdGlj ZSAnJSAlICUnLCB0Z193aGVuLCB0Z19vcCwgb2xkLmlkOw0KICAgICByZXR1 cm4gb2xkOw0KIGVuZCBpZjsNCiBlbmQNCkBAIC05NywxNiArOTcsMTYgQEAg Y3JlYXRlIHRyaWdnZXIgcXFxYmVmIGJlZm9yZSBpbnNlcnQgb3IgdXBkYXRl IG9yIGRlbGV0ZSBvbiBjb3B5ZG1sX3Rlc3QNCiBjcmVhdGUgdHJpZ2dlciBx cXFhZiBhZnRlciBpbnNlcnQgb3IgdXBkYXRlIG9yIGRlbGV0ZSBvbiBjb3B5 ZG1sX3Rlc3QNCiAgICAgZm9yIGVhY2ggcm93IGV4ZWN1dGUgcHJvY2VkdXJl IHFxcV90cmlnKCk7DQogY29weSAoaW5zZXJ0IGludG8gY29weWRtbF90ZXN0 ICh0KSB2YWx1ZXMgKCdmJykgcmV0dXJuaW5nIGlkKSB0byBzdGRvdXQ7DQot Tk9USUNFOiAgSU5TRVJUIDgNCitOT1RJQ0U6ICBCRUZPUkUgSU5TRVJUIDgN CiA4DQotTk9USUNFOiAgSU5TRVJUIDgNCitOT1RJQ0U6ICBBRlRFUiBJTlNF UlQgOA0KIGNvcHkgKHVwZGF0ZSBjb3B5ZG1sX3Rlc3Qgc2V0IHQgPSAnZycg d2hlcmUgdCA9ICdmJyByZXR1cm5pbmcgaWQpIHRvIHN0ZG91dDsNCi1OT1RJ Q0U6ICBVUERBVEUgOA0KK05PVElDRTogIEJFRk9SRSBVUERBVEUgOA0KIDgN Ci1OT1RJQ0U6ICBVUERBVEUgOA0KK05PVElDRTogIEFGVEVSIFVQREFURSA4 DQogY29weSAoZGVsZXRlIGZyb20gY29weWRtbF90ZXN0IHdoZXJlIHQgPSAn ZycgcmV0dXJuaW5nIGlkKSB0byBzdGRvdXQ7DQotTk9USUNFOiAgREVMRVRF IDgNCitOT1RJQ0U6ICBCRUZPUkUgREVMRVRFIDgNCiA4DQotTk9USUNFOiAg REVMRVRFIDgNCitOT1RJQ0U6ICBBRlRFUiBERUxFVEUgOA0KIGRyb3AgdGFi bGUgY29weWRtbF90ZXN0Ow0KIGRyb3AgZnVuY3Rpb24gcXFxX3RyaWcoKTsN CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BzcWwu b3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wc3FsLm91dA0KaW5k ZXggMzU4NTZiZmZkZC4uYmNhNWJmMmZlNyAxMDA2NDQNCi0tLSBhL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHNxbC5vdXQNCisrKyBiL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvcHNxbC5vdXQNCkBAIC00NzI5LDMgKzQ3Mjks ODkgQEAgZHJvcCBzY2hlbWEgdGVzdHBhcnQ7DQogc2V0IHNlYXJjaF9wYXRo IHRvIGRlZmF1bHQ7DQogc2V0IHJvbGUgdG8gZGVmYXVsdDsNCiBkcm9wIHJv bGUgdGVzdHJvbGVfcGFydGl0aW9uaW5nOw0KKy0tDQorLS0gY29tYmluZWQg cXVlcmllcyAmIFNIT1dfQUxMX1JFU1VMVFMgb3B0aW9uDQorLS0NCitcZWNo byAnIyBTSE9XX0FMTF9SRVNVTFRTIHRlc3RzJw0KKyMgU0hPV19BTExfUkVT VUxUUyB0ZXN0cw0KK0NSRUFURSBGVU5DVElPTiB3YXJuKG1zZyBURVhUKSBS RVRVUk5TIEJPT0xFQU4gQVMgJCQNCisgIEJFR0lOIFJBSVNFIE5PVElDRSAn d2FybiAlJywgbXNnIDsgUkVUVVJOIFRSVUUgOyBFTkQNCiskJCBMQU5HVUFH RSBwbHBnc3FsOw0KK1xzZXQgU0hPV19BTExfUkVTVUxUUyBvbg0KKy0tIHNo b3cgYm90aA0KK1NFTEVDVCAxIEFTIG9uZSBcOyBTRUxFQ1Qgd2FybignMS41 JykgXDsgU0VMRUNUIDIgQVMgdHdvIDsNCisgb25lIA0KKy0tLS0tDQorICAg MQ0KKygxIHJvdykNCisNCitOT1RJQ0U6ICB3YXJuIDEuNQ0KK0NPTlRFWFQ6 ICBQTC9wZ1NRTCBmdW5jdGlvbiB3YXJuKHRleHQpIGxpbmUgMiBhdCBSQUlT RQ0KKyB3YXJuIA0KKy0tLS0tLQ0KKyB0DQorKDEgcm93KQ0KKw0KKyB0d28g DQorLS0tLS0NCisgICAyDQorKDEgcm93KQ0KKw0KKy0tIFxnc2V0IGFwcGxp ZXMgdG8gbGFzdCBxdWVyeSBvbmx5DQorU0VMRUNUIDMgQVMgdGhyZWUgXDsg U0VMRUNUIHdhcm4oJzMuNScpIFw7IFNFTEVDVCA0IEFTIGZvdXIgXGdzZXQN CisgdGhyZWUgDQorLS0tLS0tLQ0KKyAgICAgMw0KKygxIHJvdykNCisNCitO T1RJQ0U6ICB3YXJuIDMuNQ0KK0NPTlRFWFQ6ICBQTC9wZ1NRTCBmdW5jdGlv biB3YXJuKHRleHQpIGxpbmUgMiBhdCBSQUlTRQ0KKyB3YXJuIA0KKy0tLS0t LQ0KKyB0DQorKDEgcm93KQ0KKw0KK1xlY2hvIDp0aHJlZSA6Zm91cg0KKzp0 aHJlZSA0DQorLS0gc3ludGF4IGVycm9yIHN0b3BzIGFsbCBwcm9jZXNzaW5n DQorU0VMRUNUIDUgXDsgU0VMRUNUIDYgKyBcOyBTRUxFQ1Qgd2FybignNi41 JykgXDsgU0VMRUNUIDcgOw0KK0VSUk9SOiAgc3ludGF4IGVycm9yIGF0IG9y IG5lYXIgIjsiDQorTElORSAxOiBTRUxFQ1QgNSA7IFNFTEVDVCA2ICsgOyBT RUxFQ1Qgd2FybignNi41JykgOyBTRUxFQ1QgNyA7DQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXg0KKy0tIHdpdGggYWJvcnRlZCB0cmFuc2Fj dGlvbiwgc3RvcCBvbiBmaXJzdCBlcnJvcg0KK0JFR0lOIFw7IFNFTEVDVCA4 IEFTIGVpZ2h0IFw7IFNFTEVDVCA5LzAgQVMgbmluZSBcOyBST0xMQkFDSyBc OyBTRUxFQ1QgMTAgQVMgdGVuIDsNCisgZWlnaHQgDQorLS0tLS0tLQ0KKyAg ICAgOA0KKygxIHJvdykNCisNCitFUlJPUjogIGRpdmlzaW9uIGJ5IHplcm8N CistLSBjbG9zZSBwcmV2aW91c2x5IGFib3J0ZWQgdHJhbnNhY3Rpb24NCitS T0xMQkFDSzsNCistLSBtaXNjIFNRTCBjb21tYW5kcw0KKy0tIChub24gU0VM RUNUIG91dHB1dCBpcyBzZW50IHRvIHN0ZGVyciwgdGh1cyBpcyBub3Qgc2hv d24gaW4gZXhwZWN0ZWQgcmVzdWx0cykNCitTRUxFQ1QgJ29rJyBBUyAiYmVn aW4iIFw7DQorQ1JFQVRFIFRBQkxFIHBzcWxfY29taWNzKHMgVEVYVCkgXDsN CitJTlNFUlQgSU5UTyBwc3FsX2NvbWljcyBWQUxVRVMgKCdDYWx2aW4nKSwg KCdob2JiZXMnKSBcOw0KK0NPUFkgcHNxbF9jb21pY3MgRlJPTSBTVERJTiBc Ow0KK1VQREFURSBwc3FsX2NvbWljcyBTRVQgcyA9ICdIb2JiZXMnIFdIRVJF IHMgPSAnaG9iYmVzJyBcOw0KK0RFTEVURSBGUk9NIHBzcWxfY29taWNzIFdI RVJFIHMgPSAnTW9lJyBcOw0KK0NPUFkgcHNxbF9jb21pY3MgVE8gU1RET1VU IFw7DQorVFJVTkNBVEUgcHNxbF9jb21pY3MgXDsNCitEUk9QIFRBQkxFIHBz cWxfY29taWNzIFw7DQorU0VMRUNUICdvaycgQVMgImRvbmUiIDsNCisgYmVn aW4gDQorLS0tLS0tLQ0KKyBvaw0KKygxIHJvdykNCisNCitDYWx2aW4NCitT dXNpZQ0KK0hvYmJlcw0KKyBkb25lIA0KKy0tLS0tLQ0KKyBvaw0KKygxIHJv dykNCisNCitcc2V0IFNIT1dfQUxMX1JFU1VMVFMgb2ZmDQorRFJPUCBGVU5D VElPTiB3YXJuKFRFWFQpOw0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jl c3Mvc3FsL2NvcHlkbWwuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY29w eWRtbC5zcWwNCmluZGV4IDlhMjlmOWM5YWMuLjQ1NzgzNDIyNTMgMTAwNjQ0 DQotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9jb3B5ZG1sLnNxbA0KKysr IGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY29weWRtbC5zcWwNCkBAIC03MCwx MCArNzAsMTAgQEAgZHJvcCBydWxlIHFxcSBvbiBjb3B5ZG1sX3Rlc3Q7DQog Y3JlYXRlIGZ1bmN0aW9uIHFxcV90cmlnKCkgcmV0dXJucyB0cmlnZ2VyIGFz ICQkDQogYmVnaW4NCiBpZiB0Z19vcCBpbiAoJ0lOU0VSVCcsICdVUERBVEUn KSB0aGVuDQotICAgIHJhaXNlIG5vdGljZSAnJSAlJywgdGdfb3AsIG5ldy5p ZDsNCisgICAgcmFpc2Ugbm90aWNlICclICUgJScsIHRnX3doZW4sIHRnX29w LCBuZXcuaWQ7DQogICAgIHJldHVybiBuZXc7DQogZWxzZQ0KLSAgICByYWlz ZSBub3RpY2UgJyUgJScsIHRnX29wLCBvbGQuaWQ7DQorICAgIHJhaXNlIG5v dGljZSAnJSAlICUnLCB0Z193aGVuLCB0Z19vcCwgb2xkLmlkOw0KICAgICBy ZXR1cm4gb2xkOw0KIGVuZCBpZjsNCiBlbmQNCmRpZmYgLS1naXQgYS9zcmMv dGVzdC9yZWdyZXNzL3NxbC9wc3FsLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mv c3FsL3BzcWwuc3FsDQppbmRleCA3OGY0YjVkN2Q1Li4wM2EzNzhkZTNkIDEw MDY0NA0KLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcHNxbC5zcWwNCisr KyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3BzcWwuc3FsDQpAQCAtMTExNSwz ICsxMTE1LDQwIEBAIHNldCBzZWFyY2hfcGF0aCB0byBkZWZhdWx0Ow0KIA0K IHNldCByb2xlIHRvIGRlZmF1bHQ7DQogZHJvcCByb2xlIHRlc3Ryb2xlX3Bh cnRpdGlvbmluZzsNCisNCistLQ0KKy0tIGNvbWJpbmVkIHF1ZXJpZXMgJiBT SE9XX0FMTF9SRVNVTFRTIG9wdGlvbg0KKy0tDQorXGVjaG8gJyMgU0hPV19B TExfUkVTVUxUUyB0ZXN0cycNCitDUkVBVEUgRlVOQ1RJT04gd2Fybihtc2cg VEVYVCkgUkVUVVJOUyBCT09MRUFOIEFTICQkDQorICBCRUdJTiBSQUlTRSBO T1RJQ0UgJ3dhcm4gJScsIG1zZyA7IFJFVFVSTiBUUlVFIDsgRU5EDQorJCQg TEFOR1VBR0UgcGxwZ3NxbDsNCitcc2V0IFNIT1dfQUxMX1JFU1VMVFMgb24N CistLSBzaG93IGJvdGgNCitTRUxFQ1QgMSBBUyBvbmUgXDsgU0VMRUNUIHdh cm4oJzEuNScpIFw7IFNFTEVDVCAyIEFTIHR3byA7DQorLS0gXGdzZXQgYXBw bGllcyB0byBsYXN0IHF1ZXJ5IG9ubHkNCitTRUxFQ1QgMyBBUyB0aHJlZSBc OyBTRUxFQ1Qgd2FybignMy41JykgXDsgU0VMRUNUIDQgQVMgZm91ciBcZ3Nl dA0KK1xlY2hvIDp0aHJlZSA6Zm91cg0KKy0tIHN5bnRheCBlcnJvciBzdG9w cyBhbGwgcHJvY2Vzc2luZw0KK1NFTEVDVCA1IFw7IFNFTEVDVCA2ICsgXDsg U0VMRUNUIHdhcm4oJzYuNScpIFw7IFNFTEVDVCA3IDsNCistLSB3aXRoIGFi b3J0ZWQgdHJhbnNhY3Rpb24sIHN0b3Agb24gZmlyc3QgZXJyb3INCitCRUdJ TiBcOyBTRUxFQ1QgOCBBUyBlaWdodCBcOyBTRUxFQ1QgOS8wIEFTIG5pbmUg XDsgUk9MTEJBQ0sgXDsgU0VMRUNUIDEwIEFTIHRlbiA7DQorLS0gY2xvc2Ug cHJldmlvdXNseSBhYm9ydGVkIHRyYW5zYWN0aW9uDQorUk9MTEJBQ0s7DQor LS0gbWlzYyBTUUwgY29tbWFuZHMNCistLSAobm9uIFNFTEVDVCBvdXRwdXQg aXMgc2VudCB0byBzdGRlcnIsIHRodXMgaXMgbm90IHNob3duIGluIGV4cGVj dGVkIHJlc3VsdHMpDQorU0VMRUNUICdvaycgQVMgImJlZ2luIiBcOw0KK0NS RUFURSBUQUJMRSBwc3FsX2NvbWljcyhzIFRFWFQpIFw7DQorSU5TRVJUIElO VE8gcHNxbF9jb21pY3MgVkFMVUVTICgnQ2FsdmluJyksICgnaG9iYmVzJykg XDsNCitDT1BZIHBzcWxfY29taWNzIEZST00gU1RESU4gXDsNCitVUERBVEUg cHNxbF9jb21pY3MgU0VUIHMgPSAnSG9iYmVzJyBXSEVSRSBzID0gJ2hvYmJl cycgXDsNCitERUxFVEUgRlJPTSBwc3FsX2NvbWljcyBXSEVSRSBzID0gJ01v ZScgXDsNCitDT1BZIHBzcWxfY29taWNzIFRPIFNURE9VVCBcOw0KK1RSVU5D QVRFIHBzcWxfY29taWNzIFw7DQorRFJPUCBUQUJMRSBwc3FsX2NvbWljcyBc Ow0KK1NFTEVDVCAnb2snIEFTICJkb25lIiA7DQorTW9lDQorU3VzaWUNCitc Lg0KK1xzZXQgU0hPV19BTExfUkVTVUxUUyBvZmYNCitEUk9QIEZVTkNUSU9O IHdhcm4oVEVYVCk7DQo= --8323329-870365450-1558624281=:28482--