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 1tWLmp-00Fya2-1E for pgsql-hackers@arkaria.postgresql.org; Fri, 10 Jan 2025 20:39:20 +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 1tWLmn-002ex5-Vx for pgsql-hackers@arkaria.postgresql.org; Fri, 10 Jan 2025 20:39:17 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tWLmn-002ewq-3V for pgsql-hackers@lists.postgresql.org; Fri, 10 Jan 2025 20:39:17 +0000 Received: from mail.postgrespro.ru ([93.174.131.139]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1tWLmh-000w1H-04 for pgsql-hackers@lists.postgresql.org; Fri, 10 Jan 2025 20:39:15 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mx2023; t=1736541547; bh=81y2Qor74YA3qNanUgZqEovqH3HLQbgU5ehy0xT9ZH0=; h=Date:From:To:Cc:Subject:In-Reply-To:References:Message-ID:From; b=ZItUyaDqTW4dMHxG2karzW0W840q+Oyo2KDAFLgz40QQoBDMfXnJf2WL0Qcn1Qbym 0OSq5mdsqxob4oIjSAu8FyfD8dwdw/s7sXcXfMoiq2UpXMV/derSgx/dca9WOv4Di6 H9OP2QpfTFQvU6TDmEbF5hbETjCwbbzJss8cGtvNNwvNvDbNR0P1E0RT4o1jlaHBMX a1sbsItNNKzyTj2Its5Ne3vfIGlxbDoDoCNJiHrD9lbVTQ16j3yH488U+/mIjt2EkI TitRkDG++XN7pTMp7rpA5lqBNoh+Y2R8Vld692jQ0QEWbJ9gRSHFvXfO3pn9DuG9ck JO/xsjJtKSfMQ== Received: from mail.postgrespro.ru (webmail-slave-mstn.l.postgrespro.ru [192.168.2.28]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (Client did not present a certificate) (Authenticated sender: m.litsarev@postgrespro.ru) by mail.postgrespro.ru (Postfix/587) with ESMTPSA id 787BD6026B; Fri, 10 Jan 2025 23:39:07 +0300 (MSK) MIME-Version: 1.0 Date: Fri, 10 Jan 2025 23:39:07 +0300 From: m.litsarev@postgrespro.ru To: Michael Paquier Cc: pgsql-hackers@lists.postgresql.org Subject: Re: SQL function which allows to distinguish a server being in point in time recovery mode and an ordinary replica In-Reply-To: References: <06c02ef916d85e77778e5cdfdf67a3df@postgrespro.ru> <4ba66566b84df983c881b996eb8831f1@postgrespro.ru> Message-ID: <1a0ceb98059fcb0994c47ba44cd6f2a1@postgrespro.ru> X-Sender: m.litsarev@postgrespro.ru Content-Type: multipart/mixed; boundary="=_7a4ed6bc24a44eea6d8eecbeb342a0a3" X-KSMG-AntiPhishing: NotDetected, bases: 2025/01/10 19:02:00 X-KSMG-AntiSpam-Interceptor-Info: not scanned X-KSMG-AntiSpam-Status: not scanned, disabled by settings X-KSMG-AntiVirus: Kaspersky Secure Mail Gateway, version 2.1.0.7854, bases: 2025/01/10 15:09:00 #26968769 X-KSMG-AntiVirus-Status: NotDetected, skipped X-KSMG-LinksScanning: not scanned, disabled by settings X-KSMG-Message-Action: skipped X-KSMG-Rule-ID: 1 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=_7a4ed6bc24a44eea6d8eecbeb342a0a3 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed Hi! Michael, sorry for such a long time to deliver next version of the patch from my side. In this version I have fixed all your propositions, hopefully correct. There is one point that I would like to emphasize, namely > Shouldn't STANDBY_MODE be only used in the local flag, as well as an > ARCHIVE_RECOVERY_REQUESTED? It looks like this could push a bit more > forward the removal of more of these booleans, with a bit more work.. I made corresponding changes, but given that these three variables bool ArchiveRecoveryRequested; bool InArchiveRecovery; bool StandbyMode; are used in other units, and (if I understand correctly) we decided to move them in one localRecoveryFlags bitset too, I changed their extern calls to boolean functions calls instead of extern variables. > The test additions are welcome. My test additions were based on copy of StandbyModeRequested placed in shared memory even the startup process is done. With current implementation they seems to be not very usefull now. Respectfully, Mikhail Litsarev, Postgres Professional: https://postgrespro.com --=_7a4ed6bc24a44eea6d8eecbeb342a0a3 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v4-0001-Standby-mode-requested.patch Content-Disposition: attachment; filename=v4-0001-Standby-mode-requested.patch; size=32442 RnJvbSBlYWY2NjFjMDIyZjgyMjE3ZDMzY2ZkYjM3NzZjNjk2NzVmODJhYzY3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWtoYWlsIExpdHNhcmV2IDxtLmxpdHNhcmV2QHBvc3RncmVz cHJvLnJ1PgpEYXRlOiBGcmksIDEwIEphbiAyMDI1IDIxOjIzOjAyICswMzAwClN1YmplY3Q6IFtQ QVRDSF0gUmVwbGFjZSByZWNvdmVyeSBib29sZWFuIGZsYWdzIHdpdGggYSBiaXRzMzIgc2V0LgoK TW92ZSBsb2NhbCBib29sZWFucyBBcmNoaXZlUmVjb3ZlcnlSZXF1ZXN0ZWQsIEluQXJjaGl2ZVJl Y292ZXJ5LApTdGFuZGJ5TW9kZVJlcXVlc3RlZCwgU3RhbmRieU1vZGUsIExvY2FsSG90U3RhbmRi eUFjdGl2ZSwKTG9jYWxQcm9tb3RlSXNUcmlnZ2VyZWQgaW50byBsb2NhbFJlY292ZXJ5RmxhZ3Mg Yml0c2V0LgoKTW92ZSBTaGFyZWRIb3RTdGFuZGJ5QWN0aXZlLCBTaGFyZWRQcm9tb3RlSXNUcmln Z2VyZWQgbWVtYmVycyBvZgpYTG9nUmVjb3ZlcnlDdGxEYXRhIGludG8gc2hhcmVkUmVjb3ZlcnlG bGFncyBiaXRzZXQuCgpSZWZhY3RvciBjb2RlIGFjY29yZGluZyB0byB0aGUgY2hhbmdlcy4KLS0t CiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS90aW1lbGluZS5jICAgICAgfCAgIDYgKy0KIHNy Yy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYyAgICAgICAgICB8ICAyNiArLS0KIHNyYy9i YWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dhcmNoaXZlLmMgICB8ICAgNCArLQogc3JjL2JhY2tl bmQvYWNjZXNzL3RyYW5zYW0veGxvZ3JlY292ZXJ5LmMgIHwgMjIxICsrKysrKysrKystLS0tLS0t LS0tLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9zbG90c3luYy5jIHwgICAyICst CiBzcmMvaW5jbHVkZS9hY2Nlc3MveGxvZ19pbnRlcm5hbC5oICAgICAgICAgfCAgIDcgKy0KIHNy Yy9pbmNsdWRlL2FjY2Vzcy94bG9ncmVjb3ZlcnkuaCAgICAgICAgICB8ICAzNCArKystCiA3IGZp bGVzIGNoYW5nZWQsIDE2MSBpbnNlcnRpb25zKCspLCAxMzkgZGVsZXRpb25zKC0pCgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vdGltZWxpbmUuYyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy90cmFuc2FtL3RpbWVsaW5lLmMKaW5kZXggYTI3ZjI3Y2MwMzcuLmM5ZjUzYzRiNjY3 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS90aW1lbGluZS5jCisrKyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3RpbWVsaW5lLmMKQEAgLTkzLDcgKzkzLDcgQEAg cmVhZFRpbWVMaW5lSGlzdG9yeShUaW1lTGluZUlEIHRhcmdldFRMSSkKIAkJcmV0dXJuIGxpc3Rf bWFrZTEoZW50cnkpOwogCX0KIAotCWlmIChBcmNoaXZlUmVjb3ZlcnlSZXF1ZXN0ZWQpCisJaWYg KEFyY2hpdmVSZWNvdmVyeVJlcXVlc3RlZCgpKQogCXsKIAkJVExIaXN0b3J5RmlsZU5hbWUoaGlz dGZuYW1lLCB0YXJnZXRUTEkpOwogCQlmcm9tQXJjaGl2ZSA9CkBAIC0yMjksNyArMjI5LDcgQEAg ZXhpc3RzVGltZUxpbmVIaXN0b3J5KFRpbWVMaW5lSUQgcHJvYmVUTEkpCiAJaWYgKHByb2JlVExJ ID09IDEpCiAJCXJldHVybiBmYWxzZTsKIAotCWlmIChBcmNoaXZlUmVjb3ZlcnlSZXF1ZXN0ZWQp CisJaWYgKEFyY2hpdmVSZWNvdmVyeVJlcXVlc3RlZCgpKQogCXsKIAkJVExIaXN0b3J5RmlsZU5h bWUoaGlzdGZuYW1lLCBwcm9iZVRMSSk7CiAJCVJlc3RvcmVBcmNoaXZlZEZpbGUocGF0aCwgaGlz dGZuYW1lLCAiUkVDT1ZFUllISVNUT1JZIiwgMCwgZmFsc2UpOwpAQCAtMzMxLDcgKzMzMSw3IEBA IHdyaXRlVGltZUxpbmVIaXN0b3J5KFRpbWVMaW5lSUQgbmV3VExJLCBUaW1lTGluZUlEIHBhcmVu dFRMSSwKIAkvKgogCSAqIElmIGEgaGlzdG9yeSBmaWxlIGV4aXN0cyBmb3IgdGhlIHBhcmVudCwg Y29weSBpdCB2ZXJiYXRpbQogCSAqLwotCWlmIChBcmNoaXZlUmVjb3ZlcnlSZXF1ZXN0ZWQpCisJ aWYgKEFyY2hpdmVSZWNvdmVyeVJlcXVlc3RlZCgpKQogCXsKIAkJVExIaXN0b3J5RmlsZU5hbWUo aGlzdGZuYW1lLCBwYXJlbnRUTEkpOwogCQlSZXN0b3JlQXJjaGl2ZWRGaWxlKHBhdGgsIGhpc3Rm bmFtZSwgIlJFQ09WRVJZSElTVE9SWSIsIDAsIGZhbHNlKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hs b2cuYwppbmRleCBiZjNkYmRhOTAxZC4uMmQ2NjE1ZDk0ZDAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNh bS94bG9nLmMKQEAgLTUzODgsNyArNTM4OCw3IEBAIENoZWNrUmVxdWlyZWRQYXJhbWV0ZXJWYWx1 ZXModm9pZCkKIAkgKiBGb3IgYXJjaGl2ZSByZWNvdmVyeSwgdGhlIFdBTCBtdXN0IGJlIGdlbmVy YXRlZCB3aXRoIGF0IGxlYXN0ICdyZXBsaWNhJwogCSAqIHdhbF9sZXZlbC4KIAkgKi8KLQlpZiAo QXJjaGl2ZVJlY292ZXJ5UmVxdWVzdGVkICYmIENvbnRyb2xGaWxlLT53YWxfbGV2ZWwgPT0gV0FM X0xFVkVMX01JTklNQUwpCisJaWYgKEFyY2hpdmVSZWNvdmVyeVJlcXVlc3RlZCgpICYmIENvbnRy b2xGaWxlLT53YWxfbGV2ZWwgPT0gV0FMX0xFVkVMX01JTklNQUwpCiAJewogCQllcmVwb3J0KEZB VEFMLAogCQkJCShlcnJjb2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RB VEUpLApAQCAtNTQwMSw3ICs1NDAxLDcgQEAgQ2hlY2tSZXF1aXJlZFBhcmFtZXRlclZhbHVlcyh2 b2lkKQogCSAqIEZvciBIb3QgU3RhbmRieSwgdGhlIFdBTCBtdXN0IGJlIGdlbmVyYXRlZCB3aXRo ICdyZXBsaWNhJyBtb2RlLCBhbmQgd2UKIAkgKiBtdXN0IGhhdmUgYXQgbGVhc3QgYXMgbWFueSBi YWNrZW5kIHNsb3RzIGFzIHRoZSBwcmltYXJ5LgogCSAqLwotCWlmIChBcmNoaXZlUmVjb3ZlcnlS ZXF1ZXN0ZWQgJiYgRW5hYmxlSG90U3RhbmRieSkKKwlpZiAoQXJjaGl2ZVJlY292ZXJ5UmVxdWVz dGVkKCkgJiYgRW5hYmxlSG90U3RhbmRieSkKIAl7CiAJCS8qIFdlIGlnbm9yZSBhdXRvdmFjdXVt X3dvcmtlcl9zbG90cyB3aGVuIHdlIG1ha2UgdGhpcyB0ZXN0LiAqLwogCQlSZWNvdmVyeVJlcXVp cmVzSW50UGFyYW1ldGVyKCJtYXhfY29ubmVjdGlvbnMiLApAQCAtNTU2MSw4ICs1NTYxLDggQEAg U3RhcnR1cFhMT0codm9pZCkKIAkgKgogCSAqIEluaXRXYWxSZWNvdmVyeSBhbmFseXplcyB0aGUg Y29udHJvbCBmaWxlIGFuZCB0aGUgYmFja3VwIGxhYmVsIGZpbGUsIGlmCiAJICogYW55LiAgSXQg dXBkYXRlcyB0aGUgaW4tbWVtb3J5IENvbnRyb2xGaWxlIGJ1ZmZlciBhY2NvcmRpbmcgdG8gdGhl Ci0JICogc3RhcnRpbmcgY2hlY2twb2ludCwgYW5kIHNldHMgSW5SZWNvdmVyeSBhbmQgQXJjaGl2 ZVJlY292ZXJ5UmVxdWVzdGVkLgotCSAqIEl0IGFsc28gYXBwbGllcyB0aGUgdGFibGVzcGFjZSBt YXAgZmlsZSwgaWYgYW55LgorCSAqIHN0YXJ0aW5nIGNoZWNrcG9pbnQsIGFuZCBzZXRzIFNYX0FS Q0hJVkVfUkVDT1ZFUllfUkVRVUVTVEVEIGFuZAorCSAqIEluUmVjb3ZlcnkuIEl0IGFsc28gYXBw bGllcyB0aGUgdGFibGVzcGFjZSBtYXAgZmlsZSwgaWYgYW55LgogCSAqLwogCUluaXRXYWxSZWNv dmVyeShDb250cm9sRmlsZSwgJndhc1NodXRkb3duLAogCQkJCQkmaGF2ZUJhY2t1cExhYmVsLCAm aGF2ZVRibHNwY01hcCk7CkBAIC01Njk0LDcgKzU2OTQsNyBAQCBTdGFydHVwWExPRyh2b2lkKQog CXsKIAkJLyogSW5pdGlhbGl6ZSBzdGF0ZSBmb3IgUmVjb3ZlcnlJblByb2dyZXNzKCkgKi8KIAkJ U3BpbkxvY2tBY3F1aXJlKCZYTG9nQ3RsLT5pbmZvX2xjayk7Ci0JCWlmIChJbkFyY2hpdmVSZWNv dmVyeSkKKwkJaWYgKEluQXJjaGl2ZVJlY292ZXJ5KCkpCiAJCQlYTG9nQ3RsLT5TaGFyZWRSZWNv dmVyeVN0YXRlID0gUkVDT1ZFUllfU1RBVEVfQVJDSElWRTsKIAkJZWxzZQogCQkJWExvZ0N0bC0+ U2hhcmVkUmVjb3ZlcnlTdGF0ZSA9IFJFQ09WRVJZX1NUQVRFX0NSQVNIOwpAQCAtNTc0Nyw3ICs1 NzQ3LDcgQEAgU3RhcnR1cFhMT0codm9pZCkKIAkJICogc3RhcnR1cCBwcm9jZXNzIHRvIHRoaW5r IHRoYXQgdGhlcmUgYXJlIHN0aWxsIGludmFsaWQgcGFnZQogCQkgKiByZWZlcmVuY2VzIHdoZW4g Y2hlY2tpbmcgZm9yIGRhdGEgY29uc2lzdGVuY3kuCiAJCSAqLwotCQlpZiAoSW5BcmNoaXZlUmVj b3ZlcnkpCisJCWlmIChJbkFyY2hpdmVSZWNvdmVyeSgpKQogCQl7CiAJCQlMb2NhbE1pblJlY292 ZXJ5UG9pbnQgPSBDb250cm9sRmlsZS0+bWluUmVjb3ZlcnlQb2ludDsKIAkJCUxvY2FsTWluUmVj b3ZlcnlQb2ludFRMSSA9IENvbnRyb2xGaWxlLT5taW5SZWNvdmVyeVBvaW50VExJOwpAQCAtNTc4 MSw3ICs1NzgxLDcgQEAgU3RhcnR1cFhMT0codm9pZCkKIAkJICogY29udHJvbCBmaWxlIGFuZCB3 ZSd2ZSBlc3RhYmxpc2hlZCBhIHJlY292ZXJ5IHNuYXBzaG90IGZyb20gYQogCQkgKiBydW5uaW5n LXhhY3RzIFdBTCByZWNvcmQuCiAJCSAqLwotCQlpZiAoQXJjaGl2ZVJlY292ZXJ5UmVxdWVzdGVk ICYmIEVuYWJsZUhvdFN0YW5kYnkpCisJCWlmIChBcmNoaXZlUmVjb3ZlcnlSZXF1ZXN0ZWQoKSAm JiBFbmFibGVIb3RTdGFuZGJ5KQogCQl7CiAJCQlUcmFuc2FjdGlvbklkICp4aWRzOwogCQkJaW50 CQkJbnhpZHM7CkBAIC01ODk0LDcgKzU4OTQsNyBAQCBTdGFydHVwWExPRyh2b2lkKQogCQkgKiBy ZWNvdmVyIGZyb20gYW4gb25saW5lIGJhY2t1cCBidXQgbmV2ZXIgY2FsbGVkIHBnX2JhY2t1cF9z dG9wKCksIG9yCiAJCSAqIHlvdSBkaWRuJ3QgYXJjaGl2ZSBhbGwgdGhlIFdBTCBuZWVkZWQuCiAJ CSAqLwotCQlpZiAoQXJjaGl2ZVJlY292ZXJ5UmVxdWVzdGVkIHx8IENvbnRyb2xGaWxlLT5iYWNr dXBFbmRSZXF1aXJlZCkKKwkJaWYgKEFyY2hpdmVSZWNvdmVyeVJlcXVlc3RlZCgpIHx8IENvbnRy b2xGaWxlLT5iYWNrdXBFbmRSZXF1aXJlZCkKIAkJewogCQkJaWYgKCFYTG9nUmVjUHRySXNJbnZh bGlkKENvbnRyb2xGaWxlLT5iYWNrdXBTdGFydFBvaW50KSB8fCBDb250cm9sRmlsZS0+YmFja3Vw RW5kUmVxdWlyZWQpCiAJCQkJZXJlcG9ydChGQVRBTCwKQEAgLTU5NDYsNyArNTk0Niw3IEBAIFN0 YXJ0dXBYTE9HKHZvaWQpCiAJICogSW4gYSBub3JtYWwgY3Jhc2ggcmVjb3ZlcnksIHdlIGNhbiBq dXN0IGV4dGVuZCB0aGUgdGltZWxpbmUgd2Ugd2VyZSBpbi4KIAkgKi8KIAluZXdUTEkgPSBlbmRP ZlJlY292ZXJ5SW5mby0+bGFzdFJlY1RMSTsKLQlpZiAoQXJjaGl2ZVJlY292ZXJ5UmVxdWVzdGVk KQorCWlmIChBcmNoaXZlUmVjb3ZlcnlSZXF1ZXN0ZWQoKSkKIAl7CiAJCW5ld1RMSSA9IGZpbmRO ZXdlc3RUaW1lTGluZShyZWNvdmVyeVRhcmdldFRMSSkgKyAxOwogCQllcmVwb3J0KExPRywKQEAg LTYxMzksNyArNjEzOSw3IEBAIFN0YXJ0dXBYTE9HKHZvaWQpCiAJWExvZ1JlcG9ydFBhcmFtZXRl cnMoKTsKIAogCS8qIElmIHRoaXMgaXMgYXJjaGl2ZSByZWNvdmVyeSwgcGVyZm9ybSBwb3N0LXJl Y292ZXJ5IGNsZWFudXAgYWN0aW9ucy4gKi8KLQlpZiAoQXJjaGl2ZVJlY292ZXJ5UmVxdWVzdGVk KQorCWlmIChBcmNoaXZlUmVjb3ZlcnlSZXF1ZXN0ZWQoKSkKIAkJQ2xlYW51cEFmdGVyQXJjaGl2 ZVJlY292ZXJ5KEVuZE9mTG9nVExJLCBFbmRPZkxvZywgbmV3VExJKTsKIAogCS8qCkBAIC02Mjk4 LDcgKzYyOTgsNyBAQCBQZXJmb3JtUmVjb3ZlcnlYTG9nQWN0aW9uKHZvaWQpCiAJICogb2YgYSBm dWxsIGNoZWNrcG9pbnQuIEEgY2hlY2twb2ludCBpcyByZXF1ZXN0ZWQgbGF0ZXIsIGFmdGVyIHdl J3JlCiAJICogZnVsbHkgb3V0IG9mIHJlY292ZXJ5IG1vZGUgYW5kIGFscmVhZHkgYWNjZXB0aW5n IHF1ZXJpZXMuCiAJICovCi0JaWYgKEFyY2hpdmVSZWNvdmVyeVJlcXVlc3RlZCAmJiBJc1VuZGVy UG9zdG1hc3RlciAmJgorCWlmIChBcmNoaXZlUmVjb3ZlcnlSZXF1ZXN0ZWQoKSAmJiBJc1VuZGVy UG9zdG1hc3RlciAmJgogCQlQcm9tb3RlSXNUcmlnZ2VyZWQoKSkKIAl7CiAJCXByb21vdGVkID0g dHJ1ZTsKQEAgLTgyOTIsNyArODI5Miw3IEBAIHhsb2dfcmVkbyhYTG9nUmVhZGVyU3RhdGUgKnJl Y29yZCkKIAkJICogcmVjb3JkLCB0aGUgYmFja3VwIHdhcyBjYW5jZWxlZCBhbmQgdGhlIGVuZC1v Zi1iYWNrdXAgcmVjb3JkIHdpbGwKIAkJICogbmV2ZXIgYXJyaXZlLgogCQkgKi8KLQkJaWYgKEFy Y2hpdmVSZWNvdmVyeVJlcXVlc3RlZCAmJgorCQlpZiAoQXJjaGl2ZVJlY292ZXJ5UmVxdWVzdGVk KCkgJiYKIAkJCSFYTG9nUmVjUHRySXNJbnZhbGlkKENvbnRyb2xGaWxlLT5iYWNrdXBTdGFydFBv aW50KSAmJgogCQkJWExvZ1JlY1B0cklzSW52YWxpZChDb250cm9sRmlsZS0+YmFja3VwRW5kUG9p bnQpKQogCQkJZXJlcG9ydChQQU5JQywKQEAgLTg1MzMsNyArODUzMyw3IEBAIHhsb2dfcmVkbyhY TG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKIAkJICogbG9jYWwgY29waWVzIGNhbm5vdCBiZSB1cGRh dGVkIGFzIGxvbmcgYXMgY3Jhc2ggcmVjb3ZlcnkgaXMKIAkJICogaGFwcGVuaW5nIGFuZCB3ZSBl eHBlY3QgYWxsIHRoZSBXQUwgdG8gYmUgcmVwbGF5ZWQuCiAJCSAqLwotCQlpZiAoSW5BcmNoaXZl UmVjb3ZlcnkpCisJCWlmIChJbkFyY2hpdmVSZWNvdmVyeSgpKQogCQl7CiAJCQlMb2NhbE1pblJl Y292ZXJ5UG9pbnQgPSBDb250cm9sRmlsZS0+bWluUmVjb3ZlcnlQb2ludDsKIAkJCUxvY2FsTWlu UmVjb3ZlcnlQb2ludFRMSSA9IENvbnRyb2xGaWxlLT5taW5SZWNvdmVyeVBvaW50VExJOwpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ2FyY2hpdmUuYyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dhcmNoaXZlLmMKaW5kZXggMWVmMTcxM2M5MWEuLmFk Mzc5YWNjMzBhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nYXJj aGl2ZS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dhcmNoaXZlLmMKQEAg LTY4LDcgKzY4LDcgQEAgUmVzdG9yZUFyY2hpdmVkRmlsZShjaGFyICpwYXRoLCBjb25zdCBjaGFy ICp4bG9nZm5hbWUsCiAJICogSWdub3JlIHJlc3RvcmVfY29tbWFuZCB3aGVuIG5vdCBpbiBhcmNo aXZlIHJlY292ZXJ5IChtZWFuaW5nIHdlIGFyZSBpbgogCSAqIGNyYXNoIHJlY292ZXJ5KS4KIAkg Ki8KLQlpZiAoIUFyY2hpdmVSZWNvdmVyeVJlcXVlc3RlZCkKKwlpZiAoIUFyY2hpdmVSZWNvdmVy eVJlcXVlc3RlZCgpKQogCQlnb3RvIG5vdF9hdmFpbGFibGU7CiAKIAkvKiBJbiBzdGFuZGJ5IG1v ZGUsIHJlc3RvcmVfY29tbWFuZCBtaWdodCBub3QgYmUgc3VwcGxpZWQgKi8KQEAgLTIwNSw3ICsy MDUsNyBAQCBSZXN0b3JlQXJjaGl2ZWRGaWxlKGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnhsb2dm bmFtZSwKIAkJCQkgKiBpbmNvcnJlY3RseSBjb25jbHVkZSB3ZSd2ZSByZWFjaGVkIHRoZSBlbmQg b2YgV0FMIGFuZCB3ZSdyZQogCQkJCSAqIGRvbmUgcmVjb3ZlcmluZyAuLi4KIAkJCQkgKi8KLQkJ CQlpZiAoU3RhbmRieU1vZGUgJiYgc3RhdF9idWYuc3Rfc2l6ZSA8IGV4cGVjdGVkU2l6ZSkKKwkJ CQlpZiAoSW5TdGFuZGJ5TW9kZSgpICYmIHN0YXRfYnVmLnN0X3NpemUgPCBleHBlY3RlZFNpemUp CiAJCQkJCWVsZXZlbCA9IERFQlVHMTsKIAkJCQllbHNlCiAJCQkJCWVsZXZlbCA9IEZBVEFMOwpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3JlY292ZXJ5LmMgYi9z cmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncmVjb3ZlcnkuYwppbmRleCAwYmJlMmVlYTIw Ni4uZTc1Yzc4OTFmZDUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hs b2dyZWNvdmVyeS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dyZWNvdmVy eS5jCkBAIC0xMjMsMzAgKzEyMyw3IEBAIFRpbWVMaW5lSUQJcmVjb3ZlcnlUYXJnZXRUTEkgPSAw Owogc3RhdGljIExpc3QgKmV4cGVjdGVkVExFczsKIHN0YXRpYyBUaW1lTGluZUlEIGN1ckZpbGVU TEk7CiAKLS8qCi0gKiBXaGVuIEFyY2hpdmVSZWNvdmVyeVJlcXVlc3RlZCBpcyBzZXQsIGFyY2hp dmUgcmVjb3Zlcnkgd2FzIHJlcXVlc3RlZCwKLSAqIGllLiBzaWduYWwgZmlsZXMgd2VyZSBwcmVz ZW50LiAgV2hlbiBJbkFyY2hpdmVSZWNvdmVyeSBpcyBzZXQsIHdlIGFyZQotICogY3VycmVudGx5 IHJlY292ZXJpbmcgdXNpbmcgb2ZmbGluZSBYTE9HIGFyY2hpdmVzLiAgVGhlc2UgdmFyaWFibGVz IGFyZSBvbmx5Ci0gKiB2YWxpZCBpbiB0aGUgc3RhcnR1cCBwcm9jZXNzLgotICoKLSAqIFdoZW4g QXJjaGl2ZVJlY292ZXJ5UmVxdWVzdGVkIGlzIHRydWUsIGJ1dCBJbkFyY2hpdmVSZWNvdmVyeSBp cyBmYWxzZSwgd2UncmUKLSAqIGN1cnJlbnRseSBwZXJmb3JtaW5nIGNyYXNoIHJlY292ZXJ5IHVz aW5nIG9ubHkgWExPRyBmaWxlcyBpbiBwZ193YWwsIGJ1dAotICogd2lsbCBzd2l0Y2ggdG8gdXNp bmcgb2ZmbGluZSBYTE9HIGFyY2hpdmVzIGFzIHNvb24gYXMgd2UgcmVhY2ggdGhlIGVuZCBvZgot ICogV0FMIGluIHBnX3dhbC4KLSAqLwotYm9vbAkJQXJjaGl2ZVJlY292ZXJ5UmVxdWVzdGVkID0g ZmFsc2U7Ci1ib29sCQlJbkFyY2hpdmVSZWNvdmVyeSA9IGZhbHNlOwotCi0vKgotICogV2hlbiBT dGFuZGJ5TW9kZVJlcXVlc3RlZCBpcyBzZXQsIHN0YW5kYnkgbW9kZSB3YXMgcmVxdWVzdGVkLCBp LmUuCi0gKiBzdGFuZGJ5LnNpZ25hbCBmaWxlIHdhcyBwcmVzZW50LiAgV2hlbiBTdGFuZGJ5TW9k ZSBpcyBzZXQsIHdlIGFyZSBjdXJyZW50bHkKLSAqIGluIHN0YW5kYnkgbW9kZS4gIFRoZXNlIHZh cmlhYmxlcyBhcmUgb25seSB2YWxpZCBpbiB0aGUgc3RhcnR1cCBwcm9jZXNzLgotICogVGhleSB3 b3JrIHNpbWlsYXJseSB0byBBcmNoaXZlUmVjb3ZlcnlSZXF1ZXN0ZWQgYW5kIEluQXJjaGl2ZVJl Y292ZXJ5LgotICovCi1zdGF0aWMgYm9vbCBTdGFuZGJ5TW9kZVJlcXVlc3RlZCA9IGZhbHNlOwot Ym9vbAkJU3RhbmRieU1vZGUgPSBmYWxzZTsKLQotLyogd2FzIGEgc2lnbmFsIGZpbGUgcHJlc2Vu dCBhdCBzdGFydHVwPyAqLworLyogV2FzIGEgc2lnbmFsIGZpbGUgcHJlc2VudCBhdCBzdGFydHVw PyAqLwogc3RhdGljIGJvb2wgc3RhbmRieV9zaWduYWxfZmlsZV9mb3VuZCA9IGZhbHNlOwogc3Rh dGljIGJvb2wgcmVjb3Zlcnlfc2lnbmFsX2ZpbGVfZm91bmQgPSBmYWxzZTsKIApAQCAtMTcwLDE2 ICsxNDcsMTkgQEAgc3RhdGljIFhMb2dSZWNQdHIgUmVkb1N0YXJ0TFNOID0gSW52YWxpZFhMb2dS ZWNQdHI7CiBzdGF0aWMgVGltZUxpbmVJRCBSZWRvU3RhcnRUTEkgPSAwOwogCiAvKgotICogTG9j YWwgY29weSBvZiBTaGFyZWRIb3RTdGFuZGJ5QWN0aXZlIHZhcmlhYmxlLiBGYWxzZSBhY3R1YWxs eSBtZWFucyAibm90Ci0gKiBrbm93biwgbmVlZCB0byBjaGVjayB0aGUgc2hhcmVkIHN0YXRlIi4K LSAqLwotc3RhdGljIGJvb2wgTG9jYWxIb3RTdGFuZGJ5QWN0aXZlID0gZmFsc2U7Ci0KLS8qCi0g KiBMb2NhbCBjb3B5IG9mIFNoYXJlZFByb21vdGVJc1RyaWdnZXJlZCB2YXJpYWJsZS4gRmFsc2Ug YWN0dWFsbHkgbWVhbnMgIm5vdAotICoga25vd24sIG5lZWQgdG8gY2hlY2sgdGhlIHNoYXJlZCBz dGF0ZSIuCisgKiBMb2NhbCBmbGFnczoKKyAqIFNYX0FSQ0hJVkVfUkVDT1ZFUllfUkVRVUVTVEVE CisgKiBTWF9JTl9BUkNISVZFX1JFQ09WRVJZCisgKiBTWF9TVEFOREJZX01PREVfUkVRVUVTVEVE CisgKiBTWF9JTl9TVEFOREJZX01PREUKKyAqCisgKiBhbmQgbG9jYWwgY29waWVzIG9mIHNoYXJl ZFJlY292ZXJ5RmxhZ3M6CisgKiBTWF9IT1RfU1RBTkRCWV9BQ1RJVkUsCisgKiBTWF9QUk9NT1RF X0lTX1RSSUdHRVJFRC4KKyAqIElmIHNvbWUgZmxhZyBpcyBub3Qgc2V0LCB0aGF0IGFjdHVhbGx5 IG1lYW5zICJub3Qga25vd24sIG5lZWQgdG8gY2hlY2sKKyAqIHRoZSBzaGFyZWQgc3RhdGUiLgog ICovCi1zdGF0aWMgYm9vbCBMb2NhbFByb21vdGVJc1RyaWdnZXJlZCA9IGZhbHNlOworc3RhdGlj IGJpdHMzMiBsb2NhbFJlY292ZXJ5RmxhZ3MgPSAwOwogCiAvKiBIYXMgdGhlIHJlY292ZXJ5IGNv ZGUgcmVxdWVzdGVkIGEgd2FscmVjZWl2ZXIgd2FrZXVwPyAqLwogc3RhdGljIGJvb2wgZG9SZXF1 ZXN0V2FsUmVjZWl2ZXJSZXBseTsKQEAgLTI5NywyMyArMjc3LDE2IEBAIGJvb2wJCXJlYWNoZWRD b25zaXN0ZW5jeSA9IGZhbHNlOwogc3RhdGljIGNoYXIgKnJlcGxheV9pbWFnZV9tYXNrZWQgPSBO VUxMOwogc3RhdGljIGNoYXIgKnByaW1hcnlfaW1hZ2VfbWFza2VkID0gTlVMTDsKIAotCiAvKgog ICogU2hhcmVkLW1lbW9yeSBzdGF0ZSBmb3IgV0FMIHJlY292ZXJ5LgogICovCiB0eXBlZGVmIHN0 cnVjdCBYTG9nUmVjb3ZlcnlDdGxEYXRhCiB7CiAJLyoKLQkgKiBTaGFyZWRIb3RTdGFuZGJ5QWN0 aXZlIGluZGljYXRlcyBpZiB3ZSBhbGxvdyBob3Qgc3RhbmRieSBxdWVyaWVzIHRvIGJlCi0JICog cnVuLiAgUHJvdGVjdGVkIGJ5IGluZm9fbGNrLgorCSAqIFRoZSBiaXQgYXJyYXkgc3RvcmVzIHRo ZSBmb2xsb3dpbmcgc3RhdGVzCisJICogU1hfSE9UX1NUQU5EQllfQUNUSVZFLCBTWF9QUk9NT1RF X0lTX1RSSUdHRVJFRC4gUHJvdGVjdGVkIGJ5IGluZm9fbGNrLgogCSAqLwotCWJvb2wJCVNoYXJl ZEhvdFN0YW5kYnlBY3RpdmU7Ci0KLQkvKgotCSAqIFNoYXJlZFByb21vdGVJc1RyaWdnZXJlZCBp bmRpY2F0ZXMgaWYgYSBzdGFuZGJ5IHByb21vdGlvbiBoYXMgYmVlbgotCSAqIHRyaWdnZXJlZC4g IFByb3RlY3RlZCBieSBpbmZvX2xjay4KLQkgKi8KLQlib29sCQlTaGFyZWRQcm9tb3RlSXNUcmln Z2VyZWQ7CisJYml0czMyCQlzaGFyZWRSZWNvdmVyeUZsYWdzOwogCiAJLyoKIAkgKiByZWNvdmVy eVdha2V1cExhdGNoIGlzIHVzZWQgdG8gd2FrZSB1cCB0aGUgc3RhcnR1cCBwcm9jZXNzIHRvIGNv bnRpbnVlCkBAIC00NDAsNiArNDEzLDcgQEAgc3RhdGljIGJvb2wgSG90U3RhbmRieUFjdGl2ZUlu UmVwbGF5KHZvaWQpOwogc3RhdGljIHZvaWQgU2V0Q3VycmVudENodW5rU3RhcnRUaW1lKFRpbWVz dGFtcFR6IHh0aW1lKTsKIHN0YXRpYyB2b2lkIFNldExhdGVzdFhUaW1lKFRpbWVzdGFtcFR6IHh0 aW1lKTsKIAorc3RhdGljIGJvb2wgU3RhbmRieU1vZGVSZXF1ZXN0ZWQodm9pZCk7CiAvKgogICog SW5pdGlhbGl6YXRpb24gb2Ygc2hhcmVkIG1lbW9yeSBmb3IgV0FMIHJlY292ZXJ5CiAgKi8KQEAg LTQ3Nyw3ICs0NTEsNyBAQCBYTG9nUmVjb3ZlcnlTaG1lbUluaXQodm9pZCkKIHN0YXRpYyB2b2lk CiBFbmFibGVTdGFuZGJ5TW9kZSh2b2lkKQogewotCVN0YW5kYnlNb2RlID0gdHJ1ZTsKKwlsb2Nh bFJlY292ZXJ5RmxhZ3MgfD0gU1hfSU5fU1RBTkRCWV9NT0RFOwogCiAJLyoKIAkgKiBUbyBhdm9p ZCBzZXJ2ZXIgbG9nIGJsb2F0LCB3ZSBkb24ndCByZXBvcnQgcmVjb3ZlcnkgcHJvZ3Jlc3MgaW4g YQpAQCAtNTA1LDggKzQ3OSw4IEBAIEVuYWJsZVN0YW5kYnlNb2RlKHZvaWQpCiAgKiBkaXNrIGRv ZXMgYWZ0ZXIgaW5pdGlhbGl6aW5nIG90aGVyIHN1YnN5c3RlbXMsIGJ1dCBiZWZvcmUgY2FsbGlu ZwogICogUGVyZm9ybVdhbFJlY292ZXJ5KCkuCiAgKgotICogVGhpcyBpbml0aWFsaXplcyBzb21l IGdsb2JhbCB2YXJpYWJsZXMgbGlrZSBBcmNoaXZlUmVjb3ZlcnlSZXF1ZXN0ZWQsIGFuZAotICog U3RhbmRieU1vZGVSZXF1ZXN0ZWQgYW5kIEluUmVjb3ZlcnkuCisgKiBUaGlzIGluaXRpYWxpemVz IHNvbWUgZmxhZ3MgbGlrZSBTWF9BUkNISVZFX1JFQ09WRVJZX1JFUVVFU1RFRCBhbmQKKyAqIFNY X1NUQUJEQllfTU9ERV9SRVFVRVNURUQgYW5kIGdsb2JhbCB2YXJpYWJsZSBJblJlY292ZXJ5Lgog ICovCiB2b2lkCiBJbml0V2FsUmVjb3ZlcnkoQ29udHJvbEZpbGVEYXRhICpDb250cm9sRmlsZSwg Ym9vbCAqd2FzU2h1dGRvd25fcHRyLApAQCAtNTQ0LDcgKzUxOCw3IEBAIEluaXRXYWxSZWNvdmVy eShDb250cm9sRmlsZURhdGEgKkNvbnRyb2xGaWxlLCBib29sICp3YXNTaHV0ZG93bl9wdHIsCiAJ ICogVGFrZSBvd25lcnNoaXAgb2YgdGhlIHdha2V1cCBsYXRjaCBpZiB3ZSdyZSBnb2luZyB0byBz bGVlcCBkdXJpbmcKIAkgKiByZWNvdmVyeSwgaWYgcmVxdWlyZWQuCiAJICovCi0JaWYgKEFyY2hp dmVSZWNvdmVyeVJlcXVlc3RlZCkKKwlpZiAoQXJjaGl2ZVJlY292ZXJ5UmVxdWVzdGVkKCkpCiAJ CU93bkxhdGNoKCZYTG9nUmVjb3ZlcnlDdGwtPnJlY292ZXJ5V2FrZXVwTGF0Y2gpOwogCiAJLyoK QEAgLTU5OSw4ICs1NzMsOCBAQCBJbml0V2FsUmVjb3ZlcnkoQ29udHJvbEZpbGVEYXRhICpDb250 cm9sRmlsZSwgYm9vbCAqd2FzU2h1dGRvd25fcHRyLAogCQkgKiBmaWxlLCB3ZSBrbm93IGhvdyBm YXIgd2UgbmVlZCB0byByZXBsYXkgdG8gcmVhY2ggY29uc2lzdGVuY3kuIEVudGVyCiAJCSAqIGFy Y2hpdmUgcmVjb3ZlcnkgZGlyZWN0bHkuCiAJCSAqLwotCQlJbkFyY2hpdmVSZWNvdmVyeSA9IHRy dWU7Ci0JCWlmIChTdGFuZGJ5TW9kZVJlcXVlc3RlZCkKKwkJbG9jYWxSZWNvdmVyeUZsYWdzIHw9 IFNYX0lOX0FSQ0hJVkVfUkVDT1ZFUlk7CisJCWlmIChTdGFuZGJ5TW9kZVJlcXVlc3RlZCgpKQog CQkJRW5hYmxlU3RhbmRieU1vZGUoKTsKIAogCQkvKgpAQCAtNzQ5LDE0ICs3MjMsMTQgQEAgSW5p dFdhbFJlY292ZXJ5KENvbnRyb2xGaWxlRGF0YSAqQ29udHJvbEZpbGUsIGJvb2wgKndhc1NodXRk b3duX3B0ciwKIAkJICogdG8gbWluUmVjb3ZlcnlQb2ludCwgdXAgdG8gYmFja3VwRW5kUG9pbnQs IG9yIHVudGlsIHdlIHNlZSBhbgogCQkgKiBlbmQtb2YtYmFja3VwIHJlY29yZCksIGFuZCB3ZSBj YW4gZW50ZXIgYXJjaGl2ZSByZWNvdmVyeSBkaXJlY3RseS4KIAkJICovCi0JCWlmIChBcmNoaXZl UmVjb3ZlcnlSZXF1ZXN0ZWQgJiYKKwkJaWYgKEFyY2hpdmVSZWNvdmVyeVJlcXVlc3RlZCgpICYm CiAJCQkoQ29udHJvbEZpbGUtPm1pblJlY292ZXJ5UG9pbnQgIT0gSW52YWxpZFhMb2dSZWNQdHIg fHwKIAkJCSBDb250cm9sRmlsZS0+YmFja3VwRW5kUmVxdWlyZWQgfHwKIAkJCSBDb250cm9sRmls ZS0+YmFja3VwRW5kUG9pbnQgIT0gSW52YWxpZFhMb2dSZWNQdHIgfHwKIAkJCSBDb250cm9sRmls ZS0+c3RhdGUgPT0gREJfU0hVVERPV05FRCkpCiAJCXsKLQkJCUluQXJjaGl2ZVJlY292ZXJ5ID0g dHJ1ZTsKLQkJCWlmIChTdGFuZGJ5TW9kZVJlcXVlc3RlZCkKKwkJCWxvY2FsUmVjb3ZlcnlGbGFn cyB8PSBTWF9JTl9BUkNISVZFX1JFQ09WRVJZOworCQkJaWYgKFN0YW5kYnlNb2RlUmVxdWVzdGVk KCkpCiAJCQkJRW5hYmxlU3RhbmRieU1vZGUoKTsKIAkJfQogCkBAIC03OTksOSArNzczLDkgQEAg SW5pdFdhbFJlY292ZXJ5KENvbnRyb2xGaWxlRGF0YSAqQ29udHJvbEZpbGUsIGJvb2wgKndhc1No dXRkb3duX3B0ciwKIAkJd2FzU2h1dGRvd24gPSAoKHJlY29yZC0+eGxfaW5mbyAmIH5YTFJfSU5G T19NQVNLKSA9PSBYTE9HX0NIRUNLUE9JTlRfU0hVVERPV04pOwogCX0KIAotCWlmIChBcmNoaXZl UmVjb3ZlcnlSZXF1ZXN0ZWQpCisJaWYgKEFyY2hpdmVSZWNvdmVyeVJlcXVlc3RlZCgpKQogCXsK LQkJaWYgKFN0YW5kYnlNb2RlUmVxdWVzdGVkKQorCQlpZiAoU3RhbmRieU1vZGVSZXF1ZXN0ZWQo KSkKIAkJCWVyZXBvcnQoTE9HLAogCQkJCQkoZXJybXNnKCJlbnRlcmluZyBzdGFuZGJ5IG1vZGUi KSkpOwogCQllbHNlIGlmIChyZWNvdmVyeVRhcmdldCA9PSBSRUNPVkVSWV9UQVJHRVRfWElEKQpA QCAtOTExLDcgKzg4NSw3IEBAIEluaXRXYWxSZWNvdmVyeShDb250cm9sRmlsZURhdGEgKkNvbnRy b2xGaWxlLCBib29sICp3YXNTaHV0ZG93bl9wdHIsCiAJfQogCWVsc2UgaWYgKENvbnRyb2xGaWxl LT5zdGF0ZSAhPSBEQl9TSFVURE9XTkVEKQogCQlJblJlY292ZXJ5ID0gdHJ1ZTsKLQllbHNlIGlm IChBcmNoaXZlUmVjb3ZlcnlSZXF1ZXN0ZWQpCisJZWxzZSBpZiAoQXJjaGl2ZVJlY292ZXJ5UmVx dWVzdGVkKCkpCiAJewogCQkvKiBmb3JjZSByZWNvdmVyeSBkdWUgdG8gcHJlc2VuY2Ugb2YgcmVj b3Zlcnkgc2lnbmFsIGZpbGUgKi8KIAkJSW5SZWNvdmVyeSA9IHRydWU7CkBAIC05MjgsNyArOTAy LDcgQEAgSW5pdFdhbFJlY292ZXJ5KENvbnRyb2xGaWxlRGF0YSAqQ29udHJvbEZpbGUsIGJvb2wg Kndhc1NodXRkb3duX3B0ciwKIAkgKi8KIAlpZiAoSW5SZWNvdmVyeSkKIAl7Ci0JCWlmIChJbkFy Y2hpdmVSZWNvdmVyeSkKKwkJaWYgKEluQXJjaGl2ZVJlY292ZXJ5KCkpCiAJCXsKIAkJCUNvbnRy b2xGaWxlLT5zdGF0ZSA9IERCX0lOX0FSQ0hJVkVfUkVDT1ZFUlk7CiAJCX0KQEAgLTk0Nyw3ICs5 MjEsNyBAQCBJbml0V2FsUmVjb3ZlcnkoQ29udHJvbEZpbGVEYXRhICpDb250cm9sRmlsZSwgYm9v bCAqd2FzU2h1dGRvd25fcHRyLAogCQl9CiAJCUNvbnRyb2xGaWxlLT5jaGVja1BvaW50ID0gQ2hl Y2tQb2ludExvYzsKIAkJQ29udHJvbEZpbGUtPmNoZWNrUG9pbnRDb3B5ID0gY2hlY2tQb2ludDsK LQkJaWYgKEluQXJjaGl2ZVJlY292ZXJ5KQorCQlpZiAoSW5BcmNoaXZlUmVjb3ZlcnkoKSkKIAkJ ewogCQkJLyogaW5pdGlhbGl6ZSBtaW5SZWNvdmVyeVBvaW50IGlmIG5vdCBzZXQgeWV0ICovCiAJ CQlpZiAoQ29udHJvbEZpbGUtPm1pblJlY292ZXJ5UG9pbnQgPCBjaGVja1BvaW50LnJlZG8pCkBA IC05OTQsNyArOTY4LDcgQEAgSW5pdFdhbFJlY292ZXJ5KENvbnRyb2xGaWxlRGF0YSAqQ29udHJv bEZpbGUsIGJvb2wgKndhc1NodXRkb3duX3B0ciwKIAliYWNrdXBTdGFydFBvaW50ID0gQ29udHJv bEZpbGUtPmJhY2t1cFN0YXJ0UG9pbnQ7CiAJYmFja3VwRW5kUmVxdWlyZWQgPSBDb250cm9sRmls ZS0+YmFja3VwRW5kUmVxdWlyZWQ7CiAJYmFja3VwRW5kUG9pbnQgPSBDb250cm9sRmlsZS0+YmFj a3VwRW5kUG9pbnQ7Ci0JaWYgKEluQXJjaGl2ZVJlY292ZXJ5KQorCWlmIChJbkFyY2hpdmVSZWNv dmVyeSgpKQogCXsKIAkJbWluUmVjb3ZlcnlQb2ludCA9IENvbnRyb2xGaWxlLT5taW5SZWNvdmVy eVBvaW50OwogCQltaW5SZWNvdmVyeVBvaW50VExJID0gQ29udHJvbEZpbGUtPm1pblJlY292ZXJ5 UG9pbnRUTEk7CkBAIC0xMDgwLDE3ICsxMDU0LDE2IEBAIHJlYWRSZWNvdmVyeVNpZ25hbEZpbGUo dm9pZCkKIAkJcmVjb3Zlcnlfc2lnbmFsX2ZpbGVfZm91bmQgPSB0cnVlOwogCX0KIAotCVN0YW5k YnlNb2RlUmVxdWVzdGVkID0gZmFsc2U7Ci0JQXJjaGl2ZVJlY292ZXJ5UmVxdWVzdGVkID0gZmFs c2U7CisJbG9jYWxSZWNvdmVyeUZsYWdzICY9IH5TWF9TVEFOREJZX01PREVfUkVRVUVTVEVEOwor CWxvY2FsUmVjb3ZlcnlGbGFncyAmPSB+U1hfQVJDSElWRV9SRUNPVkVSWV9SRVFVRVNURUQ7CiAJ aWYgKHN0YW5kYnlfc2lnbmFsX2ZpbGVfZm91bmQpCiAJewotCQlTdGFuZGJ5TW9kZVJlcXVlc3Rl ZCA9IHRydWU7Ci0JCUFyY2hpdmVSZWNvdmVyeVJlcXVlc3RlZCA9IHRydWU7CisJCWxvY2FsUmVj b3ZlcnlGbGFncyB8PSBTWF9TVEFOREJZX01PREVfUkVRVUVTVEVEOworCQlsb2NhbFJlY292ZXJ5 RmxhZ3MgfD0gU1hfQVJDSElWRV9SRUNPVkVSWV9SRVFVRVNURUQ7CiAJfQogCWVsc2UgaWYgKHJl Y292ZXJ5X3NpZ25hbF9maWxlX2ZvdW5kKQogCXsKLQkJU3RhbmRieU1vZGVSZXF1ZXN0ZWQgPSBm YWxzZTsKLQkJQXJjaGl2ZVJlY292ZXJ5UmVxdWVzdGVkID0gdHJ1ZTsKKwkJbG9jYWxSZWNvdmVy eUZsYWdzIHw9IFNYX0FSQ0hJVkVfUkVDT1ZFUllfUkVRVUVTVEVEOwogCX0KIAllbHNlCiAJCXJl dHVybjsKQEAgLTEwOTksNyArMTA3Miw3IEBAIHJlYWRSZWNvdmVyeVNpZ25hbEZpbGUodm9pZCkK IAkgKiBXZSBkb24ndCBzdXBwb3J0IHN0YW5kYnkgbW9kZSBpbiBzdGFuZGFsb25lIGJhY2tlbmRz OyB0aGF0IHJlcXVpcmVzCiAJICogb3RoZXIgcHJvY2Vzc2VzIHN1Y2ggYXMgdGhlIFdBTCByZWNl aXZlciB0byBiZSBhbGl2ZS4KIAkgKi8KLQlpZiAoU3RhbmRieU1vZGVSZXF1ZXN0ZWQgJiYgIUlz VW5kZXJQb3N0bWFzdGVyKQorCWlmIChTdGFuZGJ5TW9kZVJlcXVlc3RlZCgpICYmICFJc1VuZGVy UG9zdG1hc3RlcikKIAkJZXJlcG9ydChGQVRBTCwKIAkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRV UkVfTk9UX1NVUFBPUlRFRCksCiAJCQkJIGVycm1zZygic3RhbmRieSBtb2RlIGlzIG5vdCBzdXBw b3J0ZWQgYnkgc2luZ2xlLXVzZXIgc2VydmVycyIpKSk7CkBAIC0xMTA4LDEzICsxMDgxLDEzIEBA IHJlYWRSZWNvdmVyeVNpZ25hbEZpbGUodm9pZCkKIHN0YXRpYyB2b2lkCiB2YWxpZGF0ZVJlY292 ZXJ5UGFyYW1ldGVycyh2b2lkKQogewotCWlmICghQXJjaGl2ZVJlY292ZXJ5UmVxdWVzdGVkKQor CWlmICghQXJjaGl2ZVJlY292ZXJ5UmVxdWVzdGVkKCkpCiAJCXJldHVybjsKIAogCS8qCiAJICog Q2hlY2sgZm9yIGNvbXB1bHNvcnkgcGFyYW1ldGVycwogCSAqLwotCWlmIChTdGFuZGJ5TW9kZVJl cXVlc3RlZCkKKwlpZiAoU3RhbmRieU1vZGVSZXF1ZXN0ZWQoKSkKIAl7CiAJCWlmICgoUHJpbWFy eUNvbm5JbmZvID09IE5VTEwgfHwgc3RyY21wKFByaW1hcnlDb25uSW5mbywgIiIpID09IDApICYm CiAJCQkocmVjb3ZlcnlSZXN0b3JlQ29tbWFuZCA9PSBOVUxMIHx8IHN0cmNtcChyZWNvdmVyeVJl c3RvcmVDb21tYW5kLCAiIikgPT0gMCkpCkBAIC0xMTU1LDggKzExMjgsOCBAQCB2YWxpZGF0ZVJl Y292ZXJ5UGFyYW1ldGVycyh2b2lkKQogCS8qCiAJICogSWYgdXNlciBzcGVjaWZpZWQgcmVjb3Zl cnlfdGFyZ2V0X3RpbWVsaW5lLCB2YWxpZGF0ZSBpdCBvciBjb21wdXRlIHRoZQogCSAqICJsYXRl c3QiIHZhbHVlLiAgV2UgY2FuJ3QgZG8gdGhpcyB1bnRpbCBhZnRlciB3ZSd2ZSBnb3R0ZW4gdGhl IHJlc3RvcmUKLQkgKiBjb21tYW5kIGFuZCBzZXQgSW5BcmNoaXZlUmVjb3ZlcnksIGJlY2F1c2Ug d2UgbmVlZCB0byBmZXRjaCB0aW1lbGluZQotCSAqIGhpc3RvcnkgZmlsZXMgZnJvbSB0aGUgYXJj aGl2ZS4KKwkgKiBjb21tYW5kIGFuZCBzZXQgU1hfSU5fQVJDSElWRV9SRUNPVkVSWSwgYmVjYXVz ZSB3ZSBuZWVkIHRvIGZldGNoCisJICogdGltZWxpbmUgaGlzdG9yeSBmaWxlcyBmcm9tIHRoZSBh cmNoaXZlLgogCSAqLwogCWlmIChyZWNvdmVyeVRhcmdldFRpbWVMaW5lR29hbCA9PSBSRUNPVkVS WV9UQVJHRVRfVElNRUxJTkVfTlVNRVJJQykKIAl7CkBAIC0xNDk0LDcgKzE0NjcsNyBAQCBGaW5p c2hXYWxSZWNvdmVyeSh2b2lkKQogCSAqIGkuZS4sIGNhbGxpbmcgWExvZ1NodXRkb3duV2FsUmN2 KCkuCiAJICovCiAJQXNzZXJ0KCFXYWxSY3ZTdHJlYW1pbmcoKSk7Ci0JU3RhbmRieU1vZGUgPSBm YWxzZTsKKwlsb2NhbFJlY292ZXJ5RmxhZ3MgJj0gflNYX0lOX1NUQU5EQllfTU9ERTsKIAogCS8q CiAJICogRGV0ZXJtaW5lIHdoZXJlIHRvIHN0YXJ0IHdyaXRpbmcgV0FMIG5leHQuCkBAIC0xNTMy LDcgKzE1MDUsNyBAQCBGaW5pc2hXYWxSZWNvdmVyeSh2b2lkKQogCSAqLwogCXJlc3VsdC0+ZW5k T2ZMb2dUTEkgPSB4bG9ncmVhZGVyLT5zZWcud3NfdGxpOwogCi0JaWYgKEFyY2hpdmVSZWNvdmVy eVJlcXVlc3RlZCkKKwlpZiAoQXJjaGl2ZVJlY292ZXJ5UmVxdWVzdGVkKCkpCiAJewogCQkvKgog CQkgKiBXZSBhcmUgbm8gbG9uZ2VyIGluIGFyY2hpdmUgcmVjb3Zlcnkgc3RhdGUuCkBAIC0xNTQw LDggKzE1MTMsOCBAQCBGaW5pc2hXYWxSZWNvdmVyeSh2b2lkKQogCQkgKiBXZSBhcmUgbm93IGRv bmUgcmVhZGluZyB0aGUgb2xkIFdBTC4gIFR1cm4gb2ZmIGFyY2hpdmUgZmV0Y2hpbmcgaWYKIAkJ ICogaXQgd2FzIGFjdGl2ZS4KIAkJICovCi0JCUFzc2VydChJbkFyY2hpdmVSZWNvdmVyeSk7Ci0J CUluQXJjaGl2ZVJlY292ZXJ5ID0gZmFsc2U7CisJCUFzc2VydChJbkFyY2hpdmVSZWNvdmVyeSgp KTsKKwkJbG9jYWxSZWNvdmVyeUZsYWdzICY9IH5TWF9JTl9BUkNISVZFX1JFQ09WRVJZOwogCiAJ CS8qCiAJCSAqIElmIHRoZSBlbmRpbmcgbG9nIHNlZ21lbnQgaXMgc3RpbGwgb3BlbiwgY2xvc2Ug aXQgKHRvIGF2b2lkCkBAIC0xNjIxLDcgKzE1OTQsNyBAQCBTaHV0ZG93bldhbFJlY292ZXJ5KHZv aWQpCiAJWExvZ1JlYWRlckZyZWUoeGxvZ3JlYWRlcik7CiAJWExvZ1ByZWZldGNoZXJGcmVlKHhs b2dwcmVmZXRjaGVyKTsKIAotCWlmIChBcmNoaXZlUmVjb3ZlcnlSZXF1ZXN0ZWQpCisJaWYgKEFy Y2hpdmVSZWNvdmVyeVJlcXVlc3RlZCgpKQogCXsKIAkJLyoKIAkJICogU2luY2UgdGhlcmUgbWln aHQgYmUgYSBwYXJ0aWFsIFdBTCBzZWdtZW50IG5hbWVkIFJFQ09WRVJZWExPRywgZ2V0CkBAIC0x NjM5LDcgKzE2MTIsNyBAQCBTaHV0ZG93bldhbFJlY292ZXJ5KHZvaWQpCiAJICogV2UgZG9uJ3Qg bmVlZCB0aGUgbGF0Y2ggYW55bW9yZS4gSXQncyBub3Qgc3RyaWN0bHkgbmVjZXNzYXJ5IHRvIGRp c293bgogCSAqIGl0LCBidXQgbGV0J3MgZG8gaXQgZm9yIHRoZSBzYWtlIG9mIHRpZGluZXNzLgog CSAqLwotCWlmIChBcmNoaXZlUmVjb3ZlcnlSZXF1ZXN0ZWQpCisJaWYgKEFyY2hpdmVSZWNvdmVy eVJlcXVlc3RlZCgpKQogCQlEaXNvd25MYXRjaCgmWExvZ1JlY292ZXJ5Q3RsLT5yZWNvdmVyeVdh a2V1cExhdGNoKTsKIH0KIApAQCAtMTc0MSw3ICsxNzE0LDcgQEAgUGVyZm9ybVdhbFJlY292ZXJ5 KHZvaWQpCiAJCQkJCQlMU05fRk9STUFUX0FSR1MoeGxvZ3JlYWRlci0+UmVhZFJlY1B0cikpKSk7 CiAKIAkJLyogUHJlcGFyZSB0byByZXBvcnQgcHJvZ3Jlc3Mgb2YgdGhlIHJlZG8gcGhhc2UuICov Ci0JCWlmICghU3RhbmRieU1vZGUpCisJCWlmICghSW5TdGFuZGJ5TW9kZSgpKQogCQkJYmVnaW5f c3RhcnR1cF9wcm9ncmVzc19waGFzZSgpOwogCiAJCS8qCkBAIC0xNzQ5LDcgKzE3MjIsNyBAQCBQ ZXJmb3JtV2FsUmVjb3Zlcnkodm9pZCkKIAkJICovCiAJCWRvCiAJCXsKLQkJCWlmICghU3RhbmRi eU1vZGUpCisJCQlpZiAoIUluU3RhbmRieU1vZGUoKSkKIAkJCQllcmVwb3J0X3N0YXJ0dXBfcHJv Z3Jlc3MoInJlZG8gaW4gcHJvZ3Jlc3MsIGVsYXBzZWQgdGltZTogJWxkLiUwMmQgcywgY3VycmVu dCBMU046ICVYLyVYIiwKIAkJCQkJCQkJCQkgTFNOX0ZPUk1BVF9BUkdTKHhsb2dyZWFkZXItPlJl YWRSZWNQdHIpKTsKIApAQCAtMTg5NCw3ICsxODY3LDcgQEAgUGVyZm9ybVdhbFJlY292ZXJ5KHZv aWQpCiAJICogVGhpcyBjaGVjayBpcyBpbnRlbnRpb25hbGx5IGFmdGVyIHRoZSBhYm92ZSBsb2cg bWVzc2FnZXMgdGhhdCBpbmRpY2F0ZQogCSAqIGhvdyBmYXIgcmVjb3Zlcnkgd2VudC4KIAkgKi8K LQlpZiAoQXJjaGl2ZVJlY292ZXJ5UmVxdWVzdGVkICYmCisJaWYgKEFyY2hpdmVSZWNvdmVyeVJl cXVlc3RlZCgpICYmCiAJCXJlY292ZXJ5VGFyZ2V0ICE9IFJFQ09WRVJZX1RBUkdFVF9VTlNFVCAm JgogCQkhcmVhY2hlZFJlY292ZXJ5VGFyZ2V0KQogCQllcmVwb3J0KEZBVEFMLApAQCAtMjE4Niw3 ICsyMTU5LDcgQEAgQ2hlY2tSZWNvdmVyeUNvbnNpc3RlbmN5KHZvaWQpCiAJaWYgKFhMb2dSZWNQ dHJJc0ludmFsaWQobWluUmVjb3ZlcnlQb2ludCkpCiAJCXJldHVybjsKIAotCUFzc2VydChJbkFy Y2hpdmVSZWNvdmVyeSk7CisJQXNzZXJ0KEluQXJjaGl2ZVJlY292ZXJ5KCkpOwogCiAJLyoKIAkg KiBhc3N1bWUgdGhhdCB3ZSBhcmUgY2FsbGVkIGluIHRoZSBzdGFydHVwIHByb2Nlc3MsIGFuZCBo ZW5jZSBkb24ndCBuZWVkCkBAIC0yMjU2LDE1ICsyMjI5LDE1IEBAIENoZWNrUmVjb3ZlcnlDb25z aXN0ZW5jeSh2b2lkKQogCSAqIGVuYWJsaW5nIGNvbm5lY3Rpb25zLgogCSAqLwogCWlmIChzdGFu ZGJ5U3RhdGUgPT0gU1RBTkRCWV9TTkFQU0hPVF9SRUFEWSAmJgotCQkhTG9jYWxIb3RTdGFuZGJ5 QWN0aXZlICYmCisJCSEobG9jYWxSZWNvdmVyeUZsYWdzICYgU1hfSE9UX1NUQU5EQllfQUNUSVZF KSAmJgogCQlyZWFjaGVkQ29uc2lzdGVuY3kgJiYKIAkJSXNVbmRlclBvc3RtYXN0ZXIpCiAJewog CQlTcGluTG9ja0FjcXVpcmUoJlhMb2dSZWNvdmVyeUN0bC0+aW5mb19sY2spOwotCQlYTG9nUmVj b3ZlcnlDdGwtPlNoYXJlZEhvdFN0YW5kYnlBY3RpdmUgPSB0cnVlOworCQlYTG9nUmVjb3ZlcnlD dGwtPnNoYXJlZFJlY292ZXJ5RmxhZ3MgfD0gU1hfSE9UX1NUQU5EQllfQUNUSVZFOwogCQlTcGlu TG9ja1JlbGVhc2UoJlhMb2dSZWNvdmVyeUN0bC0+aW5mb19sY2spOwogCi0JCUxvY2FsSG90U3Rh bmRieUFjdGl2ZSA9IHRydWU7CisJCWxvY2FsUmVjb3ZlcnlGbGFncyB8PSBTWF9IT1RfU1RBTkRC WV9BQ1RJVkU7CiAKIAkJU2VuZFBvc3RtYXN0ZXJTaWduYWwoUE1TSUdOQUxfQkVHSU5fSE9UX1NU QU5EQlkpOwogCX0KQEAgLTI1ODQsNyArMjU1Nyw3IEBAIHJlY292ZXJ5U3RvcHNCZWZvcmUoWExv Z1JlYWRlclN0YXRlICpyZWNvcmQpCiAJICogSWdub3JlIHJlY292ZXJ5IHRhcmdldCBzZXR0aW5n cyB3aGVuIG5vdCBpbiBhcmNoaXZlIHJlY292ZXJ5IChtZWFuaW5nCiAJICogd2UgYXJlIGluIGNy YXNoIHJlY292ZXJ5KS4KIAkgKi8KLQlpZiAoIUFyY2hpdmVSZWNvdmVyeVJlcXVlc3RlZCkKKwlp ZiAoIUFyY2hpdmVSZWNvdmVyeVJlcXVlc3RlZCgpKQogCQlyZXR1cm4gZmFsc2U7CiAKIAkvKiBD aGVjayBpZiB3ZSBzaG91bGQgc3RvcCBhcyBzb29uIGFzIHJlYWNoaW5nIGNvbnNpc3RlbmN5ICov CkBAIC0yNzM2LDcgKzI3MDksNyBAQCByZWNvdmVyeVN0b3BzQWZ0ZXIoWExvZ1JlYWRlclN0YXRl ICpyZWNvcmQpCiAJICogSWdub3JlIHJlY292ZXJ5IHRhcmdldCBzZXR0aW5ncyB3aGVuIG5vdCBp biBhcmNoaXZlIHJlY292ZXJ5IChtZWFuaW5nCiAJICogd2UgYXJlIGluIGNyYXNoIHJlY292ZXJ5 KS4KIAkgKi8KLQlpZiAoIUFyY2hpdmVSZWNvdmVyeVJlcXVlc3RlZCkKKwlpZiAoIUFyY2hpdmVS ZWNvdmVyeVJlcXVlc3RlZCgpKQogCQlyZXR1cm4gZmFsc2U7CiAKIAlpbmZvID0gWExvZ1JlY0dl dEluZm8ocmVjb3JkKSAmIH5YTFJfSU5GT19NQVNLOwpAQCAtMjkyNywxMSArMjkwMCwxMSBAQCBz dGF0aWMgdm9pZAogcmVjb3ZlcnlQYXVzZXNIZXJlKGJvb2wgZW5kT2ZSZWNvdmVyeSkKIHsKIAkv KiBEb24ndCBwYXVzZSB1bmxlc3MgdXNlcnMgY2FuIGNvbm5lY3QhICovCi0JaWYgKCFMb2NhbEhv dFN0YW5kYnlBY3RpdmUpCisJaWYgKCEobG9jYWxSZWNvdmVyeUZsYWdzICYgU1hfSE9UX1NUQU5E QllfQUNUSVZFKSkKIAkJcmV0dXJuOwogCiAJLyogRG9uJ3QgcGF1c2UgYWZ0ZXIgc3RhbmRieSBw cm9tb3Rpb24gaGFzIGJlZW4gdHJpZ2dlcmVkICovCi0JaWYgKExvY2FsUHJvbW90ZUlzVHJpZ2dl cmVkKQorCWlmIChsb2NhbFJlY292ZXJ5RmxhZ3MgJiBTWF9QUk9NT1RFX0lTX1RSSUdHRVJFRCkK IAkJcmV0dXJuOwogCiAJaWYgKGVuZE9mUmVjb3ZlcnkpCkBAIC0yOTk3LDcgKzI5NzAsNyBAQCBy ZWNvdmVyeUFwcGx5RGVsYXkoWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCiAJCXJldHVybiBmYWxz ZTsKIAogCS8qIG5vdGhpbmcgdG8gZG8gaWYgY3Jhc2ggcmVjb3ZlcnkgaXMgcmVxdWVzdGVkICov Ci0JaWYgKCFBcmNoaXZlUmVjb3ZlcnlSZXF1ZXN0ZWQpCisJaWYgKCFBcmNoaXZlUmVjb3ZlcnlS ZXF1ZXN0ZWQoKSkKIAkJcmV0dXJuIGZhbHNlOwogCiAJLyoKQEAgLTMxNTksMTMgKzMxMzIsMTMg QEAgUmVhZFJlY29yZChYTG9nUHJlZmV0Y2hlciAqeGxvZ3ByZWZldGNoZXIsIGludCBlbW9kZSwK IAkJCSAqIHRvIGluZGljYXRlIHRvIGRvd25zdHJlYW0gV0FMIHJlYWRlcnMgdGhhdCB0aGF0IHBv cnRpb24gaXMgdG8KIAkJCSAqIGJlIGlnbm9yZWQuCiAJCQkgKgotCQkJICogSG93ZXZlciwgd2hl biBBcmNoaXZlUmVjb3ZlcnlSZXF1ZXN0ZWQgPSB0cnVlLCB3ZSdyZSBnb2luZyB0bworCQkJICog SG93ZXZlciwgd2hlbiBBcmNoaXZlUmVjb3ZlcnlSZXF1ZXN0ZWQoKSA9IHRydWUsIHdlJ3JlIGdv aW5nIHRvCiAJCQkgKiBzd2l0Y2ggdG8gYSBuZXcgdGltZWxpbmUgYXQgdGhlIGVuZCBvZiByZWNv dmVyeS4gV2Ugd2lsbCBvbmx5CiAJCQkgKiBjb3B5IFdBTCBvdmVyIHRvIHRoZSBuZXcgdGltZWxp bmUgdXAgdG8gdGhlIGVuZCBvZiB0aGUgbGFzdAogCQkJICogY29tcGxldGUgcmVjb3JkLCBzbyBp ZiB3ZSBkaWQgdGhpcywgd2Ugd291bGQgbGF0ZXIgY3JlYXRlIGFuCiAJCQkgKiBvdmVyd3JpdGUg Y29udHJlY29yZCBpbiB0aGUgd3JvbmcgcGxhY2UsIGJyZWFraW5nIGV2ZXJ5dGhpbmcuCiAJCQkg Ki8KLQkJCWlmICghQXJjaGl2ZVJlY292ZXJ5UmVxdWVzdGVkICYmCisJCQlpZiAoIUFyY2hpdmVS ZWNvdmVyeVJlcXVlc3RlZCgpICYmCiAJCQkJIVhMb2dSZWNQdHJJc0ludmFsaWQoeGxvZ3JlYWRl ci0+YWJvcnRlZFJlY1B0cikpCiAJCQl7CiAJCQkJYWJvcnRlZFJlY1B0ciA9IHhsb2dyZWFkZXIt PmFib3J0ZWRSZWNQdHI7CkBAIC0zMjM0LDEzICszMjA3LDEzIEBAIFJlYWRSZWNvcmQoWExvZ1By ZWZldGNoZXIgKnhsb2dwcmVmZXRjaGVyLCBpbnQgZW1vZGUsCiAJCQkgKiB3ZSdkIGhhdmUgbm8g aWRlYSBob3cgZmFyIHdlJ2QgaGF2ZSB0byByZXBsYXkgdG8gcmVhY2gKIAkJCSAqIGNvbnNpc3Rl bmN5LiAgU28gZXJyIG9uIHRoZSBzYWZlIHNpZGUgYW5kIGdpdmUgdXAuCiAJCQkgKi8KLQkJCWlm ICghSW5BcmNoaXZlUmVjb3ZlcnkgJiYgQXJjaGl2ZVJlY292ZXJ5UmVxdWVzdGVkICYmCisJCQlp ZiAoIUluQXJjaGl2ZVJlY292ZXJ5KCkgJiYgQXJjaGl2ZVJlY292ZXJ5UmVxdWVzdGVkKCkgJiYK IAkJCQkhZmV0Y2hpbmdfY2twdCkKIAkJCXsKIAkJCQllcmVwb3J0KERFQlVHMSwKIAkJCQkJCShl cnJtc2dfaW50ZXJuYWwoInJlYWNoZWQgZW5kIG9mIFdBTCBpbiBwZ193YWwsIGVudGVyaW5nIGFy Y2hpdmUgcmVjb3ZlcnkiKSkpOwotCQkJCUluQXJjaGl2ZVJlY292ZXJ5ID0gdHJ1ZTsKLQkJCQlp ZiAoU3RhbmRieU1vZGVSZXF1ZXN0ZWQpCisJCQkJbG9jYWxSZWNvdmVyeUZsYWdzIHw9IFNYX0lO X0FSQ0hJVkVfUkVDT1ZFUlk7CisJCQkJaWYgKFN0YW5kYnlNb2RlUmVxdWVzdGVkKCkpCiAJCQkJ CUVuYWJsZVN0YW5kYnlNb2RlKCk7CiAKIAkJCQlTd2l0Y2hJbnRvQXJjaGl2ZVJlY292ZXJ5KHhs b2dyZWFkZXItPkVuZFJlY1B0ciwgcmVwbGF5VExJKTsKQEAgLTMyNjAsNyArMzIzMyw3IEBAIFJl YWRSZWNvcmQoWExvZ1ByZWZldGNoZXIgKnhsb2dwcmVmZXRjaGVyLCBpbnQgZW1vZGUsCiAJCQl9 CiAKIAkJCS8qIEluIHN0YW5kYnkgbW9kZSwgbG9vcCBiYWNrIHRvIHJldHJ5LiBPdGhlcndpc2Us IGdpdmUgdXAuICovCi0JCQlpZiAoU3RhbmRieU1vZGUgJiYgIUNoZWNrRm9yU3RhbmRieVRyaWdn ZXIoKSkKKwkJCWlmIChJblN0YW5kYnlNb2RlKCkgJiYgIUNoZWNrRm9yU3RhbmRieVRyaWdnZXIo KSkKIAkJCQljb250aW51ZTsKIAkJCWVsc2UKIAkJCQlyZXR1cm4gTlVMTDsKQEAgLTMzMjEsNyAr MzI5NCw3IEBAIFhMb2dQYWdlUmVhZChYTG9nUmVhZGVyU3RhdGUgKnhsb2dyZWFkZXIsIFhMb2dS ZWNQdHIgdGFyZ2V0UGFnZVB0ciwgaW50IHJlcUxlbiwKIAkJICogUmVxdWVzdCBhIHJlc3RhcnRw b2ludCBpZiB3ZSd2ZSByZXBsYXllZCB0b28gbXVjaCB4bG9nIHNpbmNlIHRoZQogCQkgKiBsYXN0 IG9uZS4KIAkJICovCi0JCWlmIChBcmNoaXZlUmVjb3ZlcnlSZXF1ZXN0ZWQgJiYgSXNVbmRlclBv c3RtYXN0ZXIpCisJCWlmIChBcmNoaXZlUmVjb3ZlcnlSZXF1ZXN0ZWQoKSAmJiBJc1VuZGVyUG9z dG1hc3RlcikKIAkJewogCQkJaWYgKFhMb2dDaGVja3BvaW50TmVlZGVkKHJlYWRTZWdObykpCiAJ CQl7CkBAIC0zNDY0LDcgKzM0MzcsNyBAQCByZXRyeToKIAkgKiBwYWdlIGhlYWRlciBoZXJlIGZv ciB0aGUgcmV0cnkuIEluc3RlYWQsIFJlYWRQYWdlSW50ZXJuYWwoKSBpcwogCSAqIHJlc3BvbnNp YmxlIGZvciB0aGUgdmFsaWRhdGlvbi4KIAkgKi8KLQlpZiAoU3RhbmRieU1vZGUgJiYKKwlpZiAo SW5TdGFuZGJ5TW9kZSgpICYmCiAJCSFYTG9nUmVhZGVyVmFsaWRhdGVQYWdlSGVhZGVyKHhsb2dy ZWFkZXIsIHRhcmdldFBhZ2VQdHIsIHJlYWRCdWYpKQogCXsKIAkJLyoKQEAgLTM1MDAsNyArMzQ3 Myw3IEBAIG5leHRfcmVjb3JkX2lzX2ludmFsaWQ6CiAJcmVhZFNvdXJjZSA9IFhMT0dfRlJPTV9B Tlk7CiAKIAkvKiBJbiBzdGFuZGJ5LW1vZGUsIGtlZXAgdHJ5aW5nICovCi0JaWYgKFN0YW5kYnlN b2RlKQorCWlmIChJblN0YW5kYnlNb2RlKCkpCiAJCWdvdG8gcmV0cnk7CiAJZWxzZQogCQlyZXR1 cm4gWExSRUFEX0ZBSUw7CkBAIC0zNTc1LDEwICszNTQ4LDEwIEBAIFdhaXRGb3JXQUxUb0JlY29t ZUF2YWlsYWJsZShYTG9nUmVjUHRyIFJlY1B0ciwgYm9vbCByYW5kQWNjZXNzLAogCSAqIHRoZSBl bmQgb2YgcmVjb3ZlcnkuCiAJICotLS0tLS0tCiAJICovCi0JaWYgKCFJbkFyY2hpdmVSZWNvdmVy eSkKKwlpZiAoIUluQXJjaGl2ZVJlY292ZXJ5KCkpCiAJCWN1cnJlbnRTb3VyY2UgPSBYTE9HX0ZS T01fUEdfV0FMOwogCWVsc2UgaWYgKGN1cnJlbnRTb3VyY2UgPT0gWExPR19GUk9NX0FOWSB8fAot CQkJICghU3RhbmRieU1vZGUgJiYgY3VycmVudFNvdXJjZSA9PSBYTE9HX0ZST01fU1RSRUFNKSkK KwkJCSAoIUluU3RhbmRieU1vZGUoKSAmJiBjdXJyZW50U291cmNlID09IFhMT0dfRlJPTV9TVFJF QU0pKQogCXsKIAkJbGFzdFNvdXJjZUZhaWxlZCA9IGZhbHNlOwogCQljdXJyZW50U291cmNlID0g WExPR19GUk9NX0FSQ0hJVkU7CkBAIC0zNjE2LDcgKzM1ODksNyBAQCBXYWl0Rm9yV0FMVG9CZWNv bWVBdmFpbGFibGUoWExvZ1JlY1B0ciBSZWNQdHIsIGJvb2wgcmFuZEFjY2VzcywKIAkJCQkJICog ZmluaXNoIHJlcGxheWluZyBhcyBtdWNoIGFzIHdlIGNhbiBmcm9tIGFyY2hpdmUgYW5kCiAJCQkJ CSAqIHBnX3dhbCBiZWZvcmUgZmFpbG92ZXIuCiAJCQkJCSAqLwotCQkJCQlpZiAoU3RhbmRieU1v ZGUgJiYgQ2hlY2tGb3JTdGFuZGJ5VHJpZ2dlcigpKQorCQkJCQlpZiAoSW5TdGFuZGJ5TW9kZSgp ICYmIENoZWNrRm9yU3RhbmRieVRyaWdnZXIoKSkKIAkJCQkJewogCQkJCQkJWExvZ1NodXRkb3du V2FsUmN2KCk7CiAJCQkJCQlyZXR1cm4gWExSRUFEX0ZBSUw7CkBAIC0zNjI2LDcgKzM1OTksNyBA QCBXYWl0Rm9yV0FMVG9CZWNvbWVBdmFpbGFibGUoWExvZ1JlY1B0ciBSZWNQdHIsIGJvb2wgcmFu ZEFjY2VzcywKIAkJCQkJICogTm90IGluIHN0YW5kYnkgbW9kZSwgYW5kIHdlJ3ZlIG5vdyB0cmll ZCB0aGUgYXJjaGl2ZQogCQkJCQkgKiBhbmQgcGdfd2FsLgogCQkJCQkgKi8KLQkJCQkJaWYgKCFT dGFuZGJ5TW9kZSkKKwkJCQkJaWYgKCFJblN0YW5kYnlNb2RlKCkpCiAJCQkJCQlyZXR1cm4gWExS RUFEX0ZBSUw7CiAKIAkJCQkJLyoKQEAgLTM2NTgsNyArMzYzMSw3IEBAIFdhaXRGb3JXQUxUb0Jl Y29tZUF2YWlsYWJsZShYTG9nUmVjUHRyIFJlY1B0ciwgYm9vbCByYW5kQWNjZXNzLAogCQkJCQkg KiBXZSBzaG91bGQgYmUgYWJsZSB0byBtb3ZlIHRvIFhMT0dfRlJPTV9TVFJFQU0gb25seSBpbgog CQkJCQkgKiBzdGFuZGJ5IG1vZGUuCiAJCQkJCSAqLwotCQkJCQlBc3NlcnQoU3RhbmRieU1vZGUp OworCQkJCQlBc3NlcnQoSW5TdGFuZGJ5TW9kZSgpKTsKIAogCQkJCQkvKgogCQkJCQkgKiBCZWZv cmUgd2UgbGVhdmUgWExPR19GUk9NX1NUUkVBTSBzdGF0ZSwgbWFrZSBzdXJlIHRoYXQKQEAgLTM3 MjksNyArMzcwMiw3IEBAIFdhaXRGb3JXQUxUb0JlY29tZUF2YWlsYWJsZShYTG9nUmVjUHRyIFJl Y1B0ciwgYm9vbCByYW5kQWNjZXNzLAogCQkJICogdGhlIGFyY2hpdmUgb3ZlciBvbmVzIGluIHBn X3dhbCwgc28gdHJ5IHRoZSBuZXh0IGZpbGUgYWdhaW4KIAkJCSAqIGZyb20gdGhlIGFyY2hpdmUg Zmlyc3QuCiAJCQkgKi8KLQkJCWlmIChJbkFyY2hpdmVSZWNvdmVyeSkKKwkJCWlmIChJbkFyY2hp dmVSZWNvdmVyeSgpKQogCQkJCWN1cnJlbnRTb3VyY2UgPSBYTE9HX0ZST01fQVJDSElWRTsKIAkJ fQogCkBAIC0zNzg5LDcgKzM3NjIsNyBAQCBXYWl0Rm9yV0FMVG9CZWNvbWVBdmFpbGFibGUoWExv Z1JlY1B0ciBSZWNQdHIsIGJvb2wgcmFuZEFjY2VzcywKIAkJCQkJICogV2Ugc2hvdWxkIGJlIGFi bGUgdG8gbW92ZSB0byBYTE9HX0ZST01fU1RSRUFNIG9ubHkgaW4KIAkJCQkJICogc3RhbmRieSBt b2RlLgogCQkJCQkgKi8KLQkJCQkJQXNzZXJ0KFN0YW5kYnlNb2RlKTsKKwkJCQkJQXNzZXJ0KElu U3RhbmRieU1vZGUoKSk7CiAKIAkJCQkJLyoKIAkJCQkJICogRmlyc3QsIHNodXRkb3duIHdhbHJl Y2VpdmVyIGlmIGl0cyByZXN0YXJ0IGhhcyBiZWVuCkBAIC00Mzk3LDIxICs0MzcwLDIyIEBAIFBy b21vdGVJc1RyaWdnZXJlZCh2b2lkKQogCSAqIHRyaWdnZXJlZC4gV2UgY2FuJ3QgdHJpZ2dlciBh IHByb21vdGlvbiBhZ2Fpbiwgc28gdGhlcmUncyBubyBuZWVkIHRvCiAJICoga2VlcCBjaGVja2lu ZyBhZnRlciB0aGUgc2hhcmVkIHZhcmlhYmxlIGhhcyBvbmNlIGJlZW4gc2VlbiB0cnVlLgogCSAq LwotCWlmIChMb2NhbFByb21vdGVJc1RyaWdnZXJlZCkKKwlpZiAobG9jYWxSZWNvdmVyeUZsYWdz ICYgU1hfUFJPTU9URV9JU19UUklHR0VSRUQpCiAJCXJldHVybiB0cnVlOwogCiAJU3BpbkxvY2tB Y3F1aXJlKCZYTG9nUmVjb3ZlcnlDdGwtPmluZm9fbGNrKTsKLQlMb2NhbFByb21vdGVJc1RyaWdn ZXJlZCA9IFhMb2dSZWNvdmVyeUN0bC0+U2hhcmVkUHJvbW90ZUlzVHJpZ2dlcmVkOworCWxvY2Fs UmVjb3ZlcnlGbGFncyB8PQorCQkoWExvZ1JlY292ZXJ5Q3RsLT5zaGFyZWRSZWNvdmVyeUZsYWdz ICYgU1hfUFJPTU9URV9JU19UUklHR0VSRUQpOwogCVNwaW5Mb2NrUmVsZWFzZSgmWExvZ1JlY292 ZXJ5Q3RsLT5pbmZvX2xjayk7CiAKLQlyZXR1cm4gTG9jYWxQcm9tb3RlSXNUcmlnZ2VyZWQ7CisJ cmV0dXJuIGxvY2FsUmVjb3ZlcnlGbGFncyAmIFNYX1BST01PVEVfSVNfVFJJR0dFUkVEOwogfQog CiBzdGF0aWMgdm9pZAogU2V0UHJvbW90ZUlzVHJpZ2dlcmVkKHZvaWQpCiB7CiAJU3BpbkxvY2tB Y3F1aXJlKCZYTG9nUmVjb3ZlcnlDdGwtPmluZm9fbGNrKTsKLQlYTG9nUmVjb3ZlcnlDdGwtPlNo YXJlZFByb21vdGVJc1RyaWdnZXJlZCA9IHRydWU7CisJWExvZ1JlY292ZXJ5Q3RsLT5zaGFyZWRS ZWNvdmVyeUZsYWdzIHw9IFNYX1BST01PVEVfSVNfVFJJR0dFUkVEOwogCVNwaW5Mb2NrUmVsZWFz ZSgmWExvZ1JlY292ZXJ5Q3RsLT5pbmZvX2xjayk7CiAKIAkvKgpAQCAtNDQyMiw3ICs0Mzk2LDcg QEAgU2V0UHJvbW90ZUlzVHJpZ2dlcmVkKHZvaWQpCiAJICovCiAJU2V0UmVjb3ZlcnlQYXVzZShm YWxzZSk7CiAKLQlMb2NhbFByb21vdGVJc1RyaWdnZXJlZCA9IHRydWU7CisJbG9jYWxSZWNvdmVy eUZsYWdzIHw9IFNYX1BST01PVEVfSVNfVFJJR0dFUkVEOwogfQogCiAvKgpAQCAtNDQzMSw3ICs0 NDA1LDcgQEAgU2V0UHJvbW90ZUlzVHJpZ2dlcmVkKHZvaWQpCiBzdGF0aWMgYm9vbAogQ2hlY2tG b3JTdGFuZGJ5VHJpZ2dlcih2b2lkKQogewotCWlmIChMb2NhbFByb21vdGVJc1RyaWdnZXJlZCkK KwlpZiAobG9jYWxSZWNvdmVyeUZsYWdzICYgU1hfUFJPTU9URV9JU19UUklHR0VSRUQpCiAJCXJl dHVybiB0cnVlOwogCiAJaWYgKElzUHJvbW90ZVNpZ25hbGVkKCkgJiYgQ2hlY2tQcm9tb3RlU2ln bmFsKCkpCkBAIC00NTA1LDE2ICs0NDc5LDE3IEBAIEhvdFN0YW5kYnlBY3RpdmUodm9pZCkKIAkg KiBjYW4ndCBkZS1hY3RpdmF0ZSBIb3QgU3RhbmRieSwgc28gdGhlcmUncyBubyBuZWVkIHRvIGtl ZXAgY2hlY2tpbmcKIAkgKiBhZnRlciB0aGUgc2hhcmVkIHZhcmlhYmxlIGhhcyBvbmNlIGJlZW4g c2VlbiB0cnVlLgogCSAqLwotCWlmIChMb2NhbEhvdFN0YW5kYnlBY3RpdmUpCisJaWYgKGxvY2Fs UmVjb3ZlcnlGbGFncyAmIFNYX0hPVF9TVEFOREJZX0FDVElWRSkKIAkJcmV0dXJuIHRydWU7CiAJ ZWxzZQogCXsKIAkJLyogc3BpbmxvY2sgaXMgZXNzZW50aWFsIG9uIG1hY2hpbmVzIHdpdGggd2Vh ayBtZW1vcnkgb3JkZXJpbmchICovCiAJCVNwaW5Mb2NrQWNxdWlyZSgmWExvZ1JlY292ZXJ5Q3Rs LT5pbmZvX2xjayk7Ci0JCUxvY2FsSG90U3RhbmRieUFjdGl2ZSA9IFhMb2dSZWNvdmVyeUN0bC0+ U2hhcmVkSG90U3RhbmRieUFjdGl2ZTsKKwkJbG9jYWxSZWNvdmVyeUZsYWdzIHw9CisJCQkoWExv Z1JlY292ZXJ5Q3RsLT5zaGFyZWRSZWNvdmVyeUZsYWdzICYgU1hfSE9UX1NUQU5EQllfQUNUSVZF KTsKIAkJU3BpbkxvY2tSZWxlYXNlKCZYTG9nUmVjb3ZlcnlDdGwtPmluZm9fbGNrKTsKIAotCQly ZXR1cm4gTG9jYWxIb3RTdGFuZGJ5QWN0aXZlOworCQlyZXR1cm4gbG9jYWxSZWNvdmVyeUZsYWdz ICYgU1hfSE9UX1NUQU5EQllfQUNUSVZFOwogCX0KIH0KIApAQCAtNDUyNiw3ICs0NTAxLDcgQEAg c3RhdGljIGJvb2wKIEhvdFN0YW5kYnlBY3RpdmVJblJlcGxheSh2b2lkKQogewogCUFzc2VydChB bVN0YXJ0dXBQcm9jZXNzKCkgfHwgIUlzUG9zdG1hc3RlckVudmlyb25tZW50KTsKLQlyZXR1cm4g TG9jYWxIb3RTdGFuZGJ5QWN0aXZlOworCXJldHVybiBsb2NhbFJlY292ZXJ5RmxhZ3MgJiBTWF9I T1RfU1RBTkRCWV9BQ1RJVkU7CiB9CiAKIC8qCkBAIC01MDQ0LDMgKzUwMTksMjMgQEAgYXNzaWdu X3JlY292ZXJ5X3RhcmdldF94aWQoY29uc3QgY2hhciAqbmV3dmFsLCB2b2lkICpleHRyYSkKIAll bHNlCiAJCXJlY292ZXJ5VGFyZ2V0ID0gUkVDT1ZFUllfVEFSR0VUX1VOU0VUOwogfQorCitib29s IFN0YW5kYnlNb2RlUmVxdWVzdGVkKHZvaWQpCit7CisJcmV0dXJuIGxvY2FsUmVjb3ZlcnlGbGFn cyAmIFNYX1NUQU5EQllfTU9ERV9SRVFVRVNURUQ7Cit9CisKK2Jvb2wgQXJjaGl2ZVJlY292ZXJ5 UmVxdWVzdGVkKHZvaWQpCit7CisJcmV0dXJuIGxvY2FsUmVjb3ZlcnlGbGFncyAmIFNYX0FSQ0hJ VkVfUkVDT1ZFUllfUkVRVUVTVEVEOworfQorCitib29sIEluQXJjaGl2ZVJlY292ZXJ5KHZvaWQp Cit7CisJcmV0dXJuIGxvY2FsUmVjb3ZlcnlGbGFncyAmIFNYX0lOX0FSQ0hJVkVfUkVDT1ZFUlk7 Cit9CisKK2Jvb2wgSW5TdGFuZGJ5TW9kZSh2b2lkKQoreworCXJldHVybiBsb2NhbFJlY292ZXJ5 RmxhZ3MgJiBTWF9JTl9TVEFOREJZX01PREU7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9sb2dpY2FsL3Nsb3RzeW5jLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9s b2dpY2FsL3Nsb3RzeW5jLmMKaW5kZXggZjY5NDVhZjFkNDMuLmI4YWM0YzZjNWRmIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Nsb3RzeW5jLmMKKysrIGIvc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9zbG90c3luYy5jCkBAIC0xNTE3LDcgKzE1MTcs NyBAQCB1cGRhdGVfc3luY2VkX3Nsb3RzX2luYWN0aXZlX3NpbmNlKHZvaWQpCiAJICogbG9uZyB0 aW1lIGFmdGVyIHByb21vdGlvbiBpZiB0aGV5IGhhdmVuJ3QgYmVlbiBzeW5jaHJvbml6ZWQgcmVj ZW50bHkuCiAJICogV2hvZXZlciBhY3F1aXJlcyB0aGUgc2xvdCwgaS5lLiwgbWFrZXMgdGhlIHNs b3QgYWN0aXZlLCB3aWxsIHJlc2V0IGl0LgogCSAqLwotCWlmICghU3RhbmRieU1vZGUpCisJaWYg KCFJblN0YW5kYnlNb2RlKCkpCiAJCXJldHVybjsKIAogCS8qIFRoZSBzbG90IHN5bmMgd29ya2Vy IG9yIFNRTCBmdW5jdGlvbiBtdXN0bid0IGJlIHJ1bm5pbmcgYnkgbm93ICovCmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZ19pbnRlcm5hbC5oIGIvc3JjL2luY2x1ZGUvYWNjZXNz L3hsb2dfaW50ZXJuYWwuaAppbmRleCAwYjdjNTYzMzJiNS4uZmY1ZTRmY2UzMDUgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy94bG9nX2ludGVybmFsLmgKKysrIGIvc3JjL2luY2x1ZGUv YWNjZXNzL3hsb2dfaW50ZXJuYWwuaApAQCAtMzkyLDE0ICszOTIsMTMgQEAgZXh0ZXJuIHZvaWQg R2V0T2xkZXN0UmVzdGFydFBvaW50KFhMb2dSZWNQdHIgKm9sZHJlY3B0ciwgVGltZUxpbmVJRCAq b2xkdGxpKTsKIGV4dGVybiB2b2lkIFhMb2dSZWNHZXRCbG9ja1JlZkluZm8oWExvZ1JlYWRlclN0 YXRlICpyZWNvcmQsIGJvb2wgcHJldHR5LAogCQkJCQkJCQkgICBib29sIGRldGFpbGVkX2Zvcm1h dCwgU3RyaW5nSW5mbyBidWYsCiAJCQkJCQkJCSAgIHVpbnQzMiAqZnBpX2xlbik7Ci0KIC8qCiAg KiBFeHBvcnRlZCBmb3IgdGhlIGZ1bmN0aW9ucyBpbiB0aW1lbGluZS5jIGFuZCB4bG9nYXJjaGl2 ZS5jLiAgT25seSB2YWxpZAogICogaW4gdGhlIHN0YXJ0dXAgcHJvY2Vzcy4KICAqLwotZXh0ZXJu IFBHRExMSU1QT1JUIGJvb2wgQXJjaGl2ZVJlY292ZXJ5UmVxdWVzdGVkOwotZXh0ZXJuIFBHRExM SU1QT1JUIGJvb2wgSW5BcmNoaXZlUmVjb3Zlcnk7Ci1leHRlcm4gUEdETExJTVBPUlQgYm9vbCBT dGFuZGJ5TW9kZTsKK2V4dGVybiBQR0RMTElNUE9SVCBib29sIEFyY2hpdmVSZWNvdmVyeVJlcXVl c3RlZCh2b2lkKTsKK2V4dGVybiBQR0RMTElNUE9SVCBib29sIEluQXJjaGl2ZVJlY292ZXJ5KHZv aWQpOworZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgSW5TdGFuZGJ5TW9kZSh2b2lkKTsKIGV4dGVy biBQR0RMTElNUE9SVCBjaGFyICpyZWNvdmVyeVJlc3RvcmVDb21tYW5kOwogCiAjZW5kaWYJCQkJ CQkJLyogWExPR19JTlRFUk5BTF9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3Mv eGxvZ3JlY292ZXJ5LmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZ3JlY292ZXJ5LmgKaW5kZXgg OTE0NDYzMDMwMjQuLjJkNDQ5MDVlYTM2IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3Mv eGxvZ3JlY292ZXJ5LmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2dyZWNvdmVyeS5oCkBA IC0xNiw2ICsxNiwzNyBAQAogI2luY2x1ZGUgImxpYi9zdHJpbmdpbmZvLmgiCiAjaW5jbHVkZSAi dXRpbHMvdGltZXN0YW1wLmgiCiAKKy8qCisgKiBUaGUgZmxhZyBpbmRpY2F0ZXMgaWYgd2UgYWxs b3cgaG90IHN0YW5kYnkgcXVlcmllcyB0byBiZSBydW4uCisgKi8KKyNkZWZpbmUgU1hfSE9UX1NU QU5EQllfQUNUSVZFCQkJMHgwMQkvKiBTWDogU3RhcnR1cCBYbG9nICovCisvKgorICogVGhlIGZs YWcgaW5kaWNhdGVzIGlmIGEgc3RhbmRieSBwcm9tb3Rpb24gaGFzIGJlZW4gdHJpZ2dlcmVkLgor ICovCisjZGVmaW5lIFNYX1BST01PVEVfSVNfVFJJR0dFUkVECQkJMHgwMgorLyoKKyAqIFdoZW4g U1hfQVJDSElWRV9SRUNPVkVSWV9SRVFVRVNURUQgaXMgc2V0LCBhcmNoaXZlIHJlY292ZXJ5IHdh cyByZXF1ZXN0ZWQsCisgKiBpLmUuIHNpZ25hbCBmaWxlcyB3ZXJlIHByZXNlbnQuICBXaGVuIFNY X0lOX0FSQ0hJVkVfUkVDT1ZFUlkgaXMgc2V0LCB3ZSBhcmUKKyAqIGN1cnJlbnRseSByZWNvdmVy aW5nIHVzaW5nIG9mZmxpbmUgWExPRyBhcmNoaXZlcy4gIFRoZXNlIHZhcmlhYmxlcyBhcmUgb25s eQorICogdmFsaWQgaW4gdGhlIHN0YXJ0dXAgcHJvY2Vzcy4KKyAqCisgKiBXaGVuIFNYX0FSQ0hJ VkVfUkVDT1ZFUllfUkVRVUVTVEVEIGlzIHNldCwgYnV0IFNYX0lOX0FSQ0hJVkVfUkVDT1ZFUlkg aXMKKyAqIG5vdCwgd2UncmUgY3VycmVudGx5IHBlcmZvcm1pbmcgY3Jhc2ggcmVjb3ZlcnkgdXNp bmcgb25seSBYTE9HIGZpbGVzIGluCisgKiBwZ193YWwsIGJ1dCB3aWxsIHN3aXRjaCB0byB1c2lu ZyBvZmZsaW5lIFhMT0cgYXJjaGl2ZXMgYXMgc29vbiBhcyB3ZSByZWFjaAorICogdGhlIGVuZCBv ZiBXQUwgaW4gcGdfd2FsLgorICovCisjZGVmaW5lIFNYX0FSQ0hJVkVfUkVDT1ZFUllfUkVRVUVT VEVECTB4MDQKKyNkZWZpbmUgU1hfSU5fQVJDSElWRV9SRUNPVkVSWQkJCTB4MDgKKy8qCisgKiBX aGVuIFNYX1NUQU5EQllfTU9ERV9SRVFVRVNURUQgaXMgc2V0LCBzdGFuZGJ5IG1vZGUgd2FzIHJl cXVlc3RlZCwgaS5lLgorICogc3RhbmRieS5zaWduYWwgZmlsZSB3YXMgcHJlc2VudC4gIFdoZW4g U1hfSU5fU1RBTkRCWV9NT0RFIGlzIHNldCwgd2UgYXJlCisgKiBjdXJyZW50bHkgaW4gc3RhbmRi eSBtb2RlLiAgVGhlc2UgdmFyaWFibGVzIGFyZSBvbmx5IHZhbGlkIGluIHRoZSBzdGFydHVwCisg KiBwcm9jZXNzLiBUaGV5IHdvcmsgc2ltaWxhcmx5IHRvIFNYX0FSQ0hJVkVfUkVDT1ZFUllfUkVR VUVTVEVEIGFuZAorICogU1hfSU5fQVJDSElWRV9SRUNPVkVSWS4KKyAqLworI2RlZmluZSBTWF9T VEFOREJZX01PREVfUkVRVUVTVEVECQkweDEwCisjZGVmaW5lIFNYX0lOX1NUQU5EQllfTU9ERQkJ CQkweDIwCisKIC8qCiAgKiBSZWNvdmVyeSB0YXJnZXQgdHlwZS4KICAqIE9ubHkgc2V0IGR1cmlu ZyBhIFBvaW50IGluIFRpbWUgcmVjb3ZlcnksIG5vdCB3aGVuIGluIHN0YW5kYnkgbW9kZS4KQEAg LTczLDkgKzEwNCw2IEBAIGV4dGVybiBQR0RMTElNUE9SVCBUaW1lTGluZUlEIHJlY292ZXJ5VGFy Z2V0VExJOwogLyogSGF2ZSB3ZSBhbHJlYWR5IHJlYWNoZWQgYSBjb25zaXN0ZW50IGRhdGFiYXNl IHN0YXRlPyAqLwogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgcmVhY2hlZENvbnNpc3RlbmN5Owog Ci0vKiBBcmUgd2UgY3VycmVudGx5IGluIHN0YW5kYnkgbW9kZT8gKi8KLWV4dGVybiBQR0RMTElN UE9SVCBib29sIFN0YW5kYnlNb2RlOwotCiBleHRlcm4gU2l6ZSBYTG9nUmVjb3ZlcnlTaG1lbVNp emUodm9pZCk7CiBleHRlcm4gdm9pZCBYTG9nUmVjb3ZlcnlTaG1lbUluaXQodm9pZCk7CiAKLS0g CjIuMzQuMQoK --=_7a4ed6bc24a44eea6d8eecbeb342a0a3 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v4-0002-Text-array-sql-wrapper.patch Content-Disposition: attachment; filename=v4-0002-Text-array-sql-wrapper.patch; size=4032 RnJvbSAzOWM0MmJkY2FhMzcxZWEzNTZmZjJkYjg5NDRkNGNmODUzNWQyM2JhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWtoYWlsIExpdHNhcmV2IDxtLmxpdHNhcmV2QHBvc3RncmVz cHJvLnJ1PgpEYXRlOiBGcmksIDEwIEphbiAyMDI1IDIyOjMxOjM0ICswMzAwClN1YmplY3Q6IFtQ QVRDSF0gV3JhcHBlciBmdW5jdGlvbiB0byBleHRyYWN0IHdob2xlIHRleHQgYXJyYXkgZnJvbSBy ZWNvdmVyeQogZmxhZ3MgYml0c2V0LgoKSXQgcmV0dXJucyBTWF9QUk9NT1RFX0lTX1RSSUdHRVJF RCwgU1hfU1RBTkRCWV9NT0RFX1JFUVVFU1RFRCAgZmxhZ3MgZm9yCnJlY292ZXJ5IHN0YXRlcy4K LS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nZnVuY3MuYyAgICB8IDMxICsrKysr KysrKysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncmVjb3Zl cnkuYyB8IDE2ICsrKysrKysrKysrKwogc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2dyZWNvdmVyeS5o ICAgICAgICAgfCAgMSArCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0ICAgICAgICAg ICB8ICA1ICsrKysKIDQgZmlsZXMgY2hhbmdlZCwgNTMgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dmdW5jcy5jIGIvc3JjL2JhY2tlbmQv YWNjZXNzL3RyYW5zYW0veGxvZ2Z1bmNzLmMKaW5kZXggOGMzMDkwMTY1ZjAuLjliNzFmZjc1ODNj IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nZnVuY3MuYworKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nZnVuY3MuYwpAQCAtMzAsNiArMzAsNyBA QAogI2luY2x1ZGUgInN0b3JhZ2UvZmQuaCIKICNpbmNsdWRlICJzdG9yYWdlL2xhdGNoLmgiCiAj aW5jbHVkZSAic3RvcmFnZS9zdGFuZGJ5LmgiCisjaW5jbHVkZSAidXRpbHMvYXJyYXkuaCIKICNp bmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAj aW5jbHVkZSAidXRpbHMvcGdfbHNuLmgiCkBAIC03NDgsMyArNzQ5LDMzIEBAIHBnX3Byb21vdGUo UEdfRlVOQ1RJT05fQVJHUykKIAkJCQkJCSAgIHdhaXRfc2Vjb25kcykpKTsKIAlQR19SRVRVUk5f Qk9PTChmYWxzZSk7CiB9CisKK0RhdHVtCitwZ19nZXRfcmVjb3ZlcnlfZmxhZ3MoUEdfRlVOQ1RJ T05fQVJHUykKK3sKKy8qCisgKiBDdXJyZW50bHkgc3VwcG9ydGVkIG51bWJlciBvZiByZWNvdmVy eSBmbGFncyBpcyBlcXVhbCB0byB0d286CisgKiB7U1hfUFJPTU9URV9JU19UUklHR0VSRUQsIFNY X1NUQU5EQllfTU9ERV9SRVFVRVNURUR9LgorICogVGhlIFNYX1NUQU5EQllfTU9ERV9SRVFVRVNU RUQgaXMgdmFsaWQgb25seSBpbiB0aGUgc3RhcnR1cCBwcm9jZXNzLgorICovCisjZGVmaW5lIE1B WF9SRUNPVkVSWV9GTEFHUyAyCisKKwliaXRzMzIJCQlyZWNvdmVyeV9mbGFnczsKKwlpbnQJCQkJ Y250ID0gMDsKKwlEYXR1bQkJCWZsYWdzW01BWF9SRUNPVkVSWV9GTEFHU107CisJQXJyYXlUeXBl CSAgICp0eHRfYXJyOworCisJcmVjb3ZlcnlfZmxhZ3MgPSBHZXRYTG9nUmVjb3ZlcnlGbGFncygp OworCisJaWYgKHJlY292ZXJ5X2ZsYWdzICYgU1hfUFJPTU9URV9JU19UUklHR0VSRUQpCisJCWZs YWdzW2NudCsrXSA9IENTdHJpbmdHZXRUZXh0RGF0dW0oIlBST01PVEVfSVNfVFJJR0dFUkVEIik7 CisKKwlpZiAocmVjb3ZlcnlfZmxhZ3MgJiBTWF9TVEFOREJZX01PREVfUkVRVUVTVEVEKQorCQlm bGFnc1tjbnQrK10gPSBDU3RyaW5nR2V0VGV4dERhdHVtKCJTVEFOREJZX01PREVfUkVRVUVTVEVE Iik7CisKKwlBc3NlcnQoY250IDw9IE1BWF9SRUNPVkVSWV9GTEFHUyk7CisKKwkvKiBSZXR1cm5z IGJpdCBhcnJheSBhcyBEYXR1bSAqLworCXR4dF9hcnIgPSBjb25zdHJ1Y3RfYXJyYXlfYnVpbHRp bihmbGFncywgY250LCBURVhUT0lEKTsKKwlQR19SRVRVUk5fQVJSQVlUWVBFX1AodHh0X2Fycik7 Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncmVjb3Zlcnku YyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dyZWNvdmVyeS5jCmluZGV4IGU3NWM3 ODkxZmQ1Li5kNjc1YjQ2YzU5MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5z YW0veGxvZ3JlY292ZXJ5LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3Jl Y292ZXJ5LmMKQEAgLTQzNTUsNiArNDM1NSwyMiBAQCBTdGFydHVwUmVxdWVzdFdhbFJlY2VpdmVy UmVzdGFydCh2b2lkKQogCX0KIH0KIAorLyoKKyAqIFJldHVybiBTWF9QUk9NT1RFX0lTX1RSSUdH RVJFRCwgU1hfU1RBTkRCWV9NT0RFX1JFUVVFU1RFRCBmbGFncyBmb3IKKyAqIHJlY292ZXJ5IHN0 YXRlcy4KKyAqLworYml0czMyIEdldFhMb2dSZWNvdmVyeUZsYWdzKHZvaWQpCit7CisJYml0czMy CQlmbGFncyA9IDA7CisKKwlTcGluTG9ja0FjcXVpcmUoJlhMb2dSZWNvdmVyeUN0bC0+aW5mb19s Y2spOworCWZsYWdzID0gWExvZ1JlY292ZXJ5Q3RsLT5zaGFyZWRSZWNvdmVyeUZsYWdzOworCVNw aW5Mb2NrUmVsZWFzZSgmWExvZ1JlY292ZXJ5Q3RsLT5pbmZvX2xjayk7CisKKwlmbGFncyB8PSAo bG9jYWxSZWNvdmVyeUZsYWdzICYgU1hfU1RBTkRCWV9NT0RFX1JFUVVFU1RFRCk7CisKKwlyZXR1 cm4gZmxhZ3M7Cit9CiAKIC8qCiAgKiBIYXMgYSBzdGFuZGJ5IHByb21vdGlvbiBhbHJlYWR5IGJl ZW4gdHJpZ2dlcmVkPwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2dyZWNvdmVy eS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2dyZWNvdmVyeS5oCmluZGV4IDJkNDQ5MDVlYTM2 Li5mYWE2YzY2NmVkZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2dyZWNvdmVy eS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy94bG9ncmVjb3ZlcnkuaApAQCAtMTcyLDYgKzE3 Miw3IEBAIGV4dGVybiBUaW1lc3RhbXBUeiBHZXRMYXRlc3RYVGltZSh2b2lkKTsKIGV4dGVybiBU aW1lc3RhbXBUeiBHZXRDdXJyZW50Q2h1bmtSZXBsYXlTdGFydFRpbWUodm9pZCk7CiBleHRlcm4g WExvZ1JlY1B0ciBHZXRDdXJyZW50UmVwbGF5UmVjUHRyKFRpbWVMaW5lSUQgKnJlcGxheUVuZFRM SSk7CiAKK2V4dGVybiBiaXRzMzIgR2V0WExvZ1JlY292ZXJ5RmxhZ3Modm9pZCk7CiBleHRlcm4g Ym9vbCBQcm9tb3RlSXNUcmlnZ2VyZWQodm9pZCk7CiBleHRlcm4gYm9vbCBDaGVja1Byb21vdGVT aWduYWwodm9pZCk7CiBleHRlcm4gdm9pZCBXYWtldXBSZWNvdmVyeSh2b2lkKTsKZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9n L3BnX3Byb2MuZGF0CmluZGV4IGIzN2U4YTZmODgyLi5lMWUxMGY2YTVkNiAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9n L3BnX3Byb2MuZGF0CkBAIC02NjYwLDYgKzY2NjAsMTEgQEAKICAgcHJvbmFtZSA9PiAncGdfaXNf aW5fcmVjb3ZlcnknLCBwcm92b2xhdGlsZSA9PiAndicsIHByb3JldHR5cGUgPT4gJ2Jvb2wnLAog ICBwcm9hcmd0eXBlcyA9PiAnJywgcHJvc3JjID0+ICdwZ19pc19pbl9yZWNvdmVyeScgfSwKIAor eyBvaWQgPT4gJzg0MzknLAorICBkZXNjciA9PiAncmV0dXJuIGZsYWdzIGZvciByZWNvdmVyeSBz dGF0ZXMnLAorICBwcm9uYW1lID0+ICdwZ19nZXRfcmVjb3ZlcnlfZmxhZ3MnLCBwcm92b2xhdGls ZSA9PiAndicsIHByb3JldHR5cGUgPT4gJ190ZXh0JywKKyAgcHJvYXJndHlwZXMgPT4gJycsIHBy b3NyYyA9PiAncGdfZ2V0X3JlY292ZXJ5X2ZsYWdzJyB9LAorCiB7IG9pZCA9PiAnMzgyMCcsIGRl c2NyID0+ICdjdXJyZW50IHdhbCBmbHVzaCBsb2NhdGlvbicsCiAgIHByb25hbWUgPT4gJ3BnX2xh c3Rfd2FsX3JlY2VpdmVfbHNuJywgcHJvdm9sYXRpbGUgPT4gJ3YnLAogICBwcm9yZXR0eXBlID0+ ICdwZ19sc24nLCBwcm9hcmd0eXBlcyA9PiAnJywKLS0gCjIuMzQuMQoK --=_7a4ed6bc24a44eea6d8eecbeb342a0a3--