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 1i4AOG-0001Xv-CD for pgsql-hackers@arkaria.postgresql.org; Sat, 31 Aug 2019 20:54:32 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1i4AOD-00086b-Dz for pgsql-hackers@arkaria.postgresql.org; Sat, 31 Aug 2019 20:54:29 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1i4AOC-00086N-Qz for pgsql-hackers@lists.postgresql.org; Sat, 31 Aug 2019 20:54:29 +0000 Received: from cyclops.postgrespro.ru ([93.174.131.138] helo=mail.postgrespro.ru) by makus.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1i4AO7-00075F-RN for pgsql-hackers@postgresql.org; Sat, 31 Aug 2019 20:54:27 +0000 Received: from localhost (localhost [127.0.0.1]) by mail.postgrespro.ru (Postfix) with ESMTP id A8FB121C1F3E; Sat, 31 Aug 2019 23:54:20 +0300 (MSK) X-Virus-Scanned: Debian amavisd-new at postgrespro.ru X-Spam-Flag: NO X-Spam-Score: 0 X-Spam-Level: X-Spam-Status: No, score=x tagged_above=-99 required=4 WHITELISTED tests=[] autolearn=unavailable Received: from mail.postgrespro.ru (cyclops.l.postgrespro.ru [192.168.27.1]) by mail.postgrespro.ru (Postfix) with ESMTP id E94BF21C1F3D; Sat, 31 Aug 2019 23:54:19 +0300 (MSK) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_5977d13dfc90e71a91e3ede400751548" Date: Sat, 31 Aug 2019 23:54:18 +0300 From: a.kondratov@postgrespro.ru To: Alexander Korotkov Cc: Masahiko Sawada , Alvaro Herrera , Robert Haas , Michael Paquier , PostgreSQL Hackers Subject: Re: Allow CLUSTER, VACUUM FULL and REINDEX to change tablespace on the fly In-Reply-To: References: <20181227132417.xe3oagawina7775b@alvherre.pgsql> Message-ID: <6b2a5c4de19f111ef24b63428033bb67@postgrespro.ru> X-Sender: a.kondratov@postgrespro.ru User-Agent: Roundcube Webmail/1.3.8 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --=_5977d13dfc90e71a91e3ede400751548 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed Hi hackers, On 2018-12-27 04:57, Michael Paquier wrote: > On Wed, Dec 26, 2018 at 03:19:06PM -0300, Alvaro Herrera wrote: >> As for REINDEX, I think it's valuable to move tablespace together with >> the reindexing. You can already do it with the CREATE INDEX >> CONCURRENTLY recipe we recommend, of course; but REINDEX CONCURRENTLY >> is >> not going to provide that, and it seems worth doing. > > Even for plain REINDEX that seems useful. > I've rebased the patch and put it on the closest commitfest. It is updated to allow user to do REINDEX CONCURRENTLY + SET TABLESPACE altogether, since plain REINDEX CONCURRENTLY became available this year. On 2019-06-07 21:27, Alexander Korotkov wrote: > On Fri, Dec 28, 2018 at 11:32 AM Masahiko Sawada > wrote: >> On Thu, Dec 27, 2018 at 10:24 PM Alvaro Herrera >> wrote: >> > >> > On 2018-Dec-27, Alexey Kondratov wrote: >> > >> > > To summarize: >> > > >> > > 1) Alvaro and Michael agreed, that REINDEX with tablespace move may be >> > > useful. This is done in the patch attached to my initial email. Adding >> > > REINDEX to ALTER TABLE as new action seems quite questionable for me and not >> > > completely semantically correct. ALTER already looks bulky. >> > >> > Agreed on these points. >> >> As an alternative idea, I think we can have a new ALTER INDEX variants >> that rebuilds the index while moving tablespace, something like ALTER >> INDEX ... REBUILD SET TABLESPACE .... > > +1 > > It seems the easiest way to have feature-full commands. If we put > functionality of CLUSTER and VACUUM FULL to ALTER TABLE, and put > functionality of REINDEX to ALTER INDEX, then CLUSTER, VACUUM FULL and > REINDEX would be just syntax sugar. > I definitely bought into the idea of 'change a data type, cluster, and change tablespace all in a single SQL command', but stuck with some architectural questions, when it got to the code. Currently, the only one kind of table rewrite is done by ALTER TABLE. It is preformed by simply reading tuples one by one via table_scan_getnextslot and inserting into the new table via tuple_insert table access method (AM). In the same time, CLUSTER table rewrite is implemented as a separated table AM relation_copy_for_cluster, which is actually a direct link to the heap AM heapam_relation_copy_for_cluster. Basically speaking, CLUSTER table rewrite happens 2 abstraction layers lower than ALTER TABLE one. Furthermore, CLUSTER seems to be a heap-specific AM and may be meaningless for some other storages, which is even more important because of coming pluggable storages, isn't it? Maybe I overly complicate the problem, but to perform a data type change (or any other ALTER TABLE modification), cluster, and change tablespace in a row we have to bring all this high-level stuff done by ALTER TABLE to heapam_relation_copy_for_cluster. But is it even possible without leaking abstractions? I'm working toward adding REINDEX to ALTER INDEX, so it was possible to do 'ALTER INDEX ... REINDEX CONCURRENTLY SET TABLESPACE ...', but ALTER TABLE + CLUSTER/VACUUM FULL is quite questionable for me now. Anyway, new patch, which adds SET TABLESPACE to REINDEX is attached and this functionality seems really useful, so I will be very appreciate if someone will take a look on it. Regards -- Alexey Kondratov Postgres Professional https://www.postgrespro.com The Russian Postgres Company --=_5977d13dfc90e71a91e3ede400751548 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v1-0001-Allow-REINDEX-and-REINDEX-CONCURRENTLY-to-SET-TAB.patch Content-Disposition: attachment; filename=v1-0001-Allow-REINDEX-and-REINDEX-CONCURRENTLY-to-SET-TAB.patch; size=31421 RnJvbSAxMDVmNGZiNjE3OGU1MjI5OTBjNDI4MGVjZmUwNWQ2Yjc0YzQ0YTMyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4ZXkgS29uZHJhdG92IDxrb25kcmF0b3YuYWxla3NleUBn bWFpbC5jb20+CkRhdGU6IEZyaSwgMzAgQXVnIDIwMTkgMjA6NDk6MjEgKzAzMDAKU3ViamVjdDog W1BBVENIIHYxXSBBbGxvdyBSRUlOREVYIGFuZCBSRUlOREVYIENPTkNVUlJFTlRMWSB0byBTRVQg VEFCTEVTUEFDRQoKLS0tCiBkb2Mvc3JjL3NnbWwvcmVmL3JlaW5kZXguc2dtbCAgICAgICAgICAg ICB8ICAxMCArKwogc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jICAgICAgICAgICAgICAgfCAx MTcgKysrKysrKysrKysrKysrKysrLS0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvY2x1c3Rlci5j ICAgICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jICAg ICAgICAgIHwgIDM0ICsrKysrLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jICAg ICAgICAgIHwgIDU5ICsrKysrKy0tLS0tCiBzcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55ICAgICAg ICAgICAgICAgICB8ICAyMSArKy0tCiBzcmMvYmFja2VuZC90Y29wL3V0aWxpdHkuYyAgICAgICAg ICAgICAgICB8ICAxNiArKy0KIHNyYy9pbmNsdWRlL2NhdGFsb2cvaW5kZXguaCAgICAgICAgICAg ICAgIHwgICA3ICstCiBzcmMvaW5jbHVkZS9jb21tYW5kcy9kZWZyZW0uaCAgICAgICAgICAgICB8 ICAgNiArLQogc3JjL2luY2x1ZGUvY29tbWFuZHMvdGFibGVjbWRzLmggICAgICAgICAgfCAgIDIg Kwogc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oICAgICAgICAgICAgfCAgIDEgKwogc3Jj L3Rlc3QvcmVncmVzcy9pbnB1dC90YWJsZXNwYWNlLnNvdXJjZSAgfCAgMzEgKysrKysrCiBzcmMv dGVzdC9yZWdyZXNzL291dHB1dC90YWJsZXNwYWNlLnNvdXJjZSB8ICA0MSArKysrKysrKwogMTMg ZmlsZXMgY2hhbmdlZCwgMjc2IGluc2VydGlvbnMoKyksIDcxIGRlbGV0aW9ucygtKQoKZGlmZiAt LWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcmVpbmRleC5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9y ZWluZGV4LnNnbWwKaW5kZXggMTA4ODFhYjAzYS4uZmRkMWY2ZTYyOCAxMDA2NDQKLS0tIGEvZG9j L3NyYy9zZ21sL3JlZi9yZWluZGV4LnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9yZWluZGV4 LnNnbWwKQEAgLTIyLDYgKzIyLDcgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAgPHJlZnN5 bm9wc2lzZGl2PgogPHN5bm9wc2lzPgogUkVJTkRFWCBbICggVkVSQk9TRSApIF0geyBJTkRFWCB8 IFRBQkxFIHwgU0NIRU1BIHwgREFUQUJBU0UgfCBTWVNURU0gfSBbIENPTkNVUlJFTlRMWSBdIDxy ZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5uYW1lPC9yZXBsYWNlYWJsZT4KK1JFSU5ERVgg WyAoIFZFUkJPU0UgKSBdIHsgSU5ERVggfCBUQUJMRSB9IDxyZXBsYWNlYWJsZSBjbGFzcz0icGFy YW1ldGVyIj5uYW1lPC9yZXBsYWNlYWJsZT4gWyBTRVQgVEFCTEVTUEFDRSA8cmVwbGFjZWFibGUg Y2xhc3M9InBhcmFtZXRlciI+bmV3X3RhYmxlc3BhY2U8L3JlcGxhY2VhYmxlPiBdCiA8L3N5bm9w c2lzPgogIDwvcmVmc3lub3BzaXNkaXY+CiAKQEAgLTE2NSw2ICsxNjYsMTUgQEAgUkVJTkRFWCBb ICggVkVSQk9TRSApIF0geyBJTkRFWCB8IFRBQkxFIHwgU0NIRU1BIHwgREFUQUJBU0UgfCBTWVNU RU0gfSBbIENPTkNVUlIKICAgICA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAKKyAg IDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIi Pm5ld190YWJsZXNwYWNlPC9yZXBsYWNlYWJsZT48L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorICAg ICA8cGFyYT4KKyAgICAgIFRoZSBuYW1lIG9mIHRoZSBzcGVjaWZpYyB0YWJsZXNwYWNlIHRvIHN0 b3JlIHJlYnVpbHQgaW5kZXhlcy4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8 L3Zhcmxpc3RlbnRyeT4KKwogICAgPHZhcmxpc3RlbnRyeT4KICAgICA8dGVybT48bGl0ZXJhbD5W RVJCT1NFPC9saXRlcmFsPjwvdGVybT4KICAgICA8bGlzdGl0ZW0+CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9jYXRhbG9nL2luZGV4LmMgYi9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMKaW5k ZXggM2UxZDQwNjYyZC4uNWI3NmIzNDIyMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxv Zy9pbmRleC5jCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYwpAQCAtMTE5NCw3ICsx MTk0LDggQEAgaW5kZXhfY3JlYXRlKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKICAqIG9uLiAgVGhp cyBpcyBjYWxsZWQgZHVyaW5nIGNvbmN1cnJlbnQgcmVpbmRleCBwcm9jZXNzaW5nLgogICovCiBP aWQKLWluZGV4X2NvbmN1cnJlbnRseV9jcmVhdGVfY29weShSZWxhdGlvbiBoZWFwUmVsYXRpb24s IE9pZCBvbGRJbmRleElkLCBjb25zdCBjaGFyICpuZXdOYW1lKQoraW5kZXhfY29uY3VycmVudGx5 X2NyZWF0ZV9jb3B5KFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwgT2lkIG9sZEluZGV4SWQsCisJCQkJ CQkJICAgT2lkIHRhYmxlc3BhY2VPaWQsIGNvbnN0IGNoYXIgKm5ld05hbWUpCiB7CiAJUmVsYXRp b24JaW5kZXhSZWxhdGlvbjsKIAlJbmRleEluZm8gICpvbGRJbmZvLApAQCAtMTMyNCw3ICsxMzI1 LDcgQEAgaW5kZXhfY29uY3VycmVudGx5X2NyZWF0ZV9jb3B5KFJlbGF0aW9uIGhlYXBSZWxhdGlv biwgT2lkIG9sZEluZGV4SWQsIGNvbnN0IGNoYXIKIAkJCQkJCQkgIG5ld0luZm8sCiAJCQkJCQkJ ICBpbmRleENvbE5hbWVzLAogCQkJCQkJCSAgaW5kZXhSZWxhdGlvbi0+cmRfcmVsLT5yZWxhbSwK LQkJCQkJCQkgIGluZGV4UmVsYXRpb24tPnJkX3JlbC0+cmVsdGFibGVzcGFjZSwKKwkJCQkJCQkg IHRhYmxlc3BhY2VPaWQgPyB0YWJsZXNwYWNlT2lkIDogaW5kZXhSZWxhdGlvbi0+cmRfcmVsLT5y ZWx0YWJsZXNwYWNlLAogCQkJCQkJCSAgaW5kZXhSZWxhdGlvbi0+cmRfaW5kY29sbGF0aW9uLAog CQkJCQkJCSAgaW5kY2xhc3MtPnZhbHVlcywKIAkJCQkJCQkgIGluZGNvbG9wdGlvbnMtPnZhbHVl cywKQEAgLTMyOTcsMTUgKzMyOTgsMjEgQEAgSW5kZXhHZXRSZWxhdGlvbihPaWQgaW5kZXhJZCwg Ym9vbCBtaXNzaW5nX29rKQogICogcmVpbmRleF9pbmRleCAtIFRoaXMgcm91dGluZSBpcyB1c2Vk IHRvIHJlY3JlYXRlIGEgc2luZ2xlIGluZGV4CiAgKi8KIHZvaWQKLXJlaW5kZXhfaW5kZXgoT2lk IGluZGV4SWQsIGJvb2wgc2tpcF9jb25zdHJhaW50X2NoZWNrcywgY2hhciBwZXJzaXN0ZW5jZSwK K3JlaW5kZXhfaW5kZXgoT2lkIGluZGV4SWQsIE9pZCB0YWJsZXNwYWNlT2lkLCBib29sIHNraXBf Y29uc3RyYWludF9jaGVja3MsIGNoYXIgcGVyc2lzdGVuY2UsCiAJCQkgIGludCBvcHRpb25zKQog ewogCVJlbGF0aW9uCWlSZWwsCi0JCQkJaGVhcFJlbGF0aW9uOwotCU9pZAkJCWhlYXBJZDsKKwkJ CQloZWFwUmVsYXRpb24sCisJCQkJcGdfY2xhc3M7CisJT2lkCQkJaGVhcElkLAorCQkJCW5ld0lu ZGV4UmVsZmlsZW5vZGVPaWQgPSBJbnZhbGlkT2lkOwogCUluZGV4SW5mbyAgKmluZGV4SW5mbzsK IAl2b2xhdGlsZSBib29sIHNraXBwZWRfY29uc3RyYWludCA9IGZhbHNlOwogCVBHUlVzYWdlCXJ1 MDsKKwlSZWxGaWxlTm9kZSBuZXdybm9kZTsKKwlTTWdyUmVsYXRpb24gIGRzdHJlbDsKKwlIZWFw VHVwbGUJICB0dXBsZTsKKwlGb3JtX3BnX2NsYXNzIHJkX3JlbDsKIAogCXBnX3J1c2FnZV9pbml0 KCZydTApOwogCkBAIC0zMzQwLDIxICszMzQ3LDg5IEBAIHJlaW5kZXhfaW5kZXgoT2lkIGluZGV4 SWQsIGJvb2wgc2tpcF9jb25zdHJhaW50X2NoZWNrcywgY2hhciBwZXJzaXN0ZW5jZSwKIAkJZWxv ZyhFUlJPUiwgInVuc3VwcG9ydGVkIHJlbGF0aW9uIGtpbmQgZm9yIGluZGV4IFwiJXNcIiIsCiAJ CQkgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoaVJlbCkpOwogCi0JLyoKLQkgKiBEb24ndCBhbGxv dyByZWluZGV4IG9uIHRlbXAgdGFibGVzIG9mIG90aGVyIGJhY2tlbmRzIC4uLiB0aGVpciBsb2Nh bAotCSAqIGJ1ZmZlciBtYW5hZ2VyIGlzIG5vdCBnb2luZyB0byBjb3BlLgotCSAqLwotCWlmIChS RUxBVElPTl9JU19PVEhFUl9URU1QKGlSZWwpKQotCQllcmVwb3J0KEVSUk9SLAotCQkJCShlcnJj b2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKLQkJCQkgZXJybXNnKCJjYW5ub3Qg cmVpbmRleCB0ZW1wb3JhcnkgdGFibGVzIG9mIG90aGVyIHNlc3Npb25zIikpKTsKLQogCS8qCiAJ ICogQWxzbyBjaGVjayBmb3IgYWN0aXZlIHVzZXMgb2YgdGhlIGluZGV4IGluIHRoZSBjdXJyZW50 IHRyYW5zYWN0aW9uOyB3ZQogCSAqIGRvbid0IHdhbnQgdG8gcmVpbmRleCB1bmRlcm5lYXRoIGFu IG9wZW4gaW5kZXhzY2FuLgogCSAqLwogCUNoZWNrVGFibGVOb3RJblVzZShpUmVsLCAiUkVJTkRF WCBJTkRFWCIpOwogCisJaWYgKE9pZElzVmFsaWQodGFibGVzcGFjZU9pZCkpCisJeworCQkvKiBD aGVjayB0aGF0IHJlbG9jYXRpb24gaXMgcG9zc2libGUgZHVyaW5nIHJlaW5kZXguICovCisJCWNo ZWNrX3JlbGF0aW9uX2lzX21vdmFibGUoaVJlbCwgdGFibGVzcGFjZU9pZCk7CisKKwkJcGdfY2xh c3MgPSBoZWFwX29wZW4oUmVsYXRpb25SZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKwor CQl0dXBsZSA9IFNlYXJjaFN5c0NhY2hlQ29weTEoUkVMT0lELCBPYmplY3RJZEdldERhdHVtKGlu ZGV4SWQpKTsKKwkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR1cGxlKSkKKwkJCWVsb2coRVJST1Is ICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciByZWxhdGlvbiAldSIsIGluZGV4SWQpOworCQlyZF9y ZWwgPSAoRm9ybV9wZ19jbGFzcykgR0VUU1RSVUNUKHR1cGxlKTsKKworCQkvKiBVc2UgYmluYXJ5 LXVwZ3JhZGUgb3ZlcnJpZGUgZm9yIHBnX2NsYXNzLm9pZC9yZWxmaWxlbm9kZT8gKi8KKwkJaWYg KElzQmluYXJ5VXBncmFkZSkKKwkJeworCQkJaWYgKCFPaWRJc1ZhbGlkKGJpbmFyeV91cGdyYWRl X25leHRfaW5kZXhfcGdfY2xhc3Nfb2lkKSkKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVy cmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQllcnJtc2coInBn X2NsYXNzIGluZGV4IE9JRCB2YWx1ZSBub3Qgc2V0IHdoZW4gaW4gYmluYXJ5IHVwZ3JhZGUgbW9k ZSIpKSk7CisKKwkJCW5ld0luZGV4UmVsZmlsZW5vZGVPaWQgPSBiaW5hcnlfdXBncmFkZV9uZXh0 X2luZGV4X3BnX2NsYXNzX29pZDsKKwkJCWJpbmFyeV91cGdyYWRlX25leHRfaW5kZXhfcGdfY2xh c3Nfb2lkID0gSW52YWxpZE9pZDsKKwkJfQorCQllbHNlCisJCXsKKwkJCW5ld0luZGV4UmVsZmls ZW5vZGVPaWQgPQorCQkJCUdldE5ld1JlbEZpbGVOb2RlKHRhYmxlc3BhY2VPaWQsIHBnX2NsYXNz LCBoZWFwUmVsYXRpb24tPnJkX3JlbC0+cmVscGVyc2lzdGVuY2UpOworCQl9CisKKwkJLyogT3Bl biBvbGQgYW5kIG5ldyByZWxhdGlvbiAqLworCQluZXdybm9kZSA9IGlSZWwtPnJkX25vZGU7CisJ CW5ld3Jub2RlLnJlbE5vZGUgPSBuZXdJbmRleFJlbGZpbGVub2RlT2lkOworCQluZXdybm9kZS5z cGNOb2RlID0gdGFibGVzcGFjZU9pZDsKKwkJZHN0cmVsID0gc21ncm9wZW4obmV3cm5vZGUsIGlS ZWwtPnJkX2JhY2tlbmQpOworCisJCVJlbGF0aW9uT3BlblNtZ3IoaVJlbCk7CisKKwkJLyoKKwkJ ICogQ3JlYXRlIGFuZCBjb3B5IGFsbCBmb3JrcyBvZiB0aGUgcmVsYXRpb24sIGFuZCBzY2hlZHVs ZSB1bmxpbmtpbmcgb2YKKwkJICogb2xkIHBoeXNpY2FsIGZpbGVzLgorCQkgKgorCQkgKiBOT1RF OiBhbnkgY29uZmxpY3QgaW4gcmVsZmlsZW5vZGUgdmFsdWUgd2lsbCBiZSBjYXVnaHQgaW4KKwkJ ICogUmVsYXRpb25DcmVhdGVTdG9yYWdlKCkuCisJCSAqLworCQlSZWxhdGlvbkNyZWF0ZVN0b3Jh Z2UobmV3cm5vZGUsIGlSZWwtPnJkX3JlbC0+cmVscGVyc2lzdGVuY2UpOworCisJCS8qIERyb3Ag b2xkIHJlbGF0aW9uLCBhbmQgY2xvc2UgbmV3IG9uZSAqLworCQlSZWxhdGlvbkRyb3BTdG9yYWdl KGlSZWwpOworCQlzbWdyY2xvc2UoZHN0cmVsKTsKKworCQkvKiBVcGRhdGUgdGhlIHBnX2NsYXNz IHJvdyAqLworCQlyZF9yZWwtPnJlbHRhYmxlc3BhY2UgPSB0YWJsZXNwYWNlT2lkOworCQlyZF9y ZWwtPnJlbGZpbGVub2RlID0gbmV3SW5kZXhSZWxmaWxlbm9kZU9pZDsKKwkJQ2F0YWxvZ1R1cGxl VXBkYXRlKHBnX2NsYXNzLCAmdHVwbGUtPnRfc2VsZiwgdHVwbGUpOworCisJCUludm9rZU9iamVj dFBvc3RBbHRlckhvb2soUmVsYXRpb25SZWxhdGlvbklkLCBSZWxhdGlvbkdldFJlbGlkKGlSZWwp LCAwKTsKKworCQloZWFwX2ZyZWV0dXBsZSh0dXBsZSk7CisKKwkJaGVhcF9jbG9zZShwZ19jbGFz cywgUm93RXhjbHVzaXZlTG9jayk7CisKKwkJLyogTWFrZSB0aGUgdXBkYXRlZCBjYXRhbG9nIHJv dyB2ZXJzaW9ucyB2aXNpYmxlICovCisJCUNvbW1hbmRDb3VudGVySW5jcmVtZW50KCk7CisJfQor CWVsc2UKKwl7CisJCS8qCisJCSAqIERvbid0IGFsbG93IHJlaW5kZXggb24gdGVtcCB0YWJsZXMg b2Ygb3RoZXIgYmFja2VuZHMgLi4uIHRoZWlyIGxvY2FsCisJCSAqIGJ1ZmZlciBtYW5hZ2VyIGlz IG5vdCBnb2luZyB0byBjb3BlLiBDaGVjayBvbmx5IGlmIFRBQkxFU1BBQ0UgaXMgbm90CisJCSAq IHBhc3NlZCwgc2luY2UgdGhlIHNhbWUgdmFsaWRhdGlvbiBleGlzdHMgaW4gdGhlIGNoZWNrX3Jl bGF0aW9uX2lzX21vdmFibGUuCisJCSAqLworCQlpZiAoUkVMQVRJT05fSVNfT1RIRVJfVEVNUChp UmVsKSkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9O T1RfU1VQUE9SVEVEKSwKKwkJCQkJZXJybXNnKCJjYW5ub3QgcmVpbmRleCB0ZW1wb3JhcnkgdGFi bGVzIG9mIG90aGVyIHNlc3Npb25zIikpKTsKKwl9CisKIAkvKgogCSAqIEFsbCBwcmVkaWNhdGUg bG9ja3Mgb24gdGhlIGluZGV4IGFyZSBhYm91dCB0byBiZSBtYWRlIGludmFsaWQuIFByb21vdGUK IAkgKiB0aGVtIHRvIHJlbGF0aW9uIGxvY2tzIG9uIHRoZSBoZWFwLgpAQCAtMzQ0MSwxNCArMzUx NiwxNCBAQCByZWluZGV4X2luZGV4KE9pZCBpbmRleElkLCBib29sIHNraXBfY29uc3RyYWludF9j aGVja3MsIGNoYXIgcGVyc2lzdGVuY2UsCiAJCXBnX2luZGV4ID0gdGFibGVfb3BlbihJbmRleFJl bGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOwogCiAJCWluZGV4VHVwbGUgPSBTZWFyY2hTeXND YWNoZUNvcHkxKElOREVYUkVMSUQsCi0JCQkJCQkJCQkJIE9iamVjdElkR2V0RGF0dW0oaW5kZXhJ ZCkpOworCQkJCQkJCQkJCU9iamVjdElkR2V0RGF0dW0oaW5kZXhJZCkpOwogCQlpZiAoIUhlYXBU dXBsZUlzVmFsaWQoaW5kZXhUdXBsZSkpCiAJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZh aWxlZCBmb3IgaW5kZXggJXUiLCBpbmRleElkKTsKIAkJaW5kZXhGb3JtID0gKEZvcm1fcGdfaW5k ZXgpIEdFVFNUUlVDVChpbmRleFR1cGxlKTsKIAogCQlpbmRleF9iYWQgPSAoIWluZGV4Rm9ybS0+ aW5kaXN2YWxpZCB8fAotCQkJCQkgIWluZGV4Rm9ybS0+aW5kaXNyZWFkeSB8fAotCQkJCQkgIWlu ZGV4Rm9ybS0+aW5kaXNsaXZlKTsKKwkJCQkJIWluZGV4Rm9ybS0+aW5kaXNyZWFkeSB8fAorCQkJ CQkhaW5kZXhGb3JtLT5pbmRpc2xpdmUpOwogCQlpZiAoaW5kZXhfYmFkIHx8CiAJCQkoaW5kZXhG b3JtLT5pbmRjaGVja3htaW4gJiYgIWluZGV4SW5mby0+aWlfQnJva2VuSG90Q2hhaW4pIHx8CiAJ CQllYXJseV9wcnVuaW5nX2VuYWJsZWQpCkBAIC0zNDgwLDcgKzM1NTUsNyBAQCByZWluZGV4X2lu ZGV4KE9pZCBpbmRleElkLCBib29sIHNraXBfY29uc3RyYWludF9jaGVja3MsIGNoYXIgcGVyc2lz dGVuY2UsCiAJCWVyZXBvcnQoSU5GTywKIAkJCQkoZXJybXNnKCJpbmRleCBcIiVzXCIgd2FzIHJl aW5kZXhlZCIsCiAJCQkJCQlnZXRfcmVsX25hbWUoaW5kZXhJZCkpLAotCQkJCSBlcnJkZXRhaWxf aW50ZXJuYWwoIiVzIiwKKwkJCQllcnJkZXRhaWxfaW50ZXJuYWwoIiVzIiwKIAkJCQkJCQkJCXBn X3J1c2FnZV9zaG93KCZydTApKSkpOwogCiAJcGdzdGF0X3Byb2dyZXNzX2VuZF9jb21tYW5kKCk7 CkBAIC0zNTI2LDcgKzM2MDEsNyBAQCByZWluZGV4X2luZGV4KE9pZCBpbmRleElkLCBib29sIHNr aXBfY29uc3RyYWludF9jaGVja3MsIGNoYXIgcGVyc2lzdGVuY2UsCiAgKiBpbmRleCByZWJ1aWxk LgogICovCiBib29sCi1yZWluZGV4X3JlbGF0aW9uKE9pZCByZWxpZCwgaW50IGZsYWdzLCBpbnQg b3B0aW9ucykKK3JlaW5kZXhfcmVsYXRpb24oT2lkIHJlbGlkLCBPaWQgdGFibGVzcGFjZU9pZCwg aW50IGZsYWdzLCBpbnQgb3B0aW9ucykKIHsKIAlSZWxhdGlvbglyZWw7CiAJT2lkCQkJdG9hc3Rf cmVsaWQ7CkBAIC0zNjAwLDcgKzM2NzUsNyBAQCByZWluZGV4X3JlbGF0aW9uKE9pZCByZWxpZCwg aW50IGZsYWdzLCBpbnQgb3B0aW9ucykKIAkJewogCQkJT2lkCQkJaW5kZXhPaWQgPSBsZmlyc3Rf b2lkKGluZGV4SWQpOwogCi0JCQlyZWluZGV4X2luZGV4KGluZGV4T2lkLCAhKGZsYWdzICYgUkVJ TkRFWF9SRUxfQ0hFQ0tfQ09OU1RSQUlOVFMpLAorCQkJcmVpbmRleF9pbmRleChpbmRleE9pZCwg dGFibGVzcGFjZU9pZCwgIShmbGFncyAmIFJFSU5ERVhfUkVMX0NIRUNLX0NPTlNUUkFJTlRTKSwK IAkJCQkJCSAgcGVyc2lzdGVuY2UsIG9wdGlvbnMpOwogCiAJCQlDb21tYW5kQ291bnRlckluY3Jl bWVudCgpOwpAQCAtMzYzNSw3ICszNzEwLDcgQEAgcmVpbmRleF9yZWxhdGlvbihPaWQgcmVsaWQs IGludCBmbGFncywgaW50IG9wdGlvbnMpCiAJICogc3RpbGwgaG9sZCB0aGUgbG9jayBvbiB0aGUg bWFzdGVyIHRhYmxlLgogCSAqLwogCWlmICgoZmxhZ3MgJiBSRUlOREVYX1JFTF9QUk9DRVNTX1RP QVNUKSAmJiBPaWRJc1ZhbGlkKHRvYXN0X3JlbGlkKSkKLQkJcmVzdWx0IHw9IHJlaW5kZXhfcmVs YXRpb24odG9hc3RfcmVsaWQsIGZsYWdzLCBvcHRpb25zKTsKKwkJcmVzdWx0IHw9IHJlaW5kZXhf cmVsYXRpb24odG9hc3RfcmVsaWQsIHRhYmxlc3BhY2VPaWQsIGZsYWdzLCBvcHRpb25zKTsKIAog CXJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jbHVz dGVyLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jbHVzdGVyLmMKaW5kZXggMjg5ODVhMDdlYy4u NmE0NDY2ZWUwZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY2x1c3Rlci5jCisr KyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NsdXN0ZXIuYwpAQCAtMTQwNyw3ICsxNDA3LDcgQEAg ZmluaXNoX2hlYXBfc3dhcChPaWQgT0lET2xkSGVhcCwgT2lkIE9JRE5ld0hlYXAsCiAJcGdzdGF0 X3Byb2dyZXNzX3VwZGF0ZV9wYXJhbShQUk9HUkVTU19DTFVTVEVSX1BIQVNFLAogCQkJCQkJCQkg UFJPR1JFU1NfQ0xVU1RFUl9QSEFTRV9SRUJVSUxEX0lOREVYKTsKIAotCXJlaW5kZXhfcmVsYXRp b24oT0lET2xkSGVhcCwgcmVpbmRleF9mbGFncywgMCk7CisJcmVpbmRleF9yZWxhdGlvbihPSURP bGRIZWFwLCBJbnZhbGlkT2lkLCByZWluZGV4X2ZsYWdzLCAwKTsKIAogCS8qIFJlcG9ydCB0aGF0 IHdlIGFyZSBub3cgZG9pbmcgY2xlYW4gdXAgKi8KIAlwZ3N0YXRfcHJvZ3Jlc3NfdXBkYXRlX3Bh cmFtKFBST0dSRVNTX0NMVVNURVJfUEhBU0UsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21t YW5kcy9pbmRleGNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jCmluZGV4 IGVmOTUzOTUzNzEuLjg2NmFhNTQ3MGIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRz L2luZGV4Y21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jCkBAIC04 Nyw3ICs4Nyw3IEBAIHN0YXRpYyBjaGFyICpDaG9vc2VJbmRleE5hbWVBZGRpdGlvbihMaXN0ICpj b2xuYW1lcyk7CiBzdGF0aWMgTGlzdCAqQ2hvb3NlSW5kZXhDb2x1bW5OYW1lcyhMaXN0ICppbmRl eEVsZW1zKTsKIHN0YXRpYyB2b2lkIFJhbmdlVmFyQ2FsbGJhY2tGb3JSZWluZGV4SW5kZXgoY29u c3QgUmFuZ2VWYXIgKnJlbGF0aW9uLAogCQkJCQkJCQkJCQlPaWQgcmVsSWQsIE9pZCBvbGRSZWxJ ZCwgdm9pZCAqYXJnKTsKLXN0YXRpYyBib29sIFJlaW5kZXhSZWxhdGlvbkNvbmN1cnJlbnRseShP aWQgcmVsYXRpb25PaWQsIGludCBvcHRpb25zKTsKK3N0YXRpYyBib29sIFJlaW5kZXhSZWxhdGlv bkNvbmN1cnJlbnRseShPaWQgcmVsYXRpb25PaWQsIE9pZCB0YWJsZXNwYWNlT2lkLCBpbnQgb3B0 aW9ucyk7CiBzdGF0aWMgdm9pZCBSZWluZGV4UGFydGl0aW9uZWRJbmRleChSZWxhdGlvbiBwYXJl bnRJZHgpOwogc3RhdGljIHZvaWQgdXBkYXRlX3JlbGlzcGFydGl0aW9uKE9pZCByZWxhdGlvbklk LCBib29sIG5ld3ZhbCk7CiAKQEAgLTIzMTMsMTAgKzIzMTMsMTEgQEAgQ2hvb3NlSW5kZXhDb2x1 bW5OYW1lcyhMaXN0ICppbmRleEVsZW1zKQogICoJCVJlY3JlYXRlIGEgc3BlY2lmaWMgaW5kZXgu CiAgKi8KIHZvaWQKLVJlaW5kZXhJbmRleChSYW5nZVZhciAqaW5kZXhSZWxhdGlvbiwgaW50IG9w dGlvbnMsIGJvb2wgY29uY3VycmVudCkKK1JlaW5kZXhJbmRleChSYW5nZVZhciAqaW5kZXhSZWxh dGlvbiwgY2hhciAqdGFibGVTcGFjZU5hbWUsIGludCBvcHRpb25zLCBib29sIGNvbmN1cnJlbnQp CiB7CiAJc3RydWN0IFJlaW5kZXhJbmRleENhbGxiYWNrU3RhdGUgc3RhdGU7CiAJT2lkCQkJaW5k T2lkOworCU9pZAkJCXRhYmxlU3BhY2VPaWQgPSBJbnZhbGlkT2lkOwogCVJlbGF0aW9uCWlyZWw7 CiAJY2hhcgkJcGVyc2lzdGVuY2U7CiAKQEAgLTIzNDYsMTIgKzIzNDcsMTYgQEAgUmVpbmRleElu ZGV4KFJhbmdlVmFyICppbmRleFJlbGF0aW9uLCBpbnQgb3B0aW9ucywgYm9vbCBjb25jdXJyZW50 KQogCX0KIAogCXBlcnNpc3RlbmNlID0gaXJlbC0+cmRfcmVsLT5yZWxwZXJzaXN0ZW5jZTsKKwor CWlmICh0YWJsZVNwYWNlTmFtZSkKKwkJdGFibGVTcGFjZU9pZCA9IGdldF90YWJsZXNwYWNlX29p ZCh0YWJsZVNwYWNlTmFtZSwgZmFsc2UpOworCiAJaW5kZXhfY2xvc2UoaXJlbCwgTm9Mb2NrKTsK IAogCWlmIChjb25jdXJyZW50KQotCQlSZWluZGV4UmVsYXRpb25Db25jdXJyZW50bHkoaW5kT2lk LCBvcHRpb25zKTsKKwkJUmVpbmRleFJlbGF0aW9uQ29uY3VycmVudGx5KGluZE9pZCwgdGFibGVT cGFjZU9pZCwgb3B0aW9ucyk7CiAJZWxzZQotCQlyZWluZGV4X2luZGV4KGluZE9pZCwgZmFsc2Us IHBlcnNpc3RlbmNlLCBvcHRpb25zKTsKKwkJcmVpbmRleF9pbmRleChpbmRPaWQsIHRhYmxlU3Bh Y2VPaWQsIGZhbHNlLCBwZXJzaXN0ZW5jZSwgb3B0aW9ucyk7CiB9CiAKIC8qCkBAIC0yNDI5LDEw ICsyNDM0LDExIEBAIFJhbmdlVmFyQ2FsbGJhY2tGb3JSZWluZGV4SW5kZXgoY29uc3QgUmFuZ2VW YXIgKnJlbGF0aW9uLAogICoJCVJlY3JlYXRlIGFsbCBpbmRleGVzIG9mIGEgdGFibGUgKGFuZCBv ZiBpdHMgdG9hc3QgdGFibGUsIGlmIGFueSkKICAqLwogT2lkCi1SZWluZGV4VGFibGUoUmFuZ2VW YXIgKnJlbGF0aW9uLCBpbnQgb3B0aW9ucywgYm9vbCBjb25jdXJyZW50KQorUmVpbmRleFRhYmxl KFJhbmdlVmFyICpyZWxhdGlvbiwgY2hhciAqdGFibGVTcGFjZU5hbWUsIGludCBvcHRpb25zLCBi b29sIGNvbmN1cnJlbnQpCiB7CiAJT2lkCQkJaGVhcE9pZDsKIAlib29sCQlyZXN1bHQ7CisJT2lk IAkJdGFibGVTcGFjZU9pZCA9IEludmFsaWRPaWQ7CiAKIAkvKiBUaGUgbG9jayBsZXZlbCB1c2Vk IGhlcmUgc2hvdWxkIG1hdGNoIHJlaW5kZXhfcmVsYXRpb24oKS4gKi8KIAloZWFwT2lkID0gUmFu Z2VWYXJHZXRSZWxpZEV4dGVuZGVkKHJlbGF0aW9uLApAQCAtMjQ0MCw5ICsyNDQ2LDEyIEBAIFJl aW5kZXhUYWJsZShSYW5nZVZhciAqcmVsYXRpb24sIGludCBvcHRpb25zLCBib29sIGNvbmN1cnJl bnQpCiAJCQkJCQkJCQkgICAwLAogCQkJCQkJCQkJICAgUmFuZ2VWYXJDYWxsYmFja093bnNUYWJs ZSwgTlVMTCk7CiAKKwlpZiAodGFibGVTcGFjZU5hbWUpCisJCQl0YWJsZVNwYWNlT2lkID0gZ2V0 X3RhYmxlc3BhY2Vfb2lkKHRhYmxlU3BhY2VOYW1lLCBmYWxzZSk7CisKIAlpZiAoY29uY3VycmVu dCkKIAl7Ci0JCXJlc3VsdCA9IFJlaW5kZXhSZWxhdGlvbkNvbmN1cnJlbnRseShoZWFwT2lkLCBv cHRpb25zKTsKKwkJcmVzdWx0ID0gUmVpbmRleFJlbGF0aW9uQ29uY3VycmVudGx5KGhlYXBPaWQs IHRhYmxlU3BhY2VPaWQsIG9wdGlvbnMpOwogCiAJCWlmICghcmVzdWx0KQogCQkJZXJlcG9ydChO T1RJQ0UsCkBAIC0yNDUyLDYgKzI0NjEsNyBAQCBSZWluZGV4VGFibGUoUmFuZ2VWYXIgKnJlbGF0 aW9uLCBpbnQgb3B0aW9ucywgYm9vbCBjb25jdXJyZW50KQogCWVsc2UKIAl7CiAJCXJlc3VsdCA9 IHJlaW5kZXhfcmVsYXRpb24oaGVhcE9pZCwKKwkJCQkJCQkJICB0YWJsZVNwYWNlT2lkLAogCQkJ CQkJCQkgIFJFSU5ERVhfUkVMX1BST0NFU1NfVE9BU1QgfAogCQkJCQkJCQkgIFJFSU5ERVhfUkVM X0NIRUNLX0NPTlNUUkFJTlRTLAogCQkJCQkJCQkgIG9wdGlvbnMpOwpAQCAtMjQ3MywxMCArMjQ4 MywxMSBAQCBSZWluZGV4VGFibGUoUmFuZ2VWYXIgKnJlbGF0aW9uLCBpbnQgb3B0aW9ucywgYm9v bCBjb25jdXJyZW50KQogICogVGhhdCBtZWFucyB0aGlzIG11c3Qgbm90IGJlIGNhbGxlZCB3aXRo aW4gYSB1c2VyIHRyYW5zYWN0aW9uIGJsb2NrIQogICovCiB2b2lkCi1SZWluZGV4TXVsdGlwbGVU YWJsZXMoY29uc3QgY2hhciAqb2JqZWN0TmFtZSwgUmVpbmRleE9iamVjdFR5cGUgb2JqZWN0S2lu ZCwKK1JlaW5kZXhNdWx0aXBsZVRhYmxlcyhjb25zdCBjaGFyICpvYmplY3ROYW1lLCBSZWluZGV4 T2JqZWN0VHlwZSBvYmplY3RLaW5kLCBjaGFyICp0YWJsZVNwYWNlTmFtZSwKIAkJCQkJICBpbnQg b3B0aW9ucywgYm9vbCBjb25jdXJyZW50KQogewogCU9pZAkJCW9iamVjdE9pZDsKKwlPaWQJCQl0 YWJsZVNwYWNlT2lkID0gSW52YWxpZE9pZDsKIAlSZWxhdGlvbglyZWxhdGlvblJlbGF0aW9uOwog CVRhYmxlU2NhbkRlc2Mgc2NhbjsKIAlTY2FuS2V5RGF0YSBzY2FuX2tleXNbMV07CkBAIC0yNTI1 LDYgKzI1MzYsOSBAQCBSZWluZGV4TXVsdGlwbGVUYWJsZXMoY29uc3QgY2hhciAqb2JqZWN0TmFt ZSwgUmVpbmRleE9iamVjdFR5cGUgb2JqZWN0S2luZCwKIAkJCQkJCSAgIG9iamVjdE5hbWUpOwog CX0KIAorCWlmICh0YWJsZVNwYWNlTmFtZSkKKwkJdGFibGVTcGFjZU9pZCA9IGdldF90YWJsZXNw YWNlX29pZCh0YWJsZVNwYWNlTmFtZSwgZmFsc2UpOworCiAJLyoKIAkgKiBDcmVhdGUgYSBtZW1v cnkgY29udGV4dCB0aGF0IHdpbGwgc3Vydml2ZSBmb3JjZWQgdHJhbnNhY3Rpb24gY29tbWl0cyB3 ZQogCSAqIGRvIGJlbG93LiAgU2luY2UgaXQgaXMgYSBjaGlsZCBvZiBQb3J0YWxDb250ZXh0LCBp dCB3aWxsIGdvIGF3YXkKQEAgLTI2NDgsNyArMjY2Miw3IEBAIFJlaW5kZXhNdWx0aXBsZVRhYmxl cyhjb25zdCBjaGFyICpvYmplY3ROYW1lLCBSZWluZGV4T2JqZWN0VHlwZSBvYmplY3RLaW5kLAog CiAJCWlmIChjb25jdXJyZW50KQogCQl7Ci0JCQkodm9pZCkgUmVpbmRleFJlbGF0aW9uQ29uY3Vy cmVudGx5KHJlbGlkLCBvcHRpb25zKTsKKwkJCSh2b2lkKSBSZWluZGV4UmVsYXRpb25Db25jdXJy ZW50bHkocmVsaWQsIHRhYmxlU3BhY2VPaWQsIG9wdGlvbnMpOwogCQkJLyogUmVpbmRleFJlbGF0 aW9uQ29uY3VycmVudGx5KCkgZG9lcyB0aGUgdmVyYm9zZSBvdXRwdXQgKi8KIAkJfQogCQllbHNl CkBAIC0yNjU2LDYgKzI2NzAsNyBAQCBSZWluZGV4TXVsdGlwbGVUYWJsZXMoY29uc3QgY2hhciAq b2JqZWN0TmFtZSwgUmVpbmRleE9iamVjdFR5cGUgb2JqZWN0S2luZCwKIAkJCWJvb2wJCXJlc3Vs dDsKIAogCQkJcmVzdWx0ID0gcmVpbmRleF9yZWxhdGlvbihyZWxpZCwKKwkJCQkJCQkJCSAgdGFi bGVTcGFjZU9pZCwKIAkJCQkJCQkJCSAgUkVJTkRFWF9SRUxfUFJPQ0VTU19UT0FTVCB8CiAJCQkJ CQkJCQkgIFJFSU5ERVhfUkVMX0NIRUNLX0NPTlNUUkFJTlRTLAogCQkJCQkJCQkJICBvcHRpb25z KTsKQEAgLTI2OTYsNyArMjcxMSw3IEBAIFJlaW5kZXhNdWx0aXBsZVRhYmxlcyhjb25zdCBjaGFy ICpvYmplY3ROYW1lLCBSZWluZGV4T2JqZWN0VHlwZSBvYmplY3RLaW5kLAogICogaW5kZXhlcywg d2hlbiByZWxldmFudCksIG90aGVyd2lzZSByZXR1cm5zIGZhbHNlLgogICovCiBzdGF0aWMgYm9v bAotUmVpbmRleFJlbGF0aW9uQ29uY3VycmVudGx5KE9pZCByZWxhdGlvbk9pZCwgaW50IG9wdGlv bnMpCitSZWluZGV4UmVsYXRpb25Db25jdXJyZW50bHkoT2lkIHJlbGF0aW9uT2lkLCBPaWQgdGFi bGVzcGFjZU9pZCwgaW50IG9wdGlvbnMpCiB7CiAJTGlzdAkgICAqaGVhcFJlbGF0aW9uSWRzID0g TklMOwogCUxpc3QJICAgKmluZGV4SWRzID0gTklMOwpAQCAtMjk1Niw2ICsyOTcxLDcgQEAgUmVp bmRleFJlbGF0aW9uQ29uY3VycmVudGx5KE9pZCByZWxhdGlvbk9pZCwgaW50IG9wdGlvbnMpCiAJ CS8qIENyZWF0ZSBuZXcgaW5kZXggZGVmaW5pdGlvbiBiYXNlZCBvbiBnaXZlbiBpbmRleCAqLwog CQluZXdJbmRleElkID0gaW5kZXhfY29uY3VycmVudGx5X2NyZWF0ZV9jb3B5KGhlYXBSZWwsCiAJ CQkJCQkJCQkJCQkJaW5kZXhJZCwKKwkJCQkJCQkJCQkJCQl0YWJsZXNwYWNlT2lkLAogCQkJCQkJ CQkJCQkJCWNvbmN1cnJlbnROYW1lKTsKIAogCQkvKiBOb3cgb3BlbiB0aGUgcmVsYXRpb24gb2Yg dGhlIG5ldyBpbmRleCwgYSBsb2NrIGlzIGFsc28gbmVlZGVkIG9uIGl0ICovCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRz L3RhYmxlY21kcy5jCmluZGV4IGNjZWVmYmRkNDkuLjgxOTZiYmEwMTMgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRz L3RhYmxlY21kcy5jCkBAIC0xODE4LDcgKzE4MTgsNyBAQCBFeGVjdXRlVHJ1bmNhdGVHdXRzKExp c3QgKmV4cGxpY2l0X3JlbHMsIExpc3QgKnJlbGlkcywgTGlzdCAqcmVsaWRzX2xvZ2dlZCwKIAkJ CS8qCiAJCQkgKiBSZWNvbnN0cnVjdCB0aGUgaW5kZXhlcyB0byBtYXRjaCwgYW5kIHdlJ3JlIGRv bmUuCiAJCQkgKi8KLQkJCXJlaW5kZXhfcmVsYXRpb24oaGVhcF9yZWxpZCwgUkVJTkRFWF9SRUxf UFJPQ0VTU19UT0FTVCwgMCk7CisJCQlyZWluZGV4X3JlbGF0aW9uKGhlYXBfcmVsaWQsIEludmFs aWRPaWQsIFJFSU5ERVhfUkVMX1BST0NFU1NfVE9BU1QsIDApOwogCQl9CiAKIAkJcGdzdGF0X2Nv dW50X3RydW5jYXRlKHJlbCk7CkBAIC0xMjM0MywzMCArMTIzNDMsNyBAQCBBVEV4ZWNTZXRUYWJs ZVNwYWNlKE9pZCB0YWJsZU9pZCwgT2lkIG5ld1RhYmxlU3BhY2UsIExPQ0tNT0RFIGxvY2ttb2Rl KQogCQlyZXR1cm47CiAJfQogCi0JLyoKLQkgKiBXZSBjYW5ub3Qgc3VwcG9ydCBtb3ZpbmcgbWFw cGVkIHJlbGF0aW9ucyBpbnRvIGRpZmZlcmVudCB0YWJsZXNwYWNlcy4KLQkgKiAoSW4gcGFydGlj dWxhciB0aGlzIGVsaW1pbmF0ZXMgYWxsIHNoYXJlZCBjYXRhbG9ncy4pCi0JICovCi0JaWYgKFJl bGF0aW9uSXNNYXBwZWQocmVsKSkKLQkJZXJlcG9ydChFUlJPUiwKLQkJCQkoZXJyY29kZShFUlJD T0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCi0JCQkJIGVycm1zZygiY2Fubm90IG1vdmUgc3lz dGVtIHJlbGF0aW9uIFwiJXNcIiIsCi0JCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwp KSkpOwotCi0JLyogQ2FuJ3QgbW92ZSBhIG5vbi1zaGFyZWQgcmVsYXRpb24gaW50byBwZ19nbG9i YWwgKi8KLQlpZiAobmV3VGFibGVTcGFjZSA9PSBHTE9CQUxUQUJMRVNQQUNFX09JRCkKLQkJZXJl cG9ydChFUlJPUiwKLQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVF KSwKLQkJCQkgZXJybXNnKCJvbmx5IHNoYXJlZCByZWxhdGlvbnMgY2FuIGJlIHBsYWNlZCBpbiBw Z19nbG9iYWwgdGFibGVzcGFjZSIpKSk7Ci0KLQkvKgotCSAqIERvbid0IGFsbG93IG1vdmluZyB0 ZW1wIHRhYmxlcyBvZiBvdGhlciBiYWNrZW5kcyAuLi4gdGhlaXIgbG9jYWwgYnVmZmVyCi0JICog bWFuYWdlciBpcyBub3QgZ29pbmcgdG8gY29wZS4KLQkgKi8KLQlpZiAoUkVMQVRJT05fSVNfT1RI RVJfVEVNUChyZWwpKQotCQllcmVwb3J0KEVSUk9SLAotCQkJCShlcnJjb2RlKEVSUkNPREVfRkVB VFVSRV9OT1RfU1VQUE9SVEVEKSwKLQkJCQkgZXJybXNnKCJjYW5ub3QgbW92ZSB0ZW1wb3Jhcnkg dGFibGVzIG9mIG90aGVyIHNlc3Npb25zIikpKTsKKwljaGVja19yZWxhdGlvbl9pc19tb3ZhYmxl KHJlbCwgbmV3VGFibGVTcGFjZSk7CiAKIAlyZWx0b2FzdHJlbGlkID0gcmVsLT5yZF9yZWwtPnJl bHRvYXN0cmVsaWQ7CiAJLyogRmV0Y2ggdGhlIGxpc3Qgb2YgaW5kZXhlcyBvbiB0b2FzdCByZWxh dGlvbiBpZiBuZWNlc3NhcnkgKi8KQEAgLTEyOTYzLDYgKzEyOTQwLDM4IEBAIENyZWF0ZUluaGVy aXRhbmNlKFJlbGF0aW9uIGNoaWxkX3JlbCwgUmVsYXRpb24gcGFyZW50X3JlbCkKIAl0YWJsZV9j bG9zZShjYXRhbG9nUmVsYXRpb24sIFJvd0V4Y2x1c2l2ZUxvY2spOwogfQogCisvKgorICogVmFs aWRhdGUgdGhhdCByZWxhdGlvbiBjYW4gYmUgbW92ZWQgdG8gdGhlIHNwZWNpZmllZCB0YWJsZXNw YWNlLgorICovCitleHRlcm4gdm9pZAorY2hlY2tfcmVsYXRpb25faXNfbW92YWJsZShSZWxhdGlv biByZWwsIE9pZCB0YWJsZXNwYWNlT2lkKQoreworCS8qCisJICogV2UgY2Fubm90IHN1cHBvcnQg bW92aW5nIG1hcHBlZCByZWxhdGlvbnMgaW50byBkaWZmZXJlbnQgdGFibGVzcGFjZXMuCisJICog KEluIHBhcnRpY3VsYXIgdGhpcyBlbGltaW5hdGVzIGFsbCBzaGFyZWQgY2F0YWxvZ3MuKQorCSAq LworCWlmIChSZWxhdGlvbklzTWFwcGVkKHJlbCkpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVy cmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAorCQkJCWVycm1zZygiY2Fubm90 IG1vdmUgc3lzdGVtIHJlbGF0aW9uIFwiJXNcIiIsCisJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9u TmFtZShyZWwpKSkpOworCisJLyogQ2FuJ3QgbW92ZSBhIG5vbi1zaGFyZWQgcmVsYXRpb24gaW50 byBwZ19nbG9iYWwgKi8KKwlpZiAodGFibGVzcGFjZU9pZCA9PSBHTE9CQUxUQUJMRVNQQUNFX09J RCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1F VEVSX1ZBTFVFKSwKKwkJCQllcnJtc2coIm9ubHkgc2hhcmVkIHJlbGF0aW9ucyBjYW4gYmUgcGxh Y2VkIGluIHBnX2dsb2JhbCB0YWJsZXNwYWNlIikpKTsKKworCS8qCisJICogRG9uJ3QgYWxsb3cg bW92aW5nIHRlbXAgdGFibGVzIG9mIG90aGVyIGJhY2tlbmRzIC4uLiB0aGVpciBsb2NhbCBidWZm ZXIKKwkgKiBtYW5hZ2VyIGlzIG5vdCBnb2luZyB0byBjb3BlLgorCSAqLworCWlmIChSRUxBVElP Tl9JU19PVEhFUl9URU1QKHJlbCkpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJS Q09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAorCQkJCWVycm1zZygiY2Fubm90IG1vdmUgdGVt cG9yYXJ5IHRhYmxlcyBvZiBvdGhlciBzZXNzaW9ucyIpKSk7Cit9CisKIC8qCiAgKiBPYnRhaW4g dGhlIHNvdXJjZS10ZXh0IGZvcm0gb2YgdGhlIGNvbnN0cmFpbnQgZXhwcmVzc2lvbiBmb3IgYSBj aGVjawogICogY29uc3RyYWludCwgZ2l2ZW4gaXRzIHBnX2NvbnN0cmFpbnQgdHVwbGUKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkgYi9zcmMvYmFja2VuZC9wYXJzZXIvZ3Jh bS55CmluZGV4IGM5N2JiMzY3ZjguLjMzM2Y5OTJhMDEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3BhcnNlci9ncmFtLnkKKysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueQpAQCAtNTQ5LDcg KzU0OSw3IEBAIHN0YXRpYyBOb2RlICptYWtlUmVjdXJzaXZlVmlld1NlbGVjdChjaGFyICpyZWxu YW1lLCBMaXN0ICphbGlhc2VzLCBOb2RlICpxdWVyeSk7CiAKICV0eXBlIDxsaXN0Pgljb25zdHJh aW50c19zZXRfbGlzdAogJXR5cGUgPGJvb2xlYW4+IGNvbnN0cmFpbnRzX3NldF9tb2RlCi0ldHlw ZSA8c3RyPgkJT3B0VGFibGVTcGFjZSBPcHRDb25zVGFibGVTcGFjZQorJXR5cGUgPHN0cj4JCU9w dFRhYmxlU3BhY2UgT3B0Q29uc1RhYmxlU3BhY2Ugb3B0X3NldF90YWJsZXNwYWNlX25hbWUKICV0 eXBlIDxyb2xlc3BlYz4gT3B0VGFibGVTcGFjZU93bmVyCiAldHlwZSA8aXZhbD4Jb3B0X2NoZWNr X29wdGlvbgogCkBAIC0zOTM2LDYgKzM5MzYsMTEgQEAgT3B0VGFibGVTcGFjZTogICBUQUJMRVNQ QUNFIG5hbWUJCQkJCXsgJCQgPSAkMjsgfQogCQkJfCAvKkVNUFRZKi8JCQkJCQkJCXsgJCQgPSBO VUxMOyB9CiAJCTsKIAorb3B0X3NldF90YWJsZXNwYWNlX25hbWU6CisJCQlTRVQgVEFCTEVTUEFD RSBuYW1lCQkJCQkJeyAkJCA9ICQzOyB9CisJCQl8IC8qRU1QVFkqLwkJCQkJCQkJeyAkJCA9IE5V TEw7IH0KKwkJOworCiBPcHRDb25zVGFibGVTcGFjZTogICBVU0lORyBJTkRFWCBUQUJMRVNQQUNF IG5hbWUJeyAkJCA9ICQ0OyB9CiAJCQl8IC8qRU1QVFkqLwkJCQkJCQkJeyAkJCA9IE5VTEw7IH0K IAkJOwpAQCAtODMyNywzMSArODMzMiwzMyBAQCBEcm9wVHJhbnNmb3JtU3RtdDogRFJPUCBUUkFO U0ZPUk0gb3B0X2lmX2V4aXN0cyBGT1IgVHlwZW5hbWUgTEFOR1VBR0UgbmFtZSBvcHRfZAogICoK ICAqCQlRVUVSWToKICAqCi0gKgkJUkVJTkRFWCBbIChvcHRpb25zKSBdIHR5cGUgW0NPTkNVUlJF TlRMWV0gPG5hbWU+CisgKgkJUkVJTkRFWCBbIChvcHRpb25zKSBdIHR5cGUgW0NPTkNVUlJFTlRM WV0gPG5hbWU+IFsgU0VUIFRBQkxFU1BBQ0UgPHRhYmxlc3BhY2VfbmFtZT4gXQogICoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqLwogCiBSZWluZGV4U3RtdDoKLQkJCVJFSU5ERVggcmVpbmRleF90YXJnZXRf dHlwZSBvcHRfY29uY3VycmVudGx5IHF1YWxpZmllZF9uYW1lCisJCQlSRUlOREVYIHJlaW5kZXhf dGFyZ2V0X3R5cGUgb3B0X2NvbmN1cnJlbnRseSBxdWFsaWZpZWRfbmFtZSBvcHRfc2V0X3RhYmxl c3BhY2VfbmFtZQogCQkJCXsKIAkJCQkJUmVpbmRleFN0bXQgKm4gPSBtYWtlTm9kZShSZWluZGV4 U3RtdCk7CiAJCQkJCW4tPmtpbmQgPSAkMjsKIAkJCQkJbi0+Y29uY3VycmVudCA9ICQzOwogCQkJ CQluLT5yZWxhdGlvbiA9ICQ0OworCQkJCQluLT50YWJsZXNwYWNlbmFtZSA9ICQ1OwogCQkJCQlu LT5uYW1lID0gTlVMTDsKIAkJCQkJbi0+b3B0aW9ucyA9IDA7CiAJCQkJCSQkID0gKE5vZGUgKilu OwogCQkJCX0KLQkJCXwgUkVJTkRFWCByZWluZGV4X3RhcmdldF9tdWx0aXRhYmxlIG9wdF9jb25j dXJyZW50bHkgbmFtZQorCQkJfCBSRUlOREVYIHJlaW5kZXhfdGFyZ2V0X211bHRpdGFibGUgb3B0 X2NvbmN1cnJlbnRseSBuYW1lIG9wdF9zZXRfdGFibGVzcGFjZV9uYW1lCiAJCQkJewogCQkJCQlS ZWluZGV4U3RtdCAqbiA9IG1ha2VOb2RlKFJlaW5kZXhTdG10KTsKIAkJCQkJbi0+a2luZCA9ICQy OwogCQkJCQluLT5jb25jdXJyZW50ID0gJDM7CiAJCQkJCW4tPm5hbWUgPSAkNDsKKwkJCQkJbi0+ dGFibGVzcGFjZW5hbWUgPSAkNTsKIAkJCQkJbi0+cmVsYXRpb24gPSBOVUxMOwogCQkJCQluLT5v cHRpb25zID0gMDsKIAkJCQkJJCQgPSAoTm9kZSAqKW47CiAJCQkJfQotCQkJfCBSRUlOREVYICco JyByZWluZGV4X29wdGlvbl9saXN0ICcpJyByZWluZGV4X3RhcmdldF90eXBlIG9wdF9jb25jdXJy ZW50bHkgcXVhbGlmaWVkX25hbWUKKwkJCXwgUkVJTkRFWCAnKCcgcmVpbmRleF9vcHRpb25fbGlz dCAnKScgcmVpbmRleF90YXJnZXRfdHlwZSBvcHRfY29uY3VycmVudGx5IHF1YWxpZmllZF9uYW1l IG9wdF9zZXRfdGFibGVzcGFjZV9uYW1lCiAJCQkJewogCQkJCQlSZWluZGV4U3RtdCAqbiA9IG1h a2VOb2RlKFJlaW5kZXhTdG10KTsKIAkJCQkJbi0+a2luZCA9ICQ1OwpAQCAtODM1OSw5ICs4MzY2 LDEwIEBAIFJlaW5kZXhTdG10OgogCQkJCQluLT5yZWxhdGlvbiA9ICQ3OwogCQkJCQluLT5uYW1l ID0gTlVMTDsKIAkJCQkJbi0+b3B0aW9ucyA9ICQzOworCQkJCQluLT50YWJsZXNwYWNlbmFtZSA9 ICQ4OwogCQkJCQkkJCA9IChOb2RlICopbjsKIAkJCQl9Ci0JCQl8IFJFSU5ERVggJygnIHJlaW5k ZXhfb3B0aW9uX2xpc3QgJyknIHJlaW5kZXhfdGFyZ2V0X211bHRpdGFibGUgb3B0X2NvbmN1cnJl bnRseSBuYW1lCisJCQl8IFJFSU5ERVggJygnIHJlaW5kZXhfb3B0aW9uX2xpc3QgJyknIHJlaW5k ZXhfdGFyZ2V0X211bHRpdGFibGUgb3B0X2NvbmN1cnJlbnRseSBuYW1lIG9wdF9zZXRfdGFibGVz cGFjZV9uYW1lCiAJCQkJewogCQkJCQlSZWluZGV4U3RtdCAqbiA9IG1ha2VOb2RlKFJlaW5kZXhT dG10KTsKIAkJCQkJbi0+a2luZCA9ICQ1OwpAQCAtODM2OSw2ICs4Mzc3LDcgQEAgUmVpbmRleFN0 bXQ6CiAJCQkJCW4tPm5hbWUgPSAkNzsKIAkJCQkJbi0+cmVsYXRpb24gPSBOVUxMOwogCQkJCQlu LT5vcHRpb25zID0gJDM7CisJCQkJCW4tPnRhYmxlc3BhY2VuYW1lID0gJDg7CiAJCQkJCSQkID0g KE5vZGUgKiluOwogCQkJCX0KIAkJOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdGNvcC91dGls aXR5LmMgYi9zcmMvYmFja2VuZC90Y29wL3V0aWxpdHkuYwppbmRleCA3ZjZmMGI2NDk4Li40MGMw YzVlMGM2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC90Y29wL3V0aWxpdHkuYworKysgYi9zcmMv YmFja2VuZC90Y29wL3V0aWxpdHkuYwpAQCAtNzg0LDE1ICs3ODQsMjUgQEAgc3RhbmRhcmRfUHJv Y2Vzc1V0aWxpdHkoUGxhbm5lZFN0bXQgKnBzdG10LAogCQkJCXN3aXRjaCAoc3RtdC0+a2luZCkK IAkJCQl7CiAJCQkJCWNhc2UgUkVJTkRFWF9PQkpFQ1RfSU5ERVg6Ci0JCQkJCQlSZWluZGV4SW5k ZXgoc3RtdC0+cmVsYXRpb24sIHN0bXQtPm9wdGlvbnMsIHN0bXQtPmNvbmN1cnJlbnQpOworCQkJ CQkJUmVpbmRleEluZGV4KHN0bXQtPnJlbGF0aW9uLCBzdG10LT50YWJsZXNwYWNlbmFtZSwgc3Rt dC0+b3B0aW9ucywgc3RtdC0+Y29uY3VycmVudCk7CiAJCQkJCQlicmVhazsKIAkJCQkJY2FzZSBS RUlOREVYX09CSkVDVF9UQUJMRToKLQkJCQkJCVJlaW5kZXhUYWJsZShzdG10LT5yZWxhdGlvbiwg c3RtdC0+b3B0aW9ucywgc3RtdC0+Y29uY3VycmVudCk7CisJCQkJCQlSZWluZGV4VGFibGUoc3Rt dC0+cmVsYXRpb24sIHN0bXQtPnRhYmxlc3BhY2VuYW1lLCBzdG10LT5vcHRpb25zLCBzdG10LT5j b25jdXJyZW50KTsKIAkJCQkJCWJyZWFrOwogCQkJCQljYXNlIFJFSU5ERVhfT0JKRUNUX1NDSEVN QToKIAkJCQkJY2FzZSBSRUlOREVYX09CSkVDVF9TWVNURU06CiAJCQkJCWNhc2UgUkVJTkRFWF9P QkpFQ1RfREFUQUJBU0U6CiAKKwkJCQkJCS8qCisJCQkJCQkgKiBXZSBjYW5ub3QgbW92ZSBzeXN0 ZW0gcmVsYXRpb25zIHRvIGEgbmV3IHRhYmxlc3BhY2UgYW5kCisJCQkJCQkgKiB0aGUgZW50aXJl IHNjaGVtYS9kYXRhYmFzZSB2ZXJ5IGxpa2VseSB3aWxsIGhhcyBvbmUsCisJCQkJCQkgKiBzbyBz aW1wbHkgcmVqZWN0IHN1Y2ggY2FzZXMuCisJCQkJCQkgKi8KKwkJCQkJCWlmIChzdG10LT50YWJs ZXNwYWNlbmFtZSkKKwkJCQkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJCQkoZXJybXNnKCJpbmNv bXBhdGlibGUgU0VUIFRBQkxFU1BBQ0Ugb3B0aW9uIiksCisJCQkJCQkJCWVycmRldGFpbCgiWW91 IGNhbiBvbmx5IHVzZSBTRVQgVEFCTEVTUEFDRSB3aXRoIFJFSU5ERVggeyBJTkRFWCB8IFRBQkxF IH0uIikpKTsKKwogCQkJCQkJLyoKIAkJCQkJCSAqIFRoaXMgY2Fubm90IHJ1biBpbnNpZGUgYSB1 c2VyIHRyYW5zYWN0aW9uIGJsb2NrOyBpZgogCQkJCQkJICogd2Ugd2VyZSBpbnNpZGUgYSB0cmFu c2FjdGlvbiwgdGhlbiBpdHMgY29tbWl0LSBhbmQKQEAgLTgwMyw3ICs4MTMsNyBAQCBzdGFuZGFy ZF9Qcm9jZXNzVXRpbGl0eShQbGFubmVkU3RtdCAqcHN0bXQsCiAJCQkJCQkJCQkJCQkgIChzdG10 LT5raW5kID09IFJFSU5ERVhfT0JKRUNUX1NDSEVNQSkgPyAiUkVJTkRFWCBTQ0hFTUEiIDoKIAkJ CQkJCQkJCQkJCSAgKHN0bXQtPmtpbmQgPT0gUkVJTkRFWF9PQkpFQ1RfU1lTVEVNKSA/ICJSRUlO REVYIFNZU1RFTSIgOgogCQkJCQkJCQkJCQkJICAiUkVJTkRFWCBEQVRBQkFTRSIpOwotCQkJCQkJ UmVpbmRleE11bHRpcGxlVGFibGVzKHN0bXQtPm5hbWUsIHN0bXQtPmtpbmQsIHN0bXQtPm9wdGlv bnMsIHN0bXQtPmNvbmN1cnJlbnQpOworCQkJCQkJUmVpbmRleE11bHRpcGxlVGFibGVzKHN0bXQt Pm5hbWUsIHN0bXQtPmtpbmQsIHN0bXQtPnRhYmxlc3BhY2VuYW1lLCBzdG10LT5vcHRpb25zLCBz dG10LT5jb25jdXJyZW50KTsKIAkJCQkJCWJyZWFrOwogCQkJCQlkZWZhdWx0OgogCQkJCQkJZWxv ZyhFUlJPUiwgInVucmVjb2duaXplZCBvYmplY3QgdHlwZTogJWQiLApkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvY2F0YWxvZy9pbmRleC5oIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9pbmRleC5oCmlu ZGV4IDExMTNkMjViMmQuLmVmNjEwM2ExNzQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFs b2cvaW5kZXguaAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL2luZGV4LmgKQEAgLTgwLDYgKzgw LDcgQEAgZXh0ZXJuIE9pZAlpbmRleF9jcmVhdGUoUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCiBl eHRlcm4gT2lkCWluZGV4X2NvbmN1cnJlbnRseV9jcmVhdGVfY29weShSZWxhdGlvbiBoZWFwUmVs YXRpb24sCiAJCQkJCQkJCQkJICAgT2lkIG9sZEluZGV4SWQsCisJCQkJCQkJCQkJICAgT2lkIHRh Ymxlc3BhY2VPaWQsCiAJCQkJCQkJCQkJICAgY29uc3QgY2hhciAqbmV3TmFtZSk7CiAKIGV4dGVy biB2b2lkIGluZGV4X2NvbmN1cnJlbnRseV9idWlsZChPaWQgaGVhcFJlbGF0aW9uSWQsCkBAIC0x MjksOCArMTMwLDggQEAgZXh0ZXJuIHZvaWQgdmFsaWRhdGVfaW5kZXgoT2lkIGhlYXBJZCwgT2lk IGluZGV4SWQsIFNuYXBzaG90IHNuYXBzaG90KTsKIAogZXh0ZXJuIHZvaWQgaW5kZXhfc2V0X3N0 YXRlX2ZsYWdzKE9pZCBpbmRleElkLCBJbmRleFN0YXRlRmxhZ3NBY3Rpb24gYWN0aW9uKTsKIAot ZXh0ZXJuIHZvaWQgcmVpbmRleF9pbmRleChPaWQgaW5kZXhJZCwgYm9vbCBza2lwX2NvbnN0cmFp bnRfY2hlY2tzLAotCQkJCQkJICBjaGFyIHJlbHBlcnNpc3RlbmNlLCBpbnQgb3B0aW9ucyk7Citl eHRlcm4gdm9pZCByZWluZGV4X2luZGV4KE9pZCBpbmRleElkLCBPaWQgdGFibGVzcGFjZU9pZCwg Ym9vbCBza2lwX2NvbnN0cmFpbnRfY2hlY2tzLAorCQkJICBjaGFyIHJlbHBlcnNpc3RlbmNlLCBp bnQgb3B0aW9ucyk7CiAKIC8qIEZsYWcgYml0cyBmb3IgcmVpbmRleF9yZWxhdGlvbigpOiAqLwog I2RlZmluZSBSRUlOREVYX1JFTF9QUk9DRVNTX1RPQVNUCQkJMHgwMQpAQCAtMTM5LDcgKzE0MCw3 IEBAIGV4dGVybiB2b2lkIHJlaW5kZXhfaW5kZXgoT2lkIGluZGV4SWQsIGJvb2wgc2tpcF9jb25z dHJhaW50X2NoZWNrcywKICNkZWZpbmUgUkVJTkRFWF9SRUxfRk9SQ0VfSU5ERVhFU19VTkxPR0dF RAkweDA4CiAjZGVmaW5lIFJFSU5ERVhfUkVMX0ZPUkNFX0lOREVYRVNfUEVSTUFORU5UIDB4MTAK IAotZXh0ZXJuIGJvb2wgcmVpbmRleF9yZWxhdGlvbihPaWQgcmVsaWQsIGludCBmbGFncywgaW50 IG9wdGlvbnMpOworZXh0ZXJuIGJvb2wgcmVpbmRleF9yZWxhdGlvbihPaWQgcmVsaWQsIE9pZCB0 YWJsZXNwYWNlT2lkLCBpbnQgZmxhZ3MsIGludCBvcHRpb25zKTsKIAogZXh0ZXJuIGJvb2wgUmVp bmRleElzUHJvY2Vzc2luZ0hlYXAoT2lkIGhlYXBPaWQpOwogZXh0ZXJuIGJvb2wgUmVpbmRleElz UHJvY2Vzc2luZ0luZGV4KE9pZCBpbmRleE9pZCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9j b21tYW5kcy9kZWZyZW0uaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2RlZnJlbS5oCmluZGV4IGI0 ZTdkYjY3YzMuLjNiODc0ZmUxOWQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2Rl ZnJlbS5oCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2RlZnJlbS5oCkBAIC0zNCwxMCArMzQs MTAgQEAgZXh0ZXJuIE9iamVjdEFkZHJlc3MgRGVmaW5lSW5kZXgoT2lkIHJlbGF0aW9uSWQsCiAJ CQkJCQkJCSBib29sIGNoZWNrX25vdF9pbl91c2UsCiAJCQkJCQkJCSBib29sIHNraXBfYnVpbGQs CiAJCQkJCQkJCSBib29sIHF1aWV0KTsKLWV4dGVybiB2b2lkIFJlaW5kZXhJbmRleChSYW5nZVZh ciAqaW5kZXhSZWxhdGlvbiwgaW50IG9wdGlvbnMsIGJvb2wgY29uY3VycmVudCk7Ci1leHRlcm4g T2lkCVJlaW5kZXhUYWJsZShSYW5nZVZhciAqcmVsYXRpb24sIGludCBvcHRpb25zLCBib29sIGNv bmN1cnJlbnQpOworZXh0ZXJuIHZvaWQgUmVpbmRleEluZGV4KFJhbmdlVmFyICppbmRleFJlbGF0 aW9uLCBjaGFyICp0YWJsZVNwYWNlTmFtZSwgaW50IG9wdGlvbnMsIGJvb2wgY29uY3VycmVudCk7 CitleHRlcm4gT2lkCVJlaW5kZXhUYWJsZShSYW5nZVZhciAqcmVsYXRpb24sIGNoYXIgKnRhYmxl U3BhY2VOYW1lLCBpbnQgb3B0aW9ucywgYm9vbCBjb25jdXJyZW50KTsKIGV4dGVybiB2b2lkIFJl aW5kZXhNdWx0aXBsZVRhYmxlcyhjb25zdCBjaGFyICpvYmplY3ROYW1lLCBSZWluZGV4T2JqZWN0 VHlwZSBvYmplY3RLaW5kLAotCQkJCQkJCQkgIGludCBvcHRpb25zLCBib29sIGNvbmN1cnJlbnQp OworCQkJCQkJCQkgIGNoYXIgKnRhYmxlU3BhY2VOYW1lLCBpbnQgb3B0aW9ucywgYm9vbCBjb25j dXJyZW50KTsKIGV4dGVybiBjaGFyICptYWtlT2JqZWN0TmFtZShjb25zdCBjaGFyICpuYW1lMSwg Y29uc3QgY2hhciAqbmFtZTIsCiAJCQkJCQkJY29uc3QgY2hhciAqbGFiZWwpOwogZXh0ZXJuIGNo YXIgKkNob29zZVJlbGF0aW9uTmFtZShjb25zdCBjaGFyICpuYW1lMSwgY29uc3QgY2hhciAqbmFt ZTIsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21tYW5kcy90YWJsZWNtZHMuaCBiL3NyYy9p bmNsdWRlL2NvbW1hbmRzL3RhYmxlY21kcy5oCmluZGV4IDljMjVhODA1ZjIuLjQ4MjRiZDYxNjYg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3RhYmxlY21kcy5oCisrKyBiL3NyYy9p bmNsdWRlL2NvbW1hbmRzL3RhYmxlY21kcy5oCkBAIC01Miw2ICs1Miw4IEBAIGV4dGVybiB2b2lk IEFsdGVyUmVsYXRpb25OYW1lc3BhY2VJbnRlcm5hbChSZWxhdGlvbiBjbGFzc1JlbCwgT2lkIHJl bE9pZCwKIAogZXh0ZXJuIHZvaWQgQ2hlY2tUYWJsZU5vdEluVXNlKFJlbGF0aW9uIHJlbCwgY29u c3QgY2hhciAqc3RtdCk7CiAKK2V4dGVybiB2b2lkIGNoZWNrX3JlbGF0aW9uX2lzX21vdmFibGUo UmVsYXRpb24gcmVsLCBPaWQgdGFibGVzcGFjZU9pZCk7CisKIGV4dGVybiB2b2lkIEV4ZWN1dGVU cnVuY2F0ZShUcnVuY2F0ZVN0bXQgKnN0bXQpOwogZXh0ZXJuIHZvaWQgRXhlY3V0ZVRydW5jYXRl R3V0cyhMaXN0ICpleHBsaWNpdF9yZWxzLCBMaXN0ICpyZWxpZHMsIExpc3QgKnJlbGlkc19sb2dn ZWQsCiAJCQkJCQkJCURyb3BCZWhhdmlvciBiZWhhdmlvciwgYm9vbCByZXN0YXJ0X3NlcXMpOwpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oIGIvc3JjL2luY2x1ZGUv bm9kZXMvcGFyc2Vub2Rlcy5oCmluZGV4IDk0ZGVkM2MxMzUuLjAzYWU4MzlhNmMgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rl cy9wYXJzZW5vZGVzLmgKQEAgLTMzMjAsNiArMzMyMCw3IEBAIHR5cGVkZWYgc3RydWN0IFJlaW5k ZXhTdG10CiAJY29uc3QgY2hhciAqbmFtZTsJCQkvKiBuYW1lIG9mIGRhdGFiYXNlIHRvIHJlaW5k ZXggKi8KIAlpbnQJCQlvcHRpb25zOwkJLyogUmVpbmRleCBvcHRpb25zIGZsYWdzICovCiAJYm9v bAkJY29uY3VycmVudDsJCS8qIHJlaW5kZXggY29uY3VycmVudGx5PyAqLworCWNoYXIJICAgKnRh Ymxlc3BhY2VuYW1lOwogfSBSZWluZGV4U3RtdDsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9pbnB1dC90YWJsZXNwYWNlLnNvdXJjZSBi L3NyYy90ZXN0L3JlZ3Jlc3MvaW5wdXQvdGFibGVzcGFjZS5zb3VyY2UKaW5kZXggYTVmNjFhMzVk Yy4uODQ0ZTYyZDIzYiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9pbnB1dC90YWJsZXNw YWNlLnNvdXJjZQorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2lucHV0L3RhYmxlc3BhY2Uuc291cmNl CkBAIC0xNyw2ICsxNywzNCBAQCBBTFRFUiBUQUJMRVNQQUNFIHJlZ3Jlc3NfdGJsc3BhY2UgU0VU IChzb21lX25vbmV4aXN0ZW50X3BhcmFtZXRlciA9IHRydWUpOyAgLS0gZgogQUxURVIgVEFCTEVT UEFDRSByZWdyZXNzX3RibHNwYWNlIFJFU0VUIChyYW5kb21fcGFnZV9jb3N0ID0gMi4wKTsgLS0g ZmFpbAogQUxURVIgVEFCTEVTUEFDRSByZWdyZXNzX3RibHNwYWNlIFJFU0VUIChyYW5kb21fcGFn ZV9jb3N0LCBlZmZlY3RpdmVfaW9fY29uY3VycmVuY3kpOyAtLSBvawogCistLSBjcmVhdGUgdGFi bGUgdG8gdGVzdCBSRUlOREVYIHdpdGggVEFCTEVTUEFDRSBjaGFuZ2UKK0NSRUFURSBUQUJMRSBy ZWdyZXNzX3RibHNwYWNlX3Rlc3RfdGJsIChudW0xIGJpZ2ludCwgbnVtMiBkb3VibGUgcHJlY2lz aW9uLCBudW0zIGRvdWJsZSBwcmVjaXNpb24pOworSU5TRVJUIElOVE8gcmVncmVzc190YmxzcGFj ZV90ZXN0X3RibCAobnVtMSwgbnVtMiwgbnVtMykKKyAgU0VMRUNUIHJvdW5kKHJhbmRvbSgpKjEw MCksIHJhbmRvbSgpLCByYW5kb20oKSo0MgorICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAyMDAw MCkgcyhpKTsKK0NSRUFURSBJTkRFWCByZWdyZXNzX3RibHNwYWNlX3Rlc3RfdGJsX2lkeCBPTiBy ZWdyZXNzX3RibHNwYWNlX3Rlc3RfdGJsIChudW0xKTsKKworLS0gY2hlY2sgUkVJTkRFWCB3aXRo IFRBQkxFU1BBQ0UgY2hhbmdlCitSRUlOREVYIElOREVYIHJlZ3Jlc3NfdGJsc3BhY2VfdGVzdF90 YmxfaWR4IFNFVCBUQUJMRVNQQUNFIHJlZ3Jlc3NfdGJsc3BhY2U7IC0tIG9rCitSRUlOREVYIFRB QkxFIHJlZ3Jlc3NfdGJsc3BhY2VfdGVzdF90YmwgU0VUIFRBQkxFU1BBQ0UgcmVncmVzc190Ymxz cGFjZTsgLS0gb2sKK1JFSU5ERVggVEFCTEUgcGdfYXV0aGlkIFNFVCBUQUJMRVNQQUNFIHJlZ3Jl c3NfdGJsc3BhY2U7IC0tIGZhaWwKK1JFSU5ERVggU0NIRU1BIHBnX2NhdGFsb2cgU0VUIFRBQkxF U1BBQ0UgcmVncmVzc190YmxzcGFjZTsgLS0gZmFpbAorUkVJTkRFWCBEQVRBQkFTRSBwb3N0Z3Jl cyBTRVQgVEFCTEVTUEFDRSByZWdyZXNzX3RibHNwYWNlOyAtLSBmYWlsCitSRUlOREVYIFNZU1RF TSBwb3N0Z3JlcyBTRVQgVEFCTEVTUEFDRSByZWdyZXNzX3RibHNwYWNlOyAtLSBmYWlsCisKKy0t IGNoZWNrIHRoYXQgYWxsIHJlbGF0aW9ucyBtb3ZlZCB0byBuZXcgdGFibGVzcGFjZQorU0VMRUNU IHJlbG5hbWUgRlJPTSBwZ19jbGFzcworV0hFUkUgcmVsdGFibGVzcGFjZT0oU0VMRUNUIG9pZCBG Uk9NIHBnX3RhYmxlc3BhY2UgV0hFUkUgc3BjbmFtZT0ncmVncmVzc190YmxzcGFjZScpCitBTkQg cmVsbmFtZSBJTiAoJ3JlZ3Jlc3NfdGJsc3BhY2VfdGVzdF90YmxfaWR4Jyk7CisKKy0tIG1vdmUg YmFjayB0byBwZ19kZWZhdWx0IHRhYmxlc3BhY2UKK1JFSU5ERVggVEFCTEUgQ09OQ1VSUkVOVExZ IHJlZ3Jlc3NfdGJsc3BhY2VfdGVzdF90YmwgU0VUIFRBQkxFU1BBQ0UgcGdfZGVmYXVsdDsgLS0g b2sKKworLS0gY2hlY2sgdGhhdCBhbGwgcmVsYXRpb25zIG1vdmVkIGJhY2sgdG8gcGdfZGVmYXVs dAorU0VMRUNUIHJlbG5hbWUgRlJPTSBwZ19jbGFzcworV0hFUkUgcmVsdGFibGVzcGFjZT0oU0VM RUNUIG9pZCBGUk9NIHBnX3RhYmxlc3BhY2UgV0hFUkUgc3BjbmFtZT0ncmVncmVzc190YmxzcGFj ZScpCitBTkQgcmVsbmFtZSBJTiAoJ3JlZ3Jlc3NfdGJsc3BhY2VfdGVzdF90YmxfaWR4Jyk7CisK IC0tIGNyZWF0ZSBhIHNjaGVtYSB3ZSBjYW4gdXNlCiBDUkVBVEUgU0NIRU1BIHRlc3RzY2hlbWE7 CiAKQEAgLTI3OSw2ICszMDcsOSBAQCBBTFRFUiBUQUJMRSBBTEwgSU4gVEFCTEVTUEFDRSByZWdy ZXNzX3RibHNwYWNlX3JlbmFtZWQgU0VUIFRBQkxFU1BBQ0UgcGdfZGVmYXVsdAogLS0gU2hvdWxk IHN1Y2NlZWQKIERST1AgVEFCTEVTUEFDRSByZWdyZXNzX3RibHNwYWNlX3JlbmFtZWQ7CiAKK0RS T1AgSU5ERVggcmVncmVzc190YmxzcGFjZV90ZXN0X3RibF9pZHg7CitEUk9QIFRBQkxFIHJlZ3Jl c3NfdGJsc3BhY2VfdGVzdF90Ymw7CisKIERST1AgU0NIRU1BIHRlc3RzY2hlbWEgQ0FTQ0FERTsK IAogRFJPUCBST0xFIHJlZ3Jlc3NfdGFibGVzcGFjZV91c2VyMTsKZGlmZiAtLWdpdCBhL3NyYy90 ZXN0L3JlZ3Jlc3Mvb3V0cHV0L3RhYmxlc3BhY2Uuc291cmNlIGIvc3JjL3Rlc3QvcmVncmVzcy9v dXRwdXQvdGFibGVzcGFjZS5zb3VyY2UKaW5kZXggMTYyYjU5MWIzMS4uYzI0MDE0NTQ0OCAxMDA2 NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9vdXRwdXQvdGFibGVzcGFjZS5zb3VyY2UKKysrIGIv c3JjL3Rlc3QvcmVncmVzcy9vdXRwdXQvdGFibGVzcGFjZS5zb3VyY2UKQEAgLTIwLDYgKzIwLDQ1 IEBAIEVSUk9SOiAgdW5yZWNvZ25pemVkIHBhcmFtZXRlciAic29tZV9ub25leGlzdGVudF9wYXJh bWV0ZXIiCiBBTFRFUiBUQUJMRVNQQUNFIHJlZ3Jlc3NfdGJsc3BhY2UgUkVTRVQgKHJhbmRvbV9w YWdlX2Nvc3QgPSAyLjApOyAtLSBmYWlsCiBFUlJPUjogIFJFU0VUIG11c3Qgbm90IGluY2x1ZGUg dmFsdWVzIGZvciBwYXJhbWV0ZXJzCiBBTFRFUiBUQUJMRVNQQUNFIHJlZ3Jlc3NfdGJsc3BhY2Ug UkVTRVQgKHJhbmRvbV9wYWdlX2Nvc3QsIGVmZmVjdGl2ZV9pb19jb25jdXJyZW5jeSk7IC0tIG9r CistLSBjcmVhdGUgdGFibGUgdG8gdGVzdCBSRUlOREVYIHdpdGggVEFCTEVTUEFDRSBjaGFuZ2UK K0NSRUFURSBUQUJMRSByZWdyZXNzX3RibHNwYWNlX3Rlc3RfdGJsIChudW0xIGJpZ2ludCwgbnVt MiBkb3VibGUgcHJlY2lzaW9uLCBudW0zIGRvdWJsZSBwcmVjaXNpb24pOworSU5TRVJUIElOVE8g cmVncmVzc190YmxzcGFjZV90ZXN0X3RibCAobnVtMSwgbnVtMiwgbnVtMykKKyAgU0VMRUNUIHJv dW5kKHJhbmRvbSgpKjEwMCksIHJhbmRvbSgpLCByYW5kb20oKSo0MgorICBGUk9NIGdlbmVyYXRl X3NlcmllcygxLCAyMDAwMCkgcyhpKTsKK0NSRUFURSBJTkRFWCByZWdyZXNzX3RibHNwYWNlX3Rl c3RfdGJsX2lkeCBPTiByZWdyZXNzX3RibHNwYWNlX3Rlc3RfdGJsIChudW0xKTsKKy0tIGNoZWNr IFJFSU5ERVggd2l0aCBUQUJMRVNQQUNFIGNoYW5nZQorUkVJTkRFWCBJTkRFWCByZWdyZXNzX3Ri bHNwYWNlX3Rlc3RfdGJsX2lkeCBTRVQgVEFCTEVTUEFDRSByZWdyZXNzX3RibHNwYWNlOyAtLSBv aworUkVJTkRFWCBUQUJMRSByZWdyZXNzX3RibHNwYWNlX3Rlc3RfdGJsIFNFVCBUQUJMRVNQQUNF IHJlZ3Jlc3NfdGJsc3BhY2U7IC0tIG9rCitSRUlOREVYIFRBQkxFIHBnX2F1dGhpZCBTRVQgVEFC TEVTUEFDRSByZWdyZXNzX3RibHNwYWNlOyAtLSBmYWlsCitFUlJPUjogIGNhbm5vdCBtb3ZlIHN5 c3RlbSByZWxhdGlvbiAicGdfYXV0aGlkX3JvbG5hbWVfaW5kZXgiCitSRUlOREVYIFNDSEVNQSBw Z19jYXRhbG9nIFNFVCBUQUJMRVNQQUNFIHJlZ3Jlc3NfdGJsc3BhY2U7IC0tIGZhaWwKK0VSUk9S OiAgaW5jb21wYXRpYmxlIFNFVCBUQUJMRVNQQUNFIG9wdGlvbgorREVUQUlMOiAgWW91IGNhbiBv bmx5IHVzZSBTRVQgVEFCTEVTUEFDRSB3aXRoIFJFSU5ERVggeyBJTkRFWCB8IFRBQkxFIH0uCitS RUlOREVYIERBVEFCQVNFIHBvc3RncmVzIFNFVCBUQUJMRVNQQUNFIHJlZ3Jlc3NfdGJsc3BhY2U7 IC0tIGZhaWwKK0VSUk9SOiAgaW5jb21wYXRpYmxlIFNFVCBUQUJMRVNQQUNFIG9wdGlvbgorREVU QUlMOiAgWW91IGNhbiBvbmx5IHVzZSBTRVQgVEFCTEVTUEFDRSB3aXRoIFJFSU5ERVggeyBJTkRF WCB8IFRBQkxFIH0uCitSRUlOREVYIFNZU1RFTSBwb3N0Z3JlcyBTRVQgVEFCTEVTUEFDRSByZWdy ZXNzX3RibHNwYWNlOyAtLSBmYWlsCitFUlJPUjogIGluY29tcGF0aWJsZSBTRVQgVEFCTEVTUEFD RSBvcHRpb24KK0RFVEFJTDogIFlvdSBjYW4gb25seSB1c2UgU0VUIFRBQkxFU1BBQ0Ugd2l0aCBS RUlOREVYIHsgSU5ERVggfCBUQUJMRSB9LgorLS0gY2hlY2sgdGhhdCBhbGwgcmVsYXRpb25zIG1v dmVkIHRvIG5ldyB0YWJsZXNwYWNlCitTRUxFQ1QgcmVsbmFtZSBGUk9NIHBnX2NsYXNzCitXSEVS RSByZWx0YWJsZXNwYWNlPShTRUxFQ1Qgb2lkIEZST00gcGdfdGFibGVzcGFjZSBXSEVSRSBzcGNu YW1lPSdyZWdyZXNzX3RibHNwYWNlJykKK0FORCByZWxuYW1lIElOICgncmVncmVzc190YmxzcGFj ZV90ZXN0X3RibF9pZHgnKTsKKyAgICAgICAgICAgIHJlbG5hbWUgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyByZWdyZXNzX3RibHNwYWNlX3Rlc3RfdGJsX2lk eAorKDEgcm93KQorCistLSBtb3ZlIGJhY2sgdG8gcGdfZGVmYXVsdCB0YWJsZXNwYWNlCitSRUlO REVYIFRBQkxFIENPTkNVUlJFTlRMWSByZWdyZXNzX3RibHNwYWNlX3Rlc3RfdGJsIFNFVCBUQUJM RVNQQUNFIHBnX2RlZmF1bHQ7IC0tIG9rCistLSBjaGVjayB0aGF0IGFsbCByZWxhdGlvbnMgbW92 ZWQgYmFjayB0byBwZ19kZWZhdWx0CitTRUxFQ1QgcmVsbmFtZSBGUk9NIHBnX2NsYXNzCitXSEVS RSByZWx0YWJsZXNwYWNlPShTRUxFQ1Qgb2lkIEZST00gcGdfdGFibGVzcGFjZSBXSEVSRSBzcGNu YW1lPSdyZWdyZXNzX3RibHNwYWNlJykKK0FORCByZWxuYW1lIElOICgncmVncmVzc190YmxzcGFj ZV90ZXN0X3RibF9pZHgnKTsKKyByZWxuYW1lIAorLS0tLS0tLS0tCisoMCByb3dzKQorCiAtLSBj cmVhdGUgYSBzY2hlbWEgd2UgY2FuIHVzZQogQ1JFQVRFIFNDSEVNQSB0ZXN0c2NoZW1hOwogLS0g dHJ5IGEgdGFibGUKQEAgLTczNiw2ICs3NzUsOCBAQCBBTFRFUiBUQUJMRSBBTEwgSU4gVEFCTEVT UEFDRSByZWdyZXNzX3RibHNwYWNlX3JlbmFtZWQgU0VUIFRBQkxFU1BBQ0UgcGdfZGVmYXVsdAog Tk9USUNFOiAgbm8gbWF0Y2hpbmcgcmVsYXRpb25zIGluIHRhYmxlc3BhY2UgInJlZ3Jlc3NfdGJs c3BhY2VfcmVuYW1lZCIgZm91bmQKIC0tIFNob3VsZCBzdWNjZWVkCiBEUk9QIFRBQkxFU1BBQ0Ug cmVncmVzc190YmxzcGFjZV9yZW5hbWVkOworRFJPUCBJTkRFWCByZWdyZXNzX3RibHNwYWNlX3Rl c3RfdGJsX2lkeDsKK0RST1AgVEFCTEUgcmVncmVzc190YmxzcGFjZV90ZXN0X3RibDsKIERST1Ag U0NIRU1BIHRlc3RzY2hlbWEgQ0FTQ0FERTsKIE5PVElDRTogIGRyb3AgY2FzY2FkZXMgdG8gNiBv dGhlciBvYmplY3RzCiBERVRBSUw6ICBkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHRlc3RzY2hlbWEu Zm9vCgpiYXNlLWNvbW1pdDogMTM3YjAzYjg2MmMyMWI5MGE4NjczMjEyMGQwYzk4NDgwZGFmMjJk ZQotLSAKMi4xOS4xCgo= --=_5977d13dfc90e71a91e3ede400751548--