From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 From: Andrew Burgess To: git-commits@fedoraproject.org Subject: [rpms/gdb] fix-dup-patch: Convert RPM suggestion feature into a Python extension Date: Thu, 23 Jul 2026 18:36:02 GMT Message-ID: <178483176285.1.5278766236643808680.rpms-gdb-8d5adc72d172@fedoraproject.org> List-ID: X-Git-Repo: rpms/gdb X-Git-Branch: fix-dup-patch X-Git-Rev: 8d5adc72d172051b5eae90a9ab35956c020bd7a0 ICAgICAgICAgICAgQSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KCiAgICAgICAgICAgIFJl cG8gICA6IHJwbXMvZ2RiCiAgICAgICAgICAgIEJyYW5jaCA6IGZpeC1kdXAtcGF0Y2gKICAgICAg ICAgICAgQ29tbWl0IDogOGQ1YWRjNzJkMTcyMDUxYjVlYWU5MGE5YWIzNTk1NmMwMjBiZDdhMAog ICAgICAgICAgICBBdXRob3IgOiBBbmRyZXcgQnVyZ2VzcyA8YWJ1cmdlc3NAcmVkaGF0LmNvbT4K ICAgICAgICAgICAgRGF0ZSAgIDogMjAyNC0xMi0xMFQxNjo1NToyMCswMDowMAogICAgICAgICAg ICBTdGF0cyAgOiArMTA3MzEvLTE3MDkgaW4gMTMgZmlsZShzKQogICAgICAgICAgICBVUkwgICAg OiBodHRwczovL3NyYy5mZWRvcmFwcm9qZWN0Lm9yZy9ycG1zL2dkYi9jLzhkNWFkYzcyZDE3MjA1 MWI1ZWFlOTBhOWFiMzU5NTZjMDIwYmQ3YTA/YnJhbmNoPWZpeC1kdXAtcGF0Y2gKCiAgICAgICAg ICAgIExvZzoKICAgICAgICAgICAgQ29udmVydCBSUE0gc3VnZ2VzdGlvbiBmZWF0dXJlIGludG8g YSBQeXRob24gZXh0ZW5zaW9uCgpUaGlzIGNvbW1pdCBjb252ZXJ0cyB0aGUgUlBNIHN1Z2dlc3Rp b24gZmVhdHVyZSBpbnRvIGEgUHl0aG9uCmV4dGVuc2lvbi4gIFRoZSBwYXRjaGVzIHdoaWNoIGNo YW5nZWQgR0RCIGl0c2VsZiBhcmUgYWxsIGdvbmUgbm93LgpPbmUgb2YgdGhlIHBhdGNoZXMgYXBw ZWFycyBpbiB0aGUgJ2dpdCBkaWZmJyBhcyBhIHJlbmFtZSwgSSd2ZQpyZXRhaW5lZCBvbmx5IHRo ZSB0ZXN0cyB3aXRoaW4gdGhhdCBwYXRjaC4KClRoZSBvbGQgUlBNIHN1Z2dlc3Rpb24gZmVhdHVy ZSBkaWRuJ3QgaGF2ZSBtYW55IHRlc3RzIHNvIGl0J3MgaGFyZCB0bwprbm93IGZvciBzdXJlIGlm IHRoZSBuZXcgUHl0aG9uIHNjcmlwdCBjb3ZlcnMgYWxsIG9mIHRoZSBzYW1lIGNhc2VzLApidXQg aG9wZWZ1bGx5IEkgZ290IG1vc3Qgb2YgdGhlbSwgYW5kIHdlIGNhbiBhbHdheXMgaW1wcm92ZSB0 aGUgUHl0aG9uCnNjcmlwdCBsYXRlciBpZiBJJ3ZlIG1pc3NlZCBzb21lIGNhc2VzLgoKSSd2ZSBh ZGRlZCBhIGJ1bmNoIG9mIG5ldyBHREIgY29tbWFuZHMgdG8gY29udHJvbCBSUE0gc3VnZ2VzdGlv bnMsCnRoZXNlIGFyZToKCiAgc2V0IHJwbS1zdWdnZXN0aW9uIGVuYWJsZWQgb258b2ZmCiAgICAg IC0gQWxsb3dzIFJQTSBzdWdnZXN0aW9uIHRvIGJlIHR1cm5lZCBvbi9vZmYuCgogIHNob3cgcnBt LXN1Z2dlc3Rpb24gZW5hYmxlZAogICAgICAtIElzIFJQTSBjdXJyZW50bHkgdHVybmVkIG9uIG9y IG9mZj8KCiAgc2V0IHJwbS1zdWdnZXN0aW9uIGJ1aWxkLWlkLW1vZGUgZmFzdHxzbG93CiAgICAg IC0gSG93IHRvIHN1Z2dlc3Rpb24gUlBNcyBiYXNlZCBvbiBhIGJ1aWxkLWlkLiAgRmFzdCBtb2Rl IGdpdmVzIGEKICAgICAgICBjb21tYW5kIGJhc2VkIG9uIHRoZSBidWlsZC1pZCBpdHNlbGYsIHNs b3cgbW9kZSB0cmllcyB0bwogICAgICAgIHJlc29sdmUgdGhlIGJ1aWxkLWlkIHRvIGFuIGFjdHVh bCBwYWNrYWdlLiAgVGhlICdmYXN0JyBtb2RlIGlzCiAgICAgICAgdGhlIGRlZmF1bHQgYXMgdGhp cyBtYXRjaGVzIHRoZSBleGlzdGluZyBiZWhhdmlvdXIuCgogIHNob3cgcnBtLXN1Z2dlc3Rpb24g YnVpbGQtaWQtbW9kZQogICAgICAtIEhvdyBhcmUgd2UgaGFuZGxpbmcgYnVpbGQtaWQgYmFzZWQg UlBNIHN1Z2dlc3Rpb25zPwoKICBpbmZvIHJwbS1zdWdnZXN0aW9ucwogICAgICAtIFNob3cgYWxs IFJQTSBzdWdnZXN0aW9ucyB0aGF0IGhhdmUgYmVlbiBtYWRlIGluIHRoaXMgc2Vzc2lvbi4KICAg ICAgICBVc2VmdWwgaWYgeW91IG1pZ2h0IGhhdmUgbWlzc2VkIG9uZS4KClRoZXNlIGFyZSBhbGwg ZG9jdW1lbnRlZCBpbiB0aGUgR0RCIG1hbnVhbC4KClRoZXJlIGFyZSByYXRoZXIgYSBsb3Qgb2Yg YmFjay1wb3J0cyByZXF1aXJlZCB0byBzdXBwb3J0IHRoaXMgY2hhbmdlLApidXQgdGhlc2Ugc2hv dWxkIGFsbCBkcm9wIG91dCB3aGVuIHdlIHJlYmFzZSB0byBHREIgMTYuICBJJ3ZlIG1hZGUKdGhp cyBjaGFuZ2Ugbm93IHRob3VnaCBzbyB0aGF0IHRoZSBSUE0gc3VnZ2VzdGlvbiBzY3JpcHQgY2Fu IGJlIHJlYWR5LAphbmQgZXZlbiB0ZXN0ZWQgYWhlYWQgb2YgdGhlIEdEQiAxNiByZWxlYXNlIGFu ZCByZWJhc2UuICBXZSBtaWdodCB3YW50CnRvIHBvcnQgdGhlIFJQTSBzdWdnZXN0aW9uIFB5dGhv biBzY3JpcHQgdG8gb3RoZXIgRmVkb3JhIGJyYW5jaGVzIHdoZW4KdGhhdCBoYXBwZW5zIGFzIHRo ZSBvbGQgQysrIGJhc2VkIFJQTSBzdWdnZXN0aW9uIGNoYW5nZXMgYXJlIGdvaW5nIHRvCmNvbmZs aWN0IGhvcnJpYmx5IHdoZW4gd2UgdHJ5IHRvIHJlYmFzZSB0byBHREIgMTYuCgotLS0KZGlmZiAt LWdpdCBhL19nZGIuc3BlYy5QYXRjaC5pbmNsdWRlIGIvX2dkYi5zcGVjLlBhdGNoLmluY2x1ZGUK aW5kZXggMGY2Y2FjMS4uYTg4ZjM2ZCAxMDA2NDQKLS0tIGEvX2dkYi5zcGVjLlBhdGNoLmluY2x1 ZGUKKysrIGIvX2dkYi5zcGVjLlBhdGNoLmluY2x1ZGUKQEAgLTE0LDYzICsxNCw0OCBAQCBQYXRj aDAwMzogZ2RiLTYuNS1iejIxODM3OS1wcGMtc29saWItdHJhbXBvbGluZS10ZXN0LnBhdGNoCiAj PWZlZG9yYXRlc3QKIFBhdGNoMDA0OiBnZGItNi42LWJ6MjM3NTcyLXBwYy1hdG9taWMtc2VxdWVu Y2UtdGVzdC5wYXRjaAogCi0jIE5ldyBsb2NhdGluZyBvZiB0aGUgbWF0Y2hpbmcgYmluYXJpZXMg ZnJvbSB0aGUgcHVyZSBjb3JlIGZpbGUgKGJ1aWxkLWlkKS4KLSM9cHVzaCtqYW4KLVBhdGNoMDA1 OiBnZGItNi42LWJ1aWxkaWQtbG9jYXRlLnBhdGNoCi0KLSMgRml4IGxvYWRpbmcgb2YgY29yZSBm aWxlcyB3aXRob3V0IGJ1aWxkLWlkcyBidXQgd2l0aCBidWlsZC1pZHMgaW4gZXhlY3V0YWJsZXMu Ci0jIExvYWQgc3RyaWN0bHkgYnVpbGQtaWQtY2hlY2tlZCBjb3JlIGZpbGVzIG9ubHkgaWYgbm8g ZXhlY3V0YWJsZSBpcyBzcGVjaWZpZWQKLSMgKEphbiBLcmF0b2NodmlsLCBSSCBCWiAxMzM5ODYy KS4KLSM9cHVzaCtqYW4KLVBhdGNoMDA2OiBnZGItNi42LWJ1aWxkaWQtbG9jYXRlLXNvbGliLW1p c3NpbmctaWRzLnBhdGNoCi0KICMgVGVzdCBnY29yZSBtZW1vcnkgYW5kIHRpbWUgcmVxdWlyZW1l bnRzIGZvciBsYXJnZSBpbmZlcmlvcnMuCiAjPWZlZG9yYXRlc3QKLVBhdGNoMDA3OiBnZGItNi41 LWdjb3JlLWJ1ZmZlci1saW1pdC10ZXN0LnBhdGNoCitQYXRjaDAwNTogZ2RiLTYuNS1nY29yZS1i dWZmZXItbGltaXQtdGVzdC5wYXRjaAogCiAjIFRlc3QgR0NPUkUgZm9yIHNobWlkIDAgc2hhcmVk IG1lbW9yeSBtYXBwaW5ncy4KICM9ZmVkb3JhdGVzdDogQnV0IGl0IGlzIGJyb2tlbiBhbnl3YXks IHNvbWV0aW1lcyB0aGUgY2FzZSBiZWluZyB0ZXN0ZWQgaXMgbm90IHJlcHJvZHVjaWJsZS4KLVBh dGNoMDA4OiBnZGItNi4zLW1hcHBpbmctemVyby1pbm9kZS10ZXN0LnBhdGNoCitQYXRjaDAwNjog Z2RiLTYuMy1tYXBwaW5nLXplcm8taW5vZGUtdGVzdC5wYXRjaAogCiAjIEZpeCByZXNvbHZpbmcg b2YgdmFyaWFibGVzIGF0IGxvY2F0aW9ucyBsaXN0cyBpbiBwcmVsaW5rZWQgbGlicyAoQlogNDY2 OTAxKS4KICM9ZmVkb3JhdGVzdAotUGF0Y2gwMDk6IGdkYi02LjgtYno0NjY5MDEtYmFja3RyYWNl LWZ1bGwtcHJlbGlua2VkLnBhdGNoCitQYXRjaDAwNzogZ2RiLTYuOC1iejQ2NjkwMS1iYWNrdHJh Y2UtZnVsbC1wcmVsaW5rZWQucGF0Y2gKIAogIyBGaXggZm9sbG93LWV4ZWMgZm9yIEMrKyBwcm9n cmFtcyAoYnVncmVwb3J0ZWQgYnkgTWFydGluIFN0cmFuc2t5KS4KICM9ZmVkb3JhdGVzdAotUGF0 Y2gwMTA6IGdkYi1hcmNoZXItbmV4dC1vdmVyLXRocm93LWN4eC1leGVjLnBhdGNoCitQYXRjaDAw ODogZ2RiLWFyY2hlci1uZXh0LW92ZXItdGhyb3ctY3h4LWV4ZWMucGF0Y2gKIAogIyBbZGVsYXll ZC1zeW1maWxlXSBUZXN0IGEgYmFja3RyYWNlIHJlZ3Jlc3Npb24gb24gQ0ZJcyB3aXRob3V0IERJ RSAoQlogNjE0NjA0KS4KICM9ZmVkb3JhdGVzdAotUGF0Y2gwMTE6IGdkYi10ZXN0LWJ0LWNmaS13 aXRob3V0LWRpZS5wYXRjaAorUGF0Y2gwMDk6IGdkYi10ZXN0LWJ0LWNmaS13aXRob3V0LWRpZS5w YXRjaAogCiAjIFRlc3RjYXNlIGZvciBgU2V0dGluZyBzb2xpYi1hYnNvbHV0ZS1wcmVmaXggYnJl YWtzIHZEU08nIChCWiA4MTgzNDMpLgogIz1mZWRvcmF0ZXN0Ci1QYXRjaDAxMjogZ2RiLXJoYnot ODE4MzQzLXNldC1zb2xpYi1hYnNvbHV0ZS1wcmVmaXgtdGVzdGNhc2UucGF0Y2gKLQotIyBGaXgg J2dkYiBnaXZlcyBoaWdobHkgbWlzbGVhZGluZyBlcnJvciB3aGVuIGRlYnVnaW5mbyBwa2cgaXMg cHJlc2VudCwKLSMgYnV0IG5vdCBjb3JyZXNwb25kaW5nIGJpbmFyeSBwa2cnIChSSCBCWiA5ODEx NTQpLgotIz1wdXNoK2phbgotUGF0Y2gwMTM6IGdkYi02LjYtYnVpbGRpZC1sb2NhdGUtbWlzbGVh ZGluZy13YXJuaW5nLW1pc3NpbmctZGVidWdpbmZvLXJoYno5ODExNTQucGF0Y2gKK1BhdGNoMDEw OiBnZGItcmhiei04MTgzNDMtc2V0LXNvbGliLWFic29sdXRlLXByZWZpeC10ZXN0Y2FzZS5wYXRj aAogCiAjIFRlc3RjYXNlIGZvciAnW1NBUF0gUmVjdXJzaXZlIGRsb3BlbiBjYXVzZXMgU0FQIEhB TkEgaW5zdGFsbGVyIHRvCiAjIGNyYXNoLicgKFJIIEJaIDExNTYxOTIpLgogIz1mZWRvcmF0ZXN0 Ci1QYXRjaDAxNDogZ2RiLXJoYnoxMTU2MTkyLXJlY3Vyc2l2ZS1kbG9wZW4tdGVzdC5wYXRjaAor UGF0Y2gwMTE6IGdkYi1yaGJ6MTE1NjE5Mi1yZWN1cnNpdmUtZGxvcGVuLXRlc3QucGF0Y2gKIAog IyBGaXggJ2BjYXRjaCBzeXNjYWxsJyBkb2Vzbid0IHdvcmsgZm9yIHBhcmVudCBhZnRlciBgZm9y aycgaXMgY2FsbGVkJwogIyAoUGhpbGlwcGUgV2Fyb3F1aWVycywgUkggQlogMTE0OTIwNSkuCiAj PWZlZG9yYXRlc3QKLVBhdGNoMDE1OiBnZGItcmhiejExNDkyMDUtY2F0Y2gtc3lzY2FsbC1hZnRl ci1mb3JrLXRlc3QucGF0Y2gKK1BhdGNoMDEyOiBnZGItcmhiejExNDkyMDUtY2F0Y2gtc3lzY2Fs bC1hZnRlci1mb3JrLXRlc3QucGF0Y2gKIAogIyBGaXggJ1twcGM2NF0gYW5kIFtzMzkweF0gd3Jv bmcgcHJvbG9ndWUgc2tpcCBvbiAtTzIgLWcgY29kZScgKEphbgogIyBLcmF0b2NodmlsLCBSSCBC WiAxMDg0NDA0KS4KICM9ZmVkb3JhdGVzdAotUGF0Y2gwMTY6IGdkYi1yaGJ6MTA4NDQwNC1wcGM2 NC1zMzkweC13cm9uZy1wcm9sb2d1ZS1za2lwLU8yLWctM29mMy5wYXRjaAorUGF0Y2gwMTM6IGdk Yi1yaGJ6MTA4NDQwNC1wcGM2NC1zMzkweC13cm9uZy1wcm9sb2d1ZS1za2lwLU8yLWctM29mMy5w YXRjaAogCiAjIFthYXJjaDY0XSBGaXggaGFyZHdhcmUgd2F0Y2hwb2ludHMgKFJIIEJaIDEyNjE1 NjQpLgogIz1mZWRvcmF0ZXN0Ci1QYXRjaDAxNzogZ2RiLXJoYnoxMjYxNTY0LWFhcmNoNjQtaHct d2F0Y2hwb2ludC10ZXN0LnBhdGNoCitQYXRjaDAxNDogZ2RiLXJoYnoxMjYxNTY0LWFhcmNoNjQt aHctd2F0Y2hwb2ludC10ZXN0LnBhdGNoCiAKICMgVXBkYXRlIGdkYi1hZGQtaW5kZXguc2ggc3Vj aCB0aGF0LCB3aGVuIHRoZSBHREIgZW52aXJvbm1lbnQKICMgdmFyaWFibGUgaXMgbm90IHNldCwg dGhlIHNjcmlwdCBpcyBzbWFydGVyIHRoYW4ganVzdCBsb29raW5nIGZvcgpAQCAtODQsMTQgKzY5 LDQ3IEBAIFBhdGNoMDE3OiBnZGItcmhiejEyNjE1NjQtYWFyY2g2NC1ody13YXRjaHBvaW50LXRl c3QucGF0Y2gKICMgICBodHRwczovL2ZlZG9yYXByb2plY3Qub3JnL3dpa2kvQ2hhbmdlcy9NaW5p bWFsX0dEQl9pbl9idWlsZHJvb3QKICMKICM9ZmVkb3JhCi1QYXRjaDAxODogZ2RiLWFkZC1pbmRl eC5wYXRjaAorUGF0Y2gwMTU6IGdkYi1hZGQtaW5kZXgucGF0Y2gKIAotIyBCYWNrcG9ydCB1cHN0 cmVhbSBjb21taXQgN2RiNzk1YmM2N2EuCi1QYXRjaDAxOTogZ2RiLXJlbW92ZS11c2Utb2YtcHkt aXNhc2NpaQorIyBCYWNrcG9ydCBvZiB1cHN0cmVhbSBjb21taXQgMzZmYjIwZmE5MzQ4NGIxMDRk LiAgVGhpcyBpcyBub3QgcmVhbGx5CisjIHJlbGV2YW50IGZvciBvdXIgYnJhbmNoLCBidXQgbGF0 ZXIgY29tbWl0cyB0aGF0IGFyZSBpbXBvcnRhbnQsIGFuZAorIyB3aGljaCB3ZSB3YW50IHRvIGJh Y2twb3J0LCBjb25mbGljdCB1bmxlc3MgdGhlIGNsZWFudXAgaW4gdGhpcworIyBwYXRjaCBpcyBp biBwbGFjZS4KKyMKKyMgVGhpcyBjb21taXQgd2lsbCBiZSBwYXJ0IG9mIEdEQiAxNiwgc28gdGhp cyBiYWNrLXBvcnQgc2hvdWxkIGRyb3AKKyMgb3V0IHdoZW4gd2UgcmViYXNlIG9udG8gR0RCIDE2 LgorIworIyBnZGI6IHJlbW92ZSBRTlggTmV1dHJpbm8gc3VwcG9ydAorIworIyBSZW1vdmUgdGhl IHN1cHBvcnQgZm9yIHRoZSBRTlggTmV1dHJpbm8gT1MgKHRkZXAgYW5kIG5hdGl2ZSBiaXRzKS4g IFRoaXMKKyMgaGFzIGJlZW4gdW5tYWludGFpbmVkIGZvciB5ZWFycywgYW5kIHdlIGRvbid0IGhh dmUgYSB3YXkgdG8gc2VlIGlmIGl0CisjIHdvcmtzIChvciBldmVuIGJ1aWxkcywgZm9yIHRoZSBu YXRpdmUgcGFydHMpLiAgV2l0aG91dCBzb21lYm9keSBhY3RpdmVseQorIyBtYWludGFpbmluZyBp dCwgdGhpcyBpcyBqdXN0IGEgYnVyZGVuIGZvciBkZXZlbG9wZXJzLCBlc3BlY2lhbGx5IHRoYXQK KyMgdGhpcyBwb3J0IGRvZXMgYSBmZXcgd2VpcmQgdW5pcXVlIHRoaW5ncyB0aGF0IHJlcXVpcmUg cmVhc29uaW5nIGFib3V0CisjIHdoZW4gZG9pbmcgYmlnIGNoYW5nZS4KKyMKKyMgU3VwcG9ydCBm b3IgR0RCc2VydmVyIHdhcyByZW1vdmVkIGluIDIwMjAsIGNvbW1pdCA2MTNmMTQ5YTkwZDYKKyMg KCJnZGJzZXJ2ZXI6IHJlbW92ZSBzdXBwb3J0IGZvciBOZXV0cmlubyIpLgorIworIyBDaGFuZ2Ut SWQ6IEk0ZTI1ZWMyNmFiMDY2MzY2MjlhZGViZDAyY2ViMTYxZWUzMWMyMzJkCisjIEFwcHJvdmVk LWJ5OiBLZXZpbiBCdWV0dG5lciA8a2V2aW5iQHJlZGhhdC5jb20+CitQYXRjaDAxNjogZ2RiLXJl bW92ZS1xbngtbmV1dHJpbm8tc3VwcG9ydC5wYXRjaAorCisjIEJhY2twb3J0IHBhdGNoZXMgcmVs YXRlZCB0byBidWlsZC1pZCB1c2FnZSB3aGVuIG9wZW5pbmcgYSBjb3JlCisjIGZpbGUsIGFuZCBh bHNvIGltcHJvdmluZyBnZW5lcmFsIGJ1aWxkLWlkIGJhc2VkIGxvb2t1cC4gIFRoZXNlIHdpbGwK KyMgYWxsIGRyb3Agb3V0IHdoZW4gcmViYXNpbmcgdG8gR0RCIDE2LgorUGF0Y2gwMTc6IGdkYi1i YWNrcG9ydC1idWlsZGlkLXJlbGF0ZWQtY2hhbmdlcy5wYXRjaAogCiAjIE5vdCBhIGJhY2twb3J0 LiAgQWRkIGEgbmV3IHNjcmlwdCB3aGljaCBob29rcyBpbnRvIEdEQiBhbmQgc3VnZ2VzdHMKICMg UlBNcyB0byBpbnN0YWxsIHdoZW4gR0RCIGZpbmRzIGFuIG9iamZpbGUgd2l0aCBubyBkZWJ1ZyBp bmZvLgotUGF0Y2gwMjA6IGdkYi1hZGQtcnBtLXN1Z2dlc3Rpb24tc2NyaXB0LnBhdGNoCitQYXRj aDAxODogZ2RiLWFkZC1ycG0tc3VnZ2VzdGlvbi1zY3JpcHQucGF0Y2gKKworIyBOb3QgYSBiYWNr cG9ydC4gIEFkZCBhIG5ldyBzY3JpcHQgd2hpY2ggZGVmaW5lcyBhIHNldHRpbmcgd2hpY2ggaXMK KyMgZGVwcmVjYXRlZCwgYnV0IHdlIGRvbid0IHdhbnQgdG8gcmVtb3ZlIGl0IGZyb20gRmVkb3Jh IEdEQiBqdXN0IHlldC4KK1BhdGNoMDE5OiBnZGItYWRkLWRlcHJlY2F0ZWQtc2V0dGluZ3MtcHkt c2NyaXB0LnBhdGNoCisKKyMgVGVzdHMgYW5kIHRlc3QgdXBkYXRlcyByZWxhdGVkIHRvIHRoZSBy cG0gc3VnZ2VzdGlvbiBmZWF0dXJlLgorUGF0Y2gwMjA6IGdkYi02LjYtYnVpbGRpZC1sb2NhdGUt dGVzdHMucGF0Y2gKIAogCiBQYXRjaDAyMTogZ2RiLWNhdGNocG9pbnQtcmUtc2V0LnBhdGNoCgpk aWZmIC0tZ2l0IGEvX3BhdGNoX29yZGVyIGIvX3BhdGNoX29yZGVyCmluZGV4IGQyYWZlYWIuLjEy ZTAwMmQgMTAwNjQ0Ci0tLSBhL19wYXRjaF9vcmRlcgorKysgYi9fcGF0Y2hfb3JkZXIKQEAgLTIs MjAgKzIsMjAgQEAgZ2RiLTYuMy1yaC10ZXN0dmVyc2lvbi0yMDA0MTIwMi5wYXRjaAogZ2RiLTYu My1nc3RhY2stMjAwNTA0MTEucGF0Y2gKIGdkYi02LjUtYnoyMTgzNzktcHBjLXNvbGliLXRyYW1w b2xpbmUtdGVzdC5wYXRjaAogZ2RiLTYuNi1iejIzNzU3Mi1wcGMtYXRvbWljLXNlcXVlbmNlLXRl c3QucGF0Y2gKLWdkYi02LjYtYnVpbGRpZC1sb2NhdGUucGF0Y2gKLWdkYi02LjYtYnVpbGRpZC1s b2NhdGUtc29saWItbWlzc2luZy1pZHMucGF0Y2gKIGdkYi02LjUtZ2NvcmUtYnVmZmVyLWxpbWl0 LXRlc3QucGF0Y2gKIGdkYi02LjMtbWFwcGluZy16ZXJvLWlub2RlLXRlc3QucGF0Y2gKIGdkYi02 LjgtYno0NjY5MDEtYmFja3RyYWNlLWZ1bGwtcHJlbGlua2VkLnBhdGNoCiBnZGItYXJjaGVyLW5l eHQtb3Zlci10aHJvdy1jeHgtZXhlYy5wYXRjaAogZ2RiLXRlc3QtYnQtY2ZpLXdpdGhvdXQtZGll LnBhdGNoCiBnZGItcmhiei04MTgzNDMtc2V0LXNvbGliLWFic29sdXRlLXByZWZpeC10ZXN0Y2Fz ZS5wYXRjaAotZ2RiLTYuNi1idWlsZGlkLWxvY2F0ZS1taXNsZWFkaW5nLXdhcm5pbmctbWlzc2lu Zy1kZWJ1Z2luZm8tcmhiejk4MTE1NC5wYXRjaAogZ2RiLXJoYnoxMTU2MTkyLXJlY3Vyc2l2ZS1k bG9wZW4tdGVzdC5wYXRjaAogZ2RiLXJoYnoxMTQ5MjA1LWNhdGNoLXN5c2NhbGwtYWZ0ZXItZm9y ay10ZXN0LnBhdGNoCiBnZGItcmhiejEwODQ0MDQtcHBjNjQtczM5MHgtd3JvbmctcHJvbG9ndWUt c2tpcC1PMi1nLTNvZjMucGF0Y2gKIGdkYi1yaGJ6MTI2MTU2NC1hYXJjaDY0LWh3LXdhdGNocG9p bnQtdGVzdC5wYXRjaAogZ2RiLWFkZC1pbmRleC5wYXRjaAotZ2RiLXJlbW92ZS11c2Utb2YtcHkt aXNhc2NpaQorZ2RiLXJlbW92ZS1xbngtbmV1dHJpbm8tc3VwcG9ydC5wYXRjaAorZ2RiLWJhY2tw b3J0LWJ1aWxkaWQtcmVsYXRlZC1jaGFuZ2VzLnBhdGNoCiBnZGItYWRkLXJwbS1zdWdnZXN0aW9u LXNjcmlwdC5wYXRjaAorZ2RiLWFkZC1kZXByZWNhdGVkLXNldHRpbmdzLXB5LXNjcmlwdC5wYXRj aAorZ2RiLTYuNi1idWlsZGlkLWxvY2F0ZS10ZXN0cy5wYXRjaAogZ2RiLWNhdGNocG9pbnQtcmUt c2V0LnBhdGNoCgpkaWZmIC0tZ2l0IGEvZ2RiLTYuNi1idWlsZGlkLWxvY2F0ZS1taXNsZWFkaW5n LXdhcm5pbmctbWlzc2luZy1kZWJ1Z2luZm8tcmhiejk4MTE1NC5wYXRjaCBiL2dkYi02LjYtYnVp bGRpZC1sb2NhdGUtbWlzbGVhZGluZy13YXJuaW5nLW1pc3NpbmctZGVidWdpbmZvLXJoYno5ODEx NTQucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4NWNiNmEuLjAwMDAwMDAK LS0tIGEvZ2RiLTYuNi1idWlsZGlkLWxvY2F0ZS1taXNsZWFkaW5nLXdhcm5pbmctbWlzc2luZy1k ZWJ1Z2luZm8tcmhiejk4MTE1NC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDEyOSArMCwwIEBA Ci1Gcm9tIEZFRE9SQV9QQVRDSEVTIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogRmVk b3JhIEdEQiBwYXRjaGVzIDxpbnZhbGlkQGVtYWlsLmNvbT4KLURhdGU6IEZyaSwgMjcgT2N0IDIw MTcgMjE6MDc6NTAgKzAyMDAKLVN1YmplY3Q6IAotIGdkYi02LjYtYnVpbGRpZC1sb2NhdGUtbWlz bGVhZGluZy13YXJuaW5nLW1pc3NpbmctZGVidWdpbmZvLXJoYno5ODExNTQucGF0Y2gKLQotOzsg Rml4ICdnZGIgZ2l2ZXMgaGlnaGx5IG1pc2xlYWRpbmcgZXJyb3Igd2hlbiBkZWJ1Z2luZm8gcGtn IGlzIHByZXNlbnQsCi07OyBidXQgbm90IGNvcnJlc3BvbmRpbmcgYmluYXJ5IHBrZycgKFJIIEJa IDk4MTE1NCkuCi07Oz1wdXNoK2phbgotCi1Db21tZW50cyBieSBTZXJnaW8gRHVyaWdhbiBKdW5p b3IgPHNlcmdpb2RqQHJlZGhhdC5jb20+OgotCi0gIFRoaXMgaXMgdGhlIGZpeCBmb3IgUkggQlog Izk4MTE1NAotCi0gIEl0IGlzIG1haW5seSBhIHRlc3RjYXNlIGFkZGl0aW9uLCBidXQgYSBtaW5v ciBmaXggaW4gdGhlIGdkYi9idWlsZC1pZC5jCi0gIGZpbGUgd2FzIGFsc28gbmVlZGVkLgotCi0g IGdkYi9idWlsZC1pZC5jIHdhcyBhZGRlZCBieToKLQotICBjb21taXQgZGMyOTRiZTU0Yzk2NDE0 MDM1ZWVkN2Q1M2RhZmRlYTBhNmYzMWE3MgotICBBdXRob3I6IFRvbSBUcm9tZXkgPHRyb21leUBy ZWRoYXQuY29tPgotICBEYXRlOiAgIFR1ZSBPY3QgOCAxOTo1NjoxNSAyMDEzICswMDAwCi0KLSAg YW5kIGhhZCBhIGxpdHRsZSB0aGlua28gdGhlcmUuICBUaGUgdmFyaWFibGUgJ2ZpbGVuYW1lJyBu ZWVkcyB0byBiZSBzZXQgdG8KLSAgTlVMTCBhZnRlciBpdCBpcyBmcmVlJ2QsIG90aGVyd2lzZSB0 aGUgY29kZSBiZWxvdyB0aGlua3MgdGhhdCBpdCBpcyBzdGlsbAotICB2YWxpZCBhbmQgZG9lc24n dCBwcmludCB0aGUgbmVjZXNzYXJ5IHdhcm5pbmcgKCJUcnk6IHl1bSBpbnN0YWxsIC4uLiIpLgot Ci1kaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9yaGJ6OTgxMTU0LW1pc2xlYWRp bmcteXVtLWluc3RhbGwtd2FybmluZy5leHAgYi9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL3JoYno5 ODExNTQtbWlzbGVhZGluZy15dW0taW5zdGFsbC13YXJuaW5nLmV4cAotbmV3IGZpbGUgbW9kZSAx MDA2NDQKLS0tLSAvZGV2L251bGwKLSsrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2Uvcmhiejk4 MTE1NC1taXNsZWFkaW5nLXl1bS1pbnN0YWxsLXdhcm5pbmcuZXhwCi1AQCAtMCwwICsxLDk3IEBA Ci0rIyAgIENvcHlyaWdodCAoQykgMjAxNCAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu Ci0rCi0rIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIG1vZGlmeQotKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSsjIHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCi0rIyAoYXQg eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotKyMKLSsjIFRoaXMgcHJvZ3JhbSBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotKyMgYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK LSsjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUKLSsjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu Ci0rIwotKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UKLSsjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBz ZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgotKwotK3N0YW5kYXJkX3Rlc3RmaWxl ICJub3JtYWwuYyIKLSsKLStpZiB7IFtwcmVwYXJlX2Zvcl90ZXN0aW5nICR7dGVzdGZpbGV9LmV4 cCAke3Rlc3RmaWxlfSAke3NyY2ZpbGV9XSB9IHsKLSsgICAgcmV0dXJuIC0xCi0rfQotKwotKyMg R2V0IHRoZSBidWlsZC1pZCBvZiB0aGUgZmlsZQotK3NldCBidWlsZF9pZF9kZWJ1Z19maWxlIFti dWlsZF9pZF9kZWJ1Z19maWxlbmFtZV9nZXQgJGJpbmZpbGVdCi0rcmVnc3ViIC1hbGwgIi5kZWJ1 ZyQiICRidWlsZF9pZF9kZWJ1Z19maWxlICIiIGJ1aWxkX2lkX3dpdGhvdXRfZGVidWcKLSsKLSsj IFJ1biB0byBtYWluCi0raWYgeyAhW3J1bnRvX21haW5dIH0gewotKyAgICByZXR1cm4gLTEKLSt9 Ci0rCi0rIyBXZSBmaXJzdCBuZWVkIHRvIGdlbmVyYXRlIGEgY29yZWZpbGUKLStzZXQgZXNjYXBl ZGZpbGVuYW1lIFtzdHJpbmdfdG9fcmVnZXhwIFtzdGFuZGFyZF9vdXRwdXRfZmlsZSBnY29yZS50 ZXN0XV0KLStzZXQgY29yZV9zdXBwb3J0ZWQgMAotK2dkYl90ZXN0X211bHRpcGxlICJnY29yZSBb c3RhbmRhcmRfb3V0cHV0X2ZpbGUgZ2NvcmUudGVzdF0iIFwKLSsJInNhdmUgYSBjb3JlZmlsZSIg XAotK3sKLSsgIC1yZSAiU2F2ZWQgY29yZWZpbGUgJHtlc2NhcGVkZmlsZW5hbWV9XFtcclxuXF0r JGdkYl9wcm9tcHQgJCIgewotKyAgICBwYXNzICJzYXZlIGEgY29yZWZpbGUiCi0rICAgIGdsb2Jh bCBjb3JlX3N1cHBvcnRlZAotKyAgICBzZXQgY29yZV9zdXBwb3J0ZWQgMQotKyAgfQotKyAgLXJl ICJDYW4ndCBjcmVhdGUgYSBjb3JlZmlsZVxbXHJcblxdKyRnZGJfcHJvbXB0ICQiIHsKLSsgICAg dW5zdXBwb3J0ZWQgInNhdmUgYSBjb3JlZmlsZSIKLSsgICAgZ2xvYmFsIGNvcmVfc3VwcG9ydGVk Ci0rICAgIHNldCBjb3JlX3N1cHBvcnRlZCAwCi0rICB9Ci0rfQotKwotK2lmIHshJGNvcmVfc3Vw cG9ydGVkfSB7Ci0rICByZXR1cm4gLTEKLSt9Ci0rCi0rIyBNb3ZlIHRoZSBiaW5maWxlIHRvIGEg dGVtcG9yYXJ5IG5hbWUKLStyZW1vdGVfZXhlYyBidWlsZCAibXYgJGJpbmZpbGUgJHtiaW5maWxl fS5vbGQiCi0rCi0rIyBSZWluaXRpYWxpemUgR0RCIGFuZCBzZWUgaWYgd2UgZ2V0IGEgeXVtL2Ru ZiB3YXJuaW5nCi0rZ2RiX2V4aXQKLStnZGJfc3RhcnQKLStnZGJfcmVpbml0aWFsaXplX2RpciAk c3JjZGlyLyRzdWJkaXIKLSsKLSt3aXRoX3Rlc3RfcHJlZml4ICJmaXJzdCBydW46IiB7Ci0rICAg IGdkYl90ZXN0ICJzZXQgYnVpbGQtaWQtdmVyYm9zZSAxIiAiIiBcCi0rCSJzZXQgYnVpbGQtaWQt dmVyYm9zZSIKLSsKLSsgICAgZ2RiX3Rlc3QgInNldCBkZWJ1Zy1maWxlLWRpcmVjdG9yeSBbZmls ZSBkaXJuYW1lIFtzdGFuZGFyZF9vdXRwdXRfZmlsZSBnY29yZS50ZXN0XV0iICIiIFwKLSsJInNl dCBkZWJ1Zy1maWxlLWRpcmVjdG9yeSIKLSsKLSsgICAgZ2RiX3Rlc3QgImNvcmUtZmlsZSBbc3Rh bmRhcmRfb3V0cHV0X2ZpbGUgZ2NvcmUudGVzdF0iIFwKLSsJIk1pc3Npbmcgc2VwYXJhdGUgZGVi dWdpbmZvIGZvciB0aGUgbWFpbiBleGVjdXRhYmxlIGZpbGVcclxuVHJ5OiAoeXVtfGRuZikgLS1l bmFibGVyZXBvPSdcXCpkZWJ1Z1xcKicgaW5zdGFsbCBbc3RhbmRhcmRfb3V0cHV0X2ZpbGUgJGJ1 aWxkX2lkX3dpdGhvdXRfZGVidWddXHJcbi4qIiBcCi0rCSJ0ZXN0IGZpcnN0IHl1bS9kbmYgd2Fy bmluZyIKLSt9Ci0rCi0rIyBOb3cgd2UgZGVmaW5lIGFuZCBjcmVhdGUgb3VyIC5idWlsZC1pZAot K2ZpbGUgbWtkaXIgW2ZpbGUgZGlybmFtZSBbc3RhbmRhcmRfb3V0cHV0X2ZpbGUgJHtidWlsZF9p ZF93aXRob3V0X2RlYnVnfV1dCi0rIyBDYW5ub3QgdXNlICJmaWxlIGxpbmsiIChmcm9tIFRDTCkg YmVjYXVzZSBpdCByZXF1aXJlcyB0aGUgdGFyZ2V0IGZpbGUgdG8KLSsjIGV4aXN0LgotK3JlbW90 ZV9leGVjIGJ1aWxkICJsbiAtcyAkYmluZmlsZSBbc3RhbmRhcmRfb3V0cHV0X2ZpbGUgJHtidWls ZF9pZF93aXRob3V0X2RlYnVnfV0iCi0rCi0rIyBSZWluaXRpYWxpemUgR0RCIHRvIGdldCB0aGUg c2Vjb25kIHl1bS9kbmYgd2FybmluZwotK2dkYl9leGl0Ci0rZ2RiX3N0YXJ0Ci0rZ2RiX3JlaW5p dGlhbGl6ZV9kaXIgJHNyY2Rpci8kc3ViZGlyCi0rCi0rd2l0aF90ZXN0X3ByZWZpeCAic2Vjb25k IHJ1bjoiIHsKLSsgICAgZ2RiX3Rlc3QgInNldCBidWlsZC1pZC12ZXJib3NlIDEiICIiIFwKLSsJ InNldCBidWlsZC1pZC12ZXJib3NlIgotKwotKyAgICBnZGJfdGVzdCAic2V0IGRlYnVnLWZpbGUt ZGlyZWN0b3J5IFtmaWxlIGRpcm5hbWUgW3N0YW5kYXJkX291dHB1dF9maWxlIGdjb3JlLnRlc3Rd XSIgIiIgXAotKwkic2V0IGRlYnVnLWZpbGUtZGlyZWN0b3J5IgotKwotKyAgICBnZGJfdGVzdCAi Y29yZS1maWxlIFtzdGFuZGFyZF9vdXRwdXRfZmlsZSBnY29yZS50ZXN0XSIgXAotKwkiTWlzc2lu ZyBzZXBhcmF0ZSBkZWJ1Z2luZm8gZm9yIHRoZSBtYWluIGV4ZWN1dGFibGUgZmlsZVxyXG5Ucnk6 ICh5dW18ZG5mKSAtLWVuYWJsZXJlcG89J1xcKmRlYnVnXFwqJyBpbnN0YWxsICRiaW5maWxlXHJc bi4qIiBcCi0rCSJ0ZXN0IHNlY29uZCB5dW0vZG5mIHdhcm5pbmciCi0rfQotKwotKyMgTGVhdmlu ZyB0aGUgbGluayB0aGVyZSB3aWxsIGNhdXNlIGJyZWFrYWdlIGluIHRoZSBuZXh0IHJ1bi4KLSty ZW1vdGVfZXhlYyBidWlsZCAicm0gLWYgW3N0YW5kYXJkX291dHB1dF9maWxlICR7YnVpbGRfaWRf d2l0aG91dF9kZWJ1Z31dIgoKZGlmZiAtLWdpdCBhL2dkYi02LjYtYnVpbGRpZC1sb2NhdGUtc29s aWItbWlzc2luZy1pZHMucGF0Y2ggYi9nZGItNi42LWJ1aWxkaWQtbG9jYXRlLXNvbGliLW1pc3Np bmctaWRzLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTdmNjkxLi4wMDAw MDAwCi0tLSBhL2dkYi02LjYtYnVpbGRpZC1sb2NhdGUtc29saWItbWlzc2luZy1pZHMucGF0Y2gK KysrIC9kZXYvbnVsbApAQCAtMSwyNjIgKzAsMCBAQAotRnJvbSBGRURPUkFfUEFUQ0hFUyBNb24g U2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEZlZG9yYSBHREIgcGF0Y2hlcyA8aW52YWxpZEBl bWFpbC5jb20+Ci1EYXRlOiBGcmksIDI3IE9jdCAyMDE3IDIxOjA3OjUwICswMjAwCi1TdWJqZWN0 OiBnZGItNi42LWJ1aWxkaWQtbG9jYXRlLXNvbGliLW1pc3NpbmctaWRzLnBhdGNoCi0KLTs7IEZp eCBsb2FkaW5nIG9mIGNvcmUgZmlsZXMgd2l0aG91dCBidWlsZC1pZHMgYnV0IHdpdGggYnVpbGQt aWRzIGluIGV4ZWN1dGFibGVzLgotOzsgTG9hZCBzdHJpY3RseSBidWlsZC1pZC1jaGVja2VkIGNv cmUgZmlsZXMgb25seSBpZiBubyBleGVjdXRhYmxlIGlzIHNwZWNpZmllZAotOzsgKEphbiBLcmF0 b2NodmlsLCBSSCBCWiAxMzM5ODYyKS4KLTs7PXB1c2gramFuCi0KLWdkYiByZXR1cm5zIGFuIGlu Y29ycmVjdCBiYWNrIHRyYWNlIHdoZW4gYXBwbHlpbmcgYSBkZWJ1Z2luZm8KLWh0dHBzOi8vYnVn emlsbGEucmVkaGF0LmNvbS9zaG93X2J1Zy5jZ2k/aWQ9MTMzOTg2MgotCi1kaWZmIC0tZ2l0IGEv Z2RiL3NvbGliLXN2cjQuYyBiL2dkYi9zb2xpYi1zdnI0LmMKLS0tLSBhL2dkYi9zb2xpYi1zdnI0 LmMKLSsrKyBiL2dkYi9zb2xpYi1zdnI0LmMKLUBAIC0zNDcsMTEgKzM0NywxMyBAQCBsbV9hZGRy X2NoZWNrIChjb25zdCBzb2xpYiAmc28sIGJmZCAqYWJmZCkKLSAKLSBzdHJ1Y3Qgc3ZyNF9zbwot IHsKLS0gIHN2cjRfc28gKGNvbnN0IGNoYXIgKm5hbWUsIGxtX2luZm9fc3ZyNF91cCBsbV9pbmZv KQotLSAgICA6IG5hbWUgKG5hbWUpLCBsbV9pbmZvIChzdGQ6Om1vdmUgKGxtX2luZm8pKQotKyAg c3ZyNF9zbyAoY29uc3QgY2hhciAqbmFtZSwgbG1faW5mb19zdnI0X3VwIGxtX2luZm8sIGNvbnN0 IGNoYXIgKm9yaWdfbmFtZSA9IG51bGxwdHIpCi0rICAgIDogbmFtZSAobmFtZSksIG9yaWdpbmFs X25hbWUgKG9yaWdfbmFtZSA9PSBudWxscHRyID8gbmFtZSA6IG9yaWdfbmFtZSksCi0rICAgIGxt X2luZm8gKHN0ZDo6bW92ZSAobG1faW5mbykpCi0gICB7fQotIAotICAgc3RkOjpzdHJpbmcgbmFt ZTsKLSsgIHN0ZDo6c3RyaW5nIG9yaWdpbmFsX25hbWU7Ci0gICBsbV9pbmZvX3N2cjRfdXAgbG1f aW5mbzsKLSB9OwotIAotQEAgLTEwMDIsNiArMTAwNCw3IEBAIHNvX2xpc3RfZnJvbV9zdnI0X3Nv cyAoY29uc3Qgc3RkOjp2ZWN0b3I8c3ZyNF9zbz4gJnNvcykKLSAKLSAgICAgICBuZXdvYmotPnNv X25hbWUgPSBzby5uYW1lOwotICAgICAgIG5ld29iai0+c29fb3JpZ2luYWxfbmFtZSA9IHNvLm5h bWU7Ci0rICAgICAgbmV3b2JqLT5zb19vcmlnaW5hbF9uYW1lID0gc28ub3JpZ2luYWxfbmFtZTsK LSAgICAgICBuZXdvYmotPmxtX2luZm8gPSBzdGQ6Om1ha2VfdW5pcXVlPGxtX2luZm9fc3ZyND4g KCpzby5sbV9pbmZvKTsKLSAKLSAgICAgICBkc3QucHVzaF9iYWNrICgqbmV3b2JqKTsKLUBAIC0x MjYzLDExICsxMjY2LDI4IEBAIHN2cjRfcmVhZF9zb19saXN0IChzdnI0X2luZm8gKmluZm8sIENP UkVfQUREUiBsbSwgQ09SRV9BRERSIHByZXZfbG0sCi0gCSAgY29udGludWU7Ci0gCX0KLSAKLSsg ICAgICAvKiBQcmVzZXJ2ZSBvcmlnaW5hbCBuYW1lIHNpbmNlIG5hbWUgbWF5IGJlIGNoYW5nZWQg YmVsb3cuICAqLwotKyAgICAgIGdkYjo6dW5pcXVlX3htYWxsb2NfcHRyPGNoYXI+IG9yaWdpbmFs X25hbWUgPSBtYWtlX3VuaXF1ZV94c3RyZHVwIChuYW1lLmdldCAoKSk7Ci0gCXsKLS0JICBzdHJ1 Y3QgYmZkX2J1aWxkX2lkICpidWlsZF9pZDsKLSsJICBzdHJ1Y3QgYmZkX2J1aWxkX2lkICpidWls ZF9pZCA9IG51bGxwdHI7Ci0gCi0tCSAgYnVpbGRfaWQgPSBidWlsZF9pZF9hZGRyX2dldCAobGkt PmxfbGQpOwotLQkgIGlmIChidWlsZF9pZCAhPSBOVUxMKQotKwkgIC8qIEluIHRoZSBjYXNlIHRo ZSBtYWluIGV4ZWN1dGFibGUgd2FzIGZvdW5kIGFjY29yZGluZyB0byBpdHMgYnVpbGQtaWQKLSsJ ICAgICAoZnJvbSBhIGNvcmUgZmlsZSkgcHJldmVudCBsb2FkaW5nIGEgZGlmZmVyZW50IGJ1aWxk IG9mIGEgbGlicmFyeQotKwkgICAgIHdpdGggYWNjaWRlbnRhbGx5IHRoZSBzYW1lIFNPX05BTUUu Ci0rCi0rCSAgICAgSXQgc3VwcHJlc3NlcyBib2d1cyBiYWNrdHJhY2VzIChhbmQgcHJpbnRzICI/ PyIgdGhlcmUgaW5zdGVhZCkgaWYKLSsJICAgICB0aGUgb24tZGlzayBmaWxlcyBubyBsb25nZXIg bWF0Y2ggdGhlIHJ1bm5pbmcgcHJvZ3JhbSB2ZXJzaW9uLgotKwkgICAgIElmIHRoZSBtYWluIGV4 ZWN1dGFibGUgd2FzIG5vdCBsb2FkZWQgYWNjb3JkaW5nIHRvIGl0cyBidWlsZC1pZCBkbwotKwkg ICAgIG5vdCBkbyBhbnkgYnVpbGQtaWQgY2hlY2tpbmcgb2YgdGhlIGxpYnJhcmllcy4gIFRoZXJl IG1heSBiZSBtaXNzaW5nCi0rCSAgICAgYnVpbGQtaWRzIGR1bXBlZCBpbiB0aGUgY29yZSBmaWxl IGFuZCB3ZSB3b3VsZCBtYXAgYWxsIHRoZSBsaWJyYXJpZXMKLSsJICAgICB0byB0aGUgb25seSBl eGlzdGluZyBmaWxlIGxvYWRlZCB0aGF0IHRpbWUgLSB0aGUgZXhlY3V0YWJsZS4gICovCi0rCSAg aWYgKGN1cnJlbnRfcHJvZ3JhbV9zcGFjZS0+c3ltZmlsZV9vYmplY3RfZmlsZSAhPSBOVUxMCi0r CSAgICAgICYmIChjdXJyZW50X3Byb2dyYW1fc3BhY2UtPnN5bWZpbGVfb2JqZWN0X2ZpbGUtPmZs YWdzCi0rCQkgICYgT0JKRl9CVUlMRF9JRF9DT1JFX0xPQURFRCkgIT0gMCkKLSsJICAgIGJ1aWxk X2lkID0gYnVpbGRfaWRfYWRkcl9nZXQgKGxpLT5sX2xkKTsKLSsKLSsKLSsJICBpZiAoYnVpbGRf aWQgIT0gbnVsbHB0cikKLSAJICAgIHsKLSAJICAgICAgY2hhciAqYmlkX25hbWUsICpidWlsZF9p ZF9maWxlbmFtZTsKLSAKLUBAIC0xMjgwLDIzICsxMzAwLDcgQEAgc3ZyNF9yZWFkX3NvX2xpc3Qg KHN2cjRfaW5mbyAqaW5mbywgQ09SRV9BRERSIGxtLCBDT1JFX0FERFIgcHJldl9sbSwKLSAJCSAg eGZyZWUgKGJpZF9uYW1lKTsKLSAJCX0KLSAJICAgICAgZWxzZQotLQkJewotLQkJICBkZWJ1Z19w cmludF9taXNzaW5nIChuYW1lLmdldCAoKSwgYnVpbGRfaWRfZmlsZW5hbWUpOwotLQotLQkJICAv KiBJbiB0aGUgY2FzZSB0aGUgbWFpbiBleGVjdXRhYmxlIHdhcyBmb3VuZCBhY2NvcmRpbmcgdG8K LS0JCSAgICAgaXRzIGJ1aWxkLWlkIChmcm9tIGEgY29yZSBmaWxlKSBwcmV2ZW50IGxvYWRpbmcK LS0JCSAgICAgYSBkaWZmZXJlbnQgYnVpbGQgb2YgYSBsaWJyYXJ5IHdpdGggYWNjaWRlbnRhbGx5 IHRoZQotLQkJICAgICBzYW1lIFNPX05BTUUuCi0tCi0tCQkgICAgIEl0IHN1cHByZXNzZXMgYm9n dXMgYmFja3RyYWNlcyAoYW5kIHByaW50cyAiPz8iIHRoZXJlCi0tCQkgICAgIGluc3RlYWQpIGlm IHRoZSBvbi1kaXNrIGZpbGVzIG5vIGxvbmdlciBtYXRjaCB0aGUKLS0JCSAgICAgcnVubmluZyBw cm9ncmFtIHZlcnNpb24uICAqLwotLQotLQkJICBpZiAoY3VycmVudF9wcm9ncmFtX3NwYWNlLT5z eW1maWxlX29iamVjdF9maWxlICE9IE5VTEwKLS0JCSAgICAgICYmIChjdXJyZW50X3Byb2dyYW1f c3BhY2UtPnN5bWZpbGVfb2JqZWN0X2ZpbGUtPmZsYWdzCi0tCQkJICAmIE9CSkZfQlVJTERfSURf Q09SRV9MT0FERUQpICE9IDApCi0tCQkgICAgbmFtZSA9IG1ha2VfdW5pcXVlX3hzdHJkdXAgKCIi KTsKLS0JCX0KLSsJCWRlYnVnX3ByaW50X21pc3NpbmcgKG5hbWUuZ2V0ICgpLCBidWlsZF9pZF9m aWxlbmFtZSk7Ci0gCi0gCSAgICAgIHhmcmVlIChidWlsZF9pZF9maWxlbmFtZSk7Ci0gCSAgICAg IHhmcmVlIChidWlsZF9pZCk7Ci1kaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9n Y29yZS1idWlsZGlkLWV4ZWMtYnV0LW5vdC1zb2xpYi1saWIuYyBiL2dkYi90ZXN0c3VpdGUvZ2Ri LmJhc2UvZ2NvcmUtYnVpbGRpZC1leGVjLWJ1dC1ub3Qtc29saWItbGliLmMKLW5ldyBmaWxlIG1v ZGUgMTAwNjQ0Ci0tLS0gL2Rldi9udWxsCi0rKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2dj b3JlLWJ1aWxkaWQtZXhlYy1idXQtbm90LXNvbGliLWxpYi5jCi1AQCAtMCwwICsxLDIxIEBACi0r LyogQ29weXJpZ2h0IDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0rCi0rICAg VGhpcyBmaWxlIGlzIHBhcnQgb2YgR0RCLgotKwotKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0rICAgaXQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNo ZWQgYnkKLSsgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAz IG9mIHRoZSBMaWNlbnNlLCBvcgotKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp b24uCi0rCi0rICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsCi0rICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSsgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0rICAgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSsKLSsgICBZb3Ugc2hvdWxkIGhhdmUg cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotKyAgIGFs b25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9s aWNlbnNlcy8+LiAgKi8KLSsKLSt2b2lkCi0rbGliICh2b2lkKQotK3sKLSt9Ci1kaWZmIC0tZ2l0 IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9nY29yZS1idWlsZGlkLWV4ZWMtYnV0LW5vdC1zb2xp Yi1tYWluLmMgYi9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2djb3JlLWJ1aWxkaWQtZXhlYy1idXQt bm90LXNvbGliLW1haW4uYwotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tLSAvZGV2L251bGwKLSsr KyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvZ2NvcmUtYnVpbGRpZC1leGVjLWJ1dC1ub3Qtc29s aWItbWFpbi5jCi1AQCAtMCwwICsxLDI1IEBACi0rLyogQ29weXJpZ2h0IDIwMTAgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0rCi0rICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0RCLgot KwotKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0rICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSsgICB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgotKyAgIChh dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0rCi0rICAgVGhpcyBwcm9ncmFtIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0rICAgYnV0 IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YKLSsgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlCi0rICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KLSsKLSsgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZQotKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYg bm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KLSsKLStleHRlcm4g dm9pZCBsaWIgKHZvaWQpOwotKwotK2ludAotK21haW4gKHZvaWQpCi0rewotKyAgbGliICgpOwot KyAgcmV0dXJuIDA7Ci0rfQotZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvZ2Nv cmUtYnVpbGRpZC1leGVjLWJ1dC1ub3Qtc29saWIuZXhwIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFz ZS9nY29yZS1idWlsZGlkLWV4ZWMtYnV0LW5vdC1zb2xpYi5leHAKLW5ldyBmaWxlIG1vZGUgMTAw NjQ0Ci0tLS0gL2Rldi9udWxsCi0rKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2djb3JlLWJ1 aWxkaWQtZXhlYy1idXQtbm90LXNvbGliLmV4cAotQEAgLTAsMCArMSwxMDQgQEAKLSsjIENvcHly aWdodCAyMDE2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotKwotKyMgVGhpcyBwcm9n cmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp ZnkKLSsjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgYXMgcHVibGlzaGVkIGJ5Ci0rIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo ZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgotKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkg bGF0ZXIgdmVyc2lvbi4KLSsjCi0rIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhl IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSsjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0rIyBNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0rIyBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotKyMKLSsjIFlvdSBzaG91 bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl Ci0rIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3Lmdu dS5vcmcvbGljZW5zZXMvPi4KLSsKLStyZXF1aXJlIGFsbG93X3NobGliX3Rlc3RzCi0rCi0rc2V0 IHRlc3RmaWxlICJnY29yZS1idWlsZGlkLWV4ZWMtYnV0LW5vdC1zb2xpYiIKLStzZXQgc3JjbWFp bmZpbGUgJHt0ZXN0ZmlsZX0tbWFpbi5jCi0rc2V0IHNyY2xpYmZpbGUgJHt0ZXN0ZmlsZX0tbGli LmMKLStzZXQgbGliZmlsZSBbc3RhbmRhcmRfb3V0cHV0X2ZpbGUgJHt0ZXN0ZmlsZX0tbGliLnNv XQotK3NldCBvYmpmaWxlIFtzdGFuZGFyZF9vdXRwdXRfZmlsZSAke3Rlc3RmaWxlfS1tYWluLm9d Ci0rc2V0IGV4ZWN1dGFibGUgJHt0ZXN0ZmlsZX0tbWFpbgotK3NldCBiaW5maWxlIFtzdGFuZGFy ZF9vdXRwdXRfZmlsZSAke2V4ZWN1dGFibGV9XQotK3NldCBnY29yZWZpbGUgW3N0YW5kYXJkX291 dHB1dF9maWxlICR7ZXhlY3V0YWJsZX0uZ2NvcmVdCi0rc2V0IG91dGRpciBbZmlsZSBkaXJuYW1l ICRiaW5maWxlXQotKwotK2lmIHsgW2dkYl9jb21waWxlX3NobGliICR7c3JjZGlyfS8ke3N1YmRp cn0vJHtzcmNsaWJmaWxlfSAke2xpYmZpbGV9ICJkZWJ1ZyBhZGRpdGlvbmFsX2ZsYWdzPS1XbCwt LWJ1aWxkLWlkIl0gIT0gIiIKLSsgICAgIHx8IFtnZGJfY29tcGlsZSAke3NyY2Rpcn0vJHtzdWJk aXJ9LyR7c3JjbWFpbmZpbGV9ICR7b2JqZmlsZX0gb2JqZWN0IHtkZWJ1Z31dICE9ICIiIH0gewot KyAgICAgdW5zdXBwb3J0ZWQgIi1XbCwtLWJ1aWxkLWlkIGNvbXBpbGF0aW9uIGZhaWxlZCIKLSsg ICAgIHJldHVybiAtMQotK30KLStzZXQgb3B0cyBbbGlzdCBkZWJ1ZyBzaGxpYj0ke2xpYmZpbGV9 ICJhZGRpdGlvbmFsX2ZsYWdzPS1XbCwtLWJ1aWxkLWlkIl0KLStpZiB7IFtnZGJfY29tcGlsZSAk e29iamZpbGV9ICR7YmluZmlsZX0gZXhlY3V0YWJsZSAkb3B0c10gIT0gIiIgfSB7Ci0rICAgICB1 bnN1cHBvcnRlZCAiLVdsLC0tYnVpbGQtaWQgY29tcGlsYXRpb24gZmFpbGVkIgotKyAgICAgcmV0 dXJuIC0xCi0rfQotKwotK2NsZWFuX3Jlc3RhcnQgJGV4ZWN1dGFibGUKLStnZGJfbG9hZF9zaGxp YiAkbGliZmlsZQotKwotKyMgRG9lcyB0aGlzIGdkYiBzdXBwb3J0IGdjb3JlPwotK3NldCB0ZXN0 ICJoZWxwIGdjb3JlIgotK2dkYl90ZXN0X211bHRpcGxlICR0ZXN0ICR0ZXN0IHsKLSsgICAgLXJl ICJVbmRlZmluZWQgY29tbWFuZDogLmdjb3JlLipcclxuJGdkYl9wcm9tcHQgJCIgewotKwkjIGdj b3JlIGNvbW1hbmQgbm90IHN1cHBvcnRlZCAtLSBub3RoaW5nIHRvIHRlc3QgaGVyZS4KLSsJdW5z dXBwb3J0ZWQgImdkYiBkb2VzIG5vdCBzdXBwb3J0IGdjb3JlIG9uIHRoaXMgdGFyZ2V0IgotKwly ZXR1cm4gLTE7Ci0rICAgIH0KLSsgICAgLXJlICJTYXZlIGEgY29yZSBmaWxlIC4qXHJcbiRnZGJf cHJvbXB0ICQiIHsKLSsJcGFzcyAkdGVzdAotKyAgICB9Ci0rfQotKwotK2lmIHsgIVtydW50byBs aWJdIH0gdGhlbiB7Ci0rICAgIHJldHVybiAtMQotK30KLSsKLStzZXQgZXNjYXBlZGZpbGVuYW1l IFtzdHJpbmdfdG9fcmVnZXhwICR7Z2NvcmVmaWxlfV0KLSsKLStzZXQgdGVzdCAic2F2ZSBhIGNv cmVmaWxlIgotK2dkYl90ZXN0X211bHRpcGxlICJnY29yZSAke2djb3JlZmlsZX0iICR0ZXN0IHsK LSsgICAgLXJlICJTYXZlZCBjb3JlZmlsZSAke2VzY2FwZWRmaWxlbmFtZX1cclxuJGdkYl9wcm9t cHQgJCIgewotKwlwYXNzICR0ZXN0Ci0rICAgIH0KLSsgICAgLXJlICJDYW4ndCBjcmVhdGUgYSBj b3JlZmlsZVxyXG4kZ2RiX3Byb21wdCAkIiB7Ci0rCXVuc3VwcG9ydGVkICR0ZXN0Ci0rCXJldHVy biAtMQotKyAgICB9Ci0rfQotKwotKyMgTm93IHJlc3RhcnQgZ2RiIGFuZCBsb2FkIHRoZSBjb3Jl ZmlsZS4KLSsKLStjbGVhbl9yZXN0YXJ0ICRleGVjdXRhYmxlCi0rZ2RiX2xvYWRfc2hsaWIgJGxp YmZpbGUKLSsKLStzZXQgYnVpbGRpZCBbYnVpbGRfaWRfZGVidWdfZmlsZW5hbWVfZ2V0ICRsaWJm aWxlXQotKwotK3JlZ3N1YiB7XC5kZWJ1ZyR9ICRidWlsZGlkIHt9IGJ1aWxkaWQKLSsKLStzZXQg ZGVidWdkaXIgW3N0YW5kYXJkX291dHB1dF9maWxlICR7dGVzdGZpbGV9LWRlYnVnZGlyXQotK2Zp bGUgZGVsZXRlIC1mb3JjZSAtLSAkZGVidWdkaXIKLSsKLStmaWxlIG1rZGlyICRkZWJ1Z2Rpci9b ZmlsZSBkaXJuYW1lICRsaWJmaWxlXQotK2ZpbGUgY29weSAkbGliZmlsZSAkZGVidWdkaXIvJHts aWJmaWxlfQotKwotK2ZpbGUgbWtkaXIgJGRlYnVnZGlyL1tmaWxlIGRpcm5hbWUgJGJ1aWxkaWRd Ci0rZmlsZSBjb3B5ICRsaWJmaWxlICRkZWJ1Z2Rpci8ke2J1aWxkaWR9Ci0rCi0rcmVtb3RlX2V4 ZWMgYnVpbGQgImxuIC1zIC9saWIgICAgICAgJHtkZWJ1Z2Rpcn0vIgotK3JlbW90ZV9leGVjIGJ1 aWxkICJsbiAtcyAvbGliNjQgICAgICR7ZGVidWdkaXJ9LyIKLSsjIC91c3IgaXMgbm90IG5lZWRl ZCwgYWxsIHRoZSBsaWJzIGFyZSBpbiAvbGliNjQ6IGxpYm0uc28uNiBsaWJjLnNvLjYgbGQtbGlu dXgteDg2LTY0LnNvLjIKLSsKLStnZGJfdGVzdF9ub19vdXRwdXQgInNldCBzb2xpYi1hYnNvbHV0 ZS1wcmVmaXggJGRlYnVnZGlyIiBcCi0rICAgICJzZXQgc29saWItYWJzb2x1dGUtcHJlZml4Igot KwotK2dkYl90ZXN0X25vX291dHB1dCAic2V0IGRlYnVnLWZpbGUtZGlyZWN0b3J5ICRkZWJ1Z2Rp ciIgInNldCBkZWJ1Zy1maWxlLWRpcmVjdG9yeSIKLSsKLStnZGJfdGVzdCAiY29yZSAke2djb3Jl ZmlsZX0iICJDb3JlIHdhcyBnZW5lcmF0ZWQgYnkgLioiICJyZS1sb2FkIGdlbmVyYXRlZCBjb3Jl ZmlsZSIKLSsKLStnZGJfdGVzdCAiZnJhbWUiICIjMCBcW15cclxuXF0qIGxpYiAuKiIgImxpYnJh cnkgZ290IGxvYWRlZCIKLSsKLStnZGJfdGVzdCAiYnQiCi0rZ2RiX3Rlc3QgImluZm8gc2hhcmVk IgoKZGlmZiAtLWdpdCBhL2dkYi02LjYtYnVpbGRpZC1sb2NhdGUtdGVzdHMucGF0Y2ggYi9nZGIt Ni42LWJ1aWxkaWQtbG9jYXRlLXRlc3RzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLjJjYWU0OWYKLS0tIC9kZXYvbnVsbAorKysgYi9nZGItNi42LWJ1aWxkaWQtbG9j YXRlLXRlc3RzLnBhdGNoCkBAIC0wLDAgKzEsMjM3IEBACitGcm9tIEZFRE9SQV9QQVRDSEVTIE1v biBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRmVkb3JhIEdEQiBwYXRjaGVzIDxpbnZhbGlk QGVtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjcgT2N0IDIwMTcgMjE6MDc6NTAgKzAyMDAKK1N1Ympl Y3Q6IGdkYi02LjYtYnVpbGRpZC1sb2NhdGUtdGVzdHMucGF0Y2gKKworOzsgVGVzdHMgYW5kIHRl c3QgdXBkYXRlcyByZWxhdGVkIHRvIHRoZSBycG0gc3VnZ2VzdGlvbiBmZWF0dXJlLgorCitkaWZm IC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9nY29yZS1idWlsZGlkLWV4ZWMtYnV0LW5v dC1zb2xpYi1saWIuYyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvZ2NvcmUtYnVpbGRpZC1leGVj LWJ1dC1ub3Qtc29saWItbGliLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CistLS0gL2Rldi9udWxs CisrKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2djb3JlLWJ1aWxkaWQtZXhlYy1idXQtbm90 LXNvbGliLWxpYi5jCitAQCAtMCwwICsxLDIxIEBACisrLyogQ29weXJpZ2h0IDIwMTAgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0RC LgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKysgICB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorKyAg IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFt IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAg YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuICBTZWUgdGhlCisrICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAg SWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKysKKyt2b2lk CisrbGliICh2b2lkKQorK3sKKyt9CitkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFz ZS9nY29yZS1idWlsZGlkLWV4ZWMtYnV0LW5vdC1zb2xpYi1tYWluLmMgYi9nZGIvdGVzdHN1aXRl L2dkYi5iYXNlL2djb3JlLWJ1aWxkaWQtZXhlYy1idXQtbm90LXNvbGliLW1haW4uYworbmV3IGZp bGUgbW9kZSAxMDA2NDQKKy0tLSAvZGV2L251bGwKKysrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmJh c2UvZ2NvcmUtYnVpbGRpZC1leGVjLWJ1dC1ub3Qtc29saWItbWFpbi5jCitAQCAtMCwwICsxLDI1 IEBACisrLyogQ29weXJpZ2h0IDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisr CisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0RCLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAg aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBw dWJsaXNoZWQgYnkKKysgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVy c2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy IHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrICAgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxk IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor KyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251 Lm9yZy9saWNlbnNlcy8+LiAgKi8KKysKKytleHRlcm4gdm9pZCBsaWIgKHZvaWQpOworKworK2lu dAorK21haW4gKHZvaWQpCisreworKyAgbGliICgpOworKyAgcmV0dXJuIDA7CisrfQorZGlmZiAt LWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvZ2NvcmUtYnVpbGRpZC1leGVjLWJ1dC1ub3Qt c29saWIuZXhwIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9nY29yZS1idWlsZGlkLWV4ZWMtYnV0 LW5vdC1zb2xpYi5leHAKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CistLS0gL2Rldi9udWxsCisrKysg Yi9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2djb3JlLWJ1aWxkaWQtZXhlYy1idXQtbm90LXNvbGli LmV4cAorQEAgLTAsMCArMSwxMDQgQEAKKysjIENvcHlyaWdodCAyMDE2IEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbiwgSW5jLgorKworKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysjIGl0IHVuZGVyIHRoZSB0ZXJt cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisrIyB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNl bnNlLCBvcgorKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysjCisrIyBU aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz ZWZ1bCwKKysjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mCisrIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm b3IgbW9yZSBkZXRhaWxzLgorKyMKKysjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrIyBhbG9uZyB3aXRoIHRoaXMgcHJv Z3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKysKKyty ZXF1aXJlIGFsbG93X3NobGliX3Rlc3RzCisrCisrc2V0IHRlc3RmaWxlICJnY29yZS1idWlsZGlk LWV4ZWMtYnV0LW5vdC1zb2xpYiIKKytzZXQgc3JjbWFpbmZpbGUgJHt0ZXN0ZmlsZX0tbWFpbi5j Cisrc2V0IHNyY2xpYmZpbGUgJHt0ZXN0ZmlsZX0tbGliLmMKKytzZXQgbGliZmlsZSBbc3RhbmRh cmRfb3V0cHV0X2ZpbGUgJHt0ZXN0ZmlsZX0tbGliLnNvXQorK3NldCBvYmpmaWxlIFtzdGFuZGFy ZF9vdXRwdXRfZmlsZSAke3Rlc3RmaWxlfS1tYWluLm9dCisrc2V0IGV4ZWN1dGFibGUgJHt0ZXN0 ZmlsZX0tbWFpbgorK3NldCBiaW5maWxlIFtzdGFuZGFyZF9vdXRwdXRfZmlsZSAke2V4ZWN1dGFi bGV9XQorK3NldCBnY29yZWZpbGUgW3N0YW5kYXJkX291dHB1dF9maWxlICR7ZXhlY3V0YWJsZX0u Z2NvcmVdCisrc2V0IG91dGRpciBbZmlsZSBkaXJuYW1lICRiaW5maWxlXQorKworK2lmIHsgW2dk Yl9jb21waWxlX3NobGliICR7c3JjZGlyfS8ke3N1YmRpcn0vJHtzcmNsaWJmaWxlfSAke2xpYmZp bGV9ICJkZWJ1ZyBhZGRpdGlvbmFsX2ZsYWdzPS1XbCwtLWJ1aWxkLWlkIl0gIT0gIiIKKysgICAg IHx8IFtnZGJfY29tcGlsZSAke3NyY2Rpcn0vJHtzdWJkaXJ9LyR7c3JjbWFpbmZpbGV9ICR7b2Jq ZmlsZX0gb2JqZWN0IHtkZWJ1Z31dICE9ICIiIH0geworKyAgICAgdW5zdXBwb3J0ZWQgIi1XbCwt LWJ1aWxkLWlkIGNvbXBpbGF0aW9uIGZhaWxlZCIKKysgICAgIHJldHVybiAtMQorK30KKytzZXQg b3B0cyBbbGlzdCBkZWJ1ZyBzaGxpYj0ke2xpYmZpbGV9ICJhZGRpdGlvbmFsX2ZsYWdzPS1XbCwt LWJ1aWxkLWlkIl0KKytpZiB7IFtnZGJfY29tcGlsZSAke29iamZpbGV9ICR7YmluZmlsZX0gZXhl Y3V0YWJsZSAkb3B0c10gIT0gIiIgfSB7CisrICAgICB1bnN1cHBvcnRlZCAiLVdsLC0tYnVpbGQt aWQgY29tcGlsYXRpb24gZmFpbGVkIgorKyAgICAgcmV0dXJuIC0xCisrfQorKworK2NsZWFuX3Jl c3RhcnQgJGV4ZWN1dGFibGUKKytnZGJfbG9hZF9zaGxpYiAkbGliZmlsZQorKworKyMgRG9lcyB0 aGlzIGdkYiBzdXBwb3J0IGdjb3JlPworK3NldCB0ZXN0ICJoZWxwIGdjb3JlIgorK2dkYl90ZXN0 X211bHRpcGxlICR0ZXN0ICR0ZXN0IHsKKysgICAgLXJlICJVbmRlZmluZWQgY29tbWFuZDogLmdj b3JlLipcclxuJGdkYl9wcm9tcHQgJCIgeworKwkjIGdjb3JlIGNvbW1hbmQgbm90IHN1cHBvcnRl ZCAtLSBub3RoaW5nIHRvIHRlc3QgaGVyZS4KKysJdW5zdXBwb3J0ZWQgImdkYiBkb2VzIG5vdCBz dXBwb3J0IGdjb3JlIG9uIHRoaXMgdGFyZ2V0IgorKwlyZXR1cm4gLTE7CisrICAgIH0KKysgICAg LXJlICJTYXZlIGEgY29yZSBmaWxlIC4qXHJcbiRnZGJfcHJvbXB0ICQiIHsKKysJcGFzcyAkdGVz dAorKyAgICB9CisrfQorKworK2lmIHsgIVtydW50byBsaWJdIH0gdGhlbiB7CisrICAgIHJldHVy biAtMQorK30KKysKKytzZXQgZXNjYXBlZGZpbGVuYW1lIFtzdHJpbmdfdG9fcmVnZXhwICR7Z2Nv cmVmaWxlfV0KKysKKytzZXQgdGVzdCAic2F2ZSBhIGNvcmVmaWxlIgorK2dkYl90ZXN0X211bHRp cGxlICJnY29yZSAke2djb3JlZmlsZX0iICR0ZXN0IHsKKysgICAgLXJlICJTYXZlZCBjb3JlZmls ZSAke2VzY2FwZWRmaWxlbmFtZX1cclxuJGdkYl9wcm9tcHQgJCIgeworKwlwYXNzICR0ZXN0Cisr ICAgIH0KKysgICAgLXJlICJDYW4ndCBjcmVhdGUgYSBjb3JlZmlsZVxyXG4kZ2RiX3Byb21wdCAk IiB7CisrCXVuc3VwcG9ydGVkICR0ZXN0CisrCXJldHVybiAtMQorKyAgICB9CisrfQorKworKyMg Tm93IHJlc3RhcnQgZ2RiIGFuZCBsb2FkIHRoZSBjb3JlZmlsZS4KKysKKytjbGVhbl9yZXN0YXJ0 ICRleGVjdXRhYmxlCisrZ2RiX2xvYWRfc2hsaWIgJGxpYmZpbGUKKysKKytzZXQgYnVpbGRpZCBb YnVpbGRfaWRfZGVidWdfZmlsZW5hbWVfZ2V0ICRsaWJmaWxlXQorKworK3JlZ3N1YiB7XC5kZWJ1 ZyR9ICRidWlsZGlkIHt9IGJ1aWxkaWQKKysKKytzZXQgZGVidWdkaXIgW3N0YW5kYXJkX291dHB1 dF9maWxlICR7dGVzdGZpbGV9LWRlYnVnZGlyXQorK2ZpbGUgZGVsZXRlIC1mb3JjZSAtLSAkZGVi dWdkaXIKKysKKytmaWxlIG1rZGlyICRkZWJ1Z2Rpci9bZmlsZSBkaXJuYW1lICRsaWJmaWxlXQor K2ZpbGUgY29weSAkbGliZmlsZSAkZGVidWdkaXIvJHtsaWJmaWxlfQorKworK2ZpbGUgbWtkaXIg JGRlYnVnZGlyL1tmaWxlIGRpcm5hbWUgJGJ1aWxkaWRdCisrZmlsZSBjb3B5ICRsaWJmaWxlICRk ZWJ1Z2Rpci8ke2J1aWxkaWR9CisrCisrcmVtb3RlX2V4ZWMgYnVpbGQgImxuIC1zIC9saWIgICAg ICAgJHtkZWJ1Z2Rpcn0vIgorK3JlbW90ZV9leGVjIGJ1aWxkICJsbiAtcyAvbGliNjQgICAgICR7 ZGVidWdkaXJ9LyIKKysjIC91c3IgaXMgbm90IG5lZWRlZCwgYWxsIHRoZSBsaWJzIGFyZSBpbiAv bGliNjQ6IGxpYm0uc28uNiBsaWJjLnNvLjYgbGQtbGludXgteDg2LTY0LnNvLjIKKysKKytnZGJf dGVzdF9ub19vdXRwdXQgInNldCBzb2xpYi1hYnNvbHV0ZS1wcmVmaXggJGRlYnVnZGlyIiBcCisr ICAgICJzZXQgc29saWItYWJzb2x1dGUtcHJlZml4IgorKworK2dkYl90ZXN0X25vX291dHB1dCAi c2V0IGRlYnVnLWZpbGUtZGlyZWN0b3J5ICRkZWJ1Z2RpciIgInNldCBkZWJ1Zy1maWxlLWRpcmVj dG9yeSIKKysKKytnZGJfdGVzdCAiY29yZSAke2djb3JlZmlsZX0iICJDb3JlIHdhcyBnZW5lcmF0 ZWQgYnkgLioiICJyZS1sb2FkIGdlbmVyYXRlZCBjb3JlZmlsZSIKKysKKytnZGJfdGVzdCAiZnJh bWUiICIjMCBcW15cclxuXF0qIGxpYiAuKiIgImxpYnJhcnkgZ290IGxvYWRlZCIKKysKKytnZGJf dGVzdCAiYnQiCisrZ2RiX3Rlc3QgImluZm8gc2hhcmVkIgorZGlmZiAtLWdpdCBhL2dkYi90ZXN0 c3VpdGUvZ2RiLmJhc2Uvcmhiejk4MTE1NC1taXNsZWFkaW5nLXl1bS1pbnN0YWxsLXdhcm5pbmcu ZXhwIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9yaGJ6OTgxMTU0LW1pc2xlYWRpbmcteXVtLWlu c3RhbGwtd2FybmluZy5leHAKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CistLS0gL2Rldi9udWxsCisr KysgYi9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL3JoYno5ODExNTQtbWlzbGVhZGluZy15dW0taW5z dGFsbC13YXJuaW5nLmV4cAorQEAgLTAsMCArMSw2MCBAQAorKyMgQ29weXJpZ2h0IChDKSAyMDE0 ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysjIFRoaXMgcHJvZ3JhbSBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrIyBp dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1 Ymxpc2hlZCBieQorKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNp b24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKysjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl cnNpb24uCisrIworKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKyMgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysjCisrIyBZb3Ugc2hvdWxkIGhhdmUg cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKyMgYWxv bmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xp Y2Vuc2VzLz4uCisrCisrIyBDcmVhdGUgYSBjb3JlIGZpbGUsIHRoZW4gaGlkZSB0aGUgZXhlY3V0 YWJsZS4gIFJlc3RhcnQgR0RCIGFuZCBsb2FkCisrIyB0aGUgY29yZSBmaWxlLiAgQ2hlY2sgR0RC IGdpdmVzIGEgbWVzc2FnZSBzdWdnZXN0aW5nIGEgJ2RuZicgY29tbWFuZAorKyMgdG8gdHJ5IGFu ZCBpbnN0YWxsIHRoZSBleGVjdXRhYmxlIGJhc2VkIG9uIGl0cyBidWlsZC1pZC4KKysKKytzdGFu ZGFyZF90ZXN0ZmlsZSAibm9ybWFsLmMiCisrCisraWYgeyBbcHJlcGFyZV9mb3JfdGVzdGluZyAk e3Rlc3RmaWxlfS5leHAgJHt0ZXN0ZmlsZX0gJHtzcmNmaWxlfV0gfSB7CisrICAgIHJldHVybiAt MQorK30KKysKKysjIEdldCB0aGUgYnVpbGQtaWQgb2YgdGhlIGZpbGUuCisrc2V0IGJ1aWxkX2lk X2RlYnVnX2ZpbGUgW2J1aWxkX2lkX2RlYnVnX2ZpbGVuYW1lX2dldCAkYmluZmlsZV0KKytyZWdz dWIgLWFsbCAiLmRlYnVnJCIgJGJ1aWxkX2lkX2RlYnVnX2ZpbGUgIiIgYnVpbGRfaWRfd2l0aG91 dF9kZWJ1ZworKworKyMgUnVuIHRvIG1haW4uCisraWYgeyAhW3J1bnRvX21haW5dIH0geworKyAg ICByZXR1cm4gLTEKKyt9CisrCisrIyBXZSBmaXJzdCBuZWVkIHRvIGdlbmVyYXRlIGEgY29yZWZp bGUuCisrc2V0IGNvcmVmaWxlbmFtZSAiW3N0YW5kYXJkX291dHB1dF9maWxlIGdjb3JlLnRlc3Rd IgorK2lmIHsgIVtnZGJfZ2NvcmVfY21kICIkY29yZWZpbGVuYW1lIiAic2F2ZSBjb3JlZmlsZSJd IH0geworKyAgICB1bnRlc3RlZCAiY291bGQgbm90IGdlbmVyYXRlIGEgY29yZWZpbGUiCisrICAg IHJldHVybiAtMQorK30KKysKKysjIE1vdmUgdGhlIGJpbmZpbGUgdG8gYSB0ZW1wb3JhcnkgbmFt ZS4KKytyZW1vdGVfZXhlYyBidWlsZCAibXYgJGJpbmZpbGUgJHtiaW5maWxlfS5vbGQiCisrCisr IyBSZWluaXRpYWxpemUgR0RCIGFuZCBzZWUgaWYgd2UgZ2V0IGEgZG5mIHN1Z2dlc3Rpb24uCisr Y2xlYW5fcmVzdGFydAorKworK2dkYl90ZXN0ICJzZXQgYnVpbGQtaWQtdmVyYm9zZSAxIiAiIiBc CisrICAgICJzZXQgYnVpbGQtaWQtdmVyYm9zZSIKKysKKysjIEdEQiBvbmx5IG1ha2VzIGJ1aWxk LWlkIGJhc2VkIFJQTSBzdWdnZXN0aW9ucyBpZiAvdXNyL2xpYiBpcyBpbgorKyMgdGhlIGRlYnVn LWZpbGUtZGlyZWN0b3J5IGxpc3QsIHRoZSByZWFzb24gYmVpbmcgdGhhdCBzeXN0ZW0gUlBNcwor KyMgd2lsbCBhbHdheXMgaW5zdGFsbCB1bmRlciB0aGlzIGxvY2F0aW9uLiAgSWYgR0RCIGlzIG5v dCBsb29raW5nCisrIyBoZXJlIHRoZW4gdGhlcmUncyBubyBwb2ludCBtYWtpbmcgc3VnZ2VzdGlv bnMuCisrZ2RiX3Rlc3QgInNldCBkZWJ1Zy1maWxlLWRpcmVjdG9yeSAvdXNyL2xpYi8iICIiIFwK KysgICAgInNldCBkZWJ1Zy1maWxlLWRpcmVjdG9yeSIKKysKKytnZGJfdGVzdCAiY29yZS1maWxl IFtzdGFuZGFyZF9vdXRwdXRfZmlsZSBnY29yZS50ZXN0XSIgXAorKyAgICAiTWlzc2luZyBmaWxl XFwoc1xcKSwgdHJ5OiBkbmYgLS1lbmFibGVyZXBvPSdcXCpkZWJ1Z1xcKicgaW5zdGFsbCBbc3Ry aW5nX3RvX3JlZ2V4cCAvdXNyL2xpYi8kYnVpbGRfaWRfd2l0aG91dF9kZWJ1Z10gW3N0cmluZ190 b19yZWdleHAgL3Vzci9saWIvZGVidWcvJGJ1aWxkX2lkX2RlYnVnX2ZpbGVdIiBcCisrICAgICJ0 ZXN0IGZpcnN0IHl1bS9kbmYgd2FybmluZyIKCmRpZmYgLS1naXQgYS9nZGItNi42LWJ1aWxkaWQt bG9jYXRlLnBhdGNoIGIvZ2RiLTYuNi1idWlsZGlkLWxvY2F0ZS5wYXRjaApkZWxldGVkIGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggZDQwN2I0My4uMDAwMDAwMAotLS0gYS9nZGItNi42LWJ1aWxkaWQt bG9jYXRlLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMTE5NCArMCwwIEBACi1Gcm9tIEZFRE9S QV9QQVRDSEVTIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogRmVkb3JhIEdEQiBwYXRj aGVzIDxpbnZhbGlkQGVtYWlsLmNvbT4KLURhdGU6IEZyaSwgMjcgT2N0IDIwMTcgMjE6MDc6NTAg KzAyMDAKLVN1YmplY3Q6IGdkYi02LjYtYnVpbGRpZC1sb2NhdGUucGF0Y2gKLQotOzsgTmV3IGxv Y2F0aW5nIG9mIHRoZSBtYXRjaGluZyBiaW5hcmllcyBmcm9tIHRoZSBwdXJlIGNvcmUgZmlsZSAo YnVpbGQtaWQpLgotOzs9cHVzaCtqYW4KLQotZGlmZiAtLWdpdCBhL2dkYi9idWlsZC1pZC5jIGIv Z2RiL2J1aWxkLWlkLmMKLS0tLSBhL2dkYi9idWlsZC1pZC5jCi0rKysgYi9nZGIvYnVpbGQtaWQu YwotQEAgLTIzLDkgKzIzLDY3IEBACi0gI2luY2x1ZGUgImdkYnN1cHBvcnQvZ2RiX3ZlY3MuaCIK LSAjaW5jbHVkZSAic3ltZmlsZS5oIgotICNpbmNsdWRlICJvYmpmaWxlcy5oIgotKyNpbmNsdWRl IDxzeXMvc3RhdC5oPgotKyNpbmNsdWRlICJlbGYtYmZkLmgiCi0rI2luY2x1ZGUgImVsZi9jb21t b24uaCIKLSsjaW5jbHVkZSAiZWxmL2V4dGVybmFsLmgiCi0rI2luY2x1ZGUgImVsZi9pbnRlcm5h bC5oIgotICNpbmNsdWRlICJmaWxlbmFtZXMuaCIKLSsjaW5jbHVkZSAiZ2RiX2JmZC5oIgotICNp bmNsdWRlICJnZGJjb3JlLmgiCi0rI2luY2x1ZGUgImNsaS9jbGktY21kcy5oIgotICNpbmNsdWRl ICJjbGkvY2xpLXN0eWxlLmgiCi0rI2luY2x1ZGUgImluZmVyaW9yLmgiCi0rI2luY2x1ZGUgIm9i amZpbGVzLmgiCi0rI2luY2x1ZGUgIm9ic2VydmFibGUuaCIKLSsjaW5jbHVkZSAic3ltZmlsZS5o IgotKwotKyNkZWZpbmUgQlVJTERfSURfVkVSQk9TRV9OT05FIDAKLSsjZGVmaW5lIEJVSUxEX0lE X1ZFUkJPU0VfRklMRU5BTUVTIDEKLSsjZGVmaW5lIEJVSUxEX0lEX1ZFUkJPU0VfQklOQVJZX1BB UlNFIDIKLStzdGF0aWMgaW50IGJ1aWxkX2lkX3ZlcmJvc2UgPSBCVUlMRF9JRF9WRVJCT1NFX0ZJ TEVOQU1FUzsKLStzdGF0aWMgdm9pZAotK3Nob3dfYnVpbGRfaWRfdmVyYm9zZSAoc3RydWN0IHVp X2ZpbGUgKmZpbGUsIGludCBmcm9tX3R0eSwKLSsJCSAgICAgICBzdHJ1Y3QgY21kX2xpc3RfZWxl bWVudCAqYywgY29uc3QgY2hhciAqdmFsdWUpCi0rewotKyAgZ2RiX3ByaW50ZiAoZmlsZSwgXygi VmVyYm9zaXR5IGxldmVsIG9mIHRoZSBidWlsZC1pZCBsb2NhdG9yIGlzICVzLlxuIiksCi0rCSAg ICAgIHZhbHVlKTsKLSt9Ci0rLyogTG9jYXRlIE5UX0dOVV9CVUlMRF9JRCBhbmQgcmV0dXJuIGl0 cyBtYXRjaGluZyBkZWJ1ZyBmaWxlbmFtZS4KLSsgICBGSVhNRTogTk9URSBkZWNvZGluZyBzaG91 bGQgYmUgdW5pZmllZCB3aXRoIHRoZSBCRkQgY29yZSBub3RlcyBkZWNvZGluZy4gICovCi0rCi0r c3RhdGljIHN0cnVjdCBiZmRfYnVpbGRfaWQgKgotK2J1aWxkX2lkX2J1Zl9nZXQgKGJmZCAqdGVt cGwsIGdkYl9ieXRlICpidWYsIGJmZF9zaXplX3R5cGUgc2l6ZSkKLSt7Ci0rICBiZmRfYnl0ZSAq cDsKLSsKLSsgIHAgPSBidWY7Ci0rICB3aGlsZSAocCA8IGJ1ZiArIHNpemUpCi0rICAgIHsKLSsg ICAgICAvKiBGSVhNRTogYmFkIGFsaWdubWVudCBhc3N1bXB0aW9uLiAgKi8KLSsgICAgICBFbGZf RXh0ZXJuYWxfTm90ZSAqeG5wID0gKEVsZl9FeHRlcm5hbF9Ob3RlICopIHA7Ci0rICAgICAgc2l6 ZV90IG5hbWVzeiA9IEhfR0VUXzMyICh0ZW1wbCwgeG5wLT5uYW1lc3opOwotKyAgICAgIHNpemVf dCBkZXNjc3ogPSBIX0dFVF8zMiAodGVtcGwsIHhucC0+ZGVzY3N6KTsKLSsgICAgICBiZmRfYnl0 ZSAqZGVzY2RhdGEgPSAoZ2RiX2J5dGUgKikgeG5wLT5uYW1lICsgQkZEX0FMSUdOIChuYW1lc3os IDQpOwotKwotKyAgICAgIGlmIChIX0dFVF8zMiAodGVtcGwsIHhucC0+dHlwZSkgPT0gTlRfR05V X0JVSUxEX0lECi0rCSAgJiYgbmFtZXN6ID09IHNpemVvZiAiR05VIgotKwkgICYmIG1lbWNtcCAo eG5wLT5uYW1lLCAiR05VIiwgc2l6ZW9mICJHTlUiKSA9PSAwKQotKwl7Ci0rCSAgc2l6ZV90IHN6 ID0gZGVzY3N6OwotKwkgIGdkYl9ieXRlICpkYXRhID0gKGdkYl9ieXRlICopIGRlc2NkYXRhOwot KwkgIHN0cnVjdCBiZmRfYnVpbGRfaWQgKnJldHZhbDsKLSsKLSsJICByZXR2YWwgPSAoc3RydWN0 IGJmZF9idWlsZF9pZCAqKSB4bWFsbG9jIChzaXplb2YgKnJldHZhbCAtIDEgKyBzeik7Ci0rCSAg cmV0dmFsLT5zaXplID0gc3o7Ci0rCSAgbWVtY3B5IChyZXR2YWwtPmRhdGEsIGRhdGEsIHN6KTsK LSsKLSsJICByZXR1cm4gcmV0dmFsOwotKwl9Ci0rICAgICAgcCA9IGRlc2NkYXRhICsgQkZEX0FM SUdOIChkZXNjc3osIDQpOwotKyAgICB9Ci0rICByZXR1cm4gTlVMTDsKLSt9Ci0gCi0gLyogU2Vl IGJ1aWxkLWlkLmguICAqLwotIAotQEAgLTQ5LDYgKzEwNywzNDkgQEAgYnVpbGRfaWRfYmZkX2dl dCAoYmZkICphYmZkKQotICAgcmV0dXJuIE5VTEw7Ci0gfQotIAotKy8qIENvcmUgZmlsZXMgbWF5 IGhhdmUgbWlzc2luZyAoY29ycnVwdCkgU0hEUiBidXQgUERIUiBpcyBjb3JyZWN0IHRoZXJlLgot KyAgIGJmZF9lbGZfYmZkX2Zyb21fcmVtb3RlX21lbW9yeSAoKSBoYXMgdG9vIG11Y2ggb3Zlcmhl YWQgYnkKLSsgICBhbGxvY2F0aW5nL3JlYWRpbmcgYWxsIHRoZSBhdmFpbGFibGUgRUxGIFBUX0xP QURzLiAgKi8KLSsKLStzdGF0aWMgc3RydWN0IGJmZF9idWlsZF9pZCAqCi0rYnVpbGRfaWRfcGhk cl9nZXQgKGJmZCAqdGVtcGwsIGJmZF92bWEgbG9hZGJhc2UsIHVuc2lnbmVkIGVfcGhudW0sCi0r CQkgICBFbGZfSW50ZXJuYWxfUGhkciAqaV9waGRyKQotK3sKLSsgIGludCBpOwotKyAgc3RydWN0 IGJmZF9idWlsZF9pZCAqcmV0dmFsID0gTlVMTDsKLSsKLSsgIGZvciAoaSA9IDA7IGkgPCBlX3Bo bnVtOyBpKyspCi0rICAgIGlmIChpX3BoZHJbaV0ucF90eXBlID09IFBUX05PVEUgJiYgaV9waGRy W2ldLnBfZmlsZXN6ID4gMCkKLSsgICAgICB7Ci0rCUVsZl9JbnRlcm5hbF9QaGRyICpoZHIgPSAm aV9waGRyW2ldOwotKwlnZGJfYnl0ZSAqYnVmOwotKwlpbnQgZXJyOwotKwotKwlidWYgPSAoZ2Ri X2J5dGUgKikgeG1hbGxvYyAoaGRyLT5wX2ZpbGVzeik7Ci0rCWVyciA9IHRhcmdldF9yZWFkX21l bW9yeSAobG9hZGJhc2UgKyBpX3BoZHJbaV0ucF92YWRkciwgYnVmLAotKwkJCQkgIGhkci0+cF9m aWxlc3opOwotKwlpZiAoZXJyID09IDApCi0rCSAgcmV0dmFsID0gYnVpbGRfaWRfYnVmX2dldCAo dGVtcGwsIGJ1ZiwgaGRyLT5wX2ZpbGVzeik7Ci0rCWVsc2UKLSsJICByZXR2YWwgPSBOVUxMOwot Kwl4ZnJlZSAoYnVmKTsKLSsJaWYgKHJldHZhbCAhPSBOVUxMKQotKwkgIGJyZWFrOwotKyAgICAg IH0KLSsgIHJldHVybiByZXR2YWw7Ci0rfQotKwotKy8qIEZpcnN0IHdlIHZhbGlkYXRlIHRoZSBm aWxlIGJ5IHJlYWRpbmcgaW4gdGhlIEVMRiBoZWFkZXIgYW5kIGNoZWNraW5nCi0rICAgdGhlIG1h Z2ljIG51bWJlci4gICovCi0rCi0rc3RhdGljIGlubGluZSBiZmRfYm9vbGVhbgotK2VsZl9maWxl X3AgKEVsZjY0X0V4dGVybmFsX0VoZHIgKnhfZWhkcnA2NCkKLSt7Ci0rICBnZGJfYXNzZXJ0IChz aXplb2YgKEVsZjY0X0V4dGVybmFsX0VoZHIpID49IHNpemVvZiAoRWxmMzJfRXh0ZXJuYWxfRWhk cikpOwotKyAgZ2RiX2Fzc2VydCAob2Zmc2V0b2YgKEVsZjY0X0V4dGVybmFsX0VoZHIsIGVfaWRl bnQpCi0rCSAgICAgID09IG9mZnNldG9mIChFbGYzMl9FeHRlcm5hbF9FaGRyLCBlX2lkZW50KSk7 Ci0rICBnZGJfYXNzZXJ0IChzaXplb2YgKCgoRWxmNjRfRXh0ZXJuYWxfRWhkciAqKSAwKS0+ZV9p ZGVudCkKLSsJICAgICAgPT0gc2l6ZW9mICgoKEVsZjMyX0V4dGVybmFsX0VoZHIgKikgMCktPmVf aWRlbnQpKTsKLSsKLSsgIHJldHVybiAoKHhfZWhkcnA2NC0+ZV9pZGVudFtFSV9NQUcwXSA9PSBF TEZNQUcwKQotKwkgICYmICh4X2VoZHJwNjQtPmVfaWRlbnRbRUlfTUFHMV0gPT0gRUxGTUFHMSkK LSsJICAmJiAoeF9laGRycDY0LT5lX2lkZW50W0VJX01BRzJdID09IEVMRk1BRzIpCi0rCSAgJiYg KHhfZWhkcnA2NC0+ZV9pZGVudFtFSV9NQUczXSA9PSBFTEZNQUczKSk7Ci0rfQotKwotKy8qIFRy YW5zbGF0ZSBhbiBFTEYgZmlsZSBoZWFkZXIgaW4gZXh0ZXJuYWwgZm9ybWF0IGludG8gYW4gRUxG IGZpbGUgaGVhZGVyIGluCi0rICAgaW50ZXJuYWwgZm9ybWF0LiAgKi8KLSsKLSsjZGVmaW5lIEhf R0VUX1dPUkQoYmZkLCBwdHIpIChpczY0ID8gSF9HRVRfNjQgKGJmZCwgKHB0cikpCQlcCi0rCQkJ CSAgIDogSF9HRVRfMzIgKGJmZCwgKHB0cikpKQotKyNkZWZpbmUgSF9HRVRfU0lHTkVEX1dPUkQo YmZkLCBwdHIpIChpczY0ID8gSF9HRVRfUzY0IChiZmQsIChwdHIpKQlcCi0rCQkJCQkgIDogSF9H RVRfUzMyIChiZmQsIChwdHIpKSkKLSsKLStzdGF0aWMgdm9pZAotK2VsZl9zd2FwX2VoZHJfaW4g KGJmZCAqYWJmZCwKLSsJCSAgY29uc3QgRWxmNjRfRXh0ZXJuYWxfRWhkciAqc3JjNjQsCi0rCQkg IEVsZl9JbnRlcm5hbF9FaGRyICpkc3QpCi0rewotKyAgaW50IGlzNjQgPSBiZmRfZ2V0X2FyY2hf c2l6ZSAoYWJmZCkgPT0gNjQ7Ci0rI2RlZmluZSBTUkMoZmllbGQpIChpczY0ID8gc3JjNjQtPmZp ZWxkIFwKLSsJCQkgOiAoKGNvbnN0IEVsZjMyX0V4dGVybmFsX0VoZHIgKikgc3JjNjQpLT5maWVs ZCkKLSsKLSsgIGludCBzaWduZWRfdm1hID0gZ2V0X2VsZl9iYWNrZW5kX2RhdGEgKGFiZmQpLT5z aWduX2V4dGVuZF92bWE7Ci0rICBtZW1jcHkgKGRzdC0+ZV9pZGVudCwgU1JDIChlX2lkZW50KSwg RUlfTklERU5UKTsKLSsgIGRzdC0+ZV90eXBlID0gSF9HRVRfMTYgKGFiZmQsIFNSQyAoZV90eXBl KSk7Ci0rICBkc3QtPmVfbWFjaGluZSA9IEhfR0VUXzE2IChhYmZkLCBTUkMgKGVfbWFjaGluZSkp OwotKyAgZHN0LT5lX3ZlcnNpb24gPSBIX0dFVF8zMiAoYWJmZCwgU1JDIChlX3ZlcnNpb24pKTsK LSsgIGlmIChzaWduZWRfdm1hKQotKyAgICBkc3QtPmVfZW50cnkgPSBIX0dFVF9TSUdORURfV09S RCAoYWJmZCwgU1JDIChlX2VudHJ5KSk7Ci0rICBlbHNlCi0rICAgIGRzdC0+ZV9lbnRyeSA9IEhf R0VUX1dPUkQgKGFiZmQsIFNSQyAoZV9lbnRyeSkpOwotKyAgZHN0LT5lX3Bob2ZmID0gSF9HRVRf V09SRCAoYWJmZCwgU1JDIChlX3Bob2ZmKSk7Ci0rICBkc3QtPmVfc2hvZmYgPSBIX0dFVF9XT1JE IChhYmZkLCBTUkMgKGVfc2hvZmYpKTsKLSsgIGRzdC0+ZV9mbGFncyA9IEhfR0VUXzMyIChhYmZk LCBTUkMgKGVfZmxhZ3MpKTsKLSsgIGRzdC0+ZV9laHNpemUgPSBIX0dFVF8xNiAoYWJmZCwgU1JD IChlX2Voc2l6ZSkpOwotKyAgZHN0LT5lX3BoZW50c2l6ZSA9IEhfR0VUXzE2IChhYmZkLCBTUkMg KGVfcGhlbnRzaXplKSk7Ci0rICBkc3QtPmVfcGhudW0gPSBIX0dFVF8xNiAoYWJmZCwgU1JDIChl X3BobnVtKSk7Ci0rICBkc3QtPmVfc2hlbnRzaXplID0gSF9HRVRfMTYgKGFiZmQsIFNSQyAoZV9z aGVudHNpemUpKTsKLSsgIGRzdC0+ZV9zaG51bSA9IEhfR0VUXzE2IChhYmZkLCBTUkMgKGVfc2hu dW0pKTsKLSsgIGRzdC0+ZV9zaHN0cm5keCA9IEhfR0VUXzE2IChhYmZkLCBTUkMgKGVfc2hzdHJu ZHgpKTsKLSsKLSsjdW5kZWYgU1JDCi0rfQotKwotKy8qIFRyYW5zbGF0ZSBhbiBFTEYgcHJvZ3Jh bSBoZWFkZXIgdGFibGUgZW50cnkgaW4gZXh0ZXJuYWwgZm9ybWF0IGludG8gYW4KLSsgICBFTEYg cHJvZ3JhbSBoZWFkZXIgdGFibGUgZW50cnkgaW4gaW50ZXJuYWwgZm9ybWF0LiAgKi8KLSsKLStz dGF0aWMgdm9pZAotK2VsZl9zd2FwX3BoZHJfaW4gKGJmZCAqYWJmZCwKLSsJCSAgY29uc3QgRWxm NjRfRXh0ZXJuYWxfUGhkciAqc3JjNjQsCi0rCQkgIEVsZl9JbnRlcm5hbF9QaGRyICpkc3QpCi0r ewotKyAgaW50IGlzNjQgPSBiZmRfZ2V0X2FyY2hfc2l6ZSAoYWJmZCkgPT0gNjQ7Ci0rI2RlZmlu ZSBTUkMoZmllbGQpIChpczY0ID8gc3JjNjQtPmZpZWxkCQkJCQlcCi0rCQkJIDogKChjb25zdCBF bGYzMl9FeHRlcm5hbF9QaGRyICopIHNyYzY0KS0+ZmllbGQpCi0rCi0rICBpbnQgc2lnbmVkX3Zt YSA9IGdldF9lbGZfYmFja2VuZF9kYXRhIChhYmZkKS0+c2lnbl9leHRlbmRfdm1hOwotKwotKyAg ZHN0LT5wX3R5cGUgPSBIX0dFVF8zMiAoYWJmZCwgU1JDIChwX3R5cGUpKTsKLSsgIGRzdC0+cF9m bGFncyA9IEhfR0VUXzMyIChhYmZkLCBTUkMgKHBfZmxhZ3MpKTsKLSsgIGRzdC0+cF9vZmZzZXQg PSBIX0dFVF9XT1JEIChhYmZkLCBTUkMgKHBfb2Zmc2V0KSk7Ci0rICBpZiAoc2lnbmVkX3ZtYSkK LSsgICAgewotKyAgICAgIGRzdC0+cF92YWRkciA9IEhfR0VUX1NJR05FRF9XT1JEIChhYmZkLCBT UkMgKHBfdmFkZHIpKTsKLSsgICAgICBkc3QtPnBfcGFkZHIgPSBIX0dFVF9TSUdORURfV09SRCAo YWJmZCwgU1JDIChwX3BhZGRyKSk7Ci0rICAgIH0KLSsgIGVsc2UKLSsgICAgewotKyAgICAgIGRz dC0+cF92YWRkciA9IEhfR0VUX1dPUkQgKGFiZmQsIFNSQyAocF92YWRkcikpOwotKyAgICAgIGRz dC0+cF9wYWRkciA9IEhfR0VUX1dPUkQgKGFiZmQsIFNSQyAocF9wYWRkcikpOwotKyAgICB9Ci0r ICBkc3QtPnBfZmlsZXN6ID0gSF9HRVRfV09SRCAoYWJmZCwgU1JDIChwX2ZpbGVzeikpOwotKyAg ZHN0LT5wX21lbXN6ID0gSF9HRVRfV09SRCAoYWJmZCwgU1JDIChwX21lbXN6KSk7Ci0rICBkc3Qt PnBfYWxpZ24gPSBIX0dFVF9XT1JEIChhYmZkLCBTUkMgKHBfYWxpZ24pKTsKLSsKLSsjdW5kZWYg U1JDCi0rfQotKwotKyN1bmRlZiBIX0dFVF9TSUdORURfV09SRAotKyN1bmRlZiBIX0dFVF9XT1JE Ci0rCi0rc3RhdGljIEVsZl9JbnRlcm5hbF9QaGRyICoKLStlbGZfZ2V0X3BoZHIgKGJmZCAqdGVt cGwsIGJmZF92bWEgZWhkcl92bWEsIHVuc2lnbmVkICplX3BobnVtX3BvaW50ZXIsCi0rICAgICAg ICAgICAgICBiZmRfdm1hICpsb2FkYmFzZV9wb2ludGVyKQotK3sKLSsgIC8qIHNpemVvZiAoRWxm NjRfRXh0ZXJuYWxfRWhkcikgPj0gc2l6ZW9mIChFbGYzMl9FeHRlcm5hbF9FaGRyKSAgKi8KLSsg IEVsZjY0X0V4dGVybmFsX0VoZHIgeF9laGRyNjQ7CS8qIEVsZiBmaWxlIGhlYWRlciwgZXh0ZXJu YWwgZm9ybSAqLwotKyAgRWxmX0ludGVybmFsX0VoZHIgaV9laGRyOwkvKiBFbGYgZmlsZSBoZWFk ZXIsIGludGVybmFsIGZvcm0gKi8KLSsgIGJmZF9zaXplX3R5cGUgeF9waGRyc19zaXplOwotKyAg Z2RiX2J5dGUgKnhfcGhkcnNfcHRyOwotKyAgRWxmX0ludGVybmFsX1BoZHIgKmlfcGhkcnM7Ci0r ICBpbnQgZXJyOwotKyAgdW5zaWduZWQgaW50IGk7Ci0rICBiZmRfdm1hIGxvYWRiYXNlOwotKyAg aW50IGxvYWRiYXNlX3NldDsKLSsKLSsgIGdkYl9hc3NlcnQgKHRlbXBsICE9IE5VTEwpOwotKyAg Z2RiX2Fzc2VydCAoc2l6ZW9mIChFbGY2NF9FeHRlcm5hbF9FaGRyKSA+PSBzaXplb2YgKEVsZjMy X0V4dGVybmFsX0VoZHIpKTsKLSsKLSsgIC8qIFJlYWQgaW4gdGhlIEVMRiBoZWFkZXIgaW4gZXh0 ZXJuYWwgZm9ybWF0LiAgKi8KLSsgIGVyciA9IHRhcmdldF9yZWFkX21lbW9yeSAoZWhkcl92bWEs IChiZmRfYnl0ZSAqKSAmeF9laGRyNjQsIHNpemVvZiB4X2VoZHI2NCk7Ci0rICBpZiAoZXJyKQot KyAgICB7Ci0rICAgICAgaWYgKGJ1aWxkX2lkX3ZlcmJvc2UgPj0gQlVJTERfSURfVkVSQk9TRV9C SU5BUllfUEFSU0UpCi0rICAgICAgICB3YXJuaW5nIChfKCJidWlsZC1pZDogRXJyb3IgcmVhZGlu ZyBFTEYgaGVhZGVyIGF0IGFkZHJlc3MgMHglbHgiKSwKLSsJCSAodW5zaWduZWQgbG9uZykgZWhk cl92bWEpOwotKyAgICAgIHJldHVybiBOVUxMOwotKyAgICB9Ci0rCi0rICAvKiBOb3cgY2hlY2sg dG8gc2VlIGlmIHdlIGhhdmUgYSB2YWxpZCBFTEYgZmlsZSwgYW5kIG9uZSB0aGF0IEJGRCBjYW4K LSsgICAgIG1ha2UgdXNlIG9mLiAgVGhlIG1hZ2ljIG51bWJlciBtdXN0IG1hdGNoLCB0aGUgYWRk cmVzcyBzaXplICgnY2xhc3MnKQotKyAgICAgYW5kIGJ5dGUtc3dhcHBpbmcgbXVzdCBtYXRjaCBv dXIgWFZFQyBlbnRyeS4gICovCi0rCi0rICBpZiAoISBlbGZfZmlsZV9wICgmeF9laGRyNjQpCi0r ICAgICAgfHwgeF9laGRyNjQuZV9pZGVudFtFSV9WRVJTSU9OXSAhPSBFVl9DVVJSRU5UCi0rICAg ICAgfHwgISgoYmZkX2dldF9hcmNoX3NpemUgKHRlbXBsKSA9PSA2NAotKyAgICAgICAgICAgICYm IHhfZWhkcjY0LmVfaWRlbnRbRUlfQ0xBU1NdID09IEVMRkNMQVNTNjQpCi0rICAgICAgICAgICB8 fCAoYmZkX2dldF9hcmNoX3NpemUgKHRlbXBsKSA9PSAzMgotKwkgICAgICAgJiYgeF9laGRyNjQu ZV9pZGVudFtFSV9DTEFTU10gPT0gRUxGQ0xBU1MzMikpKQotKyAgICB7Ci0rICAgICAgaWYgKGJ1 aWxkX2lkX3ZlcmJvc2UgPj0gQlVJTERfSURfVkVSQk9TRV9CSU5BUllfUEFSU0UpCi0rICAgICAg ICB3YXJuaW5nIChfKCJidWlsZC1pZDogVW5yZWNvZ25pemVkIEVMRiBoZWFkZXIgYXQgYWRkcmVz cyAweCVseCIpLAotKwkJICh1bnNpZ25lZCBsb25nKSBlaGRyX3ZtYSk7Ci0rICAgICAgcmV0dXJu IE5VTEw7Ci0rICAgIH0KLSsKLSsgIC8qIENoZWNrIHRoYXQgZmlsZSdzIGJ5dGUgb3JkZXIgbWF0 Y2hlcyB4dmVjJ3MgKi8KLSsgIHN3aXRjaCAoeF9laGRyNjQuZV9pZGVudFtFSV9EQVRBXSkKLSsg ICAgewotKyAgICBjYXNlIEVMRkRBVEEyTVNCOgkJLyogQmlnLWVuZGlhbiAqLwotKyAgICAgIGlm ICghIGJmZF9oZWFkZXJfYmlnX2VuZGlhbiAodGVtcGwpKQotKwl7Ci0rCSAgaWYgKGJ1aWxkX2lk X3ZlcmJvc2UgPj0gQlVJTERfSURfVkVSQk9TRV9CSU5BUllfUEFSU0UpCi0rCSAgICB3YXJuaW5n IChfKCJidWlsZC1pZDogVW5yZWNvZ25pemVkICIKLSsJCSAgICAgICAiYmlnLWVuZGlhbiBFTEYg aGVhZGVyIGF0IGFkZHJlc3MgMHglbHgiKSwKLSsJCSAgICAgKHVuc2lnbmVkIGxvbmcpIGVoZHJf dm1hKTsKLSsJICByZXR1cm4gTlVMTDsKLSsJfQotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIEVM RkRBVEEyTFNCOgkJLyogTGl0dGxlLWVuZGlhbiAqLwotKyAgICAgIGlmICghIGJmZF9oZWFkZXJf bGl0dGxlX2VuZGlhbiAodGVtcGwpKQotKwl7Ci0rCSAgaWYgKGJ1aWxkX2lkX3ZlcmJvc2UgPj0g QlVJTERfSURfVkVSQk9TRV9CSU5BUllfUEFSU0UpCi0rCSAgICB3YXJuaW5nIChfKCJidWlsZC1p ZDogVW5yZWNvZ25pemVkICIKLSsJCSAgICAgICAibGl0dGxlLWVuZGlhbiBFTEYgaGVhZGVyIGF0 IGFkZHJlc3MgMHglbHgiKSwKLSsJCSAgICAgKHVuc2lnbmVkIGxvbmcpIGVoZHJfdm1hKTsKLSsJ ICByZXR1cm4gTlVMTDsKLSsJfQotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIEVMRkRBVEFOT05F OgkJLyogTm8gZGF0YSBlbmNvZGluZyBzcGVjaWZpZWQgKi8KLSsgICAgZGVmYXVsdDoJCQkvKiBV bmtub3duIGRhdGEgZW5jb2Rpbmcgc3BlY2lmaWVkICovCi0rICAgICAgaWYgKGJ1aWxkX2lkX3Zl cmJvc2UgPj0gQlVJTERfSURfVkVSQk9TRV9CSU5BUllfUEFSU0UpCi0rCXdhcm5pbmcgKF8oImJ1 aWxkLWlkOiBVbnJlY29nbml6ZWQgIgotKwkJICAgIkVMRiBoZWFkZXIgZW5kaWFuaXR5IGF0IGFk ZHJlc3MgMHglbHgiKSwKLSsJCSAodW5zaWduZWQgbG9uZykgZWhkcl92bWEpOwotKyAgICAgIHJl dHVybiBOVUxMOwotKyAgICB9Ci0rCi0rICBlbGZfc3dhcF9laGRyX2luICh0ZW1wbCwgJnhfZWhk cjY0LCAmaV9laGRyKTsKLSsKLSsgIC8qIFRoZSBmaWxlIGhlYWRlciB0ZWxscyB3aGVyZSB0byBm aW5kIHRoZSBwcm9ncmFtIGhlYWRlcnMuCi0rICAgICBUaGVzZSBhcmUgd2hhdCB3ZSB1c2UgdG8g YWN0dWFsbHkgY2hvb3NlIHdoYXQgdG8gcmVhZC4gICovCi0rCi0rICBpZiAoaV9laGRyLmVfcGhl bnRzaXplICE9IChiZmRfZ2V0X2FyY2hfc2l6ZSAodGVtcGwpID09IDY0Ci0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA/IHNpemVvZiAoRWxmNjRfRXh0ZXJuYWxfUGhkcikKLSsJCQkgICAg IDogc2l6ZW9mIChFbGYzMl9FeHRlcm5hbF9QaGRyKSkKLSsgICAgICB8fCBpX2VoZHIuZV9waG51 bSA9PSAwKQotKyAgICB7Ci0rICAgICAgaWYgKGJ1aWxkX2lkX3ZlcmJvc2UgPj0gQlVJTERfSURf VkVSQk9TRV9CSU5BUllfUEFSU0UpCi0rCXdhcm5pbmcgKF8oImJ1aWxkLWlkOiBJbnZhbGlkIEVM RiBwcm9ncmFtIGhlYWRlcnMgZnJvbSB0aGUgRUxGIGhlYWRlciAiCi0rCQkgICAiYXQgYWRkcmVz cyAweCVseCIpLCAodW5zaWduZWQgbG9uZykgZWhkcl92bWEpOwotKyAgICAgIHJldHVybiBOVUxM OwotKyAgICB9Ci0rCi0rICB4X3BoZHJzX3NpemUgPSAoYmZkX2dldF9hcmNoX3NpemUgKHRlbXBs KSA9PSA2NCA/IHNpemVvZiAoRWxmNjRfRXh0ZXJuYWxfUGhkcikKLSsJCQkJCQk6IHNpemVvZiAo RWxmMzJfRXh0ZXJuYWxfUGhkcikpOwotKwotKyAgaV9waGRycyA9IChFbGZfSW50ZXJuYWxfUGhk ciAqKSB4bWFsbG9jIChpX2VoZHIuZV9waG51bSAqIChzaXplb2YgKmlfcGhkcnMgKyB4X3BoZHJz X3NpemUpKTsKLSsgIHhfcGhkcnNfcHRyID0gKGdkYl9ieXRlICopICZpX3BoZHJzW2lfZWhkci5l X3BobnVtXTsKLSsgIGVyciA9IHRhcmdldF9yZWFkX21lbW9yeSAoZWhkcl92bWEgKyBpX2VoZHIu ZV9waG9mZiwgKGJmZF9ieXRlICopIHhfcGhkcnNfcHRyLAotKwkJCSAgICBpX2VoZHIuZV9waG51 bSAqIHhfcGhkcnNfc2l6ZSk7Ci0rICBpZiAoZXJyKQotKyAgICB7Ci0rICAgICAgZnJlZSAoaV9w aGRycyk7Ci0rICAgICAgaWYgKGJ1aWxkX2lkX3ZlcmJvc2UgPj0gQlVJTERfSURfVkVSQk9TRV9C SU5BUllfUEFSU0UpCi0rICAgICAgICB3YXJuaW5nIChfKCJidWlsZC1pZDogRXJyb3IgcmVhZGlu ZyAiCi0rCQkgICAiRUxGIHByb2dyYW0gaGVhZGVycyBhdCBhZGRyZXNzIDB4JWx4IiksCi0rCQkg KHVuc2lnbmVkIGxvbmcpIChlaGRyX3ZtYSArIGlfZWhkci5lX3Bob2ZmKSk7Ci0rICAgICAgcmV0 dXJuIE5VTEw7Ci0rICAgIH0KLSsKLSsgIGxvYWRiYXNlID0gZWhkcl92bWE7Ci0rICBsb2FkYmFz ZV9zZXQgPSAwOwotKyAgZm9yIChpID0gMDsgaSA8IGlfZWhkci5lX3BobnVtOyArK2kpCi0rICAg IHsKLSsgICAgICBlbGZfc3dhcF9waGRyX2luICh0ZW1wbCwgKEVsZjY0X0V4dGVybmFsX1BoZHIg KikKLSsJCQkgICAgICAgKHhfcGhkcnNfcHRyICsgaSAqIHhfcGhkcnNfc2l6ZSksICZpX3BoZHJz W2ldKTsKLSsgICAgICAvKiBJQS02NCB2RFNPIG1heSBoYXZlIHR3byBtYXBwaW5ncyBmb3Igb25l IHNlZ21lbnQsIHdoZXJlIG9uZSBtYXBwaW5nCi0rCSBpcyBleGVjdXRhYmxlIG9ubHksIGFuZCBv bmUgaXMgcmVhZCBvbmx5LiAgV2UgbXVzdCBub3QgdXNlIHRoZQotKwkgZXhlY3V0YWJsZSBvbmUg KFBGX1IgaXMgdGhlIGZpcnN0IG9uZSwgUEZfWCB0aGUgc2Vjb25kIG9uZSkuICAqLwotKyAgICAg IGlmIChpX3BoZHJzW2ldLnBfdHlwZSA9PSBQVF9MT0FEICYmIChpX3BoZHJzW2ldLnBfZmxhZ3Mg JiBQRl9SKSkKLSsJewotKwkgIC8qIE9ubHkgdGhlIGZpcnN0IFBUX0xPQUQgc2VnbWVudCBpbmRp Y2F0ZXMgdGhlIGZpbGUgYmlhcy4KLSsJICAgICBOZXh0IHNlZ21lbnRzIG1heSBoYXZlIFBfVkFE RFIgYXJiaXRyYXJpbHkgaGlnaGVyLgotKwkgICAgIElmIHRoZSBmaXJzdCBzZWdtZW50IGhhcyBQ X1ZBRERSIHplcm8gYW55IG5leHQgc2VnbWVudCBtdXN0IG5vdAotKwkgICAgIGNvbmZ1c2UgdXMs IHRoZSBmaXJzdCBvbmUgc2V0cyBMT0FEQkFTRSBjZXJ0YWlubHkgZW5vdWdoLiAgKi8KLSsJICBp ZiAoIWxvYWRiYXNlX3NldCAmJiBpX3BoZHJzW2ldLnBfb2Zmc2V0ID09IDApCi0rCSAgICB7Ci0r CSAgICAgIGxvYWRiYXNlID0gZWhkcl92bWEgLSBpX3BoZHJzW2ldLnBfdmFkZHI7Ci0rCSAgICAg IGxvYWRiYXNlX3NldCA9IDE7Ci0rCSAgICB9Ci0rCX0KLSsgICAgfQotKwotKyAgaWYgKGJ1aWxk X2lkX3ZlcmJvc2UgPj0gQlVJTERfSURfVkVSQk9TRV9CSU5BUllfUEFSU0UpCi0rICAgIHdhcm5p bmcgKF8oImJ1aWxkLWlkOiBGb3VuZCBFTEYgaGVhZGVyIGF0IGFkZHJlc3MgMHglbHgsIGxvYWRi YXNlIDB4JWx4IiksCi0rCSAgICAgKHVuc2lnbmVkIGxvbmcpIGVoZHJfdm1hLCAodW5zaWduZWQg bG9uZykgbG9hZGJhc2UpOwotKwotKyAgKmVfcGhudW1fcG9pbnRlciA9IGlfZWhkci5lX3BobnVt OwotKyAgKmxvYWRiYXNlX3BvaW50ZXIgPSBsb2FkYmFzZTsKLSsgIHJldHVybiBpX3BoZHJzOwot K30KLSsKLSsvKiBCVUlMRF9JRF9BRERSX0dFVCBnZXRzIEFERFIgbG9jYXRlZCBzb21ld2hlcmUg aW4gdGhlIG9iamVjdC4KLSsgICBGaW5kIHRoZSBmaXJzdCBzZWN0aW9uIGJlZm9yZSBBRERSIGNv bnRhaW5pbmcgYW4gRUxGIGhlYWRlci4KLSsgICBXZSByZWx5IG9uIHRoZSBmYWN0IHRoZSBzZWN0 aW9ucyBmcm9tIG11bHRpcGxlIGZpbGVzIGRvIG5vdCBtaXguCi0rICAgRklYTUU6IFdlIHNob3Vs ZCBjaGVjayBBRERSIGlzIGNvbnRhaW5lZCBfaW5zaWRlXyB0aGUgc2VjdGlvbiB3aXRoIHBvc3Np Ymx5Ci0rICAgbWlzc2luZyBjb250ZW50IChQX0ZJTEVTWiA8IFBfTUVNU1opLiAgVGhlc2Ugb21p dHRlZCBzZWN0aW9ucyBhcmUgY3VycmVudGx5Ci0rICAgaGlkZGVuIGJ5IF9CRkRfRUxGX01BS0Vf U0VDVElPTl9GUk9NX1BIRFIuICAqLwotKwotK3N0YXRpYyBDT1JFX0FERFIgYnVpbGRfaWRfYWRk cjsKLStzdHJ1Y3QgYnVpbGRfaWRfYWRkcl9zZWN0Ci0rICB7Ci0rICAgIHN0cnVjdCBidWlsZF9p ZF9hZGRyX3NlY3QgKm5leHQ7Ci0rICAgIGFzZWN0aW9uICpzZWN0OwotKyAgfTsKLStzdGF0aWMg c3RydWN0IGJ1aWxkX2lkX2FkZHJfc2VjdCAqYnVpbGRfaWRfYWRkcl9zZWN0OwotKwotK3N0YXRp YyB2b2lkIGJ1aWxkX2lkX2FkZHJfY2FuZGlkYXRlIChiZmQgKmFiZmQsIGFzZWN0aW9uICpzZWN0 LCB2b2lkICpvYmopCi0rewotKyAgaWYgKGJ1aWxkX2lkX2FkZHIgPj0gYmZkX3NlY3Rpb25fdm1h IChzZWN0KSkKLSsgICAgewotKyAgICAgIHN0cnVjdCBidWlsZF9pZF9hZGRyX3NlY3QgKmNhbmRp ZGF0ZTsKLSsKLSsgICAgICBjYW5kaWRhdGUgPSAoc3RydWN0IGJ1aWxkX2lkX2FkZHJfc2VjdCAq KSB4bWFsbG9jIChzaXplb2YgKmNhbmRpZGF0ZSk7Ci0rICAgICAgY2FuZGlkYXRlLT5uZXh0ID0g YnVpbGRfaWRfYWRkcl9zZWN0OwotKyAgICAgIGJ1aWxkX2lkX2FkZHJfc2VjdCA9IGNhbmRpZGF0 ZTsKLSsgICAgICBjYW5kaWRhdGUtPnNlY3QgPSBzZWN0OwotKyAgICB9Ci0rfQotKwotK3N0cnVj dCBiZmRfYnVpbGRfaWQgKgotK2J1aWxkX2lkX2FkZHJfZ2V0IChDT1JFX0FERFIgYWRkcikKLSt7 Ci0rICBzdHJ1Y3QgYnVpbGRfaWRfYWRkcl9zZWN0ICpjYW5kaWRhdGU7Ci0rICBzdHJ1Y3QgYmZk X2J1aWxkX2lkICpyZXR2YWwgPSBOVUxMOwotKyAgRWxmX0ludGVybmFsX1BoZHIgKmlfcGhkciA9 IE5VTEw7Ci0rICBiZmRfdm1hIGxvYWRiYXNlID0gMDsKLSsgIHVuc2lnbmVkIGVfcGhudW0gPSAw OwotKwotKyAgaWYgKGN1cnJlbnRfcHJvZ3JhbV9zcGFjZS0+Y29yZV9iZmQgKCkgPT0gTlVMTCkK LSsgICAgcmV0dXJuIE5VTEw7Ci0rCi0rICBidWlsZF9pZF9hZGRyID0gYWRkcjsKLSsgIGdkYl9h c3NlcnQgKGJ1aWxkX2lkX2FkZHJfc2VjdCA9PSBOVUxMKTsKLSsgIGJmZF9tYXBfb3Zlcl9zZWN0 aW9ucyAoY3VycmVudF9wcm9ncmFtX3NwYWNlLT5jb3JlX2JmZCAoKSwKLSsJCQkgYnVpbGRfaWRf YWRkcl9jYW5kaWRhdGUsIE5VTEwpOwotKwotKyAgLyogU2VjdGlvbnMgYXJlIHNvcnRlZCBpbiB0 aGUgaGlnaC10by1sb3cgVk1BcyBvcmRlci4KLSsgICAgIFN0b3AgdGhlIHNlYXJjaCBvbiB0aGUg Zmlyc3QgRUxGIGhlYWRlciB3ZSBmaW5kLgotKyAgICAgRG8gbm90IGNvbnRpbnVlIHRoZSBzZWFy Y2ggZXZlbiBpZiBpdCBkb2VzIG5vdCBjb250YWluIE5UX0dOVV9CVUlMRF9JRC4gICovCi0rCi0r ICBmb3IgKGNhbmRpZGF0ZSA9IGJ1aWxkX2lkX2FkZHJfc2VjdDsgY2FuZGlkYXRlICE9IE5VTEw7 Ci0rICAgICAgIGNhbmRpZGF0ZSA9IGNhbmRpZGF0ZS0+bmV4dCkKLSsgICAgewotKyAgICAgIGlf cGhkciA9IGVsZl9nZXRfcGhkciAoY3VycmVudF9wcm9ncmFtX3NwYWNlLT5jb3JlX2JmZCAoKSwK LSsJCQkgICAgIGJmZF9zZWN0aW9uX3ZtYSAoY2FuZGlkYXRlLT5zZWN0KSwKLSsJCQkgICAgICZl X3BobnVtLCAmbG9hZGJhc2UpOwotKyAgICAgIGlmIChpX3BoZHIgIT0gTlVMTCkKLSsJYnJlYWs7 Ci0rICAgIH0KLSsKLSsgIGlmIChpX3BoZHIgIT0gTlVMTCkKLSsgICAgewotKyAgICAgIHJldHZh bCA9IGJ1aWxkX2lkX3BoZHJfZ2V0IChjdXJyZW50X3Byb2dyYW1fc3BhY2UtPmNvcmVfYmZkICgp LCBsb2FkYmFzZSwgZV9waG51bSwgaV9waGRyKTsKLSsgICAgICB4ZnJlZSAoaV9waGRyKTsKLSsg ICAgfQotKwotKyAgd2hpbGUgKGJ1aWxkX2lkX2FkZHJfc2VjdCAhPSBOVUxMKQotKyAgICB7Ci0r ICAgICAgY2FuZGlkYXRlID0gYnVpbGRfaWRfYWRkcl9zZWN0OwotKyAgICAgIGJ1aWxkX2lkX2Fk ZHJfc2VjdCA9IGNhbmRpZGF0ZS0+bmV4dDsKLSsgICAgICB4ZnJlZSAoY2FuZGlkYXRlKTsKLSsg ICAgfQotKwotKyAgcmV0dXJuIHJldHZhbDsKLSt9Ci0rCi0gLyogU2VlIGJ1aWxkLWlkLmguICAq LwotIAotIGludAotQEAgLTczLDYzICs0NzQsMTY2IEBAIGJ1aWxkX2lkX3ZlcmlmeSAoYmZkICph YmZkLCBzaXplX3QgY2hlY2tfbGVuLCBjb25zdCBiZmRfYnl0ZSAqY2hlY2spCi0gICByZXR1cm4g cmV0dmFsOwotIH0KLSAKLStzdGF0aWMgY2hhciAqCi0rbGlua19yZXNvbHZlIChjb25zdCBjaGFy ICpzeW1saW5rLCBpbnQgbGV2ZWwpCi0rewotKyAgY2hhciBidWZbUEFUSF9NQVggKyAxXSwgKnJl dHZhbDsKLSsgIGdkYjo6dW5pcXVlX3htYWxsb2NfcHRyPGNoYXI+IHRhcmdldDsKLSsgIHNzaXpl X3QgZ290OwotKwotKyAgaWYgKGxldmVsID4gMTApCi0rICAgIHJldHVybiB4c3RyZHVwIChzeW1s aW5rKTsKLSsKLSsgIGdvdCA9IHJlYWRsaW5rIChzeW1saW5rLCBidWYsIHNpemVvZiAoYnVmKSk7 Ci0rICBpZiAoZ290IDwgMCB8fCBnb3QgPj0gc2l6ZW9mIChidWYpKQotKyAgICByZXR1cm4geHN0 cmR1cCAoc3ltbGluayk7Ci0rICBidWZbZ290XSA9ICdcMCc7Ci0rCi0rICBpZiAoSVNfQUJTT0xV VEVfUEFUSCAoYnVmKSkKLSsgICAgdGFyZ2V0ID0gbWFrZV91bmlxdWVfeHN0cmR1cCAoYnVmKTsK LSsgIGVsc2UKLSsgICAgewotKyAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIGRpciAobGRpcm5hbWUg KHN5bWxpbmspKTsKLSsKLSsgICAgICB0YXJnZXQgPSB4c3RycHJpbnRmICgiJXMiCi0rI2lmbmRl ZiBIQVZFX0RPU19CQVNFRF9GSUxFX1NZU1RFTQotKwkJCSAgICIvIgotKyNlbHNlIC8qIEhBVkVf RE9TX0JBU0VEX0ZJTEVfU1lTVEVNICovCi0rCQkJICAgIlxcIgotKyNlbmRpZiAvKiBIQVZFX0RP U19CQVNFRF9GSUxFX1NZU1RFTSAqLwotKwkJCSAgICIlcyIsIGRpci5jX3N0cigpLCBidWYpOwot KyAgICB9Ci0rCi0rICByZXR2YWwgPSBsaW5rX3Jlc29sdmUgKHRhcmdldC5nZXQgKCksIGxldmVs ICsgMSk7Ci0rICByZXR1cm4gcmV0dmFsOwotK30KLSsKLSAvKiBIZWxwZXIgZm9yIGJ1aWxkX2lk X3RvX2RlYnVnX2JmZC4gIExJTksgaXMgYSBwYXRoIHRvIGEgcG90ZW50aWFsCi0gICAgYnVpbGQt aWQtYmFzZWQgc2VwYXJhdGUgZGVidWcgZmlsZSwgcG90ZW50aWFsbHkgYSBzeW1saW5rIHRvIHRo ZSByZWFsIGZpbGUuCi0gICAgSWYgdGhlIGZpbGUgZXhpc3RzIGFuZCBtYXRjaGVzIEJVSUxEX0lE LCByZXR1cm4gYSBCRkQgcmVmZXJlbmNlIHRvIGl0LiAgKi8KLSAKLSBzdGF0aWMgZ2RiX2JmZF9y ZWZfcHRyCi0tYnVpbGRfaWRfdG9fZGVidWdfYmZkXzEgKGNvbnN0IHN0ZDo6c3RyaW5nICZsaW5r LCBzaXplX3QgYnVpbGRfaWRfbGVuLAotLQkJCSBjb25zdCBiZmRfYnl0ZSAqYnVpbGRfaWQpCi0r YnVpbGRfaWRfdG9fZGVidWdfYmZkXzEgKGNvbnN0IHN0ZDo6c3RyaW5nICZvcmlnX2xpbmssIHNp emVfdCBidWlsZF9pZF9sZW4sCi0rCQkJIGNvbnN0IGJmZF9ieXRlICpidWlsZF9pZCwgY2hhciAq KmxpbmtfcmV0dXJuKQotIHsKLSsgIGdkYl9iZmRfcmVmX3B0ciByZXRfYmZkID0ge307Ci0rICBz dGQ6OnN0cmluZyByZXRfbGluazsKLSsKLSAgIGlmIChzZXBhcmF0ZV9kZWJ1Z19maWxlX2RlYnVn KQotICAgICB7Ci0tICAgICAgZ2RiX3ByaW50ZiAoZ2RiX3N0ZGxvZywgXygiICBUcnlpbmcgJXMu Li4iKSwgbGluay5jX3N0ciAoKSk7Ci0tICAgICAgZ2RiX2ZsdXNoIChnZGJfc3RkbG9nKTsKLSsg ICAgICBnZGJfcHJpbnRmIChnZGJfc3RkbG9nLCBfKCIgIFRyeWluZyAlcy4uLiIpLCBvcmlnX2xp bmsuY19zdHIgKCkpOwotKyAgICAgIGdkYl9mbHVzaCAoZ2RiX3N0ZG91dCk7Ci0gICAgIH0KLSAK LS0gIC8qIGxyZWFscGF0aCgpIGlzIGV4cGVuc2l2ZSBldmVuIGZvciB0aGUgdXN1YWxseSBub24t ZXhpc3RlbnQgZmlsZXMuICAqLwotLSAgZ2RiOjp1bmlxdWVfeG1hbGxvY19wdHI8Y2hhcj4gZmls ZW5hbWVfaG9sZGVyOwotLSAgY29uc3QgY2hhciAqZmlsZW5hbWUgPSBudWxscHRyOwotLSAgaWYg KGlzX3RhcmdldF9maWxlbmFtZSAobGluaykpCi0tICAgIGZpbGVuYW1lID0gbGluay5jX3N0ciAo KTsKLS0gIGVsc2UgaWYgKGFjY2VzcyAobGluay5jX3N0ciAoKSwgRl9PSykgPT0gMCkKLSsgIGZv ciAodW5zaWduZWQgc2Vxbm8gPSAwOzsgc2Vxbm8rKykKLSAgICAgewotLSAgICAgIGZpbGVuYW1l X2hvbGRlci5yZXNldCAobHJlYWxwYXRoIChsaW5rLmNfc3RyICgpKSk7Ci0tICAgICAgZmlsZW5h bWUgPSBmaWxlbmFtZV9ob2xkZXIuZ2V0ICgpOwotLSAgICB9Ci0rICAgICAgc3RkOjpzdHJpbmcg bGluayA9IG9yaWdfbGluazsKLSAKLS0gIGlmIChmaWxlbmFtZSA9PSBOVUxMKQotLSAgICB7Ci0t ICAgICAgaWYgKHNlcGFyYXRlX2RlYnVnX2ZpbGVfZGVidWcpCi0tCWdkYl9wcmludGYgKGdkYl9z dGRsb2csCi0tCQkgICAgXygiIG5vLCB1bmFibGUgdG8gY29tcHV0ZSByZWFsIHBhdGhcbiIpKTsK LSsgICAgICBpZiAoc2Vxbm8gPiAwKQotKwl7Ci0rCSAgLyogVGhlcmUgY2FuIGJlIG11bHRpcGxl IGJ1aWxkLWlkIHN5bWxpbmtzIHBvaW50aW5nIHRvIHJlYWwgZmlsZXMKLSsJICAgICB3aXRoIHRo ZSBzYW1lIGJ1aWxkLWlkIChzdWNoIGFzIGhhcmQgbGlua3MpLiAgU29tZSBvZiB0aGUgcmVhbAot KwkgICAgIGZpbGVzIG1heSBub3QgYmUgaW5zdGFsbGVkLiAgKi8KLSAKLS0gICAgICByZXR1cm4g e307Ci0tICAgIH0KLSsJICBzdHJpbmdfYXBwZW5kZiAobGluaywgIi4ldSIsIHNlcW5vKTsKLSsJ fQotIAotLSAgLyogV2UgZXhwZWN0IHRvIGJlIHNpbGVudCBvbiB0aGUgbm9uLWV4aXN0aW5nIGZp bGVzLiAgKi8KLS0gIGdkYl9iZmRfcmVmX3B0ciBkZWJ1Z19iZmQgPSBnZGJfYmZkX29wZW4gKGZp bGVuYW1lLCBnbnV0YXJnZXQpOwotKyAgICAgIHJldF9saW5rID0gbGluazsKLSAKLS0gIGlmIChk ZWJ1Z19iZmQgPT0gTlVMTCkKLS0gICAgewotLSAgICAgIGlmIChzZXBhcmF0ZV9kZWJ1Z19maWxl X2RlYnVnKQotLQlnZGJfcHJpbnRmIChnZGJfc3RkbG9nLCBfKCIgbm8sIHVuYWJsZSB0byBvcGVu LlxuIikpOwotKyAgICAgIHN0cnVjdCBzdGF0IHN0YXRidWZfdHJhc2g7Ci0rCi0rICAgICAgLyog YGFjY2VzcycgYXV0b21hdGljYWxseSBkZXJlZmVyZW5jZXMgTElOSy4gICovCi0rICAgICAgaWYg KGxzdGF0IChsaW5rLmNfc3RyICgpLCAmc3RhdGJ1Zl90cmFzaCkgIT0gMCkKLSsJewotKwkgIC8q IFN0b3AgaW5jcmVhc2luZyBTRVFOTy4gICovCi0rCSAgYnJlYWs7Ci0rCX0KLSsKLSsgICAgICAv KiBscmVhbHBhdGgoKSBpcyBleHBlbnNpdmUgZXZlbiBmb3IgdGhlIHVzdWFsbHkgbm9uLWV4aXN0 ZW50IGZpbGVzLiAgKi8KLSsgICAgICBnZGI6OnVuaXF1ZV94bWFsbG9jX3B0cjxjaGFyPiBmaWxl bmFtZV9ob2xkZXI7Ci0rICAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUgPSBudWxscHRyOwotKyAg ICAgIGlmIChzdGFydHN3aXRoIChsaW5rLCBUQVJHRVRfU1lTUk9PVF9QUkVGSVgpKQotKwlmaWxl bmFtZSA9IGxpbmsuY19zdHIgKCk7Ci0rICAgICAgZWxzZSBpZiAoYWNjZXNzIChsaW5rLmNfc3Ry ICgpLCBGX09LKSA9PSAwKQotKwl7Ci0rCSAgZmlsZW5hbWVfaG9sZGVyLnJlc2V0IChscmVhbHBh dGggKGxpbmsuY19zdHIgKCkpKTsKLSsJICBmaWxlbmFtZSA9IGZpbGVuYW1lX2hvbGRlci5nZXQg KCk7Ci0rCX0KLSsKLSsgICAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCkKLSsJewotKwkgIGlmIChz ZXBhcmF0ZV9kZWJ1Z19maWxlX2RlYnVnKQotKwkgICAgZ2RiX3ByaW50ZiAoZ2RiX3N0ZGxvZywK LSsJICAgICAgICAgICAgICAgICAgICAgICBfKCIgbm8sIHVuYWJsZSB0byBjb21wdXRlIHJlYWwg cGF0aFxuIikpOwotKwotKwkgIGNvbnRpbnVlOwotKwl9Ci0rCi0rICAgICAgLyogV2UgZXhwZWN0 IHRvIGJlIHNpbGVudCBvbiB0aGUgbm9uLWV4aXN0aW5nIGZpbGVzLiAgKi8KLSsgICAgICBnZGJf YmZkX3JlZl9wdHIgZGVidWdfYmZkID0gZ2RiX2JmZF9vcGVuIChmaWxlbmFtZSwgZ251dGFyZ2V0 KTsKLSAKLS0gICAgICByZXR1cm4ge307Ci0rICAgICAgaWYgKGRlYnVnX2JmZCA9PSBOVUxMKQot Kwl7Ci0rCSAgaWYgKHNlcGFyYXRlX2RlYnVnX2ZpbGVfZGVidWcpCi0rCSAgICBnZGJfcHJpbnRm IChnZGJfc3RkbG9nLCBfKCIgbm8sIHVuYWJsZSB0byBvcGVuLlxuIikpOwotKwotKwkgIGNvbnRp bnVlOwotKwl9Ci0rCi0rICAgICAgaWYgKCFidWlsZF9pZF92ZXJpZnkgKGRlYnVnX2JmZC5nZXQo KSwgYnVpbGRfaWRfbGVuLCBidWlsZF9pZCkpCi0rCXsKLSsJICBpZiAoc2VwYXJhdGVfZGVidWdf ZmlsZV9kZWJ1ZykKLSsJICAgIGdkYl9wcmludGYgKGdkYl9zdGRsb2csCi0rCSAgICAgICAgICAg ICAgICBfKCIgbm8sIGJ1aWxkLWlkIGRvZXMgbm90IG1hdGNoLlxuIikpOwotKwotKwkgIGNvbnRp bnVlOwotKwl9Ci0rCi0rICAgICAgcmV0X2JmZCA9IGRlYnVnX2JmZDsKLSsgICAgICBicmVhazsK LSAgICAgfQotIAotLSAgaWYgKCFidWlsZF9pZF92ZXJpZnkgKGRlYnVnX2JmZC5nZXQoKSwgYnVp bGRfaWRfbGVuLCBidWlsZF9pZCkpCi0rICBzdGQ6OnN0cmluZyBsaW5rX2FsbDsKLSsKLSsgIGlm IChyZXRfYmZkICE9IE5VTEwpCi0gICAgIHsKLSAgICAgICBpZiAoc2VwYXJhdGVfZGVidWdfZmls ZV9kZWJ1ZykKLS0JZ2RiX3ByaW50ZiAoZ2RiX3N0ZGxvZywgXygiIG5vLCBidWlsZC1pZCBkb2Vz IG5vdCBtYXRjaC5cbiIpKTsKLS0KLS0gICAgICByZXR1cm4ge307Ci0rCWdkYl9wcmludGYgKGdk Yl9zdGRsb2csIF8oIiB5ZXMhXG4iKSk7Ci0rICAgIH0KLSsgIGVsc2UKLSsgICAgewotKyAgICAg IC8qIElmIG5vbmUgb2YgdGhlIHJlYWwgZmlsZXMgaXMgZm91bmQgcmVwb3J0IGFzIG1pc3Npbmcg ZmlsZQotKwkgYWx3YXlzIHRoZSBub24tLiV1LXN1ZmZpeGVkIGZpbGUuICAqLwotKyAgICAgIHN0 ZDo6c3RyaW5nIGxpbmswID0gb3JpZ19saW5rOwotKwotKyAgICAgIC8qIElmIHRoZSBzeW1saW5r IGhhcyB0YXJnZXQgcmVxdWVzdCB0byBpbnN0YWxsIHRoZSB0YXJnZXQuCi0rCSBCQVNFLWRlYnVn aW5mby5ycG0gY29udGFpbnMgdGhlIHN5bWxpbmsgYnV0IEJBU0UucnBtIG1heSBiZSBtaXNzaW5n LgotKwkgaHR0cHM6Ly9idWd6aWxsYS5yZWRoYXQuY29tL3Nob3dfYnVnLmNnaT9pZD05ODExNTQg ICovCi0rICAgICAgc3RkOjpzdHJpbmcgbGluazBfcmVzb2x2ZWQgKGxpbmtfcmVzb2x2ZSAobGlu azAuY19zdHIgKCksIDApKTsKLSsKLSsgICAgICBpZiAobGlua19hbGwuZW1wdHkgKCkpCi0rCWxp bmtfYWxsID0gbGluazBfcmVzb2x2ZWQ7Ci0rICAgICAgZWxzZQotKwl7Ci0rCSAgLyogVXNlIHdo aXRlc3BhY2UgaW5zdGVhZCBvZiBESVJOQU1FX1NFUEFSQVRPUiB0byBiZSBjb21wYXRpYmxlIHdp dGgKLSsJICAgICBpdHMgcG9zc2libGUgdXNlIGFzIGFuIGFyZ3VtZW50IGZvciBpbnN0YWxsYXRp b24gY29tbWFuZC4gICovCi0rCSAgbGlua19hbGwgKz0gIiAiICsgbGluazBfcmVzb2x2ZWQ7Ci0r CX0KLSAgICAgfQotIAotLSAgaWYgKHNlcGFyYXRlX2RlYnVnX2ZpbGVfZGVidWcpCi0tICAgIGdk Yl9wcmludGYgKGdkYl9zdGRsb2csIF8oIiB5ZXMhXG4iKSk7Ci0rICBpZiAobGlua19yZXR1cm4g IT0gTlVMTCkKLSsgICAgewotKyAgICAgIGlmIChyZXRfYmZkICE9IE5VTEwpCi0rCXsKLSsJICAq bGlua19yZXR1cm4gPSB4c3RyZHVwIChyZXRfbGluay5jX3N0ciAoKSk7Ci0rCX0KLSsgICAgICBl bHNlCi0rCXsKLSsJICAqbGlua19yZXR1cm4gPSB4c3RyZHVwIChsaW5rX2FsbC5jX3N0ciAoKSk7 Ci0rCX0KLSsgICAgfQotIAotLSAgcmV0dXJuIGRlYnVnX2JmZDsKLSsgIHJldHVybiByZXRfYmZk OwotIH0KLSAKLSAvKiBDb21tb24gY29kZSBmb3IgZmluZGluZyBCRkRzIG9mIGEgZ2l2ZW4gYnVp bGQtaWQuICBUaGlzIGZ1bmN0aW9uCi1AQCAtMTM4LDcgKzY0Miw3IEBAIGJ1aWxkX2lkX3RvX2Rl YnVnX2JmZF8xIChjb25zdCBzdGQ6OnN0cmluZyAmbGluaywgc2l6ZV90IGJ1aWxkX2lkX2xlbiwK LSAKLSBzdGF0aWMgZ2RiX2JmZF9yZWZfcHRyCi0gYnVpbGRfaWRfdG9fYmZkX3N1ZmZpeCAoc2l6 ZV90IGJ1aWxkX2lkX2xlbiwgY29uc3QgYmZkX2J5dGUgKmJ1aWxkX2lkLAotLQkJCWNvbnN0IGNo YXIgKnN1ZmZpeCkKLSsJCQljb25zdCBjaGFyICpzdWZmaXgsIGNoYXIgKipsaW5rX3JldHVybikK LSB7Ci0gICAvKiBLZWVwIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgc28gdGhhdCBERUJVR19GSUxF X0RJUkVDVE9SWSBiZWluZyAiIiB3aWxsCi0gICAgICBjYXVzZSAiLy5idWlsZC1pZC8uLi4iIGxv b2t1cHMuICAqLwotQEAgLTE2MSwxNiArNjY1LDE3IEBAIGJ1aWxkX2lkX3RvX2JmZF9zdWZmaXgg KHNpemVfdCBidWlsZF9pZF9sZW4sIGNvbnN0IGJmZF9ieXRlICpidWlsZF9pZCwKLSAgICAgICBp ZiAoc2l6ZSA+IDApCi0gCXsKLSAJICBzaXplLS07Ci0tCSAgc3RyaW5nX2FwcGVuZGYgKGxpbmss ICIlMDJ4LyIsICh1bnNpZ25lZCkgKmRhdGErKyk7Ci0rCSAgc3RyaW5nX2FwcGVuZGYgKGxpbmss ICIlMDJ4IiwgKHVuc2lnbmVkKSAqZGF0YSsrKTsKLSAJfQotLQotKyAgICAgIGlmIChzaXplID4g MCkKLSsJbGluayArPSAiLyI7Ci0gICAgICAgd2hpbGUgKHNpemUtLSA+IDApCi0gCXN0cmluZ19h cHBlbmRmIChsaW5rLCAiJTAyeCIsICh1bnNpZ25lZCkgKmRhdGErKyk7Ci0gCi0gICAgICAgbGlu ayArPSBzdWZmaXg7Ci0gCi0gICAgICAgZ2RiX2JmZF9yZWZfcHRyIGRlYnVnX2JmZAotLQk9IGJ1 aWxkX2lkX3RvX2RlYnVnX2JmZF8xIChsaW5rLCBidWlsZF9pZF9sZW4sIGJ1aWxkX2lkKTsKLSsJ PSBidWlsZF9pZF90b19kZWJ1Z19iZmRfMSAobGluaywgYnVpbGRfaWRfbGVuLCBidWlsZF9pZCwg bGlua19yZXR1cm4pOwotICAgICAgIGlmIChkZWJ1Z19iZmQgIT0gTlVMTCkKLSAJcmV0dXJuIGRl YnVnX2JmZDsKLSAKLUBAIC0xODEsNyArNjg2LDcgQEAgYnVpbGRfaWRfdG9fYmZkX3N1ZmZpeCAo c2l6ZV90IGJ1aWxkX2lkX2xlbiwgY29uc3QgYmZkX2J5dGUgKmJ1aWxkX2lkLAotICAgICAgIGlm ICghZ2RiX3N5c3Jvb3QuZW1wdHkgKCkpCi0gCXsKLSAJICBsaW5rID0gZ2RiX3N5c3Jvb3QgKyBs aW5rOwotLQkgIGRlYnVnX2JmZCA9IGJ1aWxkX2lkX3RvX2RlYnVnX2JmZF8xIChsaW5rLCBidWls ZF9pZF9sZW4sIGJ1aWxkX2lkKTsKLSsJICBkZWJ1Z19iZmQgPSBidWlsZF9pZF90b19kZWJ1Z19i ZmRfMSAobGluaywgYnVpbGRfaWRfbGVuLCBidWlsZF9pZCwgTlVMTCk7Ci0gCSAgaWYgKGRlYnVn X2JmZCAhPSBOVUxMKQotIAkgICAgcmV0dXJuIGRlYnVnX2JmZDsKLSAJfQotQEAgLTE5MCwyMCAr Njk1LDE3OCBAQCBidWlsZF9pZF90b19iZmRfc3VmZml4IChzaXplX3QgYnVpbGRfaWRfbGVuLCBj b25zdCBiZmRfYnl0ZSAqYnVpbGRfaWQsCi0gICByZXR1cm4ge307Ci0gfQotIAotK2NoYXIgKgot K2J1aWxkX2lkX3RvX2ZpbGVuYW1lIChjb25zdCBzdHJ1Y3QgYmZkX2J1aWxkX2lkICpidWlsZF9p ZCwgY2hhciAqKmxpbmtfcmV0dXJuKQotK3sKLSsgIGdkYl9iZmRfcmVmX3B0ciBhYmZkOwotKyAg Y2hhciAqcmVzdWx0OwotKwotKyAgYWJmZCA9IGJ1aWxkX2lkX3RvX2V4ZWNfYmZkIChidWlsZF9p ZC0+c2l6ZSwgYnVpbGRfaWQtPmRhdGEsIGxpbmtfcmV0dXJuKTsKLSsgIGlmIChhYmZkID09IE5V TEwpCi0rICAgIHJldHVybiBOVUxMOwotKwotKyAgcmVzdWx0ID0geHN0cmR1cCAoYmZkX2dldF9m aWxlbmFtZSAoYWJmZC5nZXQgKCkpKTsKLSsgIHJldHVybiByZXN1bHQ7Ci0rfQotKwotKy8qIFRo aXMgTUlTU0lOR19GSUxFUEFJUl9IQVNIIHRyYWNrZXIgaXMgdXNlZCBvbmx5IGZvciB0aGUgZHVw bGljaXRlIG1lc3NhZ2VzCi0rICAgICB5dW0gLS1lbmFibGVyZXBvPScqZGVidWcqJyBpbnN0YWxs IC4uLgotKyAgIGF2b2lkYW5jZS4gICovCi0rCi0rc3RydWN0IG1pc3NpbmdfZmlsZXBhaXIKLSsg IHsKLSsgICAgY2hhciAqYmluYXJ5OwotKyAgICBjaGFyICpkZWJ1ZzsKLSsgICAgY2hhciBkYXRh WzFdOwotKyAgfTsKLSsKLStzdGF0aWMgc3RydWN0IGh0YWIgKm1pc3NpbmdfZmlsZXBhaXJfaGFz aDsKLStzdGF0aWMgc3RydWN0IG9ic3RhY2sgbWlzc2luZ19maWxlcGFpcl9vYnN0YWNrOwotKwot K3N0YXRpYyB2b2lkICoKLSttaXNzaW5nX2ZpbGVwYWlyX3hjYWxsb2MgKHNpemVfdCBubWVtYiwg c2l6ZV90IG5tZW1iX3NpemUpCi0rewotKyAgdm9pZCAqcmV0dmFsOwotKyAgc2l6ZV90IHNpemUg PSBubWVtYiAqIG5tZW1iX3NpemU7Ci0rCi0rICByZXR2YWwgPSBvYnN0YWNrX2FsbG9jICgmbWlz c2luZ19maWxlcGFpcl9vYnN0YWNrLCBzaXplKTsKLSsgIG1lbXNldCAocmV0dmFsLCAwLCBzaXpl KTsKLSsgIHJldHVybiByZXR2YWw7Ci0rfQotKwotK3N0YXRpYyBoYXNodmFsX3QKLSttaXNzaW5n X2ZpbGVwYWlyX2hhc2hfZnVuYyAoY29uc3Qgc3RydWN0IG1pc3NpbmdfZmlsZXBhaXIgKmVsZW0p Ci0rewotKyAgaGFzaHZhbF90IHJldHZhbCA9IDA7Ci0rCi0rICByZXR2YWwgXj0gaHRhYl9oYXNo X3N0cmluZyAoZWxlbS0+YmluYXJ5KTsKLSsgIGlmIChlbGVtLT5kZWJ1ZyAhPSBOVUxMKQotKyAg ICByZXR2YWwgXj0gaHRhYl9oYXNoX3N0cmluZyAoZWxlbS0+ZGVidWcpOwotKwotKyAgcmV0dXJu IHJldHZhbDsKLSt9Ci0rCi0rc3RhdGljIGludAotK21pc3NpbmdfZmlsZXBhaXJfZXEgKGNvbnN0 IHN0cnVjdCBtaXNzaW5nX2ZpbGVwYWlyICplbGVtMSwKLSsJCSAgICAgICBjb25zdCBzdHJ1Y3Qg bWlzc2luZ19maWxlcGFpciAqZWxlbTIpCi0rewotKyAgcmV0dXJuIHN0cmNtcCAoZWxlbTEtPmJp bmFyeSwgZWxlbTItPmJpbmFyeSkgPT0gMAotKyAgICAgICAgICYmICgoZWxlbTEtPmRlYnVnID09 IE5VTEwpID09IChlbGVtMi0+ZGVidWcgPT0gTlVMTCkpCi0rICAgICAgICAgJiYgKGVsZW0xLT5k ZWJ1ZyA9PSBOVUxMIHx8IHN0cmNtcCAoZWxlbTEtPmRlYnVnLCBlbGVtMi0+ZGVidWcpID09IDAp OwotK30KLSsKLStzdGF0aWMgdm9pZAotK21pc3NpbmdfZmlsZXBhaXJfY2hhbmdlICh2b2lkKQot K3sKLSsgIGlmIChtaXNzaW5nX2ZpbGVwYWlyX2hhc2ggIT0gTlVMTCkKLSsgICAgewotKyAgICAg IG9ic3RhY2tfZnJlZSAoJm1pc3NpbmdfZmlsZXBhaXJfb2JzdGFjaywgTlVMTCk7Ci0rICAgICAg LyogQWxsIHRoZWlyIG1lbW9yeSBjYW1lIGp1c3QgZnJvbSBtaXNzaW5nX2ZpbGVwYWlyX09CU1RB Q0suICAqLwotKyAgICAgIG1pc3NpbmdfZmlsZXBhaXJfaGFzaCA9IE5VTEw7Ci0rICAgIH0KLSt9 Ci0rCi0rc3RhdGljIHZvaWQKLStkZWJ1Z19wcmludF9leGVjdXRhYmxlX2NoYW5nZWQgKHN0cnVj dCBwcm9ncmFtX3NwYWNlICpwc3BhY2UsIGJvb2wgcmVsb2FkX3ApCi0rewotKyAgbWlzc2luZ19m aWxlcGFpcl9jaGFuZ2UgKCk7Ci0rfQotKwotKy8qIE5vdGlmeSB1c2VyIHRoZSBmaWxlIEJJTkFS WSB3aXRoIChwb3NzaWJseSBOVUxMKSBhc3NvY2lhdGVkIHNlcGFyYXRlIGRlYnVnCi0rICAgaW5m b3JtYXRpb24gZmlsZSBERUJVRyBpcyBtaXNzaW5nLiAgREVCVUcgbWF5IG9yIG1heSBub3QgYmUg dGhlIGJ1aWxkLWlkCi0rICAgZmlsZSBzdWNoIGFzIHdvdWxkIGJlOgotKyAgICAgL3Vzci9saWIv ZGVidWcvLmJ1aWxkLWlkL2RkL2IxZDJjZTYzMjcyMWM0N2JiOWU4Njc5ZjM2OWUyMjk1Y2U3MWJl LmRlYnVnCi0rICAgKi8KLSsKLSt2b2lkCi0rZGVidWdfcHJpbnRfbWlzc2luZyAoY29uc3QgY2hh ciAqYmluYXJ5LCBjb25zdCBjaGFyICpkZWJ1ZykKLSt7Ci0rICBzaXplX3QgYmluYXJ5X2xlbjAg PSBzdHJsZW4gKGJpbmFyeSkgKyAxOwotKyAgc2l6ZV90IGRlYnVnX2xlbjAgPSBkZWJ1ZyA/IHN0 cmxlbiAoZGVidWcpICsgMSA6IDA7Ci0rICBzdHJ1Y3QgbWlzc2luZ19maWxlcGFpciBtaXNzaW5n X2ZpbGVwYWlyX2ZpbmQ7Ci0rICBzdHJ1Y3QgbWlzc2luZ19maWxlcGFpciAqbWlzc2luZ19maWxl cGFpcjsKLSsgIHN0cnVjdCBtaXNzaW5nX2ZpbGVwYWlyICoqc2xvdDsKLSsKLSsgIGlmIChidWls ZF9pZF92ZXJib3NlIDwgQlVJTERfSURfVkVSQk9TRV9GSUxFTkFNRVMpCi0rICAgIHJldHVybjsK LSsKLSsgIGlmIChtaXNzaW5nX2ZpbGVwYWlyX2hhc2ggPT0gTlVMTCkKLSsgICAgewotKyAgICAg IG9ic3RhY2tfaW5pdCAoJm1pc3NpbmdfZmlsZXBhaXJfb2JzdGFjayk7Ci0rICAgICAgbWlzc2lu Z19maWxlcGFpcl9oYXNoID0gaHRhYl9jcmVhdGVfYWxsb2MgKDY0LAotKwkoaGFzaHZhbF90ICgq KSAoY29uc3Qgdm9pZCAqKSkgbWlzc2luZ19maWxlcGFpcl9oYXNoX2Z1bmMsCi0rCShpbnQgKCop IChjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKikpIG1pc3NpbmdfZmlsZXBhaXJfZXEsIE5VTEws Ci0rCW1pc3NpbmdfZmlsZXBhaXJfeGNhbGxvYywgTlVMTCk7Ci0rICAgIH0KLSsKLSsgIC8qIFVz ZSBNSVNTSU5HX0ZJTEVQQUlSX0ZJTkQgZmlyc3QgaW5zdGVhZCBvZiBjYWxsaW5nIG9ic3RhY2tf YWxsb2Mgd2l0aAotKyAgICAgb2JzdGFja19mcmVlIGluIHRoZSBjYXNlIG9mIGEgKHJhcmUpIG1h dGNoLiAgVGhlIHByb2JsZW0gaXMgQUxMT0NfRiBmb3IKLSsgICAgIE1JU1NJTkdfRklMRVBBSVJf SEFTSCBhbGxvY2F0ZXMgZnJvbSBNSVNTSU5HX0ZJTEVQQUlSX09CU1RBQ0sgbWFpbnRlbmFuY2UK LSsgICAgIHN0cnVjdHVyZXMgZm9yIE1JU1NJTkdfRklMRVBBSVJfSEFTSC4gIENhbGxpbmcgb2Jz dGFja19mcmVlIHdvdWxkIHBvc3NpYmx5Ci0rICAgICBub3QgdG8gZnJlZSBvbmx5IE1JU1NJTkdf RklMRVBBSVIgYnV0IGFsc28gc29tZSBzdWNoIHN0cnVjdHVyZXMgKGFsbG9jYXRlZAotKyAgICAg ZHVyaW5nIHRoZSBodGFiX2ZpbmRfc2xvdCBjYWxsKS4gICovCi0rCi0rICBtaXNzaW5nX2ZpbGVw YWlyX2ZpbmQuYmluYXJ5ID0gKGNoYXIgKikgYmluYXJ5OwotKyAgbWlzc2luZ19maWxlcGFpcl9m aW5kLmRlYnVnID0gKGNoYXIgKikgZGVidWc7Ci0rICBzbG90ID0gKHN0cnVjdCBtaXNzaW5nX2Zp bGVwYWlyICoqKSBodGFiX2ZpbmRfc2xvdCAobWlzc2luZ19maWxlcGFpcl9oYXNoLAotKwkJCQkJ CSAgICAgICZtaXNzaW5nX2ZpbGVwYWlyX2ZpbmQsCi0rCQkJCQkJICAgICAgSU5TRVJUKTsKLSsK LSsgIC8qIFdoaWxlIGl0IG1heSBiZSBzdGlsbCBwcmludGVkIGR1cGxpY2l0ZWx5IHdpdGggdGhl IG1pc3NpbmcgZGVidWdpbmZvIGZpbGUKLSsgICAqIGl0IGlzIGR1ZSB0byBvbmNlIHByaW50aW5n IGFib3V0IHRoZSBiaW5hcnkgZmlsZSBidWlsZC1pZCBsaW5rIGFuZCBvbmNlCi0rICAgKiBhYm91 dCB0aGUgLmRlYnVnIGZpbGUgYnVpbGQtaWQgbGluayBhcyBib3RoIHRoZSBidWlsZC1pZCBzeW1s aW5rcyBhcmUKLSsgICAqIGxvY2F0ZWQgaW4gdGhlIGRlYnVnaW5mbyBwYWNrYWdlLiAgKi8KLSsK LSsgIGlmICgqc2xvdCAhPSBOVUxMKQotKyAgICByZXR1cm47Ci0rCi0rICBtaXNzaW5nX2ZpbGVw YWlyID0gKHN0cnVjdCBtaXNzaW5nX2ZpbGVwYWlyICopIG9ic3RhY2tfYWxsb2MgKCZtaXNzaW5n X2ZpbGVwYWlyX29ic3RhY2ssCi0rCQkJCQkJCQlzaXplb2YgKCptaXNzaW5nX2ZpbGVwYWlyKSAt IDEKLSsJCQkJCQkJCSsgYmluYXJ5X2xlbjAgKyBkZWJ1Z19sZW4wKTsKLSsgIG1pc3NpbmdfZmls ZXBhaXItPmJpbmFyeSA9IG1pc3NpbmdfZmlsZXBhaXItPmRhdGE7Ci0rICBtZW1jcHkgKG1pc3Np bmdfZmlsZXBhaXItPmJpbmFyeSwgYmluYXJ5LCBiaW5hcnlfbGVuMCk7Ci0rICBpZiAoZGVidWcg IT0gTlVMTCkKLSsgICAgewotKyAgICAgIG1pc3NpbmdfZmlsZXBhaXItPmRlYnVnID0gbWlzc2lu Z19maWxlcGFpci0+YmluYXJ5ICsgYmluYXJ5X2xlbjA7Ci0rICAgICAgbWVtY3B5IChtaXNzaW5n X2ZpbGVwYWlyLT5kZWJ1ZywgZGVidWcsIGRlYnVnX2xlbjApOwotKyAgICB9Ci0rICBlbHNlCi0r ICAgIG1pc3NpbmdfZmlsZXBhaXItPmRlYnVnID0gTlVMTDsKLSsKLSsgICpzbG90ID0gbWlzc2lu Z19maWxlcGFpcjsKLSsKLSsgIC8qIFdlIGRvIG5vdCBjb2xsZWN0IGFuZCBmbHVzaCB0aGVzZSBt ZXNzYWdlcyBhcyBlYWNoIHN1Y2ggbWVzc2FnZQotKyAgICAgYWxyZWFkeSByZXF1aXJlcyBpdHMg b3duIHNlcGFyYXRlIGxpbmVzLiAgKi8KLSsKLSsgIGdkYl9wcmludGYgKGdkYl9zdGRsb2csCi0r CSAgICAgIF8oIk1pc3Npbmcgc2VwYXJhdGUgZGVidWdpbmZvIGZvciAlcy5cbiIpLCBiaW5hcnkp OwotKyAgaWYgKGRlYnVnICE9IE5VTEwpCi0rICAgIHsKLSsgICAgICBnZGJfcHJpbnRmIChnZGJf c3RkbG9nLCBfKCJUcnk6ICVzICVzXG4iKSwKLSsjaWZkZWYgRE5GX0RFQlVHSU5GT19JTlNUQUxM Ci0rCQkgICJkbmYiCi0rI2Vsc2UKLSsJCSAgInl1bSIKLSsjZW5kaWYKLSsJCSAgIiAtLWVuYWJs ZXJlcG89JypkZWJ1ZyonIGluc3RhbGwiLCBkZWJ1Zyk7Ci0rICAgIH0KLSt9Ci0rCi0gLyogU2Vl IGJ1aWxkLWlkLmguICAqLwotIAotIGdkYl9iZmRfcmVmX3B0cgotIGJ1aWxkX2lkX3RvX2RlYnVn X2JmZCAoc2l6ZV90IGJ1aWxkX2lkX2xlbiwgY29uc3QgYmZkX2J5dGUgKmJ1aWxkX2lkKQotIHsK LS0gIHJldHVybiBidWlsZF9pZF90b19iZmRfc3VmZml4IChidWlsZF9pZF9sZW4sIGJ1aWxkX2lk LCAiLmRlYnVnIik7Ci0rICByZXR1cm4gYnVpbGRfaWRfdG9fYmZkX3N1ZmZpeCAoYnVpbGRfaWRf bGVuLCBidWlsZF9pZCwgIi5kZWJ1ZyIsIG51bGxwdHIpOwotIH0KLSAKLSAvKiBTZWUgYnVpbGQt aWQuaC4gICovCi0gCi0gZ2RiX2JmZF9yZWZfcHRyCi0tYnVpbGRfaWRfdG9fZXhlY19iZmQgKHNp emVfdCBidWlsZF9pZF9sZW4sIGNvbnN0IGJmZF9ieXRlICpidWlsZF9pZCkKLStidWlsZF9pZF90 b19leGVjX2JmZCAoc2l6ZV90IGJ1aWxkX2lkX2xlbiwgY29uc3QgYmZkX2J5dGUgKmJ1aWxkX2lk LAotKwkJICAgICAgY2hhciAqKmxpbmtfcmV0dXJuKQotIHsKLS0gIHJldHVybiBidWlsZF9pZF90 b19iZmRfc3VmZml4IChidWlsZF9pZF9sZW4sIGJ1aWxkX2lkLCAiIik7Ci0rICByZXR1cm4gYnVp bGRfaWRfdG9fYmZkX3N1ZmZpeCAoYnVpbGRfaWRfbGVuLCBidWlsZF9pZCwgIiIsIGxpbmtfcmV0 dXJuKTsKLSB9Ci0gCi0gLyogU2VlIGJ1aWxkLWlkLmguICAqLwotQEAgLTIyNCw2ICs4ODcsNyBA QCBmaW5kX3NlcGFyYXRlX2RlYnVnX2ZpbGVfYnlfYnVpbGRpZCAoc3RydWN0IG9iamZpbGUgKm9i amZpbGUsCi0gCi0gICAgICAgZ2RiX2JmZF9yZWZfcHRyIGFiZmQgKGJ1aWxkX2lkX3RvX2RlYnVn X2JmZCAoYnVpbGRfaWQtPnNpemUsCi0gCQkJCQkJICAgYnVpbGRfaWQtPmRhdGEpKTsKLSsKLSAg ICAgICAvKiBQcmV2ZW50IGxvb3Bpbmcgb24gYSBzdHJpcHBlZCAuZGVidWcgZmlsZS4gICovCi0g ICAgICAgaWYgKGFiZmQgIT0gTlVMTAotIAkgICYmIGZpbGVuYW1lX2NtcCAoYmZkX2dldF9maWxl bmFtZSAoYWJmZC5nZXQgKCkpLAotQEAgLTI0MywzICs5MDcsMjIgQEAgZmluZF9zZXBhcmF0ZV9k ZWJ1Z19maWxlX2J5X2J1aWxkaWQgKHN0cnVjdCBvYmpmaWxlICpvYmpmaWxlLAotIAotICAgcmV0 dXJuIHN0ZDo6c3RyaW5nICgpOwotIH0KLSsKLSt2b2lkIF9pbml0aWFsaXplX2J1aWxkX2lkICgp OwotKwotK3ZvaWQKLStfaW5pdGlhbGl6ZV9idWlsZF9pZCAoKQotK3sKLSsgIGFkZF9zZXRzaG93 X3ppbnRlZ2VyX2NtZCAoImJ1aWxkLWlkLXZlcmJvc2UiLCBub19jbGFzcywgJmJ1aWxkX2lkX3Zl cmJvc2UsCi0rCQkJICAgIF8oIlwKLStTZXQgZGVidWdnaW5nIGxldmVsIG9mIHRoZSBidWlsZC1p ZCBsb2NhdG9yLiIpLCBfKCJcCi0rU2hvdyBkZWJ1Z2dpbmcgbGV2ZWwgb2YgdGhlIGJ1aWxkLWlk IGxvY2F0b3IuIiksIF8oIlwKLStMZXZlbCAxIChkZWZhdWx0KSBlbmFibGVzIHByaW50aW5nIHRo ZSBtaXNzaW5nIGRlYnVnIGZpbGVuYW1lcyxcblwKLStsZXZlbCAyIGFsc28gcHJpbnRzIHRoZSBw YXJzaW5nIG9mIGJpbmFyaWVzIHRvIGZpbmQgdGhlIGlkZW50aWZpY2F0b3JzLiIpLAotKwkJCSAg ICBOVUxMLAotKwkJCSAgICBzaG93X2J1aWxkX2lkX3ZlcmJvc2UsCi0rCQkJICAgICZzZXRsaXN0 LCAmc2hvd2xpc3QpOwotKwotKyAgZ2RiOjpvYnNlcnZlcnM6OmV4ZWN1dGFibGVfY2hhbmdlZC5h dHRhY2ggKGRlYnVnX3ByaW50X2V4ZWN1dGFibGVfY2hhbmdlZCwKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYnVpbGQtaWQiKTsKLSt9Ci1kaWZmIC0tZ2l0 IGEvZ2RiL2J1aWxkLWlkLmggYi9nZGIvYnVpbGQtaWQuaAotLS0tIGEvZ2RiL2J1aWxkLWlkLmgK LSsrKyBiL2dkYi9idWlsZC1pZC5oCi1AQCAtNDAsMTIgKzQwLDE2IEBAIGV4dGVybiBpbnQgYnVp bGRfaWRfdmVyaWZ5IChiZmQgKmFiZmQsCi0gZXh0ZXJuIGdkYl9iZmRfcmVmX3B0ciBidWlsZF9p ZF90b19kZWJ1Z19iZmQgKHNpemVfdCBidWlsZF9pZF9sZW4sCi0gCQkJCQkgICAgICBjb25zdCBi ZmRfYnl0ZSAqYnVpbGRfaWQpOwotIAotK2V4dGVybiBjaGFyICpidWlsZF9pZF90b19maWxlbmFt ZSAoY29uc3Qgc3RydWN0IGJmZF9idWlsZF9pZCAqYnVpbGRfaWQsCi0rCQkJCSAgIGNoYXIgKips aW5rX3JldHVybik7Ci0rCi0gLyogRmluZCBhbmQgb3BlbiBhIEJGRCBmb3IgYW4gZXhlY3V0YWJs ZSBmaWxlIGdpdmVuIGEgYnVpbGQtaWQuICBJZiBubyBCRkQKLSAgICBjYW4gYmUgZm91bmQsIHJl dHVybiBOVUxMLiAgVGhlIHJldHVybmVkIHJlZmVyZW5jZSB0byB0aGUgQkZEIG11c3QgYmUKLSAg ICByZWxlYXNlZCBieSB0aGUgY2FsbGVyLiAgKi8KLSAKLSBleHRlcm4gZ2RiX2JmZF9yZWZfcHRy IGJ1aWxkX2lkX3RvX2V4ZWNfYmZkIChzaXplX3QgYnVpbGRfaWRfbGVuLAotLQkJCQkJICAgICBj b25zdCBiZmRfYnl0ZSAqYnVpbGRfaWQpOwotKwkJCQkJICAgICBjb25zdCBiZmRfYnl0ZSAqYnVp bGRfaWQsCi0rCQkJCQkgICAgIGNoYXIgKipsaW5rX3JldHVybik7Ci0gCi0gLyogRmluZCB0aGUg c2VwYXJhdGUgZGVidWcgZmlsZSBmb3IgT0JKRklMRSwgYnkgdXNpbmcgdGhlIGJ1aWxkLWlkCi0g ICAgYXNzb2NpYXRlZCB3aXRoIE9CSkZJTEUncyBCRkQuICBJZiBzdWNjZXNzZnVsLCByZXR1cm5z IHRoZSBmaWxlIG5hbWUgZm9yIHRoZQotZGlmZiAtLWdpdCBhL2dkYi9jb3JlbG93LmMgYi9nZGIv Y29yZWxvdy5jCi0tLS0gYS9nZGIvY29yZWxvdy5jCi0rKysgYi9nZGIvY29yZWxvdy5jCi1AQCAt MjEsNiArMjEsOSBAQAotICNpbmNsdWRlIDxzaWduYWwuaD4KLSAjaW5jbHVkZSA8ZmNudGwuaD4K LSAjaW5jbHVkZSAiZnJhbWUuaCIKLSsjaW5jbHVkZSAiYXV4di5oIgotKyNpbmNsdWRlICJidWls ZC1pZC5oIgotKyNpbmNsdWRlICJlbGYvY29tbW9uLmgiCi0gI2luY2x1ZGUgImluZmVyaW9yLmgi Ci0gI2luY2x1ZGUgImluZnJ1bi5oIgotICNpbmNsdWRlICJzeW10YWIuaCIKLUBAIC0zODMsNiAr Mzg2LDggQEAgYWRkX3RvX3RocmVhZF9saXN0IChhc2VjdGlvbiAqYXNlY3QsIGFzZWN0aW9uICpy ZWdfc2VjdCwgaW5mZXJpb3IgKmluZikKLSAgICAgc3dpdGNoX3RvX3RocmVhZCAodGhyKTsJCQkv KiBZZXMsIG1ha2UgaXQgY3VycmVudC4gICovCi0gfQotIAotK3N0YXRpYyBib29sIGJ1aWxkX2lk X2NvcmVfbG9hZHMgPSB0cnVlOwotKwotIC8qIElzc3VlIGEgbWVzc2FnZSBzYXlpbmcgd2UgaGF2 ZSBubyBjb3JlIHRvIGRlYnVnLCBpZiBGUk9NX1RUWS4gICovCi0gCi0gc3RhdGljIHZvaWQKLUBA IC01NzAsOCArNTc1LDEwIEBAIGxvY2F0ZV9leGVjX2Zyb21fY29yZWZpbGVfYnVpbGRfaWQgKGJm ZCAqYWJmZCwgaW50IGZyb21fdHR5KQotICAgaWYgKGJ1aWxkX2lkID09IG51bGxwdHIpCi0gICAg IHJldHVybjsKLSAKLSsgIGNoYXIgKmJ1aWxkX2lkX2ZpbGVuYW1lOwotICAgZ2RiX2JmZF9yZWZf cHRyIGV4ZWNiZmQKLS0gICAgPSBidWlsZF9pZF90b19leGVjX2JmZCAoYnVpbGRfaWQtPnNpemUs IGJ1aWxkX2lkLT5kYXRhKTsKLSsgICAgPSBidWlsZF9pZF90b19leGVjX2JmZCAoYnVpbGRfaWQt PnNpemUsIGJ1aWxkX2lkLT5kYXRhLAotKwkJCSAgICAmYnVpbGRfaWRfZmlsZW5hbWUpOwotIAot ICAgaWYgKGV4ZWNiZmQgPT0gbnVsbHB0cikKLSAgICAgewotQEAgLTU5OSw3ICs2MDYsMTIgQEAg bG9jYXRlX2V4ZWNfZnJvbV9jb3JlZmlsZV9idWlsZF9pZCAoYmZkICphYmZkLCBpbnQgZnJvbV90 dHkpCi0gICAgICAgZXhlY19maWxlX2F0dGFjaCAoYmZkX2dldF9maWxlbmFtZSAoZXhlY2JmZC5n ZXQgKCkpLCBmcm9tX3R0eSk7Ci0gICAgICAgc3ltYm9sX2ZpbGVfYWRkX21haW4gKGJmZF9nZXRf ZmlsZW5hbWUgKGV4ZWNiZmQuZ2V0ICgpKSwKLSAJCQkgICAgc3ltZmlsZV9hZGRfZmxhZyAoZnJv bV90dHkgPyBTWU1GSUxFX1ZFUkJPU0UgOiAwKSk7Ci0rICAgICAgaWYgKGN1cnJlbnRfcHJvZ3Jh bV9zcGFjZS0+c3ltZmlsZV9vYmplY3RfZmlsZSAhPSBOVUxMKQotKwljdXJyZW50X3Byb2dyYW1f c3BhY2UtPnN5bWZpbGVfb2JqZWN0X2ZpbGUtPmZsYWdzIHw9Ci0rCSAgT0JKRl9CVUlMRF9JRF9D T1JFX0xPQURFRDsKLSAgICAgfQotKyAgZWxzZQotKyAgICBkZWJ1Z19wcmludF9taXNzaW5nIChC VUlMRF9JRF9NQUlOX0VYRUNVVEFCTEVfRklMRU5BTUUsIGJ1aWxkX2lkX2ZpbGVuYW1lKTsKLSB9 Ci0gCi0gLyogU2VlIGdkYmNvcmUuaC4gICovCi1AQCAtMTUyNCw0ICsxNTM2LDExIEBAIF9pbml0 aWFsaXplX2NvcmVsb3cgKCkKLSAJICAgbWFpbnRlbmFuY2VfcHJpbnRfY29yZV9maWxlX2JhY2tl ZF9tYXBwaW5ncywKLSAJICAgXygiUHJpbnQgY29yZSBmaWxlJ3MgZmlsZS1iYWNrZWQgbWFwcGlu Z3MuIiksCi0gCSAgICZtYWludGVuYW5jZXByaW50bGlzdCk7Ci0rCi0rICBhZGRfc2V0c2hvd19i b29sZWFuX2NtZCAoImJ1aWxkLWlkLWNvcmUtbG9hZHMiLCBjbGFzc19maWxlcywKLSsJCQkgICAm YnVpbGRfaWRfY29yZV9sb2FkcywgXygiXAotK1NldCB3aGV0aGVyIENPUkUtRklMRSBsb2FkcyB0 aGUgYnVpbGQtaWQgYXNzb2NpYXRlZCBmaWxlcyBhdXRvbWF0aWNhbGx5LiIpLCBfKCJcCi0rU2hv dyB3aGV0aGVyIENPUkUtRklMRSBsb2FkcyB0aGUgYnVpbGQtaWQgYXNzb2NpYXRlZCBmaWxlcyBh dXRvbWF0aWNhbGx5LiIpLAotKwkJCSAgIE5VTEwsIE5VTEwsIE5VTEwsCi0rCQkJICAgJnNldGxp c3QsICZzaG93bGlzdCk7Ci0gfQotZGlmZiAtLWdpdCBhL2dkYi9kb2MvZ2RiLnRleGluZm8gYi9n ZGIvZG9jL2dkYi50ZXhpbmZvCi0tLS0gYS9nZGIvZG9jL2dkYi50ZXhpbmZvCi0rKysgYi9nZGIv ZG9jL2dkYi50ZXhpbmZvCi1AQCAtMjI0ODcsNiArMjI0ODcsMjcgQEAgaW5mb3JtYXRpb24gZmls ZXMuCi0gCi0gQGVuZCB0YWJsZQotIAotK1lvdSBjYW4gYWxzbyBhZGp1c3QgdGhlIGN1cnJlbnQg dmVyYm9zaXR5IG9mIHRoZSBAZGZue2J1aWxkIGlkfSBsb2NhdGluZy4KLSsKLStAdGFibGUgQGNv ZGUKLSsKLStAa2luZGV4IHNldCBidWlsZC1pZC12ZXJib3NlCi0rQGl0ZW0gc2V0IGJ1aWxkLWlk LXZlcmJvc2UgMAotK05vIGFkZGl0aW9uYWwgbWVzc2FnZXMgYXJlIHByaW50ZWQuCi0rCi0rQGl0 ZW0gc2V0IGJ1aWxkLWlkLXZlcmJvc2UgMQotK01pc3Npbmcgc2VwYXJhdGUgZGVidWcgZmlsZW5h bWVzIGFyZSBwcmludGVkLgotKwotK0BpdGVtIHNldCBidWlsZC1pZC12ZXJib3NlIDIKLStNaXNz aW5nIHNlcGFyYXRlIGRlYnVnIGZpbGVuYW1lcyBhcmUgcHJpbnRlZCBhbmQgYWxzbyBhbGwgdGhl IHBhcnNpbmcgb2YgdGhlCi0rYmluYXJpZXMgdG8gZmluZCB0aGVpciBAZGZue2J1aWxkIGlkfSBj b250ZW50IGlzIHByaW50ZWQuCi0rCi0rQGtpbmRleCBzaG93IGJ1aWxkLWlkLXZlcmJvc2UKLStA aXRlbSBzaG93IGJ1aWxkLWlkLXZlcmJvc2UKLStTaG93IHRoZSBjdXJyZW50IHZlcmJvc2l0eSB2 YWx1ZSBmb3IgdGhlIEBkZm57YnVpbGQgaWR9IGNvbnRlbnQgbG9jYXRpbmcuCi0rCi0rQGVuZCB0 YWJsZQotKwotIEBjaW5kZXggQGNvZGV7LmdudV9kZWJ1Z2xpbmt9IHNlY3Rpb25zCi0gQGNpbmRl eCBkZWJ1ZyBsaW5rIHNlY3Rpb25zCi0gQSBkZWJ1ZyBsaW5rIGlzIGEgc3BlY2lhbCBzZWN0aW9u IG9mIHRoZSBleGVjdXRhYmxlIGZpbGUgbmFtZWQKLWRpZmYgLS1naXQgYS9nZGIvb2JqZmlsZXMu aCBiL2dkYi9vYmpmaWxlcy5oCi0tLS0gYS9nZGIvb2JqZmlsZXMuaAotKysrIGIvZ2RiL29iamZp bGVzLmgKLUBAIC04NzcsNiArODc3LDEwIEBAIHN0cnVjdCBvYmpmaWxlCi0gICBib29sIG9iamVj dF9mb3JtYXRfaGFzX2NvcHlfcmVsb2NzID0gZmFsc2U7Ci0gfTsKLSAKLSsvKiBUaGlzIGZpbGUg d2FzIGxvYWRlZCBhY2NvcmRpbmcgdG8gdGhlIEJVSUxEX0lEX0NPUkVfTE9BRFMgcnVsZXMuICAq LwotKwotKyNkZWZpbmUgT0JKRl9CVUlMRF9JRF9DT1JFX0xPQURFRCBzdGF0aWNfY2FzdDxlbnVt IG9iamZpbGVfZmxhZz4oMSA8PCAxMikKLSsKLSAvKiBBIGRlbGV0ZXIgZm9yIG9iamZpbGUuICAq LwotIAotIHN0cnVjdCBvYmpmaWxlX2RlbGV0ZXIKLWRpZmYgLS1naXQgYS9nZGIvc29saWItc3Zy NC5jIGIvZ2RiL3NvbGliLXN2cjQuYwotLS0tIGEvZ2RiL3NvbGliLXN2cjQuYwotKysrIGIvZ2Ri L3NvbGliLXN2cjQuYwotQEAgLTQ0LDYgKzQ0LDcgQEAKLSAjaW5jbHVkZSAiYXV4di5oIgotICNp bmNsdWRlICJnZGJfYmZkLmgiCi0gI2luY2x1ZGUgInByb2JlLmgiCi0rI2luY2x1ZGUgImJ1aWxk LWlkLmgiCi0gCi0gI2luY2x1ZGUgPG1hcD4KLSAKLUBAIC0xMjYyLDYgKzEyNjMsNDYgQEAgc3Zy NF9yZWFkX3NvX2xpc3QgKHN2cjRfaW5mbyAqaW5mbywgQ09SRV9BRERSIGxtLCBDT1JFX0FERFIg cHJldl9sbSwKLSAJICBjb250aW51ZTsKLSAJfQotIAotKwl7Ci0rCSAgc3RydWN0IGJmZF9idWls ZF9pZCAqYnVpbGRfaWQ7Ci0rCi0rCSAgYnVpbGRfaWQgPSBidWlsZF9pZF9hZGRyX2dldCAobGkt PmxfbGQpOwotKwkgIGlmIChidWlsZF9pZCAhPSBOVUxMKQotKwkgICAgewotKwkgICAgICBjaGFy ICpiaWRfbmFtZSwgKmJ1aWxkX2lkX2ZpbGVuYW1lOwotKwotKwkgICAgICAvKiBNaXNzaW5nIHRo ZSBidWlsZC1pZCBtYXRjaGluZyBzZXBhcmF0ZSBkZWJ1ZyBpbmZvIGZpbGUKLSsJCSB3b3VsZCBi ZSBoYW5kbGVkIHdoaWxlIFNPX05BTUUgZ2V0cyBsb2FkZWQuICAqLwotKwkgICAgICBiaWRfbmFt ZSA9IGJ1aWxkX2lkX3RvX2ZpbGVuYW1lIChidWlsZF9pZCwgJmJ1aWxkX2lkX2ZpbGVuYW1lKTsK LSsJICAgICAgaWYgKGJpZF9uYW1lICE9IE5VTEwpCi0rCQl7Ci0rCQkgIG5hbWUgPSBtYWtlX3Vu aXF1ZV94c3RyZHVwIChiaWRfbmFtZSk7Ci0rCQkgIHhmcmVlIChiaWRfbmFtZSk7Ci0rCQl9Ci0r CSAgICAgIGVsc2UKLSsJCXsKLSsJCSAgZGVidWdfcHJpbnRfbWlzc2luZyAobmFtZS5nZXQgKCks IGJ1aWxkX2lkX2ZpbGVuYW1lKTsKLSsKLSsJCSAgLyogSW4gdGhlIGNhc2UgdGhlIG1haW4gZXhl Y3V0YWJsZSB3YXMgZm91bmQgYWNjb3JkaW5nIHRvCi0rCQkgICAgIGl0cyBidWlsZC1pZCAoZnJv bSBhIGNvcmUgZmlsZSkgcHJldmVudCBsb2FkaW5nCi0rCQkgICAgIGEgZGlmZmVyZW50IGJ1aWxk IG9mIGEgbGlicmFyeSB3aXRoIGFjY2lkZW50YWxseSB0aGUKLSsJCSAgICAgc2FtZSBTT19OQU1F LgotKwotKwkJICAgICBJdCBzdXBwcmVzc2VzIGJvZ3VzIGJhY2t0cmFjZXMgKGFuZCBwcmludHMg Ij8/IiB0aGVyZQotKwkJICAgICBpbnN0ZWFkKSBpZiB0aGUgb24tZGlzayBmaWxlcyBubyBsb25n ZXIgbWF0Y2ggdGhlCi0rCQkgICAgIHJ1bm5pbmcgcHJvZ3JhbSB2ZXJzaW9uLiAgKi8KLSsKLSsJ CSAgaWYgKGN1cnJlbnRfcHJvZ3JhbV9zcGFjZS0+c3ltZmlsZV9vYmplY3RfZmlsZSAhPSBOVUxM Ci0rCQkgICAgICAmJiAoY3VycmVudF9wcm9ncmFtX3NwYWNlLT5zeW1maWxlX29iamVjdF9maWxl LT5mbGFncwotKwkJCSAgJiBPQkpGX0JVSUxEX0lEX0NPUkVfTE9BREVEKSAhPSAwKQotKwkJICAg IG5hbWUgPSBtYWtlX3VuaXF1ZV94c3RyZHVwICgiIik7Ci0rCQl9Ci0rCi0rCSAgICAgIHhmcmVl IChidWlsZF9pZF9maWxlbmFtZSk7Ci0rCSAgICAgIHhmcmVlIChidWlsZF9pZCk7Ci0rCSAgICB9 Ci0rCX0KLSsKLSAgICAgICAvKiBJZiB0aGlzIGVudHJ5IGhhcyBubyBuYW1lLCBvciBpdHMgbmFt ZSBtYXRjaGVzIHRoZSBuYW1lCi0gCSBmb3IgdGhlIG1haW4gZXhlY3V0YWJsZSwgZG9uJ3QgaW5j bHVkZSBpdCBpbiB0aGUgbGlzdC4gICovCi0gICAgICAgaWYgKCpuYW1lID09ICdcMCcgfHwgbWF0 Y2hfbWFpbiAobmFtZS5nZXQgKCkpKQotZGlmZiAtLWdpdCBhL2dkYi9zeW1maWxlLmggYi9nZGIv c3ltZmlsZS5oCi0tLS0gYS9nZGIvc3ltZmlsZS5oCi0rKysgYi9nZGIvc3ltZmlsZS5oCi1AQCAt MzYzLDYgKzM2MywxMSBAQCB2b2lkIG1hcF9zeW1ib2xfZmlsZW5hbWVzIChnZGI6OmZ1bmN0aW9u X3ZpZXc8c3ltYm9sX2ZpbGVuYW1lX2Z0eXBlPiBmdW4sCi0gICAgb3B0aW9uYWwgb2Zmc2V0IHRv IGFwcGx5IHRvIGVhY2ggc2VjdGlvbi4gICovCi0gZXh0ZXJuIHZvaWQgZ2VuZXJpY19sb2FkIChj b25zdCBjaGFyICphcmdzLCBpbnQgZnJvbV90dHkpOwotIAotKy8qIGJ1aWxkLWlkIHN1cHBvcnQu ICAqLwotK2V4dGVybiBzdHJ1Y3QgYmZkX2J1aWxkX2lkICpidWlsZF9pZF9hZGRyX2dldCAoQ09S RV9BRERSIGFkZHIpOwotK2V4dGVybiB2b2lkIGRlYnVnX3ByaW50X21pc3NpbmcgKGNvbnN0IGNo YXIgKmJpbmFyeSwgY29uc3QgY2hhciAqZGVidWcpOwotKyNkZWZpbmUgQlVJTERfSURfTUFJTl9F WEVDVVRBQkxFX0ZJTEVOQU1FIF8oInRoZSBtYWluIGV4ZWN1dGFibGUgZmlsZSIpCi0rCi0gLyog RnJvbSBtaW5pZGVidWcuYy4gICovCi0gCi0gZXh0ZXJuIGdkYl9iZmRfcmVmX3B0ciBmaW5kX3Nl cGFyYXRlX2RlYnVnX2ZpbGVfaW5fc2VjdGlvbiAoc3RydWN0IG9iamZpbGUgKik7Ci1kaWZmIC0t Z2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9jb3JlZmlsZS5leHAgYi9nZGIvdGVzdHN1aXRl L2dkYi5iYXNlL2NvcmVmaWxlLmV4cAotLS0tIGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9jb3Jl ZmlsZS5leHAKLSsrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvY29yZWZpbGUuZXhwCi1AQCAt MzQ3LDMgKzM0NywzMyBAQCBnZGJfdGVzdF9tdWx0aXBsZSAiY29yZS1maWxlICRjb3JlZmlsZSIg JHRlc3QgewotIAlwYXNzICR0ZXN0Ci0gICAgIH0KLSB9Ci0rCi0rCi0rIyBUZXN0IGF1dG8tbG9h ZGluZyBvZiBiaW5hcnkgZmlsZXMgdGhyb3VnaCBidWlsZC1pZCBmcm9tIHRoZSBjb3JlIGZpbGUu Ci0rc2V0IGJ1aWxkaWQgW2J1aWxkX2lkX2RlYnVnX2ZpbGVuYW1lX2dldCAkYmluZmlsZV0KLStz ZXQgd2hvbGV0ZXN0ICJiaW5maWxlIGZvdW5kIGJ5IGJ1aWxkLWlkIgotK2lmIHskYnVpbGRpZCA9 PSAiIn0gewotKyAgICB1bnRlc3RlZCAiJHdob2xldGVzdCAoYmluYXJ5IGhhcyBubyBidWlsZC1p ZCkiCi0rfSBlbHNlIHsKLSsgICAgZ2RiX2V4aXQKLSsgICAgZ2RiX3N0YXJ0Ci0rCi0rICAgIHJl Z3N1YiB7XC5kZWJ1ZyR9ICRidWlsZGlkIHt9IGJ1aWxkaWQKLSsgICAgc2V0IGRlYnVnZGlyIFtz dGFuZGFyZF9vdXRwdXRfZmlsZSAke3Rlc3RmaWxlfS1kZWJ1Z2Rpcl0KLSsgICAgZmlsZSBkZWxl dGUgLWZvcmNlIC0tICRkZWJ1Z2RpcgotKyAgICBmaWxlIG1rZGlyICRkZWJ1Z2Rpci9bZmlsZSBk aXJuYW1lICRidWlsZGlkXQotKyAgICBmaWxlIGNvcHkgJGJpbmZpbGUgJGRlYnVnZGlyLyRidWls ZGlkCi0rCi0rICAgIHNldCB0ZXN0ICJzaG93IGRlYnVnLWZpbGUtZGlyZWN0b3J5IgotKyAgICBn ZGJfdGVzdF9tdWx0aXBsZSAkdGVzdCAkdGVzdCB7Ci0rCS1yZSAiVGhlIGRpcmVjdG9yeSB3aGVy ZSBzZXBhcmF0ZSBkZWJ1ZyBzeW1ib2xzIGFyZSBzZWFyY2hlZCBmb3IgaXMgXCIoLiopXCJcXC5c clxuJGdkYl9wcm9tcHQgJCIgewotKwkgICAgc2V0IGRlYnVnZGlyX29yaWcgJGV4cGVjdF9vdXQo MSxzdHJpbmcpCi0rCSAgICBwYXNzICR0ZXN0Ci0rCX0KLSsgICAgfQotKyAgICBnZGJfdGVzdF9u b19vdXRwdXQgInNldCBkZWJ1Zy1maWxlLWRpcmVjdG9yeSAkZGVidWdkaXI6JGRlYnVnZGlyX29y aWciICJzZXQgZGVidWctZmlsZS1kaXJlY3RvcnkiCi0rICAgIGdkYl90ZXN0ICJzaG93IGJ1aWxk LWlkLWNvcmUtbG9hZHMiIHtXaGV0aGVyIENPUkUtRklMRSBsb2FkcyB0aGUgYnVpbGQtaWQgYXNz b2NpYXRlZCBmaWxlcyBhdXRvbWF0aWNhbGx5IGlzIG9uXC59Ci0rICAgIGdkYl90ZXN0ICJjb3Jl LWZpbGUgJGNvcmVmaWxlIiAiXHJcblByb2dyYW0gdGVybWluYXRlZCB3aXRoIC4qIiAiY29yZS1m aWxlIHdpdGhvdXQgZXhlY3V0YWJsZSIKLSsgICAgZ2RiX3Rlc3QgImluZm8gZmlsZXMiICJMb2Nh bCBleGVjIGZpbGU6XHJcblxbIFx0XF0qYFtzdHJpbmdfdG9fcmVnZXhwICRkZWJ1Z2Rpci8kYnVp bGRpZF0nLCBmaWxlIHR5cGUgLioiCi0rICAgIHBhc3MgJHdob2xldGVzdAotK30KLWRpZmYgLS1n aXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2dkYmluaXQtaGlzdG9yeS5leHAgYi9nZGIvdGVz dHN1aXRlL2dkYi5iYXNlL2dkYmluaXQtaGlzdG9yeS5leHAKLS0tLSBhL2dkYi90ZXN0c3VpdGUv Z2RiLmJhc2UvZ2RiaW5pdC1oaXN0b3J5LmV4cAotKysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFz ZS9nZGJpbml0LWhpc3RvcnkuZXhwCi1AQCAtMTc5LDcgKzE3OSw4IEBAIHByb2MgdGVzdF9lbXB0 eV9oaXN0b3J5X2ZpbGVuYW1lIHsgfSB7Ci0gICAgIGdsb2JhbCBlbnYKLSAgICAgZ2xvYmFsIGdk Yl9wcm9tcHQKLSAKLS0gICAgc2V0IGNvbW1vbl9oaXN0b3J5IFtsaXN0ICJzZXQgaGVpZ2h0IDAi ICJzZXQgd2lkdGggMCJdCi0rICAgIHNldCBjb21tb25faGlzdG9yeSBbbGlzdCAic2V0IGhlaWdo dCAwIiAic2V0IHdpZHRoIDAiIFwKLSsJCQkgICAgInNldCBidWlsZC1pZC12ZXJib3NlIDAiXQot IAotICAgICBzZXQgdGVzdF9kaXIgW3N0YW5kYXJkX291dHB1dF9maWxlIGhpc3RvcnlfdGVzdF0K LSAgICAgcmVtb3RlX2V4ZWMgaG9zdCAibWtkaXIgLXAgJHRlc3RfZGlyIgotZGlmZiAtLWdpdCBh L2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvbmV3LXVpLXBlbmRpbmctaW5wdXQuZXhwIGIvZ2RiL3Rl c3RzdWl0ZS9nZGIuYmFzZS9uZXctdWktcGVuZGluZy1pbnB1dC5leHAKLS0tLSBhL2dkYi90ZXN0 c3VpdGUvZ2RiLmJhc2UvbmV3LXVpLXBlbmRpbmctaW5wdXQuZXhwCi0rKysgYi9nZGIvdGVzdHN1 aXRlL2dkYi5iYXNlL25ldy11aS1wZW5kaW5nLWlucHV0LmV4cAotQEAgLTYwLDYgKzYwLDkgQEAg cHJvYyB0ZXN0X2NvbW1hbmRfbGluZV9uZXdfdWlfcGVuZGluZ19pbnB1dCB7fSB7Ci0gICAgIHNl dCBicGxpbmUgW2dkYl9nZXRfbGluZV9udW1iZXIgInNldCBicmVha3BvaW50IGhlcmUiXQotIAot ICAgICBzZXQgb3B0aW9ucyAiIgotKyAgICBhcHBlbmQgb3B0aW9ucyAiIC1pZXggXCJzZXQgaGVp Z2h0IDBcIiIKLSsgICAgYXBwZW5kIG9wdGlvbnMgIiAtaWV4IFwic2V0IHdpZHRoIDBcIiIKLSsg ICAgYXBwZW5kIG9wdGlvbnMgIiAtaWV4IFwic2V0IGJ1aWxkLWlkLXZlcmJvc2UgMFwiIgotICAg ICBhcHBlbmQgb3B0aW9ucyAiIC1pZXggXCJuZXctdWkgY29uc29sZSAkZXh0cmFfdHR5X25hbWVc IiIKLSAgICAgYXBwZW5kIG9wdGlvbnMgIiAtZXggXCJiICRicGxpbmVcIiIKLSAgICAgYXBwZW5k IG9wdGlvbnMgIiAtZXggXCJydW5cIiIKLWRpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2xpYi9n ZGIuZXhwIGIvZ2RiL3Rlc3RzdWl0ZS9saWIvZ2RiLmV4cAotLS0tIGEvZ2RiL3Rlc3RzdWl0ZS9s aWIvZ2RiLmV4cAotKysrIGIvZ2RiL3Rlc3RzdWl0ZS9saWIvZ2RiLmV4cAotQEAgLTIzOCw3ICsy MzgsOCBAQCBpZiAhW2luZm8gZXhpc3RzIElOVEVSTkFMX0dEQkZMQUdTXSB7Ci0gCQkgICAiLW54 IiBcCi0gCQkgICAiLXEiIFwKLSAJCSAgIHstaWV4ICJzZXQgaGVpZ2h0IDAifSBcCi0tCQkgICB7 LWlleCAic2V0IHdpZHRoIDAifV1dCi0rCQkgICB7LWlleCAic2V0IHdpZHRoIDAifSBcCi0rCQkg ICB7LWlleCAic2V0IGJ1aWxkLWlkLXZlcmJvc2UgMCJ9XV0KLSAKLSAgICAgIyBJZiBERUJVR0lO Rk9EX1VSTFMgaXMgc2V0LCBnZGIgd2lsbCB0cnkgdG8gZG93bmxvYWQgc291cmNlcyBhbmQKLSAg ICAgIyBkZWJ1ZyBpbmZvIGZvciBmLmkuIHN5c3RlbSBsaWJyYXJpZXMuICBQcmV2ZW50IHRoaXMu Ci1AQCAtMjQ5Myw2ICsyNDk0LDE3IEBAIHByb2MgZGVmYXVsdF9nZGJfc3RhcnQgeyB9IHsKLSAJ fQotICAgICB9Ci0gCi0rICAgICMgVHVybiBvZmYgdGhlIG1pc3Npbmcgd2FybmluZ3MgYXMgdGhl IHRlc3RzdWl0ZSBkb2VzIG5vdCBleHBlY3QgaXQuCi0rICAgIHNlbmRfZ2RiICJzZXQgYnVpbGQt aWQtdmVyYm9zZSAwXG4iCi0rICAgIGdkYl9leHBlY3QgMTAgewotKwktcmUgIiRnZGJfcHJvbXB0 ICQiIHsKLSsJICAgIHZlcmJvc2UgIkRpc2FibGVkIHRoZSBtaXNzaW5nIGRlYnVnIGluZm9zIHdh cm5pbmdzLiIgMgotKwl9Ci0rCXRpbWVvdXQgewotKwkgICAgd2FybmluZyAiQ291bGQgbm90IGRp c2FibGUgdGhlIG1pc3NpbmcgZGVidWcgaW5mb3Mgd2FybmluZ3MuLiIKLSsJfQotKyAgICB9Ci0r Ci0gICAgIGdkYl9kZWJ1Z19pbml0Ci0gICAgIHJldHVybiAwCi0gfQotZGlmZiAtLWdpdCBhL2dk Yi90ZXN0c3VpdGUvbGliL21pLXN1cHBvcnQuZXhwIGIvZ2RiL3Rlc3RzdWl0ZS9saWIvbWktc3Vw cG9ydC5leHAKLS0tLSBhL2dkYi90ZXN0c3VpdGUvbGliL21pLXN1cHBvcnQuZXhwCi0rKysgYi9n ZGIvdGVzdHN1aXRlL2xpYi9taS1zdXBwb3J0LmV4cAotQEAgLTMyMSw2ICszMjEsMTYgQEAgcHJv YyBkZWZhdWx0X21pX2dkYl9zdGFydCB7IHsgZmxhZ3Mge30gfSB9IHsKLSAJICAgIHdhcm5pbmcg IkNvdWxkbid0IHNldCB0aGUgd2lkdGggdG8gMC4iCi0gCX0KLSAgICAgfQotKyAgICAjIFR1cm4g b2ZmIHRoZSBtaXNzaW5nIHdhcm5pbmdzIGFzIHRoZSB0ZXN0c3VpdGUgZG9lcyBub3QgZXhwZWN0 IGl0LgotKyAgICBzZW5kX2dkYiAiMTkwLWdkYi1zZXQgYnVpbGQtaWQtdmVyYm9zZSAwXG4iCi0r ICAgIGdkYl9leHBlY3QgMTAgewotKwktcmUgIi4qMTkwLWdkYi1zZXQgYnVpbGQtaWQtdmVyYm9z ZSAwXHJcbjE5MFxcXF5kb25lXHJcbiRtaV9nZGJfcHJvbXB0JCIgewotKwkgICAgdmVyYm9zZSAi RGlzYWJsZWQgdGhlIG1pc3NpbmcgZGVidWcgaW5mb3Mgd2FybmluZ3MuIiAyCi0rCX0KLSsJdGlt ZW91dCB7Ci0rCSAgICB3YXJuaW5nICJDb3VsZCBub3QgZGlzYWJsZSB0aGUgbWlzc2luZyBkZWJ1 ZyBpbmZvcyB3YXJuaW5ncy4uIgotKwl9Ci0rICAgIH0KLSAKLSAgICAgaWYgeyAkc2VwYXJhdGVf aW5mZXJpb3JfcHR5IH0gewotIAltaV9jcmVhdGVfaW5mZXJpb3JfcHR5CgpkaWZmIC0tZ2l0IGEv Z2RiLWFkZC1kZXByZWNhdGVkLXNldHRpbmdzLXB5LXNjcmlwdC5wYXRjaCBiL2dkYi1hZGQtZGVw cmVjYXRlZC1zZXR0aW5ncy1weS1zY3JpcHQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uZGVlMmVhZgotLS0gL2Rldi9udWxsCisrKyBiL2dkYi1hZGQtZGVwcmVjYXRl ZC1zZXR0aW5ncy1weS1zY3JpcHQucGF0Y2gKQEAgLTAsMCArMSw2OCBAQAorRnJvbSBGRURPUkFf UEFUQ0hFUyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFuZHJldyBCdXJnZXNzIDxh YnVyZ2Vzc0ByZWRoYXQuY29tPgorRGF0ZTogVHVlLCAxOSBOb3YgMjAyNCAxMzo1Njo1NiArMDAw MAorU3ViamVjdDogZ2RiLWFkZC1kZXByZWNhdGVkLXNldHRpbmdzLXB5LXNjcmlwdC5wYXRjaAor Cis7OyBOb3QgYSBiYWNrcG9ydC4gIEFkZCBhIG5ldyBzY3JpcHQgd2hpY2ggZGVmaW5lcyBhIHNl dHRpbmcgd2hpY2ggaXMKKzs7IGRlcHJlY2F0ZWQsIGJ1dCB3ZSBkb24ndCB3YW50IHRvIHJlbW92 ZSBpdCBmcm9tIEZlZG9yYSBHREIganVzdCB5ZXQuCisKK2dkYjogYWRkIHNjcmlwdCB3aGljaCBk ZWZpbmVzIGEgZGVwcmVjYXRlZCBzZXR0aW5ncworCitUaGUgYnVpbGQtaWQtY29yZS1sb2FkIHNl dHRpbmcgaGFzIG5vdCBiZWVuIHVzZWZ1bCBzaW5jZSAyMDIwLCBidXQgaXRzCitub3QgY2xlYXIg d2hlbiBpdCB3aWxsIGJlIE9LIHRvIHJlbW92ZSB0aGlzIGZyb20gR0RCLgorCitSYXRoZXIgdGhh biBkZWZpbmluZyB0aGlzIHNldHRpbmcgaW4gQysrIGNvZGUsIGxldHMganVzdCBjcmVhdGUgaXQK K3VzaW5nIHRoaXMgUHl0aG9uIHNjcmlwdCwgdGhpcyBoZWxwcyBrZWVwIHRoZSBGZWRvcmEgc3R1 ZmYgb3V0IG9mIGNvcmUKK0dEQi4KKworZGlmZiAtLWdpdCBhL2dkYi9kYXRhLWRpcmVjdG9yeS9N YWtlZmlsZS5pbiBiL2dkYi9kYXRhLWRpcmVjdG9yeS9NYWtlZmlsZS5pbgorLS0tIGEvZ2RiL2Rh dGEtZGlyZWN0b3J5L01ha2VmaWxlLmluCisrKysgYi9nZGIvZGF0YS1kaXJlY3RvcnkvTWFrZWZp bGUuaW4KK0BAIC04Niw2ICs4Niw3IEBAIFBZVEhPTl9GSUxFX0xJU1QgPSBcCisgCWdkYi91bndp bmRlci5weSBcCisgCWdkYi94bWV0aG9kLnB5IFwKKyAJZ2RiL2NvbW1hbmQvX19pbml0X18ucHkg XAorKwlnZGIvY29tbWFuZC9kZXByZWNhdGVkLXNldHRpbmdzLnB5IFwKKyAJZ2RiL2NvbW1hbmQv ZXhwbG9yZS5weSBcCisgCWdkYi9jb21tYW5kL2ZyYW1lX2ZpbHRlcnMucHkgXAorIAlnZGIvY29t bWFuZC9taXNzaW5nX2ZpbGVzLnB5IFwKK2RpZmYgLS1naXQgYS9nZGIvcHl0aG9uL2xpYi9nZGIv Y29tbWFuZC9kZXByZWNhdGVkLXNldHRpbmdzLnB5IGIvZ2RiL3B5dGhvbi9saWIvZ2RiL2NvbW1h bmQvZGVwcmVjYXRlZC1zZXR0aW5ncy5weQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKKy0tLSAvZGV2 L251bGwKKysrKyBiL2dkYi9weXRob24vbGliL2dkYi9jb21tYW5kL2RlcHJlY2F0ZWQtc2V0dGlu Z3MucHkKK0BAIC0wLDAgKzEsMzUgQEAKKytpbXBvcnQgZ2RiCisrCisrIyBUaGlzIHNldHRpbmcg d2FzIGFkZGVkIHRvIEZlZG9yYSBHREIgYmFjayBpbiAyMDA3LiAgSXQgY29udHJvbGxlZAorKyMg d2hldGhlciBHREIgd291bGQgdXNlIHRoZSBidWlsZC1pZCBleHRyYWN0ZWQgZnJvbSBhIGNvcmUg ZmlsZSB0bworKyMgYXV0by1sb2FkIHRoZSBleGVjdXRhYmxlIGlmIHRoZSB1c2VyIGhhZCBub3Qg YWxyZWFkeSBsb2FkZWQgYW4KKysjIGV4ZWN1dGFibGUuCisrIworKyMgSW4gMjAyMCB0aGlzIHNl dHRpbmcgd2FzIGVmZmVjdGl2ZWx5IGRlcHJlY2F0ZWQgYXMgdGhlIG9ubHkgdXNlIG9mCisrIyB0 aGUgc2V0dGluZydzIHZhbHVlIHdhcyByZW1vdmVkLiAgQWZ0ZXIgdGhpcyBHREIgd291bGQgYWx3 YXlzCisrIyBhdXRvLWxvYWQgYW4gZXhlY3V0YWJsZSBiYXNlZCBvbiB0aGUgYnVpbGQtaWQgaWYg bm8gZXhlY3V0YWJsZSB3YXMKKysjIGFscmVhZHkgbG9hZGVkLgorKyMKKysjIEZvciBub3cgd2Ug bWFpbnRhaW4gdGhpcyBzZXR0aW5nIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHJlYXNvbnMu CisrCisrY2xhc3MgYnVpbGRfaWRfY29yZV9sb2FkKGdkYi5QYXJhbWV0ZXIpOgorKyAgICAiIiJU aGlzIHNldHRpbmcgaXMgZGVwcmVjYXRlZC4gIENoYW5naW5nIGl0IHdpbGwgaGF2ZSBubyBlZmZl Y3QuCisrICAgIFRoaXMgaXMgbWFpbnRhaW5lZCBvbmx5IGZvciBiYWNrd2FyZHMgY29tcGF0aWJp bGl0eS4KKysKKysgICAgV2hlbiBvcGVuaW5nIGEgY29yZS1maWxlLCBhbmQgbm8gZXhlY3V0YWJs ZSBpcyBsb2FkZWQsIEdEQiB3aWxsCisrICAgIGFsd2F5cyB0cnkgdG8gYXV0by1sb2FkIGEgc3Vp dGFibGUgZXhlY3V0YWJsZSB1c2luZyB0aGUgYnVpbGQtaWQKKysgICAgZXh0cmFjdGVkIGZyb20g dGhlIGNvcmUgZmlsZSAoaWYgYSBzdWl0YWJsZSBidWlsZC1pZCBjYW4gYmUKKysgICAgZm91bmQp LiIiIgorKworKyAgICBkZWYgX19pbml0X18oc2VsZik6CisrICAgICAgICBzZWxmLnNldF9kb2Mg PSAiVGhpcyBzZXR0aW5nIGlzIGRlcHJlY2F0ZWQgYW5kIGhhcyBubyBlZmZlY3QuIgorKyAgICAg ICAgc2VsZi5zaG93X2RvYyA9ICJUaGlzIHNldHRpbmcgaXMgZGVwcmVjYXRlZCBhbmQgaGFzIG5v IGVmZmVjdC4iCisrICAgICAgICBzZWxmLnZhbHVlID0gVHJ1ZQorKworKyAgICAgICAgc3VwZXIo KS5fX2luaXRfXygiYnVpbGQtaWQtY29yZS1sb2FkIiwgZ2RiLkNPTU1BTkRfREFUQSwgZ2RiLlBB UkFNX0JPT0xFQU4pCisrICAgIGRlZiB2YWxpZGF0ZShzZWxmKToKKysgICAgICAgIHJldHVybiBU cnVlCisrICAgIGRlZiBnZXRfc2V0X3N0cmluZyhzZWxmKToKKysgICAgICAgIHJhaXNlIGdkYi5H ZGJFcnJvcigiVGhlICdidWlsZC1pZC1jb3JlLWxvYWQnIHNldHRpbmcgaXMgZGVwcmVjYXRlZC4i KQorKworK2J1aWxkX2lkX2NvcmVfbG9hZCgpCgpkaWZmIC0tZ2l0IGEvZ2RiLWFkZC1ycG0tc3Vn Z2VzdGlvbi1zY3JpcHQucGF0Y2ggYi9nZGItYWRkLXJwbS1zdWdnZXN0aW9uLXNjcmlwdC5wYXRj aAppbmRleCA3MzFhZWFhLi4yZWYyZWI0IDEwMDY0NAotLS0gYS9nZGItYWRkLXJwbS1zdWdnZXN0 aW9uLXNjcmlwdC5wYXRjaAorKysgYi9nZGItYWRkLXJwbS1zdWdnZXN0aW9uLXNjcmlwdC5wYXRj aApAQCAtMTQsMTkgKzE0LDE0MiBAQCBzdWdnZXN0cyBkZWJ1Z2luZm8gUlBNcyB0byBpbnN0YWxs LgogZGlmZiAtLWdpdCBhL2dkYi9kYXRhLWRpcmVjdG9yeS9NYWtlZmlsZS5pbiBiL2dkYi9kYXRh LWRpcmVjdG9yeS9NYWtlZmlsZS5pbgogLS0tIGEvZ2RiL2RhdGEtZGlyZWN0b3J5L01ha2VmaWxl LmluCiArKysgYi9nZGIvZGF0YS1kaXJlY3RvcnkvTWFrZWZpbGUuaW4KLUBAIC04OSw2ICs4OSw3 IEBAIFBZVEhPTl9GSUxFX0xJU1QgPSBcCi0gCWdkYi9jb21tYW5kL21pc3NpbmdfZGVidWcucHkg XAorQEAgLTkxLDYgKzkxLDcgQEAgUFlUSE9OX0ZJTEVfTElTVCA9IFwKKyAJZ2RiL2NvbW1hbmQv bWlzc2luZ19maWxlcy5weSBcCiAgCWdkYi9jb21tYW5kL3ByZXR0eV9wcmludGVycy5weSBcCiAg CWdkYi9jb21tYW5kL3Byb21wdC5weSBcCiArCWdkYi9jb21tYW5kL3JwbS1zdWdnZXN0aW9ucy5w eSBcCiAgCWdkYi9jb21tYW5kL3R5cGVfcHJpbnRlcnMucHkgXAogIAlnZGIvY29tbWFuZC91bndp bmRlcnMucHkgXAogIAlnZGIvY29tbWFuZC94bWV0aG9kcy5weSBcCitkaWZmIC0tZ2l0IGEvZ2Ri L2RvYy9nZGIudGV4aW5mbyBiL2dkYi9kb2MvZ2RiLnRleGluZm8KKy0tLSBhL2dkYi9kb2MvZ2Ri LnRleGluZm8KKysrKyBiL2dkYi9kb2MvZ2RiLnRleGluZm8KK0BAIC0xODYsNiArMTg2LDcgQEAK KyAqIFRyYWNlIEZpbGUgRm9ybWF0OjoJCUB2YWx1ZXtHREJOfSB0cmFjZSBmaWxlIGZvcm1hdAor ICogSW5kZXggU2VjdGlvbiBGb3JtYXQ6OiAgICAgICAgLmdkYl9pbmRleCBzZWN0aW9uIGZvcm1h dAorICogRGVidWdpbmZvZDo6ICAgICAgICAgICAgICAgICAgRG93bmxvYWQgZGVidWdnaW5nIHJl c291cmNlcyB3aXRoIEBjb2Rle2RlYnVnaW5mb2R9CisrKiBSUE0gU3VnZ2VzdGlvbnM6OgkJUlBN IFN1Z2dlc3Rpb25zIGZyb20gR0RCCisgKiBNYW4gUGFnZXM6OiAgICAgICAgICAgICAgICAgICBN YW51YWwgcGFnZXMKKyAqIENvcHlpbmc6OiAgICAgICAgICAgICAgICAgICAgIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIHNheXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhv dyB5b3UgY2FuIGNvcHkgYW5kIHNoYXJlIEB2YWx1ZXtHREJOfQorQEAgLTUwMzQxLDYgKzUwMzQy LDExMSBAQAorIAorIEBlbmQgdGFibGUKKyAKKytAbm9kZSBSUE0gU3VnZ2VzdGlvbnMKKytAYXBw ZW5kaXggUmVjZWl2aW5nIFJQTSBpbnN0YWxsYXRpb24gc3VnZ2VzdGlvbnMKKytAY2luZGV4IHJw bSBzdWdnZXN0aW9ucworKworK1doZW4gQHZhbHVle0dEQk59IGxvYWRzIGFuIGV4ZWN1dGFibGUs IG9yIHNoYXJlZCBsaWJyYXJ5LCBhbmQgY2Fubm90CisrZmluZCB0aGUgY29ycmVzcG9uZGluZyBk ZWJ1ZyBpbmZvcm1hdGlvbiwgQHZhbHVle0dEQk59IHdpbGwgY2hlY2sgdG8KKytzZWUgaWYgYW4g UlBNIGlzIGF2YWlsYWJsZSB3aGljaCBjb3VsZCBwcm92aWRlIHRoZSBtaXNzaW5nIGRlYnVnCisr aW5mb3JtYXRpb24uICBJZiBhIHN1aXRhYmxlIFJQTSBpcyBmb3VuZCB0aGVuIEB2YWx1ZXtHREJO fSB3aWxsIHByaW50CisrYSBoaW50IGJlZm9yZSB0aGUgbmV4dCBwcm9tcHQgaXMgZGlzcGxheWVk OgorKworK0BzbWFsbGV4YW1wbGUKKysoQHZhbHVle0dEQlB9KSBmaWxlIC9iaW4vbHMKKytSZWFk aW5nIHN5bWJvbHMgZnJvbSAvYmluL2xzLi4uCisrUmVhZGluZyBzeW1ib2xzIGZyb20gLmdudV9k ZWJ1Z2RhdGEgZm9yIC91c3IvYmluL2xzLi4uCisrKE5vIGRlYnVnZ2luZyBzeW1ib2xzIGZvdW5k IGluIC5nbnVfZGVidWdkYXRhIGZvciAvdXNyL2Jpbi9scykKKytNaXNzaW5nIHJwbXMsIHRyeTog ZG5mIC0tZW5hYmxlcmVwbz0nKmRlYnVnKicgaW5zdGFsbCBjb3JldXRpbHMtZGVidWdpbmZvLTku My03LmZjMzkueDg2XzY0CisrKEB2YWx1ZXtHREJQfSkKKytAZW5kIHNtYWxsZXhhbXBsZQorKwor K0luIHRoaXMgY2FzZSwgaW5zdGFsbGluZyBAZmlsZXtjb3JldXRpbHMtZGVidWdpbmZvLTkuMy03 LmZjMzkueDg2XzY0fQorK3dpbGwgcHJvdmlkZSB0aGUgbWlzc2luZyBkZWJ1ZyBpbmZvcm1hdGlv biBmb3IgQGZpbGV7L2Jpbi9sc30uICBJdCBpcworK3VwIHRvIHlvdSB0byBpbnN0YWxsIHRoZSBz dWdnZXN0ZWQgcGFja2FnZSwgaWYgcG9zc2libGUsIGFuZCBhZnRlcgorK3RoYXQgcmVsb2FkIHRo ZSBleGVjdXRhYmxlIGluIEB2YWx1ZXtHREJOfSBzbyB0aGF0IHRoZSBuZXdseSBpbnN0YWxsZWQK KytkZWJ1ZyBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQuCisrCisrVGhlIFJQTSBzdWdnZXN0aW9u IGZlYXR1cmUgY2FuIGJlIGRpc2FibGVkOgorKworK0B0YWJsZSBAY29kZQorK0BraW5kZXggc2V0 IHJwbS1zdWdnZXN0aW9uIGVuYWJsZWQKKytAa2luZGV4IHNob3cgcnBtLXN1Z2dlc3Rpb24gZW5h YmxlZAorK0BjaW5kZXggcnBtIHN1Z2dlc3Rpb25zLCBkaXNhYmxpbmcKKytAaXRlbSBzZXQgcnBt LXN1Z2dlc3Rpb24gZW5hYmxlZCBAcntbfW9uQHJ7fH1vZmZAcntdfQorK0BpdGVteCBzaG93IHJw bS1zdWdnZXN0aW9uIGVuYWJsZWQKKytXaGVuIEBzYW1we29ufSBAdmFsdWV7R0RCTn0gd2lsbCBt YWtlIFJQTSBzdWdnZXN0aW9ucyB3aGVyZSBwb3NzaWJsZS4KKytXaGVuIEBzYW1we29mZn0gYWxs IFJQTSBzdWdnZXN0aW9uIHdpbGwgYmUgZGlzYWJsZWQuCisrQGVuZCB0YWJsZQorKworK1doZW4g b3BlbmluZyBhIGNvcmUgZmlsZSAoQHB4cmVme2NvcmUtZmlsZSBjb21tYW5kfSksIGl0IG1heSBi ZSB0aGUKKytjYXNlIHRoYXQgbm90IG9ubHkgaXMgdGhlIGRlYnVnIGluZm9ybWF0aW9uIG1pc3Np bmcsIGJ1dCB0aGUKKytjb3JyZXNwb25kaW5nIGV4ZWN1dGFibGUgaXRzZWxmIGlzIG1pc3Npbmcu ICBGb3IgZXhhbXBsZSwgaWYgYSBjb3JlCisrZmlsZSBpcyBjb3BpZWQgZnJvbSBvbmUgbWFjaGlu ZSB0byBhbm90aGVyIGluIG9yZGVyIHRvIGRlYnVnLgorKworK0luIHRoaXMgY2FzZSBAdmFsdWV7 R0RCTn0gaXMgYWJsZSB0byBzdWdnZXN0IGEgY29tbWFuZCB3aGljaCB3aWxsCisraW5zdGFsbCB0 aGUgbWlzc2luZyBleGVjdXRhYmxlIGJhc2VkIG9uIHRoZSBidWlsZC1pZCBvZiB0aGUKKytleGVj dXRhYmxlLiAgRm9yIGV4YW1wbGU6CisrCisrQHNtYWxsZXhhbXBsZQorKyhAdmFsdWV7R0RCUH0p IGNvcmUtZmlsZSAvdG1wL2NvcmUuNTQ4OQorK3dhcm5pbmc6IENhbid0IG9wZW4gZmlsZSAvdXNy L2Jpbi9zbCBkdXJpbmcgZmlsZS1iYWNrZWQgbWFwcGluZyBub3RlIHByb2Nlc3NpbmcKKytbTmV3 IExXUCA1NDg5XQorK0NvcmUgd2FzIGdlbmVyYXRlZCBieSBgc2wnLgorK1Byb2dyYW0gdGVybWlu YXRlZCB3aXRoIHNpZ25hbCBTSUdRVUlULCBRdWl0LgorKyMwICAweDAwMDA3ZjFiNDFjZWQxYTcg aW4gPz8gKCkKKytNaXNzaW5nIGZpbGUocyksIHRyeTogZG5mIC0tZW5hYmxlcmVwbz0nKmRlYnVn KicgaW5zdGFsbCAvdXNyL2xpYi8uYnVpbGQtaWQvMzMvMmYxYThlNTY2OTM5NjBlM2JlYjJkNzBj ZDc5ZGRmZWM0NTFjYzMgL3Vzci9saWIvZGVidWcvLmJ1aWxkLWlkLzMzLzJmMWE4ZTU2NjkzOTYw ZTNiZWIyZDcwY2Q3OWRkZmVjNDUxY2MzLmRlYnVnCisrKEB2YWx1ZXtHREJQfSkKKytAZW5kIHNt YWxsZXhhbXBsZQorKworK1RoZSBjb3JlIGZpbGUgd2FzIGdlbmVyYXRlZCBmcm9tIHRoZSBAZmls ZXsvdXNyL2Jpbi9zbH0gYmluYXJ5LCB3aGljaAorK2lzIG5vdCBwcmVzZW50IG9uIHRoZSBtYWNo aW5lIG9wZW5pbmcgdGhlIGNvcmUgZmlsZS4gIEB2YWx1ZXtHREJOfSBoYXMKKytzdWdnZXN0ZWQg YSBjb21tYW5kLCBiYXNlZCBvbiB0aGUgYnVpbGQtaWQgb2YgdGhlIGJpbmFyeSwgd2hpY2ggd2Fz CisrZXh0cmFjdGVkIGZyb20gdGhlIGNvcmUgZmlsZSwgdGhhdCB3b3VsZCBpbnN0YWxsIGJvdGgg dGhlIG1pc3NpbmcKKytiaW5hcnksIGFuZCB0aGUgY29ycmVzcG9uZGluZyBkZWJ1ZyBpbmZvcm1h dGlvbi4KKysKKytVbmZvcnR1bmF0ZWx5LCBAdmFsdWV7R0RCTn0gZG9lc24ndCBrbm93IGlmIHRo ZSBzdWdnZXN0ZWQgY29tbWFuZCB3aWxsCisrYWN0dWFsbHkgZmluZCBhIG1hdGNoaW5nIFJQTSBv ciBub3QuICBRdWVyeWluZyB0aGUgUlBNIGRhdGFiYXNlIHRvIHNlZQorK3doaWNoIHBhY2thZ2Vz LCBpZiBhbnksIHdpbGwgcHJvdmlkZSBhIGZpbGUgd2l0aCB0aGUgZ2l2ZW4gYnVpbGQtaWQsCisr aXMgcmF0aGVyIHNsb3cuICBBcyBAZmlsZXsvdXNyL2Jpbi9zbH0gaXMgYXZhaWxhYmxlIGluIGFu IFJQTSwgdGhlbgorK3RoZSBhYm92ZSBjb21tYW5kIHdpbGwgc3VjY2VlZC4KKysKKytJdCBpcyBw b3NzaWJsZSB0byBoYXZlIEB2YWx1ZXtHREJOfSBjaGVjayB0byBzZWUgaWYgdGhlcmUgaXMgYSBw YWNrYWdlCisrYXZhaWxhYmxlIGJlZm9yZSBtYWtpbmcgdGhlIHN1Z2dlc3Rpb24sIGJ1dCB0aGlz IGlzIHNpZ25pZmljYW50bHkKKytzbG93ZXIuICBUbyBlbmFibGUgdGhpcyBtb2RlIHVzZSB0aGUg Zm9sbG93aW5nIGNvbW1hbmQ6CisrCisrQHRhYmxlIEBjb2RlCisrQGtpbmRleCBzZXQgcnBtLXN1 Z2dlc3Rpb24gYnVpbGQtaWQtbW9kZQorK0BraW5kZXggc2hvdyBycG0tc3VnZ2VzdGlvbiBidWls ZC1pZC1tb2RlCisrQGNpbmRleCBycG0gc3VnZ2VzdGlvbnMsIGJ1aWxkLWlkLW1vZGUKKytAaXRl bSBzZXQgcnBtLXN1Z2dlc3Rpb24gYnVpbGQtaWQtbW9kZSBAcntbfWZhc3RAcnt8fXNsb3dAcntd fQorK0BpdGVteCBzaG93IHJwbS1zdWdnZXN0aW9uIGJ1aWxkLWlkLW1vZGUKKytXaGVuIHNldCB0 byBAc2FtcHtmYXN0fSwgd2hpY2ggaXMgdGhlIGRlZmF1bHQsIEB2YWx1ZXtHREJOfSB3aWxsIG9m ZmVyCisrc3VnZ2VzdGlvbnMgYmFzZWQgb24gdGhlIGJ1aWxkLWlkIG9mIGFueSBtaXNzaW5nIGV4 ZWN1dGFibGVzIG9yIHNoYXJlZAorK2xpYnJhcmllcyB3aGlsZSBvcGVuaW5nIGEgY29yZSBmaWxl LiAgVGhpcyBpcyBmYXN0LCBidXQgQHZhbHVle0dEQk59CisraGFzIG5vdCBjaGVja2VkIGlmIHRo ZXJlIGlzIGEgcGFja2FnZSBhdmFpbGFibGUgdGhhdCBjYW4gc3VwcGx5IHRoZQorK3JlcXVpcmVk IGZpbGUsIHNvIHJ1bm5pbmcgdGhlIHN1Z2dlc3RlZCBjb21tYW5kIG1pZ2h0IG5vdCBpbnN0YWxs IGFueQorK3BhY2thZ2VzLgorKworK1doZW4gc2V0IHRvIEBzYW1we3Nsb3d9LCBlYWNoIHRpbWUg QHZhbHVle0dEQk59IGVuY291bnRlcnMgYW4KKytleGVjdXRhYmxlLCBvciBzaGFyZWQgbGlicmFy eSwgdGhhdCBpcyBtaXNzaW5nLCBAdmFsdWV7R0RCTn0gd2lsbAorK2NoZWNrIHRvIHNlZSBpZiB0 aGVyZSBpcyBhbiBSUE0gYXZhaWxhYmxlIHRoYXQgd2lsbCBzdXBwbHkgdGhlIG1pc3NpbmcKKyti aW5hcnkuICBJZiBhIHN1aXRhYmxlIFJQTSBpcyBmb3VuZCB0aGVuIEB2YWx1ZXtHREJOfSB3aWxs IG9mZmVyIGEKKytjb21tYW5kIHdoaWNoIHdpbGwgaW5zdGFsbCB0aGUgbWlzc2luZyBSUE0uICBJ ZiBubyBzdWl0YWJsZSBSUE0gaXMKKytmb3VuZCB0aGVuIEB2YWx1ZXtHREJOfSB3aWxsIG1ha2Ug bm8gc3VnZ2VzdGlvbnMuCisrQGVuZCB0YWJsZQorKworK0l0IGlzIHBvc3NpYmxlIHRvIHJldmll dyBhbGwgb2YgdGhlIHByZXZpb3VzIFJQTSBzdWdnZXN0aW9ucyB0aGF0CisrQHZhbHVle0dEQk59 IGhhcyBtYWRlIHVzaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKKysKKytAdGFibGUgQGNvZGUK KytAa2luZGV4IGluZm8gcnBtLXN1Z2dlc3Rpb25zCisrQGNpbmRleCBycG0gc3VnZ2VzdGlvbnMs IGxpc3RpbmcKKytAaXRlbSBpbmZvIHJwbS1zdWdnZXN0aW9ucworK0xpc3QgYWxsIG9mIHRoZSBS UE0gc3VnZ2VzdGlvbnMgQHZhbHVle0dEQk59IGhhcyBtYWRlIHNpbmNlIHRoZQorK2V4ZWN1dGFi bGUgd2FzIGxhc3QgY2hhbmdlZC4KKytAZW5kIHRhYmxlCisrCisgQG5vZGUgTWFuIFBhZ2VzCisg QGFwcGVuZGl4IE1hbnVhbCBwYWdlcworIEBjaW5kZXggTWFuIHBhZ2VzCiBkaWZmIC0tZ2l0IGEv Z2RiL3B5dGhvbi9saWIvZ2RiL2NvbW1hbmQvcnBtLXN1Z2dlc3Rpb25zLnB5IGIvZ2RiL3B5dGhv bi9saWIvZ2RiL2NvbW1hbmQvcnBtLXN1Z2dlc3Rpb25zLnB5CiBuZXcgZmlsZSBtb2RlIDEwMDY0 NAogLS0tIC9kZXYvbnVsbAogKysrIGIvZ2RiL3B5dGhvbi9saWIvZ2RiL2NvbW1hbmQvcnBtLXN1 Z2dlc3Rpb25zLnB5Ci1AQCAtMCwwICsxLDEzNCBAQAorQEAgLTAsMCArMSw1NTIgQEAKICsjIENv cHlyaWdodCAyMDIzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogKwogKyMgVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkKQEAgLTQyLDkgKzE2NSwxOSBAQCBuZXcgZmlsZSBtb2RlIDEwMDY0NAogKyMgWW91IHNo b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UKICsjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cu Z251Lm9yZy9saWNlbnNlcy8+LgogKwotK2ltcG9ydCBzeXMKICtpbXBvcnQgZ2RiCiAraW1wb3J0 IGdkYi5taXNzaW5nX2RlYnVnCisraW1wb3J0IGdkYi5taXNzaW5nX29iamZpbGUKKysKKysjIFRo ZXNlIG1vZHVsZXMgYXJlIGFsbCBzeXN0ZW0gbW9kdWxlcywgYW5kIHNob3VsZCBiZSBhdmFpbGFi bGUgb24gYW55CisrIyBjb3JyZWN0bHkgc2V0dXAgUHl0aG9uIGluc3RhbGwuCisraW1wb3J0IHN5 cworK2ltcG9ydCBvcworK2ltcG9ydCBzdWJwcm9jZXNzCisraW1wb3J0IHJlCisrZnJvbSB0aHJl YWRpbmcgaW1wb3J0IFRocmVhZAorK2ltcG9ydCB0aW1lCisrCiArdHJ5OgogKyAgICBpbXBvcnQg cnBtCiArZXhjZXB0IE1vZHVsZU5vdEZvdW5kRXJyb3I6CkBAIC02OCw2ICsyMDEsMTEgQEAgbmV3 IGZpbGUgbW9kZSAxMDA2NDQKICsgICAgICAgIGdkYi5ldmVudHMuYmVmb3JlX3Byb21wdC5kaXNj b25uZWN0KGJlZm9yZV9wcm9tcHQpCiArCiArICAgIGdkYi5ldmVudHMuYmVmb3JlX3Byb21wdC5j b25uZWN0KGJlZm9yZV9wcm9tcHQpCisrCisrICAgICMgSW1wbGVtZW50ICdpbmZvIHJwbS1zdWdn ZXN0aW9ucycgd2hlbiB0aGUgJ3JwbScgbW9kdWxlIGlzIG5vdAorKyAgICAjIGF2YWlsYWJsZS4g IEp1c3QgdGhyb3dzIGFuIGVycm9yLgorKyAgICBkZWYgaW5mb19ycG1fc3VnZ2VzdGlvbnMoKToK KysgICAgICAgIHJhaXNlIGdkYi5HZGJFcnJvcigicnBtLXN1Z2dlc3Rpb25zIGFyZSBkaXNhYmxl ZCBhcyB0aGUgUHl0aG9uICdycG0nIG1vZHVsZSBpcyBub3QgaW5zdGFsbGVkIikKICtlbHNlOgog KyAgICAjIFRyYWNrIGFsbCB0aGUgUlBNcyBzdWdnZXN0ZWQgZHVyaW5nIGEgc2luZ2xlIGRlYnVn IHNlc3Npb24gc28gd2UKICsgICAgIyBkb24ndCBzdWdnZXN0IHRoZSBzYW1lIFJQTSB0d2ljZS4g IFRoaXMgaXMgb25seSBjbGVhcmVkIHdoZW4gdGhlCkBAIC04MCw2ICsyMTgsOTQgQEAgbmV3IGZp bGUgbW9kZSAxMDA2NDQKICsgICAgIyB0aGUgcHJvbXB0IGlzIHNob3duLgogKyAgICBfX3N1Z2dl c3RfcnBtcyA9IHt9CiArCisrICAgICMgVHJhY2sgYWxsIHRoZSBidWlsZC1pZHMgc3VnZ2VzdGVk IGR1cmluZyBhIHNpbmdsZSBkZWJ1ZyBzZXNzaW9uIHNvIHdlCisrICAgICMgZG9uJ3Qgc3VnZ2Vz dCBpbnN0YWxsaW5nIHVzaW5nIHRoZSBzYW1lIGJ1aWxkLWlkIHR3aWNlLiAgVGhpcyBpcyBvbmx5 CisrICAgICMgY2xlYXJlZCB3aGVuIHRoZSBtYWluIGV4ZWN1dGFibGUgaXMgY2hhbmdlZC4KKysg ICAgX19taXNzaW5nX2J1aWxkX2lkcyA9IHt9CisrCisrICAgICMgVHJhY2sgYW55IGJ1aWxkLWlk cyB0aGF0IGhhdmUgYmVlbiBkaXNjb3ZlcmVkIG1pc3Npbmcgc2luY2UgdGhlIGxhc3QKKysgICAg IyB0aW1lIHRoZSBwcm9tcHQgd2FzIGRpc3BsYXllZC4gIEJ1aWxkLWlkcyBpbiBoZXJlIGFyZSBh bHNvIHByZXNlbnQgaW4KKysgICAgIyB0aGUgX19NSVNTSU5HX0JVSUxEX0lEUyBkaWN0aW9uYXJ5 LCBidXQgdGhpcyBkaWN0aW9uYXJ5IGlzIGNsZWFyZWQKKysgICAgIyBlYWNoIHRpbWUgdGhlIHBy b21wdCBpcyBzaG93bi4KKysgICAgX19zdWdnZXN0X2J1aWxkX2lkcyA9IHt9CisrCisrICAgICMg VGhlIGJ1aWxkLWlkIHRvIFJQTSBsb29rdXAgaXMgdmVyeSBzbG93LiAgVGhpcyBjYWNoZSBtYXBz CisrICAgICMgYnVpbGQtaWRzIHRvIHRoZSBzZXQgb2YgUlBNIHdlIGNhbiBzdWdnZXN0IGluc3Rh bGxpbmcuICBUaGUga2V5CisrICAgICMgaXMgdGhlIGJ1aWxkLWlkIHN0cmluZywgYW5kIHRoZSB2 YWx1ZSBpcyBhIGxpc3Qgb2YgUlBNIG5hbWVzLCBvcgorKyAgICAjIE5vbmUgaWYgdGhlcmUgd2Fz IGFuIGVycm9yIHdpdGggdGhlIGJ1aWxkLWlkIHRvIFJQTSBsb29rdXAuCisrICAgICMKKysgICAg IyBUaGlzIGNhY2hlIGlzIG5ldmVyIGNsZWFyZWQsIGV2ZW4gd2hlbiB0aGUgZXhlY3V0YWJsZSBp cworKyAgICAjIGNoYW5nZWQuICBUaGUgYnVpbGQtaWRzIHNob3VsZCBiZSB1bmlxdWUsIHNvIGEg YnVpbGQtaWQgbG9va3VwCisrICAgICMgc2hvdWxkIGJlIGdvb2QgZm9yIHRoZSBsaWZldGltZSBv ZiB0aGUgc2Vzc2lvbi4KKysgICAgX19idWlsZF9pZF9sb29rdXBfY2FjaGUgPSB7fQorKworKyAg ICAjIFdoZW4gc2VhcmNoaW5nIGZvciBhbiBSUE0gZ2l2ZW4gYSBidWlsZC1pZCwgaWYgdGhlIHNl YXJjaCB0YWtlcworKyAgICAjIHRvbyBsb25nLCB0aGVuIGEgbWVzc2FnZSBpcyBwcmludGVkIHRv IHRoZSB1c2VyLiAgV2Ugb25seSBwcmludAorKyAgICAjIHRoZSBtZXNzYWdlIG9uY2UgYmV0d2Vl biBlYWNoIEdEQiBwcm9tcHQuICBUaGlzIGZsYWcgaXMgc2V0IFRydWUKKysgICAgIyB3aGVuIHRo ZSBtZXNzYWdlIGlzIHByaW50ZWQsIGFuZCByZXNldCB0byBGYWxzZSB3aGVuIGEgcHJvbXB0IGlz CisrICAgICMgZGlzcGxheWVkLgorKyAgICBfX3NlYXJjaGluZ19tZXNzYWdlX3ByaW50ZWQgPSBG YWxzZQorKworKyAgICAjIEFkZCBhIHN1Z2dlc3Rpb24gdG8gaW5zdGFsbCBSUE1fTkFNRSAodGhl IGZ1bGwgbmFtZSBvZiBhbiBSUE0pCisrICAgICMgdG8gdGhlIGxpc3Qgb2Ygc3VnZ2VzdGlvbnMg dG8gbWFrZSB0aGUgbmV4dCB0aW1lIGEgcHJvbXB0IGlzCisrICAgICMgZGlzcGxheWVkLgorKyAg ICBkZWYgYWRkX3JwbV9zdWdnZXN0aW9uKHJwbV9uYW1lKToKKysgICAgICAgIGdsb2JhbCBfX21p c3NpbmdfcnBtcworKyAgICAgICAgZ2xvYmFsIF9fc3VnZ2VzdF9ycG1zCisrCisrICAgICAgICBp ZiBub3QgcnBtX25hbWUgaW4gX19taXNzaW5nX3JwbXM6CisrICAgICAgICAgICAgX19zdWdnZXN0 X3JwbXNbcnBtX25hbWVdID0gVHJ1ZQorKyAgICAgICAgICAgIF9fbWlzc2luZ19ycG1zW3JwbV9u YW1lXSA9IFRydWUKKysKKysgICAgIyBSZXR1cm4gVHJ1ZSBpZiBSUE1fTkFNRSBpcyBpbnN0YWxs ZWQsIHdoZXJlIFJQTV9OQU1FIGlzIHRoZSBmdWxsCisrICAgICMgbmFtZSBvZiBhbiBSUE0uCisr ICAgIGRlZiBpc19ycG1faW5zdGFsbGVkKHRzLCBycG1fbmFtZSk6CisrICAgICAgICByZXMgPSB0 cy5kYk1hdGNoKHJwbS5SUE1EQklfTEFCRUwsIHJwbV9uYW1lKQorKyAgICAgICAgcmV0dXJuIGxl bihyZXMpID4gMAorKworKyAgICAjIEFkZCBhIHN1Z2dlc3Rpb24gdG8gaW5zdGFsbCBSUE1zIGJh c2VkIG9uIEJVSUxEX0lELCBhIHN0cmluZworKyAgICAjIGNvbnRhaW5pbmcgYSBidWlsZC1pZCwg dG8gdGhlIGxpc3Qgb2Ygc3VnZ2VzdGlvbnMgdG8gbWFrZSB0aGUgbmV4dAorKyAgICAjIHRpbWUg YSBwcm9tcHQgaXMgZGlzcGxheWVkLgorKyAgICBkZWYgYWRkX2J1aWxkX2lkX3N1Z2dlc3Rpb24o YnVpbGRfaWQpOgorKyAgICAgICAgZ2xvYmFsIF9fbWlzc2luZ19idWlsZF9pZHMKKysgICAgICAg IGdsb2JhbCBfX3N1Z2dlc3RfYnVpbGRfaWRzCisrCisrICAgICAgICBpZiBub3QgYnVpbGRfaWQg aW4gX19taXNzaW5nX2J1aWxkX2lkczoKKysgICAgICAgICAgICBfX3N1Z2dlc3RfYnVpbGRfaWRz W2J1aWxkX2lkXSA9IFRydWUKKysgICAgICAgICAgICBfX21pc3NpbmdfYnVpbGRfaWRzW2J1aWxk X2lkXSA9IFRydWUKKysKKysgICAgIyBSZXR1cm4gdHJ1ZSBpZiAnL3Vzci9saWInIGlzIGluIHRo ZSBkZWJ1Zy1maWxlLWRpcmVjdG9yeSBsaXN0LgorKyAgICAjIFN5c3RlbSBwYWNrYWdlcyBpbnN0 YWxsIHRoZWlyIGRlYnVnIGluZm9ybWF0aW9uIGludG8gL3Vzci9saWIsCisrICAgICMgc28gaWYg R0RCIGlzbid0IGxvb2tpbmcgaW4gdGhhdCBkaXJlY3RvcnksIHRoZW4gdGhlcmUncyBubworKyAg ICAjIHJlYXNvbiB0byB0cnkgYW5kIGZpZ3VyZSBvdXQgYSBzdWl0YWJsZSBSUE0gdG8gaW5zdGFs bC4KKysgICAgZGVmIHVzaW5nX3N1aXRhYmxlX2RlYnVnX2ZpbGVfZGlyZWN0b3J5KCk6CisrICAg ICAgICBkZWJ1Z19maWxlX2RpcmVjdG9yaWVzID0gZ2RiLnBhcmFtZXRlcigiZGVidWctZmlsZS1k aXJlY3RvcnkiKQorKyAgICAgICAgZm9yIGQgaW4gZGVidWdfZmlsZV9kaXJlY3Rvcmllcy5zcGxp dChvcy5wYXRoc2VwKToKKysgICAgICAgICAgICBpZiBkWzo4XSA9PSAiL3Vzci9saWIiOgorKyAg ICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorKyAgICAgICAgcmV0dXJuIEZhbHNlCisrCisrICAg ICMgUmV0dXJuIFRydWUgaWYgcnBtLXN1Z2dlc3Rpb24gaXMgZGlzYWJsZWQgZm9yIGFueSByZWFz b24uCisrICAgIGRlZiBycG1fc3VnZ2VzdGlvbl9pc19kaXNhYmxlZCgpOgorKyAgICAgICAgZ2xv YmFsIHBhcmFtX2J1aWxkX2lkX3ZlcmJvc2UKKysKKysgICAgICAgICMgSWYgL3Vzci9saWIvIGlz IG5vdCBiZWluZyB1c2VkIHRvIGZpbmQgZGVidWcgaW5mb3JtYXRpb24KKysgICAgICAgICMgdGhl biB0aGVyZSdzIG5vIHBvaW50IG9mZmVyaW5nIGFueSBSUE1zIGFzIEdEQiB3b3VsZCBub3QKKysg ICAgICAgICMgZmluZCB0aGUgbmV3bHkgaW5zdGFsbGVkIGNvbnRlbnQuCisrICAgICAgICBpZiBu b3QgdXNpbmdfc3VpdGFibGVfZGVidWdfZmlsZV9kaXJlY3RvcnkoKToKKysgICAgICAgICAgICBy ZXR1cm4gVHJ1ZQorKworKyAgICAgICAgIyBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIGlm IGJ1aWxkLWlkLXZlcmJvc2UgaXMgc2V0IHRvCisrICAgICAgICAjIHplcm8sIHRoZW4gZGlzYWJs ZSBSUE0gc3VnZ2VzdGlvbi4KKysgICAgICAgIGlmIHBhcmFtX2J1aWxkX2lkX3ZlcmJvc2UudmFs dWUgPT0gMDoKKysgICAgICAgICAgICByZXR1cm4gVHJ1ZQorKworKyAgICAgICAgIyBJcyAncnBt LXN1Z2dlc3Rpb24gZW5hYmxlZCcgc2V0IHRvICdvZmYnPworKyAgICAgICAgaWYgbm90IHBhcmFt X3JwbV9zdWdnZXN0aW9uX2VuYWJsZWQudmFsdWU6CisrICAgICAgICAgICAgcmV0dXJuIFRydWUK KysKKysgICAgICAgIHJldHVybiBGYWxzZQorKwogKwogKyAgICAjIExvb2t1cCBSUE1zIHRoYXQg bWlnaHQgcHJvdmlkZSB0aGUgZGVidWcgaW5mb3JtYXRpb24gZm9yIEZJTEVOQU1FLAogKyAgICAj IHdoaWNoIGlzIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHBhdGggdG8gYW4gb2JqZWN0IGZpbGUg R0RCIGNvdWxkCkBAIC04OCw1OSArMzE0LDI0MyBAQCBuZXcgZmlsZSBtb2RlIDEwMDY0NAogKyAg ICAjIElmIGEgcG9zc2libGUgUlBNIGlzIGZvdW5kIHRoZW4gdGhpcyBpcyBhZGRlZCB0byB0aGUg Z2xvYmFscwogKyAgICAjIF9fTUlTU0lOR19SUE1TIGFuZCBfX1NVR0dFU1RfUlBNUywgd2hpY2gg YXJlIHVzZWQgZWxzZXdoZXJlIGluIHRoaXMKICsgICAgIyBzY3JpcHQuCi0rICAgIGRlZiBmaW5k X3N1Z2dlc3Rpb25zKGZpbGVuYW1lKToKLSsgICAgICAgIHRzID0gcnBtLlRyYW5zYWN0aW9uU2V0 KCkKKysgICAgZGVmIGZpbmRfZGVidWdfc3VnZ2VzdGlvbnMoZmlsZW5hbWUpOgorKyAgICAgICAg aWYgcnBtX3N1Z2dlc3Rpb25faXNfZGlzYWJsZWQoKToKKysgICAgICAgICAgICByZXR1cm4KICsK KysgICAgICAgIHRzID0gcnBtLlRyYW5zYWN0aW9uU2V0KCkKICsgICAgICAgIG1pID0gdHMuZGJN YXRjaChycG0uUlBNREJJX0JBU0VOQU1FUywgZmlsZW5hbWUpCiArICAgICAgICBmb3IgaCBpbiBt aToKICsgICAgICAgICAgICAjIEJ1aWxkIHRoZSBkZWJ1Z2luZm8gcGFja2FnZSBuYW1lLgogKyAg ICAgICAgICAgIG9iaiA9IGguZm9ybWF0KCIle25hbWV9LWRlYnVnaW5mby0le3ZlcnNpb259LSV7 cmVsZWFzZX0uJXthcmNofSIpCisrICAgICAgICAgICAgcnBtX25hbWUgPSBzdHIob2JqKQogKwog KyAgICAgICAgICAgICMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBwYWNrYWdlIGlzIGluc3RhbGxlZC4K LSsgICAgICAgICAgICBtaTIgPSB0cy5kYk1hdGNoKHJwbS5SUE1EQklfTEFCRUwsIHN0cihvYmop KQotKyAgICAgICAgICAgIGlmIGxlbihtaTIpID4gMDoKKysgICAgICAgICAgICBpZiBpc19ycG1f aW5zdGFsbGVkKHRzLCBycG1fbmFtZSk6CiArICAgICAgICAgICAgICAgIGNvbnRpbnVlCiArCi0r ICAgICAgICAgICAgIyBOb3cgYnVpbGQgdGhlIG5hbWUgb2YgdGhlIHBhY2thZ2UgRklMRU5BTUUg Y2FtZSBmcm9tLgotKyAgICAgICAgICAgIG9iaiA9IGguZm9ybWF0KCIle25hbWV9LSV7dmVyc2lv bn0tJXtyZWxlYXNlfS4le2FyY2h9IikKLSsgICAgICAgICAgICBycG1fbmFtZSA9IHN0cihvYmop Ci0rICAgICAgICAgICAgaWYgbm90IHJwbV9uYW1lIGluIF9fbWlzc2luZ19ycG1zOgotKyAgICAg ICAgICAgICAgICBfX3N1Z2dlc3RfcnBtc1tycG1fbmFtZV0gPSBUcnVlCi0rICAgICAgICAgICAg ICAgIF9fbWlzc2luZ19ycG1zW3JwbV9uYW1lXSA9IFRydWUKKysgICAgICAgICAgICBhZGRfcnBt X3N1Z2dlc3Rpb24ocnBtX25hbWUpCisrCisrCisrICAgICMgUmV0dXJuIGEgc3RyaW5nIHdoaWNo IGlzIHRoZSBmaWxlbmFtZSBvZiB0aGUgZmlsZW5hbWUKKysgICAgIyBjb3JyZXNwb25kaW5nIHRv IEJVSUxEX0lEIGluIG9uZSBvZiB0aGUgdHdvIGxvY2F0aW9ucyB1bmRlcgorKyAgICAjIC91c3Iv bGliLgorKyAgICAjCisrICAgICMgV2hlbiBERUJVR19QIGlzIFRydWUsIHJldHVybiBhIGZpbGVu YW1lIHdpdGhpbjoKKysgICAgIyAvdXNyL2xpYi9kZWJ1Zy8uYnVpbGQtaWQvIGFuZCB3aGVuIERF QlVHX1AgaXMgRmFsc2UsIHJldHVybiBhCisrICAgICMgZmlsZW5hbWUgd2l0aGluOiAvdXNyL2xp Yi8uYnVpbGQtaWQvLgorKyAgICAjCisrICAgICMgVGhlIFNVRkZJWCBzdHJpbmcgaXMgYXBwZW5k ZWQgdG8gdGhlIGdlbmVyYXRlZCBmaWxlbmFtZS4KKysgICAgZGVmIGJ1aWxkX2lkX3RvX3Vzcl9s aWJfZmlsZW5hbWUoYnVpbGRfaWQsIGRlYnVnX3AsIHN1ZmZpeCA9ICIiKToKKysgICAgICAgIGtl eSA9IGJ1aWxkX2lkWzoyXQorKyAgICAgICAgcnN0ID0gYnVpbGRfaWRbMjpdCisrCisrICAgICAg ICBmaWxlbmFtZSA9ICcvdXNyL2xpYicKKysgICAgICAgIGlmIGRlYnVnX3A6CisrICAgICAgICAg ICAgZmlsZW5hbWUgKz0gJy9kZWJ1ZycKKysgICAgICAgIGZpbGVuYW1lICs9ICcvLmJ1aWxkLWlk LycgKyBrZXkgKyAnLycgKyByc3QgKyBzdWZmaXgKKysKKysgICAgICAgIHJldHVybiBmaWxlbmFt ZQorKworKyAgICAjIEEgcmVnZXhwIG9iamVjdCB1c2VkIHRvIG1hdGNoIGFnYWluc3QgdGhlIG91 dHB1dCBvZiBgZG5mYC4gIFRoaXMKKysgICAgIyBpcyBpbml0aWFsaXNlZCB0aGUgZmlyc3QgdGlt ZSBpdCBpcyBuZWVkZWQuCisrICAgIGZpbmRfb2JqZmlsZV9zdWdnZXN0aW9uc19yZSA9IE5vbmUK KysKKysgICAgIyBHaXZlbiBCVUlMRF9JRCwgYSBzdHJpbmcgY29udGFpbmluZyBhIGJ1aWxkLWlk LCBydW4gYSBgZG5mYAorKyAgICAjIGNvbW1hbmQgdG8gZmlndXJlIG91dCBpZiBhbnkgUlBNcyBj YW4gcHJvdmlkZSBhIGZpbGUgd2l0aCB0aGF0CisrICAgICMgYnVpbGQtaWQuCisrICAgICMKKysg ICAgIyBJZiBhbnkgc3VpdGFibGUgUlBNcyBhcmUgZm91bmQgdGhlbiBgYWRkX3JwbV9zdWdnZXN0 aW9uYCBpcyBjYWxsZWQKKysgICAgIyB0byByZWdpc3RlciB0aGUgc3VnZ2VzdGlvbi4KKysgICAg IworKyAgICAjIFRoaXMgZnVuY3Rpb24gaXMgcHJldHR5IHNsb3csIHdoaWNoIGlzIGEgc2hhbWUs IGFzIHRoZSByZXN1bHRzCisrICAgICMgcmV0dXJuZWQgYXJlIG11Y2ggbmljZXIgdGhhbiBqdXN0 IHRlbGxpbmcgdGhlIHVzZXIgdG8gdHJ5IHRoZQorKyAgICAjIGxvb2t1cCBjb21tYW5kIGZvciB0 aGVtc2VsdmVzLgorKyAgICBkZWYgZmluZF9vYmpmaWxlX3N1Z2dlc3Rpb25zX2luX3RocmVhZChi dWlsZF9pZCk6CisrICAgICAgICBnbG9iYWwgZmluZF9vYmpmaWxlX3N1Z2dlc3Rpb25zX3JlCisr CisrICAgICAgICBpZiBmaW5kX29iamZpbGVfc3VnZ2VzdGlvbnNfcmUgaXMgTm9uZToKKysgICAg ICAgICAgICBmaW5kX29iamZpbGVfc3VnZ2VzdGlvbnNfcmUgPSByZS5jb21waWxlKCJeKC4qKS1k ZWJ1Z2luZm8tKC4qKSA6IERlYnVnIGluZm9ybWF0aW9uIGZvciBwYWNrYWdlICguKikkIikKKysK KysgICAgICAgIHJlc3VsdCA9IHN1YnByb2Nlc3MucnVuKFsnZG5mJywgIi0tZW5hYmxlcmVwbz0q ZGVidWcqIiwgJy0tbm9ncGdjaGVjaycsICctQycsICdwcm92aWRlcycsCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYnVpbGRfaWRfdG9fdXNyX2xpYl9maWxlbmFtZShidWlsZF9p ZCwgVHJ1ZSldLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FwdHVyZV9vdXRw dXQ9VHJ1ZSwgdGltZW91dD0zMCkKKysKKysgICAgICAgIGxpbmVzID0gcmVzdWx0LnN0ZG91dC5k ZWNvZGUoJ3V0Zi04Jykuc3BsaXRsaW5lcygpCisrICAgICAgICB0cyA9IHJwbS5UcmFuc2FjdGlv blNldCgpCisrCisrICAgICAgICBmb3IgbCBpbiBsaW5lczoKKysgICAgICAgICAgICBtID0gZmlu ZF9vYmpmaWxlX3N1Z2dlc3Rpb25zX3JlLm1hdGNoKGwpCisrICAgICAgICAgICAgaWYgbm90IG06 CisrICAgICAgICAgICAgICAgIGNvbnRpbnVlCisrICAgICAgICAgICAgaWYgbS5ncm91cCgxKSAh PSBtLmdyb3VwKDMpOgorKyAgICAgICAgICAgICAgICByZXR1cm4KKysKKysgICAgICAgICAgICBt YWluX3JwbSA9IG0uZ3JvdXAoMSkgKyAnLScgKyBtLmdyb3VwKDIpCisrICAgICAgICAgICAgZGJn X3JwbSA9IG0uZ3JvdXAoMSkgKyAnLWRlYnVnaW5mby0nICsgbS5ncm91cCgyKQorKworKyAgICAg ICAgICAgIGlmIG5vdCBpc19ycG1faW5zdGFsbGVkKHRzLCBtYWluX3JwbSk6CisrICAgICAgICAg ICAgICAgIGFkZF9ycG1fc3VnZ2VzdGlvbihtYWluX3JwbSkKKysKKysgICAgICAgICAgICBpZiBu b3QgaXNfcnBtX2luc3RhbGxlZCh0cywgZGJnX3JwbSk6CisrICAgICAgICAgICAgICAgIGFkZF9y cG1fc3VnZ2VzdGlvbihkYmdfcnBtKQorKworKyAgICAgICAgcmV0dXJuCiArCisrICAgICMgQ2Fs bCBgZmluZF9vYmpmaWxlX3N1Z2dlc3Rpb25zX2luX3RocmVhZGAgaXMgYSBzZXBhcmF0ZSB0aHJl YWQsCisrICAgICMgdGhlbiB3YWl0IGZvciB0aGUgdGhyZWFkIHRvIGNvbXBsZXRlLiAgRG9uJ3Qg dG91Y2ggYW55IHNoYXJlZAorKyAgICAjIHN0YXRlIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSB0aHJl YWQgdG8gY29tcGxldGUuICBUaGVyZSdzIG5vCisrICAgICMgbG9ja2luZyBvbiBhbnkgb2Ygb3Vy IGNhY2hlcywgYW5kIHRoZSB3b3JrZXIgdGhyZWFkIHdpbGwgYWRkIFJQTQorKyAgICAjIHN1Z2dl c3Rpb25zIGFzIGl0IHdhbnRzLgorKyAgICAjCisrICAgICMgSWYgdGhyZSB0aHJlYWQgdGFrZXMg dG9vIGxvbmcgdG8gY29tcGxldGUgdGhlbiBwcmludCBhIG1lc3NhZ2UKKysgICAgIyB0byB0aGUg dXNlciB0ZWxsaW5nIHRoZW0gd2hhdCdzIGdvaW5nIG9uLgorKyAgICBkZWYgZmluZF9vYmpmaWxl X3N1Z2dlc3Rpb25zX3Nsb3dfY29yZShidWlsZF9pZCk6CisrICAgICAgICBnbG9iYWwgX19zZWFy Y2hpbmdfbWVzc2FnZV9wcmludGVkCisrCisrICAgICAgICB0aHJlYWQgPSBUaHJlYWQodGFyZ2V0 ID0gZmluZF9vYmpmaWxlX3N1Z2dlc3Rpb25zX2luX3RocmVhZCwgYXJncyA9IChidWlsZF9pZCwg KSkKKysgICAgICAgIHRocmVhZC5zdGFydCgpCisrICAgICAgICBzdGFydCA9IHRpbWUudGltZV9u cygpCisrCisrICAgICAgICB3aGlsZSB0aHJlYWQuaXNfYWxpdmUgKCk6CisrICAgICAgICAgICAg dGltZS5zbGVlcCgwLjA1KQorKyAgICAgICAgICAgIG5vdyA9IHRpbWUudGltZV9ucyAoKQorKyAg ICAgICAgICAgIGlmIG5vdCBfX3NlYXJjaGluZ19tZXNzYWdlX3ByaW50ZWQgYW5kIChub3cgLSBz dGFydCA+IDEwMDAwMDAwMDApOgorKyAgICAgICAgICAgICAgICBwcmludCgiU2VhcmNoaW5nIGZv ciBwYWNrYWdlcyB0byBpbnN0YWxsIHRoYXQgY291bGQgaW1wcm92ZSBkZWJ1Z2dpbmcuLi4iKQor KyAgICAgICAgICAgICAgICBfX3NlYXJjaGluZ19tZXNzYWdlX3ByaW50ZWQgPSBUcnVlCisrCisr ICAgICAgICB0aHJlYWQuam9pbigpCisrCisrCisrICAgICMgR2l2ZW4gQlVJTERfSUQsIGEgc3Ry aW5nIGNvbnRhaW5pbmcgYSBidWlsZC1pZCwgbG9va3VwIHN1aXRhYmxlCisrICAgICMgUlBNcyB0 aGF0IGNvdWxkIGJlIGluc3RhbGxlZCB0byBwcm92aWRlIGEgZmlsZSB3aXRoIHRoZSByZXF1aXJl ZAorKyAgICAjIGJ1aWxkLWlkLgorKyAgICAjCisrICAgICMgQW55IHN1aXRhYmxlIFJQTXMgYXJl IHJlY29yZGVkIGJ5IGNhbGxpbmcgYGFkZF9ycG1fc3VnZ2VzdGlvbmAsIGFuZAorKyAgICAjIHdp bGwgYmUgcHJpbnRlZCBiZWZvcmUgdGhlIG5leHQgcHJvbXB0LgorKyAgICBkZWYgZmluZF9vYmpm aWxlX3N1Z2dlc3Rpb25zX3Nsb3coYnVpbGRfaWQpOgorKyAgICAgICAgZ2xvYmFsIF9fYnVpbGRf aWRfbG9va3VwX2NhY2hlCisrICAgICAgICBnbG9iYWwgX19zdWdnZXN0X3JwbXMKKysKKysgICAg ICAgICMgVGhlIGNvZGUgdG8gbG9va3VwIGFuIFJQTSBnaXZlbiBvbmx5IGEgYnVpbGQtaWQgaXMg cHJldHR5CisrICAgICAgICAjIHNsb3cuICBDYWNoZSB0aGUgcmVzdWx0cyB0byB0cnkgYW5kIHJl ZHVjZSB0aGUgVUkgZGVsYXlzLgorKyAgICAgICAgaWYgYnVpbGRfaWQgaW4gX19idWlsZF9pZF9s b29rdXBfY2FjaGU6CisrICAgICAgICAgICAgcnBtcyA9IF9fYnVpbGRfaWRfbG9va3VwX2NhY2hl W2J1aWxkX2lkXQorKyAgICAgICAgICAgIGlmIHJwbXMgaXMgbm90IE5vbmU6CisrICAgICAgICAg ICAgICAgIGZvciByIGluIHJwbXM6CisrICAgICAgICAgICAgICAgICAgICBhZGRfcnBtX3N1Z2dl c3Rpb24ocikKKysgICAgICAgICAgICByZXR1cm4KKysKKysgICAgICAgICMgTWFrZSBzdXJlIHRo ZSBjYWNoZSBlbnRyeSBleGlzdHMgYmVmb3JlIHdlIGRvIHRoZSBsb29rdXAuCisrICAgICAgICAj IElmLCBmb3IgYW55IHJlYXNvbiwgdGhlIGxvb2t1cCByYWlzZXMgYW4gZXhjZXB0aW9uLCB0aGVu CisrICAgICAgICAjIGhhdmluZyBhIGNhY2hlIGVudHJ5IHdpbGwgcHJldmVudCB1cyByZXRyeWlu ZyB0aGlzIGxvb2t1cCBpbgorKyAgICAgICAgIyB0aGUgZnV0dXJlLgorKyAgICAgICAgX19idWls ZF9pZF9sb29rdXBfY2FjaGVbYnVpbGRfaWRdID0gTm9uZQorKworKyAgICAgICAgIyBOb3cgZG8g dGhlIGxvb2t1cC4gIFRoaXMgaXMgdGhlIHNsb3cgcGFydC4KKysgICAgICAgIGZpbmRfb2JqZmls ZV9zdWdnZXN0aW9uc19zbG93X2NvcmUoYnVpbGRfaWQpCisrCisrICAgICAgICAjIEZpbGwgaW4g dGhlIGNhY2hlLCBmb3IgYSBnaXZlbiBidWlsZC1pZCB3aGljaCBSUE1zIHdlcmUKKysgICAgICAg ICMgc3VnZ2VzdGVkLgorKyAgICAgICAgcnBtcyA9IFtdCisrICAgICAgICBmb3IgciBpbiBfX3N1 Z2dlc3RfcnBtczoKKysgICAgICAgICAgICBycG1zLmFwcGVuZChyKQorKyAgICAgICAgX19idWls ZF9pZF9sb29rdXBfY2FjaGVbYnVpbGRfaWRdID0gcnBtcworKworKworKyAgICAjIEdpdmVuIEJV SUxEX0lELCBhIHN0cmluZyBjb250YWluaW5nIGEgYnVpbGQtaWQsIGp1c3QgcmVjb3JkIHRoYXQg d2UKKysgICAgIyBzaG91bGQgYWR2aXNlIHRoZSB1c2VyIHRvIHRyeSBpbnN0YWxsaW5nIFJQTXMg YmFzZWQgb24gdGhpcyBidWlsZC1pZC4KKysgICAgZGVmIGZpbmRfb2JqZmlsZV9zdWdnZXN0aW9u c19mYXN0KGJ1aWxkX2lkKToKKysgICAgICAgIGFkZF9idWlsZF9pZF9zdWdnZXN0aW9uKGJ1aWxk X2lkKQorKworKyAgICAjIEdpdmVuIEJVSUxEX0lELCBhIHN0cmluZyBjb250YWluaW5nIGEgYnVp bGQtaWQsIHdoaWNoIEdEQiBoYXMgZmFpbGVkCisrICAgICMgdG8gZmluZCwgcG9zc2libHkgcmVj b3JkIHNvbWUgaW5mb3JtYXRpb24gc28gdGhhdCB3ZSBjYW4sIGF0IHRoZSBuZXh0CisrICAgICMg cHJvbXB0LCBnaXZlIHNvbWUgUlBNIGluc3RhbGxhdGlvbiBhZHZpY2UgdG8gdGhlIHVzZXIuCisr ICAgICMKKysgICAgIyBXZSBoYXZlIHR3byBkaWZmZXJlbnQgc3RyYXRlZ2llcyBmb3IgUlBNIGxv b2t1cCBiYXNlZCBvbiBhIGJ1aWxkLWlkLAorKyAgICAjIG9uZSBhcHByb2FjaCBpcyB0aGF0IHdl IGFjdHVhbGx5IGxvb2t1cCB0aGUgUlBNcyBhbmQgb25seSBzdWdnZXN0CisrICAgICMgc29tZXRo aW5nIGlmIHRoZXJlIGlzIGEgc3VpdGFibGUgUlBNLiAgSG93ZXZlciwgdGhpcyBpcyBwcmV0dHkg c2xvdywKKysgICAgIyBhbmQgdXNlcnMgd2lsbCBwcm9iYWJseSBmaW5kIHRoaXMgYW5ub3lpbmcu CisrICAgICMKKysgICAgIyBTbyB3ZSBhbHNvIGhhdmUgYSBmYXN0IHdheS4gIFdpdGggdGhpcyBh cHByb2FjaCB3ZSBqdXN0IHJlY29yZCB0aGUKKysgICAgIyBidWlsZC1pZCB0aGF0IHdhcyBtaXNz aW5nIGFuZCB0ZWxsIHRoZSB1c2VyIHRvIHRyeSBpbnN0YWxsaW5nIGJhc2VkIG9uCisrICAgICMg dGhlIGJ1aWxkLWlkLiAgVGhlIGRvd25zaWRlIHdpdGggdGhpcyBpcyB0aGF0IGlmIHRoZXJlIGlz IG5vIFJQTSBmb3IKKysgICAgIyB0aGF0IGJ1aWxkLWlkLCB0aGVuIHRoZSB1c2VyIHdpbGwgdHJ5 IHRoZSBjb21tYW5kLCBidXQgbm90aGluZyB3aWxsCisrICAgICMgaW5zdGFsbC4KKysgICAgZGVm IGZpbmRfb2JqZmlsZV9zdWdnZXN0aW9ucyhidWlsZF9pZCk6CisrICAgICAgICBpZiBycG1fc3Vn Z2VzdGlvbl9pc19kaXNhYmxlZCgpOgorKyAgICAgICAgICAgIHJldHVybgorKworKyAgICAgICAg aWYgcGFyYW1fcnBtX3N1Z2dlc3Rpb25fYnVpbGRfaWRfbW9kZS5mYXN0X21vZGUoKToKKysgICAg ICAgICAgICBmaW5kX29iamZpbGVfc3VnZ2VzdGlvbnNfZmFzdChidWlsZF9pZCkKKysgICAgICAg IGVsc2U6CisrICAgICAgICAgICAgZmluZF9vYmpmaWxlX3N1Z2dlc3Rpb25zX3Nsb3coYnVpbGRf aWQpCiArCiArICAgICMgQSBtaXNzaW5nIGRlYnVnIGhhbmRsZXIgY2xhc3MuICBKdXN0IGZvcndh cmRzIHRoZSBuYW1lIG9mIHRoZQogKyAgICAjIG9iamZpbGUgZm9yIHdoaWNoIHdlIGFyZSBtaXNz aW5nIGRlYnVnIGluZm9ybWF0aW9uIHRvCi0rICAgICMgZmluZF9zdWdnZXN0aW9ucy4KLSsgICAg Y2xhc3MgUlBNU3VnZ2VzdGlvbkhhbmRsZXIoZ2RiLm1pc3NpbmdfZGVidWcuTWlzc2luZ0RlYnVn SGFuZGxlcik6CisrICAgICMgZmluZF9kZWJ1Z19zdWdnZXN0aW9ucy4KKysgICAgY2xhc3MgUlBN X01pc3NpbmdEZWJ1Z0hhbmRsZXIoZ2RiLm1pc3NpbmdfZGVidWcuTWlzc2luZ0RlYnVnSGFuZGxl cik6CiArICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CiArICAgICAgICAgICAgc3VwZXIoKS5f X2luaXRfXygicnBtLXN1Z2dlc3Rpb25zIikKICsKICsgICAgICAgIGRlZiBfX2NhbGxfXyhzZWxm LCBvYmpmaWxlKToKLSsgICAgICAgICAgICAjIFRyYWRpdGlvbmFsbHkgdGhlICdidWlsZC1pZC12 ZXJib3NlJyBwYXJhbWV0ZXIgaXMgd2hhdAotKyAgICAgICAgICAgICMgY29udHJvbGxlZCBhbGwg UlBNIHN1Z2dlc3Rpb24uICBNYXliZSBvbmNlIGFsbCB0aGUgUlBNCi0rICAgICAgICAgICAgIyBz dWdnZXN0aW9uIGlzIHBlcmZvcm1lZCB2aWEgUHl0aG9uIGV4dGVuc2lvbnMgdGhlbiB3ZSBtaWdo dAotKyAgICAgICAgICAgICMgY29uc2lkZXIgcmVuYW1pbmcgdGhpcyBwYXJhbWV0ZXIgdG8gc29t ZXRoaW5nIGVsc2UsIGJ1dCBmb3IKLSsgICAgICAgICAgICAjIG5vdywgZm9yIGJhY2t3YXJkIGNv bXBhdGliaWxpdHksIEkndmUgcmV0YWluZWQgdGhpcyBuYW1lLgotKyAgICAgICAgICAgIGlmIGdk Yi5wYXJhbWV0ZXIoImJ1aWxkLWlkLXZlcmJvc2UiKSA+IDA6Ci0rICAgICAgICAgICAgICAgIGZp bmRfc3VnZ2VzdGlvbnMob2JqZmlsZS5maWxlbmFtZSkKLSsgICAgICAgICAgICAgICAgcmV0dXJu IEZhbHNlCi0rICAgICAgICAgICAgcmV0dXJuIE5vbmUKKysgICAgICAgICAgICBmaW5kX2RlYnVn X3N1Z2dlc3Rpb25zKG9iamZpbGUuZmlsZW5hbWUpCisrICAgICAgICAgICAgcmV0dXJuIEZhbHNl CisrCisrICAgICMgQSBtaXNzaW5nIG9iamZpbGUgaGFuZGxlciBjbGFzcy4gIEp1c3QgZm9yd2Fy ZHMgdGhlIGJ1aWxkLWlkIG9mCisrICAgICMgdGhlIG9iamZpbGUgdGhhdCBpcyBtaXNzaW5nIHRv IGZpbmRfb2JqZmlsZV9zdWdnZXN0aW9ucy4KKysgICAgY2xhc3MgUlBNX01pc3NpbmdPYmpmaWxl SGFuZGxlcihnZGIubWlzc2luZ19vYmpmaWxlLk1pc3NpbmdPYmpmaWxlSGFuZGxlcik6CisrICAg ICAgICBkZWYgX19pbml0X18oc2VsZik6CisrICAgICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygi cnBtLXN1Z2dlc3Rpb25zIikKICsKKysgICAgICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBwc3BhY2Us IGJ1aWxkX2lkLCBmaWxlbmFtZSk6CisrICAgICAgICAgICAgZmluZF9vYmpmaWxlX3N1Z2dlc3Rp b25zKGJ1aWxkX2lkKQorKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorKworKyAgICAjIFRha2Ug YSBub24tZW1wdHkgbGlzdCBvZiBSUE0gbmFtZXMgYW5kIHByaW50IGEgY29tbWFuZCBsaW5lIGEK KysgICAgIyB1c2VyIGNvdWxkIHJ1biB0byBpbnN0YWxsIHRoZXNlIFJQTXMuCisrICAgIGRlZiBw cmludF9ycG1fc3VnZ2VzdGlvbnMocnBtX25hbWVfbGlzdCk6CisrICAgICAgICBwcmludCgiTWlz c2luZyBycG1zLCB0cnk6IGRuZiAtLWVuYWJsZXJlcG89JypkZWJ1ZyonIGluc3RhbGwgIiArICcg Jy5qb2luKHJwbV9uYW1lX2xpc3QpKQorKworKyAgICAjIFRha2UgYSBub24tZW1wdHkgbGlzdCBv ZiBidWlsZC1pZCBzdHJpbmdzIGFuZCBwcmludCBhIHNlcmllcyBvZgorKyAgICAjIGxpbmVzIHRo YXQgYSB1c2VyIGNvdWxkIHJ1biB0byBpbnN0bGwgdGhlIFJQTXMgdGhhdCBwcm92aWRlCisrICAg ICMgZmlsZXMgd2l0aCB0aGlzIGJ1aWxkLWlkLgorKyAgICAjCisrICAgICMgVGhlIHByaW50ZWQg Y29tbWFuZHMgd2lsbCBhbHNvIGluc3RhbGwgdGhlIGNvcnJlc3BvbmRpbmcgZGVidWcKKysgICAg IyBwYWNrYWdlcyBmb3IgdGhlIGV4ZWN1dGFibGUgd2l0aCB0aGUgZ2l2ZW4gYnVpbGQtaWQuCisr ICAgIGRlZiBwcmludF9idWlsZF9pZF9zdWdnZXN0aW9ucyhidWlsZF9pZF9saXN0KToKKysgICAg ICAgIGZvciBidWlsZF9pZCBpbiBidWlsZF9pZF9saXN0OgorKyAgICAgICAgICAgIHByaW50KCJN aXNzaW5nIGZpbGUocyksIHRyeTogZG5mIC0tZW5hYmxlcmVwbz0nKmRlYnVnKicgaW5zdGFsbCAi CisrICAgICAgICAgICAgICAgICAgKyBidWlsZF9pZF90b191c3JfbGliX2ZpbGVuYW1lKGJ1aWxk X2lkLCBGYWxzZSkKKysgICAgICAgICAgICAgICAgICArICcgJworKyAgICAgICAgICAgICAgICAg ICsgYnVpbGRfaWRfdG9fdXNyX2xpYl9maWxlbmFtZShidWlsZF9pZCwgVHJ1ZSwgIi5kZWJ1ZyIp KQogKwogKyAgICAjIENhbGxlZCBiZWZvcmUgR0RCIGRpc3BsYXlzIGl0cyBwcm9tcHQuICBJZiB0 aGUgZ2xvYmFsIF9fU1VHR0VTVF9SUE1TCi0rICAgICMgZGljdGlvbmFyeSBpcyBub3QgZW1wdHks IHRoZW4gdGhpcyBob29rIHByaW50cyB0cmVhdHMgdGhlIGtleXMgb2YKLSsgICAgIyB0aGlzIGRp Y3Rpb25hcnkgYXMgc3RyaW5ncyB3aGljaCBhcmUgdGhlIG5hbWVzIG9mIFJQTXMuICBUaGlzIGhv b2sKLSsgICAgIyBmb3JtYXRzIGVhY2ggUlBNIG5hbWUgaW50byBhIHN1Z2dlc3RlZCBkZWJ1Z2lu Zm8taW5zdGFsbCBjb21tYW5kIGFuZAotKyAgICAjIHN1Z2dlc3RzIHRoaXMgdG8gdGhlIHVzZXIu CisrICAgICMgZGljdGlvbmFyeSBpcyBub3QgZW1wdHksIHRoZW4gdGhpcyBob29rIHByaW50cyB0 aGUga2V5cyBvZiB0aGlzCisrICAgICMgZGljdGlvbmFyeSBhcyBzdHJpbmdzIHdoaWNoIGFyZSB0 aGUgbmFtZXMgb2YgUlBNcy4gIFRoaXMgaG9vayBmb3JtYXRzCisrICAgICMgZWFjaCBSUE0gbmFt ZSBpbnRvIGEgc3VnZ2VzdGVkICdkbmYgaW5zdGFsbCcgY29tbWFuZCBhbmQgc3VnZ2VzdHMgdGhp cworKyAgICAjIHRvIHRoZSB1c2VyLgorKyAgICAjCisrICAgICMgQWRkaXRpb25hbGx5LCBpZiB0 aGUgZ2xvYmFsIF9fU1VHR0VTVF9CVUlMRF9JRFMgZGljdGlvbmFyeSBpcyBub3QKKysgICAgIyBl bXB0eSwgdGhlbiB0aGlzIGhvb2sgdXNlcyB0aGUga2V5cyBvZiB0aGlzIGRpY3Rpb25hcnkgYXMg YnVpbGQtaWRzCisrICAgICMgdGhhdCB3ZXJlIGZvdW5kIHRvIGJlIG1pc3NpbmcsIGFuZCBmb3Jt YXRzIHRoZXNlIGludG8gc29tZSBmaWxlIGJhc2VkCisrICAgICMgJ2RuZiBpbnN0YWxsJyBzdWdn ZXN0aW9ucyB0byB0aGUgdXNlci4KICsgICAgZGVmIGJlZm9yZV9wcm9tcHQoKToKICsgICAgICAg IGdsb2JhbCBfX3N1Z2dlc3RfcnBtcworKyAgICAgICAgZ2xvYmFsIF9fc3VnZ2VzdF9idWlsZF9p ZHMKKysgICAgICAgIGdsb2JhbCBfX3NlYXJjaGluZ19tZXNzYWdlX3ByaW50ZWQKKysKKysgICAg ICAgICMgV2UgYWxsb3cgdGhlIHNlYXJjaGluZyBtZXNzYWdlIHRvIGJlIHByaW50ZWQganVzdCBv bmNlCisrICAgICAgICAjIGJldHdlZW4gcHJvbXB0cy4KKysgICAgICAgIF9fc2VhcmNoaW5nX21l c3NhZ2VfcHJpbnRlZCA9IEZhbHNlCiArCiArICAgICAgICBpZiBsZW4oX19zdWdnZXN0X3JwbXMp ID4gMDoKLSsgICAgICAgICAgICBmb3IgcCBpbiBfX3N1Z2dlc3RfcnBtcy5rZXlzKCk6Ci0rICAg ICAgICAgICAgICAgIHByaW50KCJNaXNzaW5nIGRlYnVnaW5mbywgdHJ5OiBkbmYgZGVidWdpbmZv LWluc3RhbGwgIiArIHApCisrICAgICAgICAgICAgcHJpbnRfcnBtX3N1Z2dlc3Rpb25zKF9fc3Vn Z2VzdF9ycG1zLmtleXMoKSkKICsgICAgICAgICAgICBfX3N1Z2dlc3RfcnBtcyA9IHt9CiArCisr ICAgICAgICBpZiBsZW4oX19zdWdnZXN0X2J1aWxkX2lkcykgPiAwOgorKyAgICAgICAgICAgIHBy aW50X2J1aWxkX2lkX3N1Z2dlc3Rpb25zKF9fc3VnZ2VzdF9idWlsZF9pZHMua2V5cygpKQorKyAg ICAgICAgICAgIF9fc3VnZ2VzdF9idWlsZF9pZHMgPSB7fQogKwogKyAgICAjIENhbGxlZCB3aGVu IHRoZSBleGVjdXRhYmxlIHdpdGhpbiBhIHByb2dybSBzcGFjZSBpcyBjaGFuZ2VkLiAgQ2xlYXIK ICsgICAgIyB0aGUgbGlzdHMgb2YgUlBNIHN1Z2dlc3Rpb25zLiAgV2Ugb25seSBjbGVhciB0aGUg cHJldmlvdXMgc3VnZ2VzdGlvbgpAQCAtMTQ5LDE4ICs1NTksMTYyIEBAIG5ldyBmaWxlIG1vZGUg MTAwNjQ0CiArICAgIGRlZiBleGVjdXRhYmxlX2NoYW5nZWRfaGFuZGxlcihldmVudCk6CiArICAg ICAgICBnbG9iYWwgX19taXNzaW5nX3JwbXMKICsgICAgICAgIGdsb2JhbCBfX3N1Z2dlc3RfcnBt cworKyAgICAgICAgZ2xvYmFsIF9fc3VnZ2VzdF9idWlsZF9pZHMKKysgICAgICAgIGdsb2JhbCBf X21pc3NpbmdfYnVpbGRfaWRzCiArCiArICAgICAgICBpZiBub3QgZXZlbnQucmVsb2FkOgogKyAg ICAgICAgICAgIF9fbWlzc2luZ19ycG1zID0ge30KICsgICAgICAgICAgICBfX3N1Z2dlc3RfcnBt cyA9IHt9CisrICAgICAgICAgICAgX19taXNzaW5nX2J1aWxkX2lkcyA9IHt9CisrICAgICAgICAg ICAgX19zdWdnZXN0X2J1aWxkX2lkcyA9IHt9CiArCiArCiArICAgICMgQXR0YWNoIHRvIHRoZSBy ZXF1aXJlZCBHREIgZXZlbnRzLgogKyAgICBnZGIuZXZlbnRzLmV4ZWN1dGFibGVfY2hhbmdlZC5j b25uZWN0KGV4ZWN1dGFibGVfY2hhbmdlZF9oYW5kbGVyKQogKyAgICBnZGIuZXZlbnRzLmJlZm9y ZV9wcm9tcHQuY29ubmVjdChiZWZvcmVfcHJvbXB0KQogKwotKyAgICAjIFJlZ2lzdGVyIHRoZSBt aXNzaW5nIGRlYnVnIGhhbmRsZXIgd2l0aCBHREIuCi0rICAgIGdkYi5taXNzaW5nX2RlYnVnLnJl Z2lzdGVyX2hhbmRsZXIoTm9uZSwgUlBNU3VnZ2VzdGlvbkhhbmRsZXIoKSkKKysgICAgIyBSZWdp c3RlciB0aGUgbWlzc2luZyBkZWJ1ZyBhbmQgbWlzc2luZyBvYmpmaWxlIGhhbmRsZXJzIHdpdGgg R0RCLgorKyAgICBnZGIubWlzc2luZ19kZWJ1Zy5yZWdpc3Rlcl9oYW5kbGVyKE5vbmUsIFJQTV9N aXNzaW5nRGVidWdIYW5kbGVyKCkpCisrICAgIGdkYi5taXNzaW5nX29iamZpbGUucmVnaXN0ZXJf aGFuZGxlcihOb25lLCBSUE1fTWlzc2luZ09iamZpbGVIYW5kbGVyKCkpCisrCisrICAgICMgSW1w bGVtZW50IHRoZSBjb3JlIG9mICdpbmZvIHJwbS1zdWdnZXN0aW9ucycuICBSZXByaW50IGFsbCBy cG0KKysgICAgIyBzdWdnZXN0aW9ucy4KKysgICAgZGVmIGluZm9fcnBtX3N1Z2dlc3Rpb25zKCk6 CisrICAgICAgICBnbG9iYWwgX19taXNzaW5nX3JwbXMKKysgICAgICAgIGdsb2JhbCBfX21pc3Np bmdfYnVpbGRfaWRzCisrCisrICAgICAgICBpZiBsZW4oX19taXNzaW5nX3JwbXMpID09IDAgYW5k IGxlbihfX21pc3NpbmdfYnVpbGRfaWRzKSA9PSAwOgorKyAgICAgICAgICAgIHByaW50KCJObyBS UE0gc3VnZ2VzdGlvbnMgaGF2ZSBiZWVuIG1hZGUgc28gZmFyLiIpCisrICAgICAgICAgICAgcmV0 dXJuCisrCisrICAgICAgICBpZiBsZW4oX19taXNzaW5nX3JwbXMpID4gMDoKKysgICAgICAgICAg ICBwcmludF9ycG1fc3VnZ2VzdGlvbnMoX19taXNzaW5nX3JwbXMua2V5cygpKQorKyAgICAgICAg aWYgbGVuKF9fbWlzc2luZ19idWlsZF9pZHMpID4gMDoKKysgICAgICAgICAgICBwcmludF9idWls ZF9pZF9zdWdnZXN0aW9ucyhfX21pc3NpbmdfYnVpbGRfaWRzLmtleXMoKSkKKysKKysjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIworKyMgVGhlIGZvbGxvd2luZyBjb2RlIGlzIG91dHNpZGUgdGhlICdlbHNlJyBibG9jayBv ZiB0aGUgYXR0ZW1wdCB0byAjCisrIyBsb2FkIHRoZSAncnBtJyBtb2R1bGUuICBOb3RoaW5nIGFm dGVyIHRoaXMgcG9pbnQgZGVwZW5kcyBvbiB0aGUgICMKKysjICdycG0nIG1vZHVsZS4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworKyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjCisrCisrIyBUaGUgJ3NldCBycG0tc3VnZ2VzdGlvbicgcHJlZml4IGNvbW1hbmQuCisrY2xh c3MgcnBtX3N1Z2dlc3Rpb25fc2V0X3ByZWZpeChnZGIuQ29tbWFuZCk6CisrICAgICIiIlByZWZp eCBjb21tYW5kIGZvciAnc2V0JyBycG0tc3VnZ2VzdGlvbiByZWxhdGVkIGNvbW1hbmRzLiIiIgor KworKyAgICBkZWYgX19pbml0X18oc2VsZik6CisrICAgICAgICBzdXBlcigpLl9faW5pdF9fKCJz ZXQgcnBtLXN1Z2dlc3Rpb24iLCBnZGIuQ09NTUFORF9OT05FLAorKyAgICAgICAgICAgICAgICAg ICAgICAgICBnZGIuQ09NUExFVEVfTk9ORSwgVHJ1ZSkKKysKKysjIFRoZSAnc2hvdyBycG0tc3Vn Z2VzdGlvbicgcHJlZml4IGNvbW1hbmQuCisrY2xhc3MgcnBtX3N1Z2dlc3Rpb25fc2hvd19wcmVm aXgoZ2RiLkNvbW1hbmQpOgorKyAgICAiIiJQcmVmaXggY29tbWFuZCBmb3IgJ3Nob3cnIHJwbS1z dWdnZXN0aW9uIHJlbGF0ZWQgY29tbWFuZHMuIiIiCisrCisrICAgIGRlZiBfX2luaXRfXyhzZWxm KToKKysgICAgICAgIHN1cGVyKCkuX19pbml0X18oInNob3cgcnBtLXN1Z2dlc3Rpb24iLCBnZGIu Q09NTUFORF9OT05FLAorKyAgICAgICAgICAgICAgICAgICAgICAgICBnZGIuQ09NUExFVEVfTk9O RSwgVHJ1ZSkKKysKKysjIFRoZSAnc2V0L3Nob3cgcnBtLXN1Z2dlc3Rpb24gZW5hYmxlZCcgY29t bWFuZC4KKytjbGFzcyBycG1fc3VnZ2VzdGlvbl9lbmFibGVkKGdkYi5QYXJhbWV0ZXIpOgorKyAg ICAiIiIKKysgICAgV2hlbiAnb24nIEdEQiB3aWxsIHNlYXJjaCBmb3IgUlBNUyB0aGF0IG1pZ2h0 IHByb3ZpZGUgYWRkaXRpb25hbAorKyAgICBkZWJ1ZyBpbmZvcm1hdGlvbiwgb3IgcHJvdmlkZSBt aXNzaW5nIGV4ZWN1dGFibGVzIG9yIHNoYXJlZAorKyAgICBsaWJyYXJpZXMgKHdoZW4gb3Blbmlu ZyBhIGNvcmUgZmlsZSksIGFuZCB3aWxsIG1ha2Ugc3VnZ2VzdGlvbnMKKysgICAgYWJvdXQgd2hh dCBzaG91bGQgYmUgaW5zdGFsbGVkLgorKworKyAgICBXaGVuICdvZmYnIEdEQiB3aWxsIG5vdCBt YWtlIHRoZXNlIHN1Z2dlc3Rpb25zLgorKyAgICAiIiIKKysKKysgICAgc2V0X2RvYyA9ICJTZXQg d2hldGhlciB0byBwZXJmb3JtIHJwbS1zdWdnZXN0aW9uLiIKKysgICAgc2hvd19kb2MgPSAiU2hv dyB3aGV0aGVyIHJwbS1zdWdnZXN0aW9uIGlzIGVuYWJsZWQuIgorKworKyAgICBkZWYgX19pbml0 X18oc2VsZik6CisrICAgICAgICBzdXBlcigpLl9faW5pdF9fKCJycG0tc3VnZ2VzdGlvbiBlbmFi bGVkIiwgZ2RiLkNPTU1BTkRfTk9ORSwgZ2RiLlBBUkFNX0JPT0xFQU4pCisrICAgICAgICBzZWxm LnZhbHVlID0gVHJ1ZQorKworKyMgVGhlICdzZXQvc2hvdyBycG0tc3VnZ2VzdGlvbiBlbmFibGVk JyBjb21tYW5kLgorK2NsYXNzIHJwbV9zdWdnZXN0aW9uX2J1aWxkX2lkX21vZGUoZ2RiLlBhcmFt ZXRlcik6CisrICAgICIiIgorKyAgICBXaGVuIHNldCB0byAnZmFzdCcgKHRoZSBkZWZhdWx0KSwg R0RCIGRvZXNuJ3QgdHJ5IHRvIG1hcCBhIGJ1aWxkLWlkIHRvCisrICAgIGFuIGFjdHVhbCBSUE0s IGluc3RlYWQsIEdEQiBqdXN0IHN1Z2dlc3RzIGEgY29tbWFuZCBiYXNlZCBvbiB0aGUKKysgICAg YnVpbGQtaWQgd2hpY2ggbWlnaHQgaW5zdGFsbCBzb21lIFJQTXMsIGlmIHRoZXJlIGFyZSBhbnkg UlBNcyB0aGF0CisrICAgIHN1cHBseSB0aGF0IGJ1aWxkLWlkLiAgSG93ZXZlciwgaXQgaXMgZXF1 YWxseSBwb3NzaWJsZSB0aGF0IHRoZXJlIGFyZSBubworKyAgICBzdWl0YWJsZSBSUE1zLCBhbmQg bm90aGluZyB3aWxsIGluc3RhbGwuICBUaGlzIGFwcHJvYWNoIGhhcyBhbG1vc3QgemVybworKyAg ICBvdmVyaGVhZC4KKysKKysgICAgV2hlbiBzZXQgdG8gJ3Nsb3cnLCBHREIgZmlyc3QgZG9lcyB0 aGUgYnVpbGQtaWQgdG8gUlBNIGNoZWNrIGl0c2VsZiwgYW5kCisrICAgIG9ubHkgaWYgc29tZXRo aW5nIGlzIGZvdW5kIGFyZSBSUE1zIGluc3RhbGxhdGlvbiBjb21tYW5kcyBzdWdnZXN0ZWQuCisr ICAgIFRoZSBzdWdnZXN0ZWQgY29tbWFuZCB3aWxsIGluY2x1ZGUgdGhlIG5hbWUgb2YgdGhlIFJQ TSB0byBpbnN0YWxsLiAgVGhpcworKyAgICBhcHByb2FjaCBpcyBjb25zaWRlcmFibHkgc2xvd2Vy IGFzIHF1ZXJ5aW5nIHRoZSBSUE0gZGF0YWJhc2UgZm9yIHRoZSBSUE0KKysgICAgdGhhdCBzdXBw bGllcyBhIHNwZWNpZmljIGZpbGUgaXMgc2xvdy4KKysgICAgIiIiCisrCisrICAgIHNldF9kb2Mg PSAiU2V0IGhvdyBidWlsZC1pZCBiYXNlZCBycG0gc3VnZ2VzdGlvbnMgc2hvdWxkIGJlIHBlcmZv cm1lZC4iCisrICAgIHNob3dfZG9jID0gIlNob3cgaG93IGJ1aWxkLWlkIGJhc2VkIHJwbSBzdWdn ZXN0aW9ucyBzaG91ZCBiZSBwZXJmb3JtZWQuIgorKworKyAgICBkZWYgX19pbml0X18oc2VsZik6 CisrICAgICAgICBzdXBlcigpLl9faW5pdF9fKCJycG0tc3VnZ2VzdGlvbiBidWlsZC1pZC1tb2Rl IiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgZ2RiLkNPTU1BTkRfTk9ORSwgZ2RiLlBBUkFN X0VOVU0sIFsiZmFzdCIsICJzbG93Il0pCisrICAgICAgICBzZWxmLnZhbHVlID0gImZhc3QiCisr CisrICAgIGRlZiBmYXN0X21vZGUoc2VsZik6CisrICAgICAgICByZXR1cm4gc2VsZi52YWx1ZSA9 PSAiZmFzdCIKKysKKysjIFRoZSAnaW5mbyBycG0tc3VnZ2VzdGlvbnMnIGNvbW1hbmQuCisrY2xh c3MgcnBtX3N1Z2dlc3Rpb25faW5mbyhnZGIuQ29tbWFuZCk6CisrICAgICIiIlJlbGlzdCBhbnkg UlBNIGluc3RhbGxhdGlvbiBzdWdnZXN0aW9ucyB0aGF0IGhhdmUgYmVlbiBtYWRlCisrICAgIHNp bmNlIHRoZSBleGVjdXRhYmxlIHdhcyBsYXN0IGNoYW5nZWQuIiIiCisrICAgIGRlZiBfX2luaXRf XyhzZWxmKToKKysgICAgICAgIHN1cGVyKCkuX19pbml0X18oImluZm8gcnBtLXN1Z2dlc3Rpb25z IiwgZ2RiLkNPTU1BTkRfTk9ORSwgZ2RiLkNPTVBMRVRFX05PTkUpCisrCisrICAgIGRlZiBpbnZv a2Uoc2VsZiwgYXJncywgZnJvbV90dHkpOgorKyAgICAgICAgaWYgYXJncyAhPSAiIjoKKysgICAg ICAgICAgICByYWlzZSBnZGIuR2RiRXJyb3IoInVuZXhwZWN0ZWQgYXJndW1lbnRzOiAlcyIgJSBh cmdzKQorKworKyAgICAgICAgaW5mb19ycG1fc3VnZ2VzdGlvbnMgKCkKKysKKysKKysjIENyZWF0 ZSB0aGUgJ3NldC9zaG93IHJwbS1zdWdnZXN0aW9uJyBjb21tYW5kcy4KKytycG1fc3VnZ2VzdGlv bl9zZXRfcHJlZml4KCkKKytycG1fc3VnZ2VzdGlvbl9zaG93X3ByZWZpeCgpCisrcGFyYW1fcnBt X3N1Z2dlc3Rpb25fZW5hYmxlZCA9IHJwbV9zdWdnZXN0aW9uX2VuYWJsZWQoKQorK3BhcmFtX3Jw bV9zdWdnZXN0aW9uX2J1aWxkX2lkX21vZGUgPSBycG1fc3VnZ2VzdGlvbl9idWlsZF9pZF9tb2Rl KCkKKysKKysjIENyZWF0ZSB0aGUgJ2luZm8gcnBtLXN1Z2dlc3Rpb25zJyBjb21tYW5kcy4KKyty cG1fc3VnZ2VzdGlvbl9pbmZvKCkKKysKKysjIENyZWF0ZSB0aGUgJ2J1aWxkLWlkLXZlcmJvc2Un IHBhcmFtZXRlci4gIFRoaXMgaXMgaW1wbGVtZW50ZWQgYXMgYW4KKysjIGludGVnZXIgZm9yIGJh Y2t3YXJkIGNvbXBhdGliaWxpdHkgcmVhc29ucy4gIEl0IHdvdWxkIGJlIG5pY2UgdG8KKysjIGNv bnZlcnQgdGhpcyB0byBhIGJvb2xlYW4sIGJ1dCBpdCdzIG5vdCBjbGVhciBpZiB0aGF0IHdpbGwg YnJlYWsKKysjIGV4aXN0aW5nIHVzZXJzIHVzZXMgb2YgdGhpcyBmbGFnLgorKworK2NsYXNzIGJ1 aWxkX2lkX3ZlcmJvc2UoZ2RiLlBhcmFtZXRlcik6CisrICAgICIiIgorKyAgICBMZXZlbCAwIGRp c2FibGUgcHJpbnRpbmcgdGhlIG1pc3NpbmcgZGVidWcgZmlsZXNuYW1lLAorKyAgICBMZXZlbCAx IChkZWZhdWx0KSBlbmFibGVzIHByaW50aW5nIHRoZSBtaXNzaW5nIGRlYnVnIGZpbGVuYW1lcywK KysgICAgIiIiCisrCisrICAgIHNldF9kb2MgPSAiU2V0IGRlYnVnZ2luZyBsZXZlbCBvZiB0aGUg YnVpbGQtaWQgbG9jYXRvci4iCisrICAgIHNob3dfZG9jID0gIlNob3cgZGVidWdnaW5nIGxldmVs IG9mIHRoZSBidWlsZC1pZCBsb2NhdG9yLiIKKysKKysgICAgZGVmIF9faW5pdF9fKHNlbGYpOgor KyAgICAgICAgc3VwZXIoKS5fX2luaXRfXygiYnVpbGQtaWQtdmVyYm9zZSIsIGdkYi5DT01NQU5E X05PTkUsIGdkYi5QQVJBTV9aSU5URUdFUikKKysgICAgICAgIHNlbGYudmFsdWUgPSAxCisrCisr cGFyYW1fYnVpbGRfaWRfdmVyYm9zZSA9IGJ1aWxkX2lkX3ZlcmJvc2UoKQorZGlmZiAtLWdpdCBh L2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvZ2RiaW5pdC1oaXN0b3J5LmV4cCBiL2dkYi90ZXN0c3Vp dGUvZ2RiLmJhc2UvZ2RiaW5pdC1oaXN0b3J5LmV4cAorLS0tIGEvZ2RiL3Rlc3RzdWl0ZS9nZGIu YmFzZS9nZGJpbml0LWhpc3RvcnkuZXhwCisrKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2dk YmluaXQtaGlzdG9yeS5leHAKK0BAIC0xNzksNyArMTc5LDggQEAgcHJvYyB0ZXN0X2VtcHR5X2hp c3RvcnlfZmlsZW5hbWUgeyB9IHsKKyAgICAgZ2xvYmFsIGVudgorICAgICBnbG9iYWwgZ2RiX3By b21wdAorIAorLSAgICBzZXQgY29tbW9uX2hpc3RvcnkgW2xpc3QgInNldCBoZWlnaHQgMCIgInNl dCB3aWR0aCAwIl0KKysgICAgc2V0IGNvbW1vbl9oaXN0b3J5IFtsaXN0ICJzZXQgaGVpZ2h0IDAi ICJzZXQgd2lkdGggMCIgXAorKwkJCSAgICAic2V0IGJ1aWxkLWlkLXZlcmJvc2UgMCJdCisgCisg ICAgIHNldCB0ZXN0X2RpciBbc3RhbmRhcmRfb3V0cHV0X2ZpbGUgaGlzdG9yeV90ZXN0XQorICAg ICByZW1vdGVfZXhlYyBob3N0ICJta2RpciAtcCAkdGVzdF9kaXIiCiBkaWZmIC0tZ2l0IGEvZ2Ri L3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LW1pc3NpbmctZGVidWcucHkgYi9nZGIvdGVzdHN1aXRl L2dkYi5weXRob24vcHktbWlzc2luZy1kZWJ1Zy5weQogLS0tIGEvZ2RiL3Rlc3RzdWl0ZS9nZGIu cHl0aG9uL3B5LW1pc3NpbmctZGVidWcucHkKICsrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhv bi9weS1taXNzaW5nLWRlYnVnLnB5CkBAIC0xNzgsMyArNzMyLDc1IEBAIGRpZmYgLS1naXQgYS9n ZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktbWlzc2luZy1kZWJ1Zy5weSBiL2dkYi90ZXN0c3Vp dGUvZ2RiLnB5CiAgIyBBIGdsb2JhbCBsb2cgdGhhdCBpcyBmaWxsZWQgaW4gYnkgaW5zdGFuY2Vz IG9mIHRoZSBMT0dfSEFORExFUiBjbGFzcwogICMgd2hlbiB0aGV5IGFyZSBjYWxsZWQuCiAgaGFu ZGxlcl9jYWxsX2xvZyA9IFtdCitAQCAtMTE4LDQgKzEyNSw3IEBAIGRlZiByZWdpc3RlcihuYW1l LCBsb2N1cz1Ob25lKToKKyByaGFuZGxlciA9IGV4Y2VwdGlvbl9oYW5kbGVyKCkKKyBoYW5kbGVy X29iaiA9IGhhbmRsZXIoKQorIAorKyMgRGlzY2FyZCB0aGUgcnBtLXN1Z2dlc3Rpb24gaGFuZGxl ci4KKytnZGIubWlzc2luZ19maWxlX2hhbmRsZXJzID0gW10KKysKKyBwcmludCgiU3VjY2VzcyIp CitkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LW1pc3Npbmctb2JqZmls ZS5weSBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1taXNzaW5nLW9iamZpbGUucHkKKy0t LSBhL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1taXNzaW5nLW9iamZpbGUucHkKKysrKyBi L2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1taXNzaW5nLW9iamZpbGUucHkKK0BAIC0xNjQs NCArMTY0LDcgQEAgZGVmIHJlZ2lzdGVyKG5hbWUsIGxvY3VzPU5vbmUpOgorIHJoYW5kbGVyID0g ZXhjZXB0aW9uX2hhbmRsZXIoKQorIGhhbmRsZXJfb2JqID0gaGFuZGxlcigpCisgCisrIyBEaXNj YXJkIHRoZSBycG0tc3VnZ2VzdGlvbiBoYW5kbGVyLgorK2dkYi5taXNzaW5nX2ZpbGVfaGFuZGxl cnMgPSBbXQorKworIHByaW50KCJTdWNjZXNzIikKK2RpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRl L2xpYi9nZGIuZXhwIGIvZ2RiL3Rlc3RzdWl0ZS9saWIvZ2RiLmV4cAorLS0tIGEvZ2RiL3Rlc3Rz dWl0ZS9saWIvZ2RiLmV4cAorKysrIGIvZ2RiL3Rlc3RzdWl0ZS9saWIvZ2RiLmV4cAorQEAgLTIz OCw3ICsyMzgsOCBAQCBpZiAhW2luZm8gZXhpc3RzIElOVEVSTkFMX0dEQkZMQUdTXSB7CisgCQkg ICAiLW54IiBcCisgCQkgICAiLXEiIFwKKyAJCSAgIHstaWV4ICJzZXQgaGVpZ2h0IDAifSBcCist CQkgICB7LWlleCAic2V0IHdpZHRoIDAifV1dCisrCQkgICB7LWlleCAic2V0IHdpZHRoIDAifSBc CisrCQkgICB7LWlleCAic2V0IGJ1aWxkLWlkLXZlcmJvc2UgMCJ9XV0KKyAKKyAgICAgIyBJZiBE RUJVR0lORk9EX1VSTFMgaXMgc2V0LCBnZGIgd2lsbCB0cnkgdG8gZG93bmxvYWQgc291cmNlcyBh bmQKKyAgICAgIyBkZWJ1ZyBpbmZvIGZvciBmLmkuIHN5c3RlbSBsaWJyYXJpZXMuICBQcmV2ZW50 IHRoaXMuCitAQCAtMjQ5Myw2ICsyNDk0LDE4IEBAIHByb2MgZGVmYXVsdF9nZGJfc3RhcnQgeyB9 IHsKKyAJfQorICAgICB9CisgCisrICAgICMgVHVybiBvZmYgdGhlIG1pc3NpbmcgZGVidWcgaW5m byBtZXNzYWdlcyBhcyB0aGUgdGVzdHN1aXRlIGRvZXMKKysgICAgIyBub3QgZXhwZWN0IHRoZW0u CisrICAgIHNlbmRfZ2RiICJzZXQgYnVpbGQtaWQtdmVyYm9zZSAwXG4iCisrICAgIGdkYl9leHBl Y3QgMTAgeworKwktcmUgIiRnZGJfcHJvbXB0ICQiIHsKKysJICAgIHZlcmJvc2UgIkRpc2FibGVk IHRoZSBtaXNzaW5nIGRlYnVnIGluZm8gbWVzc2FnZXMuIiAyCisrCX0KKysJdGltZW91dCB7Cisr CSAgICB3YXJuaW5nICJDb3VsZCBub3QgZGlzYWJsZSB0aGUgbWlzc2luZyBkZWJ1ZyBpbmZvIG1l c3NhZ2VzLiIKKysJfQorKyAgICB9CisrCisgICAgIGdkYl9kZWJ1Z19pbml0CisgICAgIHJldHVy biAwCisgfQorZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvbGliL21pLXN1cHBvcnQuZXhwIGIv Z2RiL3Rlc3RzdWl0ZS9saWIvbWktc3VwcG9ydC5leHAKKy0tLSBhL2dkYi90ZXN0c3VpdGUvbGli L21pLXN1cHBvcnQuZXhwCisrKysgYi9nZGIvdGVzdHN1aXRlL2xpYi9taS1zdXBwb3J0LmV4cAor QEAgLTMyMSw2ICszMjEsMTcgQEAgcHJvYyBkZWZhdWx0X21pX2dkYl9zdGFydCB7IHsgZmxhZ3Mg e30gfSB9IHsKKyAJICAgIHdhcm5pbmcgIkNvdWxkbid0IHNldCB0aGUgd2lkdGggdG8gMC4iCisg CX0KKyAgICAgfQorKyAgICAjIFR1cm4gb2ZmIHRoZSBtaXNzaW5nIGRlYnVnIGluZm8gbWVzc2Fn ZXMgYXMgdGhlIHRlc3RzdWl0ZSBkb2VzCisrICAgICMgbm90IGV4cGVjdCB0aGVtLgorKyAgICBz ZW5kX2dkYiAiMTkwLWdkYi1zZXQgYnVpbGQtaWQtdmVyYm9zZSAwXG4iCisrICAgIGdkYl9leHBl Y3QgMTAgeworKwktcmUgIi4qMTkwLWdkYi1zZXQgYnVpbGQtaWQtdmVyYm9zZSAwXHJcbjE5MFxc XF5kb25lXHJcbiRtaV9nZGJfcHJvbXB0JCIgeworKwkgICAgdmVyYm9zZSAiRGlzYWJsZWQgdGhl IG1pc3NpbmcgZGVidWcgaW5mbyBtZXNzYWdlcy4iIDIKKysJfQorKwl0aW1lb3V0IHsKKysJICAg IHdhcm5pbmcgIkNvdWxkIG5vdCBkaXNhYmxlIHRoZSBtaXNzaW5nIGRlYnVnIGluZm8gbWVzc2Fn ZXMuIgorKwl9CisrICAgIH0KKyAKKyAgICAgaWYgeyAkc2VwYXJhdGVfaW5mZXJpb3JfcHR5IH0g eworIAltaV9jcmVhdGVfaW5mZXJpb3JfcHR5CgpkaWZmIC0tZ2l0IGEvZ2RiLWJhY2twb3J0LWJ1 aWxkaWQtcmVsYXRlZC1jaGFuZ2VzLnBhdGNoIGIvZ2RiLWJhY2twb3J0LWJ1aWxkaWQtcmVsYXRl ZC1jaGFuZ2VzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkZDJk OGIKLS0tIC9kZXYvbnVsbAorKysgYi9nZGItYmFja3BvcnQtYnVpbGRpZC1yZWxhdGVkLWNoYW5n ZXMucGF0Y2gKQEAgLTAsMCArMSw2NzUzIEBACitGcm9tIEZFRE9SQV9QQVRDSEVTIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQW5kcmV3IEJ1cmdlc3MgPGFidXJnZXNzQHJlZGhhdC5j b20+CitEYXRlOiBXZWQsIDMxIEp1bCAyMDI0IDE1OjU4OjIwICswMTAwCitTdWJqZWN0OiBnZGIt YmFja3BvcnQtYnVpbGRpZC1yZWxhdGVkLWNoYW5nZXMucGF0Y2gKKworOzsgQmFja3BvcnQgcGF0 Y2hlcyByZWxhdGVkIHRvIGJ1aWxkLWlkIHVzYWdlIHdoZW4gb3BlbmluZyBhIGNvcmUKKzs7IGZp bGUsIGFuZCBhbHNvIGltcHJvdmluZyBnZW5lcmFsIGJ1aWxkLWlkIGJhc2VkIGxvb2t1cC4gIFRo ZXNlIHdpbGwKKzs7IGFsbCBkcm9wIG91dCB3aGVuIHJlYmFzaW5nIHRvIEdEQiAxNi4KKworYmFj a3BvcnQgdGhlIGZvbGxvd2luZyBwYXRjaGVzIHJlbGF0ZWQgdG8gYnVpbGQtaWQgdXNhZ2UKKwor VGhpcyBvbmUgcGF0Y2ggYmFja3BvcnRzIHRoZSBmb2xsb3dpbmcgdXBzdHJlYW0gY29tbWl0czoK KworICAqIDE5NTc5NWIwZmQ0IGdkYjogZml4IGEgdGFyZ2V0OiBwcmVmaXggaXNzdWUgaW4gZmlu ZF9zZXBhcmF0ZV9kZWJ1Z19maWxlCisgICogZWE0Yzk2OGNlNTQgZ2RiOiBhdm9pZCAnLy8nIGlu IGZpbGVuYW1lcyB3aGVuIHNlYXJjaGluZyBmb3IgZGVidWdpbmZvCisgICogMjI4MzZjYTg4NTkg Z2RiOiBjaGVjayBmb3IgbXVsdGlwbGUgbWF0Y2hpbmcgYnVpbGQtaWQgZmlsZXMKKyAgKiA2ZDQ1 YWY5NmVhNSBnZGJzZXJ2ZXI6IGFkZCBnZGJzZXJ2ZXIgc3VwcG9ydCBmb3IgdkZpbGU6OnN0YXQg cGFja2V0CisgICogMzA1NWUzZDJmMTMgZ2RiOiBhZGQgR0RCIHNpZGUgdGFyZ2V0X29wczo6Zmls ZWlvX3N0YXQgaW1wbGVtZW50YXRpb24KKyAgKiAwOGExMTVjYzFjNCBnZGI6IGFkZCB0YXJnZXRf ZmlsZWlvX3N0YXQsIGJ1dCBubyBpbXBsZW1lbnRhdGlvbnMgeWV0CisgICogYzdlMzhlZTQ3Yzkg Z2RiOiBhdm9pZCBkdXBsaWNhdGUgc2VhcmNoIGluIGJ1aWxkX2lkX3RvX2JmZF9zdWZmaXgKKyAg KiAxMGFjN2U4MGMwMSBnZGI6IHJlbW92ZSBmaW5kX2FuZF9vcGVuX3NvbGliIHNvX2xpc3QgbWV0 aG9kCisgICogM2UzNWI0ZGVhZTIgZ2RiL3Rlc3RzdWl0ZTogdGVzdHMgZm9yIGRlYnVnIGxvb2t1 cCB3aXRoaW4gdGhlIHN5c3Jvb3QKKyAgKiA2ZGZkMDcyMjJjMCBnZGI6IGNvbnZlcnQgc2VwYXJh dGUtZGVidWctZmlsZSB0byBuZXcoaXNoKSBkZWJ1ZyBzY2hlbWUKKyAgKiA1Y2FiYzgwOThlNiBn ZGIvcHl0aG9uOiBpbXBsZW1lbnQgUHl0aG9uIGZpbmRfZXhlY19ieV9idWlsZF9pZCBob29rCisg ICogZWYxYTQxZjIwYjcgZ2RiOiBhZGQgZXh0ZW5zaW9uIGhvb2sgZXh0X2xhbmdfZmluZF9vYmpm aWxlX2Zyb21fYnVpbGRpZAorICAqIDYyOWJjYzY4ZDc5IGdkYjogcmVuYW1lIGV4dF9sYW5nX21p c3NpbmdfZGVidWdpbmZvX3Jlc3VsdAorICAqIDczZDczMTJmZjYxIGdkYjogdXNlIG1hcHBlZCBm aWxlIGluZm9ybWF0aW9uIHRvIGltcHJvdmUgZGVidWdpbmZvZCB0ZXh0CisgICogNWRkZDBkN2Vl ZmIgZ2RiL3B5dGhvbjogYXZvaWQgZGVwZW5kaW5nIG9uIHRoZSBjdXJzZXMgbGlicmFyeQorICAq IDgzNThkMzliNGYwIGdkYjogdW5pZnkgYnVpbGQtaWQgdG8gb2JqZmlsZSBsb29rdXAgY29kZQor ICAqIGZhODI2YTRiYmU5IGdkYjogaW1wcm92ZSBzaGFyZWQgbGlicmFyeSBidWlsZC1pZCBjaGVj ayBmb3IgY29yZS1maWxlcworICAqIGE0N2E2NzljNzY5IGdkYi9jb3JlZmlsZTogaW1wcm92ZSBm aWxlIGJhY2tlZCBtYXBwaW5nIGhhbmRsaW5nCisgICogNTIyODc1ZjY3OWIgZ2RiL2NvcmVmaWxl OiBkb24ndCBwcmV0ZW5kIHVuYXZhaWxhYmxlIHNlY3Rpb25zIGFyZSByZWFkYWJsZQorICAqIDk3 ODMyNDcxODk5IGdkYi9idWlsZC1pZDogcHJvdGVjdCBhZ2FpbnN0IHdlaXJkbHkgc2hvcnQgYnVp bGQtaWRzCisgICogOTU0M2MzNzYyMGMgZ2RiL3Rlc3RzdWl0ZTogbWFrZSBnZGJfZ251X3N0cmlw X2RlYnVnIGNvbnNpc3RlbnQKKyAgKiBmYzI0MGJiMTQzYyBnZGIvZmlsZWlvOiBmaXggZXJybm8g Zm9yIHBhY2tldHMgd2hlcmUgYW4gYXR0YWNobWVudCBpcyBleHBlY3RlZAorICAqIGRmMDQ0NWIz NzBmIGdkYi90ZXN0c3VpdGU6IGZpeCB0eXBvICd1bnN1cHBvcnQnIHRvICd1bnN1cHBvcnRlZCcK KworSSd2ZSBtZXJnZWQgdGhlc2UgaW50byBhIHNpbmdsZSAobGFyZ2UpIHBhdGNoIGFzIHRoZXNl IGFsbCBtZXJnZWQKK3dpdGhvdXQgYW55IGNoYW5nZXMgKGkuZS4gdGhlc2UgcmVwcmVzZW50IGV4 YWN0bHkgdGhlIHVwc3RyZWFtIGNvZGUpLAorYW5kIGFsbCBvZiB0aGVzZSB3aWxsIGJlIGluY2x1 ZGVkIGluIEdEQiAxNiwgYW5kIHNvIHNob3VsZCBhbGwgZHJvcAorb3V0IHRvZ2V0aGVyIHdoZW4g d2UgcmViYXNlIHRvIEdEQiAxNiAodGhlIG5leHQgcmViYXNlKS4KKworQWxsIG9mIHRoZXNlIHBh dGNoZXMgcmVsYXRlIHRvIGVpdGhlciBidWlsZC1pZCB1c2FnZSB3aGVuIG9wZW5pbmcgYQorY29y ZSBmaWxlLCBvciBpbXByb3ZpbmcgR0RCJ3MgYnVpbGQtaWQgYmFzZWQgZGVidWcgbG9va3VwLgor CitkaWZmIC0tZ2l0IGEvZ2RiL05FV1MgYi9nZGIvTkVXUworLS0tIGEvZ2RiL05FV1MKKysrKyBi L2dkYi9ORVdTCitAQCAtMSw2ICsxLDM2IEBACisgCQlXaGF0IGhhcyBjaGFuZ2VkIGluIEdEQj8K KyAJICAgICAoT3JnYW5pemVkIHJlbGVhc2UgYnkgcmVsZWFzZSkKKyAKKysqKiogQ2hhbmdlIHNp bmNlIEdEQiAxNQorKworKyogUHl0aG9uIEFQSQorKworKyAgKiogTmV3IG1vZHVsZSBnZGIubWlz c2luZ19vYmpmaWxlIHRoYXQgZmFjaWxpdGF0ZXMgZGVhbGluZyB3aXRoCisrICAgICBtaXNzaW5n IG9iamZpbGVzIHdoZW4gb3BlbmluZyBhIGNvcmUtZmlsZS4KKysKKysgICoqIE5ldyBmdW5jdGlv biBnZGIubWlzc2luZ19vYmpmaWxlLnJlZ2lzdGVyX2hhbmRsZXIgdGhhdCBjYW4KKysgICAgIHJl Z2lzdGVyIGFuIGluc3RhbmNlIG9mIGEgc3ViLWNsYXNzIG9mCisrICAgICBnZGIubWlzc2luZ19k ZWJ1Zy5NaXNzaW5nT2JqZmlsZUhhbmRsZXIgYXMgYSBoYW5kbGVyIGZvciBtaXNzaW5nCisrICAg ICBvYmpmaWxlcy4KKysKKysgICoqIE5ldyBjbGFzcyBnZGIubWlzc2luZ19vYmpmaWxlLk1pc3Np bmdPYmpmaWxlSGFuZGxlciB3aGljaCBjYW4gYmUKKysgICAgIHN1Yi1jbGFzc2VkIHRvIGNyZWF0 ZSBoYW5kbGVycyBmb3IgbWlzc2luZyBvYmpmaWxlcy4KKysKKysqIE5ldyBjb21tYW5kcworKwor K2luZm8gbWlzc2luZy1vYmpmaWxlLWhhbmRsZXJzCisrICBMaXN0IGFsbCB0aGUgcmVnaXN0ZXJl ZCBtaXNzaW5nLW9iamZpbGUgaGFuZGxlcnMuCisrCisrZW5hYmxlIG1pc3Npbmctb2JqZmlsZS1o YW5kbGVyIExPQ1VTIEhBTkRMRVIKKytkaXNhYmxlIG1pc3Npbmctb2JqZmlsZS1oYW5kbGVyIExP Q1VTIEhBTkRMRVIKKysgIEVuYWJsZSBvciBkaXNhYmxlIGEgbWlzc2luZy1vYmpmaWxlIGhhbmRs ZXIgd2l0aCBhIG5hbWUgbWF0Y2hpbmcgdGhlCisrICByZWd1bGFyIGV4cHJlc3Npb24gSEFORExF UiwgaW4gTE9DVVMuCisrCisrICBMT0NVUyBjYW4gYmUgJ2dsb2JhbCcgdG8gb3BlcmF0ZSBvbiBn bG9iYWwgbWlzc2luZy1vYmpmaWxlIGhhbmRsZXIsCisrICAncHJvZ3NwYWNlJyB0byBvcGVyYXRl IG9uIGhhbmRsZXJzIHdpdGhpbiB0aGUgY3VycmVudCBwcm9ncmFtIHNwYWNlLAorKyAgb3IgY2Fu IGJlIGEgcmVndWxhciBleHByZXNzaW9uIHdoaWNoIGlzIG1hdGNoZWQgYWdhaW5zdCB0aGUgZmls ZW5hbWUKKysgIG9mIHRoZSBwcmltYXJ5IGV4ZWN1dGFibGUgaW4gZWFjaCBwcm9ncmFtIHNwYWNl LgorKworICoqKiBDaGFuZ2VzIGluIEdEQiAxNQorIAorICogVGhlIE1QWCBjb21tYW5kcyAic2hv dy9zZXQgbXB4IGJvdW5kIiBoYXZlIGJlZW4gZGVwcmVjYXRlZCwgYXMgSW50ZWwKK0BAIC0yMTIs NiArMjQyLDExIEBAIHFJc0FkZHJlc3NUYWdnZWQKKyAgIGZpbGUgaXMgYWJvdXQsIHRoaXMgbmV3 IHBhY2tldCBwcm92aWRlcyBhIG1vcmUgZ2VuZXJpYyB3YXkgdG8gcGVyZm9ybSBzdWNoCisgICBh IGNoZWNrLgorIAorK3ZGaWxlOnN0YXQKKysgIFJldHVybiBpbmZvcm1hdGlvbiBhYm91dCBmaWxl cyBvbiB0aGUgcmVtb3RlIHN5c3RlbS4gIExpa2UKKysgIHZGaWxlOmZzdGF0IGJ1dCB0YWtlcyBh IGZpbGVuYW1lIHJhdGhlciB0aGFuIGFuIG9wZW4gZmlsZQorKyAgZGVzY3JpcHRvci4KKysKKyAq KiogQ2hhbmdlcyBpbiBHREIgMTQKKyAKKyAqIEdEQiBub3cgc3VwcG9ydHMgdGhlIEFBcmNoNjQg U2NhbGFibGUgTWF0cml4IEV4dGVuc2lvbiAyIChTTUUyKSwgd2hpY2gKK2RpZmYgLS1naXQgYS9n ZGIvYnVpbGQtaWQuYyBiL2dkYi9idWlsZC1pZC5jCistLS0gYS9nZGIvYnVpbGQtaWQuYworKysr IGIvZ2RiL2J1aWxkLWlkLmMKK0BAIC0yNiw2ICsyNiw5IEBACisgI2luY2x1ZGUgImZpbGVuYW1l cy5oIgorICNpbmNsdWRlICJnZGJjb3JlLmgiCisgI2luY2x1ZGUgImNsaS9jbGktc3R5bGUuaCIK KysjaW5jbHVkZSAiZ2Ric3VwcG9ydC9zY29wZWRfZmQuaCIKKysjaW5jbHVkZSAiZGVidWdpbmZv ZC1zdXBwb3J0LmgiCisrI2luY2x1ZGUgImV4dGVuc2lvbi5oIgorIAorIC8qIFNlZSBidWlsZC1p ZC5oLiAgKi8KKyAKK0BAIC03Myw3MyArNzYsMTc3IEBAIGJ1aWxkX2lkX3ZlcmlmeSAoYmZkICph YmZkLCBzaXplX3QgY2hlY2tfbGVuLCBjb25zdCBiZmRfYnl0ZSAqY2hlY2spCisgICByZXR1cm4g cmV0dmFsOworIH0KKyAKKy0vKiBIZWxwZXIgZm9yIGJ1aWxkX2lkX3RvX2RlYnVnX2JmZC4gIExJ TksgaXMgYSBwYXRoIHRvIGEgcG90ZW50aWFsCistICAgYnVpbGQtaWQtYmFzZWQgc2VwYXJhdGUg ZGVidWcgZmlsZSwgcG90ZW50aWFsbHkgYSBzeW1saW5rIHRvIHRoZSByZWFsIGZpbGUuCistICAg SWYgdGhlIGZpbGUgZXhpc3RzIGFuZCBtYXRjaGVzIEJVSUxEX0lELCByZXR1cm4gYSBCRkQgcmVm ZXJlbmNlIHRvIGl0LiAgKi8KKysvKiBIZWxwZXIgZm9yIGJ1aWxkX2lkX3RvX2RlYnVnX2JmZC4g IE9SSUdJTkFMX0xJTksgd2l0aCBTVUZGSVggYXBwZW5kZWQgaXMKKysgICBhIHBhdGggdG8gYSBw b3RlbnRpYWwgYnVpbGQtaWQtYmFzZWQgc2VwYXJhdGUgZGVidWcgZmlsZSwgcG90ZW50aWFsbHkg YQorKyAgIHN5bWxpbmsgdG8gdGhlIHJlYWwgZmlsZS4gIElmIHRoZSBmaWxlIGV4aXN0cyBhbmQg bWF0Y2hlcyBCVUlMRF9JRCwKKysgICByZXR1cm4gYSBCRkQgcmVmZXJlbmNlIHRvIGl0LiAgKi8K KyAKKyBzdGF0aWMgZ2RiX2JmZF9yZWZfcHRyCistYnVpbGRfaWRfdG9fZGVidWdfYmZkXzEgKGNv bnN0IHN0ZDo6c3RyaW5nICZsaW5rLCBzaXplX3QgYnVpbGRfaWRfbGVuLAorLQkJCSBjb25zdCBi ZmRfYnl0ZSAqYnVpbGRfaWQpCisrYnVpbGRfaWRfdG9fZGVidWdfYmZkXzEgKGNvbnN0IHN0ZDo6 c3RyaW5nICZvcmlnaW5hbF9saW5rLAorKwkJCSBzaXplX3QgYnVpbGRfaWRfbGVuLCBjb25zdCBi ZmRfYnl0ZSAqYnVpbGRfaWQsCisrCQkJIGNvbnN0IGNoYXIgKnN1ZmZpeCkKKyB7CistICBpZiAo c2VwYXJhdGVfZGVidWdfZmlsZV9kZWJ1ZykKKysgIHRyaWJvb2wgc3VwcG9ydHNfdGFyZ2V0X3N0 YXQgPSBUUklCT09MX1VOS05PV047CisrCisrICAvKiBEcm9wIHRoZSAndGFyZ2V0OicgcHJlZml4 IGlmIHRoZSB0YXJnZXQgZmlsZXN5c3RlbSBpcyBsb2NhbC4gICovCisrICBzdGQ6OnN0cmluZ192 aWV3IG9yaWdpbmFsX2xpbmtfdmlldyAob3JpZ2luYWxfbGluayk7CisrICBpZiAoaXNfdGFyZ2V0 X2ZpbGVuYW1lIChvcmlnaW5hbF9saW5rKSAmJiB0YXJnZXRfZmlsZXN5c3RlbV9pc19sb2NhbCAo KSkKKysgICAgb3JpZ2luYWxfbGlua192aWV3CisrICAgICAgPSBvcmlnaW5hbF9saW5rX3ZpZXcu c3Vic3RyIChzdHJsZW4gKFRBUkdFVF9TWVNST09UX1BSRUZJWCkpOworKworKyAgLyogVGhlIHVw cGVyIGJvdW5kIG9mICcxMCcgaGVyZSBpcyBjb21wbGV0ZWx5IGFyYml0cmFyeS4gIFRoZSBsb29w IHNob3VsZAorKyAgICAgdGVybWluYXRlIHZpYSAnYnJlYWsnIHdoZW4gZWl0aGVyIChhKSBhIHJl YWRhYmxlIHN5bWxpbmsgaXMgZm91bmQsIG9yCisrICAgICAoYikgYSBub24tZXhpc3RpbmcgZW50 cnkgaXMgZm91bmQuCisrCisrICAgICBIb3dldmVyLCBmb3IgcmVtb3RlIHRhcmdldHMsIHdlIHJl bHkgb24gdGhlIHJlbW90ZSByZXR1cm5pbmcgc2FuZQorKyAgICAgZXJyb3IgY29kZXMuICBJZiBh IHJlbW90ZSBzZW5kcyBiYWNrIHRoZSB3cm9uZyBlcnJvciBjb2RlIHRoZW4gaXQKKysgICAgIG1p Z2h0IHRyaWNrIEdEQiBpbnRvIHRoaW5raW5nIHRoYXQgdGhlIHN5bWxpbmsgZXhpc3RzLCBidXQg cG9pbnRzIHRvIGEKKysgICAgIG1pc3NpbmcgZmlsZSwgaW4gd2hpY2ggY2FzZSBHREIgd2lsbCB0 cnkgdGhlIG5leHQgc2Vxbm8uICBXZSBkb24ndAorKyAgICAgd2FudCBhIGJyb2tlbiByZW1vdGUg dG8gY2F1c2UgR0RCIHRvIHNwaW4gaGVyZSBmb3JldmVyLCBoZW5jZSBhIGZpeGVkCisrICAgICB1 cHBlciBib3VuZC4gICovCisrCisrICBmb3IgKHVuc2lnbmVkIHNlcW5vID0gMDsgc2Vxbm8gPCAx MDsgc2Vxbm8rKykKKyAgICAgeworLSAgICAgIGdkYl9wcmludGYgKGdkYl9zdGRsb2csIF8oIiAg VHJ5aW5nICVzLi4uIiksIGxpbmsuY19zdHIgKCkpOworLSAgICAgIGdkYl9mbHVzaCAoZ2RiX3N0 ZGxvZyk7CistICAgIH0KKysgICAgICBzdGQ6OnN0cmluZyBsaW5rIChvcmlnaW5hbF9saW5rX3Zp ZXcpOworIAorLSAgLyogbHJlYWxwYXRoKCkgaXMgZXhwZW5zaXZlIGV2ZW4gZm9yIHRoZSB1c3Vh bGx5IG5vbi1leGlzdGVudCBmaWxlcy4gICovCistICBnZGI6OnVuaXF1ZV94bWFsbG9jX3B0cjxj aGFyPiBmaWxlbmFtZV9ob2xkZXI7CistICBjb25zdCBjaGFyICpmaWxlbmFtZSA9IG51bGxwdHI7 CistICBpZiAoaXNfdGFyZ2V0X2ZpbGVuYW1lIChsaW5rKSkKKy0gICAgZmlsZW5hbWUgPSBsaW5r LmNfc3RyICgpOworLSAgZWxzZSBpZiAoYWNjZXNzIChsaW5rLmNfc3RyICgpLCBGX09LKSA9PSAw KQorLSAgICB7CistICAgICAgZmlsZW5hbWVfaG9sZGVyLnJlc2V0IChscmVhbHBhdGggKGxpbmsu Y19zdHIgKCkpKTsKKy0gICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lX2hvbGRlci5nZXQgKCk7Cist ICAgIH0KKysgICAgICBpZiAoc2Vxbm8gPiAwKQorKwlzdHJpbmdfYXBwZW5kZiAobGluaywgIi4l dSIsIHNlcW5vKTsKKyAKKy0gIGlmIChmaWxlbmFtZSA9PSBOVUxMKQorLSAgICB7CistICAgICAg aWYgKHNlcGFyYXRlX2RlYnVnX2ZpbGVfZGVidWcpCistCWdkYl9wcmludGYgKGdkYl9zdGRsb2cs CistCQkgICAgXygiIG5vLCB1bmFibGUgdG8gY29tcHV0ZSByZWFsIHBhdGhcbiIpKTsKKysgICAg ICBsaW5rICs9IHN1ZmZpeDsKKyAKKy0gICAgICByZXR1cm4ge307CistICAgIH0KKysgICAgICBz ZXBhcmF0ZV9kZWJ1Z19maWxlX2RlYnVnX3ByaW50ZiAoIlRyeWluZyAlcy4uLiIsIGxpbmsuY19z dHIgKCkpOworIAorLSAgLyogV2UgZXhwZWN0IHRvIGJlIHNpbGVudCBvbiB0aGUgbm9uLWV4aXN0 aW5nIGZpbGVzLiAgKi8KKy0gIGdkYl9iZmRfcmVmX3B0ciBkZWJ1Z19iZmQgPSBnZGJfYmZkX29w ZW4gKGZpbGVuYW1lLCBnbnV0YXJnZXQpOworKyAgICAgIGdkYjo6dW5pcXVlX3htYWxsb2NfcHRy PGNoYXI+IGZpbGVuYW1lX2hvbGRlcjsKKysgICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSA9IG51 bGxwdHI7CisrICAgICAgaWYgKGlzX3RhcmdldF9maWxlbmFtZSAobGluaykpCisrCXsKKysJICBn ZGJfYXNzZXJ0IChsaW5rLmxlbmd0aCAoKSA+PSBzdHJsZW4gKFRBUkdFVF9TWVNST09UX1BSRUZJ WCkpOworKwkgIGNvbnN0IGNoYXIgKmxpbmtfb25fdGFyZ2V0CisrCSAgICA9IGxpbmsuY19zdHIg KCkgKyBzdHJsZW4gKFRBUkdFVF9TWVNST09UX1BSRUZJWCk7CisrCisrCSAgZmlsZWlvX2Vycm9y IHRhcmdldF9lcnJubzsKKysJICBpZiAoc3VwcG9ydHNfdGFyZ2V0X3N0YXQgIT0gVFJJQk9PTF9G QUxTRSkKKysJICAgIHsKKysJICAgICAgc3RydWN0IHN0YXQgc2I7CisrCSAgICAgIGludCByZXMg PSB0YXJnZXRfZmlsZWlvX3N0YXQgKG51bGxwdHIsIGxpbmtfb25fdGFyZ2V0LCAmc2IsCisrCQkJ CQkgICAgJnRhcmdldF9lcnJubyk7CisrCisrCSAgICAgIGlmIChyZXMgIT0gMCAmJiB0YXJnZXRf ZXJybm8gIT0gRklMRUlPX0VOT1NZUykKKysJCXsKKysJCSAgc2VwYXJhdGVfZGVidWdfZmlsZV9k ZWJ1Z19wcmludGYgKCJwYXRoIGRvZXNuJ3QgZXhpc3QiKTsKKysJCSAgYnJlYWs7CisrCQl9Cisr CSAgICAgIGVsc2UgaWYgKHJlcyAhPSAwICYmIHRhcmdldF9lcnJubyA9PSBGSUxFSU9fRU5PU1lT KQorKwkJc3VwcG9ydHNfdGFyZ2V0X3N0YXQgPSBUUklCT09MX0ZBTFNFOworKwkgICAgICBlbHNl CisrCQl7CisrCQkgIHN1cHBvcnRzX3RhcmdldF9zdGF0ID0gVFJJQk9PTF9UUlVFOworKwkJICBm aWxlbmFtZSA9IGxpbmsuY19zdHIgKCk7CisrCQl9CisrCSAgICB9CisrCisrCSAgaWYgKHN1cHBv cnRzX3RhcmdldF9zdGF0ID09IFRSSUJPT0xfRkFMU0UpCisrCSAgICB7CisrCSAgICAgIGdkYl9h c3NlcnQgKGZpbGVuYW1lID09IG51bGxwdHIpOworKworKwkgICAgICAvKiBDb25uZWN0aW5nIHRv IGEgdGFyZ2V0IHRoYXQgZG9lc24ndCBzdXBwb3J0ICdzdGF0Jy4gIFRyeQorKwkJICdyZWFkbGlu aycgYXMgYW4gYWx0ZXJuYXRpdmUuICBUaGlzIGlzbid0IGlkZWFsLCBidXQgaXMKKysJCSBtYXli ZSBiZXR0ZXIgdGhhbiBub3RoaW5nLiAgUmV0dXJucyBFSU5WQUwgaWYgdGhlIHBhdGgKKysJCSBp c24ndCBhIHN5bWJvbGljIGxpbmssIHdoaWNoIGhpbnRzIHRoYXQgdGhlIHBhdGggaXMKKysJCSBh dmFpbGFibGUgLS0gdGhlcmUgYXJlIG90aGVyIGVycm9ycyBlLmcuIEVOT0VOVCBmb3Igd2hlbgor KwkJIHRoZSBwYXRoIGRvZXNuJ3QgZXhpc3QsIGJ1dCB3ZSBqdXN0IGFzc3VtZSB0aGF0IGFueXRo aW5nCisrCQkgb3RoZXIgdGhhbiBFSU5WQUwgaW5kaWNhdGVzIHRoZSBwYXRoIGRvZXNuJ3QgZXhp c3QuICAqLworKwkgICAgICBzdGQ6Om9wdGlvbmFsPHN0ZDo6c3RyaW5nPiBsaW5rX3RhcmdldAor KwkJPSB0YXJnZXRfZmlsZWlvX3JlYWRsaW5rIChudWxscHRyLCBsaW5rX29uX3RhcmdldCwKKysJ CQkJCSAgJnRhcmdldF9lcnJubyk7CisrCSAgICAgIGlmIChsaW5rX3RhcmdldC5oYXNfdmFsdWUg KCkKKysJCSAgfHwgdGFyZ2V0X2Vycm5vID09IEZJTEVJT19FSU5WQUwpCisrCQlmaWxlbmFtZSA9 IGxpbmsuY19zdHIgKCk7CisrCSAgICAgIGVsc2UKKysJCXsKKysJCSAgc2VwYXJhdGVfZGVidWdf ZmlsZV9kZWJ1Z19wcmludGYgKCJwYXRoIGRvZXNuJ3QgZXhpc3QiKTsKKysJCSAgYnJlYWs7Cisr CQl9CisrCSAgICB9CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICBzdHJ1Y3Qgc3RhdCBidWY7 CisrCisrCSAgLyogVGhlIGBhY2Nlc3MnIGNhbGwgYmVsb3cgYXV0b21hdGljYWxseSBkZXJlZmVy ZW5jZXMgTElOSywgYnV0CisrCSAgICAgd2Ugd2FudCB0byBzdG9wIGluY3JlbWVudGluZyBTRVFO TyBvbmNlIHdlIGZpbmQgYSBzeW1saW5rCisrCSAgICAgdGhhdCBkb2Vzbid0IGV4aXN0LiAgKi8K KysJICBpZiAobHN0YXQgKGxpbmsuY19zdHIgKCksICZidWYpICE9IDApCisrCSAgICB7CisrCSAg ICAgIHNlcGFyYXRlX2RlYnVnX2ZpbGVfZGVidWdfcHJpbnRmICgicGF0aCBkb2Vzbid0IGV4aXN0 Iik7CisrCSAgICAgIGJyZWFrOworKwkgICAgfQorKworKwkgIC8qIENhbiBMSU5LIGJlIGFjY2Vz c2VkLCBvciBpZiBMSU5LIGlzIGEgc3ltbGluaywgY2FuIHRoZSBmaWxlCisrCSAgICAgcG9pbnRl ZCB0b28gYmUgYWNjZXNzZWQ/ICBEbyB0aGlzIGFzIGxyZWFscGF0aCgpIGlzCisrCSAgICAgZXhw ZW5zaXZlLCBldmVuIGZvciB0aGUgdXN1YWxseSBub24tZXhpc3RlbnQgZmlsZXMuICAqLworKwkg IGlmIChhY2Nlc3MgKGxpbmsuY19zdHIgKCksIEZfT0spID09IDApCisrCSAgICB7CisrCSAgICAg IGZpbGVuYW1lX2hvbGRlci5yZXNldCAobHJlYWxwYXRoIChsaW5rLmNfc3RyICgpKSk7CisrCSAg ICAgIGZpbGVuYW1lID0gZmlsZW5hbWVfaG9sZGVyLmdldCAoKTsKKysJICAgIH0KKysJfQorIAor LSAgaWYgKGRlYnVnX2JmZCA9PSBOVUxMKQorLSAgICB7CistICAgICAgaWYgKHNlcGFyYXRlX2Rl YnVnX2ZpbGVfZGVidWcpCistCWdkYl9wcmludGYgKGdkYl9zdGRsb2csIF8oIiBubywgdW5hYmxl IHRvIG9wZW4uXG4iKSk7CisrICAgICAgaWYgKGZpbGVuYW1lID09IG51bGxwdHIpCisrCXsKKysJ ICBzZXBhcmF0ZV9kZWJ1Z19maWxlX2RlYnVnX3ByaW50ZiAoInVuYWJsZSB0byBjb21wdXRlIHJl YWwgcGF0aCIpOworKwkgIGNvbnRpbnVlOworKwl9CisgCistICAgICAgcmV0dXJuIHt9OworLSAg ICB9CisrICAgICAgLyogV2UgZXhwZWN0IHRvIGJlIHNpbGVudCBvbiB0aGUgbm9uLWV4aXN0aW5n IGZpbGVzLiAgKi8KKysgICAgICBnZGJfYmZkX3JlZl9wdHIgZGVidWdfYmZkID0gZ2RiX2JmZF9v cGVuIChmaWxlbmFtZSwgZ251dGFyZ2V0KTsKKyAKKy0gIGlmICghYnVpbGRfaWRfdmVyaWZ5IChk ZWJ1Z19iZmQuZ2V0KCksIGJ1aWxkX2lkX2xlbiwgYnVpbGRfaWQpKQorLSAgICB7CistICAgICAg aWYgKHNlcGFyYXRlX2RlYnVnX2ZpbGVfZGVidWcpCistCWdkYl9wcmludGYgKGdkYl9zdGRsb2cs IF8oIiBubywgYnVpbGQtaWQgZG9lcyBub3QgbWF0Y2guXG4iKSk7CisrICAgICAgaWYgKGRlYnVn X2JmZCA9PSBOVUxMKQorKwl7CisrCSAgc2VwYXJhdGVfZGVidWdfZmlsZV9kZWJ1Z19wcmludGYg KCJ1bmFibGUgdG8gb3BlbiBgJXNgIiwgZmlsZW5hbWUpOworKwkgIGNvbnRpbnVlOworKwl9Cisg CistICAgICAgcmV0dXJuIHt9OworLSAgICB9CisrICAgICAgaWYgKCFidWlsZF9pZF92ZXJpZnkg KGRlYnVnX2JmZC5nZXQoKSwgYnVpbGRfaWRfbGVuLCBidWlsZF9pZCkpCisrCXsKKysJICBzZXBh cmF0ZV9kZWJ1Z19maWxlX2RlYnVnX3ByaW50ZiAoImJ1aWxkLWlkIGRvZXMgbm90IG1hdGNoIik7 CisrCSAgY29udGludWU7CisrCX0KKyAKKy0gIGlmIChzZXBhcmF0ZV9kZWJ1Z19maWxlX2RlYnVn KQorLSAgICBnZGJfcHJpbnRmIChnZGJfc3RkbG9nLCBfKCIgeWVzIVxuIikpOworKyAgICAgIHNl cGFyYXRlX2RlYnVnX2ZpbGVfZGVidWdfcHJpbnRmICgiZm91bmQgYSBtYXRjaCIpOworKyAgICAg IHJldHVybiBkZWJ1Z19iZmQ7CisrICAgIH0KKyAKKy0gIHJldHVybiBkZWJ1Z19iZmQ7CisrICBz ZXBhcmF0ZV9kZWJ1Z19maWxlX2RlYnVnX3ByaW50ZiAoIm5vIHN1aXRhYmxlIGZpbGUgZm91bmQi KTsKKysgIHJldHVybiB7fTsKKyB9CisgCisgLyogQ29tbW9uIGNvZGUgZm9yIGZpbmRpbmcgQkZE cyBvZiBhIGdpdmVuIGJ1aWxkLWlkLiAgVGhpcyBmdW5jdGlvbgorICAgIHdvcmtzIHdpdGggYm90 aCBkZWJ1Z2luZm8gZmlsZXMgKFNVRkZJWCA9PSAiLmRlYnVnIikgYW5kIGV4ZWN1dGFibGUKKy0g ICBmaWxlcyAoU1VGRklYID09ICIiKS4gICovCisrICAgZmlsZXMgKFNVRkZJWCA9PSAiIikuCisr CisrICAgVGhlIGJ1aWxkLWlkIHdpbGwgYmUgc3BsaXQgaW50byBhIHNpbmdsZSBieXRlIHN1Yi1k aXJlY3RvcnksIGZvbGxvd2VkIGJ5CisrICAgdGhlIHJlbWFpbmluZyBidWlsZC1pZCBieXRlcyBh cyB0aGUgZmlsZW5hbWUsIGkuZS4gd2UgdXNlIHRoZSBsb29rdXAKKysgICBmb3JtYXQ6IGAuYnVp bGQtaWQveHgveXkuLi4uenpgLiAgQXMgYSBjb25zZXF1ZW5jZSwgaWYgQlVJTERfSURfTEVOIGlz CisrICAgbGVzcyB0aGFuIDIgKGJ5dGVzKSwgbm8gcmVzdWx0cyB3aWxsIGJlIGZvdW5kIGFzIHRo ZXJlIGFyZSBub3QgZW5vdWdoCisrICAgYnl0ZXMgdG8gZm9ybSB0aGUgYHl5Li4uLnp6YCBwYXJ0 IG9mIHRoZSBsb29rdXAgZmlsZW5hbWUuICAqLworIAorIHN0YXRpYyBnZGJfYmZkX3JlZl9wdHIK KyBidWlsZF9pZF90b19iZmRfc3VmZml4IChzaXplX3QgYnVpbGRfaWRfbGVuLCBjb25zdCBiZmRf Ynl0ZSAqYnVpbGRfaWQsCisgCQkJY29uc3QgY2hhciAqc3VmZml4KQorIHsKKysgIFNFUEFSQVRF X0RFQlVHX0ZJTEVfU0NPUEVEX0RFQlVHX0VOVEVSX0VYSVQ7CisrCisrICBpZiAoYnVpbGRfaWRf bGVuIDwgMikKKysgICAgeworKyAgICAgIC8qIFplcm8gbGVuZ3RoIGJ1aWxkLWlkcyBhcmUgaWdu b3JlZCBieSBiZmQuICAqLworKyAgICAgIGdkYl9hc3NlcnQgKGJ1aWxkX2lkX2xlbiA+IDApOwor KyAgICAgIHNlcGFyYXRlX2RlYnVnX2ZpbGVfZGVidWdfcHJpbnRmCisrCSgiSWdub3Jpbmcgc2hv cnQgYnVpbGQtaWQgYCVzJyBmb3IgYnVpbGQtaWQgYmFzZWQgbG9va3VwIiwKKysJIGJpbjJoZXgg KGJ1aWxkX2lkLCBidWlsZF9pZF9sZW4pLmNfc3RyICgpKTsKKysgICAgICByZXR1cm4ge307Cisr ICAgIH0KKysKKyAgIC8qIEtlZXAgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBzbyB0aGF0IERFQlVH X0ZJTEVfRElSRUNUT1JZIGJlaW5nICIiIHdpbGwKKyAgICAgIGNhdXNlICIvLmJ1aWxkLWlkLy4u LiIgbG9va3Vwcy4gICovCisgCitAQCAtMTU4LDMwICsyNjUsMzMgQEAgYnVpbGRfaWRfdG9fYmZk X3N1ZmZpeCAoc2l6ZV90IGJ1aWxkX2lkX2xlbiwgY29uc3QgYmZkX2J5dGUgKmJ1aWxkX2lkLAor ICAgICAgIHN0ZDo6c3RyaW5nIGxpbmsgPSBkZWJ1Z2Rpci5nZXQgKCk7CisgICAgICAgbGluayAr PSAiLy5idWlsZC1pZC8iOworIAorLSAgICAgIGlmIChzaXplID4gMCkKKy0JeworLQkgIHNpemUt LTsKKy0JICBzdHJpbmdfYXBwZW5kZiAobGluaywgIiUwMngvIiwgKHVuc2lnbmVkKSAqZGF0YSsr KTsKKy0JfQorKyAgICAgIGdkYl9hc3NlcnQgKHNpemUgPiAxKTsKKysgICAgICBzaXplLS07Cisr ICAgICAgc3RyaW5nX2FwcGVuZGYgKGxpbmssICIlMDJ4LyIsICh1bnNpZ25lZCkgKmRhdGErKyk7 CisgCisgICAgICAgd2hpbGUgKHNpemUtLSA+IDApCisgCXN0cmluZ19hcHBlbmRmIChsaW5rLCAi JTAyeCIsICh1bnNpZ25lZCkgKmRhdGErKyk7CisgCistICAgICAgbGluayArPSBzdWZmaXg7Cist CisgICAgICAgZ2RiX2JmZF9yZWZfcHRyIGRlYnVnX2JmZAorLQk9IGJ1aWxkX2lkX3RvX2RlYnVn X2JmZF8xIChsaW5rLCBidWlsZF9pZF9sZW4sIGJ1aWxkX2lkKTsKKysJPSBidWlsZF9pZF90b19k ZWJ1Z19iZmRfMSAobGluaywgYnVpbGRfaWRfbGVuLCBidWlsZF9pZCwgc3VmZml4KTsKKyAgICAg ICBpZiAoZGVidWdfYmZkICE9IE5VTEwpCisgCXJldHVybiBkZWJ1Z19iZmQ7CisgCisgICAgICAg LyogVHJ5IHRvIGxvb2sgdW5kZXIgdGhlIHN5c3Jvb3QgYXMgd2VsbC4gIElmIHRoZSBzeXNyb290 IGlzCisgCSAiL3RoZS9zeXNyb290IiwgaXQgd2lsbCBnaXZlCistCSAiL3RoZS9zeXNyb290L3Vz ci9saWIvZGVidWcvLmJ1aWxkLWlkL2FiL2NkZWYuZGVidWciLiAgKi8KKysJICIvdGhlL3N5c3Jv b3QvdXNyL2xpYi9kZWJ1Zy8uYnVpbGQtaWQvYWIvY2RlZi5kZWJ1ZyIuCisrCisrCSBJZiB0aGUg c3lzcm9vdCBpcyAndGFyZ2V0OicgYW5kIHRoZSB0YXJnZXQgZmlsZXN5c3RlbSBpcyBsb2NhbCB0 bworKwkgR0RCIHRoZW4gJ3RhcmdldDovcGF0aC90by9jaGVjaycgYmVjb21lcyAnL3BhdGgvdG8v Y2hlY2snIHdoaWNoCisrCSB3ZSBqdXN0IGNoZWNrZWQgYWJvdmUuICAqLworIAorLSAgICAgIGlm ICghZ2RiX3N5c3Jvb3QuZW1wdHkgKCkpCisrICAgICAgaWYgKCFnZGJfc3lzcm9vdC5lbXB0eSAo KQorKwkgICYmIChnZGJfc3lzcm9vdCAhPSBUQVJHRVRfU1lTUk9PVF9QUkVGSVgKKysJICAgICAg fHwgIXRhcmdldF9maWxlc3lzdGVtX2lzX2xvY2FsICgpKSkKKyAJeworIAkgIGxpbmsgPSBnZGJf c3lzcm9vdCArIGxpbms7CistCSAgZGVidWdfYmZkID0gYnVpbGRfaWRfdG9fZGVidWdfYmZkXzEg KGxpbmssIGJ1aWxkX2lkX2xlbiwgYnVpbGRfaWQpOworKwkgIGRlYnVnX2JmZCA9IGJ1aWxkX2lk X3RvX2RlYnVnX2JmZF8xIChsaW5rLCBidWlsZF9pZF9sZW4sIGJ1aWxkX2lkLAorKwkJCQkJICAg ICAgIHN1ZmZpeCk7CisgCSAgaWYgKGRlYnVnX2JmZCAhPSBOVUxMKQorIAkgICAgcmV0dXJuIGRl YnVnX2JmZDsKKyAJfQorQEAgLTE5OCw5ICszMDgsMTEgQEAgYnVpbGRfaWRfdG9fZGVidWdfYmZk IChzaXplX3QgYnVpbGRfaWRfbGVuLCBjb25zdCBiZmRfYnl0ZSAqYnVpbGRfaWQpCisgICByZXR1 cm4gYnVpbGRfaWRfdG9fYmZkX3N1ZmZpeCAoYnVpbGRfaWRfbGVuLCBidWlsZF9pZCwgIi5kZWJ1 ZyIpOworIH0KKyAKKy0vKiBTZWUgYnVpbGQtaWQuaC4gICovCisrLyogRmluZCBhbmQgb3BlbiBh IEJGRCBmb3IgYW4gZXhlY3V0YWJsZSBmaWxlIGdpdmVuIGEgYnVpbGQtaWQuICBJZiBubyBCRkQK KysgICBjYW4gYmUgZm91bmQsIHJldHVybiBOVUxMLiAgVGhlIHJldHVybmVkIHJlZmVyZW5jZSB0 byB0aGUgQkZEIG11c3QgYmUKKysgICByZWxlYXNlZCBieSB0aGUgY2FsbGVyLiAgKi8KKyAKKy1n ZGJfYmZkX3JlZl9wdHIKKytzdGF0aWMgZ2RiX2JmZF9yZWZfcHRyCisgYnVpbGRfaWRfdG9fZXhl Y19iZmQgKHNpemVfdCBidWlsZF9pZF9sZW4sIGNvbnN0IGJmZF9ieXRlICpidWlsZF9pZCkKKyB7 CisgICByZXR1cm4gYnVpbGRfaWRfdG9fYmZkX3N1ZmZpeCAoYnVpbGRfaWRfbGVuLCBidWlsZF9p ZCwgIiIpOworQEAgLTIxNywxMCArMzI5LDkgQEAgZmluZF9zZXBhcmF0ZV9kZWJ1Z19maWxlX2J5 X2J1aWxkaWQgKHN0cnVjdCBvYmpmaWxlICpvYmpmaWxlLAorICAgYnVpbGRfaWQgPSBidWlsZF9p ZF9iZmRfZ2V0IChvYmpmaWxlLT5vYmZkLmdldCAoKSk7CisgICBpZiAoYnVpbGRfaWQgIT0gTlVM TCkKKyAgICAgeworLSAgICAgIGlmIChzZXBhcmF0ZV9kZWJ1Z19maWxlX2RlYnVnKQorLQlnZGJf cHJpbnRmIChnZGJfc3RkbG9nLAorLQkJICAgIF8oIlxuTG9va2luZyBmb3Igc2VwYXJhdGUgZGVi dWcgaW5mbyAoYnVpbGQtaWQpIGZvciAiCistCQkgICAgICAiJXNcbiIpLCBvYmpmaWxlX25hbWUg KG9iamZpbGUpKTsKKysgICAgICBTRVBBUkFURV9ERUJVR19GSUxFX1NDT1BFRF9ERUJVR19TVEFS VF9FTkQKKysJKCJsb29raW5nIGZvciBzZXBhcmF0ZSBkZWJ1ZyBpbmZvIChidWlsZC1pZCkgZm9y ICVzIiwKKysJIG9iamZpbGVfbmFtZSAob2JqZmlsZSkpOworIAorICAgICAgIGdkYl9iZmRfcmVm X3B0ciBhYmZkIChidWlsZF9pZF90b19kZWJ1Z19iZmQgKGJ1aWxkX2lkLT5zaXplLAorIAkJCQkJ CSAgIGJ1aWxkX2lkLT5kYXRhKSk7CitAQCAtMjI5LDkgKzM0MCw5IEBAIGZpbmRfc2VwYXJhdGVf ZGVidWdfZmlsZV9ieV9idWlsZGlkIChzdHJ1Y3Qgb2JqZmlsZSAqb2JqZmlsZSwKKyAJICAmJiBm aWxlbmFtZV9jbXAgKGJmZF9nZXRfZmlsZW5hbWUgKGFiZmQuZ2V0ICgpKSwKKyAJCQkgICBvYmpm aWxlX25hbWUgKG9iamZpbGUpKSA9PSAwKQorIAl7CistCSAgaWYgKHNlcGFyYXRlX2RlYnVnX2Zp bGVfZGVidWcpCistCSAgICBnZGJfcHJpbnRmIChnZGJfc3RkbG9nLCAiXCIlc1wiOiBzZXBhcmF0 ZSBkZWJ1ZyBpbmZvIGZpbGUgaGFzIG5vICIKKy0JCQkiZGVidWcgaW5mbyIsIGJmZF9nZXRfZmls ZW5hbWUgKGFiZmQuZ2V0ICgpKSk7CisrCSAgc2VwYXJhdGVfZGVidWdfZmlsZV9kZWJ1Z19wcmlu dGYKKysJICAgICgiXCIlc1wiOiBzZXBhcmF0ZSBkZWJ1ZyBpbmZvIGZpbGUgaGFzIG5vIGRlYnVn IGluZm8iLAorKwkgICAgIGJmZF9nZXRfZmlsZW5hbWUgKGFiZmQuZ2V0ICgpKSk7CisgCSAgd2Fy bmluZ3MtPndhcm4gKF8oIlwiJXBzXCI6IHNlcGFyYXRlIGRlYnVnIGluZm8gZmlsZSBoYXMgbm8g IgorIAkJCSAgICAiZGVidWcgaW5mbyIpLAorIAkJCSAgc3R5bGVkX3N0cmluZyAoZmlsZV9uYW1l X3N0eWxlLnN0eWxlICgpLAorQEAgLTI0MywzICszNTQsNzggQEAgZmluZF9zZXBhcmF0ZV9kZWJ1 Z19maWxlX2J5X2J1aWxkaWQgKHN0cnVjdCBvYmpmaWxlICpvYmpmaWxlLAorIAorICAgcmV0dXJu IHN0ZDo6c3RyaW5nICgpOworIH0KKysKKysvKiBTZWUgYnVpbGQtaWQuaC4gICovCisrCisrZ2Ri X2JmZF9yZWZfcHRyCisrZmluZF9vYmpmaWxlX2J5X2J1aWxkX2lkIChwcm9ncmFtX3NwYWNlICpw c3BhY2UsCisrCQkJICBjb25zdCBiZmRfYnVpbGRfaWQgKmJ1aWxkX2lkLAorKwkJCSAgY29uc3Qg Y2hhciAqZXhwZWN0ZWRfZmlsZW5hbWUpCisreworKyAgZ2RiX2JmZF9yZWZfcHRyIGFiZmQ7Cisr CisrICBmb3IgKHVuc2lnbmVkIGF0dGVtcHQgPSAwLCBtYXhfYXR0ZW1wdHMgPSAxOworKyAgICAg ICBhdHRlbXB0IDwgbWF4X2F0dGVtcHRzICYmIGFiZmQgPT0gbnVsbHB0cjsKKysgICAgICAgKyth dHRlbXB0KQorKyAgICB7CisrICAgICAgLyogVHJ5IHRvIGZpbmQgdGhlIGV4ZWN1dGFibGUgKG9y IHNoYXJlZCBvYmplY3QpIGJ5IGxvb2tpbmcgZm9yIGEKKysJIChzeW0pbGluayBvbiBkaXNrIGZy b20gdGhlIGJ1aWxkLWlkIHRvIHRoZSBvYmplY3QgZmlsZS4gICovCisrICAgICAgYWJmZCA9IGJ1 aWxkX2lkX3RvX2V4ZWNfYmZkIChidWlsZF9pZC0+c2l6ZSwgYnVpbGRfaWQtPmRhdGEpOworKwor KyAgICAgIGlmIChhYmZkICE9IG51bGxwdHIgfHwgYXR0ZW1wdCA+IDApCisrCWJyZWFrOworKwor KyAgICAgIC8qIEF0dGVtcHQgdG8gcXVlcnkgZGVidWdpbmZvZCBmb3IgdGhlIGV4ZWN1dGFibGUu ICBUaGlzIHdpbGwgb25seQorKwkgZ2V0IHJ1biBkdXJpbmcgdGhlIGZpcnN0IGF0dGVtcHQsIGlm IGFuIGV4dGVuc2lvbiBsYW5ndWFnZSBob29rCisrCSAoc2VlIGJlbG93KSBhc2tlZCBmb3IgYSBz ZWNvbmQgYXR0ZW1wdCB0aGVuIHdlIHdpbGwgaGF2ZSBhbHJlYWR5CisrCSBicm9rZW4gb3V0IG9m IHRoZSBsb29wIGFib3ZlLiAgKi8KKysgICAgICBnZGI6OnVuaXF1ZV94bWFsbG9jX3B0cjxjaGFy PiBwYXRoOworKyAgICAgIHNjb3BlZF9mZCBmZCA9IGRlYnVnaW5mb2RfZXhlY19xdWVyeSAoYnVp bGRfaWQtPmRhdGEsIGJ1aWxkX2lkLT5zaXplLAorKwkJCQkJICAgIGV4cGVjdGVkX2ZpbGVuYW1l LCAmcGF0aCk7CisrICAgICAgaWYgKGZkLmdldCAoKSA+PSAwKQorKwl7CisrCSAgYWJmZCA9IGdk Yl9iZmRfb3BlbiAocGF0aC5nZXQgKCksIGdudXRhcmdldCk7CisrCisrCSAgaWYgKGFiZmQgPT0g bnVsbHB0cikKKysJICAgIHdhcm5pbmcgKF8oIlwiJXBzXCIgZnJvbSBkZWJ1Z2luZm9kIGNhbm5v dCBiZSBvcGVuZWQgYXMgYmZkOiAlcyIpLAorKwkJICAgICBzdHlsZWRfc3RyaW5nIChmaWxlX25h bWVfc3R5bGUuc3R5bGUgKCksIHBhdGguZ2V0ICgpKSwKKysJCSAgICAgZ2RiX2JmZF9lcnJtc2cg KGJmZF9nZXRfZXJyb3IgKCksIG51bGxwdHIpLmNfc3RyICgpKTsKKysJICBlbHNlIGlmICghYnVp bGRfaWRfdmVyaWZ5IChhYmZkLmdldCAoKSwgYnVpbGRfaWQtPnNpemUsCisrCQkJCSAgICAgYnVp bGRfaWQtPmRhdGEpKQorKwkgICAgYWJmZCA9IG51bGxwdHI7CisrCX0KKysKKysgICAgICBpZiAo YWJmZCAhPSBudWxscHRyKQorKwlicmVhazsKKysKKysgICAgICBleHRfbGFuZ19taXNzaW5nX2Zp bGVfcmVzdWx0IGV4dF9yZXN1bHQKKysJPSBleHRfbGFuZ19maW5kX29iamZpbGVfZnJvbV9idWls ZGlkIChwc3BhY2UsIGJ1aWxkX2lkLAorKwkJCQkJICAgICAgZXhwZWN0ZWRfZmlsZW5hbWUpOwor KyAgICAgIGlmICghZXh0X3Jlc3VsdC5maWxlbmFtZSAoKS5lbXB0eSAoKSkKKysJeworKwkgIC8q IFRoZSBleHRlbnNpb24gaWRlbnRpZmllZCB0aGUgZmlsZSBmb3IgdXMuICAqLworKwkgIGFiZmQg PSBnZGJfYmZkX29wZW4gKGV4dF9yZXN1bHQuZmlsZW5hbWUgKCkuY19zdHIgKCksIGdudXRhcmdl dCk7CisrCSAgaWYgKGFiZmQgPT0gbnVsbHB0cikKKysJICAgIHsKKysJICAgICAgd2FybmluZyAo XygiXCIlcHNcIiBmcm9tIGV4dGVuc2lvbiBjYW5ub3QgYmUgb3BlbmVkIGFzIGJmZDogJXMiKSwK KysJCSAgICAgICBzdHlsZWRfc3RyaW5nIChmaWxlX25hbWVfc3R5bGUuc3R5bGUgKCksCisrCQkJ CSAgICAgIGV4dF9yZXN1bHQuZmlsZW5hbWUgKCkuY19zdHIgKCkpLAorKwkJICAgICAgIGdkYl9i ZmRfZXJybXNnIChiZmRfZ2V0X2Vycm9yICgpLCBudWxscHRyKS5jX3N0ciAoKSk7CisrCSAgICAg IGJyZWFrOworKwkgICAgfQorKworKwkgIC8qIElmIHRoZSBleHRlbnNpb24gZ2F2ZSB1cyBhIHBh dGggdG8gYSBmaWxlIHRoZW4gd2UgYWx3YXlzCisrCSAgICAgYXNzdW1lIHRoYXQgaXQgaXMgdGhl IGNvcnJlY3QgZmlsZSwgd2UgZG8gbm8gYWRkaXRpb25hbCBjaGVjaworKwkgICAgIG9mIGl0cyBi dWlsZC1pZC4gICovCisrCX0KKysgICAgICBlbHNlIGlmIChleHRfcmVzdWx0LnRyeV9hZ2FpbiAo KSkKKysJeworKwkgIC8qIFRoZSBleHRlbnNpb24gbWlnaHQgaGF2ZSBpbnN0YWxsZWQgdGhlIGZp bGUgaW4gdGhlIGV4cGVjdGVkCisrCSAgICAgbG9jYXRpb24sIHdlIHNob3VsZCB0cnkgYWdhaW4u ICAqLworKwkgIG1heF9hdHRlbXB0cyA9IDI7CisrCSAgY29udGludWU7CisrCX0KKysgICAgfQor KworKyAgcmV0dXJuIGFiZmQ7CisrfQorZGlmZiAtLWdpdCBhL2dkYi9idWlsZC1pZC5oIGIvZ2Ri L2J1aWxkLWlkLmgKKy0tLSBhL2dkYi9idWlsZC1pZC5oCisrKysgYi9nZGIvYnVpbGQtaWQuaAor QEAgLTQwLDEzICs0MCw2IEBAIGV4dGVybiBpbnQgYnVpbGRfaWRfdmVyaWZ5IChiZmQgKmFiZmQs CisgZXh0ZXJuIGdkYl9iZmRfcmVmX3B0ciBidWlsZF9pZF90b19kZWJ1Z19iZmQgKHNpemVfdCBi dWlsZF9pZF9sZW4sCisgCQkJCQkgICAgICBjb25zdCBiZmRfYnl0ZSAqYnVpbGRfaWQpOworIAor LS8qIEZpbmQgYW5kIG9wZW4gYSBCRkQgZm9yIGFuIGV4ZWN1dGFibGUgZmlsZSBnaXZlbiBhIGJ1 aWxkLWlkLiAgSWYgbm8gQkZECistICAgY2FuIGJlIGZvdW5kLCByZXR1cm4gTlVMTC4gIFRoZSBy ZXR1cm5lZCByZWZlcmVuY2UgdG8gdGhlIEJGRCBtdXN0IGJlCistICAgcmVsZWFzZWQgYnkgdGhl IGNhbGxlci4gICovCistCistZXh0ZXJuIGdkYl9iZmRfcmVmX3B0ciBidWlsZF9pZF90b19leGVj X2JmZCAoc2l6ZV90IGJ1aWxkX2lkX2xlbiwKKy0JCQkJCSAgICAgY29uc3QgYmZkX2J5dGUgKmJ1 aWxkX2lkKTsKKy0KKyAvKiBGaW5kIHRoZSBzZXBhcmF0ZSBkZWJ1ZyBmaWxlIGZvciBPQkpGSUxF LCBieSB1c2luZyB0aGUgYnVpbGQtaWQKKyAgICBhc3NvY2lhdGVkIHdpdGggT0JKRklMRSdzIEJG RC4gIElmIHN1Y2Nlc3NmdWwsIHJldHVybnMgdGhlIGZpbGUgbmFtZSBmb3IgdGhlCisgICAgc2Vw YXJhdGUgZGVidWcgZmlsZSwgb3RoZXJ3aXNlLCByZXR1cm4gYW4gZW1wdHkgc3RyaW5nLgorQEAg LTYwLDYgKzUzLDIyIEBAIGV4dGVybiBnZGJfYmZkX3JlZl9wdHIgYnVpbGRfaWRfdG9fZXhlY19i ZmQgKHNpemVfdCBidWlsZF9pZF9sZW4sCisgZXh0ZXJuIHN0ZDo6c3RyaW5nIGZpbmRfc2VwYXJh dGVfZGVidWdfZmlsZV9ieV9idWlsZGlkCisgICAoc3RydWN0IG9iamZpbGUgKm9iamZpbGUsIGRl ZmVycmVkX3dhcm5pbmdzICp3YXJuaW5ncyk7CisgCisrLyogRmluZCBhbiBvYmpmaWxlIChleGVj dXRhYmxlIG9yIHNoYXJlZCBsaWJyYXJ5KSB0aGF0IG1hdGNoZXMgQlVJTERfSUQuCisrICAgVGhp cyBpcyBkb25lIGJ5IGZpcnN0IGNoZWNraW5nIGluIHRoZSBkZWJ1Zy1maWxlLWRpcmVjdG9yeSBm b3IgYQorKyAgIHN1aXRhYmxlIC5idWlsZC1pZC8gc3ViLWRpcmVjdG9yeSwgYW5kIGxvb2tpbmcg Zm9yIGEgZmlsZSB3aXRoIHRoZQorKyAgIHJlcXVpcmVkIGJ1aWxkLWlkICh1c3VhbGx5IGEgc3lt Ym9saWMgbGluayBvciBoYXJkIGxpbmsgdG8gdGhlIGFjdHVhbAorKyAgIGZpbGUpLgorKworKyAg IElmIHRoYXQgZG9lc24ndCBmaW5kIHVzIGEgZmlsZSB0aGVuIHdlIGNhbGwgdG8gZGVidWdpbmZv ZCB0byBzZWUgaWYgaXQKKysgICBjYW4gcHJvdmlkZSB0aGUgcmVxdWlyZWQgZmlsZS4KKysKKysg ICBFWFBFQ1RFRF9GSUxFTkFNRSBpcyB1c2VkIGluIG91dHB1dCBtZXNzYWdlcyBmcm9tIGRlYnVn aW5mb2QsIHRoaXMKKysgICBzaG91bGQgYmUgdGhlIGZpbGUgd2Ugd2VyZSBsb29raW5nIGZvciBi dXQgY291bGRuJ3QgZmluZC4gICovCisrCisrZXh0ZXJuIGdkYl9iZmRfcmVmX3B0ciBmaW5kX29i amZpbGVfYnlfYnVpbGRfaWQKKysgIChzdHJ1Y3QgcHJvZ3JhbV9zcGFjZSAqcHNwYWNlLCBjb25z dCBiZmRfYnVpbGRfaWQgKmJ1aWxkX2lkLAorKyAgIGNvbnN0IGNoYXIgKmV4cGVjdGVkX2ZpbGVu YW1lKTsKKysKKyAvKiBSZXR1cm4gYW4gaGV4LXN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBCVUlM RF9JRC4gICovCisgCisgc3RhdGljIGlubGluZSBzdGQ6OnN0cmluZworZGlmZiAtLWdpdCBhL2dk Yi9jb3JlbG93LmMgYi9nZGIvY29yZWxvdy5jCistLS0gYS9nZGIvY29yZWxvdy5jCisrKysgYi9n ZGIvY29yZWxvdy5jCitAQCAtNDcsMTcgKzQ3LDEzMCBAQAorICNpbmNsdWRlICJnZGJzdXBwb3J0 L3BhdGhzdHVmZi5oIgorICNpbmNsdWRlICJnZGJzdXBwb3J0L3Njb3BlZF9mZC5oIgorICNpbmNs dWRlICJnZGJzdXBwb3J0L3g4Ni14c3RhdGUuaCIKKy0jaW5jbHVkZSAiZGVidWdpbmZvZC1zdXBw b3J0LmgiCisgI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CisgI2luY2x1ZGUgPHVub3JkZXJlZF9z ZXQ+CisgI2luY2x1ZGUgImNsaS9jbGktY21kcy5oIgorICNpbmNsdWRlICJ4bWwtdGRlc2MuaCIK KyAjaW5jbHVkZSAibWVtdGFnLmgiCisrI2luY2x1ZGUgImNsaS9jbGktc3R5bGUuaCIKKyAKKyAj aWZuZGVmIE9fTEFSR0VGSUxFCisgI2RlZmluZSBPX0xBUkdFRklMRSAwCisgI2VuZGlmCisgCisr LyogQSBtZW1fcmFuZ2UgYW5kIHRoZSBidWlsZC1pZCBhc3NvY2lhdGVkIHdpdGggdGhlIGZpbGUg bWFwcGVkIGludG8gdGhlCisrICAgZ2l2ZW4gcmFuZ2UuICAqLworKworK3N0cnVjdCBtZW1fcmFu Z2VfYW5kX2J1aWxkX2lkCisreworKyAgbWVtX3JhbmdlX2FuZF9idWlsZF9pZCAobWVtX3Jhbmdl ICYmciwgY29uc3QgYmZkX2J1aWxkX2lkICppZCkKKysgICAgOiByYW5nZSAociksCisrICAgICAg YnVpbGRfaWQgKGlkKQorKyAgeyAvKiBOb3RoaW5nLiAgKi8gfQorKworKyAgLyogQSByYW5nZSBv ZiBtZW1vcnkgYWRkcmVzc2VzLiAgKi8KKysgIG1lbV9yYW5nZSByYW5nZTsKKysKKysgIC8qIFRo ZSBidWlsZC1pZCBvZiB0aGUgZmlsZSBtYXBwZWQgaW50byBSQU5HRS4gICovCisrICBjb25zdCBi ZmRfYnVpbGRfaWQgKmJ1aWxkX2lkOworK307CisrCisrLyogQW4gaW5zdGFuY2Ugb2YgdGhpcyBj bGFzcyBpcyBjcmVhdGVkIHdpdGhpbiB0aGUgY29yZV90YXJnZXQgYW5kIGlzIHVzZWQKKysgICB0 byBob2xkIGFsbCB0aGUgaW5mb3JtYXRpb24gdGhhdCByZWxhdGluZyB0byBtYXBwZWQgZmlsZXMs IHRoZWlyIGFkZHJlc3MKKysgICByYW5nZXMsIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIGJ1aWxk LWlkcy4gICovCisrCisrc3RydWN0IG1hcHBlZF9maWxlX2luZm8KKyt7CisrICAvKiBTZWUgY29t bWVudCBvbiBmdW5jdGlvbiBkZWZpbml0aW9uLiAgKi8KKysKKysgIHZvaWQgYWRkIChjb25zdCBj aGFyICpzb25hbWUsIGNvbnN0IGNoYXIgKmV4cGVjdGVkX2ZpbGVuYW1lLAorKwkgICAgY29uc3Qg Y2hhciAqYWN0dWFsX2ZpbGVuYW1lLCBzdGQ6OnZlY3RvcjxtZW1fcmFuZ2U+ICYmcmFuZ2VzLAor KwkgICAgY29uc3QgYmZkX2J1aWxkX2lkICpidWlsZF9pZCk7CisrCisrICAvKiBTZWUgY29tbWVu dCBvbiBmdW5jdGlvbiBkZWZpbml0aW9uLiAgKi8KKysKKysgIHN0ZDo6b3B0aW9uYWwgPGNvcmVf dGFyZ2V0X21hcHBlZF9maWxlX2luZm8+CisrICBsb29rdXAgKGNvbnN0IGNoYXIgKmZpbGVuYW1l LCBjb25zdCBzdGQ6Om9wdGlvbmFsPENPUkVfQUREUj4gJmFkZHIpOworKworK3ByaXZhdGU6Cisr CisrICAvKiBIZWxwZXIgZm9yIDo6bG9va3VwLiAgQlVJTERfSUQgaXMgYSBidWlsZC1pZCB0aGF0 IHdhcyBmb3VuZCBpbgorKyAgICAgb25lIG9mIHRoZSBkYXRhIHN0cnVjdHVyZXMgd2l0aGluIHRo aXMgY2xhc3MuICBMb29rdXAgdGhlCisrICAgICBjb3JyZXNwb25kaW5nIGZpbGVuYW1lIGluIG1f YnVpbGRfaWRfdG9fZmlsZW5hbWVfbWFwIGFuZCByZXR1cm4gYSBwYWlyCisrICAgICBjb250YWlu aW5nIHRoZSBidWlsZC1pZCBhbmQgZmlsZW5hbWUuCisrCisrICAgICBJZiBubyBjb3JyZXNwb25k aW5nIGZpbGVuYW1lIGlzIGZvdW5kIGluIG1fYnVpbGRfaWRfdG9fZmlsZW5hbWVfbWFwCisrICAg ICB0aGVuIHRoZSByZXR1cm5lZCBwYWlyIGNvbnRhaW5zIEJVSUxEX0lEIGFuZCBhbiBlbXB0eSBz dHJpbmcuCisrCisrICAgICBJZiBCVUlMRF9JRCBpcyBudWxscHRyIHRoZW4gdGhlIHJldHVybmVk IHBhaXIgY29udGFpbnMgbnVsbHB0ciBhbmQgYW4KKysgICAgIGVtcHR5IHN0cmluZy4gICovCisr CisrICBzdHJ1Y3QgY29yZV90YXJnZXRfbWFwcGVkX2ZpbGVfaW5mbworKyAgbWFrZV9yZXN1bHQg KGNvbnN0IGJmZF9idWlsZF9pZCAqYnVpbGRfaWQpCisrICB7CisrICAgIGlmIChidWlsZF9pZCAh PSBudWxscHRyKQorKyAgICAgIHsKKysgICAgICBhdXRvIGl0ID0gbV9idWlsZF9pZF90b19maWxl bmFtZV9tYXAuZmluZCAoYnVpbGRfaWQpOworKyAgICAgIGlmIChpdCAhPSBtX2J1aWxkX2lkX3Rv X2ZpbGVuYW1lX21hcC5lbmQgKCkpCisrCXJldHVybiB7IGJ1aWxkX2lkLCBpdC0+c2Vjb25kIH07 CisrICAgIH0KKysKKysgICAgcmV0dXJuIHsgYnVpbGRfaWQsIHt9IH07CisrICB9CisrCisrICAv KiBBIHR5cGUgdGhhdCBtYXBzIGEgc3RyaW5nIHRvIGEgYnVpbGQtaWQuICAqLworKyAgdXNpbmcg c3RyaW5nX3RvX2J1aWxkX2lkX21hcAorKyAgICA9IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0 cmluZywgY29uc3QgYmZkX2J1aWxkX2lkICo+OworKworKyAgLyogQSB0eXBlIHRoYXQgbWFwcyBh IGJ1aWxkLWlkIHRvIGEgc3RyaW5nLiAgKi8KKysgIHVzaW5nIGJ1aWxkX2lkX3RvX3N0cmluZ19t YXAKKysgICAgPSBzdGQ6OnVub3JkZXJlZF9tYXA8Y29uc3QgYmZkX2J1aWxkX2lkICosIHN0ZDo6 c3RyaW5nPjsKKysKKysgIC8qIFdoZW4gbG9hZGluZyBhIGNvcmUgZmlsZSwgdGhlIGJ1aWxkLWlk cyBhcmUgZXh0cmFjdGVkIGJhc2VkIG9uIHRoZQorKyAgICAgZmlsZSBiYWNrZWQgbWFwcGluZ3Mu ICBUaGlzIG1hcCBhc3NvY2lhdGVzIHRoZSBuYW1lIG9mIGEgZmlsZSB0aGF0IHdhcworKyAgICAg bWFwcGVkIGludG8gdGhlIGNvcmUgZmlsZSB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIGJ1aWxkLWlk LiAgVGhlCisrICAgICBidWlsZC1pZCBwb2ludGVycyBpbiB0aGlzIG1hcCB3aWxsIG5ldmVyIGJl IG51bGxwdHIgYXMgd2Ugb25seSByZWNvcmQKKysgICAgIGZpbGVzIGlmIHRoZXkgaGF2ZSBhIGJ1 aWxkLWlkLiAgKi8KKysKKysgIHN0cmluZ190b19idWlsZF9pZF9tYXAgbV9maWxlbmFtZV90b19i dWlsZF9pZF9tYXA7CisrCisrICAvKiBNYXAgYSBidWlsZC1pZCBwb2ludGVyIGJhY2sgdG8gdGhl IG5hbWUgb2YgdGhlIGZpbGUgdGhhdCB3YXMgbWFwcGVkCisrICAgICBpbnRvIHRoZSBpbmZlcmlv cidzIGFkZHJlc3Mgc3BhY2UuICBJZiB3ZSBsb29rdXAgYSBtYXRjaGluZyBidWlsZC1pZAorKyAg ICAgdXNpbmcgZWl0aGVyIGEgc29uYW1lIG9yIGFuIGFkZHJlc3MgdGhlbiB0aGlzIG1hcCBhbGxv d3MgdXMgdG8gYWxzbworKyAgICAgcHJvdmlkZSBhIGZ1bGwgcGF0aCB0byBhIGZpbGUgd2l0aCBh IG1hdGNoaW5nIGJ1aWxkLWlkLiAgKi8KKysKKysgIGJ1aWxkX2lkX3RvX3N0cmluZ19tYXAgbV9i dWlsZF9pZF90b19maWxlbmFtZV9tYXA7CisrCisrICAvKiBJZiB0aGUgZmlsZSB0aGF0IHdhcyBt YXBwZWQgaW50byB0aGUgY29yZSBmaWxlIHdhcyBhIHNoYXJlZCBsaWJyYXJ5CisrICAgICB0aGVu IGl0IG1pZ2h0IGhhdmUgYSBEVF9TT05BTUUgdGFnIGluIGl0cyAuZHluYW1pYyBzZWN0aW9uLCB0 aGlzIHRhZworKyAgICAgY29udGFpbnMgdGhlIG5hbWUgb2YgYSBzaGFyZWQgb2JqZWN0LiAgV2hl biBvcGVuaW5nIGEgc2hhcmVkIGxpYnJhcnksCisrICAgICBpZiBpdCdzIGJhc2VuYW1lIGFwcGVh cnMgaW4gdGhpcyBtYXAgdGhlbiB3ZSBjYW4gdXNlIHRoZSBjb3JyZXNwb25kaW5nCisrICAgICBi dWlsZC1pZC4KKysKKysgICAgIEluIHRoZSByYXJlIGNhc2UgdGhhdCB0d28gZGlmZmVyZW50IGZp bGVzIGhhdmUgdGhlIHNhbWUgRFRfU09OQU1FCisrICAgICB2YWx1ZSB0aGVuIHRoZSBidWlsZC1p ZCBwb2ludGVyIGluIHRoaXMgbWFwIHdpbGwgYmUgbnVsbHB0ciwgdGhpcworKyAgICAgaW5kaWNh dGVzIHRoYXQgaXQncyBub3QgcG9zc2libGUgdG8gZmluZCBhIGJ1aWxkLWlkIGJhc2VkIG9uIHRo ZSBnaXZlbgorKyAgICAgRFRfU09OQU1FIHZhbHVlLiAgKi8KKysKKysgIHN0cmluZ190b19idWls ZF9pZF9tYXAgbV9zb25hbWVfdG9fYnVpbGRfaWRfbWFwOworKworKyAgLyogVGhpcyB2ZWN0b3Ig bWFwcyBtZW1vcnkgcmFuZ2VzIG9udG8gYW4gYXNzb2NpYXRlZCBidWlsZC1pZC4gIFRoZQorKyAg ICAgcmFuZ2VzIGFyZSB0aG9zZSBvZiB0aGUgZmlsZXMgbWFwcGVkIGludG8gdGhlIGNvcmUgZmls ZS4KKysKKysgICAgIEVudHJpZXMgaW4gdGhpcyB2ZWN0b3IgbXVzdCBub3Qgb3ZlcmxhcCwgYW5k IGFyZSBzb3J0ZWQgYmUgaW5jcmVhc2luZworKyAgICAgbWVtb3J5IGFkZHJlc3MuICBXaXRoaW4g ZWFjaCBlbnRyeSB0aGUgYnVpbGQtaWQgcG9pbnRlciB3aWxsIG5vdCBiZQorKyAgICAgbnVsbHB0 ci4KKysKKysgICAgIFdoaWxlIGJ1aWxkaW5nIHRoaXMgdmVjdG9yIHRoZSBlbnRyaWVzIGFyZSBu b3Qgc29ydGVkLCB0aGV5IGFyZQorKyAgICAgc29ydGVkIG9uY2UgYWZ0ZXIgdGhlIHRhYmxlIGhh cyBmaW5pc2hlZCBiZWluZyBidWlsdC4gICovCisrCisrICBzdGQ6OnZlY3RvcjxtZW1fcmFuZ2Vf YW5kX2J1aWxkX2lkPiBtX2FkZHJlc3NfdG9fYnVpbGRfaWRfbGlzdDsKKysKKysgIC8qIEZhbHNl IGlmIGFkZHJlc3NfdG9fYnVpbGRfaWRfbGlzdCBpcyB1bnNvcnRlZCwgb3RoZXJ3aXNlIHRydWUu ICAqLworKworKyAgYm9vbCBtX2FkZHJlc3NfdG9fYnVpbGRfaWRfbGlzdF9zb3J0ZWQgPSBmYWxz ZTsKKyt9OworKworIC8qIFRoZSBjb3JlIGZpbGUgdGFyZ2V0LiAgKi8KKyAKKyBzdGF0aWMgY29u c3QgdGFyZ2V0X2luZm8gY29yZV90YXJnZXRfaW5mbyA9IHsKK0BAIC0xMzQsNiArMjQ3LDM0IEBA IGNsYXNzIGNvcmVfdGFyZ2V0IGZpbmFsIDogcHVibGljIHByb2Nlc3Nfc3RyYXR1bV90YXJnZXQK KyAgIC8qIFNlZSBkZWZpbml0aW9uLiAgKi8KKyAgIHZvaWQgaW5mb19wcm9jX21hcHBpbmdzIChz dHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCk7CisgCisrICBzdGQ6Om9wdGlvbmFsIDxjb3JlX3Rhcmdl dF9tYXBwZWRfZmlsZV9pbmZvPgorKyAgbG9va3VwX21hcHBlZF9maWxlX2luZm8gKGNvbnN0IGNo YXIgKmZpbGVuYW1lLAorKwkJCSAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8Q09SRV9BRERSPiAmYWRk cikKKysgIHsKKysgICAgcmV0dXJuIG1fbWFwcGVkX2ZpbGVfaW5mby5sb29rdXAgKGZpbGVuYW1l LCBhZGRyKTsKKysgIH0KKysKKysgIC8qIFJldHVybiBhIHN0cmluZyBjb250YWluaW5nIHRoZSBl eHBlY3RlZCBleGVjdXRhYmxlIGZpbGVuYW1lIG9idGFpbmVkCisrICAgICBmcm9tIHRoZSBtYXBw ZWQgZmlsZSBpbmZvcm1hdGlvbiB3aXRoaW4gdGhlIGNvcmUgZmlsZS4gIFRoZSBmaWxlbmFtZQor KyAgICAgcmV0dXJuZWQgd2lsbCBiZSBmb3IgdGhlIG1hcHBlZCBmaWxlIHdob3NlIEVMRiBoZWFk ZXJzIGFyZSBtYXBwZWQgYXQKKysgICAgIHRoZSBsb3dlc3QgYWRkcmVzcyAoaS5lLiB3aGljaCBH REIgZW5jb3VudGVycyBmaXJzdCkuCisrCisrICAgICBJZiBubyBzdWl0YWJsZSBmaWxlbmFtZSBj YW4gYmUgZm91bmQgdGhlbiB0aGUgcmV0dXJuZWQgc3RyaW5nIHdpbGwgYmUKKysgICAgIGVtcHR5 LgorKworKyAgICAgSWYgdGhlcmUgYXJlIG5vIGJ1aWxkLWlkcyBlbWJlZGRlZCBpbnRvIHRoZSBj b3JlIGZpbGUgdGhlbiB0aGUKKysgICAgIHJldHVybmVkIHN0cmluZyB3aWxsIGJlIGVtcHR5Lgor KworKyAgICAgSWYgYSBub24tZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkIHRoZW4gdGhlcmUgaXMg bm8gZ3VhcmFudGVlIHRoYXQgdGhlCisrICAgICBuYW1lZCBmaWxlIGV4aXN0cyBvbiBkaXNrLCBv ciBpZiBpdCBkb2VzIGV4aXN0IG9uIGRpc2ssIHRoZW4gdGhlCisrICAgICBvbi1kaXNrIGZpbGUg bWlnaHQgaGF2ZSBhIGRpZmZlcmVudCBidWlsZC1pZCB0byB0aGUgZGVzaXJlZAorKyAgICAgYnVp bGQtaWQuICAqLworKyAgY29uc3Qgc3RkOjpzdHJpbmcgJgorKyAgZXhwZWN0ZWRfZXhlY19maWxl bmFtZSAoKSBjb25zdAorKyAgeworKyAgICByZXR1cm4gbV9leHBlY3RlZF9leGVjX2ZpbGVuYW1l OworKyAgfQorKworIHByaXZhdGU6IC8qIHBlci1jb3JlIGRhdGEgKi8KKyAKKyAgIC8qIEdldCBy aWQgb2YgdGhlIGNvcmUgaW5mZXJpb3IuICAqLworQEAgLTE1NiwxOSArMjk3LDIzIEBAIGNsYXNz IGNvcmVfdGFyZ2V0IGZpbmFsIDogcHVibGljIHByb2Nlc3Nfc3RyYXR1bV90YXJnZXQKKyAgICAg IHN0aWxsIGJlIHVzZWZ1bC4gICovCisgICBzdGQ6OnZlY3RvcjxtZW1fcmFuZ2U+IG1fY29yZV91 bmF2YWlsYWJsZV9tYXBwaW5nczsKKyAKKy0gIC8qIEJ1aWxkIG1fY29yZV9maWxlX21hcHBpbmdz LiAgQ2FsbGVkIGZyb20gdGhlIGNvbnN0cnVjdG9yLiAgKi8KKy0gIHZvaWQgYnVpbGRfZmlsZV9t YXBwaW5ncyAoKTsKKysgIC8qIERhdGEgc3RydWN0dXJlIHRoYXQgaG9sZHMgaW5mb3JtYXRpb24g bWFwcGluZyBmaWxlbmFtZXMgYW5kIGFkZHJlc3MKKysgICAgIHJhbmdlcyB0byB0aGUgY29ycmVz cG9uZGluZyBidWlsZC1pZHMgYXMgd2VsbCBhcyB0aGUgcmV2ZXJzZSBidWlsZC1pZAorKyAgICAg dG8gZmlsZW5hbWUgbWFwcGluZy4gICovCisrICBtYXBwZWRfZmlsZV9pbmZvIG1fbWFwcGVkX2Zp bGVfaW5mbzsKKyAKKy0gIC8qIEhlbHBlciBtZXRob2QgZm9yIHhmZXJfcGFydGlhbC4gICovCist ICBlbnVtIHRhcmdldF94ZmVyX3N0YXR1cyB4ZmVyX21lbW9yeV92aWFfbWFwcGluZ3MgKGdkYl9i eXRlICpyZWFkYnVmLAorLQkJCQkJCSAgICBjb25zdCBnZGJfYnl0ZSAqd3JpdGVidWYsCistCQkJ CQkJICAgIFVMT05HRVNUIG9mZnNldCwKKy0JCQkJCQkgICAgVUxPTkdFU1QgbGVuLAorLQkJCQkJ CSAgICBVTE9OR0VTVCAqeGZlcmVkX2xlbik7CisrICAvKiBCdWlsZCBtX2NvcmVfZmlsZV9tYXBw aW5ncyBhbmQgbV9tYXBwZWRfZmlsZV9pbmZvLiAgQ2FsbGVkIGZyb20gdGhlCisrICAgICBjb25z dHJ1Y3Rvci4gICovCisrICB2b2lkIGJ1aWxkX2ZpbGVfbWFwcGluZ3MgKCk7CisgCisgICAvKiBG SVhNRToga2V0dGVuaXMvMjAwMzEwMjM6IEV2ZW50dWFsbHkgdGhpcyBmaWVsZCBzaG91bGQKKyAg ICAgIGRpc2FwcGVhci4gICovCisgICBzdHJ1Y3QgZ2RiYXJjaCAqbV9jb3JlX2dkYmFyY2ggPSBO VUxMOworKworKyAgLyogSWYgbm90IGVtcHR5IHRoZW4gdGhpcyBjb250YWlucyB0aGUgbmFtZSBv ZiB0aGUgZXhlY3V0YWJsZSBkaXNjb3ZlcmVkCisrICAgICB3aGVuIHByb2Nlc3NpbmcgdGhlIG1l bW9yeS1tYXBwZWQgZmlsZSBpbmZvcm1hdGlvbi4gIFRoaXMgd2lsbCBvbmx5CisrICAgICBiZSBz ZXQgaWYgd2UgZmluZCBhIG1hcHBlZCB3aXRoIGEgc3VpdGFibGUgYnVpbGQtaWQuICAqLworKyAg c3RkOjpzdHJpbmcgbV9leHBlY3RlZF9leGVjX2ZpbGVuYW1lOworIH07CisgCisgY29yZV90YXJn ZXQ6OmNvcmVfdGFyZ2V0ICgpCitAQCAtMjE2LDkgKzM2MSw1MSBAQCBjb3JlX3RhcmdldDo6Y29y ZV90YXJnZXQgKCkKKyB2b2lkCisgY29yZV90YXJnZXQ6OmJ1aWxkX2ZpbGVfbWFwcGluZ3MgKCkK KyB7CisrICAvKiBUeXBlIGhvbGRpbmcgaW5mb3JtYXRpb24gYWJvdXQgYSBzaW5nbGUgZmlsZSBt YXBwZWQgaW50byB0aGUgaW5mZXJpb3IKKysgICAgIGF0IHRoZSBwb2ludCB3aGVuIHRoZSBjb3Jl IGZpbGUgd2FzIGNyZWF0ZWQuICBBc3NvY2lhdGVzIGEgYnVpbGQtaWQKKysgICAgIHdpdGggdGhl IGxpc3Qgb2YgcmVnaW9ucyB0aGUgZmlsZSBpcyBtYXBwZWQgaW50by4gICovCisrICBzdHJ1Y3Qg bWFwcGVkX2ZpbGUKKysgIHsKKysgICAgLyogVHlwZSBmb3IgYSByZWdpb24gb2YgYSBmaWxlIHRo YXQgd2FzIG1hcHBlZCBpbnRvIHRoZSBpbmZlcmlvciB3aGVuCisrICAgICAgIHRoZSBjb3JlIGZp bGUgd2FzIGdlbmVyYXRlZC4gICovCisrICAgIHN0cnVjdCByZWdpb24KKysgICAgeworKyAgICAg IC8qIENvbnN0cnVjdG9yLiAgIFNlZSBtZW1iZXIgdmFyaWFibGVzIGZvciBhcmd1bWVudCBkZXNj cmlwdGlvbnMuICAqLworKyAgICAgIHJlZ2lvbiAoQ09SRV9BRERSIHN0YXJ0XywgQ09SRV9BRERS IGVuZF8sIENPUkVfQUREUiBmaWxlX29mc18pCisrCTogc3RhcnQgKHN0YXJ0XyksCisrCSAgZW5k IChlbmRfKSwKKysJICBmaWxlX29mcyAoZmlsZV9vZnNfKQorKyAgICAgIHsgLyogTm90aGluZy4g ICovIH0KKysKKysgICAgICAvKiBUaGUgaW5mZXJpb3IgYWRkcmVzcyBmb3IgdGhlIHN0YXJ0IG9m IHRoZSBtYXBwZWQgcmVnaW9uLiAgKi8KKysgICAgICBDT1JFX0FERFIgc3RhcnQ7CisrCisrICAg ICAgLyogVGhlIGluZmVyaW9yIGFkZHJlc3MgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIG1hcHBlZCBy ZWdpb24uICAqLworKyAgICAgIENPUkVfQUREUiBlbmQ7CisrCisrICAgICAgLyogVGhlIG9mZnNl dCB3aXRoaW4gdGhlIG1hcHBlZCBmaWxlIGZvciB0aGlzIGNvbnRlbnQuICAqLworKyAgICAgIENP UkVfQUREUiBmaWxlX29mczsKKysgICAgfTsKKysKKysgICAgLyogSWYgbm90IG51bGxwdHIsIHRo ZW4gdGhpcyBpcyB0aGUgYnVpbGQtaWQgYXNzb2NpYXRlZCB3aXRoIHRoaXMKKysgICAgICAgZmls ZS4gICovCisrICAgIGNvbnN0IGJmZF9idWlsZF9pZCAqYnVpbGRfaWQgPSBudWxscHRyOworKwor KyAgICAvKiBJZiB0cnVlIHRoZW4gd2UgaGF2ZSBzZWVuIG11bHRpcGxlIGRpZmZlcmVudCBidWls ZC1pZHMgYXNzb2NpYXRlZAorKyAgICAgICB3aXRoIHRoZSBzYW1lIGZpbGVuYW1lLiAgVGhlIGJ1 aWxkX2lkIGZpZWxkIHdpbGwgaGF2ZSBiZWVuIHNldCBiYWNrCisrICAgICAgIHRvIG51bGxwdHIs IGFuZCB3ZSBzaG91bGQgbm90IHNldCBidWlsZF9pZCBpbiBmdXR1cmUuICAqLworKyAgICBib29s IGlnbm9yZV9idWlsZF9pZF9wID0gZmFsc2U7CisrCisrICAgIC8qIEFsbCB0aGUgbWFwcGVkIHJl Z2lvbnMgb2YgdGhpcyBmaWxlLiAgKi8KKysgICAgc3RkOjp2ZWN0b3I8cmVnaW9uPiByZWdpb25z OworKyAgfTsKKysKKyAgIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgc3RydWN0IGJm ZCAqPiBiZmRfbWFwOworICAgc3RkOjp1bm9yZGVyZWRfc2V0PHN0ZDo6c3RyaW5nPiB1bmF2YWls YWJsZV9wYXRoczsKKyAKKysgIC8qIEFsbCBmaWxlcyBtYXBwZWQgaW50byB0aGUgY29yZSBmaWxl LiAgVGhlIGtleSBpcyB0aGUgZmlsZW5hbWUuICAqLworKyAgc3RkOjp1bm9yZGVyZWRfbWFwPHN0 ZDo6c3RyaW5nLCBtYXBwZWRfZmlsZT4gbWFwcGVkX2ZpbGVzOworKworICAgLyogU2VlIGxpbnV4 X3JlYWRfY29yZV9maWxlX21hcHBpbmdzKCkgaW4gbGludXgtdGRlcC5jIGZvciBhbiBleGFtcGxl CisgICAgICByZWFkX2NvcmVfZmlsZV9tYXBwaW5ncyBtZXRob2QuICAqLworICAgZ2RiYXJjaF9y ZWFkX2NvcmVfZmlsZV9tYXBwaW5ncyAobV9jb3JlX2dkYmFyY2gsCitAQCAtMjM5LDg3ICs0MjYs MjA2IEBAIGNvcmVfdGFyZ2V0OjpidWlsZF9maWxlX21hcHBpbmdzICgpCisgCSAgIHdlZWQgb3V0 IG5vbi1maWxlLWJhY2tlZCBtYXBwaW5ncy4gICovCisgCWdkYl9hc3NlcnQgKGZpbGVuYW1lICE9 IG51bGxwdHIpOworIAorLQlpZiAodW5hdmFpbGFibGVfcGF0aHMuZmluZCAoZmlsZW5hbWUpICE9 IHVuYXZhaWxhYmxlX3BhdGhzLmVuZCAoKSkKKy0JICB7CistCSAgICAvKiBXZSBoYXZlIGFscmVh ZHkgc2VlbiBzb21lIG1hcHBpbmcgZm9yIEZJTEVOQU1FIGJ1dCBmYWlsZWQgdG8KKy0JICAgICAg IGZpbmQvb3BlbiB0aGUgZmlsZS4gIFRoZXJlIGlzIG5vIHBvaW50IGluIHRyeWluZyB0aGUgc2Ft ZQorLQkgICAgICAgdGhpbmcgYWdhaW4gc28ganVzdCByZWNvcmQgdGhhdCB0aGUgcmFuZ2UgW3N0 YXJ0LCBlbmQpIGlzCistCSAgICAgICB1bmF2YWlsYWJsZS4gICovCistCSAgICBtX2NvcmVfdW5h dmFpbGFibGVfbWFwcGluZ3MuZW1wbGFjZV9iYWNrIChzdGFydCwgZW5kIC0gc3RhcnQpOworLQkg ICAgcmV0dXJuOworLQkgIH0KKy0KKy0Jc3RydWN0IGJmZCAqYmZkID0gYmZkX21hcFtmaWxlbmFt ZV07CistCWlmIChiZmQgPT0gbnVsbHB0cikKKysJLyogQWRkIHRoaXMgbWFwcGVkIHJlZ2lvbiB0 byB0aGUgZGF0YSBmb3IgRklMRU5BTUUuICAqLworKwltYXBwZWRfZmlsZSAmZmlsZV9kYXRhID0g bWFwcGVkX2ZpbGVzW2ZpbGVuYW1lXTsKKysJZmlsZV9kYXRhLnJlZ2lvbnMuZW1wbGFjZV9iYWNr IChzdGFydCwgZW5kLCBmaWxlX29mcyk7CisrCWlmIChidWlsZF9pZCAhPSBudWxscHRyICYmICFm aWxlX2RhdGEuaWdub3JlX2J1aWxkX2lkX3ApCisgCSAgeworLQkgICAgLyogVXNlIGV4ZWNfZmls ZV9maW5kKCkgdG8gZG8gc3lzcm9vdCBleHBhbnNpb24uICBJdCdsbAorLQkgICAgICAgYWxzbyBz dHJpcCB0aGUgcG90ZW50aWFsIHN5c3Jvb3QgInRhcmdldDoiIHByZWZpeC4gIElmCistCSAgICAg ICB0aGVyZSBpcyBubyBzeXNyb290LCBhbiBlcXVpdmFsZW50IChwb3NzaWJseSBtb3JlCistCSAg ICAgICBjYW5vbmljYWwpIHBhdGhuYW1lIHdpbGwgYmUgcHJvdmlkZWQuICAqLworLQkgICAgZ2Ri Ojp1bmlxdWVfeG1hbGxvY19wdHI8Y2hhcj4gZXhwYW5kZWRfZm5hbWUKKy0JICAgICAgPSBleGVj X2ZpbGVfZmluZCAoZmlsZW5hbWUsIE5VTEwpOworLQorLQkgICAgaWYgKGV4cGFuZGVkX2ZuYW1l ID09IG51bGxwdHIgJiYgYnVpbGRfaWQgIT0gbnVsbHB0cikKKy0JICAgICAgZGVidWdpbmZvZF9l eGVjX3F1ZXJ5IChidWlsZF9pZC0+ZGF0YSwgYnVpbGRfaWQtPnNpemUsCistCQkJCSAgICAgZmls ZW5hbWUsICZleHBhbmRlZF9mbmFtZSk7CistCistCSAgICBpZiAoZXhwYW5kZWRfZm5hbWUgPT0g bnVsbHB0cikKKysJICAgIGlmIChmaWxlX2RhdGEuYnVpbGRfaWQgPT0gbnVsbHB0cikKKysJICAg ICAgZmlsZV9kYXRhLmJ1aWxkX2lkID0gYnVpbGRfaWQ7CisrCSAgICBlbHNlIGlmICghYnVpbGRf aWRfZXF1YWwgKGJ1aWxkX2lkLCBmaWxlX2RhdGEuYnVpbGRfaWQpKQorIAkgICAgICB7CistCQlt X2NvcmVfdW5hdmFpbGFibGVfbWFwcGluZ3MuZW1wbGFjZV9iYWNrIChzdGFydCwgZW5kIC0gc3Rh cnQpOworLQkJdW5hdmFpbGFibGVfcGF0aHMuaW5zZXJ0IChmaWxlbmFtZSk7CistCQl3YXJuaW5n IChfKCJDYW4ndCBvcGVuIGZpbGUgJXMgZHVyaW5nIGZpbGUtYmFja2VkIG1hcHBpbmcgIgorLQkJ CSAgICJub3RlIHByb2Nlc3NpbmciKSwKKy0JCQkgZmlsZW5hbWUpOworLQkJcmV0dXJuOworKwkJ d2FybmluZyAoXygiTXVsdGlwbGUgYnVpbGQtaWRzIGZvdW5kIGZvciAlcHMiKSwKKysJCQkgc3R5 bGVkX3N0cmluZyAoZmlsZV9uYW1lX3N0eWxlLnN0eWxlICgpLCBmaWxlbmFtZSkpOworKwkJZmls ZV9kYXRhLmJ1aWxkX2lkID0gbnVsbHB0cjsKKysJCWZpbGVfZGF0YS5pZ25vcmVfYnVpbGRfaWRf cCA9IHRydWU7CisgCSAgICAgIH0KKysJICB9CisrICAgICAgfSk7CisgCistCSAgICBiZmQgPSBi ZmRfb3BlbnIgKGV4cGFuZGVkX2ZuYW1lLmdldCAoKSwgImJpbmFyeSIpOworKyAgLyogR2V0IHRo ZSBidWlsZC1pZCBvZiB0aGUgY29yZSBmaWxlLiAgKi8KKysgIGNvbnN0IGJmZF9idWlsZF9pZCAq Y29yZV9idWlsZF9pZAorKyAgICA9IGJ1aWxkX2lkX2JmZF9nZXQgKGN1cnJlbnRfcHJvZ3JhbV9z cGFjZS0+Y29yZV9iZmQgKCkpOworIAorLQkgICAgaWYgKGJmZCA9PSBudWxscHRyIHx8ICFiZmRf Y2hlY2tfZm9ybWF0IChiZmQsIGJmZF9vYmplY3QpKQorLQkgICAgICB7CistCQltX2NvcmVfdW5h dmFpbGFibGVfbWFwcGluZ3MuZW1wbGFjZV9iYWNrIChzdGFydCwgZW5kIC0gc3RhcnQpOworLQkJ dW5hdmFpbGFibGVfcGF0aHMuaW5zZXJ0IChmaWxlbmFtZSk7CistCQl3YXJuaW5nIChfKCJDYW4n dCBvcGVuIGZpbGUgJXMgd2hpY2ggd2FzIGV4cGFuZGVkIHRvICVzICIKKysgIGZvciAoY29uc3Qg YXV0byAmaXRlciA6IG1hcHBlZF9maWxlcykKKysgICAgeworKyAgICAgIGNvbnN0IHN0ZDo6c3Ry aW5nICZmaWxlbmFtZSA9IGl0ZXIuZmlyc3Q7CisrICAgICAgY29uc3QgbWFwcGVkX2ZpbGUgJmZp bGVfZGF0YSA9IGl0ZXIuc2Vjb25kOworKworKyAgICAgIC8qIElmIHRoaXMgbWFwcGVkIGZpbGUg aGFzIHRoZSBzYW1lIGJ1aWxkLWlkIGFzIHdhcyBkaXNjb3ZlcmVkIGZvcgorKwkgdGhlIGNvcmUt ZmlsZSBpdHNlbGYsIHRoZW4gd2UgYXNzdW1lIHRoaXMgaXMgdGhlIG1haW4KKysJIGV4ZWN1dGFi bGUuICBSZWNvcmQgdGhlIGZpbGVuYW1lIGFzIHdlIGNhbiB1c2UgdGhpcyBsYXRlci4gICovCisr ICAgICAgaWYgKGZpbGVfZGF0YS5idWlsZF9pZCAhPSBudWxscHRyCisrCSAgJiYgbV9leHBlY3Rl ZF9leGVjX2ZpbGVuYW1lLmVtcHR5ICgpCisrCSAgJiYgYnVpbGRfaWRfZXF1YWwgKGZpbGVfZGF0 YS5idWlsZF9pZCwgY29yZV9idWlsZF9pZCkpCisrCW1fZXhwZWN0ZWRfZXhlY19maWxlbmFtZSA9 IGZpbGVuYW1lOworKworKyAgICAgIC8qIFVzZSBleGVjX2ZpbGVfZmluZCgpIHRvIGRvIHN5c3Jv b3QgZXhwYW5zaW9uLiAgSXQnbGwKKysJIGFsc28gc3RyaXAgdGhlIHBvdGVudGlhbCBzeXNyb290 ICJ0YXJnZXQ6IiBwcmVmaXguICBJZgorKwkgdGhlcmUgaXMgbm8gc3lzcm9vdCwgYW4gZXF1aXZh bGVudCAocG9zc2libHkgbW9yZQorKwkgY2Fub25pY2FsKSBwYXRobmFtZSB3aWxsIGJlIHByb3Zp ZGVkLiAgKi8KKysgICAgICBnZGI6OnVuaXF1ZV94bWFsbG9jX3B0cjxjaGFyPiBleHBhbmRlZF9m bmFtZQorKwk9IGV4ZWNfZmlsZV9maW5kIChmaWxlbmFtZS5jX3N0ciAoKSwgbnVsbHB0cik7Cisr CisrICAgICAgYm9vbCBidWlsZF9pZF9taXNtYXRjaCA9IGZhbHNlOworKyAgICAgIGlmIChleHBh bmRlZF9mbmFtZSAhPSBudWxscHRyICYmIGZpbGVfZGF0YS5idWlsZF9pZCAhPSBudWxscHRyKQor Kwl7CisrCSAgLyogV2UgdGVtcG9yYXJpbHkgb3BlbiB0aGUgYmZkIGFzIGEgc3RydWN0dXJlZCB0 YXJnZXQsIHRoaXMKKysJICAgICBhbGxvd3MgdXMgdG8gcmVhZCB0aGUgYnVpbGQtaWQgZnJvbSB0 aGUgYmZkIGlmIHRoZXJlIGlzIG9uZS4KKysJICAgICBGb3IgdGhpcyB0YXNrIGl0J3MgT0sgaWYg d2UgcmV1c2UgYW4gYWxyZWFkeSBvcGVuIGJmZCBvYmplY3QsCisrCSAgICAgc28gd2UgbWFrZSB0 aGlzIGNhbGwgdGhyb3VnaCBHREIncyBiZmQgY2FjaGUuICBPbmNlIHdlJ3ZlCisrCSAgICAgY2hl Y2tlZCB0aGUgYnVpbGQtaWQgKGlmIHRoZXJlIGlzIG9uZSkgd2UnbGwgZHJvcCB0aGlzCisrCSAg ICAgcmVmZXJlbmNlIGFuZCByZS1vcGVuIHRoZSBiZmQgdXNpbmcgdGhlICJiaW5hcnkiIHRhcmdl dC4gICovCisrCSAgZ2RiX2JmZF9yZWZfcHRyIHRtcF9iZmQKKysJICAgID0gZ2RiX2JmZF9vcGVu IChleHBhbmRlZF9mbmFtZS5nZXQgKCksIGdudXRhcmdldCk7CisrCisrCSAgaWYgKHRtcF9iZmQg IT0gbnVsbHB0cgorKwkgICAgICAmJiBiZmRfY2hlY2tfZm9ybWF0ICh0bXBfYmZkLmdldCAoKSwg YmZkX29iamVjdCkKKysJICAgICAgJiYgYnVpbGRfaWRfYmZkX2dldCAodG1wX2JmZC5nZXQgKCkp ICE9IG51bGxwdHIpCisrCSAgICB7CisrCSAgICAgIC8qIFRoZSBuZXdseSBvcGVuZWQgVE1QX0JG RCBoYXMgYSBidWlsZC1pZCwgYW5kIHRoaXMgbWFwcGVkCisrCQkgZmlsZSBoYXMgYSBidWlsZC1p ZCBleHRyYWN0ZWQgZnJvbSB0aGUgY29yZS1maWxlLiAgQ2hlY2sKKysJCSB0aGUgYnVpbGQtaWQn cyBtYXRjaCwgYW5kIGlmIG5vdCwgcmVqZWN0IFRNUF9CRkQuICAqLworKwkgICAgICBjb25zdCBz dHJ1Y3QgYmZkX2J1aWxkX2lkICpmb3VuZAorKwkJPSBidWlsZF9pZF9iZmRfZ2V0ICh0bXBfYmZk LmdldCAoKSk7CisrCSAgICAgIGlmICghYnVpbGRfaWRfZXF1YWwgKGZvdW5kLCBmaWxlX2RhdGEu YnVpbGRfaWQpKQorKwkJYnVpbGRfaWRfbWlzbWF0Y2ggPSB0cnVlOworKwkgICAgfQorKwl9Cisr CisrICAgICAgZ2RiX2JmZF9yZWZfcHRyIGFiZmQ7CisrICAgICAgaWYgKGV4cGFuZGVkX2ZuYW1l ICE9IG51bGxwdHIgJiYgIWJ1aWxkX2lkX21pc21hdGNoKQorKwl7CisrCSAgc3RydWN0IGJmZCAq YiA9IGJmZF9vcGVuciAoZXhwYW5kZWRfZm5hbWUuZ2V0ICgpLCAiYmluYXJ5Iik7CisrCSAgYWJm ZCA9IGdkYl9iZmRfcmVmX3B0cjo6bmV3X3JlZmVyZW5jZSAoYik7CisrCX0KKysKKysgICAgICBp ZiAoKGV4cGFuZGVkX2ZuYW1lID09IG51bGxwdHIKKysJICAgfHwgYWJmZCA9PSBudWxscHRyCisr CSAgIHx8ICFiZmRfY2hlY2tfZm9ybWF0IChhYmZkLmdldCAoKSwgYmZkX29iamVjdCkpCisrCSAg JiYgZmlsZV9kYXRhLmJ1aWxkX2lkICE9IG51bGxwdHIpCisrCXsKKysJICBhYmZkID0gZmluZF9v YmpmaWxlX2J5X2J1aWxkX2lkIChjdXJyZW50X3Byb2dyYW1fc3BhY2UsCisrCQkJCQkgICBmaWxl X2RhdGEuYnVpbGRfaWQsCisrCQkJCQkgICBmaWxlbmFtZS5jX3N0ciAoKSk7CisrCisrCSAgaWYg KGFiZmQgIT0gbnVsbHB0cikKKysJICAgIHsKKysJICAgICAgLyogVGhlIGZpbmRfb2JqZmlsZV9i eV9idWlsZF9pZCB3aWxsIGhhdmUgb3BlbmVkIEFCRkQgdXNpbmcKKysJCSB0aGUgR05VVEFSR0VU IGdsb2JhbCBiZmQgdHlwZSwgaG93ZXZlciwgd2UgbmVlZCB0aGUgYmZkCisrCQkgb3BlbmVkIGFz IHRoZSBiaW5hcnkgdHlwZSAoc2VlIHRoZSBmdW5jdGlvbidzIGhlYWRlcgorKwkJIGNvbW1lbnQp LCBzbyBub3cgd2UgcmVvcGVuIEFCRkQgd2l0aCB0aGUgZGVzaXJlZCBiaW5hcnkKKysJCSB0eXBl LiAgKi8KKysJICAgICAgZXhwYW5kZWRfZm5hbWUKKysJCT0gbWFrZV91bmlxdWVfeHN0cmR1cCAo YmZkX2dldF9maWxlbmFtZSAoYWJmZC5nZXQgKCkpKTsKKysJICAgICAgc3RydWN0IGJmZCAqYiA9 IGJmZF9vcGVuciAoZXhwYW5kZWRfZm5hbWUuZ2V0ICgpLCAiYmluYXJ5Iik7CisrCSAgICAgIGdk Yl9hc3NlcnQgKGIgIT0gbnVsbHB0cik7CisrCSAgICAgIGFiZmQgPSBnZGJfYmZkX3JlZl9wdHI6 Om5ld19yZWZlcmVuY2UgKGIpOworKwkgICAgfQorKwl9CisrCisrICAgICAgc3RkOjp2ZWN0b3I8 bWVtX3JhbmdlPiByYW5nZXM7CisrICAgICAgZm9yIChjb25zdCBtYXBwZWRfZmlsZTo6cmVnaW9u ICZyZWdpb24gOiBmaWxlX2RhdGEucmVnaW9ucykKKysJcmFuZ2VzLmVtcGxhY2VfYmFjayAocmVn aW9uLnN0YXJ0LCByZWdpb24uZW5kIC0gcmVnaW9uLnN0YXJ0KTsKKysKKysgICAgICBpZiAoZXhw YW5kZWRfZm5hbWUgPT0gbnVsbHB0cgorKwkgIHx8IGFiZmQgPT0gbnVsbHB0cgorKwkgIHx8ICFi ZmRfY2hlY2tfZm9ybWF0IChhYmZkLmdldCAoKSwgYmZkX29iamVjdCkpCisrCXsKKysJICAvKiBJ ZiBBQkZEIHdhcyBvcGVuZWQsIGJ1dCB0aGUgd3JvbmcgZm9ybWF0LCBjbG9zZSBpdCBub3cuICAq LworKwkgIGFiZmQgPSBudWxscHRyOworKworKwkgIC8qIFJlY29yZCBhbGwgcmVnaW9ucyBmb3Ig dGhpcyBmaWxlIGFzIHVuYXZhaWxhYmxlLiAgKi8KKysJICBmb3IgKGNvbnN0IG1hcHBlZF9maWxl OjpyZWdpb24gJnJlZ2lvbiA6IGZpbGVfZGF0YS5yZWdpb25zKQorKwkgICAgbV9jb3JlX3VuYXZh aWxhYmxlX21hcHBpbmdzLmVtcGxhY2VfYmFjayAocmVnaW9uLnN0YXJ0LAorKwkJCQkJCSAgICAg IHJlZ2lvbi5lbmQKKysJCQkJCQkgICAgICAtIHJlZ2lvbi5zdGFydCk7CisrCisrCSAgLyogQW5k IGdpdmUgdGhlIHVzZXIgYW4gYXBwcm9wcmlhdGUgd2FybmluZy4gICovCisrCSAgaWYgKGJ1aWxk X2lkX21pc21hdGNoKQorKwkgICAgeworKwkgICAgICBpZiAoZXhwYW5kZWRfZm5hbWUgPT0gbnVs bHB0cgorKwkJICB8fCBmaWxlbmFtZSA9PSBleHBhbmRlZF9mbmFtZS5nZXQgKCkpCisrCQl3YXJu aW5nIChfKCJGaWxlICVwcyBkb2Vzbid0IG1hdGNoIGJ1aWxkLWlkIGZyb20gY29yZS1maWxlICIK KysJCQkgICAiZHVyaW5nIGZpbGUtYmFja2VkIG1hcHBpbmcgcHJvY2Vzc2luZyIpLAorKwkJCSBz dHlsZWRfc3RyaW5nIChmaWxlX25hbWVfc3R5bGUuc3R5bGUgKCksCisrCQkJCQlmaWxlbmFtZS5j X3N0ciAoKSkpOworKwkgICAgICBlbHNlCisrCQl3YXJuaW5nIChfKCJGaWxlICVwcyB3aGljaCB3 YXMgZXhwYW5kZWQgdG8gJXBzLCBkb2Vzbid0IG1hdGNoICIKKysJCQkgICAiYnVpbGQtaWQgZnJv bSBjb3JlLWZpbGUgZHVyaW5nIGZpbGUtYmFja2VkICIKKysJCQkgICAibWFwcGluZyBwcm9jZXNz aW5nIiksCisrCQkJIHN0eWxlZF9zdHJpbmcgKGZpbGVfbmFtZV9zdHlsZS5zdHlsZSAoKSwKKysJ CQkJCWZpbGVuYW1lLmNfc3RyICgpKSwKKysJCQkgc3R5bGVkX3N0cmluZyAoZmlsZV9uYW1lX3N0 eWxlLnN0eWxlICgpLAorKwkJCQkJZXhwYW5kZWRfZm5hbWUuZ2V0ICgpKSk7CisrCSAgICB9Cisr CSAgZWxzZQorKwkgICAgeworKwkgICAgICBpZiAoZXhwYW5kZWRfZm5hbWUgPT0gbnVsbHB0cgor KwkJICB8fCBmaWxlbmFtZSA9PSBleHBhbmRlZF9mbmFtZS5nZXQgKCkpCisrCQl3YXJuaW5nIChf KCJDYW4ndCBvcGVuIGZpbGUgJXBzIGR1cmluZyBmaWxlLWJhY2tlZCBtYXBwaW5nICIKKysJCQkg ICAibm90ZSBwcm9jZXNzaW5nIiksCisrCQkJIHN0eWxlZF9zdHJpbmcgKGZpbGVfbmFtZV9zdHls ZS5zdHlsZSAoKSwKKysJCQkJCWZpbGVuYW1lLmNfc3RyICgpKSk7CisrCSAgICAgIGVsc2UKKysJ CXdhcm5pbmcgKF8oIkNhbid0IG9wZW4gZmlsZSAlcHMgd2hpY2ggd2FzIGV4cGFuZGVkIHRvICVw cyAiCisgCQkJICAgImR1cmluZyBmaWxlLWJhY2tlZCBtYXBwaW5nIG5vdGUgcHJvY2Vzc2luZyIp LAorLQkJCSBmaWxlbmFtZSwgZXhwYW5kZWRfZm5hbWUuZ2V0ICgpKTsKKysJCQkgc3R5bGVkX3N0 cmluZyAoZmlsZV9uYW1lX3N0eWxlLnN0eWxlICgpLAorKwkJCQkJZmlsZW5hbWUuY19zdHIgKCkp LAorKwkJCSBzdHlsZWRfc3RyaW5nIChmaWxlX25hbWVfc3R5bGUuc3R5bGUgKCksCisrCQkJCQll eHBhbmRlZF9mbmFtZS5nZXQgKCkpKTsKKysJICAgIH0KKysJfQorKyAgICAgIGVsc2UKKysJewor KwkgIC8qIEVuc3VyZSB0aGF0IHRoZSBiZmQgd2lsbCBiZSBjbG9zZWQgd2hlbiBjb3JlX2JmZCBp cyBjbG9zZWQuCisrCSAgICAgVGhpcyBjYW4gYmUgY2hlY2tlZCBiZWZvcmUvYWZ0ZXIgYSBjb3Jl IGZpbGUgZGV0YWNoIHZpYSAibWFpbnQKKysJICAgICBpbmZvIGJmZHMiLiAgKi8KKysJICBnZGJf YmZkX3JlY29yZF9pbmNsdXNpb24gKGN1cnJlbnRfcHJvZ3JhbV9zcGFjZS0+Y29yZV9iZmQgKCks CisrCQkJCSAgICBhYmZkLmdldCAoKSk7CisrCisrCSAgLyogQ3JlYXRlIHNlY3Rpb25zIGZvciBl YWNoIG1hcHBlZCByZWdpb24uICAqLworKwkgIGZvciAoY29uc3QgbWFwcGVkX2ZpbGU6OnJlZ2lv biAmcmVnaW9uIDogZmlsZV9kYXRhLnJlZ2lvbnMpCisrCSAgICB7CisrCSAgICAgIC8qIE1ha2Ug bmV3IEJGRCBzZWN0aW9uLiAgQWxsIHNlY3Rpb25zIGhhdmUgdGhlIHNhbWUgbmFtZSwKKysJCSB3 aGljaCBpcyBwZXJtaXR0ZWQgYnkgYmZkX21ha2Vfc2VjdGlvbl9hbnl3YXkoKS4gICovCisrCSAg ICAgIGFzZWN0aW9uICpzZWMgPSBiZmRfbWFrZV9zZWN0aW9uX2FueXdheSAoYWJmZC5nZXQgKCks ICJsb2FkIik7CisrCSAgICAgIGlmIChzZWMgPT0gbnVsbHB0cikKKysJCWVycm9yIChfKCJDYW4n dCBtYWtlIHNlY3Rpb24iKSk7CisrCSAgICAgIHNlYy0+ZmlsZXBvcyA9IHJlZ2lvbi5maWxlX29m czsKKysJICAgICAgYmZkX3NldF9zZWN0aW9uX2ZsYWdzIChzZWMsIFNFQ19SRUFET05MWSB8IFNF Q19IQVNfQ09OVEVOVFMpOworKwkgICAgICBiZmRfc2V0X3NlY3Rpb25fc2l6ZSAoc2VjLCByZWdp b24uZW5kIC0gcmVnaW9uLnN0YXJ0KTsKKysJICAgICAgYmZkX3NldF9zZWN0aW9uX3ZtYSAoc2Vj LCByZWdpb24uc3RhcnQpOworKwkgICAgICBiZmRfc2V0X3NlY3Rpb25fbG1hIChzZWMsIHJlZ2lv bi5zdGFydCk7CisrCSAgICAgIGJmZF9zZXRfc2VjdGlvbl9hbGlnbm1lbnQgKHNlYywgMik7Cisr CisrCSAgICAgIC8qIFNldCB0YXJnZXRfc2VjdGlvbiBmaWVsZHMuICAqLworKwkgICAgICBtX2Nv cmVfZmlsZV9tYXBwaW5ncy5lbXBsYWNlX2JhY2sgKHJlZ2lvbi5zdGFydCwgcmVnaW9uLmVuZCwg c2VjKTsKKysJICAgIH0KKysJfQorIAorLQkJaWYgKGJmZCAhPSBudWxscHRyKQorLQkJICBiZmRf Y2xvc2UgKGJmZCk7CistCQlyZXR1cm47CistCSAgICAgIH0KKy0JICAgIC8qIEVuc3VyZSB0aGF0 IHRoZSBiZmQgd2lsbCBiZSBjbG9zZWQgd2hlbiBjb3JlX2JmZCBpcyBjbG9zZWQuIAorLQkgICAg ICAgVGhpcyBjYW4gYmUgY2hlY2tlZCBiZWZvcmUvYWZ0ZXIgYSBjb3JlIGZpbGUgZGV0YWNoIHZp YQorLQkgICAgICAgIm1haW50IGluZm8gYmZkcyIuICAqLworLQkgICAgZ2RiX2JmZF9yZWNvcmRf aW5jbHVzaW9uIChjdXJyZW50X3Byb2dyYW1fc3BhY2UtPmNvcmVfYmZkICgpLCBiZmQpOworLQkg ICAgYmZkX21hcFtmaWxlbmFtZV0gPSBiZmQ7CistCSAgfQorKyAgICAgIC8qIElmIHRoaXMgaXMg YSBiZmQgd2l0aCBhIGJ1aWxkLWlkIHRoZW4gcmVjb3JkIHRoZSBmaWxlbmFtZSwKKysJIG9wdGlv bmFsIHNvbmFtZSAoRFRfU09OQU1FIC5keW5hbWljIGF0dHJpYnV0ZSksIGFuZCB0aGUgcmFuZ2Ug b2YKKysJIGFkZHJlc3NlcyBhdCB3aGljaCB0aGlzIGJmZCBpcyBtYXBwZWQuICBUaGlzIGluZm9y bWF0aW9uIGNhbiBiZQorKwkgdXNlZCB0byBwZXJmb3JtIGJ1aWxkLWlkIGNoZWNraW5nIHdoZW4g bG9hZGluZyB0aGUgc2hhcmVkCisrCSBsaWJyYXJpZXMuICAqLworKyAgICAgIGlmIChmaWxlX2Rh dGEuYnVpbGRfaWQgIT0gbnVsbHB0cikKKysJeworKwkgIG5vcm1hbGl6ZV9tZW1fcmFuZ2VzICgm cmFuZ2VzKTsKKyAKKy0JLyogTWFrZSBuZXcgQkZEIHNlY3Rpb24uICBBbGwgc2VjdGlvbnMgaGF2 ZSB0aGUgc2FtZSBuYW1lLAorLQkgICB3aGljaCBpcyBwZXJtaXR0ZWQgYnkgYmZkX21ha2Vfc2Vj dGlvbl9hbnl3YXkoKS4gICovCistCWFzZWN0aW9uICpzZWMgPSBiZmRfbWFrZV9zZWN0aW9uX2Fu eXdheSAoYmZkLCAibG9hZCIpOworLQlpZiAoc2VjID09IG51bGxwdHIpCistCSAgZXJyb3IgKF8o IkNhbid0IG1ha2Ugc2VjdGlvbiIpKTsKKy0Jc2VjLT5maWxlcG9zID0gZmlsZV9vZnM7CistCWJm ZF9zZXRfc2VjdGlvbl9mbGFncyAoc2VjLCBTRUNfUkVBRE9OTFkgfCBTRUNfSEFTX0NPTlRFTlRT KTsKKy0JYmZkX3NldF9zZWN0aW9uX3NpemUgKHNlYywgZW5kIC0gc3RhcnQpOworLQliZmRfc2V0 X3NlY3Rpb25fdm1hIChzZWMsIHN0YXJ0KTsKKy0JYmZkX3NldF9zZWN0aW9uX2xtYSAoc2VjLCBz dGFydCk7CistCWJmZF9zZXRfc2VjdGlvbl9hbGlnbm1lbnQgKHNlYywgMik7CistCistCS8qIFNl dCB0YXJnZXRfc2VjdGlvbiBmaWVsZHMuICAqLworLQltX2NvcmVfZmlsZV9tYXBwaW5ncy5lbXBs YWNlX2JhY2sgKHN0YXJ0LCBlbmQsIHNlYyk7CistCistCS8qIElmIHRoaXMgaXMgYSBiZmQgb2Yg YSBzaGFyZWQgbGlicmFyeSwgcmVjb3JkIGl0cyBzb25hbWUKKy0JICAgYW5kIGJ1aWxkIGlkLiAg Ki8KKy0JaWYgKGJ1aWxkX2lkICE9IG51bGxwdHIpCistCSAgeworLQkgICAgZ2RiOjp1bmlxdWVf eG1hbGxvY19wdHI8Y2hhcj4gc29uYW1lCistCSAgICAgID0gZ2RiX2JmZF9yZWFkX2VsZl9zb25h bWUgKGJmZC0+ZmlsZW5hbWUpOworLQkgICAgaWYgKHNvbmFtZSAhPSBudWxscHRyKQorLQkgICAg ICBzZXRfY2JmZF9zb25hbWVfYnVpbGRfaWQgKGN1cnJlbnRfcHJvZ3JhbV9zcGFjZS0+Y2JmZCwK Ky0JCQkJCXNvbmFtZS5nZXQgKCksIGJ1aWxkX2lkKTsKKy0JICB9CistICAgICAgfSk7CisrCSAg Y29uc3QgY2hhciAqYWN0dWFsX2ZpbGVuYW1lID0gbnVsbHB0cjsKKysJICBnZGI6OnVuaXF1ZV94 bWFsbG9jX3B0cjxjaGFyPiBzb25hbWU7CisrCSAgaWYgKGFiZmQgIT0gbnVsbHB0cikKKysJICAg IHsKKysJICAgICAgYWN0dWFsX2ZpbGVuYW1lID0gYmZkX2dldF9maWxlbmFtZSAoYWJmZC5nZXQg KCkpOworKwkgICAgICBzb25hbWUgPSBnZGJfYmZkX3JlYWRfZWxmX3NvbmFtZSAoYWN0dWFsX2Zp bGVuYW1lKTsKKysJICAgIH0KKysKKysJICBtX21hcHBlZF9maWxlX2luZm8uYWRkIChzb25hbWUu Z2V0ICgpLCBmaWxlbmFtZS5jX3N0ciAoKSwKKysJCQkJICBhY3R1YWxfZmlsZW5hbWUsIHN0ZDo6 bW92ZSAocmFuZ2VzKSwKKysJCQkJICBmaWxlX2RhdGEuYnVpbGRfaWQpOworKwl9CisrICAgIH0K KyAKKyAgIG5vcm1hbGl6ZV9tZW1fcmFuZ2VzICgmbV9jb3JlX3VuYXZhaWxhYmxlX21hcHBpbmdz KTsKKyB9CitAQCAtNTY0LDM2ICs4NzAsMzEgQEAgcmVuYW1lX3ZtY29yZV9pZGxlX3JlZ19zZWN0 aW9ucyAoYmZkICphYmZkLCBpbmZlcmlvciAqaW5mKQorICAgIEJGRCBBQkZELiAgKi8KKyAKKyBz dGF0aWMgdm9pZAorLWxvY2F0ZV9leGVjX2Zyb21fY29yZWZpbGVfYnVpbGRfaWQgKGJmZCAqYWJm ZCwgaW50IGZyb21fdHR5KQorK2xvY2F0ZV9leGVjX2Zyb21fY29yZWZpbGVfYnVpbGRfaWQgKGJm ZCAqYWJmZCwgY29yZV90YXJnZXQgKnRhcmdldCwKKysJCQkJICAgIGludCBmcm9tX3R0eSkKKyB7 CisgICBjb25zdCBiZmRfYnVpbGRfaWQgKmJ1aWxkX2lkID0gYnVpbGRfaWRfYmZkX2dldCAoYWJm ZCk7CisgICBpZiAoYnVpbGRfaWQgPT0gbnVsbHB0cikKKyAgICAgcmV0dXJuOworIAorLSAgZ2Ri X2JmZF9yZWZfcHRyIGV4ZWNiZmQKKy0gICAgPSBidWlsZF9pZF90b19leGVjX2JmZCAoYnVpbGRf aWQtPnNpemUsIGJ1aWxkX2lkLT5kYXRhKTsKKysgIC8qIFRoZSBmaWxlbmFtZSB1c2VkIGZvciB0 aGUgZmluZF9vYmpmaWxlX2J5X2J1aWxkX2lkIGNhbGwuICAqLworKyAgc3RkOjpzdHJpbmcgZmls ZW5hbWU7CisgCistICBpZiAoZXhlY2JmZCA9PSBudWxscHRyKQorKyAgaWYgKCF0YXJnZXQtPmV4 cGVjdGVkX2V4ZWNfZmlsZW5hbWUgKCkuZW1wdHkgKCkpCisrICAgIGZpbGVuYW1lID0gdGFyZ2V0 LT5leHBlY3RlZF9leGVjX2ZpbGVuYW1lICgpOworKyAgZWxzZQorICAgICB7CistICAgICAgLyog QXR0ZW1wdCB0byBxdWVyeSBkZWJ1Z2luZm9kIGZvciB0aGUgZXhlY3V0YWJsZS4gICovCistICAg ICAgZ2RiOjp1bmlxdWVfeG1hbGxvY19wdHI8Y2hhcj4gZXhlY3BhdGg7CistICAgICAgc2NvcGVk X2ZkIGZkID0gZGVidWdpbmZvZF9leGVjX3F1ZXJ5IChidWlsZF9pZC0+ZGF0YSwgYnVpbGRfaWQt PnNpemUsCistCQkJCQkgICAgYWJmZC0+ZmlsZW5hbWUsICZleGVjcGF0aCk7CistCistICAgICAg aWYgKGZkLmdldCAoKSA+PSAwKQorLQl7CistCSAgZXhlY2JmZCA9IGdkYl9iZmRfb3BlbiAoZXhl Y3BhdGguZ2V0ICgpLCBnbnV0YXJnZXQpOworLQorLQkgIGlmIChleGVjYmZkID09IG51bGxwdHIp CistCSAgICB3YXJuaW5nIChfKCJcIiVzXCIgZnJvbSBkZWJ1Z2luZm9kIGNhbm5vdCBiZSBvcGVu ZWQgYXMgYmZkOiAlcyIpLAorLQkJICAgICBleGVjcGF0aC5nZXQgKCksCistCQkgICAgIGdkYl9i ZmRfZXJybXNnIChiZmRfZ2V0X2Vycm9yICgpLCBudWxscHRyKS5jX3N0ciAoKSk7CistCSAgZWxz ZSBpZiAoIWJ1aWxkX2lkX3ZlcmlmeSAoZXhlY2JmZC5nZXQgKCksIGJ1aWxkX2lkLT5zaXplLAor LQkJCQkgICAgIGJ1aWxkX2lkLT5kYXRhKSkKKy0JICAgIGV4ZWNiZmQucmVzZXQgKG51bGxwdHIp OworLQl9CisrICAgICAgLyogV2UgZGlkbid0IGZpbmQgYW4gZXhlY3V0YWJsZSBuYW1lIGZyb20g dGhlIG1hcHBlZCBmaWxlCisrCSBpbmZvcm1hdGlvbiwgc28gYXMgYSBzdGFuZC1pbiBidWlsZCBh IHN0cmluZyBiYXNlZCBvbiB0aGUKKysJIGJ1aWxkLWlkLiAgKi8KKysgICAgICBzdGQ6OnN0cmlu ZyBidWlsZF9pZF9oZXhfc3RyID0gYmluMmhleCAoYnVpbGRfaWQtPmRhdGEsIGJ1aWxkX2lkLT5z aXplKTsKKysgICAgICBmaWxlbmFtZSA9IHN0cmluZ19wcmludGYgKCJ3aXRoIGJ1aWxkLWlkICVz IiwgYnVpbGRfaWRfaGV4X3N0ci5jX3N0ciAoKSk7CisgICAgIH0KKyAKKysgIGdkYl9iZmRfcmVm X3B0ciBleGVjYmZkCisrICAgID0gZmluZF9vYmpmaWxlX2J5X2J1aWxkX2lkIChjdXJyZW50X3By b2dyYW1fc3BhY2UsIGJ1aWxkX2lkLAorKwkJCQlmaWxlbmFtZS5jX3N0ciAoKSk7CisrCisgICBp ZiAoZXhlY2JmZCAhPSBudWxscHRyKQorICAgICB7CisgICAgICAgZXhlY19maWxlX2F0dGFjaCAo YmZkX2dldF9maWxlbmFtZSAoZXhlY2JmZC5nZXQgKCkpLCBmcm9tX3R0eSk7CitAQCAtNzI0LDcg KzEwMjUsNyBAQCBjb3JlX3RhcmdldF9vcGVuIChjb25zdCBjaGFyICphcmcsIGludCBmcm9tX3R0 eSkKKyAKKyAgIGlmIChjdXJyZW50X3Byb2dyYW1fc3BhY2UtPmV4ZWNfYmZkICgpID09IG51bGxw dHIpCisgICAgIGxvY2F0ZV9leGVjX2Zyb21fY29yZWZpbGVfYnVpbGRfaWQgKGN1cnJlbnRfcHJv Z3JhbV9zcGFjZS0+Y29yZV9iZmQgKCksCistCQkJCQlmcm9tX3R0eSk7CisrCQkJCQl0YXJnZXQs IGZyb21fdHR5KTsKKyAKKyAgIHBvc3RfY3JlYXRlX2luZmVyaW9yIChmcm9tX3R0eSk7CisgCitA QCAtOTYzLDU1ICsxMjY0LDYgQEAgY29yZV90YXJnZXQ6OmZpbGVzX2luZm8gKCkKKyAgIHByaW50 X3NlY3Rpb25faW5mbyAoJm1fY29yZV9zZWN0aW9uX3RhYmxlLCBjdXJyZW50X3Byb2dyYW1fc3Bh Y2UtPmNvcmVfYmZkICgpKTsKKyB9CisgDAorLS8qIEhlbHBlciBtZXRob2QgZm9yIGNvcmVfdGFy Z2V0Ojp4ZmVyX3BhcnRpYWwuICAqLworLQorLWVudW0gdGFyZ2V0X3hmZXJfc3RhdHVzCistY29y ZV90YXJnZXQ6OnhmZXJfbWVtb3J5X3ZpYV9tYXBwaW5ncyAoZ2RiX2J5dGUgKnJlYWRidWYsCist CQkJCSAgICAgICBjb25zdCBnZGJfYnl0ZSAqd3JpdGVidWYsCistCQkJCSAgICAgICBVTE9OR0VT VCBvZmZzZXQsIFVMT05HRVNUIGxlbiwKKy0JCQkJICAgICAgIFVMT05HRVNUICp4ZmVyZWRfbGVu KQorLXsKKy0gIGVudW0gdGFyZ2V0X3hmZXJfc3RhdHVzIHhmZXJfc3RhdHVzOworLQorLSAgeGZl cl9zdGF0dXMgPSAoc2VjdGlvbl90YWJsZV94ZmVyX21lbW9yeV9wYXJ0aWFsCistCQkgICAocmVh ZGJ1Ziwgd3JpdGVidWYsCistCQkgICAgb2Zmc2V0LCBsZW4sIHhmZXJlZF9sZW4sCistCQkgICAg bV9jb3JlX2ZpbGVfbWFwcGluZ3MpKTsKKy0KKy0gIGlmICh4ZmVyX3N0YXR1cyA9PSBUQVJHRVRf WEZFUl9PSyB8fCBtX2NvcmVfdW5hdmFpbGFibGVfbWFwcGluZ3MuZW1wdHkgKCkpCistICAgIHJl dHVybiB4ZmVyX3N0YXR1czsKKy0KKy0gIC8qIFRoZXJlIGFyZSBpbnN0YW5jZXMgLSBlLmcuIHdo ZW4gZGVidWdnaW5nIHdpdGhpbiBhIGRvY2tlcgorLSAgICAgY29udGFpbmVyIHVzaW5nIHRoZSBB VUZTIHN0b3JhZ2UgZHJpdmVyIC0gd2hlcmUgdGhlIHBhdGhuYW1lcworLSAgICAgb2J0YWluZWQg ZnJvbSB0aGUgbm90ZSBzZWN0aW9uIGFyZSBpbmNvcnJlY3QuICBEZXNwaXRlIHRoZSBwYXRoCist ICAgICBiZWluZyB3cm9uZywganVzdCBrbm93aW5nIHRoZSBzdGFydCBhbmQgZW5kIGFkZHJlc3Nl cyBvZiB0aGUKKy0gICAgIG1hcHBpbmdzIGlzIHN0aWxsIHVzZWZ1bDsgd2UgY2FuIGF0dGVtcHQg YW4gYWNjZXNzIG9mIHRoZSBmaWxlCistICAgICBzdHJhdHVtIGNvbnN0cmFpbmVkIHRvIHRoZSBh ZGRyZXNzIHJhbmdlcyBjb3JyZXNwb25kaW5nIHRvIHRoZQorLSAgICAgdW5hdmFpbGFibGUgbWFw cGluZ3MuICAqLworLQorLSAgVUxPTkdFU1QgbWVtYWRkciA9IG9mZnNldDsKKy0gIFVMT05HRVNU IG1lbWVuZCA9IG9mZnNldCArIGxlbjsKKy0KKy0gIGZvciAoY29uc3QgYXV0byAmbXIgOiBtX2Nv cmVfdW5hdmFpbGFibGVfbWFwcGluZ3MpCistICAgIHsKKy0gICAgICBpZiAobXIuY29udGFpbnMg KG1lbWFkZHIpKQorLQl7CistCSAgaWYgKCFtci5jb250YWlucyAobWVtZW5kKSkKKy0JICAgIGxl biA9IG1yLnN0YXJ0ICsgbXIubGVuZ3RoIC0gbWVtYWRkcjsKKy0KKy0JICB4ZmVyX3N0YXR1cyA9 IHRoaXMtPmJlbmVhdGggKCktPnhmZXJfcGFydGlhbCAoVEFSR0VUX09CSkVDVF9NRU1PUlksCist CQkJCQkJCU5VTEwsCistCQkJCQkJCXJlYWRidWYsCistCQkJCQkJCXdyaXRlYnVmLAorLQkJCQkJ CQlvZmZzZXQsCistCQkJCQkJCWxlbiwKKy0JCQkJCQkJeGZlcmVkX2xlbik7CistCSAgYnJlYWs7 CistCX0KKy0gICAgfQorLQorLSAgcmV0dXJuIHhmZXJfc3RhdHVzOworLX0KKyAKKyBlbnVtIHRh cmdldF94ZmVyX3N0YXR1cworIGNvcmVfdGFyZ2V0Ojp4ZmVyX3BhcnRpYWwgKGVudW0gdGFyZ2V0 X29iamVjdCBvYmplY3QsIGNvbnN0IGNoYXIgKmFubmV4LAorQEAgLTEwMzksMjYgKzEyOTEsNzIg QEAgY29yZV90YXJnZXQ6OnhmZXJfcGFydGlhbCAoZW51bSB0YXJnZXRfb2JqZWN0IG9iamVjdCwg Y29uc3QgY2hhciAqYW5uZXgsCisgCWlmICh4ZmVyX3N0YXR1cyA9PSBUQVJHRVRfWEZFUl9PSykK KyAJICByZXR1cm4gVEFSR0VUX1hGRVJfT0s7CisgCistCS8qIENoZWNrIGZpbGUgYmFja2VkIG1h cHBpbmdzLiAgSWYgdGhleSdyZSBhdmFpbGFibGUsIHVzZQorLQkgICBjb3JlIGZpbGUgcHJvdmlk ZWQgbWFwcGluZ3MgKGUuZy4gZnJvbSAubm90ZS5saW51eGNvcmUuZmlsZQorLQkgICBvciB0aGUg bGlrZSkgYXMgdGhpcyBzaG91bGQgcHJvdmlkZSBhIG1vcmUgYWNjdXJhdGUKKy0JICAgcmVzdWx0 LiAgSWYgbm90LCBjaGVjayB0aGUgc3RyYXR1bSBiZW5lYXRoIHVzLCB3aGljaCBzaG91bGQKKy0J ICAgYmUgdGhlIGZpbGUgc3RyYXR1bS4KKysJLyogQ2hlY2sgZmlsZSBiYWNrZWQgbWFwcGluZ3Mu ICBJZiB0aGV5J3JlIGF2YWlsYWJsZSwgdXNlIGNvcmUgZmlsZQorKwkgICBwcm92aWRlZCBtYXBw aW5ncyAoZS5nLiBmcm9tIC5ub3RlLmxpbnV4Y29yZS5maWxlIG9yIHRoZSBsaWtlKQorKwkgICBh cyB0aGlzIHNob3VsZCBwcm92aWRlIGEgbW9yZSBhY2N1cmF0ZSByZXN1bHQuICAqLworKwlpZiAo IW1fY29yZV9maWxlX21hcHBpbmdzLmVtcHR5ICgpKQorKwkgIHsKKysJICAgIHhmZXJfc3RhdHVz ID0gc2VjdGlvbl90YWJsZV94ZmVyX21lbW9yeV9wYXJ0aWFsCisrCQkJICAgIChyZWFkYnVmLCB3 cml0ZWJ1Ziwgb2Zmc2V0LCBsZW4sIHhmZXJlZF9sZW4sCisrCQkJICAgICBtX2NvcmVfZmlsZV9t YXBwaW5ncyk7CisrCSAgICBpZiAoeGZlcl9zdGF0dXMgPT0gVEFSR0VUX1hGRVJfT0spCisrCSAg ICAgIHJldHVybiB4ZmVyX3N0YXR1czsKKysJICB9CisgCistCSAgIFdlIGFsc28gY2hlY2sgdW5h dmFpbGFibGUgbWFwcGluZ3MgZHVlIHRvIERvY2tlci9BVUZTIGRyaXZlcgorLQkgICBpc3N1ZXMu ICAqLworLQlpZiAoIW1fY29yZV9maWxlX21hcHBpbmdzLmVtcHR5ICgpCistCSAgICB8fCAhbV9j b3JlX3VuYXZhaWxhYmxlX21hcHBpbmdzLmVtcHR5ICgpKQorKwkvKiBJZiB0aGUgYWNjZXNzIGlz IHdpdGhpbiBhbiB1bmF2YWlsYWJsZSBmaWxlIG1hcHBpbmcgdGhlbiB3ZSB0cnkKKysJICAgdG8g Y2hlY2sgaW4gdGhlIHN0cmF0dW0gYmVsb3cgKHRoZSBleGVjdXRhYmxlIHN0cmF0dW0pLiAgVGhl CisrCSAgIHRoaW5raW5nIGhlcmUgaXMgdGhhdCBpZiB0aGUgbWFwcGluZyB3YXMgcmVhZC93cml0 ZSB0aGVuIHRoZQorKwkgICBjb250ZW50cyB3b3VsZCBoYXZlIGJlZW4gd3JpdHRlbiBpbnRvIHRo ZSBjb3JlIGZpbGUgYW5kIHRoZQorKwkgICBhY2Nlc3Mgd291bGQgaGF2ZSBiZWVuIHNhdGlzZmll ZCBieSBtX2NvcmVfc2VjdGlvbl90YWJsZS4KKysKKysJICAgQnV0IGlmIHRoZSBhY2Nlc3MgaGFz IG5vdCB5ZXQgYmVlbiByZXNvbHZlZCB0aGVuIHdlIGNhbiBhc3N1bWUKKysJICAgdGhlIGFjY2Vz cyBpcyByZWFkLW9ubHkuICBJZiB0aGUgZXhlY3V0YWJsZSB3YXMgbm90IGZvdW5kCisrCSAgIGR1 cmluZyB0aGUgbWFwcGVkIGZpbGUgY2hlY2sgdGhlbiB3ZSdsbCBoYXZlIGFuIHVuYXZhaWxhYmxl CisrCSAgIG1hcHBpbmcgZW50cnksIGhvd2V2ZXIsIGlmIHRoZSB1c2VyIGhhcyBwcm92aWRlZCB0 aGUgZXhlY3V0YWJsZQorKwkgICAobWF5YmUgaW4gYSBkaWZmZXJlbnQgbG9jYXRpb24pIHRoZW4g d2UgbWlnaHQgYmUgYWJsZSB0bworKwkgICByZXNvbHZlIHRoZSBhY2Nlc3MgZnJvbSB0aGVyZS4K KysKKysJICAgSWYgdGhhdCBmYWlscywgYnV0IHRoZSBhY2Nlc3MgaXMgd2l0aGluIGFuIHVuYXZh aWxhYmxlIHJlZ2lvbiwKKysJICAgdGhlbiB0aGUgYWNjZXNzIGl0c2VsZiBzaG91bGQgZmFpbC4g ICovCisrCWZvciAoY29uc3QgYXV0byAmbXIgOiBtX2NvcmVfdW5hdmFpbGFibGVfbWFwcGluZ3Mp CisgCSAgeworLQkgICAgeGZlcl9zdGF0dXMgPSB4ZmVyX21lbW9yeV92aWFfbWFwcGluZ3MgKHJl YWRidWYsIHdyaXRlYnVmLCBvZmZzZXQsCisrCSAgICBpZiAobXIuY29udGFpbnMgKG9mZnNldCkp CisrCSAgICAgIHsKKysJCWlmICghbXIuY29udGFpbnMgKG9mZnNldCArIGxlbikpCisrCQkgIGxl biA9IG1yLnN0YXJ0ICsgbXIubGVuZ3RoIC0gb2Zmc2V0OworKworKwkJeGZlcl9zdGF0dXMKKysJ CSAgPSB0aGlzLT5iZW5lYXRoICgpLT54ZmVyX3BhcnRpYWwgKFRBUkdFVF9PQkpFQ1RfTUVNT1JZ LAorKwkJCQkJCSAgICBudWxscHRyLCByZWFkYnVmLAorKwkJCQkJCSAgICB3cml0ZWJ1Ziwgb2Zm c2V0LAorIAkJCQkJCSAgICBsZW4sIHhmZXJlZF9sZW4pOworKwkJaWYgKHhmZXJfc3RhdHVzID09 IFRBUkdFVF9YRkVSX09LKQorKwkJICByZXR1cm4gVEFSR0VUX1hGRVJfT0s7CisrCisrCQlyZXR1 cm4gVEFSR0VUX1hGRVJfRV9JTzsKKysJICAgICAgfQorKwkgIH0KKysKKysJLyogVGhlIGZvbGxv d2luZyBpcyBhY3RpbmcgYXMgYSBmYWxsYmFjayBpbiBjYXNlIHdlIGVuY291bnRlciBhCisrCSAg IHNpdHVhdGlvbiB3aGVyZSB0aGUgY29yZSBmaWxlIGlzIGxhY2tpbmcgYW5kIG1hcHBlZCBmaWxl CisrCSAgIGluZm9ybWF0aW9uLiAgSGVyZSB3ZSBxdWVyeSB0aGUgZXhlYyBmaWxlIHN0cmF0dW0g dG8gc2VlIGlmIGl0CisrCSAgIGNhbiByZXNvbHZlIHRoZSBhY2Nlc3MuICBEb2luZyB0aGlzIHdo ZW4gd2UgYXJlIG1pc3NpbmcgbWFwcGVkCisrCSAgIGZpbGUgaW5mb3JtYXRpb24gbWlnaHQgYmUg dGhlIGJlc3Qgd2UgY2FuIGRvLCBidXQgdGhlcmUgYXJlCisrCSAgIGNlcnRhaW5seSBjYXNlcyB0 aGlzIHdpbGwgZ2V0IHdyb25nLCBlLmcuIGlmIGFuIGluZmVyaW9yIGNyZWF0ZWQKKysJICAgYSB6 ZXJvIGluaXRpYWxpc2VkIG1hcHBpbmcgb3ZlciB0aGUgdG9wIG9mIHNvbWUgZGF0YSB0aGF0IGV4 aXN0cworKwkgICB3aXRoaW4gdGhlIGV4ZWN1dGFibGUgdGhlbiB0aGlzIHdpbGwgcmV0dXJuIHRo ZSBleGVjdXRhYmxlIGRhdGEKKysJICAgcmF0aGVyIHRoYW4gdGhlIHplcm8gZGF0YS4gIE1heWJl IHdlIHNob3VsZCBqdXN0IGRyb3AgdGhpcworKwkgICBibG9jaz8gICovCisrCWlmIChtX2NvcmVf ZmlsZV9tYXBwaW5ncy5lbXB0eSAoKQorKwkgICAgJiYgbV9jb3JlX3VuYXZhaWxhYmxlX21hcHBp bmdzLmVtcHR5ICgpKQorKwkgIHsKKysJICAgIHhmZXJfc3RhdHVzCisrCSAgICAgID0gdGhpcy0+ YmVuZWF0aCAoKS0+eGZlcl9wYXJ0aWFsIChvYmplY3QsIGFubmV4LCByZWFkYnVmLAorKwkJCQkJ CXdyaXRlYnVmLCBvZmZzZXQsIGxlbiwKKysJCQkJCQl4ZmVyZWRfbGVuKTsKKysJICAgIGlmICh4 ZmVyX3N0YXR1cyA9PSBUQVJHRVRfWEZFUl9PSykKKysJICAgICAgcmV0dXJuIFRBUkdFVF9YRkVS X09LOworIAkgIH0KKy0JZWxzZQorLQkgIHhmZXJfc3RhdHVzID0gdGhpcy0+YmVuZWF0aCAoKS0+ eGZlcl9wYXJ0aWFsIChvYmplY3QsIGFubmV4LCByZWFkYnVmLAorLQkJCQkJCQl3cml0ZWJ1Ziwg b2Zmc2V0LCBsZW4sCistCQkJCQkJCXhmZXJlZF9sZW4pOworLQlpZiAoeGZlcl9zdGF0dXMgPT0g VEFSR0VUX1hGRVJfT0spCistCSAgcmV0dXJuIFRBUkdFVF9YRkVSX09LOworIAorIAkvKiBGaW5h bGx5LCBhdHRlbXB0IHRvIGFjY2VzcyBkYXRhIGluIGNvcmUgZmlsZSBzZWN0aW9ucyB3aXRoCisg CSAgIG5vIGNvbnRlbnRzLiAgVGhlc2Ugd2lsbCB0eXBpY2FsbHkgcmVhZCBhcyBhbGwgemVyby4g ICovCitAQCAtMTUxNSw2ICsxODEzLDE4MiBAQCBtYWludGVuYW5jZV9wcmludF9jb3JlX2ZpbGVf YmFja2VkX21hcHBpbmdzIChjb25zdCBjaGFyICphcmdzLCBpbnQgZnJvbV90dHkpCisgICAgIHRh cmctPmluZm9fcHJvY19tYXBwaW5ncyAodGFyZy0+Y29yZV9nZGJhcmNoICgpKTsKKyB9CisgCisr LyogQWRkIG1vcmUgZGV0YWlscyBkaXNjb3ZlcmVkIHdoaWxlIHByb2Nlc3NpbmcgdGhlIGNvcmUt ZmlsZSdzIG1hcHBlZCBmaWxlCisrICAgaW5mb3JtYXRpb24sIHdlJ3JlIGJ1aWxkaW5nIG1hcHMg YmV0d2VlbiBmaWxlbmFtZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nCisrICAgYnVpbGQtaWRzLCBi ZXR3ZWVuIGFkZHJlc3MgcmFuZ2VzIGFuZCB0aGUgY29ycmVzcG9uZGluZyBidWlsZC1pZHMsIGFu ZAorKyAgIGFsc28gYSByZXZlcnNlIG1hcCBiZXR3ZWVuIGJ1aWxkLWlkIGFuZCB0aGUgY29ycmVz cG9uZGluZyBmaWxlbmFtZS4KKysKKysgICBTT05BTUUgaXMgdGhlIERUX1NPTkFNRSBhdHRyaWJ1 dGUgZXh0cmFjdGVkIGZyb20gdGhlIC5keW5hbWljIHNlY3Rpb24gb2YKKysgICBhIHNoYXJlZCBs aWJyYXJ5IHRoYXQgd2FzIG1hcHBlZCBpbnRvIHRoZSBjb3JlIGZpbGUuICBUaGlzIGNhbiBiZQor KyAgIG51bGxwdHIgaWYgdGhlIG1hcHBlZCBmaWxlcyB3YXMgbm90IGEgc2hhcmVkIGxpYnJhcnks IG9yIGRpZG4ndCBoYXZlIGEKKysgICBEVF9TT05BTUUgYXR0cmlidXRlLgorKworKyAgIEVYUEVD VEVEX0ZJTEVOQU1FIGlzIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHRoYXQgd2FzIG1hcHBlZCBpbnRv IHRoZQorKyAgIGluZmVyaW9yIGFzIGV4dHJhY3RlZCBmcm9tIHRoZSBjb3JlIGZpbGUsIHRoaXMg c2hvdWxkIG5ldmVyIGJlIG51bGxwdHIuCisrCisrICAgQUNUVUFMX0ZJTEVOQU1FIGlzIHRoZSBu YW1lIG9mIHRoZSBhY3R1YWwgZmlsZSBHREIgZm91bmQgdG8gcHJvdmlkZSB0aGUKKysgICBtYXBw ZWQgZmlsZSBpbmZvcm1hdGlvbiwgdGhpcyBjYW4gYmUgbnVsbHB0ciBpZiBHREIgZmFpbGVkIHRv IGZpbmQgYQorKyAgIHN1aXRhYmxlIGZpbGUuICBUaGlzIG1pZ2h0IGJlIGRpZmZlcmVudCB0byBF WFBFQ1RFRF9GSUxFTkFNRSwgZS5nLiBHREIKKysgICBtaWdodCBoYXZlIGRvd25sb2FkZWQgdGhl IGZpbGUgZnJvbSBkZWJ1Z2luZm9kIGFuZCBzbyBBQ1RVQUxfRklMRU5BTUUKKysgICB3aWxsIGJl IGEgZmlsZSBpbiB0aGUgZGVidWdpbmZvZCBjbGllbnQgY2FjaGUuCisrCisrICAgUkFOR0VTIGlz IHRoZSBsaXN0IG9mIG1lbW9yeSByYW5nZXMgYXQgd2hpY2ggdGhpcyBmaWxlIHdhcyBtYXBwZWQg aW50bworKyAgIHRoZSBpbmZlcmlvci4KKysKKysgICBCVUlMRF9JRCBpcyB0aGUgYnVpbGQtaWQg Zm9yIHRoaXMgbWFwcGVkIGZpbGUsIHRoaXMgd2lsbCBuZXZlciBiZQorKyAgIG51bGxwdHIuICBO b3QgZXZlcnkgbWFwcGVkIGZpbGUgd2lsbCBoYXZlIGEgYnVpbGQtaWQsIGJ1dCB0aGVyZSdzIG5v CisrICAgcG9pbnQgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIGlmIHdlIGZhaWxlZCB0byBmaW5kIGEg YnVpbGQtaWQ7IHRoaXMKKysgICBzdHJ1Y3R1cmUgb25seSBleGlzdHMgc28gd2UgY2FuIGxvb2t1 cCBmaWxlcyBiYXNlZCBvbiB0aGVpciBidWlsZC1pZC4gICovCisrCisrdm9pZAorK21hcHBlZF9m aWxlX2luZm86OmFkZCAoY29uc3QgY2hhciAqc29uYW1lLAorKwkJICAgICAgIGNvbnN0IGNoYXIg KmV4cGVjdGVkX2ZpbGVuYW1lLAorKwkJICAgICAgIGNvbnN0IGNoYXIgKmFjdHVhbF9maWxlbmFt ZSwKKysJCSAgICAgICBzdGQ6OnZlY3RvcjxtZW1fcmFuZ2U+ICYmcmFuZ2VzLAorKwkJICAgICAg IGNvbnN0IGJmZF9idWlsZF9pZCAqYnVpbGRfaWQpCisreworKyAgZ2RiX2Fzc2VydCAoYnVpbGRf aWQgIT0gbnVsbHB0cik7CisrICBnZGJfYXNzZXJ0IChleHBlY3RlZF9maWxlbmFtZSAhPSBudWxs cHRyKTsKKysKKysgIGlmIChzb25hbWUgIT0gbnVsbHB0cikKKysgICAgeworKyAgICAgIC8qIElm IHdlIGFscmVhZHkgaGF2ZSBhbiBlbnRyeSB3aXRoIHRoaXMgU09OQU1FIHRoZW4gdGhpcyBpbmRp Y2F0ZXMKKysJIHRoYXQgdGhlIGluZmVyaW9yIGhhcyB0d28gZmlsZXMgbWFwcGVkIGludG8gbWVt b3J5IHdpdGggZGlmZmVyZW50CisrCSBmaWxlIG5hbWVzIChhbmQgbW9zdCBsaWtlbHkgZGlmZmVy ZW50IGJ1aWxkLWlkcyksIGJ1dCB3aXRoIHRoZQorKwkgc2FtZSBEVF9TT05BTUUgYXR0cmlidXRl LiAgSW4gdGhpcyBjYXNlIHdlIGNhbid0IHVzZSB0aGUKKysJIERUX1NPTkFNRSB0byBmaWd1cmUg b3V0IHRoZSBleHBlY3RlZCBidWlsZC1pZCBvZiBhIHNoYXJlZAorKwkgbGlicmFyeSwgc28gcG9p c29uIHRoZSBlbnRyeSBmb3IgdGhpcyBTT05BTUUgYnkgc2V0dGluZyB0aGUgZW50cnkKKysJIHRv IG51bGxwdHIuICAqLworKyAgICAgIGF1dG8gaXQgPSBtX3NvbmFtZV90b19idWlsZF9pZF9tYXAu ZmluZCAoc29uYW1lKTsKKysgICAgICBpZiAoaXQgIT0gbV9zb25hbWVfdG9fYnVpbGRfaWRfbWFw LmVuZCAoKQorKwkgICYmIGl0LT5zZWNvbmQgIT0gbnVsbHB0cgorKwkgICYmICFidWlsZF9pZF9l cXVhbCAoaXQtPnNlY29uZCwgYnVpbGRfaWQpKQorKwltX3NvbmFtZV90b19idWlsZF9pZF9tYXBb c29uYW1lXSA9IG51bGxwdHI7CisrICAgICAgZWxzZQorKwltX3NvbmFtZV90b19idWlsZF9pZF9t YXBbc29uYW1lXSA9IGJ1aWxkX2lkOworKyAgICB9CisrCisrICAvKiBXaGVuIHRoZSBjb3JlIGZp bGUgaXMgaW5pdGlhbGx5IG9wZW5lZCBhbmQgdGhlIG1hcHBlZCBmaWxlcyBhcmUKKysgICAgIHBh cnNlZCwgd2UgZ3JvdXAgdGhlIGJ1aWxkLWlkIGluZm9ybWF0aW9uIGJhc2VkIG9uIHRoZSBmaWxl IG5hbWUuICBBcworKyAgICAgYSBjb25zZXF1ZW5jZSwgd2Ugc2hvdWxkIHNlZSBlYWNoIEVYUEVD VEVEX0ZJTEVOQU1FIHZhbHVlIGV4YWN0bHkKKysgICAgIG9uY2UuICBUaGlzIG1lYW5zIHRoYXQg ZWFjaCBpbnNlcnRpb24gc2hvdWxkIGFsd2F5cyBzdWNjZWVkLiAgKi8KKysgIGNvbnN0IGF1dG8g W2l0LCBpbnNlcnRlZF0KKysgICAgPSBtX2ZpbGVuYW1lX3RvX2J1aWxkX2lkX21hcC5lbXBsYWNl IChleHBlY3RlZF9maWxlbmFtZSwgYnVpbGRfaWQpOworKyAgZ2RiX2Fzc2VydCAoaW5zZXJ0ZWQp OworKworKyAgLyogU2V0dXAgdGhlIHJldmVyc2UgYnVpbGQtaWQgdG8gZmlsZSBuYW1lIG1hcC4g ICovCisrICBpZiAoYWN0dWFsX2ZpbGVuYW1lICE9IG51bGxwdHIpCisrICAgIG1fYnVpbGRfaWRf dG9fZmlsZW5hbWVfbWFwLmVtcGxhY2UgKGJ1aWxkX2lkLCBhY3R1YWxfZmlsZW5hbWUpOworKwor KyAgLyogU2V0dXAgdGhlIGxpc3Qgb2YgbWVtb3J5IHJhbmdlIHRvIGJ1aWxkLWlkIG9iamVjdHMu ICAqLworKyAgZm9yIChtZW1fcmFuZ2UgJnIgOiByYW5nZXMpCisrICAgIG1fYWRkcmVzc190b19i dWlsZF9pZF9saXN0LmVtcGxhY2VfYmFjayAoc3RkOjptb3ZlIChyKSwgYnVpbGRfaWQpOworKwor KyAgLyogQXQgdGhpcyBwb2ludCB0aGUgbV9hZGRyZXNzX3RvX2J1aWxkX2lkX2xpc3QgaXMgdW5z b3J0ZWQgKHdlIGp1c3QKKysgICAgIGFkZGVkIHNvbWUgZW50cmllcyB0byB0aGUgZW5kIG9mIHRo ZSBsaXN0KS4gIEFsbCBlbnRyaWVzIHNob3VsZCBiZQorKyAgICAgYWRkZWQgYmVmb3JlIGFueSBs b29rLXVwcyBhcmUgcGVyZm9ybWVkLCBhbmQgdGhlIGxpc3QgaXMgb25seSBzb3J0ZWQKKysgICAg IHdoZW4gdGhlIGZpcnN0IGxvb2stdXAgaXMgcGVyZm9ybWVkLiAgKi8KKysgIGdkYl9hc3NlcnQg KCFtX2FkZHJlc3NfdG9fYnVpbGRfaWRfbGlzdF9zb3J0ZWQpOworK30KKysKKysvKiBGSUxFTkFN RSBpcyB0aGUgbmFtZSBvZiBhIGZpbGUgR0RCIGlzIHRyeWluZyB0byBsb2FkLCBhbmQgQUREUiBp cworKyAgIChvcHRpb25hbGx5KSBhbiBhZGRyZXNzIHdpdGhpbiB0aGUgZmlsZSBpbiB0aGUgaW5m ZXJpb3IncyBhZGRyZXNzIHNwYWNlLgorKworKyAgIFNlYXJjaCB0aHJvdWdoIHRoZSBpbmZvcm1h dGlvbiBnYXRoZXJlZCBmcm9tIHRoZSBjb3JlLWZpbGUncyBtYXBwZWQgZmlsZQorKyAgIGluZm9y bWF0aW9uIGxvb2tpbmcgZm9yIGEgZmlsZSBuYW1lZCBGSUxFTkFNRSwgb3IgZm9yIGEgZmlsZSB0 aGF0IGNvdmVycworKyAgIEFERFIuICBJZiBhIG1hdGNoIGlzIGZvdW5kIHRoZW4gcmV0dXJuIHRo ZSBidWlsZC1pZCBmb3IgdGhlIGZpbGUgYWxvbmcKKysgICB3aXRoIHRoZSBsb2NhdGlvbiB3aGVy ZSBHREIgZm91bmQgdGhlIG1hcHBlZCBmaWxlLgorKworKyAgIFRoZSBsb2NhdGlvbiBvZiB0aGUg bWFwcGVkIGZpbGUgbWlnaHQgYmUgdGhlIGVtcHR5IHN0cmluZyBpZiBHREIgd2FzCisrICAgdW5h YmxlIHRvIGZpbmQgdGhlIG1hcHBlZCBmaWxlLgorKworKyAgIElmIG5vIGJ1aWxkLWlkIGNhbiBi ZSBmb3VuZCBmb3IgRklMRU5BTUUgdGhlbiBHREIgd2lsbCByZXR1cm4gYSBwYWlyCisrICAgY29u dGFpbmluZyBudWxscHRyIChmb3IgdGhlIGJ1aWxkLWlkKSBhbmQgYW4gZW1wdHkgc3RyaW5nIGZv ciB0aGUgZmlsZQorKyAgIG5hbWUuICAqLworKworK3N0ZDo6b3B0aW9uYWwgPGNvcmVfdGFyZ2V0 X21hcHBlZF9maWxlX2luZm8+CisrbWFwcGVkX2ZpbGVfaW5mbzo6bG9va3VwIChjb25zdCBjaGFy ICpmaWxlbmFtZSwKKysJCQkgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8Q09SRV9BRERSPiAmYWRkcikK Kyt7CisrICBpZiAoZmlsZW5hbWUgIT0gbnVsbHB0cikKKysgICAgeworKyAgICAgIC8qIElmIHRo ZXJlJ3MgYSBtYXRjaGluZyBlbnRyeSBpbiBtX2ZpbGVuYW1lX3RvX2J1aWxkX2lkX21hcCB0aGVu IHRoZQorKwkgYXNzb2NpYXRlZCBidWlsZC1pZCB3aWxsIG5vdCBiZSBudWxscHRyLCBhbmQgY2Fu IGJlIHVzZWQgdG8KKysJIHZhbGlkYXRlIHRoYXQgRklMRU5BTUUgaXMgY29ycmVjdC4gICovCisr ICAgICAgYXV0byBpdCA9IG1fZmlsZW5hbWVfdG9fYnVpbGRfaWRfbWFwLmZpbmQgKGZpbGVuYW1l KTsKKysgICAgICBpZiAoaXQgIT0gbV9maWxlbmFtZV90b19idWlsZF9pZF9tYXAuZW5kICgpKQor KwlyZXR1cm4gbWFrZV9yZXN1bHQgKGl0LT5zZWNvbmQpOworKyAgICB9CisrCisrICBpZiAoYWRk ci5oYXNfdmFsdWUgKCkpCisrICAgIHsKKysgICAgICAvKiBPbiB0aGUgZmlyc3QgbG9va3VwLCBz b3J0IHRoZSBhZGRyZXNzX3RvX2J1aWxkX2lkX2xpc3QuICAqLworKyAgICAgIGlmICghbV9hZGRy ZXNzX3RvX2J1aWxkX2lkX2xpc3Rfc29ydGVkKQorKwl7CisrCSAgc3RkOjpzb3J0IChtX2FkZHJl c3NfdG9fYnVpbGRfaWRfbGlzdC5iZWdpbiAoKSwKKysJCSAgICAgbV9hZGRyZXNzX3RvX2J1aWxk X2lkX2xpc3QuZW5kICgpLAorKwkJICAgICBbXSAoY29uc3QgbWVtX3JhbmdlX2FuZF9idWlsZF9p ZCAmYSwKKysJCQkgY29uc3QgbWVtX3JhbmdlX2FuZF9idWlsZF9pZCAmYikgeworKwkJICAgICAg IHJldHVybiBhLnJhbmdlIDwgYi5yYW5nZTsKKysJCSAgICAgfSk7CisrCSAgbV9hZGRyZXNzX3Rv X2J1aWxkX2lkX2xpc3Rfc29ydGVkID0gdHJ1ZTsKKysJfQorKworKyAgICAgIC8qIExvb2sgZm9y IHRoZSBmaXJzdCBlbnRyeSB3aG9zZSByYW5nZSdzIHN0YXJ0IGFkZHJlc3MgaXMgbm90IGxlc3MK KysJIHRoYW4sIG9yIGVxdWFsIHRvbywgdGhlIGFkZHJlc3MgQUREUi4gIElmIHdlIGZpbmQgc3Vj aCBhbiBlbnRyeSwKKysJIHRoZW4gdGhlIHByZXZpb3VzIGVudHJ5J3MgcmFuZ2UgbWlnaHQgY29u dGFpbiBBRERSLiAgSWYgaXQgZG9lcworKwkgdGhlbiB0aGF0IHByZXZpb3VzIGVudHJ5J3MgYnVp bGQtaWQgY2FuIGJlIHVzZWQuICAqLworKyAgICAgIGF1dG8gaXQgPSBzdGQ6Omxvd2VyX2JvdW5k CisrCShtX2FkZHJlc3NfdG9fYnVpbGRfaWRfbGlzdC5iZWdpbiAoKSwKKysJIG1fYWRkcmVzc190 b19idWlsZF9pZF9saXN0LmVuZCAoKSwKKysJICphZGRyLAorKwkgW10gKGNvbnN0IG1lbV9yYW5n ZV9hbmRfYnVpbGRfaWQgJmEsCisrCSAgICAgY29uc3QgQ09SRV9BRERSICZiKSB7CisrCSAgcmV0 dXJuIGEucmFuZ2Uuc3RhcnQgPD0gYjsKKysJfSk7CisrCisrICAgICAgaWYgKGl0ICE9IG1fYWRk cmVzc190b19idWlsZF9pZF9saXN0LmJlZ2luICgpKQorKwl7CisrCSAgLS1pdDsKKysKKysJICBp ZiAoaXQtPnJhbmdlLmNvbnRhaW5zICgqYWRkcikpCisrCSAgICByZXR1cm4gbWFrZV9yZXN1bHQg KGl0LT5idWlsZF9pZCk7CisrCX0KKysgICAgfQorKworKyAgaWYgKGZpbGVuYW1lICE9IG51bGxw dHIpCisrICAgIHsKKysgICAgICAvKiBJZiB0aGUgYmFzZW5hbWUgb2YgRklMRU5BTUUgYXBwZWFy cyBpbiBtX3NvbmFtZV90b19idWlsZF9pZF9tYXAKKysJIHRoZW4gd2hlbiB0aGUgbWFwcGVkIGZp bGVzIHdlcmUgcHJvY2Vzc2VkLCB3ZSBzYXcgYSBmaWxlIHdpdGggYQorKwkgRFRfU09OQU1FIGF0 dHJpYnV0ZSBjb3JyZXNwb25kaW5nIHRvIEZJTEVOQU1FLCB1c2UgdGhhdCBidWlsZC1pZAorKwkg dG8gdmFsaWRhdGUgRklMRU5BTUUuCisrCisrCSBIb3dldmVyLCB0aGUgYnVpbGQtaWQgaW4gdGhp cyBtYXAgbWlnaHQgYmUgbnVsbHB0ciBpZiB3ZSBzYXcKKysJIG11bHRpcGxlIG1hcHBlZCBmaWxl cyB3aXRoIHRoZSBzYW1lIERUX1NPTkFNRSBhdHRyaWJ1dGUgKHRob3VnaAorKwkgdGhpcyBzaG91 bGQgYmUgcHJldHR5IHJhcmUpLiAgKi8KKysgICAgICBhdXRvIGl0CisrCT0gbV9zb25hbWVfdG9f YnVpbGRfaWRfbWFwLmZpbmQgKGxiYXNlbmFtZSAoZmlsZW5hbWUpKTsKKysgICAgICBpZiAoaXQg IT0gbV9zb25hbWVfdG9fYnVpbGRfaWRfbWFwLmVuZCAoKQorKwkgICYmIGl0LT5zZWNvbmQgIT0g bnVsbHB0cikKKysJcmV0dXJuIG1ha2VfcmVzdWx0IChpdC0+c2Vjb25kKTsKKysgICAgfQorKwor KyAgcmV0dXJuIHt9OworK30KKysKKysvKiBTZWUgZ2RiY29yZS5oLiAgKi8KKysKKytzdGQ6Om9w dGlvbmFsIDxjb3JlX3RhcmdldF9tYXBwZWRfZmlsZV9pbmZvPgorK2NvcmVfdGFyZ2V0X2ZpbmRf bWFwcGVkX2ZpbGUgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLAorKwkJCSAgICAgIHN0ZDo6b3B0aW9u YWw8Q09SRV9BRERSPiBhZGRyKQorK3sKKysgIGNvcmVfdGFyZ2V0ICp0YXJnID0gZ2V0X2N1cnJl bnRfY29yZV90YXJnZXQgKCk7CisrICBpZiAodGFyZyA9PSBudWxscHRyIHx8IGN1cnJlbnRfcHJv Z3JhbV9zcGFjZS0+Y2JmZC5nZXQgKCkgPT0gbnVsbHB0cikKKysgICAgcmV0dXJuIHt9OworKwor KyAgcmV0dXJuIHRhcmctPmxvb2t1cF9tYXBwZWRfZmlsZV9pbmZvIChmaWxlbmFtZSwgYWRkcik7 CisrfQorKworIHZvaWQgX2luaXRpYWxpemVfY29yZWxvdyAoKTsKKyB2b2lkCisgX2luaXRpYWxp emVfY29yZWxvdyAoKQorZGlmZiAtLWdpdCBhL2dkYi9kYXRhLWRpcmVjdG9yeS9NYWtlZmlsZS5p biBiL2dkYi9kYXRhLWRpcmVjdG9yeS9NYWtlZmlsZS5pbgorLS0tIGEvZ2RiL2RhdGEtZGlyZWN0 b3J5L01ha2VmaWxlLmluCisrKysgYi9nZGIvZGF0YS1kaXJlY3RvcnkvTWFrZWZpbGUuaW4KK0BA IC03Nyw2ICs3Nyw4IEBAIFBZVEhPTl9GSUxFX0xJU1QgPSBcCisgCWdkYi9GcmFtZUl0ZXJhdG9y LnB5IFwKKyAJZ2RiL2ZyYW1lcy5weSBcCisgCWdkYi9taXNzaW5nX2RlYnVnLnB5IFwKKysJZ2Ri L21pc3Npbmdfb2JqZmlsZS5weSBcCisrCWdkYi9taXNzaW5nX2ZpbGVzLnB5IFwKKyAJZ2RiL3By aW50aW5nLnB5IFwKKyAJZ2RiL3Byb21wdC5weSBcCisgCWdkYi9zdHlsaW5nLnB5IFwKK0BAIC04 Niw3ICs4OCw3IEBAIFBZVEhPTl9GSUxFX0xJU1QgPSBcCisgCWdkYi9jb21tYW5kL19faW5pdF9f LnB5IFwKKyAJZ2RiL2NvbW1hbmQvZXhwbG9yZS5weSBcCisgCWdkYi9jb21tYW5kL2ZyYW1lX2Zp bHRlcnMucHkgXAorLQlnZGIvY29tbWFuZC9taXNzaW5nX2RlYnVnLnB5IFwKKysJZ2RiL2NvbW1h bmQvbWlzc2luZ19maWxlcy5weSBcCisgCWdkYi9jb21tYW5kL3ByZXR0eV9wcmludGVycy5weSBc CisgCWdkYi9jb21tYW5kL3Byb21wdC5weSBcCisgCWdkYi9jb21tYW5kL3R5cGVfcHJpbnRlcnMu cHkgXAorZGlmZiAtLWdpdCBhL2dkYi9kZWJ1Z2luZm9kLXN1cHBvcnQuYyBiL2dkYi9kZWJ1Z2lu Zm9kLXN1cHBvcnQuYworLS0tIGEvZ2RiL2RlYnVnaW5mb2Qtc3VwcG9ydC5jCisrKysgYi9nZGIv ZGVidWdpbmZvZC1zdXBwb3J0LmMKK0BAIC00MDksNyArNDA5LDcgQEAgZGVidWdpbmZvZF9leGVj X3F1ZXJ5IChjb25zdCB1bnNpZ25lZCBjaGFyICpidWlsZF9pZCwKKyAgIHN0ZDo6b3B0aW9uYWw8 dGFyZ2V0X3Rlcm1pbmFsOjpzY29wZWRfcmVzdG9yZV90ZXJtaW5hbF9zdGF0ZT4gdGVybV9zdGF0 ZTsKKyAKKyAgIHsKKy0gICAgdXNlcl9kYXRhIGRhdGEgKCJleGVjdXRhYmxlIGZvciIsIGZpbGVu YW1lKTsKKysgICAgdXNlcl9kYXRhIGRhdGEgKCJmaWxlIiwgZmlsZW5hbWUpOworIAorICAgICBk ZWJ1Z2luZm9kX3NldF91c2VyX2RhdGEgKGMsICZkYXRhKTsKKyAgICAgaWYgKHRhcmdldF9zdXBw b3J0c190ZXJtaW5hbF9vdXJzICgpKQorQEAgLTQyMyw3ICs0MjMsNyBAQCBkZWJ1Z2luZm9kX2V4 ZWNfcXVlcnkgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1aWxkX2lkLAorICAgICBkZWJ1Z2luZm9k X3NldF91c2VyX2RhdGEgKGMsIG51bGxwdHIpOworICAgfQorIAorLSAgcHJpbnRfb3V0Y29tZSAo ZmQuZ2V0ICgpLCAiZXhlY3V0YWJsZSBmb3IiLCBmaWxlbmFtZSk7CisrICBwcmludF9vdXRjb21l IChmZC5nZXQgKCksICJmaWxlIiwgZmlsZW5hbWUpOworIAorICAgaWYgKGZkLmdldCAoKSA+PSAw KQorICAgICBkZXN0bmFtZS0+cmVzZXQgKGRuYW1lKTsKK2RpZmYgLS1naXQgYS9nZGIvZG9jL2dk Yi50ZXhpbmZvIGIvZ2RiL2RvYy9nZGIudGV4aW5mbworLS0tIGEvZ2RiL2RvYy9nZGIudGV4aW5m bworKysrIGIvZ2RiL2RvYy9nZGIudGV4aW5mbworQEAgLTIxNzg2LDYgKzIxNzg2LDcgQEAKKyBA YyAoZWcgcm9vdGVkIGluIHZhbCBvZiBlbnYgdmFyIEdEQlNZTVMpIGNvdWxkIGV4aXN0IGZvciBt YXBwYWJsZSBzeW1ib2wKKyBAYyBmaWxlcy4KKyAKKytAYW5jaG9ye2NvcmUtZmlsZSBjb21tYW5k fQorIEBraW5kZXggY29yZS1maWxlCisgQGl0ZW0gY29yZS1maWxlIEBye1t9QHZhcntmaWxlbmFt ZX1AcntdfQorIEBpdGVteCBjb3JlCitAQCAtMjQ1MzQsNiArMjQ1MzUsMTAgQEAKKyBAdGFiIEBj b2Rle3ZGaWxlOmZzdGF0fQorIEB0YWIgSG9zdCBJL08KKyAKKytAaXRlbSBAY29kZXtob3N0aW8t c3RhdC1wYWNrZXR9CisrQHRhYiBAY29kZXt2RmlsZTpzdGF0fQorK0B0YWIgSG9zdCBJL08KKysK KyBAaXRlbSBAY29kZXtob3N0aW8tc2V0ZnMtcGFja2V0fQorIEB0YWIgQGNvZGV7dkZpbGU6c2V0 ZnN9CisgQHRhYiBIb3N0IEkvTworQEAgLTQ2Mjg5LDYgKzQ2Mjk0LDEzIEBACisgSWYgYW4gZXJy b3Igb2NjdXJzIHRoZSByZXR1cm4gdmFsdWUgaXMgLTEuICBUaGUgZm9ybWF0IG9mIHRoZQorIHJl dHVybmVkIGJpbmFyeSBhdHRhY2htZW50IGlzIGFzIGRlc2NyaWJlZCBpbiBAcmVme3N0cnVjdCBz dGF0fS4KKyAKKytAaXRlbSB2RmlsZTpzdGF0OiBAdmFye2ZpbGVuYW1lfQorK0dldCBpbmZvcm1h dGlvbiBhYm91dCB0aGUgZmlsZSBAdmFye2ZpbGVuYW1lfSBvbiB0aGUgdGFyZ2V0LgorK09uIHN1 Y2Nlc3MgdGhlIGluZm9ybWF0aW9uIGlzIHJldHVybmVkIGFzIGEgYmluYXJ5IGF0dGFjaG1lbnQK KythbmQgdGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgc2l6ZSBvZiB0aGlzIGF0dGFjaG1lbnQgaW4g Ynl0ZXMuCisrSWYgYW4gZXJyb3Igb2NjdXJzIHRoZSByZXR1cm4gdmFsdWUgaXMgLTEuICBUaGUg Zm9ybWF0IG9mIHRoZQorK3JldHVybmVkIGJpbmFyeSBhdHRhY2htZW50IGlzIGFzIGRlc2NyaWJl ZCBpbiBAcmVme3N0cnVjdCBzdGF0fS4KKysKKyBAaXRlbSB2RmlsZTp1bmxpbms6IEB2YXJ7Zmls ZW5hbWV9CisgRGVsZXRlIHRoZSBmaWxlIGF0IEB2YXJ7ZmlsZW5hbWV9IG9uIHRoZSB0YXJnZXQu ICBSZXR1cm4gMCwKKyBvciAtMSBpZiBhbiBlcnJvciBvY2N1cnMuICBUaGUgQHZhcntmaWxlbmFt ZX0gaXMgYSBzdHJpbmcuCitkaWZmIC0tZ2l0IGEvZ2RiL2RvYy9weXRob24udGV4aSBiL2dkYi9k b2MvcHl0aG9uLnRleGkKKy0tLSBhL2dkYi9kb2MvcHl0aG9uLnRleGkKKysrKyBiL2dkYi9kb2Mv cHl0aG9uLnRleGkKK0BAIC0yMzEsNiArMjMxLDcgQEAKKyAqIFRVSSBXaW5kb3dzIEluIFB5dGhv bjo6ICAgICAgIEltcGxlbWVudGluZyBuZXcgVFVJIHdpbmRvd3MuCisgKiBEaXNhc3NlbWJseSBJ biBQeXRob246OiAgICAgICBJbnN0cnVjdGlvbiBEaXNhc3NlbWJseSBJbiBQeXRob24KKyAqIE1p c3NpbmcgRGVidWcgSW5mbyBJbiBQeXRob246OiBIYW5kbGUgbWlzc2luZyBkZWJ1ZyBpbmZvIGZy b20gUHl0aG9uLgorKyogTWlzc2luZyBPYmpmaWxlcyBJbiBQeXRob246OiAgSGFuZGxlIG9iamZp bGVzIGZyb20gUHl0aG9uLgorIEBlbmQgbWVudQorIAorIEBub2RlIEJhc2ljIFB5dGhvbgorQEAg LTUzNzAsMTAgKzUzNzEsMTEgQEAKKyBvYmplY3RzLiAgQHhyZWZ7RnJhbWUgRmlsdGVyIEFQSX0s IGZvciBtb3JlIGluZm9ybWF0aW9uLgorIEBlbmQgZGVmdmFyCisgCistQGRlZnZhciBQcm9nc3Bh Y2UubWlzc2luZ19kZWJ1Z19oYW5kbGVycworLVRoZSBAY29kZXttaXNzaW5nX2RlYnVnX2hhbmRs ZXJzfSBhdHRyaWJ1dGUgaXMgYSBsaXN0IG9mIHRoZSBtaXNzaW5nCistZGVidWcgaGFuZGxlciBv YmplY3RzIGZvciB0aGlzIHByb2dyYW0gc3BhY2UuICBAeHJlZntNaXNzaW5nIERlYnVnCistSW5m byBJbiBQeXRob259LCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKytAZGVmdmFyIFByb2dzcGFjZS5t aXNzaW5nX2ZpbGVfaGFuZGxlcnMKKytUaGUgQGNvZGV7bWlzc2luZ19maWxlX2hhbmRsZXJzfSBh dHRyaWJ1dGUgaXMgYSBsaXN0IG9mIHR1cGxlcy4gIEVhY2gKKyt0dXBsZSBob2xkcyBhIG1pc3Np bmctZmlsZSBoYW5kbGVyIG9iamVjdCBmb3IgdGhpcyBwcm9ncmFtIHNwYWNlLiAgRm9yCisrbW9y ZSBpbmZvcm1hdGlvbiwgQHB4cmVme01pc3NpbmcgRGVidWcgSW5mbyBJbiBQeXRob259LCBhbmQK KytAcmVme01pc3NpbmcgT2JqZmlsZXMgSW4gUHl0aG9ufS4KKyBAZW5kIGRlZnZhcgorIAorIEEg cHJvZ3JhbSBzcGFjZSBoYXMgdGhlIGZvbGxvd2luZyBtZXRob2RzOgorQEAgLTU1NDksNiArNTU1 MSw3IEBACisgQGNvZGV7Z2RiLk9iamZpbGUuYWRkX3NlcGFyYXRlX2RlYnVnX2ZpbGV9IG1ldGhv ZCwgZGVzY3JpYmVkIGJlbG93LgorIEBlbmQgZGVmdmFyCisgCisrQGFuY2hvcntPYmpmaWxlLmJ1 aWxkX2lkfQorIEBkZWZ2YXIgT2JqZmlsZS5idWlsZF9pZAorIFRoZSBidWlsZCBJRCBvZiB0aGUg b2JqZmlsZSBhcyBhIHN0cmluZy4KKyBJZiB0aGUgb2JqZmlsZSBkb2VzIG5vdCBoYXZlIGEgYnVp bGQgSUQgdGhlbiB0aGUgdmFsdWUgaXMgQGNvZGV7Tm9uZX0uCitAQCAtODEzNyw2ICs4MTQwLDE4 OSBAQAorIGZvciB0aGlzIG9iamZpbGUuCisgQGVuZCBkZWZ1bgorIAorK0Bub2RlIE1pc3Npbmcg T2JqZmlsZXMgSW4gUHl0aG9uCisrQHN1YnN1YnNlY3Rpb24gTWlzc2luZyBPYmpmaWxlcyBJbiBQ eXRob24KKytAY2luZGV4IHB5dGhvbiwgaGFuZGxlIG1pc3Npbmcgb2JqZmlsZXMKKysKKytXaGVu IEB2YWx1ZXtHREJOfSBvcGVucyBhIGNvcmUgZmlsZSwgZm9yIGV4YW1wbGUgd2l0aCB0aGUKKytA a2Jke2NvcmUtZmlsZX0gY29tbWFuZCAoQHB4cmVme2NvcmUtZmlsZSBjb21tYW5kfSksIEB2YWx1 ZXtHREJOfSB3aWxsCisrYXR0ZW1wdCB0byBsb2FkIHRoZSBjb3JyZXNwb25kaW5nIGV4ZWN1dGFi bGUgYW5kIHNoYXJlZCBsaWJyYXJpZXMuCisrT2Z0ZW4gdGhlc2UgZmlsZXMgY2FuIGJlIGZvdW5k IG9uIHRoZSBsb2NhbCBtYWNoaW5lLCBidXQgc29tZXRpbWVzCisrdGhlc2UgZmlsZXMgY2Fubm90 IGJlIGZvdW5kLCBpbiB3aGljaCBjYXNlIHRoZSBkZWJ1Z2dpbmcgZXhwZXJpZW5jZQorK3dpbGwg YmUgcmVzdHJpY3RlZC4KKysKKytJZiBAdmFsdWV7R0RCTn0gZmFpbHMgdG8gbG9jYXRlIGEgcGFy dGljdWxhciBmaWxlIHRoZW4gdGhlcmUgaXMgYW4KKytvcHBvcnR1bml0eSBmb3IgYSBQeXRob24g ZXh0ZW5zaW9uIHRvIHN0ZXAgaW4uICBBIFB5dGhvbiBleHRlbnNpb24gY2FuCisrcG90ZW50aWFs bHkgbG9jYXRlIHRoZSBtaXNzaW5nIGZpbGUgdXNpbmcgc29tZSBwbGF0Zm9ybS0gb3IKKytwcm9q ZWN0LXNwZWNpZmljIHN0ZXBzLCBhbmQgaW5mb3JtIEB2YWx1ZXtHREJOfSBvZiBpdHMgbG9jYXRp b24uICBPciBhCisrUHl0aG9uIGV4dGVuc2lvbiBtaWdodCBwcm92aWRlIHNvbWUgcGxhdGZvcm0t IG9yIHByb2plY3Qtc3BlY2lmaWMKKythZHZpY2UgdG8gdGhlIHVzZXIgYWJvdXQgaG93IHRvIG9i dGFpbiB0aGUgbWlzc2luZyBmaWxlLgorKworK0EgbWlzc2luZy1vYmpmaWxlIFB5dGhvbiBleHRl bnNpb24gY29uc2lzdHMgb2YgYSBoYW5kbGVyIG9iamVjdCB3aGljaAorK2hhcyB0aGUgQGNvZGV7 bmFtZX0gYW5kIEBjb2Rle2VuYWJsZWR9IGF0dHJpYnV0ZXMsIGFuZCBpbXBsZW1lbnRzIHRoZQor K0Bjb2Rle19fY2FsbF9ffSBtZXRob2QuICBXaGVuIEB2YWx1ZXtHREJOfSBlbmNvdW50ZXJzIGEg c2l0dWF0aW9uCisrd2hlcmUgYSBmaWxlIGNhbm5vdCBiZSBmb3VuZCwgYnV0IHRoZSBidWlsZC1p ZCAoQHB4cmVme2J1aWxkIElEfSkgZm9yCisrdGhlIG1pc3NpbmcgZmlsZSBpcyBrbm93biwgdGhl biB0aGUgQGNvZGV7X19jYWxsX199IG1ldGhvZCBpcyBpbnZva2VkCisrdG8gdHJ5IGFuZCBmaW5k IHRoZSBmaWxlLiAgRnVsbCBkZXRhaWxzIG9mIGhvdyBoYW5kbGVycyBhcmUgd3JpdHRlbgorK2Nh biBiZSBmb3VuZCBiZWxvdy4KKysKKytAc3ViaGVhZGluZyBUaGUgQGNvZGV7Z2RiLm1pc3Npbmdf b2JqZmlsZX0gTW9kdWxlCisrCisrQHZhbHVle0dEQk59IGNvbWVzIHdpdGggYSBAY29kZXtnZGIu bWlzc2luZ19vYmpmaWxlfSBtb2R1bGUgd2hpY2gKKytjb250YWlucyB0aGUgZm9sbG93aW5nIGNs YXNzIGFuZCBnbG9iYWwgZnVuY3Rpb246CisrCisrQGRlZnRwe2NsYXNzfSBnZGIubWlzc2luZ19v YmpmaWxlLk1pc3NpbmdPYmpmaWxlSGFuZGxlcgorKworK0Bjb2Rle01pc3NpbmdPYmpmaWxlSGFu ZGxlcn0gaXMgYSBiYXNlIGNsYXNzIGZyb20gd2hpY2ggdXNlci1jcmVhdGVkCisraGFuZGxlcnMg Y2FuIGRlcml2ZSwgdGhvdWdoIGl0IGlzIG5vdCByZXF1aXJlZCB0aGF0IGhhbmRsZXJzIGRlcml2 ZQorK2Zyb20gdGhpcyBjbGFzcywgc28gbG9uZyBhcyBhbnkgdXNlciBjcmVhdGVkIGhhbmRsZXIg aGFzIHRoZQorK0Bjb2Rle25hbWV9IGFuZCBAY29kZXtlbmFibGVkfSBhdHRyaWJ1dGVzLCBhbmQg aW1wbGVtZW50cyB0aGUKKytAY29kZXtfX2NhbGxfX30gbWV0aG9kLgorKworK0BkZWZ1biBNaXNz aW5nT2JqZmlsZUhhbmRsZXIuX19pbml0X18gKG5hbWUpCisrVGhlIEB2YXJ7bmFtZX0gaXMgYSBz dHJpbmcgdXNlZCB0byByZWZlcmVuY2UgdGhpcyBtaXNzaW5nLW9iamZpbGUKKytoYW5kbGVyIHdp dGhpbiBzb21lIEB2YWx1ZXtHREJOfSBjb21tYW5kcy4gIFZhbGlkIG5hbWVzIGNvbnNpc3Qgb2Yg dGhlCisrY2hhcmFjdGVycyBAc2FtcHtbLV9hLXpBLVowLTldfSwgY3JlYXRpbmcgYSBoYW5kbGVy IHdpdGggYW4gaW52YWxpZAorK25hbWUgcmFpc2VzIGEgQGNvZGV7VmFsdWVFcnJvcn0gZXhjZXB0 aW9uLgorK0BlbmQgZGVmdW4KKysKKytAZGVmdW4gTWlzc2luZ09iamZpbGVIYW5kbGVyLl9fY2Fs bF9fIChwc3BhY2UsIGJ1aWxkX2lkLCBmaWxlbmFtZSkKKysKKytTdWItY2xhc3NlcyBtdXN0IG92 ZXJyaWRlIHRoZSBAY29kZXtfX2NhbGxfX30gbWV0aG9kLiAgVGhlCisrQHZhcntwc3BhY2V9IGFy Z3VtZW50IHdpbGwgYmUgYSBAY29kZXtnZGIuUHJvZ3NwYWNlfQorKyhAcHhyZWZ7UHJvZ3NwYWNl cyBJbiBQeXRob259KSwgdGhpcyBpcyB0aGUgcHJvZ3JhbSBzcGFjZSBpbiB3aGljaAorK0B2YWx1 ZXtHREJOfSBpcyBsb29raW5nIGZvciB0aGUgbWlzc2luZyBmaWxlLgorKworK1RoZSBAdmFye2J1 aWxkX2lkfSBhcmd1bWVudCBpcyBhIHN0cmluZyBjb250YWluaW5nIHRoZSBidWlsZC1pZCBvZiB0 aGUKKytmaWxlIHRoYXQgaXMgbWlzc2luZywgdGhpcyB3aWxsIGJlIGluIHRoZSBzYW1lIGZvcm1h dCBhcyByZXR1cm5lZCBieQorK0Bjb2Rle09iamZpbGUuYnVpbGRfaWR9IChAcHhyZWZ7T2JqZmls ZS5idWlsZF9pZH0pLgorKworK1RoZSBAdmFye2ZpbGVuYW1lfSBhcmd1bWVudCBjb250YWlucyB0 aGUgbmFtZSBvZiB0aGUgZmlsZSB0aGF0CisrQHZhbHVle0dEQk59IGlzIGxvb2tpbmcgZm9yLiAg VGhpcyBpbmZvcm1hdGlvbiBpcyBwcm92aWRlZCB0byBhbGxvdworK2hhbmRsZXJzIHRvIGdlbmVy YXRlIGluZm9ybWF0aXZlIG1lc3NhZ2VzIGZvciB0aGUgdXNlci4gIEEgaGFuZGxlciBpcworK25v dCByZXF1aXJlZCB0byBwbGFjZSB0aGUgbWlzc2luZyBmaWxlIGF0IHRoaXMgbG9jYXRpb24uICBU aGVyZSBtaWdodAorK2FscmVhZHkgYmUgYSBmaWxlIHByZXNlbnQgYXQgdGhpcyBsb2NhdGlvbiwg YnV0IGl0IG1pZ2h0IG5vdCBtYXRjaCB0aGUKKytyZXF1aXJlZCBidWlsZC1pZCwgaW4gd2hpY2gg Y2FzZSBAdmFsdWV7R0RCTn0gd2lsbCBoYXZlIGlnbm9yZWQgaXQuCisrSW4gc29tZSBsaW1pdGVk IGNhc2VzIEB2YWx1ZXtHREJOfSBtaWdodCBub3QgYmUgYWJsZSB0byBlc3RhYmxpc2ggdGhlCisr QHZhcntmaWxlbmFtZX0gb2YgdGhlIGZpbGUgaXQgaXMgc2VhcmNoaW5nIGZvciwgaW4gdGhpcyBj YXNlCisrQHZhbHVle0dEQk59IHdpbGwgdXNlIGEgc3RyaW5nIEBzYW1we3dpdGggYnVpbGQtaWQg QHZhcntidWlsZF9pZH19IGFzIGEKKytyZXBsYWNlbWVudC4KKysKKytUaGUgcmV0dXJuIHZhbHVl IGZyb20gdGhlIEBjb2Rle19fY2FsbF9ffSBtZXRob2QgaW5kaWNhdGVzIHdoYXQKKytAdmFsdWV7 R0RCTn0gc2hvdWxkIGRvIG5leHQuICBUaGUgcG9zc2libGUgcmV0dXJuIHZhbHVlcyBhcmU6Cisr CisrQGl0ZW1pemUgQGJ1bGxldAorK0BpdGVtIEBjb2Rle05vbmV9CisrCisrVGhpcyBpbmRpY2F0 ZXMgdGhhdCB0aGlzIGhhbmRsZXIgY291bGQgbm90IGxvY2F0ZSB0aGUgbWlzc2luZyBmaWxlIGFu ZAorK0B2YWx1ZXtHREJOfSBzaG91bGQgY2FsbCBhbnkgb3RoZXIgcmVnaXN0ZXJlZCBoYW5kbGVy cy4KKysKKytAaXRlbSBAY29kZXtUcnVlfQorKworK1RoaXMgaW5kaWNhdGVzIHRoYXQgdGhpcyBo YW5kbGVyIGhhcyBpbnN0YWxsZWQgdGhlIG1pc3NpbmcgZmlsZSBpbnRvIGEKKytsb2NhdGlvbiB3 aGVyZSBAdmFsdWV7R0RCTn0gd291bGQgbm9ybWFsbHkgZXhwZWN0IHRvIGZpbmQgaXQuICBUaGUK Kytvbmx5IGxvY2F0aW9uIGluIHdoaWNoIEB2YWx1ZXtHREJOfSB3aWxsIGxvb2sgaXMgd2l0aGlu IHRoZQorK0BmaWxley5idWlsZC1pZH0gc3ViLWRpcmVjdG9yeSB3aXRoaW4gdGhlIEB2YXJ7ZGVi dWctZmlsZS1kaXJlY3Rvcnl9CisrKEBweHJlZntkZWJ1Zy1maWxlLWRpcmVjdG9yeX0pLgorKwor K0B2YWx1ZXtHREJOfSB3aWxsIHJlcGVhdCB0aGUgbm9ybWFsIGxvb2t1cCBwcm9jZXNzLCB3aGlj aCBzaG91bGQgbm93CisrZmluZCB0aGUgcHJldmlvdXNseSBtaXNzaW5nIGZpbGUuCisrCisrSWYg QHZhbHVle0dEQk59IHN0aWxsIGRvZXNuJ3QgZmluZCBmaWxlIGFmdGVyIHRoaXMgc2Vjb25kIGF0 dGVtcHQsCisrdGhlbiB0aGUgUHl0aG9uIG1pc3Npbmctb2JqZmlsZSBoYW5kbGVycyBhcmUgbm90 IGludm9rZWQgYSBzZWNvbmQKKyt0aW1lLCB0aGlzIHByZXZlbnRzIGEgYmFkbHkgYmVoYXZlZCBo YW5kbGVyIGNhdXNpbmcgQHZhbHVle0dEQk59IHRvCisrZ2V0IHN0dWNrIGluIGEgbG9vcC4gIEB2 YWx1ZXtHREJOfSB3aWxsIGNvbnRpbnVlIHdpdGhvdXQgdGhlIG1pc3NpbmcKKytmaWxlLCB0aG91 Z2ggdGhpcyB3aWxsIGRlZ3JhZGUgdGhlIGRlYnVnZ2luZyBleHBlcmllbmNlLgorKworK0BpdGVt IEBjb2Rle0ZhbHNlfQorKworK1RoaXMgaW5kaWNhdGVzIHRoYXQgdGhpcyBoYW5kbGVyIGhhcyBk b25lIGV2ZXJ5dGhpbmcgdGhhdCBpdCBpbnRlbmRzCisrdG8gZG8gYnV0IHRoZSBtaXNzaW5nIGZp bGUgY291bGQgbm90IGJlIGZvdW5kLiAgQHZhbHVle0dEQk59IHdpbGwgbm90CisrY2FsbCBhbnkg b3RoZXIgcmVnaXN0ZXJlZCBoYW5kbGVycyB0byBsb29rIGZvciB0aGUgbWlzc2luZyBmaWxlLgor K0B2YWx1ZXtHREJOfSB3aWxsIGNvbnRpbnVlIHdpdGhvdXQgdGhlIG1pc3NpbmcgZmlsZSwgdGhv dWdoIHRoaXMgd2lsbAorK2RlZ3JhZGUgdGhlIGRlYnVnZ2luZyBleHBlcmllbmNlLgorKworK0Bp dGVtIEEgc3RyaW5nCisrCisrVGhlIHJldHVybmVkIHN0cmluZyBzaG91bGQgY29udGFpbiBhIGZp bGVuYW1lLiAgQHZhbHVle0dEQk59IHdpbGwgbm90CisrY2FsbCBhbnkgZnVydGhlciByZWdpc3Rl cmVkIGhhbmRsZXJzLCBhbmQgd2lsbCBpbnN0ZWFkIHVzZSB0aGUKKytyZXR1cm5lZCBmaWxlbmFt ZSBhcyB0aGUgbWlzc2luZyBmaWxlLgorK0BlbmQgaXRlbWl6ZQorKworK0ludm9raW5nIHRoZSBA Y29kZXtfX2NhbGxfX30gbWV0aG9kIGZyb20gdGhpcyBiYXNlIGNsYXNzIHdpbGwgcmFpc2UgYQor K0Bjb2Rle05vdEltcGxlbWVudGVkRXJyb3J9IGV4Y2VwdGlvbi4KKytAZW5kIGRlZnVuCisrCisr QGRlZnZhciBNaXNzaW5nT2JqZmlsZUhhbmRsZXIubmFtZQorK0EgcmVhZC1vbmx5IGF0dHJpYnV0 ZSB3aGljaCBpcyBhIHN0cmluZywgdGhlIG5hbWUgb2YgdGhpcyBoYW5kbGVyCisrcGFzc2VkIHRv IHRoZSBAY29kZXtfX2luaXRfX30gbWV0aG9kLgorK0BlbmQgZGVmdmFyCisrCisrQGRlZnZhciBN aXNzaW5nT2JqZmlsZUhhbmRsZXIuZW5hYmxlZAorK0EgbW9kaWZpYWJsZSBhdHRyaWJ1dGUgY29u dGFpbmluZyBhIGJvb2xlYW47IHdoZW4gQGNvZGV7VHJ1ZX0sIHRoZQorK2hhbmRsZXIgaXMgZW5h YmxlZCwgYW5kIHdpbGwgYmUgdXNlZCBieSBAdmFsdWV7R0RCTn0uICBXaGVuCisrQGNvZGV7RmFs c2V9LCB0aGUgaGFuZGxlciBoYXMgYmVlbiBkaXNhYmxlZCwgYW5kIHdpbGwgbm90IGJlIHVzZWQu CisrQGVuZCBkZWZ2YXIKKytAZW5kIGRlZnRwCisrCisrQGRlZnVuIGdkYi5taXNzaW5nX29iamZp bGUucmVnaXN0ZXJfaGFuZGxlciAobG9jdXMsIGhhbmRsZXIsIHJlcGxhY2U9QGNvZGV7RmFsc2V9 KQorK1JlZ2lzdGVyIGEgbmV3IG1pc3Npbmctb2JqZmlsZSBoYW5kbGVyIHdpdGggQHZhbHVle0dE Qk59LgorKworK0B2YXJ7aGFuZGxlcn0gaXMgYW4gaW5zdGFuY2Ugb2YgYSBzdWItY2xhc3Mgb2YK KytAY29kZXtNaXNzaW5nT2JqZmlsZUhhbmRsZXJ9LCBvciBhdCBsZWFzdCBhbiBpbnN0YW5jZSBv ZiBhbiBvYmplY3QgdGhhdAorK2hhcyB0aGUgc2FtZSBhdHRyaWJ1dGVzIGFuZCBtZXRob2RzIGFz IEBjb2Rle01pc3NpbmdPYmpmaWxlSGFuZGxlcn0uCisrCisrQHZhcntsb2N1c30gc3BlY2lmaWVz IHRvIHdoaWNoIGhhbmRsZXIgbGlzdCB0byBwcmVwZW5kIEB2YXJ7aGFuZGxlcn0uCisrSXQgY2Fu IGJlIGVpdGhlciBhIEBjb2Rle2dkYi5Qcm9nc3BhY2V9IChAcHhyZWZ7UHJvZ3NwYWNlcyBJbiBQ eXRob259KQorK29yIEBjb2Rle05vbmV9LCBpbiB3aGljaCBjYXNlIHRoZSBoYW5kbGVyIGlzIHJl Z2lzdGVyZWQgZ2xvYmFsbHkuICBUaGUKKytuZXdseSByZWdpc3RlcmVkIEB2YXJ7aGFuZGxlcn0g d2lsbCBiZSBjYWxsZWQgYmVmb3JlIGFueSBvdGhlciBoYW5kbGVyCisrZnJvbSB0aGUgc2FtZSBs b2N1cy4gIFR3byBoYW5kbGVycyBpbiB0aGUgc2FtZSBsb2N1cyBjYW5ub3QgaGF2ZSB0aGUKKytz YW1lIG5hbWUsIGFuIGF0dGVtcHQgdG8gYWRkIGEgaGFuZGxlciB3aXRoIGFuIGFscmVhZHkgZXhp c3RpbmcgbmFtZQorK3JhaXNlcyBhbiBleGNlcHRpb24gdW5sZXNzIEB2YXJ7cmVwbGFjZX0gaXMg QGNvZGV7VHJ1ZX0sIGluIHdoaWNoIGNhc2UKKyt0aGUgb2xkIGhhbmRsZXIgaXMgZGVsZXRlZCBh bmQgdGhlIG5ldyBoYW5kbGVyIGlzIHByZXBlbmRlZCB0byB0aGUKKytzZWxlY3RlZCBoYW5kbGVy IGxpc3QuCisrCisrQHZhbHVle0dEQk59IGZpcnN0IGNhbGxzIHRoZSBoYW5kbGVycyBmb3IgdGhl IGN1cnJlbnQgcHJvZ3JhbSBzcGFjZSwKKythbmQgdGhlbiB0aGUgZ2xvYmFsbHkgcmVnaXN0ZXJl ZCBoYW5kbGVycy4gIEFzIHNvb24gYXMgYSBoYW5kbGVyCisrcmV0dXJucyBhIHZhbHVlIG90aGVy IHRoYW4gQGNvZGV7Tm9uZX0sIG5vIGZ1cnRoZXIgaGFuZGxlcnMgYXJlCisrY2FsbGVkLgorK0Bl bmQgZGVmdW4KKysKKytAc3ViaGVhZGluZyBNYW5hZ2luZyBNaXNzaW5nLU9iamZpbGUgSGFuZGxl cnMKKysKKytAdmFsdWV7R0RCTn0gZGVmaW5lcyB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIHRvIG1h bmFnZSByZWdpc3RlcmVkCisrbWlzc2luZy1vYmpmaWxlIGhhbmRsZXJzOgorKworK0B0YWJsZSBA Y29kZQorKworK0BraW5kZXggaW5mbyBtaXNzaW5nLW9iamZpbGUtaGFuZGxlcnMKKytAaXRlbSBp bmZvIG1pc3Npbmctb2JqZmlsZS1oYW5kbGVycyBAcntbfSBAdmFye2xvY3VzfSBAcntbfSBAdmFy e25hbWUtcmVnZXhwfSBAcntdfSBAcntdfQorK0xpc3RzIGFsbCByZWdpc3RlcmVkIG1pc3Npbmct b2JqZmlsZSBoYW5kbGVycy4gIEFyZ3VtZW50cyBAdmFye2xvY3VzfQorK2FuZCBAdmFye25hbWUt cmVnZXhwfSBhcmUgYm90aCBvcHRpb25hbCBhbmQgY2FuIGJlIHVzZWQgdG8gZmlsdGVyCisrd2hp Y2ggaGFuZGxlcnMgYXJlIGxpc3RlZC4KKysKKytUaGUgQHZhcntsb2N1c30gYXJndW1lbnQgc2hv dWxkIGJlIGVpdGhlciBAa2Jke2dsb2JhbH0sCisrQGtiZHtwcm9nc3BhY2V9LCBvciB0aGUgbmFt ZSBvZiBhbiBvYmplY3QgZmlsZS4gIE9ubHkgaGFuZGxlcnMKKytyZWdpc3RlcmVkIGZvciB0aGUg c3BlY2lmaWVkIGxvY3VzIHdpbGwgYmUgbGlzdGVkLgorKworK1RoZSBAdmFye25hbWUtcmVnZXhw fSBpcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB1c2VkIHRvIG1hdGNoIGFnYWluc3QKKytoYW5kbGVy IG5hbWVzLgorKworK0BraW5kZXggZGlzYWJsZSBtaXNzaW5nLW9iamZpbGUtaGFuZGxlcgorK0Bp dGVtIGRpc2FibGUgbWlzc2luZy1vYmpmaWxlLWhhbmRsZXIgQHJ7W30gQHZhcntsb2N1c30gQHJ7 W30gQHZhcntuYW1lLXJlZ2V4cH0gQHJ7XX0gQHJ7XX0KKytUaGUgQHZhcntsb2N1c30gYW5kIEB2 YXJ7bmFtZS1yZWdleHB9IGFyZSBpbnRlcnByZXRlZCBhcyBpbiBAa2Jke2luZm8KKyttaXNzaW5n LW9iamZpbGUtaGFuZGxlcnN9IGFib3ZlLCBidXQgaW5zdGVhZCBvZiBsaXN0aW5nIHRoZSBtYXRj aGluZworK2hhbmRsZXJzLCBhbGwgb2YgdGhlIG1hdGNoaW5nIGhhbmRsZXJzIGFyZSBkaXNhYmxl ZC4gIFRoZQorK0Bjb2Rle2VuYWJsZWR9IGZpZWxkIG9mIGVhY2ggbWF0Y2hpbmcgaGFuZGxlciBp cyBzZXQgdG8gQGNvZGV7RmFsc2V9LgorKworK0BraW5kZXggZW5hYmxlIG1pc3Npbmctb2JqZmls ZS1oYW5kbGVyCisrQGl0ZW0gZW5hYmxlIG1pc3Npbmctb2JqZmlsZS1oYW5kbGVyIEBye1t9IEB2 YXJ7bG9jdXN9IEBye1t9IEB2YXJ7bmFtZS1yZWdleHB9IEBye119IEBye119CisrVGhlIEB2YXJ7 bG9jdXN9IGFuZCBAdmFye25hbWUtcmVnZXhwfSBhcmUgaW50ZXJwcmV0ZWQgYXMgaW4gQGtiZHtp bmZvCisrbWlzc2luZy1vYmpmaWxlLWhhbmRsZXJzfSBhYm92ZSwgYnV0IGluc3RlYWQgb2YgbGlz dGluZyB0aGUgbWF0Y2hpbmcKKytoYW5kbGVycywgYWxsIG9mIHRoZSBtYXRjaGluZyBoYW5kbGVy cyBhcmUgZW5hYmxlZC4gIFRoZQorK0Bjb2Rle2VuYWJsZWR9IGZpZWxkIG9mIGVhY2ggbWF0Y2hp bmcgaGFuZGxlciBpcyBzZXQgdG8gQGNvZGV7VHJ1ZX0uCisrQGVuZCB0YWJsZQorKworIEBub2Rl IFB5dGhvbiBBdXRvLWxvYWRpbmcKKyBAc3Vic2VjdGlvbiBQeXRob24gQXV0by1sb2FkaW5nCisg QGNpbmRleCBQeXRob24gYXV0by1sb2FkaW5nCitkaWZmIC0tZ2l0IGEvZ2RiL2V4dGVuc2lvbi1w cml2LmggYi9nZGIvZXh0ZW5zaW9uLXByaXYuaAorLS0tIGEvZ2RiL2V4dGVuc2lvbi1wcml2LmgK KysrKyBiL2dkYi9leHRlbnNpb24tcHJpdi5oCitAQCAtMjg3LDkgKzI4NywyMiBAQCBzdHJ1Y3Qg ZXh0ZW5zaW9uX2xhbmd1YWdlX29wcworICAgLyogR2l2ZSBleHRlbnNpb24gbGFuZ3VhZ2VzIGEg Y2hhbmNlIHRvIGRlYWwgd2l0aCBtaXNzaW5nIGRlYnVnCisgICAgICBpbmZvcm1hdGlvbi4gIE9C SkZJTEUgaXMgdGhlIGZpbGUgZm9yIHdoaWNoIEdEQiB3YXMgdW5hYmxlIHRvIGZpbmQKKyAgICAg IGFueSBkZWJ1ZyBpbmZvcm1hdGlvbi4gICovCistICBleHRfbGFuZ19taXNzaW5nX2RlYnVnaW5m b19yZXN1bHQKKysgIGV4dF9sYW5nX21pc3NpbmdfZmlsZV9yZXN1bHQKKyAgICAgKCpoYW5kbGVf bWlzc2luZ19kZWJ1Z2luZm8pIChjb25zdCBzdHJ1Y3QgZXh0ZW5zaW9uX2xhbmd1YWdlX2RlZm4g KiwKKyAJCQkJIHN0cnVjdCBvYmpmaWxlICpvYmpmaWxlKTsKKysKKysgIC8qIEdpdmUgZXh0ZW5z aW9uIGxhbmd1YWdlcyBhIGNoYW5jZSB0byBkZWFsIHdpdGggbWlzc2luZyBvYmpmaWxlcy4KKysg ICAgIFBTUEFDRSBpcyB0aGUgcHJvZ3JhbSBzcGFjZSBpbiB3aGljaCBHREIgaXMgc2VhcmNoaW5n IGZvciBhIG1pc3NpbmcKKysgICAgIG9iamZpbGUsIGFuZCB3aWxsIG5vdCBiZSBOVUxMLiAgQlVJ TERfSUQgaXMgdGhlIGJ1aWxkLWlkIG9mIHRoZQorKyAgICAgb2JqZmlsZSB3ZSdyZSBsb29raW5n IGZvciwgYW5kIHdpbGwgbm90IGJlIE5VTEwuICBGSUxFTkFNRSBpcyB0aGUgbmFtZQorKyAgICAg b2YgdGhlIGZpbGUgd2UncmUgbG9va2luZyBmb3IsIGFuZCB3aWxsIG5vdCBiZSBOVUxMLiAgU2Vl CisrICAgICBleHRfbGFuZ19maW5kX29iamZpbGVfZnJvbV9idWlsZGlkIGZvciBzb21lIGFkZGl0 aW9uYWwgaW5mb3JtYXRpb24KKysgICAgIGFib3V0IHRoZSBtZWFuaW5nIG9mIEZJTEVOQU1FLiAg Ki8KKysgIGV4dF9sYW5nX21pc3NpbmdfZmlsZV9yZXN1bHQKKysgICAgKCpmaW5kX29iamZpbGVf ZnJvbV9idWlsZGlkKSAoY29uc3Qgc3RydWN0IGV4dGVuc2lvbl9sYW5ndWFnZV9kZWZuICosCisr CQkJCSAgcHJvZ3JhbV9zcGFjZSAqcHNwYWNlLAorKwkJCQkgIGNvbnN0IHN0cnVjdCBiZmRfYnVp bGRfaWQgKmJ1aWxkX2lkLAorKwkJCQkgIGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKKyB9OworIAor IC8qIFN0YXRlIG5lY2Vzc2FyeSB0byByZXN0b3JlIGEgc2lnbmFsIGhhbmRsZXIgdG8gaXRzIHBy ZXZpb3VzIHZhbHVlLiAgKi8KK2RpZmYgLS1naXQgYS9nZGIvZXh0ZW5zaW9uLmMgYi9nZGIvZXh0 ZW5zaW9uLmMKKy0tLSBhL2dkYi9leHRlbnNpb24uYworKysrIGIvZ2RiL2V4dGVuc2lvbi5jCitA QCAtMTA0MCw3ICsxMDQwLDcgQEAgZXh0X2xhbmdfcHJpbnRfaW5zbiAoc3RydWN0IGdkYmFyY2gg KmdkYmFyY2gsIENPUkVfQUREUiBhZGRyZXNzLAorIAorIC8qIFNlZSBleHRlbnNpb24uaC4gICov CisgCistZXh0X2xhbmdfbWlzc2luZ19kZWJ1Z2luZm9fcmVzdWx0CisrZXh0X2xhbmdfbWlzc2lu Z19maWxlX3Jlc3VsdAorIGV4dF9sYW5nX2hhbmRsZV9taXNzaW5nX2RlYnVnaW5mbyAoc3RydWN0 IG9iamZpbGUgKm9iamZpbGUpCisgeworICAgZm9yIChjb25zdCBzdHJ1Y3QgZXh0ZW5zaW9uX2xh bmd1YWdlX2RlZm4gKmV4dGxhbmcgOiBleHRlbnNpb25fbGFuZ3VhZ2VzKQorQEAgLTEwNDgsNyAr MTA0OCw3IEBAIGV4dF9sYW5nX2hhbmRsZV9taXNzaW5nX2RlYnVnaW5mbyAoc3RydWN0IG9iamZp bGUgKm9iamZpbGUpCisgICAgICAgaWYgKGV4dGxhbmctPm9wcyA9PSBudWxscHRyCisgCSAgfHwg ZXh0bGFuZy0+b3BzLT5oYW5kbGVfbWlzc2luZ19kZWJ1Z2luZm8gPT0gbnVsbHB0cikKKyAJY29u dGludWU7CistICAgICAgZXh0X2xhbmdfbWlzc2luZ19kZWJ1Z2luZm9fcmVzdWx0IHJlc3VsdAor KyAgICAgIGV4dF9sYW5nX21pc3NpbmdfZmlsZV9yZXN1bHQgcmVzdWx0CisgCT0gZXh0bGFuZy0+ b3BzLT5oYW5kbGVfbWlzc2luZ19kZWJ1Z2luZm8gKGV4dGxhbmcsIG9iamZpbGUpOworICAgICAg IGlmICghcmVzdWx0LmZpbGVuYW1lICgpLmVtcHR5ICgpIHx8IHJlc3VsdC50cnlfYWdhaW4gKCkp CisgCXJldHVybiByZXN1bHQ7CitAQCAtMTA1Nyw2ICsxMDU3LDI4IEBAIGV4dF9sYW5nX2hhbmRs ZV9taXNzaW5nX2RlYnVnaW5mbyAoc3RydWN0IG9iamZpbGUgKm9iamZpbGUpCisgICByZXR1cm4g e307CisgfQorIAorKy8qIFNlZSBleHRlbnNpb24uaC4gICovCisrCisrZXh0X2xhbmdfbWlzc2lu Z19maWxlX3Jlc3VsdAorK2V4dF9sYW5nX2ZpbmRfb2JqZmlsZV9mcm9tX2J1aWxkaWQgKHByb2dy YW1fc3BhY2UgKnBzcGFjZSwKKysJCQkJICAgIGNvbnN0IHN0cnVjdCBiZmRfYnVpbGRfaWQgKmJ1 aWxkX2lkLAorKwkJCQkgICAgY29uc3QgY2hhciAqZmlsZW5hbWUpCisreworKyAgZm9yIChjb25z dCBzdHJ1Y3QgZXh0ZW5zaW9uX2xhbmd1YWdlX2RlZm4gKmV4dGxhbmcgOiBleHRlbnNpb25fbGFu Z3VhZ2VzKQorKyAgICB7CisrICAgICAgaWYgKGV4dGxhbmctPm9wcyA9PSBudWxscHRyCisrCSAg fHwgZXh0bGFuZy0+b3BzLT5maW5kX29iamZpbGVfZnJvbV9idWlsZGlkID09IG51bGxwdHIpCisr CWNvbnRpbnVlOworKyAgICAgIGV4dF9sYW5nX21pc3NpbmdfZmlsZV9yZXN1bHQgcmVzdWx0Cisr CT0gZXh0bGFuZy0+b3BzLT5maW5kX29iamZpbGVfZnJvbV9idWlsZGlkIChleHRsYW5nLCBwc3Bh Y2UsIGJ1aWxkX2lkLAorKwkJCQkJCSAgIGZpbGVuYW1lKTsKKysgICAgICBpZiAoIXJlc3VsdC5m aWxlbmFtZSAoKS5lbXB0eSAoKSB8fCByZXN1bHQudHJ5X2FnYWluICgpKQorKwlyZXR1cm4gcmVz dWx0OworKyAgICB9CisrCisrICByZXR1cm4ge307CisrfQorKworIC8qIENhbGxlZCB2aWEgYW4g b2JzZXJ2ZXIgYmVmb3JlIGdkYiBwcmludHMgaXRzIHByb21wdC4KKyAgICBJdGVyYXRlIG92ZXIg dGhlIGV4dGVuc2lvbiBsYW5ndWFnZXMgZ2l2aW5nIHRoZW0gYSBjaGFuY2UgdG8KKyAgICBjaGFu Z2UgdGhlIHByb21wdC4gIFRoZSBmaXJzdCBvbmUgdG8gY2hhbmdlIHRoZSBwcm9tcHQgd2lucywK K2RpZmYgLS1naXQgYS9nZGIvZXh0ZW5zaW9uLmggYi9nZGIvZXh0ZW5zaW9uLmgKKy0tLSBhL2dk Yi9leHRlbnNpb24uaAorKysrIGIvZ2RiL2V4dGVuc2lvbi5oCitAQCAtMzYsNiArMzYsNyBAQCBz dHJ1Y3QgdWlfZmlsZTsKKyBzdHJ1Y3QgdWlfb3V0OworIHN0cnVjdCB2YWx1ZTsKKyBzdHJ1Y3Qg dmFsdWVfcHJpbnRfb3B0aW9uczsKKytzdHJ1Y3QgcHJvZ3JhbV9zcGFjZTsKKyAKKyAvKiBBIGZ1 bmN0aW9uIHRvIGxvYWQgYW5kIHByb2Nlc3MgYSBzY3JpcHQgZmlsZS4KKyAgICBUaGUgZmlsZSBo YXMgYmVlbiBvcGVuZWQgYW5kIGlzIHJlYWR5IHRvIGJlIHJlYWQgZnJvbSB0aGUgYmVnaW5uaW5n LgorQEAgLTM1OCwyMyArMzU5LDIzIEBAIGV4dGVybiBzdGQ6Om9wdGlvbmFsPGludD4gZXh0X2xh bmdfcHJpbnRfaW5zbgorICAgIGl0LiAgQW5kIHRoZSB0aGlyZCBvcHRpb24gaXMgZm9yIHRoZSBl eHRlbnNpb24gdG8ganVzdCByZXR1cm4gYSBudWxsCisgICAgcmVzdWx0LCBpbmRpY2F0aW9uIHRo ZXJlIGlzIG5vdGhpbmcgdGhlIGV4dGVuc2lvbiBjYW4gZG8gdG8gcHJvdmlkZSB0aGUKKyAgICBt aXNzaW5nIGRlYnVnIGluZm9ybWF0aW9uLiAgKi8KKy1zdHJ1Y3QgZXh0X2xhbmdfbWlzc2luZ19k ZWJ1Z2luZm9fcmVzdWx0Cisrc3RydWN0IGV4dF9sYW5nX21pc3NpbmdfZmlsZV9yZXN1bHQKKyB7 CisgICAvKiBEZWZhdWx0IHJlc3VsdC4gIFRoZSBleHRlbnNpb24gd2FzIHVuYWJsZSB0byBwcm92 aWRlIHRoZSBtaXNzaW5nIGRlYnVnCisgICAgICBpbmZvLiAgKi8KKy0gIGV4dF9sYW5nX21pc3Np bmdfZGVidWdpbmZvX3Jlc3VsdCAoKQorKyAgZXh0X2xhbmdfbWlzc2luZ19maWxlX3Jlc3VsdCAo KQorICAgeyAvKiBOb3RoaW5nLiAgKi8gfQorIAorICAgLyogV2hlbiBUUllfQUdBSU4gaXMgdHJ1 ZSBHREIgc2hvdWxkIHRyeSBzZWFyY2hpbmcgYWdhaW4sIHRoZSBleHRlbnNpb24KKyAgICAgIG1h eSBoYXZlIGluc3RhbGxlZCB0aGUgbWlzc2luZyBkZWJ1ZyBpbmZvIGludG8gYSBzdWl0YWJsZSBs b2NhdGlvbi4KKyAgICAgIFdoZW4gVFJZX0FHQUlOIGlzIGZhbHNlIHRoaXMgaXMgZXF1aXZhbGVu dCB0byB0aGUgZGVmYXVsdCwgbm8KKyAgICAgIGFyZ3VtZW50LCBjb25zdHJ1Y3Rvci4gICovCist ICBleHRfbGFuZ19taXNzaW5nX2RlYnVnaW5mb19yZXN1bHQgKGJvb2wgdHJ5X2FnYWluKQorKyAg ZXh0X2xhbmdfbWlzc2luZ19maWxlX3Jlc3VsdCAoYm9vbCB0cnlfYWdhaW4pCisgICAgIDogbV90 cnlfYWdhaW4gKHRyeV9hZ2FpbikKKyAgIHsgLyogTm90aGluZy4gICovIH0KKyAKKyAgIC8qIExv b2sgaW4gRklMRU5BTUUgZm9yIHRoZSBtaXNzaW5nIGRlYnVnIGluZm8uICAqLworLSAgZXh0X2xh bmdfbWlzc2luZ19kZWJ1Z2luZm9fcmVzdWx0IChzdGQ6OnN0cmluZyAmJmZpbGVuYW1lKQorKyAg ZXh0X2xhbmdfbWlzc2luZ19maWxlX3Jlc3VsdCAoc3RkOjpzdHJpbmcgJiZmaWxlbmFtZSkKKyAg ICAgOiBtX2ZpbGVuYW1lIChzdGQ6Om1vdmUgKGZpbGVuYW1lKSkKKyAgIHsgLyogTm90aGluZy4g ICovIH0KKyAKK0BAIC00MDQsOSArNDA1LDI4IEBAIHN0cnVjdCBleHRfbGFuZ19taXNzaW5nX2Rl YnVnaW5mb19yZXN1bHQKKyAKKyAvKiBDYWxsZWQgd2hlbiBHREIgZmFpbGVkIHRvIGZpbmQgYW55 IGRlYnVnIGluZm9ybWF0aW9uIGZvciBPQkpGSUxFLiAgKi8KKyAKKy1leHRlcm4gZXh0X2xhbmdf bWlzc2luZ19kZWJ1Z2luZm9fcmVzdWx0IGV4dF9sYW5nX2hhbmRsZV9taXNzaW5nX2RlYnVnaW5m bworK2V4dGVybiBleHRfbGFuZ19taXNzaW5nX2ZpbGVfcmVzdWx0IGV4dF9sYW5nX2hhbmRsZV9t aXNzaW5nX2RlYnVnaW5mbworICAgKHN0cnVjdCBvYmpmaWxlICpvYmpmaWxlKTsKKyAKKysvKiBD YWxsZWQgd2hlbiBHREIgb3BlbnMgYSBjb3JlLWZpbGUgdG8gZmluZCBhbnkgb2JqZWN0IGZpbGVz IGZvciB3aGljaCBhCisrICAgYnVpbGQtaWQgY291bGQgYmUgZXh0cmFjdGVkIGZyb20gdGhlIGNv cmUtZmlsZSwgYnV0IHRoZSBtYXRjaGluZyBmaWxlCisrICAgY291bGQgbm90IG90aGVyd2lzZSBi ZSBmb3VuZCBieSBHREIuCisrCisrICAgUFNQQUNFIGlzIHRoZSBwcm9ncmFtIHNwYWNlIGluIHdo aWNoIEdEQiBpcyBvcGVuaW5nIHRoZSBjb3JlLWZpbGUgYW5kCisrICAgaXMgbG9va2luZyBmb3Ig YSBtaXNzaW5nIG9iamVjdCBmaWxlLiAgQlVJTERfSUQgaXMgdGhlIGJ1aWxkLWlkIG9mIHRoZQor KyAgIGZpbGUgYmVpbmcgbG9va2VkIGZvciwgYW5kIHdpbGwgbm90IGJlIE5VTEwuICBGSUxFTkFN RSBpcyB0aGUgbmFtZSBvZgorKyAgIHRoZSBmaWxlIEdEQiBpcyBsb29raW5nIGZvciwgdGhpcyB3 aWxsIG5vdCBiZSBOVUxMLiAgVGhlIEZJTEVOQU1FIGlzCisrICAgcHJvdmlkZWQgb25seSBmb3Ig Y3JlYXRpbmcgaGVscGZ1bCBtZXNzYWdlcyBmb3IgdGhlIHVzZXIuICBGSUxFTkFNRQorKyAgIG1p Z2h0IGFscmVhZHkgZXhpc3Qgb24gZGlzayBidXQgaGF2ZSB0aGUgd3JvbmcgYnVpbGQtaWQsIG9m IEZJTEVOQU1FCisrICAgbWlnaHQgbm90IGV4aXN0IG9uIGRpc2suICBJZiB0aGUgbWlzc2luZyBv YmpmaWxlIGNhbiBiZSBmb3VuZCB0aGVuIGl0CisrICAgZG9lcyBub3QgaGF2ZSB0byBiZSBwbGFj ZWQgYXQgdGhlIGxvY2F0aW9uIEZJTEVOQU1FLgorKworKyAgIFRoZSByZXR1cm5lZCBvYmplY3Qg aW5kaWNhdGVzIGlmIHRoZSBmaWxlIGNvdWxkIGJlIGZvdW5kIG9yIG5vdC4gICovCisrCisrZXh0 ZXJuIGV4dF9sYW5nX21pc3NpbmdfZmlsZV9yZXN1bHQgZXh0X2xhbmdfZmluZF9vYmpmaWxlX2Zy b21fYnVpbGRpZAorKyAgKHByb2dyYW1fc3BhY2UgKnBzcGFjZSwgY29uc3Qgc3RydWN0IGJmZF9i dWlsZF9pZCAqYnVpbGRfaWQsCisrICAgY29uc3QgY2hhciAqZmlsZW5hbWUpOworKworICNpZiBH REJfU0VMRl9URVNUCisgbmFtZXNwYWNlIHNlbGZ0ZXN0cyB7CisgZXh0ZXJuIHZvaWQgKCpob29r X3NldF9hY3RpdmVfZXh0X2xhbmcpICgpOworZGlmZiAtLWdpdCBhL2dkYi9nZGJjb3JlLmggYi9n ZGIvZ2RiY29yZS5oCistLS0gYS9nZGIvZ2RiY29yZS5oCisrKysgYi9nZGIvZ2RiY29yZS5oCitA QCAtMTk2LDQgKzE5Niw3MCBAQCBjbGFzcyB0aHJlYWRfc2VjdGlvbl9uYW1lCisgICBzdGQ6OnN0 cmluZyBtX3N0b3JhZ2U7CisgfTsKKyAKKysvKiBUeXBlIHJldHVybmVkIGZyb20gY29yZV90YXJn ZXRfZmluZF9tYXBwZWRfZmlsZS4gIEhvbGRzIGluZm9ybWF0aW9uCisrICAgYWJvdXQgYSBtYXBw ZWQgZmlsZSB0aGF0IHdhcyBwcm9jZXNzZWQgd2hlbiBhIGNvcmUgZmlsZSB3YXMgaW5pdGlhbGx5 CisrICAgbG9hZGVkLiAgKi8KKytzdHJ1Y3QgY29yZV90YXJnZXRfbWFwcGVkX2ZpbGVfaW5mbwor K3sKKysgIC8qIENvbnN0cnVjdG9yLiAgQlVJTERfSUQgaXMgbm90IG51bGxwdHIsIGFuZCBpcyB0 aGUgYnVpbGQtaWQgZm9yIHRoZQorKyAgICAgbWFwcGVkIGZpbGUuICBGSUxFTkFNRSBpcyB0aGUg bG9jYXRpb24gb2YgdGhlIGZpbGUgdGhhdCBHREIgbG9hZGVkIHRvCisrICAgICBwcm92aWRlIHRo ZSBtYXBwZWQgZmlsZS4gIFRoaXMgbWlnaHQgYmUgZGlmZmVyZW50IGZyb20gdGhlIG5hbWUgb2Yg dGhlCisrICAgICBtYXBwZWQgZmlsZSBtZW50aW9uZWQgaW4gdGhlIGNvcmUgZmlsZSwgZS5nLiBp ZiBHREIgZG93bmxvYWRzIGEgZmlsZQorKyAgICAgZnJvbSBkZWJ1Z2luZm9kIHRoZW4gRklMRU5B TUUgd291bGQgcG9pbnQgaW50byB0aGUgZGVidWdpbmZvZCBjbGllbnQKKysgICAgIGNhY2hlLiAg VGhlIEZJTEVOQU1FIGNhbiBiZSB0aGUgZW1wdHkgc3RyaW5nIGlmIEdEQiB3YXMgdW5hYmxlIHRv IGZpbmQKKysgICAgIGEgZmlsZSB0byBwcm92aWRlIHRoZSBtYXBwZWQgZmlsZS4gICovCisrCisr ICBjb3JlX3RhcmdldF9tYXBwZWRfZmlsZV9pbmZvIChjb25zdCBiZmRfYnVpbGRfaWQgKmJ1aWxk X2lkLAorKwkJCQljb25zdCBzdGQ6OnN0cmluZyBmaWxlbmFtZSkKKysgICAgOiBtX2J1aWxkX2lk IChidWlsZF9pZCksCisrICAgICAgbV9maWxlbmFtZSAoZmlsZW5hbWUpCisrICB7CisrICAgIGdk Yl9hc3NlcnQgKG1fYnVpbGRfaWQgIT0gbnVsbHB0cik7CisrICB9CisrCisrICAvKiBUaGUgYnVp bGQtaWQgZm9yIHRoaXMgbWFwcGVkIGZpbGUuICAqLworKworKyAgY29uc3QgYmZkX2J1aWxkX2lk ICoKKysgIGJ1aWxkX2lkICgpIGNvbnN0CisrICB7CisrICAgIHJldHVybiBtX2J1aWxkX2lkOwor KyAgfQorKworKyAgLyogVGhlIGZpbGUgR0RCIHVzZWQgdG8gcHJvdmlkZSB0aGlzIG1hcHBlZCBm aWxlLiAgKi8KKysKKysgIGNvbnN0IHN0ZDo6c3RyaW5nICYKKysgIGZpbGVuYW1lICgpIGNvbnN0 CisrICB7CisrICAgIHJldHVybiBtX2ZpbGVuYW1lOworKyAgfQorKworK3ByaXZhdGU6CisrICBj b25zdCBiZmRfYnVpbGRfaWQgKm1fYnVpbGRfaWQgPSBudWxscHRyOworKyAgY29uc3Qgc3RkOjpz dHJpbmcgbV9maWxlbmFtZTsKKyt9OworKworKy8qIElmIHRoZSBjdXJyZW50IGluZmVyaW9yIGhh cyBhIGNvcmVfdGFyZ2V0IGZvciBpdHMgcHJvY2VzcyB0YXJnZXQsIHRoZW4KKysgICBsb29rdXAg aW5mb3JtYXRpb24gYWJvdXQgYSBtYXBwZWQgZmlsZSB0aGF0IHdhcyBkaXNjb3ZlcmVkIHdoZW4g dGhlCisrICAgY29yZSBmaWxlIHdhcyBsb2FkZWQuCisrCisrICAgVGhlIEZJTEVOQU1FIGlzIHRo ZSBmaWxlIHdlJ3JlIGxvb2tpbmcgZm9yLiAgVGhlIEFERFIsIGlmIHByb3ZpZGVkLCBpcyBhCisr ICAgbWFwcGVkIGFkZHJlc3Mgd2l0aGluIHRoZSBpbmZlcmlvciB3aGljaCBpcyBrbm93biB0byBi ZSBwYXJ0IG9mIHRoZSBmaWxlCisrICAgd2UgYXJlIGxvb2tpbmcgZm9yLgorKworKyAgIEFzIGFu IGV4YW1wbGUsIHdoZW4gbG9hZGluZyBzaGFyZWQgbGlicmFyaWVzIHRoaXMgZnVuY3Rpb24gY2Fu IGJlCisrICAgY2FsbGVkLCBpbiB0aGF0IGNhc2UgRklMRU5BTUUgd2lsbCBiZSB0aGUgbmFtZSBv ZiB0aGUgc2hhcmVkIGxpYnJhcnkKKysgICB0aGF0IEdEQiBpcyB0cnlpbmcgdG8gbG9hZCBhbmQg QUREUiB3aWxsIGJlIGFuIGluZmVyaW9yIGFkZHJlc3Mgd2hpY2ggaXMKKysgICBwYXJ0IG9mIHRo ZSBzaGFyZWQgbGlicmFyeSB3ZSBhcmUgbG9va2luZyBmb3IuCisrCisrICAgVGhpcyBmdW5jdGlv biBsb29rcyBmb3IgYSBtYXBwZWQgZmlsZSB3aGljaCBtYXRjaGVzIEZJTEVOQU1FIGFuZC9vcgor KyAgIHdoaWNoIGNvdmVycyBBRERSIGFuZCByZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IHRoYXQg ZmlsZS4KKysKKysgICBUaGUgcmV0dXJuZWQgaW5mb3JtYXRpb24gaW5jbHVkZXMgdGhlIG5hbWUg b2YgdGhlIG1hcHBlZCBmaWxlIGlmIGtub3duCisrICAgYW5kIHRoZSBidWlsZC1pZCBmb3IgdGhl IG1hcHBlZCBmaWxlIGlmIGtub3duLgorKworKyAgICovCisrc3RkOjpvcHRpb25hbDxjb3JlX3Rh cmdldF9tYXBwZWRfZmlsZV9pbmZvPgorK2NvcmVfdGFyZ2V0X2ZpbmRfbWFwcGVkX2ZpbGUgKGNv bnN0IGNoYXIgKmZpbGVuYW1lLAorKwkJCSAgICAgIHN0ZDo6b3B0aW9uYWw8Q09SRV9BRERSPiBh ZGRyKTsKKysKKyAjZW5kaWYgLyogIWRlZmluZWQgKEdEQkNPUkVfSCkgKi8KK2RpZmYgLS1naXQg YS9nZGIvaW5mLWNoaWxkLmMgYi9nZGIvaW5mLWNoaWxkLmMKKy0tLSBhL2dkYi9pbmYtY2hpbGQu YworKysrIGIvZ2RiL2luZi1jaGlsZC5jCitAQCAtMzIwLDYgKzMyMCwyMSBAQCBpbmZfY2hpbGRf dGFyZ2V0OjpmaWxlaW9fZnN0YXQgKGludCBmZCwgc3RydWN0IHN0YXQgKnNiLCBmaWxlaW9fZXJy b3IgKnRhcmdldF9lcgorICAgcmV0dXJuIHJldDsKKyB9CisgCisrLyogSW1wbGVtZW50YXRpb24g b2YgdG9fZmlsZWlvX3N0YXQuICAqLworKworK2ludAorK2luZl9jaGlsZF90YXJnZXQ6OmZpbGVp b19zdGF0IChzdHJ1Y3QgaW5mZXJpb3IgKmluZiwgY29uc3QgY2hhciAqZmlsZW5hbWUsCisrCQkJ ICAgICAgIHN0cnVjdCBzdGF0ICpzYiwgZmlsZWlvX2Vycm9yICp0YXJnZXRfZXJybm8pCisrewor KyAgaW50IHJldDsKKysKKysgIHJldCA9IGxzdGF0IChmaWxlbmFtZSwgc2IpOworKyAgaWYgKHJl dCA9PSAtMSkKKysgICAgKnRhcmdldF9lcnJubyA9IGhvc3RfdG9fZmlsZWlvX2Vycm9yIChlcnJu byk7CisrCisrICByZXR1cm4gcmV0OworK30KKysKKyAvKiBJbXBsZW1lbnRhdGlvbiBvZiB0b19m aWxlaW9fY2xvc2UuICAqLworIAorIGludAorZGlmZiAtLWdpdCBhL2dkYi9pbmYtY2hpbGQuaCBi L2dkYi9pbmYtY2hpbGQuaAorLS0tIGEvZ2RiL2luZi1jaGlsZC5oCisrKysgYi9nZGIvaW5mLWNo aWxkLmgKK0BAIC04MSw2ICs4MSw4IEBAIGNsYXNzIGluZl9jaGlsZF90YXJnZXQKKyAgIGludCBm aWxlaW9fcHJlYWQgKGludCBmZCwgZ2RiX2J5dGUgKnJlYWRfYnVmLCBpbnQgbGVuLAorIAkJICAg IFVMT05HRVNUIG9mZnNldCwgZmlsZWlvX2Vycm9yICp0YXJnZXRfZXJybm8pIG92ZXJyaWRlOwor ICAgaW50IGZpbGVpb19mc3RhdCAoaW50IGZkLCBzdHJ1Y3Qgc3RhdCAqc2IsIGZpbGVpb19lcnJv ciAqdGFyZ2V0X2Vycm5vKSBvdmVycmlkZTsKKysgIGludCBmaWxlaW9fc3RhdCAoc3RydWN0IGlu ZmVyaW9yICppbmYsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAorKwkJICAgc3RydWN0IHN0YXQgKnNi LCBmaWxlaW9fZXJyb3IgKnRhcmdldF9lcnJubykgb3ZlcnJpZGU7CisgICBpbnQgZmlsZWlvX2Ns b3NlIChpbnQgZmQsIGZpbGVpb19lcnJvciAqdGFyZ2V0X2Vycm5vKSBvdmVycmlkZTsKKyAgIGlu dCBmaWxlaW9fdW5saW5rIChzdHJ1Y3QgaW5mZXJpb3IgKmluZiwKKyAJCSAgICAgY29uc3QgY2hh ciAqZmlsZW5hbWUsCitkaWZmIC0tZ2l0IGEvZ2RiL3B5dGhvbi9saWIvZ2RiL19faW5pdF9fLnB5 IGIvZ2RiL3B5dGhvbi9saWIvZ2RiL19faW5pdF9fLnB5CistLS0gYS9nZGIvcHl0aG9uL2xpYi9n ZGIvX19pbml0X18ucHkKKysrKyBiL2dkYi9weXRob24vbGliL2dkYi9fX2luaXRfXy5weQorQEAg LTg3LDggKzg3LDkgQEAgeG1ldGhvZHMgPSBbXQorIGZyYW1lX2ZpbHRlcnMgPSB7fQorICMgSW5p dGlhbCBmcmFtZSB1bndpbmRlcnMuCisgZnJhbWVfdW53aW5kZXJzID0gW10KKy0jIEluaXRpYWwg bWlzc2luZyBkZWJ1ZyBoYW5kbGVycy4KKy1taXNzaW5nX2RlYnVnX2hhbmRsZXJzID0gW10KKysj IFRoZSBtaXNzaW5nIGZpbGUgaGFuZGxlcnMuICBFYWNoIGl0ZW0gaXMgYSB0dXBsZSB3aXRoIHRo ZSBmb3JtCisrIyAoVFlQRSwgSEFORExFUikgd2hlcmUgVFlQRSBpcyBhIHN0cmluZyBlaXRoZXIg J2RlYnVnJyBvciAnb2JqZmlsZScuCisrbWlzc2luZ19maWxlX2hhbmRsZXJzID0gW10KKyAKKyAK KyBkZWYgX2V4ZWN1dGVfdW53aW5kZXJzKHBlbmRpbmdfZnJhbWUpOgorQEAgLTI3MSw2ICsyNzIs NjEgQEAgY2xhc3MgVGhyZWFkKHRocmVhZGluZy5UaHJlYWQpOgorICAgICAgICAgICAgIHN1cGVy KCkuc3RhcnQoKQorIAorIAorK2RlZiBfZmlsdGVyX21pc3NpbmdfZmlsZV9oYW5kbGVycyhoYW5k bGVycywgaGFuZGxlcl90eXBlKToKKysgICAgIiIiRWFjaCBsaXN0IG9mIG1pc3NpbmcgZmlsZSBo YW5kbGVycyBpcyBhIGxpc3Qgb2YgdHVwbGVzLCB0aGUgZmlyc3QKKysgICAgaXRlbSBpbiB0aGUg dHVwbGUgaXMgYSBzdHJpbmcgZWl0aGVyICdkZWJ1Zycgb3IgJ29iamZpbGUnIHRvCisrICAgIGlu ZGljYXRlIHdoYXQgdHlwZSBvZiBoYW5kbGVyIGl0IGlzLiAgVGhlIHNlY29uZCBpdGVtIGluIHRo ZSB0dXBsZQorKyAgICBpcyB0aGUgYWN0dWFsIGhhbmRsZXIgb2JqZWN0LgorKworKyAgICBUaGlz IGZ1bmN0aW9uIHRha2VzIEhBTkRMRVJfVFlQRSB3aGljaCBpcyBhIHN0cmluZywgZWl0aGVyICdk ZWJ1ZycKKysgICAgb3IgJ29iamZpbGUnIGFuZCBIQU5ETEVSUywgYSBsaXN0IG9mIHR1cGxlcy4g IFRoZSBmdW5jdGlvbiByZXR1cm5zCisrICAgIGFuIGl0ZXJhYmxlIG92ZXIgYWxsIG9mIHRoZSBo YW5kbGVyIG9iamVjdHMgKGV4dHJhY3RlZCBmcm9tIHRoZQorKyAgICB0dXBsZXMpIHdoaWNoIG1h dGNoIEhBTkRMRVJfVFlQRS4KKysgICAgIiIiCisrCisrICAgIHJldHVybiBtYXAobGFtYmRhIHQ6 IHRbMV0sIGZpbHRlcihsYW1iZGEgdDogdFswXSA9PSBoYW5kbGVyX3R5cGUsIGhhbmRsZXJzKSkK KysKKysKKytkZWYgX2hhbmRsZV9taXNzaW5nX2ZpbGVzKHBzcGFjZSwgaGFuZGxlcl90eXBlLCBj Yik6CisrICAgICIiIkhlbHBlciBmb3IgX2hhbmRsZV9taXNzaW5nX2RlYnVnaW5mbyBhbmQgX2hh bmRsZV9taXNzaW5nX29iamZpbGUuCisrCisrICAgIEFyZ3VtZW50czoKKysgICAgICAgIHBzcGFj ZTogVGhlIGdkYi5Qcm9nc3BhY2UgaW4gd2hpY2ggd2UncmUgb3BlcmF0aW5nLiAgVXNlZCB0bwor KyAgICAgICAgICAgIGxvb2t1cCBwcm9ncmFtIHNwYWNlIHNwZWNpZmljIGhhbmRsZXJzLgorKyAg ICAgICAgaGFuZGxlcl90eXBlOiBBIHN0cmluZywgZWl0aGVyICdkZWJ1Zycgb3IgJ29iamZpbGUn LCB0aGlzIGlzIHRoZQorKyAgICAgICAgICAgIHR5cGUgb2YgaGFuZGxlciB3ZSdyZSBsb29raW5n IGZvci4KKysgICAgICAgIGNiOiBBIGNhbGxiYWNrIHdoaWNoIHRha2VzIGEgaGFuZGxlciBhbmQg cmV0dXJucyB0aGUgcmVzdWx0IG9mCisrICAgICAgICAgICAgY2FsbGluZyB0aGUgaGFuZGxlci4K KysKKysgICAgUmV0dXJuczoKKysgICAgICAgIE5vbmU6IE5vIHN1aXRhYmxlIGZpbGUgY291bGQg YmUgZm91bmQuCisrICAgICAgICBGYWxzZTogQSBoYW5kbGVyIGhhcyBkZWNpZGVkIHRoYXQgdGhl IHJlcXVlc3RlZCBmaWxlIGNhbm5vdCBiZQorKyAgICAgICAgICAgICAgICBmb3VuZCwgYW5kIG5v IGZ1cnRoZXIgc2VhcmNoaW5nIHNob3VsZCBiZSBkb25lLgorKyAgICAgICAgVHJ1ZTogVGhlIGZp bGUgaGFzIGJlZW4gZm91bmQgYW5kIGluc3RhbGxlZCBpbiBhIGxvY2F0aW9uCisrICAgICAgICAg ICAgICAgIHdoZXJlIEdEQiB3b3VsZCBub3JtYWxseSBsb29rIGZvciBpdC4gIEdEQiBzaG91bGQK KysgICAgICAgICAgICAgICAgcmVwZWF0IGl0cyBsb29rdXAgcHJvY2VzcywgdGhlIGZpbGUgc2hv dWxkIG5vdyBiZSBpbgorKyAgICAgICAgICAgICAgICBwbGFjZS4KKysgICAgICAgIEEgc3RyaW5n OiBUaGlzIGlzIHRoZSBmaWxlbmFtZSBvZiB3aGVyZSB0aGUgbWlzc2luZyBmaWxlIGNhbgorKyAg ICAgICAgICAgICAgICBiZSBmb3VuZC4KKysgICAgIiIiCisrCisrICAgIGZvciBoYW5kbGVyIGlu IF9maWx0ZXJfbWlzc2luZ19maWxlX2hhbmRsZXJzKAorKyAgICAgICAgcHNwYWNlLm1pc3Npbmdf ZmlsZV9oYW5kbGVycywgaGFuZGxlcl90eXBlCisrICAgICk6CisrICAgICAgICBpZiBoYW5kbGVy LmVuYWJsZWQ6CisrICAgICAgICAgICAgcmVzdWx0ID0gY2IoaGFuZGxlcikKKysgICAgICAgICAg ICBpZiByZXN1bHQgaXMgbm90IE5vbmU6CisrICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQK KysKKysgICAgZm9yIGhhbmRsZXIgaW4gX2ZpbHRlcl9taXNzaW5nX2ZpbGVfaGFuZGxlcnMobWlz c2luZ19maWxlX2hhbmRsZXJzLCBoYW5kbGVyX3R5cGUpOgorKyAgICAgICAgaWYgaGFuZGxlci5l bmFibGVkOgorKyAgICAgICAgICAgIHJlc3VsdCA9IGNiKGhhbmRsZXIpCisrICAgICAgICAgICAg aWYgcmVzdWx0IGlzIG5vdCBOb25lOgorKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Cisr CisrICAgIHJldHVybiBOb25lCisrCisrCisgZGVmIF9oYW5kbGVfbWlzc2luZ19kZWJ1Z2luZm8o b2JqZmlsZSk6CisgICAgICIiIkludGVybmFsIGZ1bmN0aW9uIGNhbGxlZCBmcm9tIEdEQiB0byBl eGVjdXRlIG1pc3NpbmcgZGVidWcKKyAgICAgaGFuZGxlcnMuCitAQCAtMjkzLDE4ICszNDksNDYg QEAgZGVmIF9oYW5kbGVfbWlzc2luZ19kZWJ1Z2luZm8ob2JqZmlsZSk6CisgICAgICAgICBBIHN0 cmluZzogVGhpcyBpcyB0aGUgZmlsZW5hbWUgb2YgYSBmaWxlIGNvbnRhaW5pbmcgdGhlCisgICAg ICAgICAgICAgICAgICAgcmVxdWlyZWQgZGVidWcgaW5mb3JtYXRpb24uCisgICAgICIiIgorKwor ICAgICBwc3BhY2UgPSBvYmpmaWxlLnByb2dzcGFjZQorIAorLSAgICBmb3IgaGFuZGxlciBpbiBw c3BhY2UubWlzc2luZ19kZWJ1Z19oYW5kbGVyczoKKy0gICAgICAgIGlmIGhhbmRsZXIuZW5hYmxl ZDoKKy0gICAgICAgICAgICByZXN1bHQgPSBoYW5kbGVyKG9iamZpbGUpCistICAgICAgICAgICAg aWYgcmVzdWx0IGlzIG5vdCBOb25lOgorLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Cisr ICAgIHJldHVybiBfaGFuZGxlX21pc3NpbmdfZmlsZXMocHNwYWNlLCAiZGVidWciLCBsYW1iZGEg aDogaChvYmpmaWxlKSkKKyAKKy0gICAgZm9yIGhhbmRsZXIgaW4gbWlzc2luZ19kZWJ1Z19oYW5k bGVyczoKKy0gICAgICAgIGlmIGhhbmRsZXIuZW5hYmxlZDoKKy0gICAgICAgICAgICByZXN1bHQg PSBoYW5kbGVyKG9iamZpbGUpCistICAgICAgICAgICAgaWYgcmVzdWx0IGlzIG5vdCBOb25lOgor LSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0CisgCistICAgIHJldHVybiBOb25lCisrZGVm IF9oYW5kbGVfbWlzc2luZ19vYmpmaWxlKHBzcGFjZSwgYnVpbGRpZCwgZmlsZW5hbWUpOgorKyAg ICAiIiJJbnRlcm5hbCBmdW5jdGlvbiBjYWxsZWQgZnJvbSBHREIgdG8gZXhlY3V0ZSBtaXNzaW5n IG9iamZpbGUKKysgICAgaGFuZGxlcnMuCisrCisrICAgIFJ1biBlYWNoIG9mIHRoZSBjdXJyZW50 bHkgcmVnaXN0ZXJlZCwgYW5kIGVuYWJsZWQgbWlzc2luZyBvYmpmaWxlCisrICAgIGhhbmRsZXIg b2JqZWN0cyBmb3IgdGhlIGdkYi5Qcm9nc3BhY2UgcGFzc2VkIGluIGFzIGFuIGFyZ3VtZW50LAor KyAgICBhbmQgdGhlbiBmcm9tIHRoZSBnbG9iYWwgbGlzdC4gIFN0b3AgYWZ0ZXIgdGhlIGZpcnN0 IGhhbmRsZXIgdGhhdAorKyAgICByZXR1cm5zIGEgcmVzdWx0IG90aGVyIHRoYW4gTm9uZS4KKysK KysgICAgQXJndW1lbnRzOgorKyAgICAgICAgcHNwYWNlOiBBIGdkYi5Qcm9nc3BhY2UgZm9yIHdo aWNoIHRoZSBtaXNzaW5nIG9iamZpbGUgaGFuZGxlcnMKKysgICAgICAgICAgICAgICAgc2hvdWxk IGJlIHJ1bi4gIFRoaXMgaXMgdGhlIHByb2dyYW0gc3BhY2UgaW4gd2hpY2ggYW4KKysgICAgICAg ICAgICAgICAgb2JqZmlsZSB3YXMgZm91bmQgdG8gYmUgbWlzc2luZy4KKysgICAgICAgIGJ1aWxk aWQ6IEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGJ1aWxkLWlkIHdlJ3JlIGxvb2tpbmcgZm9yLgor KyAgICAgICAgZmlsZW5hbWU6IFRoZSBmaWxlbmFtZSBvZiB0aGUgZmlsZSBHREIgdHJpZWQgdG8g ZmluZCBidXQKKysgICAgICAgICAgICAgICAgICBjb3VsZG4ndC4gIFRoaXMgaXMgbm90IHdoZXJl IHRoZSBmaWxlIHNob3VsZCBiZQorKyAgICAgICAgICAgICAgICAgIHBsYWNlZCBpZiBmb3VuZCwg aW4gZmFjdCwgdGhpcyBmaWxlIG1pZ2h0IGFscmVhZHkKKysgICAgICAgICAgICAgICAgICBleGlz dCBvbiBkaXNrIGJ1dCBoYXZlIHRoZSB3cm9uZyBidWlsZC1pZC4gIFRoaXMgaXMKKysgICAgICAg ICAgICAgICAgICBtb3N0bHkgcHJvdmlkZWQgaW4gb3JkZXIgdG8gYmUgdXNlZCBpbiBtZXNzYWdl cyB0bworKyAgICAgICAgICAgICAgICAgIHRoZSB1c2VyLgorKworKyAgICBSZXR1cm5zOgorKyAg ICAgICAgTm9uZTogTm8gb2JqZmlsZSBjb3VsZCBiZSBmb3VuZCBmb3IgdGhpcyBidWlsZC1pZC4K KysgICAgICAgIEZhbHNlOiBBIGhhbmRsZXIgaGFzIGRvbmUgYWxsIGl0IGNhbiB3aXRoIGZvciB0 aGlzIGJ1aWxkLWlkLAorKyAgICAgICAgICAgICAgIGJ1dCBubyBvYmpmaWxlIGNvdWxkIGJlIGZv dW5kLgorKyAgICAgICAgVHJ1ZTogQW4gb2JqZmlsZSBtaWdodCBoYXZlIGJlZW4gaW5zdGFsbGVk IGJ5IGEgaGFuZGxlciwgR0RCCisrICAgICAgICAgICAgICBzaG91bGQgY2hlY2sgYWdhaW4uICBU aGUgb25seSBwbGFjZSBHREIgY2hlY2tzIGlzIHdpdGhpbgorKyAgICAgICAgICAgICAgdGhlIC5i dWlsZC1pZCBzdWItZGlyZWN0b3J5IHdpdGhpbiB0aGUKKysgICAgICAgICAgICAgIGRlYnVnLWZp bGUtZGlyZWN0b3J5LiAgSWYgdGhlIHJlcXVpcmVkIGZpbGUgd2FzIG5vdAorKyAgICAgICAgICAg ICAgaW5zdGFsbGVkIHRoZXJlIHRoZW4gR0RCIHdpbGwgbm90IGZpbmQgaXQuCisrICAgICAgICBB IHN0cmluZzogVGhpcyBpcyB0aGUgZmlsZW5hbWUgb2YgYSBmaWxlIGNvbnRhaW5pbmcgdGhlCisr ICAgICAgICAgICAgICAgICAgbWlzc2luZyBvYmpmaWxlLgorKyAgICAiIiIKKysKKysgICAgcmV0 dXJuIF9oYW5kbGVfbWlzc2luZ19maWxlcygKKysgICAgICAgIHBzcGFjZSwgIm9iamZpbGUiLCBs YW1iZGEgaDogaChwc3BhY2UsIGJ1aWxkaWQsIGZpbGVuYW1lKQorKyAgICApCitkaWZmIC0tZ2l0 IGEvZ2RiL3B5dGhvbi9saWIvZ2RiL2NvbW1hbmQvbWlzc2luZ19kZWJ1Zy5weSBiL2dkYi9weXRo b24vbGliL2dkYi9jb21tYW5kL21pc3NpbmdfZmlsZXMucHkKK3NpbWlsYXJpdHkgaW5kZXggNTQl CityZW5hbWUgZnJvbSBnZGIvcHl0aG9uL2xpYi9nZGIvY29tbWFuZC9taXNzaW5nX2RlYnVnLnB5 CityZW5hbWUgdG8gZ2RiL3B5dGhvbi9saWIvZ2RiL2NvbW1hbmQvbWlzc2luZ19maWxlcy5weQor LS0tIGEvZ2RiL3B5dGhvbi9saWIvZ2RiL2NvbW1hbmQvbWlzc2luZ19kZWJ1Zy5weQorKysrIGIv Z2RiL3B5dGhvbi9saWIvZ2RiL2NvbW1hbmQvbWlzc2luZ19maWxlcy5weQorQEAgLTEsNCArMSw0 IEBACistIyBNaXNzaW5nIGRlYnVnIHJlbGF0ZWQgY29tbWFuZHMuCisrIyBNaXNzaW5nIGRlYnVn IGFuZCBvYmpmaWxlIHJlbGF0ZWQgY29tbWFuZHMuCisgIworICMgQ29weXJpZ2h0IDIwMjMtMjAy NCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAjCitAQCAtMjEsNyArMjEsNyBAQCBp bXBvcnQgZ2RiCisgCisgCisgZGVmIHZhbGlkYXRlX3JlZ2V4cChleHAsIGlkc3RyaW5nKToKKy0g ICAgIiIiQ29tcGlsZSBleHAgaW50byBhIGNvbXBpbGVyIHJlZ3VsYXIgZXhwcmVzc2lvbiBvYmpl Y3QuCisrICAgICIiIkNvbXBpbGUgZXhwIGludG8gYSBjb21waWxlZCByZWd1bGFyIGV4cHJlc3Np b24gb2JqZWN0LgorIAorICAgICBBcmd1bWVudHM6CisgICAgICAgICBleHA6IFRoZSBzdHJpbmcg dG8gY29tcGlsZSBpbnRvIGEgcmUuUGF0dGVybiBvYmplY3QuCitAQCAtMzMsMTQgKzMzLDE1IEBA IGRlZiB2YWxpZGF0ZV9yZWdleHAoZXhwLCBpZHN0cmluZyk6CisgICAgIFJhaXNlczoKKyAgICAg ICAgIFN5bnRheEVycm9yOiBJZiBleHAgaXMgYW4gaW52YWxpZCByZWdleHAuCisgICAgICIiIgor KworICAgICB0cnk6CisgICAgICAgICByZXR1cm4gcmUuY29tcGlsZShleHApCisgICAgIGV4Y2Vw dCBTeW50YXhFcnJvcjoKKyAgICAgICAgIHJhaXNlIFN5bnRheEVycm9yKCJJbnZhbGlkICVzIHJl Z2V4cDogJXMuIiAlIChpZHN0cmluZywgZXhwKSkKKyAKKyAKKy1kZWYgcGFyc2VfbWlzc2luZ19k ZWJ1Z19jb21tYW5kX2FyZ3MoYXJnKToKKy0gICAgIiIiSW50ZXJuYWwgdXRpbGl0eSB0byBwYXJz ZSBtaXNzaW5nIGRlYnVnIGhhbmRsZXIgY29tbWFuZCBhcmd2LgorK2RlZiBwYXJzZV9taXNzaW5n X2ZpbGVfY29tbWFuZF9hcmdzKGFyZyk6CisrICAgICIiIkludGVybmFsIHV0aWxpdHkgdG8gcGFy c2UgbWlzc2luZyBmaWxlIGhhbmRsZXIgY29tbWFuZCBhcmd2LgorIAorICAgICBBcmd1bWVudHM6 CisgICAgICAgICBhcmc6IFRoZSBhcmd1bWVudHMgdG8gdGhlIGNvbW1hbmQuIFRoZSBmb3JtYXQg aXM6CitAQCAtNTIsNiArNTMsNyBAQCBkZWYgcGFyc2VfbWlzc2luZ19kZWJ1Z19jb21tYW5kX2Fy Z3MoYXJnKToKKyAgICAgUmFpc2VzOgorICAgICAgICAgU3ludGF4RXJyb3I6IGFuIGVycm9yIHBy b2Nlc3NpbmcgQVJHCisgICAgICIiIgorKworICAgICBhcmd2ID0gZ2RiLnN0cmluZ190b19hcmd2 KGFyZykKKyAgICAgYXJnYyA9IGxlbihhcmd2KQorICAgICBpZiBhcmdjID4gMjoKK0BAIC02OCwx MCArNzAsMTAgQEAgZGVmIHBhcnNlX21pc3NpbmdfZGVidWdfY29tbWFuZF9hcmdzKGFyZyk6Cisg ICAgICkKKyAKKyAKKy1jbGFzcyBJbmZvTWlzc2luZ0RlYnVnSGFuZGVycyhnZGIuQ29tbWFuZCk6 CistICAgICIiIkdEQiBjb21tYW5kIHRvIGxpc3QgbWlzc2luZyBkZWJ1ZyBoYW5kbGVycy4KKytj bGFzcyBJbmZvTWlzc2luZ0ZpbGVIYW5kbGVycyhnZGIuQ29tbWFuZCk6CisrICAgICIiIkdEQiBj b21tYW5kIHRvIGxpc3QgbWlzc2luZyBIVFlQRSBoYW5kbGVycy4KKyAKKy0gICAgVXNhZ2U6IGlu Zm8gbWlzc2luZy1kZWJ1Zy1oYW5kbGVycyBbTE9DVVMtUkVHRVhQIFtOQU1FLVJFR0VYUF1dCisr ICAgIFVzYWdlOiBpbmZvIG1pc3NpbmctSFRZUEUtaGFuZGxlcnMgW0xPQ1VTLVJFR0VYUCBbTkFN RS1SRUdFWFBdXQorIAorICAgICBMT0NVUy1SRUdFWFAgaXMgYSByZWd1bGFyIGV4cHJlc3Npb24g bWF0Y2hpbmcgdGhlIGxvY2F0aW9uIG9mIHRoZQorICAgICBoYW5kbGVyLiAgSWYgaXQgaXMgb21p dHRlZCwgYWxsIHJlZ2lzdGVyZWQgaGFuZGxlcnMgZnJvbSBhbGwKK0BAIC03OSwzOCArODEsNDcg QEAgY2xhc3MgSW5mb01pc3NpbmdEZWJ1Z0hhbmRlcnMoZ2RiLkNvbW1hbmQpOgorICAgICB0aGUg aGFuZGxlcnMgZnJvbSB0aGUgY3VycmVudCBwcm9nc3BhY2UsIG9yIGEgcmVndWxhciBleHByZXNz aW9uCisgICAgIG1hdGNoaW5nIGZpbGVuYW1lcyBvZiBwcm9nc3BhY2VzLgorIAorLSAgICBOQU1F LVJFR0VYUCBpcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBmaWx0ZXIgbWlzc2luZyBkZWJ1Zwor KyAgICBOQU1FLVJFR0VYUCBpcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBmaWx0ZXIgbWlzc2lu ZyBIVFlQRQorICAgICBoYW5kbGVyIG5hbWVzLiAgSWYgdGhpcyBvbWl0dGVkIGZvciBhIHNwZWNp ZmllZCBsb2N1cywgdGhlbiBhbGwKKyAgICAgcmVnaXN0ZXJlZCBoYW5kbGVycyBpbiB0aGUgbG9j dXMgYXJlIGxpc3RlZC4KKyAgICAgIiIiCisgCistICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKy0g ICAgICAgIHN1cGVyKCkuX19pbml0X18oImluZm8gbWlzc2luZy1kZWJ1Zy1oYW5kbGVycyIsIGdk Yi5DT01NQU5EX0ZJTEVTKQorKyAgICBkZWYgX19pbml0X18oc2VsZiwgaGFuZGxlcl90eXBlKToK KysgICAgICAgICMgVXBkYXRlIHRoZSBkb2Mgc3RyaW5nIGJlZm9yZSBjYWxsaW5nIHRoZSBwYXJl bnQgY29uc3RydWN0b3IsCisrICAgICAgICAjIHJlcGxhY2luZyB0aGUgc3RyaW5nICdIVFlQRScg d2l0aCB0aGUgdmFsdWUgb2YgSEFORExFUl9UWVBFLgorKyAgICAgICAgIyBUaGUgcGFyZW50IGNv bnN0cnVjdG9yIHdpbGwgZ3JhYiBhIGNvcHkgb2YgdGhpcyBzdHJpbmcgdG8KKysgICAgICAgICMg dXNlIGFzIHRoZSBjb21tYW5kcyBoZWxwIHRleHQuCisrICAgICAgICBzZWxmLl9fZG9jX18gPSBz ZWxmLl9fZG9jX18ucmVwbGFjZSgiSFRZUEUiLCBoYW5kbGVyX3R5cGUpCisrICAgICAgICBzdXBl cigpLl9faW5pdF9fKAorKyAgICAgICAgICAgICJpbmZvIG1pc3NpbmctIiArIGhhbmRsZXJfdHlw ZSArICItaGFuZGxlcnMiLCBnZGIuQ09NTUFORF9GSUxFUworKyAgICAgICAgKQorKyAgICAgICAg c2VsZi5oYW5kbGVyX3R5cGUgPSBoYW5kbGVyX3R5cGUKKyAKKyAgICAgZGVmIGxpc3RfaGFuZGxl cnMoc2VsZiwgdGl0bGUsIGhhbmRsZXJzLCBuYW1lX3JlKToKKy0gICAgICAgICIiIkxpc3RzIHRo ZSBtaXNzaW5nIGRlYnVnIGhhbmRsZXJzIHdob3NlIG5hbWUgbWF0Y2hlcyByZWdleHAuCisrICAg ICAgICAiIiJMaXN0cyB0aGUgbWlzc2luZyBmaWxlIGhhbmRsZXJzIHdob3NlIG5hbWUgbWF0Y2hl cyByZWdleHAuCisgCisgICAgICAgICBBcmd1bWVudHM6CisgICAgICAgICAgICAgdGl0bGU6IFRo ZSBsaW5lIHRvIHByaW50IGJlZm9yZSB0aGUgbGlzdC4KKy0gICAgICAgICAgICBoYW5kbGVyczog VGhlIGxpc3Qgb2YgdGhlIG1pc3NpbmcgZGVidWcgaGFuZGxlcnMuCisrICAgICAgICAgICAgaGFu ZGxlcnM6IFRoZSBsaXN0IG9mIHRoZSBtaXNzaW5nIGZpbGUgaGFuZGxlcnMuCisgICAgICAgICAg ICAgbmFtZV9yZTogaGFuZGxlciBuYW1lIGZpbHRlci4KKyAgICAgICAgICIiIgorKworICAgICAg ICAgaWYgbm90IGhhbmRsZXJzOgorICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgcHJpbnQo dGl0bGUpCistICAgICAgICBmb3IgaGFuZGxlciBpbiBoYW5kbGVyczoKKysgICAgICAgIGZvciBo YW5kbGVyIGluIGdkYi5fZmlsdGVyX21pc3NpbmdfZmlsZV9oYW5kbGVycyhoYW5kbGVycywgc2Vs Zi5oYW5kbGVyX3R5cGUpOgorICAgICAgICAgICAgIGlmIG5hbWVfcmUubWF0Y2goaGFuZGxlci5u YW1lKToKKyAgICAgICAgICAgICAgICAgcHJpbnQoCisgICAgICAgICAgICAgICAgICAgICAiICAl cyVzIiAlIChoYW5kbGVyLm5hbWUsICIiIGlmIGhhbmRsZXIuZW5hYmxlZCBlbHNlICIgW2Rpc2Fi bGVkXSIpCisgICAgICAgICAgICAgICAgICkKKyAKKyAgICAgZGVmIGludm9rZShzZWxmLCBhcmcs IGZyb21fdHR5KToKKy0gICAgICAgIGxvY3VzX3JlLCBuYW1lX3JlID0gcGFyc2VfbWlzc2luZ19k ZWJ1Z19jb21tYW5kX2FyZ3MoYXJnKQorKyAgICAgICAgbG9jdXNfcmUsIG5hbWVfcmUgPSBwYXJz ZV9taXNzaW5nX2ZpbGVfY29tbWFuZF9hcmdzKGFyZykKKyAKKyAgICAgICAgIGlmIGxvY3VzX3Jl Lm1hdGNoKCJwcm9nc3BhY2UiKSBhbmQgbG9jdXNfcmUucGF0dGVybiAhPSAiIjoKKyAgICAgICAg ICAgICBjcCA9IGdkYi5jdXJyZW50X3Byb2dzcGFjZSgpCisgICAgICAgICAgICAgc2VsZi5saXN0 X2hhbmRsZXJzKAorLSAgICAgICAgICAgICAgICAiUHJvZ3NwYWNlICVzOiIgJSBjcC5maWxlbmFt ZSwgY3AubWlzc2luZ19kZWJ1Z19oYW5kbGVycywgbmFtZV9yZQorKyAgICAgICAgICAgICAgICAi UHJvZ3NwYWNlICVzOiIgJSBjcC5maWxlbmFtZSwgY3AubWlzc2luZ19maWxlX2hhbmRsZXJzLCBu YW1lX3JlCisgICAgICAgICAgICAgKQorIAorICAgICAgICAgZm9yIHByb2dzcGFjZSBpbiBnZGIu cHJvZ3NwYWNlcygpOgorQEAgLTEyNSw1OCArMTM2LDcxIEBAIGNsYXNzIEluZm9NaXNzaW5nRGVi dWdIYW5kZXJzKGdkYi5Db21tYW5kKToKKyAgICAgICAgICAgICAgICAgICAgIG1zZyA9ICJQcm9n c3BhY2UgJXM6IiAlIGZpbGVuYW1lCisgICAgICAgICAgICAgICAgIHNlbGYubGlzdF9oYW5kbGVy cygKKyAgICAgICAgICAgICAgICAgICAgIG1zZywKKy0gICAgICAgICAgICAgICAgICAgIHByb2dz cGFjZS5taXNzaW5nX2RlYnVnX2hhbmRsZXJzLAorKyAgICAgICAgICAgICAgICAgICAgcHJvZ3Nw YWNlLm1pc3NpbmdfZmlsZV9oYW5kbGVycywKKyAgICAgICAgICAgICAgICAgICAgIG5hbWVfcmUs CisgICAgICAgICAgICAgICAgICkKKyAKKyAgICAgICAgICMgUHJpbnQgZ2xvYmFsIGhhbmRsZXJz IGxhc3QsIGFzIHRoZXNlIGFyZSBpbnZva2VkIGxhc3QuCisgICAgICAgICBpZiBsb2N1c19yZS5t YXRjaCgiZ2xvYmFsIik6CistICAgICAgICAgICAgc2VsZi5saXN0X2hhbmRsZXJzKCJHbG9iYWw6 IiwgZ2RiLm1pc3NpbmdfZGVidWdfaGFuZGxlcnMsIG5hbWVfcmUpCisrICAgICAgICAgICAgc2Vs Zi5saXN0X2hhbmRsZXJzKCJHbG9iYWw6IiwgZ2RiLm1pc3NpbmdfZmlsZV9oYW5kbGVycywgbmFt ZV9yZSkKKyAKKyAKKy1kZWYgZG9fZW5hYmxlX2hhbmRsZXIxKGhhbmRsZXJzLCBuYW1lX3JlLCBm bGFnKToKKy0gICAgIiIiRW5hYmxlL2Rpc2FibGUgbWlzc2luZyBkZWJ1ZyBoYW5kbGVycyB3aG9z ZSBuYW1lcyBtYXRjaCBnaXZlbiByZWdleC4KKytkZWYgZG9fZW5hYmxlX2hhbmRsZXIxKGhhbmRs ZXJzLCBuYW1lX3JlLCBmbGFnLCBoYW5kbGVyX3R5cGUpOgorKyAgICAiIiJFbmFibGUvZGlzYWJs ZSBtaXNzaW5nIGZpbGUgaGFuZGxlcnMgd2hvc2UgbmFtZXMgbWF0Y2ggZ2l2ZW4gcmVnZXguCisg CisgICAgIEFyZ3VtZW50czoKKy0gICAgICAgIGhhbmRsZXJzOiBUaGUgbGlzdCBvZiBtaXNzaW5n IGRlYnVnIGhhbmRsZXJzLgorKyAgICAgICAgaGFuZGxlcnM6IFRoZSBsaXN0IG9mIG1pc3Npbmcg ZmlsZSBoYW5kbGVycy4KKyAgICAgICAgIG5hbWVfcmU6IEhhbmRsZXIgbmFtZSBmaWx0ZXIuCisg ICAgICAgICBmbGFnOiBBIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB3ZSBzaG91bGQgZW5hYmxlIG9y IGRpc2FibGUuCisrICAgICAgICBoYW5kbGVyX3R5cGU6IEEgc3RyaW5nLCBlaXRoZXIgJ2RlYnVn JyBvciAnb2JqZmlsZScsIHVzZSB0byBjb250cm9sCisrICAgICAgICAgICAgd2hpY2ggaGFuZGxl cnMgYXJlIG1vZGlmaWVkLgorIAorICAgICBSZXR1cm5zOgorICAgICAgICAgVGhlIG51bWJlciBv ZiBoYW5kbGVycyBhZmZlY3RlZC4KKyAgICAgIiIiCisrCisgICAgIHRvdGFsID0gMAorLSAgICBm b3IgaGFuZGxlciBpbiBoYW5kbGVyczoKKysgICAgZm9yIGhhbmRsZXIgaW4gZ2RiLl9maWx0ZXJf bWlzc2luZ19maWxlX2hhbmRsZXJzKGhhbmRsZXJzLCBoYW5kbGVyX3R5cGUpOgorICAgICAgICAg aWYgbmFtZV9yZS5tYXRjaChoYW5kbGVyLm5hbWUpIGFuZCBoYW5kbGVyLmVuYWJsZWQgIT0gZmxh ZzoKKyAgICAgICAgICAgICBoYW5kbGVyLmVuYWJsZWQgPSBmbGFnCisgICAgICAgICAgICAgdG90 YWwgKz0gMQorICAgICByZXR1cm4gdG90YWwKKyAKKyAKKy1kZWYgZG9fZW5hYmxlX2hhbmRsZXIo YXJnLCBmbGFnKToKKy0gICAgIiIiRW5hYmxlIG9yIGRpc2FibGUgbWlzc2luZyBkZWJ1ZyBoYW5k bGVycy4iIiIKKy0gICAgKGxvY3VzX3JlLCBuYW1lX3JlKSA9IHBhcnNlX21pc3NpbmdfZGVidWdf Y29tbWFuZF9hcmdzKGFyZykKKytkZWYgZG9fZW5hYmxlX2hhbmRsZXIoYXJnLCBmbGFnLCBoYW5k bGVyX3R5cGUpOgorKyAgICAiIiJFbmFibGUgb3IgZGlzYWJsZSBtaXNzaW5nIGZpbGUgaGFuZGxl cnMuIiIiCisrCisrICAgIChsb2N1c19yZSwgbmFtZV9yZSkgPSBwYXJzZV9taXNzaW5nX2ZpbGVf Y29tbWFuZF9hcmdzKGFyZykKKyAgICAgdG90YWwgPSAwCisgICAgIGlmIGxvY3VzX3JlLm1hdGNo KCJnbG9iYWwiKToKKy0gICAgICAgIHRvdGFsICs9IGRvX2VuYWJsZV9oYW5kbGVyMShnZGIubWlz c2luZ19kZWJ1Z19oYW5kbGVycywgbmFtZV9yZSwgZmxhZykKKysgICAgICAgIHRvdGFsICs9IGRv X2VuYWJsZV9oYW5kbGVyMSgKKysgICAgICAgICAgICBnZGIubWlzc2luZ19maWxlX2hhbmRsZXJz LCBuYW1lX3JlLCBmbGFnLCBoYW5kbGVyX3R5cGUKKysgICAgICAgICkKKyAgICAgaWYgbG9jdXNf cmUubWF0Y2goInByb2dzcGFjZSIpIGFuZCBsb2N1c19yZS5wYXR0ZXJuICE9ICIiOgorICAgICAg ICAgdG90YWwgKz0gZG9fZW5hYmxlX2hhbmRsZXIxKAorLSAgICAgICAgICAgIGdkYi5jdXJyZW50 X3Byb2dzcGFjZSgpLm1pc3NpbmdfZGVidWdfaGFuZGxlcnMsIG5hbWVfcmUsIGZsYWcKKysgICAg ICAgICAgICBnZGIuY3VycmVudF9wcm9nc3BhY2UoKS5taXNzaW5nX2ZpbGVfaGFuZGxlcnMsIG5h bWVfcmUsIGZsYWcsIGhhbmRsZXJfdHlwZQorICAgICAgICAgKQorICAgICBmb3IgcHJvZ3NwYWNl IGluIGdkYi5wcm9nc3BhY2VzKCk6CisgICAgICAgICBmaWxlbmFtZSA9IHByb2dzcGFjZS5maWxl bmFtZSBvciAiIgorICAgICAgICAgaWYgbG9jdXNfcmUubWF0Y2goZmlsZW5hbWUpOgorLSAgICAg ICAgICAgIHRvdGFsICs9IGRvX2VuYWJsZV9oYW5kbGVyMShwcm9nc3BhY2UubWlzc2luZ19kZWJ1 Z19oYW5kbGVycywgbmFtZV9yZSwgZmxhZykKKysgICAgICAgICAgICB0b3RhbCArPSBkb19lbmFi bGVfaGFuZGxlcjEoCisrICAgICAgICAgICAgICAgIHByb2dzcGFjZS5taXNzaW5nX2ZpbGVfaGFu ZGxlcnMsIG5hbWVfcmUsIGZsYWcsIGhhbmRsZXJfdHlwZQorKyAgICAgICAgICAgICkKKyAgICAg cHJpbnQoCistICAgICAgICAiJWQgbWlzc2luZyBkZWJ1ZyBoYW5kbGVyJXMgJXMiCistICAgICAg ICAlICh0b3RhbCwgIiIgaWYgdG90YWwgPT0gMSBlbHNlICJzIiwgImVuYWJsZWQiIGlmIGZsYWcg ZWxzZSAiZGlzYWJsZWQiKQorKyAgICAgICAgIiVkIG1pc3NpbmcgJXMgaGFuZGxlciVzICVzIgor KyAgICAgICAgJSAoCisrICAgICAgICAgICAgdG90YWwsCisrICAgICAgICAgICAgaGFuZGxlcl90 eXBlLAorKyAgICAgICAgICAgICIiIGlmIHRvdGFsID09IDEgZWxzZSAicyIsCisrICAgICAgICAg ICAgImVuYWJsZWQiIGlmIGZsYWcgZWxzZSAiZGlzYWJsZWQiLAorKyAgICAgICAgKQorICAgICAp CisgCisgCistY2xhc3MgRW5hYmxlTWlzc2luZ0RlYnVnSGFuZGxlcihnZGIuQ29tbWFuZCk6Cist ICAgICIiIkdEQiBjb21tYW5kIHRvIGVuYWJsZSBtaXNzaW5nIGRlYnVnIGhhbmRsZXJzLgorK2Ns YXNzIEVuYWJsZU1pc3NpbmdGaWxlSGFuZGxlcihnZGIuQ29tbWFuZCk6CisrICAgICIiIkdEQiBj b21tYW5kIHRvIGVuYWJsZSBtaXNzaW5nIEhUWVBFIGhhbmRsZXJzLgorIAorLSAgICBVc2FnZTog ZW5hYmxlIG1pc3NpbmctZGVidWctaGFuZGxlciBbTE9DVVMtUkVHRVhQIFtOQU1FLVJFR0VYUF1d CisrICAgIFVzYWdlOiBlbmFibGUgbWlzc2luZy1IVFlQRS1oYW5kbGVyIFtMT0NVUy1SRUdFWFAg W05BTUUtUkVHRVhQXV0KKyAKKyAgICAgTE9DVVMtUkVHRVhQIGlzIGEgcmVndWxhciBleHByZXNz aW9uIHNwZWNpZnlpbmcgdGhlIGhhbmRsZXJzIHRvCisgICAgIGVuYWJsZS4gIEl0IGNhbiBiZSAn Z2xvYmFsJywgJ3Byb2dzcGFjZScgZm9yIHRoZSBjdXJyZW50CitAQCAtMTg3LDE4ICsyMTEsMjYg QEAgY2xhc3MgRW5hYmxlTWlzc2luZ0RlYnVnSGFuZGxlcihnZGIuQ29tbWFuZCk6CisgICAgIGlu IHRoZSBsb2N1cyBhcmUgYWZmZWN0ZWQuCisgICAgICIiIgorIAorLSAgICBkZWYgX19pbml0X18o c2VsZik6CistICAgICAgICBzdXBlcigpLl9faW5pdF9fKCJlbmFibGUgbWlzc2luZy1kZWJ1Zy1o YW5kbGVyIiwgZ2RiLkNPTU1BTkRfRklMRVMpCisrICAgIGRlZiBfX2luaXRfXyhzZWxmLCBoYW5k bGVyX3R5cGUpOgorKyAgICAgICAgIyBVcGRhdGUgdGhlIGRvYyBzdHJpbmcgYmVmb3JlIGNhbGxp bmcgdGhlIHBhcmVudCBjb25zdHJ1Y3RvciwKKysgICAgICAgICMgcmVwbGFjaW5nIHRoZSBzdHJp bmcgJ0hUWVBFJyB3aXRoIHRoZSB2YWx1ZSBvZiBIQU5ETEVSX1RZUEUuCisrICAgICAgICAjIFRo ZSBwYXJlbnQgY29uc3RydWN0b3Igd2lsbCBncmFiIGEgY29weSBvZiB0aGlzIHN0cmluZyB0bwor KyAgICAgICAgIyB1c2UgYXMgdGhlIGNvbW1hbmRzIGhlbHAgdGV4dC4KKysgICAgICAgIHNlbGYu X19kb2NfXyA9IHNlbGYuX19kb2NfXy5yZXBsYWNlKCJIVFlQRSIsIGhhbmRsZXJfdHlwZSkKKysg ICAgICAgIHN1cGVyKCkuX19pbml0X18oCisrICAgICAgICAgICAgImVuYWJsZSBtaXNzaW5nLSIg KyBoYW5kbGVyX3R5cGUgKyAiLWhhbmRsZXIiLCBnZGIuQ09NTUFORF9GSUxFUworKyAgICAgICAg KQorKyAgICAgICAgc2VsZi5oYW5kbGVyX3R5cGUgPSBoYW5kbGVyX3R5cGUKKyAKKyAgICAgZGVm IGludm9rZShzZWxmLCBhcmcsIGZyb21fdHR5KToKKyAgICAgICAgICIiIkdEQiBjYWxscyB0aGlz IHRvIHBlcmZvcm0gdGhlIGNvbW1hbmQuIiIiCistICAgICAgICBkb19lbmFibGVfaGFuZGxlcihh cmcsIFRydWUpCisrICAgICAgICBkb19lbmFibGVfaGFuZGxlcihhcmcsIFRydWUsIHNlbGYuaGFu ZGxlcl90eXBlKQorIAorIAorLWNsYXNzIERpc2FibGVNaXNzaW5nRGVidWdIYW5kbGVyKGdkYi5D b21tYW5kKToKKy0gICAgIiIiR0RCIGNvbW1hbmQgdG8gZGlzYWJsZSBtaXNzaW5nIGRlYnVnIGhh bmRsZXJzLgorK2NsYXNzIERpc2FibGVNaXNzaW5nRmlsZUhhbmRsZXIoZ2RiLkNvbW1hbmQpOgor KyAgICAiIiJHREIgY29tbWFuZCB0byBkaXNhYmxlIG1pc3NpbmcgSFRZUEUgaGFuZGxlcnMuCisg CistICAgIFVzYWdlOiBkaXNhYmxlIG1pc3NpbmctZGVidWctaGFuZGxlciBbTE9DVVMtUkVHRVhQ IFtOQU1FLVJFR0VYUF1dCisrICAgIFVzYWdlOiBkaXNhYmxlIG1pc3NpbmctSFRZUEUtaGFuZGxl ciBbTE9DVVMtUkVHRVhQIFtOQU1FLVJFR0VYUF1dCisgCisgICAgIExPQ1VTLVJFR0VYUCBpcyBh IHJlZ3VsYXIgZXhwcmVzc2lvbiBzcGVjaWZ5aW5nIHRoZSBoYW5kbGVycyB0bworICAgICBlbmFi bGUuICBJdCBjYW4gYmUgJ2dsb2JhbCcsICdwcm9nc3BhY2UnIGZvciB0aGUgY3VycmVudAorQEAg LTIwOSwxOSArMjQxLDI4IEBAIGNsYXNzIERpc2FibGVNaXNzaW5nRGVidWdIYW5kbGVyKGdkYi5D b21tYW5kKToKKyAgICAgaW4gdGhlIGxvY3VzIGFyZSBhZmZlY3RlZC4KKyAgICAgIiIiCisgCist ICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKy0gICAgICAgIHN1cGVyKCkuX19pbml0X18oImRpc2Fi bGUgbWlzc2luZy1kZWJ1Zy1oYW5kbGVyIiwgZ2RiLkNPTU1BTkRfRklMRVMpCisrICAgIGRlZiBf X2luaXRfXyhzZWxmLCBoYW5kbGVyX3R5cGUpOgorKyAgICAgICAgIyBVcGRhdGUgdGhlIGRvYyBz dHJpbmcgYmVmb3JlIGNhbGxpbmcgdGhlIHBhcmVudCBjb25zdHJ1Y3RvciwKKysgICAgICAgICMg cmVwbGFjaW5nIHRoZSBzdHJpbmcgJ0hUWVBFJyB3aXRoIHRoZSB2YWx1ZSBvZiBIQU5ETEVSX1RZ UEUuCisrICAgICAgICAjIFRoZSBwYXJlbnQgY29uc3RydWN0b3Igd2lsbCBncmFiIGEgY29weSBv ZiB0aGlzIHN0cmluZyB0bworKyAgICAgICAgIyB1c2UgYXMgdGhlIGNvbW1hbmRzIGhlbHAgdGV4 dC4KKysgICAgICAgIHNlbGYuX19kb2NfXyA9IHNlbGYuX19kb2NfXy5yZXBsYWNlKCJIVFlQRSIs IGhhbmRsZXJfdHlwZSkKKysgICAgICAgIHN1cGVyKCkuX19pbml0X18oCisrICAgICAgICAgICAg ImRpc2FibGUgbWlzc2luZy0iICsgaGFuZGxlcl90eXBlICsgIi1oYW5kbGVyIiwgZ2RiLkNPTU1B TkRfRklMRVMKKysgICAgICAgICkKKysgICAgICAgIHNlbGYuaGFuZGxlcl90eXBlID0gaGFuZGxl cl90eXBlCisgCisgICAgIGRlZiBpbnZva2Uoc2VsZiwgYXJnLCBmcm9tX3R0eSk6CisgICAgICAg ICAiIiJHREIgY2FsbHMgdGhpcyB0byBwZXJmb3JtIHRoZSBjb21tYW5kLiIiIgorLSAgICAgICAg ZG9fZW5hYmxlX2hhbmRsZXIoYXJnLCBGYWxzZSkKKysgICAgICAgIGRvX2VuYWJsZV9oYW5kbGVy KGFyZywgRmFsc2UsIHNlbGYuaGFuZGxlcl90eXBlKQorIAorIAorLWRlZiByZWdpc3Rlcl9taXNz aW5nX2RlYnVnX2hhbmRsZXJfY29tbWFuZHMoKToKKy0gICAgIiIiSW5zdGFsbHMgdGhlIG1pc3Np bmcgZGVidWcgaGFuZGxlciBjb21tYW5kcy4iIiIKKy0gICAgSW5mb01pc3NpbmdEZWJ1Z0hhbmRl cnMoKQorLSAgICBFbmFibGVNaXNzaW5nRGVidWdIYW5kbGVyKCkKKy0gICAgRGlzYWJsZU1pc3Np bmdEZWJ1Z0hhbmRsZXIoKQorK2RlZiByZWdpc3Rlcl9taXNzaW5nX2ZpbGVfaGFuZGxlcl9jb21t YW5kcygpOgorKyAgICAiIiJJbnN0YWxscyB0aGUgbWlzc2luZyBmaWxlIGhhbmRsZXIgY29tbWFu ZHMuIiIiCisrICAgIGZvciBoYW5kbGVyX3R5cGUgaW4gWyJkZWJ1ZyIsICJvYmpmaWxlIl06Cisr ICAgICAgICBJbmZvTWlzc2luZ0ZpbGVIYW5kbGVycyhoYW5kbGVyX3R5cGUpCisrICAgICAgICBF bmFibGVNaXNzaW5nRmlsZUhhbmRsZXIoaGFuZGxlcl90eXBlKQorKyAgICAgICAgRGlzYWJsZU1p c3NpbmdGaWxlSGFuZGxlcihoYW5kbGVyX3R5cGUpCisgCisgCistcmVnaXN0ZXJfbWlzc2luZ19k ZWJ1Z19oYW5kbGVyX2NvbW1hbmRzKCkKKytyZWdpc3Rlcl9taXNzaW5nX2ZpbGVfaGFuZGxlcl9j b21tYW5kcygpCitkaWZmIC0tZ2l0IGEvZ2RiL3B5dGhvbi9saWIvZ2RiL21pc3NpbmdfZGVidWcu cHkgYi9nZGIvcHl0aG9uL2xpYi9nZGIvbWlzc2luZ19kZWJ1Zy5weQorLS0tIGEvZ2RiL3B5dGhv bi9saWIvZ2RiL21pc3NpbmdfZGVidWcucHkKKysrKyBiL2dkYi9weXRob24vbGliL2dkYi9taXNz aW5nX2RlYnVnLnB5CitAQCAtMTcsNDggKzE3LDExIEBACisgTWlzc2luZ0RlYnVnSGFuZGxlciBi YXNlIGNsYXNzLCBhbmQgcmVnaXN0ZXJfaGFuZGxlciBmdW5jdGlvbi4KKyAiIiIKKyAKKy1pbXBv cnQgc3lzCistCisgaW1wb3J0IGdkYgorK2Zyb20gZ2RiLm1pc3NpbmdfZmlsZXMgaW1wb3J0IE1p c3NpbmdGaWxlSGFuZGxlcgorIAorLWlmIHN5cy52ZXJzaW9uX2luZm8gPj0gKDMsIDcpOgorLSAg ICAjIEZ1bmN0aW9ucyBzdHIuaXNhc2NpaSgpIGFuZCBzdHIuaXNhbG51bSBhcmUgYXZhaWxhYmxl IHN0YXJ0aW5nIFB5dGhvbgorLSAgICAjIDMuNy4KKy0gICAgZGVmIGlzYXNjaWkoY2gpOgorLSAg ICAgICAgcmV0dXJuIGNoLmlzYXNjaWkoKQorLQorLSAgICBkZWYgaXNhbG51bShjaCk6CistICAg ICAgICByZXR1cm4gY2guaXNhbG51bSgpCistCistZWxzZToKKy0gICAgIyBGYWxsIGJhY2sgdG8g Y3Vyc2VzLmFzY2lpLmlzYXNjaWkoKSBhbmQgY3Vyc2VzLmFzY2lpLmlzYWxudW0oKSBmb3IKKy0g ICAgIyBlYXJsaWVyIHZlcnNpb25zLgorLSAgICBmcm9tIGN1cnNlcy5hc2NpaSBpbXBvcnQgaXNh bG51bSwgaXNhc2NpaQorLQorLQorLWRlZiBfdmFsaWRhdGVfbmFtZShuYW1lKToKKy0gICAgIiIi VmFsaWRhdGUgYSBtaXNzaW5nIGRlYnVnIGhhbmRsZXIgbmFtZSBzdHJpbmcuCistCistICAgIElm IG5hbWUgaXMgdmFsaWQgYXMgYSBtaXNzaW5nIGRlYnVnIGhhbmRsZXIgbmFtZSwgdGhlbiB0aGlz CistICAgIGZ1bmN0aW9uIGRvZXMgbm90aGluZy4gIElmIG5hbWUgaXMgbm90IHZhbGlkIHRoZW4g YW4gZXhjZXB0aW9uIGlzCistICAgIHJhaXNlZC4KKy0KKy0gICAgQXJndW1lbnRzOgorLSAgICAg ICAgbmFtZTogQSBzdHJpbmcsIHRoZSBuYW1lIG9mIGEgbWlzc2luZyBkZWJ1ZyBoYW5kbGVyLgor LQorLSAgICBSZXR1cm5zOgorLSAgICAgICAgTm90aGluZy4KKyAKKy0gICAgUmFpc2VzOgorLSAg ICAgICAgVmFsdWVFcnJvcjogSWYgbmFtZSBpcyBpbnZhbGlkIGFzIGEgbWlzc2luZyBkZWJ1ZyBo YW5kbGVyCistICAgICAgICAgICAgICAgICAgICBuYW1lLgorLSAgICAiIiIKKy0gICAgZm9yIGNo IGluIG5hbWU6CistICAgICAgICBpZiBub3QgaXNhc2NpaShjaCkgb3Igbm90IChpc2FsbnVtKGNo KSBvciBjaCBpbiAiXy0iKToKKy0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJpbnZhbGlk IGNoYXJhY3RlciAnJXMnIGluIGhhbmRsZXIgbmFtZTogJXMiICUgKGNoLCBuYW1lKSkKKy0KKy0K Ky1jbGFzcyBNaXNzaW5nRGVidWdIYW5kbGVyKG9iamVjdCk6CisrY2xhc3MgTWlzc2luZ0RlYnVn SGFuZGxlcihNaXNzaW5nRmlsZUhhbmRsZXIpOgorICAgICAiIiJCYXNlIGNsYXNzIGZvciBtaXNz aW5nIGRlYnVnIGhhbmRsZXJzIHdyaXR0ZW4gaW4gUHl0aG9uLgorIAorICAgICBBIG1pc3Npbmcg ZGVidWcgaGFuZGxlciBoYXMgYSBzaW5nbGUgbWV0aG9kIF9fY2FsbF9fIGFsb25nIHdpdGgKK0BA IC02OSw0MSArMzIsOCBAQCBjbGFzcyBNaXNzaW5nRGVidWdIYW5kbGVyKG9iamVjdCk6CisgICAg ICAgICBlbmFibGVkOiBXaGVuIHRydWUgdGhpcyBoYW5kbGVyIGlzIGVuYWJsZWQuCisgICAgICIi IgorIAorLSAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSk6CistICAgICAgICAiIiJDb25zdHJ1 Y3Rvci4KKy0KKy0gICAgICAgIEFyZ3M6CistICAgICAgICAgICAgbmFtZTogQW4gaWRlbnRpZnlp bmcgbmFtZSBmb3IgdGhpcyBoYW5kbGVyLgorLQorLSAgICAgICAgUmFpc2VzOgorLSAgICAgICAg ICAgIFR5cGVFcnJvcjogbmFtZSBpcyBub3QgYSBzdHJpbmcuCistICAgICAgICAgICAgVmFsdWVF cnJvcjogbmFtZSBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnMuCistICAgICAgICAiIiIKKy0K Ky0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG5hbWUsIHN0cik6CistICAgICAgICAgICAgcmFp c2UgVHlwZUVycm9yKCJpbmNvcnJlY3QgdHlwZSBmb3IgbmFtZTogJXMiICUgdHlwZShuYW1lKSkK Ky0KKy0gICAgICAgIF92YWxpZGF0ZV9uYW1lKG5hbWUpCistCistICAgICAgICBzZWxmLl9uYW1l ID0gbmFtZQorLSAgICAgICAgc2VsZi5fZW5hYmxlZCA9IFRydWUKKy0KKy0gICAgQHByb3BlcnR5 CistICAgIGRlZiBuYW1lKHNlbGYpOgorLSAgICAgICAgcmV0dXJuIHNlbGYuX25hbWUKKy0KKy0g ICAgQHByb3BlcnR5CistICAgIGRlZiBlbmFibGVkKHNlbGYpOgorLSAgICAgICAgcmV0dXJuIHNl bGYuX2VuYWJsZWQKKy0KKy0gICAgQGVuYWJsZWQuc2V0dGVyCistICAgIGRlZiBlbmFibGVkKHNl bGYsIHZhbHVlKToKKy0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHZhbHVlLCBib29sKToKKy0g ICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImluY29ycmVjdCB0eXBlIGZvciBlbmFibGVkIGF0 dHJpYnV0ZTogJXMiICUgdHlwZSh2YWx1ZSkpCistICAgICAgICBzZWxmLl9lbmFibGVkID0gdmFs dWUKKy0KKyAgICAgZGVmIF9fY2FsbF9fKHNlbGYsIG9iamZpbGUpOgorLSAgICAgICAgIiIiR0RC IGhhbmRsZSBtaXNzaW5nIGRlYnVnIGluZm9ybWF0aW9uIGZvciBhbiBvYmpmaWxlLgorKyAgICAg ICAgIiIiSGFuZGxlIG1pc3NpbmcgZGVidWcgaW5mb3JtYXRpb24gZm9yIGFuIG9iamZpbGUuCisg CisgICAgICAgICBBcmd1bWVudHM6CisgICAgICAgICAgICAgb2JqZmlsZTogQSBnZGIuT2JqZmls ZSBmb3Igd2hpY2ggR0RCIGNvdWxkIG5vdCBmaW5kIGFueQorQEAgLTEyNCw2MiArNTQsNSBAQCBj bGFzcyBNaXNzaW5nRGVidWdIYW5kbGVyKG9iamVjdCk6CisgCisgCisgZGVmIHJlZ2lzdGVyX2hh bmRsZXIobG9jdXMsIGhhbmRsZXIsIHJlcGxhY2U9RmFsc2UpOgorLSAgICAiIiJSZWdpc3RlciBo YW5kbGVyIGluIGdpdmVuIGxvY3VzLgorLQorLSAgICBUaGUgaGFuZGxlciBpcyBwcmVwZW5kZWQg dG8gdGhlIGxvY3VzJ3MgbWlzc2luZyBkZWJ1ZyBoYW5kbGVycworLSAgICBsaXN0LiBUaGUgbmFt ZSBvZiBoYW5kbGVyIHNob3VsZCBiZSB1bmlxdWUgKG9yIHJlcGxhY2UgbXVzdCBiZQorLSAgICBU cnVlKS4KKy0KKy0gICAgQXJndW1lbnRzOgorLSAgICAgICAgbG9jdXM6IEVpdGhlciBhIHByb2dz cGFjZSwgb3IgTm9uZSAoaW4gd2hpY2ggY2FzZSB0aGUgdW53aW5kZXIKKy0gICAgICAgICAgICAg ICBpcyByZWdpc3RlcmVkIGdsb2JhbGx5KS4KKy0gICAgICAgIGhhbmRsZXI6IEFuIG9iamVjdCBv ZiBhIGdkYi5NaXNzaW5nRGVidWdIYW5kbGVyIHN1YmNsYXNzLgorLQorLSAgICAgICAgcmVwbGFj ZTogSWYgVHJ1ZSwgcmVwbGFjZXMgZXhpc3RpbmcgaGFuZGxlciB3aXRoIHRoZSBzYW1lIG5hbWUK Ky0gICAgICAgICAgICAgICAgIHdpdGhpbiBsb2N1cy4gIE90aGVyd2lzZSwgcmFpc2VzIFJ1bnRp bWVFeGNlcHRpb24gaWYKKy0gICAgICAgICAgICAgICAgIHVud2luZGVyIHdpdGggdGhlIHNhbWUg bmFtZSBhbHJlYWR5IGV4aXN0cy4KKy0KKy0gICAgUmV0dXJuczoKKy0gICAgICAgIE5vdGhpbmcu CistCistICAgIFJhaXNlczoKKy0gICAgICAgIFJ1bnRpbWVFcnJvcjogVGhlIG5hbWUgb2YgaGFu ZGxlciBpcyBub3QgdW5pcXVlLgorLSAgICAgICAgVHlwZUVycm9yOiBCYWQgbG9jdXMgdHlwZS4K Ky0gICAgICAgIEF0dHJpYnV0ZUVycm9yOiBSZXF1aXJlZCBhdHRyaWJ1dGVzIG9mIGhhbmRsZXIg YXJlIG1pc3NpbmcuCistICAgICIiIgorLQorLSAgICBpZiBsb2N1cyBpcyBOb25lOgorLSAgICAg ICAgaWYgZ2RiLnBhcmFtZXRlcigidmVyYm9zZSIpOgorLSAgICAgICAgICAgIGdkYi53cml0ZSgi UmVnaXN0ZXJpbmcgZ2xvYmFsICVzIGhhbmRsZXIgLi4uXG4iICUgaGFuZGxlci5uYW1lKQorLSAg ICAgICAgbG9jdXMgPSBnZGIKKy0gICAgZWxpZiBpc2luc3RhbmNlKGxvY3VzLCBnZGIuUHJvZ3Nw YWNlKToKKy0gICAgICAgIGlmIGdkYi5wYXJhbWV0ZXIoInZlcmJvc2UiKToKKy0gICAgICAgICAg ICBnZGIud3JpdGUoCistICAgICAgICAgICAgICAgICJSZWdpc3RlcmluZyAlcyBoYW5kbGVyIGZv ciAlcyAuLi5cbiIgJSAoaGFuZGxlci5uYW1lLCBsb2N1cy5maWxlbmFtZSkKKy0gICAgICAgICAg ICApCistICAgIGVsc2U6CistICAgICAgICByYWlzZSBUeXBlRXJyb3IoImxvY3VzIHNob3VsZCBi ZSBnZGIuUHJvZ3NwYWNlIG9yIE5vbmUiKQorLQorLSAgICAjIFNvbWUgc2FuaXR5IGNoZWNrcyBv biBIQU5ETEVSLiAgQ2FsbGluZyBnZXRhdHRyIHdpbGwgcmFpc2UgYW4KKy0gICAgIyBleGNlcHRp b24gaWYgdGhlIGF0dHJpYnV0ZSBkb2Vzbid0IGV4aXN0LCB3aGljaCBpcyB3aGF0IHdlIHdhbnQu CistICAgICMgVGhlc2UgY2hlY2tzIGFyZSBub3QgZXhoYXVzdGl2ZTsgd2UgZG9uJ3QgY2hlY2sg dGhlIGF0dHJpYnV0ZXMKKy0gICAgIyBoYXZlIHRoZSBjb3JyZWN0IHR5cGVzLCBvciB0aGUgbWV0 aG9kIGhhcyB0aGUgY29ycmVjdCBzaWduYXR1cmUsCistICAgICMgYnV0IHRoaXMgc2hvdWxkIGNh dGNoIHNvbWUgYmFzaWMgbWlzdGFrZXMuCistICAgIGdldGF0dHIoaGFuZGxlciwgIm5hbWUiKQor LSAgICBnZXRhdHRyKGhhbmRsZXIsICJlbmFibGVkIikKKy0gICAgY2FsbF9tZXRob2QgPSBnZXRh dHRyKGhhbmRsZXIsICJfX2NhbGxfXyIpCistICAgIGlmIG5vdCBjYWxsYWJsZShjYWxsX21ldGhv ZCk6CistICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigKKy0gICAgICAgICAgICAiJyVzJyBv YmplY3QncyAnX19jYWxsX18nIGF0dHJpYnV0ZSBpcyBub3QgY2FsbGFibGUiCistICAgICAgICAg ICAgJSB0eXBlKGhhbmRsZXIpLl9fbmFtZV9fCistICAgICAgICApCistCistICAgIGkgPSAwCist ICAgIGZvciBuZWVkbGUgaW4gbG9jdXMubWlzc2luZ19kZWJ1Z19oYW5kbGVyczoKKy0gICAgICAg IGlmIG5lZWRsZS5uYW1lID09IGhhbmRsZXIubmFtZToKKy0gICAgICAgICAgICBpZiByZXBsYWNl OgorLSAgICAgICAgICAgICAgICBkZWwgbG9jdXMubWlzc2luZ19kZWJ1Z19oYW5kbGVyc1tpXQor LSAgICAgICAgICAgIGVsc2U6CistICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigi SGFuZGxlciAlcyBhbHJlYWR5IGV4aXN0cy4iICUgaGFuZGxlci5uYW1lKQorLSAgICAgICAgaSAr PSAxCistICAgIGxvY3VzLm1pc3NpbmdfZGVidWdfaGFuZGxlcnMuaW5zZXJ0KDAsIGhhbmRsZXIp CisrICAgICIiIlNlZSBnZGIubWlzc2luZ19maWxlcy5yZWdpc3Rlcl9oYW5kbGVyLiIiIgorKyAg ICBnZGIubWlzc2luZ19maWxlcy5yZWdpc3Rlcl9oYW5kbGVyKCJkZWJ1ZyIsIGxvY3VzLCBoYW5k bGVyLCByZXBsYWNlKQorZGlmZiAtLWdpdCBhL2dkYi9weXRob24vbGliL2dkYi9taXNzaW5nX2Zp bGVzLnB5IGIvZ2RiL3B5dGhvbi9saWIvZ2RiL21pc3NpbmdfZmlsZXMucHkKK25ldyBmaWxlIG1v ZGUgMTAwNjQ0CistLS0gL2Rldi9udWxsCisrKysgYi9nZGIvcHl0aG9uL2xpYi9nZGIvbWlzc2lu Z19maWxlcy5weQorQEAgLTAsMCArMSwyMDQgQEAKKysjIENvcHlyaWdodCAoQykgMjAyMy0yMDI0 IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyMgVGhpcyBwcm9ncmFtIGlzIGZy ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysjIGl0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVi bGlzaGVkIGJ5CisrIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lv biAzIG9mIHRoZSBMaWNlbnNlLCBvcgorKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy c2lvbi4KKysjCisrIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrIyBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyMKKysjIFlvdSBzaG91bGQgaGF2ZSBy ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrIyBhbG9u ZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGlj ZW5zZXMvPi4KKysKKysiIiIKKytNaXNzaW5nRmlsZUhhbmRsZXIgYmFzZSBjbGFzcywgYW5kIHN1 cHBvcnQgZnVuY3Rpb25zIHVzZWQgYnkgdGhlCisrbWlzc2luZ19kZWJ1Zy5weSBhbmQgbWlzc2lu Z19vYmpmaWxlLnB5IG1vZHVsZXMuCisrIiIiCisrCisraW1wb3J0IHN5cworKworK2ltcG9ydCBn ZGIKKysKKytpZiBzeXMudmVyc2lvbl9pbmZvID49ICgzLCA3KToKKysgICAgIyBGdW5jdGlvbnMg c3RyLmlzYXNjaWkoKSBhbmQgc3RyLmlzYWxudW0gYXJlIGF2YWlsYWJsZSBzdGFydGluZyBQeXRo b24KKysgICAgIyAzLjcuCisrICAgIGRlZiBpc2FzY2lpKGNoKToKKysgICAgICAgIHJldHVybiBj aC5pc2FzY2lpKCkKKysKKysgICAgZGVmIGlzYWxudW0oY2gpOgorKyAgICAgICAgcmV0dXJuIGNo LmlzYWxudW0oKQorKworK2Vsc2U6CisrICAgICMgT2xkZXIgdmVyc2lvbiBvZiBQeXRob24gZG9l c24ndCBoYXZlIHN0ci5pc2FzY2lpKCkgYW5kCisrICAgICMgc3RyLmlzYWxudW0oKSBzbyBwcm92 aWRlIG91ciBvd24uCisrICAgICMKKysgICAgIyBXZSBjb3VsZCBpbXBvcnQgaXNhbG51bSgpIGFu ZCBpc2FzY2lpKCkgZnJvbSB0aGUgY3Vyc2VzIGxpYnJhcnksCisrICAgICMgYnV0IHRoYXQgYWRk cyBhbiBleHRyYSBkZXBlbmRlbmN5LiAgR2l2ZW4gdGhlc2UgZnVuY3Rpb25zIGFyZQorKyAgICAj IGJvdGggc21hbGwgYW5kIHRyaXZpYWwgbGV0cyBpbXBsZW1lbnQgdGhlbSBoZXJlLgorKyAgICAj CisrICAgICMgVGhlc2UgZGVmaW5pdGlvbnMgYXJlIGJhc2VkIG9uIHRob3NlIGluIHRoZSBjdXJz ZXMgbGlicmFyeSwgYnV0CisrICAgICMgc2ltcGxpZmllZCBhcyB3ZSBrbm93IEMgd2lsbCBhbHdh eXMgYmUgYSBzaW5nbGUgY2hhcmFjdGVyICdzdHInLgorKworKyAgICBkZWYgaXNkaWdpdChjKToK KysgICAgICAgIHJldHVybiA0OCA8PSBvcmQoYykgPD0gNTcKKysKKysgICAgZGVmIGlzbG93ZXIo Yyk6CisrICAgICAgICByZXR1cm4gOTcgPD0gb3JkKGMpIDw9IDEyMgorKworKyAgICBkZWYgaXN1 cHBlcihjKToKKysgICAgICAgIHJldHVybiA2NSA8PSBvcmQoYykgPD0gOTAKKysKKysgICAgZGVm IGlzYWxwaGEoYyk6CisrICAgICAgICByZXR1cm4gaXN1cHBlcihjKSBvciBpc2xvd2VyKGMpCisr CisrICAgIGRlZiBpc2FsbnVtKGMpOgorKyAgICAgICAgcmV0dXJuIGlzYWxwaGEoYykgb3IgaXNk aWdpdChjKQorKworKyAgICBkZWYgaXNhc2NpaShjKToKKysgICAgICAgIHJldHVybiAwIDw9IG9y ZChjKSA8PSAxMjcKKysKKysKKytkZWYgX3ZhbGlkYXRlX25hbWUobmFtZSk6CisrICAgICIiIlZh bGlkYXRlIGEgbWlzc2luZyBmaWxlIGhhbmRsZXIgbmFtZSBzdHJpbmcuCisrCisrICAgIElmIG5h bWUgaXMgdmFsaWQgYXMgYSBtaXNzaW5nIGZpbGUgaGFuZGxlciBuYW1lLCB0aGVuIHRoaXMKKysg ICAgZnVuY3Rpb24gZG9lcyBub3RoaW5nLiAgSWYgbmFtZSBpcyBub3QgdmFsaWQgdGhlbiBhbiBl eGNlcHRpb24gaXMKKysgICAgcmFpc2VkLgorKworKyAgICBBcmd1bWVudHM6CisrICAgICAgICBu YW1lOiBBIHN0cmluZywgdGhlIG5hbWUgb2YgYSBtaXNzaW5nIGZpbGUgaGFuZGxlci4KKysKKysg ICAgUmV0dXJuczoKKysgICAgICAgIE5vdGhpbmcuCisrCisrICAgIFJhaXNlczoKKysgICAgICAg IFZhbHVlRXJyb3I6IElmIG5hbWUgaXMgaW52YWxpZCBhcyBhIG1pc3NpbmcgZmlsZSBoYW5kbGVy CisrICAgICAgICAgICAgICAgICAgICBuYW1lLgorKyAgICAiIiIKKysKKysgICAgZm9yIGNoIGlu IG5hbWU6CisrICAgICAgICBpZiBub3QgaXNhc2NpaShjaCkgb3Igbm90IChpc2FsbnVtKGNoKSBv ciBjaCBpbiAiXy0iKToKKysgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJpbnZhbGlkIGNo YXJhY3RlciAnJXMnIGluIGhhbmRsZXIgbmFtZTogJXMiICUgKGNoLCBuYW1lKSkKKysKKysKKytj bGFzcyBNaXNzaW5nRmlsZUhhbmRsZXIob2JqZWN0KToKKysgICAgIiIiQmFzZSBjbGFzcyBmb3Ig bWlzc2luZyBmaWxlIGhhbmRsZXJzIHdyaXR0ZW4gaW4gUHl0aG9uLgorKworKyAgICBBIG1pc3Np bmcgZmlsZSBoYW5kbGVyIGhhcyBhIHNpbmdsZSBtZXRob2QgX19jYWxsX18gYWxvbmcgd2l0aCB0 aGUKKysgICAgcmVhZC93cml0ZSBhdHRyaWJ1dGUgZW5hYmxlZCwgYW5kIGEgcmVhZC1vbmx5IGF0 dHJpYnV0ZSBuYW1lLiAgVGhlCisrICAgIGF0dHJpYnV0ZXMgYXJlIHByb3ZpZGVkIGJ5IHRoaXMg Y2xhc3Mgd2hpbGUgdGhlIF9fY2FsbF9fIG1ldGhvZCBpcworKyAgICBwcm92aWRlZCBieSBhIHN1 Yi1jbGFzcy4gIEVhY2ggc3ViLWNsYXNzZXMgX19jYWxsX18gbWV0aG9kIHdpbGwKKysgICAgaGF2 ZSBhIGRpZmZlcmVudCBzaWduYXR1cmUuCisrCisrICAgIEF0dHJpYnV0ZXM6CisrICAgICAgICBu YW1lOiBSZWFkLW9ubHkgYXR0cmlidXRlLCB0aGUgbmFtZSBvZiB0aGlzIGhhbmRsZXIuCisrICAg ICAgICBlbmFibGVkOiBXaGVuIHRydWUgdGhpcyBoYW5kbGVyIGlzIGVuYWJsZWQuCisrICAgICIi IgorKworKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSk6CisrICAgICAgICAiIiJDb25zdHJ1 Y3Rvci4KKysKKysgICAgICAgIEFyZ3M6CisrICAgICAgICAgICAgbmFtZTogQW4gaWRlbnRpZnlp bmcgbmFtZSBmb3IgdGhpcyBoYW5kbGVyLgorKworKyAgICAgICAgUmFpc2VzOgorKyAgICAgICAg ICAgIFR5cGVFcnJvcjogbmFtZSBpcyBub3QgYSBzdHJpbmcuCisrICAgICAgICAgICAgVmFsdWVF cnJvcjogbmFtZSBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnMuCisrICAgICAgICAiIiIKKysK KysgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG5hbWUsIHN0cik6CisrICAgICAgICAgICAgcmFp c2UgVHlwZUVycm9yKCJpbmNvcnJlY3QgdHlwZSBmb3IgbmFtZTogJXMiICUgdHlwZShuYW1lKSkK KysKKysgICAgICAgIF92YWxpZGF0ZV9uYW1lKG5hbWUpCisrCisrICAgICAgICBzZWxmLl9uYW1l ID0gbmFtZQorKyAgICAgICAgc2VsZi5fZW5hYmxlZCA9IFRydWUKKysKKysgICAgQHByb3BlcnR5 CisrICAgIGRlZiBuYW1lKHNlbGYpOgorKyAgICAgICAgcmV0dXJuIHNlbGYuX25hbWUKKysKKysg ICAgQHByb3BlcnR5CisrICAgIGRlZiBlbmFibGVkKHNlbGYpOgorKyAgICAgICAgcmV0dXJuIHNl bGYuX2VuYWJsZWQKKysKKysgICAgQGVuYWJsZWQuc2V0dGVyCisrICAgIGRlZiBlbmFibGVkKHNl bGYsIHZhbHVlKToKKysgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHZhbHVlLCBib29sKToKKysg ICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImluY29ycmVjdCB0eXBlIGZvciBlbmFibGVkIGF0 dHJpYnV0ZTogJXMiICUgdHlwZSh2YWx1ZSkpCisrICAgICAgICBzZWxmLl9lbmFibGVkID0gdmFs dWUKKysKKysKKytkZWYgcmVnaXN0ZXJfaGFuZGxlcihoYW5kbGVyX3R5cGUsIGxvY3VzLCBoYW5k bGVyLCByZXBsYWNlPUZhbHNlKToKKysgICAgIiIiUmVnaXN0ZXIgaGFuZGxlciBpbiBnaXZlbiBs b2N1cy4KKysKKysgICAgVGhlIGhhbmRsZXIgaXMgcHJlcGVuZGVkIHRvIHRoZSBsb2N1cydzIG1p c3NpbmcgZmlsZSBoYW5kbGVycworKyAgICBsaXN0LiBUaGUgbmFtZSBvZiBoYW5kbGVyIHNob3Vs ZCBiZSB1bmlxdWUgKG9yIHJlcGxhY2UgbXVzdCBiZQorKyAgICBUcnVlKSwgYW5kIHRoZSBuYW1l IG11c3QgcGFzcyB0aGUgX3ZhbGlkYXRlX25hbWUgY2hlY2suCisrCisrICAgIEFyZ3VtZW50czoK KysgICAgICAgIGhhbmRsZXJfdHlwZTogQSBzdHJpbmcsIGVpdGhlciAnZGVidWcnIG9yICdvYmpm aWxlJyBpbmRpY2F0aW5nIHRoZQorKyAgICAgICAgICAgIHR5cGUgb2YgaGFuZGxlciB0byBiZSBy ZWdpc3RlcmVkLgorKyAgICAgICAgbG9jdXM6IEVpdGhlciBhIHByb2dzcGFjZSwgb3IgTm9uZSAo aW4gd2hpY2ggY2FzZSB0aGUgdW53aW5kZXIKKysgICAgICAgICAgICAgICBpcyByZWdpc3RlcmVk IGdsb2JhbGx5KS4KKysgICAgICAgIGhhbmRsZXI6IEFuIG9iamVjdCB1c2VkIGFzIGEgbWlzc2lu ZyBmaWxlIGhhbmRsZXIuICBVc3VhbGx5IGEKKysgICAgICAgICAgICBzdWItY2xhc3Mgb2YgTWlz c2luZ0ZpbGVIYW5kbGVyLgorKyAgICAgICAgcmVwbGFjZTogSWYgVHJ1ZSwgcmVwbGFjZXMgZXhp c3RpbmcgaGFuZGxlciB3aXRoIHRoZSBzYW1lIG5hbWUKKysgICAgICAgICAgICAgICAgIHdpdGhp biBsb2N1cy4gIE90aGVyd2lzZSwgcmFpc2VzIFJ1bnRpbWVFeGNlcHRpb24gaWYKKysgICAgICAg ICAgICAgICAgIHVud2luZGVyIHdpdGggdGhlIHNhbWUgbmFtZSBhbHJlYWR5IGV4aXN0cy4KKysK KysgICAgUmV0dXJuczoKKysgICAgICAgIE5vdGhpbmcuCisrCisrICAgIFJhaXNlczoKKysgICAg ICAgIFJ1bnRpbWVFcnJvcjogVGhlIG5hbWUgb2YgaGFuZGxlciBpcyBub3QgdW5pcXVlLgorKyAg ICAgICAgVHlwZUVycm9yOiBCYWQgbG9jdXMgdHlwZS4KKysgICAgICAgIEF0dHJpYnV0ZUVycm9y OiBSZXF1aXJlZCBhdHRyaWJ1dGVzIG9mIGhhbmRsZXIgYXJlIG1pc3NpbmcuCisrICAgICAgICBW YWx1ZUVycm9yOiBJZiB0aGUgbmFtZSBvZiB0aGUgaGFuZGxlciBpcyBpbnZhbGlkLCBvciBpZgor KyAgICAgICAgICAgIGhhbmRsZXJfdHlwZSBpcyBuZWl0aGVyICdkZWJ1Zycgb3IgJ29iamZpbGUn LgorKyAgICAiIiIKKysKKysgICAgaWYgaGFuZGxlcl90eXBlICE9ICJkZWJ1ZyIgYW5kIGhhbmRs ZXJfdHlwZSAhPSAib2JqZmlsZSI6CisrICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJoYW5kbGVy X3R5cGUgbXVzdCBiZSAnZGVidWcnIG9yICdvYmpmaWxlJyIpCisrCisrICAgIGlmIGxvY3VzIGlz IE5vbmU6CisrICAgICAgICBpZiBnZGIucGFyYW1ldGVyKCJ2ZXJib3NlIik6CisrICAgICAgICAg ICAgZ2RiLndyaXRlKCJSZWdpc3RlcmluZyBnbG9iYWwgJXMgaGFuZGxlciAuLi5cbiIgJSBoYW5k bGVyLm5hbWUpCisrICAgICAgICBsb2N1cyA9IGdkYgorKyAgICBlbGlmIGlzaW5zdGFuY2UobG9j dXMsIGdkYi5Qcm9nc3BhY2UpOgorKyAgICAgICAgaWYgZ2RiLnBhcmFtZXRlcigidmVyYm9zZSIp OgorKyAgICAgICAgICAgIGdkYi53cml0ZSgKKysgICAgICAgICAgICAgICAgIlJlZ2lzdGVyaW5n ICVzIGhhbmRsZXIgZm9yICVzIC4uLlxuIiAlIChoYW5kbGVyLm5hbWUsIGxvY3VzLmZpbGVuYW1l KQorKyAgICAgICAgICAgICkKKysgICAgZWxzZToKKysgICAgICAgIHJhaXNlIFR5cGVFcnJvcigi bG9jdXMgc2hvdWxkIGJlIGdkYi5Qcm9nc3BhY2Ugb3IgTm9uZSIpCisrCisrICAgICMgU29tZSBz YW5pdHkgY2hlY2tzIG9uIEhBTkRMRVIuICBDYWxsaW5nIGdldGF0dHIgd2lsbCByYWlzZSBhbgor KyAgICAjIGV4Y2VwdGlvbiBpZiB0aGUgYXR0cmlidXRlIGRvZXNuJ3QgZXhpc3QsIHdoaWNoIGlz IHdoYXQgd2Ugd2FudC4KKysgICAgIyBUaGVzZSBjaGVja3MgYXJlIG5vdCBleGhhdXN0aXZlOyB3 ZSBkb24ndCBjaGVjayB0aGUgYXR0cmlidXRlcworKyAgICAjIGhhdmUgdGhlIGNvcnJlY3QgdHlw ZXMsIG9yIHRoZSBtZXRob2QgaGFzIHRoZSBjb3JyZWN0IHNpZ25hdHVyZSwKKysgICAgIyBidXQg dGhpcyBzaG91bGQgY2F0Y2ggc29tZSBiYXNpYyBtaXN0YWtlcy4KKysgICAgbmFtZSA9IGdldGF0 dHIoaGFuZGxlciwgIm5hbWUiKQorKyAgICBfdmFsaWRhdGVfbmFtZShuYW1lKQorKworKyAgICBn ZXRhdHRyKGhhbmRsZXIsICJlbmFibGVkIikKKysKKysgICAgY2FsbF9tZXRob2QgPSBnZXRhdHRy KGhhbmRsZXIsICJfX2NhbGxfXyIpCisrICAgIGlmIG5vdCBjYWxsYWJsZShjYWxsX21ldGhvZCk6 CisrICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigKKysgICAgICAgICAgICAiJyVzJyBvYmpl Y3QncyAnX19jYWxsX18nIGF0dHJpYnV0ZSBpcyBub3QgY2FsbGFibGUiCisrICAgICAgICAgICAg JSB0eXBlKGhhbmRsZXIpLl9fbmFtZV9fCisrICAgICAgICApCisrCisrICAgIGkgPSAwCisrICAg IGZvciBuZWVkbGUgaW4gbG9jdXMubWlzc2luZ19maWxlX2hhbmRsZXJzOgorKyAgICAgICAgaWYg bmVlZGxlWzBdID09IGhhbmRsZXJfdHlwZSBhbmQgbmVlZGxlWzFdLm5hbWUgPT0gaGFuZGxlci5u YW1lOgorKyAgICAgICAgICAgIGlmIHJlcGxhY2U6CisrICAgICAgICAgICAgICAgIGRlbCBsb2N1 cy5taXNzaW5nX2ZpbGVfaGFuZGxlcnNbaV0KKysgICAgICAgICAgICBlbHNlOgorKyAgICAgICAg ICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIkhhbmRsZXIgJXMgYWxyZWFkeSBleGlzdHMuIiAl IGhhbmRsZXIubmFtZSkKKysgICAgICAgIGkgKz0gMQorKyAgICBsb2N1cy5taXNzaW5nX2ZpbGVf aGFuZGxlcnMuaW5zZXJ0KDAsIChoYW5kbGVyX3R5cGUsIGhhbmRsZXIpKQorZGlmZiAtLWdpdCBh L2dkYi9weXRob24vbGliL2dkYi9taXNzaW5nX29iamZpbGUucHkgYi9nZGIvcHl0aG9uL2xpYi9n ZGIvbWlzc2luZ19vYmpmaWxlLnB5CituZXcgZmlsZSBtb2RlIDEwMDY0NAorLS0tIC9kZXYvbnVs bAorKysrIGIvZ2RiL3B5dGhvbi9saWIvZ2RiL21pc3Npbmdfb2JqZmlsZS5weQorQEAgLTAsMCAr MSw2NyBAQAorKyMgQ29weXJpZ2h0IChDKSAyMDI0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg SW5jLgorKworKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisrIyB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorKyMg KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysjCisrIyBUaGlzIHByb2dyYW0g aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysjIGJ1 dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5 IG9mCisrIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlCisrIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLgorKyMKKysjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5v dCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKysKKysiIiIKKytNaXNzaW5n T2JqZmlsZUhhbmRsZXIgYmFzZSBjbGFzcywgYW5kIHJlZ2lzdGVyX2hhbmRsZXIgZnVuY3Rpb24u CisrIiIiCisrCisraW1wb3J0IGdkYgorK2Zyb20gZ2RiLm1pc3NpbmdfZmlsZXMgaW1wb3J0IE1p c3NpbmdGaWxlSGFuZGxlcgorKworKworK2NsYXNzIE1pc3NpbmdPYmpmaWxlSGFuZGxlcihNaXNz aW5nRmlsZUhhbmRsZXIpOgorKyAgICAiIiJCYXNlIGNsYXNzIGZvciBtaXNzaW5nIG9iamZpbGUg aGFuZGxlcnMgd3JpdHRlbiBpbiBQeXRob24uCisrCisrICAgIEEgbWlzc2luZyBvYmpmaWxlIGhh bmRsZXIgaGFzIGEgc2luZ2xlIG1ldGhvZCBfX2NhbGxfXyBhbG9uZyB3aXRoCisrICAgIHRoZSBy ZWFkL3dyaXRlIGF0dHJpYnV0ZSBlbmFibGVkLCBhbmQgYSByZWFkLW9ubHkgYXR0cmlidXRlIG5h bWUuCisrCisrICAgIEF0dHJpYnV0ZXM6CisrICAgICAgICBuYW1lOiBSZWFkLW9ubHkgYXR0cmli dXRlLCB0aGUgbmFtZSBvZiB0aGlzIGhhbmRsZXIuCisrICAgICAgICBlbmFibGVkOiBXaGVuIHRy dWUgdGhpcyBoYW5kbGVyIGlzIGVuYWJsZWQuCisrICAgICIiIgorKworKyAgICBkZWYgX19jYWxs X18oc2VsZiwgYnVpbGRpZCwgZmlsZW5hbWUpOgorKyAgICAgICAgIiIiSGFuZGxlIGEgbWlzc2lu ZyBvYmpmaWxlIHdoZW4gR0RCIGNhbiBrbm93cyB0aGUgYnVpbGQtaWQuCisrCisrICAgICAgICBB cmd1bWVudHM6CisrCisrICAgICAgICAgICAgYnVpbGRpZDogQSBzdHJpbmcgY29udGFpbmluZyB0 aGUgYnVpbGQtaWQgZm9yIHRoZSBvYmpmaWxlCisrICAgICAgICAgICAgICAgIEdEQiBpcyBzZWFy Y2hpbmcgZm9yLgorKyAgICAgICAgICAgIGZpbGVuYW1lOiBBIHN0cmluZyBjb250YWluaW5nIHRo ZSBuYW1lIG9mIHRoZSBmaWxlIEdEQiBpcworKyAgICAgICAgICAgICAgICBzZWFyY2hpbmcgZm9y LiAgVGhpcyBpcyBwcm92aWRlZCBvbmx5IGZvciB0aGUgcHVycG9zZQorKyAgICAgICAgICAgICAg ICBvZiBjcmVhdGluZyBkaWFnbm9zdGljIG1lc3NhZ2VzLiAgSWYgdGhlIGZpbGUgaXMgZm91bmQK KysgICAgICAgICAgICAgICAgaXQgZG9lcyBub3QgaGF2ZSB0byBiZSBwbGFjZWQgaGVyZSwgYW5k IHRoaXMgZmlsZQorKyAgICAgICAgICAgICAgICBtaWdodCBhbHJlYWR5IGV4aXN0IGJ1dCBHREIg aGFzIGRldGVybWluZWQgaXQgaXMgbm90CisrICAgICAgICAgICAgICAgIHN1aXRhYmxlIGZvciB1 c2UsIGUuZy4gaWYgdGhlIGJ1aWxkLWlkIGRvZXNuJ3QgbWF0Y2guCisrCisrICAgICAgICBSZXR1 cm5zOgorKworKyAgICAgICAgICAgIFRydWU6IEdEQiBzaG91bGQgdHJ5IGFnYWluIHRvIGxvY2F0 ZSB0aGUgbWlzc2luZyBvYmpmaWxlLAorKyAgICAgICAgICAgICAgICB0aGUgaGFuZGxlciBtYXkg aGF2ZSBpbnN0YWxsZWQgdGhlIG1pc3NpbmcgZmlsZS4KKysgICAgICAgICAgICBGYWxzZTogR0RC IHNob3VsZCBtb3ZlIG9uIHdpdGhvdXQgdGhlIG9iamZpbGUuICBUaGUKKysgICAgICAgICAgICAg ICAgaGFuZGxlciBoYXMgZGV0ZXJtaW5lZCB0aGF0IHRoaXMgb2JqZmlsZSBpcyBub3QKKysgICAg ICAgICAgICAgICAgYXZhaWxhYmxlLgorKyAgICAgICAgICAgIEEgc3RyaW5nOiBHREIgc2hvdWxk IGxvYWQgdGhlIGZpbGUgYXQgdGhlIGdpdmVuIHBhdGg7IGl0CisrICAgICAgICAgICAgICAgIGNv bnRhaW5zIHRoZSByZXF1ZXN0ZWQgb2JqZmlsZS4KKysgICAgICAgICAgICBOb25lOiBUaGlzIGhh bmRsZXIgY2FuJ3QgaGVscCB3aXRoIHRoaXMgb2JqZmlsZS4gIEdEQgorKyAgICAgICAgICAgICAg ICBzaG91bGQgdHJ5IGFueSBvdGhlciByZWdpc3RlcmVkIGhhbmRsZXJzLgorKworKyAgICAgICAg IiIiCisrICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCJNaXNzaW5nT2JqZmlsZUhh bmRsZXIuX19jYWxsX18oKSIpCisrCisrCisrZGVmIHJlZ2lzdGVyX2hhbmRsZXIobG9jdXMsIGhh bmRsZXIsIHJlcGxhY2U9RmFsc2UpOgorKyAgICAiIiJTZWUgZ2RiLm1pc3NpbmdfZmlsZXMucmVn aXN0ZXJfaGFuZGxlci4iIiIKKysgICAgZ2RiLm1pc3NpbmdfZmlsZXMucmVnaXN0ZXJfaGFuZGxl cigib2JqZmlsZSIsIGxvY3VzLCBoYW5kbGVyLCByZXBsYWNlKQorZGlmZiAtLWdpdCBhL2dkYi9w eXRob24vcHktcHJvZ3NwYWNlLmMgYi9nZGIvcHl0aG9uL3B5LXByb2dzcGFjZS5jCistLS0gYS9n ZGIvcHl0aG9uL3B5LXByb2dzcGFjZS5jCisrKysgYi9nZGIvcHl0aG9uL3B5LXByb2dzcGFjZS5j CitAQCAtNTUsOCArNTUsOCBAQCBzdHJ1Y3QgcHNwYWNlX29iamVjdAorICAgLyogVGhlIGRlYnVn IG1ldGhvZCBsaXN0LiAgKi8KKyAgIFB5T2JqZWN0ICp4bWV0aG9kczsKKyAKKy0gIC8qIFRoZSBt aXNzaW5nIGRlYnVnIGhhbmRsZXIgbGlzdC4gICovCistICBQeU9iamVjdCAqbWlzc2luZ19kZWJ1 Z19oYW5kbGVyczsKKysgIC8qIFRoZSBtaXNzaW5nIGZpbGUgaGFuZGxlciBsaXN0LiAgKi8KKysg IFB5T2JqZWN0ICptaXNzaW5nX2ZpbGVfaGFuZGxlcnM7CisgfTsKKyAKKyBleHRlcm4gUHlUeXBl T2JqZWN0IHBzcGFjZV9vYmplY3RfdHlwZQorQEAgLTE2Niw3ICsxNjYsNyBAQCBwc3B5X2RlYWxs b2MgKFB5T2JqZWN0ICpzZWxmKQorICAgUHlfWERFQ1JFRiAocHNfc2VsZi0+ZnJhbWVfdW53aW5k ZXJzKTsKKyAgIFB5X1hERUNSRUYgKHBzX3NlbGYtPnR5cGVfcHJpbnRlcnMpOworICAgUHlfWERF Q1JFRiAocHNfc2VsZi0+eG1ldGhvZHMpOworLSAgUHlfWERFQ1JFRiAocHNfc2VsZi0+bWlzc2lu Z19kZWJ1Z19oYW5kbGVycyk7CisrICBQeV9YREVDUkVGIChwc19zZWxmLT5taXNzaW5nX2ZpbGVf aGFuZGxlcnMpOworICAgUHlfVFlQRSAoc2VsZiktPnRwX2ZyZWUgKHNlbGYpOworIH0KKyAKK0BA IC0yMDIsOCArMjAyLDggQEAgcHNweV9pbml0aWFsaXplIChwc3BhY2Vfb2JqZWN0ICpzZWxmKQor ICAgaWYgKHNlbGYtPnhtZXRob2RzID09IE5VTEwpCisgICAgIHJldHVybiAwOworIAorLSAgc2Vs Zi0+bWlzc2luZ19kZWJ1Z19oYW5kbGVycyA9IFB5TGlzdF9OZXcgKDApOworLSAgaWYgKHNlbGYt Pm1pc3NpbmdfZGVidWdfaGFuZGxlcnMgPT0gbnVsbHB0cikKKysgIHNlbGYtPm1pc3NpbmdfZmls ZV9oYW5kbGVycyA9IFB5TGlzdF9OZXcgKDApOworKyAgaWYgKHNlbGYtPm1pc3NpbmdfZmlsZV9o YW5kbGVycyA9PSBudWxscHRyKQorICAgICByZXR1cm4gMDsKKyAKKyAgIHJldHVybiAxOworQEAg LTM0OSwxOCArMzQ5LDE4IEBAIHBzcHlfZ2V0X3htZXRob2RzIChQeU9iamVjdCAqbywgdm9pZCAq aWdub3JlKQorIC8qIFJldHVybiB0aGUgbGlzdCBvZiBtaXNzaW5nIGRlYnVnIGhhbmRsZXJzIGZv ciB0aGlzIHByb2dyYW0gc3BhY2UuICAqLworIAorIHN0YXRpYyBQeU9iamVjdCAqCistcHNweV9n ZXRfbWlzc2luZ19kZWJ1Z19oYW5kbGVycyAoUHlPYmplY3QgKm8sIHZvaWQgKmlnbm9yZSkKKytw c3B5X2dldF9taXNzaW5nX2ZpbGVfaGFuZGxlcnMgKFB5T2JqZWN0ICpvLCB2b2lkICppZ25vcmUp CisgeworICAgcHNwYWNlX29iamVjdCAqc2VsZiA9IChwc3BhY2Vfb2JqZWN0ICopIG87CisgCist ICBQeV9JTkNSRUYgKHNlbGYtPm1pc3NpbmdfZGVidWdfaGFuZGxlcnMpOworLSAgcmV0dXJuIHNl bGYtPm1pc3NpbmdfZGVidWdfaGFuZGxlcnM7CisrICBQeV9JTkNSRUYgKHNlbGYtPm1pc3Npbmdf ZmlsZV9oYW5kbGVycyk7CisrICByZXR1cm4gc2VsZi0+bWlzc2luZ19maWxlX2hhbmRsZXJzOwor IH0KKyAKKyAvKiBTZXQgdGhpcyBwcm9ncmFtIHNwYWNlJ3MgbGlzdCBvZiBtaXNzaW5nIGRlYnVn IGhhbmRsZXJzIHRvIEhBTkRMRVJTLiAgKi8KKyAKKyBzdGF0aWMgaW50CistcHNweV9zZXRfbWlz c2luZ19kZWJ1Z19oYW5kbGVycyAoUHlPYmplY3QgKm8sIFB5T2JqZWN0ICpoYW5kbGVycywKKytw c3B5X3NldF9taXNzaW5nX2ZpbGVfaGFuZGxlcnMgKFB5T2JqZWN0ICpvLCBQeU9iamVjdCAqaGFu ZGxlcnMsCisgCQkJCSB2b2lkICppZ25vcmUpCisgeworICAgcHNwYWNlX29iamVjdCAqc2VsZiA9 IChwc3BhY2Vfb2JqZWN0ICopIG87CitAQCAtMzgwLDkgKzM4MCw5IEBAIHBzcHlfc2V0X21pc3Np bmdfZGVidWdfaGFuZGxlcnMgKFB5T2JqZWN0ICpvLCBQeU9iamVjdCAqaGFuZGxlcnMsCisgICAg IH0KKyAKKyAgIC8qIFRha2UgY2FyZSBpbiBjYXNlIHRoZSBMSFMgYW5kIFJIUyBhcmUgcmVsYXRl ZCBzb21laG93LiAgKi8KKy0gIGdkYnB5X3JlZjw+IHRtcCAoc2VsZi0+bWlzc2luZ19kZWJ1Z19o YW5kbGVycyk7CisrICBnZGJweV9yZWY8PiB0bXAgKHNlbGYtPm1pc3NpbmdfZmlsZV9oYW5kbGVy cyk7CisgICBQeV9JTkNSRUYgKGhhbmRsZXJzKTsKKy0gIHNlbGYtPm1pc3NpbmdfZGVidWdfaGFu ZGxlcnMgPSBoYW5kbGVyczsKKysgIHNlbGYtPm1pc3NpbmdfZmlsZV9oYW5kbGVycyA9IGhhbmRs ZXJzOworIAorICAgcmV0dXJuIDA7CisgfQorQEAgLTc3OSw4ICs3NzksOCBAQCBzdGF0aWMgZ2Ri X1B5R2V0U2V0RGVmIHBzcGFjZV9nZXRzZXRbXSA9CisgICAgICJUeXBlIHByaW50ZXJzLiIsIE5V TEwgfSwKKyAgIHsgInhtZXRob2RzIiwgcHNweV9nZXRfeG1ldGhvZHMsIE5VTEwsCisgICAgICJE ZWJ1ZyBtZXRob2RzLiIsIE5VTEwgfSwKKy0gIHsgIm1pc3NpbmdfZGVidWdfaGFuZGxlcnMiLCBw c3B5X2dldF9taXNzaW5nX2RlYnVnX2hhbmRsZXJzLAorLSAgICBwc3B5X3NldF9taXNzaW5nX2Rl YnVnX2hhbmRsZXJzLCAiTWlzc2luZyBkZWJ1ZyBoYW5kbGVycy4iLCBOVUxMIH0sCisrICB7ICJt aXNzaW5nX2ZpbGVfaGFuZGxlcnMiLCBwc3B5X2dldF9taXNzaW5nX2ZpbGVfaGFuZGxlcnMsCisr ICAgIHBzcHlfc2V0X21pc3NpbmdfZmlsZV9oYW5kbGVycywgIk1pc3NpbmcgZmlsZSBoYW5kbGVy cy4iLCBOVUxMIH0sCisgICB7IE5VTEwgfQorIH07CisgCitkaWZmIC0tZ2l0IGEvZ2RiL3B5dGhv bi9weXRob24uYyBiL2dkYi9weXRob24vcHl0aG9uLmMKKy0tLSBhL2dkYi9weXRob24vcHl0aG9u LmMKKysrKyBiL2dkYi9weXRob24vcHl0aG9uLmMKK0BAIC0zNSw2ICszNSw3IEBACisgI2luY2x1 ZGUgImxvY2F0aW9uLmgiCisgI2luY2x1ZGUgInJ1bi1vbi1tYWluLXRocmVhZC5oIgorICNpbmNs dWRlICJvYnNlcnZhYmxlLmgiCisrI2luY2x1ZGUgImJ1aWxkLWlkLmgiCisgCisgI2lmIEdEQl9T RUxGX1RFU1QKKyAjaW5jbHVkZSAiZ2Ric3VwcG9ydC9zZWxmdGVzdC5oIgorQEAgLTEyOCw4ICsx MjksMTEgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8c3RkOjpzdHJpbmc+IGdkYnB5X2NvbG9yaXpl CisgICAoY29uc3Qgc3RkOjpzdHJpbmcgJmZpbGVuYW1lLCBjb25zdCBzdGQ6OnN0cmluZyAmY29u dGVudHMpOworIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPHN0ZDo6c3RyaW5nPiBnZGJweV9jb2xvcml6 ZV9kaXNhc20KKyAoY29uc3Qgc3RkOjpzdHJpbmcgJmNvbnRlbnQsIGdkYmFyY2ggKmdkYmFyY2gp OworLXN0YXRpYyBleHRfbGFuZ19taXNzaW5nX2RlYnVnaW5mb19yZXN1bHQgZ2RicHlfaGFuZGxl X21pc3NpbmdfZGVidWdpbmZvCisrc3RhdGljIGV4dF9sYW5nX21pc3NpbmdfZmlsZV9yZXN1bHQg Z2RicHlfaGFuZGxlX21pc3NpbmdfZGVidWdpbmZvCisgICAoY29uc3Qgc3RydWN0IGV4dGVuc2lv bl9sYW5ndWFnZV9kZWZuICpleHRsYW5nLCBzdHJ1Y3Qgb2JqZmlsZSAqb2JqZmlsZSk7Cisrc3Rh dGljIGV4dF9sYW5nX21pc3NpbmdfZmlsZV9yZXN1bHQgZ2RicHlfZmluZF9vYmpmaWxlX2Zyb21f YnVpbGRpZAorKyAgKGNvbnN0IHN0cnVjdCBleHRlbnNpb25fbGFuZ3VhZ2VfZGVmbiAqZXh0bGFu ZywgcHJvZ3JhbV9zcGFjZSAqcHNwYWNlLAorKyAgIGNvbnN0IHN0cnVjdCBiZmRfYnVpbGRfaWQg KmJ1aWxkX2lkLCBjb25zdCBjaGFyICptaXNzaW5nX2ZpbGVuYW1lKTsKKyAKKyAvKiBUaGUgaW50 ZXJmYWNlIGJldHdlZW4gZ2RiIHByb3BlciBhbmQgbG9hZGluZyBvZiBweXRob24gc2NyaXB0cy4g ICovCisgCitAQCAtMTc3LDcgKzE4MSw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXh0ZW5zaW9u X2xhbmd1YWdlX29wcyBweXRob25fZXh0ZW5zaW9uX29wcyA9CisgCisgICBnZGJweV9wcmludF9p bnNuLAorIAorLSAgZ2RicHlfaGFuZGxlX21pc3NpbmdfZGVidWdpbmZvCisrICBnZGJweV9oYW5k bGVfbWlzc2luZ19kZWJ1Z2luZm8sCisrICBnZGJweV9maW5kX29iamZpbGVfZnJvbV9idWlsZGlk CisgfTsKKyAKKyAjZW5kaWYgLyogSEFWRV9QWVRIT04gKi8KK0BAIC0xNzYxLDEwICsxNzY2LDEw IEBAIGdkYnB5X2dldF9jdXJyZW50X29iamZpbGUgKFB5T2JqZWN0ICp1bnVzZWQxLCBQeU9iamVj dCAqdW51c2VkMikKKyAvKiBJbXBsZW1lbnQgdGhlICdoYW5kbGVfbWlzc2luZ19kZWJ1Z2luZm8n IGhvb2sgZm9yIFB5dGhvbi4gIEdEQiBoYXMKKyAgICBmYWlsZWQgdG8gZmluZCBhbnkgZGVidWcg aW5mb3JtYXRpb24gZm9yIE9CSkZJTEUuICBUaGUgZXh0ZW5zaW9uIGhhcyBhCisgICAgY2hhbmNl IHRvIHJlY29yZCB0aGlzLCBvciBldmVuIGluc3RhbGwgdGhlIHJlcXVpcmVkIGRlYnVnIGluZm9y bWF0aW9uLgorLSAgIFNlZSB0aGUgZGVzY3JpcHRpb24gb2YgZXh0X2xhbmdfbWlzc2luZ19kZWJ1 Z2luZm9fcmVzdWx0IGluCistICAgZXh0ZW5zaW9uLXByaXYuaCBmb3IgZGV0YWlscyBvZiB0aGUg cmV0dXJuIHZhbHVlLiAgKi8KKysgICBTZWUgdGhlIGRlc2NyaXB0aW9uIG9mIGV4dF9sYW5nX21p c3NpbmdfZmlsZV9yZXN1bHQgaW4gZXh0ZW5zaW9uLXByaXYuaAorKyAgIGZvciBkZXRhaWxzIG9m IHRoZSByZXR1cm4gdmFsdWUuICAqLworIAorLXN0YXRpYyBleHRfbGFuZ19taXNzaW5nX2RlYnVn aW5mb19yZXN1bHQKKytzdGF0aWMgZXh0X2xhbmdfbWlzc2luZ19maWxlX3Jlc3VsdAorIGdkYnB5 X2hhbmRsZV9taXNzaW5nX2RlYnVnaW5mbyAoY29uc3Qgc3RydWN0IGV4dGVuc2lvbl9sYW5ndWFn ZV9kZWZuICpleHRsYW5nLAorIAkJCQlzdHJ1Y3Qgb2JqZmlsZSAqb2JqZmlsZSkKKyB7CitAQCAt MTgxMiw3ICsxODE3LDcgQEAgZ2RicHlfaGFuZGxlX21pc3NpbmdfZGVidWdpbmZvIChjb25zdCBz dHJ1Y3QgZXh0ZW5zaW9uX2xhbmd1YWdlX2RlZm4gKmV4dGxhbmcsCisgICBpZiAoUHlCb29sX0No ZWNrIChweW9fZXhlY3V0ZV9yZXQuZ2V0ICgpKSkKKyAgICAgeworICAgICAgIGJvb2wgdHJ5X2Fn YWluID0gUHlPYmplY3RfSXNUcnVlIChweW9fZXhlY3V0ZV9yZXQuZ2V0ICgpKTsKKy0gICAgICBy ZXR1cm4gZXh0X2xhbmdfbWlzc2luZ19kZWJ1Z2luZm9fcmVzdWx0ICh0cnlfYWdhaW4pOworKyAg ICAgIHJldHVybiBleHRfbGFuZ19taXNzaW5nX2ZpbGVfcmVzdWx0ICh0cnlfYWdhaW4pOworICAg ICB9CisgCisgICBpZiAoIWdkYnB5X2lzX3N0cmluZyAocHlvX2V4ZWN1dGVfcmV0LmdldCAoKSkp CitAQCAtMTgzMiw3ICsxODM3LDEwOCBAQCBnZGJweV9oYW5kbGVfbWlzc2luZ19kZWJ1Z2luZm8g KGNvbnN0IHN0cnVjdCBleHRlbnNpb25fbGFuZ3VhZ2VfZGVmbiAqZXh0bGFuZywKKyAgICAgICBy ZXR1cm4ge307CisgICAgIH0KKyAKKy0gIHJldHVybiBleHRfbGFuZ19taXNzaW5nX2RlYnVnaW5m b19yZXN1bHQgKHN0ZDo6c3RyaW5nIChmaWxlbmFtZS5nZXQgKCkpKTsKKysgIHJldHVybiBleHRf bGFuZ19taXNzaW5nX2ZpbGVfcmVzdWx0IChzdGQ6OnN0cmluZyAoZmlsZW5hbWUuZ2V0ICgpKSk7 CisrfQorKworKy8qIEltcGxlbWVudCB0aGUgZmluZF9vYmpmaWxlX2Zyb21fYnVpbGRpZCBob29r IGZvciBQeXRob24uICBQU1BBQ0UgaXMgdGhlCisrICAgcHJvZ3JhbSBzcGFjZSBpbiB3aGljaCBH REIgaXMgdHJ5aW5nIHRvIGZpbmQgYW4gb2JqZmlsZSwgQlVJTERfSUQgaXMgdGhlCisrICAgYnVp bGQtaWQgZm9yIHRoZSBtaXNzaW5nIG9iamZpbGUsIGFuZCBFWFBFQ1RFRF9GSUxFTkFNRSBpcyBh IG5vbi1OVUxMCisrICAgc3RyaW5nIHdoaWNoIGNhbiBiZSB1c2VkIChpZiBuZWVkZWQpIGluIG1l c3NhZ2VzIHRvIHRoZSB1c2VyLCBhbmQKKysgICByZXByZXNlbnRzIHRoZSBmaWxlIEdEQiBpcyBs b29raW5nIGZvci4gICovCisrCisrc3RhdGljIGV4dF9sYW5nX21pc3NpbmdfZmlsZV9yZXN1bHQK KytnZGJweV9maW5kX29iamZpbGVfZnJvbV9idWlsZGlkIChjb25zdCBzdHJ1Y3QgZXh0ZW5zaW9u X2xhbmd1YWdlX2RlZm4gKmV4dGxhbmcsCisrCQkJCSBwcm9ncmFtX3NwYWNlICpwc3BhY2UsCisr CQkJCSBjb25zdCBzdHJ1Y3QgYmZkX2J1aWxkX2lkICpidWlsZF9pZCwKKysJCQkJIGNvbnN0IGNo YXIgKm1pc3NpbmdfZmlsZW5hbWUpCisreworKyAgZ2RiX2Fzc2VydCAocHNwYWNlICE9IG51bGxw dHIpOworKyAgZ2RiX2Fzc2VydCAoYnVpbGRfaWQgIT0gbnVsbHB0cik7CisrICBnZGJfYXNzZXJ0 IChtaXNzaW5nX2ZpbGVuYW1lICE9IG51bGxwdHIpOworKworKyAgLyogRWFybHkgZXhpdCBpZiBQ eXRob24gaXMgbm90IGluaXRpYWxpc2VkLiAgKi8KKysgIGlmICghZ2RiX3B5dGhvbl9pbml0aWFs aXplZCB8fCBnZGJfcHl0aG9uX21vZHVsZSA9PSBudWxscHRyKQorKyAgICByZXR1cm4ge307Cisr CisrICBnZGJweV9lbnRlciBlbnRlcl9weTsKKysKKysgIC8qIENvbnZlcnQgQlVJTERfSUQgaW50 byBhIFB5dGhvbiBvYmplY3QuICAqLworKyAgc3RkOjpzdHJpbmcgaGV4X2Zvcm0gPSBiaW4yaGV4 IChidWlsZF9pZC0+ZGF0YSwgYnVpbGRfaWQtPnNpemUpOworKyAgZ2RicHlfcmVmPD4gcHlvX2J1 aWxkaWQgPSBob3N0X3N0cmluZ190b19weXRob25fc3RyaW5nIChoZXhfZm9ybS5jX3N0ciAoKSk7 CisrICBpZiAocHlvX2J1aWxkaWQgPT0gbnVsbHB0cikKKysgICAgeworKyAgICAgIGdkYnB5X3By aW50X3N0YWNrICgpOworKyAgICAgIHJldHVybiB7fTsKKysgICAgfQorKworKyAgLyogQ29udmVy dCBNSVNTSU5HX0ZJTEVOQU1FIHRvIGEgUHl0aG9uIG9iamVjdC4gICovCisrICBnZGJweV9yZWY8 PiBweW9fZmlsZW5hbWUgPSBob3N0X3N0cmluZ190b19weXRob25fc3RyaW5nIChtaXNzaW5nX2Zp bGVuYW1lKTsKKysgIGlmIChweW9fZmlsZW5hbWUgPT0gbnVsbHB0cikKKysgICAgeworKyAgICAg IGdkYnB5X3ByaW50X3N0YWNrICgpOworKyAgICAgIHJldHVybiB7fTsKKysgICAgfQorKworKyAg LyogQ29udmVydCBQU1BBQ0UgdG8gYSBQeXRob24gb2JqZWN0LiAgKi8KKysgIGdkYnB5X3JlZjw+ IHB5b19wc3BhY2UgPSBwc3BhY2VfdG9fcHNwYWNlX29iamVjdCAocHNwYWNlKTsKKysgIGlmIChw eW9fcHNwYWNlID09IG51bGxwdHIpCisrICAgIHsKKysgICAgICBnZGJweV9wcmludF9zdGFjayAo KTsKKysgICAgICByZXR1cm4ge307CisrICAgIH0KKysKKysgIC8qIExvb2t1cCB0aGUgaGVscGVy IGZ1bmN0aW9uIHdpdGhpbiB0aGUgR0RCIG1vZHVsZS4gICovCisrICBnZGJweV9yZWY8PiBweW9f aGFuZGxlcgorKyAgICAoUHlPYmplY3RfR2V0QXR0clN0cmluZyAoZ2RiX3B5dGhvbl9tb2R1bGUs ICJfaGFuZGxlX21pc3Npbmdfb2JqZmlsZSIpKTsKKysgIGlmIChweW9faGFuZGxlciA9PSBudWxs cHRyKQorKyAgICB7CisrICAgICAgZ2RicHlfcHJpbnRfc3RhY2sgKCk7CisrICAgICAgcmV0dXJu IHt9OworKyAgICB9CisrCisrICAvKiBDYWxsIHRoZSBmdW5jdGlvbiwgcGFzc2luZyBpbiB0aGUg UHl0aG9uIG9iamZpbGUgb2JqZWN0LiAgKi8KKysgIGdkYnB5X3JlZjw+IHB5b19leGVjdXRlX3Jl dAorKyAgICAoUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyAocHlvX2hhbmRsZXIuZ2V0ICgp LCBweW9fcHNwYWNlLmdldCAoKSwKKysJCQkJICAgcHlvX2J1aWxkaWQuZ2V0ICgpLCBweW9fZmls ZW5hbWUuZ2V0ICgpLAorKwkJCQkgICBudWxscHRyKSk7CisrICBpZiAocHlvX2V4ZWN1dGVfcmV0 ID09IG51bGxwdHIpCisrICAgIHsKKysgICAgICAvKiBJZiB0aGUgaGFuZGxlciBpcyBjYW5jZWxs ZWQgZHVlIHRvIGEgQ3RybC1DLCB0aGVuIHByb3BhZ2F0ZQorKwkgdGhlIEN0cmwtQyBhcyBhIEdE QiBleGNlcHRpb24gaW5zdGVhZCBvZiBzd2FsbG93aW5nIGl0LiAgKi8KKysgICAgICBnZGJweV9w cmludF9zdGFja19vcl9xdWl0ICgpOworKyAgICAgIHJldHVybiB7fTsKKysgICAgfQorKworKyAg LyogUGFyc2UgdGhlIHJlc3VsdCwgYW5kIGNvbnZlcnQgaXQgYmFjayB0byB0aGUgQysrIG9iamVj dC4gICovCisrICBpZiAocHlvX2V4ZWN1dGVfcmV0ID09IFB5X05vbmUpCisrICAgIHJldHVybiB7 fTsKKysKKysgIGlmIChQeUJvb2xfQ2hlY2sgKHB5b19leGVjdXRlX3JldC5nZXQgKCkpKQorKyAg ICB7CisrICAgICAgLyogV2Uga25vdyB0aGUgdmFsdWUgaXMgYSBib29sLCBzbyBpdCBtdXN0IGJl IGVpdGhlciBQeV9UcnVlIG9yCisrCSBQeV9GYWxzZS4gIEFueXRoaW5nIGVsc2Ugd291bGQgbm90 IGdldCBwYXN0IHRoZSBhYm92ZSBjaGVjay4gICovCisrICAgICAgYm9vbCB0cnlfYWdhaW4gPSBw eW9fZXhlY3V0ZV9yZXQuZ2V0ICgpID09IFB5X1RydWU7CisrICAgICAgcmV0dXJuIGV4dF9sYW5n X21pc3NpbmdfZmlsZV9yZXN1bHQgKHRyeV9hZ2Fpbik7CisrICAgIH0KKysKKysgIGlmICghZ2Ri cHlfaXNfc3RyaW5nIChweW9fZXhlY3V0ZV9yZXQuZ2V0ICgpKSkKKysgICAgeworKyAgICAgIFB5 RXJyX1NldFN0cmluZyAoUHlFeGNfVmFsdWVFcnJvciwKKysJCSAgICAgICAicmV0dXJuIHZhbHVl IGZyb20gX2ZpbmRfb2JqZmlsZV9ieV9idWlsZGlkIHNob3VsZCAiCisrCQkgICAgICAgImJlIE5v bmUsIGEgYm9vbCwgb3IgYSBzdHIiKTsKKysgICAgICBnZGJweV9wcmludF9zdGFjayAoKTsKKysg ICAgICByZXR1cm4ge307CisrICAgIH0KKysKKysgIGdkYjo6dW5pcXVlX3htYWxsb2NfcHRyPGNo YXI+IGZpbGVuYW1lCisrICAgID0gcHl0aG9uX3N0cmluZ190b19ob3N0X3N0cmluZyAocHlvX2V4 ZWN1dGVfcmV0LmdldCAoKSk7CisrICBpZiAoZmlsZW5hbWUgPT0gbnVsbHB0cikKKysgICAgewor KyAgICAgIGdkYnB5X3ByaW50X3N0YWNrICgpOworKyAgICAgIHJldHVybiB7fTsKKysgICAgfQor KworKyAgcmV0dXJuIGV4dF9sYW5nX21pc3NpbmdfZmlsZV9yZXN1bHQgKHN0ZDo6c3RyaW5nIChm aWxlbmFtZS5nZXQgKCkpKTsKKyB9CisgCisgLyogQ29tcHV0ZSB0aGUgbGlzdCBvZiBhY3RpdmUg cHl0aG9uIHR5cGUgcHJpbnRlcnMgYW5kIHN0b3JlIHRoZW0gaW4KK2RpZmYgLS1naXQgYS9nZGIv cmVtb3RlLmMgYi9nZGIvcmVtb3RlLmMKKy0tLSBhL2dkYi9yZW1vdGUuYworKysrIGIvZ2RiL3Jl bW90ZS5jCitAQCAtMjQ2LDYgKzI0Niw3IEBAIGVudW0geworICAgUEFDS0VUX3ZGaWxlX3VubGlu aywKKyAgIFBBQ0tFVF92RmlsZV9yZWFkbGluaywKKyAgIFBBQ0tFVF92RmlsZV9mc3RhdCwKKysg IFBBQ0tFVF92RmlsZV9zdGF0LAorICAgUEFDS0VUX3FYZmVyX2F1eHYsCisgICBQQUNLRVRfcVhm ZXJfZmVhdHVyZXMsCisgICBQQUNLRVRfcVhmZXJfZXhlY19maWxlLAorQEAgLTk5Niw2ICs5OTcs OSBAQCBjbGFzcyByZW1vdGVfdGFyZ2V0IDogcHVibGljIHByb2Nlc3Nfc3RyYXR1bV90YXJnZXQK KyAKKyAgIGludCBmaWxlaW9fZnN0YXQgKGludCBmZCwgc3RydWN0IHN0YXQgKnNiLCBmaWxlaW9f ZXJyb3IgKnRhcmdldF9lcnJubykgb3ZlcnJpZGU7CisgCisrICBpbnQgZmlsZWlvX3N0YXQgKHN0 cnVjdCBpbmZlcmlvciAqaW5mLCBjb25zdCBjaGFyICpmaWxlbmFtZSwKKysJCSAgIHN0cnVjdCBz dGF0ICpzYiwgZmlsZWlvX2Vycm9yICp0YXJnZXRfZXJybm8pIG92ZXJyaWRlOworKworICAgaW50 IGZpbGVpb19jbG9zZSAoaW50IGZkLCBmaWxlaW9fZXJyb3IgKnRhcmdldF9lcnJubykgb3ZlcnJp ZGU7CisgCisgICBpbnQgZmlsZWlvX3VubGluayAoc3RydWN0IGluZmVyaW9yICppbmYsCitAQCAt MTI2NjEsNiArMTI2NjUsOSBAQCByZW1vdGVfdGFyZ2V0OjpyZW1vdGVfaG9zdGlvX3NlbmRfY29t bWFuZCAoaW50IGNvbW1hbmRfYnl0ZXMsIGludCB3aGljaF9wYWNrZXQsCisgICAgICAgcmV0dXJu IC0xOworICAgICB9CisgCisrICBpZiAoKnJlbW90ZV9lcnJubyAhPSBGSUxFSU9fU1VDQ0VTUykK KysgICAgcmV0dXJuIC0xOworKworICAgLyogTWFrZSBzdXJlIHdlIHNhdyBhbiBhdHRhY2htZW50 IGlmIGFuZCBvbmx5IGlmIHdlIGV4cGVjdGVkIG9uZS4gICovCisgICBpZiAoKGF0dGFjaG1lbnRf dG1wID09IE5VTEwgJiYgYXR0YWNobWVudCAhPSBOVUxMKQorICAgICAgIHx8IChhdHRhY2htZW50 X3RtcCAhPSBOVUxMICYmIGF0dGFjaG1lbnQgPT0gTlVMTCkpCitAQCAtMTMwMjcsNiArMTMwMzQs NDEgQEAgcmVtb3RlX3RhcmdldDo6ZmlsZWlvX3JlYWRsaW5rIChzdHJ1Y3QgaW5mZXJpb3IgKmlu ZiwgY29uc3QgY2hhciAqZmlsZW5hbWUsCisgICByZXR1cm4gcmV0OworIH0KKyAKKysvKiBIZWxw ZXIgZnVuY3Rpb24gdG8gaGFuZGxlIDo6ZmlsZWlvX2ZzdGF0IGFuZCA6OmZpbGVpb19zdGF0IHJl c3VsdAorKyAgIHByb2Nlc3NpbmcuICBXaGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRoZSBy ZW1vdGUgc3lzY2FsbCBoYXMgYmVlbgorKyAgIHBlcmZvcm1lZCBhbmQgd2Uga25vdyB3ZSBkaWRu J3QgZ2V0IGFuIGVycm9yIGJhY2suCisrCisrICAgQVRUQUNITUVOVCBhbmQgQVRUQUNITUVOVF9M RU4gYXJlIHRoZSBhdHRhY2htZW50IGRhdGEgZXh0cmFjdGVkIGZyb20gdGhlCisrICAgcmVtb3Rl IHN5c2NhbGwgcmVwbHkuICBFWFBFQ1RFRF9MRU4gaXMgdGhlIGxlbmd0aCByZXR1cm5lZCBmcm9t IHRoZQorKyAgIGZzdGF0IG9yIHN0YXQgY2FsbCwgdGhpcyB0aGUgbGVuZ3RoIG9mIHRoZSByZXR1 cm5lZCBkYXRhIChpbiBBVFRBQ0hNRU5UKQorKyAgIG9uY2UgaXQgaGFzIGJlZW4gZGVjb2RlZC4g IFRoZSBmc3RhdC9zdGF0IHJlc3VsdCAoZnJvbSB0aGUgQVRUQUNITUVOVAorKyAgIGRhdGEpIGlz IHRvIGJlIHBsYWNlZCBpbiBTVC4gICovCisrCisrc3RhdGljIGludAorK2ZpbGVpb19wcm9jZXNz X2ZzdGF0X2FuZF9zdGF0X3JlcGx5IChjb25zdCBjaGFyICphdHRhY2htZW50LAorKwkJCQkgICAg IGludCBhdHRhY2htZW50X2xlbiwKKysJCQkJICAgICBpbnQgZXhwZWN0ZWRfbGVuLAorKwkJCQkg ICAgIHN0cnVjdCBzdGF0ICpzdCkKKyt7CisrICBzdHJ1Y3QgZmlvX3N0YXQgZnN0OworKworKyAg aW50IHJlYWRfbGVuCisrICAgID0gcmVtb3RlX3VuZXNjYXBlX2lucHV0ICgoZ2RiX2J5dGUgKikg YXR0YWNobWVudCwgYXR0YWNobWVudF9sZW4sCisrCQkJICAgICAoZ2RiX2J5dGUgKikgJmZzdCwg c2l6ZW9mIChmc3QpKTsKKysKKysgIGlmIChyZWFkX2xlbiAhPSBleHBlY3RlZF9sZW4pCisrICAg IGVycm9yIChfKCJ2RmlsZTpmc3RhdCByZXR1cm5lZCAlZCwgYnV0ICVkIGJ5dGVzLiIpLAorKwkg ICBleHBlY3RlZF9sZW4sIHJlYWRfbGVuKTsKKysKKysgIGlmIChyZWFkX2xlbiAhPSBzaXplb2Yg KGZzdCkpCisrICAgIGVycm9yIChfKCJ2RmlsZTpmc3RhdCByZXR1cm5lZCAlZCBieXRlcywgYnV0 IGV4cGVjdGluZyAlZC4iKSwKKysJICAgcmVhZF9sZW4sIChpbnQpIHNpemVvZiAoZnN0KSk7Cisr CisrICByZW1vdGVfZmlsZWlvX3RvX2hvc3Rfc3RhdCAoJmZzdCwgc3QpOworKworKyAgcmV0dXJu IDA7CisrfQorKworIC8qIEltcGxlbWVudGF0aW9uIG9mIHRvX2ZpbGVpb19mc3RhdC4gICovCisg CisgaW50CitAQCAtMTMwMzcsOCArMTMwNzksNiBAQCByZW1vdGVfdGFyZ2V0OjpmaWxlaW9fZnN0 YXQgKGludCBmZCwgc3RydWN0IHN0YXQgKnN0LCBmaWxlaW9fZXJyb3IgKnJlbW90ZV9lcnJubwor ICAgaW50IGxlZnQgPSBnZXRfcmVtb3RlX3BhY2tldF9zaXplICgpOworICAgaW50IGF0dGFjaG1l bnRfbGVuLCByZXQ7CisgICBjb25zdCBjaGFyICphdHRhY2htZW50OworLSAgc3RydWN0IGZpb19z dGF0IGZzdDsKKy0gIGludCByZWFkX2xlbjsKKyAKKyAgIHJlbW90ZV9idWZmZXJfYWRkX3N0cmlu ZyAoJnAsICZsZWZ0LCAidkZpbGU6ZnN0YXQ6Iik7CisgCitAQCAtMTMwNzAsMTkgKzEzMTEwLDQx IEBAIHJlbW90ZV90YXJnZXQ6OmZpbGVpb19mc3RhdCAoaW50IGZkLCBzdHJ1Y3Qgc3RhdCAqc3Qs IGZpbGVpb19lcnJvciAqcmVtb3RlX2Vycm5vCisgICAgICAgcmV0dXJuIDA7CisgICAgIH0KKyAK Ky0gIHJlYWRfbGVuID0gcmVtb3RlX3VuZXNjYXBlX2lucHV0ICgoZ2RiX2J5dGUgKikgYXR0YWNo bWVudCwgYXR0YWNobWVudF9sZW4sCistCQkJCSAgICAoZ2RiX2J5dGUgKikgJmZzdCwgc2l6ZW9m IChmc3QpKTsKKysgIHJldHVybiBmaWxlaW9fcHJvY2Vzc19mc3RhdF9hbmRfc3RhdF9yZXBseSAo YXR0YWNobWVudCwgYXR0YWNobWVudF9sZW4sCisrCQkJCQkgICAgICByZXQsIHN0KTsKKyt9Cisg CistICBpZiAocmVhZF9sZW4gIT0gcmV0KQorLSAgICBlcnJvciAoXygidkZpbGU6ZnN0YXQgcmV0 dXJuZWQgJWQsIGJ1dCAlZCBieXRlcy4iKSwgcmV0LCByZWFkX2xlbik7CisrLyogSW1wbGVtZW50 YXRpb24gb2YgdG9fZmlsZWlvX3N0YXQuICAqLworIAorLSAgaWYgKHJlYWRfbGVuICE9IHNpemVv ZiAoZnN0KSkKKy0gICAgZXJyb3IgKF8oInZGaWxlOmZzdGF0IHJldHVybmVkICVkIGJ5dGVzLCBi dXQgZXhwZWN0aW5nICVkLiIpLAorLQkgICByZWFkX2xlbiwgKGludCkgc2l6ZW9mIChmc3QpKTsK KytpbnQKKytyZW1vdGVfdGFyZ2V0OjpmaWxlaW9fc3RhdCAoc3RydWN0IGluZmVyaW9yICppbmYs IGNvbnN0IGNoYXIgKmZpbGVuYW1lLAorKwkJCSAgICBzdHJ1Y3Qgc3RhdCAqc3QsIGZpbGVpb19l cnJvciAqcmVtb3RlX2Vycm5vKQorK3sKKysgIHN0cnVjdCByZW1vdGVfc3RhdGUgKnJzID0gZ2V0 X3JlbW90ZV9zdGF0ZSAoKTsKKysgIGNoYXIgKnAgPSBycy0+YnVmLmRhdGEgKCk7CisrICBpbnQg bGVmdCA9IGdldF9yZW1vdGVfcGFja2V0X3NpemUgKCkgLSAxOworIAorLSAgcmVtb3RlX2ZpbGVp b190b19ob3N0X3N0YXQgKCZmc3QsIHN0KTsKKysgIGlmIChyZW1vdGVfaG9zdGlvX3NldF9maWxl c3lzdGVtIChpbmYsIHJlbW90ZV9lcnJubykgIT0gMCkKKysgICAgcmV0dXJuIHt9OworIAorLSAg cmV0dXJuIDA7CisrICByZW1vdGVfYnVmZmVyX2FkZF9zdHJpbmcgKCZwLCAmbGVmdCwgInZGaWxl OnN0YXQ6Iik7CisrCisrICByZW1vdGVfYnVmZmVyX2FkZF9ieXRlcyAoJnAsICZsZWZ0LCAoY29u c3QgZ2RiX2J5dGUgKikgZmlsZW5hbWUsCisrCQkJICAgc3RybGVuIChmaWxlbmFtZSkpOworKwor KyAgaW50IGF0dGFjaG1lbnRfbGVuOworKyAgY29uc3QgY2hhciAqYXR0YWNobWVudDsKKysgIGlu dCByZXQgPSByZW1vdGVfaG9zdGlvX3NlbmRfY29tbWFuZCAocCAtIHJzLT5idWYuZGF0YSAoKSwg UEFDS0VUX3ZGaWxlX3N0YXQsCisrCQkJCQlyZW1vdGVfZXJybm8sICZhdHRhY2htZW50LAorKwkJ CQkJJmF0dGFjaG1lbnRfbGVuKTsKKysKKysgIC8qIFVubGlrZSA6OmZpbGVpb19mc3RhdCwgdGhl IHN0YXQgZmlsZWlvIGNhbGwgd2FzIGFkZGVkIGxhdGVyIG9uLCBhbmQKKysgICAgIGhhcyBub25l IG9mIHRoZSBsZWdhY3kgYmZkIGlzc3Vlcywgc28gd2UgY2FuIGp1c3QgcmV0dXJuIHRoZSBlcnJv ci4gICovCisrICBpZiAocmV0IDwgMCkKKysgICAgcmV0dXJuIHJldDsKKysKKysgIHJldHVybiBm aWxlaW9fcHJvY2Vzc19mc3RhdF9hbmRfc3RhdF9yZXBseSAoYXR0YWNobWVudCwgYXR0YWNobWVu dF9sZW4sCisrCQkJCQkgICAgICByZXQsIHN0KTsKKyB9CisgCisgLyogSW1wbGVtZW50YXRpb24g b2YgdG9fZmlsZXN5c3RlbV9pc19sb2NhbC4gICovCitAQCAtMTYxNTcsNiArMTYyMTksOCBAQCBT aG93IHRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIGFkZHJlc3MgKGluIGJpdHMpIGluIGEgbWVtb3J5 IHBhY2tldC4iKSwgTlVMTCwKKyAKKyAgIGFkZF9wYWNrZXRfY29uZmlnX2NtZCAoUEFDS0VUX3ZG aWxlX2ZzdGF0LCAidkZpbGU6ZnN0YXQiLCAiaG9zdGlvLWZzdGF0IiwgMCk7CisgCisrICBhZGRf cGFja2V0X2NvbmZpZ19jbWQgKFBBQ0tFVF92RmlsZV9zdGF0LCAidkZpbGU6c3RhdCIsICJob3N0 aW8tc3RhdCIsIDApOworKworICAgYWRkX3BhY2tldF9jb25maWdfY21kIChQQUNLRVRfdkF0dGFj aCwgInZBdHRhY2giLCAiYXR0YWNoIiwgMCk7CisgCisgICBhZGRfcGFja2V0X2NvbmZpZ19jbWQg KFBBQ0tFVF92UnVuLCAidlJ1biIsICJydW4iLCAwKTsKK2RpZmYgLS1naXQgYS9nZGIvc29saWIt YWl4LmMgYi9nZGIvc29saWItYWl4LmMKKy0tLSBhL2dkYi9zb2xpYi1haXguYworKysrIGIvZ2Ri L3NvbGliLWFpeC5jCitAQCAtNjg5LDYgKzY4OSwxMSBAQCBjb25zdCBzb2xpYl9vcHMgc29saWJf YWl4X3NvX29wcyA9CisgICBzb2xpYl9haXhfb3Blbl9zeW1ib2xfZmlsZV9vYmplY3QsCisgICBz b2xpYl9haXhfaW5fZHluc3ltX3Jlc29sdmVfY29kZSwKKyAgIHNvbGliX2FpeF9iZmRfb3BlbiwK KysgIG51bGxwdHIsCisrICBudWxscHRyLAorKyAgbnVsbHB0ciwKKysgIG51bGxwdHIsCisrICBk ZWZhdWx0X2ZpbmRfc29saWJfYWRkciwKKyB9OworIAorIHZvaWQgX2luaXRpYWxpemVfc29saWJf YWl4ICgpOworZGlmZiAtLWdpdCBhL2dkYi9zb2xpYi1kYXJ3aW4uYyBiL2dkYi9zb2xpYi1kYXJ3 aW4uYworLS0tIGEvZ2RiL3NvbGliLWRhcndpbi5jCisrKysgYi9nZGIvc29saWItZGFyd2luLmMK K0BAIC02NjUsNCArNjY1LDkgQEAgY29uc3Qgc29saWJfb3BzIGRhcndpbl9zb19vcHMgPQorICAg b3Blbl9zeW1ib2xfZmlsZV9vYmplY3QsCisgICBkYXJ3aW5faW5fZHluc3ltX3Jlc29sdmVfY29k ZSwKKyAgIGRhcndpbl9iZmRfb3BlbiwKKysgIG51bGxwdHIsCisrICBudWxscHRyLAorKyAgbnVs bHB0ciwKKysgIG51bGxwdHIsCisrICBkZWZhdWx0X2ZpbmRfc29saWJfYWRkciwKKyB9OworZGlm ZiAtLWdpdCBhL2dkYi9zb2xpYi1kc2J0LmMgYi9nZGIvc29saWItZHNidC5jCistLS0gYS9nZGIv c29saWItZHNidC5jCisrKysgYi9nZGIvc29saWItZHNidC5jCitAQCAtOTE0LDYgKzkxNCwxMSBA QCBjb25zdCBzb2xpYl9vcHMgZHNidF9zb19vcHMgPQorICAgb3Blbl9zeW1ib2xfZmlsZV9vYmpl Y3QsCisgICBkc2J0X2luX2R5bnN5bV9yZXNvbHZlX2NvZGUsCisgICBzb2xpYl9iZmRfb3BlbiwK KysgIG51bGxwdHIsCisrICBudWxscHRyLAorKyAgbnVsbHB0ciwKKysgIG51bGxwdHIsCisrICBk ZWZhdWx0X2ZpbmRfc29saWJfYWRkciwKKyB9OworIAorIHZvaWQgX2luaXRpYWxpemVfZHNidF9z b2xpYiAoKTsKK2RpZmYgLS1naXQgYS9nZGIvc29saWItZnJ2LmMgYi9nZGIvc29saWItZnJ2LmMK Ky0tLSBhL2dkYi9zb2xpYi1mcnYuYworKysrIGIvZ2RiL3NvbGliLWZydi5jCitAQCAtMTA4Niw0 ICsxMDg2LDkgQEAgY29uc3Qgc29saWJfb3BzIGZydl9zb19vcHMgPQorICAgb3Blbl9zeW1ib2xf ZmlsZV9vYmplY3QsCisgICBmcnZfaW5fZHluc3ltX3Jlc29sdmVfY29kZSwKKyAgIHNvbGliX2Jm ZF9vcGVuLAorKyAgbnVsbHB0ciwKKysgIG51bGxwdHIsCisrICBudWxscHRyLAorKyAgbnVsbHB0 ciwKKysgIGRlZmF1bHRfZmluZF9zb2xpYl9hZGRyLAorIH07CitkaWZmIC0tZ2l0IGEvZ2RiL3Nv bGliLXN2cjQuYyBiL2dkYi9zb2xpYi1zdnI0LmMKKy0tLSBhL2dkYi9zb2xpYi1zdnI0LmMKKysr KyBiL2dkYi9zb2xpYi1zdnI0LmMKK0BAIC0zMzUzLDYgKzMzNTMsMTUgQEAgc3ZyNF9pdGVyYXRl X292ZXJfb2JqZmlsZXNfaW5fc2VhcmNoX29yZGVyCisgICAgIH0KKyB9CisgCisrLyogU2VlIHNv bGliX29wczo6ZmluZF9zb2xpYl9hZGRyIGluIHNvbGlzdC5oLiAgKi8KKysKKytzdGF0aWMgc3Rk OjpvcHRpb25hbDxDT1JFX0FERFI+Cisrc3ZyNF9maW5kX3NvbGliX2FkZHIgKHNvbGliICZzbykK Kyt7CisrICBhdXRvICpsaSA9IGdkYjo6Y2hlY2tlZF9zdGF0aWNfY2FzdDxsbV9pbmZvX3N2cjQg Kj4gKHNvLmxtX2luZm8uZ2V0ICgpKTsKKysgIHJldHVybiBsaS0+bF9hZGRyX2luZmVyaW9yOwor K30KKysKKyBjb25zdCBzdHJ1Y3Qgc29saWJfb3BzIHN2cjRfc29fb3BzID0KKyB7CisgICBzdnI0 X3JlbG9jYXRlX3NlY3Rpb25fYWRkcmVzc2VzLAorQEAgLTMzNjMsMTEgKzMzNzIsMTEgQEAgY29u c3Qgc3RydWN0IHNvbGliX29wcyBzdnI0X3NvX29wcyA9CisgICBvcGVuX3N5bWJvbF9maWxlX29i amVjdCwKKyAgIHN2cjRfaW5fZHluc3ltX3Jlc29sdmVfY29kZSwKKyAgIHNvbGliX2JmZF9vcGVu LAorLSAgbnVsbHB0ciwKKyAgIHN2cjRfc2FtZSwKKyAgIHN2cjRfa2VlcF9kYXRhX2luX2NvcmUs CisgICBzdnI0X3VwZGF0ZV9zb2xpYl9ldmVudF9icmVha3BvaW50cywKKyAgIHN2cjRfaGFuZGxl X3NvbGliX2V2ZW50LAorKyAgc3ZyNF9maW5kX3NvbGliX2FkZHIsCisgfTsKKyAKKyB2b2lkIF9p bml0aWFsaXplX3N2cjRfc29saWIgKCk7CitkaWZmIC0tZ2l0IGEvZ2RiL3NvbGliLXRhcmdldC5j IGIvZ2RiL3NvbGliLXRhcmdldC5jCistLS0gYS9nZGIvc29saWItdGFyZ2V0LmMKKysrKyBiL2dk Yi9zb2xpYi10YXJnZXQuYworQEAgLTQxMiw0ICs0MTIsOSBAQCBjb25zdCBzb2xpYl9vcHMgc29s aWJfdGFyZ2V0X3NvX29wcyA9CisgICBzb2xpYl90YXJnZXRfb3Blbl9zeW1ib2xfZmlsZV9vYmpl Y3QsCisgICBzb2xpYl90YXJnZXRfaW5fZHluc3ltX3Jlc29sdmVfY29kZSwKKyAgIHNvbGliX2Jm ZF9vcGVuLAorKyAgbnVsbHB0ciwKKysgIG51bGxwdHIsCisrICBudWxscHRyLAorKyAgbnVsbHB0 ciwKKysgIGRlZmF1bHRfZmluZF9zb2xpYl9hZGRyLAorIH07CitkaWZmIC0tZ2l0IGEvZ2RiL3Nv bGliLmMgYi9nZGIvc29saWIuYworLS0tIGEvZ2RiL3NvbGliLmMKKysrKyBiL2dkYi9zb2xpYi5j CitAQCAtNDUsNyArNDUsNiBAQAorICNpbmNsdWRlICJnZGJfYmZkLmgiCisgI2luY2x1ZGUgImdk YnN1cHBvcnQvZmlsZXN0dWZmLmgiCisgI2luY2x1ZGUgImdkYnN1cHBvcnQvc2NvcGVkX2ZkLmgi CistI2luY2x1ZGUgImRlYnVnaW5mb2Qtc3VwcG9ydC5oIgorICNpbmNsdWRlICJzb3VyY2UuaCIK KyAjaW5jbHVkZSAiY2xpL2NsaS1zdHlsZS5oIgorIAorQEAgLTExMyw3ICsxMTIsNiBAQCBzaG93 X3NvbGliX3NlYXJjaF9wYXRoIChzdHJ1Y3QgdWlfZmlsZSAqZmlsZSwgaW50IGZyb21fdHR5LAor IHN0YXRpYyBnZGI6OnVuaXF1ZV94bWFsbG9jX3B0cjxjaGFyPgorIHNvbGliX2ZpbmRfMSAoY29u c3QgY2hhciAqaW5fcGF0aG5hbWUsIGludCAqZmQsIGJvb2wgaXNfc29saWIpCisgeworLSAgY29u c3Qgc29saWJfb3BzICpvcHMgPSBnZGJhcmNoX3NvX29wcyAoY3VycmVudF9pbmZlcmlvciAoKS0+ YXJjaCAoKSk7CisgICBpbnQgZm91bmRfZmlsZSA9IC0xOworICAgZ2RiOjp1bmlxdWVfeG1hbGxv Y19wdHI8Y2hhcj4gdGVtcF9wYXRobmFtZTsKKyAgIGNvbnN0IGNoYXIgKmZza2luZCA9IGVmZmVj dGl2ZV90YXJnZXRfZmlsZV9zeXN0ZW1fa2luZCAoKTsKK0BAIC0yOTYsMTIgKzI5NCw2IEBAIHNv bGliX2ZpbmRfMSAoY29uc3QgY2hhciAqaW5fcGF0aG5hbWUsIGludCAqZmQsIGJvb2wgaXNfc29s aWIpCisgCQkJdGFyZ2V0X2xiYXNlbmFtZSAoZnNraW5kLCBpbl9wYXRobmFtZSksCisgCQkJT19S RE9OTFkgfCBPX0JJTkFSWSwgJnRlbXBfcGF0aG5hbWUpOworIAorLSAgLyogSWYgbm90IGZvdW5k LCBhbmQgd2UncmUgbG9va2luZyBmb3IgYSBzb2xpYiwgdHJ5IHRvIHVzZSB0YXJnZXQKKy0gICAg IHN1cHBsaWVkIHNvbGliIHNlYXJjaCBtZXRob2QuICAqLworLSAgaWYgKGlzX3NvbGliICYmIGZv dW5kX2ZpbGUgPCAwICYmIG9wcy0+ZmluZF9hbmRfb3Blbl9zb2xpYikKKy0gICAgZm91bmRfZmls ZSA9IG9wcy0+ZmluZF9hbmRfb3Blbl9zb2xpYiAoaW5fcGF0aG5hbWUsIE9fUkRPTkxZIHwgT19C SU5BUlksCistCQkJCQkgICAmdGVtcF9wYXRobmFtZSk7CistCisgICAvKiBJZiBub3QgZm91bmQs IG5leHQgc2VhcmNoIHRoZSBpbmZlcmlvcidzICRQQVRIIGVudmlyb25tZW50IHZhcmlhYmxlLiAg Ki8KKyAgIGlmIChmb3VuZF9maWxlIDwgMCAmJiBzeXNyb290ID09IE5VTEwpCisgICAgIGZvdW5k X2ZpbGUgPSBvcGVucCAoY3VycmVudF9pbmZlcmlvciAoKS0+ZW52aXJvbm1lbnQuZ2V0ICgiUEFU SCIpLAorQEAgLTQ3NSw1OCArNDY3LDYgQEAgc29saWJfYmZkX29wZW4gKGNvbnN0IGNoYXIgKnBh dGhuYW1lKQorICAgcmV0dXJuIGFiZmQ7CisgfQorIAorLS8qIE1hcHBpbmcgb2YgYSBjb3JlIGZp bGUncyBzaGFyZWQgbGlicmFyeSBzb25hbWVzIHRvIHRoZWlyIHJlc3BlY3RpdmUKKy0gICBidWls ZC1pZHMuICBBZGRlZCB0byB0aGUgcmVnaXN0cmllcyBvZiBjb3JlIGZpbGUgYmZkcy4gICovCist CistdHlwZWRlZiBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nPiBz b25hbWVfYnVpbGRfaWRfbWFwOworLQorLS8qIEtleSB1c2VkIHRvIGFzc29jaWF0ZSBhIHNvbmFt ZV9idWlsZF9pZF9tYXAgdG8gYSBjb3JlIGZpbGUgYmZkLiAgKi8KKy0KKy1zdGF0aWMgY29uc3Qg c3RydWN0IHJlZ2lzdHJ5PGJmZD46OmtleTxzb25hbWVfYnVpbGRfaWRfbWFwPgorLSAgY2JmZF9z b25hbWVfYnVpbGRfaWRfZGF0YV9rZXk7CistCistLyogU2VlIHNvbGliLmguICAqLworLQorLXZv aWQKKy1zZXRfY2JmZF9zb25hbWVfYnVpbGRfaWQgKGdkYl9iZmRfcmVmX3B0ciBhYmZkLCBjb25z dCBjaGFyICpzb25hbWUsCistCQkJICBjb25zdCBiZmRfYnVpbGRfaWQgKmJ1aWxkX2lkKQorLXsK Ky0gIGdkYl9hc3NlcnQgKGFiZmQuZ2V0ICgpICE9IG51bGxwdHIpOworLSAgZ2RiX2Fzc2VydCAo c29uYW1lICE9IG51bGxwdHIpOworLSAgZ2RiX2Fzc2VydCAoYnVpbGRfaWQgIT0gbnVsbHB0cik7 CistCistICBzb25hbWVfYnVpbGRfaWRfbWFwICptYXBwdHIKKy0gICAgPSBjYmZkX3NvbmFtZV9i dWlsZF9pZF9kYXRhX2tleS5nZXQgKGFiZmQuZ2V0ICgpKTsKKy0KKy0gIGlmIChtYXBwdHIgPT0g bnVsbHB0cikKKy0gICAgbWFwcHRyID0gY2JmZF9zb25hbWVfYnVpbGRfaWRfZGF0YV9rZXkuZW1w bGFjZSAoYWJmZC5nZXQgKCkpOworLQorLSAgKCptYXBwdHIpW3NvbmFtZV0gPSBidWlsZF9pZF90 b19zdHJpbmcgKGJ1aWxkX2lkKTsKKy19CistCistLyogSWYgU09OQU1FIGhhZCBhIGJ1aWxkLWlk IGFzc29jaWF0ZWQgd2l0aCBpdCBpbiBBQkZEJ3MgcmVnaXN0cnkgYnkgYQorLSAgIHByZXZpb3Vz IGNhbGwgdG8gc2V0X2NiZmRfc29uYW1lX2J1aWxkX2lkIHRoZW4gcmV0dXJuIHRoZSBidWlsZC1p ZAorLSAgIGFzIGEgTlVMTC10ZXJtaW5hdGVkIGhleCBzdHJpbmcuICAqLworLQorLXN0YXRpYyBn ZGI6OnVuaXF1ZV94bWFsbG9jX3B0cjxjaGFyPgorLWdldF9jYmZkX3NvbmFtZV9idWlsZF9pZCAo Z2RiX2JmZF9yZWZfcHRyIGFiZmQsIGNvbnN0IGNoYXIgKnNvbmFtZSkKKy17CistICBpZiAoYWJm ZC5nZXQgKCkgPT0gbnVsbHB0ciB8fCBzb25hbWUgPT0gbnVsbHB0cikKKy0gICAgcmV0dXJuIHt9 OworLQorLSAgc29uYW1lX2J1aWxkX2lkX21hcCAqbWFwcHRyCistICAgID0gY2JmZF9zb25hbWVf YnVpbGRfaWRfZGF0YV9rZXkuZ2V0IChhYmZkLmdldCAoKSk7CistCistICBpZiAobWFwcHRyID09 IG51bGxwdHIpCistICAgIHJldHVybiB7fTsKKy0KKy0gIGF1dG8gaXQgPSBtYXBwdHItPmZpbmQg KGxiYXNlbmFtZSAoc29uYW1lKSk7CistICBpZiAoaXQgPT0gbWFwcHRyLT5lbmQgKCkpCistICAg IHJldHVybiB7fTsKKy0KKy0gIHJldHVybiBtYWtlX3VuaXF1ZV94c3RyZHVwIChpdC0+c2Vjb25k LmNfc3RyICgpKTsKKy19CistCisgLyogR2l2ZW4gYSBwb2ludGVyIHRvIG9uZSBvZiB0aGUgc2hh cmVkIG9iamVjdHMgaW4gb3VyIGxpc3Qgb2YgbWFwcGVkCisgICAgb2JqZWN0cywgdXNlIHRoZSBy ZWNvcmRlZCBuYW1lIHRvIG9wZW4gYSBiZmQgZGVzY3JpcHRvciBmb3IgdGhlCisgICAgb2JqZWN0 LCBidWlsZCBhIHNlY3Rpb24gdGFibGUsIHJlbG9jYXRlIGFsbCB0aGUgc2VjdGlvbiBhZGRyZXNz ZXMKK0BAIC01NDYsMzYgKzQ4Niw1NSBAQCBzb2xpYl9tYXBfc2VjdGlvbnMgKHNvbGliICZzbykK KyAKKyAgIGdkYjo6dW5pcXVlX3htYWxsb2NfcHRyPGNoYXI+IGZpbGVuYW1lICh0aWxkZV9leHBh bmQgKHNvLnNvX25hbWUuY19zdHIgKCkpKTsKKyAgIGdkYl9iZmRfcmVmX3B0ciBhYmZkIChvcHMt PmJmZF9vcGVuIChmaWxlbmFtZS5nZXQgKCkpKTsKKy0gIGdkYjo6dW5pcXVlX3htYWxsb2NfcHRy PGNoYXI+IGJ1aWxkX2lkX2hleHN0cgorLSAgICA9IGdldF9jYmZkX3NvbmFtZV9idWlsZF9pZCAo Y3VycmVudF9wcm9ncmFtX3NwYWNlLT5jYmZkLAorLQkJCQlzby5zb19uYW1lLmNfc3RyICgpKTsK KysKKysgIC8qIElmIHdlIGhhdmUgYSBjb3JlIHRhcmdldCB0aGVuIHRoZSBjb3JlIHRhcmdldCBt aWdodCBoYXZlIHNvbWUgaGVscGZ1bAorKyAgICAgaW5mb3JtYXRpb24gKGkuZS4gYnVpbGQtaWRz KSBhYm91dCB0aGUgc2hhcmVkIGxpYnJhcmllcyB3ZSBhcmUgdHJ5aW5nCisrICAgICB0byBsb2Fk LiAgR3JhYiB0aG9zZSBoaW50cyBub3cgYW5kIHVzZSB0aGUgYmVsb3cgdG8gdmFsaWRhdGUgb3Ig ZmluZAorKyAgICAgdGhlIHNoYXJlZCBsaWJyYXJpZXMuCisrCisrICAgICBJZiB3ZSBkb24ndCBo YXZlIGEgY29yZSB0YXJnZXQgdGhlbiB0aGlzIHdpbGwgcmV0dXJuIGFuIGVtcHR5IHN0cnVjdAor KyAgICAgd2l0aCBubyBoaW50IGluZm9ybWF0aW9uLCB3ZSB0aGVuIGxvb2t1cCB0aGUgc2hhcmVk IGxpYnJhcnkgYmFzZWQgb24KKysgICAgIGl0cyBmaWxlbmFtZS4gICovCisrICBzdGQ6Om9wdGlv bmFsPENPUkVfQUREUj4gc29saWJfYWRkciA9IG9wcy0+ZmluZF9zb2xpYl9hZGRyIChzbyk7Cisr ICBzdGQ6Om9wdGlvbmFsIDxjb25zdCBjb3JlX3RhcmdldF9tYXBwZWRfZmlsZV9pbmZvPiBtYXBw ZWRfZmlsZV9pbmZvCisrICAgID0gY29yZV90YXJnZXRfZmluZF9tYXBwZWRfZmlsZSAoc28uc29f bmFtZS5jX3N0ciAoKSwgc29saWJfYWRkcik7CisgCisgICAvKiBJZiB3ZSBhbHJlYWR5IGtub3cg dGhlIGJ1aWxkLWlkIG9mIHRoaXMgc29saWIgZnJvbSBhIGNvcmUgZmlsZSwgdmVyaWZ5CisgICAg ICBpdCBtYXRjaGVzIEFCRkQncyBidWlsZC1pZC4gIElmIHRoZXJlIGlzIGEgbWlzbWF0Y2ggb3Ig dGhlIHNvbGliIHdhc24ndAorICAgICAgZm91bmQsIGF0dGVtcHQgdG8gcXVlcnkgZGVidWdpbmZv ZCBmb3IgdGhlIGNvcnJlY3Qgc29saWIuICAqLworLSAgaWYgKGJ1aWxkX2lkX2hleHN0ci5nZXQg KCkgIT0gbnVsbHB0cikKKysgIGlmIChtYXBwZWRfZmlsZV9pbmZvLmhhc192YWx1ZSAoKSkKKyAg ICAgeworLSAgICAgIGJvb2wgbWlzbWF0Y2ggPSBmYWxzZTsKKysgICAgICBib29sIG1pc21hdGNo ID0gKGFiZmQgIT0gbnVsbHB0cgorKwkJICAgICAgICYmIGJ1aWxkX2lkX2JmZF9nZXQgKGFiZmQu Z2V0ICgpKSAhPSBudWxscHRyCisrCQkgICAgICAgJiYgIWJ1aWxkX2lkX2VxdWFsIChtYXBwZWRf ZmlsZV9pbmZvLT5idWlsZF9pZCAoKSwKKysJCQkJCSAgIGJ1aWxkX2lkX2JmZF9nZXQgKGFiZmQu Z2V0ICgpKSkpOworIAorLSAgICAgIGlmIChhYmZkICE9IG51bGxwdHIgJiYgYWJmZC0+YnVpbGRf aWQgIT0gbnVsbHB0cikKKy0JeworLQkgIHN0ZDo6c3RyaW5nIGJ1aWxkX2lkID0gYnVpbGRfaWRf dG9fc3RyaW5nIChhYmZkLT5idWlsZF9pZCk7CistCistCSAgaWYgKGJ1aWxkX2lkICE9IGJ1aWxk X2lkX2hleHN0ci5nZXQgKCkpCistCSAgICBtaXNtYXRjaCA9IHRydWU7CistCX0KKyAgICAgICBp ZiAoYWJmZCA9PSBudWxscHRyIHx8IG1pc21hdGNoKQorIAl7CistCSAgc2NvcGVkX2ZkIGZkID0g ZGVidWdpbmZvZF9leGVjX3F1ZXJ5ICgKKy0JICAgIChjb25zdCB1bnNpZ25lZCBjaGFyICopIGJ1 aWxkX2lkX2hleHN0ci5nZXQgKCksIDAsCistCSAgICBzby5zb19uYW1lLmNfc3RyICgpLCAmZmls ZW5hbWUpOworLQorLQkgIGlmIChmZC5nZXQgKCkgPj0gMCkKKy0JICAgIGFiZmQgPSBvcHMtPmJm ZF9vcGVuIChmaWxlbmFtZS5nZXQgKCkpOworLQkgIGVsc2UgaWYgKG1pc21hdGNoKQorLQkgICAg d2FybmluZyAoXyAoIkJ1aWxkLWlkIG9mICVwcyBkb2VzIG5vdCBtYXRjaCBjb3JlIGZpbGUuIiks CistCQkgICAgIHN0eWxlZF9zdHJpbmcgKGZpbGVfbmFtZV9zdHlsZS5zdHlsZSAoKSwKKy0JCQkJ ICAgIGZpbGVuYW1lLmdldCAoKSkpOworKwkgIC8qIElmIEdEQiBmb3VuZCBhIHN1aXRhYmxlIGZp bGUgZHVyaW5nIHRoZSBmaWxlIG1hcHBpbmcKKysJICAgICBwcm9jZXNzaW5nIHN0YWdlIHRoZW4g bGV0cyB1c2UgdGhhdC4gIFdlIGRvbid0IGNoZWNrIHRoZQorKwkgICAgIGJ1aWxkLWlkIGFmdGVy IG9wZW5pbmcgdGhpcyBmaWxlLCBlaXRoZXIgdGhpcyBmaWxlIHdhcyBmb3VuZAorKwkgICAgIGJ5 IGJ1aWxkLWlkLCBpbiB3aGljaCBjYXNlIGl0J3MgZ29pbmcgdG8gbWF0Y2gsIG9yIHRoaXMgZmls ZQorKwkgICAgIGRvZXNuJ3QgaGF2ZSBhIGJ1aWxkLWlkLCBzbyBjaGVja2luZyB0ZWxscyB1cyBu b3RoaW5nLgorKwkgICAgIEhvd2V2ZXIsIGlmIGl0IHdhcyBnb29kIGVub3VnaCBkdXJpbmcgdGhl IG1hcHBlZCBmaWxlCisrCSAgICAgcHJvY2Vzc2luZywgd2UgYXNzdW1lIGl0J3MgZ29vZCBlbm91 Z2ggbm93LiAgKi8KKysJICBpZiAoIW1hcHBlZF9maWxlX2luZm8tPmZpbGVuYW1lICgpLmVtcHR5 ICgpKQorKwkgICAgYWJmZCA9IG9wcy0+YmZkX29wZW4gKG1hcHBlZF9maWxlX2luZm8tPmZpbGVu YW1lICgpLmNfc3RyICgpKTsKKysJICBlbHNlCisrCSAgICBhYmZkID0gbnVsbHB0cjsKKysKKysJ ICBpZiAoYWJmZCA9PSBudWxscHRyKQorKwkgICAgYWJmZCA9IGZpbmRfb2JqZmlsZV9ieV9idWls ZF9pZCAoY3VycmVudF9wcm9ncmFtX3NwYWNlLAorKwkJCQkJICAgICBtYXBwZWRfZmlsZV9pbmZv LT5idWlsZF9pZCAoKSwKKysJCQkJCSAgICAgc28uc29fbmFtZS5jX3N0ciAoKSk7CisrCisrCSAg aWYgKGFiZmQgPT0gbnVsbHB0ciAmJiBtaXNtYXRjaCkKKysJICAgIHsKKysJICAgICAgd2Fybmlu ZyAoXyAoIkJ1aWxkLWlkIG9mICVwcyBkb2VzIG5vdCBtYXRjaCBjb3JlIGZpbGUuIiksCisrCQkg ICAgICAgc3R5bGVkX3N0cmluZyAoZmlsZV9uYW1lX3N0eWxlLnN0eWxlICgpLAorKwkJCQkgICAg ICBmaWxlbmFtZS5nZXQgKCkpKTsKKysJICAgICAgYWJmZCA9IG51bGxwdHI7CisrCSAgICB9Cisg CX0KKyAgICAgfQorIAorQEAgLTE3MDUsNiArMTY2NCwxNCBAQCByZW1vdmVfdXNlcl9hZGRlZF9v YmpmaWxlIChzdHJ1Y3Qgb2JqZmlsZSAqb2JqZmlsZSkKKyAgICAgfQorIH0KKyAKKysvKiBTZWUg c29saXN0LmguICAqLworKworK3N0ZDo6b3B0aW9uYWw8Q09SRV9BRERSPgorK2RlZmF1bHRfZmlu ZF9zb2xpYl9hZGRyIChzb2xpYiAmc28pCisreworKyAgcmV0dXJuIHt9OworK30KKysKKyB2b2lk IF9pbml0aWFsaXplX3NvbGliICgpOworIAorIHZvaWQKK2RpZmYgLS1naXQgYS9nZGIvc29saWIu aCBiL2dkYi9zb2xpYi5oCistLS0gYS9nZGIvc29saWIuaAorKysrIGIvZ2RiL3NvbGliLmgKK0BA IC0xMzYsMTEgKzEzNiw0IEBAIGV4dGVybiB2b2lkIHVwZGF0ZV9zb2xpYl9icmVha3BvaW50cyAo dm9pZCk7CisgCisgZXh0ZXJuIHZvaWQgaGFuZGxlX3NvbGliX2V2ZW50ICh2b2lkKTsKKyAKKy0v KiBBc3NvY2lhdGUgU09OQU1FIHdpdGggQlVJTERfSUQgaW4gQUJGRCdzIHJlZ2lzdHJ5IHNvIHRo YXQgaXQgY2FuIGJlCistICAgcmV0cmlldmVkIHdpdGggZ2V0X2NiZmRfc29uYW1lX2J1aWxkX2lk LiAgKi8KKy0KKy1leHRlcm4gdm9pZCBzZXRfY2JmZF9zb25hbWVfYnVpbGRfaWQgKGdkYl9iZmRf cmVmX3B0ciBhYmZkLAorLQkJCQkgICAgICBjb25zdCBjaGFyICpzb25hbWUsCistCQkJCSAgICAg IGNvbnN0IGJmZF9idWlsZF9pZCAqYnVpbGRfaWQpOworLQorICNlbmRpZiAvKiBTT0xJQl9IICov CitkaWZmIC0tZ2l0IGEvZ2RiL3NvbGlzdC5oIGIvZ2RiL3NvbGlzdC5oCistLS0gYS9nZGIvc29s aXN0LmgKKysrKyBiL2dkYi9zb2xpc3QuaAorQEAgLTEzMiwxNCArMTMyLDYgQEAgc3RydWN0IHNv bGliX29wcworICAgLyogRmluZCBhbmQgb3BlbiBzaGFyZWQgbGlicmFyeSBiaW5hcnkgZmlsZS4g ICovCisgICBnZGJfYmZkX3JlZl9wdHIgKCpiZmRfb3BlbikgKGNvbnN0IGNoYXIgKnBhdGhuYW1l KTsKKyAKKy0gIC8qIE9wdGlvbmFsIGV4dHJhIGhvb2sgZm9yIGZpbmRpbmcgYW5kIG9wZW5pbmcg YSBzb2xpYi4KKy0gICAgIElmIFRFTVBfUEFUSE5BTUUgaXMgbm9uLU5VTEw6IElmIHRoZSBmaWxl IGlzIHN1Y2Nlc3NmdWxseSBvcGVuZWQgYQorLSAgICAgcG9pbnRlciB0byBhIG1hbGxvYydkIGFu ZCByZWFscGF0aCdkIGNvcHkgb2YgU09OQU1FIGlzIHN0b3JlZCB0aGVyZSwKKy0gICAgIG90aGVy d2lzZSBOVUxMIGlzIHN0b3JlZCB0aGVyZS4gICovCistICBpbnQgKCpmaW5kX2FuZF9vcGVuX3Nv bGliKSAoY29uc3QgY2hhciAqc29uYW1lLAorLQkJCSAgICAgIHVuc2lnbmVkIG9fZmxhZ3MsCist CQkJICAgICAgZ2RiOjp1bmlxdWVfeG1hbGxvY19wdHI8Y2hhcj4gKnRlbXBfcGF0aG5hbWUpOwor LQorICAgLyogR2l2ZW4gdHdvIHNvX2xpc3Qgb2JqZWN0cywgb25lIGZyb20gdGhlIEdEQiB0aHJl YWQgbGlzdAorICAgICAgYW5kIGFub3RoZXIgZnJvbSB0aGUgbGlzdCByZXR1cm5lZCBieSBjdXJy ZW50X3NvcywgcmV0dXJuIDEKKyAgICAgIGlmIHRoZXkgcmVwcmVzZW50IHRoZSBzYW1lIGxpYnJh cnkuCitAQCAtMTY3LDYgKzE1OSwyMyBAQCBzdHJ1Y3Qgc29saWJfb3BzCisgICAgICBOVUxMLCBp biB3aGljaCBjYXNlIG5vIHNwZWNpZmljIHByZXByb2Nlc3NpbmcgaXMgbmVjZXNzYXJ5CisgICAg ICBmb3IgdGhpcyB0YXJnZXQuICAqLworICAgdm9pZCAoKmhhbmRsZV9ldmVudCkgKHZvaWQpOwor KworKyAgLyogUmV0dXJuIGFuIGFkZHJlc3Mgd2l0aGluIHRoZSBpbmZlcmlvcidzIGFkZHJlc3Mg c3BhY2Ugd2hpY2ggaXMga25vd24KKysgICAgIHRvIGJlIHBhcnQgb2YgU08uICBJZiB0aGVyZSBp cyBubyBzdWNoIGFkZHJlc3MsIG9yIEdEQiBkb2Vzbid0IGtub3cKKysgICAgIGhvdyB0byBmaWd1 cmUgb3V0IHN1Y2ggYW4gYWRkcmVzcyB0aGVuIGFuIGVtcHR5IG9wdGlvbmFsIGlzCisrICAgICBy ZXR1cm5lZC4KKysKKysgICAgIFRoZSByZXR1cm5lZCBhZGRyZXNzIGNhbiBiZSB1c2VkIHdoZW4g bG9hZGluZyB0aGUgc2hhcmVkIGxpYnJhcmllcworKyAgICAgZm9yIGEgY29yZSBmaWxlLiAgR0RC IGtub3dzIHRoZSBidWlsZC1pZHMgZm9yIChzb21lKSBmaWxlcyBtYXBwZWQKKysgICAgIGludG8g dGhlIGluZmVyaW9yJ3MgYWRkcmVzcyBzcGFjZSwgYW5kIGtub3dzIHRoZSBhZGRyZXNzIHJhbmdl cyB3aGljaAorKyAgICAgdGhvc2UgbWFwcGVkIGZpbGVzIGNvdmVyLiAgSWYgR0RCIGNhbiBmaWd1 cmUgb3V0IGEgcmVwcmVzZW50YXRpdmUKKysgICAgIGFkZHJlc3MgZm9yIHRoZSBsaWJyYXJ5IHRo ZW4gdGhpcyBjYW4gYmUgdXNlZCB0byBtYXRjaCBhIGxpYnJhcnkgdG8gYQorKyAgICAgbWFwcGVk IGZpbGUsIGFuZCB0aHVzIHRvIGEgYnVpbGQtaWQuICBHREIgY2FuIHRoZW4gdXNlIHRoaXMKKysg ICAgIGluZm9ybWF0aW9uIHRvIGhlbHAgbG9jYXRlIHRoZSBzaGFyZWQgbGlicmFyeSBvYmpmaWxl LCBpZiB0aGUgb2JqZmlsZQorKyAgICAgaXMgbm90IGluIHRoZSBleHBlY3RlZCBwbGFjZSAoYXMg ZGVmaW5lZCBieSB0aGUgc2hhcmVkIGxpYnJhcmllcyBmaWxlCisrICAgICBuYW1lKS4gICovCisr CisrICBzdGQ6Om9wdGlvbmFsPENPUkVfQUREUj4gKCpmaW5kX3NvbGliX2FkZHIpIChzb2xpYiAm c28pOworIH07CisgCisgLyogQSB1bmlxdWUgcG9pbnRlciB0byBhIHNvX2xpc3QuICAqLworQEAg LTE4Niw0ICsxOTUsOSBAQCBleHRlcm4gZ2RiX2JmZF9yZWZfcHRyIHNvbGliX2JmZF9mb3BlbiAo Y29uc3QgY2hhciAqcGF0aG5hbWUsIGludCBmZCk7CisgLyogRmluZCBzb2xpYiBiaW5hcnkgZmls ZSBhbmQgb3BlbiBpdC4gICovCisgZXh0ZXJuIGdkYl9iZmRfcmVmX3B0ciBzb2xpYl9iZmRfb3Bl biAoY29uc3QgY2hhciAqaW5fcGF0aG5hbWUpOworIAorKy8qIEEgZGVmYXVsdCBpbXBsZW1lbnRh dGlvbiBvZiB0aGUgc29saWJfb3BzOjpmaW5kX3NvbGliX2FkZHIgY2FsbGJhY2suCisrICAgVGhp cyBqdXN0IHJldHVybnMgYW4gZW1wdHkgc3RkOjpvcHRpb25hbDxDT1JFX0FERFI+IGluZGljYXRp bmcgR0RCIGlzCisrICAgdW5hYmxlIHRvIGZpbmQgYW4gYWRkcmVzcyB3aXRoaW4gdGhlIGxpYnJh cnkgU08uICAqLworK2V4dGVybiBzdGQ6Om9wdGlvbmFsPENPUkVfQUREUj4gZGVmYXVsdF9maW5k X3NvbGliX2FkZHIgKHNvbGliICZzbyk7CisrCisgI2VuZGlmCitkaWZmIC0tZ2l0IGEvZ2RiL3N5 bWZpbGUtZGVidWcuYyBiL2dkYi9zeW1maWxlLWRlYnVnLmMKKy0tLSBhL2dkYi9zeW1maWxlLWRl YnVnLmMKKysrKyBiL2dkYi9zeW1maWxlLWRlYnVnLmMKK0BAIC02MzcsNyArNjM3LDcgQEAgb2Jq ZmlsZTo6ZmluZF9hbmRfYWRkX3NlcGFyYXRlX3N5bWJvbF9maWxlIChzeW1maWxlX2FkZF9mbGFn cyBzeW1maWxlX2ZsYWdzKQorIAkgICAgIHRoZSB1c2VyIGEgc3lzdGVtIHNwZWNpZmljIG1lc3Nh Z2UgdGhhdCBndWlkZXMgdGhlbSB0byBmaW5kaW5nCisgCSAgICAgdGhlIG1pc3NpbmcgZGVidWcg aW5mby4gICovCisgCistCSAgZXh0X2xhbmdfbWlzc2luZ19kZWJ1Z2luZm9fcmVzdWx0IGV4dF9y ZXN1bHQKKysJICBleHRfbGFuZ19taXNzaW5nX2ZpbGVfcmVzdWx0IGV4dF9yZXN1bHQKKyAJICAg ID0gZXh0X2xhbmdfaGFuZGxlX21pc3NpbmdfZGVidWdpbmZvICh0aGlzKTsKKyAJICBpZiAoIWV4 dF9yZXN1bHQuZmlsZW5hbWUgKCkuZW1wdHkgKCkpCisgCSAgICB7CitkaWZmIC0tZ2l0IGEvZ2Ri L3N5bWZpbGUuYyBiL2dkYi9zeW1maWxlLmMKKy0tLSBhL2dkYi9zeW1maWxlLmMKKysrKyBiL2dk Yi9zeW1maWxlLmMKK0BAIC0xMjM3LDYgKzEyMzcsOCBAQCBzZXBhcmF0ZV9kZWJ1Z19maWxlX2V4 aXN0cyAoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUsIHVuc2lnbmVkIGxvbmcgY3JjLAorIAkJCSAg ICBzdHJ1Y3Qgb2JqZmlsZSAqcGFyZW50X29iamZpbGUsCisgCQkJICAgIGRlZmVycmVkX3dhcm5p bmdzICp3YXJuaW5ncykKKyB7CisrICBTRVBBUkFURV9ERUJVR19GSUxFX1NDT1BFRF9ERUJVR19F TlRFUl9FWElUOworKworICAgdW5zaWduZWQgbG9uZyBmaWxlX2NyYzsKKyAgIGludCBmaWxlX2Ny Y19wOworICAgc3RydWN0IHN0YXQgcGFyZW50X3N0YXQsIGFiZmRfc3RhdDsKK0BAIC0xMjUxLDE5 ICsxMjUzLDEzIEBAIHNlcGFyYXRlX2RlYnVnX2ZpbGVfZXhpc3RzIChjb25zdCBzdGQ6OnN0cmlu ZyAmbmFtZSwgdW5zaWduZWQgbG9uZyBjcmMsCisgICBpZiAoZmlsZW5hbWVfY21wIChuYW1lLmNf c3RyICgpLCBvYmpmaWxlX25hbWUgKHBhcmVudF9vYmpmaWxlKSkgPT0gMCkKKyAgICAgcmV0dXJu IDA7CisgCistICBpZiAoc2VwYXJhdGVfZGVidWdfZmlsZV9kZWJ1ZykKKy0gICAgeworLSAgICAg IGdkYl9wcmludGYgKGdkYl9zdGRsb2csIF8oIiAgVHJ5aW5nICVzLi4uIiksIG5hbWUuY19zdHIg KCkpOworLSAgICAgIGdkYl9mbHVzaCAoZ2RiX3N0ZGxvZyk7CistICAgIH0KKysgIHNlcGFyYXRl X2RlYnVnX2ZpbGVfZGVidWdfcHJpbnRmICgiVHJ5aW5nICVzLi4uIiwgbmFtZS5jX3N0ciAoKSk7 CisgCisgICBnZGJfYmZkX3JlZl9wdHIgYWJmZCAoZ2RiX2JmZF9vcGVuIChuYW1lLmNfc3RyICgp LCBnbnV0YXJnZXQpKTsKKyAKKyAgIGlmIChhYmZkID09IE5VTEwpCisgICAgIHsKKy0gICAgICBp ZiAoc2VwYXJhdGVfZGVidWdfZmlsZV9kZWJ1ZykKKy0JZ2RiX3ByaW50ZiAoZ2RiX3N0ZGxvZywg XygiIG5vLCB1bmFibGUgdG8gb3Blbi5cbiIpKTsKKy0KKysgICAgICBzZXBhcmF0ZV9kZWJ1Z19m aWxlX2RlYnVnX3ByaW50ZiAoInVuYWJsZSB0byBvcGVuIGZpbGUiKTsKKyAgICAgICByZXR1cm4g MDsKKyAgICAgfQorIAorQEAgLTEyODUsMTAgKzEyODEsNyBAQCBzZXBhcmF0ZV9kZWJ1Z19maWxl X2V4aXN0cyAoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUsIHVuc2lnbmVkIGxvbmcgY3JjLAorICAg ICAgIGlmIChhYmZkX3N0YXQuc3RfZGV2ID09IHBhcmVudF9zdGF0LnN0X2RldgorIAkgICYmIGFi ZmRfc3RhdC5zdF9pbm8gPT0gcGFyZW50X3N0YXQuc3RfaW5vKQorIAl7CistCSAgaWYgKHNlcGFy YXRlX2RlYnVnX2ZpbGVfZGVidWcpCistCSAgICBnZGJfcHJpbnRmIChnZGJfc3RkbG9nLAorLQkJ CV8oIiBubywgc2FtZSBmaWxlIGFzIHRoZSBvYmpmaWxlLlxuIikpOworLQorKwkgIHNlcGFyYXRl X2RlYnVnX2ZpbGVfZGVidWdfcHJpbnRmICgic2FtZSBmaWxlIGFzIHRoZSBvYmpmaWxlIik7Cisg CSAgcmV0dXJuIDA7CisgCX0KKyAgICAgICB2ZXJpZmllZF9hc19kaWZmZXJlbnQgPSAxOworQEAg LTEzMDAsOSArMTI5Myw3IEBAIHNlcGFyYXRlX2RlYnVnX2ZpbGVfZXhpc3RzIChjb25zdCBzdGQ6 OnN0cmluZyAmbmFtZSwgdW5zaWduZWQgbG9uZyBjcmMsCisgCisgICBpZiAoIWZpbGVfY3JjX3Ap CisgICAgIHsKKy0gICAgICBpZiAoc2VwYXJhdGVfZGVidWdfZmlsZV9kZWJ1ZykKKy0JZ2RiX3By aW50ZiAoZ2RiX3N0ZGxvZywgXygiIG5vLCBlcnJvciBjb21wdXRpbmcgQ1JDLlxuIikpOworLQor KyAgICAgIHNlcGFyYXRlX2RlYnVnX2ZpbGVfZGVidWdfcHJpbnRmICgiZXJyb3IgY29tcHV0aW5n IENSQyIpOworICAgICAgIHJldHVybiAwOworICAgICB9CisgCitAQCAtMTMxOCwyMCArMTMwOSwx OCBAQCBzZXBhcmF0ZV9kZWJ1Z19maWxlX2V4aXN0cyAoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUs IHVuc2lnbmVkIGxvbmcgY3JjLAorIAl7CisgCSAgaWYgKCFnZGJfYmZkX2NyYyAocGFyZW50X29i amZpbGUtPm9iZmQuZ2V0ICgpLCAmcGFyZW50X2NyYykpCisgCSAgICB7CistCSAgICAgIGlmIChz ZXBhcmF0ZV9kZWJ1Z19maWxlX2RlYnVnKQorLQkJZ2RiX3ByaW50ZiAoZ2RiX3N0ZGxvZywKKy0J CQkgICAgXygiIG5vLCBlcnJvciBjb21wdXRpbmcgQ1JDLlxuIikpOworLQorKwkgICAgICBzZXBh cmF0ZV9kZWJ1Z19maWxlX2RlYnVnX3ByaW50ZiAoImVycm9yIGNvbXB1dGluZyBDUkMiKTsKKyAJ ICAgICAgcmV0dXJuIDA7CisgCSAgICB9CisgCX0KKyAKKyAgICAgICBpZiAodmVyaWZpZWRfYXNf ZGlmZmVyZW50IHx8IHBhcmVudF9jcmMgIT0gZmlsZV9jcmMpCisgCXsKKy0JICBpZiAoc2VwYXJh dGVfZGVidWdfZmlsZV9kZWJ1ZykKKy0JICAgIGdkYl9wcmludGYgKGdkYl9zdGRsb2csICJ0aGUg ZGVidWcgaW5mb3JtYXRpb24gZm91bmQgaW4gXCIlc1wiIgorLQkJCSIgZG9lcyBub3QgbWF0Y2gg XCIlc1wiIChDUkMgbWlzbWF0Y2gpLlxuIiwKKy0JCQluYW1lLmNfc3RyICgpLCBvYmpmaWxlX25h bWUgKHBhcmVudF9vYmpmaWxlKSk7CisrCSAgc2VwYXJhdGVfZGVidWdfZmlsZV9kZWJ1Z19wcmlu dGYKKysJICAgICgidGhlIGRlYnVnIGluZm9ybWF0aW9uIGZvdW5kIGluIFwiJXNcIiBkb2VzIG5v dCBtYXRjaCAiCisrCSAgICAgIlwiJXNcIiAoQ1JDIG1pc21hdGNoKS4iLCBuYW1lLmNfc3RyICgp LAorKwkgICAgIG9iamZpbGVfbmFtZSAocGFyZW50X29iamZpbGUpKTsKKysKKyAJICB3YXJuaW5n cy0+d2FybiAoXygidGhlIGRlYnVnIGluZm9ybWF0aW9uIGZvdW5kIGluIFwiJXBzXCIiCisgCQkJ ICAgICIgZG9lcyBub3QgbWF0Y2ggXCIlcHNcIiAoQ1JDIG1pc21hdGNoKS4iKSwKKyAJCQkgIHN0 eWxlZF9zdHJpbmcgKGZpbGVfbmFtZV9zdHlsZS5zdHlsZSAoKSwKK0BAIC0xMzQzLDggKzEzMzIs NyBAQCBzZXBhcmF0ZV9kZWJ1Z19maWxlX2V4aXN0cyAoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUs IHVuc2lnbmVkIGxvbmcgY3JjLAorICAgICAgIHJldHVybiAwOworICAgICB9CisgCistICBpZiAo c2VwYXJhdGVfZGVidWdfZmlsZV9kZWJ1ZykKKy0gICAgZ2RiX3ByaW50ZiAoZ2RiX3N0ZGxvZywg XygiIHllcyFcbiIpKTsKKysgIHNlcGFyYXRlX2RlYnVnX2ZpbGVfZGVidWdfcHJpbnRmICgiZm91 bmQgYSBtYXRjaCIpOworIAorICAgcmV0dXJuIDE7CisgfQorQEAgLTEzODUsMjMgKzEzNzMsMTgg QEAgZmluZF9zZXBhcmF0ZV9kZWJ1Z19maWxlIChjb25zdCBjaGFyICpkaXIsCisgCQkJICB1bnNp Z25lZCBsb25nIGNyYzMyLCBzdHJ1Y3Qgb2JqZmlsZSAqb2JqZmlsZSwKKyAJCQkgIGRlZmVycmVk X3dhcm5pbmdzICp3YXJuaW5ncykKKyB7CistICBpZiAoc2VwYXJhdGVfZGVidWdfZmlsZV9kZWJ1 ZykKKy0gICAgZ2RiX3ByaW50ZiAoZ2RiX3N0ZGxvZywKKy0JCV8oIlxuTG9va2luZyBmb3Igc2Vw YXJhdGUgZGVidWcgaW5mbyAoZGVidWcgbGluaykgZm9yICIKKy0JCSAgIiVzXG4iKSwgb2JqZmls ZV9uYW1lIChvYmpmaWxlKSk7CisrICBTRVBBUkFURV9ERUJVR19GSUxFX1NDT1BFRF9ERUJVR19T VEFSVF9FTkQKKysgICAgKCJsb29raW5nIGZvciBzZXBhcmF0ZSBkZWJ1ZyBpbmZvIChkZWJ1ZyBs aW5rKSBmb3IgJXMiLAorKyAgICAgb2JqZmlsZV9uYW1lIChvYmpmaWxlKSk7CisgCisgICAvKiBG aXJzdCB0cnkgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoZSBvcmlnaW5hbCBmaWxlLiAgKi8K Ky0gIHN0ZDo6c3RyaW5nIGRlYnVnZmlsZSA9IGRpcjsKKy0gIGRlYnVnZmlsZSArPSBkZWJ1Z2xp bms7CisrICBzdGQ6OnN0cmluZyBkZWJ1Z2ZpbGUgPSBwYXRoX2pvaW4gKGRpciwgZGVidWdsaW5r KTsKKyAKKyAgIGlmIChzZXBhcmF0ZV9kZWJ1Z19maWxlX2V4aXN0cyAoZGVidWdmaWxlLCBjcmMz Miwgb2JqZmlsZSwgd2FybmluZ3MpKQorICAgICByZXR1cm4gZGVidWdmaWxlOworIAorICAgLyog VGhlbiB0cnkgaW4gdGhlIHN1YmRpcmVjdG9yeSBuYW1lZCBERUJVR19TVUJESVJFQ1RPUlkuICAq LworLSAgZGVidWdmaWxlID0gZGlyOworLSAgZGVidWdmaWxlICs9IERFQlVHX1NVQkRJUkVDVE9S WTsKKy0gIGRlYnVnZmlsZSArPSAiLyI7CistICBkZWJ1Z2ZpbGUgKz0gZGVidWdsaW5rOworKyAg ZGVidWdmaWxlID0gcGF0aF9qb2luIChkaXIsIERFQlVHX1NVQkRJUkVDVE9SWSwgZGVidWdsaW5r KTsKKyAKKyAgIGlmIChzZXBhcmF0ZV9kZWJ1Z19maWxlX2V4aXN0cyAoZGVidWdmaWxlLCBjcmMz Miwgb2JqZmlsZSwgd2FybmluZ3MpKQorICAgICByZXR1cm4gZGVidWdmaWxlOworQEAgLTE0MTQs MTAgKzEzOTcsMTMgQEAgZmluZF9zZXBhcmF0ZV9kZWJ1Z19maWxlIChjb25zdCBjaGFyICpkaXIs CisgICBib29sIHRhcmdldF9wcmVmaXggPSBpc190YXJnZXRfZmlsZW5hbWUgKGRpcik7CisgICBj b25zdCBjaGFyICpkaXJfbm90YXJnZXQKKyAgICAgPSB0YXJnZXRfcHJlZml4ID8gZGlyICsgc3Ry bGVuIChUQVJHRVRfU1lTUk9PVF9QUkVGSVgpIDogZGlyOworKyAgY29uc3QgY2hhciAqdGFyZ2V0 X3ByZWZpeF9zdHIgPSB0YXJnZXRfcHJlZml4ID8gVEFSR0VUX1NZU1JPT1RfUFJFRklYIDogIiI7 CisgICBzdGQ6OnZlY3RvcjxnZGI6OnVuaXF1ZV94bWFsbG9jX3B0cjxjaGFyPj4gZGVidWdkaXJf dmVjCisgICAgID0gZGlybmFtZXNfdG9fY2hhcl9wdHJfdmVjIChkZWJ1Z19maWxlX2RpcmVjdG9y eS5jX3N0ciAoKSk7CistICBnZGI6OnVuaXF1ZV94bWFsbG9jX3B0cjxjaGFyPiBjYW5vbl9zeXNy b290CistICAgID0gZ2RiX3JlYWxwYXRoIChnZGJfc3lzcm9vdC5jX3N0ciAoKSk7CisrICBjb25z dCBjaGFyICpzeXNyb290X3N0ciA9IGdkYl9zeXNyb290LmNfc3RyICgpOworKyAgaWYgKGlzX3Rh cmdldF9maWxlbmFtZSAoc3lzcm9vdF9zdHIpICYmIHRhcmdldF9maWxlc3lzdGVtX2lzX2xvY2Fs ICgpKQorKyAgICBzeXNyb290X3N0ciArPSBzdHJsZW4gKFRBUkdFVF9TWVNST09UX1BSRUZJWCk7 CisrICBnZGI6OnVuaXF1ZV94bWFsbG9jX3B0cjxjaGFyPiBjYW5vbl9zeXNyb290ID0gZ2RiX3Jl YWxwYXRoIChzeXNyb290X3N0cik7CisgCisgIC8qIE1TLVdpbmRvd3MvTVMtRE9TIGRvbid0IGFs bG93IGNvbG9ucyBpbiBmaWxlIG5hbWVzOyB3ZSBtdXN0CisgICAgIGNvbnZlcnQgdGhlIGRyaXZl IGxldHRlciBpbnRvIGEgb25lLWxldHRlciBkaXJlY3RvcnksIHNvIHRoYXQgdGhlCitAQCAtMTQ0 MiwxMiArMTQyOCw4IEBAIGZpbmRfc2VwYXJhdGVfZGVidWdfZmlsZSAoY29uc3QgY2hhciAqZGly LAorIAorICAgZm9yIChjb25zdCBnZGI6OnVuaXF1ZV94bWFsbG9jX3B0cjxjaGFyPiAmZGVidWdk aXIgOiBkZWJ1Z2Rpcl92ZWMpCisgICAgIHsKKy0gICAgICBkZWJ1Z2ZpbGUgPSB0YXJnZXRfcHJl Zml4ID8gVEFSR0VUX1NZU1JPT1RfUFJFRklYIDogIiI7CistICAgICAgZGVidWdmaWxlICs9IGRl YnVnZGlyOworLSAgICAgIGRlYnVnZmlsZSArPSAiLyI7CistICAgICAgZGVidWdmaWxlICs9IGRy aXZlOworLSAgICAgIGRlYnVnZmlsZSArPSBkaXJfbm90YXJnZXQ7CistICAgICAgZGVidWdmaWxl ICs9IGRlYnVnbGluazsKKysgICAgICBkZWJ1Z2ZpbGUgPSBwYXRoX2pvaW4gKHRhcmdldF9wcmVm aXhfc3RyLCBkZWJ1Z2Rpci5nZXQgKCksCisrCQkJICAgICBkcml2ZS5jX3N0ciAoKSwgZGlyX25v dGFyZ2V0LCBkZWJ1Z2xpbmspOworIAorICAgICAgIGlmIChzZXBhcmF0ZV9kZWJ1Z19maWxlX2V4 aXN0cyAoZGVidWdmaWxlLCBjcmMzMiwgb2JqZmlsZSwgd2FybmluZ3MpKQorIAlyZXR1cm4gZGVi dWdmaWxlOworQEAgLTE0NjQsMzkgKzE0NDYsMTggQEAgZmluZF9zZXBhcmF0ZV9kZWJ1Z19maWxl IChjb25zdCBjaGFyICpkaXIsCisgCXsKKyAJICAvKiBJZiB0aGUgZmlsZSBpcyBpbiB0aGUgc3lz cm9vdCwgdHJ5IHVzaW5nIGl0cyBiYXNlIHBhdGggaW4KKyAJICAgICB0aGUgZ2xvYmFsIGRlYnVn ZmlsZSBkaXJlY3RvcnkuICAqLworLQkgIGRlYnVnZmlsZSA9IHRhcmdldF9wcmVmaXggPyBUQVJH RVRfU1lTUk9PVF9QUkVGSVggOiAiIjsKKy0JICBkZWJ1Z2ZpbGUgKz0gZGVidWdkaXI7CistCSAg ZGVidWdmaWxlICs9ICIvIjsKKy0JICBkZWJ1Z2ZpbGUgKz0gYmFzZV9wYXRoOworLQkgIGRlYnVn ZmlsZSArPSAiLyI7CistCSAgZGVidWdmaWxlICs9IGRlYnVnbGluazsKKysJICBkZWJ1Z2ZpbGUg PSBwYXRoX2pvaW4gKHRhcmdldF9wcmVmaXhfc3RyLCBkZWJ1Z2Rpci5nZXQgKCksCisrCQkJCSBi YXNlX3BhdGgsIGRlYnVnbGluayk7CisgCisgCSAgaWYgKHNlcGFyYXRlX2RlYnVnX2ZpbGVfZXhp c3RzIChkZWJ1Z2ZpbGUsIGNyYzMyLCBvYmpmaWxlLCB3YXJuaW5ncykpCisgCSAgICByZXR1cm4g ZGVidWdmaWxlOworIAorIAkgIC8qIElmIHRoZSBmaWxlIGlzIGluIHRoZSBzeXNyb290LCB0cnkg dXNpbmcgaXRzIGJhc2UgcGF0aCBpbgorLQkgICAgIHRoZSBzeXNyb290J3MgZ2xvYmFsIGRlYnVn ZmlsZSBkaXJlY3RvcnkuICBHREJfU1lTUk9PVAorLQkgICAgIG1pZ2h0IHJlZmVyIHRvIGEgdGFy Z2V0OiBwYXRoOyB3ZSBzdHJpcCB0aGUgInRhcmdldDoiCistCSAgICAgcHJlZml4IC0tIGJ1dCBp ZiB0aGF0IHdvdWxkIHlpZWxkIHRoZSBlbXB0eSBzdHJpbmcsIHdlCistCSAgICAgZG9uJ3QgYm90 aGVyIGF0IGFsbCwgYmVjYXVzZSB0aGF0IHdvdWxkIGp1c3QgZ2l2ZSB0aGUKKy0JICAgICBzYW1l IHJlc3VsdCBhcyBhYm92ZS4gICovCisrCSAgICAgdGhlIHN5c3Jvb3QncyBnbG9iYWwgZGVidWdm aWxlIGRpcmVjdG9yeS4gICovCisgCSAgaWYgKGdkYl9zeXNyb290ICE9IFRBUkdFVF9TWVNST09U X1BSRUZJWCkKKyAJICAgIHsKKy0JICAgICAgZGVidWdmaWxlID0gdGFyZ2V0X3ByZWZpeCA/IFRB UkdFVF9TWVNST09UX1BSRUZJWCA6ICIiOworLQkgICAgICBpZiAoaXNfdGFyZ2V0X2ZpbGVuYW1l IChnZGJfc3lzcm9vdCkpCistCQl7CistCQkgIHN0ZDo6c3RyaW5nIHJvb3QKKy0JCSAgICA9IGdk Yl9zeXNyb290LnN1YnN0ciAoc3RybGVuIChUQVJHRVRfU1lTUk9PVF9QUkVGSVgpKTsKKy0JCSAg Z2RiX2Fzc2VydCAoIXJvb3QuZW1wdHkgKCkpOworLQkJICBkZWJ1Z2ZpbGUgKz0gcm9vdDsKKy0J CX0KKy0JICAgICAgZWxzZQorLQkJZGVidWdmaWxlICs9IGdkYl9zeXNyb290OworLQkgICAgICBk ZWJ1Z2ZpbGUgKz0gZGVidWdkaXI7CistCSAgICAgIGRlYnVnZmlsZSArPSAiLyI7CistCSAgICAg IGRlYnVnZmlsZSArPSBiYXNlX3BhdGg7CistCSAgICAgIGRlYnVnZmlsZSArPSAiLyI7CistCSAg ICAgIGRlYnVnZmlsZSArPSBkZWJ1Z2xpbms7CisrCSAgICAgIGRlYnVnZmlsZSA9IHBhdGhfam9p biAoZ2RiX3N5c3Jvb3QuY19zdHIgKCksIGRlYnVnZGlyLmdldCAoKSwKKysJCQkJICAgICBiYXNl X3BhdGgsIGRlYnVnbGluayk7CisgCisgCSAgICAgIGlmIChzZXBhcmF0ZV9kZWJ1Z19maWxlX2V4 aXN0cyAoZGVidWdmaWxlLCBjcmMzMiwgb2JqZmlsZSwKKyAJCQkJCSAgICAgIHdhcm5pbmdzKSkK K2RpZmYgLS1naXQgYS9nZGIvc3ltZmlsZS5oIGIvZ2RiL3N5bWZpbGUuaAorLS0tIGEvZ2RiL3N5 bWZpbGUuaAorKysrIGIvZ2RiL3N5bWZpbGUuaAorQEAgLTM3MSw2ICszNzEsMjUgQEAgZXh0ZXJu IGdkYl9iZmRfcmVmX3B0ciBmaW5kX3NlcGFyYXRlX2RlYnVnX2ZpbGVfaW5fc2VjdGlvbiAoc3Ry dWN0IG9iamZpbGUgKik7CisgCisgZXh0ZXJuIGJvb2wgc2VwYXJhdGVfZGVidWdfZmlsZV9kZWJ1 ZzsKKyAKKysvKiBQcmludCBhICJzZXBhcmF0ZS1kZWJ1Zy1maWxlIiBkZWJ1ZyBzdGF0ZW1lbnQu ICAqLworKworKyNkZWZpbmUgc2VwYXJhdGVfZGVidWdfZmlsZV9kZWJ1Z19wcmludGYoZm10LCAu Li4pCQlcCisrICBkZWJ1Z19wcmVmaXhlZF9wcmludGZfY29uZCAoc2VwYXJhdGVfZGVidWdfZmls ZV9kZWJ1ZywJXAorKwkJCSAgICAgICJzZXBhcmF0ZS1kZWJ1Zy1maWxlIiwJCVwKKysJCQkgICAg ICBmbXQsICMjX19WQV9BUkdTX18pCisrCisrLyogUHJpbnQgInNlcGFyYXRlLWRlYnVnLWZpbGUi IGVudGVyL2V4aXQgZGVidWcgc3RhdGVtZW50cy4gICovCisrCisrI2RlZmluZSBTRVBBUkFURV9E RUJVR19GSUxFX1NDT1BFRF9ERUJVR19FTlRFUl9FWElUIFwKKysgIHNjb3BlZF9kZWJ1Z19lbnRl cl9leGl0IChzZXBhcmF0ZV9kZWJ1Z19maWxlX2RlYnVnLAlcCisrCQkJICAgInNlcGFyYXRlLWRl YnVnLWZpbGUiKQorKworKy8qIFByaW50ICJzZXBhcmF0ZS1kZWJ1Zy1maWxlIiBzdGFydC9lbmQg ZGVidWcgc3RhdGVtZW50cy4gICovCisrCisrI2RlZmluZSBTRVBBUkFURV9ERUJVR19GSUxFX1ND T1BFRF9ERUJVR19TVEFSVF9FTkQoZm10LCAuLi4pIFwKKysgIHNjb3BlZF9kZWJ1Z19zdGFydF9l bmQgKHNlcGFyYXRlX2RlYnVnX2ZpbGVfZGVidWcsCSAgICAgXAorKwkJCSAgInNlcGFyYXRlLWRl YnVnLWZpbGUiLCBmbXQsICMjX19WQV9BUkdTX18pCisrCisgLyogUmVhZCBmdWxsIHN5bWJvbHMg aW1tZWRpYXRlbHkuICAqLworIAorIGV4dGVybiBpbnQgcmVhZG5vd19zeW1ib2xfZmlsZXM7Citk aWZmIC0tZ2l0IGEvZ2RiL3RhcmdldC5jIGIvZ2RiL3RhcmdldC5jCistLS0gYS9nZGIvdGFyZ2V0 LmMKKysrKyBiL2dkYi90YXJnZXQuYworQEAgLTMxOTYsNiArMzE5NiwxNCBAQCB0YXJnZXRfb3Bz OjpmaWxlaW9fZnN0YXQgKGludCBmZCwgc3RydWN0IHN0YXQgKnNiLCBmaWxlaW9fZXJyb3IgKnRh cmdldF9lcnJubykKKyAgIHJldHVybiAtMTsKKyB9CisgCisraW50CisrdGFyZ2V0X29wczo6Zmls ZWlvX3N0YXQgKHN0cnVjdCBpbmZlcmlvciAqaW5mLCBjb25zdCBjaGFyICpmaWxlbmFtZSwKKysJ CQkgc3RydWN0IHN0YXQgKnNiLCBmaWxlaW9fZXJyb3IgKnRhcmdldF9lcnJubykKKyt7CisrICAq dGFyZ2V0X2Vycm5vID0gRklMRUlPX0VOT1NZUzsKKysgIHJldHVybiAtMTsKKyt9CisrCisgaW50 CisgdGFyZ2V0X29wczo6ZmlsZWlvX2Nsb3NlIChpbnQgZmQsIGZpbGVpb19lcnJvciAqdGFyZ2V0 X2Vycm5vKQorIHsKK0BAIC0zMzE1LDYgKzMzMjMsMjkgQEAgdGFyZ2V0X2ZpbGVpb19mc3RhdCAo aW50IGZkLCBzdHJ1Y3Qgc3RhdCAqc2IsIGZpbGVpb19lcnJvciAqdGFyZ2V0X2Vycm5vKQorIAor IC8qIFNlZSB0YXJnZXQuaC4gICovCisgCisraW50CisrdGFyZ2V0X2ZpbGVpb19zdGF0IChzdHJ1 Y3QgaW5mZXJpb3IgKmluZiwgY29uc3QgY2hhciAqZmlsZW5hbWUsCisrCQkgICAgc3RydWN0IHN0 YXQgKnNiLCBmaWxlaW9fZXJyb3IgKnRhcmdldF9lcnJubykKKyt7CisrICBmb3IgKHRhcmdldF9v cHMgKnQgPSBkZWZhdWx0X2ZpbGVpb190YXJnZXQgKCk7IHQgIT0gTlVMTDsgdCA9IHQtPmJlbmVh dGggKCkpCisrICAgIHsKKysgICAgICBpbnQgcmV0ID0gdC0+ZmlsZWlvX3N0YXQgKGluZiwgZmls ZW5hbWUsIHNiLCB0YXJnZXRfZXJybm8pOworKworKyAgICAgIGlmIChyZXQgPT0gLTEgJiYgKnRh cmdldF9lcnJubyA9PSBGSUxFSU9fRU5PU1lTKQorKwljb250aW51ZTsKKysKKysgICAgICB0YXJn ZXRfZGVidWdfcHJpbnRmX25vZnVuYyAoInRhcmdldF9maWxlaW9fc3RhdCAoJXMpID0gJWQgKCVk KSIsCisrCQkJCSAgZmlsZW5hbWUsIHJldCwKKysJCQkJICByZXQgIT0gLTEgPyAwIDogKnRhcmdl dF9lcnJubyk7CisrICAgICAgcmV0dXJuIHJldDsKKysgICAgfQorKworKyAgKnRhcmdldF9lcnJu byA9IEZJTEVJT19FTk9TWVM7CisrICByZXR1cm4gLTE7CisrfQorKworKy8qIFNlZSB0YXJnZXQu aC4gICovCisrCisgaW50CisgdGFyZ2V0X2ZpbGVpb19jbG9zZSAoaW50IGZkLCBmaWxlaW9fZXJy b3IgKnRhcmdldF9lcnJubykKKyB7CitkaWZmIC0tZ2l0IGEvZ2RiL3RhcmdldC5oIGIvZ2RiL3Rh cmdldC5oCistLS0gYS9nZGIvdGFyZ2V0LmgKKysrKyBiL2dkYi90YXJnZXQuaAorQEAgLTEwMTEs NiArMTAxMSwxNCBAQCBzdHJ1Y3QgdGFyZ2V0X29wcworICAgICAgICAqVEFSR0VUX0VSUk5PKS4g ICovCisgICAgIHZpcnR1YWwgaW50IGZpbGVpb19mc3RhdCAoaW50IGZkLCBzdHJ1Y3Qgc3RhdCAq c2IsIGZpbGVpb19lcnJvciAqdGFyZ2V0X2Vycm5vKTsKKyAKKysgICAgLyogR2V0IGluZm9ybWF0 aW9uIGFib3V0IHRoZSBmaWxlIEZJTEVOQU1FIGFuZCBwdXQgaXQgaW4gU0IuICBMb29rIGZvcgor KyAgICAgICBGSUxFTkFNRSBpbiB0aGUgZmlsZXN5c3RlbSBhcyBzZWVuIGJ5IElORi4gIElmIElO RiBpcyBOVUxMLCB1c2UgdGhlCisrICAgICAgIGZpbGVzeXN0ZW0gc2VlbiBieSB0aGUgZGVidWdn ZXIgKEdEQiBvciwgZm9yIHJlbW90ZSB0YXJnZXRzLCB0aGUKKysgICAgICAgcmVtb3RlIHN0dWIp LiAgUmV0dXJuIDAgb24gc3VjY2Vzcywgb3IgLTEgaWYgYW4gZXJyb3Igb2NjdXJzIChhbmQKKysg ICAgICAgc2V0ICpUQVJHRVRfRVJSTk8pLiAgKi8KKysgICAgdmlydHVhbCBpbnQgZmlsZWlvX3N0 YXQgKHN0cnVjdCBpbmZlcmlvciAqaW5mLCBjb25zdCBjaGFyICpmaWxlbmFtZSwKKysJCQkgICAg IHN0cnVjdCBzdGF0ICpzYiwgZmlsZWlvX2Vycm9yICp0YXJnZXRfZXJybm8pOworKworICAgICAv KiBDbG9zZSBGRCBvbiB0aGUgdGFyZ2V0LiAgUmV0dXJuIDAsIG9yIC0xIGlmIGFuIGVycm9yIG9j Y3VycworICAgICAgICAoYW5kIHNldCAqVEFSR0VUX0VSUk5PKS4gICovCisgICAgIHZpcnR1YWwg aW50IGZpbGVpb19jbG9zZSAoaW50IGZkLCBmaWxlaW9fZXJyb3IgKnRhcmdldF9lcnJubyk7CitA QCAtMjIyMCw2ICsyMjI4LDE0IEBAIGV4dGVybiBpbnQgdGFyZ2V0X2ZpbGVpb19wcmVhZCAoaW50 IGZkLCBnZGJfYnl0ZSAqcmVhZF9idWYsIGludCBsZW4sCisgZXh0ZXJuIGludCB0YXJnZXRfZmls ZWlvX2ZzdGF0IChpbnQgZmQsIHN0cnVjdCBzdGF0ICpzYiwKKyAJCQkJZmlsZWlvX2Vycm9yICp0 YXJnZXRfZXJybm8pOworIAorKy8qIEdldCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZmlsZSBhdCBG SUxFTkFNRSBvbiB0aGUgdGFyZ2V0IGFuZCBwdXQgaXQgaW4KKysgICBTQi4gIExvb2sgaW4gdGhl IGZpbGVzeXN0ZW0gYXMgc2VlbiBieSBJTkYuICBJZiBJTkYgaXMgTlVMTCwgdXNlIHRoZQorKyAg IGZpbGVzeXN0ZW0gc2VlbiBieSB0aGUgZGVidWdnZXIgKEdEQiBvciwgZm9yIHJlbW90ZSB0YXJn ZXRzLCB0aGUgcmVtb3RlCisrICAgc3R1YikuICBSZXR1cm4gMCBvbiBzdWNjZXNzLCBvciAtMSBp ZiBhbiBlcnJvciBvY2N1cnMgKGFuZCBzZXQKKysgICAqVEFSR0VUX0VSUk5PKS4gICovCisrZXh0 ZXJuIGludCB0YXJnZXRfZmlsZWlvX3N0YXQgKHN0cnVjdCBpbmZlcmlvciAqaW5mLCBjb25zdCBj aGFyICpmaWxlbmFtZSwKKysJCQkgICAgICAgc3RydWN0IHN0YXQgKnNiLCBmaWxlaW9fZXJyb3Ig KnRhcmdldF9lcnJubyk7CisrCisgLyogQ2xvc2UgRkQgb24gdGhlIHRhcmdldC4gIFJldHVybiAw LCBvciAtMSBpZiBhbiBlcnJvciBvY2N1cnMKKyAgICAoYW5kIHNldCAqVEFSR0VUX0VSUk5PKS4g ICovCisgZXh0ZXJuIGludCB0YXJnZXRfZmlsZWlvX2Nsb3NlIChpbnQgZmQsIGZpbGVpb19lcnJv ciAqdGFyZ2V0X2Vycm5vKTsKK2RpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2J1 aWxkLWlkLXNlcW5vLmMgYi9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2J1aWxkLWlkLXNlcW5vLmMK K25ldyBmaWxlIG1vZGUgMTAwNjQ0CistLS0gL2Rldi9udWxsCisrKysgYi9nZGIvdGVzdHN1aXRl L2dkYi5iYXNlL2J1aWxkLWlkLXNlcW5vLmMKK0BAIC0wLDAgKzEsMjIgQEAKKysvKiBUaGlzIHRl c3RjYXNlIGlzIHBhcnQgb2YgR0RCLCB0aGUgR05VIGRlYnVnZ2VyLgorKworKyAgIENvcHlyaWdo dCAyMDI0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyAgIFRoaXMgcHJvZ3Jh bSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBhcyBwdWJsaXNoZWQgYnkKKysgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo ZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorKyAgIChhdCB5b3VyIG9wdGlvbikgYW55 IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrICAg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ug c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZQorKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93 d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKysKKytpbnQKKyttYWluICh2b2lkKQorK3sKKysg IHJldHVybiAwOworK30KK2RpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2J1aWxk LWlkLXNlcW5vLmV4cCBiL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvYnVpbGQtaWQtc2Vxbm8uZXhw CituZXcgZmlsZSBtb2RlIDEwMDY0NAorLS0tIC9kZXYvbnVsbAorKysrIGIvZ2RiL3Rlc3RzdWl0 ZS9nZGIuYmFzZS9idWlsZC1pZC1zZXFuby5leHAKK0BAIC0wLDAgKzEsMTMzIEBACisrIyBUaGlz IHRlc3RjYXNlIGlzIHBhcnQgb2YgR0RCLCB0aGUgR05VIGRlYnVnZ2VyLgorKyMKKysjIENvcHly aWdodCAyMDI0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyMKKysjIFRoaXMgcHJv Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k aWZ5CisrIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGFzIHB1Ymxpc2hlZCBieQorKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0 aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKysjIChhdCB5b3VyIG9wdGlvbikgYW55 IGxhdGVyIHZlcnNpb24uCisrIworKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyMgTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKyMgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysjCisrIyBZb3Ugc2hv dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZQorKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5n bnUub3JnL2xpY2Vuc2VzLz4uCisrCisrIyBTZXR1cCBhIC5idWlsZC1pZC8gYmFzZWQgZGVidWcg ZGlyZWN0b3J5IGNvbnRhaW5pbmcgbXVsdGlwbGUgZW50cmllcworKyMgZm9yIHRoZSBzYW1lIGJ1 aWxkLWlkLCB3aXRoIGVhY2ggZW50cnkgZ2l2ZW4gYSBkaWZmZXJlbnQgc2VxdWVuY2UKKysjIG51 bWJlci4KKysjCisrIyBFbnN1cmUgdGhhdCBHREIgd2lsbCBzY2FuIG92ZXIgYnJva2VuIHN5bWxp bmtzIGZvciB0aGUgc2FtZSBidWlsZC1pZAorKyMgKGJ1dCBkaWZmZXJlbnQgc2VxdWVuY2UgbnVt YmVyKSB0byBmaW5kIGxhdGVyIHdvcmtpbmcgc3ltbGlua3MuCisrIworKyMgVGhpcyB0ZXN0IG9u bHkgcGxhY2VzIGRlYnVnIGluZm9ybWF0aW9uIG9uIHRoZSBob3N0LCBzbyBpdCBpcyBhbHdheXMK KysjIGxvY2FsIHRvIEdEQi4KKysKKytyZXF1aXJlIHshaXNfcmVtb3RlIGhvc3R9CisrCisrc3Rh bmRhcmRfdGVzdGZpbGUKKysKKytpZiB7W2J1aWxkX2V4ZWN1dGFibGUgImZhaWxlZCB0byBwcmVw YXJlIiAkdGVzdGZpbGUgJHNyY2ZpbGVdID09IC0xfSB7CisrICAgIHJldHVybiAtMQorK30KKysK KysjIFNwbGl0IG91dCBCSU5GSUxFLmRlYnVnLiAgUmVtb3ZlIGRlYnVnIGZyb20gQklORklMRS4K KytpZiB7W2dkYl9nbnVfc3RyaXBfZGVidWcgJGJpbmZpbGVdICE9IDB9IHsKKysgICAgcmV0dXJu IC0xCisrfQorKworKyMgR2V0IHRoZSAnLmJ1aWxkLWlkL3h4L3h4eC4uLnh4eCcgcGFydCBvZiB0 aGUgZmlsZW5hbWUuCisrc2V0IGJ1aWxkX2lkX2ZpbGVuYW1lIFtidWlsZF9pZF9kZWJ1Z19maWxl bmFtZV9nZXQgJGJpbmZpbGVdCisrCisrIyBIaWRlIChyZW5hbWUpIEJJTkZJTEUuZGVidWcsIHRo aXMgc2hvdWxkIGVuc3VyZSBHREIgY2FuJ3QgZmluZCBpdAorKyMgZGlyZWN0bHkgYnV0IG5lZWRz IHRvIGxvb2sgZm9yIHRoZSBidWlsZC1pZCBiYXNlZCBmaWxlIGluIHRoZSBkZWJ1ZworKyMgZGly ZWN0b3J5LgorK3NldCBoaWRkZW5fZGVidWdpbmZvIFtzdGFuZGFyZF9vdXRwdXRfZmlsZSAiaGlk ZGVuXyR0ZXN0ZmlsZS5kZWJ1ZyJdCisrcmVtb3RlX2V4ZWMgYnVpbGQgIm12ICR7YmluZmlsZX0u ZGVidWcgJGhpZGRlbl9kZWJ1Z2luZm8iCisrCisrIyBBIGZpbGVuYW1lIHRoYXQgZG9lc24ndCBl eGlzdC4gIFNvbWUgc3ltbGlua3Mgd2lsbCBwb2ludCBhdCB0aGlzCisrIyBmaWxlLgorK3NldCBt aXNzaW5nX2RlYnVnaW5mbyBbaG9zdF9zdGFuZGFyZF9vdXRwdXRfZmlsZSAibWlzc2luZ19kZWJ1 Z2luZm8iXQorKworKyMgQ3JlYXRlIHRoZSBkZWJ1ZyBkaXJlY3RvcnksIGFuZCB0aGUgLmJ1aWxk LWlkIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKKysjIHdpdGhpbiBpdC4KKytzZXQgZGVidWdkaXIgW2hv c3Rfc3RhbmRhcmRfb3V0cHV0X2ZpbGUgImRlYnVnIl0KKytyZW1vdGVfZXhlYyBob3N0ICJta2Rp ciAtcCAkZGVidWdkaXIvW2ZpbGUgZGlybmFtZSAkYnVpbGRfaWRfZmlsZW5hbWVdIgorKworK3Nl dCBob3N0X2hpZGRlbl9kZWJ1Z2luZm8gW2dkYl9yZW1vdGVfZG93bmxvYWQgaG9zdCAkaGlkZGVu X2RlYnVnaW5mb10KKytyZW1vdGVfZXhlYyBob3N0ICJsbiAtZnMgJGhvc3RfaGlkZGVuX2RlYnVn aW5mbyAkZGVidWdkaXIvJGJ1aWxkX2lkX2ZpbGVuYW1lIgorKworKyMgU3RhcnQgR0RCIGFuZCBs b2FkIGdsb2JhbCBCSU5GSUxFLiAgSWYgRklORF9ERUJVR0lORk8gaXMgdHJ1ZSB0aGVuCisrIyB3 ZSBleHBlY3QgR0RCIHRvIGZpbmQgdGhlIGRlYnVnIGluZm9ybWF0aW9uIG1hdGNoaW5nIEJJTkZJ TEUsCisrIyBvdGhlcndpc2UsIHdlIGV4cGVjdCBHREIgbm90IHRvIGZpbmQgdGhlIGRlYnVnIGlu Zm9ybWF0aW9uLgorK3Byb2MgbG9hZF9iaW5maWxlX2NoZWNrX2RlYnVnX2lzX2ZvdW5kIHsgZmlu ZF9kZWJ1Z2luZm8gdGVzdG5hbWUgfSB7CisrICAgIHdpdGhfdGVzdF9wcmVmaXggIiR0ZXN0bmFt ZSIgeworKwljbGVhbl9yZXN0YXJ0CisrCisrCWdkYl90ZXN0X25vX291dHB1dCAic2V0IGRlYnVn LWZpbGUtZGlyZWN0b3J5ICQ6OmRlYnVnZGlyIiBcCisrCSAgICAic2V0IGRlYnVnLWZpbGUtZGly ZWN0b3J5IgorKworKwlnZGJfZmlsZV9jbWQgJDo6YmluZmlsZQorKworKwlpZiB7ICRmaW5kX2Rl YnVnaW5mbyB9IHsKKysJICAgIGdkYl9hc3NlcnQgeyBbcmVnZXhwIFtzdHJpbmdfdG9fcmVnZXhw IFwKKysJCQkJICAgICAgIlJlYWRpbmcgc3ltYm9scyBmcm9tICQ6OmhpZGRlbl9kZWJ1Z2luZm8u Li4iXSBcCisrCQkJICAgICAgJDo6Z2RiX2ZpbGVfY21kX21zZ10gfSBcCisrCQkiZGVidWdpbmZv IHdhcyByZWFkIHZpYSBidWlsZC1pZCIKKysJfSBlbHNlIHsKKysJICAgIGdkYl9hc3NlcnQgeyBb cmVnZXhwICJcXChObyBkZWJ1Z2dpbmcgc3ltYm9scyBmb3VuZCBpbiBcW15cclxuXF0rLyQ6OnRl c3RmaWxlXFwpIiBcCisrCQkJICAgICAgJDo6Z2RiX2ZpbGVfY21kX21zZ10gfSBcCisrCSAgICB9 CisrICAgIH0KKyt9CisrCisrIyBSZXR1cm4gYSBjb3B5IG9mIEZJTEVOQU1FLCB3aGljaCBzaG91 bGQgZW5kICcuZGVidWcnLCB3aXRoIE5VTUJFUgorKyMgYWRkZWQsIGUuZy4gYWRkX3NlcW5vIDEg ImZvby5kZWJ1ZyIgLS0+ICJmb28uMS5kZWJ1ZyIuCisrcHJvYyBhZGRfc2Vxbm8geyBudW1iZXIg ZmlsZW5hbWUgfSB7CisrICAgIHJldHVybiBbcmVnc3ViICJcLmRlYnVnXCQiICRmaWxlbmFtZSAi LiR7bnVtYmVyfS5kZWJ1ZyJdCisrfQorKworK2xvYWRfYmluZmlsZV9jaGVja19kZWJ1Z19pc19m b3VuZCB0cnVlIFwKKysgICAgImZpbmQgZGVidWdpbmZvIHdpdGggYSBzaW5nbGUgYnVpbGQtaWQg ZmlsZSIKKysKKytyZW1vdGVfZXhlYyBob3N0ICJsbiAtZnMgJGhvc3RfaGlkZGVuX2RlYnVnaW5m byBcCisrCQkJJGRlYnVnZGlyL1thZGRfc2Vxbm8gMSAkYnVpbGRfaWRfZmlsZW5hbWVdIgorK3Jl bW90ZV9leGVjIGhvc3QgImxuIC1mcyAkaG9zdF9oaWRkZW5fZGVidWdpbmZvIFwKKysJCQkkZGVi dWdkaXIvW2FkZF9zZXFubyAyICRidWlsZF9pZF9maWxlbmFtZV0iCisrcmVtb3RlX2V4ZWMgaG9z dCAibG4gLWZzICRob3N0X2hpZGRlbl9kZWJ1Z2luZm8gXAorKwkJCSRkZWJ1Z2Rpci9bYWRkX3Nl cW5vIDMgJGJ1aWxkX2lkX2ZpbGVuYW1lXSIKKysKKytsb2FkX2JpbmZpbGVfY2hlY2tfZGVidWdf aXNfZm91bmQgdHJ1ZSBcCisrICAgICJmaW5kIGRlYnVnaW5mbyB3aXRoIDQgYnVpbGQtaWQgZmls ZXMiCisrCisrcmVtb3RlX2V4ZWMgaG9zdCAibG4gLWZzICRtaXNzaW5nX2RlYnVnaW5mbyAkZGVi dWdkaXIvJGJ1aWxkX2lkX2ZpbGVuYW1lIgorKworK2xvYWRfYmluZmlsZV9jaGVja19kZWJ1Z19p c19mb3VuZCB0cnVlIFwKKysgICAgImZpbmQgZGVidWdpbmZvLCBmaXJzdCBidWlsZC1pZCBmaWxl IGlzIGJhZCIKKysKKytyZW1vdGVfZXhlYyBob3N0ICJsbiAtZnMgJG1pc3NpbmdfZGVidWdpbmZv IFwKKysJCQkkZGVidWdkaXIvW2FkZF9zZXFubyAxICRidWlsZF9pZF9maWxlbmFtZV0iCisrcmVt b3RlX2V4ZWMgaG9zdCAibG4gLWZzICRtaXNzaW5nX2RlYnVnaW5mbyBcCisrCQkJJGRlYnVnZGly L1thZGRfc2Vxbm8gMyAkYnVpbGRfaWRfZmlsZW5hbWVdIgorKworK2xvYWRfYmluZmlsZV9jaGVj a19kZWJ1Z19pc19mb3VuZCB0cnVlICBcCisrICAgICJmaW5kIGRlYnVnaW5mbywgZmlyc3QgMiBi dWlsZC1pZCBmaWxlcyBhcmUgYmFkIgorKworK3JlbW90ZV9leGVjIGhvc3QgImxuIC1mcyAkbWlz c2luZ19kZWJ1Z2luZm8gXAorKwkJCSRkZWJ1Z2Rpci9bYWRkX3NlcW5vIDIgJGJ1aWxkX2lkX2Zp bGVuYW1lXSIKKysKKytsb2FkX2JpbmZpbGVfY2hlY2tfZGVidWdfaXNfZm91bmQgZmFsc2UgIFwK KysgICAgImNhbm5vdCBmaW5kIGRlYnVnaW5mbywgYWxsIGJ1aWxkLWlkIGZpbGVzIGFyZSBiYWQi CisrCisrcmVtb3RlX2V4ZWMgaG9zdCAibG4gLWZzICRob3N0X2hpZGRlbl9kZWJ1Z2luZm8gXAor KwkJCSRkZWJ1Z2Rpci9bYWRkX3NlcW5vIDMgJGJ1aWxkX2lkX2ZpbGVuYW1lXSIKKysKKytsb2Fk X2JpbmZpbGVfY2hlY2tfZGVidWdfaXNfZm91bmQgdHJ1ZSAgXAorKyAgICAiZmluZCBkZWJ1Z2lu Zm8sIGxhc3QgYnVpbGQtaWQgZmlsZSBpcyBnb29kIgorKworK3JlbW90ZV9leGVjIGhvc3QgInJt IC1mICRkZWJ1Z2Rpci9bYWRkX3NlcW5vIDEgJGJ1aWxkX2lkX2ZpbGVuYW1lXSIKKysKKytsb2Fk X2JpbmZpbGVfY2hlY2tfZGVidWdfaXNfZm91bmQgZmFsc2UgIFwKKysgICAgImNhbm5vdCBmaW5k IGRlYnVnaW5mbywgZmlsZSB3aXRoIHNlcW5vIDEgaXMgbWlzc2luZyIKK2RpZmYgLS1naXQgYS9n ZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2NvcmVmaWxlLWJ1aWxkaWQuZXhwIGIvZ2RiL3Rlc3RzdWl0 ZS9nZGIuYmFzZS9jb3JlZmlsZS1idWlsZGlkLmV4cAorLS0tIGEvZ2RiL3Rlc3RzdWl0ZS9nZGIu YmFzZS9jb3JlZmlsZS1idWlsZGlkLmV4cAorKysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9j b3JlZmlsZS1idWlsZGlkLmV4cAorQEAgLTE3MiwxMSArMTcyLDkgQEAgcHJvYyBsb2NhdGVfZXhl Y19mcm9tX2NvcmVfYnVpbGRfaWQge2NvcmVmaWxlIGJ1aWxkaWQgc3VmZml4IFwKKyAJIm1rZGly IC1wIFtmaWxlIGpvaW4gJGRlYnVnZGlyIFtmaWxlIGRpcm5hbWUgJGJ1aWxkaWRdXSIKKyAKKyAg ICAgc2V0IGZpbGVzX2xpc3Qge30KKysgICAgbGFwcGVuZCBmaWxlc19saXN0ICRiaW5maWxlICRi dWlsZGlkCisgICAgIGlmIHskc2VwZGVidWd9IHsKKy0JbGFwcGVuZCBmaWxlc19saXN0ICIkYmlu ZmlsZS5zdHJpcHBlZCIgJGJ1aWxkaWQKKyAJbGFwcGVuZCBmaWxlc19saXN0ICIkYmluZmlsZS5k ZWJ1ZyIgIiRidWlsZGlkLmRlYnVnIgorLSAgICB9IGVsc2UgeworLQlsYXBwZW5kIGZpbGVzX2xp c3QgJGJpbmZpbGUgJGJ1aWxkaWQKKyAgICAgfQorICAgICBpZiB7JHNoYXJlZH0geworIAlnbG9i YWwgc2hhcmVkaXIKK0BAIC0yMDAsMTIgKzE5OCw3IEBAIHByb2MgbG9jYXRlX2V4ZWNfZnJvbV9j b3JlX2J1aWxkX2lkIHtjb3JlZmlsZSBidWlsZGlkIHN1ZmZpeCBcCisgICAgIGdkYl90ZXN0ICJj b3JlLWZpbGUgJGNvcmVmaWxlIiAiUHJvZ3JhbSB0ZXJtaW5hdGVkIHdpdGggLioiIFwKKyAJImxv YWQgY29yZSBmaWxlIgorICAgICBpZiB7JHN5bWxpbmt9IHsKKy0JaWYgeyRzZXBkZWJ1Z30gewor LQkgICAgc2V0IGV4cGVjdGVkX2ZpbGUgW2ZpbGUgam9pbiAkYnVpbGRkaXIgXAorLQkJCQkgICBb ZmlsZSB0YWlsICIkYmluZmlsZS5zdHJpcHBlZCJdXQorLQl9IGVsc2UgeworLQkgICAgc2V0IGV4 cGVjdGVkX2ZpbGUgW2ZpbGUgam9pbiAkYnVpbGRkaXIgW2ZpbGUgdGFpbCAkYmluZmlsZV1dCist CX0KKysJc2V0IGV4cGVjdGVkX2ZpbGUgW2ZpbGUgam9pbiAkYnVpbGRkaXIgW2ZpbGUgdGFpbCAk YmluZmlsZV1dCisgICAgIH0gZWxzZSB7CisgCXNldCBleHBlY3RlZF9maWxlICRidWlsZGlkCisg ICAgIH0KK0BAIC0yNDUsMTUgKzIzOCwxMiBAQCBwcm9jIGRvX2NvcmVmaWxlX2J1aWxkaWRfdGVz dHMge2FyZ3N9IHsKKyAKKyAgICAgaWYgeyRzZXBkZWJ1Z30geworIAkjIFN0cmlwIGRlYnVnaW5m byBpbnRvIGl0cyBvd24gZmlsZS4KKy0JaWYge1tnZGJfZ251X3N0cmlwX2RlYnVnIFtzdGFuZGFy ZF9vdXRwdXRfZmlsZSAkcHJvZ3JhbV90b19ydW5dXSBcCistCQkhPSAwfSB7CisrCWlmIHtbZ2Ri X2dudV9zdHJpcF9kZWJ1ZyBbc3RhbmRhcmRfb3V0cHV0X2ZpbGUgJHByb2dyYW1fdG9fcnVuXSBc CisrCQkgbm8tZGVidWdsaW5rXSAhPSAwfSB7CisgCSAgICB1bnRlc3RlZCAiY291bGQgbm90IHN0 cmlwIGV4ZWN1dGFibGUgIGZvciBbam9pbiAkc3VmZml4IFwgXSIKKyAJICAgIHJldHVybgorIAl9 CisgCistCSMgUnVuIHRoZSBzdHJpcHBlZCBwcm9ncmFtIGluc3RlYWQgb2YgdGhlIG9yaWdpbmFs LgorLQlzZXQgcHJvZ3JhbV90b19ydW4gW2ZpbGUgam9pbiAkYnVpbGRkaXIgXAorLQkJCQlbZmls ZSB0YWlsICIkYmluZmlsZS5zdHJpcHBlZCJdXQorIAlsYXBwZW5kIHN1ZmZpeCAic2VwZGVidWci CisgICAgIH0KKyAKK2RpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2NvcmVmaWxl LmV4cCBiL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvY29yZWZpbGUuZXhwCistLS0gYS9nZGIvdGVz dHN1aXRlL2dkYi5iYXNlL2NvcmVmaWxlLmV4cAorKysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFz ZS9jb3JlZmlsZS5leHAKK0BAIC0xOTksNiArMTk5LDQ1IEBAIGdkYl90ZXN0ICJ1cCIgIiNcWzAt OVxdKiAqKFxbMC05eGEtZkgnXF0qIGluKT8gLiogXFwoLipcXCkuKiIgInVwIChyZWluaXQpIgor IAorIGdkYl90ZXN0ICJjb3JlIiAiTm8gY29yZSBmaWxlIG5vdy4iCisgCisrIyBUZW1wb3Jhcmls eSBtb3ZlIGNvcmVtbWFwLmRhdGEgb3V0IG9mIHRoZSB3YXkgYW5kIHJlbG9hZCB0aGUgY29yZQor KyMgZmlsZS4gIFdlIHNob3VsZCBzdGlsbCBiZSBhYmxlIHRvIHJlYWQgYnVmMiBhcyB0aGUgY29u dGVudHMgb2YgdGhpcworKyMgYXJlIHdyaXR0ZW4gaW50byB0aGUgY29yZSBmaWxlLiAgSW4gY29u dHJhc3QgYnVmMnJvIHNob3VsZCBubyBsb25nZXIKKysjIGJlIHJlYWRhYmxlIGFzIHRoZSBjb250 ZW50cyBvZiB0aGlzIHJlZ2lvbiBhcmUgbm90IHdpdGhpbiB0aGUgY29yZQorKyMgZmlsZSwgR0RC IHJlbGllcyBvbiByZWFkaW5nIHRoaXMgZnJvbSB0aGUgY29yZW1tYXAuZGF0YSBmaWxlLCB3aGlj aAorKyMgY2FuIG5vIGxvbmdlciBiZSBmb3VuZC4KKytzZXQgY29yZW1tYXBfZGF0YV9maWxlbmFt ZSBcCisrICAgIFtzdGFuZGFyZF9vdXRwdXRfZmlsZSBjb3JlZGlyLltnZXRwaWRdL2NvcmVtbWFw LmRhdGFdCisrc2V0IGNvcmVtbWFwX2RhdGFfYmFja3VwX2ZpbGVuYW1lIFwKKysgICAgW3N0YW5k YXJkX291dHB1dF9maWxlIGNvcmVkaXIuW2dldHBpZF0vY29yZW1tYXAuZGF0YS5iYWNrdXBdCisr cmVtb3RlX2V4ZWMgaG9zdCAibXYgJHtjb3JlbW1hcF9kYXRhX2ZpbGVuYW1lfSBcCisrCQkgICR7 Y29yZW1tYXBfZGF0YV9iYWNrdXBfZmlsZW5hbWV9IgorKworK2NsZWFuX3Jlc3RhcnQgJGJpbmZp bGUKKysKKysjIExvYWQgdGhlIGNvcmUgZmlsZSBhbmQgY2hlY2sgd2UgZ2V0IGEgd2FybmluZyBh Ym91dCB0aGUKKysjIGNvcmVtbWFwLmRhdGEgZmlsZSBiZWluZyBtaXNzaW5nLgorK2dkYl90ZXN0 X211bHRpcGxlICJjb3JlLWZpbGUgJGNvcmVmaWxlIiAid2FybiBhYm91dCBjb3JlbW1hcC5kYXRh IG1pc3NpbmciIHsKKysgICAgLXJlIC13cmFwICJ3YXJuaW5nOiBDYW4ndCBvcGVuIGZpbGUgXFte XHJcblxdKy9jb3JlbW1hcC5kYXRhIGR1cmluZyBmaWxlLWJhY2tlZCBtYXBwaW5nIG5vdGUgcHJv Y2Vzc2luZ1xyXG4uKiIgeworKwlwYXNzICRnZGJfdGVzdF9uYW1lCisrICAgIH0KKyt9CisrCisr IyBUaGlzIHhmYWlsIHdhcyBqdXN0IGNvcGllZCBmcm9tIGVhcmxpZXIgaW4gdGhlIHNjcmlwdCB3 aGVyZSB3ZSBhbHNvCisrIyByZWFkIGZyb20gYnVmMi4KKytzZXR1cF94ZmFpbCAiKi0qLXN1bm9z KiIgIiotKi1haXgqIgorK2dkYl90ZXN0ICJ4LzhiZCBidWYyIiBcCisrICAgICIuKjouKjAuKjEu KjIuKjMuKjQuKjUuKjYuKjcuKiIgXAorKyAgICAiYWNjZXNzaW5nIG1tYXBwZWQgZGF0YSBpbiBj b3JlIGZpbGUgd2l0aCBjb3JlbW1hcC5kYXRhIHJlbW92ZWQiCisrCisrZ2RiX3Rlc3QgIngvOGJk IGJ1ZjJybyIgXAorKyAgICAiJGhleFxbXjpcXSo6XFxzK0Nhbm5vdCBhY2Nlc3MgbWVtb3J5IGF0 IGFkZHJlc3MgJGhleCIgXAorKyAgICAiYWNjZXNzaW5nIHJlYWQtb25seSBtbWFwcGVkIGRhdGEg aW4gY29yZSBmaWxlIHdpdGggY29yZW1tYXAuZGF0YSByZW1vdmVkIgorKworKyMgUmVzdG9yZSB0 aGUgY29yZW1tYXAuZGF0YSBmaWxlIHNvIGxhdGVyIHRlc3RzIGRvbid0IGdpdmUgd2FybmluZ3MK KysjIHdoZW4gdGhlIGNvcmUgZmlsZSBpcyByZWxvYWRlZC4KKytyZW1vdGVfZXhlYyBob3N0ICJt diAke2NvcmVtbWFwX2RhdGFfYmFja3VwX2ZpbGVuYW1lfSBcCisrCQkgICR7Y29yZW1tYXBfZGF0 YV9maWxlbmFtZX0iCisrCisgIyBUZXN0IHRoYXQgd2UgY2FuIHVubG9hZCB0aGUgY29yZSB3aXRo IHRoZSAiZGV0YWNoIiBjb21tYW5kLgorIAorIHByb2Nfd2l0aF9wcmVmaXggY29yZWZpbGVfZGV0 YWNoIHt9IHsKK2RpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL3NvbGliLXNlYXJj aC5leHAgYi9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL3NvbGliLXNlYXJjaC5leHAKKy0tLSBhL2dk Yi90ZXN0c3VpdGUvZ2RiLmJhc2Uvc29saWItc2VhcmNoLmV4cAorKysrIGIvZ2RiL3Rlc3RzdWl0 ZS9nZGIuYmFzZS9zb2xpYi1zZWFyY2guZXhwCitAQCAtNDMsNyArNDMsMTEgQEAgc2V0IHJpZ2h0 X2JpbmZpbGUyX2xpYiBcCisgc2V0IGJpbmZpbGUxX2xpYiBbc3RhbmRhcmRfb3V0cHV0X2ZpbGUg JHtsaWJuYW1lMX0uc29dCisgc2V0IGJpbmZpbGUyX2xpYiBbc3RhbmRhcmRfb3V0cHV0X2ZpbGUg JHtsaWJuYW1lMn0uc29dCisgCistc2V0IGxpYl9mbGFncyBbbGlzdCBkZWJ1ZyBsZGZsYWdzPS1X bCwtQnN5bWJvbGljXQorKyMgV2hlbiB0aGlzIHRlc3Qgd2FzIHdyaXR0ZW4sIEdEQidzIGFiaWxp dHkgdG8gdHJhY2sgZG93biBzaGFyZWQKKysjIGxpYnJhcmllcyBmb3IgYSBjb3JlIGZpbGUgYmFz ZWQgb24gdGhlIGJ1aWxkLWlkIG11Y2ggcG9vcmVyLiAgQXMgR0RCCisrIyBoYXMgaW1wcm92ZWQg d2Ugbm93IG5lZWQgdG8gZGlzYWJsZSBidWlsZC1pZHMgaW4gb3JkZXIgZm9yIHRoaXMgdGVzdAor KyMgdG8gZnVuY3Rpb24gYXMgZXhwZWN0ZWQuCisrc2V0IGxpYl9mbGFncyBbbGlzdCBkZWJ1ZyBu by1idWlsZC1pZCBsZGZsYWdzPS1XbCwtQnN5bWJvbGljXQorIHNldCB3cm9uZ19saWJfZmxhZ3Mg IiRsaWJfZmxhZ3MgYWRkaXRpb25hbF9mbGFncz0tREFSUkFZX1NJWkU9MSIKKyBzZXQgcmlnaHRf bGliX2ZsYWdzICIkbGliX2ZsYWdzIGFkZGl0aW9uYWxfZmxhZ3M9LURBUlJBWV9TSVpFPTgxOTIg YWRkaXRpb25hbF9mbGFncz0tRFJJR0hUIgorIAorZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUv Z2RiLmJhc2Uvc3lzcm9vdC1kZWJ1Zy1sb29rdXAuZXhwIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFz ZS9zeXNyb290LWRlYnVnLWxvb2t1cC5leHAKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CistLS0gL2Rl di9udWxsCisrKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL3N5c3Jvb3QtZGVidWctbG9va3Vw LmV4cAorQEAgLTAsMCArMSwxODQgQEAKKysjIENvcHlyaWdodCAyMDI0IEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbiwgSW5jLgorKyMKKysjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrIyBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyMg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGlj ZW5zZSwgb3IKKysjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrIworKyMg VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsCisrIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w bGllZCB3YXJyYW50eSBvZgorKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KKysjCisrIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5 IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKyMgYWxvbmcgd2l0aCB0aGlzIHBy b2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisrCisr IyBUZXN0IEdEQidzIGFiaWxpdHkgdG8gZmluZCBkZWJ1ZyBpbmZvcm1hdGlvbiBieSBsb29raW5n IHdpdGhpbiB0aGUKKysjIHN5c3Jvb3QuCisrIworKyMgV2UgY29tcGlsZSBhIHN0YXRpYyBiaW5h cnkgKHRvIHJlZHVjZSB3aGF0IHdlIG5lZWQgdG8gY29weSBpbnRvIHRoZQorKyMgc3lzcm9vdCks IHNwbGl0IHRoZSBkZWJ1ZyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBiaW5hcnksIGFuZCBzZXR1cCBh CisrIyBzeXNyb290LgorKyMKKysjIFRoZSBkZWJ1Zy1maWxlLWRpcmVjdG9yeSBpcyBzZXQgdG8g anVzdCAnL2RlYnVnJywgYnV0IHdlJ3JlCisrIyBleHBlY3RpbmcgR0RCIHRvIGFjdHVhbGx5IGxv b2sgaW4gJyRTWVNST09UL2RlYnVnJy4KKysjCisrIyBUaGVyZSdzIGEgdGVzdCBmb3IgdXNpbmcg LmJ1aWxkLWlkIGJhc2VkIGxvb2t1cCwgYW5kIGEgdGVzdCBmb3IKKysjIGdudV9kZWJ1Z2xpbmsg YmFzZWQgbG9va3VwLgorKworK3JlcXVpcmUgeyFpc19yZW1vdGUgaG9zdH0KKysKKytzdGFuZGFy ZF90ZXN0ZmlsZSBtYWluLmMKKysKKysjIENyZWF0ZSBhIGNvcHkgb2YgQklORklMRSwgc3BsaXQg b3V0IHRoZSBkZWJ1ZyBpbmZvcm1hdGlvbiwgYW5kIHRoZW4KKysjIHNldHVwIGEgc3lzcm9vdC4g IEhpZGUgKGJ5IG1vdmluZykgdGhlIGFjdHVhbCBkZWJ1ZyBpbmZvcm1hdGlvbiBmaWxlCisrIyBh bmQgY3JlYXRlIGEgc3ltbGluayB0byB0aGUgaGlkZGVuIGRlYnVnIGluZm9ybWF0aW9uIGZyb20g d2l0aGluIHRoZQorKyMgc3lzcm9vdC4KKysjCisrIyBTdGFydCBHREIsIHNldCB0aGUgc3lzcm9v dCwgYW5kIHRoZW4gbG9hZCB0aGUgZXhlY3V0YWJsZSwgZW5zdXJlIEdEQgorKyMgZmluZHMgdGhl IGRlYnVnIGluZm9ybWF0aW9uLCB3aGljaCBtdXN0IGhhdmUgaGFwcGVuZWQgYnkgbG9va2luIGlu CisrIyB0aGUgc3lzcm9vdC4KKytwcm9jX3dpdGhfcHJlZml4IGxvb2t1cF92aWFfYnVpbGRfaWQg e30geworKyAgICBzZXQgZmlsZW5hbWUgJHs6OmJpbmZpbGV9XzEKKysgICAgaWYgeyBbYnVpbGRf ZXhlY3V0YWJsZSAiYnVpbGQgZXhlYyIgJHtmaWxlbmFtZX0gJDo6c3JjZmlsZSBcCisrCSAgICAg IHthZGRpdGlvbmFsX2ZsYWdzPS1zdGF0aWMgZGVidWcgYnVpbGQtaWR9XSB9IHsKKysJcmV0dXJu CisrICAgIH0KKysKKysgICAgIyBTcGxpdCBkZWJ1ZyBpbmZvcm1hdGlvbiBpbnRvIGEgLmRlYnVn IGZpbGUsIHJlbW92ZSBkZWJ1ZworKyAgICAjIGluZm9ybWF0aW9uIGZyb20gRklMRU5BTUUuICBE b24ndCBhZGQgYSAuZ251X2RlYnVnbGluayB0bworKyAgICAjIEZJTEVOQU1FLCB3ZSByZWx5IG9u IHRoZSBidWlsZC1pZC4KKysgICAgaWYge1tnZGJfZ251X3N0cmlwX2RlYnVnICRmaWxlbmFtZSB7 IG5vLWRlYnVnbGluayB9XSAhPSAwfSB7CisrCXVuc3VwcG9ydGVkICJjYW5ub3Qgc3BsaXQgZGVi dWcgaW5mb3JtYXRpb24gZnJvbSBleGVjdXRhYmxlIgorKwlyZXR1cm4KKysgICAgfQorKworKyAg ICBzZXQgc3lzcm9vdCBbc3RhbmRhcmRfb3V0cHV0X2ZpbGUgInN5c3Jvb3QxIl0KKysgICAgc2V0 IGRlYnVnX2RpciAiL2RlYnVnIgorKworKyAgICBzZXQgZGVidWdfc3ltbGluayBcCisrCSR7c3lz cm9vdH0ke2RlYnVnX2Rpcn0vW2J1aWxkX2lkX2RlYnVnX2ZpbGVuYW1lX2dldCAkZmlsZW5hbWVd CisrCisrICAgIHNldCBidWlsZF9pZF9kaXIgW2ZpbGUgZGlybmFtZSAkZGVidWdfc3ltbGlua10K KysKKysgICAgc2V0IGRlYnVnX2ZpbGVuYW1lICR7ZmlsZW5hbWV9X2hpZGRlbl9kZWJ1ZworKwor KyAgICByZW1vdGVfZXhlYyBidWlsZCAibWtkaXIgLXAgJGJ1aWxkX2lkX2RpciIKKysgICAgcmVt b3RlX2V4ZWMgYnVpbGQgIm12ICRmaWxlbmFtZS5kZWJ1ZyAkZGVidWdfZmlsZW5hbWUiCisrICAg IHJlbW90ZV9leGVjIGJ1aWxkICJsbiAtc2YgJGRlYnVnX2ZpbGVuYW1lICRkZWJ1Z19zeW1saW5r IgorKworKyAgICBmb3JlYWNoX3dpdGhfcHJlZml4IHN5c3Jvb3RfcHJlZml4IHsgIiIgInRhcmdl dDoiIH0geworKwljbGVhbl9yZXN0YXJ0CisrCisrCWdkYl90ZXN0X25vX291dHB1dCAic2V0IHN5 c3Jvb3QgJHtzeXNyb290X3ByZWZpeH0kc3lzcm9vdCIgInNldCBzeXNyb290IgorKwlnZGJfdGVz dF9ub19vdXRwdXQgInNldCBkZWJ1Zy1maWxlLWRpcmVjdG9yeSAkZGVidWdfZGlyIgorKworKwln ZGJfZmlsZV9jbWQgJGZpbGVuYW1lCisrCisrCWdkYl9hc3NlcnQgeyAkOjpnZGJfZmlsZV9jbWRf ZGVidWdfaW5mbyBlcSAiZGVidWciIH0gXAorKwkgICAgImVuc3VyZSBkZWJ1ZyBpbmZvcm1hdGlv biB3YXMgZm91bmQiCisrCisrCWlmIHsgJHN5c3Jvb3RfcHJlZml4IGVxICJ0YXJnZXQ6IgorKwkg ICAgICYmIFt0YXJnZXRfaW5mbyBnZGJfcHJvdG9jb2xdID09ICJleHRlbmRlZC1yZW1vdGUifSB7 CisrCSAgICAjIE9ubHkgd2hlbiB1c2luZyB0aGUgZXh0ZW5kZWQtcmVtb3RlIGJvYXJkIHdpbGwg d2UgaGF2ZQorKwkgICAgIyBzdGFydGVkIGEgcmVtb3RlIHRhcmdldCBieSB0aGlzIHBvaW50LiAg SW4gdGhpcyBjYXNlIEdEQgorKwkgICAgIyB3aWxsIHNlZSB0aGUgJ3RhcmdldDonIHByZWZpeCBh cyByZW1vdGUsIGFuZCBzbyB0aGUKKysJICAgICMgcmVwb3J0ZWQgZmlsZW5hbWUgd2lsbCBpbmNs dWRlIHRoZSAndGFyZ2V0OicgcHJlZml4LgorKwkgICAgIworKwkgICAgIyBJbiBhbGwgb3RoZXIg Y2FzZXMgd2Ugd2lsbCBzdGlsbCBiZSB1c2luZyB0aGUgZGVmYXVsdCwKKysJICAgICMgaW5pdGlh bCB0YXJnZXQsIGluIHdoaWNoIGNhc2UgR0RCIGNvbnNpZGVycyB0aGUKKysJICAgICMgJ3Rhcmdl dDonIHByZWZpeCB0byBpbmRpY2F0ZSB0aGUgbG9jYWwgZmlsZXN5c3RlbS4KKysJICAgIHNldCBs b29rdXBfZmlsZW5hbWUgJHN5c3Jvb3RfcHJlZml4JGRlYnVnX3N5bWxpbmsKKysJfSBlbHNlIHsK KysJICAgIHNldCBsb29rdXBfZmlsZW5hbWUgJGRlYnVnX2ZpbGVuYW1lCisrCX0KKysJc2V0IHJl IFtzdHJpbmdfdG9fcmVnZXhwICJSZWFkaW5nIHN5bWJvbHMgZnJvbSAkbG9va3VwX2ZpbGVuYW1l Li4uIl0KKysJZ2RiX2Fzc2VydCB7W3JlZ2V4cCAkcmUgJDo6Z2RiX2ZpbGVfY21kX21zZ119IFwK KysJICAgICJkZWJ1ZyBzeW1ib2xzIHJlYWQgZnJvbSBjb3JyZWN0IGZpbGUiCisrICAgIH0KKyt9 CisrCisrIyBDcmVhdGUgYSBjb3B5IG9mIEJJTkZJTEUsIHNwbGl0IG91dCB0aGUgZGVidWcgaW5m b3JtYXRpb24sIGFuZCB0aGVuCisrIyBzZXR1cCBhIHN5c3Jvb3QuICBIaWRlIChieSBtb3Zpbmcp IHRoZSBhY3R1YWwgZGVidWcgaW5mb3JtYXRpb24gZmlsZQorKyMgYW5kIGNyZWF0ZSBhIHN5bWxp bmsgdG8gdGhlIGhpZGRlbiBkZWJ1ZyBpbmZvcm1hdGlvbiBmcm9tIHdpdGhpbiB0aGUKKysjIHN5 c3Jvb3QuCisrIworKyMgQ29weSB0aGUgZXhlY3V0YWJsZSBpbnRvIHRoZSBzeXNyb290IGFuZCB0 aGVuIHN0YXJ0IEdEQiwgc2V0IHRoZQorKyMgc3lzcm9vdCwgYW5kIGxvYWQgdGhlIGV4ZWN1dGFi bGUuICBDaGVjayB0aGF0IEdEQiBmaW5kcyB0aGUgZGVidWcKKysjIGluZm9ybWF0aW9uLCB3aGlj aCBtdXN0IGhhdmUgaGFwcGVuZWQgYnkgbG9va2luIGluIHRoZSBzeXNyb290LgorK3Byb2Nfd2l0 aF9wcmVmaXggbG9va3VwX3ZpYV9kZWJ1Z2xpbmsge30geworKyAgICBzZXQgZmlsZW5hbWUgJHs6 OmJpbmZpbGV9XzIKKysgICAgaWYgeyBbYnVpbGRfZXhlY3V0YWJsZSAiYnVpbGQgZXhlYyIgJHtm aWxlbmFtZX0gJDo6c3JjZmlsZSBcCisrCSAgICAgIHthZGRpdGlvbmFsX2ZsYWdzPS1zdGF0aWMg ZGVidWcgbm8tYnVpbGQtaWR9XSB9IHsKKysJcmV0dXJuCisrICAgIH0KKysKKysgICAgIyBTcGxp dCBkZWJ1ZyBpbmZvcm1hdGlvbiBpbnRvIGEgLmRlYnVnIGZpbGUsIHJlbW92ZSBkZWJ1ZworKyAg ICAjIGluZm9ybWF0aW9uIGZyb20gRklMRU5BTUUuCisrICAgIGlmIHtbZ2RiX2dudV9zdHJpcF9k ZWJ1ZyAkZmlsZW5hbWVdICE9IDB9IHsKKysJdW5zdXBwb3J0ZWQgImNhbm5vdCBzcGxpdCBkZWJ1 ZyBpbmZvcm1hdGlvbiBmcm9tIGV4ZWN1dGFibGUiCisrCXJldHVybgorKyAgICB9CisrCisrICAg ICMgV2UncmUgZ29pbmcgdG8gc2V0dXAgdGhlIHN5c3Jvb3QgbGlrZSB0aGlzOgorKyAgICAjCisr ICAgICMgc3lzcm9vdDIvCisrICAgICMgICAgYmluLworKyAgICAjICAgICAgJEZJTEVOQU1FCisr ICAgICMgICAgZGVidWcvCisrICAgICMgICAgICBiaW4vCisrICAgICMgICAgICAgICRGSUxFTkFN RS5kZWJ1ZworKyAgICAjCisrICAgICMgV2hlbiBsb29raW5nIHVwIGRlYnVnIGluZm9ybWF0aW9u IHZpYSB0aGUgZGVidWdsaW5rLCBHREIgd2lsbAorKyAgICAjIG9ubHkgc2VhcmNoIGluIHRoZSBz eXNyb290IGlmIHRoZSBvcmlnaW5hbCBvYmpmaWxlIHdhcyBpbiB0aGUKKysgICAgIyBzeXNyb290 LiAgQW5kIEdEQiB3aWxsIHJlc29sdmUgc3ltbGlua3MsIHNvIGlmIHRoZSBvYmpmaWxlIGlzCisr ICAgICMgc3ltbGlua2VkIHRvIG91dHNpZGUgdGhlIHN5c3Jvb3QsIEdEQiB3aWxsIG5vdCBzZWFy Y2ggaW4gdGhlCisrICAgICMgc3lzcm9vdCBmb3IgdGhlIGRlYnVnIGluZm9ybWF0aW9uLgorKyAg ICAjCisrICAgICMgU28gd2UgaGF2ZSB0byBjb3B5IHRoZSBleGVjdXRhYmxlIGludG8gdGhlIHN5 c3Jvb3QuCisrICAgICMKKysgICAgIyBXZSBhcmUgT0sgdG8gc3ltbGluayB0aGUgZGVidWcgaW5m b3JtYXRpb24gdG8gYSBmaWxlIG91dHNpZGUgdGhlCisrICAgICMgc3lzcm9vdCB0aG91Z2guCisr CisrICAgIHNldCBzeXNyb290IFtzdGFuZGFyZF9vdXRwdXRfZmlsZSAic3lzcm9vdDIiXQorKwor KyAgICBmb3JlYWNoIHBhdGggeyBiaW4gZGVidWcvYmluIH0geworKwlyZW1vdGVfZXhlYyBidWls ZCAibWtkaXIgLXAgJHN5c3Jvb3QvJHBhdGgiCisrICAgIH0KKysKKysgICAgIyBDb3B5IHRoZSBl eGVjdXRhYmxlIGludG8gdGhlIHN5c3Jvb3QuCisrICAgIHNldCBmaWxlX2Jhc2VuYW1lIFtmaWxl IHRhaWwgJGZpbGVuYW1lXQorKyAgICBzZXQgZXhlY19pbl9zeXNyb290ICR7c3lzcm9vdH0vYmlu LyR7ZmlsZV9iYXNlbmFtZX0KKysgICAgcmVtb3RlX2V4ZWMgYnVpbGQgImNwICRmaWxlbmFtZSAk ZXhlY19pbl9zeXNyb290IgorKworKyAgICAjIFJlbmFtZSB0aGUgZGVidWcgZmlsZSBvdXRzaWRl IG9mIHRoZSBzeXNyb290LCB0aGlzIHNob3VsZCBzdG9wCisrICAgICMgR0RCIGZpbmRpbmcgdGhp cyBmaWxlICJieSBhY2NpZGVudCIuCisrICAgIHNldCBkZWJ1Z19maWxlbmFtZSAke2ZpbGVuYW1l fV9oaWRkZW5fZGVidWcKKysgICAgcmVtb3RlX2V4ZWMgYnVpbGQgIm12ICRmaWxlbmFtZS5kZWJ1 ZyAkZGVidWdfZmlsZW5hbWUiCisrCisrICAgICMgU3ltbGluayB0aGUgZGVidWcgaW5mb3JtYXRp b24gaW50byB0aGUgc3lzcm9vdC4KKysgICAgc2V0IGRlYnVnX3N5bWxpbmsgXAorKwkke3N5c3Jv b3R9L2RlYnVnL2Jpbi8ke2ZpbGVfYmFzZW5hbWV9LmRlYnVnCisrICAgIHJlbW90ZV9leGVjIGJ1 aWxkICJsbiAtc2YgJGRlYnVnX2ZpbGVuYW1lICRkZWJ1Z19zeW1saW5rIgorKworKyAgICBmb3Jl YWNoX3dpdGhfcHJlZml4IHN5c3Jvb3RfcHJlZml4IHsgIiIgInRhcmdldDoiIH0geworKwkjIFJl c3RhcnQgR0RCIGFuZCBzZXR1cCB0aGUgc3lzcm9vdCBhbmQgZGVidWcgZGlyZWN0b3J5LgorKwlj bGVhbl9yZXN0YXJ0CisrCWdkYl90ZXN0X25vX291dHB1dCAic2V0IHN5c3Jvb3QgJHtzeXNyb290 X3ByZWZpeH0kc3lzcm9vdCIgInNldCBzeXNyb290IgorKwlnZGJfdGVzdF9ub19vdXRwdXQgInNl dCBkZWJ1Zy1maWxlLWRpcmVjdG9yeSAvZGVidWciCisrCisrCSMgTG9hZCB0aGUgZXhlY3V0YWJs ZSwgd2UgZXhwZWN0IEdEQiB0byBmaW5kIHRoZSBkZWJ1ZyBpbmZvcm1hdGlvbgorKwkjIGluIHRo ZSBzeXNyb290LgorKwlnZGJfZmlsZV9jbWQgJHtzeXNyb290X3ByZWZpeH0kZXhlY19pbl9zeXNy b290CisrCisrCWdkYl9hc3NlcnQgeyAkOjpnZGJfZmlsZV9jbWRfZGVidWdfaW5mbyBlcSAiZGVi dWciIH0gXAorKwkgICAgImVuc3VyZSBkZWJ1ZyBpbmZvcm1hdGlvbiB3YXMgZm91bmQiCisrCisr CXNldCByZSBbc3RyaW5nX3RvX3JlZ2V4cCAiUmVhZGluZyBzeW1ib2xzIGZyb20gJHtzeXNyb290 X3ByZWZpeH0kZGVidWdfc3ltbGluay4uLiJdCisrCWdkYl9hc3NlcnQge1tyZWdleHAgJHJlICQ6 OmdkYl9maWxlX2NtZF9tc2ddfSBcCisrCSAgICAiZGVidWcgc3ltYm9scyByZWFkIGZyb20gY29y cmVjdCBmaWxlIgorKyAgICB9CisrfQorKworK2xvb2t1cF92aWFfYnVpbGRfaWQKKytsb29rdXBf dmlhX2RlYnVnbGluaworZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLmRlYnVnaW5mb2Qv YnVpbGQtaWQtbm8tZGVidWctd2FybmluZy5leHAgYi9nZGIvdGVzdHN1aXRlL2dkYi5kZWJ1Z2lu Zm9kL2J1aWxkLWlkLW5vLWRlYnVnLXdhcm5pbmcuZXhwCistLS0gYS9nZGIvdGVzdHN1aXRlL2dk Yi5kZWJ1Z2luZm9kL2J1aWxkLWlkLW5vLWRlYnVnLXdhcm5pbmcuZXhwCisrKysgYi9nZGIvdGVz dHN1aXRlL2dkYi5kZWJ1Z2luZm9kL2J1aWxkLWlkLW5vLWRlYnVnLXdhcm5pbmcuZXhwCitAQCAt MzAsMTQgKzMwLDExIEBAIGlmIHtbYnVpbGRfZXhlY3V0YWJsZSAiYnVpbGQgZXhlY3V0YWJsZSIg JHt0ZXN0ZmlsZX0gJHtzcmNmaWxlfSBcCisgICAgIHJldHVybiAtMQorIH0KKyAKKy0jIFNwbGl0 IEJJTkZJTEUgaW50byBCSU5GSUxFLnN0cmlwcGVkIGFuZCBCSU5GSUxFLmRlYnVnLCB0aGUgZmly c3QgaXMKKy0jIHRoZSBleGVjdXRhYmxlIHdpdGggdGhlIGRlYnVnIGluZm9ybWF0aW9uIHJlbW92 ZWQsIGFuZCB0aGUgc2Vjb25kIGlzCistIyB0aGUgZGVidWcgaW5mb3JtYXRpb24uCisrIyBTcGxp dCBkZWJ1ZyBpbmZvcm1hdGlvbiBmcm9tIEJJTkZJTEUgaW50byBCSU5GSUxFLmRlYnVnLgorICMK Ky0jIEhvd2V2ZXIsIGJ5IHBhc3NpbmcgdGhlICJuby1kZWJ1Z2xpbmsiIGZsYWcgd2UgcHJldmVu dCB0aGlzIHByb2MKKy0jIGZyb20gYWRkaW5nIGEgLmdudV9kZWJ1Z2xpbmsgc2VjdGlvbiB0byB0 aGUgZXhlY3V0YWJsZS4gIEFueSBsb29rdXAKKy0jIG9mIHRoZSBkZWJ1ZyBpbmZvcm1hdGlvbiBi eSBHREIgd2lsbCBuZWVkIHRvIGJlIGRvbmUgYmFzZWQgb24gdGhlCistIyBidWlsZC1pZC4KKysj IEJ5IHBhc3NpbmcgdGhlICJuby1kZWJ1Z2xpbmsiIGZsYWcgd2UgcHJldmVudCB0aGlzIHByb2Mg ZnJvbSBhZGRpbmcKKysjIGEgLmdudV9kZWJ1Z2xpbmsgc2VjdGlvbiB0byBCSU5GSUxFLiAgQW55 IGxvb2t1cCBvZiB0aGUgZGVidWcKKysjIGluZm9ybWF0aW9uIGJ5IEdEQiB3aWxsIG5lZWQgdG8g YmUgZG9uZSBiYXNlZCBvbiB0aGUgYnVpbGQtaWQuCisgaWYge1tnZGJfZ251X3N0cmlwX2RlYnVn ICRiaW5maWxlIG5vLWRlYnVnbGlua119IHsKKyAgICAgdW5zdXBwb3J0ZWQgImNhbm5vdCBwcm9k dWNlIHNlcGFyYXRlIGRlYnVnIGluZm8gZmlsZXMiCisgICAgIHJldHVybiAtMQorQEAgLTU5LDEy ICs1Niw2IEBAIHNldCBkZWJ1Z2luZm9kX2RlYnVnZGlyIFtzdGFuZGFyZF9vdXRwdXRfZmlsZSAi ZGVidWciXQorIHJlbW90ZV9leGVjIGJ1aWxkICJta2RpciAkZGVidWdpbmZvZF9kZWJ1Z2RpciIK KyByZW1vdGVfZXhlYyBidWlsZCAibXYgJGRlYnVnZmlsZSAkZGVidWdpbmZvZF9kZWJ1Z2RpciIK KyAKKy0jIFRoaXMgaXMgQklORklMRSB3aXRoIHRoZSBkZWJ1ZyBpbmZvcm1hdGlvbiByZW1vdmVk LiAgV2UgYXJlIGdvaW5nIHRvCistIyBwbGFjZSB0aGlzIGluIHRoZSBCVUlMRF9JRF9ERUJVR19G SUxFIGxvY2F0aW9uLCB0aGlzIHdvdWxkIHVzdWFsbHkKKy0jIHJlcHJlc2VudCBhIG1pc3Rha2Ug YnkgdGhlIHVzZXIsIGFuZCB3aWxsIHRyaWdnZXIgYSB3YXJuaW5nIGZyb20KKy0jIEdEQiwgdGhp cyBpcyB0aGUgd2FybmluZyB3ZSBhcmUgY2hlY2tpbmcgZm9yLgorLXNldCBzdHJpcHBlZF9iaW5m aWxlIFtzdGFuZGFyZF9vdXRwdXRfZmlsZSAiJHtiaW5maWxlfS5zdHJpcHBlZCJdCistCisgIyBD cmVhdGUgdGhlIC5idWlsZC1pZC9QUkVGSVggZGlyZWN0b3J5IG5hbWUgZnJvbQorICMgLmJ1aWxk LWlkL1BSRUZJWC9TVUZGSVguZGVidWcgZmlsZW5hbWUuCisgc2V0IGRlYnVnZGlyIFtmaWxlIGRp cm5hbWUgJHtidWlsZF9pZF9kZWJ1Z19maWxlfV0KK0BAIC03Niw3ICs2Nyw3IEBAIHJlbW90ZV9l eGVjIGJ1aWxkICJta2RpciAtcCAkZGVidWdkaXIiCisgIyBpbmZvcm1hdGlvbiwgd2hpY2ggd2ls bCBwb2ludCBiYWNrIGF0IHRoaXMgZmlsZSwgd2hpY2ggYWxzbyBkb2Vzbid0CisgIyBoYXZlIGRl YnVnIGluZm9ybWF0aW9uLCB3aGljaCBjb3VsZCBjYXVzZSBhIGxvb3AuICBCdXQgR0RCIHdpbGwg c3BvdAorICMgdGhpcyBhbmQgZ2l2ZSBhIHdhcm5pbmcuCistcmVtb3RlX2V4ZWMgYnVpbGQgIm12 ICR7c3RyaXBwZWRfYmluZmlsZX0gJHtidWlsZF9pZF9kZWJ1Z19maWxlfSIKKytyZW1vdGVfZXhl YyBidWlsZCAibXYgJHtiaW5maWxlfSAke2J1aWxkX2lkX2RlYnVnX2ZpbGV9IgorIAorICMgTm93 IHN0YXJ0IEdEQi4KKyBjbGVhbl9yZXN0YXJ0CitkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9n ZGIuZGVidWdpbmZvZC9jb3JlZmlsZS1tYXBwZWQtZmlsZS0xLmMgYi9nZGIvdGVzdHN1aXRlL2dk Yi5kZWJ1Z2luZm9kL2NvcmVmaWxlLW1hcHBlZC1maWxlLTEuYworbmV3IGZpbGUgbW9kZSAxMDA2 NDQKKy0tLSAvZGV2L251bGwKKysrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmRlYnVnaW5mb2QvY29y ZWZpbGUtbWFwcGVkLWZpbGUtMS5jCitAQCAtMCwwICsxLDI0IEBACisrLyogQ29weXJpZ2h0IDIw MjQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysg ICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFz IHB1Ymxpc2hlZCBieQorKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2 ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisrICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0 ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysgICBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91 bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl CisrICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5n bnUub3JnL2xpY2Vuc2VzLz4uICAqLworKworKy8qIFRoaXMgaXMgaW4gdGhlIHNoYXJlZCBsaWJy YXJ5LiAgKi8KKytleHRlcm4gaW50IGZvbyAodm9pZCk7CisrCisraW50CisrbWFpbiAodm9pZCkK Kyt7CisrICBpbnQgcmVzID0gZm9vICgpOworKyAgcmV0dXJuIHJlczsKKyt9CitkaWZmIC0tZ2l0 IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuZGVidWdpbmZvZC9jb3JlZmlsZS1tYXBwZWQtZmlsZS0yLmMg Yi9nZGIvdGVzdHN1aXRlL2dkYi5kZWJ1Z2luZm9kL2NvcmVmaWxlLW1hcHBlZC1maWxlLTIuYwor bmV3IGZpbGUgbW9kZSAxMDA2NDQKKy0tLSAvZGV2L251bGwKKysrKyBiL2dkYi90ZXN0c3VpdGUv Z2RiLmRlYnVnaW5mb2QvY29yZWZpbGUtbWFwcGVkLWZpbGUtMi5jCitAQCAtMCwwICsxLDIyIEBA CisrLyogQ29weXJpZ2h0IDIwMjQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisr ICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisrICAgKGF0IHlv dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lU SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor KyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUKKysgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz LgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlCisrICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3Qs IHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworKworK3ZvbGF0aWxlIGlu dCAqbGlicmFyeV9wdHIgPSAoaW50ICopIFBPSU5URVJfVkFMVUU7CisrCisraW50CisrZm9vICh2 b2lkKQorK3sKKysgIHJldHVybiAqbGlicmFyeV9wdHI7CisrfQorZGlmZiAtLWdpdCBhL2dkYi90 ZXN0c3VpdGUvZ2RiLmRlYnVnaW5mb2QvY29yZWZpbGUtbWFwcGVkLWZpbGUtMy5jIGIvZ2RiL3Rl c3RzdWl0ZS9nZGIuZGVidWdpbmZvZC9jb3JlZmlsZS1tYXBwZWQtZmlsZS0zLmMKK25ldyBmaWxl IG1vZGUgMTAwNjQ0CistLS0gL2Rldi9udWxsCisrKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5kZWJ1 Z2luZm9kL2NvcmVmaWxlLW1hcHBlZC1maWxlLTMuYworQEAgLTAsMCArMSw0NSBAQAorKy8qIENv cHlyaWdodCAyMDI0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyAgIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKysgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u OyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorKyAgIChhdCB5b3VyIG9wdGlv bikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5Z IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJD SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl CisrICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysg ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZQorKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0 dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKysKKysjaW5jbHVkZSA8YXNzZXJ0Lmg+ CisrI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisrI2luY2x1ZGUgPGZjbnRsLmg+CisrI2luY2x1ZGUg PHN5cy90eXBlcy5oPgorKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorKyNpbmNsdWRlIDx1bmlzdGQu aD4KKysjaW5jbHVkZSA8c3lzL21tYW4uaD4KKysKKyt2b2xhdGlsZSB2b2lkKiBsaWJyYXJ5X2Jh c2VfYWRkcmVzcyA9IDA7Cisrdm9sYXRpbGUgaW50ICpwdHIgPSAwOworKworK2ludAorK21haW4g KCkKKyt7CisrICBzdHJ1Y3Qgc3RhdCBidWY7CisrICBpbnQgcmVzOworKworKyAgaW50IGZkID0g b3BlbiAoU0hMSUJfRklMRU5BTUUsIE9fUkRPTkxZKTsKKysgIGFzc2VydCAoZmQgIT0gLTEpOwor KworKyAgcmVzID0gZnN0YXQgKGZkLCAmYnVmKTsKKysgIGFzc2VydCAocmVzID09IDApOworKwor KyAgbGlicmFyeV9iYXNlX2FkZHJlc3MKKysgICAgPSBtbWFwIChOVUxMLCBidWYuc3Rfc2l6ZSwg UFJPVF9SRUFELCBNQVBfUFJJVkFURSwgZmQsIDApOworKworKyAgcmVzID0gKnB0cjsJLyogVW5k ZWZpbmVkIGJlaGF2aW91ciBoZXJlLiAgKi8KKysKKysgIHJldHVybiAwOworK30KK2RpZmYgLS1n aXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5kZWJ1Z2luZm9kL2NvcmVmaWxlLW1hcHBlZC1maWxlLmV4 cCBiL2dkYi90ZXN0c3VpdGUvZ2RiLmRlYnVnaW5mb2QvY29yZWZpbGUtbWFwcGVkLWZpbGUuZXhw CituZXcgZmlsZSBtb2RlIDEwMDY0NAorLS0tIC9kZXYvbnVsbAorKysrIGIvZ2RiL3Rlc3RzdWl0 ZS9nZGIuZGVidWdpbmZvZC9jb3JlZmlsZS1tYXBwZWQtZmlsZS5leHAKK0BAIC0wLDAgKzEsMzgw IEBACisrIyBDb3B5cmlnaHQgMjAyNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysj CisrIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeQorKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKysjIHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisrIyAoYXQgeW91 ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKyMKKysjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyMgYnV0IFdJVEhP VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysj IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUKKysjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisr IworKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UKKysjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUg PGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKysKKysjIFRoaXMgdGVzdCBjaGVj a3MgR0RCJ3MgYWJpbGl0eSB0byB1c2UgYnVpbGQtaWRzIHdoZW4gc2V0dGluZyB1cCBmaWxlIGJh Y2tlZAorKyMgbWFwcGluZ3MgYXMgcGFydCBvZiByZWFkaW5nIGEgY29yZS1maWxlLgorKyMKKysj IEEgY29yZS1maWxlIGNvbnRhaW5zIGEgbGlzdCBvZiB0aGUgZmlsZXMgdGhhdCB3ZXJlIG1hcHBl ZCBpbnRvIHRoZSBwcm9jZXNzCisrIyBhdCB0aGUgdGltZSBvZiB0aGUgY29yZS1maWxlIGNyZWF0 aW9uLiAgSWYgdGhlIGZpbGUgd2FzIG1hcHBlZCByZWFkLW9ubHkKKysjIHRoZW4gdGhlIGZpbGUg Y29udGVudHMgd2lsbCBub3QgYmUgcHJlc2VudCBpbiB0aGUgY29yZS1maWxlLCBidXQgaW5zdGVh ZCBHREIKKysjIGlzIGV4cGVjdGVkIHRvIG9wZW4gdGhlIG1hcHBlZCBmaWxlIGFuZCByZWFkIHRo ZSBjb250ZW50cyBmcm9tIHRoZXJlIGlmCisrIyBuZWVkZWQuICBBbmQgdGhpcyBpcyB3aGF0IEdE QiBkb2VzLgorKyMKKysjIEdEQiAodmlhIHRoZSBCRkQgbGlicmFyeSkgd2lsbCBhbHNvIHNwb3Qg aWYgYSBtYXBwZWQgbG9va3MgbGlrZSBhIHZhbGlkIEVMRgorKyMgYW5kIGNvbnRhaW5zIGEgYnVp bGQtaWQsIHRoaXMgYnVpbGQtaWQgaXMgcGFzc2VkIGJhY2sgdG8gR0RCIHNvIHRoYXQgR0RCIGNh bgorKyMgdmFsaWRhdGUgdGhlIG9uLWRpc2sgZmlsZSBpdCBmaW5kcyBtYXRjaGVzIHRoZSBmaWxl IHRoYXQgd2FzIG1hcHBlZCB3aGVuIHRoZQorKyMgY29yZS1maWxlIHdhcyBjcmVhdGVkLgorKyMK KysjIEluIGFkZGl0aW9uLCBpZiB0aGUgb24tZGlzayBmaWxlIGlzIGZvdW5kIHRvIGhhdmUgYSBu b24tbWF0Y2hpbmcgYnVpbGQtaWQKKysjIHRoZW4gR0RCIGNhbiB1c2UgZGVidWdpbmZvZCB0byAo dHJ5KSBhbmQgZG93bmxvYWQgYSBzdWl0YWJsZSBmaWxlLgorKyMKKysjIFRoaXMgdGVzdCBpcyBh Ym91dCBjaGVja2luZyB0aGF0IHRoaXMgZmlsZSBiYWNrZWQgbWFwcGluZyBtZWNoYW5pc20gd29y a3MKKysjIGNvcnJlY3RseTsgdGhhdCBHREIgd2lsbCBzcG90IHdoZW4gdGhlIGJ1aWxkLWlkcyBm YWlsIHRvIG1hdGNoIGFuZCB3aWxsCisrIyByZWZ1c2UgdG8gbG9hZCBhbiBpbmNvcnJlY3QgZmls ZS4gIEFkZGl0aW9uYWxseSB3ZSBjaGVjayB0aGF0IHRoZSBjb3JyZWN0CisrIyBmaWxlIGNhbiBi ZSBkb3dubG9hZGVkIGZyb20gZGVidWdpbmZvZC4KKysjCisrIyBUaGUgdGVzdCBpcyByYXRoZXIg Y29udHJpdmVkIHRob3VnaC4gIEluc3RlYWQgb2YgcmVseWluZyBvbiBoYXZpbmcgYSBzaGFyZWQK KysjIGxpYnJhcnkgbWFwcGVkIGF0IHRoZSB0aW1lIG9mIGNyYXNoIHdlIG1tYXAgYSBzaGFyZWQg bGlicmFyeSBpbnRvIHRoZQorKyMgcHJvY2VzcyBhbmQgdGhlbiBjaGVjayB0aGlzIG1hcHBpbmcg d2l0aGluIHRoZSB0ZXN0LgorKyMKKysjIFRoZSBwcm9ibGVtIHdpdGggdXNpbmcgYSBub3JtYWwg c2hhcmVkIGxpYnJhcnkgbG9hZCBmb3IgdGhpcyB0ZXN0IGlzIHRoYXQKKysjIHRoZSBzaGFyZWQg bGlicmFyeSBsaXN0IGlzIHByb2Nlc3NlZCBhcyBwYXJ0IG9mIGEgc2VwYXJhdGUgc3RlcCB3aGVu IG9wZW5pbmcKKysjIHRoZSBjb3JlIGZpbGUuICBSaWdodCBub3cgdGhpcyBzZXBhcmF0ZSBzdGVw IGRvZXNuJ3QgY2hlY2sgdGhlIGJ1aWxkLWlkcworKyMgY29ycmVjdGx5LCBzbyBHREIgd2lsbCBw b3RlbnRpYWxseSBvcGVuIHRoZSB3cm9uZyBzaGFyZWQgbGlicmFyeSBmaWxlLiAgVGhlCisrIyBz ZWN0aW9ucyBvZiB0aGlzIGluY29ycmVjdCBzaGFyZWQgbGlicmFyeSBhcmUgdGhlbiBhZGRlZCB0 byBHREIncyBsaXN0IG9mCisrIyB0YXJnZXQgc2VjdGlvbnMsIGFuZCBhcmUgdXNlZCB0byBzYXRp c2Z5IG1lbW9yeSByZWFkcywgd2hpY2ggY2FuIGdpdmUgdGhlCisrIyB3cm9uZyByZXN1bHRzLgor KyMKKysjIFRoaXMgb2J2aW91c2x5IG5lZWRzIGZpeGluZywgYnV0IGlzIGEgc2VwYXJhdGUgcHJv YmxlbSBmcm9tIHRoZSBvbmUgYmVpbmcKKysjIHRlc3RlZCBoZXJlLCBzbyB0aGlzIHRlc3QgZGVs aWJlcmF0ZWx5IGNoZWNrcyB0aGUgbWFwcGluZyB1c2luZyBhIGZpbGUgdGhhdAorKyMgaXMgbW1h cGVkIHJhdGhlciB0aGFuIGxvYWRlZCBhcyBhIHNoYXJlZCBsaWJyYXJ5LCBhcyBzdWNoIHRoZSBm aWxlIGlzIGluIHRoZQorKyMgY29yZS1maWxlcyBsaXN0IG9mIG1hcHBlZCBmaWxlcywgYnV0IGlz IG5vdCBpbiB0aGUgc2hhcmVkIGxpYnJhcnkgbGlzdC4KKysjCisrIyBEZXNwaXRlIHRoaXMgdGVz dCBsaXZpbmcgaW4gdGhlIGdkYi5kZWJ1Z2luZm9kLyBkaXJlY3RvcnksIG9ubHkgdGhlIGxhc3QK KysjIHBhcnQgb2YgdGhpcyB0ZXN0IGFjdHVhbGx5IHVzZXMgZGVidWdpbmZvZCwgZXZlcnl0aGlu ZyB1cCB0byB0aGF0IHBvaW50IGlzCisrIyBwcmV0dHkgZ2VuZXJpYy4KKysKKytyZXF1aXJlIHsh aXNfcmVtb3RlIGhvc3R9CisrcmVxdWlyZSB7IWlzX3JlbW90ZSB0YXJnZXR9CisrCisrbG9hZF9s aWIgZGVidWdpbmZvZC1zdXBwb3J0LmV4cAorKworK3JlcXVpcmUgYWxsb3dfc2hsaWJfdGVzdHMK KysKKytzdGFuZGFyZF90ZXN0ZmlsZSAtMS5jIC0yLmMgLTMuYworKworKyMgQ29tcGlsZSBhbiBl eGVjdXRhYmxlIHRoYXQgbG9hZHMgdGhlIHNoYXJlZCBsaWJyYXJ5IGFzIGFuIGFjdHVhbAorKyMg c2hhcmVkIGxpYnJhcnksIHRoZW4gdXNlIEdEQiB0byBmaWd1cmUgb3V0IHRoZSBvZmZzZXQgb2Yg dGhlCisrIyB2YXJpYWJsZSAnbGlicmFyeV9wdHInIHdpdGhpbiB0aGUgbGlicmFyeS4KKytzZXQg bGlicmFyeV9maWxlbmFtZSBbc3RhbmRhcmRfb3V0cHV0X2ZpbGUgImxpYmZvby5zbyJdCisrc2V0 IGJpbmZpbGUyIFtzdGFuZGFyZF9vdXRwdXRfZmlsZSAibGlicmFyeV9sb2FkZXIiXQorKworK2lm IHtbcHJlcGFyZV9mb3JfdGVzdGluZ19mdWxsICJidWlsZCBleGVjIHdoaWNoIGxvYWRzIHRoZSBz aGFyZWQgbGlicmFyeSIgXAorKwkgW2xpc3QgJGxpYnJhcnlfZmlsZW5hbWUgXAorKwkgICAgICB7 IGRlYnVnIHNobGliIGJ1aWxkLWlkIFwKKysJCSAgICBhZGRpdGlvbmFsX2ZsYWdzPS1EUE9JTlRF Ul9WQUxVRT0weDEyMzQ1Njc4IH0gXAorKwkgICAgICAkc3JjZmlsZTIge31dIFwKKysJIFtsaXN0 ICRiaW5maWxlMiBbbGlzdCBkZWJ1ZyBzaGxpYj0kbGlicmFyeV9maWxlbmFtZSBdIFwKKysJICAg ICAgJHNyY2ZpbGUgeyBkZWJ1ZyB9XV0gIT0gMH0geworKyAgICByZXR1cm4KKyt9CisrCisraWYg eyFbcnVudG9fbWFpbl19IHsKKysgICAgcmV0dXJuCisrfQorKworK2lmIHsgW2lzX2FkZHJlc3Nf emVyb19yZWFkYWJsZV0gfSB7CisrICAgIHJldHVybgorK30KKysKKytzZXQgcHRyX2FkZHJlc3Mg W2dldF9oZXhhZGVjaW1hbF92YWx1ZW9mICImbGlicmFyeV9wdHIiICJ1bmtub3duIl0KKysKKytz ZXQgcHRyX29mZnNldCAidW5rbm93biIKKytnZGJfdGVzdF9tdWx0aXBsZSAiaW5mbyBwcm9jIG1h cHBpbmdzIiAiIiB7CisrICAgIC1yZSAiXlxccysoJGhleClcXHMrKCRoZXgpXFxzKyRoZXhcXHMr KCRoZXgpXFteXHJcblxdKyRsaWJyYXJ5X2ZpbGVuYW1lXHJcbiIgeworKwlzZXQgbG93X2FkZHIg JGV4cGVjdF9vdXQoMSxzdHJpbmcpCisrCXNldCBoaWdoX2FkZHIgJGV4cGVjdF9vdXQoMixzdHJp bmcpCisrCXNldCBmaWxlX29mZnNldCAkZXhwZWN0X291dCgzLHN0cmluZykKKysKKysJaWYge1tl eHByICRwdHJfYWRkcmVzcyA+PSAkbG93X2FkZHJdICYmIFtleHByICRwdHJfYWRkcmVzcyA8ICRo aWdoX2FkZHJdfSB7CisrCSAgICBzZXQgbWFwcGluZ19vZmZzZXQgW2V4cHIgJHB0cl9hZGRyZXNz IC0gJGxvd19hZGRyXQorKwkgICAgc2V0IHB0cl9vZmZzZXQgW2Zvcm1hdCAweCV4IFtleHByICRm aWxlX29mZnNldCArICRtYXBwaW5nX29mZnNldF1dCisrCX0KKysKKysJZXhwX2NvbnRpbnVlCisr ICAgIH0KKysKKysgICAgLXJlICJeJGdkYl9wcm9tcHQgJCIgeworKyAgICB9CisrCisrICAgIC1y ZSAiKF5cW15cclxuXF0qKVxyXG4iIHsKKysJc2V0IHRtcCAkZXhwZWN0X291dCgxLHN0cmluZykK KysJZXhwX2NvbnRpbnVlCisrICAgIH0KKyt9CisrCisrZ2RiX2Fzc2VydCB7ICRwdHJfb2Zmc2V0 IG5lICJ1bmtub3duIiB9IFwKKysgICAgImZvdW5kIHBvaW50ZXIgb2Zmc2V0IgorKworK3NldCBw dHJfc2l6ZSBbZ2V0X2ludGVnZXJfdmFsdWVvZiAic2l6ZW9mIChsaWJyYXJ5X3B0cikiICJ1bmtu b3duIl0KKytzZXQgcHRyX2Zvcm1hdF9jaGFyICIiCisraWYgeyAkcHRyX3NpemUgPT0gMiB9IHsK KysgICAgc2V0IHB0cl9mb3JtYXRfY2hhciAiYiIKKyt9IGVsc2VpZiB7ICRwdHJfc2l6ZSA9PSA0 IH0geworKyAgICBzZXQgcHRyX2Zvcm1hdF9jaGFyICJ3IgorK30gZWxzZWlmIHsgJHB0cl9zaXpl ID09IDggfSB7CisrICAgIHNldCBwdHJfZm9ybWF0X2NoYXIgImciCisrfQorK2lmIHsgJHB0cl9m b3JtYXRfY2hhciBlcSAiIiB9IHsKKysgICAgdW50ZXN0ZWQgImNvdWxkIG5vdCBmaWd1cmUgb3V0 IHNpemUgb2YgbGlicmFyeV9wdHIgdmFyaWFibGUiCisrICAgIHJldHVybgorK30KKysKKysjIEhl bHBlciBwcm9jIHRvIHJlYWQgYSB2YWx1ZSBmcm9tIGluZmVyaW9yIG1lbW9yeS4gIFJlYWRzIGF0 IGFkZHJlc3MgaGVsZCBpbgorKyMgZ2xvYmFsIFBUUl9BRERSRVNTLCBhbmQgdXNlIFBUUl9GT1JN QVRfQ0hBUiBmb3IgdGhlIHNpemUgb2YgdGhlIHJlYWQuCisrcHJvYyByZWFkX3B0cl92YWx1ZSB7 IH0geworKyAgICBzZXQgdmFsdWUgIiIKKysgICAgZ2RiX3Rlc3RfbXVsdGlwbGUgIngvMSR7Ojpw dHJfZm9ybWF0X2NoYXJ9eCAkezo6cHRyX2FkZHJlc3N9IiAiIiB7CisrCS1yZSAtd3JhcCAiXiR7 OjpoZXh9KD86XFxzKzxcW14+XF0rPik/OlxccysoJDo6aGV4KSIgeworKwkgICAgc2V0IHZhbHVl ICRleHBlY3Rfb3V0KDEsc3RyaW5nKQorKwl9CisrCS1yZSAtd3JhcCAiXiR7OjpoZXh9KD86XFxz KzxcW14+XF0rPik/OlxccytDYW5ub3QgYWNjZXNzIG1lbW9yeSBhdCBhZGRyZXNzICR7OjpoZXh9 IiB7CisrCSAgICBzZXQgdmFsdWUgInVuYXZhaWxhYmxlIgorKwl9CisrICAgIH0KKysgICAgcmV0 dXJuICR2YWx1ZQorK30KKysKKytzZXQgcHRyX2V4cGVjdGVkX3ZhbHVlIFtyZWFkX3B0cl92YWx1 ZV0KKytpZiB7ICRwdHJfZXhwZWN0ZWRfdmFsdWUgZXEgIiIgfSB7CisrICAgIHVudGVzdGVkICJj b3VsZCBub3QgZmluZCBleHBlY3RlZCB2YWx1ZSBmb3IgbGlicmFyeV9wdHIiCisrICAgIHJldHVy bgorK30KKysKKysjIE5vdyBjb21waWxlIGEgc2Vjb25kIGV4ZWN1dGFibGUuICBUaGlzIG9uZSBk b2Vzbid0IGxvYWQgdGhlIHNoYXJlZAorKyMgbGlicmFyeSBhcyBhbiBhY3R1YWwgc2hhcmVkIGxp YnJhcnksIGJ1dCBpbnN0ZWFkIG1tYXBzIHRoZSBsaWJyYXJ5CisrIyBpbnRvIHRoZSBleGVjdXRh YmxlLgorKyMKKysjIExvYWQgdGhpcyBleGVjdXRhYmxlIHdpdGhpbiBHREIgYW5kIGNvbmZpcm0g dGhhdCB3ZSBjYW4gdXNlIHRoZQorKyMgb2Zmc2V0IHdlIGNhbGN1bGF0ZWQgcHJldmlvdXNseSB0 byB2aWV3IHRoZSB2YWx1ZSBvZiAnbGlicmFyeV9wdHInLgorK3NldCBvcHRzIFtsaXN0IGRlYnVn IGFkZGl0aW9uYWxfZmxhZ3M9LURTSExJQl9GSUxFTkFNRT1cIiRsaWJyYXJ5X2ZpbGVuYW1lXCJd CisraWYge1twcmVwYXJlX2Zvcl90ZXN0aW5nICJwcmVwYXJlIHNlY29uZCBleGVjdXRhYmxlIiAk YmluZmlsZSBcCisrCSAkc3JjZmlsZTMgJG9wdHNdICE9IDB9IHsKKysgICAgcmV0dXJuCisrfQor KworK2lmIHshW3J1bnRvX21haW5dfSB7CisrICAgIHJldHVybgorK30KKysKKytnZGJfYnJlYWtw b2ludCBbZ2RiX2dldF9saW5lX251bWJlciAiVW5kZWZpbmVkIGJlaGF2aW91ciBoZXJlIiAkc3Jj ZmlsZTNdCisrZ2RiX2NvbnRpbnVlX3RvX2JyZWFrcG9pbnQgInJ1biB0byBicmVha3BvaW50Igor KworK3NldCBsaWJyYXJ5X2Jhc2VfYWRkcmVzcyBcCisrICAgIFtnZXRfaGV4YWRlY2ltYWxfdmFs dWVvZiAibGlicmFyeV9iYXNlX2FkZHJlc3MiICJ1bmtub3duIl0KKytzZXQgcHRyX2FkZHJlc3Mg W2Zvcm1hdCAweCV4IFtleHByICRsaWJyYXJ5X2Jhc2VfYWRkcmVzcyArICRwdHJfb2Zmc2V0XV0K KysKKytzZXQgcHRyX3ZhbHVlIFtyZWFkX3B0cl92YWx1ZV0KKytnZGJfYXNzZXJ0IHsgJHB0cl92 YWx1ZSA9PSAkcHRyX2V4cGVjdGVkX3ZhbHVlIH0gXAorKyAgICAiY2hlY2sgdmFsdWUgb2YgcG9p bnRlciB2YXJpYWJsZSIKKysKKysjIE5vdyByZXJ1biB0aGUgc2Vjb25kIGV4ZWN1dGFibGUgb3V0 c2lkZSBvZiBHREIuICBUaGUgZXhlY3V0YWJsZSBzaG91bGQgY3Jhc2gKKysjIGFuZCBnZW5lcmF0 ZSBhIGNvcmVmaWxlLgorK3NldCBjb3JlZmlsZSBbY29yZV9maW5kICRiaW5maWxlXQorK2lmIHsk Y29yZWZpbGUgZXEgIiJ9IHsKKysgICAgdW50ZXN0ZWQgImNvdWxkIG5vdCBnZW5lcmF0ZSBjb3Jl IGZpbGUiCisrICAgIHJldHVybgorK30KKysKKysjIExvYWQgYSBjb3JlIGZpbGUgZnJvbSB0aGUg Z2xvYmFsIENPUkVGSUxFLiAgVXNlIFRFU1ROQU1FIGFzIHRoZSBuYW1lCisrIyBvZiB0aGUgdGVz dC4KKysjCisrIyBJZiBMSU5FX1JFIGlzIG5vdCB0aGUgZW1wdHkgc3RyaW5nIHRoZW4gdGhpcyBp cyBhIHJlZ2V4cCBmb3IgYSBsaW5lCisrIyB0aGF0IHdlIGV4cGVjdCB0byBzZWUgaW4gdGhlIG91 dHB1dCB3aGVuIGxvYWRpbmcgdGhlIGNvcmUgZmlsZSwgaWYKKysjIHRoZSBsaW5lIGlzIG5vdCBw cmVzZW50IHRoZW4gdGhpcyB0ZXN0IHdpbGwgZmFpbC4KKysjCisrIyBBbnkgbGluZXMgYmVnaW5u aW5nIHdpdGggJ3dhcm5pbmc6ICcgd2lsbCBjYXVzZSB0aGlzIHRlc3QgdG8gZmFpbC4KKysjCisr IyBBIGNvdXBsZSBvZiBvdGhlciBzdGFuZGFyZCBsaW5lcyB0aGF0IGFyZSBwcm9kdWNlZCB3aGVu IGxvYWRpbmcgYQorKyMgY29yZSBmaWxlIGFyZSBhbHNvIGNoZWNrZWQgZm9yLCBqdXN0IHRvIG1h a2Ugc3VyZSB0aGUgY29yZSBmaWxlCisrIyBsb2FkaW5nIGhhcyBwcm9ncmVzc2VkIGFzIGV4cGVj dGVkLgorK3Byb2MgbG9hZF9jb3JlX2ZpbGUgeyB0ZXN0bmFtZSB7IGxpbmVfcmUgIiIgfSB9IHsK KysgICAgc2V0IGNvZGUge30KKysKKysgICAgaWYgeyAkbGluZV9yZSBuZSAiIiB9IHsKKysJYXBw ZW5kIGNvZGUgeworKwkgICAgLXJlICJeJGxpbmVfcmVcclxuIiB7CisrCQlzZXQgc2F3X2V4cGVj dGVkX2xpbmUgdHJ1ZQorKwkJZXhwX2NvbnRpbnVlCisrCSAgICB9CisrCX0KKysJc2V0IHNhd19l eHBlY3RlZF9saW5lIGZhbHNlCisrICAgIH0gZWxzZSB7CisrCXNldCBzYXdfZXhwZWN0ZWRfbGlu ZSB0cnVlCisrICAgIH0KKysKKysgICAgc2V0IHNhd191bmtub3duX3dhcm5pbmcgZmFsc2UKKysg ICAgc2V0IHNhd19nZW5lcmF0ZWRfYnlfbGluZSBmYWxzZQorKyAgICBzZXQgc2F3X3Byb2dfdGVy bWluYXRlZF9saW5lIGZhbHNlCisrCisrICAgIGFwcGVuZCBjb2RlIHsKKysJLXJlICJed2Fybmlu ZzogXFteXHJcblxdK1xyXG4iIHsKKysJICAgIHNldCBzYXdfdW5rbm93bl93YXJuaW5nIHRydWUK KysJICAgIGV4cF9jb250aW51ZQorKwl9CisrCisrCS1yZSAiXkNvcmUgd2FzIGdlbmVyYXRlZCBi eSBcW15cclxuXF0rXHJcbiIgeworKwkgICAgc2V0IHNhd19nZW5lcmF0ZWRfYnlfbGluZSB0cnVl CisrCSAgICBleHBfY29udGludWUKKysJfQorKworKwktcmUgIl5Qcm9ncmFtIHRlcm1pbmF0ZWQg d2l0aCBzaWduYWwgU0lHU0VHViwgU2VnbWVudGF0aW9uIGZhdWx0XFwuXHJcbiIgeworKwkgICAg c2V0IHNhd19wcm9nX3Rlcm1pbmF0ZWRfbGluZSB0cnVlCisrCSAgICBleHBfY29udGludWUKKysJ fQorKworKwktcmUgIl4kOjpnZGJfcHJvbXB0ICQiIHsKKysJICAgIGdkYl9hc3NlcnQgeyRzYXdf Z2VuZXJhdGVkX2J5X2xpbmUgXAorKwkJCSAgICAmJiAkc2F3X3Byb2dfdGVybWluYXRlZF9saW5l IFwKKysJCQkgICAgJiYgJHNhd19leHBlY3RlZF9saW5lIFwKKysJCQkgICAgJiYgISRzYXdfdW5r bm93bl93YXJuaW5nfSBcCisrCQkkZ2RiX3Rlc3RfbmFtZQorKwl9CisrCisrCS1yZSAiXlxbXlxy XG5cXSpcclxuIiB7CisrCSAgICBleHBfY29udGludWUKKysJfQorKyAgICB9CisrCisrICAgIHNl dCByZXMgW2NhdGNoIHsgcmV0dXJuIFtnZGJfdGVzdF9tdWx0aXBsZSAiY29yZS1maWxlICQ6OmNv cmVmaWxlIiBcCisrCQkJCSAiJHRlc3RuYW1lIiAkY29kZV0gfSBzdHJpbmddCisrCisrICAgIGlm IHskcmVzID09IDF9IHsKKysJZ2xvYmFsIGVycm9ySW5mbyBlcnJvckNvZGUKKysJcmV0dXJuIC1j b2RlIGVycm9yIC1lcnJvcmluZm8gJGVycm9ySW5mbyAtZXJyb3Jjb2RlICRlcnJvckNvZGUgJHN0 cmluZworKyAgICB9IGVsc2VpZiB7JHJlcyA9PSAyfSB7CisrCXJldHVybiAkc3RyaW5nCisrICAg IH0gZWxzZSB7CisrCSMgV2UgZXhwZWN0IFJFUyB0byBiZSAyIChUQ0xfUkVUVVJOKSBvciAxIChU Q0xfRVJST1IpLiAgSWYgd2UgZ2V0CisrCSMgaGVyZSB0aGVuIHNvbWVob3cgdGhlICdjYXRjaCcg YWJvdmUgZmluaXNoZWQgd2l0aG91dCBoaXR0aW5nCisrCSMgZWl0aGVyIG9mIHRob3NlIGNhc2Vz LCB3aGljaCBpcyAuLi4uIHdlaXJkLgorKwlwZXJyb3IgInVuZXhlcGN0ZWQgcmV0dXJuIHZhbHVl LCBjb2RlID0gJHJlcywgdmFsdWUgPSAkc3RyaW5nIgorKwlyZXR1cm4gLTEKKysgICAgfQorK30K KysKKysjIEFuZCBub3cgcmVzdGFydCBHREIsIGxvYWQgdGhlIGNvcmUtZmlsZSBhbmQgY2hlY2sg dGhhdCB0aGUgbGlicmFyeSBzaG93cyBhcworKyMgYmVpbmcgbWFwcGVkIGluLCBhbmQgdGhhdCB3 ZSBjYW4gc3RpbGwgcmVhZCB0aGUgbGlicmFyeV9wdHIgdmFsdWUgZnJvbQorKyMgbWVtb3J5Lgor K2NsZWFuX3Jlc3RhcnQgJGJpbmZpbGUKKysKKytsb2FkX2NvcmVfZmlsZSAibG9hZCBjb3JlIGZp bGUiCisrCisrc2V0IGxpYnJhcnlfYmFzZV9hZGRyZXNzIFtnZXRfaGV4YWRlY2ltYWxfdmFsdWVv ZiAibGlicmFyeV9iYXNlX2FkZHJlc3MiIFwKKysJCQkgICAgICAidW5rbm93biIgImdldCBsaWJy YXJ5X2Jhc2VfYWRkcmVzcyBpbiBjb3JlLWZpbGUiXQorK3NldCBwdHJfYWRkcmVzcyBbZm9ybWF0 IDB4JXggW2V4cHIgJGxpYnJhcnlfYmFzZV9hZGRyZXNzICsgJHB0cl9vZmZzZXRdXQorKworK3Nl dCBwdHJfdmFsdWUgW3JlYWRfcHRyX3ZhbHVlXQorK2dkYl9hc3NlcnQgeyAkcHRyX3ZhbHVlID09 ICRwdHJfZXhwZWN0ZWRfdmFsdWUgfSBcCisrICAgICJjaGVjayB2YWx1ZSBvZiBwb2ludGVyIHZh cmlhYmxlIGZyb20gY29yZS1maWxlIgorKworKyMgTm93IG1vdmUgdGhlIHNoYXJlZCBsaWJyYXJ5 IGZpbGUgYXdheSBhbmQgcmVzdGFydCBHREIuICBUaGlzIHRpbWUgd2hlbiB3ZQorKyMgbG9hZCB0 aGUgY29yZS1maWxlIHdlIHNob3VsZCBzZWUgYSB3YXJuaW5nIHRoYXQgR0RCIGhhcyBmYWlsZWQg dG8gbWFwIGluIHRoZQorKyMgbGlicmFyeSBmaWxlLiAgQW4gYXR0ZW1wdCB0byByZWFkIHRoZSB2 YXJpYWJsZSBmcm9tIHRoZSBsaWJyYXJ5IGZpbGUgc2hvdWxkCisrIyBmYWlsIC8gZ2l2ZSBhIHdh cm5pbmcuCisrc2V0IGxpYnJhcnlfYmFja3VwX2ZpbGVuYW1lIFtzdGFuZGFyZF9vdXRwdXRfZmls ZSAibGliZm9vLnNvLmJhY2t1cCJdCisrcmVtb3RlX2V4ZWMgYnVpbGQgIm12IFwiJGxpYnJhcnlf ZmlsZW5hbWVcIiBcIiRsaWJyYXJ5X2JhY2t1cF9maWxlbmFtZVwiIgorKworK2NsZWFuX3Jlc3Rh cnQgJGJpbmZpbGUKKysKKytsb2FkX2NvcmVfZmlsZSAibG9hZCBjb3JlZmlsZSB3aXRoIGxpYnJh cnkgZmlsZSBtaXNzaW5nIiBcCisrICAgICJ3YXJuaW5nOiBDYW4ndCBvcGVuIGZpbGUgW3N0cmlu Z190b19yZWdleHAgJGxpYnJhcnlfZmlsZW5hbWVdIGR1cmluZyBmaWxlLWJhY2tlZCBtYXBwaW5n IG5vdGUgcHJvY2Vzc2luZyIKKysKKytzZXQgcHRyX3ZhbHVlIFtyZWFkX3B0cl92YWx1ZV0KKytn ZGJfYXNzZXJ0IHsgJHB0cl92YWx1ZSBlcSAidW5hdmFpbGFibGUiIH0gXAorKyAgICAiY2hlY2sg dmFsdWUgb2YgcG9pbnRlciBpcyB1bmF2YWlsYWJsZSB3aXRoIGxpYnJhcnkgZmlsZSBtaXNzaW5n IgorKworKyMgTm93IHN5bWxpbmsgdGhlIC5idWlsZC1pZC94eC94eHguLi54eHggZmlsZW5hbWUg d2l0aGluIHRoZSBkZWJ1ZworKyMgZGlyZWN0b3J5IHRvIGxpYnJhcnkgd2UganVzdCBtb3ZlZCBh c2lkZS4gIFJlc3RhcnQgR0RCIGFuZCBzZXR1cCB0aGUKKysjIGRlYnVnLWZpbGUtZGlyZWN0b3J5 IGJlZm9yZSBsb2FkaW5nIHRoZSBjb3JlIGZpbGUuCisrIworKyMgR0RCIHNob3VsZCBsb29rdXAg dGhlIGZpbGUgdG8gbWFwIHZpYSB0aGUgYnVpbGQtaWQgbGluayBpbiB0aGUKKysjIC5idWlsZC1p ZC8gZGlyZWN0b3J5LgorK3NldCBkZWJ1Z2RpciBbc3RhbmRhcmRfb3V0cHV0X2ZpbGUgImRlYnVn ZGlyIl0KKytzZXQgYnVpbGRfaWRfZmlsZW5hbWUgXAorKyAgICAkZGVidWdkaXIvW2J1aWxkX2lk X2RlYnVnX2ZpbGVuYW1lX2dldCAkbGlicmFyeV9iYWNrdXBfZmlsZW5hbWUgIiJdCisrCisrcmVt b3RlX2V4ZWMgYnVpbGQgIm1rZGlyIC1wIFtmaWxlIGRpcm5hbWUgJGJ1aWxkX2lkX2ZpbGVuYW1l XSIKKytyZW1vdGVfZXhlYyBidWlsZCAibG4gLXNmICRsaWJyYXJ5X2JhY2t1cF9maWxlbmFtZSAk YnVpbGRfaWRfZmlsZW5hbWUiCisrCisrY2xlYW5fcmVzdGFydCAkYmluZmlsZQorKworK2dkYl90 ZXN0X25vX291dHB1dCAic2V0IGRlYnVnLWZpbGUtZGlyZWN0b3J5ICRkZWJ1Z2RpciIgXAorKyAg ICAic2V0IGRlYnVnLWZpbGUtZGlyZWN0b3J5IgorKworK2xvYWRfY29yZV9maWxlICJsb2FkIGNv cmVmaWxlLCBsb29rdXAgaW4gZGVidWctZmlsZS1kaXJlY3RvcnkiCisrCisrc2V0IHB0cl92YWx1 ZSBbcmVhZF9wdHJfdmFsdWVdCisrZ2RiX2Fzc2VydCB7ICRwdHJfdmFsdWUgPT0gJHB0cl9leHBl Y3RlZF92YWx1ZSB9IFwKKysgICAgImNoZWNrIHZhbHVlIG9mIHBvaW50ZXIgdmFyaWFibGUgZnJv bSBjb3JlLWZpbGUsIGxvb2t1cCBpbiBkZWJ1Zy1maWxlLWRpcmVjdG9yeSIKKysKKysjIEJ1aWxk IGEgbmV3IHZlcnNpb24gb2YgdGhlIHNoYXJlZCBsaWJyYXJ5LCBrZWVwIHRoZSBsaWJyYXJ5IHRo ZSBzYW1lIHNpemUsCisrIyBidXQgY2hhbmdlIHRoZSBjb250ZW50cyBzbyB0aGUgYnVpbGQtaWQg Y2hhbmdlcy4gIFRoZW4gcmVzdGFydCBHREIgYW5kIGxvYWQKKysjIHRoZSBjb3JlLWZpbGUgYWdh aW4uICBHREIgc2hvdWxkIHNwb3QgdGhhdCB0aGUgYnVpbGQtaWQgZm9yIHRoZSBzaGFyZWQKKysj IGxpYnJhcnkgaXMgbm90IGFzIGV4cGVjdGVkLCBhbmQgc2hvdWxkIHJlZnVzZSB0byBtYXAgaW4g dGhlIHNoYXJlZCBsaWJyYXJ5LgorK2lmIHtbYnVpbGRfZXhlY3V0YWJsZSAiYnVpbGQgc2Vjb25k IHZlcnNpb24gb2Ygc2hhcmVkIGxpYnJhcnkiIFwKKysJICRsaWJyYXJ5X2ZpbGVuYW1lICRzcmNm aWxlMiBcCisrCSB7IGRlYnVnIHNobGliIGJ1aWxkLWlkIFwKKysJICAgICAgIGFkZGl0aW9uYWxf ZmxhZ3M9LURQT0lOVEVSX1ZBTFVFPTB4MTEyMjMzNDQgfV0gIT0gMH0geworKyAgICByZXR1cm4K Kyt9CisrCisrY2xlYW5fcmVzdGFydCAkYmluZmlsZQorKworK2xvYWRfY29yZV9maWxlICJsb2Fk IGNvcmVmaWxlIHdpdGggd3JvbmcgbGlicmFyeSBpbiBwbGFjZSIgXAorKyAgICAid2FybmluZzog RmlsZSBbc3RyaW5nX3RvX3JlZ2V4cCAkbGlicmFyeV9maWxlbmFtZV0gZG9lc24ndCBtYXRjaCBi dWlsZC1pZCBmcm9tIGNvcmUtZmlsZSBkdXJpbmcgZmlsZS1iYWNrZWQgbWFwcGluZyBwcm9jZXNz aW5nIgorKworK3NldCBwdHJfdmFsdWUgW3JlYWRfcHRyX3ZhbHVlXQorK2dkYl9hc3NlcnQgeyAk cHRyX3ZhbHVlIGVxICJ1bmF2YWlsYWJsZSIgfSBcCisrICAgICJjaGVjayB2YWx1ZSBvZiBwb2lu dGVyIGlzIHVuYXZhaWxhYmxlIHdpdGggd3JvbmcgbGlicmFyeSBpbiBwbGFjZSIKKysKKysjIFNl dHVwIGEgZGVidWdpbmZvZCBzZXJ2ZXIgd2hpY2ggY2FuIHNlcnZlIHRoZSBvcmlnaW5hbCBzaGFy ZWQgbGlicmFyeSBmaWxlLgorKyMgVGhlbiByZXN0YXJ0IEdEQiBhbmQgbG9hZCB0aGUgY29yZS1m aWxlLiAgR0RCIHNob3VsZCBkb3dubG9hZCB0aGUgb3JpZ2luYWwKKysjIHNoYXJlZCBsaWJyYXJ5 IGZyb20gZGVidWdpbmZvZCBhbmQgdXNlIHRoYXQgdG8gcHJvdmlkZSB0aGUgZmlsZSBiYWNrZWQK KysjIG1hcHBpbmcuCisraWYgeyFbYWxsb3dfZGVidWdpbmZvZF90ZXN0c119IHsKKysgICAgdW50 ZXN0ZWQgInNraXBwaWcgZGVidWdpbmZvZCBwYXJ0cyBvZiB0aGlzIHRlc3QiCisrICAgIHJldHVy bgorK30KKysKKytzZXQgc2VydmVyX2RpciBbc3RhbmRhcmRfb3V0cHV0X2ZpbGUgImRlYnVnaW5m b2Quc2VydmVyIl0KKytmaWxlIG1rZGlyICRzZXJ2ZXJfZGlyCisrZmlsZSByZW5hbWUgLWZvcmNl ICRsaWJyYXJ5X2JhY2t1cF9maWxlbmFtZSAkc2VydmVyX2RpcgorKworK3ByZXBhcmVfZm9yX2Rl YnVnaW5mb2QgY2FjaGUgZGIKKysKKytzZXQgdXJsIFtzdGFydF9kZWJ1Z2luZm9kICRkYiAkc2Vy dmVyX2Rpcl0KKytpZiB7ICR1cmwgZXEgIiIgfSB7CisrICAgIHVucmVzb2x2ZWQgImZhaWxlZCB0 byBzdGFydCBkZWJ1Z2luZm9kIHNlcnZlciIKKysgICAgcmV0dXJuCisrfQorKworK3dpdGhfZGVi dWdpbmZvZF9lbnYgJGNhY2hlIHsKKysgICAgc2V0ZW52IERFQlVHSU5GT0RfVVJMUyAkdXJsCisr CisrICAgIGNsZWFuX3Jlc3RhcnQKKysgICAgZ2RiX3Rlc3Rfbm9fb3V0cHV0ICJzZXQgZGVidWdp bmZvZCBlbmFibGVkIG9uIiBcCisrCSJlbmFibGVkIGRlYnVnaW5mb2QgZm9yIGluaXRpYWwgdGVz dCIKKysgICAgZ2RiX2xvYWQgJGJpbmZpbGUKKysKKysgICAgbG9hZF9jb3JlX2ZpbGUgImxvYWQg Y29yZWZpbGUsIGRvd25sb2FkIGxpYnJhcnkgZnJvbSBkZWJ1Z2luZm9kIiBcCisrCSJEb3dubG9h ZGluZ1xbXlxyXG5cXSogZmlsZSBbc3RyaW5nX3RvX3JlZ2V4cCAkbGlicmFyeV9maWxlbmFtZV1c XC5cXC5cXC4iCisrCisrICAgIHNldCBwdHJfdmFsdWUgW3JlYWRfcHRyX3ZhbHVlXQorKyAgICBn ZGJfYXNzZXJ0IHsgJHB0cl92YWx1ZSA9PSAkcHRyX2V4cGVjdGVkX3ZhbHVlIH0gXAorKwkiY2hl Y2sgdmFsdWUgb2YgcG9pbnRlciB2YXJpYWJsZSBhZnRlciBkb3dubG9hZGluZyBsaWJyYXJ5IGZp bGUiCisrfQorKworK3N0b3BfZGVidWdpbmZvZAorZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUv Z2RiLmRlYnVnaW5mb2Qvc29saWItd2l0aC1zb25hbWUtMS5jIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIu ZGVidWdpbmZvZC9zb2xpYi13aXRoLXNvbmFtZS0xLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0Cist LS0gL2Rldi9udWxsCisrKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5kZWJ1Z2luZm9kL3NvbGliLXdp dGgtc29uYW1lLTEuYworQEAgLTAsMCArMSwzOSBAQAorKy8qIENvcHlyaWdodCAyMDI0IEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNo ZWQgYnkKKysgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAz IG9mIHRoZSBMaWNlbnNlLCBvcgorKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp b24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrICAgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUg cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKyAgIGFs b25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9s aWNlbnNlcy8+LiAgKi8KKysKKysjaW5jbHVkZSA8c3RkbGliLmg+CisrCisrLyogSXQgaXMgaW1w b3J0YW50IHRoYXQgdGhlc2UgdHdvIHZhcmlhYmxlcyBoYXZlIG5hbWVzIG9mIHRoZSBzYW1lIGxl bmd0aAorKyAgIHNvIHRoYXQgdGhlIGRlYnVnIGluZm9ybWF0aW9uIGluIHRoZSB0d28gbGlicmFy eSB2ZXJzaW9ucyBpcyBsYWlkIG91dAorKyAgIHRoZSBzYW1lLiAgSWYgdGhleSBkaWZmZXIgdGhl biB0aGUgLmR5bmFtaWMgc2VjdGlvbiBtaWdodCBtb3ZlLCB3aGljaAorKyAgIHdpbGwgdHJpZ2dl ciBhIGRpZmZlcmVudCBjaGVjayB3aXRoaW4gR0RCIHRoYW4gdGhlIG9uZSB3ZSBhY3R1YWxseSB3 YW50CisrICAgdG8gY2hlY2suICAqLworKworKyNpZiBMSUJfVkVSU0lPTiA9PSAxCisrdm9sYXRp bGUgaW50ICpsaWJyYXJ5XzFfdmFyID0gKHZvbGF0aWxlIGludCAqKSAweDEyMzQ1Njc4OworKyNl bGlmIExJQl9WRVJTSU9OID09IDIKKyt2b2xhdGlsZSBpbnQgKmxpYnJhcnlfMl92YXIgPSAodm9s YXRpbGUgaW50ICopIDB4MTEyMjMzNDQ7CisrI2Vsc2UKKysjIGVycm9yIFVua25vd24gbGlicmFy eSB2ZXJzaW9uCisrI2VuZGlmCisrCisraW50CisrZm9vICh2b2lkKQorK3sKKysgIC8qIFRoaXMg c2hvdWxkIHRyaWdnZXIgYSBjb3JlIGR1bXAuICAqLworKyAgYWJvcnQgKCk7CisrCisrICByZXR1 cm4gMDsKKyt9CitkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuZGVidWdpbmZvZC9zb2xp Yi13aXRoLXNvbmFtZS0yLmMgYi9nZGIvdGVzdHN1aXRlL2dkYi5kZWJ1Z2luZm9kL3NvbGliLXdp dGgtc29uYW1lLTIuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKKy0tLSAvZGV2L251bGwKKysrKyBi L2dkYi90ZXN0c3VpdGUvZ2RiLmRlYnVnaW5mb2Qvc29saWItd2l0aC1zb25hbWUtMi5jCitAQCAt MCwwICsxLDQxIEBACisrLyogQ29weXJpZ2h0IDIwMjQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u LCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyAgIHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9y CisrICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHBy b2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK KysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRS4gIFNlZSB0aGUKKysgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrICAgYWxvbmcgd2l0aCB0aGlzIHByb2dy YW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworKwor KyNpbmNsdWRlIDxhc3NlcnQuaD4KKysjaW5jbHVkZSA8ZGxmY24uaD4KKysjaW5jbHVkZSA8c3Rk ZGVmLmg+CisrCisrLyogVGhpcyBpcyBpbiB0aGUgc2hhcmVkIGxpYnJhcnkuICAqLworK2V4dGVy biBpbnQgZm9vICh2b2lkKTsKKysKKysvKiBUaGlzIGlzIHVwZGF0ZWQgYnkgdGhlIC5leHAgZmls ZS4gICovCisrY2hhciAqbGlibmFtZSA9ICJsaWJmb29fMi5zbyI7CisrCisraW50CisrbWFpbiAo dm9pZCkKKyt7CisrICB2b2lkICpoYW5kbGU7CisrICBpbnQgcmVzLCB0bXA7CisrCisrICBoYW5k bGUgPSBkbG9wZW4gKGxpYm5hbWUsIFJUTERfTEFaWSk7CisrICBhc3NlcnQgKGhhbmRsZSAhPSBO VUxMKTsKKysKKysgIHJlcyA9IGZvbyAoKTsKKysKKysgIHRtcCA9IGRsY2xvc2UgKGhhbmRsZSk7 CisrICBhc3NlcnQgKHRtcCA9PSAwKTsKKysKKysgIHJldHVybiByZXM7CisrfQorZGlmZiAtLWdp dCBhL2dkYi90ZXN0c3VpdGUvZ2RiLmRlYnVnaW5mb2Qvc29saWItd2l0aC1zb25hbWUuZXhwIGIv Z2RiL3Rlc3RzdWl0ZS9nZGIuZGVidWdpbmZvZC9zb2xpYi13aXRoLXNvbmFtZS5leHAKK25ldyBm aWxlIG1vZGUgMTAwNjQ0CistLS0gL2Rldi9udWxsCisrKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5k ZWJ1Z2luZm9kL3NvbGliLXdpdGgtc29uYW1lLmV4cAorQEAgLTAsMCArMSwyOTAgQEAKKysjIENv cHlyaWdodCAyMDI0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyMKKysjIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5CisrIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg ZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKysjIChhdCB5b3VyIG9wdGlvbikg YW55IGxhdGVyIHZlcnNpb24uCisrIworKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGlu IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrIyBidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyMgTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKyMg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysjCisrIyBZb3Ug c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZQorKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3 dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworKworKyMgVGhpcyB0ZXN0IGV4ZXJjaXNlcyBHREIn cyBhYmlsaXR5IHRvIHZhbGlkYXRlIGJ1aWxkLWlkcyB3aGVuIGxvYWRpbmcKKysjIHNoYXJlZCBs aWJyYXJpZXMgZm9yIGEgY29yZSBmaWxlLgorKyMKKysjIFRoZSB0ZXN0IGNyZWF0ZXMgdHdvICJ2 ZXJzaW9ucyIgb2YgYSBzaGFyZWQgbGlicmFyeSwgc2V0cyB1cCBhCisrIyBzeW1saW5rIHRvIHBv aW50IHRvIG9uZSB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCBhbmQgY3JlYXRlcyBhIGNvcmUgZmls ZS4KKysjCisrIyBXZSB0aGVuIHRyeSByZS1sb2FkaW5nIHRoZSBjb3JlIGZpbGUgYW5kIGV4ZWN1 dGFibGUgYW5kIGNoZWNrIHRoYXQKKysjIEdEQiBpcyBhYmxlIHRvIGNvcnJlY3RseSBsb2FkIHRo ZSBzaGFyZWQgbGlicmFyeS4gIFRvIGNvbmZ1c2UgdGhpbmdzCisrIyB3ZSByZXRhcmdldCB0aGUg bGlicmFyeSBzeW1saW5rIGF0IHRoZSBvdGhlciB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LgorKyMK KysjIEFmdGVyIHRoYXQgd2UgcmVwZWF0IHRoZSB0ZXN0LCBidXQgdGhpcyB0aW1lIGRlbGV0aW5n IHRoZSBzeW1saW5rCisrIyBjb21wbGV0ZWx5LgorKyMKKysjIFRoZW4gd2UgcmVtb3ZlIHRoZSB2 ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5IGNvbXBsZXRlbHksIGF0IHRoaXMgcG9pbnQKKysjIHdlIGRv IGV4cGVjdCBHREIgdG8gZ2l2ZSBhIHdhcm5pbmcgYWJvdXQgYmVpbmcgdW5hYmxlIHRvIGxvYWQg dGhlIGxpYnJhcnkuCisrIworKyMgQW5kIGZpbmFsbHksIHdlIHNldHVwIGRlYnVnaW5mb2QgYW5k IGhhdmUgaXQgc2VydmUgdGhlIG1pc3NpbmcKKysjIGxpYnJhcnkgZmlsZSwgR0RCIHNob3VsZCBj b3JyZWN0bHkgZG93bmxvYWQgdGhlIGxpYnJhcnkgZmlsZS4KKysjCisrIyBEZXNwaXRlIHRoaXMg dGVzdCBsaXZpbmcgaW4gdGhlIGdkYi5kZWJ1Z2luZm9kLyBkaXJlY3RvcnksIG9ubHkgdGhlIGxh c3QKKysjIHBhcnQgb2YgdGhpcyB0ZXN0IGFjdHVhbGx5IHVzZXMgZGVidWdpbmZvZCwgZXZlcnl0 aGluZyB1cCB0byB0aGF0IHBvaW50IGlzCisrIyBwcmV0dHkgZ2VuZXJpYy4KKysKKytsb2FkX2xp YiBkZWJ1Z2luZm9kLXN1cHBvcnQuZXhwCisrCisrcmVxdWlyZSBhbGxvd19zaGxpYl90ZXN0cwor K3JlcXVpcmUge2lzdGFyZ2V0ICIqLWxpbnV4KiJ9CisrcmVxdWlyZSB7IWlzX3JlbW90ZSBob3N0 fQorK3JlcXVpcmUgeyF1c2luZ19maXNzaW9ufQorKworK3N0YW5kYXJkX3Rlc3RmaWxlIC0xLmMg LTIuYworKworKyMgQnVpbGQgdHdvIHNpbWlsYXIsIGJ1dCBzbGlnaHRseSBkaWZmZXJlbnQgdmVy c2lvbnMgb2YgdGhlIHNoYXJlZAorKyMgbGlicmFyeS4gIEJvdGggbGlicmFyaWVzIGhhdmUgRFRf U09OQU1FIHNldCB0byB0aGUgZ2VuZXJpYworKyMgbGliZm9vLnNvLCB3ZSdsbCBjcmVhdGUgYSBz eW1saW5rIHdpdGggdGhhdCBuYW1lIGxhdGVyLgorK3NldCBsaWJyYXJ5XzFfZmlsZW5hbWUgW3N0 YW5kYXJkX291dHB1dF9maWxlICJsaWJmb29fMS5zbyJdCisrc2V0IGxpYnJhcnlfMl9maWxlbmFt ZSBbc3RhbmRhcmRfb3V0cHV0X2ZpbGUgImxpYmZvb18yLnNvIl0KKysKKysjIFRoZSBnZW5lcmlj IG5hbWUgZm9yIHRoZSBsaWJyYXJ5LgorK3NldCBsaWJyYXJ5X2ZpbGVuYW1lIFtzdGFuZGFyZF9v dXRwdXRfZmlsZSAibGliZm9vLnNvIl0KKysKKysjIFdoZW4gY29tcGlsaW5nIGEgc2hhcmVkIGxp YnJhcnkgdGhlIC1XbCwtc29uYW1lLE5BTUUgb3B0aW9uIGlzCisrIyBhdXRvbWF0aWNhbGx5IGFk ZGVkIGJhc2VkIG9uIHRoZSBmaW5hbCBuYW1lIG9mIHRoZSBsaWJyYXJ5LiAgV2Ugd2FudAorKyMg dG8gY29tcGlsZSBsaWJmb29fMS5zbywgYnV0IHNldCB0aGUgc29uYW1lIHRvIGxpYmZvby5zby4g IFRvIGFjaGlldmUKKysjIHRoaXMgd2UgZmlyc3QgY29tcGlsZSBpbnRvIGxpYmZvby5zbywgYW5k IHRoZW4gcmVuYW1lIHRoZSBsaWJyYXJ5IHRvCisrIyBsaWJmb29fMS5zby4KKytpZiB7W2J1aWxk X2V4ZWN1dGFibGUgImJ1aWxkIGxpYmZvb18xLnNvIiAkbGlicmFyeV9maWxlbmFtZSBcCisrCSAk c3JjZmlsZSBcCisrCSAgICAgIHsgZGVidWcgc2hsaWIgYnVpbGQtaWQgXAorKwkJICAgIGFkZGl0 aW9uYWxfZmxhZ3M9LURMSUJfVkVSU0lPTj0xIH1dID09IC0xfSB7CisrICAgIHJldHVybgorK30K KytyZW1vdGVfZXhlYyBidWlsZCAibXYgJHtsaWJyYXJ5X2ZpbGVuYW1lfSAke2xpYnJhcnlfMV9m aWxlbmFtZX0iCisrCisrIyBTZWUgdGhlIGNvbW1lbnQgYWJvdmUsIGJ1dCB0aGlzIHRpbWUgd2Ug cmVuYW1lIHRvIGxpYmZvb18yLnNvLgorK2lmIHtbYnVpbGRfZXhlY3V0YWJsZSAiYnVpbGQgbGli Zm9vXzIuc28iICRsaWJyYXJ5X2ZpbGVuYW1lIFwKKysJICRzcmNmaWxlIFwKKysJICAgICAgeyBk ZWJ1ZyBzaGxpYiBidWlsZC1pZCBcCisrCQkgICAgYWRkaXRpb25hbF9mbGFncz0tRExJQl9WRVJT SU9OPTIgfV0gPT0gLTF9IHsKKysgICAgcmV0dXJuCisrfQorK3JlbW90ZV9leGVjIGJ1aWxkICJt diAke2xpYnJhcnlfZmlsZW5hbWV9ICR7bGlicmFyeV8yX2ZpbGVuYW1lfSIKKysKKysjIENyZWF0 ZSBsaWJmb28uc28gc3ltbGluayB0byB0aGUgbGliZm9vXzEuc28gbGlicmFyeS4gIElmIHRoaXMK KysjIHN5bWxpbmsgY3JlYXRpb24gZmFpbHMgdGhlbiB3ZSBhc3N1bWUgd2UgY2FuJ3QgY3JlYXRl IHN5bWxpbmtzIG9uCisrIyB0aGlzIGhvc3QuICBJZiB0aGlzIHN1Y2NlZWRzIHRoZW4gbGF0ZXIg c3ltbGluayBjcmVhdGlvbiBpcyByZXF1aXJlZAorKyMgdG8gc3VjY2VlZCwgYW5kIHdpbGwgdHJp Z2dlciBhbiBGQUlMIGlmIGl0IGRvZXNuJ3QuCisrc2V0IHN0YXR1cyBcCisrICAgIFtyZW1vdGVf ZXhlYyBidWlsZCBcCisrCSAibG4gLXNmICR7bGlicmFyeV8xX2ZpbGVuYW1lfSAke2xpYnJhcnlf ZmlsZW5hbWV9Il0KKytpZiB7W2xpbmRleCAkc3RhdHVzIDBdICE9IDB9IHsKKysgICAgdW5zdXBw b3J0ZWQgImhvc3QgZG9lcyBub3Qgc3VwcG9ydCBzeW1ib2xpYyBsaW5rcyIKKysgICAgcmV0dXJu CisrfQorKworKyMgQnVpbGQgdGhlIGV4ZWN1dGFibGUuICBUaGlzIGxpbmtzIGFnYWluc3QgbGli Zm9vLnNvLCB3aGljaCBpcworKyMgcG9pbmluZyBhdCBsaWJmb29fMS5zby4gIEp1c3QgdG8gY29u ZnVzZSB0aGluZ3MgZXZlbiBtb3JlLCB0aGlzCisrIyBleGVjdXRhYmxlIHVzZXMgZGxvcGVuIHRv IGxvYWQgbGliZm9vXzIuc28uICBXZWlyZCEKKytpZiB7IFtidWlsZF9leGVjdXRhYmxlICJidWls ZCBleGVjdXRhYmxlIiAke2JpbmZpbGV9ICR7c3JjZmlsZTJ9IFwKKysJICBbbGlzdCBkZWJ1ZyBz aGxpYj0ke2xpYnJhcnlfZmlsZW5hbWV9IHNobGliX2xvYWRdXSA9PSAtMSB9IHsKKysgICAgcmV0 dXJuCisrfQorKworKyMgSWYgdGhlIGJvYXJkIGZpbGUgaXMgYXV0b21hdGljYWxseSBzcGxpdHRp bmcgdGhlIGRlYnVnIGluZm9ybWF0aW9uCisrIyBpbnRvIGEgc2VwYXJhdGUgZmlsZSAoZS5nLiB0 aGUgY2Mtd2l0aC1nbnUtZGVidWdsaW5rLmV4cCBib2FyZCkgdGhlbgorKyMgdGhpcyB0ZXN0IGlz bid0IGdvaW5nIHRvIHdvcmsuCisrY2xlYW5fcmVzdGFydAorK2dkYl9maWxlX2NtZCAkYmluZmls ZQorK2lmIHskZ2RiX2ZpbGVfY21kX2RlYnVnX2luZm8gbmUgImRlYnVnIn0geworKyAgICB1bnN1 cHBvcnRlZCAiZmFpbGVkIHRvIGZpbmQgZGVidWcgaW5mb3JtYXRpb24iCisrICAgIHJldHVybgor K30KKytpZiB7W3JlZ2V4cCAiJHt0ZXN0ZmlsZX0uZGVidWciICRnZGJfZmlsZV9jbWRfbXNnXX0g eworKyAgICB1bnN1cHBvcnRlZCAiZGVidWcgaW5mb3JtYXRpb24gaGFzIGJlZW4gc3BsaXQgdG8g YSBzZXBhcmF0ZSBmaWxlIgorKyAgICByZXR1cm4KKyt9CisrCisrIyBSdW4gQklORklMRSB3aGlj aCB3aWxsIGdlbmVyYXRlIGEgY29yZWZpbGUuCisrc2V0IGNvcmVmaWxlIFtjb3JlX2ZpbmQgJGJp bmZpbGVdCisraWYgeyRjb3JlZmlsZSBlcSAiIn0geworKyAgICB1bnRlc3RlZCAiY291bGQgbm90 IGdlbmVyYXRlIGNvcmUgZmlsZSIKKysgICAgcmV0dXJuCisrfQorKworKyMgSGVscGVyIHByb2Mg dG8gbG9hZCBnbG9iYWwgQklORklMRSBhbmQgdGhlbiBsb2FkIGdsb2JhbCBDT1JFRklMRS4KKysj CisrIyBJZiBFWFBFQ1RfV0FSTklORyBpcyB0cnVlIHRoZW4gd2UgcmVxdWlyZSBhIHdhcm5pbmcg YWJvdXQgYmVpbmcKKysjIHVuYWJsZSB0byBsb2FkIHRoZSBzaGFyZWQgbGlicmFyeSBzeW1ib2xz LCBvdGhlcndpc2UsIEVYUEVDVF9XQVJOSU5HCisrIyBpcyBmYWxzZSBhbmQgd2UgcmVxdWlyZSBu byB3YXJuaW5nLgorKyMKKysjIElmIEVYUEVDVF9ET1dOTE9BRCBpcyB0cnVlIHRoZW4gd2UgcmVx dWlyZSBhIGxpbmUgaW5kaWNhdGluZyB0aGF0CisrIyB0aGUgc2hhcmVkIGxpYnJhcnkgaXMgYmVp bmcgZG93bmxvYWRlZCBmcm9tIGRlYnVnaW5mb2QsIG90aGVyd2lzZQorKyMgdGhlIHNoYXJlZCBs aWJyYXJ5IHNob3VsZCBub3QgYmUgZG93bmxvYWRlZC4KKysjCisrIyBJZiBERUJVR0RJUiBpcyBu b3QgdGhlIGVtcHR5IHN0cmluZyB0aGVuICdkZWJ1Zy1maWxlLWRpcmVjdG9yeScgaXMKKysjIHNl dCB0byB0aGUgdmFsdWUgb2YgREVCVUdESVIuCisrcHJvYyBsb2FkX2V4ZWNfYW5kX2NvcmVfZmls ZSB7IGV4cGVjdF93YXJuaW5nIGV4cGVjdF9kb3dubG9hZCB0ZXN0bmFtZSBcCisrCQkJCSAgIHtk ZWJ1Z2RpciAiIn0gfSB7CisrICAgIHdpdGhfdGVzdF9wcmVmaXggJHRlc3RuYW1lIHsKKysJY2xl YW5fcmVzdGFydCAkOjpiaW5maWxlCisrCisrCWlmIHsgJGRlYnVnZGlyIG5lICIiIH0geworKwkg ICAgZ2RiX3Rlc3Rfbm9fb3V0cHV0ICJzZXQgZGVidWctZmlsZS1kaXJlY3RvcnkgJGRlYnVnZGly IiBcCisrCQkic2V0IGRlYnVnIGRpcmVjdG9yeSIKKysJfQorKworKwlzZXQgc2F3X3dhcm5pbmcg ZmFsc2UKKysJc2V0IHNhd19kb3dubG9hZCBmYWxzZQorKwlzZXQgc2F3X2dlbmVyYXRlZCBmYWxz ZQorKwlzZXQgc2F3X3Rlcm1pbmF0ZWQgZmFsc2UKKysKKysJZ2RiX3Rlc3RfbXVsdGlwbGUgImNv cmUtZmlsZSAkOjpjb3JlZmlsZSIgImxvYWQgY29yZSBmaWxlIiB7CisrCSAgICAtcmUgIl5Db3Jl IHdhcyBnZW5lcmF0ZWQgYnkgXFteXHJcblxdK1xyXG4iIHsKKysJCXNldCBzYXdfZ2VuZXJhdGVk IHRydWUKKysJCWV4cF9jb250aW51ZQorKwkgICAgfQorKwkgICAgLXJlICJeUHJvZ3JhbSB0ZXJt aW5hdGVkIHdpdGggc2lnbmFsIFxbXlxyXG5cXStcclxuIiB7CisrCQlzZXQgc2F3X3Rlcm1pbmF0 ZWQgdHJ1ZQorKwkJZXhwX2NvbnRpbnVlCisrCSAgICB9CisrCSAgICAtcmUgIl53YXJuaW5nOiBD YW4ndCBvcGVuIGZpbGUgXFteXHJcblxdKyBkdXJpbmcgZmlsZS1iYWNrZWQgbWFwcGluZyBub3Rl IHByb2Nlc3NpbmdcclxuIiB7CisrCQkjIElnbm9yZSB3YXJuaW5ncyBmcm9tIHRoZSBmaWxlIGJh Y2tlZCBtYXBwaW5nIHBoYXNlLgorKwkJZXhwX2NvbnRpbnVlCisrCSAgICB9CisrCSAgICAtcmUg Il53YXJuaW5nOiBDb3VsZCBub3QgbG9hZCBzaGFyZWQgbGlicmFyeSBzeW1ib2xzIGZvciBcW15c clxuXF0rL2xpYmZvb1xcLnNvXFwuXHJcbiIgeworKwkJc2V0IHNhd193YXJuaW5nIHRydWUKKysJ CWV4cF9jb250aW51ZQorKwkgICAgfQorKwkgICAgLXJlICJeRG93bmxvYWRpbmcgZmlsZSBcW15c clxuXF0rL2xpYmZvb18xXFwuc29cXC5cXC5cXC5cclxuIiB7CisrCQlzZXQgc2F3X2Rvd25sb2Fk IHRydWUKKysJCWV4cF9jb250aW51ZQorKwkgICAgfQorKwkgICAgLXJlICJeJDo6Z2RiX3Byb21w dCAkIiB7CisrCQlnZGJfYXNzZXJ0IHsgJHNhd19nZW5lcmF0ZWQgJiYgJHNhd190ZXJtaW5hdGVk IFwKKysJCQkJICYmICRzYXdfd2FybmluZyA9PSAkZXhwZWN0X3dhcm5pbmcgXAorKwkJCQkgJiYg JHNhd19kb3dubG9hZCA9PSAkZXhwZWN0X2Rvd25sb2FkIH0gXAorKwkJICAgICRnZGJfdGVzdF9u YW1lCisrCSAgICB9CisrCSAgICAtcmUgIl5cW15cclxuXF0qXHJcbiIgeworKwkJZXhwX2NvbnRp bnVlCisrCSAgICB9CisrCX0KKysKKysJIyBJZiB3ZSBkb24ndCBleHBlY3QgYSB3YXJuaW5nIHRo ZW4gZGVidWcgc3ltYm9scyBmcm9tIHRoZQorKwkjIHNoYXJlZCBsaWJyYXJ5IHNob3VsZCBiZSBh dmFpbGFibGUuICBDb25maXJtIHdlIGNhbiByZWFkIGEKKysJIyB2YXJpYWJsZSBmcm9tIHRoZSBz aGFyZWQgbGlicmFyeS4gIElmIHdlIGRvIGV4cGVjdCBhIHdhcm5pbmcKKysJIyB0aGVuIHRoZSBz aGFyZWQgbGlicmFyeSBkZWJ1ZyBzeW1ib2xzIGhhdmUgbm90IGxvYWRlZCwgYW5kCisrCSMgdGhl IGxpYnJhcnkgdmFyaWFibGUgc2hvdWxkIG5vdCBiZSBhdmFpbGFibGUuCisrCWlmIHsgISRleHBl Y3Rfd2FybmluZyB9IHsKKysJICAgIGdkYl90ZXN0ICJwcmludC94IGxpYnJhcnlfMV92YXIiICIg PSAweDEyMzQ1Njc4IiBcCisrCQkiY2hlY2sgbGlicmFyeV8xX3ZhciBjYW4gYmUgcmVhZCIKKysJ fSBlbHNlIHsKKysJICAgIGdkYl90ZXN0ICJwcmludC94IGxpYnJhcnlfMV92YXIiIFwKKysJCSJe Tm8gc3ltYm9sIFwibGlicmFyeV8xX3ZhclwiIGluIGN1cnJlbnQgY29udGV4dFxcLiIgXAorKwkJ ImNoZWNrIGxpYnJhcnlfMV92YXIgY2Fubm90IGJlIHJlYWQiCisrCX0KKysgICAgfQorK30KKysK KysjIEluaXRpYWwgdGVzdCwganVzdCBsb2FkIHRoZSBleGVjdXRhYmxlIGFuZCBjb3JlIGZpbGUu ICBBdCB0aGlzIHBvaW50CisrIyBldmVyeXRoaW5nIHNob3VsZCBsb2FkIGZpbmUgYXMgZXZlcnl0 aGluZyBpcyB3aGVyZSB3ZSBleHBlY3QgdG8gZmluZAorKyMgaXQuCisrbG9hZF9leGVjX2FuZF9j b3JlX2ZpbGUgZmFsc2UgZmFsc2UgXAorKyAgICAibG9hZCBjb3JlIGZpbGUsIGFsbCBsaWJyYXJp ZXMgYXMgZXhwZWN0ZWQiCisrCisrIyBVcGRhdGUgbGliZm9vLnNvIHN5bWxpbmsgdG8gcG9pbnQg YXQgdGhlIHNlY29uZCBsaWJyYXJ5IHRoZW4gcmVsb2FkCisrIyB0aGUgY29yZSBmaWxlLiAgR0RC IHNob3VsZCBzcG90IHRoYXQgdGhlIHN5bWxpbmsgcG9pbnRzIHRvIHRoZSB3cm9uZworKyMgZmls ZSwgYnV0IHNob3VsZCBiZSBhYmxlIHRvIGZpZ3VyZSBvdXQgdGhlIGNvcnJlY3QgZmlsZSB0byBs b2FkIGFzCisrIyB0aGUgcmlnaHQgZmlsZSB3aWxsIGJlIGluIHRoZSBtYXBwZWQgZmlsZSBsaXN0 LgorK3NldCBzdGF0dXMgW3JlbW90ZV9leGVjIGJ1aWxkIFwKKysJCSJsbiAtc2YgJHtsaWJyYXJ5 XzJfZmlsZW5hbWV9ICR7bGlicmFyeV9maWxlbmFtZX0iXQorK2dkYl9hc3NlcnQgeyBbbGluZGV4 ICRzdGF0dXMgMF0gPT0gMCB9IFwKKysgICAgInVwZGF0ZSBsaWJyYXJ5IHN5bWxpbmsgdG8gcG9p bnQgdG8gdGhlIHdyb25nIGZpbGUiCisrCisrbG9hZF9leGVjX2FuZF9jb3JlX2ZpbGUgZmFsc2Ug ZmFsc2UgXAorKyAgICAibG9hZCBjb3JlIGZpbGUsIHN5bWxpbmsgcG9pbnRzIHRvIHdyb25nIGZp bGUiCisrCisrIyBSZW1vdmUgbGliZm9vLnNvIHN5bWxpbmsgYW5kIHJlbG9hZCB0aGUgY29yZSBm aWxlLiAgQXMgaW4gdGhlCisrIyBwcmV2aW91cyB0ZXN0IEdEQiBzaG91bGQgYmUgYWJsZSB0byBm aWd1cmUgb3V0IHRoZSBjb3JyZWN0IGZpbGUgdG8KKysjIGxvYWQgYXMgdGhlIGNvcnJlY3QgZmls ZSB3aWxsIHN0aWxsIGFwcGVhciBpbiB0aGUgbWFwcGVkIGZpbGUgbGlzdC4KKytzZXQgc3RhdHVz IFtyZW1vdGVfZXhlYyBidWlsZCAicm0gLWYgJHtsaWJyYXJ5X2ZpbGVuYW1lfSJdCisrZ2RiX2Fz c2VydCB7IFtsaW5kZXggJHN0YXR1cyAwXSA9PSAwIH0gInJlbW92ZSBsaWJyYXJ5IHN5bWxpbmsi CisrCisrbG9hZF9leGVjX2FuZF9jb3JlX2ZpbGUgZmFsc2UgZmFsc2UgXAorKyAgICAibG9hZCBj b3JlIGZpbGUsIHN5bWxpbmsgcmVtb3ZlZCIKKysKKysjIFJlbW92ZSBMSUJSQVJZXzFfRklMRU5B TUUuICBXZSdsbCBub3cgc2VlIGEgd2FybmluZyB0aGF0IHRoZSBtYXBwZWQKKysjIGZpbGUgY2Fu J3QgYmUgbG9hZGVkICh3ZSBpZ25vcmUgdGhhdCB3YXJuaW5nKSwgYW5kIHdlJ2xsIHNlZSBhCisr IyB3YXJuaW5nIHRoYXQgdGhlIHNoYXJlZCBsaWJyYXJ5IGNhbid0IGJlIGxvYWRlZC4KKytzZXQg bGlicmFyeV8xX2JhY2t1cF9maWxlbmFtZSAke2xpYnJhcnlfMV9maWxlbmFtZX0uYmFja3VwCisr c2V0IHN0YXR1cyBcCisrICAgIFtyZW1vdGVfZXhlYyBidWlsZCBcCisrCSAibXYgJHtsaWJyYXJ5 XzFfZmlsZW5hbWV9ICR7bGlicmFyeV8xX2JhY2t1cF9maWxlbmFtZX0iXQorK2dkYl9hc3NlcnQg eyBbbGluZGV4ICRzdGF0dXMgMF0gPT0gMCB9IFwKKysgICAgInJlbW92ZSBsaWJmb29fMS5zbyIK KysKKytsb2FkX2V4ZWNfYW5kX2NvcmVfZmlsZSB0cnVlIGZhbHNlIFwKKysgICAgImxvYWQgY29y ZSBmaWxlLCBsaWJmb29fMS5zbyByZW1vdmVkIgorKworKyMgU3ltbGluayB0aGUgLmJ1aWxkLWlk L3h4L3h4eC4uLnh4eCBmaWxlbmFtZSB3aXRoaW4gdGhlIGRlYnVnCisrIyBkaXJlY3RvcnkgdG8g TElCUkFSWV8xX0JBQ0tVUF9GSUxFTkFNRSwgbm93IHdoZW4gd2UgcmVzdGFydCBHREIgaXQKKysj IHNob3VsZCBmaW5kIHRoZSBtaXNzaW5nIGxpYnJhcnkgd2l0aGluIHRoZSBkZWJ1ZyBkaXJlY3Rv cnkuCisrc2V0IGRlYnVnZGlyIFtzdGFuZGFyZF9vdXRwdXRfZmlsZSAiZGVidWdkaXIiXQorK3Nl dCBidWlsZF9pZF9maWxlbmFtZSBcCisrICAgICRkZWJ1Z2Rpci9bYnVpbGRfaWRfZGVidWdfZmls ZW5hbWVfZ2V0ICRsaWJyYXJ5XzFfYmFja3VwX2ZpbGVuYW1lICIiXQorK3NldCBzdGF0dXMgXAor KyAgICBbcmVtb3RlX2V4ZWMgYnVpbGQgXAorKwkgIm1rZGlyIC1wIFtmaWxlIGRpcm5hbWUgJGJ1 aWxkX2lkX2ZpbGVuYW1lXSJdCisrZ2RiX2Fzc2VydCB7IFtsaW5kZXggJHN0YXR1cyAwXSA9PSAw IH0gXAorKyAgICAiY3JlYXRlIHN1Yi1kaXJlY3Rvcnkgd2l0aGluIHRoZSBkZWJ1ZyBkaXJlY3Rv cnkiCisrc2V0IHN0YXR1cyBcCisrICAgIFtyZW1vdGVfZXhlYyBidWlsZCBcCisrCSAibG4gLXNm ICRsaWJyYXJ5XzFfYmFja3VwX2ZpbGVuYW1lICRidWlsZF9pZF9maWxlbmFtZSJdCisrZ2RiX2Fz c2VydCB7IFtsaW5kZXggJHN0YXR1cyAwXSA9PSAwIH0gXAorKyAgICAiY3JlYXRlIHN5bWxpbmsg d2l0aGluIHRoZSBkZWJ1ZyBkaXJlY3RvcnkgIgorKworK2xvYWRfZXhlY19hbmRfY29yZV9maWxl IGZhbHNlIGZhbHNlIFwKKysgICAgImxvYWQgY29yZSBmaWxlLCBmaW5kIGxpYmZvb18xLnNvIHRo cm91Z2ggZGVidWctZmlsZS1kaXJlY3RvcnkiIFwKKysgICAgJGRlYnVnZGlyCisrCisrIyBTZXR1 cCBhIGRlYnVnaW5mb2Qgc2VydmVyIHdoaWNoIGNhbiBzZXJ2ZSB0aGUgb3JpZ2luYWwgc2hhcmVk CisrIyBsaWJyYXJ5IGZpbGUuCisraWYgeyFbYWxsb3dfZGVidWdpbmZvZF90ZXN0c119IHsKKysg ICAgdW50ZXN0ZWQgInNraXBwaWcgZGVidWdpbmZvZCBwYXJ0cyBvZiB0aGlzIHRlc3QiCisrICAg IHJldHVybgorK30KKysKKytzZXQgc2VydmVyX2RpciBbc3RhbmRhcmRfb3V0cHV0X2ZpbGUgImRl YnVnaW5mb2Quc2VydmVyIl0KKytmaWxlIG1rZGlyICRzZXJ2ZXJfZGlyCisrZmlsZSByZW5hbWUg LWZvcmNlICRsaWJyYXJ5XzFfYmFja3VwX2ZpbGVuYW1lICRzZXJ2ZXJfZGlyCisrCisrcHJlcGFy ZV9mb3JfZGVidWdpbmZvZCBjYWNoZSBkYgorKworK3NldCB1cmwgW3N0YXJ0X2RlYnVnaW5mb2Qg JGRiICRzZXJ2ZXJfZGlyXQorK2lmIHsgJHVybCBlcSAiIiB9IHsKKysgICAgdW5yZXNvbHZlZCAi ZmFpbGVkIHRvIHN0YXJ0IGRlYnVnaW5mb2Qgc2VydmVyIgorKyAgICByZXR1cm4KKyt9CisrCisr d2l0aF9kZWJ1Z2luZm9kX2VudiAkY2FjaGUgeworKyAgICBzZXRlbnYgREVCVUdJTkZPRF9VUkxT ICR1cmwKKysKKysgICAgc2F2ZV92YXJzIHsgR0RCRkxBR1MgfSB7CisrCWFwcGVuZCBHREJGTEFH UyAiIC1leCBcInNldCBkZWJ1Z2luZm9kIGVuYWJsZWQgb25cIiIKKysKKysJIyBSZWxvYWQgdGhl IGV4ZWN1dGFibGUgYW5kIGNvcmUgZmlsZS4gIEdEQiBzaG91bGQgZG93bmxvYWQKKysJIyB0aGUg ZmlsZSBsaWJmb29fMS5zbyB1c2luZyBkZWJ1Z2luZm9kIGR1cmluZyB0aGUgbWFwcGVkIGZpbGUK KysJIyBwaGFzZSwgYnV0IHNob3VsZCB0aGVuIHJldXNlIHRoYXQgZG93bmxvYWQgZHVyaW5nIHRo ZSBzaGFyZWQKKysJIyBsaWJyYXJ5IHBoYXNlLgorKwlsb2FkX2V4ZWNfYW5kX2NvcmVfZmlsZSBm YWxzZSB0cnVlIFwKKysJICAgICJsb2FkIGNvcmUgZmlsZSwgdXNlIGRlYnVnaW5mb2QiCisrICAg IH0KKyt9CisrCisrc3RvcF9kZWJ1Z2luZm9kCitkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9n ZGIuZHdhcmYyL3Nob3J0LWJ1aWxkLWlkLmV4cCBiL2dkYi90ZXN0c3VpdGUvZ2RiLmR3YXJmMi9z aG9ydC1idWlsZC1pZC5leHAKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CistLS0gL2Rldi9udWxsCisr KysgYi9nZGIvdGVzdHN1aXRlL2dkYi5kd2FyZjIvc2hvcnQtYnVpbGQtaWQuZXhwCitAQCAtMCww ICsxLDExOSBAQAorKyMgQ29weXJpZ2h0IDIwMjQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ bmMuCisrIworKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisrIyB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorKyMg KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysjCisrIyBUaGlzIHByb2dyYW0g aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysjIGJ1 dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5 IG9mCisrIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlCisrIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLgorKyMKKysjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5v dCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKysKKysjIENyZWF0ZSBhIGZp bGUgd2l0aCBhbiBhcnRpZmljaWFsbHkgc2hvcnQgKDEtYnl0ZSkgYnVpbGQtaWQsIGFuZAorKyMg Y2hlY2sgdGhhdCBHREIgZG9lc24ndCB0cnkgdG8gbG9hZCBkZWJ1ZyBpbmZvcm1hdGlvbi4gIElm IHdlIGRvIHRyeQorKyMgdGhlbiB3ZSBlbmQgdXAgbG9hZGluZyBmcm9tOiBgZGVidWctZGlyZWN0 b3J5Ly5idWlsZC1pZC94eC8uZGVidWdgCisrIyB3aGljaCBpc24ndCByaWdodC4KKysKKytsb2Fk X2xpYiBkd2FyZi5leHAKKysKKysjIFRoaXMgdGVzdCBjYW4gb25seSBiZSBydW4gb24gdGFyZ2V0 cyB3aGljaCBzdXBwb3J0IERXQVJGLTIgYW5kIHVzZSBnYXMuCisrcmVxdWlyZSBkd2FyZjJfc3Vw cG9ydAorKworKyMgTm8gcmVtb3RlIGhvc3QgdGVzdGluZyBlaXRoZXIuCisrcmVxdWlyZSB7IWlz X3JlbW90ZSBob3N0fQorKworK3N0YW5kYXJkX3Rlc3RmaWxlIG1haW4uYworKworKyMgQ3JlYXRl IGFuIGFzc2VtYmxlciBmaWxlIHdoaWNoIGVuY29kZXMgQlVJTERJRCBhcyB0aGUgYnVpbGQtaWQu ICBDb21waWxlCisrIyB0aGlzIGFsb25nIHdpdGggdGhlIGdsb2JhbCBTUkNGSUxFIHRvIGNyZWF0 ZSBhIHRlc3QgZXhlY3V0YWJsZS4KKysjCisrIyBTcGxpdCB0aGUgZGVidWcgaW5mb3JtYXRpb24g b3V0IGZyb20gdGhlIG5ld2x5IGNyZWF0ZWQgZXhlY3V0YWJsZSBhbmQgcGxhY2UKKysjIGl0IGlu dG8gdGhlIGRlYnVnIGZpbGUgZGlyZWN0b3J5LgorKyMKKysjIExvYWQgdGhlIGV4ZWN1dGFibGUg aW50byBHREIgYW5kIGNoZWNrIHRvIHNlZSBpZiB0aGUgZGVidWcgaW5mb3JtYXRpb24gd2FzCisr IyBsb2FkZWQgb3Igbm90LiAgRm9yIHRoaXMgdGVzdCB3ZSBhcmUgZXhwZWN0aW5nIHRoYXQgdGhl IGRlYnVnIGluZm9ybWF0aW9uCisrIyB3YXMgbm90IGxvYWRlZC4gIFRoZSByZWFzb24gaXMgdGhh dCwgd2l0aCBzaG9ydCB2YWx1ZXMgZm9yIEJVSUxESUQsIEdEQiBlbmRzCisrIyB1cCBsb29raW5n IGZvciB0aGUgZGVidWcgaW5mb3JtYXRpb24gaW4gd2VpcmQgbG9jYXRpb25zLgorK3Byb2MgcnVu X3Rlc3QgeyBidWlsZGlkIH0geworKyAgICBzZXQgbGVuIFtzdHJpbmcgbGVuZ3RoICRidWlsZGlk XQorKworKyAgICBzZXQgYXNtX2ZpbGUgW3N0YW5kYXJkX291dHB1dF9maWxlICIkOjp0ZXN0Zmls ZS4kbGVuLlMiXQorKyAgICBEd2FyZjo6YXNzZW1ibGUgJGFzbV9maWxlIHsKKysJZGVjbGFyZV9s YWJlbHMgaW50X2xhYmVsIGludF9sYWJlbDIKKysKKysJdXB2YXIgYnVpbGRpZCBidWlsZGlkCisr CisrCWJ1aWxkX2lkICRidWlsZGlkCisrCisrCWN1IHsgbGFiZWwgY3Vfc3RhcnQgfSB7CisrCSAg ICBjb21waWxlX3VuaXQge3tsYW5ndWFnZSBARFdfTEFOR19DfX0geworKwkJaW50X2xhYmVsMjog YmFzZV90eXBlIHsKKysJCSAgICB7bmFtZSBpbnR9CisrCQkgICAge2J5dGVfc2l6ZSA0IHNkYXRh fQorKwkJICAgIHtlbmNvZGluZyBARFdfQVRFX3NpZ25lZH0KKysJCX0KKysKKysJCWNvbnN0YW50 IHsKKysJCSAgICB7bmFtZSB0aGVfaW50fQorKwkJICAgIHt0eXBlIDokaW50X2xhYmVsMn0KKysJ CSAgICB7Y29uc3RfdmFsdWUgOTkgZGF0YTF9CisrCQl9CisrCSAgICB9CisrCX0KKysKKysJYXJh bmdlcyB7fSBjdV9zdGFydCB7CisrCSAgICBhcmFuZ2Uge30gMCAwCisrCX0KKysgICAgfQorKwor KyAgICBzZXQgZXhlY2ZpbGUgW3N0YW5kYXJkX291dHB1dF9maWxlICQ6OnRlc3RmaWxlLiRsZW5d CisrCisrICAgIGlmIHsgW2J1aWxkX2V4ZWN1dGFibGVfZnJvbV9zcGVjcyAiZmFpbGVkIHRvIGJ1 aWxkIiBcCisrCSAgICAgICRleGVjZmlsZSB7ZGVidWcgbm8tYnVpbGQtaWR9IFwKKysJICAgICAg JDo6c3JjZmlsZSBkZWJ1ZyBcCisrCSAgICAgICRhc21fZmlsZSB7fV0gfSB7CisrCXJldHVybgor KyAgICB9CisrCisrICAgICMgQ3JlYXRlIHRoZSBkZWJ1ZyBkaXJlY3RvcnkuCisrICAgIHNldCBk ZWJ1Z2RpciBbc3RhbmRhcmRfb3V0cHV0X2ZpbGUgImRlYnVnZGlyLiRsZW4iXQorKyAgICBzZXQg YnVpbGRfaWRfZGlyICRkZWJ1Z2Rpci8uYnVpbGQtaWQvJGJ1aWxkaWQKKysgICAgcmVtb3RlX2V4 ZWMgaG9zdCAibWtkaXIgLXAgJGJ1aWxkX2lkX2RpciIKKysKKysgICAgIyBTcGxpdCBvdXQgdGhl IGRlYnVnIGluZm9ybWF0aW9uLgorKyAgICBpZiB7W2dkYl9nbnVfc3RyaXBfZGVidWcgJGV4ZWNm aWxlIG5vLWRlYnVnbGlua119IHsKKysJdW5yZXNvbHZlZCAiZmFpbGVkIHRvIHNwbGl0IG91dCBk ZWJ1ZyBpbmZvcm1hdGlvbiIKKysJcmV0dXJuCisrICAgIH0KKysKKysgICAgIyBNb3ZlIHRoZSBk ZWJ1ZyBpbmZvcm1hdGlvbiBpbnRvIHRoZSBkZWJ1ZyBkaXJlY3RvcnkuICBXZSBwbGFjZSB0aGUg ZGVidWcKKysgICAgIyBpbmZvcm1hdGlvbiBpbnRvIGEgZmlsZSBjYWxsZWQganVzdCAnLmRlYnVn Jy4gIEdEQiBzaG91bGQgbm90IGNoZWNrIHRoaXMKKysgICAgIyBmaWxlLCBidXQgYXQgb25lIHBv aW50IEdEQiB3b3VsZCBjaGVjayB0aGlzIGZpbGUsIGV2ZW4gdGhvdWdoIHRoaXMKKysgICAgIyBk b2Vzbid0IG1ha2UgbXVjaCBzZW5zZS4KKysgICAgc2V0IGV4ZWNmaWxlX2RlYnVnICR7ZXhlY2Zp bGV9LmRlYnVnCisrICAgIHJlbW90ZV9leGVjIGhvc3QgIm12ICRleGVjZmlsZV9kZWJ1ZyAkYnVp bGRfaWRfZGlyLy5kZWJ1ZyIKKysKKysgICAgIyBTdGFydCBHREIsIHNldCB0aGUgZGVidWctZmls ZS1kaXJlY3RvcnksIGFuZCB0cnkgbG9hZGluZyB0aGUgZmlsZS4KKysgICAgY2xlYW5fcmVzdGFy dAorKworKyAgICBnZGJfdGVzdF9ub19vdXRwdXQgInNldCBkZWJ1Zy1maWxlLWRpcmVjdG9yeSAk ZGVidWdkaXIiIFwKKysJInNldCBkZWJ1Zy1maWxlLWRpcmVjdG9yeSIKKysKKysgICAgZ2RiX2Zp bGVfY21kICRleGVjZmlsZQorKworKyAgICBnZGJfYXNzZXJ0IHsgJDo6Z2RiX2ZpbGVfY21kX2Rl YnVnX2luZm8gZXEgIm5vZGVidWciIH0gXAorKwkibm8gZGVidWcgc2hvdWxkIGJlIGxvYWRlZCIK KysKKysgICAgIyBGb3Igc2FuaXR5LCByZWFkIHNvbWV0aGluZyB0aGF0IHdhcyBlbmNvZGVkIGlu IHRoZSBkZWJ1ZworKyAgICAjIGluZm9ybWF0aW9uLCB0aGlzIHNob3VsZCBmYWlsLgorKyAgICBn ZGJfdGVzdCAicHJpbnQgdGhlX2ludCIgXAorKwkiKD86Tm8gc3ltYm9sIHRhYmxlIGlzIGxvYWRl ZHxObyBzeW1ib2wgXCJ0aGVfaW50XCIgaW4gY3VycmVudCBjb250ZXh0KS4qIgorK30KKysKKytm b3JlYWNoX3dpdGhfcHJlZml4IGJ1aWxkaWQgeyBhNCAiIiB9IHsKKysgICAgcnVuX3Rlc3QgJGJ1 aWxkaWQKKyt9CitkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LW1pc3Np bmctb2JqZmlsZS1saWIuYyBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1taXNzaW5nLW9i amZpbGUtbGliLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CistLS0gL2Rldi9udWxsCisrKysgYi9n ZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktbWlzc2luZy1vYmpmaWxlLWxpYi5jCitAQCAtMCww ICsxLDM1IEBACisrLyogVGhpcyB0ZXN0IHByb2dyYW0gaXMgcGFydCBvZiBHREIsIHRoZSBHTlUg ZGVidWdnZXIuCisrCisrICAgQ29weXJpZ2h0IDIwMjQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u LCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyAgIHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9y CisrICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHBy b2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK KysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRS4gIFNlZSB0aGUKKysgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrICAgYWxvbmcgd2l0aCB0aGlzIHByb2dy YW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworKwor K3N0cnVjdCBsaWJfdHlwZQorK3sKKysgIGludCBhOworKyAgaW50IGI7CisrfTsKKysKKyt2b2xh dGlsZSBzdHJ1Y3QgbGliX3R5cGUgZ2xvYmFsX2xpYl92YXIgPSB7IDAsIDAgfTsKKysKKytpbnQK Kytmb28gKHZvaWQpCisreworKyAgaW50IHJlcyA9IDA7CisrCisrICByZXMgKz0gZ2xvYmFsX2xp Yl92YXIuYTsKKysgIHJlcyArPSBnbG9iYWxfbGliX3Zhci5iOworKworKyAgcmV0dXJuIDA7Cisr fQorZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1taXNzaW5nLW9iamZp bGUuYyBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1taXNzaW5nLW9iamZpbGUuYworbmV3 IGZpbGUgbW9kZSAxMDA2NDQKKy0tLSAvZGV2L251bGwKKysrKyBiL2dkYi90ZXN0c3VpdGUvZ2Ri LnB5dGhvbi9weS1taXNzaW5nLW9iamZpbGUuYworQEAgLTAsMCArMSw0OSBAQAorKy8qIFRoaXMg dGVzdCBwcm9ncmFtIGlzIHBhcnQgb2YgR0RCLCB0aGUgR05VIGRlYnVnZ2VyLgorKworKyAgIENv cHlyaWdodCAyMDI0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyAgIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKysgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u OyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorKyAgIChhdCB5b3VyIG9wdGlv bikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5Z IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJD SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl CisrICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysg ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZQorKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0 dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKysKKysjaW5jbHVkZSA8c3RkbGliLmg+ CisrCisrc3RydWN0IGV4ZWNfdHlwZQorK3sKKysgIGludCBhOworKyAgaW50IGI7CisrICBpbnQg YzsKKyt9OworKworK3ZvbGF0aWxlIHN0cnVjdCBleGVjX3R5cGUgZ2xvYmFsX2V4ZWNfdmFyID0g eyAwLCAwLCAwIH07CisrCisrZXh0ZXJuIGludCBmb28gKHZvaWQpOworKworK3ZvaWQKKytkdW1w X2NvcmUgKHZvaWQpCisreworKyAgYWJvcnQgKCk7CisrfQorKworK2ludAorK21haW4gKHZvaWQp CisreworKyAgaW50IHJlcyA9IGZvbyAoKTsKKysKKysgIHJlcyArPSBnbG9iYWxfZXhlY192YXIu YTsKKysgIHJlcyArPSBnbG9iYWxfZXhlY192YXIuYjsKKysgIHJlcyArPSBnbG9iYWxfZXhlY192 YXIuYzsKKysKKysgIGR1bXBfY29yZSAoKTsKKysKKysgIHJldHVybiByZXM7CisrfQorZGlmZiAt LWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1taXNzaW5nLW9iamZpbGUuZXhwIGIv Z2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LW1pc3Npbmctb2JqZmlsZS5leHAKK25ldyBmaWxl IG1vZGUgMTAwNjQ0CistLS0gL2Rldi9udWxsCisrKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5weXRo b24vcHktbWlzc2luZy1vYmpmaWxlLmV4cAorQEAgLTAsMCArMSw1NjUgQEAKKysjIENvcHlyaWdo dCAoQykgMjAyNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysjIFRoaXMgcHJv Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k aWZ5CisrIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGFzIHB1Ymxpc2hlZCBieQorKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0 aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKysjIChhdCB5b3VyIG9wdGlvbikgYW55 IGxhdGVyIHZlcnNpb24uCisrIworKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyMgTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKyMgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysjCisrIyBZb3Ugc2hv dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZQorKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5n bnUub3JnL2xpY2Vuc2VzLz4uCisrCisrbG9hZF9saWIgZ2RiLXB5dGhvbi5leHAKKysKKytyZXF1 aXJlIGFsbG93X3B5dGhvbl90ZXN0cworK3JlcXVpcmUgeyFpc19yZW1vdGUgaG9zdH0KKysKKytz dGFuZGFyZF90ZXN0ZmlsZSAuYyAtbGliLmMKKysKKysjIEJ1aWxkIHRoZSBsaWJyYXJ5LgorK3Nl dCBsaWJuYW1lICR7dGVzdGZpbGV9LWxpYgorK3NldCBsaWJmaWxlIFtzdGFuZGFyZF9vdXRwdXRf ZmlsZSAkbGlibmFtZV0KKytpZiB7IFtidWlsZF9leGVjdXRhYmxlICJidWlsZCBzaGxpYiIgJGxp YmZpbGUgJHNyY2ZpbGUyIFwKKysJICB7ZGVidWcgc2hsaWIgYnVpbGQtaWR9XSA9PSAtMX0gewor KyAgICByZXR1cm4KKyt9CisrCisrIyBCdWlsZCB0aGUgZXhlY3V0YWJsZS4KKytzZXQgb3B0cyBb bGlzdCBkZWJ1ZyBidWlsZC1pZCBzaGxpYj0ke2xpYmZpbGV9XQorK2lmIHsgW2J1aWxkX2V4ZWN1 dGFibGUgImJ1aWxkIGV4ZWMiICRiaW5maWxlICRzcmNmaWxlICRvcHRzXSA9PSAtMX0geworKyAg ICByZXR1cm4KKyt9CisrCisrIyBUaGUgY2Mtd2l0aC1nbnUtZGVidWdsaW5rIGJvYXJkIHdpbGwg c3BsaXQgdGhlIGRlYnVnIG91dCBpbnRvIHRoZQorKyMgLmRlYnVnIGRpcmVjdG9yeS4gIFRoaXMg dGVzdCBzY3JpcHQgcmVsaWVzIG9uIGhhdmluZyBHREIgbG9va3VwIHRoZQorKyMgb2JqZmlsZSBh bmQgZGVidWcgdmlhIHRoZSBidWlsZC1pZCwgd2hpY2ggdGhpcyB0ZXN0IHNldHMgdXAuICBUcnlp bmcKKysjIHRvIGRvIHRoYXQsIHdoaWxlIGFsc28gc3VwcG9ydGluZyB0aGUgY2Mtd2l0aC1nbnUt ZGVidWdsaW5rIGJvYXJkIGlzCisrIyBqdXN0IHRvbyBjb21wbGljYXRlZC4KKytpZiB7W2ZpbGUg aXNkaXJlY3RvcnkgW3N0YW5kYXJkX291dHB1dF9maWxlICIuZGVidWciXV19IHsKKysgICAgdW5z dXBwb3J0ZWQgInNwbGl0IGRlYnVnIHRlc3Rpbmcgbm90IHN1cHBvcnRlZCIKKysgICAgcmV0dXJu CisrfQorKworK3NldCByZW1vdGVfcHl0aG9uX2ZpbGUgXAorKyAgICBbZ2RiX3JlbW90ZV9kb3du bG9hZCBob3N0ICR7c3JjZGlyfS8ke3N1YmRpcn0vJHt0ZXN0ZmlsZX0ucHldCisrCisrIyBHZW5l cmF0ZSBhIGNvcmUgZmlsZS4KKytzZXQgY29yZWZpbGUgW2NvcmVfZmluZCAkYmluZmlsZSB7fV0K KytpZiB7JGNvcmVmaWxlID09ICIifSB7CisrICAgIHVuc3VwcG9ydGVkICJjb3JlIGZpbGUgbm90 IGdlbmVyYXRlZCIKKysgICAgcmV0dXJuIDAKKyt9CisrCisrIyBDcmVhdGUgYSBkaXJlY3Rvcnkg bmFtZWQgRElSTkFNRSBmb3IgdXNlIGFzIHRoZQorKyMgZGVidWctZmlsZS1kaXJlY3RvcnkuICBQ b3B1bGF0ZSB0aGUgZGlyZWN0b3J5IHdpdGggbGlua3MgKGJhc2VkIG9uCisrIyB0aGUgYnVpbGQt aWRzKSB0byBlYWNoIGZpbGUgaW4gdGhlIGxpc3QgRklMRVMuCisrIworKyMgUmV0dXJuIHRoZSBm dWxsIGZpbGVuYW1lIG9mIERJUk5BTUUgb24gdGhlIGhvc3QuCisrcHJvYyBzZXR1cF9kZWJ1Z2Rp ciB7IGRpcm5hbWUgZmlsZXMgfSB7CisrICAgIHNldCBkZWJ1Z2RpciBbaG9zdF9zdGFuZGFyZF9v dXRwdXRfZmlsZSAkZGlybmFtZV0KKysKKysgICAgIyBDcmVhdGUgYmFzaWMgZW1wdHkgZGlyZWN0 b3J5IHN0cnVjdHVyZSAoaW4gY2FzZSBGSUxFUyBpcyBlbXB0eSkuCisrICAgIHJlbW90ZV9leGVj IGhvc3QgIm1rZGlyIC1wICRkZWJ1Z2Rpci8uYnVpbGQtaWQvIgorKworKyAgICBmb3JlYWNoIGZp bGUgJGZpbGVzIHsKKysJc2V0IGJ1aWxkX2lkX2ZpbGVuYW1lIFtidWlsZF9pZF9kZWJ1Z19maWxl bmFtZV9nZXQgJGZpbGUgIiJdCisrCisrCXJlbW90ZV9leGVjIGhvc3QgIm1rZGlyIC1wICRkZWJ1 Z2Rpci9bZmlsZSBkaXJuYW1lICRidWlsZF9pZF9maWxlbmFtZV0iCisrCXJlbW90ZV9leGVjIGhv c3QgImxuIC1zICRmaWxlICRkZWJ1Z2Rpci8kYnVpbGRfaWRfZmlsZW5hbWUiCisrICAgIH0KKysK KysgICAgcmV0dXJuICRkZWJ1Z2RpcgorK30KKysKKysjIFF1ZXJ5IHNvbWUgc3ltYm9scyBpbiB0 aGUgaW5mZXJpb3IgdG8gc2VlIGlmIEdEQiBtYW5hZ2VkIHRvIGZpbmQgdGhlCisrIyBleGVjdXRh YmxlICh3aGVuIEVYRUNfTE9BREVEIGlzIHRydWUpIGFuZC9vciB0aGUgbGlicmFyeSAod2hlbiBM SUJfTE9BREVECisrIyBpcyB0cnVlKS4KKytwcm9jIGNoZWNrX2xvYWRlZF9kZWJ1ZyB7IGV4ZWNf bG9hZGVkIGxpYl9sb2FkZWQgfSB7CisrICAgIGlmIHsgJGV4ZWNfbG9hZGVkIH0geworKwlnZGJf dGVzdCAid2hhdGlzIGdsb2JhbF9leGVjX3ZhciIgIl50eXBlID0gdm9sYXRpbGUgc3RydWN0IGV4 ZWNfdHlwZSIKKysKKysJaWYgeyAkbGliX2xvYWRlZCB9IHsKKysJICAgIGdkYl90ZXN0ICJ3aGF0 aXMgZ2xvYmFsX2xpYl92YXIiICJedHlwZSA9IHZvbGF0aWxlIHN0cnVjdCBsaWJfdHlwZSIKKysJ fSBlbHNlIHsKKysJICAgIGdkYl90ZXN0ICJ3aGF0aXMgZ2xvYmFsX2xpYl92YXIiIFwKKysJCSJe Tm8gc3ltYm9sIFwiZ2xvYmFsX2xpYl92YXJcIiBpbiBjdXJyZW50IGNvbnRleHRcXC4iCisrCX0K KysgICAgfSBlbHNlIHsKKysJZ2RiX3Rlc3QgIndoYXRpcyBnbG9iYWxfZXhlY192YXIiIFwKKysJ ICAgICJeTm8gc3ltYm9sIHRhYmxlIGlzIGxvYWRlZFxcLiAgVXNlIHRoZSBcImZpbGVcIiBjb21t YW5kXFwuIgorKwlnZGJfdGVzdCAid2hhdGlzIGdsb2JhbF9saWJfdmFyIiBcCisrCSAgICAiXk5v IHN5bWJvbCB0YWJsZSBpcyBsb2FkZWRcXC4gIFVzZSB0aGUgXCJmaWxlXCIgY29tbWFuZFxcLiIK KysgICAgfQorK30KKysKKysjIExvYWQgdGhlIGdsb2JhbCBjb3JlZmlsZS4gIFRoZSBFWFRSQV9S RSBpcyBjaGVja2VkIGZvciBwcmlvciB0byBHREIKKysjIGFubm91bmNpbmcgdGhhdCB0aGUgY29y ZS1maWxlIGhhcyBiZWVuIGxvYWRlZC4KKytwcm9jIGxvYWRfY29yZV9maWxlIHsge2V4dHJhX3Jl ICIuKiJ9IH0geworKyAgICBnZGJfdGVzdCAiY29yZS1maWxlICQ6OmNvcmVmaWxlIiBcCisrCVtt dWx0aV9saW5lIFwKKysJICAgICAiJGV4dHJhX3JlIiBcCisrCSAgICAgIkNvcmUgd2FzIGdlbmVy YXRlZCBieSBcW15cclxuXF0rIiBcCisrCSAgICAgIlByb2dyYW0gdGVybWluYXRlZCB3aXRoIHNp Z25hbCBTSUdBQlJULCBBYm9ydGVkXFwuIiBcCisrCSAgICAgIlxbXlxyXG5cXSsoPzpcclxuXFte XHJcblxdKyk/Il0gXAorKwkibG9hZGVkIHRoZSBjb3JlIGZpbGUiCisrfQorKworKyMgU2V0IHRo ZSBkZWJ1Zy1maWxlLWRpcmVjdG9yeSB0byBESVJOQU1FLgorK3Byb2Mgc2V0X2RlYnVnX2ZpbGVf ZGlyIHsgZGlybmFtZSB9IHsKKysgICAgZ2RiX3Rlc3Rfbm9fb3V0cHV0ICJzZXQgZGVidWctZmls ZS1kaXJlY3RvcnkgJGRpcm5hbWUiIFwKKysJInNldCBkZWJ1Zy1maWxlLWRpcmVjdG9yeSIKKyt9 CisrCisrIyBSZXN0YXJ0IEdEQiBhbmQgbG9hZCB0aGUgc3VwcG9ydCBQeXRob24gc2NyaXB0Lgor K3Byb2MgY2xlYW5fcmVzdGFydF9sb2FkX3B5dGhvbiB7fSB7CisrICAgIGNsZWFuX3Jlc3RhcnQK KysgICAgZ2RiX3Rlc3QgInNvdXJjZSAkOjpyZW1vdGVfcHl0aG9uX2ZpbGUiICJeU3VjY2VzcyIg XAorKwkibG9hZCBweXRob24gc2NyaXB0IgorK30KKysKKysjIEZvciBzYW5pdHksIGxldHMgY2hl Y2sgdGhhdCB3ZSBjYW4gbG9hZCB0aGUgc3BlY2lmeSB0aGUgZXhlY3V0YWJsZQorKyMgYW5kIHRo ZW4gbG9hZCB0aGUgY29yZS1maWxlIHRoZSBlYXN5IHdheS4KKyt3aXRoX3Rlc3RfcHJlZml4ICJp bml0aWFsIHNhbml0eSBjaGVjayIgeworKyAgICBjbGVhbl9yZXN0YXJ0ICRiaW5maWxlCisrICAg IGxvYWRfY29yZV9maWxlCisrICAgIGNoZWNrX2xvYWRlZF9kZWJ1ZyB0cnVlIHRydWUKKyt9Cisr CisrIyBNb3ZlIHRoZSBleGVjdXRhYmxlIGFuZCBsaWJyYXJ5IGludG8gYSBsb2NhdGlvbiB0aGF0 IHRoZSBjb3JlLWZpbGUKKysjIGNhbid0IHBvc3NpYmx5IGtub3cgYWJvdXQuICBBZnRlciB0aGlz IHRoZSBvbmx5IHdheSBHREIgY2FuIHRyYWNrCisrIyBkb3duIHRoZXNlIGZpbGVzIHdpbGwgYmUg YnkgbG9va2luZyBpbiB0aGUgZGVidWctZmlsZS1kaXJlY3RvcnkuCisrc2V0IGhpZGRlbl9kaXIg W2hvc3Rfc3RhbmRhcmRfb3V0cHV0X2ZpbGUgImhpZGRlbiJdCisrc2V0IGhpZGRlbl9iaW5maWxl ICIkaGlkZGVuX2Rpci8kdGVzdGZpbGUiCisrc2V0IGhpZGRlbl9saWJmaWxlICIkaGlkZGVuX2Rp ci8kbGlibmFtZSIKKytyZW1vdGVfZXhlYyBob3N0ICJta2RpciAtcCAkaGlkZGVuX2RpciIKKyty ZW1vdGVfZXhlYyBob3N0ICJtdiAkbGliZmlsZSAkaGlkZGVuX2xpYmZpbGUiCisrcmVtb3RlX2V4 ZWMgaG9zdCAibXYgJGJpbmZpbGUgJGhpZGRlbl9iaW5maWxlIgorKworKyMgSWYgdXNpbmcgdGhl IGZpc3Npb24tZHdwIGJvYXJkIHRoZW4gd2UnbGwgaGF2ZSAuZHdwIGZpbGVzIHRoYXQgYWxzbwor KyMgbmVlZCB0byBiZSBtb3ZlZC4KKytpZiB7W3JlbW90ZV9maWxlIGhvc3QgZXhpc3RzICR7bGli ZmlsZX0uZHdwXX0geworKyAgICByZW1vdGVfZXhlYyBob3N0ICJtdiAke2xpYmZpbGV9LmR3cCAk e2hpZGRlbl9saWJmaWxlfS5kd3AiCisrfQorKworK2lmIHtbcmVtb3RlX2ZpbGUgaG9zdCBleGlz dHMgJHtiaW5maWxlfS5kd3BdfSB7CisrICAgIHJlbW90ZV9leGVjIGhvc3QgIm12ICR7YmluZmls ZX0uZHdwICR7aGlkZGVuX2JpbmZpbGV9LmR3cCIKKyt9CisrCisrd2l0aF90ZXN0X3ByZWZpeCAi bm8gb2JqZmlsZXMsIG5vIGRlYnVnLWZpbGUtZGlyZWN0b3J5IiB7CisrICAgIGNsZWFuX3Jlc3Rh cnQKKysgICAgbG9hZF9jb3JlX2ZpbGUKKysgICAgY2hlY2tfbG9hZGVkX2RlYnVnIGZhbHNlIGZh bHNlCisrfQorKworKyMgU2V0dXAgc29tZSBkZWJ1Zy1maWxlLWRpcmVjdG9yaWVzLgorK3NldCBk ZWJ1Z2Rpcl9ub19saWIgXAorKyAgICBbc2V0dXBfZGVidWdkaXIgImRlYnVnZGlyLm5vLWxpYiIg W2xpc3QgIiRoaWRkZW5fYmluZmlsZSJdXQorK3NldCBkZWJ1Z2Rpcl9lbXB0eSBcCisrICAgIFtz ZXR1cF9kZWJ1Z2RpciAiZGVidWdkaXIuZW1wdHkiIHt9XQorK3NldCBkZWJ1Z2Rpcl9hbGwgXAor KyAgICBbc2V0dXBfZGVidWdkaXIgImRlYnVnZGlyLmFsbCIgW2xpc3QgIiRoaWRkZW5fbGliZmls ZSIgXAorKwkJCQkJIiRoaWRkZW5fYmluZmlsZSJdXQorKworK3dpdGhfdGVzdF9wcmVmaXggIm5v IG9iamZpbGVzIGF2YWlsYWJsZSIgeworKyAgICAjIEFub3RoZXIgc2FuaXR5IGNoZWNrIHRoYXQg R0RCIGNhbiBmaW5kIHRoZSBmaWxlcyB2aWEgdGhlCisrICAgICMgZGVidWctZmlsZS1kaXJlY3Rv cnkuCisrICAgIGNsZWFuX3Jlc3RhcnQKKysgICAgc2V0X2RlYnVnX2ZpbGVfZGlyICRkZWJ1Z2Rp cl9lbXB0eQorKyAgICBsb2FkX2NvcmVfZmlsZQorKyAgICBjaGVja19sb2FkZWRfZGVidWcgZmFs c2UgZmFsc2UKKyt9CisrCisrd2l0aF90ZXN0X3ByZWZpeCAiYWxsIG9iamZpbGVzIGF2YWlsYWJs ZSIgeworKyAgICAjIEFub3RoZXIgc2FuaXR5IGNoZWNrIHRoYXQgR0RCIGNhbiBmaW5kIHRoZSBm aWxlcyB2aWEgdGhlCisrICAgICMgZGVidWctZmlsZS1kaXJlY3RvcnkuCisrICAgIHNldF9kZWJ1 Z19maWxlX2RpciAkZGVidWdkaXJfYWxsCisrICAgIGxvYWRfY29yZV9maWxlCisrICAgIGNoZWNr X2xvYWRlZF9kZWJ1ZyB0cnVlIHRydWUKKyt9CisrCisrd2l0aF90ZXN0X3ByZWZpeCAibGliIG9i amZpbGUgbWlzc2luZyIgeworKyAgICAjIEFub3RoZXIgc2FuaXR5IGNoZWNrIHRoYXQgR0RCIGNh biBmaW5kIHRoZSBmaWxlcyB2aWEgdGhlCisrICAgICMgZGVidWctZmlsZS1kaXJlY3RvcnkuCisr ICAgIHNldF9kZWJ1Z19maWxlX2RpciAkZGVidWdkaXJfbm9fbGliCisrICAgIGxvYWRfY29yZV9m aWxlCisrICAgIGNoZWNrX2xvYWRlZF9kZWJ1ZyB0cnVlIGZhbHNlCisrfQorKworK3dpdGhfdGVz dF9wcmVmaXggImFsbCBvYmpmaWxlcyBtaXNzaW5nLCBoYW5kbGVyIHJldHVybnMgTm9uZSIgewor KyAgICBjbGVhbl9yZXN0YXJ0X2xvYWRfcHl0aG9uCisrICAgIGdkYl90ZXN0X25vX291dHB1dCBc CisrCSJweXRob24gZ2RiLm1pc3Npbmdfb2JqZmlsZS5yZWdpc3Rlcl9oYW5kbGVyKE5vbmUsIGhh bmRsZXJfb2JqKSIgXAorKwkicmVnaXN0ZXIgaW5pdGlhbCBoYW5kbGVyIgorKyAgICBsb2FkX2Nv cmVfZmlsZQorKworKyAgICBjaGVja19sb2FkZWRfZGVidWcgZmFsc2UgZmFsc2UKKysKKysgICAg IyBUaGUgaGFuZGxlciBzaG91bGQgYmUgY2FsbGVkIHRocmVlIHRpbWVzLCBvbmNlIGZvciB0aGUK KysgICAgIyBtYXBwZWQtZmlsZSwgb25jZSBmb3IgdGhlIGNvcmUtZmlsZSdzIGV4ZWMsIGFuZCBv bmNlIGZvciB0aGUKKysgICAgIyBzaGFyZWQgbGlicmFyeS4KKysgICAgZ2RiX3Rlc3QgInB5dGhv biBwcmludChoYW5kbGVyX29iai5jYWxsX2NvdW50KSIgIl4zIiBcCisrCSJjaGVjayBoYW5kbGVy IHdhcyBjYWxsZWQgdGhyZWUgdGltZXMiCisrfQorKworK3dpdGhfdGVzdF9wcmVmaXggImxpYiBv YmpmaWxlIG1pc3NpbmcsIGhhbmRsZXIgcmV0dXJucyBOb25lIiB7CisrICAgICMgUmVzZXQgaGFu ZGxlcl9vYmouCisrICAgIGdkYl90ZXN0X25vX291dHB1dCAicHl0aG9uIGhhbmRsZXJfb2JqLnNl dF9tb2RlKE1vZGUuUkVUVVJOX05PTkUpIgorKworKyAgICBzZXRfZGVidWdfZmlsZV9kaXIgJGRl YnVnZGlyX25vX2xpYgorKyAgICBsb2FkX2NvcmVfZmlsZQorKyAgICBjaGVja19sb2FkZWRfZGVi dWcgdHJ1ZSBmYWxzZQorKworKyAgICAjIFRoZSBoYW5kbGVyIHdpbGwgYmUgY2FsbGVkIHR3aWNl LCBvbmNlIHdoZW4gR0RCIHRyaWVzIHRvCisrICAgICMgbG9hZCB0aGUgc2hhcmVkIGxpYnJhcnkg ZHVyaW5nIHRoZSBtZW1vcnktbWFwcGVkIGZpbGUgcGhhc2UsCisrICAgICMgdGhlbiBhZ2FpbiBm b3IgdGhlIHNoYXJlZCBsaWJyYXJ5IGxvYWRpbmcuCisrICAgIGdkYl90ZXN0ICJweXRob24gcHJp bnQoaGFuZGxlcl9vYmouY2FsbF9jb3VudCkiICJeMiIgXAorKwkiY2hlY2sgaGFuZGxlciB3YXMg Y2FsbGVkIHRocmVlIHRpbWVzIgorK30KKysKKyt3aXRoX3Rlc3RfcHJlZml4ICJoYW5kbGVyIGlu c3RhbGxzIGxpYiBvYmpmaWxlIiB7CisrICAgIHNldCBidWlsZF9pZF9maWxlbmFtZSBbYnVpbGRf aWRfZGVidWdfZmlsZW5hbWVfZ2V0IFwKKysJCQkJICAgJGhpZGRlbl9saWJmaWxlICIiXQorKyAg ICByZW1vdGVfZXhlYyBob3N0IFwKKysJIm1rZGlyIC1wICRkZWJ1Z2Rpcl9ub19saWIvW2ZpbGUg ZGlybmFtZSAkYnVpbGRfaWRfZmlsZW5hbWVdIgorKyAgICBnZGJfdGVzdF9ub19vdXRwdXQgInB5 dGhvbiBoYW5kbGVyX29iai5zZXRfbW9kZShNb2RlLlJFVFVSTl9UUlVFLCBcCisrICAgIAlcIiRo aWRkZW5fbGliZmlsZVwiLCBcIiRkZWJ1Z2Rpcl9ub19saWIvJGJ1aWxkX2lkX2ZpbGVuYW1lXCIp IiBcCisrCSJjb25maWd1cmUgaGFuZGxlciIKKysKKysgICAgbG9hZF9jb3JlX2ZpbGUKKysgICAg Y2hlY2tfbG9hZGVkX2RlYnVnIHRydWUgdHJ1ZQorKworKyAgICAjIENsZWFudXAgc28gdGhlIHRl c3QgY2FuIGJlIHJlcHJvZHVjZWQgYWdhaW4gbGF0ZXIgaWYgbmVlZGVkLgorKyAgICByZW1vdGVf ZXhlYyBob3N0ICJybSAkZGVidWdkaXJfbm9fbGliLyRidWlsZF9pZF9maWxlbmFtZSIKKyt9Cisr Cisrd2l0aF90ZXN0X3ByZWZpeCAiaGFuZGxlciBwb2ludHMgdG8gbGliIG9iamZpbGUiIHsKKysg ICAgc2V0IGJ1aWxkX2lkX2ZpbGVuYW1lIFtidWlsZF9pZF9kZWJ1Z19maWxlbmFtZV9nZXQgXAor KwkJCSAgICAgICAkaGlkZGVuX2xpYmZpbGUgIiJdCisrICAgIHJlbW90ZV9leGVjIGhvc3QgXAor KwkibWtkaXIgLXAgJGRlYnVnZGlyX25vX2xpYi9bZmlsZSBkaXJuYW1lICRidWlsZF9pZF9maWxl bmFtZV0iCisrICAgIGdkYl90ZXN0X25vX291dHB1dCAicHl0aG9uIGhhbmRsZXJfb2JqLnNldF9t b2RlKE1vZGUuUkVUVVJOX1NUUklORywgXAorKwkJCQkJCVwiJGhpZGRlbl9saWJmaWxlXCIpIiBc CisrCSJjb25maWd1cmUgaGFuZGxlciIKKysKKysgICAgbG9hZF9jb3JlX2ZpbGUKKysgICAgY2hl Y2tfbG9hZGVkX2RlYnVnIHRydWUgdHJ1ZQorKworKyAgICAjIENsZWFudXAgc28gdGhlIHRlc3Qg Y2FuIGJlIHJlcHJvZHVjZWQgYWdhaW4gbGF0ZXIgaWYgbmVlZGVkLgorKyAgICByZW1vdGVfZXhl YyBob3N0ICJybSAkZGVidWdkaXJfbm9fbGliLyRidWlsZF9pZF9maWxlbmFtZSIKKysKKysgICAg IyBUaGUgaGFuZGxlciB3aWxsIG9ubHkgaGF2ZSBiZWVuIGNhbGxlZCBvbmNlIHdoZW4gbG9hZGlu ZyB0aGUKKysgICAgIyBtZW1vcnktbWFwcGVkIGZpbGUuICBHREIgaXMgc21hcnQgZW5vdWdoIHRv IHJldXNlIHRoZSBwcmV2aW91c2x5CisrICAgICMgZGlzY292ZXJlZCBCRkQgb2JqZWN0IGFzIHRo ZSBzaGFyZWQgbGlicmFyeS4KKysgICAgZ2RiX3Rlc3QgInB5dGhvbiBwcmludChoYW5kbGVyX29i ai5jYWxsX2NvdW50KSIgIl4xIiBcCisrCSJjaGVjayBnb29kIGhhbmRsZXIgaGFzbid0IGJlZW4g Y2FsbGVkIGFnYWluIgorKworKyAgICAjIFZhbGlkYXRlIHRoZSBmaWxlbmFtZSBhbmQgYnVpbGQt aWQgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgaGFuZGxlci4KKysgICAgc2V0IGV4cGVjdGVkX2J1 aWxkaWQgW2dldF9idWlsZF9pZCAkaGlkZGVuX2xpYmZpbGVdCisrICAgIGdkYl90ZXN0ICJweXRo b24gcHJpbnQoaGFuZGxlcl9sYXN0X2J1aWxkaWQpIiAiXiRleHBlY3RlZF9idWlsZGlkIgorKyAg ICBnZGJfdGVzdCAicHl0aG9uIHByaW50KGhhbmRsZXJfbGFzdF9maWxlbmFtZSkiIFwKKysJIl5b c3RyaW5nX3RvX3JlZ2V4cCAkbGliZmlsZV0iCisrfQorKworKyMgUmVnaXN0ZXIgYW5vdGhlciBn bG9iYWwgaGFuZGxlciwgdGhpcyBvbmUgcmFpc2VzIGFuIGV4Y2VwdGlvbi4gIFJlbG9hZCB0aGUK KysjIGNvcmUtZmlsZSwgdGhlIGJhZCBoYW5kbGVyIHNob3VsZCBiZSBpbnZva2VkIGZpcnN0LCB3 aGljaCByYWlzZXMgYW4KKysjIGV4Y2V0cHRpb24sIGF0IHdoaWNoIHBvaW50IEdEQiBzaG91bGQg c2tpcCBmdXJ0aGVyIFB5dGhvbiBoYW5kbGVycy4KKyt3aXRoX3Rlc3RfcHJlZml4ICJoYW5kbGVy IHJhaXNlcyBhbiBleGNlcHRpb24iIHsKKysgICAgZ2RiX3Rlc3Rfbm9fb3V0cHV0IFwKKysJInB5 dGhvbiBnZGIubWlzc2luZ19vYmpmaWxlLnJlZ2lzdGVyX2hhbmRsZXIoTm9uZSwgcmhhbmRsZXIp IgorKworKyAgICBmb3JlYWNoX3dpdGhfcHJlZml4IGV4Y2VwdGlvbl90eXBlIHtnZGIuR2RiRXJy b3IgVHlwZUVycm9yfSB7CisrCWdkYl90ZXN0X25vX291dHB1dCBcCisrCSAgICAicHl0aG9uIHJo YW5kbGVyLmV4Y2VwdGlvbl90eXBlID0gJGV4Y2VwdGlvbl90eXBlIgorKworKwkjIExvYWQgdGhl IGNvcmUgZmlsZS4gIFdlIGV4cGVjdCB0aGUgZXhjZXB0aW9uIG1lc3NhZ2UgdG8gYXBwZWFyIGF0 CisrCSMgbGVhc3Qgb25jZSBpbiB0aGUgb3V0cHV0LgorKwlzZXQgcmUgW3N0cmluZ190b19yZWdl eHAgXAorKwkJICAgICJQeXRob24gRXhjZXB0aW9uIDxjbGFzcyAnJGV4Y2VwdGlvbl90eXBlJz46 IG1lc3NhZ2UiXQorKwlsb2FkX2NvcmVfZmlsZSAiJHtyZX0uKiIKKysKKysJIyBPdXIgb3JpZ2lu YWwgaGFuZGxlciBpcyBzdGlsbCByZWdpc3RlcmVkLCBidXQgc2hvdWxkIG5vdCBoYXZlIGJlZW4K KysJIyBjYWxsZWQgYWdhaW4gKGFzIHRoZSBleGNlcHRpb24gb2NjdXJzIGZpcnN0KS4KKysJZ2Ri X3Rlc3QgInB5dGhvbiBwcmludChoYW5kbGVyX29iai5jYWxsX2NvdW50KSIgIl4xIiBcCisrCSAg ICAiY2hlY2sgZ29vZCBoYW5kbGVyIGhhc24ndCBiZWVuIGNhbGxlZCBhZ2FpbiIKKysgICAgfQor K30KKysKKysjIFJlLXN0YXJ0IEdEQi4KKytjbGVhbl9yZXN0YXJ0X2xvYWRfcHl0aG9uCisrCisr IyBBdHRlbXB0IHRvIHJlZ2lzdGVyIGEgbWlzc2luZy1kZWJ1Zy1oYW5kbGVyIHdpdGggTkFNRS4g IFRoZSBleHBlY3RhdGlvbiBpcworKyMgdGhhdCB0aGlzIHNob3VsZCBmYWlsIGFzIE5BTUUgY29u dGFpbnMgc29tZSBpbnZhbGlkIGNoYXJhY3RlcnMuCisrcHJvYyBjaGVja19iYWRfbmFtZSB7bmFt ZX0geworKyAgICBzZXQgbmFtZV9yZSBbc3RyaW5nX3RvX3JlZ2V4cCAkbmFtZV0KKysgICAgc2V0 IHJlIFwKKysJW211bHRpX2xpbmUgXAorKwkgICAgICJWYWx1ZUVycm9yLio6IGludmFsaWQgY2hh cmFjdGVyICcuJyBpbiBoYW5kbGVyIG5hbWU6ICRuYW1lX3JlIiBcCisrCSAgICAgIkVycm9yIG9j Y3VycmVkIGluIFB5dGhvbi4qIl0KKysKKysgICAgZ2RiX3Rlc3QgInB5dGhvbiByZWdpc3Rlcihc IiRuYW1lXCIpIiAkcmUgXAorKwkiY2hlY2sgdGhhdCAnJG5hbWUnIGlzIG5vdCBhY2NlcHRlZCIK Kyt9CisrCisrIyBXZSBkb24ndCBhdHRlbXB0IHRvIGJlIGV4aGF1c3RpdmUgaGVyZSwganVzdCBj aGVjayBhIGZldyByYW5kb20gZXhhbXBsZXMKKysjIG9mIGludmFsaWQgbmFtZXMuCisrY2hlY2tf YmFkX25hbWUgIiEhIEJhZCBOYW1lIgorK2NoZWNrX2JhZF9uYW1lICJCYWQgTmFtZSIKKytjaGVj a19iYWRfbmFtZSAiKEJhZCBOYW1lKSIKKytjaGVja19iYWRfbmFtZSAiQmFkIFxbTmFtZVxdIgor K2NoZWNrX2JhZF9uYW1lICJCYWQsTmFtZSIKKytjaGVja19iYWRfbmFtZSAiQmFkO05hbWUiCisr CisrIyBDaGVjayB0aGF0IHRoZXJlIGFyZSBubyBoYW5kbGVycyByZWdpc3RlcmVkLgorK2dkYl90 ZXN0X25vX291dHB1dCAiaW5mbyBtaXNzaW5nLW9iamZpbGUtaGFuZGxlcnMiIFwKKysgICAgImNo ZWNrIG5vIGhhbmRsZXJzIGFyZSByZWdpc3RlcmVkIgorKworKyMgR3JhYiB0aGUgY3VycmVudCBw cm9ncmFtIHNwYWNlIG9iamVjdCwgdXNlZCBmb3IgcmVnaXN0ZXJpbmcgaGFuZGxlciBsYXRlci4K KytnZGJfdGVzdF9ub19vdXRwdXQgInB5dGhvbiBwc3BhY2UgPSBnZGIuc2VsZWN0ZWRfaW5mZXJp b3IoKS5wcm9nc3BhY2UiCisrCisrIyBOb3cgcmVnaXN0ZXIgc29tZSBoYW5kbGVycy4KKytmb3Jl YWNoIGhzcGVjIHt7XCJGb29cIiBOb25lfQorKyAgICB7XCItYmFyXCIgTm9uZX0KKysgICAge1wi YmF6LVwiIHBzcGFjZX0KKysgICAge1wiYWJjLWRlZlwiIHBzcGFjZX19IHsKKysgICAgbGFzc2ln biAkaHNwZWMgbmFtZSBsb2N1cworKyAgICBnZGJfdGVzdCAicHl0aG9uIHJlZ2lzdGVyKCRuYW1l LCAkbG9jdXMpIgorK30KKysKKyt3aXRoX3Rlc3RfcHJlZml4ICJhbGwgaGFuZGxlcnMgZW5hYmxl ZCIgeworKyAgICBnZGJfdGVzdCAiaW5mbyBtaXNzaW5nLW9iamZpbGUtaGFuZGxlcnMiIFwKKysJ W211bHRpX2xpbmUgXAorKwkgICAgICJDdXJyZW50IFByb2dzcGFjZToiIFwKKysJICAgICAiICBh YmMtZGVmIiBcCisrCSAgICAgIiAgYmF6LSIgXAorKwkgICAgICJHbG9iYWw6IiBcCisrCSAgICAg IiAgLWJhciIgXAorKwkgICAgICIgIEZvbyJdCisrCisrICAgIHNldF9kZWJ1Z19maWxlX2RpciAk ZGVidWdkaXJfbm9fbGliCisrICAgIGxvYWRfY29yZV9maWxlCisrCisrICAgICMgQXMgd2UgcGVy Zm9ybSB0d28gbG9vayB1cHMsIGZpcnN0IGZvciB0aGUgbWFwcGVkLWZpbGUgdGhlbiBmb3IgdGhl CisrICAgICMgc2hhcmVkIGxpYnJhcnksIGVhY2ggaGFuZGxlciB3aWxsIGJlIGNhbGxlZCB0d2lj ZS4KKysgICAgZ2RiX3Rlc3QgInB5dGhvbiBwcmludChoYW5kbGVyX2NhbGxfbG9nKSIgXAorKwlb c3RyaW5nX3RvX3JlZ2V4cCB7WydhYmMtZGVmJywgJ2Jhei0nLCAnLWJhcicsICdGb28nLCAnYWJj LWRlZicsICdiYXotJywgJy1iYXInLCAnRm9vJ119XQorKyAgICBnZGJfdGVzdF9ub19vdXRwdXQg InB5dGhvbiBoYW5kbGVyX2NhbGxfbG9nID0gXFtcXSIgXAorKwkicmVzZXQgY2FsbCBsb2ciCisr fQorKworK3dpdGhfdGVzdF9wcmVmaXggImRpc2FibGUgJ2Jhei0nIiB7CisrICAgIGdkYl90ZXN0 ICJkaXNhYmxlIG1pc3Npbmctb2JqZmlsZS1oYW5kbGVyIHByb2dzcGFjZSBiYXotIiBcCisrCSJe MSBtaXNzaW5nIG9iamZpbGUgaGFuZGxlciBkaXNhYmxlZCIKKysKKysgICAgZ2RiX3Rlc3QgImlu Zm8gbWlzc2luZy1vYmpmaWxlLWhhbmRsZXJzIiBcCisrCVttdWx0aV9saW5lIFwKKysJICAgICAi UHJvZ3NwYWNlIFxbXlxyXG5cXSs6IiBcCisrCSAgICAgIiAgYWJjLWRlZiIgXAorKwkgICAgICIg IGJhei0gXFxcW2Rpc2FibGVkXFxcXSIgXAorKwkgICAgICJHbG9iYWw6IiBcCisrCSAgICAgIiAg LWJhciIgXAorKwkgICAgICIgIEZvbyJdCisrCisrICAgIGxvYWRfY29yZV9maWxlCisrICAgIGdk Yl90ZXN0ICJweXRob24gcHJpbnQoaGFuZGxlcl9jYWxsX2xvZykiIFwKKysJW3N0cmluZ190b19y ZWdleHAge1snYWJjLWRlZicsICctYmFyJywgJ0ZvbycsICdhYmMtZGVmJywgJy1iYXInLCAnRm9v J119XQorKyAgICBnZGJfdGVzdF9ub19vdXRwdXQgInB5dGhvbiBoYW5kbGVyX2NhbGxfbG9nID0g XFtcXSIgXAorKwkicmVzZXQgY2FsbCBsb2ciCisrfQorKworK3dpdGhfdGVzdF9wcmVmaXggImRp c2FibGUgJ0ZvbyciIHsKKysgICAgZ2RiX3Rlc3QgImRpc2FibGUgbWlzc2luZy1vYmpmaWxlLWhh bmRsZXIgLiogRm9vIiBcCisrCSJeMSBtaXNzaW5nIG9iamZpbGUgaGFuZGxlciBkaXNhYmxlZCIK KysKKysgICAgZ2RiX3Rlc3QgImluZm8gbWlzc2luZy1vYmpmaWxlLWhhbmRsZXJzIiBcCisrCVtt dWx0aV9saW5lIFwKKysJICAgICAiUHJvZ3NwYWNlIFxbXlxyXG5cXSs6IiBcCisrCSAgICAgIiAg YWJjLWRlZiIgXAorKwkgICAgICIgIGJhei0gXFxcW2Rpc2FibGVkXFxcXSIgXAorKwkgICAgICJH bG9iYWw6IiBcCisrCSAgICAgIiAgLWJhciIgXAorKwkgICAgICIgIEZvbyBcXFxbZGlzYWJsZWRc XFxdIl0KKysKKysgICAgbG9hZF9jb3JlX2ZpbGUKKysgICAgZ2RiX3Rlc3QgInB5dGhvbiBwcmlu dChoYW5kbGVyX2NhbGxfbG9nKSIgXAorKwlbc3RyaW5nX3RvX3JlZ2V4cCB7WydhYmMtZGVmJywg Jy1iYXInLCAnYWJjLWRlZicsICctYmFyJ119XQorKyAgICBnZGJfdGVzdF9ub19vdXRwdXQgInB5 dGhvbiBoYW5kbGVyX2NhbGxfbG9nID0gXFtcXSIgXAorKwkicmVzZXQgY2FsbCBsb2ciCisrfQor KworK3dpdGhfdGVzdF9wcmVmaXggImRpc2FibGUgZXZlcnl0aGluZyIgeworKyAgICBnZGJfdGVz dCAiZGlzYWJsZSBtaXNzaW5nLW9iamZpbGUtaGFuZGxlciAuKiAuKiIgXAorKwkiXjIgbWlzc2lu ZyBvYmpmaWxlIGhhbmRsZXJzIGRpc2FibGVkIgorKworKyAgICBnZGJfdGVzdCAiaW5mbyBtaXNz aW5nLW9iamZpbGUtaGFuZGxlcnMiIFwKKysJW211bHRpX2xpbmUgXAorKwkgICAgICJQcm9nc3Bh Y2UgXFteXHJcblxdKzoiIFwKKysJICAgICAiICBhYmMtZGVmIFxcXFtkaXNhYmxlZFxcXF0iIFwK KysJICAgICAiICBiYXotIFxcXFtkaXNhYmxlZFxcXF0iIFwKKysJICAgICAiR2xvYmFsOiIgXAor KwkgICAgICIgIC1iYXIgXFxcW2Rpc2FibGVkXFxcXSIgXAorKwkgICAgICIgIEZvbyBcXFxbZGlz YWJsZWRcXFxdIl0KKysKKysgICAgbG9hZF9jb3JlX2ZpbGUKKysgICAgZ2RiX3Rlc3QgInB5dGhv biBwcmludChoYW5kbGVyX2NhbGxfbG9nKSIgXAorKwlbc3RyaW5nX3RvX3JlZ2V4cCB7W119XQor KyAgICBnZGJfdGVzdF9ub19vdXRwdXQgInB5dGhvbiBoYW5kbGVyX2NhbGxfbG9nID0gXFtcXSIg XAorKwkicmVzZXQgY2FsbCBsb2ciCisrfQorKworK3dpdGhfdGVzdF9wcmVmaXggImVuYWJsZSAn YWJjLWRlZiciIHsKKysgICAgc2V0IHJlIFtzdHJpbmdfdG9fcmVnZXhwICRoaWRkZW5fYmluZmls ZV0KKysKKysgICAgZ2RiX3Rlc3QgImVuYWJsZSBtaXNzaW5nLW9iamZpbGUtaGFuZGxlciBcIiRy ZVwiIGFiYy1kZWYiIFwKKysJIl4xIG1pc3Npbmcgb2JqZmlsZSBoYW5kbGVyIGVuYWJsZWQiIFwK KysJImVuYWJsZSBtaXNzaW5nLW9iamZpbGUtaGFuZGxlciIKKysKKysgICAgZ2RiX3Rlc3QgImlu Zm8gbWlzc2luZy1vYmpmaWxlLWhhbmRsZXJzIiBcCisrCVttdWx0aV9saW5lIFwKKysJICAgICAi UHJvZ3NwYWNlIFxbXlxyXG5cXSs6IiBcCisrCSAgICAgIiAgYWJjLWRlZiIgXAorKwkgICAgICIg IGJhei0gXFxcW2Rpc2FibGVkXFxcXSIgXAorKwkgICAgICJHbG9iYWw6IiBcCisrCSAgICAgIiAg LWJhciBcXFxbZGlzYWJsZWRcXFxdIiBcCisrCSAgICAgIiAgRm9vIFxcXFtkaXNhYmxlZFxcXF0i XQorKworKyAgICBsb2FkX2NvcmVfZmlsZQorKyAgICBnZGJfdGVzdCAicHl0aG9uIHByaW50KGhh bmRsZXJfY2FsbF9sb2cpIiBcCisrCVtzdHJpbmdfdG9fcmVnZXhwIHtbJ2FiYy1kZWYnLCAnYWJj LWRlZiddfV0KKysgICAgZ2RiX3Rlc3Rfbm9fb3V0cHV0ICJweXRob24gaGFuZGxlcl9jYWxsX2xv ZyA9IFxbXF0iIFwKKysJInJlc2V0IGNhbGwgbG9nIgorK30KKysKKyt3aXRoX3Rlc3RfcHJlZml4 ICJlbmFibGUgZ2xvYmFsIGhhbmRsZXJzIiB7CisrICAgIGdkYl90ZXN0ICJlbmFibGUgbWlzc2lu Zy1vYmpmaWxlLWhhbmRsZXIgZ2xvYmFsIiBcCisrCSJeMiBtaXNzaW5nIG9iamZpbGUgaGFuZGxl cnMgZW5hYmxlZCIKKysKKysgICAgZ2RiX3Rlc3QgImluZm8gbWlzc2luZy1vYmpmaWxlLWhhbmRs ZXJzIiBcCisrCVttdWx0aV9saW5lIFwKKysJICAgICAiUHJvZ3NwYWNlIFxbXlxyXG5cXSs6IiBc CisrCSAgICAgIiAgYWJjLWRlZiIgXAorKwkgICAgICIgIGJhei0gXFxcW2Rpc2FibGVkXFxcXSIg XAorKwkgICAgICJHbG9iYWw6IiBcCisrCSAgICAgIiAgLWJhciIgXAorKwkgICAgICIgIEZvbyJd CisrCisrICAgIGxvYWRfY29yZV9maWxlCisrICAgIGdkYl90ZXN0ICJweXRob24gcHJpbnQoaGFu ZGxlcl9jYWxsX2xvZykiIFwKKysJW3N0cmluZ190b19yZWdleHAge1snYWJjLWRlZicsICctYmFy JywgJ0ZvbycsICdhYmMtZGVmJywgJy1iYXInLCAnRm9vJ119XQorKyAgICBnZGJfdGVzdF9ub19v dXRwdXQgInB5dGhvbiBoYW5kbGVyX2NhbGxfbG9nID0gXFtcXSIgXAorKwkicmVzZXQgY2FsbCBs b2ciCisrfQorKworKyMgQWRkIGhhbmRsZXJfb2JqIHRvIHRoZSBnbG9iYWwgaGFuZGxlciBsaXN0 LCBhbmQgY29uZmlndXJlIGl0IHRvCisrIyByZXR1cm4gRmFsc2UuICBXZSBzaG91bGQgY2FsbCBh bGwgb2YgdGhlIHByb2dyYW0gc3BhY2Ugc3BlY2lmaWMKKysjIGhhbmRsZXJzICh3aGljaCByZXR1 cm4gTm9uZSksIGFuZCB0aGVuIGNhbGwgaGFuZGxlcl9vYmogZnJvbSB0aGUKKysjIGdsb2JhbCBs aXN0LCB3aGljaCByZXR1cm5zIEZhbHNlLCBhdCB3aGljaCBwb2ludCB3ZSBzaG91bGRuJ3QgY2Fs bAorKyMgYW55b25lIGVsc2UuCisrd2l0aF90ZXN0X3ByZWZpeCAicmV0dXJuIEZhbHNlIGhhbmRs ZXIgaW4gZ2xvYmFsIGxpc3QiIHsKKysgICAgZ2RiX3Rlc3QgImVuYWJsZSBtaXNzaW5nLW9iamZp bGUtaGFuZGxlciBwcm9nc3BhY2UiIFwKKysJIl4xIG1pc3Npbmcgb2JqZmlsZSBoYW5kbGVyIGVu YWJsZWQiCisrCisrICAgIGdkYl90ZXN0X25vX291dHB1dCBcCisrCSJweXRob24gZ2RiLm1pc3Np bmdfb2JqZmlsZS5yZWdpc3Rlcl9oYW5kbGVyKE5vbmUsIGhhbmRsZXJfb2JqKSIgXAorKwkicmVn aXN0ZXIgaGFuZGxlcl9vYmogaW4gZ2xvYmFsIGxpc3QiCisrCisrICAgIGdkYl90ZXN0ICJpbmZv IG1pc3Npbmctb2JqZmlsZS1oYW5kbGVycyIgXAorKwlbbXVsdGlfbGluZSBcCisrCSAgICAgIlBy b2dzcGFjZSBcW15cclxuXF0rOiIgXAorKwkgICAgICIgIGFiYy1kZWYiIFwKKysJICAgICAiICBi YXotIiBcCisrCSAgICAgIkdsb2JhbDoiIFwKKysJICAgICAiICBoYW5kbGVyIiBcCisrCSAgICAg IiAgLWJhciIgXAorKwkgICAgICIgIEZvbyJdCisrCisrICAgIGdkYl90ZXN0X25vX291dHB1dCAi cHl0aG9uIGhhbmRsZXJfb2JqLnNldF9tb2RlKE1vZGUuUkVUVVJOX0ZBTFNFKSIgXAorKwkiY29u ZmlyZ3VyZSBoYW5kbGVyIgorKworKyAgICBsb2FkX2NvcmVfZmlsZQorKyAgICBnZGJfdGVzdCAi cHl0aG9uIHByaW50KGhhbmRsZXJfY2FsbF9sb2cpIiBcCisrCVtzdHJpbmdfdG9fcmVnZXhwIHtb J2FiYy1kZWYnLCAnYmF6LScsICdoYW5kbGVyJywgJ2FiYy1kZWYnLCAnYmF6LScsICdoYW5kbGVy J119XQorKyAgICBnZGJfdGVzdF9ub19vdXRwdXQgInB5dGhvbiBoYW5kbGVyX2NhbGxfbG9nID0g XFtcXSIgXAorKwkicmVzZXQgY2FsbCBsb2ciCisrfQorKworKyMgTm93IGFkZCBoYW5kbGVyX29i aiB0byB0aGUgY3VycmVudCBwcm9ncmFtIHNwYWNlJ3MgaGFuZGxlciBsaXN0LiAgV2UKKysjIHVz ZSB0aGUgc2FtZSBoYW5kbGVyIG9iamVjdCBoZXJlLCB0aGF0J3MgZmluZS4gIFdlIHNob3VsZCBv bmx5IHNlZSBhCisrIyBjYWxsIHRvIHRoZSBmaXJzdCBoYW5kbGVyIG9iamVjdCBpbiB0aGUgY2Fs bCBsb2cuCisrd2l0aF90ZXN0X3ByZWZpeCAicmV0dXJuIEZhbHNlIGhhbmRsZXIgaW4gcHJvZ3Nw YWNlIGxpc3QiIHsKKysgICAgZ2RiX3Rlc3Rfbm9fb3V0cHV0IFwKKysJInB5dGhvbiBnZGIubWlz c2luZ19vYmpmaWxlLnJlZ2lzdGVyX2hhbmRsZXIocHNwYWNlLCBoYW5kbGVyX29iaikiIFwKKysJ InJlZ2lzdGVyIGhhbmRsZXJfb2JqIGluIHByb2dzcGFjZSBsaXN0IgorKworKyAgICBnZGJfdGVz dCAiaW5mbyBtaXNzaW5nLW9iamZpbGUtaGFuZGxlcnMiIFwKKysJW211bHRpX2xpbmUgXAorKwkg ICAgICJQcm9nc3BhY2UgXFteXHJcblxdKzoiIFwKKysJICAgICAiICBoYW5kbGVyIiBcCisrCSAg ICAgIiAgYWJjLWRlZiIgXAorKwkgICAgICIgIGJhei0iIFwKKysJICAgICAiR2xvYmFsOiIgXAor KwkgICAgICIgIGhhbmRsZXIiIFwKKysJICAgICAiICAtYmFyIiBcCisrCSAgICAgIiAgRm9vIl0K KysKKysgICAgbG9hZF9jb3JlX2ZpbGUKKysgICAgZ2RiX3Rlc3QgInB5dGhvbiBwcmludChoYW5k bGVyX2NhbGxfbG9nKSIgXAorKwlbc3RyaW5nX3RvX3JlZ2V4cCB7WydoYW5kbGVyJywgJ2hhbmRs ZXInXX1dCisrICAgIGdkYl90ZXN0X25vX291dHB1dCAicHl0aG9uIGhhbmRsZXJfY2FsbF9sb2cg PSBcW1xdIiBcCisrCSJyZXNldCBjYWxsIGxvZyIKKyt9CisrCisrd2l0aF90ZXN0X3ByZWZpeCAi Y2hlY2sgaGFuZGxlciByZXBsYWNlbWVudCIgeworKyAgICAjIEZpcnN0LCBjaGVjayB3ZSBjYW4g aGF2ZSB0aGUgc2FtZSBuYW1lIGFwcGVhciBpbiBib3RoIHByb2dyYW0KKysgICAgIyBzcGFjZSBh bmQgZ2xvYmFsIGxpc3RzIHdpdGhvdXQgZ2l2aW5nIGFuIGVycm9yLgorKyAgICBnZGJfdGVzdF9u b19vdXRwdXQgInB5dGhvbiByZWdpc3RlcihcIkZvb1wiLCBwc3BhY2UpIgorKworKyAgICBnZGJf dGVzdCAiaW5mbyBtaXNzaW5nLW9iamZpbGUtaGFuZGxlcnMiIFwKKysJW211bHRpX2xpbmUgXAor KwkgICAgICJQcm9nc3BhY2UgXFteXHJcblxdKzoiIFwKKysJICAgICAiICBGb28iIFwKKysJICAg ICAiICBoYW5kbGVyIiBcCisrCSAgICAgIiAgYWJjLWRlZiIgXAorKwkgICAgICIgIGJhei0iIFwK KysJICAgICAiR2xvYmFsOiIgXAorKwkgICAgICIgIGhhbmRsZXIiIFwKKysJICAgICAiICAtYmFy IiBcCisrCSAgICAgIiAgRm9vIl0KKysKKysgICAgIyBOb3cgY2hlY2sgdGhhdCB3ZSBnZXQgYW4g ZXJyb3IgaWYgd2UgdHJ5IHRvIGFkZCBhIGhhbmRsZXIgd2l0aAorKyAgICAjIHRoZSBzYW1lIG5h bWUuCisrICAgIGdkYl90ZXN0ICJweXRob24gZ2RiLm1pc3Npbmdfb2JqZmlsZS5yZWdpc3Rlcl9o YW5kbGVyKHBzcGFjZSwgbG9nX2hhbmRsZXIoXCJGb29cIikpIiBcCisrCVttdWx0aV9saW5lIFwK KysJICAgICAiUnVudGltZUVycm9yLio6IEhhbmRsZXIgRm9vIGFscmVhZHkgZXhpc3RzXFwuIiBc CisrCSAgICAgIkVycm9yIG9jY3VycmVkIGluIFB5dGhvbi4qIl0KKysKKysgICAgZ2RiX3Rlc3Qg InB5dGhvbiBnZGIubWlzc2luZ19vYmpmaWxlLnJlZ2lzdGVyX2hhbmRsZXIoaGFuZGxlcj1sb2df aGFuZGxlcihcIkZvb1wiKSwgbG9jdXM9cHNwYWNlKSIgXAorKwlbbXVsdGlfbGluZSBcCisrCSAg ICAgIlJ1bnRpbWVFcnJvci4qOiBIYW5kbGVyIEZvbyBhbHJlYWR5IGV4aXN0c1xcLiIgXAorKwkg ICAgICJFcnJvciBvY2N1cnJlZCBpbiBQeXRob24uKiJdCisrCisrICAgICMgQW5kIG5vdyB0cnkg YWdhaW4sIGJ1dCB0aGlzIHRpbWUgd2l0aCAncmVwbGFjZT1UcnVlJywgd2UKKysgICAgIyBzaG91 bGRuJ3QgZ2V0IGFuIGVycm9yIGluIHRoaXMgY2FzZS4KKysgICAgZ2RiX3Rlc3Rfbm9fb3V0cHV0 IFwKKysJInB5dGhvbiBnZGIubWlzc2luZ19vYmpmaWxlLnJlZ2lzdGVyX2hhbmRsZXIocHNwYWNl LCBsb2dfaGFuZGxlcihcIkZvb1wiKSwgcmVwbGFjZT1UcnVlKSIKKysKKysgICAgZ2RiX3Rlc3Rf bm9fb3V0cHV0IFwKKysJInB5dGhvbiBnZGIubWlzc2luZ19vYmpmaWxlLnJlZ2lzdGVyX2hhbmRs ZXIoaGFuZGxlcj1sb2dfaGFuZGxlcihcIkZvb1wiKSwgbG9jdXM9Tm9uZSwgcmVwbGFjZT1UcnVl KSIKKysKKysgICAgIyBOb3cgZGlzYWJsZSBhIGhhbmRsZXIgYW5kIGNoZWNrIHdlIHN0aWxsIG5l ZWQgdG8gdXNlICdyZXBsYWNlPVRydWUnLgorKyAgICBnZGJfdGVzdCAiZGlzYWJsZSBtaXNzaW5n LW9iamZpbGUtaGFuZGxlciBwcm9nc3BhY2UgRm9vIiBcCisrCSJeMSBtaXNzaW5nIG9iamZpbGUg aGFuZGxlciBkaXNhYmxlZCIKKysKKysgICAgZ2RiX3Rlc3QgInB5dGhvbiBnZGIubWlzc2luZ19v YmpmaWxlLnJlZ2lzdGVyX2hhbmRsZXIocHNwYWNlLCBsb2dfaGFuZGxlcihcIkZvb1wiKSkiIFwK KysJW211bHRpX2xpbmUgXAorKwkgICAgICJSdW50aW1lRXJyb3IuKjogSGFuZGxlciBGb28gYWxy ZWFkeSBleGlzdHNcXC4iIFwKKysJICAgICAiRXJyb3Igb2NjdXJyZWQgaW4gUHl0aG9uLioiXSBc CisrCSJzdGlsbCBnZXQgYW4gZXJyb3Igd2hlbiBoYW5kbGVyIGlzIGRpc2FibGVkIgorKworKyAg ICBnZGJfdGVzdF9ub19vdXRwdXQgXAorKwkicHl0aG9uIGdkYi5taXNzaW5nX29iamZpbGUucmVn aXN0ZXJfaGFuZGxlcihwc3BhY2UsIGxvZ19oYW5kbGVyKFwiRm9vXCIpLCByZXBsYWNlPVRydWUp IiBcCisrCSJjYW4gcmVwbGFjZSBhIGRpc2FibGVkIGhhbmRsZXIiCisrfQorZGlmZiAtLWdpdCBh L2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1taXNzaW5nLW9iamZpbGUucHkgYi9nZGIvdGVz dHN1aXRlL2dkYi5weXRob24vcHktbWlzc2luZy1vYmpmaWxlLnB5CituZXcgZmlsZSBtb2RlIDEw MDY0NAorLS0tIC9kZXYvbnVsbAorKysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LW1p c3Npbmctb2JqZmlsZS5weQorQEAgLTAsMCArMSwxNjcgQEAKKysjIENvcHlyaWdodCAoQykgMjAy NCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysjIFRoaXMgcHJvZ3JhbSBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrIyBp dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1 Ymxpc2hlZCBieQorKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNp b24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKysjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl cnNpb24uCisrIworKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKyMgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysjCisrIyBZb3Ugc2hvdWxkIGhhdmUg cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKyMgYWxv bmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xp Y2Vuc2VzLz4uCisrCisraW1wb3J0IHNodXRpbAorK2ltcG9ydCBvcworK2Zyb20gZW51bSBpbXBv cnQgRW51bQorKworK2ltcG9ydCBnZGIKKytmcm9tIGdkYi5taXNzaW5nX29iamZpbGUgaW1wb3J0 IE1pc3NpbmdPYmpmaWxlSGFuZGxlcgorKworKyMgQSBnbG9iYWwgbG9nIHRoYXQgaXMgZmlsbGVk IGluIGJ5IGluc3RhbmNlcyBvZiB0aGUgTE9HX0hBTkRMRVIgY2xhc3MKKysjIHdoZW4gdGhleSBh cmUgY2FsbGVkLgorK2hhbmRsZXJfY2FsbF9sb2cgPSBbXQorKworKyMgQSBnbG9iYWwgaG9sZGlu ZyBhIHN0cmluZywgdGhlIGJ1aWxkLWlkIG9mIHRoZSBsYXN0IG1pc3Npbmcgb2JqZmlsZQorKyMg d2hpY2ggdHJpZ2dlcmVkIHRoZSAnaGFuZGxlcicgY2xhc3MgYmVsb3cuICBUaGlzIGlzIHNldCBp biB0aGUKKysjIF9fY2FsbF9fIG1ldGhvZCBvZiB0aGUgJ2hhbmRsZXInIGNsYXNzIGFuZCB0aGVu IGNoZWNrZWQgZnJvbSB0aGUKKysjIGV4cGVjdCBzY3JpcHQuCisraGFuZGxlcl9sYXN0X2J1aWxk aWQgPSBOb25lCisrCisrCisrIyBBIGdsb2JhbCBob2xkaW5nIGEgc3RyaW5nLCB0aGUgZmlsZW5h bWUgb2YgdGhlIGxhc3QgbWlzc2luZyBvYmpmaWxlCisrIyB3aGljaCB0cmlnZ2VyZWQgdGhlICdo YW5kbGVyJyBjbGFzcyBiZWxvdy4gIFRoaXMgaXMgc2V0IGluIHRoZQorKyMgX19jYWxsX18gbWV0 aG9kIG9mIHRoZSAnaGFuZGxlcicgY2xhc3MgYW5kIHRoZW4gY2hlY2tlZCBmcm9tIHRoZQorKyMg ZXhwZWN0IHNjcmlwdC4KKytoYW5kbGVyX2xhc3RfZmlsZW5hbWUgPSBOb25lCisrCisrCisrIyBB IGhlbHBlciBmdW5jdGlvbiB0aGF0IG1ha2VzIHNvbWUgYXNzZXJ0aW9ucyBhYm91dCB0aGUgYXJn dW1lbnRzCisrIyBwYXNzZWQgdG8gYSBNaXNzaW5nT2JqZmlsZUhhbmRsZXIuX19jYWxsX18oKSBt ZXRob2QuCisrZGVmIGNoZWNrX2FyZ3MocHNwYWNlLCBidWlsZGlkLCBmaWxlbmFtZSk6CisrICAg IGFzc2VydCB0eXBlKGZpbGVuYW1lKSA9PSBzdHIKKysgICAgYXNzZXJ0IGZpbGVuYW1lICE9ICIi CisrICAgIGFzc2VydCB0eXBlKHBzcGFjZSkgPT0gZ2RiLlByb2dzcGFjZQorKyAgICBhc3NlcnQg dHlwZShidWlsZGlkKSA9PSBzdHIKKysgICAgYXNzZXJ0IGJ1aWxkaWQgIT0gIiIKKysKKysKKysj IEVudW0gdXNlZCB0byBjb25maWd1cmUgdGhlICdoYW5kbGVyJyBjbGFzcyBmcm9tIHRoZSB0ZXN0 IHNjcmlwdC4KKytjbGFzcyBNb2RlKEVudW0pOgorKyAgICBSRVRVUk5fTk9ORSA9IDAKKysgICAg UkVUVVJOX1RSVUUgPSAxCisrICAgIFJFVFVSTl9GQUxTRSA9IDIKKysgICAgUkVUVVJOX1NUUklO RyA9IDMKKysKKysKKysjIEEgbWlzc2luZyBvYmpmaWxlIGhhbmRsZXIgd2hpY2ggY2FuIGJlIGNv bmZpZ3VyZWQgdG8gcmV0dXJuIGVhY2ggb2YKKysjIHRoZSBkaWZmZXJlbnQgcG9zc2libGUgcmV0 dXJuIHR5cGVzLgorK2NsYXNzIGhhbmRsZXIoTWlzc2luZ09iamZpbGVIYW5kbGVyKToKKysgICAg ZGVmIF9faW5pdF9fKHNlbGYpOgorKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXygiaGFuZGxlciIp CisrICAgICAgICBzZWxmLl9jYWxsX2NvdW50ID0gMAorKyAgICAgICAgc2VsZi5fbW9kZSA9IE1v ZGUuUkVUVVJOX05PTkUKKysKKysgICAgZGVmIF9fY2FsbF9fKHNlbGYsIHBzcGFjZSwgYnVpbGRp ZCwgZmlsZW5hbWUpOgorKyAgICAgICAgZ2xvYmFsIGhhbmRsZXJfY2FsbF9sb2csIGhhbmRsZXJf bGFzdF9idWlsZGlkLCBoYW5kbGVyX2xhc3RfZmlsZW5hbWUKKysgICAgICAgIGNoZWNrX2FyZ3Mo cHNwYWNlLCBidWlsZGlkLCBmaWxlbmFtZSkKKysgICAgICAgIGhhbmRsZXJfY2FsbF9sb2cuYXBw ZW5kKHNlbGYubmFtZSkKKysgICAgICAgIGhhbmRsZXJfbGFzdF9idWlsZGlkID0gYnVpbGRpZAor KyAgICAgICAgaGFuZGxlcl9sYXN0X2ZpbGVuYW1lID0gZmlsZW5hbWUKKysgICAgICAgIHNlbGYu X2NhbGxfY291bnQgKz0gMQorKyAgICAgICAgaWYgc2VsZi5fbW9kZSA9PSBNb2RlLlJFVFVSTl9O T05FOgorKyAgICAgICAgICAgIHJldHVybiBOb25lCisrCisrICAgICAgICBpZiBzZWxmLl9tb2Rl ID09IE1vZGUuUkVUVVJOX1RSVUU6CisrICAgICAgICAgICAgc2h1dGlsLmNvcHkoc2VsZi5fc3Jj LCBzZWxmLl9kZXN0KQorKworKyAgICAgICAgICAgICMgSWYgd2UncmUgdXNpbmcgdGhlIGZpc3Np b24tZHdwIGJvYXJkIHRoZW4gdGhlcmUgd2lsbAorKyAgICAgICAgICAgICMgYWxzbyBiZSBhIC5k d3AgZmlsZSB0aGF0IG5lZWRzIHRvIGJlIGNvcGllZC4KKysgICAgICAgICAgICBkd3Bfc3JjID0g c2VsZi5fc3JjICsgIi5kd3AiCisrICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZHdwX3Ny Yyk6CisrICAgICAgICAgICAgICAgIGR3cF9kZXN0ID0gc2VsZi5fZGVzdCArICIuZHdwIgorKyAg ICAgICAgICAgICAgICBzaHV0aWwuY29weShkd3Bfc3JjLCBkd3BfZGVzdCkKKysKKysgICAgICAg ICAgICByZXR1cm4gVHJ1ZQorKworKyAgICAgICAgaWYgc2VsZi5fbW9kZSA9PSBNb2RlLlJFVFVS Tl9GQUxTRToKKysgICAgICAgICAgICByZXR1cm4gRmFsc2UKKysKKysgICAgICAgIGlmIHNlbGYu X21vZGUgPT0gTW9kZS5SRVRVUk5fU1RSSU5HOgorKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9k ZXN0CisrCisrICAgICAgICBhc3NlcnQgRmFsc2UKKysKKysgICAgQHByb3BlcnR5CisrICAgIGRl ZiBjYWxsX2NvdW50KHNlbGYpOgorKyAgICAgICAgIiIiUmV0dXJuIGEgY291bnQsIHRoZSBudW1i ZXIgb2YgY2FsbHMgdG8gX19jYWxsX18gc2luY2UgdGhlIGxhc3QKKysgICAgICAgIGNhbGwgdG8g c2V0X21vZGUuCisrICAgICAgICAiIiIKKysgICAgICAgIHJldHVybiBzZWxmLl9jYWxsX2NvdW50 CisrCisrICAgIGRlZiBzZXRfbW9kZShzZWxmLCBtb2RlLCAqYXJncyk6CisrICAgICAgICBzZWxm Ll9jYWxsX2NvdW50ID0gMAorKyAgICAgICAgc2VsZi5fbW9kZSA9IG1vZGUKKysKKysgICAgICAg IGlmIG1vZGUgPT0gTW9kZS5SRVRVUk5fTk9ORToKKysgICAgICAgICAgICBhc3NlcnQgbGVuKGFy Z3MpID09IDAKKysgICAgICAgICAgICByZXR1cm4KKysKKysgICAgICAgIGlmIG1vZGUgPT0gTW9k ZS5SRVRVUk5fVFJVRToKKysgICAgICAgICAgICBhc3NlcnQgbGVuKGFyZ3MpID09IDIKKysgICAg ICAgICAgICBzZWxmLl9zcmMgPSBhcmdzWzBdCisrICAgICAgICAgICAgc2VsZi5fZGVzdCA9IGFy Z3NbMV0KKysgICAgICAgICAgICByZXR1cm4KKysKKysgICAgICAgIGlmIG1vZGUgPT0gTW9kZS5S RVRVUk5fRkFMU0U6CisrICAgICAgICAgICAgYXNzZXJ0IGxlbihhcmdzKSA9PSAwCisrICAgICAg ICAgICAgcmV0dXJuCisrCisrICAgICAgICBpZiBtb2RlID09IE1vZGUuUkVUVVJOX1NUUklORzoK KysgICAgICAgICAgICBhc3NlcnQgbGVuKGFyZ3MpID09IDEKKysgICAgICAgICAgICBzZWxmLl9k ZXN0ID0gYXJnc1swXQorKyAgICAgICAgICAgIHJldHVybgorKworKyAgICAgICAgYXNzZXJ0IEZh bHNlCisrCisrCisrIyBBIG1pc3Npbmcgb2JqZmlsZSBoYW5kbGVyIHdoaWNoIHJhaXNlcyBhbiBl eGNlcHRpb24uICBUaGUgdHlwZSBvZgorKyMgZXhjZXB0aW9uIHRvIGJlIHJhaXNlZCBpcyBjb25m aWd1cmVkIGZyb20gdGhlIHRlc3Qgc2NyaXB0LgorK2NsYXNzIGV4Y2VwdGlvbl9oYW5kbGVyKE1p c3NpbmdPYmpmaWxlSGFuZGxlcik6CisrICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKysgICAgICAg IHN1cGVyKCkuX19pbml0X18oImV4Y2VwdGlvbl9oYW5kbGVyIikKKysgICAgICAgIHNlbGYuZXhj ZXB0aW9uX3R5cGUgPSBOb25lCisrCisrICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBwc3BhY2UsIGJ1 aWxkaWQsIGZpbGVuYW1lKToKKysgICAgICAgIGdsb2JhbCBoYW5kbGVyX2NhbGxfbG9nCisrICAg ICAgICBjaGVja19hcmdzKHBzcGFjZSwgYnVpbGRpZCwgZmlsZW5hbWUpCisrICAgICAgICBoYW5k bGVyX2NhbGxfbG9nLmFwcGVuZChzZWxmLm5hbWUpCisrICAgICAgICBhc3NlcnQgc2VsZi5leGNl cHRpb25fdHlwZSBpcyBub3QgTm9uZQorKyAgICAgICAgcmFpc2Ugc2VsZi5leGNlcHRpb25fdHlw ZSgibWVzc2FnZSIpCisrCisrCisrIyBBIHZlcnkgc2ltcGxlIGxvZ2dpbmcgbWlzc2luZyBvYmpm aWxlIGhhbmRsZXIuICBBbHdheXMgcmV0dXJucyBOb25lCisrIyBzbyB0aGF0IEdEQiB3aWxsIHRy eSBhbnkgb3RoZXIgcmVnaXN0ZXJlZCBoYW5kbGVycywgYnV0IGZpcnN0IGxvZ3MKKysjIHRoZSBu YW1lIG9mIHRoaXMgaGFuZGxlciBpbnRvIHRoZSBnbG9iYWwgSEFORExFUl9DQUxMX0xPRywgd2hp Y2ggY2FuCisrIyB0aGVuIGJlIGNoZWNrZWQgZnJvbSB0aGUgdGVzdCBzY3JpcHQuCisrY2xhc3Mg bG9nX2hhbmRsZXIoTWlzc2luZ09iamZpbGVIYW5kbGVyKToKKysgICAgZGVmIF9fY2FsbF9fKHNl bGYsIHBzcGFjZSwgYnVpbGRpZCwgZmlsZW5hbWUpOgorKyAgICAgICAgZ2xvYmFsIGhhbmRsZXJf Y2FsbF9sb2cKKysgICAgICAgIGNoZWNrX2FyZ3MocHNwYWNlLCBidWlsZGlkLCBmaWxlbmFtZSkK KysgICAgICAgIGhhbmRsZXJfY2FsbF9sb2cuYXBwZW5kKHNlbGYubmFtZSkKKysgICAgICAgIHJl dHVybiBOb25lCisrCisrCisrIyBBIGJhc2ljIGhlbHBlciBmdW5jdGlvbiwgdGhpcyBrZWVwcyBs aW5lcyBzaG9ydGVyIGluIHRoZSBUQ0wgc2NyaXB0LgorK2RlZiByZWdpc3RlcihuYW1lLCBsb2N1 cz1Ob25lKToKKysgICAgZ2RiLm1pc3Npbmdfb2JqZmlsZS5yZWdpc3Rlcl9oYW5kbGVyKGxvY3Vz LCBsb2dfaGFuZGxlcihuYW1lKSkKKysKKysKKysjIENyZWF0ZSBpbnN0YW5jZXMgb2YgdGhlIGhh bmRsZXJzLCBidXQgZG9uJ3QgaW5zdGFsbCBhbnkuICBXZSBpbnN0YWxsCisrIyB0aGVzZSBhcyBu ZWVkZWQgZnJvbSB0aGUgVENMIHNjcmlwdC4KKytyaGFuZGxlciA9IGV4Y2VwdGlvbl9oYW5kbGVy KCkKKytoYW5kbGVyX29iaiA9IGhhbmRsZXIoKQorKworK3ByaW50KCJTdWNjZXNzIikKK2RpZmYg LS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5zZXJ2ZXIvYnVpbGQtaWQtc2Vxbm8uYyBiL2dkYi90 ZXN0c3VpdGUvZ2RiLnNlcnZlci9idWlsZC1pZC1zZXFuby5jCituZXcgZmlsZSBtb2RlIDEwMDY0 NAorLS0tIC9kZXYvbnVsbAorKysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuc2VydmVyL2J1aWxkLWlk LXNlcW5vLmMKK0BAIC0wLDAgKzEsMjIgQEAKKysvKiBUaGlzIHRlc3RjYXNlIGlzIHBhcnQgb2Yg R0RCLCB0aGUgR05VIGRlYnVnZ2VyLgorKworKyAgIENvcHlyaWdodCAyMDI0IEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbiwgSW5jLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkK KysgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRo ZSBMaWNlbnNlLCBvcgorKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisr CisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrICAgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2 ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKyAgIGFsb25nIHdp dGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNl cy8+LiAgKi8KKysKKytpbnQKKyttYWluICh2b2lkKQorK3sKKysgIHJldHVybiAwOworK30KK2Rp ZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5zZXJ2ZXIvYnVpbGQtaWQtc2Vxbm8uZXhwIGIv Z2RiL3Rlc3RzdWl0ZS9nZGIuc2VydmVyL2J1aWxkLWlkLXNlcW5vLmV4cAorbmV3IGZpbGUgbW9k ZSAxMDA2NDQKKy0tLSAvZGV2L251bGwKKysrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLnNlcnZlci9i dWlsZC1pZC1zZXFuby5leHAKK0BAIC0wLDAgKzEsMTk4IEBACisrIyBUaGlzIHRlc3RjYXNlIGlz IHBhcnQgb2YgR0RCLCB0aGUgR05VIGRlYnVnZ2VyLgorKyMKKysjIENvcHlyaWdodCAyMDI0IEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyMKKysjIFRoaXMgcHJvZ3JhbSBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrIyBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxp c2hlZCBieQorKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24g MyBvZiB0aGUgTGljZW5zZSwgb3IKKysjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp b24uCisrIworKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsCisrIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKyMgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysjCisrIyBZb3Ugc2hvdWxkIGhhdmUgcmVj ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKyMgYWxvbmcg d2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vu c2VzLz4uCisrCisrIyBTZXR1cCBhIC5idWlsZC1pZC8gYmFzZWQgZGVidWcgZGlyZWN0b3J5IGNv bnRhaW5pbmcgbXVsdGlwbGUgZW50cmllcworKyMgZm9yIHRoZSBzYW1lIGJ1aWxkLWlkLCB3aXRo IGVhY2ggZW50cnkgZ2l2ZW4gYSBkaWZmZXJlbnQgc2VxdWVuY2UKKysjIG51bWJlci4KKysjCisr IyBFbnN1cmUgdGhhdCBHREIgd2lsbCBzY2FuIG92ZXIgYnJva2VuIHN5bWxpbmtzIGZvciB0aGUg c2FtZSBidWlsZC1pZAorKyMgKGJ1dCBkaWZmZXJlbnQgc2VxdWVuY2UgbnVtYmVyKSB0byBmaW5k IGxhdGVyIHdvcmtpbmcgc3ltbGlua3MuCisrIworKyMgVGhpcyB0ZXN0IHBsYWNlcyB0aGUgYnVp bGQtaWQgZmlsZXMgd2l0aGluIGEgZGlyZWN0b3J5IG5leHQgdG8gd2hlcmUKKysjIGdkYnNlcnZl ciBpcyBzdGFydGVkLCBhbmQgcGxhY2VzIGEgcmVsYXRpdmUgYWRkcmVzcyBpbiB0aGUKKysjIGRl YnVnLWZpbGUtZGlyZWN0b3J5LCBpbiB0aGlzIHdheSB3ZSByZXF1aXJlIEdEQiB0byBmaW5kIHRo ZSBkZWJ1ZworKyMgaW5mb3JtYXRpb24gdmlhIGdkYnNlcnZlci4KKysKKytyZXF1aXJlIHshaXNf cmVtb3RlIGhvc3R9CisrCisrbG9hZF9saWIgZ2Ric2VydmVyLXN1cHBvcnQuZXhwCisrCisrc3Rh bmRhcmRfdGVzdGZpbGUKKysKKytpZiB7W2J1aWxkX2V4ZWN1dGFibGUgImZhaWxlZCB0byBwcmVw YXJlIiAkdGVzdGZpbGUgJHNyY2ZpbGVdID09IC0xfSB7CisrICAgIHJldHVybiAtMQorK30KKysK KysjIFNwbGl0IG91dCBCSU5GSUxFLmRlYnVnLiAgUmVtb3ZlIGRlYnVnIGZyb20gQklORklMRS4K KytpZiB7W2dkYl9nbnVfc3RyaXBfZGVidWcgJGJpbmZpbGVdICE9IDB9IHsKKysgICAgcmV0dXJu IC0xCisrfQorKworKyMgR2V0IHRoZSAnLmJ1aWxkLWlkL3h4L3h4eC4uLnh4eCcgcGFydCBvZiB0 aGUgZmlsZW5hbWUuCisrc2V0IGJ1aWxkX2lkX2ZpbGVuYW1lIFtidWlsZF9pZF9kZWJ1Z19maWxl bmFtZV9nZXQgJGJpbmZpbGVdCisrCisrIyBIaWRlIChyZW5hbWUpIEJJTkZJTEUuZGVidWcsIHRo aXMgc2hvdWxkIGVuc3VyZSBHREIgY2FuJ3QgZmluZCBpdAorKyMgZGlyZWN0bHkgYnV0IG5lZWRz IHRvIGxvb2sgZm9yIHRoZSBidWlsZC1pZCBiYXNlZCBmaWxlIGluIHRoZSBkZWJ1ZworKyMgZGly ZWN0b3J5LgorK3NldCBoaWRkZW5fZGVidWdpbmZvIFtzdGFuZGFyZF9vdXRwdXRfZmlsZSAiaGlk ZGVuXyR0ZXN0ZmlsZS5kZWJ1ZyJdCisrcmVtb3RlX2V4ZWMgYnVpbGQgIm12ICR7YmluZmlsZX0u ZGVidWcgJGhpZGRlbl9kZWJ1Z2luZm8iCisrCisrIyBBIGZpbGVuYW1lIHRoYXQgZG9lc24ndCBl eGlzdC4gIFNvbWUgc3ltbGlua3Mgd2lsbCBwb2ludCBhdCB0aGlzCisrIyBmaWxlLgorK3NldCBt aXNzaW5nX2RlYnVnaW5mbyAibWlzc2luZ19kZWJ1Z2luZm8iCisrCisrIyBIZWxwZXIgY2FsbGVk IGZyb20gZ2RiX2ZpbmlzaCB3aGVuIHRoZSAndGFyZ2V0JyBpcyByZW1vdGUuICBFbnN1cmUgdGhl CisrIyBkZWJ1ZyBkaXJlY3Rvcnkgd2UgY3JlYXRlIGlzIGRlbGV0ZWQuCisrcHJvYyBjbGVhbnVw X3JlbW90ZV90YXJnZXQge30geworKyAgICByZW1vdGVfZXhlYyB0YXJnZXQgInJtIC1mciBkZWJ1 Zy8iCisrfQorKworK2lmIHsgIVtpc19yZW1vdGUgdGFyZ2V0XSB9IHsKKysgICAgc2V0IGdkYnNl cnZlcl9kaXIgW3N0YW5kYXJkX291dHB1dF9maWxlICJnZGJzZXJ2ZXItZGlyIl0vCisrfSBlbHNl IHsKKysgICAgbGFwcGVuZCBnZGJfZmluaXNoX2hvb2tzIGNsZWFudXBfcmVtb3RlX3RhcmdldAor KyAgICBzZXQgZ2Ric2VydmVyX2RpciAiIgorK30KKysKKysjIENvcHkgZmlsZXMgdG8gdGhlIHRh cmdldCAoaWYgbmVlZGVkKS4KKytzZXQgdGFyZ2V0X2JpbmZpbGUgW2dkYl9yZW1vdGVfZG93bmxv YWQgdGFyZ2V0ICRiaW5maWxlXQorK3NldCB0YXJnZXRfZGVidWdpbmZvIFtnZGJfcmVtb3RlX2Rv d25sb2FkIHRhcmdldCAkaGlkZGVuX2RlYnVnaW5mb10KKysKKysjIFNldHVwIHRoZSBkZWJ1ZyBp bmZvcm1hdGlvbiBvbiB0aGUgdGFyZ2V0LgorK3NldCBkZWJ1Z2RpciAiJHtnZGJzZXJ2ZXJfZGly fWRlYnVnIgorK3JlbW90ZV9leGVjIHRhcmdldCBcCisrICAgICJta2RpciAtcCAkZGVidWdkaXIv W2ZpbGUgZGlybmFtZSAkYnVpbGRfaWRfZmlsZW5hbWVdIgorK3JlbW90ZV9leGVjIHRhcmdldCBc CisrICAgICJsbiAtc2YgJHRhcmdldF9kZWJ1Z2luZm8gJGRlYnVnZGlyLyRidWlsZF9pZF9maWxl bmFtZSIKKysKKysjIFN0YXJ0IEdEQiBhbmQgbG9hZCBnbG9iYWwgQklORklMRS4gIElmIERFQlVH SU5GT19GSUxFIGlzIG5vdCB0aGUKKysjIGVtcHR5IHN0cmluZyB0aGVuIHRoaXMgY29udGFpbnMg dGhlICcuYnVpbGQtaWQveHgveHh4Li4uLnh4eHgnIHBhcnQKKysjIG9mIHRoZSBmaWxlbmFtZSB3 aGljaCB3ZSBleHBlY3QgR0RCIHRvIHJlYWQgZnJvbSB0aGUgcmVtb3RlIHRhcmdldC4KKysjIElm IERFQlVHSU5GT19GSUxFIGlzIHRoZSBlbXB0eSBzdHJpbmcgdGhlbiB3ZSBkb24ndCBleHBlY3Qg R0RCIHRvCisrIyBmaW5kIGFueSBkZWJ1ZyBpbmZvcm1hdGlvbi4KKytwcm9jIGxvYWRfYmluZmls ZV9jaGVja19kZWJ1Z19pc19mb3VuZCB7IGRlYnVnaW5mb19maWxlIHRlc3RuYW1lIH0geworKyAg ICB3aXRoX3Rlc3RfcHJlZml4ICIkdGVzdG5hbWUiIHsKKysJd2l0aF90aW1lb3V0X2ZhY3RvciA1 IHsKKysJICAgICMgUHJvYmluZyBmb3IgLmJ1aWxkLWlkIGJhc2VkIGRlYnVnIGZpbGVzIG9uIHJl bW90ZQorKwkgICAgIyB0YXJnZXRzIHVzZXMgdGhlIHZGaWxlOnN0YXQgcGFja2V0IGJ5IGRlZmF1 bHQsIHRob3VnaAorKwkgICAgIyB0aGVyZSBpcyBhIHdvcmsgYXJvdW5kIHRoYXQgYXZvaWRzIHRo aXMgd2hpY2ggY2FuIGJlCisrCSAgICAjIHVzZWQgaWYgR0RCIGlzIGNvbm5lY3RlZCB0byBhbiBv bGRlciBnZGJzZXJ2ZXIgd2l0aG91dAorKwkgICAgIyAnc3RhdCcgc3VwcG9ydC4KKysJICAgICMK KysJICAgICMgQ2hlY2sgdGhlIHdvcmsgYXJvdW5kIHdvcmtzIGJ5IGRpc2FibGluZyB1c2Ugb2Yg dGhlCisrCSAgICAjIHZGaWxlOnN0YXQgcGFja2V0LgorKwkgICAgZm9yZWFjaF93aXRoX3ByZWZp eCBzdGF0X3BrdCB7YXV0byBvZmZ9IHsKKysJCWNsZWFuX3Jlc3RhcnQKKysKKysJCWdkYl90ZXN0 X25vX291dHB1dCAic2V0IGRlYnVnLWZpbGUtZGlyZWN0b3J5IGRlYnVnIiBcCisrCQkgICAgInNl dCBkZWJ1Zy1maWxlLWRpcmVjdG9yeSIKKysKKysJCWdkYl90ZXN0X25vX291dHB1dCAic2V0IHN5 c3Jvb3QgdGFyZ2V0OiIKKysKKysJCWdkYl90ZXN0ICJzZXQgcmVtb3RlIGhvc3Rpby1zdGF0LXBh Y2tldCAkc3RhdF9wa3QiCisrCisrCQkjIE1ha2Ugc3VyZSB3ZSdyZSBkaXNjb25uZWN0ZWQsIGlu IGNhc2Ugd2UncmUgdGVzdGluZyB3aXRoIGFuCisrCQkjIGV4dGVuZGVkLXJlbW90ZSBib2FyZCwg dGhlcmVmb3JlIGFscmVhZHkgY29ubmVjdGVkLgorKwkJZ2RiX3Rlc3QgImRpc2Nvbm5lY3QiICIu KiIKKysKKysJCSMgU3RhcnQgZ2Ric2VydmVyLiAgVGhpcyBuZWVkcyB0byBiZSBkb25lIGFmdGVy IHN0YXJ0aW5nIEdEQi4gIFdoZW4KKysJCSMgZ2Ric2VydmVyIGlzIHJ1bm5pbmcgbG9jYWwgdG8g R0RCLCBzdGFydCBnZGJzZXJ2ZXIgaW4gYSBzdWItZGlyZWN0b3J5LAorKwkJIyB0aGlzIHByZXZl bnRzIEdEQiBmcm9tIGZpbmRpbmcgdGhlIGRlYnVnIGluZm9ybWF0aW9uIGl0c2VsZi4KKysJCWlm IHsgIVtpc19yZW1vdGUgdGFyZ2V0XSB9IHsKKysJCSAgICB3aXRoX2N3ZCAkOjpnZGJzZXJ2ZXJf ZGlyIHsKKysJCQlzZXQgcmVzIFtnZGJzZXJ2ZXJfc3RhcnQgIiIgJDo6dGFyZ2V0X2JpbmZpbGVd CisrCQkgICAgfQorKwkJfSBlbHNlIHsKKysJCSAgICBzZXQgcmVzIFtnZGJzZXJ2ZXJfc3RhcnQg IiIgJDo6dGFyZ2V0X2JpbmZpbGVdCisrCQl9CisrCQlzZXQgZ2Ric2VydmVyX3Byb3RvY29sIFts aW5kZXggJHJlcyAwXQorKwkJc2V0IGdkYnNlcnZlcl9nZGJwb3J0IFtsaW5kZXggJHJlcyAxXQor KworKwkJIyBDb25uZWN0IHRvIGdkYnNlcnZlci4gIFRoZSBvdXRwdXQgd2lsbCBiZSBwbGFjZWQg aW50byB0aGUgZ2xvYmFsCisrCQkjIEdEQl9UQVJHRVRfUkVNT1RFX0NNRF9NU0csIGFuZCB3ZSds bCBtYXRjaCBhZ2FpbnN0IHRoaXMgYmVsb3cuCisrCQlnZGJfYXNzZXJ0IHtbZ2RiX3RhcmdldF9j bWQgJGdkYnNlcnZlcl9wcm90b2NvbCAkZ2Ric2VydmVyX2dkYnBvcnRdID09IDB9IFwKKysJCSAg ICAiY29ubmVjdCB0byBnZGJzZXJ2ZXIiCisrCisrCQlpZiB7ICRkZWJ1Z2luZm9fZmlsZSBuZSAi IiB9IHsKKysJCSAgICBnZGJfYXNzZXJ0IHsgW3JlZ2V4cCAiUmVhZGluZyBzeW1ib2xzIGZyb20g dGFyZ2V0OmRlYnVnL1tzdHJpbmdfdG9fcmVnZXhwICRkZWJ1Z2luZm9fZmlsZV1cXC5cXC5cXC4i IFwKKysJCQkJICAgICAgJDo6Z2RiX3RhcmdldF9yZW1vdGVfY21kX21zZ10gfSBcCisrCQkJImRl YnVnaW5mbyB3YXMgcmVhZCB2aWEgYnVpbGQtaWQiCisrCQkgICAgZ2RiX2Fzc2VydCB7IFtyZWdl eHAgIlJlYWRpbmcgZGVidWcvW3N0cmluZ190b19yZWdleHAgJGRlYnVnaW5mb19maWxlXSBmcm9t IHJlbW90ZSB0YXJnZXRcXC5cXC5cXC4iIFwKKysJCQkJICAgICAgJDo6Z2RiX3RhcmdldF9yZW1v dGVfY21kX21zZ10gfSBcCisrCQkJImRlYnVnaW5mbyB3YXMgcmVhZCBmcm9tIHJlbW90ZSB0YXJn ZXQiCisrCQl9IGVsc2UgeworKwkJICAgIGdkYl9hc3NlcnQgeyBbcmVnZXhwICJcXChObyBkZWJ1 Z2dpbmcgc3ltYm9scyBmb3VuZCBpbiBcW15cclxuXF0rLyQ6OnRlc3RmaWxlXFwpIiBcCisrCQkJ CSAgICAgICQ6OmdkYl90YXJnZXRfcmVtb3RlX2NtZF9tc2ddIH0KKysJCX0KKysJICAgIH0KKysJ fQorKyAgICB9CisrfQorKworKyMgUmV0dXJuIGEgY29weSBvZiBGSUxFTkFNRSwgd2hpY2ggc2hv dWxkIGVuZCAnLmRlYnVnJywgd2l0aCBOVU1CRVIKKysjIGFkZGVkLCBlLmcuIGFkZF9zZXFubyAx ICJmb28uZGVidWciIC0tPiAiZm9vLjEuZGVidWciLgorK3Byb2MgYWRkX3NlcW5vIHsgbnVtYmVy IGZpbGVuYW1lIH0geworKyAgICByZXR1cm4gW3JlZ3N1YiAiXC5kZWJ1Z1wkIiAkZmlsZW5hbWUg Ii4ke251bWJlcn0uZGVidWciXQorK30KKysKKysjIFByZWNvbXB1dGUgc2VxdWVuY2UgbnVtYmVy ZWQgYnVpbGQtaWQgZmlsZW5hbWVzLgorK3NldCBidWlsZF9pZF8xX2ZpbGVuYW1lIFthZGRfc2Vx bm8gMSAkYnVpbGRfaWRfZmlsZW5hbWVdCisrc2V0IGJ1aWxkX2lkXzJfZmlsZW5hbWUgW2FkZF9z ZXFubyAyICRidWlsZF9pZF9maWxlbmFtZV0KKytzZXQgYnVpbGRfaWRfM19maWxlbmFtZSBbYWRk X3NlcW5vIDMgJGJ1aWxkX2lkX2ZpbGVuYW1lXQorKworK2xvYWRfYmluZmlsZV9jaGVja19kZWJ1 Z19pc19mb3VuZCAkYnVpbGRfaWRfZmlsZW5hbWUgXAorKyAgICAiZmluZCBkZWJ1Z2luZm8gd2l0 aCBhIHNpbmdsZSBidWlsZC1pZCBmaWxlIgorKworK3JlbW90ZV9leGVjIHRhcmdldCAibG4gLWZz ICR0YXJnZXRfZGVidWdpbmZvIFwKKysJCQkkZGVidWdkaXIvJGJ1aWxkX2lkXzFfZmlsZW5hbWUi CisrcmVtb3RlX2V4ZWMgdGFyZ2V0ICJsbiAtZnMgJHRhcmdldF9kZWJ1Z2luZm8gXAorKwkJCSRk ZWJ1Z2Rpci8kYnVpbGRfaWRfMl9maWxlbmFtZSIKKytyZW1vdGVfZXhlYyB0YXJnZXQgImxuIC1m cyAkdGFyZ2V0X2RlYnVnaW5mbyBcCisrCQkJJGRlYnVnZGlyLyRidWlsZF9pZF8zX2ZpbGVuYW1l IgorKworK2xvYWRfYmluZmlsZV9jaGVja19kZWJ1Z19pc19mb3VuZCAkYnVpbGRfaWRfZmlsZW5h bWUgXAorKyAgICAiZmluZCBkZWJ1Z2luZm8gd2l0aCA0IGJ1aWxkLWlkIGZpbGVzIgorKworK3Jl bW90ZV9leGVjIHRhcmdldCAibG4gLWZzICRtaXNzaW5nX2RlYnVnaW5mbyAkZGVidWdkaXIvJGJ1 aWxkX2lkX2ZpbGVuYW1lIgorKworK2xvYWRfYmluZmlsZV9jaGVja19kZWJ1Z19pc19mb3VuZCAk YnVpbGRfaWRfMV9maWxlbmFtZSBcCisrICAgICJmaW5kIGRlYnVnaW5mbywgZmlyc3QgYnVpbGQt aWQgZmlsZSBpcyBiYWQiCisrCisrcmVtb3RlX2V4ZWMgdGFyZ2V0ICJsbiAtZnMgJG1pc3Npbmdf ZGVidWdpbmZvIFwKKysJCQkkZGVidWdkaXIvJGJ1aWxkX2lkXzFfZmlsZW5hbWUiCisrcmVtb3Rl X2V4ZWMgdGFyZ2V0ICJsbiAtZnMgJG1pc3NpbmdfZGVidWdpbmZvIFwKKysJCQkkZGVidWdkaXIv JGJ1aWxkX2lkXzNfZmlsZW5hbWUiCisrCisrbG9hZF9iaW5maWxlX2NoZWNrX2RlYnVnX2lzX2Zv dW5kICRidWlsZF9pZF8yX2ZpbGVuYW1lICBcCisrICAgICJmaW5kIGRlYnVnaW5mbywgZmlyc3Qg MiBidWlsZC1pZCBmaWxlcyBhcmUgYmFkIgorKworK3JlbW90ZV9leGVjIHRhcmdldCAibG4gLWZz ICRtaXNzaW5nX2RlYnVnaW5mbyBcCisrCQkJJGRlYnVnZGlyLyRidWlsZF9pZF8yX2ZpbGVuYW1l IgorKworK2xvYWRfYmluZmlsZV9jaGVja19kZWJ1Z19pc19mb3VuZCAiIiAgXAorKyAgICAiY2Fu bm90IGZpbmQgZGVidWdpbmZvLCBhbGwgYnVpbGQtaWQgZmlsZXMgYXJlIGJhZCIKKysKKytyZW1v dGVfZXhlYyB0YXJnZXQgImxuIC1mcyAkdGFyZ2V0X2RlYnVnaW5mbyBcCisrCQkJJGRlYnVnZGly LyRidWlsZF9pZF8zX2ZpbGVuYW1lIgorKworK2xvYWRfYmluZmlsZV9jaGVja19kZWJ1Z19pc19m b3VuZCAkYnVpbGRfaWRfM19maWxlbmFtZSAgXAorKyAgICAiZmluZCBkZWJ1Z2luZm8sIGxhc3Qg YnVpbGQtaWQgZmlsZSBpcyBnb29kIgorKworK3JlbW90ZV9leGVjIHRhcmdldCAicm0gLWYgJGRl YnVnZGlyLyRidWlsZF9pZF8xX2ZpbGVuYW1lIgorKworK2xvYWRfYmluZmlsZV9jaGVja19kZWJ1 Z19pc19mb3VuZCAiIiAgXAorKyAgICAiY2Fubm90IGZpbmQgZGVidWdpbmZvLCBmaWxlIHdpdGgg c2Vxbm8gMSBpcyBtaXNzaW5nIgorZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvbGliL2R3YXJm LmV4cCBiL2dkYi90ZXN0c3VpdGUvbGliL2R3YXJmLmV4cAorLS0tIGEvZ2RiL3Rlc3RzdWl0ZS9s aWIvZHdhcmYuZXhwCisrKysgYi9nZGIvdGVzdHN1aXRlL2xpYi9kd2FyZi5leHAKK0BAIC0yOTkz LDI1ICsyOTkzLDMyIEBAIG5hbWVzcGFjZSBldmFsIER3YXJmIHsKKyAKKyAgICAgcHJvYyBfbm90 ZSB7dHlwZSBuYW1lIGhleGRhdGF9IHsKKyAJc2V0IG5hbWVsZW4gW2V4cHIgW3N0cmluZyBsZW5n dGggJG5hbWVdICsgMV0KKysJc2V0IGRhdGFsZW4gW2V4cHIgW3N0cmluZyBsZW5ndGggJGhleGRh dGFdIC8gMl0KKyAKKyAJIyBOYW1lIHNpemUuCisgCV9vcCAuNGJ5dGUgJG5hbWVsZW4KKyAJIyBE YXRhIHNpemUuCistCV9vcCAuNGJ5dGUgW2V4cHIgW3N0cmluZyBsZW5ndGggJGhleGRhdGFdIC8g Ml0KKysJX29wIC40Ynl0ZSAkZGF0YWxlbgorIAkjIFR5cGUuCisgCV9vcCAuNGJ5dGUgJHR5cGUK KyAJIyBUaGUgbmFtZS4KKyAJX29wIC5hc2NpaSBbX3F1b3RlICRuYW1lXQorLQkjIEFsaWdubWVu dC4KKysJIyBBbGlnbm1lbnQgKHRvIDQtYnl0ZSBib3VuZGFyeSkuCisgCXNldCBhbGlnbiAyCisg CXNldCB0b3RhbCBbZXhwciB7KCRuYW1lbGVuICsgKDEgPDwgJGFsaWduKSAtIDEpICYgLSgxIDw8 ICRhbGlnbil9XQorIAlmb3Ige3NldCBpICRuYW1lbGVufSB7JGkgPCAkdG90YWx9IHtpbmNyIGl9 IHsKKy0JICAgIF9vcCAuYnl0ZSAwCisrCSAgICBfb3AgLmJ5dGUgMCBwYWRkaW5nCisgCX0KKyAJ IyBUaGUgZGF0YS4KKyAJZm9yZWFjaCB7YSBifSBbc3BsaXQgJGhleGRhdGEge31dIHsKKyAJICAg IF9vcCAuYnl0ZSAweCRhJGIKKyAJfQorKwkjIEFsaWdubWVudCAodG8gNC1ieXRlIGJvdW5kYXJ5 KS4KKysJc2V0IGFsaWduIDIKKysJc2V0IHRvdGFsIFtleHByIHsoJGRhdGFsZW4gKyAoMSA8PCAk YWxpZ24pIC0gMSkgJiAtKDEgPDwgJGFsaWduKX1dCisrCWZvciB7c2V0IGkgJGRhdGFsZW59IHsk aSA8ICR0b3RhbH0ge2luY3IgaX0geworKwkgICAgX29wIC5ieXRlIDAgcGFkZGluZworKwl9Cisg ICAgIH0KKyAKKyAgICAgIyBFbWl0IGEgbm90ZSBzZWN0aW9uIGhvbGRpbmcgdGhlIGdpdmVuIGJ1 aWxkLWlkLgorZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvbGliL2dkYi5leHAgYi9nZGIvdGVz dHN1aXRlL2xpYi9nZGIuZXhwCistLS0gYS9nZGIvdGVzdHN1aXRlL2xpYi9nZGIuZXhwCisrKysg Yi9nZGIvdGVzdHN1aXRlL2xpYi9nZGIuZXhwCitAQCAtNTMzNyw2ICs1MzM3LDcgQEAgcHJvYyBx dW90ZV9mb3JfaG9zdCB7IGFyZ3MgfSB7CisgIyAgICAgZGVidWcgaW5mb3JtYXRpb24KKyAjICAg LSB0ZXh0X3NlZ21lbnQ9YWRkcjogVGVsbCB0aGUgbGlua2VyIHRvIHBsYWNlIHRoZSB0ZXh0IHNl Z21lbnQgYXQgQUREUi4KKyAjICAgLSBidWlsZC1pZDogRW5zdXJlIHRoZSBmaW5hbCBiaW5hcnkg aW5jbHVkZXMgYSBidWlsZC1pZC4KKysjICAgLSBuby1idWlsZC1pZDogRW5zdXJlIHRoZSBmaW5h bCBiaW5hcnkgZG9lcyBub3QgaW5jbHVkZSBhIGJ1aWxkLWlkLgorICMgICAtIGNvbHVtbi1pbmZv L25vLWNvbHVtbi1pbmZvOiBFbmFibGUvRGlzYWJsZSBnZW5lcmF0aW9uIG9mIGNvbHVtbiB0YWJs ZQorICMgICAgIGluZm9ybWF0aW9uLgorICMKK0BAIC01NDQ4LDYgKzU0NDksMTggQEAgcHJvYyBn ZGJfY29tcGlsZSB7c291cmNlIGRlc3QgdHlwZSBvcHRpb25zfSB7CisgCWxhcHBlbmQgbmV3X29w dGlvbnMgImFkZGl0aW9uYWxfZmxhZ3M9LVdsLC0tYnVpbGQtaWQiCisgICAgIH0KKyAKKysgICAg IyBJZiB0aGUgJ25vLWJ1aWxkLWlkJyBvcHRpb24gaXMgdXNlZCB0aGVuIGRpc2FibGUgdGhlIGJ1 aWxkLWlkLgorKyAgICBpZiB7W2xzZWFyY2ggLWV4YWN0ICRvcHRpb25zIG5vLWJ1aWxkLWlkXSA+ IDB9IHsKKysJbGFwcGVuZCBuZXdfb3B0aW9ucyAiYWRkaXRpb25hbF9mbGFncz0tV2wsLS1idWls ZC1pZD1ub25lIgorKyAgICB9CisrCisrICAgICMgU2FuaXR5IGNoZWNrLiAgSWYgYm90aCAnYnVp bGQtaWQnIGFuZCAnbm8tYnVpbGQtaWQnIGFyZSB1c2VkCisrICAgICMgdGhlbiB3aGF0IGlzIGV4 cGVjdGVkIGZyb20gdXMhCisrICAgIGlmIHtbbHNlYXJjaCAtZXhhY3QgJG9wdGlvbnMgYnVpbGQt aWRdID4gMAorKwkmJiBbbHNlYXJjaCAtZXhhY3QgJG9wdGlvbnMgbm8tYnVpbGQtaWRdID4gMH0g eworKwllcnJvciAiY2Fubm90IHVzZSBidWlsZC1pZCBhbmQgbm8tYnVpbGQtaWQgb3B0aW9ucyIK KysgICAgfQorKworICAgICAjIFRyZWF0aW5nIC5jIGlucHV0IGZpbGVzIGFzIEMrKyBpcyBkZXBy ZWNhdGVkIGluIENsYW5nLCBzbworICAgICAjIGV4cGxpY2l0bHkgZm9yY2UgQysrIGxhbmd1YWdl LgorICAgICBpZiB7ICEkZ2V0dGluZ19jb21waWxlcl9pbmZvCitAQCAtODE0NCwyMSArODE1Nywy NSBAQCBwcm9jIGdldF9idWlsZF9pZCB7IGZpbGVuYW1lIH0geworIAorICMgUmV0dXJuIHRoZSBi dWlsZC1pZCBoZXggc3RyaW5nICh1c3VhbGx5IDE2MCBiaXRzIGFzIDQwIGhleCBjaGFyYWN0ZXJz KQorICMgY29udmVydGVkIHRvIHRoZSBmb3JtOiAuYnVpbGQtaWQvYWIvY2RlZjEyMzQuLi44OS5k ZWJ1ZworKyMKKysjIFRoZSAnLmRlYnVnJyBzdWZmaXggY2FuIGJlIGNoYW5nZWQgYnkgcGFzc2lu ZyB0aGUgU1VGRklYIGFyZ3VtZW50LgorKyMKKyAjIFJldHVybiAiIiBpZiBubyBidWlsZC1pZCBm b3VuZC4KKy1wcm9jIGJ1aWxkX2lkX2RlYnVnX2ZpbGVuYW1lX2dldCB7IGZpbGVuYW1lIH0gewor K3Byb2MgYnVpbGRfaWRfZGVidWdfZmlsZW5hbWVfZ2V0IHsgZmlsZW5hbWUge3N1ZmZpeCAiLmRl YnVnIn0gfSB7CisgICAgIHNldCBkYXRhIFtnZXRfYnVpbGRfaWQgJGZpbGVuYW1lXQorICAgICBp ZiB7ICRkYXRhID09ICIiIH0geworIAlyZXR1cm4gIiIKKyAgICAgfQorICAgICByZWdzdWIge14u Ln0gJGRhdGEge1wwL30gZGF0YQorLSAgICByZXR1cm4gIi5idWlsZC1pZC8ke2RhdGF9LmRlYnVn IgorKyAgICByZXR1cm4gIi5idWlsZC1pZC8ke2RhdGF9JHtzdWZmaXh9IgorIH0KKyAKKyAjIERF U1Qgc2hvdWxkIGJlIGEgZmlsZSBjb21waWxlZCB3aXRoIGRlYnVnIGluZm9ybWF0aW9uLiAgVGhp cyBwcm9jCistIyBjcmVhdGVzIHR3byBuZXcgZmlsZXMgREVTVC5kZWJ1ZyB3aGljaCBjb250YWlu cyB0aGUgZGVidWcKKy0jIGluZm9ybWF0aW9uIGV4dHJhY3RlZCBmcm9tIERFU1QsIGFuZCBERVNU LnN0cmlwcGVkLCB3aGljaCBpcyBhIGNvcHkKKy0jIG9mIERFU1Qgd2l0aCB0aGUgZGVidWcgaW5m b3JtYXRpb24gcmVtb3ZlZC4gIEEgJy5nbnVfZGVidWdsaW5rJworLSMgc2VjdGlvbiB3aWxsIGJl IGFkZGVkIHRvIERFU1Quc3RyaXBwZWQgdGhhdCBwb2ludHMgdG8gREVTVC5kZWJ1Zy4KKysjIGNy ZWF0ZXMgREVTVC5kZWJ1ZyB3aGljaCBjb250YWlucyB0aGUgZGVidWcgaW5mb3JtYXRpb24gZXh0 cmFjdGVkCisrIyBmcm9tIERFU1QsIGFuZCBERVNUIGlzIHVwZGF0ZWQgd2l0aCB0aGUgZGVidWcg aW5mb3JtYXRpb24gcmVtb3ZlZC4KKysjCisrIyBCeSBkZWZhdWx0IGEgJy5nbnVfZGVidWdsaW5r JyBzZWN0aW9uIHdpbGwgYmUgYWRkZWQgdG8gREVTVCB0aGF0CisrIyBwb2ludHMgdG8gREVTVC5k ZWJ1Zy4KKyAjCisgIyBJZiBBUkdTIGlzIHBhc3NlZCwgaXQgaXMgYSBsaXN0IG9mIG9wdGlvbmFs IGZsYWdzLiAgVGhlIGN1cnJlbnRseQorICMgc3VwcG9ydGVkIGZsYWdzIGFyZToKK0BAIC04MTY2 LDcgKzgxODMsNyBAQCBwcm9jIGJ1aWxkX2lkX2RlYnVnX2ZpbGVuYW1lX2dldCB7IGZpbGVuYW1l IH0geworICMgICAtIG5vLW1haW4gOiByZW1vdmUgdGhlIHN5bWJvbCBlbnRyeSBmb3IgbWFpbiBm cm9tIHRoZSBzZXBhcmF0ZQorICMgICAgICAgICAgICAgICBkZWJ1ZyBmaWxlIERFU1QuZGVidWcs CisgIyAgIC0gbm8tZGVidWdsaW5rIDogZG9uJ3QgYWRkIHRoZSAnLmdudV9kZWJ1Z2xpbmsnIHNl Y3Rpb24gdG8KKy0jICAgICAgICAgICAgICAgICAgICBERVNULnN0cmlwcGVkLgorKyMgICAgICAg ICAgICAgICAgICAgIERFU1QuCisgIworICMgRnVuY3Rpb24gcmV0dXJucyB6ZXJvIG9uIHN1Y2Nl c3MuICBGdW5jdGlvbiB3aWxsIHJldHVybiBub24temVybyBmYWlsdXJlIGNvZGUKKyAjIG9uIHNv bWUgdGFyZ2V0cyBub3Qgc3VwcG9ydGluZyBzZXBhcmF0ZSBkZWJ1ZyBpbmZvIChzdWNoIGFzIGkz ODYtbXNkb3MpLgorQEAgLTgyMjUsMjAgKzgyNDIsMjYgQEAgcHJvYyBnZGJfZ251X3N0cmlwX2Rl YnVnIHsgZGVzdCBhcmdzIH0geworICAgICAjIFVubGVzcyB0aGUgIm5vLWRlYnVnbGluayIgZmxh ZyBpcyBwYXNzZWQsIHRoZW4gbGluayB0aGUgdHdvCisgICAgICMgcHJldmlvdXMgb3V0cHV0IGZp bGVzIHRvZ2V0aGVyLCBhZGRpbmcgdGhlIC5nbnVfZGVidWdsaW5rCisgICAgICMgc2VjdGlvbiB0 byB0aGUgc3RyaXBwZWRfZmlsZSwgY29udGFpbmluZyBhIHBvaW50ZXIgdG8gdGhlCistICAgICMg ZGVidWdfZmlsZSwgc2F2ZSB0aGUgbmV3IGZpbGUgaW4gZGVzdC4KKysgICAgIyBkZWJ1Z19maWxl LgorICAgICBpZiB7W2xzZWFyY2ggLWV4YWN0ICRhcmdzICJuby1kZWJ1Z2xpbmsiXSA9PSAtMX0g eworLQlzZXQgcmVzdWx0IFtjYXRjaCAiZXhlYyAkb2JqY29weV9wcm9ncmFtIC0tYWRkLWdudS1k ZWJ1Z2xpbms9JHtkZWJ1Z19maWxlfSAke3N0cmlwcGVkX2ZpbGV9ICR7ZGVzdH0iIG91dHB1dF0K KysJc2V0IHJlc3VsdCBbY2F0Y2ggImV4ZWMgJG9iamNvcHlfcHJvZ3JhbSAtLWFkZC1nbnUtZGVi dWdsaW5rPSR7ZGVidWdfZmlsZX0gJHtzdHJpcHBlZF9maWxlfSAke3N0cmlwcGVkX2ZpbGV9LXRt cCIgb3V0cHV0XQorIAl2ZXJib3NlICJyZXN1bHQgaXMgJHJlc3VsdCIKKyAJdmVyYm9zZSAib3V0 cHV0IGlzICRvdXRwdXQiCisgCWlmIHskcmVzdWx0ID09IDF9IHsKKyAJICAgIHJldHVybiAxCisg CX0KKysJZmlsZSBkZWxldGUgIiR7c3RyaXBwZWRfZmlsZX0iCisrCWZpbGUgcmVuYW1lICIke3N0 cmlwcGVkX2ZpbGV9LXRtcCIgIiR7c3RyaXBwZWRfZmlsZX0iCisgICAgIH0KKyAKKyAgICAgIyBX b3JrYXJvdW5kIFBSIGJpbnV0aWxzLzEwODAyOgorICAgICAjIFByZXNlcnZlIHRoZSAneCcgYml0 IGFsc28gZm9yIFBJRXMgKFBvc2l0aW9uIEluZGVwZW5kZW50IEV4ZWN1dGFibGVzKS4KKy0gICAg c2V0IHBlcm0gW2ZpbGUgYXR0cmlidXRlcyAke3N0cmlwcGVkX2ZpbGV9IC1wZXJtaXNzaW9uc10K Ky0gICAgZmlsZSBhdHRyaWJ1dGVzICR7ZGVzdH0gLXBlcm1pc3Npb25zICRwZXJtCisrICAgIHNl dCBwZXJtIFtmaWxlIGF0dHJpYnV0ZXMgJHtkZXN0fSAtcGVybWlzc2lvbnNdCisrICAgIGZpbGUg YXR0cmlidXRlcyAke3N0cmlwcGVkX2ZpbGV9IC1wZXJtaXNzaW9ucyAkcGVybQorKworKyAgICAj IE1vdmUgdGhlIHN0cmlwcGVkX2ZpbGUgYmFjayBpbnRvIGRlc3QuCisrICAgIGZpbGUgZGVsZXRl ICR7ZGVzdH0KKysgICAgZmlsZSByZW5hbWUgJHtzdHJpcHBlZF9maWxlfSAke2Rlc3R9CisgCisg ICAgIHJldHVybiAwCisgfQorZGlmZiAtLWdpdCBhL2dkYnNlcnZlci9ob3N0aW8uY2MgYi9nZGJz ZXJ2ZXIvaG9zdGlvLmNjCistLS0gYS9nZGJzZXJ2ZXIvaG9zdGlvLmNjCisrKysgYi9nZGJzZXJ2 ZXIvaG9zdGlvLmNjCitAQCAtNDg2LDYgKzQ4Niw0MiBAQCBoYW5kbGVfZnN0YXQgKGNoYXIgKm93 bl9idWYsIGludCAqbmV3X3BhY2tldF9sZW4pCisgICAgIHdyaXRlX2VubiAob3duX2J1Zik7Cisg fQorIAorK3N0YXRpYyB2b2lkCisraGFuZGxlX3N0YXQgKGNoYXIgKm93bl9idWYsIGludCAqbmV3 X3BhY2tldF9sZW4pCisreworKyAgaW50IGJ5dGVzX3NlbnQ7CisrICBjaGFyICpwOworKyAgc3Ry dWN0IHN0YXQgc3Q7CisrICBzdHJ1Y3QgZmlvX3N0YXQgZnN0OworKyAgY2hhciBmaWxlbmFtZVtI T1NUSU9fUEFUSF9NQVhdOworKworKyAgcCA9IG93bl9idWYgKyBzdHJsZW4gKCJ2RmlsZTpzdGF0 OiIpOworKworKyAgaWYgKHJlcXVpcmVfZmlsZW5hbWUgKCZwLCBmaWxlbmFtZSkKKysgICAgICB8 fCByZXF1aXJlX2VuZCAocCkpCisrICAgIHsKKysgICAgICBob3N0aW9fcGFja2V0X2Vycm9yIChv d25fYnVmKTsKKysgICAgICByZXR1cm47CisrICAgIH0KKysKKysgIGlmIChsc3RhdCAoZmlsZW5h bWUsICZzdCkgPT0gLTEpCisrICAgIHsKKysgICAgICBob3N0aW9fZXJyb3IgKG93bl9idWYpOwor KyAgICAgIHJldHVybjsKKysgICAgfQorKworKyAgaG9zdF90b19maWxlaW9fc3RhdCAoJnN0LCAm ZnN0KTsKKysKKysgIGJ5dGVzX3NlbnQgPSBob3N0aW9fcmVwbHlfd2l0aF9kYXRhIChvd25fYnVm LAorKwkJCQkgICAgICAgKGNoYXIgKikgJmZzdCwgc2l6ZW9mIChmc3QpLAorKwkJCQkgICAgICAg bmV3X3BhY2tldF9sZW4pOworKworKyAgLyogSWYgdGhlIHJlc3BvbnNlIGRvZXMgbm90IGZpdCBp bnRvIGEgc2luZ2xlIHBhY2tldCwgZG8gbm90IGF0dGVtcHQKKysgICAgIHRvIHJldHVybiBhIHBh cnRpYWwgcmVzcG9uc2UsIGJ1dCBzaW1wbHkgZmFpbC4gICovCisrICBpZiAoYnl0ZXNfc2VudCA8 IHNpemVvZiAoZnN0KSkKKysgICAgd3JpdGVfZW5uIChvd25fYnVmKTsKKyt9CisrCisgc3RhdGlj IHZvaWQKKyBoYW5kbGVfY2xvc2UgKGNoYXIgKm93bl9idWYpCisgeworQEAgLTYwMyw2ICs2Mzks OCBAQCBoYW5kbGVfdkZpbGUgKGNoYXIgKm93bl9idWYsIGludCBwYWNrZXRfbGVuLCBpbnQgKm5l d19wYWNrZXRfbGVuKQorICAgICBoYW5kbGVfcHdyaXRlIChvd25fYnVmLCBwYWNrZXRfbGVuKTsK KyAgIGVsc2UgaWYgKHN0YXJ0c3dpdGggKG93bl9idWYsICJ2RmlsZTpmc3RhdDoiKSkKKyAgICAg aGFuZGxlX2ZzdGF0IChvd25fYnVmLCBuZXdfcGFja2V0X2xlbik7CisrICBlbHNlIGlmIChzdGFy dHN3aXRoIChvd25fYnVmLCAidkZpbGU6c3RhdDoiKSkKKysgICAgaGFuZGxlX3N0YXQgKG93bl9i dWYsIG5ld19wYWNrZXRfbGVuKTsKKyAgIGVsc2UgaWYgKHN0YXJ0c3dpdGggKG93bl9idWYsICJ2 RmlsZTpjbG9zZToiKSkKKyAgICAgaGFuZGxlX2Nsb3NlIChvd25fYnVmKTsKKyAgIGVsc2UgaWYg KHN0YXJ0c3dpdGggKG93bl9idWYsICJ2RmlsZTp1bmxpbms6IikpCitkaWZmIC0tZ2l0IGEvZ2Ri c3VwcG9ydC9wYXRoc3R1ZmYuY2MgYi9nZGJzdXBwb3J0L3BhdGhzdHVmZi5jYworLS0tIGEvZ2Ri c3VwcG9ydC9wYXRoc3R1ZmYuY2MKKysrKyBiL2dkYnN1cHBvcnQvcGF0aHN0dWZmLmNjCitAQCAt MTk4LDExICsxOTgsMTcgQEAgcGF0aF9qb2luIChnZGI6OmFycmF5X3ZpZXc8Y29uc3QgY2hhciAq PiBwYXRocykKKyAgICAgeworICAgICAgIGNvbnN0IGNoYXIgKnBhdGggPSBwYXRoc1tpXTsKKyAK Ky0gICAgICBpZiAoaSA+IDApCistCWdkYl9hc3NlcnQgKHN0cmxlbiAocGF0aCkgPT0gMCB8fCAh SVNfQUJTT0xVVEVfUEFUSCAocGF0aCkpOworLQorLSAgICAgIGlmICghcmV0LmVtcHR5ICgpICYm ICFJU19ESVJfU0VQQVJBVE9SIChyZXQuYmFjayAoKSkpCistCSAgcmV0ICs9ICcvJzsKKysgICAg ICBpZiAoIXJldC5lbXB0eSAoKSkKKysJeworKwkgIC8qIElmIFJFVCBkb2Vzbid0IGFscmVhZHkg ZW5kIHdpdGggYSBzZXBhcmF0b3IgdGhlbiBhZGQgb25lLiAgKi8KKysJICBpZiAoIUlTX0RJUl9T RVBBUkFUT1IgKHJldC5iYWNrICgpKSkKKysJICAgIHJldCArPSAnLyc7CisrCisrCSAgLyogTm93 IHRoYXQgUkVUIGVuZHMgd2l0aCBhIHNlcGFyYXRvciwgaWdub3JlIGFueSBhdCB0aGUgc3RhcnQg b2YKKysJICAgICBQQVRILiAgKi8KKysJICB3aGlsZSAoSVNfRElSX1NFUEFSQVRPUiAocGF0aFsw XSkpCisrCSAgICArK3BhdGg7CisrCX0KKyAKKyAgICAgICByZXQuYXBwZW5kIChwYXRoKTsKKyAg ICAgfQorZGlmZiAtLWdpdCBhL2dkYnN1cHBvcnQvcGF0aHN0dWZmLmggYi9nZGJzdXBwb3J0L3Bh dGhzdHVmZi5oCistLS0gYS9nZGJzdXBwb3J0L3BhdGhzdHVmZi5oCisrKysgYi9nZGJzdXBwb3J0 L3BhdGhzdHVmZi5oCitAQCAtNjQsOCArNjQsMTAgQEAgZXh0ZXJuIGNvbnN0IGNoYXIgKmNoaWxk X3BhdGggKGNvbnN0IGNoYXIgKnBhcmVudCwgY29uc3QgY2hhciAqY2hpbGQpOworIAorIC8qIEpv aW4gZWxlbWVudHMgaW4gUEFUSFMgaW50byBhIHNpbmdsZSBwYXRoLgorIAorLSAgIFRoZSBmaXJz dCBlbGVtZW50IGNhbiBiZSBhYnNvbHV0ZSBvciByZWxhdGl2ZS4gIEFsbCB0aGUgb3RoZXJzIG11 c3QgYmUKKy0gICByZWxhdGl2ZS4gICovCisrICAgVGhlIGZpcnN0IGVsZW1lbnQgY2FuIGJlIGFi c29sdXRlIG9yIHJlbGF0aXZlLiAgT25seSBhIHNpbmdsZSBkaXJlY3RvcnkKKysgICBzZXBhcmF0 b3Igd2lsbCBiZSBwbGFjZWQgYmV0d2VlbiBlbGVtZW50cyBvZiBQQVRIUywgaWYgb25lIGVsZW1l bnQgZW5kcworKyAgIHdpdGggYSBkaXJlY3Rvcnkgc2VwYXJhdG9yLCBvciBhbiBlbGVtZW50IHN0 YXJ0cyB3aXRoIGEgZGlyZWN0b3J5CisrICAgc2VwYXJhdG9yLCB0aGVuIHRoZXNlIHdpbGwgYmUg Y29sbGFwc2VkIGludG8gYSBzaW5nbGUgc2VwYXJhdG9yLiAgKi8KKyAKKyBleHRlcm4gc3RkOjpz dHJpbmcgcGF0aF9qb2luIChnZGI6OmFycmF5X3ZpZXc8Y29uc3QgY2hhciAqPiBwYXRocyk7Cisg CgpkaWZmIC0tZ2l0IGEvZ2RiLXJlbW92ZS1xbngtbmV1dHJpbm8tc3VwcG9ydC5wYXRjaCBiL2dk Yi1yZW1vdmUtcW54LW5ldXRyaW5vLXN1cHBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uM2EzNWIxNwotLS0gL2Rldi9udWxsCisrKyBiL2dkYi1yZW1vdmUtcW54 LW5ldXRyaW5vLXN1cHBvcnQucGF0Y2gKQEAgLTAsMCArMSwyOTIzIEBACitGcm9tIEZFRE9SQV9Q QVRDSEVTIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogU2ltb24gTWFyY2hpIDxzaW1v bi5tYXJjaGlAcG9seW10bC5jYT4KK0RhdGU6IFRodSwgMjUgSnVsIDIwMjQgMTM6NDE6MzUgLTA0 MDAKK1N1YmplY3Q6IGdkYi1yZW1vdmUtcW54LW5ldXRyaW5vLXN1cHBvcnQucGF0Y2gKKworOzsg QmFja3BvcnQgb2YgdXBzdHJlYW0gY29tbWl0IDM2ZmIyMGZhOTM0ODRiMTA0ZC4gIFRoaXMgaXMg bm90IHJlYWxseQorOzsgcmVsZXZhbnQgZm9yIG91ciBicmFuY2gsIGJ1dCBsYXRlciBjb21taXRz IHRoYXQgYXJlIGltcG9ydGFudCwgYW5kCis7OyB3aGljaCB3ZSB3YW50IHRvIGJhY2twb3J0LCBj b25mbGljdCB1bmxlc3MgdGhlIGNsZWFudXAgaW4gdGhpcworOzsgcGF0Y2ggaXMgaW4gcGxhY2Uu Cis7OworOzsgVGhpcyBjb21taXQgd2lsbCBiZSBwYXJ0IG9mIEdEQiAxNiwgc28gdGhpcyBiYWNr LXBvcnQgc2hvdWxkIGRyb3AKKzs7IG91dCB3aGVuIHdlIHJlYmFzZSBvbnRvIEdEQiAxNi4KKzs7 Cis7OyBnZGI6IHJlbW92ZSBRTlggTmV1dHJpbm8gc3VwcG9ydAorOzsKKzs7IFJlbW92ZSB0aGUg c3VwcG9ydCBmb3IgdGhlIFFOWCBOZXV0cmlubyBPUyAodGRlcCBhbmQgbmF0aXZlIGJpdHMpLiAg VGhpcworOzsgaGFzIGJlZW4gdW5tYWludGFpbmVkIGZvciB5ZWFycywgYW5kIHdlIGRvbid0IGhh dmUgYSB3YXkgdG8gc2VlIGlmIGl0Cis7OyB3b3JrcyAob3IgZXZlbiBidWlsZHMsIGZvciB0aGUg bmF0aXZlIHBhcnRzKS4gIFdpdGhvdXQgc29tZWJvZHkgYWN0aXZlbHkKKzs7IG1haW50YWluaW5n IGl0LCB0aGlzIGlzIGp1c3QgYSBidXJkZW4gZm9yIGRldmVsb3BlcnMsIGVzcGVjaWFsbHkgdGhh dAorOzsgdGhpcyBwb3J0IGRvZXMgYSBmZXcgd2VpcmQgdW5pcXVlIHRoaW5ncyB0aGF0IHJlcXVp cmUgcmVhc29uaW5nIGFib3V0Cis7OyB3aGVuIGRvaW5nIGJpZyBjaGFuZ2UuCis7OworOzsgU3Vw cG9ydCBmb3IgR0RCc2VydmVyIHdhcyByZW1vdmVkIGluIDIwMjAsIGNvbW1pdCA2MTNmMTQ5YTkw ZDYKKzs7ICgiZ2Ric2VydmVyOiByZW1vdmUgc3VwcG9ydCBmb3IgTmV1dHJpbm8iKS4KKzs7Cis7 OyBDaGFuZ2UtSWQ6IEk0ZTI1ZWMyNmFiMDY2MzY2MjlhZGViZDAyY2ViMTYxZWUzMWMyMzJkCis7 OyBBcHByb3ZlZC1ieTogS2V2aW4gQnVldHRuZXIgPGtldmluYkByZWRoYXQuY29tPgorCitkaWZm IC0tZ2l0IGEvZ2RiL01ha2VmaWxlLmluIGIvZ2RiL01ha2VmaWxlLmluCistLS0gYS9nZGIvTWFr ZWZpbGUuaW4KKysrKyBiL2dkYi9NYWtlZmlsZS5pbgorQEAgLTgyOCw3ICs4MjgsNiBAQCBBTExf VEFSR0VUX09CUyA9IFwKKyAJaTM4Ni1nbzMyLXRkZXAubyBcCisgCWkzODYtbGludXgtdGRlcC5v IFwKKyAJaTM4Ni1uZXRic2QtdGRlcC5vIFwKKy0JaTM4Ni1udG8tdGRlcC5vIFwKKyAJaTM4Ni1v YnNkLXRkZXAubyBcCisgCWkzODYtc29sMi10ZGVwLm8gXAorIAlpMzg2LXRkZXAubyBcCitAQCAt ODU2LDcgKzg1NSw2IEBAIEFMTF9UQVJHRVRfT0JTID0gXAorIAluZHMzMi10ZGVwLm8gXAorIAlu aW9zMi1saW51eC10ZGVwLm8gXAorIAluaW9zMi10ZGVwLm8gXAorLQludG8tdGRlcC5vIFwKKyAJ b2JzZC10ZGVwLm8gXAorIAlvcjFrLWxpbnV4LXRkZXAubyBcCisgCW9yMWstdGRlcC5vIFwKK0BA IC0xNDQxLDcgKzE0MzksNiBAQCBIRklMRVNfTk9fU1JDRElSID0gXAorIAluZHMzMi10ZGVwLmgg XAorIAluaW9zMi10ZGVwLmggXAorIAllbGYtbm9uZS10ZGVwLmggXAorLQludG8tdGRlcC5oIFwK KyAJb2JqYy1sYW5nLmggXAorIAlvYmpmaWxlcy5oIFwKKyAJb2JzZC1uYXQuaCBcCitAQCAtMTU3 Myw3ICsxNTcwLDYgQEAgSEZJTEVTX05PX1NSQ0RJUiA9IFwKKyAJY29tcGlsZS9nY2MtYy1wbHVn aW4uaCBcCisgCWNvbXBpbGUvZ2NjLWNwLXBsdWdpbi5oIFwKKyAJY29uZmlnL25tLWxpbnV4Lmgg XAorLQljb25maWcvbm0tbnRvLmggXAorIAljb25maWcvZGpncHAvbGFuZ2luZm8uaCBcCisgCWNv bmZpZy9kamdwcC9ubF90eXBlcy5oIFwKKyAJY29uZmlnL2kzODYvbm0taTM4NmdudS5oIFwKK2Rp ZmYgLS1naXQgYS9nZGIvY29uZmlnL25tLW50by5oIGIvZ2RiL2NvbmZpZy9ubS1udG8uaAorZGVs ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CistLS0gYS9nZGIvY29uZmlnL25tLW50by5oCisrKysgL2Rl di9udWxsCitAQCAtMSwyOSArMCwwIEBACistLyogTmF0aXZlIHN1cHBvcnQgZm9yIFFOWCBOZXV0 cmlubyB2ZXJzaW9uIDYuCistCistICAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjQgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistCistICAgVGhpcyBjb2RlIHdhcyBkb25hdGVkIGJ5IFFO WCBTb2Z0d2FyZSBTeXN0ZW1zIEx0ZC4KKy0KKy0gICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHREIu CistCistICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkKKy0gICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorLSAgIHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCistICAg KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKy0KKy0gICBUaGlzIHByb2dyYW0g aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy0gICBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgorLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUKKy0gICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk ZXRhaWxzLgorLQorLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCistICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJ ZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworLQorLSNpZm5k ZWYgQ09ORklHX05NX05UT19ICistI2RlZmluZSBDT05GSUdfTk1fTlRPX0gKKy0KKy0vKiBTZXR1 cCB0aGUgdmFsaWQgcmVhbHRpbWUgc2lnbmFsIHJhbmdlLiAgKi8KKy0jZGVmaW5lIFJFQUxUSU1F X0xPIDQxCistI2RlZmluZSBSRUFMVElNRV9ISSA1NgorLQorLSNlbmRpZiAvKiBDT05GSUdfTk1f TlRPX0ggKi8KK2RpZmYgLS1naXQgYS9nZGIvY29uZmlndXJlLmhvc3QgYi9nZGIvY29uZmlndXJl Lmhvc3QKKy0tLSBhL2dkYi9jb25maWd1cmUuaG9zdAorKysrIGIvZ2RiL2NvbmZpZ3VyZS5ob3N0 CitAQCAtMTEwLDcgKzExMCw2IEBAIGlbMzQ1NjddODYtKi1taW5ndzMyKikJZ2RiX2hvc3Q9bWlu Z3cKKyBpWzM0NTY3XTg2LSotbXNkb3NkamdwcCopIGdkYl9ob3N0PWdvMzIgOzsKKyBpWzM0NTY3 XTg2LSotbGludXgqKQlnZGJfaG9zdD1saW51eCA7OworIGlbMzQ1NjddODYtKi1nbnUqKQlnZGJf aG9zdD1pMzg2Z251IDs7CistaVszNDU2XTg2LSotbnRvKikgCWdkYl9ob3N0PW50byA7OworIGlb MzQ1NjddODYtKi1vcGVuYnNkKikJZ2RiX2hvc3Q9b2JzZCA7OworIGlbMzQ1NjddODYtKi1zb2xh cmlzMiogfCB4ODZfNjQtKi1zb2xhcmlzMiopCisgCQkJZ2RiX2hvc3Q9c29sMiA7OworZGlmZiAt LWdpdCBhL2dkYi9jb25maWd1cmUubmF0IGIvZ2RiL2NvbmZpZ3VyZS5uYXQKKy0tLSBhL2dkYi9j b25maWd1cmUubmF0CisrKysgYi9nZGIvY29uZmlndXJlLm5hdAorQEAgLTQyMSwxNSArNDIxLDYg QEAgY2FzZSAke2dkYl9ob3N0fSBpbgorIAorIAllc2FjCisgCTs7CistICAgIG50bykKKy0JY2Fz ZSAke2dkYl9ob3N0X2NwdX0gaW4KKy0JICAgIGkzODYpCistCQkjIEhvc3Q6IEludGVsIDM4NiBy dW5uaW5nIFFOWC4KKy0JCU5BVERFUEZJTEVTPSdudG8tcHJvY2ZzLm8nCistCQlOQVRfRklMRT0n Y29uZmlnL25tLW50by5oJworLQkJOzsKKy0JZXNhYworLQk7OworICAgICBvYnNkKQorIAljYXNl ICR7Z2RiX2hvc3RfY3B1fSBpbgorIAkgICAgaTM4NikKK2RpZmYgLS1naXQgYS9nZGIvY29uZmln dXJlLnRndCBiL2dkYi9jb25maWd1cmUudGd0CistLS0gYS9nZGIvY29uZmlndXJlLnRndAorKysr IGIvZ2RiL2NvbmZpZ3VyZS50Z3QKK0BAIC0zMDQsMTEgKzMwNCw2IEBAIGlbMzQ1NjddODYtKi1v cGVuYnNkKikKKyAJIyBUYXJnZXQ6IE9wZW5CU0QvaTM4NgorIAlnZGJfdGFyZ2V0X29icz0iaTM4 Ni1ic2QtdGRlcC5vIGkzODYtb2JzZC10ZGVwLm8gYnNkLXV0aHJlYWQubyIKKyAJOzsKKy1pWzM0 NTY3XTg2LSotbnRvKikKKy0JIyBUYXJnZXQ6IEludGVsIDM4NiBydW5uaW5nIHFueDYuCistCWdk Yl90YXJnZXRfb2JzPSJzb2xpYi1zdnI0Lm8gXAorLQkJCWkzODYtbnRvLXRkZXAubyBudG8tdGRl cC5vIgorLQk7OworIGlbMzQ1NjddODYtKi1zb2xhcmlzMiogfCB4ODZfNjQtKi1zb2xhcmlzMiop CisgCSMgVGFyZ2V0OiBTb2xhcmlzIHg4Nl82NAorIAlnZGJfdGFyZ2V0X29icz0iJHtpMzg2X3Rv YmpzfSAke2FtZDY0X3RvYmpzfSBcCitAQCAtODAzLDcgKzc5OCw2IEBAIGNhc2UgIiR7dGFyZ30i IGluCisgCQlnZGJfb3NhYmk9R0RCX09TQUJJX0ZSRUVCU0QgOzsKKyAqLSotbGludXgqIHwgKi0q LXVjbGludXgqKQorIAkJZ2RiX29zYWJpPUdEQl9PU0FCSV9MSU5VWCA7OworLSotKi1udG8qKQln ZGJfb3NhYmk9R0RCX09TQUJJX1FOWE5UTyA7OworIG02OCotKi1vcGVuYnNkKiB8IG04OCotKi1v cGVuYnNkKiB8IHZheC0qLW9wZW5ic2QqKSA7OworICotKi1vcGVuYnNkKikJZ2RiX29zYWJpPUdE Ql9PU0FCSV9PUEVOQlNEIDs7CisgKi0qLXNvbGFyaXMqKQlnZGJfb3NhYmk9R0RCX09TQUJJX1NP TEFSSVMgOzsKK2RpZmYgLS1naXQgYS9nZGIvZG9jL2dkYi50ZXhpbmZvIGIvZ2RiL2RvYy9nZGIu dGV4aW5mbworLS0tIGEvZ2RiL2RvYy9nZGIudGV4aW5mbworKysrIGIvZ2RiL2RvYy9nZGIudGV4 aW5mbworQEAgLTI3NDIsNyArMjc0Miw3IEBACisgQGVuZCBzbWFsbGV4YW1wbGUKKyAKKyBUaGlz IGNvbW1hbmQgaXMgYXZhaWxhYmxlIHdoZW4gZGVidWdnaW5nIGxvY2FsbHkgb24gbW9zdCB0YXJn ZXRzLCBleGNsdWRpbmcKKy1Ac2N7ZGpncHB9LCBDeWd3aW4sIE1TIFdpbmRvd3MsIGFuZCBRTlgg TmV1dHJpbm8uCisrQHNje2RqZ3BwfSwgQ3lnd2luLCBhbmQgTVMgV2luZG93cy4KKyAKKyBAa2lu ZGV4IHNldCBzdGFydHVwLXdpdGgtc2hlbGwKKyBAYW5jaG9ye3NldCBzdGFydHVwLXdpdGgtc2hl bGx9CitAQCAtMjIwMTEsNyArMjIwMTEsNyBAQAorIEBjaW5kZXggc2hhcmVkIGxpYnJhcmllcwor IEBhbmNob3J7U2hhcmVkIExpYnJhcmllc30KKyBAdmFsdWV7R0RCTn0gc3VwcG9ydHMgQHNje2du dX0vTGludXgsIE1TLVdpbmRvd3MsIFN1bk9TLAorLURhcndpbi9NYWNoLU8sIFNWcjQsIElCTSBS Uy82MDAwIEFJWCwgUU5YIE5ldXRyaW5vLCBGRFBJQyAoRlItViksIGFuZAorK0Rhcndpbi9NYWNo LU8sIFNWcjQsIElCTSBSUy82MDAwIEFJWCwgRkRQSUMgKEZSLVYpLCBhbmQKKyBEU0JUIChUSUM2 WCkgc2hhcmVkIGxpYnJhcmllcy4KKyAKKyBPbiBNUy1XaW5kb3dzIEB2YWx1ZXtHREJOfSBtdXN0 IGJlIGxpbmtlZCB3aXRoIHRoZSBFeHBhdCBsaWJyYXJ5IHRvIHN1cHBvcnQKK0BAIC0yNTIwMywx NiArMjUyMDMsNiBAQAorIFRoZXNlIGNvbW1hbmRzIGVuYWJsZSBhbmQgZGlzYWJsZSB0cmFjaW5n IG9mIGVudHJpZXMgaW50byBhbmQgZXhpdHMKKyBmcm9tIHRoZSBAY29kZXtzeXNjYWxsfSBpbnRl cmZhY2UuCisgCistQGl0ZW0gaW5mbyBwaWRsaXN0CistQGtpbmRleCBpbmZvIHBpZGxpc3QKKy1A Y2luZGV4IHByb2Nlc3MgbGlzdCwgUU5YIE5ldXRyaW5vCistRm9yIFFOWCBOZXV0cmlubyBvbmx5 LCB0aGlzIGNvbW1hbmQgZGlzcGxheXMgdGhlIGxpc3Qgb2YgYWxsIHRoZQorLXByb2Nlc3NlcyBh bmQgYWxsIHRoZSB0aHJlYWRzIHdpdGhpbiBlYWNoIHByb2Nlc3MuCistCistQGl0ZW0gaW5mbyBt ZW1pbmZvCistQGtpbmRleCBpbmZvIG1lbWluZm8KKy1AY2luZGV4IG1hcGluZm8gbGlzdCwgUU5Y IE5ldXRyaW5vCistRm9yIFFOWCBOZXV0cmlubyBvbmx5LCB0aGlzIGNvbW1hbmQgZGlzcGxheXMg dGhlIGxpc3Qgb2YgYWxsIG1hcGluZm9zLgorIEBlbmQgdGFibGUKKyAKKyBAbm9kZSBESkdQUCBO YXRpdmUKK2RpZmYgLS1naXQgYS9nZGIvaTM4Ni1udG8tdGRlcC5jIGIvZ2RiL2kzODYtbnRvLXRk ZXAuYworZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CistLS0gYS9nZGIvaTM4Ni1udG8tdGRlcC5j CisrKysgL2Rldi9udWxsCitAQCAtMSwzNzkgKzAsMCBAQAorLS8qIFRhcmdldC1kZXBlbmRlbnQg Y29kZSBmb3IgUU5YIE5ldXRyaW5vIHg4Ni4KKy0KKy0gICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAy NCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy0KKy0gICBDb250cmlidXRlZCBieSBR TlggU29mdHdhcmUgU3lzdGVtcyBMdGQuCistCistICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0RC LgorLQorLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CistICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKy0gICB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorLSAg IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCistCistICAgVGhpcyBwcm9ncmFt IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCistICAg YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKKy0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuICBTZWUgdGhlCistICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KKy0KKy0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAg SWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKy0KKy0jaW5j bHVkZSAiZXh0cmFjdC1zdG9yZS1pbnRlZ2VyLmgiCistI2luY2x1ZGUgImZyYW1lLmgiCistI2lu Y2x1ZGUgIm9zYWJpLmgiCistI2luY2x1ZGUgInJlZ2NhY2hlLmgiCistI2luY2x1ZGUgInRhcmdl dC5oIgorLQorLSNpbmNsdWRlICJpMzg2LXRkZXAuaCIKKy0jaW5jbHVkZSAiaTM4Ny10ZGVwLmgi CistI2luY2x1ZGUgIm50by10ZGVwLmgiCistI2luY2x1ZGUgInNvbGliLmgiCistI2luY2x1ZGUg InNvbGliLXN2cjQuaCIKKy0KKy0jaWZuZGVmIFg4Nl9DUFVfRlhTUgorLSNkZWZpbmUgWDg2X0NQ VV9GWFNSICgxTCA8PCAxMikKKy0jZW5kaWYKKy0KKy0vKiBXaHkgMTM/ICBMb29rIGluIG91ciAv dXNyL2luY2x1ZGUveDg2L2NvbnRleHQuaCBoZWFkZXIgYXQgdGhlCistICAgeDg2X2NwdV9yZWdp c3RlcnMgc3RydWN0dXJlIGFuZCB5b3UnbGwgc2VlIGFuICdleHgnIGp1bmsgcmVnaXN0ZXIKKy0g ICB0aGF0IGlzIGp1c3QgZmlsbGVyLiAgRG9uJ3QgYXNrIG1lLCBhc2sgdGhlIGtlcm5lbCBndXlz LiAgKi8KKy0jZGVmaW5lIE5VTV9HUFJFR1MgMTMKKy0KKy0vKiBNYXBwaW5nIGJldHdlZW4gdGhl IGdlbmVyYWwtcHVycG9zZSByZWdpc3RlcnMgaW4gYHN0cnVjdCB4eHgnCistICAgZm9ybWF0IGFu ZCBHREIncyByZWdpc3RlciBjYWNoZSBsYXlvdXQuICAqLworLQorLS8qIEZyb20gPHg4Ni9jb250 ZXh0Lmg+LiAgKi8KKy1zdGF0aWMgaW50IGkzODZudG9fZ3JlZ3NldF9yZWdfb2Zmc2V0W10gPQor LXsKKy0gIDcgKiA0LAkJCS8qICVlYXggKi8KKy0gIDYgKiA0LAkJCS8qICVlY3ggKi8KKy0gIDUg KiA0LAkJCS8qICVlZHggKi8KKy0gIDQgKiA0LAkJCS8qICVlYnggKi8KKy0gIDExICogNCwJCQkv KiAlZXNwICovCistICAyICogNCwJCQkvKiAlZXBiICovCistICAxICogNCwJCQkvKiAlZXNpICov CistICAwICogNCwJCQkvKiAlZWRpICovCistICA4ICogNCwJCQkvKiAlZWlwICovCistICAxMCAq IDQsCQkJLyogJWVmbGFncyAqLworLSAgOSAqIDQsCQkJLyogJWNzICovCistICAxMiAqIDQsCQkJ LyogJXNzICovCistICAtMQkJCQkvKiBmaWxsZXIgKi8KKy19OworLQorLS8qIEdpdmVuIGEgR0RC IHJlZ2lzdGVyIG51bWJlciBSRUdOVU0sIHJldHVybiB0aGUgb2Zmc2V0IGludG8KKy0gICBOZXV0 cmlubydzIHJlZ2lzdGVyIHN0cnVjdHVyZSBvciAtMSBpZiB0aGUgcmVnaXN0ZXIgaXMgdW5rbm93 bi4gICovCistCistc3RhdGljIGludAorLW50b19yZWdfb2Zmc2V0IChpbnQgcmVnbnVtKQorLXsK Ky0gIGlmIChyZWdudW0gPj0gMCAmJiByZWdudW0gPCBBUlJBWV9TSVpFIChpMzg2bnRvX2dyZWdz ZXRfcmVnX29mZnNldCkpCistICAgIHJldHVybiBpMzg2bnRvX2dyZWdzZXRfcmVnX29mZnNldFty ZWdudW1dOworLQorLSAgcmV0dXJuIC0xOworLX0KKy0KKy1zdGF0aWMgdm9pZAorLWkzODZudG9f c3VwcGx5X2dyZWdzZXQgKHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsIGNoYXIgKmdwcmVncykK Ky17CistICBzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCA9IHJlZ2NhY2hlLT5hcmNoICgpOworLSAg aTM4Nl9nZGJhcmNoX3RkZXAgKnRkZXAgPSBnZGJhcmNoX3RkZXA8aTM4Nl9nZGJhcmNoX3RkZXA+ IChnZGJhcmNoKTsKKy0KKy0gIGdkYl9hc3NlcnQgKHRkZXAtPmdyZWdzZXRfcmVnX29mZnNldCA9 PSBpMzg2bnRvX2dyZWdzZXRfcmVnX29mZnNldCk7CistICBpMzg2X2dyZWdzZXQuc3VwcGx5X3Jl Z3NldCAoJmkzODZfZ3JlZ3NldCwgcmVnY2FjaGUsIC0xLAorLQkJCSAgICAgIGdwcmVncywgTlVN X0dQUkVHUyAqIDQpOworLX0KKy0KKy1zdGF0aWMgdm9pZAorLWkzODZudG9fc3VwcGx5X2ZwcmVn c2V0IChzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBjaGFyICpmcHJlZ3MpCisteworLSAgaWYg KG50b19jcHVpbmZvX3ZhbGlkICYmIG50b19jcHVpbmZvX2ZsYWdzIHwgWDg2X0NQVV9GWFNSKQor LSAgICBpMzg3X3N1cHBseV9meHNhdmUgKHJlZ2NhY2hlLCAtMSwgZnByZWdzKTsKKy0gIGVsc2UK Ky0gICAgaTM4N19zdXBwbHlfZnNhdmUgKHJlZ2NhY2hlLCAtMSwgZnByZWdzKTsKKy19CistCist c3RhdGljIHZvaWQKKy1pMzg2bnRvX3N1cHBseV9yZWdzZXQgKHN0cnVjdCByZWdjYWNoZSAqcmVn Y2FjaGUsIGludCByZWdzZXQsIGNoYXIgKmRhdGEpCisteworLSAgc3dpdGNoIChyZWdzZXQpCist ICAgIHsKKy0gICAgY2FzZSBOVE9fUkVHX0dFTkVSQUw6CistICAgICAgaTM4Nm50b19zdXBwbHlf Z3JlZ3NldCAocmVnY2FjaGUsIGRhdGEpOworLSAgICAgIGJyZWFrOworLSAgICBjYXNlIE5UT19S RUdfRkxPQVQ6CistICAgICAgaTM4Nm50b19zdXBwbHlfZnByZWdzZXQgKHJlZ2NhY2hlLCBkYXRh KTsKKy0gICAgICBicmVhazsKKy0gICAgfQorLX0KKy0KKy1zdGF0aWMgaW50CistaTM4Nm50b19y ZWdzZXRfaWQgKGludCByZWdubykKKy17CistICBpZiAocmVnbm8gPT0gLTEpCistICAgIHJldHVy biBOVE9fUkVHX0VORDsKKy0gIGVsc2UgaWYgKHJlZ25vIDwgSTM4Nl9OVU1fR1JFR1MpCistICAg IHJldHVybiBOVE9fUkVHX0dFTkVSQUw7CistICBlbHNlIGlmIChyZWdubyA8IEkzODZfTlVNX0dS RUdTICsgSTM4N19OVU1fUkVHUykKKy0gICAgcmV0dXJuIE5UT19SRUdfRkxPQVQ7CistICBlbHNl IGlmIChyZWdubyA8IEkzODZfU1NFX05VTV9SRUdTKQorLSAgICByZXR1cm4gTlRPX1JFR19GTE9B VDsgLyogV2Ugc3RvcmUgeG1tIHJlZ2lzdGVycyBpbiBmeHNhdmVfYXJlYS4gICovCistCistICBy ZXR1cm4gLTE7CQkJLyogRXJyb3IuICAqLworLX0KKy0KKy1zdGF0aWMgaW50CistaTM4Nm50b19y ZWdpc3Rlcl9hcmVhIChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwKKy0JCSAgICAgICBpbnQgcmVn bm8sIGludCByZWdzZXQsIHVuc2lnbmVkICpvZmYpCisteworLSAgaTM4Nl9nZGJhcmNoX3RkZXAg KnRkZXAgPSBnZGJhcmNoX3RkZXA8aTM4Nl9nZGJhcmNoX3RkZXA+IChnZGJhcmNoKTsKKy0KKy0g ICpvZmYgPSAwOworLSAgaWYgKHJlZ3NldCA9PSBOVE9fUkVHX0dFTkVSQUwpCistICAgIHsKKy0g ICAgICBpZiAocmVnbm8gPT0gLTEpCistCXJldHVybiBOVU1fR1BSRUdTICogNDsKKy0KKy0gICAg ICAqb2ZmID0gbnRvX3JlZ19vZmZzZXQgKHJlZ25vKTsKKy0gICAgICBpZiAoKm9mZiA9PSAtMSkK Ky0JcmV0dXJuIDA7CistICAgICAgcmV0dXJuIDQ7CistICAgIH0KKy0gIGVsc2UgaWYgKHJlZ3Nl dCA9PSBOVE9fUkVHX0ZMT0FUKQorLSAgICB7CistICAgICAgdW5zaWduZWQgb2ZmX2FkanVzdCwg cmVnc2l6ZSwgcmVnc2V0X3NpemUsIHJlZ25vX2Jhc2U7CistICAgICAgLyogVGhlIGZvbGxvd2lu ZyBhcmUgZmxhZ3MgaW5kaWNhdGluZyBudW1iZXIgaW4gb3VyIGZ4c2F2ZV9hcmVhLiAgKi8KKy0g ICAgICBpbnQgZmlyc3RfZm91ciA9IChyZWdubyA+PSBJMzg3X0ZDVFJMX1JFR05VTSAodGRlcCkK Ky0JCQkmJiByZWdubyA8PSBJMzg3X0ZJU0VHX1JFR05VTSAodGRlcCkpOworLSAgICAgIGludCBz ZWNvbmRfZm91ciA9IChyZWdubyA+IEkzODdfRklTRUdfUkVHTlVNICh0ZGVwKQorLQkJCSAmJiBy ZWdubyA8PSBJMzg3X0ZPUF9SRUdOVU0gKHRkZXApKTsKKy0gICAgICBpbnQgc3RfcmVnID0gKHJl Z25vID49IEkzODdfU1QwX1JFR05VTSAodGRlcCkKKy0JCSAgICAmJiByZWdubyA8IEkzODdfU1Qw X1JFR05VTSAodGRlcCkgKyA4KTsKKy0gICAgICBpbnQgeG1tX3JlZyA9IChyZWdubyA+PSBJMzg3 X1hNTTBfUkVHTlVNICh0ZGVwKQorLQkJICAgICAmJiByZWdubyA8IEkzODdfTVhDU1JfUkVHTlVN ICh0ZGVwKSk7CistCistICAgICAgaWYgKG50b19jcHVpbmZvX3ZhbGlkICYmIG50b19jcHVpbmZv X2ZsYWdzIHwgWDg2X0NQVV9GWFNSKQorLQl7CistCSAgb2ZmX2FkanVzdCA9IDMyOworLQkgIHJl Z3NpemUgPSAxNjsKKy0JICByZWdzZXRfc2l6ZSA9IDUxMjsKKy0JICAvKiBmeHNhdmVfYXJlYSBz dHJ1Y3R1cmUuICAqLworLQkgIGlmIChmaXJzdF9mb3VyKQorLQkgICAgeworLQkgICAgICAvKiBm cHVfY29udHJvbF93b3JkLCBmcHVfc3RhdHVzX3dvcmQsIGZwdV90YWdfd29yZCwgZnB1X29wZXJh bmQKKy0JCSByZWdpc3RlcnMuICAqLworLQkgICAgICByZWdzaXplID0gMjsgLyogVHdvIGJ5dGVz IGVhY2guICAqLworLQkgICAgICBvZmZfYWRqdXN0ID0gMDsKKy0JICAgICAgcmVnbm9fYmFzZSA9 IEkzODdfRkNUUkxfUkVHTlVNICh0ZGVwKTsKKy0JICAgIH0KKy0JICBlbHNlIGlmIChzZWNvbmRf Zm91cikKKy0JICAgIHsKKy0JICAgICAgLyogZnB1X2lwLCBmcHVfY3MsIGZwdV9vcCwgZnB1X2Rz IHJlZ2lzdGVycy4gICovCistCSAgICAgIHJlZ3NpemUgPSA0OworLQkgICAgICBvZmZfYWRqdXN0 ID0gODsKKy0JICAgICAgcmVnbm9fYmFzZSA9IEkzODdfRklTRUdfUkVHTlVNICh0ZGVwKSArIDE7 CistCSAgICB9CistCSAgZWxzZSBpZiAoc3RfcmVnKQorLQkgICAgeworLQkgICAgICAvKiBTVCBy ZWdpc3RlcnMuICAqLworLQkgICAgICByZWdzaXplID0gMTY7CistCSAgICAgIG9mZl9hZGp1c3Qg PSAzMjsKKy0JICAgICAgcmVnbm9fYmFzZSA9IEkzODdfU1QwX1JFR05VTSAodGRlcCk7CistCSAg ICB9CistCSAgZWxzZSBpZiAoeG1tX3JlZykKKy0JICAgIHsKKy0JICAgICAgLyogWE1NIHJlZ2lz dGVycy4gICovCistCSAgICAgIHJlZ3NpemUgPSAxNjsKKy0JICAgICAgb2ZmX2FkanVzdCA9IDE2 MDsKKy0JICAgICAgcmVnbm9fYmFzZSA9IEkzODdfWE1NMF9SRUdOVU0gKHRkZXApOworLQkgICAg fQorLQkgIGVsc2UgaWYgKHJlZ25vID09IEkzODdfTVhDU1JfUkVHTlVNICh0ZGVwKSkKKy0JICAg IHsKKy0JICAgICAgcmVnc2l6ZSA9IDQ7CistCSAgICAgIG9mZl9hZGp1c3QgPSAyNDsKKy0JICAg ICAgcmVnbm9fYmFzZSA9IEkzODdfTVhDU1JfUkVHTlVNICh0ZGVwKTsKKy0JICAgIH0KKy0JICBl bHNlCistCSAgICB7CistCSAgICAgIC8qIFdob2xlIHJlZ3NldC4gICovCistCSAgICAgIGdkYl9h c3NlcnQgKHJlZ25vID09IC0xKTsKKy0JICAgICAgb2ZmX2FkanVzdCA9IDA7CistCSAgICAgIHJl Z25vX2Jhc2UgPSAwOworLQkgICAgICByZWdzaXplID0gcmVnc2V0X3NpemU7CistCSAgICB9Cist CX0KKy0gICAgICBlbHNlCistCXsKKy0JICByZWdzZXRfc2l6ZSA9IDEwODsKKy0JICAvKiBmc2F2 ZV9hcmVhIHN0cnVjdHVyZS4gICovCistCSAgaWYgKGZpcnN0X2ZvdXIgfHwgc2Vjb25kX2ZvdXIp CistCSAgICB7CistCSAgICAgIC8qIGZwdV9jb250cm9sX3dvcmQsIC4uLiAsIGZwdV9kcyByZWdp c3RlcnMuICAqLworLQkgICAgICByZWdzaXplID0gNDsKKy0JICAgICAgb2ZmX2FkanVzdCA9IDA7 CistCSAgICAgIHJlZ25vX2Jhc2UgPSBJMzg3X0ZDVFJMX1JFR05VTSAodGRlcCk7CistCSAgICB9 CistCSAgZWxzZSBpZiAoc3RfcmVnKQorLQkgICAgeworLQkgICAgICAvKiBPbmUgb2YgU1QgcmVn aXN0ZXJzLiAgKi8KKy0JICAgICAgcmVnc2l6ZSA9IDEwOworLQkgICAgICBvZmZfYWRqdXN0ID0g NyAqIDQ7CistCSAgICAgIHJlZ25vX2Jhc2UgPSBJMzg3X1NUMF9SRUdOVU0gKHRkZXApOworLQkg ICAgfQorLQkgIGVsc2UKKy0JICAgIHsKKy0JICAgICAgLyogV2hvbGUgcmVnc2V0LiAgKi8KKy0J ICAgICAgZ2RiX2Fzc2VydCAocmVnbm8gPT0gLTEpOworLQkgICAgICBvZmZfYWRqdXN0ID0gMDsK Ky0JICAgICAgcmVnbm9fYmFzZSA9IDA7CistCSAgICAgIHJlZ3NpemUgPSByZWdzZXRfc2l6ZTsK Ky0JICAgIH0KKy0JfQorLQorLSAgICAgIGlmIChyZWdubyAhPSAtMSkKKy0JKm9mZiA9IG9mZl9h ZGp1c3QgKyAocmVnbm8gLSByZWdub19iYXNlKSAqIHJlZ3NpemU7CistICAgICAgZWxzZQorLQkq b2ZmID0gMDsKKy0gICAgICByZXR1cm4gcmVnc2l6ZTsKKy0gICAgfQorLSAgcmV0dXJuIC0xOwor LX0KKy0KKy1zdGF0aWMgaW50CistaTM4Nm50b19yZWdzZXRfZmlsbCAoY29uc3Qgc3RydWN0IHJl Z2NhY2hlICpyZWdjYWNoZSwgaW50IHJlZ3NldCwgY2hhciAqZGF0YSkKKy17CistICBpZiAocmVn c2V0ID09IE5UT19SRUdfR0VORVJBTCkKKy0gICAgeworLSAgICAgIGludCByZWdubzsKKy0KKy0g ICAgICBmb3IgKHJlZ25vID0gMDsgcmVnbm8gPCBOVU1fR1BSRUdTOyByZWdubysrKQorLQl7Cist CSAgaW50IG9mZnNldCA9IG50b19yZWdfb2Zmc2V0IChyZWdubyk7CistCSAgaWYgKG9mZnNldCAh PSAtMSkKKy0JICAgIHJlZ2NhY2hlLT5yYXdfY29sbGVjdCAocmVnbm8sIGRhdGEgKyBvZmZzZXQp OworLQl9CistICAgIH0KKy0gIGVsc2UgaWYgKHJlZ3NldCA9PSBOVE9fUkVHX0ZMT0FUKQorLSAg ICB7CistICAgICAgaWYgKG50b19jcHVpbmZvX3ZhbGlkICYmIG50b19jcHVpbmZvX2ZsYWdzIHwg WDg2X0NQVV9GWFNSKQorLQlpMzg3X2NvbGxlY3RfZnhzYXZlIChyZWdjYWNoZSwgLTEsIGRhdGEp OworLSAgICAgIGVsc2UKKy0JaTM4N19jb2xsZWN0X2ZzYXZlIChyZWdjYWNoZSwgLTEsIGRhdGEp OworLSAgICB9CistICBlbHNlCistICAgIHJldHVybiAtMTsKKy0KKy0gIHJldHVybiAwOworLX0K Ky0KKy0vKiBSZXR1cm4gd2hldGhlciBUSElTX0ZSQU1FIGNvcnJlc3BvbmRzIHRvIGEgUU5YIE5l dXRyaW5vIHNpZ3RyYW1wCistICAgcm91dGluZS4gICovCistCistc3RhdGljIGludAorLWkzODZu dG9fc2lndHJhbXBfcCAoY29uc3QgZnJhbWVfaW5mb19wdHIgJnRoaXNfZnJhbWUpCisteworLSAg Q09SRV9BRERSIHBjID0gZ2V0X2ZyYW1lX3BjICh0aGlzX2ZyYW1lKTsKKy0gIGNvbnN0IGNoYXIg Km5hbWU7CistCistICBmaW5kX3BjX3BhcnRpYWxfZnVuY3Rpb24gKHBjLCAmbmFtZSwgTlVMTCwg TlVMTCk7CistICByZXR1cm4gbmFtZSAmJiBzdHJjbXAgKCJfX3NpZ25hbHN0dWIiLCBuYW1lKSA9 PSAwOworLX0KKy0KKy0vKiBBc3N1bWluZyBUSElTX0ZSQU1FIGlzIGEgUU5YIE5ldXRyaW5vIHNp Z3RyYW1wIHJvdXRpbmUsIHJldHVybiB0aGUKKy0gICBhZGRyZXNzIG9mIHRoZSBhc3NvY2lhdGVk IHNpZ2NvbnRleHQgc3RydWN0dXJlLiAgKi8KKy0KKy1zdGF0aWMgQ09SRV9BRERSCistaTM4Nm50 b19zaWdjb250ZXh0X2FkZHIgKGNvbnN0IGZyYW1lX2luZm9fcHRyICZ0aGlzX2ZyYW1lKQorLXsK Ky0gIHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoID0gZ2V0X2ZyYW1lX2FyY2ggKHRoaXNfZnJhbWUp OworLSAgZW51bSBiZmRfZW5kaWFuIGJ5dGVfb3JkZXIgPSBnZGJhcmNoX2J5dGVfb3JkZXIgKGdk YmFyY2gpOworLSAgZ2RiX2J5dGUgYnVmWzRdOworLSAgQ09SRV9BRERSIHB0cmN0eDsKKy0KKy0g IC8qIFdlIHN0b3JlIF9fdWNvbnRleHRfdCBhZGRyIGluIEVESSByZWdpc3Rlci4gICovCistICBn ZXRfZnJhbWVfcmVnaXN0ZXIgKHRoaXNfZnJhbWUsIEkzODZfRURJX1JFR05VTSwgYnVmKTsKKy0g IHB0cmN0eCA9IGV4dHJhY3RfdW5zaWduZWRfaW50ZWdlciAoYnVmLCA0LCBieXRlX29yZGVyKTsK Ky0gIHB0cmN0eCArPSAyNCAvKiBDb250ZXh0IHBvaW50ZXIgaXMgYXQgdGhpcyBvZmZzZXQuICAq LzsKKy0KKy0gIHJldHVybiBwdHJjdHg7CistfQorLQorLXN0YXRpYyB2b2lkCistaW5pdF9pMzg2 bnRvX29wcyAodm9pZCkKKy17CistICBudG9fcmVnc2V0X2lkID0gaTM4Nm50b19yZWdzZXRfaWQ7 CistICBudG9fc3VwcGx5X2dyZWdzZXQgPSBpMzg2bnRvX3N1cHBseV9ncmVnc2V0OworLSAgbnRv X3N1cHBseV9mcHJlZ3NldCA9IGkzODZudG9fc3VwcGx5X2ZwcmVnc2V0OworLSAgbnRvX3N1cHBs eV9hbHRyZWdzZXQgPSBudG9fZHVtbXlfc3VwcGx5X3JlZ3NldDsKKy0gIG50b19zdXBwbHlfcmVn c2V0ID0gaTM4Nm50b19zdXBwbHlfcmVnc2V0OworLSAgbnRvX3JlZ2lzdGVyX2FyZWEgPSBpMzg2 bnRvX3JlZ2lzdGVyX2FyZWE7CistICBudG9fcmVnc2V0X2ZpbGwgPSBpMzg2bnRvX3JlZ3NldF9m aWxsOworLSAgbnRvX2ZldGNoX2xpbmtfbWFwX29mZnNldHMgPQorLSAgICBzdnI0X2lscDMyX2Zl dGNoX2xpbmtfbWFwX29mZnNldHM7CistfQorLQorLXN0YXRpYyB2b2lkCistaTM4Nm50b19pbml0 X2FiaSAoc3RydWN0IGdkYmFyY2hfaW5mbyBpbmZvLCBzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCkK Ky17CistICBpMzg2X2dkYmFyY2hfdGRlcCAqdGRlcCA9IGdkYmFyY2hfdGRlcDxpMzg2X2dkYmFy Y2hfdGRlcD4gKGdkYmFyY2gpOworLSAgc3RhdGljIHNvbGliX29wcyBudG9fc3ZyNF9zb19vcHM7 CistCistICAvKiBEZWFsIHdpdGggb3VyIHN0cmFuZ2Ugc2lnbmFscy4gICovCistICBudG9faW5p dGlhbGl6ZV9zaWduYWxzICgpOworLQorLSAgLyogTlRPIHVzZXMgRUxGLiAgKi8KKy0gIGkzODZf ZWxmX2luaXRfYWJpIChpbmZvLCBnZGJhcmNoKTsKKy0KKy0gIC8qIE5ldXRyaW5vIHJld2luZHMg dG8gbG9vayBtb3JlIG5vcm1hbC4gIE5lZWQgdG8gb3ZlcnJpZGUgdGhlIGkzODYKKy0gICAgIGRl ZmF1bHQgd2hpY2ggaXMgW3VuZm9ydHVuYXRlbHldIHRvIGRlY3JlbWVudCB0aGUgUEMuICAqLwor LSAgc2V0X2dkYmFyY2hfZGVjcl9wY19hZnRlcl9icmVhayAoZ2RiYXJjaCwgMCk7CistCistICB0 ZGVwLT5ncmVnc2V0X3JlZ19vZmZzZXQgPSBpMzg2bnRvX2dyZWdzZXRfcmVnX29mZnNldDsKKy0g IHRkZXAtPmdyZWdzZXRfbnVtX3JlZ3MgPSBBUlJBWV9TSVpFIChpMzg2bnRvX2dyZWdzZXRfcmVn X29mZnNldCk7CistICB0ZGVwLT5zaXplb2ZfZ3JlZ3NldCA9IE5VTV9HUFJFR1MgKiA0OworLQor LSAgdGRlcC0+c2lndHJhbXBfcCA9IGkzODZudG9fc2lndHJhbXBfcDsKKy0gIHRkZXAtPnNpZ2Nv bnRleHRfYWRkciA9IGkzODZudG9fc2lnY29udGV4dF9hZGRyOworLSAgdGRlcC0+c2NfcmVnX29m ZnNldCA9IGkzODZudG9fZ3JlZ3NldF9yZWdfb2Zmc2V0OworLSAgdGRlcC0+c2NfbnVtX3JlZ3Mg PSBBUlJBWV9TSVpFIChpMzg2bnRvX2dyZWdzZXRfcmVnX29mZnNldCk7CistCistICAvKiBTZXRq bXAoKSdzIHJldHVybiBQQyBzYXZlZCBpbiBFRFggKDUpLiAgKi8KKy0gIHRkZXAtPmpiX3BjX29m ZnNldCA9IDIwOwkvKiA1eDMyIGJpdCBpbnRzIGluLiAgKi8KKy0KKy0gIHNldF9zb2xpYl9zdnI0 X2ZldGNoX2xpbmtfbWFwX29mZnNldHMKKy0gICAgKGdkYmFyY2gsIHN2cjRfaWxwMzJfZmV0Y2hf bGlua19tYXBfb2Zmc2V0cyk7CistCistICAvKiBJbml0aWFsaXplIHRoaXMgbGF6aWx5LCB0byBh dm9pZCBhbiBpbml0aWFsaXphdGlvbiBvcmRlcgorLSAgICAgZGVwZW5kZW5jeSBvbiBzb2xpYi1z dnI0LmMncyBfaW5pdGlhbGl6ZSByb3V0aW5lLiAgKi8KKy0gIGlmIChudG9fc3ZyNF9zb19vcHMu aW5fZHluc3ltX3Jlc29sdmVfY29kZSA9PSBOVUxMKQorLSAgICB7CistICAgICAgbnRvX3N2cjRf c29fb3BzID0gc3ZyNF9zb19vcHM7CistCistICAgICAgLyogT3VyIGxvYWRlciBoYW5kbGVzIHNv bGliIHJlbG9jYXRpb25zIGRpZmZlcmVudGx5IHRoYW4gc3ZyNC4gICovCistICAgICAgbnRvX3N2 cjRfc29fb3BzLnJlbG9jYXRlX3NlY3Rpb25fYWRkcmVzc2VzCistCT0gbnRvX3JlbG9jYXRlX3Nl Y3Rpb25fYWRkcmVzc2VzOworLQorLSAgICAgIC8qIFN1cHBseSBhIG5pY2UgZnVuY3Rpb24gdG8g ZmluZCBvdXIgc29saWJzLiAgKi8KKy0gICAgICBudG9fc3ZyNF9zb19vcHMuZmluZF9hbmRfb3Bl bl9zb2xpYgorLQk9IG50b19maW5kX2FuZF9vcGVuX3NvbGliOworLQorLSAgICAgIC8qIE91ciBs aW5rZXIgY29kZSBpcyBpbiBsaWJjLiAgKi8KKy0gICAgICBudG9fc3ZyNF9zb19vcHMuaW5fZHlu c3ltX3Jlc29sdmVfY29kZQorLQk9IG50b19pbl9keW5zeW1fcmVzb2x2ZV9jb2RlOworLSAgICB9 CistICBzZXRfZ2RiYXJjaF9zb19vcHMgKGdkYmFyY2gsICZudG9fc3ZyNF9zb19vcHMpOworLQor LSAgc2V0X2dkYmFyY2hfd2NoYXJfYml0IChnZGJhcmNoLCAzMik7CistICBzZXRfZ2RiYXJjaF93 Y2hhcl9zaWduZWQgKGdkYmFyY2gsIDApOworLX0KKy0KKy12b2lkIF9pbml0aWFsaXplX2kzODZu dG9fdGRlcCAoKTsKKy12b2lkCistX2luaXRpYWxpemVfaTM4Nm50b190ZGVwICgpCisteworLSAg aW5pdF9pMzg2bnRvX29wcyAoKTsKKy0gIGdkYmFyY2hfcmVnaXN0ZXJfb3NhYmkgKGJmZF9hcmNo X2kzODYsIDAsIEdEQl9PU0FCSV9RTlhOVE8sCistCQkJICBpMzg2bnRvX2luaXRfYWJpKTsKKy0g IGdkYmFyY2hfcmVnaXN0ZXJfb3NhYmlfc25pZmZlciAoYmZkX2FyY2hfaTM4NiwgYmZkX3Rhcmdl dF9lbGZfZmxhdm91ciwKKy0JCQkJICBudG9fZWxmX29zYWJpX3NuaWZmZXIpOworLX0KK2RpZmYg LS1naXQgYS9nZGIvbnRvLXByb2Nmcy5jIGIvZ2RiL250by1wcm9jZnMuYworZGVsZXRlZCBmaWxl IG1vZGUgMTAwNjQ0CistLS0gYS9nZGIvbnRvLXByb2Nmcy5jCisrKysgL2Rldi9udWxsCitAQCAt MSwxNTg4ICswLDAgQEAKKy0vKiBNYWNoaW5lIGluZGVwZW5kZW50IHN1cHBvcnQgZm9yIFFOWCBO ZXV0cmlubyAvcHJvYyAocHJvY2VzcyBmaWxlIHN5c3RlbSkKKy0gICBmb3IgR0RCLiAgV3JpdHRl biBieSBDb2xpbiBCdXJnZXNzIGF0IFFOWCBTb2Z0d2FyZSBTeXN0ZW1zIExpbWl0ZWQuCistCist ICAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu CistCistICAgQ29udHJpYnV0ZWQgYnkgUU5YIFNvZnR3YXJlIFN5c3RlbXMgTHRkLgorLQorLSAg IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdEQi4KKy0KKy0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorLSAgIGl0IHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlz aGVkIGJ5CistICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24g MyBvZiB0aGUgTGljZW5zZSwgb3IKKy0gICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz aW9uLgorLQorLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLAorLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLSAgIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCistCistICAgWW91IHNob3VsZCBoYXZl IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKy0gICBh bG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcv bGljZW5zZXMvPi4gICovCistCistCistI2luY2x1ZGUgPGZjbnRsLmg+CistI2luY2x1ZGUgPHNw YXduLmg+CistI2luY2x1ZGUgPHN5cy9kZWJ1Zy5oPgorLSNpbmNsdWRlIDxzeXMvcHJvY2ZzLmg+ CistI2luY2x1ZGUgPHN5cy9uZXV0cmluby5oPgorLSNpbmNsdWRlIDxzeXMvc3lzcGFnZS5oPgor LSNpbmNsdWRlIDxkaXJlbnQuaD4KKy0jaW5jbHVkZSA8c3lzL25ldG1nci5oPgorLSNpbmNsdWRl IDxzeXMvYXV4di5oPgorLQorLSNpbmNsdWRlICJnZGJjb3JlLmgiCistI2luY2x1ZGUgImluZmVy aW9yLmgiCistI2luY2x1ZGUgInRhcmdldC5oIgorLSNpbmNsdWRlICJvYmpmaWxlcy5oIgorLSNp bmNsdWRlICJnZGJ0aHJlYWQuaCIKKy0jaW5jbHVkZSAibnRvLXRkZXAuaCIKKy0jaW5jbHVkZSAi Y29tbWFuZC5oIgorLSNpbmNsdWRlICJyZWdjYWNoZS5oIgorLSNpbmNsdWRlICJzb2xpYi5oIgor LSNpbmNsdWRlICJpbmYtY2hpbGQuaCIKKy0jaW5jbHVkZSAiZ2Ric3VwcG9ydC9maWxlc3R1ZmYu aCIKKy0jaW5jbHVkZSAiZ2Ric3VwcG9ydC9zY29wZWRfZmQuaCIKKy0KKy0jZGVmaW5lIE5VTExf UElECQkwCistI2RlZmluZSBfREVCVUdfRkxBR19UUkFDRQkoX0RFQlVHX0ZMQUdfVFJBQ0VfRVhF Q3xfREVCVUdfRkxBR19UUkFDRV9SRHxcCistCQlfREVCVUdfRkxBR19UUkFDRV9XUnxfREVCVUdf RkxBR19UUkFDRV9NT0RJRlkpCistCistaW50IGN0bF9mZDsKKy0KKy1zdGF0aWMgc2lnaGFuZGxl cl90IG9mdW5jOworLQorLXN0YXRpYyBwcm9jZnNfcnVuIHJ1bjsKKy0KKy0vKiBDcmVhdGUgdGhl ICJuYXRpdmUiIGFuZCAicHJvY2ZzIiB0YXJnZXRzLiAgKi8KKy0KKy1zdHJ1Y3QgbnRvX3Byb2Nm c190YXJnZXQgOiBwdWJsaWMgaW5mX2NoaWxkX3RhcmdldAorLXsKKy0gIHZvaWQgb3BlbiAoY29u c3QgY2hhciAqYXJnLCBpbnQgZnJvbV90dHkpIG92ZXJyaWRlOworLQorLSAgdm9pZCBhdHRhY2gg KGNvbnN0IGNoYXIgKiwgaW50KSBvdmVycmlkZSA9IDA7CistCistICB2b2lkIHBvc3RfYXR0YWNo IChpbnQpOworLQorLSAgdm9pZCBkZXRhY2ggKGluZmVyaW9yICosIGludCkgb3ZlcnJpZGU7Cist CistICB2b2lkIHJlc3VtZSAocHRpZF90LCBpbnQsIGVudW0gZ2RiX3NpZ25hbCkgb3ZlcnJpZGU7 CistCistICBwdGlkX3Qgd2FpdCAocHRpZF90LCBzdHJ1Y3QgdGFyZ2V0X3dhaXRzdGF0dXMgKiwg dGFyZ2V0X3dhaXRfZmxhZ3MpIG92ZXJyaWRlOworLQorLSAgdm9pZCBmZXRjaF9yZWdpc3RlcnMg KHN0cnVjdCByZWdjYWNoZSAqLCBpbnQpIG92ZXJyaWRlOworLSAgdm9pZCBzdG9yZV9yZWdpc3Rl cnMgKHN0cnVjdCByZWdjYWNoZSAqLCBpbnQpIG92ZXJyaWRlOworLQorLSAgZW51bSB0YXJnZXRf eGZlcl9zdGF0dXMgeGZlcl9wYXJ0aWFsIChlbnVtIHRhcmdldF9vYmplY3Qgb2JqZWN0LAorLQkJ CQkJY29uc3QgY2hhciAqYW5uZXgsCistCQkJCQlnZGJfYnl0ZSAqcmVhZGJ1ZiwKKy0JCQkJCWNv bnN0IGdkYl9ieXRlICp3cml0ZWJ1ZiwKKy0JCQkJCVVMT05HRVNUIG9mZnNldCwgVUxPTkdFU1Qg bGVuLAorLQkJCQkJVUxPTkdFU1QgKnhmZXJlZF9sZW4pIG92ZXJyaWRlOworLQorLSAgdm9pZCBm aWxlc19pbmZvICgpIG92ZXJyaWRlOworLQorLSAgaW50IGluc2VydF9icmVha3BvaW50IChzdHJ1 Y3QgZ2RiYXJjaCAqLCBzdHJ1Y3QgYnBfdGFyZ2V0X2luZm8gKikgb3ZlcnJpZGU7CistCistICBp bnQgcmVtb3ZlX2JyZWFrcG9pbnQgKHN0cnVjdCBnZGJhcmNoICosIHN0cnVjdCBicF90YXJnZXRf aW5mbyAqLAorLQkJCSBlbnVtIHJlbW92ZV9icF9yZWFzb24pIG92ZXJyaWRlOworLQorLSAgaW50 IGNhbl91c2VfaHdfYnJlYWtwb2ludCAoZW51bSBicHR5cGUsIGludCwgaW50KSBvdmVycmlkZTsK Ky0KKy0gIGludCBpbnNlcnRfaHdfYnJlYWtwb2ludCAoc3RydWN0IGdkYmFyY2ggKiwgc3RydWN0 IGJwX3RhcmdldF9pbmZvICopIG92ZXJyaWRlOworLQorLSAgaW50IHJlbW92ZV9od19icmVha3Bv aW50IChzdHJ1Y3QgZ2RiYXJjaCAqLCBzdHJ1Y3QgYnBfdGFyZ2V0X2luZm8gKikgb3ZlcnJpZGU7 CistCistICBpbnQgaW5zZXJ0X3dhdGNocG9pbnQgKENPUkVfQUREUiwgaW50LCBlbnVtIHRhcmdl dF9od19icF90eXBlLAorLQkJCSBzdHJ1Y3QgZXhwcmVzc2lvbiAqKSBvdmVycmlkZTsKKy0KKy0g IGludCByZW1vdmVfd2F0Y2hwb2ludCAoQ09SRV9BRERSLCBpbnQsIGVudW0gdGFyZ2V0X2h3X2Jw X3R5cGUsCistCQkJIHN0cnVjdCBleHByZXNzaW9uICopIG92ZXJyaWRlOworLQorLSAgYm9vbCBz dG9wcGVkX2J5X3dhdGNocG9pbnQgKCkgb3ZlcnJpZGU7CistCistICB2b2lkIGtpbGwgKCkgb3Zl cnJpZGU7CistCistICB2b2lkIGNyZWF0ZV9pbmZlcmlvciAoY29uc3QgY2hhciAqLCBjb25zdCBz dGQ6OnN0cmluZyAmLAorLQkJCWNoYXIgKiosIGludCkgb3ZlcnJpZGU7CistCistICB2b2lkIG1v dXJuX2luZmVyaW9yICgpIG92ZXJyaWRlOworLQorLSAgdm9pZCBwYXNzX3NpZ25hbHMgKGdkYjo6 YXJyYXlfdmlldzxjb25zdCB1bnNpZ25lZCBjaGFyPikgb3ZlcnJpZGU7CistCistICBib29sIHRo cmVhZF9hbGl2ZSAocHRpZF90IHB0aWQpIG92ZXJyaWRlOworLQorLSAgdm9pZCB1cGRhdGVfdGhy ZWFkX2xpc3QgKCkgb3ZlcnJpZGU7CistCistICBzdGQ6OnN0cmluZyBwaWRfdG9fc3RyIChwdGlk X3QpIG92ZXJyaWRlOworLQorLSAgdm9pZCBpbnRlcnJ1cHQgKCkgb3ZlcnJpZGU7CistCistICBj b25zdCBjaGFyICpleHRyYV90aHJlYWRfaW5mbyAoc3RydWN0IHRocmVhZF9pbmZvICopIG92ZXJy aWRlOworLQorLSAgY29uc3QgY2hhciAqcGlkX3RvX2V4ZWNfZmlsZSAoaW50IHBpZCkgb3ZlcnJp ZGU7CistfTsKKy0KKy0vKiBGb3IgInRhcmdldCBuYXRpdmUiLiAgKi8KKy0KKy1zdGF0aWMgY29u c3QgdGFyZ2V0X2luZm8gbnRvX25hdGl2ZV90YXJnZXRfaW5mbyA9IHsKKy0gICJuYXRpdmUiLAor LSAgTl8oIlFOWCBOZXV0cmlubyBsb2NhbCBwcm9jZXNzIiksCistICBOXygiUU5YIE5ldXRyaW5v IGxvY2FsIHByb2Nlc3MgKHN0YXJ0ZWQgYnkgdGhlIFwicnVuXCIgY29tbWFuZCkuIikKKy19Owor LQorLWNsYXNzIG50b19wcm9jZnNfdGFyZ2V0X25hdGl2ZSBmaW5hbCA6IHB1YmxpYyBudG9fcHJv Y2ZzX3RhcmdldAorLXsKKy0gIGNvbnN0IHRhcmdldF9pbmZvICZpbmZvICgpIGNvbnN0IG92ZXJy aWRlCistICB7IHJldHVybiBudG9fbmF0aXZlX3RhcmdldF9pbmZvOyB9CistfTsKKy0KKy0vKiBG b3IgInRhcmdldCBwcm9jZnMgPG5vZGU+Ii4gICovCistCistc3RhdGljIGNvbnN0IHRhcmdldF9p bmZvIG50b19wcm9jZnNfdGFyZ2V0X2luZm8gPSB7CistICAicHJvY2ZzIiwKKy0gIE5fKCJRTlgg TmV1dHJpbm8gbG9jYWwgb3IgcmVtb3RlIHByb2Nlc3MiKSwKKy0gIE5fKCJRTlggTmV1dHJpbm8g cHJvY2Vzcy4gIHRhcmdldCBwcm9jZnMgTk9ERSIpCistfTsKKy0KKy1zdHJ1Y3QgbnRvX3Byb2Nm c190YXJnZXRfcHJvY2ZzIGZpbmFsIDogcHVibGljIG50b19wcm9jZnNfdGFyZ2V0CisteworLSAg Y29uc3QgdGFyZ2V0X2luZm8gJmluZm8gKCkgY29uc3Qgb3ZlcnJpZGUKKy0gIHsgcmV0dXJuIG50 b19wcm9jZnNfdGFyZ2V0X2luZm87IH0KKy19OworLQorLXN0YXRpYyBwdGlkX3QgZG9fYXR0YWNo IChwdGlkX3QgcHRpZCk7CistCistLyogVGhlc2UgdHdvIGdsb2JhbHMgYXJlIG9ubHkgZXZlciBz ZXQgaW4gcHJvY2ZzX29wZW5fMSwgYnV0IGFyZQorLSAgIHJlZmVyZW5jZWQgZWxzZXdoZXJlLiAg J250b19wcm9jZnNfbm9kZScgaXMgYSBmbGFnIHVzZWQgdG8gc2F5CistICAgd2hldGhlciB3ZSBh cmUgbG9jYWwsIG9yIHdlIHNob3VsZCBnZXQgdGhlIGN1cnJlbnQgbm9kZSBkZXNjcmlwdG9yCist ICAgZm9yIHRoZSByZW1vdGUgUU5YIG5vZGUuICAqLworLXN0YXRpYyBjaGFyICpub2Rlc3RyOwor LXN0YXRpYyB1bnNpZ25lZCBudG9fcHJvY2ZzX25vZGUgPSBORF9MT0NBTF9OT0RFOworLQorLS8q IFJldHVybiB0aGUgY3VycmVudCBRTlggTm9kZSwgb3IgZXJyb3Igb3V0LiAgVGhpcyBpcyBhIHNp bXBsZQorLSAgIHdyYXBwZXIgZm9yIHRoZSBuZXRtZ3Jfc3RydG9uZCgpIGZ1bmN0aW9uLiAgVGhl IHJlYXNvbiB0aGlzCistICAgaXMgcmVxdWlyZWQgaXMgYmVjYXVzZSBRTlggbm9kZSBkZXNjcmlw dG9ycyBhcmUgdHJhbnNpZW50IHNvCistICAgd2UgaGF2ZSB0byByZS1hY3F1aXJlIHRoZW0gZXZl cnkgdGltZS4gICovCistc3RhdGljIHVuc2lnbmVkCistbnRvX25vZGUgKHZvaWQpCisteworLSAg dW5zaWduZWQgbm9kZTsKKy0KKy0gIGlmIChORF9OT0RFX0NNUCAobnRvX3Byb2Nmc19ub2RlLCBO RF9MT0NBTF9OT0RFKSA9PSAwCistICAgICAgfHwgbm9kZXN0ciA9PSBOVUxMKQorLSAgICByZXR1 cm4gTkRfTE9DQUxfTk9ERTsKKy0KKy0gIG5vZGUgPSBuZXRtZ3Jfc3RydG9uZCAobm9kZXN0ciwg MCk7CistICBpZiAobm9kZSA9PSAtMSkKKy0gICAgZXJyb3IgKF8oIkxvc3QgdGhlIFFOWCBub2Rl LiAgRGVidWcgc2Vzc2lvbiBwcm9iYWJseSBvdmVyLiIpKTsKKy0KKy0gIHJldHVybiAobm9kZSk7 CistfQorLQorLXN0YXRpYyBlbnVtIGdkYl9vc2FiaQorLXByb2Nmc19pc19udG9fdGFyZ2V0IChi ZmQgKmFiZmQpCisteworLSAgcmV0dXJuIEdEQl9PU0FCSV9RTlhOVE87CistfQorLQorLS8qIFRo aXMgaXMgY2FsbGVkIHdoZW4gd2UgY2FsbCAndGFyZ2V0IG5hdGl2ZScgb3IgJ3RhcmdldCBwcm9j ZnMKKy0gICA8YXJnPicgZnJvbSB0aGUgKGdkYikgcHJvbXB0LiAgRm9yIFFOWDYgKG50byksIHRo ZSBvbmx5IHZhbGlkIGFyZworLSAgIHdpbGwgYmUgYSBRTlggbm9kZSBzdHJpbmcsIGVnOiAiL25l dC9zb21lX25vZGUiLiAgSWYgYXJnIGlzIG5vdCBhCistICAgdmFsaWQgUU5YIG5vZGUsIHdlIHdp bGwgZGVmYXVsdCB0byBsb2NhbC4gICovCistdm9pZAorLW50b19wcm9jZnNfdGFyZ2V0OjpvcGVu IChjb25zdCBjaGFyICphcmcsIGludCBmcm9tX3R0eSkKKy17CistICBjaGFyICplbmRzdHI7Cist ICBjaGFyIGJ1ZmZlcls1MF07CistICBpbnQgdG90YWxfc2l6ZTsKKy0gIHByb2Nmc19zeXNpbmZv ICpzeXNpbmZvOworLSAgY2hhciBudG9fcHJvY2ZzX3BhdGhbUEFUSF9NQVhdOworLQorLSAgLyog T2ZmZXIgdG8ga2lsbCBwcmV2aW91cyBpbmZlcmlvcnMgYmVmb3JlIG9wZW5pbmcgdGhpcyB0YXJn ZXQuICAqLworLSAgdGFyZ2V0X3ByZW9wZW4gKGZyb21fdHR5KTsKKy0KKy0gIG50b19pc19udG9f dGFyZ2V0ID0gcHJvY2ZzX2lzX250b190YXJnZXQ7CistCistICAvKiBTZXQgdGhlIGRlZmF1bHQg bm9kZSB1c2VkIGZvciBzcGF3bmluZyB0byB0aGlzIG9uZSwKKy0gICAgIGFuZCBvbmx5IG92ZXJy aWRlIGl0IGlmIHRoZXJlIGlzIGEgdmFsaWQgYXJnLiAgKi8KKy0KKy0gIHhmcmVlIChub2Rlc3Ry KTsKKy0gIG5vZGVzdHIgPSBOVUxMOworLQorLSAgbnRvX3Byb2Nmc19ub2RlID0gTkRfTE9DQUxf Tk9ERTsKKy0gIG5vZGVzdHIgPSAoYXJnICE9IE5VTEwpID8geHN0cmR1cCAoYXJnKSA6IE5VTEw7 CistCistICBpZiAobm9kZXN0cikKKy0gICAgeworLSAgICAgIG50b19wcm9jZnNfbm9kZSA9IG5l dG1ncl9zdHJ0b25kIChub2Rlc3RyLCAmZW5kc3RyKTsKKy0gICAgICBpZiAobnRvX3Byb2Nmc19u b2RlID09IC0xKQorLQl7CistCSAgaWYgKGVycm5vID09IEVOT1RTVVApCistCSAgICBnZGJfcHJp bnRmICgiUU5YIE5ldCBNYW5hZ2VyIG5vdCBmb3VuZC5cbiIpOworLQkgIGdkYl9wcmludGYgKCJJ bnZhbGlkIFFOWCBub2RlICVzOiBlcnJvciAlZCAoJXMpLlxuIiwgbm9kZXN0ciwKKy0JCSAgICAg IGVycm5vLCBzYWZlX3N0cmVycm9yIChlcnJubykpOworLQkgIHhmcmVlIChub2Rlc3RyKTsKKy0J ICBub2Rlc3RyID0gTlVMTDsKKy0JICBudG9fcHJvY2ZzX25vZGUgPSBORF9MT0NBTF9OT0RFOwor LQl9CistICAgICAgZWxzZSBpZiAoKmVuZHN0cikKKy0JeworLQkgIGlmICgqKGVuZHN0ciAtIDEp ID09ICcvJykKKy0JICAgICooZW5kc3RyIC0gMSkgPSAwOworLQkgIGVsc2UKKy0JICAgICplbmRz dHIgPSAwOworLQl9CistICAgIH0KKy0gIHNucHJpbnRmIChudG9fcHJvY2ZzX3BhdGgsIFBBVEhf TUFYIC0gMSwgIiVzJXMiLAorLQkgICAgKG5vZGVzdHIgIT0gTlVMTCkgPyBub2Rlc3RyIDogIiIs ICIvcHJvYyIpOworLQorLSAgc2NvcGVkX2ZkIGZkIChvcGVuIChudG9fcHJvY2ZzX3BhdGgsIE9f UkRPTkxZKSk7CistICBpZiAoZmQuZ2V0ICgpID09IC0xKQorLSAgICB7CistICAgICAgZ2RiX3By aW50ZiAoIkVycm9yIG9wZW5pbmcgJXMgOiAlZCAoJXMpXG4iLCBudG9fcHJvY2ZzX3BhdGgsIGVy cm5vLAorLQkJICBzYWZlX3N0cmVycm9yIChlcnJubykpOworLSAgICAgIGVycm9yIChfKCJJbnZh bGlkIHByb2NmcyBhcmciKSk7CistICAgIH0KKy0KKy0gIHN5c2luZm8gPSAodm9pZCAqKSBidWZm ZXI7CistICBpZiAoZGV2Y3RsIChmZC5nZXQgKCksIERDTURfUFJPQ19TWVNJTkZPLCBzeXNpbmZv LCBzaXplb2YgYnVmZmVyLCAwKSAhPSBFT0spCistICAgIHsKKy0gICAgICBnZGJfcHJpbnRmICgi RXJyb3IgZ2V0dGluZyBzaXplOiAlZCAoJXMpXG4iLCBlcnJubywKKy0JCSAgc2FmZV9zdHJlcnJv ciAoZXJybm8pKTsKKy0gICAgICBlcnJvciAoXygiRGV2Y3RsIGZhaWxlZC4iKSk7CistICAgIH0K Ky0gIGVsc2UKKy0gICAgeworLSAgICAgIHRvdGFsX3NpemUgPSBzeXNpbmZvLT50b3RhbF9zaXpl OworLSAgICAgIHN5c2luZm8gPSBhbGxvY2EgKHRvdGFsX3NpemUpOworLSAgICAgIGlmIChzeXNp bmZvID09IE5VTEwpCistCXsKKy0JICBnZGJfcHJpbnRmICgiTWVtb3J5IGVycm9yOiAlZCAoJXMp XG4iLCBlcnJubywKKy0JCSAgICAgIHNhZmVfc3RyZXJyb3IgKGVycm5vKSk7CistCSAgZXJyb3Ig KF8oImFsbG9jYSBmYWlsZWQuIikpOworLQl9CistICAgICAgZWxzZQorLQl7CistCSAgaWYgKGRl dmN0bCAoZmQuZ2V0ICgpLCBEQ01EX1BST0NfU1lTSU5GTywgc3lzaW5mbywgdG90YWxfc2l6ZSwg MCkKKy0JICAgICAgIT0gRU9LKQorLQkgICAgeworLQkgICAgICBnZGJfcHJpbnRmICgiRXJyb3Ig Z2V0dGluZyBzeXNpbmZvOiAlZCAoJXMpXG4iLCBlcnJubywKKy0JCQkgIHNhZmVfc3RyZXJyb3Ig KGVycm5vKSk7CistCSAgICAgIGVycm9yIChfKCJEZXZjdGwgZmFpbGVkLiIpKTsKKy0JICAgIH0K Ky0JICBlbHNlCistCSAgICB7CistCSAgICAgIGlmIChzeXNpbmZvLT50eXBlICE9CistCQkgIG50 b19tYXBfYXJjaF90b19jcHV0eXBlCistCQkgICAgKGdkYmFyY2hfYmZkX2FyY2hfaW5mbworLQkJ ICAgICAoY3VycmVudF9pbmZlcmlvciAoKS0+YXJjaCAoKSktPmFyY2hfbmFtZSkpCistCQllcnJv ciAoXygiSW52YWxpZCB0YXJnZXQgQ1BVLiIpKTsKKy0JICAgIH0KKy0JfQorLSAgICB9CistCist ICBpbmZfY2hpbGRfdGFyZ2V0OjpvcGVuIChhcmcsIGZyb21fdHR5KTsKKy0gIGdkYl9wcmludGYg KCJEZWJ1Z2dpbmcgdXNpbmcgJXNcbiIsIG50b19wcm9jZnNfcGF0aCk7CistfQorLQorLXN0YXRp YyB2b2lkCistcHJvY2ZzX3NldF90aHJlYWQgKHB0aWRfdCBwdGlkKQorLXsKKy0gIHBpZF90IHRp ZDsKKy0KKy0gIHRpZCA9IHB0aWQudGlkICgpOworLSAgZGV2Y3RsIChjdGxfZmQsIERDTURfUFJP Q19DVVJUSFJFQUQsICZ0aWQsIHNpemVvZiAodGlkKSwgMCk7CistfQorLQorLS8qICBSZXR1cm4g dHJ1ZSBpZiB0aGUgdGhyZWFkIFRIIGlzIHN0aWxsIGFsaXZlLiAgKi8KKy0KKy1ib29sCistbnRv X3Byb2Nmc190YXJnZXQ6OnRocmVhZF9hbGl2ZSAocHRpZF90IHB0aWQpCisteworLSAgcGlkX3Qg dGlkOworLSAgcGlkX3QgcGlkOworLSAgcHJvY2ZzX3N0YXR1cyBzdGF0dXM7CistICBpbnQgZXJy OworLQorLSAgdGlkID0gcHRpZC50aWQgKCk7CistICBwaWQgPSBwdGlkLnBpZCAoKTsKKy0KKy0g IGlmIChraWxsIChwaWQsIDApID09IC0xKQorLSAgICByZXR1cm4gZmFsc2U7CistCistICBzdGF0 dXMudGlkID0gdGlkOworLSAgaWYgKChlcnIgPSBkZXZjdGwgKGN0bF9mZCwgRENNRF9QUk9DX1RJ RFNUQVRVUywKKy0JCSAgICAgJnN0YXR1cywgc2l6ZW9mIChzdGF0dXMpLCAwKSkgIT0gRU9LKQor LSAgICByZXR1cm4gZmFsc2U7CistCistICAvKiBUaHJlYWQgaXMgYWxpdmUgb3IgZGVhZCBidXQg bm90IHlldCBqb2luZWQsCistICAgICBvciBkZWFkIGFuZCB0aGVyZSBpcyBhbiBhbGl2ZSAob3Ig ZGVhZCB1bmpvaW5lZCkgdGhyZWFkIHdpdGgKKy0gICAgIGhpZ2hlciB0aWQuCistCistICAgICBJ ZiB0aGUgdGlkIGlzIG5vdCB0aGUgc2FtZSBhcyByZXF1ZXN0ZWQsIHJlcXVlc3RlZCB0aWQgaXMg ZGVhZC4gICovCistICByZXR1cm4gKHN0YXR1cy50aWQgPT0gdGlkKSAmJiAoc3RhdHVzLnN0YXRl ICE9IFNUQVRFX0RFQUQpOworLX0KKy0KKy1zdGF0aWMgdm9pZAorLXVwZGF0ZV90aHJlYWRfcHJp dmF0ZV9kYXRhX25hbWUgKHN0cnVjdCB0aHJlYWRfaW5mbyAqbmV3X3RocmVhZCwKKy0JCQkJIGNv bnN0IGNoYXIgKm5ld25hbWUpCisteworLSAgbnRvX3RocmVhZF9pbmZvICpwdGkgPSBnZXRfbnRv X3RocmVhZF9pbmZvIChuZXdfdGhyZWFkKTsKKy0KKy0gIGdkYl9hc3NlcnQgKG5ld25hbWUgIT0g TlVMTCk7CistICBnZGJfYXNzZXJ0IChuZXdfdGhyZWFkICE9IE5VTEwpOworLQorLSAgaWYgKHB0 aSkKKy0gICAgeworLSAgICAgIHB0aSA9IG5ldyBudG9fdGhyZWFkX2luZm87CistICAgICAgbmV3 X3RocmVhZC0+cHJpdi5yZXNldCAocHRpKTsKKy0gICAgfQorLQorLSAgcHRpLT5uYW1lID0gbmV3 bmFtZTsKKy19CistCistc3RhdGljIHZvaWQgCistdXBkYXRlX3RocmVhZF9wcml2YXRlX2RhdGEg KHN0cnVjdCB0aHJlYWRfaW5mbyAqbmV3X3RocmVhZCwgCistCQkJICAgIHB0aHJlYWRfdCB0aWQs IGludCBzdGF0ZSwgaW50IGZsYWdzKQorLXsKKy0gIHByb2Nmc19pbmZvIHBpZGluZm87CistICBz dHJ1Y3QgX3RocmVhZF9uYW1lICp0bjsKKy0gIHByb2Nmc190aHJlYWRjdGwgdGN0bDsKKy0KKy0j aWYgX05UT19WRVJTSU9OID4gNjMwCistICBnZGJfYXNzZXJ0IChuZXdfdGhyZWFkICE9IE5VTEwp OworLQorLSAgaWYgKGRldmN0bCAoY3RsX2ZkLCBEQ01EX1BST0NfSU5GTywgJnBpZGluZm8sCist CSAgICAgIHNpemVvZihwaWRpbmZvKSwgMCkgIT0gRU9LKQorLSAgICByZXR1cm47CistCistICBt ZW1zZXQgKCZ0Y3RsLCAwLCBzaXplb2YgKHRjdGwpKTsKKy0gIHRjdGwuY21kID0gX05UT19UQ1RM X05BTUU7CistICB0biA9IChzdHJ1Y3QgX3RocmVhZF9uYW1lICopICgmdGN0bC5kYXRhKTsKKy0K Ky0gIC8qIEZldGNoIG5hbWUgZm9yIHRoZSBnaXZlbiB0aHJlYWQuICAqLworLSAgdGN0bC50aWQg PSB0aWQ7CistICB0bi0+bmFtZV9idWZfbGVuID0gc2l6ZW9mICh0Y3RsLmRhdGEpIC0gc2l6ZW9m ICgqdG4pOworLSAgdG4tPm5ld19uYW1lX2xlbiA9IC0xOyAvKiBHZXR0aW5nLCBub3Qgc2V0dGlu Zy4gICovCistICBpZiAoZGV2Y3RsIChjdGxfZmQsIERDTURfUFJPQ19USFJFQURDVEwsICZ0Y3Rs LCBzaXplb2YgKHRjdGwpLCBOVUxMKSAhPSBFT0spCistICAgIHRuLT5uYW1lX2J1ZlswXSA9ICdc MCc7CistCistICB0bi0+bmFtZV9idWZbX05UT19USFJFQURfTkFNRV9NQVhdID0gJ1wwJzsKKy0K Ky0gIHVwZGF0ZV90aHJlYWRfcHJpdmF0ZV9kYXRhX25hbWUgKG5ld190aHJlYWQsIHRuLT5uYW1l X2J1Zik7CistCistICBudG9fdGhyZWFkX2luZm8gKnB0aSA9IGdldF9udG9fdGhyZWFkX2luZm8g KG5ld190aHJlYWQpOworLSAgcHRpLT50aWQgPSB0aWQ7CistICBwdGktPnN0YXRlID0gc3RhdGU7 CistICBwdGktPmZsYWdzID0gZmxhZ3M7CistI2VuZGlmIC8qIF9OVE9fVkVSU0lPTiAqLworLX0K Ky0KKy12b2lkCistbnRvX3Byb2Nmc190YXJnZXQ6OnVwZGF0ZV90aHJlYWRfbGlzdCAoKQorLXsK Ky0gIHByb2Nmc19zdGF0dXMgc3RhdHVzOworLSAgcGlkX3QgcGlkOworLSAgcHRpZF90IHB0aWQ7 CistICBwdGhyZWFkX3QgdGlkOworLSAgc3RydWN0IHRocmVhZF9pbmZvICpuZXdfdGhyZWFkOwor LQorLSAgaWYgKGN0bF9mZCA9PSAtMSkKKy0gICAgcmV0dXJuOworLQorLSAgcHJ1bmVfdGhyZWFk cyAoKTsKKy0KKy0gIHBpZCA9IGN1cnJlbnRfaW5mZXJpb3IgKCktPnBpZDsKKy0KKy0gIHN0YXR1 cy50aWQgPSAxOworLQorLSAgZm9yICh0aWQgPSAxOzsgKyt0aWQpCistICAgIHsKKy0gICAgICBp ZiAoc3RhdHVzLnRpZCA9PSB0aWQgCistCSAgJiYgKGRldmN0bCAoY3RsX2ZkLCBEQ01EX1BST0Nf VElEU1RBVFVTLCAmc3RhdHVzLCBzaXplb2YgKHN0YXR1cyksIDApCistCSAgICAgICE9IEVPSykp CistCWJyZWFrOworLSAgICAgIGlmIChzdGF0dXMudGlkICE9IHRpZCkKKy0JLyogVGhlIHJlYXNv biB3aHkgdGhpcyB3b3VsZCBub3QgYmUgZXF1YWwgaXMgdGhhdCBkZXZjdGwgbWlnaHQgaGF2ZSAK Ky0JICAgcmV0dXJuZWQgZGlmZmVyZW50IHRpZCwgbWVhbmluZyB0aGUgcmVxdWVzdGVkIHRpZCBu byBsb25nZXIgZXhpc3RzCistCSAgIChlLmcuIHRocmVhZCBleGl0ZWQpLiAgKi8KKy0JY29udGlu dWU7CistICAgICAgcHRpZCA9IHB0aWRfdCAocGlkLCAwLCB0aWQpOworLSAgICAgIG5ld190aHJl YWQgPSB0aGlzLT5maW5kX3RocmVhZCAocHRpZCk7CistICAgICAgaWYgKCFuZXdfdGhyZWFkKQor LQluZXdfdGhyZWFkID0gYWRkX3RocmVhZCAocHRpZCk7CistICAgICAgdXBkYXRlX3RocmVhZF9w cml2YXRlX2RhdGEgKG5ld190aHJlYWQsIHRpZCwgc3RhdHVzLnN0YXRlLCAwKTsKKy0gICAgICBz dGF0dXMudGlkKys7CistICAgIH0KKy0gIHJldHVybjsKKy19CistCistc3RhdGljIHZvaWQKKy1w cm9jZnNfcGlkbGlzdCAoY29uc3QgY2hhciAqYXJncywgaW50IGZyb21fdHR5KQorLXsKKy0gIHN0 cnVjdCBkaXJlbnQgKmRpcnAgPSBOVUxMOworLSAgY2hhciBidWZbUEFUSF9NQVhdOworLSAgcHJv Y2ZzX2luZm8gKnBpZGluZm8gPSBOVUxMOworLSAgcHJvY2ZzX2RlYnVnaW5mbyAqaW5mbyA9IE5V TEw7CistICBwcm9jZnNfc3RhdHVzICpzdGF0dXMgPSBOVUxMOworLSAgcGlkX3QgbnVtX3RocmVh ZHMgPSAwOworLSAgcGlkX3QgcGlkOworLSAgY2hhciBuYW1lWzUxMl07CistICBjaGFyIHByb2Nm c19kaXJbUEFUSF9NQVhdOworLQorLSAgc25wcmludGYgKHByb2Nmc19kaXIsIHNpemVvZiAocHJv Y2ZzX2RpciksICIlcyVzIiwKKy0JICAgIChub2Rlc3RyICE9IE5VTEwpID8gbm9kZXN0ciA6ICIi LCAiL3Byb2MiKTsKKy0KKy0gIGdkYl9kaXJfdXAgZHAgKG9wZW5kaXIgKHByb2Nmc19kaXIpKTsK Ky0gIGlmIChkcCA9PSBOVUxMKQorLSAgICB7CistICAgICAgZ2RiX3ByaW50ZiAoZ2RiX3N0ZGVy ciwgImZhaWxlZCB0byBvcGVuZGlyIFwiJXNcIiAtICVkICglcykiLAorLQkJICBwcm9jZnNfZGly LCBlcnJubywgc2FmZV9zdHJlcnJvciAoZXJybm8pKTsKKy0gICAgICByZXR1cm47CistICAgIH0K Ky0KKy0gIC8qIFN0YXJ0IHNjYW4gYXQgZmlyc3QgcGlkLiAgKi8KKy0gIHJld2luZGRpciAoZHAu Z2V0ICgpKTsKKy0KKy0gIGRvCistICAgIHsKKy0gICAgICAvKiBHZXQgdGhlIHJpZ2h0IHBpZCBh bmQgcHJvY2ZzIHBhdGggZm9yIHRoZSBwaWQuICAqLworLSAgICAgIGRvCistCXsKKy0JICBkaXJw ID0gcmVhZGRpciAoZHAuZ2V0ICgpKTsKKy0JICBpZiAoZGlycCA9PSBOVUxMKQorLQkgICAgcmV0 dXJuOworLQkgIHNucHJpbnRmIChidWYsIHNpemVvZiAoYnVmKSwgIiVzJXMvJXMvYXMiLAorLQkJ ICAgIChub2Rlc3RyICE9IE5VTEwpID8gbm9kZXN0ciA6ICIiLAorLQkJICAgICIvcHJvYyIsIGRp cnAtPmRfbmFtZSk7CistCSAgcGlkID0gYXRvaSAoZGlycC0+ZF9uYW1lKTsKKy0JfQorLSAgICAg IHdoaWxlIChwaWQgPT0gMCk7CistCistICAgICAgLyogT3BlbiB0aGUgcHJvY2ZzIHBhdGguICAq LworLSAgICAgIHNjb3BlZF9mZCBmZCAob3BlbiAoYnVmLCBPX1JET05MWSkpOworLSAgICAgIGlm IChmZC5nZXQgKCkgPT0gLTEpCistCXsKKy0JICBnZGJfcHJpbnRmIChnZGJfc3RkZXJyLCAiZmFp bGVkIHRvIG9wZW4gJXMgLSAlZCAoJXMpXG4iLAorLQkJICAgICAgYnVmLCBlcnJubywgc2FmZV9z dHJlcnJvciAoZXJybm8pKTsKKy0JICBjb250aW51ZTsKKy0JfQorLQorLSAgICAgIHBpZGluZm8g PSAocHJvY2ZzX2luZm8gKikgYnVmOworLSAgICAgIGlmIChkZXZjdGwgKGZkLmdldCAoKSwgRENN RF9QUk9DX0lORk8sIHBpZGluZm8sIHNpemVvZiAoYnVmKSwgMCkgIT0gRU9LKQorLQl7CistCSAg Z2RiX3ByaW50ZiAoZ2RiX3N0ZGVyciwKKy0JCSAgICAgICJkZXZjdGwgRENNRF9QUk9DX0lORk8g ZmFpbGVkIC0gJWQgKCVzKVxuIiwKKy0JCSAgICAgIGVycm5vLCBzYWZlX3N0cmVycm9yIChlcnJu bykpOworLQkgIGJyZWFrOworLQl9CistICAgICAgbnVtX3RocmVhZHMgPSBwaWRpbmZvLT5udW1f dGhyZWFkczsKKy0KKy0gICAgICBpbmZvID0gKHByb2Nmc19kZWJ1Z2luZm8gKikgYnVmOworLSAg ICAgIGlmIChkZXZjdGwgKGZkLmdldCAoKSwgRENNRF9QUk9DX01BUERFQlVHX0JBU0UsIGluZm8s IHNpemVvZiAoYnVmKSwgMCkKKy0JICAhPSBFT0spCistCXN0cmNweSAobmFtZSwgInVuYXZhaWxh YmxlIik7CistICAgICAgZWxzZQorLQlzdHJjcHkgKG5hbWUsIGluZm8tPnBhdGgpOworLQorLSAg ICAgIC8qIENvbGxlY3Qgc3RhdGUgaW5mbyBvbiBhbGwgdGhlIHRocmVhZHMuICAqLworLSAgICAg IHN0YXR1cyA9IChwcm9jZnNfc3RhdHVzICopIGJ1ZjsKKy0gICAgICBmb3IgKHN0YXR1cy0+dGlk ID0gMTsgc3RhdHVzLT50aWQgPD0gbnVtX3RocmVhZHM7IHN0YXR1cy0+dGlkKyspCistCXsKKy0J ICBjb25zdCBpbnQgZXJyCistCSAgICA9IGRldmN0bCAoZmQuZ2V0ICgpLCBEQ01EX1BST0NfVElE U1RBVFVTLCBzdGF0dXMsIHNpemVvZiAoYnVmKSwgMCk7CistCSAgZ2RiX3ByaW50ZiAoIiVzIC0g JWQiLCBuYW1lLCBwaWQpOworLQkgIGlmIChlcnIgPT0gRU9LICYmIHN0YXR1cy0+dGlkICE9IDAp CistCSAgICBnZGJfcHJpbnRmICgiLyVkXG4iLCBzdGF0dXMtPnRpZCk7CistCSAgZWxzZQorLQkg ICAgeworLQkgICAgICBnZGJfcHJpbnRmICgiXG4iKTsKKy0JICAgICAgYnJlYWs7CistCSAgICB9 CistCX0KKy0gICAgfQorLSAgd2hpbGUgKGRpcnAgIT0gTlVMTCk7CistfQorLQorLXN0YXRpYyB2 b2lkCistcHJvY2ZzX21lbWluZm8gKGNvbnN0IGNoYXIgKmFyZ3MsIGludCBmcm9tX3R0eSkKKy17 CistICBwcm9jZnNfbWFwaW5mbyAqbWFwaW5mb3MgPSBOVUxMOworLSAgc3RhdGljIGludCBudW1f bWFwaW5mb3MgPSAwOworLSAgcHJvY2ZzX21hcGluZm8gKm1hcGluZm9fcCwgKm1hcGluZm9fcDI7 CistICBpbnQgZmxhZ3MgPSB+MCwgZXJyLCBudW0sIGksIGo7CistCistICBzdHJ1Y3QKKy0gIHsK Ky0gICAgcHJvY2ZzX2RlYnVnaW5mbyBpbmZvOworLSAgICBjaGFyIGJ1ZmZbX1BPU0lYX1BBVEhf TUFYXTsKKy0gIH0gbWFwOworLQorLSAgc3RydWN0IGluZm8KKy0gIHsKKy0gICAgdW5zaWduZWQg YWRkcjsKKy0gICAgdW5zaWduZWQgc2l6ZTsKKy0gICAgdW5zaWduZWQgZmxhZ3M7CistICAgIHVu c2lnbmVkIGRlYnVnX3ZhZGRyOworLSAgICB1bnNpZ25lZCBsb25nIGxvbmcgb2Zmc2V0OworLSAg fTsKKy0KKy0gIHN0cnVjdCBwcmludGluZm8KKy0gIHsKKy0gICAgdW5zaWduZWQgbG9uZyBsb25n IGlubzsKKy0gICAgdW5zaWduZWQgZGV2OworLSAgICBzdHJ1Y3QgaW5mbyB0ZXh0OworLSAgICBz dHJ1Y3QgaW5mbyBkYXRhOworLSAgICBjaGFyIG5hbWVbMjU2XTsKKy0gIH0gcHJpbnRtZTsKKy0K Ky0gIC8qIEdldCB0aGUgbnVtYmVyIG9mIG1hcCBlbnRyeXMuICAqLworLSAgZXJyID0gZGV2Y3Rs IChjdGxfZmQsIERDTURfUFJPQ19NQVBJTkZPLCBOVUxMLCAwLCAmbnVtKTsKKy0gIGlmIChlcnIg IT0gRU9LKQorLSAgICB7CistICAgICAgcHJpbnRmICgiZmFpbGVkIGRldmN0bCBudW0gbWFwaW5m b3MgLSAlZCAoJXMpXG4iLCBlcnIsCistCSAgICAgIHNhZmVfc3RyZXJyb3IgKGVycikpOworLSAg ICAgIHJldHVybjsKKy0gICAgfQorLQorLSAgbWFwaW5mb3MgPSBYTkVXVkVDIChwcm9jZnNfbWFw aW5mbywgbnVtKTsKKy0KKy0gIG51bV9tYXBpbmZvcyA9IG51bTsKKy0gIG1hcGluZm9fcCA9IG1h cGluZm9zOworLQorLSAgLyogRmlsbCB0aGUgbWFwIGVudHJ5cy4gICovCistICBlcnIgPSBkZXZj dGwgKGN0bF9mZCwgRENNRF9QUk9DX01BUElORk8sIG1hcGluZm9fcCwgbnVtCistCQkqIHNpemVv ZiAocHJvY2ZzX21hcGluZm8pLCAmbnVtKTsKKy0gIGlmIChlcnIgIT0gRU9LKQorLSAgICB7Cist ICAgICAgcHJpbnRmICgiZmFpbGVkIGRldmN0bCBtYXBpbmZvcyAtICVkICglcylcbiIsIGVyciwg c2FmZV9zdHJlcnJvciAoZXJyKSk7CistICAgICAgeGZyZWUgKG1hcGluZm9zKTsKKy0gICAgICBy ZXR1cm47CistICAgIH0KKy0KKy0gIG51bSA9IHN0ZDo6bWluIChudW0sIG51bV9tYXBpbmZvcyk7 CistCistICAvKiBSdW4gdGhyb3VnaCB0aGUgbGlzdCBvZiBtYXBpbmZvcywgYW5kIHN0b3JlIHRo ZSBkYXRhIGFuZCB0ZXh0IGluZm8KKy0gICAgIHNvIHdlIGNhbiBwcmludCBpdCBhdCB0aGUgYm90 dG9tIG9mIHRoZSBsb29wLiAgKi8KKy0gIGZvciAobWFwaW5mb19wID0gbWFwaW5mb3MsIGkgPSAw OyBpIDwgbnVtOyBpKyssIG1hcGluZm9fcCsrKQorLSAgICB7CistICAgICAgaWYgKCEobWFwaW5m b19wLT5mbGFncyAmIGZsYWdzKSkKKy0JbWFwaW5mb19wLT5pbm8gPSAwOworLQorLSAgICAgIGlm IChtYXBpbmZvX3AtPmlubyA9PSAwKQkvKiBBbHJlYWR5IHZpc2l0ZWQuICAqLworLQljb250aW51 ZTsKKy0KKy0gICAgICBtYXAuaW5mby52YWRkciA9IG1hcGluZm9fcC0+dmFkZHI7CistCistICAg ICAgZXJyID0gZGV2Y3RsIChjdGxfZmQsIERDTURfUFJPQ19NQVBERUJVRywgJm1hcCwgc2l6ZW9m IChtYXApLCAwKTsKKy0gICAgICBpZiAoZXJyICE9IEVPSykKKy0JY29udGludWU7CistCistICAg ICAgbWVtc2V0ICgmcHJpbnRtZSwgMCwgc2l6ZW9mIHByaW50bWUpOworLSAgICAgIHByaW50bWUu ZGV2ID0gbWFwaW5mb19wLT5kZXY7CistICAgICAgcHJpbnRtZS5pbm8gPSBtYXBpbmZvX3AtPmlu bzsKKy0gICAgICBwcmludG1lLnRleHQuYWRkciA9IG1hcGluZm9fcC0+dmFkZHI7CistICAgICAg cHJpbnRtZS50ZXh0LnNpemUgPSBtYXBpbmZvX3AtPnNpemU7CistICAgICAgcHJpbnRtZS50ZXh0 LmZsYWdzID0gbWFwaW5mb19wLT5mbGFnczsKKy0gICAgICBwcmludG1lLnRleHQub2Zmc2V0ID0g bWFwaW5mb19wLT5vZmZzZXQ7CistICAgICAgcHJpbnRtZS50ZXh0LmRlYnVnX3ZhZGRyID0gbWFw LmluZm8udmFkZHI7CistICAgICAgc3RyY3B5IChwcmludG1lLm5hbWUsIG1hcC5pbmZvLnBhdGgp OworLQorLSAgICAgIC8qIENoZWNrIGZvciBtYXRjaGluZyBkYXRhLiAgKi8KKy0gICAgICBmb3Ig KG1hcGluZm9fcDIgPSBtYXBpbmZvcywgaiA9IDA7IGogPCBudW07IGorKywgbWFwaW5mb19wMisr KQorLQl7CistCSAgaWYgKG1hcGluZm9fcDItPnZhZGRyICE9IG1hcGluZm9fcC0+dmFkZHIKKy0J ICAgICAgJiYgbWFwaW5mb19wMi0+aW5vID09IG1hcGluZm9fcC0+aW5vCistCSAgICAgICYmIG1h cGluZm9fcDItPmRldiA9PSBtYXBpbmZvX3AtPmRldikKKy0JICAgIHsKKy0JICAgICAgbWFwLmlu Zm8udmFkZHIgPSBtYXBpbmZvX3AyLT52YWRkcjsKKy0JICAgICAgZXJyID0KKy0JCWRldmN0bCAo Y3RsX2ZkLCBEQ01EX1BST0NfTUFQREVCVUcsICZtYXAsIHNpemVvZiAobWFwKSwgMCk7CistCSAg ICAgIGlmIChlcnIgIT0gRU9LKQorLQkJY29udGludWU7CistCistCSAgICAgIGlmIChzdHJjbXAg KG1hcC5pbmZvLnBhdGgsIHByaW50bWUubmFtZSkpCistCQljb250aW51ZTsKKy0KKy0JICAgICAg LyogTG93ZXIgZGVidWdfdmFkZHIgaXMgYWx3YXlzIHRleHQsIGlmIG5lY2Vzc2FyeSwgc3dhcC4g ICovCistCSAgICAgIGlmICgoaW50KSBtYXAuaW5mby52YWRkciA8IChpbnQpIHByaW50bWUudGV4 dC5kZWJ1Z192YWRkcikKKy0JCXsKKy0JCSAgbWVtY3B5ICgmKHByaW50bWUuZGF0YSksICYocHJp bnRtZS50ZXh0KSwKKy0JCQkgIHNpemVvZiAocHJpbnRtZS5kYXRhKSk7CistCQkgIHByaW50bWUu dGV4dC5hZGRyID0gbWFwaW5mb19wMi0+dmFkZHI7CistCQkgIHByaW50bWUudGV4dC5zaXplID0g bWFwaW5mb19wMi0+c2l6ZTsKKy0JCSAgcHJpbnRtZS50ZXh0LmZsYWdzID0gbWFwaW5mb19wMi0+ ZmxhZ3M7CistCQkgIHByaW50bWUudGV4dC5vZmZzZXQgPSBtYXBpbmZvX3AyLT5vZmZzZXQ7Cist CQkgIHByaW50bWUudGV4dC5kZWJ1Z192YWRkciA9IG1hcC5pbmZvLnZhZGRyOworLQkJfQorLQkg ICAgICBlbHNlCistCQl7CistCQkgIHByaW50bWUuZGF0YS5hZGRyID0gbWFwaW5mb19wMi0+dmFk ZHI7CistCQkgIHByaW50bWUuZGF0YS5zaXplID0gbWFwaW5mb19wMi0+c2l6ZTsKKy0JCSAgcHJp bnRtZS5kYXRhLmZsYWdzID0gbWFwaW5mb19wMi0+ZmxhZ3M7CistCQkgIHByaW50bWUuZGF0YS5v ZmZzZXQgPSBtYXBpbmZvX3AyLT5vZmZzZXQ7CistCQkgIHByaW50bWUuZGF0YS5kZWJ1Z192YWRk ciA9IG1hcC5pbmZvLnZhZGRyOworLQkJfQorLQkgICAgICBtYXBpbmZvX3AyLT5pbm8gPSAwOwor LQkgICAgfQorLQl9CistICAgICAgbWFwaW5mb19wLT5pbm8gPSAwOworLQorLSAgICAgIGdkYl9w cmludGYgKCIlc1xuIiwgcHJpbnRtZS5uYW1lKTsKKy0gICAgICBnZGJfcHJpbnRmICgiXHR0ZXh0 PSUwOHggYnl0ZXMgQCAweCUwOHhcbiIsIHByaW50bWUudGV4dC5zaXplLAorLQkJICBwcmludG1l LnRleHQuYWRkcik7CistICAgICAgZ2RiX3ByaW50ZiAoIlx0XHRmbGFncz0lMDh4XG4iLCBwcmlu dG1lLnRleHQuZmxhZ3MpOworLSAgICAgIGdkYl9wcmludGYgKCJcdFx0ZGVidWc9JTA4eFxuIiwg cHJpbnRtZS50ZXh0LmRlYnVnX3ZhZGRyKTsKKy0gICAgICBnZGJfcHJpbnRmICgiXHRcdG9mZnNl dD0lc1xuIiwgcGhleCAocHJpbnRtZS50ZXh0Lm9mZnNldCwgOCkpOworLSAgICAgIGlmIChwcmlu dG1lLmRhdGEuc2l6ZSkKKy0JeworLQkgIGdkYl9wcmludGYgKCJcdGRhdGE9JTA4eCBieXRlcyBA IDB4JTA4eFxuIiwgcHJpbnRtZS5kYXRhLnNpemUsCistCQkgICAgICBwcmludG1lLmRhdGEuYWRk cik7CistCSAgZ2RiX3ByaW50ZiAoIlx0XHRmbGFncz0lMDh4XG4iLCBwcmludG1lLmRhdGEuZmxh Z3MpOworLQkgIGdkYl9wcmludGYgKCJcdFx0ZGVidWc9JTA4eFxuIiwgcHJpbnRtZS5kYXRhLmRl YnVnX3ZhZGRyKTsKKy0JICBnZGJfcHJpbnRmICgiXHRcdG9mZnNldD0lc1xuIiwgcGhleCAocHJp bnRtZS5kYXRhLm9mZnNldCwgOCkpOworLQl9CistICAgICAgZ2RiX3ByaW50ZiAoIlx0ZGV2PTB4 JXhcbiIsIHByaW50bWUuZGV2KTsKKy0gICAgICBnZGJfcHJpbnRmICgiXHRpbm89MHgleFxuIiwg KHVuc2lnbmVkIGludCkgcHJpbnRtZS5pbm8pOworLSAgICB9CistICB4ZnJlZSAobWFwaW5mb3Mp OworLSAgcmV0dXJuOworLX0KKy0KKy0vKiBQcmludCBzdGF0dXMgaW5mb3JtYXRpb24gYWJvdXQg d2hhdCB3ZSdyZSBhY2Nlc3NpbmcuICAqLworLXZvaWQKKy1udG9fcHJvY2ZzX3RhcmdldDo6Zmls ZXNfaW5mbyAoKQorLXsKKy0gIHN0cnVjdCBpbmZlcmlvciAqaW5mID0gY3VycmVudF9pbmZlcmlv ciAoKTsKKy0KKy0gIGdkYl9wcmludGYgKCJcdFVzaW5nIHRoZSBydW5uaW5nIGltYWdlIG9mICVz ICVzIHZpYSAlcy5cbiIsCistCSAgICAgIGluZi0+YXR0YWNoX2ZsYWcgPyAiYXR0YWNoZWQiIDog ImNoaWxkIiwKKy0JICAgICAgdGFyZ2V0X3BpZF90b19zdHIgKHB0aWRfdCAoaW5mLT5waWQpKS5j X3N0ciAoKSwKKy0JICAgICAgKG5vZGVzdHIgIT0gTlVMTCkgPyBub2Rlc3RyIDogImxvY2FsIG5v ZGUiKTsKKy19CistCistLyogVGFyZ2V0IHRvX3BpZF90b19leGVjX2ZpbGUgaW1wbGVtZW50YXRp b24uICAqLworLQorLWNvbnN0IGNoYXIgKgorLW50b19wcm9jZnNfdGFyZ2V0OjpwaWRfdG9fZXhl Y19maWxlIChjb25zdCBpbnQgcGlkKQorLXsKKy0gIGludCBwcm9jX2ZkOworLSAgc3RhdGljIGNo YXIgcHJvY19wYXRoW1BBVEhfTUFYXTsKKy0gIHNzaXplX3QgcmQ7CistCistICAvKiBSZWFkIGV4 ZSBmaWxlIG5hbWUuICAqLworLSAgc25wcmludGYgKHByb2NfcGF0aCwgc2l6ZW9mIChwcm9jX3Bh dGgpLCAiJXMvcHJvYy8lZC9leGVmaWxlIiwKKy0JICAgIChub2Rlc3RyICE9IE5VTEwpID8gbm9k ZXN0ciA6ICIiLCBwaWQpOworLSAgcHJvY19mZCA9IG9wZW4gKHByb2NfcGF0aCwgT19SRE9OTFkp OworLSAgaWYgKHByb2NfZmQgPT0gLTEpCistICAgIHJldHVybiBOVUxMOworLQorLSAgcmQgPSBy ZWFkIChwcm9jX2ZkLCBwcm9jX3BhdGgsIHNpemVvZiAocHJvY19wYXRoKSAtIDEpOworLSAgY2xv c2UgKHByb2NfZmQpOworLSAgaWYgKHJkIDw9IDApCistICAgIHsKKy0gICAgICBwcm9jX3BhdGhb MF0gPSAnXDAnOworLSAgICAgIHJldHVybiBOVUxMOworLSAgICB9CistICBwcm9jX3BhdGhbcmRd ID0gJ1wwJzsKKy0gIHJldHVybiBwcm9jX3BhdGg7CistfQorLQorLS8qIEF0dGFjaCB0byBwcm9j ZXNzIFBJRCwgdGhlbiBpbml0aWFsaXplIGZvciBkZWJ1Z2dpbmcgaXQuICAqLworLXZvaWQKKy1u dG9fcHJvY2ZzX3RhcmdldDo6YXR0YWNoIChjb25zdCBjaGFyICphcmdzLCBpbnQgZnJvbV90dHkp CisteworLSAgaW50IHBpZDsKKy0gIHN0cnVjdCBpbmZlcmlvciAqaW5mOworLQorLSAgcGlkID0g cGFyc2VfcGlkX3RvX2F0dGFjaCAoYXJncyk7CistCistICBpZiAocGlkID09IGdldHBpZCAoKSkK Ky0gICAgZXJyb3IgKF8oIkF0dGFjaGluZyBHREIgdG8gaXRzZWxmIGlzIG5vdCBhIGdvb2QgaWRl YS4uLiIpKTsKKy0KKy0gIHRhcmdldF9hbm5vdW5jZV9hdHRhY2ggKGZyb21fdHR5LCBwaWQpOwor LQorLSAgcHRpZF90IHB0aWQgPSBkb19hdHRhY2ggKHB0aWRfdCAocGlkKSk7CistICBpbmYgPSBj dXJyZW50X2luZmVyaW9yICgpOworLSAgaW5mZXJpb3JfYXBwZWFyZWQgKGluZiwgcGlkKTsKKy0g IGluZi0+YXR0YWNoX2ZsYWcgPSB0cnVlOworLQorLSAgaWYgKCFpbmYtPnRhcmdldF9pc19wdXNo ZWQgKG9wcykpCistICAgIGluZi0+cHVzaF90YXJnZXQgKG9wcyk7CistCistICB1cGRhdGVfdGhy ZWFkX2xpc3QgKCk7CistCistICBzd2l0Y2hfdG9fdGhyZWFkICh0aGlzLT5maW5kX3RocmVhZCAo cHRpZCkpOworLX0KKy0KKy12b2lkCistbnRvX3Byb2Nmc190YXJnZXQ6OnBvc3RfYXR0YWNoIChw aWRfdCBwaWQpCisteworLSAgaWYgKGN1cnJlbnRfcHJvZ3JhbV9zcGFjZS0+ZXhlY19iZmQgKCkp CistICAgIHNvbGliX2NyZWF0ZV9pbmZlcmlvcl9ob29rICgwKTsKKy19CistCistc3RhdGljIHB0 aWRfdAorLWRvX2F0dGFjaCAocHRpZF90IHB0aWQpCisteworLSAgcHJvY2ZzX3N0YXR1cyBzdGF0 dXM7CistICBzdHJ1Y3Qgc2lnZXZlbnQgZXZlbnQ7CistICBjaGFyIHBhdGhbUEFUSF9NQVhdOwor LQorLSAgc25wcmludGYgKHBhdGgsIFBBVEhfTUFYIC0gMSwgIiVzJXMvJWQvYXMiLAorLQkgICAg KG5vZGVzdHIgIT0gTlVMTCkgPyBub2Rlc3RyIDogIiIsICIvcHJvYyIsIHB0aWQucGlkICgpKTsK Ky0gIGN0bF9mZCA9IG9wZW4gKHBhdGgsIE9fUkRXUik7CistICBpZiAoY3RsX2ZkID09IC0xKQor LSAgICBlcnJvciAoXygiQ291bGRuJ3Qgb3BlbiBwcm9jIGZpbGUgJXMsIGVycm9yICVkICglcyki KSwgcGF0aCwgZXJybm8sCistCSAgIHNhZmVfc3RyZXJyb3IgKGVycm5vKSk7CistICBpZiAoZGV2 Y3RsIChjdGxfZmQsIERDTURfUFJPQ19TVE9QLCAmc3RhdHVzLCBzaXplb2YgKHN0YXR1cyksIDAp ICE9IEVPSykKKy0gICAgZXJyb3IgKF8oIkNvdWxkbid0IHN0b3AgcHJvY2VzcyIpKTsKKy0KKy0g IC8qIERlZmluZSBhIHNpZ2V2ZW50IGZvciBwcm9jZXNzIHN0b3BwZWQgbm90aWZpY2F0aW9uLiAg Ki8KKy0gIGV2ZW50LnNpZ2V2X25vdGlmeSA9IFNJR0VWX1NJR05BTF9USFJFQUQ7CistICBldmVu dC5zaWdldl9zaWdubyA9IFNJR1VTUjE7CistICBldmVudC5zaWdldl9jb2RlID0gMDsKKy0gIGV2 ZW50LnNpZ2V2X3ZhbHVlLnNpdmFsX3B0ciA9IE5VTEw7CistICBldmVudC5zaWdldl9wcmlvcml0 eSA9IC0xOworLSAgZGV2Y3RsIChjdGxfZmQsIERDTURfUFJPQ19FVkVOVCwgJmV2ZW50LCBzaXpl b2YgKGV2ZW50KSwgMCk7CistCistICBpZiAoZGV2Y3RsIChjdGxfZmQsIERDTURfUFJPQ19TVEFU VVMsICZzdGF0dXMsIHNpemVvZiAoc3RhdHVzKSwgMCkgPT0gRU9LCistICAgICAgJiYgc3RhdHVz LmZsYWdzICYgX0RFQlVHX0ZMQUdfU1RPUFBFRCkKKy0gICAgU2lnbmFsS2lsbCAobnRvX25vZGUg KCksIHB0aWQucGlkICgpLCAwLCBTSUdDT05ULCAwLCAwKTsKKy0gIG50b19pbml0X3NvbGliX2Fi c29sdXRlX3ByZWZpeCAoKTsKKy0gIHJldHVybiBwdGlkX3QgKHB0aWQucGlkICgpLCAwLCBzdGF0 dXMudGlkKTsKKy19CistCistLyogQXNrIHRoZSB1c2VyIHdoYXQgdG8gZG8gd2hlbiBhbiBpbnRl cnJ1cHQgaXMgcmVjZWl2ZWQuICAqLworLXN0YXRpYyB2b2lkCistaW50ZXJydXB0X3F1ZXJ5ICh2 b2lkKQorLXsKKy0gIGlmIChxdWVyeSAoXygiSW50ZXJydXB0ZWQgd2hpbGUgd2FpdGluZyBmb3Ig dGhlIHByb2dyYW0uXG5cCistR2l2ZSB1cCAoYW5kIHN0b3AgZGVidWdnaW5nIGl0KT8gIikpKQor LSAgICB7CistICAgICAgdGFyZ2V0X21vdXJuX2luZmVyaW9yIChpbmZlcmlvcl9wdGlkKTsKKy0g ICAgICBxdWl0ICgpOworLSAgICB9CistfQorLQorLS8qIFRoZSB1c2VyIHR5cGVkIF5DIHR3aWNl LiAgKi8KKy1zdGF0aWMgdm9pZAorLW50b19oYW5kbGVfc2lnaW50X3R3aWNlIChpbnQgc2lnbm8p CisteworLSAgc2lnbmFsIChzaWdubywgb2Z1bmMpOworLSAgaW50ZXJydXB0X3F1ZXJ5ICgpOwor LSAgc2lnbmFsIChzaWdubywgbnRvX2hhbmRsZV9zaWdpbnRfdHdpY2UpOworLX0KKy0KKy1zdGF0 aWMgdm9pZAorLW50b19oYW5kbGVfc2lnaW50IChpbnQgc2lnbm8pCisteworLSAgLyogSWYgdGhp cyBkb2Vzbid0IHdvcmssIHRyeSBtb3JlIHNldmVyZSBzdGVwcy4gICovCistICBzaWduYWwgKHNp Z25vLCBudG9faGFuZGxlX3NpZ2ludF90d2ljZSk7CistCistICB0YXJnZXRfaW50ZXJydXB0ICgp OworLX0KKy0KKy1zcHRpZF90CistbnRvX3Byb2Nmc190YXJnZXQ6OndhaXQgKHB0aWRfdCBwdGlk LCBzdHJ1Y3QgdGFyZ2V0X3dhaXRzdGF0dXMgKm91cnN0YXR1cywKKy0JCQkgdGFyZ2V0X3dhaXRf ZmxhZ3Mgb3B0aW9ucykKKy17CistICBzaWdzZXRfdCBzZXQ7CistICBzaWdpbmZvX3QgaW5mbzsK Ky0gIHByb2Nmc19zdGF0dXMgc3RhdHVzOworLSAgc3RhdGljIGludCBleGl0X3NpZ25vID0gMDsJ LyogVG8gdHJhY2sgc2lnbmFscyB0aGF0IGNhdXNlIHRlcm1pbmF0aW9uLiAgKi8KKy0KKy0gIG91 cnN0YXR1cy0+c2V0X3NwdXJpb3VzICgpOworLQorLSAgaWYgKGluZmVyaW9yX3B0aWQgPT0gbnVs bF9wdGlkKQorLSAgICB7CistICAgICAgb3Vyc3RhdHVzLT5zZXRfc3RvcHBlZCAoR0RCX1NJR05B TF8wKTsKKy0gICAgICBleGl0X3NpZ25vID0gMDsKKy0gICAgICByZXR1cm4gbnVsbF9wdGlkOwor LSAgICB9CistCistICBzaWdlbXB0eXNldCAoJnNldCk7CistICBzaWdhZGRzZXQgKCZzZXQsIFNJ R1VTUjEpOworLQorLSAgZGV2Y3RsIChjdGxfZmQsIERDTURfUFJPQ19TVEFUVVMsICZzdGF0dXMs IHNpemVvZiAoc3RhdHVzKSwgMCk7CistICB3aGlsZSAoIShzdGF0dXMuZmxhZ3MgJiBfREVCVUdf RkxBR19JU1RPUCkpCistICAgIHsKKy0gICAgICBvZnVuYyA9IHNpZ25hbCAoU0lHSU5ULCBudG9f aGFuZGxlX3NpZ2ludCk7CistICAgICAgc2lnd2FpdGluZm8gKCZzZXQsICZpbmZvKTsKKy0gICAg ICBzaWduYWwgKFNJR0lOVCwgb2Z1bmMpOworLSAgICAgIGRldmN0bCAoY3RsX2ZkLCBEQ01EX1BS T0NfU1RBVFVTLCAmc3RhdHVzLCBzaXplb2YgKHN0YXR1cyksIDApOworLSAgICB9CistCistICBu dG9faW5mZXJpb3JfZGF0YSAoTlVMTCktPnN0b3BwZWRfZmxhZ3MgPSBzdGF0dXMuZmxhZ3M7Cist ICBudG9faW5mZXJpb3JfZGF0YSAoTlVMTCktPnN0b3BwZWRfcGMgPSBzdGF0dXMuaXA7CistCist ICBpZiAoc3RhdHVzLmZsYWdzICYgX0RFQlVHX0ZMQUdfU1NURVApCistICAgIG91cnN0YXR1cy0+ c2V0X3N0b3BwZWQgKEdEQl9TSUdOQUxfVFJBUCk7CistICAvKiBXYXMgaXQgYSBicmVha3BvaW50 PyAgKi8KKy0gIGVsc2UgaWYgKHN0YXR1cy5mbGFncyAmIF9ERUJVR19GTEFHX1RSQUNFKQorLSAg ICBvdXJzdGF0dXMtPnNldF9zdG9wcGVkIChHREJfU0lHTkFMX1RSQVApOworLSAgZWxzZSBpZiAo c3RhdHVzLmZsYWdzICYgX0RFQlVHX0ZMQUdfSVNUT1ApCistICAgIHsKKy0gICAgICBzd2l0Y2gg KHN0YXR1cy53aHkpCistCXsKKy0JY2FzZSBfREVCVUdfV0hZX1NJR05BTExFRDoKKy0JICBvdXJz dGF0dXMtPnNldF9zdG9wcGVkIChnZGJfc2lnbmFsX2Zyb21faG9zdCAoc3RhdHVzLmluZm8uc2lf c2lnbm8pKTsKKy0JICBleGl0X3NpZ25vID0gMDsKKy0JICBicmVhazsKKy0JY2FzZSBfREVCVUdf V0hZX0ZBVUxURUQ6CistCSAgaWYgKHN0YXR1cy5pbmZvLnNpX3NpZ25vID09IFNJR1RSQVApCist CSAgICB7CistCSAgICAgIG91cnN0YXR1cy0+c2V0X3N0b3BwZWQgKDApOworLQkgICAgICBleGl0 X3NpZ25vID0gMDsKKy0JICAgIH0KKy0JICBlbHNlCistCSAgICB7CistCSAgICAgIG91cnN0YXR1 cy0+c2V0X3N0b3BwZWQKKy0JCShnZGJfc2lnbmFsX2Zyb21faG9zdCAoc3RhdHVzLmluZm8uc2lf c2lnbm8pKTsKKy0JICAgICAgZXhpdF9zaWdubyA9IG91cnN0YXR1cy0+c2lnICgpOworLQkgICAg fQorLQkgIGJyZWFrOworLQorLQljYXNlIF9ERUJVR19XSFlfVEVSTUlOQVRFRDoKKy0JICB7Cist CSAgICBpbnQgd2FpdHZhbCA9IDA7CistCistCSAgICB3YWl0cGlkIChpbmZlcmlvcl9wdGlkLnBp ZCAoKSwgJndhaXR2YWwsIFdOT0hBTkcpOworLQkgICAgaWYgKGV4aXRfc2lnbm8pCistCSAgICAg IHsKKy0JCS8qIEFibm9ybWFsIGRlYXRoLiAgKi8KKy0JCW91cnN0YXR1cy0+c2V0X3NpZ25hbGxl ZCAoZXhpdF9zaWdubyk7CistCSAgICAgIH0KKy0JICAgIGVsc2UKKy0JICAgICAgeworLQkJLyog Tm9ybWFsIGRlYXRoLiAgKi8KKy0JCW91cnN0YXR1cy0+c2V0X2V4aXRlZCAoV0VYSVRTVEFUVVMg KHdhaXR2YWwpKTsKKy0JICAgICAgfQorLQkgICAgZXhpdF9zaWdubyA9IDA7CistCSAgICBicmVh azsKKy0JICB9CistCistCWNhc2UgX0RFQlVHX1dIWV9SRVFVRVNURUQ6CistCSAgLyogV2UgYXJl IGFzc3VtaW5nIGEgcmVxdWVzdGVkIHN0b3AgaXMgZHVlIHRvIGEgU0lHSU5ULiAgKi8KKy0JICBv dXJzdGF0dXMtPnNldF9zdG9wcGVkIChHREJfU0lHTkFMX0lOVCk7CistCSAgZXhpdF9zaWdubyA9 IDA7CistCSAgYnJlYWs7CistCX0KKy0gICAgfQorLQorLSAgcmV0dXJuIHB0aWRfdCAoc3RhdHVz LnBpZCwgMCwgc3RhdHVzLnRpZCk7CistfQorLQorLS8qIFJlYWQgdGhlIGN1cnJlbnQgdmFsdWVz IG9mIHRoZSBpbmZlcmlvcidzIHJlZ2lzdGVycywgYm90aCB0aGUKKy0gICBnZW5lcmFsIHJlZ2lz dGVyIHNldCBhbmQgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzIChpZiBzdXBwb3J0ZWQpCistICAg YW5kIHVwZGF0ZSBnZGIncyBpZGVhIG9mIHRoZWlyIGN1cnJlbnQgdmFsdWVzLiAgKi8KKy12b2lk CistbnRvX3Byb2Nmc190YXJnZXQ6OmZldGNoX3JlZ2lzdGVycyAoc3RydWN0IHJlZ2NhY2hlICpy ZWdjYWNoZSwgaW50IHJlZ25vKQorLXsKKy0gIHVuaW9uCistICB7CistICAgIHByb2Nmc19ncmVn IGdyZWc7CistICAgIHByb2Nmc19mcHJlZyBmcHJlZzsKKy0gICAgcHJvY2ZzX2FsdHJlZyBhbHRy ZWc7CistICB9CistICByZWc7CistICBpbnQgcmVnc2l6ZTsKKy0KKy0gIHByb2Nmc19zZXRfdGhy ZWFkIChyZWdjYWNoZS0+cHRpZCAoKSk7CistICBpZiAoZGV2Y3RsIChjdGxfZmQsIERDTURfUFJP Q19HRVRHUkVHLCAmcmVnLCBzaXplb2YgKHJlZyksICZyZWdzaXplKSA9PSBFT0spCistICAgIG50 b19zdXBwbHlfZ3JlZ3NldCAocmVnY2FjaGUsIChjaGFyICopICZyZWcuZ3JlZyk7CistICBpZiAo ZGV2Y3RsIChjdGxfZmQsIERDTURfUFJPQ19HRVRGUFJFRywgJnJlZywgc2l6ZW9mIChyZWcpLCAm cmVnc2l6ZSkKKy0gICAgICA9PSBFT0spCistICAgIG50b19zdXBwbHlfZnByZWdzZXQgKHJlZ2Nh Y2hlLCAoY2hhciAqKSAmcmVnLmZwcmVnKTsKKy0gIGlmIChkZXZjdGwgKGN0bF9mZCwgRENNRF9Q Uk9DX0dFVEFMVFJFRywgJnJlZywgc2l6ZW9mIChyZWcpLCAmcmVnc2l6ZSkKKy0gICAgICA9PSBF T0spCistICAgIG50b19zdXBwbHlfYWx0cmVnc2V0IChyZWdjYWNoZSwgKGNoYXIgKikgJnJlZy5h bHRyZWcpOworLX0KKy0KKy0vKiBIZWxwZXIgZm9yIHByb2Nmc194ZmVyX3BhcnRpYWwgdGhhdCBo YW5kbGVzIG1lbW9yeSB0cmFuc2ZlcnMuCistICAgQXJndW1lbnRzIGFyZSBsaWtlIHRhcmdldF94 ZmVyX3BhcnRpYWwuICAqLworLQorLXN0YXRpYyBlbnVtIHRhcmdldF94ZmVyX3N0YXR1cworLXBy b2Nmc194ZmVyX21lbW9yeSAoZ2RiX2J5dGUgKnJlYWRidWYsIGNvbnN0IGdkYl9ieXRlICp3cml0 ZWJ1ZiwKKy0JCSAgICBVTE9OR0VTVCBtZW1hZGRyLCBVTE9OR0VTVCBsZW4sIFVMT05HRVNUICp4 ZmVyZWRfbGVuKQorLXsKKy0gIGludCBuYnl0ZXM7CistCistICBpZiAobHNlZWsgKGN0bF9mZCwg KG9mZl90KSBtZW1hZGRyLCBTRUVLX1NFVCkgIT0gKG9mZl90KSBtZW1hZGRyKQorLSAgICByZXR1 cm4gVEFSR0VUX1hGRVJfRV9JTzsKKy0KKy0gIGlmICh3cml0ZWJ1ZiAhPSBOVUxMKQorLSAgICBu Ynl0ZXMgPSB3cml0ZSAoY3RsX2ZkLCB3cml0ZWJ1ZiwgbGVuKTsKKy0gIGVsc2UKKy0gICAgbmJ5 dGVzID0gcmVhZCAoY3RsX2ZkLCByZWFkYnVmLCBsZW4pOworLSAgaWYgKG5ieXRlcyA8PSAwKQor LSAgICByZXR1cm4gVEFSR0VUX1hGRVJfRV9JTzsKKy0gICp4ZmVyZWRfbGVuID0gbmJ5dGVzOwor LSAgcmV0dXJuIFRBUkdFVF9YRkVSX09LOworLX0KKy0KKy0vKiBUYXJnZXQgdG9feGZlcl9wYXJ0 aWFsIGltcGxlbWVudGF0aW9uLiAgKi8KKy0KKy1lbnVtIHRhcmdldF94ZmVyX3N0YXR1cworLW50 b19wcm9jZnNfdGFyZ2V0Ojp4ZmVyX3BhcnRpYWwgKGVudW0gdGFyZ2V0X29iamVjdCBvYmplY3Qs CistCQkJCSBjb25zdCBjaGFyICphbm5leCwgZ2RiX2J5dGUgKnJlYWRidWYsCistCQkJCSBjb25z dCBnZGJfYnl0ZSAqd3JpdGVidWYsIFVMT05HRVNUIG9mZnNldCwKKy0JCQkJIFVMT05HRVNUIGxl biwgVUxPTkdFU1QgKnhmZXJlZF9sZW4pCisteworLSAgc3dpdGNoIChvYmplY3QpCistICAgIHsK Ky0gICAgY2FzZSBUQVJHRVRfT0JKRUNUX01FTU9SWToKKy0gICAgICByZXR1cm4gcHJvY2ZzX3hm ZXJfbWVtb3J5IChyZWFkYnVmLCB3cml0ZWJ1Ziwgb2Zmc2V0LCBsZW4sIHhmZXJlZF9sZW4pOwor LSAgICBjYXNlIFRBUkdFVF9PQkpFQ1RfQVVYVjoKKy0gICAgICBpZiAocmVhZGJ1ZiAhPSBOVUxM KQorLQl7CistCSAgaW50IGVycjsKKy0JICBDT1JFX0FERFIgaW5pdGlhbF9zdGFjazsKKy0JICBk ZWJ1Z19wcm9jZXNzX3QgcHJvY2luZm87CistCSAgLyogRm9yIDMyLWJpdCBhcmNoaXRlY3R1cmUs IHNpemUgb2YgYXV4dl90IGlzIDggYnl0ZXMuICAqLworLQkgIGNvbnN0IHVuc2lnbmVkIGludCBz aXplb2ZfYXV4dl90ID0gc2l6ZW9mIChhdXh2X3QpOworLQkgIGNvbnN0IHVuc2lnbmVkIGludCBz aXplb2ZfdGVtcGJ1ZiA9IDIwICogc2l6ZW9mX2F1eHZfdDsKKy0JICBpbnQgdGVtcHJlYWQ7Cist CSAgZ2RiX2J5dGUgKmNvbnN0IHRlbXBidWYgPSBhbGxvY2EgKHNpemVvZl90ZW1wYnVmKTsKKy0K Ky0JICBpZiAodGVtcGJ1ZiA9PSBOVUxMKQorLQkgICAgcmV0dXJuIFRBUkdFVF9YRkVSX0VfSU87 CistCistCSAgZXJyID0gZGV2Y3RsIChjdGxfZmQsIERDTURfUFJPQ19JTkZPLCAmcHJvY2luZm8s CistCQkJc2l6ZW9mIHByb2NpbmZvLCAwKTsKKy0JICBpZiAoZXJyICE9IEVPSykKKy0JICAgIHJl dHVybiBUQVJHRVRfWEZFUl9FX0lPOworLQorLQkgIGluaXRpYWxfc3RhY2sgPSBwcm9jaW5mby5p bml0aWFsX3N0YWNrOworLQorLQkgIC8qIHByb2NmcyBpcyBhbHdheXMgJ3NlbGYtaG9zdGVkJywg bm8gYnl0ZS1vcmRlciBtYW5pcHVsYXRpb24uICAqLworLQkgIHRlbXByZWFkID0gbnRvX3JlYWRf YXV4dl9mcm9tX2luaXRpYWxfc3RhY2sgKGluaXRpYWxfc3RhY2ssIHRlbXBidWYsCistCQkJCQkJ ICAgICAgIHNpemVvZl90ZW1wYnVmLAorLQkJCQkJCSAgICAgICBzaXplb2YgKGF1eHZfdCkpOwor LQkgIHRlbXByZWFkID0gc3RkOjptaW4gKHRlbXByZWFkLCBsZW4pIC0gb2Zmc2V0OworLQkgIG1l bWNweSAocmVhZGJ1ZiwgdGVtcGJ1ZiArIG9mZnNldCwgdGVtcHJlYWQpOworLQkgICp4ZmVyZWRf bGVuID0gdGVtcHJlYWQ7CistCSAgcmV0dXJuIHRlbXByZWFkID8gVEFSR0VUX1hGRVJfT0sgOiBU QVJHRVRfWEZFUl9FT0Y7CistCX0KKy0JLyogRmFsbHRocnUgKi8KKy0gICAgZGVmYXVsdDoKKy0g ICAgICByZXR1cm4gdGhpcy0+YmVuZWF0aCAoKS0+eGZlcl9wYXJ0aWFsIChvYmplY3QsIGFubmV4 LAorLQkJCQkJICAgICByZWFkYnVmLCB3cml0ZWJ1Ziwgb2Zmc2V0LCBsZW4sCistCQkJCQkgICAg IHhmZXJlZF9sZW4pOworLSAgICB9CistfQorLQorLS8qIFRha2UgYSBwcm9ncmFtIHByZXZpb3Vz bHkgYXR0YWNoZWQgdG8gYW5kIGRldGFjaGVzIGl0LgorLSAgIFRoZSBwcm9ncmFtIHJlc3VtZXMg ZXhlY3V0aW9uIGFuZCB3aWxsIG5vIGxvbmdlciBzdG9wCistICAgb24gc2lnbmFscywgZXRjLiAg V2UnZCBiZXR0ZXIgbm90IGhhdmUgbGVmdCBhbnkgYnJlYWtwb2ludHMKKy0gICBpbiB0aGUgcHJv Z3JhbSBvciBpdCdsbCBkaWUgd2hlbiBpdCBoaXRzIG9uZS4gICovCistdm9pZAorLW50b19wcm9j ZnNfdGFyZ2V0OjpkZXRhY2ggKGluZmVyaW9yICppbmYsIGludCBmcm9tX3R0eSkKKy17CistICB0 YXJnZXRfYW5ub3VuY2VfZGV0YWNoICgpOworLQorLSAgaWYgKHNpZ2duYWwpCistICAgIFNpZ25h bEtpbGwgKG50b19ub2RlICgpLCBpbmYtPnBpZCwgMCwgMCwgMCwgMCk7CistCistICBjbG9zZSAo Y3RsX2ZkKTsKKy0gIGN0bF9mZCA9IC0xOworLQorLSAgc3dpdGNoX3RvX25vX3RocmVhZCAoKTsK Ky0gIGRldGFjaF9pbmZlcmlvciAoaW5mLT5waWQpOworLSAgaW5pdF90aHJlYWRfbGlzdCAoKTsK Ky0gIGluZl9jaGlsZF9tYXliZV91bnB1c2hfdGFyZ2V0IChvcHMpOworLX0KKy0KKy1zdGF0aWMg aW50CistcHJvY2ZzX2JyZWFrcG9pbnQgKENPUkVfQUREUiBhZGRyLCBpbnQgdHlwZSwgaW50IHNp emUpCisteworLSAgcHJvY2ZzX2JyZWFrIGJyazsKKy0KKy0gIGJyay50eXBlID0gdHlwZTsKKy0g IGJyay5hZGRyID0gYWRkcjsKKy0gIGJyay5zaXplID0gc2l6ZTsKKy0gIGVycm5vID0gZGV2Y3Rs IChjdGxfZmQsIERDTURfUFJPQ19CUkVBSywgJmJyaywgc2l6ZW9mIChicmspLCAwKTsKKy0gIGlm IChlcnJubyAhPSBFT0spCistICAgIHJldHVybiAxOworLSAgcmV0dXJuIDA7CistfQorLQorLWlu dAorLW50b19wcm9jZnNfdGFyZ2V0OjppbnNlcnRfYnJlYWtwb2ludCAoc3RydWN0IGdkYmFyY2gg KmdkYmFyY2gsCistCQkJCSAgICAgIHN0cnVjdCBicF90YXJnZXRfaW5mbyAqYnBfdGd0KQorLXsK Ky0gIGJwX3RndC0+cGxhY2VkX2FkZHJlc3MgPSBicF90Z3QtPnJlcXN0ZF9hZGRyZXNzOworLSAg cmV0dXJuIHByb2Nmc19icmVha3BvaW50IChicF90Z3QtPnBsYWNlZF9hZGRyZXNzLCBfREVCVUdf QlJFQUtfRVhFQywgMCk7CistfQorLQorLWludAorLW50b19wcm9jZnNfdGFyZ2V0OjpyZW1vdmVf YnJlYWtwb2ludCAoc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gsCistCQkJCSAgICAgIHN0cnVjdCBi cF90YXJnZXRfaW5mbyAqYnBfdGd0LAorLQkJCQkgICAgICBlbnVtIHJlbW92ZV9icF9yZWFzb24g cmVhc29uKQorLXsKKy0gIHJldHVybiBwcm9jZnNfYnJlYWtwb2ludCAoYnBfdGd0LT5wbGFjZWRf YWRkcmVzcywgX0RFQlVHX0JSRUFLX0VYRUMsIC0xKTsKKy19CistCistaW50CistbnRvX3Byb2Nm c190YXJnZXQ6Omluc2VydF9od19icmVha3BvaW50IChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwK Ky0JCQkJCSBzdHJ1Y3QgYnBfdGFyZ2V0X2luZm8gKmJwX3RndCkKKy17CistICBicF90Z3QtPnBs YWNlZF9hZGRyZXNzID0gYnBfdGd0LT5yZXFzdGRfYWRkcmVzczsKKy0gIHJldHVybiBwcm9jZnNf YnJlYWtwb2ludCAoYnBfdGd0LT5wbGFjZWRfYWRkcmVzcywKKy0JCQkgICAgX0RFQlVHX0JSRUFL X0VYRUMgfCBfREVCVUdfQlJFQUtfSFcsIDApOworLX0KKy0KKy1pbnQKKy1udG9fcHJvY2ZzX3Rh cmdldDo6cmVtb3ZlX2h3X2JyZWFrcG9pbnQgKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoLAorLQkJ CQkJIHN0cnVjdCBicF90YXJnZXRfaW5mbyAqYnBfdGd0KQorLXsKKy0gIHJldHVybiBwcm9jZnNf YnJlYWtwb2ludCAoYnBfdGd0LT5wbGFjZWRfYWRkcmVzcywKKy0JCQkgICAgX0RFQlVHX0JSRUFL X0VYRUMgfCBfREVCVUdfQlJFQUtfSFcsIC0xKTsKKy19CistCistdm9pZAorLW50b19wcm9jZnNf dGFyZ2V0OjpyZXN1bWUgKHB0aWRfdCBwdGlkLCBpbnQgc3RlcCwgZW51bSBnZGJfc2lnbmFsIHNp Z25vKQorLXsKKy0gIGludCBzaWduYWxfdG9fcGFzczsKKy0gIHByb2Nmc19zdGF0dXMgc3RhdHVz OworLSAgc2lnc2V0X3QgKnJ1bl9mYXVsdCA9IChzaWdzZXRfdCAqKSAodm9pZCAqKSAmcnVuLmZh dWx0OworLQorLSAgaWYgKGluZmVyaW9yX3B0aWQgPT0gbnVsbF9wdGlkKQorLSAgICByZXR1cm47 CistCistICBwcm9jZnNfc2V0X3RocmVhZCAocHRpZCA9PSBtaW51c19vbmVfcHRpZCA/IGluZmVy aW9yX3B0aWQgOgorLQkJICAgICBwdGlkKTsKKy0KKy0gIHJ1bi5mbGFncyA9IF9ERUJVR19SVU5f RkFVTFQgfCBfREVCVUdfUlVOX1RSQUNFOworLSAgaWYgKHN0ZXApCistICAgIHJ1bi5mbGFncyB8 PSBfREVCVUdfUlVOX1NURVA7CistCistICBzaWdlbXB0eXNldCAocnVuX2ZhdWx0KTsKKy0gIHNp Z2FkZHNldCAocnVuX2ZhdWx0LCBGTFRCUFQpOworLSAgc2lnYWRkc2V0IChydW5fZmF1bHQsIEZM VFRSQUNFKTsKKy0gIHNpZ2FkZHNldCAocnVuX2ZhdWx0LCBGTFRJTEwpOworLSAgc2lnYWRkc2V0 IChydW5fZmF1bHQsIEZMVFBSSVYpOworLSAgc2lnYWRkc2V0IChydW5fZmF1bHQsIEZMVEJPVU5E Uyk7CistICBzaWdhZGRzZXQgKHJ1bl9mYXVsdCwgRkxUSU9WRik7CistICBzaWdhZGRzZXQgKHJ1 bl9mYXVsdCwgRkxUSVpESVYpOworLSAgc2lnYWRkc2V0IChydW5fZmF1bHQsIEZMVEZQRSk7Cist ICAvKiBQZXRlciBWIHdpbGwgYmUgY2hhbmdpbmcgdGhpcyBhdCBzb21lIHBvaW50LiAgKi8KKy0g IHNpZ2FkZHNldCAocnVuX2ZhdWx0LCBGTFRQQUdFKTsKKy0KKy0gIHJ1bi5mbGFncyB8PSBfREVC VUdfUlVOX0FSTTsKKy0KKy0gIHNpZ25hbF90b19wYXNzID0gZ2RiX3NpZ25hbF90b19ob3N0IChz aWdubyk7CistCistICBpZiAoc2lnbmFsX3RvX3Bhc3MpCistICAgIHsKKy0gICAgICBkZXZjdGwg KGN0bF9mZCwgRENNRF9QUk9DX1NUQVRVUywgJnN0YXR1cywgc2l6ZW9mIChzdGF0dXMpLCAwKTsK Ky0gICAgICBzaWduYWxfdG9fcGFzcyA9IGdkYl9zaWduYWxfdG9faG9zdCAoc2lnbm8pOworLSAg ICAgIGlmIChzdGF0dXMud2h5ICYgKF9ERUJVR19XSFlfU0lHTkFMTEVEIHwgX0RFQlVHX1dIWV9G QVVMVEVEKSkKKy0JeworLQkgIGlmIChzaWduYWxfdG9fcGFzcyAhPSBzdGF0dXMuaW5mby5zaV9z aWdubykKKy0JICAgIHsKKy0JICAgICAgU2lnbmFsS2lsbCAobnRvX25vZGUgKCksIGluZmVyaW9y X3B0aWQucGlkICgpLCAwLAorLQkJCSAgc2lnbmFsX3RvX3Bhc3MsIDAsIDApOworLQkgICAgICBy dW4uZmxhZ3MgfD0gX0RFQlVHX1JVTl9DTFJGTFQgfCBfREVCVUdfUlVOX0NMUlNJRzsKKy0JICAg IH0KKy0JICBlbHNlCQkvKiBMZXQgaXQga2lsbCB0aGUgcHJvZ3JhbSB3aXRob3V0IHRlbGxpbmcg dXMuICAqLworLQkgICAgc2lnZGVsc2V0ICgmcnVuLnRyYWNlLCBzaWduYWxfdG9fcGFzcyk7Cist CX0KKy0gICAgfQorLSAgZWxzZQorLSAgICBydW4uZmxhZ3MgfD0gX0RFQlVHX1JVTl9DTFJTSUcg fCBfREVCVUdfUlVOX0NMUkZMVDsKKy0KKy0gIGVycm5vID0gZGV2Y3RsIChjdGxfZmQsIERDTURf UFJPQ19SVU4sICZydW4sIHNpemVvZiAocnVuKSwgMCk7CistICBpZiAoZXJybm8gIT0gRU9LKQor LSAgICB7CistICAgICAgcGVycm9yIChfKCJydW4gZXJyb3IhXG4iKSk7CistICAgICAgcmV0dXJu OworLSAgICB9CistfQorLQorLXZvaWQKKy1udG9fcHJvY2ZzX3RhcmdldDo6bW91cm5faW5mZXJp b3IgKCkKKy17CistICBpZiAoaW5mZXJpb3JfcHRpZCAhPSBudWxsX3B0aWQpCistICAgIHsKKy0g ICAgICBTaWduYWxLaWxsIChudG9fbm9kZSAoKSwgaW5mZXJpb3JfcHRpZC5waWQgKCksIDAsIFNJ R0tJTEwsIDAsIDApOworLSAgICAgIGNsb3NlIChjdGxfZmQpOworLSAgICB9CistICBzd2l0Y2hf dG9fbm9fdGhyZWFkICgpOworLSAgaW5pdF90aHJlYWRfbGlzdCAoKTsKKy0gIGluZl9jaGlsZF9t b3Vybl9pbmZlcmlvciAob3BzKTsKKy19CistCistLyogVGhpcyBmdW5jdGlvbiBicmVha3MgdXAg YW4gYXJndW1lbnQgc3RyaW5nIGludG8gYW4gYXJndW1lbnQKKy0gICB2ZWN0b3Igc3VpdGFibGUg Zm9yIHBhc3NpbmcgdG8gZXhlY3ZwKCkuCistICAgRS5nLiwgb24gInJ1biBhIGIgYyBkIiB0aGlz IHJvdXRpbmUgd291bGQgZ2V0IGFzIGlucHV0CistICAgdGhlIHN0cmluZyAiYSBiIGMgZCIsIGFu ZCBhcyBvdXRwdXQgaXQgd291bGQgZmlsbCBpbiBhcmd2IHdpdGgKKy0gICB0aGUgZm91ciBhcmd1 bWVudHMgImEiLCAiYiIsICJjIiwgImQiLiAgVGhlIG9ubHkgYWRkaXRpb25hbAorLSAgIGZ1bmN0 aW9uYWxpdHkgaXMgc2ltcGxlIHF1b3RpbmcuICBUaGUgZ2RiIGNvbW1hbmQ6CistCXJ1biBhICJi IGMgZCIgZgorLSAgIHdpbGwgZmlsbCBpbiBhcmd2IHdpdGggdGhlIHRocmVlIGFyZ3MgImEiLCAi YiBjIGQiLCAiZSIuICAqLworLXN0YXRpYyB2b2lkCistYnJlYWt1cF9hcmdzIChjaGFyICpzY3Jh dGNoLCBjaGFyICoqYXJndikKKy17CistICBjaGFyICpwcCwgKmNwID0gc2NyYXRjaDsKKy0gIGNo YXIgcXVvdGluZyA9IDA7CistCistICBmb3IgKDs7KQorLSAgICB7CistICAgICAgLyogU2NhbiBw YXN0IGxlYWRpbmcgc2VwYXJhdG9ycy4gICovCistICAgICAgcXVvdGluZyA9IDA7CistICAgICAg d2hpbGUgKCpjcCA9PSAnICcgfHwgKmNwID09ICdcdCcgfHwgKmNwID09ICdcbicpCistCWNwKys7 CistCistICAgICAgLyogQnJlYWsgaWYgYXQgZW5kIG9mIHN0cmluZy4gICovCistICAgICAgaWYg KCpjcCA9PSAnXDAnKQorLQlicmVhazsKKy0KKy0gICAgICAvKiBUYWtlIGFuIGFyZy4gICovCist ICAgICAgaWYgKCpjcCA9PSAnIicpCistCXsKKy0JICBjcCsrOworLQkgIHF1b3RpbmcgPSBzdHJj aHIgKGNwLCAnIicpID8gMSA6IDA7CistCX0KKy0KKy0gICAgICAqYXJndisrID0gY3A7CistCist ICAgICAgLyogU2NhbiBmb3IgbmV4dCBhcmcgc2VwYXJhdG9yLiAgKi8KKy0gICAgICBwcCA9IGNw OworLSAgICAgIGlmIChxdW90aW5nKQorLQljcCA9IHN0cmNociAocHAsICciJyk7CistICAgICAg aWYgKChjcCA9PSBOVUxMKSB8fCAoIXF1b3RpbmcpKQorLQljcCA9IHN0cmNociAocHAsICcgJyk7 CistICAgICAgaWYgKGNwID09IE5VTEwpCistCWNwID0gc3RyY2hyIChwcCwgJ1x0Jyk7CistICAg ICAgaWYgKGNwID09IE5VTEwpCistCWNwID0gc3RyY2hyIChwcCwgJ1xuJyk7CistCistICAgICAg LyogTm8gc2VwYXJhdG9ycyA9PiBlbmQgb2Ygc3RyaW5nID0+IGJyZWFrLiAgKi8KKy0gICAgICBp ZiAoY3AgPT0gTlVMTCkKKy0JeworLQkgIHBwID0gY3A7CistCSAgYnJlYWs7CistCX0KKy0KKy0g ICAgICAvKiBSZXBsYWNlIHRoZSBzZXBhcmF0b3Igd2l0aCBhIHRlcm1pbmF0b3IuICAqLworLSAg ICAgICpjcCsrID0gJ1wwJzsKKy0gICAgfQorLQorLSAgLyogRXhlY3YgcmVxdWlyZXMgYSBudWxs LXRlcm1pbmF0ZWQgYXJnIHZlY3Rvci4gICovCistICAqYXJndiA9IE5VTEw7CistfQorLQorLXZv aWQKKy1udG9fcHJvY2ZzX3RhcmdldDo6Y3JlYXRlX2luZmVyaW9yIChjb25zdCBjaGFyICpleGVj X2ZpbGUsCistCQkJCSAgICBjb25zdCBzdGQ6OnN0cmluZyAmYWxsYXJncywKKy0JCQkJICAgIGNo YXIgKiplbnYsIGludCBmcm9tX3R0eSkKKy17CistICBzdHJ1Y3QgaW5oZXJpdGFuY2UgaW5oZXJp dDsKKy0gIHBpZF90IHBpZDsKKy0gIGludCBmbGFncywgZXJybjsKKy0gIGNoYXIgKiphcmd2LCAq YXJnczsKKy0gIGNvbnN0IGNoYXIgKmluID0gIiIsICpvdXQgPSAiIiwgKmVyciA9ICIiOworLSAg aW50IGZkLCBmZHNbM107CistICBzaWdzZXRfdCBzZXQ7CistICBzdHJ1Y3QgaW5mZXJpb3IgKmlu ZjsKKy0KKy0gIGFyZ3YgPSB4bWFsbG9jICgoYWxsYXJncy5zaXplICgpIC8gKHVuc2lnbmVkKSAy ICsgMikgKgorLQkJICBzaXplb2YgKCphcmd2KSk7CistICBhcmd2WzBdID0gY29uc3RfY2FzdDxj aGFyICo+IChnZXRfZXhlY19maWxlICgxKSk7CistICBpZiAoIWFyZ3ZbMF0pCistICAgIHsKKy0g ICAgICBpZiAoZXhlY19maWxlKQorLQlhcmd2WzBdID0gZXhlY19maWxlOworLSAgICAgIGVsc2UK Ky0JcmV0dXJuOworLSAgICB9CistCistICBhcmdzID0geHN0cmR1cCAoYWxsYXJncy5jX3N0ciAo KSk7CistICBicmVha3VwX2FyZ3MgKGFyZ3MsIChleGVjX2ZpbGUgIT0gTlVMTCkgPyAmYXJndlsx XSA6ICZhcmd2WzBdKTsKKy0KKy0gIGFyZ3YgPSBudG9fcGFyc2VfcmVkaXJlY3Rpb24gKGFyZ3Ys ICZpbiwgJm91dCwgJmVycik7CistCistICBmZHNbMF0gPSBTVERJTl9GSUxFTk87CistICBmZHNb MV0gPSBTVERPVVRfRklMRU5POworLSAgZmRzWzJdID0gU1RERVJSX0ZJTEVOTzsKKy0KKy0gIC8q IElmIHRoZSB1c2VyIHNwZWNpZmllZCBJL08gdmlhIGdkYidzIC0tdHR5PSBhcmcsIHVzZSBpdCwg YnV0IG9ubHkKKy0gICAgIGlmIHRoZSBpL28gaXMgbm90IGFsc28gYmVpbmcgc3BlY2lmaWVkIHZp YSByZWRpcmVjdGlvbi4gICovCistICBjb25zdCBjaGFyICppbmZlcmlvcl90dHkgPSBjdXJyZW50 X2luZmVyaW9yICgpLT50dHkgKCk7CistICBpZiAoaW5mZXJpb3JfdHR5ICE9IG51bGxwdHIpCist ICAgIHsKKy0gICAgICBpZiAoIWluWzBdKQorLQlpbiA9IGluZmVyaW9yX3R0eTsKKy0gICAgICBp ZiAoIW91dFswXSkKKy0Jb3V0ID0gaW5mZXJpb3JfdHR5OworLSAgICAgIGlmICghZXJyWzBdKQor LQllcnIgPSBpbmZlcmlvcl90dHk7CistICAgIH0KKy0KKy0gIGlmIChpblswXSkKKy0gICAgewor LSAgICAgIGZkID0gb3BlbiAoaW4sIE9fUkRPTkxZKTsKKy0gICAgICBpZiAoZmQgPT0gLTEpCist CXBlcnJvciAoaW4pOworLSAgICAgIGVsc2UKKy0JZmRzWzBdID0gZmQ7CistICAgIH0KKy0gIGlm IChvdXRbMF0pCistICAgIHsKKy0gICAgICBmZCA9IG9wZW4gKG91dCwgT19XUk9OTFkpOworLSAg ICAgIGlmIChmZCA9PSAtMSkKKy0JcGVycm9yIChvdXQpOworLSAgICAgIGVsc2UKKy0JZmRzWzFd ID0gZmQ7CistICAgIH0KKy0gIGlmIChlcnJbMF0pCistICAgIHsKKy0gICAgICBmZCA9IG9wZW4g KGVyciwgT19XUk9OTFkpOworLSAgICAgIGlmIChmZCA9PSAtMSkKKy0JcGVycm9yIChlcnIpOwor LSAgICAgIGVsc2UKKy0JZmRzWzJdID0gZmQ7CistICAgIH0KKy0KKy0gIC8qIENsZWFyIGFueSBw ZW5kaW5nIFNJR1VTUjEncyBidXQga2VlcCB0aGUgYmVoYXZpb3IgdGhlIHNhbWUuICAqLworLSAg c2lnbmFsIChTSUdVU1IxLCBzaWduYWwgKFNJR1VTUjEsIFNJR19JR04pKTsKKy0KKy0gIHNpZ2Vt cHR5c2V0ICgmc2V0KTsKKy0gIHNpZ2FkZHNldCAoJnNldCwgU0lHVVNSMSk7CistICBzaWdwcm9j bWFzayAoU0lHX1VOQkxPQ0ssICZzZXQsIE5VTEwpOworLQorLSAgbWVtc2V0ICgmaW5oZXJpdCwg MCwgc2l6ZW9mIChpbmhlcml0KSk7CistCistICBpZiAoTkRfTk9ERV9DTVAgKG50b19wcm9jZnNf bm9kZSwgTkRfTE9DQUxfTk9ERSkgIT0gMCkKKy0gICAgeworLSAgICAgIGluaGVyaXQubmQgPSBu dG9fbm9kZSAoKTsKKy0gICAgICBpbmhlcml0LmZsYWdzIHw9IFNQQVdOX1NFVE5EOworLSAgICAg IGluaGVyaXQuZmxhZ3MgJj0gflNQQVdOX0VYRUM7CistICAgIH0KKy0gIGluaGVyaXQuZmxhZ3Mg fD0gU1BBV05fU0VUR1JPVVAgfCBTUEFXTl9IT0xEOworLSAgaW5oZXJpdC5wZ3JvdXAgPSBTUEFX Tl9ORVdQR1JPVVA7CistICBwaWQgPSBzcGF3bnAgKGFyZ3ZbMF0sIDMsIGZkcywgJmluaGVyaXQs IGFyZ3YsCistCQlORF9OT0RFX0NNUCAobnRvX3Byb2Nmc19ub2RlLCBORF9MT0NBTF9OT0RFKSA9 PSAwID8gZW52IDogMCk7CistICB4ZnJlZSAoYXJncyk7CistCistICBzaWdwcm9jbWFzayAoU0lH X0JMT0NLLCAmc2V0LCBOVUxMKTsKKy0KKy0gIGlmIChwaWQgPT0gLTEpCistICAgIGVycm9yIChf KCJFcnJvciBzcGF3bmluZyAlczogJWQgKCVzKSIpLCBhcmd2WzBdLCBlcnJubywKKy0JICAgc2Fm ZV9zdHJlcnJvciAoZXJybm8pKTsKKy0KKy0gIGlmIChmZHNbMF0gIT0gU1RESU5fRklMRU5PKQor LSAgICBjbG9zZSAoZmRzWzBdKTsKKy0gIGlmIChmZHNbMV0gIT0gU1RET1VUX0ZJTEVOTykKKy0g ICAgY2xvc2UgKGZkc1sxXSk7CistICBpZiAoZmRzWzJdICE9IFNUREVSUl9GSUxFTk8pCistICAg IGNsb3NlIChmZHNbMl0pOworLQorLSAgcHRpZF90IHB0aWQgPSBkb19hdHRhY2ggKHB0aWRfdCAo cGlkKSk7CistICB1cGRhdGVfdGhyZWFkX2xpc3QgKCk7CistICBzd2l0Y2hfdG9fdGhyZWFkICh0 aGlzLT5maW5kX3RocmVhZCAocHRpZCkpOworLQorLSAgaW5mID0gY3VycmVudF9pbmZlcmlvciAo KTsKKy0gIGluZmVyaW9yX2FwcGVhcmVkIChpbmYsIHBpZCk7CistICBpbmYtPmF0dGFjaF9mbGFn ID0gZmFsc2U7CistCistICBmbGFncyA9IF9ERUJVR19GTEFHX0tMQzsJLyogS2lsbC1vbi1MYXN0 LUNsb3NlIGZsYWcuICAqLworLSAgZXJybiA9IGRldmN0bCAoY3RsX2ZkLCBEQ01EX1BST0NfU0VU X0ZMQUcsICZmbGFncywgc2l6ZW9mIChmbGFncyksIDApOworLSAgaWYgKGVycm4gIT0gRU9LKQor LSAgICB7CistICAgICAgLyogRklYTUU6IGV4cGVjdGVkIHdhcm5pbmc/ICAqLworLSAgICAgIC8q IHdhcm5pbmcoICJGYWlsZWQgdG8gc2V0IEtpbGwtb24tTGFzdC1DbG9zZSBmbGFnOiBlcnJubyA9 ICVkKCVzKVxuIiwKKy0JIGVycm4sIHNhZmVfc3RyZXJyb3IoZXJybikgKTsgKi8KKy0gICAgfQor LSAgaWYgKCFpbmYtPnRhcmdldF9pc19wdXNoZWQgKG9wcykpCistICAgIGluZi0+cHVzaF90YXJn ZXQgKG9wcyk7CistICB0YXJnZXRfdGVybWluYWw6OmluaXQgKCk7CistCistICBpZiAoY3VycmVu dF9wcm9ncmFtX3NwYWNlLT5leGVjX2JmZCAoKSAhPSBOVUxMCistICAgICAgfHwgKGN1cnJlbnRf cHJvZ3JhbV9zcGFjZS0+c3ltZmlsZV9vYmplY3RfZmlsZSAhPSBOVUxMCistCSAgJiYgY3VycmVu dF9wcm9ncmFtX3NwYWNlLT5zeW1maWxlX29iamVjdF9maWxlLT5vYmZkICE9IE5VTEwpKQorLSAg ICBzb2xpYl9jcmVhdGVfaW5mZXJpb3JfaG9vayAoMCk7CistfQorLQorLXZvaWQKKy1udG9fcHJv Y2ZzX3RhcmdldDo6aW50ZXJydXB0ICgpCisteworLSAgZGV2Y3RsIChjdGxfZmQsIERDTURfUFJP Q19TVE9QLCBOVUxMLCAwLCAwKTsKKy19CistCistdm9pZAorLW50b19wcm9jZnNfdGFyZ2V0Ojpr aWxsICgpCisteworLSAgdGFyZ2V0X21vdXJuX2luZmVyaW9yIChpbmZlcmlvcl9wdGlkKTsKKy19 CistCistLyogRmlsbCBidWYgd2l0aCByZWdzZXQgYW5kIHJldHVybiBkZXZjdGwgY21kIHRvIGRv IHRoZSBzZXR0aW5nLiAgUmV0dXJuCistICAgLTEgaWYgd2UgZmFpbCB0byBnZXQgdGhlIHJlZ3Nl dC4gIFN0b3JlIHNpemUgb2YgcmVnc2V0IGluIHJlZ3NpemUuICAqLworLXN0YXRpYyBpbnQKKy1n ZXRfcmVnc2V0IChpbnQgcmVnc2V0LCBjaGFyICpidWYsIGludCBidWZzaXplLCBpbnQgKnJlZ3Np emUpCisteworLSAgaW50IGRldl9nZXQsIGRldl9zZXQ7CistICBzd2l0Y2ggKHJlZ3NldCkKKy0g ICAgeworLSAgICBjYXNlIE5UT19SRUdfR0VORVJBTDoKKy0gICAgICBkZXZfZ2V0ID0gRENNRF9Q Uk9DX0dFVEdSRUc7CistICAgICAgZGV2X3NldCA9IERDTURfUFJPQ19TRVRHUkVHOworLSAgICAg IGJyZWFrOworLQorLSAgICBjYXNlIE5UT19SRUdfRkxPQVQ6CistICAgICAgZGV2X2dldCA9IERD TURfUFJPQ19HRVRGUFJFRzsKKy0gICAgICBkZXZfc2V0ID0gRENNRF9QUk9DX1NFVEZQUkVHOwor LSAgICAgIGJyZWFrOworLQorLSAgICBjYXNlIE5UT19SRUdfQUxUOgorLSAgICAgIGRldl9nZXQg PSBEQ01EX1BST0NfR0VUQUxUUkVHOworLSAgICAgIGRldl9zZXQgPSBEQ01EX1BST0NfU0VUQUxU UkVHOworLSAgICAgIGJyZWFrOworLQorLSAgICBjYXNlIE5UT19SRUdfU1lTVEVNOgorLSAgICBk ZWZhdWx0OgorLSAgICAgIHJldHVybiAtMTsKKy0gICAgfQorLSAgaWYgKGRldmN0bCAoY3RsX2Zk LCBkZXZfZ2V0LCBidWYsIGJ1ZnNpemUsIHJlZ3NpemUpICE9IEVPSykKKy0gICAgcmV0dXJuIC0x OworLQorLSAgcmV0dXJuIGRldl9zZXQ7CistfQorLQorLXZvaWQKKy1udG9fcHJvY2ZzX3Rhcmdl dDo6c3RvcmVfcmVnaXN0ZXJzIChzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBpbnQgcmVnbm8p CisteworLSAgdW5pb24KKy0gIHsKKy0gICAgcHJvY2ZzX2dyZWcgZ3JlZzsKKy0gICAgcHJvY2Zz X2ZwcmVnIGZwcmVnOworLSAgICBwcm9jZnNfYWx0cmVnIGFsdHJlZzsKKy0gIH0KKy0gIHJlZzsK Ky0gIHVuc2lnbmVkIG9mZjsKKy0gIGludCBsZW4sIHJlZ3NldCwgcmVnc2l6ZSwgZGV2X3NldCwg ZXJyOworLSAgY2hhciAqZGF0YTsKKy0gIHB0aWRfdCBwdGlkID0gcmVnY2FjaGUtPnB0aWQgKCk7 CistCistICBpZiAocHRpZCA9PSBudWxsX3B0aWQpCistICAgIHJldHVybjsKKy0gIHByb2Nmc19z ZXRfdGhyZWFkIChwdGlkKTsKKy0KKy0gIGlmIChyZWdubyA9PSAtMSkKKy0gICAgeworLSAgICAg IGZvciAocmVnc2V0ID0gTlRPX1JFR19HRU5FUkFMOyByZWdzZXQgPCBOVE9fUkVHX0VORDsgcmVn c2V0KyspCistCXsKKy0JICBkZXZfc2V0ID0gZ2V0X3JlZ3NldCAocmVnc2V0LCAoY2hhciAqKSAm cmVnLAorLQkJCQlzaXplb2YgKHJlZyksICZyZWdzaXplKTsKKy0JICBpZiAoZGV2X3NldCA9PSAt MSkKKy0JICAgIGNvbnRpbnVlOworLQorLQkgIGlmIChudG9fcmVnc2V0X2ZpbGwgKHJlZ2NhY2hl LCByZWdzZXQsIChjaGFyICopICZyZWcpID09IC0xKQorLQkgICAgY29udGludWU7CistCistCSAg ZXJyID0gZGV2Y3RsIChjdGxfZmQsIGRldl9zZXQsICZyZWcsIHJlZ3NpemUsIDApOworLQkgIGlm IChlcnIgIT0gRU9LKQorLQkgICAgZ2RiX3ByaW50ZiAoZ2RiX3N0ZGVyciwKKy0JCQkiV2Fybmlu ZyB1bmFibGUgdG8gd3JpdGUgcmVnc2V0ICVkOiAlc1xuIiwKKy0JCQlyZWdubywgc2FmZV9zdHJl cnJvciAoZXJyKSk7CistCX0KKy0gICAgfQorLSAgZWxzZQorLSAgICB7CistICAgICAgcmVnc2V0 ID0gbnRvX3JlZ3NldF9pZCAocmVnbm8pOworLSAgICAgIGlmIChyZWdzZXQgPT0gLTEpCistCXJl dHVybjsKKy0KKy0gICAgICBkZXZfc2V0ID0gZ2V0X3JlZ3NldCAocmVnc2V0LCAoY2hhciAqKSAm cmVnLCBzaXplb2YgKHJlZyksICZyZWdzaXplKTsKKy0gICAgICBpZiAoZGV2X3NldCA9PSAtMSkK Ky0JcmV0dXJuOworLQorLSAgICAgIGxlbiA9IG50b19yZWdpc3Rlcl9hcmVhIChyZWdjYWNoZS0+ YXJjaCAoKSwKKy0JCQkgICAgICAgcmVnbm8sIHJlZ3NldCwgJm9mZik7CistCistICAgICAgaWYg KGxlbiA8IDEpCistCXJldHVybjsKKy0KKy0gICAgICByZWdjYWNoZS0+cmF3X2NvbGxlY3QgKHJl Z25vLCAoY2hhciAqKSAmcmVnICsgb2ZmKTsKKy0KKy0gICAgICBlcnIgPSBkZXZjdGwgKGN0bF9m ZCwgZGV2X3NldCwgJnJlZywgcmVnc2l6ZSwgMCk7CistICAgICAgaWYgKGVyciAhPSBFT0spCist CWdkYl9wcmludGYgKGdkYl9zdGRlcnIsCistCQkgICAgIldhcm5pbmcgdW5hYmxlIHRvIHdyaXRl IHJlZ3NldCAlZDogJXNcbiIsIHJlZ25vLAorLQkJICAgIHNhZmVfc3RyZXJyb3IgKGVycikpOwor LSAgICB9CistfQorLQorLS8qIFNldCBsaXN0IG9mIHNpZ25hbHMgdG8gYmUgaGFuZGxlZCBpbiB0 aGUgdGFyZ2V0LiAgKi8KKy0KKy12b2lkCistbnRvX3Byb2Nmc190YXJnZXQ6OnBhc3Nfc2lnbmFs cworLSAgKGdkYjo6YXJyYXlfdmlldzxjb25zdCB1bnNpZ25lZCBjaGFyPiBwYXNzX3NpZ25hbHMp CisteworLSAgaW50IHNpZ25vOworLQorLSAgc2lnZmlsbHNldCAoJnJ1bi50cmFjZSk7CistCist ICBmb3IgKHNpZ25vID0gMTsgc2lnbm8gPCBOU0lHOyBzaWdubysrKQorLSAgICB7CistICAgICAg aW50IHRhcmdldF9zaWdubyA9IGdkYl9zaWduYWxfZnJvbV9ob3N0IChzaWdubyk7CistICAgICAg aWYgKHRhcmdldF9zaWdubyA8IHBhc3Nfc2lnbmFscy5zaXplICgpICYmIHBhc3Nfc2lnbmFsc1t0 YXJnZXRfc2lnbm9dKQorLQlzaWdkZWxzZXQgKCZydW4udHJhY2UsIHNpZ25vKTsKKy0gICAgfQor LX0KKy0KKy1zdGQ6OnN0cmluZworLW50b19wcm9jZnNfdGFyZ2V0OjpwaWRfdG9fc3RyIChwdGlk X3QgcHRpZCkKKy17CistICBpbnQgcGlkLCB0aWQ7CistICBzdHJ1Y3QgdGlkaW5mbyAqdGlwOwor LQorLSAgcGlkID0gcHRpZC5waWQgKCk7CistICB0aWQgPSBwdGlkLnRpZCAoKTsKKy0KKy0jaWYg MAkJCQkvKiBOWUkgKi8KKy0gIHRpcCA9IHByb2Nmc190aHJlYWRfaW5mbyAocGlkLCB0aWQpOwor LSAgaWYgKHRpcCAhPSBOVUxMKQorLSAgICBzbnByaW50ZiAoJmJ1ZltuXSwgMTAyMywgIiAoc3Rh dGUgPSAweCUwMngpIiwgdGlwLT5zdGF0ZSk7CistI2VuZGlmCistCistICByZXR1cm4gc3RyaW5n X3ByaW50ZiAoInByb2Nlc3MgJWQiLCBwaWQpOworLX0KKy0KKy0vKiB0b19jYW5fcnVuIGltcGxl bWVudGF0aW9uIGZvciAidGFyZ2V0IHByb2NmcyIuICBOb3RlIHRoaXMgcmVhbGx5CistICBtZWFu cyAiY2FuIHRoaXMgdGFyZ2V0IGJlIHRoZSBkZWZhdWx0IHJ1biB0YXJnZXQiLCB3aGljaCB0aGVy ZSBjYW4KKy0gIGJlIG9ubHkgb25lLCBhbmQgd2UgbWFrZSBpdCBiZSAidGFyZ2V0IG5hdGl2ZSIg bGlrZSBvdGhlciBwb3J0cy4KKy0gICJ0YXJnZXQgcHJvY2ZzIDxub2RlPiIgd291bGRuJ3QgbWFr ZSBzZW5zZSBhcyBkZWZhdWx0IHJ1biB0YXJnZXQsIGFzCistICBpdCBuZWVkcyA8bm9kZT4uICAq LworLQorLWludAorLW50b19wcm9jZnNfdGFyZ2V0OjpjYW5fcnVuICgpCisteworLSAgcmV0dXJu IDA7CistfQorLQorLS8qICJ0YXJnZXQgcHJvY2ZzIi4gICovCistc3RhdGljIG50b19wcm9jZnNf dGFyZ2V0X3Byb2NmcyBudG9fcHJvY2ZzX29wczsKKy0KKy0vKiAidGFyZ2V0IG5hdGl2ZSIuICAq LworLXN0YXRpYyBudG9fcHJvY2ZzX3RhcmdldF9uYXRpdmUgbnRvX25hdGl2ZV9vcHM7CistCist LyogQ3JlYXRlIHRoZSAibmF0aXZlIiBhbmQgInByb2NmcyIgdGFyZ2V0cy4gICovCistCistc3Rh dGljIHZvaWQKKy1pbml0X3Byb2Nmc190YXJnZXRzICh2b2lkKQorLXsKKy0gIC8qIFJlZ2lzdGVy ICJ0YXJnZXQgbmF0aXZlIi4gIFRoaXMgaXMgdGhlIGRlZmF1bHQgcnVuIHRhcmdldC4gICovCist ICBhZGRfdGFyZ2V0IChudG9fbmF0aXZlX3RhcmdldF9pbmZvLCBpbmZfY2hpbGRfb3Blbl90YXJn ZXQpOworLSAgc2V0X25hdGl2ZV90YXJnZXQgKCZudG9fbmF0aXZlX29wcyk7CistCistICAvKiBS ZWdpc3RlciAidGFyZ2V0IHByb2NmcyA8bm9kZT4iLiAgKi8KKy0gIGFkZF90YXJnZXQgKG50b19w cm9jZnNfdGFyZ2V0X2luZm8sIGluZl9jaGlsZF9vcGVuX3RhcmdldCk7CistfQorLQorLSNkZWZp bmUgT1NUWVBFX05UTyAxCistCistdm9pZCBfaW5pdGlhbGl6ZV9wcm9jZnMgKCk7Cistdm9pZAor LV9pbml0aWFsaXplX3Byb2NmcyAoKQorLXsKKy0gIHNpZ3NldF90IHNldDsKKy0KKy0gIGluaXRf cHJvY2ZzX3RhcmdldHMgKCk7CistCistICAvKiBXZSB1c2UgU0lHVVNSMSB0byBnYWluIGNvbnRy b2wgYWZ0ZXIgd2UgYmxvY2sgd2FpdGluZyBmb3IgYSBwcm9jZXNzLgorLSAgICAgV2UgdXNlIHNp Z3dhaXRldmVudCB0byB3YWl0LiAgKi8KKy0gIHNpZ2VtcHR5c2V0ICgmc2V0KTsKKy0gIHNpZ2Fk ZHNldCAoJnNldCwgU0lHVVNSMSk7CistICBzaWdwcm9jbWFzayAoU0lHX0JMT0NLLCAmc2V0LCBO VUxMKTsKKy0KKy0gIC8qIEluaXRpYWxseSwgbWFrZSBzdXJlIGFsbCBzaWduYWxzIGFyZSByZXBv cnRlZC4gICovCistICBzaWdmaWxsc2V0ICgmcnVuLnRyYWNlKTsKKy0KKy0gIC8qIFN0dWZmIHNv bWUgaW5mb3JtYXRpb24uICAqLworLSAgbnRvX2NwdWluZm9fZmxhZ3MgPSBTWVNQQUdFX0VOVFJZ IChjcHVpbmZvKS0+ZmxhZ3M7CistICBudG9fY3B1aW5mb192YWxpZCA9IDE7CistCistICBhZGRf aW5mbyAoInBpZGxpc3QiLCBwcm9jZnNfcGlkbGlzdCwgXygicGlkbGlzdCIpKTsKKy0gIGFkZF9p bmZvICgibWVtaW5mbyIsIHByb2Nmc19tZW1pbmZvLCBfKCJtZW1vcnkgaW5mb3JtYXRpb24iKSk7 CistCistICBudG9faXNfbnRvX3RhcmdldCA9IHByb2Nmc19pc19udG9fdGFyZ2V0OworLX0KKy0K Ky0KKy1zdGF0aWMgaW50CistcHJvY2ZzX2h3X3dhdGNocG9pbnQgKGludCBhZGRyLCBpbnQgbGVu LCBlbnVtIHRhcmdldF9od19icF90eXBlIHR5cGUpCisteworLSAgcHJvY2ZzX2JyZWFrIGJyazsK Ky0KKy0gIHN3aXRjaCAodHlwZSkKKy0gICAgeworLSAgICBjYXNlIGh3X3JlYWQ6CistICAgICAg YnJrLnR5cGUgPSBfREVCVUdfQlJFQUtfUkQ7CistICAgICAgYnJlYWs7CistICAgIGNhc2UgaHdf YWNjZXNzOgorLSAgICAgIGJyay50eXBlID0gX0RFQlVHX0JSRUFLX1JXOworLSAgICAgIGJyZWFr OworLSAgICBkZWZhdWx0OgkJCS8qIE1vZGlmeS4gICovCistLyogRklYTUU6IGJyay50eXBlID0g X0RFQlVHX0JSRUFLX1JXTSBnaXZlcyBFSU5WQUwgZm9yIHNvbWUgcmVhc29uLiAgKi8KKy0gICAg ICBicmsudHlwZSA9IF9ERUJVR19CUkVBS19SVzsKKy0gICAgfQorLSAgYnJrLnR5cGUgfD0gX0RF QlVHX0JSRUFLX0hXOwkvKiBBbHdheXMgYXNrIGZvciBIVy4gICovCistICBicmsuYWRkciA9IGFk ZHI7CistICBicmsuc2l6ZSA9IGxlbjsKKy0KKy0gIGVycm5vID0gZGV2Y3RsIChjdGxfZmQsIERD TURfUFJPQ19CUkVBSywgJmJyaywgc2l6ZW9mIChicmspLCAwKTsKKy0gIGlmIChlcnJubyAhPSBF T0spCistICAgIHsKKy0gICAgICBwZXJyb3IgKF8oIkZhaWxlZCB0byBzZXQgaGFyZHdhcmUgd2F0 Y2hwb2ludCIpKTsKKy0gICAgICByZXR1cm4gLTE7CistICAgIH0KKy0gIHJldHVybiAwOworLX0K Ky0KKy1ib29sCistbnRvX3Byb2Nmc190YXJnZXQ6OmNhbl91c2VfaHdfYnJlYWtwb2ludCAoZW51 bSBicHR5cGUgdHlwZSwKKy0JCQkJCSAgaW50IGNudCwgaW50IG90aGVydHlwZSkKKy17CistICBy ZXR1cm4gMTsKKy19CistCistaW50CistbnRvX3Byb2Nmc190YXJnZXQ6OnJlbW92ZV9od193YXRj aHBvaW50IChDT1JFX0FERFIgYWRkciwgaW50IGxlbiwKKy0JCQkJCSBlbnVtIHRhcmdldF9od19i cF90eXBlIHR5cGUsCistCQkJCQkgc3RydWN0IGV4cHJlc3Npb24gKmNvbmQpCisteworLSAgcmV0 dXJuIHByb2Nmc19od193YXRjaHBvaW50IChhZGRyLCAtMSwgdHlwZSk7CistfQorLQorLWludAor LW50b19wcm9jZnNfdGFyZ2V0OjppbnNlcnRfaHdfd2F0Y2hwb2ludCAoQ09SRV9BRERSIGFkZHIs IGludCBsZW4sCistCQkJCQkgZW51bSB0YXJnZXRfaHdfYnBfdHlwZSB0eXBlLAorLQkJCQkJIHN0 cnVjdCBleHByZXNzaW9uICpjb25kKQorLXsKKy0gIHJldHVybiBwcm9jZnNfaHdfd2F0Y2hwb2lu dCAoYWRkciwgbGVuLCB0eXBlKTsKKy19CistCistYm9vbAorLW50b19wcm9jZnNfdGFyZ2V0Ojpz dG9wcGVkX2J5X3dhdGNocG9pbnQgKCkKKy17CistICAvKiBOT1RFOiBudG9fc3RvcHBlZF9ieV93 YXRjaHBvaW50IHdpbGwgYmUgY2FsbGVkIE9OTFkgd2hpbGUgd2UgYXJlCistICAgICBzdG9wcGVk IGR1ZSB0byBhIFNJR1RSQVAuICBUaGlzIGFzc3VtZXMgZ2RiIHdvcmtzIGluICdhbGwtc3RvcCcg bW9kZTsKKy0gICAgIGZ1dHVyZSBnZGIgdmVyc2lvbnMgd2lsbCBsaWtlbHkgcnVuIGluICdub24t c3RvcCcgbW9kZSBpbiB3aGljaCBjYXNlCistICAgICB3ZSB3aWxsIGhhdmUgdG8gc3RvcmUvZXhh bWluZSBzdGF0dXNlcyBwZXIgdGhyZWFkIGluIHF1ZXN0aW9uLgorLSAgICAgVW50aWwgdGhlbiwg dGhpcyB3aWxsIHdvcmsgZmluZS4gICovCistCistICBzdHJ1Y3QgaW5mZXJpb3IgKmluZiA9IGN1 cnJlbnRfaW5mZXJpb3IgKCk7CistICBzdHJ1Y3QgbnRvX2luZmVyaW9yX2RhdGEgKmluZl9kYXRh OworLQorLSAgZ2RiX2Fzc2VydCAoaW5mICE9IE5VTEwpOworLQorLSAgaW5mX2RhdGEgPSBudG9f aW5mZXJpb3JfZGF0YSAoaW5mKTsKKy0KKy0gIHJldHVybiBpbmZfZGF0YS0+c3RvcHBlZF9mbGFn cworLQkgJiAoX0RFQlVHX0ZMQUdfVFJBQ0VfUkQKKy0JICAgIHwgX0RFQlVHX0ZMQUdfVFJBQ0Vf V1IKKy0JICAgIHwgX0RFQlVHX0ZMQUdfVFJBQ0VfTU9ESUZZKTsKKy19CitkaWZmIC0tZ2l0IGEv Z2RiL250by10ZGVwLmMgYi9nZGIvbnRvLXRkZXAuYworZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0 CistLS0gYS9nZGIvbnRvLXRkZXAuYworKysrIC9kZXYvbnVsbAorQEAgLTEsNTIxICswLDAgQEAK Ky0vKiBudG8tdGRlcC5jIC0gZ2VuZXJhbCBRTlggTmV1dHJpbm8gdGFyZ2V0IGZ1bmN0aW9uYWxp dHkuCistCistICAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uLCBJbmMuCistCistICAgQ29udHJpYnV0ZWQgYnkgUU5YIFNvZnR3YXJlIFN5c3RlbXMgTHRk LgorLQorLSAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdEQi4KKy0KKy0gICBUaGlzIHByb2dyYW0g aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQor LSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug YXMgcHVibGlzaGVkIGJ5CistICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy IHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKy0gICAoYXQgeW91ciBvcHRpb24pIGFueSBs YXRlciB2ZXJzaW9uLgorLQorLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistICAgTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLSAgIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCistCistICAgWW91IHNo b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UKKy0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3 LmdudS5vcmcvbGljZW5zZXMvPi4gICovCistCistI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CistI2lu Y2x1ZGUgIm50by10ZGVwLmgiCistI2luY2x1ZGUgImV4dHJhY3Qtc3RvcmUtaW50ZWdlci5oIgor LSNpbmNsdWRlICJ0b3AuaCIKKy0jaW5jbHVkZSAiaW5mZXJpb3IuaCIKKy0jaW5jbHVkZSAiaW5m cnVuLmgiCistI2luY2x1ZGUgImdkYmFyY2guaCIKKy0jaW5jbHVkZSAiYmZkLmgiCistI2luY2x1 ZGUgImVsZi1iZmQuaCIKKy0jaW5jbHVkZSAic29saWItc3ZyNC5oIgorLSNpbmNsdWRlICJnZGJj b3JlLmgiCistI2luY2x1ZGUgIm9iamZpbGVzLmgiCistI2luY2x1ZGUgInNvdXJjZS5oIgorLSNp bmNsdWRlICJnZGJzdXBwb3J0L3BhdGhzdHVmZi5oIgorLQorLSNkZWZpbmUgUU5YX05PVEVfTkFN RQkiUU5YIgorLSNkZWZpbmUgUU5YX0lORk9fU0VDVF9OQU1FICJRTlhfaW5mbyIKKy0KKy0jaWZk ZWYgX19DWUdXSU5fXworLSNpbmNsdWRlIDxzeXMvY3lnd2luLmg+CistI2VuZGlmCistCistI2lm ZGVmIF9fQ1lHV0lOX18KKy1zdGF0aWMgY2hhciBkZWZhdWx0X250b190YXJnZXRbXSA9ICJDOlxc UU5Yc2RrXFx0YXJnZXRcXHFueDYiOworLSNlbGlmIGRlZmluZWQoX19zdW5fXykgfHwgZGVmaW5l ZChsaW51eCkKKy1zdGF0aWMgY2hhciBkZWZhdWx0X250b190YXJnZXRbXSA9ICIvb3B0L1FOWHNk ay90YXJnZXQvcW54NiI7CistI2Vsc2UKKy1zdGF0aWMgY2hhciBkZWZhdWx0X250b190YXJnZXRb XSA9ICIiOworLSNlbmRpZgorLQorLXN0cnVjdCBudG9fdGFyZ2V0X29wcyBjdXJyZW50X250b190 YXJnZXQ7CistCistc3RhdGljIGNvbnN0IHJlZ2lzdHJ5PGluZmVyaW9yPjo6a2V5PHN0cnVjdCBu dG9faW5mZXJpb3JfZGF0YT4KKy0gIG50b19pbmZlcmlvcl9kYXRhX3JlZzsKKy0KKy1zdGF0aWMg Y2hhciAqCistbnRvX3RhcmdldCAodm9pZCkKKy17CistICBjaGFyICpwID0gZ2V0ZW52ICgiUU5Y X1RBUkdFVCIpOworLQorLSNpZmRlZiBfX0NZR1dJTl9fCistICBzdGF0aWMgY2hhciBidWZbUEFU SF9NQVhdOworLSAgaWYgKHApCistICAgIGN5Z3dpbl9jb252X3BhdGggKENDUF9XSU5fQV9UT19Q T1NJWCwgcCwgYnVmLCBQQVRIX01BWCk7CistICBlbHNlCistICAgIGN5Z3dpbl9jb252X3BhdGgg KENDUF9XSU5fQV9UT19QT1NJWCwgZGVmYXVsdF9udG9fdGFyZ2V0LCBidWYsIFBBVEhfTUFYKTsK Ky0gIHJldHVybiBidWY7CistI2Vsc2UKKy0gIHJldHVybiBwID8gcCA6IGRlZmF1bHRfbnRvX3Rh cmdldDsKKy0jZW5kaWYKKy19CistCistLyogVGFrZSBhIHN0cmluZyBzdWNoIGFzIGkzODYsIHJz NjAwMCwgZXRjLiBhbmQgbWFwIGl0IG9udG8gQ1BVVFlQRV9YODYsCistICAgQ1BVVFlQRV9QUEMs IGV0Yy4gYXMgZGVmaW5lZCBpbiBudG8tc2hhcmUvZHNtc2dzLmguICAqLworLWludAorLW50b19t YXBfYXJjaF90b19jcHV0eXBlIChjb25zdCBjaGFyICphcmNoKQorLXsKKy0gIGlmICghc3RyY21w IChhcmNoLCAiaTM4NiIpIHx8ICFzdHJjbXAgKGFyY2gsICJ4ODYiKSkKKy0gICAgcmV0dXJuIENQ VVRZUEVfWDg2OworLSAgaWYgKCFzdHJjbXAgKGFyY2gsICJyczYwMDAiKSB8fCAhc3RyY21wIChh cmNoLCAicG93ZXJwYyIpKQorLSAgICByZXR1cm4gQ1BVVFlQRV9QUEM7CistICBpZiAoIXN0cmNt cCAoYXJjaCwgIm1pcHMiKSkKKy0gICAgcmV0dXJuIENQVVRZUEVfTUlQUzsKKy0gIGlmICghc3Ry Y21wIChhcmNoLCAiYXJtIikpCistICAgIHJldHVybiBDUFVUWVBFX0FSTTsKKy0gIGlmICghc3Ry Y21wIChhcmNoLCAic2giKSkKKy0gICAgcmV0dXJuIENQVVRZUEVfU0g7CistICByZXR1cm4gQ1BV VFlQRV9VTktOT1dOOworLX0KKy0KKy1pbnQKKy1udG9fZmluZF9hbmRfb3Blbl9zb2xpYiAoY29u c3QgY2hhciAqc29saWIsIHVuc2lnbmVkIG9fZmxhZ3MsCistCQkJIGdkYjo6dW5pcXVlX3htYWxs b2NfcHRyPGNoYXI+ICp0ZW1wX3BhdGhuYW1lKQorLXsKKy0gIGNoYXIgKmJ1ZiwgKmFyY2hfcGF0 aCwgKm50b19yb290OworLSAgY29uc3QgY2hhciAqZW5kaWFuOworLSAgY29uc3QgY2hhciAqYmFz ZTsKKy0gIGNvbnN0IGNoYXIgKmFyY2g7CistICBpbnQgYXJjaF9sZW4sIGxlbiwgcmV0OworLSNk ZWZpbmUgUEFUSF9GTVQgXAorLSAgIiVzL2xpYjolcy91c3IvbGliOiVzL3Vzci9waG90b24vbGli OiVzL3Vzci9waG90b24vZGxsOiVzL2xpYi9kbGwiCistCistICBudG9fcm9vdCA9IG50b190YXJn ZXQgKCk7CistICBnZGJhcmNoICpnZGJhcmNoID0gY3VycmVudF9pbmZlcmlvciAoKS0+YXJjaCAo KTsKKy0gIGlmIChzdHJjbXAgKGdkYmFyY2hfYmZkX2FyY2hfaW5mbyAoZ2RiYXJjaCktPmFyY2hf bmFtZSwgImkzODYiKSA9PSAwKQorLSAgICB7CistICAgICAgYXJjaCA9ICJ4ODYiOworLSAgICAg IGVuZGlhbiA9ICIiOworLSAgICB9CistICBlbHNlIGlmIChzdHJjbXAgKGdkYmFyY2hfYmZkX2Fy Y2hfaW5mbyAoZ2RiYXJjaCktPmFyY2hfbmFtZSwKKy0JCSAgICJyczYwMDAiKSA9PSAwCistCSAg IHx8IHN0cmNtcCAoZ2RiYXJjaF9iZmRfYXJjaF9pbmZvIChnZGJhcmNoKS0+YXJjaF9uYW1lLAor LQkJICAgInBvd2VycGMiKSA9PSAwKQorLSAgICB7CistICAgICAgYXJjaCA9ICJwcGMiOworLSAg ICAgIGVuZGlhbiA9ICJiZSI7CistICAgIH0KKy0gIGVsc2UKKy0gICAgeworLSAgICAgIGFyY2gg PSBnZGJhcmNoX2JmZF9hcmNoX2luZm8gKGdkYmFyY2gpLT5hcmNoX25hbWU7CistICAgICAgZW5k aWFuID0gZ2RiYXJjaF9ieXRlX29yZGVyIChnZGJhcmNoKQorLQkgICAgICAgPT0gQkZEX0VORElB Tl9CSUcgPyAiYmUiIDogImxlIjsKKy0gICAgfQorLQorLSAgLyogSW4gY2FzZSBudG9fcm9vdCBp cyBzaG9ydCwgYWRkIHN0cmxlbihzb2xpYikKKy0gICAgIHNvIHdlIGNhbiByZXVzZSBhcmNoX3Bh dGggYmVsb3cuICAqLworLQorLSAgYXJjaF9sZW4gPSAoc3RybGVuIChudG9fcm9vdCkgKyBzdHJs ZW4gKGFyY2gpICsgc3RybGVuIChlbmRpYW4pICsgMgorLQkgICAgICArIHN0cmxlbiAoc29saWIp KTsKKy0gIGFyY2hfcGF0aCA9IChjaGFyICopIGFsbG9jYSAoYXJjaF9sZW4pOworLSAgeHNucHJp bnRmIChhcmNoX3BhdGgsIGFyY2hfbGVuLCAiJXMvJXMlcyIsIG50b19yb290LCBhcmNoLCBlbmRp YW4pOworLQorLSAgbGVuID0gc3RybGVuIChQQVRIX0ZNVCkgKyBzdHJsZW4gKGFyY2hfcGF0aCkg KiA1ICsgMTsKKy0gIGJ1ZiA9IChjaGFyICopIGFsbG9jYSAobGVuKTsKKy0gIHhzbnByaW50ZiAo YnVmLCBsZW4sIFBBVEhfRk1ULCBhcmNoX3BhdGgsIGFyY2hfcGF0aCwgYXJjaF9wYXRoLCBhcmNo X3BhdGgsCistCSAgICAgYXJjaF9wYXRoKTsKKy0KKy0gIGJhc2UgPSBsYmFzZW5hbWUgKHNvbGli KTsKKy0gIHJldCA9IG9wZW5wIChidWYsIE9QRl9UUllfQ1dEX0ZJUlNUIHwgT1BGX1JFVFVSTl9S RUFMUEFUSCwgYmFzZSwgb19mbGFncywKKy0JICAgICAgIHRlbXBfcGF0aG5hbWUpOworLSAgaWYg KHJldCA8IDAgJiYgYmFzZSAhPSBzb2xpYikKKy0gICAgeworLSAgICAgIHhzbnByaW50ZiAoYXJj aF9wYXRoLCBhcmNoX2xlbiwgIi8lcyIsIHNvbGliKTsKKy0gICAgICByZXQgPSBvcGVuIChhcmNo X3BhdGgsIG9fZmxhZ3MsIDApOworLSAgICAgIGlmICh0ZW1wX3BhdGhuYW1lKQorLQl7CistCSAg aWYgKHJldCA+PSAwKQorLQkgICAgKnRlbXBfcGF0aG5hbWUgPSBnZGJfcmVhbHBhdGggKGFyY2hf cGF0aCk7CistCSAgZWxzZQorLQkgICAgdGVtcF9wYXRobmFtZS0+cmVzZXQgKE5VTEwpOworLQl9 CistICAgIH0KKy0gIHJldHVybiByZXQ7CistfQorLQorLXZvaWQKKy1udG9faW5pdF9zb2xpYl9h YnNvbHV0ZV9wcmVmaXggKHZvaWQpCisteworLSAgY2hhciBidWZbUEFUSF9NQVggKiAyXSwgYXJj aF9wYXRoW1BBVEhfTUFYXTsKKy0gIGNoYXIgKm50b19yb290OworLSAgY29uc3QgY2hhciAqZW5k aWFuOworLSAgY29uc3QgY2hhciAqYXJjaDsKKy0KKy0gIG50b19yb290ID0gbnRvX3RhcmdldCAo KTsKKy0gIGdkYmFyY2ggKmdkYmFyY2ggPSBjdXJyZW50X2luZmVyaW9yICgpLT5hcmNoICgpOwor LSAgaWYgKHN0cmNtcCAoZ2RiYXJjaF9iZmRfYXJjaF9pbmZvIChnZGJhcmNoKS0+YXJjaF9uYW1l LCAiaTM4NiIpID09IDApCistICAgIHsKKy0gICAgICBhcmNoID0gIng4NiI7CistICAgICAgZW5k aWFuID0gIiI7CistICAgIH0KKy0gIGVsc2UgaWYgKHN0cmNtcCAoZ2RiYXJjaF9iZmRfYXJjaF9p bmZvIChnZGJhcmNoKS0+YXJjaF9uYW1lLAorLQkJICAgInJzNjAwMCIpID09IDAKKy0JICAgfHwg c3RyY21wIChnZGJhcmNoX2JmZF9hcmNoX2luZm8gKGdkYmFyY2gpLT5hcmNoX25hbWUsCistCQkg ICAicG93ZXJwYyIpID09IDApCistICAgIHsKKy0gICAgICBhcmNoID0gInBwYyI7CistICAgICAg ZW5kaWFuID0gImJlIjsKKy0gICAgfQorLSAgZWxzZQorLSAgICB7CistICAgICAgYXJjaCA9IGdk YmFyY2hfYmZkX2FyY2hfaW5mbyAoZ2RiYXJjaCktPmFyY2hfbmFtZTsKKy0gICAgICBlbmRpYW4g PSBnZGJhcmNoX2J5dGVfb3JkZXIgKGdkYmFyY2gpCistCSAgICAgICA9PSBCRkRfRU5ESUFOX0JJ RyA/ICJiZSIgOiAibGUiOworLSAgICB9CistCistICB4c25wcmludGYgKGFyY2hfcGF0aCwgc2l6 ZW9mIChhcmNoX3BhdGgpLCAiJXMvJXMlcyIsIG50b19yb290LCBhcmNoLCBlbmRpYW4pOworLQor LSAgeHNucHJpbnRmIChidWYsIHNpemVvZiAoYnVmKSwgInNldCBzb2xpYi1hYnNvbHV0ZS1wcmVm aXggJXMiLCBhcmNoX3BhdGgpOworLSAgZXhlY3V0ZV9jb21tYW5kIChidWYsIDApOworLX0KKy0K Ky1jaGFyICoqCistbnRvX3BhcnNlX3JlZGlyZWN0aW9uIChjaGFyICpwYXJndltdLCBjb25zdCBj aGFyICoqcGluLCBjb25zdCBjaGFyICoqcG91dCwgCistCQkgICAgICAgY29uc3QgY2hhciAqKnBl cnIpCisteworLSAgY2hhciAqKmFyZ3Y7CistICBjb25zdCBjaGFyICppbiwgKm91dCwgKmVyciwg KnA7CistICBpbnQgYXJnYywgaSwgbjsKKy0KKy0gIGZvciAobiA9IDA7IHBhcmd2W25dOyBuKysp OworLSAgaWYgKG4gPT0gMCkKKy0gICAgcmV0dXJuIE5VTEw7CistICBpbiA9ICIiOworLSAgb3V0 ID0gIiI7CistICBlcnIgPSAiIjsKKy0KKy0gIGFyZ3YgPSBYQ05FV1ZFQyAoY2hhciAqLCBuICsg MSk7CistICBhcmdjID0gbjsKKy0gIGZvciAoaSA9IDAsIG4gPSAwOyBuIDwgYXJnYzsgbisrKQor LSAgICB7CistICAgICAgcCA9IHBhcmd2W25dOworLSAgICAgIGlmICgqcCA9PSAnPicpCistCXsK Ky0JICBwKys7CistCSAgaWYgKCpwKQorLQkgICAgb3V0ID0gcDsKKy0JICBlbHNlCistCSAgICBv dXQgPSBwYXJndlsrK25dOworLQl9CistICAgICAgZWxzZSBpZiAoKnAgPT0gJzwnKQorLQl7Cist CSAgcCsrOworLQkgIGlmICgqcCkKKy0JICAgIGluID0gcDsKKy0JICBlbHNlCistCSAgICBpbiA9 IHBhcmd2Wysrbl07CistCX0KKy0gICAgICBlbHNlIGlmICgqcCsrID09ICcyJyAmJiAqcCsrID09 ICc+JykKKy0JeworLQkgIGlmICgqcCA9PSAnJicgJiYgKihwICsgMSkgPT0gJzEnKQorLQkgICAg ZXJyID0gb3V0OworLQkgIGVsc2UgaWYgKCpwKQorLQkgICAgZXJyID0gcDsKKy0JICBlbHNlCist CSAgICBlcnIgPSBwYXJndlsrK25dOworLQl9CistICAgICAgZWxzZQorLQlhcmd2W2krK10gPSBw YXJndltuXTsKKy0gICAgfQorLSAgKnBpbiA9IGluOworLSAgKnBvdXQgPSBvdXQ7CistICAqcGVy ciA9IGVycjsKKy0gIHJldHVybiBhcmd2OworLX0KKy0KKy1zdGF0aWMgQ09SRV9BRERSCistbG1f YWRkciAoY29uc3Qgc29saWIgJnNvKQorLXsKKy0gIGF1dG8gKmxpID0gZ2RiOjpjaGVja2VkX3N0 YXRpY19jYXN0PGNvbnN0IGxtX2luZm9fc3ZyNCAqPiAoc28ubG1faW5mby5nZXQgKCkpOworLQor LSAgcmV0dXJuIGxpLT5sX2FkZHI7CistfQorLQorLXN0YXRpYyBDT1JFX0FERFIKKy1udG9fdHJ1 bmNhdGVfcHRyIChDT1JFX0FERFIgYWRkcikKKy17CistICBnZGJhcmNoICpnZGJhcmNoID0gY3Vy cmVudF9pbmZlcmlvciAoKS0+YXJjaCAoKTsKKy0gIGlmIChnZGJhcmNoX3B0cl9iaXQgKGdkYmFy Y2gpID09IHNpemVvZiAoQ09SRV9BRERSKSAqIDgpCistICAgIC8qIFdlIGRvbid0IG5lZWQgdG8g dHJ1bmNhdGUgYW55dGhpbmcsIGFuZCB0aGUgYml0IHR3aWRkbGluZyBiZWxvdworLSAgICAgICB3 aWxsIGZhaWwgZHVlIHRvIG92ZXJmbG93IHByb2JsZW1zLiAgKi8KKy0gICAgcmV0dXJuIGFkZHI7 CistICBlbHNlCistICAgIHJldHVybiBhZGRyICYgKCgoQ09SRV9BRERSKSAxIDw8IGdkYmFyY2hf cHRyX2JpdCAoZ2RiYXJjaCkpIC0gMSk7CistfQorLQorLXN0YXRpYyBFbGZfSW50ZXJuYWxfUGhk ciAqCistZmluZF9sb2FkX3BoZHIgKGJmZCAqYWJmZCkKKy17CistICBFbGZfSW50ZXJuYWxfUGhk ciAqcGhkcjsKKy0gIHVuc2lnbmVkIGludCBpOworLQorLSAgaWYgKCFlbGZfdGRhdGEgKGFiZmQp KQorLSAgICByZXR1cm4gTlVMTDsKKy0KKy0gIHBoZHIgPSBlbGZfdGRhdGEgKGFiZmQpLT5waGRy OworLSAgZm9yIChpID0gMDsgaSA8IGVsZl9lbGZoZWFkZXIgKGFiZmQpLT5lX3BobnVtOyBpKyss IHBoZHIrKykKKy0gICAgeworLSAgICAgIGlmIChwaGRyLT5wX3R5cGUgPT0gUFRfTE9BRCAmJiAo cGhkci0+cF9mbGFncyAmIFBGX1gpKQorLQlyZXR1cm4gcGhkcjsKKy0gICAgfQorLSAgcmV0dXJu IE5VTEw7CistfQorLQorLXZvaWQKKy1udG9fcmVsb2NhdGVfc2VjdGlvbl9hZGRyZXNzZXMgKHNv bGliICZzbywgdGFyZ2V0X3NlY3Rpb24gKnNlYykKKy17CistICAvKiBOZXV0cmlubyB0cmVhdHMg dGhlIGxfYWRkciBiYXNlIGFkZHJlc3MgZmllbGQgaW4gbGluay5oIGFzIGRpZmZlcmVudCB0aGFu CistICAgICB0aGUgYmFzZSBhZGRyZXNzIGluIHRoZSBTeXN0ZW0gViBBQkkgYW5kIHNvIHRoZSBv ZmZzZXQgbmVlZHMgdG8gYmUKKy0gICAgIGNhbGN1bGF0ZWQgYW5kIGFwcGxpZWQgdG8gcmVsb2Nh dGlvbnMuICAqLworLSAgRWxmX0ludGVybmFsX1BoZHIgKnBoZHIgPSBmaW5kX2xvYWRfcGhkciAo c2VjLT50aGVfYmZkX3NlY3Rpb24tPm93bmVyKTsKKy0gIHVuc2lnbmVkIHZhZGRyID0gcGhkciA/ IHBoZHItPnBfdmFkZHIgOiAwOworLQorLSAgc2VjLT5hZGRyID0gbnRvX3RydW5jYXRlX3B0ciAo c2VjLT5hZGRyICsgbG1fYWRkciAoc28pIC0gdmFkZHIpOworLSAgc2VjLT5lbmRhZGRyID0gbnRv X3RydW5jYXRlX3B0ciAoc2VjLT5lbmRhZGRyICsgbG1fYWRkciAoc28pIC0gdmFkZHIpOworLX0K Ky0KKy0vKiBUaGlzIGlzIGNoZWF0aW5nIGEgYml0IGJlY2F1c2Ugb3VyIGxpbmtlciBjb2RlIGlz IGluIGxpYmMuc28uICBJZiB3ZQorLSAgIGV2ZXIgaW1wbGVtZW50IGxhenkgbGlua2luZywgdGhp cyBtYXkgbmVlZCB0byBiZSByZS1leGFtaW5lZC4gICovCistaW50CistbnRvX2luX2R5bnN5bV9y ZXNvbHZlX2NvZGUgKENPUkVfQUREUiBwYykKKy17CistICBpZiAoaW5fcGx0X3NlY3Rpb24gKHBj KSkKKy0gICAgcmV0dXJuIDE7CistICByZXR1cm4gMDsKKy19CistCistdm9pZAorLW50b19kdW1t eV9zdXBwbHlfcmVnc2V0IChzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBjaGFyICpyZWdzKQor LXsKKy0gIC8qIERvIG5vdGhpbmcuICAqLworLX0KKy0KKy1zdGF0aWMgdm9pZAorLW50b19zbmlm Zl9hYmlfbm90ZV9zZWN0aW9uIChiZmQgKmFiZmQsIGFzZWN0aW9uICpzZWN0LCB2b2lkICpvYmop CisteworLSAgY29uc3QgY2hhciAqc2VjdG5hbWU7CistICB1bnNpZ25lZCBpbnQgc2VjdHNpemU7 CistICAvKiBCdWZmZXIgaG9sZGluZyB0aGUgc2VjdGlvbiBjb250ZW50cy4gICovCistICBjaGFy ICpub3RlOworLSAgdW5zaWduZWQgaW50IG5hbWVsZW47CistICBjb25zdCBjaGFyICpuYW1lOwor LSAgY29uc3QgdW5zaWduZWQgc2l6ZW9mX0VsZl9OaGRyID0gMTI7CistCistICBzZWN0bmFtZSA9 IGJmZF9zZWN0aW9uX25hbWUgKHNlY3QpOworLSAgc2VjdHNpemUgPSBiZmRfc2VjdGlvbl9zaXpl IChzZWN0KTsKKy0KKy0gIGlmIChzZWN0c2l6ZSA+IDEyOCkKKy0gICAgc2VjdHNpemUgPSAxMjg7 CistCistICBpZiAoc2VjdG5hbWUgIT0gTlVMTCAmJiBzdHJzdHIgKHNlY3RuYW1lLCBRTlhfSU5G T19TRUNUX05BTUUpICE9IE5VTEwpCistICAgICooZW51bSBnZGJfb3NhYmkgKikgb2JqID0gR0RC X09TQUJJX1FOWE5UTzsKKy0gIGVsc2UgaWYgKHNlY3RuYW1lICE9IE5VTEwgJiYgc3Ryc3RyIChz ZWN0bmFtZSwgIm5vdGUiKSAhPSBOVUxMCistCSAgICYmIHNlY3RzaXplID4gc2l6ZW9mX0VsZl9O aGRyKQorLSAgICB7CistICAgICAgbm90ZSA9IFhORVdWRUMgKGNoYXIsIHNlY3RzaXplKTsKKy0g ICAgICBiZmRfZ2V0X3NlY3Rpb25fY29udGVudHMgKGFiZmQsIHNlY3QsIG5vdGUsIDAsIHNlY3Rz aXplKTsKKy0gICAgICBuYW1lbGVuID0gKHVuc2lnbmVkIGludCkgYmZkX2hfZ2V0XzMyIChhYmZk LCBub3RlKTsKKy0gICAgICBuYW1lID0gbm90ZSArIHNpemVvZl9FbGZfTmhkcjsKKy0gICAgICBp ZiAoc2VjdHNpemUgPj0gbmFtZWxlbiArIHNpemVvZl9FbGZfTmhkcgorLQkgICYmIG5hbWVsZW4g PT0gc2l6ZW9mIChRTlhfTk9URV9OQU1FKQorLQkgICYmIDAgPT0gc3RyY21wIChuYW1lLCBRTlhf Tk9URV9OQU1FKSkKKy0JKihlbnVtIGdkYl9vc2FiaSAqKSBvYmogPSBHREJfT1NBQklfUU5YTlRP OworLQorLSAgICAgIFhERUxFVEVWRUMgKG5vdGUpOworLSAgICB9CistfQorLQorLWVudW0gZ2Ri X29zYWJpCistbnRvX2VsZl9vc2FiaV9zbmlmZmVyIChiZmQgKmFiZmQpCisteworLSAgZW51bSBn ZGJfb3NhYmkgb3NhYmkgPSBHREJfT1NBQklfVU5LTk9XTjsKKy0KKy0gIGJmZF9tYXBfb3Zlcl9z ZWN0aW9ucyAoYWJmZCwKKy0JCQkgbnRvX3NuaWZmX2FiaV9ub3RlX3NlY3Rpb24sCistCQkJICZv c2FiaSk7CistCistICByZXR1cm4gb3NhYmk7CistfQorLQorLXN0YXRpYyBjb25zdCBjaGFyICog Y29uc3QgbnRvX3RocmVhZF9zdGF0ZV9zdHJbXSA9CisteworLSAgIkRFQUQiLAkJLyogMCAgMHgw MCAqLworLSAgIlJVTk5JTkciLAkvKiAxICAweDAxICovCistICAiUkVBRFkiLAkvKiAyICAweDAy ICovCistICAiU1RPUFBFRCIsCS8qIDMgIDB4MDMgKi8KKy0gICJTRU5EIiwJCS8qIDQgIDB4MDQg Ki8KKy0gICJSRUNFSVZFIiwJLyogNSAgMHgwNSAqLworLSAgIlJFUExZIiwJLyogNiAgMHgwNiAq LworLSAgIlNUQUNLIiwJLyogNyAgMHgwNyAqLworLSAgIldBSVRUSFJFQUQiLAkvKiA4ICAweDA4 ICovCistICAiV0FJVFBBR0UiLAkvKiA5ICAweDA5ICovCistICAiU0lHU1VTUEVORCIsCS8qIDEw IDB4MGEgKi8KKy0gICJTSUdXQUlUSU5GTyIsCS8qIDExIDB4MGIgKi8KKy0gICJOQU5PU0xFRVAi LAkvKiAxMiAweDBjICovCistICAiTVVURVgiLAkvKiAxMyAweDBkICovCistICAiQ09ORFZBUiIs CS8qIDE0IDB4MGUgKi8KKy0gICJKT0lOIiwJCS8qIDE1IDB4MGYgKi8KKy0gICJJTlRSIiwJCS8q IDE2IDB4MTAgKi8KKy0gICJTRU0iLAkJLyogMTcgMHgxMSAqLworLSAgIldBSVRDVFgiLAkvKiAx OCAweDEyICovCistICAiTkVUX1NFTkQiLAkvKiAxOSAweDEzICovCistICAiTkVUX1JFUExZIgkv KiAyMCAweDE0ICovCistfTsKKy0KKy1jb25zdCBjaGFyICoKKy1udG9fZXh0cmFfdGhyZWFkX2lu Zm8gKHN0cnVjdCB0YXJnZXRfb3BzICpzZWxmLCBzdHJ1Y3QgdGhyZWFkX2luZm8gKnRpKQorLXsK Ky0gIGlmICh0aSAhPSBOVUxMICYmIHRpLT5wcml2ICE9IE5VTEwpCistICAgIHsKKy0gICAgICBu dG9fdGhyZWFkX2luZm8gKnByaXYgPSBnZXRfbnRvX3RocmVhZF9pbmZvICh0aSk7CistCistICAg ICAgaWYgKHByaXYtPnN0YXRlIDwgQVJSQVlfU0laRSAobnRvX3RocmVhZF9zdGF0ZV9zdHIpKQor LQlyZXR1cm4gbnRvX3RocmVhZF9zdGF0ZV9zdHIgW3ByaXYtPnN0YXRlXTsKKy0gICAgfQorLSAg cmV0dXJuICIiOworLX0KKy0KKy12b2lkCistbnRvX2luaXRpYWxpemVfc2lnbmFscyAodm9pZCkK Ky17CistICAvKiBXZSB1c2UgU0lHNDUgZm9yIHB1bHNlcywgb3Igc29tZXRoaW5nLCBzbyBub3N0 b3AsIG5vcHJpbnQKKy0gICAgIGFuZCBwYXNzIHRoZW0uICAqLworLSAgc2lnbmFsX3N0b3BfdXBk YXRlIChnZGJfc2lnbmFsX2Zyb21fbmFtZSAoIlNJRzQ1IiksIDApOworLSAgc2lnbmFsX3ByaW50 X3VwZGF0ZSAoZ2RiX3NpZ25hbF9mcm9tX25hbWUgKCJTSUc0NSIpLCAwKTsKKy0gIHNpZ25hbF9w YXNzX3VwZGF0ZSAoZ2RiX3NpZ25hbF9mcm9tX25hbWUgKCJTSUc0NSIpLCAxKTsKKy0KKy0gIC8q IEJ5IGRlZmF1bHQgd2UgZG9uJ3Qgd2FudCB0byBzdG9wIG9uIHRoZXNlIHR3bywgYnV0IHdlIGRv IHdhbnQgdG8gcGFzcy4gICovCistI2lmIGRlZmluZWQoU0lHU0VMRUNUKQorLSAgc2lnbmFsX3N0 b3BfdXBkYXRlIChTSUdTRUxFQ1QsIDApOworLSAgc2lnbmFsX3ByaW50X3VwZGF0ZSAoU0lHU0VM RUNULCAwKTsKKy0gIHNpZ25hbF9wYXNzX3VwZGF0ZSAoU0lHU0VMRUNULCAxKTsKKy0jZW5kaWYK Ky0KKy0jaWYgZGVmaW5lZChTSUdQSE9UT04pCistICBzaWduYWxfc3RvcF91cGRhdGUgKFNJR1BI T1RPTiwgMCk7CistICBzaWduYWxfcHJpbnRfdXBkYXRlIChTSUdQSE9UT04sIDApOworLSAgc2ln bmFsX3Bhc3NfdXBkYXRlIChTSUdQSE9UT04sIDEpOworLSNlbmRpZgorLX0KKy0KKy0vKiBSZWFk IEFVWFYgZnJvbSBpbml0aWFsX3N0YWNrLiAgKi8KKy1MT05HRVNUCistbnRvX3JlYWRfYXV4dl9m cm9tX2luaXRpYWxfc3RhY2sgKENPUkVfQUREUiBpbml0aWFsX3N0YWNrLCBnZGJfYnl0ZSAqcmVh ZGJ1ZiwKKy0JCQkJICBMT05HRVNUIGxlbiwgc2l6ZV90IHNpemVvZl9hdXh2X3QpCisteworLSAg Z2RiX2J5dGUgdGFyZzMyWzRdOyAvKiBGb3IgMzIgYml0IHRhcmdldCB2YWx1ZXMuICAqLworLSAg Z2RiX2J5dGUgdGFyZzY0WzhdOyAvKiBGb3IgNjQgYml0IHRhcmdldCB2YWx1ZXMuICAqLworLSAg Q09SRV9BRERSIGRhdGFfb2ZzID0gMDsKKy0gIFVMT05HRVNUIGFuaW50OworLSAgTE9OR0VTVCBs ZW5fcmVhZCA9IDA7CistICBnZGJfYnl0ZSAqYnVmZjsKKy0gIGVudW0gYmZkX2VuZGlhbiBieXRl X29yZGVyOworLSAgaW50IHB0cl9zaXplOworLQorLSAgaWYgKHNpemVvZl9hdXh2X3QgPT0gMTYp CistICAgIHB0cl9zaXplID0gODsKKy0gIGVsc2UKKy0gICAgcHRyX3NpemUgPSA0OworLQorLSAg LyogU2tpcCBvdmVyIGFyZ2MsIGFyZ3YgYW5kIGVudnAuLi4gQ29tbWVudCBmcm9tIGxkZC5jOgor LQorLSAgICAgVGhlIHN0YXJ0dXAgZnJhbWUgaXMgc2V0LXVwIHNvIHRoYXQgd2UgaGF2ZToKKy0g ICAgIGF1eHYKKy0gICAgIE5VTEwKKy0gICAgIC4uLgorLSAgICAgZW52cDIKKy0gICAgIGVudnAx IDwtLS0tLSB2b2lkICpmcmFtZSArIChhcmdjICsgMikgKiBzaXplb2YoY2hhciAqKQorLSAgICAg TlVMTAorLSAgICAgLi4uCistICAgICBhcmd2MgorLSAgICAgYXJndjEKKy0gICAgIGFyZ2MgIDwt LS0tLS0gdm9pZCAqIGZyYW1lCistCistICAgICBPbiBlbnRyeSB0byBsZGQsIGZyYW1lIGdpdmVz IHRoZSBhZGRyZXNzIG9mIGFyZ2Mgb24gdGhlIHN0YWNrLiAgKi8KKy0gIC8qIFJlYWQgYXJnYy4g NCBieXRlcyBvbiBib3RoIDY0IGFuZCAzMiBiaXQgYXJjaGVzIGFuZCBsdWNraWx5IGxpdHRsZQor LSAgICogZW5kaWFuLiBTbyB3ZSBqdXN0IHJlYWQgZmlyc3QgNCBieXRlcy4gICovCistICBpZiAo dGFyZ2V0X3JlYWRfbWVtb3J5IChpbml0aWFsX3N0YWNrICsgZGF0YV9vZnMsIHRhcmczMiwgNCkg IT0gMCkKKy0gICAgcmV0dXJuIDA7CistCistICBieXRlX29yZGVyID0gZ2RiYXJjaF9ieXRlX29y ZGVyIChjdXJyZW50X2luZmVyaW9yICgpLT5hcmNoICgpKTsKKy0KKy0gIGFuaW50ID0gZXh0cmFj dF91bnNpZ25lZF9pbnRlZ2VyICh0YXJnMzIsIHNpemVvZiAodGFyZzMyKSwgYnl0ZV9vcmRlcik7 CistCistICAvKiBTaXplIG9mIHBvaW50ZXIgaXMgYXNzdW1lZCB0byBiZSA0IGJ5dGVzICgzMiBi aXQgYXJjaC4pICovCistICBkYXRhX29mcyArPSAoYW5pbnQgKyAyKSAqIHB0cl9zaXplOyAvKiAr IDIgY29tZXMgZnJvbSBhcmdjIGl0c2VsZiBhbmQKKy0JCQkJCQlOVUxMIHRlcm1pbmF0aW5nIHBv aW50ZXIgaW4KKy0JCQkJCQlhcmd2LiAgKi8KKy0KKy0gIC8qIE5vdyBsb29wIG92ZXIgZW52IHRh YmxlOiAgKi8KKy0gIGFuaW50ID0gMDsKKy0gIHdoaWxlICh0YXJnZXRfcmVhZF9tZW1vcnkgKGlu aXRpYWxfc3RhY2sgKyBkYXRhX29mcywgdGFyZzY0LCBwdHJfc2l6ZSkKKy0JID09IDApCistICAg IHsKKy0gICAgICBpZiAoZXh0cmFjdF91bnNpZ25lZF9pbnRlZ2VyICh0YXJnNjQsIHB0cl9zaXpl LCBieXRlX29yZGVyKSA9PSAwKQorLQlhbmludCA9IDE7IC8qIEtlZXAgbG9vcGluZyB1bnRpbCBu b24tbnVsbCBlbnRyeSBpcyBmb3VuZC4gICovCistICAgICAgZWxzZSBpZiAoYW5pbnQpCistCWJy ZWFrOworLSAgICAgIGRhdGFfb2ZzICs9IHB0cl9zaXplOworLSAgICB9CistICBpbml0aWFsX3N0 YWNrICs9IGRhdGFfb2ZzOworLQorLSAgbWVtc2V0IChyZWFkYnVmLCAwLCBsZW4pOworLSAgYnVm ZiA9IHJlYWRidWY7CistICB3aGlsZSAobGVuX3JlYWQgPD0gbGVuLXNpemVvZl9hdXh2X3QpCist ICAgIHsKKy0gICAgICBpZiAodGFyZ2V0X3JlYWRfbWVtb3J5IChpbml0aWFsX3N0YWNrICsgbGVu X3JlYWQsIGJ1ZmYsIHNpemVvZl9hdXh2X3QpCistCSAgPT0gMCkKKy0JeworLQkgIC8qIEJvdGgg MzIgYW5kIDY0IGJpdCBzdHJ1Y3R1cmVzIGhhdmUgaW50IGFzIHRoZSBmaXJzdCBmaWVsZC4gICov CistCSAgY29uc3QgVUxPTkdFU1QgYV90eXBlCistCSAgICA9IGV4dHJhY3RfdW5zaWduZWRfaW50 ZWdlciAoYnVmZiwgc2l6ZW9mICh0YXJnMzIpLCBieXRlX29yZGVyKTsKKy0KKy0JICBpZiAoYV90 eXBlID09IEFUX05VTEwpCistCSAgICBicmVhazsKKy0JICBidWZmICs9IHNpemVvZl9hdXh2X3Q7 CistCSAgbGVuX3JlYWQgKz0gc2l6ZW9mX2F1eHZfdDsKKy0JfQorLSAgICAgIGVsc2UKKy0JYnJl YWs7CistICAgIH0KKy0gIHJldHVybiBsZW5fcmVhZDsKKy19CistCistLyogUmV0dXJuIG50b19p bmZlcmlvcl9kYXRhIGZvciB0aGUgZ2l2ZW4gSU5GRVJJT1IuICBJZiBub3QgeWV0IGNyZWF0ZWQs CistICAgY29uc3RydWN0IGl0LiAgKi8KKy0KKy1zdHJ1Y3QgbnRvX2luZmVyaW9yX2RhdGEgKgor LW50b19pbmZlcmlvcl9kYXRhIChzdHJ1Y3QgaW5mZXJpb3IgKmNvbnN0IGluZmVyaW9yKQorLXsK Ky0gIHN0cnVjdCBpbmZlcmlvciAqY29uc3QgaW5mID0gaW5mZXJpb3IgPyBpbmZlcmlvciA6IGN1 cnJlbnRfaW5mZXJpb3IgKCk7CistICBzdHJ1Y3QgbnRvX2luZmVyaW9yX2RhdGEgKmluZl9kYXRh OworLQorLSAgZ2RiX2Fzc2VydCAoaW5mICE9IE5VTEwpOworLQorLSAgaW5mX2RhdGEgPSBudG9f aW5mZXJpb3JfZGF0YV9yZWcuZ2V0IChpbmYpOworLSAgaWYgKGluZl9kYXRhID09IE5VTEwpCist ICAgIGluZl9kYXRhID0gbnRvX2luZmVyaW9yX2RhdGFfcmVnLmVtcGxhY2UgKGluZik7CistCist ICByZXR1cm4gaW5mX2RhdGE7CistfQorZGlmZiAtLWdpdCBhL2dkYi9udG8tdGRlcC5oIGIvZ2Ri L250by10ZGVwLmgKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAorLS0tIGEvZ2RiL250by10ZGVw LmgKKysrKyAvZGV2L251bGwKK0BAIC0xLDE5NCArMCwwIEBACistLyogbnRvLXRkZXAuaCAtIFFO WCBOZXV0cmlubyB0YXJnZXQgaGVhZGVyLgorLQorLSAgIENvcHlyaWdodCAoQykgMjAwMy0yMDI0 IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLQorLSAgIENvbnRyaWJ1dGVkIGJ5IFFO WCBTb2Z0d2FyZSBTeXN0ZW1zIEx0ZC4KKy0KKy0gICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHREIu CistCistICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkKKy0gICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorLSAgIHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCistICAg KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKy0KKy0gICBUaGlzIHByb2dyYW0g aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy0gICBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgorLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUKKy0gICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk ZXRhaWxzLgorLQorLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCistICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJ ZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworLQorLSNpZm5k ZWYgTlRPX1RERVBfSAorLSNkZWZpbmUgTlRPX1RERVBfSAorLQorLSNpbmNsdWRlICJzb2xpc3Qu aCIKKy0jaW5jbHVkZSAib3NhYmkuaCIKKy0jaW5jbHVkZSAicmVnc2V0LmgiCistI2luY2x1ZGUg ImdkYnRocmVhZC5oIgorLSNpbmNsdWRlICJnZGJzdXBwb3J0L2dkYi1jaGVja2VkLXN0YXRpYy1j YXN0LmgiCistCistLyogVGFyZ2V0IG9wZXJhdGlvbnMgZGVmaW5lZCBmb3IgTmV1dHJpbm8gdGFy Z2V0cyAoPHRhcmdldD4tbnRvLXRkZXAuYykuICAqLworLQorLXN0cnVjdCBudG9fdGFyZ2V0X29w cworLXsKKy0vKiBUaGUgQ1BVSU5GTyBmbGFncyBmcm9tIHRoZSByZW1vdGUuICBDdXJyZW50bHkg dXNlZCBieQorLSAgIGkzODYgZm9yIGZ4c2F2ZSBidXQgZnV0dXJlIHByb29maW5nIG90aGVyIGhv c3RzLgorLSAgIFRoaXMgaXMgaW5pdGlhbGl6ZWQgaW4gcHJvY2ZzX2F0dGFjaCBvciBudG9fc3Rh cnRfcmVtb3RlCistICAgZGVwZW5kaW5nIG9uIG91ciBob3N0L3RhcmdldC4gIEl0IHdvdWxkIG9u bHkgYmUgaW52YWxpZAorLSAgIGlmIHdlIHdlcmUgdGFsa2luZyB0byBhbiBvbGRlciBwZGVidWcg d2hpY2ggZGlkbid0IHN1cHBvcnQKKy0gICB0aGUgY3B1aW5mbyBtZXNzYWdlLiAgKi8KKy0gIHVu c2lnbmVkIGNwdWluZm9fZmxhZ3M7CistCistLyogVHJ1ZSBpZiBzdWNjZXNzZnVsbHkgcmV0cmll dmVkIGNwdWluZm8gZnJvbSByZW1vdGUuICAqLworLSAgaW50IGNwdWluZm9fdmFsaWQ7CistCist LyogR2l2ZW4gYSByZWdpc3RlciwgcmV0dXJuIGFuIGlkIHRoYXQgcmVwcmVzZW50cyB0aGUgTmV1 dHJpbm8KKy0gICByZWdzZXQgaXQgY2FtZSBmcm9tLiAgSWYgcmVnID09IC0xIHVwZGF0ZSBhbGwg cmVnc2V0cy4gICovCistICBpbnQgKCpyZWdzZXRfaWQpIChpbnQpOworLQorLSAgdm9pZCAoKnN1 cHBseV9ncmVnc2V0KSAoc3RydWN0IHJlZ2NhY2hlICosIGNoYXIgKik7CistCistICB2b2lkICgq c3VwcGx5X2ZwcmVnc2V0KSAoc3RydWN0IHJlZ2NhY2hlICosIGNoYXIgKik7CistCistICB2b2lk ICgqc3VwcGx5X2FsdHJlZ3NldCkgKHN0cnVjdCByZWdjYWNoZSAqLCBjaGFyICopOworLQorLS8q IEdpdmVuIGEgcmVnc2V0LCB0ZWxsIGdkYiBhYm91dCByZWdpc3RlcnMgc3RvcmVkIGluIGRhdGEu ICAqLworLSAgdm9pZCAoKnN1cHBseV9yZWdzZXQpIChzdHJ1Y3QgcmVnY2FjaGUgKiwgaW50LCBj aGFyICopOworLQorLS8qIEdpdmVuIGEgcmVnaXN0ZXIgYW5kIHJlZ3NldCwgY2FsY3VsYXRlIHRo ZSBvZmZzZXQgaW50byB0aGUgcmVnc2V0CistICAgYW5kIHN0dWZmIGl0IGludG8gdGhlIGxhc3Qg YXJndW1lbnQuICBJZiByZWdubyBpcyAtMSwgY2FsY3VsYXRlIHRoZQorLSAgIHNpemUgb2YgdGhl IGVudGlyZSByZWdzZXQuICBSZXR1cm5zIGxlbmd0aCBvZiBkYXRhLCAtMSBpZiB1bmtub3duCist ICAgcmVnc2V0LCAwIGlmIHVua25vd24gcmVnaXN0ZXIuICAqLworLSAgaW50ICgqcmVnaXN0ZXJf YXJlYSkgKHN0cnVjdCBnZGJhcmNoICosIGludCwgaW50LCB1bnNpZ25lZCAqKTsKKy0KKy0vKiBC dWlsZCB0aGUgTmV1dHJpbm8gcmVnaXN0ZXIgc2V0IGluZm8gaW50byB0aGUgZGF0YSBidWZmZXIu CistICAgUmV0dXJuIC0xIGlmIHVua25vd24gcmVnc2V0LCAwIG90aGVyd2lzZS4gICovCistICBp bnQgKCpyZWdzZXRfZmlsbCkgKGNvbnN0IHN0cnVjdCByZWdjYWNoZSAqLCBpbnQsIGNoYXIgKik7 CistCistLyogR2l2ZXMgdGhlIGZldGNoX2xpbmtfbWFwX29mZnNldHMgZnVuY3Rpb24gZXhwb3N1 cmUgb3V0c2lkZSBvZgorLSAgIHNvbGliLXN2cjQuYyBzbyB0aGF0IHdlIGNhbiBvdmVycmlkZSBy ZWxvY2F0ZV9zZWN0aW9uX2FkZHJlc3NlcygpLiAgKi8KKy0gIHN0cnVjdCBsaW5rX21hcF9vZmZz ZXRzICooKmZldGNoX2xpbmtfbWFwX29mZnNldHMpICh2b2lkKTsKKy0KKy0vKiBVc2VkIGJ5IG50 b19lbGZfb3NhYmlfc25pZmZlciB0byBkZXRlcm1pbmUgaWYgd2UncmUgY29ubmVjdGVkIHRvIGFu CistICAgTmV1dHJpbm8gdGFyZ2V0LiAgKi8KKy0gIGVudW0gZ2RiX29zYWJpICgqaXNfbnRvX3Rh cmdldCkgKGJmZCAqYWJmZCk7CistfTsKKy0KKy1leHRlcm4gc3RydWN0IG50b190YXJnZXRfb3Bz IGN1cnJlbnRfbnRvX3RhcmdldDsKKy0KKy0jZGVmaW5lIG50b19jcHVpbmZvX2ZsYWdzIChjdXJy ZW50X250b190YXJnZXQuY3B1aW5mb19mbGFncykKKy0KKy0jZGVmaW5lIG50b19jcHVpbmZvX3Zh bGlkIChjdXJyZW50X250b190YXJnZXQuY3B1aW5mb192YWxpZCkKKy0KKy0jZGVmaW5lIG50b19y ZWdzZXRfaWQgKGN1cnJlbnRfbnRvX3RhcmdldC5yZWdzZXRfaWQpCistCistI2RlZmluZSBudG9f c3VwcGx5X2dyZWdzZXQgKGN1cnJlbnRfbnRvX3RhcmdldC5zdXBwbHlfZ3JlZ3NldCkKKy0KKy0j ZGVmaW5lIG50b19zdXBwbHlfZnByZWdzZXQgKGN1cnJlbnRfbnRvX3RhcmdldC5zdXBwbHlfZnBy ZWdzZXQpCistCistI2RlZmluZSBudG9fc3VwcGx5X2FsdHJlZ3NldCAoY3VycmVudF9udG9fdGFy Z2V0LnN1cHBseV9hbHRyZWdzZXQpCistCistI2RlZmluZSBudG9fc3VwcGx5X3JlZ3NldCAoY3Vy cmVudF9udG9fdGFyZ2V0LnN1cHBseV9yZWdzZXQpCistCistI2RlZmluZSBudG9fcmVnaXN0ZXJf YXJlYSAoY3VycmVudF9udG9fdGFyZ2V0LnJlZ2lzdGVyX2FyZWEpCistCistI2RlZmluZSBudG9f cmVnc2V0X2ZpbGwgKGN1cnJlbnRfbnRvX3RhcmdldC5yZWdzZXRfZmlsbCkKKy0KKy0jZGVmaW5l IG50b19mZXRjaF9saW5rX21hcF9vZmZzZXRzIFwKKy0oY3VycmVudF9udG9fdGFyZ2V0LmZldGNo X2xpbmtfbWFwX29mZnNldHMpCistCistI2RlZmluZSBudG9faXNfbnRvX3RhcmdldCAoY3VycmVu dF9udG9fdGFyZ2V0LmlzX250b190YXJnZXQpCistCistLyogS2VlcCB0aGlzIGNvbnNpc3RhbnQg d2l0aCBuZXV0cmlubyBzeXNwYWdlLmguICAqLworLWVudW0KKy17CistICBDUFVUWVBFX1g4NiwK Ky0gIENQVVRZUEVfUFBDLAorLSAgQ1BVVFlQRV9NSVBTLAorLSAgQ1BVVFlQRV9TUEFSRSwKKy0g IENQVVRZUEVfQVJNLAorLSAgQ1BVVFlQRV9TSCwKKy0gIENQVVRZUEVfVU5LTk9XTgorLX07Cist CistZW51bQorLXsKKy0gIE9TVFlQRV9RTlg0LAorLSAgT1NUWVBFX05UTworLX07CistCistLyog VGhlc2UgY29ycmVzcG9uZCB0byB0aGUgRFNNU0dfKiB2ZXJzaW9ucyBpbiBkc21zZ3MuaC4gICov CistZW51bQorLXsKKy0gIE5UT19SRUdfR0VORVJBTCwKKy0gIE5UT19SRUdfRkxPQVQsCistICBO VE9fUkVHX1NZU1RFTSwKKy0gIE5UT19SRUdfQUxULAorLSAgTlRPX1JFR19FTkQKKy19OworLQor LXR5cGVkZWYgY2hhciBxbnhfcmVnNjRbOF07CistCistdHlwZWRlZiBzdHJ1Y3QgX2RlYnVnX3Jl Z3MKKy17CistICBxbnhfcmVnNjQgcGFkZGluZ1sxMDI0XTsKKy19IG50b19yZWdzZXRfdDsKKy0K Ky1zdHJ1Y3QgbnRvX3RocmVhZF9pbmZvIDogcHVibGljIHByaXZhdGVfdGhyZWFkX2luZm8KKy17 CistICBzaG9ydCB0aWQgPSAwOworLSAgdW5zaWduZWQgY2hhciBzdGF0ZSA9IDA7CistICB1bnNp Z25lZCBjaGFyIGZsYWdzID0gMDsKKy0gIHN0ZDo6c3RyaW5nIG5hbWU7CistfTsKKy0KKy1zdGF0 aWMgaW5saW5lIG50b190aHJlYWRfaW5mbyAqCistZ2V0X250b190aHJlYWRfaW5mbyAodGhyZWFk X2luZm8gKnRocmVhZCkKKy17CistICByZXR1cm4gZ2RiOjpjaGVja2VkX3N0YXRpY19jYXN0PG50 b190aHJlYWRfaW5mbyAqPiAodGhyZWFkLT5wcml2LmdldCAoKSk7CistfQorLQorLS8qIFBlci1p bmZlcmlvciBkYXRhLCBjb21tb24gZm9yIGJvdGggcHJvY2ZzIGFuZCByZW1vdGUuICAqLworLXN0 cnVjdCBudG9faW5mZXJpb3JfZGF0YQorLXsKKy0gIC8qIExhc3Qgc3RvcHBlZCBmbGFncyByZXN1 bHQgZnJvbSB3YWl0IGZ1bmN0aW9uICovCistICB1bnNpZ25lZCBpbnQgc3RvcHBlZF9mbGFncyA9 IDA7CistCistICAvKiBMYXN0IGtub3duIHN0b3BwZWQgUEMgKi8KKy0gIENPUkVfQUREUiBzdG9w cGVkX3BjID0gMDsKKy19OworLQorLS8qIEdlbmVyaWMgZnVuY3Rpb25zIGluIG50by10ZGVwLmMu ICAqLworLQorLXZvaWQgbnRvX2luaXRfc29saWJfYWJzb2x1dGVfcHJlZml4ICh2b2lkKTsKKy0K Ky1jaGFyICoqbnRvX3BhcnNlX3JlZGlyZWN0aW9uIChjaGFyICpzdGFydF9hcmd2W10sIGNvbnN0 IGNoYXIgKippbiwKKy0JCQkgICAgICBjb25zdCBjaGFyICoqb3V0LCBjb25zdCBjaGFyICoqZXJy KTsKKy0KKy12b2lkIG50b19yZWxvY2F0ZV9zZWN0aW9uX2FkZHJlc3NlcyAoc29saWIgJiwgdGFy Z2V0X3NlY3Rpb24gKik7CistCistaW50IG50b19tYXBfYXJjaF90b19jcHV0eXBlIChjb25zdCBj aGFyICopOworLQorLWludCBudG9fZmluZF9hbmRfb3Blbl9zb2xpYiAoY29uc3QgY2hhciAqLCB1 bnNpZ25lZCwKKy0JCQkgICAgIGdkYjo6dW5pcXVlX3htYWxsb2NfcHRyPGNoYXI+ICopOworLQor LWVudW0gZ2RiX29zYWJpIG50b19lbGZfb3NhYmlfc25pZmZlciAoYmZkICphYmZkKTsKKy0KKy12 b2lkIG50b19pbml0aWFsaXplX3NpZ25hbHMgKHZvaWQpOworLQorLS8qIER1bW15IGZ1bmN0aW9u IGZvciBpbml0aWFsaXppbmcgbnRvX3RhcmdldF9vcHMgb24gdGFyZ2V0cyB3aGljaCBkbworLSAg IG5vdCBkZWZpbmUgYSBwYXJ0aWN1bGFyIHJlZ3NldC4gICovCistdm9pZCBudG9fZHVtbXlfc3Vw cGx5X3JlZ3NldCAoc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwgY2hhciAqcmVncyk7CistCist aW50IG50b19pbl9keW5zeW1fcmVzb2x2ZV9jb2RlIChDT1JFX0FERFIgcGMpOworLQorLWNvbnN0 IGNoYXIgKm50b19leHRyYV90aHJlYWRfaW5mbyAoc3RydWN0IHRhcmdldF9vcHMgKnNlbGYsIHN0 cnVjdCB0aHJlYWRfaW5mbyAqKTsKKy0KKy1MT05HRVNUIG50b19yZWFkX2F1eHZfZnJvbV9pbml0 aWFsX3N0YWNrIChDT1JFX0FERFIgaW5pdGlhbF9zdGFjaywKKy0JCQkJCSAgZ2RiX2J5dGUgKnJl YWRidWYsCistCQkJCQkgIExPTkdFU1QgbGVuLCBzaXplX3Qgc2l6ZW9mX2F1eHZfdCk7CistCist c3RydWN0IG50b19pbmZlcmlvcl9kYXRhICpudG9faW5mZXJpb3JfZGF0YSAoc3RydWN0IGluZmVy aW9yICppbmYpOworLQorLSNlbmRpZiAvKiBOVE9fVERFUF9IICovCitkaWZmIC0tZ2l0IGEvZ2Ri L29zYWJpLmMgYi9nZGIvb3NhYmkuYworLS0tIGEvZ2RiL29zYWJpLmMKKysrKyBiL2dkYi9vc2Fi aS5jCitAQCAtNzAsNyArNzAsNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG9zYWJpX25hbWVzIGdk Yl9vc2FiaV9uYW1lc1tdID0KKyAgIHsgIk9wZW5CU0QiLCBOVUxMIH0sCisgICB7ICJXaW5kb3dz Q0UiLCBOVUxMIH0sCisgICB7ICJESkdQUCIsIE5VTEwgfSwKKy0gIHsgIlFOWC1OZXV0cmlubyIs IE5VTEwgfSwKKyAgIHsgIkN5Z3dpbiIsIE5VTEwgfSwKKyAgIHsgIldpbmRvd3MiLCBOVUxMIH0s CisgICB7ICJBSVgiLCBOVUxMIH0sCitkaWZmIC0tZ2l0IGEvZ2RiL29zYWJpLmggYi9nZGIvb3Nh YmkuaAorLS0tIGEvZ2RiL29zYWJpLmgKKysrKyBiL2dkYi9vc2FiaS5oCitAQCAtMzUsNyArMzUs NiBAQCBlbnVtIGdkYl9vc2FiaQorICAgR0RCX09TQUJJX09QRU5CU0QsCisgICBHREJfT1NBQklf V0lOQ0UsCisgICBHREJfT1NBQklfR08zMiwKKy0gIEdEQl9PU0FCSV9RTlhOVE8sCisgICBHREJf T1NBQklfQ1lHV0lOLAorICAgR0RCX09TQUJJX1dJTkRPV1MsCisgICBHREJfT1NBQklfQUlYLAor ZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvbGliL2dkYi5leHAgYi9nZGIvdGVzdHN1aXRlL2xp Yi9nZGIuZXhwCistLS0gYS9nZGIvdGVzdHN1aXRlL2xpYi9nZGIuZXhwCisrKysgYi9nZGIvdGVz dHN1aXRlL2xpYi9nZGIuZXhwCitAQCAtODA3OSw3ICs4MDc5LDYgQEAgZ2RiX2NhY2hpbmdfcHJv YyBnZGJfaGFzX2FyZ3YwIHt9IHsKKyAJICB8fCBbaXN0YXJnZXQgKi13aW5jZS1wZV0gfHwgW2lz dGFyZ2V0ICotKi1taW5ndzMyY2UqXQorIAkgIHx8IFtpc3RhcmdldCAqLSotb3NmKl0KKyAJICB8 fCBbaXN0YXJnZXQgKi0qLWRpY29zKl0KKy0JICB8fCBbaXN0YXJnZXQgKi0qLW50bypdCisgCSAg fHwgW2lzdGFyZ2V0ICotKi0qdm1zKl0KKyAJICB8fCBbaXN0YXJnZXQgKi0qLWx5bngqMTc4XSkg fSB7CisgCWZhaWwgImFyZ3ZcWzBcXSBzaG91bGQgYmUgYXZhaWxhYmxlIG9uIHRoaXMgdGFyZ2V0 IgoKZGlmZiAtLWdpdCBhL2dkYi1yZW1vdmUtdXNlLW9mLXB5LWlzYXNjaWkgYi9nZGItcmVtb3Zl LXVzZS1vZi1weS1pc2FzY2lpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjdjNWIz Li4wMDAwMDAwCi0tLSBhL2dkYi1yZW1vdmUtdXNlLW9mLXB5LWlzYXNjaWkKKysrIC9kZXYvbnVs bApAQCAtMSwzNyArMCwwIEBACi1Gcm9tIEZFRE9SQV9QQVRDSEVTIE1vbiBTZXAgMTcgMDA6MDA6 MDAgMjAwMQotRnJvbTogQW5kcmV3IEJ1cmdlc3MgPGFidXJnZXNzQHJlZGhhdC5jb20+Ci1EYXRl OiBUaHUsIDE2IE5vdiAyMDIzIDEwOjUzOjM0ICswMDAwCi1TdWJqZWN0OiBnZGItcmVtb3ZlLXVz ZS1vZi1weS1pc2FzY2lpCi0KLTs7IEJhY2twb3J0IHVwc3RyZWFtIGNvbW1pdCA3ZGI3OTViYzY3 YS4KLQotZ2RiL3B5dGhvbjogcmVtb3ZlIHVzZSBvZiBzdHIuaXNhc2NpaSgpCi0KLVRoaXMgY29t bWl0OgotCi0gIGNvbW1pdCA4ZjZjNDUyYjVhNGU1MGZiYjU1ZmYxZDEzMzI4YjM5MmFkMWZkNDE2 Ci0gIERhdGU6ICAgU3VuIE9jdCAxNSAyMjo0ODo0MiAyMDIzICswMTAwCi0KLSAgICAgIGdkYjog aW1wbGVtZW50IG1pc3NpbmcgZGVidWcgaGFuZGxlciBob29rIGZvciBQeXRob24KLQotaW50cm9k dWNlZCBhIHVzZSBvZiBzdHIuaXNhc2NpaSgpLCB3aGljaCB3YXMgb25seSBhZGRlZCBpbiBQeXRo b24gMy43LgotCi1UaGlzIGNvbW1pdCBzd2l0Y2hlcyB0byB1c2UgY3Vyc2VzLmFzY2lpLmlzYXNj aWkoKSwgYXMgdGhpcyB3YXMKLWF2YWlsYWJsZSBpbiAzLjYuCi0KLVRoZSBzYW1lIGlzIHRydWUg Zm9yIHN0ci5pc2FsbnVtKCksIHdoaWNoIGlzIHJlcGxhY2VkIHdpdGgKLWN1cnNlcy5hc2NpaS5p c2FsbnVtKCkuCi0KLVRoZXJlIHNob3VsZCBiZSBubyB1c2VyIHZpc2libGUgY2hhbmdlcyBhZnRl ciB0aGlzIGNvbW1pdC4KLQotZGlmZiAtLWdpdCBhL2dkYi9weXRob24vbGliL2dkYi9taXNzaW5n X2RlYnVnLnB5IGIvZ2RiL3B5dGhvbi9saWIvZ2RiL21pc3NpbmdfZGVidWcucHkKLS0tLSBhL2dk Yi9weXRob24vbGliL2dkYi9taXNzaW5nX2RlYnVnLnB5Ci0rKysgYi9nZGIvcHl0aG9uL2xpYi9n ZGIvbWlzc2luZ19kZWJ1Zy5weQotQEAgLTIwLDYgKzIwLDcgQEAgTWlzc2luZ0RlYnVnSGFuZGxl ciBiYXNlIGNsYXNzLCBhbmQgcmVnaXN0ZXJfaGFuZGxlciBmdW5jdGlvbi4KLSBpbXBvcnQgc3lz Ci0gCi0gaW1wb3J0IGdkYgotK2Zyb20gY3Vyc2VzLmFzY2lpIGltcG9ydCBpc2FzY2lpLCBpc2Fs bnVtCi0gCi0gaWYgc3lzLnZlcnNpb25faW5mbyA+PSAoMywgNyk6Ci0gICAgICMgRnVuY3Rpb25z IHN0ci5pc2FzY2lpKCkgYW5kIHN0ci5pc2FsbnVtIGFyZSBhdmFpbGFibGUgc3RhcnRpbmcgUHl0 aG9uCgpkaWZmIC0tZ2l0IGEvZ2RiLXJoYnoxMTU2MTkyLXJlY3Vyc2l2ZS1kbG9wZW4tdGVzdC5w YXRjaCBiL2dkYi1yaGJ6MTE1NjE5Mi1yZWN1cnNpdmUtZGxvcGVuLXRlc3QucGF0Y2gKaW5kZXgg ZTBhMjI3MC4uMmZmNThlZCAxMDA2NDQKLS0tIGEvZ2RiLXJoYnoxMTU2MTkyLXJlY3Vyc2l2ZS1k bG9wZW4tdGVzdC5wYXRjaAorKysgYi9nZGItcmhiejExNTYxOTItcmVjdXJzaXZlLWRsb3Blbi10 ZXN0LnBhdGNoCkBAIC0yMTEsNyArMjExLDcgQEAgZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUv Z2RiLmJhc2UvZ2RiLXJoYnoxMTU2MTkyLXJlY3Vyc2l2ZS1kbG9wZW4uZXhwIGIvZ2RiL3QKIG5l dyBmaWxlIG1vZGUgMTAwNjQ0CiAtLS0gL2Rldi9udWxsCiArKysgYi9nZGIvdGVzdHN1aXRlL2dk Yi5iYXNlL2dkYi1yaGJ6MTE1NjE5Mi1yZWN1cnNpdmUtZGxvcGVuLmV4cAotQEAgLTAsMCArMSwx NTIgQEAKK0BAIC0wLDAgKzEsMTUxIEBACiArIyBDb3B5cmlnaHQgMjAxNCBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb24sIEluYy4KICsjCiArIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMjY0LDYgKzI2NCw5IEBA IG5ldyBmaWxlIG1vZGUgMTAwNjQ0CiArCiArc2V0IHN1cHBvcnRlZCAwCiArZ2RiX3Rlc3RfbXVs dGlwbGUgInJ1biIgImluaXRpYWwgdHJpYWwgcnVuIiB7CisrICAgIC1yZSAid2FybmluZzogQ29y cnVwdGVkIHNoYXJlZCBsaWJyYXJ5IGxpc3Q6IFxbXlxyXG5cXStcclxuIiB7CisrCWV4cF9jb250 aW51ZQorKyAgICB9CiArICAgIC1yZSAtd3JhcCAiZXhpdGVkIG5vcm1hbGx5LioiIHsKICsJc2V0 IHN1cHBvcnRlZCAxCiArCXBhc3MgJGdkYl90ZXN0X25hbWUKQEAgLTMzMywyOCArMzM2LDI0IEBA IG5ldyBmaWxlIG1vZGUgMTAwNjQ0CiArICAgIGZvcmVhY2ggbCAkc29saWJfZXZlbnRfb3JkZXIg ewogKyAgICAgIGluY3IgcGFzcwogKyAgICAgIHdpdGhfdGVzdF9wcmVmaXggInBhc3MgIyRwYXNz IiB7Ci0rCXNldCBzaG91bGRfYmVfY29ycnVwdGVkIFtleHByIDArMFtsaW5kZXggJGwgMl1dCi0r CWRvX3Rlc3QgW2xpbmRleCAkbCAwXSBbbGluZGV4ICRsIDFdCi0rCXNldCB0ZXN0ICJjb250aW51 ZSIKLSsJZ2xvYmFsIGdkYl9wcm9tcHQKLSsJZ2RiX3Rlc3RfbXVsdGlwbGUgJHRlc3QgJHRlc3Qg ewotKwkgIC1yZSAiXHJcbndhcm5pbmc6IENvcnJ1cHRlZCBzaGFyZWQgbGlicmFyeSBsaXN0Oi4q XHJcblN0b3BwZWQgZHVlIHRvIHNoYXJlZCBsaWJyYXJ5IGV2ZW50LipcclxuJGdkYl9wcm9tcHQg JCIgewotKwkgICAgc2V0IGNvcnJ1cHRlZCAxCi0rCSAgICBwYXNzICR0ZXN0Ci0rCSAgfQotKwkg IC1yZSAiXHJcblN0b3BwZWQgZHVlIHRvIHNoYXJlZCBsaWJyYXJ5IGV2ZW50LipcclxuJGdkYl9w cm9tcHQgJCIgewotKwkgICAgc2V0IGNvcnJ1cHRlZCAwCi0rCSAgICBwYXNzICR0ZXN0CisrCSAg c2V0IHNob3VsZF9iZV9jb3JydXB0ZWQgW2V4cHIgMCswW2xpbmRleCAkbCAyXV0KKysJICBkb190 ZXN0IFtsaW5kZXggJGwgMF0gW2xpbmRleCAkbCAxXQorKworKwkgIHNldCBjb3JydXB0ZWQgMAor KwkgIGdkYl90ZXN0X211bHRpcGxlICJjb250aW51ZSIgIiIgeworKwkgICAgICAtcmUgIlxyXG53 YXJuaW5nOiBDb3JydXB0ZWQgc2hhcmVkIGxpYnJhcnkgbGlzdDpcW15cclxuXF0rKD89XHJcbiki IHsKKysJCSAgc2V0IGNvcnJ1cHRlZCAxCisrCSAgICAgIH0KKysJICAgICAgLXJlIC13cmFwICJc clxuU3RvcHBlZCBkdWUgdG8gc2hhcmVkIGxpYnJhcnkgZXZlbnQuKiIgeworKwkJICBwYXNzICRn ZGJfdGVzdF9uYW1lCisrCSAgICAgIH0KICsJICB9Ci0rCX0KLSsJc2V0IHRlc3QgImNvcnJ1cHRl ZD0kY29ycnVwdGVkIGJ1dCBzaG91bGRfYmVfY29ycnVwdGVkPSRzaG91bGRfYmVfY29ycnVwdGVk IgotKwlpZiB7JGNvcnJ1cHRlZCA9PSAkc2hvdWxkX2JlX2NvcnJ1cHRlZH0gewotKwkgIHBhc3Mg JHRlc3QKLSsJfSBlbHNlIHsKLSsJICBmYWlsICR0ZXN0Ci0rCX0KKysKKysJICBnZGJfYXNzZXJ0 IHskY29ycnVwdGVkID09ICRzaG91bGRfYmVfY29ycnVwdGVkfSBcCisrCSAgICAgICJjb3JydXB0 ZWQ9JGNvcnJ1cHRlZCBidXQgc2hvdWxkX2JlX2NvcnJ1cHRlZD0kc2hvdWxkX2JlX2NvcnJ1cHRl ZCIKICsgICAgICB9CiArICAgIH0KKysKICsgICAgIyBJbiB0aGUgbGFzdCBwYXNzIHdlIGRvIG5v dCBleHBlY3QgdG8gc2VlIGxpYmZvbyBvciBsaWJiYXIuCiArICAgIGluY3IgcGFzcwogKyAgICB3 aXRoX3Rlc3RfcHJlZml4ICJwYXNzICMkcGFzcyIgewoKZGlmZiAtLWdpdCBhL2dkYi5zcGVjIGIv Z2RiLnNwZWMKaW5kZXggM2JiYzg3Zi4uNjVmOTUwZSAxMDA2NDQKLS0tIGEvZ2RiLnNwZWMKKysr IGIvZ2RiLnNwZWMKQEAgLTQ1LDcgKzQ1LDcgQEAgVmVyc2lvbjogMTUuMgogCiAjIFRoZSByZWxl YXNlIGFsd2F5cyBjb250YWlucyBhIGxlYWRpbmcgcmVzZXJ2ZWQgbnVtYmVyLCBzdGFydCBpdCBh dCAxLgogIyBgdXBzdHJlYW0nIGlzIG5vdCBhIHBhcnQgb2YgYG5hbWUnIHRvIHN0YXkgZnVsbHkg cnBtIGRlcGVuZGVuY2llcyBjb21wYXRpYmxlIGZvciB0aGUgdGVzdGluZy4KLVJlbGVhc2U6IDMl ez9kaXN0fQorUmVsZWFzZTogNCV7P2Rpc3R9CiAKIExpY2Vuc2U6IEdQTC0zLjAtb3ItbGF0ZXIg QU5EIEJTRC0zLUNsYXVzZSBBTkQgRlNGQVAgQU5EIExHUEwtMi4xLW9yLWxhdGVyIEFORCBHUEwt Mi4wLW9yLWxhdGVyIEFORCBMR1BMLTIuMC1vci1sYXRlciBBTkQgTGljZW5zZVJlZi1GZWRvcmEt UHVibGljLURvbWFpbiBBTkQgR0ZETC0xLjMtb3ItbGF0ZXIgQU5EIExHUEwtMi4wLW9yLWxhdGVy IFdJVEggR0NDLWV4Y2VwdGlvbi0yLjAgQU5EIEdQTC0zLjAtb3ItbGF0ZXIgV0lUSCBHQ0MtZXhj ZXB0aW9uLTMuMSBBTkQgR1BMLTIuMC1vci1sYXRlciBXSVRIIEdOVS1jb21waWxlci1leGNlcHRp b24KICMgRG8gbm90IHByb3ZpZGUgVVJMIGZvciBzbmFwc2hvdHMgYXMgdGhlIGZpbGUgbGFzdHMg dGhlcmUgb25seSBmb3IgMiBkYXlzLgpAQCAtOTI4LDYgKzkyOCwyNiBAQCBmaQogIyBlbmRpZiBz Y2wKIAogJWNoYW5nZWxvZworKiBUdWUgRGVjIDEwIDIwMjQgQW5kcmV3IEJ1cmdlc3MgPGFidXJn ZXNzQHJlZGhhdC5jb20+CistIFJlbW92ZQorICBnZGItNi42LWJ1aWxkaWQtbG9jYXRlLW1pc2xl YWRpbmctd2FybmluZy1taXNzaW5nLWRlYnVnaW5mby1yaGJ6OTgxMTU0LnBhdGNoLAorICBnZGIt Ni42LWJ1aWxkaWQtbG9jYXRlLnBhdGNoLAorICBnZGItNi42LWJ1aWxkaWQtbG9jYXRlLXNvbGli LW1pc3NpbmctaWRzLnBhdGNoLCBhbmQKKyAgZ2RiLXJlbW92ZS11c2Utb2YtcHktaXNhc2NpaS4g IEFkZCBuZXcgcGF0Y2hlcworICBnZGItYWRkLWRlcHJlY2F0ZWQtc2V0dGluZ3MtcHktc2NyaXB0 LnBhdGNoLAorICBnZGItYmFja3BvcnQtYnVpbGRpZC1yZWxhdGVkLWNoYW5nZXMucGF0Y2gsCisg IGdkYi1yZW1vdmUtcW54LW5ldXRyaW5vLXN1cHBvcnQucGF0Y2gsIGFuZAorICBnZGItNi42LWJ1 aWxkaWQtbG9jYXRlLXRlc3RzLnBhdGNoLiAgVXBkYXRlCisgIGdkYi1hZGQtcnBtLXN1Z2dlc3Rp b24tc2NyaXB0LnBhdGNoIGFuZAorICBnZGItcmhiejExNTYxOTItcmVjdXJzaXZlLWRsb3Blbi10 ZXN0LnBhdGNoLiAgQWxsIG9mIHRoZSBSUE0KKyAgc3VnZ2VzdGlvbiBmZWF0dXJlIGlzIG5vdyBw cm92aWRlZCB2aWEgYSBQeXRob24gZXh0ZW5zaW9uLiAgSQorICBiZWxpZXZlIHRoYXQgdGhlIGV4 aXN0aW5nIGZ1bmN0aW9uYWxpdHkgc2hvdWxkIGJlIGNvdmVyZWQgYnkgdGhlIG5ldworICBpbXBs ZW1lbnRhdGlvbiwgYnV0IHdpdGggbm8gcmVhbCB0ZXN0cyBmb3IgdGhlIGV4aXN0aW5nIGNvZGUs IHdlCisgIGNhbm5vdCBiZSBjZXJ0YWluLiAgVGhlcmUgYXJlIG5ldyBHREIgY29tbWFuZHMgYWRk ZWQgYXMgcGFydCBvZiB0aGlzCisgIGNoYW5nZSByZWxhdGVkIHRvIGNvbnRyb2xsaW5nIHRoZSBS UE0gc3VnZ2VzdGlvbiBmZWF0dXJlLiAgVGhlc2UgYXJlCisgIGRvY3VtZW50ZWQgd2l0aGluIHRo ZSBnZGItYWRkLXJwbS1zdWdnZXN0aW9uLXNjcmlwdC5wYXRjaCBwYXRjaCBieQorICBjaGFuZ2Vz IHRvIHRoZSBHREIgbWFudWFsLgorCiAqIFRodSBOb3YgMTQgMjAyNCBLZXZpbiBCdWV0dG5lciA8 a2V2aW5iQHJlZGhhdC5jb20+CiAtIFJlbW92ZSBnZGItNi41LWJ6MjQzODQ1LXN0YWxlLXRlc3Rp bmctem9tYmllLXRlc3QucGF0Y2guICBUaGlzIHdhcyBhCiAgIHRlc3QgZm9yIGEgZml4IHRvIGEg ZnVuY3Rpb24gdGhhdCB3YXMgbmFtZWQgbGludXhfdGVzdF9mb3JfdHJhY2Vmb3JrLAo=