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 1s0txp-0082lA-Lg for pgsql-hackers@arkaria.postgresql.org; Sun, 28 Apr 2024 02:08:26 +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 1s0twn-00Bd0Z-Pa for pgsql-hackers@arkaria.postgresql.org; Sun, 28 Apr 2024 02:07:22 +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 1s0twm-00Bd0Q-My for pgsql-hackers@lists.postgresql.org; Sun, 28 Apr 2024 02:07:22 +0000 Received: from m16.mail.163.com ([220.197.31.2]) by makus.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1s0twX-000OD1-S4 for pgsql-hackers@lists.postgresql.org; Sun, 28 Apr 2024 02:07:18 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=163.com; s=s110527; h=From:Subject:Date:Message-ID:MIME-Version: Content-Type; bh=7QcBBIVEr17rVUhSvjO1gezFyDYUv0TxkuFT6eWNYz4=; b=RKNd6P+H5lXfQE2bwmNHcZqtBRtGQQmv1j60NLJhP2kWtOyFntDP52IBfLaY7o nvL2o1j+83hcw18j8oUaVIwHK4KalpjVNq8qTUyKO0whXICZI6m1niZNgFflSqu2 IrcLrbJ5U+CUe/RroMIv0+kgIwX6HUqZjPtFTvGcpm7bs= Received: from 8235eee8a2a0 (unknown [140.205.118.222]) by gzga-smtp-mta-g3-4 (Coremail) with SMTP id _____wDnL_svry1mIKyHCg--.5875S3; Sun, 28 Apr 2024 10:06:40 +0800 (CST) References: <2ed75657-e084-9539-c6de-597e5675014c@enterprisedb.com> <20211122012315.GH17618@telsasoft.com> <0213d237-efd5-8e7e-fa29-3f36e6e26023@enterprisedb.com> <1ea3bf2b-57f9-e632-251a-e718623d7a72@enterprisedb.com> <20220104235550.dgr4rz6zkjx2rykz@alap3.anarazel.de> <20220119101809.wzrjvh4jsnoakgny@jrouhaud> <20220302173821.GG15744@telsasoft.com> <20220302173943.GA28810@telsasoft.com> <87cyr89nk5.fsf@163.com> <2a9604a5-520d-48ee-b3c8-5f3342b607d3@enterprisedb.com> <87frw3cixj.fsf@163.com> User-agent: mu4e 1.10.7; emacs 29.1 From: Andy Fan To: Andy Fan Cc: Tomas Vondra , Justin Pryzby , Julien Rouhaud , Andres Freund , pgsql-hackers@postgresql.org, pgsql-hackers@lists.postgresql.org Subject: Re: using extended statistics to improve join estimates Date: Sun, 28 Apr 2024 09:43:42 +0800 In-reply-to: <87frw3cixj.fsf@163.com> Message-ID: <87pluajl5c.fsf@163.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-CM-TRANSID:_____wDnL_svry1mIKyHCg--.5875S3 X-Coremail-Antispam: 1Uf129KBjvdXoW7Gw1fKry3CFW7uFy5ur43GFg_yoWDWwcE9r 4Fvr1kJa1fJa47Krs7tF4kZrZ5Z34DXa45A340gw1xt34qvF4UGFsrGFs3ZF13Ga92gry5 Wrn8u3WxKrZF9jkaLaAFLSUrUUUUjb8apTn2vfkv8UJUUUU8Yxn0WfASr-VFAUDa7-sFnT 9fnUUvcSsGvfC2KfnxnUUI43ZEXa7sRigAwUUUUUU== X-Originating-IP: [140.205.118.222] X-CM-SenderInfo: x2klx3xlid0iqsrtqiywtou0bp/xtbBZxLOU2V4G258wgAAs+ List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=-=-= Content-Type: text/plain Hello Tomas! >>> At for the code level, I reviewed them in the top-down manner and almost >>> 40% completed. Here are some findings just FYI. For efficiency purpose, >>> I provide each feedback with a individual commit, after all I want to >>> make sure my comment is practical and coding and testing is a good way >>> to archive that. I tried to make each of them as small as possible so >>> that you can reject or accept them convinently. >>> >>> 0001 is your patch, I just rebase them against the current master. 0006 >>> is not much relevant with current patch, and I think it can be committed >>> individually if you are OK with that. >>> >>> Hope this kind of review is helpful. >>> >> >> Cool! There's obviously no chance to get this into v18, and I have stuff >> to do in this CF. But I'll take a look after that. > > Good to know that. I will continue my work before that. I have completed my code level review and modification. These individual commits and message probably be helpful for discussion. -- Best Regards Andy Fan --=-=-= Content-Type: application/x-tar Content-Disposition: attachment; filename=ext_stats_on_join.tar Content-Transfer-Encoding: base64 djEtMDAwMS1Fc3RpbWF0ZS1qb2lucy11c2luZy1leHRlbmRlZC1zdGF0aXN0aWNzLnBhdGNoAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDA2NDQAMDAwMTc1 MAAwMDAxNzUwADAwMDAwMjA3MTM1ADE0NjEzMzI2NTc1ADAyMzQ1NwAgMAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAHlpemhpLmZ6aAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAeWl6aGkuZnpoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABG cm9tIDIwZDk1MjRhMmUzMzUwNWQxYmQwZDg1MWEzMTA1OGRiZWU2MDA1YzEgTW9uIFNlcCAxNyAw MDowMDowMCAyMDAxCkZyb206IFRvbWFzIFZvbmRyYSA8dG9tYXMudm9uZHJhQHBvc3RncmVzcWwu b3JnPgpEYXRlOiBNb24sIDEzIERlYyAyMDIxIDE0OjA1OjE3ICswMTAwClN1YmplY3Q6IFtQQVRD SCB2MSAwMS8yMl0gRXN0aW1hdGUgam9pbnMgdXNpbmcgZXh0ZW5kZWQgc3RhdGlzdGljcwoKVXNl IGV4dGVuZGVkIHN0YXRpc3RpY3MgKE1DVikgdG8gaW1wcm92ZSBqb2luIGVzdGltYXRlcy4gSW4g Z2VuZXJhbCB0aGlzCmlzIHNpbWlsYXIgdG8gaG93IHdlIHVzZSByZWd1bGFyIHN0YXRpc3RpY3Mg LSB3ZSBzZWFyY2ggZm9yIGV4dGVuZGVkCnN0YXRpc3RpY3MgKHdpdGggTUNWKSBjb3ZlcmluZyBh bGwgam9pbiBjbGF1c2VzLCBhbmQgaWYgd2UgZmluZCBzdWNoIE1DVgpvbiBib3RoIHNpZGVzIG9m IHRoZSBqb2luLCB3ZSBjb21iaW5lIHRob3NlIHR3byBNQ1ZzLgoKRXh0ZW5kZWQgc3RhdGlzdGlj cyBhbGxvdyBhIGNvdXBsZSBhZGRpdGlvbmFsIGltcHJvdmVtZW50cyAtIGUuZy4gaWYKdGhlcmUg YXJlIGJhc2VyZWwgY29uZGl0aW9ucywgd2UgY2FuIHVzZSB0aGVtIHRvIHJlc3RyaWN0IHRoZSBw YXJ0IG9mCnRoZSBNQ1ZzIGNvbWJpbmVkLiBUaGlzIG1lYW5zIHdlJ3JlIGJ1aWxkaW5nIGNvbmRp dGlvbmFsIHByb2JhYmlsaXR5CmRpc3RyaWJ1dGlvbiBhbmQgY2FsY3VsYXRpbmcgY29uZGl0aW9u YWwgcHJvYmFiaWxpdHkKCiAgICBQKGpvaW4gY2xhdXNlcyB8IGJhc2VyZWwgY29uZGl0aW9ucykK Cmluc3RlYWQgb2YganVzdCBQKGpvaW4gY2xhdXNlcykuCgpUaGUgcGF0Y2ggYWxzbyBhbGxvd3Mg Y29tYmluaW5nIHJlZ3VsYXIgYW5kIGV4dGVuZGVkIE1DViAtIHdlIGRvbid0IG5lZWQKZXh0ZW5k ZWQgTUNWcyBvbiBib3RoIHNpZGVzLiBUaGlzIGhlbHBzIHdoZW4gb25lIG9mIHRoZSB0YWJsZXMg ZG9lcyBub3QKaGF2ZSBleHRlbmRlZCBzdGF0aXN0aWNzIChlLmcuIGJlY2F1c2UgdGhlcmUgYXJl IG5vIGNvcnJlbGF0aW9ucykuCi0tLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY2xhdXNl c2VsLmMgICAgICAgIHwgIDYzICstCiBzcmMvYmFja2VuZC9zdGF0aXN0aWNzL2V4dGVuZGVkX3N0 YXRzLmMgICAgICAgfCA4MDUgKysrKysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9zdGF0aXN0 aWNzL21jdi5jICAgICAgICAgICAgICAgICAgfCA3NTggKysrKysrKysrKysrKysrKysKIC4uLi9z dGF0aXN0aWNzL2V4dGVuZGVkX3N0YXRzX2ludGVybmFsLmggICAgICB8ICAyMCArCiBzcmMvaW5j bHVkZS9zdGF0aXN0aWNzL3N0YXRpc3RpY3MuaCAgICAgICAgICAgfCAgMTIgKwogc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9zdGF0c19leHQub3V0ICAgICAgIHwgMTY3ICsrKysKIHNyYy90ZXN0 L3JlZ3Jlc3Mvc3FsL3N0YXRzX2V4dC5zcWwgICAgICAgICAgICB8ICA2NiArKwogNyBmaWxlcyBj aGFuZ2VkLCAxODkwIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jbGF1c2VzZWwuYyBiL3NyYy9iYWNrZW5kL29wdGlt aXplci9wYXRoL2NsYXVzZXNlbC5jCmluZGV4IDBhYjAyMWMxZTguLmJlZGY3NmVkYWUgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2NsYXVzZXNlbC5jCisrKyBiL3NyYy9i YWNrZW5kL29wdGltaXplci9wYXRoL2NsYXVzZXNlbC5jCkBAIC00OCw2ICs0OCw5IEBAIHN0YXRp YyBTZWxlY3Rpdml0eSBjbGF1c2VsaXN0X3NlbGVjdGl2aXR5X29yKFBsYW5uZXJJbmZvICpyb290 LAogCQkJCQkJCQkJCQkgSm9pblR5cGUgam9pbnR5cGUsCiAJCQkJCQkJCQkJCSBTcGVjaWFsSm9p bkluZm8gKnNqaW5mbywKIAkJCQkJCQkJCQkJIGJvb2wgdXNlX2V4dGVuZGVkX3N0YXRzKTsKK3N0 YXRpYyBpbmxpbmUgYm9vbCB0cmVhdF9hc19qb2luX2NsYXVzZShQbGFubmVySW5mbyAqcm9vdCwK KwkJCQkJCQkJCQlOb2RlICpjbGF1c2UsIFJlc3RyaWN0SW5mbyAqcmluZm8sCisJCQkJCQkJCQkJ aW50IHZhclJlbGlkLCBTcGVjaWFsSm9pbkluZm8gKnNqaW5mbyk7CiAKIC8qKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqCiAgKgkJUk9VVElORVMgVE8gQ09NUFVURSBTRUxFQ1RJVklUSUVTCkBAIC0xMjcsMTIg KzEzMCw1MyBAQCBjbGF1c2VsaXN0X3NlbGVjdGl2aXR5X2V4dChQbGFubmVySW5mbyAqcm9vdCwK IAlSYW5nZVF1ZXJ5Q2xhdXNlICpycWxpc3QgPSBOVUxMOwogCUxpc3RDZWxsICAgKmw7CiAJaW50 CQkJbGlzdGlkeDsKKwlib29sCQlzaW5nbGVfY2xhdXNlX29wdGltaXphdGlvbiA9IHRydWU7CisK KwkvKgorCSAqIFRoZSBvcHRpbWl6YXRpb24gb2Ygc2tpcHBpbmcgdG8gY2xhdXNlX3NlbGVjdGl2 aXR5X2V4dCBmb3Igc2luZ2xlCisJICogY2xhdXNlcyBtZWFucyB3ZSBjYW4ndCBpbXByb3ZlIGpv aW4gZXN0aW1hdGVzIHdpdGggYSBzaW5nbGUgam9pbgorCSAqIGNsYXVzZSBidXQgYWRkaXRpb25h bCBiYXNlcmVsIHJlc3RyaWN0aW9ucy4gU28gd2UgZGlzYWJsZSBpdCB3aGVuCisJICogZXN0aW1h dGluZyBqb2lucy4KKwkgKgorCSAqIFhYWCBOb3Qgc3VyZSBpZiB0aGlzIGlzIHRoZSByaWdodCB3 YXkgdG8gZG8gaXQsIGJ1dCBtb3JlIGVsYWJvcmF0ZQorCSAqIGNoZWNrcyB3b3VsZCBtb3N0bHkg bmVnYXRlIHRoZSB3aG9sZSBwb2ludCBvZiB0aGUgb3B0aW1pemF0aW9uLgorCSAqIFRoZSAoVmFy IG9wIFZhcikgcGF0Y2ggaGFzIHRoZSBzYW1lIGlzc3VlLgorCSAqCisJICogWFhYIEFuIGFsdGVy bmF0aXZlIG1pZ2h0IGJlIG1ha2luZyBjbGF1c2Vfc2VsZWN0aXZpdHlfZXh0IHNtYXJ0ZXIKKwkg KiBhbmQgbWFrZSBpdCB1c2UgdGhlIGpvaW4gZXh0ZW5kZWQgc3RhdHMgdGhlcmUuIEJ1dCB0aGF0 IHNlZW1zIGtpbmRhCisJICogYWdhaW5zdCB0aGUgd2hvbGUgcG9pbnQgb2YgdGhlIG9wdGltaXph dGlvbiAoc2tpcHBpbmcgZXhwZW5zaXZlCisJICogc3R1ZmYpIGFuZCBpdCdzIG1ha2luZyBvdGhl ciBwYXJ0cyBtb3JlIGNvbXBsZXguCisJICoKKwkgKiBYWFggTWF5YmUgdGhpcyBzaG91bGQgY2hl Y2sgaWYgdGhlcmUgYXJlIGF0IGxlYXN0IHNvbWUgcmVzdHJpY3Rpb25zCisJICogb24gc29tZSBi YXNlIHJlbGF0aW9ucywgd2hpY2ggc2VlbXMgaW1wb3J0YW50LiBCdXQgdGhlbiBhZ2FpbiwgdGhh dAorCSAqIHNlZW1zIHRvIGdvIGFnYWluc3QgdGhlIGlkZWEgb2YgdGhpcyBjaGVjayB0byBiZSBj aGVhcC4gTW9yZW92ZXIsIGl0CisJICogd29uJ3Qgd29yayBmb3IgT1IgY2xhdXNlcywgd2hpY2gg bWF5IGhhdmUgbXVsdGlwbGUgcGFydHMgYnV0IHdlIHN0aWxsCisJICogc2VlIHRoZW0gYXMgYSBz aW5nbGUgQm9vbEV4cHIgY2xhdXNlIChpdCBkb2Vzbid0IHdvcmsgbGF0ZXIsIHRob3VnaCkuCisJ ICovCisJaWYgKGxpc3RfbGVuZ3RoKGNsYXVzZXMpID09IDEpCisJeworCQlOb2RlICpjbGF1c2Ug PSBsaW5pdGlhbChjbGF1c2VzKTsKKwkJUmVzdHJpY3RJbmZvICpyaW5mbyA9IE5VTEw7CisKKwkJ aWYgKElzQShjbGF1c2UsIFJlc3RyaWN0SW5mbykpCisJCXsKKwkJCXJpbmZvID0gKFJlc3RyaWN0 SW5mbyAqKSBjbGF1c2U7CisJCQljbGF1c2UgPSAoTm9kZSAqKSByaW5mby0+Y2xhdXNlOworCQl9 CisKKwkJc2luZ2xlX2NsYXVzZV9vcHRpbWl6YXRpb24KKwkJCT0gIXRyZWF0X2FzX2pvaW5fY2xh dXNlKHJvb3QsIGNsYXVzZSwgcmluZm8sIHZhclJlbGlkLCBzamluZm8pOworCX0KIAogCS8qCiAJ ICogSWYgdGhlcmUncyBleGFjdGx5IG9uZSBjbGF1c2UsIGp1c3QgZ28gZGlyZWN0bHkgdG8KIAkg KiBjbGF1c2Vfc2VsZWN0aXZpdHlfZXh0KCkuIE5vbmUgb2Ygd2hhdCB3ZSBtaWdodCBkbyBiZWxv dyBpcyByZWxldmFudC4KKwkgKgorCSAqIFhYWCBUaGlzIG1lYW5zIHdlIHdvbid0IHRyeSB1c2lu ZyBleHRlbmRlZCBzdGF0cyBvbiBPUi1jbGF1c2VzICh3aGljaAorCSAqIGFyZSBhIHNpbmdsZSBC b29sRXhwciBjbGF1c2UgYXQgdGhpcyBwb2ludCksIGFsdGhvdWdoIHdlJ2xsIGRvIHRoYXQKKwkg KiBsYXRlciAob25jZSB3ZSBsb29rIGF0IHRoZSBhcmd1bWVudHMpLgogCSAqLwotCWlmIChsaXN0 X2xlbmd0aChjbGF1c2VzKSA9PSAxKQorCWlmICgobGlzdF9sZW5ndGgoY2xhdXNlcykgPT0gMSkg JiYgc2luZ2xlX2NsYXVzZV9vcHRpbWl6YXRpb24pCiAJCXJldHVybiBjbGF1c2Vfc2VsZWN0aXZp dHlfZXh0KHJvb3QsIChOb2RlICopIGxpbml0aWFsKGNsYXVzZXMpLAogCQkJCQkJCQkJICB2YXJS ZWxpZCwgam9pbnR5cGUsIHNqaW5mbywKIAkJCQkJCQkJCSAgdXNlX2V4dGVuZGVkX3N0YXRzKTsK QEAgLTE1NSw2ICsxOTksMjMgQEAgY2xhdXNlbGlzdF9zZWxlY3Rpdml0eV9leHQoUGxhbm5lcklu Zm8gKnJvb3QsCiAJCQkJCQkJCQkJCSZlc3RpbWF0ZWRjbGF1c2VzLCBmYWxzZSk7CiAJfQogCisJ LyoKKwkgKiBUcnkgYXBwbHlpbmcgZXh0ZW5kZWQgc3RhdGlzdGljcyB0byBqb2lucy4gVGhlcmUn cyBub3QgbXVjaCB3ZSBjYW4KKwkgKiBkbyB0byBkZXRlY3Qgd2hlbiB0aGlzIG1ha2VzIHNlbnNl LCBidXQgd2UgY2FuIGNoZWNrIHRoYXQgdGhlcmUgYXJlCisJICogam9pbiBjbGF1c2VzLCBhbmQg dGhhdCBhdCBsZWFzdCBzb21lIG9mIHRoZSByZWxzIGhhdmUgc3RhdHMuCisJICoKKwkgKiBYWFgg SXNuJ3QgdGhpcyBtdXR1YWxseSBleGNsdXNpdmUgd2l0aCB0aGUgcHJlY2VkaW5nIGJsb2NrIHdo aWNoCisJICogY2FsY3VsYXRlcyBlc3RpbWF0ZXMgZm9yIGEgc2luZ2xlIHJlbGF0aW9uPworCSAq LworCWlmICh1c2VfZXh0ZW5kZWRfc3RhdHMgJiYKKwkJc3RhdGV4dF90cnlfam9pbl9lc3RpbWF0 ZXMocm9vdCwgY2xhdXNlcywgdmFyUmVsaWQsIGpvaW50eXBlLCBzamluZm8sCisJCQkJCQkgZXN0 aW1hdGVkY2xhdXNlcykpCisJeworCQlzMSAqPSBzdGF0ZXh0X2NsYXVzZWxpc3Rfam9pbl9zZWxl Y3Rpdml0eShyb290LCBjbGF1c2VzLCB2YXJSZWxpZCwKKwkJCQkJCQkJCQkJCSAgam9pbnR5cGUs IHNqaW5mbywKKwkJCQkJCQkJCQkJCSAgJmVzdGltYXRlZGNsYXVzZXMpOworCX0KKwogCS8qCiAJ ICogQXBwbHkgbm9ybWFsIHNlbGVjdGl2aXR5IGVzdGltYXRlcyBmb3IgcmVtYWluaW5nIGNsYXVz ZXMuIFdlJ2xsIGJlCiAJICogY2FyZWZ1bCB0byBza2lwIGFueSBjbGF1c2VzIHdoaWNoIHdlcmUg YWxyZWFkeSBlc3RpbWF0ZWQgYWJvdmUuCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdGF0aXN0 aWNzL2V4dGVuZGVkX3N0YXRzLmMgYi9zcmMvYmFja2VuZC9zdGF0aXN0aWNzL2V4dGVuZGVkX3N0 YXRzLmMKaW5kZXggOTlmZGYyMDhkYi4uODA4NzJjYzdkYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvc3RhdGlzdGljcy9leHRlbmRlZF9zdGF0cy5jCisrKyBiL3NyYy9iYWNrZW5kL3N0YXRpc3Rp Y3MvZXh0ZW5kZWRfc3RhdHMuYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIm1pc2NhZG1p bi5oIgogI2luY2x1ZGUgIm5vZGVzL25vZGVGdW5jcy5oIgogI2luY2x1ZGUgIm9wdGltaXplci9v cHRpbWl6ZXIuaCIKKyNpbmNsdWRlICJvcHRpbWl6ZXIvcGF0aG5vZGUuaCIKICNpbmNsdWRlICJw YXJzZXIvcGFyc2V0cmVlLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCiAjaW5jbHVkZSAicG9zdG1h c3Rlci9hdXRvdmFjdXVtLmgiCkBAIC0xMDAsNiArMTAxLDggQEAgc3RhdGljIFN0YXRzQnVpbGRE YXRhICptYWtlX2J1aWxkX2RhdGEoUmVsYXRpb24gcmVsLCBTdGF0RXh0RW50cnkgKnN0YXQsCiAJ CQkJCQkJCQkgICBpbnQgbnVtcm93cywgSGVhcFR1cGxlICpyb3dzLAogCQkJCQkJCQkJICAgVmFj QXR0clN0YXRzICoqc3RhdHMsIGludCBzdGF0dGFyZ2V0KTsKIAorc3RhdGljIGJvb2wgc3RhdF9j b3ZlcnNfZXhwcmVzc2lvbnMoU3RhdGlzdGljRXh0SW5mbyAqc3RhdCwgTGlzdCAqZXhwcnMsCisJ CQkJCQkJCQlCaXRtYXBzZXQgKipleHByX2lkeHMpOwogCiAvKgogICogQ29tcHV0ZSByZXF1ZXN0 ZWQgZXh0ZW5kZWQgc3RhdHMsIHVzaW5nIHRoZSByb3dzIHNhbXBsZWQgZm9yIHRoZSBwbGFpbgpA QCAtMjYzNSwzICsyNjM4LDgwNSBAQCBtYWtlX2J1aWxkX2RhdGEoUmVsYXRpb24gcmVsLCBTdGF0 RXh0RW50cnkgKnN0YXQsIGludCBudW1yb3dzLCBIZWFwVHVwbGUgKnJvd3MsCiAKIAlyZXR1cm4g cmVzdWx0OwogfQorCisvKgorICogc3RhdGV4dF9maW5kX21hdGNoaW5nX21jdgorICoJCVNlYXJj aCBmb3IgYSBNQ1YgY292ZXJpbmcgYWxsIHRoZSBhdHRyaWJ1dGVzIGFuZCBleHByZXNzaW9ucy4K KyAqCisgKiBXZSBwaWNrIHRoZSBzdGF0aXN0aWNzIHRvIHVzZSBmb3Igam9pbiBlc3RpbWF0aW9u LiBUaGUgc3RhdGlzdGljcyBvYmplY3QgaGFzCisgKiB0byBoYXZlIE1DViwgYW5kIHdlIHJlcXVp cmUgaXQgdG8gbWF0Y2ggYWxsIHRoZSBqb2luIGNvbmRpdGlvbnMsIGJlY2F1c2UgaXQKKyAqIG1h a2VzIHRoZSBlc3RpbWF0aW9uIHNpbXBsZXIuCisgKgorICogSWYgdGhlcmUgYXJlIG11bHRpcGxl IGNhbmRpZGF0ZSBzdGF0aXN0aWNzIG9iamVjdHMgKG1hdGNoaW5nIGFsbCBqb2luIGNsYXVzZXMp LAorICogd2UgcGljayB0aGUgc21hbGxlc3Qgb25lLCBhbmQgd2UgYWxzbyBjb25zaWRlciBhZGRp dGlvbmFsIGNvbmRpdGlvbnMgb24KKyAqIHRoZSBiYXNlIHJlbGF0aW9ucyB0byByZXN0cmljdCB0 aGUgTUNWIGl0ZW1zIHVzZWQgZm9yIGVzdGltYXRpb24gKHVzaW5nCisgKiBjb25kaXRpb25hbCBw cm9iYWJpbGl0eSkuCisgKgorICogWFhYIFRoZSByZXF1aXJlbWVudCB0aGF0IGFsbCB0aGUgYXR0 cmlidXRlcyBuZWVkIHRvIGJlIGNvdmVyZWQgbWlnaHQgYmUKKyAqIHRvbyBzdHJvbmcuIFdlIGNv dWxkIHJlbGF4IHRoaXMgYW5kIGFuZCByZXF1aXJlIGZld2VyIG1hdGNoZXMgKGF0IGxlYXN0IHR3 bywKKyAqIGlmIGNvdW50aW5nIHRoZSBhZGRpdGlvbmFsIGNvbmRpdGlvbnMpLCBhbmQgd2UgbWln aHQgZXZlbiBhcHBseSBtdWx0aXBsZQorICogc3RhdGlzdGljcyBldGMuIEJ1dCB0aGF0IHdvdWxk IHJlcXVpcmUgbWF0Y2hpbmcgc3RhdGlzdGljcyBvbiBib3RoIHNpZGVzIG9mCisgKiB0aGUgam9p biwgd2hpbGUgbm93IHdlIHNpbXBseSBrbm93IHRoZSBzdGF0aXN0aWNzIG1hdGNoLiBXZSBkb24n dCByZWFsbHkKKyAqIGV4cGVjdCBtYW55IGNhbmRpZGF0ZSBNQ1ZzLCBzbyB0aGlzIHNpbXBsZSBh cHByb2FjaCBzZWVtcyBzdWZmaWNpZW50LiBBbmQKKyAqIHRoZSBqb2lucyB1c3VhbGx5IHVzZSBv bmx5IG9uZSBvciB0d28gY29sdW1ucywgc28gdGhlcmUncyBub3QgbXVjaCByb29tCisgKiBmb3Ig YXBwbHlpbmcgbXVsdGlwbGUgc3RhdGlzdGljcyBhbnl3YXkuCisgKi8KK1N0YXRpc3RpY0V4dElu Zm8gKgorc3RhdGV4dF9maW5kX21hdGNoaW5nX21jdihQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0 SW5mbyAqcmVsLAorCQkJCQkJICBCaXRtYXBzZXQgKmF0dG51bXMsIExpc3QgKmV4cHJzKQorewor CUxpc3RDZWxsICAgKmw7CisJU3RhdGlzdGljRXh0SW5mbyAqbWN2ID0gTlVMTDsKKwlMaXN0ICpz dGF0cyA9IHJlbC0+c3RhdGxpc3Q7CisKKwlmb3JlYWNoKGwsIHN0YXRzKQorCXsKKwkJU3RhdGlz dGljRXh0SW5mbyAqc3RhdCA9IChTdGF0aXN0aWNFeHRJbmZvICopIGxmaXJzdChsKTsKKwkJTGlz dCAqY29uZGl0aW9uczEgPSBOSUwsCisJCQkgKmNvbmRpdGlvbnMyID0gTklMOworCisJCS8qIFdl IG9ubHkgY2FyZSBhYm91dCBNQ1Ygc3RhdGlzdGljcyBoZXJlLiAqLworCQlpZiAoc3RhdC0+a2lu ZCAhPSBTVEFUU19FWFRfTUNWKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogSWdub3JlIE1D VnMgbm90IGNvdmVyaW5nIGFsbCB0aGUgYXR0cmlidXRlcy9leHByZXNzaW9ucy4KKwkJICoKKwkJ ICogWFhYIE1heWJlIHdlIHNob3VsZG4ndCBiZSBzbyBzdHJpY3QgYW5kIGNvbnNpZGVyIG9ubHkg cGFydGlhbAorCQkgKiBtYXRjaGVzIGZvciBqb2luIGNsYXVzZXMgdG9vPworCQkgKi8KKwkJaWYg KCFibXNfaXNfc3Vic2V0KGF0dG51bXMsIHN0YXQtPmtleXMpIHx8CisJCQkhc3RhdF9jb3ZlcnNf ZXhwcmVzc2lvbnMoc3RhdCwgZXhwcnMsIE5VTEwpKQorCQkJY29udGludWU7CisKKwkJLyogSWYg dGhlcmUncyBubyBtYXRjaGluZyBNQ1YgeWV0LCBrZWVwIHRoaXMgb25lLiAqLworCQlpZiAoIW1j dikKKwkJeworCQkJbWN2ID0gc3RhdDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICog T0ssIHdlIGhhdmUgdHdvIGNhbmRpZGF0ZSBzdGF0aXN0aWNzIG9iamVjdHMgYW5kIHdlIG5lZWQg dG8gZGVjaWRlCisJCSAqIHdoaWNoIG9uZSB0byBrZWVwLiBXZSdsbCB1c2UgdHdvIHNpbXBsZSBo ZXVyaXN0aWNzOgorCQkgKgorCQkgKiAoYSkgV2UgcHJlZmVyIHNtYWxsZXIgc3RhdGlzdGljcyAo ZmV3ZXIgY29sdW1ucyksIG9uIHRoZSBhc3N1bXB0aW9uCisJCSAqIHRoYXQgaXQgcmVwcmVzZW50 cyBhIGxhcmdlciBmcmFjdGlvbiBvZiB0aGUgZGF0YSAoZHVlIHRvIGhhdmluZyBmZXdlcgorCQkg KiBjb21iaW5hdGlvbnMgd2l0aCBoaWdoZXIgY291bnRzKS4KKwkJICoKKwkJICogKGIpIElmIHRo ZSBzdGF0aXN0aWNzIG9iamVjdCBjb3ZlcnMgc29tZSBhZGRpdGlvbmFsIGNvbmRpdGlvbnMgZm9y IHRoZSByZWxzLAorCQkgKiB0aGF0IG1heSBoZWxwIHdpdGggY29uc2lkZXJpbmcgYWRkaXRpb25h bCBkZXBlbmRlbmNpZXMgYmV0d2VlbiB0aGUKKwkJICogdGFibGVzLgorCQkgKgorCQkgKiBPZiBj b3Vyc2UsIHRob3NlIHR3byBoZXVyaXN0aWN0IGFyZSBzb21ld2hhdCBjb250cmFkaWN0b3J5IC0g c21hbGxlcgorCQkgKiBzdGF0cyBhcmUgbGVzcyBsaWtlbHkgdG8gY292ZXIgYXMgbWFueSBjb25k aXRpb25zIGFzIGEgbGFyZ2VyIG9uZS4gV2UKKwkJICogY29uc2lkZXIgdGhlIGFkZGl0aW9uYWwg Y29uZGl0aW9ucyBmaXJzdCAtIGlmIHNvbWVvbmUgY3JlYXRlZCBzdWNoCisJCSAqIHN0YXRpc3Rp Y3MsIHRoZXJlIHByb2JhYmx5IGlzIGEgZGVwZW5kZW5jeSB3b3J0aCBjb25zaWRlcmluZy4KKwkJ ICoKKwkJICogV2hlbiBpbnNwZWN0aW5nIHRoZSByZXN0cmljdGlvbnMsIHdlIG5lZWQgdG8gYmUg Y2FyZWZ1bCAtIHdlIGRvbid0CisJCSAqIGtub3cgd2hpY2ggb2YgdGhlbSBhcmUgY29tcGF0aWJs ZSB3aXRoIGV4dGVuZGVkIHN0YXRzLCBzbyB3ZSBoYXZlIHRvCisJCSAqIHJ1biB0aGVtIHRocm91 Z2ggc3RhdGV4dF9pc19jb21wYXRpYmxlX2NsYXVzZSBmaXJzdCBhbmQgdGhlbiBtYXRjaAorCQkg KiB0aGVtIHRvIHRoZSBzdGF0aXN0aWNzLgorCQkgKgorCQkgKiBYWFggTWF5YmUgd2Ugc2hvdWxk bid0IHBpY2sgc3RhdGlzdGljcyB0aGF0IGNvdmVycyBqdXN0IGEgc2luZ2xlIGpvaW4KKwkJICog Y2xhdXNlLCB3aXRob3V0IGFueSBhZGRpdGlvbmFsIGNvbmRpdGlvbnMuIEluIHN1Y2ggY2FzZSB3 ZSBjb3VsZCBqdXN0CisJCSAqIGFzIHdlbGwgcGljayByZWd1bGFyIHN0YXRpc3RpY3MgZm9yIHRo ZSBjb2x1bW4vZXhwcmVzc2lvbiwgYnV0IGl0J3MKKwkJICogbm90IGNsZWFyIGlmIHRoYXQgYWN0 dWFsbHkgZXhpc3RzIChzbyB3ZSBtaWdodCByZWplY3QgdGhlIHN0YXRzIGhlcmUKKwkJICogYW5k IHRoZW4gZmFpbCB0byBmaW5kIHNvbWV0aGluZyBzaW1wbGVyL2JldHRlcikuCisJCSAqLworCQlj b25kaXRpb25zMSA9IHN0YXRleHRfZGV0ZXJtaW5lX2pvaW5fcmVzdHJpY3Rpb25zKHJvb3QsIHJl bCwgc3RhdCk7CisJCWNvbmRpdGlvbnMyID0gc3RhdGV4dF9kZXRlcm1pbmVfam9pbl9yZXN0cmlj dGlvbnMocm9vdCwgcmVsLCBtY3YpOworCisJCS8qIGlmIHRoZSBuZXcgc3RhdGlzdGljcyBvYmpl Y3QgY292ZXJzIG1vcmUgY29uZGl0aW9ucywgdXNlIGl0ICovCisJCWlmIChsaXN0X2xlbmd0aChj b25kaXRpb25zMSkgPiBsaXN0X2xlbmd0aChjb25kaXRpb25zMikpCisJCXsKKwkJCW1jdiA9IHN0 YXQ7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIFRoZSBzdGF0aXN0aWNzIHNlZW0gYWJvdXQg ZXF1YWwsIHNvIGp1c3QgdXNlIHRoZSBzbWFsbGVyIG9uZS4gKi8KKwkJaWYgKGJtc19udW1fbWVt YmVycyhtY3YtPmtleXMpICsgbGlzdF9sZW5ndGgobWN2LT5leHBycykgPgorCQkJYm1zX251bV9t ZW1iZXJzKHN0YXQtPmtleXMpICsgbGlzdF9sZW5ndGgoc3RhdC0+ZXhwcnMpKQorCQl7CisJCQlt Y3YgPSBzdGF0OworCQl9CisJfQorCisJcmV0dXJuIG1jdjsKK30KKworLyoKKyAqIHN0YXRleHRf ZGV0ZXJtaW5lX2pvaW5fcmVzdHJpY3Rpb25zCisgKgkJR2V0IHJlc3RyaWN0aW9ucyBvbiBiYXNl IHJlbGF0aW9uLCBjb3ZlcmVkIGJ5IHRoZSBzdGF0aXN0aWNzIG9iamVjdC4KKyAqCisgKiBSZXR1 cm5zIGEgbGlzdCBvZiBiYXNlcmVsIHJlc3RyaWN0aW5mb3MsIGNvbXBhdGlibGUgd2l0aCBleHRl bmRlZCBzdGF0aXN0aWNzCisgKiBhbmQgY292ZXJlZCBieSB0aGUgZXh0ZW5kZWQgc3RhdGlzdGlj cyBvYmplY3QuCisgKgorICogV2hlbiB1c2luZyBleHRlbmRlZCBzdGF0aXN0aWNzIHRvIGVzdGlt YXRlIGpvaW5zLCB3ZSBjYW4gdXNlIGNvbmRpdGlvbnMKKyAqIGZyb20gYmFzZSByZWxhdGlvbnMg dG8gY2FsY3VsYXRlIGNvbmRpdGlvbmFsIHByb2JhYmlsaXR5CisgKgorICogICAgUChqb2luIGNs YXVzZXMgfCBiYXNlcmVsIHJlc3RyaWN0aW9ucykKKyAqCisgKiB3aGljaCBzaG91bGQgYmUgYSBi ZXR0ZXIgZXN0aW1hdGUgdGhhbiBqdXN0IFAoam9pbiBjbGF1c2VzKS4gV2Ugd2FudCB0byBwaWNr CisgKiB0aGUgc3RhdGlzdGljcyBvYmplY3QgY292ZXJpbmcgdGhlIG1vc3Qgc3VjaCBjb25kaXRp b25zLgorICovCitMaXN0ICoKK3N0YXRleHRfZGV0ZXJtaW5lX2pvaW5fcmVzdHJpY3Rpb25zKFBs YW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCisJCQkJCQkJCQlTdGF0aXN0aWNFeHRJ bmZvICppbmZvKQoreworCUxpc3RDZWxsICAgKmxjOworCUxpc3QJICAgKmNvbmRpdGlvbnMgPSBO SUw7CisKKwkvKiBleHRyYWN0IGNvbmRpdGlvbnMgdGhhdCBtYXkgYmUgYXBwbGllZCB0byB0aGUg TUNWIGxpc3QgKi8KKwlmb3JlYWNoIChsYywgcmVsLT5iYXNlcmVzdHJpY3RpbmZvKQorCXsKKwkJ UmVzdHJpY3RJbmZvICpyaW5mbyA9IChSZXN0cmljdEluZm8gKikgbGZpcnN0KGxjKTsKKwkJQml0 bWFwc2V0ICppbmRleGVzID0gTlVMTDsKKwkJQml0bWFwc2V0ICphdHRudW1zID0gTlVMTDsKKwkJ TGlzdCAqZXhwcnMgPSBOSUw7CisKKwkJLyogY2xhdXNlIGhhcyB0byBiZSBzdXBwb3J0ZWQgYnkg TUNWIGluIGdlbmVyYWwgKi8KKwkJaWYgKCFzdGF0ZXh0X2lzX2NvbXBhdGlibGVfY2xhdXNlKHJv b3QsIChOb2RlICopIHJpbmZvLCByZWwtPnJlbGlkLAorCQkJCQkJCQkJCSAgJmF0dG51bXMsICZl eHBycykpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBjbGF1c2UgaXMgY29tcGF0aWJsZSBp biBnZW5lcmFsLCBidXQgaXMgaXQgYWN0dWFsbHkgY292ZXJlZAorCQkgKiBieSB0aGlzIHBhcnRp Y3VsYXIgc3RhdGlzdGljcyBvYmplY3Q/CisJCSAqLworCQlpZiAoIWJtc19pc19zdWJzZXQoYXR0 bnVtcywgaW5mby0+a2V5cykgfHwKKwkJCSFzdGF0X2NvdmVyc19leHByZXNzaW9ucyhpbmZvLCBl eHBycywgJmluZGV4ZXMpKQorCQkJY29udGludWU7CisKKwkJY29uZGl0aW9ucyA9IGxhcHBlbmQo Y29uZGl0aW9ucywgcmluZm8tPmNsYXVzZSk7CisJfQorCisJcmV0dXJuIGNvbmRpdGlvbnM7Cit9 CisKKy8qCisgKiBzdGF0ZXh0X2lzX3N1cHBvcnRlZF9qb2luX2NsYXVzZQorICoJCUNoZWNrIGlm IGEgam9pbiBjbGF1c2UgbWF5IGJlIGVzdGltYXRlZCB1c2luZyBleHRlbmRlZCBzdGF0cy4KKyAq CisgKiBEZXRlcm1pbmVzIGlmIHRoaXMgaXMgYSBqb2luIGNsYXVzZSBvZiB0aGUgZm9ybSAoRXhw ciBvcCBFeHByKSB3aGljaCBtYXkgYmUKKyAqIGVzdGltYXRlZCB1c2luZyBleHRlbmRlZCBzdGF0 aXN0aWNzLiBFYWNoIHNpZGUgbXVzdCByZWZlcmVuY2UganVzdCBhIHNpbmdsZQorICogcmVsYXRp b24gZm9yIG5vdy4KKyAqCisgKiBTaW1pbGFyIHRvIHRyZWF0X2FzX2pvaW5fY2xhdXNlLCBidXQg d2UgcGxhY2UgYWRkaXRpb25hbCByZXN0cmljdGlvbnMKKyAqIG9uIHRoZSBjb25kaXRpb25zLgor ICovCitzdGF0aWMgYm9vbAorc3RhdGV4dF9pc19zdXBwb3J0ZWRfam9pbl9jbGF1c2UoUGxhbm5l ckluZm8gKnJvb3QsIE5vZGUgKmNsYXVzZSwKKwkJCQkJCQkJIGludCB2YXJSZWxpZCwgU3BlY2lh bEpvaW5JbmZvICpzamluZm8pCit7CisJT2lkCW9wcnNlbDsKKwlSZXN0cmljdEluZm8gICAqcmlu Zm87CisJT3BFeHByCQkgICAqb3BjbGF1c2U7CisJTGlzdENlbGwJICAgKmxjOworCisJLyoKKwkg KiBldmFsdWF0aW9uIGFzIGEgcmVzdHJpY3Rpb24gY2xhdXNlLCBlaXRoZXIgYXQgc2NhbiBub2Rl IG9yIGZvcmNlZAorCSAqCisJICogWFhYIFNlZSB0cmVhdF9hc19qb2luX2NsYXVzZS4KKwkgKi8K KwlpZiAoKHZhclJlbGlkICE9IDApIHx8IChzamluZm8gPT0gTlVMTCkpCisJCXJldHVybiBmYWxz ZTsKKworCS8qIFhYWCBDYW4gd2UgcmVseSBvbiBhbHdheXMgZ2V0dGluZyBSZXN0cmljdEluZm8g aGVyZT8gKi8KKwlpZiAoIUlzQShjbGF1c2UsIFJlc3RyaWN0SW5mbykpCisJCXJldHVybiBmYWxz ZTsKKworCS8qIHN0cmlwIHRoZSBSZXN0cmljdEluZm8gKi8KKwlyaW5mbyA9IChSZXN0cmljdElu Zm8gKikgY2xhdXNlOworCWNsYXVzZSA9IChOb2RlICopIHJpbmZvLT5jbGF1c2U7CisKKwkvKiBp cyBpdCByZWZlcmVuY2luZyBtdWx0aXBsZSByZWxhdGlvbnM/ICovCisJaWYgKGJtc19tZW1iZXJz aGlwKHJpbmZvLT5jbGF1c2VfcmVsaWRzKSAhPSBCTVNfTVVMVElQTEUpCisJCXJldHVybiBmYWxz ZTsKKworCS8qIHdlIG9ubHkgc3VwcG9ydCBzaW1wbGUgb3BlcmF0b3IgY2xhdXNlcyBmb3Igbm93 ICovCisJaWYgKCFpc19vcGNsYXVzZShjbGF1c2UpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlvcGNs YXVzZSA9IChPcEV4cHIgKikgY2xhdXNlOworCisJLyogZm9yIG5vdyB3ZSBvbmx5IHN1cHBvcnQg ZXN0aW1hdGluZyBlcXVpam9pbnMgKi8KKwlvcHJzZWwgPSBnZXRfb3Byam9pbihvcGNsYXVzZS0+ b3Bubyk7CisKKwkvKiBoYXMgdG8gYmUgYW4gZXF1YWxpdHkgY29uZGl0aW9uICovCisJaWYgKG9w cnNlbCAhPSBGX0VRSk9JTlNFTCkKKwkJcmV0dXJuIGZhbHNlOworCisJLyoKKwkgKiBNYWtlIHN1 cmUgd2UncmUgbm90IG1peGluZyB2YXJzIGZyb20gbXVsdGlwbGUgcmVsYXRpb25zIG9uIHRoZSBz YW1lCisJICogc2lkZSwgbGlrZQorCSAqCisJICogICAodDEuYSArIHQyLmEpID0gKHQxLmIgKyB0 Mi5iKQorCSAqCisJICogd2hpY2ggaXMgc3RpbGwgdGVjaG5pY2FsbHkgYW4gb3BjbGF1c2UsIGJ1 dCB3ZSBjYW4ndCBtYXRjaCBpdCB0bworCSAqIGV4dGVuZGVkIHN0YXRpc3RpY3MgaW4gYSBzaW1w bGUgd2F5LgorCSAqCisJICogWFhYIFRoaXMgYWxzbyBtZWFucyB3ZSByZXF1aXJlIHJpbmZvLT5j bGF1c2VfcmVsaWRzIHRvIGhhdmUgMiByZWxzLgorCSAqCisJICogWFhYIEFsc28gY2hlY2sgaXQn cyBub3QgZXhwcmVzc2lvbiBvbiBzeXN0ZW0gYXR0cmlidXRlcywgd2hpY2ggd2UKKwkgKiBkb24n dCBhbGxvdyBpbiBleHRlbmRlZCBzdGF0aXN0aWNzLgorCSAqCisJICogWFhYIEFsdGhvdWdoIG1h eWJlIHdlIGNvdWxkIGFsbG93IGNhc2VzIHRoYXQgY29tYmluZSBleHByZXNzaW9ucworCSAqIGZy b20gYm90aCByZWxhdGlvbnMgb24gZWl0aGVyIHNpZGU/IExpa2UgKHQxLmEgKyB0Mi5iID0gdDEu YyAtIHQyLmQpCisJICogb3Igc29tZXRoaW5nIGxpa2UgdGhhdC4gV2UgY291bGQgZG8gImNhcnRl c2lhbiBwcm9kdWN0IiBvZiB0aGUgTUNWCisJICogc3RhdHMgYW5kIHJlc3RyaWN0IGl0IHVzaW5n IHRoaXMgY29uZGl0aW9uLgorCSAqLworCWZvcmVhY2ggKGxjLCBvcGNsYXVzZS0+YXJncykKKwl7 CisJCUJpdG1hcHNldCAqdmFybm9zID0gTlVMTDsKKwkJTm9kZSAqZXhwciA9IChOb2RlICopIGxm aXJzdChsYyk7CisKKwkJdmFybm9zID0gcHVsbF92YXJub3Mocm9vdCwgZXhwcik7CisKKwkJLyoK KwkJICogTm8gYXJndW1lbnQgc2hvdWxkIHJlZmVyZW5jZSBtb3JlIHRoYW4ganVzdCBvbmUgcmVs YXRpb24uCisJCSAqCisJCSAqIFRoaXMgZWZmZWN0aXZlbHkgbWVhbnMgZWFjaCBzaWRlIHJlZmVy ZW5jZXMganVzdCB0d28gcmVsYXRpb25zLgorCQkgKiBJZiB0aGVyZSdzIG5vIHJlbGF0aW9uIG9u IG9uZSBzaWRlLCBpdCdzIGEgQ29uc3QsIGFuZCB0aGUgb3RoZXIKKwkJICogc2lkZSBoYXMgdG8g YmUgZWl0aGVyIENvbnN0IG9yIEV4cHIgd2l0aCBhIHNpbmdsZSByZWwuIEluIHdoaWNoCisJCSAq IGNhc2UgaXQgY2FuJ3QgYmUgYSBqb2luIGNsYXVzZS4KKwkJICovCisJCWlmIChibXNfbnVtX21l bWJlcnModmFybm9zKSA+IDEpCisJCQlyZXR1cm4gZmFsc2U7CisKKwkJLyoKKwkJICogWFhYIE1h eWJlIGNoZWNrIHRoYXQgYm90aCByZWxhdGlvbnMgaGF2ZSBleHRlbmRlZCBzdGF0aXN0aWNzCisJ CSAqIChubyBwb2ludCBpbiBjb25zaWRlcmluZyB0aGUgY2xhdXNlIGFzIHVzZWZ1bCB3aXRob3V0 IGl0KS4gQnV0CisJCSAqIHdlJ2xsIGRvIHRoYXQgY2hlY2sgbGF0ZXIgYW55d2F5LCBzbyBrZWVw IHRoaXMgY2hlYXAuCisJCSAqLworCX0KKworCXJldHVybiB0cnVlOworfQorCisvKgorICogc3Rh dGV4dF90cnlfam9pbl9lc3RpbWF0ZXMKKyAqCQlDaGVja3MgaWYgaXQncyB3b3J0aCBjb25zaWRl cmluZyBleHRlbmRlZCBzdGF0cyBvbiBqb2luIGVzdGltYXRlcy4KKyAqCisgKiBUaGlzIGlzIHN1 cHBvc2VkIHRvIGJlIGEgcXVpY2svY2hlYXAgY2hlY2sgdG8gZGVjaWRlIHdoZXRoZXIgdG8gZXhw ZW5kCisgKiBtb3JlIGVmZm9ydCBvbiBhcHBseWluZyBleHRlbmRlZCBzdGF0aXN0aWNzIHRvIGpv aW4gY2xhdXNlcy4KKyAqLworYm9vbAorc3RhdGV4dF90cnlfam9pbl9lc3RpbWF0ZXMoUGxhbm5l ckluZm8gKnJvb3QsIExpc3QgKmNsYXVzZXMsIGludCB2YXJSZWxpZCwKKwkJCQkJCSAgIEpvaW5U eXBlIGpvaW50eXBlLCBTcGVjaWFsSm9pbkluZm8gKnNqaW5mbywKKwkJCQkJCSAgIEJpdG1hcHNl dCAqZXN0aW1hdGVkY2xhdXNlcykKK3sKKwlpbnQJCQlsaXN0aWR4OworCWludAkJCWs7CisJTGlz dENlbGwgICAqbGM7CisJQml0bWFwc2V0ICAqcmVsaWRzID0gTlVMTDsKKworCS8qCisJICogWFhY IE5vdCBoYXZpbmcgdGhlc2UgdmFsdWVzIG1lYW5zIHRyZWF0X2FzX2pvaW5fY2xhdXNlIHJldHVy bnMgZmFsc2UsCisJICogc28gd2UncmUgbm90IHN1cHBvc2VkIHRvIGhhbmRsZSBqb2luIGNsYXVz ZXMgaGVyZS4gU28ganVzdCBiYWlsIG91dC4KKwkgKi8KKwlpZiAoKHZhclJlbGlkICE9IDApIHx8 IChzamluZm8gPT0gTlVMTCkpCisJCXJldHVybiBmYWxzZTsKKworCS8qCisJICogQ2hlY2sgaWYg dGhlcmUgYXJlIGFueSB1bmVzdGltYXRlZCBqb2luIGNsYXVzZXMsIGNvbGxlY3QgcmVsaWRzLgor CSAqCisJICogWFhYIEN1cnJlbnRseSB0aGlzIG9ubHkgYWxsb3dzIHNpbXBsZSBPcEV4cHIgZXF1 YWxpdHkgY2xhdXNlcyB3aXRoIGVhY2gKKwkgKiBhcmd1bWVudCByZWZlcnJpbmcgdG8gc2luZ2xl IHJlbGF0aW9uLCBBTkQtZWQgdG9nZXRoZXIuIE1heWJlIHdlIGNvdWxkCisJICogcmVsYXggdGhp cyBpbiB0aGUgZnV0dXJlLCBlLmcuIHRvIGFsbG93IG1vcmUgY29tcGxleCAoZGVlcGVyKSBleHBy ZXNzaW9ucworCSAqIGFuZCB0byBhbGxvdyBPUi1lZCBqb2luIGNsYXVzZXMgdG9vLiBBbmQgbWF5 YmUgc3VwcG9ydGluZyBpbmVxdWFsaXRpZXMuCisJICoKKwkgKiBIYW5kbGluZyBtb3JlIGNvbXBs ZXggZXhwcmVzc2lvbnMgc2VlbXMgc2ltcGxlIC0gd2UgYWxyZWFkeSBkbyB0aGF0IGZvcgorCSAq IGJhc2VyZWwgZXN0aW1hdGVzIGJ5IGJ1aWxkaW5nIHRoZSBtYXRjaCBiaXRtYXAgcmVjdXJzaXZl bHksIGFuZCB3ZSBjb3VsZAorCSAqIGRvIHNvbWV0aGluZyBzaW1pbGFyIGZvciBjb21iaW5hdGlv bnMgb2YgTUNWIGl0ZW1zIChhIGJpdCBsaWtlIGJ1aWxkaW5nCisJICogYSBzaW5nbGUgYml0IGlu IHRoZSBtYXRjaCBiaXRtYXApLiBUaGUgY2hhbGxlbmdlIGlzIHdoYXQgdG8gZG8gYWJvdXQgdGhl CisJICogcGFydCBub3QgcmVwcmVzZW50ZWQgYnkgTUNWLCB3aGljaCBpcyBub3cgYmFzZWQgb24g bmRpc3RpbmN0IGVzdGltYXRlcy4KKwkgKi8KKwlsaXN0aWR4ID0gLTE7CisJZm9yZWFjaCAobGMs IGNsYXVzZXMpCisJeworCQlOb2RlICpjbGF1c2UgPSAoTm9kZSAqKSBsZmlyc3QobGMpOworCQlS ZXN0cmljdEluZm8gKnJpbmZvOworCisJCS8qIG5lZWRzIHRvIGhhcHBlbiBiZWZvcmUgc2tpcHBp bmcgYW55IGNsYXVzZXMgKi8KKwkJbGlzdGlkeCsrOworCisJCS8qIFNraXAgY2xhdXNlcyB0aGF0 IHdlcmUgYWxyZWFkeSBlc3RpbWF0ZWQuICovCisJCWlmIChibXNfaXNfbWVtYmVyKGxpc3RpZHgs IGVzdGltYXRlZGNsYXVzZXMpKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogU2tpcCBjbGF1 c2VzIHRoYXQgYXJlIG5vdCBqb2luIGNsYXVzZXMgb3IgdGhhdCB3ZSBkb24ndCBrbm93CisJCSAq IGhvdyB0byBoYW5kbGUgZXN0aW1hdGUgdXNpbmcgZXh0ZW5kZWQgc3RhdGlzdGljcy4KKwkJICov CisJCWlmICghc3RhdGV4dF9pc19zdXBwb3J0ZWRfam9pbl9jbGF1c2Uocm9vdCwgY2xhdXNlLCB2 YXJSZWxpZCwgc2ppbmZvKSkKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIFhYWCBXZSdyZSBn dWFyYW50ZWVkIHRvIGhhdmUgUmVzdHJpY3RJbmZvIHRoYW5rcyB0byB0aGUgY2hlY2tzCisJCSAq IGluIHN0YXRleHRfaXNfc3VwcG9ydGVkX2pvaW5fY2xhdXNlLgorCQkgKi8KKwkJcmluZm8gPSAo UmVzdHJpY3RJbmZvICopIGNsYXVzZTsKKworCQkvKiBDb2xsZWN0IHJlbGlkcyBmcm9tIGFsbCB1 c2FibGUgY2xhdXNlcy4gKi8KKwkJcmVsaWRzID0gYm1zX3VuaW9uKHJlbGlkcywgcmluZm8tPmNs YXVzZV9yZWxpZHMpOworCX0KKworCS8qIG5vIGpvaW4gY2xhdXNlcyBmb3VuZCwgZG9uJ3QgdHJ5 IGFwcGx5aW5nIGV4dGVuZGVkIHN0YXRzICovCisJaWYgKGJtc19udW1fbWVtYmVycyhyZWxpZHMp ID09IDApCisJCXJldHVybiBmYWxzZTsKKworCS8qCisJICogV2UgZXhwZWN0IGVpdGhlciAwIG9y ID49IDIgcmVsaWRzLCBhIGNhc2Ugd2l0aCAxIHJlbGlkIGluIGpvaW4gY2xhdXNlcworCSAqIHNo b3VsZCBiZSBpbXBvc3NpYmxlLiBBbmQgd2UganVzdCBydWxlZCBvdXQgMCwgc28gdGhlcmUgYXJl IGF0IGxlYXN0IDIuCisJICovCisJQXNzZXJ0KGJtc19udW1fbWVtYmVycyhyZWxpZHMpID49IDIp OworCisJLyoKKwkgKiBDaGVjayB0aGF0IGF0IGxlYXN0IHNvbWUgb2YgdGhlIHJlbHMgcmVmZXJl bmNlZCBieSB0aGUgY2xhdXNlcyBoYXZlCisJICogZXh0ZW5kZWQgc3RhdHMuCisJICoKKwkgKiBY WFggTWF5YmUgd2Ugc2hvdWxkIGNoZWNrIGhvdyBtYW55IHJlbHMgaGF2ZSBzdGF0cywgYW5kIGNy b3NzLWNoZWNrIGhvdworCSAqIGNvbXBhdGlibGUgdGhleSBhcmUgKGUuZy4gdGhhdCBib3RoIGhh dmUgTUNWcywgZXRjLikuIFdlIG1pZ2h0IGFsc28KKwkgKiBjcm9zcy1jaGVjayB0aGUgZXhhY3Qg am9pbmVkIHBhaXJzIG9mIHJlbHMsIGJ1dCBpdCdzIHN1cHBvc2VkIHRvIGJlIGEKKwkgKiBjaGVh cCBjaGVjaywgc28gbWF5YmUgYmV0dGVyIGxlYXZlIHRoYXQgZm9yIGxhdGVyLgorCSAqCisJICog WFhYIFdlIGNvdWxkIGFsc28gY2hlY2sgdGhlIG51bWJlciBvZiBwYXJhbWV0ZXJzIGluIGVhY2gg cmVsIHRvIGNvbnNpZGVyCisJICogZXh0ZW5kZWQgc3RhdHMuIElmIHRoZXJlJ3MganVzdCBhIHNp bmdsZSBhdHRyaWJ1dGUsIGl0J3MgcG9pbnRsZXNzIHRvIHVzZQorCSAqIGV4dGVuZGVkIHN0YXRp c3RpY3MuIE9UT0ggd2UgY2FuIGFsc28gY29uc2lkZXIgcmVzdHJpY3Rpb24gY2xhdXNlcyBmcm9t CisJICogYmFzZXJlc3RyaWN0aW5mbyBhbmQgdXNlIHRoZW0gdG8gY2FsY3VsYXRlIGNvbmRpdGlv bmFsIHByb2JhYmlsaXRpZXMuCisJICovCisJayA9IC0xOworCXdoaWxlICgoayA9IGJtc19uZXh0 X21lbWJlcihyZWxpZHMsIGspKSA+PSAwKQorCXsKKwkJUmVsT3B0SW5mbyAqcmVsID0gZmluZF9i YXNlX3JlbChyb290LCBrKTsKKwkJaWYgKHJlbC0+c3RhdGxpc3QpCisJCQlyZXR1cm4gdHJ1ZTsK Kwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qCisgKiBJbmZvcm1hdGlvbiBhYm91dCB0d28g am9pbmVkIHJlbGF0aW9ucywgYWxvbmcgd2l0aCB0aGUgam9pbiBjbGF1c2VzIGJldHdlZW4uCisg Ki8KK3R5cGVkZWYgc3RydWN0IEpvaW5QYWlySW5mbworeworCUJpdG1hcHNldCAgKnJlbHM7CisJ TGlzdAkgICAqY2xhdXNlczsKK30gSm9pblBhaXJJbmZvOworCisvKgorICogc3RhdGV4dF9idWls ZF9qb2luX3BhaXJzCisgKgkJRXh0cmFjdCBwYWlycyBvZiBqb2luZWQgcmVscyB3aXRoIGpvaW4g Y2xhdXNlcyBmb3IgZWFjaCBwYWlyLgorICoKKyAqIFdhbGtzIHRoZSByZW1haW5pbmcgKG5vdCB5 ZXQgZXN0aW1hdGVkKSBjbGF1c2VzLCBhbmQgc3BsaXRzIHRoZW0gaW50bworICogbGlzdHMgZm9y IGVhY2ggcGFpciBvZiBqb2luZWQgcmVsYXRpb25zLiBSZXR1cm5zIE5VTEwgaWYgdGhlcmUgYXJl IG5vCisgKiBzdWl0YWJsZSBqb2luIHBhaXJzIHRoYXQgbWlnaHQgYmUgZXN0aW1hdGVkIHVzaW5n IGV4dGVuZGVkIHN0YXRzLgorICoKKyAqIFhYWCBJdCdzIHBvc3NpYmxlIHRoZXJlIGFyZSBqb2lu IGNsYXVzZXMsIGJ1dCB0aGUgY2xhdXNlcyBhcmUgbm90CisgKiBzdXBwb3J0ZWQgYnkgdGhlIGV4 dGVuZGVkIHN0YXRzIG1hY2hpbmVyeSAod2Ugb25seSBzdXBwb3J0IG9wY2xhdXNlcworICogd2l0 aCBGX0VRSk9JTlNFTCBzZWxlY3Rpdml0eSBmdW5jdGlvbiBhdCB0aGUgbW9tZW50KS4KKyAqLwor c3RhdGljIEpvaW5QYWlySW5mbyAqCitzdGF0ZXh0X2J1aWxkX2pvaW5fcGFpcnMoUGxhbm5lcklu Zm8gKnJvb3QsIExpc3QgKmNsYXVzZXMsIGludCB2YXJSZWxpZCwKKwkJCQkJCSBKb2luVHlwZSBq b2ludHlwZSwgU3BlY2lhbEpvaW5JbmZvICpzamluZm8sCisJCQkJCQkgQml0bWFwc2V0ICplc3Rp bWF0ZWRjbGF1c2VzLCBpbnQgKm5wYWlycykKK3sKKwlpbnQJCQkJY250OworCWludAkJCQlsaXN0 aWR4OworCUpvaW5QYWlySW5mbyAgICppbmZvOworCUxpc3RDZWxsCSAgICpsYzsKKworCS8qCisJ ICogQXNzdW1lIGVhY2ggY2xhdXNlIGlzIGZvciBhIGRpZmZlcmVudCBwYWlyIG9mIHJlbGF0aW9u cyAoc29tZSBvZiB0aGVtCisJICogbWlnaHQgYmUgYWxyZWFkeSBlc3RpbWF0ZWQsIGJ1dCBtZWgg LSB0aGVyZSBzaG91bGRuJ3QgYmUgdG9vIG1hbnkgb2YKKwkgKiB0aGVtIGFuZCBpdCdzIGNoZWFw ZXIgdGhhbiByZXBhbGxvYykuCisJICovCisJaW5mbyA9IChKb2luUGFpckluZm8gKikgcGFsbG9j MChzaXplb2YoSm9pblBhaXJJbmZvKSAqIGxpc3RfbGVuZ3RoKGNsYXVzZXMpKTsKKwljbnQgPSAw OworCisJbGlzdGlkeCA9IC0xOworCWZvcmVhY2gobGMsIGNsYXVzZXMpCisJeworCQlpbnQJCQkJ aTsKKwkJYm9vbAkJCWZvdW5kOworCQlOb2RlCQkgICAqY2xhdXNlID0gKE5vZGUgKikgbGZpcnN0 KGxjKTsKKwkJUmVzdHJpY3RJbmZvICAgKnJpbmZvOworCisJCWxpc3RpZHgrKzsKKworCQkvKiBz a2lwIGFscmVhZHkgZXN0aW1hdGVkIGNsYXVzZXMgKi8KKwkJaWYgKGJtc19pc19tZW1iZXIobGlz dGlkeCwgZXN0aW1hdGVkY2xhdXNlcykpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBNYWtl IHN1cmUgdGhlIGNsYXVzZSBpcyBhIGpvaW4gY2xhdXNlIG9mIGEgc3VwcG9ydGVkIHNoYXBlIChh dAorCQkgKiB0aGUgbW9tZW50IHdlIHN1cHBvcnQganVzdCAoRXhwciBvcCBFeHByKSBjbGF1c2Vz IHdpdGggZWFjaAorCQkgKiBzaWRlIHJlZmVyZW5jaW5nIGp1c3QgYSBzaW5nbGUgcmVsYXRpb24p LgorCQkgKi8KKwkJaWYgKCFzdGF0ZXh0X2lzX3N1cHBvcnRlZF9qb2luX2NsYXVzZShyb290LCBj bGF1c2UsIHZhclJlbGlkLCBzamluZm8pKQorCQkJY29udGludWU7CisKKwkJLyogc3RhdGV4dF9p c19zdXBwb3J0ZWRfam9pbl9jbGF1c2UgZ3VhcmFudGVlcyBSZXN0cmljdEluZm8gKi8KKwkJcmlu Zm8gPSAoUmVzdHJpY3RJbmZvICopIGNsYXVzZTsKKwkJY2xhdXNlID0gKE5vZGUgKikgcmluZm8t PmNsYXVzZTsKKworCQkvKiBzZWFyY2ggZm9yIGEgbWF0Y2hpbmcgam9pbiBwYWlyICovCisJCWZv dW5kID0gZmFsc2U7CisJCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKykKKwkJeworCQkJaWYgKGJt c19pc19zdWJzZXQocmluZm8tPmNsYXVzZV9yZWxpZHMsIGluZm9baV0ucmVscykpCisJCQl7CisJ CQkJaW5mb1tpXS5jbGF1c2VzID0gbGFwcGVuZChpbmZvW2ldLmNsYXVzZXMsIGNsYXVzZSk7CisJ CQkJZm91bmQgPSB0cnVlOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKCFmb3VuZCkK KwkJeworCQkJaW5mb1tjbnRdLnJlbHMgPSByaW5mby0+Y2xhdXNlX3JlbGlkczsKKwkJCWluZm9b Y250XS5jbGF1c2VzID0gbGFwcGVuZChpbmZvW2NudF0uY2xhdXNlcywgY2xhdXNlKTsKKwkJCWNu dCsrOworCQl9CisJfQorCisJaWYgKGNudCA9PSAwKQorCQlyZXR1cm4gTlVMTDsKKworCSpucGFp cnMgPSBjbnQ7CisJcmV0dXJuIGluZm87Cit9CisKKy8qCisgKiBleHRyYWN0X3JlbGF0aW9uX2lu Zm8KKyAqCQlFeHRyYWN0IGluZm9ybWF0aW9uIGFib3V0IGEgcmVsYXRpb24gaW4gYSBqb2luIHBh aXIuCisgKgorICogVGhlIHJlbGF0aW9uIGlzIGlkZW50aWZpZWQgYnkgaW5kZXggKGdlbmVyYWxs eSAwIG9yIDEpLCBhbmQgcGlja3MgZXh0ZW5kZWQKKyAqIHN0YXRpc3RpY3Mgb2JqZWN0IGNvdmVy aW5nIHRoZSBqb2luIGNsYXVzZXMgYW5kIGJhc2VyZWwgcmVzdHJpY3Rpb25zLgorICoKKyAqIFhY WCBDYW4gd2UgaGF2ZSBjYXNlcyB3aXRoIGluZGV4ZXMgYWJvdmUgMT8gUHJvYmFibHkgZm9yIGNs YXVzZXMgbWl4aW5nCisgKiB2YXJzIGZyb20gMyByZWxhdGlvbnMsIGJ1dCBzdGF0ZXh0X2lzX3N1 cHBvcnRlZF9qb2luX2NsYXVzZSByZWplY3RzIHRob3NlLgorICovCitzdGF0aWMgUmVsT3B0SW5m byAqCitleHRyYWN0X3JlbGF0aW9uX2luZm8oUGxhbm5lckluZm8gKnJvb3QsIEpvaW5QYWlySW5m byAqaW5mbywgaW50IGluZGV4LAorCQkJCQkgIFN0YXRpc3RpY0V4dEluZm8gKipzdGF0KQorewor CWludAkJCWs7CisJaW50CQkJcmVsaWQ7CisJUmVsT3B0SW5mbyAqcmVsOworCUxpc3RDZWxsICAg KmxjOworCUxpc3QJICAgKmV4cHJzID0gTklMOworCisJQml0bWFwc2V0ICAqYXR0bnVtcyA9IE5V TEw7CisKKwlBc3NlcnQoKGluZGV4ID49IDApICYmIChpbmRleCA8PSAxKSk7CisKKwlrID0gLTE7 CisJd2hpbGUgKGluZGV4ID49IDApCisJeworCQlrID0gYm1zX25leHRfbWVtYmVyKGluZm8tPnJl bHMsIGspOworCQlpZiAoayA8IDApCisJCQllbG9nKEVSUk9SLCAiZmFpbGVkIHRvIGV4dHJhY3Qg cmVsaWQiKTsKKworCQlyZWxpZCA9IGs7CisJCWluZGV4LS07CisJfQorCisJcmVsID0gZmluZF9i YXNlX3JlbChyb290LCByZWxpZCk7CisKKwkvKgorCSAqIFdhbGsgdGhlIGNsYXVzZXMgZm9yIHRo aXMgam9pbiBwYWlyLCBhbmQgZXh0cmFjdCBleHByZXNzaW9ucyBhYm91dAorCSAqIHRoZSByZWxh dGlvbiBpZGVudGlmaWVkIGJ5IGluZGV4IC8gcmVsaWQuIEZvciBzaW1wbGUgVmFycyB3ZSBleHRy YWN0CisJICogdGhlIGF0dG51bS4gT3RoZXJ3aXNlIHdlIGtlZXAgdGhlIHdob2xlIGV4cHJlc3Np b24uCisJICovCisJZm9yZWFjaCAobGMsIGluZm8tPmNsYXVzZXMpCisJeworCQlMaXN0Q2VsbCAq bGMyOworCQlOb2RlICpjbGF1c2UgPSAoTm9kZSAqKSBsZmlyc3QobGMpOworCQlPcEV4cHIgKm9w Y2xhdXNlID0gKE9wRXhwciAqKSBjbGF1c2U7CisKKwkJLyogb25seSBvcGNsYXVzZXMgc3VwcG9y dGVkIGZvciBub3cgKi8KKwkJQXNzZXJ0KGlzX29wY2xhdXNlKGNsYXVzZSkpOworCisJCWZvcmVh Y2ggKGxjMiwgb3BjbGF1c2UtPmFyZ3MpCisJCXsKKwkJCU5vZGUgKmFyZyA9IChOb2RlICopIGxm aXJzdChsYzIpOworCQkJQml0bWFwc2V0ICp2YXJub3MgPSBOVUxMOworCisJCQkvKiBwbGFpbiBW YXIgcmVmZXJlbmNlcyAoYm9vbGVhbiBWYXJzIG9yIHJlY3Vyc2l2ZSBjaGVja3MpICovCisJCQlp ZiAoSXNBKGFyZywgVmFyKSkKKwkJCXsKKwkJCQlWYXIJCSAgICp2YXIgPSAoVmFyICopIGFyZzsK KworCQkJCS8qIElnbm9yZSB2YXJzIGZyb20gb3RoZXIgcmVsYXRpb25zLiAqLworCQkJCWlmICh2 YXItPnZhcm5vICE9IHJlbGlkKQorCQkJCQljb250aW51ZTsKKworCQkJCS8qIHdlIGFsc28gYmV0 dGVyIGVuc3VyZSB0aGUgVmFyIGlzIGZyb20gdGhlIGN1cnJlbnQgbGV2ZWwgKi8KKwkJCQlpZiAo dmFyLT52YXJsZXZlbHN1cCA+IDApCisJCQkJCWNvbnRpbnVlOworCisJCQkJLyogQWxzbyBza2lw IHN5c3RlbSBhdHRyaWJ1dGVzICh3ZSBkb24ndCBhbGxvdyBzdGF0cyBvbiB0aG9zZSkuICovCisJ CQkJaWYgKCFBdHRyTnVtYmVySXNGb3JVc2VyRGVmaW5lZEF0dHIodmFyLT52YXJhdHRubykpCisJ CQkJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIHN5c3RlbSBhdHRyaWJ1dGUiKTsKKworCQkJCWF0 dG51bXMgPSBibXNfYWRkX21lbWJlcihhdHRudW1zLCB2YXItPnZhcmF0dG5vKTsKKworCQkJCS8q IERvbmUsIHByb2Nlc3MgdGhlIG5leHQgYXJndW1lbnQuICovCisJCQkJY29udGludWU7CisJCQl9 CisKKwkJCS8qCisJCQkgKiBPSywgaXQncyBhIG1vcmUgY29tcGxleCBleHByZXNzaW9uLCBzbyBj aGVjayBpZiBpdCBtYXRjaGVzCisJCQkgKiB0aGUgcmVsaWQgYW5kIG1heWJlIGtlZXAgaXQgYXMg YSB3aG9sZS4gSXQgc2hvdWxkIGJlCisJCQkgKiBjb21wYXRpYmxlIGJlY2F1c2Ugd2UgYWxyZWFk eSBjaGVja2VkIGl0IHdoZW4gYnVpbGRpbmcgdGhlCisJCQkgKiBqb2luIHBhaXJzLgorCQkJICov CisJCQl2YXJub3MgPSBwdWxsX3Zhcm5vcyhyb290LCBhcmcpOworCisJCQlpZiAocmVsaWQgPT0g Ym1zX3NpbmdsZXRvbl9tZW1iZXIodmFybm9zKSkKKwkJCQlleHBycyA9IGxhcHBlbmQoZXhwcnMs IGFyZyk7CisJCX0KKwl9CisKKwkqc3RhdCA9IHN0YXRleHRfZmluZF9tYXRjaGluZ19tY3Yocm9v dCwgcmVsLCBhdHRudW1zLCBleHBycyk7CisKKwlyZXR1cm4gcmVsOworfQorCisvKgorICogZ2V0 X2V4cHJlc3Npb25fZm9yX3JlbAorICoJCUV4dHJhY3QgZXhwcmVzc2lvbiBmb3IgYSBnaXZlbiBy ZWxhdGlvbiBmcm9tIHRoZSBqb2luIGNsYXVzZS4KKyAqCisgKiBHaXZlbiBhIGpvaW4gY2xhdXNl IHN1cHBvcnRlZCBieSB0aGUgZXh0ZW5kZWQgc3RhdGlzdGljcyBvYmplY3QgKGN1cnJlbnRseQor ICogdGhhdCBtZWFucyBqdXN0IE9wRXhwciBjbGF1c2VzIHdpdGggZWFjaCBhcmd1bWVudCByZWZl cmVuY2luZyBzaW5nbGUgcmVsKSwKKyAqIHJldHVybiBlaXRoZXIgdGhlIGxlZnQgb3IgcmlnaHQg YXJndW1lbnQgZXhwcmVzc2lvbiBmb3IgdGhlIHJlbC4KKyAqCisgKiBYWFggVGhpcyBzaG91bGQg cHJvYmFibHkgcmV0dXJuIGEgZmxhZyBpZGVudGlmeWluZyB3aGV0aGVyIGl0J3MgdGhlCisgKiBs ZWZ0IG9yIHJpZ2h0IGFyZ3VtZW50LgorICovCitzdGF0aWMgTm9kZSAqCitnZXRfZXhwcmVzc2lv bl9mb3JfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsIE5vZGUgKmNsYXVz ZSkKK3sKKwlPcEV4cHIgKm9wZXhwcjsKKwlOb2RlICAgKmV4cHI7CisKKwkvKgorCSAqIFN0cmlw IHRoZSBSZXN0cmljdEluZm8gbm9kZSwgZ2V0IHRoZSBhY3R1YWwgY2xhdXNlLgorCSAqCisJICog WFhYIE5vdCBzdXJlIGlmIHdlIG5lZWQgdG8gY2FyZSBhYm91dCByZW1vdmluZyBvdGhlciBub2Rl IHR5cGVzCisJICogdG9vIChlLmcuIFJlbGFiZWxUeXBlIGV0Yy4pLiBzdGF0ZXh0X2lzX3N1cHBv cnRlZF9qb2luX2NsYXVzZQorCSAqIG1hdGNoZXMgdGhpcywgYnV0IG1heWJlIHdlIG5lZWQgdG8g cmVsYXggaXQ/CisJICovCisJaWYgKElzQShjbGF1c2UsIFJlc3RyaWN0SW5mbykpCisJCWNsYXVz ZSA9IChOb2RlICopICgoUmVzdHJpY3RJbmZvICopIGNsYXVzZSktPmNsYXVzZTsKKworCW9wZXhw ciA9IChPcEV4cHIgKikgY2xhdXNlOworCisJLyogTWFrZSBzdXJlIHdlIGhhdmUgdGhlIGV4cGVj dGVkIG5vZGUgdHlwZS4gKi8KKwlBc3NlcnQoaXNfb3BjbGF1c2UoY2xhdXNlKSk7CisJQXNzZXJ0 KGxpc3RfbGVuZ3RoKG9wZXhwci0+YXJncykgPT0gMik7CisKKwkvKiBGSVhNRSBzdHJpcCByZWxh YmVsIGV0Yy4gdGhlIHdheSBleGFtaW5lX29wY2xhdXNlX2FyZ3MgZG9lcyAqLworCWV4cHIgPSBs aW5pdGlhbChvcGV4cHItPmFyZ3MpOworCWlmIChibXNfc2luZ2xldG9uX21lbWJlcihwdWxsX3Zh cm5vcyhyb290LCBleHByKSkgPT0gcmVsLT5yZWxpZCkKKwkJcmV0dXJuIGV4cHI7CisKKwlleHBy ID0gbHNlY29uZChvcGV4cHItPmFyZ3MpOworCWlmIChibXNfc2luZ2xldG9uX21lbWJlcihwdWxs X3Zhcm5vcyhyb290LCBleHByKSkgPT0gcmVsLT5yZWxpZCkKKwkJcmV0dXJuIGV4cHI7CisKKwly ZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIHN0YXRleHRfY2xhdXNlbGlzdF9qb2luX3NlbGVjdGl2 aXR5CisgKgkJVXNlIGV4dGVuZGVkIHN0YXRzIHRvIGVzdGltYXRlIGpvaW4gY2xhdXNlcy4KKyAq CisgKiBYWFggSW4gcHJpbmNpcGxlLCB3ZSBzaG91bGQgbm90IHJlc3RyaWN0IHRoaXMgdG8gY2Fz ZXMgd2l0aCBtdWx0aXBsZQorICogam9pbiBjbGF1c2VzIC0gd2Ugc2hvdWxkIGNvbnNpZGVyIGRl cGVuZGVuY2llcyB3aXRoIGNvbmRpdGlvbnMgYXQgdGhlCisgKiBiYXNlIHJlbGF0aW9ucywgaS5l LiBjYWxjdWxhdGUgUChqb2luIGNsYXVzZSB8IGJhc2UgcmVzdHJpY3Rpb25zKS4KKyAqIEJ1dCBj dXJyZW50bHkgdGhhdCBkb2VzIG5vdCBoYXBwZW4sIGJlY2F1c2UgY2xhdXNlbGlzdF9zZWxlY3Rp dml0eV9leHQKKyAqIHRyZWF0cyBhIHNpbmdsZSBjbGF1c2UgYXMgYSBzcGVjaWFsIGNhc2UgKGFu ZCB3ZSBkb24ndCBhcHBseSBleHRlbmRlZAorICogc3RhdGlzdGljcyBpbiB0aGF0IGNhc2UgeWV0 KS4KKyAqLworU2VsZWN0aXZpdHkKK3N0YXRleHRfY2xhdXNlbGlzdF9qb2luX3NlbGVjdGl2aXR5 KFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpjbGF1c2VzLCBpbnQgdmFyUmVsaWQsCisJCQkJCQkJ CQlKb2luVHlwZSBqb2ludHlwZSwgU3BlY2lhbEpvaW5JbmZvICpzamluZm8sCisJCQkJCQkJCQlC aXRtYXBzZXQgKiplc3RpbWF0ZWRjbGF1c2VzKQoreworCWludAkJCWk7CisJaW50CQkJbGlzdGlk eDsKKwlTZWxlY3Rpdml0eQlzID0gMS4wOworCisJSm9pblBhaXJJbmZvICppbmZvOworCWludAkJ CQluaW5mbzsKKworCWlmICghY2xhdXNlcykKKwkJcmV0dXJuIDEuMDsKKworCS8qIGV4dHJhY3Qg cGFpcnMgb2Ygam9pbmVkIHJlbGF0aW9ucyBmcm9tIHRoZSBsaXN0IG9mIGNsYXVzZXMgKi8KKwlp bmZvID0gc3RhdGV4dF9idWlsZF9qb2luX3BhaXJzKHJvb3QsIGNsYXVzZXMsIHZhclJlbGlkLCBq b2ludHlwZSwgc2ppbmZvLAorCQkJCQkJCQkJKmVzdGltYXRlZGNsYXVzZXMsICZuaW5mbyk7CisK KwkvKiBubyB1c2VmdWwgam9pbiBwYWlycyAqLworCWlmICghaW5mbykKKwkJcmV0dXJuIDEuMDsK KworCS8qCisJICogUHJvY2VzcyB0aGUgam9pbiBwYWlycywgdHJ5IHRvIGZpbmQgYSBtYXRjaGlu ZyBNQ1Ygb24gZWFjaCBzaWRlLgorCSAqCisJICogWFhYIFRoZSBiYXNpYyBwcmluY2lwbGUgaXMg cXVpdGUgc2ltaWxhciB0byBlcWpvaW5zZWxfaW5uZXIsIGkuZS4KKwkgKiB3ZSB0cnkgdG8gZmlu ZCBhIE1DViBvbiBib3RoIHNpZGVzIG9mIHRoZSBqb2luLCBhbmQgdXNlIGl0IHRvIGdldAorCSAq IGEgYmV0dGVyIGpvaW4gZXN0aW1hdGUuIEl0J3MgYSBiaXQgbW9yZSBjb21wbGljYXRlZCwgYmVj YXVzZSB0aGVyZQorCSAqIG1pZ2h0IGJlIG11bHRpcGxlIE1DViBsaXN0cywgd2UgYWxzbyBuZWVk IG5kaXN0aW5jdCBlc3RpbWF0ZSwgYW5kCisJICogdGhlcmUgbWF5IGJlIGludGVyZXN0aW5nIGJh c2VyZXN0cmljdGlvbnMgdG9vLgorCSAqCisJICogWFhYIEF0IHRoZSBtb21lbnQgd2Ugb25seSBo YW5kbGUgdGhlIGNhc2Ugd2l0aCBtYXRjaGluZyBNQ1ZzIG9uCisJICogYm90aCBzaWRlcywgYnV0 IGl0J2QgYmUgZ29vZCB0byBhbHNvIGhhbmRsZSBjYXNlIHdpdGgganVzdCBuZGlzdGluY3QKKwkg KiBzdGF0aXN0aWNzIGltcHJvdmluZyBuZGlzdGluY3QgZXN0aW1hdGVzLgorCSAqCisJICogWFhY IFdlIG1pZ2h0IGFsc28gaGFuZGxlIGNhc2VzIHdpdGggYSByZWd1bGFyIE1DViBvbiBvbmUgc2lk ZSBhbmQKKwkgKiBhbiBleHRlbmRlZCBNQ1Ygb24gdGhlIG90aGVyIHNpZGUuCisJICoKKwkgKiBY WFggUGVyaGFwcyBpdCdkIGJlIGdvb2QgdG8gYWxzbyBoYW5kbGUgY2FzZSB3aXRoIG9uZSBzaWRl IG9ubHkKKwkgKiBoYXZpbmcgInJlZ3VsYXIiIHN0YXRpc3RpY3MgKGUuZy4gTUNWKSwgZXNwZWNp YWxseSBpbiBjYXNlcyB3aXRoCisJICogbm8gY29uZGl0aW9ucyBvbiB0aGF0IHNpZGUgb2YgdGhl IGpvaW4gKHdoZXJlIHdlIGNhbid0IHVzZSB0aGUKKwkgKiBleHRlbmRlZCBNQ1YgdG8gY2FsY3Vs YXRlIGNvbmRpdGlvbmFsIHByb2JhYmlsaXR5KS4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbmlu Zm87IGkrKykKKwl7CisJCUxpc3RDZWxsICpsYzsKKworCQlSZWxPcHRJbmZvICpyZWwxOworCQlS ZWxPcHRJbmZvICpyZWwyOworCisJCVN0YXRpc3RpY0V4dEluZm8gKnN0YXQxOworCQlTdGF0aXN0 aWNFeHRJbmZvICpzdGF0MjsKKworCQkvKiBleHRyYWN0IGluZm8gYWJvdXQgdGhlIGZpcnN0IHJl bGF0aW9uICovCisJCXJlbDEgPSBleHRyYWN0X3JlbGF0aW9uX2luZm8ocm9vdCwgJmluZm9baV0s IDAsICZzdGF0MSk7CisKKwkJLyogZXh0cmFjdCBpbmZvIGFib3V0IHRoZSBzZWNvbmQgcmVsYXRp b24gKi8KKwkJcmVsMiA9IGV4dHJhY3RfcmVsYXRpb25faW5mbyhyb290LCAmaW5mb1tpXSwgMSwg JnN0YXQyKTsKKworCQkvKgorCQkgKiBXZSBjYW4gaGFuZGxlIHRocmVlIGJhc2ljIGNhc2VzOgor CQkgKgorCQkgKiBhKSBFeHRlbmRlZCBzdGF0cyAod2l0aCBNQ1YpIG9uIGJvdGggc2lkZXMgaXMg YW4gaWRlYWwgY2FzZSwgYW5kIHdlCisJCSAqIGNhbiBzaW1wbHkgY29tYmluZSB0aGUgdHdvIE1D VnMsIHBvc3NpYmx5IHdpdGggYWRkaXRpb25hbCBjb25kaXRpb25zCisJCSAqIGZyb20gdGhlIHJl bGF0aW9ucy4KKwkJICoKKwkJICogYikgRXh0ZW5kZWQgc3RhdHMgb24gb25lIHNpZGUsIHJlZ3Vs YXIgTUNWIG9uIHRoZSBvdGhlciBzaWRlICh0aGlzCisJCSAqIG1lYW5zIHRoZXJlJ3MganVzdCBv bmUgam9pbiBjbGF1c2UgLyBleHByZXNzaW9uKS4gSXQgYWxzbyBtZWFucyB0aGUKKwkJICogZXh0 ZW5kZWQgc3RhdHMgbGlrZWx5IGNvdmVycyBhdCBsZWFzdCBvbmUgZXh0cmEgY29uZGl0aW9uLCBv dGhlcndpc2UKKwkJICogd2UgY291bGQganVzdCB1c2UgcmVndWxhciBzdGF0aXN0aWNzLiBXZSBj YW4gY29tYmluZSB0aGUgc3RhdHMganVzdAorCQkgKiBzaW1pbGFybHkgdG8gKGEpLgorCQkgKgor CQkgKiBjKSBObyBleHRlbmRlZCBzdGF0cyB3aXRoIE1DVi4gSWYgdGhlcmUgYXJlIG11bHRpcGxl IGpvaW4gY2xhdXNlcywKKwkJICogd2UgY2FuIHRyeSB1c2luZyBuZGlzdGluY3QgY29lZmZpY2ll bnRzIGFuZCBkbyB3aGF0IGVxam9pbnNlbCBkb2VzLgorCQkgKgorCQkgKiBJZiBub25lIG9mIHRo ZXNlIGFwcGxpZXMsIHdlIGZhbGxiYWNrIHRvIHRoZSByZWd1bGFyIHNlbGVjdGl2aXR5CisJCSAq IGVzdGltYXRpb24gaW4gZXFqb2luc2VsLgorCQkgKi8KKwkJaWYgKHN0YXQxICYmIHN0YXQyKQor CQl7CisJCQlzICo9IG1jdl9jb21iaW5lX2V4dGVuZGVkKHJvb3QsIHJlbDEsIHJlbDIsIHN0YXQx LCBzdGF0MiwgaW5mb1tpXS5jbGF1c2VzKTsKKwkJfQorCQllbHNlIGlmIChzdGF0MSAmJiAobGlz dF9sZW5ndGgoaW5mb1tpXS5jbGF1c2VzKSA9PSAxKSkKKwkJeworCQkJLyogdHJ5IGZpbmRpbmcg TUNWIG9uIHRoZSBvdGhlciByZWxhdGlvbiAqLworCQkJVmFyaWFibGVTdGF0RGF0YQl2YXJkYXRh OworCQkJQXR0U3RhdHNTbG90CQlzc2xvdDsKKwkJCUZvcm1fcGdfc3RhdGlzdGljCXN0YXRzID0g TlVMTDsKKwkJCWJvb2wJCQkJaGF2ZV9tY3ZzID0gZmFsc2U7CisJCQlOb2RlCQkJICAgKmNsYXVz ZSA9IGxpbml0aWFsKGluZm9baV0uY2xhdXNlcyk7CisJCQlOb2RlCQkJICAgKmV4cHIgPSBnZXRf ZXhwcmVzc2lvbl9mb3JfcmVsKHJvb3QsIHJlbDIsIGNsYXVzZSk7CisJCQlkb3VibGUJCQkJbmQ7 CisJCQlib29sCQkJCWlzZGVmYXVsdDsKKworCQkJZXhhbWluZV92YXJpYWJsZShyb290LCBleHBy LCAwLCAmdmFyZGF0YSk7CisKKwkJCW5kID0gZ2V0X3ZhcmlhYmxlX251bWRpc3RpbmN0KCZ2YXJk YXRhLCAmaXNkZWZhdWx0KTsKKworCQkJbWVtc2V0KCZzc2xvdCwgMCwgc2l6ZW9mKHNzbG90KSk7 CisKKwkJCWlmIChIZWFwVHVwbGVJc1ZhbGlkKHZhcmRhdGEuc3RhdHNUdXBsZSkpCisJCQl7CisJ CQkJLyogbm90ZSB3ZSBhbGxvdyB1c2Ugb2YgbnVsbGZyYWMgcmVnYXJkbGVzcyBvZiBzZWN1cml0 eSBjaGVjayAqLworCQkJCXN0YXRzID0gKEZvcm1fcGdfc3RhdGlzdGljKSBHRVRTVFJVQ1QodmFy ZGF0YS5zdGF0c1R1cGxlKTsKKwkJCQkvKiBGSVhNRSBzaG91bGQgdGhpcyBjYWxsIHN0YXRpc3Rp Y19wcm9jX3NlY3VyaXR5X2NoZWNrIGxpa2UgZXFqb2luc2VsPyAqLworCQkJCWhhdmVfbWN2cyA9 IGdldF9hdHRzdGF0c3Nsb3QoJnNzbG90LCB2YXJkYXRhLnN0YXRzVHVwbGUsCisJCQkJCQkJCQkJ CSBTVEFUSVNUSUNfS0lORF9NQ1YsIEludmFsaWRPaWQsCisJCQkJCQkJCQkJCSBBVFRTVEFUU1NM T1RfVkFMVUVTIHwgQVRUU1RBVFNTTE9UX05VTUJFUlMpOworCQkJfQorCisJCQlpZiAoaGF2ZV9t Y3ZzKQorCQkJCXMgKj0gbWN2X2NvbWJpbmVfc2ltcGxlKHJvb3QsIHJlbDEsIHN0YXQxLCAmc3Ns b3QsCisJCQkJCQkJCQkJc3RhdHMtPnN0YW51bGxmcmFjLCBuZCwgaXNkZWZhdWx0LCBjbGF1c2Up OworCisJCQlmcmVlX2F0dHN0YXRzc2xvdCgmc3Nsb3QpOworCisJCQlSZWxlYXNlVmFyaWFibGVT dGF0cyh2YXJkYXRhKTsKKworCQkJLyogbm8gc3RhdHMsIGRvbid0IG1hcmsgdGhlIGNsYXVzZXMg YXMgZXN0aW1hdGVkICovCisJCQlpZiAoIWhhdmVfbWN2cykKKwkJCQljb250aW51ZTsKKwkJfQor CQllbHNlIGlmIChzdGF0MiAmJiAobGlzdF9sZW5ndGgoaW5mb1tpXS5jbGF1c2VzKSA9PSAxKSkK KwkJeworCQkJLyogdHJ5IGZpbmRpbmcgTUNWIG9uIHRoZSBvdGhlciByZWxhdGlvbiAqLworCQkJ VmFyaWFibGVTdGF0RGF0YQl2YXJkYXRhOworCQkJQXR0U3RhdHNTbG90CQlzc2xvdDsKKwkJCUZv cm1fcGdfc3RhdGlzdGljCXN0YXRzID0gTlVMTDsKKwkJCWJvb2wJCQkJaGF2ZV9tY3ZzID0gZmFs c2U7CisJCQlOb2RlCQkJICAgKmNsYXVzZSA9IChOb2RlICopIGxpbml0aWFsKGluZm9baV0uY2xh dXNlcyk7CisJCQlOb2RlCQkJICAgKmV4cHIgPSBnZXRfZXhwcmVzc2lvbl9mb3JfcmVsKHJvb3Qs IHJlbDEsIGNsYXVzZSk7CisJCQlkb3VibGUJCQkJbmQ7CisJCQlib29sCQkJCWlzZGVmYXVsdDsK KworCQkJZXhhbWluZV92YXJpYWJsZShyb290LCBleHByLCAwLCAmdmFyZGF0YSk7CisKKwkJCW5k ID0gZ2V0X3ZhcmlhYmxlX251bWRpc3RpbmN0KCZ2YXJkYXRhLCAmaXNkZWZhdWx0KTsKKworCQkJ bWVtc2V0KCZzc2xvdCwgMCwgc2l6ZW9mKHNzbG90KSk7CisKKwkJCWlmIChIZWFwVHVwbGVJc1Zh bGlkKHZhcmRhdGEuc3RhdHNUdXBsZSkpCisJCQl7CisJCQkJLyogbm90ZSB3ZSBhbGxvdyB1c2Ug b2YgbnVsbGZyYWMgcmVnYXJkbGVzcyBvZiBzZWN1cml0eSBjaGVjayAqLworCQkJCXN0YXRzID0g KEZvcm1fcGdfc3RhdGlzdGljKSBHRVRTVFJVQ1QodmFyZGF0YS5zdGF0c1R1cGxlKTsKKwkJCQkv KiBGSVhNRSBzaG91bGQgdGhpcyBjYWxsIHN0YXRpc3RpY19wcm9jX3NlY3VyaXR5X2NoZWNrIGxp a2UgZXFqb2luc2VsPyAqLworCQkJCWhhdmVfbWN2cyA9IGdldF9hdHRzdGF0c3Nsb3QoJnNzbG90 LCB2YXJkYXRhLnN0YXRzVHVwbGUsCisJCQkJCQkJCQkJCSBTVEFUSVNUSUNfS0lORF9NQ1YsIElu dmFsaWRPaWQsCisJCQkJCQkJCQkJCSBBVFRTVEFUU1NMT1RfVkFMVUVTIHwgQVRUU1RBVFNTTE9U X05VTUJFUlMpOworCQkJfQorCisJCQlpZiAoaGF2ZV9tY3ZzKQorCQkJCXMgKj0gbWN2X2NvbWJp bmVfc2ltcGxlKHJvb3QsIHJlbDIsIHN0YXQyLCAmc3Nsb3QsCisJCQkJCQkJCQkJc3RhdHMtPnN0 YW51bGxmcmFjLCBuZCwgaXNkZWZhdWx0LCBjbGF1c2UpOworCisJCQlmcmVlX2F0dHN0YXRzc2xv dCgmc3Nsb3QpOworCisJCQlSZWxlYXNlVmFyaWFibGVTdGF0cyh2YXJkYXRhKTsKKworCQkJLyog bm8gc3RhdHMsIGRvbid0IG1hcmsgdGhlIGNsYXVzZXMgYXMgZXN0aW1hdGVkICovCisJCQlpZiAo IWhhdmVfbWN2cykKKwkJCQljb250aW51ZTsKKwkJfQorCQllbHNlCisJCQljb250aW51ZTsKKwor CQkvKgorCQkgKiBOb3cgbWFyayBhbGwgdGhlIGNsYXVzZXMgZm9yIHRoaXMgam9pbiBwYWlyIGFz IGVzdGltYXRlZC4KKwkJICoKKwkJICogWFhYIE1heWJlIHRyYWNrIHRoZSBpbmRleGVzIGluIEpv aW5QYWlySW5mbywgc28gdGhhdCB3ZSBjYW4KKwkJICogc2ltcGx5IHVuaW9uIHRoZSB0d28gYml0 bWFwcywgd2l0aG91dCB0aGUgZXh0cmEgbWF0Y2hpbmcuCisJCSAqLworCQlmb3JlYWNoIChsYywg aW5mby0+Y2xhdXNlcykKKwkJeworCQkJTm9kZSAqY2xhdXNlID0gKE5vZGUgKikgbGZpcnN0KGxj KTsKKwkJCUxpc3RDZWxsICpsYzI7CisKKwkJCWxpc3RpZHggPSAtMTsKKwkJCWZvcmVhY2ggKGxj MiwgY2xhdXNlcykKKwkJCXsKKwkJCQlOb2RlICpjbGF1c2UyID0gKE5vZGUgKikgbGZpcnN0KGxj Mik7CisJCQkJbGlzdGlkeCsrOworCisJCQkJQXNzZXJ0KElzQShjbGF1c2UyLCBSZXN0cmljdElu Zm8pKTsKKworCQkJCWNsYXVzZTIgPSAoTm9kZSAqKSAoKFJlc3RyaWN0SW5mbyAqKSBjbGF1c2Uy KS0+Y2xhdXNlOworCisJCQkJaWYgKGVxdWFsKGNsYXVzZSwgY2xhdXNlMikpCisJCQkJeworCQkJ CQkqZXN0aW1hdGVkY2xhdXNlcyA9IGJtc19hZGRfbWVtYmVyKCplc3RpbWF0ZWRjbGF1c2VzLCBs aXN0aWR4KTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJcmV0dXJuIHM7 Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdGF0aXN0aWNzL21jdi5jIGIvc3JjL2JhY2tl bmQvc3RhdGlzdGljcy9tY3YuYwppbmRleCBiMGU5YWVhZDg0Li40OTI5OWVkOTA3IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9zdGF0aXN0aWNzL21jdi5jCisrKyBiL3NyYy9iYWNrZW5kL3N0YXRp c3RpY3MvbWN2LmMKQEAgLTIyLDYgKzIyLDggQEAKICNpbmNsdWRlICJmbWdyLmgiCiAjaW5jbHVk ZSAiZnVuY2FwaS5oIgogI2luY2x1ZGUgIm5vZGVzL25vZGVGdW5jcy5oIgorI2luY2x1ZGUgIm9w dGltaXplci9jbGF1c2VzLmgiCisjaW5jbHVkZSAib3B0aW1pemVyL29wdGltaXplci5oIgogI2lu Y2x1ZGUgInN0YXRpc3RpY3MvZXh0ZW5kZWRfc3RhdHNfaW50ZXJuYWwuaCIKICNpbmNsdWRlICJz dGF0aXN0aWNzL3N0YXRpc3RpY3MuaCIKICNpbmNsdWRlICJ1dGlscy9hcnJheS5oIgpAQCAtMjE3 MywzICsyMTc1LDc1OSBAQCBtY3ZfY2xhdXNlX3NlbGVjdGl2aXR5X29yKFBsYW5uZXJJbmZvICpy b290LCBTdGF0aXN0aWNFeHRJbmZvICpzdGF0LAogCiAJcmV0dXJuIHM7CiB9CisKKy8qCisgKiBz dGF0ZXh0X2NvbXBhcmVfbWN2cworICoJCUNhbGN1bGF0ZSBqb2luIHNlbGVjdGl2aXR5IHVzaW5n IGV4dGVuZGVkIHN0YXRpc3RpY3MsIHNpbWlsYXIgdG8KKyAqCQllcWpvaW5zZWxfaW5uZXIuCisg KgorICogQ29uc2lkZXJzIHJlc3RyaWN0aW9ucyBvbiBiYXNlIHJlbGF0aW9ucyB0b28sIGVzc2Vu dGlhbGx5IGNvbXB1dGluZyBhCisgKiBjb25kaXRpb25hbCBwcm9iYWJpbGl0eQorICoKKyAqCVAo am9pbiBjbGF1c2VzIHwgYmFzZXJlc3RyaWN0aW5mb3Mgb24gZWl0aGVyIHNpZGUpCisgKgorICog Q29tcGFyZWQgdG8gZXFqb2luc2VsX2lubmVyIHRoZXJlJ3MgYSBjb3VwbGUgcHJvYmxlbXMuIFdp dGggcGVyLWNvbHVtbiBNQ1YKKyAqIGxpc3RzIGl0J3Mgb2J2aW91cyB0aGF0IHRoZSBudW1iZXIg b2YgZGlzdGluY3QgdmFsdWVzIG5vdCBjb3ZlcmVkIGJ5IHRoZSBNQ1YKKyAqIGlzIChuZGlzdGlu Y3QgLSBzaXplKE1DVikpLiBXaXRoIG11bHRpLWNvbHVtbiBNQ1ZzIGl0J3Mgbm90IHRoYXQgc2lt cGxlLAorICogcGFydGljdWxhcmx5IHdoZW4gdGhlIGNvbmRpdGlvbnMgYXJlIG9uIGEgc3Vic2V0 IG9mIHRoZSBNQ1YgYXR0cmlidXRlcyBhbmQvb3IKKyAqIE5VTExzIGFyZSBpbnZvbHZlZC4gRS5n LiB3aXRoIE1DViAoYSxiLGMpIGFuZCBjb25kaXRpb25zIG9uIChhLGIpLCBpdCdzIG5vdAorICog Y2xlYXIgaWYgdGhlIG51bWJlciBvZiAoYSxiKSBjb21iaW5hdGlvbnMgbm90IGNvdmVyZWQgYnkg dGhlIE1DViBpcworICoKKyAqIChuZGlzdGluY3QoYSxiKSAtIG5kaXN0aW5jdF9tY3YoYSxiKSkK KyAqCisgKiB3aGVyZSBuZGlzdGluY3RfbWN2KGEsYikgaXMgdGhlIG51bWJlciBvZiBkaXN0aW5j dCAoYSxiKSBjb21iaW5hdGlvbnMKKyAqIGluY2x1ZGVkIGluIHRoZSBNQ1YgbGlzdC4gVGhlc2Ug Y29tYmluYXRpb25zIG1heSBiZSBwcmVzZW50IGluIHRoZSByZXN0CisgKiBvZiB0aGUgZGF0YSAo b3V0c2lkZSBNQ1YpLCBqdXN0IHdpdGggc29tZSBleHRyYSB2YWx1ZXMgaW4gImMiLiBTbyBpbgor ICogcHJpbmNpcGxlIHRoZXJlIG1heSBiZSBiZXR3ZWVuCisgKgorICogKG5kaXN0aW5jdChhLGIp IC0gbmRpc3RpbmN0X21jdihhLGIpKSBhbmQgbmRpc3RpbmN0KGEsYikKKyAqCisgKiBkaXN0aW5j dCB2YWx1ZXMgaW4gdGhlIHBhcnQgb2YgdGhlIGRhdGEgbm90IGNvdmVyZWQgYnkgdGhlIE1DVi4g U28gd2UgbmVlZAorICogdG8gcGljayBzb21ldGhpbmcgaW4gYmV0d2VlbiwgdGhlcmUncyBubyB3 YXkgdG8gY2FsY3VsYXRlIHRoaXMgYWNjdXJhdGVseS4KKyAqLworU2VsZWN0aXZpdHkKK21jdl9j b21iaW5lX2V4dGVuZGVkKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwxLCBSZWxP cHRJbmZvICpyZWwyLAorCQkJCQkgU3RhdGlzdGljRXh0SW5mbyAqc3RhdDEsIFN0YXRpc3RpY0V4 dEluZm8gKnN0YXQyLAorCQkJCQkgTGlzdCAqY2xhdXNlcykKK3sKKwlMaXN0Q2VsbCAgICpsYzsK KworCU1DVkxpc3QgICAgKm1jdjEsCisJCQkgICAqbWN2MjsKKwlpbnQJCQlpZHgsCisJCQkJaSwK KwkJCQlqOworCVNlbGVjdGl2aXR5IHMgPSAwOworCisJLyogbWF0Y2ggYml0bWFwcyBhbmQgc2Vs ZWN0aXZpdHkgZm9yIGJhc2VyZWwgY29uZGl0aW9ucyAoaWYgYW55KSAqLworCUxpc3QgICAqZXhw cnMxID0gTklMLAorCQkgICAqZXhwcnMyID0gTklMOworCUxpc3QgICAqY29uZGl0aW9uczEgPSBO SUwsCisJCSAgICpjb25kaXRpb25zMiA9IE5JTDsKKwlib29sICAgKmNtYXRjaGVzMSA9IE5VTEws CisJCSAgICpjbWF0Y2hlczIgPSBOVUxMOworCisJZG91YmxlCWNzZWwxID0gMS4wLAorCQkJY3Nl bDIgPSAxLjA7CisKKwlib29sICAgKm1hdGNoZXMxID0gTlVMTCwKKwkJICAgKm1hdGNoZXMyID0g TlVMTDsKKworCS8qIGVzdGltYXRlcyBmb3IgdGhlIHR3byByZWxhdGlvbnMgKi8KKwlkb3VibGUJ bWF0Y2hmcmVxMSwKKwkJCXVubWF0Y2hmcmVxMSwKKwkJCW90aGVyZnJlcTEsCisJCQltY3ZmcmVx MSwKKwkJCW5kMSwKKwkJCXRvdGFsc2VsMTsKKworCWRvdWJsZSAJbWF0Y2hmcmVxMiwKKwkJCXVu bWF0Y2hmcmVxMiwKKwkJCW90aGVyZnJlcTIsCisJCQltY3ZmcmVxMiwKKwkJCW5kMiwKKwkJCXRv dGFsc2VsMjsKKworCS8qIGluZm8gYWJvdXQgY2xhdXNlcyBhbmQgaG93IHRoZXkgbWF0Y2ggdG8g TUNWIHN0YXRzICovCisJRm1nckluZm8gICAqb3Bwcm9jczsKKwlpbnQJCSAgICppbmRleGVzMSwK KwkJCSAgICppbmRleGVzMjsKKwlib29sCSAgICpyZXZlcnNlOworCVJhbmdlVGJsRW50cnkgKnJ0 ZTEgPSByb290LT5zaW1wbGVfcnRlX2FycmF5W3JlbDEtPnJlbGlkXTsKKwlSYW5nZVRibEVudHJ5 ICpydGUyID0gcm9vdC0+c2ltcGxlX3J0ZV9hcnJheVtyZWwyLT5yZWxpZF07CisKKwkvKiB3ZSBw aWNrZWQgdGhlIHN0YXRzIHNvIHRoYXQgdGhleSBoYXZlIE1DViBlbmFibGVkICovCisJQXNzZXJ0 KChzdGF0MS0+a2luZCA9IFNUQVRTX0VYVF9NQ1YpICYmIChzdGF0Mi0+a2luZCA9IFNUQVRTX0VY VF9NQ1YpKTsKKworCW1jdjEgPSBzdGF0ZXh0X21jdl9sb2FkKHN0YXQxLT5zdGF0T2lkLCBydGUx LT5pbmgpOworCW1jdjIgPSBzdGF0ZXh0X21jdl9sb2FkKHN0YXQyLT5zdGF0T2lkLCBydGUyLT5p bmgpOworCisJLyogc2hvdWxkIG9ubHkgZ2V0IGhlcmUgd2l0aCBNQ1Ygb24gYm90aCBzaWRlcyAq LworCUFzc2VydChtY3YxICYmIG1jdjIpOworCisJLyogRGV0ZXJtaW5lIHdoaWNoIGJhc2VyZWwg Y2xhdXNlcyB0byB1c2UgZm9yIGNvbmRpdGlvbmFsIHByb2JhYmlsaXR5LiAqLworCWNvbmRpdGlv bnMxID0gc3RhdGV4dF9kZXRlcm1pbmVfam9pbl9yZXN0cmljdGlvbnMocm9vdCwgcmVsMSwgc3Rh dDEpOworCWNvbmRpdGlvbnMyID0gc3RhdGV4dF9kZXRlcm1pbmVfam9pbl9yZXN0cmljdGlvbnMo cm9vdCwgcmVsMiwgc3RhdDIpOworCisJLyoKKwkgKiBDYWxjdWxhdGUgbWF0Y2ggYml0bWFwcyBm b3IgcmVzdHJpY3Rpb25zIG9uIGVpdGhlciBzaWRlIG9mIHRoZSBqb2luCisJICogKHRoZXJlIG1h eSBiZSBub25lLCBpbiB3aGljaCBjYXNlIHRoaXMgd2lsbCBiZSBOVUxMKS4KKwkgKi8KKwlpZiAo Y29uZGl0aW9uczEpCisJeworCQljbWF0Y2hlczEgPSBtY3ZfZ2V0X21hdGNoX2JpdG1hcChyb290 LCBjb25kaXRpb25zMSwKKwkJCQkJCQkJCQkgc3RhdDEtPmtleXMsIHN0YXQxLT5leHBycywKKwkJ CQkJCQkJCQkgbWN2MSwgZmFsc2UpOworCQljc2VsMSA9IGNsYXVzZWxpc3Rfc2VsZWN0aXZpdHko cm9vdCwgY29uZGl0aW9uczEsIHJlbDEtPnJlbGlkLCAwLCBOVUxMKTsKKwl9CisKKwlpZiAoY29u ZGl0aW9uczIpCisJeworCQljbWF0Y2hlczIgPSBtY3ZfZ2V0X21hdGNoX2JpdG1hcChyb290LCBj b25kaXRpb25zMiwKKwkJCQkJCQkJCQkgc3RhdDItPmtleXMsIHN0YXQyLT5leHBycywKKwkJCQkJ CQkJCQkgbWN2MiwgZmFsc2UpOworCQljc2VsMiA9IGNsYXVzZWxpc3Rfc2VsZWN0aXZpdHkocm9v dCwgY29uZGl0aW9uczIsIHJlbDItPnJlbGlkLCAwLCBOVUxMKTsKKwl9CisKKwkvKgorCSAqIE1h dGNoIGJpdG1hcHMgZm9yIG1hdGNoZXMgYmV0d2VlbiBNQ1YgZWxlbWVudHMuIEJ5IGRlZmF1bHQg dGhlcmUKKwkgKiBhcmUgbm8gbWF0Y2hlcywgc28gd2Ugc2V0IGFsbCBpdGVtcyB0byAwLgorCSAq LworCW1hdGNoZXMxID0gKGJvb2wgKikgcGFsbG9jMChzaXplb2YoYm9vbCkgKiBtY3YxLT5uaXRl bXMpOworCW1hdGNoZXMyID0gKGJvb2wgKikgcGFsbG9jMChzaXplb2YoYm9vbCkgKiBtY3YyLT5u aXRlbXMpOworCisJLyoKKwkgKiBJbml0aWFsaXplIGluZm9ybWF0aW9uIGFib3V0IGNsYXVzZXMg YW5kIGhvdyB0aGV5IG1hdGNoIHRvIHRoZSBNQ1YKKwkgKiBzdGF0cyB3ZSBwaWNrZWQuIFdlIGRv IHRoaXMgb25seSBvbmNlIGJlZm9yZSBwcm9jZXNzaW5nIHRoZSBsaXN0cywKKwkgKiBzbyB0aGF0 IHdlIGRvbid0IGhhdmUgdG8gZG8gdGhhdCBmb3IgZWFjaCBNQ1YgaXRlbSBvciBzby4KKwkgKi8K KwlvcHByb2NzID0gKEZtZ3JJbmZvICopIHBhbGxvYyhzaXplb2YoRm1nckluZm8pICogbGlzdF9s ZW5ndGgoY2xhdXNlcykpOworCWluZGV4ZXMxID0gKGludCAqKSBwYWxsb2Moc2l6ZW9mKGludCkg KiBsaXN0X2xlbmd0aChjbGF1c2VzKSk7CisJaW5kZXhlczIgPSAoaW50ICopIHBhbGxvYyhzaXpl b2YoaW50KSAqIGxpc3RfbGVuZ3RoKGNsYXVzZXMpKTsKKwlyZXZlcnNlID0gKGJvb2wgKikgcGFs bG9jKHNpemVvZihib29sKSAqIGxpc3RfbGVuZ3RoKGNsYXVzZXMpKTsKKworCWlkeCA9IDA7CisJ Zm9yZWFjaCAobGMsIGNsYXVzZXMpCisJeworCQlOb2RlCSAgICpjbGF1c2UgPSAoTm9kZSAqKSBs Zmlyc3QobGMpOworCQlPcEV4cHIJICAgKm9wZXhwcjsKKwkJTm9kZQkgICAqZXhwcjEsCisJCQkJ ICAgKmV4cHIyOworCQlCaXRtYXBzZXQgICpyZWxpZHMxLAorCQkJCSAgICpyZWxpZHMyOworCisJ CS8qCisJCSAqIFN0cmlwIHRoZSBSZXN0cmljdEluZm8gbm9kZSwgZ2V0IHRoZSBhY3R1YWwgY2xh dXNlLgorCQkgKgorCQkgKiBYWFggTm90IHN1cmUgaWYgd2UgbmVlZCB0byBjYXJlIGFib3V0IHJl bW92aW5nIG90aGVyIG5vZGUgdHlwZXMKKwkJICogdG9vIChlLmcuIFJlbGFiZWxUeXBlIGV0Yy4p LiBzdGF0ZXh0X2lzX3N1cHBvcnRlZF9qb2luX2NsYXVzZQorCQkgKiBtYXRjaGVzIHRoaXMsIGJ1 dCBtYXliZSB3ZSBuZWVkIHRvIHJlbGF4IGl0PworCQkgKi8KKwkJaWYgKElzQShjbGF1c2UsIFJl c3RyaWN0SW5mbykpCisJCQljbGF1c2UgPSAoTm9kZSAqKSAoKFJlc3RyaWN0SW5mbyAqKSBjbGF1 c2UpLT5jbGF1c2U7CisKKwkJb3BleHByID0gKE9wRXhwciAqKSBjbGF1c2U7CisKKwkJLyogTWFr ZSBzdXJlIHdlIGhhdmUgdGhlIGV4cGVjdGVkIG5vZGUgdHlwZS4gKi8KKwkJQXNzZXJ0KGlzX29w Y2xhdXNlKGNsYXVzZSkpOworCQlBc3NlcnQobGlzdF9sZW5ndGgob3BleHByLT5hcmdzKSA9PSAy KTsKKworCQlmbWdyX2luZm8oZ2V0X29wY29kZShvcGV4cHItPm9wbm8pLCAmb3Bwcm9jc1tpZHhd KTsKKworCQkvKiBGSVhNRSBzdHJpcCByZWxhYmVsIGV0Yy4gdGhlIHdheSBleGFtaW5lX29wY2xh dXNlX2FyZ3MgZG9lcyAqLworCQlleHByMSA9IGxpbml0aWFsKG9wZXhwci0+YXJncyk7CisJCWV4 cHIyID0gbHNlY29uZChvcGV4cHItPmFyZ3MpOworCisJCS8qIGRldGVybWluZSBvcmRlciBvZiBj bGF1c2VzIChyZWwxIG9wIHJlbDIpIG9yIChyZWwyIG9wIHJlbDEpICovCisJCXJlbGlkczEgPSBw dWxsX3Zhcm5vcyhyb290LCBleHByMSk7CisJCXJlbGlkczIgPSBwdWxsX3Zhcm5vcyhyb290LCBl eHByMik7CisKKwkJaWYgKChibXNfc2luZ2xldG9uX21lbWJlcihyZWxpZHMxKSA9PSByZWwxLT5y ZWxpZCkgJiYKKwkJCShibXNfc2luZ2xldG9uX21lbWJlcihyZWxpZHMyKSA9PSByZWwyLT5yZWxp ZCkpCisJCXsKKwkJCU9pZAkJY29sbGlkOworCisJCQlpbmRleGVzMVtpZHhdID0gbWN2X21hdGNo X2V4cHJlc3Npb24oZXhwcjEsCisJCQkJCQkJCQkJCQkgc3RhdDEtPmtleXMsIHN0YXQxLT5leHBy cywKKwkJCQkJCQkJCQkJCSAmY29sbGlkKTsKKwkJCWluZGV4ZXMyW2lkeF0gPSBtY3ZfbWF0Y2hf ZXhwcmVzc2lvbihleHByMiwKKwkJCQkJCQkJCQkJCSBzdGF0Mi0+a2V5cywgc3RhdDItPmV4cHJz LAorCQkJCQkJCQkJCQkJICZjb2xsaWQpOworCQkJcmV2ZXJzZVtpZHhdID0gZmFsc2U7CisKKwkJ CWV4cHJzMSA9IGxhcHBlbmQoZXhwcnMxLCBleHByMSk7CisJCQlleHByczIgPSBsYXBwZW5kKGV4 cHJzMiwgZXhwcjIpOworCQl9CisJCWVsc2UgaWYgKChibXNfc2luZ2xldG9uX21lbWJlcihyZWxp ZHMyKSA9PSByZWwxLT5yZWxpZCkgJiYKKwkJCQkgKGJtc19zaW5nbGV0b25fbWVtYmVyKHJlbGlk czEpID09IHJlbDItPnJlbGlkKSkKKwkJeworCQkJT2lkCQljb2xsaWQ7CisKKwkJCWluZGV4ZXMx W2lkeF0gPSBtY3ZfbWF0Y2hfZXhwcmVzc2lvbihleHByMiwKKwkJCQkJCQkJCQkJCSBzdGF0Mi0+ a2V5cywgc3RhdDItPmV4cHJzLAorCQkJCQkJCQkJCQkJICZjb2xsaWQpOworCQkJaW5kZXhlczJb aWR4XSA9IG1jdl9tYXRjaF9leHByZXNzaW9uKGV4cHIxLAorCQkJCQkJCQkJCQkJIHN0YXQxLT5r ZXlzLCBzdGF0MS0+ZXhwcnMsCisJCQkJCQkJCQkJCQkgJmNvbGxpZCk7CisJCQlyZXZlcnNlW2lk eF0gPSB0cnVlOworCisJCQlleHByczEgPSBsYXBwZW5kKGV4cHJzMSwgZXhwcjIpOworCQkJZXhw cnMyID0gbGFwcGVuZChleHByczIsIGV4cHIxKTsKKwkJfQorCQllbHNlCisJCQkvKiBzaG91bGQg bmV2ZXIgaGFwcGVuICovCisJCQlBc3NlcnQoZmFsc2UpOworCisJCUFzc2VydCgoaW5kZXhlczFb aWR4XSA+PSAwKSAmJgorCQkJICAgKGluZGV4ZXMxW2lkeF0gPCBibXNfbnVtX21lbWJlcnMoc3Rh dDEtPmtleXMpICsgbGlzdF9sZW5ndGgoc3RhdDEtPmV4cHJzKSkpOworCisJCUFzc2VydCgoaW5k ZXhlczJbaWR4XSA+PSAwKSAmJgorCQkJICAgKGluZGV4ZXMyW2lkeF0gPCBibXNfbnVtX21lbWJl cnMoc3RhdDItPmtleXMpICsgbGlzdF9sZW5ndGgoc3RhdDItPmV4cHJzKSkpOworCisJCWlkeCsr OworCX0KKworCS8qCisJICogTWF0Y2ggaXRlbXMgYmV0d2VlbiB0aGUgdHdvIE1DViBsaXN0cy4K KwkgKgorCSAqIFdlIGRvbid0IGtub3cgaWYgdGhlIGpvaW4gY29uZGl0aW9ucyBtYXRjaCBhbGwg YXR0cmlidXRlcyBpbiB0aGUgTUNWLCB0aGUKKwkgKiBvdmVybGFwIG1heSBiZSBqdXN0IG9uIGEg c3Vic2V0IG9mIGF0dHJpYnV0ZXMsIGUuZy4gKGEsYixjKSB2cy4gKGIsYyxkKS4KKwkgKiBTbyB0 aGVyZSBtYXkgYmUgbXVsdGlwbGUgbWF0Y2hlcyBvbiBlaXRoZXIgc2lkZS4gU28gd2UgY2FuJ3Qg b3B0aW1pemUgYnkKKwkgKiBhYm9ydGluZyB0aGUgaW5uZXIgbG9vcCBhZnRlciB0aGUgZmlyc3Qg bWF0Y2gsIGV0Yy4KKwkgKgorCSAqIFhYWCBXZSBjYW4gc2tpcCB0aGUgaXRlbXMgZWxpbWluYXRl ZCBieSB0aGUgYmFzZSByZXN0cmljdGlvbnMsIG9mIGNvdXJzZS4KKwkgKgorCSAqIFhYWCBXZSBt aWdodCBvcHRpbWl6ZSB0aGlzIGluIHR3byB3YXlzLiBXZSBtaWdodCBzb3J0IHRoZSBNQ1YgaXRl bXMgb24KKwkgKiBib3RoIHNpZGVzIHVzaW5nIHRoZSAiam9pbiIgYXR0cmlidXRlcywgYW5kIHRo ZW4gcGVyZm9ybSBzb21ldGhpbmcgbGlrZQorCSAqIG1lcmdlIGpvaW4uIE9yIHdlIG1pZ2h0IGNh bGN1bGF0ZSBhIGhhc2ggZnJvbSB0aGUgam9pbiBjb2x1bW5zLCBhbmQgdGhlbgorCSAqIGNvbXBh cmUgdGhpcyAodG8gZWxpbWluYXRlIHRoZSBtb3N0IGV4cGVuc2l2ZSBlcXVhbGl0eSBmdW5jdGlv bnMpLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBtY3YxLT5uaXRlbXM7IGkrKykKKwl7CisJCWJv b2wJaGFzX251bGxzOworCisJCS8qIHNraXAgaXRlbXMgZWxpbWluYXRlZCBieSByZXN0cmljdGlv bnMgb24gcmVsMSAqLworCQlpZiAoY21hdGNoZXMxICYmICFjbWF0Y2hlczFbaV0pCisJCQljb250 aW51ZTsKKworCQkvKgorCQkgKiBDaGVjayBpZiBhbnkgdmFsdWUgaW4gdGhlIGZpcnN0IE1DViBp dGVtIGlzIE5VTEwsIGJlY2F1c2UgaXQnbGwgYmUKKwkJICogbWlzbWF0Y2ggYW55d2F5LgorCQkg KgorCQkgKiBYWFggVGhpcyBtaWdodCBub3Qgd29yayBmb3Igc29tZSBqb2luIGNsYXVzZXMsIGUu Zy4gSVMgTk9UIERJU1RJTkNUCisJCSAqIEZST00sIGJ1dCB0aG9zZSBhcmUgY3VycmVudGx5IG5v dCBjb25zaWRlcmVkIGNvbXBhdGlibGUgKHdlIG9ubHkKKwkJICogYWxsb3cgT3BFeHByIGF0IHRo ZSBtb21lbnQpLgorCQkgKi8KKwkJaGFzX251bGxzID0gZmFsc2U7CisJCWZvciAoaiA9IDA7IGog PCBsaXN0X2xlbmd0aChjbGF1c2VzKTsgaisrKQorCQkJaGFzX251bGxzIHw9IG1jdjEtPml0ZW1z W2ldLmlzbnVsbFtpbmRleGVzMVtqXV07CisKKwkJaWYgKGhhc19udWxscykKKwkJCWNvbnRpbnVl OworCisJCS8qIGZpbmQgbWF0Y2hlcyBpbiB0aGUgc2Vjb25kIE1DViBsaXN0ICovCisJCWZvciAo aiA9IDA7IGogPCBtY3YyLT5uaXRlbXM7IGorKykKKwkJeworCQkJaW50CQkJaWR4OworCQkJYm9v bAkJaXRlbXNfbWF0Y2ggPSB0cnVlOworCisJCQkvKiBza2lwIGl0ZW1zIGVsaW1pbmF0ZWQgYnkg cmVzdHJpY3Rpb25zIG9uIHJlbDIgKi8KKwkJCWlmIChjbWF0Y2hlczIgJiYgIWNtYXRjaGVzMltq XSkKKwkJCQljb250aW51ZTsKKworCQkJLyoKKwkJCSAqIFhYWCBXZSBjYW4ndCBza2lwIGJhc2Vk IG9uIGV4aXN0aW5nIG1hdGNoZXMyIHZhbHVlLCBiZWNhdXNlIHRoZXJlCisJCQkgKiBtYXkgYmUg ZHVwbGljYXRlcyBpbiB0aGUgZmlyc3QgTUNWLgorCQkJICovCisKKwkJCS8qCisJCQkgKiBFdmFs dWF0ZSBpZiBhbGwgdGhlIGpvaW4gY2xhdXNlcyBtYXRjaCBiZXR3ZWVuIHRoZSB0d28gTUNWIGl0 ZW1zLgorCQkJICoKKwkJCSAqIFhYWCBXZSBtaWdodCBvcHRpbWl6ZSB0aGUgb3JkZXIgb2YgZXZh bHVhdGlvbiwgdXNpbmcgdGhlIGNvc3RzIG9mCisJCQkgKiBvcGVyYXRvciBmdW5jdGlvbnMgZm9y IGluZGl2aWR1YWwgY29sdW1ucy4gSXQgZG9lcyBkZXBlbmQgb24gdGhlCisJCQkgKiBudW1iZXIg b2YgZGlzdGluY3QgdmFsdWVzLCBldGMuCisJCQkgKi8KKwkJCWlkeCA9IDA7CisJCQlmb3JlYWNo IChsYywgY2xhdXNlcykKKwkJCXsKKwkJCQlib29sCW1hdGNoOworCQkJCWludAkJaW5kZXgxID0g aW5kZXhlczFbaWR4XSwKKwkJCQkJCWluZGV4MiA9IGluZGV4ZXMyW2lkeF07CisJCQkJRGF0dW0J dmFsdWUxLAorCQkJCQkJdmFsdWUyOworCQkJCWJvb2wJcmV2ZXJzZV9hcmdzID0gcmV2ZXJzZVtp ZHhdOworCisJCQkJLyogSWYgZWl0aGVyIHZhbHVlIGlzIG51bGwsIGl0J3MgYSBtaXNtYXRjaCAq LworCQkJCWlmIChtY3YyLT5pdGVtc1tqXS5pc251bGxbaW5kZXgyXSkKKwkJCQkJbWF0Y2ggPSBm YWxzZTsKKwkJCQllbHNlCisJCQkJeworCQkJCQl2YWx1ZTEgPSBtY3YxLT5pdGVtc1tpXS52YWx1 ZXNbaW5kZXgxXTsKKwkJCQkJdmFsdWUyID0gbWN2Mi0+aXRlbXNbal0udmFsdWVzW2luZGV4Ml07 CisKKwkJCQkJLyoKKwkJCQkJICogQ2FyZWZ1bCBhYm91dCBvcmRlciBvZiBwYXJhbWV0ZXJzLiBG b3Igc2FtZS10eXBlIGVxdWFsaXR5CisJCQkJCSAqIHRoYXQgc2hvdWxkIG5vdCBtYXR0ZXIsIGJ1 dCBlYXN5IGVub3VnaC4KKwkJCQkJICoKKwkJCQkJICogRklYTUUgVXNlIGFwcHJvcHJpYXRlIGNv bGxhdGlvbi4KKwkJCQkJICovCisJCQkJCWlmIChyZXZlcnNlX2FyZ3MpCisJCQkJCQltYXRjaCA9 IERhdHVtR2V0Qm9vbChGdW5jdGlvbkNhbGwyQ29sbCgmb3Bwcm9jc1tpZHhdLAorCQkJCQkJCQkJ CQkJCQkJICAgSW52YWxpZE9pZCwKKwkJCQkJCQkJCQkJCQkJCSAgIHZhbHVlMiwgdmFsdWUxKSk7 CisJCQkJCWVsc2UKKwkJCQkJCW1hdGNoID0gRGF0dW1HZXRCb29sKEZ1bmN0aW9uQ2FsbDJDb2xs KCZvcHByb2NzW2lkeF0sCisJCQkJCQkJCQkJCQkJCQkgICBJbnZhbGlkT2lkLAorCQkJCQkJCQkJ CQkJCQkJICAgdmFsdWUxLCB2YWx1ZTIpKTsKKwkJCQl9CisKKwkJCQlpdGVtc19tYXRjaCAmPSBt YXRjaDsKKworCQkJCWlmICghaXRlbXNfbWF0Y2gpCisJCQkJCWJyZWFrOworCisJCQkJaWR4Kys7 CisJCQl9CisKKwkJCWlmIChpdGVtc19tYXRjaCkKKwkJCXsKKwkJCQkvKiBYWFggRG8gd2UgbmVl ZCB0byBkbyBzb21ldGhpbmcgYWJvdXQgYmFzZSBmcmVxdWVuY3k/ICovCisJCQkJbWF0Y2hlczFb aV0gPSBtYXRjaGVzMltqXSA9IHRydWU7CisJCQkJcyArPSBtY3YxLT5pdGVtc1tpXS5mcmVxdWVu Y3kgKiBtY3YyLT5pdGVtc1tqXS5mcmVxdWVuY3k7CisJCQl9CisJCX0KKwl9CisKKwltYXRjaGZy ZXExID0gdW5tYXRjaGZyZXExID0gbWN2ZnJlcTEgPSAwLjA7CisJZm9yIChpID0gMDsgaSA8IG1j djEtPm5pdGVtczsgaSsrKQorCXsKKwkJbWN2ZnJlcTEgKz0gbWN2MS0+aXRlbXNbaV0uZnJlcXVl bmN5OworCisJCS8qIGlnbm9yZSBNQ1YgaXRlbXMgZWxpbWluYXRlZCBieSBiYXNlcmVsIGNvbmRp dGlvbnMgKi8KKwkJaWYgKGNtYXRjaGVzMSAmJiAhY21hdGNoZXMxW2ldKQorCQkJY29udGludWU7 CisKKwkJaWYgKG1hdGNoZXMxW2ldKQorCQkJbWF0Y2hmcmVxMSArPSBtY3YxLT5pdGVtc1tpXS5m cmVxdWVuY3k7CisJCWVsc2UKKwkJCXVubWF0Y2hmcmVxMSArPSBtY3YxLT5pdGVtc1tpXS5mcmVx dWVuY3k7CisJfQorCisJLyogbm90IHJlcHJlc2VudGVkIGJ5IHRoZSBNQ1YgKi8KKwlvdGhlcmZy ZXExID0gMS4wIC0gbWN2ZnJlcTE7CisKKwltYXRjaGZyZXEyID0gdW5tYXRjaGZyZXEyID0gbWN2 ZnJlcTIgPSAwLjA7CisJZm9yIChpID0gMDsgaSA8IG1jdjItPm5pdGVtczsgaSsrKQorCXsKKwkJ bWN2ZnJlcTIgKz0gbWN2Mi0+aXRlbXNbaV0uZnJlcXVlbmN5OworCisJCS8qIGlnbm9yZSBNQ1Yg aXRlbXMgZWxpbWluYXRlZCBieSBiYXNlcmVsIGNvbmRpdGlvbnMgKi8KKwkJaWYgKGNtYXRjaGVz MiAmJiAhY21hdGNoZXMyW2ldKQorCQkJY29udGludWU7CisKKwkJaWYgKG1hdGNoZXMyW2ldKQor CQkJbWF0Y2hmcmVxMiArPSBtY3YyLT5pdGVtc1tpXS5mcmVxdWVuY3k7CisJCWVsc2UKKwkJCXVu bWF0Y2hmcmVxMiArPSBtY3YyLT5pdGVtc1tpXS5mcmVxdWVuY3k7CisJfQorCisJLyogbm90IHJl cHJlc2VudGVkIGJ5IHRoZSBNQ1YgKi8KKwlvdGhlcmZyZXEyID0gMS4wIC0gbWN2ZnJlcTI7CisK KwkvKgorCSAqIENvcnJlY3Rpb24gZm9yIE1DViBwYXJ0cyBlbGltaW5hdGVkIGJ5IHRoZSBjb25k aXRpb25zLgorCSAqCisJICogV2UgbmVlZCB0byBiZSBjYXJlZnVsIGFib3V0IGNhc2VzIHdoZXJl IGNvbmRpdGlvbnMgZWxpbWluYXRlZCBhbGwKKwkgKiB0aGUgTUNWIGl0ZW1zLiBXZSBtdXN0IG5v dCBkaXZpZGUgYnkgMC4wLCBiZWNhdXNlIHRoYXQgd291bGQgZWl0aGVyCisJICogcHJvZHVjZSBi b2d1cyB2YWx1ZSBvciB0cmlnZ2VyIGRpdmlzaW9uIGJ5IHplcm8uIEluc3RlYWQgd2Ugc2ltcGx5 CisJICogc2V0IHRoZSBzZWxlY3Rpdml0eSB0byAwLjAsIGJlY2F1c2UgdGhlcmUgY2FuJ3QgYmUg YW55IG1hdGNoZXMuCisJICovCisJaWYgKChtYXRjaGZyZXExICsgdW5tYXRjaGZyZXExKSA+IDAp CisJCXMgPSBzICogbWN2ZnJlcTEgLyAobWF0Y2hmcmVxMSArIHVubWF0Y2hmcmVxMSk7CisJZWxz ZQorCQlzID0gMC4wOworCisJaWYgKChtYXRjaGZyZXEyICsgdW5tYXRjaGZyZXEyKSA+IDApCisJ CXMgPSBzICogbWN2ZnJlcTIgLyAobWF0Y2hmcmVxMiArIHVubWF0Y2hmcmVxMik7CisJZWxzZQor CQlzID0gMC4wOworCisJLyogY2FsY3VsYXRlIG5kaXN0aW5jdCBmb3IgdGhlIGV4cHJlc3Npb24g aW4gam9pbiBjbGF1c2VzIGZvciBlYWNoIHJlbCAqLworCW5kMSA9IGVzdGltYXRlX251bV9ncm91 cHMocm9vdCwgZXhwcnMxLCByZWwxLT5yb3dzLCBOVUxMLCBOVUxMKTsKKwluZDIgPSBlc3RpbWF0 ZV9udW1fZ3JvdXBzKHJvb3QsIGV4cHJzMiwgcmVsMi0+cm93cywgTlVMTCwgTlVMTCk7CisKKwkv KgorCSAqIENvbnNpZGVyIHRoZSBwYXJ0IG9mIHRoZSBkYXRhIG5vdCByZXByZXNlbnRlZCBieSB0 aGUgTUNWIGxpc3RzLgorCSAqCisJICogWFhYIHRoaXMgaXMgYSBiaXQgYm9ndXMsIGJlY2F1c2Ug d2UgZG9uJ3Qga25vdyB3aGF0IGZyYWN0aW9uIG9mCisJICogZGlzdGluY3QgY29tYmluYXRpb25z IGlzIGNvdmVyZWQgYnkgdGhlIE1DViBsaXN0ICh3ZSdyZSBvbmx5CisJICogZGVhbGluZyB3aXRo IHNvbWUgb2YgdGhlIGNvbHVtbnMpLCBzbyB3ZSBjYW4ndCB1c2UgdGhlIHNhbWUKKwkgKiBmb3Jt dWxhciBhcyBlcWpvaW5zZWxfaW5uZXIgZXhhY3RseS4gV2UganVzdCB1c2UgdGhlIGVzdGltYXRl cworCSAqIGZvciB0aGUgd2hvbGUgdGFibGUgLSB0aGlzIGlzIGxpa2VseSBhbiBvdmVyZXN0aW1h dGUsIGJlY2F1c2UKKwkgKiAoYSkgaXRlbXMgbWF5IHJlcGVhdCBpbiB0aGUgTUNWIGxpc3QsIGlm IGl0IGhhcyBtb3JlIGNvbHVtbnMsCisJICogYW5kIChiKSBzb21lIG9mIHRoZSBjb21iaW5hdGlv bnMgbWF5IGJlIHByZXNlbnQgaW4gbm9uLU1DViBkYXRhLgorCSAqCisJICogTW9yZW92ZXIsIHdl IG5lZWQgdG8gbG9vayBhdCB0aGUgY29uZGl0aW9ucy4gRm9yIG5vdyB3ZSBzaW1wbHkKKwkgKiBh c3N1bWUgdGhlIGNvbmRpdGlvbnMgYWZmZWN0IHRoZSBkaXN0aW5jdCBncm91cHMsIGFuZCB1c2Ug dGhhdC4KKwkgKgorCSAqIFhYWCBXZSBtaWdodCBjYWxjdWxhdGUgdGhlIG51bWJlciBvZiBkaXN0 aW5jdCBncm91cHMgaW4gdGhlIE1DViwKKwkgKiBhbmQgdGhlbiB1c2Ugc29tZXRoaW5nIGJldHdl ZW4gKG5kMSAtIGRpc3RpbmN0KE1DVikpIGFuZCAobmQxKSwKKwkgKiB3aGljaCBhcmUgdGhlIHBv c3NpYmxlIGV4dHJlbWUgdmFsdWVzLCBhc3N1bWluZyB0aGUgZXN0aW1hdGVzCisJICogYXJlIGFj Y3VyYXRlLiBNYXliZSBtZWFuIG9yIGdlb21ldHJpYyBtZWFuIHdvdWxkIHdvcms/CisJICoKKwkg KiBYWFggTm90IHN1cmUgbXVsdGlwbHlpbmcgbmRpc3RpbmN0IHdpdGggcHJvYmFiaWxpdGllcyBp cyBnb29kLgorCSAqIE1heWJlIHdlIHNob3VsZCBkbyBzb21ldGhpbmcgbW9yZSBsaWtlIGVzdGlt YXRlX251bV9ncm91cHM/CisJICovCisJbmQxICo9IGNzZWwxOworCW5kMiAqPSBjc2VsMjsKKwor CXRvdGFsc2VsMSA9IHM7CisJdG90YWxzZWwxICs9IHVubWF0Y2hmcmVxMSAqIG90aGVyZnJlcTIg LyBuZDI7CisJdG90YWxzZWwxICs9IG90aGVyZnJlcTEgKiAob3RoZXJmcmVxMiArIHVubWF0Y2hm cmVxMikgLyBuZDI7CisKKy8vCWlmIChuZDIgPiBtY3ZiLT5uaXRlbXMpCisvLwkJdG90YWxzZWwx ICs9IHVubWF0Y2hmcmVxMSAqIG90aGVyZnJlcTIgLyAobmQyIC0gbWN2Yi0+bml0ZW1zKTsKKy8v CWlmIChuZDIgPiBubWF0Y2hlcykKKy8vCQl0b3RhbHNlbDEgKz0gb3RoZXJmcmVxMSAqIChvdGhl cmZyZXEyICsgdW5tYXRjaGZyZXEyKSAvCisvLwkJCShuZDIgLSBubWF0Y2hlcyk7CisKKwl0b3Rh bHNlbDIgPSBzOworCXRvdGFsc2VsMiArPSB1bm1hdGNoZnJlcTIgKiBvdGhlcmZyZXExIC8gbmQx OworCXRvdGFsc2VsMiArPSBvdGhlcmZyZXEyICogKG90aGVyZnJlcTEgKyB1bm1hdGNoZnJlcTEp IC8gbmQxOworCisvLwlpZiAobmQxID4gbWN2YS0+bml0ZW1zKQorLy8JCXRvdGFsc2VsMiArPSB1 bm1hdGNoZnJlcTIgKiBvdGhlcmZyZXExIC8gKG5kMSAtIG1jdmEtPm5pdGVtcyk7CisvLwlpZiAo bmQxID4gbm1hdGNoZXMpCisvLwkJdG90YWxzZWwyICs9IG90aGVyZnJlcTIgKiAob3RoZXJmcmVx MSArIHVubWF0Y2hmcmVxMSkgLworLy8JCQkobmQxIC0gbm1hdGNoZXMpOworCisJcyA9IE1pbih0 b3RhbHNlbDEsIHRvdGFsc2VsMik7CisKKwlyZXR1cm4gczsKK30KKworCisvKgorICogc3RhdGV4 dF9jb21wYXJlX3NpbXBsZQorICoJCUNhbGN1bGF0ZSBqb2luIHNlbGVjdGl2aXR5IHVzaW5nIGEg Y29tYmluYXRpb24gb2YgZXh0ZW5kZWQKKyAqIHN0YXRpc3RpY3MgTUNWIG9uIG9uZSBzaWRlLCBh bmQgc2ltcGxlIHBlci1jb2x1bW4gTUNWIG9uIHRoZSBvdGhlci4KKyAqCisgKiBNb3N0IG9mIHRo ZSBtY3ZfY29tYmluZV9leHRlbmRlZCBjb21tZW50IGFwcGxpZXMgaGVyZSB0b28sIGJ1dCB3ZSBj YW4gbWFrZQorICogc29tZSBzaW1wbGlmaWNhdGlvbnMgYmVjYXVzZSB3ZSBrbm93IHRoZSBzZWNv bmQgKHBlci1jb2x1bW4pIE1DViBpcyBzaW1wbGVyLAorICogY29udGFpbnMgbm8gTlVMTCBvciBk dXBsaWNhdGUgdmFsdWVzLCBldGMuCisgKi8KK1NlbGVjdGl2aXR5CittY3ZfY29tYmluZV9zaW1w bGUoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwgU3RhdGlzdGljRXh0SW5mbyAq c3RhdCwKKwkJCQkgICBBdHRTdGF0c1Nsb3QgKnNzbG90LCBkb3VibGUgc3RhbnVsbGZyYWMsIGRv dWJsZSBuZCwKKwkJCQkgICBib29sIGlzZGVmYXVsdCwgTm9kZSAqY2xhdXNlKQoreworCU1DVkxp c3QgICAgKm1jdjsKKwlpbnQJCQlpLAorCQkJCWo7CisJU2VsZWN0aXZpdHkgcyA9IDA7CisKKwkv KiBtYXRjaCBiaXRtYXBzIGFuZCBzZWxlY3Rpdml0eSBmb3IgYmFzZXJlbCBjb25kaXRpb25zIChp ZiBhbnkpICovCisJTGlzdCAgICpjb25kaXRpb25zID0gTklMOworCWJvb2wgICAqY21hdGNoZXMg PSBOVUxMOworCisJZG91YmxlCWNzZWwgPSAxLjA7CisKKwlib29sICAgKm1hdGNoZXMxID0gTlVM TCwKKwkJICAgKm1hdGNoZXMyID0gTlVMTDsKKworCS8qIGVzdGltYXRlcyBmb3IgdGhlIHR3byBz aWRlcyAqLworCWRvdWJsZQltYXRjaGZyZXExLAorCQkJdW5tYXRjaGZyZXExLAorCQkJb3RoZXJm cmVxMSwKKwkJCW1jdmZyZXExLAorCQkJbmQxLAorCQkJdG90YWxzZWwxOworCisJZG91YmxlIAlt YXRjaGZyZXEyLAorCQkJdW5tYXRjaGZyZXEyLAorCQkJb3RoZXJmcmVxMiwKKwkJCW1jdmZyZXEy LAorCQkJbmQyLAorCQkJdG90YWxzZWwyOworCisJTGlzdCAgICpleHByczEgPSBOSUwsCisJCSAg ICpleHByczIgPSBOSUw7CisKKwkvKiBpbmZvIGFib3V0IGNsYXVzZXMgYW5kIGhvdyB0aGV5IG1h dGNoIHRvIE1DViBzdGF0cyAqLworCUZtZ3JJbmZvCW9wcHJvYzsKKwlpbnQJCQlpbmRleCA9IDA7 CisJYm9vbAkJcmV2ZXJzZSA9IGZhbHNlOworCVJhbmdlVGJsRW50cnkgKnJ0ZSA9IHJvb3QtPnNp bXBsZV9ydGVfYXJyYXlbcmVsLT5yZWxpZF07CisKKwkvKiB3ZSBwaWNrZWQgdGhlIHN0YXRzIHNv IHRoYXQgdGhleSBoYXZlIE1DViBlbmFibGVkICovCisJQXNzZXJ0KHN0YXQtPmtpbmQgPSBTVEFU U19FWFRfTUNWKTsKKworCW1jdiA9IHN0YXRleHRfbWN2X2xvYWQoc3RhdC0+c3RhdE9pZCwgcnRl LT5pbmgpOworCisJLyogc2hvdWxkIG9ubHkgZ2V0IGhlcmUgd2l0aCBNQ1Ygb24gYm90aCBzaWRl cyAqLworCUFzc2VydChtY3YpOworCisJLyogRGV0ZXJtaW5lIHdoaWNoIGJhc2VyZWwgY2xhdXNl cyB0byB1c2UgZm9yIGNvbmRpdGlvbmFsIHByb2JhYmlsaXR5LiAqLworCWNvbmRpdGlvbnMgPSBz dGF0ZXh0X2RldGVybWluZV9qb2luX3Jlc3RyaWN0aW9ucyhyb290LCByZWwsIHN0YXQpOworCisJ LyoKKwkgKiBDYWxjdWxhdGUgbWF0Y2ggYml0bWFwcyBmb3IgcmVzdHJpY3Rpb25zIG9uIGVpdGhl ciBzaWRlIG9mIHRoZSBqb2luCisJICogKHRoZXJlIG1heSBiZSBub25lLCBpbiB3aGljaCBjYXNl IHRoaXMgd2lsbCBiZSBOVUxMKS4KKwkgKi8KKwlpZiAoY29uZGl0aW9ucykKKwl7CisJCWNtYXRj aGVzID0gbWN2X2dldF9tYXRjaF9iaXRtYXAocm9vdCwgY29uZGl0aW9ucywKKwkJCQkJCQkJCQkg c3RhdC0+a2V5cywgc3RhdC0+ZXhwcnMsCisJCQkJCQkJCQkJIG1jdiwgZmFsc2UpOworCQljc2Vs ID0gY2xhdXNlbGlzdF9zZWxlY3Rpdml0eShyb290LCBjb25kaXRpb25zLCByZWwtPnJlbGlkLCAw LCBOVUxMKTsKKwl9CisKKwkvKgorCSAqIE1hdGNoIGJpdG1hcHMgZm9yIG1hdGNoZXMgYmV0d2Vl biBNQ1YgZWxlbWVudHMuIEJ5IGRlZmF1bHQgdGhlcmUKKwkgKiBhcmUgbm8gbWF0Y2hlcywgc28g d2Ugc2V0IGFsbCBpdGVtcyB0byAwLgorCSAqLworCW1hdGNoZXMxID0gKGJvb2wgKikgcGFsbG9j MChzaXplb2YoYm9vbCkgKiBtY3YtPm5pdGVtcyk7CisKKwkvKiBNYXRjaGVzIGZvciB0aGUgc2lk ZSB3aXRoIGp1c3QgcmVndWxhciBzaW5nbGUtY29sdW1uIE1DVi4gKi8KKwltYXRjaGVzMiA9IChi b29sICopIHBhbGxvYzAoc2l6ZW9mKGJvb2wpICogc3Nsb3QtPm52YWx1ZXMpOworCisJLyoKKwkg KiBJbml0aWFsaXplIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjbGF1c2UgYW5kIGhvdyBpdCBtYXRj aGVzIHRvIHRoZQorCSAqIGV4dGVuZGVkIHN0YXRzIHdlIHBpY2tlZC4gV2UgZG8gdGhpcyBvbmx5 IG9uY2UgYmVmb3JlIHByb2Nlc3NpbmcKKwkgKiB0aGUgbGlzdHMsIHNvIHRoYXQgd2UgZG9uJ3Qg aGF2ZSB0byBkbyB0aGF0IGZvciBlYWNoIGl0ZW0gb3Igc28uCisJICovCisJeworCQlPcEV4cHIJ ICAgKm9wZXhwcjsKKwkJTm9kZQkgICAqZXhwcjEsCisJCQkJICAgKmV4cHIyOworCQlCaXRtYXBz ZXQgICpyZWxpZHMxLAorCQkJCSAgICpyZWxpZHMyOworCisJCS8qCisJCSAqIFN0cmlwIHRoZSBS ZXN0cmljdEluZm8gbm9kZSwgZ2V0IHRoZSBhY3R1YWwgY2xhdXNlLgorCQkgKgorCQkgKiBYWFgg Tm90IHN1cmUgaWYgd2UgbmVlZCB0byBjYXJlIGFib3V0IHJlbW92aW5nIG90aGVyIG5vZGUgdHlw ZXMKKwkJICogdG9vIChlLmcuIFJlbGFiZWxUeXBlIGV0Yy4pLiBzdGF0ZXh0X2lzX3N1cHBvcnRl ZF9qb2luX2NsYXVzZQorCQkgKiBtYXRjaGVzIHRoaXMsIGJ1dCBtYXliZSB3ZSBuZWVkIHRvIHJl bGF4IGl0PworCQkgKi8KKwkJaWYgKElzQShjbGF1c2UsIFJlc3RyaWN0SW5mbykpCisJCQljbGF1 c2UgPSAoTm9kZSAqKSAoKFJlc3RyaWN0SW5mbyAqKSBjbGF1c2UpLT5jbGF1c2U7CisKKwkJb3Bl eHByID0gKE9wRXhwciAqKSBjbGF1c2U7CisKKwkJLyogTWFrZSBzdXJlIHdlIGhhdmUgdGhlIGV4 cGVjdGVkIG5vZGUgdHlwZS4gKi8KKwkJQXNzZXJ0KGlzX29wY2xhdXNlKGNsYXVzZSkpOworCQlB c3NlcnQobGlzdF9sZW5ndGgob3BleHByLT5hcmdzKSA9PSAyKTsKKworCQlmbWdyX2luZm8oZ2V0 X29wY29kZShvcGV4cHItPm9wbm8pLCAmb3Bwcm9jKTsKKworCQkvKiBGSVhNRSBzdHJpcCByZWxh YmVsIGV0Yy4gdGhlIHdheSBleGFtaW5lX29wY2xhdXNlX2FyZ3MgZG9lcyAqLworCQlleHByMSA9 IGxpbml0aWFsKG9wZXhwci0+YXJncyk7CisJCWV4cHIyID0gbHNlY29uZChvcGV4cHItPmFyZ3Mp OworCisJCS8qIGRldGVybWluZSBvcmRlciBvZiBjbGF1c2VzIChyZWwxIG9wIHJlbDIpIG9yIChy ZWwyIG9wIHJlbDEpICovCisJCXJlbGlkczEgPSBwdWxsX3Zhcm5vcyhyb290LCBleHByMSk7CisJ CXJlbGlkczIgPSBwdWxsX3Zhcm5vcyhyb290LCBleHByMik7CisKKwkJaWYgKGJtc19zaW5nbGV0 b25fbWVtYmVyKHJlbGlkczEpID09IHJlbC0+cmVsaWQpCisJCXsKKwkJCU9pZAkJY29sbGlkOwor CisJCQlpbmRleCA9IG1jdl9tYXRjaF9leHByZXNzaW9uKGV4cHIxLCBzdGF0LT5rZXlzLCBzdGF0 LT5leHBycywKKwkJCQkJCQkJCQkgJmNvbGxpZCk7CisJCQlyZXZlcnNlID0gZmFsc2U7CisKKwkJ CWV4cHJzMSA9IGxhcHBlbmQoZXhwcnMxLCBleHByMSk7CisJCQlleHByczIgPSBsYXBwZW5kKGV4 cHJzMiwgZXhwcjIpOworCQl9CisJCWVsc2UgaWYgKGJtc19zaW5nbGV0b25fbWVtYmVyKHJlbGlk czIpID09IHJlbC0+cmVsaWQpCisJCXsKKwkJCU9pZAkJY29sbGlkOworCisJCQlpbmRleCA9IG1j dl9tYXRjaF9leHByZXNzaW9uKGV4cHIyLCBzdGF0LT5rZXlzLCBzdGF0LT5leHBycywKKwkJCQkJ CQkJCQkgJmNvbGxpZCk7CisJCQlyZXZlcnNlID0gdHJ1ZTsKKworCQkJZXhwcnMxID0gbGFwcGVu ZChleHByczEsIGV4cHIyKTsKKwkJCWV4cHJzMiA9IGxhcHBlbmQoZXhwcnMyLCBleHByMSk7CisJ CX0KKwkJZWxzZQorCQkJLyogc2hvdWxkIG5ldmVyIGhhcHBlbiAqLworCQkJQXNzZXJ0KGZhbHNl KTsKKworCQlBc3NlcnQoKGluZGV4ID49IDApICYmCisJCQkgICAoaW5kZXggPCBibXNfbnVtX21l bWJlcnMoc3RhdC0+a2V5cykgKyBsaXN0X2xlbmd0aChzdGF0LT5leHBycykpKTsKKwl9CisKKwkv KgorCSAqIE1hdGNoIGl0ZW1zIGJldHdlZW4gdGhlIHR3byBNQ1YgbGlzdHMuCisJICoKKwkgKiBX ZSBkb24ndCBrbm93IGlmIHRoZSBqb2luIGNvbmRpdGlvbnMgbWF0Y2ggYWxsIGF0dHJpYnV0ZXMg aW4gdGhlIE1DViwgdGhlCisJICogb3ZlcmxhcCBtYXkgYmUganVzdCBvbiBhIHN1YnNldCBvZiBh dHRyaWJ1dGVzLCBlLmcuIChhLGIsYykgdnMuIChiLGMsZCkuCisJICogU28gdGhlcmUgbWF5IGJl IG11bHRpcGxlIG1hdGNoZXMgb24gZWl0aGVyIHNpZGUuIFNvIHdlIGNhbid0IG9wdGltaXplIGJ5 CisJICogYWJvcnRpbmcgdGhlIGlubmVyIGxvb3AgYWZ0ZXIgdGhlIGZpcnN0IG1hdGNoLCBldGMu CisJICoKKwkgKiBYWFggV2UgY2FuIHNraXAgdGhlIGl0ZW1zIGVsaW1pbmF0ZWQgYnkgdGhlIGJh c2UgcmVzdHJpY3Rpb25zLCBvZiBjb3Vyc2UuCisJICoKKwkgKiBYWFggV2UgbWlnaHQgb3B0aW1p emUgdGhpcyBpbiB0d28gd2F5cy4gV2UgbWlnaHQgc29ydCB0aGUgTUNWIGl0ZW1zIG9uCisJICog Ym90aCBzaWRlcyB1c2luZyB0aGUgImpvaW4iIGF0dHJpYnV0ZXMsIGFuZCB0aGVuIHBlcmZvcm0g c29tZXRoaW5nIGxpa2UKKwkgKiBtZXJnZSBqb2luLiBPciB3ZSBtaWdodCBjYWxjdWxhdGUgYSBo YXNoIGZyb20gdGhlIGpvaW4gY29sdW1ucywgYW5kIHRoZW4KKwkgKiBjb21wYXJlIHRoaXMgKHRv IGVsaW1pbmF0ZSB0aGUgbW9zdCBleHBlbnNpdmUgZXF1YWxpdHkgZnVuY3Rpb25zKS4KKwkgKi8K Kwlmb3IgKGkgPSAwOyBpIDwgbWN2LT5uaXRlbXM7IGkrKykKKwl7CisJCS8qIHNraXAgaXRlbXMg ZWxpbWluYXRlZCBieSByZXN0cmljdGlvbnMgb24gcmVsMSAqLworCQlpZiAoY21hdGNoZXMgJiYg IWNtYXRjaGVzW2ldKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogV2UgY2FuIGNoZWNrIG1j djEtPml0ZW1zW2ldLmlzbnVsbFtpbmRleDFdIGhlcmUsIGJlY2F1c2UgaXQnbGwgYmUgYQorCQkg KiBtaXNtYXRjaCBhbnl3YXkgKHRoZSBzaW1wbGUgTUNWIGRvZXMgbm90IGNvbnRhaW4gTlVMTHMp LgorCQkgKi8KKwkJaWYgKG1jdi0+aXRlbXNbaV0uaXNudWxsW2luZGV4XSkKKwkJCWNvbnRpbnVl OworCisJCS8qIGZpbmQgbWF0Y2hlcyBpbiB0aGUgc2Vjb25kIE1DViBsaXN0ICovCisJCWZvciAo aiA9IDA7IGogPCBzc2xvdC0+bnZhbHVlczsgaisrKQorCQl7CisJCQlib29sCW1hdGNoOworCQkJ RGF0dW0JdmFsdWUxID0gbWN2LT5pdGVtc1tpXS52YWx1ZXNbaW5kZXhdOworCQkJRGF0dW0JdmFs dWUyID0gc3Nsb3QtPnZhbHVlc1tqXTsKKworCQkJLyoKKwkJCSAqIEV2YWx1YXRlIHRoZSBqb2lu IGNsYXVzZSBiZXR3ZWVuIHRoZSB0d28gTUNWIGxpc3RzLiBXZSBkb24ndAorCQkJICogbmVlZCB0 byBkZWFsIHdpdGggTlVMTCB2YWx1ZXMgaGVyZSAtIHdlJ3ZlIGFscmVhZHkgY2hlY2tlZCBmb3IK KwkJCSAqIE5VTEwgaW4gdGhlIGV4dGVuZGVkIHN0YXRpc3RpY3MgZWFybGllciwgYW5kIHRoZSBz aW1wbGUgTUNWCisJCQkgKiBkb2VzIG5vdCBjb250YWluIE5VTEwgdmFsdWVzLgorCQkJICoKKwkJ CSAqIENhcmVmdWwgYWJvdXQgb3JkZXIgb2YgcGFyYW1ldGVycy4gRm9yIHNhbWUtdHlwZSBlcXVh bGl0eQorCQkJICogdGhhdCBzaG91bGQgbm90IG1hdHRlciwgYnV0IGVhc3kgZW5vdWdoLgorCQkJ ICoKKwkJCSAqIEZJWE1FIFVzZSBhcHByb3ByaWF0ZSBjb2xsYXRpb24uCisJCQkgKi8KKwkJCWlm IChyZXZlcnNlKQorCQkJCW1hdGNoID0gRGF0dW1HZXRCb29sKEZ1bmN0aW9uQ2FsbDJDb2xsKCZv cHByb2MsCisJCQkJCQkJCQkJCQkJICAgSW52YWxpZE9pZCwKKwkJCQkJCQkJCQkJCQkgICB2YWx1 ZTIsIHZhbHVlMSkpOworCQkJZWxzZQorCQkJCW1hdGNoID0gRGF0dW1HZXRCb29sKEZ1bmN0aW9u Q2FsbDJDb2xsKCZvcHByb2MsCisJCQkJCQkJCQkJCQkJICAgSW52YWxpZE9pZCwKKwkJCQkJCQkJ CQkJCQkgICB2YWx1ZTEsIHZhbHVlMikpOworCisJCQlpZiAobWF0Y2gpCisJCQl7CisJCQkJLyog WFhYIERvIHdlIG5lZWQgdG8gZG8gc29tZXRoaW5nIGFib3V0IGJhc2UgZnJlcXVlbmN5PyAqLwor CQkJCW1hdGNoZXMxW2ldID0gbWF0Y2hlczJbal0gPSB0cnVlOworCQkJCXMgKz0gbWN2LT5pdGVt c1tpXS5mcmVxdWVuY3kgKiBzc2xvdC0+bnVtYmVyc1tqXTsKKworCQkJCS8qCisJCQkJICogV2Ug a25vdyB0aGVyZSBjYW4gYmUganVzdCBhIHNpbmdsZSBtYXRjaCBpbiB0aGUgcmVndWxhcgorCQkJ CSAqIE1DViBsaXN0LCBzbyB3ZSBjYW4gYWJvcnQgdGhlIGlubmVyIGxvb3AuCisJCQkJICovCisJ CQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwltYXRjaGZyZXExID0gdW5tYXRjaGZyZXExID0g bWN2ZnJlcTEgPSAwLjA7CisJZm9yIChpID0gMDsgaSA8IG1jdi0+bml0ZW1zOyBpKyspCisJewor CQltY3ZmcmVxMSArPSBtY3YtPml0ZW1zW2ldLmZyZXF1ZW5jeTsKKworCQkvKiBpZ25vcmUgTUNW IGl0ZW1zIGVsaW1pbmF0ZWQgYnkgYmFzZXJlbCBjb25kaXRpb25zICovCisJCWlmIChjbWF0Y2hl cyAmJiAhY21hdGNoZXNbaV0pCisJCQljb250aW51ZTsKKworCQlpZiAobWF0Y2hlczFbaV0pCisJ CQltYXRjaGZyZXExICs9IG1jdi0+aXRlbXNbaV0uZnJlcXVlbmN5OworCQllbHNlCisJCQl1bm1h dGNoZnJlcTEgKz0gbWN2LT5pdGVtc1tpXS5mcmVxdWVuY3k7CisJfQorCisJLyogbm90IHJlcHJl c2VudGVkIGJ5IHRoZSBNQ1YgKi8KKwlvdGhlcmZyZXExID0gMS4wIC0gbWN2ZnJlcTE7CisKKwlt YXRjaGZyZXEyID0gdW5tYXRjaGZyZXEyID0gbWN2ZnJlcTIgPSAwLjA7CisJZm9yIChpID0gMDsg aSA8IHNzbG90LT5udmFsdWVzOyBpKyspCisJeworCQltY3ZmcmVxMiArPSBzc2xvdC0+bnVtYmVy c1tpXTsKKworCQlpZiAobWF0Y2hlczJbaV0pCisJCQltYXRjaGZyZXEyICs9IHNzbG90LT5udW1i ZXJzW2ldOworCQllbHNlCisJCQl1bm1hdGNoZnJlcTIgKz0gc3Nsb3QtPm51bWJlcnNbaV07CisJ fQorCisJLyogbm90IHJlcHJlc2VudGVkIGJ5IHRoZSBNQ1YgKi8KKwlvdGhlcmZyZXEyID0gMS4w IC0gbWN2ZnJlcTI7CisKKwkvKgorCSAqIENvcnJlY3Rpb24gZm9yIE1DViBwYXJ0cyBlbGltaW5h dGVkIGJ5IHRoZSBjb25kaXRpb25zLgorCSAqCisJICogV2UgbmVlZCB0byBiZSBjYXJlZnVsIGFi b3V0IGNhc2VzIHdoZXJlIGNvbmRpdGlvbnMgZWxpbWluYXRlZCBhbGwKKwkgKiB0aGUgTUNWIGl0 ZW1zLiBXZSBtdXN0IG5vdCBkaXZpZGUgYnkgMC4wLCBiZWNhdXNlIHRoYXQgd291bGQgZWl0aGVy CisJICogcHJvZHVjZSBib2d1cyB2YWx1ZSBvciB0cmlnZ2VyIGRpdmlzaW9uIGJ5IHplcm8uIElu c3RlYWQgd2Ugc2ltcGx5CisJICogc2V0IHRoZSBzZWxlY3Rpdml0eSB0byAwLjAsIGJlY2F1c2Ug dGhlcmUgY2FuJ3QgYmUgYW55IG1hdGNoZXMuCisJICovCisJaWYgKChtYXRjaGZyZXExICsgdW5t YXRjaGZyZXExKSA+IDApCisJCXMgPSBzICogbWN2ZnJlcTEgLyAobWF0Y2hmcmVxMSArIHVubWF0 Y2hmcmVxMSk7CisJZWxzZQorCQlzID0gMC4wOworCisJaWYgKChtYXRjaGZyZXEyICsgdW5tYXRj aGZyZXEyKSA+IDApCisJCXMgPSBzICogbWN2ZnJlcTIgLyAobWF0Y2hmcmVxMiArIHVubWF0Y2hm cmVxMik7CisJZWxzZQorCQlzID0gMC4wOworCisJLyogY2FsY3VsYXRlIG5kaXN0aW5jdCBmb3Ig dGhlIGV4cHJlc3Npb24gaW4gam9pbiBjbGF1c2VzIGZvciBlYWNoIHJlbCAqLworCW5kMSA9IGVz dGltYXRlX251bV9ncm91cHMocm9vdCwgZXhwcnMxLCByZWwtPnJvd3MsIE5VTEwsIE5VTEwpOwor CW5kMiA9IG5kOworCisJLyoKKwkgKiBDb25zaWRlciB0aGUgcGFydCBvZiB0aGUgZGF0YSBub3Qg cmVwcmVzZW50ZWQgYnkgdGhlIE1DViBsaXN0cy4KKwkgKgorCSAqIFhYWCB0aGlzIGlzIGEgYml0 IGJvZ3VzLCBiZWNhdXNlIHdlIGRvbid0IGtub3cgd2hhdCBmcmFjdGlvbiBvZgorCSAqIGRpc3Rp bmN0IGNvbWJpbmF0aW9ucyBpcyBjb3ZlcmVkIGJ5IHRoZSBNQ1YgbGlzdCAod2UncmUgb25seQor CSAqIGRlYWxpbmcgd2l0aCBzb21lIG9mIHRoZSBjb2x1bW5zKSwgc28gd2UgY2FuJ3QgdXNlIHRo ZSBzYW1lCisJICogZm9ybXVsYXIgYXMgZXFqb2luc2VsX2lubmVyIGV4YWN0bHkuIFdlIGp1c3Qg dXNlIHRoZSBlc3RpbWF0ZXMKKwkgKiBmb3IgdGhlIHdob2xlIHRhYmxlIC0gdGhpcyBpcyBsaWtl bHkgYW4gb3ZlcmVzdGltYXRlLCBiZWNhdXNlCisJICogKGEpIGl0ZW1zIG1heSByZXBlYXQgaW4g dGhlIE1DViBsaXN0LCBpZiBpdCBoYXMgbW9yZSBjb2x1bW5zLAorCSAqIGFuZCAoYikgc29tZSBv ZiB0aGUgY29tYmluYXRpb25zIG1heSBiZSBwcmVzZW50IGluIG5vbi1NQ1YgZGF0YS4KKwkgKgor CSAqIE1vcmVvdmVyLCB3ZSBuZWVkIHRvIGxvb2sgYXQgdGhlIGNvbmRpdGlvbnMuIEZvciBub3cg d2Ugc2ltcGx5CisJICogYXNzdW1lIHRoZSBjb25kaXRpb25zIGFmZmVjdCB0aGUgZGlzdGluY3Qg Z3JvdXBzLCBhbmQgdXNlIHRoYXQuCisJICoKKwkgKiBYWFggV2UgbWlnaHQgY2FsY3VsYXRlIHRo ZSBudW1iZXIgb2YgZGlzdGluY3QgZ3JvdXBzIGluIHRoZSBNQ1YsCisJICogYW5kIHRoZW4gdXNl IHNvbWV0aGluZyBiZXR3ZWVuIChuZDEgLSBkaXN0aW5jdChNQ1YpKSBhbmQgKG5kMSksCisJICog d2hpY2ggYXJlIHRoZSBwb3NzaWJsZSBleHRyZW1lIHZhbHVlcywgYXNzdW1pbmcgdGhlIGVzdGlt YXRlcworCSAqIGFyZSBhY2N1cmF0ZS4gTWF5YmUgbWVhbiBvciBnZW9tZXRyaWMgbWVhbiB3b3Vs ZCB3b3JrPworCSAqCisJICogWFhYIE5vdCBzdXJlIG11bHRpcGx5aW5nIG5kaXN0aW5jdCB3aXRo IHByb2JhYmlsaXRpZXMgaXMgZ29vZC4KKwkgKiBNYXliZSB3ZSBzaG91bGQgZG8gc29tZXRoaW5n IG1vcmUgbGlrZSBlc3RpbWF0ZV9udW1fZ3JvdXBzPworCSAqLworCW5kMSAqPSBjc2VsOworCisJ dG90YWxzZWwxID0gczsKKwl0b3RhbHNlbDEgKz0gdW5tYXRjaGZyZXExICogb3RoZXJmcmVxMiAv IG5kMjsKKwl0b3RhbHNlbDEgKz0gb3RoZXJmcmVxMSAqIChvdGhlcmZyZXEyICsgdW5tYXRjaGZy ZXEyKSAvIG5kMjsKKworLy8JaWYgKG5kMiA+IG1jdmItPm5pdGVtcykKKy8vCQl0b3RhbHNlbDEg Kz0gdW5tYXRjaGZyZXExICogb3RoZXJmcmVxMiAvIChuZDIgLSBtY3ZiLT5uaXRlbXMpOworLy8J aWYgKG5kMiA+IG5tYXRjaGVzKQorLy8JCXRvdGFsc2VsMSArPSBvdGhlcmZyZXExICogKG90aGVy ZnJlcTIgKyB1bm1hdGNoZnJlcTIpIC8KKy8vCQkJKG5kMiAtIG5tYXRjaGVzKTsKKworCXRvdGFs c2VsMiA9IHM7CisJdG90YWxzZWwyICs9IHVubWF0Y2hmcmVxMiAqIG90aGVyZnJlcTEgLyBuZDE7 CisJdG90YWxzZWwyICs9IG90aGVyZnJlcTIgKiAob3RoZXJmcmVxMSArIHVubWF0Y2hmcmVxMSkg LyBuZDE7CisKKy8vCWlmIChuZDEgPiBtY3ZhLT5uaXRlbXMpCisvLwkJdG90YWxzZWwyICs9IHVu bWF0Y2hmcmVxMiAqIG90aGVyZnJlcTEgLyAobmQxIC0gbWN2YS0+bml0ZW1zKTsKKy8vCWlmIChu ZDEgPiBubWF0Y2hlcykKKy8vCQl0b3RhbHNlbDIgKz0gb3RoZXJmcmVxMiAqIChvdGhlcmZyZXEx ICsgdW5tYXRjaGZyZXExKSAvCisvLwkJCShuZDEgLSBubWF0Y2hlcyk7CisKKwlzID0gTWluKHRv dGFsc2VsMSwgdG90YWxzZWwyKTsKKworCXJldHVybiBzOworfQpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvc3RhdGlzdGljcy9leHRlbmRlZF9zdGF0c19pbnRlcm5hbC5oIGIvc3JjL2luY2x1ZGUv c3RhdGlzdGljcy9leHRlbmRlZF9zdGF0c19pbnRlcm5hbC5oCmluZGV4IDhlZWQ5YjMzOGQuLmE4 NWY4OTZkNTMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0YXRpc3RpY3MvZXh0ZW5kZWRfc3Rh dHNfaW50ZXJuYWwuaAorKysgYi9zcmMvaW5jbHVkZS9zdGF0aXN0aWNzL2V4dGVuZGVkX3N0YXRz X2ludGVybmFsLmgKQEAgLTE1LDYgKzE1LDcgQEAKICNkZWZpbmUgRVhURU5ERURfU1RBVFNfSU5U RVJOQUxfSAogCiAjaW5jbHVkZSAic3RhdGlzdGljcy9zdGF0aXN0aWNzLmgiCisjaW5jbHVkZSAi dXRpbHMvbHN5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvc29ydHN1cHBvcnQuaCIKIAogdHlw ZWRlZiBzdHJ1Y3QKQEAgLTEyNyw0ICsxMjgsMjMgQEAgZXh0ZXJuIFNlbGVjdGl2aXR5IG1jdl9j bGF1c2Vfc2VsZWN0aXZpdHlfb3IoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCQkJCSBTZWxl Y3Rpdml0eSAqb3ZlcmxhcF9iYXNlc2VsLAogCQkJCQkJCQkJCQkgU2VsZWN0aXZpdHkgKnRvdGFs c2VsKTsKIAorZXh0ZXJuIFNlbGVjdGl2aXR5IG1jdl9jb21iaW5lX3NpbXBsZShQbGFubmVySW5m byAqcm9vdCwKKwkJCQkJCQkJCSAgUmVsT3B0SW5mbyAqcmVsLAorCQkJCQkJCQkJICBTdGF0aXN0 aWNFeHRJbmZvICpzdGF0LAorCQkJCQkJCQkJICBBdHRTdGF0c1Nsb3QgKnNzbG90LAorCQkJCQkJ CQkJICBkb3VibGUgc3RhbnVsbGZyYWMsCisJCQkJCQkJCQkgIGRvdWJsZSBuZCwgYm9vbCBpc2Rl ZmF1bHQsCisJCQkJCQkJCQkgIE5vZGUgKmNsYXVzZSk7CisKK2V4dGVybiBTZWxlY3Rpdml0eSBt Y3ZfY29tYmluZV9leHRlbmRlZChQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkJCQlSZWxPcHRJ bmZvICpyZWwxLAorCQkJCQkJCQkJCVJlbE9wdEluZm8gKnJlbDIsCisJCQkJCQkJCQkJU3RhdGlz dGljRXh0SW5mbyAqc3RhdDEsCisJCQkJCQkJCQkJU3RhdGlzdGljRXh0SW5mbyAqc3RhdDIsCisJ CQkJCQkJCQkJTGlzdCAqY2xhdXNlcyk7CisKK2V4dGVybiBMaXN0ICpzdGF0ZXh0X2RldGVybWlu ZV9qb2luX3Jlc3RyaWN0aW9ucyhQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkJCQkJCSBSZWxP cHRJbmZvICpyZWwsCisJCQkJCQkJCQkJCQkgU3RhdGlzdGljRXh0SW5mbyAqaW5mbyk7CisKICNl bmRpZgkJCQkJCQkvKiBFWFRFTkRFRF9TVEFUU19JTlRFUk5BTF9IICovCmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS9zdGF0aXN0aWNzL3N0YXRpc3RpY3MuaCBiL3NyYy9pbmNsdWRlL3N0YXRpc3Rp Y3Mvc3RhdGlzdGljcy5oCmluZGV4IDdmMmJmMTg3MTYuLjYwYjIyMjAyOGQgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL3N0YXRpc3RpY3Mvc3RhdGlzdGljcy5oCisrKyBiL3NyYy9pbmNsdWRlL3N0 YXRpc3RpY3Mvc3RhdGlzdGljcy5oCkBAIC0xMjcsNCArMTI3LDE2IEBAIGV4dGVybiBTdGF0aXN0 aWNFeHRJbmZvICpjaG9vc2VfYmVzdF9zdGF0aXN0aWNzKExpc3QgKnN0YXRzLCBjaGFyIHJlcXVp cmVka2luZCwKIAkJCQkJCQkJCQkJCWludCBuY2xhdXNlcyk7CiBleHRlcm4gSGVhcFR1cGxlIHN0 YXRleHRfZXhwcmVzc2lvbnNfbG9hZChPaWQgc3R4b2lkLCBib29sIGluaCwgaW50IGlkeCk7CiAK K2V4dGVybiBTdGF0aXN0aWNFeHRJbmZvICpzdGF0ZXh0X2ZpbmRfbWF0Y2hpbmdfbWN2KFBsYW5u ZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCisJCQkJCQkJCQkJICAgQml0bWFwc2V0ICph dHRudW1zLCBMaXN0ICpleHBycyk7CisKK2V4dGVybiBib29sIHN0YXRleHRfdHJ5X2pvaW5fZXN0 aW1hdGVzKFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpjbGF1c2VzLCBpbnQgdmFyUmVsaWQsCisJ CQkJCQkJCQkgICBKb2luVHlwZSBqb2ludHlwZSwgU3BlY2lhbEpvaW5JbmZvICpzamluZm8sCisJ CQkJCQkJCQkgICBCaXRtYXBzZXQgKmVzdGltYXRlZGNsYXVzZXMpOworCitleHRlcm4gU2VsZWN0 aXZpdHkgc3RhdGV4dF9jbGF1c2VsaXN0X2pvaW5fc2VsZWN0aXZpdHkoUGxhbm5lckluZm8gKnJv b3QsIExpc3QgKmNsYXVzZXMsCisJCQkJCQkJCQkJCQkJICAgaW50IHZhclJlbGlkLAorCQkJCQkJ CQkJCQkJCSAgIEpvaW5UeXBlIGpvaW50eXBlLCBTcGVjaWFsSm9pbkluZm8gKnNqaW5mbywKKwkJ CQkJCQkJCQkJCQkgICBCaXRtYXBzZXQgKiplc3RpbWF0ZWRjbGF1c2VzKTsKKwogI2VuZGlmCQkJ CQkJCS8qIFNUQVRJU1RJQ1NfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9zdGF0c19leHQub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zdGF0c19leHQu b3V0CmluZGV4IDEwOTAzYmRhYjAuLjk1MjQ2NTIyYmIgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvc3RhdHNfZXh0Lm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL3N0YXRzX2V4dC5vdXQKQEAgLTMwNzQsNiArMzA3NCwxNzMgQEAgU0VMRUNUIGMwIEZST00g T05MWSBleHByX3N0YXRzX2luY29tcGF0aWJsZV90ZXN0IFdIRVJFCiAoMCByb3dzKQogCiBEUk9Q IFRBQkxFIGV4cHJfc3RhdHNfaW5jb21wYXRpYmxlX3Rlc3Q7CistLSBUZXN0IGpvaW4gZXN0aW1h dGVzLgorQ1JFQVRFIFRBQkxFIGpvaW5fdGVzdF8xIChhIGludCwgYiBpbnQsIGMgaW50KTsKK0NS RUFURSBUQUJMRSBqb2luX3Rlc3RfMiAoYSBpbnQsIGIgaW50LCBjIGludCk7CitJTlNFUlQgSU5U TyBqb2luX3Rlc3RfMSBTRUxFQ1QgbW9kKGksMTApLCBtb2QoaSwxMCksIG1vZChpLDEwKSBGUk9N IGdlbmVyYXRlX3NlcmllcygxLDEwMDApIHMoaSk7CitJTlNFUlQgSU5UTyBqb2luX3Rlc3RfMiBT RUxFQ1QgbW9kKGksMTApLCBtb2QoaSwxMCksIG1vZChpLDEwKSBGUk9NIGdlbmVyYXRlX3Nlcmll cygxLDEwMDApIHMoaSk7CitBTkFMWVpFIGpvaW5fdGVzdF8xOworQU5BTFlaRSBqb2luX3Rlc3Rf MjsKK1NFTEVDVCAqIEZST00gY2hlY2tfZXN0aW1hdGVkX3Jvd3MoJ3NlbGVjdCAqIGZyb20gam9p bl90ZXN0XzEgajEgam9pbiBqb2luX3Rlc3RfMiBqMiBvbiAoKGoxLmEgKyAxID0gajIuYSArIDEp IGFuZCAoajEuYiA9IGoyLmIpKScpOworIGVzdGltYXRlZCB8IGFjdHVhbCAKKy0tLS0tLS0tLS0t Ky0tLS0tLS0tCisgICAgICAgNTAwIHwgMTAwMDAwCisoMSByb3cpCisKK1NFTEVDVCAqIEZST00g Y2hlY2tfZXN0aW1hdGVkX3Jvd3MoJ3NlbGVjdCAqIGZyb20gam9pbl90ZXN0XzEgajEgam9pbiBq b2luX3Rlc3RfMiBqMiBvbiAoKGoxLmEgKyAxID0gajIuYSArIDEpIGFuZCAoajEuYiA9IGoyLmIp KSB3aGVyZSBqMS5jIDwgNScpOworIGVzdGltYXRlZCB8IGFjdHVhbCAKKy0tLS0tLS0tLS0tKy0t LS0tLS0tCisgICAgICAgMjUwIHwgIDUwMDAwCisoMSByb3cpCisKK1NFTEVDVCAqIEZST00gY2hl Y2tfZXN0aW1hdGVkX3Jvd3MoJ3NlbGVjdCAqIGZyb20gam9pbl90ZXN0XzEgajEgam9pbiBqb2lu X3Rlc3RfMiBqMiBvbiAoKGoxLmEgKyAxID0gajIuYSArIDEpIGFuZCAoajEuYiA9IGoyLmIpKSB3 aGVyZSBqMS5jIDwgMCcpOworIGVzdGltYXRlZCB8IGFjdHVhbCAKKy0tLS0tLS0tLS0tKy0tLS0t LS0tCisgICAgICAgICAxIHwgICAgICAwCisoMSByb3cpCisKK1NFTEVDVCAqIEZST00gY2hlY2tf ZXN0aW1hdGVkX3Jvd3MoJ3NlbGVjdCAqIGZyb20gam9pbl90ZXN0XzEgajEgam9pbiBqb2luX3Rl c3RfMiBqMiBvbiAoKGoxLmEgKyAxID0gajIuYSArIDEpIGFuZCAoajEuYiA9IGoyLmIpKSB3aGVy ZSBqMS5jIDwgNSBhbmQgajIuYyA8IDMnKTsKKyBlc3RpbWF0ZWQgfCBhY3R1YWwgCistLS0tLS0t LS0tLSstLS0tLS0tLQorICAgICAgICA3NSB8ICAzMDAwMAorKDEgcm93KQorCitTRUxFQ1QgKiBG Uk9NIGNoZWNrX2VzdGltYXRlZF9yb3dzKCdzZWxlY3QgKiBmcm9tIGpvaW5fdGVzdF8xIGoxIGpv aW4gam9pbl90ZXN0XzIgajIgb24gKChqMS5hICsgMSA9IGoyLmEgKyAxKSBhbmQgKGoxLmIgPSBq Mi5iKSkgd2hlcmUgajEuYyA8IDUgYW5kIGoyLmMgPiA1Jyk7CisgZXN0aW1hdGVkIHwgYWN0dWFs IAorLS0tLS0tLS0tLS0rLS0tLS0tLS0KKyAgICAgICAxMDAgfCAgICAgIDAKKygxIHJvdykKKwor LS0gY2FuJ3QgYmUgaW1wcm92ZWQgZHVlIHRvIHRoZSBvcHRpbWl6YXRpb24gaW4gY2xhdXNlbGlz dF9zZWxlY3Rpdml0eV9leHQsCistLSB3aGljaCBza2lwcyBjYXNlcyB3aXRoIGEgc2luZ2xlIChq b2luKSBjbGF1c2UKK1NFTEVDVCAqIEZST00gY2hlY2tfZXN0aW1hdGVkX3Jvd3MoJ3NlbGVjdCAq IGZyb20gam9pbl90ZXN0XzEgajEgam9pbiBqb2luX3Rlc3RfMiBqMiBvbiAoKGoxLmEgKyAxID0g ajIuYSArIDEpKSB3aGVyZSBqMS5jIDwgNScpOworIGVzdGltYXRlZCB8IGFjdHVhbCAKKy0tLS0t LS0tLS0tKy0tLS0tLS0tCisgICAgICAyNTAwIHwgIDUwMDAwCisoMSByb3cpCisKK1NFTEVDVCAq IEZST00gY2hlY2tfZXN0aW1hdGVkX3Jvd3MoJ3NlbGVjdCAqIGZyb20gam9pbl90ZXN0XzEgajEg am9pbiBqb2luX3Rlc3RfMiBqMiBvbiAoKGoxLmEgKyAxID0gajIuYSArIDEpKSB3aGVyZSBqMS5j IDwgNSBhbmQgajIuYyA8IDUnKTsKKyBlc3RpbWF0ZWQgfCBhY3R1YWwgCistLS0tLS0tLS0tLSst LS0tLS0tLQorICAgICAgMTI1MCB8ICA1MDAwMAorKDEgcm93KQorCitTRUxFQ1QgKiBGUk9NIGNo ZWNrX2VzdGltYXRlZF9yb3dzKCdzZWxlY3QgKiBmcm9tIGpvaW5fdGVzdF8xIGoxIGpvaW4gam9p bl90ZXN0XzIgajIgb24gKChqMS5hICsgMSA9IGoyLmEgKyAxKSkgd2hlcmUgajEuYyA8IDUgYW5k IGoyLmMgPiA1Jyk7CisgZXN0aW1hdGVkIHwgYWN0dWFsIAorLS0tLS0tLS0tLS0rLS0tLS0tLS0K KyAgICAgIDEwMDAgfCAgICAgIDAKKygxIHJvdykKKworU0VMRUNUICogRlJPTSBjaGVja19lc3Rp bWF0ZWRfcm93cygnc2VsZWN0ICogZnJvbSBqb2luX3Rlc3RfMSBqMSBqb2luIGpvaW5fdGVzdF8y IGoyIG9uIChqMS5hICsgMSA9IGoyLmEpIHdoZXJlIGoxLmMgPCA1Jyk7CisgZXN0aW1hdGVkIHwg YWN0dWFsIAorLS0tLS0tLS0tLS0rLS0tLS0tLS0KKyAgICAgIDI1MDAgfCAgNTAwMDAKKygxIHJv dykKKworU0VMRUNUICogRlJPTSBjaGVja19lc3RpbWF0ZWRfcm93cygnc2VsZWN0ICogZnJvbSBq b2luX3Rlc3RfMSBqMSBqb2luIGpvaW5fdGVzdF8yIGoyIG9uIChqMS5hICsgMSA9IGoyLmEgKyAx KSB3aGVyZSBqMS5jIDwgNScpOworIGVzdGltYXRlZCB8IGFjdHVhbCAKKy0tLS0tLS0tLS0tKy0t LS0tLS0tCisgICAgICAyNTAwIHwgIDUwMDAwCisoMSByb3cpCisKKy0tIGNyZWF0ZSBleHRlbmRl ZCBzdGF0aXN0aWNzIG9uIHRoZSBqb2luL3doZXJlIGNvbHVtbnMKK0NSRUFURSBTVEFUSVNUSUNT IGpvaW5fc3RhdHNfMSBPTiBhLCBiLCBjLCAoYSsxKSwgKGIrMSkgRlJPTSBqb2luX3Rlc3RfMTsK K0NSRUFURSBTVEFUSVNUSUNTIGpvaW5fc3RhdHNfMiBPTiBhLCBiLCBjLCAoYSsxKSwgKGIrMSkg RlJPTSBqb2luX3Rlc3RfMjsKK0FOQUxZWkUgam9pbl90ZXN0XzE7CitBTkFMWVpFIGpvaW5fdGVz dF8yOworU0VMRUNUICogRlJPTSBjaGVja19lc3RpbWF0ZWRfcm93cygnc2VsZWN0ICogZnJvbSBq b2luX3Rlc3RfMSBqMSBqb2luIGpvaW5fdGVzdF8yIGoyIG9uICgoajEuYSArIDEgPSBqMi5hICsg MSkgYW5kIChqMS5iID0gajIuYikpJyk7CisgZXN0aW1hdGVkIHwgYWN0dWFsIAorLS0tLS0tLS0t LS0rLS0tLS0tLS0KKyAgICAxMDAwMDAgfCAxMDAwMDAKKygxIHJvdykKKworU0VMRUNUICogRlJP TSBjaGVja19lc3RpbWF0ZWRfcm93cygnc2VsZWN0ICogZnJvbSBqb2luX3Rlc3RfMSBqMSBqb2lu IGpvaW5fdGVzdF8yIGoyIG9uICgoajEuYSArIDEgPSBqMi5hICsgMSkgYW5kIChqMS5iID0gajIu YikpIHdoZXJlIGoxLmMgPCA1Jyk7CisgZXN0aW1hdGVkIHwgYWN0dWFsIAorLS0tLS0tLS0tLS0r LS0tLS0tLS0KKyAgICAgNTAwMDAgfCAgNTAwMDAKKygxIHJvdykKKworU0VMRUNUICogRlJPTSBj aGVja19lc3RpbWF0ZWRfcm93cygnc2VsZWN0ICogZnJvbSBqb2luX3Rlc3RfMSBqMSBqb2luIGpv aW5fdGVzdF8yIGoyIG9uICgoajEuYSArIDEgPSBqMi5hICsgMSkgYW5kIChqMS5iID0gajIuYikp IHdoZXJlIGoxLmMgPCAwJyk7CisgZXN0aW1hdGVkIHwgYWN0dWFsIAorLS0tLS0tLS0tLS0rLS0t LS0tLS0KKyAgICAgICAgIDEgfCAgICAgIDAKKygxIHJvdykKKworU0VMRUNUICogRlJPTSBjaGVj a19lc3RpbWF0ZWRfcm93cygnc2VsZWN0ICogZnJvbSBqb2luX3Rlc3RfMSBqMSBqb2luIGpvaW5f dGVzdF8yIGoyIG9uICgoajEuYSArIDEgPSBqMi5hICsgMSkgYW5kIChqMS5iID0gajIuYikpIHdo ZXJlIGoxLmMgPCA1IGFuZCBqMi5jIDwgMycpOworIGVzdGltYXRlZCB8IGFjdHVhbCAKKy0tLS0t LS0tLS0tKy0tLS0tLS0tCisgICAgIDMwMDAwIHwgIDMwMDAwCisoMSByb3cpCisKK1NFTEVDVCAq IEZST00gY2hlY2tfZXN0aW1hdGVkX3Jvd3MoJ3NlbGVjdCAqIGZyb20gam9pbl90ZXN0XzEgajEg am9pbiBqb2luX3Rlc3RfMiBqMiBvbiAoKGoxLmEgKyAxID0gajIuYSArIDEpIGFuZCAoajEuYiA9 IGoyLmIpKSB3aGVyZSBqMS5jIDwgNSBhbmQgajIuYyA+IDUnKTsKKyBlc3RpbWF0ZWQgfCBhY3R1 YWwgCistLS0tLS0tLS0tLSstLS0tLS0tLQorICAgICAgICAgMSB8ICAgICAgMAorKDEgcm93KQor CistLSBjYW4ndCBiZSBpbXByb3ZlZCBkdWUgdG8gdGhlIG9wdGltaXphdGlvbiBpbiBjbGF1c2Vs aXN0X3NlbGVjdGl2aXR5X2V4dCwKKy0tIHdoaWNoIHNraXBzIGNhc2VzIHdpdGggYSBzaW5nbGUg KGpvaW4pIGNsYXVzZQorU0VMRUNUICogRlJPTSBjaGVja19lc3RpbWF0ZWRfcm93cygnc2VsZWN0 ICogZnJvbSBqb2luX3Rlc3RfMSBqMSBqb2luIGpvaW5fdGVzdF8yIGoyIG9uICgoajEuYSArIDEg PSBqMi5hICsgMSkpIHdoZXJlIGoxLmMgPCA1Jyk7CisgZXN0aW1hdGVkIHwgYWN0dWFsIAorLS0t LS0tLS0tLS0rLS0tLS0tLS0KKyAgICAgNTAwMDAgfCAgNTAwMDAKKygxIHJvdykKKworU0VMRUNU ICogRlJPTSBjaGVja19lc3RpbWF0ZWRfcm93cygnc2VsZWN0ICogZnJvbSBqb2luX3Rlc3RfMSBq MSBqb2luIGpvaW5fdGVzdF8yIGoyIG9uICgoajEuYSArIDEgPSBqMi5hICsgMSkpIHdoZXJlIGox LmMgPCA1IGFuZCBqMi5jIDwgNScpOworIGVzdGltYXRlZCB8IGFjdHVhbCAKKy0tLS0tLS0tLS0t Ky0tLS0tLS0tCisgICAgIDUwMDAwIHwgIDUwMDAwCisoMSByb3cpCisKK1NFTEVDVCAqIEZST00g Y2hlY2tfZXN0aW1hdGVkX3Jvd3MoJ3NlbGVjdCAqIGZyb20gam9pbl90ZXN0XzEgajEgam9pbiBq b2luX3Rlc3RfMiBqMiBvbiAoKGoxLmEgKyAxID0gajIuYSArIDEpKSB3aGVyZSBqMS5jIDwgNSBh bmQgajIuYyA+IDUnKTsKKyBlc3RpbWF0ZWQgfCBhY3R1YWwgCistLS0tLS0tLS0tLSstLS0tLS0t LQorICAgICAgICAgMSB8ICAgICAgMAorKDEgcm93KQorCitTRUxFQ1QgKiBGUk9NIGNoZWNrX2Vz dGltYXRlZF9yb3dzKCdzZWxlY3QgKiBmcm9tIGpvaW5fdGVzdF8xIGoxIGpvaW4gam9pbl90ZXN0 XzIgajIgb24gKGoxLmEgKyAxID0gajIuYSkgd2hlcmUgajEuYyA8IDUnKTsKKyBlc3RpbWF0ZWQg fCBhY3R1YWwgCistLS0tLS0tLS0tLSstLS0tLS0tLQorICAgICA1MDAwMCB8ICA1MDAwMAorKDEg cm93KQorCitTRUxFQ1QgKiBGUk9NIGNoZWNrX2VzdGltYXRlZF9yb3dzKCdzZWxlY3QgKiBmcm9t IGpvaW5fdGVzdF8xIGoxIGpvaW4gam9pbl90ZXN0XzIgajIgb24gKGoxLmEgKyAxID0gajIuYSAr IDEpIHdoZXJlIGoxLmMgPCA1Jyk7CisgZXN0aW1hdGVkIHwgYWN0dWFsIAorLS0tLS0tLS0tLS0r LS0tLS0tLS0KKyAgICAgNTAwMDAgfCAgNTAwMDAKKygxIHJvdykKKworLS0gdHJ5IGNvbWJpbmlu ZyB3aXRoIHNpbmdsZS1jb2x1bW4gKGFuZCBzaW5nbGUtZXhwcmVzc2lvbikgc3RhdGlzdGljcwor RFJPUCBTVEFUSVNUSUNTIGpvaW5fc3RhdHNfMjsKK1NFTEVDVCAqIEZST00gY2hlY2tfZXN0aW1h dGVkX3Jvd3MoJ3NlbGVjdCAqIGZyb20gam9pbl90ZXN0XzEgajEgam9pbiBqb2luX3Rlc3RfMiBq MiBvbiAoajEuYSArIDEgPSBqMi5hKSB3aGVyZSBqMS5jIDwgNScpOworIGVzdGltYXRlZCB8IGFj dHVhbCAKKy0tLS0tLS0tLS0tKy0tLS0tLS0tCisgICAgIDUwMDAwIHwgIDUwMDAwCisoMSByb3cp CisKKy0tIG5vIE1DViBvbiBqb2luX3Rlc3RfMiAob24gdGhlIChhKzEpIGV4cHJlc3Npb24pCitT RUxFQ1QgKiBGUk9NIGNoZWNrX2VzdGltYXRlZF9yb3dzKCdzZWxlY3QgKiBmcm9tIGpvaW5fdGVz dF8xIGoxIGpvaW4gam9pbl90ZXN0XzIgajIgb24gKGoxLmEgKyAxID0gajIuYSArIDEpIHdoZXJl IGoxLmMgPCA1Jyk7CisgZXN0aW1hdGVkIHwgYWN0dWFsIAorLS0tLS0tLS0tLS0rLS0tLS0tLS0K KyAgICAgIDI1MDAgfCAgNTAwMDAKKygxIHJvdykKKworQ1JFQVRFIFNUQVRJU1RJQ1Mgam9pbl9z dGF0c18yIE9OIChhKzEpIEZST00gam9pbl90ZXN0XzI7CitBTkFMWVpFIGpvaW5fdGVzdF8yOwor U0VMRUNUICogRlJPTSBjaGVja19lc3RpbWF0ZWRfcm93cygnc2VsZWN0ICogZnJvbSBqb2luX3Rl c3RfMSBqMSBqb2luIGpvaW5fdGVzdF8yIGoyIG9uIChqMS5hICsgMSA9IGoyLmEpIHdoZXJlIGox LmMgPCA1Jyk7CisgZXN0aW1hdGVkIHwgYWN0dWFsIAorLS0tLS0tLS0tLS0rLS0tLS0tLS0KKyAg ICAgNTAwMDAgfCAgNTAwMDAKKygxIHJvdykKKworU0VMRUNUICogRlJPTSBjaGVja19lc3RpbWF0 ZWRfcm93cygnc2VsZWN0ICogZnJvbSBqb2luX3Rlc3RfMSBqMSBqb2luIGpvaW5fdGVzdF8yIGoy IG9uIChqMS5hICsgMSA9IGoyLmEgKyAxKSB3aGVyZSBqMS5jIDwgNScpOworIGVzdGltYXRlZCB8 IGFjdHVhbCAKKy0tLS0tLS0tLS0tKy0tLS0tLS0tCisgICAgIDUwMDAwIHwgIDUwMDAwCisoMSBy b3cpCisKK0RST1AgVEFCTEUgam9pbl90ZXN0XzE7CitEUk9QIFRBQkxFIGpvaW5fdGVzdF8yOwog LS0gUGVybWlzc2lvbiB0ZXN0cy4gVXNlcnMgc2hvdWxkIG5vdCBiZSBhYmxlIHRvIHNlZSBzcGVj aWZpYyBkYXRhIHZhbHVlcyBpbgogLS0gdGhlIGV4dGVuZGVkIHN0YXRpc3RpY3MsIGlmIHRoZXkg bGFjayBwZXJtaXNzaW9uIHRvIHNlZSB0aG9zZSB2YWx1ZXMgaW4KIC0tIHRoZSB1bmRlcmx5aW5n IHRhYmxlLgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3RhdHNfZXh0LnNxbCBi L3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3N0YXRzX2V4dC5zcWwKaW5kZXggNDJjYjdkZDk3ZC4uYzcw MjM2MjBhMSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3RhdHNfZXh0LnNxbAor KysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zdGF0c19leHQuc3FsCkBAIC0xNTQ3LDYgKzE1NDcs NzIgQEAgU0VMRUNUIGMwIEZST00gT05MWSBleHByX3N0YXRzX2luY29tcGF0aWJsZV90ZXN0IFdI RVJFCiAKIERST1AgVEFCTEUgZXhwcl9zdGF0c19pbmNvbXBhdGlibGVfdGVzdDsKIAorCistLSBU ZXN0IGpvaW4gZXN0aW1hdGVzLgorQ1JFQVRFIFRBQkxFIGpvaW5fdGVzdF8xIChhIGludCwgYiBp bnQsIGMgaW50KTsKK0NSRUFURSBUQUJMRSBqb2luX3Rlc3RfMiAoYSBpbnQsIGIgaW50LCBjIGlu dCk7CisKK0lOU0VSVCBJTlRPIGpvaW5fdGVzdF8xIFNFTEVDVCBtb2QoaSwxMCksIG1vZChpLDEw KSwgbW9kKGksMTApIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMCkgcyhpKTsKK0lOU0VSVCBJ TlRPIGpvaW5fdGVzdF8yIFNFTEVDVCBtb2QoaSwxMCksIG1vZChpLDEwKSwgbW9kKGksMTApIEZS T00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMCkgcyhpKTsKKworQU5BTFlaRSBqb2luX3Rlc3RfMTsK K0FOQUxZWkUgam9pbl90ZXN0XzI7CisKK1NFTEVDVCAqIEZST00gY2hlY2tfZXN0aW1hdGVkX3Jv d3MoJ3NlbGVjdCAqIGZyb20gam9pbl90ZXN0XzEgajEgam9pbiBqb2luX3Rlc3RfMiBqMiBvbiAo KGoxLmEgKyAxID0gajIuYSArIDEpIGFuZCAoajEuYiA9IGoyLmIpKScpOworU0VMRUNUICogRlJP TSBjaGVja19lc3RpbWF0ZWRfcm93cygnc2VsZWN0ICogZnJvbSBqb2luX3Rlc3RfMSBqMSBqb2lu IGpvaW5fdGVzdF8yIGoyIG9uICgoajEuYSArIDEgPSBqMi5hICsgMSkgYW5kIChqMS5iID0gajIu YikpIHdoZXJlIGoxLmMgPCA1Jyk7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2VzdGltYXRlZF9yb3dz KCdzZWxlY3QgKiBmcm9tIGpvaW5fdGVzdF8xIGoxIGpvaW4gam9pbl90ZXN0XzIgajIgb24gKChq MS5hICsgMSA9IGoyLmEgKyAxKSBhbmQgKGoxLmIgPSBqMi5iKSkgd2hlcmUgajEuYyA8IDAnKTsK K1NFTEVDVCAqIEZST00gY2hlY2tfZXN0aW1hdGVkX3Jvd3MoJ3NlbGVjdCAqIGZyb20gam9pbl90 ZXN0XzEgajEgam9pbiBqb2luX3Rlc3RfMiBqMiBvbiAoKGoxLmEgKyAxID0gajIuYSArIDEpIGFu ZCAoajEuYiA9IGoyLmIpKSB3aGVyZSBqMS5jIDwgNSBhbmQgajIuYyA8IDMnKTsKK1NFTEVDVCAq IEZST00gY2hlY2tfZXN0aW1hdGVkX3Jvd3MoJ3NlbGVjdCAqIGZyb20gam9pbl90ZXN0XzEgajEg am9pbiBqb2luX3Rlc3RfMiBqMiBvbiAoKGoxLmEgKyAxID0gajIuYSArIDEpIGFuZCAoajEuYiA9 IGoyLmIpKSB3aGVyZSBqMS5jIDwgNSBhbmQgajIuYyA+IDUnKTsKKworLS0gY2FuJ3QgYmUgaW1w cm92ZWQgZHVlIHRvIHRoZSBvcHRpbWl6YXRpb24gaW4gY2xhdXNlbGlzdF9zZWxlY3Rpdml0eV9l eHQsCistLSB3aGljaCBza2lwcyBjYXNlcyB3aXRoIGEgc2luZ2xlIChqb2luKSBjbGF1c2UKK1NF TEVDVCAqIEZST00gY2hlY2tfZXN0aW1hdGVkX3Jvd3MoJ3NlbGVjdCAqIGZyb20gam9pbl90ZXN0 XzEgajEgam9pbiBqb2luX3Rlc3RfMiBqMiBvbiAoKGoxLmEgKyAxID0gajIuYSArIDEpKSB3aGVy ZSBqMS5jIDwgNScpOworU0VMRUNUICogRlJPTSBjaGVja19lc3RpbWF0ZWRfcm93cygnc2VsZWN0 ICogZnJvbSBqb2luX3Rlc3RfMSBqMSBqb2luIGpvaW5fdGVzdF8yIGoyIG9uICgoajEuYSArIDEg PSBqMi5hICsgMSkpIHdoZXJlIGoxLmMgPCA1IGFuZCBqMi5jIDwgNScpOworU0VMRUNUICogRlJP TSBjaGVja19lc3RpbWF0ZWRfcm93cygnc2VsZWN0ICogZnJvbSBqb2luX3Rlc3RfMSBqMSBqb2lu IGpvaW5fdGVzdF8yIGoyIG9uICgoajEuYSArIDEgPSBqMi5hICsgMSkpIHdoZXJlIGoxLmMgPCA1 IGFuZCBqMi5jID4gNScpOworCitTRUxFQ1QgKiBGUk9NIGNoZWNrX2VzdGltYXRlZF9yb3dzKCdz ZWxlY3QgKiBmcm9tIGpvaW5fdGVzdF8xIGoxIGpvaW4gam9pbl90ZXN0XzIgajIgb24gKGoxLmEg KyAxID0gajIuYSkgd2hlcmUgajEuYyA8IDUnKTsKK1NFTEVDVCAqIEZST00gY2hlY2tfZXN0aW1h dGVkX3Jvd3MoJ3NlbGVjdCAqIGZyb20gam9pbl90ZXN0XzEgajEgam9pbiBqb2luX3Rlc3RfMiBq MiBvbiAoajEuYSArIDEgPSBqMi5hICsgMSkgd2hlcmUgajEuYyA8IDUnKTsKKworLS0gY3JlYXRl IGV4dGVuZGVkIHN0YXRpc3RpY3Mgb24gdGhlIGpvaW4vd2hlcmUgY29sdW1ucworQ1JFQVRFIFNU QVRJU1RJQ1Mgam9pbl9zdGF0c18xIE9OIGEsIGIsIGMsIChhKzEpLCAoYisxKSBGUk9NIGpvaW5f dGVzdF8xOworQ1JFQVRFIFNUQVRJU1RJQ1Mgam9pbl9zdGF0c18yIE9OIGEsIGIsIGMsIChhKzEp LCAoYisxKSBGUk9NIGpvaW5fdGVzdF8yOworCitBTkFMWVpFIGpvaW5fdGVzdF8xOworQU5BTFla RSBqb2luX3Rlc3RfMjsKKworU0VMRUNUICogRlJPTSBjaGVja19lc3RpbWF0ZWRfcm93cygnc2Vs ZWN0ICogZnJvbSBqb2luX3Rlc3RfMSBqMSBqb2luIGpvaW5fdGVzdF8yIGoyIG9uICgoajEuYSAr IDEgPSBqMi5hICsgMSkgYW5kIChqMS5iID0gajIuYikpJyk7CitTRUxFQ1QgKiBGUk9NIGNoZWNr X2VzdGltYXRlZF9yb3dzKCdzZWxlY3QgKiBmcm9tIGpvaW5fdGVzdF8xIGoxIGpvaW4gam9pbl90 ZXN0XzIgajIgb24gKChqMS5hICsgMSA9IGoyLmEgKyAxKSBhbmQgKGoxLmIgPSBqMi5iKSkgd2hl cmUgajEuYyA8IDUnKTsKK1NFTEVDVCAqIEZST00gY2hlY2tfZXN0aW1hdGVkX3Jvd3MoJ3NlbGVj dCAqIGZyb20gam9pbl90ZXN0XzEgajEgam9pbiBqb2luX3Rlc3RfMiBqMiBvbiAoKGoxLmEgKyAx ID0gajIuYSArIDEpIGFuZCAoajEuYiA9IGoyLmIpKSB3aGVyZSBqMS5jIDwgMCcpOworU0VMRUNU ICogRlJPTSBjaGVja19lc3RpbWF0ZWRfcm93cygnc2VsZWN0ICogZnJvbSBqb2luX3Rlc3RfMSBq MSBqb2luIGpvaW5fdGVzdF8yIGoyIG9uICgoajEuYSArIDEgPSBqMi5hICsgMSkgYW5kIChqMS5i ID0gajIuYikpIHdoZXJlIGoxLmMgPCA1IGFuZCBqMi5jIDwgMycpOworU0VMRUNUICogRlJPTSBj aGVja19lc3RpbWF0ZWRfcm93cygnc2VsZWN0ICogZnJvbSBqb2luX3Rlc3RfMSBqMSBqb2luIGpv aW5fdGVzdF8yIGoyIG9uICgoajEuYSArIDEgPSBqMi5hICsgMSkgYW5kIChqMS5iID0gajIuYikp IHdoZXJlIGoxLmMgPCA1IGFuZCBqMi5jID4gNScpOworCistLSBjYW4ndCBiZSBpbXByb3ZlZCBk dWUgdG8gdGhlIG9wdGltaXphdGlvbiBpbiBjbGF1c2VsaXN0X3NlbGVjdGl2aXR5X2V4dCwKKy0t IHdoaWNoIHNraXBzIGNhc2VzIHdpdGggYSBzaW5nbGUgKGpvaW4pIGNsYXVzZQorU0VMRUNUICog RlJPTSBjaGVja19lc3RpbWF0ZWRfcm93cygnc2VsZWN0ICogZnJvbSBqb2luX3Rlc3RfMSBqMSBq b2luIGpvaW5fdGVzdF8yIGoyIG9uICgoajEuYSArIDEgPSBqMi5hICsgMSkpIHdoZXJlIGoxLmMg PCA1Jyk7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2VzdGltYXRlZF9yb3dzKCdzZWxlY3QgKiBmcm9t IGpvaW5fdGVzdF8xIGoxIGpvaW4gam9pbl90ZXN0XzIgajIgb24gKChqMS5hICsgMSA9IGoyLmEg KyAxKSkgd2hlcmUgajEuYyA8IDUgYW5kIGoyLmMgPCA1Jyk7CitTRUxFQ1QgKiBGUk9NIGNoZWNr X2VzdGltYXRlZF9yb3dzKCdzZWxlY3QgKiBmcm9tIGpvaW5fdGVzdF8xIGoxIGpvaW4gam9pbl90 ZXN0XzIgajIgb24gKChqMS5hICsgMSA9IGoyLmEgKyAxKSkgd2hlcmUgajEuYyA8IDUgYW5kIGoy LmMgPiA1Jyk7CisKK1NFTEVDVCAqIEZST00gY2hlY2tfZXN0aW1hdGVkX3Jvd3MoJ3NlbGVjdCAq IGZyb20gam9pbl90ZXN0XzEgajEgam9pbiBqb2luX3Rlc3RfMiBqMiBvbiAoajEuYSArIDEgPSBq Mi5hKSB3aGVyZSBqMS5jIDwgNScpOworU0VMRUNUICogRlJPTSBjaGVja19lc3RpbWF0ZWRfcm93 cygnc2VsZWN0ICogZnJvbSBqb2luX3Rlc3RfMSBqMSBqb2luIGpvaW5fdGVzdF8yIGoyIG9uIChq MS5hICsgMSA9IGoyLmEgKyAxKSB3aGVyZSBqMS5jIDwgNScpOworCistLSB0cnkgY29tYmluaW5n IHdpdGggc2luZ2xlLWNvbHVtbiAoYW5kIHNpbmdsZS1leHByZXNzaW9uKSBzdGF0aXN0aWNzCitE Uk9QIFNUQVRJU1RJQ1Mgam9pbl9zdGF0c18yOworCitTRUxFQ1QgKiBGUk9NIGNoZWNrX2VzdGlt YXRlZF9yb3dzKCdzZWxlY3QgKiBmcm9tIGpvaW5fdGVzdF8xIGoxIGpvaW4gam9pbl90ZXN0XzIg ajIgb24gKGoxLmEgKyAxID0gajIuYSkgd2hlcmUgajEuYyA8IDUnKTsKKworLS0gbm8gTUNWIG9u IGpvaW5fdGVzdF8yIChvbiB0aGUgKGErMSkgZXhwcmVzc2lvbikKK1NFTEVDVCAqIEZST00gY2hl Y2tfZXN0aW1hdGVkX3Jvd3MoJ3NlbGVjdCAqIGZyb20gam9pbl90ZXN0XzEgajEgam9pbiBqb2lu X3Rlc3RfMiBqMiBvbiAoajEuYSArIDEgPSBqMi5hICsgMSkgd2hlcmUgajEuYyA8IDUnKTsKKwor Q1JFQVRFIFNUQVRJU1RJQ1Mgam9pbl9zdGF0c18yIE9OIChhKzEpIEZST00gam9pbl90ZXN0XzI7 CitBTkFMWVpFIGpvaW5fdGVzdF8yOworCitTRUxFQ1QgKiBGUk9NIGNoZWNrX2VzdGltYXRlZF9y b3dzKCdzZWxlY3QgKiBmcm9tIGpvaW5fdGVzdF8xIGoxIGpvaW4gam9pbl90ZXN0XzIgajIgb24g KGoxLmEgKyAxID0gajIuYSkgd2hlcmUgajEuYyA8IDUnKTsKK1NFTEVDVCAqIEZST00gY2hlY2tf ZXN0aW1hdGVkX3Jvd3MoJ3NlbGVjdCAqIGZyb20gam9pbl90ZXN0XzEgajEgam9pbiBqb2luX3Rl c3RfMiBqMiBvbiAoajEuYSArIDEgPSBqMi5hICsgMSkgd2hlcmUgajEuYyA8IDUnKTsKKworCitE Uk9QIFRBQkxFIGpvaW5fdGVzdF8xOworRFJPUCBUQUJMRSBqb2luX3Rlc3RfMjsKKwogLS0gUGVy bWlzc2lvbiB0ZXN0cy4gVXNlcnMgc2hvdWxkIG5vdCBiZSBhYmxlIHRvIHNlZSBzcGVjaWZpYyBk YXRhIHZhbHVlcyBpbgogLS0gdGhlIGV4dGVuZGVkIHN0YXRpc3RpY3MsIGlmIHRoZXkgbGFjayBw ZXJtaXNzaW9uIHRvIHNlZSB0aG9zZSB2YWx1ZXMgaW4KIC0tIHRoZSB1bmRlcmx5aW5nIHRhYmxl LgotLSAKMi4zNC4xCgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHYxLTAwMDItUmVtb3ZlLWVzdGltaWF0 ZWRjbHVhc2VzLWFuZC12YXJSZWxpZC1hcmd1bWVudHMucGF0Y2gAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAwNjQ0ADAwMDE3NTAAMDAwMTc1MAAwMDAwMDAxNDE0NAAx NDYxMzMyNjU3NQAwMjQ3MjQAIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAdXN0YXIgIAB5aXpoaS5memgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHlpemhpLmZ6aAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARnJvbSA2NTk2YzkzMjU0NWVmMjViODU2 YjA3ZjQ0YTIzNjM5ZWMxMjEwY2NmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiAieWl6 aGkuZnpoIiA8eWl6aGkuZnpoQGFsaWJhYmEtaW5jLmNvbT4KRGF0ZTogVHVlLCAyIEFwciAyMDI0 IDA5OjM5OjE3ICswODAwClN1YmplY3Q6IFtQQVRDSCB2MSAwMi8yMl0gUmVtb3ZlIGVzdGltaWF0 ZWRjbHVhc2VzIGFuZCB2YXJSZWxpZCBhcmd1bWVudHMKCmNvbW1lbnRzIGFuZCBBc3NlcnQgYXJv dW5kIHRoZSBjaGFuZ2VzIHByb3ZpZGVzIG1vcmUgaW5mb3JtYXRpb24uCi0tLQogc3JjL2JhY2tl bmQvb3B0aW1pemVyL3BhdGgvY2xhdXNlc2VsLmMgIHwgMTYgKysrKysrKysrKy0tLS0tLQogc3Jj L2JhY2tlbmQvc3RhdGlzdGljcy9leHRlbmRlZF9zdGF0cy5jIHwgMjQgKysrKysrKysrKy0tLS0t LS0tLS0tLS0tCiBzcmMvaW5jbHVkZS9zdGF0aXN0aWNzL3N0YXRpc3RpY3MuaCAgICAgfCAgNCAr LS0tCiAzIGZpbGVzIGNoYW5nZWQsIDIxIGluc2VydGlvbnMoKyksIDIzIGRlbGV0aW9ucygtKQoK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2NsYXVzZXNlbC5jIGIvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY2xhdXNlc2VsLmMKaW5kZXggYmVkZjc2ZWRhZS4uZTE2 ODNmZWJmNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY2xhdXNlc2Vs LmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY2xhdXNlc2VsLmMKQEAgLTIwNCwx NCArMjA0LDE4IEBAIGNsYXVzZWxpc3Rfc2VsZWN0aXZpdHlfZXh0KFBsYW5uZXJJbmZvICpyb290 LAogCSAqIGRvIHRvIGRldGVjdCB3aGVuIHRoaXMgbWFrZXMgc2Vuc2UsIGJ1dCB3ZSBjYW4gY2hl Y2sgdGhhdCB0aGVyZSBhcmUKIAkgKiBqb2luIGNsYXVzZXMsIGFuZCB0aGF0IGF0IGxlYXN0IHNv bWUgb2YgdGhlIHJlbHMgaGF2ZSBzdGF0cy4KIAkgKgotCSAqIFhYWCBJc24ndCB0aGlzIG11dHVh bGx5IGV4Y2x1c2l2ZSB3aXRoIHRoZSBwcmVjZWRpbmcgYmxvY2sgd2hpY2gKLQkgKiBjYWxjdWxh dGVzIGVzdGltYXRlcyBmb3IgYSBzaW5nbGUgcmVsYXRpb24/CisJICogcmVsICE9IE5VTEwgY2Fu J3QgZ3JhbnRlZSB0aGUgY2xhdXNlIGlzIG5vdCBhIGpvaW4gY2xhdXNlLCBmb3IgZXhhbXBsZQor CSAqIHQxIGxlZnQgam9pbiB0MiBPTiB0MS5hID0gMywgYnV0IGl0IGNhbiBncmFudGVlIHdlIGNh bid0IHVzZSBleHRlbmRlZAorCSAqIHN0YXRpc3RpY3MgZm9yIGVzdGltYXRpb24gc2luY2UgaXQg aGFzIG9ubHkgMSByZWxpZC4KKwkgKgorCSAqIFhYWDogc28gd2UgY2FuIGdyYW50ZWUgZXN0aW1h dGVkY2xhdXNlcyA9PSBOVUxMIG5vdywgc28gZXN0aW1hdGVkY2xhdXNlcworCSAqIGluIHN0YXRl eHRfdHJ5X2pvaW5fZXN0aW1hdGVzIGlzIHJlbW92ZWQuCiAJICovCi0JaWYgKHVzZV9leHRlbmRl ZF9zdGF0cyAmJgotCQlzdGF0ZXh0X3RyeV9qb2luX2VzdGltYXRlcyhyb290LCBjbGF1c2VzLCB2 YXJSZWxpZCwgam9pbnR5cGUsIHNqaW5mbywKLQkJCQkJCSBlc3RpbWF0ZWRjbGF1c2VzKSkKKwlp ZiAodXNlX2V4dGVuZGVkX3N0YXRzICYmIHJlbCA9PSBOVUxMICYmCisJCXN0YXRleHRfdHJ5X2pv aW5fZXN0aW1hdGVzKHJvb3QsIGNsYXVzZXMsIHZhclJlbGlkLCBqb2ludHlwZSwgc2ppbmZvKSkK IAl7Ci0JCXMxICo9IHN0YXRleHRfY2xhdXNlbGlzdF9qb2luX3NlbGVjdGl2aXR5KHJvb3QsIGNs YXVzZXMsIHZhclJlbGlkLAorCQlBc3NlcnQodmFyUmVsaWQgPT0gMCk7CisJCXMxICo9IHN0YXRl eHRfY2xhdXNlbGlzdF9qb2luX3NlbGVjdGl2aXR5KHJvb3QsIGNsYXVzZXMsCiAJCQkJCQkJCQkJ CQkgIGpvaW50eXBlLCBzamluZm8sCiAJCQkJCQkJCQkJCQkgICZlc3RpbWF0ZWRjbGF1c2VzKTsK IAl9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdGF0aXN0aWNzL2V4dGVuZGVkX3N0YXRzLmMg Yi9zcmMvYmFja2VuZC9zdGF0aXN0aWNzL2V4dGVuZGVkX3N0YXRzLmMKaW5kZXggODA4NzJjYzdk YS4uNWVkM2M1ZTMzMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9leHRlbmRl ZF9zdGF0cy5jCisrKyBiL3NyYy9iYWNrZW5kL3N0YXRpc3RpY3MvZXh0ZW5kZWRfc3RhdHMuYwpA QCAtMjgwNiw4ICsyODA2LDcgQEAgc3RhdGV4dF9kZXRlcm1pbmVfam9pbl9yZXN0cmljdGlvbnMo UGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKICAqIG9uIHRoZSBjb25kaXRpb25z LgogICovCiBzdGF0aWMgYm9vbAotc3RhdGV4dF9pc19zdXBwb3J0ZWRfam9pbl9jbGF1c2UoUGxh bm5lckluZm8gKnJvb3QsIE5vZGUgKmNsYXVzZSwKLQkJCQkJCQkJIGludCB2YXJSZWxpZCwgU3Bl Y2lhbEpvaW5JbmZvICpzamluZm8pCitzdGF0ZXh0X2lzX3N1cHBvcnRlZF9qb2luX2NsYXVzZShQ bGFubmVySW5mbyAqcm9vdCwgTm9kZSAqY2xhdXNlLCBTcGVjaWFsSm9pbkluZm8gKnNqaW5mbykK IHsKIAlPaWQJb3Byc2VsOwogCVJlc3RyaWN0SW5mbyAgICpyaW5mbzsKQEAgLTI4MTksNyArMjgx OCw5IEBAIHN0YXRleHRfaXNfc3VwcG9ydGVkX2pvaW5fY2xhdXNlKFBsYW5uZXJJbmZvICpyb290 LCBOb2RlICpjbGF1c2UsCiAJICoKIAkgKiBYWFggU2VlIHRyZWF0X2FzX2pvaW5fY2xhdXNlLgog CSAqLwotCWlmICgodmFyUmVsaWQgIT0gMCkgfHwgKHNqaW5mbyA9PSBOVUxMKSkKKworCS8qIGR1 cGxpY2F0ZWQgd2l0aCBzdGF0ZXh0X3RyeV9qb2luX2VzdGltYXRlcyAqLworCWlmIChzamluZm8g PT0gTlVMTCkKIAkJcmV0dXJuIGZhbHNlOwogCiAJLyogWFhYIENhbiB3ZSByZWx5IG9uIGFsd2F5 cyBnZXR0aW5nIFJlc3RyaWN0SW5mbyBoZXJlPyAqLwpAQCAtMjkwMyw4ICsyOTA0LDcgQEAgc3Rh dGV4dF9pc19zdXBwb3J0ZWRfam9pbl9jbGF1c2UoUGxhbm5lckluZm8gKnJvb3QsIE5vZGUgKmNs YXVzZSwKICAqLwogYm9vbAogc3RhdGV4dF90cnlfam9pbl9lc3RpbWF0ZXMoUGxhbm5lckluZm8g KnJvb3QsIExpc3QgKmNsYXVzZXMsIGludCB2YXJSZWxpZCwKLQkJCQkJCSAgIEpvaW5UeXBlIGpv aW50eXBlLCBTcGVjaWFsSm9pbkluZm8gKnNqaW5mbywKLQkJCQkJCSAgIEJpdG1hcHNldCAqZXN0 aW1hdGVkY2xhdXNlcykKKwkJCQkJCSAgIEpvaW5UeXBlIGpvaW50eXBlLCBTcGVjaWFsSm9pbklu Zm8gKnNqaW5mbykKIHsKIAlpbnQJCQlsaXN0aWR4OwogCWludAkJCWs7CkBAIC0yOTQxLDE1ICsy OTQxLDExIEBAIHN0YXRleHRfdHJ5X2pvaW5fZXN0aW1hdGVzKFBsYW5uZXJJbmZvICpyb290LCBM aXN0ICpjbGF1c2VzLCBpbnQgdmFyUmVsaWQsCiAJCS8qIG5lZWRzIHRvIGhhcHBlbiBiZWZvcmUg c2tpcHBpbmcgYW55IGNsYXVzZXMgKi8KIAkJbGlzdGlkeCsrOwogCi0JCS8qIFNraXAgY2xhdXNl cyB0aGF0IHdlcmUgYWxyZWFkeSBlc3RpbWF0ZWQuICovCi0JCWlmIChibXNfaXNfbWVtYmVyKGxp c3RpZHgsIGVzdGltYXRlZGNsYXVzZXMpKQotCQkJY29udGludWU7Ci0KIAkJLyoKIAkJICogU2tp cCBjbGF1c2VzIHRoYXQgYXJlIG5vdCBqb2luIGNsYXVzZXMgb3IgdGhhdCB3ZSBkb24ndCBrbm93 CiAJCSAqIGhvdyB0byBoYW5kbGUgZXN0aW1hdGUgdXNpbmcgZXh0ZW5kZWQgc3RhdGlzdGljcy4K IAkJICovCi0JCWlmICghc3RhdGV4dF9pc19zdXBwb3J0ZWRfam9pbl9jbGF1c2Uocm9vdCwgY2xh dXNlLCB2YXJSZWxpZCwgc2ppbmZvKSkKKwkJaWYgKCFzdGF0ZXh0X2lzX3N1cHBvcnRlZF9qb2lu X2NsYXVzZShyb290LCBjbGF1c2UsIHNqaW5mbykpCiAJCQljb250aW51ZTsKIAogCQkvKgpAQCAt MzAxOSw3ICszMDE1LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgSm9pblBhaXJJbmZvCiAgKiB3aXRoIEZf RVFKT0lOU0VMIHNlbGVjdGl2aXR5IGZ1bmN0aW9uIGF0IHRoZSBtb21lbnQpLgogICovCiBzdGF0 aWMgSm9pblBhaXJJbmZvICoKLXN0YXRleHRfYnVpbGRfam9pbl9wYWlycyhQbGFubmVySW5mbyAq cm9vdCwgTGlzdCAqY2xhdXNlcywgaW50IHZhclJlbGlkLAorc3RhdGV4dF9idWlsZF9qb2luX3Bh aXJzKFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpjbGF1c2VzLAogCQkJCQkJIEpvaW5UeXBlIGpv aW50eXBlLCBTcGVjaWFsSm9pbkluZm8gKnNqaW5mbywKIAkJCQkJCSBCaXRtYXBzZXQgKmVzdGlt YXRlZGNsYXVzZXMsIGludCAqbnBhaXJzKQogewpAQCAtMzA1NSw3ICszMDUxLDcgQEAgc3RhdGV4 dF9idWlsZF9qb2luX3BhaXJzKFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpjbGF1c2VzLCBpbnQg dmFyUmVsaWQsCiAJCSAqIHRoZSBtb21lbnQgd2Ugc3VwcG9ydCBqdXN0IChFeHByIG9wIEV4cHIp IGNsYXVzZXMgd2l0aCBlYWNoCiAJCSAqIHNpZGUgcmVmZXJlbmNpbmcganVzdCBhIHNpbmdsZSBy ZWxhdGlvbikuCiAJCSAqLwotCQlpZiAoIXN0YXRleHRfaXNfc3VwcG9ydGVkX2pvaW5fY2xhdXNl KHJvb3QsIGNsYXVzZSwgdmFyUmVsaWQsIHNqaW5mbykpCisJCWlmICghc3RhdGV4dF9pc19zdXBw b3J0ZWRfam9pbl9jbGF1c2Uocm9vdCwgY2xhdXNlLCBzamluZm8pKQogCQkJY29udGludWU7CiAK IAkJLyogc3RhdGV4dF9pc19zdXBwb3J0ZWRfam9pbl9jbGF1c2UgZ3VhcmFudGVlcyBSZXN0cmlj dEluZm8gKi8KQEAgLTMyNDMsNyArMzIzOSw3IEBAIGdldF9leHByZXNzaW9uX2Zvcl9yZWwoUGxh bm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwgTm9kZSAqY2xhdXNlKQogICogc3RhdGlz dGljcyBpbiB0aGF0IGNhc2UgeWV0KS4KICAqLwogU2VsZWN0aXZpdHkKLXN0YXRleHRfY2xhdXNl bGlzdF9qb2luX3NlbGVjdGl2aXR5KFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpjbGF1c2VzLCBp bnQgdmFyUmVsaWQsCitzdGF0ZXh0X2NsYXVzZWxpc3Rfam9pbl9zZWxlY3Rpdml0eShQbGFubmVy SW5mbyAqcm9vdCwgTGlzdCAqY2xhdXNlcywKIAkJCQkJCQkJCUpvaW5UeXBlIGpvaW50eXBlLCBT cGVjaWFsSm9pbkluZm8gKnNqaW5mbywKIAkJCQkJCQkJCUJpdG1hcHNldCAqKmVzdGltYXRlZGNs YXVzZXMpCiB7CkBAIC0zMjU4LDcgKzMyNTQsNyBAQCBzdGF0ZXh0X2NsYXVzZWxpc3Rfam9pbl9z ZWxlY3Rpdml0eShQbGFubmVySW5mbyAqcm9vdCwgTGlzdCAqY2xhdXNlcywgaW50IHZhclJlbAog CQlyZXR1cm4gMS4wOwogCiAJLyogZXh0cmFjdCBwYWlycyBvZiBqb2luZWQgcmVsYXRpb25zIGZy b20gdGhlIGxpc3Qgb2YgY2xhdXNlcyAqLwotCWluZm8gPSBzdGF0ZXh0X2J1aWxkX2pvaW5fcGFp cnMocm9vdCwgY2xhdXNlcywgdmFyUmVsaWQsIGpvaW50eXBlLCBzamluZm8sCisJaW5mbyA9IHN0 YXRleHRfYnVpbGRfam9pbl9wYWlycyhyb290LCBjbGF1c2VzLCBqb2ludHlwZSwgc2ppbmZvLAog CQkJCQkJCQkJKmVzdGltYXRlZGNsYXVzZXMsICZuaW5mbyk7CiAKIAkvKiBubyB1c2VmdWwgam9p biBwYWlycyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RhdGlzdGljcy9zdGF0aXN0aWNz LmggYi9zcmMvaW5jbHVkZS9zdGF0aXN0aWNzL3N0YXRpc3RpY3MuaAppbmRleCA2MGIyMjIwMjhk Li40ZjcwMDM0OTgzIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdGF0aXN0aWNzL3N0YXRpc3Rp Y3MuaAorKysgYi9zcmMvaW5jbHVkZS9zdGF0aXN0aWNzL3N0YXRpc3RpY3MuaApAQCAtMTMxLDEx ICsxMzEsOSBAQCBleHRlcm4gU3RhdGlzdGljRXh0SW5mbyAqc3RhdGV4dF9maW5kX21hdGNoaW5n X21jdihQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbwogCQkJCQkJCQkJCSAgIEJpdG1hcHNl dCAqYXR0bnVtcywgTGlzdCAqZXhwcnMpOwogCiBleHRlcm4gYm9vbCBzdGF0ZXh0X3RyeV9qb2lu X2VzdGltYXRlcyhQbGFubmVySW5mbyAqcm9vdCwgTGlzdCAqY2xhdXNlcywgaW50IHZhclJlbGlk LAotCQkJCQkJCQkJICAgSm9pblR5cGUgam9pbnR5cGUsIFNwZWNpYWxKb2luSW5mbyAqc2ppbmZv LAotCQkJCQkJCQkJICAgQml0bWFwc2V0ICplc3RpbWF0ZWRjbGF1c2VzKTsKKwkJCQkJCQkJCSAg IEpvaW5UeXBlIGpvaW50eXBlLCBTcGVjaWFsSm9pbkluZm8gKnNqaW5mbyk7CiAKIGV4dGVybiBT ZWxlY3Rpdml0eSBzdGF0ZXh0X2NsYXVzZWxpc3Rfam9pbl9zZWxlY3Rpdml0eShQbGFubmVySW5m byAqcm9vdCwgTGlzdCAqY2xhdXNlcywKLQkJCQkJCQkJCQkJCQkgICBpbnQgdmFyUmVsaWQsCiAJ CQkJCQkJCQkJCQkJICAgSm9pblR5cGUgam9pbnR5cGUsIFNwZWNpYWxKb2luSW5mbyAqc2ppbmZv LAogCQkJCQkJCQkJCQkJCSAgIEJpdG1hcHNldCAqKmVzdGltYXRlZGNsYXVzZXMpOwogCi0tIAoy LjM0LjEKCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAB2MS0wMDAzLVJlbW92ZS1TcGVjaWFsSm9pbkluZm8tc2ppbmZv LWFyZ3VtZW50LnBhdGNoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAMDAwMDY0NAAwMDAxNzUwADAwMDE3NTAAMDAwMDAwMTA2NTIAMTQ2MTMzMjY1NzUAMDIz MDI2ACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyICAA eWl6aGkuZnpoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB5aXpoaS5memgAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAEZyb20gNTFhZWRkMTg1ZTljM2UyMzY5YTMyOGYyODVjOWM5ZTU5 ODhlYTc3MiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKRnJvbTogInlpemhpLmZ6aCIgPHlpemhp LmZ6aEBhbGliYWJhLWluYy5jb20+CkRhdGU6IFR1ZSwgMiBBcHIgMjAyNCAwOTo1ODoxOCArMDgw MApTdWJqZWN0OiBbUEFUQ0ggdjEgMDMvMjJdIFJlbW92ZSBTcGVjaWFsSm9pbkluZm8gKnNqaW5m byBhcmd1bWVudAoKSXQgd2FzIHBhc3NlZCBkb3duIHRvIHN0YXRleHRfaXNfc3VwcG9ydGVkX2pv aW5fY2xhdXNlIHdoZXJlIGl0IGlzCnVzZWQgZm9yIGNoZWNraW5nIGlmIGl0IGlzIE5VTEwuICBI b3dldmVyIGl0IGhhcyBiZWVuIGNoZWNrZWQgYmVmb3JlCmluIHN0YXRleHRfdHJ5X2pvaW5fZXN0 aW1hdGVzLgotLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2NsYXVzZXNlbC5jICB8ICAz ICsrLQogc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9leHRlbmRlZF9zdGF0cy5jIHwgMTYgKysrKysr LS0tLS0tLS0tLQogc3JjL2luY2x1ZGUvc3RhdGlzdGljcy9zdGF0aXN0aWNzLmggICAgIHwgIDMg Ky0tCiAzIGZpbGVzIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKSwgMTMgZGVsZXRpb25zKC0pCgpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY2xhdXNlc2VsLmMgYi9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jbGF1c2VzZWwuYwppbmRleCBlMTY4M2ZlYmY2Li5jYTU1 MGU2YzBjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jbGF1c2VzZWwu YworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jbGF1c2VzZWwuYwpAQCAtMjE1LDgg KzIxNSw5IEBAIGNsYXVzZWxpc3Rfc2VsZWN0aXZpdHlfZXh0KFBsYW5uZXJJbmZvICpyb290LAog CQlzdGF0ZXh0X3RyeV9qb2luX2VzdGltYXRlcyhyb290LCBjbGF1c2VzLCB2YXJSZWxpZCwgam9p bnR5cGUsIHNqaW5mbykpCiAJewogCQlBc3NlcnQodmFyUmVsaWQgPT0gMCk7CisJCUFzc2VydChz amluZm8gIT0gTlVMTCk7CiAJCXMxICo9IHN0YXRleHRfY2xhdXNlbGlzdF9qb2luX3NlbGVjdGl2 aXR5KHJvb3QsIGNsYXVzZXMsCi0JCQkJCQkJCQkJCQkgIGpvaW50eXBlLCBzamluZm8sCisJCQkJ CQkJCQkJCQkgIGpvaW50eXBlLAogCQkJCQkJCQkJCQkJICAmZXN0aW1hdGVkY2xhdXNlcyk7CiAJ fQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdGF0aXN0aWNzL2V4dGVuZGVkX3N0YXRzLmMg Yi9zcmMvYmFja2VuZC9zdGF0aXN0aWNzL2V4dGVuZGVkX3N0YXRzLmMKaW5kZXggNWVkM2M1ZTMz Mi4uY2E2MDQzMDZlNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9leHRlbmRl ZF9zdGF0cy5jCisrKyBiL3NyYy9iYWNrZW5kL3N0YXRpc3RpY3MvZXh0ZW5kZWRfc3RhdHMuYwpA QCAtMjgwNiw3ICsyODA2LDcgQEAgc3RhdGV4dF9kZXRlcm1pbmVfam9pbl9yZXN0cmljdGlvbnMo UGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKICAqIG9uIHRoZSBjb25kaXRpb25z LgogICovCiBzdGF0aWMgYm9vbAotc3RhdGV4dF9pc19zdXBwb3J0ZWRfam9pbl9jbGF1c2UoUGxh bm5lckluZm8gKnJvb3QsIE5vZGUgKmNsYXVzZSwgU3BlY2lhbEpvaW5JbmZvICpzamluZm8pCitz dGF0ZXh0X2lzX3N1cHBvcnRlZF9qb2luX2NsYXVzZShQbGFubmVySW5mbyAqcm9vdCwgTm9kZSAq Y2xhdXNlKQogewogCU9pZAlvcHJzZWw7CiAJUmVzdHJpY3RJbmZvICAgKnJpbmZvOwpAQCAtMjgx OSwxMCArMjgxOSw2IEBAIHN0YXRleHRfaXNfc3VwcG9ydGVkX2pvaW5fY2xhdXNlKFBsYW5uZXJJ bmZvICpyb290LCBOb2RlICpjbGF1c2UsIFNwZWNpYWxKb2luSW5mCiAJICogWFhYIFNlZSB0cmVh dF9hc19qb2luX2NsYXVzZS4KIAkgKi8KIAotCS8qIGR1cGxpY2F0ZWQgd2l0aCBzdGF0ZXh0X3Ry eV9qb2luX2VzdGltYXRlcyAqLwotCWlmIChzamluZm8gPT0gTlVMTCkKLQkJcmV0dXJuIGZhbHNl OwotCiAJLyogWFhYIENhbiB3ZSByZWx5IG9uIGFsd2F5cyBnZXR0aW5nIFJlc3RyaWN0SW5mbyBo ZXJlPyAqLwogCWlmICghSXNBKGNsYXVzZSwgUmVzdHJpY3RJbmZvKSkKIAkJcmV0dXJuIGZhbHNl OwpAQCAtMjk0NSw3ICsyOTQxLDcgQEAgc3RhdGV4dF90cnlfam9pbl9lc3RpbWF0ZXMoUGxhbm5l ckluZm8gKnJvb3QsIExpc3QgKmNsYXVzZXMsIGludCB2YXJSZWxpZCwKIAkJICogU2tpcCBjbGF1 c2VzIHRoYXQgYXJlIG5vdCBqb2luIGNsYXVzZXMgb3IgdGhhdCB3ZSBkb24ndCBrbm93CiAJCSAq IGhvdyB0byBoYW5kbGUgZXN0aW1hdGUgdXNpbmcgZXh0ZW5kZWQgc3RhdGlzdGljcy4KIAkJICov Ci0JCWlmICghc3RhdGV4dF9pc19zdXBwb3J0ZWRfam9pbl9jbGF1c2Uocm9vdCwgY2xhdXNlLCBz amluZm8pKQorCQlpZiAoIXN0YXRleHRfaXNfc3VwcG9ydGVkX2pvaW5fY2xhdXNlKHJvb3QsIGNs YXVzZSkpCiAJCQljb250aW51ZTsKIAogCQkvKgpAQCAtMzAxNiw3ICszMDEyLDcgQEAgdHlwZWRl ZiBzdHJ1Y3QgSm9pblBhaXJJbmZvCiAgKi8KIHN0YXRpYyBKb2luUGFpckluZm8gKgogc3RhdGV4 dF9idWlsZF9qb2luX3BhaXJzKFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpjbGF1c2VzLAotCQkJ CQkJIEpvaW5UeXBlIGpvaW50eXBlLCBTcGVjaWFsSm9pbkluZm8gKnNqaW5mbywKKwkJCQkJCSBK b2luVHlwZSBqb2ludHlwZSwKIAkJCQkJCSBCaXRtYXBzZXQgKmVzdGltYXRlZGNsYXVzZXMsIGlu dCAqbnBhaXJzKQogewogCWludAkJCQljbnQ7CkBAIC0zMDUxLDcgKzMwNDcsNyBAQCBzdGF0ZXh0 X2J1aWxkX2pvaW5fcGFpcnMoUGxhbm5lckluZm8gKnJvb3QsIExpc3QgKmNsYXVzZXMsCiAJCSAq IHRoZSBtb21lbnQgd2Ugc3VwcG9ydCBqdXN0IChFeHByIG9wIEV4cHIpIGNsYXVzZXMgd2l0aCBl YWNoCiAJCSAqIHNpZGUgcmVmZXJlbmNpbmcganVzdCBhIHNpbmdsZSByZWxhdGlvbikuCiAJCSAq LwotCQlpZiAoIXN0YXRleHRfaXNfc3VwcG9ydGVkX2pvaW5fY2xhdXNlKHJvb3QsIGNsYXVzZSwg c2ppbmZvKSkKKwkJaWYgKCFzdGF0ZXh0X2lzX3N1cHBvcnRlZF9qb2luX2NsYXVzZShyb290LCBj bGF1c2UpKQogCQkJY29udGludWU7CiAKIAkJLyogc3RhdGV4dF9pc19zdXBwb3J0ZWRfam9pbl9j bGF1c2UgZ3VhcmFudGVlcyBSZXN0cmljdEluZm8gKi8KQEAgLTMyNDAsNyArMzIzNiw3IEBAIGdl dF9leHByZXNzaW9uX2Zvcl9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwg Tm9kZSAqY2xhdXNlKQogICovCiBTZWxlY3Rpdml0eQogc3RhdGV4dF9jbGF1c2VsaXN0X2pvaW5f c2VsZWN0aXZpdHkoUGxhbm5lckluZm8gKnJvb3QsIExpc3QgKmNsYXVzZXMsCi0JCQkJCQkJCQlK b2luVHlwZSBqb2ludHlwZSwgU3BlY2lhbEpvaW5JbmZvICpzamluZm8sCisJCQkJCQkJCQlKb2lu VHlwZSBqb2ludHlwZSwKIAkJCQkJCQkJCUJpdG1hcHNldCAqKmVzdGltYXRlZGNsYXVzZXMpCiB7 CiAJaW50CQkJaTsKQEAgLTMyNTQsNyArMzI1MCw3IEBAIHN0YXRleHRfY2xhdXNlbGlzdF9qb2lu X3NlbGVjdGl2aXR5KFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpjbGF1c2VzLAogCQlyZXR1cm4g MS4wOwogCiAJLyogZXh0cmFjdCBwYWlycyBvZiBqb2luZWQgcmVsYXRpb25zIGZyb20gdGhlIGxp c3Qgb2YgY2xhdXNlcyAqLwotCWluZm8gPSBzdGF0ZXh0X2J1aWxkX2pvaW5fcGFpcnMocm9vdCwg Y2xhdXNlcywgam9pbnR5cGUsIHNqaW5mbywKKwlpbmZvID0gc3RhdGV4dF9idWlsZF9qb2luX3Bh aXJzKHJvb3QsIGNsYXVzZXMsIGpvaW50eXBlLAogCQkJCQkJCQkJKmVzdGltYXRlZGNsYXVzZXMs ICZuaW5mbyk7CiAKIAkvKiBubyB1c2VmdWwgam9pbiBwYWlycyAqLwpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvc3RhdGlzdGljcy9zdGF0aXN0aWNzLmggYi9zcmMvaW5jbHVkZS9zdGF0aXN0aWNz L3N0YXRpc3RpY3MuaAppbmRleCA0ZjcwMDM0OTgzLi4yOGQ5ZTcyZTU0IDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9zdGF0aXN0aWNzL3N0YXRpc3RpY3MuaAorKysgYi9zcmMvaW5jbHVkZS9zdGF0 aXN0aWNzL3N0YXRpc3RpY3MuaApAQCAtMTM0LDcgKzEzNCw2IEBAIGV4dGVybiBib29sIHN0YXRl eHRfdHJ5X2pvaW5fZXN0aW1hdGVzKFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpjbGF1c2VzLCBp bnQgdmFyCiAJCQkJCQkJCQkgICBKb2luVHlwZSBqb2ludHlwZSwgU3BlY2lhbEpvaW5JbmZvICpz amluZm8pOwogCiBleHRlcm4gU2VsZWN0aXZpdHkgc3RhdGV4dF9jbGF1c2VsaXN0X2pvaW5fc2Vs ZWN0aXZpdHkoUGxhbm5lckluZm8gKnJvb3QsIExpc3QgKmNsYXVzZXMsCi0JCQkJCQkJCQkJCQkJ ICAgSm9pblR5cGUgam9pbnR5cGUsIFNwZWNpYWxKb2luSW5mbyAqc2ppbmZvLAotCQkJCQkJCQkJ CQkJCSAgIEJpdG1hcHNldCAqKmVzdGltYXRlZGNsYXVzZXMpOworCQkJCQkJCQkJCQkJCSAgIEpv aW5UeXBlIGpvaW50eXBlLCBCaXRtYXBzZXQgKiplc3RpbWF0ZWRjbGF1c2VzKTsKIAogI2VuZGlm CQkJCQkJCS8qIFNUQVRJU1RJQ1NfSCAqLwotLSAKMi4zNC4xCgoAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAHYxLTAwMDQtUmVtb3ZlLWpvaW5UeXBlLWFyZ3VtZW50LnBhdGNoAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAw NjQ0ADAwMDE3NTAAMDAwMTc1MAAwMDAwMDAwNTI1MAAxNDYxMzMyNjU3NQAwMjAzMjQAIDAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIgIAB5aXpoaS5memgA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAHlpemhpLmZ6aAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAARnJvbSA2NmUyNjM5MWRjZWRhZDBlMTAwYjk4NGRmZjVhNWNmM2EwMzA5MzgwIE1v biBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiAieWl6aGkuZnpoIiA8eWl6aGkuZnpoQGFsaWJh YmEtaW5jLmNvbT4KRGF0ZTogVHVlLCAyIEFwciAyMDI0IDEwOjA3OjAwICswODAwClN1YmplY3Q6 IFtQQVRDSCB2MSAwNC8yMl0gUmVtb3ZlIGpvaW5UeXBlIGFyZ3VtZW50LgoKLS0tCiBzcmMvYmFj a2VuZC9vcHRpbWl6ZXIvcGF0aC9jbGF1c2VzZWwuYyAgfCAxIC0KIHNyYy9iYWNrZW5kL3N0YXRp c3RpY3MvZXh0ZW5kZWRfc3RhdHMuYyB8IDQgKy0tLQogc3JjL2luY2x1ZGUvc3RhdGlzdGljcy9z dGF0aXN0aWNzLmggICAgIHwgMyArLS0KIDMgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCsp LCA2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRo L2NsYXVzZXNlbC5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY2xhdXNlc2VsLmMKaW5k ZXggY2E1NTBlNmMwYy4uNTAyMTBlYzJjYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3BhdGgvY2xhdXNlc2VsLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY2xh dXNlc2VsLmMKQEAgLTIxNyw3ICsyMTcsNiBAQCBjbGF1c2VsaXN0X3NlbGVjdGl2aXR5X2V4dChQ bGFubmVySW5mbyAqcm9vdCwKIAkJQXNzZXJ0KHZhclJlbGlkID09IDApOwogCQlBc3NlcnQoc2pp bmZvICE9IE5VTEwpOwogCQlzMSAqPSBzdGF0ZXh0X2NsYXVzZWxpc3Rfam9pbl9zZWxlY3Rpdml0 eShyb290LCBjbGF1c2VzLAotCQkJCQkJCQkJCQkJICBqb2ludHlwZSwKIAkJCQkJCQkJCQkJCSAg JmVzdGltYXRlZGNsYXVzZXMpOwogCX0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RhdGlz dGljcy9leHRlbmRlZF9zdGF0cy5jIGIvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9leHRlbmRlZF9z dGF0cy5jCmluZGV4IGNhNjA0MzA2ZTcuLjkyNDdhZWYwYjcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3N0YXRpc3RpY3MvZXh0ZW5kZWRfc3RhdHMuYworKysgYi9zcmMvYmFja2VuZC9zdGF0aXN0 aWNzL2V4dGVuZGVkX3N0YXRzLmMKQEAgLTMwMTIsNyArMzAxMiw2IEBAIHR5cGVkZWYgc3RydWN0 IEpvaW5QYWlySW5mbwogICovCiBzdGF0aWMgSm9pblBhaXJJbmZvICoKIHN0YXRleHRfYnVpbGRf am9pbl9wYWlycyhQbGFubmVySW5mbyAqcm9vdCwgTGlzdCAqY2xhdXNlcywKLQkJCQkJCSBKb2lu VHlwZSBqb2ludHlwZSwKIAkJCQkJCSBCaXRtYXBzZXQgKmVzdGltYXRlZGNsYXVzZXMsIGludCAq bnBhaXJzKQogewogCWludAkJCQljbnQ7CkBAIC0zMjM2LDcgKzMyMzUsNiBAQCBnZXRfZXhwcmVz c2lvbl9mb3JfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsIE5vZGUgKmNs YXVzZSkKICAqLwogU2VsZWN0aXZpdHkKIHN0YXRleHRfY2xhdXNlbGlzdF9qb2luX3NlbGVjdGl2 aXR5KFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpjbGF1c2VzLAotCQkJCQkJCQkJSm9pblR5cGUg am9pbnR5cGUsCiAJCQkJCQkJCQlCaXRtYXBzZXQgKiplc3RpbWF0ZWRjbGF1c2VzKQogewogCWlu dAkJCWk7CkBAIC0zMjUwLDcgKzMyNDgsNyBAQCBzdGF0ZXh0X2NsYXVzZWxpc3Rfam9pbl9zZWxl Y3Rpdml0eShQbGFubmVySW5mbyAqcm9vdCwgTGlzdCAqY2xhdXNlcywKIAkJcmV0dXJuIDEuMDsK IAogCS8qIGV4dHJhY3QgcGFpcnMgb2Ygam9pbmVkIHJlbGF0aW9ucyBmcm9tIHRoZSBsaXN0IG9m IGNsYXVzZXMgKi8KLQlpbmZvID0gc3RhdGV4dF9idWlsZF9qb2luX3BhaXJzKHJvb3QsIGNsYXVz ZXMsIGpvaW50eXBlLAorCWluZm8gPSBzdGF0ZXh0X2J1aWxkX2pvaW5fcGFpcnMocm9vdCwgY2xh dXNlcywKIAkJCQkJCQkJCSplc3RpbWF0ZWRjbGF1c2VzLCAmbmluZm8pOwogCiAJLyogbm8gdXNl ZnVsIGpvaW4gcGFpcnMgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0YXRpc3RpY3Mvc3Rh dGlzdGljcy5oIGIvc3JjL2luY2x1ZGUvc3RhdGlzdGljcy9zdGF0aXN0aWNzLmgKaW5kZXggMjhk OWU3MmU1NC4uOTdhMjE3YWYxZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RhdGlzdGljcy9z dGF0aXN0aWNzLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RhdGlzdGljcy9zdGF0aXN0aWNzLmgKQEAg LTEzMyw3ICsxMzMsNiBAQCBleHRlcm4gU3RhdGlzdGljRXh0SW5mbyAqc3RhdGV4dF9maW5kX21h dGNoaW5nX21jdihQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbwogZXh0ZXJuIGJvb2wgc3Rh dGV4dF90cnlfam9pbl9lc3RpbWF0ZXMoUGxhbm5lckluZm8gKnJvb3QsIExpc3QgKmNsYXVzZXMs IGludCB2YXJSZWxpZCwKIAkJCQkJCQkJCSAgIEpvaW5UeXBlIGpvaW50eXBlLCBTcGVjaWFsSm9p bkluZm8gKnNqaW5mbyk7CiAKLWV4dGVybiBTZWxlY3Rpdml0eSBzdGF0ZXh0X2NsYXVzZWxpc3Rf am9pbl9zZWxlY3Rpdml0eShQbGFubmVySW5mbyAqcm9vdCwgTGlzdCAqY2xhdXNlcywKLQkJCQkJ CQkJCQkJCQkgICBKb2luVHlwZSBqb2ludHlwZSwgQml0bWFwc2V0ICoqZXN0aW1hdGVkY2xhdXNl cyk7CitleHRlcm4gU2VsZWN0aXZpdHkgc3RhdGV4dF9jbGF1c2VsaXN0X2pvaW5fc2VsZWN0aXZp dHkoUGxhbm5lckluZm8gKnJvb3QsIExpc3QgKmNsYXVzZXMsIEJpdG1hcHNldCAqKmVzdGltYXRl ZGNsYXVzZXMpOwogCiAjZW5kaWYJCQkJCQkJLyogU1RBVElTVElDU19IICovCi0tIAoyLjM0LjEK CgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAdjEtMDAwNS11c2UtdGhlLXByZS1jYWxjdWxhdGVkLVJlc3RyaWN0SW5mby1sZWZ0LXJpZ2h0 X3JlLnBhdGNoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDA2NDQAMDAw MTc1MAAwMDAxNzUwADAwMDAwMDA1NTUzADE0NjEzMzI2NTc1ADAyNTA1NgAgMAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAHlpemhpLmZ6aAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAeWl6aGkuZnpoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AABGcm9tIGY3NmE0ZjE1MGFmOTNlYWRjNmJmNTVkMmM5NDg0Yjg4ZmQwZDgxMjIgTW9uIFNlcCAx NyAwMDowMDowMCAyMDAxCkZyb206ICJ5aXpoaS5memgiIDx5aXpoaS5memhAYWxpYmFiYS1pbmMu Y29tPgpEYXRlOiBUdWUsIDIgQXByIDIwMjQgMTA6Mzk6MDMgKzA4MDAKU3ViamVjdDogW1BBVENI IHYxIDA1LzIyXSB1c2UgdGhlIHByZS1jYWxjdWxhdGVkCiBSZXN0cmljdEluZm8tPmxlZnR8cmln aHRfcmVsaWRzCgpJdCBzaG91bGQgaGFzIGJldHRlciBwZXJmb3JtYW5jZSB0aGFuIHB1bGxfdmFy bm9zIGFuZCBlYXNpZXIgdG8KdW5kZXJzdGFuZC4KLS0tCiBzcmMvYmFja2VuZC9zdGF0aXN0aWNz L2V4dGVuZGVkX3N0YXRzLmMgfCAzNSArKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tCiAxIGZpbGUg Y2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCAyOSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9zdGF0aXN0aWNzL2V4dGVuZGVkX3N0YXRzLmMgYi9zcmMvYmFja2VuZC9zdGF0 aXN0aWNzL2V4dGVuZGVkX3N0YXRzLmMKaW5kZXggOTI0N2FlZjBiNy4uNDJhMDNhODgwMyAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9leHRlbmRlZF9zdGF0cy5jCisrKyBiL3Ny Yy9iYWNrZW5kL3N0YXRpc3RpY3MvZXh0ZW5kZWRfc3RhdHMuYwpAQCAtMjgxMSw3ICsyODExLDcg QEAgc3RhdGV4dF9pc19zdXBwb3J0ZWRfam9pbl9jbGF1c2UoUGxhbm5lckluZm8gKnJvb3QsIE5v ZGUgKmNsYXVzZSkKIAlPaWQJb3Byc2VsOwogCVJlc3RyaWN0SW5mbyAgICpyaW5mbzsKIAlPcEV4 cHIJCSAgICpvcGNsYXVzZTsKLQlMaXN0Q2VsbAkgICAqbGM7CisJaW50CQkJCWxlZnRfcmVsaWQs IHJpZ2h0X3JlbGlkOwogCiAJLyoKIAkgKiBldmFsdWF0aW9uIGFzIGEgcmVzdHJpY3Rpb24gY2xh dXNlLCBlaXRoZXIgYXQgc2NhbiBub2RlIG9yIGZvcmNlZApAQCAtMjgyNywxMCArMjgyNyw2IEBA IHN0YXRleHRfaXNfc3VwcG9ydGVkX2pvaW5fY2xhdXNlKFBsYW5uZXJJbmZvICpyb290LCBOb2Rl ICpjbGF1c2UpCiAJcmluZm8gPSAoUmVzdHJpY3RJbmZvICopIGNsYXVzZTsKIAljbGF1c2UgPSAo Tm9kZSAqKSByaW5mby0+Y2xhdXNlOwogCi0JLyogaXMgaXQgcmVmZXJlbmNpbmcgbXVsdGlwbGUg cmVsYXRpb25zPyAqLwotCWlmIChibXNfbWVtYmVyc2hpcChyaW5mby0+Y2xhdXNlX3JlbGlkcykg IT0gQk1TX01VTFRJUExFKQotCQlyZXR1cm4gZmFsc2U7Ci0KIAkvKiB3ZSBvbmx5IHN1cHBvcnQg c2ltcGxlIG9wZXJhdG9yIGNsYXVzZXMgZm9yIG5vdyAqLwogCWlmICghaXNfb3BjbGF1c2UoY2xh dXNlKSkKIAkJcmV0dXJuIGZhbHNlOwpAQCAtMjg1Myw4ICsyODQ5LDYgQEAgc3RhdGV4dF9pc19z dXBwb3J0ZWRfam9pbl9jbGF1c2UoUGxhbm5lckluZm8gKnJvb3QsIE5vZGUgKmNsYXVzZSkKIAkg KiB3aGljaCBpcyBzdGlsbCB0ZWNobmljYWxseSBhbiBvcGNsYXVzZSwgYnV0IHdlIGNhbid0IG1h dGNoIGl0IHRvCiAJICogZXh0ZW5kZWQgc3RhdGlzdGljcyBpbiBhIHNpbXBsZSB3YXkuCiAJICoK LQkgKiBYWFggVGhpcyBhbHNvIG1lYW5zIHdlIHJlcXVpcmUgcmluZm8tPmNsYXVzZV9yZWxpZHMg dG8gaGF2ZSAyIHJlbHMuCi0JICoKIAkgKiBYWFggQWxzbyBjaGVjayBpdCdzIG5vdCBleHByZXNz aW9uIG9uIHN5c3RlbSBhdHRyaWJ1dGVzLCB3aGljaCB3ZQogCSAqIGRvbid0IGFsbG93IGluIGV4 dGVuZGVkIHN0YXRpc3RpY3MuCiAJICoKQEAgLTI4NjMsMzAgKzI4NTcsMTMgQEAgc3RhdGV4dF9p c19zdXBwb3J0ZWRfam9pbl9jbGF1c2UoUGxhbm5lckluZm8gKnJvb3QsIE5vZGUgKmNsYXVzZSkK IAkgKiBvciBzb21ldGhpbmcgbGlrZSB0aGF0LiBXZSBjb3VsZCBkbyAiY2FydGVzaWFuIHByb2R1 Y3QiIG9mIHRoZSBNQ1YKIAkgKiBzdGF0cyBhbmQgcmVzdHJpY3QgaXQgdXNpbmcgdGhpcyBjb25k aXRpb24uCiAJICovCi0JZm9yZWFjaCAobGMsIG9wY2xhdXNlLT5hcmdzKQotCXsKLQkJQml0bWFw c2V0ICp2YXJub3MgPSBOVUxMOwotCQlOb2RlICpleHByID0gKE5vZGUgKikgbGZpcnN0KGxjKTsK LQotCQl2YXJub3MgPSBwdWxsX3Zhcm5vcyhyb290LCBleHByKTsKIAotCQkvKgotCQkgKiBObyBh cmd1bWVudCBzaG91bGQgcmVmZXJlbmNlIG1vcmUgdGhhbiBqdXN0IG9uZSByZWxhdGlvbi4KLQkJ ICoKLQkJICogVGhpcyBlZmZlY3RpdmVseSBtZWFucyBlYWNoIHNpZGUgcmVmZXJlbmNlcyBqdXN0 IHR3byByZWxhdGlvbnMuCi0JCSAqIElmIHRoZXJlJ3Mgbm8gcmVsYXRpb24gb24gb25lIHNpZGUs IGl0J3MgYSBDb25zdCwgYW5kIHRoZSBvdGhlcgotCQkgKiBzaWRlIGhhcyB0byBiZSBlaXRoZXIg Q29uc3Qgb3IgRXhwciB3aXRoIGEgc2luZ2xlIHJlbC4gSW4gd2hpY2gKLQkJICogY2FzZSBpdCBj YW4ndCBiZSBhIGpvaW4gY2xhdXNlLgotCQkgKi8KLQkJaWYgKGJtc19udW1fbWVtYmVycyh2YXJu b3MpID4gMSkKLQkJCXJldHVybiBmYWxzZTsKKwlpZiAoIWJtc19nZXRfc2luZ2xldG9uX21lbWJl cihyaW5mby0+bGVmdF9yZWxpZHMsICZsZWZ0X3JlbGlkKSB8fAorCQkhYm1zX2dldF9zaW5nbGV0 b25fbWVtYmVyKHJpbmZvLT5yaWdodF9yZWxpZHMsICZyaWdodF9yZWxpZCkpCisJCXJldHVybiBm YWxzZTsKIAotCQkvKgotCQkgKiBYWFggTWF5YmUgY2hlY2sgdGhhdCBib3RoIHJlbGF0aW9ucyBo YXZlIGV4dGVuZGVkIHN0YXRpc3RpY3MKLQkJICogKG5vIHBvaW50IGluIGNvbnNpZGVyaW5nIHRo ZSBjbGF1c2UgYXMgdXNlZnVsIHdpdGhvdXQgaXQpLiBCdXQKLQkJICogd2UnbGwgZG8gdGhhdCBj aGVjayBsYXRlciBhbnl3YXksIHNvIGtlZXAgdGhpcyBjaGVhcC4KLQkJICovCi0JfQorCWlmIChs ZWZ0X3JlbGlkID09IHJpZ2h0X3JlbGlkKQorCQlyZXR1cm4gZmFsc2U7CiAKIAlyZXR1cm4gdHJ1 ZTsKIH0KLS0gCjIuMzQuMQoKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2MS0w MDA2LUZhc3QtcGF0aC1mb3ItZ2VuZXJhbC1jbGF1c2VsaXN0X3NlbGVjdGl2aXR5LnBhdGNoAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwMDY0NAAwMDAxNzUwADAw MDE3NTAAMDAwMDAwMDE3NDYAMTQ2MTMzMjY1NzUAMDI0MzAwACAwAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyICAAeWl6aGkuZnpoAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAB5aXpoaS5memgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEZyb20g YjJjNTBhMDI1NGM1MzZhZDk2MTJmMTMwMzFhOGQ3NDQ1MmJiOGRmZiBNb24gU2VwIDE3IDAwOjAw OjAwIDIwMDEKRnJvbTogInlpemhpLmZ6aCIgPHlpemhpLmZ6aEBhbGliYWJhLWluYy5jb20+CkRh dGU6IFR1ZSwgMiBBcHIgMjAyNCAxNDo0Nzo1NCArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjEgMDYv MjJdIEZhc3QgcGF0aCBmb3IgZ2VuZXJhbCBjbGF1c2VsaXN0X3NlbGVjdGl2aXR5CgpJdCBzaG91 bGQgYmUgY29tbW9uIGluIHRoZSBtb3N0IHF1ZXJpZXMgbGlrZQoKU0VMRUNUICogRlJPTSB0MSwg dDIgV0hFUkUgdDEuYSA9IHQyLmEgQU5EIHQxLmEgPiAzOwoKY2xhdXNlcyA9PSBOVUxMIGF0IHRo ZSBzY2FuIGxldmVsIG9mIHQyLgotLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2NsYXVz ZXNlbC5jIHwgMyArKysKIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKykKCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jbGF1c2VzZWwuYyBiL3NyYy9iYWNrZW5k L29wdGltaXplci9wYXRoL2NsYXVzZXNlbC5jCmluZGV4IDUwMjEwZWMyY2EuLmM0ZjVmYWU5ZDcg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2NsYXVzZXNlbC5jCisrKyBi L3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2NsYXVzZXNlbC5jCkBAIC0xMzIsNiArMTMyLDkg QEAgY2xhdXNlbGlzdF9zZWxlY3Rpdml0eV9leHQoUGxhbm5lckluZm8gKnJvb3QsCiAJaW50CQkJ bGlzdGlkeDsKIAlib29sCQlzaW5nbGVfY2xhdXNlX29wdGltaXphdGlvbiA9IHRydWU7CiAKKwlp ZiAoY2xhdXNlcyA9PSBOVUxMKQorCQlyZXR1cm4gMS4wOworCiAJLyoKIAkgKiBUaGUgb3B0aW1p emF0aW9uIG9mIHNraXBwaW5nIHRvIGNsYXVzZV9zZWxlY3Rpdml0eV9leHQgZm9yIHNpbmdsZQog CSAqIGNsYXVzZXMgbWVhbnMgd2UgY2FuJ3QgaW1wcm92ZSBqb2luIGVzdGltYXRlcyB3aXRoIGEg c2luZ2xlIGpvaW4KLS0gCjIuMzQuMQoKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2MS0wMDA3 LWJtc19pc19lbXB0eS1pcy1tb3JlLWVmZmVjdGl2ZS10aGFuLWJtc19udW1fbWVtYmUucGF0Y2gA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwMDY0NAAwMDAxNzUwADAwMDE3 NTAAMDAwMDAwMDE1MDIAMTQ2MTMzMjY1NzUAMDI1MjAzACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyICAAeWl6aGkuZnpoAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAB5aXpoaS5memgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEZyb20gYmVk MDc3NzA2OWMwOWVjYjBkNDllZTYwNzk2MGEzMjc1MTI3ZWY2ZiBNb24gU2VwIDE3IDAwOjAwOjAw IDIwMDEKRnJvbTogInlpemhpLmZ6aCIgPHlpemhpLmZ6aEBhbGliYWJhLWluYy5jb20+CkRhdGU6 IFR1ZSwgMiBBcHIgMjAyNCAxNDo1MzozMCArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjEgMDcvMjJd IGJtc19pc19lbXB0eSBpcyBtb3JlIGVmZmVjdGl2ZSB0aGFuCiBibXNfbnVtX21lbWJlcnMoYikg PT0gMC4KCi0tLQogc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9leHRlbmRlZF9zdGF0cy5jIHwgMiAr LQogMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9leHRlbmRlZF9zdGF0cy5jIGIvc3JjL2JhY2tl bmQvc3RhdGlzdGljcy9leHRlbmRlZF9zdGF0cy5jCmluZGV4IDQyYTAzYTg4MDMuLmIwNWJlOTU3 OGMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0YXRpc3RpY3MvZXh0ZW5kZWRfc3RhdHMuYwor KysgYi9zcmMvYmFja2VuZC9zdGF0aXN0aWNzL2V4dGVuZGVkX3N0YXRzLmMKQEAgLTI5MzIsNyAr MjkzMiw3IEBAIHN0YXRleHRfdHJ5X2pvaW5fZXN0aW1hdGVzKFBsYW5uZXJJbmZvICpyb290LCBM aXN0ICpjbGF1c2VzLCBpbnQgdmFyUmVsaWQsCiAJfQogCiAJLyogbm8gam9pbiBjbGF1c2VzIGZv dW5kLCBkb24ndCB0cnkgYXBwbHlpbmcgZXh0ZW5kZWQgc3RhdHMgKi8KLQlpZiAoYm1zX251bV9t ZW1iZXJzKHJlbGlkcykgPT0gMCkKKwlpZiAoYm1zX2lzX2VtcHR5KHJlbGlkcykpCiAJCXJldHVy biBmYWxzZTsKIAogCS8qCi0tIAoyLjM0LjEKCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2MS0wMDA4LWEt YnJhbmNoLW9mLXVwZGF0ZXMtYXJvdW5kLUpvaW5QYWlySW5mby5wYXRjaAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwMDY0NAAwMDAxNzUwADAwMDE3NTAA MDAwMDAwMTc3NTEAMTQ2MTMzMjY1NzUAMDIzMDIwACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyICAAeWl6aGkuZnpoAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAB5aXpoaS5memgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEZyb20gYjBiYWVm ODkxODIwMGNjYWE4ODkwYjZmNmM3OWY3MmFlM2Q3NGMwNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIw MDEKRnJvbTogInlpemhpLmZ6aCIgPHlpemhpLmZ6aEBhbGliYWJhLWluYy5jb20+CkRhdGU6IFR1 ZSwgMiBBcHIgMjAyNCAxNjowMTowNSArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjEgMDgvMjJdIGEg YnJhbmNoIG9mIHVwZGF0ZXMgYXJvdW5kIEpvaW5QYWlySW5mbwoKMS4gcmVuYW1lIHJlbHMgdG8g cmVsaWRzIHdoaWxlIHRoZSAicmVscyIgbWF5IHJlZmVyZW5jZSB0byBsaXN0IG9mClJlbE9wdElu Zm8gb3IgUmVsaWRzLiBidXQgdGhlIGxhdGVyIG9uZSByZWZlcmVuY2UgdG8gUmVsaWRzIGFsbCB0 aGUKdGltZS4KCjIuIFN0b3JlIFJlc3RyaWN0SW5mbyB0byBKb2luUGFpckluZm8uY2xhdXNlcyBz byB0aGF0IHdlIGNhbiByZXVzZQp0aGUgbGVmdF9yZWxpZHMsIHJpZ2h0X3JlbGlkcyB3aGljaCB3 aWxsIHNhdmUgdXMgZnJvbSBjYWxsaW5nCnB1bGxfdmFybm9zLgoKMy4gY3JlYXRlIGJtc19udGhf bWVtYmVyIGZ1bmN0aW9uIGluIGJpdG1hcHNldC5jIGFuZCB1c2UgaXQKZXh0cmFjdF9yZWxhdGlv bl9pbmZvLCB0aGUgZnVuY3Rpb24gbmFtZSBpcyBzZWxmLWRvY3VtZW50ZWQuCgo0LiBwZnJlZSB0 aGUgSm9pblBhaXJJbmZvIGFycmF5IHdoZW4gd2UgYXJlIGRvbmUgd2l0aCB0aGF0LgotLS0KIHNy Yy9iYWNrZW5kL25vZGVzL2JpdG1hcHNldC5jICAgICAgICAgICB8IDE4ICsrKysrKysrKysrKwog c3JjL2JhY2tlbmQvc3RhdGlzdGljcy9leHRlbmRlZF9zdGF0cy5jIHwgMzcgKysrKysrKysrKysr LS0tLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9tY3YuYyAgICAgICAgICAgIHwg MzQgKysrKysrLS0tLS0tLS0tLS0tLS0tLS0KIHNyYy9pbmNsdWRlL25vZGVzL2JpdG1hcHNldC5o ICAgICAgICAgICB8ICAxICsKIDQgZmlsZXMgY2hhbmdlZCwgNDQgaW5zZXJ0aW9ucygrKSwgNDYg ZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMvYml0bWFwc2V0LmMg Yi9zcmMvYmFja2VuZC9ub2Rlcy9iaXRtYXBzZXQuYwppbmRleCBjZDA1YzY0MmIwLi43YzEyOTFh ZTY0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9iaXRtYXBzZXQuYworKysgYi9zcmMv YmFja2VuZC9ub2Rlcy9iaXRtYXBzZXQuYwpAQCAtNzcyLDYgKzc3MiwyNCBAQCBibXNfbnVtX21l bWJlcnMoY29uc3QgQml0bWFwc2V0ICphKQogCXJldHVybiByZXN1bHQ7CiB9CiAKKy8qCisgKiBi bXNfbnRoX21lbWJlciAtIHJldHVybiB0aGUgbnRoIG1lbWJlciwgaW5kZXggc3RhcnRzIHdpdGgg MC4KKyAqLworaW50CitibXNfbnRoX21lbWJlcihjb25zdCBCaXRtYXBzZXQgKmEsIGludCBpKQor eworCWludCBpZHgsIHJlcyA9IC0xOworCisJZm9yIChpZHggPSAwOyBpZHggPD0gaTsgaWR4Kysp CisJeworCQlyZXMgPSBibXNfbmV4dF9tZW1iZXIoYSwgcmVzKTsKKworCQlpZiAocmVzIDwgMCkK KwkJCWVsb2coRVJST1IsICJubyBlbm91Z2ggbWVtYmVycyBmb3IgJWQiLCBpKTsKKwl9CisJcmV0 dXJuIHJlczsKK30KKwogLyoKICAqIGJtc19tZW1iZXJzaGlwIC0gZG9lcyBhIHNldCBoYXZlIHpl cm8sIG9uZSwgb3IgbXVsdGlwbGUgbWVtYmVycz8KICAqCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9zdGF0aXN0aWNzL2V4dGVuZGVkX3N0YXRzLmMgYi9zcmMvYmFja2VuZC9zdGF0aXN0aWNzL2V4 dGVuZGVkX3N0YXRzLmMKaW5kZXggYjA1YmU5NTc4Yy4uZGMxMDU5OGNiMSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvc3RhdGlzdGljcy9leHRlbmRlZF9zdGF0cy5jCisrKyBiL3NyYy9iYWNrZW5k L3N0YXRpc3RpY3MvZXh0ZW5kZWRfc3RhdHMuYwpAQCAtMjk2NywxMSArMjk2NywxMSBAQCBzdGF0 ZXh0X3RyeV9qb2luX2VzdGltYXRlcyhQbGFubmVySW5mbyAqcm9vdCwgTGlzdCAqY2xhdXNlcywg aW50IHZhclJlbGlkLAogfQogCiAvKgotICogSW5mb3JtYXRpb24gYWJvdXQgdHdvIGpvaW5lZCBy ZWxhdGlvbnMsIGFsb25nIHdpdGggdGhlIGpvaW4gY2xhdXNlcyBiZXR3ZWVuLgorICogSW5mb3Jt YXRpb24gYWJvdXQgdHdvIGpvaW5lZCByZWxhdGlvbnMsIGdyb3VwIGJ5IGNsYXVzZXMgYnkgcmVs aWRzLgogICovCiB0eXBlZGVmIHN0cnVjdCBKb2luUGFpckluZm8KIHsKLQlCaXRtYXBzZXQgICpy ZWxzOworCUJpdG1hcHNldCAgKnJlbGlkczsKIAlMaXN0CSAgICpjbGF1c2VzOwogfSBKb2luUGFp ckluZm87CiAKQEAgLTMwMzQsOSArMzAzNCw5IEBAIHN0YXRleHRfYnVpbGRfam9pbl9wYWlycyhQ bGFubmVySW5mbyAqcm9vdCwgTGlzdCAqY2xhdXNlcywKIAkJZm91bmQgPSBmYWxzZTsKIAkJZm9y IChpID0gMDsgaSA8IGNudDsgaSsrKQogCQl7Ci0JCQlpZiAoYm1zX2lzX3N1YnNldChyaW5mby0+ Y2xhdXNlX3JlbGlkcywgaW5mb1tpXS5yZWxzKSkKKwkJCWlmIChibXNfaXNfc3Vic2V0KHJpbmZv LT5jbGF1c2VfcmVsaWRzLCBpbmZvW2ldLnJlbGlkcykpCiAJCQl7Ci0JCQkJaW5mb1tpXS5jbGF1 c2VzID0gbGFwcGVuZChpbmZvW2ldLmNsYXVzZXMsIGNsYXVzZSk7CisJCQkJaW5mb1tpXS5jbGF1 c2VzID0gbGFwcGVuZChpbmZvW2ldLmNsYXVzZXMsIHJpbmZvKTsKIAkJCQlmb3VuZCA9IHRydWU7 CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC0zMDQ0LDE0ICszMDQ0LDE3IEBAIHN0YXRleHRfYnVpbGRf am9pbl9wYWlycyhQbGFubmVySW5mbyAqcm9vdCwgTGlzdCAqY2xhdXNlcywKIAogCQlpZiAoIWZv dW5kKQogCQl7Ci0JCQlpbmZvW2NudF0ucmVscyA9IHJpbmZvLT5jbGF1c2VfcmVsaWRzOwotCQkJ aW5mb1tjbnRdLmNsYXVzZXMgPSBsYXBwZW5kKGluZm9bY250XS5jbGF1c2VzLCBjbGF1c2UpOwor CQkJaW5mb1tjbnRdLnJlbGlkcyA9IHJpbmZvLT5jbGF1c2VfcmVsaWRzOworCQkJaW5mb1tjbnRd LmNsYXVzZXMgPSBsYXBwZW5kKGluZm9bY250XS5jbGF1c2VzLCByaW5mbyk7CiAJCQljbnQrKzsK IAkJfQogCX0KIAogCWlmIChjbnQgPT0gMCkKKwl7CisJCXBmcmVlKGluZm8pOwogCQlyZXR1cm4g TlVMTDsKKwl9CiAKIAkqbnBhaXJzID0gY250OwogCXJldHVybiBpbmZvOwpAQCAtMzA3MSw3ICsz MDc0LDYgQEAgc3RhdGljIFJlbE9wdEluZm8gKgogZXh0cmFjdF9yZWxhdGlvbl9pbmZvKFBsYW5u ZXJJbmZvICpyb290LCBKb2luUGFpckluZm8gKmluZm8sIGludCBpbmRleCwKIAkJCQkJICBTdGF0 aXN0aWNFeHRJbmZvICoqc3RhdCkKIHsKLQlpbnQJCQlrOwogCWludAkJCXJlbGlkOwogCVJlbE9w dEluZm8gKnJlbDsKIAlMaXN0Q2VsbCAgICpsYzsKQEAgLTMwODEsMTYgKzMwODMsNyBAQCBleHRy YWN0X3JlbGF0aW9uX2luZm8oUGxhbm5lckluZm8gKnJvb3QsIEpvaW5QYWlySW5mbyAqaW5mbywg aW50IGluZGV4LAogCiAJQXNzZXJ0KChpbmRleCA+PSAwKSAmJiAoaW5kZXggPD0gMSkpOwogCi0J ayA9IC0xOwotCXdoaWxlIChpbmRleCA+PSAwKQotCXsKLQkJayA9IGJtc19uZXh0X21lbWJlcihp bmZvLT5yZWxzLCBrKTsKLQkJaWYgKGsgPCAwKQotCQkJZWxvZyhFUlJPUiwgImZhaWxlZCB0byBl eHRyYWN0IHJlbGlkIik7Ci0KLQkJcmVsaWQgPSBrOwotCQlpbmRleC0tOwotCX0KKwlyZWxpZCA9 IGJtc19udGhfbWVtYmVyKGluZm8tPnJlbGlkcywgaW5kZXgpOwogCiAJcmVsID0gZmluZF9iYXNl X3JlbChyb290LCByZWxpZCk7CiAKQEAgLTMxMDIsNyArMzA5NSw4IEBAIGV4dHJhY3RfcmVsYXRp b25faW5mbyhQbGFubmVySW5mbyAqcm9vdCwgSm9pblBhaXJJbmZvICppbmZvLCBpbnQgaW5kZXgs CiAJZm9yZWFjaCAobGMsIGluZm8tPmNsYXVzZXMpCiAJewogCQlMaXN0Q2VsbCAqbGMyOwotCQlO b2RlICpjbGF1c2UgPSAoTm9kZSAqKSBsZmlyc3QobGMpOworCQlSZXN0cmljdEluZm8gKnJpbmZv ID0gKFJlc3RyaWN0SW5mbyAqKSBsZmlyc3QobGMpOworCQlOb2RlICpjbGF1c2UgPSAoTm9kZSAq KSByaW5mby0+Y2xhdXNlOwogCQlPcEV4cHIgKm9wY2xhdXNlID0gKE9wRXhwciAqKSBjbGF1c2U7 CiAKIAkJLyogb25seSBvcGNsYXVzZXMgc3VwcG9ydGVkIGZvciBub3cgKi8KQEAgLTMxNDIsNyAr MzEzNiw4IEBAIGV4dHJhY3RfcmVsYXRpb25faW5mbyhQbGFubmVySW5mbyAqcm9vdCwgSm9pblBh aXJJbmZvICppbmZvLCBpbnQgaW5kZXgsCiAJCQkgKiBjb21wYXRpYmxlIGJlY2F1c2Ugd2UgYWxy ZWFkeSBjaGVja2VkIGl0IHdoZW4gYnVpbGRpbmcgdGhlCiAJCQkgKiBqb2luIHBhaXJzLgogCQkJ ICovCi0JCQl2YXJub3MgPSBwdWxsX3Zhcm5vcyhyb290LCBhcmcpOworCQkJdmFybm9zID0gbGlz dF9jZWxsX251bWJlcihvcGNsYXVzZS0+YXJncywgbGMyKSA9PSAwID8KKwkJCQlyaW5mby0+bGVm dF9yZWxpZHMgOiByaW5mby0+cmlnaHRfcmVsaWRzOwogCiAJCQlpZiAocmVsaWQgPT0gYm1zX3Np bmdsZXRvbl9tZW1iZXIodmFybm9zKSkKIAkJCQlleHBycyA9IGxhcHBlbmQoZXhwcnMsIGFyZyk7 CkBAIC0zMzgzLDcgKzMzNzgsOCBAQCBzdGF0ZXh0X2NsYXVzZWxpc3Rfam9pbl9zZWxlY3Rpdml0 eShQbGFubmVySW5mbyAqcm9vdCwgTGlzdCAqY2xhdXNlcywKIAkJICovCiAJCWZvcmVhY2ggKGxj LCBpbmZvLT5jbGF1c2VzKQogCQl7Ci0JCQlOb2RlICpjbGF1c2UgPSAoTm9kZSAqKSBsZmlyc3Qo bGMpOworCQkJUmVzdHJpY3RJbmZvICpyaW5mbyA9IChSZXN0cmljdEluZm8gKikgbGZpcnN0KGxj KTsKKwkJCU5vZGUgKmNsYXVzZSA9IChOb2RlICopIHJpbmZvLT5jbGF1c2U7CiAJCQlMaXN0Q2Vs bCAqbGMyOwogCiAJCQlsaXN0aWR4ID0gLTE7CkBAIC0zNDA1LDUgKzM0MDEsNiBAQCBzdGF0ZXh0 X2NsYXVzZWxpc3Rfam9pbl9zZWxlY3Rpdml0eShQbGFubmVySW5mbyAqcm9vdCwgTGlzdCAqY2xh dXNlcywKIAkJfQogCX0KIAorCXBmcmVlKGluZm8pOwogCXJldHVybiBzOwogfQpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9tY3YuYyBiL3NyYy9iYWNrZW5kL3N0YXRpc3RpY3Mv bWN2LmMKaW5kZXggNDkyOTllZDkwNy4uNTNiNDgxYTI5MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvc3RhdGlzdGljcy9tY3YuYworKysgYi9zcmMvYmFja2VuZC9zdGF0aXN0aWNzL21jdi5jCkBA IC0yMjE0LDggKzIyMTQsNyBAQCBtY3ZfY29tYmluZV9leHRlbmRlZChQbGFubmVySW5mbyAqcm9v dCwgUmVsT3B0SW5mbyAqcmVsMSwgUmVsT3B0SW5mbyAqcmVsMiwKIAogCU1DVkxpc3QgICAgKm1j djEsCiAJCQkgICAqbWN2MjsKLQlpbnQJCQlpZHgsCi0JCQkJaSwKKwlpbnQJCQlpLAogCQkJCWo7 CiAJU2VsZWN0aXZpdHkgcyA9IDA7CiAKQEAgLTIzMDYsMjUgKzIzMDUsMTQgQEAgbWN2X2NvbWJp bmVfZXh0ZW5kZWQoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbDEsIFJlbE9wdElu Zm8gKnJlbDIsCiAJaW5kZXhlczIgPSAoaW50ICopIHBhbGxvYyhzaXplb2YoaW50KSAqIGxpc3Rf bGVuZ3RoKGNsYXVzZXMpKTsKIAlyZXZlcnNlID0gKGJvb2wgKikgcGFsbG9jKHNpemVvZihib29s KSAqIGxpc3RfbGVuZ3RoKGNsYXVzZXMpKTsKIAotCWlkeCA9IDA7CiAJZm9yZWFjaCAobGMsIGNs YXVzZXMpCiAJewotCQlOb2RlCSAgICpjbGF1c2UgPSAoTm9kZSAqKSBsZmlyc3QobGMpOworCQlS ZXN0cmljdEluZm8JKnJpbmZvID0gKFJlc3RyaWN0SW5mbyAqKSBsZmlyc3QobGMpOworCQlOb2Rl CSAgICpjbGF1c2UgPSAoTm9kZSAqKSByaW5mby0+Y2xhdXNlOwogCQlPcEV4cHIJICAgKm9wZXhw cjsKIAkJTm9kZQkgICAqZXhwcjEsCiAJCQkJICAgKmV4cHIyOwotCQlCaXRtYXBzZXQgICpyZWxp ZHMxLAotCQkJCSAgICpyZWxpZHMyOwotCi0JCS8qCi0JCSAqIFN0cmlwIHRoZSBSZXN0cmljdElu Zm8gbm9kZSwgZ2V0IHRoZSBhY3R1YWwgY2xhdXNlLgotCQkgKgotCQkgKiBYWFggTm90IHN1cmUg aWYgd2UgbmVlZCB0byBjYXJlIGFib3V0IHJlbW92aW5nIG90aGVyIG5vZGUgdHlwZXMKLQkJICog dG9vIChlLmcuIFJlbGFiZWxUeXBlIGV0Yy4pLiBzdGF0ZXh0X2lzX3N1cHBvcnRlZF9qb2luX2Ns YXVzZQotCQkgKiBtYXRjaGVzIHRoaXMsIGJ1dCBtYXliZSB3ZSBuZWVkIHRvIHJlbGF4IGl0Pwot CQkgKi8KLQkJaWYgKElzQShjbGF1c2UsIFJlc3RyaWN0SW5mbykpCi0JCQljbGF1c2UgPSAoTm9k ZSAqKSAoKFJlc3RyaWN0SW5mbyAqKSBjbGF1c2UpLT5jbGF1c2U7CisJCWludAkJaWR4ID0gbGlz dF9jZWxsX251bWJlcihjbGF1c2VzLCBsYyk7CiAKIAkJb3BleHByID0gKE9wRXhwciAqKSBjbGF1 c2U7CiAKQEAgLTIzMzgsMTIgKzIzMjYsOCBAQCBtY3ZfY29tYmluZV9leHRlbmRlZChQbGFubmVy SW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsMSwgUmVsT3B0SW5mbyAqcmVsMiwKIAkJZXhwcjEg PSBsaW5pdGlhbChvcGV4cHItPmFyZ3MpOwogCQlleHByMiA9IGxzZWNvbmQob3BleHByLT5hcmdz KTsKIAotCQkvKiBkZXRlcm1pbmUgb3JkZXIgb2YgY2xhdXNlcyAocmVsMSBvcCByZWwyKSBvciAo cmVsMiBvcCByZWwxKSAqLwotCQlyZWxpZHMxID0gcHVsbF92YXJub3Mocm9vdCwgZXhwcjEpOwot CQlyZWxpZHMyID0gcHVsbF92YXJub3Mocm9vdCwgZXhwcjIpOwotCi0JCWlmICgoYm1zX3Npbmds ZXRvbl9tZW1iZXIocmVsaWRzMSkgPT0gcmVsMS0+cmVsaWQpICYmCi0JCQkoYm1zX3NpbmdsZXRv bl9tZW1iZXIocmVsaWRzMikgPT0gcmVsMi0+cmVsaWQpKQorCQlpZiAoKGJtc19zaW5nbGV0b25f bWVtYmVyKHJpbmZvLT5sZWZ0X3JlbGlkcykgPT0gcmVsMS0+cmVsaWQpICYmCisJCQkoYm1zX3Np bmdsZXRvbl9tZW1iZXIocmluZm8tPnJpZ2h0X3JlbGlkcykgPT0gcmVsMi0+cmVsaWQpKQogCQl7 CiAJCQlPaWQJCWNvbGxpZDsKIApAQCAtMjM1OCw4ICsyMzQyLDggQEAgbWN2X2NvbWJpbmVfZXh0 ZW5kZWQoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbDEsIFJlbE9wdEluZm8gKnJl bDIsCiAJCQlleHByczEgPSBsYXBwZW5kKGV4cHJzMSwgZXhwcjEpOwogCQkJZXhwcnMyID0gbGFw cGVuZChleHByczIsIGV4cHIyKTsKIAkJfQotCQllbHNlIGlmICgoYm1zX3NpbmdsZXRvbl9tZW1i ZXIocmVsaWRzMikgPT0gcmVsMS0+cmVsaWQpICYmCi0JCQkJIChibXNfc2luZ2xldG9uX21lbWJl cihyZWxpZHMxKSA9PSByZWwyLT5yZWxpZCkpCisJCWVsc2UgaWYgKChibXNfc2luZ2xldG9uX21l bWJlcihyaW5mby0+cmlnaHRfcmVsaWRzKSA9PSByZWwxLT5yZWxpZCkgJiYKKwkJCQkgKGJtc19z aW5nbGV0b25fbWVtYmVyKHJpbmZvLT5sZWZ0X3JlbGlkcykgPT0gcmVsMi0+cmVsaWQpKQogCQl7 CiAJCQlPaWQJCWNvbGxpZDsKIApAQCAtMjM4Myw4ICsyMzY3LDYgQEAgbWN2X2NvbWJpbmVfZXh0 ZW5kZWQoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbDEsIFJlbE9wdEluZm8gKnJl bDIsCiAKIAkJQXNzZXJ0KChpbmRleGVzMltpZHhdID49IDApICYmCiAJCQkgICAoaW5kZXhlczJb aWR4XSA8IGJtc19udW1fbWVtYmVycyhzdGF0Mi0+a2V5cykgKyBsaXN0X2xlbmd0aChzdGF0Mi0+ ZXhwcnMpKSk7Ci0KLQkJaWR4Kys7CiAJfQogCiAJLyoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L25vZGVzL2JpdG1hcHNldC5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvYml0bWFwc2V0LmgKaW5kZXgg MjgzYmVhNWVhOS4uOGQzMmU3YTI0NCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvYml0 bWFwc2V0LmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvYml0bWFwc2V0LmgKQEAgLTExMCw2ICsx MTAsNyBAQCBleHRlcm4gYm9vbCBibXNfbm9uZW1wdHlfZGlmZmVyZW5jZShjb25zdCBCaXRtYXBz ZXQgKmEsIGNvbnN0IEJpdG1hcHNldCAqYik7CiBleHRlcm4gaW50CWJtc19zaW5nbGV0b25fbWVt YmVyKGNvbnN0IEJpdG1hcHNldCAqYSk7CiBleHRlcm4gYm9vbCBibXNfZ2V0X3NpbmdsZXRvbl9t ZW1iZXIoY29uc3QgQml0bWFwc2V0ICphLCBpbnQgKm1lbWJlcik7CiBleHRlcm4gaW50CWJtc19u dW1fbWVtYmVycyhjb25zdCBCaXRtYXBzZXQgKmEpOworZXh0ZXJuIGludCAgYm1zX250aF9tZW1i ZXIoY29uc3QgQml0bWFwc2V0ICphLCBpbnQgaSk7CiAKIC8qIG9wdGltaXplZCB0ZXN0cyB3aGVu IHdlIGRvbid0IG5lZWQgdG8ga25vdyBleGFjdCBtZW1iZXJzaGlwIGNvdW50OiAqLwogZXh0ZXJu IEJNU19NZW1iZXJzaGlwIGJtc19tZW1iZXJzaGlwKGNvbnN0IEJpdG1hcHNldCAqYSk7Ci0tIAoy LjM0LjEKCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdjEtMDAwOS1DYWNoZS10aGUtcmVzdWx0LW9m LXN0YXRleHRfZGV0ZXJtaW5lX2pvaW5fcmVzdHJpLnBhdGNoAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAADAwMDA2NDQAMDAwMTc1MAAwMDAxNzUwADAwMDAwMDE3NjI3ADE0NjEz MzI2NTc1ADAyNTMyNAAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAB1c3RhciAgAHlpemhpLmZ6aAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeWl6aGkuZnpoAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGcm9tIGE0MGVkZDZlZDJjYzc4MDEyMmE4ZmM3 OTFlMmFiYzA3NjJkNjFhNzcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCkZyb206ICJ5aXpoaS5m emgiIDx5aXpoaS5memhAYWxpYmFiYS1pbmMuY29tPgpEYXRlOiBXZWQsIDMgQXByIDIwMjQgMTU6 MDE6NDkgKzA4MDAKU3ViamVjdDogW1BBVENIIHYxIDA5LzIyXSBDYWNoZSB0aGUgcmVzdWx0IG9m CiBzdGF0ZXh0X2RldGVybWluZV9qb2luX3Jlc3RyaWN0aW9ucy4KCkl0IGlzIGZpcnN0bHkgbmVl ZGVkIHdoZW4gY2hvb3Npbmcgc3RhdGV4dF9maW5kX21hdGNoaW5nX21jdiBhbmQgdGhlbiBpdApp cyBuZWVkZWQgd2hlbiBtY3ZfY29tYmluZV9leHRlbmRlZCwgc28gY2FjaGluZyB0aGUgcmVzdWx0 IHRvIHNhdmUgc29tZQpjeWNsZXMuCi0tLQogc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9leHRlbmRl ZF9zdGF0cy5jICAgICAgIHwgMzQgKysrKysrKysrKysrKystLS0tLQogc3JjL2JhY2tlbmQvc3Rh dGlzdGljcy9tY3YuYyAgICAgICAgICAgICAgICAgIHwgMTkgKysrKy0tLS0tLS0KIC4uLi9zdGF0 aXN0aWNzL2V4dGVuZGVkX3N0YXRzX2ludGVybmFsLmggICAgICB8ICAyICsrCiBzcmMvaW5jbHVk ZS9zdGF0aXN0aWNzL3N0YXRpc3RpY3MuaCAgICAgICAgICAgfCAgMyArLQogNCBmaWxlcyBjaGFu Z2VkLCAzNyBpbnNlcnRpb25zKCspLCAyMSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9zdGF0aXN0aWNzL2V4dGVuZGVkX3N0YXRzLmMgYi9zcmMvYmFja2VuZC9zdGF0aXN0 aWNzL2V4dGVuZGVkX3N0YXRzLmMKaW5kZXggZGMxMDU5OGNiMS4uY2IxNTc4NzJmYSAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9leHRlbmRlZF9zdGF0cy5jCisrKyBiL3NyYy9i YWNrZW5kL3N0YXRpc3RpY3MvZXh0ZW5kZWRfc3RhdHMuYwpAQCAtMjY0MSw3ICsyNjQxLDggQEAg bWFrZV9idWlsZF9kYXRhKFJlbGF0aW9uIHJlbCwgU3RhdEV4dEVudHJ5ICpzdGF0LCBpbnQgbnVt cm93cywgSGVhcFR1cGxlICpyb3dzLAogCiAvKgogICogc3RhdGV4dF9maW5kX21hdGNoaW5nX21j dgotICoJCVNlYXJjaCBmb3IgYSBNQ1YgY292ZXJpbmcgYWxsIHRoZSBhdHRyaWJ1dGVzIGFuZCBl eHByZXNzaW9ucy4KKyAqCQlTZWFyY2ggZm9yIGEgTUNWIGNvdmVyaW5nIGFsbCB0aGUgYXR0cmli dXRlcyBhbmQgZXhwcmVzc2lvbnMgYW5kIHNldAorICogdGhlIGNvbmRpdGlvbnMgdG8gY2FsY3Vs YXRlIGNvbmRpdGlvbmFsIHByb2JhYmlsaXR5LgogICoKICAqIFdlIHBpY2sgdGhlIHN0YXRpc3Rp Y3MgdG8gdXNlIGZvciBqb2luIGVzdGltYXRpb24uIFRoZSBzdGF0aXN0aWNzIG9iamVjdCBoYXMK ICAqIHRvIGhhdmUgTUNWLCBhbmQgd2UgcmVxdWlyZSBpdCB0byBtYXRjaCBhbGwgdGhlIGpvaW4g Y29uZGl0aW9ucywgYmVjYXVzZSBpdApAQCAtMjY2Myw3ICsyNjY0LDggQEAgbWFrZV9idWlsZF9k YXRhKFJlbGF0aW9uIHJlbCwgU3RhdEV4dEVudHJ5ICpzdGF0LCBpbnQgbnVtcm93cywgSGVhcFR1 cGxlICpyb3dzLAogICovCiBTdGF0aXN0aWNFeHRJbmZvICoKIHN0YXRleHRfZmluZF9tYXRjaGlu Z19tY3YoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKLQkJCQkJCSAgQml0bWFw c2V0ICphdHRudW1zLCBMaXN0ICpleHBycykKKwkJCQkJCSAgQml0bWFwc2V0ICphdHRudW1zLCBM aXN0ICpleHBycywKKwkJCQkJCSAgTGlzdCAqKmJhc2VfY29uZGl0aW9ucykKIHsKIAlMaXN0Q2Vs bCAgICpsOwogCVN0YXRpc3RpY0V4dEluZm8gKm1jdiA9IE5VTEw7CkBAIC0yNjkzLDYgKzI2OTUs NyBAQCBzdGF0ZXh0X2ZpbmRfbWF0Y2hpbmdfbWN2KFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJ bmZvICpyZWwsCiAJCWlmICghbWN2KQogCQl7CiAJCQltY3YgPSBzdGF0OworCQkJKmJhc2VfY29u ZGl0aW9ucyA9IHN0YXRleHRfZGV0ZXJtaW5lX2pvaW5fcmVzdHJpY3Rpb25zKHJvb3QsIHJlbCwg bWN2KTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKQEAgLTI3MzEsMTQgKzI3MzQsMjQgQEAgc3RhdGV4 dF9maW5kX21hdGNoaW5nX21jdihQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAog CQlpZiAobGlzdF9sZW5ndGgoY29uZGl0aW9uczEpID4gbGlzdF9sZW5ndGgoY29uZGl0aW9uczIp KQogCQl7CiAJCQltY3YgPSBzdGF0OworCQkJKmJhc2VfY29uZGl0aW9ucyA9IGNvbmRpdGlvbnMx OwogCQkJY29udGludWU7CiAJCX0KKwkJZWxzZQorCQl7CisJCQkqYmFzZV9jb25kaXRpb25zID0g Y29uZGl0aW9uczI7CisJCX0KIAogCQkvKiBUaGUgc3RhdGlzdGljcyBzZWVtIGFib3V0IGVxdWFs LCBzbyBqdXN0IHVzZSB0aGUgc21hbGxlciBvbmUuICovCiAJCWlmIChibXNfbnVtX21lbWJlcnMo bWN2LT5rZXlzKSArIGxpc3RfbGVuZ3RoKG1jdi0+ZXhwcnMpID4KIAkJCWJtc19udW1fbWVtYmVy cyhzdGF0LT5rZXlzKSArIGxpc3RfbGVuZ3RoKHN0YXQtPmV4cHJzKSkKIAkJewogCQkJbWN2ID0g c3RhdDsKKwkJCSpiYXNlX2NvbmRpdGlvbnMgPSBjb25kaXRpb25zMTsKKwkJfQorCQllbHNlCisJ CXsKKwkJCSpiYXNlX2NvbmRpdGlvbnMgPSBjb25kaXRpb25zMjsKIAkJfQogCX0KIApAQCAtMjc1 Myw3ICsyNzY2LDcgQEAgc3RhdGV4dF9maW5kX21hdGNoaW5nX21jdihQbGFubmVySW5mbyAqcm9v dCwgUmVsT3B0SW5mbyAqcmVsLAogICogYW5kIGNvdmVyZWQgYnkgdGhlIGV4dGVuZGVkIHN0YXRp c3RpY3Mgb2JqZWN0LgogICoKICAqIFdoZW4gdXNpbmcgZXh0ZW5kZWQgc3RhdGlzdGljcyB0byBl c3RpbWF0ZSBqb2lucywgd2UgY2FuIHVzZSBjb25kaXRpb25zCi0gKiBmcm9tIGJhc2UgcmVsYXRp b25zIHRvIGNhbGN1bGF0ZSBjb25kaXRpb25hbCBwcm9iYWJpbGl0eQorICogZnJvbSBiYXNlIHJl bGF0aW9ucyB0byBjYWxjdWxhdGUgY29uZGl0aW9uYWwgcHJvYmFiaWxpdHkuCiAgKgogICogICAg UChqb2luIGNsYXVzZXMgfCBiYXNlcmVsIHJlc3RyaWN0aW9ucykKICAqCkBAIC0zMDcyLDcgKzMw ODUsNyBAQCBzdGF0ZXh0X2J1aWxkX2pvaW5fcGFpcnMoUGxhbm5lckluZm8gKnJvb3QsIExpc3Qg KmNsYXVzZXMsCiAgKi8KIHN0YXRpYyBSZWxPcHRJbmZvICoKIGV4dHJhY3RfcmVsYXRpb25faW5m byhQbGFubmVySW5mbyAqcm9vdCwgSm9pblBhaXJJbmZvICppbmZvLCBpbnQgaW5kZXgsCi0JCQkJ CSAgU3RhdGlzdGljRXh0SW5mbyAqKnN0YXQpCisJCQkJCSAgU3RhdGlzdGljRXh0SW5mbyAqKnN0 YXQsIExpc3QgKipiYXNlX2NvbmRpdGlvbnMpCiB7CiAJaW50CQkJcmVsaWQ7CiAJUmVsT3B0SW5m byAqcmVsOwpAQCAtMzE0NCw3ICszMTU3LDcgQEAgZXh0cmFjdF9yZWxhdGlvbl9pbmZvKFBsYW5u ZXJJbmZvICpyb290LCBKb2luUGFpckluZm8gKmluZm8sIGludCBpbmRleCwKIAkJfQogCX0KIAot CSpzdGF0ID0gc3RhdGV4dF9maW5kX21hdGNoaW5nX21jdihyb290LCByZWwsIGF0dG51bXMsIGV4 cHJzKTsKKwkqc3RhdCA9IHN0YXRleHRfZmluZF9tYXRjaGluZ19tY3Yocm9vdCwgcmVsLCBhdHRu dW1zLCBleHBycywgYmFzZV9jb25kaXRpb25zKTsKIAogCXJldHVybiByZWw7CiB9CkBAIC0zMjU4 LDExICszMjcxLDE0IEBAIHN0YXRleHRfY2xhdXNlbGlzdF9qb2luX3NlbGVjdGl2aXR5KFBsYW5u ZXJJbmZvICpyb290LCBMaXN0ICpjbGF1c2VzLAogCQlTdGF0aXN0aWNFeHRJbmZvICpzdGF0MTsK IAkJU3RhdGlzdGljRXh0SW5mbyAqc3RhdDI7CiAKKwkJTGlzdAkqYmFzZV9jb25kaXRpb24xID0g TlVMTCwKKwkJCQkqYmFzZV9jb25kaXRpb24yID0gTlVMTDsKKwogCQkvKiBleHRyYWN0IGluZm8g YWJvdXQgdGhlIGZpcnN0IHJlbGF0aW9uICovCi0JCXJlbDEgPSBleHRyYWN0X3JlbGF0aW9uX2lu Zm8ocm9vdCwgJmluZm9baV0sIDAsICZzdGF0MSk7CisJCXJlbDEgPSBleHRyYWN0X3JlbGF0aW9u X2luZm8ocm9vdCwgJmluZm9baV0sIDAsICZzdGF0MSwgJmJhc2VfY29uZGl0aW9uMSk7CiAKIAkJ LyogZXh0cmFjdCBpbmZvIGFib3V0IHRoZSBzZWNvbmQgcmVsYXRpb24gKi8KLQkJcmVsMiA9IGV4 dHJhY3RfcmVsYXRpb25faW5mbyhyb290LCAmaW5mb1tpXSwgMSwgJnN0YXQyKTsKKwkJcmVsMiA9 IGV4dHJhY3RfcmVsYXRpb25faW5mbyhyb290LCAmaW5mb1tpXSwgMSwgJnN0YXQyLCAmYmFzZV9j b25kaXRpb24yKTsKIAogCQkvKgogCQkgKiBXZSBjYW4gaGFuZGxlIHRocmVlIGJhc2ljIGNhc2Vz OgpAQCAtMzI4NSw3ICszMzAxLDkgQEAgc3RhdGV4dF9jbGF1c2VsaXN0X2pvaW5fc2VsZWN0aXZp dHkoUGxhbm5lckluZm8gKnJvb3QsIExpc3QgKmNsYXVzZXMsCiAJCSAqLwogCQlpZiAoc3RhdDEg JiYgc3RhdDIpCiAJCXsKLQkJCXMgKj0gbWN2X2NvbWJpbmVfZXh0ZW5kZWQocm9vdCwgcmVsMSwg cmVsMiwgc3RhdDEsIHN0YXQyLCBpbmZvW2ldLmNsYXVzZXMpOworCQkJcyAqPSBtY3ZfY29tYmlu ZV9leHRlbmRlZChyb290LCByZWwxLCByZWwyLCBzdGF0MSwgc3RhdDIsCisJCQkJCQkJCQkgIGJh c2VfY29uZGl0aW9uMSwgYmFzZV9jb25kaXRpb24yLAorCQkJCQkJCQkJICBpbmZvW2ldLmNsYXVz ZXMpOwogCQl9CiAJCWVsc2UgaWYgKHN0YXQxICYmIChsaXN0X2xlbmd0aChpbmZvW2ldLmNsYXVz ZXMpID09IDEpKQogCQl7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdGF0aXN0aWNzL21jdi5j IGIvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9tY3YuYwppbmRleCA1M2I0ODFhMjkxLi4yN2YzMWEw NzlmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdGF0aXN0aWNzL21jdi5jCisrKyBiL3NyYy9i YWNrZW5kL3N0YXRpc3RpY3MvbWN2LmMKQEAgLTIyMDgsNiArMjIwOCw3IEBAIG1jdl9jbGF1c2Vf c2VsZWN0aXZpdHlfb3IoUGxhbm5lckluZm8gKnJvb3QsIFN0YXRpc3RpY0V4dEluZm8gKnN0YXQs CiBTZWxlY3Rpdml0eQogbWN2X2NvbWJpbmVfZXh0ZW5kZWQoUGxhbm5lckluZm8gKnJvb3QsIFJl bE9wdEluZm8gKnJlbDEsIFJlbE9wdEluZm8gKnJlbDIsCiAJCQkJCSBTdGF0aXN0aWNFeHRJbmZv ICpzdGF0MSwgU3RhdGlzdGljRXh0SW5mbyAqc3RhdDIsCisJCQkJCSBMaXN0ICpiYXNlX2NvbmQx LCBMaXN0ICpiYXNlX2NvbmQyLAogCQkJCQkgTGlzdCAqY2xhdXNlcykKIHsKIAlMaXN0Q2VsbCAg ICpsYzsKQEAgLTIyMjEsOCArMjIyMiw2IEBAIG1jdl9jb21iaW5lX2V4dGVuZGVkKFBsYW5uZXJJ bmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwxLCBSZWxPcHRJbmZvICpyZWwyLAogCS8qIG1hdGNo IGJpdG1hcHMgYW5kIHNlbGVjdGl2aXR5IGZvciBiYXNlcmVsIGNvbmRpdGlvbnMgKGlmIGFueSkg Ki8KIAlMaXN0ICAgKmV4cHJzMSA9IE5JTCwKIAkJICAgKmV4cHJzMiA9IE5JTDsKLQlMaXN0ICAg KmNvbmRpdGlvbnMxID0gTklMLAotCQkgICAqY29uZGl0aW9uczIgPSBOSUw7CiAJYm9vbCAgICpj bWF0Y2hlczEgPSBOVUxMLAogCQkgICAqY21hdGNoZXMyID0gTlVMTDsKIApAQCAtMjI2NCwyOCAr MjI2MywyNCBAQCBtY3ZfY29tYmluZV9leHRlbmRlZChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0 SW5mbyAqcmVsMSwgUmVsT3B0SW5mbyAqcmVsMiwKIAkvKiBzaG91bGQgb25seSBnZXQgaGVyZSB3 aXRoIE1DViBvbiBib3RoIHNpZGVzICovCiAJQXNzZXJ0KG1jdjEgJiYgbWN2Mik7CiAKLQkvKiBE ZXRlcm1pbmUgd2hpY2ggYmFzZXJlbCBjbGF1c2VzIHRvIHVzZSBmb3IgY29uZGl0aW9uYWwgcHJv YmFiaWxpdHkuICovCi0JY29uZGl0aW9uczEgPSBzdGF0ZXh0X2RldGVybWluZV9qb2luX3Jlc3Ry aWN0aW9ucyhyb290LCByZWwxLCBzdGF0MSk7Ci0JY29uZGl0aW9uczIgPSBzdGF0ZXh0X2RldGVy bWluZV9qb2luX3Jlc3RyaWN0aW9ucyhyb290LCByZWwyLCBzdGF0Mik7Ci0KIAkvKgogCSAqIENh bGN1bGF0ZSBtYXRjaCBiaXRtYXBzIGZvciByZXN0cmljdGlvbnMgb24gZWl0aGVyIHNpZGUgb2Yg dGhlIGpvaW4KIAkgKiAodGhlcmUgbWF5IGJlIG5vbmUsIGluIHdoaWNoIGNhc2UgdGhpcyB3aWxs IGJlIE5VTEwpLgogCSAqLwotCWlmIChjb25kaXRpb25zMSkKKwlpZiAoYmFzZV9jb25kMSkKIAl7 Ci0JCWNtYXRjaGVzMSA9IG1jdl9nZXRfbWF0Y2hfYml0bWFwKHJvb3QsIGNvbmRpdGlvbnMxLAor CQljbWF0Y2hlczEgPSBtY3ZfZ2V0X21hdGNoX2JpdG1hcChyb290LCBiYXNlX2NvbmQxLAogCQkJ CQkJCQkJCSBzdGF0MS0+a2V5cywgc3RhdDEtPmV4cHJzLAogCQkJCQkJCQkJCSBtY3YxLCBmYWxz ZSk7Ci0JCWNzZWwxID0gY2xhdXNlbGlzdF9zZWxlY3Rpdml0eShyb290LCBjb25kaXRpb25zMSwg cmVsMS0+cmVsaWQsIDAsIE5VTEwpOworCQljc2VsMSA9IGNsYXVzZWxpc3Rfc2VsZWN0aXZpdHko cm9vdCwgYmFzZV9jb25kMSwgcmVsMS0+cmVsaWQsIDAsIE5VTEwpOwogCX0KIAotCWlmIChjb25k aXRpb25zMikKKwlpZiAoYmFzZV9jb25kMikKIAl7Ci0JCWNtYXRjaGVzMiA9IG1jdl9nZXRfbWF0 Y2hfYml0bWFwKHJvb3QsIGNvbmRpdGlvbnMyLAorCQljbWF0Y2hlczIgPSBtY3ZfZ2V0X21hdGNo X2JpdG1hcChyb290LCBiYXNlX2NvbmQyLAogCQkJCQkJCQkJCSBzdGF0Mi0+a2V5cywgc3RhdDIt PmV4cHJzLAogCQkJCQkJCQkJCSBtY3YyLCBmYWxzZSk7Ci0JCWNzZWwyID0gY2xhdXNlbGlzdF9z ZWxlY3Rpdml0eShyb290LCBjb25kaXRpb25zMiwgcmVsMi0+cmVsaWQsIDAsIE5VTEwpOworCQlj c2VsMiA9IGNsYXVzZWxpc3Rfc2VsZWN0aXZpdHkocm9vdCwgYmFzZV9jb25kMiwgcmVsMi0+cmVs aWQsIDAsIE5VTEwpOwogCX0KIAogCS8qCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdGF0aXN0 aWNzL2V4dGVuZGVkX3N0YXRzX2ludGVybmFsLmggYi9zcmMvaW5jbHVkZS9zdGF0aXN0aWNzL2V4 dGVuZGVkX3N0YXRzX2ludGVybmFsLmgKaW5kZXggYTg1Zjg5NmQ1My4uNDdmMTI1OGQ4MSAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RhdGlzdGljcy9leHRlbmRlZF9zdGF0c19pbnRlcm5hbC5o CisrKyBiL3NyYy9pbmNsdWRlL3N0YXRpc3RpY3MvZXh0ZW5kZWRfc3RhdHNfaW50ZXJuYWwuaApA QCAtMTQxLDYgKzE0MSw4IEBAIGV4dGVybiBTZWxlY3Rpdml0eSBtY3ZfY29tYmluZV9leHRlbmRl ZChQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJCQlSZWxPcHRJbmZvICpyZWwyLAogCQkJCQkJ CQkJCVN0YXRpc3RpY0V4dEluZm8gKnN0YXQxLAogCQkJCQkJCQkJCVN0YXRpc3RpY0V4dEluZm8g KnN0YXQyLAorCQkJCQkJCQkJCUxpc3QJKmJhc2VfY29uZDEsCisJCQkJCQkJCQkJTGlzdAkqYmFz ZV9jb25kMiwKIAkJCQkJCQkJCQlMaXN0ICpjbGF1c2VzKTsKIAogZXh0ZXJuIExpc3QgKnN0YXRl eHRfZGV0ZXJtaW5lX2pvaW5fcmVzdHJpY3Rpb25zKFBsYW5uZXJJbmZvICpyb290LApkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvc3RhdGlzdGljcy9zdGF0aXN0aWNzLmggYi9zcmMvaW5jbHVkZS9z dGF0aXN0aWNzL3N0YXRpc3RpY3MuaAppbmRleCA5N2EyMTdhZjFlLi5kMTM2OGEwNTgzIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9zdGF0aXN0aWNzL3N0YXRpc3RpY3MuaAorKysgYi9zcmMvaW5j bHVkZS9zdGF0aXN0aWNzL3N0YXRpc3RpY3MuaApAQCAtMTI4LDcgKzEyOCw4IEBAIGV4dGVybiBT dGF0aXN0aWNFeHRJbmZvICpjaG9vc2VfYmVzdF9zdGF0aXN0aWNzKExpc3QgKnN0YXRzLCBjaGFy IHJlcXVpcmVka2luZCwKIGV4dGVybiBIZWFwVHVwbGUgc3RhdGV4dF9leHByZXNzaW9uc19sb2Fk KE9pZCBzdHhvaWQsIGJvb2wgaW5oLCBpbnQgaWR4KTsKIAogZXh0ZXJuIFN0YXRpc3RpY0V4dElu Zm8gKnN0YXRleHRfZmluZF9tYXRjaGluZ19tY3YoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdElu Zm8gKnJlbCwKLQkJCQkJCQkJCQkgICBCaXRtYXBzZXQgKmF0dG51bXMsIExpc3QgKmV4cHJzKTsK KwkJCQkJCQkJCQkJCSAgIEJpdG1hcHNldCAqYXR0bnVtcywgTGlzdCAqZXhwcnMsCisJCQkJCQkJ CQkJCQkgICBMaXN0ICoqYmFzZV9jb25kaXRpb25zKTsKIAogZXh0ZXJuIGJvb2wgc3RhdGV4dF90 cnlfam9pbl9lc3RpbWF0ZXMoUGxhbm5lckluZm8gKnJvb3QsIExpc3QgKmNsYXVzZXMsIGludCB2 YXJSZWxpZCwKIAkJCQkJCQkJCSAgIEpvaW5UeXBlIGpvaW50eXBlLCBTcGVjaWFsSm9pbkluZm8g KnNqaW5mbyk7Ci0tIAoyLjM0LjEKCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAHYxLTAwMTAtU2ltcGxpZnktY29kZS1ieS11c2luZy1saXN0X2NlbGxfbnVt YmVyLnBhdGNoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAw MDAwNjQ0ADAwMDE3NTAAMDAwMTc1MAAwMDAwMDAwNzM2MwAxNDYxMzMyNjU3NQAwMjMyMzMAIDAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIgIAB5aXpoaS5m emgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHlpemhpLmZ6aAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAARnJvbSA4ZDU4MTZlNzQwOTg0ODY5MTNmOGM4MWFmZmZmZmY0Y2IzZjZkNjRl IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiAieWl6aGkuZnpoIiA8eWl6aGkuZnpoQGFs aWJhYmEtaW5jLmNvbT4KRGF0ZTogV2VkLCAzIEFwciAyMDI0IDE1OjA5OjM2ICswODAwClN1Ympl Y3Q6IFtQQVRDSCB2MSAxMC8yMl0gU2ltcGxpZnkgY29kZSBieSB1c2luZyBsaXN0X2NlbGxfbnVt YmVyCgppbnN0ZWFkIG9mIG1haW50YWluaW5nIGl0IG1hbnVhbGx5LgoKYW5kIHJlbW92ZSB0aGUg YmVsb3cgbGluZXMgZnJvbSBzdGF0ZXh0X2NsYXVzZWxpc3Rfam9pbl9zZWxlY3Rpdml0eS4KCglp ZiAoIWNsYXVzZXMpCgkJcmV0dXJuIDEuMDsKCnNpbmNlIGl0IGhhcyBiZWVuIGhhbmRsZWQgaW4g Y2xhdXNlbGlzdF9zZWxlY3Rpdml0eV9leHQuCi0tLQogc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9l eHRlbmRlZF9zdGF0cy5jIHwgMzAgKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNo YW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgMjIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvc3RhdGlzdGljcy9leHRlbmRlZF9zdGF0cy5jIGIvc3JjL2JhY2tlbmQvc3RhdGlz dGljcy9leHRlbmRlZF9zdGF0cy5jCmluZGV4IGNiMTU3ODcyZmEuLmIwN2VhMjQ4YjkgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3N0YXRpc3RpY3MvZXh0ZW5kZWRfc3RhdHMuYworKysgYi9zcmMv YmFja2VuZC9zdGF0aXN0aWNzL2V4dGVuZGVkX3N0YXRzLmMKQEAgLTI4MjYsMTMgKzI4MjYsNiBA QCBzdGF0ZXh0X2lzX3N1cHBvcnRlZF9qb2luX2NsYXVzZShQbGFubmVySW5mbyAqcm9vdCwgTm9k ZSAqY2xhdXNlKQogCU9wRXhwcgkJICAgKm9wY2xhdXNlOwogCWludAkJCQlsZWZ0X3JlbGlkLCBy aWdodF9yZWxpZDsKIAotCS8qCi0JICogZXZhbHVhdGlvbiBhcyBhIHJlc3RyaWN0aW9uIGNsYXVz ZSwgZWl0aGVyIGF0IHNjYW4gbm9kZSBvciBmb3JjZWQKLQkgKgotCSAqIFhYWCBTZWUgdHJlYXRf YXNfam9pbl9jbGF1c2UuCi0JICovCi0KLQkvKiBYWFggQ2FuIHdlIHJlbHkgb24gYWx3YXlzIGdl dHRpbmcgUmVzdHJpY3RJbmZvIGhlcmU/ICovCiAJaWYgKCFJc0EoY2xhdXNlLCBSZXN0cmljdElu Zm8pKQogCQlyZXR1cm4gZmFsc2U7CiAKQEAgLTI4NzUsNiArMjg2OCwxMiBAQCBzdGF0ZXh0X2lz X3N1cHBvcnRlZF9qb2luX2NsYXVzZShQbGFubmVySW5mbyAqcm9vdCwgTm9kZSAqY2xhdXNlKQog CQkhYm1zX2dldF9zaW5nbGV0b25fbWVtYmVyKHJpbmZvLT5yaWdodF9yZWxpZHMsICZyaWdodF9y ZWxpZCkpCiAJCXJldHVybiBmYWxzZTsKIAorCS8qCisJICogWFhYOgorCSAqIEpvaW4gdHdvIGNv bHVtbnMgaW4gdGhlIHNhbWUgcmVsYXRpb24gaXMgdW5jb21tb24gYW5kCisJICogZXh0cmFjdF9y ZWxhdGlvbl9pbmZvIHJlcXVpcmVzIDIgZGlmZmVyZW50IHJlbGlkcywgc28gbm8gYm90aGVyIHRv CisJICogaGFuZGxlIGl0LgorCSAqLwogCWlmIChsZWZ0X3JlbGlkID09IHJpZ2h0X3JlbGlkKQog CQlyZXR1cm4gZmFsc2U7CiAKQEAgLTI4OTIsNyArMjg5MSw2IEBAIGJvb2wKIHN0YXRleHRfdHJ5 X2pvaW5fZXN0aW1hdGVzKFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpjbGF1c2VzLCBpbnQgdmFy UmVsaWQsCiAJCQkJCQkgICBKb2luVHlwZSBqb2ludHlwZSwgU3BlY2lhbEpvaW5JbmZvICpzamlu Zm8pCiB7Ci0JaW50CQkJbGlzdGlkeDsKIAlpbnQJCQlrOwogCUxpc3RDZWxsICAgKmxjOwogCUJp dG1hcHNldCAgKnJlbGlkcyA9IE5VTEw7CkBAIC0yOTE4LDE1ICsyOTE2LDExIEBAIHN0YXRleHRf dHJ5X2pvaW5fZXN0aW1hdGVzKFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpjbGF1c2VzLCBpbnQg dmFyUmVsaWQsCiAJICogYSBzaW5nbGUgYml0IGluIHRoZSBtYXRjaCBiaXRtYXApLiBUaGUgY2hh bGxlbmdlIGlzIHdoYXQgdG8gZG8gYWJvdXQgdGhlCiAJICogcGFydCBub3QgcmVwcmVzZW50ZWQg YnkgTUNWLCB3aGljaCBpcyBub3cgYmFzZWQgb24gbmRpc3RpbmN0IGVzdGltYXRlcy4KIAkgKi8K LQlsaXN0aWR4ID0gLTE7CiAJZm9yZWFjaCAobGMsIGNsYXVzZXMpCiAJewogCQlOb2RlICpjbGF1 c2UgPSAoTm9kZSAqKSBsZmlyc3QobGMpOwogCQlSZXN0cmljdEluZm8gKnJpbmZvOwogCi0JCS8q IG5lZWRzIHRvIGhhcHBlbiBiZWZvcmUgc2tpcHBpbmcgYW55IGNsYXVzZXMgKi8KLQkJbGlzdGlk eCsrOwotCiAJCS8qCiAJCSAqIFNraXAgY2xhdXNlcyB0aGF0IGFyZSBub3Qgam9pbiBjbGF1c2Vz IG9yIHRoYXQgd2UgZG9uJ3Qga25vdwogCQkgKiBob3cgdG8gaGFuZGxlIGVzdGltYXRlIHVzaW5n IGV4dGVuZGVkIHN0YXRpc3RpY3MuCkBAIC0zMDA1LDcgKzI5OTksNiBAQCBzdGF0ZXh0X2J1aWxk X2pvaW5fcGFpcnMoUGxhbm5lckluZm8gKnJvb3QsIExpc3QgKmNsYXVzZXMsCiAJCQkJCQkgQml0 bWFwc2V0ICplc3RpbWF0ZWRjbGF1c2VzLCBpbnQgKm5wYWlycykKIHsKIAlpbnQJCQkJY250Owot CWludAkJCQlsaXN0aWR4OwogCUpvaW5QYWlySW5mbyAgICppbmZvOwogCUxpc3RDZWxsCSAgICps YzsKIApAQCAtMzAxNywxNSArMzAxMCwxMyBAQCBzdGF0ZXh0X2J1aWxkX2pvaW5fcGFpcnMoUGxh bm5lckluZm8gKnJvb3QsIExpc3QgKmNsYXVzZXMsCiAJaW5mbyA9IChKb2luUGFpckluZm8gKikg cGFsbG9jMChzaXplb2YoSm9pblBhaXJJbmZvKSAqIGxpc3RfbGVuZ3RoKGNsYXVzZXMpKTsKIAlj bnQgPSAwOwogCi0JbGlzdGlkeCA9IC0xOwogCWZvcmVhY2gobGMsIGNsYXVzZXMpCiAJewogCQlp bnQJCQkJaTsKIAkJYm9vbAkJCWZvdW5kOwogCQlOb2RlCQkgICAqY2xhdXNlID0gKE5vZGUgKikg bGZpcnN0KGxjKTsKIAkJUmVzdHJpY3RJbmZvICAgKnJpbmZvOwotCi0JCWxpc3RpZHgrKzsKKwkJ aW50CQkJCWxpc3RpZHggPSBsaXN0X2NlbGxfbnVtYmVyKGNsYXVzZXMsIGxjKTsKIAogCQkvKiBz a2lwIGFscmVhZHkgZXN0aW1hdGVkIGNsYXVzZXMgKi8KIAkJaWYgKGJtc19pc19tZW1iZXIobGlz dGlkeCwgZXN0aW1hdGVkY2xhdXNlcykpCkBAIC0zMjIzLDE1ICszMjE0LDExIEBAIHN0YXRleHRf Y2xhdXNlbGlzdF9qb2luX3NlbGVjdGl2aXR5KFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpjbGF1 c2VzLAogCQkJCQkJCQkJQml0bWFwc2V0ICoqZXN0aW1hdGVkY2xhdXNlcykKIHsKIAlpbnQJCQlp OwotCWludAkJCWxpc3RpZHg7CiAJU2VsZWN0aXZpdHkJcyA9IDEuMDsKIAogCUpvaW5QYWlySW5m byAqaW5mbzsKIAlpbnQJCQkJbmluZm87CiAKLQlpZiAoIWNsYXVzZXMpCi0JCXJldHVybiAxLjA7 Ci0KIAkvKiBleHRyYWN0IHBhaXJzIG9mIGpvaW5lZCByZWxhdGlvbnMgZnJvbSB0aGUgbGlzdCBv ZiBjbGF1c2VzICovCiAJaW5mbyA9IHN0YXRleHRfYnVpbGRfam9pbl9wYWlycyhyb290LCBjbGF1 c2VzLAogCQkJCQkJCQkJKmVzdGltYXRlZGNsYXVzZXMsICZuaW5mbyk7CkBAIC0zNDAwLDExICsz Mzg3LDEwIEBAIHN0YXRleHRfY2xhdXNlbGlzdF9qb2luX3NlbGVjdGl2aXR5KFBsYW5uZXJJbmZv ICpyb290LCBMaXN0ICpjbGF1c2VzLAogCQkJTm9kZSAqY2xhdXNlID0gKE5vZGUgKikgcmluZm8t PmNsYXVzZTsKIAkJCUxpc3RDZWxsICpsYzI7CiAKLQkJCWxpc3RpZHggPSAtMTsKIAkJCWZvcmVh Y2ggKGxjMiwgY2xhdXNlcykKIAkJCXsKIAkJCQlOb2RlICpjbGF1c2UyID0gKE5vZGUgKikgbGZp cnN0KGxjMik7Ci0JCQkJbGlzdGlkeCsrOworCQkJCWludCBsaXN0aWR4ID0gbGlzdF9jZWxsX251 bWJlcihjbGF1c2VzLCBsYzIpOwogCiAJCQkJQXNzZXJ0KElzQShjbGF1c2UyLCBSZXN0cmljdElu Zm8pKTsKIAotLSAKMi4zNC4xCgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAHYxLTAwMTEtSGFuZGxlLXRoZS1SZWxhYmxlVHlwZS5wYXRjaAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAwNjQ0ADAw MDE3NTAAMDAwMTc1MAAwMDAwMDAwMjIxMAAxNDYxMzMyNjU3NQAwMTc2MTYAIDAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIgIAB5aXpoaS5memgAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAHlpemhpLmZ6aAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAARnJvbSAzOTFmNmYxOGI1YjQzOTQzMjI1NTA3ZDhlYjUyZTM5NjI0ZDgxZDNhIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiAieWl6aGkuZnpoIiA8eWl6aGkuZnpoQGFsaWJhYmEtaW5j LmNvbT4KRGF0ZTogU3VuLCA3IEFwciAyMDI0IDEzOjI0OjU5ICswODAwClN1YmplY3Q6IFtQQVRD SCB2MSAxMS8yMl0gSGFuZGxlIHRoZSBSZWxhYmxlVHlwZS4KCi0tLQogc3JjL2JhY2tlbmQvc3Rh dGlzdGljcy9tY3YuYyB8IDggKysrKysrKy0KIDEgZmlsZSBjaGFuZ2VkLCA3IGluc2VydGlvbnMo KyksIDEgZGVsZXRpb24oLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdGF0aXN0aWNzL21j di5jIGIvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9tY3YuYwppbmRleCAyN2YzMWEwNzlmLi5lZGQw MjgyNWM0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdGF0aXN0aWNzL21jdi5jCisrKyBiL3Ny Yy9iYWNrZW5kL3N0YXRpc3RpY3MvbWN2LmMKQEAgLTIzMTcsMTAgKzIzMTcsMTYgQEAgbWN2X2Nv bWJpbmVfZXh0ZW5kZWQoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbDEsIFJlbE9w dEluZm8gKnJlbDIsCiAKIAkJZm1ncl9pbmZvKGdldF9vcGNvZGUob3BleHByLT5vcG5vKSwgJm9w cHJvY3NbaWR4XSk7CiAKLQkJLyogRklYTUUgc3RyaXAgcmVsYWJlbCBldGMuIHRoZSB3YXkgZXhh bWluZV9vcGNsYXVzZV9hcmdzIGRvZXMgKi8KIAkJZXhwcjEgPSBsaW5pdGlhbChvcGV4cHItPmFy Z3MpOwogCQlleHByMiA9IGxzZWNvbmQob3BleHByLT5hcmdzKTsKIAorCQkvKiBzdHJpcCBSZWxh YmVsVHlwZSBmcm9tIGVpdGhlciBzaWRlIG9mIHRoZSBleHByZXNzaW9uICovCisJCWlmIChJc0Eo ZXhwcjEsIFJlbGFiZWxUeXBlKSkKKwkJCWV4cHIxID0gKE5vZGUgKikgKChSZWxhYmVsVHlwZSAq KSBleHByMSktPmFyZzsKKworCQlpZiAoSXNBKGV4cHIyLCBSZWxhYmVsVHlwZSkpCisJCQlleHBy MiA9IChOb2RlICopICgoUmVsYWJlbFR5cGUgKikgZXhwcjIpLT5hcmc7CisKIAkJaWYgKChibXNf c2luZ2xldG9uX21lbWJlcihyaW5mby0+bGVmdF9yZWxpZHMpID09IHJlbDEtPnJlbGlkKSAmJgog CQkJKGJtc19zaW5nbGV0b25fbWVtYmVyKHJpbmZvLT5yaWdodF9yZWxpZHMpID09IHJlbDItPnJl bGlkKSkKIAkJewotLSAKMi4zNC4xCgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA djEtMDAxMi1Vc2UtRnVuY3Rpb25DYWxsSW52b2tlLWluc3RlYWQtb2YtRnVuY3Rpb25DYWxsMkNv LnBhdGNoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDA2NDQAMDAwMTc1 MAAwMDAxNzUwADAwMDAwMDA3NTc3ADE0NjEzMzI2NTc1ADAyNDcyNgAgMAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAHlpemhpLmZ6aAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAeWl6aGkuZnpoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABG cm9tIGJlMWIzMGNjNjY5OTAwY2ZiMzc3Yzg5OTM5NTUwNzk0MTY1YjRmNjMgTW9uIFNlcCAxNyAw MDowMDowMCAyMDAxCkZyb206ICJ5aXpoaS5memgiIDx5aXpoaS5memhAYWxpYmFiYS1pbmMuY29t PgpEYXRlOiBTdW4sIDcgQXByIDIwMjQgMTM6NTE6MzcgKzA4MDAKU3ViamVjdDogW1BBVENIIHYx IDEyLzIyXSBVc2UgRnVuY3Rpb25DYWxsSW52b2tlIGluc3RlYWQgb2YgRnVuY3Rpb25DYWxsMkNv bGwKClNvbWUgc3RhY2sgdmFyaWFibGVzIGFsbG9jYXRpb24gYW5kIHNldHVwIGFyZSBzYXZlZC4K CkEgbGVzc29uIGxlYXJudDoKCkZ1bmN0aW9uQ2FsbEluZm8gIG9wcHJvY3M7CgpvcHByb2NzID0g KEZ1bmN0aW9uQ2FsbEluZm8pIHBhbGxvYyhTaXplRm9yRnVuY3Rpb25DYWxsSW5mbygyKSAqIGxp c3RfbGVuZ3RoKGNsYXVzZXMpKTsKCm9wcHJvY3NbMV0gcG9pbnRzIHRvIGEgb3Bwcm9jc1swXS5h cmdzLCB3aGljaCBpcyBjYXVzZWQgYnkgZmxleGlibGUKYXJyYXkgaW4gRnVuY3Rpb25DYWxsSW5m b0Jhc2VEYXRhLiBTbyB0aGUgYWJvdmUgbGluZSBpcyBwcmV0dHkgZXJyb3IKcHJvbmUuCi0tLQog c3JjL2JhY2tlbmQvc3RhdGlzdGljcy9tY3YuYyB8IDM1ICsrKysrKysrKysrKysrKysrKysrKysr Ky0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMjQgaW5zZXJ0aW9ucygrKSwgMTEgZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9tY3YuYyBiL3NyYy9i YWNrZW5kL3N0YXRpc3RpY3MvbWN2LmMKaW5kZXggZWRkMDI4MjVjNC4uZjU3OGM4Yjg2ZiAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9tY3YuYworKysgYi9zcmMvYmFja2VuZC9z dGF0aXN0aWNzL21jdi5jCkBAIC0yMjQ3LDcgKzIyNDcsOCBAQCBtY3ZfY29tYmluZV9leHRlbmRl ZChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsMSwgUmVsT3B0SW5mbyAqcmVsMiwK IAkJCXRvdGFsc2VsMjsKIAogCS8qIGluZm8gYWJvdXQgY2xhdXNlcyBhbmQgaG93IHRoZXkgbWF0 Y2ggdG8gTUNWIHN0YXRzICovCi0JRm1nckluZm8gICAqb3Bwcm9jczsKKwlGbWdySW5mbyAgICpm aW5mbzsKKwlGdW5jdGlvbkNhbGxJbmZvICAqb3Bwcm9jczsKIAlpbnQJCSAgICppbmRleGVzMSwK IAkJCSAgICppbmRleGVzMjsKIAlib29sCSAgICpyZXZlcnNlOwpAQCAtMjI5NSw3ICsyMjk2LDkg QEAgbWN2X2NvbWJpbmVfZXh0ZW5kZWQoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJl bDEsIFJlbE9wdEluZm8gKnJlbDIsCiAJICogc3RhdHMgd2UgcGlja2VkLiBXZSBkbyB0aGlzIG9u bHkgb25jZSBiZWZvcmUgcHJvY2Vzc2luZyB0aGUgbGlzdHMsCiAJICogc28gdGhhdCB3ZSBkb24n dCBoYXZlIHRvIGRvIHRoYXQgZm9yIGVhY2ggTUNWIGl0ZW0gb3Igc28uCiAJICovCi0Jb3Bwcm9j cyA9IChGbWdySW5mbyAqKSBwYWxsb2Moc2l6ZW9mKEZtZ3JJbmZvKSAqIGxpc3RfbGVuZ3RoKGNs YXVzZXMpKTsKKwlmaW5mbyA9IChGbWdySW5mbyAqKSBwYWxsb2Moc2l6ZW9mKEZtZ3JJbmZvKSAq IGxpc3RfbGVuZ3RoKGNsYXVzZXMpKTsKKwkvLyBvcHByb2NzID0gKEZ1bmN0aW9uQ2FsbEluZm8g KikgcGFsbG9jKFNpemVGb3JGdW5jdGlvbkNhbGxJbmZvKDIpICogbGlzdF9sZW5ndGgoY2xhdXNl cykpOworCW9wcHJvY3MgPSAoRnVuY3Rpb25DYWxsSW5mbyAqKSBwYWxsb2Moc2l6ZW9mKEZ1bmN0 aW9uQ2FsbEluZm8gKikgKiBsaXN0X2xlbmd0aChjbGF1c2VzKSk7CiAJaW5kZXhlczEgPSAoaW50 ICopIHBhbGxvYyhzaXplb2YoaW50KSAqIGxpc3RfbGVuZ3RoKGNsYXVzZXMpKTsKIAlpbmRleGVz MiA9IChpbnQgKikgcGFsbG9jKHNpemVvZihpbnQpICogbGlzdF9sZW5ndGgoY2xhdXNlcykpOwog CXJldmVyc2UgPSAoYm9vbCAqKSBwYWxsb2Moc2l6ZW9mKGJvb2wpICogbGlzdF9sZW5ndGgoY2xh dXNlcykpOwpAQCAtMjMwOCw2ICsyMzExLDcgQEAgbWN2X2NvbWJpbmVfZXh0ZW5kZWQoUGxhbm5l ckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbDEsIFJlbE9wdEluZm8gKnJlbDIsCiAJCU5vZGUJ ICAgKmV4cHIxLAogCQkJCSAgICpleHByMjsKIAkJaW50CQlpZHggPSBsaXN0X2NlbGxfbnVtYmVy KGNsYXVzZXMsIGxjKTsKKwkJRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8gPSBwYWxsb2MoU2l6ZUZv ckZ1bmN0aW9uQ2FsbEluZm8oMikpOwogCiAJCW9wZXhwciA9IChPcEV4cHIgKikgY2xhdXNlOwog CkBAIC0yMzE1LDcgKzIzMTksMTQgQEAgbWN2X2NvbWJpbmVfZXh0ZW5kZWQoUGxhbm5lckluZm8g KnJvb3QsIFJlbE9wdEluZm8gKnJlbDEsIFJlbE9wdEluZm8gKnJlbDIsCiAJCUFzc2VydChpc19v cGNsYXVzZShjbGF1c2UpKTsKIAkJQXNzZXJ0KGxpc3RfbGVuZ3RoKG9wZXhwci0+YXJncykgPT0g Mik7CiAKLQkJZm1ncl9pbmZvKGdldF9vcGNvZGUob3BleHByLT5vcG5vKSwgJm9wcHJvY3NbaWR4 XSk7CisJCWZtZ3JfaW5mbyhnZXRfb3Bjb2RlKG9wZXhwci0+b3BubyksICZmaW5mb1tpZHhdKTsK KworCQlJbml0RnVuY3Rpb25DYWxsSW5mb0RhdGEoKmZjaW5mbywgJmZpbmZvW2lkeF0sCisJCQkJ CQkJCSAyLCBvcGV4cHItPmlucHV0Y29sbGlkLAorCQkJCQkJCQkgTlVMTCwgTlVMTCk7CisJCWZj aW5mby0+YXJnc1swXS5pc251bGwgPSBmYWxzZTsKKwkJZmNpbmZvLT5hcmdzWzFdLmlzbnVsbCA9 IGZhbHNlOworCQlvcHByb2NzW2lkeF0gPSBmY2luZm87CiAKIAkJZXhwcjEgPSBsaW5pdGlhbChv cGV4cHItPmFyZ3MpOwogCQlleHByMiA9IGxzZWNvbmQob3BleHByLT5hcmdzKTsKQEAgLTI0Mzks NiArMjQ1MCw3IEBAIG1jdl9jb21iaW5lX2V4dGVuZGVkKFBsYW5uZXJJbmZvICpyb290LCBSZWxP cHRJbmZvICpyZWwxLCBSZWxPcHRJbmZvICpyZWwyLAogCQkJCURhdHVtCXZhbHVlMSwKIAkJCQkJ CXZhbHVlMjsKIAkJCQlib29sCXJldmVyc2VfYXJncyA9IHJldmVyc2VbaWR4XTsKKwkJCQlGdW5j dGlvbkNhbGxJbmZvCWZjaW5mbyA9IG9wcHJvY3NbaWR4XTsKIAogCQkJCS8qIElmIGVpdGhlciB2 YWx1ZSBpcyBudWxsLCBpdCdzIGEgbWlzbWF0Y2ggKi8KIAkJCQlpZiAobWN2Mi0+aXRlbXNbal0u aXNudWxsW2luZGV4Ml0pCkBAIC0yNDUxLDE3ICsyNDYzLDE4IEBAIG1jdl9jb21iaW5lX2V4dGVu ZGVkKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwxLCBSZWxPcHRJbmZvICpyZWwy LAogCQkJCQkvKgogCQkJCQkgKiBDYXJlZnVsIGFib3V0IG9yZGVyIG9mIHBhcmFtZXRlcnMuIEZv ciBzYW1lLXR5cGUgZXF1YWxpdHkKIAkJCQkJICogdGhhdCBzaG91bGQgbm90IG1hdHRlciwgYnV0 IGVhc3kgZW5vdWdoLgotCQkJCQkgKgotCQkJCQkgKiBGSVhNRSBVc2UgYXBwcm9wcmlhdGUgY29s bGF0aW9uLgogCQkJCQkgKi8KIAkJCQkJaWYgKHJldmVyc2VfYXJncykKLQkJCQkJCW1hdGNoID0g RGF0dW1HZXRCb29sKEZ1bmN0aW9uQ2FsbDJDb2xsKCZvcHByb2NzW2lkeF0sCi0JCQkJCQkJCQkJ CQkJCQkgICBJbnZhbGlkT2lkLAotCQkJCQkJCQkJCQkJCQkJICAgdmFsdWUyLCB2YWx1ZTEpKTsK KwkJCQkJeworCQkJCQkJZmNpbmZvLT5hcmdzWzBdLnZhbHVlID0gdmFsdWUyOworCQkJCQkJZmNp bmZvLT5hcmdzWzFdLnZhbHVlID0gdmFsdWUxOworCQkJCQl9CiAJCQkJCWVsc2UKLQkJCQkJCW1h dGNoID0gRGF0dW1HZXRCb29sKEZ1bmN0aW9uQ2FsbDJDb2xsKCZvcHByb2NzW2lkeF0sCi0JCQkJ CQkJCQkJCQkJCQkgICBJbnZhbGlkT2lkLAotCQkJCQkJCQkJCQkJCQkJICAgdmFsdWUxLCB2YWx1 ZTIpKTsKKwkJCQkJeworCQkJCQkJZmNpbmZvLT5hcmdzWzBdLnZhbHVlID0gdmFsdWUxOworCQkJ CQkJZmNpbmZvLT5hcmdzWzFdLnZhbHVlID0gdmFsdWUyOworCQkJCQl9CisJCQkJCW1hdGNoID0g RGF0dW1HZXRCb29sKEZ1bmN0aW9uQ2FsbEludm9rZShmY2luZm8pKTsKIAkJCQl9CiAKIAkJCQlp dGVtc19tYXRjaCAmPSBtYXRjaDsKLS0gCjIuMzQuMQoKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdjEtMDAxMy1v cHRpbWl6ZS10aGUtb3JkZXItb2YtbWN2LWVxdWFsLWZ1bmN0aW9uLWV2YWx1YXRpLnBhdGNoAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDA2NDQAMDAwMTc1MAAwMDAxNzUw ADAwMDAwMDE2MjAyADE0NjEzMzI2NTc1ADAyNTEyMwAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAHlpemhpLmZ6aAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAeWl6aGkuZnpoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGcm9tIDJjYzc0 M2IzM2VhMzc4NDQ2NjkxZTk0NzdjZDRjODkxNzYwOGZjN2YgTW9uIFNlcCAxNyAwMDowMDowMCAy MDAxCkZyb206ICJ5aXpoaS5memgiIDx5aXpoaS5memhAYWxpYmFiYS1pbmMuY29tPgpEYXRlOiBN b24sIDggQXByIDIwMjQgMTM6MjE6MjkgKzA4MDAKU3ViamVjdDogW1BBVENIIHYxIDEzLzIyXSBv cHRpbWl6ZSB0aGUgb3JkZXIgb2YgbWN2IGVxdWFsIGZ1bmN0aW9uIGV2YWx1YXRpb24KCnVzaW5n IG5fZGluc3RpbmN0IHZhbHVlcy4gIFNlZSB0aGUgdGVzdCBpbiBleHRfc29ydF9tY3ZfcHJvYy5z cWwKd2hpY2ggc2hvdWxkIG5vdCBiZSBjb21taXR0ZWQgc2luY2UgaXQgaXMganVzdCBhIG1hbnVh bCB0ZXN0LgotLS0KIHNyYy9iYWNrZW5kL3N0YXRpc3RpY3MvbWN2LmMgICAgICAgICAgICAgICB8 IDc4ICsrKysrKysrKysrKysrKysrLS0tLS0KIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2V4dF9zb3J0 X21jdl9wcm9jLnNxbCB8IDMwICsrKysrKysrKwogMiBmaWxlcyBjaGFuZ2VkLCA5MCBpbnNlcnRp b25zKCspLCAxOCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9yZWdy ZXNzL3NxbC9leHRfc29ydF9tY3ZfcHJvYy5zcWwKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9z dGF0aXN0aWNzL21jdi5jIGIvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9tY3YuYwppbmRleCBmNTc4 YzhiODZmLi5kZjI4ZWQ5MjlmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdGF0aXN0aWNzL21j di5jCisrKyBiL3NyYy9iYWNrZW5kL3N0YXRpc3RpY3MvbWN2LmMKQEAgLTcyLDYgKzcyLDMzIEBA CiAJICgobmRpbXMpICogc2l6ZW9mKERpbWVuc2lvbkluZm8pKSArIFwKIAkgKChuaXRlbXMpICog SVRFTV9TSVpFKG5kaW1zKSkpCiAKKy8vICNkZWZpbmUgIERFQlVHX01DViAgMSAvKiBzaG91bGQg YmUgcmVtb3ZlZCBhZnRlciByZXZpZXcuICovCisKK3R5cGVkZWYgc3RydWN0Cit7CisJRm1ncklu Zm8JZm1ncmluZm87CisJRnVuY3Rpb25DYWxsSW5mbyBmY2luZm87CisJZG91YmxlCW5fZGlzdGlu Y3Q7CisjaWZkZWYgREVCVUdfTUNWCisJaW50CQlpZHg7CisjZW5kaWYKK30gTWN2UHJvYzsKKwor c3RhdGljIGludAorY21wX21jdl9wcm9jKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCit7 CisJLyogc29ydCB0aGUgTWN2UHJvYyByZXZlcnNlbHkgYmFzZWQgb24gbl9kaXN0aW5jdCB2YWx1 ZS4gKi8KKwlNY3ZQcm9jICptMSA9IChNY3ZQcm9jICopIGE7CisJTWN2UHJvYyAqbTIgPSAoTWN2 UHJvYyAqKSBiOworCisJaWYgKG0xLT5uX2Rpc3RpbmN0ID4gbTItPm5fZGlzdGluY3QpCisJCXJl dHVybiAtMTsKKwllbHNlIGlmIChtMS0+bl9kaXN0aW5jdCA9PSBtMi0+bl9kaXN0aW5jdCkKKwkJ cmV0dXJuIDA7CisJZWxzZQorCQlyZXR1cm4gMTsKK30KKwogc3RhdGljIE11bHRpU29ydFN1cHBv cnQgYnVpbGRfbXNzKFN0YXRzQnVpbGREYXRhICpkYXRhKTsKIAogc3RhdGljIFNvcnRJdGVtICpi dWlsZF9kaXN0aW5jdF9ncm91cHMoaW50IG51bXJvd3MsIFNvcnRJdGVtICppdGVtcywKQEAgLTIy NDcsOCArMjI3NCw3IEBAIG1jdl9jb21iaW5lX2V4dGVuZGVkKFBsYW5uZXJJbmZvICpyb290LCBS ZWxPcHRJbmZvICpyZWwxLCBSZWxPcHRJbmZvICpyZWwyLAogCQkJdG90YWxzZWwyOwogCiAJLyog aW5mbyBhYm91dCBjbGF1c2VzIGFuZCBob3cgdGhleSBtYXRjaCB0byBNQ1Ygc3RhdHMgKi8KLQlG bWdySW5mbyAgICpmaW5mbzsKLQlGdW5jdGlvbkNhbGxJbmZvICAqb3Bwcm9jczsKKwlNY3ZQcm9j CQkqbWN2UHJvYzsKIAlpbnQJCSAgICppbmRleGVzMSwKIAkJCSAgICppbmRleGVzMjsKIAlib29s CSAgICpyZXZlcnNlOwpAQCAtMjI5Niw5ICsyMzIyLDcgQEAgbWN2X2NvbWJpbmVfZXh0ZW5kZWQo UGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbDEsIFJlbE9wdEluZm8gKnJlbDIsCiAJ ICogc3RhdHMgd2UgcGlja2VkLiBXZSBkbyB0aGlzIG9ubHkgb25jZSBiZWZvcmUgcHJvY2Vzc2lu ZyB0aGUgbGlzdHMsCiAJICogc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvIGRvIHRoYXQgZm9yIGVh Y2ggTUNWIGl0ZW0gb3Igc28uCiAJICovCi0JZmluZm8gPSAoRm1nckluZm8gKikgcGFsbG9jKHNp emVvZihGbWdySW5mbykgKiBsaXN0X2xlbmd0aChjbGF1c2VzKSk7Ci0JLy8gb3Bwcm9jcyA9IChG dW5jdGlvbkNhbGxJbmZvICopIHBhbGxvYyhTaXplRm9yRnVuY3Rpb25DYWxsSW5mbygyKSAqIGxp c3RfbGVuZ3RoKGNsYXVzZXMpKTsKLQlvcHByb2NzID0gKEZ1bmN0aW9uQ2FsbEluZm8gKikgcGFs bG9jKHNpemVvZihGdW5jdGlvbkNhbGxJbmZvICopICogbGlzdF9sZW5ndGgoY2xhdXNlcykpOwor CW1jdlByb2MgPSAoTWN2UHJvYyAqKSBwYWxsb2Moc2l6ZW9mKE1jdlByb2MpICogbGlzdF9sZW5n dGgoY2xhdXNlcykpOwogCWluZGV4ZXMxID0gKGludCAqKSBwYWxsb2Moc2l6ZW9mKGludCkgKiBs aXN0X2xlbmd0aChjbGF1c2VzKSk7CiAJaW5kZXhlczIgPSAoaW50ICopIHBhbGxvYyhzaXplb2Yo aW50KSAqIGxpc3RfbGVuZ3RoKGNsYXVzZXMpKTsKIAlyZXZlcnNlID0gKGJvb2wgKikgcGFsbG9j KHNpemVvZihib29sKSAqIGxpc3RfbGVuZ3RoKGNsYXVzZXMpKTsKQEAgLTIzMTIsNiArMjMzNiw5 IEBAIG1jdl9jb21iaW5lX2V4dGVuZGVkKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpy ZWwxLCBSZWxPcHRJbmZvICpyZWwyLAogCQkJCSAgICpleHByMjsKIAkJaW50CQlpZHggPSBsaXN0 X2NlbGxfbnVtYmVyKGNsYXVzZXMsIGxjKTsKIAkJRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8gPSBw YWxsb2MoU2l6ZUZvckZ1bmN0aW9uQ2FsbEluZm8oMikpOworCQlWYXJpYWJsZVN0YXREYXRhCXZh cmRhdGE7CisJCWJvb2wJaXNkZWZhdWx0OworCQlOb2RlCSpsZWZ0X2V4cHI7CiAKIAkJb3BleHBy ID0gKE9wRXhwciAqKSBjbGF1c2U7CiAKQEAgLTIzMTksMTQgKzIzNDYsMTcgQEAgbWN2X2NvbWJp bmVfZXh0ZW5kZWQoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbDEsIFJlbE9wdElu Zm8gKnJlbDIsCiAJCUFzc2VydChpc19vcGNsYXVzZShjbGF1c2UpKTsKIAkJQXNzZXJ0KGxpc3Rf bGVuZ3RoKG9wZXhwci0+YXJncykgPT0gMik7CiAKLQkJZm1ncl9pbmZvKGdldF9vcGNvZGUob3Bl eHByLT5vcG5vKSwgJmZpbmZvW2lkeF0pOwotCi0JCUluaXRGdW5jdGlvbkNhbGxJbmZvRGF0YSgq ZmNpbmZvLCAmZmluZm9baWR4XSwKKwkJZm1ncl9pbmZvKGdldF9vcGNvZGUob3BleHByLT5vcG5v KSwgJm1jdlByb2NbaWR4XS5mbWdyaW5mbyk7CisJCW1jdlByb2NbaWR4XS5mY2luZm8gPSBmY2lu Zm87CisjaWZkZWYgREVCVUdfTUNWCisJCW1jdlByb2NbaWR4XS5pZHggPSBpZHg7CisjZW5kaWYK KwkJSW5pdEZ1bmN0aW9uQ2FsbEluZm9EYXRhKCptY3ZQcm9jW2lkeF0uZmNpbmZvLAorCQkJCQkJ CQkgJm1jdlByb2NbaWR4XS5mbWdyaW5mbywKIAkJCQkJCQkJIDIsIG9wZXhwci0+aW5wdXRjb2xs aWQsCiAJCQkJCQkJCSBOVUxMLCBOVUxMKTsKIAkJZmNpbmZvLT5hcmdzWzBdLmlzbnVsbCA9IGZh bHNlOwogCQlmY2luZm8tPmFyZ3NbMV0uaXNudWxsID0gZmFsc2U7Ci0JCW9wcHJvY3NbaWR4XSA9 IGZjaW5mbzsKIAogCQlleHByMSA9IGxpbml0aWFsKG9wZXhwci0+YXJncyk7CiAJCWV4cHIyID0g bHNlY29uZChvcGV4cHItPmFyZ3MpOwpAQCAtMjM1Myw2ICsyMzgzLDggQEAgbWN2X2NvbWJpbmVf ZXh0ZW5kZWQoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbDEsIFJlbE9wdEluZm8g KnJlbDIsCiAKIAkJCWV4cHJzMSA9IGxhcHBlbmQoZXhwcnMxLCBleHByMSk7CiAJCQlleHByczIg PSBsYXBwZW5kKGV4cHJzMiwgZXhwcjIpOworCisJCQlsZWZ0X2V4cHIgPSBleHByMTsKIAkJfQog CQllbHNlIGlmICgoYm1zX3NpbmdsZXRvbl9tZW1iZXIocmluZm8tPnJpZ2h0X3JlbGlkcykgPT0g cmVsMS0+cmVsaWQpICYmCiAJCQkJIChibXNfc2luZ2xldG9uX21lbWJlcihyaW5mby0+bGVmdF9y ZWxpZHMpID09IHJlbDItPnJlbGlkKSkKQEAgLTIzNjksNiArMjQwMSw4IEBAIG1jdl9jb21iaW5l X2V4dGVuZGVkKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwxLCBSZWxPcHRJbmZv ICpyZWwyLAogCiAJCQlleHByczEgPSBsYXBwZW5kKGV4cHJzMSwgZXhwcjIpOwogCQkJZXhwcnMy ID0gbGFwcGVuZChleHByczIsIGV4cHIxKTsKKworCQkJbGVmdF9leHByID0gZXhwcjI7CiAJCX0K IAkJZWxzZQogCQkJLyogc2hvdWxkIG5ldmVyIGhhcHBlbiAqLwpAQCAtMjM3OSw3ICsyNDEzLDIy IEBAIG1jdl9jb21iaW5lX2V4dGVuZGVkKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpy ZWwxLCBSZWxPcHRJbmZvICpyZWwyLAogCiAJCUFzc2VydCgoaW5kZXhlczJbaWR4XSA+PSAwKSAm JgogCQkJICAgKGluZGV4ZXMyW2lkeF0gPCBibXNfbnVtX21lbWJlcnMoc3RhdDItPmtleXMpICsg bGlzdF9sZW5ndGgoc3RhdDItPmV4cHJzKSkpOworCisJCWV4YW1pbmVfdmFyaWFibGUocm9vdCwg bGVmdF9leHByLCByZWwxLT5yZWxpZCwgJnZhcmRhdGEpOworCQltY3ZQcm9jW2lkeF0ubl9kaXN0 aW5jdCA9IGdldF92YXJpYWJsZV9udW1kaXN0aW5jdCgmdmFyZGF0YSwgJmlzZGVmYXVsdCk7CisJ CS8vIGVsb2coSU5GTywgIm5fZGlzdGluY3QgPSAlZiIsIG1jdlByb2NbaWR4XS5uX2Rpc3RpbmN0 KTsKKwkJUmVsZWFzZVZhcmlhYmxlU3RhdHModmFyZGF0YSk7CisJfQorCisJLyogb3JkZXIgdGhl IE1jdlByb2MgKi8KKwlwZ19xc29ydChtY3ZQcm9jLCBsaXN0X2xlbmd0aChjbGF1c2VzKSwgc2l6 ZW9mKE1jdlByb2MpLCBjbXBfbWN2X3Byb2MpOworCisjaWZkZWYgREVCVUdfTUNWCisJZm9yIChp ID0gMDsgaSA8IGxpc3RfbGVuZ3RoKGNsYXVzZXMpOyBpKyspCisJeworCQllbG9nKElORk8sICIl ZCIsIG1jdlByb2NbaV0uaWR4KTsKIAl9CisjZW5kaWYKIAogCS8qCiAJICogTWF0Y2ggaXRlbXMg YmV0d2VlbiB0aGUgdHdvIE1DViBsaXN0cy4KQEAgLTI0MzYsMTMgKzI0ODUsOCBAQCBtY3ZfY29t YmluZV9leHRlbmRlZChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsMSwgUmVsT3B0 SW5mbyAqcmVsMiwKIAogCQkJLyoKIAkJCSAqIEV2YWx1YXRlIGlmIGFsbCB0aGUgam9pbiBjbGF1 c2VzIG1hdGNoIGJldHdlZW4gdGhlIHR3byBNQ1YgaXRlbXMuCi0JCQkgKgotCQkJICogWFhYIFdl IG1pZ2h0IG9wdGltaXplIHRoZSBvcmRlciBvZiBldmFsdWF0aW9uLCB1c2luZyB0aGUgY29zdHMg b2YKLQkJCSAqIG9wZXJhdG9yIGZ1bmN0aW9ucyBmb3IgaW5kaXZpZHVhbCBjb2x1bW5zLiBJdCBk b2VzIGRlcGVuZCBvbiB0aGUKLQkJCSAqIG51bWJlciBvZiBkaXN0aW5jdCB2YWx1ZXMsIGV0Yy4K IAkJCSAqLwotCQkJaWR4ID0gMDsKLQkJCWZvcmVhY2ggKGxjLCBjbGF1c2VzKQorCQkJZm9yKGlk eCA9IDA7IGlkeCA8IGxpc3RfbGVuZ3RoKGNsYXVzZXMpOyBpZHgrKykKIAkJCXsKIAkJCQlib29s CW1hdGNoOwogCQkJCWludAkJaW5kZXgxID0gaW5kZXhlczFbaWR4XSwKQEAgLTI0NTAsNyArMjQ5 NCw3IEBAIG1jdl9jb21iaW5lX2V4dGVuZGVkKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZv ICpyZWwxLCBSZWxPcHRJbmZvICpyZWwyLAogCQkJCURhdHVtCXZhbHVlMSwKIAkJCQkJCXZhbHVl MjsKIAkJCQlib29sCXJldmVyc2VfYXJncyA9IHJldmVyc2VbaWR4XTsKLQkJCQlGdW5jdGlvbkNh bGxJbmZvCWZjaW5mbyA9IG9wcHJvY3NbaWR4XTsKKwkJCQlGdW5jdGlvbkNhbGxJbmZvCWZjaW5m byA9IG1jdlByb2NbaWR4XS5mY2luZm87CiAKIAkJCQkvKiBJZiBlaXRoZXIgdmFsdWUgaXMgbnVs bCwgaXQncyBhIG1pc21hdGNoICovCiAJCQkJaWYgKG1jdjItPml0ZW1zW2pdLmlzbnVsbFtpbmRl eDJdKQpAQCAtMjQ4MSw4ICsyNTI1LDYgQEAgbWN2X2NvbWJpbmVfZXh0ZW5kZWQoUGxhbm5lcklu Zm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbDEsIFJlbE9wdEluZm8gKnJlbDIsCiAKIAkJCQlpZiAo IWl0ZW1zX21hdGNoKQogCQkJCQlicmVhazsKLQotCQkJCWlkeCsrOwogCQkJfQogCiAJCQlpZiAo aXRlbXNfbWF0Y2gpCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9leHRfc29ydF9t Y3ZfcHJvYy5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9leHRfc29ydF9tY3ZfcHJvYy5zcWwK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uMDkzNjBkNWIyMwotLS0gL2Rl di9udWxsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2V4dF9zb3J0X21jdl9wcm9jLnNxbApA QCAtMCwwICsxLDMwIEBACitjcmVhdGUgdGFibGUgdChsZXZlbF8xIHRleHQsIGxldmVsXzIgdGV4 dCwgbGV2ZWxfMyB0ZXh0KTsKKworaW5zZXJ0IGludG8gdAordmFsdWVzCisoJ2wxMScsICdsMjEn LCAnbDMxJyksCisoJ2wxMScsICdsMjEnLCAnbDMyJyksCisoJ2wxMScsICdsMjEnLCAnbDMzJyks CisoJ2wxMScsICdsMjInLCAnbDM0JyksCisoJ2wxMScsICdsMjInLCAnbDM1JyksCisoJ2wxMScs ICdsMjInLCAnbDM2Jyk7CisKK2NyZWF0ZSBzdGF0aXN0aWNzIG9uIGxldmVsXzEsIGxldmVsXzIs IGxldmVsXzMgZnJvbSB0OworCithbmFseXplIHQ7CisKK2V4cGxhaW4gc2VsZWN0ICogZnJvbSB0 IHQxIGpvaW4gdCB0MiB1c2luZyhsZXZlbF8xLCBsZXZlbF8yLCBsZXZlbF8zKTsKK0lORk86ICBu X2Rpc3RpbmN0ID0gMS4wMDAwMDAKK0lORk86ICBuX2Rpc3RpbmN0ID0gMi4wMDAwMDAKK0lORk86 ICBuX2Rpc3RpbmN0ID0gNi4wMDAwMDAKK0lORk86ICAyCitJTkZPOiAgMQorSU5GTzogIDAKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpvaW4g IChjb3N0PTEuMTcuLjIuMzIgcm93cz02IHdpZHRoPTEyKQorICAgSGFzaCBDb25kOiAoKHQxLmxl dmVsXzEgPSB0Mi5sZXZlbF8xKSBBTkQgKHQxLmxldmVsXzIgPSB0Mi5sZXZlbF8yKSBBTkQgKHQx LmxldmVsXzMgPSB0Mi5sZXZlbF8zKSkKKyAgIC0+ICBTZXEgU2NhbiBvbiB0IHQxICAoY29zdD0w LjAwLi4xLjA2IHJvd3M9NiB3aWR0aD0xMikKKyAgIC0+ICBIYXNoICAoY29zdD0xLjA2Li4xLjA2 IHJvd3M9NiB3aWR0aD0xMikKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0IHQyICAoY29zdD0w LjAwLi4xLjA2IHJvd3M9NiB3aWR0aD0xMikKKyg1IHJvd3MpCi0tIAoyLjM0LjEKCgAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2MS0wMDE0LU1lcmdlLTMtcGFsbG9jLWlu dG8tMS1wYWxsb2MucGF0Y2gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAMDAwMDY0NAAwMDAxNzUwADAwMDE3NTAAMDAwMDAwMTEzNzIAMTQ2 MTMzMjY1NzUAMDIwNDc3ACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAHVzdGFyICAAeWl6aGkuZnpoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB5aXpoaS5memgAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEZyb20gZWRhNTAxOTI2ZTRiZjQ5NGU0MWE3 NGViZWVlNGI5Y2Q3YTJjNzRjOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKRnJvbTogInlpemhp LmZ6aCIgPHlpemhpLmZ6aEBhbGliYWJhLWluYy5jb20+CkRhdGU6IE1vbiwgOCBBcHIgMjAyNCAx NDoyMDoyMCArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjEgMTQvMjJdIE1lcmdlIDMgcGFsbG9jIGlu dG8gMSBwYWxsb2MKCjEuIE1lcmdlIDMgcGFsbG9jIGludG8gMSBwYWxsb2MgdG8gc2F2ZSAyIHBh bGxvYyBjYWxscy4KCjIuIEEgcXVlc3Rpb24gZnJvbSBtZSwgc2VhcmNoOiAiRnJvbSBBbmR5Ii4K LS0tCiBzcmMvYmFja2VuZC9zdGF0aXN0aWNzL21jdi5jIHwgNDUgKysrKysrKysrKysrKysrKysr KystLS0tLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMjUgaW5zZXJ0aW9ucygrKSwgMjAg ZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9tY3YuYyBi L3NyYy9iYWNrZW5kL3N0YXRpc3RpY3MvbWN2LmMKaW5kZXggZGYyOGVkOTI5Zi4uMDJhNzRhMGVj NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9tY3YuYworKysgYi9zcmMvYmFj a2VuZC9zdGF0aXN0aWNzL21jdi5jCkBAIC04NCw2ICs4NCwxMyBAQCB0eXBlZGVmIHN0cnVjdAog I2VuZGlmCiB9IE1jdlByb2M7CiAKK3R5cGVkZWYgc3RydWN0Cit7CisJaW50IAlpbmRleDE7CisJ aW50IAlpbmRleDI7CisJYm9vbCAJcmV2ZXJzZTsKK30gTWN2Q2xhdXNlSW5mbzsKKwogc3RhdGlj IGludAogY21wX21jdl9wcm9jKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCiB7CkBAIC0y Mjc1LDkgKzIyODIsNyBAQCBtY3ZfY29tYmluZV9leHRlbmRlZChQbGFubmVySW5mbyAqcm9vdCwg UmVsT3B0SW5mbyAqcmVsMSwgUmVsT3B0SW5mbyAqcmVsMiwKIAogCS8qIGluZm8gYWJvdXQgY2xh dXNlcyBhbmQgaG93IHRoZXkgbWF0Y2ggdG8gTUNWIHN0YXRzICovCiAJTWN2UHJvYwkJKm1jdlBy b2M7Ci0JaW50CQkgICAqaW5kZXhlczEsCi0JCQkgICAqaW5kZXhlczI7Ci0JYm9vbAkgICAqcmV2 ZXJzZTsKKwlNY3ZDbGF1c2VJbmZvCSpjaW5mbzsKIAlSYW5nZVRibEVudHJ5ICpydGUxID0gcm9v dC0+c2ltcGxlX3J0ZV9hcnJheVtyZWwxLT5yZWxpZF07CiAJUmFuZ2VUYmxFbnRyeSAqcnRlMiA9 IHJvb3QtPnNpbXBsZV9ydGVfYXJyYXlbcmVsMi0+cmVsaWRdOwogCkBAIC0yMzIzLDkgKzIzMjgs NyBAQCBtY3ZfY29tYmluZV9leHRlbmRlZChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAq cmVsMSwgUmVsT3B0SW5mbyAqcmVsMiwKIAkgKiBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gZG8g dGhhdCBmb3IgZWFjaCBNQ1YgaXRlbSBvciBzby4KIAkgKi8KIAltY3ZQcm9jID0gKE1jdlByb2Mg KikgcGFsbG9jKHNpemVvZihNY3ZQcm9jKSAqIGxpc3RfbGVuZ3RoKGNsYXVzZXMpKTsKLQlpbmRl eGVzMSA9IChpbnQgKikgcGFsbG9jKHNpemVvZihpbnQpICogbGlzdF9sZW5ndGgoY2xhdXNlcykp OwotCWluZGV4ZXMyID0gKGludCAqKSBwYWxsb2Moc2l6ZW9mKGludCkgKiBsaXN0X2xlbmd0aChj bGF1c2VzKSk7Ci0JcmV2ZXJzZSA9IChib29sICopIHBhbGxvYyhzaXplb2YoYm9vbCkgKiBsaXN0 X2xlbmd0aChjbGF1c2VzKSk7CisJY2luZm8gPSAoTWN2Q2xhdXNlSW5mbyAqKSBwYWxsb2Moc2l6 ZW9mKE1jdkNsYXVzZUluZm8pICogbGlzdF9sZW5ndGgoY2xhdXNlcykpOwogCiAJZm9yZWFjaCAo bGMsIGNsYXVzZXMpCiAJewpAQCAtMjM3MywxMyArMjM3NiwxMyBAQCBtY3ZfY29tYmluZV9leHRl bmRlZChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsMSwgUmVsT3B0SW5mbyAqcmVs MiwKIAkJewogCQkJT2lkCQljb2xsaWQ7CiAKLQkJCWluZGV4ZXMxW2lkeF0gPSBtY3ZfbWF0Y2hf ZXhwcmVzc2lvbihleHByMSwKKwkJCWNpbmZvW2lkeF0uaW5kZXgxID0gbWN2X21hdGNoX2V4cHJl c3Npb24oZXhwcjEsCiAJCQkJCQkJCQkJCQkgc3RhdDEtPmtleXMsIHN0YXQxLT5leHBycywKIAkJ CQkJCQkJCQkJCSAmY29sbGlkKTsKLQkJCWluZGV4ZXMyW2lkeF0gPSBtY3ZfbWF0Y2hfZXhwcmVz c2lvbihleHByMiwKKwkJCWNpbmZvW2lkeF0uaW5kZXgyID0gbWN2X21hdGNoX2V4cHJlc3Npb24o ZXhwcjIsCiAJCQkJCQkJCQkJCQkgc3RhdDItPmtleXMsIHN0YXQyLT5leHBycywKIAkJCQkJCQkJ CQkJCSAmY29sbGlkKTsKLQkJCXJldmVyc2VbaWR4XSA9IGZhbHNlOworCQkJY2luZm9baWR4XS5y ZXZlcnNlID0gZmFsc2U7CiAKIAkJCWV4cHJzMSA9IGxhcHBlbmQoZXhwcnMxLCBleHByMSk7CiAJ CQlleHByczIgPSBsYXBwZW5kKGV4cHJzMiwgZXhwcjIpOwpAQCAtMjM5MSwxMyArMjM5NCwxMyBA QCBtY3ZfY29tYmluZV9leHRlbmRlZChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVs MSwgUmVsT3B0SW5mbyAqcmVsMiwKIAkJewogCQkJT2lkCQljb2xsaWQ7CiAKLQkJCWluZGV4ZXMx W2lkeF0gPSBtY3ZfbWF0Y2hfZXhwcmVzc2lvbihleHByMiwKKwkJCWNpbmZvW2lkeF0uaW5kZXgx ID0gbWN2X21hdGNoX2V4cHJlc3Npb24oZXhwcjIsCiAJCQkJCQkJCQkJCQkgc3RhdDItPmtleXMs IHN0YXQyLT5leHBycywKIAkJCQkJCQkJCQkJCSAmY29sbGlkKTsKLQkJCWluZGV4ZXMyW2lkeF0g PSBtY3ZfbWF0Y2hfZXhwcmVzc2lvbihleHByMSwKKwkJCWNpbmZvW2lkeF0uaW5kZXgyID0gbWN2 X21hdGNoX2V4cHJlc3Npb24oZXhwcjEsCiAJCQkJCQkJCQkJCQkgc3RhdDEtPmtleXMsIHN0YXQx LT5leHBycywKIAkJCQkJCQkJCQkJCSAmY29sbGlkKTsKLQkJCXJldmVyc2VbaWR4XSA9IHRydWU7 CisJCQljaW5mb1tpZHhdLnJldmVyc2UgPSB0cnVlOwogCiAJCQlleHByczEgPSBsYXBwZW5kKGV4 cHJzMSwgZXhwcjIpOwogCQkJZXhwcnMyID0gbGFwcGVuZChleHByczIsIGV4cHIxKTsKQEAgLTI0 MDgsMTEgKzI0MTEsMTEgQEAgbWN2X2NvbWJpbmVfZXh0ZW5kZWQoUGxhbm5lckluZm8gKnJvb3Qs IFJlbE9wdEluZm8gKnJlbDEsIFJlbE9wdEluZm8gKnJlbDIsCiAJCQkvKiBzaG91bGQgbmV2ZXIg aGFwcGVuICovCiAJCQlBc3NlcnQoZmFsc2UpOwogCi0JCUFzc2VydCgoaW5kZXhlczFbaWR4XSA+ PSAwKSAmJgotCQkJICAgKGluZGV4ZXMxW2lkeF0gPCBibXNfbnVtX21lbWJlcnMoc3RhdDEtPmtl eXMpICsgbGlzdF9sZW5ndGgoc3RhdDEtPmV4cHJzKSkpOworCQlBc3NlcnQoKGNpbmZvW2lkeF0u aW5kZXgxID49IDApICYmCisJCQkgICAoY2luZm9baWR4XS5pbmRleDEgPCBibXNfbnVtX21lbWJl cnMoc3RhdDEtPmtleXMpICsgbGlzdF9sZW5ndGgoc3RhdDEtPmV4cHJzKSkpOwogCi0JCUFzc2Vy dCgoaW5kZXhlczJbaWR4XSA+PSAwKSAmJgotCQkJICAgKGluZGV4ZXMyW2lkeF0gPCBibXNfbnVt X21lbWJlcnMoc3RhdDItPmtleXMpICsgbGlzdF9sZW5ndGgoc3RhdDItPmV4cHJzKSkpOworCQlB c3NlcnQoKGNpbmZvW2lkeF0uaW5kZXgyID49IDApICYmCisJCQkgICAoY2luZm9baWR4XS5pbmRl eDIgPCBibXNfbnVtX21lbWJlcnMoc3RhdDItPmtleXMpICsgbGlzdF9sZW5ndGgoc3RhdDItPmV4 cHJzKSkpOwogCiAJCWV4YW1pbmVfdmFyaWFibGUocm9vdCwgbGVmdF9leHByLCByZWwxLT5yZWxp ZCwgJnZhcmRhdGEpOwogCQltY3ZQcm9jW2lkeF0ubl9kaXN0aW5jdCA9IGdldF92YXJpYWJsZV9u dW1kaXN0aW5jdCgmdmFyZGF0YSwgJmlzZGVmYXVsdCk7CkBAIC0yNDYzLDcgKzI0NjYsNyBAQCBt Y3ZfY29tYmluZV9leHRlbmRlZChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsMSwg UmVsT3B0SW5mbyAqcmVsMiwKIAkJICovCiAJCWhhc19udWxscyA9IGZhbHNlOwogCQlmb3IgKGog PSAwOyBqIDwgbGlzdF9sZW5ndGgoY2xhdXNlcyk7IGorKykKLQkJCWhhc19udWxscyB8PSBtY3Yx LT5pdGVtc1tpXS5pc251bGxbaW5kZXhlczFbal1dOworCQkJaGFzX251bGxzIHw9IG1jdjEtPml0 ZW1zW2ldLmlzbnVsbFtjaW5mb1tqXS5pbmRleDFdOwogCiAJCWlmIChoYXNfbnVsbHMpCiAJCQlj b250aW51ZTsKQEAgLTI0ODEsNiArMjQ4NCw4IEBAIG1jdl9jb21iaW5lX2V4dGVuZGVkKFBsYW5u ZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwxLCBSZWxPcHRJbmZvICpyZWwyLAogCQkJLyoK IAkJCSAqIFhYWCBXZSBjYW4ndCBza2lwIGJhc2VkIG9uIGV4aXN0aW5nIG1hdGNoZXMyIHZhbHVl LCBiZWNhdXNlIHRoZXJlCiAJCQkgKiBtYXkgYmUgZHVwbGljYXRlcyBpbiB0aGUgZmlyc3QgTUNW LgorCQkJICoKKwkJCSAqIEZyb20gQW5keTogd2hhdCBkb2VzIHRoaXMgbWVhbj8KIAkJCSAqLwog CiAJCQkvKgpAQCAtMjQ4OSwxMSArMjQ5NCwxMSBAQCBtY3ZfY29tYmluZV9leHRlbmRlZChQbGFu bmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsMSwgUmVsT3B0SW5mbyAqcmVsMiwKIAkJCWZv cihpZHggPSAwOyBpZHggPCBsaXN0X2xlbmd0aChjbGF1c2VzKTsgaWR4KyspCiAJCQl7CiAJCQkJ Ym9vbAltYXRjaDsKLQkJCQlpbnQJCWluZGV4MSA9IGluZGV4ZXMxW2lkeF0sCi0JCQkJCQlpbmRl eDIgPSBpbmRleGVzMltpZHhdOworCQkJCWludAkJaW5kZXgxID0gY2luZm9baWR4XS5pbmRleDEs CisJCQkJCQlpbmRleDIgPSBjaW5mb1tpZHhdLmluZGV4MjsKIAkJCQlEYXR1bQl2YWx1ZTEsCiAJ CQkJCQl2YWx1ZTI7Ci0JCQkJYm9vbAlyZXZlcnNlX2FyZ3MgPSByZXZlcnNlW2lkeF07CisJCQkJ Ym9vbAlyZXZlcnNlX2FyZ3MgPSBjaW5mb1tpZHhdLnJldmVyc2U7CiAJCQkJRnVuY3Rpb25DYWxs SW5mbwlmY2luZm8gPSBtY3ZQcm9jW2lkeF0uZmNpbmZvOwogCiAJCQkJLyogSWYgZWl0aGVyIHZh bHVlIGlzIG51bGwsIGl0J3MgYSBtaXNtYXRjaCAqLwotLSAKMi4zNC4xCgoAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAdjEtMDAxNS1SZW1vdmUtMi1wdWxsX3Zhcm5vcy1jYWxscy13 aXRoLXJpbmZvLWxlZnQtcmlnaHRfLnBhdGNoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAADAwMDA2NDQAMDAwMTc1MAAwMDAxNzUwADAwMDAwMDAzMzc0ADE0NjEzMzI2NTc1ADAy NDc3NwAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAg AHlpemhpLmZ6aAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeWl6aGkuZnpoAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAABGcm9tIDI4Y2M1Zjc3MWRmNjI5MGU4YzA0MDFkMDBmMGVhMmM3 YWVmZmM5NjkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCkZyb206ICJ5aXpoaS5memgiIDx5aXpo aS5memhAYWxpYmFiYS1pbmMuY29tPgpEYXRlOiBNb24sIDggQXByIDIwMjQgMTc6MDI6MjkgKzA4 MDAKU3ViamVjdDogW1BBVENIIHYxIDE1LzIyXSBSZW1vdmUgMiBwdWxsX3Zhcm5vcyBjYWxscyB3 aXRoCiByaW5mby0+bGVmdHxyaWdodF9yZWxpZHMuCgotLS0KIHNyYy9iYWNrZW5kL3N0YXRpc3Rp Y3MvZXh0ZW5kZWRfc3RhdHMuYyB8IDEwICsrKysrKy0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA2IGlu c2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3Rh dGlzdGljcy9leHRlbmRlZF9zdGF0cy5jIGIvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9leHRlbmRl ZF9zdGF0cy5jCmluZGV4IGIwN2VhMjQ4YjkuLmUzMjUxYjVhYWEgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3N0YXRpc3RpY3MvZXh0ZW5kZWRfc3RhdHMuYworKysgYi9zcmMvYmFja2VuZC9zdGF0 aXN0aWNzL2V4dGVuZGVkX3N0YXRzLmMKQEAgLTMxNjksNiArMzE2OSw5IEBAIGdldF9leHByZXNz aW9uX2Zvcl9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwgTm9kZSAqY2xh dXNlKQogewogCU9wRXhwciAqb3BleHByOwogCU5vZGUgICAqZXhwcjsKKwlSZXN0cmljdEluZm8g KnJpbmZvID0gKFJlc3RyaWN0SW5mbyAqKSBjbGF1c2U7CisKKwlBc3NlcnQoSXNBKGNsYXVzZSwg UmVzdHJpY3RJbmZvKSk7CiAKIAkvKgogCSAqIFN0cmlwIHRoZSBSZXN0cmljdEluZm8gbm9kZSwg Z2V0IHRoZSBhY3R1YWwgY2xhdXNlLgpAQCAtMzE3Nyw4ICszMTgwLDcgQEAgZ2V0X2V4cHJlc3Np b25fZm9yX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLCBOb2RlICpjbGF1 c2UpCiAJICogdG9vIChlLmcuIFJlbGFiZWxUeXBlIGV0Yy4pLiBzdGF0ZXh0X2lzX3N1cHBvcnRl ZF9qb2luX2NsYXVzZQogCSAqIG1hdGNoZXMgdGhpcywgYnV0IG1heWJlIHdlIG5lZWQgdG8gcmVs YXggaXQ/CiAJICovCi0JaWYgKElzQShjbGF1c2UsIFJlc3RyaWN0SW5mbykpCi0JCWNsYXVzZSA9 IChOb2RlICopICgoUmVzdHJpY3RJbmZvICopIGNsYXVzZSktPmNsYXVzZTsKKwljbGF1c2UgPSAo Tm9kZSAqKSByaW5mby0+Y2xhdXNlOwogCiAJb3BleHByID0gKE9wRXhwciAqKSBjbGF1c2U7CiAK QEAgLTMxODgsMTEgKzMxOTAsMTEgQEAgZ2V0X2V4cHJlc3Npb25fZm9yX3JlbChQbGFubmVySW5m byAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLCBOb2RlICpjbGF1c2UpCiAKIAkvKiBGSVhNRSBzdHJp cCByZWxhYmVsIGV0Yy4gdGhlIHdheSBleGFtaW5lX29wY2xhdXNlX2FyZ3MgZG9lcyAqLwogCWV4 cHIgPSBsaW5pdGlhbChvcGV4cHItPmFyZ3MpOwotCWlmIChibXNfc2luZ2xldG9uX21lbWJlcihw dWxsX3Zhcm5vcyhyb290LCBleHByKSkgPT0gcmVsLT5yZWxpZCkKKwlpZiAoYm1zX3NpbmdsZXRv bl9tZW1iZXIocmluZm8tPmxlZnRfcmVsaWRzKSA9PSByZWwtPnJlbGlkKQogCQlyZXR1cm4gZXhw cjsKIAogCWV4cHIgPSBsc2Vjb25kKG9wZXhwci0+YXJncyk7Ci0JaWYgKGJtc19zaW5nbGV0b25f bWVtYmVyKHB1bGxfdmFybm9zKHJvb3QsIGV4cHIpKSA9PSByZWwtPnJlbGlkKQorCWlmIChibXNf c2luZ2xldG9uX21lbWJlcihyaW5mby0+cmlnaHRfcmVsaWRzKSA9PSByZWwtPnJlbGlkKQogCQly ZXR1cm4gZXhwcjsKIAogCXJldHVybiBOVUxMOwotLSAKMi4zNC4xCgoAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAHYxLTAwMTYtYWRkLXRoZS1zdGF0aXN0aWNfcHJvY19zZWN1cml0eV9j aGVjay1jaGVjay5wYXRjaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAwMDAwNjQ0ADAwMDE3NTAAMDAwMTc1MAAwMDAwMDAwNDAwNAAxNDYxMzMyNjU3NQAwMjQxNDQA IDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIgIAB5aXpo aS5memgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHlpemhpLmZ6aAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAARnJvbSBmODI4M2FkMWE4NjM4YmFlNTFlZDZlMTBiYjRkMWUxYmJlMWE1 NDkxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiAieWl6aGkuZnpoIiA8eWl6aGkuZnpo QGFsaWJhYmEtaW5jLmNvbT4KRGF0ZTogTW9uLCA4IEFwciAyMDI0IDE3OjEyOjU0ICswODAwClN1 YmplY3Q6IFtQQVRDSCB2MSAxNi8yMl0gYWRkIHRoZSBzdGF0aXN0aWNfcHJvY19zZWN1cml0eV9j aGVjayBjaGVjay4KCi0tLQogc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9leHRlbmRlZF9zdGF0cy5j IHwgMTYgKysrKysrKystLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwg OCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdGF0aXN0aWNzL2V4dGVu ZGVkX3N0YXRzLmMgYi9zcmMvYmFja2VuZC9zdGF0aXN0aWNzL2V4dGVuZGVkX3N0YXRzLmMKaW5k ZXggZTMyNTFiNWFhYS4uYTI4MDFkMGU5NCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RhdGlz dGljcy9leHRlbmRlZF9zdGF0cy5jCisrKyBiL3NyYy9iYWNrZW5kL3N0YXRpc3RpY3MvZXh0ZW5k ZWRfc3RhdHMuYwpAQCAtMzMxNiwxMCArMzMxNiwxMCBAQCBzdGF0ZXh0X2NsYXVzZWxpc3Rfam9p bl9zZWxlY3Rpdml0eShQbGFubmVySW5mbyAqcm9vdCwgTGlzdCAqY2xhdXNlcywKIAkJCXsKIAkJ CQkvKiBub3RlIHdlIGFsbG93IHVzZSBvZiBudWxsZnJhYyByZWdhcmRsZXNzIG9mIHNlY3VyaXR5 IGNoZWNrICovCiAJCQkJc3RhdHMgPSAoRm9ybV9wZ19zdGF0aXN0aWMpIEdFVFNUUlVDVCh2YXJk YXRhLnN0YXRzVHVwbGUpOwotCQkJCS8qIEZJWE1FIHNob3VsZCB0aGlzIGNhbGwgc3RhdGlzdGlj X3Byb2Nfc2VjdXJpdHlfY2hlY2sgbGlrZSBlcWpvaW5zZWw/ICovCi0JCQkJaGF2ZV9tY3ZzID0g Z2V0X2F0dHN0YXRzc2xvdCgmc3Nsb3QsIHZhcmRhdGEuc3RhdHNUdXBsZSwKLQkJCQkJCQkJCQkJ IFNUQVRJU1RJQ19LSU5EX01DViwgSW52YWxpZE9pZCwKLQkJCQkJCQkJCQkJIEFUVFNUQVRTU0xP VF9WQUxVRVMgfCBBVFRTVEFUU1NMT1RfTlVNQkVSUyk7CisJCQkJaWYgKHN0YXRpc3RpY19wcm9j X3NlY3VyaXR5X2NoZWNrKCZ2YXJkYXRhLCBGX0VRSk9JTlNFTCkpCisJCQkJCWhhdmVfbWN2cyA9 IGdldF9hdHRzdGF0c3Nsb3QoJnNzbG90LCB2YXJkYXRhLnN0YXRzVHVwbGUsCisJCQkJCQkJCQkJ CQkgU1RBVElTVElDX0tJTkRfTUNWLCBJbnZhbGlkT2lkLAorCQkJCQkJCQkJCQkJIEFUVFNUQVRT U0xPVF9WQUxVRVMgfCBBVFRTVEFUU1NMT1RfTlVNQkVSUyk7CiAJCQl9CiAKIAkJCWlmIChoYXZl X21jdnMpCkBAIC0zMzU2LDEwICszMzU2LDEwIEBAIHN0YXRleHRfY2xhdXNlbGlzdF9qb2luX3Nl bGVjdGl2aXR5KFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpjbGF1c2VzLAogCQkJewogCQkJCS8q IG5vdGUgd2UgYWxsb3cgdXNlIG9mIG51bGxmcmFjIHJlZ2FyZGxlc3Mgb2Ygc2VjdXJpdHkgY2hl Y2sgKi8KIAkJCQlzdGF0cyA9IChGb3JtX3BnX3N0YXRpc3RpYykgR0VUU1RSVUNUKHZhcmRhdGEu c3RhdHNUdXBsZSk7Ci0JCQkJLyogRklYTUUgc2hvdWxkIHRoaXMgY2FsbCBzdGF0aXN0aWNfcHJv Y19zZWN1cml0eV9jaGVjayBsaWtlIGVxam9pbnNlbD8gKi8KLQkJCQloYXZlX21jdnMgPSBnZXRf YXR0c3RhdHNzbG90KCZzc2xvdCwgdmFyZGF0YS5zdGF0c1R1cGxlLAotCQkJCQkJCQkJCQkgU1RB VElTVElDX0tJTkRfTUNWLCBJbnZhbGlkT2lkLAotCQkJCQkJCQkJCQkgQVRUU1RBVFNTTE9UX1ZB TFVFUyB8IEFUVFNUQVRTU0xPVF9OVU1CRVJTKTsKKwkJCQlpZiAoc3RhdGlzdGljX3Byb2Nfc2Vj dXJpdHlfY2hlY2soJnZhcmRhdGEsIEZfRVFKT0lOU0VMKSkKKwkJCQkJaGF2ZV9tY3ZzID0gZ2V0 X2F0dHN0YXRzc2xvdCgmc3Nsb3QsIHZhcmRhdGEuc3RhdHNUdXBsZSwKKwkJCQkJCQkJCQkJCSBT VEFUSVNUSUNfS0lORF9NQ1YsIEludmFsaWRPaWQsCisJCQkJCQkJCQkJCQkgQVRUU1RBVFNTTE9U X1ZBTFVFUyB8IEFUVFNUQVRTU0xPVF9OVU1CRVJTKTsKIAkJCX0KIAogCQkJaWYgKGhhdmVfbWN2 cykKLS0gCjIuMzQuMQoKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAHYxLTAwMTctc29tZS1jb2RlLXJlZmFjdG9yLWFzLWJlZm9yZS5wYXRjaAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAw NjQ0ADAwMDE3NTAAMDAwMTc1MAAwMDAwMDAxMDE2NAAxNDYxMzMyNjU3NQAwMjA3NzMAIDAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIgIAB5aXpoaS5memgA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAHlpemhpLmZ6aAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAARnJvbSAxNzY3OWQ1OGM5MTVjMDc2OWI5MjQyMGVlMmEzMTY0MDcyZDFlZTUzIE1v biBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiAieWl6aGkuZnpoIiA8eWl6aGkuZnpoQGFsaWJh YmEtaW5jLmNvbT4KRGF0ZTogTW9uLCA4IEFwciAyMDI0IDE3OjM3OjUyICswODAwClN1YmplY3Q6 IFtQQVRDSCB2MSAxNy8yMl0gc29tZSBjb2RlIHJlZmFjdG9yIGFzIGJlZm9yZS4KCjEuIHVzZSBy aW5mby0+bGVmdHxyaWd0aF9yZWxpZHMgaW5zdGVhZCBvZiBwdWxsX3Zhcm5vcy4KMi4gdXNlIEZ1 bmN0aW9uQ2FsbEludm9rZSBpbnN0ZWFkIG9mIEZ1bmN0aW9uQ2FsbDJDb2xsLgozLiBzdHJpcCBS ZWxhYmxlVHlwZS4KLS0tCiBzcmMvYmFja2VuZC9zdGF0aXN0aWNzL21jdi5jIHwgNDcgKysrKysr KysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMjcgaW5zZXJ0 aW9ucygrKSwgMjAgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RhdGlz dGljcy9tY3YuYyBiL3NyYy9iYWNrZW5kL3N0YXRpc3RpY3MvbWN2LmMKaW5kZXggMDJhNzRhMGVj Ny4uNWQyMGVhMmFlMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9tY3YuYwor KysgYi9zcmMvYmFja2VuZC9zdGF0aXN0aWNzL21jdi5jCkBAIC0yNjk4LDYgKzI2OTgsNyBAQCBt Y3ZfY29tYmluZV9zaW1wbGUoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwgU3Rh dGlzdGljRXh0SW5mbyAqc3RhdCwKIAogCS8qIGluZm8gYWJvdXQgY2xhdXNlcyBhbmQgaG93IHRo ZXkgbWF0Y2ggdG8gTUNWIHN0YXRzICovCiAJRm1nckluZm8Jb3Bwcm9jOworCUxPQ0FMX0ZDSU5G TyhmY2luZm8sIDIpOwogCWludAkJCWluZGV4ID0gMDsKIAlib29sCQlyZXZlcnNlID0gZmFsc2U7 CiAJUmFuZ2VUYmxFbnRyeSAqcnRlID0gcm9vdC0+c2ltcGxlX3J0ZV9hcnJheVtyZWwtPnJlbGlk XTsKQEAgLTI3MjAsOCArMjcyMSw4IEBAIG1jdl9jb21iaW5lX3NpbXBsZShQbGFubmVySW5mbyAq cm9vdCwgUmVsT3B0SW5mbyAqcmVsLCBTdGF0aXN0aWNFeHRJbmZvICpzdGF0LAogCWlmIChjb25k aXRpb25zKQogCXsKIAkJY21hdGNoZXMgPSBtY3ZfZ2V0X21hdGNoX2JpdG1hcChyb290LCBjb25k aXRpb25zLAotCQkJCQkJCQkJCSBzdGF0LT5rZXlzLCBzdGF0LT5leHBycywKLQkJCQkJCQkJCQkg bWN2LCBmYWxzZSk7CisJCQkJCQkJCQkJc3RhdC0+a2V5cywgc3RhdC0+ZXhwcnMsCisJCQkJCQkJ CQkJbWN2LCBmYWxzZSk7CiAJCWNzZWwgPSBjbGF1c2VsaXN0X3NlbGVjdGl2aXR5KHJvb3QsIGNv bmRpdGlvbnMsIHJlbC0+cmVsaWQsIDAsIE5VTEwpOwogCX0KIApAQCAtMjc0Myw4ICsyNzQ0LDkg QEAgbWN2X2NvbWJpbmVfc2ltcGxlKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWws IFN0YXRpc3RpY0V4dEluZm8gKnN0YXQsCiAJCU9wRXhwcgkgICAqb3BleHByOwogCQlOb2RlCSAg ICpleHByMSwKIAkJCQkgICAqZXhwcjI7Ci0JCUJpdG1hcHNldCAgKnJlbGlkczEsCi0JCQkJICAg KnJlbGlkczI7CisJCVJlc3RyaWN0SW5mbyAqcmluZm8gPSAoUmVzdHJpY3RJbmZvICopIGNsYXVz ZTsKKworCQlBc3NlcnQoSXNBKGNsYXVzZSwgUmVzdHJpY3RJbmZvKSk7CiAKIAkJLyoKIAkJICog U3RyaXAgdGhlIFJlc3RyaWN0SW5mbyBub2RlLCBnZXQgdGhlIGFjdHVhbCBjbGF1c2UuCkBAIC0y NzUzLDkgKzI3NTUsNyBAQCBtY3ZfY29tYmluZV9zaW1wbGUoUGxhbm5lckluZm8gKnJvb3QsIFJl bE9wdEluZm8gKnJlbCwgU3RhdGlzdGljRXh0SW5mbyAqc3RhdCwKIAkJICogdG9vIChlLmcuIFJl bGFiZWxUeXBlIGV0Yy4pLiBzdGF0ZXh0X2lzX3N1cHBvcnRlZF9qb2luX2NsYXVzZQogCQkgKiBt YXRjaGVzIHRoaXMsIGJ1dCBtYXliZSB3ZSBuZWVkIHRvIHJlbGF4IGl0PwogCQkgKi8KLQkJaWYg KElzQShjbGF1c2UsIFJlc3RyaWN0SW5mbykpCi0JCQljbGF1c2UgPSAoTm9kZSAqKSAoKFJlc3Ry aWN0SW5mbyAqKSBjbGF1c2UpLT5jbGF1c2U7Ci0KKwkJY2xhdXNlID0gKE5vZGUgKikgcmluZm8t PmNsYXVzZTsKIAkJb3BleHByID0gKE9wRXhwciAqKSBjbGF1c2U7CiAKIAkJLyogTWFrZSBzdXJl IHdlIGhhdmUgdGhlIGV4cGVjdGVkIG5vZGUgdHlwZS4gKi8KQEAgLTI3NjMsMTYgKzI3NjMsMjEg QEAgbWN2X2NvbWJpbmVfc2ltcGxlKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWws IFN0YXRpc3RpY0V4dEluZm8gKnN0YXQsCiAJCUFzc2VydChsaXN0X2xlbmd0aChvcGV4cHItPmFy Z3MpID09IDIpOwogCiAJCWZtZ3JfaW5mbyhnZXRfb3Bjb2RlKG9wZXhwci0+b3BubyksICZvcHBy b2MpOworCQlJbml0RnVuY3Rpb25DYWxsSW5mb0RhdGEoKmZjaW5mbywgJm9wcHJvYywgMiwgb3Bl eHByLT5pbnB1dGNvbGxpZCwgTlVMTCwgTlVMTCk7CisJCWZjaW5mby0+YXJnc1swXS5pc251bGwg PSBmYWxzZTsKKwkJZmNpbmZvLT5hcmdzWzFdLmlzbnVsbCA9IGZhbHNlOwogCi0JCS8qIEZJWE1F IHN0cmlwIHJlbGFiZWwgZXRjLiB0aGUgd2F5IGV4YW1pbmVfb3BjbGF1c2VfYXJncyBkb2VzICov CiAJCWV4cHIxID0gbGluaXRpYWwob3BleHByLT5hcmdzKTsKIAkJZXhwcjIgPSBsc2Vjb25kKG9w ZXhwci0+YXJncyk7CiAKLQkJLyogZGV0ZXJtaW5lIG9yZGVyIG9mIGNsYXVzZXMgKHJlbDEgb3Ag cmVsMikgb3IgKHJlbDIgb3AgcmVsMSkgKi8KLQkJcmVsaWRzMSA9IHB1bGxfdmFybm9zKHJvb3Qs IGV4cHIxKTsKLQkJcmVsaWRzMiA9IHB1bGxfdmFybm9zKHJvb3QsIGV4cHIyKTsKKwkJLyogc3Ry aXAgUmVsYWJlbFR5cGUgZnJvbSBlaXRoZXIgc2lkZSBvZiB0aGUgZXhwcmVzc2lvbiAqLworCQlp ZiAoSXNBKGV4cHIxLCBSZWxhYmVsVHlwZSkpCisJCQlleHByMSA9IChOb2RlICopICgoUmVsYWJl bFR5cGUgKikgZXhwcjEpLT5hcmc7CiAKLQkJaWYgKGJtc19zaW5nbGV0b25fbWVtYmVyKHJlbGlk czEpID09IHJlbC0+cmVsaWQpCisJCWlmIChJc0EoZXhwcjIsIFJlbGFiZWxUeXBlKSkKKwkJCWV4 cHIyID0gKE5vZGUgKikgKChSZWxhYmVsVHlwZSAqKSBleHByMiktPmFyZzsKKworCQlpZiAoYm1z X3NpbmdsZXRvbl9tZW1iZXIocmluZm8tPmxlZnRfcmVsaWRzKSA9PSByZWwtPnJlbGlkKQogCQl7 CiAJCQlPaWQJCWNvbGxpZDsKIApAQCAtMjc4Myw3ICsyNzg4LDcgQEAgbWN2X2NvbWJpbmVfc2lt cGxlKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsIFN0YXRpc3RpY0V4dEluZm8g KnN0YXQsCiAJCQlleHByczEgPSBsYXBwZW5kKGV4cHJzMSwgZXhwcjEpOwogCQkJZXhwcnMyID0g bGFwcGVuZChleHByczIsIGV4cHIyKTsKIAkJfQotCQllbHNlIGlmIChibXNfc2luZ2xldG9uX21l bWJlcihyZWxpZHMyKSA9PSByZWwtPnJlbGlkKQorCQllbHNlIGlmIChibXNfc2luZ2xldG9uX21l bWJlcihyaW5mby0+cmlnaHRfcmVsaWRzKSA9PSByZWwtPnJlbGlkKQogCQl7CiAJCQlPaWQJCWNv bGxpZDsKIApAQCAtMjg0OSwxNCArMjg1NCwxNiBAQCBtY3ZfY29tYmluZV9zaW1wbGUoUGxhbm5l ckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwgU3RhdGlzdGljRXh0SW5mbyAqc3RhdCwKIAkJ CSAqIEZJWE1FIFVzZSBhcHByb3ByaWF0ZSBjb2xsYXRpb24uCiAJCQkgKi8KIAkJCWlmIChyZXZl cnNlKQotCQkJCW1hdGNoID0gRGF0dW1HZXRCb29sKEZ1bmN0aW9uQ2FsbDJDb2xsKCZvcHByb2Ms Ci0JCQkJCQkJCQkJCQkJICAgSW52YWxpZE9pZCwKLQkJCQkJCQkJCQkJCQkgICB2YWx1ZTIsIHZh bHVlMSkpOworCQkJeworCQkJCWZjaW5mby0+YXJnc1swXS52YWx1ZSA9IHZhbHVlMjsKKwkJCQlm Y2luZm8tPmFyZ3NbMV0udmFsdWUgPSB2YWx1ZTE7CisJCQl9CiAJCQllbHNlCi0JCQkJbWF0Y2gg PSBEYXR1bUdldEJvb2woRnVuY3Rpb25DYWxsMkNvbGwoJm9wcHJvYywKLQkJCQkJCQkJCQkJCQkg ICBJbnZhbGlkT2lkLAotCQkJCQkJCQkJCQkJCSAgIHZhbHVlMSwgdmFsdWUyKSk7Ci0KKwkJCXsK KwkJCQlmY2luZm8tPmFyZ3NbMF0udmFsdWUgPSB2YWx1ZTE7CisJCQkJZmNpbmZvLT5hcmdzWzFd LnZhbHVlID0gdmFsdWUyOworCQkJfQorCQkJbWF0Y2ggPSBEYXR1bUdldEJvb2woRnVuY3Rpb25D YWxsSW52b2tlKGZjaW5mbykpOwogCQkJaWYgKG1hdGNoKQogCQkJewogCQkJCS8qIFhYWCBEbyB3 ZSBuZWVkIHRvIGRvIHNvbWV0aGluZyBhYm91dCBiYXNlIGZyZXF1ZW5jeT8gKi8KLS0gCjIuMzQu MQoKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA djEtMDAxOC1GaXgtZXJyb3ItdW5leHBlY3RlZC1zeXN0ZW0tYXR0cmlidXRlLXdoZW4tam9pbi13 LnBhdGNoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDA2NDQAMDAwMTc1 MAAwMDAxNzUwADAwMDAwMDA3NjY3ADE0NjEzMzI2NTc1ADAyNTE3NQAgMAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAHlpemhpLmZ6aAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAeWl6aGkuZnpoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABG cm9tIDMyMWEzMWQxNDJkYmQ1OGRmM2U1N2M2NDJlMTFjZTE3YjRlYjUwMzMgTW9uIFNlcCAxNyAw MDowMDowMCAyMDAxCkZyb206ICJ5aXpoaS5memgiIDx5aXpoaS5memhAYWxpYmFiYS1pbmMuY29t PgpEYXRlOiBUdWUsIDkgQXByIDIwMjQgMTY6NDg6MjYgKzA4MDAKU3ViamVjdDogW1BBVENIIHYx IDE4LzIyXSBGaXggZXJyb3IgInVuZXhwZWN0ZWQgc3lzdGVtIGF0dHJpYnV0ZSIgd2hlbiBqb2lu CiB3aXRoIHN5c3RlbSBhdHRyCgpXZSBjYW4ndCBqdXN0IGNoYW5nZSAnZWxvZyhFUlJPUiwgInVu ZXhwZWN0ZWQgc3lzdGVtIGF0dHJpYnV0ZSIpOycgdG8KJ2NvbnRpbnVlJyBpbiBleHRyYWN0X3Jl bGF0aW9uX2luZm8gc2luY2UgYWZ0ZXIgd2UgZXh0cmFjdCB0aGUKU3RhdGlzdGljRXh0SW5mbywg YW5kIHN0YXQgaXMgbm90IE5VTEwsIHdlIGdyYW50ZWUgdGhlIGV4cHJlc3Npb24gaW4KSm9pblBh aXJJbmZvLmNsYXVzZSBoYXMgYSBtYXRjaGVkIGV4cHJlc3Npb24gd2l0aCBtY3ZfbWF0Y2hfZXhw cmVzc2lvbiwKaG93ZXZlciB0aGlzIGlzIG5vdCB0cnVlIGZvciBzeXN0ZW0gYXR0cmlidXRlLiBz byBmaXggaXQgYXQgdGhlIGZpcnN0CnBsYWNlIHdoZW4gcG9wdWxhdGUgdGhlIGNsYXVzZSBpbnRv IEpvaW5QYWlySW5mby5jbGF1c2VzIHdoaWNoIGlzIHRoZQpzdGF0ZXh0X2lzX3N1cHBvcnRlZF9q b2luX2NsYXVzZSBmdW5jdGlvbi4gRXhwcmVzc2lvbiBjb250YWlucyBhIHN5c3RlbQphdHRyaWJ1 dGUgaXMgT0sgc2luY2UgZHVlIHRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBtY3ZfbWF0Y2hfZXhw cmVzc2lvbgpzbyBvbmx5IFZhciBuZWVkIHRvIGJlIGhhbmRsZWQgdGhlcmUuCi0tLQogc3JjL2Jh Y2tlbmQvc3RhdGlzdGljcy9leHRlbmRlZF9zdGF0cy5jIHwgMjEgKysrKysrKysrKysrKysrKysr Ky0tCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9zdGF0c19leHQuc3FsICAgICAgfCAgNiArKysrKysK IDIgZmlsZXMgY2hhbmdlZCwgMjUgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9zdGF0aXN0aWNzL2V4dGVuZGVkX3N0YXRzLmMgYi9zcmMvYmFj a2VuZC9zdGF0aXN0aWNzL2V4dGVuZGVkX3N0YXRzLmMKaW5kZXggYTI4MDFkMGU5NC4uODI0Y2Q5 ZDI3OSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9leHRlbmRlZF9zdGF0cy5j CisrKyBiL3NyYy9iYWNrZW5kL3N0YXRpc3RpY3MvZXh0ZW5kZWRfc3RhdHMuYwpAQCAtMjgyNSw2 ICsyODI1LDcgQEAgc3RhdGV4dF9pc19zdXBwb3J0ZWRfam9pbl9jbGF1c2UoUGxhbm5lckluZm8g KnJvb3QsIE5vZGUgKmNsYXVzZSkKIAlSZXN0cmljdEluZm8gICAqcmluZm87CiAJT3BFeHByCQkg ICAqb3BjbGF1c2U7CiAJaW50CQkJCWxlZnRfcmVsaWQsIHJpZ2h0X3JlbGlkOworCVZhcgkJCSAg ICp2YXI7CiAKIAlpZiAoIUlzQShjbGF1c2UsIFJlc3RyaWN0SW5mbykpCiAJCXJldHVybiBmYWxz ZTsKQEAgLTI4NjksMTQgKzI4NzAsMjEgQEAgc3RhdGV4dF9pc19zdXBwb3J0ZWRfam9pbl9jbGF1 c2UoUGxhbm5lckluZm8gKnJvb3QsIE5vZGUgKmNsYXVzZSkKIAkJcmV0dXJuIGZhbHNlOwogCiAJ LyoKLQkgKiBYWFg6Ci0JICogSm9pbiB0d28gY29sdW1ucyBpbiB0aGUgc2FtZSByZWxhdGlvbiBp cyB1bmNvbW1vbiBhbmQKKwkgKiBYWFg6IEpvaW4gdHdvIGNvbHVtbnMgaW4gdGhlIHNhbWUgcmVs YXRpb24gaXMgdW5jb21tb24gYW5kCiAJICogZXh0cmFjdF9yZWxhdGlvbl9pbmZvIHJlcXVpcmVz IDIgZGlmZmVyZW50IHJlbGlkcywgc28gbm8gYm90aGVyIHRvCiAJICogaGFuZGxlIGl0LgogCSAq LwogCWlmIChsZWZ0X3JlbGlkID09IHJpZ2h0X3JlbGlkKQogCQlyZXR1cm4gZmFsc2U7CiAKKwl2 YXIgPSAoVmFyICopIGxpbml0aWFsKG9wY2xhdXNlLT5hcmdzKTsKKwlpZiAoSXNBKHZhciwgVmFy KSAmJiB2YXItPnZhcmF0dG5vIDwgMCkKKwkJcmV0dXJuIGZhbHNlOworCisJdmFyID0gKFZhciAq KSBsc2Vjb25kKG9wY2xhdXNlLT5hcmdzKTsKKwlpZiAoSXNBKHZhciwgVmFyKSAmJiB2YXItPnZh cmF0dG5vIDwgMCkKKwkJcmV0dXJuIGZhbHNlOworCiAJcmV0dXJuIHRydWU7CiB9CiAKQEAgLTMx NDgsNiArMzE1NiwxNSBAQCBleHRyYWN0X3JlbGF0aW9uX2luZm8oUGxhbm5lckluZm8gKnJvb3Qs IEpvaW5QYWlySW5mbyAqaW5mbywgaW50IGluZGV4LAogCQl9CiAJfQogCisJLyoKKwkgKiBGaW5k IGEgc3RhdCB3aGljaCBjb3ZlcnMgKmFsbCogdGhlIGF0dG51bXMgYW5kIGV4cHJzIGZvciBzaW1w bGlmaWNhdGlvbi4KKwkgKgorCSAqIFRvIG92ZXJjb21lIGFib3ZlIGxpbWl0YXRpb24sIHN0YXRl eHRfZmluZF9tYXRjaGluZ19tY3YgaGFzIHRvIHNtYXJ0IGVub3VnaCB0bworCSAqIGRlY2lkZSB3 aGljaCBleHByZXNzaW9uIHRvIGRpc2NhcmQgYXMgdGhlIGZpcnN0IHN0ZXAuIGFuZCBsYXRlciB0 aGUgb3RoZXIKKwkgKiBzaWRlIG9mIGpvaW4gaGFzIHRvIHVzZSBhIHN0YXRzIHdoaWNoIG1hdGNo IG9yIHN1cGVyc2V0IG9mIGV4cHJlc3Npb24gaGVyZS4KKwkgKiBhdCBsYXN0IG1jdl9jb21iaW5l X2V4dGVuZGVkIHNob3VsZCBiZSBpbXByb3ZlZCB0byBoYW5kbGUgdGhlIG5vdC1leGFjdGx5LXNh bWUKKwkgKiBtY3YuCisJICovCiAJKnN0YXQgPSBzdGF0ZXh0X2ZpbmRfbWF0Y2hpbmdfbWN2KHJv b3QsIHJlbCwgYXR0bnVtcywgZXhwcnMsIGJhc2VfY29uZGl0aW9ucyk7CiAKIAlyZXR1cm4gcmVs OwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3RhdHNfZXh0LnNxbCBiL3NyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL3N0YXRzX2V4dC5zcWwKaW5kZXggYzcwMjM2MjBhMS4uODVlMTllZjA0 YyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3RhdHNfZXh0LnNxbAorKysgYi9z cmMvdGVzdC9yZWdyZXNzL3NxbC9zdGF0c19leHQuc3FsCkBAIC0xNTk1LDYgKzE1OTUsMTIgQEAg U0VMRUNUICogRlJPTSBjaGVja19lc3RpbWF0ZWRfcm93cygnc2VsZWN0ICogZnJvbSBqb2luX3Rl c3RfMSBqMSBqb2luIGpvaW5fdGVzdF8KIFNFTEVDVCAqIEZST00gY2hlY2tfZXN0aW1hdGVkX3Jv d3MoJ3NlbGVjdCAqIGZyb20gam9pbl90ZXN0XzEgajEgam9pbiBqb2luX3Rlc3RfMiBqMiBvbiAo ajEuYSArIDEgPSBqMi5hKSB3aGVyZSBqMS5jIDwgNScpOwogU0VMRUNUICogRlJPTSBjaGVja19l c3RpbWF0ZWRfcm93cygnc2VsZWN0ICogZnJvbSBqb2luX3Rlc3RfMSBqMSBqb2luIGpvaW5fdGVz dF8yIGoyIG9uIChqMS5hICsgMSA9IGoyLmEgKyAxKSB3aGVyZSBqMS5jIDwgNScpOwogCistLSB0 ZXN0IGpvaW4gd2l0aCBzeXN0ZW0gY29sdW1uIHZhciwgYnV0IHRoZSBleHQgc3RhdGlzdGljcyBj YW4ndCBiZSBidWlsdCBpbiBzeXN0ZW0gYXR0cmlidXRlIEFORCBleHRlbmRlZCBzdGF0aXN0aWNz CistLSBtdXN0IGNvdmVycyBhbGwgdGhlIGpvaW4gY29sdW1ucywgc28gdGhlIGZvbGxvd2luZyAy IHN0YXRlbWVudHMgY2FuIHVzZSBleHRlbmRlZCBzdGF0aXN0aWNzIGZvciBqb2luLgorU0VMRUNU ICogRlJPTSBjaGVja19lc3RpbWF0ZWRfcm93cygnc2VsZWN0ICogZnJvbSBqb2luX3Rlc3RfMSBq MSBqb2luIGpvaW5fdGVzdF8yIGoyIG9uICgoajEuYSArIDEgPSBqMi5hICsgMSkgYW5kIChqMS5i ID0gajIuYikpIGFuZCBqMS5jbWluID0gajIuY21pbicpOworLS0gSm9pbiB3aXRoIHN5c3RlbSBj b2x1bW4gZXhwcmVzc2lvbi4KK1NFTEVDVCAqIEZST00gY2hlY2tfZXN0aW1hdGVkX3Jvd3MoJ3Nl bGVjdCAqIGZyb20gam9pbl90ZXN0XzEgajEgam9pbiBqb2luX3Rlc3RfMiBqMiBvbiAoKGoxLmEg KyAxID0gajIuYSArIDEpIGFuZCAoajEuYiA9IGoyLmIpKSBhbmQgajEuY21pbjo6dGV4dDo6aW50 NCA9IGoyLmNtaW46OnRleHQ6OmludDQnKTsKKwogLS0gdHJ5IGNvbWJpbmluZyB3aXRoIHNpbmds ZS1jb2x1bW4gKGFuZCBzaW5nbGUtZXhwcmVzc2lvbikgc3RhdGlzdGljcwogRFJPUCBTVEFUSVNU SUNTIGpvaW5fc3RhdHNfMjsKIAotLSAKMi4zNC4xCgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdjEtMDAxOS1G aXgtdGhlLWluY29ycmVjdC1jb21tZW50LW9uLWV4dGVuZGVkLXN0YXRzLnBhdGNoAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDA2NDQAMDAwMTc1MAAwMDAxNzUw ADAwMDAwMDE0MDAyADE0NjEzMzI2NTc1ADAyMzc0NwAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAHlpemhpLmZ6aAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAeWl6aGkuZnpoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGcm9tIDU1MjUx YWRjNDI5YThiOWZjYzcwNDA5YTdiODM5Njg1ODRmZmNhNGMgTW9uIFNlcCAxNyAwMDowMDowMCAy MDAxCkZyb206ICJ5aXpoaS5memgiIDx5aXpoaS5memhAYWxpYmFiYS1pbmMuY29tPgpEYXRlOiBU dWUsIDkgQXByIDIwMjQgMTc6MTQ6MDEgKzA4MDAKU3ViamVjdDogW1BBVENIIHYxIDE5LzIyXSBG aXggdGhlIGluY29ycmVjdCBjb21tZW50IG9uIGV4dGVuZGVkIHN0YXRzLgoKQ29tbWVudHMgKGVp dGhlciBleHRlbmRlZF9zdGF0cy5jIG9yIHN0YXRzX2V4dC5zcWwpIHNheXMgd2UgbXVzdCBuZWVk cwptdWx0aXBsZSBqb2luIGNsYXVzZXMsIGJ1dCBpdCBoYXMgYmVlbiBoYW5kbGVkIGluCmNsYXVz ZWxpc3Rfc2VsZWN0aXZpdHlfZXh0IGFscmVhZHkgd2l0aCB0aGUgYmVsb3cgY29kZS4KCnNpbmds ZV9jbGF1c2Vfb3B0aW1pemF0aW9uCgk9ICF0cmVhdF9hc19qb2luX2NsYXVzZShyb290LCBjbGF1 c2UsIHJpbmZvLCB2YXJSZWxpZCwgc2ppbmZvKTsKLS0tCiBzcmMvYmFja2VuZC9zdGF0aXN0aWNz L2V4dGVuZGVkX3N0YXRzLmMgfCAxMCArKy0tLS0tLS0tCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL3N0YXRzX2V4dC5vdXQgfCAxOSArKysrKysrKysrKysrKystLS0tCiBzcmMvdGVzdC9yZWdy ZXNzL3NxbC9zdGF0c19leHQuc3FsICAgICAgfCAgNCAtLS0tCiAzIGZpbGVzIGNoYW5nZWQsIDE3 IGluc2VydGlvbnMoKyksIDE2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3N0YXRpc3RpY3MvZXh0ZW5kZWRfc3RhdHMuYyBiL3NyYy9iYWNrZW5kL3N0YXRpc3RpY3MvZXh0 ZW5kZWRfc3RhdHMuYwppbmRleCA4MjRjZDlkMjc5Li5jYTlkY2RkNTU2IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9zdGF0aXN0aWNzL2V4dGVuZGVkX3N0YXRzLmMKKysrIGIvc3JjL2JhY2tlbmQv c3RhdGlzdGljcy9leHRlbmRlZF9zdGF0cy5jCkBAIC0zMjE5LDE0ICszMjE5LDggQEAgZ2V0X2V4 cHJlc3Npb25fZm9yX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLCBOb2Rl ICpjbGF1c2UpCiAKIC8qCiAgKiBzdGF0ZXh0X2NsYXVzZWxpc3Rfam9pbl9zZWxlY3Rpdml0eQot ICoJCVVzZSBleHRlbmRlZCBzdGF0cyB0byBlc3RpbWF0ZSBqb2luIGNsYXVzZXMuCi0gKgotICog WFhYIEluIHByaW5jaXBsZSwgd2Ugc2hvdWxkIG5vdCByZXN0cmljdCB0aGlzIHRvIGNhc2VzIHdp dGggbXVsdGlwbGUKLSAqIGpvaW4gY2xhdXNlcyAtIHdlIHNob3VsZCBjb25zaWRlciBkZXBlbmRl bmNpZXMgd2l0aCBjb25kaXRpb25zIGF0IHRoZQotICogYmFzZSByZWxhdGlvbnMsIGkuZS4gY2Fs Y3VsYXRlIFAoam9pbiBjbGF1c2UgfCBiYXNlIHJlc3RyaWN0aW9ucykuCi0gKiBCdXQgY3VycmVu dGx5IHRoYXQgZG9lcyBub3QgaGFwcGVuLCBiZWNhdXNlIGNsYXVzZWxpc3Rfc2VsZWN0aXZpdHlf ZXh0Ci0gKiB0cmVhdHMgYSBzaW5nbGUgY2xhdXNlIGFzIGEgc3BlY2lhbCBjYXNlIChhbmQgd2Ug ZG9uJ3QgYXBwbHkgZXh0ZW5kZWQKLSAqIHN0YXRpc3RpY3MgaW4gdGhhdCBjYXNlIHlldCkuCisg KgkJVXNlIGV4dGVuZGVkIHN0YXRzIHRvIGVzdGltYXRlIGpvaW4gY2xhdXNlcy4gdGhlIGxpbWl0 YXRpb24gaXMgdGhlCisgKiBleHRlbmRlZCBzdGF0aXN0aWNzIG11c3QgY292ZXJzIGFsbCB0aGUg am9pbiBjbGF1c2VzLgogICovCiBTZWxlY3Rpdml0eQogc3RhdGV4dF9jbGF1c2VsaXN0X2pvaW5f c2VsZWN0aXZpdHkoUGxhbm5lckluZm8gKnJvb3QsIExpc3QgKmNsYXVzZXMsCmRpZmYgLS1naXQg YS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N0YXRzX2V4dC5vdXQgYi9zcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL3N0YXRzX2V4dC5vdXQKaW5kZXggOTUyNDY1MjJiYi4uMmVjMjgyNjNiZSAx MDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zdGF0c19leHQub3V0CisrKyBi L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3RhdHNfZXh0Lm91dApAQCAtMzExMSw4ICszMTEx LDYgQEAgU0VMRUNUICogRlJPTSBjaGVja19lc3RpbWF0ZWRfcm93cygnc2VsZWN0ICogZnJvbSBq b2luX3Rlc3RfMSBqMSBqb2luIGpvaW5fdGVzdF8KICAgICAgICAxMDAgfCAgICAgIDAKICgxIHJv dykKIAotLS0gY2FuJ3QgYmUgaW1wcm92ZWQgZHVlIHRvIHRoZSBvcHRpbWl6YXRpb24gaW4gY2xh dXNlbGlzdF9zZWxlY3Rpdml0eV9leHQsCi0tLSB3aGljaCBza2lwcyBjYXNlcyB3aXRoIGEgc2lu Z2xlIChqb2luKSBjbGF1c2UKIFNFTEVDVCAqIEZST00gY2hlY2tfZXN0aW1hdGVkX3Jvd3MoJ3Nl bGVjdCAqIGZyb20gam9pbl90ZXN0XzEgajEgam9pbiBqb2luX3Rlc3RfMiBqMiBvbiAoKGoxLmEg KyAxID0gajIuYSArIDEpKSB3aGVyZSBqMS5jIDwgNScpOwogIGVzdGltYXRlZCB8IGFjdHVhbCAK IC0tLS0tLS0tLS0tKy0tLS0tLS0tCkBAIC0zMTc4LDggKzMxNzYsNiBAQCBTRUxFQ1QgKiBGUk9N IGNoZWNrX2VzdGltYXRlZF9yb3dzKCdzZWxlY3QgKiBmcm9tIGpvaW5fdGVzdF8xIGoxIGpvaW4g am9pbl90ZXN0XwogICAgICAgICAgMSB8ICAgICAgMAogKDEgcm93KQogCi0tLSBjYW4ndCBiZSBp bXByb3ZlZCBkdWUgdG8gdGhlIG9wdGltaXphdGlvbiBpbiBjbGF1c2VsaXN0X3NlbGVjdGl2aXR5 X2V4dCwKLS0tIHdoaWNoIHNraXBzIGNhc2VzIHdpdGggYSBzaW5nbGUgKGpvaW4pIGNsYXVzZQog U0VMRUNUICogRlJPTSBjaGVja19lc3RpbWF0ZWRfcm93cygnc2VsZWN0ICogZnJvbSBqb2luX3Rl c3RfMSBqMSBqb2luIGpvaW5fdGVzdF8yIGoyIG9uICgoajEuYSArIDEgPSBqMi5hICsgMSkpIHdo ZXJlIGoxLmMgPCA1Jyk7CiAgZXN0aW1hdGVkIHwgYWN0dWFsIAogLS0tLS0tLS0tLS0rLS0tLS0t LS0KQEAgLTMyMTAsNiArMzIwNiwyMSBAQCBTRUxFQ1QgKiBGUk9NIGNoZWNrX2VzdGltYXRlZF9y b3dzKCdzZWxlY3QgKiBmcm9tIGpvaW5fdGVzdF8xIGoxIGpvaW4gam9pbl90ZXN0XwogICAgICA1 MDAwMCB8ICA1MDAwMAogKDEgcm93KQogCistLSB0ZXN0IGpvaW4gd2l0aCBzeXN0ZW0gY29sdW1u IHZhciwgYnV0IHRoZSBleHQgc3RhdGlzdGljcyBjYW4ndCBiZSBidWlsdCBpbiBzeXN0ZW0gYXR0 cmlidXRlIEFORCBleHRlbmRlZCBzdGF0aXN0aWNzCistLSBtdXN0IGNvdmVycyBhbGwgdGhlIGpv aW4gY29sdW1ucywgc28gdGhlIGZvbGxvd2luZyAyIHN0YXRlbWVudHMgY2FuIHVzZSBleHRlbmRl ZCBzdGF0aXN0aWNzIGZvciBqb2luLgorU0VMRUNUICogRlJPTSBjaGVja19lc3RpbWF0ZWRfcm93 cygnc2VsZWN0ICogZnJvbSBqb2luX3Rlc3RfMSBqMSBqb2luIGpvaW5fdGVzdF8yIGoyIG9uICgo ajEuYSArIDEgPSBqMi5hICsgMSkgYW5kIChqMS5iID0gajIuYikpIGFuZCBqMS5jbWluID0gajIu Y21pbicpOworIGVzdGltYXRlZCB8IGFjdHVhbCAKKy0tLS0tLS0tLS0tKy0tLS0tLS0tCisgICAg ICAgNTAwIHwgMTAwMDAwCisoMSByb3cpCisKKy0tIEpvaW4gd2l0aCBzeXN0ZW0gY29sdW1uIGV4 cHJlc3Npb24uCitTRUxFQ1QgKiBGUk9NIGNoZWNrX2VzdGltYXRlZF9yb3dzKCdzZWxlY3QgKiBm cm9tIGpvaW5fdGVzdF8xIGoxIGpvaW4gam9pbl90ZXN0XzIgajIgb24gKChqMS5hICsgMSA9IGoy LmEgKyAxKSBhbmQgKGoxLmIgPSBqMi5iKSkgYW5kIGoxLmNtaW46OnRleHQ6OmludDQgPSBqMi5j bWluOjp0ZXh0OjppbnQ0Jyk7CisgZXN0aW1hdGVkIHwgYWN0dWFsIAorLS0tLS0tLS0tLS0rLS0t LS0tLS0KKyAgICAgICAgNTAgfCAxMDAwMDAKKygxIHJvdykKKwogLS0gdHJ5IGNvbWJpbmluZyB3 aXRoIHNpbmdsZS1jb2x1bW4gKGFuZCBzaW5nbGUtZXhwcmVzc2lvbikgc3RhdGlzdGljcwogRFJP UCBTVEFUSVNUSUNTIGpvaW5fc3RhdHNfMjsKIFNFTEVDVCAqIEZST00gY2hlY2tfZXN0aW1hdGVk X3Jvd3MoJ3NlbGVjdCAqIGZyb20gam9pbl90ZXN0XzEgajEgam9pbiBqb2luX3Rlc3RfMiBqMiBv biAoajEuYSArIDEgPSBqMi5hKSB3aGVyZSBqMS5jIDwgNScpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rl c3QvcmVncmVzcy9zcWwvc3RhdHNfZXh0LnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3N0YXRz X2V4dC5zcWwKaW5kZXggODVlMTllZjA0Yy4uZWYzNDg0ZWI5MiAxMDA2NDQKLS0tIGEvc3JjL3Rl c3QvcmVncmVzcy9zcWwvc3RhdHNfZXh0LnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9z dGF0c19leHQuc3FsCkBAIC0xNTY0LDggKzE1NjQsNiBAQCBTRUxFQ1QgKiBGUk9NIGNoZWNrX2Vz dGltYXRlZF9yb3dzKCdzZWxlY3QgKiBmcm9tIGpvaW5fdGVzdF8xIGoxIGpvaW4gam9pbl90ZXN0 XwogU0VMRUNUICogRlJPTSBjaGVja19lc3RpbWF0ZWRfcm93cygnc2VsZWN0ICogZnJvbSBqb2lu X3Rlc3RfMSBqMSBqb2luIGpvaW5fdGVzdF8yIGoyIG9uICgoajEuYSArIDEgPSBqMi5hICsgMSkg YW5kIChqMS5iID0gajIuYikpIHdoZXJlIGoxLmMgPCA1IGFuZCBqMi5jIDwgMycpOwogU0VMRUNU ICogRlJPTSBjaGVja19lc3RpbWF0ZWRfcm93cygnc2VsZWN0ICogZnJvbSBqb2luX3Rlc3RfMSBq MSBqb2luIGpvaW5fdGVzdF8yIGoyIG9uICgoajEuYSArIDEgPSBqMi5hICsgMSkgYW5kIChqMS5i ID0gajIuYikpIHdoZXJlIGoxLmMgPCA1IGFuZCBqMi5jID4gNScpOwogCi0tLSBjYW4ndCBiZSBp bXByb3ZlZCBkdWUgdG8gdGhlIG9wdGltaXphdGlvbiBpbiBjbGF1c2VsaXN0X3NlbGVjdGl2aXR5 X2V4dCwKLS0tIHdoaWNoIHNraXBzIGNhc2VzIHdpdGggYSBzaW5nbGUgKGpvaW4pIGNsYXVzZQog U0VMRUNUICogRlJPTSBjaGVja19lc3RpbWF0ZWRfcm93cygnc2VsZWN0ICogZnJvbSBqb2luX3Rl c3RfMSBqMSBqb2luIGpvaW5fdGVzdF8yIGoyIG9uICgoajEuYSArIDEgPSBqMi5hICsgMSkpIHdo ZXJlIGoxLmMgPCA1Jyk7CiBTRUxFQ1QgKiBGUk9NIGNoZWNrX2VzdGltYXRlZF9yb3dzKCdzZWxl Y3QgKiBmcm9tIGpvaW5fdGVzdF8xIGoxIGpvaW4gam9pbl90ZXN0XzIgajIgb24gKChqMS5hICsg MSA9IGoyLmEgKyAxKSkgd2hlcmUgajEuYyA8IDUgYW5kIGoyLmMgPCA1Jyk7CiBTRUxFQ1QgKiBG Uk9NIGNoZWNrX2VzdGltYXRlZF9yb3dzKCdzZWxlY3QgKiBmcm9tIGpvaW5fdGVzdF8xIGoxIGpv aW4gam9pbl90ZXN0XzIgajIgb24gKChqMS5hICsgMSA9IGoyLmEgKyAxKSkgd2hlcmUgajEuYyA8 IDUgYW5kIGoyLmMgPiA1Jyk7CkBAIC0xNTg2LDggKzE1ODQsNiBAQCBTRUxFQ1QgKiBGUk9NIGNo ZWNrX2VzdGltYXRlZF9yb3dzKCdzZWxlY3QgKiBmcm9tIGpvaW5fdGVzdF8xIGoxIGpvaW4gam9p bl90ZXN0XwogU0VMRUNUICogRlJPTSBjaGVja19lc3RpbWF0ZWRfcm93cygnc2VsZWN0ICogZnJv bSBqb2luX3Rlc3RfMSBqMSBqb2luIGpvaW5fdGVzdF8yIGoyIG9uICgoajEuYSArIDEgPSBqMi5h ICsgMSkgYW5kIChqMS5iID0gajIuYikpIHdoZXJlIGoxLmMgPCA1IGFuZCBqMi5jIDwgMycpOwog U0VMRUNUICogRlJPTSBjaGVja19lc3RpbWF0ZWRfcm93cygnc2VsZWN0ICogZnJvbSBqb2luX3Rl c3RfMSBqMSBqb2luIGpvaW5fdGVzdF8yIGoyIG9uICgoajEuYSArIDEgPSBqMi5hICsgMSkgYW5k IChqMS5iID0gajIuYikpIHdoZXJlIGoxLmMgPCA1IGFuZCBqMi5jID4gNScpOwogCi0tLSBjYW4n dCBiZSBpbXByb3ZlZCBkdWUgdG8gdGhlIG9wdGltaXphdGlvbiBpbiBjbGF1c2VsaXN0X3NlbGVj dGl2aXR5X2V4dCwKLS0tIHdoaWNoIHNraXBzIGNhc2VzIHdpdGggYSBzaW5nbGUgKGpvaW4pIGNs YXVzZQogU0VMRUNUICogRlJPTSBjaGVja19lc3RpbWF0ZWRfcm93cygnc2VsZWN0ICogZnJvbSBq b2luX3Rlc3RfMSBqMSBqb2luIGpvaW5fdGVzdF8yIGoyIG9uICgoajEuYSArIDEgPSBqMi5hICsg MSkpIHdoZXJlIGoxLmMgPCA1Jyk7CiBTRUxFQ1QgKiBGUk9NIGNoZWNrX2VzdGltYXRlZF9yb3dz KCdzZWxlY3QgKiBmcm9tIGpvaW5fdGVzdF8xIGoxIGpvaW4gam9pbl90ZXN0XzIgajIgb24gKChq MS5hICsgMSA9IGoyLmEgKyAxKSkgd2hlcmUgajEuYyA8IDUgYW5kIGoyLmMgPCA1Jyk7CiBTRUxF Q1QgKiBGUk9NIGNoZWNrX2VzdGltYXRlZF9yb3dzKCdzZWxlY3QgKiBmcm9tIGpvaW5fdGVzdF8x IGoxIGpvaW4gam9pbl90ZXN0XzIgajIgb24gKChqMS5hICsgMSA9IGoyLmEgKyAxKSkgd2hlcmUg ajEuYyA8IDUgYW5kIGoyLmMgPiA1Jyk7Ci0tIAoyLjM0LjEKCgAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHYxLTAwMjAtQWRkLWZhc3RwYXRoLXdo ZW4tY29tYmluZS10aGUtMi1NQ1YtbGlrZS1lcWpvaW5zZS5wYXRjaAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAwNjQ0ADAwMDE3NTAAMDAwMTc1MAAwMDAwMDAwMjY3MgAx NDYxMzMyNjU3NQAwMjQ0MjEAIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAdXN0YXIgIAB5aXpoaS5memgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHlpemhpLmZ6aAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARnJvbSBhMjRlOGEzY2ZmMzYzZmVmZmU0 MmEwNWMxMzU5NzA2YmJjNDE1ODVlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiAieWl6 aGkuZnpoIiA8eWl6aGkuZnpoQGFsaWJhYmEtaW5jLmNvbT4KRGF0ZTogVGh1LCAyNSBBcHIgMjAy NCAxMzozNjoyMiArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjEgMjAvMjJdIEFkZCBmYXN0cGF0aCB3 aGVuIGNvbWJpbmUgdGhlIDIgTUNWIGxpa2UKIGVxam9pbnNlbF9pbm5lci4KCndoZW4gTUNWMiBl eGFjdGx5IG1hdGNoZXMgY2xhdXNlcy4KLS0tCiBzcmMvYmFja2VuZC9zdGF0aXN0aWNzL21jdi5j IHwgMTUgKysrKysrKystLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCA3 IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0YXRpc3RpY3MvbWN2LmMg Yi9zcmMvYmFja2VuZC9zdGF0aXN0aWNzL21jdi5jCmluZGV4IDVkMjBlYTJhZTEuLjJlZWJkMzJl MmMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0YXRpc3RpY3MvbWN2LmMKKysrIGIvc3JjL2Jh Y2tlbmQvc3RhdGlzdGljcy9tY3YuYwpAQCAtMjQ4MSwxMyArMjQ4MSw2IEBAIG1jdl9jb21iaW5l X2V4dGVuZGVkKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwxLCBSZWxPcHRJbmZv ICpyZWwyLAogCQkJaWYgKGNtYXRjaGVzMiAmJiAhY21hdGNoZXMyW2pdKQogCQkJCWNvbnRpbnVl OwogCi0JCQkvKgotCQkJICogWFhYIFdlIGNhbid0IHNraXAgYmFzZWQgb24gZXhpc3RpbmcgbWF0 Y2hlczIgdmFsdWUsIGJlY2F1c2UgdGhlcmUKLQkJCSAqIG1heSBiZSBkdXBsaWNhdGVzIGluIHRo ZSBmaXJzdCBNQ1YuCi0JCQkgKgotCQkJICogRnJvbSBBbmR5OiB3aGF0IGRvZXMgdGhpcyBtZWFu PwotCQkJICovCi0KIAkJCS8qCiAJCQkgKiBFdmFsdWF0ZSBpZiBhbGwgdGhlIGpvaW4gY2xhdXNl cyBtYXRjaCBiZXR3ZWVuIHRoZSB0d28gTUNWIGl0ZW1zLgogCQkJICovCkBAIC0yNTM3LDYgKzI1 MzAsMTQgQEAgbWN2X2NvbWJpbmVfZXh0ZW5kZWQoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdElu Zm8gKnJlbDEsIFJlbE9wdEluZm8gKnJlbDIsCiAJCQkJLyogWFhYIERvIHdlIG5lZWQgdG8gZG8g c29tZXRoaW5nIGFib3V0IGJhc2UgZnJlcXVlbmN5PyAqLwogCQkJCW1hdGNoZXMxW2ldID0gbWF0 Y2hlczJbal0gPSB0cnVlOwogCQkJCXMgKz0gbWN2MS0+aXRlbXNbaV0uZnJlcXVlbmN5ICogbWN2 Mi0+aXRlbXNbal0uZnJlcXVlbmN5OworCQkJCW5tYXRjaGVzICs9IDE7CisKKwkJCQlpZiAobWN2 Mi0+bmRpbWVuc2lvbnMgPT0gbGlzdF9sZW5ndGgoY2xhdXNlcykpCisJCQkJCS8qCisJCQkJCSAq IG5vIG1vcmUgaXRlbXMgaW4gbWN2MiBjb3VsZCBtYXRjaCBtY3YxW2ldIGluIHRoaXMgY2FzZSwK KwkJCQkJICogc28gYnJlYWsgZmFzdC4KKwkJCQkJICovCisJCQkJCWJyZWFrOwogCQkJfQogCQl9 CiAJfQotLSAKMi4zNC4xCgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdjEtMDAyMS1XaGVuLW1jdi1uZGltZW5zaW9u cy1saXN0X2xlbmd0aC1jbGF1c2VzLWhhbmRsZS1pLnBhdGNoAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAADAwMDA2NDQAMDAwMTc1MAAwMDAxNzUwADAwMDAwMDA1Mjc0ADE0NjEz MzI2NTc1ADAyNTExMwAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAB1c3RhciAgAHlpemhpLmZ6aAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeWl6aGkuZnpoAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGcm9tIDhlOWU4MGNjN2I2NjdkYWYzOTVlZjg2 ZTQwMmJjZTdiMDYyYTQwODAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCkZyb206ICJ5aXpoaS5m emgiIDx5aXpoaS5memhAYWxpYmFiYS1pbmMuY29tPgpEYXRlOiBTdW4sIDI4IEFwciAyMDI0IDA4 OjUwOjA5ICswODAwClN1YmplY3Q6IFtQQVRDSCB2MSAyMS8yMl0gV2hlbiBtY3YtPm5kaW1lbnNp b25zID09IGxpc3RfbGVuZ3RoKGNsYXVzZXMpLAogaGFuZGxlIGl0IHNhbWUgYXMKCmVxam9pbnNl bF9pbm5lciwgYnV0IG1vcmUgdGVzdGluZyBkb2Vzbid0IHNob3cgbWUgYW55IGJlbmVmaXRzIGZy b20KaXQuIGp1c3QgdGhpcyBjb21taXQgaXMganVzdCBGWUkuCi0tLQogc3JjL2JhY2tlbmQvc3Rh dGlzdGljcy9tY3YuYyB8IDQ1ICsrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLQog MSBmaWxlIGNoYW5nZWQsIDI5IGluc2VydGlvbnMoKyksIDE2IGRlbGV0aW9ucygtKQoKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3N0YXRpc3RpY3MvbWN2LmMgYi9zcmMvYmFja2VuZC9zdGF0aXN0 aWNzL21jdi5jCmluZGV4IDJlZWJkMzJlMmMuLmU2ZWMyMzAwNDUgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3N0YXRpc3RpY3MvbWN2LmMKKysrIGIvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9tY3Yu YwpAQCAtMjI1MCw3ICsyMjUwLDggQEAgbWN2X2NvbWJpbmVfZXh0ZW5kZWQoUGxhbm5lckluZm8g KnJvb3QsIFJlbE9wdEluZm8gKnJlbDEsIFJlbE9wdEluZm8gKnJlbDIsCiAJTUNWTGlzdCAgICAq bWN2MSwKIAkJCSAgICptY3YyOwogCWludAkJCWksCi0JCQkJajsKKwkJaiwKKwkJbm1hdGNoZXMg PSAwOwogCVNlbGVjdGl2aXR5IHMgPSAwOwogCiAJLyogbWF0Y2ggYml0bWFwcyBhbmQgc2VsZWN0 aXZpdHkgZm9yIGJhc2VyZWwgY29uZGl0aW9ucyAoaWYgYW55KSAqLwpAQCAtMjI3Myw3ICsyMjc0 LDcgQEAgbWN2X2NvbWJpbmVfZXh0ZW5kZWQoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8g KnJlbDEsIFJlbE9wdEluZm8gKnJlbDIsCiAJCQluZDEsCiAJCQl0b3RhbHNlbDE7CiAKLQlkb3Vi bGUgCW1hdGNoZnJlcTIsCisJZG91YmxlCW1hdGNoZnJlcTIsCiAJCQl1bm1hdGNoZnJlcTIsCiAJ CQlvdGhlcmZyZXEyLAogCQkJbWN2ZnJlcTIsCkBAIC0yNjI2LDI0ICsyNjI3LDM2IEBAIG1jdl9j b21iaW5lX2V4dGVuZGVkKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwxLCBSZWxP cHRJbmZvICpyZWwyLAogCW5kMiAqPSBjc2VsMjsKIAogCXRvdGFsc2VsMSA9IHM7Ci0JdG90YWxz ZWwxICs9IHVubWF0Y2hmcmVxMSAqIG90aGVyZnJlcTIgLyBuZDI7Ci0JdG90YWxzZWwxICs9IG90 aGVyZnJlcTEgKiAob3RoZXJmcmVxMiArIHVubWF0Y2hmcmVxMikgLyBuZDI7CiAKLS8vCWlmIChu ZDIgPiBtY3ZiLT5uaXRlbXMpCi0vLwkJdG90YWxzZWwxICs9IHVubWF0Y2hmcmVxMSAqIG90aGVy ZnJlcTIgLyAobmQyIC0gbWN2Yi0+bml0ZW1zKTsKLS8vCWlmIChuZDIgPiBubWF0Y2hlcykKLS8v CQl0b3RhbHNlbDEgKz0gb3RoZXJmcmVxMSAqIChvdGhlcmZyZXEyICsgdW5tYXRjaGZyZXEyKSAv Ci0vLwkJCShuZDIgLSBubWF0Y2hlcyk7CisJaWYgKG1jdjItPm5kaW1lbnNpb25zID09IGxpc3Rf bGVuZ3RoKGNsYXVzZXMpKQorCXsKKwkJaWYgKG5kMiA+IG1jdjItPm5pdGVtcykKKwkJCXRvdGFs c2VsMSArPSB1bm1hdGNoZnJlcTEgKiBvdGhlcmZyZXEyIC8gKG5kMiAtIG1jdjItPm5pdGVtcyk7 CisJCWlmIChuZDIgPiBubWF0Y2hlcykKKwkJCXRvdGFsc2VsMSArPSBvdGhlcmZyZXExICogKG90 aGVyZnJlcTIgKyB1bm1hdGNoZnJlcTIpIC8KKwkJCQkobmQyIC0gbm1hdGNoZXMpOworCX0KKwll bHNlCisJeworCQl0b3RhbHNlbDEgKz0gdW5tYXRjaGZyZXExICogb3RoZXJmcmVxMiAvIG5kMjsK KwkJdG90YWxzZWwxICs9IG90aGVyZnJlcTEgKiAob3RoZXJmcmVxMiArIHVubWF0Y2hmcmVxMikg LyBuZDI7CisJfQogCiAJdG90YWxzZWwyID0gczsKLQl0b3RhbHNlbDIgKz0gdW5tYXRjaGZyZXEy ICogb3RoZXJmcmVxMSAvIG5kMTsKLQl0b3RhbHNlbDIgKz0gb3RoZXJmcmVxMiAqIChvdGhlcmZy ZXExICsgdW5tYXRjaGZyZXExKSAvIG5kMTsKIAotLy8JaWYgKG5kMSA+IG1jdmEtPm5pdGVtcykK LS8vCQl0b3RhbHNlbDIgKz0gdW5tYXRjaGZyZXEyICogb3RoZXJmcmVxMSAvIChuZDEgLSBtY3Zh LT5uaXRlbXMpOwotLy8JaWYgKG5kMSA+IG5tYXRjaGVzKQotLy8JCXRvdGFsc2VsMiArPSBvdGhl cmZyZXEyICogKG90aGVyZnJlcTEgKyB1bm1hdGNoZnJlcTEpIC8KLS8vCQkJKG5kMSAtIG5tYXRj aGVzKTsKKwlpZiAobWN2MS0+bmRpbWVuc2lvbnMgPT0gbGlzdF9sZW5ndGgoY2xhdXNlcykpCisJ eworCQlpZiAobmQxID4gbWN2MS0+bml0ZW1zKQorCQkJdG90YWxzZWwyICs9IHVubWF0Y2hmcmVx MiAqIG90aGVyZnJlcTEgLyAobmQxIC0gbWN2MS0+bml0ZW1zKTsKKwkJaWYgKG5kMSA+IG5tYXRj aGVzKQorCQkJdG90YWxzZWwyICs9IG90aGVyZnJlcTIgKiAob3RoZXJmcmVxMSArIHVubWF0Y2hm cmVxMSkgLworCQkJCShuZDEgLSBubWF0Y2hlcyk7CisJfQorCWVsc2UKKwl7CisJCXRvdGFsc2Vs MiArPSB1bm1hdGNoZnJlcTIgKiBvdGhlcmZyZXExIC8gbmQxOworCQl0b3RhbHNlbDIgKz0gb3Ro ZXJmcmVxMiAqIChvdGhlcmZyZXExICsgdW5tYXRjaGZyZXExKSAvIG5kMTsKKwl9CiAKIAlzID0g TWluKHRvdGFsc2VsMSwgdG90YWxzZWwyKTsKIAotLSAKMi4zNC4xCgoAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2MS0wMDIyLUZpeC10eXBvLWVycm9yLXMtZ3JhbnRlZS1n dWFyYW50ZWUucGF0Y2gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAMDAwMDY0NAAwMDAxNzUwADAwMDE3NTAAMDAwMDAwMDI1NTcAMTQ2MTMzMjY1NzUA MDIyMTYxACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFy ICAAeWl6aGkuZnpoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB5aXpoaS5memgAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEZyb20gZmUzYzI0ZjliZjE4MjI5YmZkNzdmZTkxMTBiNmQz YWFhNzQ2ZDI2NCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKRnJvbTogInlpemhpLmZ6aCIgPHlp emhpLmZ6aEBhbGliYWJhLWluYy5jb20+CkRhdGU6IFN1biwgMjggQXByIDIwMjQgMDk6MzU6NTcg KzA4MDAKU3ViamVjdDogW1BBVENIIHYxIDIyLzIyXSBGaXggdHlwbyBlcnJvciwgcy9ncmFudGVl L2d1YXJhbnRlZS8uCgotLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2NsYXVzZXNlbC5j IHwgNiArKystLS0KIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25z KC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY2xhdXNlc2VsLmMg Yi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jbGF1c2VzZWwuYwppbmRleCBjNGY1ZmFlOWQ3 Li5hZjZjOGFiZjg0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jbGF1 c2VzZWwuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jbGF1c2VzZWwuYwpAQCAt MjA3LDExICsyMDcsMTEgQEAgY2xhdXNlbGlzdF9zZWxlY3Rpdml0eV9leHQoUGxhbm5lckluZm8g KnJvb3QsCiAJICogZG8gdG8gZGV0ZWN0IHdoZW4gdGhpcyBtYWtlcyBzZW5zZSwgYnV0IHdlIGNh biBjaGVjayB0aGF0IHRoZXJlIGFyZQogCSAqIGpvaW4gY2xhdXNlcywgYW5kIHRoYXQgYXQgbGVh c3Qgc29tZSBvZiB0aGUgcmVscyBoYXZlIHN0YXRzLgogCSAqCi0JICogcmVsICE9IE5VTEwgY2Fu J3QgZ3JhbnRlZSB0aGUgY2xhdXNlIGlzIG5vdCBhIGpvaW4gY2xhdXNlLCBmb3IgZXhhbXBsZQot CSAqIHQxIGxlZnQgam9pbiB0MiBPTiB0MS5hID0gMywgYnV0IGl0IGNhbiBncmFudGVlIHdlIGNh bid0IHVzZSBleHRlbmRlZAorCSAqIHJlbCAhPSBOVUxMIGNhbid0IGd1YXJhbnRlZSB0aGUgY2xh dXNlIGlzIG5vdCBhIGpvaW4gY2xhdXNlLCBmb3IgZXhhbXBsZQorCSAqIHQxIGxlZnQgam9pbiB0 MiBPTiB0MS5hID0gMywgYnV0IGl0IGNhbiBndWFyYW50ZWUgd2UgY2FuJ3QgdXNlIGV4dGVuZGVk CiAJICogc3RhdGlzdGljcyBmb3IgZXN0aW1hdGlvbiBzaW5jZSBpdCBoYXMgb25seSAxIHJlbGlk LgogCSAqCi0JICogWFhYOiBzbyB3ZSBjYW4gZ3JhbnRlZSBlc3RpbWF0ZWRjbGF1c2VzID09IE5V TEwgbm93LCBzbyBlc3RpbWF0ZWRjbGF1c2VzCisJICogWFhYOiBzbyB3ZSBjYW4gZ3VhcmFudGVl IGVzdGltYXRlZGNsYXVzZXMgPT0gTlVMTCBub3csIHNvIGVzdGltYXRlZGNsYXVzZXMKIAkgKiBp biBzdGF0ZXh0X3RyeV9qb2luX2VzdGltYXRlcyBpcyByZW1vdmVkLgogCSAqLwogCWlmICh1c2Vf ZXh0ZW5kZWRfc3RhdHMgJiYgcmVsID09IE5VTEwgJiYKLS0gCjIuMzQuMQoKAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAA= --=-=-=--