ZGlmZiAtLWdpdCBhL0FOTk9VTkNFIGIvQU5OT1VOQ0UKaW5kZXggNjA1ZTQzOC4uM2M1NWYyMCAxMDA2NDQKLS0tIGEvQU5OT1VOQ0UKKysrIGIvQU5OT1VOQ0UKQEAgLTEsMTUgKzEsMTUgQEAKLVRoaXMgaXMgcmVsZWFzZSA5ODA2Mjggb2YgV2luZSwgdGhlIE1TIFdpbmRvd3MgZW11bGF0b3IuICBUaGlzIGlzIHN0aWxsIGEKK1RoaXMgaXMgcmVsZWFzZSA5ODA3MTIgb2YgV2luZSwgdGhlIE1TIFdpbmRvd3MgZW11bGF0b3IuICBUaGlzIGlzIHN0aWxsIGEKIGRldmVsb3BlcidzIG9ubHkgcmVsZWFzZS4gIFRoZXJlIGFyZSBtYW55IGJ1Z3MgYW5kIG1hbnkgdW5pbXBsZW1lbnRlZCBBUEkKIGZlYXR1cmVzLiAgTW9zdCBhcHBsaWNhdGlvbnMgc3RpbGwgZG8gbm90IHdvcmsgY29ycmVjdGx5LgogCiBQYXRjaGVzIHNob3VsZCBiZSBzdWJtaXR0ZWQgdG8gImp1bGxpYXJkQGxyYy5lcGZsLmNoIi4gIFBsZWFzZSBkb24ndAogZm9yZ2V0IHRvIGluY2x1ZGUgYSBDaGFuZ2VMb2cgZW50cnkuCiAKLVdIQVQnUyBORVcgd2l0aCBXaW5lLTk4MDYyODogKHNlZSBDaGFuZ2VMb2cgZm9yIGRldGFpbHMpCi0JLSBDb21tb24gY29udHJvbHMgaW1wcm92ZW1lbnRzLgotCS0gV2luMTYgRExMIHNub29waW5nLgotCS0gUHJlbGltaW5hcnkgaW50ZXJuYWwgUG9zdHNjcmlwdCBkcml2ZXIuCi0JLSBJbXByb3ZlZCBESUIgc2VjdGlvbiBoYW5kbGluZy4KK1dIQVQnUyBORVcgd2l0aCBXaW5lLTk4MDcxMjogKHNlZSBDaGFuZ2VMb2cgZm9yIGRldGFpbHMpCisJLSBNb3JlIGNvbW1vbiBjb250cm9scyBzdHVmZi4KKwktIFdpbjMycyBWeEQgc3VwcG9ydC4KKwktIEJlZ2lubmluZ3Mgb2YgY2xpZW50L3NlcnZlciBhcmNoaXRlY3R1cmUuCisJLSBNb3JlIE5MUyBzdXBwb3J0LgogCS0gTG90cyBvZiBidWcgZml4ZXMuCiAKIFNlZSB0aGUgUkVBRE1FIGZpbGUgaW4gdGhlIGRpc3RyaWJ1dGlvbiBmb3IgaW5zdGFsbGF0aW9uIGluc3RydWN0aW9ucy4KQEAgLTE4LDEwICsxOCwxMCBAQAogdGhlIHJlbGVhc2UgaXMgYXZhaWxhYmxlIGF0IHRoZSBmdHAgc2l0ZXMuICBUaGUgc291cmNlcyB3aWxsIGJlIGF2YWlsYWJsZQogZnJvbSB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczoKIAotICBmdHA6Ly9zdW5zaXRlLnVuYy5lZHUvcHViL0xpbnV4L0FMUEhBL3dpbmUvZGV2ZWxvcG1lbnQvV2luZS05ODA2MjgudGFyLmd6Ci0gIGZ0cDovL3RzeC0xMS5taXQuZWR1L3B1Yi9saW51eC9BTFBIQS9XaW5lL2RldmVsb3BtZW50L1dpbmUtOTgwNjI4LnRhci5negotICBmdHA6Ly9mdHAuaW5mb21hZ2ljLmNvbS9wdWIvbWlycm9ycy9saW51eC9zdW5zaXRlL0FMUEhBL3dpbmUvZGV2ZWxvcG1lbnQvV2luZS05ODA2MjgudGFyLmd6Ci0gIGZ0cDovL2Z0cC5wcm9nc29jLnV0cy5lZHUuYXUvcHViL1dpbmUvZGV2ZWxvcG1lbnQvV2luZS05ODA2MjgudGFyLmd6CisgIGZ0cDovL3N1bnNpdGUudW5jLmVkdS9wdWIvTGludXgvQUxQSEEvd2luZS9kZXZlbG9wbWVudC9XaW5lLTk4MDcxMi50YXIuZ3oKKyAgZnRwOi8vdHN4LTExLm1pdC5lZHUvcHViL2xpbnV4L0FMUEhBL1dpbmUvZGV2ZWxvcG1lbnQvV2luZS05ODA3MTIudGFyLmd6CisgIGZ0cDovL2Z0cC5pbmZvbWFnaWMuY29tL3B1Yi9taXJyb3JzL2xpbnV4L3N1bnNpdGUvQUxQSEEvd2luZS9kZXZlbG9wbWVudC9XaW5lLTk4MDcxMi50YXIuZ3oKKyAgZnRwOi8vZnRwLnByb2dzb2MudXRzLmVkdS5hdS9wdWIvV2luZS9kZXZlbG9wbWVudC9XaW5lLTk4MDcxMi50YXIuZ3oKIAogSXQgc2hvdWxkIGFsc28gYmUgYXZhaWxhYmxlIGZyb20gYW55IHNpdGUgdGhhdCBtaXJyb3JzIHRzeC0xMSBvciBzdW5zaXRlLgogCmRpZmYgLS1naXQgYS9BVVRIT1JTIGIvQVVUSE9SUwppbmRleCA2ZTRhY2Y0Li4wNGM2ZGUzNCAxMDA2NDQKLS0tIGEvQVVUSE9SUworKysgYi9BVVRIT1JTCkBAIC01Nyw2ICs1Nyw3IEBACiBQYXZlbCBLYW5rb3Zza3ksCiBKb2NoZW4gS2FycmVyLAogQW5kcmVhcyBLaXJzY2hiYXVtLAorUmVpbiBLbGF6ZXMsCiBBbGJyZWNodCBLbGVpbmUsCiBFcmljIEtvaGwsCiBKb24gS29ucmF0aCwKQEAgLTY2LDYgKzY3LDcgQEAKIFNjb3R0IEEuIExhaXJkLAogRGF2aWQgTGVlIExhbWJlcnQsCiBBbmRyZXcgTGV3eWNreSwKK1BlciBMaW5kc3Ry9m0sCiBNYXJ0aW4gdm9uIExvZXdpcywKIE1pY2hpZWwgdmFuIExvb24sCiBLZW5uZXRoIE1hY0RvbmFsZCwKQEAgLTEwMiw2ICsxMDQsNyBAQAogUGV0ZXIgU2NobGFpbGUsCiBVbHJpY2ggU2NobWlkLAogQmVybmQgU2NobWlkdCwKK0p1ZXJnZW4gU2NobWllZCwKIEluZ28gU2NobmVpZGVyLAogVmljdG9yIFNjaG5laWRlciwKIFluZ3ZpIFNpZ3Vyam9uc3NvbiwKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCAxNDNkNzYxLi5mNjVhN2UwIDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDQgKzEsMjEwIEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitTdW4gSnVsIDEyIDE2OjIzOjM2IDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgorCisJKiBbc2VydmVyLypdIFtzY2hlZHVsZXIvY2xpZW50LmNdIChuZXcgZmlsZXMpCisJICBbc2NoZWR1bGVyL3N5c2RlcHMuY10gW3NjaGVkdWxlci90aHJlYWQuY10gW3NjaGVkdWxlci9wcm9jZXNzLmNdCisJQmVnaW5uaW5ncyBvZiBjbGllbnQvc2VydmVyIGNvbW11bmljYXRpb24gZm9yIGludGVyLXByb2Nlc3MKKwlzeW5jaHJvbmlzYXRpb24uCisKK1NhdCBKdWwgMTEgMTk6NDU6NDUgMTk5OCAgVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CisKKwkqIFtpbmNsdWRlL2JpdG1hcC5oXSBbb2JqZWN0cy9iaXRtYXAuY10gW29iamVjdHMvZGliLmNdIAorCSAgW29iamVjdHMvb2VtYml0bWFwLmNdCisJU3BlZWQgdXAgRElCIHNlY3Rpb24gaGFuZGxpbmcgYnkgdXNpbmcgcHJlLWFsbG9jYXRlZCBjb2xvcm1hcCBhbmQgCisJWEltYWdlLiBNb3ZlZCBESUIgc2VjdGlvbiBkYXRhIG91dCBvZiBnZW5lcmFsIEJJVE1BUE9CSiBzdHJ1Y3R1cmUuCisJQnVnZml4OiBHZXRESUJpdHMzMiB3b3VsZCBvdmVyd3JpdGUgb25lIGJ5dGUgYmV5b25kIGJpdG1hcCBkYXRhLgorCisJKiBbaWYxNjMyL3NoZWxsLnNwZWNdIFtpZjE2MzIva2VybmVsLnNwZWNdIFt3aW4zMi9rZXJuZWwzMi5jXQorCU1vcmUgdmVyYm9zZSBlcnJvciBtZXNzYWdlIGlmIFRodW5rQ29ubmVjdCBmYWlscy4KKwlJbXBsZW1lbnRlZCBLRVJORUxfNDc1LgorCisJKiBbZmlsZXMvcHJvZmlsZS5jXSBbb2xlL29sZTJubHMuY10KKwlNaW5vciBidWdmaXhlcy4KKworCSogW2lmMTYzMi9idWlsdGluLmNdIFtpZjE2MzIva2VybmVsLnNwZWNdIFtpbmNsdWRlL3Rhc2suaF0KKwkgIFtsb2FkZXIvbmUvbW9kdWxlLmNdIFtsb2FkZXIvdGFzay5jXQorCUltcGxlbWVudGVkIEtFUk5FTC5USEhPT0suCisKKwkqIFtpZjE2MzIvd3Byb2NzLnNwZWNdIFtpbmNsdWRlL3Byb2Nlc3MuaF0gW21zZG9zL2RwbWkuY10gW21zZG9zL3Z4ZC5jXQorCUltcGxlbWVudGVkIFdpbjMycyBWeEQgc2VydmljZXMgKFczMlMuMzg2KS4KKworU2F0IEp1bCAxMSAxNzo1MjoyMyAxOTk4ICBIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KKworCSogW2dyYXBoaWNzL3gxMWRydi94Zm9udC5jXSBbZ3JhcGhpY3MveDExZHJ2L3RleHQuY10gCisJICBbaW5jbHVkZS94MTFmb250LmhdCisJSW1wcm92ZSBoYW5kbGluZyBvZiByb3RhdGVkIFgxMSBmb250cy4gTWV0cmljcy9leHRlbnRzIHNob3VsZCBub3cgYmUKKwljb3JyZWN0LiBFeHRUZXh0T3V0IHNob3VsZCBiZWhhdmUgYmV0dGVyIChzdGlsbCBkb2Vzbid0IGhhbmRsZSBscER4KS4KKworCSogW2dyYXBoaWNzL3BhaW50aW5nLmNdCisJRHJhd0ZvY3VzUmVjdDMyOiBEb24ndCBkbyBhbnl0aGluZyBpZiB3aWR0aCBvciBoZWlnaHQgYXJlIHplcm8uCisKK1NhdCBKdWwgMTEgMTU6MjE6MzUgMTk5OCAgQW5kcmVhcyBNb2hyIDwxMDAuMzA5MzZAZ2VybWFueS5uZXQ+CisKKwkqIFtmaWxlcy9wcm9maWxlLmNdIFtpbmNsdWRlL3dpbmRvd3MuaF0KKwlUaGUgbGVuZ3RoIGFyZ3VtZW50cyBvZiAqUHJvZmlsZSooKSBuZWVkIHRvIGJlIHRyZWF0ZWQKKwlhcyBVSU5UeHggaW5zdGVhZCBvZiBJTlR4eC4KKworCSogW2dyYXBoaWNzL2Vudi5jXSBbZ3JhcGhpY3Mvd2luMTZkcnYvaW5pdC5jXSBbaW5jbHVkZS9wcmludC5oXQorCSAgW21pc2MvcHJpbnRkcnYuY10KKwlNYW55IHByaW50ZXIgZHJpdmVyIGZpeGVzL2NoYW5nZXMgKG1hbnkgdGhhbmtzIGdvIHRvIEh1dyAhKS4KKwlNb3N0IHByaW50ZXJzIHNob3VsZCB3b3JrIGFnYWluIDspCisKKwkqIFttZW1vcnkvYXRvbS5jXQorCUZpeGVkIEFUT01fQWRkQXRvbSB0byBzdG9yZSBhdG9tcyBleGFjdGx5IGxpa2UgV2luZG93cy4KKworCSogWyovKl0KKwlGaXhlZCBtaXNjIGNvbXBpbGVyIHdhcm5pbmdzLgorCitGcmkgSnVsIDEwIDE1OjU4OjM2IDE5OTggIE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgorCisJKiBbZmlsZXMvZHJpdmUuY10KKwlGaXhlZCBHZXREcml2ZVR5cGUxNiB0byByZXR1cm4gRFJJVkVfUkVNT1RFIGFnYWluLgorCisJKiBbbG9hZGVyL3BlX2ltYWdlLmNdW2xvYWRlci9tb2R1bGUuY10KKwlMb29rIGZvciBtb2R1bGVzIHRoYXQgaGF2ZSB0aGUgc2FtZSBtb2R1bGVuYW1lIG9yIHRoZSBzYW1lCisJZmlsZW5hbWUgKHRoZXkgc29tZXRpbWVzIGRpZmZlcikuCisJRml4ZWQgdXAgZml4dXBfaW1wb3J0cywgcmVtb3ZlZCBvbmUgb2YgdGhlIGxvb3BzLgorCisJKiBbd2luZG93cy93aW5wb3MuY10KKwlBZGRlZCBzb21lIE5VTEwgcHRyIGNoZWNrcy4gTmVlZHMgbW9yZS4KKworCSogW2dyYXBoaWNzL2RkcmF3LmNdCisJU29tZSBzdHVicyBhZGRlZC4KKworCSogW2lmMTYzMi9zbm9vcC5jXQorCVVwZGF0ZWQsIG1hZGUgV0lORUxJQiBjb21wYXRpYmxlLgorCitGcmkgSnVsIDEwIDA0OjM5OjU2IDE5OTggIERvdWdsYXMgUmlkZ3dheSAgPHJpZGd3YXlAd2luZWhxLmNvbT4KKworCSogW29iamVjdHMvZW5obWV0YWZpbGUuY10gW3JlbGF5MzIvZ2RpMzIuc3BlY10KKwlTbWFsbCB0d2Vha3MgZm9yIGRvY3VtZW50YXRpb24gc3lzdGVtLgorCitUaHUgSnVsICA5IDIyOjAwOjE4IDE5OTggIEVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CisKKwkqIFtjb250cm9scy9jb21tY3RybC5jXVtpbmNsdWRlL2NvbW1jdHJsLmhdW3JlbGF5MzIvY29tY3RsMzIuc3BlY10KKwlGaXhlZCBHZXRFZmZlY3RpdmVDbGllbnRSZWN0LCBDcmVhdGVUb29sYmFyRXggYW5kIENyZWF0ZU1hcHBlZEJpdG1hcC4KKwlBZGRlZCBzdHViIGZvciBTaG93SGlkZU1lbnVDdGwuIEFkZGVkIHNvbWUgZG9jdW1lbnRhdGlvbi4KKworCSogW2RvY3VtZW50YXRpb24vY29tbW9uX2NvbnRyb2xzXQorCUFkZGVkIGFuZCB1cGRhdGVkIHNvbWUgaW5mb3JtYXRpb24uCisKKwkqIFtjb250cm9scy90b29sYmFyLmNdW2luY2x1ZGUvdG9vbGJhci5oXQorCUFkZGVkIHN0cmluZyBzdXBwb3J0LgorCisJKiBbbWlzYy9zaGVsbC5jXVttaXNjL3NoZWxsb3JkLmNdW3JlbGF5MzIvc2hlbGwuc3BlY10KKwlDaGFuZ2VkIG5hbWVzIG9mIHVuZG9jdW1lbnRlZCBmdW5jdGlvbnMgdG8gdGhlaXIgcmVhbCBuYW1lcyBhbmQKKwlmaXhlZCB0aGUgZXhwb3J0IHRhYmxlLgorCisJKiBbY29udHJvbHMvaW1hZ2VsaXN0LmNdW3JlbGF5MzIvY29tY3RsMzIuc3BlY10KKwlBZGRlZCBzdHViIGZvciBJbWFnZUxpc3RfU2V0RmlsdGVyLgorCUZpeGVkIHNvbWUgbWlub3IgYnVncyBhbmQgdHlwb3MuCisKKwkqIFtvYmplY3RzL2ZvbnQuY11baW5jbHVkZS93aW5kb3dzLmhdW3JlbGF5MzIvZ2RpMzIuc3BlY10KKwlBZGRlZCBzdHVicyBmb3IgR2V0Q2hhcmFjdGVyUGxhY2VtZW50MzJbQS9XXS4KKworCSogW29iamVjdHMvcmVnaW9uLmNdW3JlbGF5MzIvZ2RpMzIuc3BlY10KKwlBZGRlZCBzdHViIGZvciBVTkRPQ1VNRU5URUQgR2V0UmFuZG9tUmduLgorCisJKiBbY29udHJvbHMvY29tbWN0cmwuY11bY29udHJvbHMvKi5jXVtpbmNsdWRlLyouaF0KKwlBZGRlZCBkdW1teSBsaXN0dmlldywgcGFnZXIsIHJlYmFyLCB0b29sdGlwcywgdHJhY2tiYXIgYW5kCisJdHJlZXZpZXcgY29udHJvbC4gVGhpcyBrZWVwcyBzb21lIHByb2dyYW1zIGZyb20gY29tcGxhaW5pbmcuCisKK1RodSBKdWwgIDkgMTE6MjM6NTggMTk5OCAgUmVpbiBLbGF6ZXMgPHJrbGF6ZXNAY2FzZW1hLm5ldD4KKworCSogW2dyYXBoaWNzL3BhaW50aW5nLmNdIFtncmFwaGljcy8qL2luaXQuY10KKwkgIFtncmFwaGljcy94MTFkcnYvZ3JhcGhpY3MuY10gW3JlbGF5MzIvZ2RpMzIuc3BlY10KKwkgIFtpZjE2MzIvZ2RpLnNwZWNdIFtpbmNsdWRlL2dkaS5oXSBbaW5jbHVkZS94MTFkcnYuaF0KKwlJbXBsZW1lbnRlZCBkcmF3aW5nIGJlemllciBjdXJ2ZXM6IFBvbHlCZXppZXIxNi8zMiBhbmQKKwlQb2x5QmV6aWVyVG8xNi8zMi4KKworCSogW2dyYXBoaWNzL3gxMWRydi9ncmFwaGljcy5jXQorCUltcHJvdmVkIGFjY3VyYWN5IG9mIHNldmVyYWwgZ3JhcGhpYyByb3V0aW5lcywgZXNwZWNpYWxseSB0aGUKKwlkcmF3aW5nIG9mIHBpZSdzLgorCisJKiBbaW5jbHVkZS93aW5kb3dzLmhdIFttaXNjL3NweS5jXQorCUFkZGVkIDI1IHdpbmRvdyBtZXNzYWdlcyByZWxhdGVkIHRvIHByb2dyYW1zIGJhc2VkIG9uIE1GQyBhbmQvb3IgT0xFLgorCitXZWQgSnVsICA4IDIyOjAwOjAwIDE5OTggIEphbWVzIEp1cmFuICA8anJqMTIwQHBzdS5lZHU+CisKKwkqIFtkb2N1bWVudGF0aW9uL3dpbmUubWFuXQorCVVwZGF0ZWQgbWFucGFnZS4KKworCSogW3dpbmUuaW5pXQorCUFkZGVkIHNlY3Rpb24gZm9yIFdpbjk1TG9vaz10cnVlIChjb21tZW50ZWQgb3V0IGJ5IGRlZmF1bHQpLgorCitXZWQgSnVsICA4IDA2OjIzOjE5IDE5OTggIE1hdHRoZXcgQmVja2VyIDxtYmVja2VyQGdsYXNzY2l0eS5uZXQ+CisKKwkqIFttaXNjL3JlZ2lzdHJ5LmNdCisJRml4ZWQgYSBjcmFzaCBpbiBSZWdFbnVtVmFsdWUzMkEgd2hlbiB0aGUgZHdUeXBlIHBhcmFtZXRlciBpcworCU5VTEwuCisKKwkqIFtwcm9ncmFtcy9yZWd0ZXN0L3JlZ3Rlc3QuY10KKwlJbXByb3ZlZCB0aGUgcHJpbnRpbmcgb2YgZXJyb3JzLgorCisJKiBbbWlzYy9udGRsbC5jXQorCUFkZGVkIHN0dWIgZm9yIFJ0bEZvcm1hdEN1cnJlbnRVc2VyS2V5UGF0aC4KKworCSogW3dpbjMyL2NvbnNvbGUuY10KKwlBZGRlZCBzdHViIGZvciBTY3JvbGxDb25zb2xlU2NyZWVuQnVmZmVyLgorCitNb24gSnVsICA2IDE2OjQxOjQ3IDE5OTggIFBlciBMaW5kc3Ry9m0gPHBlbGluc3RyQGFsZ29uZXQuc2U+CisKKwkqIFtpbmNsdWRlL3dpbmRvd3MuaF0gW3JlbGF5MzIva2VybmVsLnNwZWNdIFt3aW4zMi9uZXdmbnMuY10KKwlBZGRlZCBzdHVicyBmb3IgU2xlZXBFeCBhbmQgVGVybWluYXRlUHJvY2Vzcy4KKworCSogW3JjL1JFQURNRV0KKwlDb3JyZWN0ZWQgYSBncmFtbWF0aWNhbCBlcnJvci4KKworTW9uIEp1bCAgMyAxMjowMDowMCAxOTk4ICBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KKworCSogW21pc2Mvc2hlbGxvcmQuY10KKwlQdXQgc29tZSBUUkFDRSBpbi4KKworCSogW21lbW9yeS9zdHJpbmcuY10KKwlEZWxldGVkIHVudXNlZCB2YXJpYWJsZSBpbiBsc3RyY21waTMyQS4KKworCSogW2luY2x1ZGUvd2luZG93cy5oXVttZW1vcnkvc3RyaW5nLmNdCisJQWRkZWQgZnVuY3Rpb25zIFdpZGVDaGFyVG9Mb2NhbDMyIExvY2FsVG9XaWRlQ2hhcjMyIGZvcgorCU9MRS1zdHJpbmdzCisKKwkqIFtpbmNsdWRlL3NobG9iai5oXVtpbmNsdWRlL3dpbmVycm9yLmhdW21pc2Mvc2hlbGwuY10KKwkgIFtvbGUvZm9sZGVycy5jXQorCUFkZGVkIGRlZmluaXRpb24gb2YgaW50ZXJuYWwgY2xhc3MgcGlkbG1nci4KKwlDaGFuZ2VkIGRlZmluaXRpb25zIG9mIEVudW1JRExpc3QsIElTaGVsbEZvbGRlci4KKwlBZGRlZCBzb21lIE9MRSBlcnJvciBjb25zdGFudHMuCisJSW1wbGVtZW50ZWQgRW51bUlETGlzdCwgSVNoZWxsRm9sZGVyLCBJQ2xhc3NGYWN0b3J5LAorCVBpZGxNZ3IsIFNIRUxMMzJfRGxsR2V0Q2xhc3NPYmplY3QsIFNIR2V0RGVza3RvcEZvbGRlciwKKwlTSEdldFNwZWNpYWxGb2xkZXJMb2NhdGlvbiAoaGFsZiksIFNIR2V0UGF0aEZyb21JRExpc3QKKwkoISFUaGlzIHN0dWZmIGlzIG5vdCBmaW5pc2hlZCB5ZXQhISkKKworCSogW2luY2x1ZGUvd2luZG93cy5oXVttaXNjL25ldHdvcmtdW3JlbGV5MzIvbXByLnNwZWNdCisJQWRkZWQgc3R1YnMgZm9yIFdOZXRDb25uZWN0aW9uRGlhbG9nMzJbQXxXfEFQSV0uCisJQWRkZWQgc3RydWN0IExQQ09OTkVDVERMR1NUUlVDVDMyW0F8V10gYW5kIHNvbWUgY29uc3RhbnRzLgorCUFkZGVkIHNvbWUgU2V0TGFzdEVycm9yKFdOX05PX05FVFdPUkspIHRvIHRoZSBzdHVicy4KKwlGaXhlZCBidWZmZXJoYW5kbGluZyBpbiBXTmV0Q2FuY2VsQ29ubmVjdGlvbgorCUFkZGVkIHN0dWIgZm9yIE11bHRpbmV0R2V0RXJyb3JUZXh0W0F8V10KKworCSogW29sZS9vbGUybmxzLmNdCisJUmV3cm90ZSBHZXRUaW1lRm9ybWF0MzJBLgorCitGcmkgSnVsICAzIDEwOjI3OjMwIDE5OTggIE1pY2hhZWwgUG9vbGUgPHBvb2xlK0BhbmRyZXcuY211LmVkdT4KKworCSogW2dyYXBoaWNzL2RkcmF3LmNdIFt0c3gxMS9YMTFfY2FsbHNdCisJSW1wbGVtZW50IElEaXJlY3REcmF3UGFsZXR0ZV9HZXRFbnRyaWVzLgorCVVzZSBDb3B5Q29sb3JtYXBBbmRGcmVlIHRvIGF2b2lkIGVyYXNpbmcgcHJldmlvdXNseS1zZXQKKwlwYWxldHRlIGVudHJpZXMuCisKKwkqIFtncmFwaGljcy9kZHJhdy5jXSBbaW5jbHVkZS9kZHJhdy5oXQorCSAgW3Rvb2xzL21ha2VfWDExd3JhcHBlcnNdIFt0c3gxMS9YMTFfY2FsbHNdCisJUHJvdmlkZSBhIHByZWxpbWluYXJ5LCBub3QteWV0LXdvcmtpbmcgZnJhbWV3b3JrIGZvciBkb2luZworCURpcmVjdERyYXcgdmlhIFhsaWIgb3IgWFNobSBhcyB3ZWxsIGFzIERHQS4KKworVHVlIEp1biAzMCAwMDoxNjowOSAxOTk4ICBNYXJjZWwgQmF1ciA8bWJhdXJAZzI2LmV0aHouY2g+CisKKwkqIFtvbGUvbmxzLyoubmxzXQorCUFkZGVkIHJlbWFpbmluZyAyMiBsb2NhbGVzIChpbmNsdWRpbmcgYXJhYmljIGxvY2FsZXMpLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBTdW4gSnVuIDI4IDE4OjM3OjAyIDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgogCiAJKiBbaWYxNjMyL3NpZ25hbC5jXSBbbWlzY2VtdS9pbnN0ci5jXSBbbWVtb3J5L3ZpcnR1YWwuY10KQEAgLTQxMDIsNyArNDMwOCw3IEBACiAJRml4ZWQgcG9pbnRlciBjb3B5IG9mIGFyZ3Mga2V5d29yZHMgYXJyYXkuCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVR1ZSBNYXkgMjAgMTk6MjA6MjMgMTk5NyAgUGFibG8gU2FyYXR4YWdhIDxzcnR4Z0BsaW51eC5jaGFuYWUuc3RiZW4uYmU+CitUdWUgTWF5IDIwIDE5OjIwOjIzIDE5OTcgIFBhYmxvIFNhcmF0eGFnYSA8c3J0eGdAY2hhbmFlLmFscGhhbmV0LmNoPgogCiAJKiBbcmVzb3VyY2VzL3N5c3Jlc19Fcy5yY10KIAlVcGRhdGVkIENIT09TRV9GT05ULCBDSE9PU0VfQ09MT1IsIEVESVRNRU5VIGZvciBTcGFuaXNoLgpAQCAtNDU0NCw3ICs0NzUwLDcgQEAKIAkqIFtmaWxlcy8qXQogCUZpeCBmdW5jdGlvbiBuYW1lcyBpbiBlcnJvciBtZXNzYWdlcy4KIAotU2F0IEZlYiAyMiAwNjoxNToxMyAxOTk3ICBQYWJsbyBTYXJhdHhhZ2EgPHNydHhnQGNoYW5hZS5zdGJlbi5iZT4KK1NhdCBGZWIgMjIgMDY6MTU6MTMgMTk5NyAgUGFibG8gU2FyYXR4YWdhIDxzcnR4Z0BjaGFuYWUuYWxwaGFuZXQuY2g+CiAKIAkqIFt3aW5kb3dzL2tleWJvYXJkLmNdIFt3aW5kb3dzL21lc3NhZ2UuY10KIAlTdXBwb3J0IGZvciBtb3JlIGxhdGluIGFscGhhYmV0IGRlYWQga2V5cyBmb3IgaXNvLTg4NTktezEsMiwzLDQsOX0KZGlmZiAtLWdpdCBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KaW5kZXggNGY5NWRiZC4uZTc5MDA4YyAxMDA2NDQKLS0tIGEvTWFrZWZpbGUuaW4KKysrIGIvTWFrZWZpbGUuaW4KQEAgLTEzLDcgKzEzLDYgQEAKICMgTWFpbiB0YXJnZXQgdG8gYnVpbGQKIAogTUFJTl9UQVJHRVQgPSBATUFJTl9UQVJHRVRACi1MSUJfVEFSR0VUICA9IEBMSUJfVEFSR0VUQAogCiAjIERpcmVjdG9yaWVzCiAKQEAgLTQ0LDYgKzQzLDcgQEAKIAlyZWxheTMyIFwKIAlyZXNvdXJjZXMgXAogCXNjaGVkdWxlciBcCisJc2VydmVyIFwKIAl0c3gxMSBcCiAJd2luMzIgXAogCXdpbmRvd3MKQEAgLTkwLDYgKzkwLDcgQEAKIAlyZWxheTMyL3JlbGF5MzIubyBcCiAJcmVzb3VyY2VzL3Jlc291cmNlcy5vIFwKIAlzY2hlZHVsZXIvc2NoZWR1bGVyLm8gXAorCXNlcnZlci9zZXJ2ZXIubyBcCiAJdHN4MTEvdHN4MTEubyBcCiAJd2luMzIvd2luMzIubyBcCiAJd2luZG93cy93aW5kb3dzLm8KQEAgLTEwMSw2ICsxMDIsOCBAQAogCWlmMTYzMi9pZjE2MzIubyBcCiAJbWlzY2VtdS9taXNjZW11Lm8KIAorTElCX1RBUkdFVCAgPSBATElCX1RBUkdFVEAKKwogYWxsOiAkKE1BSU5fVEFSR0VUKQogCiBATUFLRV9SVUxFU0AKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQppbmRleCBiMDA4ZDRkLi5jYmRlMjU5IDEwMDc1NQotLS0gYS9jb25maWd1cmUKKysrIGIvY29uZmlndXJlCkBAIC0xNyw2ICsxNyw4IEBACiBhY19oZWxwPSIkYWNfaGVscAogICAtLWVuYWJsZS1kbGwgICAgICAgICAgICBidWlsZCB0aGUgV2luZSBsaWJyYXJ5IGFzIGEgRExMIgogYWNfaGVscD0iJGFjX2hlbHAKKyAgLS1kaXNhYmxlLWxpYiAgICAgICAgICAgYnVpbGQgdGhlIFdpbmUgd2l0aG91dCBidWlsZGluZyBsaWJ3aW5lLmEiCithY19oZWxwPSIkYWNfaGVscAogICAtLWRpc2FibGUtZGVidWcgICAgICAgICBjb21waWxlIG91dCBhbGwgZGVidWdnaW5nIG1lc3NhZ2VzIgogYWNfaGVscD0iJGFjX2hlbHAKICAgLS1kaXNhYmxlLXRyYWNlICAgICAgICAgY29tcGlsZSBvdXQgVFJBQ0UgbWVzc2FnZXMiCkBAIC01NzYsNiArNTc4LDEzIEBACiBmaQogCiAKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1saWIgb3IgLS1kaXNhYmxlLWxpYiB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9saWIrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZW5hYmxldmFsPSIkZW5hYmxlX2xpYiIKKyAgaWYgdGVzdCAiJGVuYWJsZXZhbCIgPSAibm8iOyB0aGVuIExJQl9UQVJHRVQ9IlwkTElCT0JKUyI7IGZpCitmaQorCisKIAogIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWRlYnVnIG9yIC0tZGlzYWJsZS1kZWJ1ZyB3YXMgZ2l2ZW4uCiBpZiB0ZXN0ICIke2VuYWJsZV9kZWJ1ZytzZXR9IiA9IHNldDsgdGhlbgpAQCAtNjI0LDcgKzYzMyw3IEBACiAKIAogZWNobyAkYWNfbiAiY2hlY2tpbmcgd2hldGhlciAke01BS0UtbWFrZX0gc2V0cyBcJHtNQUtFfSIiLi4uICRhY19jIiAxPiY2Ci1lY2hvICJjb25maWd1cmU6NjI4OiBjaGVja2luZyB3aGV0aGVyICR7TUFLRS1tYWtlfSBzZXRzIFwke01BS0V9IiA+JjUKK2VjaG8gImNvbmZpZ3VyZTo2Mzc6IGNoZWNraW5nIHdoZXRoZXIgJHtNQUtFLW1ha2V9IHNldHMgXCR7TUFLRX0iID4mNQogc2V0IGR1bW15ICR7TUFLRS1tYWtlfTsgYWNfbWFrZT1gZWNobyAiJDIiIHwgc2VkICd5JS4vKy0lX19wXyUnYAogaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3Byb2dfbWFrZV8ke2FjX21ha2V9X3NldCcrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCiAgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CkBAIC02NTMsNyArNjYyLDcgQEAKICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZ2NjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KIHNldCBkdW1teSBnY2M7IGFjX3dvcmQ9JDIKIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciAkYWNfd29yZCIiLi4uICRhY19jIiAxPiY2Ci1lY2hvICJjb25maWd1cmU6NjU3OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorZWNobyAiY29uZmlndXJlOjY2NjogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKIGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9wcm9nX0NDJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKIGVsc2UKQEAgLTY4Miw3ICs2OTEsNyBAQAogICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImNjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KIHNldCBkdW1teSBjYzsgYWNfd29yZD0kMgogZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yICRhY193b3JkIiIuLi4gJGFjX2MiIDE+JjYKLWVjaG8gImNvbmZpZ3VyZTo2ODY6IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitlY2hvICJjb25maWd1cmU6Njk1OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQogaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3Byb2dfQ0MnK3NldH0nYFwiID0gc2V0IjsgdGhlbgogICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgogZWxzZQpAQCAtNzMwLDcgKzczOSw3IEBACiBmaQogCiBlY2hvICRhY19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyICgkQ0MgJENGTEFHUyAkTERGTEFHUykgd29ya3MiIi4uLiAkYWNfYyIgMT4mNgotZWNobyAiY29uZmlndXJlOjczNDogY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciAoJENDICRDRkxBR1MgJExERkxBR1MpIHdvcmtzIiA+JjUKK2VjaG8gImNvbmZpZ3VyZTo3NDM6IGNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgKCRDQyAkQ0ZMQUdTICRMREZMQUdTKSB3b3JrcyIgPiY1CiAKIGFjX2V4dD1jCiAjIENGTEFHUyBpcyBub3QgaW4gYWNfY3BwIGJlY2F1c2UgLWcsIC1PLCBldGMuIGFyZSBub3QgdmFsaWQgY3BwIG9wdGlvbnMuCkBAIC03NDAsMTEgKzc0OSwxMSBAQAogY3Jvc3NfY29tcGlsaW5nPSRhY19jdl9wcm9nX2NjX2Nyb3NzCiAKIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLSNsaW5lIDc0NCAiY29uZmlndXJlIgorI2xpbmUgNzUzICJjb25maWd1cmUiCiAjaW5jbHVkZSAiY29uZmRlZnMuaCIKIG1haW4oKXtyZXR1cm4oMCk7fQogRU9GCi1pZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjc0ODogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0OyB0aGVuCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjc1NzogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0OyB0aGVuCiAgIGFjX2N2X3Byb2dfY2Nfd29ya3M9eWVzCiAgICMgSWYgd2UgY2FuJ3QgcnVuIGEgdHJpdmlhbCBwcm9ncmFtLCB3ZSBhcmUgcHJvYmFibHkgdXNpbmcgYSBjcm9zcyBjb21waWxlci4KICAgaWYgKC4vY29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsOyB0aGVuCkBAIC03NjQsMTIgKzc3MywxMiBAQAogICB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IGluc3RhbGxhdGlvbiBvciBjb25maWd1cmF0aW9uIHByb2JsZW06IEMgY29tcGlsZXIgY2Fubm90IGNyZWF0ZSBleGVjdXRhYmxlcy4iIDE+JjI7IGV4aXQgMTsgfQogZmkKIGVjaG8gJGFjX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgKCRDQyAkQ0ZMQUdTICRMREZMQUdTKSBpcyBhIGNyb3NzLWNvbXBpbGVyIiIuLi4gJGFjX2MiIDE+JjYKLWVjaG8gImNvbmZpZ3VyZTo3Njg6IGNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgKCRDQyAkQ0ZMQUdTICRMREZMQUdTKSBpcyBhIGNyb3NzLWNvbXBpbGVyIiA+JjUKK2VjaG8gImNvbmZpZ3VyZTo3Nzc6IGNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgKCRDQyAkQ0ZMQUdTICRMREZMQUdTKSBpcyBhIGNyb3NzLWNvbXBpbGVyIiA+JjUKIGVjaG8gIiRhY190IiIkYWNfY3ZfcHJvZ19jY19jcm9zcyIgMT4mNgogY3Jvc3NfY29tcGlsaW5nPSRhY19jdl9wcm9nX2NjX2Nyb3NzCiAKIGVjaG8gJGFjX24gImNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIEdOVSBDIiIuLi4gJGFjX2MiIDE+JjYKLWVjaG8gImNvbmZpZ3VyZTo3NzM6IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIEdOVSBDIiA+JjUKK2VjaG8gImNvbmZpZ3VyZTo3ODI6IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIEdOVSBDIiA+JjUKIGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9wcm9nX2djYycrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCiAgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CiBlbHNlCkBAIC03NzgsNyArNzg3LDcgQEAKICAgeWVzOwogI2VuZGlmCiBFT0YKLWlmIHsgYWNfdHJ5PScke0NDLWNjfSAtRSBjb25mdGVzdC5jJzsgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo3ODI6IFwiJGFjX3RyeVwiKSAxPiY1OyAoZXZhbCAkYWNfdHJ5KSAyPiY1OyB9OyB9IHwgZWdyZXAgeWVzID4vZGV2L251bGwgMj4mMTsgdGhlbgoraWYgeyBhY190cnk9JyR7Q0MtY2N9IC1FIGNvbmZ0ZXN0LmMnOyB7IChldmFsIGVjaG8gY29uZmlndXJlOjc5MTogXCIkYWNfdHJ5XCIpIDE+JjU7IChldmFsICRhY190cnkpIDI+JjU7IH07IH0gfCBlZ3JlcCB5ZXMgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCiAgIGFjX2N2X3Byb2dfZ2NjPXllcwogZWxzZQogICBhY19jdl9wcm9nX2djYz1ubwpAQCAtNzkzLDcgKzgwMiw3IEBACiAgIGFjX3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgogICBDRkxBR1M9CiAgIGVjaG8gJGFjX24gImNoZWNraW5nIHdoZXRoZXIgJHtDQy1jY30gYWNjZXB0cyAtZyIiLi4uICRhY19jIiAxPiY2Ci1lY2hvICJjb25maWd1cmU6Nzk3OiBjaGVja2luZyB3aGV0aGVyICR7Q0MtY2N9IGFjY2VwdHMgLWciID4mNQorZWNobyAiY29uZmlndXJlOjgwNjogY2hlY2tpbmcgd2hldGhlciAke0NDLWNjfSBhY2NlcHRzIC1nIiA+JjUKIGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9wcm9nX2NjX2cnK3NldH0nYFwiID0gc2V0IjsgdGhlbgogICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgogZWxzZQpAQCAtODIxLDcgKzgzMCw3IEBACiBmaQogCiBlY2hvICRhY19uICJjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDIHByZXByb2Nlc3NvciIiLi4uICRhY19jIiAxPiY2Ci1lY2hvICJjb25maWd1cmU6ODI1OiBjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDIHByZXByb2Nlc3NvciIgPiY1CitlY2hvICJjb25maWd1cmU6ODM0OiBjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDIHByZXByb2Nlc3NvciIgPiY1CiAjIE9uIFN1bnMsIHNvbWV0aW1lcyAkQ1BQIG5hbWVzIGEgZGlyZWN0b3J5LgogaWYgdGVzdCAtbiAiJENQUCIgJiYgdGVzdCAtZCAiJENQUCI7IHRoZW4KICAgQ1BQPQpAQCAtODM2LDEzICs4NDUsMTMgQEAKICAgIyBPbiB0aGUgTmVYVCwgY2MgLUUgcnVucyB0aGUgY29kZSB0aHJvdWdoIHRoZSBjb21waWxlcidzIHBhcnNlciwKICAgIyBub3QganVzdCB0aHJvdWdoIGNwcC4KICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgODQwICJjb25maWd1cmUiCisjbGluZSA4NDkgImNvbmZpZ3VyZSIKICNpbmNsdWRlICJjb25mZGVmcy5oIgogI2luY2x1ZGUgPGFzc2VydC5oPgogU3ludGF4IEVycm9yCiBFT0YKIGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0ID4vZGV2L251bGwgMj5jb25mdGVzdC5vdXQiCi17IChldmFsIGVjaG8gY29uZmlndXJlOjg0NjogXCIkYWNfdHJ5XCIpIDE+JjU7IChldmFsICRhY190cnkpIDI+JjU7IH0KK3sgKGV2YWwgZWNobyBjb25maWd1cmU6ODU1OiBcIiRhY190cnlcIikgMT4mNTsgKGV2YWwgJGFjX3RyeSkgMj4mNTsgfQogYWNfZXJyPWBncmVwIC12ICdeICorJyBjb25mdGVzdC5vdXRgCiBpZiB0ZXN0IC16ICIkYWNfZXJyIjsgdGhlbgogICA6CkBAIC04NTMsMTMgKzg2MiwxMyBAQAogICBybSAtcmYgY29uZnRlc3QqCiAgIENQUD0iJHtDQy1jY30gLUUgLXRyYWRpdGlvbmFsLWNwcCIKICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgODU3ICJjb25maWd1cmUiCisjbGluZSA4NjYgImNvbmZpZ3VyZSIKICNpbmNsdWRlICJjb25mZGVmcy5oIgogI2luY2x1ZGUgPGFzc2VydC5oPgogU3ludGF4IEVycm9yCiBFT0YKIGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0ID4vZGV2L251bGwgMj5jb25mdGVzdC5vdXQiCi17IChldmFsIGVjaG8gY29uZmlndXJlOjg2MzogXCIkYWNfdHJ5XCIpIDE+JjU7IChldmFsICRhY190cnkpIDI+JjU7IH0KK3sgKGV2YWwgZWNobyBjb25maWd1cmU6ODcyOiBcIiRhY190cnlcIikgMT4mNTsgKGV2YWwgJGFjX3RyeSkgMj4mNTsgfQogYWNfZXJyPWBncmVwIC12ICdeICorJyBjb25mdGVzdC5vdXRgCiBpZiB0ZXN0IC16ICIkYWNfZXJyIjsgdGhlbgogICA6CkBAIC04ODYsNyArODk1LDcgQEAKICMgVXNlcyBhY18gdmFycyBhcyB0ZW1wcyB0byBhbGxvdyBjb21tYW5kIGxpbmUgdG8gb3ZlcnJpZGUgY2FjaGUgYW5kIGNoZWNrcy4KICMgLS13aXRob3V0LXggb3ZlcnJpZGVzIGV2ZXJ5dGhpbmcgZWxzZSwgYnV0IGRvZXMgbm90IHRvdWNoIHRoZSBjYWNoZS4KIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciBYIiIuLi4gJGFjX2MiIDE+JjYKLWVjaG8gImNvbmZpZ3VyZTo4OTA6IGNoZWNraW5nIGZvciBYIiA+JjUKK2VjaG8gImNvbmZpZ3VyZTo4OTk6IGNoZWNraW5nIGZvciBYIiA+JjUKIAogIyBDaGVjayB3aGV0aGVyIC0td2l0aC14IG9yIC0td2l0aG91dC14IHdhcyBnaXZlbi4KIGlmIHRlc3QgIiR7d2l0aF94K3NldH0iID0gc2V0OyB0aGVuCkBAIC05NDgsMTIgKzk1NywxMiBAQAogCiAgICMgRmlyc3QsIHRyeSB1c2luZyB0aGF0IGZpbGUgd2l0aCBubyBzcGVjaWFsIGRpcmVjdG9yeSBzcGVjaWZpZWQuCiBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi0jbGluZSA5NTIgImNvbmZpZ3VyZSIKKyNsaW5lIDk2MSAiY29uZmlndXJlIgogI2luY2x1ZGUgImNvbmZkZWZzLmgiCiAjaW5jbHVkZSA8JHhfZGlyZWN0X3Rlc3RfaW5jbHVkZT4KIEVPRgogYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQgPi9kZXYvbnVsbCAyPmNvbmZ0ZXN0Lm91dCIKLXsgKGV2YWwgZWNobyBjb25maWd1cmU6OTU3OiBcIiRhY190cnlcIikgMT4mNTsgKGV2YWwgJGFjX3RyeSkgMj4mNTsgfQoreyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo5NjY6IFwiJGFjX3RyeVwiKSAxPiY1OyAoZXZhbCAkYWNfdHJ5KSAyPiY1OyB9CiBhY19lcnI9YGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0Lm91dGAKIGlmIHRlc3QgLXogIiRhY19lcnIiOyB0aGVuCiAgIHJtIC1yZiBjb25mdGVzdCoKQEAgLTEwMjIsMTQgKzEwMzEsMTQgQEAKICAgYWNfc2F2ZV9MSUJTPSIkTElCUyIKICAgTElCUz0iLWwkeF9kaXJlY3RfdGVzdF9saWJyYXJ5ICRMSUJTIgogY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgMTAyNiAiY29uZmlndXJlIgorI2xpbmUgMTAzNSAiY29uZmlndXJlIgogI2luY2x1ZGUgImNvbmZkZWZzLmgiCiAKIGludCBtYWluKCkgewogJHt4X2RpcmVjdF90ZXN0X2Z1bmN0aW9ufSgpCiA7IHJldHVybiAwOyB9CiBFT0YKLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MTAzMzogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0OyB0aGVuCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjEwNDI6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdDsgdGhlbgogICBybSAtcmYgY29uZnRlc3QqCiAgIExJQlM9IiRhY19zYXZlX0xJQlMiCiAjIFdlIGNhbiBsaW5rIFggcHJvZ3JhbXMgd2l0aCBubyBzcGVjaWFsIGxpYnJhcnkgcGF0aC4KQEAgLTExMzUsMTcgKzExNDQsMTcgQEAKICAgICBjYXNlICJgKHVuYW1lIC1zcikgMj4vZGV2L251bGxgIiBpbgogICAgICJTdW5PUyA1IiopCiAgICAgICBlY2hvICRhY19uICJjaGVja2luZyB3aGV0aGVyIC1SIG11c3QgYmUgZm9sbG93ZWQgYnkgYSBzcGFjZSIiLi4uICRhY19jIiAxPiY2Ci1lY2hvICJjb25maWd1cmU6MTEzOTogY2hlY2tpbmcgd2hldGhlciAtUiBtdXN0IGJlIGZvbGxvd2VkIGJ5IGEgc3BhY2UiID4mNQorZWNobyAiY29uZmlndXJlOjExNDg6IGNoZWNraW5nIHdoZXRoZXIgLVIgbXVzdCBiZSBmb2xsb3dlZCBieSBhIHNwYWNlIiA+JjUKICAgICAgIGFjX3hzYXZlX0xJQlM9IiRMSUJTIjsgTElCUz0iJExJQlMgLVIkeF9saWJyYXJpZXMiCiAgICAgICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi0jbGluZSAxMTQyICJjb25maWd1cmUiCisjbGluZSAxMTUxICJjb25maWd1cmUiCiAjaW5jbHVkZSAiY29uZmRlZnMuaCIKIAogaW50IG1haW4oKSB7CiAKIDsgcmV0dXJuIDA7IH0KIEVPRgotaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToxMTQ5OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Q7IHRoZW4KK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MTE1ODogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0OyB0aGVuCiAgIHJtIC1yZiBjb25mdGVzdCoKICAgYWNfUl9ub3NwYWNlPXllcwogZWxzZQpAQCAtMTE2MSwxNCArMTE3MCwxNCBAQAogICAgICAgZWxzZQogCUxJQlM9IiRhY194c2F2ZV9MSUJTIC1SICR4X2xpYnJhcmllcyIKIAljYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi0jbGluZSAxMTY1ICJjb25maWd1cmUiCisjbGluZSAxMTc0ICJjb25maWd1cmUiCiAjaW5jbHVkZSAiY29uZmRlZnMuaCIKIAogaW50IG1haW4oKSB7CiAKIDsgcmV0dXJuIDA7IH0KIEVPRgotaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToxMTcyOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Q7IHRoZW4KK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MTE4MTogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0OyB0aGVuCiAgIHJtIC1yZiBjb25mdGVzdCoKICAgYWNfUl9zcGFjZT15ZXMKIGVsc2UKQEAgLTEyMDAsNyArMTIwOSw3IEBACiAgICAgIyBsaWJyYXJpZXMgd2VyZSBidWlsdCB3aXRoIERFQ25ldCBzdXBwb3J0LiAgQW5kIGthcmxAY3MudW1iLmVkdSBzYXlzCiAgICAgIyB0aGUgQWxwaGEgbmVlZHMgZG5ldF9zdHViIChkbmV0IGRvZXMgbm90IGV4aXN0KS4KICAgICBlY2hvICRhY19uICJjaGVja2luZyBmb3IgZG5ldF9udG9hIGluIC1sZG5ldCIiLi4uICRhY19jIiAxPiY2Ci1lY2hvICJjb25maWd1cmU6MTIwNDogY2hlY2tpbmcgZm9yIGRuZXRfbnRvYSBpbiAtbGRuZXQiID4mNQorZWNobyAiY29uZmlndXJlOjEyMTM6IGNoZWNraW5nIGZvciBkbmV0X250b2EgaW4gLWxkbmV0IiA+JjUKIGFjX2xpYl92YXI9YGVjaG8gZG5ldCdfJ2RuZXRfbnRvYSB8IHNlZCAneSUuLystJV9fcF8lJ2AKIGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9saWJfJGFjX2xpYl92YXInK3NldH0nYFwiID0gc2V0IjsgdGhlbgogICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgpAQCAtMTIwOCw3ICsxMjE3LDcgQEAKICAgYWNfc2F2ZV9MSUJTPSIkTElCUyIKIExJQlM9Ii1sZG5ldCAgJExJQlMiCiBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi0jbGluZSAxMjEyICJjb25maWd1cmUiCisjbGluZSAxMjIxICJjb25maWd1cmUiCiAjaW5jbHVkZSAiY29uZmRlZnMuaCIKIC8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCiAvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCkBAIC0xMjE5LDcgKzEyMjgsNyBAQAogZG5ldF9udG9hKCkKIDsgcmV0dXJuIDA7IH0KIEVPRgotaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToxMjIzOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Q7IHRoZW4KK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MTIzMjogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0OyB0aGVuCiAgIHJtIC1yZiBjb25mdGVzdCoKICAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPXllcyIKIGVsc2UKQEAgLTEyNDEsNyArMTI1MCw3IEBACiAKICAgICBpZiB0ZXN0ICRhY19jdl9saWJfZG5ldF9kbmV0X250b2EgPSBubzsgdGhlbgogICAgICAgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIGRuZXRfbnRvYSBpbiAtbGRuZXRfc3R1YiIiLi4uICRhY19jIiAxPiY2Ci1lY2hvICJjb25maWd1cmU6MTI0NTogY2hlY2tpbmcgZm9yIGRuZXRfbnRvYSBpbiAtbGRuZXRfc3R1YiIgPiY1CitlY2hvICJjb25maWd1cmU6MTI1NDogY2hlY2tpbmcgZm9yIGRuZXRfbnRvYSBpbiAtbGRuZXRfc3R1YiIgPiY1CiBhY19saWJfdmFyPWBlY2hvIGRuZXRfc3R1YidfJ2RuZXRfbnRvYSB8IHNlZCAneSUuLystJV9fcF8lJ2AKIGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9saWJfJGFjX2xpYl92YXInK3NldH0nYFwiID0gc2V0IjsgdGhlbgogICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgpAQCAtMTI0OSw3ICsxMjU4LDcgQEAKICAgYWNfc2F2ZV9MSUJTPSIkTElCUyIKIExJQlM9Ii1sZG5ldF9zdHViICAkTElCUyIKIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLSNsaW5lIDEyNTMgImNvbmZpZ3VyZSIKKyNsaW5lIDEyNjIgImNvbmZpZ3VyZSIKICNpbmNsdWRlICJjb25mZGVmcy5oIgogLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KIC8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKQEAgLTEyNjAsNyArMTI2OSw3IEBACiBkbmV0X250b2EoKQogOyByZXR1cm4gMDsgfQogRU9GCi1pZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjEyNjQ6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdDsgdGhlbgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToxMjczOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Q7IHRoZW4KICAgcm0gLXJmIGNvbmZ0ZXN0KgogICBldmFsICJhY19jdl9saWJfJGFjX2xpYl92YXI9eWVzIgogZWxzZQpAQCAtMTI4OSwxMiArMTI5OCwxMiBAQAogICAgICMgVGhlIG5zbCBsaWJyYXJ5IHByZXZlbnRzIHByb2dyYW1zIGZyb20gb3BlbmluZyB0aGUgWCBkaXNwbGF5CiAgICAgIyBvbiBJcml4IDUuMiwgYWNjb3JkaW5nIHRvIGRpY2tleUBjbGFyay5uZXQuCiAgICAgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIGdldGhvc3RieW5hbWUiIi4uLiAkYWNfYyIgMT4mNgotZWNobyAiY29uZmlndXJlOjEyOTM6IGNoZWNraW5nIGZvciBnZXRob3N0YnluYW1lIiA+JjUKK2VjaG8gImNvbmZpZ3VyZToxMzAyOiBjaGVja2luZyBmb3IgZ2V0aG9zdGJ5bmFtZSIgPiY1CiBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfZnVuY19nZXRob3N0YnluYW1lJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKIGVsc2UKICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgMTI5OCAiY29uZmlndXJlIgorI2xpbmUgMTMwNyAiY29uZmlndXJlIgogI2luY2x1ZGUgImNvbmZkZWZzLmgiCiAvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCiAgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciBnZXRob3N0YnluYW1lKCk7IGJlbG93LiAgKi8KQEAgLTEzMTcsNyArMTMyNiw3IEBACiAKIDsgcmV0dXJuIDA7IH0KIEVPRgotaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToxMzIxOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Q7IHRoZW4KK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MTMzMDogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0OyB0aGVuCiAgIHJtIC1yZiBjb25mdGVzdCoKICAgZXZhbCAiYWNfY3ZfZnVuY19nZXRob3N0YnluYW1lPXllcyIKIGVsc2UKQEAgLTEzMzgsNyArMTM0Nyw3IEBACiAKICAgICBpZiB0ZXN0ICRhY19jdl9mdW5jX2dldGhvc3RieW5hbWUgPSBubzsgdGhlbgogICAgICAgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIGdldGhvc3RieW5hbWUgaW4gLWxuc2wiIi4uLiAkYWNfYyIgMT4mNgotZWNobyAiY29uZmlndXJlOjEzNDI6IGNoZWNraW5nIGZvciBnZXRob3N0YnluYW1lIGluIC1sbnNsIiA+JjUKK2VjaG8gImNvbmZpZ3VyZToxMzUxOiBjaGVja2luZyBmb3IgZ2V0aG9zdGJ5bmFtZSBpbiAtbG5zbCIgPiY1CiBhY19saWJfdmFyPWBlY2hvIG5zbCdfJ2dldGhvc3RieW5hbWUgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCiBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfbGliXyRhY19saWJfdmFyJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKQEAgLTEzNDYsNyArMTM1NSw3IEBACiAgIGFjX3NhdmVfTElCUz0iJExJQlMiCiBMSUJTPSItbG5zbCAgJExJQlMiCiBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi0jbGluZSAxMzUwICJjb25maWd1cmUiCisjbGluZSAxMzU5ICJjb25maWd1cmUiCiAjaW5jbHVkZSAiY29uZmRlZnMuaCIKIC8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCiAvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCkBAIC0xMzU3LDcgKzEzNjYsNyBAQAogZ2V0aG9zdGJ5bmFtZSgpCiA7IHJldHVybiAwOyB9CiBFT0YKLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MTM2MTogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0OyB0aGVuCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjEzNzA6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdDsgdGhlbgogICBybSAtcmYgY29uZnRlc3QqCiAgIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj15ZXMiCiBlbHNlCkBAIC0xMzg3LDEyICsxMzk2LDEyIEBACiAgICAgIyAtbHNvY2tldCBtdXN0IGJlIGdpdmVuIGJlZm9yZSAtbG5zbCBpZiBib3RoIGFyZSBuZWVkZWQuCiAgICAgIyBXZSBhc3N1bWUgdGhhdCBpZiBjb25uZWN0IG5lZWRzIC1sbnNsLCBzbyBkb2VzIGdldGhvc3RieW5hbWUuCiAgICAgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIGNvbm5lY3QiIi4uLiAkYWNfYyIgMT4mNgotZWNobyAiY29uZmlndXJlOjEzOTE6IGNoZWNraW5nIGZvciBjb25uZWN0IiA+JjUKK2VjaG8gImNvbmZpZ3VyZToxNDAwOiBjaGVja2luZyBmb3IgY29ubmVjdCIgPiY1CiBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfZnVuY19jb25uZWN0JytzZXR9J2BcIiA9IHNldCI7IHRoZW4KICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKIGVsc2UKICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgMTM5NiAiY29uZmlndXJlIgorI2xpbmUgMTQwNSAiY29uZmlndXJlIgogI2luY2x1ZGUgImNvbmZkZWZzLmgiCiAvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCiAgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciBjb25uZWN0KCk7IGJlbG93LiAgKi8KQEAgLTE0MTUsNyArMTQyNCw3IEBACiAKIDsgcmV0dXJuIDA7IH0KIEVPRgotaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToxNDE5OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Q7IHRoZW4KK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MTQyODogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0OyB0aGVuCiAgIHJtIC1yZiBjb25mdGVzdCoKICAgZXZhbCAiYWNfY3ZfZnVuY19jb25uZWN0PXllcyIKIGVsc2UKQEAgLTE0MzYsNyArMTQ0NSw3IEBACiAKICAgICBpZiB0ZXN0ICRhY19jdl9mdW5jX2Nvbm5lY3QgPSBubzsgdGhlbgogICAgICAgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIGNvbm5lY3QgaW4gLWxzb2NrZXQiIi4uLiAkYWNfYyIgMT4mNgotZWNobyAiY29uZmlndXJlOjE0NDA6IGNoZWNraW5nIGZvciBjb25uZWN0IGluIC1sc29ja2V0IiA+JjUKK2VjaG8gImNvbmZpZ3VyZToxNDQ5OiBjaGVja2luZyBmb3IgY29ubmVjdCBpbiAtbHNvY2tldCIgPiY1CiBhY19saWJfdmFyPWBlY2hvIHNvY2tldCdfJ2Nvbm5lY3QgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCiBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfbGliXyRhY19saWJfdmFyJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKQEAgLTE0NDQsNyArMTQ1Myw3IEBACiAgIGFjX3NhdmVfTElCUz0iJExJQlMiCiBMSUJTPSItbHNvY2tldCAkWF9FWFRSQV9MSUJTICRMSUJTIgogY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgMTQ0OCAiY29uZmlndXJlIgorI2xpbmUgMTQ1NyAiY29uZmlndXJlIgogI2luY2x1ZGUgImNvbmZkZWZzLmgiCiAvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwogLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgpAQCAtMTQ1NSw3ICsxNDY0LDcgQEAKIGNvbm5lY3QoKQogOyByZXR1cm4gMDsgfQogRU9GCi1pZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjE0NTk6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdDsgdGhlbgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToxNDY4OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Q7IHRoZW4KICAgcm0gLXJmIGNvbmZ0ZXN0KgogICBldmFsICJhY19jdl9saWJfJGFjX2xpYl92YXI9eWVzIgogZWxzZQpAQCAtMTQ3OSwxMiArMTQ4OCwxMiBAQAogCiAgICAgIyBnb21lekBtaS51bmktZXJsYW5nZW4uZGUgc2F5cyAtbHBvc2l4IGlzIG5lY2Vzc2FyeSBvbiBBL1VYLgogICAgIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciByZW1vdmUiIi4uLiAkYWNfYyIgMT4mNgotZWNobyAiY29uZmlndXJlOjE0ODM6IGNoZWNraW5nIGZvciByZW1vdmUiID4mNQorZWNobyAiY29uZmlndXJlOjE0OTI6IGNoZWNraW5nIGZvciByZW1vdmUiID4mNQogaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2Z1bmNfcmVtb3ZlJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKIGVsc2UKICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgMTQ4OCAiY29uZmlndXJlIgorI2xpbmUgMTQ5NyAiY29uZmlndXJlIgogI2luY2x1ZGUgImNvbmZkZWZzLmgiCiAvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCiAgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciByZW1vdmUoKTsgYmVsb3cuICAqLwpAQCAtMTUwNyw3ICsxNTE2LDcgQEAKIAogOyByZXR1cm4gMDsgfQogRU9GCi1pZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjE1MTE6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdDsgdGhlbgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToxNTIwOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Q7IHRoZW4KICAgcm0gLXJmIGNvbmZ0ZXN0KgogICBldmFsICJhY19jdl9mdW5jX3JlbW92ZT15ZXMiCiBlbHNlCkBAIC0xNTI4LDcgKzE1MzcsNyBAQAogCiAgICAgaWYgdGVzdCAkYWNfY3ZfZnVuY19yZW1vdmUgPSBubzsgdGhlbgogICAgICAgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIHJlbW92ZSBpbiAtbHBvc2l4IiIuLi4gJGFjX2MiIDE+JjYKLWVjaG8gImNvbmZpZ3VyZToxNTMyOiBjaGVja2luZyBmb3IgcmVtb3ZlIGluIC1scG9zaXgiID4mNQorZWNobyAiY29uZmlndXJlOjE1NDE6IGNoZWNraW5nIGZvciByZW1vdmUgaW4gLWxwb3NpeCIgPiY1CiBhY19saWJfdmFyPWBlY2hvIHBvc2l4J18ncmVtb3ZlIHwgc2VkICd5JS4vKy0lX19wXyUnYAogaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2xpYl8kYWNfbGliX3Zhcicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCiAgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CkBAIC0xNTM2LDcgKzE1NDUsNyBAQAogICBhY19zYXZlX0xJQlM9IiRMSUJTIgogTElCUz0iLWxwb3NpeCAgJExJQlMiCiBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi0jbGluZSAxNTQwICJjb25maWd1cmUiCisjbGluZSAxNTQ5ICJjb25maWd1cmUiCiAjaW5jbHVkZSAiY29uZmRlZnMuaCIKIC8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCiAvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCkBAIC0xNTQ3LDcgKzE1NTYsNyBAQAogcmVtb3ZlKCkKIDsgcmV0dXJuIDA7IH0KIEVPRgotaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToxNTUxOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Q7IHRoZW4KK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MTU2MDogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0OyB0aGVuCiAgIHJtIC1yZiBjb25mdGVzdCoKICAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPXllcyIKIGVsc2UKQEAgLTE1NzEsMTIgKzE1ODAsMTIgQEAKIAogICAgICMgQlNESSBCU0QvT1MgMi4xIG5lZWRzIC1saXBjIGZvciBYT3BlbkRpc3BsYXkuCiAgICAgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIHNobWF0IiIuLi4gJGFjX2MiIDE+JjYKLWVjaG8gImNvbmZpZ3VyZToxNTc1OiBjaGVja2luZyBmb3Igc2htYXQiID4mNQorZWNobyAiY29uZmlndXJlOjE1ODQ6IGNoZWNraW5nIGZvciBzaG1hdCIgPiY1CiBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfZnVuY19zaG1hdCcrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCiAgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CiBlbHNlCiAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLSNsaW5lIDE1ODAgImNvbmZpZ3VyZSIKKyNsaW5lIDE1ODkgImNvbmZpZ3VyZSIKICNpbmNsdWRlICJjb25mZGVmcy5oIgogLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAogICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgc2htYXQoKTsgYmVsb3cuICAqLwpAQCAtMTU5OSw3ICsxNjA4LDcgQEAKIAogOyByZXR1cm4gMDsgfQogRU9GCi1pZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjE2MDM6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdDsgdGhlbgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToxNjEyOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Q7IHRoZW4KICAgcm0gLXJmIGNvbmZ0ZXN0KgogICBldmFsICJhY19jdl9mdW5jX3NobWF0PXllcyIKIGVsc2UKQEAgLTE2MjAsNyArMTYyOSw3IEBACiAKICAgICBpZiB0ZXN0ICRhY19jdl9mdW5jX3NobWF0ID0gbm87IHRoZW4KICAgICAgIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciBzaG1hdCBpbiAtbGlwYyIiLi4uICRhY19jIiAxPiY2Ci1lY2hvICJjb25maWd1cmU6MTYyNDogY2hlY2tpbmcgZm9yIHNobWF0IGluIC1saXBjIiA+JjUKK2VjaG8gImNvbmZpZ3VyZToxNjMzOiBjaGVja2luZyBmb3Igc2htYXQgaW4gLWxpcGMiID4mNQogYWNfbGliX3Zhcj1gZWNobyBpcGMnXydzaG1hdCB8IHNlZCAneSUuLystJV9fcF8lJ2AKIGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9saWJfJGFjX2xpYl92YXInK3NldH0nYFwiID0gc2V0IjsgdGhlbgogICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgpAQCAtMTYyOCw3ICsxNjM3LDcgQEAKICAgYWNfc2F2ZV9MSUJTPSIkTElCUyIKIExJQlM9Ii1saXBjICAkTElCUyIKIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLSNsaW5lIDE2MzIgImNvbmZpZ3VyZSIKKyNsaW5lIDE2NDEgImNvbmZpZ3VyZSIKICNpbmNsdWRlICJjb25mZGVmcy5oIgogLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KIC8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKQEAgLTE2MzksNyArMTY0OCw3IEBACiBzaG1hdCgpCiA7IHJldHVybiAwOyB9CiBFT0YKLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MTY0MzogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0OyB0aGVuCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjE2NTI6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdDsgdGhlbgogICBybSAtcmYgY29uZnRlc3QqCiAgIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj15ZXMiCiBlbHNlCkBAIC0xNjcyLDcgKzE2ODEsNyBAQAogICAjIGxpYnJhcmllcyB3ZSBjaGVjayBmb3IgYmVsb3csIHNvIHVzZSBhIGRpZmZlcmVudCB2YXJpYWJsZS4KICAgIyAgLS1pbnRlcnJhbkB1bHVydS5TdGFuZm9yZC5FRFUsIGtiQGNzLnVtYi5lZHUuCiAgIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciBJY2VDb25uZWN0aW9uTnVtYmVyIGluIC1sSUNFIiIuLi4gJGFjX2MiIDE+JjYKLWVjaG8gImNvbmZpZ3VyZToxNjc2OiBjaGVja2luZyBmb3IgSWNlQ29ubmVjdGlvbk51bWJlciBpbiAtbElDRSIgPiY1CitlY2hvICJjb25maWd1cmU6MTY4NTogY2hlY2tpbmcgZm9yIEljZUNvbm5lY3Rpb25OdW1iZXIgaW4gLWxJQ0UiID4mNQogYWNfbGliX3Zhcj1gZWNobyBJQ0UnXydJY2VDb25uZWN0aW9uTnVtYmVyIHwgc2VkICd5JS4vKy0lX19wXyUnYAogaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2xpYl8kYWNfbGliX3Zhcicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCiAgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CkBAIC0xNjgwLDcgKzE2ODksNyBAQAogICBhY19zYXZlX0xJQlM9IiRMSUJTIgogTElCUz0iLWxJQ0UgICRMSUJTIgogY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgMTY4NCAiY29uZmlndXJlIgorI2xpbmUgMTY5MyAiY29uZmlndXJlIgogI2luY2x1ZGUgImNvbmZkZWZzLmgiCiAvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwogLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgpAQCAtMTY5MSw3ICsxNzAwLDcgQEAKIEljZUNvbm5lY3Rpb25OdW1iZXIoKQogOyByZXR1cm4gMDsgfQogRU9GCi1pZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjE2OTU6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdDsgdGhlbgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToxNzA0OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Q7IHRoZW4KICAgcm0gLXJmIGNvbmZ0ZXN0KgogICBldmFsICJhY19jdl9saWJfJGFjX2xpYl92YXI9eWVzIgogZWxzZQpAQCAtMTcyMCw3ICsxNzI5LDcgQEAKICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgogc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCiBlY2hvICRhY19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQiIi4uLiAkYWNfYyIgMT4mNgotZWNobyAiY29uZmlndXJlOjE3MjQ6IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitlY2hvICJjb25maWd1cmU6MTczMzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKIGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9wcm9nX1lBQ0MnK3NldH0nYFwiID0gc2V0IjsgdGhlbgogICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgogZWxzZQpAQCAtMTc1Miw3ICsxNzYxLDcgQEAKICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZmxleCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCiBzZXQgZHVtbXkgZmxleDsgYWNfd29yZD0kMgogZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yICRhY193b3JkIiIuLi4gJGFjX2MiIDE+JjYKLWVjaG8gImNvbmZpZ3VyZToxNzU2OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorZWNobyAiY29uZmlndXJlOjE3NjU6IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfcHJvZ19MRVgnK3NldH0nYFwiID0gc2V0IjsgdGhlbgogICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgogZWxzZQpAQCAtMTc4NSw3ICsxNzk0LDcgQEAKICAgKikgYWNfbGliPWwgOzsKICAgZXNhYwogICBlY2hvICRhY19uICJjaGVja2luZyBmb3IgeXl3cmFwIGluIC1sJGFjX2xpYiIiLi4uICRhY19jIiAxPiY2Ci1lY2hvICJjb25maWd1cmU6MTc4OTogY2hlY2tpbmcgZm9yIHl5d3JhcCBpbiAtbCRhY19saWIiID4mNQorZWNobyAiY29uZmlndXJlOjE3OTg6IGNoZWNraW5nIGZvciB5eXdyYXAgaW4gLWwkYWNfbGliIiA+JjUKIGFjX2xpYl92YXI9YGVjaG8gJGFjX2xpYidfJ3l5d3JhcCB8IHNlZCAneSUuLystJV9fcF8lJ2AKIGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9saWJfJGFjX2xpYl92YXInK3NldH0nYFwiID0gc2V0IjsgdGhlbgogICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgpAQCAtMTc5Myw3ICsxODAyLDcgQEAKICAgYWNfc2F2ZV9MSUJTPSIkTElCUyIKIExJQlM9Ii1sJGFjX2xpYiAgJExJQlMiCiBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi0jbGluZSAxNzk3ICJjb25maWd1cmUiCisjbGluZSAxODA2ICJjb25maWd1cmUiCiAjaW5jbHVkZSAiY29uZmRlZnMuaCIKIC8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCiAvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCkBAIC0xODA0LDcgKzE4MTMsNyBAQAogeXl3cmFwKCkKIDsgcmV0dXJuIDA7IH0KIEVPRgotaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToxODA4OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Q7IHRoZW4KK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MTgxNzogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0OyB0aGVuCiAgIHJtIC1yZiBjb25mdGVzdCoKICAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPXllcyIKIGVsc2UKQEAgLTE4MjksNyArMTgzOCw3IEBACiAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInJhbmxpYiIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCiBzZXQgZHVtbXkgcmFubGliOyBhY193b3JkPSQyCiBlY2hvICRhY19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQiIi4uLiAkYWNfYyIgMT4mNgotZWNobyAiY29uZmlndXJlOjE4MzM6IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitlY2hvICJjb25maWd1cmU6MTg0MjogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKIGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9wcm9nX1JBTkxJQicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCiAgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CiBlbHNlCkBAIC0xODY2LDcgKzE4NzUsNyBAQAogIyBTVlI0IC91c3IvdWNiL2luc3RhbGwsIHdoaWNoIHRyaWVzIHRvIHVzZSB0aGUgbm9uZXhpc3RlbnQgZ3JvdXAgInN0YWZmIgogIyAuL2luc3RhbGwsIHdoaWNoIGNhbiBiZSBlcnJvbmVvdXNseSBjcmVhdGVkIGJ5IG1ha2UgZnJvbSAuL2luc3RhbGwuc2guCiBlY2hvICRhY19uICJjaGVja2luZyBmb3IgYSBCU0QgY29tcGF0aWJsZSBpbnN0YWxsIiIuLi4gJGFjX2MiIDE+JjYKLWVjaG8gImNvbmZpZ3VyZToxODcwOiBjaGVja2luZyBmb3IgYSBCU0QgY29tcGF0aWJsZSBpbnN0YWxsIiA+JjUKK2VjaG8gImNvbmZpZ3VyZToxODc5OiBjaGVja2luZyBmb3IgYSBCU0QgY29tcGF0aWJsZSBpbnN0YWxsIiA+JjUKIGlmIHRlc3QgLXogIiRJTlNUQUxMIjsgdGhlbgogaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3BhdGhfaW5zdGFsbCcrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCiAgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CkBAIC0xOTE2LDcgKzE5MjUsNyBAQAogdGVzdCAteiAiJElOU1RBTExfREFUQSIgJiYgSU5TVEFMTF9EQVRBPScke0lOU1RBTEx9IC1tIDY0NCcKIAogZWNobyAkYWNfbiAiY2hlY2tpbmcgd2hldGhlciBsbiAtcyB3b3JrcyIiLi4uICRhY19jIiAxPiY2Ci1lY2hvICJjb25maWd1cmU6MTkyMDogY2hlY2tpbmcgd2hldGhlciBsbiAtcyB3b3JrcyIgPiY1CitlY2hvICJjb25maWd1cmU6MTkyOTogY2hlY2tpbmcgd2hldGhlciBsbiAtcyB3b3JrcyIgPiY1CiBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfcHJvZ19MTl9TJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKIGVsc2UKQEAgLTE5MzksNyArMTk0OCw3IEBACiAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImMybWFuIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KIHNldCBkdW1teSBjMm1hbjsgYWNfd29yZD0kMgogZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yICRhY193b3JkIiIuLi4gJGFjX2MiIDE+JjYKLWVjaG8gImNvbmZpZ3VyZToxOTQzOiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorZWNobyAiY29uZmlndXJlOjE5NTI6IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfcHJvZ19DMk1BTicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCiAgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CiBlbHNlCkBAIC0xOTY4LDcgKzE5NzcsNyBAQAogCiAKIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciBpMzg2X3NldF9sZHQgaW4gLWxpMzg2IiIuLi4gJGFjX2MiIDE+JjYKLWVjaG8gImNvbmZpZ3VyZToxOTcyOiBjaGVja2luZyBmb3IgaTM4Nl9zZXRfbGR0IGluIC1saTM4NiIgPiY1CitlY2hvICJjb25maWd1cmU6MTk4MTogY2hlY2tpbmcgZm9yIGkzODZfc2V0X2xkdCBpbiAtbGkzODYiID4mNQogYWNfbGliX3Zhcj1gZWNobyBpMzg2J18naTM4Nl9zZXRfbGR0IHwgc2VkICd5JS4vKy0lX19wXyUnYAogaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2xpYl8kYWNfbGliX3Zhcicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCiAgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CkBAIC0xOTc2LDcgKzE5ODUsNyBAQAogICBhY19zYXZlX0xJQlM9IiRMSUJTIgogTElCUz0iLWxpMzg2ICAkTElCUyIKIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLSNsaW5lIDE5ODAgImNvbmZpZ3VyZSIKKyNsaW5lIDE5ODkgImNvbmZpZ3VyZSIKICNpbmNsdWRlICJjb25mZGVmcy5oIgogLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KIC8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKQEAgLTE5ODcsNyArMTk5Niw3IEBACiBpMzg2X3NldF9sZHQoKQogOyByZXR1cm4gMDsgfQogRU9GCi1pZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjE5OTE6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdDsgdGhlbgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToyMDAwOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Q7IHRoZW4KICAgcm0gLXJmIGNvbmZ0ZXN0KgogICBldmFsICJhY19jdl9saWJfJGFjX2xpYl92YXI9eWVzIgogZWxzZQpAQCAtMjAxNSw3ICsyMDI0LDcgQEAKIGZpCiAKIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciBpc3dhbG51bSBpbiAtbHciIi4uLiAkYWNfYyIgMT4mNgotZWNobyAiY29uZmlndXJlOjIwMTk6IGNoZWNraW5nIGZvciBpc3dhbG51bSBpbiAtbHciID4mNQorZWNobyAiY29uZmlndXJlOjIwMjg6IGNoZWNraW5nIGZvciBpc3dhbG51bSBpbiAtbHciID4mNQogYWNfbGliX3Zhcj1gZWNobyB3J18naXN3YWxudW0gfCBzZWQgJ3klLi8rLSVfX3BfJSdgCiBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfbGliXyRhY19saWJfdmFyJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKQEAgLTIwMjMsNyArMjAzMiw3IEBACiAgIGFjX3NhdmVfTElCUz0iJExJQlMiCiBMSUJTPSItbHcgICRMSUJTIgogY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgMjAyNyAiY29uZmlndXJlIgorI2xpbmUgMjAzNiAiY29uZmlndXJlIgogI2luY2x1ZGUgImNvbmZkZWZzLmgiCiAvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwogLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgpAQCAtMjAzNCw3ICsyMDQzLDcgQEAKIGlzd2FsbnVtKCkKIDsgcmV0dXJuIDA7IH0KIEVPRgotaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToyMDM4OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Q7IHRoZW4KK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MjA0NzogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0OyB0aGVuCiAgIHJtIC1yZiBjb25mdGVzdCoKICAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPXllcyIKIGVsc2UKQEAgLTIwNjIsNyArMjA3MSw3IEBACiBmaQogCiBlY2hvICRhY19uICJjaGVja2luZyBmb3IgWEY4NkRHQVF1ZXJ5RXh0ZW5zaW9uIGluIC1sWHhmODZkZ2EiIi4uLiAkYWNfYyIgMT4mNgotZWNobyAiY29uZmlndXJlOjIwNjY6IGNoZWNraW5nIGZvciBYRjg2REdBUXVlcnlFeHRlbnNpb24gaW4gLWxYeGY4NmRnYSIgPiY1CitlY2hvICJjb25maWd1cmU6MjA3NTogY2hlY2tpbmcgZm9yIFhGODZER0FRdWVyeUV4dGVuc2lvbiBpbiAtbFh4Zjg2ZGdhIiA+JjUKIGFjX2xpYl92YXI9YGVjaG8gWHhmODZkZ2EnXydYRjg2REdBUXVlcnlFeHRlbnNpb24gfCBzZWQgJ3klLi8rLSVfX3BfJSdgCiBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfbGliXyRhY19saWJfdmFyJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKQEAgLTIwNzAsNyArMjA3OSw3IEBACiAgIGFjX3NhdmVfTElCUz0iJExJQlMiCiBMSUJTPSItbFh4Zjg2ZGdhICRYX0xJQlMgLWxYZXh0IC1sWDExICRMSUJTIgogY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgMjA3NCAiY29uZmlndXJlIgorI2xpbmUgMjA4MyAiY29uZmlndXJlIgogI2luY2x1ZGUgImNvbmZkZWZzLmgiCiAvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwogLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgpAQCAtMjA4MSw3ICsyMDkwLDcgQEAKIFhGODZER0FRdWVyeUV4dGVuc2lvbigpCiA7IHJldHVybiAwOyB9CiBFT0YKLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MjA4NTogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0OyB0aGVuCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjIwOTQ6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdDsgdGhlbgogICBybSAtcmYgY29uZnRlc3QqCiAgIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj15ZXMiCiBlbHNlCkBAIC0yMTA5LDE3ICsyMTE4LDE3IEBACiBkbwogYWNfc2FmZT1gZWNobyAiJGFjX2hkciIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCiBlY2hvICRhY19uICJjaGVja2luZyBmb3IgJGFjX2hkciIiLi4uICRhY19jIiAxPiY2Ci1lY2hvICJjb25maWd1cmU6MjExMzogY2hlY2tpbmcgZm9yICRhY19oZHIiID4mNQorZWNobyAiY29uZmlndXJlOjIxMjI6IGNoZWNraW5nIGZvciAkYWNfaGRyIiA+JjUKIGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9oZWFkZXJfJGFjX3NhZmUnK3NldH0nYFwiID0gc2V0IjsgdGhlbgogICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgogZWxzZQogICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi0jbGluZSAyMTE4ICJjb25maWd1cmUiCisjbGluZSAyMTI3ICJjb25maWd1cmUiCiAjaW5jbHVkZSAiY29uZmRlZnMuaCIKICNpbmNsdWRlIDwkYWNfaGRyPgogRU9GCiBhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCA+L2Rldi9udWxsIDI+Y29uZnRlc3Qub3V0IgoteyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToyMTIzOiBcIiRhY190cnlcIikgMT4mNTsgKGV2YWwgJGFjX3RyeSkgMj4mNTsgfQoreyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToyMTMyOiBcIiRhY190cnlcIikgMT4mNTsgKGV2YWwgJGFjX3RyeSkgMj4mNTsgfQogYWNfZXJyPWBncmVwIC12ICdeICorJyBjb25mdGVzdC5vdXRgCiBpZiB0ZXN0IC16ICIkYWNfZXJyIjsgdGhlbgogICBybSAtcmYgY29uZnRlc3QqCkBAIC0yMTQ3LDEyICsyMTU2LDEyIEBACiAKIAogZWNobyAkYWNfbiAiY2hlY2tpbmcgImZvciBPcGVuIFNvdW5kIFN5c3RlbSIiIi4uLiAkYWNfYyIgMT4mNgotZWNobyAiY29uZmlndXJlOjIxNTE6IGNoZWNraW5nICJmb3IgT3BlbiBTb3VuZCBTeXN0ZW0iIiA+JjUKK2VjaG8gImNvbmZpZ3VyZToyMTYwOiBjaGVja2luZyAiZm9yIE9wZW4gU291bmQgU3lzdGVtIiIgPiY1CiBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfY19vcGVuc291bmRzeXN0ZW0nK3NldH0nYFwiID0gc2V0IjsgdGhlbgogICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgogZWxzZQogICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi0jbGluZSAyMTU2ICJjb25maWd1cmUiCisjbGluZSAyMTY1ICJjb25maWd1cmUiCiAjaW5jbHVkZSAiY29uZmRlZnMuaCIKIAogCSNpZmRlZiBIQVZFX1NZU19TT1VORENBUkRfSApAQCAtMjE3Miw3ICsyMTgxLDcgQEAKIAogOyByZXR1cm4gMDsgfQogRU9GCi1pZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjIxNzY6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MjE4NTogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgogICBybSAtcmYgY29uZnRlc3QqCiAgIGFjX2N2X2Nfb3BlbnNvdW5kc3lzdGVtPSJ5ZXMiCiBlbHNlCkBAIC0yMTk2LDEyICsyMjA1LDEyIEBACiAKIAogZWNobyAkYWNfbiAiY2hlY2tpbmcgImZvciB1bmlvbiBzZW11biIiIi4uLiAkYWNfYyIgMT4mNgotZWNobyAiY29uZmlndXJlOjIyMDA6IGNoZWNraW5nICJmb3IgdW5pb24gc2VtdW4iIiA+JjUKK2VjaG8gImNvbmZpZ3VyZToyMjA5OiBjaGVja2luZyAiZm9yIHVuaW9uIHNlbXVuIiIgPiY1CiBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfY191bmlvbl9zZW11bicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCiAgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CiBlbHNlCiAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLSNsaW5lIDIyMDUgImNvbmZpZ3VyZSIKKyNsaW5lIDIyMTQgImNvbmZpZ3VyZSIKICNpbmNsdWRlICJjb25mZGVmcy5oIgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHN5cy9zZW0uaD4KQEAgLTIyMDksNyArMjIxOCw3IEBACiB1bmlvbiBzZW11biBmb28KIDsgcmV0dXJuIDA7IH0KIEVPRgotaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToyMjEzOiBcIiRhY19jb21waWxlXCIpIDE+JjU7IChldmFsICRhY19jb21waWxlKSAyPiY1OyB9OyB0aGVuCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjIyMjI6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KICAgcm0gLXJmIGNvbmZ0ZXN0KgogICBhY19jdl9jX3VuaW9uX3NlbXVuPSJ5ZXMiCiBlbHNlCkBAIC0yMjM3LDcgKzIyNDYsNyBAQAogdGhlbgogICBDRkxBR1M9IiRDRkxBR1MgLVdhbGwiCiAgIGVjaG8gJGFjX24gImNoZWNraW5nICJmb3IgZ2NjIHN0cmVuZ3RoLXJlZHVjZSBidWciIiIuLi4gJGFjX2MiIDE+JjYKLWVjaG8gImNvbmZpZ3VyZToyMjQxOiBjaGVja2luZyAiZm9yIGdjYyBzdHJlbmd0aC1yZWR1Y2UgYnVnIiIgPiY1CitlY2hvICJjb25maWd1cmU6MjI1MDogY2hlY2tpbmcgImZvciBnY2Mgc3RyZW5ndGgtcmVkdWNlIGJ1ZyIiID4mNQogaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2NfZ2NjX3N0cmVuZ3RoX2J1Zycrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCiAgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CiBlbHNlCkBAIC0yMjQ1LDcgKzIyNTQsNyBAQAogICBhY19jdl9jX2djY19zdHJlbmd0aF9idWc9InllcyIKIGVsc2UKICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgMjI0OSAiY29uZmlndXJlIgorI2xpbmUgMjI1OCAiY29uZmlndXJlIgogI2luY2x1ZGUgImNvbmZkZWZzLmgiCiAKIGludCBtYWluKHZvaWQpIHsKQEAgLTIyNTYsNyArMjI2NSw3IEBACiAgIGV4aXQoIEFycmF5WzFdICE9IC0yICk7CiB9CiBFT0YKLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MjI2MDogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0ICYmICguL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbAoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToyMjY5OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3QgJiYgKC4vY29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsCiB0aGVuCiAgIGFjX2N2X2NfZ2NjX3N0cmVuZ3RoX2J1Zz0ibm8iCiBlbHNlCkBAIC0yMjc5LDcgKzIyODgsNyBAQAogCiAKIGVjaG8gJGFjX24gImNoZWNraW5nICJ3aGV0aGVyIGV4dGVybmFsIHN5bWJvbHMgbmVlZCBhbiB1bmRlcnNjb3JlIHByZWZpeCIiIi4uLiAkYWNfYyIgMT4mNgotZWNobyAiY29uZmlndXJlOjIyODM6IGNoZWNraW5nICJ3aGV0aGVyIGV4dGVybmFsIHN5bWJvbHMgbmVlZCBhbiB1bmRlcnNjb3JlIHByZWZpeCIiID4mNQorZWNobyAiY29uZmlndXJlOjIyOTI6IGNoZWNraW5nICJ3aGV0aGVyIGV4dGVybmFsIHN5bWJvbHMgbmVlZCBhbiB1bmRlcnNjb3JlIHByZWZpeCIiID4mNQogaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2NfZXh0ZXJuX3ByZWZpeCcrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCiAgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CiBlbHNlCkBAIC0yMjkxLDE0ICsyMzAwLDE0IEBACiAJLmxvbmcgMAogRU9GCiBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi0jbGluZSAyMjk1ICJjb25maWd1cmUiCisjbGluZSAyMzA0ICJjb25maWd1cmUiCiAjaW5jbHVkZSAiY29uZmRlZnMuaCIKIGV4dGVybiBpbnQgYWNfdGVzdDsKIGludCBtYWluKCkgewogaWYgKGFjX3Rlc3QpIHJldHVybiAxCiA7IHJldHVybiAwOyB9CiBFT0YKLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MjMwMjogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0OyB0aGVuCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjIzMTE6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdDsgdGhlbgogICBybSAtcmYgY29uZnRlc3QqCiAgIGFjX2N2X2NfZXh0ZXJuX3ByZWZpeD0ieWVzIgogZWxzZQpAQCAtMjMyMiw3ICsyMzMxLDcgQEAKIAogCiBlY2hvICRhY19uICJjaGVja2luZyAid2hldGhlciBhc3NlbWJsZXIgYWNjZXB0cyAuc3RyaW5nIiIiLi4uICRhY19jIiAxPiY2Ci1lY2hvICJjb25maWd1cmU6MjMyNjogY2hlY2tpbmcgIndoZXRoZXIgYXNzZW1ibGVyIGFjY2VwdHMgLnN0cmluZyIiID4mNQorZWNobyAiY29uZmlndXJlOjIzMzU6IGNoZWNraW5nICJ3aGV0aGVyIGFzc2VtYmxlciBhY2NlcHRzIC5zdHJpbmciIiA+JjUKIGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9jX2FzbV9zdHJpbmcnK3NldH0nYFwiID0gc2V0IjsgdGhlbgogICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgogZWxzZQpAQCAtMjMzMiwxNCArMjM0MSwxNCBAQAogCS5zdHJpbmcgInRlc3QiCiBFT0YKIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLSNsaW5lIDIzMzYgImNvbmZpZ3VyZSIKKyNsaW5lIDIzNDUgImNvbmZpZ3VyZSIKICNpbmNsdWRlICJjb25mZGVmcy5oIgogCiBpbnQgbWFpbigpIHsKIAogOyByZXR1cm4gMDsgfQogRU9GCi1pZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjIzNDM6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdDsgdGhlbgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToyMzUyOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Q7IHRoZW4KICAgcm0gLXJmIGNvbmZ0ZXN0KgogICBhY19jdl9jX2FzbV9zdHJpbmc9InllcyIKIGVsc2UKQEAgLTIzNjYsMjEgKzIzNzUsMjEgQEAKIGlmIHRlc3QgIiRMSUJfVEFSR0VUIiA9ICJsaWJ3aW5lLnNvLjEuMCIKIHRoZW4KICAgZWNobyAkYWNfbiAiY2hlY2tpbmcgIndoZXRoZXIgd2UgY2FuIGJ1aWxkIGEgZGxsIiIiLi4uICRhY19jIiAxPiY2Ci1lY2hvICJjb25maWd1cmU6MjM3MDogY2hlY2tpbmcgIndoZXRoZXIgd2UgY2FuIGJ1aWxkIGEgZGxsIiIgPiY1CitlY2hvICJjb25maWd1cmU6MjM3OTogY2hlY2tpbmcgIndoZXRoZXIgd2UgY2FuIGJ1aWxkIGEgZGxsIiIgPiY1CiBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfY19kbGwnK3NldH0nYFwiID0gc2V0IjsgdGhlbgogICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgogZWxzZQogICBzYXZlZF9jZmxhZ3M9JENGTEFHUwogICBDRkxBR1M9IiRDRkxBR1MgLWZQSUMgLXNoYXJlZCAtV2wsLXNvbmFtZSxjb25mdGVzdC5zby4xLjAiCiAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLSNsaW5lIDIzNzcgImNvbmZpZ3VyZSIKKyNsaW5lIDIzODYgImNvbmZpZ3VyZSIKICNpbmNsdWRlICJjb25mZGVmcy5oIgogCiBpbnQgbWFpbigpIHsKIHJldHVybiAxCiA7IHJldHVybiAwOyB9CiBFT0YKLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MjM4NDogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0OyB0aGVuCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjIzOTM6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdDsgdGhlbgogICBybSAtcmYgY29uZnRlc3QqCiAgIGFjX2N2X2NfZGxsPSJ5ZXMiCiBlbHNlCkBAIC0yNDA2LDcgKzI0MTUsNyBAQAogCiAKIGVjaG8gJGFjX24gImNoZWNraW5nICJmb3IgcmVlbnRyYW50IFggbGlicmFyaWVzIiIiLi4uICRhY19jIiAxPiY2Ci1lY2hvICJjb25maWd1cmU6MjQxMDogY2hlY2tpbmcgImZvciByZWVudHJhbnQgWCBsaWJyYXJpZXMiIiA+JjUKK2VjaG8gImNvbmZpZ3VyZToyNDE5OiBjaGVja2luZyAiZm9yIHJlZW50cmFudCBYIGxpYnJhcmllcyIiID4mNQogaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J3dpbmVfY3ZfeF9yZWVudHJhbnQnK3NldH0nYFwiID0gc2V0IjsgdGhlbgogICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgogZWxzZQpAQCAtMjQ1MCwxMiArMjQ1OSwxMiBAQAogZm9yIGFjX2Z1bmMgaW4gY2xvbmUgZ2V0cGFnZXNpemUgbWVtbW92ZSBzaWdhbHRzdGFjayBzdHJlcnJvciBzdHJpY21wIHRjZ2V0YXR0ciB0aW1lZ20gdXNsZWVwIHdhaXQ0IHdhaXRwaWQgdmZzY2FuZgogZG8KIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciAkYWNfZnVuYyIiLi4uICRhY19jIiAxPiY2Ci1lY2hvICJjb25maWd1cmU6MjQ1NDogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKK2VjaG8gImNvbmZpZ3VyZToyNDYzOiBjaGVja2luZyBmb3IgJGFjX2Z1bmMiID4mNQogaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2Z1bmNfJGFjX2Z1bmMnK3NldH0nYFwiID0gc2V0IjsgdGhlbgogICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgogZWxzZQogICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi0jbGluZSAyNDU5ICJjb25maWd1cmUiCisjbGluZSAyNDY4ICJjb25maWd1cmUiCiAjaW5jbHVkZSAiY29uZmRlZnMuaCIKIC8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKICAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jKCk7IGJlbG93LiAgKi8KQEAgLTI0NzgsNyArMjQ4Nyw3IEBACiAKIDsgcmV0dXJuIDA7IH0KIEVPRgotaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToyNDgyOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Q7IHRoZW4KK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MjQ5MTogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0OyB0aGVuCiAgIHJtIC1yZiBjb25mdGVzdCoKICAgZXZhbCAiYWNfY3ZfZnVuY18kYWNfZnVuYz15ZXMiCiBlbHNlCkBAIC0yNTA2LDE3ICsyNTE1LDE3IEBACiBkbwogYWNfc2FmZT1gZWNobyAiJGFjX2hkciIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCiBlY2hvICRhY19uICJjaGVja2luZyBmb3IgJGFjX2hkciIiLi4uICRhY19jIiAxPiY2Ci1lY2hvICJjb25maWd1cmU6MjUxMDogY2hlY2tpbmcgZm9yICRhY19oZHIiID4mNQorZWNobyAiY29uZmlndXJlOjI1MTk6IGNoZWNraW5nIGZvciAkYWNfaGRyIiA+JjUKIGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9oZWFkZXJfJGFjX3NhZmUnK3NldH0nYFwiID0gc2V0IjsgdGhlbgogICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgogZWxzZQogICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi0jbGluZSAyNTE1ICJjb25maWd1cmUiCisjbGluZSAyNTI0ICJjb25maWd1cmUiCiAjaW5jbHVkZSAiY29uZmRlZnMuaCIKICNpbmNsdWRlIDwkYWNfaGRyPgogRU9GCiBhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCA+L2Rldi9udWxsIDI+Y29uZnRlc3Qub3V0IgoteyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToyNTIwOiBcIiRhY190cnlcIikgMT4mNTsgKGV2YWwgJGFjX3RyeSkgMj4mNTsgfQoreyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToyNTI5OiBcIiRhY190cnlcIikgMT4mNTsgKGV2YWwgJGFjX3RyeSkgMj4mNTsgfQogYWNfZXJyPWBncmVwIC12ICdeICorJyBjb25mdGVzdC5vdXRgCiBpZiB0ZXN0IC16ICIkYWNfZXJyIjsgdGhlbgogICBybSAtcmYgY29uZnRlc3QqCkBAIC0yNTQzLDEyICsyNTUyLDEyIEBACiBkb25lCiAKIGVjaG8gJGFjX24gImNoZWNraW5nIHdoZXRoZXIgc3RhdCBmaWxlLW1vZGUgbWFjcm9zIGFyZSBicm9rZW4iIi4uLiAkYWNfYyIgMT4mNgotZWNobyAiY29uZmlndXJlOjI1NDc6IGNoZWNraW5nIHdoZXRoZXIgc3RhdCBmaWxlLW1vZGUgbWFjcm9zIGFyZSBicm9rZW4iID4mNQorZWNobyAiY29uZmlndXJlOjI1NTY6IGNoZWNraW5nIHdoZXRoZXIgc3RhdCBmaWxlLW1vZGUgbWFjcm9zIGFyZSBicm9rZW4iID4mNQogaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2hlYWRlcl9zdGF0X2Jyb2tlbicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCiAgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CiBlbHNlCiAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLSNsaW5lIDI1NTIgImNvbmZpZ3VyZSIKKyNsaW5lIDI1NjEgImNvbmZpZ3VyZSIKICNpbmNsdWRlICJjb25mZGVmcy5oIgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CkBAIC0yNTk5LDEyICsyNjA4LDEyIEBACiBmaQogCiBlY2hvICRhY19uICJjaGVja2luZyBmb3Igd29ya2luZyBjb25zdCIiLi4uICRhY19jIiAxPiY2Ci1lY2hvICJjb25maWd1cmU6MjYwMzogY2hlY2tpbmcgZm9yIHdvcmtpbmcgY29uc3QiID4mNQorZWNobyAiY29uZmlndXJlOjI2MTI6IGNoZWNraW5nIGZvciB3b3JraW5nIGNvbnN0IiA+JjUKIGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9jX2NvbnN0JytzZXR9J2BcIiA9IHNldCI7IHRoZW4KICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKIGVsc2UKICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgMjYwOCAiY29uZmlndXJlIgorI2xpbmUgMjYxNyAiY29uZmlndXJlIgogI2luY2x1ZGUgImNvbmZkZWZzLmgiCiAKIGludCBtYWluKCkgewpAQCAtMjY1Myw3ICsyNjYyLDcgQEAKIAogOyByZXR1cm4gMDsgfQogRU9GCi1pZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjI2NTc6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MjY2NjogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgogICBybSAtcmYgY29uZnRlc3QqCiAgIGFjX2N2X2NfY29uc3Q9eWVzCiBlbHNlCkBAIC0yNjc0LDEyICsyNjgzLDEyIEBACiBmaQogCiBlY2hvICRhY19uICJjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRlciBmaWxlcyIiLi4uICRhY19jIiAxPiY2Ci1lY2hvICJjb25maWd1cmU6MjY3ODogY2hlY2tpbmcgZm9yIEFOU0kgQyBoZWFkZXIgZmlsZXMiID4mNQorZWNobyAiY29uZmlndXJlOjI2ODc6IGNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzIiA+JjUKIGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9oZWFkZXJfc3RkYycrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCiAgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CiBlbHNlCiAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLSNsaW5lIDI2ODMgImNvbmZpZ3VyZSIKKyNsaW5lIDI2OTIgImNvbmZpZ3VyZSIKICNpbmNsdWRlICJjb25mZGVmcy5oIgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0ZGFyZy5oPgpAQCAtMjY4Nyw3ICsyNjk2LDcgQEAKICNpbmNsdWRlIDxmbG9hdC5oPgogRU9GCiBhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCA+L2Rldi9udWxsIDI+Y29uZnRlc3Qub3V0IgoteyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToyNjkxOiBcIiRhY190cnlcIikgMT4mNTsgKGV2YWwgJGFjX3RyeSkgMj4mNTsgfQoreyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToyNzAwOiBcIiRhY190cnlcIikgMT4mNTsgKGV2YWwgJGFjX3RyeSkgMj4mNTsgfQogYWNfZXJyPWBncmVwIC12ICdeICorJyBjb25mdGVzdC5vdXRgCiBpZiB0ZXN0IC16ICIkYWNfZXJyIjsgdGhlbgogICBybSAtcmYgY29uZnRlc3QqCkBAIC0yNzA0LDcgKzI3MTMsNyBAQAogaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KICAgIyBTdW5PUyA0Lnggc3RyaW5nLmggZG9lcyBub3QgZGVjbGFyZSBtZW0qLCBjb250cmFyeSB0byBBTlNJLgogY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgMjcwOCAiY29uZmlndXJlIgorI2xpbmUgMjcxNyAiY29uZmlndXJlIgogI2luY2x1ZGUgImNvbmZkZWZzLmgiCiAjaW5jbHVkZSA8c3RyaW5nLmg+CiBFT0YKQEAgLTI3MjIsNyArMjczMSw3IEBACiBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgogICAjIElTQyAyLjAuMiBzdGRsaWIuaCBkb2VzIG5vdCBkZWNsYXJlIGZyZWUsIGNvbnRyYXJ5IHRvIEFOU0kuCiBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi0jbGluZSAyNzI2ICJjb25maWd1cmUiCisjbGluZSAyNzM1ICJjb25maWd1cmUiCiAjaW5jbHVkZSAiY29uZmRlZnMuaCIKICNpbmNsdWRlIDxzdGRsaWIuaD4KIEVPRgpAQCAtMjc0Myw3ICsyNzUyLDcgQEAKICAgOgogZWxzZQogICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi0jbGluZSAyNzQ3ICJjb25maWd1cmUiCisjbGluZSAyNzU2ICJjb25maWd1cmUiCiAjaW5jbHVkZSAiY29uZmRlZnMuaCIKICNpbmNsdWRlIDxjdHlwZS5oPgogI2RlZmluZSBJU0xPV0VSKGMpICgnYScgPD0gKGMpICYmIChjKSA8PSAneicpCkBAIC0yNzU0LDcgKzI3NjMsNyBAQAogZXhpdCAoMCk7IH0KIAogRU9GCi1pZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjI3NTg6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCAmJiAoLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGwKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6Mjc2NzogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0ICYmICguL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbAogdGhlbgogICA6CiBlbHNlCkBAIC0yNzc4LDEyICsyNzg3LDEyIEBACiBmaQogCiBlY2hvICRhY19uICJjaGVja2luZyBmb3Igc2l6ZV90IiIuLi4gJGFjX2MiIDE+JjYKLWVjaG8gImNvbmZpZ3VyZToyNzgyOiBjaGVja2luZyBmb3Igc2l6ZV90IiA+JjUKK2VjaG8gImNvbmZpZ3VyZToyNzkxOiBjaGVja2luZyBmb3Igc2l6ZV90IiA+JjUKIGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl90eXBlX3NpemVfdCcrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCiAgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CiBlbHNlCiAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLSNsaW5lIDI3ODcgImNvbmZpZ3VyZSIKKyNsaW5lIDI3OTYgImNvbmZpZ3VyZSIKICNpbmNsdWRlICJjb25mZGVmcy5oIgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2lmIFNURENfSEVBREVSUwpAQCAtMjgxMSw3ICsyODIwLDcgQEAKIGZpCiAKIGVjaG8gJGFjX24gImNoZWNraW5nIHNpemUgb2YgbG9uZyBsb25nIiIuLi4gJGFjX2MiIDE+JjYKLWVjaG8gImNvbmZpZ3VyZToyODE1OiBjaGVja2luZyBzaXplIG9mIGxvbmcgbG9uZyIgPiY1CitlY2hvICJjb25maWd1cmU6MjgyNDogY2hlY2tpbmcgc2l6ZSBvZiBsb25nIGxvbmciID4mNQogaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3NpemVvZl9sb25nX2xvbmcnK3NldH0nYFwiID0gc2V0IjsgdGhlbgogICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgogZWxzZQpAQCAtMjgxOSw3ICsyODI4LDcgQEAKICAgYWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZz0wCiBlbHNlCiAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLSNsaW5lIDI4MjMgImNvbmZpZ3VyZSIKKyNsaW5lIDI4MzIgImNvbmZpZ3VyZSIKICNpbmNsdWRlICJjb25mZGVmcy5oIgogI2luY2x1ZGUgPHN0ZGlvLmg+CiBtYWluKCkKQEAgLTI4MzAsNyArMjgzOSw3IEBACiAgIGV4aXQoMCk7CiB9CiBFT0YKLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MjgzNDogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0ICYmICguL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbAoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToyODQzOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3QgJiYgKC4vY29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsCiB0aGVuCiAgIGFjX2N2X3NpemVvZl9sb25nX2xvbmc9YGNhdCBjb25mdGVzdHZhbGAKIGVsc2UKQEAgLTI4NTQsMTIgKzI4NjMsMTIgQEAKIGlmIHRlc3QgIiRhY19jdl9oZWFkZXJfc3lzX3Zmc19oIiA9ICJ5ZXMiCiB0aGVuCiAgICAgZWNobyAkYWNfbiAiY2hlY2tpbmcgIndoZXRoZXIgc3lzL3Zmcy5oIGRlZmluZXMgc3RhdGZzIiIiLi4uICRhY19jIiAxPiY2Ci1lY2hvICJjb25maWd1cmU6Mjg1ODogY2hlY2tpbmcgIndoZXRoZXIgc3lzL3Zmcy5oIGRlZmluZXMgc3RhdGZzIiIgPiY1CitlY2hvICJjb25maWd1cmU6Mjg2NzogY2hlY2tpbmcgIndoZXRoZXIgc3lzL3Zmcy5oIGRlZmluZXMgc3RhdGZzIiIgPiY1CiBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snd2luZV9jdl9zeXNfdmZzX2hhc19zdGF0ZnMnK3NldH0nYFwiID0gc2V0IjsgdGhlbgogICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgogZWxzZQogICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi0jbGluZSAyODYzICJjb25maWd1cmUiCisjbGluZSAyODcyICJjb25maWd1cmUiCiAjaW5jbHVkZSAiY29uZmRlZnMuaCIKIAogCSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KQEAgLTI4NzYsNyArMjg4NSw3IEBACiAJCiA7IHJldHVybiAwOyB9CiBFT0YKLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6Mjg4MDogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToyODg5OiBcIiRhY19jb21waWxlXCIpIDE+JjU7IChldmFsICRhY19jb21waWxlKSAyPiY1OyB9OyB0aGVuCiAgIHJtIC1yZiBjb25mdGVzdCoKICAgd2luZV9jdl9zeXNfdmZzX2hhc19zdGF0ZnM9eWVzCiBlbHNlCkBAIC0yOTAzLDEyICsyOTEyLDEyIEBACiBpZiB0ZXN0ICIkYWNfY3ZfaGVhZGVyX3N5c19zdGF0ZnNfaCIgPSAieWVzIgogdGhlbgogICAgIGVjaG8gJGFjX24gImNoZWNraW5nICJ3aGV0aGVyIHN5cy9zdGF0ZnMuaCBkZWZpbmVzIHN0YXRmcyIiIi4uLiAkYWNfYyIgMT4mNgotZWNobyAiY29uZmlndXJlOjI5MDc6IGNoZWNraW5nICJ3aGV0aGVyIHN5cy9zdGF0ZnMuaCBkZWZpbmVzIHN0YXRmcyIiID4mNQorZWNobyAiY29uZmlndXJlOjI5MTY6IGNoZWNraW5nICJ3aGV0aGVyIHN5cy9zdGF0ZnMuaCBkZWZpbmVzIHN0YXRmcyIiID4mNQogaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J3dpbmVfY3Zfc3lzX3N0YXRmc19oYXNfc3RhdGZzJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKIGVsc2UKICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgMjkxMiAiY29uZmlndXJlIgorI2xpbmUgMjkyMSAiY29uZmlndXJlIgogI2luY2x1ZGUgImNvbmZkZWZzLmgiCiAKIAkjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CkBAIC0yOTIzLDcgKzI5MzIsNyBAQAogCQogOyByZXR1cm4gMDsgfQogRU9GCi1pZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjI5Mjc6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MjkzNjogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgogICBybSAtcmYgY29uZnRlc3QqCiAgIHdpbmVfY3Zfc3lzX3N0YXRmc19oYXNfc3RhdGZzPXllcwogZWxzZQpAQCAtMjk1MCwxMiArMjk1OSwxMiBAQAogaWYgdGVzdCAiJGFjX2N2X2hlYWRlcl9zeXNfbW91bnRfaCIgPSAieWVzIgogdGhlbgogICAgIGVjaG8gJGFjX24gImNoZWNraW5nICJ3aGV0aGVyIHN5cy9tb3VudC5oIGRlZmluZXMgc3RhdGZzIiIiLi4uICRhY19jIiAxPiY2Ci1lY2hvICJjb25maWd1cmU6Mjk1NDogY2hlY2tpbmcgIndoZXRoZXIgc3lzL21vdW50LmggZGVmaW5lcyBzdGF0ZnMiIiA+JjUKK2VjaG8gImNvbmZpZ3VyZToyOTYzOiBjaGVja2luZyAid2hldGhlciBzeXMvbW91bnQuaCBkZWZpbmVzIHN0YXRmcyIiID4mNQogaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J3dpbmVfY3Zfc3lzX21vdW50X2hhc19zdGF0ZnMnK3NldH0nYFwiID0gc2V0IjsgdGhlbgogICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgogZWxzZQogICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi0jbGluZSAyOTU5ICJjb25maWd1cmUiCisjbGluZSAyOTY4ICJjb25maWd1cmUiCiAjaW5jbHVkZSAiY29uZmRlZnMuaCIKIAogCSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KQEAgLTI5NzAsNyArMjk3OSw3IEBACiAJCiA7IHJldHVybiAwOyB9CiBFT0YKLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6Mjk3NDogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToyOTgzOiBcIiRhY19jb21waWxlXCIpIDE+JjU7IChldmFsICRhY19jb21waWxlKSAyPiY1OyB9OyB0aGVuCiAgIHJtIC1yZiBjb25mdGVzdCoKICAgd2luZV9jdl9zeXNfbW91bnRfaGFzX3N0YXRmcz15ZXMKIGVsc2UKQEAgLTI5OTYsNyArMzAwNSw3IEBACiAKIAogZWNobyAkYWNfbiAiY2hlY2tpbmcgImZvciBzdGF0ZnMuZl9iZnJlZSIiIi4uLiAkYWNfYyIgMT4mNgotZWNobyAiY29uZmlndXJlOjMwMDA6IGNoZWNraW5nICJmb3Igc3RhdGZzLmZfYmZyZWUiIiA+JjUKK2VjaG8gImNvbmZpZ3VyZTozMDA5OiBjaGVja2luZyAiZm9yIHN0YXRmcy5mX2JmcmVlIiIgPiY1CiBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snd2luZV9jdl9zdGF0ZnNfYmZyZWUnK3NldH0nYFwiID0gc2V0IjsgdGhlbgogICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgogZWxzZQpAQCAtMzAwNSw3ICszMDE0LDcgQEAKICAgICAgICAgd2luZV9jdl9zdGF0ZnNfYmZyZWU9bm8KICAgICBlbHNlCiAgICAgCWNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLSNsaW5lIDMwMDkgImNvbmZpZ3VyZSIKKyNsaW5lIDMwMTggImNvbmZpZ3VyZSIKICNpbmNsdWRlICJjb25mZGVmcy5oIgogCiAJI2luY2x1ZGUgPHN5cy90eXBlcy5oPgpAQCAtMzAzMiw3ICszMDQxLDcgQEAKIAkKIDsgcmV0dXJuIDA7IH0KIEVPRgotaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTozMDM2OiBcIiRhY19jb21waWxlXCIpIDE+JjU7IChldmFsICRhY19jb21waWxlKSAyPiY1OyB9OyB0aGVuCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjMwNDU6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KICAgcm0gLXJmIGNvbmZ0ZXN0KgogICB3aW5lX2N2X3N0YXRmc19iZnJlZT15ZXMKIGVsc2UKQEAgLTMwNTYsNyArMzA2NSw3IEBACiBmaQogCiBlY2hvICRhY19uICJjaGVja2luZyAiZm9yIHN0YXRmcy5mX2JhdmFpbCIiIi4uLiAkYWNfYyIgMT4mNgotZWNobyAiY29uZmlndXJlOjMwNjA6IGNoZWNraW5nICJmb3Igc3RhdGZzLmZfYmF2YWlsIiIgPiY1CitlY2hvICJjb25maWd1cmU6MzA2OTogY2hlY2tpbmcgImZvciBzdGF0ZnMuZl9iYXZhaWwiIiA+JjUKIGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneyd3aW5lX2N2X3N0YXRmc19iYXZhaWwnK3NldH0nYFwiID0gc2V0IjsgdGhlbgogICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgogZWxzZQpAQCAtMzA2NSw3ICszMDc0LDcgQEAKICAgICAgICAgd2luZV9jdl9zdGF0ZnNfYmF2YWlsPW5vCiAgICAgZWxzZQogICAgIAljYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi0jbGluZSAzMDY5ICJjb25maWd1cmUiCisjbGluZSAzMDc4ICJjb25maWd1cmUiCiAjaW5jbHVkZSAiY29uZmRlZnMuaCIKIAogCSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KQEAgLTMwOTIsNyArMzEwMSw3IEBACiAJCiA7IHJldHVybiAwOyB9CiBFT0YKLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MzA5NjogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTozMTA1OiBcIiRhY19jb21waWxlXCIpIDE+JjU7IChldmFsICRhY19jb21waWxlKSAyPiY1OyB9OyB0aGVuCiAgIHJtIC1yZiBjb25mdGVzdCoKICAgd2luZV9jdl9zdGF0ZnNfYmF2YWlsPXllcwogZWxzZQpAQCAtMzExNyw3ICszMTI2LDcgQEAKIAogCiBlY2hvICRhY19uICJjaGVja2luZyAiZm9yIHdvcmtpbmcgc2lnYWx0c3RhY2siIiIuLi4gJGFjX2MiIDE+JjYKLWVjaG8gImNvbmZpZ3VyZTozMTIxOiBjaGVja2luZyAiZm9yIHdvcmtpbmcgc2lnYWx0c3RhY2siIiA+JjUKK2VjaG8gImNvbmZpZ3VyZTozMTMwOiBjaGVja2luZyAiZm9yIHdvcmtpbmcgc2lnYWx0c3RhY2siIiA+JjUKIGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9jX3dvcmtpbmdfc2lnYWx0c3RhY2snK3NldH0nYFwiID0gc2V0IjsgdGhlbgogICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgogZWxzZQpAQCAtMzEyNiw3ICszMTM1LDcgQEAKIAogZWxzZQogICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi0jbGluZSAzMTMwICJjb25maWd1cmUiCisjbGluZSAzMTM5ICJjb25maWd1cmUiCiAjaW5jbHVkZSAiY29uZmRlZnMuaCIKIAogCSNpbmNsdWRlIDxzdGRpby5oPgpAQCAtMzE2NCw3ICszMTczLDcgQEAKIAl9CiAJCiBFT0YKLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MzE2ODogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0ICYmICguL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbAoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTozMTc3OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3QgJiYgKC4vY29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsCiB0aGVuCiAgIGFjX2N2X2Nfd29ya2luZ19zaWdhbHRzdGFjaz0ieWVzIgogZWxzZQpAQCAtMzMzMSw2ICszMzQwLDcgQEAKIHJlbGF5MzIvTWFrZWZpbGUKIHJlc291cmNlcy9NYWtlZmlsZQogc2NoZWR1bGVyL01ha2VmaWxlCitzZXJ2ZXIvTWFrZWZpbGUKIHRvb2xzL01ha2VmaWxlCiB0b29scy93cmMvTWFrZWZpbGUKIHRzeDExL01ha2VmaWxlCkBAIC0zNDY0LDYgKzM0NzQsNyBAQAogcmVsYXkzMi9NYWtlZmlsZQogcmVzb3VyY2VzL01ha2VmaWxlCiBzY2hlZHVsZXIvTWFrZWZpbGUKK3NlcnZlci9NYWtlZmlsZQogdG9vbHMvTWFrZWZpbGUKIHRvb2xzL3dyYy9NYWtlZmlsZQogdHN4MTEvTWFrZWZpbGUKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5pbiBiL2NvbmZpZ3VyZS5pbgppbmRleCBmMzNmMDdmLi41NTNlYTVmIDEwMDY0NAotLS0gYS9jb25maWd1cmUuaW4KKysrIGIvY29uZmlndXJlLmluCkBAIC0yNiw2ICsyNiwxMCBAQAogWyAgLS1lbmFibGUtZGxsICAgICAgICAgICAgYnVpbGQgdGhlIFdpbmUgbGlicmFyeSBhcyBhIERMTF0sCiBbaWYgdGVzdCAiJGVuYWJsZXZhbCIgPSAibm8iOyB0aGVuIDogOyBlbHNlIExJQl9UQVJHRVQ9ImxpYndpbmUuc28uMS4wIjsgZmldKQogCitBQ19BUkdfRU5BQkxFKGxpYiwKK1sgIC0tZGlzYWJsZS1saWIgICAgICAgICAgIGJ1aWxkIHRoZSBXaW5lIHdpdGhvdXQgYnVpbGRpbmcgbGlid2luZS5hXSwKK1tpZiB0ZXN0ICIkZW5hYmxldmFsIiA9ICJubyI7IHRoZW4gTElCX1RBUkdFVD0iXCRMSUJPQkpTIjsgZmldKQorCiBkbmwgQUNfQVJHX1dJVEgoaXBjLAogZG5sIFsgIC0tZW5hYmxlLWlwYyAgICAgICAgICAgIHVzZSBpbnRlci1wcm9jZXNzIGNvbW11bmljYXRpb24gZm9yIERERV0sCiBkbmwgW2lmIHRlc3QgIiRlbmFibGV2YWwiID0gIm5vIjsgdGhlbiA6IDsgZWxzZSBPUFRJT05TPSItRENPTkZJR19JUEMiOyBmaV0pCkBAIC00NzAsNiArNDc0LDcgQEAKIHJlbGF5MzIvTWFrZWZpbGUKIHJlc291cmNlcy9NYWtlZmlsZQogc2NoZWR1bGVyL01ha2VmaWxlCitzZXJ2ZXIvTWFrZWZpbGUKIHRvb2xzL01ha2VmaWxlCiB0b29scy93cmMvTWFrZWZpbGUKIHRzeDExL01ha2VmaWxlCmRpZmYgLS1naXQgYS9jb250cm9scy9NYWtlZmlsZS5pbiBiL2NvbnRyb2xzL01ha2VmaWxlLmluCmluZGV4IGYzNmEzODIuLmE0OWQ3MTAgMTAwNjQ0Ci0tLSBhL2NvbnRyb2xzL01ha2VmaWxlLmluCisrKyBiL2NvbnRyb2xzL01ha2VmaWxlLmluCkBAIC0xNSwxMiArMTUsMTggQEAKIAloZWFkZXIuYyBcCiAJaWNvbnRpdGxlLmMgXAogCWxpc3Rib3guYyBcCisJbGlzdHZpZXcuYyBcCiAJbWVudS5jIFwKKwlwYWdlci5jIFwKIAlwcm9ncmVzcy5jIFwKKwlyZWJhci5jIFwKIAlzY3JvbGwuYyBcCiAJc3RhdGljLmMgXAogCXN0YXR1cy5jIFwKIAl0b29sYmFyLmMgXAorCXRvb2x0aXBzLmMgXAorCXRyYWNrYmFyLmMgXAorCXRyZWV2aWV3LmMgXAogCXVpdG9vbHMuYyBcCiAJdXBkb3duLmMgXAogCXdpZGdldHMuYwpkaWZmIC0tZ2l0IGEvY29udHJvbHMvY29tY3RsMzJ1bmRvYy5jIGIvY29udHJvbHMvY29tY3RsMzJ1bmRvYy5jCmluZGV4IDg4YjU3ZDUuLmJhYTdhNzEgMTAwNjQ0Ci0tLSBhL2NvbnRyb2xzL2NvbWN0bDMydW5kb2MuYworKysgYi9jb250cm9scy9jb21jdGwzMnVuZG9jLmMKQEAgLTUsNyArNSw3IEBACiAgKgogICogTk9URVMKICAqICAgICBBbGwgb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSBVTkRPQ1VNRU5URUQhISBBbmQgSSBtZWFuIFVORE9DVU1FTlRFRCEhISEKLSAqICAgICBEbyBOT1QgcmVseSBvbiBuYW1lcyBvZiB1bmRvY3VtZW50ZWQgc3RydWN0dXJlcyBhbmQgdHlwZXMhISEKKyAqICAgICBEbyBOT1QgcmVseSBvbiBuYW1lcyBvciBjb250ZW50cyBvZiB1bmRvY3VtZW50ZWQgc3RydWN0dXJlcyBhbmQgdHlwZXMhISEKICAqICAgICBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgYnkgRVhQTE9SRVIuRVhFLCBJRVhQTE9SRS5FWEUgYW5kCiAgKiAgICAgQ09NQ1RMMzIuRExMIChpbnRlcm5hbGx5KS4KICAqCkBAIC0xNiw2ICsxNiw3IEBACiAgKi8KIAogI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgIndpbmRvd3MuaCIKICNpbmNsdWRlICJoZWFwLmgiCiAjaW5jbHVkZSAiZGVidWcuaCIKQEAgLTUwLDY0ICs1MSw5MSBAQAogCiAKIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBBbGxvYyBbQ09NQ1RMMzIuNzFdCisgKgorICovCiAKLURXT1JEIFdJTkFQSQorTFBWT0lEIFdJTkFQSQogQ09NQ1RMMzJfQWxsb2MgKERXT1JEIGR3UGFyYW0pCiB7Ci0gICAgRFdPUkQgZHdQdHI7CisgICAgTFBWT0lEIGxwUHRyOwogCi0gICAgZHdQdHIgPSAoRFdPUkQpSGVhcEFsbG9jIChHZXRQcm9jZXNzSGVhcCAoKSwgSEVBUF9aRVJPX01FTU9SWSwgZHdQYXJhbSk7CisgICAgbHBQdHIgPSBIZWFwQWxsb2MgKEdldFByb2Nlc3NIZWFwICgpLCBIRUFQX1pFUk9fTUVNT1JZLCBkd1BhcmFtKTsKIAotICAgIFRSQUNFIChjb21tY3RybCwgIigweCUwOGx4KSByZXQ9MHglMDhseFxuIiwgZHdQYXJhbSwgZHdQdHIpOworICAgIFRSQUNFIChjb21tY3RybCwgIigweCUwOGx4KSByZXQ9MHglMDhseFxuIiwgZHdQYXJhbSwgKERXT1JEKWxwUHRyKTsKIAotICAgIHJldHVybiBkd1B0cjsKKyAgICByZXR1cm4gbHBQdHI7CiB9CiAKIAotRFdPUkQgV0lOQVBJCi1DT01DVEwzMl9SZUFsbG9jIChEV09SRCBkd1BhcmFtMSwgRFdPUkQgZHdQYXJhbTIpCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJlQWxsb2MgW0NPTUNUTDMyLjcyXQorICoKKyAqLworCitMUFZPSUQgV0lOQVBJCitDT01DVEwzMl9SZUFsbG9jIChMUFZPSUQgZHdQYXJhbTEsIERXT1JEIGR3UGFyYW0yKQogewotICAgIERXT1JEIGR3UHRyOworICAgIExQVk9JRCBkd1B0cjsKIAogICAgIGlmIChkd1BhcmFtMSA9PSAwKQotCWR3UHRyID0gKERXT1JEKUhlYXBBbGxvYyAoR2V0UHJvY2Vzc0hlYXAgKCksIEhFQVBfWkVST19NRU1PUlksCi0JCQkJICBkd1BhcmFtMik7CisJZHdQdHIgPSBIZWFwQWxsb2MgKEdldFByb2Nlc3NIZWFwICgpLCBIRUFQX1pFUk9fTUVNT1JZLAorCQkJICAgZHdQYXJhbTIpOwogICAgIGVsc2UKLQlkd1B0ciA9IChEV09SRClIZWFwUmVBbGxvYyAoR2V0UHJvY2Vzc0hlYXAgKCksIEhFQVBfWkVST19NRU1PUlksCi0JCQkJICAgIChMUFZPSUQpZHdQYXJhbTEsIGR3UGFyYW0yKTsKKwlkd1B0ciA9IEhlYXBSZUFsbG9jIChHZXRQcm9jZXNzSGVhcCAoKSwgSEVBUF9aRVJPX01FTU9SWSwKKwkJCSAgICAgZHdQYXJhbTEsIGR3UGFyYW0yKTsKIAogICAgIFRSQUNFIChjb21tY3RybCwgIigweCUwOGx4IDB4JTA4bHgpIHJldD0weCUwOGx4XG4iLAotCSAgIGR3UGFyYW0xLCBkd1BhcmFtMiwgZHdQdHIpOworCSAgIChEV09SRClkd1BhcmFtMSwgZHdQYXJhbTIsIChEV09SRClkd1B0cik7CiAKICAgICByZXR1cm4gZHdQdHI7CiB9CiAKIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGcmVlIFtDT01DVEwzMi43M10KKyAqCisgKi8KKwogRFdPUkQgV0lOQVBJCi1DT01DVEwzMl9GcmVlIChEV09SRCBkd1BhcmFtKQorQ09NQ1RMMzJfRnJlZSAoTFBWT0lEIGR3UGFyYW0pCiB7Ci0gICAgVFJBQ0UgKGNvbW1jdHJsLCAiKDB4JTA4bHgpXG4iLCBkd1BhcmFtKTsKLSAgICBIZWFwRnJlZSAoR2V0UHJvY2Vzc0hlYXAgKCksIDAsIChMUFZPSUQpZHdQYXJhbSk7CisgICAgVFJBQ0UgKGNvbW1jdHJsLCAiKDB4JTA4bHgpXG4iLCAoRFdPUkQpZHdQYXJhbSk7CisgICAgSGVhcEZyZWUgKEdldFByb2Nlc3NIZWFwICgpLCAwLCBkd1BhcmFtKTsKIAogICAgIHJldHVybiAwOwogfQogCiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogR2V0U2l6ZSBbQ09NQ1RMMzIuNzRdCisgKgorICovCisKIERXT1JEIFdJTkFQSQotQ09NQ1RMMzJfR2V0U2l6ZSAoRFdPUkQgZHdQYXJhbSkKK0NPTUNUTDMyX0dldFNpemUgKExQVk9JRCBkd1BhcmFtKQogewotICAgIFRSQUNFIChjb21tY3RybCwgIigweCUwOGx4KVxuIiwgZHdQYXJhbSk7Ci0gICAgcmV0dXJuIChIZWFwU2l6ZSAoR2V0UHJvY2Vzc0hlYXAgKCksIDAsIChMUFZPSUQpZHdQYXJhbSkpOworICAgIFRSQUNFIChjb21tY3RybCwgIigweCUwOGx4KVxuIiwgKERXT1JEKWR3UGFyYW0pOworICAgIHJldHVybiAoSGVhcFNpemUgKEdldFByb2Nlc3NIZWFwICgpLCAwLCBkd1BhcmFtKSk7CiB9CiAKIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEU0FfQ3JlYXRlIFtDT01DVEwzMi4zMjBdIENyZWF0ZXMgYSBkeW5hbWljIHN0cmluZyBhcnJheQorICoKKyAqIFBBUkFNUworICogICAgIGR3UGFyYW0xIFtJXQorICogICAgIGR3UGFyYW0yIFtJXQorICovCiAKIERXT1JEIFdJTkFQSQogRFNBX0NyZWF0ZSAoRFdPUkQgZHdQYXJhbTEsIERXT1JEIGR3UGFyYW0yKQogewogICAgIExQRFNBX0RBVEEgZHNhUHRyOwogCi0gICAgZHNhUHRyID0gKExQRFNBX0RBVEEpSGVhcEFsbG9jIChTeXN0ZW1IZWFwLCBIRUFQX1pFUk9fTUVNT1JZLCBzaXplb2YoRFNBX0RBVEEpKTsKKyAgICBkc2FQdHIgPSAoTFBEU0FfREFUQSlIZWFwQWxsb2MgKEdldFByb2Nlc3NIZWFwICgpLCBIRUFQX1pFUk9fTUVNT1JZLAorCQkJCSAgICBzaXplb2YoRFNBX0RBVEEpKTsKICAgICBkc2FQdHItPmR3SW5pdGlhbCA9IGR3UGFyYW0xOwogICAgIGRzYVB0ci0+ZHdHcm93ID0gZHdQYXJhbTI7CiAKQEAgLTEyOSwxMSArMTU3LDExIEBACiAgICAgaWYgKGRzYVB0ci0+cHRycykgewogCWZvciAoaSA9IDA7IGkgPCBkc2FQdHItPmR3RW50cnlDb3VudDsgaSsrKSB7CiAJICAgIGlmIChkc2FQdHItPnB0cnNbaV0pCi0JCUhlYXBGcmVlIChTeXN0ZW1IZWFwLCAwLCAoTFBTVFIpZHNhUHRyLT5wdHJzW2ldKTsKKwkJSGVhcEZyZWUgKEdldFByb2Nlc3NIZWFwICgpLCAwLCAoTFBTVFIpZHNhUHRyLT5wdHJzW2ldKTsKIAl9CiAgICAgfQogCi0gICAgSGVhcEZyZWUgKFN5c3RlbUhlYXAsIDAsIGRzYVB0cik7CisgICAgSGVhcEZyZWUgKEdldFByb2Nlc3NIZWFwICgpLCAwLCBkc2FQdHIpOwogCiAgICAgcmV0dXJuIDA7CiB9CkBAIC0xNDIsMTAgKzE3MCwyMyBAQAogRFdPUkQgV0lOQVBJCiBEU0FfR2V0SXRlbSAoRFdPUkQgZHdQYXJhbTEsIERXT1JEIGR3UGFyYW0yLCBEV09SRCBkd1BhcmFtMykKIHsKKyAgICBMUERTQV9EQVRBIGRzYVB0ciA9IChMUERTQV9EQVRBKWR3UGFyYW0xOworCiAgICAgRklYTUUgKGNvbW1jdHJsLCAiKDB4JTA4bHggMHglMDhseCAweCUwOGx4KTogc3R1YiFcbiIsCiAJICAgZHdQYXJhbTEsIGR3UGFyYW0yLCBkd1BhcmFtMyk7CiAKLSAgICByZXR1cm4gMDsKKyAgICBpZiAoZHNhUHRyID09IE5VTEwpCisJcmV0dXJuIDA7CisgICAgaWYgKGRzYVB0ci0+cHRycyA9PSBOVUxMKQorCXJldHVybiAwOworICAgIGlmICgoZHdQYXJhbTIgPCAwKSB8fCAoZHdQYXJhbTIgPj0gZHNhUHRyLT5kd0VudHJ5Q291bnQpKQorCXJldHVybiAwOworCisvLyAgICBGSVhNRSAoY29tbWN0cmwsICJcIiVzXCJcbiIsIChMUFNUUilkc2FQdHItPnB0cnNbZHdQYXJhbTJdKTsKKworICAgIHJldHVybiBsc3RyY3B5MzJBICgoTFBTVFIpZHdQYXJhbTMsIChMUFNUUilkc2FQdHItPnB0cnNbZHdQYXJhbTJdKTsKKworLy8gICAgcmV0dXJuIDA7CiB9CiAKIApAQCAtMTgwLDEzICsyMjEsMTMgQEAKIAkgICBkd1BhcmFtMSwgZHdQYXJhbTIsIChMUFNUUilkd1BhcmFtMyk7CiAKICAgICBpZiAoZHNhUHRyLT5wdHJzID09IE5VTEwpIHsKLQlkc2FQdHItPnB0cnMgPSAoTFBTVFIqKUhlYXBBbGxvYyAoU3lzdGVtSGVhcCwgSEVBUF9aRVJPX01FTU9SWSwKKwlkc2FQdHItPnB0cnMgPSAoTFBTVFIqKUhlYXBBbGxvYyAoR2V0UHJvY2Vzc0hlYXAgKCksIEhFQVBfWkVST19NRU1PUlksCiAJCQkJCSAgZHNhUHRyLT5kd0luaXRpYWwgKiBzaXplb2YoTFBWT0lEKSk7CiAJZHNhUHRyLT5kd01heENvdW50ID0gZHNhUHRyLT5kd0luaXRpYWw7CiAgICAgICAgIGR3SW5kZXggPSAwOwogCWxlbiA9IGxzdHJsZW4zMkEgKChMUFNUUilkd1BhcmFtMyk7CiAJZHNhUHRyLT5wdHJzW2R3SW5kZXhdID0KLQkgICAgKExQU1RSKUhlYXBBbGxvYyAoU3lzdGVtSGVhcCwgSEVBUF9aRVJPX01FTU9SWSwgbGVuKzEpOworCSAgICAoTFBTVFIpSGVhcEFsbG9jIChHZXRQcm9jZXNzSGVhcCAoKSwgSEVBUF9aRVJPX01FTU9SWSwgbGVuKzEpOwogCWxzdHJjcHkzMkEgKGRzYVB0ci0+cHRyc1tkd0luZGV4XSwgKExQU1RSKWR3UGFyYW0zKTsKICAgICB9CiAgICAgZWxzZSB7CkBAIC0xOTcsMTQgKzIzOCwyNiBAQAogCQlkd0luZGV4ID0gZHNhUHRyLT5kd0VudHJ5Q291bnQ7CiAJCWxlbiA9IGxzdHJsZW4zMkEgKChMUFNUUilkd1BhcmFtMyk7CiAJCWRzYVB0ci0+cHRyc1tkd0luZGV4XSA9Ci0JCSAgICAoTFBTVFIpSGVhcEFsbG9jIChTeXN0ZW1IZWFwLCBIRUFQX1pFUk9fTUVNT1JZLCBsZW4rMSk7CisJCSAgICAoTFBTVFIpSGVhcEFsbG9jIChHZXRQcm9jZXNzSGVhcCAoKSwgSEVBUF9aRVJPX01FTU9SWSwgbGVuKzEpOwogCQlsc3RyY3B5MzJBIChkc2FQdHItPnB0cnNbZHdJbmRleF0sIChMUFNUUilkd1BhcmFtMyk7CiAJICAgIH0KIAkgICAgZWxzZSB7Ci0JCUZJWE1FIChjb21tY3RybCwgInJlc2l6aW5nIGFycmF5ISBzdHViIVxuIik7CisJCS8qIGFsbG9jYXRlIG5ldyBwb2ludGVyIGxpc3QgYW5kIGNvcHkgYWxsIHBvaW50ZXJzICovCisJCUxQU1RSICpscE9sZFB0cnMgPSBkc2FQdHItPnB0cnM7CisJCWRzYVB0ci0+cHRycyA9IChMUFNUUiopSGVhcEFsbG9jIChTeXN0ZW1IZWFwLCBIRUFQX1pFUk9fTUVNT1JZLAorCQkJCShkc2FQdHItPmR3SW5pdGlhbCArIGRzYVB0ci0+ZHdHcm93KSAqCisJCQkJc2l6ZW9mKExQVk9JRCkpOworCQltZW1jcHkgKGRzYVB0ci0+cHRycywgbHBPbGRQdHJzLAorCQkJZHNhUHRyLT5kd01heENvdW50ICogc2l6ZW9mKExQVk9JRCkpOworCQlkc2FQdHItPmR3TWF4Q291bnQgKz0gZHNhUHRyLT5kd0dyb3c7CisJCUhlYXBGcmVlIChHZXRQcm9jZXNzSGVhcCAoKSwgMCwgbHBPbGRQdHJzKTsKIAotCQlkd0luZGV4ID0gZHdQYXJhbTI7Ci0KKwkJLyogYWRkIG5ldyBzdHJpbmcgKi8KKwkJZHdJbmRleCA9IGRzYVB0ci0+ZHdFbnRyeUNvdW50OworCQlsZW4gPSBsc3RybGVuMzJBICgoTFBTVFIpZHdQYXJhbTMpOworCQlkc2FQdHItPnB0cnNbZHdJbmRleF0gPQorCQkgICAgKExQU1RSKUhlYXBBbGxvYyAoR2V0UHJvY2Vzc0hlYXAgKCksIEhFQVBfWkVST19NRU1PUlksIGxlbisxKTsKKwkJbHN0cmNweTMyQSAoZHNhUHRyLT5wdHJzW2R3SW5kZXhdLCAoTFBTVFIpZHdQYXJhbTMpOwogCSAgICB9CiAJfQogCWVsc2UgewpAQCAtMjM1LDcgKzI4OCw3IEBACiAgICAgaWYgKGRzYVB0ci0+cHRycykgewogCWlmIChkc2FQdHItPmR3RW50cnlDb3VudCA9PSAxKSB7CiAJICAgIGlmIChkc2FQdHItPnB0cnNbZHdQYXJhbTJdKQotCQlIZWFwRnJlZSAoU3lzdGVtSGVhcCwgMCwgZHNhUHRyLT5wdHJzW2R3UGFyYW0yXSk7CisJCUhlYXBGcmVlIChHZXRQcm9jZXNzSGVhcCAoKSwgMCwgZHNhUHRyLT5wdHJzW2R3UGFyYW0yXSk7CiAJICAgIGRzYVB0ci0+ZHdFbnRyeUNvdW50LS07CiAJfQogCWVsc2UgewpAQCAtMjQzLDExICsyOTYsMTEgQEAKIAkgICAgVFJBQ0UgKGNvbW1jdHJsLCAiY29tcGxleCBkZWxldGUhXG4iKTsKIAogCSAgICBpZiAoZHNhUHRyLT5wdHJzW2R3UGFyYW0yXSkKLQkJSGVhcEZyZWUgKFN5c3RlbUhlYXAsIDAsIGRzYVB0ci0+cHRyc1tkd1BhcmFtMl0pOworCQlIZWFwRnJlZSAoR2V0UHJvY2Vzc0hlYXAgKCksIDAsIGRzYVB0ci0+cHRyc1tkd1BhcmFtMl0pOwogCiAJICAgIGRzYVB0ci0+ZHdFbnRyeUNvdW50LS07CiAJICAgIGRzYVB0ci0+cHRycyA9IAotCQkoTFBTVFIqKUhlYXBBbGxvYyAoU3lzdGVtSGVhcCwgSEVBUF9aRVJPX01FTU9SWSwKKwkJKExQU1RSKilIZWFwQWxsb2MgKEdldFByb2Nlc3NIZWFwICgpLCBIRUFQX1pFUk9fTUVNT1JZLAogCQkJCSAgIGRzYVB0ci0+ZHdFbnRyeUNvdW50ICogc2l6ZW9mKExQVk9JRCkpOwogCSAgICBpZiAoZHdQYXJhbTIgPiAwKSB7CiAJCW1lbWNweSAoJmRzYVB0ci0+cHRyc1swXSwgJm9sZFB0cnNbMF0sCkBAIC0yNTgsMTEgKzMxMSwxMSBAQAogCQltZW1jcHkgKCZkc2FQdHItPnB0cnNbZHdQYXJhbTJdLCAmb2xkUHRyc1tkd1BhcmFtMisxXSwKIAkJCShkc2FQdHItPmR3RW50cnlDb3VudCAtIGR3UGFyYW0yKSAqIHNpemVvZihMUFNUUikpOwogCSAgICB9Ci0JICAgIEhlYXBGcmVlIChTeXN0ZW1IZWFwLCAwLCBvbGRQdHJzKTsKKwkgICAgSGVhcEZyZWUgKEdldFByb2Nlc3NIZWFwICgpLCAwLCBvbGRQdHJzKTsKIAl9CiAKIAlpZiAoZHNhUHRyLT5kd0VudHJ5Q291bnQgPT0gMCkgewotCSAgICBIZWFwRnJlZSAoU3lzdGVtSGVhcCwgMCwgZHNhUHRyLT5wdHJzKTsKKwkgICAgSGVhcEZyZWUgKEdldFByb2Nlc3NIZWFwICgpLCAwLCBkc2FQdHItPnB0cnMpOwogCSAgICBkc2FQdHItPnB0cnMgPSBOVUxMOwogCX0KICAgICB9CkBAIC0zNDEsOSArMzk0LDcwIEBACiB9CiAKIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEUEFfQ3JlYXRlRXggW0NPTUNUTDMyLjM0MF0KKyAqCisgKi8KKworRFdPUkQgV0lOQVBJCitEUEFfQ3JlYXRlRXggKERXT1JEIGR3UGFyYW0xLCBEV09SRCBkd1BhcmFtMikKK3sKKyAgICBGSVhNRSAoY29tbWN0cmwsICIoMHglMDhseCAweCUwOGx4KVxuIiwKKwkgICBkd1BhcmFtMSwgZHdQYXJhbTIpOworCisgICAgcmV0dXJuIDA7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBTZW5kTm90aWZ5IFtDT01DVEwzMi4zNDFdCisgKgorICovCisKK0RXT1JEIFdJTkFQSQorQ09NQ1RMMzJfU2VuZE5vdGlmeSAoRFdPUkQgZHcxLCBEV09SRCBkdzIsIERXT1JEIGR3MywgRFdPUkQgZHc0KQoreworICAgIEZJWE1FIChjb21tY3RybCwgIigweCUwOGx4IDB4JTA4bHggMHglMDhseCAweCUwOGx4KVxuIiwKKwkgICBkdzEsIGR3MiwgZHczLCBkdzQpOworCisgICAgcmV0dXJuIDA7Cit9CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFN0ckNockEgW0NPTUNUTDMyLjM1MF0KKyAqCisgKi8KKwogTFBTVFIgV0lOQVBJCiBDT01DVEwzMl9TdHJDaHJBIChMUFNUUiBscFN0cmluZywgQ0hBUiBjQ2hhcikKIHsKICAgICByZXR1cm4gc3RyY2hyIChscFN0cmluZywgY0NoYXIpOwogfQogCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogU3RyU3RySUEgW0NPTUNUTDMyLjM1MF0KKyAqCisgKiBCVUdTCisgKiAgICAgVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBjYXNlIHNlbnNpdGl2ZSwgYnV0IGl0IG11c3RuJ3QuCisgKi8KKworTFBTVFIgV0lOQVBJCitDT01DVEwzMl9TdHJTdHJJQSAoTFBTVFIgbHBTdHIxLCBMUFNUUiBscFN0cjIpCit7CisgICAgcmV0dXJuIHN0cnN0ciAobHBTdHIxLCBscFN0cjIpOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogU3RyVG9JbnRBIFtDT01DVEwzMi4zNTddCisgKi8KKworSU5UMzIgV0lOQVBJCitDT01DVEwzMl9TdHJUb0ludEEgKExQU1RSIGxwU3RyaW5nKQoreworICAgIHJldHVybiBhdG9pKGxwU3RyaW5nKTsKK30KKwpkaWZmIC0tZ2l0IGEvY29udHJvbHMvY29tbWN0cmwuYyBiL2NvbnRyb2xzL2NvbW1jdHJsLmMKaW5kZXggOGRkZGY1Yi4uMjgzODk3NiAxMDA2NDQKLS0tIGEvY29udHJvbHMvY29tbWN0cmwuYworKysgYi9jb250cm9scy9jb21tY3RybC5jCkBAIC0yLDYgKzIsNyBAQAogICogQ29tbW9uIGNvbnRyb2xzIGZ1bmN0aW9ucwogICoKICAqIENvcHlyaWdodCAxOTk3IERpbWl0cmllIE8uIFBhdW4KKyAqIENvcHlyaWdodCAxOTk4IEVyaWMgS29obAogICoKICAqLwogCkBAIC05LDQzICsxMCw1OCBAQAogI2luY2x1ZGUgImhlYXAuaCIKICNpbmNsdWRlICJjb21tY3RybC5oIgogI2luY2x1ZGUgImhlYWRlci5oIgorI2luY2x1ZGUgImxpc3R2aWV3LmgiCisjaW5jbHVkZSAicGFnZXIuaCIKICNpbmNsdWRlICJwcm9ncmVzcy5oIgorI2luY2x1ZGUgInJlYmFyLmgiCiAjaW5jbHVkZSAic3RhdHVzLmgiCiAjaW5jbHVkZSAidG9vbGJhci5oIgorI2luY2x1ZGUgInRvb2x0aXBzLmgiCisjaW5jbHVkZSAidHJhY2tiYXIuaCIKKyNpbmNsdWRlICJ0cmVldmlldy5oIgogI2luY2x1ZGUgInVwZG93bi5oIgogI2luY2x1ZGUgImRlYnVnLmgiCiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBEcmF3U3RhdHVzVGV4dDMyQSBbQ09NQ1RMMzIuNV1bQ09NQ1RMMzIuMjddCisgKgorICogRHJhd3MgdGV4dCB3aXRoIGJvcmRlcnMsIGxpa2UgaW4gYSBzdGF0dXMgYmFyLgorICoKKyAqIFBBUkFNUworICogICAgIGhkYyAgIFtJXSBoYW5kbGUgdG8gdGhlIHdpbmRvdydzIGRpc3BsYXkgY29udGV4dAorICogICAgIGxwcmMgIFtJXSBwb2ludGVyIHRvIGEgcmVjdGFuZ2xlCisgKiAgICAgdGV4dCAgW0ldIHBvaW50ZXIgdG8gdGhlIHRleHQKKyAqICAgICBzdHlsZSBbSV0gCiAgKi8KLXZvaWQgV0lOQVBJIERyYXdTdGF0dXNUZXh0MzJBKCBIREMzMiBoZGMsIExQUkVDVDMyIGxwcmMsIExQQ1NUUiB0ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVJTlQzMiBzdHlsZSApCisKK1ZPSUQgV0lOQVBJCitEcmF3U3RhdHVzVGV4dDMyQSAoSERDMzIgaGRjLCBMUFJFQ1QzMiBscHJjLCBMUENTVFIgdGV4dCwgVUlOVDMyIHN0eWxlKQogewogICAgIFJFQ1QzMiByID0gKmxwcmM7CiAgICAgVUlOVDMyIGJvcmRlciA9IEJEUl9TVU5LRU5PVVRFUjsKIAotICAgIGlmKHN0eWxlPT1TQlRfUE9QT1VUKQorICAgIGlmIChzdHlsZSA9PSBTQlRfUE9QT1VUKQogICAgICAgYm9yZGVyID0gQkRSX1JBSVNFRE9VVEVSOwotICAgIGVsc2UgaWYoc3R5bGU9PVNCVF9OT0JPUkRFUlMpCisgICAgZWxzZSBpZiAoc3R5bGUgPT0gU0JUX05PQk9SREVSUykKICAgICAgIGJvcmRlciA9IDA7CiAKLSAgICBEcmF3RWRnZTMyKGhkYywgJnIsIGJvcmRlciwgQkZfUkVDVHxCRl9BREpVU1R8QkZfTUlERExFKTsKKyAgICBEcmF3RWRnZTMyIChoZGMsICZyLCBib3JkZXIsIEJGX1JFQ1R8QkZfQURKVVNUfEJGX01JRERMRSk7CiAKICAgICAvKiBub3cgZHJhdyB0ZXh0ICovCiAgICAgaWYgKHRleHQpIHsKLSAgICAgIGludCBvbGRia21vZGUgPSBTZXRCa01vZGUzMihoZGMsIFRSQU5TUEFSRU5UKTsKKyAgICAgIGludCBvbGRia21vZGUgPSBTZXRCa01vZGUzMiAoaGRjLCBUUkFOU1BBUkVOVCk7CiAgICAgICByLmxlZnQgKz0gMzsKLSAgICAgIERyYXdUZXh0MzJBKGhkYywgdGV4dCwgbHN0cmxlbjMyQSh0ZXh0KSwKLQkJICAmciwgRFRfTEVGVHxEVF9WQ0VOVEVSfERUX1NJTkdMRUxJTkUpOyAgCisgICAgICBEcmF3VGV4dDMyQSAoaGRjLCB0ZXh0LCBsc3RybGVuMzJBKHRleHQpLAorCQkgICAmciwgRFRfTEVGVHxEVF9WQ0VOVEVSfERUX1NJTkdMRUxJTkUpOyAgCiAgICAgICBpZiAob2xkYmttb2RlICE9IFRSQU5TUEFSRU5UKQogCVNldEJrTW9kZTMyKGhkYywgb2xkYmttb2RlKTsKICAgICB9Ci0gICAgCiB9CiAKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgRHJhd1N0YXR1c1RleHQzMlcgICAoQ09NQ1RMMzIuMjgpCisgKiBEcmF3U3RhdHVzVGV4dDMyVyBbQ09NQ1RMMzIuMjhdCiAgKi8KIHZvaWQgV0lOQVBJIERyYXdTdGF0dXNUZXh0MzJXKCBIREMzMiBoZGMsIExQUkVDVDMyIGxwcmMsIExQQ1dTVFIgdGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVSU5UMzIgc3R5bGUgKQpAQCAtNTUsNiArNzEsNyBAQAogICBIZWFwRnJlZSggR2V0UHJvY2Vzc0hlYXAoKSwgMCwgcCApOyAgICAgICAgIAogfQogCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogQ3JlYXRlU3RhdHVzV2luZG93MzJBIFtDT01DVEwzMi42XVtDT01DVEwzMi4yMV0KICAqLwpAQCAtNjcsNiArODQsNyBAQAogCQkJICAgcGFyZW50LCB3aWQsIDAsIDApOwogfQogCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIENyZWF0ZVN0YXR1c1dpbmRvdzMyVyAgIChDT01DVEwzMi4yMikKICAqLwpAQCAtMTAyLDggKzEyMCwxNCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBJbml0Q29tbW9uQ29udHJvbHMgW0NPTUNUTDMyLjE3XQogICoKKyAqIFJlZ2lzdGVycyB0aGUgY29tbW9uIGNvbnRyb2xzLgogICoKKyAqIFBBUkFNUworICogICAgIE5vbmUuCiAgKgorICogTk9URVMKKyAqICAgICBDYWxscyBJbml0Q29tbW9uQ29udHJvbHNFeC4KKyAqICAgICBJbml0Q29tbW9uQ29udHJvbHNFeCBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkLgogICovCiAKIFZPSUQgV0lOQVBJCkBAIC0xMjEsOCArMTQ1LDEwIEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIEluaXRDb21tb25Db250cm9sc0V4IFtDT01DVEwzMi44MV0KICAqCisgKiBSZWdpc3RlcnMgdGhlIGNvbW1vbiBjb250cm9scy4KICAqCi0gKgorICogUEFSQU1TCisgKiAgICAgbHBJbml0Q3RybHMgW0ldIHBvaW50ZXIgdG8gYSBJTklUQ09NTU9OQ09OVFJPTFMgc3RydWN0dXJlLgogICovCiAKIEJPT0wzMiBXSU5BUEkKQEAgLTE0MSwyNSArMTY3LDI1IEBACiAKICAgICBzd2l0Y2ggKGxwSW5pdEN0cmxzLT5kd0lDQyAmIGR3TWFzaykgewogICAgICAgY2FzZSBJQ0NfTElTVFZJRVdfQ0xBU1NFUzoKLSAgICAgICAgVFJBQ0UgKGNvbW1jdHJsLCAiTm8gbGlzdHZpZXcgY2xhc3MgaW1wbGVtZW50ZWQhXG4iKTsKLSAgICAgICAgSEVBREVSX1JlZ2lzdGVyKCk7CisgICAgICAgIExJU1RWSUVXX1JlZ2lzdGVyICgpOworICAgICAgICBIRUFERVJfUmVnaXN0ZXIgKCk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgICBjYXNlIElDQ19UUkVFVklFV19DTEFTU0VTOgotICAgICAgICBUUkFDRSAoY29tbWN0cmwsICJObyB0cmVldmlldyBjbGFzcyBpbXBsZW1lbnRlZCFcbiIpOwotICAgICAgICBUUkFDRSAoY29tbWN0cmwsICJObyB0b29sdGlwIGNsYXNzIGltcGxlbWVudGVkIVxuIik7CisgICAgICAgIFRSRUVWSUVXX1JlZ2lzdGVyICgpOworCVRPT0xUSVBTX1JlZ2lzdGVyICgpOwogICAgICAgICBicmVhazsKIAogICAgICAgY2FzZSBJQ0NfQkFSX0NMQVNTRVM6CiAJVE9PTEJBUl9SZWdpc3RlciAoKTsKIAlTVEFUVVNfUmVnaXN0ZXIgKCk7Ci0gICAgICAgIFRSQUNFIChjb21tY3RybCwgIk5vIHRyYWNrYmFyIGNsYXNzIGltcGxlbWVudGVkIVxuIik7Ci0gICAgICAgIFRSQUNFIChjb21tY3RybCwgIk5vIHRvb2x0aXAgY2xhc3MgaW1wbGVtZW50ZWQhXG4iKTsKKwlUUkFDS0JBUl9SZWdpc3RlciAoKTsKKwlUT09MVElQU19SZWdpc3RlciAoKTsKICAgICAgICAgYnJlYWs7CiAKICAgICAgIGNhc2UgSUNDX1RBQl9DTEFTU0VTOgogICAgICAgICBUUkFDRSAoY29tbWN0cmwsICJObyB0YWIgY2xhc3MgaW1wbGVtZW50ZWQhXG4iKTsKLSAgICAgICAgVFJBQ0UgKGNvbW1jdHJsLCAiTm8gdG9vbHRpcCBjbGFzcyBpbXBsZW1lbnRlZCFcbiIpOworCVRPT0xUSVBTX1JlZ2lzdGVyICgpOwogICAgICAgICBVUERPV05fUmVnaXN0ZXIgKCk7CiAgICAgICAgIGJyZWFrOwogCkBAIC0xOTIsNyArMjE4LDcgQEAKICAgICAgICAgYnJlYWs7CiAKICAgICAgIGNhc2UgSUNDX0NPT0xfQ0xBU1NFUzoKLSAgICAgICAgVFJBQ0UgKGNvbW1jdHJsLCAiTm8gcmViYXIgY2xhc3MgaW1wbGVtZW50ZWQhXG4iKTsKKwlSRUJBUl9SZWdpc3RlciAoKTsKICAgICAgICAgYnJlYWs7CiAKICAgICAgIGNhc2UgSUNDX0lOVEVSTkVUX0NMQVNTRVM6CkBAIC0yMDAsNyArMjI2LDcgQEAKICAgICAgICAgYnJlYWs7CiAKICAgICAgIGNhc2UgSUNDX1BBR0VTQ1JPTExFUl9DTEFTUzoKLSAgICAgICAgVFJBQ0UgKGNvbW1jdHJsLCAiTm8gcGFnZSBzY3JvbGxlciBjbGFzcyBpbXBsZW1lbnRlZCFcbiIpOworCVBBR0VSX1JlZ2lzdGVyICgpOwogICAgICAgICBicmVhazsKIAogICAgICAgY2FzZSBJQ0NfTkFUSVZFRk5UQ1RMX0NMQVNTOgpAQCAtMjIwLDkgKzI0NiwxNCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBNZW51SGVscCBbQ09NQ1RMMzIuMl0KICAqCi0gKgotICoKLSAqCisgKiBQQVJBTVMKKyAqICAgICB1TXNnCisgKiAgICAgd1BhcmFtCisgKiAgICAgbFBhcmFtCisgKiAgICAgaE1haW5NZW51CisgKiAgICAgaEluc3QKKyAqICAgICBod25kU3RhdHVzCisgKiAgICAgbHB3SURzCiAgKi8KIAogVk9JRCBXSU5BUEkKQEAgLTI0NCw3ICsyNzUsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgaWYgKEhJV09SRCh3UGFyYW0pICYgTUZfUE9QVVApIHsKLSAgICAgICAgICAgICAgICAgICAgVFJBQ0UgKGNvbW1jdHJsLCAicG9wdXAgbWVudSBzZWxlY3RlZCFcbiIpOworCQkgICAgRklYTUUgKGNvbW1jdHJsLCAicG9wdXAgMHglMDh4IDB4JTA4bHhcbiIsIHdQYXJhbSwgbFBhcmFtKTsKIAogICAgICAgICAgICAgICAgICAgICBzelN0YXR1c1RleHRbMF0gPSAwOwogICAgICAgICAgICAgICAgIH0KQEAgLTI4OSwxNiArMzIwLDI1IEBACiAJCQkoV1BBUkFNMzIpdVN0cnVjdFNpemUsIDApOwogCiAJLyogc2V0IGJpdG1hcCBhbmQgYnV0dG9uIHNpemUgKi8KKwlTZW5kTWVzc2FnZTMyQSAoaHduZFRCLCBUQl9TRVRCSVRNQVBTSVpFLCAwLAorCQkJTUFLRUxQQVJBTSgoV09SRClkeUJpdG1hcCwgKFdPUkQpZHhCaXRtYXApKTsKKyNpZiAwCisJU2VuZE1lc3NhZ2UzMkEgKGh3bmRUQiwgVEJfU0VUQlVUVE9OU0laRSwgMCwKKwkJCU1BS0VMT05HKChXT1JEKWR5QnV0dG9uLCAoV09SRClkeEJ1dHRvbikpOworI2VuZGlmCiAKIAkvKiBhZGQgYml0bWFwcyAqLwotCXRiYWIuaEluc3QgPSBoQk1JbnN0OwotCXRiYWIubklEICAgPSB3Qk1JRDsKLQlTZW5kTWVzc2FnZTMyQSAoaHduZFRCLCBUQl9BRERCSVRNQVAsCi0JCQkoV1BBUkFNMzIpbkJpdG1hcHMsIChMUEFSQU0pJnRiYWIpOworCWlmIChuQml0bWFwcyA+IDApIHsKKwkgICAgdGJhYi5oSW5zdCA9IGhCTUluc3Q7CisJICAgIHRiYWIubklEICAgPSB3Qk1JRDsKKwkgICAgU2VuZE1lc3NhZ2UzMkEgKGh3bmRUQiwgVEJfQUREQklUTUFQLAorCQkJICAgIChXUEFSQU0zMiluQml0bWFwcywgKExQQVJBTSkmdGJhYik7CisJfQogCiAJLyogYWRkIGJ1dHRvbnMgKi8KLQlTZW5kTWVzc2FnZTMyQSAoaHduZFRCLCBUQl9BRERCVVRUT05TMzJBLAotCQkJKFdQQVJBTTMyKWlOdW1CdXR0b25zLCAoTFBBUkFNKWxwQnV0dG9ucyk7CisJaWYgKGlOdW1CdXR0b25zID4gMCkKKwkgICAgU2VuZE1lc3NhZ2UzMkEgKGh3bmRUQiwgVEJfQUREQlVUVE9OUzMyQSwKKwkJCSAgICAoV1BBUkFNMzIpaU51bUJ1dHRvbnMsIChMUEFSQU0pbHBCdXR0b25zKTsKICAgICB9CiAKICAgICByZXR1cm4gaHduZFRCOwpAQCAtMzA4LDIyICszNDgsMTAwIEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIENyZWF0ZU1hcHBlZEJpdG1hcCBbQ09NQ1RMMzIuOF0KICAqCi0gKgotICoKKyAqIFBBUkFNUworICogICAgIGhJbnN0YW5jZQorICogICAgIGlkQml0bWFwCisgKiAgICAgd0ZsYWdzCisgKiAgICAgbHBDb2xvck1hcAorICogICAgIGlOdW1NYXBzCiAgKi8KIAogSEJJVE1BUDMyIFdJTkFQSQogQ3JlYXRlTWFwcGVkQml0bWFwIChISU5TVEFOQ0UzMiBoSW5zdGFuY2UsIElOVDMyIGlkQml0bWFwLCBVSU5UMzIgd0ZsYWdzLAogCQkgICAgTFBDT0xPUk1BUCBscENvbG9yTWFwLCBJTlQzMiBpTnVtTWFwcykKIHsKKyAgICBIR0xPQkFMMzIgaGdsYjsKKyAgICBIUlNSQzMyIGhSc3JjOworICAgIExQQklUTUFQSU5GT0hFQURFUiBscEJpdG1hcCwgbHBCaXRtYXBJbmZvOworICAgIFVJTlQzMiBuU2l6ZSwgbkNvbG9yVGFibGVTaXplOworICAgIERXT1JEICpwQ29sb3JUYWJsZTsKKyAgICBJTlQzMiBpQ29sb3IsIGksIGlNYXBzLCBuV2lkdGgsIG5IZWlnaHQ7CisgICAgSERDMzIgaGRjU2NyZWVuOwogICAgIEhCSVRNQVAzMiBoYm07CisgICAgTFBDT0xPUk1BUCBzeXNDb2xvck1hcDsKKyAgICBDT0xPUk1BUCBpbnRlcm5hbENvbG9yTWFwWzRdID0KKwl7ezB4MDAwMDAwLCAwfSwgezB4ODA4MDgwLCAwfSwgezB4QzBDMEMwLCAwfSwgezB4RkZGRkZGLCAwfX07CiAKLSAgICBGSVhNRSAoY29tbWN0cmwsICJzZW1pLXN0dWIhXG4iKTsKKyAgICAvKiBpbml0aWFsaXplIHBvaW50ZXIgdG8gY29sb3J0YWJsZSBhbmQgZGVmYXVsdCBjb2xvciB0YWJsZSAqLworICAgIGlmIChscENvbG9yTWFwKSB7CisJaU1hcHMgPSBpTnVtTWFwczsKKwlzeXNDb2xvck1hcCA9IGxwQ29sb3JNYXA7CisgICAgfQorICAgIGVsc2UgeworCWludGVybmFsQ29sb3JNYXBbMF0udG8gPSBHZXRTeXNDb2xvcjMyIChDT0xPUl9CVE5URVhUKTsKKwlpbnRlcm5hbENvbG9yTWFwWzFdLnRvID0gR2V0U3lzQ29sb3IzMiAoQ09MT1JfQlROU0hBRE9XKTsKKwlpbnRlcm5hbENvbG9yTWFwWzJdLnRvID0gR2V0U3lzQ29sb3IzMiAoQ09MT1JfQlRORkFDRSk7CisJaW50ZXJuYWxDb2xvck1hcFszXS50byA9IEdldFN5c0NvbG9yMzIgKENPTE9SX0JUTkhJR0hMSUdIVCk7CisJaU1hcHMgPSA0OworCXN5c0NvbG9yTWFwID0gKExQQ09MT1JNQVApaW50ZXJuYWxDb2xvck1hcDsKKyAgICB9CiAKLSAgICBoYm0gPSBMb2FkQml0bWFwMzJBIChoSW5zdGFuY2UsIE1BS0VJTlRSRVNPVVJDRTMyQShpZEJpdG1hcCkpOworICAgIGhSc3JjID0gRmluZFJlc291cmNlMzJBIChoSW5zdGFuY2UsIChMUFNUUilpZEJpdG1hcCwgUlRfQklUTUFQMzJBKTsKKyAgICBpZiAoaFJzcmMgPT0gTlVMTCkKKwlyZXR1cm4gTlVMTDsKKyAgICBoZ2xiID0gTG9hZFJlc291cmNlMzIgKGhJbnN0YW5jZSwgaFJzcmMpOworICAgIGlmIChoZ2xiID09IE5VTEwpCisJcmV0dXJuIE5VTEw7CisgICAgbHBCaXRtYXAgPSAoTFBCSVRNQVBJTkZPSEVBREVSKUxvY2tSZXNvdXJjZTMyIChoZ2xiKTsKKyAgICBpZiAobHBCaXRtYXAgPT0gTlVMTCkKKwlyZXR1cm4gTlVMTDsKKworICAgIG5Db2xvclRhYmxlU2l6ZSA9ICgxIDw8IGxwQml0bWFwLT5iaUJpdENvdW50KTsKKyAgICBuU2l6ZSA9IGxwQml0bWFwLT5iaVNpemUgKyBuQ29sb3JUYWJsZVNpemUgKiBzaXplb2YoUkdCUVVBRCk7CisgICAgbHBCaXRtYXBJbmZvID0gKExQQklUTUFQSU5GT0hFQURFUilHbG9iYWxBbGxvYzMyIChHTUVNX0ZJWEVELCBuU2l6ZSk7CisgICAgaWYgKGxwQml0bWFwSW5mbyA9PSBOVUxMKQorCXJldHVybiBOVUxMOworICAgIFJ0bE1vdmVNZW1vcnkgKGxwQml0bWFwSW5mbywgbHBCaXRtYXAsIG5TaXplKTsKKworICAgIHBDb2xvclRhYmxlID0gKERXT1JEKikoKChMUEJZVEUpbHBCaXRtYXBJbmZvKSsoVUlOVDMyKWxwQml0bWFwSW5mby0+YmlTaXplKTsKKworICAgIGZvciAoaUNvbG9yID0gMDsgaUNvbG9yIDwgbkNvbG9yVGFibGVTaXplOyBpQ29sb3IrKykgeworCWZvciAoaSA9IDA7IGkgPCBpTWFwczsgaSsrKSB7CisJICAgIGlmIChwQ29sb3JUYWJsZVtpQ29sb3JdID09IHN5c0NvbG9yTWFwW2ldLmZyb20pIHsKKyNpZiAwCisJCWlmICh3RmxhZ3MgJiBDQlNfTUFTS0VEKSB7CisJCSAgICBpZiAoc3lzQ29sb3JNYXBbaV0udG8gIT0gQ09MT1JfQlROVEVYVCkKKwkJCXBDb2xvclRhYmxlW2lDb2xvcl0gPSBSR0IoMjU1LCAyNTUsIDI1NSk7CisJCX0KKwkJZWxzZQorI2VuZGlmCisJCSAgICBwQ29sb3JUYWJsZVtpQ29sb3JdID0gc3lzQ29sb3JNYXBbaV0udG87CisJCWJyZWFrOworCSAgICB9CisJfQorICAgIH0KKworICAgIG5XaWR0aCAgPSAoSU5UMzIpbHBCaXRtYXBJbmZvLT5iaVdpZHRoOworICAgIG5IZWlnaHQgPSAoSU5UMzIpbHBCaXRtYXBJbmZvLT5iaUhlaWdodDsKKyAgICBoZGNTY3JlZW4gPSBHZXREQzMyIChOVUxMKTsKKyAgICBoYm0gPSBDcmVhdGVDb21wYXRpYmxlQml0bWFwMzIgKGhkY1NjcmVlbiwgbldpZHRoLCBuSGVpZ2h0KTsKKyAgICBpZiAoaGJtKSB7CisJSERDMzIgaGRjRHN0ID0gQ3JlYXRlQ29tcGF0aWJsZURDMzIgKGhkY1NjcmVlbik7CisJSEJJVE1BUDMyIGhibU9sZCA9IFNlbGVjdE9iamVjdDMyIChoZGNEc3QsIGhibSk7CisJTFBCWVRFIGxwQml0cyA9IChMUEJZVEUpKGxwQml0bWFwICsgMSk7CisJbHBCaXRzICs9ICgxIDw8IChscEJpdG1hcEluZm8tPmJpQml0Q291bnQpKSAqIHNpemVvZihSR0JRVUFEKTsKKwlTdHJldGNoRElCaXRzMzIgKGhkY0RzdCwgMCwgMCwgbldpZHRoLCBuSGVpZ2h0LCAwLCAwLCBuV2lkdGgsIG5IZWlnaHQsCisJCSAgICAgICAgIGxwQml0cywgKExQQklUTUFQSU5GTylscEJpdG1hcEluZm8sIERJQl9SR0JfQ09MT1JTLAorCQkgICAgICAgICBTUkNDT1BZKTsKKwlTZWxlY3RPYmplY3QzMiAoaGRjRHN0LCBoYm1PbGQpOworCURlbGV0ZURDMzIgKGhkY0RzdCk7CisgICAgfQorICAgIFJlbGVhc2VEQzMyIChOVUxMLCBoZGNTY3JlZW4pOworICAgIEdsb2JhbEZyZWUzMiAoKEhHTE9CQUwzMilscEJpdG1hcEluZm8pOworICAgIEZyZWVSZXNvdXJjZTMyIChoZ2xiKTsKIAogICAgIHJldHVybiBoYm07Ci0gfQorfQogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMzU4LDI4ICs0NzYsNjEgQEAKIFZPSUQgV0lOQVBJCiBHZXRFZmZlY3RpdmVDbGllbnRSZWN0IChIV05EMzIgaHduZCwgTFBSRUNUMzIgbHBSZWN0LCBMUElOVDMyIGxwSW5mbykKIHsKLSAgICBSRUNUMzIgcmNDbGllbnQsIHJjQ3RybDsKLSAgICBJTlQzMiAgaWRDdHJsLCAqbHBSdW47CisgICAgUkVDVDMyIHJjQ3RybDsKKyAgICBJTlQzMiAgKmxwUnVuOworICAgIEhXTkQzMiBod25kQ3RybDsKIAotICAgIFRSQUNFIChjb21tY3RybCwgImh3bmQ9MHglMDhseCBscFJlY3Q9MHglMDhseCBscEluZm89MHglMDhseFxuIiwKKyAgICBUUkFDRSAoY29tbWN0cmwsICIoMHglMDhseCAweCUwOGx4IDB4JTA4bHgpXG4iLAogCSAgIChEV09SRClod25kLCAoRFdPUkQpbHBSZWN0LCAoRFdPUkQpbHBJbmZvKTsKIAotICAgIEdldENsaWVudFJlY3QzMiAoaHduZCwgJnJjQ2xpZW50KTsKLSNpZiAwCisgICAgR2V0Q2xpZW50UmVjdDMyIChod25kLCBscFJlY3QpOwogICAgIGxwUnVuID0gbHBJbmZvOwogCiAgICAgZG8gewotCWxwUnVuICs9IDM7Ci0JaWRDdHJsID0gKmxwUnVuOwotCWlmIChpZEN0cmwpIHsKLQkgICAgVFJBQ0UgKGNvbW1jdHJsLCAiY29udHJvbCBpZCAweCV4XG4iLCBpZEN0cmwpOwotCSAgICBHZXRXaW5kb3dSZWN0MzIgKEdldERsZ0l0ZW0zMiAoaHduZCwgaWRDdHJsKSwgJnJjQ3RybCk7CisJbHBSdW4gKz0gMjsKKwlpZiAoKmxwUnVuID09IDApCisJICAgIHJldHVybjsKKwlscFJ1bisrOworCWh3bmRDdHJsID0gR2V0RGxnSXRlbTMyIChod25kLCAqbHBSdW4pOworCWlmIChHZXRXaW5kb3dMb25nMzJBIChod25kQ3RybCwgR1dMX1NUWUxFKSAmIFdTX1ZJU0lCTEUpIHsKKwkgICAgVFJBQ0UgKGNvbW1jdHJsLCAiY29udHJvbCBpZCAweCV4XG4iLCAqbHBSdW4pOworCSAgICBHZXRXaW5kb3dSZWN0MzIgKGh3bmRDdHJsLCAmcmNDdHJsKTsKIAkgICAgTWFwV2luZG93UG9pbnRzMzIgKE5VTEwsIGh3bmQsIChMUFBPSU5UMzIpJnJjQ3RybCwgMik7Ci0JICAgIFN1YnRyYWN0UmVjdDMyICgmcmNDbGllbnQsICZyY0NsaWVudCwgJnJjQ3RybCk7Ci0JICAgIGxwUnVuKys7CisJICAgIFN1YnRyYWN0UmVjdDMyIChscFJlY3QsIGxwUmVjdCwgJnJjQ3RybCk7CiAJfQotICAgIH0gd2hpbGUgKGlkQ3RybCk7CisJbHBSdW4rKzsKKyAgICB9IHdoaWxlICgqbHBSdW4pOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogU2hvd0hpZGVNZW51Q3RsIFtDT01DVEwzMi4zXQorICoKKyAqIFBBUkFNUworICogICAgIGh3bmQgICBbSV0gaGFuZGxlIHRvIHRoZSBjbGllbnQgd2luZG93LgorICogICAgIHVGbGFncyBbSV0gbWVudSBjb21tYW5kIGlkCisgKiAgICAgbHBJbmZvIFtJXSBwb2ludGVyIHRvIGFuIGFycmF5IG9mIGludGVnZXJzCisgKgorICogTk9URVMKKyAqLworCitCT09MMzIgV0lOQVBJCitTaG93SGlkZU1lbnVDdGwgKEhXTkQzMiBod25kLCBVSU5UMzIgdUZsYWdzLCBMUElOVDMyIGxwSW5mbykKK3sKKyAgICBGSVhNRSAoY29tbWN0cmwsICIoMHglMDh4IDB4JTA4eCAlcCk6IGVtcHR5IHN0dWIhXG4iLAorCSAgIGh3bmQsIHVGbGFncywgbHBJbmZvKTsKKyNpZiAwCisgICAgaWYgKEdldE1lbnVTdGF0ZSAobHBJbmZvWzFdLCB1RmxhZ3MsIE1GX0JZQ09NTUFORCkgJiBNRlNfQ0hFQ0tFRCkgeworCS8qIGNoZWNrZWQgLT4gaGlkZSBjb250cm9sICovCisKKyAgICB9CisgICAgZWxzZSB7CisJLyogbm90IGNoZWNrZWQgLT4gc2hvdyBjb250cm9sICovCisKKyAgICB9CisKICNlbmRpZgotICAgIENvcHlSZWN0MzIgKGxwUmVjdCwgJnJjQ2xpZW50KTsKKworICAgIHJldHVybiBGQUxTRTsKIH0KIApkaWZmIC0tZ2l0IGEvY29udHJvbHMvbGlzdHZpZXcuYyBiL2NvbnRyb2xzL2xpc3R2aWV3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJkNDYyMgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyb2xzL2xpc3R2aWV3LmMKQEAgLTAsMCArMSwyNDUgQEAKKy8qCisgKiBMaXN0dmlldyBjb250cm9sCisgKgorICogQ29weXJpZ2h0IDE5OTggRXJpYyBLb2hsCisgKgorICogTk9URVMKKyAqICAgVGhpcyBpcyBqdXN0IGEgZHVtbXkgY29udHJvbC4gQW4gYXV0aG9yIGlzIG5lZWRlZCEgQW55IHZvbHVudGVlcnM/CisgKiAgIEkgd2lsbCBvbmx5IGltcHJvdmUgdGhpcyBjb250cm9sIG9uY2UgaW4gYSB3aGlsZS4KKyAqICAgICBFcmljIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KKyAqCisgKiBUT0RPOgorICogICAtIEFsbCBtZXNzYWdlcy4KKyAqICAgLSBBbGwgbm90aWZpY2F0aW9ucy4KKyAqLworCisjaW5jbHVkZSAid2luZG93cy5oIgorI2luY2x1ZGUgImNvbW1jdHJsLmgiCisjaW5jbHVkZSAibGlzdHZpZXcuaCIKKyNpbmNsdWRlICJoZWFwLmgiCisjaW5jbHVkZSAid2luLmgiCisjaW5jbHVkZSAiZGVidWcuaCIKKworCisjZGVmaW5lIExJU1RWSUVXX0dldEluZm9QdHIod25kUHRyKSAoKExJU1RWSUVXX0lORk8gKil3bmRQdHItPndFeHRyYVswXSkKKworCitzdGF0aWMgVk9JRAorTElTVFZJRVdfUmVmcmVzaCAoV05EICp3bmRQdHIsIEhEQzMyIGhkYykKK3sKKyAgICBMSVNUVklFV19JTkZPICppbmZvUHRyID0gTElTVFZJRVdfR2V0SW5mb1B0cih3bmRQdHIpOworCisKKworfQorCisKKworc3RhdGljIExSRVNVTFQKK0xJU1RWSUVXX1NldEJrQ29sb3IgKFdORCAqd25kUHRyLCBXUEFSQU0zMiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCit7CisgICAgTElTVFZJRVdfSU5GTyAqaW5mb1B0ciA9IExJU1RWSUVXX0dldEluZm9QdHIod25kUHRyKTsKKworICAgIGlmICghKGluZm9QdHIpKSByZXR1cm4gRkFMU0U7CisKKyAgICAvKiBzZXQgYmFja2dyb3VuZCBjb2xvciAqLworICAgIGluZm9QdHItPmNsckJrID0gKENPTE9SUkVGKWxQYXJhbTsKKworICAgIHJldHVybiBUUlVFOworfQorCisKK3N0YXRpYyBMUkVTVUxUCitMSVNUVklFV19TZXRJbWFnZUxpc3QgKFdORCAqd25kUHRyLCBXUEFSQU0zMiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCit7CisgICAgTElTVFZJRVdfSU5GTyAqaW5mb1B0ciA9IExJU1RWSUVXX0dldEluZm9QdHIod25kUHRyKTsKKworICAgIGZwcmludGYgKHN0ZGVyciwgIkxJU1RWSUVXOiBTZXRJbWFnZUxpc3QgKDB4JTA4eCAweCUwOGx4KVxuIiwKKwkgICAgIHdQYXJhbSwgbFBhcmFtKTsKKworICAgIHJldHVybiAwOworfQorCisKK3N0YXRpYyBMUkVTVUxUCitMSVNUVklFV19DcmVhdGUgKFdORCAqd25kUHRyLCBXUEFSQU0zMiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCit7CisgICAgTElTVFZJRVdfSU5GTyAqaW5mb1B0ciA9IExJU1RWSUVXX0dldEluZm9QdHIod25kUHRyKTsKKworICAgIC8qIGluaXRpYWxpemUgaW5mbyBzdHJ1Y3R1cmUgKi8KKyAgICBpbmZvUHRyLT5jbHJCayA9IENMUl9OT05FOworCisgICAgcmV0dXJuIDA7Cit9CisKKworc3RhdGljIExSRVNVTFQKK0xJU1RWSUVXX0Rlc3Ryb3kgKFdORCAqd25kUHRyLCBXUEFSQU0zMiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCit7CisgICAgTElTVFZJRVdfSU5GTyAqaW5mb1B0ciA9IExJU1RWSUVXX0dldEluZm9QdHIod25kUHRyKTsKKworCisgICAgcmV0dXJuIDA7Cit9CisKKworc3RhdGljIExSRVNVTFQKK0xJU1RWSUVXX0VyYXNlQmFja2dyb3VuZCAoV05EICp3bmRQdHIsIFdQQVJBTTMyIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3sKKyAgICBMSVNUVklFV19JTkZPICppbmZvUHRyID0gTElTVFZJRVdfR2V0SW5mb1B0cih3bmRQdHIpOworCisgICAgaWYgKGluZm9QdHItPmNsckJrID09IENMUl9OT05FKSB7CisJcmV0dXJuIFNlbmRNZXNzYWdlMzJBIChHZXRQYXJlbnQzMiAod25kUHRyLT5od25kU2VsZiksCisJCQkgICAgICAgV01fRVJBU0VCS0dORCwgd1BhcmFtLCBsUGFyYW0pOworICAgIH0KKyAgICBlbHNlIHsKKwlSRUNUMzIgcmVjdDsKKwlIQlJVU0gzMiBoQnJ1c2ggPSBDcmVhdGVTb2xpZEJydXNoMzIgKGluZm9QdHItPmNsckJrKTsKKwlHZXRDbGllbnRSZWN0MzIgKHduZFB0ci0+aHduZFNlbGYsICZyZWN0KTsKKwlGaWxsUmVjdDMyICgoSERDMzIpd1BhcmFtLCAmcmVjdCwgaEJydXNoKTsKKwlEZWxldGVPYmplY3QzMiAoaEJydXNoKTsKKwlyZXR1cm4gRkFMU0U7CisgICAgfQorICAgIHJldHVybiBGQUxTRTsKK30KKworCitzdGF0aWMgTFJFU1VMVAorTElTVFZJRVdfTkNDcmVhdGUgKFdORCAqd25kUHRyLCBXUEFSQU0zMiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCit7CisgICAgTElTVFZJRVdfSU5GTyAqaW5mb1B0cjsKKworICAgIC8qIGFsbG9jYXRlIG1lbW9yeSBmb3IgaW5mbyBzdHJ1Y3R1cmUgKi8KKyAgICBpbmZvUHRyID0gKExJU1RWSUVXX0lORk8gKilIZWFwQWxsb2MgKEdldFByb2Nlc3NIZWFwICgpLCBIRUFQX1pFUk9fTUVNT1JZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoTElTVFZJRVdfSU5GTykpOworICAgIHduZFB0ci0+d0V4dHJhWzBdID0gKERXT1JEKWluZm9QdHI7CisKKyAgICBpZiAoaW5mb1B0ciA9PSBOVUxMKSB7CisJRVJSIChsaXN0dmlldywgImNvdWxkIG5vdCBhbGxvY2F0ZSBpbmZvIG1lbW9yeSFcbiIpOworCXJldHVybiAwOworICAgIH0KKworICAgIGlmICgoTElTVFZJRVdfSU5GTyopd25kUHRyLT53RXh0cmFbMF0gIT0gaW5mb1B0cikgeworCUVSUiAobGlzdHZpZXcsICJwb2ludGVyIGFzc2lnbm1lbnQgZXJyb3IhXG4iKTsKKwlyZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1cm4gRGVmV2luZG93UHJvYzMyQSAod25kUHRyLT5od25kU2VsZiwgV01fTkNDUkVBVEUsIHdQYXJhbSwgbFBhcmFtKTsKK30KKworCitzdGF0aWMgTFJFU1VMVAorTElTVFZJRVdfTkNEZXN0cm95IChXTkQgKnduZFB0ciwgV1BBUkFNMzIgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQoreworICAgIExJU1RWSUVXX0lORk8gKmluZm9QdHIgPSBMSVNUVklFV19HZXRJbmZvUHRyKHduZFB0cik7CisKKworCisKKyAgICAvKiBmcmVlIGxpc3QgdmlldyBpbmZvIGRhdGEgKi8KKyAgICBIZWFwRnJlZSAoR2V0UHJvY2Vzc0hlYXAgKCksIDAsIGluZm9QdHIpOworCisgICAgcmV0dXJuIDA7Cit9CisKKworc3RhdGljIExSRVNVTFQKK0xJU1RWSUVXX1BhaW50IChXTkQgKnduZFB0ciwgV1BBUkFNMzIgd1BhcmFtKQoreworICAgIEhEQzMyIGhkYzsKKyAgICBQQUlOVFNUUlVDVDMyIHBzOworCisgICAgaGRjID0gd1BhcmFtPT0wID8gQmVnaW5QYWludDMyICh3bmRQdHItPmh3bmRTZWxmLCAmcHMpIDogKEhEQzMyKXdQYXJhbTsKKyAgICBMSVNUVklFV19SZWZyZXNoICh3bmRQdHIsIGhkYyk7CisgICAgaWYgKCF3UGFyYW0pCisJRW5kUGFpbnQzMiAod25kUHRyLT5od25kU2VsZiwgJnBzKTsKKyAgICByZXR1cm4gMDsKK30KKworCitMUkVTVUxUIFdJTkFQSQorTGlzdHZpZXdXaW5kb3dQcm9jIChIV05EMzIgaHduZCwgVUlOVDMyIHVNc2csIFdQQVJBTTMyIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3sKKyAgICBXTkQgKnduZFB0ciA9IFdJTl9GaW5kV25kUHRyKGh3bmQpOworCisgICAgc3dpdGNoICh1TXNnKQorICAgIHsKKworCWNhc2UgTFZNX1NFVEJLQ09MT1I6CisJICAgIHJldHVybiBMSVNUVklFV19TZXRCa0NvbG9yICh3bmRQdHIsIHdQYXJhbSwgbFBhcmFtKTsKKworCQorCWNhc2UgTFZNX1NFVElNQUdFTElTVDoKKwkgICAgcmV0dXJuIExJU1RWSUVXX1NldEltYWdlTGlzdCAod25kUHRyLCB3UGFyYW0sIGxQYXJhbSk7CisKKworCisKKy8vCWNhc2UgV01fQ0hBUjoKKy8vCWNhc2UgV01fQ09NTUFORDoKKworCWNhc2UgV01fQ1JFQVRFOgorCSAgICByZXR1cm4gTElTVFZJRVdfQ3JlYXRlICh3bmRQdHIsIHdQYXJhbSwgbFBhcmFtKTsKKworCWNhc2UgV01fREVTVFJPWToKKwkgICAgcmV0dXJuIExJU1RWSUVXX0Rlc3Ryb3kgKHduZFB0ciwgd1BhcmFtLCBsUGFyYW0pOworCisJY2FzZSBXTV9FUkFTRUJLR05EOgorCSAgICByZXR1cm4gTElTVFZJRVdfRXJhc2VCYWNrZ3JvdW5kICh3bmRQdHIsIHdQYXJhbSwgbFBhcmFtKTsKKworLy8JY2FzZSBXTV9HRVRETEdDT0RFOgorLy8JY2FzZSBXTV9HRVRGT05UOgorLy8JY2FzZSBXTV9IU0NST0xMOgorCisvLwljYXNlIFdNX01PVVNFTU9WRToKKy8vCSAgICByZXR1cm4gTElTVFZJRVdfTW91c2VNb3ZlICh3bmRQdHIsIHdQYXJhbSwgbFBhcmFtKTsKKworCWNhc2UgV01fTkNDUkVBVEU6CisJICAgIHJldHVybiBMSVNUVklFV19OQ0NyZWF0ZSAod25kUHRyLCB3UGFyYW0sIGxQYXJhbSk7CisKKwljYXNlIFdNX05DREVTVFJPWToKKwkgICAgcmV0dXJuIExJU1RWSUVXX05DRGVzdHJveSAod25kUHRyLCB3UGFyYW0sIGxQYXJhbSk7CisKKy8vCWNhc2UgV01fTk9USUZZOgorCisJY2FzZSBXTV9QQUlOVDoKKwkgICAgcmV0dXJuIExJU1RWSUVXX1BhaW50ICh3bmRQdHIsIHdQYXJhbSk7CisKKy8vCWNhc2UgV01fUkJVVFRPTkRPV046CisvLwljYXNlIFdNX1NFVEZPQ1VTOgorLy8JY2FzZSBXTV9TRVRGT05UOgorLy8JY2FzZSBXTV9TRVRSRURSQVc6CisvLwljYXNlIFdNX1RJTUVSOgorLy8JY2FzZSBXTV9WU0NST0xMOgorLy8JY2FzZSBXTV9XSU5ET1dQT1NDSEFOR0VEOgorLy8JY2FzZSBXTV9XSU5JTklDSEFOR0U6CisKKwlkZWZhdWx0OgorCSAgICBpZiAodU1zZyA+PSBXTV9VU0VSKQorCQlFUlIgKGxpc3R2aWV3LCAidW5rbm93biBtc2cgJTA0eCB3cD0lMDh4IGxwPSUwOGx4XG4iLAorCQkgICAgIHVNc2csIHdQYXJhbSwgbFBhcmFtKTsKKwkgICAgcmV0dXJuIERlZldpbmRvd1Byb2MzMkEgKGh3bmQsIHVNc2csIHdQYXJhbSwgbFBhcmFtKTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKKwordm9pZAorTElTVFZJRVdfUmVnaXN0ZXIgKHZvaWQpCit7CisgICAgV05EQ0xBU1MzMkEgd25kQ2xhc3M7CisKKyAgICBpZiAoR2xvYmFsRmluZEF0b20zMkEgKFdDX0xJU1RWSUVXMzJBKSkgcmV0dXJuOworCisgICAgWmVyb01lbW9yeSAoJnduZENsYXNzLCBzaXplb2YoV05EQ0xBU1MzMkEpKTsKKyAgICB3bmRDbGFzcy5zdHlsZSAgICAgICAgID0gQ1NfR0xPQkFMQ0xBU1MgfCBDU19EQkxDTEtTOworICAgIHduZENsYXNzLmxwZm5XbmRQcm9jICAgPSAoV05EUFJPQzMyKUxpc3R2aWV3V2luZG93UHJvYzsKKyAgICB3bmRDbGFzcy5jYkNsc0V4dHJhICAgID0gMDsKKyAgICB3bmRDbGFzcy5jYlduZEV4dHJhICAgID0gc2l6ZW9mKExJU1RWSUVXX0lORk8gKik7CisgICAgd25kQ2xhc3MuaEN1cnNvciAgICAgICA9IExvYWRDdXJzb3IzMkEgKDAsIElEQ19BUlJPVzMyQSk7CisgICAgd25kQ2xhc3MuaGJyQmFja2dyb3VuZCA9IChIQlJVU0gzMikoQ09MT1JfV0lORE9XICsgMSk7CisgICAgd25kQ2xhc3MubHBzekNsYXNzTmFtZSA9IFdDX0xJU1RWSUVXMzJBOworIAorICAgIFJlZ2lzdGVyQ2xhc3MzMkEgKCZ3bmRDbGFzcyk7Cit9CisKZGlmZiAtLWdpdCBhL2NvbnRyb2xzL3BhZ2VyLmMgYi9jb250cm9scy9wYWdlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4NWU2MGEKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cm9scy9wYWdlci5jCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBQYWdlciBjb250cm9sCisgKgorICogQ29weXJpZ2h0IDE5OTggRXJpYyBLb2hsCisgKgorICogTk9URVMKKyAqICAgVGhpcyBpcyBqdXN0IGEgZHVtbXkgY29udHJvbC4gQW4gYXV0aG9yIGlzIG5lZWRlZCEgQW55IHZvbHVudGVlcnM/CisgKiAgIEkgd2lsbCBvbmx5IGltcHJvdmUgdGhpcyBjb250cm9sIG9uY2UgaW4gYSB3aGlsZS4KKyAqICAgICBFcmljIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KKyAqCisgKiBUT0RPOgorICogICAtIEFsbCBtZXNzYWdlcy4KKyAqICAgLSBBbGwgbm90aWZpY2F0aW9ucy4KKyAqLworCisjaW5jbHVkZSAid2luZG93cy5oIgorI2luY2x1ZGUgImNvbW1jdHJsLmgiCisjaW5jbHVkZSAicGFnZXIuaCIKKyNpbmNsdWRlICJoZWFwLmgiCisjaW5jbHVkZSAid2luLmgiCisjaW5jbHVkZSAiZGVidWcuaCIKKworCisjZGVmaW5lIFBBR0VSX0dldEluZm9QdHIod25kUHRyKSAoKFBBR0VSX0lORk8gKil3bmRQdHItPndFeHRyYVswXSkKKworCitMUkVTVUxUIFdJTkFQSQorUGFnZXJXaW5kb3dQcm9jIChIV05EMzIgaHduZCwgVUlOVDMyIHVNc2csIFdQQVJBTTMyIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3sKKyAgICBXTkQgKnduZFB0ciA9IFdJTl9GaW5kV25kUHRyKGh3bmQpOworCisgICAgc3dpdGNoICh1TXNnKQorICAgIHsKKy8vCWNhc2UgV01fQ1JFQVRFOgorLy8JICAgIHJldHVybiBQQUdFUl9DcmVhdGUgKHduZFB0ciwgd1BhcmFtLCBsUGFyYW0pOworCisvLwljYXNlIFdNX0RFU1RST1k6CisvLwkgICAgcmV0dXJuIFBBR0VSX0Rlc3Ryb3kgKHduZFB0ciwgd1BhcmFtLCBsUGFyYW0pOworCisvLwljYXNlIFdNX01PVVNFTU9WRToKKy8vCSAgICByZXR1cm4gUEFHRVJfTW91c2VNb3ZlICh3bmRQdHIsIHdQYXJhbSwgbFBhcmFtKTsKKworLy8JY2FzZSBXTV9QQUlOVDoKKy8vCSAgICByZXR1cm4gUEFHRVJfUGFpbnQgKHduZFB0ciwgd1BhcmFtKTsKKworCisJZGVmYXVsdDoKKwkgICAgaWYgKHVNc2cgPj0gV01fVVNFUikKKwkJRVJSIChwYWdlciwgInVua25vd24gbXNnICUwNHggd3A9JTA4eCBscD0lMDhseFxuIiwKKwkJICAgICB1TXNnLCB3UGFyYW0sIGxQYXJhbSk7CisJICAgIHJldHVybiBEZWZXaW5kb3dQcm9jMzJBIChod25kLCB1TXNnLCB3UGFyYW0sIGxQYXJhbSk7CisgICAgfQorICAgIHJldHVybiAwOworfQorCisKK3ZvaWQKK1BBR0VSX1JlZ2lzdGVyICh2b2lkKQoreworICAgIFdORENMQVNTMzJBIHduZENsYXNzOworCisgICAgaWYgKEdsb2JhbEZpbmRBdG9tMzJBIChXQ19QQUdFU0NST0xMRVIzMkEpKSByZXR1cm47CisKKyAgICBaZXJvTWVtb3J5ICgmd25kQ2xhc3MsIHNpemVvZihXTkRDTEFTUzMyQSkpOworICAgIHduZENsYXNzLnN0eWxlICAgICAgICAgPSBDU19HTE9CQUxDTEFTUyB8IENTX0RCTENMS1MgfCBDU19TQVZFQklUUzsKKyAgICB3bmRDbGFzcy5scGZuV25kUHJvYyAgID0gKFdORFBST0MzMilQYWdlcldpbmRvd1Byb2M7CisgICAgd25kQ2xhc3MuY2JDbHNFeHRyYSAgICA9IDA7CisgICAgd25kQ2xhc3MuY2JXbmRFeHRyYSAgICA9IHNpemVvZihQQUdFUl9JTkZPICopOworICAgIHduZENsYXNzLmhDdXJzb3IgICAgICAgPSBMb2FkQ3Vyc29yMzJBICgwLCBJRENfQVJST1czMkEpOworICAgIHduZENsYXNzLmhickJhY2tncm91bmQgPSAwOworICAgIHduZENsYXNzLmxwc3pDbGFzc05hbWUgPSBXQ19QQUdFU0NST0xMRVIzMkE7CisgCisgICAgUmVnaXN0ZXJDbGFzczMyQSAoJnduZENsYXNzKTsKK30KKwpkaWZmIC0tZ2l0IGEvY29udHJvbHMvcmViYXIuYyBiL2NvbnRyb2xzL3JlYmFyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI4MGNmOQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyb2xzL3JlYmFyLmMKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIFJlYmFyIGNvbnRyb2wKKyAqCisgKiBDb3B5cmlnaHQgMTk5OCBFcmljIEtvaGwKKyAqCisgKiBOT1RFUworICogICBUaGlzIGlzIGp1c3QgYSBkdW1teSBjb250cm9sLiBBbiBhdXRob3IgaXMgbmVlZGVkISBBbnkgdm9sdW50ZWVycz8KKyAqICAgSSB3aWxsIG9ubHkgaW1wcm92ZSB0aGlzIGNvbnRyb2wgb25jZSBpbiBhIHdoaWxlLgorICogICAgIEVyaWMgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgorICoKKyAqIFRPRE86CisgKiAgIC0gQWxsIG1lc3NhZ2VzLgorICogICAtIEFsbCBub3RpZmljYXRpb25zLgorICovCisKKyNpbmNsdWRlICJ3aW5kb3dzLmgiCisjaW5jbHVkZSAiY29tbWN0cmwuaCIKKyNpbmNsdWRlICJyZWJhci5oIgorI2luY2x1ZGUgImhlYXAuaCIKKyNpbmNsdWRlICJ3aW4uaCIKKyNpbmNsdWRlICJkZWJ1Zy5oIgorCisKKyNkZWZpbmUgUkVCQVJfR2V0SW5mb1B0cih3bmRQdHIpICgoUkVCQVJfSU5GTyAqKXduZFB0ci0+d0V4dHJhWzBdKQorCisKK0xSRVNVTFQgV0lOQVBJCitSZWJhcldpbmRvd1Byb2MgKEhXTkQzMiBod25kLCBVSU5UMzIgdU1zZywgV1BBUkFNMzIgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQoreworICAgIFdORCAqd25kUHRyID0gV0lOX0ZpbmRXbmRQdHIoaHduZCk7CisKKyAgICBzd2l0Y2ggKHVNc2cpCisgICAgeworLy8JY2FzZSBXTV9DUkVBVEU6CisvLwkgICAgcmV0dXJuIFJFQkFSX0NyZWF0ZSAod25kUHRyLCB3UGFyYW0sIGxQYXJhbSk7CisKKy8vCWNhc2UgV01fREVTVFJPWToKKy8vCSAgICByZXR1cm4gUkVCQVJfRGVzdHJveSAod25kUHRyLCB3UGFyYW0sIGxQYXJhbSk7CisKKy8vCWNhc2UgV01fR0VURk9OVDoKKworLy8JY2FzZSBXTV9NT1VTRU1PVkU6CisvLwkgICAgcmV0dXJuIFJFQkFSX01vdXNlTW92ZSAod25kUHRyLCB3UGFyYW0sIGxQYXJhbSk7CisKKy8vCWNhc2UgV01fUEFJTlQ6CisvLwkgICAgcmV0dXJuIFJFQkFSX1BhaW50ICh3bmRQdHIsIHdQYXJhbSk7CisKKy8vCWNhc2UgV01fU0VURk9OVDoKKworLy8JY2FzZSBXTV9USU1FUjoKKworLy8JY2FzZSBXTV9XSU5JTklDSEFOR0U6CisKKwlkZWZhdWx0OgorCSAgICBpZiAodU1zZyA+PSBXTV9VU0VSKQorCQlFUlIgKHJlYmFyLCAidW5rbm93biBtc2cgJTA0eCB3cD0lMDh4IGxwPSUwOGx4XG4iLAorCQkgICAgIHVNc2csIHdQYXJhbSwgbFBhcmFtKTsKKwkgICAgcmV0dXJuIERlZldpbmRvd1Byb2MzMkEgKGh3bmQsIHVNc2csIHdQYXJhbSwgbFBhcmFtKTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKKwordm9pZAorUkVCQVJfUmVnaXN0ZXIgKHZvaWQpCit7CisgICAgV05EQ0xBU1MzMkEgd25kQ2xhc3M7CisKKyAgICBpZiAoR2xvYmFsRmluZEF0b20zMkEgKFJFQkFSQ0xBU1NOQU1FMzJBKSkgcmV0dXJuOworCisgICAgWmVyb01lbW9yeSAoJnduZENsYXNzLCBzaXplb2YoV05EQ0xBU1MzMkEpKTsKKyAgICB3bmRDbGFzcy5zdHlsZSAgICAgICAgID0gQ1NfR0xPQkFMQ0xBU1MgfCBDU19EQkxDTEtTIHwgQ1NfU0FWRUJJVFM7CisgICAgd25kQ2xhc3MubHBmblduZFByb2MgICA9IChXTkRQUk9DMzIpUmViYXJXaW5kb3dQcm9jOworICAgIHduZENsYXNzLmNiQ2xzRXh0cmEgICAgPSAwOworICAgIHduZENsYXNzLmNiV25kRXh0cmEgICAgPSBzaXplb2YoUkVCQVJfSU5GTyAqKTsKKyAgICB3bmRDbGFzcy5oQ3Vyc29yICAgICAgID0gTG9hZEN1cnNvcjMyQSAoMCwgSURDX0FSUk9XMzJBKTsKKyAgICB3bmRDbGFzcy5oYnJCYWNrZ3JvdW5kID0gMDsKKyAgICB3bmRDbGFzcy5scHN6Q2xhc3NOYW1lID0gUkVCQVJDTEFTU05BTUUzMkE7CisgCisgICAgUmVnaXN0ZXJDbGFzczMyQSAoJnduZENsYXNzKTsKK30KKwpkaWZmIC0tZ2l0IGEvY29udHJvbHMvdG9vbGJhci5jIGIvY29udHJvbHMvdG9vbGJhci5jCmluZGV4IDRmM2NlOTYuLmI1NjJkZjEgMTAwNjQ0Ci0tLSBhL2NvbnRyb2xzL3Rvb2xiYXIuYworKysgYi9jb250cm9scy90b29sYmFyLmMKQEAgLTMsMTMgKzMsNiBAQAogICoKICAqIENvcHlyaWdodCAxOTk4IEVyaWMgS29obAogICoKLSAqIE5PVEVTCi0gKiAgIFBMRUFTRSBkb24ndCB0cnkgdG8gaW1wcm92ZSBvciBjaGFuZ2UgdGhpcyBjb2RlIHJpZ2h0IG5vdy4gTWFueQotICogICBmZWF0dXJlcyBhcmUgc3RpbGwgbWlzc2luZywgYnV0IEknbSB3b3JraW5nIG9uIGl0LiBJIHdhbnQgdG8gYXZvaWQKLSAqICAgYW55IGNvbmZ1c2lvbi4gVGhpcyBub3RlIHdpbGwgYmUgcmVtb3ZlZCBhcyBzb29uIGFzIG1vc3Qgb2YgdGhlCi0gKiAgIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZC4KLSAqICAgICBFcmljIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KLSAqCiAgKiBUT0RPOgogICogICAtIEJpdG1hcCBkcmF3aW5nLgogICogICAtIEJ1dHRvbiB3cmFwcGluZy4KQEAgLTY5LDYgKzYyLDU0IEBACiAKIAogc3RhdGljIHZvaWQKK1RPT0xCQVJfRHJhd1N0cmluZyAoVE9PTEJBUl9JTkZPICppbmZvUHRyLCBUQlVUVE9OX0lORk8gKmJ0blB0ciwKKwkJICAgIEhEQzMyIGhkYywgSU5UMzIgblN0YXRlKQoreworICAgIFJFQ1QzMiByY1RleHQgPSBidG5QdHItPnJlY3Q7CisgICAgSEZPTlQzMiBoT2xkRm9udDsKKyAgICBJTlQzMiAgIG5PbGRCa01vZGU7CisKKyAgICAvKiBkcmF3IHRleHQgKi8KKyAgICBpZiAoKGJ0blB0ci0+aVN0cmluZyA+IC0xKSAmJiAoYnRuUHRyLT5pU3RyaW5nIDwgaW5mb1B0ci0+bk51bVN0cmluZ3MpKSB7CisKKwlJbmZsYXRlUmVjdDMyICgmcmNUZXh0LCAtMywgLTMpOworCXJjVGV4dC50b3AgKz0gaW5mb1B0ci0+bkJpdG1hcEhlaWdodDsKKwlpZiAoblN0YXRlICYgKFRCU1RBVEVfUFJFU1NFRCB8IFRCU1RBVEVfQ0hFQ0tFRCkpCisJICAgIE9mZnNldFJlY3QzMiAoJnJjVGV4dCwgMSwgMSk7CisKKwloT2xkRm9udCA9IFNlbGVjdE9iamVjdDMyIChoZGMsIGluZm9QdHItPmhGb250KTsKKwluT2xkQmtNb2RlID0gU2V0QmtNb2RlMzIgKGhkYywgVFJBTlNQQVJFTlQpOworCWlmICghKG5TdGF0ZSAmIFRCU1RBVEVfRU5BQkxFRCkpIHsKKwkgICAgQ09MT1JSRUYgY2xyT2xkID0gCisJCVNldFRleHRDb2xvcjMyIChoZGMsIEdldFN5c0NvbG9yMzIgKENPTE9SXzNESElMSUdIVCkpOworCSAgICBPZmZzZXRSZWN0MzIgKCZyY1RleHQsIDEsIDEpOworCSAgICBEcmF3VGV4dDMyQSAoaGRjLCBpbmZvUHRyLT5zdHJpbmdzW2J0blB0ci0+aVN0cmluZ10sIC0xLCAmcmNUZXh0LAorCQkJIERUX0NFTlRFUik7CisJICAgIFNldFRleHRDb2xvcjMyIChoZGMsIEdldFN5c0NvbG9yMzIgKENPTE9SXzNEU0hBRE9XKSk7CisJICAgIE9mZnNldFJlY3QzMiAoJnJjVGV4dCwgLTEsIC0xKTsKKwkgICAgRHJhd1RleHQzMkEgKGhkYywgaW5mb1B0ci0+c3RyaW5nc1tidG5QdHItPmlTdHJpbmddLCAtMSwgJnJjVGV4dCwKKwkJCSBEVF9DRU5URVIpOworCSAgICBTZXRUZXh0Q29sb3IzMiAoaGRjLCBjbHJPbGQpOworCX0KKwllbHNlIGlmIChuU3RhdGUgJiBUQlNUQVRFX0lOREVURVJNSU5BVEUpIHsKKwkgICAgQ09MT1JSRUYgY2xyT2xkID0gCisJCVNldFRleHRDb2xvcjMyIChoZGMsIEdldFN5c0NvbG9yMzIgKENPTE9SXzNEU0hBRE9XKSk7CisJICAgIERyYXdUZXh0MzJBIChoZGMsIGluZm9QdHItPnN0cmluZ3NbYnRuUHRyLT5pU3RyaW5nXSwgLTEsICZyY1RleHQsCisJCQkgRFRfQ0VOVEVSKTsKKwkgICAgU2V0VGV4dENvbG9yMzIgKGhkYywgY2xyT2xkKTsKKwl9CisJZWxzZQorCSAgICBEcmF3VGV4dDMyQSAoaGRjLCBpbmZvUHRyLT5zdHJpbmdzW2J0blB0ci0+aVN0cmluZ10sIC0xLCAmcmNUZXh0LAorCQkJIERUX0NFTlRFUik7CisKKwlTZWxlY3RPYmplY3QzMiAoaGRjLCBoT2xkRm9udCk7CisJaWYgKG5PbGRCa01vZGUgIT0gVFJBTlNQQVJFTlQpCisJICAgIFNldEJrTW9kZTMyIChoZGMsIG5PbGRCa01vZGUpOworICAgIH0KK30KKworCitzdGF0aWMgdm9pZAogVE9PTEJBUl9EcmF3QnV0dG9uIChXTkQgKnduZFB0ciwgVEJVVFRPTl9JTkZPICpidG5QdHIsIEhEQzMyIGhkYykKIHsKICAgICBUT09MQkFSX0lORk8gKmluZm9QdHIgPSBUT09MQkFSX0dldEluZm9QdHIod25kUHRyKTsKQEAgLTkyLDYgKzEzMyw3IEBACiAKIC8vCUltYWdlTGlzdF9EcmF3IChpbmZvUHRyLT5oaW1sRGlzLCBidG5QdHItPmlCaXRtYXAsIGhkYywKIC8vCQkJcmMubGVmdCsxLCByYy50b3ArMSwgSUxEX05PUk1BTCk7CisJVE9PTEJBUl9EcmF3U3RyaW5nIChpbmZvUHRyLCBidG5QdHIsIGhkYywgYnRuUHRyLT5mc1N0YXRlKTsKIAlyZXR1cm47CiAgICAgfQogCkBAIC0xMDEsNiArMTQzLDcgQEAKIAkJICAgIEJGX1JFQ1QgfCBCRl9NSURETEUgfCBCRl9BREpVU1QpOwogCUltYWdlTGlzdF9EcmF3IChpbmZvUHRyLT5oaW1sRGVmLCBidG5QdHItPmlCaXRtYXAsIGhkYywKIAkJCXJjLmxlZnQrMiwgcmMudG9wKzIsIElMRF9OT1JNQUwpOworCVRPT0xCQVJfRHJhd1N0cmluZyAoaW5mb1B0ciwgYnRuUHRyLCBoZGMsIGJ0blB0ci0+ZnNTdGF0ZSk7CiAJcmV0dXJuOwogICAgIH0KIApAQCAtMTE3LDYgKzE2MCw3IEBACiAJU2VsZWN0T2JqZWN0MzIgKGhkYywgaGJyKTsKIAlJbWFnZUxpc3RfRHJhdyAoaW5mb1B0ci0+aGltbERlZiwgYnRuUHRyLT5pQml0bWFwLCBoZGMsCiAJCQlyYy5sZWZ0KzIsIHJjLnRvcCsyLCBJTERfTk9STUFMKTsKKwlUT09MQkFSX0RyYXdTdHJpbmcgKGluZm9QdHIsIGJ0blB0ciwgaGRjLCBidG5QdHItPmZzU3RhdGUpOwogCXJldHVybjsKICAgICB9CiAKQEAgLTEzMiw2ICsxNzYsNyBAQAogCVNlbGVjdE9iamVjdDMyIChoZGMsIGhicik7CiAvLwlJbWFnZUxpc3RfRHJhdyAoaW5mb1B0ci0+aGltbERpcywgYnRuUHRyLT5pQml0bWFwLCBoZGMsCiAvLwkJCXJjLmxlZnQrMSwgcmMudG9wKzEsIElMRF9OT1JNQUwpOworCVRPT0xCQVJfRHJhd1N0cmluZyAoaW5mb1B0ciwgYnRuUHRyLCBoZGMsIGJ0blB0ci0+ZnNTdGF0ZSk7CiAJcmV0dXJuOwogICAgIH0KIApAQCAtMTQwLDEwICsxODUsMTAgQEAKIAkJQkZfU09GVCB8IEJGX1JFQ1QgfCBCRl9NSURETEUgfCBCRl9BREpVU1QpOwogICAgIEltYWdlTGlzdF9EcmF3IChpbmZvUHRyLT5oaW1sRGVmLCBidG5QdHItPmlCaXRtYXAsIGhkYywKIAkJICAgIHJjLmxlZnQrMSwgcmMudG9wKzEsIElMRF9OT1JNQUwpOworICAgIFRPT0xCQVJfRHJhd1N0cmluZyAoaW5mb1B0ciwgYnRuUHRyLCBoZGMsIGJ0blB0ci0+ZnNTdGF0ZSk7CiB9CiAKIAotCiBzdGF0aWMgdm9pZAogVE9PTEJBUl9SZWZyZXNoIChXTkQgKnduZFB0ciwgSERDMzIgaGRjKQogewpAQCAtMTU5LDYgKzIwNCw0MiBAQAogCiAKIHN0YXRpYyB2b2lkCitUT09MQkFSX0NhbGNTdHJpbmdzIChXTkQgKnduZFB0ciwgTFBTSVpFMzIgbHBTaXplKQoreworICAgIFRPT0xCQVJfSU5GTyAqaW5mb1B0ciA9IFRPT0xCQVJfR2V0SW5mb1B0cih3bmRQdHIpOworICAgIFRCVVRUT05fSU5GTyAqYnRuUHRyOworICAgIElOVDMyIGk7CisgICAgSERDMzIgaGRjOworICAgIEhGT05UMzIgaE9sZEZvbnQ7CisgICAgU0laRTMyIHN6OworCisgICAgbHBTaXplLT5jeCA9IDA7CisgICAgbHBTaXplLT5jeSA9IDA7CisgICAgaGRjID0gR2V0REMzMiAoMCk7CisgICAgaE9sZEZvbnQgPSBTZWxlY3RPYmplY3QzMiAoaGRjLCBpbmZvUHRyLT5oRm9udCk7CisKKyAgICBidG5QdHIgPSBpbmZvUHRyLT5idXR0b25zOworICAgIGZvciAoaSA9IDA7IGkgPCBpbmZvUHRyLT5uTnVtQnV0dG9uczsgaSsrLCBidG5QdHIrKykgeworCWlmICghKGJ0blB0ci0+ZnNTdGF0ZSAmIFRCU1RBVEVfSElEREVOKSAmJgorCSAgICAoYnRuUHRyLT5pU3RyaW5nID4gLTEpICYmCisJICAgIChidG5QdHItPmlTdHJpbmcgPCBpbmZvUHRyLT5uTnVtU3RyaW5ncykpIHsKKwkgICAgTFBTVFIgbHBUZXh0ID0gaW5mb1B0ci0+c3RyaW5nc1tidG5QdHItPmlTdHJpbmddOworCSAgICBHZXRUZXh0RXh0ZW50UG9pbnQzMkEgKGhkYywgbHBUZXh0LCBsc3RybGVuMzJBKGxwVGV4dCksICZzeik7CisJICAgIGlmIChzei5jeCA+IGxwU2l6ZS0+Y3gpCisJCWxwU2l6ZS0+Y3ggPSBzei5jeDsKKwkgICAgaWYgKHN6LmN5ID4gbHBTaXplLT5jeSkKKwkJbHBTaXplLT5jeSA9IHN6LmN5OworCX0KKyAgICB9CisKKyAgICBTZWxlY3RPYmplY3QzMiAoaGRjLCBoT2xkRm9udCk7CisgICAgUmVsZWFzZURDMzIgKDAsIGhkYyk7CisKKyAgICBUUkFDRSAodG9vbGJhciwgInN0cmluZyBzaXplICVkIHggJWQhXG4iLCBscFNpemUtPmN4LCBscFNpemUtPmN5KTsKK30KKworCitzdGF0aWMgdm9pZAogVE9PTEJBUl9DYWxjVG9vbGJhciAoV05EICp3bmRQdHIpCiB7CiAgICAgVE9PTEJBUl9JTkZPICppbmZvUHRyID0gVE9PTEJBUl9HZXRJbmZvUHRyKHduZFB0cik7CkBAIC0xNjYsNiArMjQ3LDE3IEBACiAgICAgSU5UMzIgaSwgaiwgblJvd3M7CiAgICAgSU5UMzIgeCwgeSwgY3gsIGN5OwogICAgIEJPT0wzMiBiVmVydGljYWw7CisgICAgU0laRTMyICBzaXplU3RyaW5nOworCisKKyAgICAvKiB0ZXN0ICovCisgICAgVE9PTEJBUl9DYWxjU3RyaW5ncyAod25kUHRyLCAmc2l6ZVN0cmluZyk7CisKKyAgICBpZiAoc2l6ZVN0cmluZy5jeSA+IDApCisJaW5mb1B0ci0+bkJ1dHRvbkhlaWdodCA9IHNpemVTdHJpbmcuY3kgKyBpbmZvUHRyLT5uQml0bWFwSGVpZ2h0ICsgNjsKKworICAgIGlmIChzaXplU3RyaW5nLmN4ID4gaW5mb1B0ci0+bkJpdG1hcFdpZHRoKQorCWluZm9QdHItPm5CdXR0b25XaWR0aCA9IHNpemVTdHJpbmcuY3ggKyA2OwogCiAgICAgeCAgPSBpbmZvUHRyLT5uSW5kZW50OwogICAgIHkgID0gVE9QX0JPUkRFUjsKQEAgLTIyMCw2ICszMTIsNyBAQAogICAgIH0KIAogICAgIGluZm9QdHItPm5IZWlnaHQgPSB5ICsgY3kgKyBCT1RUT01fQk9SREVSOworICAgIFRSQUNFICh0b29sYmFyLCAidG9vbGJhciBoZWlnaHQgJWRcbiIsIGluZm9QdHItPm5IZWlnaHQpOwogfQogCiAKQEAgLTMzNSw2ICs0MjgsMTcgQEAKIAkJCSAgICAgIElMQ19DT0xPUiB8IElMQ19NQVNLLCAoSU5UMzIpd1BhcmFtLCAyKTsKICAgICB9CiAKKyNpZiAwCisgICAgaWYgKCEoaW5mb1B0ci0+aGltbERpcykpIHsKKwkvKiBjcmVhdGUgbmV3IGRpc2FibGVkIGltYWdlIGxpc3QgKi8KKwlUUkFDRSAodG9vbGJhciwgImNyZWF0aW5nIGRpc2FibGVkIGltYWdlIGxpc3QhXG4iKTsKKwlpbmZvUHRyLT5oaW1sRGlzID0KKwkgICAgSW1hZ2VMaXN0X0NyZWF0ZSAoaW5mb1B0ci0+bkJpdG1hcFdpZHRoLCAKKwkJCSAgICAgIGluZm9QdHItPm5CaXRtYXBIZWlnaHQsIElMQ19DT0xPUiB8IElMQ19NQVNLLAorCQkJICAgICAgKElOVDMyKXdQYXJhbSwgMik7CisgICAgfQorI2VuZGlmCisKICAgICAvKiBBZGQgYml0bWFwcyB0byB0aGUgZGVmYXVsdCBpbWFnZSBsaXN0ICovCiAgICAgaWYgKGxwQWRkQm1wLT5oSW5zdCA9PSAoSElOU1RBTkNFMzIpMCkgewogCW5JbmRleCA9IApAQCAtNDM0LDcgKzUzOCw3IEBACiAJbGVuID0gTG9hZFN0cmluZzMyQSAoKEhJTlNUQU5DRTMyKXdQYXJhbSwgKFVJTlQzMilsUGFyYW0sCiAJCQkgICAgIHN6U3RyaW5nLCAyNTYpOwogCi0JVFJBQ0UgKHRvb2xiYXIsICJsZW49JWRcbiIsIGxlbik7CisJVFJBQ0UgKHRvb2xiYXIsICJsZW49JWQgXCIlc1wiXG4iLCBsZW4sIHN6U3RyaW5nKTsKIAluSW5kZXggPSBpbmZvUHRyLT5uTnVtU3RyaW5nczsKIAlpZiAoaW5mb1B0ci0+bk51bVN0cmluZ3MgPT0gMCkgewogCSAgICBpbmZvUHRyLT5zdHJpbmdzID0KQEAgLTQ2NCw3ICs1NjgsNyBAQAogCW5JbmRleCA9IGluZm9QdHItPm5OdW1TdHJpbmdzOwogCXdoaWxlICgqcCkgewogCSAgICBsZW4gPSBsc3RybGVuMzJBIChwKTsKLQkgICAgVFJBQ0UgKHRvb2xiYXIsICJsZW49JWRcbiIsIGxlbik7CisJICAgIFRSQUNFICh0b29sYmFyLCAibGVuPSVkIFwiJXNcIlxuIiwgbGVuLCBwKTsKIAogCSAgICBpZiAoaW5mb1B0ci0+bk51bVN0cmluZ3MgPT0gMCkgewogCQlpbmZvUHRyLT5zdHJpbmdzID0KQEAgLTQ4Nyw3ICs1OTEsNiBAQAogCiAJICAgIHAgKz0gKGxlbisxKTsKIAl9Ci0KICAgICB9CiAKICAgICByZXR1cm4gbkluZGV4OwpAQCAtNTAxLDggKzYwNCw1MCBAQAogVE9PTEJBUl9BdXRvU2l6ZSAoV05EICp3bmRQdHIsIFdQQVJBTTMyIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKIHsKICAgICBUT09MQkFSX0lORk8gKmluZm9QdHIgPSBUT09MQkFSX0dldEluZm9QdHIod25kUHRyKTsKKyAgICBSRUNUMzIgcGFyZW50X3JlY3Q7CisgICAgSFdORDMyIHBhcmVudDsKKyAgICBJTlQzMiAgeCwgeSwgY3gsIGN5OworICAgIFVJTlQzMiB1UG9zRmxhZ3MgPSAwOwogCi0gICAgVFJBQ0UgKHRvb2xiYXIsICJhdXRvIHNpemUhXG4iKTsKKyAgICBGSVhNRSAodG9vbGJhciwgImF1dG8gc2l6ZSFcbiIpOworCisJcGFyZW50ID0gR2V0UGFyZW50MzIgKHduZFB0ci0+aHduZFNlbGYpOworCUdldENsaWVudFJlY3QzMihwYXJlbnQsICZwYXJlbnRfcmVjdCk7CisKKwlpZiAod25kUHRyLT5kd1N0eWxlICYgQ0NTX05PUkVTSVpFKQorCSAgICB1UG9zRmxhZ3MgfD0gU1dQX05PU0laRTsKKwllbHNlIHsKKwkgICAgaW5mb1B0ci0+bldpZHRoID0gcGFyZW50X3JlY3QucmlnaHQgLSBwYXJlbnRfcmVjdC5sZWZ0OworCSAgICBUT09MQkFSX0NhbGNUb29sYmFyICh3bmRQdHIpOworCSAgICBjeSA9IGluZm9QdHItPm5IZWlnaHQ7CisJICAgIGN4ID0gaW5mb1B0ci0+bldpZHRoOworCX0KKworCWlmICh3bmRQdHItPmR3U3R5bGUgJiBDQ1NfTk9QQVJFTlRBTElHTikgeworCSAgICB1UG9zRmxhZ3MgfD0gU1dQX05PTU9WRTsKKy8vCSAgICBpZiAod25kUHRyLT5kd1N0eWxlICYgKENDU19UT1AgfCBDQ1NfQk9UVE9NKSkKKy8vCQljeSA9IChJTlQzMilISVdPUkQobFBhcmFtKTsKKwl9CisjaWYgMAorCWlmICh3bmRQdHItPmR3U3R5bGUgJiBDQ1NfTk9SRVNJWkUpIHsKKwkgICAgdVBvc0ZsYWdzIHw9IFNXUF9OT1NJWkU7CisvLwkgICAgY3ggPSAoSU5UMzIpTE9XT1JEKGxQYXJhbSk7CisvLwkgICAgY3kgPSAoSU5UMzIpSElXT1JEKGxQYXJhbSk7CisgICAgICAgIH0KKwllbHNlIHsKKwkgICAgIC8qIEZJWE1FOiBoYW5kbGUgQ0NTX05PTU9WRVggYW5kIENDU19OT01PVkVZICovCisKKwl9CisKKwlpbmZvUHRyLT5uV2lkdGggPSBjeDsKKwlpbmZvUHRyLT5uSGVpZ2h0ID0gY3k7CisjZW5kaWYKKyAgICBpZiAoISh3bmRQdHItPmR3U3R5bGUgJiBDQ1NfTk9ESVZJREVSKSkKKwljeSArPSAyOworCisgICAgaW5mb1B0ci0+YkF1dG9TaXplID0gVFJVRTsKKyAgICBTZXRXaW5kb3dQb3MzMiAod25kUHRyLT5od25kU2VsZiwgMCwgcGFyZW50X3JlY3QubGVmdCwgcGFyZW50X3JlY3QudG9wLAorCQkgICAgY3gsIGN5LCB1UG9zRmxhZ3MgfCBTV1BfTk9aT1JERVIpOwogCiAgICAgcmV0dXJuIDA7CiB9CkBAIC01OTUsNyArNzQwLDcgQEAKICAgICBUT09MQkFSX0RyYXdCdXR0b24gKHduZFB0ciwgYnRuUHRyLCBoZGMpOwogICAgIFJlbGVhc2VEQzMyICh3bmRQdHItPmh3bmRTZWxmLCBoZGMpOwogCi0gICAgLyogRklYTUU6IFNlbmQgYSBXTV9DT01NQU5EIG9yIFdNX05PVElGWSAqLworICAgIC8qIEZJWE1FOiBTZW5kIGEgV01fTk9USUZZPz8gKi8KIAogICAgIHJldHVybiBUUlVFOwogfQpAQCAtNzg0LDcgKzkyOSwxNiBAQAogLy8gPDwgVE9PTEJBUl9HZXRFeHRlbmRlZFN0eWxlID4+CiAvLyA8PCBUT09MQkFSX0dldEhvdEltYWdlTGlzdCA+PgogLy8gPDwgVE9PTEJBUl9HZXRIb3RJdGVtID4+Ci0vLyA8PCBUT09MQkFSX0dldEltYWdlTGlzdCA+PgorCisKK3N0YXRpYyBMUkVTVUxUCitUT09MQkFSX0dldEltYWdlTGlzdCAoV05EICp3bmRQdHIsIFdQQVJBTTMyIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3sKKyAgICBUT09MQkFSX0lORk8gKmluZm9QdHIgPSBUT09MQkFSX0dldEluZm9QdHIod25kUHRyKTsKKyAgICByZXR1cm4gKExSRVNVTFQpaW5mb1B0ci0+aGltbERlZjsgCit9CisKKwogLy8gPDwgVE9PTEJBUl9HZXRJbnNlcnRNYXJrID4+CiAvLyA8PCBUT09MQkFSX0dldEluc2VydE1hcmtDb2xvciA+PgogCkBAIC0xMjAwLDcgKzEzNTQsMjEgQEAKIC8vIDw8IFRPT0xCQVJfU2V0RXh0ZW5kZWRTdHlsZSA+PgogLy8gPDwgVE9PTEJBUl9TZXRIb3RJbWFnZUxpc3QgPj4KIC8vIDw8IFRPT0xCQVJfU2V0SG90SXRlbSA+PgotLy8gPDwgVE9PTEJBUl9TZXRJbWFnZUxpc3QgPj4KKworCitzdGF0aWMgTFJFU1VMVAorVE9PTEJBUl9TZXRJbWFnZUxpc3QgKFdORCAqd25kUHRyLCBXUEFSQU0zMiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCit7CisgICAgVE9PTEJBUl9JTkZPICppbmZvUHRyID0gVE9PTEJBUl9HZXRJbmZvUHRyKHduZFB0cik7CisgICAgSElNQUdFTElTVCBoaW1sVGVtcDsKKworICAgIGhpbWxUZW1wID0gaW5mb1B0ci0+aGltbERlZjsKKyAgICBpbmZvUHRyLT5oaW1sRGVmID0gKEhJTUFHRUxJU1QpbFBhcmFtOworCisgICAgLyogRklYTUU6IHJlZHJhdyA/ICovCisKKyAgICByZXR1cm4gKExSRVNVTFQpaGltbFRlbXA7IAorfQogCiAKIHN0YXRpYyBMUkVTVUxUCkBAIC0xMjIwLDcgKzEzODgsMjEgQEAKIAogCiAvLyA8PCBUT09MQkFSX1NldEluc2VydE1hcmsgPj4KLS8vIDw8IFRPT0xCQVJfU2V0SW5zZXJ0TWFya0NvbG9yID4+CisKKworc3RhdGljIExSRVNVTFQKK1RPT0xCQVJfU2V0SW5zZXJ0TWFya0NvbG9yIChXTkQgKnduZFB0ciwgV1BBUkFNMzIgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQoreworICAgIFRPT0xCQVJfSU5GTyAqaW5mb1B0ciA9IFRPT0xCQVJfR2V0SW5mb1B0cih3bmRQdHIpOworCisgICAgaW5mb1B0ci0+Y2xySW5zZXJ0TWFyayA9IChDT0xPUlJFRilsUGFyYW07CisKKyAgICAvKiBGSVhNRSA6IHJlZHJhdyA/PyovCisKKyAgICByZXR1cm4gMDsKK30KKworCiAvLyA8PCBUT09MQkFSX1NldE1heFRleHRSb3dzID4+CiAvLyA8PCBUT09MQkFSX1NldFBhZGRpbmcgPj4KIApAQCAtMTMwNywxMyArMTQ4OSwyMiBAQAogfQogCiAKLS8vIDw8IFRPT0xCQVJfU2V0VW5pY29kZUZvcm1hdCA+Pgorc3RhdGljIExSRVNVTFQKK1RPT0xCQVJfU2V0VW5pY29kZUZvcm1hdCAoV05EICp3bmRQdHIsIFdQQVJBTTMyIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3sKKyAgICBUT09MQkFSX0lORk8gKmluZm9QdHIgPSBUT09MQkFSX0dldEluZm9QdHIod25kUHRyKTsKKworICAgIEZJWE1FICh0b29sYmFyLCAiaHduZD0weCUwNHggc3R1YiFcbiIsIHduZFB0ci0+aHduZFNlbGYpOworCisgICAgcmV0dXJuIDA7Cit9CiAKIAogc3RhdGljIExSRVNVTFQKIFRPT0xCQVJfQ3JlYXRlIChXTkQgKnduZFB0ciwgV1BBUkFNMzIgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQogewogICAgIFRPT0xCQVJfSU5GTyAqaW5mb1B0ciA9IFRPT0xCQVJfR2V0SW5mb1B0cih3bmRQdHIpOworICAgIExPR0ZPTlQzMkEgbG9nRm9udDsKIAogICAgIC8qIGluaXRpYWxpemUgaW5mbyBzdHJ1Y3R1cmUgKi8KICAgICBpbmZvUHRyLT5uQnV0dG9uSGVpZ2h0ID0gMjI7CkBAIC0xMzMyLDYgKzE1MjMsOSBAQAogICAgIGluZm9QdHItPmJUcmFuc3BhcmVudCA9ICh3bmRQdHItPmR3U3R5bGUgJiBUQlNUWUxFX0ZMQVQpOwogICAgIGluZm9QdHItPm5Ib3RJdGVtID0gLTE7CiAKKyAgICBTeXN0ZW1QYXJhbWV0ZXJzSW5mbzMyQSAoU1BJX0dFVElDT05USVRMRUxPR0ZPTlQsIDAsICZsb2dGb250LCAwKTsKKyAgICBpbmZvUHRyLT5oRm9udCA9IENyZWF0ZUZvbnRJbmRpcmVjdDMyQSAoJmxvZ0ZvbnQpOworCiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTEzNzEsNiArMTU2NSwxMCBAQAogICAgIGlmIChpbmZvUHRyLT5oaW1sSG90KQogCUltYWdlTGlzdF9EZXN0cm95IChpbmZvUHRyLT5oaW1sSG90KTsKIAorICAgIC8qIGRlbGV0ZSBkZWZhdWx0IGZvbnQgKi8KKyAgICBpZiAoaW5mb1B0ci0+aEZvbnQpCisJRGVsZXRlT2JqZWN0MzIgKGluZm9QdHItPmhGb250KTsKKwogICAgIC8qIGZyZWUgdG9vbGJhciBpbmZvIGRhdGEgKi8KICAgICBIZWFwRnJlZSAoR2V0UHJvY2Vzc0hlYXAgKCksIDAsIGluZm9QdHIpOwogCkBAIC0xMzc5LDYgKzE1NzcsMTkgQEAKIAogCiBzdGF0aWMgTFJFU1VMVAorVE9PTEJBUl9FcmFzZUJhY2tncm91bmQgKFdORCAqd25kUHRyLCBXUEFSQU0zMiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCit7CisgICAgVE9PTEJBUl9JTkZPICppbmZvUHRyID0gVE9PTEJBUl9HZXRJbmZvUHRyKHduZFB0cik7CisKKyAgICBpZiAoaW5mb1B0ci0+YlRyYW5zcGFyZW50KQorCXJldHVybiBTZW5kTWVzc2FnZTMyQSAoR2V0UGFyZW50MzIgKHduZFB0ci0+aHduZFNlbGYpLCBXTV9FUkFTRUJLR05ELAorCQkJICAgICAgIHdQYXJhbSwgbFBhcmFtKTsKKworICAgIHJldHVybiBEZWZXaW5kb3dQcm9jMzJBICh3bmRQdHItPmh3bmRTZWxmLCBXTV9FUkFTRUJLR05ELCB3UGFyYW0sIGxQYXJhbSk7Cit9CisKKworc3RhdGljIExSRVNVTFQKIFRPT0xCQVJfTEJ1dHRvbkRibENsayAoV05EICp3bmRQdHIsIFdQQVJBTTMyIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKIHsKICAgICBUT09MQkFSX0lORk8gKmluZm9QdHIgPSBUT09MQkFSX0dldEluZm9QdHIod25kUHRyKTsKQEAgLTE1NDYsNiArMTc1Nyw5IEBACiB9CiAKIAorCisKKwogc3RhdGljIExSRVNVTFQKIFRPT0xCQVJfTkNDYWxjU2l6ZSAoV05EICp3bmRQdHIsIFdQQVJBTTMyIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKIHsKQEAgLTE2NTcsMTIgKzE4NzEsMTkgQEAKICAgICBJTlQzMiAgZmxhZ3M7CiAgICAgVUlOVDMyIHVQb3NGbGFncyA9IDA7CiAKKyAgICBpZiAoaW5mb1B0ci0+YkF1dG9TaXplKSB7CisJaW5mb1B0ci0+YkF1dG9TaXplID0gRkFMU0U7CisJcmV0dXJuIDA7CisgICAgfQorCiAgICAgZmxhZ3MgPSAoSU5UMzIpIHdQYXJhbTsKIAogICAgIC8qIEZJWE1FIGZvciBmbGFncyA9CiAgICAgICogU0laRV9NQVhJTUlaRUQsIFNJWkVfTUFYU0hPVywgU0laRV9NSU5JTUlaRUQKICAgICAgKi8KIAorICAgIFRSQUNFICh0b29sYmFyLCAic2l6aW5nIHRvb2xiYXIhXG4iKTsKKwogICAgIGlmIChmbGFncyA9PSBTSVpFX1JFU1RPUkVEKSB7CiAJLyogd2lkdGggYW5kIGhlaWdodCBkb24ndCBhcHBseSAqLwogCXBhcmVudCA9IEdldFBhcmVudDMyICh3bmRQdHItPmh3bmRTZWxmKTsKQEAgLTE2NzksOCArMTkwMCwyMyBAQAogCiAJaWYgKHduZFB0ci0+ZHdTdHlsZSAmIENDU19OT1BBUkVOVEFMSUdOKSB7CiAJICAgIHVQb3NGbGFncyB8PSBTV1BfTk9NT1ZFOworLy8JICAgIGlmICh3bmRQdHItPmR3U3R5bGUgJiAoQ0NTX1RPUCB8IENDU19CT1RUT00pKQorLy8JCWN5ID0gKElOVDMyKUhJV09SRChsUGFyYW0pOworCX0KKyNpZiAwCisJaWYgKHduZFB0ci0+ZHdTdHlsZSAmIENDU19OT1JFU0laRSkgeworCSAgICB1UG9zRmxhZ3MgfD0gU1dQX05PU0laRTsKKy8vCSAgICBjeCA9IChJTlQzMilMT1dPUkQobFBhcmFtKTsKKy8vCSAgICBjeSA9IChJTlQzMilISVdPUkQobFBhcmFtKTsKKyAgICAgICAgfQorCWVsc2UgeworCSAgICAgLyogRklYTUU6IGhhbmRsZSBDQ1NfTk9NT1ZFWCBhbmQgQ0NTX05PTU9WRVkgKi8KKwogCX0KIAorCWluZm9QdHItPm5XaWR0aCA9IGN4OworCWluZm9QdHItPm5IZWlnaHQgPSBjeTsKKyNlbmRpZgogCWlmICghKHduZFB0ci0+ZHdTdHlsZSAmIENDU19OT0RJVklERVIpKQogCSAgICBjeSArPSAyOwogCkBAIC0xNjkxLDYgKzE5MjcsMTEgQEAKIH0KIAogCisKKworCisKKwogTFJFU1VMVCBXSU5BUEkKIFRvb2xiYXJXaW5kb3dQcm9jIChIV05EMzIgaHduZCwgVUlOVDMyIHVNc2csIFdQQVJBTTMyIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKIHsKQEAgLTE3NjMsNyArMjAwNCwxMCBAQAogLy8JY2FzZSBUQl9HRVRFWFRFTkRFRFNUWUxFOgkJLyogNC43MSAqLwogLy8JY2FzZSBUQl9HRVRIT1RJTUFHRUxJU1Q6CQkvKiA0LjcwICovCiAvLwljYXNlIFRCX0dFVEhPVElURU06CQkJLyogNC43MSAqLwotLy8JY2FzZSBUQl9HRVRJTUFHRUxJU1Q6CQkJLyogNC43MCAqLworCisJY2FzZSBUQl9HRVRJTUFHRUxJU1Q6CisJICAgIHJldHVybiBUT09MQkFSX0dldEltYWdlTGlzdCAod25kUHRyLCB3UGFyYW0sIGxQYXJhbSk7CisKIC8vCWNhc2UgVEJfR0VUSU5TRVJUTUFSSzoJCQkvKiA0LjcxICovCiAvLwljYXNlIFRCX0dFVElOU0VSVE1BUktDT0xPUjoJCS8qIDQuNzEgKi8KIApAQCAtMTg2MCwxMyArMjEwNCwxOCBAQAogLy8JY2FzZSBUQl9TRVRFWFRFTkRFRFNUWUxFOgkJLyogNC43MSAqLwogLy8JY2FzZSBUQl9TRVRIT1RJTUFHRUxJU1Q6CQkvKiA0LjcwICovCiAvLwljYXNlIFRCX1NFVEhPVElURU06CQkJLyogNC43MSAqLwotLy8JY2FzZSBUQl9TRVRJTUFHRUxJU1Q6CQkJLyogNC43MCAqLworCisJY2FzZSBUQl9TRVRJTUFHRUxJU1Q6CisJICAgIHJldHVybiBUT09MQkFSX1NldEltYWdlTGlzdCAod25kUHRyLCB3UGFyYW0sIGxQYXJhbSk7CiAKIAljYXNlIFRCX1NFVElOREVOVDoKIAkgICAgcmV0dXJuIFRPT0xCQVJfU2V0SW5kZW50ICh3bmRQdHIsIHdQYXJhbSwgbFBhcmFtKTsKIAogLy8JY2FzZSBUQl9TRVRJTlNFUlRNQVJLOgkJCS8qIDQuNzEgKi8KLS8vCWNhc2UgVEJfU0VUSU5TRVJUTUFSS0NPTE9SOgkJLyogNC43MSAqLworCisJY2FzZSBUQl9TRVRJTlNFUlRNQVJLQ09MT1I6CisJICAgIHJldHVybiBUT09MQkFSX1NldEluc2VydE1hcmtDb2xvciAod25kUHRyLCB3UGFyYW0sIGxQYXJhbSk7CisKIC8vCWNhc2UgVEJfU0VUTUFYVEVYVFJPV1M6CQkJLyogNC43MCAqLwogLy8JY2FzZSBUQl9TRVRQQURESU5HOgkJCS8qIDQuNzEgKi8KIApAQCAtMTg4NSw3ICsyMTM0LDggQEAKIAljYXNlIFRCX1NFVFRPT0xUSVBTOgogCSAgICByZXR1cm4gVE9PTEJBUl9TZXRUb29sVGlwcyAod25kUHRyLCB3UGFyYW0sIGxQYXJhbSk7CiAKLS8vCWNhc2UgVEJfU0VUVU5JQ09ERUZPUk1BVDoKKwljYXNlIFRCX1NFVFVOSUNPREVGT1JNQVQ6CisJICAgIHJldHVybiBUT09MQkFSX1NldFVuaWNvZGVGb3JtYXQgKHduZFB0ciwgd1BhcmFtLCBsUGFyYW0pOwogCiAJY2FzZSBXTV9DUkVBVEU6CiAJICAgIHJldHVybiBUT09MQkFSX0NyZWF0ZSAod25kUHRyLCB3UGFyYW0sIGxQYXJhbSk7CkBAIC0xODkzLDggKzIxNDMsOCBAQAogCWNhc2UgV01fREVTVFJPWToKIAkgICAgcmV0dXJuIFRPT0xCQVJfRGVzdHJveSAod25kUHRyLCB3UGFyYW0sIGxQYXJhbSk7CiAKLS8vCWNhc2UgV01fRVJBU0VCS0dORDoKLS8vCSAgICByZXR1cm4gVE9PTEJBUl9FcmFzZUJhY2tncm91bmQgKHduZFB0ciwgd1BhcmFtLCBsUGFyYW0pOworCWNhc2UgV01fRVJBU0VCS0dORDoKKwkgICAgcmV0dXJuIFRPT0xCQVJfRXJhc2VCYWNrZ3JvdW5kICh3bmRQdHIsIHdQYXJhbSwgbFBhcmFtKTsKIAogCWNhc2UgV01fTEJVVFRPTkRCTENMSzoKIAkgICAgcmV0dXJuIFRPT0xCQVJfTEJ1dHRvbkRibENsayAod25kUHRyLCB3UGFyYW0sIGxQYXJhbSk7CkBAIC0xOTIxLDYgKzIxNzEsNyBAQAogCSAgICByZXR1cm4gVE9PTEJBUl9OQ1BhaW50ICh3bmRQdHIsIHdQYXJhbSwgbFBhcmFtKTsKIAogLy8JY2FzZSBXTV9OT1RJRlk6CisvLwkgICAgU2VuZE1lc3NhZ2UzMkEgKEdldFBhcmVudDMyIChod25kKSwgdU1zZywgd1BhcmFtLCBsUGFyYW0pOwogCiAJY2FzZSBXTV9QQUlOVDoKIAkgICAgcmV0dXJuIFRPT0xCQVJfUGFpbnQgKHduZFB0ciwgd1BhcmFtKTsKZGlmZiAtLWdpdCBhL2NvbnRyb2xzL3Rvb2x0aXBzLmMgYi9jb250cm9scy90b29sdGlwcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlZmNmODcKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cm9scy90b29sdGlwcy5jCkBAIC0wLDAgKzEsNjk4IEBACisvKgorICogVG9vbCB0aXAgY29udHJvbAorICoKKyAqIENvcHlyaWdodCAxOTk4IEVyaWMgS29obAorICoKKyAqIE5PVEVTCisgKiAgIFBMRUFTRSBkb24ndCB0cnkgdG8gaW1wcm92ZSBvciBjaGFuZ2UgdGhpcyBjb2RlIHJpZ2h0IG5vdy4gTWFueQorICogICBmZWF0dXJlcyBhcmUgc3RpbGwgbWlzc2luZywgYnV0IEknbSB3b3JraW5nIG9uIGl0LiBJIHdhbnQgdG8gYXZvaWQKKyAqICAgYW55IGNvbmZ1c2lvbi4gVGhpcyBub3RlIHdpbGwgYmUgcmVtb3ZlZCBhcyBzb29uIGFzIG1vc3Qgb2YgdGhlCisgKiAgIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZC4KKyAqICAgICBFcmljIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KKyAqCisgKiBUT0RPOgorICogICAtIE1vc3QgbWVzc2FnZXMuCisgKiAgIC0gQWxsIG5vdGlmaWNhdGlvbnMuCisgKgorICogVGVzdGluZzoKKyAqICAgLSBSdW4gdGVzdHMgdXNpbmcgV2FpdGUgR3JvdXAgV2luZG93czk1IEFQSSBCaWJsZSBWb2x1bWUgMi4KKyAqICAgICBUaGUgc2Vjb25kIGNkcm9tIGNvbnRhaW5zIGV4ZWN1dGFibGVzIGVudW10b29scy5leGUgLi4uCisgKiAgIC0gYWRkaXRpb25hbCBmZWF0dXJlcy4KKyAqCisgKiBGSVhNRToKKyAqICAgLSBEZWxUb29sMzJBIGluY29tcGxldGUuCisgKiAgIC0gR2V0Q3VycmVudFRvb2wzMkEgaW5jb21wbGV0ZS4KKyAqLworCisjaW5jbHVkZSAid2luZG93cy5oIgorI2luY2x1ZGUgImNvbW1jdHJsLmgiCisjaW5jbHVkZSAidG9vbHRpcHMuaCIKKyNpbmNsdWRlICJoZWFwLmgiCisjaW5jbHVkZSAid2luLmgiCisjaW5jbHVkZSAiZGVidWcuaCIKKworCisjZGVmaW5lIFRPT0xUSVBTX0dldEluZm9QdHIod25kUHRyKSAoKFRPT0xUSVBTX0lORk8gKil3bmRQdHItPndFeHRyYVswXSkKKworCitzdGF0aWMgSU5UMzIKK1RPT0xUSVBTX0dldEluZGV4RnJvbUluZm9BIChUT09MVElQU19JTkZPICppbmZvUHRyLCBMUFRPT0xJTkZPQSBscFRvb2xJbmZvKQoreworICAgIFRUVE9PTF9JTkZPICp0b29sUHRyOworICAgIElOVDMyIG5JbmRleDsKKworICAgIGZvciAobkluZGV4ID0gMDsgbkluZGV4IDwgaW5mb1B0ci0+dU51bVRvb2xzOyBuSW5kZXgrKykgeworCXRvb2xQdHIgPSAmaW5mb1B0ci0+dG9vbHNbbkluZGV4XTsKKworCWlmICgobHBUb29sSW5mby0+aHduZCA9PSB0b29sUHRyLT5od25kKSAmJgorCSAgICAobHBUb29sSW5mby0+dUlkID09IHRvb2xQdHItPnVJZCkpCisJICAgIHJldHVybiBuSW5kZXg7CisgICAgfQorCisgICAgcmV0dXJuIC0xOworfQorCisvKgorc3RhdGljIElOVDMyCitUT09MVElQU19HZXRJbmRleEZyb21Qb2ludCAoVE9PTFRJUFNfSU5GTyAqaW5mb1B0ciwgTFBQT0lOVDMyIGxwUHQpCit7CisgICAgVFRUT09MX0lORk8gKnRvb2xQdHI7CisgICAgSU5UMzIgbkluZGV4OworCisgICAgZm9yIChuSW5kZXggPSAwOyBuSW5kZXggPCBpbmZvUHRyLT51TnVtVG9vbHM7IG5JbmRleCsrKSB7CisJdG9vbFB0ciA9ICZpbmZvUHRyLT50b29sc1tuSW5kZXhdOworCisJaWYgKGxwVG9vbEluZm8tPnVGbGFncyAmIFRURl9JRElTSFdORCkgeworCSAgICBpZiAoUHRJblJlY3QgKAorCX0KKwllbHNlIHsKKworCSAgICByZXR1cm4gbkluZGV4OworCX0KKyAgICB9CisKKyAgICByZXR1cm4gLTE7Cit9CisqLworCitzdGF0aWMgTFJFU1VMVAorVE9PTFRJUFNfQWN0aXZhdGUgKFdORCAqd25kUHRyLCBXUEFSQU0zMiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCit7CisgICAgVE9PTFRJUFNfSU5GTyAqaW5mb1B0ciA9IFRPT0xUSVBTX0dldEluZm9QdHIod25kUHRyKTsKKworICAgIGluZm9QdHItPmJBY3RpdmUgPSAoQk9PTDMyKXdQYXJhbTsKKworICAgIGlmIChpbmZvUHRyLT5iQWN0aXZlKSB7CisJRklYTUUgKHRvb2x0aXBzLCAiYWN0aXZhdGVkIVxuIik7CisgICAgfQorICAgIGVsc2UgeworCUZJWE1FICh0b29sdGlwcywgImRlYWN0aXZhdGVkIVxuIik7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKKworc3RhdGljIExSRVNVTFQKK1RPT0xUSVBTX0FkZFRvb2wzMkEgKFdORCAqd25kUHRyLCBXUEFSQU0zMiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCit7CisgICAgVE9PTFRJUFNfSU5GTyAqaW5mb1B0ciA9IFRPT0xUSVBTX0dldEluZm9QdHIod25kUHRyKTsKKyAgICBMUFRPT0xJTkZPQSBscFRvb2xJbmZvID0gKExQVE9PTElORk9BKWxQYXJhbTsKKyAgICBUVFRPT0xfSU5GTyAqdG9vbFB0cjsKKworICAgIGlmIChscFRvb2xJbmZvID09IE5VTEwpIHJldHVybiBGQUxTRTsKKworICAgIGlmIChpbmZvUHRyLT51TnVtVG9vbHMgPT0gMCkgeworCWluZm9QdHItPnRvb2xzID0KKwkgICAgSGVhcEFsbG9jIChHZXRQcm9jZXNzSGVhcCAoKSwgSEVBUF9aRVJPX01FTU9SWSwKKwkJICAgICAgIHNpemVvZihUVFRPT0xfSU5GTykpOworCXRvb2xQdHIgPSBpbmZvUHRyLT50b29sczsKKyAgICB9CisgICAgZWxzZSB7CisJVFRUT09MX0lORk8gKm9sZFRvb2xzID0gaW5mb1B0ci0+dG9vbHM7CisJaW5mb1B0ci0+dG9vbHMgPQorCSAgICBIZWFwQWxsb2MgKEdldFByb2Nlc3NIZWFwICgpLCBIRUFQX1pFUk9fTUVNT1JZLAorCQkgICAgICAgc2l6ZW9mKFRUVE9PTF9JTkZPKSAqIChpbmZvUHRyLT51TnVtVG9vbHMgKyAxKSk7CisJbWVtY3B5IChpbmZvUHRyLT50b29scywgb2xkVG9vbHMsCisJCWluZm9QdHItPnVOdW1Ub29scyAqIHNpemVvZihUVFRPT0xfSU5GTykpOworCUhlYXBGcmVlIChHZXRQcm9jZXNzSGVhcCAoKSwgMCwgb2xkVG9vbHMpOworCXRvb2xQdHIgPSAmaW5mb1B0ci0+dG9vbHNbaW5mb1B0ci0+dU51bVRvb2xzXTsKKyAgICB9CisKKyAgICBpbmZvUHRyLT51TnVtVG9vbHMrKzsKKworICAgIC8qIGNvcHkgdG9vbCBkYXRhICovCisgICAgdG9vbFB0ci0+dUZsYWdzID0gbHBUb29sSW5mby0+dUZsYWdzOworICAgIHRvb2xQdHItPmh3bmQgICA9IGxwVG9vbEluZm8tPmh3bmQ7CisgICAgdG9vbFB0ci0+dUlkICAgID0gbHBUb29sSW5mby0+dUlkOworICAgIHRvb2xQdHItPnJlY3QgICA9IGxwVG9vbEluZm8tPnJlY3Q7CisgICAgdG9vbFB0ci0+aGluc3QgID0gbHBUb29sSW5mby0+aGluc3Q7CisKKyAgICBpZiAobHBUb29sSW5mby0+aGluc3QpIHsKKwl0b29sUHRyLT5scHN6VGV4dCA9IGxwVG9vbEluZm8tPmxwc3pUZXh0OworICAgIH0KKyAgICBlbHNlIGlmIChscFRvb2xJbmZvLT5scHN6VGV4dCkgeworCWlmIChscFRvb2xJbmZvLT5scHN6VGV4dCA9PSBMUFNUUl9URVhUQ0FMTEJBQ0szMkEpCisJICAgIHRvb2xQdHItPmxwc3pUZXh0ID0gbHBUb29sSW5mby0+bHBzelRleHQ7CisJZWxzZSB7CisJICAgIElOVDMyIGxlbiA9IGxzdHJsZW4zMkEgKGxwVG9vbEluZm8tPmxwc3pUZXh0KTsKKwkgICAgdG9vbFB0ci0+bHBzelRleHQgPQorCQlIZWFwQWxsb2MgKEdldFByb2Nlc3NIZWFwICgpLCBIRUFQX1pFUk9fTUVNT1JZLCBsZW4gKyAxKTsKKwkgICAgbHN0cmNweTMyQSAodG9vbFB0ci0+bHBzelRleHQsIGxwVG9vbEluZm8tPmxwc3pUZXh0KTsKKwl9CisgICAgfQorCisgICAgaWYgKGxwVG9vbEluZm8tPmNiU2l6ZSA+PSBzaXplb2YoVE9PTElORk9BKSkKKwl0b29sUHRyLT5sUGFyYW0gPSBscFRvb2xJbmZvLT5sUGFyYW07CisKKworICAgIHJldHVybiBUUlVFOworfQorCisKKy8vIDw8IFRPT0xUSVBTX0FkZFRvb2wzMlcgPj4KKworCitzdGF0aWMgTFJFU1VMVAorVE9PTFRJUFNfRGVsVG9vbDMyQSAoV05EICp3bmRQdHIsIFdQQVJBTTMyIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3sKKyAgICBUT09MVElQU19JTkZPICppbmZvUHRyID0gVE9PTFRJUFNfR2V0SW5mb1B0cih3bmRQdHIpOworICAgIExQVE9PTElORk9BIGxwVG9vbEluZm8gPSAoTFBUT09MSU5GT0EpbFBhcmFtOworICAgIFRUVE9PTF9JTkZPICp0b29sUHRyOworICAgIElOVDMyIG5JbmRleDsKKworICAgIGlmIChscFRvb2xJbmZvID09IE5VTEwpIHJldHVybiAwOworICAgIGlmIChpbmZvUHRyLT51TnVtVG9vbHMgPT0gMCkgcmV0dXJuIDA7CisKKyAgICBuSW5kZXggPSBUT09MVElQU19HZXRJbmRleEZyb21JbmZvQSAoaW5mb1B0ciwgbHBUb29sSW5mbyk7CisgICAgaWYgKG5JbmRleCA9PSAtMSkgcmV0dXJuIDA7CisKKyAgICBUUkFDRSAodG9vbHRpcHMsICJpbmRleD0lZFxuIiwgbkluZGV4KTsKKworCisvKiAgICBkZWxldGUgdG9vbCBmcm9tIHRvb2wgbGlzdCAqLworLyoKKyAgICB0b29sUHRyID0gJmluZm9QdHItPnRvb2xzW25JbmRleF07IAorCisgICAgLy8gZGVsZXRlIHRleHQgc3RyaW5nCisgICAgaWYgKCh0b29sUHRyLT5oaW5zdCkgJiYgKHRvb2xQdHItPmxwc3pUZXh0KSkgeworCWlmICh0b29sUHRyLT5scHN6VGV4dCAhPSBMUFNUUl9URVhUQ0FMTEJBQ0szMkEpCisJICAgIEhlYXBGcmVlIChHZXRQcm9jZXNzSGVhcCAoKSwgMCwgdG9vbFB0ci0+bHBzelRleHQpOworICAgIH0KKworCisqLworICAgIHJldHVybiAwOworfQorCisKKy8vIDw8IFRPT0xUSVBTX0RlbFRvb2wzMlcgPj4KKworCitzdGF0aWMgTFJFU1VMVAorVE9PTFRJUFNfRW51bVRvb2xzMzJBIChXTkQgKnduZFB0ciwgV1BBUkFNMzIgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQoreworICAgIFRPT0xUSVBTX0lORk8gKmluZm9QdHIgPSBUT09MVElQU19HZXRJbmZvUHRyKHduZFB0cik7CisgICAgVUlOVDMyIHVJbmRleCA9IChVSU5UMzIpd1BhcmFtOworICAgIExQVE9PTElORk9BIGxwVG9vbEluZm8gPSAoTFBUT09MSU5GT0EpbFBhcmFtOworICAgIFRUVE9PTF9JTkZPICp0b29sUHRyOworCisgICAgaWYgKHVJbmRleCA+PSBpbmZvUHRyLT51TnVtVG9vbHMpIHJldHVybiBGQUxTRTsKKyAgICBpZiAobHBUb29sSW5mbyA9PSBOVUxMKSByZXR1cm4gRkFMU0U7CisKKyAgICBUUkFDRSAodG9vbHRpcHMsICJpbmRleD0ldVxuIiwgdUluZGV4KTsKKworICAgIHRvb2xQdHIgPSAmaW5mb1B0ci0+dG9vbHNbdUluZGV4XTsKKworICAgIC8qIGNvcHkgdG9vbCBkYXRhICovCisgICAgbHBUb29sSW5mby0+dUZsYWdzICAgPSB0b29sUHRyLT51RmxhZ3M7CisgICAgbHBUb29sSW5mby0+aHduZCAgICAgPSB0b29sUHRyLT5od25kOworICAgIGxwVG9vbEluZm8tPnVJZCAgICAgID0gdG9vbFB0ci0+dUlkOworICAgIGxwVG9vbEluZm8tPnJlY3QgICAgID0gdG9vbFB0ci0+cmVjdDsKKyAgICBscFRvb2xJbmZvLT5oaW5zdCAgICA9IHRvb2xQdHItPmhpbnN0OworICAgIGxwVG9vbEluZm8tPmxwc3pUZXh0ID0gdG9vbFB0ci0+bHBzelRleHQ7CisKKyAgICBpZiAobHBUb29sSW5mby0+Y2JTaXplID49IHNpemVvZihUT09MSU5GT0EpKQorCWxwVG9vbEluZm8tPmxQYXJhbSA9IHRvb2xQdHItPmxQYXJhbTsKKworICAgIHJldHVybiBUUlVFOworfQorCisKKy8vIDw8IFRPT0xUSVBTX0VudW1Ub29sczMyVyA+PgorCisKK3N0YXRpYyBMUkVTVUxUCitUT09MVElQU19HZXRDdXJyZW50VG9vbDMyQSAoV05EICp3bmRQdHIsIFdQQVJBTTMyIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3sKKyAgICBUT09MVElQU19JTkZPICppbmZvUHRyID0gVE9PTFRJUFNfR2V0SW5mb1B0cih3bmRQdHIpOworICAgIExQVE9PTElORk9BIGxwdGkgPSAoTFBUT09MSU5GT0EpbFBhcmFtOworCisgICAgaWYgKGxwdGkpIHsKKwlpZiAoaW5mb1B0ci0+aUN1cnJlbnRUb29sID4gLTEpIHsKKwkgICAgLyogRklYTUUgKi8KKworCSAgICByZXR1cm4gVFJVRTsKKwl9CisJZWxzZQorCSAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGVsc2UKKwlyZXR1cm4gKGluZm9QdHItPmlDdXJyZW50VG9vbCAhPSAtMSk7CisKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKKworLy8gPDwgVE9PTFRJUFNfR2V0Q3VycmVudFRvb2wzMlcgPj4KKy8vIDw8IFRPT0xUSVBTX0dldERlbGF5VGltZSA+PgorLy8gPDwgVE9PTFRJUFNfR2V0TWFyZ2luID4+CisKKworc3RhdGljIExSRVNVTFQKK1RPT0xUSVBTX0dldE1heFRpcFdpZHRoIChXTkQgKnduZFB0ciwgV1BBUkFNMzIgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQoreworICAgIFRPT0xUSVBTX0lORk8gKmluZm9QdHIgPSBUT09MVElQU19HZXRJbmZvUHRyKHduZFB0cik7CisKKyAgICByZXR1cm4gaW5mb1B0ci0+aU1heFRpcFdpZHRoOworfQorCisKK3N0YXRpYyBMUkVTVUxUCitUT09MVElQU19HZXRUZXh0MzJBIChXTkQgKnduZFB0ciwgV1BBUkFNMzIgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQoreworICAgIFRPT0xUSVBTX0lORk8gKmluZm9QdHIgPSBUT09MVElQU19HZXRJbmZvUHRyKHduZFB0cik7CisgICAgTFBUT09MSU5GT0EgbHB0aSA9IChMUFRPT0xJTkZPQSlsUGFyYW07CisgICAgSU5UMzIgbkluZGV4OworCisgICAgaWYgKCEobHB0aSkpIHJldHVybiAwOworICAgIGlmIChscHRpLT5jYlNpemUgPCBzaXplb2YoVE9PTElORk9BKSkgcmV0dXJuIDA7CisKKyAgICBuSW5kZXggPSBUT09MVElQU19HZXRJbmRleEZyb21JbmZvQSAoaW5mb1B0ciwgbHB0aSk7CisgICAgaWYgKG5JbmRleCA9PSAtMSkgcmV0dXJuIDA7CisKKyAgICBsc3RyY3B5MzJBIChscHRpLT5scHN6VGV4dCwgaW5mb1B0ci0+dG9vbHNbbkluZGV4XS5scHN6VGV4dCk7CisKKyAgICByZXR1cm4gMDsKK30KKworCisvLyA8PCBUT09MVElQU19HZXRUZXh0MzJXID4+CisKKworc3RhdGljIExSRVNVTFQKK1RPT0xUSVBTX0dldFRpcEJrQ29sb3IgKFdORCAqd25kUHRyLCBXUEFSQU0zMiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCit7CisgICAgVE9PTFRJUFNfSU5GTyAqaW5mb1B0ciA9IFRPT0xUSVBTX0dldEluZm9QdHIod25kUHRyKTsKKyAgICByZXR1cm4gaW5mb1B0ci0+Y2xyQms7Cit9CisKKworc3RhdGljIExSRVNVTFQKK1RPT0xUSVBTX0dldFRpcFRleHRDb2xvciAoV05EICp3bmRQdHIsIFdQQVJBTTMyIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3sKKyAgICBUT09MVElQU19JTkZPICppbmZvUHRyID0gVE9PTFRJUFNfR2V0SW5mb1B0cih3bmRQdHIpOworICAgIHJldHVybiBpbmZvUHRyLT5jbHJUZXh0OworfQorCisKK3N0YXRpYyBMUkVTVUxUCitUT09MVElQU19HZXRUb29sQ291bnQgKFdORCAqd25kUHRyLCBXUEFSQU0zMiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCit7CisgICAgVE9PTFRJUFNfSU5GTyAqaW5mb1B0ciA9IFRPT0xUSVBTX0dldEluZm9QdHIod25kUHRyKTsKKyAgICByZXR1cm4gaW5mb1B0ci0+dU51bVRvb2xzOworfQorCisKK3N0YXRpYyBMUkVTVUxUCitUT09MVElQU19HZXRUb29sSW5mbzMyQSAoV05EICp3bmRQdHIsIFdQQVJBTTMyIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3sKKyAgICBUT09MVElQU19JTkZPICppbmZvUHRyID0gVE9PTFRJUFNfR2V0SW5mb1B0cih3bmRQdHIpOworICAgIExQVE9PTElORk9BIGxwVG9vbEluZm8gPSAoTFBUT09MSU5GT0EpbFBhcmFtOworICAgIFRUVE9PTF9JTkZPICp0b29sUHRyOworICAgIElOVDMyIG5JbmRleDsKKworICAgIGlmIChscFRvb2xJbmZvID09IE5VTEwpIHJldHVybiBGQUxTRTsKKyAgICBpZiAoaW5mb1B0ci0+dU51bVRvb2xzID09IDApIHJldHVybiBGQUxTRTsKKworICAgIG5JbmRleCA9IFRPT0xUSVBTX0dldEluZGV4RnJvbUluZm9BIChpbmZvUHRyLCBscFRvb2xJbmZvKTsKKyAgICBpZiAobkluZGV4ID09IC0xKSByZXR1cm4gRkFMU0U7CisKKyAgICBUUkFDRSAodG9vbHRpcHMsICJpbmRleD0lZFxuIiwgbkluZGV4KTsKKworICAgIHRvb2xQdHIgPSAmaW5mb1B0ci0+dG9vbHNbbkluZGV4XTsKKworICAgIC8qIGNvcHkgdG9vbCBkYXRhICovCisgICAgbHBUb29sSW5mby0+dUZsYWdzICAgPSB0b29sUHRyLT51RmxhZ3M7CisgICAgbHBUb29sSW5mby0+cmVjdCAgICAgPSB0b29sUHRyLT5yZWN0OworICAgIGxwVG9vbEluZm8tPmhpbnN0ICAgID0gdG9vbFB0ci0+aGluc3Q7CisgICAgbHBUb29sSW5mby0+bHBzelRleHQgPSB0b29sUHRyLT5scHN6VGV4dDsKKworICAgIGlmIChscFRvb2xJbmZvLT5jYlNpemUgPj0gc2l6ZW9mKFRPT0xJTkZPQSkpCisJbHBUb29sSW5mby0+bFBhcmFtID0gdG9vbFB0ci0+bFBhcmFtOworCisgICAgcmV0dXJuIFRSVUU7Cit9CisKKworLy8gPDwgVE9PTFRJUFNfR2V0VG9vbEluZm8zMlcgPj4KKy8vIDw8IFRPT0xUSVBTX0hpdFRlc3QzMkEgPj4KKy8vIDw8IFRPT0xUSVBTX0hpdFRlc3QzMlcgPj4KKworCitzdGF0aWMgTFJFU1VMVAorVE9PTFRJUFNfTmV3VG9vbFJlY3QzMkEgKFdORCAqd25kUHRyLCBXUEFSQU0zMiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCit7CisgICAgVE9PTFRJUFNfSU5GTyAqaW5mb1B0ciA9IFRPT0xUSVBTX0dldEluZm9QdHIod25kUHRyKTsKKyAgICBMUFRPT0xJTkZPQSBscHRpID0gKExQVE9PTElORk9BKWxQYXJhbTsKKyAgICBJTlQzMiBuSW5kZXg7CisKKyAgICBpZiAoIShscHRpKSkgcmV0dXJuIDA7CisgICAgaWYgKGxwdGktPmNiU2l6ZSA8IHNpemVvZihUT09MSU5GT0EpKSByZXR1cm4gMDsKKworICAgIG5JbmRleCA9IFRPT0xUSVBTX0dldEluZGV4RnJvbUluZm9BIChpbmZvUHRyLCBscHRpKTsKKyAgICBpZiAobkluZGV4ID09IC0xKSByZXR1cm4gMDsKKworICAgIGluZm9QdHItPnRvb2xzW25JbmRleF0ucmVjdCA9IGxwdGktPnJlY3Q7CisKKyAgICByZXR1cm4gMDsKK30KKworCisvLyA8PCBUT09MVElQU19OZXdUb29sUmVjdDMyVyA+PgorLy8gPDwgVE9PTFRJUFNfUG9wID4+CisKKworc3RhdGljIExSRVNVTFQKK1RPT0xUSVBTX1JlbGF5RXZlbnQgKFdORCAqd25kUHRyLCBXUEFSQU0zMiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCit7CisgICAgVE9PTFRJUFNfSU5GTyAqaW5mb1B0ciA9IFRPT0xUSVBTX0dldEluZm9QdHIod25kUHRyKTsKKyAgICBMUE1TRzE2IGxwTXNnID0gKExQTVNHMTYpbFBhcmFtOworCisgICAgaWYgKGxwTXNnID09IE5VTEwpIHJldHVybiAwOworCisgICAgaWYgKGxwTXNnLT5tZXNzYWdlID09IFdNX01PVVNFTU9WRSkgeworCUZJWE1FICh0b29sdGlwcywgIldNX01PVVNFTU9WRSAoJWQgJWQpXG4iLCBscE1zZy0+cHQueCwgbHBNc2ctPnB0LnkpOworICAgIH0KKworLy8gICAgRklYTUUgKHRvb2x0aXBzLCAiZW1wdHkgc3R1YiFcbiIpOworCisgICAgcmV0dXJuIDA7Cit9CisKKworLy8gPDwgVE9PTFRJUFNfU2V0RGVsYXlUaW1lID4+CisvLyA8PCBUT09MVElQU19TZXRNYXJnaW4gPj4KKworCitzdGF0aWMgTFJFU1VMVAorVE9PTFRJUFNfU2V0TWF4VGlwV2lkdGggKFdORCAqd25kUHRyLCBXUEFSQU0zMiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCit7CisgICAgVE9PTFRJUFNfSU5GTyAqaW5mb1B0ciA9IFRPT0xUSVBTX0dldEluZm9QdHIod25kUHRyKTsKKyAgICBJTlQzMiBpVGVtcCA9IGluZm9QdHItPmlNYXhUaXBXaWR0aDsKKworICAgIGluZm9QdHItPmlNYXhUaXBXaWR0aCA9IChJTlQzMilsUGFyYW07CisKKyAgICByZXR1cm4gaVRlbXA7Cit9CisKKworc3RhdGljIExSRVNVTFQKK1RPT0xUSVBTX1NldFRpcEJrQ29sb3IgKFdORCAqd25kUHRyLCBXUEFSQU0zMiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCit7CisgICAgVE9PTFRJUFNfSU5GTyAqaW5mb1B0ciA9IFRPT0xUSVBTX0dldEluZm9QdHIod25kUHRyKTsKKworICAgIGluZm9QdHItPmNsckJrID0gKENPTE9SUkVGKXdQYXJhbTsKKworICAgIHJldHVybiAwOworfQorCisKK3N0YXRpYyBMUkVTVUxUCitUT09MVElQU19TZXRUaXBUZXh0Q29sb3IgKFdORCAqd25kUHRyLCBXUEFSQU0zMiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCit7CisgICAgVE9PTFRJUFNfSU5GTyAqaW5mb1B0ciA9IFRPT0xUSVBTX0dldEluZm9QdHIod25kUHRyKTsKKworICAgIGluZm9QdHItPmNsclRleHQgPSAoQ09MT1JSRUYpd1BhcmFtOworCisgICAgcmV0dXJuIDA7Cit9CisKKworc3RhdGljIExSRVNVTFQKK1RPT0xUSVBTX1NldFRvb2xJbmZvMzJBIChXTkQgKnduZFB0ciwgV1BBUkFNMzIgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQoreworICAgIFRPT0xUSVBTX0lORk8gKmluZm9QdHIgPSBUT09MVElQU19HZXRJbmZvUHRyKHduZFB0cik7CisgICAgTFBUT09MSU5GT0EgbHBUb29sSW5mbyA9IChMUFRPT0xJTkZPQSlsUGFyYW07CisgICAgVFRUT09MX0lORk8gKnRvb2xQdHI7CisgICAgSU5UMzIgbkluZGV4OworCisgICAgaWYgKGxwVG9vbEluZm8gPT0gTlVMTCkgcmV0dXJuIDA7CisKKyAgICBuSW5kZXggPSBUT09MVElQU19HZXRJbmRleEZyb21JbmZvQSAoaW5mb1B0ciwgbHBUb29sSW5mbyk7CisgICAgaWYgKG5JbmRleCA9PSAtMSkgcmV0dXJuIDA7CisKKyAgICBUUkFDRSAodG9vbHRpcHMsICJpbmRleD0lZFxuIiwgbkluZGV4KTsKKworICAgIHRvb2xQdHIgPSAmaW5mb1B0ci0+dG9vbHNbbkluZGV4XTsKKworICAgIC8qIGNvcHkgdG9vbCBkYXRhICovCisgICAgdG9vbFB0ci0+dUZsYWdzID0gbHBUb29sSW5mby0+dUZsYWdzOworICAgIHRvb2xQdHItPmh3bmQgICA9IGxwVG9vbEluZm8tPmh3bmQ7CisgICAgdG9vbFB0ci0+dUlkICAgID0gbHBUb29sSW5mby0+dUlkOworICAgIHRvb2xQdHItPnJlY3QgICA9IGxwVG9vbEluZm8tPnJlY3Q7CisgICAgdG9vbFB0ci0+aGluc3QgID0gbHBUb29sSW5mby0+aGluc3Q7CisKKyAgICBpZiAobHBUb29sSW5mby0+bHBzelRleHQpIHsKKwlpZiAobHBUb29sSW5mby0+bHBzelRleHQgPT0gTFBTVFJfVEVYVENBTExCQUNLMzJBKQorCSAgICB0b29sUHRyLT5scHN6VGV4dCA9IGxwVG9vbEluZm8tPmxwc3pUZXh0OworCWVsc2UgeworCSAgICBJTlQzMiBsZW4gPSBsc3RybGVuMzJBIChscFRvb2xJbmZvLT5scHN6VGV4dCk7CisJICAgIEhlYXBGcmVlIChHZXRQcm9jZXNzSGVhcCAoKSwgMCwgdG9vbFB0ci0+bHBzelRleHQpOworCSAgICB0b29sUHRyLT5scHN6VGV4dCA9CisJCUhlYXBBbGxvYyAoR2V0UHJvY2Vzc0hlYXAgKCksIEhFQVBfWkVST19NRU1PUlksIGxlbiArIDEpOworCSAgICBsc3RyY3B5MzJBICh0b29sUHRyLT5scHN6VGV4dCwgbHBUb29sSW5mby0+bHBzelRleHQpOworCX0KKyAgICB9CisKKyAgICBpZiAobHBUb29sSW5mby0+Y2JTaXplID49IHNpemVvZihUT09MSU5GT0EpKQorCXRvb2xQdHItPmxQYXJhbSA9IGxwVG9vbEluZm8tPmxQYXJhbTsKKworICAgIHJldHVybiAwOworfQorCisKKy8vIDw8IFRPT0xUSVBTX1NldFRvb2xJbmZvMzJXID4+CisvLyA8PCBUT09MVElQU19UcmFja0FjdGl2ZSA+PgorLy8gPDwgVE9PTFRJUFNfVHJhY2tQb3NpdGlvbiA+PgorLy8gPDwgVE9PTFRJUFNfVXBkYXRlID4+CisvLyA8PCBUT09MVElQU19VcGRhdGVUaXBUZXh0MzJBID4+CisvLyA8PCBUT09MVElQU19VcGRhdGVUaXBUZXh0MzJXID4+CisvLyA8PCBUT09MVElQU19XaW5kb3dGcm9tUG9pbnQgPj4KKworCitzdGF0aWMgTFJFU1VMVAorVE9PTFRJUFNfQ3JlYXRlIChXTkQgKnduZFB0ciwgV1BBUkFNMzIgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQoreworICAgIFRPT0xUSVBTX0lORk8gKmluZm9QdHI7CisKKyAgICAvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIGluZm8gc3RydWN0dXJlICovCisgICAgaW5mb1B0ciA9IChUT09MVElQU19JTkZPICopSGVhcEFsbG9jIChHZXRQcm9jZXNzSGVhcCAoKSwgSEVBUF9aRVJPX01FTU9SWSwKKwkJCQkJICBzaXplb2YoVE9PTFRJUFNfSU5GTykpOworICAgIHduZFB0ci0+d0V4dHJhWzBdID0gKERXT1JEKWluZm9QdHI7CisKKyAgICBpZiAoaW5mb1B0ciA9PSBOVUxMKSB7CisJRVJSICh0b29sdGlwcywgImNvdWxkIG5vdCBhbGxvY2F0ZSBpbmZvIG1lbW9yeSFcbiIpOworCXJldHVybiAwOworICAgIH0KKworICAgIC8qIGluaXRpYWxpemUgaW5mbyBzdHJ1Y3R1cmUgKi8KKyAgICBpbmZvUHRyLT5iQWN0aXZlID0gVFJVRTsKKyAgICBpbmZvUHRyLT5jbHJCayAgID0gR2V0U3lzQ29sb3IzMiAoQ09MT1JfSU5GT0JLKTsKKyAgICBpbmZvUHRyLT5jbHJUZXh0ID0gR2V0U3lzQ29sb3IzMiAoQ09MT1JfSU5GT1RFWFQpOworICAgIGluZm9QdHItPmhGb250ICAgPSBOVUxMOworICAgIGluZm9QdHItPmlNYXhUaXBXaWR0aCA9IC0xOworICAgIGluZm9QdHItPmlDdXJyZW50VG9vbCA9IC0xOworCisgICAgcmV0dXJuIDA7Cit9CisKKworc3RhdGljIExSRVNVTFQKK1RPT0xUSVBTX0Rlc3Ryb3kgKFdORCAqd25kUHRyLCBXUEFSQU0zMiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCit7CisgICAgVE9PTFRJUFNfSU5GTyAqaW5mb1B0ciA9IFRPT0xUSVBTX0dldEluZm9QdHIod25kUHRyKTsKKworCisgICAgLyogZnJlZSB0b29scyAqLworICAgIGlmIChpbmZvUHRyLT50b29scykgeworCUlOVDMyIGk7CisJZm9yIChpID0gMDsgaSA8IGluZm9QdHItPnVOdW1Ub29sczsgaSsrKSB7CisJICAgIGlmICgoaW5mb1B0ci0+dG9vbHNbaV0uaGluc3QpICYmIChpbmZvUHRyLT50b29sc1tpXS5scHN6VGV4dCkpIHsKKwkJaWYgKGluZm9QdHItPnRvb2xzW2ldLmxwc3pUZXh0ICE9IExQU1RSX1RFWFRDQUxMQkFDSzMyQSkKKwkJICAgIEhlYXBGcmVlIChHZXRQcm9jZXNzSGVhcCAoKSwgMCwgaW5mb1B0ci0+dG9vbHNbaV0ubHBzelRleHQpOworCSAgICB9CisJfQorCUhlYXBGcmVlIChHZXRQcm9jZXNzSGVhcCAoKSwgMCwgaW5mb1B0ci0+dG9vbHMpOworICAgIH0KKworICAgIC8qIGZyZWUgdG9vbCB0aXBzIGluZm8gZGF0YSAqLworICAgIEhlYXBGcmVlIChHZXRQcm9jZXNzSGVhcCAoKSwgMCwgaW5mb1B0cik7CisKKyAgICByZXR1cm4gMDsKK30KKworCitzdGF0aWMgTFJFU1VMVAorVE9PTFRJUFNfR2V0Rm9udCAoV05EICp3bmRQdHIsIFdQQVJBTTMyIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3sKKyAgICBUT09MVElQU19JTkZPICppbmZvUHRyID0gVE9PTFRJUFNfR2V0SW5mb1B0cih3bmRQdHIpOworCisgICAgcmV0dXJuIGluZm9QdHItPmhGb250OworfQorCisKKy8vIDw8IFRPT0xUSVBTX01vdXNlTW92ZSA+PgorLy8gPDwgVE9PTFRJUFNfUGFpbnQgPj4KKworCitzdGF0aWMgTFJFU1VMVAorVE9PTFRJUFNfU2V0Rm9udCAoV05EICp3bmRQdHIsIFdQQVJBTTMyIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3sKKyAgICBUT09MVElQU19JTkZPICppbmZvUHRyID0gVE9PTFRJUFNfR2V0SW5mb1B0cih3bmRQdHIpOworCisgICAgaW5mb1B0ci0+aEZvbnQgPSAoSEZPTlQzMil3UGFyYW07CisKKyAgICBpZiAoTE9XT1JEKGxQYXJhbSkpIHsKKwkvKiByZWRyYXcgKi8KKworICAgIH0KKworICAgIHJldHVybiAwOworfQorCisKKy8vIDw8IFRPT0xUSVBTX1RpbWVyID4+CisvLyA8PCBUT09MVElQU19XaW5JbmlDaGFuZ2UgPj4KKworCitMUkVTVUxUIFdJTkFQSQorVG9vbFRpcHNXaW5kb3dQcm9jIChIV05EMzIgaHduZCwgVUlOVDMyIHVNc2csIFdQQVJBTTMyIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3sKKyAgICBXTkQgKnduZFB0ciA9IFdJTl9GaW5kV25kUHRyKGh3bmQpOworCisgICAgc3dpdGNoICh1TXNnKQorICAgIHsKKwljYXNlIFRUTV9BQ1RJVkFURToKKwkgICAgcmV0dXJuIFRPT0xUSVBTX0FjdGl2YXRlICh3bmRQdHIsIHdQYXJhbSwgbFBhcmFtKTsKKworCWNhc2UgVFRNX0FERFRPT0wzMkE6CisJICAgIHJldHVybiBUT09MVElQU19BZGRUb29sMzJBICh3bmRQdHIsIHdQYXJhbSwgbFBhcmFtKTsKKworLy8JY2FzZSBUVE1fQUREVE9PTDMyVzoKKworCWNhc2UgVFRNX0RFTFRPT0wzMkE6CisJICAgIHJldHVybiBUT09MVElQU19EZWxUb29sMzJBICh3bmRQdHIsIHdQYXJhbSwgbFBhcmFtKTsKKworLy8JY2FzZSBUVE1fREVMVE9PTDMyVzoKKworCWNhc2UgVFRNX0VOVU1UT09MUzMyQToKKwkgICAgcmV0dXJuIFRPT0xUSVBTX0VudW1Ub29sczMyQSAod25kUHRyLCB3UGFyYW0sIGxQYXJhbSk7CisKKy8vCWNhc2UgVFRNX0VOVU1UT09MUzMyVzoKKworCWNhc2UgVFRNX0dFVENVUlJFTlRUT09MMzJBOgorCSAgICByZXR1cm4gVE9PTFRJUFNfR2V0Q3VycmVudFRvb2wzMkEgKHduZFB0ciwgd1BhcmFtLCBsUGFyYW0pOworCisvLwljYXNlIFRUTV9HRVRDVVJSRU5UVE9PTDMyVzoKKy8vCWNhc2UgVFRNX0dFVERFTEFZVElNRToJCQkvKiA0LjcwICovCisvLwljYXNlIFRUTV9HRVRNQVJHSU46CQkJLyogNC43MCAqLworCisJY2FzZSBUVE1fR0VUTUFYVElQV0lEVEg6CisJICAgIHJldHVybiBUT09MVElQU19HZXRNYXhUaXBXaWR0aCAod25kUHRyLCB3UGFyYW0sIGxQYXJhbSk7CisKKwljYXNlIFRUTV9HRVRURVhUMzJBOgorCSAgICByZXR1cm4gVE9PTFRJUFNfR2V0VGV4dDMyQSAod25kUHRyLCB3UGFyYW0sIGxQYXJhbSk7CisKKy8vCWNhc2UgVFRNX0dFVFRFWFQzMlc6CisKKwljYXNlIFRUTV9HRVRUSVBCS0NPTE9SOgorCSAgICByZXR1cm4gVE9PTFRJUFNfR2V0VGlwQmtDb2xvciAod25kUHRyLCB3UGFyYW0sIGxQYXJhbSk7CisKKwljYXNlIFRUTV9HRVRUSVBURVhUQ09MT1I6CisJICAgIHJldHVybiBUT09MVElQU19HZXRUaXBUZXh0Q29sb3IgKHduZFB0ciwgd1BhcmFtLCBsUGFyYW0pOworCisJY2FzZSBUVE1fR0VUVE9PTENPVU5UOgorCSAgICByZXR1cm4gVE9PTFRJUFNfR2V0VG9vbENvdW50ICh3bmRQdHIsIHdQYXJhbSwgbFBhcmFtKTsKKworCWNhc2UgVFRNX0dFVFRPT0xJTkZPMzJBOgorCSAgICByZXR1cm4gVE9PTFRJUFNfR2V0VG9vbEluZm8zMkEgKHduZFB0ciwgd1BhcmFtLCBsUGFyYW0pOworCisvLwljYXNlIFRUTV9HRVRUT09MSU5GTzMyVzoKKy8vCWNhc2UgVFRNX0hJVFRFU1QzMkE6CisvLwljYXNlIFRUTV9ISVRURVNUMzJXOgorCisJY2FzZSBUVE1fTkVXVE9PTFJFQ1QzMkE6CisJICAgIHJldHVybiBUT09MVElQU19OZXdUb29sUmVjdDMyQSAod25kUHRyLCB3UGFyYW0sIGxQYXJhbSk7CisKKy8vCWNhc2UgVFRNX05FV1RPT0xSRUNUMzJXOgorLy8JY2FzZSBUVE1fUE9QOgkJCQkvKiA0LjcwICovCisKKwljYXNlIFRUTV9SRUxBWUVWRU5UOgorCSAgICByZXR1cm4gVE9PTFRJUFNfUmVsYXlFdmVudCAod25kUHRyLCB3UGFyYW0sIGxQYXJhbSk7CisKKy8vCWNhc2UgVFRNX1NFVERFTEFZVElNRToJCQkvKiA0LjcwICovCisvLwljYXNlIFRUTV9TRVRNQVJHSU46CQkJLyogNC43MCAqLworCisJY2FzZSBUVE1fU0VUTUFYVElQV0lEVEg6CisJICAgIHJldHVybiBUT09MVElQU19TZXRNYXhUaXBXaWR0aCAod25kUHRyLCB3UGFyYW0sIGxQYXJhbSk7CisKKwljYXNlIFRUTV9TRVRUSVBCS0NPTE9SOgorCSAgICByZXR1cm4gVE9PTFRJUFNfU2V0VGlwQmtDb2xvciAod25kUHRyLCB3UGFyYW0sIGxQYXJhbSk7CisKKwljYXNlIFRUTV9TRVRUSVBURVhUQ09MT1I6CisJICAgIHJldHVybiBUT09MVElQU19TZXRUaXBUZXh0Q29sb3IgKHduZFB0ciwgd1BhcmFtLCBsUGFyYW0pOworCisJY2FzZSBUVE1fU0VUVE9PTElORk8zMkE6CisJICAgIHJldHVybiBUT09MVElQU19TZXRUb29sSW5mbzMyQSAod25kUHRyLCB3UGFyYW0sIGxQYXJhbSk7CisKKy8vCWNhc2UgVFRNX1NFVFRPT0xJTkZPMzJXOgorLy8JY2FzZSBUVE1fVFJBQ0tBQ1RJVkU6CQkJLyogNC43MCAqLworLy8JY2FzZSBUVE1fVFJBQ0tQT1NJVElPTjoJCQkvKiA0LjcwICovCisvLwljYXNlIFRUTV9VUERBVEU6CQkJLyogNC43MSAqLworLy8JY2FzZSBUVE1fVVBEQVRFVElQVEVYVDMyQToKKy8vCWNhc2UgVFRNX1VQREFURVRJUFRFWFQzMlc6CisvLwljYXNlIFRUTV9XSU5ET1dGUk9NUE9JTlQ6CisKKworCWNhc2UgV01fQ1JFQVRFOgorCSAgICByZXR1cm4gVE9PTFRJUFNfQ3JlYXRlICh3bmRQdHIsIHdQYXJhbSwgbFBhcmFtKTsKKworCWNhc2UgV01fREVTVFJPWToKKwkgICAgcmV0dXJuIFRPT0xUSVBTX0Rlc3Ryb3kgKHduZFB0ciwgd1BhcmFtLCBsUGFyYW0pOworCisJY2FzZSBXTV9HRVRGT05UOgorCSAgICByZXR1cm4gVE9PTFRJUFNfR2V0Rm9udCAod25kUHRyLCB3UGFyYW0sIGxQYXJhbSk7CisKKy8vCWNhc2UgV01fTU9VU0VNT1ZFOgorLy8JICAgIHJldHVybiBUT09MVElQU19Nb3VzZU1vdmUgKHduZFB0ciwgd1BhcmFtLCBsUGFyYW0pOworCisvLwljYXNlIFdNX1BBSU5UOgorLy8JICAgIHJldHVybiBUT09MVElQU19QYWludCAod25kUHRyLCB3UGFyYW0pOworCisJY2FzZSBXTV9TRVRGT05UOgorCSAgICByZXR1cm4gVE9PTFRJUFNfU2V0Rm9udCAod25kUHRyLCB3UGFyYW0sIGxQYXJhbSk7CisKKy8vCWNhc2UgV01fVElNRVI6CisKKy8vCWNhc2UgV01fV0lOSU5JQ0hBTkdFOgorCisJZGVmYXVsdDoKKwkgICAgaWYgKHVNc2cgPj0gV01fVVNFUikKKwkJRVJSICh0b29sdGlwcywgInVua25vd24gbXNnICUwNHggd3A9JTA4eCBscD0lMDhseFxuIiwKKwkJICAgICB1TXNnLCB3UGFyYW0sIGxQYXJhbSk7CisJICAgIHJldHVybiBEZWZXaW5kb3dQcm9jMzJBIChod25kLCB1TXNnLCB3UGFyYW0sIGxQYXJhbSk7CisgICAgfQorICAgIHJldHVybiAwOworfQorCisKK3ZvaWQKK1RPT0xUSVBTX1JlZ2lzdGVyICh2b2lkKQoreworICAgIFdORENMQVNTMzJBIHduZENsYXNzOworCisgICAgaWYgKEdsb2JhbEZpbmRBdG9tMzJBIChUT09MVElQU19DTEFTUzMyQSkpIHJldHVybjsKKworICAgIFplcm9NZW1vcnkgKCZ3bmRDbGFzcywgc2l6ZW9mKFdORENMQVNTMzJBKSk7CisgICAgd25kQ2xhc3Muc3R5bGUgICAgICAgICA9IENTX0dMT0JBTENMQVNTIHwgQ1NfREJMQ0xLUyB8IENTX1NBVkVCSVRTOworICAgIHduZENsYXNzLmxwZm5XbmRQcm9jICAgPSAoV05EUFJPQzMyKVRvb2xUaXBzV2luZG93UHJvYzsKKyAgICB3bmRDbGFzcy5jYkNsc0V4dHJhICAgID0gMDsKKyAgICB3bmRDbGFzcy5jYlduZEV4dHJhICAgID0gc2l6ZW9mKFRPT0xUSVBTX0lORk8gKik7CisgICAgd25kQ2xhc3MuaEN1cnNvciAgICAgICA9IExvYWRDdXJzb3IzMkEgKDAsIElEQ19BUlJPVzMyQSk7CisgICAgd25kQ2xhc3MuaGJyQmFja2dyb3VuZCA9IDA7CisgICAgd25kQ2xhc3MubHBzekNsYXNzTmFtZSA9IFRPT0xUSVBTX0NMQVNTMzJBOworIAorICAgIFJlZ2lzdGVyQ2xhc3MzMkEgKCZ3bmRDbGFzcyk7Cit9CisKZGlmZiAtLWdpdCBhL2NvbnRyb2xzL3RyYWNrYmFyLmMgYi9jb250cm9scy90cmFja2Jhci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4ZTU4N2IKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cm9scy90cmFja2Jhci5jCkBAIC0wLDAgKzEsNDM3IEBACisvKgorICogVHJhY2tiYXIgY29udHJvbAorICoKKyAqIENvcHlyaWdodCAxOTk4IEVyaWMgS29obAorICoKKyAqIE5PVEVTCisgKiAgIFRoaXMgaXMganVzdCBhIGR1bW15IGNvbnRyb2wuIEFuIGF1dGhvciBpcyBuZWVkZWQhIEFueSB2b2x1bnRlZXJzPworICogICBJIHdpbGwgb25seSBpbXByb3ZlIHRoaXMgY29udHJvbCBvbmNlIGluIGEgd2hpbGUuCisgKiAgICAgRXJpYyA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CisgKgorICogVE9ETzoKKyAqICAgLSBBbGwgbWVzc2FnZXMuCisgKiAgIC0gQWxsIG5vdGlmaWNhdGlvbnMuCisgKi8KKworI2luY2x1ZGUgIndpbmRvd3MuaCIKKyNpbmNsdWRlICJjb21tY3RybC5oIgorI2luY2x1ZGUgInRyYWNrYmFyLmgiCisjaW5jbHVkZSAiaGVhcC5oIgorI2luY2x1ZGUgIndpbi5oIgorI2luY2x1ZGUgImRlYnVnLmgiCisKKworI2RlZmluZSBUUkFDS0JBUl9HZXRJbmZvUHRyKHduZFB0cikgKChUUkFDS0JBUl9JTkZPICopd25kUHRyLT53RXh0cmFbMF0pCisKKworc3RhdGljIFZPSUQKK1RSQUNLQkFSX1JlZnJlc2ggKFdORCAqd25kUHRyLCBIREMzMiBoZGMpCit7CisgICAgVFJBQ0tCQVJfSU5GTyAqaW5mb1B0ciA9IFRSQUNLQkFSX0dldEluZm9QdHIod25kUHRyKTsKKyAgICBSRUNUMzIgcmVjdDsKKworICAgIEdldENsaWVudFJlY3QzMiAod25kUHRyLT5od25kU2VsZiwgJnJlY3QpOworCisgICAgLyogZHJhdyBjaGFubmVsICovCisgICAgRHJhd0VkZ2UzMiAoaGRjLCAmaW5mb1B0ci0+cmNDaGFubmVsLCBFREdFX1NVTktFTiwgQkZfUkVDVCk7CisKKyAgICAvKiBkcmF3IHRodW1iICovCisgICAgaWYgKCEod25kUHRyLT5kd1N0eWxlICYgVEJTX05PVEhVTUIpKSB7CisKKyAgICB9CisKKyAgICAvKiBkcmF3IHRpY2tzICovCisgICAgaWYgKCEod25kUHRyLT5kd1N0eWxlICYgVEJTX05PVElDS1MpKSB7CisKKyAgICB9CisKKyAgICBpZiAoaW5mb1B0ci0+YkZvY3VzKQorCURyYXdGb2N1c1JlY3QzMiAoaGRjLCAmcmVjdCk7Cit9CisKKworc3RhdGljIExSRVNVTFQKK1RSQUNLQkFSX0NsZWFyU2VsIChXTkQgKnduZFB0ciwgV1BBUkFNMzIgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQoreworICAgIFRSQUNLQkFSX0lORk8gKmluZm9QdHIgPSBUUkFDS0JBUl9HZXRJbmZvUHRyKHduZFB0cik7CisKKyAgICBpbmZvUHRyLT5uU2VsTWluID0gMDsKKyAgICBpbmZvUHRyLT5uU2VsTWF4ID0gMDsKKworICAgIGlmICgoQk9PTDMyKXdQYXJhbSkgeworCUhEQzMyIGhkYyA9IEdldERDMzIgKHduZFB0ci0+aHduZFNlbGYpOworCVRSQUNLQkFSX1JlZnJlc2ggKHduZFB0ciwgaGRjKTsKKwlSZWxlYXNlREMzMiAod25kUHRyLT5od25kU2VsZiwgaGRjKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworCisvLyA8PCBUUkFDS0JBUl9DbGVhclRpY3MgPj4KKy8vIDw8IFRSQUNLQkFSX0dldENoYW5uZWxSZWN0ID4+CisKKworc3RhdGljIExSRVNVTFQKK1RSQUNLQkFSX0dldExpbmVTaXplIChXTkQgKnduZFB0ciwgV1BBUkFNMzIgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQoreworICAgIFRSQUNLQkFSX0lORk8gKmluZm9QdHIgPSBUUkFDS0JBUl9HZXRJbmZvUHRyKHduZFB0cik7CisKKyAgICByZXR1cm4gaW5mb1B0ci0+bkxpbmVTaXplOworfQorCisKKy8vIDw8IFRSQUNLQkFSX0dldE51bVRpY3MgPj4KKworCitzdGF0aWMgTFJFU1VMVAorVFJBQ0tCQVJfR2V0UGFnZVNpemUgKFdORCAqd25kUHRyLCBXUEFSQU0zMiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCit7CisgICAgVFJBQ0tCQVJfSU5GTyAqaW5mb1B0ciA9IFRSQUNLQkFSX0dldEluZm9QdHIod25kUHRyKTsKKworICAgIHJldHVybiBpbmZvUHRyLT5uUGFnZVNpemU7Cit9CisKKworc3RhdGljIExSRVNVTFQKK1RSQUNLQkFSX0dldFBvcyAoV05EICp3bmRQdHIsIFdQQVJBTTMyIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3sKKyAgICBUUkFDS0JBUl9JTkZPICppbmZvUHRyID0gVFJBQ0tCQVJfR2V0SW5mb1B0cih3bmRQdHIpOworCisgICAgcmV0dXJuIGluZm9QdHItPm5Qb3M7Cit9CisKKworLy8gPDwgVFJBQ0tCQVJfR2V0UFRpY3MgPj4KKworCitzdGF0aWMgTFJFU1VMVAorVFJBQ0tCQVJfR2V0UmFuZ2VNYXggKFdORCAqd25kUHRyLCBXUEFSQU0zMiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCit7CisgICAgVFJBQ0tCQVJfSU5GTyAqaW5mb1B0ciA9IFRSQUNLQkFSX0dldEluZm9QdHIod25kUHRyKTsKKworICAgIHJldHVybiBpbmZvUHRyLT5uUmFuZ2VNYXg7Cit9CisKKworc3RhdGljIExSRVNVTFQKK1RSQUNLQkFSX0dldFJhbmdlTWluIChXTkQgKnduZFB0ciwgV1BBUkFNMzIgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQoreworICAgIFRSQUNLQkFSX0lORk8gKmluZm9QdHIgPSBUUkFDS0JBUl9HZXRJbmZvUHRyKHduZFB0cik7CisKKyAgICByZXR1cm4gaW5mb1B0ci0+blJhbmdlTWluOworfQorCisKK3N0YXRpYyBMUkVTVUxUCitUUkFDS0JBUl9HZXRTZWxFbmQgKFdORCAqd25kUHRyLCBXUEFSQU0zMiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCit7CisgICAgVFJBQ0tCQVJfSU5GTyAqaW5mb1B0ciA9IFRSQUNLQkFSX0dldEluZm9QdHIod25kUHRyKTsKKworICAgIHJldHVybiBpbmZvUHRyLT5uU2VsTWF4OworfQorCisKK3N0YXRpYyBMUkVTVUxUCitUUkFDS0JBUl9HZXRTZWxTdGFydCAoV05EICp3bmRQdHIsIFdQQVJBTTMyIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3sKKyAgICBUUkFDS0JBUl9JTkZPICppbmZvUHRyID0gVFJBQ0tCQVJfR2V0SW5mb1B0cih3bmRQdHIpOworCisgICAgcmV0dXJuIGluZm9QdHItPm5TZWxNaW47Cit9CisKKworc3RhdGljIExSRVNVTFQKK1RSQUNLQkFSX0dldFRodW1iTGVuZ3RoIChXTkQgKnduZFB0ciwgV1BBUkFNMzIgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQoreworICAgIFRSQUNLQkFSX0lORk8gKmluZm9QdHIgPSBUUkFDS0JBUl9HZXRJbmZvUHRyKHduZFB0cik7CisKKyAgICByZXR1cm4gaW5mb1B0ci0+blRodW1iTGVuOworfQorCisKKworCisKKworc3RhdGljIExSRVNVTFQKK1RSQUNLQkFSX0NyZWF0ZSAoV05EICp3bmRQdHIsIFdQQVJBTTMyIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3sKKyAgICBUUkFDS0JBUl9JTkZPICppbmZvUHRyOworCisgICAgaW5mb1B0ciA9IChUUkFDS0JBUl9JTkZPICopSGVhcEFsbG9jIChHZXRQcm9jZXNzSGVhcCAoKSwgSEVBUF9aRVJPX01FTU9SWSwKKwkJCQkJICBzaXplb2YoVFJBQ0tCQVJfSU5GTykpOworICAgIHduZFB0ci0+d0V4dHJhWzBdID0gKERXT1JEKWluZm9QdHI7CisKKworICAgIC8qIGRlZmF1bHQgdmFsdWVzICovCisgICAgaW5mb1B0ci0+blJhbmdlTWluID0gMDsKKyAgICBpbmZvUHRyLT5uUmFuZ2VNYXggPSAxMDA7CisgICAgaW5mb1B0ci0+bkxpbmVTaXplID0gMTsKKyAgICBpbmZvUHRyLT5uUGFnZVNpemUgPSAyMDsKKyAgICBpbmZvUHRyLT5uU2VsTWluICAgPSAwOworICAgIGluZm9QdHItPm5TZWxNYXggICA9IDA7CisgICAgaW5mb1B0ci0+blBvcyAgICAgID0gMDsKKyAgICBpbmZvUHRyLT5uVGh1bWJMZW4gPSAyMzsgICAvKiBpbml0aWFsIHRodW1iIGxlbmd0aCAqLworCisKKyAgICByZXR1cm4gMDsKK30KKworCitzdGF0aWMgTFJFU1VMVAorVFJBQ0tCQVJfRGVzdHJveSAoV05EICp3bmRQdHIsIFdQQVJBTTMyIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3sKKyAgICBUUkFDS0JBUl9JTkZPICppbmZvUHRyID0gVFJBQ0tCQVJfR2V0SW5mb1B0cih3bmRQdHIpOworCisKKworCisgICAgSGVhcEZyZWUgKEdldFByb2Nlc3NIZWFwICgpLCAwLCBpbmZvUHRyKTsKKworICAgIHJldHVybiAwOworfQorCisKK3N0YXRpYyBMUkVTVUxUCitUUkFDS0JBUl9LaWxsRm9jdXMgKFdORCAqd25kUHRyLCBXUEFSQU0zMiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCit7CisgICAgVFJBQ0tCQVJfSU5GTyAqaW5mb1B0ciA9IFRSQUNLQkFSX0dldEluZm9QdHIod25kUHRyKTsKKyAgICBIREMzMiBoZGM7CisKKyAgICBpbmZvUHRyLT5iRm9jdXMgPSBGQUxTRTsKKworICAgIGhkYyA9IEdldERDMzIgKHduZFB0ci0+aHduZFNlbGYpOworICAgIFRSQUNLQkFSX1JlZnJlc2ggKHduZFB0ciwgaGRjKTsKKyAgICBSZWxlYXNlREMzMiAod25kUHRyLT5od25kU2VsZiwgaGRjKTsKKworICAgIHJldHVybiAwOworfQorCisKK3N0YXRpYyBMUkVTVUxUCitUUkFDS0JBUl9MQnV0dG9uRG93biAoV05EICp3bmRQdHIsIFdQQVJBTTMyIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3sKKyAgICBUUkFDS0JBUl9JTkZPICppbmZvUHRyID0gVFJBQ0tCQVJfR2V0SW5mb1B0cih3bmRQdHIpOworCisgICAgU2V0Rm9jdXMzMiAod25kUHRyLT5od25kU2VsZik7CisKKyAgICByZXR1cm4gMDsKK30KKworCitzdGF0aWMgTFJFU1VMVAorVFJBQ0tCQVJfUGFpbnQgKFdORCAqd25kUHRyLCBXUEFSQU0zMiB3UGFyYW0pCit7CisgICAgSERDMzIgaGRjOworICAgIFBBSU5UU1RSVUNUMzIgcHM7CisKKyAgICBoZGMgPSB3UGFyYW09PTAgPyBCZWdpblBhaW50MzIgKHduZFB0ci0+aHduZFNlbGYsICZwcykgOiAoSERDMzIpd1BhcmFtOworICAgIFRSQUNLQkFSX1JlZnJlc2ggKHduZFB0ciwgaGRjKTsKKyAgICBpZighd1BhcmFtKQorCUVuZFBhaW50MzIgKHduZFB0ci0+aHduZFNlbGYsICZwcyk7CisgICAgcmV0dXJuIDA7Cit9CisKKworc3RhdGljIExSRVNVTFQKK1RSQUNLQkFSX1NldEZvY3VzIChXTkQgKnduZFB0ciwgV1BBUkFNMzIgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQoreworICAgIFRSQUNLQkFSX0lORk8gKmluZm9QdHIgPSBUUkFDS0JBUl9HZXRJbmZvUHRyKHduZFB0cik7CisgICAgSERDMzIgaGRjOworCisgICAgaW5mb1B0ci0+YkZvY3VzID0gVFJVRTsKKworICAgIGhkYyA9IEdldERDMzIgKHduZFB0ci0+aHduZFNlbGYpOworICAgIFRSQUNLQkFSX1JlZnJlc2ggKHduZFB0ciwgaGRjKTsKKyAgICBSZWxlYXNlREMzMiAod25kUHRyLT5od25kU2VsZiwgaGRjKTsKKworICAgIHJldHVybiAwOworfQorCisKK3N0YXRpYyBMUkVTVUxUCitUUkFDS0JBUl9TaXplIChXTkQgKnduZFB0ciwgV1BBUkFNMzIgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQoreworICAgIFRSQUNLQkFSX0lORk8gKmluZm9QdHIgPSBUUkFDS0JBUl9HZXRJbmZvUHRyKHduZFB0cik7CisgICAgUkVDVDMyIHJlY3Q7CisKKyAgICBHZXRDbGllbnRSZWN0MzIgKHduZFB0ci0+aHduZFNlbGYsICZyZWN0KTsKKworICAgIC8qIGNhbGN1bGF0ZSBjaGFubmVsIHJlY3QgKi8KKyAgICBpZiAod25kUHRyLT5kd1N0eWxlICYgVEJTX1ZFUlQpIHsKKwlpbmZvUHRyLT5yY0NoYW5uZWwudG9wID0gcmVjdC50b3AgKyA4OworCWluZm9QdHItPnJjQ2hhbm5lbC5ib3R0b20gPSByZWN0LmJvdHRvbSAtIDg7CisKKwkvKiBGSVhNRSAqLworCWluZm9QdHItPnJjQ2hhbm5lbC5sZWZ0ID0gcmVjdC5sZWZ0ICsgMTA7CisJaW5mb1B0ci0+cmNDaGFubmVsLnJpZ2h0ID0gcmVjdC5sZWZ0ICsgMTQ7CisKKyAgICB9CisgICAgZWxzZSB7CisJaW5mb1B0ci0+cmNDaGFubmVsLmxlZnQgPSByZWN0LmxlZnQgKyA4OworCWluZm9QdHItPnJjQ2hhbm5lbC5yaWdodCA9IHJlY3QucmlnaHQgLSA4OworCisJLyogRklYTUUgKi8KKwlpZiAod25kUHRyLT5kd1N0eWxlICYgVEJTX0JPVEgpIHsKKwkgICAgaW5mb1B0ci0+cmNDaGFubmVsLnRvcCA9IHJlY3QuYm90dG9tIC8gMiAtIDI7CisJICAgIGluZm9QdHItPnJjQ2hhbm5lbC5ib3R0b20gPSByZWN0LmJvdHRvbSAvIDIgKyAyOworCisJfQorCWVsc2UgaWYgKHduZFB0ci0+ZHdTdHlsZSAmIFRCU19UT1ApIHsKKwkgICAgaW5mb1B0ci0+cmNDaGFubmVsLnRvcCA9IHJlY3QudG9wICsgMTA7CisJICAgIGluZm9QdHItPnJjQ2hhbm5lbC5ib3R0b20gPSByZWN0LnRvcCArIDE0OworCisJfQorCWVsc2UgeworCSAgICAvKiBUQlNfQk9UVE9NICovCisJICAgIGluZm9QdHItPnJjQ2hhbm5lbC50b3AgPSByZWN0LmJvdHRvbSAtIDE0OworCSAgICBpbmZvUHRyLT5yY0NoYW5uZWwuYm90dG9tID0gcmVjdC5ib3R0b20gLSAxMDsKKwl9CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKKworLy8gPDwgVFJBQ0tCQVJfVGltZXIgPj4KKy8vIDw8IFRSQUNLQkFSX1dpbkluaUNoYW5nZSA+PgorCisKK0xSRVNVTFQgV0lOQVBJCitUcmFja2JhcldpbmRvd1Byb2MgKEhXTkQzMiBod25kLCBVSU5UMzIgdU1zZywgV1BBUkFNMzIgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQoreworICAgIFdORCAqd25kUHRyID0gV0lOX0ZpbmRXbmRQdHIoaHduZCk7CisKKyAgICBzd2l0Y2ggKHVNc2cpCisgICAgeworCWNhc2UgVEJNX0NMRUFSU0VMOgorCSAgICByZXR1cm4gVFJBQ0tCQVJfQ2xlYXJTZWwgKHduZFB0ciwgd1BhcmFtLCBsUGFyYW0pOworCisvLwljYXNlIFRCTV9DTEVBUlRJQ1M6CisvLwljYXNlIFRCTV9HRVRCVUREWToKKy8vCWNhc2UgVEJNX0dFVENIQU5ORUxSRUNUOgorCisJY2FzZSBUQk1fR0VUTElORVNJWkU6CisJICAgIHJldHVybiBUUkFDS0JBUl9HZXRMaW5lU2l6ZSAod25kUHRyLCB3UGFyYW0sIGxQYXJhbSk7CisKKy8vCWNhc2UgVEJNX0dFVE5VTVRJQ1M6CisKKwljYXNlIFRCTV9HRVRQQUdFU0laRToKKwkgICAgcmV0dXJuIFRSQUNLQkFSX0dldFBhZ2VTaXplICh3bmRQdHIsIHdQYXJhbSwgbFBhcmFtKTsKKworCWNhc2UgVEJNX0dFVFBPUzoKKwkgICAgcmV0dXJuIFRSQUNLQkFSX0dldFBvcyAod25kUHRyLCB3UGFyYW0sIGxQYXJhbSk7CisKKy8vCWNhc2UgVEJNX0dFVFBUSUNTOgorCisJY2FzZSBUQk1fR0VUUkFOR0VNQVg6CisJICAgIHJldHVybiBUUkFDS0JBUl9HZXRSYW5nZU1heCAod25kUHRyLCB3UGFyYW0sIGxQYXJhbSk7CisKKwljYXNlIFRCTV9HRVRSQU5HRU1JTjoKKwkgICAgcmV0dXJuIFRSQUNLQkFSX0dldFJhbmdlTWluICh3bmRQdHIsIHdQYXJhbSwgbFBhcmFtKTsKKworCWNhc2UgVEJNX0dFVFNFTEVORDoKKwkgICAgcmV0dXJuIFRSQUNLQkFSX0dldFNlbEVuZCAod25kUHRyLCB3UGFyYW0sIGxQYXJhbSk7CisKKwljYXNlIFRCTV9HRVRTRUxTVEFSVDoKKwkgICAgcmV0dXJuIFRSQUNLQkFSX0dldFNlbFN0YXJ0ICh3bmRQdHIsIHdQYXJhbSwgbFBhcmFtKTsKKworCWNhc2UgVEJNX0dFVFRIVU1CTEVOR1RIOgorCSAgICByZXR1cm4gVFJBQ0tCQVJfR2V0VGh1bWJMZW5ndGggKHduZFB0ciwgd1BhcmFtLCBsUGFyYW0pOworCisvLwljYXNlIFRCTV9HRVRUSFVNQlJFQ1Q6CisvLwljYXNlIFRCTV9HRVRUSUM6CisvLwljYXNlIFRCTV9HRVRUSUNQT1M6CisvLwljYXNlIFRCTV9HRVRUT09MVElQUzoKKy8vCWNhc2UgVEJNX0dFVFVOSUNPREVGT1JNQVQ6CisvLwljYXNlIFRCTV9TRVRCVUREWToKKy8vCWNhc2UgVEJNX1NFVFBBR0VTSVpFOgorLy8JY2FzZSBUQk1fU0VUUE9TOgorLy8JY2FzZSBUQk1fU0VUUkFOR0U6CisvLwljYXNlIFRCTV9TRVRSQU5HRU1BWDoKKy8vCWNhc2UgVEJNX1NFVFJBTkdFTUlOOgorLy8JY2FzZSBUQk1fU0VUU0VMOgorLy8JY2FzZSBUQk1fU0VUU0VMRU5EOgorLy8JY2FzZSBUQk1fU0VUU0VMU1RBUlQ6CisvLwljYXNlIFRCTV9TRVRUSFVNQkxFTkdUSDoKKy8vCWNhc2UgVEJNX1NFVFRJQzoKKy8vCWNhc2UgVEJNX1NFVFRJQ0ZSRVE6CisvLwljYXNlIFRCTV9TRVRUSVBTSURFOgorLy8JY2FzZSBUQk1fU0VUVE9PTFRJUFM6CisvLwljYXNlIFRCTV9TRVRVTklDT0RFRk9STUFUOgorCisKKy8vCWNhc2UgV01fQ0FQVFVSRUNIQU5HRUQ6CisKKwljYXNlIFdNX0NSRUFURToKKwkgICAgcmV0dXJuIFRSQUNLQkFSX0NyZWF0ZSAod25kUHRyLCB3UGFyYW0sIGxQYXJhbSk7CisKKwljYXNlIFdNX0RFU1RST1k6CisJICAgIHJldHVybiBUUkFDS0JBUl9EZXN0cm95ICh3bmRQdHIsIHdQYXJhbSwgbFBhcmFtKTsKKworLy8JY2FzZSBXTV9FTkFCTEU6CisKKy8vCWNhc2UgV01fRVJBU0VCS0dORDoKKy8vCSAgICByZXR1cm4gMDsKKworCWNhc2UgV01fR0VURExHQ09ERToKKwkgICAgcmV0dXJuIERMR0NfV0FOVEFSUk9XUzsKKworLy8JY2FzZSBXTV9LRVlET1dOOgorCisvLwljYXNlIFdNX0tFWVVQOgorCisJY2FzZSBXTV9LSUxMRk9DVVM6CisJICAgIHJldHVybiBUUkFDS0JBUl9LaWxsRm9jdXMgKHduZFB0ciwgd1BhcmFtLCBsUGFyYW0pOworCisJY2FzZSBXTV9MQlVUVE9ORE9XTjoKKwkgICAgcmV0dXJuIFRSQUNLQkFSX0xCdXR0b25Eb3duICh3bmRQdHIsIHdQYXJhbSwgbFBhcmFtKTsKKworLy8JY2FzZSBXTV9MQlVUVE9OVVA6CisKKy8vCWNhc2UgV01fTU9VU0VNT1ZFOgorLy8JICAgIHJldHVybiBUUkFDS0JBUl9Nb3VzZU1vdmUgKHduZFB0ciwgd1BhcmFtLCBsUGFyYW0pOworCisJY2FzZSBXTV9QQUlOVDoKKwkgICAgcmV0dXJuIFRSQUNLQkFSX1BhaW50ICh3bmRQdHIsIHdQYXJhbSk7CisKKwljYXNlIFdNX1NFVEZPQ1VTOgorCSAgICByZXR1cm4gVFJBQ0tCQVJfU2V0Rm9jdXMgKHduZFB0ciwgd1BhcmFtLCBsUGFyYW0pOworCisJY2FzZSBXTV9TSVpFOgorCSAgICByZXR1cm4gVFJBQ0tCQVJfU2l6ZSAod25kUHRyLCB3UGFyYW0sIGxQYXJhbSk7CisKKy8vCWNhc2UgV01fVElNRVI6CisKKy8vCWNhc2UgV01fV0lOSU5JQ0hBTkdFOgorCisJZGVmYXVsdDoKKwkgICAgaWYgKHVNc2cgPj0gV01fVVNFUikKKwkJRVJSICh0cmFja2JhciwgInVua25vd24gbXNnICUwNHggd3A9JTA4eCBscD0lMDhseFxuIiwKKwkJICAgICB1TXNnLCB3UGFyYW0sIGxQYXJhbSk7CisJICAgIHJldHVybiBEZWZXaW5kb3dQcm9jMzJBIChod25kLCB1TXNnLCB3UGFyYW0sIGxQYXJhbSk7CisgICAgfQorICAgIHJldHVybiAwOworfQorCisKK3ZvaWQKK1RSQUNLQkFSX1JlZ2lzdGVyICh2b2lkKQoreworICAgIFdORENMQVNTMzJBIHduZENsYXNzOworCisgICAgaWYgKEdsb2JhbEZpbmRBdG9tMzJBIChUUkFDS0JBUl9DTEFTUzMyQSkpIHJldHVybjsKKworICAgIFplcm9NZW1vcnkgKCZ3bmRDbGFzcywgc2l6ZW9mKFdORENMQVNTMzJBKSk7CisgICAgd25kQ2xhc3Muc3R5bGUgICAgICAgICA9IENTX0dMT0JBTENMQVNTOworICAgIHduZENsYXNzLmxwZm5XbmRQcm9jICAgPSAoV05EUFJPQzMyKVRyYWNrYmFyV2luZG93UHJvYzsKKyAgICB3bmRDbGFzcy5jYkNsc0V4dHJhICAgID0gMDsKKyAgICB3bmRDbGFzcy5jYlduZEV4dHJhICAgID0gc2l6ZW9mKFRSQUNLQkFSX0lORk8gKik7CisgICAgd25kQ2xhc3MuaEN1cnNvciAgICAgICA9IExvYWRDdXJzb3IzMkEgKDAsIElEQ19BUlJPVzMyQSk7CisgICAgd25kQ2xhc3MuaGJyQmFja2dyb3VuZCA9IChIQlJVU0gzMikoQ09MT1JfM0RGQUNFICsgMSk7CisgICAgd25kQ2xhc3MubHBzekNsYXNzTmFtZSA9IFRSQUNLQkFSX0NMQVNTMzJBOworIAorICAgIFJlZ2lzdGVyQ2xhc3MzMkEgKCZ3bmRDbGFzcyk7Cit9CisKZGlmZiAtLWdpdCBhL2NvbnRyb2xzL3RyZWV2aWV3LmMgYi9jb250cm9scy90cmVldmlldy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1YzFlNmUKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cm9scy90cmVldmlldy5jCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBUcmVldmlldyBjb250cm9sCisgKgorICogQ29weXJpZ2h0IDE5OTggRXJpYyBLb2hsCisgKgorICogTk9URVMKKyAqICAgVGhpcyBpcyBqdXN0IGEgZHVtbXkgY29udHJvbC4gQW4gYXV0aG9yIGlzIG5lZWRlZCEgQW55IHZvbHVudGVlcnM/CisgKiAgIEkgd2lsbCBvbmx5IGltcHJvdmUgdGhpcyBjb250cm9sIG9uY2UgaW4gYSB3aGlsZS4KKyAqICAgICBFcmljIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KKyAqCisgKiBUT0RPOgorICogICAtIEFsbCBtZXNzYWdlcy4KKyAqICAgLSBBbGwgbm90aWZpY2F0aW9ucy4KKyAqLworCisjaW5jbHVkZSAid2luZG93cy5oIgorI2luY2x1ZGUgImNvbW1jdHJsLmgiCisjaW5jbHVkZSAidHJlZXZpZXcuaCIKKyNpbmNsdWRlICJoZWFwLmgiCisjaW5jbHVkZSAid2luLmgiCisjaW5jbHVkZSAiZGVidWcuaCIKKworCisjZGVmaW5lIFRSRUVWSUVXX0dldEluZm9QdHIod25kUHRyKSAoKFRSRUVWSUVXX0lORk8gKil3bmRQdHItPndFeHRyYVswXSkKKworCitMUkVTVUxUIFdJTkFQSQorVHJlZXZpZXdXaW5kb3dQcm9jIChIV05EMzIgaHduZCwgVUlOVDMyIHVNc2csIFdQQVJBTTMyIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3sKKyAgICBXTkQgKnduZFB0ciA9IFdJTl9GaW5kV25kUHRyKGh3bmQpOworCisgICAgc3dpdGNoICh1TXNnKQorICAgIHsKKy8vCWNhc2UgV01fQ1JFQVRFOgorLy8JICAgIHJldHVybiBUUkVFVklFV19DcmVhdGUgKHduZFB0ciwgd1BhcmFtLCBsUGFyYW0pOworCisvLwljYXNlIFdNX0RFU1RST1k6CisvLwkgICAgcmV0dXJuIFRSRUVWSUVXX0Rlc3Ryb3kgKHduZFB0ciwgd1BhcmFtLCBsUGFyYW0pOworCisvLwljYXNlIFdNX1BBSU5UOgorLy8JICAgIHJldHVybiBUUkVFVklFV19QYWludCAod25kUHRyLCB3UGFyYW0pOworCisvLwljYXNlIFdNX1NFVEZPTlQ6CisKKy8vCWNhc2UgV01fVElNRVI6CisKKy8vCWNhc2UgV01fV0lOSU5JQ0hBTkdFOgorCisJZGVmYXVsdDoKKwkgICAgaWYgKHVNc2cgPj0gV01fVVNFUikKKwkJRVJSICh0cmVldmlldywgInVua25vd24gbXNnICUwNHggd3A9JTA4eCBscD0lMDhseFxuIiwKKwkJICAgICB1TXNnLCB3UGFyYW0sIGxQYXJhbSk7CisJICAgIHJldHVybiBEZWZXaW5kb3dQcm9jMzJBIChod25kLCB1TXNnLCB3UGFyYW0sIGxQYXJhbSk7CisgICAgfQorICAgIHJldHVybiAwOworfQorCisKK3ZvaWQKK1RSRUVWSUVXX1JlZ2lzdGVyICh2b2lkKQoreworICAgIFdORENMQVNTMzJBIHduZENsYXNzOworCisgICAgaWYgKEdsb2JhbEZpbmRBdG9tMzJBIChXQ19UUkVFVklFVzMyQSkpIHJldHVybjsKKworICAgIFplcm9NZW1vcnkgKCZ3bmRDbGFzcywgc2l6ZW9mKFdORENMQVNTMzJBKSk7CisgICAgd25kQ2xhc3Muc3R5bGUgICAgICAgICA9IENTX0dMT0JBTENMQVNTIHwgQ1NfREJMQ0xLUzsKKyAgICB3bmRDbGFzcy5scGZuV25kUHJvYyAgID0gKFdORFBST0MzMilUcmVldmlld1dpbmRvd1Byb2M7CisgICAgd25kQ2xhc3MuY2JDbHNFeHRyYSAgICA9IDA7CisgICAgd25kQ2xhc3MuY2JXbmRFeHRyYSAgICA9IHNpemVvZihUUkVFVklFV19JTkZPICopOworICAgIHduZENsYXNzLmhDdXJzb3IgICAgICAgPSBMb2FkQ3Vyc29yMzJBICgwLCBJRENfQVJST1czMkEpOworICAgIHduZENsYXNzLmhickJhY2tncm91bmQgPSAwOworICAgIHduZENsYXNzLmxwc3pDbGFzc05hbWUgPSBXQ19UUkVFVklFVzMyQTsKKyAKKyAgICBSZWdpc3RlckNsYXNzMzJBICgmd25kQ2xhc3MpOworfQorCmRpZmYgLS1naXQgYS9jb250cm9scy91cGRvd24uYyBiL2NvbnRyb2xzL3VwZG93bi5jCmluZGV4IDAzZDZlZDAuLmU5M2I1ZWYgMTAwNjQ0Ci0tLSBhL2NvbnRyb2xzL3VwZG93bi5jCisrKyBiL2NvbnRyb2xzL3VwZG93bi5jCkBAIC04LDcgKzgsNyBAQAogICogICAgIGFycm93IGtleXMKICAqICAgLSBJIGFtIG5vdCBzdXJlIGFib3V0IHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIE1pbiwgTWF4LCBQb3MKICAqICAgICAoaW4gdGhlIFVQRE9XTl9JTkZPIHRoZSBmaWVsZHM6IE1pblZhbCwgTWF4VmFsLCBDdXJWYWwpCi0gKiAgIC0gSSB0aGluayBJIGRvbiBub3QgaGFuZGxlIGNvcnJlY3RseSB0aGUgV1NfQk9SREVSIHN0eWxlLgorICogICAtIEkgdGhpbmsgSSBkbyBub3QgaGFuZGxlIGNvcnJlY3RseSB0aGUgV1NfQk9SREVSIHN0eWxlLgogICogICAgIChTaG91bGQgYmUgZml4ZWQuIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4pCiAgKgogICogVGVzdGluZzoKZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vY29tbW9uX2NvbnRyb2xzIGIvZG9jdW1lbnRhdGlvbi9jb21tb25fY29udHJvbHMKaW5kZXggZTZjNGEyZi4uODNjY2RiOCAxMDA2NDQKLS0tIGEvZG9jdW1lbnRhdGlvbi9jb21tb25fY29udHJvbHMKKysrIGIvZG9jdW1lbnRhdGlvbi9jb21tb25fY29udHJvbHMKQEAgLTI5LDYgKzI5LDcgQEAKIC0tLS0tLS0tLS0tCiAgIFRoaXMgcGFyYWdyYXBoIGRlc2NyaWJlcyB0aGUgZGV2ZWxvcG1lbnQgc3RhdHVzIG9mIHRoZSBjb21tb24gY29udHJvbHMuCiAKKyAgCiAKIAogMy4xIEFuaW1hdGlvbiBDb250cm9sCkBAIC05OCwxMSArOTksMTQgQEAKIAogMy4xMCBMaXN0IFZpZXcgQ29udHJvbAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBBdXRob3I6CisgICAgICBEdW1teSB3cml0dGVuIGJ5IEVyaWMgS29obC4KKwogICBTdGF0dXM6Ci0gICAgICAtIE5vdGhpbmcgZG9uZSBhdCBhbGwuCisgICAgICAtIER1bW15IGNvbnRyb2wuIE5vIGZ1bmN0aW9uYWxpdHkuCiAKICAgTm90ZXM6Ci0gICAgICBUaGlzIGNvbnRyb2wgaWQgTkVFREVEIGluIG1hbnkgcGxhY2VzLiBBbnkgdm9sdW50ZWVycz8/CisgICAgICBUaGlzIGNvbnRyb2wgaXMgTkVFREVEIGluIG1hbnkgcGxhY2VzLiBBbnkgdm9sdW50ZWVycz8/CiAKIAogMy4xMSBNb250aCBDYWxlbmRhciBDb250cm9sCkBAIC0xMTMsMTIgKzExNywxNCBAQAogCiAzLjEyIFBhZ2VyIENvbnRyb2wKIC0tLS0tLS0tLS0tLS0tLS0tLQorICBBdXRob3I6CisgICAgICBEdW1teSB3cml0dGVuIGJ5IEVyaWMgS29obC4KKwogICBTdGF0dXM6Ci0gICAgICAtIER1bW15IGNvbnRyb2wuIE5vIGZ1bmN0aW9uYWxpdHkuCi0gICAgICAtIE5vdCB5ZXQgcHVibGlzaGVkLgorICAgICAgRHVtbXkgY29udHJvbC4gTm8gZnVuY3Rpb25hbGl0eS4KIAogICBOb3RlczoKLSAgICAgIFRoZSBkdW1teSBzb3VyY2UgY29kZSBpcyBhdmFpbGFibGUgZnJvbSB0aGUgYXV0aG9yLgorICAgICAgQXV0aG9yIG5lZWRlZCEhIEFueSB2b2x1bnRlZXJzPz8KIAogCiAzLjEzIFByb2dyZXNzIEJhciBDb250cm9sCkBAIC0xMzksMjMgKzE0NSwyNyBAQAogCiAzLjE0IFByb3BlcnR5IFNoZWV0CiAtLS0tLS0tLS0tLS0tLS0tLS0tCisgIEF1dGhvcjoKKyAgICAgIEFuZGVycyBDYXJsc3NvbiA8YW5kZXJzLmNhcmxzc29uQGxpbnV4Lm51PgorCiAgIFN0YXR1czoKLSAgICAgIC0gTm90aGluZyBkb25lIGF0IGFsbC4KKyAgICAgIC0gRGV2ZWxvcG1lbnQgaW4gcHJvZ3Jlc3MuCisgICAgICAtIE5vdCB5ZXQgcHVibGlzaGVkLgogCiAgIE5vdGVzOgotICAgICAgLSBUaGlzIGNvbnRyb2wgaWQgTkVFREVEIGluIG1hbnkgcGxhY2VzLgotICAgICAgLSBUYWIgY29udHJvbCBoYXMgdG8gYmUgaW1wbGVtZW50ZWQgZmlyc3QuCi0gICAgICBBbnkgdm9sdW50ZWVycz8/CisgICAgICBUYWIgY29udHJvbCBtdXN0IGJlIGltcGxlbWVudGVkIGZpcnN0LgogCiAKIDMuMTUgUmViYXIgQ29udHJvbCAoQ29vbCBCYXIpCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBBdXRob3I6CisgICAgICBEdW1teSB3cml0dGVuIGJ5IEVyaWMgS29obC4KKwogICBTdGF0dXM6CiAgICAgICAtIER1bW15IGNvbnRyb2wuIE5vIGZ1bmN0aW9uYWxpdHkuCi0gICAgICAtIE5vdCB5ZXQgcHVibGlzaGVkLgogCiAgIE5vdGVzOgotICAgICAgVGhlIGR1bW15IHNvdXJjZSBjb2RlIGlzIGF2YWlsYWJsZSBmcm9tIHRoZSBhdXRob3IuCisgICAgICBBdXRob3IgbmVlZGVkISEgQW55IHZvbHVudGVlcnM/PwogCiAKIDMuMTYgU3RhdHVzIEJhciBDb250cm9sCkBAIC0xNzYsOSArMTg2LDEyIEBACiAKIDMuMTcgVGFiIENvbnRyb2wKIC0tLS0tLS0tLS0tLS0tLS0KKyAgQXV0aG9yOgorICAgICAgQW5kZXJzIENhcmxzc29uIDxhbmRlcnMuY2FybHNzb25AbGludXgubnU+CisKICAgU3RhdHVzOgotICAgICAgLSBOb3RoaW5nIGRvbmUgYXQgYWxsLgotICAgICAgLSBuZWVkZWQuCisgICAgICAtIERldmVsb3BtZW50IGluIHByb2dyZXNzLgorICAgICAgLSBOb3QgeWV0IHB1Ymxpc2hlZC4KIAogCiAzLjE4IFRvb2xiYXIgQ29udHJvbApAQCAtMTkwLDYgKzIwMyw5IEBACiAgICAgICAtIERldmVsb3BtZW50IGluIHByb2dyZXNzLgogICAgICAgLSBCYXNpYyBmdW5jdGlvbmFsaXR5IGlzIGFsbW9zdCBkb25lLiAoZGxsIHZlcnNpb24gNC4wKQogCisgIE5vdGVzCisgICAgICBCaXRtYXBzIGFyZSBub3QgY29ycmVjdGx5IGRpc3BsYXllZC4KKwogCiAzLjE5IFRvb2x0aXAgQ29udHJvbAogLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE5OCwxNyArMjE0LDIxIEBACiAKICAgU3RhdHVzOgogICAgICAgLSBEZXZlbG9wbWVudCBpbiBwcm9ncmVzcy4KLSAgICAgIC0gTm90IHlldCBwdWJsaXNoZWQsIGJ1dCB3aWxsIGJlIHB1Ymxpc2hlZCBzb29uLgorCisgIE5vdGVzCisgICAgICBUaGUgY29udHJvbCBkb2VzIG5vdCBzaG93LgogCiAKIDMuMjAgVHJhY2tiYXIgQ29udHJvbAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIEF1dGhvcjoKLSAgICAgIEVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CisgICAgICBEdW1teSB3cml0dGVuIGJ5IEVyaWMgS29obC4KIAogICBTdGF0dXM6Ci0gICAgICAtIERldmVsb3BtZW50IGluIHByb2dyZXNzLgotICAgICAgLSBOb3QgeWV0IHB1Ymxpc2hlZCwgYnV0IHdpbGwgYmUgcHVibGlzaGVkIHNvb24uCisgICAgICAtIER1bW15IGNvbnRyb2wuIE5vIGZ1bmN0aW9uYWxpdHkuCisKKyAgTm90ZXM6CisgICAgICBBdXRob3IgbmVlZGVkISEgQW55IHZvbHVudGVlcnM/PwogCiAKIDMuMjEgVHJlZSBWaWV3IENvbnRyb2wKZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vd2luZS5tYW4gYi9kb2N1bWVudGF0aW9uL3dpbmUubWFuCmluZGV4IGFmNDVmNDIuLmJmNTdlMWMgMTAwNjQ0Ci0tLSBhL2RvY3VtZW50YXRpb24vd2luZS5tYW4KKysrIGIvZG9jdW1lbnRhdGlvbi93aW5lLm1hbgpAQCAtMSw1ICsxLDUgQEAKIC5cIiAtKi0gbnJvZmYgLSotCi0uVEggV0lORSAxICJKdW5lIDIyLCAxOTk4IiAiVmVyc2lvbiA5ODA2MTQiICJXaW5kb3dzIEVtdWxhdG9yIgorLlRIIFdJTkUgMSAiSnVseSA4LCAxOTk4IiAiVmVyc2lvbiA5ODA2MjgiICJXaW5kb3dzIEVtdWxhdG9yIgogLlNIIE5BTUUKIHdpbmUgXC0gcnVuIFdpbmRvd3MgcHJvZ3JhbXMgdW5kZXIgVW5peAogLlNIIFNZTk9QU0lTCkBAIC0zOCwxMSArMzgsMTUgQEAKIHJlZXRyYW50IG9wdGlvbiBlbmFibGVkLiAgCiAuUFAKIC5CIGxpYlhwbQotbXVzdCBiZSBpbnN0YWxsZWQuICBJdCBpcyBwcm9iYWJseSBhdmFpbGFibGUgZnJvbSB0aGUgc2FtZSBzaXRlIAotLkIgd2luZQotd2FzLCBvciB0aGUgc291cmNlcyBtYXkgYmUgRlRQJ2QgZnJvbSBmdHAueC5vcmcuICBVc3VhbGx5IGl0J3MgaW4gYQotcGFja2FnZSBuYW1lZCBzb21ldGhpbmcgbGlrZSBYRnJlZTg2LWRldmVsLgotCittdXN0IGJlIGluc3RhbGxlZC4gIElmIHlvdSdyZSB1c2luZyBSZWQgSGF0LCB0aGUgbmFtZSBvZiB0aGUgcGFja2FnZSBpcworWEZyZWU4Ni1kZXZlbC4gIFRoZSBzb3VyY2VzIG1heSBiZSBGVFAnZCBmcm9tIGZ0cC5YZnJlZTg2Lm9yZyBvciBpdHMgCittaXJyb3JzLgorLlBQCisuQiBnY2MKKzIuNy54IG9yIGxhdGVyIGlzIHJlcXVpcmVkIHRvIGJ1aWxkCisuQiB3aW5lLgorVmVyc2lvbnMgZWFybGllciB0aGFuIDIuNy4yLjMgbWF5IGhhdmUgcHJvYmxlbXMgd2hlbiBjZXJ0YWluIGZpbGVzIGFyZQorY29tcGlsZWQgd2l0aCBvcHRpbWl6YXRpb24uCiAuU0ggSU5TVEFMTEFUSU9OCiBUbyBpbnN0YWxsIAogLkIgV2luZSwKQEAgLTU5LDcgKzYzLDcgQEAKIC5QUAogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUgCiAuQiBSRUFETUUKLWZpbGUgY29udGFpbmVkIGluIHRoZSBzb3VyY2UgZGlzdHJpYnV0aW9uCitmaWxlIGNvbnRhaW5lZCBpbiB0aGUgc291cmNlIGRpc3RyaWJ1dGlvbi4KIC5TSCBPUFRJT05TCiAuVFAKIC5JIC1iYWNraW5nc3RvcmUKQEAgLTcyLDEzICs3NiwyMCBAQAogVHVybiBkZWJ1Z2dpbmcgbWVzc2FnZXMgb24gb3Igb2ZmLiAgCiAuUlMgKzcKIC5QUAoteHh4IGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzogZXJyLCB3YXJuLCBmaXhtZSwgb3IgdHJhY2UsIGFuZCAjIGNhbiBiZQotZWl0aGVyICsgb3IgLS4gIE5vdGUgdGhhdCB0aGVyZSBpcyBub3QgYSBzcGFjZSBiZXR3ZWVuIG5hbWVzLgoreHh4IGlzIG9wdGlvbmFsIGFuZCBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6IAorLkkgZXJyLCAKKy5JIHdhcm4sIAorLkkgZml4bWUsIAorb3IgCisuSSB0cmFjZS4gCitJZiB4eHggaXMgbm90IHNwZWNpZmllZCwgYWxsIGRlYnVnZ2luZyBtZXNzYWdlcyBmb3IgdGhlIHNwZWNpZmllZAorY2hhbm5lbCBhcmUgdHVybmVkIG9uLiAgIyBpcyByZXF1aXJlZCBhbmQgY2FuIGJlIGVpdGhlciArIG9yIC0uICBOb3RlIHRoYXQgCit0aGVyZSBpcyBub3QgYSBzcGFjZSBhZnRlciB0aGUgY29tbWEgYmV0d2VlbiBuYW1lcy4KIC5QUAogRm9yIGluc3RhbmNlOgogLlBQCiAuSSAtZGVidWdtc2cgd2FybitkbGwsK2hlYXAKLXdpbGwgdHVybiBvbiBETEwgYW5kIGhlYXAgd2FybmluZyBtZXNzYWdlcy4gIAord2lsbCB0dXJuIG9uIERMTCB3YXJuaW5nIG1lc3NhZ2VzIGFuZCBhbGwgaGVhcCBtZXNzYWdlcy4gIAogLmJyCiAuSSAtZGVidWdtc2cgZml4bWUtYWxsLHdhcm4rY3Vyc29yLCtyZWxheQogd2lsbCB0dXJuIG9mZiBhbGwgRklYTUUgbWVzc2FnZXMsIHR1cm4gb24gY3Vyc29yIHdhcm5pbmcgbWVzc2FnZXMsIGFuZCB0dXJuCkBAIC0xNjUsNyArMTc2LDcgQEAKIC5QRCAxCiAuU0ggUFJPR1JBTS9BUkdVTUVOVFMKIFRoZSBwcm9ncmFtIG5hbWUgbWF5IGJlIHNwZWNpZmllZCBpbiBET1MgZm9ybWF0IChDOlxcV0lORE9XU1xcU09MLkVYRSkgb3IgaW4gCi1MaW51eCBmb3JtYXQgKC9tc2Rvcy93aW5kb3dzL3NvbC5leGUpLiAgVGhlIHByb2dyYW0gYmVpbmcgZXhlY3V0ZWQgbWF5IGJlIAorVW5peCBmb3JtYXQgKC9tc2Rvcy93aW5kb3dzL3NvbC5leGUpLiAgVGhlIHByb2dyYW0gYmVpbmcgZXhlY3V0ZWQgbWF5IGJlIAogcGFzc2VkIGFyZ3VtZW50cyBieSBhZGRpbmcgdGhlbSBvbiB0byB0aGUgZW5kIG9mIHRoZSBjb21tYW5kIGxpbmUgaW52b2tpbmcKIC5CIHdpbmUKIChzdWNoIGFzOiB3aW5lICJub3RlcGFkIEM6XFxURU1QXFxSRUFETUUuVFhUIikuICBOb3RlIHRoYXQKQEAgLTE4Myw3ICsxOTQsNyBAQAogLkIgY29uZmlndXJlCiBzY3JpcHQuICBBbHRlcm5hdGl2ZWx5LCB5b3UgbWF5IGhhdmUgYSAKIC5JIC53aW5lcmMKLWZpbGUgb2YgdGhpcyBmb3JtYXQgaW4geW91ciBob21lIGRpcmVjdG9yeSBvciB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUKK2ZpbGUgb2YgdGhpcyBmb3JtYXQgaW4geW91ciBob21lIGRpcmVjdG9yeSBvciBoYXZlIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZQogLkIgV0lORV9JTkkKIHBvaW50aW5nIHRvIGEgY29uZmlndXJhdGlvbiBmaWxlLgogLlNIIENPTkZJR1VSQVRJT04gRklMRSBGT1JNQVQKQEAgLTMyNyw3ICszMzgsNyBAQAogLmJyCiBkZWZhdWx0OiBmYWxzZQogLmJyIAotVXNlIFdpbjk1IGxvb2sgKHRydWUpIG9yIFdpbjMuMSBsb29rIChmYWxzZSkuCitVc2UgV2luOTUtbGlrZSB3aW5kb3cgZGlzcGxheXMgb3IgV2luMy4xLWxpa2Ugd2luZG93IGRpc3BsYXlzLgogLlNIIFNBTVBMRSBDT05GSUdVUkFUSU9OIEZJTEUKIFtEcml2ZSBBXQogLmJyCkBAIC0zODAsMjYgKzM5MSwxNCBAQAogSW5jbHVkZT1XTV9DT01NQU5EOwogLlBQCiBbVHdlYWsuTGF5b3V0XQotLmJyIFdpbjk1TG9vaz1bdHJ1ZXxmYWxzZV0KLS5iciBXaW45NUxvb2s9dHJ1ZSBlbmFibGVzIFdpbjk1LWxpa2Ugd2luZG93cyBsYXlvdXRzOyBXaW45NUxvb2s9ZmFsc2UgCi11c2VzIFdpbjMuMS1saWtlIGRpc3BsYXlzLiBJZiB0aGlzIHNlY3Rpb24gaXMgbm90IGluY2x1ZGVkLCBpdCBkZWZhdWx0cwotdG8gZmFsc2UuCisuYnIgCitXaW45NUxvb2s9dHJ1ZQogLlNIIEFVVEhPUlMKIC5CIFdpbmUKLWlzIGF2YWlsYWJsZSB0aGFua3MgdG8gdGhlIHdvcmsgb2YgQm9iIEFtc3RhZHQsIERhZyBBc2hlaW0sCi1NYXJ0aW4gQXlvdHRlLCBSb3NzIEJpcm8sIEVyaWsgQm9zLCBGb25zIEJvdG1hbiwgSm9obiBCcmV6YWssCi1BbmRyZXcgQnVsaGFrLCBKb2huIEJ1cnRvbiwgUGF1bCBGYWxzdGFkLCBPbGFmIEZsZWJiZSwgUGV0ZXIgR2FsYmF2eSwKLVJhbW9uIEdhcmNpYSwgSGFucyBkZSBHcmFhZiwgQ2hhcmxlcyBNLiBIYW5udW0sIENhbWVyb24gSGVpZGUsCi1Kb2NoZW4gSG9lbmlja2UsIEplZmZyZXkgSHN1LCBNaWd1ZWwgZGUgSWNhemEsIEFsZXhhbmRyZSBKdWxsaWFyZCwKLUpvbiBLb25yYXRoLCBTY290dCBBLiBMYWlyZCwgTWFydGluIHZvbiBMb2V3aXMsIEtlbm5ldGggTWFjRG9uYWxkLAotUGV0ZXIgTWFjRG9uYWxkLCBXaWxsaWFtIE1hZ3JvLCBNYXJjdXMgTWVpc3NuZXIsIEdyYWhhbSBNZW5oZW5uaXR0LAotRGF2aWQgTWV0Y2FsZmUsIE1pY2hhZWwgUGF0cmEsIEpvaG4gUmljaGFyZHNvbiwgSm9oYW5uZXMgUnVzY2hlaW5za2ksCi1UaG9tYXMgU2FuZGZvcmQsIENvbnN0YW50aW5lIFNhcHVudHpha2lzLCBEYW5pZWwgU2NoZXBsZXIsCi1CZXJuZCBTY2htaWR0LCBZbmd2aSBTaWd1cmpvbnNzb24sIFJpY2sgU2xhZGtleSwgV2lsbGlhbSBTbWl0aCwKLUVyaWsgU3ZlbmRzZW4sIEdvcmFuIFRoeW5pLCBKaW1teSBUaXJ0YXdhbmdzYSwgSm9uIFRvbWJzLAotTGludXMgVG9ydmFsZHMsIEdyZWdvcnkgVHJ1YmV0c2tveSwgTWljaGFlbCBWZWtzbGVyLCBNb3J0ZW4gV2VsaW5kZXIsCi1KYW4gV2lsbGFtb3dpdXMsIENhcmwgV2lsbGlhbXMsIEthcmwgR3VlbnRlciBXdWVuc2NoLCBFcmljIFlvdW5nZGFsZSwKLWFuZCBKYW1lcyBZb3VuZ21hbi4KK2lzIGF2YWlsYWJsZSB0aGFua3MgdG8gdGhlIHdvcmsgb2YgbWFueSBkZXZlbG9wZXJzLiBGb3IgYSBsaXN0aW5nCitvZiB0aGUgYXV0aG9ycywgcGxlYXNlIHNlZSB0aGUgZmlsZSAKKy5CIEFVVEhPUlMKK2luIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5IG9mIHRoZSBzb3VyY2UgZGlzdHJpYnV0aW9uLgogLlNIIEJVR1MKIFRoZXJlIGFyZSB0b28gbWFueSB0byBjb3VudCwgbXVjaCBsZXNzIGxpc3QuICBTb21lIGJ1Z3Mgb2Ygbm90ZSwgaG93ZXZlciwKIGFyZSB0aGF0IHByb2dyYW1zIHJlcXVpcmluZyBWQlJVTnh4eC5ETEwgYXJlIHVucmVsaWFibGUgKHdpdGggcmVwb3J0cyBvZgpAQCAtNDE2LDcgKzQxNSw3IEBACiAuU0ggQVZBSUxBQklMSVRZCiBUaGUgbW9zdCByZWNlbnQgcHVibGljIHZlcnNpb24gb2YgCiAuQiB3aW5lCi1jYW4gYmUgZnRwJ2VkIGZyb20gdHN4LTExLm1pdC5lZHUgaW4gdGhlIC9wdWIvbGludXgvQUxQSEEvV2luZS9kZXZlbG9wbWVudCAKK2NhbiBiZSBmdHAnZWQgZnJvbSBzdW5zaXRlLnVuYy5lZHUgb3IgdHN4LTExLm1pdC5lZHUgaW4gdGhlIC9wdWIvbGludXgvQUxQSEEvV2luZS9kZXZlbG9wbWVudCAKIGRpcmVjdG9yeS4gIFRoZSByZWxlYXNlcyBhcmUgaW4gdGhlIGZvcm1hdCAnV2luZS15eW1tZGQudGFyLmd6JywgCiBvciAnV2luZS15eW1tZGQuZGlmZi5neicgZm9yIHRoZSBkaWZmJ3MgZnJvbSB0aGUgcHJldmlvdXMgcmVsZWFzZS4KIC5QUApkaWZmIC0tZ2l0IGEvZmlsZXMvZHJpdmUuYyBiL2ZpbGVzL2RyaXZlLmMKaW5kZXggNzJlZGUzZC4uZGUyNTQ5MSAxMDA2NDQKLS0tIGEvZmlsZXMvZHJpdmUuYworKysgYi9maWxlcy9kcml2ZS5jCkBAIC03NDIsMTUgKzc0MiwyNCBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBHZXREcml2ZVR5cGUxNiAgIChLRVJORUwuMTM2KQorICogVGhpcyBmdW5jdGlvbnMgcmV0dXJucyB0aGUgZHJpdmV0eXBlIG9mIGEgZHJpdmUgaW4gV2luMTYuIAorICogTm90ZSB0aGF0IGl0IHJldHVybnMgRFJJVkVfUkVNT1RFIGZvciBDRC1ST01zLCBzaW5jZSBNU0NERVggdXNlcyB0aGUKKyAqIHJlbW90ZSBkcml2ZSBBUEkuIFRoZSByZXR1cm52YWx1ZSBEUklWRV9SRU1PVEUgZm9yIENELVJPTXMgaGFzIGJlZW4KKyAqIHZlcmlmaWVkIG9uIFdpbjMuMTEgYW5kIFdpbmRvd3MgOTUuIFNvbWUgcHJvZ3JhbXMgcmVseSBvbiBpdCwgc28gZG9uJ3QKKyAqIGRvIGFueSBwc2V1ZG8tY2xldmVyIGNoYW5nZXMuCisgKgorICogUkVUVVJOUworICoJZHJpdmV0eXBlIERSSVZFX3h4eAogICovCi1VSU5UMTYgV0lOQVBJIEdldERyaXZlVHlwZTE2KCBVSU5UMTYgZHJpdmUgKQoteworVUlOVDE2IFdJTkFQSSBHZXREcml2ZVR5cGUxNigKKwlVSU5UMTYgZHJpdmUJLyogW2luXSBudW1iZXIgKE5PVCBsZXR0ZXIpIG9mIGRyaXZlICovCispIHsKICAgICBUUkFDRShkb3NmcywgIiglYzopXG4iLCAnQScgKyBkcml2ZSApOwogICAgIHN3aXRjaChEUklWRV9HZXRUeXBlKGRyaXZlKSkKICAgICB7CiAgICAgY2FzZSBUWVBFX0ZMT1BQWTogIHJldHVybiBEUklWRV9SRU1PVkFCTEU7CiAgICAgY2FzZSBUWVBFX0hEOiAgICAgIHJldHVybiBEUklWRV9GSVhFRDsKLSAgICBjYXNlIFRZUEVfQ0RST006ICAgcmV0dXJuIERSSVZFX1JFTU9WQUJMRTsKKyAgICBjYXNlIFRZUEVfQ0RST006ICAgcmV0dXJuIERSSVZFX1JFTU9URTsKICAgICBjYXNlIFRZUEVfTkVUV09SSzogcmV0dXJuIERSSVZFX1JFTU9URTsKICAgICBjYXNlIFRZUEVfSU5WQUxJRDoKICAgICBkZWZhdWx0OiAgICAgICAgICAgcmV0dXJuIERSSVZFX0NBTk5PVERFVEVSTUlORTsKZGlmZiAtLWdpdCBhL2ZpbGVzL3Byb2ZpbGUuYyBiL2ZpbGVzL3Byb2ZpbGUuYwppbmRleCBmYTQ3OTZlLi40MTEwZTcxIDEwMDY0NAotLS0gYS9maWxlcy9wcm9maWxlLmMKKysrIGIvZmlsZXMvcHJvZmlsZS5jCkBAIC0xNzAsMjEgKzE3MCwyMCBAQAogICAgIGNoYXIgKnAsICpwMjsKICAgICBpbnQgbGluZSA9IDA7CiAgICAgUFJPRklMRVNFQ1RJT04gKnNlY3Rpb24sICpmaXJzdF9zZWN0aW9uOwotICAgIFBST0ZJTEVTRUNUSU9OICoqcHJldl9zZWN0aW9uOwotICAgIFBST0ZJTEVLRVkgKmtleSwgKipwcmV2X2tleTsKKyAgICBQUk9GSUxFU0VDVElPTiAqKm5leHRfc2VjdGlvbjsKKyAgICBQUk9GSUxFS0VZICprZXksICpwcmV2X2tleSwgKipuZXh0X2tleTsKIAogICAgIGZpcnN0X3NlY3Rpb24gPSBIRUFQX3hhbGxvYyggU3lzdGVtSGVhcCwgMCwgc2l6ZW9mKCpzZWN0aW9uKSApOwogICAgIGZpcnN0X3NlY3Rpb24tPm5hbWUgPSBOVUxMOwogICAgIGZpcnN0X3NlY3Rpb24tPmtleSAgPSBOVUxMOwogICAgIGZpcnN0X3NlY3Rpb24tPm5leHQgPSBOVUxMOwotICAgIHByZXZfc2VjdGlvbiA9ICZmaXJzdF9zZWN0aW9uLT5uZXh0OwotICAgIHByZXZfa2V5ICAgICA9ICZmaXJzdF9zZWN0aW9uLT5rZXk7CisgICAgbmV4dF9zZWN0aW9uID0gJmZpcnN0X3NlY3Rpb24tPm5leHQ7CisgICAgbmV4dF9rZXkgICAgID0gJmZpcnN0X3NlY3Rpb24tPmtleTsKKyAgICBwcmV2X2tleSAgICAgPSBOVUxMOwogCiAgICAgd2hpbGUgKGZnZXRzKCBidWZmZXIsIFBST0ZJTEVfTUFYX0xJTkVfTEVOLCBmaWxlICkpCiAgICAgewogICAgICAgICBsaW5lKys7Ci0gICAgICAgIHAgPSBidWZmZXIgKyBzdHJsZW4oYnVmZmVyKSAtIDE7Ci0gICAgICAgIHdoaWxlICgocCA+IGJ1ZmZlcikgJiYgKCgqcCA9PSAnXG4nKSB8fCBQUk9GSUxFX2lzc3BhY2UoKnApKSkgKnAtLT0nXDAnOwogICAgICAgICBwID0gYnVmZmVyOwogICAgICAgICB3aGlsZSAoKnAgJiYgUFJPRklMRV9pc3NwYWNlKCpwKSkgcCsrOwogICAgICAgICBpZiAoKnAgPT0gJ1snKSAgLyogc2VjdGlvbiBzdGFydCAqLwpAQCAtMjAyLDkgKzIwMSwxMCBAQAogICAgICAgICAgICAgICAgIHNlY3Rpb24tPm5hbWUgPSBIRUFQX3N0cmR1cEEoIFN5c3RlbUhlYXAsIDAsIHAgKTsKICAgICAgICAgICAgICAgICBzZWN0aW9uLT5rZXkgID0gTlVMTDsKICAgICAgICAgICAgICAgICBzZWN0aW9uLT5uZXh0ID0gTlVMTDsKLSAgICAgICAgICAgICAgICAqcHJldl9zZWN0aW9uID0gc2VjdGlvbjsKLSAgICAgICAgICAgICAgICBwcmV2X3NlY3Rpb24gID0gJnNlY3Rpb24tPm5leHQ7Ci0gICAgICAgICAgICAgICAgcHJldl9rZXkgICAgICA9ICZzZWN0aW9uLT5rZXk7CisgICAgICAgICAgICAgICAgKm5leHRfc2VjdGlvbiA9IHNlY3Rpb247CisgICAgICAgICAgICAgICAgbmV4dF9zZWN0aW9uICA9ICZzZWN0aW9uLT5uZXh0OworICAgICAgICAgICAgICAgIG5leHRfa2V5ICAgICAgPSAmc2VjdGlvbi0+a2V5OworICAgICAgICAgICAgICAgIHByZXZfa2V5ICAgICAgPSBOVUxMOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0yMTQsMjAgKzIxNCwyMiBAQAogICAgICAgICAgICAgd2hpbGUgKChwMyA+IHApICYmIFBST0ZJTEVfaXNzcGFjZSgqcDMpKSAqcDMtLSA9ICdcMCc7CiAgICAgICAgICAgICAqcDIrKyA9ICdcMCc7CiAgICAgICAgICAgICB3aGlsZSAoKnAyICYmIFBST0ZJTEVfaXNzcGFjZSgqcDIpKSBwMisrOworICAgICAgICAgICAgcDMgPSBwMiArIHN0cmxlbihwMikgLSAxOworICAgICAgICAgICAgd2hpbGUgKChwMyA+IHAyKSAmJiAoKCpwMyA9PSAnXG4nKSB8fCBQUk9GSUxFX2lzc3BhY2UoKnAzKSkpICpwMy0tPSdcMCc7CiAgICAgICAgIH0KLSAgICAgICAga2V5ID0gSEVBUF94YWxsb2MoIFN5c3RlbUhlYXAsIDAsIHNpemVvZigqa2V5KSApOwotICAgICAgICBrZXktPm5hbWUgID0gSEVBUF9zdHJkdXBBKCBTeXN0ZW1IZWFwLCAwLCBwICk7Ci0gICAgICAgIGtleS0+dmFsdWUgPSBwMiA/IEhFQVBfc3RyZHVwQSggU3lzdGVtSGVhcCwgMCwgcDIgKSA6IE5VTEw7Ci0gICAgICAgIGtleS0+bmV4dCAgPSBOVUxMOwotICAgICAgICAqcHJldl9rZXkgID0ga2V5OwotICAgICAgICBwcmV2X2tleSA9ICZrZXktPm5leHQ7Ci0gICAgfQotICAgIGlmIChUUkFDRV9PTihwcm9maWxlKSkKLSAgICB7Ci0gICAgICAgIFRSQUNFKHByb2ZpbGUsICJkdW1wOlxuIiApOwotCS8qIEZJWE1FOiBpbXByb3BlciB1c2Ugb2Ygc3RkZGViISAqLwotICAgICAgICBQUk9GSUxFX1NhdmUoc3RkZGViLCBmaXJzdF9zZWN0aW9uICk7Ci0gICAgICAgIFRSQUNFKHByb2ZpbGUsICJmaW5pc2hlZC5cbiIgKTsKKworICAgICAgICBpZigqcCB8fCAhcHJldl9rZXkgfHwgKnByZXZfa2V5LT5uYW1lKQorICAgICAgICAgIHsKKyAgICAgICAgICAga2V5ID0gSEVBUF94YWxsb2MoIFN5c3RlbUhlYXAsIDAsIHNpemVvZigqa2V5KSApOworICAgICAgICAgICBrZXktPm5hbWUgID0gSEVBUF9zdHJkdXBBKCBTeXN0ZW1IZWFwLCAwLCBwICk7CisgICAgICAgICAgIGtleS0+dmFsdWUgPSBwMiA/IEhFQVBfc3RyZHVwQSggU3lzdGVtSGVhcCwgMCwgcDIgKSA6IE5VTEw7CisgICAgICAgICAgIGtleS0+bmV4dCAgPSBOVUxMOworICAgICAgICAgICAqbmV4dF9rZXkgID0ga2V5OworICAgICAgICAgICBuZXh0X2tleSAgID0gJmtleS0+bmV4dDsKKyAgICAgICAgICAgcHJldl9rZXkgICA9IGtleTsKKworICAgICAgICAgICBUUkFDRShwcm9maWxlLCAiTmV3IGtleTogbmFtZT0nJXMnLCB2YWx1ZT0nJXMnXG4iLGtleS0+bmFtZSxrZXktPnZhbHVlP2tleS0+dmFsdWU6Iihub25lKSIpOworICAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIGZpcnN0X3NlY3Rpb247CiB9CkBAIC00NjcsMTAgKzQ2OSwxMCBAQAogICogICAgICAgICAgIFBST0ZJTEVfR2V0U2VjdGlvbgogICoKICAqIFJldHVybnMgYWxsIGtleXMgb2YgYSBzZWN0aW9uLgotICogSWYgcmV0dXJuX3ZhbHVlcyBpcyBUUlVFLCBhbHNvIGluY2x1ZGUgdGhlIGNvcnJzZXBvbmRpbmcgdmFsdWVzLgorICogSWYgcmV0dXJuX3ZhbHVlcyBpcyBUUlVFLCBhbHNvIGluY2x1ZGUgdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWVzLgogICovCiBzdGF0aWMgSU5UMzIgUFJPRklMRV9HZXRTZWN0aW9uKCBQUk9GSUxFU0VDVElPTiAqc2VjdGlvbiwgTFBDU1RSIHNlY3Rpb25fbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQU1RSIGJ1ZmZlciwgSU5UMzIgbGVuLCBCT09MMzIgaGFuZGxlX2VudiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQU1RSIGJ1ZmZlciwgVUlOVDMyIGxlbiwgQk9PTDMyIGhhbmRsZV9lbnYsCiAJCQkJIEJPT0wzMiByZXR1cm5fdmFsdWVzICkKIHsKICAgICBQUk9GSUxFS0VZICprZXk7CkBAIC00NzgsNyArNDgwLDcgQEAKICAgICB7CiAgICAgICAgIGlmIChzZWN0aW9uLT5uYW1lICYmICFzdHJjYXNlY21wKCBzZWN0aW9uLT5uYW1lLCBzZWN0aW9uX25hbWUgKSkKICAgICAgICAgewotICAgICAgICAgICAgSU5UMzIgb2xkbGVuID0gbGVuOworICAgICAgICAgICAgVUlOVDMyIG9sZGxlbiA9IGxlbjsKICAgICAgICAgICAgIGZvciAoa2V5ID0gc2VjdGlvbi0+a2V5OyBrZXk7IGtleSA9IGtleS0+bmV4dCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBpZiAobGVuIDw9IDIpIGJyZWFrOwpAQCAtNTIwLDcgKzUyMiw3IEBACiAgKiBHZXQgYSBwcm9maWxlIHN0cmluZy4KICAqLwogc3RhdGljIElOVDMyIFBST0ZJTEVfR2V0U3RyaW5nKCBMUENTVFIgc2VjdGlvbiwgTFBDU1RSIGtleV9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUENTVFIgZGVmX3ZhbCwgTFBTVFIgYnVmZmVyLCBJTlQzMiBsZW4gKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUENTVFIgZGVmX3ZhbCwgTFBTVFIgYnVmZmVyLCBVSU5UMzIgbGVuICkKIHsKICAgICBQUk9GSUxFS0VZICprZXkgPSBOVUxMOwogCkBAIC04NDMsNyArODQ1LDcgQEAKICAqICAgICAgICAgICBHZXRQcm9maWxlU3RyaW5nMTYgICAoS0VSTkVMLjU4KQogICovCiBJTlQxNiBXSU5BUEkgR2V0UHJvZmlsZVN0cmluZzE2KCBMUENTVFIgc2VjdGlvbiwgTFBDU1RSIGVudHJ5LCBMUENTVFIgZGVmX3ZhbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQU1RSIGJ1ZmZlciwgSU5UMTYgbGVuICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQU1RSIGJ1ZmZlciwgVUlOVDE2IGxlbiApCiB7CiAgICAgcmV0dXJuIEdldFByaXZhdGVQcm9maWxlU3RyaW5nMTYoIHNlY3Rpb24sIGVudHJ5LCBkZWZfdmFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIsIGxlbiwgIndpbi5pbmkiICk7CkBAIC04NTMsNyArODU1LDcgQEAKICAqICAgICAgICAgICBHZXRQcm9maWxlU3RyaW5nMzJBICAgKEtFUk5FTDMyLjI2OCkKICAqLwogSU5UMzIgV0lOQVBJIEdldFByb2ZpbGVTdHJpbmczMkEoIExQQ1NUUiBzZWN0aW9uLCBMUENTVFIgZW50cnksIExQQ1NUUiBkZWZfdmFsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQU1RSIGJ1ZmZlciwgSU5UMzIgbGVuICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFNUUiBidWZmZXIsIFVJTlQzMiBsZW4gKQogewogICAgIHJldHVybiBHZXRQcml2YXRlUHJvZmlsZVN0cmluZzMyQSggc2VjdGlvbiwgZW50cnksIGRlZl92YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIsIGxlbiwgIndpbi5pbmkiICk7CkBAIC04NjMsNyArODY1LDcgQEAKICAqICAgICAgICAgICBHZXRQcm9maWxlU3RyaW5nMzJXICAgKEtFUk5FTDMyLjI2OSkKICAqLwogSU5UMzIgV0lOQVBJIEdldFByb2ZpbGVTdHJpbmczMlcoIExQQ1dTVFIgc2VjdGlvbiwgTFBDV1NUUiBlbnRyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUENXU1RSIGRlZl92YWwsIExQV1NUUiBidWZmZXIsIElOVDMyIGxlbiApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBDV1NUUiBkZWZfdmFsLCBMUFdTVFIgYnVmZmVyLCBVSU5UMzIgbGVuICkKIHsKICAgICBpZiAoIXdpbmluaVcpIHdpbmluaVcgPSBIRUFQX3N0cmR1cEF0b1coIFN5c3RlbUhlYXAsIDAsICJ3aW4uaW5pIiApOwogICAgIHJldHVybiBHZXRQcml2YXRlUHJvZmlsZVN0cmluZzMyVyggc2VjdGlvbiwgZW50cnksIGRlZl92YWwsCkBAIC04NzMsNyArODc1LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIEdldFByb2ZpbGVTZWN0aW9uMzJBICAgKEtFUk5FTDMyLjI2OCkKICAqLwotSU5UMzIgV0lOQVBJIEdldFByb2ZpbGVTZWN0aW9uMzJBKCBMUENTVFIgc2VjdGlvbiwgTFBTVFIgYnVmZmVyLCBJTlQzMiBsZW4gKQorSU5UMzIgV0lOQVBJIEdldFByb2ZpbGVTZWN0aW9uMzJBKCBMUENTVFIgc2VjdGlvbiwgTFBTVFIgYnVmZmVyLCBVSU5UMzIgbGVuICkKIHsKICAgICByZXR1cm4gR2V0UHJpdmF0ZVByb2ZpbGVTZWN0aW9uMzJBKCBzZWN0aW9uLCBidWZmZXIsIGxlbiwgIndpbi5pbmkiICk7CiB9CkBAIC05NjEsNyArOTYzLDcgQEAKICAqLwogSU5UMTYgV0lOQVBJIEdldFByaXZhdGVQcm9maWxlU3RyaW5nMTYoIExQQ1NUUiBzZWN0aW9uLCBMUENTVFIgZW50cnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBDU1RSIGRlZl92YWwsIExQU1RSIGJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlQxNiBsZW4sIExQQ1NUUiBmaWxlbmFtZSApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUlOVDE2IGxlbiwgTFBDU1RSIGZpbGVuYW1lICkKIHsKICAgICByZXR1cm4gR2V0UHJpdmF0ZVByb2ZpbGVTdHJpbmczMkEoc2VjdGlvbixlbnRyeSxkZWZfdmFsLGJ1ZmZlcixsZW4sZmlsZW5hbWUpOwogfQpAQCAtOTcxLDcgKzk3Myw3IEBACiAgKi8KIElOVDMyIFdJTkFQSSBHZXRQcml2YXRlUHJvZmlsZVN0cmluZzMyQSggTFBDU1RSIHNlY3Rpb24sIExQQ1NUUiBlbnRyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBDU1RSIGRlZl92YWwsIExQU1RSIGJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5UMzIgbGVuLCBMUENTVFIgZmlsZW5hbWUgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVSU5UMzIgbGVuLCBMUENTVFIgZmlsZW5hbWUgKQogewogICAgIGlmICghZmlsZW5hbWUpIAogCWZpbGVuYW1lID0gIndpbi5pbmkiOwpAQCAtOTg2LDcgKzk4OCw3IEBACiAgKi8KIElOVDMyIFdJTkFQSSBHZXRQcml2YXRlUHJvZmlsZVN0cmluZzMyVyggTFBDV1NUUiBzZWN0aW9uLCBMUENXU1RSIGVudHJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUENXU1RSIGRlZl92YWwsIExQV1NUUiBidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVDMyIGxlbiwgTFBDV1NUUiBmaWxlbmFtZSApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVJTlQzMiBsZW4sIExQQ1dTVFIgZmlsZW5hbWUgKQogewogICAgIExQU1RSIHNlY3Rpb25BICA9IEhFQVBfc3RyZHVwV3RvQSggR2V0UHJvY2Vzc0hlYXAoKSwgMCwgc2VjdGlvbiApOwogICAgIExQU1RSIGVudHJ5QSAgICA9IEhFQVBfc3RyZHVwV3RvQSggR2V0UHJvY2Vzc0hlYXAoKSwgMCwgZW50cnkgKTsKQEAgLTEwMDgsNyArMTAxMCw3IEBACiAgKiAgICAgICAgICAgR2V0UHJpdmF0ZVByb2ZpbGVTZWN0aW9uMzJBICAgKEtFUk5FTDMyLjI1NSkKICAqLwogSU5UMzIgV0lOQVBJIEdldFByaXZhdGVQcm9maWxlU2VjdGlvbjMyQSggTFBDU1RSIHNlY3Rpb24sIExQU1RSIGJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVDMyIGxlbiwgTFBDU1RSIGZpbGVuYW1lICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVJTlQzMiBsZW4sIExQQ1NUUiBmaWxlbmFtZSApCiB7CiAgICAgaWYgKFBST0ZJTEVfT3BlbiggZmlsZW5hbWUgKSkKICAgICAgICAgcmV0dXJuIFBST0ZJTEVfR2V0U2VjdGlvbihDdXJQcm9maWxlLnNlY3Rpb24sIHNlY3Rpb24sIGJ1ZmZlciwgbGVuLApAQCAtMTA5MSw3ICsxMDkzLDggQEAKIAlidWY9YnVmZmVyOwogCWN1cnNpemU9MDsKIAlzZWN0aW9uPUN1clByb2ZpbGUuc2VjdGlvbjsKLQlmb3IgKCA7IHNlY3Rpb247IHNlY3Rpb24gPSBzZWN0aW9uLT5uZXh0KSB7CisJZm9yICggOyBzZWN0aW9uOyBzZWN0aW9uID0gc2VjdGlvbi0+bmV4dCkgCisgICAgICAgICAgICBpZiAoc2VjdGlvbi0+bmFtZSkgewogCQlsPXN0cmxlbiAoc2VjdGlvbi0+bmFtZSk7CiAJCWN1cnNpemUrPWwrMTsKICAgICAgICAgCWlmIChjdXJzaXplID4gc2l6ZSsxKQpkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MvZGRyYXcuYyBiL2dyYXBoaWNzL2RkcmF3LmMKaW5kZXggNWM0NmMxMy4uMmM1YWRkNSAxMDA2NDQKLS0tIGEvZ3JhcGhpY3MvZGRyYXcuYworKysgYi9ncmFwaGljcy9kZHJhdy5jCkBAIC0xLDQgKzEsNCBAQAotLyoJCURpcmVjdERyYXcgdXNpbmcgREdBCisvKgkJRGlyZWN0RHJhdyB1c2luZyBER0EsIFhTaG0sIG9yIFhsaWIKICAqCiAgKiBDb3B5cmlnaHQgMTk5NywxOTk4IE1hcmN1cyBNZWlzc25lcgogICovCkBAIC01MSw2ICs1MSwxMSBAQAogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2luY2x1ZGUgPGFzc2VydC5oPgogI2luY2x1ZGUgInRzX3hsaWIuaCIKKyNpZmRlZiBIQVZFX0xJQlhYU0hNCisjaW5jbHVkZSAidHNfeHNobS5oIgorI2luY2x1ZGUgPHN5cy9pcGMuaD4KKyNpbmNsdWRlIDxzeXMvc2htLmg+CisjZW5kaWYKICNpbmNsdWRlIDxzeXMvc2lnbmFsLmg+CiAKICNpbmNsdWRlICJ3aW5kb3dzLmgiCkBAIC02NSw2ICs3MCw3IEBACiAjaW5jbHVkZSAiZGRyYXcuaCIKICNpbmNsdWRlICJkM2QuaCIKICNpbmNsdWRlICJkZWJ1Zy5oIgorI2luY2x1ZGUgImNvbXBvYmouaCIKIAogI2lmZGVmIEhBVkVfTElCWFhGODZER0EKICNpbmNsdWRlIDxYMTEvZXh0ZW5zaW9ucy94Zjg2ZGdhLmg+CkBAIC03NSwyMiArODEsNzMgQEAKICAqLwogI3VuZGVmIFJFU1RPUkVfU0lHTkFMUwogCi1zdGF0aWMgc3RydWN0IElEaXJlY3REcmF3U3VyZmFjZTNfVlRhYmxlCWRkczN2dDsKLXN0YXRpYyBzdHJ1Y3QgSURpcmVjdERyYXdTdXJmYWNlMl9WVGFibGUJZGRzMnZ0Owotc3RhdGljIHN0cnVjdCBJRGlyZWN0RHJhd1N1cmZhY2VfVlRhYmxlCQlkZHN2dDsKLXN0YXRpYyBzdHJ1Y3QgSURpcmVjdERyYXdfVlRhYmxlCQlkZHZ0Owotc3RhdGljIHN0cnVjdCBJRGlyZWN0RHJhdzJfVlRhYmxlCQlkZDJ2dDsKKy8qIFdoZXJlIGRvIHRoZXNlIEdVSURzIGNvbWUgZnJvbT8gIG1rdXVpZC4KKyAqIFRoZXkgZXhpc3Qgc29sZWx5IHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlIHRhcmdldHMgV2luZSBzdXBwb3J0LAorICogYW5kIHNob3VsZCBiZSBkaWZmZXJlbnQgdGhhbiBhbnkgb3RoZXIgR1VJRHMgaW4gZXhpc3RlbmNlLgorICovCitzdGF0aWMgR1VJRCBER0FfRGlyZWN0RHJhd19HVUlEID0geyAvKiBlMmRjYjAyMC1kYzYwLTExZDEtODQwNy05NzE0ZjVkNTA4MDIgKi8KKwkweGUyZGNiMDIwLAorCTB4ZGM2MCwKKwkweDExZDEsCisJezB4ODQsIDB4MDcsIDB4OTcsIDB4MTQsIDB4ZjUsIDB4ZDUsIDB4MDgsIDB4MDJ9Cit9Oworc3RhdGljIEdVSUQgWFNITV9EaXJlY3REcmF3X0dVSUQgPSB7IC8qIDJlNDk0ZmYwLWRjNjEtMTFkMS04NDA3LTg2MGNmM2Y1OWY3YSAqLworICAgIDB4MmU0OTRmZjAsCisgICAgMHhkYzYxLAorICAgIDB4MTFkMSwKKyAgICB7MHg4NCwgMHgwNywgMHg4NiwgMHgwYywgMHhmMywgMHhmNSwgMHg5ZiwgMHg3YX0KK307CitzdGF0aWMgR1VJRCBYTElCX0RpcmVjdERyYXdfR1VJRCA9IHsgLyogMTU3NGE3NDAtZGM2MS0xMWQxLTg0MDctZjc4NzVhN2QxODc5ICovCisgICAgMHgxNTc0YTc0MCwKKyAgICAweGRjNjEsCisgICAgMHgxMWQxLAorICAgIHsweDg0LCAweDA3LCAweGY3LCAweDg3LCAweDVhLCAweDdkLCAweDE4LCAweDc5fQorfTsKKworc3RhdGljIHN0cnVjdCBJRGlyZWN0RHJhd1N1cmZhY2UzX1ZUYWJsZQlkZ2FfZGRzM3Z0LCB4c2htX2RkczN2dCwgeGxpYl9kZHMzdnQ7CitzdGF0aWMgc3RydWN0IElEaXJlY3REcmF3U3VyZmFjZTJfVlRhYmxlCWRnYV9kZHMydnQsIHhzaG1fZGRzMnZ0LCB4bGliX2RkczJ2dDsKK3N0YXRpYyBzdHJ1Y3QgSURpcmVjdERyYXdTdXJmYWNlX1ZUYWJsZQkJZGdhX2Rkc3Z0LCB4c2htX2Rkc3Z0LCB4bGliX2Rkc3Z0Oworc3RhdGljIHN0cnVjdCBJRGlyZWN0RHJhd19WVGFibGUJCWRnYV9kZHZ0LCB4c2htX2RkdnQsIHhsaWJfZGR2dDsKK3N0YXRpYyBzdHJ1Y3QgSURpcmVjdERyYXcyX1ZUYWJsZQkJZGdhX2RkMnZ0LCB4c2htX2RkMnZ0LCB4bGliX2RkMnZ0Oworc3RhdGljIHN0cnVjdCBJRGlyZWN0RHJhd0NsaXBwZXJfVlRhYmxlCWRkY2xpcHZ0Oworc3RhdGljIHN0cnVjdCBJRGlyZWN0RHJhd1BhbGV0dGVfVlRhYmxlIGRnYV9kZHBhbHZ0LCB4c2htX2RkcGFsdnQsIHhsaWJfZGRwYWx2dDsKIHN0YXRpYyBzdHJ1Y3QgSURpcmVjdDNEX1ZUYWJsZQkJCWQzZHZ0Owogc3RhdGljIHN0cnVjdCBJRGlyZWN0M0QyX1ZUYWJsZQkJCWQzZDJ2dDsKIAorQk9PTDMyCitERFJBV19ER0FfQXZhaWxhYmxlKCkKK3sKKyNpZmRlZiBIQVZFX0xJQlhYRjg2REdBCisJaW50IGV2YmFzZSwgZXZyZXQ7CisJcmV0dXJuIChnZXR1aWQoKSA9PSAwKSAmJiBYRjg2REdBUXVlcnlFeHRlbnNpb24oZGlzcGxheSwmZXZiYXNlLCZldnJldCk7CisjZWxzZSAvKiBkZWZpbmVkKEhBVkVfTElCWFhGODZER0EpICovCisJcmV0dXJuIDA7CisjZW5kaWYgLyogZGVmaW5lZChIQVZFX0xJQlhYRjg2REdBKSAqLworfQorCitCT09MMzIKK0REUkFXX1hTaG1fQXZhaWxhYmxlKCkKK3sKKyNpZmRlZiBIQVZFX0xJQlhYU0hNCisJcmV0dXJuIFRTWFNobVF1ZXJ5RXh0ZW5zaW9uKGRpc3BsYXkpOworI2Vsc2UgLyogZGVmaW5lZChIQVZFX0xJQlhYU0hNKSAqLworCXJldHVybiAwOworI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9MSUJYWFNITSkgKi8KK30KIAogSFJFU1VMVCBXSU5BUEkKIERpcmVjdERyYXdFbnVtZXJhdGUzMkEoTFBEREVOVU1DQUxMQkFDSzMyQSBkZGVudW1wcm9jLExQVk9JRCBkYXRhKSB7Ci0JLyogd2UgaGF2ZSBqdXN0IG9uZSBkaXNwbGF5IGRyaXZlciByaWdodCBub3cgLi4uICovCi0JZGRlbnVtcHJvYygwLCJXSU5FIERpc3BsYXkiLCJkaXNwbGF5IixkYXRhKTsKKwlpZiAoRERSQVdfREdBX0F2YWlsYWJsZSgpKSB7CisJCWRkZW51bXByb2MoJkRHQV9EaXJlY3REcmF3X0dVSUQsIldJTkUgd2l0aCBYRnJlZTg2IERHQSIsIndpbmUtZGdhIixkYXRhKTsKKwl9CisJaWYgKEREUkFXX1hTaG1fQXZhaWxhYmxlKCkpIHsKKwkJZGRlbnVtcHJvYygmWFNITV9EaXJlY3REcmF3X0dVSUQsIldJTkUgd2l0aCBNSVQgWFNobSIsIndpbmUteHNobSIsZGF0YSk7CisJfQorCWRkZW51bXByb2MoJlhMSUJfRGlyZWN0RHJhd19HVUlELCJXSU5FIHdpdGggWGxpYiIsIndpbmUteGxpYiIsZGF0YSk7CiAJcmV0dXJuIDA7CiB9CiAKKy8qIFdoYXQgaXMgdGhpcyBkb2luZyBoZXJlPyAqLwogSFJFU1VMVCBXSU5BUEkgCiBEU291bmRIZWxwKERXT1JEIHgsRFdPUkQgeSxEV09SRCB6KSB7CiAJRklYTUUoZGRyYXcsIigweCUwOGx4LDB4JTA4bHgsMHglMDhseCksc3R1YiFcbiIseCx5LHopOwpAQCAtOTgsOCArMTU1LDYgQEAKIH0KIAogCi0jaWZkZWYgSEFWRV9MSUJYWEY4NkRHQQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgkJaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9ucwogICovCkBAIC0yMzAsNyArMjg1LDcgQEAKIAlEVU1QKCJcbiIpOwogfQogCi12b2lkIF9kdW1wX0REQ0FQUyhEV09SRCBmbGFnbWFzaykgeworc3RhdGljIHZvaWQgX2R1bXBfRERDQVBTKERXT1JEIGZsYWdtYXNrKSB7CiAJaW50CWk7CiAJY29uc3Qgc3RydWN0IHsKIAkJRFdPUkQJbWFzazsKQEAgLTM1MywxMSArNDA4LDEyIEBACiAJCVRSQUNFKGRkcmF3LCIJbHByZWN0OiAlZHglZC0lZHglZFxuIiwKIAkJCWxwcmVjdC0+dG9wLGxwcmVjdC0+bGVmdCxscHJlY3QtPmJvdHRvbSxscHJlY3QtPnJpZ2h0CiAJCSk7Ci0JCWxwZGRzZC0+eS5scFN1cmZhY2UgPQl0aGlzLT5zLnN1cmZhY2UrCi0JCQkJCShscHJlY3QtPnRvcCp0aGlzLT5zLmxwaXRjaCkrCi0JCQkJCShscHJlY3QtPmxlZnQqKHRoaXMtPnMuZGRyYXctPmQuZGVwdGgvOCkpOwotCX0gZWxzZQorCQlscGRkc2QtPnkubHBTdXJmYWNlID0gdGhpcy0+cy5zdXJmYWNlICsKKwkJCShscHJlY3QtPnRvcCp0aGlzLT5zLmxwaXRjaCkgKworCQkJKGxwcmVjdC0+bGVmdCoodGhpcy0+cy5kZHJhdy0+ZC5kZXB0aC84KSk7CisJfSBlbHNlIHsKIAkJbHBkZHNkLT55LmxwU3VyZmFjZSA9IHRoaXMtPnMuc3VyZmFjZTsKKwl9CiAJbHBkZHNkLT5kd0ZsYWdzID0gRERTRF9XSURUSHxERFNEX0hFSUdIVHxERFNEX1BJWEVMRk9STUFUfEREU0RfUElUQ0h8RERTRF9MUFNVUkZBQ0U7CiAJbHBkZHNkLT5kd1dpZHRoCQk9IHRoaXMtPnMud2lkdGg7CiAJbHBkZHNkLT5kd0hlaWdodAk9IHRoaXMtPnMuaGVpZ2h0OwpAQCAtMzY2LDE0ICs0MjIsMTM1IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBIUkVTVUxUIFdJTkFQSSBJRGlyZWN0RHJhd1N1cmZhY2VfVW5sb2NrKAorc3RhdGljIEhSRVNVTFQgV0lOQVBJIERHQV9JRGlyZWN0RHJhd1N1cmZhY2VfVW5sb2NrKAogCUxQRElSRUNURFJBV1NVUkZBQ0UgdGhpcyxMUFZPSUQgc3VyZmFjZQogKSB7CiAJVFJBQ0UoZGRyYXcsIiglcCktPlVubG9jayglcClcbiIsdGhpcyxzdXJmYWNlKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIEhSRVNVTFQgV0lOQVBJIElEaXJlY3REcmF3U3VyZmFjZV9GbGlwKAorc3RhdGljIEhSRVNVTFQgV0lOQVBJIFhTaG1fSURpcmVjdERyYXdTdXJmYWNlX1VubG9jaygKKwlMUERJUkVDVERSQVdTVVJGQUNFIHRoaXMsTFBWT0lEIHN1cmZhY2UKKykgeworI2lmZGVmIEhBVkVfTElCWFhTSE0KKwlUUkFDRShkZHJhdywiKCVwKS0+VW5sb2NrKCVwKVxuIix0aGlzLHN1cmZhY2UpOworCWlmICghdGhpcy0+dC54c2htLnN1cmZhY2VfaXNfaW1hZ2VfZGF0YSkgeworCQlGSVhNRShkZHJhdywiKCVwKS0+VW5sb2NrKCVwKSBuZWVkcyBhbiBpbWFnZSBjb3B5IVxuIix0aGlzLHN1cmZhY2UpOworCX0KKwkvKiBGSVhNRTogaXMgaXQgcmVhbGx5IHJpZ2h0IHRvIGRpc3BsYXkgdGhlIGltYWdlIG9uIHVubG9jaz8KKwkgKiBvciBzaG91bGQgaXQgd2FpdCBmb3IgYSBGbGlwKCk/ICovCisJVFNYU2htUHV0SW1hZ2UoZGlzcGxheSwKKwkJCQkgICB0aGlzLT5zLmRkcmF3LT5lLnhzaG0uZHJhd2FibGUsCisJCQkJICAgRGVmYXVsdEdDT2ZTY3JlZW4oc2NyZWVuKSwKKwkJCQkgICB0aGlzLT50LnhzaG0uaW1hZ2UsCisJCQkJICAgMCwgMCwgMCwgMCwKKwkJCQkgICB0aGlzLT50LnhzaG0uaW1hZ2UtPndpZHRoLAorCQkJCSAgIHRoaXMtPnQueHNobS5pbWFnZS0+aGVpZ2h0LAorCQkJCSAgIEZhbHNlKTsKKwlpZiAodGhpcy0+cy5wYWxldHRlICYmIHRoaXMtPnMucGFsZXR0ZS0+Y20pIHsKKwkJVFNYSW5zdGFsbENvbG9ybWFwKGRpc3BsYXksdGhpcy0+cy5wYWxldHRlLT5jbSk7CisJfQorCVRTWFN5bmMoZGlzcGxheSxGYWxzZSk7CisJcmV0dXJuIDA7CisjZWxzZSAvKiBkZWZpbmVkKEhBVkVfTElCWFhTSE0pICovCisJcmV0dXJuIEVfVU5FWFBFQ1RFRDsKKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfTElCWFhTSE0pICovCit9CisKK3N0YXRpYyBIUkVTVUxUIFdJTkFQSSBYbGliX0lEaXJlY3REcmF3U3VyZmFjZV9VbmxvY2soCisJTFBESVJFQ1REUkFXU1VSRkFDRSB0aGlzLExQVk9JRCBzdXJmYWNlCispIHsKKwlUUkFDRShkZHJhdywiKCVwKS0+VW5sb2NrKCVwKVxuIix0aGlzLHN1cmZhY2UpOworCWlmICghdGhpcy0+dC54c2htLnN1cmZhY2VfaXNfaW1hZ2VfZGF0YSkgeworCQlGSVhNRShkZHJhdywiKCVwKS0+VW5sb2NrKCVwKSBuZWVkcyBhbiBpbWFnZSBjb3B5IVxuIix0aGlzLHN1cmZhY2UpOworCX0KKwkvKiBGSVhNRTogaXMgaXQgcmVhbGx5IHJpZ2h0IHRvIGRpc3BsYXkgdGhlIGltYWdlIG9uIHVubG9jaz8KKwkgKiBvciBzaG91bGQgaXQgd2FpdCBmb3IgYSBGbGlwKCk/ICovCisJVFNYUHV0SW1hZ2UoZGlzcGxheSwKKwkJCQl0aGlzLT5zLmRkcmF3LT5lLnhsaWIuZHJhd2FibGUsCisJCQkJRGVmYXVsdEdDT2ZTY3JlZW4oc2NyZWVuKSwKKwkJCQl0aGlzLT50LnhsaWIuaW1hZ2UsCisJCQkJMCwgMCwgMCwgMCwKKwkJCQl0aGlzLT50LnhsaWIuaW1hZ2UtPndpZHRoLAorCQkJCXRoaXMtPnQueGxpYi5pbWFnZS0+d2lkdGgpOworCWlmICh0aGlzLT5zLnBhbGV0dGUgJiYgdGhpcy0+cy5wYWxldHRlLT5jbSkgeworCQlUU1hJbnN0YWxsQ29sb3JtYXAoZGlzcGxheSx0aGlzLT5zLnBhbGV0dGUtPmNtKTsKKwl9CisJVFNYU3luYyhkaXNwbGF5LEZhbHNlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIEhSRVNVTFQgV0lOQVBJIERHQV9JRGlyZWN0RHJhd1N1cmZhY2VfRmxpcCgKKwlMUERJUkVDVERSQVdTVVJGQUNFIHRoaXMsTFBESVJFQ1REUkFXU1VSRkFDRSBmbGlwdG8sRFdPUkQgZHdGbGFncworKSB7CisjaWZkZWYgSEFWRV9MSUJYWEY4NkRHQQorCVRSQUNFKGRkcmF3LCIoJXApLT5GbGlwKCVwLCUwOGx4KVxuIix0aGlzLGZsaXB0byxkd0ZsYWdzKTsKKwlpZiAoIWZsaXB0bykgeworCQlpZiAodGhpcy0+cy5iYWNrYnVmZmVyKQorCQkJZmxpcHRvID0gdGhpcy0+cy5iYWNrYnVmZmVyOworCQllbHNlCisJCQlmbGlwdG8gPSB0aGlzOworCX0KKwlYRjg2REdBU2V0Vmlld1BvcnQoZGlzcGxheSxEZWZhdWx0U2NyZWVuKGRpc3BsYXkpLDAsZmxpcHRvLT50LmRnYS5mYl9oZWlnaHQpOworCWlmIChmbGlwdG8tPnMucGFsZXR0ZSAmJiBmbGlwdG8tPnMucGFsZXR0ZS0+Y20pIHsKKwkJWEY4NkRHQUluc3RhbGxDb2xvcm1hcChkaXNwbGF5LERlZmF1bHRTY3JlZW4oZGlzcGxheSksZmxpcHRvLT5zLnBhbGV0dGUtPmNtKTsKKwl9CisJd2hpbGUgKCFYRjg2REdBVmlld1BvcnRDaGFuZ2VkKGRpc3BsYXksRGVmYXVsdFNjcmVlbihkaXNwbGF5KSwyKSkgeworCX0KKwlpZiAoZmxpcHRvIT10aGlzKSB7CisJCWludAl0bXA7CisJCUxQVk9JRAlwdG1wOworCisJCXRtcCA9IHRoaXMtPnQuZGdhLmZiX2hlaWdodDsKKwkJdGhpcy0+dC5kZ2EuZmJfaGVpZ2h0ID0gZmxpcHRvLT50LmRnYS5mYl9oZWlnaHQ7CisJCWZsaXB0by0+dC5kZ2EuZmJfaGVpZ2h0ID0gdG1wOworCisJCXB0bXAgPSB0aGlzLT5zLnN1cmZhY2U7CisJCXRoaXMtPnMuc3VyZmFjZSA9IGZsaXB0by0+cy5zdXJmYWNlOworCQlmbGlwdG8tPnMuc3VyZmFjZSA9IHB0bXA7CisJfQorCXJldHVybiAwOworI2Vsc2UgLyogZGVmaW5lZChIQVZFX0xJQlhYRjg2REdBKSAqLworCXJldHVybiBFX1VORVhQRUNURUQ7CisjZW5kaWYgLyogZGVmaW5lZChIQVZFX0xJQlhYRjg2REdBKSAqLworfQorCitzdGF0aWMgSFJFU1VMVCBXSU5BUEkgWFNobV9JRGlyZWN0RHJhd1N1cmZhY2VfRmxpcCgKKwlMUERJUkVDVERSQVdTVVJGQUNFIHRoaXMsTFBESVJFQ1REUkFXU1VSRkFDRSBmbGlwdG8sRFdPUkQgZHdGbGFncworKSB7CisjaWZkZWYgSEFWRV9MSUJYWFNITQorCVRSQUNFKGRkcmF3LCIoJXApLT5GbGlwKCVwLCUwOGx4KVxuIix0aGlzLGZsaXB0byxkd0ZsYWdzKTsKKwlpZiAoIWZsaXB0bykgeworCQlpZiAodGhpcy0+cy5iYWNrYnVmZmVyKQorCQkJZmxpcHRvID0gdGhpcy0+cy5iYWNrYnVmZmVyOworCQllbHNlCisJCQlmbGlwdG8gPSB0aGlzOworCX0KKwlUU1hTaG1QdXRJbWFnZShkaXNwbGF5LAorCQkJCSAgIHRoaXMtPnMuZGRyYXctPmUueHNobS5kcmF3YWJsZSwKKwkJCQkgICBEZWZhdWx0R0NPZlNjcmVlbihzY3JlZW4pLAorCQkJCSAgIGZsaXB0by0+dC54c2htLmltYWdlLAorCQkJCSAgIDAsIDAsIDAsIDAsCisJCQkJICAgZmxpcHRvLT50LnhzaG0uaW1hZ2UtPndpZHRoLAorCQkJCSAgIGZsaXB0by0+dC54c2htLmltYWdlLT5oZWlnaHQsCisJCQkJICAgRmFsc2UpOworCWlmIChmbGlwdG8tPnMucGFsZXR0ZSAmJiBmbGlwdG8tPnMucGFsZXR0ZS0+Y20pIHsKKwkJVFNYSW5zdGFsbENvbG9ybWFwKGRpc3BsYXksZmxpcHRvLT5zLnBhbGV0dGUtPmNtKTsKKwl9CisJVFNYU3luYyhkaXNwbGF5LEZhbHNlKTsKKwlpZiAoZmxpcHRvIT10aGlzKSB7CisJCVhJbWFnZSAqdG1wOworCQl0bXAgPSB0aGlzLT50LnhzaG0uaW1hZ2U7CisJCXRoaXMtPnQueHNobS5pbWFnZSA9IGZsaXB0by0+dC54c2htLmltYWdlOworCQlmbGlwdG8tPnQueHNobS5pbWFnZSA9IHRtcDsKKwl9CisJcmV0dXJuIDA7CisjZWxzZSAvKiBkZWZpbmVkKEhBVkVfTElCWFhTSE0pICovCisJcmV0dXJuIEVfVU5FWFBFQ1RFRDsKKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfTElCWFhTSE0pICovCit9CisKK3N0YXRpYyBIUkVTVUxUIFdJTkFQSSBYbGliX0lEaXJlY3REcmF3U3VyZmFjZV9GbGlwKAogCUxQRElSRUNURFJBV1NVUkZBQ0UgdGhpcyxMUERJUkVDVERSQVdTVVJGQUNFIGZsaXB0byxEV09SRCBkd0ZsYWdzCiApIHsKIAlUUkFDRShkZHJhdywiKCVwKS0+RmxpcCglcCwlMDhseClcbiIsdGhpcyxmbGlwdG8sZHdGbGFncyk7CkBAIC0zODMsMjIgKzU2MCwyMiBAQAogCQllbHNlCiAJCQlmbGlwdG8gPSB0aGlzOwogCX0KLQlYRjg2REdBU2V0Vmlld1BvcnQoZGlzcGxheSxEZWZhdWx0U2NyZWVuKGRpc3BsYXkpLDAsZmxpcHRvLT5zLmZiX2hlaWdodCk7Ci0JaWYgKGZsaXB0by0+cy5wYWxldHRlICYmIGZsaXB0by0+cy5wYWxldHRlLT5jbSkKLQkJWEY4NkRHQUluc3RhbGxDb2xvcm1hcChkaXNwbGF5LERlZmF1bHRTY3JlZW4oZGlzcGxheSksZmxpcHRvLT5zLnBhbGV0dGUtPmNtKTsKLQl3aGlsZSAoIVhGODZER0FWaWV3UG9ydENoYW5nZWQoZGlzcGxheSxEZWZhdWx0U2NyZWVuKGRpc3BsYXkpLDIpKSB7CisJVFNYUHV0SW1hZ2UoZGlzcGxheSwKKwkJCQl0aGlzLT5zLmRkcmF3LT5lLnhsaWIuZHJhd2FibGUsCisJCQkJRGVmYXVsdEdDT2ZTY3JlZW4oc2NyZWVuKSwKKwkJCQlmbGlwdG8tPnQueGxpYi5pbWFnZSwKKwkJCQkwLCAwLCAwLCAwLAorCQkJCWZsaXB0by0+dC54bGliLmltYWdlLT53aWR0aCwKKwkJCQlmbGlwdG8tPnQueGxpYi5pbWFnZS0+d2lkdGgpOworCWlmIChmbGlwdG8tPnMucGFsZXR0ZSAmJiBmbGlwdG8tPnMucGFsZXR0ZS0+Y20pIHsKKwkJVFNYSW5zdGFsbENvbG9ybWFwKGRpc3BsYXksZmxpcHRvLT5zLnBhbGV0dGUtPmNtKTsKIAl9CisJVFNYU3luYyhkaXNwbGF5LEZhbHNlKTsKIAlpZiAoZmxpcHRvIT10aGlzKSB7Ci0JCWludAl0bXA7Ci0JCUxQVk9JRAlwdG1wOwotCi0JCXRtcCA9IHRoaXMtPnMuZmJfaGVpZ2h0OwotCQl0aGlzLT5zLmZiX2hlaWdodCA9IGZsaXB0by0+cy5mYl9oZWlnaHQ7Ci0JCWZsaXB0by0+cy5mYl9oZWlnaHQgPSB0bXA7Ci0KLQkJcHRtcCA9IHRoaXMtPnMuc3VyZmFjZTsKLQkJdGhpcy0+cy5zdXJmYWNlID0gZmxpcHRvLT5zLnN1cmZhY2U7Ci0JCWZsaXB0by0+cy5zdXJmYWNlID0gcHRtcDsKKwkJWEltYWdlICp0bXA7CisJCXRtcCA9IHRoaXMtPnQueHNobS5pbWFnZTsKKwkJdGhpcy0+dC54c2htLmltYWdlID0gZmxpcHRvLT50LnhzaG0uaW1hZ2U7CisJCWZsaXB0by0+dC54c2htLmltYWdlID0gdG1wOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTQxNywxNyArNTk0LDE4IEBACiAJUkVDVDMyCXhkc3QseHNyYzsKIAlpbnQJaSxqOwogCi0JaWYgKHJkc3QpCisJaWYgKHJkc3QpIHsKIAkJbWVtY3B5KCZ4ZHN0LHJkc3Qsc2l6ZW9mKHhkc3QpKTsKLQllbHNlIHsKKwl9IGVsc2UgewogCQl4ZHN0LnRvcAk9IDA7CiAJCXhkc3QuYm90dG9tCT0gdGhpcy0+cy5oZWlnaHQ7CiAJCXhkc3QubGVmdAk9IDA7CiAJCXhkc3QucmlnaHQJPSB0aGlzLT5zLndpZHRoOwogCX0KLQlpZiAocnNyYykKKworCWlmIChyc3JjKSB7CiAJCW1lbWNweSgmeHNyYyxyc3JjLHNpemVvZih4c3JjKSk7Ci0JZWxzZSBpZiAoc3JjKSB7CisJfSBlbHNlIGlmIChzcmMpIHsKIAkJeHNyYy50b3AJPSAwOwogCQl4c3JjLmJvdHRvbQk9IHNyYy0+cy5oZWlnaHQ7CiAJCXhzcmMubGVmdAk9IDA7CkBAIC01NDUsMTkgKzcyMyw1NCBAQAogCXJldHVybiArKyh0aGlzLT5yZWYpOwogfQogCi1zdGF0aWMgVUxPTkcgV0lOQVBJIElEaXJlY3REcmF3U3VyZmFjZV9SZWxlYXNlKExQRElSRUNURFJBV1NVUkZBQ0UgdGhpcykgeworc3RhdGljIFVMT05HIFdJTkFQSSBER0FfSURpcmVjdERyYXdTdXJmYWNlX1JlbGVhc2UoTFBESVJFQ1REUkFXU1VSRkFDRSB0aGlzKSB7CiAJVFJBQ0UoZGRyYXcsIiglcCktPlJlbGVhc2UoKVxuIix0aGlzKTsKKyNpZmRlZiBIQVZFX0xJQlhYRjg2REdBCiAJaWYgKCEtLSh0aGlzLT5yZWYpKSB7CiAJCXRoaXMtPnMuZGRyYXctPmxwdnRibC0+Zm5SZWxlYXNlKHRoaXMtPnMuZGRyYXcpOwogCQkvKiBjbGVhciBvdXQgb2Ygc3VyZmFjZSBsaXN0ICovCi0JCWlmICh0aGlzLT5zLmZiX2hlaWdodCA9PSAtMSkgeworCQlpZiAodGhpcy0+dC5kZ2EuZmJfaGVpZ2h0ID09IC0xKSB7CiAJCQlIZWFwRnJlZShHZXRQcm9jZXNzSGVhcCgpLDAsdGhpcy0+cy5zdXJmYWNlKTsKIAkJfSBlbHNlIHsKLQkJCXRoaXMtPnMuZGRyYXctPmQudnBtYXNrICY9IH4oMTw8KHRoaXMtPnMuZmJfaGVpZ2h0L3RoaXMtPnMuZGRyYXctPmQuZmJfaGVpZ2h0KSk7CisJCQl0aGlzLT5zLmRkcmF3LT5lLmRnYS52cG1hc2sgJj0gfigxPDwodGhpcy0+dC5kZ2EuZmJfaGVpZ2h0L3RoaXMtPnMuZGRyYXctPmUuZGdhLmZiX2hlaWdodCkpOwogCQl9CiAJCUhlYXBGcmVlKEdldFByb2Nlc3NIZWFwKCksMCx0aGlzKTsKIAkJcmV0dXJuIDA7CiAJfQorI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9MSUJYWEY4NkRHQSkgKi8KKwlyZXR1cm4gdGhpcy0+cmVmOworfQorCitzdGF0aWMgVUxPTkcgV0lOQVBJIFhTaG1fSURpcmVjdERyYXdTdXJmYWNlX1JlbGVhc2UoTFBESVJFQ1REUkFXU1VSRkFDRSB0aGlzKSB7CisJVFJBQ0UoZGRyYXcsIiglcCktPlJlbGVhc2UoKVxuIix0aGlzKTsKKyNpZmRlZiBIQVZFX0xJQlhYU0hNCisJaWYgKCEtLSh0aGlzLT5yZWYpKSB7CisJCXRoaXMtPnMuZGRyYXctPmxwdnRibC0+Zm5SZWxlYXNlKHRoaXMtPnMuZGRyYXcpOworCQlpZiAoIXRoaXMtPnQueHNobS5zdXJmYWNlX2lzX2ltYWdlX2RhdGEpIHsKKwkJCUhlYXBGcmVlKEdldFByb2Nlc3NIZWFwKCksMCx0aGlzLT5zLnN1cmZhY2UpOworCQl9CisJCVhTaG1EZXRhY2goZGlzcGxheSwmdGhpcy0+dC54c2htLnNobWluZm8pOworCQlYRGVzdHJveUltYWdlKHRoaXMtPnQueHNobS5pbWFnZSk7CisJCXNobWR0KHRoaXMtPnQueHNobS5zaG1pbmZvLnNobWFkZHIpOworCQlzaG1jdGwodGhpcy0+dC54c2htLnNobWluZm8uc2htaWQsIElQQ19STUlELCAwKTsKKwkJSGVhcEZyZWUoR2V0UHJvY2Vzc0hlYXAoKSwwLHRoaXMpOworCQlyZXR1cm4gMDsKKwl9CisjZW5kaWYgLyogZGVmaW5lZChIQVZFX0xJQlhYU0hNKSAqLworCXJldHVybiB0aGlzLT5yZWY7Cit9CisKK3N0YXRpYyBVTE9ORyBXSU5BUEkgWGxpYl9JRGlyZWN0RHJhd1N1cmZhY2VfUmVsZWFzZShMUERJUkVDVERSQVdTVVJGQUNFIHRoaXMpIHsKKwlUUkFDRShkZHJhdywiKCVwKS0+UmVsZWFzZSgpXG4iLHRoaXMpOworCWlmICghLS0odGhpcy0+cmVmKSkgeworCQl0aGlzLT5zLmRkcmF3LT5scHZ0YmwtPmZuUmVsZWFzZSh0aGlzLT5zLmRkcmF3KTsKKwkJaWYgKCF0aGlzLT50LnhzaG0uc3VyZmFjZV9pc19pbWFnZV9kYXRhKSB7CisJCQlIZWFwRnJlZShHZXRQcm9jZXNzSGVhcCgpLDAsdGhpcy0+cy5zdXJmYWNlKTsKKwkJfQorCQlYRGVzdHJveUltYWdlKHRoaXMtPnQueHNobS5pbWFnZSk7CisJCUhlYXBGcmVlKEdldFByb2Nlc3NIZWFwKCksMCx0aGlzKTsKKwkJcmV0dXJuIDA7CisJfQogCXJldHVybiB0aGlzLT5yZWY7CiB9CiAKQEAgLTYyNyw3ICs4NDAsMzYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIEhSRVNVTFQgV0lOQVBJIElEaXJlY3REcmF3U3VyZmFjZV9RdWVyeUludGVyZmFjZShMUERJUkVDVERSQVdTVVJGQUNFIHRoaXMsUkVGSUlEIHJlZmlpZCxMUFZPSUQgKm9iaikgeworc3RhdGljIEhSRVNVTFQgV0lOQVBJIERHQV9JRGlyZWN0RHJhd1N1cmZhY2VfUXVlcnlJbnRlcmZhY2UoTFBESVJFQ1REUkFXU1VSRkFDRSB0aGlzLFJFRklJRCByZWZpaWQsTFBWT0lEICpvYmopIHsKKyAgICAgICAgY2hhciAgICB4cmVmaWlkWzUwXTsKKworICAgICAgICBXSU5FX1N0cmluZ0Zyb21DTFNJRCgoTFBDTFNJRClyZWZpaWQseHJlZmlpZCk7CisgICAgICAgIFRSQUNFKGRkcmF3LCIoJXApLT4oJXMsJXApXG4iLHRoaXMseHJlZmlpZCxvYmopOworCQorCS8qIHRoYXRzIHZlcnNpb24gMyAoRGlyZWN0WCA1KSAqLworCWlmICghbWVtY21wKCZJSURfSURpcmVjdERyYXdTdXJmYWNlMyxyZWZpaWQsc2l6ZW9mKElJRF9JRGlyZWN0RHJhd1N1cmZhY2UzKSkpIHsKKwkJdGhpcy0+bHB2dGJsID0gKExQRElSRUNURFJBV1NVUkZBQ0VfVlRBQkxFKSZkZ2FfZGRzM3Z0OworCQl0aGlzLT5scHZ0YmwtPmZuQWRkUmVmKHRoaXMpOworCQkqb2JqID0gdGhpczsKKwkJcmV0dXJuIDA7CisJfQorCS8qIHRoYXRzIHZlcnNpb24gMiAoRGlyZWN0WCAzKSAqLworCWlmICghbWVtY21wKCZJSURfSURpcmVjdERyYXdTdXJmYWNlMixyZWZpaWQsc2l6ZW9mKElJRF9JRGlyZWN0RHJhd1N1cmZhY2UyKSkpIHsKKwkJdGhpcy0+bHB2dGJsID0gKExQRElSRUNURFJBV1NVUkZBQ0VfVlRBQkxFKSZkZ2FfZGRzMnZ0OworCQkqb2JqID0gdGhpczsKKwkJcmV0dXJuIDA7CisJfQorCS8qIHRoYXRzIHVzICovCisJaWYgKCFtZW1jbXAoJklJRF9JRGlyZWN0RHJhd1N1cmZhY2UscmVmaWlkLHNpemVvZihJSURfSURpcmVjdERyYXdTdXJmYWNlKSkpIHsKKwkJdGhpcy0+bHB2dGJsLT5mbkFkZFJlZih0aGlzKTsKKwkJKm9iaiA9IHRoaXM7CisJCXJldHVybiAwOworCX0KKwlXQVJOKGRkcmF3LCIoJXApOmludGVyZmFjZSBmb3IgSUlEICVzIF9OT1RfIGZvdW5kIVxuIix0aGlzLHhyZWZpaWQpOworCXJldHVybiBPTEVfRV9FTlVNX05PTU9SRTsKK30KKworc3RhdGljIEhSRVNVTFQgV0lOQVBJIFhTaG1fSURpcmVjdERyYXdTdXJmYWNlX1F1ZXJ5SW50ZXJmYWNlKExQRElSRUNURFJBV1NVUkZBQ0UgdGhpcyxSRUZJSUQgcmVmaWlkLExQVk9JRCAqb2JqKSB7CiAgICAgICAgIGNoYXIgICAgeHJlZmlpZFs1MF07CiAKICAgICAgICAgV0lORV9TdHJpbmdGcm9tQ0xTSUQoKExQQ0xTSUQpcmVmaWlkLHhyZWZpaWQpOwpAQCAtNjM2LDE0ICs4NzgsNDIgQEAKIAkvKiB0aGF0cyB2ZXJzaW9uIDMgKERpcmVjdFggNSkgKi8KIAlpZiAoCSFtZW1jbXAoJklJRF9JRGlyZWN0RHJhd1N1cmZhY2UzLHJlZmlpZCxzaXplb2YoSUlEX0lEaXJlY3REcmF3U3VyZmFjZTMpKSkgewogCQl0aGlzLT5scHZ0YmwtPmZuQWRkUmVmKHRoaXMpOwotCQl0aGlzLT5scHZ0YmwgPSAoTFBESVJFQ1REUkFXU1VSRkFDRV9WVEFCTEUpJmRkczN2dDsKKwkJdGhpcy0+bHB2dGJsID0gKExQRElSRUNURFJBV1NVUkZBQ0VfVlRBQkxFKSZ4c2htX2RkczN2dDsKIAkJKm9iaiA9IHRoaXM7CiAJCXJldHVybiAwOwogCX0KIAkvKiB0aGF0cyB2ZXJzaW9uIDIgKERpcmVjdFggMykgKi8KLQlpZiAoCSFtZW1jbXAoJklJRF9JRGlyZWN0RHJhd1N1cmZhY2UyLHJlZmlpZCxzaXplb2YoSUlEX0lEaXJlY3REcmF3U3VyZmFjZTIpKSkgeworCWlmICghbWVtY21wKCZJSURfSURpcmVjdERyYXdTdXJmYWNlMixyZWZpaWQsc2l6ZW9mKElJRF9JRGlyZWN0RHJhd1N1cmZhY2UyKSkpIHsKKwkJdGhpcy0+bHB2dGJsID0gKExQRElSRUNURFJBV1NVUkZBQ0VfVlRBQkxFKSZ4c2htX2RkczJ2dDsKKwkJKm9iaiA9IHRoaXM7CisJCXJldHVybiAwOworCX0KKwkvKiB0aGF0cyB1cyAqLworCWlmICghbWVtY21wKCZJSURfSURpcmVjdERyYXdTdXJmYWNlLHJlZmlpZCxzaXplb2YoSUlEX0lEaXJlY3REcmF3U3VyZmFjZSkpKSB7CiAJCXRoaXMtPmxwdnRibC0+Zm5BZGRSZWYodGhpcyk7Ci0JCXRoaXMtPmxwdnRibCA9IChMUERJUkVDVERSQVdTVVJGQUNFX1ZUQUJMRSkmZGRzMnZ0OworCQkqb2JqID0gdGhpczsKKwkJcmV0dXJuIDA7CisJfQorCVdBUk4oZGRyYXcsIiglcCk6aW50ZXJmYWNlIGZvciBJSUQgJXMgX05PVF8gZm91bmQhXG4iLHRoaXMseHJlZmlpZCk7CisJcmV0dXJuIE9MRV9FX0VOVU1fTk9NT1JFOworfQorCitzdGF0aWMgSFJFU1VMVCBXSU5BUEkgWGxpYl9JRGlyZWN0RHJhd1N1cmZhY2VfUXVlcnlJbnRlcmZhY2UoTFBESVJFQ1REUkFXU1VSRkFDRSB0aGlzLFJFRklJRCByZWZpaWQsTFBWT0lEICpvYmopIHsKKyAgICAgICAgY2hhciAgICB4cmVmaWlkWzUwXTsKKworICAgICAgICBXSU5FX1N0cmluZ0Zyb21DTFNJRCgoTFBDTFNJRClyZWZpaWQseHJlZmlpZCk7CisgICAgICAgIFRSQUNFKGRkcmF3LCIoJXApLT4oJXMsJXApXG4iLHRoaXMseHJlZmlpZCxvYmopOworCQorCS8qIHRoYXRzIHZlcnNpb24gMyAoRGlyZWN0WCA1KSAqLworCWlmICghbWVtY21wKCZJSURfSURpcmVjdERyYXdTdXJmYWNlMyxyZWZpaWQsc2l6ZW9mKElJRF9JRGlyZWN0RHJhd1N1cmZhY2UzKSkpIHsKKwkJdGhpcy0+bHB2dGJsID0gKExQRElSRUNURFJBV1NVUkZBQ0VfVlRBQkxFKSZ4bGliX2RkczN2dDsKKwkJdGhpcy0+bHB2dGJsLT5mbkFkZFJlZih0aGlzKTsKKwkJKm9iaiA9IHRoaXM7CisJCXJldHVybiAwOworCX0KKwkvKiB0aGF0cyB2ZXJzaW9uIDIgKERpcmVjdFggMykgKi8KKwlpZiAoIW1lbWNtcCgmSUlEX0lEaXJlY3REcmF3U3VyZmFjZTIscmVmaWlkLHNpemVvZihJSURfSURpcmVjdERyYXdTdXJmYWNlMikpKSB7CisJCXRoaXMtPmxwdnRibCA9IChMUERJUkVDVERSQVdTVVJGQUNFX1ZUQUJMRSkmeGxpYl9kZHMydnQ7CiAJCSpvYmogPSB0aGlzOwogCQlyZXR1cm4gMDsKIAl9CkBAIC02NjEsMTAgKzkzMSwxMCBAQAogCXJldHVybiAwOyAvKiBobW0gKi8KIH0KIAotc3RhdGljIHN0cnVjdCBJRGlyZWN0RHJhd1N1cmZhY2VfVlRhYmxlIGRkc3Z0ID0gewotCUlEaXJlY3REcmF3U3VyZmFjZV9RdWVyeUludGVyZmFjZSwKK3N0YXRpYyBzdHJ1Y3QgSURpcmVjdERyYXdTdXJmYWNlX1ZUYWJsZSBkZ2FfZGRzdnQgPSB7CisJREdBX0lEaXJlY3REcmF3U3VyZmFjZV9RdWVyeUludGVyZmFjZSwKIAlJRGlyZWN0RHJhd1N1cmZhY2VfQWRkUmVmLAotCUlEaXJlY3REcmF3U3VyZmFjZV9SZWxlYXNlLAorCURHQV9JRGlyZWN0RHJhd1N1cmZhY2VfUmVsZWFzZSwKIAlJRGlyZWN0RHJhd1N1cmZhY2VfQWRkQXR0YWNoZWRTdXJmYWNlLAogCSh2b2lkKik1LAogCUlEaXJlY3REcmF3U3VyZmFjZV9CbHQsCkBAIC02NzMsNyArOTQzLDcgQEAKIAkodm9pZCopOSwKIAkodm9pZCopMTAsCiAJKHZvaWQqKTExLAotCUlEaXJlY3REcmF3U3VyZmFjZV9GbGlwLAorCURHQV9JRGlyZWN0RHJhd1N1cmZhY2VfRmxpcCwKIAlJRGlyZWN0RHJhd1N1cmZhY2VfR2V0QXR0YWNoZWRTdXJmYWNlLAogCUlEaXJlY3REcmF3U3VyZmFjZV9HZXRCbHRTdGF0dXMsCiAJSURpcmVjdERyYXdTdXJmYWNlX0dldENhcHMsCkBAIC02OTQsNyArOTY0LDg1IEBACiAJKHZvaWQqKTMwLAogCSh2b2lkKikzMSwKIAlJRGlyZWN0RHJhd1N1cmZhY2VfU2V0UGFsZXR0ZSwKLQlJRGlyZWN0RHJhd1N1cmZhY2VfVW5sb2NrLAorCURHQV9JRGlyZWN0RHJhd1N1cmZhY2VfVW5sb2NrLAorCSh2b2lkKikzNCwKKwkodm9pZCopMzUsCisJKHZvaWQqKTM2LAorfTsKKworc3RhdGljIHN0cnVjdCBJRGlyZWN0RHJhd1N1cmZhY2VfVlRhYmxlIHhzaG1fZGRzdnQgPSB7CisJWFNobV9JRGlyZWN0RHJhd1N1cmZhY2VfUXVlcnlJbnRlcmZhY2UsCisJSURpcmVjdERyYXdTdXJmYWNlX0FkZFJlZiwKKwlYU2htX0lEaXJlY3REcmF3U3VyZmFjZV9SZWxlYXNlLAorCUlEaXJlY3REcmF3U3VyZmFjZV9BZGRBdHRhY2hlZFN1cmZhY2UsCisJKHZvaWQqKTUsCisJSURpcmVjdERyYXdTdXJmYWNlX0JsdCwKKwlJRGlyZWN0RHJhd1N1cmZhY2VfQmx0QmF0Y2gsCisJSURpcmVjdERyYXdTdXJmYWNlX0JsdEZhc3QsCisJKHZvaWQqKTksCisJKHZvaWQqKTEwLAorCSh2b2lkKikxMSwKKwlYU2htX0lEaXJlY3REcmF3U3VyZmFjZV9GbGlwLAorCUlEaXJlY3REcmF3U3VyZmFjZV9HZXRBdHRhY2hlZFN1cmZhY2UsCisJSURpcmVjdERyYXdTdXJmYWNlX0dldEJsdFN0YXR1cywKKwlJRGlyZWN0RHJhd1N1cmZhY2VfR2V0Q2FwcywKKwkodm9pZCopMTYsCisJKHZvaWQqKTE3LAorCUlEaXJlY3REcmF3U3VyZmFjZV9HZXREQywKKwkodm9pZCopMTksCisJSURpcmVjdERyYXdTdXJmYWNlX0dldE92ZXJsYXlQb3NpdGlvbiwKKwkodm9pZCopMjEsCisJSURpcmVjdERyYXdTdXJmYWNlX0dldFBpeGVsRm9ybWF0LAorCUlEaXJlY3REcmF3U3VyZmFjZV9HZXRTdXJmYWNlRGVzYywKKwlJRGlyZWN0RHJhd1N1cmZhY2VfSW5pdGlhbGl6ZSwKKwlJRGlyZWN0RHJhd1N1cmZhY2VfSXNMb3N0LAorCUlEaXJlY3REcmF3U3VyZmFjZV9Mb2NrLAorCSh2b2lkKikyNywKKwkodm9pZCopMjgsCisJSURpcmVjdERyYXdTdXJmYWNlX1NldENsaXBwZXIsCisJKHZvaWQqKTMwLAorCSh2b2lkKikzMSwKKwlJRGlyZWN0RHJhd1N1cmZhY2VfU2V0UGFsZXR0ZSwKKwlYU2htX0lEaXJlY3REcmF3U3VyZmFjZV9VbmxvY2ssCisJKHZvaWQqKTM0LAorCSh2b2lkKikzNSwKKwkodm9pZCopMzYsCit9OworCitzdGF0aWMgc3RydWN0IElEaXJlY3REcmF3U3VyZmFjZV9WVGFibGUgeGxpYl9kZHN2dCA9IHsKKwlYbGliX0lEaXJlY3REcmF3U3VyZmFjZV9RdWVyeUludGVyZmFjZSwKKwlJRGlyZWN0RHJhd1N1cmZhY2VfQWRkUmVmLAorCVhsaWJfSURpcmVjdERyYXdTdXJmYWNlX1JlbGVhc2UsCisJSURpcmVjdERyYXdTdXJmYWNlX0FkZEF0dGFjaGVkU3VyZmFjZSwKKwkodm9pZCopNSwKKwlJRGlyZWN0RHJhd1N1cmZhY2VfQmx0LAorCUlEaXJlY3REcmF3U3VyZmFjZV9CbHRCYXRjaCwKKwlJRGlyZWN0RHJhd1N1cmZhY2VfQmx0RmFzdCwKKwkodm9pZCopOSwKKwkodm9pZCopMTAsCisJKHZvaWQqKTExLAorCVhsaWJfSURpcmVjdERyYXdTdXJmYWNlX0ZsaXAsCisJSURpcmVjdERyYXdTdXJmYWNlX0dldEF0dGFjaGVkU3VyZmFjZSwKKwlJRGlyZWN0RHJhd1N1cmZhY2VfR2V0Qmx0U3RhdHVzLAorCUlEaXJlY3REcmF3U3VyZmFjZV9HZXRDYXBzLAorCSh2b2lkKikxNiwKKwkodm9pZCopMTcsCisJSURpcmVjdERyYXdTdXJmYWNlX0dldERDLAorCSh2b2lkKikxOSwKKwlJRGlyZWN0RHJhd1N1cmZhY2VfR2V0T3ZlcmxheVBvc2l0aW9uLAorCSh2b2lkKikyMSwKKwlJRGlyZWN0RHJhd1N1cmZhY2VfR2V0UGl4ZWxGb3JtYXQsCisJSURpcmVjdERyYXdTdXJmYWNlX0dldFN1cmZhY2VEZXNjLAorCUlEaXJlY3REcmF3U3VyZmFjZV9Jbml0aWFsaXplLAorCUlEaXJlY3REcmF3U3VyZmFjZV9Jc0xvc3QsCisJSURpcmVjdERyYXdTdXJmYWNlX0xvY2ssCisJKHZvaWQqKTI3LAorCSh2b2lkKikyOCwKKwlJRGlyZWN0RHJhd1N1cmZhY2VfU2V0Q2xpcHBlciwKKwkodm9pZCopMzAsCisJKHZvaWQqKTMxLAorCUlEaXJlY3REcmF3U3VyZmFjZV9TZXRQYWxldHRlLAorCVhsaWJfSURpcmVjdERyYXdTdXJmYWNlX1VubG9jaywKIAkodm9pZCopMzQsCiAJKHZvaWQqKTM1LAogCSh2b2lkKikzNiwKQEAgLTcxMSwxMSArMTA1OSwyMiBAQAogCXJldHVybiBJRGlyZWN0RHJhd1N1cmZhY2VfTG9jaygoTFBESVJFQ1REUkFXU1VSRkFDRSl0aGlzLGxwcmVjdCxscGRkc2QsZmxhZ3MsaG5kKTsKIH0KIAotc3RhdGljIEhSRVNVTFQgV0lOQVBJIElEaXJlY3REcmF3U3VyZmFjZTJfVW5sb2NrKAorc3RhdGljIEhSRVNVTFQgV0lOQVBJIERHQV9JRGlyZWN0RHJhd1N1cmZhY2UyX1VubG9jaygKIAlMUERJUkVDVERSQVdTVVJGQUNFMiB0aGlzLExQVk9JRCBzdXJmYWNlCiApIHsKLQlUUkFDRShkZHJhdywiKCVwKS0+VW5sb2NrKCVwKVxuIix0aGlzLHN1cmZhY2UpOwotCXJldHVybiAwOworCXJldHVybiBER0FfSURpcmVjdERyYXdTdXJmYWNlX1VubG9jaygoTFBESVJFQ1REUkFXU1VSRkFDRSl0aGlzLHN1cmZhY2UpOworfQorCitzdGF0aWMgSFJFU1VMVCBXSU5BUEkgWFNobV9JRGlyZWN0RHJhd1N1cmZhY2UyX1VubG9jaygKKwlMUERJUkVDVERSQVdTVVJGQUNFMiB0aGlzLExQVk9JRCBzdXJmYWNlCispIHsKKwlyZXR1cm4gREdBX0lEaXJlY3REcmF3U3VyZmFjZV9VbmxvY2soKExQRElSRUNURFJBV1NVUkZBQ0UpdGhpcyxzdXJmYWNlKTsKK30KKworc3RhdGljIEhSRVNVTFQgV0lOQVBJIFhsaWJfSURpcmVjdERyYXdTdXJmYWNlMl9VbmxvY2soCisJTFBESVJFQ1REUkFXU1VSRkFDRTIgdGhpcyxMUFZPSUQgc3VyZmFjZQorKSB7CisJcmV0dXJuIERHQV9JRGlyZWN0RHJhd1N1cmZhY2VfVW5sb2NrKChMUERJUkVDVERSQVdTVVJGQUNFKXRoaXMsc3VyZmFjZSk7CiB9CiAKIHN0YXRpYyBIUkVTVUxUIFdJTkFQSSBJRGlyZWN0RHJhd1N1cmZhY2UyX1NldFBhbGV0dGUoCkBAIC03MjksNTAgKzEwODgsMTM0IEBACiAJcmV0dXJuICsrKHRoaXMtPnJlZik7CiB9CiAKLXN0YXRpYyBVTE9ORyBXSU5BUEkgSURpcmVjdERyYXdTdXJmYWNlMl9SZWxlYXNlKExQRElSRUNURFJBV1NVUkZBQ0UyIHRoaXMpIHsKLQlyZXR1cm4gSURpcmVjdERyYXdTdXJmYWNlX1JlbGVhc2UoKExQRElSRUNURFJBV1NVUkZBQ0UpdGhpcyk7CitzdGF0aWMgVUxPTkcgV0lOQVBJIERHQV9JRGlyZWN0RHJhd1N1cmZhY2UyX1JlbGVhc2UoTFBESVJFQ1REUkFXU1VSRkFDRTIgdGhpcykgeworCXJldHVybiBER0FfSURpcmVjdERyYXdTdXJmYWNlX1JlbGVhc2UoKExQRElSRUNURFJBV1NVUkZBQ0UpdGhpcyk7CiB9CiAKLXN0YXRpYyBIUkVTVUxUIFdJTkFQSSBJRGlyZWN0RHJhd1N1cmZhY2UyX0dldEF0dGFjaGVkU3VyZmFjZSgKK3N0YXRpYyBVTE9ORyBXSU5BUEkgWFNobV9JRGlyZWN0RHJhd1N1cmZhY2UyX1JlbGVhc2UoTFBESVJFQ1REUkFXU1VSRkFDRTIgdGhpcykgeworCXJldHVybiBYU2htX0lEaXJlY3REcmF3U3VyZmFjZV9SZWxlYXNlKChMUERJUkVDVERSQVdTVVJGQUNFKXRoaXMpOworfQorCitzdGF0aWMgVUxPTkcgV0lOQVBJIFhsaWJfSURpcmVjdERyYXdTdXJmYWNlMl9SZWxlYXNlKExQRElSRUNURFJBV1NVUkZBQ0UyIHRoaXMpIHsKKwlyZXR1cm4gWGxpYl9JRGlyZWN0RHJhd1N1cmZhY2VfUmVsZWFzZSgoTFBESVJFQ1REUkFXU1VSRkFDRSl0aGlzKTsKK30KKworc3RhdGljIEhSRVNVTFQgV0lOQVBJIElEaXJlY3REcmF3U3VyZmFjZTJfQmx0KAorCUxQRElSRUNURFJBV1NVUkZBQ0UyIHRoaXMsTFBSRUNUMzIgcmRzdCxMUERJUkVDVERSQVdTVVJGQUNFMiBzcmMsTFBSRUNUMzIgcnNyYyxEV09SRCBkd0ZsYWdzLExQRERCTFRGWCBscGJsdGZ4CispIHsKKwlyZXR1cm4gSURpcmVjdERyYXdTdXJmYWNlX0JsdCgoTFBESVJFQ1REUkFXU1VSRkFDRSl0aGlzLCByZHN0LCAoTFBESVJFQ1REUkFXU1VSRkFDRSlzcmMsIHJzcmMsIGR3RmxhZ3MsbHBibHRmeCk7Cit9CisKK3N0YXRpYyBIUkVTVUxUIFdJTkFQSSBJRGlyZWN0RHJhd1N1cmZhY2UyX0JsdEZhc3QoCisJTFBESVJFQ1REUkFXU1VSRkFDRTIgdGhpcyxEV09SRCBkc3R4LERXT1JEIGRzdHksTFBESVJFQ1REUkFXU1VSRkFDRTIgc3JjLExQUkVDVDMyIHJzcmMsRFdPUkQgdHJhbnMKKykgeworCXJldHVybiBJRGlyZWN0RHJhd1N1cmZhY2VfQmx0RmFzdCgoTFBESVJFQ1REUkFXU1VSRkFDRSl0aGlzLGRzdHgsZHN0eSwoTFBESVJFQ1REUkFXU1VSRkFDRSlzcmMscnNyYyx0cmFucyk7Cit9CisKK3N0YXRpYyBIUkVTVUxUIFdJTkFQSSBJRGlyZWN0RHJhd1N1cmZhY2UyX0JsdEJhdGNoKAorCUxQRElSRUNURFJBV1NVUkZBQ0UyIHRoaXMsTFBEREJMVEJBVENIIGRkYmx0YmF0Y2gsRFdPUkQgeCxEV09SRCB5CispIHsKKwlyZXR1cm4gSURpcmVjdERyYXdTdXJmYWNlX0JsdEJhdGNoKChMUERJUkVDVERSQVdTVVJGQUNFKXRoaXMsZGRibHRiYXRjaCx4LHkpOworfQorCitzdGF0aWMgSFJFU1VMVCBXSU5BUEkgREdBX0lEaXJlY3REcmF3U3VyZmFjZTJfR2V0QXR0YWNoZWRTdXJmYWNlKAogCUxQRElSRUNURFJBV1NVUkZBQ0UyIHRoaXMsTFBERFNDQVBTIGxwZGRzZCxMUERJUkVDVERSQVdTVVJGQUNFMiAqbHBkc2YKICkgewotCUhSRVNVTFQJcmV0ID0gSURpcmVjdERyYXdTdXJmYWNlX0dldEF0dGFjaGVkU3VyZmFjZSgoTFBESVJFQ1REUkFXU1VSRkFDRSl0aGlzLGxwZGRzZCwoTFBESVJFQ1REUkFXU1VSRkFDRSopbHBkc2YpOworCUhSRVNVTFQJcmV0OwogCi0JaWYgKCFyZXQpCi0JCSgqbHBkc2YpLT5scHZ0YmwgPSAmZGRzMnZ0OworCXJldCA9IElEaXJlY3REcmF3U3VyZmFjZV9HZXRBdHRhY2hlZFN1cmZhY2UoKExQRElSRUNURFJBV1NVUkZBQ0UpdGhpcyxscGRkc2QsKExQRElSRUNURFJBV1NVUkZBQ0UqKWxwZHNmKTsKKworCWlmICghcmV0KSB7CisJCSgqbHBkc2YpLT5scHZ0YmwgPSAmZGdhX2RkczJ2dDsKKwl9CiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIEhSRVNVTFQgV0lOQVBJIFhTaG1fSURpcmVjdERyYXdTdXJmYWNlMl9HZXRBdHRhY2hlZFN1cmZhY2UoCisJTFBESVJFQ1REUkFXU1VSRkFDRTIgdGhpcyxMUEREU0NBUFMgbHBkZHNkLExQRElSRUNURFJBV1NVUkZBQ0UyICpscGRzZgorKSB7CisJSFJFU1VMVAlyZXQ7CisKKwlyZXQgPSBJRGlyZWN0RHJhd1N1cmZhY2VfR2V0QXR0YWNoZWRTdXJmYWNlKChMUERJUkVDVERSQVdTVVJGQUNFKXRoaXMsbHBkZHNkLChMUERJUkVDVERSQVdTVVJGQUNFKilscGRzZik7CisKKwlpZiAoIXJldCkgeworCQkoKmxwZHNmKS0+bHB2dGJsID0gJnhzaG1fZGRzMnZ0OworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgSFJFU1VMVCBXSU5BUEkgWGxpYl9JRGlyZWN0RHJhd1N1cmZhY2UyX0dldEF0dGFjaGVkU3VyZmFjZSgKKwlMUERJUkVDVERSQVdTVVJGQUNFMiB0aGlzLExQRERTQ0FQUyBscGRkc2QsTFBESVJFQ1REUkFXU1VSRkFDRTIgKmxwZHNmCispIHsKKwlIUkVTVUxUCXJldDsKKworCXJldCA9IElEaXJlY3REcmF3U3VyZmFjZV9HZXRBdHRhY2hlZFN1cmZhY2UoKExQRElSRUNURFJBV1NVUkZBQ0UpdGhpcyxscGRkc2QsKExQRElSRUNURFJBV1NVUkZBQ0UqKWxwZHNmKTsKKworCWlmICghcmV0KSB7CisJCSgqbHBkc2YpLT5scHZ0YmwgPSAmeGxpYl9kZHMydnQ7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBIUkVTVUxUIFdJTkFQSSBER0FfSURpcmVjdERyYXdTdXJmYWNlMl9GbGlwKAorCUxQRElSRUNURFJBV1NVUkZBQ0UyIHRoaXMsTFBESVJFQ1REUkFXU1VSRkFDRTIgZmxpcHRvLERXT1JEIGR3RmxhZ3MKKykgeworCXJldHVybiBER0FfSURpcmVjdERyYXdTdXJmYWNlX0ZsaXAoKExQRElSRUNURFJBV1NVUkZBQ0UpdGhpcywoTFBESVJFQ1REUkFXU1VSRkFDRSlmbGlwdG8sZHdGbGFncyk7Cit9CisKK3N0YXRpYyBIUkVTVUxUIFdJTkFQSSBYU2htX0lEaXJlY3REcmF3U3VyZmFjZTJfRmxpcCgKKwlMUERJUkVDVERSQVdTVVJGQUNFMiB0aGlzLExQRElSRUNURFJBV1NVUkZBQ0UyIGZsaXB0byxEV09SRCBkd0ZsYWdzCispIHsKKwlyZXR1cm4gWFNobV9JRGlyZWN0RHJhd1N1cmZhY2VfRmxpcCgoTFBESVJFQ1REUkFXU1VSRkFDRSl0aGlzLChMUERJUkVDVERSQVdTVVJGQUNFKWZsaXB0byxkd0ZsYWdzKTsKK30KKworc3RhdGljIEhSRVNVTFQgV0lOQVBJIFhsaWJfSURpcmVjdERyYXdTdXJmYWNlMl9GbGlwKAorCUxQRElSRUNURFJBV1NVUkZBQ0UyIHRoaXMsTFBESVJFQ1REUkFXU1VSRkFDRTIgZmxpcHRvLERXT1JEIGR3RmxhZ3MKKykgeworCXJldHVybiBYbGliX0lEaXJlY3REcmF3U3VyZmFjZV9GbGlwKChMUERJUkVDVERSQVdTVVJGQUNFKXRoaXMsKExQRElSRUNURFJBV1NVUkZBQ0UpZmxpcHRvLGR3RmxhZ3MpOworfQorCiBzdGF0aWMgSFJFU1VMVCBXSU5BUEkgSURpcmVjdERyYXdTdXJmYWNlMl9FbnVtQXR0YWNoZWRTdXJmYWNlcyhMUERJUkVDVERSQVdTVVJGQUNFMiB0aGlzLExQVk9JRCBjb250ZXh0LExQRERFTlVNU1VSRkFDRVNDQUxMQkFDSyBlc2ZjYikgewogCUZJWE1FKGRkcmF3LCIoJXApLT4oJXAsJXApLHN0dWIhXG4iLHRoaXMsY29udGV4dCxlc2ZjYik7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBIUkVTVUxUIFdJTkFQSSBJRGlyZWN0RHJhd1N1cmZhY2UyX1F1ZXJ5SW50ZXJmYWNlKAorc3RhdGljIEhSRVNVTFQgV0lOQVBJIERHQV9JRGlyZWN0RHJhd1N1cmZhY2UyX1F1ZXJ5SW50ZXJmYWNlKAogCUxQRElSRUNURFJBV1NVUkZBQ0UyIHRoaXMsUkVGSUlEIHJpaWQsTFBWT0lEICpwcG9iagogKSB7Ci0JcmV0dXJuIElEaXJlY3REcmF3U3VyZmFjZV9RdWVyeUludGVyZmFjZSgoTFBESVJFQ1REUkFXU1VSRkFDRSl0aGlzLHJpaWQscHBvYmopOworCXJldHVybiBER0FfSURpcmVjdERyYXdTdXJmYWNlX1F1ZXJ5SW50ZXJmYWNlKChMUERJUkVDVERSQVdTVVJGQUNFKXRoaXMscmlpZCxwcG9iaik7Cit9CisKK3N0YXRpYyBIUkVTVUxUIFdJTkFQSSBYU2htX0lEaXJlY3REcmF3U3VyZmFjZTJfUXVlcnlJbnRlcmZhY2UoCisJTFBESVJFQ1REUkFXU1VSRkFDRTIgdGhpcyxSRUZJSUQgcmlpZCxMUFZPSUQgKnBwb2JqCispIHsKKwlyZXR1cm4gWFNobV9JRGlyZWN0RHJhd1N1cmZhY2VfUXVlcnlJbnRlcmZhY2UoKExQRElSRUNURFJBV1NVUkZBQ0UpdGhpcyxyaWlkLHBwb2JqKTsKK30KKworc3RhdGljIEhSRVNVTFQgV0lOQVBJIFhsaWJfSURpcmVjdERyYXdTdXJmYWNlMl9RdWVyeUludGVyZmFjZSgKKwlMUERJUkVDVERSQVdTVVJGQUNFMiB0aGlzLFJFRklJRCByaWlkLExQVk9JRCAqcHBvYmoKKykgeworCXJldHVybiBYbGliX0lEaXJlY3REcmF3U3VyZmFjZV9RdWVyeUludGVyZmFjZSgoTFBESVJFQ1REUkFXU1VSRkFDRSl0aGlzLHJpaWQscHBvYmopOwogfQogCiBzdGF0aWMgSFJFU1VMVCBXSU5BUEkgSURpcmVjdERyYXdTdXJmYWNlMl9Jc0xvc3QoTFBESVJFQ1REUkFXU1VSRkFDRTIgdGhpcykgewogCXJldHVybiAwOyAvKiBobW0gKi8KIH0KIAotCi1zdGF0aWMgc3RydWN0IElEaXJlY3REcmF3U3VyZmFjZTJfVlRhYmxlIGRkczJ2dCA9IHsKLQlJRGlyZWN0RHJhd1N1cmZhY2UyX1F1ZXJ5SW50ZXJmYWNlLAorc3RhdGljIHN0cnVjdCBJRGlyZWN0RHJhd1N1cmZhY2UyX1ZUYWJsZSBkZ2FfZGRzMnZ0ID0geworCURHQV9JRGlyZWN0RHJhd1N1cmZhY2UyX1F1ZXJ5SW50ZXJmYWNlLAogCUlEaXJlY3REcmF3U3VyZmFjZTJfQWRkUmVmLAotCUlEaXJlY3REcmF3U3VyZmFjZTJfUmVsZWFzZSwKKwlER0FfSURpcmVjdERyYXdTdXJmYWNlMl9SZWxlYXNlLAogCSh2b2lkKik0LAogCSh2b2lkKik1LAotCSh2b2lkKik2LypJRGlyZWN0RHJhd1N1cmZhY2VfQmx0Ki8sCi0JKHZvaWQqKTcvKklEaXJlY3REcmF3U3VyZmFjZV9CbHRCYXRjaCovLAotCSh2b2lkKik4LAorCUlEaXJlY3REcmF3U3VyZmFjZTJfQmx0LAorCUlEaXJlY3REcmF3U3VyZmFjZTJfQmx0QmF0Y2gsCisJSURpcmVjdERyYXdTdXJmYWNlMl9CbHRGYXN0LAogCSh2b2lkKik5LAogCUlEaXJlY3REcmF3U3VyZmFjZTJfRW51bUF0dGFjaGVkU3VyZmFjZXMsCiAJKHZvaWQqKTExLAotCSh2b2lkKikxMiwKLQlJRGlyZWN0RHJhd1N1cmZhY2UyX0dldEF0dGFjaGVkU3VyZmFjZSwKKwlER0FfSURpcmVjdERyYXdTdXJmYWNlMl9GbGlwLAorCURHQV9JRGlyZWN0RHJhd1N1cmZhY2UyX0dldEF0dGFjaGVkU3VyZmFjZSwKIAkodm9pZCopMTQsCiAJKHZvaWQqKTE1LypJRGlyZWN0RHJhd1N1cmZhY2VfR2V0Q2FwcyovLAogCSh2b2lkKikxNiwKQEAgLTc5Miw3ICsxMjM1LDkxIEBACiAJKHZvaWQqKTMwLAogCSh2b2lkKikzMSwKIAlJRGlyZWN0RHJhd1N1cmZhY2UyX1NldFBhbGV0dGUsCi0JSURpcmVjdERyYXdTdXJmYWNlMl9VbmxvY2ssCisJREdBX0lEaXJlY3REcmF3U3VyZmFjZTJfVW5sb2NrLAorCSh2b2lkKikzNCwKKwkodm9pZCopMzUsCisJKHZvaWQqKTM2LAorCSh2b2lkKikzNywKKwkodm9pZCopMzgsCisJKHZvaWQqKTM5LAorfTsKKworc3RhdGljIHN0cnVjdCBJRGlyZWN0RHJhd1N1cmZhY2UyX1ZUYWJsZSB4c2htX2RkczJ2dCA9IHsKKwlYU2htX0lEaXJlY3REcmF3U3VyZmFjZTJfUXVlcnlJbnRlcmZhY2UsCisJSURpcmVjdERyYXdTdXJmYWNlMl9BZGRSZWYsCisJWFNobV9JRGlyZWN0RHJhd1N1cmZhY2UyX1JlbGVhc2UsCisJKHZvaWQqKTQsCisJKHZvaWQqKTUsCisJSURpcmVjdERyYXdTdXJmYWNlMl9CbHQsCisJSURpcmVjdERyYXdTdXJmYWNlMl9CbHRCYXRjaCwKKwlJRGlyZWN0RHJhd1N1cmZhY2UyX0JsdEZhc3QsCisJKHZvaWQqKTksCisJSURpcmVjdERyYXdTdXJmYWNlMl9FbnVtQXR0YWNoZWRTdXJmYWNlcywKKwkodm9pZCopMTEsCisJWFNobV9JRGlyZWN0RHJhd1N1cmZhY2UyX0ZsaXAsCisJWFNobV9JRGlyZWN0RHJhd1N1cmZhY2UyX0dldEF0dGFjaGVkU3VyZmFjZSwKKwkodm9pZCopMTQsCisJKHZvaWQqKTE1LypJRGlyZWN0RHJhd1N1cmZhY2VfR2V0Q2FwcyovLAorCSh2b2lkKikxNiwKKwkodm9pZCopMTcsCisJKHZvaWQqKTE4LAorCSh2b2lkKikxOSwKKwkodm9pZCopMjAsCisJKHZvaWQqKTIxLAorCSh2b2lkKikyMiwKKwkodm9pZCopMjMvKklEaXJlY3REcmF3U3VyZmFjZV9HZXRTdXJmYWNlRGVzYyovLAorCSh2b2lkKikyNCwKKwlJRGlyZWN0RHJhd1N1cmZhY2UyX0lzTG9zdCwKKwlJRGlyZWN0RHJhd1N1cmZhY2UyX0xvY2ssCisJKHZvaWQqKTI3LAorCSh2b2lkKikyOCwKKwkodm9pZCopMjksCisJKHZvaWQqKTMwLAorCSh2b2lkKikzMSwKKwlJRGlyZWN0RHJhd1N1cmZhY2UyX1NldFBhbGV0dGUsCisJWFNobV9JRGlyZWN0RHJhd1N1cmZhY2UyX1VubG9jaywKKwkodm9pZCopMzQsCisJKHZvaWQqKTM1LAorCSh2b2lkKikzNiwKKwkodm9pZCopMzcsCisJKHZvaWQqKTM4LAorCSh2b2lkKikzOSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgSURpcmVjdERyYXdTdXJmYWNlMl9WVGFibGUgeGxpYl9kZHMydnQgPSB7CisJWGxpYl9JRGlyZWN0RHJhd1N1cmZhY2UyX1F1ZXJ5SW50ZXJmYWNlLAorCUlEaXJlY3REcmF3U3VyZmFjZTJfQWRkUmVmLAorCVhsaWJfSURpcmVjdERyYXdTdXJmYWNlMl9SZWxlYXNlLAorCSh2b2lkKik0LAorCSh2b2lkKik1LAorCUlEaXJlY3REcmF3U3VyZmFjZTJfQmx0LAorCUlEaXJlY3REcmF3U3VyZmFjZTJfQmx0QmF0Y2gsCisJSURpcmVjdERyYXdTdXJmYWNlMl9CbHRGYXN0LAorCSh2b2lkKik5LAorCUlEaXJlY3REcmF3U3VyZmFjZTJfRW51bUF0dGFjaGVkU3VyZmFjZXMsCisJKHZvaWQqKTExLAorCVhsaWJfSURpcmVjdERyYXdTdXJmYWNlMl9GbGlwLAorCVhsaWJfSURpcmVjdERyYXdTdXJmYWNlMl9HZXRBdHRhY2hlZFN1cmZhY2UsCisJKHZvaWQqKTE0LAorCSh2b2lkKikxNS8qSURpcmVjdERyYXdTdXJmYWNlX0dldENhcHMqLywKKwkodm9pZCopMTYsCisJKHZvaWQqKTE3LAorCSh2b2lkKikxOCwKKwkodm9pZCopMTksCisJKHZvaWQqKTIwLAorCSh2b2lkKikyMSwKKwkodm9pZCopMjIsCisJKHZvaWQqKTIzLypJRGlyZWN0RHJhd1N1cmZhY2VfR2V0U3VyZmFjZURlc2MqLywKKwkodm9pZCopMjQsCisJSURpcmVjdERyYXdTdXJmYWNlMl9Jc0xvc3QsCisJSURpcmVjdERyYXdTdXJmYWNlMl9Mb2NrLAorCSh2b2lkKikyNywKKwkodm9pZCopMjgsCisJKHZvaWQqKTI5LAorCSh2b2lkKikzMCwKKwkodm9pZCopMzEsCisJSURpcmVjdERyYXdTdXJmYWNlMl9TZXRQYWxldHRlLAorCVhsaWJfSURpcmVjdERyYXdTdXJmYWNlMl9VbmxvY2ssCiAJKHZvaWQqKTM0LAogCSh2b2lkKikzNSwKIAkodm9pZCopMzYsCkBAIC04MTYsMTMgKzEzNDMsNDIgQEAKIAlyZXR1cm4gX2dldHBpeGVsZm9ybWF0KHRoaXMtPnMuZGRyYXcscGYpOwogfQogCi1zdGF0aWMgSFJFU1VMVCBXSU5BUEkgSURpcmVjdERyYXdTdXJmYWNlM19HZXRBdHRhY2hlZFN1cmZhY2UoCitzdGF0aWMgSFJFU1VMVCBXSU5BUEkgREdBX0lEaXJlY3REcmF3U3VyZmFjZTNfR2V0QXR0YWNoZWRTdXJmYWNlKAogCUxQRElSRUNURFJBV1NVUkZBQ0UzIHRoaXMsTFBERFNDQVBTIGxwZGRzZCxMUERJUkVDVERSQVdTVVJGQUNFMyAqbHBkc2YKICkgewotCUhSRVNVTFQJcmV0ID0gSURpcmVjdERyYXdTdXJmYWNlX0dldEF0dGFjaGVkU3VyZmFjZSgoTFBESVJFQ1REUkFXU1VSRkFDRSl0aGlzLGxwZGRzZCwoTFBESVJFQ1REUkFXU1VSRkFDRSopbHBkc2YpOworCUhSRVNVTFQJcmV0OwogCi0JaWYgKCFyZXQpCi0JCSgqbHBkc2YpLT5scHZ0YmwgPSAmZGRzM3Z0OworCXJldCA9IElEaXJlY3REcmF3U3VyZmFjZV9HZXRBdHRhY2hlZFN1cmZhY2UoKExQRElSRUNURFJBV1NVUkZBQ0UpdGhpcyxscGRkc2QsKExQRElSRUNURFJBV1NVUkZBQ0UqKWxwZHNmKTsKKworCWlmICghcmV0KSB7CisJCSgqbHBkc2YpLT5scHZ0YmwgPSAmZGdhX2RkczN2dDsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIEhSRVNVTFQgV0lOQVBJIFhTaG1fSURpcmVjdERyYXdTdXJmYWNlM19HZXRBdHRhY2hlZFN1cmZhY2UoCisJTFBESVJFQ1REUkFXU1VSRkFDRTMgdGhpcyxMUEREU0NBUFMgbHBkZHNkLExQRElSRUNURFJBV1NVUkZBQ0UzICpscGRzZgorKSB7CisJSFJFU1VMVAlyZXQ7CisKKwlyZXQgPSBJRGlyZWN0RHJhd1N1cmZhY2VfR2V0QXR0YWNoZWRTdXJmYWNlKChMUERJUkVDVERSQVdTVVJGQUNFKXRoaXMsbHBkZHNkLChMUERJUkVDVERSQVdTVVJGQUNFKilscGRzZik7CisKKwlpZiAoIXJldCkgeworCQkoKmxwZHNmKS0+bHB2dGJsID0gJnhzaG1fZGRzM3Z0OworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgSFJFU1VMVCBXSU5BUEkgWGxpYl9JRGlyZWN0RHJhd1N1cmZhY2UzX0dldEF0dGFjaGVkU3VyZmFjZSgKKwlMUERJUkVDVERSQVdTVVJGQUNFMyB0aGlzLExQRERTQ0FQUyBscGRkc2QsTFBESVJFQ1REUkFXU1VSRkFDRTMgKmxwZHNmCispIHsKKwlIUkVTVUxUCXJldDsKKworCXJldCA9IElEaXJlY3REcmF3U3VyZmFjZV9HZXRBdHRhY2hlZFN1cmZhY2UoKExQRElSRUNURFJBV1NVUkZBQ0UpdGhpcyxscGRkc2QsKExQRElSRUNURFJBV1NVUkZBQ0UqKWxwZHNmKTsKKworCWlmICghcmV0KSB7CisJCSgqbHBkc2YpLT5scHZ0YmwgPSAmeGxpYl9kZHMzdnQ7CisJfQogCXJldHVybiByZXQ7CiB9CiAKQEAgLTgzMSwxNSArMTM4NywxNiBAQAogCXJldHVybiArKyh0aGlzLT5yZWYpOwogfQogCi1zdGF0aWMgVUxPTkcgV0lOQVBJIElEaXJlY3REcmF3U3VyZmFjZTNfUmVsZWFzZShMUERJUkVDVERSQVdTVVJGQUNFMyB0aGlzKSB7Ci0JVFJBQ0UoZGRyYXcsIiglcCktPlJlbGVhc2UoKVxuIix0aGlzKTsKLQlpZiAoIS0tKHRoaXMtPnJlZikpIHsKLQkJdGhpcy0+cy5kZHJhdy0+bHB2dGJsLT5mblJlbGVhc2UodGhpcy0+cy5kZHJhdyk7Ci0JCXRoaXMtPnMuZGRyYXctPmQudnBtYXNrICY9IH4oMTw8KHRoaXMtPnMuZmJfaGVpZ2h0L3RoaXMtPnMuZGRyYXctPmQuZmJfaGVpZ2h0KSk7Ci0JCUhlYXBGcmVlKEdldFByb2Nlc3NIZWFwKCksMCx0aGlzKTsKLQkJcmV0dXJuIDA7Ci0JfQotCXJldHVybiB0aGlzLT5yZWY7CitzdGF0aWMgVUxPTkcgV0lOQVBJIERHQV9JRGlyZWN0RHJhd1N1cmZhY2UzX1JlbGVhc2UoTFBESVJFQ1REUkFXU1VSRkFDRTMgdGhpcykgeworCXJldHVybiBER0FfSURpcmVjdERyYXdTdXJmYWNlX1JlbGVhc2UoKExQRElSRUNURFJBV1NVUkZBQ0UpdGhpcyk7Cit9CisKK3N0YXRpYyBVTE9ORyBXSU5BUEkgWFNobV9JRGlyZWN0RHJhd1N1cmZhY2UzX1JlbGVhc2UoTFBESVJFQ1REUkFXU1VSRkFDRTMgdGhpcykgeworCXJldHVybiBYU2htX0lEaXJlY3REcmF3U3VyZmFjZV9SZWxlYXNlKChMUERJUkVDVERSQVdTVVJGQUNFKXRoaXMpOworfQorCitzdGF0aWMgVUxPTkcgV0lOQVBJIFhsaWJfSURpcmVjdERyYXdTdXJmYWNlM19SZWxlYXNlKExQRElSRUNURFJBV1NVUkZBQ0UzIHRoaXMpIHsKKwlyZXR1cm4gWGxpYl9JRGlyZWN0RHJhd1N1cmZhY2VfUmVsZWFzZSgoTFBESVJFQ1REUkFXU1VSRkFDRSl0aGlzKTsKIH0KIAogc3RhdGljIEhSRVNVTFQgV0lOQVBJIElEaXJlY3REcmF3U3VyZmFjZTNfQmx0KApAQCAtODYzLDEwICsxNDIwLDIyIEBACiAJcmV0dXJuIElEaXJlY3REcmF3U3VyZmFjZV9HZXRCbHRTdGF0dXMoKExQRElSRUNURFJBV1NVUkZBQ0UpdGhpcyxkd2ZsYWdzKTsKIH0KIAotc3RhdGljIEhSRVNVTFQgV0lOQVBJIElEaXJlY3REcmF3U3VyZmFjZTNfRmxpcCgKK3N0YXRpYyBIUkVTVUxUIFdJTkFQSSBER0FfSURpcmVjdERyYXdTdXJmYWNlM19GbGlwKAogCUxQRElSRUNURFJBV1NVUkZBQ0UzIHRoaXMsTFBESVJFQ1REUkFXU1VSRkFDRTMgZmxpcHRvLERXT1JEIGR3RmxhZ3MKICkgewotCXJldHVybiBJRGlyZWN0RHJhd1N1cmZhY2VfRmxpcCgoTFBESVJFQ1REUkFXU1VSRkFDRSl0aGlzLChMUERJUkVDVERSQVdTVVJGQUNFKWZsaXB0byxkd0ZsYWdzKTsKKwlyZXR1cm4gREdBX0lEaXJlY3REcmF3U3VyZmFjZV9GbGlwKChMUERJUkVDVERSQVdTVVJGQUNFKXRoaXMsKExQRElSRUNURFJBV1NVUkZBQ0UpZmxpcHRvLGR3RmxhZ3MpOworfQorCitzdGF0aWMgSFJFU1VMVCBXSU5BUEkgWFNobV9JRGlyZWN0RHJhd1N1cmZhY2UzX0ZsaXAoCisJTFBESVJFQ1REUkFXU1VSRkFDRTMgdGhpcyxMUERJUkVDVERSQVdTVVJGQUNFMyBmbGlwdG8sRFdPUkQgZHdGbGFncworKSB7CisJcmV0dXJuIFhTaG1fSURpcmVjdERyYXdTdXJmYWNlX0ZsaXAoKExQRElSRUNURFJBV1NVUkZBQ0UpdGhpcywoTFBESVJFQ1REUkFXU1VSRkFDRSlmbGlwdG8sZHdGbGFncyk7Cit9CisKK3N0YXRpYyBIUkVTVUxUIFdJTkFQSSBYbGliX0lEaXJlY3REcmF3U3VyZmFjZTNfRmxpcCgKKwlMUERJUkVDVERSQVdTVVJGQUNFMyB0aGlzLExQRElSRUNURFJBV1NVUkZBQ0UzIGZsaXB0byxEV09SRCBkd0ZsYWdzCispIHsKKwlyZXR1cm4gWGxpYl9JRGlyZWN0RHJhd1N1cmZhY2VfRmxpcCgoTFBESVJFQ1REUkFXU1VSRkFDRSl0aGlzLChMUERJUkVDVERSQVdTVVJGQUNFKWZsaXB0byxkd0ZsYWdzKTsKIH0KIAogc3RhdGljIEhSRVNVTFQgV0lOQVBJIElEaXJlY3REcmF3U3VyZmFjZTNfTG9jaygKQEAgLTg3NSwxMCArMTQ0NCwyMiBAQAogCXJldHVybiBJRGlyZWN0RHJhd1N1cmZhY2VfTG9jaygoTFBESVJFQ1REUkFXU1VSRkFDRSl0aGlzLGxwcmVjdCxscGRkc2QsZmxhZ3MsaG5kKTsgCiB9CiAKLXN0YXRpYyBIUkVTVUxUIFdJTkFQSSBJRGlyZWN0RHJhd1N1cmZhY2UzX1VubG9jaygKK3N0YXRpYyBIUkVTVUxUIFdJTkFQSSBER0FfSURpcmVjdERyYXdTdXJmYWNlM19VbmxvY2soCiAJTFBESVJFQ1REUkFXU1VSRkFDRTMgdGhpcyxMUFZPSUQgc3VyZmFjZQogKSB7Ci0JcmV0dXJuIElEaXJlY3REcmF3U3VyZmFjZV9VbmxvY2soKExQRElSRUNURFJBV1NVUkZBQ0UpdGhpcyxzdXJmYWNlKTsKKwlyZXR1cm4gREdBX0lEaXJlY3REcmF3U3VyZmFjZV9VbmxvY2soKExQRElSRUNURFJBV1NVUkZBQ0UpdGhpcyxzdXJmYWNlKTsKK30KKworc3RhdGljIEhSRVNVTFQgV0lOQVBJIFhTaG1fSURpcmVjdERyYXdTdXJmYWNlM19VbmxvY2soCisJTFBESVJFQ1REUkFXU1VSRkFDRTMgdGhpcyxMUFZPSUQgc3VyZmFjZQorKSB7CisJcmV0dXJuIFhTaG1fSURpcmVjdERyYXdTdXJmYWNlX1VubG9jaygoTFBESVJFQ1REUkFXU1VSRkFDRSl0aGlzLHN1cmZhY2UpOworfQorCitzdGF0aWMgSFJFU1VMVCBXSU5BUEkgWGxpYl9JRGlyZWN0RHJhd1N1cmZhY2UzX1VubG9jaygKKwlMUERJUkVDVERSQVdTVVJGQUNFMyB0aGlzLExQVk9JRCBzdXJmYWNlCispIHsKKwlyZXR1cm4gWGxpYl9JRGlyZWN0RHJhd1N1cmZhY2VfVW5sb2NrKChMUERJUkVDVERSQVdTVVJGQUNFKXRoaXMsc3VyZmFjZSk7CiB9CiAKIHN0YXRpYyBIUkVTVUxUIFdJTkFQSSBJRGlyZWN0RHJhd1N1cmZhY2UzX0VudW1BdHRhY2hlZFN1cmZhY2VzKExQRElSRUNURFJBV1NVUkZBQ0UzIHRoaXMsTFBWT0lEIGNvbnRleHQsTFBEREVOVU1TVVJGQUNFU0NBTExCQUNLIGVzZmNiKSB7CkBAIC04OTIsMTYgKzE0NzMsMjggQEAKIAlyZXR1cm4gSURpcmVjdERyYXdTdXJmYWNlX1NldENsaXBwZXIoKExQRElSRUNURFJBV1NVUkZBQ0UpdGhpcyxjbGlwcGVyKTsKIH0KIAotc3RhdGljIEhSRVNVTFQgV0lOQVBJIElEaXJlY3REcmF3U3VyZmFjZTNfUXVlcnlJbnRlcmZhY2UoCitzdGF0aWMgSFJFU1VMVCBXSU5BUEkgREdBX0lEaXJlY3REcmF3U3VyZmFjZTNfUXVlcnlJbnRlcmZhY2UoCiAJTFBESVJFQ1REUkFXU1VSRkFDRTMgdGhpcyxSRUZJSUQgcmlpZCxMUFZPSUQgKnBwb2JqCiApIHsKLQlyZXR1cm4gSURpcmVjdERyYXdTdXJmYWNlX1F1ZXJ5SW50ZXJmYWNlKChMUERJUkVDVERSQVdTVVJGQUNFKXRoaXMscmlpZCxwcG9iaik7CisJcmV0dXJuIERHQV9JRGlyZWN0RHJhd1N1cmZhY2VfUXVlcnlJbnRlcmZhY2UoKExQRElSRUNURFJBV1NVUkZBQ0UpdGhpcyxyaWlkLHBwb2JqKTsKIH0KIAotc3RhdGljIHN0cnVjdCBJRGlyZWN0RHJhd1N1cmZhY2UzX1ZUYWJsZSBkZHMzdnQgPSB7Ci0JSURpcmVjdERyYXdTdXJmYWNlM19RdWVyeUludGVyZmFjZSwKK3N0YXRpYyBIUkVTVUxUIFdJTkFQSSBYU2htX0lEaXJlY3REcmF3U3VyZmFjZTNfUXVlcnlJbnRlcmZhY2UoCisJTFBESVJFQ1REUkFXU1VSRkFDRTMgdGhpcyxSRUZJSUQgcmlpZCxMUFZPSUQgKnBwb2JqCispIHsKKwlyZXR1cm4gWFNobV9JRGlyZWN0RHJhd1N1cmZhY2VfUXVlcnlJbnRlcmZhY2UoKExQRElSRUNURFJBV1NVUkZBQ0UpdGhpcyxyaWlkLHBwb2JqKTsKK30KKworc3RhdGljIEhSRVNVTFQgV0lOQVBJIFhsaWJfSURpcmVjdERyYXdTdXJmYWNlM19RdWVyeUludGVyZmFjZSgKKwlMUERJUkVDVERSQVdTVVJGQUNFMyB0aGlzLFJFRklJRCByaWlkLExQVk9JRCAqcHBvYmoKKykgeworCXJldHVybiBYbGliX0lEaXJlY3REcmF3U3VyZmFjZV9RdWVyeUludGVyZmFjZSgoTFBESVJFQ1REUkFXU1VSRkFDRSl0aGlzLHJpaWQscHBvYmopOworfQorCitzdGF0aWMgc3RydWN0IElEaXJlY3REcmF3U3VyZmFjZTNfVlRhYmxlIGRnYV9kZHMzdnQgPSB7CisJREdBX0lEaXJlY3REcmF3U3VyZmFjZTNfUXVlcnlJbnRlcmZhY2UsCiAJSURpcmVjdERyYXdTdXJmYWNlM19BZGRSZWYsCi0JSURpcmVjdERyYXdTdXJmYWNlM19SZWxlYXNlLAorCURHQV9JRGlyZWN0RHJhd1N1cmZhY2UzX1JlbGVhc2UsCiAJKHZvaWQqKTQsCiAJKHZvaWQqKTUsCiAJSURpcmVjdERyYXdTdXJmYWNlM19CbHQsCkBAIC05MTAsOCArMTUwMyw4IEBACiAJKHZvaWQqKTksCiAJSURpcmVjdERyYXdTdXJmYWNlM19FbnVtQXR0YWNoZWRTdXJmYWNlcywKIAkodm9pZCopMTEsCi0JSURpcmVjdERyYXdTdXJmYWNlM19GbGlwLAotCUlEaXJlY3REcmF3U3VyZmFjZTNfR2V0QXR0YWNoZWRTdXJmYWNlLAorCURHQV9JRGlyZWN0RHJhd1N1cmZhY2UzX0ZsaXAsCisJREdBX0lEaXJlY3REcmF3U3VyZmFjZTNfR2V0QXR0YWNoZWRTdXJmYWNlLAogCUlEaXJlY3REcmF3U3VyZmFjZTNfR2V0Qmx0U3RhdHVzLAogCSh2b2lkKikxNSwKIAkodm9pZCopMTYsCkBAIC05MzEsNyArMTUyNCw3IEBACiAJKHZvaWQqKTMwLAogCSh2b2lkKikzMSwKIAlJRGlyZWN0RHJhd1N1cmZhY2UzX1NldFBhbGV0dGUsCi0JSURpcmVjdERyYXdTdXJmYWNlM19VbmxvY2ssCisJREdBX0lEaXJlY3REcmF3U3VyZmFjZTNfVW5sb2NrLAogCSh2b2lkKikzNCwKIAkodm9pZCopMzUsCiAJKHZvaWQqKTM2LApAQCAtOTQxLDYgKzE1MzQsOTEgQEAKIAkodm9pZCopNDAsCiB9OwogCitzdGF0aWMgc3RydWN0IElEaXJlY3REcmF3U3VyZmFjZTNfVlRhYmxlIHhzaG1fZGRzM3Z0ID0geworCVhTaG1fSURpcmVjdERyYXdTdXJmYWNlM19RdWVyeUludGVyZmFjZSwKKwlJRGlyZWN0RHJhd1N1cmZhY2UzX0FkZFJlZiwKKwlYU2htX0lEaXJlY3REcmF3U3VyZmFjZTNfUmVsZWFzZSwKKwkodm9pZCopNCwKKwkodm9pZCopNSwKKwlJRGlyZWN0RHJhd1N1cmZhY2UzX0JsdCwKKwkodm9pZCopNywKKwkodm9pZCopOCwKKwkodm9pZCopOSwKKwlJRGlyZWN0RHJhd1N1cmZhY2UzX0VudW1BdHRhY2hlZFN1cmZhY2VzLAorCSh2b2lkKikxMSwKKwlYU2htX0lEaXJlY3REcmF3U3VyZmFjZTNfRmxpcCwKKwlYU2htX0lEaXJlY3REcmF3U3VyZmFjZTNfR2V0QXR0YWNoZWRTdXJmYWNlLAorCUlEaXJlY3REcmF3U3VyZmFjZTNfR2V0Qmx0U3RhdHVzLAorCSh2b2lkKikxNSwKKwkodm9pZCopMTYsCisJKHZvaWQqKTE3LAorCSh2b2lkKikxOCwKKwkodm9pZCopMTksCisJKHZvaWQqKTIwLAorCSh2b2lkKikyMSwKKwlJRGlyZWN0RHJhd1N1cmZhY2UzX0dldFBpeGVsRm9ybWF0LAorCSh2b2lkKikyMywKKwkodm9pZCopMjQsCisJSURpcmVjdERyYXdTdXJmYWNlM19Jc0xvc3QsCisJSURpcmVjdERyYXdTdXJmYWNlM19Mb2NrLAorCSh2b2lkKikyNywKKwlJRGlyZWN0RHJhd1N1cmZhY2UzX1Jlc3RvcmUsCisJSURpcmVjdERyYXdTdXJmYWNlM19TZXRDbGlwcGVyLAorCSh2b2lkKikzMCwKKwkodm9pZCopMzEsCisJSURpcmVjdERyYXdTdXJmYWNlM19TZXRQYWxldHRlLAorCVhTaG1fSURpcmVjdERyYXdTdXJmYWNlM19VbmxvY2ssCisJKHZvaWQqKTM0LAorCSh2b2lkKikzNSwKKwkodm9pZCopMzYsCisJKHZvaWQqKTM3LAorCSh2b2lkKikzOCwKKwkodm9pZCopMzksCisJKHZvaWQqKTQwLAorfTsKKworc3RhdGljIHN0cnVjdCBJRGlyZWN0RHJhd1N1cmZhY2UzX1ZUYWJsZSB4bGliX2RkczN2dCA9IHsKKwlYbGliX0lEaXJlY3REcmF3U3VyZmFjZTNfUXVlcnlJbnRlcmZhY2UsCisJSURpcmVjdERyYXdTdXJmYWNlM19BZGRSZWYsCisJWGxpYl9JRGlyZWN0RHJhd1N1cmZhY2UzX1JlbGVhc2UsCisJKHZvaWQqKTQsCisJKHZvaWQqKTUsCisJSURpcmVjdERyYXdTdXJmYWNlM19CbHQsCisJKHZvaWQqKTcsCisJKHZvaWQqKTgsCisJKHZvaWQqKTksCisJSURpcmVjdERyYXdTdXJmYWNlM19FbnVtQXR0YWNoZWRTdXJmYWNlcywKKwkodm9pZCopMTEsCisJWGxpYl9JRGlyZWN0RHJhd1N1cmZhY2UzX0ZsaXAsCisJWGxpYl9JRGlyZWN0RHJhd1N1cmZhY2UzX0dldEF0dGFjaGVkU3VyZmFjZSwKKwlJRGlyZWN0RHJhd1N1cmZhY2UzX0dldEJsdFN0YXR1cywKKwkodm9pZCopMTUsCisJKHZvaWQqKTE2LAorCSh2b2lkKikxNywKKwkodm9pZCopMTgsCisJKHZvaWQqKTE5LAorCSh2b2lkKikyMCwKKwkodm9pZCopMjEsCisJSURpcmVjdERyYXdTdXJmYWNlM19HZXRQaXhlbEZvcm1hdCwKKwkodm9pZCopMjMsCisJKHZvaWQqKTI0LAorCUlEaXJlY3REcmF3U3VyZmFjZTNfSXNMb3N0LAorCUlEaXJlY3REcmF3U3VyZmFjZTNfTG9jaywKKwkodm9pZCopMjcsCisJSURpcmVjdERyYXdTdXJmYWNlM19SZXN0b3JlLAorCUlEaXJlY3REcmF3U3VyZmFjZTNfU2V0Q2xpcHBlciwKKwkodm9pZCopMzAsCisJKHZvaWQqKTMxLAorCUlEaXJlY3REcmF3U3VyZmFjZTNfU2V0UGFsZXR0ZSwKKwlYbGliX0lEaXJlY3REcmF3U3VyZmFjZTNfVW5sb2NrLAorCSh2b2lkKikzNCwKKwkodm9pZCopMzUsCisJKHZvaWQqKTM2LAorCSh2b2lkKikzNywKKwkodm9pZCopMzgsCisJKHZvaWQqKTM5LAorCSh2b2lkKik0MCwKK307CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCQkJSURpcmVjdERyYXdDbGlwcGVyCkBAIC05ODYsMjAgKzE2NjQsMjQgQEAKIHN0YXRpYyBIUkVTVUxUIFdJTkFQSSBJRGlyZWN0RHJhd1BhbGV0dGVfR2V0RW50cmllcygKIAlMUERJUkVDVERSQVdQQUxFVFRFIHRoaXMsRFdPUkQgeCxEV09SRCBzdGFydCxEV09SRCBlbmQsTFBQQUxFVFRFRU5UUlkgcGFsZW50CiApIHsKKwlYQ29sb3IgeGM7CiAJaW50CWk7CiAKLQlGSVhNRShkZHJhdywiKCVwKS0+R2V0RW50cmllcyglMDhseCwlbGQsJWxkLCVwKSxzdHViIVxuIiwKLQkJdGhpcyx4LHN0YXJ0LGVuZCxwYWxlbnQKLQkpOworCWlmICghdGhpcy0+Y20pIC8qIHNob3VsZCBub3QgaGFwcGVuICovIHsKKwkJVFJBQ0UoZGRyYXcsImFwcCB0cmllZCB0byByZWFkIGNvbG9ybWFwIGZvciBub24tcGFsZXR0aXplZCBtb2RlXG4iKTsKKwkJcmV0dXJuIERERVJSX0dFTkVSSUM7CisJfQogCWZvciAoaT1zdGFydDtpPGVuZDtpKyspIHsKLQkJcGFsZW50W2ktc3RhcnRdLnBlUmVkID0gaTsKLQkJcGFsZW50W2ktc3RhcnRdLnBlR3JlZW4gPSBpOwotCQlwYWxlbnRbaS1zdGFydF0ucGVCbHVlID0gaTsKKwkJeGMucGl4ZWwgPSBpOworCQlUU1hRdWVyeUNvbG9yKGRpc3BsYXksdGhpcy0+Y20sJnhjKTsKKwkJcGFsZW50W2ktc3RhcnRdLnBlUmVkID0geGMucmVkPj44OworCQlwYWxlbnRbaS1zdGFydF0ucGVHcmVlbiA9IHhjLmdyZWVuPj44OworCQlwYWxlbnRbaS1zdGFydF0ucGVCbHVlID0geGMuYmx1ZT4+ODsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBIUkVTVUxUIFdJTkFQSSBJRGlyZWN0RHJhd1BhbGV0dGVfU2V0RW50cmllcygKK3N0YXRpYyBIUkVTVUxUIFdJTkFQSSBjb21tb25fSURpcmVjdERyYXdQYWxldHRlX1NldEVudHJpZXMoCiAJTFBESVJFQ1REUkFXUEFMRVRURSB0aGlzLERXT1JEIHgsRFdPUkQgc3RhcnQsRFdPUkQgZW5kLExQUEFMRVRURUVOVFJZIHBhbGVudAogKSB7CiAJWENvbG9yCQl4YzsKQEAgLTEwMDksMjQgKzE2OTEsMTEgQEAKIAkJdGhpcyx4LHN0YXJ0LGVuZCxwYWxlbnQKIAkpOwogCWlmICghdGhpcy0+Y20pIC8qIHNob3VsZCBub3QgaGFwcGVuICovIHsKLQkJRVJSKGRkcmF3LCJubyBjb2xvcm1hcCBpbiBTZXRFbnRyaWVzPz8/XG4iKTsKKwkJVFJBQ0UoZGRyYXcsImFwcCB0cmllZCB0byBzZXQgY29sb3JtYXAgaW4gbm9uLXBhbGV0dGl6ZWQgbW9kZVxuIik7CiAJCXJldHVybiBEREVSUl9HRU5FUklDOwogCX0KLS8qIEZJWE1FOiBmcmVlIGNvbG9yY2VsbHMgaW5zdGVhZCBvZiBmcmVlaW5nIHdob2xlIG1hcCAqLwotCVRTWEZyZWVDb2xvcm1hcChkaXNwbGF5LHRoaXMtPmNtKTsKLQl0aGlzLT5jbSA9IFRTWENyZWF0ZUNvbG9ybWFwKGRpc3BsYXksRGVmYXVsdFJvb3RXaW5kb3coZGlzcGxheSksRGVmYXVsdFZpc3VhbE9mU2NyZWVuKHNjcmVlbiksQWxsb2NBbGwpOwotCWlmIChzdGFydD4wKSB7Ci0JCXhjLnJlZCA9IHhjLmJsdWUgPSB4Yy5ncmVlbiA9IDA7IHhjLmZsYWdzID0gRG9SZWR8RG9HcmVlbnxEb0JsdWU7IHhjLnBpeGVsID0gMDsgVFNYU3RvcmVDb2xvcihkaXNwbGF5LHRoaXMtPmNtLCZ4Yyk7Ci0JCXRoaXMtPnBhbGVudHNbMF0ucGVSZWQgPSAwOwotCQl0aGlzLT5wYWxlbnRzWzBdLnBlQmx1ZSA9IDA7Ci0JCXRoaXMtPnBhbGVudHNbMF0ucGVHcmVlbiA9IDA7Ci0JfQotCWlmIChlbmQ8MjU2KSB7Ci0JCXhjLnJlZCA9IHhjLmJsdWUgPSB4Yy5ncmVlbiA9IDB4ZmZmZjsgeGMuZmxhZ3MgPSBEb1JlZHxEb0dyZWVufERvQmx1ZTsgeGMucGl4ZWwgPSAyNTU7IFRTWFN0b3JlQ29sb3IoZGlzcGxheSx0aGlzLT5jbSwmeGMpOwotCQl0aGlzLT5wYWxlbnRzWzI1NV0ucGVSZWQgPSAyNTU7Ci0JCXRoaXMtPnBhbGVudHNbMjU1XS5wZUJsdWUgPSAyNTU7Ci0JCXRoaXMtPnBhbGVudHNbMjU1XS5wZUdyZWVuID0gMjU1OwotCX0KKwkvKiBGSVhNRTogZnJlZSBjb2xvcmNlbGxzIGluc3RlYWQgb2YgZnJlZWluZyB3aG9sZSBtYXAgKi8KKwl0aGlzLT5jbSA9IFRTWENvcHlDb2xvcm1hcEFuZEZyZWUoZGlzcGxheSx0aGlzLT5jbSk7CiAJZm9yIChpPXN0YXJ0O2k8ZW5kO2krKykgewogCQl4Yy5yZWQgPSBwYWxlbnRbaS1zdGFydF0ucGVSZWQ8PDg7CiAJCXhjLmJsdWUgPSBwYWxlbnRbaS1zdGFydF0ucGVCbHVlPDw4OwpAQCAtMTAzOCwzMSArMTcwNywzMSBAQAogCQl0aGlzLT5wYWxlbnRzW2ldLnBlQmx1ZSA9IHBhbGVudFtpLXN0YXJ0XS5wZUJsdWU7CiAJCXRoaXMtPnBhbGVudHNbaV0ucGVHcmVlbiA9IHBhbGVudFtpLXN0YXJ0XS5wZUdyZWVuOwogCX0KKwlyZXR1cm4gMDsKK30KIAotLyogSW5zb21uaWEncyAoU3RlYSBHcmVlbmUncykgTW9kcyBTdGFydCBIZXJlICovCi0vKiBGSVhNRTogU3RpbGwgc2hvdWxkIGZyZWUgaW5kaXZpZHVhbCBjZWxscywgYnV0IHRoaXMgZml4ZXMgbG9zcyBvZiAqLwotLyogICAgICAgIHVuY2hhbmdlIHNlY3Rpb25zIG9mIG9sZCBwYWxldHRlICovCi0KLQlmb3IgKGk9MDtpPHN0YXJ0O2krKykgewotCQl4Yy5yZWQgPSB0aGlzLT5wYWxlbnRzW2ldLnBlUmVkPDw4OwotCQl4Yy5ibHVlID0gdGhpcy0+cGFsZW50c1tpXS5wZUJsdWU8PDg7Ci0JCXhjLmdyZWVuID0gdGhpcy0+cGFsZW50c1tpXS5wZUdyZWVuPDw4OwotCQl4Yy5mbGFncyA9IERvUmVkfERvQmx1ZXxEb0dyZWVuOwotCQl4Yy5waXhlbCA9IGk7Ci0JCVRTWFN0b3JlQ29sb3IoZGlzcGxheSx0aGlzLT5jbSwmeGMpOwotCX0KLQlmb3IgKGk9ZW5kO2k8MjU2O2krKykgewotCQl4Yy5yZWQgPSB0aGlzLT5wYWxlbnRzW2ldLnBlUmVkPDw4OwotCQl4Yy5ibHVlID0gdGhpcy0+cGFsZW50c1tpXS5wZUJsdWU8PDg7Ci0JCXhjLmdyZWVuID0gdGhpcy0+cGFsZW50c1tpXS5wZUdyZWVuPDw4OwotCQl4Yy5mbGFncyA9IERvUmVkfERvQmx1ZXxEb0dyZWVuOwotCQl4Yy5waXhlbCA9IGk7Ci0JCVRTWFN0b3JlQ29sb3IoZGlzcGxheSx0aGlzLT5jbSwmeGMpOwotCX0KLS8qIEVuZCBJbnNvbW5pYSdzIE1vZHMgKi8KLQorc3RhdGljIEhSRVNVTFQgV0lOQVBJIERHQV9JRGlyZWN0RHJhd1BhbGV0dGVfU2V0RW50cmllcygKKwlMUERJUkVDVERSQVdQQUxFVFRFIHRoaXMsRFdPUkQgeCxEV09SRCBzdGFydCxEV09SRCBlbmQsTFBQQUxFVFRFRU5UUlkgcGFsZW50CispIHsKKyNpZmRlZiBIQVZFX0xJQlhYRjg2REdBCisJSFJFU1VMVCBocmVzOworCWhyZXMgPSBjb21tb25fSURpcmVjdERyYXdQYWxldHRlX1NldEVudHJpZXModGhpcyx4LHN0YXJ0LGVuZCxwYWxlbnQpOworCWlmIChocmVzICE9IDApIHJldHVybiBocmVzOwogCVhGODZER0FJbnN0YWxsQ29sb3JtYXAoZGlzcGxheSxEZWZhdWx0U2NyZWVuKGRpc3BsYXkpLHRoaXMtPmNtKTsKIAlyZXR1cm4gMDsKKyNlbHNlIC8qIGRlZmluZWQoSEFWRV9MSUJYWEY4NkRHQSkgKi8KKwlyZXR1cm4gRV9VTkVYUEVDVEVEOworI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9MSUJYWEY4NkRHQSkgKi8KK30KKworc3RhdGljIEhSRVNVTFQgV0lOQVBJIFhsaWJfSURpcmVjdERyYXdQYWxldHRlX1NldEVudHJpZXMoCisJTFBESVJFQ1REUkFXUEFMRVRURSB0aGlzLERXT1JEIHgsRFdPUkQgc3RhcnQsRFdPUkQgZW5kLExQUEFMRVRURUVOVFJZIHBhbGVudAorKSB7CisJSFJFU1VMVCBocmVzOworCWhyZXMgPSBjb21tb25fSURpcmVjdERyYXdQYWxldHRlX1NldEVudHJpZXModGhpcyx4LHN0YXJ0LGVuZCxwYWxlbnQpOworCWlmIChocmVzICE9IDApIHJldHVybiBocmVzOworCVRTWEluc3RhbGxDb2xvcm1hcChkaXNwbGF5LHRoaXMtPmNtKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIFVMT05HIFdJTkFQSSBJRGlyZWN0RHJhd1BhbGV0dGVfUmVsZWFzZShMUERJUkVDVERSQVdQQUxFVFRFIHRoaXMpIHsKQEAgLTEwODcsMTQgKzE3NTYsMzQgQEAKIAlyZXR1cm4gRERFUlJfQUxSRUFEWUlOSVRJQUxJWkVEOwogfQogCi1zdGF0aWMgc3RydWN0IElEaXJlY3REcmF3UGFsZXR0ZV9WVGFibGUgZGRwYWx2dCA9IHsKK3N0YXRpYyBzdHJ1Y3QgSURpcmVjdERyYXdQYWxldHRlX1ZUYWJsZSBkZ2FfZGRwYWx2dCA9IHsKIAkodm9pZCopMSwKIAlJRGlyZWN0RHJhd1BhbGV0dGVfQWRkUmVmLAogCUlEaXJlY3REcmF3UGFsZXR0ZV9SZWxlYXNlLAogCSh2b2lkKik0LAogCUlEaXJlY3REcmF3UGFsZXR0ZV9HZXRFbnRyaWVzLAogCUlEaXJlY3REcmF3UGFsZXR0ZV9Jbml0aWFsaXplLAotCUlEaXJlY3REcmF3UGFsZXR0ZV9TZXRFbnRyaWVzCisJREdBX0lEaXJlY3REcmF3UGFsZXR0ZV9TZXRFbnRyaWVzCit9OworCitzdGF0aWMgc3RydWN0IElEaXJlY3REcmF3UGFsZXR0ZV9WVGFibGUgeHNobV9kZHBhbHZ0ID0geworCSh2b2lkKikxLAorCUlEaXJlY3REcmF3UGFsZXR0ZV9BZGRSZWYsCisJSURpcmVjdERyYXdQYWxldHRlX1JlbGVhc2UsCisJKHZvaWQqKTQsCisJSURpcmVjdERyYXdQYWxldHRlX0dldEVudHJpZXMsCisJSURpcmVjdERyYXdQYWxldHRlX0luaXRpYWxpemUsCisJWGxpYl9JRGlyZWN0RHJhd1BhbGV0dGVfU2V0RW50cmllcworfTsKKworc3RhdGljIHN0cnVjdCBJRGlyZWN0RHJhd1BhbGV0dGVfVlRhYmxlIHhsaWJfZGRwYWx2dCA9IHsKKwkodm9pZCopMSwKKwlJRGlyZWN0RHJhd1BhbGV0dGVfQWRkUmVmLAorCUlEaXJlY3REcmF3UGFsZXR0ZV9SZWxlYXNlLAorCSh2b2lkKik0LAorCUlEaXJlY3REcmF3UGFsZXR0ZV9HZXRFbnRyaWVzLAorCUlEaXJlY3REcmF3UGFsZXR0ZV9Jbml0aWFsaXplLAorCVhsaWJfSURpcmVjdERyYXdQYWxldHRlX1NldEVudHJpZXMKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xMTU1LDkgKzE4NDQsMTAgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgkJCQlJRGlyZWN0RHJhdwogICovCi1zdGF0aWMgSFJFU1VMVCBXSU5BUEkgSURpcmVjdERyYXdfQ3JlYXRlU3VyZmFjZSgKK3N0YXRpYyBIUkVTVUxUIFdJTkFQSSBER0FfSURpcmVjdERyYXdfQ3JlYXRlU3VyZmFjZSgKIAlMUERJUkVDVERSQVcgdGhpcyxMUEREU1VSRkFDRURFU0MgbHBkZHNkLExQRElSRUNURFJBV1NVUkZBQ0UgKmxwZHNmLElVbmtub3duICpscHVuawogKSB7CisjaWZkZWYgSEFWRV9MSUJYWEY4NkRHQQogCWludAlpOwogCiAJVFJBQ0UoZGRyYXcsICIoJXApLT4oJXAsJXAsJXApXG4iLApAQCAtMTE3MywyOCArMTg2MywyOCBAQAogCSpscGRzZiA9IChMUERJUkVDVERSQVdTVVJGQUNFKUhlYXBBbGxvYyhHZXRQcm9jZXNzSGVhcCgpLEhFQVBfWkVST19NRU1PUlksc2l6ZW9mKElEaXJlY3REcmF3U3VyZmFjZSkpOwogCXRoaXMtPmxwdnRibC0+Zm5BZGRSZWYodGhpcyk7CiAJKCpscGRzZiktPnJlZiA9IDE7Ci0JKCpscGRzZiktPmxwdnRibCA9ICZkZHN2dDsKKwkoKmxwZHNmKS0+bHB2dGJsID0gJmRnYV9kZHN2dDsKIAlpZiAoCShscGRkc2QtPmR3RmxhZ3MgJiBERFNEX0NBUFMpICYmIAogCQkobHBkZHNkLT5kZHNDYXBzLmR3Q2FwcyAmIEREU0NBUFNfT0ZGU0NSRUVOUExBSU4pCiAJKSB7CiAJCWlmICghKGxwZGRzZC0+ZHdGbGFncyAmIEREU0RfV0lEVEgpKQotCQkJbHBkZHNkLT5kd1dpZHRoID0gdGhpcy0+ZC5mYl93aWR0aDsKKwkJCWxwZGRzZC0+ZHdXaWR0aCA9IHRoaXMtPmUuZGdhLmZiX3dpZHRoOwogCQlpZiAoIShscGRkc2QtPmR3RmxhZ3MgJiBERFNEX0hFSUdIVCkpCi0JCQlscGRkc2QtPmR3V2lkdGggPSB0aGlzLT5kLmZiX2hlaWdodDsKKwkJCWxwZGRzZC0+ZHdXaWR0aCA9IHRoaXMtPmUuZGdhLmZiX2hlaWdodDsKIAkJKCpscGRzZiktPnMuc3VyZmFjZSA9IChMUEJZVEUpSGVhcEFsbG9jKEdldFByb2Nlc3NIZWFwKCksMCxscGRkc2QtPmR3V2lkdGgqbHBkZHNkLT5kd0hlaWdodCp0aGlzLT5kLmRlcHRoLzgpOwotCQkoKmxwZHNmKS0+cy5mYl9oZWlnaHQgPSAtMTsKKwkJKCpscGRzZiktPnQuZGdhLmZiX2hlaWdodCA9IC0xOwogCQkoKmxwZHNmKS0+cy5scGl0Y2ggPSBscGRkc2QtPmR3V2lkdGgqdGhpcy0+ZC5kZXB0aC84OwogCQlUUkFDRShkZHJhdywidXNpbmcgc3lzdGVtIG1lbW9yeSBmb3IgYSBwcmltYXJ5IHN1cmZhY2VcbiIpOwogCX0gZWxzZSB7CiAJCWZvciAoaT0wO2k8MzI7aSsrKQotCQkJaWYgKCEodGhpcy0+ZC52cG1hc2sgJiAoMTw8aSkpKQorCQkJaWYgKCEodGhpcy0+ZS5kZ2EudnBtYXNrICYgKDE8PGkpKSkKIAkJCQlicmVhazsKIAkJVFJBQ0UoZGRyYXcsInVzaW5nIHZpZXdwb3J0ICVkIGZvciBhIHByaW1hcnkgc3VyZmFjZVxuIixpKTsKIAkJLyogaWYgaSA9PSAzMiBvciBtYXhpbXVtIC4uLiByZXR1cm4gZXJyb3IgKi8KLQkJdGhpcy0+ZC52cG1hc2t8PSgxPDxpKTsKLQkJKCpscGRzZiktPnMuc3VyZmFjZSA9IHRoaXMtPmQuZmJfYWRkcisoKGkqdGhpcy0+ZC5mYl9oZWlnaHQpKnRoaXMtPmQuZmJfd2lkdGgqdGhpcy0+ZC5kZXB0aC84KTsKLQkJKCpscGRzZiktPnMuZmJfaGVpZ2h0ID0gaSp0aGlzLT5kLmZiX2hlaWdodDsKLQkJKCpscGRzZiktPnMubHBpdGNoID0gdGhpcy0+ZC5mYl93aWR0aCp0aGlzLT5kLmRlcHRoLzg7CisJCXRoaXMtPmUuZGdhLnZwbWFza3w9KDE8PGkpOworCQkoKmxwZHNmKS0+cy5zdXJmYWNlID0gdGhpcy0+ZS5kZ2EuZmJfYWRkcisoKGkqdGhpcy0+ZS5kZ2EuZmJfaGVpZ2h0KSp0aGlzLT5lLmRnYS5mYl93aWR0aCp0aGlzLT5kLmRlcHRoLzgpOworCQkoKmxwZHNmKS0+dC5kZ2EuZmJfaGVpZ2h0ID0gaSp0aGlzLT5lLmRnYS5mYl9oZWlnaHQ7CisJCSgqbHBkc2YpLT5zLmxwaXRjaCA9IHRoaXMtPmUuZGdhLmZiX3dpZHRoKnRoaXMtPmQuZGVwdGgvODsKIAl9CiAKIAlscGRkc2QtPmxQaXRjaCA9ICgqbHBkc2YpLT5zLmxwaXRjaDsKQEAgLTEyMTIsMjQgKzE5MDIsMTA2IEBACiAJCSgqbHBkc2YpLT5zLmJhY2tidWZmZXIgPSBiYWNrID0gKExQRElSRUNURFJBV1NVUkZBQ0UpSGVhcEFsbG9jKEdldFByb2Nlc3NIZWFwKCksSEVBUF9aRVJPX01FTU9SWSxzaXplb2YoSURpcmVjdERyYXdTdXJmYWNlKSk7CiAJCXRoaXMtPmxwdnRibC0+Zm5BZGRSZWYodGhpcyk7CiAJCWJhY2stPnJlZiA9IDE7Ci0JCWJhY2stPmxwdnRibCA9ICZkZHN2dDsKKwkJYmFjay0+bHB2dGJsID0gJmRnYV9kZHN2dDsKIAkJZm9yIChpPTA7aTwzMjtpKyspCi0JCQlpZiAoISh0aGlzLT5kLnZwbWFzayAmICgxPDxpKSkpCisJCQlpZiAoISh0aGlzLT5lLmRnYS52cG1hc2sgJiAoMTw8aSkpKQogCQkJCWJyZWFrOwogCQlUUkFDRShkZHJhdywidXNpbmcgdmlld3BvcnQgJWQgZm9yIGJhY2tidWZmZXJcbiIsaSk7CiAJCS8qIGlmIGkgPT0gMzIgb3IgbWF4aW11bSAuLi4gcmV0dXJuIGVycm9yICovCi0JCXRoaXMtPmQudnBtYXNrfD0oMTw8aSk7Ci0JCWJhY2stPnMuc3VyZmFjZSA9IHRoaXMtPmQuZmJfYWRkcisoKGkqdGhpcy0+ZC5mYl9oZWlnaHQpKnRoaXMtPmQuZmJfd2lkdGgqdGhpcy0+ZC5kZXB0aC84KTsKLQkJYmFjay0+cy5mYl9oZWlnaHQgPSBpKnRoaXMtPmQuZmJfaGVpZ2h0OworCQl0aGlzLT5lLmRnYS52cG1hc2t8PSgxPDxpKTsKKwkJYmFjay0+cy5zdXJmYWNlID0gdGhpcy0+ZS5kZ2EuZmJfYWRkcisoKGkqdGhpcy0+ZS5kZ2EuZmJfaGVpZ2h0KSp0aGlzLT5lLmRnYS5mYl93aWR0aCp0aGlzLT5kLmRlcHRoLzgpOworCQliYWNrLT50LmRnYS5mYl9oZWlnaHQgPSBpKnRoaXMtPmUuZGdhLmZiX2hlaWdodDsKIAogCQliYWNrLT5zLndpZHRoID0gdGhpcy0+ZC53aWR0aDsKIAkJYmFjay0+cy5oZWlnaHQgPSB0aGlzLT5kLmhlaWdodDsKIAkJYmFjay0+cy5kZHJhdyA9IHRoaXM7Ci0JCWJhY2stPnMubHBpdGNoID0gdGhpcy0+ZC5mYl93aWR0aCp0aGlzLT5kLmRlcHRoLzg7CisJCWJhY2stPnMubHBpdGNoID0gdGhpcy0+ZS5kZ2EuZmJfd2lkdGgqdGhpcy0+ZC5kZXB0aC84OwogCQliYWNrLT5zLmJhY2tidWZmZXIgPSBOVUxMOyAvKiBkb2VzIG5vdCBoYXZlIGEgYmFja2J1ZmZlciwgaXQgaXMKLQkJCQkJICAqIG9uZSEgKi8KKwkJCQkJICAgICogb25lISAqLwogCX0KIAlyZXR1cm4gMDsKKyNlbHNlIC8qIGRlZmluZWQoSEFWRV9MSUJYWEY4NkRHQSkgKi8KKwlyZXR1cm4gRV9VTkVYUEVDVEVEOworI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9MSUJYWEY4NkRHQSkgKi8KK30KKworc3RhdGljIEhSRVNVTFQgV0lOQVBJIFhTaG1fSURpcmVjdERyYXdfQ3JlYXRlU3VyZmFjZSgKKwlMUERJUkVDVERSQVcgdGhpcyxMUEREU1VSRkFDRURFU0MgbHBkZHNkLExQRElSRUNURFJBV1NVUkZBQ0UgKmxwZHNmLElVbmtub3duICpscHVuaworKSB7CisjaWZkZWYgSEFWRV9MSUJYWFNITQorCVhJbWFnZSAqaW1nOworCWludCBzaG1pZDsKKwlUUkFDRShkZHJhdywgIiglcCktPkNyZWF0ZVN1cmZhY2UoJXAsJXAsJXApXG4iLAorCQkgICAgIHRoaXMsbHBkZHNkLGxwZHNmLGxwdW5rKTsKKwlpZiAoVFJBQ0VfT04oZGRyYXcpKSB7CisJCWZwcmludGYoc3RkZXJyLCJbdz0lbGQsaD0lbGQsZmxhZ3MgIixscGRkc2QtPmR3V2lkdGgsbHBkZHNkLT5kd0hlaWdodCk7CisJCV9kdW1wX0REU0QobHBkZHNkLT5kd0ZsYWdzKTsKKwkJZnByaW50ZihzdGRlcnIsImNhcHMgIik7CisJCV9kdW1wX0REU0NBUFMobHBkZHNkLT5kZHNDYXBzLmR3Q2Fwcyk7CisJCWZwcmludGYoc3RkZXJyLCJdXG4iKTsKKwl9CisKKwlUUkFDRShkZHJhdywidXNpbmcgc2hhcmVkIFhJbWFnZSBmb3IgYSBwcmltYXJ5IHN1cmZhY2VcbiIpOworCSpscGRzZiA9IChMUERJUkVDVERSQVdTVVJGQUNFKUhlYXBBbGxvYyhHZXRQcm9jZXNzSGVhcCgpLEhFQVBfWkVST19NRU1PUlksc2l6ZW9mKElEaXJlY3REcmF3U3VyZmFjZSkpOworCXRoaXMtPmxwdnRibC0+Zm5BZGRSZWYodGhpcyk7CisJKCpscGRzZiktPnJlZiA9IDE7CisJKCpscGRzZiktPmxwdnRibCA9ICZ4c2htX2Rkc3Z0OworCSgqbHBkc2YpLT50LnhzaG0uaW1hZ2UgPSBpbWcgPQorCQlYU2htQ3JlYXRlSW1hZ2UoZGlzcGxheSwgLypGSVhNRTp2aXN1YWwqLzAsIC8qRklYTUU6ZGVwdGgqLzgsIFpQaXhtYXAsCisJCQkJCQlOVUxMLCAmKCpscGRzZiktPnQueHNobS5zaG1pbmZvLAorCQkJCQkJLypGSVhNRTp3aWR0aCovNjQwLCAvKkZJWE1FOmhlaWdodCovNDgwKTsKKwkoKmxwZHNmKS0+dC54c2htLnNobWluZm8uc2htaWQgPSBzaG1pZCA9CisJCXNobWdldChJUENfUFJJVkFURSwgaW1nLT5ieXRlc19wZXJfbGluZSppbWctPmhlaWdodCwgSVBDX0NSRUFUfDA3NzcpOworCSgqbHBkc2YpLT50LnhzaG0uc2htaW5mby5zaG1hZGRyID0gaW1nLT5kYXRhID0gc2htYXQoc2htaWQsIDAsIDApOworCVhTaG1BdHRhY2goZGlzcGxheSwgJigqbHBkc2YpLT50LnhzaG0uc2htaW5mbyk7CisJLyogUE9PTEUgRklYTUU6IFhTaG06IHRoaXMgd2lsbCBlYXNpbHkgYnJlYWsgKi8KKwkoKmxwZHNmKS0+dC54c2htLnN1cmZhY2VfaXNfaW1hZ2VfZGF0YSA9IFRSVUU7CisJKCpscGRzZiktPnMuc3VyZmFjZSA9IGltZy0+ZGF0YTsKKwkvKiBFTkQgRklYTUU6IFhTaG0gKi8KKwkoKmxwZHNmKS0+cy5scGl0Y2ggPSBpbWctPmJ5dGVzX3Blcl9saW5lOworCSgqbHBkc2YpLT5zLndpZHRoID0gaW1nLT53aWR0aDsKKwkoKmxwZHNmKS0+cy5oZWlnaHQgPSBpbWctPmhlaWdodDsKKwkoKmxwZHNmKS0+cy5kZHJhdyA9IHRoaXM7CisJKCpscGRzZiktPnMuYmFja2J1ZmZlciA9IE5VTEw7CisJcmV0dXJuIDA7CisjZWxzZSAvKiBkZWZpbmVkKEhBVkVfTElCWFhTSE0pICovCisJcmV0dXJuIEVfVU5FWFBFQ1RFRDsKKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfTElCWFhTSE0pICovCit9CisKK3N0YXRpYyBIUkVTVUxUIFdJTkFQSSBYbGliX0lEaXJlY3REcmF3X0NyZWF0ZVN1cmZhY2UoCisJTFBESVJFQ1REUkFXIHRoaXMsTFBERFNVUkZBQ0VERVNDIGxwZGRzZCxMUERJUkVDVERSQVdTVVJGQUNFICpscGRzZixJVW5rbm93biAqbHB1bmsKKykgeworCVhJbWFnZSAqaW1nOworCVRSQUNFKGRkcmF3LCAiKCVwKS0+Q3JlYXRlU3VyZmFjZSglcCwlcCwlcClcbiIsCisJCSAgICAgdGhpcyxscGRkc2QsbHBkc2YsbHB1bmspOworCWlmIChUUkFDRV9PTihkZHJhdykpIHsKKwkJZnByaW50ZihzdGRlcnIsIlt3PSVsZCxoPSVsZCxmbGFncyAiLGxwZGRzZC0+ZHdXaWR0aCxscGRkc2QtPmR3SGVpZ2h0KTsKKwkJX2R1bXBfRERTRChscGRkc2QtPmR3RmxhZ3MpOworCQlmcHJpbnRmKHN0ZGVyciwiY2FwcyAiKTsKKwkJX2R1bXBfRERTQ0FQUyhscGRkc2QtPmRkc0NhcHMuZHdDYXBzKTsKKwkJZnByaW50ZihzdGRlcnIsIl1cbiIpOworCX0KKworCSpscGRzZiA9IChMUERJUkVDVERSQVdTVVJGQUNFKUhlYXBBbGxvYyhHZXRQcm9jZXNzSGVhcCgpLEhFQVBfWkVST19NRU1PUlksc2l6ZW9mKElEaXJlY3REcmF3U3VyZmFjZSkpOworCXRoaXMtPmxwdnRibC0+Zm5BZGRSZWYodGhpcyk7CisJKCpscGRzZiktPnJlZiA9IDE7CisJKCpscGRzZiktPmxwdnRibCA9ICZ4bGliX2Rkc3Z0OworCVRSQUNFKGRkcmF3LCJ1c2luZyBzdGFuZGFyZCBYSW1hZ2UgZm9yIGEgcHJpbWFyeSBzdXJmYWNlXG4iKTsKKwkvKiBQT09MRSBGSVhNRTogWGxpYjogdGhpcyB3aWxsIGVhc2lseSBicmVhayAqLworCSgqbHBkc2YpLT50LnhzaG0uc3VyZmFjZV9pc19pbWFnZV9kYXRhID0gVFJVRTsKKwkoKmxwZHNmKS0+cy5zdXJmYWNlID0gSGVhcEFsbG9jKEdldFByb2Nlc3NIZWFwKCksSEVBUF9aRVJPX01FTU9SWSw2NDAqNDgwKTsKKwkoKmxwZHNmKS0+dC54bGliLmltYWdlID0gaW1nID0KKwkJWENyZWF0ZUltYWdlKGRpc3BsYXksIC8qRklYTUU6dmlzdWFsKi8wLCAvKkZJWE1FOiBkZXB0aCovOCwgWlBpeG1hcCwKKwkJCQkJIDAsICgqbHBkc2YpLT5zLnN1cmZhY2UsCisJCQkJCSAvKkZJWE1FOndpZHRoKi82NDAsIC8qRklYTUU6aGVpZ2h0Ki80ODAsIDAsIDY0MCoxKTsKKwkvKiBFTkQgRklYTUU6IFhsaWIgKi8KKwkoKmxwZHNmKS0+cy5scGl0Y2ggPSBpbWctPmJ5dGVzX3Blcl9saW5lOworCSgqbHBkc2YpLT5zLndpZHRoID0gaW1nLT53aWR0aDsKKwkoKmxwZHNmKS0+cy5oZWlnaHQgPSBpbWctPmhlaWdodDsKKwkoKmxwZHNmKS0+cy5kZHJhdyA9IHRoaXM7CisJKCpscGRzZiktPnMuYmFja2J1ZmZlciA9IE5VTEw7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBIUkVTVUxUIFdJTkFQSSBJRGlyZWN0RHJhd19EdXBsaWNhdGVTdXJmYWNlKApAQCAtMTI3NCw5ICsyMDQ2LDEwIEBACiB9CiAKIAotc3RhdGljIEhSRVNVTFQgV0lOQVBJIElEaXJlY3REcmF3X1NldERpc3BsYXlNb2RlKAorc3RhdGljIEhSRVNVTFQgV0lOQVBJIERHQV9JRGlyZWN0RHJhd19TZXREaXNwbGF5TW9kZSgKIAlMUERJUkVDVERSQVcgdGhpcyxEV09SRCB3aWR0aCxEV09SRCBoZWlnaHQsRFdPUkQgZGVwdGgKICkgeworI2lmZGVmIEhBVkVfTElCWFhGODZER0EKIAlpbnQJaSwqZGVwdGhzLGRlcGNvdW50OwogCiAJVFJBQ0UoZGRyYXcsICIoJXApLT4oJWxkLCVsZCwlbGQpXG4iLApAQCAtMTI5MSwxNSArMjA2NCwxNSBAQAogCQlFUlIoZGRyYXcsIih3PSVsZCxoPSVsZCxkPSVsZCksIHVuc3VwcG9ydGVkIGRlcHRoIVxuIix3aWR0aCxoZWlnaHQsZGVwdGgpOwogCQlyZXR1cm4gRERFUlJfVU5TVVBQT1JURURNT0RFOwogCX0KLQlpZiAodGhpcy0+ZC5mYl93aWR0aCA8IHdpZHRoKSB7Ci0JCUVSUihkZHJhdywiU2V0RGlzcGxheU1vZGUodz0lbGQsaD0lbGQsZD0lbGQpLCB3aWR0aCAlbGQgZXhjZWVkcyBmcmFtZWJ1ZmZlciB3aWR0aCAlbGRcbiIsd2lkdGgsaGVpZ2h0LGRlcHRoLHdpZHRoLHRoaXMtPmQuZmJfd2lkdGgpOworCWlmICh0aGlzLT5lLmRnYS5mYl93aWR0aCA8IHdpZHRoKSB7CisJCUVSUihkZHJhdywiU2V0RGlzcGxheU1vZGUodz0lbGQsaD0lbGQsZD0lbGQpLCB3aWR0aCAlbGQgZXhjZWVkcyBmcmFtZWJ1ZmZlciB3aWR0aCAlbGRcbiIsd2lkdGgsaGVpZ2h0LGRlcHRoLHdpZHRoLHRoaXMtPmUuZGdhLmZiX3dpZHRoKTsKIAkJcmV0dXJuIERERVJSX1VOU1VQUE9SVEVETU9ERTsKIAl9CiAJdGhpcy0+ZC53aWR0aAk9IHdpZHRoOwogCXRoaXMtPmQuaGVpZ2h0CT0gaGVpZ2h0OwogCS8qIGFkanVzdCBmYl9oZWlnaHQsIHNvIHdlIGRvbid0IG92ZXJsYXAgKi8KLQlpZiAodGhpcy0+ZC5mYl9oZWlnaHQgPCBoZWlnaHQpCi0JCXRoaXMtPmQuZmJfaGVpZ2h0ID0gaGVpZ2h0OworCWlmICh0aGlzLT5lLmRnYS5mYl9oZWlnaHQgPCBoZWlnaHQpCisJCXRoaXMtPmUuZGdhLmZiX2hlaWdodCA9IGhlaWdodDsKIAl0aGlzLT5kLmRlcHRoCT0gZGVwdGg7CiAKIAkvKiBGSVhNRTogdGhpcyBmdW5jdGlvbiBPVkVSV1JJVEVTIHNldmVyYWwgc2lnbmFsIGhhbmRsZXJzLiAKQEAgLTEzMTUsMjEgKzIwODgsMTQwIEBACiAJU0lHTkFMX0luaXRFbXVsYXRvcigpOwogI2VuZGlmCiAJcmV0dXJuIDA7CisjZWxzZSAvKiBkZWZpbmVkKEhBVkVfTElCWFhGODZER0EpICovCisJcmV0dXJuIEVfVU5FWFBFQ1RFRAorI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9MSUJYWEY4NkRHQSkgKi8KIH0KIAotc3RhdGljIEhSRVNVTFQgV0lOQVBJIElEaXJlY3REcmF3X0dldENhcHMoCitzdGF0aWMgSFJFU1VMVCBXSU5BUEkgWFNobV9JRGlyZWN0RHJhd19TZXREaXNwbGF5TW9kZSgKKwlMUERJUkVDVERSQVcgdGhpcyxEV09SRCB3aWR0aCxEV09SRCBoZWlnaHQsRFdPUkQgZGVwdGgKKykgeworI2lmZGVmIEhBVkVfTElCWFhTSE0KKwlpbnQJaSwqZGVwdGhzLGRlcGNvdW50OworCWNoYXIJYnVmWzIwMF07CisKKwlUUkFDRShkZHJhdywgIiglcCktPlNldERpc3BsYXlNb2RlKCVsZCwlbGQsJWxkKVxuIiwKKwkJICAgICAgdGhpcywgd2lkdGgsIGhlaWdodCwgZGVwdGgpOworCisJZGVwdGhzID0gVFNYTGlzdERlcHRocyhkaXNwbGF5LERlZmF1bHRTY3JlZW4oZGlzcGxheSksJmRlcGNvdW50KTsKKwlmb3IgKGk9MDtpPGRlcGNvdW50O2krKykKKwkJaWYgKGRlcHRoc1tpXT09ZGVwdGgpCisJCQlicmVhazsKKwlUU1hGcmVlKGRlcHRocyk7CisJaWYgKGk9PWRlcGNvdW50KSB7Lyogbm90IGZvdW5kICovCisJCXNwcmludGYoYnVmLCJTZXREaXNwbGF5TW9kZSh3PSVsZCxoPSVsZCxkPSVsZCksIHVuc3VwcG9ydGVkIGRlcHRoISIsd2lkdGgsaGVpZ2h0LGRlcHRoKTsKKwkJTWVzc2FnZUJveDMyQSgwLGJ1ZiwiV0lORSBEaXJlY3REcmF3IixNQl9PS3xNQl9JQ09OU1RPUCk7CisJCXJldHVybiBEREVSUl9VTlNVUFBPUlRFRE1PREU7CisJfQorCS8qIFBPT0xFIEZJWE1FOiBYU2htICovCisJaWYgKHRoaXMtPmUuZGdhLmZiX3dpZHRoIDwgd2lkdGgpIHsKKwkJc3ByaW50ZihidWYsIlNldERpc3BsYXlNb2RlKHc9JWxkLGg9JWxkLGQ9JWxkKSwgd2lkdGggJWxkIGV4Y2VlZHMgZnJhbWVidWZmZXIgd2lkdGggJWxkIix3aWR0aCxoZWlnaHQsZGVwdGgsd2lkdGgsdGhpcy0+ZS5kZ2EuZmJfd2lkdGgpOworCQlNZXNzYWdlQm94MzJBKDAsYnVmLCJXSU5FIERpcmVjdERyYXciLE1CX09LfE1CX0lDT05TVE9QKTsKKwkJcmV0dXJuIERERVJSX1VOU1VQUE9SVEVETU9ERTsKKwl9CisJdGhpcy0+ZC53aWR0aAk9IHdpZHRoOworCXRoaXMtPmQuaGVpZ2h0CT0gaGVpZ2h0OworCS8qIGFkanVzdCBmYl9oZWlnaHQsIHNvIHdlIGRvbid0IG92ZXJsYXAgKi8KKwlpZiAodGhpcy0+ZS5kZ2EuZmJfaGVpZ2h0IDwgaGVpZ2h0KQorCQl0aGlzLT5lLmRnYS5mYl9oZWlnaHQgPSBoZWlnaHQ7CisJdGhpcy0+ZC5kZXB0aAk9IGRlcHRoOworCS8qIEVORCBGSVhNRTogWFNobSAqLworCXJldHVybiAwOworI2Vsc2UgLyogZGVmaW5lZChIQVZFX0xJQlhYU0hNKSAqLworCXJldHVybiBFX1VORVhQRUNURUQ7CisjZW5kaWYgLyogZGVmaW5lZChIQVZFX0xJQlhYU0hNKSAqLworfQorCitzdGF0aWMgSFJFU1VMVCBXSU5BUEkgWGxpYl9JRGlyZWN0RHJhd19TZXREaXNwbGF5TW9kZSgKKwlMUERJUkVDVERSQVcgdGhpcyxEV09SRCB3aWR0aCxEV09SRCBoZWlnaHQsRFdPUkQgZGVwdGgKKykgeworCWludAlpLCpkZXB0aHMsZGVwY291bnQ7CisJY2hhcglidWZbMjAwXTsKKworCVRSQUNFKGRkcmF3LCAiKCVwKS0+U2V0RGlzcGxheU1vZGUoJWxkLCVsZCwlbGQpXG4iLAorCQkgICAgICB0aGlzLCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCk7CisKKwlkZXB0aHMgPSBUU1hMaXN0RGVwdGhzKGRpc3BsYXksRGVmYXVsdFNjcmVlbihkaXNwbGF5KSwmZGVwY291bnQpOworCWZvciAoaT0wO2k8ZGVwY291bnQ7aSsrKQorCQlpZiAoZGVwdGhzW2ldPT1kZXB0aCkKKwkJCWJyZWFrOworCVRTWEZyZWUoZGVwdGhzKTsKKwlpZiAoaT09ZGVwY291bnQpIHsvKiBub3QgZm91bmQgKi8KKwkJc3ByaW50ZihidWYsIlNldERpc3BsYXlNb2RlKHc9JWxkLGg9JWxkLGQ9JWxkKSwgdW5zdXBwb3J0ZWQgZGVwdGghIix3aWR0aCxoZWlnaHQsZGVwdGgpOworCQlNZXNzYWdlQm94MzJBKDAsYnVmLCJXSU5FIERpcmVjdERyYXciLE1CX09LfE1CX0lDT05TVE9QKTsKKwkJcmV0dXJuIERERVJSX1VOU1VQUE9SVEVETU9ERTsKKwl9CisJLyogUE9PTEUgRklYTUU6IFhsaWIgKi8KKwlpZiAodGhpcy0+ZS5kZ2EuZmJfd2lkdGggPCB3aWR0aCkgeworCQlzcHJpbnRmKGJ1ZiwiU2V0RGlzcGxheU1vZGUodz0lbGQsaD0lbGQsZD0lbGQpLCB3aWR0aCAlbGQgZXhjZWVkcyBmcmFtZWJ1ZmZlciB3aWR0aCAlbGQiLHdpZHRoLGhlaWdodCxkZXB0aCx3aWR0aCx0aGlzLT5lLmRnYS5mYl93aWR0aCk7CisJCU1lc3NhZ2VCb3gzMkEoMCxidWYsIldJTkUgRGlyZWN0RHJhdyIsTUJfT0t8TUJfSUNPTlNUT1ApOworCQlyZXR1cm4gRERFUlJfVU5TVVBQT1JURURNT0RFOworCX0KKwl0aGlzLT5kLndpZHRoCT0gd2lkdGg7CisJdGhpcy0+ZC5oZWlnaHQJPSBoZWlnaHQ7CisJLyogYWRqdXN0IGZiX2hlaWdodCwgc28gd2UgZG9uJ3Qgb3ZlcmxhcCAqLworCWlmICh0aGlzLT5lLmRnYS5mYl9oZWlnaHQgPCBoZWlnaHQpCisJCXRoaXMtPmUuZGdhLmZiX2hlaWdodCA9IGhlaWdodDsKKwl0aGlzLT5kLmRlcHRoCT0gZGVwdGg7CisJLyogRU5EIEZJWE1FOiBYbGliICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBIUkVTVUxUIFdJTkFQSSBER0FfSURpcmVjdERyYXdfR2V0Q2FwcygKIAlMUERJUkVDVERSQVcgdGhpcyxMUEREQ0FQUyBjYXBzMSxMUEREQ0FQUyBjYXBzMgotKSAgewotCVRSQUNFKGRkcmF3LCIoJXApLT4oJXAsJXApXG4iLHRoaXMsY2FwczEsY2FwczIpOwotCWNhcHMxLT5kd1ZpZE1lbVRvdGFsID0gdGhpcy0+ZC5mYl9tZW1zaXplOworKSB7CisjaWZkZWYgSEFWRV9MSUJYWEY4NkRHQQorCVRSQUNFKGRkcmF3LCIoJXApLT5HZXRDYXBzKCVwLCVwKVxuIix0aGlzLGNhcHMxLGNhcHMyKTsKKwljYXBzMS0+ZHdWaWRNZW1Ub3RhbCA9IHRoaXMtPmUuZGdhLmZiX21lbXNpemU7CiAJY2FwczEtPmR3Q2FwcyA9IDB4ZmZmZmZmZmYmfihERENBUFNfQkFOS1NXSVRDSEVEKTsJCS8qIHdlIGNhbiBkbyBhbnl0aGluZyAqLwogCWNhcHMxLT5kZHNDYXBzLmR3Q2FwcyA9IDB4ZmZmZmZmZmY7CS8qIHdlIGNhbiBkbyBhbnl0aGluZyAqLwogCWlmIChjYXBzMikgewotCQljYXBzMi0+ZHdWaWRNZW1Ub3RhbCA9IHRoaXMtPmQuZmJfbWVtc2l6ZTsKKwkJY2FwczItPmR3VmlkTWVtVG90YWwgPSB0aGlzLT5lLmRnYS5mYl9tZW1zaXplOwogCQljYXBzMi0+ZHdDYXBzID0gMHhmZmZmZmZmZiZ+KEREQ0FQU19CQU5LU1dJVENIRUQpOwkJLyogd2UgY2FuIGRvIGFueXRoaW5nICovCiAJCWNhcHMyLT5kZHNDYXBzLmR3Q2FwcyA9IDB4ZmZmZmZmZmY7CS8qIHdlIGNhbiBkbyBhbnl0aGluZyAqLwogCX0KIAlyZXR1cm4gMDsKKyNlbHNlIC8qIGRlZmluZWQoSEFWRV9MSUJYWEY4NkRHQSkgKi8KKwlyZXR1cm4gRV9VTkVYUEVDVEVEOworI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9MSUJYWEY4NkRHQSkgKi8KK30KKworc3RhdGljIEhSRVNVTFQgV0lOQVBJIFhTaG1fSURpcmVjdERyYXdfR2V0Q2FwcygKKwlMUERJUkVDVERSQVcgdGhpcyxMUEREQ0FQUyBjYXBzMSxMUEREQ0FQUyBjYXBzMgorKSAgeworI2lmZGVmIEhBVkVfTElCWFhTSE0KKwlUUkFDRShkZHJhdywiKCVwKS0+R2V0Q2FwcyglcCwlcClcbiIsdGhpcyxjYXBzMSxjYXBzMik7CisJLyogRklYTUU6IFhTaG0gKi8KKwljYXBzMS0+ZHdWaWRNZW1Ub3RhbCA9IDIwNDgqMTAyNDsKKwljYXBzMS0+ZHdDYXBzID0gMHhmZmZmZmZmZiZ+KEREQ0FQU19CQU5LU1dJVENIRUQpOwkJLyogd2UgY2FuIGRvIGFueXRoaW5nICovCisJY2FwczEtPmRkc0NhcHMuZHdDYXBzID0gMHhmZmZmZmZmZjsJLyogd2UgY2FuIGRvIGFueXRoaW5nICovCisJaWYgKGNhcHMyKSB7CisJCWNhcHMyLT5kd1ZpZE1lbVRvdGFsID0gMjA0OCoxMDI0OworCQljYXBzMi0+ZHdDYXBzID0gMHhmZmZmZmZmZiZ+KEREQ0FQU19CQU5LU1dJVENIRUQpOwkJLyogd2UgY2FuIGRvIGFueXRoaW5nICovCisJCWNhcHMyLT5kZHNDYXBzLmR3Q2FwcyA9IDB4ZmZmZmZmZmY7CS8qIHdlIGNhbiBkbyBhbnl0aGluZyAqLworCX0KKwkvKiBFTkQgRklYTUU6IFhTaG0gKi8KKwlyZXR1cm4gMDsKKyNlbHNlIC8qIGRlZmluZWQoSEFWRV9MSUJYWFNITSkgKi8KKwlyZXR1cm4gRV9VTkVYUEVDVEVEOworI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9MSUJYWFNITSkgKi8KK30KKworc3RhdGljIEhSRVNVTFQgV0lOQVBJIFhsaWJfSURpcmVjdERyYXdfR2V0Q2FwcygKKwlMUERJUkVDVERSQVcgdGhpcyxMUEREQ0FQUyBjYXBzMSxMUEREQ0FQUyBjYXBzMgorKSAgeworCVRSQUNFKGRkcmF3LCIoJXApLT5HZXRDYXBzKCVwLCVwKVxuIix0aGlzLGNhcHMxLGNhcHMyKTsKKwkvKiBGSVhNRTogWGxpYiAqLworCWNhcHMxLT5kd1ZpZE1lbVRvdGFsID0gMjA0OCoxMDI0OworCWNhcHMxLT5kd0NhcHMgPSAweGZmZmZmZmZmJn4oRERDQVBTX0JBTktTV0lUQ0hFRCk7CQkvKiB3ZSBjYW4gZG8gYW55dGhpbmcgKi8KKwljYXBzMS0+ZGRzQ2Fwcy5kd0NhcHMgPSAweGZmZmZmZmZmOwkvKiB3ZSBjYW4gZG8gYW55dGhpbmcgKi8KKwlpZiAoY2FwczIpIHsKKwkJY2FwczItPmR3VmlkTWVtVG90YWwgPSAyMDQ4KjEwMjQ7CisJCWNhcHMyLT5kd0NhcHMgPSAweGZmZmZmZmZmJn4oRERDQVBTX0JBTktTV0lUQ0hFRCk7CQkvKiB3ZSBjYW4gZG8gYW55dGhpbmcgKi8KKwkJY2FwczItPmRkc0NhcHMuZHdDYXBzID0gMHhmZmZmZmZmZjsJLyogd2UgY2FuIGRvIGFueXRoaW5nICovCisJfQorCS8qIEVORCBGSVhNRTogWGxpYiAqLworCXJldHVybiAwOwogfQogCiBzdGF0aWMgSFJFU1VMVCBXSU5BUEkgSURpcmVjdERyYXdfQ3JlYXRlQ2xpcHBlcigKQEAgLTEzNDQsMjUgKzIyMzYsNjMgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIEhSRVNVTFQgV0lOQVBJIElEaXJlY3REcmF3X0NyZWF0ZVBhbGV0dGUoCitzdGF0aWMgSFJFU1VMVCBXSU5BUEkgY29tbW9uX0lEaXJlY3REcmF3X0NyZWF0ZVBhbGV0dGUoCiAJTFBESVJFQ1REUkFXIHRoaXMsRFdPUkQgeCxMUFBBTEVUVEVFTlRSWSBwYWxlbnQsTFBESVJFQ1REUkFXUEFMRVRURSAqbHBkZHBhbCxMUFVOS05PV04gbHB1bmsKICkgewotCVRSQUNFKGRkcmF3LCIoJXApLT4oJTA4bHgsJXAsJXAsJXApXG4iLAotCQl0aGlzLHgscGFsZW50LGxwZGRwYWwsbHB1bmsKLQkpOwogCSpscGRkcGFsID0gKExQRElSRUNURFJBV1BBTEVUVEUpSGVhcEFsbG9jKEdldFByb2Nlc3NIZWFwKCksSEVBUF9aRVJPX01FTU9SWSxzaXplb2YoSURpcmVjdERyYXdQYWxldHRlKSk7CisJaWYgKCpscGRkcGFsID09IE5VTEwpIHJldHVybiBFX09VVE9GTUVNT1JZOwogCSgqbHBkZHBhbCktPnJlZiA9IDE7Ci0JKCpscGRkcGFsKS0+bHB2dGJsID0gJmRkcGFsdnQ7CiAJKCpscGRkcGFsKS0+ZGRyYXcgPSB0aGlzOwogCWlmICh0aGlzLT5kLmRlcHRoPD04KSB7CiAJCSgqbHBkZHBhbCktPmNtID0gVFNYQ3JlYXRlQ29sb3JtYXAoZGlzcGxheSxEZWZhdWx0Um9vdFdpbmRvdyhkaXNwbGF5KSxEZWZhdWx0VmlzdWFsT2ZTY3JlZW4oc2NyZWVuKSxBbGxvY0FsbCk7Ci0JfSBlbHNlIC8qIHdlIGRvbid0IHdhbnQgcGFsZXR0ZXMgaW4gaGljb2xvciBvciB0cnVlY29sb3IgKi8KKwl9IGVsc2UgeworCQkvKiB3ZSBkb24ndCB3YW50IHBhbGV0dGVzIGluIGhpY29sb3Igb3IgdHJ1ZWNvbG9yICovCiAJCSgqbHBkZHBhbCktPmNtID0gMDsKLQorCX0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIEhSRVNVTFQgV0lOQVBJIElEaXJlY3REcmF3X1Jlc3RvcmVEaXNwbGF5TW9kZShMUERJUkVDVERSQVcgdGhpcykgeworc3RhdGljIEhSRVNVTFQgV0lOQVBJIERHQV9JRGlyZWN0RHJhd19DcmVhdGVQYWxldHRlKAorCUxQRElSRUNURFJBVyB0aGlzLERXT1JEIHgsTFBQQUxFVFRFRU5UUlkgcGFsZW50LExQRElSRUNURFJBV1BBTEVUVEUgKmxwZGRwYWwsTFBVTktOT1dOIGxwdW5rCispIHsKKwlIUkVTVUxUIHJlczsKKwlUUkFDRShkZHJhdywiKCVwKS0+KCUwOGx4LCVwLCVwLCVwKVxuIiwKKwkJdGhpcyx4LHBhbGVudCxscGRkcGFsLGxwdW5rCisJKTsKKwlyZXMgPSBjb21tb25fSURpcmVjdERyYXdfQ3JlYXRlUGFsZXR0ZSh0aGlzLHgscGFsZW50LGxwZGRwYWwsbHB1bmspOworCWlmIChyZXMgIT0gMCkgcmV0dXJuIHJlczsKKwkoKmxwZGRwYWwpLT5scHZ0YmwgPSAmZGdhX2RkcGFsdnQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBIUkVTVUxUIFdJTkFQSSBYU2htX0lEaXJlY3REcmF3X0NyZWF0ZVBhbGV0dGUoCisJTFBESVJFQ1REUkFXIHRoaXMsRFdPUkQgeCxMUFBBTEVUVEVFTlRSWSBwYWxlbnQsTFBESVJFQ1REUkFXUEFMRVRURSAqbHBkZHBhbCxMUFVOS05PV04gbHB1bmsKKykgeworCUhSRVNVTFQgcmVzOworCVRSQUNFKGRkcmF3LCIoJXApLT4oJTA4bHgsJXAsJXAsJXApXG4iLAorCQl0aGlzLHgscGFsZW50LGxwZGRwYWwsbHB1bmsKKwkpOworCXJlcyA9IGNvbW1vbl9JRGlyZWN0RHJhd19DcmVhdGVQYWxldHRlKHRoaXMseCxwYWxlbnQsbHBkZHBhbCxscHVuayk7CisJaWYgKHJlcyAhPSAwKSByZXR1cm4gcmVzOworCSgqbHBkZHBhbCktPmxwdnRibCA9ICZ4c2htX2RkcGFsdnQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBIUkVTVUxUIFdJTkFQSSBYbGliX0lEaXJlY3REcmF3X0NyZWF0ZVBhbGV0dGUoCisJTFBESVJFQ1REUkFXIHRoaXMsRFdPUkQgeCxMUFBBTEVUVEVFTlRSWSBwYWxlbnQsTFBESVJFQ1REUkFXUEFMRVRURSAqbHBkZHBhbCxMUFVOS05PV04gbHB1bmsKKykgeworCUhSRVNVTFQgcmVzOworCVRSQUNFKGRkcmF3LCIoJXApLT4oJTA4bHgsJXAsJXAsJXApXG4iLAorCQl0aGlzLHgscGFsZW50LGxwZGRwYWwsbHB1bmsKKwkpOworCXJlcyA9IGNvbW1vbl9JRGlyZWN0RHJhd19DcmVhdGVQYWxldHRlKHRoaXMseCxwYWxlbnQsbHBkZHBhbCxscHVuayk7CisJaWYgKHJlcyAhPSAwKSByZXR1cm4gcmVzOworCSgqbHBkZHBhbCktPmxwdnRibCA9ICZ4bGliX2RkcGFsdnQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBIUkVTVUxUIFdJTkFQSSBER0FfSURpcmVjdERyYXdfUmVzdG9yZURpc3BsYXlNb2RlKExQRElSRUNURFJBVyB0aGlzKSB7CisjaWZkZWYgSEFWRV9MSUJYWEY4NkRHQQogCVRSQUNFKGRkcmF3LCAiKCVwKS0+KClcbiIsIAogCQkgICAgICB0aGlzKTsKIAlTbGVlcCgxMDAwKTsKQEAgLTEzNzEsOCArMjMwMSwyNyBAQAogCVNJR05BTF9Jbml0RW11bGF0b3IoKTsKICNlbmRpZgogCXJldHVybiAwOworI2Vsc2UgLyogZGVmaW5lZChIQVZFX0xJQlhYRjg2REdBKSAqLworCXJldHVybiBFX1VORVhQRUNURUQ7CisjZW5kaWYKIH0KIAorc3RhdGljIEhSRVNVTFQgV0lOQVBJIFhTaG1fSURpcmVjdERyYXdfUmVzdG9yZURpc3BsYXlNb2RlKExQRElSRUNURFJBVyB0aGlzKSB7CisjaWZkZWYgSEFWRV9MSUJYWEY4NkRHQQorCVRSQUNFKGRkcmF3LCAiKCVwKS0+UmVzdG9yZURpc3BsYXlNb2RlKClcbiIsIAorCQkgICAgICB0aGlzKTsKKwlTbGVlcCgxMDAwKTsKKwlyZXR1cm4gMDsKKyNlbHNlIC8qIGRlZmluZWQoSEFWRV9MSUJYWEY4NkRHQSkgKi8KKwlyZXR1cm4gRV9VTkVYUEVDVEVEOworI2VuZGlmCit9CisKK3N0YXRpYyBIUkVTVUxUIFdJTkFQSSBYbGliX0lEaXJlY3REcmF3X1Jlc3RvcmVEaXNwbGF5TW9kZShMUERJUkVDVERSQVcgdGhpcykgeworCVRSQUNFKGRkcmF3LCAiKCVwKS0+UmVzdG9yZURpc3BsYXlNb2RlKClcbiIsIAorCQkgICAgICB0aGlzKTsKKwlyZXR1cm4gMDsKK30KIAogc3RhdGljIEhSRVNVTFQgV0lOQVBJIElEaXJlY3REcmF3X1dhaXRGb3JWZXJ0aWNhbEJsYW5rKAogCUxQRElSRUNURFJBVyB0aGlzLERXT1JEIHgsSEFORExFMzIgaApAQCAtMTM4NSw3ICsyMzM0LDggQEAKIAlyZXR1cm4gKysodGhpcy0+cmVmKTsKIH0KIAotc3RhdGljIFVMT05HIFdJTkFQSSBJRGlyZWN0RHJhd19SZWxlYXNlKExQRElSRUNURFJBVyB0aGlzKSB7CitzdGF0aWMgVUxPTkcgV0lOQVBJIERHQV9JRGlyZWN0RHJhd19SZWxlYXNlKExQRElSRUNURFJBVyB0aGlzKSB7CisjaWZkZWYgSEFWRV9MSUJYWEY4NkRHQQogCWlmICghLS0odGhpcy0+cmVmKSkgewogCQlYRjg2REdBRGlyZWN0VmlkZW8oZGlzcGxheSxEZWZhdWx0U2NyZWVuKGRpc3BsYXkpLDApOwogI2lmZGVmIFJFU1RPUkVfU0lHTkFMUwpAQCAtMTM5NCwzMiArMjM0NCwxNDkgQEAKIAkJSGVhcEZyZWUoR2V0UHJvY2Vzc0hlYXAoKSwwLHRoaXMpOwogCQlyZXR1cm4gMDsKIAl9CisjZW5kaWYgLyogZGVmaW5lZChIQVZFX0xJQlhYRjg2REdBKSAqLwogCXJldHVybiB0aGlzLT5yZWY7CiB9CiAKLXN0YXRpYyBIUkVTVUxUIFdJTkFQSSBJRGlyZWN0RHJhd19RdWVyeUludGVyZmFjZSgKK3N0YXRpYyBVTE9ORyBXSU5BUEkgWFNobV9JRGlyZWN0RHJhd19SZWxlYXNlKExQRElSRUNURFJBVyB0aGlzKSB7CisjaWZkZWYgSEFWRV9MSUJYWFNITQorCWlmICghLS0odGhpcy0+cmVmKSkgeworCQlIZWFwRnJlZShHZXRQcm9jZXNzSGVhcCgpLDAsdGhpcyk7CisJCXJldHVybiAwOworCX0KKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfTElCWFhTSE0pICovCisJcmV0dXJuIHRoaXMtPnJlZjsKK30KKworc3RhdGljIFVMT05HIFdJTkFQSSBYbGliX0lEaXJlY3REcmF3X1JlbGVhc2UoTFBESVJFQ1REUkFXIHRoaXMpIHsKKwlpZiAoIS0tKHRoaXMtPnJlZikpIHsKKwkJSGVhcEZyZWUoR2V0UHJvY2Vzc0hlYXAoKSwwLHRoaXMpOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIHRoaXMtPnJlZjsKK30KKworc3RhdGljIEhSRVNVTFQgV0lOQVBJIERHQV9JRGlyZWN0RHJhd19RdWVyeUludGVyZmFjZSgKIAlMUERJUkVDVERSQVcgdGhpcyxSRUZJSUQgcmVmaWlkLExQVk9JRCAqb2JqCiApIHsKLSAgICAgICAgY2hhciAgICB4cmVmaWlkWzUwXTsKKwljaGFyICAgIHhyZWZpaWRbNTBdOwogCi0gICAgICAgIFdJTkVfU3RyaW5nRnJvbUNMU0lEKChMUENMU0lEKXJlZmlpZCx4cmVmaWlkKTsKLSAgICAgICAgVFJBQ0UoZGRyYXcsIiglcCktPiglcywlcClcbiIsdGhpcyx4cmVmaWlkLG9iaik7Ci0gICAgICAgIGlmICghbWVtY21wKCZJSURfSVVua25vd24scmVmaWlkLHNpemVvZihJSURfSVVua25vd24pKSkgewotICAgICAgICAgICAgICAgICpvYmogPSB0aGlzOworCVdJTkVfU3RyaW5nRnJvbUNMU0lEKChMUENMU0lEKXJlZmlpZCx4cmVmaWlkKTsKKwlUUkFDRShkZHJhdywiKCVwKS0+KCVzLCVwKVxuIix0aGlzLHhyZWZpaWQsb2JqKTsKKwlpZiAoIW1lbWNtcCgmSUlEX0lVbmtub3duLHJlZmlpZCxzaXplb2YoSUlEX0lVbmtub3duKSkpIHsKKwkJKm9iaiA9IHRoaXM7CiAJCXRoaXMtPmxwdnRibC0+Zm5BZGRSZWYodGhpcyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFtZW1jbXAoJklJRF9JRGlyZWN0RHJhdyxyZWZpaWQsc2l6ZW9mKElJRF9JRGlyZWN0RHJhdykpKSB7Ci0gICAgICAgICAgICAgICAgKm9iaiA9IHRoaXM7CisJCXJldHVybiAwOworCX0KKwlpZiAoIW1lbWNtcCgmSUlEX0lEaXJlY3REcmF3LHJlZmlpZCxzaXplb2YoSUlEX0lEaXJlY3REcmF3KSkpIHsKKwkJKm9iaiA9IHRoaXM7CiAJCXRoaXMtPmxwdnRibC0+Zm5BZGRSZWYodGhpcyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFtZW1jbXAoJklJRF9JRGlyZWN0RHJhdzIscmVmaWlkLHNpemVvZihJSURfSURpcmVjdERyYXcyKSkpIHsKLQkJdGhpcy0+bHB2dGJsID0gKExQRElSRUNURFJBV19WVEFCTEUpJmRkMnZ0OworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFtZW1jbXAoJklJRF9JRGlyZWN0RHJhdzIscmVmaWlkLHNpemVvZihJSURfSURpcmVjdERyYXcyKSkpIHsKKwkJdGhpcy0+bHB2dGJsID0gKExQRElSRUNURFJBV19WVEFCTEUpJmRnYV9kZDJ2dDsKIAkJdGhpcy0+bHB2dGJsLT5mbkFkZFJlZih0aGlzKTsKLSAgICAgICAgICAgICAgICAqb2JqID0gdGhpczsKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQorCQkqb2JqID0gdGhpczsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghbWVtY21wKCZJSURfSURpcmVjdDNELHJlZmlpZCxzaXplb2YoSUlEX0lEaXJlY3QzRCkpKSB7CisJCUxQRElSRUNUM0QJZDNkOworCisJCWQzZCA9IEhlYXBBbGxvYyhHZXRQcm9jZXNzSGVhcCgpLDAsc2l6ZW9mKCpkM2QpKTsKKwkJZDNkLT5yZWYgPSAxOworCQlkM2QtPmRkcmF3ID0gdGhpczsKKwkJdGhpcy0+bHB2dGJsLT5mbkFkZFJlZih0aGlzKTsKKwkJZDNkLT5scHZ0YmwgPSAmZDNkdnQ7CisJCSpvYmogPSBkM2Q7CisJCXJldHVybiAwOworCX0KKwlpZiAoIW1lbWNtcCgmSUlEX0lEaXJlY3QzRDIscmVmaWlkLHNpemVvZihJSURfSURpcmVjdDNEKSkpIHsKKwkJTFBESVJFQ1QzRDIJZDNkOworCisJCWQzZCA9IEhlYXBBbGxvYyhHZXRQcm9jZXNzSGVhcCgpLDAsc2l6ZW9mKCpkM2QpKTsKKwkJZDNkLT5yZWYgPSAxOworCQlkM2QtPmRkcmF3ID0gdGhpczsKKwkJdGhpcy0+bHB2dGJsLT5mbkFkZFJlZih0aGlzKTsKKwkJZDNkLT5scHZ0YmwgPSAmZDNkMnZ0OworCQkqb2JqID0gZDNkOworCQlyZXR1cm4gMDsKKwl9CisJV0FSTihkZHJhdywiKCVwKTppbnRlcmZhY2UgZm9yIElJRCAlcyBfTk9UXyBmb3VuZCFcbiIsdGhpcyx4cmVmaWlkKTsKKyAgICAgICAgcmV0dXJuIE9MRV9FX0VOVU1fTk9NT1JFOworfQorCitzdGF0aWMgSFJFU1VMVCBXSU5BUEkgWFNobV9JRGlyZWN0RHJhd19RdWVyeUludGVyZmFjZSgKKwlMUERJUkVDVERSQVcgdGhpcyxSRUZJSUQgcmVmaWlkLExQVk9JRCAqb2JqCisJKSB7CisJY2hhciAgICB4cmVmaWlkWzUwXTsKKworCVdJTkVfU3RyaW5nRnJvbUNMU0lEKChMUENMU0lEKXJlZmlpZCx4cmVmaWlkKTsKKwlUUkFDRShkZHJhdywiKCVwKS0+KCVzLCVwKVxuIix0aGlzLHhyZWZpaWQsb2JqKTsKKwlpZiAoIW1lbWNtcCgmSUlEX0lVbmtub3duLHJlZmlpZCxzaXplb2YoSUlEX0lVbmtub3duKSkpIHsKKwkJKm9iaiA9IHRoaXM7CisJCXRoaXMtPmxwdnRibC0+Zm5BZGRSZWYodGhpcyk7CisJCXJldHVybiAwOworCX0KKwlpZiAoIW1lbWNtcCgmSUlEX0lEaXJlY3REcmF3LHJlZmlpZCxzaXplb2YoSUlEX0lEaXJlY3REcmF3KSkpIHsKKwkJKm9iaiA9IHRoaXM7CisJCXRoaXMtPmxwdnRibC0+Zm5BZGRSZWYodGhpcyk7CisJCXJldHVybiAwOworCX0KKwlpZiAoIW1lbWNtcCgmSUlEX0lEaXJlY3REcmF3MixyZWZpaWQsc2l6ZW9mKElJRF9JRGlyZWN0RHJhdzIpKSkgeworCQl0aGlzLT5scHZ0YmwgPSAoTFBESVJFQ1REUkFXX1ZUQUJMRSkmeHNobV9kZDJ2dDsKKwkJdGhpcy0+bHB2dGJsLT5mbkFkZFJlZih0aGlzKTsKKwkJKm9iaiA9IHRoaXM7CisJCXJldHVybiAwOworCX0KKwlpZiAoIW1lbWNtcCgmSUlEX0lEaXJlY3QzRCxyZWZpaWQsc2l6ZW9mKElJRF9JRGlyZWN0M0QpKSkgeworCQlMUERJUkVDVDNECWQzZDsKKworCQlkM2QgPSBIZWFwQWxsb2MoR2V0UHJvY2Vzc0hlYXAoKSwwLHNpemVvZigqZDNkKSk7CisJCWQzZC0+cmVmID0gMTsKKwkJZDNkLT5kZHJhdyA9IHRoaXM7CisJCXRoaXMtPmxwdnRibC0+Zm5BZGRSZWYodGhpcyk7CisJCWQzZC0+bHB2dGJsID0gJmQzZHZ0OworCQkqb2JqID0gZDNkOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFtZW1jbXAoJklJRF9JRGlyZWN0M0QyLHJlZmlpZCxzaXplb2YoSUlEX0lEaXJlY3QzRCkpKSB7CisJCUxQRElSRUNUM0QyCWQzZDsKKworCQlkM2QgPSBIZWFwQWxsb2MoR2V0UHJvY2Vzc0hlYXAoKSwwLHNpemVvZigqZDNkKSk7CisJCWQzZC0+cmVmID0gMTsKKwkJZDNkLT5kZHJhdyA9IHRoaXM7CisJCXRoaXMtPmxwdnRibC0+Zm5BZGRSZWYodGhpcyk7CisJCWQzZC0+bHB2dGJsID0gJmQzZDJ2dDsKKwkJKm9iaiA9IGQzZDsKKwkJcmV0dXJuIDA7CisJfQorCVdBUk4oZGRyYXcsIiglcCk6aW50ZXJmYWNlIGZvciBJSUQgJXMgX05PVF8gZm91bmQhXG4iLHRoaXMseHJlZmlpZCk7CisJcmV0dXJuIE9MRV9FX0VOVU1fTk9NT1JFOworfQorCitzdGF0aWMgSFJFU1VMVCBXSU5BUEkgWGxpYl9JRGlyZWN0RHJhd19RdWVyeUludGVyZmFjZSgKKwlMUERJUkVDVERSQVcgdGhpcyxSRUZJSUQgcmVmaWlkLExQVk9JRCAqb2JqCispIHsKKwljaGFyICAgIHhyZWZpaWRbNTBdOworCisJV0lORV9TdHJpbmdGcm9tQ0xTSUQoKExQQ0xTSUQpcmVmaWlkLHhyZWZpaWQpOworCVRSQUNFKGRkcmF3LCIoJXApLT4oJXMsJXApXG4iLHRoaXMseHJlZmlpZCxvYmopOworCWlmICghbWVtY21wKCZJSURfSVVua25vd24scmVmaWlkLHNpemVvZihJSURfSVVua25vd24pKSkgeworCQkqb2JqID0gdGhpczsKKwkJdGhpcy0+bHB2dGJsLT5mbkFkZFJlZih0aGlzKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghbWVtY21wKCZJSURfSURpcmVjdERyYXcscmVmaWlkLHNpemVvZihJSURfSURpcmVjdERyYXcpKSkgeworCQkqb2JqID0gdGhpczsKKwkJdGhpcy0+bHB2dGJsLT5mbkFkZFJlZih0aGlzKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghbWVtY21wKCZJSURfSURpcmVjdERyYXcyLHJlZmlpZCxzaXplb2YoSUlEX0lEaXJlY3REcmF3MikpKSB7CisJCXRoaXMtPmxwdnRibCA9IChMUERJUkVDVERSQVdfVlRBQkxFKSZ4bGliX2RkMnZ0OworCQl0aGlzLT5scHZ0YmwtPmZuQWRkUmVmKHRoaXMpOworCQkqb2JqID0gdGhpczsKKwkJcmV0dXJuIDA7CisJfQogCWlmICghbWVtY21wKCZJSURfSURpcmVjdDNELHJlZmlpZCxzaXplb2YoSUlEX0lEaXJlY3QzRCkpKSB7CiAJCUxQRElSRUNUM0QJZDNkOwogCkBAIC0xNDYxLDcgKzI1MjgsNiBAQAogCiAJVFJBQ0UoZGRyYXcsIiglcCktPigweCUwOGx4LCVwLCVwLCVwKVxuIix0aGlzLGR3RmxhZ3MsbHBkZHNmZCxjb250ZXh0LG1vZGVzY2IpOwogCi0KIAlfZ2V0cGl4ZWxmb3JtYXQodGhpcywmKGRkc2ZkLmRkcGZQaXhlbEZvcm1hdCkpOwogCWRkc2ZkLmR3U2l6ZSA9IHNpemVvZihkZHNmZCk7CiAJZGRzZmQuZHdGbGFncyA9IEREU0RfSEVJR0hUfEREU0RfV0lEVEh8RERTRF9CQUNLQlVGRkVSQ09VTlR8RERTRF9QSVhFTEZPUk1BVHxERFNEX0NBUFM7CkBAIC0xNDkxLDE0ICsyNTU3LDU2IEBACiAJcmV0dXJuIEREX09LOwogfQogCi1zdGF0aWMgSFJFU1VMVCBXSU5BUEkgSURpcmVjdERyYXdfR2V0RGlzcGxheU1vZGUoCitzdGF0aWMgSFJFU1VMVCBXSU5BUEkgREdBX0lEaXJlY3REcmF3X0dldERpc3BsYXlNb2RlKAogCUxQRElSRUNURFJBVyB0aGlzLExQRERTVVJGQUNFREVTQyBscGRkc2ZkCiApIHsKKyNpZmRlZiBIQVZFX0xJQlhYRjg2REdBCiAJVFJBQ0UoZGRyYXcsIiglcCktPiglcClcbiIsdGhpcyxscGRkc2ZkKTsKIAlscGRkc2ZkLT5kd0ZsYWdzID0gRERTRF9IRUlHSFR8RERTRF9XSURUSHxERFNEX1BJVENIfEREU0RfQkFDS0JVRkZFUkNPVU5UfEREU0RfUElYRUxGT1JNQVR8RERTRF9DQVBTOwogCWxwZGRzZmQtPmR3SGVpZ2h0ID0gc2NyZWVuSGVpZ2h0OwogCWxwZGRzZmQtPmR3V2lkdGggPSBzY3JlZW5XaWR0aDsKLQlscGRkc2ZkLT5sUGl0Y2ggPSB0aGlzLT5kLmZiX3dpZHRoKnRoaXMtPmQuZGVwdGgvODsKKwlscGRkc2ZkLT5sUGl0Y2ggPSB0aGlzLT5lLmRnYS5mYl93aWR0aCp0aGlzLT5kLmRlcHRoLzg7CisJbHBkZHNmZC0+ZHdCYWNrQnVmZmVyQ291bnQgPSAxOworCWxwZGRzZmQtPnguZHdSZWZyZXNoUmF0ZSA9IDYwOworCWxwZGRzZmQtPmRkc0NhcHMuZHdDYXBzID0gRERTQ0FQU19QQUxFVFRFOworCV9nZXRwaXhlbGZvcm1hdCh0aGlzLCYobHBkZHNmZC0+ZGRwZlBpeGVsRm9ybWF0KSk7CisJcmV0dXJuIEREX09LOworI2Vsc2UgLyogZGVmaW5lZChIQVZFX0xJQlhYRjg2REdBKSAqLworCXJldHVybiBFX1VORVhQRUNURUQ7CisjZW5kaWYgLyogZGVmaW5lZChIQVZFX0xJQlhYRjg2REdBKSAqLworfQorCitzdGF0aWMgSFJFU1VMVCBXSU5BUEkgWFNobV9JRGlyZWN0RHJhd19HZXREaXNwbGF5TW9kZSgKKwlMUERJUkVDVERSQVcgdGhpcyxMUEREU1VSRkFDRURFU0MgbHBkZHNmZAorKSB7CisjaWZkZWYgSEFWRV9MSUJYWFNNCisJVFJBQ0UoZGRyYXcsIiglcCktPkdldERpc3BsYXlNb2RlKCVwKVxuIix0aGlzLGxwZGRzZmQpOworCWxwZGRzZmQtPmR3RmxhZ3MgPSBERFNEX0hFSUdIVHxERFNEX1dJRFRIfEREU0RfUElUQ0h8RERTRF9CQUNLQlVGRkVSQ09VTlR8RERTRF9QSVhFTEZPUk1BVHxERFNEX0NBUFM7CisJbHBkZHNmZC0+ZHdIZWlnaHQgPSBzY3JlZW5IZWlnaHQ7CisJbHBkZHNmZC0+ZHdXaWR0aCA9IHNjcmVlbldpZHRoOworCS8qIFBPT0xFIEZJWE1FOiBYU2htICovCisJbHBkZHNmZC0+bFBpdGNoID0gdGhpcy0+ZS5kZ2EuZmJfd2lkdGgqdGhpcy0+ZC5kZXB0aC84OworCS8qIEVORCBGSVhNRTogWFNobSAqLworCWxwZGRzZmQtPmR3QmFja0J1ZmZlckNvdW50ID0gMTsKKwlscGRkc2ZkLT54LmR3UmVmcmVzaFJhdGUgPSA2MDsKKwlscGRkc2ZkLT5kZHNDYXBzLmR3Q2FwcyA9IEREU0NBUFNfUEFMRVRURTsKKwlfZ2V0cGl4ZWxmb3JtYXQodGhpcywmKGxwZGRzZmQtPmRkcGZQaXhlbEZvcm1hdCkpOworCXJldHVybiBERF9PSzsKKyNlbHNlIC8qIGRlZmluZWQoSEFWRV9MSUJYWFNITSkgKi8KKwlyZXR1cm4gRV9VTkVYUEVDVEVEOworI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9MSUJYWFNITSkgKi8KK30KKworc3RhdGljIEhSRVNVTFQgV0lOQVBJIFhsaWJfSURpcmVjdERyYXdfR2V0RGlzcGxheU1vZGUoCisJTFBESVJFQ1REUkFXIHRoaXMsTFBERFNVUkZBQ0VERVNDIGxwZGRzZmQKKykgeworCVRSQUNFKGRkcmF3LCIoJXApLT5HZXREaXNwbGF5TW9kZSglcClcbiIsdGhpcyxscGRkc2ZkKTsKKwlscGRkc2ZkLT5kd0ZsYWdzID0gRERTRF9IRUlHSFR8RERTRF9XSURUSHxERFNEX1BJVENIfEREU0RfQkFDS0JVRkZFUkNPVU5UfEREU0RfUElYRUxGT1JNQVR8RERTRF9DQVBTOworCWxwZGRzZmQtPmR3SGVpZ2h0ID0gc2NyZWVuSGVpZ2h0OworCWxwZGRzZmQtPmR3V2lkdGggPSBzY3JlZW5XaWR0aDsKKwkvKiBQT09MRSBGSVhNRTogWGxpYiAqLworCWxwZGRzZmQtPmxQaXRjaCA9IHRoaXMtPmUuZGdhLmZiX3dpZHRoKnRoaXMtPmQuZGVwdGgvODsKKwkvKiBFTkQgRklYTUU6IFhsaWIgKi8KIAlscGRkc2ZkLT5kd0JhY2tCdWZmZXJDb3VudCA9IDE7CiAJbHBkZHNmZC0+eC5kd1JlZnJlc2hSYXRlID0gNjA7CiAJbHBkZHNmZC0+ZGRzQ2Fwcy5kd0NhcHMgPSBERFNDQVBTX1BBTEVUVEU7CkBAIC0xNTI3LDI5ICsyNjM1LDgxIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBJRGlyZWN0RHJhd19WVGFibGUgZGR2dCA9IHsKLQlJRGlyZWN0RHJhd19RdWVyeUludGVyZmFjZSwKK3N0YXRpYyBzdHJ1Y3QgSURpcmVjdERyYXdfVlRhYmxlIGRnYV9kZHZ0ID0geworCURHQV9JRGlyZWN0RHJhd19RdWVyeUludGVyZmFjZSwKIAlJRGlyZWN0RHJhd19BZGRSZWYsCi0JSURpcmVjdERyYXdfUmVsZWFzZSwKKwlER0FfSURpcmVjdERyYXdfUmVsZWFzZSwKIAkodm9pZCopNCwKIAlJRGlyZWN0RHJhd19DcmVhdGVDbGlwcGVyLAotCUlEaXJlY3REcmF3X0NyZWF0ZVBhbGV0dGUsCi0JSURpcmVjdERyYXdfQ3JlYXRlU3VyZmFjZSwKKwlER0FfSURpcmVjdERyYXdfQ3JlYXRlUGFsZXR0ZSwKKwlER0FfSURpcmVjdERyYXdfQ3JlYXRlU3VyZmFjZSwKIAlJRGlyZWN0RHJhd19EdXBsaWNhdGVTdXJmYWNlLAogCUlEaXJlY3REcmF3X0VudW1EaXNwbGF5TW9kZXMsCiAJKHZvaWQqKTEwLAogCUlEaXJlY3REcmF3X0ZsaXBUb0dESVN1cmZhY2UsCi0JSURpcmVjdERyYXdfR2V0Q2FwcywKLQlJRGlyZWN0RHJhd19HZXREaXNwbGF5TW9kZSwKKwlER0FfSURpcmVjdERyYXdfR2V0Q2FwcywKKwlER0FfSURpcmVjdERyYXdfR2V0RGlzcGxheU1vZGUsCiAJSURpcmVjdERyYXdfR2V0Rm91ckNDQ29kZXMsCiAJKHZvaWQqKTE1LAogCUlEaXJlY3REcmF3X0dldE1vbml0b3JGcmVxdWVuY3ksCiAJKHZvaWQqKTE3LAogCUlEaXJlY3REcmF3X0dldFZlcnRpY2FsQmxhbmtTdGF0dXMsCiAJKHZvaWQqKTE5LAotCUlEaXJlY3REcmF3X1Jlc3RvcmVEaXNwbGF5TW9kZSwKKwlER0FfSURpcmVjdERyYXdfUmVzdG9yZURpc3BsYXlNb2RlLAogCUlEaXJlY3REcmF3X1NldENvb3BlcmF0aXZlTGV2ZWwsCi0JSURpcmVjdERyYXdfU2V0RGlzcGxheU1vZGUsCisJREdBX0lEaXJlY3REcmF3X1NldERpc3BsYXlNb2RlLAorCUlEaXJlY3REcmF3X1dhaXRGb3JWZXJ0aWNhbEJsYW5rLAorfTsKKworc3RhdGljIHN0cnVjdCBJRGlyZWN0RHJhd19WVGFibGUgeHNobV9kZHZ0ID0geworCVhTaG1fSURpcmVjdERyYXdfUXVlcnlJbnRlcmZhY2UsCisJSURpcmVjdERyYXdfQWRkUmVmLAorCVhTaG1fSURpcmVjdERyYXdfUmVsZWFzZSwKKwkodm9pZCopNCwKKwlJRGlyZWN0RHJhd19DcmVhdGVDbGlwcGVyLAorCVhTaG1fSURpcmVjdERyYXdfQ3JlYXRlUGFsZXR0ZSwKKwlYU2htX0lEaXJlY3REcmF3X0NyZWF0ZVN1cmZhY2UsCisJSURpcmVjdERyYXdfRHVwbGljYXRlU3VyZmFjZSwKKwlJRGlyZWN0RHJhd19FbnVtRGlzcGxheU1vZGVzLAorCSh2b2lkKikxMCwKKwlJRGlyZWN0RHJhd19GbGlwVG9HRElTdXJmYWNlLAorCVhTaG1fSURpcmVjdERyYXdfR2V0Q2FwcywKKwlYU2htX0lEaXJlY3REcmF3X0dldERpc3BsYXlNb2RlLAorCUlEaXJlY3REcmF3X0dldEZvdXJDQ0NvZGVzLAorCSh2b2lkKikxNSwKKwlJRGlyZWN0RHJhd19HZXRNb25pdG9yRnJlcXVlbmN5LAorCSh2b2lkKikxNywKKwlJRGlyZWN0RHJhd19HZXRWZXJ0aWNhbEJsYW5rU3RhdHVzLAorCSh2b2lkKikxOSwKKwlYU2htX0lEaXJlY3REcmF3X1Jlc3RvcmVEaXNwbGF5TW9kZSwKKwlJRGlyZWN0RHJhd19TZXRDb29wZXJhdGl2ZUxldmVsLAorCVhTaG1fSURpcmVjdERyYXdfU2V0RGlzcGxheU1vZGUsCisJSURpcmVjdERyYXdfV2FpdEZvclZlcnRpY2FsQmxhbmssCit9OworCitzdGF0aWMgc3RydWN0IElEaXJlY3REcmF3X1ZUYWJsZSB4bGliX2RkdnQgPSB7CisJWGxpYl9JRGlyZWN0RHJhd19RdWVyeUludGVyZmFjZSwKKwlJRGlyZWN0RHJhd19BZGRSZWYsCisJWGxpYl9JRGlyZWN0RHJhd19SZWxlYXNlLAorCSh2b2lkKik0LAorCUlEaXJlY3REcmF3X0NyZWF0ZUNsaXBwZXIsCisJWGxpYl9JRGlyZWN0RHJhd19DcmVhdGVQYWxldHRlLAorCVhsaWJfSURpcmVjdERyYXdfQ3JlYXRlU3VyZmFjZSwKKwlJRGlyZWN0RHJhd19EdXBsaWNhdGVTdXJmYWNlLAorCUlEaXJlY3REcmF3X0VudW1EaXNwbGF5TW9kZXMsCisJKHZvaWQqKTEwLAorCUlEaXJlY3REcmF3X0ZsaXBUb0dESVN1cmZhY2UsCisJWGxpYl9JRGlyZWN0RHJhd19HZXRDYXBzLAorCVhsaWJfSURpcmVjdERyYXdfR2V0RGlzcGxheU1vZGUsCisJSURpcmVjdERyYXdfR2V0Rm91ckNDQ29kZXMsCisJKHZvaWQqKTE1LAorCUlEaXJlY3REcmF3X0dldE1vbml0b3JGcmVxdWVuY3ksCisJKHZvaWQqKTE3LAorCUlEaXJlY3REcmF3X0dldFZlcnRpY2FsQmxhbmtTdGF0dXMsCisJKHZvaWQqKTE5LAorCVhsaWJfSURpcmVjdERyYXdfUmVzdG9yZURpc3BsYXlNb2RlLAorCUlEaXJlY3REcmF3X1NldENvb3BlcmF0aXZlTGV2ZWwsCisJWGxpYl9JRGlyZWN0RHJhd19TZXREaXNwbGF5TW9kZSwKIAlJRGlyZWN0RHJhd19XYWl0Rm9yVmVydGljYWxCbGFuaywKIH07CiAKQEAgLTE1NjMsMzAgKzI3MjMsNzQgQEAKIAlyZXR1cm4gSURpcmVjdERyYXdfQ3JlYXRlQ2xpcHBlcigoTFBESVJFQ1REUkFXKXRoaXMseCxscGRkY2xpcCxscHVuayk7CiB9CiAKLXN0YXRpYyBIUkVTVUxUIFdJTkFQSSBJRGlyZWN0RHJhdzJfQ3JlYXRlU3VyZmFjZSgKK3N0YXRpYyBIUkVTVUxUIFdJTkFQSSBER0FfSURpcmVjdERyYXcyX0NyZWF0ZVN1cmZhY2UoCiAJTFBESVJFQ1REUkFXMiB0aGlzLExQRERTVVJGQUNFREVTQyBscGRkc2QsTFBESVJFQ1REUkFXU1VSRkFDRSAqbHBkc2YsSVVua25vd24gKmxwdW5rCiApIHsKLQlyZXR1cm4gSURpcmVjdERyYXdfQ3JlYXRlU3VyZmFjZSgoTFBESVJFQ1REUkFXKXRoaXMsbHBkZHNkLChMUERJUkVDVERSQVdTVVJGQUNFKilscGRzZixscHVuayk7CisJcmV0dXJuIERHQV9JRGlyZWN0RHJhd19DcmVhdGVTdXJmYWNlKChMUERJUkVDVERSQVcpdGhpcyxscGRkc2QsKExQRElSRUNURFJBV1NVUkZBQ0UqKWxwZHNmLGxwdW5rKTsKIH0KIAotc3RhdGljIEhSRVNVTFQgV0lOQVBJIElEaXJlY3REcmF3Ml9RdWVyeUludGVyZmFjZSgKK3N0YXRpYyBIUkVTVUxUIFdJTkFQSSBYU2htX0lEaXJlY3REcmF3Ml9DcmVhdGVTdXJmYWNlKAorCUxQRElSRUNURFJBVzIgdGhpcyxMUEREU1VSRkFDRURFU0MgbHBkZHNkLExQRElSRUNURFJBV1NVUkZBQ0UgKmxwZHNmLElVbmtub3duICpscHVuaworKSB7CisJcmV0dXJuIFhTaG1fSURpcmVjdERyYXdfQ3JlYXRlU3VyZmFjZSgoTFBESVJFQ1REUkFXKXRoaXMsbHBkZHNkLChMUERJUkVDVERSQVdTVVJGQUNFKilscGRzZixscHVuayk7Cit9CisKK3N0YXRpYyBIUkVTVUxUIFdJTkFQSSBYbGliX0lEaXJlY3REcmF3Ml9DcmVhdGVTdXJmYWNlKAorCUxQRElSRUNURFJBVzIgdGhpcyxMUEREU1VSRkFDRURFU0MgbHBkZHNkLExQRElSRUNURFJBV1NVUkZBQ0UgKmxwZHNmLElVbmtub3duICpscHVuaworKSB7CisJcmV0dXJuIFhsaWJfSURpcmVjdERyYXdfQ3JlYXRlU3VyZmFjZSgoTFBESVJFQ1REUkFXKXRoaXMsbHBkZHNkLChMUERJUkVDVERSQVdTVVJGQUNFKilscGRzZixscHVuayk7Cit9CisKK3N0YXRpYyBIUkVTVUxUIFdJTkFQSSBER0FfSURpcmVjdERyYXcyX1F1ZXJ5SW50ZXJmYWNlKAogCUxQRElSRUNURFJBVzIgdGhpcyxSRUZJSUQgcmVmaWlkLExQVk9JRCAqb2JqCiApIHsKLQlyZXR1cm4gSURpcmVjdERyYXdfUXVlcnlJbnRlcmZhY2UoKExQRElSRUNURFJBVyl0aGlzLHJlZmlpZCxvYmopOworCXJldHVybiBER0FfSURpcmVjdERyYXdfUXVlcnlJbnRlcmZhY2UoKExQRElSRUNURFJBVyl0aGlzLHJlZmlpZCxvYmopOworfQorCitzdGF0aWMgSFJFU1VMVCBXSU5BUEkgWFNobV9JRGlyZWN0RHJhdzJfUXVlcnlJbnRlcmZhY2UoCisJTFBESVJFQ1REUkFXMiB0aGlzLFJFRklJRCByZWZpaWQsTFBWT0lEICpvYmoKKykgeworCXJldHVybiBYU2htX0lEaXJlY3REcmF3X1F1ZXJ5SW50ZXJmYWNlKChMUERJUkVDVERSQVcpdGhpcyxyZWZpaWQsb2JqKTsKK30KKworc3RhdGljIEhSRVNVTFQgV0lOQVBJIFhsaWJfSURpcmVjdERyYXcyX1F1ZXJ5SW50ZXJmYWNlKAorCUxQRElSRUNURFJBVzIgdGhpcyxSRUZJSUQgcmVmaWlkLExQVk9JRCAqb2JqCispIHsKKwlyZXR1cm4gWGxpYl9JRGlyZWN0RHJhd19RdWVyeUludGVyZmFjZSgoTFBESVJFQ1REUkFXKXRoaXMscmVmaWlkLG9iaik7CiB9CiAKIHN0YXRpYyBVTE9ORyBXSU5BUEkgSURpcmVjdERyYXcyX0FkZFJlZihMUERJUkVDVERSQVcyIHRoaXMpIHsKIAlyZXR1cm4gSURpcmVjdERyYXdfQWRkUmVmKChMUERJUkVDVERSQVcpdGhpcyk7CiB9CiAKLXN0YXRpYyBVTE9ORyBXSU5BUEkgSURpcmVjdERyYXcyX1JlbGVhc2UoTFBESVJFQ1REUkFXMiB0aGlzKSB7Ci0JcmV0dXJuIElEaXJlY3REcmF3X1JlbGVhc2UoKExQRElSRUNURFJBVyl0aGlzKTsKK3N0YXRpYyBVTE9ORyBXSU5BUEkgREdBX0lEaXJlY3REcmF3Ml9SZWxlYXNlKExQRElSRUNURFJBVzIgdGhpcykgeworCXJldHVybiBER0FfSURpcmVjdERyYXdfUmVsZWFzZSgoTFBESVJFQ1REUkFXKXRoaXMpOwogfQogCi1zdGF0aWMgSFJFU1VMVCBXSU5BUEkgSURpcmVjdERyYXcyX0dldENhcHMoCitzdGF0aWMgVUxPTkcgV0lOQVBJIFhTaG1fSURpcmVjdERyYXcyX1JlbGVhc2UoTFBESVJFQ1REUkFXMiB0aGlzKSB7CisJcmV0dXJuIFhTaG1fSURpcmVjdERyYXdfUmVsZWFzZSgoTFBESVJFQ1REUkFXKXRoaXMpOworfQorCitzdGF0aWMgVUxPTkcgV0lOQVBJIFhsaWJfSURpcmVjdERyYXcyX1JlbGVhc2UoTFBESVJFQ1REUkFXMiB0aGlzKSB7CisJcmV0dXJuIFhsaWJfSURpcmVjdERyYXdfUmVsZWFzZSgoTFBESVJFQ1REUkFXKXRoaXMpOworfQorCitzdGF0aWMgSFJFU1VMVCBXSU5BUEkgREdBX0lEaXJlY3REcmF3Ml9HZXRDYXBzKAogCUxQRElSRUNURFJBVzIgdGhpcyxMUEREQ0FQUyBjYXBzMSxMUEREQ0FQUyBjYXBzMgogKSAgewotCXJldHVybiBJRGlyZWN0RHJhd19HZXRDYXBzKChMUERJUkVDVERSQVcpdGhpcyxjYXBzMSxjYXBzMik7CisJcmV0dXJuIERHQV9JRGlyZWN0RHJhd19HZXRDYXBzKChMUERJUkVDVERSQVcpdGhpcyxjYXBzMSxjYXBzMik7Cit9CisKK3N0YXRpYyBIUkVTVUxUIFdJTkFQSSBYU2htX0lEaXJlY3REcmF3Ml9HZXRDYXBzKAorCUxQRElSRUNURFJBVzIgdGhpcyxMUEREQ0FQUyBjYXBzMSxMUEREQ0FQUyBjYXBzMgorKSAgeworCXJldHVybiBYU2htX0lEaXJlY3REcmF3X0dldENhcHMoKExQRElSRUNURFJBVyl0aGlzLGNhcHMxLGNhcHMyKTsKK30KKworc3RhdGljIEhSRVNVTFQgV0lOQVBJIFhsaWJfSURpcmVjdERyYXcyX0dldENhcHMoCisJTFBESVJFQ1REUkFXMiB0aGlzLExQRERDQVBTIGNhcHMxLExQRERDQVBTIGNhcHMyCispICB7CisJcmV0dXJuIFhsaWJfSURpcmVjdERyYXdfR2V0Q2FwcygoTFBESVJFQ1REUkFXKXRoaXMsY2FwczEsY2FwczIpOwogfQogCiBzdGF0aWMgSFJFU1VMVCBXSU5BUEkgSURpcmVjdERyYXcyX1NldENvb3BlcmF0aXZlTGV2ZWwoCkBAIC0xNTk1LDI0ICsyNzk5LDUyIEBACiAJcmV0dXJuIElEaXJlY3REcmF3X1NldENvb3BlcmF0aXZlTGV2ZWwoKExQRElSRUNURFJBVyl0aGlzLGh3bmQseCk7CiB9CiAKLXN0YXRpYyBIUkVTVUxUIFdJTkFQSSBJRGlyZWN0RHJhdzJfQ3JlYXRlUGFsZXR0ZSgKK3N0YXRpYyBIUkVTVUxUIFdJTkFQSSBER0FfSURpcmVjdERyYXcyX0NyZWF0ZVBhbGV0dGUoCiAJTFBESVJFQ1REUkFXMiB0aGlzLERXT1JEIHgsTFBQQUxFVFRFRU5UUlkgcGFsZW50LExQRElSRUNURFJBV1BBTEVUVEUgKmxwZGRwYWwsTFBVTktOT1dOIGxwdW5rCiApIHsKLQlyZXR1cm4gSURpcmVjdERyYXdfQ3JlYXRlUGFsZXR0ZSgoTFBESVJFQ1REUkFXKXRoaXMseCxwYWxlbnQsbHBkZHBhbCxscHVuayk7CisJcmV0dXJuIERHQV9JRGlyZWN0RHJhd19DcmVhdGVQYWxldHRlKChMUERJUkVDVERSQVcpdGhpcyx4LHBhbGVudCxscGRkcGFsLGxwdW5rKTsKIH0KIAorc3RhdGljIEhSRVNVTFQgV0lOQVBJIFhTaG1fSURpcmVjdERyYXcyX0NyZWF0ZVBhbGV0dGUoCisJTFBESVJFQ1REUkFXMiB0aGlzLERXT1JEIHgsTFBQQUxFVFRFRU5UUlkgcGFsZW50LExQRElSRUNURFJBV1BBTEVUVEUgKmxwZGRwYWwsTFBVTktOT1dOIGxwdW5rCispIHsKKwlyZXR1cm4gWFNobV9JRGlyZWN0RHJhd19DcmVhdGVQYWxldHRlKChMUERJUkVDVERSQVcpdGhpcyx4LHBhbGVudCxscGRkcGFsLGxwdW5rKTsKK30KIAotc3RhdGljIEhSRVNVTFQgV0lOQVBJIElEaXJlY3REcmF3Ml9TZXREaXNwbGF5TW9kZSgKK3N0YXRpYyBIUkVTVUxUIFdJTkFQSSBYbGliX0lEaXJlY3REcmF3Ml9DcmVhdGVQYWxldHRlKAorCUxQRElSRUNURFJBVzIgdGhpcyxEV09SRCB4LExQUEFMRVRURUVOVFJZIHBhbGVudCxMUERJUkVDVERSQVdQQUxFVFRFICpscGRkcGFsLExQVU5LTk9XTiBscHVuaworKSB7CisJcmV0dXJuIFhsaWJfSURpcmVjdERyYXdfQ3JlYXRlUGFsZXR0ZSgoTFBESVJFQ1REUkFXKXRoaXMseCxwYWxlbnQsbHBkZHBhbCxscHVuayk7Cit9CisKK3N0YXRpYyBIUkVTVUxUIFdJTkFQSSBER0FfSURpcmVjdERyYXcyX1NldERpc3BsYXlNb2RlKAogCUxQRElSRUNURFJBVzIgdGhpcyxEV09SRCB3aWR0aCxEV09SRCBoZWlnaHQsRFdPUkQgZGVwdGgsRFdPUkQgeHgsRFdPUkQgeXkKICkgewotCVRSQUNFKGRkcmF3LCIoJXApLT4oJWxkLCVsZCwlbGQsJTA4bHgsJTA4bHgpXG4iLAotCQkgICAgICB0aGlzLCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgeHgsIHl5KTsKLQotCXJldHVybiBJRGlyZWN0RHJhd19TZXREaXNwbGF5TW9kZSgoTFBESVJFQ1REUkFXKXRoaXMsd2lkdGgsaGVpZ2h0LGRlcHRoKTsKKwlyZXR1cm4gREdBX0lEaXJlY3REcmF3X1NldERpc3BsYXlNb2RlKChMUERJUkVDVERSQVcpdGhpcyx3aWR0aCxoZWlnaHQsZGVwdGgpOwogfQogCi1zdGF0aWMgSFJFU1VMVCBXSU5BUEkgSURpcmVjdERyYXcyX1Jlc3RvcmVEaXNwbGF5TW9kZShMUERJUkVDVERSQVcyIHRoaXMpIHsKLQlyZXR1cm4gSURpcmVjdERyYXdfUmVzdG9yZURpc3BsYXlNb2RlKChMUERJUkVDVERSQVcpdGhpcyk7CitzdGF0aWMgSFJFU1VMVCBXSU5BUEkgWFNobV9JRGlyZWN0RHJhdzJfU2V0RGlzcGxheU1vZGUoCisJTFBESVJFQ1REUkFXMiB0aGlzLERXT1JEIHdpZHRoLERXT1JEIGhlaWdodCxEV09SRCBkZXB0aCxEV09SRCB4eCxEV09SRCB5eQorKSB7CisJcmV0dXJuIFhTaG1fSURpcmVjdERyYXdfU2V0RGlzcGxheU1vZGUoKExQRElSRUNURFJBVyl0aGlzLHdpZHRoLGhlaWdodCxkZXB0aCk7Cit9CisKK3N0YXRpYyBIUkVTVUxUIFdJTkFQSSBYbGliX0lEaXJlY3REcmF3Ml9TZXREaXNwbGF5TW9kZSgKKwlMUERJUkVDVERSQVcyIHRoaXMsRFdPUkQgd2lkdGgsRFdPUkQgaGVpZ2h0LERXT1JEIGRlcHRoLERXT1JEIHh4LERXT1JEIHl5CispIHsKKwlyZXR1cm4gWGxpYl9JRGlyZWN0RHJhd19TZXREaXNwbGF5TW9kZSgoTFBESVJFQ1REUkFXKXRoaXMsd2lkdGgsaGVpZ2h0LGRlcHRoKTsKK30KKworc3RhdGljIEhSRVNVTFQgV0lOQVBJIERHQV9JRGlyZWN0RHJhdzJfUmVzdG9yZURpc3BsYXlNb2RlKExQRElSRUNURFJBVzIgdGhpcykgeworCXJldHVybiBER0FfSURpcmVjdERyYXdfUmVzdG9yZURpc3BsYXlNb2RlKChMUERJUkVDVERSQVcpdGhpcyk7Cit9CisKK3N0YXRpYyBIUkVTVUxUIFdJTkFQSSBYU2htX0lEaXJlY3REcmF3Ml9SZXN0b3JlRGlzcGxheU1vZGUoTFBESVJFQ1REUkFXMiB0aGlzKSB7CisJcmV0dXJuIFhTaG1fSURpcmVjdERyYXdfUmVzdG9yZURpc3BsYXlNb2RlKChMUERJUkVDVERSQVcpdGhpcyk7Cit9CisKK3N0YXRpYyBIUkVTVUxUIFdJTkFQSSBYbGliX0lEaXJlY3REcmF3Ml9SZXN0b3JlRGlzcGxheU1vZGUoTFBESVJFQ1REUkFXMiB0aGlzKSB7CisJcmV0dXJuIFhsaWJfSURpcmVjdERyYXdfUmVzdG9yZURpc3BsYXlNb2RlKChMUERJUkVDVERSQVcpdGhpcyk7CiB9CiAKIHN0YXRpYyBIUkVTVUxUIFdJTkFQSSBJRGlyZWN0RHJhdzJfRW51bVN1cmZhY2VzKApAQCAtMTYyOCwyMCArMjg2MCw0MyBAQAogCXJldHVybiBJRGlyZWN0RHJhd19FbnVtRGlzcGxheU1vZGVzKChMUERJUkVDVERSQVcpdGhpcyxkd0ZsYWdzLGxwZGRzZmQsY29udGV4dCxtb2Rlc2NiKTsKIH0KIAotc3RhdGljIEhSRVNVTFQgV0lOQVBJIElEaXJlY3REcmF3Ml9HZXREaXNwbGF5TW9kZSgKK3N0YXRpYyBIUkVTVUxUIFdJTkFQSSBER0FfSURpcmVjdERyYXcyX0dldERpc3BsYXlNb2RlKAogCUxQRElSRUNURFJBVzIgdGhpcyxMUEREU1VSRkFDRURFU0MgbHBkZHNmZAogKSB7Ci0JcmV0dXJuIElEaXJlY3REcmF3X0dldERpc3BsYXlNb2RlKChMUERJUkVDVERSQVcpdGhpcyxscGRkc2ZkKTsKKwlyZXR1cm4gREdBX0lEaXJlY3REcmF3X0dldERpc3BsYXlNb2RlKChMUERJUkVDVERSQVcpdGhpcyxscGRkc2ZkKTsKIH0KIAotc3RhdGljIEhSRVNVTFQgV0lOQVBJIElEaXJlY3REcmF3Ml9HZXRBdmFpbGFibGVWaWRNZW0oCitzdGF0aWMgSFJFU1VMVCBXSU5BUEkgWFNobV9JRGlyZWN0RHJhdzJfR2V0RGlzcGxheU1vZGUoCisJTFBESVJFQ1REUkFXMiB0aGlzLExQRERTVVJGQUNFREVTQyBscGRkc2ZkCispIHsKKwlyZXR1cm4gWFNobV9JRGlyZWN0RHJhd19HZXREaXNwbGF5TW9kZSgoTFBESVJFQ1REUkFXKXRoaXMsbHBkZHNmZCk7Cit9CisKK3N0YXRpYyBIUkVTVUxUIFdJTkFQSSBYbGliX0lEaXJlY3REcmF3Ml9HZXREaXNwbGF5TW9kZSgKKwlMUERJUkVDVERSQVcyIHRoaXMsTFBERFNVUkZBQ0VERVNDIGxwZGRzZmQKKykgeworCXJldHVybiBYbGliX0lEaXJlY3REcmF3X0dldERpc3BsYXlNb2RlKChMUERJUkVDVERSQVcpdGhpcyxscGRkc2ZkKTsKK30KKworc3RhdGljIEhSRVNVTFQgV0lOQVBJIERHQV9JRGlyZWN0RHJhdzJfR2V0QXZhaWxhYmxlVmlkTWVtKAogCUxQRElSRUNURFJBVzIgdGhpcyxMUEREU0NBUFMgZGRzY2FwcyxMUERXT1JEIHRvdGFsLExQRFdPUkQgZnJlZQogKSB7CiAJVFJBQ0UoZGRyYXcsIiglcCktPiglcCwlcCwlcClcbiIsCiAJCXRoaXMsZGRzY2Fwcyx0b3RhbCxmcmVlCiAJKTsKLQlpZiAodG90YWwpICp0b3RhbCA9IHRoaXMtPmQuZmJfbWVtc2l6ZSAqIDEwMjQ7Ci0JaWYgKGZyZWUpICpmcmVlID0gdGhpcy0+ZC5mYl9tZW1zaXplICogMTAyNDsKKwlpZiAodG90YWwpICp0b3RhbCA9IHRoaXMtPmUuZGdhLmZiX21lbXNpemUgKiAxMDI0OworCWlmIChmcmVlKSAqZnJlZSA9IHRoaXMtPmUuZGdhLmZiX21lbXNpemUgKiAxMDI0OworCXJldHVybiAwOworfQorCitzdGF0aWMgSFJFU1VMVCBXSU5BUEkgWGxpYl9JRGlyZWN0RHJhdzJfR2V0QXZhaWxhYmxlVmlkTWVtKAorCUxQRElSRUNURFJBVzIgdGhpcyxMUEREU0NBUFMgZGRzY2FwcyxMUERXT1JEIHRvdGFsLExQRFdPUkQgZnJlZQorKSB7CisJVFJBQ0UoZGRyYXcsIiglcCktPiglcCwlcCwlcClcbiIsCisJCXRoaXMsZGRzY2Fwcyx0b3RhbCxmcmVlCisJKTsKKwlpZiAodG90YWwpICp0b3RhbCA9IDIwNDggKiAxMDI0OworCWlmIChmcmVlKSAqZnJlZSA9IDIwNDggKiAxMDI0OwogCXJldHVybiAwOwogfQogCkBAIC0xNjYzLDYyICsyOTE4LDEwOCBAQAogCXJldHVybiBJRGlyZWN0RHJhd19XYWl0Rm9yVmVydGljYWxCbGFuaygoTFBESVJFQ1REUkFXKXRoaXMseCxoKTsKIH0KIAotc3RhdGljIElEaXJlY3REcmF3Ml9WVGFibGUgZGQydnQgPSB7Ci0JSURpcmVjdERyYXcyX1F1ZXJ5SW50ZXJmYWNlLAorc3RhdGljIElEaXJlY3REcmF3Ml9WVGFibGUgZGdhX2RkMnZ0ID0geworCURHQV9JRGlyZWN0RHJhdzJfUXVlcnlJbnRlcmZhY2UsCiAJSURpcmVjdERyYXcyX0FkZFJlZiwKLQlJRGlyZWN0RHJhdzJfUmVsZWFzZSwKKwlER0FfSURpcmVjdERyYXcyX1JlbGVhc2UsCiAJKHZvaWQqKTQsCiAJSURpcmVjdERyYXcyX0NyZWF0ZUNsaXBwZXIsCi0JSURpcmVjdERyYXcyX0NyZWF0ZVBhbGV0dGUsCi0JSURpcmVjdERyYXcyX0NyZWF0ZVN1cmZhY2UsCisJREdBX0lEaXJlY3REcmF3Ml9DcmVhdGVQYWxldHRlLAorCURHQV9JRGlyZWN0RHJhdzJfQ3JlYXRlU3VyZmFjZSwKIAkodm9pZCopOCwKIAlJRGlyZWN0RHJhdzJfRW51bURpc3BsYXlNb2RlcywKIAlJRGlyZWN0RHJhdzJfRW51bVN1cmZhY2VzLAogCSh2b2lkKikxMSwKLQlJRGlyZWN0RHJhdzJfR2V0Q2FwcywKLQlJRGlyZWN0RHJhdzJfR2V0RGlzcGxheU1vZGUsCisJREdBX0lEaXJlY3REcmF3Ml9HZXRDYXBzLAorCURHQV9JRGlyZWN0RHJhdzJfR2V0RGlzcGxheU1vZGUsCiAJKHZvaWQqKTE0LAogCSh2b2lkKikxNSwKIAlJRGlyZWN0RHJhdzJfR2V0TW9uaXRvckZyZXF1ZW5jeSwKIAkodm9pZCopMTcsCiAJSURpcmVjdERyYXcyX0dldFZlcnRpY2FsQmxhbmtTdGF0dXMsCiAJKHZvaWQqKTE5LAotCUlEaXJlY3REcmF3Ml9SZXN0b3JlRGlzcGxheU1vZGUsCisJREdBX0lEaXJlY3REcmF3Ml9SZXN0b3JlRGlzcGxheU1vZGUsCiAJSURpcmVjdERyYXcyX1NldENvb3BlcmF0aXZlTGV2ZWwsCi0JSURpcmVjdERyYXcyX1NldERpc3BsYXlNb2RlLAorCURHQV9JRGlyZWN0RHJhdzJfU2V0RGlzcGxheU1vZGUsCiAJSURpcmVjdERyYXcyX1dhaXRGb3JWZXJ0aWNhbEJsYW5rLAotCUlEaXJlY3REcmF3Ml9HZXRBdmFpbGFibGVWaWRNZW0KLQkKKwlER0FfSURpcmVjdERyYXcyX0dldEF2YWlsYWJsZVZpZE1lbQorfTsKKworc3RhdGljIElEaXJlY3REcmF3Ml9WVGFibGUgeHNobV9kZDJ2dCA9IHsKKwlYU2htX0lEaXJlY3REcmF3Ml9RdWVyeUludGVyZmFjZSwKKwlJRGlyZWN0RHJhdzJfQWRkUmVmLAorCVhTaG1fSURpcmVjdERyYXcyX1JlbGVhc2UsCisJKHZvaWQqKTQsCisJSURpcmVjdERyYXcyX0NyZWF0ZUNsaXBwZXIsCisJWFNobV9JRGlyZWN0RHJhdzJfQ3JlYXRlUGFsZXR0ZSwKKwlYU2htX0lEaXJlY3REcmF3Ml9DcmVhdGVTdXJmYWNlLAorCSh2b2lkKik4LAorCUlEaXJlY3REcmF3Ml9FbnVtRGlzcGxheU1vZGVzLAorCUlEaXJlY3REcmF3Ml9FbnVtU3VyZmFjZXMsCisJKHZvaWQqKTExLAorCVhTaG1fSURpcmVjdERyYXcyX0dldENhcHMsCisJWFNobV9JRGlyZWN0RHJhdzJfR2V0RGlzcGxheU1vZGUsCisJKHZvaWQqKTE0LAorCSh2b2lkKikxNSwKKwlJRGlyZWN0RHJhdzJfR2V0TW9uaXRvckZyZXF1ZW5jeSwKKwkodm9pZCopMTcsCisJSURpcmVjdERyYXcyX0dldFZlcnRpY2FsQmxhbmtTdGF0dXMsCisJKHZvaWQqKTE5LAorCVhTaG1fSURpcmVjdERyYXcyX1Jlc3RvcmVEaXNwbGF5TW9kZSwKKwlJRGlyZWN0RHJhdzJfU2V0Q29vcGVyYXRpdmVMZXZlbCwKKwlYU2htX0lEaXJlY3REcmF3Ml9TZXREaXNwbGF5TW9kZSwKKwlJRGlyZWN0RHJhdzJfV2FpdEZvclZlcnRpY2FsQmxhbmssCisJWGxpYl9JRGlyZWN0RHJhdzJfR2V0QXZhaWxhYmxlVmlkTWVtCit9OworCitzdGF0aWMgc3RydWN0IElEaXJlY3REcmF3Ml9WVGFibGUgeGxpYl9kZDJ2dCA9IHsKKwlYbGliX0lEaXJlY3REcmF3Ml9RdWVyeUludGVyZmFjZSwKKwlJRGlyZWN0RHJhdzJfQWRkUmVmLAorCVhsaWJfSURpcmVjdERyYXcyX1JlbGVhc2UsCisJKHZvaWQqKTQsCisJSURpcmVjdERyYXcyX0NyZWF0ZUNsaXBwZXIsCisJWGxpYl9JRGlyZWN0RHJhdzJfQ3JlYXRlUGFsZXR0ZSwKKwlYbGliX0lEaXJlY3REcmF3Ml9DcmVhdGVTdXJmYWNlLAorCSh2b2lkKik4LAorCUlEaXJlY3REcmF3Ml9FbnVtRGlzcGxheU1vZGVzLAorCUlEaXJlY3REcmF3Ml9FbnVtU3VyZmFjZXMsCisJKHZvaWQqKTExLAorCVhsaWJfSURpcmVjdERyYXcyX0dldENhcHMsCisJWGxpYl9JRGlyZWN0RHJhdzJfR2V0RGlzcGxheU1vZGUsCisJKHZvaWQqKTE0LAorCSh2b2lkKikxNSwKKwlJRGlyZWN0RHJhdzJfR2V0TW9uaXRvckZyZXF1ZW5jeSwKKwkodm9pZCopMTcsCisJSURpcmVjdERyYXcyX0dldFZlcnRpY2FsQmxhbmtTdGF0dXMsCisJKHZvaWQqKTE5LAorCVhsaWJfSURpcmVjdERyYXcyX1Jlc3RvcmVEaXNwbGF5TW9kZSwKKwlJRGlyZWN0RHJhdzJfU2V0Q29vcGVyYXRpdmVMZXZlbCwKKwlYbGliX0lEaXJlY3REcmF3Ml9TZXREaXNwbGF5TW9kZSwKKwlJRGlyZWN0RHJhdzJfV2FpdEZvclZlcnRpY2FsQmxhbmssCisJWGxpYl9JRGlyZWN0RHJhdzJfR2V0QXZhaWxhYmxlVmlkTWVtCQogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogCQkJCURpcmVjdERyYXdDcmVhdGUKICAqLwogCi1IUkVTVUxUIFdJTkFQSSBEaXJlY3REcmF3Q3JlYXRlKCBMUEdVSUQgbHBHVUlELCBMUERJUkVDVERSQVcgKmxwbHBERCwgTFBVTktOT1dOIHBVbmtPdXRlciApIHsKLQotCWNoYXIJeGNsc2lkWzUwXTsKLQlpbnQJbWVtc2l6ZSxiYW5rc2l6ZSx3aWR0aCxldmJhc2UsZXZyZXQsbWFqb3IsbWlub3IsZmxhZ3MsaGVpZ2h0OworSFJFU1VMVCBXSU5BUEkgREdBX0RpcmVjdERyYXdDcmVhdGUoIExQRElSRUNURFJBVyAqbHBscERELCBMUFVOS05PV04gcFVua091dGVyKSB7CisjaWZkZWYgSEFWRV9MSUJYWEY4NkRHQQorCWludAltZW1zaXplLGJhbmtzaXplLHdpZHRoLG1ham9yLG1pbm9yLGZsYWdzLGhlaWdodDsKIAljaGFyCSphZGRyOwogCi0JaWYgKGxwR1VJRCkKLQkJV0lORV9TdHJpbmdGcm9tQ0xTSUQobHBHVUlELHhjbHNpZCk7Ci0JZWxzZQotCQlzdHJjcHkoeGNsc2lkLCI8bnVsbD4iKTsKLQotCVRSQUNFKGRkcmF3LCIoJXMsJXAsJXApXG4iLHhjbHNpZCxscGxwREQscFVua091dGVyKTsKLQlpZiAoZ2V0dWlkKCkpIHsKKwlpZiAoZ2V0dWlkKCkgIT0gMCkgewogCQlNU0coIk11c3QgYmUgcm9vdCB0byB1c2UgWEY4NkRHQSFcbiIpOwogCQlNZXNzYWdlQm94MzJBKDAsIlVzaW5nIHRoZSBYRjg2REdBIGV4dGVuc2lvbiByZXF1aXJlcyB0aGUgcHJvZ3JhbSB0byBiZSBydW4gdXNpbmcgVUlEIDAuIiwiV0lORSBEaXJlY3REcmF3IixNQl9PS3xNQl9JQ09OU1RPUCk7CiAJCXJldHVybiBFX1VORVhQRUNURUQ7CiAJfQotCSpscGxwREQgPSAoTFBESVJFQ1REUkFXKUhlYXBBbGxvYyhHZXRQcm9jZXNzSGVhcCgpLEhFQVBfWkVST19NRU1PUlksc2l6ZW9mKElEaXJlY3REcmF3KSk7Ci0JKCpscGxwREQpLT5scHZ0YmwgPSAmZGR2dDsKLQkoKmxwbHBERCktPnJlZiA9IDE7Ci0JaWYgKCFYRjg2REdBUXVlcnlFeHRlbnNpb24oZGlzcGxheSwmZXZiYXNlLCZldnJldCkpIHsKLQkJTVNHKCJXaW5lIERpcmVjdERyYXc6IE5vIFhGODZER0EgZGV0ZWN0ZWQuXG4iKTsKLQkJcmV0dXJuIDA7CisJaWYgKCFERFJBV19ER0FfQXZhaWxhYmxlKCkpIHsKKwkJVFJBQ0UoZGRyYXcsIk5vIFhGODZER0EgZGV0ZWN0ZWQuXG4iKTsKKwkJcmV0dXJuIERERVJSX0dFTkVSSUM7CiAJfQorCSpscGxwREQgPSAoTFBESVJFQ1REUkFXKUhlYXBBbGxvYyhHZXRQcm9jZXNzSGVhcCgpLEhFQVBfWkVST19NRU1PUlksc2l6ZW9mKElEaXJlY3REcmF3KSk7CisJKCpscGxwREQpLT5scHZ0YmwgPSAmZGdhX2RkdnQ7CisJKCpscGxwREQpLT5yZWYgPSAxOwogCVhGODZER0FRdWVyeVZlcnNpb24oZGlzcGxheSwmbWFqb3IsJm1pbm9yKTsKIAlUUkFDRShkZHJhdywiWEY4NkRHQSBpcyB2ZXJzaW9uICVkLiVkXG4iLG1ham9yLG1pbm9yKTsKIAlYRjg2REdBUXVlcnlEaXJlY3RWaWRlbyhkaXNwbGF5LERlZmF1bHRTY3JlZW4oZGlzcGxheSksJmZsYWdzKTsKQEAgLTE3MjgsMTcgKzMwMjksMTUgQEAKIAlUUkFDRShkZHJhdywidmlkZW8gZnJhbWVidWZmZXI6IGJlZ2luICVwLCB3aWR0aCAlZCxiYW5rc2l6ZSAlZCxtZW1zaXplICVkXG4iLAogCQlhZGRyLHdpZHRoLGJhbmtzaXplLG1lbXNpemUKIAkpOwotCSgqbHBscEREKS0+ZC5mYl93aWR0aCA9IHdpZHRoOwotCSgqbHBscEREKS0+ZC5mYl9hZGRyID0gYWRkcjsKLQkoKmxwbHBERCktPmQuZmJfbWVtc2l6ZSA9IG1lbXNpemU7Ci0JKCpscGxwREQpLT5kLmZiX2JhbmtzaXplID0gYmFua3NpemU7CisJKCpscGxwREQpLT5lLmRnYS5mYl93aWR0aCA9IHdpZHRoOworCSgqbHBscEREKS0+ZS5kZ2EuZmJfYWRkciA9IGFkZHI7CisJKCpscGxwREQpLT5lLmRnYS5mYl9tZW1zaXplID0gbWVtc2l6ZTsKKwkoKmxwbHBERCktPmUuZGdhLmZiX2JhbmtzaXplID0gYmFua3NpemU7CiAKIAlYRjg2REdBR2V0Vmlld1BvcnRTaXplKGRpc3BsYXksRGVmYXVsdFNjcmVlbihkaXNwbGF5KSwmd2lkdGgsJmhlaWdodCk7CiAJWEY4NkRHQVNldFZpZXdQb3J0KGRpc3BsYXksRGVmYXVsdFNjcmVlbihkaXNwbGF5KSwwLDApOwotCSgqbHBscEREKS0+ZC52cF93aWR0aCA9IHdpZHRoOwotCSgqbHBscEREKS0+ZC52cF9oZWlnaHQgPSBoZWlnaHQ7Ci0JKCpscGxwREQpLT5kLmZiX2hlaWdodCA9IHNjcmVlbkhlaWdodDsKLQkoKmxwbHBERCktPmQudnBtYXNrID0gMDsKKwkoKmxwbHBERCktPmUuZGdhLmZiX2hlaWdodCA9IHNjcmVlbkhlaWdodDsKKwkoKmxwbHBERCktPmUuZGdhLnZwbWFzayA9IDA7CiAKIAkvKiBqdXN0IGFzc3VtZSB0aGUgZGVmYXVsdCBkZXB0aCBpcyB0aGUgREdBIGRlcHRoIHRvbyAqLwogCSgqbHBscEREKS0+ZC5kZXB0aCA9IERlZmF1bHREZXB0aE9mU2NyZWVuKHNjcmVlbik7CkBAIC0xNzQ2LDExICszMDQ1LDY5IEBACiAJU0lHTkFMX0luaXRFbXVsYXRvcigpOwogI2VuZGlmCiAJcmV0dXJuIDA7CisjZWxzZSAvKiBkZWZpbmVkKEhBVkVfTElCWFhGODZER0EpICovCisJcmV0dXJuIERERVJSX0lOVkFMSURESVJFQ1REUkFXR1VJRDsKKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfTElCWFhGODZER0EpICovCiB9Ci0jZWxzZQorCitIUkVTVUxUIFdJTkFQSSBYU2htX0RpcmVjdERyYXdDcmVhdGUoIExQRElSRUNURFJBVyAqbHBscERELCBMUFVOS05PV04gcFVua091dGVyKSB7CisjaWZkZWYgSEFWRV9MSUJYWFNITQorCWlmICghRERSQVdfWFNobV9BdmFpbGFibGUoKSkgeworCQlmcHJpbnRmKHN0ZGVyciwiTm8gWFNobSBkZXRlY3RlZC5cbiIpOworCQlyZXR1cm4gRERFUlJfR0VORVJJQzsKKwl9CisJKmxwbHBERCA9IChMUERJUkVDVERSQVcpSGVhcEFsbG9jKEdldFByb2Nlc3NIZWFwKCksSEVBUF9aRVJPX01FTU9SWSxzaXplb2YoSURpcmVjdERyYXcpKTsKKwkoKmxwbHBERCktPmxwdnRibCA9ICZ4c2htX2RkdnQ7CisJKCpscGxwREQpLT5yZWYgPSAxOworCSgqbHBscEREKS0+ZS54c2htLmRyYXdhYmxlID0gMDsgLyogRklYTUU6IG1ha2UgYSB3aW5kb3cgKi8KKwkoKmxwbHBERCktPmQuZGVwdGggPSBEZWZhdWx0RGVwdGhPZlNjcmVlbihzY3JlZW4pOworCSgqbHBscEREKS0+ZC5oZWlnaHQgPSAoKmxwbHBERCktPmQud2lkdGggPSAwOyAvKiBGSVhNRSAqLworCXJldHVybiAwOworI2Vsc2UgLyogZGVmaW5lZChIQVZFX0xJQlhYU0hNKSAqLworCXJldHVybiBEREVSUl9JTlZBTElERElSRUNURFJBV0dVSUQ7CisjZW5kaWYgLyogZGVmaW5lZChIQVZFX0xJQlhYU0hNKSAqLworfQorCitIUkVTVUxUIFdJTkFQSSBYbGliX0RpcmVjdERyYXdDcmVhdGUoIExQRElSRUNURFJBVyAqbHBscERELCBMUFVOS05PV04gcFVua091dGVyKSB7CisJKmxwbHBERCA9IChMUERJUkVDVERSQVcpSGVhcEFsbG9jKEdldFByb2Nlc3NIZWFwKCksSEVBUF9aRVJPX01FTU9SWSxzaXplb2YoSURpcmVjdERyYXcpKTsKKwkoKmxwbHBERCktPmxwdnRibCA9ICZ4bGliX2RkdnQ7CisJKCpscGxwREQpLT5yZWYgPSAxOworCSgqbHBscEREKS0+ZS54c2htLmRyYXdhYmxlID0gMDsgLyogRklYTUU6IG1ha2UgYSB3aW5kb3cgKi8KKwkoKmxwbHBERCktPmQuZGVwdGggPSBEZWZhdWx0RGVwdGhPZlNjcmVlbihzY3JlZW4pOworCSgqbHBscEREKS0+ZC5oZWlnaHQgPSAoKmxwbHBERCktPmQud2lkdGggPSAwOyAvKiBGSVhNRSAqLworCXJldHVybiAwOworfQogCiBIUkVTVUxUIFdJTkFQSSBEaXJlY3REcmF3Q3JlYXRlKCBMUEdVSUQgbHBHVUlELCBMUERJUkVDVERSQVcgKmxwbHBERCwgTFBVTktOT1dOIHBVbmtPdXRlciApIHsKLQlNZXNzYWdlQm94MzJBKDAsIldJTkUgRGlyZWN0RHJhdyBuZWVkcyB0aGUgWEY4NkRHQSBleHRlbnNpb25zIGNvbXBpbGVkIGluLiAobGliWHhmODZkZ2EuYSkuIiwiV0lORSBEaXJlY3REcmF3IixNQl9PS3xNQl9JQ09OU1RPUCk7Ci0JcmV0dXJuIEVfT1VUT0ZNRU1PUlk7CisJY2hhcgl4Y2xzaWRbNTBdOworCisJaWYgKGxwR1VJRCkKKwkJV0lORV9TdHJpbmdGcm9tQ0xTSUQobHBHVUlELHhjbHNpZCk7CisJZWxzZQorCQlzdHJjcHkoeGNsc2lkLCI8bnVsbD4iKTsKKworCVRSQUNFKGRkcmF3LCIoJXMsJXAsJXApXG4iLHhjbHNpZCxscGxwREQscFVua091dGVyKTsKKworCWlmICghbHBHVUlEKSB7CisJCS8qIGlmIHRoZXkgZGlkbid0IHJlcXVlc3QgYSBwYXJ0aWN1bGFyIGludGVyZmFjZSwgdXNlIHRoZSBiZXN0CisJCSAqIHN1cHBvcnRlZCBvbmUgKi8KKwkJaWYgKEREUkFXX0RHQV9BdmFpbGFibGUoKSkgeworCQkJbHBHVUlEID0gJkRHQV9EaXJlY3REcmF3X0dVSUQ7CisJCX0gZWxzZSBpZiAoRERSQVdfWFNobV9BdmFpbGFibGUoKSkgeworCQkJbHBHVUlEID0gJlhTSE1fRGlyZWN0RHJhd19HVUlEOworCQl9IGVsc2UgeworCQkJbHBHVUlEID0gJlhMSUJfRGlyZWN0RHJhd19HVUlEOworCQl9CisJfQorCisJaWYgKCFtZW1jbXAobHBHVUlELCAmREdBX0RpcmVjdERyYXdfR1VJRCwgc2l6ZW9mKEdVSUQpKSkgeworCQlyZXR1cm4gREdBX0RpcmVjdERyYXdDcmVhdGUobHBscERELCBwVW5rT3V0ZXIpOworCX0gZWxzZSBpZiAoIW1lbWNtcChscEdVSUQsICZYU0hNX0RpcmVjdERyYXdfR1VJRCwgc2l6ZW9mKEdVSUQpKSkgeworCQlyZXR1cm4gWFNobV9EaXJlY3REcmF3Q3JlYXRlKGxwbHBERCwgcFVua091dGVyKTsKKwl9IGVsc2UgaWYgKCFtZW1jbXAobHBHVUlELCAmWExJQl9EaXJlY3REcmF3X0dVSUQsIHNpemVvZihHVUlEKSkpIHsKKwkJcmV0dXJuIFhsaWJfRGlyZWN0RHJhd0NyZWF0ZShscGxwREQsIHBVbmtPdXRlcik7CisJfQorCisJZnByaW50ZihzdGRlcnIsIkRpcmVjdERyYXdDcmVhdGUoJXMsJXAsJXApOiBkaWQgbm90IHJlY29nbml6ZSByZXF1ZXN0ZWQgR1VJRFxuIix4Y2xzaWQsbHBscERELHBVbmtPdXRlcik7CisJcmV0dXJuIERERVJSX0lOVkFMSURESVJFQ1REUkFXR1VJRDsKIH0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MvZW52LmMgYi9ncmFwaGljcy9lbnYuYwppbmRleCBjYjFmNDk4Li44MjIwYTIxIDEwMDY0NAotLS0gYS9ncmFwaGljcy9lbnYuYworKysgYi9ncmFwaGljcy9lbnYuYwpAQCAtNiwxMiArNiwxMyBAQAogICogQ29weXJpZ2h0IDE5OTcgTWFyY3VzIE1laXNzbmVyCiAgKiBDb3B5cmlnaHQgMTk5OCBBbmRyZWFzIE1vaHIKICAqLwotI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPGNvbmZpZy5oPgotI2luY2x1ZGUgPGdkaS5oPgotI2luY2x1ZGUgPGRlYnVnLmg+CisjaW5jbHVkZSAid2luZG93cy5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImdkaS5oIgorI2luY2x1ZGUgImRlYnVnLmgiCisjaW5jbHVkZSAiaGVhcC5oIgogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgIEFUT00gYXRvbTsKQEAgLTI0LDggKzI1LDkgQEAKIHsKICAgICBJTlQxNiBpOwogICAgIAotICAgIGZvciAoaSA9IDIwOyBpOyBpLS0pIHsKLSAgICAgIGlmIChFbnZUYWJsZVtpXS5hdG9tID09IGF0b20pIHJldHVybiAmRW52VGFibGVbaV07CisgICAgZm9yIChpID0gMTk7IGkgPj0gMDsgaS0tKSB7CisgICAgICBpZiAoRW52VGFibGVbaV0uYXRvbSA9PSBhdG9tKQorCXJldHVybiAmRW52VGFibGVbaV07CiAgICAgfQogICAgIHJldHVybiBOVUxMOwogfQpAQCAtNDYsMjAgKzQ4LDI2IEBACiAKIHN0YXRpYyBBVE9NIFBvcnROYW1lVG9BdG9tKExQQ1NUUiBscFBvcnROYW1lLCBCT09MMTYgYWRkKQogewotICAgIGNoYXIgUG9ydE5hbWVbMjU2XTsKLSAgICBMUENTVFIgcDsKKyAgICBjaGFyICpwOworICAgIEJPT0wzMiBuZWVkZnJlZSA9IEZBTFNFOworICAgIEFUT00gcmV0OwogCiAgICAgaWYgKGxwUG9ydE5hbWVbc3RybGVuKGxwUG9ydE5hbWUpIC0gMV0gPT0gJzonKSB7Ci0gICAgICAgIHN0cm5jcHkoUG9ydE5hbWUsIGxwUG9ydE5hbWUsIHN0cmxlbihscFBvcnROYW1lKSAtIDEpOwotICAgICAgICBwID0gUG9ydE5hbWU7CisgICAgICAgIHAgPSBIRUFQX3N0cmR1cEEoR2V0UHJvY2Vzc0hlYXAoKSwgMCwgbHBQb3J0TmFtZSk7CisgICAgICAgIHBbc3RybGVuKGxwUG9ydE5hbWUpIC0gMV0gPSAnXDAnOworICAgICAgICBuZWVkZnJlZSA9IFRSVUU7CiAgICAgfQogICAgIGVsc2UKLSAgICAgICAgcCA9IGxwUG9ydE5hbWU7CisgICAgICAgIHAgPSAoY2hhciAqKWxwUG9ydE5hbWU7CiAKICAgICBpZiAoYWRkKQotICAgICAgICByZXR1cm4gQWRkQXRvbTMyQShwKTsKKyAgICAgICAgcmV0ID0gQWRkQXRvbTMyQShwKTsKICAgICBlbHNlCi0gICAgICAgIHJldHVybiBGaW5kQXRvbTMyQShwKTsKKyAgICAgICAgcmV0ID0gIEZpbmRBdG9tMzJBKHApOworCisgICAgaWYobmVlZGZyZWUpIEhlYXBGcmVlKEdldFByb2Nlc3NIZWFwKCksIDAsIHApOworCisgICAgcmV0dXJuIHJldDsKIH0KIAogCmRpZmYgLS1naXQgYS9ncmFwaGljcy9tZXRhZmlsZWRydi9pbml0LmMgYi9ncmFwaGljcy9tZXRhZmlsZWRydi9pbml0LmMKaW5kZXggYTc4OTE1OS4uYTliNWQyZSAxMDA2NDQKLS0tIGEvZ3JhcGhpY3MvbWV0YWZpbGVkcnYvaW5pdC5jCisrKyBiL2dyYXBoaWNzL21ldGFmaWxlZHJ2L2luaXQuYwpAQCAtNDYsNiArNDYsNyBAQAogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBQb2x5UG9seWxpbmUgKi8KICAgICBNRkRSVl9Qb2x5Z29uLCAgICAgICAgICAgICAgICAgICAvKiBwUG9seWdvbiAqLwogICAgIE1GRFJWX1BvbHlsaW5lLCAgICAgICAgICAgICAgICAgIC8qIHBQb2x5bGluZSAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBQb2x5QmV6aWVyICovCiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcFJlYWxpemVQYWxldHRlICovCiAgICAgTUZEUlZfUmVjdGFuZ2xlLCAgICAgICAgICAgICAgICAgLyogcFJlY3RhbmdsZSAqLwogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBSZXN0b3JlREMgKi8KZGlmZiAtLWdpdCBhL2dyYXBoaWNzL3BhaW50aW5nLmMgYi9ncmFwaGljcy9wYWludGluZy5jCmluZGV4IDRkNzVkZGQuLjY1OWU5ZTggMTAwNjQ0Ci0tLSBhL2dyYXBoaWNzL3BhaW50aW5nLmMKKysrIGIvZ3JhcGhpY3MvcGFpbnRpbmcuYwpAQCAtNjI5LDcgKzYyOSwxMCBAQAogICAgIHRvcCAgICA9IFlMUFRPRFAoIGRjLCByYy0+dG9wICk7CiAgICAgcmlnaHQgID0gWExQVE9EUCggZGMsIHJjLT5yaWdodCApOwogICAgIGJvdHRvbSA9IFlMUFRPRFAoIGRjLCByYy0+Ym90dG9tICk7Ci0gICAgCisKKyAgICBpZihsZWZ0ID09IHJpZ2h0IHx8IHRvcCA9PSBib3R0b20pCisgICAgICAgIHJldHVybjsKKwogICAgIGhuZXdQZW4gPSBDcmVhdGVQZW4zMihQU19ET1QsIDEsIEdldFN5c0NvbG9yMzIoQ09MT1JfV0lORE9XVEVYVCkgKTsKICAgICBoT2xkUGVuID0gU2VsZWN0T2JqZWN0MzIoIGhkYywgaG5ld1BlbiApOwogICAgIG9sZERyYXdNb2RlID0gU2V0Uk9QMjMyKGhkYywgUjJfWE9SUEVOKTsKQEAgLTEwNTcsOCArMTA2MCwzMSBAQAogICovCiBCT09MMTYgV0lOQVBJIFBvbHlCZXppZXIxNiggSERDMTYgaERjLCBMUFBPSU5UMTYgbHBwdCwgSU5UMTYgY1BvaW50cyApCiB7Ci0gICAgRklYTUUoZ2RpLCAiKCV4LCVwLCVkKTogc3R1YlxuIixoRGMsbHBwdCxjUG9pbnRzKTsKLSAgICByZXR1cm4gVFJVRTsKKyAgICBpbnQgaTsKKyAgICBCT09MMTYgcmV0OworICAgIExQUE9JTlQzMiBwdDMyID0gKExQUE9JTlQzMilIZWFwQWxsb2MoIEdldFByb2Nlc3NIZWFwKCksIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1BvaW50cypzaXplb2YoUE9JTlQzMikgKTsKKyAgICBpZighcHQzMikgcmV0dXJuIEZBTFNFOworICAgIGZvciAoaT1jUG9pbnRzO2ktLTspIENPTlZfUE9JTlQxNlRPMzIoJihscHB0W2ldKSwmKHB0MzJbaV0pKTsKKyAgICByZXQ9IFBvbHlCZXppZXIzMihoRGMsIHB0MzIsIGNQb2ludHMpOworICAgIEhlYXBGcmVlKCBHZXRQcm9jZXNzSGVhcCgpLCAwLCBwdDMyICk7CisgICAgcmV0dXJuIHJldDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUG9seUJlemllclRvMTYgW0dESS41MDNdCisgKi8KK0JPT0wxNiBXSU5BUEkgUG9seUJlemllclRvMTYoIEhEQzE2IGhEYywgTFBQT0lOVDE2IGxwcHQsIElOVDE2IGNQb2ludHMgKQoreworICAgIGludCBpOworICAgIEJPT0wxNiByZXQ7CisgICAgTFBQT0lOVDMyIHB0MzIgPSAoTFBQT0lOVDMyKUhlYXBBbGxvYyggR2V0UHJvY2Vzc0hlYXAoKSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjUG9pbnRzKnNpemVvZihQT0lOVDMyKSApOworICAgIGlmKCFwdDMyKSByZXR1cm4gRkFMU0U7CisgICAgZm9yIChpPWNQb2ludHM7aS0tOykgQ09OVl9QT0lOVDE2VE8zMigmKGxwcHRbaV0pLCYocHQzMltpXSkpOworICAgIHJldD0gUG9seUJlemllclRvMzIoaERjLCBwdDMyLCBjUG9pbnRzKTsKKyAgICBIZWFwRnJlZSggR2V0UHJvY2Vzc0hlYXAoKSwgMCwgcHQzMiApOworICAgIHJldHVybiByZXQ7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTEwNzIsOSArMTA5OCw0NCBAQAogICoKICAqIFJFVFVSTlMgU1RECiAgKi8KLUJPT0wzMiBXSU5BUEkgUG9seUJlemllcjMyKCBIREMzMiBoRGMsIExQUE9JTlQzMiBscHB0LCBEV09SRCBjUG9pbnRzICkKK0JPT0wzMiBXSU5BUEkgUG9seUJlemllcjMyKCBIREMzMiBoZGMsIExQUE9JTlQzMiBscHB0LCBEV09SRCBjUG9pbnRzICkKIHsKLSAgICBGSVhNRShnZGksICIoJXgsJXAsJWxkKTogc3R1YlxuIixoRGMsbHBwdCxjUG9pbnRzKTsKLSAgICByZXR1cm4gVFJVRTsKKyAgICBEQyAqIGRjID0gRENfR2V0RENQdHIoIGhkYyApOworICAgIGlmKCFkYykgcmV0dXJuIEZBTFNFOworICAgIGlmKGRjICYmIFBBVEhfSXNQYXRoT3BlbihkYy0+dy5wYXRoKSkKKyAgICAgICAgRklYTUUoZ2RpLCAiUEFUSF9Qb2x5QmV6aWVyIGlzIG5vdCBpbXBsZW1lbnRlZCFcbiIpOworLy8gICAgICAgIGlmKCFQQVRIX1BvbHlCZXppZXIoaGRjLCB4LCB5KSkKKy8vCSAgIHJldHVybiBGQUxTRTsKKyAgICByZXR1cm4gZGMtPmZ1bmNzLT5wUG9seUJlemllciYmCisgICAgCSAgIGRjLT5mdW5jcy0+cFBvbHlCZXppZXIoZGMsIGxwcHRbMF0sIGxwcHQrMSwgY1BvaW50cy0xKTsKIH0KIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUG9seUJlemllclRvMzIgW0dESTMyLjI2OV0KKyAqIERyYXdzIG9uZSBvciBtb3JlIEJlemllciBjdXJ2ZXMKKyAqCisgKiBQQVJBTVMKKyAqICAgIGhEYyAgICAgW0ldIEhhbmRsZSB0byBkZXZpY2UgY29udGV4dAorICogICAgbHBwdCAgICBbSV0gUG9pbnRlciB0byBlbmRwb2ludHMgYW5kIGNvbnRyb2wgcG9pbnRzCisgKiAgICBjUG9pbnRzIFtJXSBDb3VudCBvZiBlbmRwb2ludHMgYW5kIGNvbnRyb2wgcG9pbnRzCisgKgorICogUkVUVVJOUyBTVEQKKyAqLworQk9PTDMyIFdJTkFQSSBQb2x5QmV6aWVyVG8zMiggSERDMzIgaGRjLCBMUFBPSU5UMzIgbHBwdCwgRFdPUkQgY1BvaW50cyApCit7CisgICAgREMgKiBkYyA9IERDX0dldERDUHRyKCBoZGMgKTsKKyAgICBQT0lOVDMyIHB0OworICAgIEJPT0wzMiByZXQ7CisgICAgaWYoIWRjKSByZXR1cm4gRkFMU0U7CisgICAgcHQueD1kYy0+dy5DdXJzUG9zWDsKKyAgICBwdC55PWRjLT53LkN1cnNQb3NZOworICAgIGlmKGRjICYmIFBBVEhfSXNQYXRoT3BlbihkYy0+dy5wYXRoKSkKKyAgICAgICAgRklYTUUoZ2RpLCAiUEFUSF9Qb2x5QmV6aWVyVG8gaXMgbm90IGltcGxlbWVudGVkIVxuIik7CisvLyAgICAgICAgaWYoIVBBVEhfUG9seUJlemllcihoZGMsIHgsIHkpKQorLy8JICAgcmV0dXJuIEZBTFNFOworICAgIHJldD0gZGMtPmZ1bmNzLT5wUG9seUJlemllciAmJgorICAgIAkgICBkYy0+ZnVuY3MtPnBQb2x5QmV6aWVyKGRjLCBwdCwgbHBwdCwgY1BvaW50cyk7CisgICAgaWYoIGRjLT5mdW5jcy0+cE1vdmVUb0V4KQorICAgIAkgICBkYy0+ZnVuY3MtPnBNb3ZlVG9FeChkYyxscHB0W2NQb2ludHNdLngsbHBwdFtjUG9pbnRzXS55LCZwdCk7CisgICAgcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2dyYXBoaWNzL3BzZHJ2L2luaXQuYyBiL2dyYXBoaWNzL3BzZHJ2L2luaXQuYwppbmRleCBlOTliNTE5Li5lNjhmNjRjIDEwMDY0NAotLS0gYS9ncmFwaGljcy9wc2Rydi9pbml0LmMKKysrIGIvZ3JhcGhpY3MvcHNkcnYvaW5pdC5jCkBAIC00OCw2ICs0OCw3IEBACiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcFBvbHlQb2x5bGluZSAqLwogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBQb2x5Z29uICovCiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcFBvbHlsaW5lICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcFBvbHlCZXppZXIgKi8KICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwUmVhbGl6ZVBhbGV0dGUgKi8KICAgICBQU0RSVl9SZWN0YW5nbGUsICAgICAgICAgICAgICAgICAvKiBwUmVjdGFuZ2xlICovCiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcFJlc3RvcmVEQyAqLwpkaWZmIC0tZ2l0IGEvZ3JhcGhpY3Mvd2luMTZkcnYvaW5pdC5jIGIvZ3JhcGhpY3Mvd2luMTZkcnYvaW5pdC5jCmluZGV4IGU3YWQwMTguLjEwZGJmNjUgMTAwNjQ0Ci0tLSBhL2dyYXBoaWNzL3dpbjE2ZHJ2L2luaXQuYworKysgYi9ncmFwaGljcy93aW4xNmRydi9pbml0LmMKQEAgLTgwLDYgKzgwLDcgQEAKICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwUG9seVBvbHlsaW5lICovCiAgICAgV0lOMTZEUlZfUG9seWdvbiwgICAgICAgICAgICAgICAgLyogcFBvbHlnb24gKi8KICAgICBXSU4xNkRSVl9Qb2x5bGluZSwgICAgICAgICAgICAgICAvKiBwUG9seWxpbmUgKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwUG9seUJlemllciAqLwogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBSZWFsaXplUGFsZXR0ZSAqLwogICAgIFdJTjE2RFJWX1JlY3RhbmdsZSwgICAgICAgICAgICAgIC8qIHBSZWN0YW5nbGUgKi8KICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwUmVzdG9yZURDICovCkBAIC0xNzUsOCArMTc2LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRlckVuYWJsZWQsIHNpemVvZihwcmludGVyRW5hYmxlZCkgKTsKICAgICBpZiAobHN0cmNtcGkzMkEocHJpbnRlckVuYWJsZWQsIm9uIikpCiAgICAgewotICAgICAgICBNU0coIldJTjE2RFJWX0NyZWF0ZURDIGRpc2FibGVkIGluIHdpbmUuY29uZiBmaWxlXG4iKTsKLQlNU0coIkVuYWJsZSBwcmludGluZyB3aXRoIFwicHJpbnRlcj1vblwiIik7CisgICAgICAgIE1TRygiUHJpbnRpbmcgZGlzYWJsZWQgaW4gd2luZS5jb25mIG9yIC53aW5lcmMgZmlsZVxuIik7CisgICAgICAgIE1TRygiVXNlIFwicHJpbnRlcj1vblwiIGluIHRoZSBcIlt3aW5lXVwiIHNlY3Rpb24gdG8gZW5hYmxlIGl0LiIpOwogICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgfQogCkBAIC0zOTgsMTQgKzM5OSwzMyBAQAogCiBIUFEgV0lOQVBJIENyZWF0ZVBRKGludCBzaXplKSAKIHsKKyNpZiAwCisgICAgSEdMT0JBTDE2IGhwcSA9IDA7CisgICAgV09SRCB0bXBfc2l6ZTsKKyAgICBMUFdPUkQgcFBROworCisgICAgdG1wX3NpemUgPSBzaXplIDw8IDI7CisgICAgaWYgKCEoaHBxID0gR2xvYmFsQWxsb2MxNihHTUVNX1NIQVJFfEdNRU1fTU9WRUFCTEUsIHRtcF9zaXplICsgOCkpKQorICAgICAgIHJldHVybiAweGZmZmY7CisgICAgcFBRID0gR2xvYmFsTG9jazE2KGhwcSk7CisgICAgKnBQUSsrID0gMDsKKyAgICAqcFBRKysgPSB0bXBfc2l6ZTsKKyAgICAqcFBRKysgPSAwOworICAgICpwUFErKyA9IDA7CisgICAgR2xvYmFsVW5sb2NrMTYoaHBxKTsKKworICAgIHJldHVybiAoSFBRKWhwcTsKKyNlbHNlCiAgICAgRklYTUUod2luMTZkcnYsICIoJWQpOiBzdHViXG4iLHNpemUpOwogICAgIHJldHVybiAxOworI2VuZGlmCiB9CisKIGludCBXSU5BUEkgRGVsZXRlUFEoSFBRIGhQUSkgCiB7Ci0gICAgRklYTUUod2luMTZkcnYsICIoJXgpOiBzdHViXG4iLCBoUFEpOwotICAgIHJldHVybiAwOworICAgIHJldHVybiBHbG9iYWxGcmVlMTYoKEhHTE9CQUwxNiloUFEpOwogfQorCiBpbnQgV0lOQVBJIEV4dHJhY3RQUShIUFEgaFBRKSAKIHsgCiAgICAgc3RydWN0IGhwcSAqcXVldWUsICpwcmV2LCAqY3VycmVudCwgKmN1cnJlbnRQcmV2OwpkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MveDExZHJ2L2NsaXBwaW5nLmMgYi9ncmFwaGljcy94MTFkcnYvY2xpcHBpbmcuYwppbmRleCA4OGIzNDU1Li5iZjVmODgwIDEwMDY0NAotLS0gYS9ncmFwaGljcy94MTFkcnYvY2xpcHBpbmcuYworKysgYi9ncmFwaGljcy94MTFkcnYvY2xpcHBpbmcuYwpAQCAtMjUsNyArMjUsOCBAQAogICAgIGlmICghb2JqKQogICAgIHsKICAgICAgICAgRVJSKHgxMWRydiwgIlJnbiBpcyAwLiBQbGVhc2UgcmVwb3J0IHRoaXMuXG4iKTsKLSAgICAgICAgZXhpdCgxKTsKKwlyZXR1cm47CisgICAgICAgIC8qZXhpdCgxKTsqLwogICAgIH0KICAgICAKICAgICBpZiAob2JqLT5yZ24tPm51bVJlY3RzID4gMCkKZGlmZiAtLWdpdCBhL2dyYXBoaWNzL3gxMWRydi9ncmFwaGljcy5jIGIvZ3JhcGhpY3MveDExZHJ2L2dyYXBoaWNzLmMKaW5kZXggMTkxMmU1NS4uMGYzODVhZCAxMDA2NDQKLS0tIGEvZ3JhcGhpY3MveDExZHJ2L2dyYXBoaWNzLmMKKysrIGIvZ3JhcGhpY3MveDExZHJ2L2dyYXBoaWNzLmMKQEAgLTM4LDcgKzM4LDcgQEAKICNpbmNsdWRlICJkZWJ1Zy5oIgogI2luY2x1ZGUgInhtYWxsb2MuaCIKIAotCisjZGVmaW5lIEFCUyh4KSAgICAoKHgpPDA/KC0oeCkpOih4KSkKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgkgICAgIFgxMURSVl9Nb3ZlVG9FeAogICovCkBAIC03OSwxNyArNzksMTYgQEAKICAqIEhlbHBlciBmdW5jdGlvbnMgZm9yIEFyYygpLCBDaG9yZCgpIGFuZCBQaWUoKS4KICAqICdsaW5lcycgaXMgdGhlIG51bWJlciBvZiBsaW5lcyB0byBkcmF3OiAwIGZvciBBcmMsIDEgZm9yIENob3JkLCAyIGZvciBQaWUuCiAgKgotICogRklYTUU6IGluY29ycmVjdCB3aXRoIHRoaWNrIHBlbiBhbmQvb3IgUFNfSU5TSURFRlJBTUUgc3R5bGUKLSAqICAgICAgICBzZWUgZWxsaXBzZSBhbmQgcmVjdGFuZ2xlIGZ1bmN0aW9ucwogICovCiBzdGF0aWMgQk9PTDMyCiBYMTFEUlZfRHJhd0FyYyggREMgKmRjLCBJTlQzMiBsZWZ0LCBJTlQzMiB0b3AsIElOVDMyIHJpZ2h0LAogICAgICAgICAgICAgICAgIElOVDMyIGJvdHRvbSwgSU5UMzIgeHN0YXJ0LCBJTlQzMiB5c3RhcnQsCiAgICAgICAgICAgICAgICAgSU5UMzIgeGVuZCwgSU5UMzIgeWVuZCwgSU5UMzIgbGluZXMgKQogewotICAgIElOVDMyIHhjZW50ZXIsIHljZW50ZXIsIGlzdGFydF9hbmdsZSwgaWRpZmZfYW5nbGUsIHRtcDsKKyAgICBJTlQzMiB4Y2VudGVyLCB5Y2VudGVyLCBpc3RhcnRfYW5nbGUsIGlkaWZmX2FuZ2xlOworICAgIElOVDMyIHdpZHRoLCBvbGR3aWR0aCwgb2xkZW5kY2FwOwogICAgIGRvdWJsZSBzdGFydF9hbmdsZSwgZW5kX2FuZ2xlOwotICAgIFhQb2ludCBwb2ludHNbM107CisgICAgWFBvaW50IHBvaW50c1s0XTsKIAogICAgIGxlZnQgICA9IFhMUFRPRFAoIGRjLCBsZWZ0ICk7CiAgICAgdG9wICAgID0gWUxQVE9EUCggZGMsIHRvcCApOwpAQCAtMTAwLDEwICs5OSwyOSBAQAogICAgIHhlbmQgICA9IFhMUFRPRFAoIGRjLCB4ZW5kICk7CiAgICAgeWVuZCAgID0gWUxQVE9EUCggZGMsIHllbmQgKTsKIAotICAgIGlmICgobGVmdCA9PSByaWdodCkgfHwgKHRvcCA9PSBib3R0b20pKSByZXR1cm4gVFJVRTsKKyAgICBpZiAocmlnaHQgPCBsZWZ0KSB7IElOVDMyIHRtcCA9IHJpZ2h0OyByaWdodCA9IGxlZnQ7IGxlZnQgPSB0bXA7IH0KKyAgICBpZiAoYm90dG9tIDwgdG9wKSB7IElOVDMyIHRtcCA9IGJvdHRvbTsgYm90dG9tID0gdG9wOyB0b3AgPSB0bXA7IH0KKyAgICBpZiAoKGxlZnQgPT0gcmlnaHQpIHx8ICh0b3AgPT0gYm90dG9tKQorICAgICAgICAgICAgfHwobGluZXMgJiYgKChyaWdodC1sZWZ0PT0xKXx8KGJvdHRvbS10b3A9PTEpKSkpIHJldHVybiBUUlVFOwogCi0gICAgaWYgKGxlZnQgPiByaWdodCkgeyB0bXA9bGVmdDsgbGVmdD1yaWdodDsgcmlnaHQ9dG1wOyB9Ci0gICAgaWYgKHRvcCA+IGJvdHRvbSkgeyB0bXA9dG9wOyB0b3A9Ym90dG9tOyBib3R0b209dG1wOyB9IAorICAgIG9sZHdpZHRoID0gd2lkdGggPSBkYy0+dS54LnBlbi53aWR0aDsKKyAgICBvbGRlbmRjYXA9IGRjLT51LngucGVuLmVuZGNhcDsKKyAgICBpZiAoIXdpZHRoKSB3aWR0aCA9IDE7CisgICAgaWYoZGMtPnUueC5wZW4uc3R5bGUgPT0gUFNfTlVMTCkgd2lkdGggPSAwOworCisgICAgaWYgKChkYy0+dS54LnBlbi5zdHlsZSA9PSBQU19JTlNJREVGUkFNRSkpCisgICAgeworICAgICAgICBpZiAoMip3aWR0aCA+IChyaWdodC1sZWZ0KSkgd2lkdGg9KHJpZ2h0LWxlZnQgKyAxKS8yOworICAgICAgICBpZiAoMip3aWR0aCA+IChib3R0b20tdG9wKSkgd2lkdGg9KGJvdHRvbS10b3AgKyAxKS8yOworICAgICAgICBsZWZ0ICAgKz0gd2lkdGggLyAyOworICAgICAgICByaWdodCAgLT0gKHdpZHRoIC0gMSkgLyAyOworICAgICAgICB0b3AgICAgKz0gd2lkdGggLyAyOworICAgICAgICBib3R0b20gLT0gKHdpZHRoIC0gMSkgLyAyOworICAgIH0KKyAgICBpZih3aWR0aCA9PSAwKSB3aWR0aD0xOyAvKiBtb3JlIGFjY3VyYXRlICovCisgICAgZGMtPnUueC5wZW4ud2lkdGg9d2lkdGg7CisgICAgZGMtPnUueC5wZW4uZW5kY2FwPVBTX0VORENBUF9TUVVBUkU7CisKICAgICB4Y2VudGVyID0gKHJpZ2h0ICsgbGVmdCkgLyAyOwogICAgIHljZW50ZXIgPSAoYm90dG9tICsgdG9wKSAvIDI7CiAgICAgc3RhcnRfYW5nbGUgPSBhdGFuMiggKGRvdWJsZSkoeWNlbnRlci15c3RhcnQpKihyaWdodC1sZWZ0KSwKQEAgLTEyMSwxNCArMTM5LDEzIEBACiAgICAgZWxzZQogICAgICAgaWYgKChlbmRfYW5nbGUgPT0gUEkpJiYoIHN0YXJ0X2FuZ2xlIDwwKSkKIAllbmRfYW5nbGUgPSAtIFBJOwotICAgIGlzdGFydF9hbmdsZSA9IChJTlQzMikoc3RhcnRfYW5nbGUgKiAxODAgKiA2NCAvIFBJKTsKLSAgICBpZGlmZl9hbmdsZSAgPSAoSU5UMzIpKChlbmRfYW5nbGUgLSBzdGFydF9hbmdsZSkgKiAxODAgKiA2NCAvIFBJICk7CisgICAgaXN0YXJ0X2FuZ2xlID0gKElOVDMyKShzdGFydF9hbmdsZSAqIDE4MCAqIDY0IC8gUEkgKyAwLjUpOworICAgIGlkaWZmX2FuZ2xlICA9IChJTlQzMikoKGVuZF9hbmdsZSAtIHN0YXJ0X2FuZ2xlKSAqIDE4MCAqIDY0IC8gUEkgKyAwLjUpOwogICAgIGlmIChpZGlmZl9hbmdsZSA8PSAwKSBpZGlmZl9hbmdsZSArPSAzNjAgKiA2NDsKIAogICAgICAgLyogRmlsbCBhcmMgd2l0aCBicnVzaCBpZiBDaG9yZCgpIG9yIFBpZSgpICovCiAKLSAgICBpZiAoKGxpbmVzID4gMCkgJiYgRENfU2V0dXBHQ0ZvckJydXNoKCBkYyApKQotICAgIHsKKyAgICBpZiAoKGxpbmVzID4gMCkgJiYgRENfU2V0dXBHQ0ZvckJydXNoKCBkYyApKSB7CiAgICAgICAgIFRTWFNldEFyY01vZGUoIGRpc3BsYXksIGRjLT51LnguZ2MsIChsaW5lcz09MSkgPyBBcmNDaG9yZCA6IEFyY1BpZVNsaWNlKTsKICAgICAgICAgVFNYRmlsbEFyYyggZGlzcGxheSwgZGMtPnUueC5kcmF3YWJsZSwgZGMtPnUueC5nYywKICAgICAgICAgICAgICAgICAgZGMtPncuRENPcmdYICsgbGVmdCwgZGMtPncuRENPcmdZICsgdG9wLApAQCAtMTM3LDI0ICsxNTQsNjkgQEAKIAogICAgICAgLyogRHJhdyBhcmMgYW5kIGxpbmVzICovCiAKLSAgICBpZiAoIURDX1NldHVwR0NGb3JQZW4oIGRjICkpIHJldHVybiBUUlVFOworICAgIGlmIChEQ19TZXR1cEdDRm9yUGVuKCBkYyApKXsKICAgICBUU1hEcmF3QXJjKCBkaXNwbGF5LCBkYy0+dS54LmRyYXdhYmxlLCBkYy0+dS54LmdjLAogCSAgICAgIGRjLT53LkRDT3JnWCArIGxlZnQsIGRjLT53LkRDT3JnWSArIHRvcCwKIAkgICAgICByaWdodC1sZWZ0LTEsIGJvdHRvbS10b3AtMSwgaXN0YXJ0X2FuZ2xlLCBpZGlmZl9hbmdsZSApOwotICAgIGlmICghbGluZXMpIHJldHVybiBUUlVFOwotCi0gICAgcG9pbnRzWzBdLnggPSBkYy0+dy5EQ09yZ1ggKyB4Y2VudGVyICsgKGludCkoY29zKHN0YXJ0X2FuZ2xlKSAqIChyaWdodC1sZWZ0KSAvIDIpOwotICAgIHBvaW50c1swXS55ID0gZGMtPncuRENPcmdZICsgeWNlbnRlciAtIChpbnQpKHNpbihzdGFydF9hbmdsZSkgKiAoYm90dG9tLXRvcCkgLyAyKTsKLSAgICBwb2ludHNbMV0ueCA9IGRjLT53LkRDT3JnWCArIHhjZW50ZXIgKyAoaW50KShjb3MoZW5kX2FuZ2xlKSAqIChyaWdodC1sZWZ0KSAvIDIpOwotICAgIHBvaW50c1sxXS55ID0gZGMtPncuRENPcmdZICsgeWNlbnRlciAtIChpbnQpKHNpbihlbmRfYW5nbGUpICogKGJvdHRvbS10b3ApIC8gMik7Ci0gICAgaWYgKGxpbmVzID09IDIpCi0gICAgewotCXBvaW50c1syXSA9IHBvaW50c1sxXTsKKyAgICAgICAgaWYgKGxpbmVzKSB7CisgICAgICAgICAgICAvKiB1c2UgdGhlIHRydW5jYXRlZCB2YWx1ZXMgKi8KKyAgICAgICAgICAgIHN0YXJ0X2FuZ2xlPShkb3VibGUpaXN0YXJ0X2FuZ2xlKlBJLzY0Li8xODAuOworICAgICAgICAgICAgZW5kX2FuZ2xlPShkb3VibGUpKGlzdGFydF9hbmdsZStpZGlmZl9hbmdsZSkqUEkvNjQuLzE4MC47CisgICAgICAgICAgICAvKiBjYWxjdWxhdGUgdGhlIGVuZHBvaW50cyBhbmQgcm91bmQgY29ycmVjdGx5ICovCisgICAgICAgICAgICBwb2ludHNbMF0ueCA9IChpbnQpIGZsb29yKGRjLT53LkRDT3JnWCArIChyaWdodCtsZWZ0KS8yLjAgKworICAgICAgICAgICAgICAgICAgICBjb3Moc3RhcnRfYW5nbGUpICogKHJpZ2h0LWxlZnQtd2lkdGgqMisyKSAvIDIuICsgMC41KTsKKyAgICAgICAgICAgIHBvaW50c1swXS55ID0gKGludCkgZmxvb3IoZGMtPncuRENPcmdZICsgKHRvcCtib3R0b20pLzIuMCAtCisgICAgICAgICAgICAgICAgICAgIHNpbihzdGFydF9hbmdsZSkgKiAoYm90dG9tLXRvcC13aWR0aCoyKzIpIC8gMi4gKyAwLjUpOworICAgICAgICAgICAgcG9pbnRzWzFdLnggPSAoaW50KSBmbG9vcihkYy0+dy5EQ09yZ1ggKyAocmlnaHQrbGVmdCkvMi4wICsKKyAgICAgICAgICAgICAgICAgICAgY29zKGVuZF9hbmdsZSkgKiAocmlnaHQtbGVmdC13aWR0aCoyKzIpIC8gMi4gKyAwLjUpOworICAgICAgICAgICAgcG9pbnRzWzFdLnkgPSAoaW50KSBmbG9vcihkYy0+dy5EQ09yZ1kgKyAodG9wK2JvdHRvbSkvMi4wIC0KKyAgICAgICAgICAgICAgICAgICAgc2luKGVuZF9hbmdsZSkgKiAoYm90dG9tLXRvcC13aWR0aCoyKzIpIC8gMi4gKyAwLjUpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIC8qIE9LIHRoaXMgc3R1ZmYgaXMgb3B0aW1pemVkIGZvciBYZnJlZTg2IAorICAgICAgICAgICAgICogd2hpY2ggaXMgcHJvYmFibHkgdGhlIG1vc3QgdXNlZCBzZXJ2ZXIgYnkKKyAgICAgICAgICAgICAqIHdpbmUgdXNlcnMuIE90aGVyIFggc2VydmVycyB3aWxsIG5vdCAKKyAgICAgICAgICAgICAqIGRpc3BsYXkgY29ycmVjdGx5LiAoZVhjZWVkIGZvciBpbnN0YW5jZSkKKyAgICAgICAgICAgICAqIHNvIGlmIHlvdSBmZWVsIHlvdSBtdXN0IGNoYW5nZSBtYWtlIHN1cmUgdGhhdAorICAgICAgICAgICAgICogeW91IGVpdGhlciB1c2UgWGZyZWU4NiBvciBzZXBlcmF0ZSB5b3VyIGNoYW5nZXMgCisgICAgICAgICAgICAgKiBmcm9tIHRoZXNlIChjb21waWxlIHN3aXRjaCBvciB3aGF0ZXZlcikKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgaWYgKGxpbmVzID09IDIpIHsKKyAgICAgICAgICAgICAgICBJTlQzMiBkeDEsZHkxOworICAgICAgICAgICAgICAgIHBvaW50c1szXSA9IHBvaW50c1sxXTsKIAlwb2ludHNbMV0ueCA9IGRjLT53LkRDT3JnWCArIHhjZW50ZXI7CiAJcG9pbnRzWzFdLnkgPSBkYy0+dy5EQ09yZ1kgKyB5Y2VudGVyOworICAgICAgICAgICAgICAgIHBvaW50c1syXSA9IHBvaW50c1sxXTsKKyAgICAgICAgICAgICAgICBkeDE9cG9pbnRzWzFdLngtcG9pbnRzWzBdLng7CisgICAgICAgICAgICAgICAgZHkxPXBvaW50c1sxXS55LXBvaW50c1swXS55OworICAgICAgICAgICAgICAgIGlmKCgodG9wLWJvdHRvbSkgfCAtMikgPT0gLTIpCisgICAgICAgICAgICAgICAgICAgIGlmKGR5MT4wKSBwb2ludHNbMV0ueS0tOworICAgICAgICAgICAgICAgIGlmKGR4MTwwKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgoKC1keDEpKjY0KTw9QUJTKGR5MSkqMzcpIHBvaW50c1swXS54LS07CisgICAgICAgICAgICAgICAgICAgIGlmKCgoLWR4MSo5KSk8KGR5MSoxNikpIHBvaW50c1swXS55LS07CisgICAgICAgICAgICAgICAgICAgIGlmKCBkeTE8MCAmJiAoKGR4MSo5KSkgPCAoZHkxKjE2KSkgcG9pbnRzWzBdLnktLTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZihkeTEgPCAwKSAgcG9pbnRzWzBdLnktLTsKKyAgICAgICAgICAgICAgICAgICAgaWYoKChyaWdodC1sZWZ0KSB8IC0yKSA9PSAtMikgcG9pbnRzWzFdLngtLTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZHgxPXBvaW50c1szXS54LXBvaW50c1syXS54OworICAgICAgICAgICAgICAgIGR5MT1wb2ludHNbM10ueS1wb2ludHNbMl0ueTsKKyAgICAgICAgICAgICAgICBpZigoKHRvcC1ib3R0b20pIHwgLTIgKSA9PSAtMikKKyAgICAgICAgICAgICAgICAgICAgaWYoZHkxIDwgMCkgcG9pbnRzWzJdLnktLTsKKyAgICAgICAgICAgICAgICBpZiggZHgxPDApeyAKKyAgICAgICAgICAgICAgICAgICAgaWYoIGR5MT4wKSBwb2ludHNbM10ueS0tOworICAgICAgICAgICAgICAgICAgICBpZigoKHJpZ2h0LWxlZnQpIHwgLTIpID09IC0yICkgcG9pbnRzWzJdLngtLTsKKyAgICAgICAgICAgICAgICB9ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHBvaW50c1szXS55LS07CisgICAgICAgICAgICAgICAgICAgIGlmKCBkeDEgKiA2NCA8IGR5MSAqIC0zNyApIHBvaW50c1szXS54LS07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGxpbmVzKys7CiAgICAgfQogICAgIFRTWERyYXdMaW5lcyggZGlzcGxheSwgZGMtPnUueC5kcmF3YWJsZSwgZGMtPnUueC5nYywKIAkgICAgICAgIHBvaW50cywgbGluZXMrMSwgQ29vcmRNb2RlT3JpZ2luICk7CisgICAgICAgIH0KKyAgICB9CisgICAgZGMtPnUueC5wZW4ud2lkdGg9b2xkd2lkdGg7CisgICAgZGMtPnUueC5wZW4uZW5kY2FwPW9sZGVuZGNhcDsKICAgICByZXR1cm4gVFJVRTsKIH0KIApAQCAtMjAxLDcgKzI2Myw2IEBACiBYMTFEUlZfRWxsaXBzZSggREMgKmRjLCBJTlQzMiBsZWZ0LCBJTlQzMiB0b3AsIElOVDMyIHJpZ2h0LCBJTlQzMiBib3R0b20gKQogewogICAgIElOVDMyIHdpZHRoLCBvbGR3aWR0aDsKLQogICAgIGxlZnQgICA9IFhMUFRPRFAoIGRjLCBsZWZ0ICk7CiAgICAgdG9wICAgID0gWUxQVE9EUCggZGMsIHRvcCApOwogICAgIHJpZ2h0ICA9IFhMUFRPRFAoIGRjLCByaWdodCApOwpAQCAtMjI0LDcgKzI4NSw3IEBACiAgICAgICAgIHRvcCAgICArPSB3aWR0aCAvIDI7CiAgICAgICAgIGJvdHRvbSAtPSAod2lkdGggLSAxKSAvIDI7CiAgICAgfQotICAgIGlmKHdpZHRoID09IDEpIHdpZHRoPTA7CisgICAgaWYod2lkdGggPT0gMCkgd2lkdGg9MTsgLyogbW9yZSBhY2N1cmF0ZSAqLwogICAgIGRjLT51LngucGVuLndpZHRoPXdpZHRoOwogCiAgICAgaWYgKERDX1NldHVwR0NGb3JCcnVzaCggZGMgKSkKQEAgLTMwNSw3ICszNjYsNyBAQAogWDExRFJWX1JvdW5kUmVjdCggREMgKmRjLCBJTlQzMiBsZWZ0LCBJTlQzMiB0b3AsIElOVDMyIHJpZ2h0LAogICAgICAgICAgICAgICAgICAgSU5UMzIgYm90dG9tLCBJTlQzMiBlbGxfd2lkdGgsIElOVDMyIGVsbF9oZWlnaHQgKQogewotICAgIElOVDMyIHdpZHRoLCBvbGR3aWR0aDsKKyAgICBJTlQzMiB3aWR0aCwgb2xkd2lkdGgsIG9sZGVuZGNhcDsKIAogICAgIFRSQUNFKGdyYXBoaWNzLCAiKCVkICVkICVkICVkICAlZCAlZFxuIiwgCiAgICAgCWxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSwgZWxsX3dpZHRoLCBlbGxfaGVpZ2h0KTsKQEAgLTMyNyw2ICszODgsNyBAQAogICAgIGlmIChib3R0b20gPCB0b3ApIHsgSU5UMzIgdG1wID0gYm90dG9tOyBib3R0b20gPSB0b3A7IHRvcCA9IHRtcDsgfQogCiAgICAgb2xkd2lkdGg9d2lkdGggPSBkYy0+dS54LnBlbi53aWR0aDsKKyAgICBvbGRlbmRjYXAgPSBkYy0+dS54LnBlbi5lbmRjYXA7CiAgICAgaWYgKCF3aWR0aCkgd2lkdGggPSAxOwogICAgIGlmKGRjLT51LngucGVuLnN0eWxlID09IFBTX05VTEwpIHdpZHRoID0gMDsKIApAQCAtMzM5LDggKzQwMSw5IEBACiAgICAgICAgIHRvcCAgICArPSB3aWR0aCAvIDI7CiAgICAgICAgIGJvdHRvbSAtPSAod2lkdGggLSAxKSAvIDI7CiAgICAgfQotICAgIGlmKHdpZHRoID09IDEpIHdpZHRoPTA7CisgICAgaWYod2lkdGggPT0gMCkgd2lkdGg9MTsKICAgICBkYy0+dS54LnBlbi53aWR0aD13aWR0aDsKKyAgICBkYy0+dS54LnBlbi5lbmRjYXA9UFNfRU5EQ0FQX1NRVUFSRTsKIAogICAgIGlmIChEQ19TZXR1cEdDRm9yQnJ1c2goIGRjICkpCiAgICAgewpAQCAtMzg2LDIzICs0NDksMzQgQEAKICAgICAgICAgaWYgKGVsbF93aWR0aCA8IHJpZ2h0IC0gbGVmdCkKICAgICAgICAgewogICAgICAgICAgICAgVFNYRmlsbFJlY3RhbmdsZSggZGlzcGxheSwgZGMtPnUueC5kcmF3YWJsZSwgZGMtPnUueC5nYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYy0+dy5EQ09yZ1ggKyBsZWZ0ICsgZWxsX3dpZHRoIC8gMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYy0+dy5EQ09yZ1kgKyB0b3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHQgLSBsZWZ0IC0gZWxsX3dpZHRoLCBlbGxfaGVpZ2h0IC8gMiApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRjLT53LkRDT3JnWCArIGxlZnQgKyAoZWxsX3dpZHRoICsgMSkgLyAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRjLT53LkRDT3JnWSArIHRvcCArIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHQgLSBsZWZ0IC0gZWxsX3dpZHRoIC0gMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZWxsX2hlaWdodCArIDEpIC8gMiAtIDEpOwogICAgICAgICAgICAgVFNYRmlsbFJlY3RhbmdsZSggZGlzcGxheSwgZGMtPnUueC5kcmF3YWJsZSwgZGMtPnUueC5nYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYy0+dy5EQ09yZ1ggKyBsZWZ0ICsgZWxsX3dpZHRoIC8gMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYy0+dy5EQ09yZ1kgKyBib3R0b20gLSAoZWxsX2hlaWdodCsxKSAvIDIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHQgLSBsZWZ0IC0gZWxsX3dpZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlbGxfaGVpZ2h0KzEpIC8gMiAtIDEgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYy0+dy5EQ09yZ1ggKyBsZWZ0ICsgKGVsbF93aWR0aCArIDEpIC8gMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYy0+dy5EQ09yZ1kgKyBib3R0b20gLSAoZWxsX2hlaWdodCkgLyAyIC0gMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByaWdodCAtIGxlZnQgLSBlbGxfd2lkdGggLSAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlbGxfaGVpZ2h0KSAvIDIgKTsKICAgICAgICAgfQogICAgICAgICBpZiAgKGVsbF9oZWlnaHQgPCBib3R0b20gLSB0b3ApCiAgICAgICAgIHsKICAgICAgICAgICAgIFRTWEZpbGxSZWN0YW5nbGUoIGRpc3BsYXksIGRjLT51LnguZHJhd2FibGUsIGRjLT51LnguZ2MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGMtPncuRENPcmdYICsgbGVmdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYy0+dy5EQ09yZ1kgKyB0b3AgKyBlbGxfaGVpZ2h0IC8gMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByaWdodCAtIGxlZnQgLSAxLCBib3R0b20gLSB0b3AgLSBlbGxfaGVpZ2h0ICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGMtPncuRENPcmdYICsgbGVmdCArIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGMtPncuRENPcmdZICsgdG9wICsgKGVsbF9oZWlnaHQgKyAxKSAvIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHQgLSBsZWZ0IC0gMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3R0b20gLSB0b3AgLSBlbGxfaGVpZ2h0IC0gMSk7CiAgICAgICAgIH0KICAgICB9CisgICAgLyogRklYTUU6IHRoaXMgY291bGQgYmUgZG9uZSB3aXRoIG9uIFggY2FsbAorICAgICAqIG1vcmUgZWZmaWNpZW50IGFuZCBwcm9iYWJseSBtb3JlIGNvcnJlY3QKKyAgICAgKiBvbiBhbnkgWCBzZXJ2ZXI6IFhEcmF3QXJjcyB3aWxsIGRyYXcKKyAgICAgKiBzdHJhaWdodCBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBsaW5lcworICAgICAqIGlmIHdpZHRoIG9yIGhlaWdodCBhcmUgemVyby4KKyAgICAgKgorICAgICAqIEJUVyB0aGlzIHN0dWZmIGlzIG9wdGltaXplZCBmb3IgYW4gWGZyZWU4NiBzZXJ2ZXIKKyAgICAgKiByZWFkIHRoZSBjb21tZW50cyBpbnNpZGUgdGhlIFgxMURSVl9EcmF3QXJjIGZ1bmN0aW9uCisgICAgICovCiAgICAgaWYgKERDX1NldHVwR0NGb3JQZW4oZGMpKSB7CiAgICAgICAgIGlmIChlbGxfd2lkdGggPiAocmlnaHQtbGVmdCkgKQogICAgICAgICAgICAgaWYgKGVsbF9oZWlnaHQgPiAoYm90dG9tLXRvcCkgKQpAQCAtNDQ0LDMxICs1MTgsMzIgQEAKIAlpZiAoZWxsX3dpZHRoIDwgcmlnaHQgLSBsZWZ0KQogCXsKIAkgICAgVFNYRHJhd0xpbmUoIGRpc3BsYXksIGRjLT51LnguZHJhd2FibGUsIGRjLT51LnguZ2MsIAotCQkgICAgICAgZGMtPncuRENPcmdYICsgbGVmdCArIGVsbF93aWR0aCAvIDIgLSAyLAorICAgICAgICAgICAgICAgZGMtPncuRENPcmdYICsgbGVmdCArIGVsbF93aWR0aCAvIDIsCiAJCSAgICAgICBkYy0+dy5EQ09yZ1kgKyB0b3AsCi0JCSAgICAgICBkYy0+dy5EQ09yZ1ggKyByaWdodCAtIGVsbF93aWR0aCAvIDIsCisgICAgICAgICAgICAgICBkYy0+dy5EQ09yZ1ggKyByaWdodCAtIChlbGxfd2lkdGgrMSkgLyAyLAogCQkgICAgICAgZGMtPncuRENPcmdZICsgdG9wKTsKIAkgICAgVFNYRHJhd0xpbmUoIGRpc3BsYXksIGRjLT51LnguZHJhd2FibGUsIGRjLT51LnguZ2MsIAotCQkgICAgICAgZGMtPncuRENPcmdYICsgbGVmdCArIGVsbF93aWR0aCAvIDIgLSAyLAorICAgICAgICAgICAgICAgZGMtPncuRENPcmdYICsgbGVmdCArIGVsbF93aWR0aCAvIDIgLAogCQkgICAgICAgZGMtPncuRENPcmdZICsgYm90dG9tIC0gMSwKLQkJICAgICAgIGRjLT53LkRDT3JnWCArIHJpZ2h0IC0gZWxsX3dpZHRoIC8gMiwKKyAgICAgICAgICAgICAgIGRjLT53LkRDT3JnWCArIHJpZ2h0IC0gKGVsbF93aWR0aCsxKS8gMiwKIAkJICAgICAgIGRjLT53LkRDT3JnWSArIGJvdHRvbSAtIDEpOwogCX0KIAlpZiAoZWxsX2hlaWdodCA8IGJvdHRvbSAtIHRvcCkKIAl7CiAJICAgIFRTWERyYXdMaW5lKCBkaXNwbGF5LCBkYy0+dS54LmRyYXdhYmxlLCBkYy0+dS54LmdjLCAKIAkJICAgICAgIGRjLT53LkRDT3JnWCArIHJpZ2h0IC0gMSwKLQkJICAgICAgIGRjLT53LkRDT3JnWSArIHRvcCArIGVsbF9oZWlnaHQgLyAyIC0gMSwKKyAgICAgICAgICAgICAgIGRjLT53LkRDT3JnWSArIHRvcCArIGVsbF9oZWlnaHQgLyAyLAogCQkgICAgICAgZGMtPncuRENPcmdYICsgcmlnaHQgLSAxLAotCQkgICAgICAgZGMtPncuRENPcmdZICsgYm90dG9tIC0gZWxsX2hlaWdodCAvIDIpOworICAgICAgICAgICAgICAgZGMtPncuRENPcmdZICsgYm90dG9tIC0gKGVsbF9oZWlnaHQrMSkgLyAyKTsKIAkgICAgVFNYRHJhd0xpbmUoIGRpc3BsYXksIGRjLT51LnguZHJhd2FibGUsIGRjLT51LnguZ2MsIAogCQkgICAgICAgZGMtPncuRENPcmdYICsgbGVmdCwKLQkJICAgICAgIGRjLT53LkRDT3JnWSArIHRvcCArIGVsbF9oZWlnaHQgLyAyIC0gMSwKKyAgICAgICAgICAgICAgIGRjLT53LkRDT3JnWSArIHRvcCArIGVsbF9oZWlnaHQgLyAyLAogCQkgICAgICAgZGMtPncuRENPcmdYICsgbGVmdCwKLQkJICAgICAgIGRjLT53LkRDT3JnWSArIGJvdHRvbSAtIGVsbF9oZWlnaHQgLyAyKTsKKyAgICAgICAgICAgICAgIGRjLT53LkRDT3JnWSArIGJvdHRvbSAtIChlbGxfaGVpZ2h0KzEpIC8gMik7CiAJfQogICAgIH0KICAgICBkYy0+dS54LnBlbi53aWR0aD1vbGR3aWR0aDsKKyAgICBkYy0+dS54LnBlbi5lbmRjYXA9b2xkZW5kY2FwOwogICAgIHJldHVybiBUUlVFOwogfQogCkBAIC01NzYsMTcgKzY1MSwyNiBAQAogICogICAgICAgICAgWDExRFJWX1BvbHlsaW5lCiAgKi8KIEJPT0wzMgotWDExRFJWX1BvbHlsaW5lKCBEQyAqZGMsIGNvbnN0IExQUE9JTlQzMiBwdCwgSU5UMzIgY291bnQgKQorWDExRFJWX1BvbHlsaW5lKCBEQyAqZGMsIExQUE9JTlQzMiBwdCwgSU5UMzIgY291bnQgKQogeworICAgIElOVDMyIG9sZHdpZHRoOwogICAgIHJlZ2lzdGVyIGludCBpOworICAgIFhQb2ludCAqcG9pbnRzOworICAgIGlmKChvbGR3aWR0aD1kYy0+dS54LnBlbi53aWR0aCk9PTApIGRjLT51LngucGVuLndpZHRoPTE7CiAKLSAgICBpZiAoRENfU2V0dXBHQ0ZvclBlbiggZGMgKSkKLQlmb3IgKGkgPSAwOyBpIDwgY291bnQtMTsgaSArKykKLQkgICAgVFNYRHJhd0xpbmUgKGRpc3BsYXksIGRjLT51LnguZHJhd2FibGUsIGRjLT51LnguZ2MsICAKLQkJICAgICAgIGRjLT53LkRDT3JnWCArIFhMUFRPRFAoZGMsIHB0IFtpXS54KSwKLQkJICAgICAgIGRjLT53LkRDT3JnWSArIFlMUFRPRFAoZGMsIHB0IFtpXS55KSwKLQkJICAgICAgIGRjLT53LkRDT3JnWCArIFhMUFRPRFAoZGMsIHB0IFtpKzFdLngpLAotCQkgICAgICAgZGMtPncuRENPcmdZICsgWUxQVE9EUChkYywgcHQgW2krMV0ueSkpOworICAgIHBvaW50cyA9IChYUG9pbnQgKikgeG1hbGxvYyAoc2l6ZW9mIChYUG9pbnQpICogKGNvdW50KSk7CisgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgeworICAgIHBvaW50c1tpXS54ID0gZGMtPncuRENPcmdYICsgWExQVE9EUCggZGMsIHB0W2ldLnggKTsKKyAgICBwb2ludHNbaV0ueSA9IGRjLT53LkRDT3JnWSArIFlMUFRPRFAoIGRjLCBwdFtpXS55ICk7CisgICAgfQorCisgICAgaWYgKERDX1NldHVwR0NGb3JQZW4gKCBkYyApKQorICAgIFRTWERyYXdMaW5lcyggZGlzcGxheSwgZGMtPnUueC5kcmF3YWJsZSwgZGMtPnUueC5nYywKKyAgICAgICAgICAgcG9pbnRzLCBjb3VudCwgQ29vcmRNb2RlT3JpZ2luICk7CisKKyAgICBmcmVlKCBwb2ludHMgKTsKKyAgICBkYy0+dS54LnBlbi53aWR0aD1vbGR3aWR0aDsKICAgICByZXR1cm4gVFJVRTsKIH0KIApAQCAtODM1LDMgKzkxOSwxODkgQEAKICAgICBMZWF2ZUNyaXRpY2FsU2VjdGlvbiggJlgxMURSVl9Dcml0U2VjdGlvbiApOwogICAgIHJldHVybiByZXN1bHQ7CiB9CisKKy8qKioqKioqKioqKioqKioqKiogV0FSTklORzogV09SSyBJTiBQUk9HUkVTUyBBSEVBRCAhISEhICoqKioqKioqKioqKioqKioKKyAqIAorICogICAqVmVyeSogc2ltcGxlIGJlemllciBkcmF3aW5nIGNvZGUsIAorICoKKyAqICAgSXQgdXNlcyBhIHJlY3Vyc2l2ZSBhbGdvcml0aG0gdG8gZGl2aWRlIHRoZSBjdXJ2ZSBpbiBhIHNlcmllcworICogICBvZiBzdHJhaWdodCBsaW5lIHNlZ2VtZW50cy4gTm90IGlkZWFsIGJ1dCBmb3IgbWUgc3VmZmljaWVudC4KKyAqICAgSWYgeW91IGFyZSBpbiBuZWVkIGZvciBzb21ldGhpbmcgYmV0dGVyIGxvb2sgZm9yIHNvbWUgaW5jcmVtZW50YWwKKyAqICAgYWxnb3JpdGhtLgorICoKKyAqICAgNyBKdWx5IDE5OTggUmVpbiBLbGF6ZXMKKyAqLworCisgLyogCisgICogc29tZSBtYWNybyBkZWZpbml0aW9ucyBmb3IgYmV6aWVyIGRyYXdpbmcKKyAgKgorICAqIHRvIGF2b2lkIHRydWNhdGlvbiBlcnJvcnMgdGhlIGNvb3JkaW5hdGVzIGFyZQorICAqIHNoaWZ0ZWQgdXB3YXJkcy4gV2hlbiB1c2VkIGluIGRyYXdpbmcgdGhleSBhcmUKKyAgKiBzaGlmdGVkIGRvd24gYWdhaW4sIGluY2x1ZGluZyBjb3JyZWN0IHJvdW5kaW5nCisgICogYW5kIGF2b2lkaW5nIGZsb2F0aW5nIHBvaW50cworICAqLworCisjZGVmaW5lIEJFWklFUlNISUZUQklUUyA0CisjZGVmaW5lIEJFWklFUlNISUZUVVAoeCkgICAgKCh4KTw8QkVaSUVSU0hJRlRCSVRTKQorI2RlZmluZSBCRVpJRVJGQUNUT1IgICAgICAgIEJFWklFUlNISUZUVVAoMSkgICAgCisjZGVmaW5lIEJFWklFUlNISUZURE9XTih4KSAgKCgoeCkrKDE8PChCRVpJRVJTSElGVEJJVFMtMSkpKT4+QkVaSUVSU0hJRlRCSVRTKQorLyogbWF4aW11bSBkZXB0aCBvZiByZWN1cnNpb24gKi8KKyNkZWZpbmUgQkVaSUVSTUFYREVQVEggIDYKKworLyogc2l6ZSBvZiBhcnJheSB0byBzdG9yZSBwb2ludHMgb24gKi8KKy8qIGVub3VnaCBmb3Igb25lIGN1cnZlICovCisjZGVmaW5lIEJFWk1BWFBPSU5UUyAgICAoKDE8PEJFWklFUk1BWERFUFRIKSsxKQorCisvKiBjYWxjdWxhdGUgQmV6aWVyIGF2ZXJhZ2UsIGluIHRoaXMgY2FzZSB0aGUgbWlkZGxlICovCisKKyNkZWZpbmUgQkVaSUVSTUlERExFKE1pZCwgUDEsIFAyKSBcCisgICAgKE1pZCkueD0oKFAxKS54KyhQMikueCkvMjtcCisgICAgKE1pZCkueT0oKFAxKS55KyhQMikueSkvMjsKKyAgICAKKy8qIGNoZWNrIHRvIHRlcm1pbmF0ZSByZWN1cnNpb24gKi8KK3N0YXRpYyBpbnQgQmV6aWVyQ2hlY2soIGludCBsZXZlbCwgUE9JTlQzMiAqUG9pbnRzKQoreyAKKyNpZiAwCisvKiB0aGlzIGNvZGUgd29ya3MsIGl0IGp1c3QgaXMgdG9vIG11Y2ggd29yayBmb3IKKyAqIHRoZSBzYXZpbmdzIHRoYXQgYXJlIGNyZWF0ZWQuIFRoaXMgc2hvdWxkIGJlIGRvbmUKKyAqIHdpdGggaW50ZWdlciBhcml0aG1ldGljIGFuZCBzaW1wbGVyLgorICovCisgICAgZG91YmxlIGh5cCwgcjEsIHIyOworICAgIC8qIGZpcnN0IGNoZWNrIHRoYXQgdGhlIGNvbnRyb2wgcG9pbnRzIGFyZSAibmVhciIgKi8KKyAgICBpZihQb2ludHNbM10ueD5Qb2ludHNbMF0ueCkKKyAgICAgICAgaWYoUG9pbnRzWzFdLnggPiBQb2ludHNbM10ueCtCRVpJRVJGQUNUT1IgfHwgCisgICAgICAgICAgICAgICAgUG9pbnRzWzFdLnggPCBQb2ludHNbMF0ueC1CRVpJRVJGQUNUT1IgfHwKKyAgICAgICAgICAgICAgICBQb2ludHNbMl0ueCA+IFBvaW50c1szXS54K0JFWklFUkZBQ1RPUiB8fCAKKyAgICAgICAgICAgICAgICBQb2ludHNbMl0ueCA8IFBvaW50c1swXS54LUJFWklFUkZBQ1RPUikKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIGVsc2UKKyAgICAgICAgaWYoUG9pbnRzWzFdLnggPCBQb2ludHNbM10ueC1CRVpJRVJGQUNUT1IgfHwgCisgICAgICAgICAgICAgICAgUG9pbnRzWzFdLnggPiBQb2ludHNbMF0ueCtCRVpJRVJGQUNUT1IgfHwKKyAgICAgICAgICAgICAgICBQb2ludHNbMl0ueCA8IFBvaW50c1szXS54LUJFWklFUkZBQ1RPUiB8fCAKKyAgICAgICAgICAgICAgICBQb2ludHNbMl0ueCA+IFBvaW50c1swXS54K0JFWklFUkZBQ1RPUikKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIGlmKFBvaW50c1szXS55PlBvaW50c1swXS55KQorICAgICAgICBpZihQb2ludHNbMV0ueSA+IFBvaW50c1szXS55K0JFWklFUkZBQ1RPUiB8fCAKKyAgICAgICAgICAgICAgICBQb2ludHNbMV0ueSA8IFBvaW50c1swXS55LUJFWklFUkZBQ1RPUiB8fAorICAgICAgICAgICAgICAgIFBvaW50c1syXS55ID4gUG9pbnRzWzNdLnkrQkVaSUVSRkFDVE9SIHx8IAorICAgICAgICAgICAgICAgIFBvaW50c1syXS55IDwgUG9pbnRzWzBdLnktQkVaSUVSRkFDVE9SKQorICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgZWxzZQorICAgICAgICBpZihQb2ludHNbMV0ueCA8IFBvaW50c1szXS54LUJFWklFUkZBQ1RPUiB8fCAKKyAgICAgICAgICAgICAgICBQb2ludHNbMV0ueCA+IFBvaW50c1swXS54K0JFWklFUkZBQ1RPUiB8fAorICAgICAgICAgICAgICAgIFBvaW50c1syXS54IDwgUG9pbnRzWzNdLngtQkVaSUVSRkFDVE9SIHx8IAorICAgICAgICAgICAgICAgIFBvaW50c1syXS54ID4gUG9pbnRzWzBdLngrQkVaSUVSRkFDVE9SKQorICAgICAgICByZXR1cm4gRkFMU0U7bworICAgICAgICAKKyAgICAvKiBjYWxjdWxhdGUgdGhlIGRpc3RhbmNlIHNxdWFyZWQgb2YgdGhlIGNvbnRyb2wgcG9pbnQgZnJvbQorICAgICAqIHRoZSBsaW5lIGZyb20gYmVnaW4gYW5kIGVuZHBvaW50CisgICAgICovCisgICAgICAgIAorICAgIGh5cD0oKGRvdWJsZSkoUG9pbnRzWzNdLngtUG9pbnRzWzBdLngpKihkb3VibGUpKFBvaW50c1szXS54LVBvaW50c1swXS54KSsKKyAgICAgICAgICAgKGRvdWJsZSkgKFBvaW50c1szXS55LVBvaW50c1swXS55KSooZG91YmxlKShQb2ludHNbM10ueS1Qb2ludHNbMF0ueSkpOworICAgIHIxPSgoZG91YmxlKShQb2ludHNbMl0ueS1Qb2ludHNbMF0ueSkqKGRvdWJsZSkoUG9pbnRzWzNdLngtUG9pbnRzWzBdLngpLQorICAgICAgICAgICAoZG91YmxlKSAoUG9pbnRzWzNdLnktUG9pbnRzWzBdLnkpKihkb3VibGUpKFBvaW50c1syXS54LVBvaW50c1swXS54KSkKKyAgICAgICAgICAgL0JFWklFUkZBQ1RPUjsKKyAgICByMj0oKGRvdWJsZSkoUG9pbnRzWzFdLnktUG9pbnRzWzBdLnkpKihkb3VibGUpKFBvaW50c1szXS54LVBvaW50c1swXS54KS0KKyAgICAgICAgICAgIChkb3VibGUpKFBvaW50c1szXS55LVBvaW50c1swXS55KSooZG91YmxlKShQb2ludHNbMV0ueC1Qb2ludHNbMF0ueCkpCisgICAgICAgICAgICAvQkVaSUVSRkFDVE9SOworICAgIHIxPXIxKnIxL2h5cDsKKyAgICByMT1yMipyMi9oeXA7CisgICAgaWYoIHIxPDEgJiYgcjIgPDEpeyAvKiBkaXN0YW5jZSBsZXNzIHRoZW4gYSBwaXhlbCAqLworLy8gICAgICAgIGZwcmludGYoc3RkZXJyLCJsZXZlbCBpcyAlZFxuIiwgbGV2ZWwpOworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisjZW5kaWYKKyAgICByZXR1cm4gRkFMU0U7CisgICAgCit9CisgICAgCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBYMTFEUlZfQmV6aWVyCisgKiAgIERyYXcgYSAtd2hhdCBtaWNyb3NvZnQgY2FsbHMtIGJlemllciBjdXJ2ZQorICogICBUaGUgcm91dGluZSByZWN1cnNpdmVseSBkZXZpZGVzIHRoZSBjdXJ2ZQorICogICBpbiB0d28gcGFydHMgdW50aWwgYSBzdHJhaWdodCBsaW5lIGNhbiBiZSBkcmF3bgorICovCitzdGF0aWMgdm9pZCBYMTFEUlZfQmV6aWVyKGludCBsZXZlbCwgREMgKiBkYywgUE9JTlQzMiAqUG9pbnRzLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgWFBvaW50KiB4cG9pbnRzLCB1bnNpZ25lZCBpbnQqIHBpeCkKK3sKKyAgICBpZigqcGl4ID09IEJFWk1BWFBPSU5UUyl7CisgICAgICAgIFRTWERyYXdMaW5lcyggZGlzcGxheSwgZGMtPnUueC5kcmF3YWJsZSwgZGMtPnUueC5nYywKKyAgICAgICAgICAgICAgICAgICAgeHBvaW50cywgKnBpeCwgQ29vcmRNb2RlT3JpZ2luICk7CisgICAgICAgICpwaXg9MDsKKyAgICB9CisgICAgaWYoIWxldmVsIHx8IEJlemllckNoZWNrKGxldmVsLCBQb2ludHMpKSB7CisgICAgICAgIGlmKCpwaXggPT0gMCl7CisgICAgICAgICAgICB4cG9pbnRzWypwaXhdLng9IGRjLT53LkRDT3JnWCArIEJFWklFUlNISUZURE9XTihQb2ludHNbMF0ueCk7CisgICAgICAgICAgICB4cG9pbnRzWypwaXhdLnk9IGRjLT53LkRDT3JnWSArIEJFWklFUlNISUZURE9XTihQb2ludHNbMF0ueSk7CisgICAgICAgICAgICAqcGl4PTE7CisgICAgICAgIH0KKyAgICAgICAgeHBvaW50c1sqcGl4XS54PSBkYy0+dy5EQ09yZ1ggKyBCRVpJRVJTSElGVERPV04oUG9pbnRzWzNdLngpOworICAgICAgICB4cG9pbnRzWypwaXhdLnk9IGRjLT53LkRDT3JnWSArIEJFWklFUlNISUZURE9XTihQb2ludHNbM10ueSk7CisgICAgICAgICgqcGl4KSArKzsKKyAgICB9IGVsc2UgeworICAgICAgICBQT0lOVDMyIFBvaW50czJbNF07IC8qIGZvciB0aGUgc2Vjb25kIHJlY3Vyc2l2ZSBjYWxsICovCisgICAgICAgIFBvaW50czJbM109UG9pbnRzWzNdOworICAgICAgICBCRVpJRVJNSURETEUoUG9pbnRzMlsyXSwgUG9pbnRzWzJdLCBQb2ludHNbM10pOworICAgICAgICBCRVpJRVJNSURETEUoUG9pbnRzMlswXSwgUG9pbnRzWzFdLCBQb2ludHNbMl0pOworICAgICAgICBCRVpJRVJNSURETEUoUG9pbnRzMlsxXSxQb2ludHMyWzBdLFBvaW50czJbMl0pOworCisgICAgICAgIEJFWklFUk1JRERMRShQb2ludHNbMV0sIFBvaW50c1swXSwgIFBvaW50c1sxXSk7CisgICAgICAgIEJFWklFUk1JRERMRShQb2ludHNbMl0sIFBvaW50c1sxXSwgUG9pbnRzMlswXSk7CisgICAgICAgIEJFWklFUk1JRERMRShQb2ludHNbM10sIFBvaW50c1syXSwgUG9pbnRzMlsxXSk7CisKKyAgICAgICAgUG9pbnRzMlswXT1Qb2ludHNbM107CisKKyAgICAgICAgLyogZG8gdGhlIHR3byBoYWx2ZXMgKi8KKyAgICAgICAgWDExRFJWX0JlemllcihsZXZlbC0xLCBkYywgUG9pbnRzLCB4cG9pbnRzLCBwaXgpOworICAgICAgICBYMTFEUlZfQmV6aWVyKGxldmVsLTEsIGRjLCBQb2ludHMyLCB4cG9pbnRzLCBwaXgpOworICAgIH0KK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgWDExRFJWX1BvbHlCZXppZXIKKyAqICAgICAgSW1wbGVtZW50IGZ1bmN0aW9uYWxpdHkgZm9yIFBvbHlCZXppZXIgYW5kIFBvbHlCZXppZXJUbworICogICAgICBjYWxscy4gCisgKiAgICAgIFtpXSBkYyBwb2ludGVyIHRvIGRldmljZSBjb250ZXh0CisgKiAgICAgIFtpXSBzdGFydCwgZmlyc3QgcG9pbnQgaW4gY3VydmUKKyAqICAgICAgW2ldIEJlemllclBvaW50cyAsIGFycmF5IG9mIHBvaW50IGZpbGxlZCB3aXRoIHJlc3Qgb2YgdGhlIHBvaW50cworICogICAgICBbaV0gY291bnQsIG51bWJlciBvZiBwb2ludHMgaW4gQmV6aWVyUG9pbnRzLCBtdXN0IGJlIGEgCisgKiAgICAgICAgICBtdWx0aXBsZSBvZiAzLgorICovCitCT09MMzIKK1gxMURSVl9Qb2x5QmV6aWVyKERDICpkYywgUE9JTlQzMiBzdGFydCwgUE9JTlQzMiAqQmV6aWVyUG9pbnRzLCBEV09SRCBjb3VudCkKK3sKKyAgICBQT0lOVDMyIFBvaW50c1s0XTsgCisgICAgaW50IGk7CisgICAgdW5zaWduZWQgaW50IGl4PTA7CisgICAgWFBvaW50KiB4cG9pbnRzOworICAgIFRSQUNFKGdyYXBoaWNzLCAiZGM9JTA0eCBjb3VudD0lbGQgJWQsJWQgLSAlZCwlZCAtICVkLCVkIC0lZCwlZCBcbiIsIAorICAgICAgICAgICAgKGludClkYywgY291bnQsCisgICAgICAgICAgICBzdGFydC54LCBzdGFydC55LAorICAgICAgICAgICAgKFBvaW50cyswKS0+eCwgKFBvaW50cyswKS0+eSwgCisgICAgICAgICAgICAoUG9pbnRzKzEpLT54LCAoUG9pbnRzKzEpLT55LCAKKyAgICAgICAgICAgIChQb2ludHMrMiktPngsIChQb2ludHMrMiktPnkpOyAKKyAgICBpZighY291bnQgfHwgY291bnQgJSAzKXsKKyAgICAgICAgV0FSTihncmFwaGljcywiIGJhZCB2YWx1ZSBmb3IgY291bnQgOiAlbGRcbiIsIGNvdW50KTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOyAvKiBwYXJhbm9pZCAqLworICAgIH0KKyAgICB4cG9pbnRzPShYUG9pbnQqKSB4bWFsbG9jKCBzaXplb2YoWFBvaW50KSpCRVpNQVhQT0lOVFMpOworICAgIFBvaW50c1szXS54PUJFWklFUlNISUZUVVAoWExQVE9EUChkYyxzdGFydC54KSk7CisgICAgUG9pbnRzWzNdLnk9QkVaSUVSU0hJRlRVUChZTFBUT0RQKGRjLHN0YXJ0LnkpKTsKKyAgICB3aGlsZShjb3VudCl7CisgICAgICAgIFBvaW50c1swXT1Qb2ludHNbM107CisgICAgICAgIGZvcihpPTE7aTw0O2krKykgeworICAgICAgICAgICAgUG9pbnRzW2ldLng9IEJFWklFUlNISUZUVVAoWExQVE9EUChkYyxCZXppZXJQb2ludHMtPngpKTsKKyAgICAgICAgICAgIFBvaW50c1tpXS55PSBCRVpJRVJTSElGVFVQKFlMUFRPRFAoZGMsQmV6aWVyUG9pbnRzLT55KSk7CisgICAgICAgICAgICBCZXppZXJQb2ludHMrKzsKKyAgICAgICAgfQorICAgICAgICBYMTFEUlZfQmV6aWVyKEJFWklFUk1BWERFUFRIICwgZGMsIFBvaW50cywgeHBvaW50cywgJml4ICk7CisgICAgICAgIGNvdW50IC09MzsKKyAgICB9CisgICAgaWYoIGl4KSBUU1hEcmF3TGluZXMoIGRpc3BsYXksIGRjLT51LnguZHJhd2FibGUsIGRjLT51LnguZ2MsCisgICAgICAgICAgICAgICAgeHBvaW50cywgaXgsIENvb3JkTW9kZU9yaWdpbiApOworLy8gICAgZnByaW50ZihzdGRlcnIsIiBpeCBpcyAlZFxuIixpeCk7CisgICAgZnJlZSh4cG9pbnRzKTsKKyAgICByZXR1cm4gVFJVRTsKK30KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKipFTkQgT0YgV09SSyBJTiBQUk9HUkVTUyAqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2dyYXBoaWNzL3gxMWRydi9pbml0LmMgYi9ncmFwaGljcy94MTFkcnYvaW5pdC5jCmluZGV4IGQ1ZjExYWEuLmNmOTFjNmQgMTAwNjQ0Ci0tLSBhL2dyYXBoaWNzL3gxMWRydi9pbml0LmMKKysrIGIvZ3JhcGhpY3MveDExZHJ2L2luaXQuYwpAQCAtNTAsNiArNTAsNyBAQAogICAgIFgxMURSVl9Qb2x5UG9seWxpbmUsICAgICAgICAgICAgIC8qIHBQb2x5UG9seWxpbmUgKi8KICAgICBYMTFEUlZfUG9seWdvbiwgICAgICAgICAgICAgICAgICAvKiBwUG9seWdvbiAqLwogICAgIFgxMURSVl9Qb2x5bGluZSwgICAgICAgICAgICAgICAgIC8qIHBQb2x5bGluZSAqLworICAgIFgxMURSVl9Qb2x5QmV6aWVyLCAgICAgICAgICAgICAgIC8qIHBQb2x5QmV6aWVyICovCiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcFJlYWxpemVQYWxldHRlICovCiAgICAgWDExRFJWX1JlY3RhbmdsZSwgICAgICAgICAgICAgICAgLyogcFJlY3RhbmdsZSAqLwogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBSZXN0b3JlREMgKi8KZGlmZiAtLWdpdCBhL2dyYXBoaWNzL3gxMWRydi90ZXh0LmMgYi9ncmFwaGljcy94MTFkcnYvdGV4dC5jCmluZGV4IGVhOGMzNjEuLjA5Yzc4YjAgMTAwNjQ0Ci0tLSBhL2dyYXBoaWNzL3gxMWRydi90ZXh0LmMKKysrIGIvZ3JhcGhpY3MveDExZHJ2L3RleHQuYwpAQCAtMjksMjUgKzI5LDI4IEBACiAgICAgICAgICAgICAgICAgICAgY29uc3QgSU5UMzIgKmxwRHggKQogewogICAgIEhSR04zMgkJaFJnbkNsaXAgPSAwOwotICAgIGludCAJCWRpciwgYXNjZW50LCBkZXNjZW50LCBpOworICAgIGludCAJICAgICAgICBpOwogICAgIGZvbnRPYmplY3QqCQlwZm87Ci0gICAgWENoYXJTdHJ1Y3QgCWluZm87CisgICAgSU5UMzIJIAl3aWR0aCwgYXNjZW50LCBkZXNjZW50LCB4d2lkdGgsIHl3aWR0aDsKICAgICBYRm9udFN0cnVjdCoJZm9udDsKICAgICBSRUNUMzIgCQlyZWN0OwogICAgIGNoYXIJCWRmQnJlYWtDaGFyLCBsZlVuZGVybGluZSwgbGZTdHJpa2VPdXQ7CisgICAgQk9PTDMyCQlyb3RhdGVkID0gRkFMU0U7CiAKICAgICBpZiAoIURDX1NldHVwR0NGb3JUZXh0KCBkYyApKSByZXR1cm4gVFJVRTsKIAogICAgIHBmbyA9IFhGT05UX0dldEZvbnRPYmplY3QoIGRjLT51LnguZm9udCApOwogICAgIGZvbnQgPSBwZm8tPmZzOwotCisgICAgIAorICAgIGlmIChwZm8tPmxmLmxmRXNjYXBlbWVudCAmJiBwZm8tPmxwWDExVHJhbnMpCisgICAgICAgIHJvdGF0ZWQgPSBUUlVFOwogICAgIGRmQnJlYWtDaGFyID0gKGNoYXIpcGZvLT5maS0+ZGYuZGZCcmVha0NoYXI7CiAgICAgbGZVbmRlcmxpbmUgPSAocGZvLT5mb19mbGFncyAmIEZPX1NZTlRIX1VOREVSTElORSkgPyAxIDogMDsKICAgICBsZlN0cmlrZU91dCA9IChwZm8tPmZvX2ZsYWdzICYgRk9fU1lOVEhfU1RSSUtFT1VUKSA/IDEgOiAwOwogCi0gICAgVFJBQ0UodGV4dCwiaGRjPSUwNHggZGY9JTA0eCAlZCwlZCAlcywgJWQgIGZsYWdzPSVkXG4iLAorICAgIFRSQUNFKHRleHQsImhkYz0lMDR4IGRmPSUwNHggJWQsJWQgJXMsICVkICBmbGFncz0lZCBscER4PSVwXG4iLAogCSAgZGMtPmhTZWxmLCAoVUlOVDE2KShkYy0+dS54LmZvbnQpLCB4LCB5LAotCSAgZGVidWdzdHJfYW4gKHN0ciwgY291bnQpLCBjb3VudCwgZmxhZ3MpOworCSAgZGVidWdzdHJfYW4gKHN0ciwgY291bnQpLCBjb3VudCwgZmxhZ3MsIGxwRHgpOwogCiAgICAgLyogc29tZSBzdHJpbmdzIHNlbnQgaGVyZSBlbmQgaW4gYSBuZXdsaW5lIGZvciB3aGF0ZXZlciByZWFzb24uICBJIGhhdmUgbm8KICAgICAgICBjbHVlIHdoYXQgdGhlIHJpZ2h0IHRyZWF0bWVudCBzaG91bGQgYmUgaW4gZ2VuZXJhbCwgYnV0IGlnbm9yaW5nCkBAIC0xMTIsMzcgKzExNSw1OCBAQAogICAgIGlmIChscER4KSAvKiBoYXZlIGV4cGxpY2l0IGNoYXJhY3RlciBjZWxsIHggb2Zmc2V0cyBpbiBsb2dpY2FsIGNvb3JkaW5hdGVzICovCiAgICAgewogCWludCBleHRyYSA9IGRjLT53bmRFeHRYIC8gMjsKLSAgICAgICAgZm9yIChpID0gaW5mby53aWR0aCA9IDA7IGkgPCBjb3VudDsgaSsrKSBpbmZvLndpZHRoICs9IGxwRHhbaV07Ci0JaW5mby53aWR0aCA9IChpbmZvLndpZHRoICogZGMtPnZwb3J0RXh0WCArIGV4dHJhICkgLyBkYy0+d25kRXh0WDsKKyAgICAgICAgZm9yIChpID0gd2lkdGggPSAwOyBpIDwgY291bnQ7IGkrKykgd2lkdGggKz0gbHBEeFtpXTsKKwl3aWR0aCA9ICh3aWR0aCAqIGRjLT52cG9ydEV4dFggKyBleHRyYSApIC8gZGMtPnduZEV4dFg7CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0JVFNYVGV4dEV4dGVudHMoIGZvbnQsIHN0ciwgY291bnQsICZkaXIsICZhc2NlbnQsICZkZXNjZW50LCAmaW5mbyApOwotICAgICAgICBpbmZvLndpZHRoICs9IGNvdW50KmRjLT53LmNoYXJFeHRyYSArIGRjLT53LmJyZWFrRXh0cmEqZGMtPncuYnJlYWtDb3VudDsKKyAgICAgICAgU0laRTMyIHN6OworICAgICAgICBpZiAoIVgxMURSVl9HZXRUZXh0RXh0ZW50UG9pbnQoIGRjLCBzdHIsIGNvdW50LCAmc3ogKSkKKwkgICAgcmV0dXJuIEZBTFNFOworCXdpZHRoID0gWExTVE9EUyhkYywgc3ouY3gpOwogICAgIH0KKyAgICBhc2NlbnQgPSBwZm8tPmxwWDExVHJhbnMgPyBwZm8tPmxwWDExVHJhbnMtPmFzY2VudCA6IGZvbnQtPmFzY2VudDsKKyAgICBkZXNjZW50ID0gcGZvLT5scFgxMVRyYW5zID8gcGZvLT5scFgxMVRyYW5zLT5kZXNjZW50IDogZm9udC0+ZGVzY2VudDsKKyAgICB4d2lkdGggPSBwZm8tPmxwWDExVHJhbnMgPyB3aWR0aCAqIHBmby0+bHBYMTFUcmFucy0+YSAvCisgICAgICBwZm8tPmxwWDExVHJhbnMtPnBpeGVsc2l6ZSA6IHdpZHRoOworICAgIHl3aWR0aCA9IHBmby0+bHBYMTFUcmFucyA/IHdpZHRoICogcGZvLT5scFgxMVRyYW5zLT5iIC8KKyAgICAgIHBmby0+bHBYMTFUcmFucy0+cGl4ZWxzaXplIDogMDsKIAogICAgIHN3aXRjaCggZGMtPncudGV4dEFsaWduICYgKFRBX0xFRlQgfCBUQV9SSUdIVCB8IFRBX0NFTlRFUikgKQogICAgIHsKICAgICAgIGNhc2UgVEFfTEVGVDoKLSAJICBpZiAoZGMtPncudGV4dEFsaWduICYgVEFfVVBEQVRFQ1ApCi0JICAgICAgZGMtPncuQ3Vyc1Bvc1ggPSBYRFBUT0xQKCBkYywgeCArIGluZm8ud2lkdGggKTsKKwkgIGlmIChkYy0+dy50ZXh0QWxpZ24gJiBUQV9VUERBVEVDUCkgeworCSAgICAgIGRjLT53LkN1cnNQb3NYID0gWERQVE9MUCggZGMsIHggKyB4d2lkdGggKTsKKwkgICAgICBkYy0+dy5DdXJzUG9zWSA9IFlEUFRPTFAoIGRjLCB5IC0geXdpZHRoICk7CisJICB9CiAJICBicmVhazsKICAgICAgIGNhc2UgVEFfUklHSFQ6Ci0JICB4IC09IGluZm8ud2lkdGg7Ci0JICBpZiAoZGMtPncudGV4dEFsaWduICYgVEFfVVBEQVRFQ1ApIGRjLT53LkN1cnNQb3NYID0gWERQVE9MUCggZGMsIHggKTsKKwkgIHggLT0geHdpZHRoOworCSAgeSArPSB5d2lkdGg7CisJICBpZiAoZGMtPncudGV4dEFsaWduICYgVEFfVVBEQVRFQ1ApIHsKKwkgICAgICBkYy0+dy5DdXJzUG9zWCA9IFhEUFRPTFAoIGRjLCB4ICk7CisJICAgICAgZGMtPncuQ3Vyc1Bvc1kgPSBZRFBUT0xQKCBkYywgeSApOworCSAgfQogCSAgYnJlYWs7CiAgICAgICBjYXNlIFRBX0NFTlRFUjoKLQkgIHggLT0gaW5mby53aWR0aCAvIDI7CisJICB4IC09IHh3aWR0aCAvIDI7CisJICB5ICs9IHl3aWR0aCAvIDI7CiAJICBicmVhazsKICAgICB9CiAKICAgICBzd2l0Y2goIGRjLT53LnRleHRBbGlnbiAmIChUQV9UT1AgfCBUQV9CT1RUT00gfCBUQV9CQVNFTElORSkgKQogICAgIHsKICAgICAgIGNhc2UgVEFfVE9QOgotCSAgeSArPSBmb250LT5hc2NlbnQ7CisJICB4IC09IHBmby0+bHBYMTFUcmFucyA/IGFzY2VudCAqIHBmby0+bHBYMTFUcmFucy0+YyAvCisJICAgIHBmby0+bHBYMTFUcmFucy0+cGl4ZWxzaXplIDogMDsKKwkgIHkgKz0gcGZvLT5scFgxMVRyYW5zID8gYXNjZW50ICogcGZvLT5scFgxMVRyYW5zLT5kIC8KKwkgICAgcGZvLT5scFgxMVRyYW5zLT5waXhlbHNpemUgOiBhc2NlbnQ7CiAJICBicmVhazsKICAgICAgIGNhc2UgVEFfQk9UVE9NOgotCSAgeSAtPSBmb250LT5kZXNjZW50OworCSAgeCArPSBwZm8tPmxwWDExVHJhbnMgPyBkZXNjZW50ICogcGZvLT5scFgxMVRyYW5zLT5jIC8KKwkgICAgcGZvLT5scFgxMVRyYW5zLT5waXhlbHNpemUgOiAwOworCSAgeSAtPSBwZm8tPmxwWDExVHJhbnMgPyBkZXNjZW50ICogcGZvLT5scFgxMVRyYW5zLT5kIC8KKwkgICAgcGZvLT5scFgxMVRyYW5zLT5waXhlbHNpemUgOiBkZXNjZW50OwogCSAgYnJlYWs7CiAgICAgICBjYXNlIFRBX0JBU0VMSU5FOgogCSAgYnJlYWs7CkBAIC0xNjgsMTYgKzE5MiwxNiBAQAogICAgICAgICAgICAgICAvKiB0ZXh0IGlzIG91dHNpZGUgdGhlIHJlY3RhbmdsZSAqLwogICAgICAgICAgICAgaWYgKCEoZmxhZ3MgJiBFVE9fT1BBUVVFKSB8fAogICAgICAgICAgICAgICAgICh4IDwgcmVjdC5sZWZ0KSB8fAotICAgICAgICAgICAgICAgICh4ICsgaW5mby53aWR0aCA+PSByZWN0LnJpZ2h0KSB8fAotICAgICAgICAgICAgICAgICh5LWZvbnQtPmFzY2VudCA8IHJlY3QudG9wKSB8fAotICAgICAgICAgICAgICAgICh5K2ZvbnQtPmRlc2NlbnQgPj0gcmVjdC5ib3R0b20pKQorICAgICAgICAgICAgICAgICh4ICsgd2lkdGggPj0gcmVjdC5yaWdodCkgfHwKKyAgICAgICAgICAgICAgICAoeSAtIGFzY2VudCA8IHJlY3QudG9wKSB8fAorICAgICAgICAgICAgICAgICh5ICsgZGVzY2VudCA+PSByZWN0LmJvdHRvbSkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgVFNYU2V0Rm9yZWdyb3VuZCggZGlzcGxheSwgZGMtPnUueC5nYywgZGMtPncuYmFja2dyb3VuZFBpeGVsICk7CiAgICAgICAgICAgICAgICAgVFNYRmlsbFJlY3RhbmdsZSggZGlzcGxheSwgZGMtPnUueC5kcmF3YWJsZSwgZGMtPnUueC5nYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGMtPncuRENPcmdYICsgeCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGMtPncuRENPcmdZICsgeSAtIGZvbnQtPmFzY2VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby53aWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC0+YXNjZW50ICsgZm9udC0+ZGVzY2VudCApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYy0+dy5EQ09yZ1kgKyB5IC0gYXNjZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNjZW50ICsgZGVzY2VudCApOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMTg3LDcgKzIxMSw3IEBACiAgICAgVFNYU2V0Rm9yZWdyb3VuZCggZGlzcGxheSwgZGMtPnUueC5nYywgZGMtPncudGV4dFBpeGVsICk7CiAgICAgaWYgKCFkYy0+dy5jaGFyRXh0cmEgJiYgIWRjLT53LmJyZWFrRXh0cmEgJiYgIWxwRHgpCiAgICAgewotICAgICAgaWYgKCFwZm8tPmxmLmxmT3JpZW50YXRpb24pICAvKiBhbmdsZWQgYmFzZWxpbmU/ICovCisgICAgICBpZighcm90YXRlZCkKICAgICAgIHsKICAgICAgICAgVFNYRHJhd1N0cmluZyggZGlzcGxheSwgZGMtPnUueC5kcmF3YWJsZSwgZGMtPnUueC5nYywgCiAgICAgICAgICAgICAgICAgICAgICBkYy0+dy5EQ09yZ1ggKyB4LCBkYy0+dy5EQ09yZ1kgKyB5LCBzdHIsIGNvdW50ICk7CkBAIC0xOTcsMTggKzIyMSwxNSBAQAogCS8qIGhhdmUgdG8gcmVuZGVyIGNoYXJhY3RlciBieSBjaGFyYWN0ZXIuICovCiAJZG91YmxlIG9mZnNldCA9IDAuMDsKIAlpbnQgaTsKLQkvKiB0ZW50aHMgb2YgZGVncmVlcyB0byByYWRpYW5zICovCi0JZG91YmxlIHRoZXRhID0gTV9QSSpwZm8tPmxmLmxmT3JpZW50YXRpb24vMTgwMC47Ci0JLyogY29tcG9uZW50cyBvZiBwb2ludHNpemUgbWF0cml4ICovCi0JZG91YmxlIHhjID0gcGZvLT5maS0+bGZkX2RlY2lwb2ludHMqY29zKHRoZXRhKS8xMC47Ci0JZG91YmxlIHljID0gcGZvLT5maS0+bGZkX2RlY2lwb2ludHMqc2luKHRoZXRhKS8xMC47Ci0JCisKIAlmb3IoaT0wOyBpPGNvdW50OyBpKyspIHsKIAkgIGludCBjaGFyX21ldHJpY19vZmZzZXQgPSAodW5zaWduZWQgY2hhcikgc3RyW2ldIAogCSAgICAtIGZvbnQtPm1pbl9jaGFyX29yX2J5dGUyOwotCSAgaW50IHhfaSA9IElST1VORCgoZG91YmxlKSAoZGMtPncuRENPcmdYICsgeCkgKyBvZmZzZXQqeGMvMTAwMC4gKTsKLQkgIGludCB5X2kgPSBJUk9VTkQoKGRvdWJsZSkgKGRjLT53LkRDT3JnWSArIHkpIC0gb2Zmc2V0KnljLzEwMDAuICk7Ci0JICAgCisJICBpbnQgeF9pID0gSVJPVU5EKChkb3VibGUpIChkYy0+dy5EQ09yZ1ggKyB4KSArIG9mZnNldCAqCisJCQkgICBwZm8tPmxwWDExVHJhbnMtPmEgLyAxMDAwLjAgKTsKKwkgIGludCB5X2kgPSBJUk9VTkQoKGRvdWJsZSkgKGRjLT53LkRDT3JnWSArIHkpIC0gb2Zmc2V0ICoKKwkJCSAgIHBmby0+bHBYMTFUcmFucy0+YiAvIDEwMDAuMCApOworCiAJICBUU1hEcmF3U3RyaW5nKCBkaXNwbGF5LCBkYy0+dS54LmRyYXdhYmxlLCBkYy0+dS54LmdjLAogCQkJIHhfaSwgeV9pLCAmc3RyW2ldLCAxKTsKIAkgIG9mZnNldCArPSAoZG91YmxlKSAoZm9udC0+cGVyX2NoYXIgPwpAQCAtMjg1LDcgKzMwNiw3IEBACiAJbG9uZyBsaW5lUG9zLCBsaW5lV2lkdGg7ICAgICAgIAogCiAJaWYgKCFUU1hHZXRGb250UHJvcGVydHkoIGZvbnQsIFhBX1VOREVSTElORV9QT1NJVElPTiwgJmxpbmVQb3MgKSkKLQkgICAgbGluZVBvcyA9IGZvbnQtPmRlc2NlbnQtMTsKKwkgICAgbGluZVBvcyA9IGRlc2NlbnQgLSAxOwogCWlmICghVFNYR2V0Rm9udFByb3BlcnR5KCBmb250LCBYQV9VTkRFUkxJTkVfVEhJQ0tORVNTLCAmbGluZVdpZHRoICkpCiAJICAgIGxpbmVXaWR0aCA9IDA7CiAJZWxzZSBpZiAobGluZVdpZHRoID09IDEpIGxpbmVXaWR0aCA9IDA7CkBAIC0yOTMsMjAgKzMxNCwyMCBAQAogCQkJICAgIExpbmVTb2xpZCwgQ2FwUm91bmQsIEpvaW5CZXZlbCApOyAKICAgICAgICAgVFNYRHJhd0xpbmUoIGRpc3BsYXksIGRjLT51LnguZHJhd2FibGUsIGRjLT51LnguZ2MsCiAJCSAgIGRjLT53LkRDT3JnWCArIHgsIGRjLT53LkRDT3JnWSArIHkgKyBsaW5lUG9zLAotCQkgICBkYy0+dy5EQ09yZ1ggKyB4ICsgaW5mby53aWR0aCwgZGMtPncuRENPcmdZICsgeSArIGxpbmVQb3MgKTsKKwkJICAgZGMtPncuRENPcmdYICsgeCArIHdpZHRoLCBkYy0+dy5EQ09yZ1kgKyB5ICsgbGluZVBvcyApOwogICAgIH0KICAgICBpZiAobGZTdHJpa2VPdXQpCiAgICAgewogCWxvbmcgbGluZUFzY2VudCwgbGluZURlc2NlbnQ7CiAJaWYgKCFUU1hHZXRGb250UHJvcGVydHkoIGZvbnQsIFhBX1NUUklLRU9VVF9BU0NFTlQsICZsaW5lQXNjZW50ICkpCi0JICAgIGxpbmVBc2NlbnQgPSBmb250LT5hc2NlbnQgLyAyOworCSAgICBsaW5lQXNjZW50ID0gYXNjZW50IC8gMjsKIAlpZiAoIVRTWEdldEZvbnRQcm9wZXJ0eSggZm9udCwgWEFfU1RSSUtFT1VUX0RFU0NFTlQsICZsaW5lRGVzY2VudCApKQogCSAgICBsaW5lRGVzY2VudCA9IC1saW5lQXNjZW50ICogMiAvIDM7CiAJVFNYU2V0TGluZUF0dHJpYnV0ZXMoIGRpc3BsYXksIGRjLT51LnguZ2MsIGxpbmVBc2NlbnQgKyBsaW5lRGVzY2VudCwKIAkJCSAgICBMaW5lU29saWQsIENhcFJvdW5kLCBKb2luQmV2ZWwgKTsgCiAJVFNYRHJhd0xpbmUoIGRpc3BsYXksIGRjLT51LnguZHJhd2FibGUsIGRjLT51LnguZ2MsCiAJCSAgIGRjLT53LkRDT3JnWCArIHgsIGRjLT53LkRDT3JnWSArIHkgLSBsaW5lQXNjZW50LAotCQkgICBkYy0+dy5EQ09yZ1ggKyB4ICsgaW5mby53aWR0aCwgZGMtPncuRENPcmdZICsgeSAtIGxpbmVBc2NlbnQgKTsKKwkJICAgZGMtPncuRENPcmdYICsgeCArIHdpZHRoLCBkYy0+dy5EQ09yZ1kgKyB5IC0gbGluZUFzY2VudCApOwogICAgIH0KIAogICAgIGlmIChmbGFncyAmIEVUT19DTElQUEVEKSAKQEAgLTMxNiwzICszMzcsNCBAQAogICAgIH0KICAgICByZXR1cm4gVFJVRTsKIH0KKwpkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MveDExZHJ2L3hmb250LmMgYi9ncmFwaGljcy94MTFkcnYveGZvbnQuYwppbmRleCA4NTc2MmM2Li5lZGVmYWY3IDEwMDY0NAotLS0gYS9ncmFwaGljcy94MTFkcnYveGZvbnQuYworKysgYi9ncmFwaGljcy94MTFkcnYveGZvbnQuYwpAQCAtODcsNyArODcsOCBAQAogCQkJCSAgICAgQkFMVElDX0NIQVJTRVQJLyogY3AxMjUtNyAqLwogCQkJCSAgIH07IAogCi1VSU5UMTYJCQlYVGV4dENhcHMgPSBUQ19PUF9DSEFSQUNURVIgfCBUQ19PUF9TVFJPS0UgfCBUQ19DUF9TVFJPS0UgfAorVUlOVDE2CQkJWFRleHRDYXBzID0gVENfT1BfQ0hBUkFDVEVSIHwgVENfT1BfU1RST0tFIHwKK1RDX0NQX1NUUk9LRSB8IFRDX0NSX0FOWSB8CiAJCQkJICAgIFRDX1NBX0RPVUJMRSB8IFRDX1NBX0lOVEVHRVIgfCBUQ19TQV9DT05USU4gfAogCQkJIAkgICAgVENfVUFfQUJMRSB8IFRDX1NPX0FCTEUgfCBUQ19SQV9BQkxFOwogCkBAIC0xMjIsNiArMTIzLDEwIEBACiBzdGF0aWMgdm9pZCAgWEZPTlRfQ2hlY2tGSUxpc3QoZm9udFJlc291cmNlKiwgZm9udEluZm8qLCBpbnQgc3Vic2V0X2FjdGlvbik7CiBzdGF0aWMgdm9pZCAgWEZPTlRfR3Jvd0ZyZWVMaXN0KGludCBzdGFydCwgaW50IGVuZCk7CiAKKworc3RhdGljIEF0b20gUkFXX0FTQ0VOVDsKK3N0YXRpYyBBdG9tIFJBV19ERVNDRU5UOworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBIZWxwZXIgbWFjcm9zIGZyb20gWCBkaXN0cmlidXRpb24KICAqLwpAQCAtNTU2LDcgKzU2MSw4IEBACiAgKiBmb250IGluZm8JCS0gaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL2tiL2FydGljbGVzL3E2NS8xLzIzLmh0bQogICogV2luZG93cyBmb250IG1ldHJpY3MJLSBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20va2IvYXJ0aWNsZXMvcTMyLzYvNjcuaHRtCiAgKi8KLXN0YXRpYyBCT09MMzIgWEZPTlRfR2V0TGVhZGluZyggTFBJRk9OVElORk8xNiBwRkksIFhGb250U3RydWN0KiB4X2ZzLCBJTlQzMiogcElMLCBJTlQzMiogcEVMICkKK3N0YXRpYyBCT09MMzIgWEZPTlRfR2V0TGVhZGluZyggTFBJRk9OVElORk8xNiBwRkksIFhGb250U3RydWN0KiB4X2ZzLCBJTlQzMioKKyAgICAgICBwSUwsIElOVDMyKiBwRUwsIFhGT05UVFJBTlMgKlhGVCApCiB7CiAgICAgdW5zaWduZWQgbG9uZyBoZWlnaHQ7CiAgICAgdW5zaWduZWQgbWluID0gKHVuc2lnbmVkIGNoYXIpcEZJLT5kZkZpcnN0Q2hhcjsKQEAgLTU2NCwxMSArNTcwLDIyIEBACiAgICAgQk9PTDMyIGJIYXZlQ2FwSGVpZ2h0ID0gKHBGSS0+ZGZDaGFyU2V0ID09IEFOU0lfQ0hBUlNFVCAmJiAnWCcgPj0gbWluICYmICdYJyA8PSBtYXggKTsKIAogICAgIGlmKCBwRUwgKSAqcEVMID0gMDsKLSAgICBpZiggVFNYR2V0Rm9udFByb3BlcnR5KHhfZnMsIFhBX0NBUF9IRUlHSFQsICZoZWlnaHQpID09IEZhbHNlICkKKworICAgIGlmKFhGVCkgeworICAgICAgICBBdG9tIFJBV19DQVBfSEVJR0hUID0gVFNYSW50ZXJuQXRvbShkaXNwbGF5LCAiUkFXX0NBUF9IRUlHSFQiLCBUUlVFKTsKKwlpZihUU1hHZXRGb250UHJvcGVydHkoeF9mcywgUkFXX0NBUF9IRUlHSFQsICZoZWlnaHQpKQorCSAgICAqcElMID0gWEZULT5hc2NlbnQgLSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSU5UMzIpKGh5cG90ZihYRlQtPmEsIFhGVC0+YikgLyAxMDAwLjAgKiBoZWlnaHQpOworCWVsc2UKKwkgICAgKnBJTCA9IDA7CisJcmV0dXJuIGJIYXZlQ2FwSGVpZ2h0ICYmIHhfZnMtPnBlcl9jaGFyOworICAgIH0KKyAgICAgICAKKyAgICBpZiggVFNYR2V0Rm9udFByb3BlcnR5KHhfZnMsIFhBX0NBUF9IRUlHSFQsICZoZWlnaHQpID09IEZBTFNFICkKICAgICB7Ci0JaWYoIHhfZnMtPnBlcl9jaGFyICkKKyAgICAgICAgaWYoIHhfZnMtPnBlcl9jaGFyICkKIAkgICAgaWYoIGJIYXZlQ2FwSGVpZ2h0ICkKLQkJaGVpZ2h0ID0geF9mcy0+cGVyX2NoYXJbJ1gnIC0gbWluXS5hc2NlbnQ7CisJCSAgICBoZWlnaHQgPSB4X2ZzLT5wZXJfY2hhclsnWCcgLSBtaW5dLmFzY2VudDsKIAkgICAgZWxzZQogCQlpZiAoeF9mcy0+YXNjZW50ID49IHhfZnMtPm1heF9ib3VuZHMuYXNjZW50KQogCQkgICAgaGVpZ2h0ID0geF9mcy0+bWF4X2JvdW5kcy5hc2NlbnQ7CkBAIC01ODYsNyArNjAzLDggQEAKICAgICByZXR1cm4gKGJIYXZlQ2FwSGVpZ2h0ICYmIHhfZnMtPnBlcl9jaGFyKTsKIH0KIAotc3RhdGljIElOVDMyIFhGT05UX0dldEF2Z0NoYXJXaWR0aCggTFBJRk9OVElORk8xNiBwRkksIFhGb250U3RydWN0KiB4X2ZzKQorc3RhdGljIElOVDMyIFhGT05UX0dldEF2Z0NoYXJXaWR0aCggTFBJRk9OVElORk8xNiBwRkksIFhGb250U3RydWN0KiB4X2ZzLAorCQkJCSAgICBYRk9OVFRSQU5TICpYRlQpCiB7CiAgICAgdW5zaWduZWQgbWluID0gKHVuc2lnbmVkIGNoYXIpcEZJLT5kZkZpcnN0Q2hhcjsKICAgICB1bnNpZ25lZCBtYXggPSAodW5zaWduZWQgY2hhcilwRkktPmRmTGFzdENoYXI7CkBAIC01OTcsNyArNjE1LDExIEBACiAJZm9yKCBqID0gMCwgd2lkdGggPSAwLCBjaGFycyA9IDAsIG1heCAtPSBtaW47IGogPD0gbWF4OyBqKysgKQogICAgICAgICAgICAgaWYoICFDSV9OT05FWElTVENIQVIoeF9mcy0+cGVyX2NoYXIgKyBqKSApCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgd2lkdGggKz0geF9mcy0+cGVyX2NoYXJbal0ud2lkdGg7CisJICAgICAgICBpZighWEZUKQorCQkgICAgd2lkdGggKz0geF9mcy0+cGVyX2NoYXJbal0ud2lkdGg7CisJCWVsc2UKKwkJICAgIHdpZHRoICs9IHhfZnMtPnBlcl9jaGFyW2pdLmF0dHJpYnV0ZXMgKiAKKwkJICAgICAgWEZULT5waXhlbHNpemUgLyAxMDAwLjA7CiAgICAgICAgICAgICAgICAgY2hhcnMrKzsKICAgICAgICAgICAgIH0KIAlyZXR1cm4gKHdpZHRoIC8gY2hhcnMpOwpAQCAtNjA2LDYgKzYyOCwyOCBAQAogICAgIHJldHVybiB4X2ZzLT5taW5fYm91bmRzLndpZHRoOwogfQogCitzdGF0aWMgSU5UMzIgWEZPTlRfR2V0TWF4Q2hhcldpZHRoKGZvbnRPYmplY3QgKnBmbykKK3sKKyAgICB1bnNpZ25lZCBtaW4gPSAodW5zaWduZWQgY2hhcilwZm8tPmZzLT5taW5fY2hhcl9vcl9ieXRlMjsKKyAgICB1bnNpZ25lZCBtYXggPSAodW5zaWduZWQgY2hhcilwZm8tPmZzLT5tYXhfY2hhcl9vcl9ieXRlMjsKKworICAgIGlmKCFwZm8tPmxwWDExVHJhbnMpCisgICAgICAgIHJldHVybiBhYnMocGZvLT5mcy0+bWF4X2JvdW5kcy53aWR0aCk7CisKKyAgICBpZiggcGZvLT5mcy0+cGVyX2NoYXIgKQorICAgIHsKKwlpbnQgIG1heHdpZHRoLCBqOworCWZvciggaiA9IDAsIG1heHdpZHRoID0gMCwgbWF4IC09IG1pbjsgaiA8PSBtYXg7IGorKyApCisgICAgICAgICAgICBpZiggIUNJX05PTkVYSVNUQ0hBUihwZm8tPmZzLT5wZXJfY2hhciArIGopICkKKwkgICAgICAgIGlmKG1heHdpZHRoIDwgcGZvLT5mcy0+cGVyX2NoYXJbal0uYXR0cmlidXRlcykKKwkJICAgIG1heHdpZHRoID0gcGZvLT5mcy0+cGVyX2NoYXJbal0uYXR0cmlidXRlczsKKworCW1heHdpZHRoICo9IHBmby0+bHBYMTFUcmFucy0+cGl4ZWxzaXplIC8gMTAwMC4wOworCXJldHVybiBtYXh3aWR0aDsKKyAgICB9CisgICAgcmV0dXJuIHBmby0+Zm9BdmdDaGFyV2lkdGg7Cit9CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgICAgIFhGT05UX1NldEZvbnRNZXRyaWMKICAqCkBAIC02MjYsMTAgKzY3MCwxMCBAQAogICAgIGZpLT5kZi5kZlBpeFdpZHRoID0gKHhmcy0+cGVyX2NoYXIpID8gMCA6IHhmcy0+bWluX2JvdW5kcy53aWR0aDsKICAgICBmaS0+ZGYuZGZNYXhXaWR0aCA9IChJTlQxNilhYnMoeGZzLT5tYXhfYm91bmRzLndpZHRoKTsKIAotICAgIGlmKCBYRk9OVF9HZXRMZWFkaW5nKCAmZmktPmRmLCB4ZnMsICZpbCwgJmVsICkgKQorICAgIGlmKCBYRk9OVF9HZXRMZWFkaW5nKCAmZmktPmRmLCB4ZnMsICZpbCwgJmVsLCBOVUxMICkgKQogICAgICAgICBmaS0+ZGYuZGZBdmdXaWR0aCA9IChJTlQxNil4ZnMtPnBlcl9jaGFyWydYJyAtIG1pbl0ud2lkdGg7CiAgICAgZWxzZQotICAgICAgICBmaS0+ZGYuZGZBdmdXaWR0aCA9IChJTlQxNilYRk9OVF9HZXRBdmdDaGFyV2lkdGgoICZmaS0+ZGYsIHhmcyk7CisgICAgICAgIGZpLT5kZi5kZkF2Z1dpZHRoID0gKElOVDE2KVhGT05UX0dldEF2Z0NoYXJXaWR0aCggJmZpLT5kZiwgeGZzLCBOVUxMKTsKIAogICAgIGZpLT5kZi5kZkludGVybmFsTGVhZGluZyA9IChJTlQxNilpbDsKICAgICBmaS0+ZGYuZGZFeHRlcm5hbExlYWRpbmcgPSAoSU5UMTYpZWw7CkBAIC02NTksMTIgKzcwMywxNyBAQAogewogICAgIExQSUZPTlRJTkZPMTYgcGRmID0gJnBmby0+ZmktPmRmOwogCi0gICAgcFRNLT50bUFzY2VudCA9IHBmby0+ZnMtPmFzY2VudDsKLSAgICBwVE0tPnRtRGVzY2VudCA9IHBmby0+ZnMtPmRlc2NlbnQ7CisgICAgaWYoICEgcGZvLT5scFgxMVRyYW5zICkgeworICAgICAgcFRNLT50bUFzY2VudCA9IHBmby0+ZnMtPmFzY2VudDsKKyAgICAgIHBUTS0+dG1EZXNjZW50ID0gcGZvLT5mcy0+ZGVzY2VudDsKKyAgICB9IGVsc2UgeworICAgICAgcFRNLT50bUFzY2VudCA9IHBmby0+bHBYMTFUcmFucy0+YXNjZW50OworICAgICAgcFRNLT50bURlc2NlbnQgPSBwZm8tPmxwWDExVHJhbnMtPmRlc2NlbnQ7CisgICAgfQogICAgIHBUTS0+dG1IZWlnaHQgPSBwVE0tPnRtQXNjZW50ICsgcFRNLT50bURlc2NlbnQ7CiAKICAgICBwVE0tPnRtQXZlQ2hhcldpZHRoID0gcGZvLT5mb0F2Z0NoYXJXaWR0aDsKLSAgICBwVE0tPnRtTWF4Q2hhcldpZHRoID0gYWJzKHBmby0+ZnMtPm1heF9ib3VuZHMud2lkdGgpOworICAgIHBUTS0+dG1NYXhDaGFyV2lkdGggPSBwZm8tPmZvTWF4Q2hhcldpZHRoOwogCiAgICAgcFRNLT50bUludGVybmFsTGVhZGluZyA9IHBmby0+Zm9JbnRlcm5hbExlYWRpbmc7CiAgICAgcFRNLT50bUV4dGVybmFsTGVhZGluZyA9IHBkZi0+ZGZFeHRlcm5hbExlYWRpbmc7CkBAIC0xNTA0LDYgKzE1NTMsMTAgQEAKICAgLyogdXBkYXRlIHRleHQgY2FwcyBwYXJhbWV0ZXIgKi8KIAogICBwRGV2Q2Fwcy0+dGV4dENhcHMgPSBYVGV4dENhcHM7CisKKyAgUkFXX0FTQ0VOVCA9IFRTWEludGVybkF0b20oZGlzcGxheSwgIlJBV19BU0NFTlQiLCBUUlVFKTsKKyAgUkFXX0RFU0NFTlQgPSBUU1hJbnRlcm5BdG9tKGRpc3BsYXksICJSQVdfREVTQ0VOVCIsIFRSVUUpOworICAKICAgcmV0dXJuIFRSVUU7CiB9CiAKQEAgLTE4ODYsNiArMTkzOSw5IEBACiAJICAgIGVsc2UgZm9udE1SVSA9IChJTlQxNilmb250Q2FjaGVbal0ubHJ1OwogCiAJICAgIC8qIEZJWE1FOiBscFhGb3JtLCBscFBpeG1hcCAqLworCSAgICBpZihmb250Q2FjaGVbal0ubHBYMTFUcmFucykKKwkgICAgICAgIEhlYXBGcmVlKCBTeXN0ZW1IZWFwLCAwLCBmb250Q2FjaGVbal0ubHBYMTFUcmFucyApOworCiAJICAgIFRTWEZyZWVGb250KCBkaXNwbGF5LCBmb250Q2FjaGVbal0uZnMgKTsKIAogCSAgICBtZW1zZXQoIGZvbnRDYWNoZSArIGosIDAsIHNpemVvZihmb250T2JqZWN0KSApOwpAQCAtMTkyNyw2ICsxOTgzLDUwIEBACiAgICAgcmV0dXJuIC0xOwogfQogCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoJWEZPTlRfU2V0WDExVHJhbnMKKyAqLworc3RhdGljIEJPT0wzMiBYRk9OVF9TZXRYMTFUcmFucyggZm9udE9iamVjdCAqcGZvICkKK3sKKyAgY2hhciAqZm9udE5hbWU7CisgIEF0b20gbmFtZUF0b207CisgIGludCBpOworICBjaGFyICpjcCwgKnN0YXJ0OworCisgIFhHZXRGb250UHJvcGVydHkoIHBmby0+ZnMsIFhBX0ZPTlQsICZuYW1lQXRvbSApOworICBmb250TmFtZSA9IFhHZXRBdG9tTmFtZSggZGlzcGxheSwgbmFtZUF0b20gKTsKKyAgZm9yKGkgPSAwLCBjcCA9IGZvbnROYW1lOyBpIDwgNzsgaSsrKSB7CisgICAgY3AgPSBzdHJjaHIoY3AsICctJyk7CisgICAgY3ArKzsKKyAgfQorICBpZigqY3AgIT0gJ1snKSB7CisgICAgWEZyZWUoZm9udE5hbWUpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorICBzdGFydCA9IGNwOworICB3aGlsZSgoY3AgPSBzdHJjaHIoY3AsICd+JykpKQorICAgICpjcCA9ICctJzsKKworI2RlZmluZSBQWCBwZm8tPmxwWDExVHJhbnMKKworICBzc2NhbmYoc3RhcnQsICJbJWYlZiVmJWZdIiwgJlBYLT5hLCAmUFgtPmIsICZQWC0+YywgJlBYLT5kKTsKKyAgWEZyZWUoZm9udE5hbWUpOworCisgIFhHZXRGb250UHJvcGVydHkoIHBmby0+ZnMsIFJBV19BU0NFTlQsICZQWC0+UkFXX0FTQ0VOVCApOworICBYR2V0Rm9udFByb3BlcnR5KCBwZm8tPmZzLCBSQVdfREVTQ0VOVCwgJlBYLT5SQVdfREVTQ0VOVCApOworCisgIFBYLT5waXhlbHNpemUgPSBoeXBvdGYoUFgtPmEsIFBYLT5iKTsKKyAgUFgtPmFzY2VudCA9IFBYLT5waXhlbHNpemUgLyAxMDAwLjAgKiBQWC0+UkFXX0FTQ0VOVDsKKyAgUFgtPmRlc2NlbnQgPSBQWC0+cGl4ZWxzaXplIC8gMTAwMC4wICogUFgtPlJBV19ERVNDRU5UOworCisgIFRSQUNFKGZvbnQsICJbJWYgJWYgJWYgJWZdIFJBID0gJWxkIFJEID0gJWxkXG4iLCBwZm8tPmxwWDExVHJhbnMtPmEsIAorCXBmby0+bHBYMTFUcmFucy0+YiwgcGZvLT5scFgxMVRyYW5zLT5jLCBwZm8tPmxwWDExVHJhbnMtPmQsCisJcGZvLT5scFgxMVRyYW5zLT5SQVdfQVNDRU5ULCBwZm8tPmxwWDExVHJhbnMtPlJBV19ERVNDRU5UKTsKKworI3VuZGVmIFBYCisgIHJldHVybiBUUlVFOworfQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBYIERldmljZSBGb250IE9iamVjdHMKICAqLwpAQCAtMTk3MSwxMCArMjA3MSwzMCBAQAogCQkgICAgaWYoIChwZm8tPmZzID0gVFNYTG9hZFF1ZXJ5Rm9udCggZGlzcGxheSwgbHBMRkQgKSkgKSBicmVhazsKIAkJfSB3aGlsZSggdVJlbGF4TGV2ZWwgKTsKIAotCQlpZiggWEZPTlRfR2V0TGVhZGluZyggJnBmby0+ZmktPmRmLCBwZm8tPmZzLCAmaSwgTlVMTCApICkKLQkJICAgIHBmby0+Zm9BdmdDaGFyV2lkdGggPSAoSU5UMTYpcGZvLT5mcy0+cGVyX2NoYXJbJ1gnIC0gcGZvLT5mcy0+bWluX2NoYXJfb3JfYnl0ZTJdLndpZHRoOworCisJCWlmKHBmby0+bGYubGZFc2NhcGVtZW50ICE9IDApIHsKKwkJICAgIHBmby0+bHBYMTFUcmFucyA9IEhlYXBBbGxvYyhTeXN0ZW1IZWFwLCAwLAorCQkJCQkJc2l6ZW9mKFhGT05UVFJBTlMpKTsKKwkJICAgIGlmKCFYRk9OVF9TZXRYMTFUcmFucyggcGZvICkpIHsKKwkJICAgICAgICBIZWFwRnJlZShTeXN0ZW1IZWFwLCAwLCBwZm8tPmxwWDExVHJhbnMpOworCQkJcGZvLT5scFgxMVRyYW5zID0gTlVMTDsKKwkJICAgIH0KKwkJfQorCisJCWlmKCBYRk9OVF9HZXRMZWFkaW5nKCAmcGZvLT5maS0+ZGYsIHBmby0+ZnMsICZpLCBOVUxMLCAKKwkJCQkgICAgICBwZm8tPmxwWDExVHJhbnMgKSApCisKKwkJICAgIGlmKCFwZm8tPmxwWDExVHJhbnMpCisJCSAgICAgICAgcGZvLT5mb0F2Z0NoYXJXaWR0aCA9CisJICAgICAgKElOVDE2KXBmby0+ZnMtPnBlcl9jaGFyWydYJyAtIHBmby0+ZnMtPm1pbl9jaGFyX29yX2J5dGUyXS53aWR0aDsKKwkJICAgIGVsc2UKKwkJICAgICAgICBwZm8tPmZvQXZnQ2hhcldpZHRoID0gCisJIChJTlQxNilwZm8tPmZzLT5wZXJfY2hhclsnWCcgLSBwZm8tPmZzLT5taW5fY2hhcl9vcl9ieXRlMl0uYXR0cmlidXRlcworCQkJICAqIHBmby0+bHBYMTFUcmFucy0+cGl4ZWxzaXplIC8gMTAwMC4wOwogCQllbHNlCi0JCSAgICBwZm8tPmZvQXZnQ2hhcldpZHRoID0gKElOVDE2KVhGT05UX0dldEF2Z0NoYXJXaWR0aCggJnBmby0+ZmktPmRmLCBwZm8tPmZzICk7CisJCSAgICBwZm8tPmZvQXZnQ2hhcldpZHRoID0gKElOVDE2KVhGT05UX0dldEF2Z0NoYXJXaWR0aCgKKwkJCSAgICAgICAgICAgICAmcGZvLT5maS0+ZGYsIHBmby0+ZnMsIHBmby0+bHBYMTFUcmFucyApOworCQlwZm8tPmZvTWF4Q2hhcldpZHRoID0gKElOVDE2KVhGT05UX0dldE1heENoYXJXaWR0aChwZm8pOwogCQlwZm8tPmZvSW50ZXJuYWxMZWFkaW5nID0gKElOVDE2KWk7CiAKIAkJLyogRklYTUU6IElmIHdlJ3ZlIGdvdCBhIHNvZnQgZm9udCBvcgpAQCAtMjEzNSwxNyArMjI1NSwzNCBAQAogQk9PTDMyIFgxMURSVl9HZXRUZXh0RXh0ZW50UG9pbnQoIERDICpkYywgTFBDU1RSIHN0ciwgSU5UMzIgY291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBTSVpFMzIgc2l6ZSApCiB7Ci0gICAgWEZvbnRTdHJ1Y3QqIHBmcyA9IFhGT05UX0dldEZvbnRTdHJ1Y3QoIGRjLT51LnguZm9udCApOwotICAgIGlmKCBwZnMgKQotICAgIHsKLQlpbnQgZGlyLCBhc2NlbnQsIGRlc2NlbnQ7Ci0JWENoYXJTdHJ1Y3QgaW5mbzsKKyAgICBmb250T2JqZWN0KiBwZm8gPSBYRk9OVF9HZXRGb250T2JqZWN0KCBkYy0+dS54LmZvbnQgKTsKKyAgICBpZiggcGZvICkgeworICAgICAgICBpZiggIXBmby0+bHBYMTFUcmFucyApIHsKKwkgICAgaW50IGRpciwgYXNjZW50LCBkZXNjZW50OworCSAgICBYQ2hhclN0cnVjdCBpbmZvOwogCi0JVFNYVGV4dEV4dGVudHMoIHBmcywgc3RyLCBjb3VudCwgJmRpciwgJmFzY2VudCwgJmRlc2NlbnQsICZpbmZvICk7Ci0Jc2l6ZS0+Y3ggPSBhYnMoKGluZm8ud2lkdGggKyBkYy0+dy5icmVha1JlbSArIGNvdW50ICogZGMtPncuY2hhckV4dHJhKQotCQkJCQkJKiBkYy0+d25kRXh0WCAvIGRjLT52cG9ydEV4dFgpOwotCXNpemUtPmN5ID0gYWJzKChwZnMtPmFzY2VudCArIHBmcy0+ZGVzY2VudCkgKiBkYy0+d25kRXh0WSAvIGRjLT52cG9ydEV4dFkpOworCSAgICBUU1hUZXh0RXh0ZW50cyggcGZvLT5mcywgc3RyLCBjb3VudCwgJmRpciwgJmFzY2VudCwgJmRlc2NlbnQsICZpbmZvICk7CisJICAgIHNpemUtPmN4ID0gYWJzKChpbmZvLndpZHRoICsgZGMtPncuYnJlYWtSZW0gKyBjb3VudCAqIAorCQkJICAgIGRjLT53LmNoYXJFeHRyYSkgKiBkYy0+d25kRXh0WCAvIGRjLT52cG9ydEV4dFgpOworCSAgICBzaXplLT5jeSA9IGFicygocGZvLT5mcy0+YXNjZW50ICsgcGZvLT5mcy0+ZGVzY2VudCkgKiAKKwkJCSAgIGRjLT53bmRFeHRZIC8gZGMtPnZwb3J0RXh0WSk7CisJfSBlbHNlIHsKIAorCSAgICBJTlQzMiBpOworCSAgICBmbG9hdCB4ID0gMC4wLCB5ID0gMC4wOworCSAgICBmb3IoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJICAgICAgICB4ICs9IHBmby0+ZnMtPnBlcl9jaGFyID8gCisJICAgcGZvLT5mcy0+cGVyX2NoYXJbc3RyW2ldIC0gcGZvLT5mcy0+bWluX2NoYXJfb3JfYnl0ZTJdLmF0dHJpYnV0ZXMgOiAKKwkgICBwZm8tPmZzLT5taW5fYm91bmRzLmF0dHJpYnV0ZXM7CisJICAgIH0KKwkgICAgeSA9IHBmby0+bHBYMTFUcmFucy0+UkFXX0FTQ0VOVCArIHBmby0+bHBYMTFUcmFucy0+UkFXX0RFU0NFTlQ7CisJICAgIFRSQUNFKGZvbnQsICJ4ID0gJWYgeSA9ICVmXG4iLCB4LCB5KTsKKwkgICAgeCAqPSBwZm8tPmxwWDExVHJhbnMtPnBpeGVsc2l6ZSAvIDEwMDAuMDsKKwkgICAgeSAqPSBwZm8tPmxwWDExVHJhbnMtPnBpeGVsc2l6ZSAvIDEwMDAuMDsgCisJICAgIHNpemUtPmN4ID0gZmFic2YoKHggKyBkYy0+dy5icmVha1JlbSArIGNvdW50ICogZGMtPncuY2hhckV4dHJhKSAqCisJCQkgICAgIGRjLT53bmRFeHRYIC8gZGMtPnZwb3J0RXh0WCk7CisJICAgIHNpemUtPmN5ID0gZmFic2YoeSAqIGRjLT53bmRFeHRZIC8gZGMtPnZwb3J0RXh0WSk7CisJfQogCXJldHVybiBUUlVFOwogICAgIH0KICAgICByZXR1cm4gRkFMU0U7CkBAIC0yMTc0LDMwICsyMzExLDQwIEBACiBCT09MMzIgWDExRFJWX0dldENoYXJXaWR0aCggREMgKmRjLCBVSU5UMzIgZmlyc3RDaGFyLCBVSU5UMzIgbGFzdENoYXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBJTlQzMiBidWZmZXIgKQogewotICAgIFhGb250U3RydWN0KiB4ZnMgPSBYRk9OVF9HZXRGb250U3RydWN0KCBkYy0+dS54LmZvbnQgKTsKKyAgICBmb250T2JqZWN0KiBwZm8gPSBYRk9OVF9HZXRGb250T2JqZWN0KCBkYy0+dS54LmZvbnQgKTsKIAotICAgIGlmKCB4ZnMgKQorICAgIGlmKCBwZm8gKQogICAgIHsKIAlpbnQgaTsKIAotCWlmICh4ZnMtPnBlcl9jaGFyID09IE5VTEwpCisJaWYgKHBmby0+ZnMtPnBlcl9jaGFyID09IE5VTEwpCiAJICAgIGZvciAoaSA9IGZpcnN0Q2hhcjsgaSA8PSBsYXN0Q2hhcjsgaSsrKQotCQkqYnVmZmVyKysgPSB4ZnMtPm1pbl9ib3VuZHMud2lkdGg7CisgIAkgICAgICAgIGlmKHBmby0+bHBYMTFUcmFucykKKwkJICAgICpidWZmZXIrKyA9IHBmby0+ZnMtPm1pbl9ib3VuZHMuYXR0cmlidXRlcyAqCisJCSAgICAgIHBmby0+bHBYMTFUcmFucy0+cGl4ZWxzaXplIC8gMTAwMC4wOworCQllbHNlCisJCSAgICAqYnVmZmVyKysgPSBwZm8tPmZzLT5taW5fYm91bmRzLndpZHRoOwogCWVsc2UKIAl7CiAJICAgIFhDaGFyU3RydWN0ICpjcywgKmRlZjsKIAkgICAgc3RhdGljIFhDaGFyU3RydWN0CV9fbnVsbF9jaGFyID0geyAwLCAwLCAwLCAwLCAwLCAwIH07CiAKLQkgICAgQ0lfR0VUX0NIQVJfSU5GTyh4ZnMsIHhmcy0+ZGVmYXVsdF9jaGFyLCAmX19udWxsX2NoYXIsIGRlZik7CisJICAgIENJX0dFVF9DSEFSX0lORk8ocGZvLT5mcywgcGZvLT5mcy0+ZGVmYXVsdF9jaGFyLCAmX19udWxsX2NoYXIsCisJCQkgICAgIGRlZik7CiAKIAkgICAgZm9yIChpID0gZmlyc3RDaGFyOyBpIDw9IGxhc3RDaGFyOyBpKyspCiAJICAgIHsKLQkJaWYgKGkgPj0geGZzLT5taW5fY2hhcl9vcl9ieXRlMiAmJiBpIDw9IHhmcy0+bWF4X2NoYXJfb3JfYnl0ZTIpCisJCWlmIChpID49IHBmby0+ZnMtPm1pbl9jaGFyX29yX2J5dGUyICYmIAorCQkgICAgaSA8PSBwZm8tPmZzLT5tYXhfY2hhcl9vcl9ieXRlMikKIAkJewotCQkgICAgY3MgPSAmeGZzLT5wZXJfY2hhclsoaSAtIHhmcy0+bWluX2NoYXJfb3JfYnl0ZTIpXTsgCisJCSAgICBjcyA9ICZwZm8tPmZzLT5wZXJfY2hhclsoaSAtIHBmby0+ZnMtPm1pbl9jaGFyX29yX2J5dGUyKV07IAogCQkgICAgaWYgKENJX05PTkVYSVNUQ0hBUihjcykpIGNzID0gZGVmOyAKICAgCQl9IGVsc2UgY3MgPSBkZWY7Ci0JCSpidWZmZXIrKyA9IE1BWChjcy0+d2lkdGgsIDAgKTsKKwkJaWYocGZvLT5scFgxMVRyYW5zKQorCQkgICAgKmJ1ZmZlcisrID0gTUFYKGNzLT5hdHRyaWJ1dGVzLCAwKSAqCisJCSAgICAgIHBmby0+bHBYMTFUcmFucy0+cGl4ZWxzaXplIC8gMTAwMC4wOworCQllbHNlCisJCSAgICAqYnVmZmVyKysgPSBNQVgoY3MtPndpZHRoLCAwICk7CiAJICAgIH0KIAl9CiAKZGlmZiAtLWdpdCBhL2lmMTYzMi9idWlsdGluLmMgYi9pZjE2MzIvYnVpbHRpbi5jCmluZGV4IDQwYzM2NTIuLmIzMDA3MzIgMTAwNjQ0Ci0tLSBhL2lmMTYzMi9idWlsdGluLmMKKysrIGIvaWYxNjMyL2J1aWx0aW4uYwpAQCAtMTgsNiArMTgsOCBAQAogI2luY2x1ZGUgInN0YWNrZnJhbWUuaCIKICNpbmNsdWRlICJ1c2VyLmgiCiAjaW5jbHVkZSAicHJvY2Vzcy5oIgorI2luY2x1ZGUgInNub29wLmgiCisjaW5jbHVkZSAidGFzay5oIgogI2luY2x1ZGUgImRlYnVnLmgiCiAKIC8qIEJ1aWx0LWluIG1vZHVsZXMgZGVzY3JpcHRvcnMgKi8KQEAgLTExNCw4ICsxMTYsOCBAQAogICAgIHsgJlRPT0xIRUxQX0Rlc2NyaXB0b3IsIDAgfSwKICAgICB7ICZUWVBFTElCX0Rlc2NyaXB0b3IsICBETExfRkxBR19OT1RfVVNFRCB9LAogICAgIHsgJlZFUl9EZXNjcmlwdG9yLCAgICAgIDAgfSwKLSAgICB7ICZXMzJTWVNfRGVzY3JpcHRvciwgICAwIH0sCi0gICAgeyAmV0lOMzJTMTZfRGVzY3JpcHRvciwgMCB9LAorICAgIHsgJlczMlNZU19EZXNjcmlwdG9yLCAgIERMTF9GTEFHX05PVF9VU0VEIH0sCisgICAgeyAmV0lOMzJTMTZfRGVzY3JpcHRvciwgRExMX0ZMQUdfTk9UX1VTRUQgfSwKICAgICB7ICZXSU44N0VNX0Rlc2NyaXB0b3IsICBETExfRkxBR19OT1RfVVNFRCB9LAogICAgIHsgJldJTkFTUElfRGVzY3JpcHRvciwgIDAgfSwKICAgICB7ICZXSU5FUFNfRGVzY3JpcHRvciwgICBETExfRkxBR19BTFdBWVNfVVNFRCB9LApAQCAtMjE3LDYgKzIxOSwxMSBAQAogICAgIEdFVF9DUyhjcyk7IEdFVF9EUyhkcyk7CiAgICAgTkVfU2V0RW50cnlQb2ludCggaE1vZHVsZSwgNDU0LCBjcyApOwogICAgIE5FX1NldEVudHJ5UG9pbnQoIGhNb2R1bGUsIDQ1NSwgZHMgKTsKKworICAgIC8qIEluaXRpYWxpemUgS0VSTkVMLlRISE9PSyAqLworCisgICAgVEFTS19JbnN0YWxsVEhIb29rKChUSEhPT0sgKilQVFJfU0VHX1RPX0xJTiggCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNFR1BUUilORV9HZXRFbnRyeVBvaW50KCBoTW9kdWxlLCAzMzIgKSkpOwogICAKICAgICAvKiBJbml0aWFsaXplIHRoZSByZWFsLW1vZGUgc2VsZWN0b3IgZW50cnkgcG9pbnRzICovCiAKQEAgLTI0OCw2ICsyNTUsOCBAQAogICAgICAgICBJTlRfU2V0SGFuZGxlciggdmVjdG9yLCBwcm9jICk7CiAgICAgfQogCisgICAgU05PT1AxNl9Jbml0KCk7CisKICAgICByZXR1cm4gVFJVRTsKIH0KIApkaWZmIC0tZ2l0IGEvaWYxNjMyL2dkaS5zcGVjIGIvaWYxNjMyL2dkaS5zcGVjCmluZGV4IDM0MzIyYjQuLmQwYTdlZjEgMTAwNjQ0Ci0tLSBhL2lmMTYzMi9nZGkuc3BlYworKysgYi9pZjE2MzIvZ2RpLnNwZWMKQEAgLTMyNyw3ICszMjcsNyBAQAogNDk5IHN0dWIgR2V0RW5oTWV0YWZpbGVIZWFkZXIKIDUwMSBzdHViIEdldEVuaE1ldGFmaWxlUGFsZXR0ZUVudHJpZXMKIDUwMiBwYXNjYWwxNiBQb2x5QmV6aWVyKHdvcmQgcHRyIHdvcmQpIFBvbHlCZXppZXIxNgotNTAzIHN0dWIgUG9seUJlemllclRvCis1MDMgcGFzY2FsMTYgUG9seUJlemllclRvKHdvcmQgcHRyIHdvcmQpIFBvbHlCZXppZXJUbzE2CiA1MDQgc3R1YiBQbGF5RW5oTWV0YWZpbGVSZWNvcmQKIDUwNSBzdHViIFNldEVuaE1ldGFmaWxlQml0cwogNTA2IHN0dWIgU2V0TWV0YVJnbgpkaWZmIC0tZ2l0IGEvaWYxNjMyL2tlcm5lbC5zcGVjIGIvaWYxNjMyL2tlcm5lbC5zcGVjCmluZGV4IGE1N2M5ODcuLjkxOGYxMjkgMTAwNjQ0Ci0tLSBhL2lmMTYzMi9rZXJuZWwuc3BlYworKysgYi9pZjE2MzIva2VybmVsLnNwZWMKQEAgLTI1Myw3ICsyNTMsNyBAQAogMzI3IHN0dWIgS0VSTkVMXzMyNwogMzI4IHN0dWIgX0RlYnVnT3V0cHV0CiAzMjkgcGFzY2FsMTYgSzMyOShzdHIgd29yZCkgRGVidWdGaWxsQnVmZmVyCi0jMzMyIHN0dWIgVEhIT09LCiszMzIgbG9uZyBUSEhPT0soMCAwIDAgMCAwIDAgMCAwKQogMzM0IHBhc2NhbDE2IElzQmFkUmVhZFB0cihzZWdwdHIgd29yZCkgSXNCYWRSZWFkUHRyMTYKIDMzNSBwYXNjYWwxNiBJc0JhZFdyaXRlUHRyKHNlZ3B0ciB3b3JkKSBJc0JhZFdyaXRlUHRyMTYKIDMzNiBwYXNjYWwxNiBJc0JhZENvZGVQdHIoc2VncHRyKSBJc0JhZENvZGVQdHIxNgpAQCAtMzE4LDcgKzMxOCw3IEBACiA0NzEgcGFzY2FsIEtFUk5FTF80NzEoKSBfS0VSTkVMXzQ3MQogNDcyIHJlZ2lzdGVyIEtFUk5FTF80NzIoKSBfS0VSTkVMXzQ3MgogNDczIHN0dWIgS0VSTkVMXzQ3MwotNDc1IHJldHVybiBLRVJORUxfNDc1IDAgMAorNDc1IHJlZ2lzdGVyIEtFUk5FTF80NzUoKSBfS0VSTkVMXzQ3NQogNDgwIHN0dWIgS0VSTkVMXzQ4MAogNDgxIHN0dWIgS0VSTkVMXzQ4MQogNDgyIHBhc2NhbCBMb2FkTGlicmFyeTMyKHN0cikgTG9hZExpYnJhcnkzMkEKZGlmZiAtLWdpdCBhL2lmMTYzMi9tbXN5c3RlbS5zcGVjIGIvaWYxNjMyL21tc3lzdGVtLnNwZWMKaW5kZXggNGIxMThiZi4uZDEzYWUxMiAxMDA2NDQKLS0tIGEvaWYxNjMyL21tc3lzdGVtLnNwZWMKKysrIGIvaWYxNjMyL21tc3lzdGVtLnNwZWMKQEAgLTEzNCw3ICsxMzQsNyBAQAogOTAwICAgIHBhc2NhbCAgbW1UYXNrQ3JlYXRlKHB0ciBsb25nIGxvbmcpIG1tVGFza0NyZWF0ZTE2CiA5MDIgICAgc3R1YiAgICBNTVRBU0tCTE9DSwogOTAzICAgIHBhc2NhbCAgbW1UYXNrU2lnbmFsKHdvcmQpIG1tVGFza1NpZ25hbDE2Ci05MDQgICAgc3R1YiAgICBNTUdFVENVUlJFTlRUQVNLCis5MDQgICAgcGFzY2FsICBtbUdldEN1cnJlbnRUYXNrKCkgV0lOMTZfR2V0Q3VycmVudFRhc2sgI2p1c3QgdGhlIHNhbWUKIDkwNSAgICBzdHViICAgIE1NVEFTS1lJRUxECiAxMTAwICAgcGFzY2FsICBEUlZPUEVOKHN0ciBzdHIgbG9uZykgRHJ2T3BlbgogMTEwMSAgIHBhc2NhbCAgRFJWQ0xPU0Uod29yZCBsb25nIGxvbmcpIERydkNsb3NlCmRpZmYgLS1naXQgYS9pZjE2MzIvc2hlbGwuc3BlYyBiL2lmMTYzMi9zaGVsbC5zcGVjCmluZGV4IDJkOWIxMzAuLmY4YTk5YjIgMTAwNjQ0Ci0tLSBhL2lmMTYzMi9zaGVsbC5zcGVjCisrKyBiL2lmMTYzMi9zaGVsbC5zcGVjCkBAIC0yMiw4ICsyMiw4IEBACiAgMzggcGFzY2FsICAgRmluZEVudmlyb25tZW50U3RyaW5nKHB0cikgRmluZEVudmlyb25tZW50U3RyaW5nCiAgMzkgcGFzY2FsMTYgSW50ZXJuYWxFeHRyYWN0SWNvbih3b3JkIHB0ciBzX3dvcmQgd29yZCkgSW50ZXJuYWxFeHRyYWN0SWNvbgogIDQwIHN0dWIgRXh0cmFjdEljb25FeAotIDk4IHN0dWIgU0hMMzIxNl9USFVOS0RBVEExNgotIDk5IHN0dWIgU0hMMTYzMl9USFVOS0RBVEExNgorIyA5OCBzdHViIFNITDMyMTZfVEhVTktEQVRBMTYKKyMgOTkgc3R1YiBTSEwxNjMyX1RIVU5LREFUQTE2CiAKICMxMDAgICA0ICAwNTUwICBIRVJFVEhBUkJFVFlHQVJTIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQogIzEwMSAgIDggIDAxMGUgIEZJTkRFWEVETEdQUk9DIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQpkaWZmIC0tZ2l0IGEvaWYxNjMyL3Nub29wLmMgYi9pZjE2MzIvc25vb3AuYwppbmRleCBlMjI0NjYyLi4zOTM1OTAxIDEwMDY0NAotLS0gYS9pZjE2MzIvc25vb3AuYworKysgYi9pZjE2MzIvc25vb3AuYwpAQCAtMTg2LDYgKzE4NiwxNiBAQAogCQlmdW4tPm5hbWUgPSBIRUFQX3N0cmR1cEEoU3lzdGVtSGVhcCwwLG5hbWUpOwogCWVsc2UKIAkJZnVuLT5uYW1lID0gSEVBUF9zdHJkdXBBKFN5c3RlbUhlYXAsMCwiIik7CisJLyogbW9yZSBtYWdpYy4gZG8gbm90IHRyeSB0byBzbm9vcCB0aHVuayBkYXRhIGVudHJpZXMgKE1NU1lTVEVNKSAqLworCWlmIChzdHJjaHIoZnVuLT5uYW1lLCdfJykpIHsKKwkJY2hhciAqcz1zdHJjaHIoZnVuLT5uYW1lLCdfJyk7CisKKwkJaWYgKCFzdHJuY2FzZWNtcChzLCJfdGh1bmtkYXRhIiwxMCkpIHsKKwkJCUhlYXBGcmVlKFN5c3RlbUhlYXAsMCxmdW4tPm5hbWUpOworCQkJZnVuLT5uYW1lID0gTlVMTDsKKwkJCXJldHVybiBvcmlnZnVuOworCQl9CisJfQogCWZ1bi0+bGNhbGwgCT0gMHg5YTsKIAlmdW4tPnNucgk9IE1BS0VMT05HKDAseHNucik7CiAJZnVuLT5vcmlnZnVuCT0gb3JpZ2Z1bjsKQEAgLTMxNCwzICszMjQsOSBAQAogCXJldHVybiBvcmlnZnVuOwogfQogI2VuZGlmCS8qICFfX2kzODZfXyAqLworCit2b2lkCitTTk9PUDE2X0luaXQoKSB7CisJZm5TTk9PUDE2X0dldFByb2NBZGRyZXNzMTY9U05PT1AxNl9HZXRQcm9jQWRkcmVzczE2OworCWZuU05PT1AxNl9SZWdpc3RlckRMTD1TTk9PUDE2X1JlZ2lzdGVyRExMOworfQpkaWZmIC0tZ2l0IGEvaWYxNjMyL3dwcm9jcy5zcGVjIGIvaWYxNjMyL3dwcm9jcy5zcGVjCmluZGV4IDk2NWI2YmIuLjM2OTVhNzQgMTAwNjQ0Ci0tLSBhL2lmMTYzMi93cHJvY3Muc3BlYworKysgYi9pZjE2MzIvd3Byb2NzLnNwZWMKQEAgLTI4NiwzICsyODYsNCBAQAogIzQxNSByZWdpc3RlciBWWERfUHJpbnRlcigpIFZYRF9QcmludGVyCiA0MjMgcmVnaXN0ZXIgVlhEX1NoZWxsKCkgVlhEX1NoZWxsCiA0MzMgcmVnaXN0ZXIgVlhEX1BhZ2VGaWxlKCkgVlhEX1BhZ2VGaWxlCis0NDUgcmVnaXN0ZXIgVlhEX1dpbjMycygpIFZYRF9XaW4zMnMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYml0bWFwLmggYi9pbmNsdWRlL2JpdG1hcC5oCmluZGV4IGE5ZThjMzMuLjU5OTNiMWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYml0bWFwLmgKKysrIGIvaW5jbHVkZS9iaXRtYXAuaApAQCAtMjIsNiArMjIsMjQgQEAKIAogI2VuZGlmCiAKKyAgLyogQWRkaXRpb25hbCBpbmZvIGZvciBESUIgc2VjdGlvbiBvYmplY3RzICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIC8qIFdpbmRvd3MgRElCIHNlY3Rpb24gKi8KKyAgICBESUJTRUNUSU9OICBkaWJTZWN0aW9uOworCisgICAgLyogTWFwcGluZyBzdGF0dXMgKi8KKyAgICBlbnVtIHsgRElCX05vSGFuZGxlciwgRElCX0luU3luYywgRElCX0FwcE1vZCwgRElCX0dkaU1vZCB9IHN0YXR1czsKKworICAgIC8qIENvbG9yIG1hcCBpbmZvICovCisgICAgaW50ICAgICAgICAgbkNvbG9yTWFwOworICAgIGludCAgICAgICAgKmNvbG9yTWFwOworCisgICAgLyogQ2FjaGVkIFhJbWFnZSAqLworICAgIFhJbWFnZSAgICAgKmltYWdlOworCit9IERJQlNFQ1RJT05PQko7CisKICAgLyogR0RJIGxvZ2ljYWwgYml0bWFwIG9iamVjdCAqLwogdHlwZWRlZiBzdHJ1Y3QKIHsKQEAgLTMxLDExICs0OSw3IEBACiAgICAgU0laRTE2ICAgICAgc2l6ZTsgICAvKiBGb3IgU2V0Qml0bWFwRGltZW5zaW9uKCkgKi8KIAogICAgIC8qIEZvciBkZXZpY2UtaW5kZXBlbmRlbnQgYml0bWFwczogKi8KLSAgICBESUJTRUNUSU9OICpkaWJTZWN0aW9uOwotICAgIFJHQlFVQUQgICAgKmNvbG9yTWFwOwotICAgIGludCAgICAgICAgIG5Db2xvck1hcDsKLSAgICAvKiBESUJTRUNUSU9OIG1hcHBpbmcgc3RhdHVzICovCi0gICAgZW51bSB7IERJQl9Ob0hhbmRsZXIsIERJQl9JblN5bmMsIERJQl9BcHBNb2QsIERJQl9HZGlNb2QgfSBzdGF0dXM7CisgICAgRElCU0VDVElPTk9CSiAqZGliOwogCiB9IEJJVE1BUE9CSjsKIApAQCAtNzEsNyArODUsOCBAQAogZXh0ZXJuIGludCBESUJfR2V0WEltYWdlV2lkdGhCeXRlcyggaW50IHdpZHRoLCBpbnQgZGVwdGggKTsKIGV4dGVybiBpbnQgRElCX0JpdG1hcEluZm9TaXplKCBCSVRNQVBJTkZPICogaW5mbywgV09SRCBjb2xvcnVzZSApOwogZXh0ZXJuIHZvaWQgRElCX1VwZGF0ZURJQlNlY3Rpb24oIERDICpkYywgQk9PTDMyIHRvRElCICk7Ci0KK2V4dGVybiB2b2lkIERJQl9EZWxldGVESUJTZWN0aW9uKCBCSVRNQVBPQkogKmJtcCApOworZXh0ZXJuIHZvaWQgRElCX1NlbGVjdERJQlNlY3Rpb24oIERDICpkYywgQklUTUFQT0JKICpibXAgKTsKIAogICAvKiBvYmplY3RzL29lbWJpdG1hcC5jICovCiBleHRlcm4gQk9PTDMyIE9CTV9Jbml0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb21tY3RybC5oIGIvaW5jbHVkZS9jb21tY3RybC5oCmluZGV4IDUyM2NjYTIuLjMyYTUzNzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29tbWN0cmwuaAorKysgYi9pbmNsdWRlL2NvbW1jdHJsLmgKQEAgLTcsMTcgKzcsMTYgQEAKIAogI2luY2x1ZGUgIndpbmRvd3MuaCIKIAorQk9PTDMyIFdJTkFQSSBTaG93SGlkZU1lbnVDdGwgKEhXTkQzMiwgVUlOVDMyLCBMUElOVDMyKTsKIFZPSUQgV0lOQVBJIEdldEVmZmVjdGl2ZUNsaWVudFJlY3QgKEhXTkQzMiwgTFBSRUNUMzIsIExQSU5UMzIpOwotCi0KLXZvaWQgV0lOQVBJIEluaXRDb21tb25Db250cm9scyh2b2lkKTsKK1ZPSUQgV0lOQVBJIEluaXRDb21tb25Db250cm9scyAoVk9JRCk7CiAKIHR5cGVkZWYgc3RydWN0IHRhZ0lOSVRDT01NT05DT05UUk9MU0VYIHsKICAgICBEV09SRCBkd1NpemU7CiAgICAgRFdPUkQgZHdJQ0M7CiB9IElOSVRDT01NT05DT05UUk9MU0VYLCAqTFBJTklUQ09NTU9OQ09OVFJPTFNFWDsKIAotQk9PTDMyIFdJTkFQSSBJbml0Q29tbW9uQ29udHJvbHNFeChMUElOSVRDT01NT05DT05UUk9MU0VYKTsKK0JPT0wzMiBXSU5BUEkgSW5pdENvbW1vbkNvbnRyb2xzRXggKExQSU5JVENPTU1PTkNPTlRST0xTRVgpOwogCiAjZGVmaW5lIElDQ19MSVNUVklFV19DTEFTU0VTICAgMHgwMDAwMDAwMSAgLyogbGlzdHZpZXcsIGhlYWRlciAqLwogI2RlZmluZSBJQ0NfVFJFRVZJRVdfQ0xBU1NFUyAgIDB4MDAwMDAwMDIgIC8qIHRyZWV2aWV3LCB0b29sdGlwcyAqLwpAQCAtNTIsOSArNTEsMTIgQEAKIAogCiAvKiBjb21tb24gY29udHJvbCBzaGFyZWQgbWVzc2FnZXMgKi8KLSNkZWZpbmUgQ0NNX0ZJUlNUICAgICAgICAgICAweDIwMDAKKyNkZWZpbmUgQ0NNX0ZJUlNUICAgICAgICAgICAgMHgyMDAwCiAKLSNkZWZpbmUgQ0NNX1NFVEJLQ09MT1IgICAgICAoQ0NNX0ZJUlNUKzEpICAgICAvKiBsUGFyYW0gPSBia0NvbG9yICovCisjZGVmaW5lIENDTV9TRVRCS0NPTE9SICAgICAgIChDQ01fRklSU1QrMSkgICAgIC8qIGxQYXJhbSA9IGJrQ29sb3IgKi8KKworI2RlZmluZSBDQ01fU0VUVU5JQ09ERUZPUk1BVCAoQ0NNX0ZJUlNUKzUpCisjZGVmaW5lIENDTV9HRVRVTklDT0RFRk9STUFUIChDQ01fRklSU1QrNikKIAogCiAvKiBjb21tb24gbm90aWZpY2F0aW9uIGNvZGVzICovCkBAIC03MDQsNCArNzA2LDE4NCBAQAogQ3JlYXRlTWFwcGVkQml0bWFwIChISU5TVEFOQ0UzMiwgSU5UMzIsIFVJTlQzMiwgTFBDT0xPUk1BUCwgSU5UMzIpOyAKIAogCisvKiBUb29sIHRpcHMgKi8KKworI2RlZmluZSBUT09MVElQU19DTEFTUzE2ICAgICAgICAgInRvb2x0aXBzX2NsYXNzIgorI2RlZmluZSBUT09MVElQU19DTEFTUzMyVyAgICAgICBMInRvb2x0aXBzX2NsYXNzMzIiCisjZGVmaW5lIFRPT0xUSVBTX0NMQVNTMzJBICAgICAgICAidG9vbHRpcHNfY2xhc3MzMiIKKyNkZWZpbmUgVE9PTFRJUFNfQ0xBU1MgICAgICAgICAgV0lORUxJQl9OQU1FX0FXKFRPT0xUSVBTX0NMQVNTKQorIAorI2RlZmluZSBUVFNfQUxXQVlTVElQICAgICAgICAgICAweDAxCisjZGVmaW5lIFRUU19OT1BSRUZJWCAgICAgICAgICAgIDB4MDIKKyAKKyNkZWZpbmUgVFRGX0lESVNIV05EICAgICAgICAgICAgMHgwMDAxCisjZGVmaW5lIFRURl9DRU5URVJUSVAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBUVEZfUlRMUkVBRElORyAgICAgICAgICAweDAwMDQKKyNkZWZpbmUgVFRGX1NVQkNMQVNTICAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIFRURl9UUkFDSyAgICAgICAgICAgICAgIDB4MDAyMAorI2RlZmluZSBUVEZfQUJTT0xVVEUgICAgICAgICAgICAweDAwODAKKyNkZWZpbmUgVFRGX1RSQU5TUEFSRU5UICAgICAgICAgMHgwMTAwCisjZGVmaW5lIFRURl9ESV9TRVRJVEVNICAgICAgICAgIDB4ODAwMCAgLyogdmFsaWQgb25seSBvbiB0aGUgVFROX05FRURURVhUIGNhbGxiYWNrICovCisKKworI2RlZmluZSBUVERUX0FVVE9NQVRJQyAgICAgICAgICAwCisjZGVmaW5lIFRURFRfUkVTSE9XICAgICAgICAgICAgIDEKKyNkZWZpbmUgVFREVF9BVVRPUE9QICAgICAgICAgICAgMgorI2RlZmluZSBUVERUX0lOSVRJQUwgICAgICAgICAgICAzCisKKworI2RlZmluZSBUVE1fQUNUSVZBVEUgICAgICAgICAgICAoV01fVVNFUisxKQorI2RlZmluZSBUVE1fU0VUREVMQVlUSU1FICAgICAgICAoV01fVVNFUiszKQorI2RlZmluZSBUVE1fQUREVE9PTDMyQSAgICAgICAgICAoV01fVVNFUis0KQorI2RlZmluZSBUVE1fQUREVE9PTDMyVyAgICAgICAgICAoV01fVVNFUis1MCkKKyNkZWZpbmUgVFRNX0FERFRPT0wgV0lORUxJQl9OQU1FX0FXKFRUTV9BRERUT09MKQorI2RlZmluZSBUVE1fREVMVE9PTDMyQSAgICAgICAgICAoV01fVVNFUis1KQorI2RlZmluZSBUVE1fREVMVE9PTDMyVyAgICAgICAgICAoV01fVVNFUis1MSkKKyNkZWZpbmUgVFRNX0RFTFRPT0wgV0lORUxJQl9OQU1FX0FXKFRUTV9ERUxUT09MKQorI2RlZmluZSBUVE1fTkVXVE9PTFJFQ1QzMkEgICAgICAoV01fVVNFUis2KQorI2RlZmluZSBUVE1fTkVXVE9PTFJFQ1QzMlcgICAgICAoV01fVVNFUis1MikKKyNkZWZpbmUgVFRNX05FV1RPT0xSRUNUIFdJTkVMSUJfTkFNRV9BVyhUVE1fTkVXVE9PTFJFQ1QpCisjZGVmaW5lIFRUTV9SRUxBWUVWRU5UICAgICAgICAgIChXTV9VU0VSKzcpCisjZGVmaW5lIFRUTV9HRVRUT09MSU5GTzMyQSAgICAgIChXTV9VU0VSKzgpCisjZGVmaW5lIFRUTV9HRVRUT09MSU5GTzMyVyAgICAgIChXTV9VU0VSKzUzKQorI2RlZmluZSBUVE1fR0VUVE9PTElORk8gV0lORUxJQl9OQU1FX0FXKFRUTV9HRVRUT09MSU5GTykKKyNkZWZpbmUgVFRNX1NFVFRPT0xJTkZPMzJBICAgICAgKFdNX1VTRVIrOSkKKyNkZWZpbmUgVFRNX1NFVFRPT0xJTkZPMzJXICAgICAgKFdNX1VTRVIrNTQpCisjZGVmaW5lIFRUTV9TRVRUT09MSU5GTyBXSU5FTElCX05BTUVfQVcoVFRNX1NFVFRPT0xJTkZPKQorI2RlZmluZSBUVE1fSElUVEVTVDMyQSAgICAgICAgICAoV01fVVNFUisxMCkKKyNkZWZpbmUgVFRNX0hJVFRFU1QzMlcgICAgICAgICAgKFdNX1VTRVIrNTUpCisjZGVmaW5lIFRUTV9ISVRURVNUIFdJTkVMSUJfTkFNRV9BVyhUVE1fSElUVEVTVCkKKyNkZWZpbmUgVFRNX0dFVFRFWFQzMkEgICAgICAgICAgKFdNX1VTRVIrMTEpCisjZGVmaW5lIFRUTV9HRVRURVhUMzJXICAgICAgICAgIChXTV9VU0VSKzU2KQorI2RlZmluZSBUVE1fR0VUVEVYVCBXSU5FTElCX05BTUVfQVcoVFRNX0dFVFRFWFQpCisjZGVmaW5lIFRUTV9VUERBVEVUSVBURVhUMzJBICAgIChXTV9VU0VSKzEyKQorI2RlZmluZSBUVE1fVVBEQVRFVElQVEVYVDMyVyAgICAoV01fVVNFUis1NykKKyNkZWZpbmUgVFRNX1VQREFURVRJUFRFWFQgV0lORUxJQl9OQU1FX0FXKFRUTV9VUERBVEVUSVBURVhUKQorI2RlZmluZSBUVE1fR0VUVE9PTENPVU5UICAgICAgICAoV01fVVNFUisxMykKKyNkZWZpbmUgVFRNX0VOVU1UT09MUzMyQSAgICAgICAgKFdNX1VTRVIrMTQpCisjZGVmaW5lIFRUTV9FTlVNVE9PTFMzMlcgICAgICAgIChXTV9VU0VSKzU4KQorI2RlZmluZSBUVE1fRU5VTVRPT0xTIFdJTkVMSUJfTkFNRV9BVyhUVE1fRU5VTVRPT0xTKQorI2RlZmluZSBUVE1fR0VUQ1VSUkVOVFRPT0wzMkEgICAoV01fVVNFUisxNSkKKyNkZWZpbmUgVFRNX0dFVENVUlJFTlRUT09MMzJXICAgKFdNX1VTRVIrNTkpCisjZGVmaW5lIFRUTV9HRVRDVVJSRU5UVE9PTCBXSU5FTElCX05BTUVfQVcoVFRNX0dFVENVUlJFTlRUT09MKQorI2RlZmluZSBUVE1fV0lORE9XRlJPTVBPSU5UICAgICAoV01fVVNFUisxNikKKyNkZWZpbmUgVFRNX1RSQUNLQUNUSVZBVEUgICAgICAgKFdNX1VTRVIrMTcpCisjZGVmaW5lIFRUTV9UUkFDS1BPU0lUSU9OICAgICAgIChXTV9VU0VSKzE4KQorI2RlZmluZSBUVE1fU0VUVElQQktDT0xPUiAgICAgICAoV01fVVNFUisxOSkKKyNkZWZpbmUgVFRNX1NFVFRJUFRFWFRDT0xPUiAgICAgKFdNX1VTRVIrMjApCisjZGVmaW5lIFRUTV9HRVRERUxBWVRJTUUgICAgICAgIChXTV9VU0VSKzIxKQorI2RlZmluZSBUVE1fR0VUVElQQktDT0xPUiAgICAgICAoV01fVVNFUisyMikKKyNkZWZpbmUgVFRNX0dFVFRJUFRFWFRDT0xPUiAgICAgKFdNX1VTRVIrMjMpCisjZGVmaW5lIFRUTV9TRVRNQVhUSVBXSURUSCAgICAgIChXTV9VU0VSKzI0KQorI2RlZmluZSBUVE1fR0VUTUFYVElQV0lEVEggICAgICAoV01fVVNFUisyNSkKKyNkZWZpbmUgVFRNX1NFVE1BUkdJTiAgICAgICAgICAgKFdNX1VTRVIrMjYpCisjZGVmaW5lIFRUTV9HRVRNQVJHSU4gICAgICAgICAgIChXTV9VU0VSKzI3KQorI2RlZmluZSBUVE1fUE9QICAgICAgICAgICAgICAgICAoV01fVVNFUisyOCkKKyNkZWZpbmUgVFRNX1VQREFURSAgICAgICAgICAgICAgKFdNX1VTRVIrMjkpCisKK3R5cGVkZWYgc3RydWN0IHRhZ1RPT0xJTkZPQSB7CisgICAgVUlOVDMyIGNiU2l6ZTsKKyAgICBVSU5UMzIgdUZsYWdzOworICAgIEhXTkQzMiBod25kOworICAgIFVJTlQzMiB1SWQ7CisgICAgUkVDVDMyIHJlY3Q7CisgICAgSElOU1RBTkNFMzIgaGluc3Q7CisgICAgTFBTVFIgbHBzelRleHQ7CisgICAgTFBBUkFNIGxQYXJhbTsKK30gVE9PTElORk9BLCAqUFRPT0xJTkZPQSwgKkxQVE9PTElORk9BOworCit0eXBlZGVmIHN0cnVjdCB0YWdUT09MSU5GT1cgeworICAgIFVJTlQzMiBjYlNpemU7CisgICAgVUlOVDMyIHVGbGFnczsKKyAgICBIV05EMzIgaHduZDsKKyAgICBVSU5UMzIgdUlkOworICAgIFJFQ1QzMiByZWN0OworICAgIEhJTlNUQU5DRTMyIGhpbnN0OworICAgIExQV1NUUiBscHN6VGV4dDsKKyAgICBMUEFSQU0gbFBhcmFtOworfSBUT09MSU5GT1csICpQVE9PTElORk9XLCAqTFBUT09MSU5GT1c7CisKKworCisKKworLyogUmViYXIgY29udHJvbCAqLworCisjZGVmaW5lIFJFQkFSQ0xBU1NOQU1FMTYgICAgICAgICJSZUJhcldpbmRvdyIKKyNkZWZpbmUgUkVCQVJDTEFTU05BTUUzMkEgICAgICAgIlJlQmFyV2luZG93MzIiCisjZGVmaW5lIFJFQkFSQ0xBU1NOQU1FMzJXICAgICAgIEwiUmVCYXJXaW5kb3czMiIKKyNkZWZpbmUgUkVCQVJDTEFTU05BTUUgIFdJTkVMSUJfTkFNRV9BVyhSRUJBUkNMQVNTTkFNRSkKKworCisvKiBUcmFja2JhciBjb250cm9sICovCisKKyNkZWZpbmUgVFJBQ0tCQVJfQ0xBU1MxNiAgICAgICAgIm1zY3Rsc190cmFja2JhciIKKyNkZWZpbmUgVFJBQ0tCQVJfQ0xBU1MzMkEgICAgICAgIm1zY3Rsc190cmFja2JhcjMyIgorI2RlZmluZSBUUkFDS0JBUl9DTEFTUzMyVyAgICAgICBMIm1zY3Rsc190cmFja2JhcjMyIgorI2RlZmluZSBUUkFDS0JBUl9DTEFTUyAgV0lORUxJQl9OQU1FX0FXKFRSQUNLQkFSX0NMQVNTKQorCisjZGVmaW5lIFRCU19BVVRPVElDS1MgICAgICAgICAgIDB4MDAwMQorI2RlZmluZSBUQlNfVkVSVCAgICAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgVEJTX0hPUlogICAgICAgICAgICAgICAgMHgwMDAwCisjZGVmaW5lIFRCU19UT1AgICAgICAgICAgICAgICAgIDB4MDAwNAorI2RlZmluZSBUQlNfQk9UVE9NICAgICAgICAgICAgICAweDAwMDAKKyNkZWZpbmUgVEJTX0xFRlQgICAgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIFRCU19SSUdIVCAgICAgICAgICAgICAgIDB4MDAwMAorI2RlZmluZSBUQlNfQk9USCAgICAgICAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgVEJTX05PVElDS1MgICAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIFRCU19FTkFCTEVTRUxSQU5HRSAgICAgIDB4MDAyMAorI2RlZmluZSBUQlNfRklYRURMRU5HVEggICAgICAgICAweDAwNDAKKyNkZWZpbmUgVEJTX05PVEhVTUIgICAgICAgICAgICAgMHgwMDgwCisjZGVmaW5lIFRCU19UT09MVElQUyAgICAgICAgICAgIDB4MDEwMAorCisjZGVmaW5lIFRCTV9HRVRQT1MgICAgICAgICAgICAgIChXTV9VU0VSKQorI2RlZmluZSBUQk1fR0VUUkFOR0VNSU4gICAgICAgICAoV01fVVNFUisxKQorI2RlZmluZSBUQk1fR0VUUkFOR0VNQVggICAgICAgICAoV01fVVNFUisyKQorI2RlZmluZSBUQk1fR0VUVElDICAgICAgICAgICAgICAoV01fVVNFUiszKQorI2RlZmluZSBUQk1fU0VUVElDICAgICAgICAgICAgICAoV01fVVNFUis0KQorI2RlZmluZSBUQk1fU0VUUE9TICAgICAgICAgICAgICAoV01fVVNFUis1KQorCisjZGVmaW5lIFRCTV9HRVRTRUxTVEFSVCAgICAgICAgIChXTV9VU0VSKzE3KQorI2RlZmluZSBUQk1fR0VUU0VMRU5EICAgICAgICAgICAoV01fVVNFUisxOCkKKyNkZWZpbmUgVEJNX0NMRUFSU0VMICAgICAgICAgICAgKFdNX1VTRVIrMTkpCisjZGVmaW5lIFRCTV9TRVRUSUNGUkVRICAgICAgICAgIChXTV9VU0VSKzIwKQorI2RlZmluZSBUQk1fU0VUUEFHRVNJWkUgICAgICAgICAoV01fVVNFUisyMSkKKyNkZWZpbmUgVEJNX0dFVFBBR0VTSVpFICAgICAgICAgKFdNX1VTRVIrMjIpCisjZGVmaW5lIFRCTV9TRVRMSU5FU0laRSAgICAgICAgIChXTV9VU0VSKzIzKQorI2RlZmluZSBUQk1fR0VUTElORVNJWkUgICAgICAgICAoV01fVVNFUisyNCkKKyNkZWZpbmUgVEJNX0dFVFRIVU1CUkVDVCAgICAgICAgKFdNX1VTRVIrMjUpCisjZGVmaW5lIFRCTV9HRVRDSEFOTkVMUkVDVCAgICAgIChXTV9VU0VSKzI2KQorI2RlZmluZSBUQk1fU0VUVEhVTUJMRU5HVEggICAgICAoV01fVVNFUisyNykKKyNkZWZpbmUgVEJNX0dFVFRIVU1CTEVOR1RIICAgICAgKFdNX1VTRVIrMjgpCisKKworLyogUGFnZXIgY29udHJvbCAqLworCisjZGVmaW5lIFdDX1BBR0VTQ1JPTExFUjMyQSAgICAgICJTeXNQYWdlciIKKyNkZWZpbmUgV0NfUEFHRVNDUk9MTEVSMzJXICAgICAgTCJTeXNQYWdlciIKKyNkZWZpbmUgV0NfUEFHRVNDUk9MTEVSICBXSU5FTElCX05BTUVfQVcoV0NfUEFHRVNDUk9MTEVSKQorCisKKy8qIFRyZWV2aWV3IGNvbnRyb2wgKi8KKworI2RlZmluZSBXQ19UUkVFVklFVzMyQSAgICAgICAgICAiU3lzVHJlZVZpZXczMiIKKyNkZWZpbmUgV0NfVFJFRVZJRVczMlcgICAgICAgICAgTCJTeXNUcmVlVmlldzMyIgorI2RlZmluZSBXQ19UUkVFVklFVyAgV0lORUxJQl9OQU1FX0FXKFdDX1RSRUVWSUVXKQorCisjZGVmaW5lIFRWX0ZJUlNUICAgICAgMHgxMTAwCisKKworLyogTGlzdHZpZXcgY29udHJvbCAqLworCisjZGVmaW5lIFdDX0xJU1RWSUVXMzJBICAgICAgICAgICJTeXNMaXN0VmlldzMyIgorI2RlZmluZSBXQ19MSVNUVklFVzMyVyAgICAgICAgICBMIlN5c0xpc3RWaWV3MzIiCisjZGVmaW5lIFdDX0xJU1RWSUVXICBXSU5FTElCX05BTUVfQVcoV0NfTElTVFZJRVcpCisKKyNkZWZpbmUgTFZNX0ZJUlNUICAgICAgICAgICAgICAgMHgxMDAwCisKKyNkZWZpbmUgTFZNX1NFVEJLQ09MT1IgICAgICAgICAgKExWTV9GSVJTVCsxKQorI2RlZmluZSBMVk1fU0VUSU1BR0VMSVNUICAgICAgICAoTFZNX0ZJUlNUKzMpCisKKworCiAjZW5kaWYgIC8qIF9fV0lORV9DT01NQ1RSTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RkcmF3LmggYi9pbmNsdWRlL2RkcmF3LmgKaW5kZXggMDRkNDljNS4uY2MwODE4ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kZHJhdy5oCisrKyBiL2luY2x1ZGUvZGRyYXcuaApAQCAtMiw2ICsyLDkgQEAKICNkZWZpbmUgX19XSU5FX0REUkFXX0gKIAogI2luY2x1ZGUgInRzX3hsaWIuaCIKKyNpZmRlZiBIQVZFX0xJQlhYU0hNCisjaW5jbHVkZSAidHNfeHNobS5oIgorI2VuZGlmCiAKICNpZm5kZWYJRElSRUNURFJBV19WRVJTSU9OCiAjZGVmaW5lCURJUkVDVERSQVdfVkVSU0lPTgkweDA1MDAKQEAgLTg2OSwyMSArODcyLDM0IEBACiAgICAgU1RETUVUSE9EKFdhaXRGb3JWZXJ0aWNhbEJsYW5rKShUSElTXyBEV09SRCwgSEFORExFMzIgKSBQVVJFOwogfSAqTFBESVJFQ1REUkFXX1ZUQUJMRSxJRGlyZWN0RHJhd19WVGFibGU7CiAKLXN0cnVjdCBfZGlyZWN0ZHJhd2RhdGEgeworc3RydWN0IF9jb21tb25fZGlyZWN0ZHJhd2RhdGEgewogICAgIERXT1JECQkJZGVwdGg7Ci0gICAgRFdPUkQJCQl2cF93aWR0aCx2cF9oZWlnaHQ7IC8qIHZpZXdwb3J0IGRpbWVuc2lvbiAqLwogICAgIERXT1JECQkJaGVpZ2h0LHdpZHRoOwkvKiBTZXREaXNwbGF5TW9kZSAqLwotICAgIERXT1JECQkJZmJfd2lkdGgsZmJfaGVpZ2h0LGZiX2JhbmtzaXplLGZiX21lbXNpemU7CiAgICAgSFdORDMyCQkJbWFpbndpbmRvdzsKK307CisKK3N0cnVjdCBfZGdhX2RpcmVjdGRyYXdkYXRhIHsKKyAgICBEV09SRAkJCWZiX3dpZHRoLGZiX2hlaWdodCxmYl9iYW5rc2l6ZSxmYl9tZW1zaXplOwogICAgIHZvaWQJCQkqZmJfYWRkcjsKICAgICB1bnNpZ25lZCBpbnQJCXZwbWFzazsKIH07CiAKK3N0cnVjdCBfeGxpYl9kaXJlY3RkcmF3ZGF0YSB7CisgICAgV2luZG93CQlkcmF3YWJsZTsKKyAgICAvKiBhcmUgdGhlc2UgbmVlZGVkIGZvciBhbnl0aGluZz8gKGRyYXdfc3VyZiBpcyB0aGUgYWN0aXZlIHN1cmZhY2UpCisgICAgICAgSURpcmVjdERyYXdTdXJmYWNlCSpzdXJmczsKKyAgICAgICBEV09SRAkJbnVtX3N1cmZzLCBhbGxvY19zdXJmcywgZHJhd19zdXJmOyAqLworfTsKIAogc3RydWN0IElEaXJlY3REcmF3IHsKIAlMUERJUkVDVERSQVdfVlRBQkxFCWxwdnRibDsKIAlEV09SRAkJCXJlZjsKLQlzdHJ1Y3QgX2RpcmVjdGRyYXdkYXRhCWQ7CisJc3RydWN0IF9jb21tb25fZGlyZWN0ZHJhd2RhdGEgZDsKKwl1bmlvbiB7CisJCXN0cnVjdCBfeGxpYl9kaXJlY3RkcmF3ZGF0YSB4bGliOworCQlzdHJ1Y3QgX3hsaWJfZGlyZWN0ZHJhd2RhdGEgeHNobTsKKwkJc3RydWN0IF9kZ2FfZGlyZWN0ZHJhd2RhdGEgIGRnYTsKKwl9IGU7CiB9OwogI3VuZGVmIFRISVMKIApAQCAtOTMyLDE5ICs5NDgsNDEgQEAKIC8qIE1VU1QgSEFWRSBUSEUgU0FNRSBMQVlPVVQgQVMgc3RydWN0IElEaXJlY3REcmF3ICovCiAKIHN0cnVjdCBJRGlyZWN0RHJhdzIgewotICAgIExQRElSRUNURFJBVzJfVlRBQkxFCWxwdnRibDsKLSAgICBEV09SRAkJCXJlZjsKLSAgICBzdHJ1Y3QgX2RpcmVjdGRyYXdkYXRhCWQ7CisJTFBESVJFQ1REUkFXMl9WVEFCTEUJbHB2dGJsOworCURXT1JECQkJcmVmOworCXN0cnVjdCBfY29tbW9uX2RpcmVjdGRyYXdkYXRhCWQ7CisJdW5pb24geworCQlzdHJ1Y3QgX3hsaWJfZGlyZWN0ZHJhd2RhdGEgeGxpYjsKKwkJLyogb25seSBkaWZmZXJlbnQgaW4gaW1hZ2UgY3JlYXRlJnB1dCAqLworCQlzdHJ1Y3QgX3hsaWJfZGlyZWN0ZHJhd2RhdGEgeHNobTsKKwkJc3RydWN0IF9kZ2FfZGlyZWN0ZHJhd2RhdGEgZGdhOworCX0gZTsKIH07CiAjdW5kZWYgVEhJUwogCiAjZGVmaW5lIFRISVMgTFBESVJFQ1REUkFXU1VSRkFDRSB0aGlzCi1zdHJ1Y3QgX2RpcmVjdGRyYXdzdXJmYWNlIHsKLSAgICBMUFZPSUQJCXN1cmZhY2U7CitzdHJ1Y3QgX2NvbW1vbl9kaXJlY3RkcmF3c3VyZmFjZSB7CiAgICAgTFBESVJFQ1REUkFXUEFMRVRURQlwYWxldHRlOwotICAgIERXT1JECQlmYl9oZWlnaHQsbHBpdGNoLHdpZHRoLGhlaWdodDsKICAgICBMUERJUkVDVERSQVcJZGRyYXc7CiAgICAgTFBESVJFQ1REUkFXU1VSRkFDRQliYWNrYnVmZmVyOworICAgIExQVk9JRAkJc3VyZmFjZTsKKyAgICBEV09SRAkJbHBpdGNoLHdpZHRoLGhlaWdodDsKK307CisKK3N0cnVjdCBfZGdhX2RpcmVjdGRyYXdzdXJmYWNlIHsKKyAgICBEV09SRAkJZmJfaGVpZ2h0OworfTsKKworc3RydWN0IF94c2htX2RpcmVjdGRyYXdzdXJmYWNlIHsKKyAgICBYSW1hZ2UJCSppbWFnZTsKKyAgICBCT09MMzIJCXN1cmZhY2VfaXNfaW1hZ2VfZGF0YTsKKyNpZmRlZiBIQVZFX0xJQlhYU0hNCisgICAgWFNobVNlZ21lbnRJbmZvCXNobWluZm87CisjZW5kaWYKK307CitzdHJ1Y3QgX3hsaWJfZGlyZWN0ZHJhd3N1cmZhY2UgeworICAgIFhJbWFnZQkJKmltYWdlOworICAgIEJPT0wzMgkJc3VyZmFjZV9pc19pbWFnZV9kYXRhOwogfTsKIAogdHlwZWRlZiBzdHJ1Y3QgSURpcmVjdERyYXdTdXJmYWNlX1ZUYWJsZSB7CkBAIC05OTAsNyArMTAyOCwxMiBAQAogc3RydWN0IElEaXJlY3REcmF3U3VyZmFjZSB7CiAgICAgTFBESVJFQ1REUkFXU1VSRkFDRV9WVEFCTEUJbHB2dGJsOwogICAgIERXT1JECQkJcmVmOwotICAgIHN0cnVjdCBfZGlyZWN0ZHJhd3N1cmZhY2UJczsKKyAgICBzdHJ1Y3QgX2NvbW1vbl9kaXJlY3RkcmF3c3VyZmFjZQlzOworICAgIHVuaW9uIHsKKwlzdHJ1Y3QgX2RnYV9kaXJlY3RkcmF3c3VyZmFjZQlkZ2E7CisJc3RydWN0IF94c2htX2RpcmVjdGRyYXdzdXJmYWNlCXhzaG07CisJc3RydWN0IF94bGliX2RpcmVjdGRyYXdzdXJmYWNlCXhsaWI7CisgICAgfSB0OwogfTsKICN1bmRlZiBUSElTCiAjZGVmaW5lIFRISVMgTFBESVJFQ1REUkFXU1VSRkFDRTIgdGhpcwpAQCAtMTAwNyw3ICsxMDUwLDggQEAKICAgICBTVERNRVRIT0QoQmx0QmF0Y2gpKFRISVNfIExQRERCTFRCQVRDSCwgRFdPUkQsIERXT1JEICkgUFVSRTsKICAgICBTVERNRVRIT0QoQmx0RmFzdCkoVEhJU18gRFdPUkQsRFdPUkQsTFBESVJFQ1REUkFXU1VSRkFDRTIsIExQUkVDVDMyLERXT1JEKSBQVVJFOwogICAgIFNURE1FVEhPRChEZWxldGVBdHRhY2hlZFN1cmZhY2UpKFRISVNfIERXT1JELExQRElSRUNURFJBV1NVUkZBQ0UyKSBQVVJFOwotICAgIFNURE1FVEhPRChFbnVtQXR0YWNoZWRTdXJmYWNlcykoVEhJU18gTFBWT0lELExQRERFTlVNU1VSRkFDRVNDQUxMQkFDSykgUFVSRTsgICAgU1RETUVUSE9EKEVudW1PdmVybGF5Wk9yZGVycykoVEhJU18gRFdPUkQsTFBWT0lELExQRERFTlVNU1VSRkFDRVNDQUxMQkFDSykgUFVSRTsKKyAgICBTVERNRVRIT0QoRW51bUF0dGFjaGVkU3VyZmFjZXMpKFRISVNfIExQVk9JRCxMUERERU5VTVNVUkZBQ0VTQ0FMTEJBQ0spIFBVUkU7CisgICAgU1RETUVUSE9EKEVudW1PdmVybGF5Wk9yZGVycykoVEhJU18gRFdPUkQsTFBWT0lELExQRERFTlVNU1VSRkFDRVNDQUxMQkFDSykgUFVSRTsKICAgICBTVERNRVRIT0QoRmxpcCkoVEhJU18gTFBESVJFQ1REUkFXU1VSRkFDRTIsIERXT1JEKSBQVVJFOwogICAgIFNURE1FVEhPRChHZXRBdHRhY2hlZFN1cmZhY2UpKFRISVNfIExQRERTQ0FQUywgTFBESVJFQ1REUkFXU1VSRkFDRTIgRkFSICopIFBVUkU7CiAgICAgU1RETUVUSE9EKEdldEJsdFN0YXR1cykoVEhJU18gRFdPUkQpIFBVUkU7CkBAIC0xMDQyLDcgKzEwODYsMTIgQEAKIHN0cnVjdCBJRGlyZWN0RHJhd1N1cmZhY2UyIHsKICAgICBMUERJUkVDVERSQVdTVVJGQUNFMl9WVEFCTEUJbHB2dGJsOwogICAgIERXT1JECQkJcmVmOwotICAgIHN0cnVjdCBfZGlyZWN0ZHJhd3N1cmZhY2UJczsKKyAgICBzdHJ1Y3QgX2NvbW1vbl9kaXJlY3RkcmF3c3VyZmFjZQlzOworICAgIHVuaW9uIHsKKwlzdHJ1Y3QgX2RnYV9kaXJlY3RkcmF3c3VyZmFjZQlkZ2E7CisJc3RydWN0IF94bGliX2RpcmVjdGRyYXdzdXJmYWNlCXhzaG07CisJc3RydWN0IF94bGliX2RpcmVjdGRyYXdzdXJmYWNlCXhsaWI7CisgICAgfSB0OwogfTsKICN1bmRlZiBUSElTCiAjZGVmaW5lIFRISVMgTFBESVJFQ1REUkFXU1VSRkFDRTMgdGhpcwpAQCAtMTA5Nyw3ICsxMTQ2LDEyIEBACiBzdHJ1Y3QgSURpcmVjdERyYXdTdXJmYWNlMyB7CiAgICAgTFBESVJFQ1REUkFXU1VSRkFDRTNfVlRBQkxFCWxwdnRibDsKICAgICBEV09SRAkJCXJlZjsKLSAgICBzdHJ1Y3QgX2RpcmVjdGRyYXdzdXJmYWNlCXM7CisgICAgc3RydWN0IF9jb21tb25fZGlyZWN0ZHJhd3N1cmZhY2UJczsKKyAgICB1bmlvbiB7CisJc3RydWN0IF9kZ2FfZGlyZWN0ZHJhd3N1cmZhY2UJZGdhOworCXN0cnVjdCBfeGxpYl9kaXJlY3RkcmF3c3VyZmFjZQl4c2htOworCXN0cnVjdCBfeGxpYl9kaXJlY3RkcmF3c3VyZmFjZQl4bGliOworICAgIH0gdDsKIH07CiAjdW5kZWYgVEhJUwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RlYnVnLmggYi9pbmNsdWRlL2RlYnVnLmgKaW5kZXggYWQ2NWM1My4uYjIxZDM4NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kZWJ1Zy5oCisrKyBiL2luY2x1ZGUvZGVidWcuaApAQCAtNSwxMjUgKzUsMTM4IEBACiAjZW5kaWYKIAogLyogRGVmaW5pdGlvbnMgZm9yIGNoYW5uZWxzIGlkZW50aWZpZXJzICovCi0jZGVmaW5lIGRiY2hfYWNjZWwgMAotI2RlZmluZSBkYmNoX2FkdmFwaSAxCi0jZGVmaW5lIGRiY2hfYXNwaSAyCi0jZGVmaW5lIGRiY2hfYXRvbSAzCi0jZGVmaW5lIGRiY2hfYml0Ymx0IDQKLSNkZWZpbmUgZGJjaF9iaXRtYXAgNQotI2RlZmluZSBkYmNoX2NhcmV0IDYKLSNkZWZpbmUgZGJjaF9jZCA3Ci0jZGVmaW5lIGRiY2hfY2RhdWRpbyA4Ci0jZGVmaW5lIGRiY2hfY2xhc3MgOQotI2RlZmluZSBkYmNoX2NsaXBib2FyZCAxMAotI2RlZmluZSBkYmNoX2NsaXBwaW5nIDExCi0jZGVmaW5lIGRiY2hfY29tYm8gMTIKLSNkZWZpbmUgZGJjaF9jb21tIDEzCi0jZGVmaW5lIGRiY2hfY29tbWN0cmwgMTQKLSNkZWZpbmUgZGJjaF9jb21tZGxnIDE1Ci0jZGVmaW5lIGRiY2hfY29uc29sZSAxNgotI2RlZmluZSBkYmNoX2NydGRsbCAxNwotI2RlZmluZSBkYmNoX2N1cnNvciAxOAotI2RlZmluZSBkYmNoX2RjIDE5Ci0jZGVmaW5lIGRiY2hfZGRlIDIwCi0jZGVmaW5lIGRiY2hfZGRlbWwgMjEKLSNkZWZpbmUgZGJjaF9kZHJhdyAyMgotI2RlZmluZSBkYmNoX2RlYnVnIDIzCi0jZGVmaW5lIGRiY2hfZGlhbG9nIDI0Ci0jZGVmaW5lIGRiY2hfZGlucHV0IDI1Ci0jZGVmaW5lIGRiY2hfZGxsIDI2Ci0jZGVmaW5lIGRiY2hfZG9zZnMgMjcKLSNkZWZpbmUgZGJjaF9kb3NtZW0gMjgKLSNkZWZpbmUgZGJjaF9kcGxheSAyOQotI2RlZmluZSBkYmNoX2RyaXZlciAzMAotI2RlZmluZSBkYmNoX2Rzb3VuZCAzMQotI2RlZmluZSBkYmNoX2VkaXQgMzIKLSNkZWZpbmUgZGJjaF9ldmVudCAzMwotI2RlZmluZSBkYmNoX2V4ZWMgMzQKLSNkZWZpbmUgZGJjaF9maWxlIDM1Ci0jZGVmaW5lIGRiY2hfZml4dXAgMzYKLSNkZWZpbmUgZGJjaF9mb250IDM3Ci0jZGVmaW5lIGRiY2hfZ2RpIDM4Ci0jZGVmaW5lIGRiY2hfZ2xvYmFsIDM5Ci0jZGVmaW5lIGRiY2hfZ3JhcGhpY3MgNDAKLSNkZWZpbmUgZGJjaF9oZWFkZXIgNDEKLSNkZWZpbmUgZGJjaF9oZWFwIDQyCi0jZGVmaW5lIGRiY2hfaG9vayA0MwotI2RlZmluZSBkYmNoX2ljb24gNDQKLSNkZWZpbmUgZGJjaF9pbWFnZWxpc3QgNDUKLSNkZWZpbmUgZGJjaF9pbnQgNDYKLSNkZWZpbmUgZGJjaF9pbnQyMSA0NwotI2RlZmluZSBkYmNoX2ludDMxIDQ4Ci0jZGVmaW5lIGRiY2hfa2V5IDQ5Ci0jZGVmaW5lIGRiY2hfa2V5Ym9hcmQgNTAKLSNkZWZpbmUgZGJjaF9sZHQgNTEKLSNkZWZpbmUgZGJjaF9saXN0Ym94IDUyCi0jZGVmaW5lIGRiY2hfbG9jYWwgNTMKLSNkZWZpbmUgZGJjaF9tY2kgNTQKLSNkZWZpbmUgZGJjaF9tY2lhbmltIDU1Ci0jZGVmaW5lIGRiY2hfbWNpd2F2ZSA1NgotI2RlZmluZSBkYmNoX21kaSA1NwotI2RlZmluZSBkYmNoX21lbnUgNTgKLSNkZWZpbmUgZGJjaF9tZXNzYWdlIDU5Ci0jZGVmaW5lIGRiY2hfbWV0YWZpbGUgNjAKLSNkZWZpbmUgZGJjaF9taWRpIDYxCi0jZGVmaW5lIGRiY2hfbW1hdXggNjIKLSNkZWZpbmUgZGJjaF9tbWlvIDYzCi0jZGVmaW5lIGRiY2hfbW1zeXMgNjQKLSNkZWZpbmUgZGJjaF9tbXRpbWUgNjUKLSNkZWZpbmUgZGJjaF9tb2R1bGUgNjYKLSNkZWZpbmUgZGJjaF9tcHIgNjcKLSNkZWZpbmUgZGJjaF9tc2cgNjgKLSNkZWZpbmUgZGJjaF9ub25jbGllbnQgNjkKLSNkZWZpbmUgZGJjaF9udGRsbCA3MAotI2RlZmluZSBkYmNoX29sZSA3MQotI2RlZmluZSBkYmNoX3BhbGV0dGUgNzIKLSNkZWZpbmUgZGJjaF9wcmludCA3MwotI2RlZmluZSBkYmNoX3Byb2Nlc3MgNzQKLSNkZWZpbmUgZGJjaF9wcm9maWxlIDc1Ci0jZGVmaW5lIGRiY2hfcHJvZ3Jlc3MgNzYKLSNkZWZpbmUgZGJjaF9wcm9wIDc3Ci0jZGVmaW5lIGRiY2hfcHNkcnYgNzgKLSNkZWZpbmUgZGJjaF9yZWcgNzkKLSNkZWZpbmUgZGJjaF9yZWdpb24gODAKLSNkZWZpbmUgZGJjaF9yZWxheSA4MQotI2RlZmluZSBkYmNoX3Jlc291cmNlIDgyCi0jZGVmaW5lIGRiY2hfc2Nyb2xsIDgzCi0jZGVmaW5lIGRiY2hfc2VjdXJpdHkgODQKLSNkZWZpbmUgZGJjaF9zZWdtZW50IDg1Ci0jZGVmaW5lIGRiY2hfc2VsZWN0b3IgODYKLSNkZWZpbmUgZGJjaF9zZW0gODcKLSNkZWZpbmUgZGJjaF9zZW5kbXNnIDg4Ci0jZGVmaW5lIGRiY2hfc2hlbGwgODkKLSNkZWZpbmUgZGJjaF9zaG0gOTAKLSNkZWZpbmUgZGJjaF9zbm9vcCA5MQotI2RlZmluZSBkYmNoX3NvdW5kIDkyCi0jZGVmaW5lIGRiY2hfc3RhdGljIDkzCi0jZGVmaW5lIGRiY2hfc3RyZXNzIDk0Ci0jZGVmaW5lIGRiY2hfc3RyaW5nIDk1Ci0jZGVmaW5lIGRiY2hfc3lzY29sb3IgOTYKLSNkZWZpbmUgZGJjaF9zeXN0ZW0gOTcKLSNkZWZpbmUgZGJjaF90YXNrIDk4Ci0jZGVmaW5lIGRiY2hfdGV4dCA5OQotI2RlZmluZSBkYmNoX3RocmVhZCAxMDAKLSNkZWZpbmUgZGJjaF90aHVuayAxMDEKLSNkZWZpbmUgZGJjaF90aW1lciAxMDIKLSNkZWZpbmUgZGJjaF90b29sYmFyIDEwMwotI2RlZmluZSBkYmNoX3Rvb2xoZWxwIDEwNAotI2RlZmluZSBkYmNoX3R3ZWFrIDEwNQotI2RlZmluZSBkYmNoX3VpdG9vbHMgMTA2Ci0jZGVmaW5lIGRiY2hfdXBkb3duIDEwNwotI2RlZmluZSBkYmNoX3ZlciAxMDgKLSNkZWZpbmUgZGJjaF92aXJ0dWFsIDEwOQotI2RlZmluZSBkYmNoX3Z4ZCAxMTAKLSNkZWZpbmUgZGJjaF93aW4gMTExCi0jZGVmaW5lIGRiY2hfd2luMTZkcnYgMTEyCi0jZGVmaW5lIGRiY2hfd2luMzIgMTEzCi0jZGVmaW5lIGRiY2hfd2luZyAxMTQKLSNkZWZpbmUgZGJjaF93aW5zb2NrIDExNQotI2RlZmluZSBkYmNoX3duZXQgMTE2Ci0jZGVmaW5lIGRiY2hfeDExIDExNwotI2RlZmluZSBkYmNoX3gxMWRydiAxMTgKKyNkZWZpbmUgZGJjaF8xIDAKKyNkZWZpbmUgZGJjaF8yIDEKKyNkZWZpbmUgZGJjaF8zIDIKKyNkZWZpbmUgZGJjaF80IDMKKyNkZWZpbmUgZGJjaF81IDQKKyNkZWZpbmUgZGJjaF82IDUKKyNkZWZpbmUgZGJjaF9hY2NlbCA2CisjZGVmaW5lIGRiY2hfYWR2YXBpIDcKKyNkZWZpbmUgZGJjaF9hc3BpIDgKKyNkZWZpbmUgZGJjaF9hdG9tIDkKKyNkZWZpbmUgZGJjaF9iaXRibHQgMTAKKyNkZWZpbmUgZGJjaF9iaXRtYXAgMTEKKyNkZWZpbmUgZGJjaF9jYXJldCAxMgorI2RlZmluZSBkYmNoX2NkIDEzCisjZGVmaW5lIGRiY2hfY2RhdWRpbyAxNAorI2RlZmluZSBkYmNoX2NsYXNzIDE1CisjZGVmaW5lIGRiY2hfY2xpcGJvYXJkIDE2CisjZGVmaW5lIGRiY2hfY2xpcHBpbmcgMTcKKyNkZWZpbmUgZGJjaF9jb21ibyAxOAorI2RlZmluZSBkYmNoX2NvbW0gMTkKKyNkZWZpbmUgZGJjaF9jb21tY3RybCAyMAorI2RlZmluZSBkYmNoX2NvbW1kbGcgMjEKKyNkZWZpbmUgZGJjaF9jb25zb2xlIDIyCisjZGVmaW5lIGRiY2hfY3J0ZGxsIDIzCisjZGVmaW5lIGRiY2hfY3Vyc29yIDI0CisjZGVmaW5lIGRiY2hfZGMgMjUKKyNkZWZpbmUgZGJjaF9kZGUgMjYKKyNkZWZpbmUgZGJjaF9kZGVtbCAyNworI2RlZmluZSBkYmNoX2RkcmF3IDI4CisjZGVmaW5lIGRiY2hfZGVidWcgMjkKKyNkZWZpbmUgZGJjaF9kaWFsb2cgMzAKKyNkZWZpbmUgZGJjaF9kaW5wdXQgMzEKKyNkZWZpbmUgZGJjaF9kbGwgMzIKKyNkZWZpbmUgZGJjaF9kb3NmcyAzMworI2RlZmluZSBkYmNoX2Rvc21lbSAzNAorI2RlZmluZSBkYmNoX2RwbGF5IDM1CisjZGVmaW5lIGRiY2hfZHJpdmVyIDM2CisjZGVmaW5lIGRiY2hfZHNvdW5kIDM3CisjZGVmaW5lIGRiY2hfZWRpdCAzOAorI2RlZmluZSBkYmNoX2V2ZW50IDM5CisjZGVmaW5lIGRiY2hfZXhlYyA0MAorI2RlZmluZSBkYmNoX2ZpbGUgNDEKKyNkZWZpbmUgZGJjaF9maXh1cCA0MgorI2RlZmluZSBkYmNoX2ZvbnQgNDMKKyNkZWZpbmUgZGJjaF9nZGkgNDQKKyNkZWZpbmUgZGJjaF9nbG9iYWwgNDUKKyNkZWZpbmUgZGJjaF9ncmFwaGljcyA0NgorI2RlZmluZSBkYmNoX2hlYWRlciA0NworI2RlZmluZSBkYmNoX2hlYXAgNDgKKyNkZWZpbmUgZGJjaF9ob29rIDQ5CisjZGVmaW5lIGRiY2hfaWNvbiA1MAorI2RlZmluZSBkYmNoX2ltYWdlbGlzdCA1MQorI2RlZmluZSBkYmNoX2ludCA1MgorI2RlZmluZSBkYmNoX2ludDIxIDUzCisjZGVmaW5lIGRiY2hfaW50MzEgNTQKKyNkZWZpbmUgZGJjaF9rZXkgNTUKKyNkZWZpbmUgZGJjaF9rZXlib2FyZCA1NgorI2RlZmluZSBkYmNoX2xkdCA1NworI2RlZmluZSBkYmNoX2xpc3Rib3ggNTgKKyNkZWZpbmUgZGJjaF9saXN0dmlldyA1OQorI2RlZmluZSBkYmNoX2xvY2FsIDYwCisjZGVmaW5lIGRiY2hfbWNpIDYxCisjZGVmaW5lIGRiY2hfbWNpYW5pbSA2MgorI2RlZmluZSBkYmNoX21jaXdhdmUgNjMKKyNkZWZpbmUgZGJjaF9tZGkgNjQKKyNkZWZpbmUgZGJjaF9tZW51IDY1CisjZGVmaW5lIGRiY2hfbWVzc2FnZSA2NgorI2RlZmluZSBkYmNoX21ldGFmaWxlIDY3CisjZGVmaW5lIGRiY2hfbWlkaSA2OAorI2RlZmluZSBkYmNoX21tYXV4IDY5CisjZGVmaW5lIGRiY2hfbW1pbyA3MAorI2RlZmluZSBkYmNoX21tc3lzIDcxCisjZGVmaW5lIGRiY2hfbW10aW1lIDcyCisjZGVmaW5lIGRiY2hfbW9kdWxlIDczCisjZGVmaW5lIGRiY2hfbXByIDc0CisjZGVmaW5lIGRiY2hfbXNnIDc1CisjZGVmaW5lIGRiY2hfbm9uY2xpZW50IDc2CisjZGVmaW5lIGRiY2hfbnRkbGwgNzcKKyNkZWZpbmUgZGJjaF9vbGUgNzgKKyNkZWZpbmUgZGJjaF9wYWdlciA3OQorI2RlZmluZSBkYmNoX3BhbGV0dGUgODAKKyNkZWZpbmUgZGJjaF9wcmludCA4MQorI2RlZmluZSBkYmNoX3Byb2Nlc3MgODIKKyNkZWZpbmUgZGJjaF9wcm9maWxlIDgzCisjZGVmaW5lIGRiY2hfcHJvZ3Jlc3MgODQKKyNkZWZpbmUgZGJjaF9wcm9wIDg1CisjZGVmaW5lIGRiY2hfcHNkcnYgODYKKyNkZWZpbmUgZGJjaF9yZWJhciA4NworI2RlZmluZSBkYmNoX3JlZyA4OAorI2RlZmluZSBkYmNoX3JlZ2lvbiA4OQorI2RlZmluZSBkYmNoX3JlbGF5IDkwCisjZGVmaW5lIGRiY2hfcmVzb3VyY2UgOTEKKyNkZWZpbmUgZGJjaF9zIDkyCisjZGVmaW5lIGRiY2hfc2Nyb2xsIDkzCisjZGVmaW5lIGRiY2hfc2VjdXJpdHkgOTQKKyNkZWZpbmUgZGJjaF9zZWdtZW50IDk1CisjZGVmaW5lIGRiY2hfc2VsZWN0b3IgOTYKKyNkZWZpbmUgZGJjaF9zZW0gOTcKKyNkZWZpbmUgZGJjaF9zZW5kbXNnIDk4CisjZGVmaW5lIGRiY2hfc2hlbGwgOTkKKyNkZWZpbmUgZGJjaF9zaG0gMTAwCisjZGVmaW5lIGRiY2hfc25vb3AgMTAxCisjZGVmaW5lIGRiY2hfc291bmQgMTAyCisjZGVmaW5lIGRiY2hfc3RhdGljIDEwMworI2RlZmluZSBkYmNoX3N0cmVzcyAxMDQKKyNkZWZpbmUgZGJjaF9zdHJpbmcgMTA1CisjZGVmaW5lIGRiY2hfc3lzY29sb3IgMTA2CisjZGVmaW5lIGRiY2hfc3lzdGVtIDEwNworI2RlZmluZSBkYmNoX3Rhc2sgMTA4CisjZGVmaW5lIGRiY2hfdGV4dCAxMDkKKyNkZWZpbmUgZGJjaF90aHJlYWQgMTEwCisjZGVmaW5lIGRiY2hfdGh1bmsgMTExCisjZGVmaW5lIGRiY2hfdGltZXIgMTEyCisjZGVmaW5lIGRiY2hfdG9vbGJhciAxMTMKKyNkZWZpbmUgZGJjaF90b29saGVscCAxMTQKKyNkZWZpbmUgZGJjaF90b29sdGlwcyAxMTUKKyNkZWZpbmUgZGJjaF90cmFja2JhciAxMTYKKyNkZWZpbmUgZGJjaF90cmVldmlldyAxMTcKKyNkZWZpbmUgZGJjaF90d2VhayAxMTgKKyNkZWZpbmUgZGJjaF91aXRvb2xzIDExOQorI2RlZmluZSBkYmNoX3VwZG93biAxMjAKKyNkZWZpbmUgZGJjaF92ZXIgMTIxCisjZGVmaW5lIGRiY2hfdmlydHVhbCAxMjIKKyNkZWZpbmUgZGJjaF92eGQgMTIzCisjZGVmaW5lIGRiY2hfd2luIDEyNAorI2RlZmluZSBkYmNoX3dpbjE2ZHJ2IDEyNQorI2RlZmluZSBkYmNoX3dpbjMyIDEyNgorI2RlZmluZSBkYmNoX3dpbmcgMTI3CisjZGVmaW5lIGRiY2hfd2luc29jayAxMjgKKyNkZWZpbmUgZGJjaF93bmV0IDEyOQorI2RlZmluZSBkYmNoX3gxMSAxMzAKKyNkZWZpbmUgZGJjaF94MTFkcnYgMTMxCiAvKiBEZWZpbml0aW9ucyBmb3IgY2xhc3NlcyBpZGVudGlmaWVycyAqLwogI2RlZmluZSBkYmNsX2ZpeG1lIDAKICNkZWZpbmUgZGJjbF9lcnIgMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kZWJ1Z2RlZnMuaCBiL2luY2x1ZGUvZGVidWdkZWZzLmgKaW5kZXggYThkZGQyZi4uM2E4YmIzMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kZWJ1Z2RlZnMuaAorKysgYi9pbmNsdWRlL2RlYnVnZGVmcy5oCkBAIC00LDcgKzQsNyBAQAogI2luY2x1ZGUgImRlYnVndG9vbHMuaCIKICNlbmRpZgogCi0jZGVmaW5lIERFQlVHX0NIQU5ORUxfQ09VTlQgMTE5CisjZGVmaW5lIERFQlVHX0NIQU5ORUxfQ09VTlQgMTMyCiAjaWZkZWYgREVCVUdfUlVOVElNRQogc2hvcnQgZGVidWdfbXNnX2VuYWJsZWRbXVtERUJVR19DTEFTU19DT1VOVF0gPSB7CiB7MSwgMSwgMCwgMH0sCkBAIC0xMjYsOCArMTI2LDI3IEBACiB7MSwgMSwgMCwgMH0sCiB7MSwgMSwgMCwgMH0sCiB7MSwgMSwgMCwgMH0sCit7MSwgMSwgMCwgMH0sCit7MSwgMSwgMCwgMH0sCit7MSwgMSwgMCwgMH0sCit7MSwgMSwgMCwgMH0sCit7MSwgMSwgMCwgMH0sCit7MSwgMSwgMCwgMH0sCit7MSwgMSwgMCwgMH0sCit7MSwgMSwgMCwgMH0sCit7MSwgMSwgMCwgMH0sCit7MSwgMSwgMCwgMH0sCit7MSwgMSwgMCwgMH0sCit7MSwgMSwgMCwgMH0sCit7MSwgMSwgMCwgMH0sCiB9OwogY29uc3QgY2hhciogZGVidWdfY2hfbmFtZVtdID0geworIjEiLAorIjIiLAorIjMiLAorIjQiLAorIjUiLAorIjYiLAogImFjY2VsIiwKICJhZHZhcGkiLAogImFzcGkiLApAQCAtMTgxLDYgKzIwMCw3IEBACiAia2V5Ym9hcmQiLAogImxkdCIsCiAibGlzdGJveCIsCisibGlzdHZpZXciLAogImxvY2FsIiwKICJtY2kiLAogIm1jaWFuaW0iLApAQCAtMjAwLDYgKzIyMCw3IEBACiAibm9uY2xpZW50IiwKICJudGRsbCIsCiAib2xlIiwKKyJwYWdlciIsCiAicGFsZXR0ZSIsCiAicHJpbnQiLAogInByb2Nlc3MiLApAQCAtMjA3LDEwICsyMjgsMTIgQEAKICJwcm9ncmVzcyIsCiAicHJvcCIsCiAicHNkcnYiLAorInJlYmFyIiwKICJyZWciLAogInJlZ2lvbiIsCiAicmVsYXkiLAogInJlc291cmNlIiwKKyJzIiwKICJzY3JvbGwiLAogInNlY3VyaXR5IiwKICJzZWdtZW50IiwKQEAgLTIzMyw2ICsyNTYsOSBAQAogInRpbWVyIiwKICJ0b29sYmFyIiwKICJ0b29saGVscCIsCisidG9vbHRpcHMiLAorInRyYWNrYmFyIiwKKyJ0cmVldmlldyIsCiAidHdlYWsiLAogInVpdG9vbHMiLAogInVwZG93biIsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2dkaS5oIGIvaW5jbHVkZS9nZGkuaAppbmRleCA3MjNhYTJmLi5mY2IxNzg2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2dkaS5oCisrKyBiL2luY2x1ZGUvZ2RpLmgKQEAgLTIwMyw2ICsyMDMsNyBAQAogICAgIEJPT0wzMiAgICAgKCpwUG9seVBvbHlsaW5lKShEQyosTFBQT0lOVDMyLExQSU5UMzIsVUlOVDMyKTsKICAgICBCT09MMzIgICAgICgqcFBvbHlnb24pKERDKixMUFBPSU5UMzIsSU5UMzIpOwogICAgIEJPT0wzMiAgICAgKCpwUG9seWxpbmUpKERDKixMUFBPSU5UMzIsSU5UMzIpOworICAgIEJPT0wzMiAgICAgKCpwUG9seUJlemllcikoREMqLFBPSU5UMzIsIExQUE9JTlQzMixEV09SRCk7CiAgICAgVUlOVDMyICAgICAoKnBSZWFsaXplUGFsZXR0ZSkoREMqKTsKICAgICBCT09MMzIgICAgICgqcFJlY3RhbmdsZSkoREMqLElOVDMyLElOVDMyLElOVDMyLElOVDMyKTsKICAgICBCT09MMzIgICAgICgqcFJlc3RvcmVEQykoREMqLElOVDMyKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGlzdHZpZXcuaCBiL2luY2x1ZGUvbGlzdHZpZXcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZThjOTIwZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGlzdHZpZXcuaApAQCAtMCwwICsxLDIxIEBACisvKgorICogTGlzdHZpZXcgY2xhc3MgZXh0cmEgaW5mbworICoKKyAqIENvcHlyaWdodCAxOTk4IEVyaWMgS29obAorICovCisKKyNpZm5kZWYgX19XSU5FX0xJU1RWSUVXX0gKKyNkZWZpbmUgX19XSU5FX0xJU1RWSUVXX0gKKworCit0eXBlZGVmIHN0cnVjdCB0YWdMSVNUVklFV19JTkZPCit7CisgICAgQ09MT1JSRUYgICBjbHJCazsKKworCit9IExJU1RWSUVXX0lORk87CisKKworZXh0ZXJuIHZvaWQgTElTVFZJRVdfUmVnaXN0ZXIgKHZvaWQpOworCisjZW5kaWYgIC8qIF9fV0lORV9MSVNUVklFV19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL21zZG9zLmggYi9pbmNsdWRlL21zZG9zLmgKaW5kZXggZjgyNzZhYy4uZjE1NGRhYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tc2Rvcy5oCisrKyBiL2luY2x1ZGUvbXNkb3MuaApAQCAtMTk0LDUgKzE5NCw2IEBACiAKIHZvaWQgV0lOQVBJIERPUzNDYWxsKCBDT05URVhUICpjb250ZXh0ICk7CiB2b2lkIGRvX21zY2RleCggQ09OVEVYVCAqY29udGV4dCwgaW50IGRvcmVhbG1vZGUgKTsKK3ZvaWQgZG9fbXNjZGV4X2RkIChDT05URVhUICogY29udGV4dCwgaW50IGRvcmVhbG1vZGUpOwogCiAjZW5kaWYgLyogX19XSU5FX01TRE9TX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvcGFnZXIuaCBiL2luY2x1ZGUvcGFnZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjhhOGYwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9wYWdlci5oCkBAIC0wLDAgKzEsMjAgQEAKKy8qCisgKiBQYWdlciBjbGFzcyBleHRyYSBpbmZvCisgKgorICogQ29weXJpZ2h0IDE5OTggRXJpYyBLb2hsCisgKi8KKworI2lmbmRlZiBfX1dJTkVfUEFHRVJfSAorI2RlZmluZSBfX1dJTkVfUEFHRVJfSAorCisKK3R5cGVkZWYgc3RydWN0IHRhZ1BBR0VSX0lORk8KK3sKKyAgICBVSU5UMzIgIHVEdW1teTsgIC8qIHRoaXMgaXMganVzdCBhIGR1bW15IHRvIGtlZXAgdGhlIGNvbXBpbGVyIGhhcHB5ICovCisKK30gUEFHRVJfSU5GTzsKKworCitleHRlcm4gdm9pZCBQQUdFUl9SZWdpc3RlciAodm9pZCk7CisKKyNlbmRpZiAgLyogX19XSU5FX1BBR0VSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvcHJpbnQuaCBiL2luY2x1ZGUvcHJpbnQuaAppbmRleCAxY2M1NjI4Li5mYTY0YTQ5IDEwMDY0NAotLS0gYS9pbmNsdWRlL3ByaW50LmgKKysrIGIvaW5jbHVkZS9wcmludC5oCkBAIC0xLDUgKzEsMzAgQEAKKy8qIERlZmluaXRpb25zIGZvciBwcmludGluZworICoKKyAqIENvcHlyaWdodCAxOTk4IEh1dyBEYXZpZXMsIEFuZHJlYXMgTW9ocgorICovCisjaWZuZGVmIF9fV0lORV9QUklOVF9ICisjZGVmaW5lIF9fV0lORV9QUklOVF9ICisKICNpbmNsdWRlICJ3aW5kb3dzLmgiCiAKKyNkZWZpbmUgSU5UX1BEX0RFRkFVTFRfREVWTU9ERSAgMQorI2RlZmluZSBJTlRfUERfREVGQVVMVF9NT0RFTCAgICAyCisKKyNkZWZpbmUgUFJJTlRFUl9BVFRSSUJVVEVfUVVFVUVEICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBQUklOVEVSX0FUVFJJQlVURV9ESVJFQ1QgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFBSSU5URVJfQVRUUklCVVRFX0RFRkFVTFQgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgUFJJTlRFUl9BVFRSSUJVVEVfU0hBUkVEICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBQUklOVEVSX0FUVFJJQlVURV9ORVRXT1JLICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIFBSSU5URVJfQVRUUklCVVRFX0hJRERFTiAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgUFJJTlRFUl9BVFRSSUJVVEVfTE9DQUwgICAgICAgICAgMHgwMDAwMDA0MAorCisjZGVmaW5lIFBSSU5URVJfQVRUUklCVVRFX0VOQUJMRV9ERVZRICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgUFJJTlRFUl9BVFRSSUJVVEVfS0VFUFBSSU5URURKT0JTICAgMHgwMDAwMDEwMAorI2RlZmluZSBQUklOVEVSX0FUVFJJQlVURV9ET19DT01QTEVURV9GSVJTVCAweDAwMDAwMjAwCisKKyNkZWZpbmUgUFJJTlRFUl9BVFRSSUJVVEVfV09SS19PRkZMSU5FICAgMHgwMDAwMDQwMAorI2RlZmluZSBQUklOVEVSX0FUVFJJQlVURV9FTkFCTEVfQklESSAgICAweDAwMDAwODAwCisKIEhBTkRMRTE2IFdJTkFQSSBPcGVuSm9iKExQU1RSIGxwT3V0cHV0LCBMUFNUUiBscFRpdGxlLCBIREMxNiBoREMpOwogaW50IFdJTkFQSSBDbG9zZUpvYihIQU5ETEUxNiBoSm9iKTsKIGludCBXSU5BUEkgV3JpdGVTcG9vbChIQU5ETEUxNiBoSm9iLCBMUFNUUiBscERhdGEsIFdPUkQgY2NoKTsKQEAgLTksNyArMzQsNCBAQAogRFdPUkQgV0lOQVBJIEdldFNwb29sSm9iKGludCBuT3B0aW9uLCBMT05HIHBhcmFtKTsKIGludCBXSU5BUEkgV3JpdGVEaWFsb2coSEFORExFMTYgaEpvYiwgTFBTVFIgbHBNc2csIFdPUkQgY2NoTXNnKTsKIAotCi0KLQotCisjZW5kaWYgIC8qIF9fV0lORV9QUklOVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Byb2Nlc3MuaCBiL2luY2x1ZGUvcHJvY2Vzcy5oCmluZGV4IGU2NjljMmQuLmE1YWJjMDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcHJvY2Vzcy5oCisrKyBiL2luY2x1ZGUvcHJvY2Vzcy5oCkBAIC0xMDEsNiArMTAxLDggQEAKICAgICBEV09SRCAgICAgICAgICAgIHVua25vd243OyAgICAgICAgIC8qIGJjIFVua25vd24gKi8KICAgICBEV09SRCAgICAgICAgICAgIHVua25vd244OyAgICAgICAgIC8qIGMwIFVua25vd24gKE5UKSAqLwogICAgIExDSUQgICAgICAgICAgICAgbG9jYWxlOyAgICAgICAgICAgLyogYzQgTG9jYWxlIHRvIGJlIHF1ZXJpZWQgYnkgR2V0VGhyZWFkTG9jYWxlIChOVCkgKi8KKyAgICAvKiBUaGUgZm9sbG93aW5nIGFyZSBXaW5lLXNwZWNpZmljIGZpZWxkcyAqLworICAgIHZvaWQgICAgICAgICAgICAqc2VydmVyX3BpZDsgICAgICAgLyogICAgU2VydmVyIGlkIGZvciB0aGlzIHByb2Nlc3MgKi8KIH0gUERCMzI7CiAKIC8qIFByb2Nlc3MgZmxhZ3MgKi8KQEAgLTEwOCw2ICsxMTAsNyBAQAogI2RlZmluZSBQREIzMl9ET1NfUFJPQyAgICAgIDB4MDAxMCAgLyogRG9zIHByb2Nlc3MgKi8KICNkZWZpbmUgUERCMzJfQ09OU09MRV9QUk9DICAweDAwMjAgIC8qIENvbnNvbGUgcHJvY2VzcyAqLwogI2RlZmluZSBQREIzMl9GSUxFX0FQSVNfT0VNIDB4MDA0MCAgLyogRmlsZSBBUElzIGFyZSBPRU0gKi8KKyNkZWZpbmUgUERCMzJfV0lOMzJTX1BST0MgICAweDgwMDAgIC8qIFdpbjMycyBwcm9jZXNzICovCiAKIC8qIFBEQiA8LT4gUHJvY2VzcyBpZCBjb252ZXJzaW9uIG1hY3JvcyAqLwogI2RlZmluZSBQUk9DRVNTX09CRlVTQ0FUT1IgICAgICgoRFdPUkQpMHhkZWFkYmVlZikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvcmViYXIuaCBiL2luY2x1ZGUvcmViYXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTJkNmVlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9yZWJhci5oCkBAIC0wLDAgKzEsMjAgQEAKKy8qCisgKiBSZWJhciBjbGFzcyBleHRyYSBpbmZvCisgKgorICogQ29weXJpZ2h0IDE5OTggRXJpYyBLb2hsCisgKi8KKworI2lmbmRlZiBfX1dJTkVfUkVCQVJfSAorI2RlZmluZSBfX1dJTkVfUkVCQVJfSAorCisKK3R5cGVkZWYgc3RydWN0IHRhZ1JFQkFSX0lORk8KK3sKKyAgICBVSU5UMzIgIHVEdW1teTsgICAvKiB0aGlzIGlzIGp1c3QgYSBkdW1teSB0byBrZWVwIHRoZSBjb21waWxlciBoYXBweSAqLworCit9IFJFQkFSX0lORk87CisKKworZXh0ZXJuIHZvaWQgUkVCQVJfUmVnaXN0ZXIgKHZvaWQpOworCisjZW5kaWYgIC8qIF9fV0lORV9SRUJBUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NlcnZlci5oIGIvaW5jbHVkZS9zZXJ2ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjNkY2M4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9zZXJ2ZXIuaApAQCAtMCwwICsxLDY0IEBACisvKgorICogV2luZSBzZXJ2ZXIgZGVmaW5pdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggQWxleGFuZHJlIEp1bGxpYXJkCisgKi8KKworI2lmbmRlZiBfX1dJTkVfU0VSVkVSX0gKKyNkZWZpbmUgX19XSU5FX1NFUlZFUl9ICisKKy8qIG1lc3NhZ2UgaGVhZGVyIGFzIHNlbnQgb24gdGhlIHdpcmUgKi8KK3N0cnVjdCBoZWFkZXIKK3sKKyAgICB1bnNpZ25lZCBpbnQgIGxlbjsgICAgIC8qIHRvdGFsIG1zZyBsZW5ndGggKGluY2x1ZGluZyB0aGlzIGhlYWRlcikgKi8KKyAgICB1bnNpZ25lZCBpbnQgIHR5cGU7ICAgIC8qIG1zZyB0eXBlICovCisgICAgdW5zaWduZWQgaW50ICBzZXE7ICAgICAvKiBzZXF1ZW5jZSBudW1iZXIgKi8KK307CisKKy8qIG1heCBtc2cgbGVuZ3RoIChub3QgaW5jbHVkaW5nIHRoZSBoZWFkZXIpICovCisjZGVmaW5lIE1BWF9NU0dfTEVOR1RIICgxNjM4NCAtIHNpemVvZihzdHJ1Y3QgaGVhZGVyKSkKKworLyogcmVxdWVzdCBmcm9tIGNsaWVudCB0byBzZXJ2ZXIgKi8KKworZW51bSByZXF1ZXN0Cit7CisgICAgUkVRX1RJTUVPVVQsICAgICAgICAgLyogaW50ZXJuYWwgdGltZW91dCBtc2cgKi8KKyAgICBSRVFfS0lMTF9USFJFQUQsICAgICAvKiBpbnRlcm5hbCBraWxsIHRocmVhZCBtc2cgKi8KKyAgICBSRVFfTkVXX1RIUkVBRCwgICAgICAvKiBjcmVhdGUgYSBuZXcgdGhyZWFkIChjYWxsZWQgZnJvbSB0aGUgY3JlYXRvcikgKi8KKyAgICBSRVFfSU5JVF9USFJFQUQsICAgICAvKiBpbml0IGEgbmV3IHRocmVhZCAoY2FsbGVkIGJ5IGl0c2VsZikgKi8KKyAgICBSRVFfTkJfUkVRVUVTVFMKK307CisKKy8qIHJlcXVlc3Qgc3RydWN0dXJlcyAqLworCitzdHJ1Y3QgbmV3X3RocmVhZF9yZXF1ZXN0Cit7CisgICAgdm9pZCAqcGlkOyAgLyogcHJvY2VzcyBpZCBmb3IgdGhlIG5ldyB0aHJlYWQgKG9yIDAgaWYgbm9uZSB5ZXQpICovCit9OworCitzdHJ1Y3QgbmV3X3RocmVhZF9yZXBseQoreworICAgIHZvaWQgKnRpZDsgIC8qIHRocmVhZCBpZCAqLworICAgIHZvaWQgKnBpZDsgIC8qIHByb2Nlc3MgaWQgKGNyZWF0ZWQgaWYgbmVjZXNzYXJ5KSAqLworfTsKKworc3RydWN0IGluaXRfdGhyZWFkX3JlcXVlc3QKK3sKKyAgICBpbnQgIHBpZDsKKy8qICAgIGNoYXIgbmFtZVsuLi5dOyovCit9OworCisvKiBzZXJ2ZXItc2lkZSBmdW5jdGlvbnMgKi8KKworZXh0ZXJuIHZvaWQgc2VydmVyX21haW5fbG9vcCggaW50IGZkICk7CisKKworLyogY2xpZW50LXNpZGUgZnVuY3Rpb25zICovCisKKyNpZm5kZWYgX19XSU5FX1NFUlZFUl9fCitzdHJ1Y3QgX1RIREI7CitleHRlcm4gaW50IENMSUVOVF9OZXdUaHJlYWQoIHN0cnVjdCBfVEhEQiAqdGhkYiApOworZXh0ZXJuIGludCBDTElFTlRfSW5pdFRocmVhZCh2b2lkKTsKKyNlbmRpZiAgLyogX19XSU5FX1NFUlZFUl9fICovCisKKyNlbmRpZiAgLyogX19XSU5FX1NFUlZFUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NobG9iai5oIGIvaW5jbHVkZS9zaGxvYmouaAppbmRleCA0MTFjYTBiLi4zZGVlYjQwIDEwMDY0NAotLS0gYS9pbmNsdWRlL3NobG9iai5oCisrKyBiL2luY2x1ZGUvc2hsb2JqLmgKQEAgLTQwLDE0ICs0MCwxMiBAQAogI2RlZmluZQlTVFJSRVRfQ1NUUgkweDAwMDIKIAogdHlwZWRlZiBzdHJ1Y3QgX1NUUlJFVAotewotICAgIFVJTlQzMiB1VHlwZTsJCS8qIFNUUlJFVF94eHggKi8KLSAgICB1bmlvbgotICAgIHsKLSAgICAgICAgTFBXU1RSCXBPbGVTdHI7CS8qIE9MRVNUUiB0aGF0IHdpbGwgYmUgZnJlZWQgKi8KLSAgICAgICAgVUlOVDMyCXVPZmZzZXQ7CS8qIE9mZnNldCBpbnRvIFNISVRFTUlEIChBTlNJKSAqLwotICAgICAgICBjaGFyCWNTdHJbTUFYX1BBVEhdOwkvKiBCdWZmZXIgdG8gZmlsbCBpbiAqLwotICAgIH0gRFVNTVlVTklPTk5BTUU7Cit7IFVJTlQzMiB1VHlwZTsJCS8qIFNUUlJFVF94eHggKi8KKyAgdW5pb24KKyAgeyBMUFdTVFIJcE9sZVN0cjsJLyogT0xFU1RSIHRoYXQgd2lsbCBiZSBmcmVlZCAqLworICAgIFVJTlQzMgl1T2Zmc2V0OwkvKiBPZmZzZXQgaW50byBTSElURU1JRCAoQU5TSSkgKi8KKyAgICBjaGFyCWNTdHJbTUFYX1BBVEhdOwkvKiBCdWZmZXIgdG8gZmlsbCBpbiAqLworICB9dTsKIH0gU1RSUkVULCpMUFNUUlJFVDsKIAogdHlwZWRlZiBzdHJ1Y3QgewpAQCAtNTksMTYgKzU3LDg3IEBACiAJU0hJVEVNSUQJbWtpZDsgLyogZmlyc3QgaXRlbWlkIGluIGxpc3QgKi8KIH0gSVRFTUlETElTVCwqTFBJVEVNSURMSVNULCpMUENJVEVNSURMSVNUOwogCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBJTlRFUk5BTCBDTEFTUzogUElETC1NYW5hZ2VyCisgKiBTb3VyY2U6IEhPV1RPIGV4dGVuZCB0aGUgZXhwbG9yZXIgbmFtZXNwYWNlCisgKiBmdHAubWljcm9zb2Z0LmNvbS8gLi4uIHNvZnRsaWIgLi4uIHJlZ3ZpZXcuZXhlCisgKi8KKyNkZWZpbmUgVEhJUyBMUFBJRExNR1IgdGhpcwordHlwZWRlZiBlbnVtIHRhZ1BJRExUWVBFCit7IFBUX0RFU0tUT1AgPSAweDAwMDAwMDAwLAorICBQVF9EUklWRSA9ICAgMHgwMDAwMDAwMSwKKyAgUFRfRk9MREVSID0gIDB4MDAwMDAwMDIsCisJUFRfVkFMVUUgPSAgIDB4MDAwMDAwMDQsCisgIFBUX1RFWFQgPSBQVF9GT0xERVIgfCBQVF9WQUxVRQorfSBQSURMVFlQRTsKKwordHlwZWRlZiBzdHJ1Y3QgdGFnUElETERBVEEKK3sgUElETFRZUEUgdHlwZTsKKyAgQ0hBUiAgICBzelRleHRbMV07Cit9UElETERBVEEsIEZBUiAqTFBQSURMREFUQTsKKwordHlwZWRlZiBzdHJ1Y3QgcGlkbG1nciBwaWRsbWdyLCpMUFBJRExNR1I7Cit0eXBlZGVmIHN0cnVjdCBQaWRsTWdyX1ZUYWJsZSB7CisgICBTVERNRVRIT0RfKExQSVRFTUlETElTVCwgQ3JlYXRlRGVza3RvcCkgKFRISVMpOworICAgU1RETUVUSE9EXyhMUElURU1JRExJU1QsIENyZWF0ZURyaXZlKSAoVEhJU18gTFBDU1RSKTsKKyAgIFNURE1FVEhPRF8oTFBJVEVNSURMSVNULCBDcmVhdGVGb2xkZXIpIChUSElTXyBMUENTVFIpOworICAgU1RETUVUSE9EXyhMUElURU1JRExJU1QsIENyZWF0ZVZhbHVlKSAoVEhJU18gTFBDU1RSKTsKKyAgIFNURE1FVEhPRF8odm9pZCwgRGVsZXRlKSAoVEhJU18gTFBJVEVNSURMSVNUKTsKKyAgIFNURE1FVEhPRF8oTFBJVEVNSURMSVNULCBHZXROZXh0SXRlbSkgKFRISVNfIExQQ0lURU1JRExJU1QpOworICAgU1RETUVUSE9EXyhMUElURU1JRExJU1QsIENvcHkpIChUSElTXyBMUENJVEVNSURMSVNUKTsKKyAgIFNURE1FVEhPRF8oVUlOVDE2LCBHZXRTaXplKSAoVEhJU18gTFBDSVRFTUlETElTVCk7CisgICBTVERNRVRIT0RfKEJPT0wzMiwgR2V0RGVza3RvcCkgKFRISVNfIExQQ0lURU1JRExJU1QsIExQU1RSKTsKKyAgIFNURE1FVEhPRF8oQk9PTDMyLCBHZXREcml2ZSkgKFRISVNfIExQQ0lURU1JRExJU1QsIExQU1RSLCBVSU5UMTYpOworCSBTVERNRVRIT0RfKExQSVRFTUlETElTVCwgR2V0TGFzdEl0ZW0pIChUSElTXyBMUENJVEVNSURMSVNUKTsKKyAgIFNURE1FVEhPRF8oRFdPUkQsIEdldEl0ZW1UZXh0KSAoVEhJU18gTFBDSVRFTUlETElTVCwgTFBTVFIsIFVJTlQxNik7CisgICBTVERNRVRIT0RfKEJPT0wzMiwgSXNEZXNrdG9wKSAoVEhJU18gTFBDSVRFTUlETElTVCk7CisgICBTVERNRVRIT0RfKEJPT0wzMiwgSXNEcml2ZSkgKFRISVNfIExQQ0lURU1JRExJU1QpOworICAgU1RETUVUSE9EXyhCT09MMzIsIElzRm9sZGVyKSAoVEhJU18gTFBDSVRFTUlETElTVCk7CisgICBTVERNRVRIT0RfKEJPT0wzMiwgSXNWYWx1ZSkgKFRISVNfIExQQ0lURU1JRExJU1QpOworICAgU1RETUVUSE9EXyhCT09MMzIsIEhhc0ZvbGRlcnMpIChUSElTXyBMUFNUUiwgTFBDSVRFTUlETElTVCk7CisgICBTVERNRVRIT0RfKERXT1JELCBHZXRGb2xkZXJUZXh0KSAoVEhJU18gTFBDSVRFTUlETElTVCwgTFBTVFIsIERXT1JEKTsKKyAgIFNURE1FVEhPRF8oRFdPUkQsIEdldFZhbHVlVGV4dCkgKFRISVNfIExQQ0lURU1JRExJU1QsIExQU1RSLCBEV09SRCk7CisgICAKKy8qICAgU1RETUVUSE9EXyhCT09MMzIsIEdldFZhbHVlVHlwZSkgKFRISVNfIExQQ0lURU1JRExJU1QsIExQRFdPUkQpOyovCisgICBTVERNRVRIT0RfKEJPT0wzMiwgR2V0VmFsdWVUeXBlKSAoVEhJU18gTFBDSVRFTUlETElTVCwgTFBDSVRFTUlETElTVCwgTFBEV09SRCk7CisgICAKKy8qICAgU1RETUVUSE9EXyhEV09SRCwgR2V0RGF0YVRleHQpIChUSElTXyBMUENJVEVNSURMSVNULCBMUFNUUiwgRFdPUkQpOyovCisgICBTVERNRVRIT0RfKERXT1JELCBHZXREYXRhVGV4dCkgKFRISVNfIExQQ0lURU1JRExJU1QsIExQQ0lURU1JRExJU1QsIExQU1RSLCBEV09SRCk7CisgICAKKyAgIFNURE1FVEhPRF8oRFdPUkQsIEdldFBpZGxQYXRoKSAoVEhJU18gTFBDSVRFTUlETElTVCwgTFBTVFIsIERXT1JEKTsKKyAgIFNURE1FVEhPRF8oTFBJVEVNSURMSVNULCBDb25jYXRlbmF0ZSkgKFRISVNfIExQQ0lURU1JRExJU1QsIExQQ0lURU1JRExJU1QpOworICAgU1RETUVUSE9EXyhMUElURU1JRExJU1QsIENyZWF0ZSkgKFRISVNfIFBJRExUWVBFLCBMUFZPSUQsIFVJTlQxNik7CisgICBTVERNRVRIT0RfKERXT1JELCBHZXREYXRhKSAoVEhJU18gUElETFRZUEUsIExQQ0lURU1JRExJU1QsIExQVk9JRCwgVUlOVDE2KTsKKyAgIFNURE1FVEhPRF8oTFBQSURMREFUQSwgR2V0RGF0YVBvaW50ZXIpIChUSElTXyBMUENJVEVNSURMSVNUKTsKKyAgIFNURE1FVEhPRF8oQk9PTDMyLCBTZXBhcmF0ZVBhdGhBbmRWYWx1ZSkgKFRISVNfIExQQ0lURU1JRExJU1QsIExQSVRFTUlETElTVCosIExQSVRFTUlETElTVCopOworCit9ICpMUFBJRExNR1JfVlRBQkxFLFBpZGxNZ3JfVlRhYmxlOworCitzdHJ1Y3QgcGlkbG1nciB7CisJTFBQSURMTUdSX1ZUQUJMRQlscHZ0Ymw7Cit9OworI2lmZGVmIF9fV0lORV9fCitleHRlcm4gTFBQSURMTUdSIFBpZGxNZ3JfQ29uc3RydWN0b3IoKTsKK2V4dGVybiB2b2lkIFBpZGxNZ3JfRGVzdHJ1Y3RvcihUSElTKTsKKyNlbmRpZgorCisjdW5kZWYgVEhJUworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIElFbnVtSURMaXN0IGludGVyZmFjZQogICovCiAjZGVmaW5lIFRISVMgTFBFTlVNSURMSVNUIHRoaXMKK3R5cGVkZWYgc3RydWN0IHRhZ0VOVU1MSVNUCit7IHN0cnVjdCB0YWdFTlVNTElTVAkqcE5leHQ7CisgIExQSVRFTUlETElTVCBwaWRsOworfSBFTlVNTElTVCwgKkxQRU5VTUxJU1Q7CiAKIHR5cGVkZWYgc3RydWN0IElFbnVtSURMaXN0IElFbnVtSURMaXN0LCpMUEVOVU1JRExJU1Q7CiB0eXBlZGVmIHN0cnVjdCBJRW51bUlETGlzdF9WVGFibGUgewogICAgIC8qICoqKiBJVW5rbm93biBtZXRob2RzICoqKiAqLwogICAgIFNURE1FVEhPRChRdWVyeUludGVyZmFjZSkgKFRISVNfIFJFRklJRCByaWlkLCBMUFZPSUQgKiBwcHZPYmopIFBVUkU7Ci0gICAgU1RETUVUSE9EXyhVTE9ORyxBZGRSZWYpIChUSElTKSAgUFVSRTsKKwkJU1RETUVUSE9EXyhVTE9ORyxBZGRSZWYpIChUSElTKSAgUFVSRTsKICAgICBTVERNRVRIT0RfKFVMT05HLFJlbGVhc2UpIChUSElTKSBQVVJFOwogCiAgICAgLyogKioqIElFbnVtSURMaXN0IG1ldGhvZHMgKioqICovCkBAIC03OCwxMiArMTQ3LDI0IEBACiAgICAgU1RETUVUSE9EKFNraXApICAoVEhJU18gVUxPTkcgY2VsdCkgUFVSRTsKICAgICBTVERNRVRIT0QoUmVzZXQpIChUSElTKSBQVVJFOwogICAgIFNURE1FVEhPRChDbG9uZSkgKFRISVNfIElFbnVtSURMaXN0ICoqcHBlbnVtKSBQVVJFOworCQkvKiAqKiogcHJpdmF0ZSBtZXRob2RzICoqKiAqLworCQlTVERNRVRIT0RfKEJPT0wzMixDcmVhdGVFbnVtTGlzdCkoVEhJU18gTFBDU1RSLCBEV09SRCkgUFVSRTsKKyAgICBTVERNRVRIT0RfKEJPT0wzMixBZGRUb0VudW1MaXN0KShUSElTXyBMUElURU1JRExJU1QpIFBVUkU7CisgICAgU1RETUVUSE9EXyhCT09MMzIsRGVsZXRlTGlzdCkoVEhJUykgUFVSRTsKKworCQkKIH0gSUVudW1JRExpc3RfVlRhYmxlLCpMUEVOVU1JRExJU1RfVlRBQkxFOwogCiBzdHJ1Y3QgSUVudW1JRExpc3QgewogCUxQRU5VTUlETElTVF9WVEFCTEUJbHB2dGJsOwotCURXT1JECQkJcmVmOworCURXT1JECQkJIHJlZjsKKwlMUFBJRExNR1IgIG1wUGlkbE1ncjsKKwlMUEVOVU1MSVNUIG1wRmlyc3Q7CisJTFBFTlVNTElTVCBtcExhc3Q7CisJTFBFTlVNTElTVCBtcEN1cnJlbnQ7CisKIH07CisKICN1bmRlZiBUSElTCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBUaGUgSVNoZWxsRm9sZGVyIGludGVyZmFjZSAuLi4gdGhlIGJhc2ljIGludGVyZmFjZSBmb3IgYSBsb3Qgb2Ygc3R1ZmYKQEAgLTE0Myw3ICsyMjQsOCBAQAogICAgIFNURE1FVEhPRChRdWVyeUludGVyZmFjZSkgKFRISVNfIFJFRklJRCByaWlkLCBMUFZPSUQgKiBwcHZPYmopIFBVUkU7CiAgICAgU1RETUVUSE9EXyhVTE9ORyxBZGRSZWYpIChUSElTKSAgUFVSRTsKICAgICBTVERNRVRIT0RfKFVMT05HLFJlbGVhc2UpIChUSElTKSBQVVJFOwotCisgICAgLyogKioqIElQZXJzaXN0IEZvbGRlciBtZXRob2RzICoqKiAqLworCQlTVERNRVRIT0QoSW5pdGlhbGl6ZSkoVEhJU18gTFBDSVRFTUlETElTVCBwaWRsKSBQVVJFOwogICAgIC8qICoqKiBJU2hlbGxGb2xkZXIgbWV0aG9kcyAqKiogKi8KICAgICBTVERNRVRIT0QoUGFyc2VEaXNwbGF5TmFtZSkgKFRISVNfIEhXTkQzMiBod25kT3duZXIsCiAgICAgICAgIExQQkMgcGJjUmVzZXJ2ZWQsIExQT0xFU1RSMzIgbHBzekRpc3BsYXlOYW1lLApAQCAtMTY5LDcgKzI1MSwxMiBAQAogCiBzdHJ1Y3QgdGFnU0hFTExGT0xERVIgewogCUxQU0hFTExGT0xERVJfVlRBQkxFCWxwdnRibDsKLQlEV09SRAkJCXJlZjsKKwlEV09SRAkJCSAgIHJlZjsKKwlMUFNUUiAgICAgICAgbWxwc3pGb2xkZXI7CisgIExQUElETE1HUgkgICBwUGlkbE1ncjsKKwlMUElURU1JRExJU1QgbXBpZGw7CisJTFBJVEVNSURMSVNUIG1waWRsTlNSb290OworCUxQU0hFTExGT0xERVIgbXBTRlBhcmVudDsKIH07CiAKICN1bmRlZiBUSElTCkBAIC0yNDAsOSArMzI3LDEwIEBACiAjdW5kZWYgVEhJUwogCiAjaWZkZWYgX19XSU5FX18KLWV4dGVybiBMUFNIRUxMRk9MREVSIElTaGVsbEZvbGRlcl9Db25zdHJ1Y3RvcigpOworZXh0ZXJuIExQQ0xBU1NGQUNUT1JZIElDbGFzc0ZhY3RvcnlfQ29uc3RydWN0b3IoKTsKK2V4dGVybiBMUFNIRUxMRk9MREVSIElTaGVsbEZvbGRlcl9Db25zdHJ1Y3RvcihMUFNIRUxMRk9MREVSLExQSVRFTUlETElTVCk7CiBleHRlcm4gTFBTSEVMTExJTksgSVNoZWxsTGlua19Db25zdHJ1Y3RvcigpOwotZXh0ZXJuIExQRU5VTUlETElTVCBJRW51bUlETGlzdF9Db25zdHJ1Y3RvcigpOworZXh0ZXJuIExQRU5VTUlETElTVCBJRW51bUlETGlzdF9Db25zdHJ1Y3RvcihMUENTVFIsRFdPUkQsSFJFU1VMVCopOwogI2VuZGlmCiAKIERXT1JEIFdJTkFQSSBTSEVMTDMyX0RsbEdldENsYXNzT2JqZWN0KExQQ0xTSUQsUkVGSUlELExQVk9JRCopOwpAQCAtMzI0LDcgKzQxMiw2IEBACiAjZW5kaWYgCiAqLwogCi0KICN1bmRlZiBQVVJFCiAjdW5kZWYgRkFSCiAjdW5kZWYgVEhJUwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zbm9vcC5oIGIvaW5jbHVkZS9zbm9vcC5oCmluZGV4IDI5YTdiOTEuLjcyNDY2ZjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc25vb3AuaAorKysgYi9pbmNsdWRlL3Nub29wLmgKQEAgLTgsNiArOCw3IEBACiAKIGV4dGVybiB2b2lkIFNOT09QX1JlZ2lzdGVyRExMKEhNT0RVTEUzMixMUENTVFIsRFdPUkQpOwogZXh0ZXJuIEZBUlBST0MzMiBTTk9PUF9HZXRQcm9jQWRkcmVzczMyKEhNT0RVTEUzMixMUENTVFIsRFdPUkQsRkFSUFJPQzMyKTsKLWV4dGVybiB2b2lkIFNOT09QMTZfUmVnaXN0ZXJETEwoTkVfTU9EVUxFKixMUENTVFIpOwotZXh0ZXJuIEZBUlBST0MxNiBTTk9PUDE2X0dldFByb2NBZGRyZXNzMTYoSE1PRFVMRTE2LERXT1JELEZBUlBST0MxNik7CitleHRlcm4gdm9pZCAoKmZuU05PT1AxNl9SZWdpc3RlckRMTCkoTkVfTU9EVUxFKixMUENTVFIpOworZXh0ZXJuIEZBUlBST0MxNiAoKmZuU05PT1AxNl9HZXRQcm9jQWRkcmVzczE2KShITU9EVUxFMTYsRFdPUkQsRkFSUFJPQzE2KTsKK2V4dGVybiB2b2lkIFNOT09QMTZfSW5pdCgpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Rhc2suaCBiL2luY2x1ZGUvdGFzay5oCmluZGV4IDBhM2NjODYuLjg1ZjM4Y2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdGFzay5oCisrKyBiL2luY2x1ZGUvdGFzay5oCkBAIC0xMjMsMTMgKzEyMywzMyBAQAogI2RlZmluZSBVU0lHX0RMTF9VTkxPQUQJCTB4MDA4MAogI2RlZmluZSBVU0lHX0dQRgkJMHgwNjY2CiAKKworICAvKiBUSEhPT0sgS2VybmVsIERhdGEgU3RydWN0dXJlICovCit0eXBlZGVmIHN0cnVjdCBfVEhIT09LCit7CisgICAgSEFORExFMTYgICBoR2xvYmFsSGVhcDsgICAgICAgICAvKiAwMCAoaGFuZGxlIEJVUkdFUk1BU1RFUikgKi8KKyAgICBXT1JEICAgICAgIHBHbG9iYWxIZWFwOyAgICAgICAgIC8qIDAyIChzZWxlY3RvciBCVVJHRVJNQVNURVIpICovCisgICAgSE1PRFVMRTE2ICBoRXhlSGVhZDsgICAgICAgICAgICAvKiAwNCBoRmlyc3RNb2R1bGUgKi8KKyAgICBITU9EVUxFMTYgIGhFeGVTd2VlcDsgICAgICAgICAgIC8qIDA2ICh1bnVzZWQpICovCisgICAgSEFORExFMTYgICBUb3BQREI7ICAgICAgICAgICAgICAvKiAwOCAoaGFuZGxlIG9mIEtFUk5FTCBQREIpICovCisgICAgSEFORExFMTYgICBIZWFkUERCOyAgICAgICAgICAgICAvKiAwQSAoZmlyc3QgUERCIGluIGxpc3QpICovCisgICAgSEFORExFMTYgICBUb3BTaXplUERCOyAgICAgICAgICAvKiAwQyAodW51c2VkKSAqLworICAgIEhUQVNLMTYgICAgSGVhZFREQjsgICAgICAgICAgICAgLyogMEUgaEZpcnN0VGFzayAqLworICAgIEhUQVNLMTYgICAgQ3VyVERCOyAgICAgICAgICAgICAgLyogMTAgaEN1cnJlbnRUYXNrICovCisgICAgSFRBU0sxNiAgICBMb2FkVERCOyAgICAgICAgICAgICAvKiAxMiAodW51c2VkKSAqLworICAgIEhUQVNLMTYgICAgTG9ja1REQjsgICAgICAgICAgICAgLyogMTQgaExvY2tlZFRhc2sgKi8KK30gVEhIT09LOworCiAjcHJhZ21hIHBhY2soNCkKIAorZXh0ZXJuIFRISE9PSyAqcFRoaG9vazsKKwogZXh0ZXJuIEhUQVNLMTYgVEFTS19DcmVhdGUoIHN0cnVjdCBfVEhEQiAqdGhkYiwgc3RydWN0IF9ORV9NT0RVTEUgKnBNb2R1bGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSElOU1RBTkNFMTYgaEluc3RhbmNlLCBISU5TVEFOQ0UxNiBoUHJldkluc3RhbmNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVJTlQxNiBjbWRTaG93ICk7CiBleHRlcm4gdm9pZCBUQVNLX0tpbGxDdXJyZW50VGFzayggSU5UMTYgZXhpdENvZGUgKTsKIGV4dGVybiBIVEFTSzE2IFRBU0tfR2V0TmV4dFRhc2soIEhUQVNLMTYgaFRhc2sgKTsKIGV4dGVybiB2b2lkIFRBU0tfUmVzY2hlZHVsZSh2b2lkKTsKK2V4dGVybiB2b2lkIFRBU0tfSW5zdGFsbFRISG9vayggVEhIT09LICpwTmV3VGhvb2sgKTsKIAogI2VuZGlmIC8qIF9fV0lORV9UQVNLX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdGhyZWFkLmggYi9pbmNsdWRlL3RocmVhZC5oCmluZGV4IDllOTVkMjkuLjhkODFmZDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdGhyZWFkLmgKKysrIGIvaW5jbHVkZS90aHJlYWQuaApAQCAtOTIsNiArOTIsOSBAQAogICAgIC8qIFRoZSBmb2xsb3dpbmcgYXJlIFdpbmUtc3BlY2lmaWMgZmllbGRzICovCiAgICAgQ09OVEVYVCAgICAgICAgY29udGV4dDsgICAgICAgIC8qIDIwMCBUaHJlYWQgY29udGV4dCAqLwogICAgIFdBSVRfU1RSVUNUICAgIHdhaXRfc3RydWN0OyAgICAvKiAgICAgRXZlbnQgd2FpdCBzdHJ1Y3R1cmUgKi8KKyAgICBpbnQgICAgICAgICAgICBzb2NrZXQ7ICAgICAgICAgLyogICAgIFNvY2tldCBmb3Igc2VydmVyIGNvbW11bmljYXRpb24gKi8KKyAgICB1bnNpZ25lZCBpbnQgICBzZXE7ICAgICAgICAgICAgLyogICAgIFNlcnZlciBzZXF1ZW5jZSBudW1iZXIgKi8KKyAgICB2b2lkICAgICAgICAgICpzZXJ2ZXJfdGlkOyAgICAgLyogICAgIFNlcnZlciBpZCBmb3IgdGhpcyB0aHJlYWQgKi8KIH0gVEhEQjsKIAogLyogVGhyZWFkIHF1ZXVlIGVudHJ5ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Rvb2xiYXIuaCBiL2luY2x1ZGUvdG9vbGJhci5oCmluZGV4IDQwN2MzMzEuLmUwMzZhMTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdG9vbGJhci5oCisrKyBiL2luY2x1ZGUvdG9vbGJhci5oCkBAIC00MywxMiArNDMsMTYgQEAKICAgICBJTlQzMiAgICAgIG5PbGRIaXQ7CiAgICAgSU5UMzIgICAgICBuSG90SXRlbTsgICAgICAgIC8qIGluZGV4IG9mIHRoZSAiaG90IiBpdGVtICovCiAKKyAgICBIRk9OVDMyICAgIGhGb250OyAgICAgICAgICAgLyogdGV4dCBmb250ICovCiAgICAgSElNQUdFTElTVCBoaW1sRGVmOyAgICAgICAgIC8qIGRlZmF1bHQgaW1hZ2UgbGlzdCAqLwogICAgIEhJTUFHRUxJU1QgaGltbEhvdDsgICAgICAgICAvKiBob3QgaW1hZ2UgbGlzdCAqLwogICAgIEhJTUFHRUxJU1QgaGltbERpczsgICAgICAgICAvKiBkaXNhYmxlZCBpbWFnZSBsaXN0ICovCiAgICAgSFdORDMyICAgICBod25kVG9vbFRpcDsgICAgIC8qIGhhbmRsZSB0byB0b29sIHRpcCBjb250cm9sICovCiAgICAgSFdORDMyICAgICBod25kTm90aWZ5OyAgICAgIC8qIGhhbmRsZSB0byB0aGUgd2luZG93IHRoYXQgZ2V0cyBub3RpZmljYXRpb25zICovCiAgICAgQk9PTDMyICAgICBiVHJhbnNwYXJlbnQ7ICAgIC8qIGJhY2tncm91bmQgdHJhbnNwYXJlbmN5IGZsYWcgKi8KKyAgICBCT09MMzIgICAgIGJBdXRvU2l6ZTsKKworICAgIENPTE9SUkVGICAgY2xySW5zZXJ0TWFyazsgICAvKiBpbnNlcnQgbWFyayBjb2xvciAqLwogCiAgICAgVEJVVFRPTl9JTkZPICpidXR0b25zOwogICAgIENIQVIgICAgICAgICAqKnN0cmluZ3M7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3Rvb2x0aXBzLmggYi9pbmNsdWRlL3Rvb2x0aXBzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMwNzEzNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvdG9vbHRpcHMuaApAQCAtMCwwICsxLDQwIEBACisvKgorICogVG9vbCB0aXBzIGNsYXNzIGV4dHJhIGluZm8KKyAqCisgKiBDb3B5cmlnaHQgMTk5OCBFcmljIEtvaGwKKyAqLworCisjaWZuZGVmIF9fV0lORV9UT09MVElQU19ICisjZGVmaW5lIF9fV0lORV9UT09MVElQU19ICisKKwordHlwZWRlZiBzdHJ1Y3QgdGFnVFRUT09MX0lORk8KK3sKKyAgICBVSU5UMzIgdUZsYWdzOworICAgIEhXTkQzMiBod25kOworICAgIFVJTlQzMiB1SWQ7CisgICAgUkVDVDMyIHJlY3Q7CisgICAgSElOU1RBTkNFMzIgaGluc3Q7CisgICAgTFBTVFIgIGxwc3pUZXh0OworICAgIExQQVJBTSBsUGFyYW07CisKK30gVFRUT09MX0lORk87IAorCisKK3R5cGVkZWYgc3RydWN0IHRhZ1RPT0xUSVBTX0lORk8KK3sKKyAgICBCT09MMzIgICAgIGJBY3RpdmU7CisgICAgVUlOVDMyICAgICB1TnVtVG9vbHM7CisgICAgQ09MT1JSRUYgICBjbHJCazsKKyAgICBDT0xPUlJFRiAgIGNsclRleHQ7CisgICAgSEZPTlQzMiAgICBoRm9udDsKKyAgICBJTlQzMiAgICAgIGlNYXhUaXBXaWR0aDsKKyAgICBJTlQzMiAgICAgIGlDdXJyZW50VG9vbDsKKworICAgIFRUVE9PTF9JTkZPICp0b29sczsKK30gVE9PTFRJUFNfSU5GTzsKKworCitleHRlcm4gdm9pZCBUT09MVElQU19SZWdpc3RlciAodm9pZCk7CisKKyNlbmRpZiAgLyogX19XSU5FX1RPT0xUSVBTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2tiYXIuaCBiL2luY2x1ZGUvdHJhY2tiYXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjQ1ZjZhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS90cmFja2Jhci5oCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBUcmFja2JhciBjbGFzcyBleHRyYSBpbmZvCisgKgorICogQ29weXJpZ2h0IDE5OTggRXJpYyBLb2hsCisgKi8KKworI2lmbmRlZiBfX1dJTkVfVFJBQ0tCQVJfSAorI2RlZmluZSBfX1dJTkVfVFJBQ0tCQVJfSAorCit0eXBlZGVmIHN0cnVjdCB0YWdUUkFDS0JBUl9JTkZPCit7CisgICAgSU5UMzIgIG5SYW5nZU1pbjsKKyAgICBJTlQzMiAgblJhbmdlTWF4OworICAgIElOVDMyICBuTGluZVNpemU7CisgICAgSU5UMzIgIG5QYWdlU2l6ZTsKKyAgICBJTlQzMiAgblNlbE1pbjsKKyAgICBJTlQzMiAgblNlbE1heDsKKyAgICBJTlQzMiAgblBvczsKKyAgICBJTlQzMiAgblRodW1iTGVuOworCisgICAgQk9PTDMyIGJGb2N1czsKKyAgICBSRUNUMzIgcmNDaGFubmVsOworfSBUUkFDS0JBUl9JTkZPOworCisKK2V4dGVybiB2b2lkIFRSQUNLQkFSX1JlZ2lzdGVyICh2b2lkKTsKKworI2VuZGlmICAvKiBfX1dJTkVfVFJBQ0tCQVJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmVldmlldy5oIGIvaW5jbHVkZS90cmVldmlldy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkOTJhODAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3RyZWV2aWV3LmgKQEAgLTAsMCArMSwxOSBAQAorLyoKKyAqIFRyZWV2aWV3IGNsYXNzIGV4dHJhIGluZm8KKyAqCisgKiBDb3B5cmlnaHQgMTk5OCBFcmljIEtvaGwKKyAqLworCisjaWZuZGVmIF9fV0lORV9UUkVFVklFV19ICisjZGVmaW5lIF9fV0lORV9UUkVFVklFV19ICisKK3R5cGVkZWYgc3RydWN0IHRhZ1RSRUVWSUVXX0lORk8KK3sKKyAgICBVSU5UMzIgIHVEdW1teTsgIC8qIHRoaXMgaXMganVzdCBhIGR1bW15IHRvIGtlZXAgdGhlIGNvbXBpbGVyIGhhcHB5ICovCisKK30gVFJFRVZJRVdfSU5GTzsKKworCitleHRlcm4gdm9pZCBUUkVFVklFV19SZWdpc3RlciAodm9pZCk7CisKKyNlbmRpZiAgLyogX19XSU5FX1RSRUVWSUVXX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHNfeGxpYi5oIGIvaW5jbHVkZS90c194bGliLmgKaW5kZXggNzA4ODU5OS4uZjQ5YmRlZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS90c194bGliLmgKKysrIGIvaW5jbHVkZS90c194bGliLmgKQEAgLTIwLDYgKzIwLDcgQEAKIGV4dGVybiBjaGFyICogVFNYR2V0QXRvbU5hbWUoRGlzcGxheSosIEF0b20pOwogZXh0ZXJuIGNoYXIgKiBUU1hLZXlzeW1Ub1N0cmluZyhLZXlTeW0pOwogZXh0ZXJuIEF0b20gIFRTWEludGVybkF0b20oRGlzcGxheSosIGNvbnN0ICBjaGFyKiwgaW50KTsKK2V4dGVybiBDb2xvcm1hcCAgVFNYQ29weUNvbG9ybWFwQW5kRnJlZShEaXNwbGF5KiwgQ29sb3JtYXApOwogZXh0ZXJuIENvbG9ybWFwICBUU1hDcmVhdGVDb2xvcm1hcChEaXNwbGF5KiwgV2luZG93LCBWaXN1YWwqLCBpbnQpOwogZXh0ZXJuIEN1cnNvciAgVFNYQ3JlYXRlUGl4bWFwQ3Vyc29yKERpc3BsYXkqLCBQaXhtYXAsIFBpeG1hcCwgWENvbG9yKiwgWENvbG9yKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOwogZXh0ZXJuIEN1cnNvciAgVFNYQ3JlYXRlRm9udEN1cnNvcihEaXNwbGF5KiwgdW5zaWduZWQgaW50KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHNfeHNobS5oIGIvaW5jbHVkZS90c194c2htLmgKaW5kZXggMDFhMmI1MS4uODE3ZGE3ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS90c194c2htLmgKKysrIGIvaW5jbHVkZS90c194c2htLmgKQEAgLTE2LDUgKzE2LDYgQEAKIGV4dGVybiBpbnQgVFNYU2htUGl4bWFwRm9ybWF0KERpc3BsYXkgKik7CiBleHRlcm4gU3RhdHVzIFRTWFNobURldGFjaChEaXNwbGF5ICosIFhTaG1TZWdtZW50SW5mbyAqKTsKIGV4dGVybiBTdGF0dXMgVFNYU2htQXR0YWNoKERpc3BsYXkgKiwgWFNobVNlZ21lbnRJbmZvICopOworZXh0ZXJuIFN0YXR1cyBUU1hTaG1QdXRJbWFnZShEaXNwbGF5ICosIERyYXdhYmxlLCBHQywgWEltYWdlICosIGludCwgaW50LCBpbnQsIGludCwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQsIEJvb2wpOwogCiAjZW5kaWYgLyogX19XSU5FX1RTWFNITV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3ZlcnNpb24uaCBiL2luY2x1ZGUvdmVyc2lvbi5oCmluZGV4IGFiYjliNjUuLjA1NTRhMGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdmVyc2lvbi5oCisrKyBiL2luY2x1ZGUvdmVyc2lvbi5oCkBAIC0xICsxIEBACi0jZGVmaW5lIFdJTkVfUkVMRUFTRV9JTkZPICJXaW5lIHJlbGVhc2UgOTgwNjI4IgorI2RlZmluZSBXSU5FX1JFTEVBU0VfSU5GTyAiV2luZSByZWxlYXNlIDk4MDcxMiIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvd2luZG93cy5oIGIvaW5jbHVkZS93aW5kb3dzLmgKaW5kZXggNmI3YmZjYy4uNTE4NDI3MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS93aW5kb3dzLmgKKysrIGIvaW5jbHVkZS93aW5kb3dzLmgKQEAgLTE2ODQsNiArMTY4NCwzNSBAQAogREVDTF9XSU5FTElCX1RZUEUoQUJDKQogREVDTF9XSU5FTElCX1RZUEUoTFBBQkMpCiAKKyAgLyogZm9yIEdldENoYXJhY3RlclBsYWNlbWVudCAoKSAqLwordHlwZWRlZiBzdHJ1Y3QgdGFnR0NQX1JFU1VMVFMzMkEKK3sKKyAgICBEV09SRCAgbFN0cnVjdFNpemU7CisgICAgTFBTVFIgIGxwT3V0U3RyaW5nOworICAgIFVJTlQzMiAqbHBPcmRlcjsKKyAgICBJTlQzMiAgKmxwRHg7CisgICAgSU5UMzIgICpscENhcmV0UG9zOworICAgIExQU1RSICBscENsYXNzOworICAgIFVJTlQzMiAqbHBHbHlwaHM7CisgICAgVUlOVDMyIG5HbHlwaHM7CisgICAgVUlOVDMyIG5NYXhGaXQ7Cit9IEdDUF9SRVNVTFRTMzJBOworCit0eXBlZGVmIHN0cnVjdCB0YWdHQ1BfUkVTVUxUUzMyVworeworICAgIERXT1JEICBsU3RydWN0U2l6ZTsKKyAgICBMUFdTVFIgbHBPdXRTdHJpbmc7CisgICAgVUlOVDMyICpscE9yZGVyOworICAgIElOVDMyICAqbHBEeDsKKyAgICBJTlQzMiAgKmxwQ2FyZXRQb3M7CisgICAgTFBXU1RSIGxwQ2xhc3M7CisgICAgVUlOVDMyICpscEdseXBoczsKKyAgICBVSU5UMzIgbkdseXBoczsKKyAgICBVSU5UMzIgbk1heEZpdDsKK30gR0NQX1JFU1VMVFMzMlc7CisKK0RFQ0xfV0lORUxJQl9UWVBFX0FXKEdDUF9SRVNVTFRTKQorCiAgIC8qIFJhc3Rlcml6ZXIgc3RhdHVzICovCiB0eXBlZGVmIHN0cnVjdAogewpAQCAtMzE4Niw2ICszMjE1LDM2IEBACiAjZGVmaW5lIFdNX1BSSU5UICAgICAgICAgICAgIDB4MDMxNwogI2RlZmluZSBXTV9QUklOVENMSUVOVCAgICAgICAweDAzMTgKIAorICAvKiBNRkMgbWVzc2FnZXMgWzM3MC0zN2ZdICovCisKKyNkZWZpbmUgV01fUVVFUllBRlhXTkRQUk9DICAweDAzNjAKKyNkZWZpbmUgV01fU0laRVBBUkVOVCAgICAgICAweDAzNjEKKyNkZWZpbmUgV01fU0VUTUVTU0FHRVNUUklORyAweDAzNjIKKyNkZWZpbmUgV01fSURMRVVQREFURUNNRFVJICAweDAzNjMgCisjZGVmaW5lIFdNX0lOSVRJQUxVUERBVEUgICAgMHgwMzY0CisjZGVmaW5lIFdNX0NPTU1BTkRIRUxQICAgICAgMHgwMzY1CisjZGVmaW5lIFdNX0hFTFBISVRURVNUICAgICAgMHgwMzY2CisjZGVmaW5lIFdNX0VYSVRIRUxQTU9ERSAgICAgMHgwMzY3CisjZGVmaW5lIFdNX1JFQ0FMQ1BBUkVOVCAgICAgMHgwMzY4CisjZGVmaW5lIFdNX1NJWkVDSElMRCAgICAgICAgMHgwMzY5CisjZGVmaW5lIFdNX0tJQ0tJRExFICAgICAgICAgMHgwMzZBIAorI2RlZmluZSBXTV9RVUVSWUNFTlRFUldORCAgIDB4MDM2QgorI2RlZmluZSBXTV9ESVNBQkxFTU9EQUwgICAgIDB4MDM2QworI2RlZmluZSBXTV9GTE9BVFNUQVRVUyAgICAgIDB4MDM2RCAKKyNkZWZpbmUgV01fQUNUSVZBVEVUT1BMRVZFTCAweDAzNkUgCisjZGVmaW5lIFdNX1FVRVJZM0RDT05UUk9MUyAgMHgwMzZGIAorI2RlZmluZSBXTV9TT0NLRVRfTk9USUZZICAgIDB4MDM3MworI2RlZmluZSBXTV9TT0NLRVRfREVBRCAgICAgIDB4MDM3NAorI2RlZmluZSBXTV9QT1BNRVNTQUdFU1RSSU5HIDB4MDM3NQorI2RlZmluZSBXTV9PQ0NfTE9BREZST01TVFJFQU0gICAgICAgICAgIDB4MDM3NgorI2RlZmluZSBXTV9PQ0NfTE9BREZST01TVE9SQUdFICAgICAgICAgIDB4MDM3NworI2RlZmluZSBXTV9PQ0NfSU5JVE5FVyAgICAgICAgICAgICAgICAgIDB4MDM3OAorI2RlZmluZSBXTV9PQ0NfTE9BREZST01TVFJFQU1fRVggICAgICAgIDB4MDM3QQorI2RlZmluZSBXTV9PQ0NfTE9BREZST01TVE9SQUdFX0VYICAgICAgIDB4MDM3QgorI2RlZmluZSBXTV9RVUVVRV9TRU5USU5FTCAgIDB4MDM3OQorCisvKiBlbmQgb2YgTUZDIG1lc3NhZ2VzICovCisKICNkZWZpbmUgV01fQ09BTEVTQ0VfRklSU1QgICAgMHgwMzkwCiAjZGVmaW5lIFdNX0NPQUxFU0NFX0xBU1QgICAgIDB4MDM5RgogCkBAIC01ODc3LDYgKzU5MzYsMzMgQEAKIERFQ0xfV0lORUxJQl9UWVBFX0FXKExQTkVUUkVTT1VSQ0UpCiAKIHR5cGVkZWYgc3RydWN0IHsKKyAgICBEV09SRCBjYlN0cnVjdHVyZTsgICAgICAgLyogc2l6ZSBvZiB0aGlzIHN0cnVjdHVyZSBpbiBieXRlcyAqLworICAgIEhXTkQzMiBod25kT3duZXI7ICAgICAgICAgIC8qIG93bmVyIHdpbmRvdyBmb3IgdGhlIGRpYWxvZyAqLworICAgIExQTkVUUkVTT1VSQ0UzMkEgbHBDb25uUmVzOy8qIFJlcXVlc3RlZCBSZXNvdXJjZSBpbmZvICAgICovCisgICAgRFdPUkQgZHdGbGFnczsgICAgICAgICAgIC8qIGZsYWdzIChzZWUgYmVsb3cpICovCisgICAgRFdPUkQgZHdEZXZOdW07ICAgICAgICAgIC8qIG51bWJlciBvZiBkZXZpY2VzIGNvbm5lY3RlZCB0byAqLworfSBDT05ORUNURExHU1RSVUNUMzJBLCAqTFBDT05ORUNURExHU1RSVUNUMzJBOwordHlwZWRlZiBzdHJ1Y3QgeworICAgIERXT1JEIGNiU3RydWN0dXJlOyAgICAgICAvKiBzaXplIG9mIHRoaXMgc3RydWN0dXJlIGluIGJ5dGVzICovCisgICAgSFdORDMyIGh3bmRPd25lcjsgICAgICAgICAgLyogb3duZXIgd2luZG93IGZvciB0aGUgZGlhbG9nICovCisgICAgTFBORVRSRVNPVVJDRTMyVyBscENvbm5SZXM7LyogUmVxdWVzdGVkIFJlc291cmNlIGluZm8gICAgKi8KKyAgICBEV09SRCBkd0ZsYWdzOyAgICAgICAgICAgLyogZmxhZ3MgKHNlZSBiZWxvdykgKi8KKyAgICBEV09SRCBkd0Rldk51bTsgICAgICAgICAgLyogbnVtYmVyIG9mIGRldmljZXMgY29ubmVjdGVkIHRvICovCit9IENPTk5FQ1RETEdTVFJVQ1QzMlcsICpMUENPTk5FQ1RETEdTVFJVQ1QzMlc7CisKK0RFQ0xfV0lORUxJQl9UWVBFX0FXKENPTk5FQ1RETEdTVFJVQ1QpCitERUNMX1dJTkVMSUJfVFlQRV9BVyhMUENPTk5FQ1RETEdTVFJVQ1QpCisKKy8qKi8KKyNkZWZpbmUgQ09OTkRMR19ST19QQVRIICAgICAweDAwMDAwMDAxIC8qIFJlc291cmNlIHBhdGggc2hvdWxkIGJlIHJlYWQtb25seSAgICAqLworI2RlZmluZSBDT05ORExHX0NPTk5fUE9JTlQgIDB4MDAwMDAwMDIgLyogTmV0d2FyZSAtc3R5bGUgbW92YWJsZSBjb25uZWN0aW9uIHBvaW50IGVuYWJsZWQgKi8KKyNkZWZpbmUgQ09OTkRMR19VU0VfTVJVICAgICAweDAwMDAwMDA0IC8qIFVzZSBNUlUgY29tYm9ib3ggICovCisjZGVmaW5lIENPTk5ETEdfSElERV9CT1ggICAgMHgwMDAwMDAwOCAvKiBIaWRlIHBlcnNpc3RlbnQgY29ubmVjdCBjaGVja2JveCAgKi8KKyNkZWZpbmUgQ09OTkRMR19QRVJTSVNUICAgICAweDAwMDAwMDEwIC8qIEZvcmNlIHBlcnNpc3RlbnQgY29ubmVjdGlvbiAqLworI2RlZmluZSBDT05ORExHX05PVF9QRVJTSVNUIDB4MDAwMDAwMjAgLyogRm9yY2UgY29ubmVjdGlvbiBOT1QgcGVyc2lzdGVudCAqLworCisKK3R5cGVkZWYgc3RydWN0IHsKIAlEV09SRAljYlN0cnVjdHVyZTsKIAlEV09SRAlkd0ZsYWdzOwogCURXT1JECWR3U3BlZWQ7CkBAIC02MTU5LDcgKzYyNDUsNyBAQAogSEFORExFMTYgICAgV0lOQVBJIEZhckdldE93bmVyKEhHTE9CQUwxNik7CiBWT0lEICAgICAgICBXSU5BUEkgRmFyU2V0T3duZXIoSEdMT0JBTDE2LEhBTkRMRTE2KTsKIEJPT0wxNiAgICAgIFdJTkFQSSBGYXN0V2luZG93RnJhbWUoSERDMTYsY29uc3QgUkVDVDE2KixJTlQxNixJTlQxNixEV09SRCk7Ci1WT0lEICAgICAgICBXSU5BUEkgRmlsZUNEUihGQVJQUk9DMTYpOworRkFSUFJPQzE2ICAgV0lOQVBJIEZpbGVDRFIoRkFSUFJPQzE2KTsKIFZPSUQgICAgICAgIFdJTkFQSSBGaWxsV2luZG93KEhXTkQxNixIV05EMTYsSERDMTYsSEJSVVNIMTYpOwogSU5UMTYgICAgICAgV0lOQVBJIEZsdXNoQ29tbShJTlQxNixJTlQxNik7CiBXT1JEICAgICAgICBXSU5BUEkgRnJlZVNlbGVjdG9yKFdPUkQpOwpAQCAtNjQ0OSw4ICs2NTM1LDggQEAKIERXT1JEICAgICAgIFdJTkFQSSBHZXRPYmplY3RUeXBlKEhBTkRMRTMyKTsKIFVJTlQzMiAgICAgIFdJTkFQSSBHZXRPRU1DUCh2b2lkKTsKIERXT1JEICAgICAgIFdJTkFQSSBHZXRQcmlvcml0eUNsYXNzKEhBTkRMRTMyKTsKLUlOVDMyICAgICAgIFdJTkFQSSBHZXRQcml2YXRlUHJvZmlsZVNlY3Rpb24zMkEoTFBDU1RSLExQU1RSLElOVDMyLExQQ1NUUik7Ci1JTlQzMiAgICAgICBXSU5BUEkgR2V0UHJpdmF0ZVByb2ZpbGVTZWN0aW9uMzJXKExQQ1dTVFIsTFBXU1RSLElOVDMyLExQQ1dTVFIpOworSU5UMzIgICAgICAgV0lOQVBJIEdldFByaXZhdGVQcm9maWxlU2VjdGlvbjMyQShMUENTVFIsTFBTVFIsVUlOVDMyLExQQ1NUUik7CitJTlQzMiAgICAgICBXSU5BUEkgR2V0UHJpdmF0ZVByb2ZpbGVTZWN0aW9uMzJXKExQQ1dTVFIsTFBXU1RSLFVJTlQzMixMUENXU1RSKTsKICNkZWZpbmUgICAgIEdldFByaXZhdGVQcm9maWxlU2VjdGlvbiBXSU5FTElCX05BTUVfQVcoR2V0UHJpdmF0ZVByb2ZpbGVTZWN0aW9uKQogSEFORExFMzIgICAgV0lOQVBJIEdldFByb2Nlc3NIZWFwKHZvaWQpOwogRFdPUkQgICAgICAgV0lOQVBJIEdldFJlZ2lvbkRhdGEoSFJHTjMyLERXT1JELExQUkdOREFUQSk7CkBAIC02NjQ3LDYgKzY3MzMsNyBAQAogQk9PTDMyICAgICAgV0lOQVBJIFNldFdpbmRvd0NvbnRleHRIZWxwSWQoSFdORDMyLERXT1JEKTsKIEJPT0wzMiAgICAgIFdJTkFQSSBTZXRXb3JsZFRyYW5zZm9ybShIREMzMixjb25zdCBYRk9STSopOwogVk9JRCAgICAgICAgV0lOQVBJIFNsZWVwKERXT1JEKTsKK0RXT1JEICAgICAgIFdJTkFQSSBTbGVlcEV4KERXT1JELEJPT0wzMik7CiBCT09MMzIgICAgICBXSU5BUEkgU3RhcnRTZXJ2aWNlMzJBKEhBTkRMRTMyLERXT1JELExQQ1NUUiopOwogQk9PTDMyICAgICAgV0lOQVBJIFN0YXJ0U2VydmljZTMyVyhIQU5ETEUzMixEV09SRCxMUENXU1RSKik7CiAjZGVmaW5lICAgICBTdGFydFNlcnZpY2UgV0lORUxJQl9OQU1FX0FXKFN0YXJ0U2VydmljZSkKQEAgLTY2ODIsNiArNjc2OSwxMyBAQAogVUlOVDMyICAgICAgV0lOQVBJIFdOZXRBZGRDb25uZWN0aW9uM18zMkEoSFdORDMyLExQTkVUUkVTT1VSQ0UzMkEsTFBDU1RSLExQQ1NUUixEV09SRCk7CiBVSU5UMzIgICAgICBXSU5BUEkgV05ldEFkZENvbm5lY3Rpb24zXzMyVyhIV05EMzIsTFBORVRSRVNPVVJDRTMyVyxMUENXU1RSLExQQ1dTVFIsRFdPUkQpOwogI2RlZmluZSAgICAgV05ldEFkZENvbm5lY3Rpb24zIFdJTkVMSUJfTkFNRV9BVyhXTmV0QWRkQ29ubmVjdGlvbjNfKQorVUlOVDMyICAgICAgV0lOQVBJIFdOZXRDb25uZWN0aW9uRGlhbG9nMV8zMihIV05EMzIsRFdPUkQpOworVUlOVDMyICAgICAgV0lOQVBJIFdOZXRDb25uZWN0aW9uRGlhbG9nMV8zMkEoTFBDT05ORUNURExHU1RSVUNUMzJBKTsKK1VJTlQzMiAgICAgIFdJTkFQSSBXTmV0Q29ubmVjdGlvbkRpYWxvZzFfMzJXKExQQ09OTkVDVERMR1NUUlVDVDMyVyk7CisjZGVmaW5lICAgICBXTmV0Q29ubmVjdGlvbkRpYWxvZzEgV0lORUxJQl9OQU1FX0FXKFdOZXRDb25uZWN0aW9uRGlhbG9nMV8pCitVSU5UMzIgICAgICBXSU5BUEkgTXVsdGluZXRHZXRFcnJvclRleHQzMkEoRFdPUkQsRFdPUkQsRFdPUkQpOworVUlOVDMyICAgICAgV0lOQVBJIE11bHRpbmV0R2V0RXJyb3JUZXh0MzJXKERXT1JELERXT1JELERXT1JEKTsKKyNkZWZpbmUgICAgIE11bHRpbmV0R2V0RXJyb3JUZXh0IFdJTkVMSUJfTkFNRV9BVyhNdWx0aW5ldEdldEVycm9yVGV4dF8pCiBTRUdQVFIgICAgICBXSU5BUEkgV09XR2xvYmFsQWxsb2NMb2NrMTYoRFdPUkQsRFdPUkQsSEdMT0JBTDE2Kik7CiBEV09SRCAgICAgICBXSU5BUEkgV09XQ2FsbGJhY2sxNihGQVJQUk9DMTYsRFdPUkQpOwogQk9PTDMyICAgICAgV0lOQVBJIFdPV0NhbGxiYWNrMTZFeChGQVJQUk9DMTYsRFdPUkQsRFdPUkQsTFBWT0lELExQRFdPUkQpOwpAQCAtNzcwNCw5ICs3Nzk4LDkgQEAKIFVJTlQzMiAgICAgIFdJTkFQSSBHZXRQcml2YXRlUHJvZmlsZUludDMyQShMUENTVFIsTFBDU1RSLElOVDMyLExQQ1NUUik7CiBVSU5UMzIgICAgICBXSU5BUEkgR2V0UHJpdmF0ZVByb2ZpbGVJbnQzMlcoTFBDV1NUUixMUENXU1RSLElOVDMyLExQQ1dTVFIpOwogI2RlZmluZSAgICAgR2V0UHJpdmF0ZVByb2ZpbGVJbnQgV0lORUxJQl9OQU1FX0FXKEdldFByaXZhdGVQcm9maWxlSW50KQotSU5UMTYgICAgICAgV0lOQVBJIEdldFByaXZhdGVQcm9maWxlU3RyaW5nMTYoTFBDU1RSLExQQ1NUUixMUENTVFIsTFBTVFIsSU5UMTYsTFBDU1RSKTsKLUlOVDMyICAgICAgIFdJTkFQSSBHZXRQcml2YXRlUHJvZmlsZVN0cmluZzMyQShMUENTVFIsTFBDU1RSLExQQ1NUUixMUFNUUixJTlQzMixMUENTVFIpOwotSU5UMzIgICAgICAgV0lOQVBJIEdldFByaXZhdGVQcm9maWxlU3RyaW5nMzJXKExQQ1dTVFIsTFBDV1NUUixMUENXU1RSLExQV1NUUixJTlQzMixMUENXU1RSKTsKK0lOVDE2ICAgICAgIFdJTkFQSSBHZXRQcml2YXRlUHJvZmlsZVN0cmluZzE2KExQQ1NUUixMUENTVFIsTFBDU1RSLExQU1RSLFVJTlQxNixMUENTVFIpOworSU5UMzIgICAgICAgV0lOQVBJIEdldFByaXZhdGVQcm9maWxlU3RyaW5nMzJBKExQQ1NUUixMUENTVFIsTFBDU1RSLExQU1RSLFVJTlQzMixMUENTVFIpOworSU5UMzIgICAgICAgV0lOQVBJIEdldFByaXZhdGVQcm9maWxlU3RyaW5nMzJXKExQQ1dTVFIsTFBDV1NUUixMUENXU1RSLExQV1NUUixVSU5UMzIsTFBDV1NUUik7CiAjZGVmaW5lICAgICBHZXRQcml2YXRlUHJvZmlsZVN0cmluZyBXSU5FTElCX05BTUVfQVcoR2V0UHJpdmF0ZVByb2ZpbGVTdHJpbmcpCiBGQVJQUk9DMTYgICBXSU5BUEkgR2V0UHJvY0FkZHJlc3MxNihITU9EVUxFMTYsU0VHUFRSKTsKIEZBUlBST0MzMiAgIFdJTkFQSSBHZXRQcm9jQWRkcmVzczMyKEhNT0RVTEUzMixMUENTVFIpOwpAQCAtNzcxNSw5ICs3ODA5LDkgQEAKIFVJTlQzMiAgICAgIFdJTkFQSSBHZXRQcm9maWxlSW50MzJBKExQQ1NUUixMUENTVFIsSU5UMzIpOwogVUlOVDMyICAgICAgV0lOQVBJIEdldFByb2ZpbGVJbnQzMlcoTFBDV1NUUixMUENXU1RSLElOVDMyKTsKICNkZWZpbmUgICAgIEdldFByb2ZpbGVJbnQgV0lORUxJQl9OQU1FX0FXKEdldFByb2ZpbGVJbnQpCi1JTlQxNiAgICAgICBXSU5BUEkgR2V0UHJvZmlsZVN0cmluZzE2KExQQ1NUUixMUENTVFIsTFBDU1RSLExQU1RSLElOVDE2KTsKLUlOVDMyICAgICAgIFdJTkFQSSBHZXRQcm9maWxlU3RyaW5nMzJBKExQQ1NUUixMUENTVFIsTFBDU1RSLExQU1RSLElOVDMyKTsKLUlOVDMyICAgICAgIFdJTkFQSSBHZXRQcm9maWxlU3RyaW5nMzJXKExQQ1dTVFIsTFBDV1NUUixMUENXU1RSLExQV1NUUixJTlQzMik7CitJTlQxNiAgICAgICBXSU5BUEkgR2V0UHJvZmlsZVN0cmluZzE2KExQQ1NUUixMUENTVFIsTFBDU1RSLExQU1RSLFVJTlQxNik7CitJTlQzMiAgICAgICBXSU5BUEkgR2V0UHJvZmlsZVN0cmluZzMyQShMUENTVFIsTFBDU1RSLExQQ1NUUixMUFNUUixVSU5UMzIpOworSU5UMzIgICAgICAgV0lOQVBJIEdldFByb2ZpbGVTdHJpbmczMlcoTFBDV1NUUixMUENXU1RSLExQQ1dTVFIsTFBXU1RSLFVJTlQzMik7CiAjZGVmaW5lICAgICBHZXRQcm9maWxlU3RyaW5nIFdJTkVMSUJfTkFNRV9BVyhHZXRQcm9maWxlU3RyaW5nKQogSEFORExFMTYgICAgV0lOQVBJIEdldFByb3AxNihIV05EMTYsTFBDU1RSKTsKIEhBTkRMRTMyICAgIFdJTkFQSSBHZXRQcm9wMzJBKEhXTkQzMixMUENTVFIpOwpAQCAtODI1Myw2ICs4MzQ3LDEyIEBACiBCT09MMzIgICAgICBXSU5BUEkgT2VtVG9DaGFyQnVmZjMyQShMUENTVFIsTFBTVFIsRFdPUkQpOwogQk9PTDMyICAgICAgV0lOQVBJIE9lbVRvQ2hhckJ1ZmYzMlcoTFBDU1RSLExQV1NUUixEV09SRCk7CiAjZGVmaW5lICAgICBPZW1Ub0NoYXJCdWZmIFdJTkVMSUJfTkFNRV9BVyhPZW1Ub0NoYXJCdWZmKQorSU5UMTYgICAgICAgV0lOQVBJIFdpZGVDaGFyVG9Mb2NhbDE2KExQU1RSLExQV1NUUixJTlQxNik7CitJTlQzMiAgICAgICBXSU5BUEkgV2lkZUNoYXJUb0xvY2FsMzIoTFBTVFIsTFBXU1RSLElOVDMyKTsKKyNkZWZpbmUJCQlXaWRlQ2hhclRvTG9jYWwgV0lORUxJQl9OQU1FKFdpZGVDaGFyVG9Mb2NhbCkKK0lOVDE2ICAgICAgIFdJTkFQSSBMb2NhbFRvV2lkZUNoYXIxNihMUFdTVFIsTFBTVFIsSU5UMTYpOworSU5UMzIgICAgICAgV0lOQVBJIExvY2FsVG9XaWRlQ2hhcjMyKExQV1NUUixMUFNUUixJTlQzMik7CisjZGVmaW5lCQkJTG9jYWxUb1dpZGVDaGFyIFdJTkVMSUJfTkFNRShMb2NhbFRvV2lkZUNoYXIpCiBJTlQxNiAgICAgICBXSU5BUEkgT2Zmc2V0Q2xpcFJnbjE2KEhEQzE2LElOVDE2LElOVDE2KTsKIElOVDMyICAgICAgIFdJTkFQSSBPZmZzZXRDbGlwUmduMzIoSERDMzIsSU5UMzIsSU5UMzIpOwogI2RlZmluZSAgICAgT2Zmc2V0Q2xpcFJnbiBXSU5FTElCX05BTUUoT2Zmc2V0Q2xpcFJnbikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvd2luZXJyb3IuaCBiL2luY2x1ZGUvd2luZXJyb3IuaAppbmRleCA0NDFmODM5Li44YzZjOGQ2IDEwMDY0NAotLS0gYS9pbmNsdWRlL3dpbmVycm9yLmgKKysrIGIvaW5jbHVkZS93aW5lcnJvci5oCkBAIC05NywxNCArOTcsMTMgQEAKICNkZWZpbmUgQ09fRV9JTklUX1NDTV9FWEVDX0ZBSUxVUkUJMHg4MDAwNDAxMQogI2RlZmluZSBDT19FX0lOSVRfT05MWV9TSU5HTEVfVEhSRUFERUQJMHg4MDAwNDAxMiAqLwogCi0KLSNkZWZpbmUJT0xFX0VfRU5VTV9OT01PUkUJCTB4ODAwNDAwMDIKKyNkZWZpbmUJT0xFX0VfRU5VTV9OT01PUkUJCSAgICAgIDB4ODAwNDAwMDIKKyNkZWZpbmUgQ0xBU1NfRV9OT0FHR1JFR0FUSU9OICAgICAweDgwMDQwMTEwCiAjZGVmaW5lCUNMQVNTX0VfQ0xBU1NOT1RBVkFJTEFCTEUJMHg4MDA0MDExMQotCi0jZGVmaW5lIEVfQUNDRVNTREVOSUVECQkJMHg4MDA3MDAwNQotI2RlZmluZSBFX0hBTkRMRQkJCTB4ODAwNzAwMDYKLSNkZWZpbmUJRV9PVVRPRk1FTU9SWQkJCTB4ODAwNzAwMEUKLSNkZWZpbmUJRV9JTlZBTElEQVJHCQkJMHg4MDA3MDA1NworI2RlZmluZSBFX0FDQ0VTU0RFTklFRAkJCSAgICAgIDB4ODAwNzAwMDUKKyNkZWZpbmUgRV9IQU5ETEUgICAgICAgICAgICAJCQkweDgwMDcwMDA2CisjZGVmaW5lCUVfT1VUT0ZNRU1PUlkJCQkgICAgICAgIDB4ODAwNzAwMEUKKyNkZWZpbmUJRV9JTlZBTElEQVJHCQkJICAgICAgICAweDgwMDcwMDU3CiAKIC8vI2RlZmluZSBPTEVfRV9GSVJTVCAweDgwMDQwMDAwTAogLy8jZGVmaW5lIE9MRV9FX0xBU1QgIDB4ODAwNDAwRkZMCmRpZmYgLS1naXQgYS9pbmNsdWRlL3gxMWRydi5oIGIvaW5jbHVkZS94MTFkcnYuaAppbmRleCBkOGU3ZDdhLi4wYmI5YjI0IDEwMDY0NAotLS0gYS9pbmNsdWRlL3gxMWRydi5oCisrKyBiL2luY2x1ZGUveDExZHJ2LmgKQEAgLTkzLDYgKzkzLDcgQEAKIGV4dGVybiBDT0xPUlJFRiBYMTFEUlZfR2V0UGl4ZWwoIHN0cnVjdCB0YWdEQyAqZGMsIElOVDMyIHgsIElOVDMyIHkpOwogZXh0ZXJuIEJPT0wzMiBYMTFEUlZfUGFpbnRSZ24oIHN0cnVjdCB0YWdEQyAqZGMsIEhSR04zMiBocmduICk7CiBleHRlcm4gQk9PTDMyIFgxMURSVl9Qb2x5bGluZSggc3RydWN0IHRhZ0RDICpkYyxjb25zdCBMUFBPSU5UMzIgcHQsSU5UMzIgY291bnQpOworZXh0ZXJuIEJPT0wzMiBYMTFEUlZfUG9seUJlemllciggc3RydWN0IHRhZ0RDICpkYyxjb25zdCBQT0lOVDMyIHN0YXJ0LCBjb25zdCBMUFBPSU5UMzIgbHBwdCxEV09SRCBjUG9pbnRzKTsKIGV4dGVybiBCT09MMzIgWDExRFJWX1BvbHlnb24oIHN0cnVjdCB0YWdEQyAqZGMsIExQUE9JTlQzMiBwdCwgSU5UMzIgY291bnQgKTsKIGV4dGVybiBCT09MMzIgWDExRFJWX1BvbHlQb2x5Z29uKCBzdHJ1Y3QgdGFnREMgKmRjLCBMUFBPSU5UMzIgcHQsCiAJCQkJICBMUElOVDMyIGNvdW50cywgVUlOVDMyIHBvbHlnb25zKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUveDExZm9udC5oIGIvaW5jbHVkZS94MTFmb250LmgKaW5kZXggYWVkMDQyYy4uMjY4ZmUxYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS94MTFmb250LmgKKysrIGIvaW5jbHVkZS94MTFmb250LmgKQEAgLTc2LDcgKzc2LDYgQEAKICAgICBVSU5UMTYJCQlsZmRfd2lkdGg7CiAgICAgVUlOVDE2CQkJbGZkX2RlY2lwb2ludHM7CiAgICAgVUlOVDE2CQkJbGZkX3Jlc29sdXRpb247Ci0KICAgICBJRk9OVElORk8xNgkJCWRmOwogfSBmb250SW5mbzsKIApAQCAtOTcsNiArOTYsMTUgQEAKICAgQ0hBUgkJCQlsZkZhY2VOYW1lW0xGX0ZBQ0VTSVpFXTsKIH0gZm9udFJlc291cmNlOwogCit0eXBlZGVmIHN0cnVjdCB7CisgIGZsb2F0CQlhLGIsYyxkOwkvKiBwaXhlbHNpemUgbWF0cml4ICovCisgIHVuc2lnbmVkIGxvbmcJUkFXX0FTQ0VOVDsKKyAgdW5zaWduZWQgbG9uZwlSQVdfREVTQ0VOVDsKKyAgZmxvYXQJCXBpeGVsc2l6ZTsKKyAgZmxvYXQJCWFzY2VudDsKKyAgZmxvYXQJCWRlc2NlbnQ7Cit9IFhGT05UVFJBTlM7CisKICNkZWZpbmUgRk9fUkVTT1VSQ0VfTUFTSwkweDAwMEYKICNkZWZpbmUgRk9fU1lTVEVNCQkweDAwMDEJCS8qIHJlc2lkZW50IGluIGNhY2hlICovCiAjZGVmaW5lIEZPX1NPRlRGT05UCQkweDAwMDIJCS8qIGluc3RhbGxlZCBhdCBydW50aW1lICovCkBAIC0xMjcsOCArMTM1LDEwIEBACiAgIExQTUFUMioJCWxwWEZvcm07CQkvKiBvcHRpb25hbCB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggKi8KICAgUGl4bWFwKiAgICAgICAgICAgICAgIGxwUGl4bWFwOwkJLyogb3B0aW9uYWwgY2hhcmFjdGVyIGJpdG1hc2tzIGZvciBzeW50aCBmb250cyAqLwogCisgIFhGT05UVFJBTlMJCSpscFgxMVRyYW5zOwkJLyogSW5mbyBmb3IgWDExUjYgdHJhbnNmb3JtICovCiAgIElOVDE2CQkJZm9JbnRlcm5hbExlYWRpbmc7CiAgIElOVDE2CQkJZm9BdmdDaGFyV2lkdGg7CisgIElOVDE2CQkJZm9NYXhDaGFyV2lkdGg7CiAgIFVJTlQxNgkJZm9fZmxhZ3M7CiAKICAgLyogZm9udCBjYWNoZSBob3VzZWtlZXBpbmcgKi8KQEAgLTE3Niw0ICsxODYsMyBAQAogZXh0ZXJuIExQSUZPTlRJTkZPMTYgWEZPTlRfR2V0Rm9udEluZm8oIFhfUEhZU0ZPTlQgcEZvbnQgKTsKIAogI2VuZGlmIF9fV0lORV9YMTFGT05UX0ggCi0KZGlmZiAtLWdpdCBhL2xvYWRlci9tb2R1bGUuYyBiL2xvYWRlci9tb2R1bGUuYwppbmRleCAyNjY4MTc0Li5iNmY4NTliIDEwMDY0NAotLS0gYS9sb2FkZXIvbW9kdWxlLmMKKysrIGIvbG9hZGVyL21vZHVsZS5jCkBAIC0yMjAsMTYgKzIyMCwxNCBAQAogICAgIExQU1RSCWRvdHB0cjsKICAgICBXSU5FX01PRFJFRgkqd207CiAKKyAgICBpZiAoIXByb2Nlc3MpCisgICAgCXJldHVybiAwOwogICAgIGlmICghKGZpbGVuYW1lID0gc3RycmNociggcGF0aCwgJ1xcJyApKSkKICAgICAJZmlsZW5hbWUgPSBIRUFQX3N0cmR1cEEocHJvY2Vzcy0+aGVhcCwwLHBhdGgpOwogICAgIGVsc2UgCiAgICAgCWZpbGVuYW1lID0gSEVBUF9zdHJkdXBBKHByb2Nlc3MtPmhlYXAsMCxmaWxlbmFtZSsxKTsKICAgICBkb3RwdHI9c3RycmNocihmaWxlbmFtZSwnLicpOwogCi0gICAgaWYgKCFwcm9jZXNzKSB7Ci0gICAgCUhlYXBGcmVlKHByb2Nlc3MtPmhlYXAsMCxmaWxlbmFtZSk7Ci0gICAgCXJldHVybiAwOwotICAgIH0KICAgICBmb3IgKHdtPXByb2Nlc3MtPm1vZHJlZl9saXN0O3dtO3dtPXdtLT5uZXh0KSB7CiAgICAgCUxQU1RSCXhtb2RuYW1lLHhkb3RwdHI7CiAKQEAgLTI1MSw2ICsyNDksMzMgQEAKIAkvKiBGSVhNRTogYWRkIHBhdGhzLCBzaG9ydG5hbWUgKi8KIAlIZWFwRnJlZShwcm9jZXNzLT5oZWFwLDAseG1vZG5hbWUpOwogICAgIH0KKyAgICAvKiBpZiB0aGF0IGZhaWxzLCB0cnkgbG9va2luZyBmb3IgdGhlIGZpbGVuYW1lLi4uICovCisgICAgZm9yICh3bT1wcm9jZXNzLT5tb2RyZWZfbGlzdDt3bTt3bT13bS0+bmV4dCkgeworICAgIAlMUFNUUgl4bG5hbWUseGRvdHB0cjsKKworCWFzc2VydCAod20tPmxvbmduYW1lKTsKKwl4bG5hbWUgPSBzdHJyY2hyKHdtLT5sb25nbmFtZSwnLycpOworCWlmICgheGxuYW1lKSAKKwkgICAgeGxuYW1lID0gd20tPmxvbmduYW1lOworCWVsc2UKKwkgICAgeGxuYW1lKys7CisJeGxuYW1lID0gSEVBUF9zdHJkdXBBKHByb2Nlc3MtPmhlYXAsMCx4bG5hbWUpOworCXhkb3RwdHI9c3RycmNocih4bG5hbWUsJy4nKTsKKwlpZiAoCSh4ZG90cHRyICYmICFkb3RwdHIpIHx8CisJCSgheGRvdHB0ciAmJiBkb3RwdHIpCisJKSB7CisJICAgIGlmIChkb3RwdHIpCSpkb3RwdHIJCT0gJ1wwJzsKKwkgICAgaWYgKHhkb3RwdHIpICp4ZG90cHRyCT0gJ1wwJzsKKwl9CisJaWYgKCFzdHJjYXNlY21wKCBmaWxlbmFtZSwgeGxuYW1lKSkgeworCSAgICBIZWFwRnJlZShwcm9jZXNzLT5oZWFwLDAsZmlsZW5hbWUpOworCSAgICBIZWFwRnJlZShwcm9jZXNzLT5oZWFwLDAseGxuYW1lKTsKKwkgICAgcmV0dXJuIHdtLT5tb2R1bGU7CisJfQorCWlmIChkb3RwdHIpICpkb3RwdHI9Jy4nOworCS8qIEZJWE1FOiBhZGQgcGF0aHMsIHNob3J0bmFtZSAqLworCUhlYXBGcmVlKHByb2Nlc3MtPmhlYXAsMCx4bG5hbWUpOworICAgIH0KICAgICBIZWFwRnJlZShwcm9jZXNzLT5oZWFwLDAsZmlsZW5hbWUpOwogICAgIHJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvbG9hZGVyL25lL21vZHVsZS5jIGIvbG9hZGVyL25lL21vZHVsZS5jCmluZGV4IDE0OGVmYmMuLjBiZjQ2ZTQgMTAwNjQ0Ci0tLSBhL2xvYWRlci9uZS9tb2R1bGUuYworKysgYi9sb2FkZXIvbmUvbW9kdWxlLmMKQEAgLTIxLDcgKzIxLDExIEBACiAjaW5jbHVkZSAic25vb3AuaCIKICNpbmNsdWRlICJkZWJ1Zy5oIgogCi1zdGF0aWMgSE1PRFVMRTE2IGhGaXJzdE1vZHVsZSA9IDA7CitGQVJQUk9DMTYgKCpmblNOT09QMTZfR2V0UHJvY0FkZHJlc3MxNikoSE1PRFVMRTE2LERXT1JELEZBUlBST0MxNikgPSBOVUxMOwordm9pZCAoKmZuU05PT1AxNl9SZWdpc3RlckRMTCkoTkVfTU9EVUxFKixMUENTVFIpID0gTlVMTDsKKworI2RlZmluZSBoRmlyc3RNb2R1bGUgKHBUaGhvb2stPmhFeGVIZWFkKQorCiBzdGF0aWMgTkVfTU9EVUxFICpwQ2FjaGVkTW9kdWxlID0gMDsgIC8qIE1vZHVsZSBjYWNoZWQgYnkgTkVfT3BlbkZpbGUgKi8KIAogc3RhdGljIEhNT0RVTEUxNiBORV9Mb2FkQnVpbHRpbihMUENTVFIgbmFtZSxCT09MMzIgZm9yY2UpIHsgcmV0dXJuIDA7IH0KQEAgLTMzMCw4ICszMzQsMTAgQEAKICAgICBlbHNlIHNlbCA9IChXT1JEKShEV09SRClORV9TRUdfVEFCTEUocE1vZHVsZSlbc2VsLTFdLnNlbGVjdG9yOwogICAgIGlmIChzZWw9PTB4ZmZmZikKIAlyZXR1cm4gKEZBUlBST0MxNilQVFJfU0VHX09GRl9UT19TRUdQVFIoIHNlbCwgb2Zmc2V0ICk7CisgICAgaWYgKCFmblNOT09QMTZfR2V0UHJvY0FkZHJlc3MxNikKKwlyZXR1cm4gKEZBUlBST0MxNilQVFJfU0VHX09GRl9UT19TRUdQVFIoIHNlbCwgb2Zmc2V0ICk7CiAgICAgZWxzZQotCXJldHVybiAoRkFSUFJPQzE2KVNOT09QMTZfR2V0UHJvY0FkZHJlc3MxNihoTW9kdWxlLG9yZGluYWwsKEZBUlBST0MxNilQVFJfU0VHX09GRl9UT19TRUdQVFIoIHNlbCwgb2Zmc2V0ICkpOworCXJldHVybiAoRkFSUFJPQzE2KWZuU05PT1AxNl9HZXRQcm9jQWRkcmVzczE2KGhNb2R1bGUsb3JkaW5hbCwoRkFSUFJPQzE2KVBUUl9TRUdfT0ZGX1RPX1NFR1BUUiggc2VsLCBvZmZzZXQgKSk7CiB9CiAKIApAQCAtNjU0LDcgKzY2MCw4IEBACiAgICAgZWxzZSBwTW9kdWxlLT5kbGxzX3RvX2luaXQgPSAwOwogCiAgICAgTkVfUmVnaXN0ZXJNb2R1bGUoIHBNb2R1bGUgKTsKLSAgICBTTk9PUDE2X1JlZ2lzdGVyRExMKHBNb2R1bGUsb2ZzLT5zelBhdGhOYW1lKTsKKyAgICBpZiAoZm5TTk9PUDE2X1JlZ2lzdGVyRExMKQorICAgIAlmblNOT09QMTZfUmVnaXN0ZXJETEwocE1vZHVsZSxvZnMtPnN6UGF0aE5hbWUpOwogICAgIHJldHVybiBoTW9kdWxlOwogfQogCmRpZmYgLS1naXQgYS9sb2FkZXIvbmUvc2VnbWVudC5jIGIvbG9hZGVyL25lL3NlZ21lbnQuYwppbmRleCAyOGNhYTc3Li5mY2FhMDg1IDEwMDY0NAotLS0gYS9sb2FkZXIvbmUvc2VnbWVudC5jCisrKyBiL2xvYWRlci9uZS9zZWdtZW50LmMKQEAgLTEwNSw4ICsxMDUsMTIgQEAKICAgICAgICAgc3RhY2sxNlRvcC0+YnAgPSAwOwogICAgICAgICBzdGFjazE2VG9wLT5pcCA9IDA7CiAgICAgICAgIHN0YWNrMTZUb3AtPmNzID0gMDsKKwlUUkFDRShkbGwsIkNhbGxMb2FkQXBwU2VnUHJvYyhobW9kdWxlPTB4JTA0eCxoZj0weCUwNHgsc2VnbnVtPSVkXG4iLAorCQlwTW9kdWxlLT5zZWxmLGhmLHNlZ251bQorCSk7CiAgCW5ld3NlbGVjdG9yID0gQ2FsbGJhY2tzLT5DYWxsTG9hZEFwcFNlZ1Byb2Moc2VsZmxvYWRoZWFkZXItPkxvYWRBcHBTZWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTW9kdWxlLT5zZWxmLCBoZiwgc2VnbnVtICk7CisJVFJBQ0UoZGxsLCJSZXQgQ2FsbExvYWRBcHBTZWdQcm9jOiBzZWxlY3RvciA9IDB4JTA0eFxuIixuZXdzZWxlY3Rvcik7CiAgICAgICAgIF9sY2xvc2UzMiggaGYgKTsKICAJaWYgKG5ld3NlbGVjdG9yICE9IG9sZHNlbGVjdG9yKSB7CiAgCSAgLyogU2VsZiBsb2FkZXJzIGxpa2UgY3JlYXRpbmcgdGhlaXIgb3duIHNlbGVjdG9yczsgCkBAIC00MTAsNyArNDE0LDkgQEAKICAgICAgICAgc3RhY2sxNlRvcC0+Y3MgPSAwOwogCiAgICAgICAgIGhmID0gRklMRV9EdXBVbml4SGFuZGxlKCBORV9PcGVuRmlsZSggcE1vZHVsZSApICk7CisJVFJBQ0UoZGxsLCJDYWxsQm9vdEFwcFByb2MoaE1vZHVsZT0weCUwNHgsaGY9MHglMDR4KVxuIixwTW9kdWxlLT5zZWxmLGhmKTsKICAgICAgICAgQ2FsbGJhY2tzLT5DYWxsQm9vdEFwcFByb2Moc2VsZmxvYWRoZWFkZXItPkJvb3RBcHAsIHBNb2R1bGUtPnNlbGYsIGhmKTsKKwlUUkFDRShkbGwsIlJldHVybiBmcm9tIENhbGxCb290QXBwUHJvY1xuIik7CiAgICAgICAgIF9sY2xvc2UzMihoZik7CiAgICAgICAgIC8qIHNvbWUgQm9vdEFwcCBwcm9jcyBvdmVyd3JpdGUgdGhlIHNlbGVjdG9yIG9mIGRncm91cCAqLwogICAgICAgICBwU2VnVGFibGVbcE1vZHVsZS0+ZGdyb3VwIC0gMV0uc2VsZWN0b3IgPSBzYXZlZF9kZ3JvdXA7CmRpZmYgLS1naXQgYS9sb2FkZXIvcGVfaW1hZ2UuYyBiL2xvYWRlci9wZV9pbWFnZS5jCmluZGV4IGFhZjJkZWMuLjMwMjczY2IgMTAwNjQ0Ci0tLSBhL2xvYWRlci9wZV9pbWFnZS5jCisrKyBiL2xvYWRlci9wZV9pbWFnZS5jCkBAIC0yMTcsNyArMjE3LDYgQEAKICAgICBJTUFHRV9JTVBPUlRfREVTQ1JJUFRPUgkqcGVfaW1wOwogICAgIFdJTkVfTU9EUkVGCQkJKnh3bTsKICAgICBQRV9NT0RSRUYJCQkqcGVtOwotICAgIGludAlmaXh1cF9mYWlsZWQJCT0gMDsKICAgICB1bnNpZ25lZCBpbnQgbG9hZF9hZGRyCT0gd20tPm1vZHVsZTsKICAgICBpbnQJCQkJaTsKICAgICBjaGFyCQkJKm1vZG5hbWU7CkBAIC0yNDcsMTMgKzI0NiwxNSBAQAogIAogICAgIC8qIEZJWE1FOiBzaG91bGQgdGVybWluYXRlIG9uIDAgQ2hhcmFjdGVyaXN0aWNzICovCiAgICAgZm9yIChpID0gMCwgcGVfaW1wID0gcGVtLT5wZV9pbXBvcnQ7IHBlX2ltcC0+TmFtZTsgcGVfaW1wKyspIHsKLSAgICAJSE1PRFVMRTMyCXJlczsKLQlXSU5FX01PRFJFRgkqKnl3bTsKLSAJY2hhcgkJKm5hbWUgPSAoY2hhciAqKSBSVkEocGVfaW1wLT5OYW1lKTsKKyAgICAJSE1PRFVMRTMyCQloSW1wTW9kdWxlOworCVdJTkVfTU9EUkVGCQkqKnl3bTsKKwlJTUFHRV9JTVBPUlRfQllfTkFNRQkqcGVfbmFtZTsKKwlMUElNQUdFX1RIVU5LX0RBVEEJaW1wb3J0X2xpc3QsdGh1bmtfbGlzdDsKKyAJY2hhcgkJCSpuYW1lID0gKGNoYXIgKikgUlZBKHBlX2ltcC0+TmFtZSk7CiAKIAkvKiBkb24ndCB1c2UgTU9EVUxFX0xvYWQsIFdpbjMyIGNyZWF0ZXMgbmV3IHRhc2sgZGlmZmVyZW50bHkgKi8KLQlyZXMgPSBQRV9Mb2FkTGlicmFyeUV4MzJBKCBuYW1lLCBwcm9jZXNzLCAwLCAwICk7Ci0JaWYgKHJlcyA8PSAoSE1PRFVMRTMyKSAzMikgeworCWhJbXBNb2R1bGUgPSBQRV9Mb2FkTGlicmFyeUV4MzJBKCBuYW1lLCBwcm9jZXNzLCAwLCAwICk7CisJaWYgKCFoSW1wTW9kdWxlKSB7CiAJICAgIGNoYXIgKnAsYnVmZmVyWzIwMDBdOwogCSAgICAKIAkgICAgLyogR2V0TW9kdWxlRmlsZU5hbWUgd291bGQgdXNlIHRoZSB3cm9uZyBwcm9jZXNzLCBzbyBkb24ndCB1c2UgaXQgKi8KQEAgLTI2MSwxNSArMjYyLDE1IEBACiAJICAgIGlmICghKHAgPSBzdHJyY2hyIChidWZmZXIsICdcXCcpKSkKIAkJcCA9IGJ1ZmZlcjsKIAkgICAgc3RyY3B5IChwICsgMSwgbmFtZSk7Ci0JICAgIHJlcyA9IFBFX0xvYWRMaWJyYXJ5RXgzMkEoIGJ1ZmZlciwgcHJvY2VzcywgMCwgMCApOworCSAgICBoSW1wTW9kdWxlID0gUEVfTG9hZExpYnJhcnlFeDMyQSggYnVmZmVyLCBwcm9jZXNzLCAwLCAwICk7CiAJfQotCWlmIChyZXMgPD0gKEhNT0RVTEUzMikgMzIpIHsKKwlpZiAoIWhJbXBNb2R1bGUpIHsKIAkgICAgRVJSIChtb2R1bGUsICJNb2R1bGUgJXMgbm90IGZvdW5kXG4iLCBuYW1lKTsKLQkgICAgcmV0dXJuIHJlczsKKwkgICAgcmV0dXJuIDE7CiAJfQogCXh3bSA9IHdtLT5uZXh0OwogCXdoaWxlICh4d20pIHsKLQkJaWYgKHh3bS0+bW9kdWxlID09IHJlcykKKwkJaWYgKHh3bS0+bW9kdWxlID09IGhJbXBNb2R1bGUpCiAJCQlicmVhazsKIAkJeHdtID0geHdtLT5uZXh0OwogCX0KQEAgLTI5NiwxOCArMjk3LDYgQEAKIAkJCiAJfQogCWkrKzsKLSAgICB9Ci0gICAgcGVfaW1wID0gcGVtLT5wZV9pbXBvcnQ7Ci0gICAgd2hpbGUgKHBlX2ltcC0+TmFtZSkgewotCWNoYXIJCQkqTW9kdWxlOwotCUlNQUdFX0lNUE9SVF9CWV9OQU1FCSpwZV9uYW1lOwotCUxQSU1BR0VfVEhVTktfREFUQQlpbXBvcnRfbGlzdCx0aHVua19saXN0OwotICAgICAgICBITU9EVUxFMzIgaEltcE1vZHVsZTsKLQotCU1vZHVsZSA9IChjaGFyICopIFJWQShwZV9pbXAtPk5hbWUpOwotICAgICAgICBoSW1wTW9kdWxlID0gTU9EVUxFX0ZpbmRNb2R1bGUzMihwcm9jZXNzLE1vZHVsZSk7Ci0JYXNzZXJ0KGhJbXBNb2R1bGUpOyAvKiB3ZSBoYXZlIGltcG9ydGVkIGl0LCBzbyBpdCBNVVNUIGJlIHRoZXJlICovCi0JVFJBQ0Uod2luMzIsICIlc1xuIiwgTW9kdWxlKTsKIAogCS8qIEZJWE1FOiBmb3J3YXJkZXIgZW50cmllcyAuLi4gKi8KIApAQCAtMzIwLDI1ICszMDksMjMgQEAKIAkJaWYgKElNQUdFX1NOQVBfQllfT1JESU5BTChpbXBvcnRfbGlzdC0+dTEuT3JkaW5hbCkpIHsKIAkJICAgIGludCBvcmRpbmFsID0gSU1BR0VfT1JESU5BTChpbXBvcnRfbGlzdC0+dTEuT3JkaW5hbCk7CiAKLQkJICAgIFRSQUNFKHdpbjMyLCAiLS0tIE9yZGluYWwgJXMsJWRcbiIsIE1vZHVsZSwgb3JkaW5hbCk7CisJCSAgICBUUkFDRSh3aW4zMiwgIi0tLSBPcmRpbmFsICVzLCVkXG4iLCBuYW1lLCBvcmRpbmFsKTsKIAkJICAgIHRodW5rX2xpc3QtPnUxLkZ1bmN0aW9uPShMUERXT1JEKU1PRFVMRV9HZXRQcm9jQWRkcmVzczMyKAogICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2VzcywgaEltcE1vZHVsZSwgKExQQ1NUUilvcmRpbmFsCiAJCSAgICApOwogCQkgICAgaWYgKCF0aHVua19saXN0LT51MS5GdW5jdGlvbikgewotCQkJV0FSTih3aW4zMiwiTm8gaW1wbGVtZW50YXRpb24gZm9yICVzLiVkLCBzZXR0aW5nIHRvIE5VTExcbiIsCi0JCQkJTW9kdWxlLCBvcmRpbmFsKTsKLQkJCS8qIGZpeHVwX2ZhaWxlZD0xOyAqLworCQkJRVJSKHdpbjMyLCJObyBpbXBsZW1lbnRhdGlvbiBmb3IgJXMuJWQsIHNldHRpbmcgdG8gTlVMTFxuIiwKKwkJCQluYW1lLCBvcmRpbmFsKTsKIAkJICAgIH0KIAkJfSBlbHNlIHsJCS8qIGltcG9ydCBieSBuYW1lICovCiAJCSAgICBwZV9uYW1lID0gKExQSU1BR0VfSU1QT1JUX0JZX05BTUUpUlZBKGltcG9ydF9saXN0LT51MS5BZGRyZXNzT2ZEYXRhKTsKLQkJICAgIFRSQUNFKHdpbjMyLCAiLS0tICVzICVzLiVkXG4iLCBwZV9uYW1lLT5OYW1lLCBNb2R1bGUsIHBlX25hbWUtPkhpbnQpOworCQkgICAgVFJBQ0Uod2luMzIsICItLS0gJXMgJXMuJWRcbiIsIHBlX25hbWUtPk5hbWUsIG5hbWUsIHBlX25hbWUtPkhpbnQpOwogCQkgICAgdGh1bmtfbGlzdC0+dTEuRnVuY3Rpb249KExQRFdPUkQpTU9EVUxFX0dldFByb2NBZGRyZXNzMzIoCiAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLCBoSW1wTW9kdWxlLCBwZV9uYW1lLT5OYW1lCiAJCSAgICApOwogCQkgICAgaWYgKCF0aHVua19saXN0LT51MS5GdW5jdGlvbikgewotCQkJV0FSTih3aW4zMiwiTm8gaW1wbGVtZW50YXRpb24gZm9yICVzLiVkKCVzKSwgc2V0dGluZyB0byBOVUxMXG4iLAotCQkJCU1vZHVsZSxwZV9uYW1lLT5IaW50LHBlX25hbWUtPk5hbWUpOwotCQkJLyogZml4dXBfZmFpbGVkPTE7ICovCisJCQlFUlIod2luMzIsIk5vIGltcGxlbWVudGF0aW9uIGZvciAlcy4lZCglcyksIHNldHRpbmcgdG8gTlVMTFxuIiwKKwkJCQluYW1lLHBlX25hbWUtPkhpbnQscGVfbmFtZS0+TmFtZSk7CiAJCSAgICB9CiAJCX0KIAkJaW1wb3J0X2xpc3QrKzsKQEAgLTM1MiwzNCArMzM5LDMwIEBACiAJCSAgICAvKiBub3Qgc3VyZSBhYm91dCB0aGlzIGJyYW5jaCwgYnV0IGl0IHNlZW1zIHRvIHdvcmsgKi8KIAkJICAgIGludCBvcmRpbmFsID0gSU1BR0VfT1JESU5BTCh0aHVua19saXN0LT51MS5PcmRpbmFsKTsKIAotCQkgICAgVFJBQ0Uod2luMzIsIi0tLSBPcmRpbmFsICVzLiVkXG4iLE1vZHVsZSxvcmRpbmFsKTsKKwkJICAgIFRSQUNFKHdpbjMyLCItLS0gT3JkaW5hbCAlcy4lZFxuIixuYW1lLG9yZGluYWwpOwogCQkgICAgdGh1bmtfbGlzdC0+dTEuRnVuY3Rpb249KExQRFdPUkQpTU9EVUxFX0dldFByb2NBZGRyZXNzMzIoCiAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLCBoSW1wTW9kdWxlLCAoTFBDU1RSKSBvcmRpbmFsCiAJCSAgICApOwogCQkgICAgaWYgKCF0aHVua19saXN0LT51MS5GdW5jdGlvbikgewotCQkJV0FSTih3aW4zMiwgIk5vIGltcGxlbWVudGF0aW9uIGZvciAlcy4lZCwgc2V0dGluZyB0byBOVUxMXG4iLAotCQkJCU1vZHVsZSxvcmRpbmFsKTsKLQkJCS8qIGZpeHVwX2ZhaWxlZD0xOyAqLworCQkJRVJSKHdpbjMyLCAiTm8gaW1wbGVtZW50YXRpb24gZm9yICVzLiVkLCBzZXR0aW5nIHRvIE5VTExcbiIsCisJCQkJbmFtZSxvcmRpbmFsKTsKIAkJICAgIH0KIAkJfSBlbHNlIHsKIAkJICAgIHBlX25hbWU9KExQSU1BR0VfSU1QT1JUX0JZX05BTUUpIFJWQSh0aHVua19saXN0LT51MS5BZGRyZXNzT2ZEYXRhKTsKIAkJICAgIFRSQUNFKHdpbjMyLCItLS0gJXMgJXMuJWRcbiIsCi0JCSAgIAkJICBwZV9uYW1lLT5OYW1lLE1vZHVsZSxwZV9uYW1lLT5IaW50KTsKKwkJICAgCQkgIHBlX25hbWUtPk5hbWUsbmFtZSxwZV9uYW1lLT5IaW50KTsKIAkJICAgIHRodW5rX2xpc3QtPnUxLkZ1bmN0aW9uPShMUERXT1JEKU1PRFVMRV9HZXRQcm9jQWRkcmVzczMyKAogICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2VzcywgaEltcE1vZHVsZSwgcGVfbmFtZS0+TmFtZQogCQkgICAgKTsKIAkJICAgIGlmICghdGh1bmtfbGlzdC0+dTEuRnVuY3Rpb24pIHsKLQkJICAgIAlXQVJOKHdpbjMyLCAiTm8gaW1wbGVtZW50YXRpb24gZm9yICVzLiVkLCBzZXR0aW5nIHRvIE5VTExcbiIsCi0JCQkJTW9kdWxlLCBwZV9uYW1lLT5IaW50KTsKLQkJICAgIAkvKiBmaXh1cF9mYWlsZWQ9MTsgKi8KKwkJICAgIAlFUlIod2luMzIsICJObyBpbXBsZW1lbnRhdGlvbiBmb3IgJXMuJWQsIHNldHRpbmcgdG8gTlVMTFxuIiwKKwkJCQluYW1lLCBwZV9uYW1lLT5IaW50KTsKIAkJICAgIH0KIAkJfQogCQl0aHVua19saXN0Kys7CiAJICAgIH0KIAl9Ci0JcGVfaW1wKys7CiAgICAgfQotICAgIGlmIChmaXh1cF9mYWlsZWQpIHJldHVybiAyMjsKICAgICByZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvbG9hZGVyL3Rhc2suYyBiL2xvYWRlci90YXNrLmMKaW5kZXggNTQ4M2YwZi4uODRkNWIxZCAxMDA2NDQKLS0tIGEvbG9hZGVyL3Rhc2suYworKysgYi9sb2FkZXIvdGFzay5jCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAidGhyZWFkLmgiCiAjaW5jbHVkZSAiZGVidWcuaCIKICNpbmNsdWRlICJkZGVfcHJvYy5oIgorI2luY2x1ZGUgInNlcnZlci5oIgogCiAgIC8qIE1pbi4gbnVtYmVyIG9mIHRodW5rcyBhbGxvY2F0ZWQgd2hlbiBjcmVhdGluZyBhIG5ldyBzZWdtZW50ICovCiAjZGVmaW5lIE1JTl9USFVOS1MgIDMyCkBAIC0zOSwxNCArNDAsMzAgQEAKICAgLyogUG9pbnRlciB0byBmdW5jdGlvbiB0byBzd2l0Y2ggdG8gYSBsYXJnZXIgc3RhY2sgKi8KIGludCAoKklGMTYzMl9DYWxsTGFyZ2VTdGFjaykoIGludCAoKmZ1bmMpKCksIHZvaWQgKmFyZyApID0gTlVMTDsKIAotc3RhdGljIEhUQVNLMTYgaEZpcnN0VGFzayA9IDA7Ci1zdGF0aWMgSFRBU0sxNiBoQ3VycmVudFRhc2sgPSAwOworCitzdGF0aWMgVEhIT09LIERlZmF1bHRUaGhvb2sgPSB7IDAgfTsKK1RISE9PSyAqcFRoaG9vayA9ICZEZWZhdWx0VGhob29rOworCisjZGVmaW5lIGhDdXJyZW50VGFzayAocFRoaG9vay0+Q3VyVERCKQorI2RlZmluZSBoRmlyc3RUYXNrICAgKHBUaGhvb2stPkhlYWRUREIpCisjZGVmaW5lIGhMb2NrZWRUYXNrICAocFRoaG9vay0+TG9ja1REQikKKwogc3RhdGljIEhUQVNLMTYgaFRhc2tUb0tpbGwgPSAwOwotc3RhdGljIEhUQVNLMTYgaExvY2tlZFRhc2sgPSAwOwogc3RhdGljIFVJTlQxNiBuVGFza0NvdW50ID0gMDsKIAogc3RhdGljIHZvaWQgVEFTS19ZaWVsZFRvU3lzdGVtKFREQiopOwogCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCSAgICAgVEFTS19JbnN0YWxsVEhIb29rCisgKi8KK3ZvaWQgVEFTS19JbnN0YWxsVEhIb29rKCBUSEhPT0sgKnBOZXdUaGhvb2sgKQoreworICAgICBUSEhPT0sgKnBPbGRUaGhvb2sgPSBwVGhob29rOworCisgICAgIHBUaGhvb2sgPSBwTmV3VGhob29rPyBwTmV3VGhob29rIDogJkRlZmF1bHRUaGhvb2s7CisKKyAgICAgKnBUaGhvb2sgPSAqcE9sZFRoaG9vazsKK30KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgkgICAgIFRBU0tfR2V0TmV4dFRhc2sKQEAgLTIwOSw2ICsyMjYsNyBAQAogICAgIFNFR1RBQkxFRU5UUlkgKnBTZWdUYWJsZSA9IE5FX1NFR19UQUJMRSggcE1vZHVsZSApOwogCiAgICAgU0VUX0NVUl9USFJFQUQoIHBUYXNrLT50aGRiICk7CisgICAgQ0xJRU5UX0luaXRUaHJlYWQoKTsKICAgICAvKiBUZXJtaW5hdGUgdGhlIHN0YWNrIGZyYW1lICovCiAgICAgVEhSRUFEX1NUQUNLMTYocFRhc2stPnRoZGIpLT5mcmFtZTMyID0gTlVMTDsKICAgICBpZiAocE1vZHVsZS0+ZmxhZ3MgJiBORV9GRkxBR1NfV0lOMzIpCmRpZmYgLS1naXQgYS9tZW1vcnkvYXRvbS5jIGIvbWVtb3J5L2F0b20uYwppbmRleCA2ZGE5Njk0Li5mMjc0NGNiIDEwMDY0NAotLS0gYS9tZW1vcnkvYXRvbS5jCisrKyBiL21lbW9yeS9hdG9tLmMKQEAgLTE0NCw2ICsxNDQsMTEgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIEFUT01fQWRkQXRvbQogICoKKyAqIFdpbmRvd3MgRFdPUkQgYWxpZ25zIHRoZSBhdG9tIGVudHJ5IHNpemUuCisgKiBUaGUgcmVtYWluaW5nIHVudXNlZCBzdHJpbmcgc3BhY2UgY3JlYXRlZCBieSB0aGUgYWxpZ25tZW50CisgKiBnZXRzIHBhZGRlZCB3aXRoICdcMCdzIGluIGEgY2VydGFpbiB3YXkgdG8gZW5zdXJlCisgKiB0aGF0IGF0IGxlYXN0IG9uZSB0cmFpbGluZyAnXDAnIHJlbWFpbnMuCisgKgogICogUkVUVVJOUwogICoJQXRvbTogU3VjY2VzcwogICoJMDogRmFpbHVyZQpAQCAtMTU2LDcgKzE2MSw3IEBACiAgICAgSEFORExFMTYgZW50cnk7CiAgICAgQVRPTUVOVFJZICogZW50cnlQdHI7CiAgICAgQVRPTVRBQkxFICogdGFibGU7Ci0gICAgaW50IGxlbjsKKyAgICBpbnQgbGVuLCBhZV9sZW47CiAKICAgICBpZiAoc3RyWzBdID09ICcjJykgcmV0dXJuIGF0b2koICZzdHJbMV0gKTsgIC8qIENoZWNrIGZvciBpbnRlZ2VyIGF0b20gKi8KICAgICBpZiAoKGxlbiA9IHN0cmxlbiggc3RyICkpID4gTUFYX0FUT01fTEVOKSBsZW4gPSBNQVhfQVRPTV9MRU47CkBAIC0xNzUsNyArMTgwLDggQEAKIAllbnRyeSA9IGVudHJ5UHRyLT5uZXh0OwogICAgIH0KIAotICAgIGVudHJ5ID0gTE9DQUxfQWxsb2MoIHNlbGVjdG9yLCBMTUVNX0ZJWEVELCBzaXplb2YoQVRPTUVOVFJZKStsZW4tMSApOworICAgIGFlX2xlbiA9IChzaXplb2YoQVRPTUVOVFJZKStsZW4rMykgJiB+MzsKKyAgICBlbnRyeSA9IExPQ0FMX0FsbG9jKCBzZWxlY3RvciwgTE1FTV9GSVhFRCwgYWVfbGVuKTsKICAgICBpZiAoIWVudHJ5KSByZXR1cm4gMDsKICAgICAvKiBSZWxvYWQgdGhlIHRhYmxlIHB0ciBpbiBjYXNlIGl0IG1vdmVkIGluIGxpbmVhciBtZW1vcnkgKi8KICAgICB0YWJsZSA9IEFUT01fR2V0VGFibGUoIHNlbGVjdG9yLCBGQUxTRSApOwpAQCAtMTgzLDcgKzE4OSw3IEBACiAgICAgZW50cnlQdHItPm5leHQgPSB0YWJsZS0+ZW50cmllc1toYXNoXTsKICAgICBlbnRyeVB0ci0+cmVmQ291bnQgPSAxOwogICAgIGVudHJ5UHRyLT5sZW5ndGggPSBsZW47Ci0gICAgbWVtY3B5KCBlbnRyeVB0ci0+c3RyLCBzdHIsIGxlbiApOworICAgIHN0cm5jcHkoIGVudHJ5UHRyLT5zdHIsIHN0ciwgYWVfbGVuIC0gc2l6ZW9mKEFUT01FTlRSWSkgKyAxKTsgLyogYWx3YXlzIHVzZSBzdHJuY3B5ICgnXDAncyBwYWRkaW5nKSAqLwogICAgIHRhYmxlLT5lbnRyaWVzW2hhc2hdID0gZW50cnk7CiAgICAgcmV0dXJuIEhBTkRMRVRPQVRPTSggZW50cnkgKTsKIH0KZGlmZiAtLWdpdCBhL21lbW9yeS9zdHJpbmcuYyBiL21lbW9yeS9zdHJpbmcuYwppbmRleCAyNjI2NjdmLi44NWY3N2YyIDEwMDY0NAotLS0gYS9tZW1vcnkvc3RyaW5nLmMKKysrIGIvbWVtb3J5L3N0cmluZy5jCkBAIC0xODksMTAgKzE4OSw3IEBACiAgKiAgICAgICAgICAgbHN0cmNtcGkzMkEgICAoS0VSTkVMMzIuNjA1KQogICovCiBJTlQzMiBXSU5BUEkgbHN0cmNtcGkzMkEoIExQQ1NUUiBzdHIxLCBMUENTVFIgc3RyMiApCi17Ci0gICAgSU5UMzIgcmVzOwotCi0gICAgVFJBQ0Uoc3RyaW5nLCJzdHJjbXBpICVzIGFuZCAlc1xuIiwKK3sgICAgVFJBQ0Uoc3RyaW5nLCJzdHJjbXBpICVzIGFuZCAlc1xuIiwKIAkJICAgZGVidWdzdHJfYSAoc3RyMSksIGRlYnVnc3RyX2EgKHN0cjIpKTsKICAgICByZXR1cm4gQ29tcGFyZVN0cmluZzMyQShMT0NBTEVfU1lTVEVNX0RFRkFVTFQsTk9STV9JR05PUkVDQVNFLHN0cjEsLTEsc3RyMiwtMSktMjsKIH0KQEAgLTYxNiwzICs2MTMsMzcgQEAKICAgICB3aGlsZSAoKCpkKysgPSAoV0NIQVIpT0VNX1RPX0FOU0koKnMrKykpKTsKICAgICByZXR1cm4gVFJVRTsKIH0KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgV2lkZUNoYXJUb0xvY2FsIChOb3QgYSBXaW5kb3dzIEFQSSkKKyAqICBzaW1pbGFyIGxzdHJjcHlXdG9BLCBzaG91bGQgaGFuZGxlIGNvZGVwYWdlcyBwcm9wZXJseQorICoKKyAqICBSRVRVUk5TCisgKiAgICBzdHJsZW4gb2YgdGhlIGRlc3RpbmF0aW9uIHN0cmluZworICovCisgCitJTlQzMiBXSU5BUEkgV2lkZUNoYXJUb0xvY2FsMzIoCisgICAgTFBTVFIgcExvY2FsLCAKKwkJTFBXU1RSIHBXaWRlLCAKKwkJSU5UMzIgZHdDaGFycykKK3sgKnBMb2NhbCA9IDA7CisgIFRSQUNFKHN0cmluZywiKCVwLCAlcywgJWxpKVxuIiwJcExvY2FsLCBkZWJ1Z3N0cl93KHBXaWRlKSxkd0NoYXJzKTsKKyAgV2lkZUNoYXJUb011bHRpQnl0ZShDUF9BQ1AsMCxwV2lkZSwtMSxwTG9jYWwsZHdDaGFycyxOVUxMLE5VTEwpOworICByZXR1cm4gc3RybGVuKHBMb2NhbCk7Cit9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBMb2NhbFRvV2lkZUNoYXIgKE5vdCBhIFdpbmRvd3MgQVBJKQorICogIHNpbWlsYXIgbHN0cmNweUF0b1csIHNob3VsZCBoYW5kbGUgY29kZXBhZ2VzIHByb3Blcmx5CisgKgorICogIFJFVFVSTlMKKyAqICAgIHN0cmxlbiBvZiB0aGUgZGVzdGluYXRpb24gc3RyaW5nCisgKi8KK0lOVDMyIFdJTkFQSSBMb2NhbFRvV2lkZUNoYXIzMigKKyAgICBMUFdTVFIgcFdpZGUsIAorCQlMUFNUUiBwTG9jYWwsIAorCQlJTlQzMiBkd0NoYXJzKQoreyAqcFdpZGUgPSAwOworICBUUkFDRShzdHJpbmcsIiglcCwgJXMsICVsaSlcbiIscFdpZGUsCXBMb2NhbCwgZHdDaGFycyk7CisJTXVsdGlCeXRlVG9XaWRlQ2hhcihDUF9BQ1AsMCxwTG9jYWwsLTEscFdpZGUsZHdDaGFycyk7IAorICByZXR1cm4gbHN0cmxlbjMyVyhwV2lkZSk7Cit9CmRpZmYgLS1naXQgYS9taXNjL2NvbW0uYyBiL21pc2MvY29tbS5jCmluZGV4IGExZjY5ZDMuLmYwYmNjMGYgMTAwNjQ0Ci0tLSBhL21pc2MvY29tbS5jCisrKyBiL21pc2MvY29tbS5jCkBAIC0xNCw2ICsxNCwyNCBAQAogICoKICAqIEF1Z3VzdCAxMiwgMTk5Ny4gIFRha2UgYSBiYXNoIGF0IFNldENvbW1FdmVudE1hc2sgLSBMYXdzb24gV2hpdG5leQogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhd3Nvbl93aGl0bmV5QGp1bm8uY29tPgorICogSnVseSA2LCAxOTk4LiBGaXhlcyBhbmQgY29tbWVudHMgYnkgVmFsZW50aWpuIFNlc3NpbmsKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2c2Vzc2lua0BpYy51dmEubmw+IFtWXQorICogIEkgb25seSBxdWljay1maXhlZCBhbiBlcnJvciBmb3IgdGhlIG91dHB1dCBidWZmZXJzLiBUaGUgdGhpbmcgaXMgdGhpczogaWYgYQorICogV2luQXBwIHN0YXJ0cyB1c2luZyBzZXJpYWwgcG9ydHMsIGl0IGNhbGxzIE9wZW5Db21tLCBhc2tpbmcgaXQgdG8gb3BlbiB0d28KKyAqIGJ1ZmZlcnMsIGNiSW5RdWV1ZSBhbmQgY2JPdXRRdWV1ZSBzaXplLCB0byBob2xkIGRhdGEgdG8vZnJvbSB0aGUgc2VyaWFsCisgKiBwb3J0cy4gV2luZSBPcGVuQ29tbSBvbmx5IHJldHVybnMgIk9LIi4gTm93IHRoZSBrZXJuZWwgYnVmZmVyIHNpemUgZm9yCisgKiBzZXJpYWwgY29tbXVuaWNhdGlvbiBpcyBvbmx5IDQwOTYgYnl0ZXMgbGFyZ2UuIEVycm9yOiAoQXBwIGFza3MgZm9yCisgKiBhIDEwNCwwMDAgYnl0ZXMgc2l6ZSBidWZmZXIsIFdpbmUgcmV0dXJucyAiT0siLCBBcHAgYXNrcyAiSG93IG1hbnkgY2hhcidzCisgKiBhcmUgaW4gdGhlIGJ1ZmZlciIsIFdpbmUgcmV0dXJucyAiNDAwMCIgYW5kIEFwcCB0aGlua3MgIk9LLCBhbm90aGVyCisgKiAxMDAsMDAwIGNoYXJzIGxlZnQsIGdvb2QhIikKKyAqIFRoZSBzb2x1dGlvbiBiZWxvdyBpcyBhIGJhZCBidXQgd29ya2luZyBxdWlja2ZpeCBmb3IgdGhlIHRyYW5zbWl0IGJ1ZmZlcjoKKyAqIHRoZSBjYkluUXVldWUgaXMgc2F2ZWQgaW4gYSB2YXJpYWJsZTsgd2hlbiB0aGUgcHJvZ3JhbSBhc2tzIGhvdyBtYW55IGNoYXJzCisgKiB0aGVyZSBhcmUgaW4gdGhlIGJ1ZmZlciwgR2V0Q29tbUVycm9yIHJldHVybnMgIyBpbiBidWZmZXIgUExVUworICogdGhlIGFkZGl0aW9uYWwgKGNiT3V0UWV1ZXUgLSA0MDk2KSwgd2hpY2ggbGVhdmVzIHRoZSBhcHBsaWNhdGlvbiB0aGlua2luZworICogIndvdywgYWxtb3N0IGZ1bGwiLgorICogU29ycnkgZm9yIHRoZSByYXRoZXIgY2hhdHR5IGV4cGxhbmF0aW9uIC0gYnV0IEkgdGhpbmsgY29tbS5jIG5lZWRzIHRvIGJlCisgKiByZWRlZmluZWQgd2l0aCByZWFsIHdvcmtpbmcgYnVmZmVycyBtYWtlIGl0IHdvcms7IG1heWJlIHRoZXNlIGNvbW1lbnRzIGFyZQorICogb2YgaGVscC4KICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCkBAIC01Niw2ICs3NCwxNCBAQAogICovCiBpbnQgY29tbWVycm9yID0gMCwgZXZlbnRtYXNrID0gMDsKIAorLyoKKyAqIFtWXSBJZiBhYm92ZSBnbG9iYWxzIGFyZSB3cm9uZywgdGhlIG9uZSBiZWxvdyB3aWxsIGJlIHdyb25nIGFzIHdlbGwuIEl0CisgKiBzaG91bGQgcHJvYmFibHkgYmUgaW4gdGhlIERvc0RldmljZVN0cnVjdCBvbiBwZXIgcG9ydCBiYXNpcyB0b28uCisqLworaW50IGlHbG9iYWxPdXRRdWV1ZUZpbGxlcjsKKworI2RlZmluZSBTRVJJQUxfWE1JVF9TSVpFIDQwOTYKKwogc3RydWN0IERvc0RldmljZVN0cnVjdCBDT01bTUFYX1BPUlRTXTsKIHN0cnVjdCBEb3NEZXZpY2VTdHJ1Y3QgTFBUW01BWF9QT1JUU107CiBMUENWT0lEICp1bmtub3duW01BWF9QT1JUU107CkBAIC00MzksNiArNDY1LDEwIEBACiAJCQlFUlIoY29tbSwgIkJVRyAhIENPTTAgZG9lc24ndCBleGlzdCAhXG4iKTsKIAkJCWNvbW1lcnJvciA9IElFX0JBRElEOwogCQl9CisJCQorCQkvKiB0byBoZWxwIEdldENvbW1FcnJvciByZXR1cm4gbGVmdCBidWZmc2l6ZSBbVl0gKi8KKwkJaUdsb2JhbE91dFF1ZXVlRmlsbGVyID0gKGNiT3V0UXVldWUgLSBTRVJJQUxfWE1JVF9TSVpFKTsKKwkJaWYgKGlHbG9iYWxPdXRRdWV1ZUZpbGxlciA8IDApIGlHbG9iYWxPdXRRdWV1ZUZpbGxlciA9IDA7CiAKICAgICAgICAgICAgICAgICBUUkFDRShjb21tLCAiJXMgPSAlc1xuIiwgZGV2aWNlLCBDT01bcG9ydF0uZGV2aWNlbmFtZSk7CiAKQEAgLTc4MCw3ICs4MTAsNyBAQAogCiAJCXJjID0gaW9jdGwoZmQsIFRJT0NPVVRRLCAmY250KTsKIAkJaWYgKHJjKSBXQVJOKGNvbW0sICJFcnJvciAhXG4iKTsKLQkJbHBTdGF0LT5jYk91dFF1ZSA9IGNudDsKKwkJbHBTdGF0LT5jYk91dFF1ZSA9IGNudCArIGlHbG9iYWxPdXRRdWV1ZUZpbGxlcjsKIAogCQlyYyA9IGlvY3RsKGZkLCBUSU9DSU5RLCAmY250KTsKICAgICAgICAgICAgICAgICBpZiAocmMpIFdBUk4oY29tbSwgIkVycm9yICFcbiIpOwpkaWZmIC0tZ2l0IGEvbWlzYy9pbWFnZWxpc3QuYyBiL21pc2MvaW1hZ2VsaXN0LmMKaW5kZXggNWNhNmUyNC4uMDUxNGMwZiAxMDA2NDQKLS0tIGEvbWlzYy9pbWFnZWxpc3QuYworKysgYi9taXNjL2ltYWdlbGlzdC5jCkBAIC0xMCw3ICsxMCw3IEBACiAgKiAgICAgIElMRF9UUkFOU1BBUkVOVCBlcnJvciBpbiBJbWFnZUxpc3RfRHJhd0luZGlyZWN0KS4KICAqICAgIC0gRml4IGRyYWcgZnVuY3Rpb25zLgogICogICAgLSBGaXggSW1hZ2VMaXN0X1JlYWQgYW5kIEltYWdlTGlzdF9Xcml0ZS4KLSAqICAgIC0gQWRkIEltYWdlTGlzdF9TZXRGaWx0ZXIgKHVuZG9jdW1lbnRlZCkuCisgKiAgICAtIEZpeCBJbWFnZUxpc3RfU2V0RmlsdGVyICh1bmRvY3VtZW50ZWQpLgogICogICAgICBCVFcgZG9lcyBhbnlib2R5IGtub3cgYW55dGhpbmcgYWJvdXQgdGhpcyBmdW5jdGlvbj8/PwogICogICAgICAgIC0gSXQgcmVtb3ZlcyAxMiBCeXRlcyBmcm9tIHRoZSBzdGFjayAoMyBQYXJhbWV0ZXJzKS4KICAqICAgICAgICAtIEZpcnN0IHBhcmFtZXRlciBTSE9VTEQgYmUgYSBISU1BR0VMSVNULgpAQCAtMzEsMTAgKzMxLDcgQEAKICAqLwogI2RlZmluZSBfX1dJTkVfSU1BR0VMSVNUX0MKICAKLS8qIFRoaXMgbXVzdCBiZSBkZWZpbmVkIHVudGlsICJHZXRJY29uSW5mbyIgaXMgaW1wbGVtZW50ZWQgY29tcGxldGVseS4KLSAqIFRvIGRvIHRoYXQgdGhlIGN1cnNvciBhbmQgaWNvbiBjb2RlIGluIG9iamVjdHMvY3Vyc29yaWNvbi5jIG11c3QKLSAqIGJlIHJld3JpdHRlbi4KLSAqLworLyogVGhpcyBtdXN0IGJlIGRlZmluZWQgdW50aWwgIkdldEljb25JbmZvIiBpcyBub3QgZnVsbHkgaW1wbGVtZW50ZWQuICovCiAjZGVmaW5lIF9fR0VUX0lDT05fSU5GT19IQUNLX18gCiAgCiAjaW5jbHVkZSAid2luZG93cy5oIgpAQCAtMTQ0NiwyMSArMTQ0MywyMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdHItPmJCaXRzUGVyUGl4ZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopKHB0ciArIDEpICsgcHRyLT5uSGVpZ2h0ICogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJJVE1BUF9XSURUSF9CWVRFUyhwdHItPm5XaWR0aCwgMSkpOworICAgICAgICBHbG9iYWxVbmxvY2sxNiAoaGFuZGxlKTsKICAgICAgICAgaGltbCA9IEltYWdlTGlzdF9DcmVhdGUgKHB0ci0+bldpZHRoLCBwdHItPm5IZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTENfTUFTSyB8IElMQ19DT0xPUiwgMSwgY0dyb3cpOwogICAgICAgICBJbWFnZUxpc3RfQWRkIChoaW1sLCBoYm1JbWFnZSwgaGJtTWFzayk7CiAgICAgICAgIERlbGV0ZU9iamVjdDMyIChoYm1JbWFnZSk7CiAgICAgICAgIERlbGV0ZU9iamVjdDMyIChoYm1NYXNrKTsKLSAgICAgICAgR2xvYmFsVW5sb2NrMTYgKGhhbmRsZSk7CiAjZWxzZQogICAgICAgICBJQ09OSU5GTzMyIGlpOwogICAgICAgICBCSVRNQVAzMiBibXA7CiAKICAgICAgICAgR2V0SWNvbkluZm8gKGhJY29uLCAmaWkpOwotICAgICAgICBHZXRPYmplY3QzMkEgKGlpLT5oYm1NYXNrLCBzaXplb2YoQklUTUFQMzIpLCAoTFBWT0lEKSZibXApOworICAgICAgICBHZXRPYmplY3QzMkEgKGlpLT5oYm1Db2xvciwgc2l6ZW9mKEJJVE1BUDMyKSwgKExQVk9JRCkmYm1wKTsKICAgICAgICAgaGltbCA9IEltYWdlTGlzdF9DcmVhdGUgKGJtcC5ibVdpZHRoLCBibXAuYm1IZWlnaHQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUxDX01BU0sgfCBJTENfQ09MT1IsIDEsIGNHcm93KTsKICAgICAgICAgSW1hZ2VMaXN0X0FkZCAoaGltbCwgaWktPmhibUNvbG9yLCBpaS0+aGJtTWFzayk7CisgICAgICAgIERlbGV0ZU9iamVjdDMyIChpaS0+aGJtQ29sb3IpOworICAgICAgICBEZWxldGVPYmplY3QzMiAoaWktPmhibU1hc2spOwogI2VuZGlmCiAgICAgfQogCkBAIC0xNTQzLDYgKzE1NDIsOCBAQAogICAgICAgICBoaW1sID0gSW1hZ2VMaXN0X0NyZWF0ZSAoYm1wLmJtV2lkdGgsIGJtcC5ibUhlaWdodCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTENfTUFTSyB8IElMQ19DT0xPUiwgMSwgY0dyb3cpOwogICAgICAgICBJbWFnZUxpc3RfQWRkIChoaW1sLCBpaS0+aGJtQ29sb3IsIGlpLT5oYm1NYXNrKTsKKyAgICAgICAgRGVsZXRlT2JqZWN0MzIgKGlpLT5oYm1Db2xvcik7CisgICAgICAgIERlbGV0ZU9iamVjdDMyIChpaS0+aGJtTWFzayk7CiAjZW5kaWYKICAgICB9CiAKQEAgLTE5MTUsNiArMTkxNiw4IEBACiAgICAgQklUTUFQMzIgYm1wOwogI2VuZGlmCiAKKyAgICBUUkFDRSAoaW1hZ2VsaXN0LCAiKDB4JXggMHgleCAweCV4KVxuIiwgaGltbCwgaSwgaEljb24pOworCiAgICAgaWYgKGhpbWwgPT0gTlVMTCkgcmV0dXJuICgtMSk7CiAgICAgaWYgKChpID49IGhpbWwtPmNDdXJJbWFnZSkgfHwgKGkgPCAtMSkpIHJldHVybiAoLTEpOwogCkBAIC0xOTIyLDEwICsxOTI1LDE0IEBACiAgICAgaWYgKCEocHRyID0gKENVUlNPUklDT05JTkZPICopR2xvYmFsTG9jazE2KGhJY29uKSkpIHJldHVybiAoLTEpOwogICAgIGhibU1hc2sgID0gQ3JlYXRlQml0bWFwMzIgKHB0ci0+bldpZHRoLCBwdHItPm5IZWlnaHQsIDEsIDEsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopKHB0ciArIDEpKTsKKyAgICBpZiAoIShoYm1NYXNrKSkKKwlFUlIgKGltYWdlbGlzdCwgIiBubyBtYXNrIVxuIik7CiAgICAgaGJtSW1hZ2UgPSBDcmVhdGVCaXRtYXAzMiAocHRyLT5uV2lkdGgsIHB0ci0+bkhlaWdodCwgcHRyLT5iUGxhbmVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0ci0+YkJpdHNQZXJQaXhlbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKShwdHIgKyAxKSArIHB0ci0+bkhlaWdodCAqIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJJVE1BUF9XSURUSF9CWVRFUyhwdHItPm5XaWR0aCwgMSkpOworICAgIGlmICghKGhibU1hc2spKQorCUVSUiAoaW1hZ2VsaXN0LCAiIG5vIGltYWdlIVxuIik7CiAjZWxzZQogICAgIEdldEljb25JbmZvIChoSWNvbiwgJmlpKTsKICAgICBHZXRPYmplY3QzMkEgKGlpLT5oYm1NYXNrLCBzaXplb2YoQklUTUFQMzIpLCAoTFBWT0lEKSZibXApOwpAQCAtMTk3MCwxMCArMTk3NywxMyBAQAogCiAgICAgRGVsZXRlREMzMiAoaGRjSW1hZ2VMaXN0KTsKICAgICBEZWxldGVEQzMyIChoZGNJbWFnZSk7Ci0jaWZkZWYgX19HRVRfSUNPTl9JTkZPX0hBQ0sgICAgICAgIAorI2lmZGVmIF9fR0VUX0lDT05fSU5GT19IQUNLX18KICAgICBEZWxldGVPYmplY3QzMiAoaGJtSW1hZ2UpOwogICAgIERlbGV0ZU9iamVjdDMyIChoYm1NYXNrKTsKICAgICBHbG9iYWxVbmxvY2sxNiAoaEljb24pOworI2Vsc2UKKyAgICBEZWxldGVPYmplY3QzMiAoaWktPmhibUNvbG9yKTsKKyAgICBEZWxldGVPYmplY3QzMiAoaWktPmhibU1hc2spOwogI2VuZGlmCiAgICAgcmV0dXJuIChuSW5kZXgpOwogfQpAQCAtMjA3MSwxNSArMjA4MSwxNCBAQAogICogICAgIGVtcHR5IHN0dWIuCiAgKi8KIAotI2lmIDAKIEJPT0wzMiBXSU5BUEkKIEltYWdlTGlzdF9TZXRGaWx0ZXIgKEhJTUFHRUxJU1QgaGltbCwgSU5UMzIgaSwgRFdPUkQgZHdGaWx0ZXIpCiB7Ci0gICAgRklYTUUgKGltYWdlbGlzdCwgImVtcHR5IHN0dWIhXG4iKTsKKyAgICBGSVhNRSAoaW1hZ2VsaXN0LCAiKCVwIDB4JTA4eCAweCUwOHgpOmVtcHR5IHN0dWIhXG4iLAorCSAgIGhpbWwsIGksIGR3RmlsdGVyKTsKIAotCisgICAgcmV0dXJuIEZBTFNFOwogfQotI2VuZGlmIC8qIDAgKi8KIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvbWlzYy9tYWluLmMgYi9taXNjL21haW4uYwppbmRleCA5ODE5ZTU1Li42YTQ1OWRhIDEwMDY0NAotLS0gYS9taXNjL21haW4uYworKysgYi9taXNjL21haW4uYwpAQCAtMTE0OSw3ICsxMTQ5LDcgQEAKIAogICAgIGNhc2UgU1BJX0dFVEhJR0hDT05UUkFTVDoKICAgICB7Ci0gICAgICAgTFBISUdIQ09OVFJBU1RBIGxwSGlnaENvbnRyYXN0VyA9IChMUEhJR0hDT05UUkFTVFcpbHB2UGFyYW07CisgICAgICAgTFBISUdIQ09OVFJBU1RXIGxwSGlnaENvbnRyYXN0VyA9IChMUEhJR0hDT05UUkFTVFcpbHB2UGFyYW07CiAKICAgICAgICBGSVhNRShzeXN0ZW0sIlNQSV9HRVRISUdIQ09OVFJBU1Qgbm90IGZ1bGx5IGltcGxlbWVudGVkXG4iKTsKIApAQCAtMTE3OCw3ICsxMTc4LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKglGaWxlQ0RSIChLRVJORUwuMTMwKQogKi8KLXZvaWQgV0lOQVBJIEZpbGVDRFIoRkFSUFJPQzE2IHgpCitGQVJQUk9DMTYgV0lOQVBJIEZpbGVDRFIoRkFSUFJPQzE2IHgpCiB7CiAJRklYTUUoZmlsZSwiKCU4eCk6IHN0dWJcbiIsIChpbnQpIHgpOworCXJldHVybiAoRkFSUFJPQzE2KVRSVUU7CiB9CmRpZmYgLS1naXQgYS9taXNjL25ldHdvcmsuYyBiL21pc2MvbmV0d29yay5jCmluZGV4IGEwZWVkYWQuLmQ5NTUwMTYgMTAwNjQ0Ci0tLSBhL21pc2MvbmV0d29yay5jCisrKyBiL21pc2MvbmV0d29yay5jCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSAid25ldC5oIgogI2luY2x1ZGUgImRlYnVnLmgiCiAjaW5jbHVkZSAid2luLmgiCisjaW5jbHVkZSAiaGVhcC5oIgogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICBXTmV0QWRkQ29ubmVjdGlvbjE2IFtVU0VSLjUxN10gIERpcmVjdHMgYSBsb2NhbCBkZXZpY2UgdG8gbmV0CkBAIC0yNyw3ICsyOCw5IEBACiAgICByZXR1cm4gV05ldEFkZENvbm5lY3Rpb24zMkEobHBOZXRQYXRoLCBscFBhc3NXb3JkLCBscExvY2FsTmFtZSk7CiB9CiAKLS8qIFtNUFIuNTBdICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgV05ldEFkZENvbm5lY3Rpb24zMiBbTVBSLjUwXSAKKyAqLwogCiBVSU5UMzIgV0lOQVBJIFdOZXRBZGRDb25uZWN0aW9uMzJBKExQQ1NUUiBOZXRQYXRoLCBMUENTVFIgUGFzc1dvcmQsCiAJCQkgICAgTFBDU1RSIExvY2FsTmFtZSkKQEAgLTQ0LDYgKzQ3LDcgQEAKIAkJCSAgICBMUENXU1RSIExvY2FsTmFtZSkKIHsKICAgIEZJWE1FKHduZXQsICIgc3R1YiFcbiIpOworICAgU2V0TGFzdEVycm9yKFdOX05PX05FVFdPUkspOwogICAgcmV0dXJuIFdOX05PX05FVFdPUks7CiB9CiAKQEAgLTEwOCw3ICsxMTIsMzIgQEAKIAkJCQkgZmxhZ3MpOyAKIH0gCiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBXTmV0Q29ubmVjdGlvbkRpYWxvZzFfMzJBIFtNUFIuNTldCisgKi8KK1VJTlQzMiBXTmV0Q29ubmVjdGlvbkRpYWxvZzFfMzJBIChMUENPTk5FQ1RETEdTVFJVQ1QzMkEgbHBDb25uRGxnU3RydWN0KQoreyBGSVhNRSh3bmV0LCIlcCBzdHViXG4iLCBscENvbm5EbGdTdHJ1Y3QpOyAgIAorICBTZXRMYXN0RXJyb3IoV05fTk9fTkVUV09SSyk7CisgIHJldHVybiBFUlJPUl9OT19ORVRXT1JLOworfQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFdOZXRDb25uZWN0aW9uRGlhbG9nMV8zMlcgW01QUi42MF0KKyAqLyAKK1VJTlQzMiBXTmV0Q29ubmVjdGlvbkRpYWxvZzFfMzJXIChMUENPTk5FQ1RETEdTVFJVQ1QzMlcgbHBDb25uRGxnU3RydWN0KQoreyBGSVhNRSh3bmV0LCIlcCBzdHViXG4iLCBscENvbm5EbGdTdHJ1Y3QpOworICBTZXRMYXN0RXJyb3IoV05fTk9fTkVUV09SSyk7CisgIHJldHVybiBFUlJPUl9OT19ORVRXT1JLOworfQorIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFdOZXRDb25uZWN0aW9uRGlhbG9nMV8zMiBbTVBSLjYxXQorICovIAorVUlOVDMyIFdOZXRDb25uZWN0aW9uRGlhbG9nMV8zMihIV05EMzIgb3duZXIsIERXT1JEIGZsYWdzICApCit7IEZJWE1FKHduZXQsIm93bmVyID0gMHgleCwgZmxhZ3M9MHglbHggc3R1YlxuIiwgb3duZXIsZmxhZ3MpOworICBTZXRMYXN0RXJyb3IoV05fTk9fTkVUV09SSyk7CisgIHJldHVybiBFUlJPUl9OT19ORVRXT1JLOwogCit9CiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgV05ldENhbmNlbENvbm5lY3Rpb24JW1VTRVIuNTE4XSAgdW5kaXJlY3RzIGEgbG9jYWwgZGV2aWNlCiAgKi8KQEAgLTI4NSwxNSArMzE0LDE1IEBACiAgKgkJCQlXTmV0R2V0Q29ubmVjdGlvblcJW01QUi43Ml0KICAqLwogRFdPUkQgV0lOQVBJCi1XTmV0R2V0Q29ubmVjdGlvbjMyVyhMUENXU1RSIGxvY2FsbmFtZVcsTFBTVFIgcmVtb3RlbmFtZVcsTFBEV09SRCBidWZsZW4pCitXTmV0R2V0Q29ubmVjdGlvbjMyVyhMUENXU1RSIGxvY2FsbmFtZVcsTFBXU1RSIHJlbW90ZW5hbWVXLExQRFdPUkQgYnVmbGVuKQogewogCVVJTlQxNgl4OwogCUNIQVIJYnVmWzIwMF07CQogCUxQU1RSCWxuQSA9IEhFQVBfc3RyZHVwV3RvQShHZXRQcm9jZXNzSGVhcCgpLDAsbG9jYWxuYW1lVyk7CiAJRFdPUkQJcmV0ID0gV05ldEdldENvbm5lY3Rpb24xNihsbkEsYnVmLCZ4KTsKIAotCSpidWZsZW4gPSB4OyAvKiBGSVhNRTogKjIgPyAqLwogCWxzdHJjcHlBdG9XKHJlbW90ZW5hbWVXLGJ1Zik7CisJKmJ1Zmxlbj1sc3RybGVuMzJXKHJlbW90ZW5hbWVXKTsKIAlIZWFwRnJlZShHZXRQcm9jZXNzSGVhcCgpLDAsbG5BKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtNTcyLDYgKzYwMSw3IEBACiB7CiAJRklYTUUod25ldCwgIiglMDhsWCwgJTA4bFgsICUwOGxYLCAlcCwgJXApOiBzdHViXG4iLAogCSAgICAgIGR3U2NvcGUsIGR3VHlwZSwgZHdVc2FnZSwgbHBOZXQsIGxwaEVudW0pOworCVNldExhc3RFcnJvcihXTl9OT19ORVRXT1JLKTsKIAlyZXR1cm4gV05fTk9fTkVUV09SSzsKIH0KIApAQCAtNTg0LDYgKzYxNCw3IEBACiAJTFBORVRSRVNPVVJDRTMyQSBuZXRyZXMsTFBWT0lEIGJ1ZixMUERXT1JEIGJ1ZmxlbixMUFNUUiBzeXN0ZW1zdHIKICkgewogCUZJWE1FKHduZXQsIiglcCwlcCwlcCwlcCk6IHN0dWIhXG4iLG5ldHJlcyxidWYsYnVmbGVuLHN5c3RlbXN0cik7CisgIFNldExhc3RFcnJvcihXTl9OT19ORVRXT1JLKTsKIAlyZXR1cm4gV05fTk9fTkVUV09SSzsKIH0KIApAQCAtNjY3LDQgKzY5OCwxOSBAQAogCUZJWE1FKG1wciwiKCVseCwlbHgpOiBzdHViXG4iLHgseSk7CiAJcmV0dXJuIDE7CiB9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBNdWx0aW5ldEdldEVycm9yVGV4dEEgW01QUi4yOF0KKyAqLwogCitVSU5UMzIgV0lOQVBJIE11bHRpbmV0R2V0RXJyb3JUZXh0MzJBIChEV09SRCB4LCBEV09SRCB5LCBEV09SRCB6KQorewlGSVhNRShtcHIsIiglbHgsJWx4LCVseCk6IHN0dWJcbiIseCx5LHopOworICByZXR1cm4gMDsKK30KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIE11bHRpbmV0R2V0RXJyb3JUZXh0VyBbTVBSLjI5XQorICovCisKK1VJTlQzMiBXSU5BUEkgTXVsdGluZXRHZXRFcnJvclRleHQzMlcgKERXT1JEIHgsIERXT1JEIHksIERXT1JEIHopCit7CUZJWE1FKG1wciwiKCVseCwlbHgsJWx4KTogc3R1YlxuIix4LHkseik7CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbWlzYy9udGRsbC5jIGIvbWlzYy9udGRsbC5jCmluZGV4IDE2OWNmNDUuLmZhZWU0ZDggMTAwNjQ0Ci0tLSBhL21pc2MvbnRkbGwuYworKysgYi9taXNjL250ZGxsLmMKQEAgLTcxMiwzICs3MTIsOSBAQAogCSk7CiAJcmV0dXJuIDA7CiB9CisKK0RXT1JEIFdJTkFQSSBSdGxGb3JtYXRDdXJyZW50VXNlcktleVBhdGgoKQoreworICAgIEZJWE1FKG50ZGxsLCIoKTogc3R1YlxuIik7CisgICAgcmV0dXJuIDE7Cit9CmRpZmYgLS1naXQgYS9taXNjL3ByaW50ZHJ2LmMgYi9taXNjL3ByaW50ZHJ2LmMKaW5kZXggMzdhMTc0OC4uNzVhNmE4ZiAxMDA2NDQKLS0tIGEvbWlzYy9wcmludGRydi5jCisrKyBiL21pc2MvcHJpbnRkcnYuYwpAQCAtMiw2ICsyLDcgQEAKICAqIEltcGxlbWVudGF0aW9uIG9mIHNvbWUgcHJpbnRlciBkcml2ZXIgYml0cwogICogCiAgKiBDb3B5cmlnaHQgMTk5NiBKb2huIEhhcnZleQorICogQ29weXJpZ2h0IDE5OTggQW5kcmVhcyBNb2hyCiAgKi8KIAogI2luY2x1ZGUgPHN0ZGxpYi5oPgpAQCAtMTIsOSArMTMsNyBAQAogI2luY2x1ZGUgIndpbmVycm9yLmgiCiAjaW5jbHVkZSAid2lucmVnLmgiCiAjaW5jbHVkZSAiZGVidWcuaCIKLQotI2RlZmluZSBJTlRfUERfREVGQVVMVF9ERVZNT0RFCTEKLSNkZWZpbmUgSU5UX1BEX0RFRkFVTFRfTU9ERUwJMgorI2luY2x1ZGUgInByaW50LmgiCiAKIHN0YXRpYyBjaGFyIFByaW50ZXJNb2RlbFtdCT0gIlByaW50ZXIgTW9kZWwiOwogc3RhdGljIGNoYXIgRGVmYXVsdERldk1vZGVbXQk9ICJEZWZhdWx0IERldk1vZGUiOwpAQCAtMzEsNyArMzAsOCBAQAogICBUUkFDRShwcmludCwgIiVkICVzICVzXG4iLGxwZG9jLT5jYlNpemUsCiAJKExQU1RSKVBUUl9TRUdfVE9fTElOKGxwZG9jLT5scHN6RG9jTmFtZSksCiAJKExQU1RSKVBUUl9TRUdfVE9fTElOKGxwZG9jLT5scHN6T3V0cHV0KSk7Ci0gIHJldFZhbCA9ICBFc2NhcGUxNihoZGMsIFNUQVJURE9DLCBzaXplb2YoRE9DSU5GTzE2KSwgbHBkb2MtPmxwc3pEb2NOYW1lLCAwKTsKKyAgcmV0VmFsID0gIEVzY2FwZTE2KGhkYywgU1RBUlRET0MsCisgICAgc3RybGVuKChMUFNUUilQVFJfU0VHX1RPX0xJTihscGRvYy0+bHBzekRvY05hbWUpKSwgbHBkb2MtPmxwc3pEb2NOYW1lLCAwKTsKICAgVFJBQ0UocHJpbnQsIkVzY2FwZTE2IHJldHVybmVkICVkXG4iLHJldFZhbCk7CiAgIHJldHVybiByZXRWYWw7CiB9CkBAIC0xMDAsOCArMTAwLDggQEAKICAgICBzdHJjcHkoUmVnU3RyX1ByaW50ZXIsIFByaW50ZXJzKTsKICAgICBzdHJjYXQoUmVnU3RyX1ByaW50ZXIsIGxwUHJpbnRlcik7CiAKLSAgICBpZiAoKChEV09SRClscFByb2ZpbGUgPT0gSU5UX1BEX0RFRkFVTFRfREVWTU9ERSkgfHwKLSAgICAoIWxzdHJjbXAzMkEobHBQcm9maWxlLCBEZWZhdWx0RGV2TW9kZSkpKSB7CisgICAgaWYgKCgoRFdPUkQpbHBQcm9maWxlID09IElOVF9QRF9ERUZBVUxUX0RFVk1PREUpIHx8IChISVdPUkQobHBQcm9maWxlKSAmJgorICAgICghc3RyY21wKGxwUHJvZmlsZSwgRGVmYXVsdERldk1vZGUpKSkpIHsKIAlzaXplID0gRHJ2R2V0UHJpbnRlckRhdGFJbnRlcm5hbChSZWdTdHJfUHJpbnRlciwgbHBQcmludGVyRGF0YSwgY2JEYXRhKTsKIAlpZiAoc2l6ZSsxKSB7CiAJICAgICpscE5lZWRlZCA9IHNpemU7CkBAIC0xMTEsOCArMTExLDggQEAKIAllbHNlIHJlcyA9IEVSUk9SX0lOVkFMSURfUFJJTlRFUl9OQU1FOwogICAgIH0KICAgICBlbHNlCi0gICAgaWYgKCgoRFdPUkQpbHBQcm9maWxlID09IElOVF9QRF9ERUZBVUxUX01PREVMKSB8fAotICAgICghbHN0cmNtcDMyQShscFByb2ZpbGUsIFByaW50ZXJNb2RlbCkpKSB7CisgICAgaWYgKCgoRFdPUkQpbHBQcm9maWxlID09IElOVF9QRF9ERUZBVUxUX01PREVMKSB8fCAoSElXT1JEKGxwUHJvZmlsZSkgJiYKKyAgICAoIXN0cmNtcChscFByb2ZpbGUsIFByaW50ZXJNb2RlbCkpKSkgewogCSpscE5lZWRlZCA9IDMyOwogCWlmICghbHBQcmludGVyRGF0YSkgZ290byBmYWlsZWQ7CiAJaWYgKGNiRGF0YSA8IDMyKSB7CkBAIC0xMzAsMTMgKzEzMCwxOCBAQAogCWlmICgocmVzID0gUmVnT3BlbktleTMyQShIS0VZX0xPQ0FMX01BQ0hJTkUsIFJlZ1N0cl9QcmludGVyLCAmaGtleSkpKQogCSAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgY2JQcmludGVyQXR0ciA9IDQ7Ci0JaWYgKChyZXMgPSBSZWdRdWVyeVZhbHVlRXgzMkEoaGtleSwgIkF0dHJpYnV0ZXMiLCAwLCAmZHdUeXBlLCAoTFBCWVRFKSZQcmludGVyQXR0ciwgJmNiUHJpbnRlckF0dHIpKSkKKyAgICAgICAgaWYgKChyZXMgPSBSZWdRdWVyeVZhbHVlRXgzMkEoaGtleSwgIkF0dHJpYnV0ZXMiLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgJmR3VHlwZSwgKExQQllURSkmUHJpbnRlckF0dHIsICZjYlByaW50ZXJBdHRyKSkpCiAJICAgIGdvdG8gZmFpbGVkOwogCWlmICgocmVzID0gUmVnT3BlbktleTMyQShoa2V5LCBQcmludGVyRHJpdmVyRGF0YSwgJmhrZXkyKSkpCiAJICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAqbHBOZWVkZWQgPSBjYkRhdGE7Ci0JcmVzID0gUmVnUXVlcnlWYWx1ZUV4MzJBKGhrZXkyLCBscFByb2ZpbGUsIDAsIGxwVHlwZSwgbHBQcmludGVyRGF0YSwgbHBOZWVkZWQpOwotCWlmICgocmVzICE9IEVSUk9SX0NBTlRSRUFEKSAmJiAoKFByaW50ZXJBdHRyICYgKDB4ODAwfDB4MTApKSA9PSAweDEwKSkKKyAgICAgICAgcmVzID0gUmVnUXVlcnlWYWx1ZUV4MzJBKGhrZXkyLCBscFByb2ZpbGUsIDAsCisgICAgICAgICAgICAgICAgbHBUeXBlLCBscFByaW50ZXJEYXRhLCBscE5lZWRlZCk7CisgICAgICAgIGlmICgocmVzICE9IEVSUk9SX0NBTlRSRUFEKSAmJgorICAgICAgICAgKChQcmludGVyQXR0ciAmCisgICAgICAgIChQUklOVEVSX0FUVFJJQlVURV9FTkFCTEVfQklESXxQUklOVEVSX0FUVFJJQlVURV9ORVRXT1JLKSkKKyAgICAgICAgPT0gUFJJTlRFUl9BVFRSSUJVVEVfTkVUV09SSykpCiAgICAgICAgIHsKIAkgICAgaWYgKCEocmVzKSAmJiAoKmxwVHlwZSA9PSBSRUdfRFdPUkQpICYmICgqKExQRFdPUkQpbHBQcmludGVyRGF0YSA9PSAtMSkpCiAJICAgICAgICByZXMgPSBFUlJPUl9JTlZBTElEX0RBVEE7CkBAIC0xNzYsOCArMTgxLDggQEAKICAgICBUUkFDRShwcmludCwibHBUeXBlICUwOGx4XG4iLGxwVHlwZSk7CiAKICAgICBpZiAoKCFscFByaW50ZXIpIHx8ICghbHBQcm9maWxlKSB8fAotICAgICgoRFdPUkQpbHBQcm9maWxlID09IElOVF9QRF9ERUZBVUxUX01PREVMKSB8fAotICAgICghbHN0cmNtcDMyQShscFByb2ZpbGUsIFByaW50ZXJNb2RlbCkpKQorICAgICgoRFdPUkQpbHBQcm9maWxlID09IElOVF9QRF9ERUZBVUxUX01PREVMKSB8fCAoSElXT1JEKGxwUHJvZmlsZSkgJiYKKyAgICAoIXN0cmNtcChscFByb2ZpbGUsIFByaW50ZXJNb2RlbCkpKSkKIAlyZXR1cm4gRVJST1JfSU5WQUxJRF9QQVJBTUVURVI7CiAKICAgICBSZWdTdHJfUHJpbnRlciA9IEhlYXBBbGxvYyhHZXRQcm9jZXNzSGVhcCgpLCAwLApAQCAtMTg1LDggKzE5MCw4IEBACiAgICAgc3RyY3B5KFJlZ1N0cl9QcmludGVyLCBQcmludGVycyk7CiAgICAgc3RyY2F0KFJlZ1N0cl9QcmludGVyLCBscFByaW50ZXIpOwogCi0gICAgaWYgKCgoRFdPUkQpbHBQcm9maWxlID09IElOVF9QRF9ERUZBVUxUX0RFVk1PREUpIHx8Ci0gICAgKCFsc3RyY21wMzJBKGxwUHJvZmlsZSwgRGVmYXVsdERldk1vZGUpKSkgeworICAgIGlmICgoKERXT1JEKWxwUHJvZmlsZSA9PSBJTlRfUERfREVGQVVMVF9ERVZNT0RFKSB8fCAoSElXT1JEKGxwUHJvZmlsZSkgJiYKKyAgICAoIXN0cmNtcChscFByb2ZpbGUsIERlZmF1bHREZXZNb2RlKSkpKSB7CiAJaWYgKCEoUmVnT3BlbktleTMyQShIS0VZX0xPQ0FMX01BQ0hJTkUsIFJlZ1N0cl9QcmludGVyLCAmaGtleSkpIHx8CiAJICAgIChSZWdTZXRWYWx1ZUV4MzJBKGhrZXksIERlZmF1bHREZXZNb2RlLCAwLCBSRUdfQklOQVJZLCBscFByaW50ZXJEYXRhLCBkd1NpemUpKSkKIAkgICAgICAgIHJlcyA9IEVSUk9SX0lOVkFMSURfUFJJTlRFUl9OQU1FOwpkaWZmIC0tZ2l0IGEvbWlzYy9yZWdpc3RyeS5jIGIvbWlzYy9yZWdpc3RyeS5jCmluZGV4IDAxYjc0OTguLjZmN2ZmOTEgMTAwNjQ0Ci0tLSBhL21pc2MvcmVnaXN0cnkuYworKysgYi9taXNjL3JlZ2lzdHJ5LmMKQEAgLTE1LDYgKzE1LDcgQEAKICAqIFRPRE8KICAqICAgIFNlY3VyaXR5IGFjY2VzcwogICogICAgT3B0aW9uIGhhbmRsaW5nCisgKiAgICBUaW1lIGZvciBSZWdFbnVtS2V5KiwgUmVnUXVlcnlJbmZvS2V5KgogICovCiAKICNpbmNsdWRlIDxzdGRsaWIuaD4KQEAgLTIwODAsNyArMjA4MSw3IEBACiAgKgogICogQ2FsbHBhdGg6CiAgKiBSZWdRdWVyeVZhbHVlMTYgLT4gUmVnUXVlcnlWYWx1ZTMyQSAtPiBSZWdRdWVyeVZhbHVlRXgzMkEgXAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdRdWVyeVZhbHVlMzJXIC0+IFJlZ1F1ZXJ5VmFsdWVFeDMyVworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnUXVlcnlWYWx1ZTMyVyAtPiBSZWdRdWVyeVZhbHVlRXgzMlcKICAqLwogCiAKQEAgLTI2MDIsMTIgKzI2MDMsMjIgQEAKICAqCiAgKiBDYWxscGF0aDoKICAqIFJlZ0VudW1LZXkxNiAtPiBSZWdFbnVtS2V5MzJBIC0+IFJlZ0VudW1LZXlFeDMyQSBcCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ0VudW1LZXkzMlcgICAtPiBSZWdFbnVtS2V5RXgzMlcKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ0VudW1LZXkzMlcgICAtPiBSZWdFbnVtS2V5RXgzMlcKICAqLwogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFJlZ0VudW1LZXlFeDMyVyBbQURWQVBJMzIuMTM5XQorICoKKyAqIFBBUkFNUworICogICAgaGtleSAgICAgICAgIFtJXSBIYW5kbGUgdG8ga2V5IHRvIGVudW1lcmF0ZQorICogICAgaVN1YktleSAgICAgIFtJXSBJbmRleCBvZiBzdWJrZXkgdG8gZW51bWVyYXRlCisgKiAgICBscHN6TmFtZSAgICAgW09dIEJ1ZmZlciBmb3Igc3Via2V5IG5hbWUKKyAqICAgIGxwY2NoTmFtZSAgICBbT10gU2l6ZSBvZiBzdWJrZXkgYnVmZmVyCisgKiAgICBscGR3UmVzZXJ2ZWQgW0ldIFJlc2VydmVkCisgKiAgICBscHN6Q2xhc3MgICAgW09dIEJ1ZmZlciBmb3IgY2xhc3Mgc3RyaW5nCisgKiAgICBscGNjaENsYXNzICAgW09dIFNpemUgb2YgY2xhc3MgYnVmZmVyCisgKiAgICBmdCAgICAgICAgICAgW09dIFRpbWUga2V5IGxhc3Qgd3JpdHRlbiB0bwogICovCiBEV09SRCBXSU5BUEkgUmVnRW51bUtleUV4MzJXKCBIS0VZIGhrZXksIERXT1JEIGlTdWJrZXksIExQV1NUUiBscHN6TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQRFdPUkQgbHBjY2hOYW1lLCBMUERXT1JEIGxwZHdSZXNlcnZlZCwKQEAgLTI2MjYsMTcgKzI2MzcsMjQgQEAKIAlpZiAoIWxwa2V5LT5uZXh0c3ViKQogCQlyZXR1cm4gRVJST1JfTk9fTU9SRV9JVEVNUzsKIAlscHhrZXk9bHBrZXktPm5leHRzdWI7CisKKyAgICAvKiBUcmF2ZXJzZSB0aGUgc3Via2V5cyAqLwogCXdoaWxlIChpU3Via2V5ICYmIGxweGtleSkgewogCQlpU3Via2V5LS07CiAJCWxweGtleT1scHhrZXktPm5leHQ7CiAJfQorCiAJaWYgKGlTdWJrZXkgfHwgIWxweGtleSkKIAkJcmV0dXJuIEVSUk9SX05PX01PUkVfSVRFTVM7CiAJaWYgKDIqbHN0cmxlbjMyVyhscHhrZXktPmtleW5hbWUpKzI+KmxwY2NoTmFtZSkKIAkJcmV0dXJuIEVSUk9SX01PUkVfREFUQTsKIAltZW1jcHkobHBzek5hbWUsbHB4a2V5LT5rZXluYW1lLGxzdHJsZW4zMlcobHB4a2V5LT5rZXluYW1lKSoyKzIpOworCisgICAgICAgIGlmICgqbHBjY2hOYW1lKQorICAgICAgICAgICAgKmxwY2NoTmFtZSA9IGxzdHJsZW4zMlcobHBzek5hbWUpOworCiAJaWYgKGxwc3pDbGFzcykgewotCQkvKiB3aGF0IHNob3VsZCB3ZSB3cml0ZSBpbnRvIGl0PyAqLworCQkvKiBGSVhNRTogd2hhdCBzaG91bGQgd2Ugd3JpdGUgaW50byBpdD8gKi8KIAkJKmxwc3pDbGFzcwk9IDA7CiAJCSpscGNjaENsYXNzCT0gMjsKIAl9CkBAIC0yNzQ5LDkgKzI3NjcsMTQgQEAKICAqIFJlZ0VudW1WYWx1ZTMyVyBbQURWQVBJMzIuMTQyXQogICoKICAqIFBBUkFNUwotICogICAgaGtleSAgIFtJXQotICogICAgaVZhbHVlIFtJXQotICogICAgLi4uCisgKiAgICBoa2V5ICAgICAgICBbSV0gSGFuZGxlIHRvIGtleSB0byBxdWVyeQorICogICAgaVZhbHVlICAgICAgW0ldIEluZGV4IG9mIHZhbHVlIHRvIHF1ZXJ5CisgKiAgICBscHN6VmFsdWUgICBbT10gVmFsdWUgc3RyaW5nCisgKiAgICBscGNjaFZhbHVlICBbT10gU2l6ZSBvZiB2YWx1ZSBidWZmZXIKKyAqICAgIGxwZFJlc2VydmVkIFtJXSBSZXNlcnZlZAorICogICAgbHBkd1R5cGUgICAgW09dIFR5cGUgY29kZQorICogICAgbHBiRGF0YSAgICAgW09dIFZhbHVlIGRhdGEKKyAqICAgIGxwY2JEYXRhICAgIFtPXSBTaXplIG9mIGRhdGEgYnVmZmVyCiAgKi8KIERXT1JEIFdJTkFQSSBSZWdFbnVtVmFsdWUzMlcoIEhLRVkgaGtleSwgRFdPUkQgaVZhbHVlLCBMUFdTVFIgbHBzelZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBEV09SRCBscGNjaFZhbHVlLCBMUERXT1JEIGxwZFJlc2VydmVkLApAQCAtMjc3MiwxMCArMjc5NSwxMSBAQAogICAgIGlmICghaVZhbHVlKQogICAgICAgICByZXR1cm4gRVJST1JfU1VDQ0VTUzsKIAotCWlmIChscGtleS0+bnJvZnZhbHVlczw9aVZhbHVlKQotCQlyZXR1cm4gRVJST1JfTk9fTU9SRV9JVEVNUzsKKyAgICBpZiAobHBrZXktPm5yb2Z2YWx1ZXMgPD0gaVZhbHVlKQorICAgICAgICByZXR1cm4gRVJST1JfTk9fTU9SRV9JVEVNUzsKIAotCXZhbAk9IGxwa2V5LT52YWx1ZXMraVZhbHVlOworICAgIC8qIEZJWE1FOiBTaG91bGQgdGhpcyBiZSBscGtleS0+dmFsdWVzICsgaVZhbHVlICogc2l6ZW9mKEtFWVZBTFVFKT8gKi8KKyAgICB2YWwgPSBscGtleS0+dmFsdWVzICsgaVZhbHVlOwogCiAJaWYgKHZhbC0+bmFtZSkgewogCQlpZiAobHN0cmxlbjMyVyh2YWwtPm5hbWUpKjIrMj4qbHBjY2hWYWx1ZSkgewpAQCAtMjc4OCw4ICsyODEyLDExIEBACiAJCSpscHN6VmFsdWUJPSAwOwogCQkqbHBjY2hWYWx1ZQk9IDA7CiAJfQotCWlmIChscGR3VHlwZSkKLQkJKmxwZHdUeXBlPXZhbC0+dHlwZTsKKworICAgIC8qIENhbiBiZSBOVUxMIGlmIHRoZSB0eXBlIGNvZGUgaXMgbm90IHJlcXVpcmVkICovCisgICAgaWYgKGxwZHdUeXBlKQorICAgICAgICAqbHBkd1R5cGUgPSB2YWwtPnR5cGU7CisKIAlpZiAobHBiRGF0YSkgewogCQlpZiAodmFsLT5sZW4+KmxwY2JEYXRhKQogCQkJcmV0dXJuIEVSUk9SX01PUkVfREFUQTsKQEAgLTI4MTEsMTAgKzI4MzgsMTAgQEAKIAlMUFdTVFIJbHBzelZhbHVlVzsKIAlMUEJZVEUJbHBiRGF0YVc7CiAJRFdPUkQJcmV0LGxwY2JEYXRhVzsKKwlEV09SRCBkd1R5cGU7CiAKLQlUUkFDRShyZWcsIigleCwlbGQsJXAsJXAsJXAsJXAsJXAsJXApXG4iLAotCQloa2V5LGlWYWx1ZSxscHN6VmFsdWUsbHBjY2hWYWx1ZSxscGRSZXNlcnZlZCxscGR3VHlwZSxscGJEYXRhLGxwY2JEYXRhCi0JKTsKKwlUUkFDRShyZWcsIigleCwlbGQsJXAsJXAsJXAsJXAsJXAsJXApXG4iLGhrZXksaVZhbHVlLGxwc3pWYWx1ZSxscGNjaFZhbHVlLAorCQlscGRSZXNlcnZlZCxscGR3VHlwZSxscGJEYXRhLGxwY2JEYXRhKTsKIAogCWxwc3pWYWx1ZVcgPSAoTFBXU1RSKXhtYWxsb2MoKmxwY2NoVmFsdWUqMik7CiAJaWYgKGxwYkRhdGEpIHsKQEAgLTI4MjIsMjEgKzI4NDksMTcgQEAKIAkJbHBjYkRhdGFXID0gKmxwY2JEYXRhKjI7CiAJfSBlbHNlCiAJCWxwYkRhdGFXID0gTlVMTDsKLQlyZXQ9UmVnRW51bVZhbHVlMzJXKAotCQloa2V5LAotCQlpVmFsdWUsCi0JCWxwc3pWYWx1ZVcsCi0JCWxwY2NoVmFsdWUsCi0JCWxwZFJlc2VydmVkLAotCQlscGR3VHlwZSwKLQkJbHBiRGF0YVcsCi0JCSZscGNiRGF0YVcKLQkpOworCisJcmV0ID0gUmVnRW51bVZhbHVlMzJXKCBoa2V5LCBpVmFsdWUsIGxwc3pWYWx1ZVcsIGxwY2NoVmFsdWUsIAorCQkJCWxwZFJlc2VydmVkLCAmZHdUeXBlLCBscGJEYXRhVywgJmxwY2JEYXRhVyApOworCisJaWYgKGxwZHdUeXBlKQorCQkqbHBkd1R5cGUgPSBkd1R5cGU7CiAKIAlpZiAocmV0PT1FUlJPUl9TVUNDRVNTKSB7CiAJCWxzdHJjcHlXdG9BKGxwc3pWYWx1ZSxscHN6VmFsdWVXKTsKIAkJaWYgKGxwYkRhdGEpIHsKLQkJCWlmICgoMTw8KmxwZHdUeXBlKSAmIFVOSUNPTlZNQVNLKSB7CisJCQlpZiAoKDE8PGR3VHlwZSkgJiBVTklDT05WTUFTSykgewogCQkJCWxzdHJjcHlXdG9BKGxwYkRhdGEsKExQV1NUUilscGJEYXRhVyk7CiAJCQl9IGVsc2UgewogCQkJCWlmIChscGNiRGF0YVcgPiAqbHBjYkRhdGEpCkBAIC0yODQ3LDExICsyODcwLDkgQEAKIAkJCSpscGNiRGF0YSA9IGxwY2JEYXRhVzsKIAkJfQogCX0KLQlpZiAobHBiRGF0YVcpCi0JCWZyZWUobHBiRGF0YVcpOwotCWlmIChscHN6VmFsdWVXKQotCQlmcmVlKGxwc3pWYWx1ZVcpOwotCXJldHVybiByZXQ7CisgICAgaWYgKGxwYkRhdGFXKSBmcmVlKGxwYkRhdGFXKTsKKyAgICBpZiAobHBzelZhbHVlVykgZnJlZShscHN6VmFsdWVXKTsKKyAgICByZXR1cm4gcmV0OwogfQogCiAKQEAgLTI5MDYsOCArMjkyNyw4IEBACiAgKiBSZWdEZWxldGVLZXkzMlcgW0FEVkFQSTMyLjEzNF0KICAqCiAgKiBQQVJBTVMKLSAqICAgIGhrZXkgICAgICAgW0ldCi0gKiAgICBscHN6U3ViS2V5IFtJXQorICogICAgaGtleSAgICAgICBbSV0gSGFuZGxlIHRvIG9wZW4ga2V5CisgKiAgICBscHN6U3ViS2V5IFtJXSBOYW1lIG9mIHN1YmtleSB0byBkZWxldGUKICAqCiAgKiBSRVRVUk5TCiAgKiAgICBTdWNjZXNzOiBFUlJPUl9TVUNDRVNTCkBAIC0yOTI1LDEwICsyOTQ2LDExIEBACiAgICAgaWYgKCFscE5leHRLZXkpCiAgICAgICAgIHJldHVybiBFUlJPUl9JTlZBTElEX0hBTkRMRTsKIAotICAgIC8qIFdlIG5lZWQgdG8ga25vdyB0aGUgcHJldmlvdXMga2V5IGluIHRoZSBoaWVyLiAqLworICAgIC8qIFN1YmtleSBwYXJhbSBjYW5ub3QgYmUgTlVMTCAqLwogICAgIGlmICghbHBzelN1YktleSB8fCAhKmxwc3pTdWJLZXkpCiAgICAgICAgIHJldHVybiBFUlJPUl9CQURLRVk7CiAKKyAgICAvKiBXZSBuZWVkIHRvIGtub3cgdGhlIHByZXZpb3VzIGtleSBpbiB0aGUgaGllci4gKi8KIAlzcGxpdF9rZXlwYXRoKGxwc3pTdWJLZXksJndwcywmd3BjKTsKIAlpIAk9IDA7CiAJbHB4a2V5CT0gbHBOZXh0S2V5OwpAQCAtMzEzMywyOCArMzE1NSwzNyBAQAogCiAvKiBGSVhNRTogbHBjY2hYWFhYIC4uLiBpcyB0aGlzIGNvdW50aW5nIGluIFdDSEFSUyBvciBpbiBCWVRFcyA/PyAqLwogCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFJlZ1F1ZXJ5SW5mb0tleTMyVyBbQURWQVBJMzIuMTUzXQorICoKKyAqIFBBUkFNUworICogICAgaGtleSAgICAgICAgICAgICAgICAgICBbSV0gSGFuZGxlIHRvIGtleSB0byBxdWVyeQorICogICAgbHBzekNsYXNzICAgICAgICAgICAgICBbT10gQnVmZmVyIGZvciBjbGFzcyBzdHJpbmcKKyAqICAgIGxwY2NoQ2xhc3MgICAgICAgICAgICAgW09dIFNpemUgb2YgY2xhc3Mgc3RyaW5nIGJ1ZmZlcgorICogICAgbHBkd1Jlc2VydmVkICAgICAgICAgICBbSV0gUmVzZXJ2ZWQKKyAqICAgIGxwY1N1YktleXMgICAgICAgICAgICAgW0ldIEJ1ZmZlciBmb3IgbnVtYmVyIG9mIHN1YmtleXMKKyAqICAgIGxwY2NoTWF4U3ViS2V5ICAgICAgICAgW09dIEJ1ZmZlciBmb3IgbG9uZ2VzdCBzdWJrZXkgbmFtZSBsZW5ndGgKKyAqICAgIGxwY2NoTWF4Q2xhc3MgICAgICAgICAgW09dIEJ1ZmZlciBmb3IgbG9uZ2VzdCBjbGFzcyBzdHJpbmcgbGVuZ3RoCisgKiAgICBscGNWYWx1ZXMgICAgICAgICAgICAgIFtPXSBCdWZmZXIgZm9yIG51bWJlciBvZiB2YWx1ZSBlbnRyaWVzCisgKiAgICBscGNjaE1heFZhbHVlTmFtZSAgICAgIFtPXSBCdWZmZXIgZm9yIGxvbmdlc3QgdmFsdWUgbmFtZSBsZW5ndGgKKyAqICAgIGxwY2NiTWF4VmFsdWVEYXRhICAgICAgW09dIEJ1ZmZlciBmb3IgbG9uZ2VzdCB2YWx1ZSBkYXRhIGxlbmd0aAorICogICAgbHBjYlNlY3VyaXR5RGVzY3JpcHRvciBbT10gQnVmZmVyIGZvciBzZWN1cml0eSBkZXNjcmlwdG9yIGxlbmd0aAorICogICAgZnQKICAqLwotRFdPUkQgV0lOQVBJIFJlZ1F1ZXJ5SW5mb0tleTMyVygKLQlIS0VZCWhrZXksCi0JTFBXU1RSCWxwc3pDbGFzcywKLQlMUERXT1JECWxwY2NoQ2xhc3MsCi0JTFBEV09SRAlscGR3UmVzZXJ2ZWQsCi0JTFBEV09SRAlscGNTdWJLZXlzLAotCUxQRFdPUkQJbHBjY2hNYXhTdWJrZXksCi0JTFBEV09SRAlscGNjaE1heENsYXNzLAotCUxQRFdPUkQJbHBjVmFsdWVzLAotCUxQRFdPUkQJbHBjY2hNYXhWYWx1ZU5hbWUsCi0JTFBEV09SRAlscGNjYk1heFZhbHVlRGF0YSwKLQlMUERXT1JECWxwY2JTZWN1cml0eURlc2NyaXB0b3IsCi0JRklMRVRJTUUJKmZ0Ci0pIHsKK0RXT1JEIFdJTkFQSSBSZWdRdWVyeUluZm9LZXkzMlcoIEhLRVkgaGtleSwgTFBXU1RSIGxwc3pDbGFzcywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUERXT1JEIGxwY2NoQ2xhc3MsIExQRFdPUkQgbHBkd1Jlc2VydmVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBEV09SRCBscGNTdWJLZXlzLCBMUERXT1JEIGxwY2NoTWF4U3Via2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBEV09SRCBscGNjaE1heENsYXNzLCBMUERXT1JEIGxwY1ZhbHVlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQRFdPUkQgbHBjY2hNYXhWYWx1ZU5hbWUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBEV09SRCBscGNjYk1heFZhbHVlRGF0YSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUERXT1JEIGxwY2JTZWN1cml0eURlc2NyaXB0b3IsIEZJTEVUSU1FICpmdCApCit7CiAJTFBLRVlTVFJVQ1QJbHBrZXksbHB4a2V5OwogCWludAkJbnJvZmtleXMsbWF4c3Via2V5LG1heGNsYXNzLG1heHZuYW1lLG1heHZkYXRhOwogCWludAkJaTsKIAotCVRSQUNFKHJlZywiKCV4LC4uLi4uLilcbiIsaGtleSk7CisJVFJBQ0UocmVnLCIoJXgsJXAsLi4uKVxuIixoa2V5LGxwc3pDbGFzcyk7CiAJbHBrZXkgPSBsb29rdXBfaGtleShoa2V5KTsKIAlpZiAoIWxwa2V5KQogCQlyZXR1cm4gRVJST1JfSU5WQUxJRF9IQU5ETEU7CkBAIC0zMjEwLDIxICszMjQxLDE2IEBACiB9CiAKIAotLyogUmVnUXVlcnlJbmZvS2V5QQkJW0FEVkFQSTMyLjE1Ml0gKi8KLURXT1JEIFdJTkFQSSBSZWdRdWVyeUluZm9LZXkzMkEoCi0JSEtFWQloa2V5LAotCUxQU1RSCWxwc3pDbGFzcywKLQlMUERXT1JECWxwY2NoQ2xhc3MsCi0JTFBEV09SRAlscGR3UmVzZXJ2ZWQsCi0JTFBEV09SRAlscGNTdWJLZXlzLAotCUxQRFdPUkQJbHBjY2hNYXhTdWJrZXksCi0JTFBEV09SRAlscGNjaE1heENsYXNzLAotCUxQRFdPUkQJbHBjVmFsdWVzLAotCUxQRFdPUkQJbHBjY2hNYXhWYWx1ZU5hbWUsCi0JTFBEV09SRAlscGNjYk1heFZhbHVlRGF0YSwKLQlMUERXT1JECWxwY2JTZWN1cml0eURlc2NyaXB0b3IsCi0JRklMRVRJTUUJKmZ0Ci0pIHsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJlZ1F1ZXJ5SW5mb0tleTMyQSBbQURWQVBJMzIuMTUyXQorICovCitEV09SRCBXSU5BUEkgUmVnUXVlcnlJbmZvS2V5MzJBKCBIS0VZIGhrZXksIExQU1RSIGxwc3pDbGFzcywgTFBEV09SRCBscGNjaENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBEV09SRCBscGR3UmVzZXJ2ZWQsIExQRFdPUkQgbHBjU3ViS2V5cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQRFdPUkQgbHBjY2hNYXhTdWJrZXksIExQRFdPUkQgbHBjY2hNYXhDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQRFdPUkQgbHBjVmFsdWVzLCBMUERXT1JEIGxwY2NoTWF4VmFsdWVOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBEV09SRCBscGNjYk1heFZhbHVlRGF0YSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUERXT1JEIGxwY2JTZWN1cml0eURlc2NyaXB0b3IsIEZJTEVUSU1FICpmdCApCit7CiAJTFBXU1RSCQlscHN6Q2xhc3NXOwogCURXT1JECQlyZXQ7CiAKQEAgLTMzMjIsMTYgKzMzNDgsMjEgQEAKIHsKICAgICBMUEtFWVNUUlVDVAlscGtleTsKIAotICAgIEZJWE1FKHJlZywgIigleCwlbGQsJXAsJWxkKTogc3R1YlxuIixoa2V5LFNlY3VyaXR5SW5mb3JtYXRpb24sCi0gICAgICAgICAgcFNlY3VyaXR5RGVzY3JpcHRvcixscGNiU2VjdXJpdHlEZXNjcmlwdG9yPypscGNiU2VjdXJpdHlEZXNjcmlwdG9yOjApOworICAgIFRSQUNFKHJlZywiKCV4LCVsZCwlcCwlbGQpXG4iLGhrZXksU2VjdXJpdHlJbmZvcm1hdGlvbixwU2VjdXJpdHlEZXNjcmlwdG9yLAorICAgICAgICAgIGxwY2JTZWN1cml0eURlc2NyaXB0b3I/KmxwY2JTZWN1cml0eURlc2NyaXB0b3I6MCk7CiAKICAgICBscGtleSA9IGxvb2t1cF9oa2V5KCBoa2V5ICk7CiAgICAgaWYgKCFscGtleSkKICAgICAgICAgcmV0dXJuIEVSUk9SX0lOVkFMSURfSEFORExFOwogCisgICAgLyogRklYTUU6IENoZWNrIGZvciB2YWxpZCBTZWN1cml0eUluZm9ybWF0aW9uIHZhbHVlcyAqLworCiAgICAgaWYgKCpscGNiU2VjdXJpdHlEZXNjcmlwdG9yIDwgc2l6ZW9mKCpwU2VjdXJpdHlEZXNjcmlwdG9yKSkKICAgICAgICAgcmV0dXJuIEVSUk9SX0lOU1VGRklDSUVOVF9CVUZGRVI7CiAKKyAgICBGSVhNRShyZWcsICIoJXgsJWxkLCVwLCVsZCk6IHN0dWJcbiIsaGtleSxTZWN1cml0eUluZm9ybWF0aW9uLAorICAgICAgICAgIHBTZWN1cml0eURlc2NyaXB0b3IsbHBjYlNlY3VyaXR5RGVzY3JpcHRvcj8qbHBjYlNlY3VyaXR5RGVzY3JpcHRvcjowKTsKKwogICAgIHJldHVybiBFUlJPUl9TVUNDRVNTOwogfQogCkBAIC0zMzQ3LDggKzMzNzgsNyBAQAogTE9ORyBXSU5BUEkgUmVnTG9hZEtleTMyVyggSEtFWSBoa2V5LCBMUENXU1RSIGxwc3pTdWJLZXksIExQQ1dTVFIgbHBzekZpbGUgKQogewogICAgIExQS0VZU1RSVUNUCWxwa2V5OwotICAgIEZJWE1FKHJlZywiKCV4LCVzLCVzKTogc3R1YlxuIixoa2V5LGRlYnVnc3RyX3cobHBzelN1YktleSksCi0gICAgICAgICAgZGVidWdzdHJfdyhscHN6RmlsZSkpOworICAgIFRSQUNFKHJlZywiKCV4LCVzLCVzKVxuIixoa2V5LGRlYnVnc3RyX3cobHBzelN1YktleSksZGVidWdzdHJfdyhscHN6RmlsZSkpOwogCiAgICAgLyogRG8gdGhpcyBjaGVjayBiZWZvcmUgdGhlIGhrZXkgY2hlY2sgKi8KICAgICBpZiAoIWxwc3pTdWJLZXkgfHwgISpscHN6U3ViS2V5IHx8ICFscHN6RmlsZSB8fCAhKmxwc3pGaWxlKQpAQCAtMzM1OCw2ICszMzg4LDkgQEAKICAgICBpZiAoIWxwa2V5KQogICAgICAgICByZXR1cm4gRVJST1JfSU5WQUxJRF9IQU5ETEU7CiAKKyAgICBGSVhNRShyZWcsIigleCwlcywlcyk6IHN0dWJcbiIsaGtleSxkZWJ1Z3N0cl93KGxwc3pTdWJLZXkpLAorICAgICAgICAgIGRlYnVnc3RyX3cobHBzekZpbGUpKTsKKwogICAgIHJldHVybiBFUlJPUl9TVUNDRVNTOwogfQogCkBAIC0zMzkyLDEzICszNDI1LDE2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk9PTDMyIGZBc3luYyApCiB7CiAgICAgTFBLRVlTVFJVQ1QJbHBrZXk7Ci0gICAgRklYTUUocmVnLCIoJXgsJWksJWxkLCV4LCVpKTogc3R1YlxuIixoa2V5LGZXYXRjaFN1YlRyZWUsZmR3Tm90aWZ5RmlsdGVyLAorICAgIFRSQUNFKHJlZywiKCV4LCVpLCVsZCwleCwlaSlcbiIsaGtleSxmV2F0Y2hTdWJUcmVlLGZkd05vdGlmeUZpbHRlciwKICAgICAgICAgICBoRXZlbnQsZkFzeW5jKTsKIAogICAgIGxwa2V5ID0gbG9va3VwX2hrZXkoIGhrZXkgKTsKICAgICBpZiAoIWxwa2V5KQogICAgICAgICByZXR1cm4gRVJST1JfSU5WQUxJRF9IQU5ETEU7CiAKKyAgICBGSVhNRShyZWcsIigleCwlaSwlbGQsJXgsJWkpOiBzdHViXG4iLGhrZXksZldhdGNoU3ViVHJlZSxmZHdOb3RpZnlGaWx0ZXIsCisgICAgICAgICAgaEV2ZW50LGZBc3luYyk7CisKICAgICByZXR1cm4gRVJST1JfU1VDQ0VTUzsKIH0KIApAQCAtMzQ0Myw3ICszNDc5LDcgQEAKIHsKICAgICBMUEtFWVNUUlVDVAlscGtleTsKIAotICAgIEZJWE1FKHJlZywgIigleCwlbGQsJXApOiBzdHViXG4iLCBoa2V5LCBTZWN1cml0eUluZm8sIHBTZWN1cml0eURlc2MpOworICAgIFRSQUNFKHJlZywiKCV4LCVsZCwlcClcbiIsaGtleSxTZWN1cml0eUluZm8scFNlY3VyaXR5RGVzYyk7CiAKICAgICAvKiBJdCBzZWVtcyB0byBwZXJmb3JtIHRoaXMgY2hlY2sgYmVmb3JlIHRoZSBoa2V5IGNoZWNrICovCiAgICAgaWYgKChTZWN1cml0eUluZm8gJiBPV05FUl9TRUNVUklUWV9JTkZPUk1BVElPTikgfHwKQEAgLTM0NjEsNiArMzQ5Nyw4IEBACiAgICAgaWYgKCFscGtleSkKICAgICAgICAgcmV0dXJuIEVSUk9SX0lOVkFMSURfSEFORExFOwogCisgICAgRklYTUUocmVnLCI6KCV4LCVsZCwlcCk6IHN0dWJcbiIsaGtleSxTZWN1cml0eUluZm8scFNlY3VyaXR5RGVzYyk7CisKICAgICByZXR1cm4gRVJST1JfU1VDQ0VTUzsKIH0KIApAQCAtMzQ3OCw3ICszNTE2LDcgQEAKIHsKICAgICBMUEtFWVNUUlVDVAlscGtleTsKIAotICAgIEZJWE1FKHJlZywgIigleCwlcywlcCk6IHN0dWJcbiIsIGhrZXksIGRlYnVnc3RyX3cobHBGaWxlKSwgc2EpOworICAgIFRSQUNFKHJlZywgIigleCwlcywlcClcbiIsIGhrZXksIGRlYnVnc3RyX3cobHBGaWxlKSwgc2EpOwogCiAgICAgLyogSXQgYXBwZWFycyB0byBkbyB0aGlzIGNoZWNrIGJlZm9yZSB0aGUgaGtleSBjaGVjayAqLwogICAgIGlmICghbHBGaWxlIHx8ICEqbHBGaWxlKQpAQCAtMzQ4OCw2ICszNTI2LDggQEAKICAgICBpZiAoIWxwa2V5KQogICAgICAgICByZXR1cm4gRVJST1JfSU5WQUxJRF9IQU5ETEU7CiAKKyAgICBGSVhNRShyZWcsICIoJXgsJXMsJXApOiBzdHViXG4iLCBoa2V5LCBkZWJ1Z3N0cl93KGxwRmlsZSksIHNhKTsKKwogICAgIHJldHVybiBFUlJPUl9TVUNDRVNTOwogfQogCkBAIC0zNTE3LDcgKzM1NTcsOCBAQAogTE9ORyBXSU5BUEkgUmVnUmVzdG9yZUtleTMyVyggSEtFWSBoa2V5LCBMUENXU1RSIGxwRmlsZSwgRFdPUkQgZHdGbGFncyApCiB7CiAgICAgTFBLRVlTVFJVQ1QJbHBrZXk7Ci0gICAgRklYTUUocmVnLCAiKCV4LCVzLCVsZCk6IHN0dWJcbiIsIGhrZXksIGRlYnVnc3RyX3cobHBGaWxlKSwgZHdGbGFncyk7CisKKyAgICBUUkFDRShyZWcsICIoJXgsJXMsJWxkKVxuIixoa2V5LGRlYnVnc3RyX3cobHBGaWxlKSxkd0ZsYWdzKTsKIAogICAgIC8qIEl0IHNlZW1zIHRvIGRvIHRoaXMgY2hlY2sgYmVmb3JlIHRoZSBoa2V5IGNoZWNrICovCiAgICAgaWYgKCFscEZpbGUgfHwgISpscEZpbGUpCkBAIC0zNTI3LDYgKzM1NjgsOCBAQAogICAgIGlmICghbHBrZXkpCiAgICAgICAgIHJldHVybiBFUlJPUl9JTlZBTElEX0hBTkRMRTsKIAorICAgIEZJWE1FKHJlZywiKCV4LCVzLCVsZCk6IHN0dWJcbiIsaGtleSxkZWJ1Z3N0cl93KGxwRmlsZSksZHdGbGFncyk7CisKICAgICAvKiBDaGVjayBmb3IgZmlsZSBleGlzdGVuY2UgKi8KIAogICAgIHJldHVybiBFUlJPUl9TVUNDRVNTOwpAQCAtMzU2MCwxMyArMzYwMywxNiBAQAogewogICAgIExQS0VZU1RSVUNUCWxwa2V5OwogCi0gICAgRklYTUUocmVnLCAiKCV4LCVzLCVzLCVzKTogc3R1YlxuIiwgaGtleSwgZGVidWdzdHJfdyhscFN1YktleSksIAorICAgIFRSQUNFKHJlZywiKCV4LCVzLCVzLCVzKVxuIixoa2V5LGRlYnVnc3RyX3cobHBTdWJLZXkpLAogICAgICAgICAgIGRlYnVnc3RyX3cobHBOZXdGaWxlKSxkZWJ1Z3N0cl93KGxwT2xkRmlsZSkpOwogCiAgICAgbHBrZXkgPSBsb29rdXBfaGtleSggaGtleSApOwogICAgIGlmICghbHBrZXkpCiAgICAgICAgIHJldHVybiBFUlJPUl9JTlZBTElEX0hBTkRMRTsKIAorICAgIEZJWE1FKHJlZywgIigleCwlcywlcywlcyk6IHN0dWJcbiIsIGhrZXksIGRlYnVnc3RyX3cobHBTdWJLZXkpLCAKKyAgICAgICAgICBkZWJ1Z3N0cl93KGxwTmV3RmlsZSksZGVidWdzdHJfdyhscE9sZEZpbGUpKTsKKwogICAgIHJldHVybiBFUlJPUl9TVUNDRVNTOwogfQogCmRpZmYgLS1naXQgYS9taXNjL3NoZWxsLmMgYi9taXNjL3NoZWxsLmMKaW5kZXggYjE0MDA4My4uNzVkODMwZiAxMDA2NDQKLS0tIGEvbWlzYy9zaGVsbC5jCisrKyBiL21pc2Mvc2hlbGwuYwpAQCAtMSw2ICsxLDggQEAKIC8qCiAgKiAJCQkJU2hlbGwgTGlicmFyeSBGdW5jdGlvbnMKICAqCisgKiAgMTk5OCBNYXJjdXMgTWVpc3NuZXIKKyAqICAxOTk4IEp1ZXJnZW4gU2NobWllZCAoanNjaCkKICAqICBjdXJyZW50bHkgd29yayBpbiBwcm9ncmVzcyBvbiBTSCogYW5kIFNIRUxMMzJfRGxsR2V0Q2xhc3NPYmplY3QgZnVuY3Rpb25zCiAgKiAgPGNvbnRhY3QganVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlIDk4MDYyND4KICAqLwpAQCAtMjcsMTIgKzI5LDE4IEBACiAjaW5jbHVkZSAiZGVidWcuaCIKICNpbmNsdWRlICJ3aW5yZWcuaCIKIAorLyogRklYTUUgc2hvdWxkIGJlIG1vdmVkIHRvIGEgaGVhZGVyIGZpbGUuIElzRXF1YWxHVUlEIAoraXMgZGVjbGFyZWQgYnV0IG5vdCBleHBvcnRlZCBpbiBjb21wb2JqLmMgISEhKi8KKyNkZWZpbmUgSXNFcXVhbEdVSUQocmd1aWQxLCByZ3VpZDIpICghbWVtY21wKHJndWlkMSwgcmd1aWQyLCBzaXplb2YoR1VJRCkpKQorI2RlZmluZSBJc0VxdWFsSUlEKHJpaWQxLCByaWlkMikgSXNFcXVhbEdVSUQocmlpZDEsIHJpaWQyKQorI2RlZmluZSBJc0VxdWFsQ0xTSUQocmNsc2lkMSwgcmNsc2lkMikgSXNFcXVhbEdVSUQocmNsc2lkMSwgcmNsc2lkMikKKwogc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBTSEVMTF9QZW9wbGVbXSA9CiB7CiAgICAgIkJvYiBBbXN0YWR0IiwKICAgICAiRGFnIEFzaGVpbSIsCiAgICAgIk1hcnRpbiBBeW90dGUiLAotICAgICJLYXJsIEJhY2tzdHJcMzY2bSIsCisgICAgIkthcmwgQmFja3N0cvZtIiwKICAgICAiUGV0ZXIgQmFqdXN6IiwKICAgICAiTWFyY2VsIEJhdXIiLAogICAgICJHZW9yZyBCZXllcmxlIiwKQEAgLTgxLDYgKzg5LDcgQEAKICAgICAiUGF2ZWwgS2Fua292c2t5IiwKICAgICAiSm9jaGVuIEthcnJlciIsCiAgICAgIkFuZHJlYXMgS2lyc2NoYmF1bSIsCisgICAgIlJlaW4gS2xhemVzIiwKICAgICAiQWxicmVjaHQgS2xlaW5lIiwKICAgICAiRXJpYyBLb2hsIiwKICAgICAiSm9uIEtvbnJhdGgiLApAQCAtOTAsNiArOTksNyBAQAogICAgICJTY290dCBBLiBMYWlyZCIsCiAgICAgIkRhdmlkIExlZSBMYW1iZXJ0IiwKICAgICAiQW5kcmV3IExld3lja3kiLAorICAgICJQZXIgTGluZHN0cvZtIiwKICAgICAiTWFydGluIHZvbiBMb2V3aXMiLAogICAgICJNaWNoaWVsIHZhbiBMb29uIiwKICAgICAiS2VubmV0aCBNYWNEb25hbGQiLApAQCAtMTI2LDYgKzEzNiw3IEBACiAgICAgIlBldGVyIFNjaGxhaWxlIiwKICAgICAiVWxyaWNoIFNjaG1pZCIsCiAgICAgIkJlcm5kIFNjaG1pZHQiLAorICAgICJKdWVyZ2VuIFNjaG1pZWQiLAogICAgICJJbmdvIFNjaG5laWRlciIsCiAgICAgIlZpY3RvciBTY2huZWlkZXIiLAogICAgICJZbmd2aSBTaWd1cmpvbnNzb24iLApAQCAtMTU3NCw2NSArMTU4NSw4OCBAQAogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoJCQkgU0hFTEwzMl9EbGxHZXRDbGFzc09iamVjdCAgIFtTSEVMTDMyLjE0XQorICogU0hFTEwzMl9EbGxHZXRDbGFzc09iamVjdCAgIFtTSEVMTDMyLjEyOF0KICAqCi0gKiBodHRwOi8vcHJlbWl1bS5taWNyb3NvZnQuY29tL21zZG4vbGlicmFyeS9zZGtkb2MvYXBpMl80OGZvLmh0bQorICogW1N0YW5kYXJ0IE9MRS9DT00gSW50ZXJmYWNlIE1ldGhvZF0KKyAqIFRoaXMgRnVuY3Rpb24gcmV0cml2ZXMgdGhlIHBvaW50ZXIgdG8gYSBzcGVjaWZpZWQgaW50ZXJmYWNlIChpaWQpIG9mCisgKiBhIGdpdmVuIGNsYXNzIChyY2xzaWQpLgorICogV2l0aCB0aGlzIHBvaW50ZXIgaXQncyBwb3NzaWJsZSB0byBjYWxsIHRoZSBJQ2xhc3NGYWN0b3J5X0NyZWF0ZUluc3RhbmNlCisgKiBtZXRob2QgdG8gZ2V0IGEgaW5zdGFuY2Ugb2YgdGhlIHJlcXVlc3RlZCBDbGFzcy4KKyAqIFRoaXMgZnVuY3Rpb24gZG9lcyBOT1QgaW5zdGFudGlhdGUgdGhlIENsYXNzISEhCisgKiAKKyAqIFJFVFVSTlMKKyAqICAgSFJFU1VMVAorICoKICAqLwogRFdPUkQgV0lOQVBJIFNIRUxMMzJfRGxsR2V0Q2xhc3NPYmplY3QoUkVGQ0xTSUQgcmNsc2lkLFJFRklJRCBpaWQsTFBWT0lEICpwcHYpCi17Ci0gICAgY2hhcgl4Y2xzaWRbNTBdLHhpaWRbNTBdOwotICAgIEhSRVNVTFQJaHJlcyA9IEVfT1VUT0ZNRU1PUlk7Cit7IEhSRVNVTFQJaHJlcyA9IEVfT1VUT0ZNRU1PUlk7CisgIExQQ0xBU1NGQUNUT1JZIGxwY2xmOwogCisgIGNoYXIJeGNsc2lkWzUwXSx4aWlkWzUwXTsKKyAgV0lORV9TdHJpbmdGcm9tQ0xTSUQoKExQQ0xTSUQpcmNsc2lkLHhjbHNpZCk7CisgIFdJTkVfU3RyaW5nRnJvbUNMU0lEKChMUENMU0lEKWlpZCx4aWlkKTsKKyAgVFJBQ0Uoc2hlbGwsIlxuXHRDTFNJRDpcdCVzLFxuXHRJSUQ6XHQlc1xuIix4Y2xzaWQseGlpZCk7CisJCisgICpwcHYgPSBOVUxMOworCWlmKElzRXF1YWxDTFNJRChyY2xzaWQsICZDTFNJRF9TaGVsbERlc2t0b3ApfHwgCisJICAgSXNFcXVhbENMU0lEKHJjbHNpZCwgJkNMU0lEX1NoZWxsTGluaykpCisJeyBpZihJc0VxdWFsQ0xTSUQocmNsc2lkLCAmQ0xTSURfU2hlbGxEZXNrdG9wKSkgICAgICAvKmRlYnVnKi8KKwkgICAgVFJBQ0Uoc2hlbGwsInJlcXVlc3RlZCBDTFNJRF9TaGVsbERlc2t0b3BcbiIpOworCSAgaWYoSXNFcXVhbENMU0lEKHJjbHNpZCwgJkNMU0lEX1NoZWxsTGluaykpICAgICAgICAgLypkZWJ1ZyovCisJICAgIFRSQUNFKHNoZWxsLCJyZXF1ZXN0ZWQgQ0xTSURfU2hlbGxMaW5rXG4iKTsKIAotICAgIFdJTkVfU3RyaW5nRnJvbUNMU0lEKChMUENMU0lEKXJjbHNpZCx4Y2xzaWQpOwotICAgIFdJTkVfU3RyaW5nRnJvbUNMU0lEKChMUENMU0lEKWlpZCx4aWlkKTsKLSAgICBUUkFDRShzaGVsbCwiKCVzLCVzLCVwKVxuIix4Y2xzaWQseGlpZCxwcHYpOwotCi0gICAgKnBwdiA9IE5VTEw7Ci0vKiBTREsgZXhhbXBsZSBjb2RlIGxvb2tzIGxpa2UgdGhpczoKLSAqCi0gICAgSFJFU1VMVAlocmVzID0gRV9PVVRPRk1FTU9SWTsKLQotICAgICpwcHYgPSBOVUxMOwotICAgIENDbGFzc0ZhY3RvcnkgKnBDbGFzc0ZhY3RvcnkgPSBuZXcgQ0NsYXNzRmFjdG9yeShyY2xzaWQpOwotICAgIAotICAgIGlmIChwQ2xhc3NGYWN0b3J5KSB7Ci0gICAgCWhSZXMgPSBwQ2xhc3NGYWN0b3J5LT5RdWVyeUludGVyZmFjZShyaWlkLHBwdik7Ci0JCXBDbGFzc0ZhY3RvcnktPlJlbGVhc2UoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGhSZXM7Ci0gKgotICogVGhlIG1hZ2ljIG9mIHRoZSB3aG9sZSBzdHVmZiBpcyBzdGlsbCB1bmNsZWFyIHRvIG1lLCBzbyBqdXN0IGhhY2sgdG9nZXRoZXIgCi0gKiBzb21ldGhpbmcuICAgCi0gKi8KLSAgCi0gIGlmICghbWVtY21wKHJjbHNpZCwmQ0xTSURfU2hlbGxEZXNrdG9wLHNpemVvZihDTFNJRF9TaGVsbERlc2t0b3ApKSkKLQl7CVRSQUNFKHNoZWxsLCIgICByZXF1ZXN0ZWQgQ0xTSURfU2hlbGxEZXNrdG9wLCBjcmVhdGluZyBpdC5cbiIpOwotICAJKnBwdiA9IElTaGVsbEZvbGRlcl9Db25zdHJ1Y3RvcigpOwotLyoJCUZJWE1FKHNoZWxsLCJJbml0aWFsaXplIHRoaXMgZm9sZGVyIHRvIGJlIHRoZSBzaGVsbCBkZXNrdG9wIGZvbGRlclxuIikqLwotCQlyZXR1cm4gU19PSzsKKyAgICAvKiBmaXhtZTogdGhlIElDbGFzc0ZhY3RvcnlfQ29uc3RydWN0b3IgYXQgdGhlIG1vbWVudCBvbmx5IAorCQkgZm9yIHJjbHNpZD1DTFNJRF9TaGVsbERlc2t0b3AsIHNvIHdlIGdldCB0aGUgcmlnaHQgSW50ZXJmYWNlIChqc2NoKSovCisJICBscGNsZiA9IElDbGFzc0ZhY3RvcnlfQ29uc3RydWN0b3IoKTsKKyAgICBpZihscGNsZikKKyAgICB7IGhyZXMgPSBscGNsZi0+bHB2dGJsLT5mblF1ZXJ5SW50ZXJmYWNlKGxwY2xmLGlpZCwgcHB2KTsKKwkJICBscGNsZi0+bHB2dGJsLT5mblJlbGVhc2UobHBjbGYpOworCQl9CiAJfQotCi0JRklYTUUoc2hlbGwsICJjbHNpZCglcykgbm90IGZvdW5kLCByZXR1cm4gQ0xBU1NfRV9DTEFTU05PVEFWQUlMQUJMRS5cbiIseGNsc2lkKTsKLQkqcHB2PU5VTEw7Ci0JcmV0dXJuIENMQVNTX0VfQ0xBU1NOT1RBVkFJTEFCTEU7CisJZWxzZQorICB7IFdBUk4oc2hlbGwsICJjbHNpZCglcykgbm90IGluIGJ1aWxkaW4gU0hFTEwzMlxuIix4Y2xzaWQpOworICAgIGhyZXMgPSBDTEFTU19FX0NMQVNTTk9UQVZBSUxBQkxFOworCX0KKyAgVFJBQ0Uoc2hlbGwsIlJFVFVSTiBwb2ludGVyIHRvIGludGVyZmFjZTogJXBcbiIscHB2KTsKKyAgcmV0dXJuIGhyZXM7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgkJCSBTSEdldERlc2t0b3BGb2xkZXIJCVtTSEVMTDMyLjIxNl0KLSAqIHJldHVybnMgdGhlIGludGVyZmFjZSB0byB0aGUgc2hlbGwgZGVza3RvcCBmb2xkZXIuCisgKiAgU0hHZXREZXNrdG9wRm9sZGVyCQlbU0hFTEwzMi4yMTZdCisgKiAKKyAqICBTREsgaGVhZGVyIHdpbjk1L3NobG9iai5oOiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gY2FsbCBDb0NyZWF0ZUluc3RhbmNlIHdpdGgKKyAqICBDTFNJRF9TaGVsbERlc2t0b3AKKyAqICBDb0NyZWF0ZUluc3RhbmNlKENMU0lEX0Rlc2t0b3AsIE5VTEwsIENMU0NUWF9JTlBST0MsIElJRF9JU2hlbGxGb2xkZXIsICZwc2hmKTsKICAqCi0gKiBbU0RLIGhlYWRlciB3aW45NS9zaGxvYmouaDogVGhpcyBpcyBlcXVpdmFsZW50IHRvIGNhbGwgQ29DcmVhdGVJbnN0YW5jZSB3aXRoCi0gKiAgQ0xTSURfU2hlbGxEZXNrdG9wLgorICogUkVUVVJOUworICogICB0aGUgaW50ZXJmYWNlIHRvIHRoZSBzaGVsbCBkZXNrdG9wIGZvbGRlci4KICAqCi0gKiAgQ29DcmVhdGVJbnN0YW5jZShDTFNJRF9EZXNrdG9wLCBOVUxMLAotICogICAgICAgICAgICAgICAgICAgQ0xTQ1RYX0lOUFJPQywgSUlEX0lTaGVsbEZvbGRlciwgJnBzaGYpOwotICogXQotICogU28gd2hhdCB3ZSBhcmUgZG9pbmcgaXMgY3VycmVudGx5IHdyb25nLi4uLgogICovCi1EV09SRCBXSU5BUEkgU0hHZXREZXNrdG9wRm9sZGVyKExQU0hFTExGT0xERVIgKnNoZWxsZm9sZGVyKSB7Ci0JKnNoZWxsZm9sZGVyID0gSVNoZWxsRm9sZGVyX0NvbnN0cnVjdG9yKCk7Ci0JcmV0dXJuIE5PRVJST1I7CitMUFNIRUxMRk9MREVSIHBkZXNrdG9wZm9sZGVyPU5VTEw7CisKK0RXT1JEIFdJTkFQSSBTSEdldERlc2t0b3BGb2xkZXIoTFBTSEVMTEZPTERFUiAqc2hlbGxmb2xkZXIpCit7IEhSRVNVTFQJaHJlcyA9IEVfT1VUT0ZNRU1PUlk7CisgIExQQ0xBU1NGQUNUT1JZIGxwY2xmOworCVRSQUNFKHNoZWxsLCIlcC0+KCVwKVxuIixzaGVsbGZvbGRlciwqc2hlbGxmb2xkZXIpOworCQorICBpZiAocGRlc2t0b3Bmb2xkZXIpCisJeyAqc2hlbGxmb2xkZXIgPSBwZGVza3RvcGZvbGRlcjsKKwkgIGhyZXMgPSBOT0VSUk9SOworCX0KKyAgZWxzZQorCXsgbHBjbGYgPSBJQ2xhc3NGYWN0b3J5X0NvbnN0cnVjdG9yKCk7CisgICAgLyogZml4bWU6IHRoZSBidWlsZGluIElDbGFzc0ZhY3RvcnlfQ29uc3RydWN0b3IgaXMgYXQgdGhlIG1vbWVudCBvbmx5IAorIAkJZm9yIHJjbHNpZD1DTFNJRF9TaGVsbERlc2t0b3AsIHNvIHdlIGdldCB0aGUgcmlnaHQgSW50ZXJmYWNlIChqc2NoKSovCisgICAgaWYobHBjbGYpCisgICAgeyBocmVzID0gbHBjbGYtPmxwdnRibC0+Zm5DcmVhdGVJbnN0YW5jZShscGNsZixOVUxMLChSRUZJSUQpJklJRF9JU2hlbGxGb2xkZXIsICh2b2lkKikmcGRlc2t0b3Bmb2xkZXIpOworCSAJICBscGNsZi0+bHB2dGJsLT5mblJlbGVhc2UobHBjbGYpOworCSAgfSAgCisJfQkKKwlpZiAocGRlc2t0b3Bmb2xkZXIpCisJeyAqc2hlbGxmb2xkZXIgPSBwZGVza3RvcGZvbGRlcjsJCisJfQorICBUUkFDRShzaGVsbCwiLS0gJXAtPiglcClcbiIsc2hlbGxmb2xkZXIsICpzaGVsbGZvbGRlcik7CisJcmV0dXJuIGhyZXM7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xNjQ1LDYxICsxNjc5LDk1IEBACiAgKiBXaGF0IHdlIGFyZSBjdXJyZW50bHkgZG9pbmcgaXMgbm90IHZlcnkgd3JvbmcsIHNpbmNlIHdlIGFsd2F5cyB1c2UgdGhlIHNhbWUKICAqIGhlYXAgKFByb2Nlc3NIZWFwKS4KICAqLwotRFdPUkQgV0lOQVBJIFNIR2V0TWFsbG9jKExQTUFMTE9DMzIgKmxwbWFsKSB7Ci0JVFJBQ0Uoc2hlbGwsIiglcClcbiIsIGxwbWFsKTsKK0RXT1JEIFdJTkFQSSBTSEdldE1hbGxvYyhMUE1BTExPQzMyICpscG1hbCkgCit7CVRSQUNFKHNoZWxsLCIoJXApXG4iLCBscG1hbCk7CiAJcmV0dXJuIENvR2V0TWFsbG9jMzIoMCxscG1hbCk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgkJCSBTSEdldFNwZWNpYWxGb2xkZXJMb2NhdGlvbglbU0hFTEwzMi4yMjNdCi0gKiByZXR1cm5zIHRoZSBQSURMIG9mIGEgc3BlY2lhbCBmb2xkZXIKKyAqICBuRm9sZGVyIGlzIGEgQ1NJRExfeHh4eHguCiAgKgotICogbkZvbGRlciBpcyBhIENTSURMX3h4eHh4LgorICogUkVUVVJOUworICogICAgcmV0dXJucyB0aGUgUElETCBvZiBhIHNwZWNpYWwgZm9sZGVyCisgKgorICogRklYTUUKKyAqICAgdGhlIHBhdGggaXMgZXZlcnkgdGltZSB4Olxcd2luZG93c1xcZGVza3RvcAorICogICB3ZSBzaG91bGQgZ2V0IHRoZSBwYXRoJ3MgZnJvbSB0aGUgcmVnaXN0cnkKICAqLwotSFJFU1VMVCBXSU5BUEkgU0hHZXRTcGVjaWFsRm9sZGVyTG9jYXRpb24oSFdORDMyIGh3bmRPd25lciwgSU5UMzIgbkZvbGRlciwgTFBJVEVNSURMSVNUICogcHBpZGwpCi17CUZJWE1FKHNoZWxsLCIoJTA0eCwlZCwlcCksc3R1YiFcbiIsIGh3bmRPd25lcixuRm9sZGVyLHBwaWRsKTsKK0hSRVNVTFQgV0lOQVBJIFNIR2V0U3BlY2lhbEZvbGRlckxvY2F0aW9uKAorICAgIEhXTkQzMiBod25kT3duZXIsCisJCUlOVDMyIG5Gb2xkZXIsCisgICAgTFBJVEVNSURMSVNUICogcHBpZGwpCit7CUxQU0hFTExGT0xERVIgc2hlbGxmb2xkZXI7CisgIERXT1JEICBwY2hFYXRlbjsKKwlDSEFSICAgcHN6VGVtcFsyNTZdOworCUxQV1NUUiBscHN6RGlzcGxheU5hbWUgPSAoTFBXU1RSKSZwc3pUZW1wWzBdOworCQorICBGSVhNRShzaGVsbCwiKCUwNHgsJWQsJXApLHN0dWIhXG4iLCBod25kT3duZXIsbkZvbGRlcixwcGlkbCk7CiAKLQlzd2l0Y2ggKG5Gb2xkZXIpCi0JewljYXNlIENTSURMX0JJVEJVQ0tFVDoJCQkJCVRSQUNFIChzaGVsbCwibG9va2luZyBmb3IgUmVjeWNlbGVyXG4iKTsKLQkJCQkJCQkJCQkJCQkJCQkJYnJlYWs7Ci0JCWNhc2UgQ1NJRExfQ09OVFJPTFM6CQkJCSAgVFJBQ0UgKHNoZWxsLCJsb29raW5nIGZvciBDb250cm9sXG4iKTsKLQkJCQkJCQkJCQkJCQkJCQkJYnJlYWs7Ci0JCWNhc2UgQ1NJRExfREVTS1RPUDoJCQkgIAkJVFJBQ0UgKHNoZWxsLCJsb29raW5nIGZvciBEZXNrdG9wXG4iKTsKLQkJCQkJCQkJCQkJCQkJCQkJYnJlYWs7Ci0JCWNhc2UgQ1NJRExfREVTS1RPUERJUkVDVE9SWTogIFRSQUNFIChzaGVsbCwibG9va2luZyBmb3IgRGVza0RpclxuIik7Ci0JCQkJCQkJCQkJCQkJCQkJCWJyZWFrOwotCQljYXNlIENTSURMX0RSSVZFUzoJCQkgIAkJVFJBQ0UgKHNoZWxsLCJsb29raW5nIGZvciBEcml2ZXNcbiIpOwotCQkJCQkJCQkJCQkJCQkJCQlicmVhazsKLQkJY2FzZSBDU0lETF9GT05UUzoJCQkgIAkJCVRSQUNFIChzaGVsbCwibG9va2luZyBmb3IgRm9udHNcbiIpOwotCQkJCQkJCQkJCQkJCQkJCQlicmVhazsKLQkJY2FzZSBDU0lETF9ORVRIT09EOgkJCSAgCQlUUkFDRSAoc2hlbGwsImxvb2tpbmcgZm9yIE5ldGhvb2RcbiIpOwotCQkJCQkJCQkJCQkJCQkJCQlicmVhazsKLQkJY2FzZSBDU0lETF9ORVRXT1JLOgkJCSAgCQlUUkFDRSAoc2hlbGwsImxvb2tpbmcgZm9yIE5ldHdvcmtcbiIpOwotCQkJCQkJCQkJCQkJCQkJCQlicmVhazsKLQkJY2FzZSBDU0lETF9QRVJTT05BTDoJCQkgIAlUUkFDRSAoc2hlbGwsImxvb2tpbmcgZm9yIFBlcnNvbmFsXG4iKTsKLQkJCQkJCQkJCQkJCQkJCQkJYnJlYWs7Ci0JCWNhc2UgQ1NJRExfUFJJTlRFUlM6CQkJICAgIFRSQUNFIChzaGVsbCwibG9va2luZyBmb3IgUHJpbnRlcnNcbiIpOwotCQkJCQkJCQkJCQkJCQkJCQlicmVhazsKLQkJY2FzZSBDU0lETF9QUk9HUkFNUzoJCQkJICBUUkFDRSAoc2hlbGwsImxvb2tpbmcgZm9yIFByb2dyYW1tc1xuIik7Ci0JCQkJCQkJCQkJCQkJCQkJCWJyZWFrOwotCQljYXNlIENTSURMX1JFQ0VOVDoJCQkgIAkJVFJBQ0UgKHNoZWxsLCJsb29raW5nIGZvciBSZWNlbnRcbiIpOwotCQkJCQkJCQkJCQkJCQkJCQlicmVhazsKLQkJY2FzZSBDU0lETF9TRU5EVE86CQkJICAJCVRSQUNFIChzaGVsbCwibG9va2luZyBmb3IgU2VuZHRvXG4iKTsKLQkJCQkJCQkJCQkJCQkJCQkJYnJlYWs7Ci0JCWNhc2UgQ1NJRExfU1RBUlRNRU5VOgkJCSAgCVRSQUNFIChzaGVsbCwibG9va2luZyBmb3IgU3RhcnRtZW51XG4iKTsKLQkJCQkJCQkJCQkJCQkJCQkJYnJlYWs7Ci0JCWNhc2UgQ1NJRExfU1RBUlRVUDoJCQkgIAkJVFJBQ0UgKHNoZWxsLCJsb29raW5nIGZvciBTdGFydHVwXG4iKTsKLQkJCQkJCQkJCQkJCQkJCQkJYnJlYWs7Ci0JCWNhc2UgQ1NJRExfVEVNUExBVEVTOgkJCSAgCVRSQUNFIChzaGVsbCwibG9va2luZyBmb3IgVGVtcGxhdGVzXG4iKTsKLQkJCQkJCQkJCQkJCQkJCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6CQkJICAJCQkJCQkJRVJSIChzaGVsbCwidW5rbm93biBDU0lETFxuIik7Ci0JCQkJCQkJCQkJCQkJCQkJCWJyZWFrOworICBMb2NhbFRvV2lkZUNoYXIzMihscHN6RGlzcGxheU5hbWUsICJ4Olxcd2luZG93c1xcZGVza3RvcFxcIiwgMjU2KTsKKyAgCisJaWYgKFNIR2V0RGVza3RvcEZvbGRlcigmc2hlbGxmb2xkZXIpPT1TX09LKQorCXsgc2hlbGxmb2xkZXItPmxwdnRibC0+Zm5QYXJzZURpc3BsYXlOYW1lKHNoZWxsZm9sZGVyLGh3bmRPd25lciwKKwlOVUxMLGxwc3pEaXNwbGF5TmFtZSwmcGNoRWF0ZW4scHBpZGwsTlVMTCk7CiAJfQogCi0JKnBwaWRsID0gKExQSVRFTUlETElTVClIZWFwQWxsb2MoR2V0UHJvY2Vzc0hlYXAoKSwwLHNpemVvZihJVEVNSURMSVNUKSk7Ci0JKCpwcGlkbCktPm1raWQuY2IgPSAwOwkJLyp0aGUgZmlyc3QgSVRFTUlETElTVCovCisJc3dpdGNoIChuRm9sZGVyKQorCXsJY2FzZSBDU0lETF9CSVRCVUNLRVQ6CisgICAgICBUUkFDRSAoc2hlbGwsImxvb2tpbmcgZm9yIFJlY3ljZWxlclxuIik7CisgICAgICBicmVhazsKKwkJY2FzZSBDU0lETF9DT05UUk9MUzoKKyAgICAgIFRSQUNFIChzaGVsbCwibG9va2luZyBmb3IgQ29udHJvbFxuIik7CisgICAgICBicmVhazsKKwkJY2FzZSBDU0lETF9ERVNLVE9QOgorCQkgIFRSQUNFIChzaGVsbCwibG9va2luZyBmb3IgRGVza3RvcFxuIik7CisgICAgICBicmVhazsKKwkJY2FzZSBDU0lETF9ERVNLVE9QRElSRUNUT1JZOgorICAgICAgVFJBQ0UgKHNoZWxsLCJsb29raW5nIGZvciBEZXNrRGlyXG4iKTsKKyAgICAgIGJyZWFrOworCQljYXNlIENTSURMX0RSSVZFUzoKKyAgICAgIFRSQUNFIChzaGVsbCwibG9va2luZyBmb3IgRHJpdmVzXG4iKTsKKyAgICAgIGJyZWFrOworCQljYXNlIENTSURMX0ZPTlRTOgorICAgICAgVFJBQ0UgKHNoZWxsLCJsb29raW5nIGZvciBGb250c1xuIik7CisgICAgICBicmVhazsKKwkJY2FzZSBDU0lETF9ORVRIT09EOgorICAgICAgVFJBQ0UgKHNoZWxsLCJsb29raW5nIGZvciBOZXRob29kXG4iKTsKKyAgICAgIGJyZWFrOworCQljYXNlIENTSURMX05FVFdPUks6CisJCSAgVFJBQ0UgKHNoZWxsLCJsb29raW5nIGZvciBOZXR3b3JrXG4iKTsKKyAgICAgIGJyZWFrOworCQljYXNlIENTSURMX1BFUlNPTkFMOgorCQkgIFRSQUNFIChzaGVsbCwibG9va2luZyBmb3IgUGVyc29uYWxcbiIpOworICAgICAgYnJlYWs7CisJCWNhc2UgQ1NJRExfUFJJTlRFUlM6CisgICAgICBUUkFDRSAoc2hlbGwsImxvb2tpbmcgZm9yIFByaW50ZXJzXG4iKTsKKyAgICAgIGJyZWFrOworCQljYXNlIENTSURMX1BST0dSQU1TOgorICAgICAgVFJBQ0UgKHNoZWxsLCJsb29raW5nIGZvciBQcm9ncmFtbXNcbiIpOworICAgICAgYnJlYWs7CisJCWNhc2UgQ1NJRExfUkVDRU5UOgorICAgICAgVFJBQ0UgKHNoZWxsLCJsb29raW5nIGZvciBSZWNlbnRcbiIpOworICAgICAgYnJlYWs7CisJCWNhc2UgQ1NJRExfU0VORFRPOgorICAgICAgVFJBQ0UgKHNoZWxsLCJsb29raW5nIGZvciBTZW5kdG9cbiIpOworICAgICAgYnJlYWs7CisJCWNhc2UgQ1NJRExfU1RBUlRNRU5VOgorICAgICAgVFJBQ0UgKHNoZWxsLCJsb29raW5nIGZvciBTdGFydG1lbnVcbiIpOworICAgICAgYnJlYWs7CisJCWNhc2UgQ1NJRExfU1RBUlRVUDoKKwkJICBUUkFDRSAoc2hlbGwsImxvb2tpbmcgZm9yIFN0YXJ0dXBcbiIpOworICAgICAgYnJlYWs7CisJCWNhc2UgQ1NJRExfVEVNUExBVEVTOgorCQkgIFRSQUNFIChzaGVsbCwibG9va2luZyBmb3IgVGVtcGxhdGVzXG4iKTsKKyAgICAgIGJyZWFrOworCQlkZWZhdWx0OgorICAgICAgRVJSIChzaGVsbCwidW5rbm93biBDU0lETFxuIik7CisgICAgICBicmVhazsKKwl9CiAKLQlGSVhNRShzaGVsbCwgInJldHVybiBlbXB0eSBJVEVNSURMSVNUIG9ubHkgKHBpZGwgJXApXG4iLCpwcGlkbCk7CisJVFJBQ0Uoc2hlbGwsICItLSAobmV3IHBpZGwgJXApXG4iLCpwcGlkbCk7CiAKIAlyZXR1cm4gTk9FUlJPUjsKIH0KQEAgLTE3MDksOCArMTc3NywxNiBAQAogICogcmV0dXJucyB0aGUgcGF0aCBmcm9tIGEgcGFzc2VkIFBJREwuCiAgKi8KIEJPT0wzMiBXSU5BUEkgU0hHZXRQYXRoRnJvbUlETGlzdChMUENJVEVNSURMSVNUIHBpZGwsTFBTVFIgcHN6UGF0aCkgCi17CUZJWE1FKHNoZWxsLCIocGlkbCAlcCwlcCksc3R1YiwgcmV0dXJuaW5nIEU6XFxcXCBcbiIscGlkbCxwc3pQYXRoKTsKLQlzdHJjcHkocHN6UGF0aCwiRTpcXCIpOyAvKiBGSVhNRSAqLworeyBTVFJSRVQgbHBOYW1lOworCUxQU0hFTExGT0xERVIgc2hlbGxmb2xkZXI7CisJVFJBQ0Uoc2hlbGwsIihwaWRsPSVwLCVwKVxuIixwaWRsLHBzelBhdGgpOworCisJaWYgKFNIR2V0RGVza3RvcEZvbGRlcigmc2hlbGxmb2xkZXIpPT1TX09LKQorCXsgc2hlbGxmb2xkZXItPmxwdnRibC0+Zm5HZXREaXNwbGF5TmFtZU9mKHNoZWxsZm9sZGVyLHBpZGwsU0hHRE5fRk9SUEFSU0lORywmbHBOYW1lKTsKKwl9CisgIFdpZGVDaGFyVG9Mb2NhbDMyKHBzelBhdGgsIGxwTmFtZS51LnBPbGVTdHIsIE1BWF9QQVRIKTsKKwkvKiBmaXhtZSBmcmVlIHRoZSBvbGVzdHJpbmcqLworCVRSQUNFKHNoZWxsLCItLSAoJXMpXG4iLHBzelBhdGgpOwogCXJldHVybiBOT0VSUk9SOwogfQogCkBAIC0xNzIxLDE0ICsxNzk3LDI1IEBACiAKIERXT1JEIFdJTkFQSQogU0hIZWxwU2hvcnRjdXRzX1J1bkRMTCAoRFdPUkQgZHdBcmcxLCBEV09SRCBkd0FyZzIsIERXT1JEIGR3QXJnMywgRFdPUkQgZHdBcmc0KQoreyBGSVhNRSAoZXhlYywgIiglbHgsICVseCwgJWx4LCAlbHgpIGVtcHR5IHN0dWIhXG4iLAorCWR3QXJnMSwgZHdBcmcyLCBkd0FyZzMsIGR3QXJnNCk7CisKKyAgcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBTSExvYWRJblByb2MgW1NIRUxMMzIuMjI1XQorICoKKyAqLworCitEV09SRCBXSU5BUEkKK1NITG9hZEluUHJvYyAoRFdPUkQgZHdBcmcxKQogewotICAgIEZJWE1FIChleGVjLCAiKCVseCwgJWx4LCAlbHgsICVseCkgZW1wdHkgc3R1YiFcbiIsCi0JICAgZHdBcmcxLCBkd0FyZzIsIGR3QXJnMywgZHdBcmc0KTsKKyAgICBGSVhNRSAoc2hlbGwsICIoJWx4KSBlbXB0eSBzdHViIVxuIiwgZHdBcmcxKTsKIAogICAgIHJldHVybiAwOwogfQogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBTSEJyb3dzZUZvckZvbGRlckEgW1NIRUxMMzIuMjA5XQogICoKQEAgLTE3MzYsMTAgKzE4MjMsOCBAQAogCiBMUElURU1JRExJU1QgV0lOQVBJCiBTSEJyb3dzZUZvckZvbGRlcjMyQSAoTFBCUk9XU0VJTkZPMzJBIGxwYmkpCi17Ci0gICAgRklYTUUgKGV4ZWMsICIoJWx4KSBlbXB0eSBzdHViIVxuIiwgKERXT1JEKWxwYmkpOwotICAgIEZJWE1FIChleGVjLCAiKCVzKSBlbXB0eSBzdHViIVxuIiwgbHBiaS0+bHBzelRpdGxlKTsKLQotICAgIHJldHVybiBOVUxMOworeyBGSVhNRSAoc2hlbGwsICIoJWx4KSBlbXB0eSBzdHViIVxuIiwgKERXT1JEKWxwYmkpOworICBGSVhNRSAoc2hlbGwsICIoJXMpIGVtcHR5IHN0dWIhXG4iLCBscGJpLT5scHN6VGl0bGUpOworICByZXR1cm4gTlVMTDsKIH0KIApkaWZmIC0tZ2l0IGEvbWlzYy9zaGVsbG9yZC5jIGIvbWlzYy9zaGVsbG9yZC5jCmluZGV4IDQzMmU1Y2EuLjJmNmEzNDMgMTAwNjQ0Ci0tLSBhL21pc2Mvc2hlbGxvcmQuYworKysgYi9taXNjL3NoZWxsb3JkLmMKQEAgLTMxLDI0ICszMSwzMiBAQAogI2luY2x1ZGUgIndpbnJlZy5oIgogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoJIAkJIFNIRUxMMzJfMiAgIAkJCVtTSEVMTDMyLjJdCisgKiBTSENoYW5nZU5vdGlmeVJlZ2lzdGVyIFtTSEVMTDMyLjJdCiAgKi8KLURXT1JEIFdJTkFQSSBTSEVMTDMyXzIoSFdORDMyIGh3bmQsRFdPUkQgeDIsRFdPUkQgeDMsRFdPUkQgeDQsRFdPUkQgeDUsRFdPUkQgeDYpIHsKK0RXT1JEIFdJTkFQSQorU0hDaGFuZ2VOb3RpZnlSZWdpc3RlcihIV05EMzIgaHduZCxEV09SRCB4MixEV09SRCB4MyxEV09SRCB4NCxEV09SRCB4NSxEV09SRCB4NikgewogCUZJWE1FKHNoZWxsLCIoMHglMDR4LDB4JTA4bHgsMHglMDhseCwweCUwOGx4LDB4JTA4bHgsMHglMDhseCk6c3R1Yi5cbiIsCiAJCWh3bmQseDIseDMseDQseDUseDYKIAkpOwogCXJldHVybiAwOwogfQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoJIAkJIFNIRUxMMzJfMTYgICAJCQlbU0hFTEwzMi4xNl0KLSAqIGZpbmRfbGFzdGl0ZW1faW5faXRlbWlkbGlzdCgpCi0gKgotICogTk9URVMKLSAqICAgICBPcmlnaW5hbCBuYW1lOiBJTEZpbmRMYXN0IChleHBvcnRlZCBieSBvcmRpbmFsKQorICoJIAkJIElMR2V0RGlzcGxheU5hbWUJCQlbU0hFTEwzMi4xNV0KKyAqIGdldF9wYXRoX2Zyb21faXRlbWxpc3QoaXRlbWxpc3QscGF0aCk7ID8gbm90IHN1cmUuLi4KICAqLwotTFBTSElURU1JRCBXSU5BUEkgU0hFTEwzMl8xNihMUElURU1JRExJU1QgaWlsKSB7CitCT09MMzIgV0lOQVBJIElMR2V0RGlzcGxheU5hbWUoTFBDSVRFTUlETElTVCBpaWwsTFBTVFIgcGF0aCkgeworCUZJWE1FKHNoZWxsLCIoJXAsJXApLHN0dWIsIHJldHVybiBlOiFcbiIsaWlsLHBhdGgpOworCXN0cmNweShwYXRoLCJlOlxcIik7CisJcmV0dXJuIFRSVUU7Cit9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogSUxGaW5kTGFzdElEIFtTSEVMTDMyLjE2XQorICovCitMUFNISVRFTUlEIFdJTkFQSSBJTEZpbmRMYXN0SUQoTFBJVEVNSURMSVNUIGlpbCkgewogCUxQU0hJVEVNSUQJbGFzdHNpaSxzaWk7CiAKKyAgVFJBQ0Uoc2hlbGwsIiVwXG4iLGlpbCk7CiAJaWYgKCFpaWwpCiAJCXJldHVybiBOVUxMOwogCXNpaSA9ICYoaWlsLT5ta2lkKTsKQEAgLTYxLDEzICs2OSwxMCBAQAogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoJIAkJIFNIRUxMMzJfMjkgICAJCQlbU0hFTEwzMi4yOV0KLSAqIGlzX3Jvb3RkaXIoY29uc3QgY2hhcipwYXRoKQotICoKLSAqIE5PVEVTCi0gKiAgICAgT3JpZ2luYWwgTmFtZTogUGF0aElzUm9vdAorICogUGF0aElzUm9vdCBbU0hFTEwzMi4yOV0KICAqLwotQk9PTDMyIFdJTkFQSSBTSEVMTDMyXzI5KExQQ1NUUiB4KSB7CitCT09MMzIgV0lOQVBJIFBhdGhJc1Jvb3QoTFBDU1RSIHgpIHsKKyAgVFJBQ0Uoc2hlbGwsIiVzXG4iLHgpOwogCWlmICghc3RyY21wKHgrMSwiOlxcIikpCQkvKiAiWDpcIiAqLwogCQlyZXR1cm4gMTsKIAlpZiAoIXN0cmNtcCh4LCJcXCIpKQkJLyogIlwiICovCkBAIC04NiwyNSArOTEsMjQgQEAKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCSAJCSBTSEVMTDMyXzMwICAgCQkJW1NIRUxMMzIuMzBdCi0gKiBnZXRfcm9vdGRpcihjaGFyKnBhdGgsaW50IGRyaXZlKQotICoKLSAqIE5PVEVTCi0gKiAgICAgT3JpZ2luYWwgTmFtZTogUGF0aEJ1aWxkUm9vdAorICogUGF0aEJ1aWxkUm9vdCBbU0hFTEwzMi4zMF0KICAqLwotTFBTVFIgV0lOQVBJIFNIRUxMMzJfMzAoTFBTVFIgcm9vdCxCWVRFIGRyaXZlKSB7CitMUFNUUiBXSU5BUEkgUGF0aEJ1aWxkUm9vdChMUFNUUiByb290LEJZVEUgZHJpdmUpIHsKKyAgVFJBQ0Uoc2hlbGwsIiVwICVpXG4iLHJvb3QsIGRyaXZlKTsKIAlzdHJjcHkocm9vdCwiQTpcXCIpOwogCXJvb3RbMF0rPWRyaXZlOwogCXJldHVybiByb290OwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoJCQkJCVNIRUxMMzJfMzEgICAgICBbU0hFTEwzMi4zMV0KLSAqIHJldHVybnMgcG9pbnRlciB0byBsYXN0IC4gaW4gbGFzdCBwYXRoY29tcG9uZW50IG9yIGF0IFwwLgorICogUGF0aEZpbmRFeHRlbnNpb24gW1NIRUxMMzIuMzFdCisgKgorICogTk9URVMKKyAqICAgICByZXR1cm5zIHBvaW50ZXIgdG8gbGFzdCAuIGluIGxhc3QgcGF0aGNvbXBvbmVudCBvciBhdCBcMC4KICAqLwotTFBTVFIgV0lOQVBJIFNIRUxMMzJfMzEoTFBTVFIgcGF0aCkgewotICAgIExQU1RSICAgbGFzdHBvaW50ID0gTlVMTDsKLQorTFBTVFIgV0lOQVBJIFBhdGhGaW5kRXh0ZW5zaW9uKExQU1RSIHBhdGgpIHsKKyAgTFBTVFIgICBsYXN0cG9pbnQgPSBOVUxMOworICBUUkFDRShzaGVsbCwiJXAgJXNcbiIscGF0aCxwYXRoKTsKICAgICB3aGlsZSAoKnBhdGgpIHsKIAlpZiAoKnBhdGg9PSdcXCd8fCpwYXRoPT0nICcpCiAJICAgIGxhc3Rwb2ludD1OVUxMOwpAQCAtMTE2LDEyICsxMjAsMTQgQEAKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCQkJCVNIRUxMMzJfMzIJW1NIRUxMMzIuMzJdCi0gKiBhcHBlbmQgXCBpZiB0aGVyZSBpcyBub25lCisgKiBQYXRoQWRkQmFja3NsYXNoIFtTSEVMTDMyLjMyXQorICogCisgKiBOT1RFUworICogICAgIGFwcGVuZCBcIGlmIHRoZXJlIGlzIG5vbmUKICAqLwotTFBTVFIgV0lOQVBJIFNIRUxMMzJfMzIoTFBTVFIgcGF0aCkgeworTFBTVFIgV0lOQVBJIFBhdGhBZGRCYWNrc2xhc2goTFBTVFIgcGF0aCkgewogICAgIGludCBsZW47Ci0KKyAgVFJBQ0Uoc2hlbGwsIiVwLT4lc1xuIixwYXRoLHBhdGgpOwogICAgIGxlbiA9IGxzdHJsZW4zMkEocGF0aCk7CiAgICAgaWYgKGxlbiAmJiBwYXRoW2xlbi0xXSE9J1xcJykgewogICAgIAlwYXRoW2xlbiswXT0nXFwnOwpAQCAtMTMyLDEyICsxMzgsMTQgQEAKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCQkJCVNIRUxMMzJfMzMgICAgICBbU0hFTEwzMi4zM10KLSAqIHJlbW92ZSBzcGFjZXMgZnJvbSBiZWdpbm5pbmcgYW5kIGVuZCBvZiBwYXNzZWQgc3RyaW5nCisgKiBQYXRoUmVtb3ZlQmxhbmtzIFtTSEVMTDMyLjMzXQorICogCisgKiBOT1RFUworICogICAgIHJlbW92ZSBzcGFjZXMgZnJvbSBiZWdpbm5pbmcgYW5kIGVuZCBvZiBwYXNzZWQgc3RyaW5nCiAgKi8KLUxQU1RSIFdJTkFQSSBTSEVMTDMyXzMzKExQU1RSIHN0cikgeworTFBTVFIgV0lOQVBJIFBhdGhSZW1vdmVCbGFua3MoTFBTVFIgc3RyKSB7CiAgICAgTFBTVFIgeCA9IHN0cjsKLQorICBUUkFDRShzaGVsbCwiUGF0aFJlbW92ZUJsYW5rcyAlc1xuIixzdHIpOwogICAgIHdoaWxlICgqeD09JyAnKSB4Kys7CiAgICAgaWYgKHghPXN0cikKIAlsc3RyY3B5MzJBKHN0cix4KTsKQEAgLTE1MywxMiArMTYxLDE0IEBACiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCQkJCVNIRUxMMzJfMzQJW1NIRUxMMzIuMzRdCi0gKiBiYXNlbmFtZShjaGFyICpmbik7CisgKiBQYXRoRmluZEZpbGVuYW1lIFtTSEVMTDMyLjM0XQorICogCisgKiBOT1RFUworICogICAgIGJhc2VuYW1lKGNoYXIgKmZuKTsKICAqLwotTFBTVFIgV0lOQVBJIFNIRUxMMzJfMzQoTFBTVFIgZm4pIHsKK0xQU1RSIFdJTkFQSSBQYXRoRmluZEZpbGVuYW1lKExQU1RSIGZuKSB7CiAgICAgTFBTVFIgYmFzZWZuOwotCisgIFRSQUNFKHNoZWxsLCJQYXRoRmluZEZpbGVuYW1lICVzXG4iLGZuKTsKICAgICBiYXNlZm4gPSBmbjsKICAgICB3aGlsZSAoZm5bMF0pIHsKICAgICAJaWYgKCgoZm5bMF09PSdcXCcpIHx8IChmblswXT09JzonKSkgJiYgZm5bMV0gJiYgZm5bMV0hPSdcXCcpCkBAIC0xNjksMTYgKzE3OSwxOCBAQAogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoJIAkJIFNIRUxMMzJfMzUgICAJCQlbU0hFTEwzMi4zNV0KLSAqIGJvb2wgZ2V0cGF0aChjaGFyICpwYXRobmFtZSk7IHRydW5jYXRlcyBwYXNzZWQgYXJndW1lbnQgdG8gYSB2YWxpZCBwYXRoCi0gKiByZXR1cm5zIGlmIHRoZSBzdHJpbmcgd2FzIG1vZGlmaWVkIG9yIG5vdC4KLSAqICJcZm9vXHh4XGZvbyItPiAiXGZvb1x4eCIKLSAqICJcIgkJLT4gIlwiCi0gKiAiYTpcZm9vIgktPiAiYTpcIgorICogUGF0aFJlbW92ZUZpbGVTcGVjIFtTSEVMTDMyLjM1XQorICogCisgKiBOT1RFUworICogICAgIGJvb2wgZ2V0cGF0aChjaGFyICpwYXRobmFtZSk7IHRydW5jYXRlcyBwYXNzZWQgYXJndW1lbnQgdG8gYSB2YWxpZCBwYXRoCisgKiAgICAgcmV0dXJucyBpZiB0aGUgc3RyaW5nIHdhcyBtb2RpZmllZCBvciBub3QuCisgKiAgICAgIlxmb29ceHhcZm9vIi0+ICJcZm9vXHh4IgorICogICAgICJcIiAtPiAiXCIKKyAqICAgICAiYTpcZm9vIgktPiAiYTpcIgogICovCi1EV09SRCBXSU5BUEkgU0hFTEwzMl8zNShMUFNUUiBmbikgeworRFdPUkQgV0lOQVBJIFBhdGhSZW1vdmVGaWxlU3BlYyhMUFNUUiBmbikgewogCUxQU1RSCXgsY3V0cGxhY2U7Ci0KKyAgVFJBQ0Uoc2hlbGwsIiVzXG4iLGZuKTsKIAlpZiAoIWZuWzBdKQogCQlyZXR1cm4gMDsKIAl4PWZuOwpAQCAtMjExLDcxICsyMjMsODQgQEAKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCQkJCVNIRUxMMzJfMzcJW1NIRUxMMzIuMzddCi0gKiBjb25jYXRfcGF0aHMoY2hhcip0YXJnZXQsY29uc3QgY2hhciphZGQpOwotICogY29uY2F0cyAidGFyZ2V0XFxhZGQiIGFuZCB3cml0ZXMgdGhlbSB0byB0YXJnZXQKKyAqIFBhdGhDb21iaW5lIFtTSEVMTDMyLjM3XQorICogCisgKiBOT1RFUworICogICAgIGNvbmNhdF9wYXRocyhjaGFyKnRhcmdldCxjb25zdCBjaGFyKmFkZCk7CisgKiAgICAgY29uY2F0cyAidGFyZ2V0XFxhZGQiIGFuZCB3cml0ZXMgdGhlbSB0byB0YXJnZXQKICAqLwotTFBTVFIgV0lOQVBJIFNIRUxMMzJfMzcoTFBTVFIgdGFyZ2V0LExQU1RSIHgxLExQU1RSIHgyKSB7CitMUFNUUiBXSU5BUEkgUGF0aENvbWJpbmUoTFBTVFIgdGFyZ2V0LExQU1RSIHgxLExQU1RSIHgyKSB7CiAJY2hhcglidWZbMjYwXTsKLQorICBUUkFDRShzaGVsbCwiJXMgJXNcbiIseDEseDIpOwogCWlmICgheDIgfHwgIXgyWzBdKSB7CiAJCWxzdHJjcHkzMkEodGFyZ2V0LHgxKTsKIAkJcmV0dXJuIHRhcmdldDsKIAl9CiAJbHN0cmNweTMyQShidWYseDEpOwotCVNIRUxMMzJfMzIoYnVmKTsgLyogYXBwZW5kIFwgaWYgbm90IHRoZXJlICovCisJUGF0aEFkZEJhY2tzbGFzaChidWYpOyAvKiBhcHBlbmQgXCBpZiBub3QgdGhlcmUgKi8KIAlsc3RyY2F0MzJBKGJ1Zix4Mik7CiAJbHN0cmNweTMyQSh0YXJnZXQsYnVmKTsKIAlyZXR1cm4gdGFyZ2V0OwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoJCQkJU0hFTEwzMl8zNglbU0hFTEwzMi4zNl0KLSAqIGNvbmNhdF9wYXRocyhjaGFyKnRhcmdldCxjb25zdCBjaGFyKmFkZCk7Ci0gKiBjb25jYXRzICJ0YXJnZXRcXGFkZCIgYW5kIHdyaXRlcyB0aGVtIHRvIHRhcmdldAorICogUGF0aEFwcGVuZCBbU0hFTEwzMi4zNl0KKyAqIAorICogTk9URVMKKyAqICAgICBjb25jYXRfcGF0aHMoY2hhcip0YXJnZXQsY29uc3QgY2hhciphZGQpOworICogICAgIGNvbmNhdHMgInRhcmdldFxcYWRkIiBhbmQgd3JpdGVzIHRoZW0gdG8gdGFyZ2V0CiAgKi8KLUxQU1RSIFdJTkFQSSBTSEVMTDMyXzM2KExQU1RSIHgxLExQU1RSIHgyKSB7CitMUFNUUiBXSU5BUEkgUGF0aEFwcGVuZChMUFNUUiB4MSxMUFNUUiB4MikgeworICBUUkFDRShzaGVsbCwiJXMgJXNcbiIseDEseDIpOwogCXdoaWxlICh4MlswXT09J1xcJykgeDIrKzsKLQlyZXR1cm4gU0hFTEwzMl8zNyh4MSx4MSx4Mik7CisJcmV0dXJuIFBhdGhDb21iaW5lKHgxLHgxLHgyKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCQkJCVNIRUxMMzJfMzkJW1NIRUxMMzIuMzldCi0gKiBpc1VOQyhjb25zdCBjaGFyKnBhdGgpOworICogUGF0aElzVU5DIFtTSEVMTDMyLjM5XQorICogCisgKiBOT1RFUworICogICAgIGlzVU5DKGNvbnN0IGNoYXIqcGF0aCk7CiAgKi8KLUJPT0wzMiBXSU5BUEkgU0hFTEwzMl8zOShMUENTVFIgcGF0aCkgeworQk9PTDMyIFdJTkFQSSBQYXRoSXNVTkMoTFBDU1RSIHBhdGgpIHsKKyAgVFJBQ0Uoc2hlbGwsIiVzXG4iLHBhdGgpOwogCWlmICgocGF0aFswXT09J1xcJykgJiYgKHBhdGhbMV09PSdcXCcpKQogCQlyZXR1cm4gVFJVRTsKIAlyZXR1cm4gRkFMU0U7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgkJCQlTSEVMTDMyXzQ1CVtTSEVMTDMyLjQ1XQotICogZmlsZV9leGlzdHMoY2hhciAqZm4pOworICogUGF0aEZpbGVFeGlzdHMgW1NIRUxMMzIuNDVdCisgKiAKKyAqIE5PVEVTCisgKiAgICAgZmlsZV9leGlzdHMoY2hhciAqZm4pOwogICovCi1CT09MMzIgV0lOQVBJIFNIRUxMMzJfNDUoTFBTVFIgZm4pIHsKLSAgICBpZiAoR2V0RmlsZUF0dHJpYnV0ZXMzMkEoZm4pPT0tMSkKK0JPT0wzMiBXSU5BUEkgUGF0aEZpbGVFeGlzdHMoTFBTVFIgZm4pIHsKKyAgVFJBQ0Uoc2hlbGwsIiVzXG4iLGZuKTsKKyAgIGlmIChHZXRGaWxlQXR0cmlidXRlczMyQShmbik9PS0xKQogICAgIAlyZXR1cm4gRkFMU0U7CiAgICAgZWxzZQogICAgIAlyZXR1cm4gVFJVRTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCQkJCVNIRUxMMzJfNTEJW1NIRUxMMzIuNTFdCisgKiBQYXRoUmVzb2x2ZSBbU0hFTEwzMi41MV0KICAqLwotRFdPUkQgV0lOQVBJIFNIRUxMMzJfNTEoTFBDU1RSIHMsRFdPUkQgeDIsRFdPUkQgeDMpIHsKK0RXT1JEIFdJTkFQSSBQYXRoUmVzb2x2ZShMUENTVFIgcyxEV09SRCB4MixEV09SRCB4MykgewogCUZJWE1FKHNoZWxsLCIoJXMsMHglMDhseCwweCUwOGx4KSxzdHViIVxuIixzLHgyLHgzKTsKIAlyZXR1cm4gMDsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCQkJCVNIRUxMMzJfNTIJW1NIRUxMMzIuNTJdCi0gKiBsb29rIGZvciBuZXh0IGFyZyBpbiBzdHJpbmcuIGhhbmRsZSAicXVvdGVkIiBzdHJpbmdzCi0gKiByZXR1cm5zIHBvaW50ZXIgdG8gYXJndW1lbnQgKkFGVEVSKiB0aGUgc3BhY2UuIE9yIHRvIHRoZSBcMC4KKyAqIFBhdGhHZXRBcmdzIFtTSEVMTDMyLjUyXQorICoKKyAqIE5PVEVTCisgKiAgICAgbG9vayBmb3IgbmV4dCBhcmcgaW4gc3RyaW5nLiBoYW5kbGUgInF1b3RlZCIgc3RyaW5ncworICogICAgIHJldHVybnMgcG9pbnRlciB0byBhcmd1bWVudCAqQUZURVIqIHRoZSBzcGFjZS4gT3IgdG8gdGhlIFwwLgogICovCi1MUFNUUiBXSU5BUEkgU0hFTEwzMl81MihMUFNUUiBjbWRsaW5lKSB7CitMUFNUUiBXSU5BUEkgUGF0aEdldEFyZ3MoTFBTVFIgY21kbGluZSkgewogICAgIEJPT0wzMglxZmxhZyA9IEZBTFNFOwotCisgIFRSQUNFKHNoZWxsLCIlc1xuIixjbWRsaW5lKTsKICAgICB3aGlsZSAoKmNtZGxpbmUpIHsKICAgICAJaWYgKCgqY21kbGluZT09JyAnKSAmJiAhcWZsYWcpCiAJCXJldHVybiBjbWRsaW5lKzE7CkBAIC0yODcsMTIgKzMxMiwxNCBAQAogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoJCQkJU0hFTEwzMl81NiAgICAgIFtTSEVMTDMyLjU2XQotICogdW5xdW90ZSBzdHJpbmcgKHJlbW92ZSAiKQorICogUGF0aFVucXVvdGVTcGFjZXMgW1NIRUxMMzIuNTZdCisgKiAKKyAqIE5PVEVTCisgKiAgICAgdW5xdW90ZSBzdHJpbmcgKHJlbW92ZSAiKQogICovCi1WT0lEIFdJTkFQSSBTSEVMTDMyXzU2KExQU1RSIHN0cikgeworVk9JRCBXSU5BUEkgUGF0aFVucXVvdGVTcGFjZXMoTFBTVFIgc3RyKSB7CiAgICAgRFdPUkQgICAgICBsZW4gPSBsc3RybGVuMzJBKHN0cik7Ci0KKyAgICBUUkFDRShzaGVsbCwiJXNcbiIsc3RyKTsKICAgICBpZiAoKnN0ciE9JyInKSByZXR1cm47CiAgICAgaWYgKHN0cltsZW4tMV0hPSciJykgcmV0dXJuOwogICAgIHN0cltsZW4tMV09J1wwJzsKQEAgLTMwMSw5ICszMjgsMTAgQEAKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCSAJCSBTSEVMTDMyXzU4ICAgCQkJW1NIRUxMMzIuNThdCisgKiBQYXJzZUZpZWxkIFtTSEVMTDMyLjU4XQorICoKICAqLwotRFdPUkQgV0lOQVBJIFNIRUxMMzJfNTgoTFBDU1RSIHNyYyxEV09SRCB4MixMUFNUUiB0YXJnZXQsRFdPUkQgcGF0aGxlbikgeworRFdPUkQgV0lOQVBJIFBhcnNlRmllbGQoTFBDU1RSIHNyYyxEV09SRCB4MixMUFNUUiB0YXJnZXQsRFdPUkQgcGF0aGxlbikgewogCUZJWE1FKHNoZWxsLCIoJXMsMHglMDhseCwlcCwlbGQpOnN0dWIuXG4iLAogCQlzcmMseDIsdGFyZ2V0LHBhdGhsZW4KIAkpOwpAQCAtMzEzLDE3ICszNDEsMTkgQEAKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCSAJCSBTSEVMTDMyXzYyICAgCQkJW1NIRUxMMzIuNjJdCisgKiBQaWNrSWNvbkRsZyBbU0hFTEwzMi42Ml0KKyAqIAogICovCi1EV09SRCBXSU5BUEkgU0hFTEwzMl82MihEV09SRCB4LERXT1JEIHksRFdPUkQgeixEV09SRCBhKSB7CitEV09SRCBXSU5BUEkgUGlja0ljb25EbGcoRFdPUkQgeCxEV09SRCB5LERXT1JEIHosRFdPUkQgYSkgewogCUZJWE1FKHNoZWxsLCIoJTA4bHgsJTA4bHgsJTA4bHgsJTA4bHgpOnN0dWIuXG4iLHgseSx6LGEpOwogCXJldHVybiAweGZmZmZmZmZmOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgICAgICAgICAgICAgU0hFTEwzMl82MyAgICAgICAgICAgICAgICAgICAgIFtTSEVMTDMyLjYzXQorICogR2V0RmlsZU5hbWVGcm9tQnJvd3NlIFtTSEVMTDMyLjYzXQorICogCiAgKi8KLURXT1JEIFdJTkFQSSBTSEVMTDMyXzYzKEhXTkQzMiBob3duZXIsIExQU1RSIHRhcmdldGJ1ZiwgRFdPUkQgbGVuLCBEV09SRCB4LCBMUENTVFIgc3VmZml4LCBMUENTVFIgeSwgTFBDU1RSIGNtZCkgeworRFdPUkQgV0lOQVBJIEdldEZpbGVOYW1lRnJvbUJyb3dzZShIV05EMzIgaG93bmVyLCBMUFNUUiB0YXJnZXRidWYsIERXT1JEIGxlbiwgRFdPUkQgeCwgTFBDU1RSIHN1ZmZpeCwgTFBDU1RSIHksIExQQ1NUUiBjbWQpIHsKICAgICBGSVhNRShzaGVsbCwiKCUwNHgsJXAsJWxkLCUwOGx4LCVzLCVzLCVzKTpzdHViLlxuIiwKIAkgICAgaG93bmVyLHRhcmdldGJ1ZixsZW4seCxzdWZmaXgseSxjbWQKICAgICApOwpAQCAtMzM0LDM2ICszNjQsNDIgQEAKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICAgICAgICAgICAgIFNIRUxMMzJfNjggICAgICAgICAgICAgICAgICAgICBbU0hFTEwzMi42OF0KKyAqIFNIR2V0U2V0dGluZ3MgW1NIRUxMMzIuNjhdCisgKiAKICAqLwotRFdPUkQgV0lOQVBJIFNIRUxMMzJfNjgoRFdPUkQgeCxEV09SRCB5LERXT1JEIHopIHsKK0RXT1JEIFdJTkFQSSBTSEdldFNldHRpbmdzKERXT1JEIHgsRFdPUkQgeSxEV09SRCB6KSB7CiAJRklYTUUoc2hlbGwsIigweCUwOGx4LDB4JTA4bHgsMHglMDhseCk6c3R1Yi5cbiIsCiAJCXgseSx6CiAJKTsKIAlyZXR1cm4gMDsKIH0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgkJCSBTSEVMTDMyXzcxICAgCQkJW1NIRUxMMzIuNzFdCi0gKiByZXR1cm5zIGludGVybmFsIHNoZWxsIHZhbHVlcyBpbiB0aGUgcGFzc2VkIHBvaW50ZXJzCisgKiBTaGVsbF9HZXRJbWFnZUxpc3QgW1NIRUxMMzIuNzFdCisgKiAKKyAqIE5PVEVTCisgKiAgICAgcmV0dXJucyBpbnRlcm5hbCBzaGVsbCB2YWx1ZXMgaW4gdGhlIHBhc3NlZCBwb2ludGVycwogICovCi1CT09MMzIgV0lOQVBJIFNIRUxMMzJfNzEoTFBEV09SRCB4LExQRFdPUkQgeSkgeworQk9PTDMyIFdJTkFQSSBTaGVsbF9HZXRJbWFnZUxpc3QoTFBEV09SRCB4LExQRFdPUkQgeSkgewogCiAJRklYTUUoc2hlbGwsIiglcCwlcCk6c3R1Yi5cbiIseCx5KTsKIAlyZXR1cm4gVFJVRTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCQkJIFNIRUxMMzJfNzIgICAJCQlbU0hFTEwzMi43Ml0KLSAqIGR1bm5vLiBzb21ldGhpbmcgd2l0aCBpY29ucworICogU2hlbGxfR2V0Q2FjaGVkSW1hZ2VJbmRleCBbU0hFTEwzMi43Ml0KKyAqCiAgKi8KLXZvaWQgV0lOQVBJIFNIRUxMMzJfNzIoTFBTVFIgeCxEV09SRCB5LERXT1JEIHopIHsKK3ZvaWQgV0lOQVBJIFNoZWxsX0dldENhY2hlZEltYWdlSW5kZXgoTFBTVFIgeCxEV09SRCB5LERXT1JEIHopIHsKIAlGSVhNRShzaGVsbCwiKCVzLCUwOGx4LCUwOGx4KTpzdHViLlxuIix4LHkseik7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgkJCSBTSEVMTDMyXzg5ICAgCQkJW1NIRUxMMzIuODldCisgKiBTSENsb25lU3BlY2lhbElETGlzdCBbU0hFTEwzMi44OV0KKyAqIAorICogTk9URVMKKyAqICAgICBleHBvcnRlZCBieSBvcmRpbmFsCiAgKi8KLURXT1JEIFdJTkFQSSBTSEVMTDMyXzg5KERXT1JEIHgxLERXT1JEIHgyLERXT1JEIHgzKSB7CitEV09SRCBXSU5BUEkgU0hDbG9uZVNwZWNpYWxJRExpc3QoRFdPUkQgeDEsRFdPUkQgeDIsRFdPUkQgeDMpIHsKIAlGSVhNRShzaGVsbCwiKDB4JTA4bHgsMHglMDhseCwweCUwOGx4KTpzdHViLlxuIiwKIAkJeDEseDIseDMKIAkpOwpAQCAtMzcxLDU4ICs0MDcsNzAgQEAKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCQkJCVNIRUxMMzJfMTE5CVtTSEVMTDMyLjExOV0KLSAqIHVua25vd24KKyAqIElzTEZORHJpdmUgW1NIRUxMMzIuMTE5XQorICogCisgKiBOT1RFUworICogICAgIGV4cG9ydGVkIGJ5IG9yZGluYWwgTmFtZQogICovCi12b2lkIFdJTkFQSSBTSEVMTDMyXzExOShMUFZPSUQgeCkgewordm9pZCBXSU5BUEkgSXNMRk5Ecml2ZShMUFZPSUQgeCkgewogICAgIEZJWE1FKHNoZWxsLCIoJXAoJXMpKTpzdHViLlxuIix4LChjaGFyICopeCk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgkJCQlTSEVMTDMyXzE3NQlbU0hFTEwzMi4xNzVdCi0gKiB1bmtub3duCisgKiBTSEdldFNwZWNpYWxGb2xkZXJQYXRoIFtTSEVMTDMyLjE3NV0KKyAqIAorICogTk9URVMKKyAqICAgICBleHBvcnRlZCBieSBvcmRpbmFsCiAgKi8KLXZvaWQgV0lOQVBJIFNIRUxMMzJfMTc1KERXT1JEIHgxLERXT1JEIHgyLERXT1JEIHgzLERXT1JEIHg0KSB7Cit2b2lkIFdJTkFQSSBTSEdldFNwZWNpYWxGb2xkZXJQYXRoKERXT1JEIHgxLERXT1JEIHgyLERXT1JEIHgzLERXT1JEIHg0KSB7CiAgICAgRklYTUUoc2hlbGwsIigweCUwOGx4LDB4JTA4bHgsMHglMDhseCwweCUwOGx4KTpzdHViLlxuIiwKICAgICAJeDEseDIseDMseDQKICAgICApOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoJCQkJU0hFTEwzMl8xODEJW1NIRUxMMzIuMTgxXQotICogdW5rbm93bgorICogUmVnaXN0ZXJTaGVsbEhvb2sgW1NIRUxMMzIuMTgxXQogICoKICAqIFBBUkFNUwogICogICAgICBod25kIFtJXSAgd2luZG93IGhhbmRsZQogICogICAgICB5ICAgIFtJXSAgZmxhZyA/Pz8/CiAgKgogICogTk9URVMKLSAqICAgICBPcmlnaW5hbCBuYW1lOiBSZWdpc3RlclNoZWxsSG9vayAoZXhwb3J0ZWQgYnkgb3JkaW5hbCkKKyAqICAgICBleHBvcnRlZCBieSBvcmRpbmFsCiAgKi8KLXZvaWQgV0lOQVBJIFNIRUxMMzJfMTgxKEhXTkQzMiBod25kLCBEV09SRCB5KSB7Ci0gICAgRklYTUUoc2hlbGwsIigweCUwOGx4LDB4JTA4eCk6c3R1Yi5cbiIsaHduZCx5KTsKK3ZvaWQgV0lOQVBJIFJlZ2lzdGVyU2hlbGxIb29rMzIoSFdORDMyIGh3bmQsIERXT1JEIHkpIHsKKyAgICBGSVhNRShzaGVsbCwiKDB4JTA4eCwweCUwOGx4KTpzdHViLlxuIixod25kLHkpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoJCQkJU0hFTEwzMl83NQlbU0hFTEwzMi43NV0KLSAqIHVua25vd24KKyAqIFBhdGhZZXRBbm90aGVyTWFrZVVuaXF1ZU5hbWUgW1NIRUxMMzIuNzVdCisgKiAKKyAqIE5PVEVTCisgKiAgICAgZXhwb3J0ZWQgYnkgb3JkaW5hbAogICovCi1CT09MMzIgV0lOQVBJIFNIRUxMMzJfNzUoTFBEV09SRCB4LExQRFdPUkQgeSkgeworQk9PTDMyIFdJTkFQSSBQYXRoWWV0QW5vdGhlck1ha2VVbmlxdWVOYW1lKExQRFdPUkQgeCxMUERXT1JEIHkpIHsKICAgICBGSVhNRShzaGVsbCwiKCVwLCVwKTpzdHViLlxuIix4LHkpOwogICAgIHJldHVybiBUUlVFOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoJIAkJIFNIRUxMMzJfNzcgICAJCQlbU0hFTEwzMi43N10KKyAqIFNITWFwUElETFRvU3lzdGVtSW1hZ2VMaXN0SW5kZXggW1NIRUxMMzIuNzddCisgKiAKKyAqIE5PVEVTCisgKiAgICAgZXhwb3J0ZWQgYnkgb3JkaW5hbAogICovCi1EV09SRCBXSU5BUEkgU0hFTEwzMl83NyhEV09SRCB4LERXT1JEIHksRFdPUkQgeikgeworRFdPUkQgV0lOQVBJCitTSE1hcFBJRExUb1N5c3RlbUltYWdlTGlzdEluZGV4KERXT1JEIHgsRFdPUkQgeSxEV09SRCB6KSB7CiAJRklYTUUoc2hlbGwsIiglMDhseCwlMDhseCwlMDhseCk6c3R1Yi5cbiIseCx5LHopOwogCXJldHVybiAwOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoJIAkJIFNIRUxMMzJfNzkgICAJCQlbU0hFTEwzMi43OV0KKyAqIAkgCQkgU0hFTEwzMl83OSAgIAkJCVtTSEVMTDMyLjc5XQogICogY3JlYXRlX2RpcmVjdG9yeV9hbmRfbm90aWZ5KC4uLikKKyAqIAorICogTk9URVMKKyAqIChpc24ndCBpdCBTdHJUb09sZVN0ck4gPz8/IGpzY2gpCiAgKi8KIERXT1JEIFdJTkFQSSBTSEVMTDMyXzc5KExQQ1NUUiBkaXIsTFBWT0lEIHh2b2lkKSB7CiAJVFJBQ0Uoc2hlbGwsIm1rZGlyICVzLCVwXG4iLGRpcix4dm9pZCk7CkBAIC00MzIsNiArNDgwLDkgQEAKIAlyZXR1cm4gVFJVRTsKIH0KIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKi8KIHR5cGVkZWYgRFdPUkQgKCogV0lOQVBJIEdldENsYXNzUHRyKShSRUZDTFNJRCxSRUZJSUQsTFBWT0lEKTsKIAogc3RhdGljIEdldENsYXNzUHRyIFNIX2ZpbmRfbW9kdWxlcHJvYyhMUFNUUiBkbGxuYW1lLEhNT0RVTEUzMiAqeGhtb2QsCkBAIC00NDEsNyArNDkyLDcgQEAKIAlGQVJQUk9DMzIJZGxsdW5sb2FkLG5hbWVwcm9jOwogCiAJaWYgKHhobW9kKSAqeGhtb2QgPSAwOwotCWlmICghc3RyY2FzZWNtcChTSEVMTDMyXzM0KGRsbG5hbWUpLCJzaGVsbDMyLmRsbCIpKQorCWlmICghc3RyY2FzZWNtcChQYXRoRmluZEZpbGVuYW1lKGRsbG5hbWUpLCJzaGVsbDMyLmRsbCIpKQogCQlyZXR1cm4gKEdldENsYXNzUHRyKVNIRUxMMzJfRGxsR2V0Q2xhc3NPYmplY3Q7CiAKIAlobW9kID0gTG9hZExpYnJhcnlFeDMyQShkbGxuYW1lLDAsTE9BRF9XSVRIX0FMVEVSRURfU0VBUkNIX1BBVEgpOwpAQCAtNDU4LDcgKzUwOSw5IEBACiAJLyogcmVnaXN0ZXIgdW5sb2FkYWJsZSBkbGwgd2l0aCB1bmxvYWRwcm9jIC4uLiAqLwogCXJldHVybiAoR2V0Q2xhc3NQdHIpbmFtZXByb2M7CiB9Ci0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICovCiBzdGF0aWMgRFdPUkQgU0hfZ2V0X2luc3RhbmNlKFJFRkNMU0lEIGNsc2lkLExQU1RSIGRsbG5hbWUsCiAJTFBWT0lECXVua25vd25vdXRlcixSRUZJSUQgcmVmaWlkLExQVk9JRCBpbnN0CiApIHsKQEAgLTQ2Niw2ICs1MTksOCBAQAogCURXT1JECQlocmVzOwogCUxQQ0xBU1NGQUNUT1JZCWNsYXNzZmFjOwogCisgIFRSQUNFKHNoZWxsLCIlc1xuIixkbGxuYW1lKTsKKwkKIAlkbGxnZXRjbGFzc29iID0gU0hfZmluZF9tb2R1bGVwcm9jKGRsbG5hbWUsTlVMTCwiRGxsR2V0Q2xhc3NPYmplY3QiKTsKIAlpZiAoIWRsbGdldGNsYXNzb2IpCiAJCXJldHVybiAweDgwMDcwMDAwfEdldExhc3RFcnJvcigpOwpAQCAtNDkwLDEwICs1NDUsMTIgQEAKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCQkJCVNIRUxMMzJfMTAyCVtTSEVMTDMyLjEwMl0KLSAqIHVua25vd24KKyAqIFNIQ29DcmVhdGVJbnN0YW5jZSBbU0hFTEwzMi4xMDJdCisgKiAKKyAqIE5PVEVTCisgKiAgICAgZXhwb3J0ZWQgYnkgb3JkaW5hbAogICovCi1MUkVTVUxUIFdJTkFQSSBTSEVMTDMyXzEwMigKK0xSRVNVTFQgV0lOQVBJIFNIQ29DcmVhdGVJbnN0YW5jZSgKIAlMUFNUUiBhY2xzaWQsQ0xTSUQgKmNsc2lkLExQVU5LTk9XTiB1bmtub3dub3V0ZXIsUkVGSUlEIHJlZmlpZCxMUFZPSUQgaW5zdAogKSB7CiAJY2hhcglidWZmZXJbMjU2XSx4Y2xzaWRbNDhdLHhpaWRbNDhdLHBhdGhbMjYwXSx0bW9kZWxbMTAwXTsKQEAgLTUxMCw5ICs1NjcsNyBAQAogCQkgICAgcmV0dXJuIDB4ODAwNDAxNTQ7CiAJCXN0cmNweSh4Y2xzaWQsYWNsc2lkKTsKIAl9Ci0JVFJBQ0Uoc2hlbGwsIiglcCwlcywlcCwlcywlcClcbiIsCi0JCWFjbHNpZCx4Y2xzaWQsdW5rbm93bm91dGVyLHhpaWQsaW5zdAotCSk7CisJVFJBQ0Uoc2hlbGwsIiglcCxcblx0U0lEOlx0JXMsJXAsXG5cdElJRDpcdCVzLCVwKVxuIixhY2xzaWQseGNsc2lkLHVua25vd25vdXRlcix4aWlkLGluc3QpOwogCiAJc3ByaW50ZihidWZmZXIsIkNMU0lEXFwlc1xcSW5Qcm9jU2VydmVyMzIiLHhjbHNpZCk7CiAJaWYgKFJlZ09wZW5LZXlFeDMyQShIS0VZX0NMQVNTRVNfUk9PVCxidWZmZXIsMCwweDAyMDAwMDAwLCZpbnByb2NrZXkpKQpAQCAtNTM5LDIxICs1OTQsMjMgQEAKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoJCQkgU0hFTEwzMl8xODMgICAJCQlbU0hFTEwzMi4xODNdCisgKiBTaGVsbE1lc3NhZ2VCb3hBIFtTSEVMTDMyLjE4M10KKyAqCiAgKiBGb3JtYXQgYW5kIG91dHB1dCBlcnJvcm1lc3NhZ2UuCiAgKgogICogTk9URVMKLSAqICAgICBPcmlnaW5hbCBuYW1lOiBTaGVsbE1lc3NhZ2VCb3hBCisgKiAgICAgZXhwb3J0ZWQgYnkgb3JkaW5hbAogICovCi12b2lkIF9fY2RlY2wgU0hFTEwzMl8xODMoSE1PRFVMRTMyIGhtb2QsSFdORDMyIGh3bmQsRFdPUkQgaWQsRFdPUkQgeCxEV09SRCB0eXBlLExQVk9JRCBhcmdsaXN0KSB7Cit2b2lkIF9fY2RlY2wKK1NoZWxsTWVzc2FnZUJveEEoSE1PRFVMRTMyIGhtb2QsSFdORDMyIGh3bmQsRFdPUkQgaWQsRFdPUkQgeCxEV09SRCB0eXBlLExQVk9JRCBhcmdsaXN0KSB7CiAJY2hhcglidWZbMTAwXSxidWYyWzEwMF0sKmJ1ZjM7CiAJTFBWT0lECWFyZ3MgPSAmYXJnbGlzdDsKIAogCWlmICghTG9hZFN0cmluZzMyQShobW9kLHgsYnVmLDEwMCkpCiAJCXN0cmNweShidWYsIkRlc2t0b3AiKTsKLQlMb2FkU3RyaW5nMzJBKGhtb2QsaWQsYnVmMiwxMDApOworLy8JTG9hZFN0cmluZzMyQShobW9kLGlkLGJ1ZjIsMTAwKTsKIAkvKiBGSVhNRTogdGhlIHZhcmFyZ3MgaGFuZGxpbmcgZG9lc24ndC4gKi8KLQlGb3JtYXRNZXNzYWdlMzJBKDB4NTAwLGJ1ZjIsMCwwLChMUFNUUikmYnVmMywyNTYsKExQRFdPUkQpJmFyZ3MpOworLy8JRm9ybWF0TWVzc2FnZTMyQSgweDUwMCxidWYyLDAsMCwoTFBTVFIpJmJ1ZjMsMjU2LChMUERXT1JEKSZhcmdzKTsKIAogCUZJWE1FKHNoZWxsLCIoJTA4bHgsJTA4bHgsJTA4bHgoJXMpLCUwOGx4KCVzKSwlMDhseCwlcCk6c3R1Yi5cbiIsCiAJCShEV09SRClobW9kLChEV09SRClod25kLGlkLGJ1ZjIseCxidWYsdHlwZSxhcmdsaXN0CkBAIC01NjMsNyArNjIwLDggQEAKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoJCQkgU0hFTEwzMl8xMDAgICAJCQlbU0hFTEwzMi4xMDBdCisgKiBTSFJlc3RyaWN0ZWQgW1NIRUxMMzIuMTAwXQorICoKICAqIHdhbGtzIHRocm91Z2ggcG9saWN5IHRhYmxlLCBxdWVyaWVzIDxhcHA+IGtleSwgPHR5cGU+IHZhbHVlLCByZXR1cm5zIAogICogcXVlcmllZCAoRFdPUkQpIHZhbHVlLgogICogezB4MDAwMDEsRXhwbG9yZXIsTm9SdW59CkBAIC01ODYsOCArNjQ0LDExIEBACiAgKiB7MHgyMDAwMCxFeHBsb3JlcixOb1N0YXJ0TWVudVN1YkZvbGRlcnN9CiAgKiB7MHg0MDAwMCxFeHBsb3JlcixNeURvY3NPbk5ldH0KICAqIHsweDgwMDAwLFdpbk9sZEFwcCxOb1JlYWxNb2RlfQorICoKKyAqIE5PVEVTCisgKiAgICAgZXhwb3J0ZWQgYnkgb3JkaW5hbAogICovCi1EV09SRCBXSU5BUEkgU0hFTEwzMl8xMDAoRFdPUkQgcG9sKSB7CitEV09SRCBXSU5BUEkgU0hSZXN0cmljdGVkIChEV09SRCBwb2wpIHsKIAlIS0VZCXhoa2V5OwogCiAJRklYTUUoc2hlbGwsIiglMDhseCk6c3R1Yi5cbiIscG9sKTsKQEAgLTU5NiwxNyArNjU3LDE4IEBACiAJLyogRklYTUU6IGRvIG5vdGhpbmcgZm9yIG5vdywganVzdCByZXR1cm4gMCAoPT0gImFsbG93ZWQiKSAqLwogCVJlZ0Nsb3NlS2V5KHhoa2V5KTsKIAlyZXR1cm4gMDsKLQkKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCSAJCSBTSEVMTDMyXzE1MiAgIAkJCVtTSEVMTDMyLjE1Ml0KLSAqIGl0ZW1saXN0X2xlbmd0aAorICogSUxHZXRTaXplIFtTSEVMTDMyLjE1Ml0KKyAqCisgKiBOT1RFUworICogICAgIGV4cG9ydGVkIGJ5IG9yZGluYWwKICAqLwotRFdPUkQgV0lOQVBJIFNIRUxMMzJfMTUyKExQSVRFTUlETElTVCBpaWwpIHsKK0RXT1JEIFdJTkFQSSBJTEdldFNpemUoTFBJVEVNSURMSVNUIGlpbCkgewogCUxQU0hJVEVNSUQJc2k7CiAJRFdPUkQJCWxlbjsKLQorCVRSQUNFKHNoZWxsLCIlcFxuIixpaWwpOwogCWlmICghaWlsKQogCQlyZXR1cm4gMDsKIAlzaSA9ICYoaWlsLT5ta2lkKTsKQEAgLTYxOSw5NiArNjgxLDExNCBAQAogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgICAgICAgICAgICAgU0hFTEwzMl8xNTggICAgICAgICAgICAgICAgICAgIFtTSEVMTDMyLjE1OF0KKyAqIFBhdGhHZXRFeHRlbnNpb24gW1NIRUxMMzIuMTU4XQorICoKKyAqIE5PVEVTCisgKiAgICAgZXhwb3J0ZWQgYnkgb3JkaW5hbAogICovCi1MUFNUUiBXSU5BUEkgU0hFTEwzMl8xNTgoTFBTVFIgcGF0aCxEV09SRCB5LERXT1JEIHopIHsKK0xQU1RSIFdJTkFQSSBQYXRoR2V0RXh0ZW5zaW9uKExQU1RSIHBhdGgsRFdPUkQgeSxEV09SRCB6KSB7CiAgICAgVFJBQ0Uoc2hlbGwsIiglcywlMDhseCwlMDhseClcbiIscGF0aCx5LHopOwotICAgIHBhdGggPSBTSEVMTDMyXzMxKHBhdGgpOworICAgIHBhdGggPSBQYXRoRmluZEV4dGVuc2lvbihwYXRoKTsKICAgICByZXR1cm4gKnBhdGg/KHBhdGgrMSk6cGF0aDsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCSAJCSBTSEVMTDMyXzE2NSAgIAkJCVtTSEVMTDMyLjE2NV0KLSAqIGNyZWF0ZV9wYXRoX2FuZF9ub3RpZnkoLi4uKQorICogU0hDcmVhdGVEaXJlY3RvcnkgW1NIRUxMMzIuMTY1XQorICoKKyAqIE5PVEVTCisgKiAgICAgZXhwb3J0ZWQgYnkgb3JkaW5hbAogICovCi1EV09SRCBXSU5BUEkgU0hFTEwzMl8xNjUoRFdPUkQgeCxMUENTVFIgcGF0aCkgeworRFdPUkQgV0lOQVBJIFNIQ3JlYXRlRGlyZWN0b3J5KERXT1JEIHgsTFBDU1RSIHBhdGgpIHsKKwlUUkFDRShzaGVsbCwiKCUwOGx4LCVzKTpzdHViLlxuIix4LHBhdGgpOworCWlmIChDcmVhdGVEaXJlY3RvcnkzMkEocGF0aCx4KSkKKwkJcmV0dXJuIFRSVUU7CisJLyogU0hDaGFuZ2VOb3RpZnkoOCwxLHBhdGgsMCk7ICovCisJcmV0dXJuIEZBTFNFOworI2lmIDAKIAlpZiAoU0hFTEwzMl83OShwYXRoLChMUFZPSUQpeCkpCiAJCXJldHVybiAwOwogCUZJWE1FKHNoZWxsLCIoJTA4bHgsJXMpOnN0dWIuXG4iLHgscGF0aCk7CiAJcmV0dXJuIDA7CisjZW5kaWYKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCSAJCSBTSEVMTDMyXzE5NSAgIAkJCVtTSEVMTDMyLjE5NV0KLSAqIGZyZWVfcHRyKCkgLSBmcmVlcyBtZW1vcnkgdXNpbmcgSU1hbGxvYworICogU0hGcmVlIFtTSEVMTDMyLjE5NV0KICAqCiAgKiBOT1RFUwotICogICAgIE9yaWdpbmFsIG5hbWU6IFNIRnJlZSAoZXhwb3J0ZWQgYnkgb3JkaW5hbCkKKyAqICAgICBmcmVlX3B0cigpIC0gZnJlZXMgbWVtb3J5IHVzaW5nIElNYWxsb2MKKyAqICAgICBleHBvcnRlZCBieSBvcmRpbmFsCiAgKi8KLURXT1JEIFdJTkFQSSBTSEVMTDMyXzE5NShMUFZPSUQgeCkgeworRFdPUkQgV0lOQVBJIFNIRnJlZShMUFZPSUQgeCkgeworICBUUkFDRShzaGVsbCwiJXBcbiIseCk7CiAJcmV0dXJuIExvY2FsRnJlZTMyKChIQU5ETEUzMil4KTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCSAJCSBTSEVMTDMyXzE5NiAgIAkJCVtTSEVMTDMyLjE5Nl0KLSAqIHZvaWQgKnRhc2tfYWxsb2MoRFdPUkQgbGVuKSwgdXNlcyBTSE1hbGxvYyBhbGxvY2F0b3IKKyAqIFNIQWxsb2MgW1NIRUxMMzIuMTk2XQorICoKKyAqIE5PVEVTCisgKiAgICAgdm9pZCAqdGFza19hbGxvYyhEV09SRCBsZW4pLCB1c2VzIFNITWFsbG9jIGFsbG9jYXRvcgorICogICAgIGV4cG9ydGVkIGJ5IG9yZGluYWwKICAqLwotTFBWT0lEIFdJTkFQSSBTSEVMTDMyXzE5NihEV09SRCBsZW4pIHsKK0xQVk9JRCBXSU5BUEkgU0hBbGxvYyhEV09SRCBsZW4pIHsKKyAgVFJBQ0Uoc2hlbGwsIiVsdVxuIixsZW4pOwogCXJldHVybiAoTFBWT0lEKUxvY2FsQWxsb2MzMihsZW4sTE1FTV9aRVJPSU5JVCk7IC8qIEZJWE1FICovCiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgkgCQkgU0hFTEwzMl8xOCAgIAkJCVtTSEVMTDMyLjE4XQotICogY29weV9pdGVtaWRsaXN0KCkKKyAqIElMQ2xvbmUgW1NIRUxMMzIuMThdCisgKgogICovCi1MUElURU1JRExJU1QgV0lOQVBJIFNIRUxMMzJfMTgoTFBJVEVNSURMSVNUIGlpbCkgeworTFBJVEVNSURMSVNUIFdJTkFQSSBJTENsb25lIChMUElURU1JRExJU1QgaWlsKSB7CiAJRFdPUkQJCWxlbjsKIAlMUElURU1JRExJU1QJbmV3aWlsOwotCi0JbGVuID0gU0hFTEwzMl8xNTIoaWlsKTsKLQluZXdpaWwgPSAoTFBJVEVNSURMSVNUKVNIRUxMMzJfMTk2KGxlbik7CisgIFRSQUNFKHNoZWxsLCIlcFxuIixpaWwpOworCWxlbiA9IElMR2V0U2l6ZShpaWwpOworCW5ld2lpbCA9IChMUElURU1JRExJU1QpU0hBbGxvYyhsZW4pOwogCWlmIChuZXdpaWwpCiAJCW1lbWNweShuZXdpaWwsaWlsLGxlbik7CiAJcmV0dXJuIG5ld2lpbDsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCSAJCSBTSEVMTDMyXzI1ICAgCQkJW1NIRUxMMzIuMjVdCi0gKiBtZXJnZV9pdGVtaWRsaXN0KCkKKyAqIElMQ29tYmluZSBbU0hFTEwzMi4yNV0KKyAqCiAgKi8KLUxQSVRFTUlETElTVCBXSU5BUEkgU0hFTEwzMl8yNShMUElURU1JRExJU1QgaWlsMSxMUElURU1JRExJU1QgaWlsMikgeworTFBJVEVNSURMSVNUIFdJTkFQSSBJTENvbWJpbmUoTFBJVEVNSURMSVNUIGlpbDEsTFBJVEVNSURMSVNUIGlpbDIpIHsKIAlEV09SRAkJbGVuMSxsZW4yOwogCUxQSVRFTUlETElTVAluZXdpaWw7Ci0KLQlsZW4xIAk9IFNIRUxMMzJfMTUyKGlpbDEpLTI7Ci0JbGVuMgk9IFNIRUxMMzJfMTUyKGlpbDIpOwotCW5ld2lpbAk9IFNIRUxMMzJfMTk2KGxlbjErbGVuMik7CisJVFJBQ0Uoc2hlbGwsIiVwICVwXG4iLGlpbDEsaWlsMik7CisJbGVuMSAJPSBJTEdldFNpemUoaWlsMSktMjsKKwlsZW4yCT0gSUxHZXRTaXplKGlpbDIpOworCW5ld2lpbAk9IFNIQWxsb2MobGVuMStsZW4yKTsKIAltZW1jcHkobmV3aWlsLGlpbDEsbGVuMSk7CiAJbWVtY3B5KCgoY2hhciopbmV3aWlsKStsZW4xLGlpbDIsbGVuMik7CiAJcmV0dXJuIG5ld2lpbDsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCSAJCSBTSEVMTDMyXzE1NSAgIAkJCVtTSEVMTDMyLjE1NV0KLSAqIGZyZWVfY2hlY2tfcHRyIC0gZnJlZXMgbWVtb3J5IChpZiBub3QgTlVMTCkgYWxsb2NhdGVkIGJ5IFNITWFsbG9jIGFsbG9jYXRvcgorICogSUxGcmVlIFtTSEVMTDMyLjE1NV0KICAqCiAgKiBOT1RFUwotICogICAgIE9yaWdpbmFsIG5hbWU6IElMRnJlZSAoZXhwb3J0ZWQgYnkgb3JkaW5hbCkKKyAqICAgICBmcmVlX2NoZWNrX3B0ciAtIGZyZWVzIG1lbW9yeSAoaWYgbm90IE5VTEwpCisgKiAgICAgYWxsb2NhdGVkIGJ5IFNITWFsbG9jIGFsbG9jYXRvcgorICogICAgIGV4cG9ydGVkIGJ5IG9yZGluYWwKICAqLwotRFdPUkQgV0lOQVBJIFNIRUxMMzJfMTU1KExQVk9JRCB4KSB7CitEV09SRCBXSU5BUEkgSUxGcmVlKExQVk9JRCB4KSB7CiAJRklYTUUgKHNoZWxsLCIoMHglMDhseCk6c3R1Yi5cbiIsIChEV09SRCl4KTsKLS8vCWlmICgheCkKKwlpZiAoIXgpCiAJCXJldHVybiAwOwotLy8JcmV0dXJuIFNIRUxMMzJfMTk1KHgpOworCXJldHVybiBTSEZyZWUoeCk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBTSEVMTDMyXzg1IFtTSEVMTDMyLjg1XQorICogT3BlblJlZ1N0cmVhbSBbU0hFTEwzMi44NV0KICAqCiAgKiBOT1RFUwotICogICAgIE9yaWdpbmFsIG5hbWU6IE9wZW5SZWdTdHJlYW0gKGV4cG9ydGVkIGJ5IG9yZGluYWwpCisgKiAgICAgZXhwb3J0ZWQgYnkgb3JkaW5hbAogICovCi1EV09SRCBXSU5BUEkgU0hFTEwzMl84NShEV09SRCB4MSxEV09SRCB4MixEV09SRCB4MyxEV09SRCB4NCkgeworRFdPUkQgV0lOQVBJIE9wZW5SZWdTdHJlYW0oRFdPUkQgeDEsRFdPUkQgeDIsRFdPUkQgeDMsRFdPUkQgeDQpIHsKICAgICBGSVhNRShzaGVsbCwiKDB4JTA4bHgsMHglMDhseCwweCUwOGx4LDB4JTA4bHgpOnN0dWIuXG4iLAogICAgIAl4MSx4Mix4Myx4NAogICAgICk7CkBAIC03MTYsMzggKzc5NiwzNiBAQAogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogU0hFTEwzMl84NiBbU0hFTEwzMi44Nl0KLSAqIHVua25vd24KKyAqIFNIUmVnaXN0ZXJEcmFnRHJvcCBbU0hFTEwzMi44Nl0KICAqCiAgKiBOT1RFUwotICogICAgIE9yaWdpbmFsIG5hbWU6IFNIUmVnaXN0ZXJEcmFnRHJvcCAoZXhwb3J0ZWQgYnkgb3JkaW5hbCkKKyAqICAgICBleHBvcnRlZCBieSBvcmRpbmFsCiAgKi8KLURXT1JEIFdJTkFQSSBTSEVMTDMyXzg2KEhXTkQzMiBod25kLERXT1JEIHgyKSB7Ci0gICAgRklYTUUgKHNoZWxsLCAiKDB4JTA4bHgsMHglMDh4KTpzdHViLlxuIiwgaHduZCwgeDIpOworRFdPUkQgV0lOQVBJIFNIUmVnaXN0ZXJEcmFnRHJvcChIV05EMzIgaHduZCxEV09SRCB4MikgeworICAgIEZJWE1FIChzaGVsbCwgIigweCUwOHgsMHglMDhseCk6c3R1Yi5cbiIsIGh3bmQsIHgyKTsKICAgICByZXR1cm4gMDsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFNIRUxMMzJfODcgW1NIRUxMMzIuODddCi0gKiB1bmtub3duCisgKiBTSFJldm9rZURyYWdEcm9wIFtTSEVMTDMyLjg3XQogICoKICAqIE5PVEVTCi0gKiAgICAgT3JpZ2luYWwgbmFtZTogU0hSZXZva2VEcmFnRHJvcCAoZXhwb3J0ZWQgYnkgb3JkaW5hbCkKKyAqICAgICBleHBvcnRlZCBieSBvcmRpbmFsCiAgKi8KLURXT1JEIFdJTkFQSSBTSEVMTDMyXzg3KERXT1JEIHgpIHsKK0RXT1JEIFdJTkFQSSBTSFJldm9rZURyYWdEcm9wKERXT1JEIHgpIHsKICAgICBGSVhNRShzaGVsbCwiKDB4JTA4bHgpOnN0dWIuXG4iLHgpOwogICAgIHJldHVybiAwOwogfQogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBTSEVMTDMyXzYxIFtTSEVMTDMyLjYxXQorICogUnVuRmlsZURsZyBbU0hFTEwzMi42MV0KICAqCiAgKiBOT1RFUwogICogICAgIE9yaWdpbmFsIG5hbWU6IFJ1bkZpbGVEbGcgKGV4cG9ydGVkIGJ5IG9yZGluYWwpCiAgKi8KIERXT1JEIFdJTkFQSQotU0hFTEwzMl82MSAoSFdORDMyIGh3bmRPd25lciwgRFdPUkQgZHdQYXJhbTEsIERXT1JEIGR3UGFyYW0yLAorUnVuRmlsZURsZyAoSFdORDMyIGh3bmRPd25lciwgRFdPUkQgZHdQYXJhbTEsIERXT1JEIGR3UGFyYW0yLAogCSAgICBMUFNUUiBscHN6VGl0bGUsIExQU1RSIGxwc3pQcm9tcHQsIFVJTlQzMiB1RmxhZ3MpCiB7CiAgICAgRklYTUUgKHNoZWxsLCIoMHglMDh4IDB4JWx4IDB4JWx4IFwiJXNcIiBcIiVzXCIgMHgleCk6c3R1Yi5cbiIsCkBAIC03NTcsMTEgKzgzNSwxMyBAQAogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBTSEVMTDMyXzYwIFtTSEVMTDMyLjYwXQotICogU2hlbGwvU2h1dGRvd24tRGlhbG9nCisgKiBFeGl0V2luZG93c0RpYWxvZyBbU0hFTEwzMi42MF0KKyAqCisgKiBOT1RFUworICogICAgIGV4cG9ydGVkIGJ5IG9yZGluYWwKICAqLwogRFdPUkQgV0lOQVBJCi1TSEVMTDMyXzYwIChIV05EMzIgaHduZE93bmVyKQorRXhpdFdpbmRvd3NEaWFsb2cgKEhXTkQzMiBod25kT3duZXIpCiB7CiAgICAgRklYTUUgKHNoZWxsLCIoMHglMDh4KTpzdHViLlxuIiwgaHduZE93bmVyKTsKICAgICByZXR1cm4gMDsKQEAgLTc2OSwxMiArODQ5LDEyIEBACiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFNIRUxMMzJfMTg0IFtTSEVMTDMyLjE4NF0KLSAqIHVua25vd24KKyAqIEFycmFuZ2VXaW5kb3dzIFtTSEVMTDMyLjE4NF0KKyAqIAogICovCiBEV09SRCBXSU5BUEkKLVNIRUxMMzJfMTg0IChEV09SRCBkd1BhcmFtMSwgRFdPUkQgZHdQYXJhbTIsIERXT1JEIGR3UGFyYW0zLAotCSAgICAgRFdPUkQgZHdQYXJhbTQsIERXT1JEIGR3UGFyYW01KQorQXJyYW5nZVdpbmRvd3MgKERXT1JEIGR3UGFyYW0xLCBEV09SRCBkd1BhcmFtMiwgRFdPUkQgZHdQYXJhbTMsCisJCURXT1JEIGR3UGFyYW00LCBEV09SRCBkd1BhcmFtNSkKIHsKICAgICBGSVhNRSAoc2hlbGwsIigweCVseCAweCVseCAweCVseCAweCVseCAweCVseCk6c3R1Yi5cbiIsCiAJICAgZHdQYXJhbTEsIGR3UGFyYW0yLCBkd1BhcmFtMywgZHdQYXJhbTQsIGR3UGFyYW01KTsKQEAgLTc4MywxNSArODYzLDMzIEBACiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFNIRUxMMzJfMTQ3IFtTSEVMTDMyLjE0N10KKyAqIFNIQ0xTSURGcm9tU3RyaW5nIFtTSEVMTDMyLjE0N10KICAqCiAgKiBOT1RFUwotICogICAgIE9yaWdpbmFsIG5hbWU6IFNIQ0xTSURGcm9tU3RyaW5nIChleHBvcnRlZCBieSBvcmRpbmFsKQorICogICAgIGV4cG9ydGVkIGJ5IG9yZGluYWwKICAqLwogRFdPUkQgV0lOQVBJCi1TSEVMTDMyXzE0NyAoRFdPUkQgZHdQYXJhbTEsIERXT1JEIGR3UGFyYW0yKQorU0hDTFNJREZyb21TdHJpbmcgKERXT1JEIGR3UGFyYW0xLCBEV09SRCBkd1BhcmFtMikKIHsKICAgICBGSVhNRSAoc2hlbGwsIigweCVseCAweCVseCk6c3R1Yi5cbiIsIGR3UGFyYW0xLCBkd1BhcmFtMik7CisKKyAgICBGSVhNRSAoc2hlbGwsIihcIiVzXCIgXCIlc1wiKTpzdHViLlxuIiwgKExQU1RSKWR3UGFyYW0xLCAoTFBTVFIpZHdQYXJhbTIpOworCisgICAgcmV0dXJuIDA7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFNpZ25hbEZpbGVPcGVuIFtTSEVMTDMyLjEwM10KKyAqCisgKiBOT1RFUworICogICAgIGV4cG9ydGVkIGJ5IG9yZGluYWwKKyAqLworRFdPUkQgV0lOQVBJCitTaWduYWxGaWxlT3BlbiAoRFdPUkQgZHdQYXJhbTEpCit7CisgICAgRklYTUUgKHNoZWxsLCIoMHglMDhseCk6c3R1Yi5cbiIsIGR3UGFyYW0xKTsKKwogICAgIHJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9taXNjL3NweS5jIGIvbWlzYy9zcHkuYwppbmRleCAwNDE5YzA1Li4zOTk2MDAzIDEwMDY0NAotLS0gYS9taXNjL3NweS5jCisrKyBiL21pc2Mvc3B5LmMKQEAgLTQ5MiwxMCArNDkyLDM0IEBACiAgICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKICAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAogCi0gICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKLSAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAotICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCi0gICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKKyAgICAiV01fUVVFUllBRlhXTkRQUk9DIiwgICAvKiAgMHgwMzYwICovCisgICAgIldNX1NJWkVQQVJFTlQiLCAgICAgICAgLyogIDB4MDM2MSAqLworICAgICJXTV9TRVRNRVNTQUdFU1RSSU5HIiwgIC8qICAweDAzNjIgKi8KKyAgICAiV01fSURMRVVQREFURUNNRFVJIiwgICAvKiAgMHgwMzYzICovCisgICAgIldNX0lOSVRJQUxVUERBVEUiLCAgICAgLyogIDB4MDM2NCAqLworICAgICJXTV9DT01NQU5ESEVMUCIsICAgICAgIC8qICAweDAzNjUgKi8KKyAgICAiV01fSEVMUEhJVFRFU1QiLCAgICAgICAvKiAgMHgwMzY2ICovCisgICAgIldNX0VYSVRIRUxQTU9ERSIsICAgICAgLyogIDB4MDM2NyAqLworICAgICJXTV9SRUNBTENQQVJFTlQiLCAgICAgIC8qICAweDAzNjggKi8KKyAgICAiV01fU0laRUNISUxEIiwgICAgICAgICAvKiAgMHgwMzY5ICovCisgICAgIldNX0tJQ0tJRExFIiwgICAgICAgICAgLyogIDB4MDM2QSAqLworICAgICJXTV9RVUVSWUNFTlRFUldORCIsICAgIC8qICAweDAzNkIgKi8KKyAgICAiV01fRElTQUJMRU1PREFMIiwgICAgICAvKiAgMHgwMzZDICovCisgICAgIldNX0ZMT0FUU1RBVFVTIiwgICAgICAgLyogIDB4MDM2RCAqLworICAgICJXTV9BQ1RJVkFURVRPUExFVkVMIiwgIC8qICAweDAzNkUgKi8KKyAgICAiV01fUVVFUlkzRENPTlRST0xTIiwgICAvKiAgMHgwMzZGICovCisgICAgTlVMTCxOVUxMLE5VTEwsCisgICAgIldNX1NPQ0tFVF9OT1RJRlkiLCAgICAgLyogIDB4MDM3MyAqLworICAgICJXTV9TT0NLRVRfREVBRCIsICAgICAgIC8qICAweDAzNzQgKi8KKyAgICAiV01fUE9QTUVTU0FHRVNUUklORyIsICAvKiAgMHgwMzc1ICovCisgICAgIldNX09DQ19MT0FERlJPTVNUUkVBTSIsICAgICAvKiAweDAzNzYgKi8KKyAgICAiV01fT0NDX0xPQURGUk9NU1RPUkFHRSIsICAgIC8qIDB4MDM3NyAqLworICAgICJXTV9PQ0NfSU5JVE5FVyIsICAgICAgICAgICAgLyogMHgwMzc4ICovCisgICAgIldNX1FVRVVFX1NFTlRJTkVMIiwgICAgICAgICAvKiAweDAzNzkgKi8KKyAgICAiV01fT0NDX0xPQURGUk9NU1RSRUFNX0VYIiwgIC8qIDB4MDM3QSAqLworICAgICJXTV9PQ0NfTE9BREZST01TVE9SQUdFX0VYIiwgLyogMHgwMzdCICovCisKKyAgICBOVUxMLE5VTEwsTlVMTCxOVUxMLAogCiAgICAgLyogMHgwMzgwICovCiAgICAgIldNX1BFTldJTkZJUlNUIiwgCmRpZmYgLS1naXQgYS9tc2Rvcy9NYWtlZmlsZS5pbiBiL21zZG9zL01ha2VmaWxlLmluCmluZGV4IGEzMGIyNTEuLjZlYzBmMjYgMTAwNjQ0Ci0tLSBhL21zZG9zL01ha2VmaWxlLmluCisrKyBiL21zZG9zL01ha2VmaWxlLmluCkBAIC02LDYgKzYsNyBAQAogTU9EVUxFICAgID0gbXNkb3MKIAogQ19TUkNTID0gXAorCWNkcm9tLmMgXAogCWRvc21lbS5jIFwKIAlkcG1pLmMgXAogCWludDEwLmMgXApkaWZmIC0tZ2l0IGEvbXNkb3MvY2Ryb20uYyBiL21zZG9zL2Nkcm9tLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdkNzNhOAotLS0gL2Rldi9udWxsCisrKyBiL21zZG9zL2Nkcm9tLmMKQEAgLTAsMCArMSwzMDMgQEAKKworLyoKKyAqICBDZHJvbSAtIGRldmljZSBkcml2ZXIgZW11bGF0aW9uIC0gQXVkaW8gZmVhdHVyZXMuCisgKiAgKGMpIDE5OTggUGV0ciBUb21hc2VrIDx0b21hc2VrQGV0Zi5jdW5pLmN6PgorICoKKyAqLworCisjaWZkZWYgbGludXgKKworI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisvKiBGSVhNRSAtIGhvdyB0byBtYWtlIHRoaXMgT1MgaW5kZXBlbmRlbnQgPz8gKi8KKyNpbmNsdWRlIDxsaW51eC9jZHJvbS5oPgorI2luY2x1ZGUgPGxpbnV4L3VjZHJvbS5oPgorCisjaW5jbHVkZSAibGR0LmgiCisjaW5jbHVkZSAiZHJpdmUuaCIKKyNpbmNsdWRlICJtc2Rvcy5oIgorI2luY2x1ZGUgIm1pc2NlbXUuaCIKKyNpbmNsdWRlICJtb2R1bGUuaCIKKy8qICNkZWZpbmUgREVCVUdfSU5UICovCisjaW5jbHVkZSAiZGVidWcuaCIKKworCisvKiAgRklYTUUgLSBtb3JlIGdlbmVyYWwgPz8gKi8KKyNkZWZpbmUgY2Ryb21fZGV2ICIvZGV2L2Nkcm9tIgorCit1X2NoYXIgY2Ryb21fYV9zdGF0dXMgKGludCBmZCkKK3sKK3N0cnVjdCBjZHJvbV9zdWJjaG5sIHNjOworCitpb2N0bChmZCxDRFJPTVNVQkNITkwsJnNjKTsKK3JldHVybiBzYy5jZHNjX2F1ZGlvc3RhdHVzOworfQorCitCWVRFICogZ2V0X2lvX3N0cnUgKFdPUkQgKiByZXFoLGludCBkb3JlYWxtb2RlKQoreworV09SRCBvZnN0LHNlZ207CitCWVRFICogaW9fc3RydTsKK29mc3QgPSByZXFoWzddOyBzZWdtID0gcmVxaFs4XTsKKworaWYgKGRvcmVhbG1vZGUpCisgIGlvX3N0cnUgPSBET1NNRU1fTWFwUmVhbFRvTGluZWFyIChNQUtFTE9ORyhvZnN0LHNlZ20pKTsKK2Vsc2UKKyAgaW9fc3RydSA9IFBUUl9TRUdfT0ZGX1RPX0xJTihzZWdtLG9mc3QpOworCityZXR1cm4gaW9fc3RydTsKK30KKworRFdPUkQgbXNmMF90b19hYnMgKHN0cnVjdCBjZHJvbV9tc2YwIG1zZikKK3sKK3JldHVybiAgKG1zZi5taW51dGUgKjYwICsgCisgICAgICAgIG1zZi5zZWNvbmQpICo3NSArCisgICAgICAgIG1zZi5mcmFtZS0xNTA7IAorfQorCit2b2lkIGFic190b19tc2YwIChEV09SRCBhYnMsIHN0cnVjdCBjZHJvbV9tc2YwICogbXNmKQoreworRFdPUkQgZDsKK2Q9YWJzKzE1MDsKK21zZi0+ZnJhbWU9ZCU3NTsgIGQ9ZC83NTsKK21zZi0+c2Vjb25kPWQlNjA7IG1zZi0+bWludXRlPWQvNjA7Cit9CisKK3ZvaWQgbXNmMF90b19tc2YgKHN0cnVjdCBjZHJvbV9tc2YwIGZyb20sIHN0cnVjdCBjZHJvbV9tc2YwIHRvLCBzdHJ1Y3QgY2Ryb21fbXNmICogbXNmKQoreworbXNmLT5jZG1zZl9taW4wPWZyb20ubWludXRlOworbXNmLT5jZG1zZl9taW4xPXRvLm1pbnV0ZTsKK21zZi0+Y2Rtc2Zfc2VjMD1mcm9tLnNlY29uZDsKK21zZi0+Y2Rtc2Zfc2VjMT10by5zZWNvbmQ7Cittc2YtPmNkbXNmX2ZyYW1lMD1mcm9tLmZyYW1lOworbXNmLT5jZG1zZl9mcmFtZTE9dG8uZnJhbWU7Cit9IAorCit2b2lkIGFic190b19tc2YgKERXT1JEIGZyb20sIERXT1JEIHRvLCBzdHJ1Y3QgY2Ryb21fbXNmICogbXNmKQoreworc3RydWN0IGNkcm9tX21zZjAgZnIsdHQ7CithYnNfdG9fbXNmMChmcm9tLCAmZnIpOworYWJzX3RvX21zZjAodG8sICZ0dCk7Cittc2YwX3RvX21zZihmcix0dCxtc2YpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogICBDZHJvbSBtcy1kb3MgZHJpdmVyIGVtdWxhdGlvbi4gCisgKiAgICAoYWNjZXNpYmxlIHRocm91Z2h0IHRoZSBNU0NERVggMHgxMCBmdW5jdGlvbi4pCisgKi8KKworZXh0ZXJuIHZvaWQgZG9fbXNjZGV4X2RkIChDT05URVhUICogY29udGV4dCwgaW50IGRvcmVhbG1vZGUpCisgeyAKKyBCWVRFICogZHJpdmVyX3JlcXVlc3Q7CQorIEJZVEUgKiBpb19zdHJ1OwkKKyBzdGF0aWMgaW50IGZkY2Q9LTE7IC8qIGZpbGUgZGVzY3JpcHRvci4uICovCisgc3RydWN0IGNkcm9tX3RvY2hkciB0b2NoZHI7IC8qIHRoZSBUb2MgaGVhZGVyICovCisgc3RydWN0IGNkcm9tX3RvY2VudHJ5IHRvY2VudHJ5OyAvKiBhIFRvYyBlbnRyeSAqLworIHN0cnVjdCBjZHJvbV9tc2YgbXNmOyAKKyBzdHJ1Y3QgY2Ryb21fc3ViY2hubCBzdWJjaG5sOyAKKyB1X2NoYXIgRXJyb3I9MjU1OyAvKk5vIEVycm9yICovIAorCitpZiAoZG9yZWFsbW9kZSkKKyAgZHJpdmVyX3JlcXVlc3Q9RE9TTUVNX01hcFJlYWxUb0xpbmVhcgorICAgICAgICAgICAgICAgICAgICAgICAgKE1BS0VMT05HKEJYX3JlZyhjb250ZXh0KSxFU19yZWcoY29udGV4dCkpKTsKK2Vsc2UKKyAgZHJpdmVyX3JlcXVlc3Q9UFRSX1NFR19PRkZfVE9fTElOKEVTX3JlZyhjb250ZXh0KSxCWF9yZWcoY29udGV4dCkpOworCitpZiAoIWRyaXZlcl9yZXF1ZXN0KSAKKyAgICAgeyAgICAgICAgICAgICAvKiBGSVhNRSAtIHRvIGJlIGRlbGV0ZWQgPz8gKi8KKwlFUlIoaW50LCIgICBFUzpCWD09MCAhIFNFR0ZBVUxUID9cbiIpOworCUVSUihpbnQsIiAtLT5CWD0weCUwNFgsIEVTPTB4JTA0WCwgRFM9MHglMDRYLCBDWD0weCUwNFhcblxuIiwKKwkJQlhfcmVnKGNvbnRleHQpLAorCQlFU19yZWcoY29udGV4dCksCisJCURTX3JlZyhjb250ZXh0KSwKKwkJQ1hfcmVnKGNvbnRleHQpKTsKKyAgICAgfQorZWxzZQorCisvKiBGSVhNRSAtIHdvdWxkIGJlIGJlc3QgdG8gb3BlbiB0aGUgZGV2aWNlIGF0IHRoZSBiZWdpbmluZyBvZiB0aGUgd2luZQorICAgc2Vzc2lvbiAuLi4uICovCisgaWYgKGZkY2Q8MCkgZmRjZD1vcGVuKGNkcm9tX2RldixPX1JET05MWSk7CisKKyAgIFRSQUNFKGludCwiQ0RST00gZGV2aWNlIGRyaXZlciAtPiBjb21tYW5kIDwlZD5cbiIsCisgICAgICAgICAodW5zaWduZWQgY2hhcilkcml2ZXJfcmVxdWVzdFsyXSk7CisKKy8qIHNldCBzdGF0dXMgdG8gMCAqLworIGRyaXZlcl9yZXF1ZXN0WzNdPTA7CisgZHJpdmVyX3JlcXVlc3RbNF09MDsKKworCisgc3dpdGNoKGRyaXZlcl9yZXF1ZXN0WzJdKQorIHsKKyBjYXNlIDM6CisgICBpb19zdHJ1PWdldF9pb19zdHJ1KChXT1JEICopZHJpdmVyX3JlcXVlc3QsZG9yZWFsbW9kZSk7CisgICBGSVhNRShpbnQsIiAtLT4gSU9DVEwgSU5QVVQgPCVkPlxuIixpb19zdHJ1WzBdKTsgCisgICBzd2l0Y2ggKGlvX3N0cnVbMF0pCisJeworCWNhc2UgMTogLyogbG9jYXRpb24gb2YgaGVhZCAqLworCSBpZiAoaW9fc3RydVsxXT09MCkKKyAgICAgICAgICB7CisgICAgICAgICAgaW9jdGwoZmRjZCxDRFJPTVNVQkNITkwsJnN1YmNobmwpOworCSgoRFdPUkQqKWlvX3N0cnUrMilbMF09KERXT1JEKW1zZjBfdG9fYWJzKHN1YmNobmwuY2RzY19hYnNhZGRyLm1zZik7IAorICAgICAgICAgRklYTUUoaW50LCIgLS0tLT4gSEVBRCBMT0NBVElPTiA8JWxkPlxuXG4iLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChEV09SRCAqKWlvX3N0cnUrMilbMF0pOyAKKwkgIH0KKyAgICAgICAgIGVsc2UKKyAgICAgCSAgeworIAkgRVJSKGludCwiQ0RSb20tRHJpdmVyOiBVbnN1cHBvcnRlZCBhZGRyZXNzIG1vZGUgISFcbiIpOworICAgCSBFcnJvcj0weDBjOworICAgIAkgIH0KKwkgYnJlYWs7CisKKwljYXNlIDY6IC8qIGRldmljZSBzdGF0dXMgKi8KKyAgICAgICAgICAgICAgLyogRklYTUUgLi4gZG9lcyB0aGlzIHdvcmsgcHJvcGVybHkgPz8gKi8KKwkgaW9fc3RydVszXT1pb19zdHJ1WzRdPTA7CisJIGlvX3N0cnVbMl09MTsgLyogc3VwcG9ydHMgYXVkaW8gY2hhbm5lbHMgKD8/IEZJWE1FID8/KSAqLworCSBpb19zdHJ1WzFdPTE2OyAvKiBkYXRhIHJlYWQgYW5kIHBsYXlzIGF1ZGlvIHJhY2tzICovCisJIGlvX3N0cnVbMV18PShpb2N0bChmZGNkLENEUk9NX0RSSVZFX1NUQVRVUywwKT09Q0RTX1RSQVlfT1BFTik7CisgICAgICAgICBUUkFDRShpbnQsIiAtLS0tPiBERVZJQ0UgU1RBVFVTIDwweCUwOFg+XG5cbiIsKERXT1JEKWlvX3N0cnVbMV0pOyAKKwkgYnJlYWs7CisKKwljYXNlIDk6IC8qIG1lZGlhIGNoYW5nZWQgPyAqLworCSBpZiAoaW9jdGwoZmRjZCxDRFJPTV9NRURJQV9DSEFOR0VELDApKQorICAgICAgICAgIGlvX3N0cnVbMV09MHhmZjsKKyAgICAgICAgIGVsc2UKKwkgIGlvX3N0cnVbMF09MDsgLyogRklYTUU/IDE/ICovCisJIGJyZWFrOworCisJY2FzZSAxMDogLyogYXVkaW8gZGlzayBpbmZvICovCisgICAgICAgICBpb2N0bChmZGNkLENEUk9NUkVBRFRPQ0hEUiwmdG9jaGRyKTsKKwkgaW9fc3RydVsxXT10b2NoZHIuY2R0aF90cmswOyAvKiBzdGFyaW5nIHRyYWNrIG9mIHRoZSBkaXNjICovCisJIGlvX3N0cnVbMl09dG9jaGRyLmNkdGhfdHJrMTsgLyogZW5kaW5nIHRyYWNrICovCisgICAgICAgICB0b2NlbnRyeS5jZHRlX3RyYWNrPUNEUk9NX0xFQURPVVQ7IC8qIE5vdyB0aGUgbGVhZG91dCB0cmFjayAuLi4qLworICAgICAgICAgdG9jZW50cnkuY2R0ZV9mb3JtYXQ9Q0RST01fTVNGOyAKKyAgICAgICAgIGlvY3RsKGZkY2QsQ0RST01SRUFEVE9DRU5UUlksJnRvY2VudHJ5KTsgLyogLi4uIGdldCBwb3NpdGlvbiBvZiBpdCAqLworCSAoKERXT1JEKilpb19zdHJ1KzMpWzBdPShEV09SRCltc2YwX3RvX2Ficyh0b2NlbnRyeS5jZHRlX2FkZHIubXNmKTsgCisgICAgICAgICBUUkFDRShpbnQsIiAtLS0tPiBBVURJTyBESVNLIElORk8gPCVkLSVkLyVsZD5cblxuIiwKKwkJCQlpb19zdHJ1WzFdLGlvX3N0cnVbMl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRFdPUkQgKilpb19zdHJ1KzMpWzBdKTsgCisJIGJyZWFrOworCisKKwljYXNlIDExOiAvKiBhdWRpbyB0cmFjayBpbmZvICovCisJIHRvY2VudHJ5LmNkdGVfdHJhY2s9aW9fc3RydVsxXTsgLyogdHJhY2sgb2YgdGhlIGRpc2MgKi8gCisgICAgICAgICB0b2NlbnRyeS5jZHRlX2Zvcm1hdD1DRFJPTV9NU0Y7IAorICAgICAgICAgaW9jdGwoZmRjZCxDRFJPTVJFQURUT0NFTlRSWSwmdG9jZW50cnkpOworCSAoKERXT1JEKilpb19zdHJ1KzIpWzBdPShEV09SRCltc2YwX3RvX2Ficyh0b2NlbnRyeS5jZHRlX2FkZHIubXNmKTsgCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBzdGFydGluZyBwb2ludCBpZiB0aGUgdHJhY2sgKi8KKyAgICAgICAgIGlvX3N0cnVbNl09dG9jZW50cnkuY2R0ZV9hZHIrMTYqdG9jZW50cnkuY2R0ZV9jdHJsOworICAgICAgICAgVFJBQ0UoaW50LCIgLS0tLT4gQVVESU8gVFJBQ0sgSU5GTyA8dHJhY2s9JWQ+WyVsZF0gXG5cbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW9fc3RydVsxXSwoKERXT1JEICopaW9fc3RydSsyKVswXSk7IAorCSBicmVhazsKKworCWNhc2UgMTI6IC8qIGdldCBRLUNoYW5uZWwgLyBTdWJjaGFubmVsICg/PykgaW5mbyAqLworCSBzdWJjaG5sLmNkc2NfZm9ybWF0PUNEUk9NX01TRjsKKwkgaW9jdGwoZmRjZCxDRFJPTVNVQkNITkwsJnN1YmNobmwpOworCSBpb19zdHJ1WzFdPXN1YmNobmwuY2RzY19hZHIrMTYqc3ViY2hubC5jZHNjX2N0cmw7CisJIGlvX3N0cnVbMl09c3ViY2hubC5jZHNjX3RyazsKKwkgaW9fc3RydVszXT1zdWJjaG5sLmNkc2NfaW5kOyAvKiBGSVhNRSAtID8/ICovCisJIGlvX3N0cnVbNF09c3ViY2hubC5jZHNjX3JlbGFkZHIubXNmLm1pbnV0ZTsKKwkgaW9fc3RydVs1XT1zdWJjaG5sLmNkc2NfcmVsYWRkci5tc2Yuc2Vjb25kOworCSBpb19zdHJ1WzZdPXN1YmNobmwuY2RzY19yZWxhZGRyLm1zZi5mcmFtZTsKKwkgaW9fc3RydVs3XT0wOyAvKiBhbHdheXMgemVybyAqLworCSBpb19zdHJ1WzhdPXN1YmNobmwuY2RzY19hYnNhZGRyLm1zZi5taW51dGU7CisJIGlvX3N0cnVbOV09c3ViY2hubC5jZHNjX2Fic2FkZHIubXNmLnNlY29uZDsKKwkgaW9fc3RydVsxMF09c3ViY2hubC5jZHNjX2Fic2FkZHIubXNmLmZyYW1lOworCSBicmVhazsKKwkKKwljYXNlIDE1OiAvKiBmaXhtZSAhISEhISEhIGp1c3QgYSBzbWFsbCB3b3JrYXJvdW5kICEgKi8KKwkgLyogISEhISBGSVhNRSBGSVhNRSBGSVhNRSAhISAqLworICAgICAgICAgdG9jZW50cnkuY2R0ZV90cmFjaz1DRFJPTV9MRUFET1VUOyAvKiBOb3cgdGhlIGxlYWRvdXQgdHJhY2sgLi4uKi8KKyAgICAgICAgIHRvY2VudHJ5LmNkdGVfZm9ybWF0PUNEUk9NX01TRjsgCisgICAgICAgICBpb2N0bChmZGNkLENEUk9NUkVBRFRPQ0VOVFJZLCZ0b2NlbnRyeSk7IC8qIC4uLiBnZXQgcG9zaXRpb24gb2YgaXQgKi8KKwkgKChEV09SRCopaW9fc3RydSs3KVswXT0oRFdPUkQpbXNmMF90b19hYnModG9jZW50cnkuY2R0ZV9hZGRyLm1zZik7IAorIAlicmVhazsKKworCWRlZmF1bHQ6CisgICAgICAgICBGSVhNRShpbnQsIiBDZHJvbS1kcml2ZXI6IElPQ1RMIElOUFVUOiBVbmltcGxlbWVudGVkIDwlZD4hISBcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fc3RydVswXSk7IAorCSBFcnJvcj0weDBjOyAKKwkgYnJlYWs7CQorCX0JCisgICBicmVhazsKKworIGNhc2UgMTI6CisgICBpb19zdHJ1PWdldF9pb19zdHJ1KChXT1JEICopZHJpdmVyX3JlcXVlc3QsZG9yZWFsbW9kZSk7CisgICBUUkFDRShpbnQsIiAtLT4gSU9DVEwgT1VUUFVUIDwlZD5cbiIsaW9fc3RydVswXSk7IAorICAgc3dpdGNoIChpb19zdHJ1WzBdKQorCXsKKwljYXNlIDA6IC8qIGVqZWN0ICovIAorCSBpb2N0bCAoZmRjZCxDRFJPTUVKRUNUKTsKKyAgICAgICAgIFRSQUNFKGludCwiIC0tLS0+IEVKRUNUIFxuXG4iKTsgCisJIGJyZWFrOworCWNhc2UgNTogLyogY2xvc2UgdHJheSAqLworCSBpb2N0bCAoZmRjZCxDRFJPTUNMT1NFVFJBWSk7CisgICAgICAgICBUUkFDRShpbnQsIiAtLS0tPiBDTE9TRSBUUkFZIFxuXG4iKTsgCisJIGJyZWFrOworCWNhc2UgMjogLyogcmVzZXQgZHJpdmUgKi8KKwkgaW9jdGwgKGZkY2QsQ0RST01SRVNFVCk7CisgICAgICAgICBUUkFDRShpbnQsIiAtLS0tPiBSRVNFVCBcblxuIik7IAorCSBicmVhazsKKwlkZWZhdWx0OgorICAgICAgICAgRklYTUUoaW50LCIgQ2Ryb20tZHJpdmVyOiBJT0NUTCBPVVBVVDogVW5pbXBsZW1lbnRlZCA8JWQ+ISEgXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX3N0cnVbMF0pOyAKKwkgRXJyb3I9MHgwYzsKKwkgYnJlYWs7CQorCX0JCisgICBicmVhazsKKyAKK2Nhc2UgMTMzOgorICAgaWYgKGNkcm9tX2Ffc3RhdHVzKGZkY2QpPT1DRFJPTV9BVURJT19QTEFZKQorICAgICB7CisgICAgIGlvY3RsIChmZGNkLENEUk9NUEFVU0UpOworICAgICBUUkFDRShpbnQsIiAtLT4gU1RPUCBBVURJTyAoUGF1c2VkKVxuXG4iKTsKKyAgICAgfQorICAgZWxzZQorICAgICB7CisgICAgIGlvY3RsIChmZGNkLENEUk9NU1RPUCk7CisgICAgIFRSQUNFKGludCwiIC0tPiBTVE9QIEFVRElPIChTdG9wcGVkKVxuXG4iKTsKKyAgICAgfQorICAgYnJlYWs7CisKKyBjYXNlIDEzMjogIC8qIEZJWE1FIC0gSXQgZGlkbid0IGZ1bmN0aW9uIGZvciBtZS4uLiAqLworICAgRklYTUUoaW50LCIgLS0+IFBMQVkgQVVESU8gXG4iKTsKKyAgICAgaW9jdGwgKGZkY2QsQ0RST01TVEFSVCk7CisgICBGSVhNRShpbnQsIk1vZGUgOjwweCUwMlg+ICwgWyVsZC0lbGRdXG5cbiIsCisgICAgICAgICAgKHVuc2lnbmVkIGNoYXIpZHJpdmVyX3JlcXVlc3RbMTNdLAorICAgICAgICAgICgoRFdPUkQqKWRyaXZlcl9yZXF1ZXN0KzE0KVswXSwKKyAgICAgICAgICAoKERXT1JEKilkcml2ZXJfcmVxdWVzdCsxOClbMF0pOworICAgaWYgKGRyaXZlcl9yZXF1ZXN0WzEzXT09MCkKKyAgICAgeworICAgIGFic190b19tc2YoKChEV09SRCopZHJpdmVyX3JlcXVlc3QrMTQpWzBdLAorICAgICAgICAgICAgICAgKChEV09SRCopZHJpdmVyX3JlcXVlc3QrMTgpWzBdLCZtc2YpOworICAgIGlvY3RsKGZkY2QsQ0RST01QTEFZTVNGLCZtc2YpOworICAgICB9CisgICBlbHNlIAorICAgICB7CisgICAgRVJSKGludCwiQ0RSb20tRHJpdmVyOiBVbnN1cHBvcnRlZCBhZGRyZXNzIG1vZGUgISFcbiIpOworICAgIEVycm9yPTB4MGM7CisgICAgIH0KKyAgIGJyZWFrOworIGNhc2UgMTM2OgorICAgVFJBQ0UoaW50LCIgLS0+IFJFU1VNRSBBVURJTyBcblxuIik7CisgICBpb2N0bChmZGNkLENEUk9NUkVTVU1FKTsKKyAgIGJyZWFrOworIGRlZmF1bHQ6CisgICBGSVhNRShpbnQsIiBDRFJvbS1Ecml2ZXIgLSBpb2N0bCB1bmlucGxlbWVudGVkIDwlZD5cbiIsZHJpdmVyX3JlcXVlc3RbMl0pOyAKKyAgIEVycm9yPTB4MGM7CQorCisgfQorCitpZiAoRXJyb3I8MjU1KQorIHsKKyBkcml2ZXJfcmVxdWVzdFs0XXw9MTI3OworIGRyaXZlcl9yZXF1ZXN0WzNdPUVycm9yOworIH0KKyBkcml2ZXJfcmVxdWVzdFs0XXw9MiooY2Ryb21fYV9zdGF0dXMoZmRjZCk9PUNEUk9NX0FVRElPX1BMQVkpOworCisvKiAgY2xvc2UgKGZkY2QpOyBGSVhNRSAhISAtLSBjYW5ub3QgdXNlIGNsb3NlIHdoZW4gZWplY3RpbmcgCisgICAgdGhlIGNkLXJvbSAtIGNsb3NlIHdvdWxkIGNsb3NlIGl0IGFnYWluICovIAorfQorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvbXNkb3MvZHBtaS5jIGIvbXNkb3MvZHBtaS5jCmluZGV4IDFhYTgwMmYuLmVlMjBhMzggMTAwNjQ0Ci0tLSBhL21zZG9zL2RwbWkuYworKysgYi9tc2Rvcy9kcG1pLmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlICJkZWJ1Zy5oIgogI2luY2x1ZGUgInNlbGVjdG9ycy5oIgogI2luY2x1ZGUgInRocmVhZC5oIgorI2luY2x1ZGUgInByb2Nlc3MuaCIKICNpbmNsdWRlICJzdGFja2ZyYW1lLmgiCiAjaW5jbHVkZSAiY2FsbGJhY2suaCIKIApAQCAtMTEwLDE5ICsxMTEsMjQgQEAKIAlNRU1PUllfQkFTSUNfSU5GT1JNQVRJT04JbWJpOwogCUxQVk9JRAkJCQluZXdwdHI7CiAKLQlpZiAoIVZpcnR1YWxRdWVyeShwdHIsJm1iaSxzaXplb2YobWJpKSkpIHsKLQkJRklYTUUoaW50MzEsInJlYWxsb2Npbmcgbm9uIERQTUlfeGFsbG9jZWQgcmVnaW9uP1xuIik7Ci0JCXJldHVybiBOVUxMOwotCX0KLQkvKiBXZSBkbyBub3Qgc2hyaW5rIGFsbG9jYXRlZCBtZW1vcnkuIG1vc3QgcmVhbGxvY3Mgb25seSBkbyBncm93cwotCSAqIGFueXdheQotCSAqLwotCWlmIChuZXdzaXplPD1tYmkuUmVnaW9uU2l6ZSkKLQkJcmV0dXJuIHB0cjsKLQogCW5ld3B0ciA9IERQTUlfeGFsbG9jKG5ld3NpemUpOwotCW1lbWNweShuZXdwdHIscHRyLG5ld3NpemUpOwotCURQTUlfeGZyZWUocHRyKTsKKwlpZiAocHRyKSB7CisJCWlmICghVmlydHVhbFF1ZXJ5KHB0ciwmbWJpLHNpemVvZihtYmkpKSkgeworCQkJRklYTUUoaW50MzEsInJlYWxsb2Mgb2YgRFBNSV94YWxsb2NkIHJlZ2lvbiAlcD9cbiIscHRyKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJCWlmIChtYmkuU3RhdGUgPT0gTUVNX0ZSRUUpIHsKKwkJCUZJWE1FKGludDMxLCJyZWFsbG9jIG9mIERQTUlfeGFsbG9jZCByZWdpb24gJXA/XG4iLHB0cik7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCQkvKiBXZSBkbyBub3Qgc2hyaW5rIGFsbG9jYXRlZCBtZW1vcnkuIG1vc3QgcmVhbGxvY3MKKwkJICogb25seSBkbyBncm93cyBhbnl3YXkKKwkJICovCisJCWlmIChuZXdzaXplPD1tYmkuUmVnaW9uU2l6ZSkKKwkJCXJldHVybiBwdHI7CisJCW1lbWNweShuZXdwdHIscHRyLG5ld3NpemUpOworCQlEUE1JX3hmcmVlKHB0cik7CisJfQogCXJldHVybiBuZXdwdHI7CiB9CiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMjkzLDYgKzI5OSwyMyBAQAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMHg1ODogLyogR0VUIE9SIFNFVCBNRU1PUlkvVU1CIEFMTE9DQVRJT04gU1RSQVRFR1kgKi8KKyAgICAgICAgICAgIFRSQUNFKGludDMxLCJHRVQgT1IgU0VUIE1FTU9SWS9VTUIgQUxMT0NBVElPTiBTVFJBVEVHWSBzdWJmdW5jdGlvbiAlZFxuIiwKKyAgICAgICAgICAgICAgICAgIEFMX3JlZyhjb250ZXh0KSk7CisgICAgICAgICAgICBzd2l0Y2ggKEFMX3JlZyhjb250ZXh0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgMHgwMDoKKyAgICAgICAgICAgICAgICBBWF9yZWcoY29udGV4dCkgPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAweDAyOgorICAgICAgICAgICAgICAgIEFYX3JlZyhjb250ZXh0KSA9IDA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDB4MDE6CisgICAgICAgICAgICBjYXNlIDB4MDM6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBSRVNFVF9DRkxBRyhjb250ZXh0KTsKKyAgICAgICAgICAgIGJyZWFrOwogCWNhc2UgMHg2MDogey8qIENBTk9OSUNBTElaRSBQQVRIICovCiAJCUxQQ1NUUiBwYXRoID0gKExQQ1NUUilET1NNRU1fTWFwUmVhbFRvTGluZWFyKChEU19yZWcoJnJlYWxtb2RlX2N0eCk8PDE2KStTSV9yZWcoJnJlYWxtb2RlX2N0eCkpOwogCkBAIC00NjAsOCArNDgzLDE4IEBACiAgKgogICogSGFuZGxlciBmb3IgaW50IDMxaCAoRFBNSSkuCiAgKi8KKwogdm9pZCBXSU5BUEkgSU5UX0ludDMxSGFuZGxlciggQ09OVEVYVCAqY29udGV4dCApCiB7CisgICAgLyoKKyAgICAgKiBOb3RlOiBGb3IgV2luMzJzIHByb2Nlc3NlcywgdGhlIHdob2xlIGxpbmVhciBhZGRyZXNzIHNwYWNlIGlzCisgICAgICogICAgICAgc2hpZnRlZCBieSAweDEwMDAwIHJlbGF0aXZlIHRvIHRoZSBPUyBsaW5lYXIgYWRkcmVzcyBzcGFjZS4KKyAgICAgKiAgICAgICBTZWUgdGhlIGNvbW1lbnQgaW4gbXNkb3MvdnhkLmMuCisgICAgICovCisgICAgRFdPUkQgb2Zmc2V0ID0gUFJPQ0VTU19DdXJyZW50KCktPmZsYWdzICYgUERCMzJfV0lOMzJTX1BST0MgPyAweDEwMDAwIDogMDsKKyAgICAjZGVmaW5lIEFwcFRvV2luZShhZGRyKSAoKGFkZHIpPyAoKERXT1JEKShhZGRyKSkgKyBvZmZzZXQgOiAwKQorICAgICNkZWZpbmUgV2luZVRvQXBwKGFkZHIpICgoYWRkcik/ICgoRFdPUkQpKGFkZHIpKSAtIG9mZnNldCA6IDApCisKICAgICBEV09SRCBkdzsKICAgICBCWVRFICpwdHI7CiAKQEAgLTU0NywxNSArNTgwLDE3IEBACiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICB7Ci0gICAgICAgICAgICBDWF9yZWcoY29udGV4dCkgPSBISVdPUkQoZHcpOwotICAgICAgICAgICAgRFhfcmVnKGNvbnRleHQpID0gTE9XT1JEKGR3KTsKKyAgICAgICAgICAgIENYX3JlZyhjb250ZXh0KSA9IEhJV09SRChXaW5lVG9BcHAoZHcpKTsKKyAgICAgICAgICAgIERYX3JlZyhjb250ZXh0KSA9IExPV09SRChXaW5lVG9BcHAoZHcpKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgMHgwMDA3OiAgLyogU2V0IHNlbGVjdG9yIGJhc2UgYWRkcmVzcyAqLwotICAgIAlUUkFDRShpbnQzMSwic2V0IHNlbGVjdG9yIGJhc2UgYWRkcmVzcyAoMHglMDR4LDB4JTA4bHgpXG4iLEJYX3JlZyhjb250ZXh0KSxNQUtFTE9ORyhEWF9yZWcoY29udGV4dCksQ1hfcmVnKGNvbnRleHQpKSk7Ci0gICAgICAgIFNldFNlbGVjdG9yQmFzZSggQlhfcmVnKGNvbnRleHQpLAotICAgICAgICAgICAgICAgICAgICAgICAgIE1BS0VMT05HKCBEWF9yZWcoY29udGV4dCksIENYX3JlZyhjb250ZXh0KSApICk7CisgICAgCVRSQUNFKGludDMxLCAic2V0IHNlbGVjdG9yIGJhc2UgYWRkcmVzcyAoMHglMDR4LDB4JTA4bHgpXG4iLAorICAgICAgICAgICAgICAgICAgICAgQlhfcmVnKGNvbnRleHQpLAorICAgICAgICAgICAgICAgICAgICAgQXBwVG9XaW5lKE1BS0VMT05HKERYX3JlZyhjb250ZXh0KSxDWF9yZWcoY29udGV4dCkpKSk7CisgICAgICAgIFNldFNlbGVjdG9yQmFzZShCWF9yZWcoY29udGV4dCksCisgICAgICAgICAgICAgICAgICAgICAgICBBcHBUb1dpbmUoTUFLRUxPTkcoRFhfcmVnKGNvbnRleHQpLCBDWF9yZWcoY29udGV4dCkpKSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSAweDAwMDg6ICAvKiBTZXQgc2VsZWN0b3IgbGltaXQgKi8KQEAgLTU4Myw2ICs2MTgsOCBAQAogICAgICAgICB7CiAgICAgICAgICAgICBsZHRfZW50cnkgZW50cnk7CiAgICAgICAgICAgICBMRFRfR2V0RW50cnkoIFNFTEVDVE9SX1RPX0VOVFJZKCBCWF9yZWcoY29udGV4dCkgKSwgJmVudHJ5ICk7CisgICAgICAgICAgICBlbnRyeS5iYXNlID0gV2luZVRvQXBwKGVudHJ5LmJhc2UpOworCiAgICAgICAgICAgICAvKiBGSVhNRTogc2hvdWxkIHVzZSBFUzpFREkgZm9yIDMyLWJpdCBjbGllbnRzICovCiAgICAgICAgICAgICBMRFRfRW50cnlUb0J5dGVzKCBQVFJfU0VHX09GRl9UT19MSU4oIEVTX3JlZyhjb250ZXh0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRElfcmVnKGNvbnRleHQpICksICZlbnRyeSApOwpAQCAtNTk1LDYgKzYzMiw4IEBACiAgICAgICAgICAgICBsZHRfZW50cnkgZW50cnk7CiAgICAgICAgICAgICBMRFRfQnl0ZXNUb0VudHJ5KCBQVFJfU0VHX09GRl9UT19MSU4oIEVTX3JlZyhjb250ZXh0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRElfcmVnKGNvbnRleHQpICksICZlbnRyeSApOworICAgICAgICAgICAgZW50cnkuYmFzZSA9IEFwcFRvV2luZShlbnRyeS5iYXNlKTsKKwogICAgICAgICAgICAgTERUX1NldEVudHJ5KCBTRUxFQ1RPUl9UT19FTlRSWSggQlhfcmVnKGNvbnRleHQpICksICZlbnRyeSApOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpAQCAtNjIxLDcgKzY2MCw3IEBACiAJYnJlYWs7CiAKICAgICBjYXNlIDB4MDIwNTogIC8qIFNldCBwcm90ZWN0ZWQgbW9kZSBpbnRlcnJ1cHQgdmVjdG9yICovCi0gICAgCVRSQUNFKGludDMxLCJzZXQgcHJvdGVjdGVkIG1vZGUgaW50ZXJydXB0IGhhbmRsZXIgKDB4JTAyeCwweCUwOGx4KSwgc3R1YiFcbiIsCisgICAgCVRSQUNFKGludDMxLCJzZXQgcHJvdGVjdGVkIG1vZGUgaW50ZXJydXB0IGhhbmRsZXIgKDB4JTAyeCwlcCksIHN0dWIhXG4iLAogICAgICAgICAgICAgQkxfcmVnKGNvbnRleHQpLFBUUl9TRUdfT0ZGX1RPX0xJTihDWF9yZWcoY29udGV4dCksRFhfcmVnKGNvbnRleHQpKSk7CiAJSU5UX1NldEhhbmRsZXIoIEJMX3JlZyhjb250ZXh0KSwKICAgICAgICAgICAgICAgICAgICAgICAgIChGQVJQUk9DMTYpUFRSX1NFR19PRkZfVE9fU0VHUFRSKCBDWF9yZWcoY29udGV4dCksCkBAIC02ODYsMjcgKzcyNSwzMSBAQAogICAgICAgICAgICAgQVhfcmVnKGNvbnRleHQpID0gMHg4MDEyOyAgLyogbGluZWFyIG1lbW9yeSBub3QgYXZhaWxhYmxlICovCiAgICAgICAgICAgICBTRVRfQ0ZMQUcoY29udGV4dCk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBCWF9yZWcoY29udGV4dCkgPSBTSV9yZWcoY29udGV4dCkgPSBISVdPUkQocHRyKTsKLSAgICAgICAgICAgIENYX3JlZyhjb250ZXh0KSA9IERJX3JlZyhjb250ZXh0KSA9IExPV09SRChwdHIpOworICAgICAgICAgICAgQlhfcmVnKGNvbnRleHQpID0gU0lfcmVnKGNvbnRleHQpID0gSElXT1JEKFdpbmVUb0FwcChwdHIpKTsKKyAgICAgICAgICAgIENYX3JlZyhjb250ZXh0KSA9IERJX3JlZyhjb250ZXh0KSA9IExPV09SRChXaW5lVG9BcHAocHRyKSk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIDB4MDUwMjogIC8qIEZyZWUgbWVtb3J5IGJsb2NrICovCi0gICAgICAgIFRSQUNFKGludDMxLCJmcmVlIG1lbW9yeSBibG9jayAoMHglMDhseClcbiIsTUFLRUxPTkcoRElfcmVnKGNvbnRleHQpLFNJX3JlZyhjb250ZXh0KSkpOwotCURQTUlfeGZyZWUoKHZvaWQgKilNQUtFTE9ORyhESV9yZWcoY29udGV4dCksIFNJX3JlZyhjb250ZXh0KSkpOworICAgICAgICBUUkFDRShpbnQzMSwgImZyZWUgbWVtb3J5IGJsb2NrICgweCUwOGx4KVxuIiwKKyAgICAgICAgICAgICAgICAgICAgIEFwcFRvV2luZShNQUtFTE9ORyhESV9yZWcoY29udGV4dCksU0lfcmVnKGNvbnRleHQpKSkpOworCURQTUlfeGZyZWUoICh2b2lkICopQXBwVG9XaW5lKE1BS0VMT05HKERJX3JlZyhjb250ZXh0KSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJX3JlZyhjb250ZXh0KSkpICk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSAweDA1MDM6ICAvKiBSZXNpemUgbWVtb3J5IGJsb2NrICovCi0gICAgICAgIFRSQUNFKGludDMxLCJyZXNpemUgbWVtb3J5IGJsb2NrICgweCUwOGx4LCVsZClcbiIsTUFLRUxPTkcoRElfcmVnKGNvbnRleHQpLFNJX3JlZyhjb250ZXh0KSksTUFLRUxPTkcoQ1hfcmVnKGNvbnRleHQpLEJYX3JlZyhjb250ZXh0KSkpOworICAgICAgICBUUkFDRShpbnQzMSwgInJlc2l6ZSBtZW1vcnkgYmxvY2sgKDB4JTA4bHgsJWxkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgIEFwcFRvV2luZShNQUtFTE9ORyhESV9yZWcoY29udGV4dCksU0lfcmVnKGNvbnRleHQpKSksCisgICAgICAgICAgICAgICAgICAgICBNQUtFTE9ORyhDWF9yZWcoY29udGV4dCksQlhfcmVnKGNvbnRleHQpKSk7CiAgICAgICAgIGlmICghKHB0ciA9IChCWVRFICopRFBNSV94cmVhbGxvYygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopTUFLRUxPTkcoRElfcmVnKGNvbnRleHQpLFNJX3JlZyhjb250ZXh0KSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1BS0VMT05HKENYX3JlZyhjb250ZXh0KSxCWF9yZWcoY29udGV4dCkpKSkpCisgICAgICAgICAgICAgICAgKHZvaWQgKilBcHBUb1dpbmUoTUFLRUxPTkcoRElfcmVnKGNvbnRleHQpLFNJX3JlZyhjb250ZXh0KSkpLAorICAgICAgICAgICAgICAgIE1BS0VMT05HKENYX3JlZyhjb250ZXh0KSxCWF9yZWcoY29udGV4dCkpKSkpCiAgICAgICAgIHsKICAgICAgICAgICAgIEFYX3JlZyhjb250ZXh0KSA9IDB4ODAxMjsgIC8qIGxpbmVhciBtZW1vcnkgbm90IGF2YWlsYWJsZSAqLwogICAgICAgICAgICAgU0VUX0NGTEFHKGNvbnRleHQpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQlhfcmVnKGNvbnRleHQpID0gU0lfcmVnKGNvbnRleHQpID0gSElXT1JEKHB0cik7Ci0gICAgICAgICAgICBDWF9yZWcoY29udGV4dCkgPSBESV9yZWcoY29udGV4dCkgPSBMT1dPUkQocHRyKTsKKyAgICAgICAgICAgIEJYX3JlZyhjb250ZXh0KSA9IFNJX3JlZyhjb250ZXh0KSA9IEhJV09SRChXaW5lVG9BcHAocHRyKSk7CisgICAgICAgICAgICBDWF9yZWcoY29udGV4dCkgPSBESV9yZWcoY29udGV4dCkgPSBMT1dPUkQoV2luZVRvQXBwKHB0cikpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogCkBAIC03NDksOCArNzkyLDggQEAKICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgIHsKLSAgICAgICAgICAgICBCWF9yZWcoY29udGV4dCkgPSBISVdPUkQocHRyKTsKLSAgICAgICAgICAgICBDWF9yZWcoY29udGV4dCkgPSBMT1dPUkQocHRyKTsKKyAgICAgICAgICAgICBCWF9yZWcoY29udGV4dCkgPSBISVdPUkQoV2luZVRvQXBwKHB0cikpOworICAgICAgICAgICAgIENYX3JlZyhjb250ZXh0KSA9IExPV09SRChXaW5lVG9BcHAocHRyKSk7CiAgICAgICAgICAgICAgUkVTRVRfQ0ZMQUcoY29udGV4dCk7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKQEAgLTc2MSw0ICs4MDQsNyBAQAogICAgICAgICBTRVRfQ0ZMQUcoY29udGV4dCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKworICAgICN1bmRlZiBBcHBUb1dpbmUKKyAgICAjdW5kZWYgV2luZVRvQXBwCiB9CmRpZmYgLS1naXQgYS9tc2Rvcy9pbnQyMS5jIGIvbXNkb3MvaW50MjEuYwppbmRleCBjYmIxODFjLi5lYzg1NDM5IDEwMDY0NAotLS0gYS9tc2Rvcy9pbnQyMS5jCisrKyBiL21zZG9zL2ludDIxLmMKQEAgLTE2NDksNyArMTY0OSw3IEBACiAJICAgICooV09SRCopKGRhdGFwdHIrMSkgPSA0MTsKIAkgICAgKihXT1JEKikoZGF0YXB0ciszKSA9IFdJTkVfTGFuZ3VhZ2VJZDsKIAkgICAgKihXT1JEKikoZGF0YXB0cis1KSA9IENvZGVQYWdlOwotCSAgICAqKERXT1JEKikoZGF0YXB0cisweDE5KSA9IE5VTEw7IC8qIEZJWE1FOiBwdHIgdG8gY2FzZSBtYXAgcm91dGluZSAqLworCSAgICAqKERXT1JEKikoZGF0YXB0cisweDE5KSA9IDA7IC8qIEZJWE1FOiBwdHIgdG8gY2FzZSBtYXAgcm91dGluZSAqLwogCSAgICBicmVhazsKIAljYXNlIDB4MDY6CiAJICAgIFRSQUNFKGludDIxLCJcdGdldCBwb2ludGVyIHRvIGNvbGxhdGluZyBzZXF1ZW5jZSB0YWJsZVxuIik7CmRpZmYgLS1naXQgYS9tc2Rvcy9pbnQyZi5jIGIvbXNkb3MvaW50MmYuYwppbmRleCBlNmEwZGQyLi45MTQzMzNhIDEwMDY0NAotLS0gYS9tc2Rvcy9pbnQyZi5jCisrKyBiL21zZG9zL2ludDJmLmMKQEAgLTUsNiArNSw3IEBACiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CisKICNpbmNsdWRlICJsZHQuaCIKICNpbmNsdWRlICJkcml2ZS5oIgogI2luY2x1ZGUgIm1zZG9zLmgiCkBAIC0yMjgsNiArMjI5LDEzIEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKIAorI2lmZGVmIGxpbnV4CisJY2FzZSAweDEwOiAvKiBkaXJlY3QgZHJpdmVyIGFjY2VzICovCisJICAgIGRvX21zY2RleF9kZChjb250ZXh0LGRvcmVhbG1vZGUpOworCSAgICBicmVhazsKKworI2VuZGlmCisKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIEZJWE1FKGludCwgIlVuaW1wbGVtZW50ZWQgTVNDREVYIGZ1bmN0aW9uIDB4JTAyWC5cbiIsIEFMX3JlZyhjb250ZXh0KSk7CiAgICAgICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL21zZG9zL3Z4ZC5jIGIvbXNkb3MvdnhkLmMKaW5kZXggNzA4Y2QzNi4uMTg2YmRiMyAxMDA2NDQKLS0tIGEvbXNkb3MvdnhkLmMKKysrIGIvbXNkb3MvdnhkLmMKQEAgLTQsOSArNCwxNyBAQAogICogQ29weXJpZ2h0IDE5OTUgQW5hbmQgS3VtcmlhCiAgKi8KIAorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8bWVtb3J5Lmg+CiAjaW5jbHVkZSAid2luZG93cy5oIgorI2luY2x1ZGUgIndpbmJhc2UuaCIKICNpbmNsdWRlICJtc2Rvcy5oIgogI2luY2x1ZGUgIm1pc2NlbXUuaCIKKyNpbmNsdWRlICJzZWxlY3RvcnMuaCIKKyNpbmNsdWRlICJtb2R1bGUuaCIKKyNpbmNsdWRlICJ0YXNrLmgiCisjaW5jbHVkZSAicHJvY2Vzcy5oIgorI2luY2x1ZGUgImZpbGUuaCIKICNpbmNsdWRlICJkZWJ1Zy5oIgogCiAKQEAgLTE5MCwzICsxOTgsMTE4MCBAQAogICAgIH0KIH0KIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgVlhEX1dpbjMycworICoKKyAqIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIHNlcnZpY2VzIG9mIHRoZSBXaW4zMnMgVnhELgorICogU2luY2Ugb2ZmaWNpYWwgZG9jdW1lbnRhdGlvbiBvZiB0aGVzZSBkb2VzIG5vdCBzZWVtIHRvIGJlIGF2YWlsYWJsZSwKKyAqIGNlcnRhaW4gYXJndW1lbnRzIG9mIHNvbWUgb2YgdGhlIHNlcnZpY2VzIHJlbWFpbiB1bmNsZWFyLiAgCisgKgorICogRklYTUU6IFRoZSBmb2xsb3dpbmcgc2VydmljZXMgYXJlIGN1cnJlbnRseSB1bmltcGxlbWVudGVkOiAKKyAqICAgICAgICBFeGNlcHRpb24gaGFuZGxpbmcgICAgICAoMHgwMSwgMHgxQykKKyAqICAgICAgICBEZWJ1Z2dlciBzdXBwb3J0ICAgICAgICAoMHgwQywgMHgxNCwgMHgxNykKKyAqICAgICAgICBMb3ctbGV2ZWwgbWVtb3J5IGFjY2VzcyAoMHgwMiwgMHgwMywgMHgwQSwgMHgwQikKKyAqICAgICAgICBNZW1vcnkgU3RhdGlzdGljcyAgICAgICAoMHgxQikKKyAqICAgICAgICAKKyAqCisgKiBXZSBoYXZlIGEgc3BlY2lmaWMgcHJvYmxlbSBydW5uaW5nIFdpbjMycyBvbiBMaW51eCAoYW5kIHByb2JhYmx5IGFsc28KKyAqIHRoZSBvdGhlciB4ODYgdW5peGVzKSwgc2luY2UgV2luMzJzIHRyaWVzIHRvIGFsbG9jYXRlIGl0cyBtYWluICdmbGF0CisgKiBjb2RlL2RhdGEgc2VnbWVudCcgc2VsZWN0b3JzIHdpdGggYSBiYXNlIG9mIDB4ZmZmZjAwMDAgKGFuZCBsaW1pdCA0R0IpLgorICogVGhlIHJhdGlvbmFsZSBmb3IgdGhpcyBzZWVtcyB0byBiZSB0aGF0IHRoZXkgd2FudCBvbmUgdGhlIG9uZSBoYW5kIHRvIAorICogYmUgYWJsZSB0byBsZWF2ZSB0aGUgV2luIDMuMSBtZW1vcnkgKHN0YXJ0aW5nIHdpdGggdGhlIG1haW4gRE9TIG1lbW9yeSkgCisgKiBhdCBsaW5lYXIgYWRkcmVzcyAwLCBidXQgd2FudCBhdCBvdGhlciBoYW5kIHRvIGhhdmUgb2Zmc2V0IDAgb2YgdGhlCisgKiBmbGF0IGRhdGEvY29kZSBzZWdtZW50IHBvaW50IHRvIGFuIHVubWFwcGVkIHBhZ2UgKHRvIGNhdGNoIE5VTEwgcG9pbnRlcgorICogYWNjZXNzZXMpLiBIZW5jZSB0aGV5IGFsbG9jYXRlIHRoZSBmbGF0IHNlZ21lbnRzIHdpdGggYSBiYXNlIG9mIDB4ZmZmZjAwMDAKKyAqIHNvIHRoYXQgdGhlIFdpbiAzLjEgbWVtb3J5IGFyZWEgYXQgbGluZWFyIGFkZHJlc3MgemVybyBzaG93cyB1cCBpbiB0aGUKKyAqIGZsYXQgc2VnbWVudHMgYXQgb2Zmc2V0IDB4MTAwMDAgKHNpbmNlIGxpbmVhciBhZGRyZXNzZXMgd3JhcCBhcm91bmQgYXQKKyAqIDRHQikuIFRvIGNvbXBlbnNhdGUgZm9yIHRoYXQgZGlzY3JlcGFuY3kgYmV0d2VlbiBmbGF0IHNlZ21lbnQgb2Zmc2V0cworICogYW5kIHBsYWluIGxpbmVhciBhZGRyZXNzZXMsIGFsbCBmbGF0IHBvaW50ZXJzIHBhc3NlZCBiZXR3ZWVuIHRoZSAzMi1iaXQKKyAqIGFuZCB0aGUgMTYtYml0IHBhcnRzIG9mIFdpbjMycyBhcmUgc2hpZnRlZCBieSAweDEwMDAwIGluIHRoZSBhcHByb3ByaWF0ZQorICogZGlyZWN0aW9uIGJ5IHRoZSBnbHVlIGNvZGUgKG1haW5seSkgaW4gVzMyU0tSTkwgYW5kIFdJTjMyUzE2LgorICoKKyAqIFRoZSBwcm9ibGVtIGZvciB1cyBpcyBub3cgdGhhdCBMaW51eCBkb2VzIG5vdCBhbGxvdyBhIExEVCBzZWxlY3RvciB3aXRoCisgKiBiYXNlIDB4ZmZmZjAwMDAgdG8gYmUgY3JlYXRlZCwgc2luY2UgaXQgd291bGQgJ3NlZScgYSBwYXJ0IG9mIHRoZSBrZXJuZWwKKyAqIGFkZHJlc3Mgc3BhY2UuIFRvIGFkZHJlc3MgdGhpcyBwcm9ibGVtIHdlIGludHJvZHVjZSAqYW5vdGhlciogb2Zmc2V0OgorICogV2UgYWRkIDB4MTAwMDAgdG8gZXZlcnkgbGluZWFyIGFkZHJlc3Mgd2UgZ2V0IGFzIGFuIGFyZ3VtZW50IGZyb20gV2luMzJzLgorICogVGhpcyBtZWFucyBlc3BlY2lhbGx5IHRoYXQgdGhlIGZsYXQgY29kZS9kYXRhIHNlbGVjdG9ycyBnZXQgYWN0dWFsbHkKKyAqIGFsbG9jYXRlZCB3aXRoIGJhc2UgMHgwLCBzbyB0aGF0IGZsYXQgb2Zmc2V0cyBhbmQgKHJlYWwpIGxpbmVhciBhZGRyZXNzZXMKKyAqIGRvIGFnYWluIGFncmVlISAgSW4gZmFjdCwgZXZlcnkgY2FsbCBlLmcuIG9mIGEgV2luMzJzIFZ4RCBzZXJ2aWNlIG5vdworICogaGFzIGFsbCBwb2ludGVyIGFyZ3VtZW50cyAod2hpY2ggYXJlIG9mZnNldHMgaW4gdGhlIGZsYXQgZGF0YSBzZWdlbWVudCkKKyAqIGZpcnN0IHJlZHVjZWQgYnkgMHgxMDAwMCBieSB0aGUgVzMyU0tSTkwgZ2x1ZSBjb2RlLCBhbmQgdGhlbiBhZ2FpbgorICogaW5jcmVhc2VkIGJ5IDB4MTAwMDAgYnkgKm91ciogY29kZS4KKyAqCisgKiBOb3RlIHRoYXQgdG8ga2VlcCBldmVyeXRoaW5nIGNvbnNpc3RlbnQsIHRoaXMgb2Zmc2V0IGhhcyB0byBiZSBhcHBsaWVkIGJ5CisgKiBldmVyeSBXaW5lIGZ1bmN0aW9uIHRoYXQgb3BlcmF0ZXMgb24gJ2xpbmVhciBhZGRyZXNzZXMnIHBhc3NlZCB0byBpdCBieQorICogV2luMzJzLiBGb3J0dW5hdGVseSwgc2luY2UgV2luMzJzIGRvZXMgbm90IGRpcmVjdGx5IGNhbGwgYW55IFdpbmUgMzItYml0CisgKiBBUEkgcm91dGluZXMsIHRoaXMgYWZmZWN0cyBvbmx5IHR3byBsb2NhdGlvbnM6IHRoaXMgVnhEIGFuZCB0aGUgRFBNSQorICogaGFuZGxlci4gKE5PVEU6IFNob3VsZCBhbnkgV2luMzJzIGFwcGxpY2F0aW9uIHBhc3MgYSBsaW5lYXIgYWRkcmVzcyB0bworICogYW55IHJvdXRpbmUgYXBhcnQgZnJvbSB0aG9zZSwgZS5nLiBzb21lIG90aGVyIFZ4RCBoYW5kbGVyLCB0aGF0IGNvZGUKKyAqIHdvdWxkIGhhdmUgdG8gdGFrZSB0aGUgb2Zmc2V0IGludG8gYWNjb3VudCBhcyB3ZWxsISkKKyAqCisgKiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIG9mZnNldCBpcyB0cmlnZ2VyZWQgYnkgbWFya2luZyB0aGUgY3VycmVudCBwcm9jZXNzCisgKiBhcyBhIFdpbjMycyBwcm9jZXNzIGJ5IHNldHRpbmcgdGhlIFBEQjMyX1dJTjMyU19QUk9DIGZsYWcgaW4gdGhlIHByb2Nlc3MKKyAqIGRhdGFiYXNlLiBUaGlzIGlzIGRvbmUgdGhlIGZpcnN0IHRpbWUgYW55IGFwcGxpY2F0aW9uIGNhbGxzIHRoZSBHZXRWZXJzaW9uKCkKKyAqIHNlcnZpY2Ugb2YgdGhlIFdpbjMycyBWeEQuIChOb3RlIHRoYXQgdGhlIGZsYWcgaXMgbmV2ZXIgcmVtb3ZlZC4pCisgKiAKKyAqLworCit2b2lkIFZYRF9XaW4zMnMoIENPTlRFWFQgKmNvbnRleHQgKQoreworICAgICNkZWZpbmUgQXBwVG9XaW5lKGFkZHIpICgoYWRkcik/ICgoTFBCWVRFKShhZGRyKSkgKyAweDEwMDAwIDogTlVMTCkKKyAgICAjZGVmaW5lIFdpbmVUb0FwcChhZGRyKSAoKGFkZHIpPyAoKERXT1JEKSAoYWRkcikpIC0gMHgxMDAwMCA6IDApCisKKyAgICBzd2l0Y2ggKEFYX3JlZyhjb250ZXh0KSkKKyAgICB7CisgICAgY2FzZSAweDAwMDA6IC8qIEdldCBWZXJzaW9uICovCisgICAgICAgIC8qCisgICAgICAgICAqIElucHV0OiAgIE5vbmUKKyAgICAgICAgICoKKyAgICAgICAgICogT3V0cHV0OiAgRUFYOiBMb1dvcmQ6IFdpbjMycyBWZXJzaW9uICgxLjMwKQorICAgICAgICAgKiAgICAgICAgICAgICAgIEhpV29yZDogVnhEIFZlcnNpb24gKDIwMCkKKyAgICAgICAgICoKKyAgICAgICAgICogICAgICAgICAgRUJYOiBCdWlsZCAoMTcyKQorICAgICAgICAgKgorICAgICAgICAgKiAgICAgICAgICBFQ1g6ID8/PyAgICgxKQorICAgICAgICAgKgorICAgICAgICAgKiAgICAgICAgICBFRFg6IERlYnVnZ2luZyBGbGFncworICAgICAgICAgKgorICAgICAgICAgKiAgICAgICAgICBFREk6IEVycm9yIEZsYWcgCisgICAgICAgICAqICAgICAgICAgICAgICAgMCBpZiBPSywKKyAgICAgICAgICogICAgICAgICAgICAgICAxIGlmIFZNQ1BEIFZ4RCBub3QgZm91bmQKKyAgICAgICAgICovCisKKyAgICAgICAgVFJBQ0UodnhkLCAiR2V0VmVyc2lvbigpXG4iKTsKKyAgICAgICAgCisJRUFYX3JlZyhjb250ZXh0KSA9IFZYRF9XaW5WZXJzaW9uKCkgfCAoMjAwIDw8IDE2KTsKKyAgICAgICAgRUJYX3JlZyhjb250ZXh0KSA9IDA7CisgICAgICAgIEVDWF9yZWcoY29udGV4dCkgPSAwOworICAgICAgICBFRFhfcmVnKGNvbnRleHQpID0gMDsKKyAgICAgICAgRURJX3JlZyhjb250ZXh0KSA9IDA7CisKKyAgICAgICAgLyogCisgICAgICAgICAqIElmIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgd2UgYXJlIGNhbGxlZCBmb3IgdGhpcyBwcm9jZXNzLAorICAgICAgICAgKiBoYWNrIHRoZSBtZW1vcnkgaW1hZ2Ugb2YgV0lOMzJTMTYgc28gdGhhdCBpdCBkb2Vzbid0IHRyeQorICAgICAgICAgKiB0byBhY2Nlc3MgdGhlIEdEVCBkaXJlY3RseSAuLi4KKyAgICAgICAgICoKKyAgICAgICAgICogVGhlIGZpcnN0IGNvZGUgc2VnbWVudCBvZiBXSU4zMlMxNiAodmVyc2lvbiAxLjMwKSBjb250YWlucyAKKyAgICAgICAgICogYW4gdW5leHBvcnRlZCBmdW5jdGlvbiBzb21ld2hlcmUgYmV0d2VlbiB0aGUgZXhwb3J0ZWQgZnVuY3Rpb25zCisgICAgICAgICAqIFNldEZTIGFuZCBTdGFja0xpbmVhclRvU2VnbWVudGVkIHRoYXQgdHJpZXMgdG8gZmluZCBhIHNlbGVjdG9yCisgICAgICAgICAqIGluIHRoZSBMRFQgdGhhdCBtYXBzIHRvIHRoZSBtZW1vcnkgaW1hZ2Ugb2YgdGhlIExEVCBpdHNlbGYuCisgICAgICAgICAqIElmIGl0IHN1Y2NlZWRzLCBpdCBzdG9yZXMgdGhpcyBzZWxlY3RvciBpbnRvIGEgZ2xvYmFsIHZhcmlhYmxlCisgICAgICAgICAqIHdoaWNoIHdpbGwgYmUgdXNlZCB0byBzcGVlZCB1cCBleGVjdXRpb24gYnkgdXNpbmcgdGhpcyBzZWxlY3RvcgorICAgICAgICAgKiB0byBtb2RpZnkgdGhlIExEVCBkaXJlY3RseSBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBEUE1JIGNhbGxzLgorICAgICAgICAgKgorICAgICAgICAgKiBUbyBwZXJmb3JtIHRoaXMgc2VhcmNoIG9mIHRoZSBMRFQsIHRoaXMgZnVuY3Rpb24gdXNlcyB0aGUKKyAgICAgICAgICogc2dkdCBhbmQgc2xkdCBpbnN0cnVjdGlvbnMgdG8gZmluZCB0aGUgbGluZWFyIGFkZHJlc3Mgb2YKKyAgICAgICAgICogdGhlIChHRFQgYW5kIHRoZW4pIExEVC4gV2hpbGUgdGhvc2UgaW5zdHJ1Y3Rpb25zIHRoZW1zZWx2ZXMKKyAgICAgICAgICogZXhlY3V0ZSB3aXRob3V0IHByb2JsZW0sIHRoZSBsaW5lYXIgYWRkcmVzcyB0aGF0IHNnZHQgcmV0dXJucworICAgICAgICAgKiBwb2ludHMgKGF0IGxlYXN0IHVuZGVyIExpbnV4KSB0byB0aGUga2VybmVsIGFkZHJlc3Mgc3BhY2UsIHNvCisgICAgICAgICAqIHRoYXQgYW55IHN1YnNlcXVlbnQgYWNjZXNzIGxlYWRzIHRvIGEgc2VnZmF1bHQuCisgICAgICAgICAqCisgICAgICAgICAqIEZvcnR1bmF0ZWx5LCBXSU4zMlMxNiBzdGlsbCBjb250YWlucyBhcyBhIGZhbGxiYWNrIG9wdGlvbiB0aGUKKyAgICAgICAgICogbWVjaGFuaXNtIG9mIHVzaW5nIERQTUkgY2FsbHMgdG8gbW9kaWZ5IExEVCBzZWxlY3RvcnMgaW5zdGVhZAorICAgICAgICAgKiBvZiBkaXJlY3Qgd3JpdGVzIHRvIHRoZSBMRFQuIFRodXMgd2UgY2FuIGNpcmN1bXZlbnQgdGhlIHByb2JsZW0KKyAgICAgICAgICogYnkgc2ltcGx5IHJlcGxhY2luZyB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgb2ZmZW5kaW5nIGZ1bmN0aW9uCisgICAgICAgICAqIHdpdGggYW4gJ3JldGYnIGluc3RydWN0aW9uLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGdsb2JhbCB2YXJpYWJsZQorICAgICAgICAgKiBzdXBwb3NlZCB0byBjb250YWluIHRoZSBMRFQgYWxpYXMgc2VsZWN0b3Igd2lsbCByZW1haW4gemVybywKKyAgICAgICAgICogYW5kIGhlbmNlIFdJTjMyUzE2IHdpbGwgZmFsbCBiYWNrIHRvIHVzaW5nIERQTUkgY2FsbHMuCisgICAgICAgICAqCisgICAgICAgICAqIFRoZSBoZXVyaXN0aWMgd2UgZW1wbG95IHRvIF9maW5kXyB0aGF0IGZ1bmN0aW9uIGlzIGFzIGZvbGxvd3M6CisgICAgICAgICAqIFdlIHNlYXJjaCBiZXR3ZWVuIHRoZSBhZGRyZXNzZXMgb2YgdGhlIGV4cG9ydGVkIHN5bWJvbHMgU2V0RlMKKyAgICAgICAgICogYW5kIFN0YWNrTGluZWFyVG9TZWdtZW50ZWQgZm9yIHRoZSBieXRlIHNlcXVlbmNlICcwRiAwMSAwNCcKKyAgICAgICAgICogKHRoaXMgaXMgdGhlIG9wY29kZSBvZiAnc2dkdCBbc2ldJykuIFdlIHRoZW4gc2VhcmNoIGJhY2t3YXJkcworICAgICAgICAgKiBmcm9tIHRoaXMgYWRkcmVzcyBmb3IgdGhlIGxhc3Qgb2NjdXJyYW5jZSBvZiAnQ0InIChyZXRmKSB0aGF0IG1hcmtzCisgICAgICAgICAqIHRoZSBlbmQgb2YgdGhlIHByZWNlZWRpbmcgZnVuY3Rpb24uIFRoZSBmb2xsb3dpbmcgYnl0ZSAod2hpY2gKKyAgICAgICAgICogc2hvdWxkIG5vdyBiZSB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgZnVuY3Rpb24gd2UgYXJlIGxvb2tpbmcgZm9yKQorICAgICAgICAgKiB3aWxsIGJlIHJlcGxhY2VkIGJ5ICdDQicgKHJldGYpLgorICAgICAgICAgKgorICAgICAgICAgKiBUaGlzIGhldXJpc3RpYyB3b3JrcyBmb3IgdGhlIHJldGFpbCBhcyB3ZWxsIGFzIHRoZSBkZWJ1ZyB2ZXJzaW9uCisgICAgICAgICAqIG9mIFdpbjMycyB2ZXJzaW9uIDEuMzAuIEZvciB2ZXJzaW9ucyBlYXJsaWVyIHRoYW4gdGhhdCB0aGlzCisgICAgICAgICAqIGhhY2sgc2hvdWxkIG5vdCBiZSBuZWNlc3NhcnkgYXQgYWxsLCBzaW5jZSB0aGUgd2hvbGUgbWVjaGFuaXNtCisgICAgICAgICAqICgnUEVSRjEzMCcpIHdhcyBpbnRyb2R1Y2VkIG9ubHkgaW4gMS4zMCB0byBpbXByb3ZlIHRoZSBvdmVyYWxsCisgICAgICAgICAqIHBlcmZvcm1hbmNlIG9mIFdpbjMycy4KKyAgICAgICAgICovCisKKyAgICAgICAgaWYgKCEoUFJPQ0VTU19DdXJyZW50KCktPmZsYWdzICYgUERCMzJfV0lOMzJTX1BST0MpKQorICAgICAgICB7CisgICAgICAgICAgICBITU9EVUxFMTYgaE1vZHVsZSA9IEdldE1vZHVsZUhhbmRsZTE2KCJ3aW4zMnMxNiIpOworICAgICAgICAgICAgU0VHUFRSIGZ1bmMxID0gKFNFR1BUUilXSU4zMl9HZXRQcm9jQWRkcmVzczE2KGhNb2R1bGUsICJTZXRGUyIpOworICAgICAgICAgICAgU0VHUFRSIGZ1bmMyID0gKFNFR1BUUilXSU4zMl9HZXRQcm9jQWRkcmVzczE2KGhNb2R1bGUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU3RhY2tMaW5lYXJUb1NlZ21lbnRlZCIpOworCisgICAgICAgICAgICBpZiAoICAgaE1vZHVsZSAmJiBmdW5jMSAmJiBmdW5jMiAKKyAgICAgICAgICAgICAgICAmJiBTRUxFQ1RPUk9GKGZ1bmMxKSA9PSBTRUxFQ1RPUk9GKGZ1bmMyKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBCWVRFICpzdGFydCA9IFBUUl9TRUdfVE9fTElOKGZ1bmMxKTsKKyAgICAgICAgICAgICAgICBCWVRFICplbmQgICA9IFBUUl9TRUdfVE9fTElOKGZ1bmMyKTsKKyAgICAgICAgICAgICAgICBCWVRFICpwLCAqcmV0diA9IE5VTEw7CisgICAgICAgICAgICAgICAgaW50IGZvdW5kID0gMDsKKworICAgICAgICAgICAgICAgIGZvciAocCA9IHN0YXJ0OyBwIDwgZW5kOyBwKyspCisgICAgICAgICAgICAgICAgICAgIGlmICgqcCA9PSAweENCKSBmb3VuZCA9IDAsIHJldHYgPSBwOworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgqcCA9PSAweDBGKSBmb3VuZCA9IDE7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCpwID09IDB4MDEgJiYgZm91bmQgPT0gMSkgZm91bmQgPSAyOworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgqcCA9PSAweDA0ICYmIGZvdW5kID09IDIpIHsgZm91bmQgPSAzOyBicmVhazsgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGZvdW5kID0gMDsKKworICAgICAgICAgICAgICAgIGlmIChmb3VuZCA9PSAzICYmIHJldHYpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBUUkFDRSh2eGQsICJQRVJGMTMwIGhhY2s6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUmVwbGFjaW5nIGJ5dGUgJTAyWCBhdCBvZmZzZXQgJTA0WDolMDRYXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoocmV0disxKSwgU0VMRUNUT1JPRihmdW5jMSksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0ZGU0VUT0YoZnVuYzEpICsgcmV0disxLXN0YXJ0KTsKKworICAgICAgICAgICAgICAgICAgICAqKHJldHYrMSkgPSAoQllURSkweENCOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qIAorICAgICAgICAgKiBNYXJrIHByb2Nlc3MgYXMgV2luMzJzLCBzbyB0aGF0IHN1YnNlcXVlbnQgRFBNSSBjYWxscworICAgICAgICAgKiB3aWxsIHBlcmZvcm0gdGhlIEFwcFRvV2luZS9XaW5lVG9BcHAgYWRkcmVzcyBzaGlmdC4KKyAgICAgICAgICovCisKKyAgICAgICAgUFJPQ0VTU19DdXJyZW50KCktPmZsYWdzIHw9IFBEQjMyX1dJTjMyU19QUk9DOworCWJyZWFrOworCisKKyAgICBjYXNlIDB4MDAwMTogLyogSW5zdGFsbCBFeGNlcHRpb24gSGFuZGxpbmcgKi8KKyAgICAgICAgLyoKKyAgICAgICAgICogSW5wdXQ6ICAgRUJYOiBGbGF0IGFkZHJlc3Mgb2YgVzMyU0tSTkwgRXhjZXB0aW9uIERhdGEKKyAgICAgICAgICoKKyAgICAgICAgICogICAgICAgICAgRUNYOiBMb1dvcmQ6IEZsYXQgQ29kZSBTZWxlY3RvcgorICAgICAgICAgKiAgICAgICAgICAgICAgIEhpV29yZDogRmxhdCBEYXRhIFNlbGVjdG9yCisgICAgICAgICAqCisgICAgICAgICAqICAgICAgICAgIEVEWDogRmxhdCBhZGRyZXNzIG9mIFczMlNLUk5MIEV4Y2VwdGlvbiBIYW5kbGVyIAorICAgICAgICAgKiAgICAgICAgICAgICAgICh0aGlzIGlzIGVxdWFsIHRvIFczMlNfQmFja1RvMzIgKyAweDQwKQorICAgICAgICAgKgorICAgICAgICAgKiAgICAgICAgICBFU0k6IFNFR1BUUiBLRVJORUwuSEFTR1BIQU5ETEVSCisgICAgICAgICAqCisgICAgICAgICAqICAgICAgICAgIEVESTogU0VHUFRSIHBoQ3VycmVudFRhc2sgKEtFUk5FTC5USEhPT0sgKyAweDEwKQorICAgICAgICAgKgorICAgICAgICAgKiBPdXRwdXQ6ICBFQVg6IDAgaWYgT0sKKyAgICAgICAgICovCisKKyAgICAgICAgVFJBQ0UodnhkLCAiWzAwMDFdIEVCWD0lbHggRUNYPSVseCBFRFg9JWx4IEVTST0lbHggRURJPSVseFxuIiwgCisgICAgICAgICAgICAgICAgICAgRUJYX3JlZyhjb250ZXh0KSwgRUNYX3JlZyhjb250ZXh0KSwgRURYX3JlZyhjb250ZXh0KSwKKyAgICAgICAgICAgICAgICAgICBFU0lfcmVnKGNvbnRleHQpLCBFRElfcmVnKGNvbnRleHQpKTsKKworICAgICAgICAvKiBGSVhNRSAqLworCisgICAgICAgIEVBWF9yZWcoY29udGV4dCkgPSAwOworICAgICAgICBicmVhazsKKworCisgICAgY2FzZSAweDAwMDI6IC8qIFNldCBQYWdlIEFjY2VzcyBGbGFncyAqLworICAgICAgICAvKgorICAgICAgICAgKiBJbnB1dDogICBFQlg6IE5ldyBhY2Nlc3MgZmxhZ3MKKyAgICAgICAgICogICAgICAgICAgICAgICBCaXQgMjogVXNlciBQYWdlIGlmIHNldCwgU3VwZXJ2aXNvciBQYWdlIGlmIGNsZWFyCisgICAgICAgICAqICAgICAgICAgICAgICAgQml0IDE6IFJlYWQtV3JpdGUgaWYgc2V0LCBSZWFkLU9ubHkgaWYgY2xlYXIKKyAgICAgICAgICoKKyAgICAgICAgICogICAgICAgICAgRUNYOiBTaXplIG9mIG1lbW9yeSBhcmVhIHRvIGNoYW5nZQorICAgICAgICAgKgorICAgICAgICAgKiAgICAgICAgICBFRFg6IEZsYXQgc3RhcnQgYWRkcmVzcyBvZiBtZW1vcnkgYXJlYQorICAgICAgICAgKgorICAgICAgICAgKiBPdXRwdXQ6ICBFQVg6IFNpemUgb2YgYXJlYSBjaGFuZ2VkCisgICAgICAgICAqLworCisgICAgICAgIFRSQUNFKHZ4ZCwgIlswMDAyXSBFQlg9JWx4IEVDWD0lbHggRURYPSVseFxuIiwgCisgICAgICAgICAgICAgICAgICAgRUJYX3JlZyhjb250ZXh0KSwgRUNYX3JlZyhjb250ZXh0KSwgRURYX3JlZyhjb250ZXh0KSk7CisKKyAgICAgICAgLyogRklYTUUgKi8KKworICAgICAgICBFQVhfcmVnKGNvbnRleHQpID0gRUNYX3JlZyhjb250ZXh0KTsKKyAgICAgICAgYnJlYWs7CisKKworICAgIGNhc2UgMHgwMDAzOiAvKiBHZXQgUGFnZSBBY2Nlc3MgRmxhZ3MgKi8KKyAgICAgICAgLyoKKyAgICAgICAgICogSW5wdXQ6ICAgRURYOiBGbGF0IGFkZHJlc3Mgb2YgcGFnZSB0byBxdWVyeQorICAgICAgICAgKgorICAgICAgICAgKiBPdXRwdXQ6ICBFQVg6IFBhZ2UgYWNjZXNzIGZsYWdzCisgICAgICAgICAqICAgICAgICAgICAgICAgQml0IDI6IFVzZXIgUGFnZSBpZiBzZXQsIFN1cGVydmlzb3IgUGFnZSBpZiBjbGVhcgorICAgICAgICAgKiAgICAgICAgICAgICAgIEJpdCAxOiBSZWFkLVdyaXRlIGlmIHNldCwgUmVhZC1Pbmx5IGlmIGNsZWFyCisgICAgICAgICAqLworCisgICAgICAgIFRSQUNFKHZ4ZCwgIlswMDAzXSBFRFg9JWx4XG4iLCBFRFhfcmVnKGNvbnRleHQpKTsKKworICAgICAgICAvKiBGSVhNRSAqLworCisgICAgICAgIEVBWF9yZWcoY29udGV4dCkgPSA2OworICAgICAgICBicmVhazsKKworCisgICAgY2FzZSAweDAwMDQ6IC8qIE1hcCBNb2R1bGUgKi8KKyAgICAgICAgLyoKKyAgICAgICAgICogSW5wdXQ6ICAgRUNYOiBJTVRFIChvZmZzZXQgaW4gTW9kdWxlIFRhYmxlKSBvZiBuZXcgbW9kdWxlCisgICAgICAgICAqCisgICAgICAgICAqICAgICAgICAgIEVEWDogRmxhdCBhZGRyZXNzIG9mIFdpbjMycyBNb2R1bGUgVGFibGUKKyAgICAgICAgICoKKyAgICAgICAgICogT3V0cHV0OiAgRUFYOiAwIGlmIE9LCisgICAgICAgICAqLworCisgICAgaWYgKCFFRFhfcmVnKGNvbnRleHQpIHx8IENYX3JlZyhjb250ZXh0KSA9PSAweEZGRkYpCisgICAgeworICAgICAgICBUUkFDRSh2eGQsICJNYXBNb2R1bGU6IEluaXRpYWxpemF0aW9uIGNhbGxcbiIpOworICAgICAgICBFQVhfcmVnKGNvbnRleHQpID0gMDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogU3RydWN0dXJlIG9mIGEgV2luMzJzIE1vZHVsZSBUYWJsZSBFbnRyeToKKyAgICAgICAgICovCisgICAgICAgIHN0cnVjdCBXaW4zMnNNb2R1bGUKKyAgICAgICAgeworICAgICAgICAgICAgRFdPUkQgIGZsYWdzOworICAgICAgICAgICAgRFdPUkQgIGZsYXRCYXNlQWRkcjsKKyAgICAgICAgICAgIExQQ1NUUiBtb2R1bGVOYW1lOworICAgICAgICAgICAgTFBDU1RSIHBhdGhOYW1lOworICAgICAgICAgICAgTFBDU1RSIHVua25vd247CisgICAgICAgICAgICBMUEJZVEUgYmFzZUFkZHI7CisgICAgICAgICAgICBEV09SRCAgaE1vZHVsZTsKKyAgICAgICAgICAgIERXT1JEICByZWxvY0RlbHRhOworICAgICAgICB9OworCisgICAgICAgIC8qIAorICAgICAgICAgKiBOb3RlOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBzZXQgdXAgYSBkZW1hbmQtcGFnZWQgbWVtb3J5IGltYWdlIAorICAgICAgICAgKiAgICAgICBvZiB0aGUgZ2l2ZW4gbW9kdWxlLiBTaW5jZSBtbWFwIGRvZXMgbm90IGFsbG93IGZpbGUgb2Zmc2V0cworICAgICAgICAgKiAgICAgICBub3QgYWxpZ25lZCBhdCAxMDI0IGJ5dGVzLCB3ZSBzaW1wbHkgbG9hZCB0aGUgaW1hZ2UgZnVsbHkKKyAgICAgICAgICogICAgICAgaW50byBtZW1vcnkuCisgICAgICAgICAqLworCisgICAgICAgIHN0cnVjdCBXaW4zMnNNb2R1bGUgKm1vZHVsZVRhYmxlID0gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBXaW4zMnNNb2R1bGUgKilBcHBUb1dpbmUoRURYX3JlZyhjb250ZXh0KSk7CisgICAgICAgIHN0cnVjdCBXaW4zMnNNb2R1bGUgKm1vZHVsZSA9IG1vZHVsZVRhYmxlICsgRUNYX3JlZyhjb250ZXh0KTsKKworICAgICAgICBJTUFHRV9OVF9IRUFERVJTICpudF9oZWFkZXIgPSBQRV9IRUFERVIobW9kdWxlLT5iYXNlQWRkcik7CisgICAgICAgIElNQUdFX1NFQ1RJT05fSEVBREVSICpwZV9zZWcgPSBQRV9TRUNUSU9OUyhtb2R1bGUtPmJhc2VBZGRyKTsKKworICAgICAgICBIRklMRTMyIGltYWdlID0gRklMRV9PcGVuKG1vZHVsZS0+cGF0aE5hbWUsIE9fUkRPTkxZKTsKKyAgICAgICAgQk9PTDMyIGVycm9yID0gKGltYWdlID09IElOVkFMSURfSEFORExFX1ZBTFVFMzIpOworICAgICAgICBVSU5UMzIgaTsKKworICAgICAgICBUUkFDRSh2eGQsICJNYXBNb2R1bGU6IExvYWRpbmcgJXNcbiIsIG1vZHVsZS0+cGF0aE5hbWUpOworCisgICAgICAgIGZvciAoaSA9IDA7IAorICAgICAgICAgICAgICFlcnJvciAmJiBpIDwgbnRfaGVhZGVyLT5GaWxlSGVhZGVyLk51bWJlck9mU2VjdGlvbnM7IAorICAgICAgICAgICAgIGkrKywgcGVfc2VnKyspCisgICAgICAgICAgICBpZighKHBlX3NlZy0+Q2hhcmFjdGVyaXN0aWNzICYgSU1BR0VfU0NOX0NOVF9VTklOSVRJQUxJWkVEX0RBVEEpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIERXT1JEICBvZmYgID0gcGVfc2VnLT5Qb2ludGVyVG9SYXdEYXRhOworICAgICAgICAgICAgICAgIERXT1JEICBsZW4gID0gcGVfc2VnLT5TaXplT2ZSYXdEYXRhOworICAgICAgICAgICAgICAgIExQQllURSBhZGRyID0gbW9kdWxlLT5iYXNlQWRkciArIHBlX3NlZy0+VmlydHVhbEFkZHJlc3M7CisKKyAgICAgICAgICAgICAgICBUUkFDRSh2eGQsICJNYXBNb2R1bGU6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJTZWN0aW9uICVkIGF0ICUwOGx4IGZyb20gJTA4bHggbGVuICUwOGx4XG4iLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGksIChEV09SRClhZGRyLCBvZmYsIGxlbik7CisKKyAgICAgICAgICAgICAgICBpZiAoICAgX2xsc2VlazMyKGltYWdlLCBvZmYsIFNFRUtfU0VUKSAhPSBvZmYKKyAgICAgICAgICAgICAgICAgICAgfHwgX2xyZWFkMzIoaW1hZ2UsIGFkZHIsIGxlbikgIT0gbGVuKQorICAgICAgICAgICAgICAgICAgICBlcnJvciA9IFRSVUU7CisgICAgICAgICAgICB9CisgICAgICAgIAorICAgICAgICBfbGNsb3NlMzIoaW1hZ2UpOworCisgICAgICAgIGlmIChlcnJvcikKKyAgICAgICAgICAgIEVSUih2eGQsICJNYXBNb2R1bGU6IFVuYWJsZSB0byBsb2FkICVzXG4iLCBtb2R1bGUtPnBhdGhOYW1lKTsKKworICAgICAgICBlbHNlIGlmIChtb2R1bGUtPnJlbG9jRGVsdGEgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgSU1BR0VfREFUQV9ESVJFQ1RPUlkgKmRpciA9IG50X2hlYWRlci0+T3B0aW9uYWxIZWFkZXIuRGF0YURpcmVjdG9yeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIElNQUdFX0RJUkVDVE9SWV9FTlRSWV9CQVNFUkVMT0M7CisgICAgICAgICAgICBJTUFHRV9CQVNFX1JFTE9DQVRJT04gKnIgPSAoSU1BR0VfQkFTRV9SRUxPQ0FUSU9OICopCisgICAgICAgICAgICAgICAgKGRpci0+U2l6ZT8gbW9kdWxlLT5iYXNlQWRkciArIGRpci0+VmlydHVhbEFkZHJlc3MgOiAwKTsKKworICAgICAgICAgICAgVFJBQ0UodnhkLCAiTWFwTW9kdWxlOiBSZWxvYyBkZWx0YSAlMDhseFxuIiwgbW9kdWxlLT5yZWxvY0RlbHRhKTsKKworICAgICAgICAgICAgd2hpbGUgKHIgJiYgci0+VmlydHVhbEFkZHJlc3MpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTFBCWVRFIHBhZ2UgID0gbW9kdWxlLT5iYXNlQWRkciArIHItPlZpcnR1YWxBZGRyZXNzOworICAgICAgICAgICAgICAgIGludCAgICBjb3VudCA9IChyLT5TaXplT2ZCbG9jayAtIDgpIC8gMjsKKworICAgICAgICAgICAgICAgIFRSQUNFKHZ4ZCwgIk1hcE1vZHVsZTogJWQgcmVsb2NhdGlvbnMgZm9yIHBhZ2UgJTA4bHhcbiIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQsIChEV09SRClwYWdlKTsKKworICAgICAgICAgICAgICAgIGZvcihpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gci0+VHlwZU9mZnNldFtpXSAmIDB4RkZGOworICAgICAgICAgICAgICAgICAgICBpbnQgdHlwZSAgID0gci0+VHlwZU9mZnNldFtpXSA+PiAxMjsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoKHR5cGUpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBJTUFHRV9SRUxfQkFTRURfQUJTT0xVVEU6IAorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgSU1BR0VfUkVMX0JBU0VEX0hJR0g6CisgICAgICAgICAgICAgICAgICAgICAgICAqKFdPUkQgKikocGFnZStvZmZzZXQpICs9IEhJV09SRChtb2R1bGUtPnJlbG9jRGVsdGEpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgSU1BR0VfUkVMX0JBU0VEX0xPVzoKKyAgICAgICAgICAgICAgICAgICAgICAgICooV09SRCAqKShwYWdlK29mZnNldCkgKz0gTE9XT1JEKG1vZHVsZS0+cmVsb2NEZWx0YSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBJTUFHRV9SRUxfQkFTRURfSElHSExPVzoKKyAgICAgICAgICAgICAgICAgICAgICAgICooRFdPUkQqKShwYWdlK29mZnNldCkgKz0gbW9kdWxlLT5yZWxvY0RlbHRhOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBXQVJOKHZ4ZCwgIk1hcE1vZHVsZTogVW5zdXBwb3J0ZWQgZml4dXAgdHlwZVxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHIgPSAoSU1BR0VfQkFTRV9SRUxPQ0FUSU9OICopKChMUEJZVEUpciArIHItPlNpemVPZkJsb2NrKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIEVBWF9yZWcoY29udGV4dCkgPSAwOworICAgICAgICBSRVNFVF9DRkxBRyhjb250ZXh0KTsKKyAgICB9CisgICAgYnJlYWs7CisKKworICAgIGNhc2UgMHgwMDA1OiAvKiBVbk1hcCBNb2R1bGUgKi8KKyAgICAgICAgLyoKKyAgICAgICAgICogSW5wdXQ6ICAgRURYOiBGbGF0IGFkZHJlc3Mgb2YgbW9kdWxlIGltYWdlIAorICAgICAgICAgKgorICAgICAgICAgKiBPdXRwdXQ6ICBFQVg6IDEgaWYgT0sKKyAgICAgICAgICovCisgICAgICAgIAorICAgICAgICBUUkFDRSh2eGQsICJVbk1hcE1vZHVsZTogJWx4XG4iLCAoRFdPUkQpQXBwVG9XaW5lKEVEWF9yZWcoY29udGV4dCkpKTsKKworICAgICAgICAvKiBBcyB3ZSBkaWRuJ3QgbWFwIGFueXRoaW5nLCB0aGVyZSdzIG5vdGhpbmcgdG8gdW5tYXAgLi4uICovCisKKyAgICAgICAgRUFYX3JlZyhjb250ZXh0KSA9IDE7CisgICAgICAgIGJyZWFrOworCisKKyAgICBjYXNlIDB4MDAwNjogLyogVmlydHVhbEFsbG9jICovCisgICAgICAgIC8qIAorICAgICAgICAgKiBJbnB1dDogICBFQ1g6IEN1cnJlbnQgUHJvY2VzcworICAgICAgICAgKgorICAgICAgICAgKiAgICAgICAgICBFRFg6IEZsYXQgYWRkcmVzcyBvZiBhcmd1bWVudHMgb24gc3RhY2sKKyAgICAgICAgICogCisgICAgICAgICAqICAgRFdPUkQgKnJldHYgICAgIFtvdXRdIEZsYXQgYmFzZSBhZGRyZXNzIG9mIGFsbG9jYXRlZCByZWdpb24KKyAgICAgICAgICogICBMUFZPSUQgYmFzZSAgICAgW2luXSAgRmxhdCBhZGRyZXNzIG9mIHJlZ2lvbiB0byByZXNlcnZlL2NvbW1pdAorICAgICAgICAgKiAgIERXT1JEICBzaXplICAgICBbaW5dICBTaXplIG9mIHJlZ2lvbgorICAgICAgICAgKiAgIERXT1JEICB0eXBlICAgICBbaW5dICBUeXBlIG9mIGFsbG9jYXRpb24KKyAgICAgICAgICogICBEV09SRCAgcHJvdCAgICAgW2luXSAgVHlwZSBvZiBhY2Nlc3MgcHJvdGVjdGlvbgorICAgICAgICAgKgorICAgICAgICAgKiBPdXRwdXQ6ICBFQVg6IE50U3RhdHVzCisgICAgICAgICAqLworICAgIHsKKyAgICAgICAgRFdPUkQgKnN0YWNrICA9IChEV09SRCAqKUFwcFRvV2luZShFRFhfcmVnKGNvbnRleHQpKTsKKyAgICAgICAgRFdPUkQgKnJldHYgICA9IChEV09SRCAqKUFwcFRvV2luZShzdGFja1swXSk7CisgICAgICAgIExQVk9JRCBiYXNlICAgPSAoTFBWT0lEKSBBcHBUb1dpbmUoc3RhY2tbMV0pOworICAgICAgICBEV09SRCAgc2l6ZSAgID0gc3RhY2tbMl07CisgICAgICAgIERXT1JEICB0eXBlICAgPSBzdGFja1szXTsKKyAgICAgICAgRFdPUkQgIHByb3QgICA9IHN0YWNrWzRdOworICAgICAgICBEV09SRCAgcmVzdWx0OworCisgICAgICAgIFRSQUNFKHZ4ZCwgIlZpcnR1YWxBbGxvYyglbHgsICVseCwgJWx4LCAlbHgsICVseClcbiIsIAorICAgICAgICAgICAgICAgICAgIChEV09SRClyZXR2LCAoRFdPUkQpYmFzZSwgc2l6ZSwgdHlwZSwgcHJvdCk7CisKKyAgICAgICAgaWYgKHR5cGUgJiAweDgwMDAwMDAwKQorICAgICAgICB7CisgICAgICAgICAgICBXQVJOKHZ4ZCwgIlZpcnR1YWxBbGxvYzogc3RyYW5nZSB0eXBlICVseFxuIiwgdHlwZSk7CisgICAgICAgICAgICB0eXBlICY9IDB4N2ZmZmZmZmY7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWJhc2UgJiYgKHR5cGUgJiBNRU1fQ09NTUlUKSAmJiBwcm90ID09IFBBR0VfUkVBRE9OTFkpCisgICAgICAgIHsKKyAgICAgICAgICAgIFdBUk4odnhkLCAiVmlydHVhbEFsbG9jOiBOTFMgaGFjaywgYWxsb3dpbmcgd3JpdGUgYWNjZXNzIVxuIik7CisgICAgICAgICAgICBwcm90ID0gUEFHRV9SRUFEV1JJVEU7CisgICAgICAgIH0KKworICAgICAgICByZXN1bHQgPSAoRFdPUkQpVmlydHVhbEFsbG9jKGJhc2UsIHNpemUsIHR5cGUsIHByb3QpOworCisgICAgICAgIGlmIChXaW5lVG9BcHAocmVzdWx0KSkKKyAgICAgICAgICAgICpyZXR2ICAgICAgICAgICAgPSBXaW5lVG9BcHAocmVzdWx0KSwKKyAgICAgICAgICAgIEVBWF9yZWcoY29udGV4dCkgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgKnJldHYgICAgICAgICAgICA9IDAsCisgICAgICAgICAgICBFQVhfcmVnKGNvbnRleHQpID0gU1RBVFVTX05PX01FTU9SWTsgIC8qIEZJWE1FICovCisgICAgfQorICAgIGJyZWFrOworCisKKyAgICBjYXNlIDB4MDAwNzogLyogVmlydHVhbEZyZWUgKi8KKyAgICAgICAgLyogCisgICAgICAgICAqIElucHV0OiAgIEVDWDogQ3VycmVudCBQcm9jZXNzCisgICAgICAgICAqCisgICAgICAgICAqICAgICAgICAgIEVEWDogRmxhdCBhZGRyZXNzIG9mIGFyZ3VtZW50cyBvbiBzdGFjaworICAgICAgICAgKiAKKyAgICAgICAgICogICBEV09SRCAqcmV0diAgICAgW291dF0gVFJVRSBpZiBzdWNjZXNzLCBGQUxTRSBpZiBmYWlsdXJlCisgICAgICAgICAqICAgTFBWT0lEIGJhc2UgICAgIFtpbl0gIEZsYXQgYWRkcmVzcyBvZiByZWdpb24KKyAgICAgICAgICogICBEV09SRCAgc2l6ZSAgICAgW2luXSAgU2l6ZSBvZiByZWdpb24KKyAgICAgICAgICogICBEV09SRCAgdHlwZSAgICAgW2luXSAgVHlwZSBvZiBvcGVyYXRpb24KKyAgICAgICAgICoKKyAgICAgICAgICogT3V0cHV0OiAgRUFYOiBOdFN0YXR1cworICAgICAgICAgKi8KKyAgICB7CisgICAgICAgIERXT1JEICpzdGFjayAgPSAoRFdPUkQgKilBcHBUb1dpbmUoRURYX3JlZyhjb250ZXh0KSk7CisgICAgICAgIERXT1JEICpyZXR2ICAgPSAoRFdPUkQgKilBcHBUb1dpbmUoc3RhY2tbMF0pOworICAgICAgICBMUFZPSUQgYmFzZSAgID0gKExQVk9JRCkgQXBwVG9XaW5lKHN0YWNrWzFdKTsKKyAgICAgICAgRFdPUkQgIHNpemUgICA9IHN0YWNrWzJdOworICAgICAgICBEV09SRCAgdHlwZSAgID0gc3RhY2tbM107CisgICAgICAgIERXT1JEICByZXN1bHQ7CisKKyAgICAgICAgVFJBQ0UodnhkLCAiVmlydHVhbEZyZWUoJWx4LCAlbHgsICVseCwgJWx4KVxuIiwgCisgICAgICAgICAgICAgICAgICAgKERXT1JEKXJldHYsIChEV09SRCliYXNlLCBzaXplLCB0eXBlKTsKKworICAgICAgICByZXN1bHQgPSBWaXJ0dWFsRnJlZShiYXNlLCBzaXplLCB0eXBlKTsKKworICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAgICAgKnJldHYgICAgICAgICAgICA9IFRSVUUsCisgICAgICAgICAgICBFQVhfcmVnKGNvbnRleHQpID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICpyZXR2ICAgICAgICAgICAgPSBGQUxTRSwKKyAgICAgICAgICAgIEVBWF9yZWcoY29udGV4dCkgPSBTVEFUVVNfTk9fTUVNT1JZOyAgLyogRklYTUUgKi8KKyAgICB9CisgICAgYnJlYWs7CisKKworICAgIGNhc2UgMHgwMDA4OiAvKiBWaXJ0dWFsUHJvdGVjdCAqLworICAgICAgICAvKiAKKyAgICAgICAgICogSW5wdXQ6ICAgRUNYOiBDdXJyZW50IFByb2Nlc3MKKyAgICAgICAgICoKKyAgICAgICAgICogICAgICAgICAgRURYOiBGbGF0IGFkZHJlc3Mgb2YgYXJndW1lbnRzIG9uIHN0YWNrCisgICAgICAgICAqIAorICAgICAgICAgKiAgIERXT1JEICpyZXR2ICAgICBbb3V0XSBUUlVFIGlmIHN1Y2Nlc3MsIEZBTFNFIGlmIGZhaWx1cmUKKyAgICAgICAgICogICBMUFZPSUQgYmFzZSAgICAgW2luXSAgRmxhdCBhZGRyZXNzIG9mIHJlZ2lvbgorICAgICAgICAgKiAgIERXT1JEICBzaXplICAgICBbaW5dICBTaXplIG9mIHJlZ2lvbgorICAgICAgICAgKiAgIERXT1JEICBuZXdfcHJvdCBbaW5dICBEZXNpcmVkIGFjY2VzcyBwcm90ZWN0aW9uCisgICAgICAgICAqICAgRFdPUkQgKm9sZF9wcm90IFtvdXRdIFByZXZpb3VzIGFjY2VzcyBwcm90ZWN0aW9uCisgICAgICAgICAqCisgICAgICAgICAqIE91dHB1dDogIEVBWDogTnRTdGF0dXMKKyAgICAgICAgICovCisgICAgeworICAgICAgICBEV09SRCAqc3RhY2sgICAgPSAoRFdPUkQgKilBcHBUb1dpbmUoRURYX3JlZyhjb250ZXh0KSk7CisgICAgICAgIERXT1JEICpyZXR2ICAgICA9IChEV09SRCAqKUFwcFRvV2luZShzdGFja1swXSk7CisgICAgICAgIExQVk9JRCBiYXNlICAgICA9IChMUFZPSUQpIEFwcFRvV2luZShzdGFja1sxXSk7CisgICAgICAgIERXT1JEICBzaXplICAgICA9IHN0YWNrWzJdOworICAgICAgICBEV09SRCAgbmV3X3Byb3QgPSBzdGFja1szXTsKKyAgICAgICAgRFdPUkQgKm9sZF9wcm90ID0gKERXT1JEICopQXBwVG9XaW5lKHN0YWNrWzRdKTsKKyAgICAgICAgRFdPUkQgIHJlc3VsdDsKKworICAgICAgICBUUkFDRSh2eGQsICJWaXJ0dWFsUHJvdGVjdCglbHgsICVseCwgJWx4LCAlbHgsICVseClcbiIsIAorICAgICAgICAgICAgICAgICAgIChEV09SRClyZXR2LCAoRFdPUkQpYmFzZSwgc2l6ZSwgbmV3X3Byb3QsIChEV09SRClvbGRfcHJvdCk7CisKKyAgICAgICAgcmVzdWx0ID0gVmlydHVhbFByb3RlY3QoYmFzZSwgc2l6ZSwgbmV3X3Byb3QsIG9sZF9wcm90KTsKKworICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAgICAgKnJldHYgICAgICAgICAgICA9IFRSVUUsCisgICAgICAgICAgICBFQVhfcmVnKGNvbnRleHQpID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICpyZXR2ICAgICAgICAgICAgPSBGQUxTRSwKKyAgICAgICAgICAgIEVBWF9yZWcoY29udGV4dCkgPSBTVEFUVVNfTk9fTUVNT1JZOyAgLyogRklYTUUgKi8KKyAgICB9CisgICAgYnJlYWs7CisKKworICAgIGNhc2UgMHgwMDA5OiAvKiBWaXJ0dWFsUXVlcnkgKi8KKyAgICAgICAgLyogCisgICAgICAgICAqIElucHV0OiAgIEVDWDogQ3VycmVudCBQcm9jZXNzCisgICAgICAgICAqCisgICAgICAgICAqICAgICAgICAgIEVEWDogRmxhdCBhZGRyZXNzIG9mIGFyZ3VtZW50cyBvbiBzdGFjaworICAgICAgICAgKiAKKyAgICAgICAgICogICBEV09SRCAqcmV0diAgICAgICAgICAgICAgICAgICAgIFtvdXRdIE5yLiBieXRlcyByZXR1cm5lZAorICAgICAgICAgKiAgIExQVk9JRCBiYXNlICAgICAgICAgICAgICAgICAgICAgW2luXSAgRmxhdCBhZGRyZXNzIG9mIHJlZ2lvbgorICAgICAgICAgKiAgIExQTUVNT1JZX0JBU0lDX0lORk9STUFUSU9OIGluZm8gW291dF0gSW5mbyBidWZmZXIKKyAgICAgICAgICogICBEV09SRCAgbGVuICAgICAgICAgICAgICAgICAgICAgIFtpbl0gIFNpemUgb2YgYnVmZmVyCisgICAgICAgICAqCisgICAgICAgICAqIE91dHB1dDogIEVBWDogTnRTdGF0dXMKKyAgICAgICAgICovCisgICAgeworICAgICAgICBEV09SRCAqc3RhY2sgID0gKERXT1JEICopQXBwVG9XaW5lKEVEWF9yZWcoY29udGV4dCkpOworICAgICAgICBEV09SRCAqcmV0diAgID0gKERXT1JEICopQXBwVG9XaW5lKHN0YWNrWzBdKTsKKyAgICAgICAgTFBWT0lEIGJhc2UgICA9IChMUFZPSUQpIEFwcFRvV2luZShzdGFja1sxXSk7CisgICAgICAgIExQTUVNT1JZX0JBU0lDX0lORk9STUFUSU9OIGluZm8gPSAKKyAgICAgICAgICAgICAgICAgICAgICAgIChMUE1FTU9SWV9CQVNJQ19JTkZPUk1BVElPTilBcHBUb1dpbmUoc3RhY2tbMl0pOworICAgICAgICBEV09SRCAgbGVuICAgID0gc3RhY2tbM107CisgICAgICAgIERXT1JEICByZXN1bHQ7CisKKyAgICAgICAgVFJBQ0UodnhkLCAiVmlydHVhbFF1ZXJ5KCVseCwgJWx4LCAlbHgsICVseClcbiIsIAorICAgICAgICAgICAgICAgICAgIChEV09SRClyZXR2LCAoRFdPUkQpYmFzZSwgKERXT1JEKWluZm8sIGxlbik7CisKKyAgICAgICAgcmVzdWx0ID0gVmlydHVhbFF1ZXJ5KGJhc2UsIGluZm8sIGxlbik7CisKKyAgICAgICAgKnJldHYgICAgICAgICAgICA9IHJlc3VsdDsKKyAgICAgICAgRUFYX3JlZyhjb250ZXh0KSA9IFNUQVRVU19TVUNDRVNTOworICAgIH0KKyAgICBicmVhazsKKworCisgICAgY2FzZSAweDAwMEE6IC8qIFNldFZpcnRNZW1Qcm9jZXNzICovCisgICAgICAgIC8qCisgICAgICAgICAqIElucHV0OiAgIEVDWDogUHJvY2VzcyBIYW5kbGUKKyAgICAgICAgICoKKyAgICAgICAgICogICAgICAgICAgRURYOiBGbGF0IGFkZHJlc3Mgb2YgcmVnaW9uCisgICAgICAgICAqCisgICAgICAgICAqIE91dHB1dDogIEVBWDogTnRTdGF0dXMKKyAgICAgICAgICovCisKKyAgICAgICAgVFJBQ0UodnhkLCAiWzAwMGFdIEVDWD0lbHggRURYPSVseFxuIiwKKyAgICAgICAgICAgICAgICAgICBFQ1hfcmVnKGNvbnRleHQpLCBFRFhfcmVnKGNvbnRleHQpKTsKKworICAgICAgICAvKiBGSVhNRSAqLworCisgICAgICAgIEVBWF9yZWcoY29udGV4dCkgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICAgICAgYnJlYWs7CisKKworICAgIGNhc2UgMHgwMDBCOiAvKiA/Pz8gc29tZSBraW5kIG9mIGNsZWFudXAgKi8KKyAgICAgICAgLyoKKyAgICAgICAgICogSW5wdXQ6ICAgRUNYOiBQcm9jZXNzIEhhbmRsZQorICAgICAgICAgKgorICAgICAgICAgKiBPdXRwdXQ6ICBFQVg6IE50U3RhdHVzCisgICAgICAgICAqLworCisgICAgICAgIFRSQUNFKHZ4ZCwgIlswMDBiXSBFQ1g9JWx4XG4iLCBFQ1hfcmVnKGNvbnRleHQpKTsKKworICAgICAgICAvKiBGSVhNRSAqLworCisgICAgICAgIEVBWF9yZWcoY29udGV4dCkgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICAgICAgYnJlYWs7CisKKworICAgIGNhc2UgMHgwMDBDOiAvKiBTZXQgRGVidWcgRmxhZ3MgKi8KKyAgICAgICAgLyoKKyAgICAgICAgICogSW5wdXQ6ICAgRURYOiBEZWJ1ZyBGbGFncworICAgICAgICAgKgorICAgICAgICAgKiBPdXRwdXQ6ICBFRFg6IFByZXZpb3VzIERlYnVnIEZsYWdzCisgICAgICAgICAqLworCisgICAgICAgIEZJWE1FKHZ4ZCwgIlswMDBjXSBFRFg9JWx4XG4iLCBFRFhfcmVnKGNvbnRleHQpKTsKKworICAgICAgICAvKiBGSVhNRSAqLworCisgICAgICAgIEVEWF9yZWcoY29udGV4dCkgPSAwOworICAgICAgICBicmVhazsKKworCisgICAgY2FzZSAweDAwMEQ6IC8qIE50Q3JlYXRlU2VjdGlvbiAqLworICAgICAgICAvKiAKKyAgICAgICAgICogSW5wdXQ6ICAgRURYOiBGbGF0IGFkZHJlc3Mgb2YgYXJndW1lbnRzIG9uIHN0YWNrCisgICAgICAgICAqIAorICAgICAgICAgKiAgIEhBTkRMRTMyICpyZXR2ICAgICAgW291dF0gSGFuZGxlIG9mIFNlY3Rpb24gY3JlYXRlZAorICAgICAgICAgKiAgIERXT1JEICBmbGFnczEgICAgICAgW2luXSAgKD8/IHVua25vd24gPz8pCisgICAgICAgICAqICAgRFdPUkQgIGF0b20gICAgICAgICBbaW5dICBOYW1lIG9mIFNlY3Rpb24gdG8gY3JlYXRlCisgICAgICAgICAqICAgTEFSR0VfSU5URUdFUiAqc2l6ZSBbaW5dICBTaXplIG9mIFNlY3Rpb24KKyAgICAgICAgICogICBEV09SRCAgcHJvdGVjdCAgICAgIFtpbl0gIEFjY2VzcyBwcm90ZWN0aW9uCisgICAgICAgICAqICAgRFdPUkQgIGZsYWdzMiAgICAgICBbaW5dICAoPz8gdW5rbm93biA/PykKKyAgICAgICAgICogICBIRklMRTMyIGhGaWxlICAgICAgIFtpbl0gIEhhbmRsZSBvZiBmaWxlIHRvIG1hcAorICAgICAgICAgKiAgIERXT1JEICBwc3AgICAgICAgICAgW2luXSAgKFdpbjMyczogUFNQIHRoYXQgaEZpbGUgYmVsb25ncyB0bykKKyAgICAgICAgICoKKyAgICAgICAgICogT3V0cHV0OiAgRUFYOiBOdFN0YXR1cworICAgICAgICAgKi8KKyAgICB7CisgICAgICAgIERXT1JEICpzdGFjayAgICA9IChEV09SRCAqKSAgIEFwcFRvV2luZShFRFhfcmVnKGNvbnRleHQpKTsKKyAgICAgICAgSEFORExFMzIgKnJldHYgID0gKEhBTkRMRTMyICopQXBwVG9XaW5lKHN0YWNrWzBdKTsKKyAgICAgICAgRFdPUkQgIGZsYWdzMSAgID0gc3RhY2tbMV07CisgICAgICAgIERXT1JEICBhdG9tICAgICA9IHN0YWNrWzJdOworICAgICAgICBMQVJHRV9JTlRFR0VSICpzaXplID0gKExBUkdFX0lOVEVHRVIgKilBcHBUb1dpbmUoc3RhY2tbM10pOworICAgICAgICBEV09SRCAgcHJvdGVjdCAgPSBzdGFja1s0XTsKKyAgICAgICAgRFdPUkQgIGZsYWdzMiAgID0gc3RhY2tbNV07CisgICAgICAgIEhGSUxFMzIgaEZpbGUgICA9IHN0YWNrWzZdOworICAgICAgICBEV09SRCAgcHNwICAgICAgPSBzdGFja1s3XTsKKworICAgICAgICBIQU5ETEUzMiByZXN1bHQgPSBJTlZBTElEX0hBTkRMRV9WQUxVRTMyOworICAgICAgICBjaGFyIG5hbWVbMTI4XTsKKworICAgICAgICBUUkFDRSh2eGQsICJOdENyZWF0ZVNlY3Rpb24oJWx4LCAlbHgsICVseCwgJWx4LCAlbHgsICVseCwgJWx4LCAlbHgpXG4iLAorICAgICAgICAgICAgICAgICAgIChEV09SRClyZXR2LCBmbGFnczEsIGF0b20sIChEV09SRClzaXplLCBwcm90ZWN0LCBmbGFnczIsCisgICAgICAgICAgICAgICAgICAgKERXT1JEKWhGaWxlLCBwc3ApOworCisgICAgICAgIGlmICghYXRvbSB8fCBHbG9iYWxHZXRBdG9tTmFtZTMyQShhdG9tLCBuYW1lLCBzaXplb2YobmFtZSkpKQorICAgICAgICB7CisgICAgICAgICAgICBUUkFDRSh2eGQsICJOdENyZWF0ZVNlY3Rpb246IG5hbWU9JXNcbiIsIGF0b20/IG5hbWUgOiBOVUxMKTsKKworICAgICAgICAgICAgcmVzdWx0ID0gQ3JlYXRlRmlsZU1hcHBpbmczMkEoaEZpbGUsIE5VTEwsIHByb3RlY3QsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT8gc2l6ZS0+SGlnaFBhcnQgOiAwLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU/IHNpemUtPkxvd1BhcnQgIDogMCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdG9tPyBuYW1lIDogTlVMTCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAocmVzdWx0ID09IElOVkFMSURfSEFORExFX1ZBTFVFMzIpCisgICAgICAgICAgICBXQVJOKHZ4ZCwgIk50Q3JlYXRlU2VjdGlvbjogZmFpbGVkIVxuIik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFRSQUNFKHZ4ZCwgIk50Q3JlYXRlU2VjdGlvbjogcmV0dXJuZWQgJWx4XG4iLCAoRFdPUkQpcmVzdWx0KTsKKworICAgICAgICBpZiAocmVzdWx0ICE9IElOVkFMSURfSEFORExFX1ZBTFVFMzIpCisgICAgICAgICAgICAqcmV0diAgICAgICAgICAgID0gcmVzdWx0LAorICAgICAgICAgICAgRUFYX3JlZyhjb250ZXh0KSA9IFNUQVRVU19TVUNDRVNTOworICAgICAgICBlbHNlCisgICAgICAgICAgICAqcmV0diAgICAgICAgICAgID0gcmVzdWx0LAorICAgICAgICAgICAgRUFYX3JlZyhjb250ZXh0KSA9IFNUQVRVU19OT19NRU1PUlk7ICAgLyogRklYTUUgKi8KKyAgICB9CisgICAgYnJlYWs7CisKKworICAgIGNhc2UgMHgwMDBFOiAvKiBOdE9wZW5TZWN0aW9uICovCisgICAgICAgIC8qIAorICAgICAgICAgKiBJbnB1dDogICBFRFg6IEZsYXQgYWRkcmVzcyBvZiBhcmd1bWVudHMgb24gc3RhY2sKKyAgICAgICAgICogCisgICAgICAgICAqICAgSEFORExFMzIgKnJldHYgIFtvdXRdIEhhbmRsZSBvZiBTZWN0aW9uIG9wZW5lZAorICAgICAgICAgKiAgIERXT1JEICBwcm90ZWN0ICBbaW5dICBBY2Nlc3MgcHJvdGVjdGlvbgorICAgICAgICAgKiAgIERXT1JEICBhdG9tICAgICBbaW5dICBOYW1lIG9mIFNlY3Rpb24gdG8gY3JlYXRlCisgICAgICAgICAqCisgICAgICAgICAqIE91dHB1dDogIEVBWDogTnRTdGF0dXMKKyAgICAgICAgICovCisgICAgeworICAgICAgICBEV09SRCAqc3RhY2sgICAgPSAoRFdPUkQgKikgICBBcHBUb1dpbmUoRURYX3JlZyhjb250ZXh0KSk7CisgICAgICAgIEhBTkRMRTMyICpyZXR2ICA9IChIQU5ETEUzMiAqKUFwcFRvV2luZShzdGFja1swXSk7CisgICAgICAgIERXT1JEICBwcm90ZWN0ICA9IHN0YWNrWzFdOworICAgICAgICBEV09SRCAgYXRvbSAgICAgPSBzdGFja1syXTsKKworICAgICAgICBIQU5ETEUzMiByZXN1bHQgPSBJTlZBTElEX0hBTkRMRV9WQUxVRTMyOworICAgICAgICBjaGFyIG5hbWVbMTI4XTsKKworICAgICAgICBUUkFDRSh2eGQsICJOdE9wZW5TZWN0aW9uKCVseCwgJWx4LCAlbHgpXG4iLCAKKyAgICAgICAgICAgICAgICAgICAoRFdPUkQpcmV0diwgcHJvdGVjdCwgYXRvbSk7CisKKyAgICAgICAgaWYgKGF0b20gJiYgR2xvYmFsR2V0QXRvbU5hbWUzMkEoYXRvbSwgbmFtZSwgc2l6ZW9mKG5hbWUpKSkKKyAgICAgICAgeworICAgICAgICAgICAgVFJBQ0UodnhkLCAiTnRPcGVuU2VjdGlvbjogbmFtZT0lc1xuIiwgbmFtZSk7CisKKyAgICAgICAgICAgIHJlc3VsdCA9IE9wZW5GaWxlTWFwcGluZzMyQShwcm90ZWN0LCBGQUxTRSwgbmFtZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAocmVzdWx0ID09IElOVkFMSURfSEFORExFX1ZBTFVFMzIpCisgICAgICAgICAgICBXQVJOKHZ4ZCwgIk50T3BlblNlY3Rpb246IGZhaWxlZCFcbiIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBUUkFDRSh2eGQsICJOdE9wZW5TZWN0aW9uOiByZXR1cm5lZCAlbHhcbiIsIChEV09SRClyZXN1bHQpOworCisgICAgICAgIGlmIChyZXN1bHQgIT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUzMikKKyAgICAgICAgICAgICpyZXR2ICAgICAgICAgICAgPSByZXN1bHQsCisgICAgICAgICAgICBFQVhfcmVnKGNvbnRleHQpID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICpyZXR2ICAgICAgICAgICAgPSByZXN1bHQsCisgICAgICAgICAgICBFQVhfcmVnKGNvbnRleHQpID0gU1RBVFVTX05PX01FTU9SWTsgICAvKiBGSVhNRSAqLworICAgIH0KKyAgICBicmVhazsKKworCisgICAgY2FzZSAweDAwMEY6IC8qIE50Q2xvc2VTZWN0aW9uICovCisgICAgICAgIC8qIAorICAgICAgICAgKiBJbnB1dDogICBFRFg6IEZsYXQgYWRkcmVzcyBvZiBhcmd1bWVudHMgb24gc3RhY2sKKyAgICAgICAgICogCisgICAgICAgICAqICAgSEFORExFMzIgaGFuZGxlICBbaW5dICBIYW5kbGUgb2YgU2VjdGlvbiB0byBjbG9zZQorICAgICAgICAgKiAgIERXT1JEICppZCAgICAgICAgW291dF0gVW5pcXVlIElEICAoPz8gdW5jbGVhciA/PykKKyAgICAgICAgICoKKyAgICAgICAgICogT3V0cHV0OiAgRUFYOiBOdFN0YXR1cworICAgICAgICAgKi8KKyAgICB7CisgICAgICAgIERXT1JEICpzdGFjayAgICA9IChEV09SRCAqKUFwcFRvV2luZShFRFhfcmVnKGNvbnRleHQpKTsKKyAgICAgICAgSEFORExFMzIgaGFuZGxlID0gc3RhY2tbMF07CisgICAgICAgIERXT1JEICppZCAgICAgICA9IChEV09SRCAqKUFwcFRvV2luZShzdGFja1sxXSk7CisKKyAgICAgICAgVFJBQ0UodnhkLCAiTnRDbG9zZVNlY3Rpb24oJWx4LCAlbHgpXG4iLCAoRFdPUkQpaGFuZGxlLCAoRFdPUkQpaWQpOworCisgICAgICAgIENsb3NlSGFuZGxlKGhhbmRsZSk7CisgICAgICAgIGlmIChpZCkgKmlkID0gMDsgLyogRklYTUUgKi8KKworICAgICAgICBFQVhfcmVnKGNvbnRleHQpID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgfQorICAgIGJyZWFrOworCisKKyAgICBjYXNlIDB4MDAxMDogLyogTnREdXBTZWN0aW9uICovCisgICAgICAgIC8qIAorICAgICAgICAgKiBJbnB1dDogICBFRFg6IEZsYXQgYWRkcmVzcyBvZiBhcmd1bWVudHMgb24gc3RhY2sKKyAgICAgICAgICogCisgICAgICAgICAqICAgSEFORExFMzIgaGFuZGxlICBbaW5dICBIYW5kbGUgb2YgU2VjdGlvbiB0byBkdXBsaWNhdGUKKyAgICAgICAgICoKKyAgICAgICAgICogT3V0cHV0OiAgRUFYOiBOdFN0YXR1cworICAgICAgICAgKi8KKyAgICB7CisgICAgICAgIERXT1JEICpzdGFjayAgICA9IChEV09SRCAqKUFwcFRvV2luZShFRFhfcmVnKGNvbnRleHQpKTsKKyAgICAgICAgSEFORExFMzIgaGFuZGxlID0gc3RhY2tbMF07CisKKyAgICAgICAgVFJBQ0UodnhkLCAiTnREdXBTZWN0aW9uKCVseClcbiIsIChEV09SRCloYW5kbGUpOworIAorICAgICAgICAvKiBIYW5kbGUgaXMgJ2R1cGxpY2F0ZWQnIGJ5IGluY3JlbWVudGluZyBSZWZDb3VudCAqLworICAgICAgICBIQU5ETEVfR2V0T2JqUHRyKFBST0NFU1NfQ3VycmVudCgpLCBoYW5kbGUsIEszMk9CSl9NRU1fTUFQUEVEX0ZJTEUsIDApOworCisgICAgICAgIEVBWF9yZWcoY29udGV4dCkgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICB9CisgICAgYnJlYWs7CisKKworICAgIGNhc2UgMHgwMDExOiAvKiBOdE1hcFZpZXdPZlNlY3Rpb24gKi8KKyAgICAgICAgLyogCisgICAgICAgICAqIElucHV0OiAgIEVEWDogRmxhdCBhZGRyZXNzIG9mIGFyZ3VtZW50cyBvbiBzdGFjaworICAgICAgICAgKiAKKyAgICAgICAgICogICBIQU5ETEUzMiBTZWN0aW9uSGFuZGxlICAgICAgIFtpbl0gICAgIFNlY3Rpb24gdG8gYmUgbWFwcGVkCisgICAgICAgICAqICAgRFdPUkQgICAgUHJvY2Vzc0hhbmRsZSAgICAgICBbaW5dICAgICBQcm9jZXNzIHRvIGJlIG1hcHBlZCBpbnRvCisgICAgICAgICAqICAgRFdPUkQgKiAgQmFzZUFkZHJlc3MgICAgICAgICBbaW4vb3V0XSBBZGRyZXNzIHRvIGJlIG1hcHBlZCBhdAorICAgICAgICAgKiAgIERXT1JEICAgIFplcm9CaXRzICAgICAgICAgICAgW2luXSAgICAgKD8/IHVuY2xlYXIgPz8pCisgICAgICAgICAqICAgRFdPUkQgICAgQ29tbWl0U2l6ZSAgICAgICAgICBbaW5dICAgICAoPz8gdW5jbGVhciA/PykKKyAgICAgICAgICogICBMQVJHRV9JTlRFR0VSICpTZWN0aW9uT2Zmc2V0IFtpbl0gICAgIE9mZnNldCB3aXRoaW4gc2VjdGlvbgorICAgICAgICAgKiAgIERXT1JEICogIFZpZXdTaXplICAgICAgICAgICAgW2luXSAgICAgU2l6ZSBvZiB2aWV3CisgICAgICAgICAqICAgRFdPUkQgICAgSW5oZXJpdERpc3Bvc2l0aW9uICBbaW5dICAgICAoPz8gdW5jbGVhciA/PykKKyAgICAgICAgICogICBEV09SRCAgICBBbGxvY2F0aW9uVHlwZSAgICAgIFtpbl0gICAgICg/PyB1bmNsZWFyID8/KQorICAgICAgICAgKiAgIERXT1JEICAgIFByb3RlY3QgICAgICAgICAgICAgW2luXSAgICAgQWNjZXNzIHByb3RlY3Rpb24KKyAgICAgICAgICoKKyAgICAgICAgICogT3V0cHV0OiAgRUFYOiBOdFN0YXR1cworICAgICAgICAgKi8KKyAgICB7CisgICAgICAgIERXT1JEICogIHN0YWNrICAgICAgICAgID0gKERXT1JEICopQXBwVG9XaW5lKEVEWF9yZWcoY29udGV4dCkpOworICAgICAgICBIQU5ETEUzMiBTZWN0aW9uSGFuZGxlICA9IHN0YWNrWzBdOworICAgICAgICBEV09SRCAgICBQcm9jZXNzSGFuZGxlICA9IHN0YWNrWzFdOyAvKiBpZ25vcmVkICovCisgICAgICAgIERXT1JEICogIEJhc2VBZGRyZXNzICAgID0gKERXT1JEICopQXBwVG9XaW5lKHN0YWNrWzJdKTsKKyAgICAgICAgRFdPUkQgICAgWmVyb0JpdHMgICAgICAgPSBzdGFja1szXTsKKyAgICAgICAgRFdPUkQgICAgQ29tbWl0U2l6ZSAgICAgPSBzdGFja1s0XTsKKyAgICAgICAgTEFSR0VfSU5URUdFUiAqU2VjdGlvbk9mZnNldCA9IChMQVJHRV9JTlRFR0VSICopQXBwVG9XaW5lKHN0YWNrWzVdKTsKKyAgICAgICAgRFdPUkQgKiAgVmlld1NpemUgICAgICAgPSAoRFdPUkQgKilBcHBUb1dpbmUoc3RhY2tbNl0pOworICAgICAgICBEV09SRCAgICBJbmhlcml0RGlzcG9zaXRpb24gPSBzdGFja1s3XTsKKyAgICAgICAgRFdPUkQgICAgQWxsb2NhdGlvblR5cGUgPSBzdGFja1s4XTsKKyAgICAgICAgRFdPUkQgICAgUHJvdGVjdCAgICAgICAgPSBzdGFja1s5XTsKKworICAgICAgICBMUEJZVEUgYWRkcmVzcyA9IChMUEJZVEUpKEJhc2VBZGRyZXNzPyBBcHBUb1dpbmUoKkJhc2VBZGRyZXNzKSA6IDApOworICAgICAgICBEV09SRCAgYWNjZXNzID0gMCwgcmVzdWx0OworCisgICAgICAgIHN3aXRjaCAoUHJvdGVjdCAmIH4oUEFHRV9HVUFSRHxQQUdFX05PQ0FDSEUpKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIFBBR0VfUkVBRE9OTFk6ICAgICAgICAgICBhY2Nlc3MgPSBGSUxFX01BUF9SRUFEOyAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFBBR0VfUkVBRFdSSVRFOiAgICAgICAgICBhY2Nlc3MgPSBGSUxFX01BUF9XUklURTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFBBR0VfV1JJVEVDT1BZOiAgICAgICAgICBhY2Nlc3MgPSBGSUxFX01BUF9DT1BZOyAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgUEFHRV9FWEVDVVRFX1JFQUQ6ICAgICAgIGFjY2VzcyA9IEZJTEVfTUFQX1JFQUQ7ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgUEFHRV9FWEVDVVRFX1JFQURXUklURTogIGFjY2VzcyA9IEZJTEVfTUFQX1dSSVRFOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgUEFHRV9FWEVDVVRFX1dSSVRFQ09QWTogIGFjY2VzcyA9IEZJTEVfTUFQX0NPUFk7ICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIFRSQUNFKHZ4ZCwgIk50TWFwVmlld09mU2VjdGlvbiIKKyAgICAgICAgICAgICAgICAgICAiKCVseCwgJWx4LCAlbHgsICVseCwgJWx4LCAlbHgsICVseCwgJWx4LCAlbHgsICVseClcbiIsCisgICAgICAgICAgICAgICAgICAgKERXT1JEKVNlY3Rpb25IYW5kbGUsIFByb2Nlc3NIYW5kbGUsIChEV09SRClCYXNlQWRkcmVzcywgCisgICAgICAgICAgICAgICAgICAgWmVyb0JpdHMsIENvbW1pdFNpemUsIChEV09SRClTZWN0aW9uT2Zmc2V0LCAoRFdPUkQpVmlld1NpemUsCisgICAgICAgICAgICAgICAgICAgSW5oZXJpdERpc3Bvc2l0aW9uLCBBbGxvY2F0aW9uVHlwZSwgUHJvdGVjdCk7CisgICAgICAgIFRSQUNFKHZ4ZCwgIk50TWFwVmlld09mU2VjdGlvbjogIgorICAgICAgICAgICAgICAgICAgICJiYXNlPSVseCwgb2Zmc2V0PSVseCwgc2l6ZT0lbHgsIGFjY2Vzcz0lbHhcbiIsIAorICAgICAgICAgICAgICAgICAgIChEV09SRClhZGRyZXNzLCBTZWN0aW9uT2Zmc2V0PyBTZWN0aW9uT2Zmc2V0LT5Mb3dQYXJ0IDogMCwgCisgICAgICAgICAgICAgICAgICAgVmlld1NpemU/ICpWaWV3U2l6ZSA6IDAsIGFjY2Vzcyk7CisKKyAgICAgICAgcmVzdWx0ID0gKERXT1JEKU1hcFZpZXdPZkZpbGVFeChTZWN0aW9uSGFuZGxlLCBhY2Nlc3MsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlY3Rpb25PZmZzZXQ/IFNlY3Rpb25PZmZzZXQtPkhpZ2hQYXJ0IDogMCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VjdGlvbk9mZnNldD8gU2VjdGlvbk9mZnNldC0+TG93UGFydCAgOiAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpZXdTaXplPyAqVmlld1NpemUgOiAwLCBhZGRyZXNzKTsKKworICAgICAgICBUUkFDRSh2eGQsICJOdE1hcFZpZXdPZlNlY3Rpb246IHJlc3VsdD0lbHhcbiIsIHJlc3VsdCk7CisKKyAgICAgICAgaWYgKFdpbmVUb0FwcChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoQmFzZUFkZHJlc3MpICpCYXNlQWRkcmVzcyA9IFdpbmVUb0FwcChyZXN1bHQpOworICAgICAgICAgICAgRUFYX3JlZyhjb250ZXh0KSA9IFNUQVRVU19TVUNDRVNTOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEVBWF9yZWcoY29udGV4dCkgPSBTVEFUVVNfTk9fTUVNT1JZOyAvKiBGSVhNRSAqLworICAgIH0KKyAgICBicmVhazsKKworCisgICAgY2FzZSAweDAwMTI6IC8qIE50VW5tYXBWaWV3T2ZTZWN0aW9uICovCisgICAgICAgIC8qIAorICAgICAgICAgKiBJbnB1dDogICBFRFg6IEZsYXQgYWRkcmVzcyBvZiBhcmd1bWVudHMgb24gc3RhY2sKKyAgICAgICAgICogCisgICAgICAgICAqICAgRFdPUkQgIFByb2Nlc3NIYW5kbGUgIFtpbl0gIFByb2Nlc3MgKGRlZmluaW5nIGFkZHJlc3Mgc3BhY2UpCisgICAgICAgICAqICAgTFBCWVRFIEJhc2VBZGRyZXNzICAgIFtpbl0gIEJhc2UgYWRkcmVzcyBvZiB2aWV3IHRvIGJlIHVubWFwcGVkCisgICAgICAgICAqCisgICAgICAgICAqIE91dHB1dDogIEVBWDogTnRTdGF0dXMKKyAgICAgICAgICovCisgICAgeworICAgICAgICBEV09SRCAqc3RhY2sgICAgICAgICAgPSAoRFdPUkQgKilBcHBUb1dpbmUoRURYX3JlZyhjb250ZXh0KSk7CisgICAgICAgIERXT1JEICBQcm9jZXNzSGFuZGxlICA9IHN0YWNrWzBdOyAvKiBpZ25vcmVkICovCisgICAgICAgIExQQllURSBCYXNlQWRkcmVzcyAgICA9IChMUEJZVEUpQXBwVG9XaW5lKHN0YWNrWzFdKTsKKworICAgICAgICBUUkFDRSh2eGQsICJOdFVubWFwVmlld09mU2VjdGlvbiglbHgsICVseClcbiIsIAorICAgICAgICAgICAgICAgICAgIFByb2Nlc3NIYW5kbGUsIChEV09SRClCYXNlQWRkcmVzcyk7CisKKyAgICAgICAgVW5tYXBWaWV3T2ZGaWxlKEJhc2VBZGRyZXNzKTsKKworICAgICAgICBFQVhfcmVnKGNvbnRleHQpID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgfQorICAgIGJyZWFrOworCisKKyAgICBjYXNlIDB4MDAxMzogLyogTnRGbHVzaFZpcnR1YWxNZW1vcnkgKi8KKyAgICAgICAgLyogCisgICAgICAgICAqIElucHV0OiAgIEVEWDogRmxhdCBhZGRyZXNzIG9mIGFyZ3VtZW50cyBvbiBzdGFjaworICAgICAgICAgKiAKKyAgICAgICAgICogICBEV09SRCAgIFByb2Nlc3NIYW5kbGUgIFtpbl0gIFByb2Nlc3MgKGRlZmluaW5nIGFkZHJlc3Mgc3BhY2UpCisgICAgICAgICAqICAgTFBCWVRFICpCYXNlQWRkcmVzcyAgICBbaW4/XSBCYXNlIGFkZHJlc3Mgb2YgcmFuZ2UgdG8gYmUgZmx1c2hlZAorICAgICAgICAgKiAgIERXT1JEICAqVmlld1NpemUgICAgICAgW2luP10gTnVtYmVyIG9mIGJ5dGVzIHRvIGJlIGZsdXNoZWQKKyAgICAgICAgICogICBEV09SRCAgKnVua25vd24gICAgICAgIFs/Pz9dICg/PyB1bmtub3duID8/KQorICAgICAgICAgKgorICAgICAgICAgKiBPdXRwdXQ6ICBFQVg6IE50U3RhdHVzCisgICAgICAgICAqLworICAgIHsKKyAgICAgICAgRFdPUkQgKnN0YWNrICAgICAgICAgID0gKERXT1JEICopQXBwVG9XaW5lKEVEWF9yZWcoY29udGV4dCkpOworICAgICAgICBEV09SRCAgUHJvY2Vzc0hhbmRsZSAgPSBzdGFja1swXTsgLyogaWdub3JlZCAqLworICAgICAgICBEV09SRCAqQmFzZUFkZHJlc3MgICAgPSAoRFdPUkQgKilBcHBUb1dpbmUoc3RhY2tbMV0pOworICAgICAgICBEV09SRCAqVmlld1NpemUgICAgICAgPSAoRFdPUkQgKilBcHBUb1dpbmUoc3RhY2tbMl0pOworICAgICAgICBEV09SRCAqdW5rbm93biAgICAgICAgPSAoRFdPUkQgKilBcHBUb1dpbmUoc3RhY2tbM10pOworICAgICAgICAKKyAgICAgICAgTFBCWVRFIGFkZHJlc3MgPSAoTFBCWVRFKShCYXNlQWRkcmVzcz8gQXBwVG9XaW5lKCpCYXNlQWRkcmVzcykgOiAwKTsKKyAgICAgICAgRFdPUkQgIHNpemUgICAgPSBWaWV3U2l6ZT8gKlZpZXdTaXplIDogMDsKKworICAgICAgICBUUkFDRSh2eGQsICJOdEZsdXNoVmlydHVhbE1lbW9yeSglbHgsICVseCwgJWx4LCAlbHgpXG4iLCAKKyAgICAgICAgICAgICAgICAgICBQcm9jZXNzSGFuZGxlLCAoRFdPUkQpQmFzZUFkZHJlc3MsIChEV09SRClWaWV3U2l6ZSwgCisgICAgICAgICAgICAgICAgICAgKERXT1JEKXVua25vd24pOworICAgICAgICBUUkFDRSh2eGQsICJOdEZsdXNoVmlydHVhbE1lbW9yeTogYmFzZT0lbHgsIHNpemU9JWx4XG4iLCAKKyAgICAgICAgICAgICAgICAgICAoRFdPUkQpYWRkcmVzcywgc2l6ZSk7CisKKyAgICAgICAgRmx1c2hWaWV3T2ZGaWxlKGFkZHJlc3MsIHNpemUpOworCisgICAgICAgIEVBWF9yZWcoY29udGV4dCkgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICB9CisgICAgYnJlYWs7CisKKworICAgIGNhc2UgMHgwMDE0OiAvKiBHZXQvU2V0IERlYnVnIFJlZ2lzdGVycyAqLworICAgICAgICAvKgorICAgICAgICAgKiBJbnB1dDogICBFQ1g6IDAgaWYgR2V0LCAxIGlmIFNldAorICAgICAgICAgKgorICAgICAgICAgKiAgICAgICAgICBFRFg6IEdldDogRmxhdCBhZGRyZXNzIG9mIGJ1ZmZlciB0byByZWNlaXZlIHZhbHVlcyBvZgorICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgZGVidWcgcmVnaXN0ZXJzIERSMCAuLiBEUjcKKyAgICAgICAgICogICAgICAgICAgICAgICBTZXQ6IEZsYXQgYWRkcmVzcyBvZiBidWZmZXIgY29udGFpbmluZyB2YWx1ZXMgb2YKKyAgICAgICAgICogICAgICAgICAgICAgICAgICAgIGRlYnVnIHJlZ2lzdGVycyBEUjAgLi4gRFI3IHRvIGJlIHNldAorICAgICAgICAgKiBPdXRwdXQ6ICBOb25lCisgICAgICAgICAqLworCisgICAgICAgIEZJWE1FKHZ4ZCwgIlswMDE0XSBFQ1g9JWx4IEVEWD0lbHhcbiIsIAorICAgICAgICAgICAgICAgICAgIEVDWF9yZWcoY29udGV4dCksIEVEWF9yZWcoY29udGV4dCkpOworCisgICAgICAgIC8qIEZJWE1FICovCisgICAgICAgIGJyZWFrOworCisKKyAgICBjYXNlIDB4MDAxNTogLyogU2V0IENvcHJvY2Vzc29yIEVtdWxhdGlvbiBGbGFnICovCisgICAgICAgIC8qCisgICAgICAgICAqIElucHV0OiAgIEVEWDogMCB0byBkZWFjdGl2YXRlLCAxIHRvIGFjdGl2YXRlIGNvcHJvY2Vzc29yIGVtdWxhdGlvbgorICAgICAgICAgKgorICAgICAgICAgKiBPdXRwdXQ6ICBOb25lCisgICAgICAgICAqLworCisgICAgICAgIFRSQUNFKHZ4ZCwgIlswMDE1XSBFRFg9JWx4XG4iLCBFRFhfcmVnKGNvbnRleHQpKTsKKworICAgICAgICAvKiBXZSBkb24ndCBjYXJlLCBhcyB3ZSBhbHdheXMgaGF2ZSBhIGNvcHJvY2Vzc29yIGFueXdheSAqLworICAgICAgICBicmVhazsKKworCisgICAgY2FzZSAweDAwMTY6IC8qIEluaXQgV2luMzJTIFZ4RCBQU1AgKi8KKyAgICAgICAgLyoKKyAgICAgICAgICogSWYgY2FsbGVkIHRvIHF1ZXJ5IHJlcXVpcmVkIFBTUCBzaXplOgorICAgICAgICAgKgorICAgICAgICAgKiAgICAgSW5wdXQ6ICBFQlg6IDAKKyAgICAgICAgICogICAgIE91dHB1dDogRURYOiBSZXF1aXJlZCBzaXplIG9mIFdpbjMycyBWeEQgUFNQCisgICAgICAgICAqCisgICAgICAgICAqIElmIGNhbGxlZCB0byBpbml0aWFsaXplIGFsbG9jYXRlZCBQU1A6CisgICAgICAgICAqCisgICAgICAgICAqICAgICBJbnB1dDogIEVCWDogTG9Xb3JkOiBTZWxlY3RvciBvZiBXaW4zMnMgVnhEIFBTUAorICAgICAgICAgKiAgICAgICAgICAgICAgICAgIEhpV29yZDogUGFyYWdyYXBoIG9mIFdpbjMycyBWeEQgUFNQIChET1NNRU0pCisgICAgICAgICAqICAgICBPdXRwdXQ6IE5vbmUKKyAgICAgICAgICovCisgCisgICAgICAgIGlmIChFQlhfcmVnKGNvbnRleHQpID09IDApCisgICAgICAgICAgICBFRFhfcmVnKGNvbnRleHQpID0gMHg4MDsKKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBQREIgKnBzcCA9IFBUUl9TRUdfT0ZGX1RPX0xJTihCWF9yZWcoY29udGV4dCksIDApOworICAgICAgICAgICAgcHNwLT5uYkZpbGVzID0gMzI7CisgICAgICAgICAgICBwc3AtPmZpbGVIYW5kbGVzUHRyID0gTUFLRUxPTkcoSElXT1JEKEVCWF9yZWcoY29udGV4dCkpLCAweDVjKTsKKyAgICAgICAgICAgIG1lbXNldCgoTFBCWVRFKXBzcCArIDB4NWMsICdceEZGJywgMzIpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisKKyAgICBjYXNlIDB4MDAxNzogLyogU2V0IEJyZWFrIFBvaW50ICovCisgICAgICAgIC8qCisgICAgICAgICAqIElucHV0OiAgIEVCWDogT2Zmc2V0IG9mIEJyZWFrIFBvaW50CisgICAgICAgICAqICAgICAgICAgIENYOiAgU2VsZWN0b3Igb2YgQnJlYWsgUG9pbnQKKyAgICAgICAgICoKKyAgICAgICAgICogT3V0cHV0OiAgTm9uZQorICAgICAgICAgKi8KKworICAgICAgICBGSVhNRSh2eGQsICJbMDAxN10gRUJYPSVseCBDWD0leFxuIiwgCisgICAgICAgICAgICAgICAgICAgRUJYX3JlZyhjb250ZXh0KSwgQ1hfcmVnKGNvbnRleHQpKTsKKworICAgICAgICAvKiBGSVhNRSAqLworICAgICAgICBicmVhazsKKworCisgICAgY2FzZSAweDAwMTg6IC8qIFZpcnR1YWxMb2NrICovCisgICAgICAgIC8qIAorICAgICAgICAgKiBJbnB1dDogICBFQ1g6IEN1cnJlbnQgUHJvY2VzcworICAgICAgICAgKgorICAgICAgICAgKiAgICAgICAgICBFRFg6IEZsYXQgYWRkcmVzcyBvZiBhcmd1bWVudHMgb24gc3RhY2sKKyAgICAgICAgICogCisgICAgICAgICAqICAgRFdPUkQgKnJldHYgICAgIFtvdXRdIFRSVUUgaWYgc3VjY2VzcywgRkFMU0UgaWYgZmFpbHVyZQorICAgICAgICAgKiAgIExQVk9JRCBiYXNlICAgICBbaW5dICBGbGF0IGFkZHJlc3Mgb2YgcmFuZ2UgdG8gbG9jaworICAgICAgICAgKiAgIERXT1JEICBzaXplICAgICBbaW5dICBTaXplIG9mIHJhbmdlCisgICAgICAgICAqCisgICAgICAgICAqIE91dHB1dDogIEVBWDogTnRTdGF0dXMKKyAgICAgICAgICovCisgICAgeworICAgICAgICBEV09SRCAqc3RhY2sgID0gKERXT1JEICopQXBwVG9XaW5lKEVEWF9yZWcoY29udGV4dCkpOworICAgICAgICBEV09SRCAqcmV0diAgID0gKERXT1JEICopQXBwVG9XaW5lKHN0YWNrWzBdKTsKKyAgICAgICAgTFBWT0lEIGJhc2UgICA9IChMUFZPSUQpIEFwcFRvV2luZShzdGFja1sxXSk7CisgICAgICAgIERXT1JEICBzaXplICAgPSBzdGFja1syXTsKKyAgICAgICAgRFdPUkQgIHJlc3VsdDsKKworICAgICAgICBUUkFDRSh2eGQsICJWaXJ0dWFsTG9jayglbHgsICVseCwgJWx4KVxuIiwgCisgICAgICAgICAgICAgICAgICAgKERXT1JEKXJldHYsIChEV09SRCliYXNlLCBzaXplKTsKKworICAgICAgICByZXN1bHQgPSBWaXJ0dWFsTG9jayhiYXNlLCBzaXplKTsKKworICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAgICAgKnJldHYgICAgICAgICAgICA9IFRSVUUsCisgICAgICAgICAgICBFQVhfcmVnKGNvbnRleHQpID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICpyZXR2ICAgICAgICAgICAgPSBGQUxTRSwKKyAgICAgICAgICAgIEVBWF9yZWcoY29udGV4dCkgPSBTVEFUVVNfTk9fTUVNT1JZOyAgLyogRklYTUUgKi8KKyAgICB9CisgICAgYnJlYWs7CisKKworICAgIGNhc2UgMHgwMDE5OiAvKiBWaXJ0dWFsVW5sb2NrICovCisgICAgICAgIC8qIAorICAgICAgICAgKiBJbnB1dDogICBFQ1g6IEN1cnJlbnQgUHJvY2VzcworICAgICAgICAgKgorICAgICAgICAgKiAgICAgICAgICBFRFg6IEZsYXQgYWRkcmVzcyBvZiBhcmd1bWVudHMgb24gc3RhY2sKKyAgICAgICAgICogCisgICAgICAgICAqICAgRFdPUkQgKnJldHYgICAgIFtvdXRdIFRSVUUgaWYgc3VjY2VzcywgRkFMU0UgaWYgZmFpbHVyZQorICAgICAgICAgKiAgIExQVk9JRCBiYXNlICAgICBbaW5dICBGbGF0IGFkZHJlc3Mgb2YgcmFuZ2UgdG8gdW5sb2NrCisgICAgICAgICAqICAgRFdPUkQgIHNpemUgICAgIFtpbl0gIFNpemUgb2YgcmFuZ2UKKyAgICAgICAgICoKKyAgICAgICAgICogT3V0cHV0OiAgRUFYOiBOdFN0YXR1cworICAgICAgICAgKi8KKyAgICB7CisgICAgICAgIERXT1JEICpzdGFjayAgPSAoRFdPUkQgKilBcHBUb1dpbmUoRURYX3JlZyhjb250ZXh0KSk7CisgICAgICAgIERXT1JEICpyZXR2ICAgPSAoRFdPUkQgKilBcHBUb1dpbmUoc3RhY2tbMF0pOworICAgICAgICBMUFZPSUQgYmFzZSAgID0gKExQVk9JRCkgQXBwVG9XaW5lKHN0YWNrWzFdKTsKKyAgICAgICAgRFdPUkQgIHNpemUgICA9IHN0YWNrWzJdOworICAgICAgICBEV09SRCAgcmVzdWx0OworCisgICAgICAgIFRSQUNFKHZ4ZCwgIlZpcnR1YWxVbmxvY2soJWx4LCAlbHgsICVseClcbiIsIAorICAgICAgICAgICAgICAgICAgIChEV09SRClyZXR2LCAoRFdPUkQpYmFzZSwgc2l6ZSk7CisKKyAgICAgICAgcmVzdWx0ID0gVmlydHVhbFVubG9jayhiYXNlLCBzaXplKTsKKworICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAgICAgKnJldHYgICAgICAgICAgICA9IFRSVUUsCisgICAgICAgICAgICBFQVhfcmVnKGNvbnRleHQpID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICpyZXR2ICAgICAgICAgICAgPSBGQUxTRSwKKyAgICAgICAgICAgIEVBWF9yZWcoY29udGV4dCkgPSBTVEFUVVNfTk9fTUVNT1JZOyAgLyogRklYTUUgKi8KKyAgICB9CisgICAgYnJlYWs7CisKKworICAgIGNhc2UgMHgwMDFBOiAvKiBLR2V0U3lzdGVtSW5mbyAqLworICAgICAgICAvKgorICAgICAgICAgKiBJbnB1dDogICBOb25lCisgICAgICAgICAqCisgICAgICAgICAqIE91dHB1dDogIEVDWDogIFN0YXJ0IG9mIHNwYXJzZSBtZW1vcnkgYXJlbmEKKyAgICAgICAgICogICAgICAgICAgRURYOiAgRW5kIG9mIHNwYXJzZSBtZW1vcnkgYXJlbmEKKyAgICAgICAgICovCisKKyAgICAgICAgVFJBQ0UodnhkLCAiS0dldFN5c3RlbUluZm8oKVxuIik7CisgICAgICAgIAorICAgICAgICAvKgorICAgICAgICAgKiBOb3RlOiBXaW4zMnMgcmVzZXJ2ZXMgMEdCIC0gMkdCIGZvciBXaW4gMy4xIGFuZCB1c2VzIDJHQiAtIDRHQiBhcyAKKyAgICAgICAgICogICAgICAgc3BhcnNlIG1lbW9yeSBhcmVuYS4gV2UgZG8gaXQgdGhlIG90aGVyIHdheSBhcm91bmQsIHNpbmNlIAorICAgICAgICAgKiAgICAgICB3ZSBoYXZlIHRvIHJlc2VydmUgM0dCIC0gNEdCIGZvciBMaW51eCwgYW5kIHRodXMgdXNlCisgICAgICAgICAqICAgICAgIDBHQiAtIDNHQiBhcyBzcGFyc2UgbWVtb3J5IGFyZW5hLgorICAgICAgICAgKgorICAgICAgICAgKiAgICAgICBGSVhNRTogV2hhdCBhYm91dCBvdGhlciBPU2VzID8KKyAgICAgICAgICovCisKKyAgICAgICAgRUNYX3JlZyhjb250ZXh0KSA9IFdpbmVUb0FwcCgweDAwMDAwMDAwKTsKKyAgICAgICAgRURYX3JlZyhjb250ZXh0KSA9IFdpbmVUb0FwcCgweGJmZmZmZmZmKTsKKyAgICAgICAgYnJlYWs7CisKKworICAgIGNhc2UgMHgwMDFCOiAvKiBLR2xvYmFsTWVtU3RhdCAqLworICAgICAgICAvKgorICAgICAgICAgKiBJbnB1dDogICBFU0k6IEZsYXQgYWRkcmVzcyBvZiBidWZmZXIgdG8gcmVjZWl2ZSBtZW1vcnkgaW5mbworICAgICAgICAgKgorICAgICAgICAgKiBPdXRwdXQ6ICBOb25lCisgICAgICAgICAqLworICAgIHsKKyAgICAgICAgc3RydWN0IFdpbjMyc01lbW9yeUluZm8KKyAgICAgICAgeworICAgICAgICAgICAgRFdPUkQgRElQaHlzX0NvdW50OyAgICAgICAvKiBUb3RhbCBwaHlzaWNhbCBwYWdlcyAqLworICAgICAgICAgICAgRFdPUkQgRElGcmVlX0NvdW50OyAgICAgICAvKiBGcmVlIHBoeXNpY2FsIHBhZ2VzICovCisgICAgICAgICAgICBEV09SRCBESUxpbl9Ub3RhbF9Db3VudDsgIC8qIFRvdGFsIHZpcnR1YWwgcGFnZXMgKHByaXZhdGUgYXJlbmEpICovCisgICAgICAgICAgICBEV09SRCBESUxpbl9Ub3RhbF9GcmVlOyAgIC8qIEZyZWUgdmlydHVhbCBwYWdlcyAocHJpdmF0ZSBhcmVuYSkgKi8KKworICAgICAgICAgICAgRFdPUkQgU3BhcnNlVG90YWw7ICAgICAgICAvKiBUb3RhbCBzaXplIG9mIHNwYXJzZSBhcmVuYSAoYnl0ZXMgPykgKi8KKyAgICAgICAgICAgIERXT1JEIFNwYXJzZUZyZWU7ICAgICAgICAgLyogRnJlZSBzaXplIG9mIHNwYXJzZSBhcmVuYSAoYnl0ZXMgPykgKi8KKyAgICAgICAgfTsKKworICAgICAgICBzdHJ1Y3QgV2luMzJzTWVtb3J5SW5mbyAqaW5mbyA9IAorICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IFdpbjMyc01lbW9yeUluZm8gKilBcHBUb1dpbmUoRVNJX3JlZyhjb250ZXh0KSk7CisKKyAgICAgICAgRklYTUUodnhkLCAiS0dsb2JhbE1lbVN0YXQoJWx4KVxuIiwgKERXT1JEKWluZm8pOworCisgICAgICAgIC8qIEZJWE1FICovCisgICAgfQorICAgIGJyZWFrOworCisKKyAgICBjYXNlIDB4MDAxQzogLyogRW5hYmxlL0Rpc2FibGUgRXhjZXB0aW9ucyAqLworICAgICAgICAvKgorICAgICAgICAgKiBJbnB1dDogICBFQ1g6IDAgdG8gZGlzYWJsZSwgMSB0byBlbmFibGUgZXhjZXB0aW9uIGhhbmRsaW5nCisgICAgICAgICAqCisgICAgICAgICAqIE91dHB1dDogIE5vbmUKKyAgICAgICAgICovCisKKyAgICAgICAgVFJBQ0UodnhkLCAiWzAwMWNdIEVDWD0lbHhcbiIsIEVDWF9yZWcoY29udGV4dCkpOworCisgICAgICAgIC8qIEZJWE1FICovCisgICAgICAgIGJyZWFrOworCisKKyAgICBjYXNlIDB4MDAxRDogLyogVmlydHVhbEFsbG9jIGNhbGxlZCBmcm9tIDE2LWJpdCBjb2RlICovCisgICAgICAgIC8qIAorICAgICAgICAgKiBJbnB1dDogICBFRFg6IFNlZ21lbnRlZCBhZGRyZXNzIG9mIGFyZ3VtZW50cyBvbiBzdGFjaworICAgICAgICAgKiAKKyAgICAgICAgICogICBMUFZPSUQgYmFzZSAgICAgW2luXSAgRmxhdCBhZGRyZXNzIG9mIHJlZ2lvbiB0byByZXNlcnZlL2NvbW1pdAorICAgICAgICAgKiAgIERXT1JEICBzaXplICAgICBbaW5dICBTaXplIG9mIHJlZ2lvbgorICAgICAgICAgKiAgIERXT1JEICB0eXBlICAgICBbaW5dICBUeXBlIG9mIGFsbG9jYXRpb24KKyAgICAgICAgICogICBEV09SRCAgcHJvdCAgICAgW2luXSAgVHlwZSBvZiBhY2Nlc3MgcHJvdGVjdGlvbgorICAgICAgICAgKgorICAgICAgICAgKiBPdXRwdXQ6ICBFQVg6IE50U3RhdHVzCisgICAgICAgICAqICAgICAgICAgIEVEWDogRmxhdCBiYXNlIGFkZHJlc3Mgb2YgYWxsb2NhdGVkIHJlZ2lvbgorICAgICAgICAgKi8KKyAgICB7CisgICAgICAgIERXT1JEICpzdGFjayAgPSBQVFJfU0VHX09GRl9UT19MSU4oTE9XT1JEKEVEWF9yZWcoY29udGV4dCkpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBISVdPUkQoRURYX3JlZyhjb250ZXh0KSkpOworICAgICAgICBMUFZPSUQgYmFzZSAgID0gKExQVk9JRClBcHBUb1dpbmUoc3RhY2tbMF0pOworICAgICAgICBEV09SRCAgc2l6ZSAgID0gc3RhY2tbMV07CisgICAgICAgIERXT1JEICB0eXBlICAgPSBzdGFja1syXTsKKyAgICAgICAgRFdPUkQgIHByb3QgICA9IHN0YWNrWzNdOworICAgICAgICBEV09SRCAgcmVzdWx0OworCisgICAgICAgIFRSQUNFKHZ4ZCwgIlZpcnR1YWxBbGxvYzE2KCVseCwgJWx4LCAlbHgsICVseClcbiIsIAorICAgICAgICAgICAgICAgICAgIChEV09SRCliYXNlLCBzaXplLCB0eXBlLCBwcm90KTsKKworICAgICAgICBpZiAodHlwZSAmIDB4ODAwMDAwMDApCisgICAgICAgIHsKKyAgICAgICAgICAgIFdBUk4odnhkLCAiVmlydHVhbEFsbG9jMTY6IHN0cmFuZ2UgdHlwZSAlbHhcbiIsIHR5cGUpOworICAgICAgICAgICAgdHlwZSAmPSAweDdmZmZmZmZmOworICAgICAgICB9CisKKyAgICAgICAgcmVzdWx0ID0gKERXT1JEKVZpcnR1YWxBbGxvYyhiYXNlLCBzaXplLCB0eXBlLCBwcm90KTsKKworICAgICAgICBpZiAoV2luZVRvQXBwKHJlc3VsdCkpCisgICAgICAgICAgICBFRFhfcmVnKGNvbnRleHQpID0gV2luZVRvQXBwKHJlc3VsdCksCisgICAgICAgICAgICBFQVhfcmVnKGNvbnRleHQpID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEVEWF9yZWcoY29udGV4dCkgPSAwLAorICAgICAgICAgICAgRUFYX3JlZyhjb250ZXh0KSA9IFNUQVRVU19OT19NRU1PUlk7ICAvKiBGSVhNRSAqLworICAgIH0KKyAgICBicmVhazsKKworCisgICAgY2FzZSAweDAwMUU6IC8qIFZpcnR1YWxGcmVlIGNhbGxlZCBmcm9tIDE2LWJpdCBjb2RlICovCisgICAgICAgIC8qIAorICAgICAgICAgKiBJbnB1dDogICBFRFg6IFNlZ21lbnRlZCBhZGRyZXNzIG9mIGFyZ3VtZW50cyBvbiBzdGFjaworICAgICAgICAgKiAKKyAgICAgICAgICogICBMUFZPSUQgYmFzZSAgICAgW2luXSAgRmxhdCBhZGRyZXNzIG9mIHJlZ2lvbgorICAgICAgICAgKiAgIERXT1JEICBzaXplICAgICBbaW5dICBTaXplIG9mIHJlZ2lvbgorICAgICAgICAgKiAgIERXT1JEICB0eXBlICAgICBbaW5dICBUeXBlIG9mIG9wZXJhdGlvbgorICAgICAgICAgKgorICAgICAgICAgKiBPdXRwdXQ6ICBFQVg6IE50U3RhdHVzCisgICAgICAgICAqICAgICAgICAgIEVEWDogVFJVRSBpZiBzdWNjZXNzLCBGQUxTRSBpZiBmYWlsdXJlCisgICAgICAgICAqLworICAgIHsKKyAgICAgICAgRFdPUkQgKnN0YWNrICA9IFBUUl9TRUdfT0ZGX1RPX0xJTihMT1dPUkQoRURYX3JlZyhjb250ZXh0KSksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhJV09SRChFRFhfcmVnKGNvbnRleHQpKSk7CisgICAgICAgIExQVk9JRCBiYXNlICAgPSAoTFBWT0lEKUFwcFRvV2luZShzdGFja1swXSk7CisgICAgICAgIERXT1JEICBzaXplICAgPSBzdGFja1sxXTsKKyAgICAgICAgRFdPUkQgIHR5cGUgICA9IHN0YWNrWzJdOworICAgICAgICBEV09SRCAgcmVzdWx0OworCisgICAgICAgIFRSQUNFKHZ4ZCwgIlZpcnR1YWxGcmVlMTYoJWx4LCAlbHgsICVseClcbiIsIAorICAgICAgICAgICAgICAgICAgIChEV09SRCliYXNlLCBzaXplLCB0eXBlKTsKKworICAgICAgICByZXN1bHQgPSBWaXJ0dWFsRnJlZShiYXNlLCBzaXplLCB0eXBlKTsKKworICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAgICAgRURYX3JlZyhjb250ZXh0KSA9IFRSVUUsCisgICAgICAgICAgICBFQVhfcmVnKGNvbnRleHQpID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEVEWF9yZWcoY29udGV4dCkgPSBGQUxTRSwKKyAgICAgICAgICAgIEVBWF9yZWcoY29udGV4dCkgPSBTVEFUVVNfTk9fTUVNT1JZOyAgLyogRklYTUUgKi8KKyAgICB9CisgICAgYnJlYWs7CisKKworICAgIGNhc2UgMHgwMDFGOiAvKiBGV29ya2luZ1NldFNpemUgKi8KKyAgICAgICAgLyoKKyAgICAgICAgICogSW5wdXQ6ICAgRURYOiAwIGlmIEdldCwgMSBpZiBTZXQKKyAgICAgICAgICoKKyAgICAgICAgICogICAgICAgICAgRUNYOiBHZXQ6IEJ1ZmZlciB0byByZWNlaXZlIFdvcmtpbmcgU2V0IFNpemUKKyAgICAgICAgICogICAgICAgICAgICAgICBTZXQ6IEJ1ZmZlciBjb250YWluaW5nIFdvcmtpbmcgU2V0IFNpemUKKyAgICAgICAgICoKKyAgICAgICAgICogT3V0cHV0OiAgTnRTdGF0dXMKKyAgICAgICAgICovCisgICAgeworICAgICAgICBEV09SRCAqcHRyID0gKERXT1JEICopQXBwVG9XaW5lKEVDWF9yZWcoY29udGV4dCkpOworICAgICAgICBCT09MMzIgc2V0ID0gRURYX3JlZyhjb250ZXh0KTsKKyAgICAgICAgCisgICAgICAgIFRSQUNFKHZ4ZCwgIkZXb3JraW5nU2V0U2l6ZSglbHgsICVseClcbiIsIChEV09SRClwdHIsIChEV09SRClzZXQpOworCisgICAgICAgIGlmIChzZXQpCisgICAgICAgICAgICAvKiBXZSBkbyBpdCBkaWZmZXJlbnRseSAuLi4gKi87CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICpwdHIgPSAweDEwMDsKKworICAgICAgICBFQVhfcmVnKGNvbnRleHQpID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgfQorICAgIGJyZWFrOworCisKKyAgICBkZWZhdWx0OgorCVZYRF9CQVJGKCBjb250ZXh0LCAiVzMyUyIgKTsKKyAgICB9CisKKyAgICAjdW5kZWYgQXBwVG9XaW5lCisgICAgI3VuZGVmIFdpbmVUb0FwcAorfQorCmRpZmYgLS1naXQgYS9vYmplY3RzL2JpdG1hcC5jIGIvb2JqZWN0cy9iaXRtYXAuYwppbmRleCA0ZDZmZDRiLi5hM2RmMDJiIDEwMDY0NAotLS0gYS9vYmplY3RzL2JpdG1hcC5jCisrKyBiL29iamVjdHMvYml0bWFwLmMKQEAgLTE3NSwxMCArMTc1LDcgQEAKICAgICBibXBPYmpQdHItPmJpdG1hcC5ibVdpZHRoQnl0ZXMgPSAoSU5UMTYpQklUTUFQX1dJRFRIX0JZVEVTKCB3aWR0aCwgYnBwICk7CiAgICAgYm1wT2JqUHRyLT5iaXRtYXAuYm1CaXRzID0gTlVMTDsKIAotICAgIGJtcE9ialB0ci0+ZGliU2VjdGlvbiA9IE5VTEw7Ci0gICAgYm1wT2JqUHRyLT5jb2xvck1hcCA9IE5VTEw7Ci0gICAgYm1wT2JqUHRyLT5uQ29sb3JNYXAgPSAwOwotICAgIGJtcE9ialB0ci0+c3RhdHVzID0gRElCX05vSGFuZGxlcjsKKyAgICBibXBPYmpQdHItPmRpYiA9IE5VTEw7CiAKICAgICAgIC8qIENyZWF0ZSB0aGUgcGl4bWFwICovCiAgICAgYm1wT2JqUHRyLT5waXhtYXAgPSBUU1hDcmVhdGVQaXhtYXAoZGlzcGxheSwgcm9vdFdpbmRvdywgd2lkdGgsIGhlaWdodCwgYnBwKTsKQEAgLTgyOSwyMCArODI2LDcgQEAKICAgICB9CiAjZW5kaWYKIAotICAgIGlmIChibXAtPmRpYlNlY3Rpb24pCi0gICAgewotCURJQlNFQ1RJT04gKmRpYiA9IGJtcC0+ZGliU2VjdGlvbjsKLQotCWlmIChkaWItPmRzQm0uYm1CaXRzKQotICAgICAgICAgICAgaWYgKGRpYi0+ZHNoU2VjdGlvbikKLSAgICAgICAgICAgICAgICBVbm1hcFZpZXdPZkZpbGUoZGliLT5kc0JtLmJtQml0cyk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgVmlydHVhbEZyZWUoZGliLT5kc0JtLmJtQml0cywgTUVNX1JFTEVBU0UsIDBMKTsKLQotCUhlYXBGcmVlKEdldFByb2Nlc3NIZWFwKCksIDAsIGRpYik7Ci0gICAgfQotICAgIGlmIChibXAtPmNvbG9yTWFwKQotCUhlYXBGcmVlKEdldFByb2Nlc3NIZWFwKCksIDAsIGJtcC0+Y29sb3JNYXApOworICAgIERJQl9EZWxldGVESUJTZWN0aW9uKCBibXAgKTsKIAogICAgIHJldHVybiBHRElfRnJlZU9iamVjdCggaGJpdG1hcCApOwogfQpAQCAtODUzLDcgKzgzNyw3IEBACiAgKi8KIElOVDE2IEJJVE1BUF9HZXRPYmplY3QxNiggQklUTUFQT0JKICogYm1wLCBJTlQxNiBjb3VudCwgTFBWT0lEIGJ1ZmZlciApCiB7Ci0gICAgaWYgKGJtcC0+ZGliU2VjdGlvbikKKyAgICBpZiAoYm1wLT5kaWIpCiAgICAgewogCUZJWE1FKGJpdG1hcCwgIm5vdCBpbXBsZW1lbnRlZCBmb3IgRElCc1xuIik7CiAJcmV0dXJuIDA7CkBAIC04NzIsNyArODU2LDcgQEAKICAqLwogSU5UMzIgQklUTUFQX0dldE9iamVjdDMyKCBCSVRNQVBPQkogKiBibXAsIElOVDMyIGNvdW50LCBMUFZPSUQgYnVmZmVyICkKIHsKLSAgICBpZiAoYm1wLT5kaWJTZWN0aW9uKQorICAgIGlmIChibXAtPmRpYikKICAgICB7CiAJaWYgKGNvdW50IDwgc2l6ZW9mKERJQlNFQ1RJT04pKQogCXsKQEAgLTg4Myw3ICs4NjcsNyBAQAogCSAgICBpZiAoY291bnQgPiBzaXplb2YoRElCU0VDVElPTikpIGNvdW50ID0gc2l6ZW9mKERJQlNFQ1RJT04pOwogCX0KIAotCW1lbWNweSggYnVmZmVyLCBibXAtPmRpYlNlY3Rpb24sIGNvdW50ICk7CisJbWVtY3B5KCBidWZmZXIsICZibXAtPmRpYi0+ZGliU2VjdGlvbiwgY291bnQgKTsKIAlyZXR1cm4gY291bnQ7CiAgICAgfQogICAgIGVsc2UKZGlmZiAtLWdpdCBhL29iamVjdHMvZGliLmMgYi9vYmplY3RzL2RpYi5jCmluZGV4IDcyNzgwZjkuLjQxM2UyMzMgMTAwNjQ0Ci0tLSBhL29iamVjdHMvZGliLmMKKysrIGIvb2JqZWN0cy9kaWIuYwpAQCAtMjQsMTIgKzI0LDEzIEBACiB7CiAgICAgREMgICAgICAgICAgICAgICAqZGM7CiAgICAgTFBDVk9JRCAgICAgICAgICAgYml0czsKKyAgICBYSW1hZ2UgICAgICAgICAgICppbWFnZTsKICAgICBpbnQgICAgICAgICAgICAgICBsaW5lczsKICAgICBEV09SRCAgICAgICAgICAgICBpbmZvV2lkdGg7CiAgICAgV09SRCAgICAgICAgICAgICAgZGVwdGg7CiAgICAgV09SRCAgICAgICAgICAgICAgaW5mb0JwcDsKICAgICBXT1JEICAgICAgICAgICAgICBjb21wcmVzc2lvbjsKLSAgICBSR0JRVUFEICAgICAgICAgICpjb2xvck1hcDsKKyAgICBpbnQgICAgICAgICAgICAgICpjb2xvck1hcDsKICAgICBpbnQgICAgICAgICAgICAgICBuQ29sb3JNYXA7CiAgICAgRHJhd2FibGUgICAgICAgICAgZHJhd2FibGU7CiAgICAgR0MgICAgICAgICAgICAgICAgZ2M7CkBAIC0xNzQsMTMgKzE3NSwxMyBAQAogICogQnVpbGQgdGhlIGNvbG9yIG1hcCBmcm9tIHRoZSBiaXRtYXAgcGFsZXR0ZS4gU2hvdWxkIG5vdCBiZSBjYWxsZWQKICAqIGZvciBhID44LWJpdCBkZWVwIGJpdG1hcC4KICAqLwotc3RhdGljIFJHQlFVQUQgKkRJQl9CdWlsZENvbG9yTWFwKCBjb25zdCBCSVRNQVBJTkZPICppbmZvLCAKLQkJCQkgICBIUEFMRVRURTE2IGhQYWxldHRlLCBpbnQgKm5Db2xvcnMgKQorc3RhdGljIGludCAqRElCX0J1aWxkQ29sb3JNYXAoIERDICpkYywgV09SRCBjb2xvcnVzZSwgV09SRCBkZXB0aCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQklUTUFQSU5GTyAqaW5mbywgaW50ICpuQ29sb3JzICkKIHsKICAgICBpbnQgaSwgY29sb3JzOwogICAgIEJPT0wzMiBpc0luZm87CiAgICAgV09SRCAqY29sb3JQdHI7Ci0gICAgUkdCUVVBRCAqY29sb3JNYXBwaW5nOworICAgIGludCAqY29sb3JNYXBwaW5nOwogCiAgICAgaWYgKChpc0luZm8gPSAoaW5mby0+Ym1pSGVhZGVyLmJpU2l6ZSA9PSBzaXplb2YoQklUTUFQSU5GT0hFQURFUikpKSkKICAgICB7CkBAIC0yMDAsODUgKzIwMSw1MSBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBpZiAoIShjb2xvck1hcHBpbmcgPSAoUkdCUVVBRCAqKUhlYXBBbGxvYyhHZXRQcm9jZXNzSGVhcCgpLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9ycyAqIHNpemVvZihSR0JRVUFEKSApKSkgCisgICAgaWYgKCEoY29sb3JNYXBwaW5nID0gKGludCAqKUhlYXBBbGxvYyhHZXRQcm9jZXNzSGVhcCgpLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JzICogc2l6ZW9mKGludCkgKSkpIAogCXJldHVybiBOVUxMOwogCi0gICAgaWYgKGhQYWxldHRlID09IDApIC8qIERJQl9SR0JfQ09MT1JTICovCisgICAgaWYgKGNvbG9ydXNlID09IERJQl9SR0JfQ09MT1JTKQogICAgIHsKICAgICAgICAgaWYgKGlzSW5mbykKICAgICAgICAgewogICAgICAgICAgICAgUkdCUVVBRCAqIHJnYiA9IChSR0JRVUFEICopY29sb3JQdHI7CiAKLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb2xvcnM7IGkrKywgcmdiKyspCi0gICAgICAgICAgICAgICAgY29sb3JNYXBwaW5nW2ldID0gKnJnYjsKKyAgICAgICAgICAgIGlmIChkZXB0aCA9PSAxKSAgLyogTW9ub2Nocm9tZSAqLworICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb2xvcnM7IGkrKywgcmdiKyspCisgICAgICAgICAgICAgICAgICAgIGNvbG9yTWFwcGluZ1tpXSA9IChyZ2ItPnJnYlJlZCArIHJnYi0+cmdiR3JlZW4gKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmdiLT5yZ2JCbHVlID4gMjU1KjMvMik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvbG9yczsgaSsrLCByZ2IrKykKKyAgICAgICAgICAgICAgICAgICAgY29sb3JNYXBwaW5nW2ldID0gQ09MT1JfVG9QaHlzaWNhbCggZGMsIFJHQihyZ2ItPnJnYlJlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZ2ItPnJnYkdyZWVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJnYi0+cmdiQmx1ZSkpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgewogICAgICAgICAgICAgUkdCVFJJUExFICogcmdiID0gKFJHQlRSSVBMRSAqKWNvbG9yUHRyOwotICAgICAgICAKLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb2xvcnM7IGkrKywgcmdiKyspCi0gICAgICAgICAgICAgICAgY29sb3JNYXBwaW5nW2ldLnJnYlJlZCAgID0gcmdiLT5yZ2J0UmVkLAotICAgICAgICAgICAgICAgIGNvbG9yTWFwcGluZ1tpXS5yZ2JHcmVlbiA9IHJnYi0+cmdidEdyZWVuLAotICAgICAgICAgICAgICAgIGNvbG9yTWFwcGluZ1tpXS5yZ2JCbHVlICA9IHJnYi0+cmdidEJsdWU7CisKKyAgICAgICAgICAgIGlmIChkZXB0aCA9PSAxKSAgLyogTW9ub2Nocm9tZSAqLworICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb2xvcnM7IGkrKywgcmdiKyspCisgICAgICAgICAgICAgICAgICAgIGNvbG9yTWFwcGluZ1tpXSA9IChyZ2ItPnJnYnRSZWQgKyByZ2ItPnJnYnRHcmVlbiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZ2ItPnJnYnRCbHVlID4gMjU1KjMvMik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvbG9yczsgaSsrLCByZ2IrKykKKyAgICAgICAgICAgICAgICAgICAgY29sb3JNYXBwaW5nW2ldID0gQ09MT1JfVG9QaHlzaWNhbCggZGMsIFJHQihyZ2ItPnJnYnRSZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZ2ItPnJnYnRHcmVlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJnYi0+cmdidEJsdWUpKTsKICAgICAgICAgfQogICAgIH0KICAgICBlbHNlICAvKiBESUJfUEFMX0NPTE9SUyAqLwogICAgIHsKLQlQQUxFVFRFT0JKICpwYWxQdHIgPSAoUEFMRVRURU9CSiAqKUdESV9HZXRPYmpQdHIoaFBhbGV0dGUsIFBBTEVUVEVfTUFHSUMpOwotCWlmICghcGFsUHRyKSAKLQl7Ci0JICAgIEhlYXBGcmVlKEdldFByb2Nlc3NIZWFwKCksIDAsIGNvbG9yTWFwcGluZyk7Ci0JICAgIHJldHVybiBOVUxMOwotCX0KLQogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY29sb3JzOyBpKyssIGNvbG9yUHRyKyspCi0JICAgIGlmICgqY29sb3JQdHIgPj0gcGFsUHRyLT5sb2dwYWxldHRlLnBhbE51bUVudHJpZXMpCi0JICAgIHsKLQkJY29sb3JNYXBwaW5nW2ldLnJnYlJlZCAgID0gMDsKLQkJY29sb3JNYXBwaW5nW2ldLnJnYkdyZWVuID0gMDsKLQkJY29sb3JNYXBwaW5nW2ldLnJnYkJsdWUgID0gMDsKLQkgICAgfQotCSAgICBlbHNlCi0JICAgIHsKLQkJUEFMRVRURUVOVFJZICpwZSA9IHBhbFB0ci0+bG9ncGFsZXR0ZS5wYWxQYWxFbnRyeSArICpjb2xvclB0cjsKLQkJY29sb3JNYXBwaW5nW2ldLnJnYlJlZCAgID0gcGUtPnBlUmVkOwotCQljb2xvck1hcHBpbmdbaV0ucmdiR3JlZW4gPSBwZS0+cGVHcmVlbjsKLQkJY29sb3JNYXBwaW5nW2ldLnJnYkJsdWUgID0gcGUtPnBlQmx1ZTsKLQkgICAgfQotCQotCUdESV9IRUFQX1VOTE9DSyhoUGFsZXR0ZSk7CisgICAgICAgICAgICBjb2xvck1hcHBpbmdbaV0gPSBDT0xPUl9Ub1BoeXNpY2FsKCBkYywgUEFMRVRURUlOREVYKCpjb2xvclB0cikgKTsKICAgICB9CiAKICAgICAqbkNvbG9ycyA9IGNvbG9yczsKICAgICByZXR1cm4gY29sb3JNYXBwaW5nOwogfQogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICBESUJfUGh5c2ljYWxDb2xvck1hcAotICoKLSAqIFRyYW5zbGF0ZSBjb2xvciBtYXAgdG8gcGh5c2ljYWwgY29sb3JzCi0gKi8KLXN0YXRpYyBpbnQgKkRJQl9QaHlzaWNhbENvbG9yTWFwKCBEQyAqZGMsIGludCBkZXB0aCwgCi0JCQkJICBSR0JRVUFEICpjb2xvck1hcCwgaW50IG5Db2xvck1hcCkKLXsKLSAgICBpbnQgKmNvbG9yTWFwcGluZywgaTsKLQotICAgIGlmICghbkNvbG9yTWFwKSByZXR1cm4gTlVMTDsKLSAgICBpZiAoIShjb2xvck1hcHBpbmcgPSAoaW50ICopSGVhcEFsbG9jKEdldFByb2Nlc3NIZWFwKCksIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuQ29sb3JNYXAgKiBzaXplb2YoaW50KSApKSkgcmV0dXJuIE5VTEw7Ci0KLSAgICBpZiAoZGVwdGggPT0gMSkgLyogTW9ub2Nocm9tZSAqLwotCWZvciAoaSA9IDA7IGkgPCBuQ29sb3JNYXA7IGkrKywgY29sb3JNYXArKykKLQkgICAgY29sb3JNYXBwaW5nW2ldID0gKGNvbG9yTWFwLT5yZ2JSZWQgKyBjb2xvck1hcC0+cmdiR3JlZW4gKyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvck1hcC0+cmdiQmx1ZSA+IDI1NSozLzIpOwotICAgIGVsc2UKLQlmb3IgKGkgPSAwOyBpIDwgbkNvbG9yTWFwOyBpKyssIGNvbG9yTWFwKyspCi0gICAgICAgICAgICBjb2xvck1hcHBpbmdbaV0gPSBDT0xPUl9Ub1BoeXNpY2FsKCBkYywgUkdCKGNvbG9yTWFwLT5yZ2JSZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yTWFwLT5yZ2JHcmVlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JNYXAtPnJnYkJsdWUpKTsKLSAgICByZXR1cm4gY29sb3JNYXBwaW5nOwotfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBESUJfTWFwQ29sb3IKQEAgLTgzNCw4ICs4MDEsOCBAQAogICogR2V0RElCaXRzIGZvciBhbiAxNi1iaXQgZGVlcCBESUIuCiAgKi8KIHN0YXRpYyB2b2lkIERJQl9HZXRJbWFnZUJpdHNfMTYoIGludCBsaW5lcywgQllURSAqc3JjYml0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEV09SRCBzcmN3aWR0aCwgRFdPUkQgZHN0d2lkdGgsIGludCBsZWZ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmNvbG9ycywgaW50IG5Db2xvcnMsIFhJbWFnZSAqYm1wSW1hZ2UgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFdPUkQgc3Jjd2lkdGgsIERXT1JEIGRzdHdpZHRoLCBpbnQgbGVmdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhJbWFnZSAqYm1wSW1hZ2UgKQogewogICAgIERXT1JEIHg7CiAgICAgTFBXT1JEIHB0cjsKQEAgLTkyNyw4ICs4OTQsOCBAQAogICogR2V0RElCaXRzIGZvciBhbiAyNC1iaXQgZGVlcCBESUIuCiAgKi8KIHN0YXRpYyB2b2lkIERJQl9HZXRJbWFnZUJpdHNfMjQoIGludCBsaW5lcywgQllURSAqc3JjYml0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEV09SRCBzcmN3aWR0aCwgRFdPUkQgZHN0d2lkdGgsIGludCBsZWZ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmNvbG9ycywgaW50IG5Db2xvcnMsIFhJbWFnZSAqYm1wSW1hZ2UgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFdPUkQgc3Jjd2lkdGgsIERXT1JEIGRzdHdpZHRoLCBpbnQgbGVmdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhJbWFnZSAqYm1wSW1hZ2UgKQogewogICAgIERXT1JEIHg7CiAgICAgaW50IGg7CkBAIC0xMDEzLDggKzk4MCw4IEBACiAgKiBHZXRESUJpdHMgZm9yIGFuIDMyLWJpdCBkZWVwIERJQi4KICAqLwogc3RhdGljIHZvaWQgRElCX0dldEltYWdlQml0c18zMiggaW50IGxpbmVzLCBCWVRFICpzcmNiaXRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERXT1JEIHNyY3dpZHRoLCBEV09SRCBkc3R3aWR0aCwgaW50IGxlZnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqY29sb3JzLCBpbnQgbkNvbG9ycywgWEltYWdlICpibXBJbWFnZSApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEV09SRCBzcmN3aWR0aCwgRFdPUkQgZHN0d2lkdGgsIGludCBsZWZ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWEltYWdlICpibXBJbWFnZSApCiB7CiAgICAgRFdPUkQgeDsKICAgICBpbnQgaDsKQEAgLTEwNjQsNDQgKzEwMzEsMzcgQEAKICAqLwogc3RhdGljIGludCBESUJfU2V0SW1hZ2VCaXRzKCBjb25zdCBESUJfU0VUSU1BR0VCSVRTX0RFU0NSICpkZXNjciApCiB7Ci0gICAgaW50ICpjb2xvck1hcHBpbmc7CisgICAgaW50IGxpbmVzID0gZGVzY3ItPmxpbmVzID49IDAgPyBkZXNjci0+bGluZXMgOiAtZGVzY3ItPmxpbmVzOwogICAgIFhJbWFnZSAqYm1wSW1hZ2U7Ci0gICAgaW50IGxpbmVzOwotCi0gICAgICAvKiBUcmFuc2xhdGUgdGhlIGNvbG9yIG1hcHBpbmcgdGFibGUgKi8KLQotICAgIGlmIChkZXNjci0+aW5mb0JwcCA+IDgpIGNvbG9yTWFwcGluZyA9IE5VTEw7Ci0gICAgZWxzZSBpZiAoIShjb2xvck1hcHBpbmcgPSBESUJfUGh5c2ljYWxDb2xvck1hcCggZGVzY3ItPmRjLCBkZXNjci0+ZGVwdGgsCi0JCQkJCQkgICAgZGVzY3ItPmNvbG9yTWFwLCBkZXNjci0+bkNvbG9yTWFwICkpKQotICAgICAgICByZXR1cm4gMDsKIAogICAgIGlmICggZGVzY3ItPmRjICYmIGRlc2NyLT5kYy0+dy5mbGFncyAmIERDX0RJUlRZICkgCi0gICAgICAgIENMSVBQSU5HX1VwZGF0ZUdDUmVnaW9uKGRlc2NyLT5kYyk7CisgICAgICAgIENMSVBQSU5HX1VwZGF0ZUdDUmVnaW9uKCBkZXNjci0+ZGMgKTsKKworICAgIGlmIChkZXNjci0+aW1hZ2UpCisgICAgICAgIGJtcEltYWdlID0gZGVzY3ItPmltYWdlOworICAgIGVsc2UKKyAgICAgICAgWENSRUFURUlNQUdFKCBibXBJbWFnZSwgZGVzY3ItPmluZm9XaWR0aCwgbGluZXMsIGRlc2NyLT5kZXB0aCApOwogCiAgICAgICAvKiBUcmFuc2ZlciB0aGUgcGl4ZWxzICovCi0gICAgbGluZXMgPSBkZXNjci0+bGluZXM7Ci0gICAgaWYgKGxpbmVzIDwgMCkgbGluZXMgPSAtbGluZXM7Ci0gICAgWENSRUFURUlNQUdFKGJtcEltYWdlLCBkZXNjci0+aW5mb1dpZHRoLCBsaW5lcywgZGVzY3ItPmRlcHRoICk7Ci0KICAgICBzd2l0Y2goZGVzY3ItPmluZm9CcHApCiAgICAgewogICAgIGNhc2UgMToKIAlESUJfU2V0SW1hZ2VCaXRzXzEoIGRlc2NyLT5saW5lcywgZGVzY3ItPmJpdHMsIGRlc2NyLT5pbmZvV2lkdGgsCi0JCQkgICAgZGVzY3ItPndpZHRoLCBkZXNjci0+eFNyYywgY29sb3JNYXBwaW5nLCBibXBJbWFnZSApOworCQkJICAgIGRlc2NyLT53aWR0aCwgZGVzY3ItPnhTcmMsIGRlc2NyLT5jb2xvck1hcCwgYm1wSW1hZ2UgKTsKIAlicmVhazsKICAgICBjYXNlIDQ6CiAJaWYgKGRlc2NyLT5jb21wcmVzc2lvbikgRElCX1NldEltYWdlQml0c19STEU0KCBkZXNjci0+bGluZXMsIGRlc2NyLT5iaXRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3ItPmluZm9XaWR0aCwgZGVzY3ItPndpZHRoLCBkZXNjci0+eFNyYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yTWFwcGluZywgYm1wSW1hZ2UgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyLT5jb2xvck1hcCwgYm1wSW1hZ2UgKTsKIAllbHNlIERJQl9TZXRJbWFnZUJpdHNfNCggZGVzY3ItPmxpbmVzLCBkZXNjci0+Yml0cywgZGVzY3ItPmluZm9XaWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyLT53aWR0aCwgZGVzY3ItPnhTcmMsIGNvbG9yTWFwcGluZywgYm1wSW1hZ2UgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyLT53aWR0aCwgZGVzY3ItPnhTcmMsIGRlc2NyLT5jb2xvck1hcCwgYm1wSW1hZ2UgKTsKIAlicmVhazsKICAgICBjYXNlIDg6CiAJaWYgKGRlc2NyLT5jb21wcmVzc2lvbikgRElCX1NldEltYWdlQml0c19STEU4KCBkZXNjci0+bGluZXMsIGRlc2NyLT5iaXRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3ItPmluZm9XaWR0aCwgZGVzY3ItPndpZHRoLCBkZXNjci0+eFNyYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yTWFwcGluZywgYm1wSW1hZ2UgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyLT5jb2xvck1hcCwgYm1wSW1hZ2UgKTsKIAllbHNlIERJQl9TZXRJbWFnZUJpdHNfOCggZGVzY3ItPmxpbmVzLCBkZXNjci0+Yml0cywgZGVzY3ItPmluZm9XaWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyLT53aWR0aCwgZGVzY3ItPnhTcmMsIGNvbG9yTWFwcGluZywgYm1wSW1hZ2UgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyLT53aWR0aCwgZGVzY3ItPnhTcmMsIGRlc2NyLT5jb2xvck1hcCwgYm1wSW1hZ2UgKTsKIAlicmVhazsKICAgICBjYXNlIDE1OgogICAgIGNhc2UgMTY6CkBAIC0xMTIwLDExICsxMDgwLDEyIEBACiAgICAgICAgIFdBUk4oYml0bWFwLCAiKCVkKTogSW52YWxpZCBkZXB0aFxuIiwgZGVzY3ItPmluZm9CcHAgKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGlmIChjb2xvck1hcHBpbmcpIEhlYXBGcmVlKCBHZXRQcm9jZXNzSGVhcCgpLCAwLCBjb2xvck1hcHBpbmcgKTsKKwogICAgIFhQdXRJbWFnZSggZGlzcGxheSwgZGVzY3ItPmRyYXdhYmxlLCBkZXNjci0+Z2MsIGJtcEltYWdlLAogICAgICAgICAgICAgICAgZGVzY3ItPnhTcmMsIGRlc2NyLT55U3JjLCBkZXNjci0+eERlc3QsIGRlc2NyLT55RGVzdCwKICAgICAgICAgICAgICAgIGRlc2NyLT53aWR0aCwgZGVzY3ItPmhlaWdodCApOwotICAgIFhEZXN0cm95SW1hZ2UoIGJtcEltYWdlICk7CisKKyAgICBpZiAoIWRlc2NyLT5pbWFnZSkgWERlc3Ryb3lJbWFnZSggYm1wSW1hZ2UgKTsKICAgICByZXR1cm4gbGluZXM7CiB9CiAKQEAgLTExMzYsMjQgKzEwOTcsMTkgQEAKICAqLwogc3RhdGljIGludCBESUJfR2V0SW1hZ2VCaXRzKCBjb25zdCBESUJfU0VUSU1BR0VCSVRTX0RFU0NSICpkZXNjciApCiB7Ci0gICAgaW50ICpjb2xvck1hcHBpbmc7CisgICAgaW50IGxpbmVzID0gZGVzY3ItPmxpbmVzID49IDAgPyBkZXNjci0+bGluZXMgOiAtZGVzY3ItPmxpbmVzOwogICAgIFhJbWFnZSAqYm1wSW1hZ2U7Ci0gICAgaW50IGxpbmVzOwogCi0gICAgICAvKiBUcmFuc2xhdGUgdGhlIGNvbG9yIG1hcHBpbmcgdGFibGUgKi8KKyAgICBpZiAoZGVzY3ItPmltYWdlKQorICAgICAgICBibXBJbWFnZSA9IGRlc2NyLT5pbWFnZTsKKyAgICBlbHNlCisgICAgICAgIFhDUkVBVEVJTUFHRSggYm1wSW1hZ2UsIGRlc2NyLT5pbmZvV2lkdGgsIGxpbmVzLCBkZXNjci0+ZGVwdGggKTsKIAotICAgIGlmIChkZXNjci0+aW5mb0JwcCA+IDgpIGNvbG9yTWFwcGluZyA9IE5VTEw7Ci0gICAgZWxzZSBpZiAoIShjb2xvck1hcHBpbmcgPSBESUJfUGh5c2ljYWxDb2xvck1hcCggZGVzY3ItPmRjLCBkZXNjci0+ZGVwdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjci0+Y29sb3JNYXAsIGRlc2NyLT5uQ29sb3JNYXAgKSkpCi0gICAgICAgIHJldHVybiAwOworICAgIFhHZXRTdWJJbWFnZSggZGlzcGxheSwgZGVzY3ItPmRyYXdhYmxlLCBkZXNjci0+eERlc3QsIGRlc2NyLT55RGVzdCwKKyAgICAgICAgICAgICAgICAgIGRlc2NyLT53aWR0aCwgZGVzY3ItPmhlaWdodCwgQWxsUGxhbmVzLCBaUGl4bWFwLAorICAgICAgICAgICAgICAgICAgYm1wSW1hZ2UsIGRlc2NyLT54U3JjLCBkZXNjci0+eVNyYyApOwogCiAgICAgICAvKiBUcmFuc2ZlciB0aGUgcGl4ZWxzICovCi0KLSAgICBsaW5lcyA9IGRlc2NyLT5saW5lczsKLSAgICBpZiAobGluZXMgPCAwKSBsaW5lcyA9IC1saW5lczsKLSAgICBibXBJbWFnZSA9IFhHZXRJbWFnZSggZGlzcGxheSwgZGVzY3ItPmRyYXdhYmxlLCBkZXNjci0+eERlc3QsIGRlc2NyLT55RGVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3ItPndpZHRoLCBkZXNjci0+aGVpZ2h0LCBBbGxQbGFuZXMsIFpQaXhtYXAgKTsKLQogICAgIHN3aXRjaChkZXNjci0+aW5mb0JwcCkKICAgICB7CiAgICAgY2FzZSAxOgpAQCAtMTE2MywzNCArMTExOSwzMSBAQAogICAgIGNhc2UgNDoKICAgICAgICBpZiAoZGVzY3ItPmNvbXByZXNzaW9uKSBGSVhNRShiaXRtYXAsICJDb21wcmVzc2lvbiBub3QgeWV0IHN1cHBvcnRlZCFcbiIpOwogICAgICAgIGVsc2UgRElCX0dldEltYWdlQml0c180KCBkZXNjci0+bGluZXMsIChMUFZPSUQpZGVzY3ItPmJpdHMsIGRlc2NyLT5pbmZvV2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjci0+d2lkdGgsIGRlc2NyLT54U3JjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JNYXBwaW5nLCBkZXNjci0+bkNvbG9yTWFwLCBibXBJbWFnZSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjci0+d2lkdGgsIGRlc2NyLT54U3JjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjci0+Y29sb3JNYXAsIGRlc2NyLT5uQ29sb3JNYXAsIGJtcEltYWdlICk7CiAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIDg6CiAgICAgICAgaWYgKGRlc2NyLT5jb21wcmVzc2lvbikgRklYTUUoYml0bWFwLCAiQ29tcHJlc3Npb24gbm90IHlldCBzdXBwb3J0ZWQhXG4iKTsKICAgICAgICBlbHNlIERJQl9HZXRJbWFnZUJpdHNfOCggZGVzY3ItPmxpbmVzLCAoTFBWT0lEKWRlc2NyLT5iaXRzLCBkZXNjci0+aW5mb1dpZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3ItPndpZHRoLCBkZXNjci0+eFNyYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yTWFwcGluZywgZGVzY3ItPm5Db2xvck1hcCwgYm1wSW1hZ2UgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3ItPndpZHRoLCBkZXNjci0+eFNyYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3ItPmNvbG9yTWFwLCBkZXNjci0+bkNvbG9yTWFwLCBibXBJbWFnZSApOwogICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSAxNToKICAgICBjYXNlIDE2OgogICAgICAgIERJQl9HZXRJbWFnZUJpdHNfMTYoIGRlc2NyLT5saW5lcywgKExQVk9JRClkZXNjci0+Yml0cywgZGVzY3ItPmluZm9XaWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3ItPndpZHRoLCBkZXNjci0+eFNyYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JNYXBwaW5nLCBkZXNjci0+bkNvbG9yTWFwLCBibXBJbWFnZSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyLT53aWR0aCwgZGVzY3ItPnhTcmMsIGJtcEltYWdlICk7CiAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIDI0OgogICAgICAgIERJQl9HZXRJbWFnZUJpdHNfMjQoIGRlc2NyLT5saW5lcywgKExQVk9JRClkZXNjci0+Yml0cywgZGVzY3ItPmluZm9XaWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3ItPndpZHRoLCBkZXNjci0+eFNyYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JNYXBwaW5nLCBkZXNjci0+bkNvbG9yTWFwLCBibXBJbWFnZSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyLT53aWR0aCwgZGVzY3ItPnhTcmMsIGJtcEltYWdlICk7CiAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIDMyOgogICAgICAgIERJQl9HZXRJbWFnZUJpdHNfMzIoIGRlc2NyLT5saW5lcywgKExQVk9JRClkZXNjci0+Yml0cywgZGVzY3ItPmluZm9XaWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3ItPndpZHRoLCBkZXNjci0+eFNyYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JNYXBwaW5nLCBkZXNjci0+bkNvbG9yTWFwLCBibXBJbWFnZSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyLT53aWR0aCwgZGVzY3ItPnhTcmMsIGJtcEltYWdlICk7CiAgICAgICAgYnJlYWs7CiAKICAgICBkZWZhdWx0OgpAQCAtMTE5OCw5ICsxMTUxLDcgQEAKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgaWYgKGNvbG9yTWFwcGluZykgSGVhcEZyZWUoIEdldFByb2Nlc3NIZWFwKCksIDAsIGNvbG9yTWFwcGluZyApOwotCi0gICAgWERlc3Ryb3lJbWFnZSggYm1wSW1hZ2UgKTsKKyAgICBpZiAoIWRlc2NyLT5pbWFnZSkgWERlc3Ryb3lJbWFnZSggYm1wSW1hZ2UgKTsKICAgICByZXR1cm4gbGluZXM7CiB9CiAKQEAgLTEzMTEsMTAgKzEyNjIsOCBAQAogCiAgICAgaWYgKGRlc2NyLmluZm9CcHAgPD0gOCkKICAgICB7Ci0gICAgICAgIGRlc2NyLmNvbG9yTWFwID0gRElCX0J1aWxkQ29sb3JNYXAoIGluZm8sIGNvbG9ydXNlID09IERJQl9QQUxfQ09MT1JTPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjci5kYy0+dy5oUGFsZXR0ZSA6IDAsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGVzY3IubkNvbG9yTWFwKTsKLQorICAgICAgICBkZXNjci5jb2xvck1hcCA9IERJQl9CdWlsZENvbG9yTWFwKCBkZXNjci5kYywgY29sb3J1c2UsIGJtcC0+Yml0bWFwLmJtQml0c1BpeGVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLCAmZGVzY3IubkNvbG9yTWFwICk7CiAgICAgICAgIGlmICghZGVzY3IuY29sb3JNYXApCiAgICAgICAgIHsKICAgICAgICAgICAgIEdESV9IRUFQX1VOTE9DSyggaGJpdG1hcCApOwpAQCAtMTMyMyw5ICsxMjcyLDggQEAKICAgICAgICAgfSAKICAgICB9CiAKLQotCiAgICAgZGVzY3IuYml0cyAgICAgID0gYml0czsKKyAgICBkZXNjci5pbWFnZSAgICAgPSBOVUxMOwogICAgIGRlc2NyLmxpbmVzICAgICA9IHRtcGhlaWdodCA+PSAwID8gbGluZXMgOiAtbGluZXM7CiAgICAgZGVzY3IuZGVwdGggICAgID0gYm1wLT5iaXRtYXAuYm1CaXRzUGl4ZWw7CiAgICAgZGVzY3IuZHJhd2FibGUgID0gYm1wLT5waXhtYXA7CkBAIC0xNDAxLDE3ICsxMzQ5LDE3IEBACiAgICAgRENfU2V0dXBHQ0ZvclRleHQoIGRjICk7ICAvKiBUbyBoYXZlIHRoZSBjb3JyZWN0IGNvbG9ycyAqLwogICAgIFRTWFNldEZ1bmN0aW9uKCBkaXNwbGF5LCBkYy0+dS54LmdjLCBEQ19YUk9QZnVuY3Rpb25bZGMtPncuUk9QbW9kZS0xXSApOwogCi0gICAgZGVzY3IuZGMgPSBkYzsKICAgICBpZiAoZGVzY3IuaW5mb0JwcCA8PSA4KQogICAgIHsKLSAgICAgICAgZGVzY3IuY29sb3JNYXAgPSBESUJfQnVpbGRDb2xvck1hcCggaW5mbywgY29sb3J1c2UgPT0gRElCX1BBTF9DT0xPUlM/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyLmRjLT53LmhQYWxldHRlIDogMCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkZXNjci5uQ29sb3JNYXAgKTsKLQorICAgICAgICBkZXNjci5jb2xvck1hcCA9IERJQl9CdWlsZENvbG9yTWFwKCBkYywgY29sb3J1c2UsIGRjLT53LmJpdHNQZXJQaXhlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mbywgJmRlc2NyLm5Db2xvck1hcCApOwogICAgICAgICBpZiAoIWRlc2NyLmNvbG9yTWFwKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQorCisgICAgZGVzY3IuZGMgICAgICAgID0gZGM7CiAgICAgZGVzY3IuYml0cyAgICAgID0gYml0czsKKyAgICBkZXNjci5pbWFnZSAgICAgPSBOVUxMOwogICAgIGRlc2NyLmxpbmVzICAgICA9IHRtcGhlaWdodCA+PSAwID8gbGluZXMgOiAtbGluZXM7CiAgICAgZGVzY3IuaW5mb1dpZHRoID0gd2lkdGg7CiAgICAgZGVzY3IuZGVwdGggICAgID0gZGMtPncuYml0c1BlclBpeGVsOwpAQCAtMTYzOCwxNCArMTU4NiwxMCBAQAogCSAgIAlwYWQgKz0gKCgzMiAtIChpbmZvLT5ibWlIZWFkZXIuYmlXaWR0aCAmIDMxKSkgLyA4KSAmIDM7CiAJCWZvciggeSA9IHllbmQgLSAxOyAoaW50KXkgPj0gKGludClzdGFydHNjYW47IHktLSApCiAJCXsKLQkJICAgKmJiaXRzID0gMDsKIAkJICAgZm9yKCB4ID0gMDsgeCA8IHhlbmQ7IHgrKyApIHsKLQkJICAgCQorCQkgICAJaWYgKCEoeCY3KSkgKmJiaXRzID0gMDsKIAkJCSpiYml0cyB8PSBYR2V0UGl4ZWwoIGJtcEltYWdlLCB4LCB5KTw8KDctKHgmNykpOwotCQkJaWYgKCh4JjcpPT03KSB7Ci0JCQkgICAgYmJpdHMrKzsKLQkJCSAgICAqYmJpdHM9MDsKLQkJCX0KKwkJCWlmICgoeCY3KT09NykgYmJpdHMrKzsKIAkJICAgfQogCQkgICBiYml0cyArPSBwYWQ7CiAJCX0KQEAgLTE2NTQsMTQgKzE1OTgsMTAgQEAKIAkgICAJcGFkICs9ICgoOCAtIChpbmZvLT5ibWlIZWFkZXIuYmlXaWR0aCAmIDcpKSAvIDIpICYgMzsKIAkJZm9yKCB5ID0geWVuZCAtIDE7IChpbnQpeSA+PSAoaW50KXN0YXJ0c2NhbjsgeS0tICkKIAkJewotCQkgICAqYmJpdHMgPSAwOwogCQkgICBmb3IoIHggPSAwOyB4IDwgeGVuZDsgeCsrICkgewotCQkgICAJCisJCSAgIAlpZiAoISh4JjEpKSAqYmJpdHMgPSAwOwogCQkJKmJiaXRzIHw9IFhHZXRQaXhlbCggYm1wSW1hZ2UsIHgsIHkpPDwoNCooMS0oeCYxKSkpOwotCQkJaWYgKCh4JjEpPT0xKSB7Ci0JCQkgICAgYmJpdHMrKzsKLQkJCSAgICAqYmJpdHM9MDsKLQkJCX0KKwkJCWlmICgoeCYxKT09MSkgYmJpdHMrKzsKIAkJICAgfQogCQkgICBiYml0cyArPSBwYWQ7CiAJCX0KQEAgLTE2NzEsNyArMTYxMSw2IEBACiAJICAgCXBhZCArPSAoNCAtICgoaW5mby0+Ym1pSGVhZGVyLmJpV2lkdGgqMikgJiAzKSkgJiAzOwogCQlmb3IoIHkgPSB5ZW5kIC0gMTsgKGludCl5ID49IChpbnQpc3RhcnRzY2FuOyB5LS0gKQogCQl7Ci0JCSAgICpiYml0cyA9IDA7CiAJCSAgIGZvciggeCA9IDA7IHggPCB4ZW5kOyB4KysgKSB7CiAJCSAgIAl1bnNpZ25lZCBsb25nIHBpeGVsPVhHZXRQaXhlbCggYm1wSW1hZ2UsIHgsIHkpOwogCQkJKmJiaXRzKysgPSBwaXhlbCAmIDB4ZmY7CkBAIC0xNjg0LDcgKzE2MjMsNiBAQAogCSAgIAlwYWQgKz0gKDQgLSAoKGluZm8tPmJtaUhlYWRlci5iaVdpZHRoKjMpICYgMykpICYgMzsKIAkJZm9yKCB5ID0geWVuZCAtIDE7IChpbnQpeSA+PSAoaW50KXN0YXJ0c2NhbjsgeS0tICkKIAkJewotCQkgICAqYmJpdHMgPSAwOwogCQkgICBmb3IoIHggPSAwOyB4IDwgeGVuZDsgeCsrICkgewogCQkgICAJdW5zaWduZWQgbG9uZyBwaXhlbD1YR2V0UGl4ZWwoIGJtcEltYWdlLCB4LCB5KTsKIAkJCSpiYml0cysrID0gKHBpeGVsID4+MTYpICYgMHhmZjsKQEAgLTE2OTcsNyArMTYzNSw2IEBACiAJICAgY2FzZSAzMjoKIAkJZm9yKCB5ID0geWVuZCAtIDE7IChpbnQpeSA+PSAoaW50KXN0YXJ0c2NhbjsgeS0tICkKIAkJewotCQkgICAqYmJpdHMgPSAwOwogCQkgICBmb3IoIHggPSAwOyB4IDwgeGVuZDsgeCsrICkgewogCQkgICAJdW5zaWduZWQgbG9uZyBwaXhlbD1YR2V0UGl4ZWwoIGJtcEltYWdlLCB4LCB5KTsKIAkJCSpiYml0cysrID0gKHBpeGVsID4+MTYpICYgMHhmZjsKQEAgLTE4MjQsNyArMTc2MSw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIERJQl9Eb1Byb3RlY3RESUJTZWN0aW9uKCBCSVRNQVBPQkogKmJtcCwgRFdPUkQgbmV3X3Byb3QgKQogewotICAgIERJQlNFQ1RJT04gKmRpYiA9IGJtcC0+ZGliU2VjdGlvbjsKKyAgICBESUJTRUNUSU9OICpkaWIgPSAmYm1wLT5kaWItPmRpYlNlY3Rpb247CiAgICAgSU5UMzIgZWZmSGVpZ2h0ID0gZGliLT5kc0JtLmJtSGVpZ2h0ID49IDA/IGRpYi0+ZHNCbS5ibUhlaWdodAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAtZGliLT5kc0JtLmJtSGVpZ2h0OwogICAgIElOVDMyIHRvdGFsU2l6ZSA9IGRpYi0+ZHNCbWloLmJpU2l6ZUltYWdlPyBkaWItPmRzQm1paC5iaVNpemVJbWFnZQpAQCAtMTg0MSwxNyArMTc3OCwxOCBAQAogICovCiBzdGF0aWMgdm9pZCBESUJfRG9VcGRhdGVESUJTZWN0aW9uKCBCSVRNQVBPQkogKmJtcCwgQk9PTDMyIHRvRElCICkKIHsKLSAgICBESUJTRUNUSU9OICpkaWIgPSBibXAtPmRpYlNlY3Rpb247CisgICAgRElCU0VDVElPTk9CSiAqZGliID0gYm1wLT5kaWI7CiAgICAgRElCX1NFVElNQUdFQklUU19ERVNDUiBkZXNjcjsKIAotICAgIGlmIChESUJfR2V0Qml0bWFwSW5mbyggJmRpYi0+ZHNCbWloLCAmZGVzY3IuaW5mb1dpZHRoLCAmZGVzY3IubGluZXMsCisgICAgaWYgKERJQl9HZXRCaXRtYXBJbmZvKCAmZGliLT5kaWJTZWN0aW9uLmRzQm1paCwgJmRlc2NyLmluZm9XaWR0aCwgJmRlc2NyLmxpbmVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRlc2NyLmluZm9CcHAsICZkZXNjci5jb21wcmVzc2lvbiApID09IC0xKQogCXJldHVybjsKIAogICAgIGRlc2NyLmRjICAgICAgICA9IE5VTEw7Ci0gICAgZGVzY3IuY29sb3JNYXAgID0gYm1wLT5jb2xvck1hcDsKLSAgICBkZXNjci5uQ29sb3JNYXAgPSBibXAtPm5Db2xvck1hcDsKLSAgICBkZXNjci5iaXRzICAgICAgPSBkaWItPmRzQm0uYm1CaXRzOworICAgIGRlc2NyLmltYWdlICAgICA9IGRpYi0+aW1hZ2U7CisgICAgZGVzY3IuY29sb3JNYXAgID0gZGliLT5jb2xvck1hcDsKKyAgICBkZXNjci5uQ29sb3JNYXAgPSBkaWItPm5Db2xvck1hcDsKKyAgICBkZXNjci5iaXRzICAgICAgPSBkaWItPmRpYlNlY3Rpb24uZHNCbS5ibUJpdHM7CiAgICAgZGVzY3IuZGVwdGggICAgID0gYm1wLT5iaXRtYXAuYm1CaXRzUGl4ZWw7CiAgICAgZGVzY3IuZHJhd2FibGUgID0gYm1wLT5waXhtYXA7CiAgICAgZGVzY3IuZ2MgICAgICAgID0gQklUTUFQX0dDKGJtcCk7CkBAIC0xODg5LDIyICsxODI3LDIyIEBACiAgICAgYm1wID0gKEJJVE1BUE9CSiAqKUdESV9HZXRPYmpQdHIoIChIQklUTUFQMzIpcmVzLCBCSVRNQVBfTUFHSUMgKTsKICAgICBpZiAoIWJtcCkgcmV0dXJuIEZBTFNFOwogCi0gICAgaWYgKGJtcC0+ZGliU2VjdGlvbikKLSAgICAgICAgc3dpdGNoIChibXAtPnN0YXR1cykKKyAgICBpZiAoYm1wLT5kaWIpCisgICAgICAgIHN3aXRjaCAoYm1wLT5kaWItPnN0YXR1cykKICAgICAgICAgewogICAgICAgICBjYXNlIERJQl9HZGlNb2Q6CiAgICAgICAgICAgICBUUkFDRSggYml0bWFwLCAiY2FsbGVkIGluIHN0YXR1cyBESUJfR2RpTW9kXG4iICk7CiAgICAgICAgICAgICBESUJfRG9Qcm90ZWN0RElCU2VjdGlvbiggYm1wLCBQQUdFX1JFQURXUklURSApOwogICAgICAgICAgICAgRElCX0RvVXBkYXRlRElCU2VjdGlvbiggYm1wLCBUUlVFICk7CiAgICAgICAgICAgICBESUJfRG9Qcm90ZWN0RElCU2VjdGlvbiggYm1wLCBQQUdFX1JFQURPTkxZICk7Ci0gICAgICAgICAgICBibXAtPnN0YXR1cyA9IERJQl9JblN5bmM7CisgICAgICAgICAgICBibXAtPmRpYi0+c3RhdHVzID0gRElCX0luU3luYzsKICAgICAgICAgICAgIGhhbmRsZWQgPSBUUlVFOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBESUJfSW5TeW5jOgogICAgICAgICAgICAgVFJBQ0UoIGJpdG1hcCwgImNhbGxlZCBpbiBzdGF0dXMgRElCX0luU3luY1xuIiApOwogICAgICAgICAgICAgRElCX0RvUHJvdGVjdERJQlNlY3Rpb24oIGJtcCwgUEFHRV9SRUFEV1JJVEUgKTsKLSAgICAgICAgICAgIGJtcC0+c3RhdHVzID0gRElCX0FwcE1vZDsKKyAgICAgICAgICAgIGJtcC0+ZGliLT5zdGF0dXMgPSBESUJfQXBwTW9kOwogICAgICAgICAgICAgaGFuZGxlZCA9IFRSVUU7CiAgICAgICAgICAgICBicmVhazsKIApAQCAtMTkzOCw3ICsxODc2LDcgQEAKICAgICBibXAgPSAoQklUTUFQT0JKICopR0RJX0dldE9ialB0ciggZGMtPncuaEJpdG1hcCwgQklUTUFQX01BR0lDICk7CiAgICAgaWYgKCFibXApIHJldHVybjsKIAotICAgIGlmICghYm1wLT5kaWJTZWN0aW9uKQorICAgIGlmICghYm1wLT5kaWIpCiAgICAgewogCUdESV9IRUFQX1VOTE9DSyhkYy0+dy5oQml0bWFwKTsKIAlyZXR1cm47CkBAIC0xOTQ5LDcgKzE4ODcsNyBAQAogICAgIHsKICAgICAgICAgLyogUHJlcGFyZSBmb3IgYWNjZXNzIHRvIHRoZSBESUIgYnkgR0RJIGZ1bmN0aW9ucyAqLwogCi0gICAgICAgIHN3aXRjaCAoYm1wLT5zdGF0dXMpCisgICAgICAgIHN3aXRjaCAoYm1wLT5kaWItPnN0YXR1cykKICAgICAgICAgewogICAgICAgICBkZWZhdWx0OgogICAgICAgICBjYXNlIERJQl9Ob0hhbmRsZXI6CkBAIC0xOTcwLDcgKzE5MDgsNyBAQAogICAgICAgICAgICAgVFJBQ0UoIGJpdG1hcCwgImZyb21ESUIgY2FsbGVkIGluIHN0YXR1cyBESUJfQXBwTW9kXG4iICk7CiAgICAgICAgICAgICBESUJfRG9VcGRhdGVESUJTZWN0aW9uKCBibXAsIEZBTFNFICk7CiAgICAgICAgICAgICBESUJfRG9Qcm90ZWN0RElCU2VjdGlvbiggYm1wLCBQQUdFX1JFQURPTkxZICk7Ci0gICAgICAgICAgICBibXAtPnN0YXR1cyA9IERJQl9JblN5bmM7CisgICAgICAgICAgICBibXAtPmRpYi0+c3RhdHVzID0gRElCX0luU3luYzsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQpAQCAtMTk3OCw3ICsxOTE2LDcgQEAKICAgICB7CiAgICAgICAgIC8qIEFja25vd2xlZGdlIHdyaXRlIGFjY2VzcyB0byB0aGUgRElCIGJ5IEdESSBmdW5jdGlvbnMgKi8KIAotICAgICAgICBzd2l0Y2ggKGJtcC0+c3RhdHVzKQorICAgICAgICBzd2l0Y2ggKGJtcC0+ZGliLT5zdGF0dXMpCiAgICAgICAgIHsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgY2FzZSBESUJfTm9IYW5kbGVyOgpAQCAtMTk5Myw3ICsxOTMxLDcgQEAKICAgICAgICAgY2FzZSBESUJfSW5TeW5jOgogICAgICAgICAgICAgVFJBQ0UoIGJpdG1hcCwgIiAgdG9ESUIgY2FsbGVkIGluIHN0YXR1cyBESUJfSW5TeW5jXG4iICk7CiAgICAgICAgICAgICBESUJfRG9Qcm90ZWN0RElCU2VjdGlvbiggYm1wLCBQQUdFX05PQUNDRVNTICk7Ci0gICAgICAgICAgICBibXAtPnN0YXR1cyA9IERJQl9HZGlNb2Q7CisgICAgICAgICAgICBibXAtPmRpYi0+c3RhdHVzID0gRElCX0dkaU1vZDsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgRElCX0FwcE1vZDoKQEAgLTIwMjYsOCArMTk2NCw4IEBACiB7CiAgICAgSEJJVE1BUDMyIHJlcyA9IDA7CiAgICAgQklUTUFQT0JKICpibXAgPSBOVUxMOwotICAgIERJQlNFQ1RJT04gKmRpYiA9IE5VTEw7Ci0gICAgUkdCUVVBRCAqY29sb3JNYXAgPSBOVUxMOworICAgIERJQlNFQ1RJT05PQkogKmRpYiA9IE5VTEw7CisgICAgaW50ICpjb2xvck1hcCA9IE5VTEw7CiAgICAgaW50IG5Db2xvck1hcDsKIAogICAgIC8qIEZpbGwgQklUTUFQMzIgc3RydWN0dXJlIHdpdGggRElCIGRhdGEgKi8KQEAgLTIwNjQsNTAgKzIwMDIsNDYgQEAKIAlibS5ibUJpdHMgPSBWaXJ0dWFsQWxsb2MoTlVMTCwgdG90YWxTaXplLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1FTV9SRVNFUlZFfE1FTV9DT01NSVQsIFBBR0VfUkVBRFdSSVRFKTsKIAorICAgIC8qIENyZWF0ZSBDb2xvciBNYXAgKi8KKyAgICBpZiAoYm0uYm1CaXRzICYmIGJtLmJtQml0c1BpeGVsIDw9IDgpCisgICAgeworICAgICAgICBEQyAqZGMgPSAoREMgKilHRElfR2V0T2JqUHRyKGhkYywgRENfTUFHSUMpOworICAgICAgICBpZiAoIWRjKSBkYyA9IChEQyAqKUdESV9HZXRPYmpQdHIoaGRjLCBNRVRBRklMRV9EQ19NQUdJQyk7CisKKyAgICAgICAgaWYgKGRjKSBjb2xvck1hcCA9IERJQl9CdWlsZENvbG9yTWFwKCBkYywgdXNhZ2UsIGJtLmJtQml0c1BpeGVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJtaSwgJm5Db2xvck1hcCApOworICAgICAgICBHRElfSEVBUF9VTkxPQ0soaGRjKTsKKyAgICB9CisKICAgICAvKiBBbGxvY2F0ZSBNZW1vcnkgZm9yIERJQiBhbmQgZmlsbCBzdHJ1Y3R1cmUgKi8KICAgICBpZiAoYm0uYm1CaXRzKQotCWRpYiA9IEhlYXBBbGxvYyhHZXRQcm9jZXNzSGVhcCgpLCBIRUFQX1pFUk9fTUVNT1JZLCBzaXplb2YoRElCU0VDVElPTikpOworCWRpYiA9IEhlYXBBbGxvYyhHZXRQcm9jZXNzSGVhcCgpLCBIRUFQX1pFUk9fTUVNT1JZLCBzaXplb2YoRElCU0VDVElPTk9CSikpOwogICAgIGlmIChkaWIpCiAgICAgewotCWRpYi0+ZHNCbSA9IGJtOwotCWRpYi0+ZHNCbWloID0gKmJpOwotCS8qIEZJWE1FOiBkaWItPmRzQml0ZmllbGRzID8/PyAqLwotCWRpYi0+ZHNoU2VjdGlvbiA9IHNlY3Rpb247Ci0JZGliLT5kc09mZnNldCA9IG9mZnNldDsKKwlkaWItPmRpYlNlY3Rpb24uZHNCbSA9IGJtOworCWRpYi0+ZGliU2VjdGlvbi5kc0JtaWggPSAqYmk7CisJLyogRklYTUU6IGRpYi0+ZGliU2VjdGlvbi5kc0JpdGZpZWxkcyA/Pz8gKi8KKwlkaWItPmRpYlNlY3Rpb24uZHNoU2VjdGlvbiA9IHNlY3Rpb247CisJZGliLT5kaWJTZWN0aW9uLmRzT2Zmc2V0ID0gb2Zmc2V0OworCisgICAgICAgIGRpYi0+c3RhdHVzICAgID0gRElCX05vSGFuZGxlcjsKKyAgICAgICAgCisJZGliLT5uQ29sb3JNYXAgPSBuQ29sb3JNYXA7CisgICAgICAgIGRpYi0+Y29sb3JNYXAgID0gY29sb3JNYXA7CiAgICAgfQogCi0gICAgLyogQ3JlYXRlIENvbG9yIE1hcCAqLwotICAgIGlmIChkaWIgJiYgYm0uYm1CaXRzUGl4ZWwgPD0gOCkKLSAgICB7Ci0gICAgICAgIEhQQUxFVFRFMTYgaFBhbGV0dGUgPSAwOwotICAgICAgICBpZiAodXNhZ2UgPT0gRElCX1BBTF9DT0xPUlMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIERDICpkYyA9IChEQyAqKUdESV9HZXRPYmpQdHIoaGRjLCBEQ19NQUdJQyk7Ci0gICAgICAgICAgICBpZiAoIWRjKSAKLQkgICAgICAgIGRjID0gKERDICopR0RJX0dldE9ialB0cihoZGMsIE1FVEFGSUxFX0RDX01BR0lDKTsKLSAgICAgICAgICAgIGlmIChkYykKLQkgICAgewotCQloUGFsZXR0ZSA9IGRjLT53LmhQYWxldHRlOwotCQlHRElfSEVBUF9VTkxPQ0soaGRjKTsKLQkgICAgfQotCX0KLQljb2xvck1hcCA9IERJQl9CdWlsZENvbG9yTWFwKGJtaSwgaFBhbGV0dGUsICZuQ29sb3JNYXApOwotICAgIH0KLQotICAgIC8qIENyZWF0ZSBEZXZpY2UgRGVwZW5kZW50IEJpdG1hcCBhbmQgYWRkIERJQi9Db2xvck1hcCBpbmZvICovCisgICAgLyogQ3JlYXRlIERldmljZSBEZXBlbmRlbnQgQml0bWFwIGFuZCBhZGQgRElCIHBvaW50ZXIgKi8KICAgICBpZiAoZGliKSAKICAgICB7CiAgICAgICAgcmVzID0gQ3JlYXRlRElCaXRtYXAzMihoZGMsIGJpLCAwLCBOVUxMLCBibWksIHVzYWdlKTsKICAgICAgICBibXAgPSAoQklUTUFQT0JKICopIEdESV9HZXRPYmpQdHIocmVzLCBCSVRNQVBfTUFHSUMpOwotICAgICAgIGlmIChibXApCi0gICAgICAgewotCSAgICBibXAtPmRpYlNlY3Rpb24gPSBkaWI7Ci0gICAgICAgICAgICBibXAtPmNvbG9yTWFwICAgPSBjb2xvck1hcDsKLQkgICAgYm1wLT5uQ29sb3JNYXAgID0gbkNvbG9yTWFwOwotICAgICAgICAgICAgYm1wLT5zdGF0dXMgICAgID0gRElCX05vSGFuZGxlcjsKLSAgICAgICB9CisgICAgICAgaWYgKGJtcCkgYm1wLT5kaWIgPSBkaWI7CiAgICAgfQogCisgICAgLyogQ3JlYXRlIFhJbWFnZSAqLworICAgIGlmIChkaWIgJiYgYm1wKQorICAgICAgICBYQ1JFQVRFSU1BR0UoIGRpYi0+aW1hZ2UsIGJtLmJtV2lkdGgsIGVmZkhlaWdodCwgYm1wLT5iaXRtYXAuYm1CaXRzUGl4ZWwgKTsKKwogICAgIC8qIENsZWFuIHVwIGluIGNhc2Ugb2YgZXJyb3JzICovCiAgICAgaWYgKCFyZXMgfHwgIWJtcCB8fCAhZGliIHx8ICFibS5ibUJpdHMgfHwgKGJtLmJtQml0c1BpeGVsIDw9IDggJiYgIWNvbG9yTWFwKSkKICAgICB7CkBAIC0yMTE3LDYgKzIwNTEsNyBAQAogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIFZpcnR1YWxGcmVlKGJtLmJtQml0cywgTUVNX1JFTEVBU0UsIDBMKSwgYm0uYm1CaXRzID0gTlVMTDsKIAorICAgICAgICBpZiAoZGliLT5pbWFnZSkgWERlc3Ryb3lJbWFnZShkaWItPmltYWdlKSwgZGliLT5pbWFnZSA9IE5VTEw7CiAJaWYgKGNvbG9yTWFwKSBIZWFwRnJlZShHZXRQcm9jZXNzSGVhcCgpLCAwLCBjb2xvck1hcCksIGNvbG9yTWFwID0gTlVMTDsKIAlpZiAoZGliKSBIZWFwRnJlZShHZXRQcm9jZXNzSGVhcCgpLCAwLCBkaWIpLCBkaWIgPSBOVUxMOwogCWlmIChyZXMpIERlbGV0ZU9iamVjdDMyKHJlcyksIHJlcyA9IDA7CkBAIC0yMTI3LDcgKzIwNjIsNyBAQAogICAgICAgICBpZiAoVklSVFVBTF9TZXRGYXVsdEhhbmRsZXIoYm0uYm1CaXRzLCBESUJfRmF1bHRIYW5kbGVyLCAoTFBWT0lEKXJlcykpCiAgICAgICAgIHsKICAgICAgICAgICAgIERJQl9Eb1Byb3RlY3RESUJTZWN0aW9uKCBibXAsIFBBR0VfUkVBRE9OTFkgKTsKLSAgICAgICAgICAgIGJtcC0+c3RhdHVzID0gRElCX0luU3luYzsKKyAgICAgICAgICAgIGRpYi0+c3RhdHVzID0gRElCX0luU3luYzsKICAgICAgICAgfQogCiAgICAgLyogUmV0dXJuIEJJVE1BUCBoYW5kbGUgYW5kIHN0b3JhZ2UgbG9jYXRpb24gKi8KQEAgLTIxMzYsMyArMjA3MSwyOSBAQAogICAgIHJldHVybiByZXM7CiB9CiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIERJQl9EZWxldGVESUJTZWN0aW9uCisgKi8KK3ZvaWQgRElCX0RlbGV0ZURJQlNlY3Rpb24oIEJJVE1BUE9CSiAqYm1wICkKK3sKKyAgICBpZiAoYm1wICYmIGJtcC0+ZGliKQorICAgIHsKKyAgICAgICAgRElCU0VDVElPTk9CSiAqZGliID0gYm1wLT5kaWI7CisKKyAgICAgICAgaWYgKGRpYi0+ZGliU2VjdGlvbi5kc0JtLmJtQml0cykKKyAgICAgICAgICAgIGlmIChkaWItPmRpYlNlY3Rpb24uZHNoU2VjdGlvbikKKyAgICAgICAgICAgICAgICBVbm1hcFZpZXdPZkZpbGUoZGliLT5kaWJTZWN0aW9uLmRzQm0uYm1CaXRzKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBWaXJ0dWFsRnJlZShkaWItPmRpYlNlY3Rpb24uZHNCbS5ibUJpdHMsIE1FTV9SRUxFQVNFLCAwTCk7CisKKyAgICAgICAgaWYgKGRpYi0+aW1hZ2UpIAorICAgICAgICAgICAgWERlc3Ryb3lJbWFnZSggZGliLT5pbWFnZSApOworCisgICAgICAgIGlmIChkaWItPmNvbG9yTWFwKQorICAgICAgICAgICAgSGVhcEZyZWUoR2V0UHJvY2Vzc0hlYXAoKSwgMCwgZGliLT5jb2xvck1hcCk7CisKKyAgICAgICAgSGVhcEZyZWUoR2V0UHJvY2Vzc0hlYXAoKSwgMCwgZGliKTsKKyAgICAgICAgYm1wLT5kaWIgPSBOVUxMOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvb2JqZWN0cy9lbmhtZXRhZmlsZS5jIGIvb2JqZWN0cy9lbmhtZXRhZmlsZS5jCmluZGV4IGVhYzBjOGUuLmRjYjNkYzIgMTAwNjQ0Ci0tLSBhL29iamVjdHMvZW5obWV0YWZpbGUuYworKysgYi9vYmplY3RzL2VuaG1ldGFmaWxlLmMKQEAgLTgyLDcgKzgyLDcgQEAKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICBHZXRFbmhNZXRhRmlsZURlc2NyaXB0aW9uMzJXICAoR0RJMzIueHh4KQorICogICAgICAgICAgR2V0RW5oTWV0YUZpbGVEZXNjcmlwdGlvbjMyVyAgKEdESTMyLjE3NykKICAqCiAgKiAgQ29waWVzIHRoZSBkZXNjcmlwdGlvbiBzdHJpbmcgb2YgYW4gZW5oYW5jZWQgbWV0YWZpbGUgaW50byBhIGJ1ZmZlciAKICAqICBfYnVmXy4KQEAgLTE0MiwxMCArMTQyLDggQEAKICAqICAgIE1hbnkgdW5pbXBsZW1lbnRlZCByZWNvcmRzLgogICovCiBCT09MMzIgV0lOQVBJIFBsYXlFbmhNZXRhRmlsZVJlY29yZCggCi0gICAgIEhEQzMyIGhkYywgCi0gICAgIC8qIGRldmljZSBjb250ZXh0IGluIHdoaWNoIHRvIHJlbmRlciBFTUYgcmVjb3JkICovCi0gICAgIExQSEFORExFVEFCTEUzMiBoYW5kbGV0YWJsZSwgCi0gICAgIC8qIGFycmF5IG9mIGhhbmRsZXMgdG8gYmUgdXNlZCBpbiByZW5kZXJpbmcgcmVjb3JkICovCisgICAgIEhEQzMyIGhkYywgLyogZGV2aWNlIGNvbnRleHQgaW4gd2hpY2ggdG8gcmVuZGVyIEVNRiByZWNvcmQgKi8KKyAgICAgTFBIQU5ETEVUQUJMRTMyIGhhbmRsZXRhYmxlLCAvKiBhcnJheSBvZiBoYW5kbGVzIHRvIGJlIHVzZWQgaW4gcmVuZGVyaW5nIHJlY29yZCAqLwogICAgICBjb25zdCBFTkhNRVRBUkVDT1JEICptciwgLyogRU1GIHJlY29yZCB0byByZW5kZXIgKi8KICAgICAgVUlOVDMyIGhhbmRsZXMgIC8qIHNpemUgb2YgaGFuZGxlIGFycmF5ICovCiAgICAgICkgCmRpZmYgLS1naXQgYS9vYmplY3RzL2ZvbnQuYyBiL29iamVjdHMvZm9udC5jCmluZGV4IDZmNWE5MTEuLjljMWQ2MzggMTAwNjQ0Ci0tLSBhL29iamVjdHMvZm9udC5jCisrKyBiL29iamVjdHMvZm9udC5jCkBAIC0xMjMwLDEyICsxMjMwLDE0IEBACiAgICAgcmV0dXJuIEdldEtlcm5pbmdQYWlyczMyQSggaERDLCBjUGFpcnMsIGxwS2VybmluZ1BhaXJzICk7CiB9CiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUcmFuc2xhdGVDaGFyU2V0SW5mbyBbR0RJMzIuMzgyXQorICovCiBCT09MMzIgV0lOQVBJIFRyYW5zbGF0ZUNoYXJTZXRJbmZvKExQRFdPUkQgbHBTcmMsTFBDSEFSU0VUSU5GTyBscENzLERXT1JEIGR3RmxhZ3MpIHsKICAgICBGSVhNRShmb250LCIoJXAsJXAsMHglMDhseCksIHN0dWIuXG4iLGxwU3JjLGxwQ3MsZHdGbGFncyk7CiAgICAgcmV0dXJuIFRSVUU7CiB9CiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICAgIEdldEZvbnRMYW5ndWFnZUluZm8gICAoR0RJMzIuMTgyKQogICovCkBAIC0xMjUzLDMgKzEyNTUsMzEgQEAKIAlGSVhNRShmb250LCIoJXgpOnN0dWIhXG4iLGhkYyk7CiAJcmV0dXJuIDA7CiB9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEdldENoYXJhY3RlclBsYWNlbWVudDMyQSBbR0RJMzIuMTYwXQorICovCitEV09SRCBXSU5BUEkKK0dldENoYXJhY3RlclBsYWNlbWVudDMyQShIREMzMiBoZGMsIExQQ1NUUiBscFN0cmluZywgVUlOVDMyIHVDb3VudCwKKwkJCSBJTlQzMiBuTWF4RXh0ZW50LCBHQ1BfUkVTVUxUUzMyQSBscFJlc3VsdHMsCisJCQkgRFdPUkQgZHdGbGFncykKK3sKKyAgICAvKiByZXR1cm4gdmFsdWUgMCBpcyBjb3JyZWN0IGZvciBtb3N0IGNhc2VzIGFueXdheSAqLworICAgIEZJWE1FKGZvbnQsIjpzdHViIVxuIik7CisgICAgcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBHZXRDaGFyYWN0ZXJQbGFjZW1lbnQzMlcgW0dESTMyLjE2MV0KKyAqLworRFdPUkQgV0lOQVBJCitHZXRDaGFyYWN0ZXJQbGFjZW1lbnQzMlcoSERDMzIgaGRjLCBMUENXU1RSIGxwU3RyaW5nLCBVSU5UMzIgdUNvdW50LAorCQkJIElOVDMyIG5NYXhFeHRlbnQsIEdDUF9SRVNVTFRTMzJXIGxwUmVzdWx0cywKKwkJCSBEV09SRCBkd0ZsYWdzKQoreworICAgIC8qIHJldHVybiB2YWx1ZSAwIGlzIGNvcnJlY3QgZm9yIG1vc3QgY2FzZXMgYW55d2F5ICovCisgICAgRklYTUUoZm9udCwiOnN0dWIhXG4iKTsKKyAgICByZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvb2JqZWN0cy9vZW1iaXRtYXAuYyBiL29iamVjdHMvb2VtYml0bWFwLmMKaW5kZXggY2M0ZDE5MS4uNmEwMTZjZSAxMDA2NDQKLS0tIGEvb2JqZWN0cy9vZW1iaXRtYXAuYworKysgYi9vYmplY3RzL29lbWJpdG1hcC5jCkBAIC0zMzYsMTEgKzMzNiw3IEBACiAgICAgYm1wT2JqUHRyLT5iaXRtYXAuYm1QbGFuZXMgICAgID0gMTsKICAgICBibXBPYmpQdHItPmJpdG1hcC5ibUJpdHNQaXhlbCAgPSBicHA7CiAgICAgYm1wT2JqUHRyLT5iaXRtYXAuYm1CaXRzICAgICAgID0gKFNFR1BUUilOVUxMOwotCi0gICAgYm1wT2JqUHRyLT5kaWJTZWN0aW9uICAgICAgICAgID0gTlVMTDsKLSAgICBibXBPYmpQdHItPmNvbG9yTWFwICAgICAgICAgICAgPSBOVUxMOwotICAgIGJtcE9ialB0ci0+bkNvbG9yTWFwICAgICAgICAgICA9IDA7Ci0gICAgYm1wT2JqUHRyLT5zdGF0dXMgICAgICAgICAgICAgID0gRElCX05vSGFuZGxlcjsKKyAgICBibXBPYmpQdHItPmRpYiAgICAgICAgICAgICAgICAgPSBOVUxMOwogCiAgICAgR0RJX0hFQVBfVU5MT0NLKCBoYml0bWFwICk7CiAgICAgcmV0dXJuIGhiaXRtYXA7CmRpZmYgLS1naXQgYS9vYmplY3RzL3BhbGV0dGUuYyBiL29iamVjdHMvcGFsZXR0ZS5jCmluZGV4IDU3NTJjYjcuLmMyM2M3ODQgMTAwNjQ0Ci0tLSBhL29iamVjdHMvcGFsZXR0ZS5jCisrKyBiL29iamVjdHMvcGFsZXR0ZS5jCkBAIC01OTQsNiArNTk0LDExIEBACiAgICAgICAgICAgICByZXR1cm4gUmVhbGl6ZURlZmF1bHRQYWxldHRlKCBoZGMgKTsKIAogICAgICAgICBwYWxQdHIgPSAoUEFMRVRURU9CSiAqKSBHRElfR2V0T2JqUHRyKCBkYy0+dy5oUGFsZXR0ZSwgUEFMRVRURV9NQUdJQyApOworCisJaWYgKCFwYWxQdHIpIHsKKwkJRklYTUUocGFsZXR0ZSwiaW52YWxpZCBzZWxlY3RlZCBwYWxldHRlICUwNHhcbiIsZGMtPncuaFBhbGV0dGUpOworCQlyZXR1cm4gMDsKKwl9CiAgICAgICAgIAogICAgICAgICByZWFsaXplZCA9IENPTE9SX1NldE1hcHBpbmcocGFsUHRyLDAscGFsUHRyLT5sb2dwYWxldHRlLnBhbE51bUVudHJpZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGMtPncuaFBhbGV0dGUgIT0gaFByaW1hcnlQYWxldHRlKSB8fApkaWZmIC0tZ2l0IGEvb2JqZWN0cy9yZWdpb24uYyBiL29iamVjdHMvcmVnaW9uLmMKaW5kZXggNmM3OWUxZS4uMWYwMTRhMSAxMDA2NDQKLS0tIGEvb2JqZWN0cy9yZWdpb24uYworKysgYi9vYmplY3RzL3JlZ2lvbi5jCkBAIC0yNTA2LDMgKzI1MDYsMjAgQEAKIHsKICAgICByZXR1cm4gQ3JlYXRlUG9seVBvbHlnb25SZ24zMiggcG9pbnRzLCAmY291bnQsIDEsIG1vZGUgKTsKIH0KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEdldFJhbmRvbVJnbiBbR0RJMzIuMjE1XQorICoKKyAqIE5PVEVTCisgKiAgICAgVGhpcyBmdW5jdGlvbiBpcyBVTkRPQ1VNRU5URUQsIGl0IGlzbid0IGV2ZW4gaW4gdGhlIGhlYWRlciBmaWxlLgorICogICAgIEkgYXNzdW1lIHRoYXQgaXQgd2lsbCByZXR1cm4gYSBIUkdOMzIhPz8KKyAqLworSFJHTjMyIFdJTkFQSSBHZXRSYW5kb21SZ24oRFdPUkQgZHdBcmcxLCBEV09SRCBkd0FyZzIsIERXT1JEIGR3QXJnMykKK3sKKyAgICBGSVhNRSAocmVnaW9uLCAiKDB4JTA4eCAweCUwOHggMHglMDh4KTogZW1wdHkgc3R1YiFcbiIsCisJICAgZHdBcmcxLCBkd0FyZzIsIGR3QXJnMyk7CisKKyAgICByZXR1cm4gTlVMTDsKK30KKwpkaWZmIC0tZ2l0IGEvb2xlL2NvbXBvYmouYyBiL29sZS9jb21wb2JqLmMKaW5kZXggYmE4NGU1ZC4uYTVmYzMyNyAxMDA2NDQKLS0tIGEvb2xlL2NvbXBvYmouYworKysgYi9vbGUvY29tcG9iai5jCkBAIC0yMzEsNiArMjMxLDEyIEBACiAgIGNoYXIgKnM7CiAgIGludAlpOwogCisgIGlmICghaWQpCisJeyBFUlIob2xlLCJjYWxsZWQgd2l0aCBpZD1OdWxsXG4iKTsKKwkgICppZHN0ciA9IDB4MDA7CisJICByZXR1cm4gRV9GQUlMOworCX0KKwkKICAgc3ByaW50ZihpZHN0ciwgInslMDhseC0lMDR4LSUwNHgtJTAyeCUwMngtIiwKIAkgIGlkLT5EYXRhMSwgaWQtPkRhdGEyLCBpZC0+RGF0YTMsCiAJICBpZC0+RGF0YTRbMF0sIGlkLT5EYXRhNFsxXSk7CmRpZmYgLS1naXQgYS9vbGUvZm9sZGVycy5jIGIvb2xlL2ZvbGRlcnMuYwppbmRleCAxYzM3ODEyLi5hNzRhMmE3IDEwMDY0NAotLS0gYS9vbGUvZm9sZGVycy5jCisrKyBiL29sZS9mb2xkZXJzLmMKQEAgLTEsOSArMSwxMCBAQAogLyoKLSAqCVNoZWxsIEZvbGRlciBzdHVmZgorICoJU2hlbGwgRm9sZGVyIHN0dWZmICguLi5hbmQgYWxsIHRoZSBPTEUtT2JqZWN0cyBvZiBTSEVMTDMyLkRMTCkKICAqCiAgKglDb3B5cmlnaHQgMTk5NwlNYXJjdXMgTWVpc3NuZXIKKyAqCUNvcHlyaWdodCAxOTk4CUp1ZXJnZW4gU2NobWllZAogICoKLSAqICBjdXJyZW50bHkgd29yayBpbiBwcm9ncmVzcyBvbiBJU2hlbGxGb2xkZXJzLElFbnVtSURMaXN0IGFuZCBwaWRsIGhhbmRsaW5nCisgKiAgISEhIGN1cnJlbnRseSB3b3JrIGluIHByb2dyZXNzIG9uIGFsbCBjbGFzc2VzICEhIQogICogIDxjb250YWN0IGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZSwgOTgwNjI0PgogICovCiAKQEAgLTE3LDE4MCArMTgsOTE0IEBACiAjaW5jbHVkZSAiaW50ZXJmYWNlcy5oIgogI2luY2x1ZGUgInNobG9iai5oIgogI2luY2x1ZGUgIndpbmVycm9yLmgiCisjaW5jbHVkZSAid2lubmxzLmgiCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIElFbnVtSURMaXN0IGltcGxlbWVudGF0aW9uCisvKiBGSVhNRSBzaG91bGQgYmUgbW92ZWQgdG8gYSBoZWFkZXIgZmlsZS4gSXNFcXVhbEdVSUQgCitpcyBkZWNsYXJlZCBidXQgbm90IGV4cG9ydGVkIGluIGNvbXBvYmouYyAhISEqLworI2RlZmluZSBJc0VxdWFsR1VJRChyZ3VpZDEsIHJndWlkMikgKCFtZW1jbXAocmd1aWQxLCByZ3VpZDIsIHNpemVvZihHVUlEKSkpCisjZGVmaW5lIElzRXF1YWxJSUQocmlpZDEsIHJpaWQyKSBJc0VxdWFsR1VJRChyaWlkMSwgcmlpZDIpCisjZGVmaW5lIElzRXF1YWxDTFNJRChyY2xzaWQxLCByY2xzaWQyKSBJc0VxdWFsR1VJRChyY2xzaWQxLCByY2xzaWQyKQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEdldE5leHRFbGVtZW50IChpbnRlcm5hbCBmdW5jdGlvbikKKyAqCisgKiAgUkVUVVJOUworICogICAgTFBTVFIgcG9pbnRlciB0byBmaXJzdCwgbm90IHlldCBwYXJzZWQgY2hhcgogICovCitMUFNUUiBHZXROZXh0RWxlbWVudCgKKyAgICBMUFNUUiBwc3pOZXh0LCAvKltJTl0gc3RyaW5nIHRvIGdldCB0aGUgZWxlbWVudCBmcm9tKi8KKwkJTFBTVFIgcHN6T3V0LCAgLypbSU5dIHBvaW50ZXIgdG8gYnVmZmVyIHdoaXRjaCByZWNlaXZlcyBzdHJpbmcqLworCQlEV09SRCBkd091dCkgICAvKltJTl0gbGVuZ3RoIG9mIHBzek91dCovCit7IExQU1RSICAgcHN6VGFpbCA9IHBzek5leHQ7CisgIERXT1JEIGR3Q29weTsKKyAgVFJBQ0Uoc2hlbGwsIiglcyAlcCAlbHgpXG4iLHBzek5leHQsCXBzek91dCwgZHdPdXQpOwogCi1zdGF0aWMgVUxPTkcgV0lOQVBJIElFbnVtSURMaXN0X0FkZFJlZihMUEVOVU1JRExJU1QgdGhpcykgewotCVRSQUNFKG9sZSwiKCVwKS0+KClcbiIsdGhpcyk7Ci0JcmV0dXJuICsrKHRoaXMtPnJlZik7CisgIGlmKCFwc3pOZXh0IHx8ICEqcHN6TmV4dCkKKyAgICByZXR1cm4gTlVMTDsKKworICB3aGlsZSgqcHN6VGFpbCAmJiAoKnBzelRhaWwgIT0gJ1xcJykpCisgIHsgcHN6VGFpbCsrOworICB9CisgIGR3Q29weT0oKExQQllURSlwc3pUYWlsLShMUEJZVEUpcHN6TmV4dCkvc2l6ZW9mKENIQVIpKzE7CisgIGxzdHJjcHluMzJBKHBzek91dCwgcHN6TmV4dCwgKGR3T3V0PGR3Q29weSk/IGR3T3V0IDogZHdDb3B5KTsKKworICBpZigqcHN6VGFpbCkKKyAgeyAgcHN6VGFpbCsrOworCX0KKworICBUUkFDRShzaGVsbCwiLS0oJXMgJXMgJWx4KVxuIixwc3pOZXh0LAlwc3pPdXQsIGR3T3V0KTsKKyAgcmV0dXJuIHBzelRhaWw7CiB9CiAKLXN0YXRpYyBVTE9ORyBXSU5BUEkgSUVudW1JRExpc3RfUmVsZWFzZShMUEVOVU1JRExJU1QgdGhpcykgewotCVRSQUNFKG9sZSwiKCVwKS0+KClcbiIsdGhpcyk7Ci0JaWYgKCEtLSh0aGlzLT5yZWYpKSB7Ci0JCVdBUk4ob2xlLCIgZnJlZWluZyBJRW51bUlETGlzdCglcClcbiIsdGhpcyk7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIElDbGFzc0ZhY3RvcnkgSW1wbGVtZW50YXRpb24KKyovCitzdGF0aWMgSFJFU1VMVCBXSU5BUEkgSUNsYXNzRmFjdG9yeV9RdWVyeUludGVyZmFjZShMUENMQVNTRkFDVE9SWSxSRUZJSUQsTFBWT0lEKik7CitzdGF0aWMgVUxPTkcgV0lOQVBJIElDbGFzc0ZhY3RvcnlfQWRkUmVmKExQQ0xBU1NGQUNUT1JZKTsKK3N0YXRpYyBVTE9ORyBXSU5BUEkgSUNsYXNzRmFjdG9yeV9SZWxlYXNlKExQQ0xBU1NGQUNUT1JZKTsKK3N0YXRpYyBIUkVTVUxUIFdJTkFQSSBJQ2xhc3NGYWN0b3J5X0NyZWF0ZUluc3RhbmNlKCk7CisvKnN0YXRpYyBIUkVTVUxUIFdJTkFQSSBJQ2xhc3NGYWN0b3J5X0xvY2tTZXJ2ZXIoKTsqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgSUNsYXNzRmFjdG9yeV9WVGFibGUKKyAqLworc3RhdGljIElDbGFzc0ZhY3RvcnlfVlRhYmxlIGNsZnZ0ID0geworCUlDbGFzc0ZhY3RvcnlfUXVlcnlJbnRlcmZhY2UsCisJSUNsYXNzRmFjdG9yeV9BZGRSZWYsCisJSUNsYXNzRmFjdG9yeV9SZWxlYXNlLAorCUlDbGFzc0ZhY3RvcnlfQ3JlYXRlSW5zdGFuY2UsCisvKglJQ2xhc3NGYWN0b3J5X0xvY2tTZXJ2ZXIqLworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgSUNsYXNzRmFjdG9yeV9Db25zdHJ1Y3RvcgorICovCisKK0xQQ0xBU1NGQUNUT1JZIElDbGFzc0ZhY3RvcnlfQ29uc3RydWN0b3IoKQorewlMUENMQVNTRkFDVE9SWQlscGNsZjsKKworCWxwY2xmPSAoTFBDTEFTU0ZBQ1RPUlkpSGVhcEFsbG9jKEdldFByb2Nlc3NIZWFwKCksMCxzaXplb2YoSUNsYXNzRmFjdG9yeSkpOworCWxwY2xmLT5yZWYgPSAxOworCWxwY2xmLT5scHZ0YmwgPSAmY2xmdnQ7CisgIFRSQUNFKHNoZWxsLCIoJXApLT4oKVxuIixscGNsZik7CisJcmV0dXJuIGxwY2xmOworfQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgSUNsYXNzRmFjdG9yeTo6UXVlcnlJbnRlcmZhY2UKKyAqLworc3RhdGljIEhSRVNVTFQgV0lOQVBJIElDbGFzc0ZhY3RvcnlfUXVlcnlJbnRlcmZhY2UoCisgIExQQ0xBU1NGQUNUT1JZIHRoaXMsIFJFRklJRCByaWlkLCBMUFZPSUQgKnBwdk9iaikKK3sgIGNoYXIJeHJpaWRbNTBdOworICAgV0lORV9TdHJpbmdGcm9tQ0xTSUQoKExQQ0xTSUQpcmlpZCx4cmlpZCk7CisgICBUUkFDRShzaGVsbCwiKCVwKS0+KFxuXHRJSUQ6XHQlcylcbiIsdGhpcyx4cmlpZCk7CisKKyAgKnBwdk9iaiA9IE5VTEw7CisKKyAgaWYoSXNFcXVhbElJRChyaWlkLCAmSUlEX0lVbmtub3duKSkgICAgICAgICAgLypJVW5rbm93biovCisgIHsgKnBwdk9iaiA9IHRoaXM7IAorICB9CisgIGVsc2UgaWYoSXNFcXVhbElJRChyaWlkLCAmSUlEX0lDbGFzc0ZhY3RvcnkpKSAgLypJQ2xhc3NGYWN0b3J5Ki8KKyAgeyAgICAqcHB2T2JqID0gKElDbGFzc0ZhY3RvcnkqKXRoaXM7CisgIH0gICAKKworICBpZigqcHB2T2JqKQorICB7ICgqKExQQ0xBU1NGQUNUT1JZKilwcHZPYmopLT5scHZ0YmwtPmZuQWRkUmVmKHRoaXMpOyAgCQorICAgIFRSQUNFKHNoZWxsLCItLSBJbnRlcmZhY2U6ICglcCktPiglcClcbiIscHB2T2JqLCpwcHZPYmopOworICAgIHJldHVybiBTX09LOworICB9CisJVFJBQ0Uoc2hlbGwsIi0tIEludGVyZmFjZTogRV9OT0lOVEVSRkFDRVxuIik7CisgIHJldHVybiBFX05PSU5URVJGQUNFOworfSAgCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBJQ2xhc3NGYWN0b3J5X0FkZFJlZgorICovCitzdGF0aWMgVUxPTkcgV0lOQVBJIElDbGFzc0ZhY3RvcnlfQWRkUmVmKExQQ0xBU1NGQUNUT1JZIHRoaXMpCit7IFRSQUNFKHNoZWxsLCIoJXApLT4oY291bnQ9JWx1KVxuIix0aGlzLHRoaXMtPnJlZik7CisJcmV0dXJuICsrKHRoaXMtPnJlZik7Cit9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBJQ2xhc3NGYWN0b3J5X1JlbGVhc2UKKyAqLworc3RhdGljIFVMT05HIFdJTkFQSSBJQ2xhc3NGYWN0b3J5X1JlbGVhc2UoTFBDTEFTU0ZBQ1RPUlkgdGhpcykKK3sJVFJBQ0Uoc2hlbGwsIiglcCktPihjb3VudD0lbHUpXG4iLHRoaXMsdGhpcy0+cmVmKTsKKwlpZiAoIS0tKHRoaXMtPnJlZikpIAorCXsgVFJBQ0Uoc2hlbGwsIi0tIGRlc3Ryb3lpbmcgSUNsYXNzRmFjdG9yeSglcClcbiIsdGhpcyk7CiAJCUhlYXBGcmVlKEdldFByb2Nlc3NIZWFwKCksMCx0aGlzKTsKIAkJcmV0dXJuIDA7CiAJfQogCXJldHVybiB0aGlzLT5yZWY7CiB9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBJQ2xhc3NGYWN0b3J5X0NyZWF0ZUluc3RhbmNlCisgKi8KK3N0YXRpYyBIUkVTVUxUIFdJTkFQSSBJQ2xhc3NGYWN0b3J5X0NyZWF0ZUluc3RhbmNlKAorICBMUENMQVNTRkFDVE9SWSB0aGlzLCBMUFVOS05PV04gcFVua25vd24sIFJFRklJRCByaWlkLCBMUFZPSUQgKnBwT2JqZWN0KQoreyBMUFNIRUxMRk9MREVSIHBTSEZvbGRlcjsKKyAgSFJFU1VMVCBoUmVzdWx0PUVfT1VUT0ZNRU1PUlk7CisgIAorCWNoYXIJeHJpaWRbNTBdOworICBXSU5FX1N0cmluZ0Zyb21DTFNJRCgoTFBDTFNJRClyaWlkLHhyaWlkKTsKKyAgVFJBQ0Uoc2hlbGwsIiVwLT4oJXAsXG5cdElJRDpcdCVzKVxuIix0aGlzLHBVbmtub3duLHhyaWlkKTsKIAotc3RhdGljIEhSRVNVTFQgV0lOQVBJIElFbnVtSURMaXN0X05leHQoCi0JTFBFTlVNSURMSVNUIHRoaXMsVUxPTkcgY2VsdCxMUElURU1JRExJU1QgKnJnZWx0LFVMT05HICpwY2VsdEZldGNoZWQKLSkgewotCUZJWE1FKG9sZSwiKCVwKS0+KCVsZCwlcCwlcCksc3R1YiFcbiIsCi0JCXRoaXMsY2VsdCxyZ2VsdCxwY2VsdEZldGNoZWQKLQkpOwotCSpwY2VsdEZldGNoZWQgPSAwOyAvKiB3ZSBkb24ndCBoYXZlIGFueSAuLi4gKi8KLQlyZXR1cm4gMDsKKyAgKnBwT2JqZWN0ID0gTlVMTDsKKwkKKwlpZihwVW5rbm93bikKKwl7CXJldHVybiBDTEFTU19FX05PQUdHUkVHQVRJT047CisJfQorCisJaWYgKElzRXF1YWxJSUQocmlpZCwgJklJRF9JU2hlbGxGb2xkZXIpKQorICB7IHBTSEZvbGRlciA9IElTaGVsbEZvbGRlcl9Db25zdHJ1Y3RvcihOVUxMLE5VTEwpOworICAgIGlmKHBTSEZvbGRlcikKKyAgCXsgaFJlc3VsdCA9IHBTSEZvbGRlci0+bHB2dGJsLT5mblF1ZXJ5SW50ZXJmYWNlKHBTSEZvbGRlcixyaWlkLCBwcE9iamVjdCk7CisgICAgICBwU0hGb2xkZXItPmxwdnRibC0+Zm5SZWxlYXNlKHBTSEZvbGRlcik7CisgIAkJVFJBQ0Uoc2hlbGwsIi0tIFNoZWxsRm9sZGVyIGNyZWF0ZWQ6ICglcCktPiVwXG4iLHRoaXMsKnBwT2JqZWN0KTsKKyAgCX0KKwl9CQorCWVsc2UKKwl7ICBGSVhNRShzaGVsbCwidW5rbm93biBJSUQgcmVxdWVzdGVkXG5cdElJRDpcdCVzXG4iLHhyaWlkKTsKKwkgICBoUmVzdWx0PUVfTk9JTlRFUkZBQ0U7CisJfQorICByZXR1cm4gaFJlc3VsdDsKK30KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIElDbGFzc0ZhY3RvcnlfTG9ja1NlcnZlcgorICovCisvKnN0YXRpYyBIUkVTVUxUIFdJTkFQSSBJQ2xhc3NGYWN0b3J5X0xvY2tTZXJ2ZXIoTFBDTEFTU0ZBQ1RPUlkgdGhpcywgQk9PTCkKK3sgVFJBQ0Uoc2hlbGwsIiVwLT4oKSwgbm90IGltcGxlbWVudGVkXG4iLHRoaXMpCisgIHJldHVybiBFX05PVElNUEw7CiB9CiAKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBJRW51bUlETGlzdCBJbXBsZW1lbnRhdGlvbgorICovCitzdGF0aWMgSFJFU1VMVCBXSU5BUEkgSUVudW1JRExpc3RfUXVlcnlJbnRlcmZhY2UoTFBFTlVNSURMSVNULFJFRklJRCxMUFZPSUQqKTsKK3N0YXRpYyBVTE9ORyBXSU5BUEkgSUVudW1JRExpc3RfQWRkUmVmKExQRU5VTUlETElTVCk7CitzdGF0aWMgVUxPTkcgV0lOQVBJIElFbnVtSURMaXN0X1JlbGVhc2UoTFBFTlVNSURMSVNUKTsKK3N0YXRpYyBIUkVTVUxUIFdJTkFQSSBJRW51bUlETGlzdF9OZXh0KExQRU5VTUlETElTVCxVTE9ORyxMUElURU1JRExJU1QqLFVMT05HKik7CitzdGF0aWMgSFJFU1VMVCBXSU5BUEkgSUVudW1JRExpc3RfU2tpcChMUEVOVU1JRExJU1QsVUxPTkcpOworc3RhdGljIEhSRVNVTFQgV0lOQVBJIElFbnVtSURMaXN0X1Jlc2V0KExQRU5VTUlETElTVCk7CitzdGF0aWMgSFJFU1VMVCBXSU5BUEkgSUVudW1JRExpc3RfQ2xvbmUoTFBFTlVNSURMSVNULExQRU5VTUlETElTVCopOworc3RhdGljIEJPT0wzMiBXSU5BUEkgSUVudW1JRExpc3RfQ3JlYXRlRW51bUxpc3QoTFBFTlVNSURMSVNULExQQ1NUUiwgRFdPUkQpOworc3RhdGljIEJPT0wzMiBXSU5BUEkgSUVudW1JRExpc3RfQWRkVG9FbnVtTGlzdChMUEVOVU1JRExJU1QsTFBJVEVNSURMSVNUKTsKK3N0YXRpYyBCT09MMzIgV0lOQVBJIElFbnVtSURMaXN0X0RlbGV0ZUxpc3QoTFBFTlVNSURMSVNUKTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIElFbnVtSURMaXN0X1ZUYWJsZQorICovCiBzdGF0aWMgSUVudW1JRExpc3RfVlRhYmxlIGVpZGx2dCA9IHsKLQkodm9pZCAqKTEsCisJSUVudW1JRExpc3RfUXVlcnlJbnRlcmZhY2UsCiAJSUVudW1JRExpc3RfQWRkUmVmLAogCUlFbnVtSURMaXN0X1JlbGVhc2UsCiAJSUVudW1JRExpc3RfTmV4dCwKLQkodm9pZCAqKTUsCi0gICAgICAgICh2b2lkICopNiwKLSAgICAgICAgKHZvaWQgKik3CisJSUVudW1JRExpc3RfU2tpcCwKKwlJRW51bUlETGlzdF9SZXNldCwKKyAgSUVudW1JRExpc3RfQ2xvbmUsCisJSUVudW1JRExpc3RfQ3JlYXRlRW51bUxpc3QsCisgIElFbnVtSURMaXN0X0FkZFRvRW51bUxpc3QsCisJSUVudW1JRExpc3RfRGVsZXRlTGlzdAogfTsKIAotTFBFTlVNSURMSVNUIElFbnVtSURMaXN0X0NvbnN0cnVjdG9yKCkgewotCUxQRU5VTUlETElTVAlscGVpZGw7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBJRW51bUlETGlzdF9Db25zdHJ1Y3RvcgorICovCiAKLQlscGVpZGw9IChMUEVOVU1JRExJU1QpSGVhcEFsbG9jKEdldFByb2Nlc3NIZWFwKCksMCxzaXplb2YoSUVudW1JRExpc3QpKTsKK0xQRU5VTUlETElTVCBJRW51bUlETGlzdF9Db25zdHJ1Y3RvciggTFBDU1RSIGxwc3pQYXRoLCBEV09SRCBkd0ZsYWdzLCBIUkVTVUxUKiBwUmVzdWx0KQorewlMUEVOVU1JRExJU1QJbHBlaWRsOworCisJbHBlaWRsID0gKExQRU5VTUlETElTVClIZWFwQWxsb2MoR2V0UHJvY2Vzc0hlYXAoKSwwLHNpemVvZihJRW51bUlETGlzdCkpOwogCWxwZWlkbC0+cmVmID0gMTsKIAlscGVpZGwtPmxwdnRibCA9ICZlaWRsdnQ7CisJbHBlaWRsLT5tcEZpcnN0PU5VTEw7CisJbHBlaWRsLT5tcExhc3Q9TlVMTDsKKwlscGVpZGwtPm1wQ3VycmVudD1OVUxMOworCisgIFRSQUNFKHNoZWxsLCIoJXApLT4oJXMgJWx4ICVwKVxuIixscGVpZGwsbHBzelBhdGgsZHdGbGFncyxwUmVzdWx0KTsKKworCWxwZWlkbC0+bXBQaWRsTWdyPVBpZGxNZ3JfQ29uc3RydWN0b3IoKTsKKyAgaWYgKCFscGVpZGwtPm1wUGlkbE1ncikKKwl7IGlmIChwUmVzdWx0KQorCSAgeyAqcFJlc3VsdD1FX09VVE9GTUVNT1JZOworCQkJSGVhcEZyZWUoR2V0UHJvY2Vzc0hlYXAoKSwwLGxwZWlkbCk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCX0KKworCWlmKCFJRW51bUlETGlzdF9DcmVhdGVFbnVtTGlzdChscGVpZGwsIGxwc3pQYXRoLCBkd0ZsYWdzKSkKKyAgeyBpZihwUmVzdWx0KQorICAgIHsgKnBSZXN1bHQgPSBFX09VVE9GTUVNT1JZOworCQkJSGVhcEZyZWUoR2V0UHJvY2Vzc0hlYXAoKSwwLGxwZWlkbC0+bXBQaWRsTWdyKTsKKwkJCUhlYXBGcmVlKEdldFByb2Nlc3NIZWFwKCksMCxscGVpZGwpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKyAgfQorCisgIFRSQUNFKHNoZWxsLCItLSAoJXApLT4oKVxuIixscGVpZGwpOwogCXJldHVybiBscGVpZGw7CiB9CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIElTaGVsbEZvbGRlciBpbXBsZW1lbnRhdGlvbgorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgRW51bUlETGlzdDo6UXVlcnlJbnRlcmZhY2UKICAqLwotc3RhdGljIFVMT05HIFdJTkFQSSBJU2hlbGxGb2xkZXJfUmVsZWFzZShMUFNIRUxMRk9MREVSIHRoaXMpIHsKLQlUUkFDRShvbGUsIiglcCktPihjb3VudD0lbHUpXG4iLHRoaXMsdGhpcy0+cmVmKTsKLQlpZiAoIS0tKHRoaXMtPnJlZikpIHsKLQkJV0FSTihvbGUsIiBmcmVlaW5nIElTaGVsbEZvbGRlciglcClcbiIsdGhpcyk7CitzdGF0aWMgSFJFU1VMVCBXSU5BUEkgSUVudW1JRExpc3RfUXVlcnlJbnRlcmZhY2UoCisgIExQRU5VTUlETElTVCB0aGlzLCBSRUZJSUQgcmlpZCwgTFBWT0lEICpwcHZPYmopCit7ICBjaGFyCXhyaWlkWzUwXTsKKyAgIFdJTkVfU3RyaW5nRnJvbUNMU0lEKChMUENMU0lEKXJpaWQseHJpaWQpOworICAgVFJBQ0Uoc2hlbGwsIiglcCktPihcblx0SUlEOlx0JXMsJXApXG4iLHRoaXMseHJpaWQscHB2T2JqKTsKKworICAqcHB2T2JqID0gTlVMTDsKKworICBpZihJc0VxdWFsSUlEKHJpaWQsICZJSURfSVVua25vd24pKSAgICAgICAgICAvKklVbmtub3duKi8KKyAgeyAqcHB2T2JqID0gdGhpczsgCisgIH0KKyAgZWxzZSBpZihJc0VxdWFsSUlEKHJpaWQsICZJSURfSUVudW1JRExpc3QpKSAgLypJRW51bUlETGlzdCovCisgIHsgICAgKnBwdk9iaiA9IChJRW51bUlETGlzdCopdGhpczsKKyAgfSAgIAorCisgIGlmKCpwcHZPYmopCisgIHsgKCooTFBFTlVNSURMSVNUKilwcHZPYmopLT5scHZ0YmwtPmZuQWRkUmVmKHRoaXMpOyAgCQorICAgIFRSQUNFKHNoZWxsLCItLSBJbnRlcmZhY2U6ICglcCktPiglcClcbiIscHB2T2JqLCpwcHZPYmopOworICAgIHJldHVybiBTX09LOworICB9CisJVFJBQ0Uoc2hlbGwsIi0tIEludGVyZmFjZTogRV9OT0lOVEVSRkFDRVxuIik7CisJcmV0dXJuIEVfTk9JTlRFUkZBQ0U7Cit9ICAgCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIElFbnVtSURMaXN0X0FkZFJlZgorICovCitzdGF0aWMgVUxPTkcgV0lOQVBJIElFbnVtSURMaXN0X0FkZFJlZihMUEVOVU1JRExJU1QgdGhpcykKK3sgVFJBQ0Uoc2hlbGwsIiglcCktPigpXG4iLHRoaXMpOworCXJldHVybiArKyh0aGlzLT5yZWYpOworfQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogSUVudW1JRExpc3RfUmVsZWFzZQorICovCitzdGF0aWMgVUxPTkcgV0lOQVBJIElFbnVtSURMaXN0X1JlbGVhc2UoTFBFTlVNSURMSVNUIHRoaXMpCit7CVRSQUNFKHNoZWxsLCIoJXApLT4oKVxuIix0aGlzKTsKKwlpZiAoIS0tKHRoaXMtPnJlZikpIAorCXsgVFJBQ0Uoc2hlbGwsIiBkZXN0cm95aW5nIElFbnVtSURMaXN0KCVwKVxuIix0aGlzKTsKIAkJSGVhcEZyZWUoR2V0UHJvY2Vzc0hlYXAoKSwwLHRoaXMpOwogCQlyZXR1cm4gMDsKIAl9CiAJcmV0dXJuIHRoaXMtPnJlZjsKIH0KKyAgIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgSUVudW1JRExpc3RfTmV4dAorICovCiAKLXN0YXRpYyBVTE9ORyBXSU5BUEkgSVNoZWxsRm9sZGVyX0FkZFJlZihMUFNIRUxMRk9MREVSIHRoaXMpIHsKLQlUUkFDRShvbGUsIiglcCktPihjb3VudD0lbHUpXG4iLHRoaXMsKHRoaXMtPnJlZikrMSk7Ci0JcmV0dXJuICsrKHRoaXMtPnJlZik7Ci19CitzdGF0aWMgSFJFU1VMVCBXSU5BUEkgSUVudW1JRExpc3RfTmV4dCgKKwlMUEVOVU1JRExJU1QgdGhpcyxVTE9ORyBjZWx0LExQSVRFTUlETElTVCAqIHJnZWx0LFVMT05HICpwY2VsdEZldGNoZWQpIAoreyBVTE9ORyAgICBpOworICBIUkVTVUxUICBociA9IFNfT0s7CiAKLXN0YXRpYyBIUkVTVUxUIFdJTkFQSSBJU2hlbGxGb2xkZXJfR2V0QXR0cmlidXRlc09mKAotCUxQU0hFTExGT0xERVIgdGhpcyxVSU5UMzIgY2lkbCxMUENJVEVNSURMSVNUICphcGlkbCxEV09SRCAqcmdmSW5PdXQKLSkgewotCUZJWE1FKG9sZSwiXG4JKCVwKS0+KCVkLCVwLT4oJXApLCVwKSxzdHViIVxuIiwKLQkJdGhpcyxjaWRsLGFwaWRsLCphcGlkbCxyZ2ZJbk91dAotCSk7Ci0JcmV0dXJuIEVfTk9USU1QTDsKLX0KKyAgTFBJVEVNSURMSVNUICB0ZW1wOwogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIQkJSVNoZWxsRm9sZGVyX0JpbmRUb09iamVjdAotIQotKi8KLXN0YXRpYyBIUkVTVUxUIFdJTkFQSSBJU2hlbGxGb2xkZXJfQmluZFRvT2JqZWN0KAotCUxQU0hFTExGT0xERVIgdGhpcyxMUENJVEVNSURMSVNUIHBpZGwsTFBCQyBwYmNSZXNlcnZlZCwKLQlSRUZJSUQgcmlpZCxMUFZPSUQgKiBwcHZPdXQpCi0gIHsJY2hhcgl4Y2xzaWRbNTBdOworCVRSQUNFKHNoZWxsLCIoJXApLT4oJWxkLCVwLCAlcClcbiIsdGhpcyxjZWx0LHJnZWx0LHBjZWx0RmV0Y2hlZCk7CiAKLQkJV0lORV9TdHJpbmdGcm9tQ0xTSUQocmlpZCx4Y2xzaWQpOwotCi0JCUZJWE1FKG9sZSwiKCVwKS0+KHBpZGw6JXAsJXAsJXMsJXApLHN0dWIhXG4iLHRoaXMscGlkbCxwYmNSZXNlcnZlZCx4Y2xzaWQscHB2T3V0KTsKLQkJKnBwdk91dCA9IElTaGVsbEZvbGRlcl9Db25zdHJ1Y3RvcigpOwotCi0JCXJldHVybiBFX05PVElNUEw7Ci19Ci0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIQkJSVNoZWxsRm9sZGVyX1BhcnNlRGlzcGxheU5hbWUKLSEKLSovCi1zdGF0aWMgSFJFU1VMVCBXSU5BUEkgSVNoZWxsRm9sZGVyX1BhcnNlRGlzcGxheU5hbWUoCi0JTFBTSEVMTEZPTERFUiB0aGlzLEhXTkQzMiBod25kT3duZXIsTFBCQyBwYmNSZXNlcnZlZCwKLQlMUE9MRVNUUjMyIGxwc3pEaXNwbGF5TmFtZSxEV09SRCAqcGNoRWF0ZW4sTFBJVEVNSURMSVNUICpwcGlkbCwKLQlEV09SRCAqcGR3QXR0cmlidXRlcwotKSB7CVRSQUNFKG9sZSwiKCVwKS0+KCUwOHgsJXAsJXA9JXMsJXAsJXAsJXApXG4iLAotCQl0aGlzLGh3bmRPd25lcixwYmNSZXNlcnZlZCxscHN6RGlzcGxheU5hbWUsZGVidWdzdHJfdyhscHN6RGlzcGxheU5hbWUpLHBjaEVhdGVuLHBwaWRsLHBkd0F0dHJpYnV0ZXMKLQkpOwotLy8JaWYgKHBiY1Jlc2VydmVkKQotLy8JCSooRFdPUkQqKXBiY1Jlc2VydmVkID0gMDsKLQotCSpwcGlkbCA9IChMUElURU1JRExJU1QpSGVhcEFsbG9jKEdldFByb2Nlc3NIZWFwKCksMCxzaXplb2YoSVRFTUlETElTVCkpOwotCSgqcHBpZGwpLT5ta2lkLmNiID0gMHgwOwkJLyp0aGUgZmlyc3QgSVRFTUlETElTVCovCi0JKCpwcGlkbCktPm1raWQuYWJJRFswXSA9IDB4MDsJCS8qdGhlIGZpcnN0IElURU1JRExJU1QqLwotCi0vLwkoKExQSVRFTUlETElTVCkgKCgoTFBCWVRFKXBwaWRsKSs0KSApLT5ta2lkLmNiPTA7IC8qdGhlIHNlY29uZCBJVEVNSURMSVNUKi8KLS8vCSgoTFBJVEVNSURMSVNUKSAoKChMUEJZVEUpcHBpZGwpKzQpICktPm1raWQuYWJJRFswXT0wOyAvKnRoZSBzZWNvbmQgSVRFTUlETElTVCovCi0JRklYTUUoc2hlbGwsICJyZXR1cm4gZHVtbXkgSVRFTUlETElTVCBvbmx5IChwaWRsICVwKVxuIiwqcHBpZGwpOwotIAotCS8qIGl0IGlzIE5VTEwgaWYgdGhlIGNhbGxlciBkb24ndCByZXF1ZXN0IGF0dHJpYnV0ZXMqLwotCWlmIChwZHdBdHRyaWJ1dGVzKQotCXsJKnBkd0F0dHJpYnV0ZXM9U0ZHQU9fRk9MREVSOworCSpyZ2VsdD0wOworCQorICBpZihjZWx0ID4gMSAmJiAhcGNlbHRGZXRjaGVkKQorICB7IHJldHVybiBFX0lOVkFMSURBUkc7CiAJfQogCi0JLy8qcGNoRWF0ZW4gPSBsc3RybGVuMzJXKGxwc3pEaXNwbGF5TmFtZSk7IAkJLyogbnVtYmVyIG9mIGNoYXIncyBwYXJzZWQqLwotCS8vVFJBQ0Uoc2hlbGwsIiUxIGNoYXJzIHBhcnNlZCIsKnBjaEVhdGVuKQotCXJldHVybiBOT0VSUk9SOworICBmb3IoaSA9IDA7IGkgPCBjZWx0OyBpKyspCisgIHsgaWYoISh0aGlzLT5tcEN1cnJlbnQpKQorICAgIHsgaHIgPSAgU19GQUxTRTsKKyAgICAgIGJyZWFrOworICAgIH0KKwkJdGVtcCA9IHRoaXMtPm1wUGlkbE1nci0+bHB2dGJsLT5mbkNvcHkodGhpcy0+bXBQaWRsTWdyLCB0aGlzLT5tcEN1cnJlbnQtPnBpZGwpOworICAgIHJnZWx0W2ldID0gdGVtcDsKKyAgICB0aGlzLT5tcEN1cnJlbnQgPSB0aGlzLT5tcEN1cnJlbnQtPnBOZXh0OworICB9CisgIGlmKHBjZWx0RmV0Y2hlZCkKKyAgeyAgKnBjZWx0RmV0Y2hlZCA9IGk7CisJfQorCisgIHJldHVybiBocjsKIH0KIAotc3RhdGljIEhSRVNVTFQgV0lOQVBJIElTaGVsbEZvbGRlcl9FbnVtT2JqZWN0cygKLQlMUFNIRUxMRk9MREVSIHRoaXMsSFdORDMyIGh3bmRPd25lcixEV09SRCBncmZGbGFncywKLQlMUEVOVU1JRExJU1QqIHBwZW51bUlETGlzdAotKSB7Ci0JRklYTUUob2xlLCIoJXApLT4oMHglMDR4LDB4JTA4bHgsJXApLHN0dWIhXG4iLAotCQl0aGlzLGh3bmRPd25lcixncmZGbGFncyxwcGVudW1JRExpc3QKLQkpOwotCSpwcGVudW1JRExpc3QgPSBJRW51bUlETGlzdF9Db25zdHJ1Y3RvcigpOwotCXJldHVybiAwOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBJRW51bUlETGlzdF9Ta2lwCisqLworc3RhdGljIEhSRVNVTFQgV0lOQVBJIElFbnVtSURMaXN0X1NraXAoCisJTFBFTlVNSURMSVNUIHRoaXMsVUxPTkcgY2VsdCkKK3sgRFdPUkQgICAgZHdJbmRleDsKKyAgSFJFU1VMVCAgaHIgPSBTX09LOworCisgIFRSQUNFKHNoZWxsLCIoJXApLT4oJWx1KVxuIix0aGlzLGNlbHQpOworCisgIGZvcihkd0luZGV4ID0gMDsgZHdJbmRleCA8IGNlbHQ7IGR3SW5kZXgrKykKKyAgeyBpZighdGhpcy0+bXBDdXJyZW50KQorICAgIHsgaHIgPSBTX0ZBTFNFOworICAgICAgYnJlYWs7CisgICAgfQorICAgIHRoaXMtPm1wQ3VycmVudCA9IHRoaXMtPm1wQ3VycmVudC0+cE5leHQ7CisgIH0KKyAgcmV0dXJuIGhyOworfQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBJRW51bUlETGlzdF9SZXNldAorKi8KK3N0YXRpYyBIUkVTVUxUIFdJTkFQSSBJRW51bUlETGlzdF9SZXNldChMUEVOVU1JRExJU1QgdGhpcykKK3sgVFJBQ0Uoc2hlbGwsIiglcClcbiIsdGhpcyk7CisgIHRoaXMtPm1wQ3VycmVudCA9IHRoaXMtPm1wRmlyc3Q7CisgIHJldHVybiBTX09LOworfQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBJRW51bUlETGlzdF9DbG9uZQorKi8KK3N0YXRpYyBIUkVTVUxUIFdJTkFQSSBJRW51bUlETGlzdF9DbG9uZSgKKwlMUEVOVU1JRExJU1QgdGhpcyxMUEVOVU1JRExJU1QgKiBwcGVudW0pCit7IFRSQUNFKHNoZWxsLCIoJXApLT4oKSB0byAoJXApLT4oKSBFX05PVElNUExcbiIsdGhpcyxwcGVudW0pOworCXJldHVybiBFX05PVElNUEw7Cit9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBFbnVtSURMaXN0X0NyZWF0ZUVudW1MaXN0KCkKKyAqICBmaXhtZTogZGV2aWNlcyBub3QgaGFuZGxlZAorICogIGZpeG1lOiBhZGQgd2lsZGNhcmRzIHRvIHBhdGgKKyAqLworc3RhdGljIEJPT0wzMiBXSU5BUEkgSUVudW1JRExpc3RfQ3JlYXRlRW51bUxpc3QoTFBFTlVNSURMSVNUIHRoaXMsIExQQ1NUUiBscHN6UGF0aCwgRFdPUkQgZHdGbGFncykKK3sgTFBJVEVNSURMSVNUICAgcGlkbD1OVUxMOworICBXSU4zMl9GSU5EX0RBVEEzMkEgc3RmZmlsZTsJCisgIEhBTkRMRTMyIGhGaWxlOworCQorICBUUkFDRShzaGVsbCwiKCVwKS0+KCVzICVseCkgXG4iLHRoaXMsbHBzelBhdGgsZHdGbGFncyk7CisKKyAgLyplbnVtZXJhdGUgdGhlIGZvbGRlcnMqLworICBpZihkd0ZsYWdzICYgU0hDT05URl9GT0xERVJTKQorICB7IC8qIHNwZWNpYWwgY2FzZSAtIHdlIGNhbid0IGVudW1lcmF0ZSB0aGUgRGVza3RvcCBsZXZlbCBPYmplY3RzIChNeUNvbXB1dGVyLE5ldGhvb2QuLi4KKyAgIHNvIHdlIG5lZWQgdG8gZmFrZSBhbiBlbnVtZXJhdGlvbiBvZiB0aG9zZS4qLworICAgaWYoIWxwc3pQYXRoKQorICAgeyAvL2NyZWF0ZSB0aGUgcGlkbCBmb3IgdGhpcyBpdGVtCisgICAgIHBpZGwgPSB0aGlzLT5tcFBpZGxNZ3ItPmxwdnRibC0+Zm5DcmVhdGVEZXNrdG9wKHRoaXMtPm1wUGlkbE1ncik7CisgICAgIGlmKHBpZGwpCisgICAgIHsgaWYoIUlFbnVtSURMaXN0X0FkZFRvRW51bUxpc3QodGhpcywgcGlkbCkpCisgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgIH0KKyAgICAgZWxzZQorICAgICB7IHJldHVybiBGQUxTRTsKKyAgICAgfQorICAgfSAgIAorICAgZWxzZQorICAgeyAgaEZpbGUgPSBGaW5kRmlyc3RGaWxlMzJBKGxwc3pQYXRoLCZzdGZmaWxlKTsKKyAgICAgIGRvCisgICAgICB7IGlmIChzdGZmaWxlLmR3RmlsZUF0dHJpYnV0ZXMgJiBGSUxFX0FUVFJJQlVURV9ESVJFQ1RPUlkpCisJCQkgIC8vY3JlYXRlIHRoZSBwaWRsIGZvciB0aGlzIGl0ZW0KKwkJCQkvKiBmaXhtZTogdGhlIHNob3J0bmFtZSBzaG91bGQgYmUgZ2l2ZW4gdG9vKi8KKyAgICAgICAgcGlkbCA9IHRoaXMtPm1wUGlkbE1nci0+bHB2dGJsLT5mbkNyZWF0ZUZvbGRlcih0aGlzLT5tcFBpZGxNZ3IsIHN0ZmZpbGUuY0ZpbGVOYW1lKTsKKyAgICAgICAgaWYocGlkbCkKKyAgICAgICAgeyBpZighSUVudW1JRExpc3RfQWRkVG9FbnVtTGlzdCh0aGlzLCBwaWRsKSkKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsgcmV0dXJuIEZBTFNFOworICAgICAgICB9ICAgCisgICAgICB9IHdoaWxlKCBGaW5kTmV4dEZpbGUzMkEoaEZpbGUsJnN0ZmZpbGUpKTsKKwkJCUZpbmRDbG9zZTMyIChoRmlsZSk7CisgICAgfQorICB9ICAgCisgIC8vZW51bWVyYXRlIHRoZSBub24tZm9sZGVyIGl0ZW1zICh2YWx1ZXMpCisgIGlmKGR3RmxhZ3MgJiBTSENPTlRGX05PTkZPTERFUlMpCisgIHsgICBoRmlsZSA9IEZpbmRGaXJzdEZpbGUzMkEobHBzelBhdGgsJnN0ZmZpbGUpOworICAgICAgZG8KKyAgICAgIHsgaWYgKCEgKHN0ZmZpbGUuZHdGaWxlQXR0cmlidXRlcyAmIEZJTEVfQVRUUklCVVRFX0RJUkVDVE9SWSkgKQorCQkJICAvL2NyZWF0ZSB0aGUgcGlkbCBmb3IgdGhpcyBpdGVtCisJCQkJLyogZml4bWU6IHRoZSBzaG9ydG5hbWUgc2hvdWxkIGJlIGdpdmVuIHRvbyovCisgICAgICAgIHBpZGwgPSB0aGlzLT5tcFBpZGxNZ3ItPmxwdnRibC0+Zm5DcmVhdGVGb2xkZXIodGhpcy0+bXBQaWRsTWdyLCBzdGZmaWxlLmNGaWxlTmFtZSk7CisgICAgICAgIGlmKHBpZGwpCisgICAgICAgIHsgaWYoIUlFbnVtSURMaXN0X0FkZFRvRW51bUxpc3QodGhpcywgcGlkbCkpCisgICAgICAgICAgeyByZXR1cm4gRkFMU0U7CisJCQkJCX0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsgcmV0dXJuIEZBTFNFOworICAgICAgICB9ICAgCisgICAgICB9IHdoaWxlKCBGaW5kTmV4dEZpbGUzMkEoaEZpbGUsJnN0ZmZpbGUpKTsKKwkJCUZpbmRDbG9zZTMyIChoRmlsZSk7CisgICB9IAorICByZXR1cm4gVFJVRTsKIH0KIAotc3RhdGljIEhSRVNVTFQgV0lOQVBJIElTaGVsbEZvbGRlcl9DcmVhdGVWaWV3T2JqZWN0KAotCUxQU0hFTExGT0xERVIgdGhpcyxIV05EMzIgaHduZE93bmVyLFJFRklJRCByaWlkLExQVk9JRCAqcHB2Ci0pIHsKLQljaGFyCXhjbHNpZFs1MF07CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBFbnVtSURMaXN0X0FkZFRvRW51bUxpc3QoKQorICovCitzdGF0aWMgQk9PTDMyIFdJTkFQSSBJRW51bUlETGlzdF9BZGRUb0VudW1MaXN0KExQRU5VTUlETElTVCB0aGlzLExQSVRFTUlETElTVCBwaWRsKQoreyBMUEVOVU1MSVNUICBwTmV3OwogCi0JV0lORV9TdHJpbmdGcm9tQ0xTSUQocmlpZCx4Y2xzaWQpOwotCUZJWE1FKG9sZSwiKCVwKS0+KDB4JTA0eCwlcywlcCksc3R1YiFcbiIsCi0JCXRoaXMsaHduZE93bmVyLHhjbHNpZCxwcHYKLQkpOwotCSooRFdPUkQqKXBwdiA9IDA7Ci0JcmV0dXJuIDA7CisgIFRSQUNFKHNoZWxsLCIoJXApLT4ocGlkbD0lcClcbiIsdGhpcyxwaWRsKTsKKyAgcE5ldyA9IChMUEVOVU1MSVNUKUhlYXBBbGxvYyhHZXRQcm9jZXNzSGVhcCgpLDAsc2l6ZW9mKEVOVU1MSVNUKSk7CisgIGlmKHBOZXcpCisgIHsgLy9zZXQgdGhlIG5leHQgcG9pbnRlcgorICAgIHBOZXctPnBOZXh0ID0gTlVMTDsKKyAgICBwTmV3LT5waWRsID0gcGlkbDsKKworICAgIC8vaXMgdGhpcyB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgbGlzdD8KKyAgICBpZighdGhpcy0+bXBGaXJzdCkKKyAgICB7IHRoaXMtPm1wRmlyc3QgPSBwTmV3OworICAgICAgdGhpcy0+bXBDdXJyZW50ID0gcE5ldzsKKyAgICB9CisgICAKKyAgICBpZih0aGlzLT5tcExhc3QpCisgICAgeyAvL2FkZCB0aGUgbmV3IGl0ZW0gdG8gdGhlIGVuZCBvZiB0aGUgbGlzdAorICAgICAgdGhpcy0+bXBMYXN0LT5wTmV4dCA9IHBOZXc7CisgICAgfQorICAgCisgICAgLy91cGRhdGUgdGhlIGxhc3QgaXRlbSBwb2ludGVyCisgICAgdGhpcy0+bXBMYXN0ID0gcE5ldzsKKwkJVFJBQ0Uoc2hlbGwsIiglcCktPihmaXJzdD0lcCwgbGFzdD0lcClcbiIsdGhpcyx0aGlzLT5tcEZpcnN0LHRoaXMtPm1wTGFzdCk7CisgICAgcmV0dXJuIFRSVUU7CisgIH0KKyAgcmV0dXJuIEZBTFNFOworfQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgRW51bUlETGlzdF9EZWxldGVMaXN0KCkKKyovCitzdGF0aWMgQk9PTDMyIFdJTkFQSSBJRW51bUlETGlzdF9EZWxldGVMaXN0KExQRU5VTUlETElTVCB0aGlzKQoreyBMUEVOVU1MSVNUICBwRGVsZXRlOworCisgIFRSQUNFKHNoZWxsLCIoJXApLT4oKVxuIix0aGlzKTsKKwkKKyAgd2hpbGUodGhpcy0+bXBGaXJzdCkKKyAgeyBwRGVsZXRlID0gdGhpcy0+bXBGaXJzdDsKKyAgICB0aGlzLT5tcEZpcnN0ID0gcERlbGV0ZS0+cE5leHQ7CisKKyAgICAvL2ZyZWUgdGhlIHBpZGwKKyAgICB0aGlzLT5tcFBpZGxNZ3ItPmxwdnRibC0+Zm5EZWxldGUodGhpcy0+bXBQaWRsTWdyLHBEZWxldGUtPnBpZGwpOworICAgCisgICAgLy9mcmVlIHRoZSBsaXN0IGl0ZW0KKwkJSGVhcEZyZWUoR2V0UHJvY2Vzc0hlYXAoKSwwLHBEZWxldGUpOworICB9CisgIHRoaXMtPm1wRmlyc3QgPSB0aGlzLT5tcExhc3QgPSB0aGlzLT5tcEN1cnJlbnQgPSBOVUxMOworICByZXR1cm4gVFJVRTsKIH0KIAotCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICBJU2hlbGxGb2xkZXIgaW1wbGVtZW50YXRpb24KKyovCisvKkxQU0hFTExGT0xERVIgSVNoZWxsRm9sZGVyX0NvbnN0cnVjdG9yKCk7Ki8KK3N0YXRpYyBIUkVTVUxUIFdJTkFQSSBJU2hlbGxGb2xkZXJfUXVlcnlJbnRlcmZhY2UoTFBTSEVMTEZPTERFUixSRUZJSUQsTFBWT0lEKik7CitzdGF0aWMgVUxPTkcgV0lOQVBJIElTaGVsbEZvbGRlcl9BZGRSZWYoTFBTSEVMTEZPTERFUik7CitzdGF0aWMgVUxPTkcgV0lOQVBJIElTaGVsbEZvbGRlcl9SZWxlYXNlKExQU0hFTExGT0xERVIpOworc3RhdGljIEhSRVNVTFQgV0lOQVBJIElTaGVsbEZvbGRlcl9Jbml0aWFsaXplKExQU0hFTExGT0xERVIsTFBDSVRFTUlETElTVCk7CitzdGF0aWMgSFJFU1VMVCBXSU5BUEkgSVNoZWxsRm9sZGVyX1BhcnNlRGlzcGxheU5hbWUoTFBTSEVMTEZPTERFUixIV05EMzIsTFBCQyxMUE9MRVNUUjMyLERXT1JEKixMUElURU1JRExJU1QqLERXT1JEKik7CitzdGF0aWMgSFJFU1VMVCBXSU5BUEkgSVNoZWxsRm9sZGVyX0VudW1PYmplY3RzKExQU0hFTExGT0xERVIsSFdORDMyLERXT1JELExQRU5VTUlETElTVCopOworc3RhdGljIEhSRVNVTFQgV0lOQVBJIElTaGVsbEZvbGRlcl9CaW5kVG9PYmplY3QoTFBTSEVMTEZPTERFUixMUENJVEVNSURMSVNULExQQkMsUkVGSUlELExQVk9JRCopOworc3RhdGljIEhSRVNVTFQgV0lOQVBJIElTaGVsbEZvbGRlcl9CaW5kVG9TdG9yYWdlKExQU0hFTExGT0xERVIsTFBDSVRFTUlETElTVCxMUEJDLFJFRklJRCxMUFZPSUQqKTsKK3N0YXRpYyBIUkVTVUxUIFdJTkFQSSBJU2hlbGxGb2xkZXJfQ29tcGFyZUlEcyhMUFNIRUxMRk9MREVSLExQQVJBTSxMUENJVEVNSURMSVNULExQQ0lURU1JRExJU1QpOworc3RhdGljIEhSRVNVTFQgV0lOQVBJIElTaGVsbEZvbGRlcl9DcmVhdGVWaWV3T2JqZWN0KExQU0hFTExGT0xERVIsSFdORDMyLFJFRklJRCxMUFZPSUQqKTsKK3N0YXRpYyBIUkVTVUxUIFdJTkFQSSBJU2hlbGxGb2xkZXJfR2V0QXR0cmlidXRlc09mKExQU0hFTExGT0xERVIsVUlOVDMyLExQQ0lURU1JRExJU1QqLERXT1JEKik7CitzdGF0aWMgSFJFU1VMVCBXSU5BUEkgSVNoZWxsRm9sZGVyX0dldFVJT2JqZWN0T2YoTFBTSEVMTEZPTERFUixIV05EMzIsVUlOVDMyLExQQ0lURU1JRExJU1QqLFJFRklJRCxVSU5UMzIqLExQVk9JRCopOworc3RhdGljIEhSRVNVTFQgV0lOQVBJIElTaGVsbEZvbGRlcl9HZXREaXNwbGF5TmFtZU9mKExQU0hFTExGT0xERVIsTFBDSVRFTUlETElTVCxEV09SRCxMUFNUUlJFVCk7CitzdGF0aWMgSFJFU1VMVCBXSU5BUEkgSVNoZWxsRm9sZGVyX1NldE5hbWVPZihMUFNIRUxMRk9MREVSLEhXTkQzMixMUENJVEVNSURMSVNULExQQ09MRVNUUjMyLERXT1JELExQSVRFTUlETElTVCopOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqCSAgSVNoZWxsRm9sZGVyX1ZUYWJsZQorKi8KIHN0YXRpYyBzdHJ1Y3QgSVNoZWxsRm9sZGVyX1ZUYWJsZSBzZnZ0ID0gewotICAgICAgICAodm9pZCAqKTEsCisgIElTaGVsbEZvbGRlcl9RdWVyeUludGVyZmFjZSwKIAlJU2hlbGxGb2xkZXJfQWRkUmVmLAogCUlTaGVsbEZvbGRlcl9SZWxlYXNlLAorCUlTaGVsbEZvbGRlcl9Jbml0aWFsaXplLAogCUlTaGVsbEZvbGRlcl9QYXJzZURpc3BsYXlOYW1lLAogCUlTaGVsbEZvbGRlcl9FbnVtT2JqZWN0cywKIAlJU2hlbGxGb2xkZXJfQmluZFRvT2JqZWN0LAotICAgICAgICAodm9pZCAqKTcsCi0gICAgICAgICh2b2lkICopOCwKKyAgSVNoZWxsRm9sZGVyX0JpbmRUb1N0b3JhZ2UsCisgIElTaGVsbEZvbGRlcl9Db21wYXJlSURzLAogCUlTaGVsbEZvbGRlcl9DcmVhdGVWaWV3T2JqZWN0LAogCUlTaGVsbEZvbGRlcl9HZXRBdHRyaWJ1dGVzT2YsCi0gICAgICAgICh2b2lkICopMTEsCi0gICAgICAgICh2b2lkICopMTIsCi0gICAgICAgICh2b2lkICopMTMKKyAgSVNoZWxsRm9sZGVyX0dldFVJT2JqZWN0T2YsCisgIElTaGVsbEZvbGRlcl9HZXREaXNwbGF5TmFtZU9mLAorICBJU2hlbGxGb2xkZXJfU2V0TmFtZU9mCiB9OworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCSAgSVNoZWxsRm9sZGVyX0NvbnN0cnVjdG9yCisqLwogCi1MUFNIRUxMRk9MREVSIElTaGVsbEZvbGRlcl9Db25zdHJ1Y3RvcigpIHsKK0xQU0hFTExGT0xERVIgSVNoZWxsRm9sZGVyX0NvbnN0cnVjdG9yKExQU0hFTExGT0xERVIgcFBhcmVudCxMUElURU1JRExJU1QgcGlkbCkgewogCUxQU0hFTExGT0xERVIJc2Y7CisJRFdPUkQgZHdTaXplPTA7CisJV09SRCB3TGVuOwogCXNmID0gKExQU0hFTExGT0xERVIpSGVhcEFsbG9jKEdldFByb2Nlc3NIZWFwKCksMCxzaXplb2YoSVNoZWxsRm9sZGVyKSk7CiAJc2YtPnJlZgkJPSAxOwogCXNmLT5scHZ0YmwJPSAmc2Z2dDsKLQlUUkFDRShvbGUsIiglcCktPigpXG4iLHNmKTsKKyAgc2YtPm1scHN6Rm9sZGVyPU5VTEw7CisJc2YtPm1wU0ZQYXJlbnQ9cFBhcmVudDsKKworCVRSQUNFKHNoZWxsLCIoJXApLT4ocGFyZW50OiVwLCBwaWRsPSVwKVxuIixzZixwUGFyZW50LCBwaWRsKTsKKwkKKyAgc2YtPnBQaWRsTWdyICA9IFBpZGxNZ3JfQ29uc3RydWN0b3IoKTsKKwlpZiAoISBzZi0+cFBpZGxNZ3IgKQorCXsgSGVhcEZyZWUoR2V0UHJvY2Vzc0hlYXAoKSwwLHNmKTsKKwkgIEVSUiAoc2hlbGwsIi0tIENvdWxkIG5vdCBpbml0aWFsaXplIFBpZE1HUlxuIik7CisJICByZXR1cm4gTlVMTDsKKwl9CisKKwlzZi0+bXBpZGwgPSBzZi0+cFBpZGxNZ3ItPmxwdnRibC0+Zm5Db3B5KHNmLT5wUGlkbE1nciwgcGlkbCk7CisJc2YtPm1waWRsTlNSb290ID0gTlVMTDsKKwkKKyAgaWYoc2YtPm1waWRsKQorICB7IC8qaWYoc2YtPnBQaWRsTWdyLT5scHZ0YmwtPmZuSXNEZXNrdG9wKHNmLT5wUGlkbE1ncixzZi0+bXBpZGwpKQorICAgIHsgc2YtPnBQaWRsTWdyLT5scHZ0YmwtPmZuR2V0RGVza3RvcChzZi0+cFBpZGxNZ3Isc2YtPm1waWRsKTsKKyAgICB9Ki8KKyAgICBkd1NpemUgPSAwOworICAgIGlmKHNmLT5tcFNGUGFyZW50LT5tbHBzekZvbGRlcikKKyAgICB7IGR3U2l6ZSArPSBzdHJsZW4oc2YtPm1wU0ZQYXJlbnQtPm1scHN6Rm9sZGVyKSArIDE7CisgICAgfSAgIAorICAgIGR3U2l6ZSArPSBzZi0+cFBpZGxNZ3ItPmxwdnRibC0+Zm5HZXRGb2xkZXJUZXh0KHNmLT5wUGlkbE1ncixzZi0+bXBpZGwsTlVMTCwwKTsKKyAgICBzZi0+bWxwc3pGb2xkZXIgPSAoTFBTVFIpSGVhcEFsbG9jKEdldFByb2Nlc3NIZWFwKCksMCxkd1NpemUpOworICAgIGlmKHNmLT5tbHBzekZvbGRlcikKKyAgICB7ICooc2YtPm1scHN6Rm9sZGVyKSA9IDA7CisgICAgICBpZihzZi0+bXBTRlBhcmVudC0+bWxwc3pGb2xkZXIpCisgICAgICB7ICBzdHJjcHkoc2YtPm1scHN6Rm9sZGVyLCBzZi0+bXBTRlBhcmVudC0+bWxwc3pGb2xkZXIpOworICAgICAgICAgd0xlbiA9IHN0cmxlbihzZi0+bWxwc3pGb2xkZXIpOworICAgICAgICAgaWYgKHdMZW4gJiYgc2YtPm1scHN6Rm9sZGVyW3dMZW4tMV0hPSdcXCcpCisgICAgICAgICB7IHNmLT5tbHBzekZvbGRlclt3TGVuKzBdPSdcXCc7CisgICAgICAgICAgIHNmLT5tbHBzekZvbGRlclt3TGVuKzFdPSdcMCc7CisgICAgICAgICB9CisgICAgICB9CisgICAgICBzZi0+cFBpZGxNZ3ItPmxwdnRibC0+Zm5HZXRGb2xkZXJUZXh0KHNmLT5wUGlkbE1nciwgc2YtPm1waWRsLCBzZi0+bWxwc3pGb2xkZXIrc3RybGVuKHNmLT5tbHBzekZvbGRlciksIGR3U2l6ZS1zdHJsZW4oc2YtPm1scHN6Rm9sZGVyKSk7CisgICAgfQorICB9CisJCisJVFJBQ0Uoc2hlbGwsIi0tICglcCktPiglcCwlcClcbiIsc2YscFBhcmVudCwgcGlkbCk7CiAJcmV0dXJuIHNmOwogfQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgSVNoZWxsRm9sZGVyOjpRdWVyeUludGVyZmFjZQorICovCitzdGF0aWMgSFJFU1VMVCBXSU5BUEkgSVNoZWxsRm9sZGVyX1F1ZXJ5SW50ZXJmYWNlKAorICBMUFNIRUxMRk9MREVSIHRoaXMsIFJFRklJRCByaWlkLCBMUFZPSUQgKnBwdk9iaikKK3sgIGNoYXIJeHJpaWRbNTBdOworICAgV0lORV9TdHJpbmdGcm9tQ0xTSUQoKExQQ0xTSUQpcmlpZCx4cmlpZCk7CisgICBUUkFDRShzaGVsbCwiKCVwKS0+KFxuXHRJSUQ6XHQlcywlcClcbiIsdGhpcyx4cmlpZCxwcHZPYmopOwogCisgICpwcHZPYmogPSBOVUxMOworCisgIGlmKElzRXF1YWxJSUQocmlpZCwgJklJRF9JVW5rbm93bikpICAgICAgICAgIC8qSVVua25vd24qLworICB7ICpwcHZPYmogPSB0aGlzOyAKKyAgfQorICBlbHNlIGlmKElzRXF1YWxJSUQocmlpZCwgJklJRF9JU2hlbGxGb2xkZXIpKSAgLypJU2hlbGxGb2xkZXIqLworICB7ICAgICpwcHZPYmogPSAoSVNoZWxsRm9sZGVyKil0aGlzOworICB9ICAgCisKKyAgaWYoKnBwdk9iaikKKyAgeyAoKihMUFNIRUxMRk9MREVSKilwcHZPYmopLT5scHZ0YmwtPmZuQWRkUmVmKHRoaXMpOyAgCQorICAgIFRSQUNFKHNoZWxsLCItLSBJbnRlcmZhY2U6ICglcCktPiglcClcbiIscHB2T2JqLCpwcHZPYmopOworCQlyZXR1cm4gU19PSzsKKyAgfQorCVRSQUNFKHNoZWxsLCItLSBJbnRlcmZhY2U6IEVfTk9JTlRFUkZBQ0VcbiIpOworCXJldHVybiBFX05PSU5URVJGQUNFOworfSAgIAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIElTaGVsbEZvbGRlcjo6QWRkUmVmCisqLworCitzdGF0aWMgVUxPTkcgV0lOQVBJIElTaGVsbEZvbGRlcl9BZGRSZWYoTFBTSEVMTEZPTERFUiB0aGlzKQorewlUUkFDRShzaGVsbCwiKCVwKS0+KGNvdW50PSVsdSlcbiIsdGhpcywodGhpcy0+cmVmKSsxKTsKKwlyZXR1cm4gKysodGhpcy0+cmVmKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgSVNoZWxsRm9sZGVyX1JlbGVhc2UKKyAqLworc3RhdGljIFVMT05HIFdJTkFQSSBJU2hlbGxGb2xkZXJfUmVsZWFzZShMUFNIRUxMRk9MREVSIHRoaXMpIAoreyBUUkFDRShzaGVsbCwiKCVwKS0+KGNvdW50PSVsdSlcbiIsdGhpcyx0aGlzLT5yZWYpOworCWlmICghLS0odGhpcy0+cmVmKSkgeworCQlUUkFDRShzaGVsbCwiLS0gZGVzdHJveWluZyBJU2hlbGxGb2xkZXIoJXApXG4iLHRoaXMpOworCQlIZWFwRnJlZShHZXRQcm9jZXNzSGVhcCgpLDAsdGhpcyk7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gdGhpcy0+cmVmOworfQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCQlJU2hlbGxGb2xkZXJfUGFyc2VEaXNwbGF5TmFtZQorKgorKiBGSVhNRTogCisqICAgIHBkd0F0dHJpYnV0ZXM6IG5vdCB1c2VkCisqLworc3RhdGljIEhSRVNVTFQgV0lOQVBJIElTaGVsbEZvbGRlcl9QYXJzZURpc3BsYXlOYW1lKAorCUxQU0hFTExGT0xERVIgdGhpcywKKwlIV05EMzIgaHduZE93bmVyLAorCUxQQkMgcGJjUmVzZXJ2ZWQsCisJTFBPTEVTVFIzMiBscHN6RGlzcGxheU5hbWUsICAgIC8qIFtpbl0gIG5hbWUgb2YgZmlsZSBvciBmb2xkZXIqLworCURXT1JEICpwY2hFYXRlbiwgICAgICAgICAgICAgICAvKiBbb3V0XSBudW1iZXIgb2YgY2hhcnMgcGFyc2VkKi8KKwlMUElURU1JRExJU1QgKnBwaWRsLCAgICAgICAgICAgLyogW291dF0gdGhlIHBpZGwqLworCURXT1JEICpwZHdBdHRyaWJ1dGVzKQorewlIUkVTVUxUICAgICAgICBocj1FX09VVE9GTUVNT1JZOworICBMUElURU1JRExJU1QgICBwaWRsRnVsbD1OVUxMOworICBEV09SRCAgICAgICAgICBkd0NoYXJzPWxzdHJsZW4zMlcobHBzekRpc3BsYXlOYW1lKSArIDE7CisgIExQU1RSICAgICAgICAgIHBzelRlbXA9KExQU1RSKUhlYXBBbGxvYyhHZXRQcm9jZXNzSGVhcCgpLDAsZHdDaGFycyAqIHNpemVvZihDSEFSKSk7CisgIExQU1RSICAgICAgICAgIHBzek5leHQ9TlVMTDsKKyAgQ0hBUiAgICAgICAgICAgc3pFbGVtZW50W01BWF9QQVRIXTsKKyAgQk9PTDMyICAgICAgICAgYlR5cGU7CisgIExQSVRFTUlETElTVCAgIHBpZGxUZW1wID0gTlVMTDsKKyAgTFBJVEVNSURMSVNUICAgcGlkbE9sZCA9IE5VTEw7CisgICAgICAgCisgIFRSQUNFKHNoZWxsLCIoJXApLT4oJXgsJXAsJXA9JXMsJXAscGlkbD0lcCwlcClcbiIsCisJdGhpcyxod25kT3duZXIscGJjUmVzZXJ2ZWQsbHBzekRpc3BsYXlOYW1lLGRlYnVnc3RyX3cobHBzekRpc3BsYXlOYW1lKSxwY2hFYXRlbixwcGlkbCxwZHdBdHRyaWJ1dGVzCisJKTsKKyAgaWYocHN6VGVtcCkKKyAgeyBociA9IEVfRkFJTDsKKyAgICBXaWRlQ2hhclRvTG9jYWwzMihwc3pUZW1wLCBscHN6RGlzcGxheU5hbWUsIGR3Q2hhcnMpOworICAgIGlmKCpwc3pUZW1wKQorICAgIHsgcGlkbEZ1bGwgPSB0aGlzLT5wUGlkbE1nci0+bHB2dGJsLT5mbkNyZWF0ZURlc2t0b3AodGhpcy0+cFBpZGxNZ3IpOworCisgICAgICAvKiBjaGVjayBpZiB0aGUgbHBzekRpc3BsYXlOYW1lIGlzIEZvbGRlciBvciBGaWxlKi8KKwkJCWJUeXBlID0gISAoR2V0RmlsZUF0dHJpYnV0ZXMzMkEocHN6TmV4dCkmRklMRV9BVFRSSUJVVEVfRElSRUNUT1JZKTsKKwkJCQorCQkJcHN6TmV4dCA9IEdldE5leHRFbGVtZW50KHBzelRlbXAsIHN6RWxlbWVudCwgTUFYX1BBVEgpOworCisgICAgICBwaWRsVGVtcCA9IHRoaXMtPnBQaWRsTWdyLT5scHZ0YmwtPmZuQ3JlYXRlRHJpdmUodGhpcy0+cFBpZGxNZ3Isc3pFbGVtZW50KTsJCQkKKyAgICAgIHBpZGxPbGQgPSBwaWRsRnVsbDsKKyAgICAgIHBpZGxGdWxsID0gdGhpcy0+cFBpZGxNZ3ItPmxwdnRibC0+Zm5Db25jYXRlbmF0ZSh0aGlzLT5wUGlkbE1ncixwaWRsRnVsbCxwaWRsVGVtcCk7CisJICAgIHRoaXMtPnBQaWRsTWdyLT5scHZ0YmwtPmZuRGVsZXRlKHRoaXMtPnBQaWRsTWdyLHBpZGxPbGQpOworCisJCQlpZihwaWRsRnVsbCkKKyAgICAgIHsgd2hpbGUoKHBzek5leHQ9R2V0TmV4dEVsZW1lbnQocHN6TmV4dCwgc3pFbGVtZW50LCBNQVhfUEFUSCkpKQorICAgICAgICB7IGlmKCEqcHN6TmV4dCAmJiBiVHlwZSkKKwkJCQkJeyBwaWRsVGVtcCA9IHRoaXMtPnBQaWRsTWdyLT5scHZ0YmwtPmZuQ3JlYXRlVmFsdWUodGhpcy0+cFBpZGxNZ3Isc3pFbGVtZW50KTsKKwkJCQkJfQorCQkJCQllbHNlCQkJCQorICAgICAgICAgIHsgcGlkbFRlbXAgPSB0aGlzLT5wUGlkbE1nci0+bHB2dGJsLT5mbkNyZWF0ZUZvbGRlcih0aGlzLT5wUGlkbE1ncixzekVsZW1lbnQpOworCQkJCQl9CisgICAgICAgICAgcGlkbE9sZCA9IHBpZGxGdWxsOworICAgICAgICAgIHBpZGxGdWxsID0gdGhpcy0+cFBpZGxNZ3ItPmxwdnRibC0+Zm5Db25jYXRlbmF0ZSh0aGlzLT5wUGlkbE1ncixwaWRsRnVsbCxwaWRsVGVtcCk7CisgICAgICAgICAgdGhpcy0+cFBpZGxNZ3ItPmxwdnRibC0+Zm5EZWxldGUodGhpcy0+cFBpZGxNZ3IscGlkbE9sZCk7CisgICAgICAgICB9CisgICAgICAgICBociA9IFNfT0s7CisgICAgICAgfQorICAgICB9CisJCUhlYXBGcmVlKEdldFByb2Nlc3NIZWFwKCksMCxwc3pUZW1wKTsKKyAgfQorICAqcHBpZGwgPSBwaWRsRnVsbDsKKyAgcmV0dXJuIGhyOworCisKKworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoJCUlTaGVsbEZvbGRlcl9FbnVtT2JqZWN0cworKi8KK3N0YXRpYyBIUkVTVUxUIFdJTkFQSSBJU2hlbGxGb2xkZXJfRW51bU9iamVjdHMoCisJTFBTSEVMTEZPTERFUiB0aGlzLEhXTkQzMiBod25kT3duZXIsRFdPUkQgZHdGbGFncywKKwlMUEVOVU1JRExJU1QqIHBwRW51bUlETGlzdCkKK3sgSFJFU1VMVCAgaHI7CisJVFJBQ0Uoc2hlbGwsIiglcCktPigleCwlbHgsJXApXG4iLHRoaXMsaHduZE93bmVyLGR3RmxhZ3MscHBFbnVtSURMaXN0KTsKKworICAqcHBFbnVtSURMaXN0ID0gTlVMTDsKKwkqcHBFbnVtSURMaXN0ID0gSUVudW1JRExpc3RfQ29uc3RydWN0b3IgKHRoaXMtPm1scHN6Rm9sZGVyLCBkd0ZsYWdzLCAmaHIpOworICBUUkFDRShzaGVsbCwiLS0gKCVwKS0+KG5ldyBJRCBMaXN0OiAlcClcbiIsdGhpcywqcHBFbnVtSURMaXN0KTsKKyAgaWYoISpwcEVudW1JRExpc3QpCisgIHsgcmV0dXJuIGhyOworICB9CisgIHJldHVybiBTX09LOwkJCit9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBJU2hlbGxGb2xkZXJfSW5pdGlhbGl6ZSgpCisgKiAgSVBlcnNpc3RGb2xkZXIgTWV0aG9kCisgKi8KK3N0YXRpYyBIUkVTVUxUIFdJTkFQSSBJU2hlbGxGb2xkZXJfSW5pdGlhbGl6ZSgKKwlMUFNIRUxMRk9MREVSIHRoaXMsCisJTFBDSVRFTUlETElTVCBwaWRsKQoreyBUUkFDRShzaGVsbCwiKCVwKS0+KHBpZGw9JXApXG4iLHRoaXMscGlkbCk7CisgIGlmKHRoaXMtPm1waWRsTlNSb290KQorICB7IHRoaXMtPnBQaWRsTWdyLT5scHZ0YmwtPmZuRGVsZXRlKHRoaXMtPnBQaWRsTWdyLCB0aGlzLT5tcGlkbE5TUm9vdCk7CisgICAgdGhpcy0+bXBpZGxOU1Jvb3QgPSBOVUxMOworICB9CisgIHRoaXMtPm1waWRsTlNSb290ID0gdGhpcy0+cFBpZGxNZ3ItPmxwdnRibC0+Zm5Db3B5KHRoaXMtPnBQaWRsTWdyLCBwaWRsKTsKKyAgcmV0dXJuIFNfT0s7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgkJSVNoZWxsRm9sZGVyX0JpbmRUb09iamVjdAorKi8KK3N0YXRpYyBIUkVTVUxUIFdJTkFQSSBJU2hlbGxGb2xkZXJfQmluZFRvT2JqZWN0KAorCUxQU0hFTExGT0xERVIgdGhpcywKKwlMUENJVEVNSURMSVNUIHBpZGwsCisJTFBCQyBwYmNSZXNlcnZlZCwKKwlSRUZJSUQgcmlpZCwKKwlMUFZPSUQgKiBwcHZPdXQpCit7CWNoYXIJICAgICAgICB4Y2xzaWRbNTBdOworICBIUkVTVUxUICAgICAgIGhyOworCUxQU0hFTExGT0xERVIgcFNoZWxsRm9sZGVyOworCQorCVdJTkVfU3RyaW5nRnJvbUNMU0lEKHJpaWQseGNsc2lkKTsKKworCVRSQUNFKHNoZWxsLCIoJXApLT4ocGlkbD0lcCwlcCxcblx0U0lEOiVzLCVwKVxuIix0aGlzLHBpZGwscGJjUmVzZXJ2ZWQseGNsc2lkLHBwdk91dCk7CisKKyAgKnBwdk91dCA9IE5VTEw7CisgIHBTaGVsbEZvbGRlciA9IElTaGVsbEZvbGRlcl9Db25zdHJ1Y3Rvcih0aGlzLCBwaWRsKTsKKyAgaWYoIXBTaGVsbEZvbGRlcikKKyAgICByZXR1cm4gRV9PVVRPRk1FTU9SWTsKKyAgcFNoZWxsRm9sZGVyLT5scHZ0YmwtPmZuSW5pdGlhbGl6ZShwU2hlbGxGb2xkZXIsIHRoaXMtPm1waWRsTlNSb290KTsKKyAgaHIgPSBwU2hlbGxGb2xkZXItPmxwdnRibC0+Zm5RdWVyeUludGVyZmFjZShwU2hlbGxGb2xkZXIsIHJpaWQsIHBwdk91dCk7CisgIHBTaGVsbEZvbGRlci0+bHB2dGJsLT5mblJlbGVhc2UocFNoZWxsRm9sZGVyKTsKKwlUUkFDRShzaGVsbCwiLS0gKCVwKS0+KGludGVyZmFjZT0lcClcbiIsdGhpcywgcHB2T3V0KTsKKyAgcmV0dXJuIGhyOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIElTaGVsbEZvbGRlcl9CaW5kVG9TdG9yYWdlCisqLworc3RhdGljIEhSRVNVTFQgV0lOQVBJIElTaGVsbEZvbGRlcl9CaW5kVG9TdG9yYWdlKAorICAJTFBTSEVMTEZPTERFUiB0aGlzLAorICAgIExQQ0lURU1JRExJU1QgcGlkbCwgCisgICAgTFBCQyBwYmNSZXNlcnZlZCwgCisgICAgUkVGSUlEIHJpaWQsIAorICAgIExQVk9JRCAqcHB2T3V0KQorewljaGFyCSAgICAgICAgeGNsc2lkWzUwXTsKKwlXSU5FX1N0cmluZ0Zyb21DTFNJRChyaWlkLHhjbHNpZCk7CisKKwlGSVhNRShzaGVsbCwiKCVwKS0+KHBpZGw9JXAsJXAsXG5cdFNJRDolcywlcCkgc3R1YlxuIix0aGlzLHBpZGwscGJjUmVzZXJ2ZWQseGNsc2lkLHBwdk91dCk7CisKKyAgKnBwdk91dCA9IE5VTEw7CisgIHJldHVybiBFX05PVElNUEw7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgSVNoZWxsRm9sZGVyX0NvbXBhcmVJRHMKKyovCitzdGF0aWMgSFJFU1VMVCBXSU5BUEkgIElTaGVsbEZvbGRlcl9Db21wYXJlSURzKAorICAJTFBTSEVMTEZPTERFUiB0aGlzLAorCQlMUEFSQU0gbFBhcmFtLCAKKyAgICBMUENJVEVNSURMSVNUIHBpZGwxLCAKKyAgICBMUENJVEVNSURMSVNUIHBpZGwyKQoreyBDSEFSIHN6U3RyaW5nMVtNQVhfUEFUSF0gPSAiIjsKKyAgQ0hBUiBzelN0cmluZzJbTUFYX1BBVEhdID0gIiI7CisgIGludCAgIG5SZXR1cm47CisgIExQQ0lURU1JRExJU1QgIHBpZGxUZW1wMSA9IHBpZGwxLCBwaWRsVGVtcDIgPSBwaWRsMjsKKworICBUUkFDRShzaGVsbCwiKCVwKS0+KCVseCxwaWRsMT0lcCxwaWRsMj0lcCkgc3R1YlxuIix0aGlzLGxQYXJhbSxwaWRsMSxwaWRsMik7CisKKyAgLypTcGVjaWFsIGNhc2UgLSBJZiBvbmUgb2YgdGhlIGl0ZW1zIGlzIGEgUGF0aCBhbmQgdGhlIG90aGVyIGlzIGEgRmlsZSwgYWx3YXlzIAorICBtYWtlIHRoZSBQYXRoIGNvbWUgYmVmb3JlIHRoZSBGaWxlLiovCisKKyAgLy9nZXQgdGhlIGxhc3QgaXRlbSBpbiBlYWNoIGxpc3QKKyAgd2hpbGUoKHRoaXMtPnBQaWRsTWdyLT5scHZ0YmwtPmZuR2V0TmV4dEl0ZW0odGhpcy0+cFBpZGxNZ3IscGlkbFRlbXAxKSktPm1raWQuY2IpCisgICAgcGlkbFRlbXAxID0gdGhpcy0+cFBpZGxNZ3ItPmxwdnRibC0+Zm5HZXROZXh0SXRlbSh0aGlzLT5wUGlkbE1ncixwaWRsVGVtcDEpOworICB3aGlsZSgodGhpcy0+cFBpZGxNZ3ItPmxwdnRibC0+Zm5HZXROZXh0SXRlbSh0aGlzLT5wUGlkbE1ncixwaWRsVGVtcDIpKS0+bWtpZC5jYikKKyAgICBwaWRsVGVtcDIgPSB0aGlzLT5wUGlkbE1nci0+bHB2dGJsLT5mbkdldE5leHRJdGVtKHRoaXMtPnBQaWRsTWdyLHBpZGxUZW1wMik7CisKKyAgLy9hdCB0aGlzIHBvaW50LCBib3RoIHBpZGxUZW1wMSBhbmQgcGlkbFRlbXAyIHBvaW50IHRvIHRoZSBsYXN0IGl0ZW0gaW4gdGhlIGxpc3QKKyAgaWYodGhpcy0+cFBpZGxNZ3ItPmxwdnRibC0+Zm5Jc1ZhbHVlKHRoaXMtPnBQaWRsTWdyLHBpZGxUZW1wMSkgIT0gdGhpcy0+cFBpZGxNZ3ItPmxwdnRibC0+Zm5Jc1ZhbHVlKHRoaXMtPnBQaWRsTWdyLHBpZGxUZW1wMikpCisgIHsgaWYodGhpcy0+cFBpZGxNZ3ItPmxwdnRibC0+Zm5Jc1ZhbHVlKHRoaXMtPnBQaWRsTWdyLHBpZGxUZW1wMSkpCisgICAgICByZXR1cm4gMTsKKyAgIHJldHVybiAtMTsKKyAgfQorCisgIHRoaXMtPnBQaWRsTWdyLT5scHZ0YmwtPmZuR2V0RHJpdmUodGhpcy0+cFBpZGxNZ3IsIHBpZGwxLHN6U3RyaW5nMSxzaXplb2Yoc3pTdHJpbmcxKSk7CisgIHRoaXMtPnBQaWRsTWdyLT5scHZ0YmwtPmZuR2V0RHJpdmUodGhpcy0+cFBpZGxNZ3IsIHBpZGwyLHN6U3RyaW5nMSxzaXplb2Yoc3pTdHJpbmcyKSk7CisgIG5SZXR1cm4gPSBzdHJjYXNlY21wKHN6U3RyaW5nMSwgc3pTdHJpbmcyKTsKKyAgaWYoblJldHVybikKKyAgICByZXR1cm4gblJldHVybjsKKworICB0aGlzLT5wUGlkbE1nci0+bHB2dGJsLT5mbkdldEZvbGRlclRleHQodGhpcy0+cFBpZGxNZ3IsIHBpZGwxLHN6U3RyaW5nMSxzaXplb2Yoc3pTdHJpbmcxKSk7CisgIHRoaXMtPnBQaWRsTWdyLT5scHZ0YmwtPmZuR2V0Rm9sZGVyVGV4dCh0aGlzLT5wUGlkbE1nciwgcGlkbDIsc3pTdHJpbmcyLHNpemVvZihzelN0cmluZzIpKTsKKyAgblJldHVybiA9IHN0cmNhc2VjbXAoc3pTdHJpbmcxLCBzelN0cmluZzIpOworICBpZihuUmV0dXJuKQorICAgIHJldHVybiBuUmV0dXJuOworCisgIHRoaXMtPnBQaWRsTWdyLT5scHZ0YmwtPmZuR2V0VmFsdWVUZXh0KHRoaXMtPnBQaWRsTWdyLHBpZGwxLHN6U3RyaW5nMSxzaXplb2Yoc3pTdHJpbmcxKSk7CisgIHRoaXMtPnBQaWRsTWdyLT5scHZ0YmwtPmZuR2V0VmFsdWVUZXh0KHRoaXMtPnBQaWRsTWdyLHBpZGwyLHN6U3RyaW5nMixzaXplb2Yoc3pTdHJpbmcyKSk7CisgIHJldHVybiBzdHJjYXNlY21wKHN6U3RyaW5nMSwgc3pTdHJpbmcyKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCSAgSVNoZWxsRm9sZGVyX0NyZWF0ZVZpZXdPYmplY3QKKyovCitzdGF0aWMgSFJFU1VMVCBXSU5BUEkgSVNoZWxsRm9sZGVyX0NyZWF0ZVZpZXdPYmplY3QoCisJTFBTSEVMTEZPTERFUiB0aGlzLEhXTkQzMiBod25kT3duZXIsUkVGSUlEIHJpaWQsTFBWT0lEICpwcHYpCit7CWNoYXIJeGNsc2lkWzUwXTsKKworCVdJTkVfU3RyaW5nRnJvbUNMU0lEKHJpaWQseGNsc2lkKTsKKwlGSVhNRShzaGVsbCwiKCVwKS0+KDB4JTA0eCxcblx0SUlEOlx0JXMsJXApLHN0dWIhXG4iLHRoaXMsaHduZE93bmVyLHhjbHNpZCxwcHYpOworCQorCSooRFdPUkQqKXBwdiA9IDA7CisJcmV0dXJuIEVfT1VUT0ZNRU1PUlk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgSVNoZWxsRm9sZGVyX0dldEF0dHJpYnV0ZXNPZgorKi8KK3N0YXRpYyBIUkVTVUxUIFdJTkFQSSBJU2hlbGxGb2xkZXJfR2V0QXR0cmlidXRlc09mKAorCUxQU0hFTExGT0xERVIgdGhpcywKKwlVSU5UMzIgY2lkbCwKKwlMUENJVEVNSURMSVNUICphcGlkbCwKKwlEV09SRCAqcmdmSW5PdXQpCit7IEZJWE1FKHNoZWxsLCIoJXApLT4oJWQsJXAsJXApLHN0dWIhXG4iLHRoaXMsY2lkbCxhcGlkbCxyZ2ZJbk91dCk7CisJcmV0dXJuIEVfTk9USU1QTDsKK30KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgSVNoZWxsRm9sZGVyX0dldFVJT2JqZWN0T2YKKyovCitzdGF0aWMgSFJFU1VMVCBXSU5BUEkgSVNoZWxsRm9sZGVyX0dldFVJT2JqZWN0T2YoCisJTFBTSEVMTEZPTERFUiB0aGlzLAorCUhXTkQzMiBod25kT3duZXIsCisJVUlOVDMyIGNpZGwsIAorCUxQQ0lURU1JRExJU1QgKiBhcGlkbCwKKyAgUkVGSUlEIHJpaWQsCisJVUlOVDMyICogcHJnZkluT3V0LAorCUxQVk9JRCAqIHBwdk91dCkKK3sgY2hhcgkgICAgICAgIHhjbHNpZFs1MF07CisgIAorCVdJTkVfU3RyaW5nRnJvbUNMU0lEKHJpaWQseGNsc2lkKTsKKworICBGSVhNRShzaGVsbCwiKCVwKS0+KCV1ICV1LHBpZGw9JXAsXG5cdElJRDolcywlcCwlcCksc3R1YiFcbiIsCisJICB0aGlzLGh3bmRPd25lcixjaWRsLGFwaWRsLHhjbHNpZCxwcmdmSW5PdXQscHB2T3V0KTsKKwlyZXR1cm4gRV9GQUlMOworfQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBJU2hlbGxGb2xkZXJfR2V0RGlzcGxheU5hbWVPZgorKi8KKyNkZWZpbmUgR0VUX1NIR0ROX0ZPUihkd0ZsYWdzKSAgICAgICAgICgoRFdPUkQpZHdGbGFncyAmIChEV09SRCkweDAwMDBGRjAwKQorI2RlZmluZSBHRVRfU0hHRE5fUkVMQVRJT04oZHdGbGFncykgICAgKChEV09SRClkd0ZsYWdzICYgKERXT1JEKTB4MDAwMDAwRkYpCisKK3N0YXRpYyBIUkVTVUxUIFdJTkFQSSBJU2hlbGxGb2xkZXJfR2V0RGlzcGxheU5hbWVPZiggCisgIAlMUFNIRUxMRk9MREVSIHRoaXMsCisgICAgTFBDSVRFTUlETElTVCBwaWRsLCAKKyAgICBEV09SRCBkd0ZsYWdzLCAKKyAgICBMUFNUUlJFVCBscE5hbWUpCit7IENIQVIgc3pUZXh0W01BWF9QQVRIXTsKKyAgaW50ICAgY2NoT2xlU3RyOworICBMUElURU1JRExJU1QgICBwaWRsVGVtcDsKKworICBUUkFDRShzaGVsbCwiKCVwKS0+KHBpZGw9JXAsJWx4LCVwKVxuIix0aGlzLHBpZGwsZHdGbGFncyxscE5hbWUpOworICBzd2l0Y2goR0VUX1NIR0ROX1JFTEFUSU9OKGR3RmxhZ3MpKQorICB7IGNhc2UgU0hHRE5fTk9STUFMOgorICAgIC8vZ2V0IHRoZSBmdWxsIG5hbWUKKyAgICB0aGlzLT5wUGlkbE1nci0+bHB2dGJsLT5mbkdldFBpZGxQYXRoKHRoaXMtPnBQaWRsTWdyLCBwaWRsLCBzelRleHQsIHNpemVvZihzelRleHQpKTsKKy8qICBGSVhNRSBpZiB0aGUgdGV4dCBpcyBOVUxMIGFuZCB0aGlzIGlzIGEgdmFsdWUsIHRoZW4gaXMgc29tZXRoaW5nIHdyb25nKi8KKy8qICBpZighKnN6VGV4dCAmJiB0aGlzLT5wUGlkbE1nci0+bHB2dGJsLT5mbklzVmFsdWUodGhpcy0+cFBpZGxNZ3IsIHRoaXMtPnBQaWRsTWdyLT5scHZ0YmwtPmZuR2V0TGFzdEl0ZW0odGhpcy0+cFBpZGxNZ3IsIHBpZGwpKSkKKyAgICB7IGRvX3NvbWV0aGluZygpCisgICAgfSovICAKKyAgICBicmVhazsKKworICAgIGNhc2UgU0hHRE5fSU5GT0xERVI6CisgICAgICBwaWRsVGVtcCA9IHRoaXMtPnBQaWRsTWdyLT5scHZ0YmwtPmZuR2V0TGFzdEl0ZW0odGhpcy0+cFBpZGxNZ3IscGlkbCk7CisgICAgICAvL2dldCB0aGUgcmVsYXRpdmUgbmFtZQorICAgICAgdGhpcy0+cFBpZGxNZ3ItPmxwdnRibC0+Zm5HZXRJdGVtVGV4dCh0aGlzLT5wUGlkbE1nciwgcGlkbFRlbXAsIHN6VGV4dCwgc2l6ZW9mKHN6VGV4dCkpOworLyogICAgRklYTUUgaWYgdGhlIHRleHQgaXMgTlVMTCBhbmQgdGhpcyBpcyBhIHZhbHVlLCB0aGVuIGlzIHNvbWV0aGluZyB3cm9uZyovCisgICAgICBpZighKnN6VGV4dCAmJiB0aGlzLT5wUGlkbE1nci0+bHB2dGJsLT5mbklzVmFsdWUodGhpcy0+cFBpZGxNZ3IscGlkbFRlbXApKQorLyogICAgeyBkb19zb21ldGhpbmcoKQorICAgICAgfSovICAgCisgICAgIGJyZWFrOworICAgZGVmYXVsdDogICAgcmV0dXJuIEVfSU5WQUxJREFSRzsKKyAgfQorCisgIC8vZ2V0IHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyByZXF1aXJlZAorICBjY2hPbGVTdHIgPSBzdHJsZW4oc3pUZXh0KSArIDE7CisKKyAgVFJBQ0Uoc2hlbGwsIi0tICglcCktPiglcylcbiIsdGhpcyxzelRleHQpOworICAvL2FsbG9jYXRlIHRoZSB3aWRlIGNoYXJhY3RlciBzdHJpbmcKKyAgbHBOYW1lLT51LnBPbGVTdHIgPSAoTFBXU1RSKUhlYXBBbGxvYyhHZXRQcm9jZXNzSGVhcCgpLDAsY2NoT2xlU3RyICogc2l6ZW9mKFdDSEFSKSk7CisKKyAgaWYoIShscE5hbWUtPnUucE9sZVN0cikpCisgIHsgIHJldHVybiBFX09VVE9GTUVNT1JZOworCX0KKyAgbHBOYW1lLT51VHlwZSA9IFNUUlJFVF9XU1RSOworICBMb2NhbFRvV2lkZUNoYXIzMihscE5hbWUtPnUucE9sZVN0ciwgc3pUZXh0LCBjY2hPbGVTdHIpOworICByZXR1cm4gU19PSzsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBJU2hlbGxGb2xkZXJfU2V0TmFtZU9mCisqLworc3RhdGljIEhSRVNVTFQgV0lOQVBJIElTaGVsbEZvbGRlcl9TZXROYW1lT2YoCisgIAlMUFNIRUxMRk9MREVSIHRoaXMsCisJCUhXTkQzMiBod25kT3duZXIsIAorICAgIExQQ0lURU1JRExJU1QgcGlkbCwgCisgICAgTFBDT0xFU1RSMzIgbHBOYW1lLCAKKyAgICBEV09SRCBkdywgCisgICAgTFBJVEVNSURMSVNUICpwUGlkbE91dCkKK3sgIEZJWE1FKHNoZWxsLCIoJXApLT4oJXUscGlkbD0lcCwlcywlbHUsJXApLHN0dWIhXG4iLAorCSAgdGhpcyxod25kT3duZXIscGlkbCxkZWJ1Z3N0cl93KGxwTmFtZSksZHcscFBpZGxPdXQpOworCSByZXR1cm4gRV9OT1RJTVBMOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoJICBJU2hlbGxMaW5rX1ZUYWJsZQorKi8KIHN0YXRpYyBzdHJ1Y3QgSVNoZWxsTGlua19WVGFibGUgc2x2dCA9IHsKICAgICAodm9pZCAqKTEsCiAgICAgKHZvaWQgKikyLApAQCAtMjE1LDExICs5NTAsNzI4IEBACiAgICAgKHZvaWQgKikyMQogfTsKIAotTFBTSEVMTExJTksgSVNoZWxsTGlua19Db25zdHJ1Y3RvcigpIHsKLQlMUFNIRUxMTElOSyBzbDsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoJICBJU2hlbGxMaW5rX0NvbnN0cnVjdG9yCisgKi8KK0xQU0hFTExMSU5LIElTaGVsbExpbmtfQ29uc3RydWN0b3IoKSAKK3sJTFBTSEVMTExJTksgc2w7CiAKIAlzbCA9IChMUFNIRUxMTElOSylIZWFwQWxsb2MoR2V0UHJvY2Vzc0hlYXAoKSwwLHNpemVvZihJU2hlbGxMaW5rKSk7CiAJc2wtPnJlZiA9IDE7CiAJc2wtPmxwdnRibCA9ICZzbHZ0OworCVRSQUNFKHNoZWxsLCIoJXApLT4oKVxuIixzbCk7CiAJcmV0dXJuIHNsOwogfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoJICBJTlRFUk5BTCBDTEFTUyBwaWRsbWdyCisqLworTFBJVEVNSURMSVNUIFBpZGxNZ3JfQ3JlYXRlRGVza3RvcChMUFBJRExNR1IpOworTFBJVEVNSURMSVNUIFBpZGxNZ3JfQ3JlYXRlRHJpdmUoTFBQSURMTUdSLExQQ1NUUik7CitMUElURU1JRExJU1QgUGlkbE1ncl9DcmVhdGVGb2xkZXIoTFBQSURMTUdSLExQQ1NUUik7CitMUElURU1JRExJU1QgUGlkbE1ncl9DcmVhdGVWYWx1ZShMUFBJRExNR1IsTFBDU1RSKTsKK3ZvaWQgUGlkbE1ncl9EZWxldGUoTFBQSURMTUdSLExQSVRFTUlETElTVCk7CitMUElURU1JRExJU1QgUGlkbE1ncl9HZXROZXh0SXRlbShMUFBJRExNR1IsTFBJVEVNSURMSVNUKTsKK0xQSVRFTUlETElTVCBQaWRsTWdyX0NvcHkoTFBQSURMTUdSLExQSVRFTUlETElTVCk7CitVSU5UMTYgUGlkbE1ncl9HZXRTaXplKExQUElETE1HUixMUElURU1JRExJU1QpOworQk9PTDMyIFBpZGxNZ3JfR2V0RGVza3RvcChMUFBJRExNR1IsTFBDSVRFTUlETElTVCxMUFNUUik7CitCT09MMzIgUGlkbE1ncl9HZXREcml2ZShMUFBJRExNR1IsTFBDSVRFTUlETElTVCxMUFNUUixVSU5UMTYpOworTFBJVEVNSURMSVNUIFBpZGxNZ3JfR2V0TGFzdEl0ZW0oTFBQSURMTUdSLExQQ0lURU1JRExJU1QpOworRFdPUkQgUGlkbE1ncl9HZXRJdGVtVGV4dChMUFBJRExNR1IsTFBDSVRFTUlETElTVCxMUFNUUixVSU5UMTYpOworQk9PTDMyIFBpZGxNZ3JfSXNEZXNrdG9wKExQUElETE1HUixMUENJVEVNSURMSVNUKTsKK0JPT0wzMiBQaWRsTWdyX0lzRHJpdmUoTFBQSURMTUdSLExQQ0lURU1JRExJU1QpOworQk9PTDMyIFBpZGxNZ3JfSXNGb2xkZXIoTFBQSURMTUdSLExQQ0lURU1JRExJU1QpOworQk9PTDMyIFBpZGxNZ3JfSXNWYWx1ZShMUFBJRExNR1IsTFBDSVRFTUlETElTVCk7CitCT09MMzIgUGlkbE1ncl9IYXNGb2xkZXJzKExQUElETE1HUixMUFNUUixMUENJVEVNSURMSVNUKTsKK0RXT1JEIFBpZGxNZ3JfR2V0Rm9sZGVyVGV4dChMUFBJRExNR1IsTFBDSVRFTUlETElTVCxMUFNUUixEV09SRCk7CitEV09SRCBQaWRsTWdyX0dldFZhbHVlVGV4dChMUFBJRExNR1IsTFBDSVRFTUlETElTVCxMUFNUUixEV09SRCk7CitCT09MMzIgUGlkbE1ncl9HZXRWYWx1ZVR5cGUoTFBQSURMTUdSLExQQ0lURU1JRExJU1QsTFBDSVRFTUlETElTVCxMUERXT1JEKTsKK0RXT1JEIFBpZGxNZ3JfR2V0RGF0YVRleHQoTFBQSURMTUdSLExQQ0lURU1JRExJU1QsTFBDSVRFTUlETElTVCxMUFNUUixEV09SRCk7CitEV09SRCBQaWRsTWdyX0dldFBpZGxQYXRoKExQUElETE1HUixMUENJVEVNSURMSVNULExQU1RSLERXT1JEKTsKK0xQSVRFTUlETElTVCBQaWRsTWdyX0NvbmNhdGVuYXRlKExQUElETE1HUixMUElURU1JRExJU1QsTFBJVEVNSURMSVNUKTsKK0xQSVRFTUlETElTVCBQaWRsTWdyX0NyZWF0ZShMUFBJRExNR1IsUElETFRZUEUsTFBWT0lELFVJTlQxNik7CitEV09SRCBQaWRsTWdyX0dldERhdGEoTFBQSURMTUdSLFBJRExUWVBFLExQQ0lURU1JRExJU1QsTFBWT0lELFVJTlQxNik7CitMUFBJRExEQVRBIFBpZGxNZ3JfR2V0RGF0YVBvaW50ZXIoTFBQSURMTUdSLExQQ0lURU1JRExJU1QpOworQk9PTDMyIFBpZGxNZ3JfU2VwYXJhdGVQYXRoQW5kVmFsdWUoTFBQSURMTUdSLExQSVRFTUlETElTVCxMUElURU1JRExJU1QqLExQSVRFTUlETElTVCopOworCitzdGF0aWMgc3RydWN0IFBpZGxNZ3JfVlRhYmxlIHBtZ3J2dCA9IHsKKyAgICBQaWRsTWdyX0NyZWF0ZURlc2t0b3AsCisgICAgUGlkbE1ncl9DcmVhdGVEcml2ZSwKKyAgICBQaWRsTWdyX0NyZWF0ZUZvbGRlciwKKyAgICBQaWRsTWdyX0NyZWF0ZVZhbHVlLAorCQlQaWRsTWdyX0RlbGV0ZSwKKyAgICBQaWRsTWdyX0dldE5leHRJdGVtLAorICAgIFBpZGxNZ3JfQ29weSwKKyAgICBQaWRsTWdyX0dldFNpemUsCisgICAgUGlkbE1ncl9HZXREZXNrdG9wLAorCQlQaWRsTWdyX0dldERyaXZlLAorICAgIFBpZGxNZ3JfR2V0TGFzdEl0ZW0sCisgICAgUGlkbE1ncl9HZXRJdGVtVGV4dCwKKyAgICBQaWRsTWdyX0lzRGVza3RvcCwKKyAgICBQaWRsTWdyX0lzRHJpdmUsCisgICAgUGlkbE1ncl9Jc0ZvbGRlciwKKyAgICBQaWRsTWdyX0lzVmFsdWUsCisgICAgUGlkbE1ncl9IYXNGb2xkZXJzLAorICAgIFBpZGxNZ3JfR2V0Rm9sZGVyVGV4dCwKKyAgICBQaWRsTWdyX0dldFZhbHVlVGV4dCwKKyAgICBQaWRsTWdyX0dldFZhbHVlVHlwZSwKKyAgICBQaWRsTWdyX0dldERhdGFUZXh0LAorICAgIFBpZGxNZ3JfR2V0UGlkbFBhdGgsCisJCVBpZGxNZ3JfQ29uY2F0ZW5hdGUsCisgICAgUGlkbE1ncl9DcmVhdGUsCisgICAgUGlkbE1ncl9HZXREYXRhLAorICAgIFBpZGxNZ3JfR2V0RGF0YVBvaW50ZXIsCisgICAgUGlkbE1ncl9TZXBhcmF0ZVBhdGhBbmRWYWx1ZQorfTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoJICBQaWRsTWdyX0NvbnN0cnVjdG9yCisgKi8KK0xQUElETE1HUiBQaWRsTWdyX0NvbnN0cnVjdG9yKCkgCit7CUxQUElETE1HUiBwbWdyOworCXBtZ3IgPSAoTFBQSURMTUdSKUhlYXBBbGxvYyhHZXRQcm9jZXNzSGVhcCgpLDAsc2l6ZW9mKHBpZGxtZ3IpKTsKKwlwbWdyLT5scHZ0YmwgPSAmcG1ncnZ0OworCVRSQUNFKHNoZWxsLCIoJXApLT4oKVxuIixwbWdyKTsKKyAgLyoqIEZJWE1FIERsbFJlZkNvdW50Kys7Ki8KKwlyZXR1cm4gcG1ncjsKK30KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoJICBQaWRsTWdyX0Rlc3RydWN0b3IKKyAqLwordm9pZCBQaWRsTWdyX0Rlc3RydWN0b3IoTFBQSURMTUdSIHRoaXMpIAorewlIZWFwRnJlZShHZXRQcm9jZXNzSGVhcCgpLDAsdGhpcyk7CisgCVRSQUNFKHNoZWxsLCIoJXApLT4oKVxuIix0aGlzKTsKKyAgLyoqIEZJWE1FIERsbFJlZkNvdW50LS07Ki8KK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgUGlkbE1ncl9DcmVhdGVEZXNrdG9wKCkKKyAqICBQaWRsTWdyX0NyZWF0ZURyaXZlKCkKKyAqICBQaWRsTWdyX0NyZWF0ZUZvbGRlcigpIAorICogIFBpZGxNZ3JfQ3JlYXRlVmFsdWUoKQorICovCitMUElURU1JRExJU1QgUGlkbE1ncl9DcmVhdGVEZXNrdG9wKExQUElETE1HUiB0aGlzKQoreyBUUkFDRShzaGVsbCwiKCVwKS0+KClcbiIsdGhpcyk7CisgICAgcmV0dXJuIFBpZGxNZ3JfQ3JlYXRlKHRoaXMsUFRfREVTS1RPUCwgKHZvaWQgKikiRGVza3RvcCIsIHNpemVvZigiRGVza3RvcCIpKTsKK30KK0xQSVRFTUlETElTVCBQaWRsTWdyX0NyZWF0ZURyaXZlKExQUElETE1HUiB0aGlzLCBMUENTVFIgbHBzek5ldykKK3sgVFJBQ0Uoc2hlbGwsIiglcCktPiglcylcbiIsdGhpcyxscHN6TmV3KTsKKyAgcmV0dXJuIFBpZGxNZ3JfQ3JlYXRlKHRoaXMsUFRfRFJJVkUsIChMUFZPSUQpbHBzek5ldyAsIHN0cmxlbihscHN6TmV3KSsxKTsKK30KK0xQSVRFTUlETElTVCBQaWRsTWdyX0NyZWF0ZUZvbGRlcihMUFBJRExNR1IgdGhpcywgTFBDU1RSIGxwc3pOZXcpCit7IFRSQUNFKHNoZWxsLCIoJXApLT4oJXMpXG4iLHRoaXMsbHBzek5ldyk7CisgIHJldHVybiBQaWRsTWdyX0NyZWF0ZSh0aGlzLFBUX0ZPTERFUiwgKExQVk9JRClscHN6TmV3LCBzdHJsZW4obHBzek5ldykrMSk7Cit9CitMUElURU1JRExJU1QgUGlkbE1ncl9DcmVhdGVWYWx1ZShMUFBJRExNR1IgdGhpcyxMUENTVFIgbHBzek5ldykKK3sgVFJBQ0Uoc2hlbGwsIiglcCktPiglcylcbiIsdGhpcyxscHN6TmV3KTsKKyAgcmV0dXJuIFBpZGxNZ3JfQ3JlYXRlKHRoaXMsUFRfVkFMVUUsIChMUFZPSUQpbHBzek5ldywgc3RybGVuKGxwc3pOZXcpKzEpOworfQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgUGlkbE1ncl9EZWxldGUoKQorICogIERlbGV0ZXMgYSBQSURMCisgKi8KK3ZvaWQgUGlkbE1ncl9EZWxldGUoTFBQSURMTUdSIHRoaXMsTFBJVEVNSURMSVNUIHBpZGwpCit7IFRSQUNFKHNoZWxsLCIoJXApLT4ocGlkbD0lcClcbiIsdGhpcyxwaWRsKTsKKyAgSGVhcEZyZWUoR2V0UHJvY2Vzc0hlYXAoKSwwLHBpZGwpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBQaWRsTWdyX0dldE5leHRJdGVtKCkKKyAqLworTFBJVEVNSURMSVNUIFBpZGxNZ3JfR2V0TmV4dEl0ZW0oTFBQSURMTUdSIHRoaXMsIExQSVRFTUlETElTVCBwaWRsKQoreyBUUkFDRShzaGVsbCwiKCVwKS0+KHBpZGw9JXApXG4iLHRoaXMscGlkbCk7CisgIGlmKHBpZGwpCisgIHsgIHJldHVybiAoTFBJVEVNSURMSVNUKShMUEJZVEUpKCgoTFBCWVRFKXBpZGwpICsgcGlkbC0+bWtpZC5jYik7CisJfQorICBlbHNlCisgIHsgIHJldHVybiAoTlVMTCk7CisJfQorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBQaWRsTWdyX0NvcHkoKQorICovCitMUElURU1JRExJU1QgUGlkbE1ncl9Db3B5KExQUElETE1HUiB0aGlzLCBMUElURU1JRExJU1QgcGlkbFNvdXJjZSkKK3sgTFBJVEVNSURMSVNUIHBpZGxUYXJnZXQgPSBOVUxMOworICBVSU5UMTYgY2JTb3VyY2UgPSAwOworCisJVFJBQ0Uoc2hlbGwsIi0tICglcCktPihwaWRsPSVwKVxuIix0aGlzLHBpZGxTb3VyY2UpOworCisgIGlmKE5VTEwgPT0gcGlkbFNvdXJjZSkKKyAJeyAgRVJSKHNoZWxsLCItLSAoJXApLT4oJXApXG4iLHRoaXMscGlkbFNvdXJjZSk7CisgICAgIHJldHVybiAoTlVMTCk7CisJfQorCisgIGNiU291cmNlID0gUGlkbE1ncl9HZXRTaXplKHRoaXMsIHBpZGxTb3VyY2UpOworICBwaWRsVGFyZ2V0ID0gKExQSVRFTUlETElTVClIZWFwQWxsb2MoR2V0UHJvY2Vzc0hlYXAoKSwwLGNiU291cmNlKTsKKyAgaWYoIXBpZGxUYXJnZXQpCisgIHsgcmV0dXJuIChOVUxMKTsKKwl9CisKKyAgbWVtY3B5KHBpZGxUYXJnZXQsIHBpZGxTb3VyY2UsIGNiU291cmNlKTsKKworCVRSQUNFKHNoZWxsLCItLSAoJXApLT4ocGlkbD0lcCB0byBuZXcgcGlkbD0lcClcbiIsdGhpcyxwaWRsU291cmNlLHBpZGxUYXJnZXQpOworICByZXR1cm4gcGlkbFRhcmdldDsKK30KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIFBpZGxNZ3JfR2V0U2l6ZSgpCisgKiAgY2FsY3VsYXRlcyB0aGUgc2l6ZSBvZiB0aGUgY29tcGxldGUgcGlkbAorICovCitVSU5UMTYgUGlkbE1ncl9HZXRTaXplKExQUElETE1HUiB0aGlzLCBMUElURU1JRExJU1QgcGlkbCkKK3sgVUlOVDE2IGNiVG90YWwgPSAwOworICBMUElURU1JRExJU1QgcGlkbFRlbXAgPSBwaWRsOworCisgIFRSQUNFKHNoZWxsLCIoJXApLT4ocGlkbD0lcClcbiIsdGhpcyxwaWRsKTsKKyAgaWYocGlkbFRlbXApCisgIHsgd2hpbGUocGlkbFRlbXAtPm1raWQuY2IpCisgICAgeyBjYlRvdGFsICs9IHBpZGxUZW1wLT5ta2lkLmNiOworICAgICAgcGlkbFRlbXAgPSBQaWRsTWdyX0dldE5leHRJdGVtKHRoaXMsIHBpZGxUZW1wKTsKKyAgICB9ICAKKyAgICAvL2FkZCB0aGUgc2l6ZSBvZiB0aGUgTlVMTCB0ZXJtaW5hdGluZyBJVEVNSURMSVNUCisgICAgY2JUb3RhbCArPSBzaXplb2YoSVRFTUlETElTVCk7CisgIH0KKwlUUkFDRShzaGVsbCwiLS0gc2l6ZSAldVxuIixjYlRvdGFsKTsKKyAgcmV0dXJuIChjYlRvdGFsKTsKK30KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIFBpZGxNZ3JfR2V0RGVza3RvcCgpCisgKiAKKyAqICBGSVhNRTogcXVpY2sgaGFjaworICovCitCT09MMzIgUGlkbE1ncl9HZXREZXNrdG9wKExQUElETE1HUiB0aGlzLExQQ0lURU1JRExJU1QgcGlkbCxMUFNUUiBwT3V0KQoreyBUUkFDRShzaGVsbCwiKCVwKS0+KCVwICVwKVxuIix0aGlzLHBpZGwscE91dCk7CisgIHJldHVybiAoQk9PTDMyKVBpZGxNZ3JfR2V0RGF0YSh0aGlzLFBUX0RFU0tUT1AsIHBpZGwsIChMUFZPSUQpcE91dCwgMjU1KTsKK30KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIFBpZGxNZ3JfR2V0RHJpdmUoKQorICoKKyAqICBGSVhNRTogcXVpY2sgaGFjaworICovCitCT09MMzIgUGlkbE1ncl9HZXREcml2ZShMUFBJRExNR1IgdGhpcyxMUENJVEVNSURMSVNUIHBpZGwsTFBTVFIgcE91dCwgVUlOVDE2IHVTaXplKQoreyBMUElURU1JRExJU1QgICBwaWRsVGVtcD1OVUxMOworCisgIFRSQUNFKHNoZWxsLCIoJXApLT4oJXAsJXAsJXUpXG4iLHRoaXMscGlkbCxwT3V0LHVTaXplKTsKKyAgaWYoUGlkbE1ncl9Jc0Rlc2t0b3AodGhpcyxwaWRsKSkKKyAgeyBwaWRsVGVtcCA9IFBpZGxNZ3JfR2V0TmV4dEl0ZW0odGhpcyxwaWRsKTsKKwl9CisJZWxzZSBpZiAoUGlkbE1ncl9Jc0RyaXZlKHRoaXMscGlkbCkpCisgIHsgcGlkbFRlbXAgPSBQaWRsTWdyX0dldE5leHRJdGVtKHRoaXMscGlkbCk7CSAgCQorICAgIHJldHVybiAoQk9PTDMyKVBpZGxNZ3JfR2V0RGF0YSh0aGlzLFBUX0RSSVZFLCBwaWRsVGVtcCwgKExQVk9JRClwT3V0LCB1U2l6ZSk7CisJfQorCXJldHVybiBGQUxTRTsKK30KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIFBpZGxNZ3JfR2V0TGFzdEl0ZW0oKQorICogIEdldHMgdGhlIGxhc3QgaXRlbSBpbiB0aGUgbGlzdAorICovCitMUElURU1JRExJU1QgUGlkbE1ncl9HZXRMYXN0SXRlbShMUFBJRExNR1IgdGhpcyxMUENJVEVNSURMSVNUIHBpZGwpCit7IExQSVRFTUlETElTVCAgIHBpZGxMYXN0ID0gTlVMTDsKKworICBUUkFDRShzaGVsbCwiKCVwKS0+KHBpZGw9JXApXG4iLHRoaXMscGlkbCk7CisKKyAgaWYocGlkbCkKKyAgeyB3aGlsZShwaWRsLT5ta2lkLmNiKQorICAgIHsgcGlkbExhc3QgPSAoTFBJVEVNSURMSVNUKXBpZGw7CisgICAgICBwaWRsID0gUGlkbE1ncl9HZXROZXh0SXRlbSh0aGlzLHBpZGwpOworICAgIH0gIAorICB9CisgIHJldHVybiBwaWRsTGFzdDsKK30KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIFBpZGxNZ3JfR2V0SXRlbVRleHQoKQorICogIEdldHMgdGhlIHRleHQgZm9yIG9ubHkgdGhpcyBpdGVtCisgKi8KK0RXT1JEIFBpZGxNZ3JfR2V0SXRlbVRleHQoTFBQSURMTUdSIHRoaXMsTFBDSVRFTUlETElTVCBwaWRsLCBMUFNUUiBscHN6VGV4dCwgVUlOVDE2IHVTaXplKQoreyBUUkFDRShzaGVsbCwiKCVwKS0+KHBpZGw9JXAgJXAgJXgpXG4iLHRoaXMscGlkbCxscHN6VGV4dCx1U2l6ZSk7CisgIGlmIChQaWRsTWdyX0lzRGVza3RvcCh0aGlzLCBwaWRsKSkKKyAgeyByZXR1cm4gUGlkbE1ncl9HZXREYXRhKHRoaXMsUFRfREVTS1RPUCwgcGlkbCwgKExQVk9JRClscHN6VGV4dCwgdVNpemUpOworCX0KKwlpZiAoUGlkbE1ncl9Jc0RyaXZlKHRoaXMsIHBpZGwpKQorCXsgcmV0dXJuIFBpZGxNZ3JfR2V0RGF0YSh0aGlzLFBUX0RSSVZFLCBwaWRsLCAoTFBWT0lEKWxwc3pUZXh0LCB1U2l6ZSk7CisJfQorCXJldHVybiBQaWRsTWdyX0dldERhdGEodGhpcyxQVF9URVhULCBwaWRsLCAoTFBWT0lEKWxwc3pUZXh0LCB1U2l6ZSk7CQorfQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgUGlkbE1ncl9Jc0Rlc2t0b3AoKQorICogIFBpZGxNZ3JfSXNEcml2ZSgpCisgKiAgUGlkbE1ncl9Jc0ZvbGRlcigpCisgKiAgUGlkbE1ncl9Jc1ZhbHVlKCkKKyovCitCT09MMzIgUGlkbE1ncl9Jc0Rlc2t0b3AoTFBQSURMTUdSIHRoaXMsTFBDSVRFTUlETElTVCBwaWRsKQoreyBMUFBJRExEQVRBICBwRGF0YTsKKyAgVFJBQ0Uoc2hlbGwsIiVwLT4oJXApXG4iLHRoaXMscGlkbCk7CisgIHBEYXRhID0gUGlkbE1ncl9HZXREYXRhUG9pbnRlcih0aGlzLHBpZGwpOworICByZXR1cm4gKFBUX0RFU0tUT1AgPT0gcERhdGEtPnR5cGUpOworfQorCitCT09MMzIgUGlkbE1ncl9Jc0RyaXZlKExQUElETE1HUiB0aGlzLExQQ0lURU1JRExJU1QgcGlkbCkKK3sgTFBQSURMREFUQSAgcERhdGE7CisgIFRSQUNFKHNoZWxsLCIlcC0+KCVwKVxuIix0aGlzLHBpZGwpOworICBwRGF0YSA9IFBpZGxNZ3JfR2V0RGF0YVBvaW50ZXIodGhpcyxwaWRsKTsKKyAgcmV0dXJuIChQVF9EUklWRSA9PSBwRGF0YS0+dHlwZSk7Cit9CisKK0JPT0wzMiBQaWRsTWdyX0lzRm9sZGVyKExQUElETE1HUiB0aGlzLExQQ0lURU1JRExJU1QgcGlkbCkKK3sgTFBQSURMREFUQSAgcERhdGE7CisgIFRSQUNFKHNoZWxsLCIlcC0+KCVwKVxuIix0aGlzLHBpZGwpOworICBwRGF0YSA9IFBpZGxNZ3JfR2V0RGF0YVBvaW50ZXIodGhpcyxwaWRsKTsKKyAgcmV0dXJuIChQVF9GT0xERVIgPT0gcERhdGEtPnR5cGUpOworfQorCitCT09MMzIgUGlkbE1ncl9Jc1ZhbHVlKExQUElETE1HUiB0aGlzLExQQ0lURU1JRExJU1QgcGlkbCkKK3sgTFBQSURMREFUQSAgcERhdGE7CisgIFRSQUNFKHNoZWxsLCIlcC0+KCVwKVxuIix0aGlzLHBpZGwpOworICBwRGF0YSA9IFBpZGxNZ3JfR2V0RGF0YVBvaW50ZXIodGhpcyxwaWRsKTsKKyAgcmV0dXJuIChQVF9WQUxVRSA9PSBwRGF0YS0+dHlwZSk7Cit9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFBpZGxNZ3JfSGFzRm9sZGVycygpCisgKiBmaXhtZTogcXVpY2sgaGFjaworICovCitCT09MMzIgUGlkbE1ncl9IYXNGb2xkZXJzKExQUElETE1HUiB0aGlzLCBMUFNUUiBwc3pQYXRoLCBMUENJVEVNSURMSVNUIHBpZGwpCit7IEJPT0wzMiBiUmVzdWx0PSBGQUxTRTsKKyAgV0lOMzJfRklORF9EQVRBMzJBIHN0ZmZpbGU7CQorICBIQU5ETEUzMiBoRmlsZTsKKworICBUUkFDRSAoc2hlbGwsIiglcCktPiVwICVwXG4iLHRoaXMsIHBzelBhdGgsIHBpZGwpOworCQorICBoRmlsZSA9IEZpbmRGaXJzdEZpbGUzMkEocHN6UGF0aCwmc3RmZmlsZSk7CisgIGRvCisgIHsgaWYgKCEgKHN0ZmZpbGUuZHdGaWxlQXR0cmlidXRlcyAmIEZJTEVfQVRUUklCVVRFX0RJUkVDVE9SWSkgKQorICAgIHsgIGJSZXN1bHQ9IFRSVUU7CisJCX0KKyAgfSB3aGlsZSggRmluZE5leHRGaWxlMzJBKGhGaWxlLCZzdGZmaWxlKSk7CisgIEZpbmRDbG9zZTMyIChoRmlsZSk7CisJCisJcmV0dXJuIGJSZXN1bHQ7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgUGlkbE1ncl9HZXRGb2xkZXJUZXh0KCkKKyAqICBDcmVhdGVzIGEgUGF0aCBzdHJpbmcgZnJvbSBhIFBJREwsIGZpbHRlcmluZyBvdXQgdGhlIERlc2t0b3AgYW5kIHRoZSBEcml2ZQorICogIHZhbHVlLCBpZiBlaXRoZXIgaXMgcHJlc2VudC4KKyAqLworRFdPUkQgUGlkbE1ncl9HZXRGb2xkZXJUZXh0KExQUElETE1HUiB0aGlzLExQQ0lURU1JRExJU1QgcGlkbCwKKyAgIExQU1RSIGxwc3pQYXRoLCBEV09SRCBkd1NpemUpCit7IExQSVRFTUlETElTVCAgIHBpZGxUZW1wOworICBEV09SRCAgICAgICAgICBkd0NvcGllZCA9IDA7CisgCisgIFRSQUNFKHNoZWxsLCIoJXApLT4oJXApXG4iLHRoaXMscGlkbCk7CisgCisgIGlmKCFwaWRsKQorICB7IHJldHVybiAwOworCX0KKworICBpZihQaWRsTWdyX0lzRGVza3RvcCh0aGlzLHBpZGwpKQorICB7IHBpZGxUZW1wID0gUGlkbE1ncl9HZXROZXh0SXRlbSh0aGlzLHBpZGwpOworCX0KKwllbHNlIGlmIChQaWRsTWdyX0lzRm9sZGVyKHRoaXMscGlkbCkpCisgIHsgcGlkbFRlbXAgPSBQaWRsTWdyX0dldE5leHRJdGVtKHRoaXMscGlkbCk7CSAgCQorCX0KKyAgZWxzZQorICB7IHBpZGxUZW1wID0gKExQSVRFTUlETElTVClwaWRsOworCX0KKworICAvL2lmIHRoaXMgaXMgTlVMTCwgcmV0dXJuIHRoZSByZXF1aXJlZCBzaXplIG9mIHRoZSBidWZmZXIKKyAgaWYoIWxwc3pQYXRoKQorICB7IHdoaWxlKHBpZGxUZW1wLT5ta2lkLmNiKQorICAgIHsgTFBQSURMREFUQSAgcERhdGEgPSBQaWRsTWdyX0dldERhdGFQb2ludGVyKHRoaXMscGlkbFRlbXApOworICAgICAgCisgICAgICAvL2FkZCB0aGUgbGVuZ3RoIG9mIHRoaXMgaXRlbSBwbHVzIG9uZSBmb3IgdGhlIGJhY2tzbGFzaAorICAgICAgZHdDb3BpZWQgKz0gc3RybGVuKHBEYXRhLT5zelRleHQpICsgMTsgIC8qIGZpeG1lIHBEYXRhLT5zelRleHQgaXMgbm90IGV2ZXJ5IHRpbWUgYSBzdHJpbmcqLworCisgICAgICBwaWRsVGVtcCA9IFBpZGxNZ3JfR2V0TmV4dEl0ZW0odGhpcyxwaWRsVGVtcCk7CisgICAgfQorCisgICAgLy9hZGQgb25lIGZvciB0aGUgTlVMTCB0ZXJtaW5hdG9yCisgICAgcmV0dXJuIGR3Q29waWVkICsgMTsKKyAgfQorCisgICpscHN6UGF0aCA9IDA7CisKKyAgd2hpbGUocGlkbFRlbXAtPm1raWQuY2IgJiYgKGR3Q29waWVkIDwgZHdTaXplKSkKKyAgeyBMUFBJRExEQVRBICBwRGF0YSA9IFBpZGxNZ3JfR2V0RGF0YVBvaW50ZXIodGhpcyxwaWRsVGVtcCk7CisKKyAgICAvL2lmIHRoaXMgaXRlbSBpcyBhIHZhbHVlLCB0aGVuIHNraXAgaXQgYW5kIGZpbmlzaAorICAgIGlmKFBUX1ZBTFVFID09IHBEYXRhLT50eXBlKQorICAgIHsgYnJlYWs7CisJCX0KKyAgIAorICAgIHN0cmNhdChscHN6UGF0aCwgcERhdGEtPnN6VGV4dCk7CisgICAgc3RyY2F0KGxwc3pQYXRoLCAiXFwiKTsKKworICAgIGR3Q29waWVkICs9IHN0cmxlbihwRGF0YS0+c3pUZXh0KSArIDE7CisKKyAgICBwaWRsVGVtcCA9IFBpZGxNZ3JfR2V0TmV4dEl0ZW0odGhpcyxwaWRsVGVtcCk7CisgIH0KKworICAvL3JlbW92ZSB0aGUgbGFzdCBiYWNrc2xhc2ggaWYgbmVjZXNzYXJ5CisgIGlmKGR3Q29waWVkKQorICB7IGlmKCoobHBzelBhdGggKyBzdHJsZW4obHBzelBhdGgpIC0gMSkgPT0gJ1xcJykKKyAgICB7ICoobHBzelBhdGggKyBzdHJsZW4obHBzelBhdGgpIC0gMSkgPSAwOworICAgICAgZHdDb3BpZWQtLTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIGR3Q29waWVkOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIFBpZGxNZ3JfR2V0VmFsdWVUZXh0KCkKKyAqICBHZXRzIHRoZSB0ZXh0IGZvciB0aGUgbGFzdCBpdGVtIGluIHRoZSBsaXN0CisgKi8KK0RXT1JEIFBpZGxNZ3JfR2V0VmFsdWVUZXh0KExQUElETE1HUiB0aGlzLAorICAgIExQQ0lURU1JRExJU1QgcGlkbCwgTFBTVFIgbHBzelZhbHVlLCBEV09SRCBkd1NpemUpCit7IExQSVRFTUlETElTVCAgcGlkbFRlbXA9cGlkbDsKKyAgQ0hBUiAgICAgICAgICBzelRleHRbTUFYX1BBVEhdOworCisgIFRSQUNFKHNoZWxsLCIoJXApLT4ocGlkbD0lcCAlcCAlbHgpXG4iLHRoaXMscGlkbCxscHN6VmFsdWUsZHdTaXplKTsKKworICBpZighcGlkbCkKKyAgeyByZXR1cm4gMDsKKwl9CisJCQorICB3aGlsZShwaWRsVGVtcC0+bWtpZC5jYiAmJiAhUGlkbE1ncl9Jc1ZhbHVlKHRoaXMscGlkbFRlbXApKQorICB7IHBpZGxUZW1wID0gUGlkbE1ncl9HZXROZXh0SXRlbSh0aGlzLHBpZGxUZW1wKTsKKyAgfQorCisgIGlmKCFwaWRsVGVtcC0+bWtpZC5jYikKKyAgeyByZXR1cm4gMDsKKwl9CisKKyAgUGlkbE1ncl9HZXRJdGVtVGV4dCh0aGlzLCBwaWRsVGVtcCwgc3pUZXh0LCBzaXplb2Yoc3pUZXh0KSk7CisKKyAgaWYoIWxwc3pWYWx1ZSkKKyAgeyByZXR1cm4gc3RybGVuKHN6VGV4dCkgKyAxOworICB9CisgIHN0cmNweShscHN6VmFsdWUsIHN6VGV4dCk7CisJVFJBQ0Uoc2hlbGwsIi0tICglcCktPihwaWRsPSVwICVwPSVzICVseClcbiIsdGhpcyxwaWRsLGxwc3pWYWx1ZSxscHN6VmFsdWUsZHdTaXplKTsKKyAgcmV0dXJuIHN0cmxlbihscHN6VmFsdWUpOworfQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgUGlkbE1ncl9HZXRWYWx1ZVR5cGUoKQorICovCitCT09MMzIgUGlkbE1ncl9HZXRWYWx1ZVR5cGUoIExQUElETE1HUiB0aGlzLAorIExQQ0lURU1JRExJU1QgcGlkbFBhdGgsIExQQ0lURU1JRExJU1QgcGlkbFZhbHVlLCBMUERXT1JEIHBkd1R5cGUpCit7IExQU1RSICAgIGxwc3pGb2xkZXIsCisgICAgICAgICAgIGxwc3pWYWx1ZU5hbWU7CisgIERXT1JEICAgIGR3TmFtZVNpemU7CisgCisgIEZJWE1FKHNoZWxsLCIoJXApLT4oJXAgJXAgJXApIHN0dWJcbiIsdGhpcyxwaWRsUGF0aCxwaWRsVmFsdWUscGR3VHlwZSk7CisJCisgIGlmKCFwaWRsUGF0aCkKKyAgeyByZXR1cm4gRkFMU0U7CisJfQorCisgIGlmKCFwaWRsVmFsdWUpCisgIHsgcmV0dXJuIEZBTFNFOworCX0KKworICBpZighcGR3VHlwZSkKKyAgeyByZXR1cm4gRkFMU0U7CisJfQorCisgIC8vZ2V0IHRoZSBEZXNrdG9wCisgIC8vUGlkbE1ncl9HZXREZXNrdG9wKHRoaXMscGlkbFBhdGgpOworCisgIC8qIGZpeG1lOiBhZGQgdGhlIGRyaXZlbGV0dGVyIGhlcmUqLworCQorICAvL2Fzc2VtYmxlIHRoZSBGb2xkZXIgc3RyaW5nCisgIGR3TmFtZVNpemUgPSBQaWRsTWdyX0dldEZvbGRlclRleHQodGhpcyxwaWRsUGF0aCwgTlVMTCwgMCk7CisgIGxwc3pGb2xkZXIgPSAoTFBTVFIpSGVhcEFsbG9jKEdldFByb2Nlc3NIZWFwKCksMCxkd05hbWVTaXplKTsKKyAgaWYoIWxwc3pGb2xkZXIpCisgIHsgIHJldHVybiBGQUxTRTsKKwl9CisgIFBpZGxNZ3JfR2V0Rm9sZGVyVGV4dCh0aGlzLHBpZGxQYXRoLCBscHN6Rm9sZGVyLCBkd05hbWVTaXplKTsKKworICAvL2Fzc2VtYmxlIHRoZSB2YWx1ZSBuYW1lCisgIGR3TmFtZVNpemUgPSBQaWRsTWdyX0dldFZhbHVlVGV4dCh0aGlzLHBpZGxWYWx1ZSwgTlVMTCwgMCk7CisgIGxwc3pWYWx1ZU5hbWUgPSAoTFBTVFIpSGVhcEFsbG9jKEdldFByb2Nlc3NIZWFwKCksMCxkd05hbWVTaXplKTsKKyAgaWYoIWxwc3pWYWx1ZU5hbWUpCisgIHsgSGVhcEZyZWUoR2V0UHJvY2Vzc0hlYXAoKSwwLGxwc3pGb2xkZXIpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorICBQaWRsTWdyX0dldFZhbHVlVGV4dCh0aGlzLHBpZGxWYWx1ZSwgbHBzelZhbHVlTmFtZSwgZHdOYW1lU2l6ZSk7CisKKyAgLyogZml4bWU6IHdlJ3ZlIGdvdCB0aGUgcGF0aCBub3cgZG8gc29tZXRoaW5nIHdpdGggaXQKKwkgIC1saWtlIGdldCB0aGUgZmlsZXR5cGUqLworCQorCXBkd1R5cGU9TlVMTDsKKwkKKyAgSGVhcEZyZWUoR2V0UHJvY2Vzc0hlYXAoKSwwLGxwc3pGb2xkZXIpOworICBIZWFwRnJlZShHZXRQcm9jZXNzSGVhcCgpLDAsbHBzelZhbHVlTmFtZSk7CisgIHJldHVybiBUUlVFOworfQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgUGlkbE1ncl9HZXREYXRhVGV4dCgpCisgKi8KK0RXT1JEIFBpZGxNZ3JfR2V0RGF0YVRleHQoIExQUElETE1HUiB0aGlzLAorIExQQ0lURU1JRExJU1QgcGlkbFBhdGgsIExQQ0lURU1JRExJU1QgcGlkbFZhbHVlLCBMUFNUUiBscHN6T3V0LCBEV09SRCBkd091dFNpemUpCit7IExQU1RSICAgIGxwc3pGb2xkZXIsCisgICAgICAgICAgIGxwc3pWYWx1ZU5hbWU7CisgIERXT1JEICAgIGR3TmFtZVNpemU7CisKKyAgRklYTUUoc2hlbGwsIiglcCktPihwaWRsPSVwIHBpZGw9JXApIHN0dWJcbiIsdGhpcyxwaWRsUGF0aCxwaWRsVmFsdWUpOworCisgIGlmKCFscHN6T3V0KQorICB7IHJldHVybiBGQUxTRTsKKwl9CisKKyAgaWYoIXBpZGxQYXRoKQorICB7IHJldHVybiBGQUxTRTsKKwl9CisKKyAgaWYoIXBpZGxWYWx1ZSkKKyAgeyByZXR1cm4gRkFMU0U7CisJfQorCisgIC8qIGZpeG1lOiBnZXQgdGhlIGRyaXZlbGV0dGVyKi8KKworICAvL2Fzc2VtYmxlIHRoZSBGb2xkZXIgc3RyaW5nCisgIGR3TmFtZVNpemUgPSBQaWRsTWdyX0dldEZvbGRlclRleHQodGhpcyxwaWRsUGF0aCwgTlVMTCwgMCk7CisgIGxwc3pGb2xkZXIgPSAoTFBTVFIpSGVhcEFsbG9jKEdldFByb2Nlc3NIZWFwKCksMCxkd05hbWVTaXplKTsKKyAgaWYoIWxwc3pGb2xkZXIpCisgIHsgIHJldHVybiBGQUxTRTsKKwl9CisgIFBpZGxNZ3JfR2V0Rm9sZGVyVGV4dCh0aGlzLHBpZGxQYXRoLCBscHN6Rm9sZGVyLCBkd05hbWVTaXplKTsKKworICAvL2Fzc2VtYmxlIHRoZSB2YWx1ZSBuYW1lCisgIGR3TmFtZVNpemUgPSBQaWRsTWdyX0dldFZhbHVlVGV4dCh0aGlzLHBpZGxWYWx1ZSwgTlVMTCwgMCk7CisgIGxwc3pWYWx1ZU5hbWUgPSAoTFBTVFIpSGVhcEFsbG9jKEdldFByb2Nlc3NIZWFwKCksMCxkd05hbWVTaXplKTsKKyAgaWYoIWxwc3pWYWx1ZU5hbWUpCisgIHsgSGVhcEZyZWUoR2V0UHJvY2Vzc0hlYXAoKSwwLGxwc3pGb2xkZXIpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorICBQaWRsTWdyX0dldFZhbHVlVGV4dCh0aGlzLHBpZGxWYWx1ZSwgbHBzelZhbHVlTmFtZSwgZHdOYW1lU2l6ZSk7CisKKyAgLyogZml4bWU6IHdlJ3ZlIGdvdCB0aGUgcGF0aCBub3cgZG8gc29tZXRoaW5nIHdpdGggaXQqLworCQorICBIZWFwRnJlZShHZXRQcm9jZXNzSGVhcCgpLDAsbHBzekZvbGRlcik7CisgIEhlYXBGcmVlKEdldFByb2Nlc3NIZWFwKCksMCxscHN6VmFsdWVOYW1lKTsKKworICBUUkFDRShzaGVsbCwiLS0gKCVwKS0+KCVwPSVzICVseClcbiIsdGhpcyxscHN6T3V0LGxwc3pPdXQsZHdPdXRTaXplKTsKKworCXJldHVybiBUUlVFOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgQ1BpZGxNZ3I6OkdldFBpZGxQYXRoKCkKKyAqICBDcmVhdGUgYSBzdHJpbmcgdGhhdCBpbmNsdWRlcyB0aGUgRHJpdmUgbmFtZSwgdGhlIGZvbGRlciB0ZXh0IGFuZCAKKyAqICB0aGUgdmFsdWUgdGV4dC4KKyAqLworRFdPUkQgUGlkbE1ncl9HZXRQaWRsUGF0aChMUFBJRExNR1IgdGhpcywKKyAgICBMUENJVEVNSURMSVNUIHBpZGwsIExQU1RSIGxwc3pPdXQsIERXT1JEIGR3T3V0U2l6ZSkKK3sgTFBTVFIgbHBzelRlbXA7CisgIFdPUkQJbGVuOworCisgIFRSQUNFKHNoZWxsLCIoJXApLT4oJXAsJWx1KVxuIix0aGlzLGxwc3pPdXQsZHdPdXRTaXplKTsKKworICBpZighbHBzek91dCkKKyAgeyByZXR1cm4gMDsKKwl9CisKKyAgKmxwc3pPdXQgPSAwOworICBscHN6VGVtcCA9IGxwc3pPdXQ7CisKKyAgZHdPdXRTaXplIC09IFBpZGxNZ3JfR2V0Rm9sZGVyVGV4dCh0aGlzLHBpZGwsIGxwc3pUZW1wLCBkd091dFNpemUpOworCisgIC8vYWRkIGEgYmFja3NsYXNoIGlmIG5lY2Vzc2FyeQorICBsZW4gPSBzdHJsZW4obHBzelRlbXApOworICBpZiAobGVuICYmIGxwc3pUZW1wW2xlbi0xXSE9J1xcJykKKwl7IGxwc3pUZW1wW2xlbiswXT0nXFwnOworICAgIGxwc3pUZW1wW2xlbisxXT0nXDAnOworCQlkd091dFNpemUtLTsKKyAgfQorCisgIGxwc3pUZW1wID0gbHBzek91dCArIHN0cmxlbihscHN6T3V0KTsKKworICAvL2FkZCB0aGUgdmFsdWUgc3RyaW5nCisgIFBpZGxNZ3JfR2V0VmFsdWVUZXh0KHRoaXMscGlkbCwgbHBzelRlbXAsIGR3T3V0U2l6ZSk7CisKKyAgLy9yZW1vdmUgdGhlIGxhc3QgYmFja3NsYXNoIGlmIG5lY2Vzc2FyeQorICBpZigqKGxwc3pPdXQgKyBzdHJsZW4obHBzek91dCkgLSAxKSA9PSAnXFwnKQorICB7ICoobHBzek91dCArIHN0cmxlbihscHN6T3V0KSAtIDEpID0gMDsKKyAgfQorCisgIFRSQUNFKHNoZWxsLCItLSAoJXApLT4oJXA9JXMsJWx1KVxuIix0aGlzLGxwc3pPdXQsbHBzek91dCxkd091dFNpemUpOworCisgIHJldHVybiBzdHJsZW4obHBzek91dCk7CisKK30KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUGlkbE1ncl9Db25jYXRlbmF0ZSgpCisgKiBDcmVhdGUgYSBuZXcgUElETCBieSBjb21iaW5pbmcgdHdvIGV4aXN0aW5nIFBJRExzLgorICovICAKK0xQSVRFTUlETElTVCBQaWRsTWdyX0NvbmNhdGVuYXRlKExQUElETE1HUiB0aGlzLExQSVRFTUlETElTVCBwaWRsMSwgTFBJVEVNSURMSVNUIHBpZGwyKQoreyBMUElURU1JRExJU1QgICBwaWRsTmV3OworICBVSU5UMzIgICAgICAgICBjYjEgPSAwLCBjYjIgPSAwOworCisgIFRSQUNFKHNoZWxsLCIoJXApLT4oJXAsJXApXG4iLHRoaXMscGlkbDEscGlkbDIpOworCisgIGlmKCFwaWRsMSAmJiAhcGlkbDIpCisgIHsgIHJldHVybiBOVUxMOworCX0KKworICBpZighcGlkbDEpCisgIHsgcGlkbE5ldyA9IFBpZGxNZ3JfQ29weSh0aGlzLHBpZGwyKTsKKyAgICByZXR1cm4gcGlkbE5ldzsKKyAgfQorCisgIGlmKCFwaWRsMikKKyAgeyBwaWRsTmV3ID0gUGlkbE1ncl9Db3B5KHRoaXMscGlkbDEpOworICAgIHJldHVybiBwaWRsTmV3OworICB9CisKKyAgY2IxID0gUGlkbE1ncl9HZXRTaXplKHRoaXMscGlkbDEpIC0gc2l6ZW9mKElURU1JRExJU1QpOworICBjYjIgPSBQaWRsTWdyX0dldFNpemUodGhpcyxwaWRsMik7CisKKyAgcGlkbE5ldyA9IChMUElURU1JRExJU1QpSGVhcEFsbG9jKEdldFByb2Nlc3NIZWFwKCksMCxjYjErY2IyKTsKKworICBpZihwaWRsTmV3KQorICB7IG1lbWNweShwaWRsTmV3LCBwaWRsMSwgY2IxKTsKKyAgICBtZW1jcHkoKChMUEJZVEUpcGlkbE5ldykgKyBjYjEsIHBpZGwyLCBjYjIpOworICB9CisgIFRSQUNFKHNoZWxsLCItLSAoJXApLT4gKG5ldyBwaWRsPSVwKVxuIix0aGlzLHBpZGxOZXcpOworCXJldHVybiBwaWRsTmV3OworfQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgUGlkbE1ncl9DcmVhdGUoKQorICogIENyZWF0ZXMgYSBuZXcgUElETAorICogIHR5cGUgPSBQVF9ERVNLVE9QIHwgUFRfRFJJVkUgfCBQVF9GT0xERVIgfCBQVF9WQUxVRQorICogIHBJbiA9IGRhdGEKKyAqICB1SW5TaXplID0gc2l6ZSBvZiBkYXRhCisgKi8KKworTFBJVEVNSURMSVNUIFBpZGxNZ3JfQ3JlYXRlKExQUElETE1HUiB0aGlzLFBJRExUWVBFIHR5cGUsIExQVk9JRCBwSW4sIFVJTlQxNiB1SW5TaXplKQoreyBMUElURU1JRExJU1QgICBwaWRsT3V0PU5VTEw7CisgIFVJTlQxNiAgICAgICAgIHVTaXplOworICBMUElURU1JRExJU1QgICBwaWRsVGVtcD1OVUxMOworICBMUFBJRExEQVRBICAgICBwRGF0YTsKKworICBUUkFDRShzaGVsbCwiKCVwKS0+KCV4ICVwICV4KVxuIix0aGlzLHR5cGUscEluLHVJblNpemUpOworCisgIGlmICghIHBJbikKKwl7IHJldHVybiBOVUxMOworCX0JCisgIHVTaXplID0gc2l6ZW9mKElURU1JRExJU1QpICsgKHNpemVvZihQSURMVFlQRSkpICsgdUluU2l6ZTsKKworICAvKiBBbGxvY2F0ZSB0aGUgbWVtb3J5LCBhZGRpbmcgYW4gYWRkaXRpb25hbCBJVEVNSURMSVNUIGZvciB0aGUgTlVMTCB0ZXJtaW5hdGluZyAKKyAgSUQgTGlzdC4gKi8KKyAgcGlkbE91dCA9IChMUElURU1JRExJU1QpSGVhcEFsbG9jKEdldFByb2Nlc3NIZWFwKCksMCx1U2l6ZSArIHNpemVvZihJVEVNSURMSVNUKSk7CisgIHBpZGxUZW1wID0gcGlkbE91dDsKKyAgaWYocGlkbE91dCkKKyAgeyBwaWRsVGVtcC0+bWtpZC5jYiA9IHVTaXplOworICAgIHBEYXRhID0gUGlkbE1ncl9HZXREYXRhUG9pbnRlcih0aGlzLHBpZGxUZW1wKTsKKyAgICBwRGF0YS0+dHlwZSA9IHR5cGU7CisgICAgc3dpdGNoKHR5cGUpCisgICAgeyBjYXNlIFBUX0RFU0tUT1A6IG1lbWNweShwRGF0YS0+c3pUZXh0LCBwSW4sIHVJblNpemUpOworICAgICAgICAgICAgICAgICAgICAgICBUUkFDRShzaGVsbCwiLS0gKCVwKS0+Y3JlYXRlIERlc2t0b3A6ICVzXG4iLHRoaXMsZGVidWdzdHJfYShwRGF0YS0+c3pUZXh0KSk7CisgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCQkJY2FzZSBQVF9EUklWRToJIG1lbWNweShwRGF0YS0+c3pUZXh0LCBwSW4sIHVJblNpemUpOworICAgICAgICAgICAgICAgICAgICAgICBUUkFDRShzaGVsbCwiLS0gKCVwKS0+Y3JlYXRlIERyaXZlOiAlc1xuIix0aGlzLGRlYnVnc3RyX2EocERhdGEtPnN6VGV4dCkpOworCQkJCQkJCQkJCQkgYnJlYWs7CisgICAgICBjYXNlIFBUX0ZPTERFUjoKKyAgICAgIGNhc2UgUFRfVkFMVUU6ICAgbWVtY3B5KHBEYXRhLT5zelRleHQsIHBJbiwgdUluU2l6ZSk7CisgICAgICAgICAgICAgICAgICAgICAgIFRSQUNFKHNoZWxsLCItLSAoJXApLT5jcmVhdGUgVmFsdWU6ICVzXG4iLHRoaXMsZGVidWdzdHJfYShwRGF0YS0+c3pUZXh0KSk7CisJCQkJCQkJCQkJCSBicmVhazsKKwkJICBkZWZhdWx0OiAgICAgICAgIEZJWE1FKHNoZWxsLCItLSAoJXApIHdyb25nIGFyZ3VtZW50XG4iLHRoaXMpOworCQkJICAgICAgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAKKyAgICBwaWRsVGVtcCA9IFBpZGxNZ3JfR2V0TmV4dEl0ZW0odGhpcyxwaWRsVGVtcCk7CisgICAgcGlkbFRlbXAtPm1raWQuY2IgPSAwOworICAgIHBpZGxUZW1wLT5ta2lkLmFiSURbMF0gPSAwOworICB9CisJVFJBQ0Uoc2hlbGwsIi0tICglcCktPihwaWRsPSVwKVxuIix0aGlzLHBpZGxPdXQpOworICByZXR1cm4gcGlkbE91dDsKK30KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIFBpZGxNZ3JfR2V0RGF0YShQSURMVFlQRSwgTFBDSVRFTUlETElTVCwgTFBWT0lELCBVSU5UMTYpCisgKi8KK0RXT1JEIFBpZGxNZ3JfR2V0RGF0YSgKKyAgICBMUFBJRExNR1IgdGhpcywKKwkJUElETFRZUEUgdHlwZSwgCisgICAgTFBDSVRFTUlETElTVCBwaWRsLAorCQlMUFZPSUQgcE91dCwKKwkJVUlOVDE2IHVPdXRTaXplKQoreyBMUFBJRExEQVRBICBwRGF0YTsKKyAgRFdPUkQgICAgICAgZHdSZXR1cm49MDsgCisKKwlUUkFDRShzaGVsbCwiKCVwKS0+KCV4ICVwICVwICV4KVxuIix0aGlzLHR5cGUscGlkbCxwT3V0LHVPdXRTaXplKTsKKwkKKyAgaWYoIXBpZGwpCisgIHsgIHJldHVybiAwOworCX0KKworICBwRGF0YSA9IFBpZGxNZ3JfR2V0RGF0YVBvaW50ZXIodGhpcyxwaWRsKTsKKworICAvL2NvcHkgdGhlIGRhdGEKKyAgc3dpdGNoKHR5cGUpCisgIHsgY2FzZSBQVF9ERVNLVE9QOiBpZih1T3V0U2l6ZSA8IDEpCisgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgICAgICAgaWYoUFRfREVTS1RPUCAhPSBwRGF0YS0+dHlwZSkKKyAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisJCQkJCQkJCQkJICooTFBTVFIpcE91dCA9IDA7CSAKKyAgICAgICAgICAgICAgICAgICAgIHN0cm5jcHkoKExQU1RSKXBPdXQsICJERVNLVE9QIiwgdU91dFNpemUpOworCQkJCQkJCQkJCSBkd1JldHVybiA9IHN0cmxlbigoTFBTVFIpcE91dCk7CisgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworCSBjYXNlIFBUX0RSSVZFOiAgICBpZih1T3V0U2l6ZSA8IDEpCisgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgICAgICAgaWYoUFRfREVTS1RPUCAhPSBwRGF0YS0+dHlwZSkKKyAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisJCQkJCQkJCQkJICooTFBTVFIpcE91dCA9IDA7CSAKKyAgICAgICAgICAgICAgICAgICAgIHN0cm5jcHkoKExQU1RSKXBPdXQsICJEUklWRSIsIHVPdXRTaXplKTsKKwkJCQkJCQkJCQkgZHdSZXR1cm4gPSBzdHJsZW4oKExQU1RSKXBPdXQpOworICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgIGNhc2UgUFRfRk9MREVSOgorICAgY2FzZSBQVF9WQUxVRTogCisJIGNhc2UgUFRfVEVYVDogICAgICooTFBTVFIpcE91dCA9IDA7CisgICAgICAgICAgICAgICAgICAgICBzdHJuY3B5KChMUFNUUilwT3V0LCBwRGF0YS0+c3pUZXh0LCB1T3V0U2l6ZSk7CisgICAgICAgICAgICAgICAgICAgICBkd1JldHVybiA9IHN0cmxlbigoTFBTVFIpcE91dCk7CisgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgfQorCVRSQUNFKHNoZWxsLCItLSAoJXApLT4oJXA6JXMgJWx4KVxuIix0aGlzLHBPdXQsKGNoYXIqKXBPdXQsZHdSZXR1cm4pOworICByZXR1cm4gZHdSZXR1cm47Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgUGlkbE1ncl9HZXREYXRhUG9pbnRlcigpCisgKi8KK0xQUElETERBVEEgUGlkbE1ncl9HZXREYXRhUG9pbnRlcihMUFBJRExNR1IgdGhpcyxMUElURU1JRExJU1QgcGlkbCkKK3sgaWYoIXBpZGwpCisgIHsgIHJldHVybiBOVUxMOworCX0KKwlUUkFDRSAoc2hlbGwsIiglcCktPiglcClcbiIJLHRoaXMsIHBpZGwpOworICByZXR1cm4gKExQUElETERBVEEpKHBpZGwtPm1raWQuYWJJRCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIENQaWRsTWdyX1NlcGFyYXRlUGF0aEFuZFZhbHVlKQorICogIENyZWF0ZXMgYSBzZXBhcmF0ZSBwYXRoIGFuZCB2YWx1ZSBQSURMIGZyb20gYSBmdWxseSBxdWFsaWZpZWQgUElETC4KKyAqLworQk9PTDMyIFBpZGxNZ3JfU2VwYXJhdGVQYXRoQW5kVmFsdWUoTFBQSURMTUdSIHRoaXMsIAorICAgTFBJVEVNSURMSVNUIHBpZGxGUSwgTFBJVEVNSURMSVNUICpwcGlkbFBhdGgsIExQSVRFTUlETElTVCAqcHBpZGxWYWx1ZSkKK3sgTFBJVEVNSURMSVNUICAgcGlkbFRlbXA7CisJVFJBQ0UgKHNoZWxsLCIoJXApLT4ocGlkbD0lcCBwaWRsPSVwIHBpZGw9JXApIix0aGlzLHBpZGxGUSxwcGlkbFBhdGgscHBpZGxWYWx1ZSk7CisgIGlmKCFwaWRsRlEpCisgIHsgIHJldHVybiBGQUxTRTsKKwl9CisKKyAgKnBwaWRsVmFsdWUgPSBQaWRsTWdyX0dldExhc3RJdGVtKHRoaXMscGlkbEZRKTsKKworICBpZighUGlkbE1ncl9Jc1ZhbHVlKHRoaXMsKnBwaWRsVmFsdWUpKQorICB7IHJldHVybiBGQUxTRTsKKwl9CisKKyAgKnBwaWRsVmFsdWUgPSBQaWRsTWdyX0NvcHkodGhpcywqcHBpZGxWYWx1ZSk7CisgICpwcGlkbFBhdGggPSBQaWRsTWdyX0NvcHkodGhpcyxwaWRsRlEpOworCisgIHBpZGxUZW1wID0gUGlkbE1ncl9HZXRMYXN0SXRlbSh0aGlzLCpwcGlkbFBhdGgpOworICBwaWRsVGVtcC0+bWtpZC5jYiA9IDA7CisgIHBpZGxUZW1wLT5ta2lkLmFiSURbMF0gPSAwOworCisgIHJldHVybiBUUlVFOworfQpkaWZmIC0tZ2l0IGEvb2xlL25scy9hZmsubmxzIGIvb2xlL25scy9hZmsubmxzCmluZGV4IGQ5OTRmNTc0Li5iNjdiZjQ0IDEwMDY0NAotLS0gYS9vbGUvbmxzL2Fmay5ubHMKKysrIGIvb2xlL25scy9hZmsubmxzCkBAIC02LDEzICs2LDEzIEBACiAvKiBMT0NWQUwoTE9DQUxFX0lMQU5HVUFHRSwiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZMQU5HTkFNRSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU05BVElWRUxBTkdOQU1FLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TQUJCUkVWTEFOR05BTUUsImFmayIpCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwiQWZyaWthYW5zIikKIC8qIExPQ1ZBTChMT0NBTEVfSUNPVU5UUlksIiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX1NDT1VOVFJZLCIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9TRU5HQ09VTlRSWSwiIikgKi8KLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCJhZmsiKQotLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsIiIpICovCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiWkFGIikKK0xPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCJTdWlkIEFmcmlrYSIpCiAvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUTEFOR1VBR0UsIiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSkgKi8KQEAgLTI1LDEyICsyNSwxMiBAQAogLyogTE9DVkFMKExPQ0FMRV9JRElHSVRTLCIyIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSUxaRVJPLCIxIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSU5FR05VTUJFUikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU05BVElWRURJR0lUUykgKi8KK0xPQ1ZBTChMT0NBTEVfU05BVElWRURJR0lUUywiMDEyMzQ1Njc4OSIpCiAvKiBMT0NWQUwoTE9DQUxFX1NDVVJSRU5DWSwiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfU0lOVExTWU1CT0wpICovCiAvKiBMT0NWQUwoTE9DQUxFX1NNT05ERUNJTUFMU0VQLCIsIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfU01PTlRIT1VTQU5EU0VQLCIuIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTkdST1VQSU5HKSAqLworTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcsIjM7MCIpCiAvKiBMT0NWQUwoTE9DQUxFX0lDVVJSRElHSVRTLCIyIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSUlOVExDVVJSRElHSVRTKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JQ1VSUkVOQ1ksIjMiKSAqLwpAQCAtNTUsMzUgKzU1LDM1IEBACiAvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVERBWU9GV0VFSykgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUV0VFS09GWUVBUikgKi8KIAotLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMiwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTQsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTcsIiIpICovCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMSwiTWFhbmRhZyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMiwiRGluc2RhZyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywiV29lbnNkYWciKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTQsIkRvbmRlcmRhZyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNSwiVnJ5ZGFnIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCJTYXRlcmRhZyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywiU29uZGFnIikKIAotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsIk1hIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCJUaSIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywiT24iKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsIlRvIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCJGciIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwiTPgiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsIlP4IikgKi8KK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCJNYWFuIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCJEaW5zIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCJXb2VuIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCJEb25kIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCJWcnkiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsIlNhdCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiU29uIikKIAotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTUsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU2LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNywiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTgsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU5LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTAsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEyLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTMsIiIpICovCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCJKYW51YXJpZSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUyLCJGZWJydWFyaWUiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMywiTWFhcnQiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwiQXByaWwiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwiTWVpIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsIkp1bmllIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTcsIkp1bGllIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTgsIkF1Z3VzdHVzIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksIlNlcHRlbWJlciIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMCwiT2t0b2JlciIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMSwiTm92ZW1iZXIiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsIkRlc2VtYmVyIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEzLCIiKQogCiAvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxLCIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiwiIikgKi8KQEAgLTEwOCwzICsxMDgsNCBAQAogLyogTE9DVkFMKExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMsICIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JTkVHU0VQQllTUEFDRSwgIiIpICovCiAKKy8qIEdyZWdvcmlhYW5zZSBrYWxlbmRlciAqLwpkaWZmIC0tZ2l0IGEvb2xlL25scy9hcmEubmxzIGIvb2xlL25scy9hcmEubmxzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzYWM5ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9vbGUvbmxzL2FyYS5ubHMKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKglPTEUyTkxTIGxpYnJhcnkKKyAqICAgICAgQXJhYmljIChTYXVkaSBBcmFiaWEpCisgKi8KKworLyogTE9DVkFMKExPQ0FMRV9JTEFOR1VBR0UsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0VOR0xBTkdVQUdFLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TQUJCUkVWTEFOR05BTUUsImFyYSIpCisvKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TRU5HQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUTEFOR1VBR0UsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMSVNULCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTUVBU1VSRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RFQ0lNQUwsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSE9VU0FORCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0dST1VQSU5HKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRElHSVRTLCIyIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUxaRVJPLCIxIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR05VTUJFUikgKi8KK0xPQ1ZBTChMT0NBTEVfU05BVElWRURJR0lUUywiMDEyMzQ1Njc4OSIpCisvKiBMT0NWQUwoTE9DQUxFX1NDVVJSRU5DWSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0lOVExTWU1CT0wsIkFFRCIpCisvKiBMT0NWQUwoTE9DQUxFX1NNT05ERUNJTUFMU0VQLCIsIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRIT1VTQU5EU0VQLCIuIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTkdST1VQSU5HKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ1VSUkRJR0lUUywiMiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNVUlJFTkNZLCIzIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR0NVUlIsIjgiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFURSwiLiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSU1FLCI6IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1NIT1JUREFURSwiZGQvTU0teXl5eSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMT05HREFURSwiZGRkLCBkLiBNTU1NIHl5eXkiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVElNRUZPUk1BVCkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURBVEUsIjEiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTERBVEUpICovCisvKiBMT0NWQUwoTE9DQUxFX0lUSU1FLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSVRJTUVNQVJLUE9TTikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNFTlRVUlkpICovCisvKiBMT0NWQUwoTE9DQUxFX0lUTFpFUk8sIjEiKQorLyogTE9DVkFMKExPQ0FMRV9JREFZTFpFUk8pICovCisvKiBMT0NWQUwoTE9DQUxFX0lNT05MWkVSTykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfUzExNTksICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TMjM1OSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDQUxFTkRBUlRZUEUpICovCisvKiBMT0NWQUwoTE9DQUxFX0lPUFRJT05BTENBTEVOREFSKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUspICovCisvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCIiKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiIikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU2LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTgsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU5LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTAsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTMsIiIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzLCIiKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTkVHQVRJVkVTSUdOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NJR05QT1NOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NJR05QT1NOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NZTVBSRUNFREVTLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NFUEJZU1BBQ0UsICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMsICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU0VQQllTUEFDRSwgIiIpICovCisKKy8qICovCmRpZmYgLS1naXQgYS9vbGUvbmxzL2FyYi5ubHMgYi9vbGUvbmxzL2FyYi5ubHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ5OWQ4YQotLS0gL2Rldi9udWxsCisrKyBiL29sZS9ubHMvYXJiLm5scwpAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqCU9MRTJOTFMgbGlicmFyeQorICogICAgICBBcmFiaWMgKExlYmFub24pCisgKi8KKworLyogTE9DVkFMKExPQ0FMRV9JTEFOR1VBR0UsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0VOR0xBTkdVQUdFLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TQUJCUkVWTEFOR05BTUUsImFybCIpCisvKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TRU5HQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUTEFOR1VBR0UsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMSVNULCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTUVBU1VSRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RFQ0lNQUwsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSE9VU0FORCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0dST1VQSU5HKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRElHSVRTLCIyIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUxaRVJPLCIxIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR05VTUJFUikgKi8KK0xPQ1ZBTChMT0NBTEVfU05BVElWRURJR0lUUywiMDEyMzQ1Njc4OSIpCisvKiBMT0NWQUwoTE9DQUxFX1NDVVJSRU5DWSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0lOVExTWU1CT0wsIkFFRCIpCisvKiBMT0NWQUwoTE9DQUxFX1NNT05ERUNJTUFMU0VQLCIsIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRIT1VTQU5EU0VQLCIuIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTkdST1VQSU5HKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ1VSUkRJR0lUUywiMiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNVUlJFTkNZLCIzIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR0NVUlIsIjgiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFURSwiLiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSU1FLCI6IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1NIT1JUREFURSwiZGQvTU0teXl5eSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMT05HREFURSwiZGRkLCBkLiBNTU1NIHl5eXkiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVElNRUZPUk1BVCkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURBVEUsIjEiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTERBVEUpICovCisvKiBMT0NWQUwoTE9DQUxFX0lUSU1FLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSVRJTUVNQVJLUE9TTikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNFTlRVUlkpICovCisvKiBMT0NWQUwoTE9DQUxFX0lUTFpFUk8sIjEiKQorLyogTE9DVkFMKExPQ0FMRV9JREFZTFpFUk8pICovCisvKiBMT0NWQUwoTE9DQUxFX0lNT05MWkVSTykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfUzExNTksICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TMjM1OSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDQUxFTkRBUlRZUEUpICovCisvKiBMT0NWQUwoTE9DQUxFX0lPUFRJT05BTENBTEVOREFSKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUspICovCisvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCIiKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiIikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU2LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTgsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU5LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTAsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTMsIiIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzLCIiKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTkVHQVRJVkVTSUdOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NJR05QT1NOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NJR05QT1NOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NZTVBSRUNFREVTLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NFUEJZU1BBQ0UsICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMsICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU0VQQllTUEFDRSwgIiIpICovCisKKy8qICovCmRpZmYgLS1naXQgYS9vbGUvbmxzL2FyZS5ubHMgYi9vbGUvbmxzL2FyZS5ubHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZkMTQ3OAotLS0gL2Rldi9udWxsCisrKyBiL29sZS9ubHMvYXJlLm5scwpAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqCU9MRTJOTFMgbGlicmFyeQorICogICAgICBBcmFiaWMgKEVneXB0KQorICovCisKKy8qIExPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJhcmUiKQorLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTElTVCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU1FQVNVUkUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NERUNJTUFMLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVEhPVVNBTkQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NHUk9VUElORykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURJR0lUUywiMiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lMWkVSTywiMSIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdOVU1CRVIpICovCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVESUdJVFMsIjAxMjM0NTY3ODkiKQorLyogTE9DVkFMKExPQ0FMRV9TQ1VSUkVOQ1ksIiIpICovCitMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MLCJBRUQiKQorLyogTE9DVkFMKExPQ0FMRV9TTU9OREVDSU1BTFNFUCwiLCIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCwiLiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNVUlJESUdJVFMsIjIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JSU5UTENVUlJESUdJVFMpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDVVJSRU5DWSwiMyIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdDVVJSLCI4IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBVEUsIi4iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVElNRSwiOiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NTSE9SVERBVEUsImRkL01NLXl5eXkiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTE9OR0RBVEUsImRkZCwgZC4gTU1NTSB5eXl5IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1RJTUVGT1JNQVQpICovCisvKiBMT0NWQUwoTE9DQUxFX0lEQVRFLCIxIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUxEQVRFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JVElNRSwiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lUSU1FTUFSS1BPU04pICovCisvKiBMT0NWQUwoTE9DQUxFX0lDRU5UVVJZKSAqLworLyogTE9DVkFMKExPQ0FMRV9JVExaRVJPLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSURBWUxaRVJPKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTU9OTFpFUk8pICovCisvKiBMT0NWQUwoTE9DQUxFX1MxMTU5LCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfUzIzNTksICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ0FMRU5EQVJUWVBFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JT1BUSU9OQUxDQUxFTkRBUikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUREFZT0ZXRUVLKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRklSU1RXRUVLT0ZZRUFSKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU1LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywiIikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsIiIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU1LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTcsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU4LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEzLCIiKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMywiIikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TUE9TSVRJVkVTSUdOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTSUdOUE9TTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTSUdOUE9TTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTWU1QUkVDRURFUywgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTRVBCWVNQQUNFLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NZTVBSRUNFREVTLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NFUEJZU1BBQ0UsICIiKSAqLworCisvKiAqLwpkaWZmIC0tZ2l0IGEvb2xlL25scy9hcmcubmxzIGIvb2xlL25scy9hcmcubmxzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2YWFmMTQKLS0tIC9kZXYvbnVsbAorKysgYi9vbGUvbmxzL2FyZy5ubHMKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKglPTEUyTkxTIGxpYnJhcnkKKyAqICAgICAgQXJhYmljIChBbGdlcmlhKQorICovCisKKy8qIExPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJhcnMiKQorLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTElTVCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU1FQVNVUkUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NERUNJTUFMLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVEhPVVNBTkQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NHUk9VUElORykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURJR0lUUywiMiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lMWkVSTywiMSIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdOVU1CRVIpICovCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVESUdJVFMsIjAxMjM0NTY3ODkiKQorLyogTE9DVkFMKExPQ0FMRV9TQ1VSUkVOQ1ksIiIpICovCitMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MLCJBRUQiKQorLyogTE9DVkFMKExPQ0FMRV9TTU9OREVDSU1BTFNFUCwiLCIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCwiLiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNVUlJESUdJVFMsIjIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JSU5UTENVUlJESUdJVFMpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDVVJSRU5DWSwiMyIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdDVVJSLCI4IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBVEUsIi4iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVElNRSwiOiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NTSE9SVERBVEUsImRkL01NLXl5eXkiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTE9OR0RBVEUsImRkZCwgZC4gTU1NTSB5eXl5IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1RJTUVGT1JNQVQpICovCisvKiBMT0NWQUwoTE9DQUxFX0lEQVRFLCIxIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUxEQVRFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JVElNRSwiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lUSU1FTUFSS1BPU04pICovCisvKiBMT0NWQUwoTE9DQUxFX0lDRU5UVVJZKSAqLworLyogTE9DVkFMKExPQ0FMRV9JVExaRVJPLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSURBWUxaRVJPKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTU9OTFpFUk8pICovCisvKiBMT0NWQUwoTE9DQUxFX1MxMTU5LCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfUzIzNTksICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ0FMRU5EQVJUWVBFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JT1BUSU9OQUxDQUxFTkRBUikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUREFZT0ZXRUVLKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRklSU1RXRUVLT0ZZRUFSKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU1LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywiIikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsIiIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU1LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTcsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU4LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEzLCIiKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMywiIikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TUE9TSVRJVkVTSUdOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTSUdOUE9TTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTSUdOUE9TTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTWU1QUkVDRURFUywgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTRVBCWVNQQUNFLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NZTVBSRUNFREVTLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NFUEJZU1BBQ0UsICIiKSAqLworCisvKiAqLwpkaWZmIC0tZ2l0IGEvb2xlL25scy9hcmkubmxzIGIvb2xlL25scy9hcmkubmxzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3N2M2YmIKLS0tIC9kZXYvbnVsbAorKysgYi9vbGUvbmxzL2FyaS5ubHMKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKglPTEUyTkxTIGxpYnJhcnkKKyAqICAgICAgQXJhYmljCisgKi8KKworLyogTE9DVkFMKExPQ0FMRV9JTEFOR1VBR0UsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0VOR0xBTkdVQUdFLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TQUJCUkVWTEFOR05BTUUsImFyaSIpCisvKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TRU5HQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUTEFOR1VBR0UsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMSVNULCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTUVBU1VSRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RFQ0lNQUwsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSE9VU0FORCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0dST1VQSU5HKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRElHSVRTLCIyIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUxaRVJPLCIxIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR05VTUJFUikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU05BVElWRURJR0lUUykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0NVUlJFTkNZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TSU5UTFNZTUJPTCkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTkRFQ0lNQUxTRVAsIiwiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhPVVNBTkRTRVAsIi4iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDVVJSRElHSVRTLCIyIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUlOVExDVVJSRElHSVRTKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ1VSUkVOQ1ksIjMiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHQ1VSUiwiOCIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVRFLCIuIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1RJTUUsIjoiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TU0hPUlREQVRFLCJkZC9NTS15eXl5IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xPTkdEQVRFLCJkZGQsIGQuIE1NTU0geXl5eSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSU1FRk9STUFUKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREFURSwiMSIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lMREFURSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVRJTUUsIjEiKQorLyogTE9DVkFMKExPQ0FMRV9JVElNRU1BUktQT1NOKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ0VOVFVSWSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVRMWkVSTywiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lEQVlMWkVSTykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU1PTkxaRVJPKSAqLworLyogTE9DVkFMKExPQ0FMRV9TMTE1OSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1MyMzU5LCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNBTEVOREFSVFlQRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU9QVElPTkFMQ0FMRU5EQVIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVERBWU9GV0VFSykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUV0VFS09GWUVBUikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTcsIiIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCIiKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTMsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTExLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMywiIikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMsIiIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU1BPU0lUSVZFU0lHTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NORUdBVElWRVNJR04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU0lHTlBPU04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU0lHTlBPU04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU1lNUFJFQ0VERVMsICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU0VQQllTUEFDRSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTWU1QUkVDRURFUywgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTRVBCWVNQQUNFLCAiIikgKi8KKworLyogKi8KZGlmZiAtLWdpdCBhL29sZS9ubHMvYXJrLm5scyBiL29sZS9ubHMvYXJrLm5scwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjY1YjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvb2xlL25scy9hcmsubmxzCkBAIC0wLDAgKzEsMTExIEBACisvKgorICoJT0xFMk5MUyBsaWJyYXJ5CisgKiAgICAgIEFyYWJpYyAoS3V3YWl0KQorICovCisKKy8qIExPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJhcmsiKQorLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIiIpICovCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiS1dUIikKKy8qIExPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTElTVCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU1FQVNVUkUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NERUNJTUFMLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVEhPVVNBTkQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NHUk9VUElORykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURJR0lUUywiMiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lMWkVSTywiMSIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdOVU1CRVIpICovCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVESUdJVFMsIjAxMjM0NTY3ODkiKQorLyogTE9DVkFMKExPQ0FMRV9TQ1VSUkVOQ1ksIiIpICovCitMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MLCJLV0QiKQorLyogTE9DVkFMKExPQ0FMRV9TTU9OREVDSU1BTFNFUCwiLCIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCwiLiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNVUlJESUdJVFMsIjIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JSU5UTENVUlJESUdJVFMpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDVVJSRU5DWSwiMyIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdDVVJSLCI4IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBVEUsIi4iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVElNRSwiOiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NTSE9SVERBVEUsImRkL01NLXl5eXkiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTE9OR0RBVEUsImRkZCwgZC4gTU1NTSB5eXl5IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1RJTUVGT1JNQVQpICovCisvKiBMT0NWQUwoTE9DQUxFX0lEQVRFLCIxIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUxEQVRFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JVElNRSwiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lUSU1FTUFSS1BPU04pICovCisvKiBMT0NWQUwoTE9DQUxFX0lDRU5UVVJZKSAqLworLyogTE9DVkFMKExPQ0FMRV9JVExaRVJPLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSURBWUxaRVJPKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTU9OTFpFUk8pICovCisvKiBMT0NWQUwoTE9DQUxFX1MxMTU5LCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfUzIzNTksICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ0FMRU5EQVJUWVBFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JT1BUSU9OQUxDQUxFTkRBUikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUREFZT0ZXRUVLKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRklSU1RXRUVLT0ZZRUFSKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU1LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywiIikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsIiIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU1LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTcsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU4LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEzLCIiKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMywiIikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TUE9TSVRJVkVTSUdOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTSUdOUE9TTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTSUdOUE9TTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTWU1QUkVDRURFUywgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTRVBCWVNQQUNFLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NZTVBSRUNFREVTLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NFUEJZU1BBQ0UsICIiKSAqLworCisvKiAqLwpkaWZmIC0tZ2l0IGEvb2xlL25scy9hcm0ubmxzIGIvb2xlL25scy9hcm0ubmxzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1ZjE3ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9vbGUvbmxzL2FybS5ubHMKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKglPTEUyTkxTIGxpYnJhcnkKKyAqICAgICAgQXJhYmljIChNYXJvY2NvKQorICovCisKKy8qIExPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJhcnMiKQorLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTElTVCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU1FQVNVUkUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NERUNJTUFMLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVEhPVVNBTkQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NHUk9VUElORykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURJR0lUUywiMiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lMWkVSTywiMSIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdOVU1CRVIpICovCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVESUdJVFMsIjAxMjM0NTY3ODkiKQorLyogTE9DVkFMKExPQ0FMRV9TQ1VSUkVOQ1ksIiIpICovCitMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MLCJBRUQiKQorLyogTE9DVkFMKExPQ0FMRV9TTU9OREVDSU1BTFNFUCwiLCIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCwiLiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNVUlJESUdJVFMsIjIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JSU5UTENVUlJESUdJVFMpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDVVJSRU5DWSwiMyIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdDVVJSLCI4IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBVEUsIi4iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVElNRSwiOiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NTSE9SVERBVEUsImRkL01NLXl5eXkiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTE9OR0RBVEUsImRkZCwgZC4gTU1NTSB5eXl5IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1RJTUVGT1JNQVQpICovCisvKiBMT0NWQUwoTE9DQUxFX0lEQVRFLCIxIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUxEQVRFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JVElNRSwiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lUSU1FTUFSS1BPU04pICovCisvKiBMT0NWQUwoTE9DQUxFX0lDRU5UVVJZKSAqLworLyogTE9DVkFMKExPQ0FMRV9JVExaRVJPLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSURBWUxaRVJPKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTU9OTFpFUk8pICovCisvKiBMT0NWQUwoTE9DQUxFX1MxMTU5LCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfUzIzNTksICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ0FMRU5EQVJUWVBFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JT1BUSU9OQUxDQUxFTkRBUikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUREFZT0ZXRUVLKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRklSU1RXRUVLT0ZZRUFSKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU1LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywiIikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsIiIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU1LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTcsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU4LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEzLCIiKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMywiIikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TUE9TSVRJVkVTSUdOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTSUdOUE9TTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTSUdOUE9TTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTWU1QUkVDRURFUywgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTRVBCWVNQQUNFLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NZTVBSRUNFREVTLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NFUEJZU1BBQ0UsICIiKSAqLworCisvKiAqLwpkaWZmIC0tZ2l0IGEvb2xlL25scy9hcm8ubmxzIGIvb2xlL25scy9hcm8ubmxzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlYWY2N2QKLS0tIC9kZXYvbnVsbAorKysgYi9vbGUvbmxzL2Fyby5ubHMKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKglPTEUyTkxTIGxpYnJhcnkKKyAqICAgICAgQXJhYmljIChPbWFuKQorICovCisKKy8qIExPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJhcnMiKQorLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTElTVCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU1FQVNVUkUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NERUNJTUFMLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVEhPVVNBTkQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NHUk9VUElORykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURJR0lUUywiMiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lMWkVSTywiMSIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdOVU1CRVIpICovCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVESUdJVFMsIjAxMjM0NTY3ODkiKQorLyogTE9DVkFMKExPQ0FMRV9TQ1VSUkVOQ1ksIiIpICovCitMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MLCJBRUQiKQorLyogTE9DVkFMKExPQ0FMRV9TTU9OREVDSU1BTFNFUCwiLCIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCwiLiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNVUlJESUdJVFMsIjIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JSU5UTENVUlJESUdJVFMpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDVVJSRU5DWSwiMyIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdDVVJSLCI4IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBVEUsIi4iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVElNRSwiOiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NTSE9SVERBVEUsImRkL01NLXl5eXkiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTE9OR0RBVEUsImRkZCwgZC4gTU1NTSB5eXl5IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1RJTUVGT1JNQVQpICovCisvKiBMT0NWQUwoTE9DQUxFX0lEQVRFLCIxIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUxEQVRFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JVElNRSwiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lUSU1FTUFSS1BPU04pICovCisvKiBMT0NWQUwoTE9DQUxFX0lDRU5UVVJZKSAqLworLyogTE9DVkFMKExPQ0FMRV9JVExaRVJPLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSURBWUxaRVJPKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTU9OTFpFUk8pICovCisvKiBMT0NWQUwoTE9DQUxFX1MxMTU5LCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfUzIzNTksICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ0FMRU5EQVJUWVBFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JT1BUSU9OQUxDQUxFTkRBUikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUREFZT0ZXRUVLKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRklSU1RXRUVLT0ZZRUFSKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU1LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywiIikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsIiIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU1LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTcsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU4LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEzLCIiKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMywiIikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TUE9TSVRJVkVTSUdOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTSUdOUE9TTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTSUdOUE9TTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTWU1QUkVDRURFUywgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTRVBCWVNQQUNFLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NZTVBSRUNFREVTLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NFUEJZU1BBQ0UsICIiKSAqLworCisvKiAqLwpkaWZmIC0tZ2l0IGEvb2xlL25scy9hcnEubmxzIGIvb2xlL25scy9hcnEubmxzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlNTAyMGMKLS0tIC9kZXYvbnVsbAorKysgYi9vbGUvbmxzL2FycS5ubHMKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKglPTEUyTkxTIGxpYnJhcnkKKyAqICAgICAgQXJhYmljIChRdWF0YXIpCisgKi8KKworLyogTE9DVkFMKExPQ0FMRV9JTEFOR1VBR0UsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0VOR0xBTkdVQUdFLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TQUJCUkVWTEFOR05BTUUsImFycSIpCisvKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TRU5HQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUTEFOR1VBR0UsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMSVNULCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTUVBU1VSRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RFQ0lNQUwsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSE9VU0FORCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0dST1VQSU5HKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRElHSVRTLCIyIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUxaRVJPLCIxIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR05VTUJFUikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU05BVElWRURJR0lUUykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0NVUlJFTkNZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TSU5UTFNZTUJPTCkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTkRFQ0lNQUxTRVAsIiwiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhPVVNBTkRTRVAsIi4iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDVVJSRElHSVRTLCIyIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUlOVExDVVJSRElHSVRTKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ1VSUkVOQ1ksIjMiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHQ1VSUiwiOCIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVRFLCIuIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1RJTUUsIjoiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TU0hPUlREQVRFLCJkZC9NTS15eXl5IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xPTkdEQVRFLCJkZGQsIGQuIE1NTU0geXl5eSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSU1FRk9STUFUKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREFURSwiMSIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lMREFURSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVRJTUUsIjEiKQorLyogTE9DVkFMKExPQ0FMRV9JVElNRU1BUktQT1NOKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ0VOVFVSWSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVRMWkVSTywiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lEQVlMWkVSTykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU1PTkxaRVJPKSAqLworLyogTE9DVkFMKExPQ0FMRV9TMTE1OSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1MyMzU5LCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNBTEVOREFSVFlQRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU9QVElPTkFMQ0FMRU5EQVIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVERBWU9GV0VFSykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUV0VFS09GWUVBUikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTcsIiIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCIiKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTMsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTExLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMywiIikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMsIiIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU1BPU0lUSVZFU0lHTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NORUdBVElWRVNJR04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU0lHTlBPU04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU0lHTlBPU04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU1lNUFJFQ0VERVMsICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU0VQQllTUEFDRSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTWU1QUkVDRURFUywgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTRVBCWVNQQUNFLCAiIikgKi8KKworLyogKi8KZGlmZiAtLWdpdCBhL29sZS9ubHMvYXJzLm5scyBiL29sZS9ubHMvYXJzLm5scwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmNiYjM1Ci0tLSAvZGV2L251bGwKKysrIGIvb2xlL25scy9hcnMubmxzCkBAIC0wLDAgKzEsMTExIEBACisvKgorICoJT0xFMk5MUyBsaWJyYXJ5CisgKiAgICAgIEFyYWJpYyAoU3lyaWEpCisgKi8KKworLyogTE9DVkFMKExPQ0FMRV9JTEFOR1VBR0UsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0VOR0xBTkdVQUdFLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TQUJCUkVWTEFOR05BTUUsImFycyIpCisvKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TRU5HQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUTEFOR1VBR0UsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMSVNULCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTUVBU1VSRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RFQ0lNQUwsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSE9VU0FORCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0dST1VQSU5HKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRElHSVRTLCIyIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUxaRVJPLCIxIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR05VTUJFUikgKi8KK0xPQ1ZBTChMT0NBTEVfU05BVElWRURJR0lUUywiMDEyMzQ1Njc4OSIpCisvKiBMT0NWQUwoTE9DQUxFX1NDVVJSRU5DWSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0lOVExTWU1CT0wsIkFFRCIpCisvKiBMT0NWQUwoTE9DQUxFX1NNT05ERUNJTUFMU0VQLCIsIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRIT1VTQU5EU0VQLCIuIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTkdST1VQSU5HKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ1VSUkRJR0lUUywiMiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNVUlJFTkNZLCIzIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR0NVUlIsIjgiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFURSwiLiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSU1FLCI6IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1NIT1JUREFURSwiZGQvTU0teXl5eSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMT05HREFURSwiZGRkLCBkLiBNTU1NIHl5eXkiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVElNRUZPUk1BVCkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURBVEUsIjEiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTERBVEUpICovCisvKiBMT0NWQUwoTE9DQUxFX0lUSU1FLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSVRJTUVNQVJLUE9TTikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNFTlRVUlkpICovCisvKiBMT0NWQUwoTE9DQUxFX0lUTFpFUk8sIjEiKQorLyogTE9DVkFMKExPQ0FMRV9JREFZTFpFUk8pICovCisvKiBMT0NWQUwoTE9DQUxFX0lNT05MWkVSTykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfUzExNTksICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TMjM1OSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDQUxFTkRBUlRZUEUpICovCisvKiBMT0NWQUwoTE9DQUxFX0lPUFRJT05BTENBTEVOREFSKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUspICovCisvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCIiKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiIikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU2LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTgsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU5LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTAsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTMsIiIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzLCIiKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTkVHQVRJVkVTSUdOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NJR05QT1NOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NJR05QT1NOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NZTVBSRUNFREVTLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NFUEJZU1BBQ0UsICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMsICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU0VQQllTUEFDRSwgIiIpICovCisKKy8qICovCmRpZmYgLS1naXQgYS9vbGUvbmxzL2FydC5ubHMgYi9vbGUvbmxzL2FydC5ubHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNlYjg4NQotLS0gL2Rldi9udWxsCisrKyBiL29sZS9ubHMvYXJ0Lm5scwpAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqCU9MRTJOTFMgbGlicmFyeQorICogICAgICBBcmFiaWMgKFR1bmVzaWEpCisgKi8KKworLyogTE9DVkFMKExPQ0FMRV9JTEFOR1VBR0UsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0VOR0xBTkdVQUdFLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TQUJCUkVWTEFOR05BTUUsImFydCIpCisvKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TRU5HQ09VTlRSWSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCJUVU4iKQorLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUTEFOR1VBR0UsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMSVNULCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTUVBU1VSRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RFQ0lNQUwsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSE9VU0FORCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0dST1VQSU5HKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRElHSVRTLCIyIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUxaRVJPLCIxIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR05VTUJFUikgKi8KK0xPQ1ZBTChMT0NBTEVfU05BVElWRURJR0lUUywiMDEyMzQ1Njc4OSIpCisvKiBMT0NWQUwoTE9DQUxFX1NDVVJSRU5DWSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0lOVExTWU1CT0wsIkFFRCIpCisvKiBMT0NWQUwoTE9DQUxFX1NNT05ERUNJTUFMU0VQLCIsIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRIT1VTQU5EU0VQLCIuIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTkdST1VQSU5HKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ1VSUkRJR0lUUywiMiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNVUlJFTkNZLCIzIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR0NVUlIsIjgiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFURSwiLiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSU1FLCI6IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1NIT1JUREFURSwiZGQvTU0teXl5eSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMT05HREFURSwiZGRkLCBkLiBNTU1NIHl5eXkiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVElNRUZPUk1BVCkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURBVEUsIjEiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTERBVEUpICovCisvKiBMT0NWQUwoTE9DQUxFX0lUSU1FLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSVRJTUVNQVJLUE9TTikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNFTlRVUlkpICovCisvKiBMT0NWQUwoTE9DQUxFX0lUTFpFUk8sIjEiKQorLyogTE9DVkFMKExPQ0FMRV9JREFZTFpFUk8pICovCisvKiBMT0NWQUwoTE9DQUxFX0lNT05MWkVSTykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfUzExNTksICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TMjM1OSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDQUxFTkRBUlRZUEUpICovCisvKiBMT0NWQUwoTE9DQUxFX0lPUFRJT05BTENBTEVOREFSKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUspICovCisvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCIiKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiIikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU2LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTgsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU5LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTAsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTMsIiIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzLCIiKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTkVHQVRJVkVTSUdOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NJR05QT1NOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NJR05QT1NOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NZTVBSRUNFREVTLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NFUEJZU1BBQ0UsICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMsICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU0VQQllTUEFDRSwgIiIpICovCisKKy8qICovCmRpZmYgLS1naXQgYS9vbGUvbmxzL2FydS5ubHMgYi9vbGUvbmxzL2FydS5ubHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGIyYzUwZQotLS0gL2Rldi9udWxsCisrKyBiL29sZS9ubHMvYXJ1Lm5scwpAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqCU9MRTJOTFMgbGlicmFyeQorICogICAgICBBcmFiaWMgKGFydSkKKyAqLworCisvKiBMT0NWQUwoTE9DQUxFX0lMQU5HVUFHRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIiIpICovCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZMQU5HTkFNRSwiYXJ1IikKKy8qIExPQ1ZBTChMT0NBTEVfU05BVElWRUxBTkdOQU1FLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPREVQQUdFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xJU1QsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lNRUFTVVJFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREVDSU1BTCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1RIT1VTQU5ELCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TR1JPVVBJTkcpICovCisvKiBMT0NWQUwoTE9DQUxFX0lESUdJVFMsIjIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTFpFUk8sIjEiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHTlVNQkVSKSAqLworTE9DVkFMKExPQ0FMRV9TTkFUSVZFRElHSVRTLCIwMTIzNDU2Nzg5IikKKy8qIExPQ1ZBTChMT0NBTEVfU0NVUlJFTkNZLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TSU5UTFNZTUJPTCwiQUVEIikKKy8qIExPQ1ZBTChMT0NBTEVfU01PTkRFQ0lNQUxTRVAsIiwiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhPVVNBTkRTRVAsIi4iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDVVJSRElHSVRTLCIyIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUlOVExDVVJSRElHSVRTKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ1VSUkVOQ1ksIjMiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHQ1VSUiwiOCIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVRFLCIuIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1RJTUUsIjoiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TU0hPUlREQVRFLCJkZC9NTS15eXl5IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xPTkdEQVRFLCJkZGQsIGQuIE1NTU0geXl5eSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSU1FRk9STUFUKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREFURSwiMSIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lMREFURSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVRJTUUsIjEiKQorLyogTE9DVkFMKExPQ0FMRV9JVElNRU1BUktQT1NOKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ0VOVFVSWSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVRMWkVSTywiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lEQVlMWkVSTykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU1PTkxaRVJPKSAqLworLyogTE9DVkFMKExPQ0FMRV9TMTE1OSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1MyMzU5LCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNBTEVOREFSVFlQRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU9QVElPTkFMQ0FMRU5EQVIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVERBWU9GV0VFSykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUV0VFS09GWUVBUikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTcsIiIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCIiKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTMsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTExLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMywiIikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMsIiIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU1BPU0lUSVZFU0lHTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NORUdBVElWRVNJR04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU0lHTlBPU04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU0lHTlBPU04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU1lNUFJFQ0VERVMsICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU0VQQllTUEFDRSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTWU1QUkVDRURFUywgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTRVBCWVNQQUNFLCAiIikgKi8KKworLyogKi8KZGlmZiAtLWdpdCBhL29sZS9ubHMvYmVsLm5scyBiL29sZS9ubHMvYmVsLm5scwppbmRleCA0MzVlZGNiLi4zMjhjMmFiIDEwMDY0NAotLS0gYS9vbGUvbmxzL2JlbC5ubHMKKysrIGIvb2xlL25scy9iZWwubmxzCkBAIC02MywxMyArNjMsMTMgQEAKIC8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTcsIiIpICovCiAKLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCJNYSIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwiVGkiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsIk9uIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCJUbyIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwiRnIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsIkz4IikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCJT+CIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiIikgKi8KIAogLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsIiIpICovCmRpZmYgLS1naXQgYS9vbGUvbmxzL2Jnci5ubHMgYi9vbGUvbmxzL2Jnci5ubHMKaW5kZXggZjQyM2NhYy4uYWFhYWQzYiAxMDA2NDQKLS0tIGEvb2xlL25scy9iZ3IubmxzCisrKyBiL29sZS9ubHMvYmdyLm5scwpAQCAtMjUsNyArMjUsNyBAQAogLyogTE9DVkFMKExPQ0FMRV9JRElHSVRTLCIyIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSUxaRVJPLCIxIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSU5FR05VTUJFUikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU05BVElWRURJR0lUUykgKi8KK0xPQ1ZBTChMT0NBTEVfU05BVElWRURJR0lUUywgIjAxMjM0NTY3ODkiKQogLyogTE9DVkFMKExPQ0FMRV9TQ1VSUkVOQ1ksIiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MKSAqLwogLyogTE9DVkFMKExPQ0FMRV9TTU9OREVDSU1BTFNFUCwiLCIpICovCkBAIC02MywxMyArNjMsMTMgQEAKIC8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTcsIiIpICovCiAKLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCJNYSIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwiVGkiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsIk9uIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCJUbyIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwiRnIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsIkz4IikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCJT+CIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiIikgKi8KIAogLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsIiIpICovCmRpZmYgLS1naXQgYS9vbGUvbmxzL2NhdC5ubHMgYi9vbGUvbmxzL2NhdC5ubHMKaW5kZXggMDZiNmE1MC4uZjU1MzdiZSAxMDA2NDQKLS0tIGEvb2xlL25scy9jYXQubmxzCisrKyBiL29sZS9ubHMvY2F0Lm5scwpAQCAtNCw0MSArNCw0MSBAQAogICovCiAKIC8qIExPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsIiIpICovCi1MT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiU3BhbmlzaCIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZMQU5HTkFNRSwiZXNwIikKLS8qIExPQ1ZBTChMT0NBTEVfU05BVElWRUxBTkdOQU1FLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsIkNhdGFs4CIpCitMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiQ2F0YWxhbiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZMQU5HTkFNRSwiY2F0IikKK0xPQ1ZBTChMT0NBTEVfU05BVElWRUxBTkdOQU1FLCJDYXRhbOAiKQogLyogTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIiIpICovCitMT0NWQUwoTE9DQUxFX1NDT1VOVFJZLCJFc3BhbnlhIikKIExPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIlNwYWluIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCJjYXQiKQotLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsIkVzcGGAYSIpICovCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiRXMiKQorTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsIkVzcGFueWEiKQogLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UpICovCitMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UsIjg1MCIpCiAvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFKSAqLwogLyogTE9DVkFMKExPQ0FMRV9TTElTVCwiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSU1FQVNVUkUsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NERUNJTUFMLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TVEhPVVNBTkQsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NHUk9VUElORykgKi8KK0xPQ1ZBTChMT0NBTEVfU0RFQ0lNQUwsIiwiKQorTE9DVkFMKExPQ0FMRV9TVEhPVVNBTkQsIiIpCitMT0NWQUwoTE9DQUxFX1NHUk9VUElORywiMDswIikKIC8qIExPQ1ZBTChMT0NBTEVfSURJR0lUUywiMiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lMWkVSTywiMSIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lORUdOVU1CRVIpICovCiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVESUdJVFMsICIwMTIzNDU2Nzg5IikKIExPQ1ZBTChMT0NBTEVfU0NVUlJFTkNZLCJQdHMiKQogTE9DVkFMKExPQ0FMRV9TSU5UTFNZTUJPTCwgIkVTUCIpCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05ERUNJTUFMU0VQLCIsIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRIT1VTQU5EU0VQLCIuIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTkdST1VQSU5HKSAqLworTE9DVkFMKExPQ0FMRV9TTU9OREVDSU1BTFNFUCwiLCIpCitMT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCwiLiIpCitMT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORywiMzswIikKIC8qIExPQ1ZBTChMT0NBTEVfSUNVUlJESUdJVFMsIjIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JSU5UTENVUlJESUdJVFMpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lDVVJSRU5DWSwiMyIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lORUdDVVJSLCI4IikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0RBVEUsIi4iKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TVElNRSwiOiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NTSE9SVERBVEUsImRkL01NLXl5eXkiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTE9OR0RBVEUsImRkZCwgZC4gTU1NTSB5eXl5IikgKi8KK0xPQ1ZBTChMT0NBTEVfU0RBVEUsIi8iKQorTE9DVkFMKExPQ0FMRV9TVElNRSwiOiIpCitMT0NWQUwoTE9DQUxFX1NTSE9SVERBVEUsImRkL01NL3l5eXkiKQorTE9DVkFMKExPQ0FMRV9TTE9OR0RBVEUsImRkZCBkIE1NTU0geXl5eSIpICovCiAvKiBMT0NWQUwoTE9DQUxFX1NUSU1FRk9STUFUKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JREFURSwiMSIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lMREFURSkgKi8KQEAgLTQ4LDU5ICs0OCw1OSBAQAogLyogTE9DVkFMKExPQ0FMRV9JVExaRVJPLCIxIikKIC8qIExPQ1ZBTChMT0NBTEVfSURBWUxaRVJPKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JTU9OTFpFUk8pICovCi0vKiBMT0NWQUwoTE9DQUxFX1MxMTU5LCAiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfUzIzNTksICIiKSAqLworTE9DVkFMKExPQ0FMRV9TMTE1OSwgIiIpCitMT0NWQUwoTE9DQUxFX1MyMzU5LCAiIikKIC8qIExPQ1ZBTChMT0NBTEVfSUNBTEVOREFSVFlQRSkgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSU9QVElPTkFMQ0FMRU5EQVIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVERBWU9GV0VFSykgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUV0VFS09GWUVBUikgKi8KIAotTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsImx1bmVzIikKLUxPQ1ZBTChMT0NBTEVfU0RBWU5BTUUyLCJtYXJ0ZXMiKQotTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsIm1pP3Jjb2xlcyIpCi1MT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwianVldmVzIikKLUxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU1LCJ2aWVybmVzIikKLUxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCJzP2FiYWRvIikKLUxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCJkb21pbmdvIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCJEaWxsdW5zIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUyLCJEaW1hcnRzIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCJEaW1lY3JlcyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwiRGlqb3VzIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU1LCJEaXZlbmRyZXMiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsIkRpc3NhYnRlIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCJEaXVtZW5nZSIpCiAKLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCJsdW4iKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsIm1hciIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywibWk/IikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCJqdWUiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsInZpZSIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCIiKSAqLworTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsIkRsIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCJEdCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywiRGMiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsIkRqIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCJEdiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwiRHMiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsIkRnIikKIAotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiIikgKi8KLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsImZlYnJlcm8iKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMywibWFyem8iKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwiYWJyaWwiKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwibWF5byIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUU2LCJqdW5pbyIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCJqdWxpbyIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUU4LCJhZ29zdG8iKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOSwic2VwdGllbWJyZSIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMCwib2N0dWJyZSIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMSwibm92aWVtYnJlIikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEyLCJkaWNpZW1icmUiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiR2VuZXIiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiRmVicmVyIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTMsIk1hcuciKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwiQWJyaWwiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwiTWFpZyIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU2LCJKdW55IikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTcsIkp1bGlvbCIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU4LCJBZ29zdCIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU5LCJTZXRlbWJyZSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMCwiT2N0dWJyZSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMSwiTm92ZW1icmUiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsIkRlc2VtYnJlIikKIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEzLCIiKQogCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxLCJlbmUiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiwiZmViIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMsIm1hciIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0LCJhYnIiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwibWF5IikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYsImp1biIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3LCJqdWwiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCwiYWdvIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTksInNlcCIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCwib2N0IikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExLCJub3YiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsImRpYyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxLCJHbiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyLCJGYiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzLCJN5yIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0LCJBYiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1LCJNZyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2LCJKbiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3LCJKbCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4LCJBZyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5LCJTdCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCwiT2MiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTEsIk52IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyLCJEcyIpCiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMywiIikKIAotLyogTE9DVkFMKExPQ0FMRV9TUE9TSVRJVkVTSUdOLCAiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTiwgIiIpICovCitMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04sICIiKQorTE9DVkFMKExPQ0FMRV9TTkVHQVRJVkVTSUdOLCAiLSIpCiAvKiBMT0NWQUwoTE9DQUxFX0lQT1NTSUdOUE9TTiwgIiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lORUdTSUdOUE9TTiwgIiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lQT1NTWU1QUkVDRURFUywgIiIpICovCmRpZmYgLS1naXQgYS9vbGUvbmxzL2NodC5ubHMgYi9vbGUvbmxzL2NodC5ubHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRhZmQ0ZAotLS0gL2Rldi9udWxsCisrKyBiL29sZS9ubHMvY2h0Lm5scwpAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqCU9MRTJOTFMgbGlicmFyeQorICogICAgICBDaGluZXNlIChUYWl3YW4pCisgKi8KKworLyogTE9DVkFMKExPQ0FMRV9JTEFOR1VBR0UsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0VOR0xBTkdVQUdFLCJDaGluZXNlIChUYWl3YW4pIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJjaHQiKQorLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTElTVCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU1FQVNVUkUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NERUNJTUFMLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVEhPVVNBTkQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NHUk9VUElORykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURJR0lUUywiMiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lMWkVSTywiMSIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdOVU1CRVIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVESUdJVFMpICovCisvKiBMT0NWQUwoTE9DQUxFX1NDVVJSRU5DWSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0lOVExTWU1CT0wsICJUV0QiKQorLyogTE9DVkFMKExPQ0FMRV9TTU9OREVDSU1BTFNFUCwiLCIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCwiLiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNVUlJESUdJVFMsIjIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JSU5UTENVUlJESUdJVFMpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDVVJSRU5DWSwiMyIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdDVVJSLCI4IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBVEUsIi4iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVElNRSwiOiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NTSE9SVERBVEUsImRkL01NLXl5eXkiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTE9OR0RBVEUsImRkZCwgZC4gTU1NTSB5eXl5IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1RJTUVGT1JNQVQpICovCisvKiBMT0NWQUwoTE9DQUxFX0lEQVRFLCIxIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUxEQVRFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JVElNRSwiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lUSU1FTUFSS1BPU04pICovCisvKiBMT0NWQUwoTE9DQUxFX0lDRU5UVVJZKSAqLworLyogTE9DVkFMKExPQ0FMRV9JVExaRVJPLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSURBWUxaRVJPKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTU9OTFpFUk8pICovCisvKiBMT0NWQUwoTE9DQUxFX1MxMTU5LCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfUzIzNTksICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ0FMRU5EQVJUWVBFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JT1BUSU9OQUxDQUxFTkRBUikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUREFZT0ZXRUVLKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRklSU1RXRUVLT0ZZRUFSKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU1LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywiIikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsIiIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU1LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTcsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU4LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEzLCIiKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMywiIikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TUE9TSVRJVkVTSUdOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTSUdOUE9TTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTSUdOUE9TTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTWU1QUkVDRURFUywgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTRVBCWVNQQUNFLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NZTVBSRUNFREVTLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NFUEJZU1BBQ0UsICIiKSAqLworCmRpZmYgLS1naXQgYS9vbGUvbmxzL2N6ZS5ubHMgYi9vbGUvbmxzL2N6ZS5ubHMKaW5kZXggNmQ2MzYwMy4uODA2NzAzZiAxMDA2NDQKLS0tIGEvb2xlL25scy9jemUubmxzCisrKyBiL29sZS9ubHMvY3plLm5scwpAQCAtNSwxNyArNSwxOCBAQAogCiAvKiBMT0NWQUwoTE9DQUxFX0lMQU5HVUFHRSwiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIkN6ZWNoIFJlcHVibGljIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0VOR0xBTkdVQUdFLCJDemVjaCBSZXB1YmxpYyIpCiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZMQU5HTkFNRSwiY3plIikKLS8qIExPQ1ZBTChMT0NBTEVfU05BVElWRUxBTkdOQU1FLCI/emVjaCByZXB1Ymxpa2EiKSAqLworCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwiyGVza/0gamF6eWsiKQogLyogTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCIiKSAqLwotTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsImN6ZSIpCi0vKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIshlc2vhIFJlcHVibGlrYSIpCitMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCJDemVjaCBSZXB1YmxpYyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiQ3oiKQorTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsIshlc2vhIFJlcHVibGlrYSIpCiAvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUTEFOR1VBR0UsIiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSkgKi8KK0xPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSwiODk1IikKIC8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UpICovCiAvKiBMT0NWQUwoTE9DQUxFX1NMSVNULCIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JTUVBU1VSRSwiIikgKi8KQEAgLTI1LDIwICsyNiwyMCBAQAogLyogTE9DVkFMKExPQ0FMRV9JRElHSVRTLCIyIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSUxaRVJPLCIxIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSU5FR05VTUJFUikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU05BVElWRURJR0lUUykgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0NVUlJFTkNZLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TSU5UTFNZTUJPTCkgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTkRFQ0lNQUxTRVAsIiwiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhPVVNBTkRTRVAsIi4iKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcpICovCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVESUdJVFMsICIwMTIzNDU2Nzg5IikKK0xPQ1ZBTChMT0NBTEVfU0NVUlJFTkNZLCJL6CIpCitMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MLCJDWksiKQorTE9DVkFMKExPQ0FMRV9TTU9OREVDSU1BTFNFUCwiLCIpCitMT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCwiICIpCitMT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORywiMzszIikKIC8qIExPQ1ZBTChMT0NBTEVfSUNVUlJESUdJVFMsIjIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JSU5UTENVUlJESUdJVFMpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lDVVJSRU5DWSwiMyIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lORUdDVVJSLCI4IikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0RBVEUsIi4iKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TVElNRSwiOiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NTSE9SVERBVEUsImRkL01NLXl5eXkiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTE9OR0RBVEUsImRkZCwgZC4gTU1NTSB5eXl5IikgKi8KK0xPQ1ZBTChMT0NBTEVfU0RBVEUsIi4iKQorTE9DVkFMKExPQ0FMRV9TVElNRSwiOiIpCitMT0NWQUwoTE9DQUxFX1NTSE9SVERBVEUsImRkLk1NLnl5eXkiKQorTE9DVkFMKExPQ0FMRV9TTE9OR0RBVEUsImRkZCBkLiBNTU1NIHl5eXkiKQogLyogTE9DVkFMKExPQ0FMRV9TVElNRUZPUk1BVCkgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSURBVEUsIjEiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JTERBVEUpICovCkBAIC00OCw1OSArNDksNTkgQEAKIC8qIExPQ1ZBTChMT0NBTEVfSVRMWkVSTywiMSIpCiAvKiBMT0NWQUwoTE9DQUxFX0lEQVlMWkVSTykgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSU1PTkxaRVJPKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TMTE1OSwgIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1MyMzU5LCAiIikgKi8KK0xPQ1ZBTChMT0NBTEVfUzExNTksICIiKQorTE9DVkFMKExPQ0FMRV9TMjM1OSwgIiIpCiAvKiBMT0NWQUwoTE9DQUxFX0lDQUxFTkRBUlRZUEUpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lPUFRJT05BTENBTEVOREFSKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUspICovCiAvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIpICovCiAKLS8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCIiKSAqLworTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsIlBvbu9lbO0iKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsItp0ZXL9IikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCJTdPhlZGEiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTQsIsh0dnJ0ZWsiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsIlDhdGVrIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCJTb2JvdGEiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTcsIk5lZOxsZSIpCiAKLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCJNYSIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwiVGkiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsIk9uIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCJUbyIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwiRnIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsIkz4IikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCJT+CIpICovCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwiUG8iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsItp0IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCJTdCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwiyHQiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsIlDhIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCJTbyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiTmUiKQogCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTMsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOCwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMCwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTExLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsIiIpICovCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCJMZWRlbiIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUyLCLabm9yIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTMsIkL4ZXplbiIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCJEdWJlbiIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU1LCJLdux0ZW4iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNiwiyGVydmVuIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTcsIshlcnZlbmVjIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTgsIlNycGVuIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksIlrh+O0iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTAsItjtamVuIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTExLCJMaXN0b3BhZCIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMiwiUHJvc2luZWMiKQogLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTMsIiIpICovCiAKLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMywiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNiwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTEsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsIkxlZCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyLCLabm8iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMywiQvhlIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQsIkR1YiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1LCJLduwiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNiwiyGVyIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcsIshuYyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4LCJTcnAiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOSwiWuH4IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwLCLY7WoiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTEsIkxpcyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiwiUHJvIikKIC8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzLCIiKSAqLwogCi0vKiBMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04sICIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTkVHQVRJVkVTSUdOLCAiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU1BPU0lUSVZFU0lHTiwgIiIpCitMT0NWQUwoTE9DQUxFX1NORUdBVElWRVNJR04sICItIikKIC8qIExPQ1ZBTChMT0NBTEVfSVBPU1NJR05QT1NOLCAiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSU5FR1NJR05QT1NOLCAiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSVBPU1NZTVBSRUNFREVTLCAiIikgKi8KZGlmZiAtLWdpdCBhL29sZS9ubHMvZGFuLm5scyBiL29sZS9ubHMvZGFuLm5scwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmFlZmZmCi0tLSAvZGV2L251bGwKKysrIGIvb2xlL25scy9kYW4ubmxzCkBAIC0wLDAgKzEsMTExIEBACisvKgorICoJT0xFMk5MUyBsaWJyYXJ5CisgKiAgICAgIERlbm1hcmsKKyAqLworCitMT0NWQUwoTE9DQUxFX0lMQU5HVUFHRSwiNiIpCitMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiRGFuc2siKQorTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIkRhbmlzaCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZMQU5HTkFNRSwiZGFuIikKK0xPQ1ZBTChMT0NBTEVfU05BVElWRUxBTkdOQU1FLCJEYW5zayIpCitMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCI0NSIpCitMT0NWQUwoTE9DQUxFX1NDT1VOVFJZLCJEYW5tYXJrIikKK0xPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIkRlbm1hcmsiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIkRLIikKK0xPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCJEYW5tYXJrIikKK0xPQ1ZBTChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSwiNiIpCitMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwiNDUiKQorLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPREVQQUdFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSkgKi8KK0xPQ1ZBTChMT0NBTEVfU0xJU1QsIjsiKQorTE9DVkFMKExPQ0FMRV9JTUVBU1VSRSwiMCIpCitMT0NWQUwoTE9DQUxFX1NERUNJTUFMLCIsIikKK0xPQ1ZBTChMT0NBTEVfU1RIT1VTQU5ELCIuIikKKy8qIExPQ1ZBTChMT0NBTEVfU0dST1VQSU5HKSAqLworTE9DVkFMKExPQ0FMRV9JRElHSVRTLCIyIikKK0xPQ1ZBTChMT0NBTEVfSUxaRVJPLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSU5FR05VTUJFUikgKi8KK0xPQ1ZBTChMT0NBTEVfU05BVElWRURJR0lUUywgIjAxMjM0NTY3ODkiKQorTE9DVkFMKExPQ0FMRV9TQ1VSUkVOQ1ksImtyIikKK0xPQ1ZBTChMT0NBTEVfU0lOVExTWU1CT0wsIkRLSyIpCitMT0NWQUwoTE9DQUxFX1NNT05ERUNJTUFMU0VQLCIsIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRIT1VTQU5EU0VQLCIuIikKK0xPQ1ZBTChMT0NBTEVfU01PTkdST1VQSU5HLCAiMzswIikKK0xPQ1ZBTChMT0NBTEVfSUNVUlJESUdJVFMsIjIiKQorLyogTE9DVkFMKExPQ0FMRV9JSU5UTENVUlJESUdJVFMpICovCitMT0NWQUwoTE9DQUxFX0lDVVJSRU5DWSwiMyIpCitMT0NWQUwoTE9DQUxFX0lORUdDVVJSLCI4IikKK0xPQ1ZBTChMT0NBTEVfU0RBVEUsIi4iKQorTE9DVkFMKExPQ0FMRV9TVElNRSwiOiIpCitMT0NWQUwoTE9DQUxFX1NTSE9SVERBVEUsImRkL01NLXl5eXkiKQorTE9DVkFMKExPQ0FMRV9TTE9OR0RBVEUsImRkZCwgZC4gTU1NTSB5eXl5IikKKy8qIExPQ1ZBTChMT0NBTEVfU1RJTUVGT1JNQVQpICovCitMT0NWQUwoTE9DQUxFX0lEQVRFLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSUxEQVRFKSAqLworTE9DVkFMKExPQ0FMRV9JVElNRSwiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lUSU1FTUFSS1BPU04pICovCisvKiBMT0NWQUwoTE9DQUxFX0lDRU5UVVJZKSAqLworTE9DVkFMKExPQ0FMRV9JVExaRVJPLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSURBWUxaRVJPKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTU9OTFpFUk8pICovCitMT0NWQUwoTE9DQUxFX1MxMTU5LCAiIikKK0xPQ1ZBTChMT0NBTEVfUzIzNTksICIiKQorLyogTE9DVkFMKExPQ0FMRV9JQ0FMRU5EQVJUWVBFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JT1BUSU9OQUxDQUxFTkRBUikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUREFZT0ZXRUVLKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRklSU1RXRUVLT0ZZRUFSKSAqLworCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMSwibWFuZGFnIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUyLCJ0aXJzZGFnIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCJvbnNkYWciKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTQsInRvcnNkYWciKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsImZyZWRhZyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwibPhyZGFnIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCJz+G5kYWciKQorCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwibWEiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsInRpIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCJvbiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwidG8iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsImZyIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCJs+CIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywic/giKQorCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCJqYW51YXIiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiZmVicnVhciIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCJtYXJ0cyIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCJhcHJpbCIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU1LCJtYWoiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNiwianVuaSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCJqdWxpIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTgsImF1Z3VzdCIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU5LCJzZXB0ZW1iZXIiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTAsIm9rdG9iZXIiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTEsIm5vdmVtYmVyIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEyLCJkZWNlbWJlciIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMywiIikKKworTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSwiamFuIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsImZlYiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzLCJtYXIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCwiYXByIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUsIm1haiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2LCJqdW4iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNywianVsIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgsImF1ZyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5LCJzZXAiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAsIm9rdCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwibm92IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyLCJkZWMiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMsIiIpCisKK0xPQ1ZBTChMT0NBTEVfU1BPU0lUSVZFU0lHTiwgIiIpCitMT0NWQUwoTE9DQUxFX1NORUdBVElWRVNJR04sICItIikKK0xPQ1ZBTChMT0NBTEVfSVBPU1NJR05QT1NOLCAiMyIpCitMT0NWQUwoTE9DQUxFX0lORUdTSUdOUE9TTiwgIjMiKQorTE9DVkFMKExPQ0FMRV9JUE9TU1lNUFJFQ0VERVMsICIxIikKK0xPQ1ZBTChMT0NBTEVfSVBPU1NFUEJZU1BBQ0UsICIwIikKK0xPQ1ZBTChMT0NBTEVfSU5FR1NZTVBSRUNFREVTLCAiMSIpCitMT0NWQUwoTE9DQUxFX0lORUdTRVBCWVNQQUNFLCAiMCIpCisKKy8qIERlbiBncmVnb3JpYW5za2UgS2FsZW5kZXIgKi8KZGlmZiAtLWdpdCBhL29sZS9ubHMvZGVhLm5scyBiL29sZS9ubHMvZGVhLm5scwppbmRleCBkYWI1MDBmLi5iYWM5MGRlIDEwMDY0NAotLS0gYS9vbGUvbmxzL2RlYS5ubHMKKysrIGIvb2xlL25scy9kZWEubmxzCkBAIC0zMCw3ICszMCw3IEBACiBMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MLCJBVFMiKQogLyogTE9DVkFMKExPQ0FMRV9TTU9OREVDSU1BTFNFUCkgKi8KIC8qIExPQ1ZBTChMT0NBTEVfU01PTlRIT1VTQU5EU0VQKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcpICovCitMT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORywgIjM7MCIpCiAKIExPQ1ZBTChMT0NBTEVfSUNVUlJESUdJVFMsIjIiKQogLyogTE9DVkFMKExPQ0FMRV9JSU5UTENVUlJESUdJVFMpICovCkBAIC03Miw3ICs3Miw3IEBACiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwiU2EiKQogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsIlNvIikKIAotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiSmFudWFyIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEsIkqAbm5lciIpCiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUyLCJGZWJydWFyIikKIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTMsIk3kcnoiKQogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwiQXByaWwiKQpAQCAtODYsNyArODYsNyBAQAogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsIkRlemVtYmVyIikKIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEzLCIiKQogCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxLCJKYW4iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSwiSoBuIikKIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsIkZlYiIpCiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzLCJN5HIiKQogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCwiQXByIikKQEAgLTEwOCwzICsxMDgsNSBAQAogLyogTE9DVkFMKExPQ0FMRV9JUE9TU0VQQllTUEFDRSkgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSU5FR1NZTVBSRUNFREVTKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JTkVHU0VQQllTUEFDRSkgKi8KKworLyogR3JlZ29yaWFuaXNjaGVyIEthbGVuZGVyICovClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvb2xlL25scy9kZWMubmxzIGIvb2xlL25scy9kZWMubmxzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkMmIwYTAKLS0tIC9kZXYvbnVsbAorKysgYi9vbGUvbmxzL2RlYy5ubHMKQEAgLTAsMCArMSwxMTIgQEAKKy8qCisgKglPTEUyTkxTIGxpYnJhcnkKKyAqICAgICAgRnVlcnN0ZW50dW0gTGllY2h0ZW5zdGVpbgorICovCisgCitMT0NWQUwoTE9DQUxFX0lMQU5HVUFHRSwiOSIpCitMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiRGV1dHNjaCIpCitMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiR2VybWFuIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJkZWMiKQorTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIkRldXRzY2giKQorTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwiNDEiKQorTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiTGllY2h0ZW5zdGVpbiAoRGV1dHNjaCkiKQorTE9DVkFMKExPQ0FMRV9TRU5HQ09VTlRSWSwiTGllY2h0ZW5zdGVpbiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiTElFIikKK0xPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCJMaWVjaHRlbnN0ZWluIikKK0xPQ1ZBTChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSwiOSIpCitMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwiNDEiKQorTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPREVQQUdFLCI4NTEiKQorLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSkgKi8KK0xPQ1ZBTChMT0NBTEVfU0xJU1QsIjsiKQorTE9DVkFMKExPQ0FMRV9JTUVBU1VSRSwiMCIpCitMT0NWQUwoTE9DQUxFX1NERUNJTUFMLCIuIikKK0xPQ1ZBTChMT0NBTEVfU1RIT1VTQU5ELCInIikKKy8qIExPQ1ZBTChMT0NBTEVfU0dST1VQSU5HKSAqLworTE9DVkFMKExPQ0FMRV9JRElHSVRTLCIyIikKK0xPQ1ZBTChMT0NBTEVfSUxaRVJPLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSU5FR05VTUJFUikgKi8KK0xPQ1ZBTChMT0NBTEVfU05BVElWRURJR0lUUywgIjAxMjM0NTY3ODkiKQorTE9DVkFMKExPQ0FMRV9TQ1VSUkVOQ1ksIlNGciIpCitMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MLCJDSEYiKQorLyogTE9DVkFMKExPQ0FMRV9TTU9OREVDSU1BTFNFUCkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRIT1VTQU5EU0VQKSAqLworTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcsICIzOzAiKQorCitMT0NWQUwoTE9DQUxFX0lDVVJSRElHSVRTLCIyIikKKy8qIExPQ1ZBTChMT0NBTEVfSUlOVExDVVJSRElHSVRTKSAqLworTE9DVkFMKExPQ0FMRV9JQ1VSUkVOQ1ksIjMiKQorTE9DVkFMKExPQ0FMRV9JTkVHQ1VSUiwiOCIpCitMT0NWQUwoTE9DQUxFX1NEQVRFLCIuIikKK0xPQ1ZBTChMT0NBTEVfU1RJTUUsIjoiKQorTE9DVkFMKExPQ0FMRV9TU0hPUlREQVRFLCJkZC5NTS55eXl5IikKK0xPQ1ZBTChMT0NBTEVfU0xPTkdEQVRFLCJkZGQsIGQuIE1NTU0geXl5eSIpCisvKiBMT0NWQUwoTE9DQUxFX1NUSU1FRk9STUFUKSAqLworTE9DVkFMKExPQ0FMRV9JREFURSwiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lMREFURSkgKi8KK0xPQ1ZBTChMT0NBTEVfSVRJTUUsIjEiKQorLyogTE9DVkFMKExPQ0FMRV9JVElNRU1BUktQT1NOKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ0VOVFVSWSkgKi8KK0xPQ1ZBTChMT0NBTEVfSVRMWkVSTywiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lEQVlMWkVSTykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU1PTkxaRVJPKSAqLworTE9DVkFMKExPQ0FMRV9TMTE1OSwiIikKK0xPQ1ZBTChMT0NBTEVfUzIzNTksIiIpCisvKiBMT0NWQUwoTE9DQUxFX0lDQUxFTkRBUlRZUEUpICovCisvKiBMT0NWQUwoTE9DQUxFX0lPUFRJT05BTENBTEVOREFSKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUspICovCisvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIpICovCisKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCJNb250YWciKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsIkRpZW5zdGFnIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCJNaXR0d29jaCIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwiRG9ubmVyc3RhZyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNSwiRnJlaXRhZyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwiU2Ftc3RhZyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywiU29ubnRhZyIpCisKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCJNbyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwiRGkiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsIk1pIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCJEbyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwiRnIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsIlNhIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCJTbyIpCisKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEsIkphbnVhciIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUyLCJGZWJydWFyIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTMsIk3kcnoiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwiQXByaWwiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwiTWFpIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsIkp1bmkiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNywiSnVsaSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU4LCJBdWd1c3QiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOSwiU2VwdGVtYmVyIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCJPa3RvYmVyIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTExLCJOb3ZlbWJlciIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMiwiRGV6ZW1iZXIiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTMsIiIpCisKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsIkphbiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyLCJGZWIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMywiTeRyIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQsIkFwciIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1LCJNYWkiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNiwiSnVuIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcsIkp1bCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4LCJBdWciKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOSwiU2VwIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwLCJPa3QiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTEsIk5vdiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiwiRGV6IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzLCIiKQorCisvKiBMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04pICovCisvKiBMT0NWQUwoTE9DQUxFX1NORUdBVElWRVNJR04pICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTSUdOUE9TTikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NJR05QT1NOKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU1lNUFJFQ0VERVMpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTRVBCWVNQQUNFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTRVBCWVNQQUNFKSAqLworCisvKiBHcmVnb3JpYW5pc2NoZXIgS2FsZW5kZXIgKi8KZGlmZiAtLWdpdCBhL29sZS9ubHMvZGVsLm5scyBiL29sZS9ubHMvZGVsLm5scwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDMwN2E2Ci0tLSAvZGV2L251bGwKKysrIGIvb2xlL25scy9kZWwubmxzCkBAIC0wLDAgKzEsMTExIEBACisvKgorICoJT0xFMk5MUyBsaWJyYXJ5CisgKiAgICAgIEx1eGVtYm91cmcgKEdlcm1hbikKKyAqLworCitMT0NWQUwoTE9DQUxFX0lMQU5HVUFHRSwiOSIpCitMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiRGV1dHNjaCIpCitMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiR2VybWFuIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJkZXUiKQorTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIkRldXRzY2giKQorTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwiNDkiKQorTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiTHV4ZW1idXJnIikKK0xPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIkx1eGVtYnVyZyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiTFVYIikKK0xPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCJMdXhlbWJvdXJnIikKK0xPQ1ZBTChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSwiOSIpCitMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwiNDkiKQorTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPREVQQUdFLCI4NTEiKQorLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSkgKi8KK0xPQ1ZBTChMT0NBTEVfU0xJU1QsIjsiKQorTE9DVkFMKExPQ0FMRV9JTUVBU1VSRSwiMCIpCitMT0NWQUwoTE9DQUxFX1NERUNJTUFMLCIsIikKK0xPQ1ZBTChMT0NBTEVfU1RIT1VTQU5ELCIuIikKKy8qIExPQ1ZBTChMT0NBTEVfU0dST1VQSU5HKSAqLworTE9DVkFMKExPQ0FMRV9JRElHSVRTLCIyIikKK0xPQ1ZBTChMT0NBTEVfSUxaRVJPLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSU5FR05VTUJFUikgKi8KK0xPQ1ZBTChMT0NBTEVfU05BVElWRURJR0lUUywgIjAxMjM0NTY3ODkiKQorTE9DVkFMKExPQ0FMRV9TQ1VSUkVOQ1ksIkYiKQorTE9DVkFMKExPQ0FMRV9TSU5UTFNZTUJPTCwgIkxVRiIpCisvKiBMT0NWQUwoTE9DQUxFX1NNT05ERUNJTUFMU0VQKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhPVVNBTkRTRVApICovCitMT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORywgIjM7MCIpCitMT0NWQUwoTE9DQUxFX0lDVVJSRElHSVRTLCIyIikKKy8qIExPQ1ZBTChMT0NBTEVfSUlOVExDVVJSRElHSVRTKSAqLworTE9DVkFMKExPQ0FMRV9JQ1VSUkVOQ1ksIjMiKQorTE9DVkFMKExPQ0FMRV9JTkVHQ1VSUiwiOCIpCitMT0NWQUwoTE9DQUxFX1NEQVRFLCIuIikKK0xPQ1ZBTChMT0NBTEVfU1RJTUUsIjoiKQorTE9DVkFMKExPQ0FMRV9TU0hPUlREQVRFLCJkZC5NTS55eXl5IikKK0xPQ1ZBTChMT0NBTEVfU0xPTkdEQVRFLCJkZGQsIGQuIE1NTU0geXl5eSIpCisvKiBMT0NWQUwoTE9DQUxFX1NUSU1FRk9STUFUKSAqLworTE9DVkFMKExPQ0FMRV9JREFURSwiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lMREFURSkgKi8KK0xPQ1ZBTChMT0NBTEVfSVRJTUUsIjEiKQorLyogTE9DVkFMKExPQ0FMRV9JVElNRU1BUktQT1NOKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ0VOVFVSWSkgKi8KK0xPQ1ZBTChMT0NBTEVfSVRMWkVSTywiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lEQVlMWkVSTykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU1PTkxaRVJPKSAqLworTE9DVkFMKExPQ0FMRV9TMTE1OSwiIikKK0xPQ1ZBTChMT0NBTEVfUzIzNTksIiIpCisvKiBMT0NWQUwoTE9DQUxFX0lDQUxFTkRBUlRZUEUpICovCisvKiBMT0NWQUwoTE9DQUxFX0lPUFRJT05BTENBTEVOREFSKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUspICovCisvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIpICovCisKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCJNb250YWciKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsIkRpZW5zdGFnIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCJNaXR0d29jaCIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwiRG9ubmVyc3RhZyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNSwiRnJlaXRhZyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwiU29ubmFiZW5kIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCJTb25udGFnIikKKworTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsIk1vIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCJEaSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywiTWkiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsIkRvIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCJGciIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwiU2EiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsIlNvIikKKworTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiSmFudWFyIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsIkZlYnJ1YXIiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMywiTeRyeiIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCJBcHJpbCIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU1LCJNYWkiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNiwiSnVuaSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCJKdWxpIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTgsIkF1Z3VzdCIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU5LCJTZXB0ZW1iZXIiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTAsIk9rdG9iZXIiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTEsIk5vdmVtYmVyIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEyLCJEZXplbWJlciIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMywiIikKKworTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSwiSmFuIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsIkZlYiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzLCJN5HIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCwiQXByIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUsIk1haSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2LCJKdW4iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNywiSnVsIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgsIkF1ZyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5LCJTZXAiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAsIk9rdCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwiTm92IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyLCJEZXoiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMsIiIpCisKKy8qIExPQ1ZBTChMT0NBTEVfU1BPU0lUSVZFU0lHTikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NJR05QT1NOKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU0lHTlBPU04pICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTWU1QUkVDRURFUykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NFUEJZU1BBQ0UpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTWU1QUkVDRURFUykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NFUEJZU1BBQ0UpICovCisKKy8qIEdyZWdvcmlhbmlzY2hlciBLYWxlbmRlciAqLwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL29sZS9ubHMvZGVzLm5scyBiL29sZS9ubHMvZGVzLm5scwppbmRleCBkYjVhMmZkLi42MWU1YWU3IDEwMDY0NAotLS0gYS9vbGUvbmxzL2Rlcy5ubHMKKysrIGIvb2xlL25scy9kZXMubmxzCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqCU9MRTJOTFMgbGlicmFyeQotICogICAgICBTd2l0emVybGFuZAorICogICAgICBTd2l0emVybGFuZCAoR2VybWFuKQogICovCiAgCiBMT0NWQUwoTE9DQUxFX0lMQU5HVUFHRSwiOSIpCkBAIC0zMCw3ICszMCw3IEBACiBMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MLCJDSEYiKQogLyogTE9DVkFMKExPQ0FMRV9TTU9OREVDSU1BTFNFUCkgKi8KIC8qIExPQ1ZBTChMT0NBTEVfU01PTlRIT1VTQU5EU0VQKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcpICovCitMT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORywgIjM7MCIpCiAKIExPQ1ZBTChMT0NBTEVfSUNVUlJESUdJVFMsIjIiKQogLyogTE9DVkFMKExPQ0FMRV9JSU5UTENVUlJESUdJVFMpICovCkBAIC0xMDgsMyArMTA4LDUgQEAKIC8qIExPQ1ZBTChMT0NBTEVfSVBPU1NFUEJZU1BBQ0UpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lORUdTWU1QUkVDRURFUykgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSU5FR1NFUEJZU1BBQ0UpICovCisKKy8qIEdyZWdvcmlhbmlzY2hlciBLYWxlbmRlciAqLwpkaWZmIC0tZ2l0IGEvb2xlL25scy9kZXUubmxzIGIvb2xlL25scy9kZXUubmxzCmluZGV4IDFjNjgxZjkuLjIxZTc4OTEgMTAwNjQ0Ci0tLSBhL29sZS9ubHMvZGV1Lm5scworKysgYi9vbGUvbmxzL2RldS5ubHMKQEAgLTEwNywzICsxMDcsNSBAQAogLyogTE9DVkFMKExPQ0FMRV9JUE9TU0VQQllTUEFDRSkgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSU5FR1NZTVBSRUNFREVTKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JTkVHU0VQQllTUEFDRSkgKi8KKworLyogR3JlZ29yaWFuaXNjaGVyIEthbGVuZGVyICovClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvb2xlL25scy9lbXB0eS5ubHMgYi9vbGUvbmxzL2VtcHR5Lm5scwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjQ4NTY5Ci0tLSAvZGV2L251bGwKKysrIGIvb2xlL25scy9lbXB0eS5ubHMKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKglPTEUyTkxTIGxpYnJhcnkKKyAqICAgICAgTGFuZ3VhZ2UgKEluZm9ybWF0aW9uKQorICovCisKKy8qIExPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTElTVCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU1FQVNVUkUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NERUNJTUFMLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVEhPVVNBTkQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NHUk9VUElORykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURJR0lUUywiMiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lMWkVSTywiMSIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdOVU1CRVIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVESUdJVFMpICovCisvKiBMT0NWQUwoTE9DQUxFX1NDVVJSRU5DWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0lOVExTWU1CT0wpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05ERUNJTUFMU0VQLCIsIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRIT1VTQU5EU0VQLCIuIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTkdST1VQSU5HKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ1VSUkRJR0lUUywiMiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNVUlJFTkNZLCIzIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR0NVUlIsIjgiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFURSwiLiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSU1FLCI6IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1NIT1JUREFURSwiZGQvTU0teXl5eSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMT05HREFURSwiZGRkLCBkLiBNTU1NIHl5eXkiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVElNRUZPUk1BVCkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURBVEUsIjEiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTERBVEUpICovCisvKiBMT0NWQUwoTE9DQUxFX0lUSU1FLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSVRJTUVNQVJLUE9TTikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNFTlRVUlkpICovCisvKiBMT0NWQUwoTE9DQUxFX0lUTFpFUk8sIjEiKQorLyogTE9DVkFMKExPQ0FMRV9JREFZTFpFUk8pICovCisvKiBMT0NWQUwoTE9DQUxFX0lNT05MWkVSTykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfUzExNTksICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TMjM1OSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDQUxFTkRBUlRZUEUpICovCisvKiBMT0NWQUwoTE9DQUxFX0lPUFRJT05BTENBTEVOREFSKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUspICovCisvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCIiKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiIikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU2LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTgsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU5LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTAsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTMsIiIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzLCIiKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTkVHQVRJVkVTSUdOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NJR05QT1NOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NJR05QT1NOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NZTVBSRUNFREVTLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NFUEJZU1BBQ0UsICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMsICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU0VQQllTUEFDRSwgIiIpICovCisKKy8qICovCmRpZmYgLS1naXQgYS9vbGUvbmxzL2VuYS5ubHMgYi9vbGUvbmxzL2VuYS5ubHMKaW5kZXggNzZiYmEwZS4uZjNmYTAxYSAxMDA2NDQKLS0tIGEvb2xlL25scy9lbmEubmxzCisrKyBiL29sZS9ubHMvZW5hLm5scwpAQCAtMTA3LDMgKzEwNyw1IEBACiBMT0NWQUwoTE9DQUxFX0lQT1NTRVBCWVNQQUNFLCAiMCIpCiBMT0NWQUwoTE9DQUxFX0lORUdTWU1QUkVDRURFUywgIjEiKQogTE9DVkFMKExPQ0FMRV9JTkVHU0VQQllTUEFDRSwgIjAiKQorCisvKiBHcmVnb3JpYW4gQ2FsZW5kYXIgKi8KZGlmZiAtLWdpdCBhL29sZS9ubHMvZW5iLm5scyBiL29sZS9ubHMvZW5iLm5scwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWI1OWIxCi0tLSAvZGV2L251bGwKKysrIGIvb2xlL25scy9lbmIubmxzCkBAIC0wLDAgKzEsMTExIEBACisvKgorICoJT0xFMk5MUyBsaWJyYXJ5CisgKiAgICAgIENhcmliYmVhbgorICovCisKK0xPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCAiMDgwOSIpCitMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwgIkVuZ2xpc2ggKENhcmliYmVhbikiKQorTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsICJFbmdsaXNoIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCAiZW5iIikKK0xPQ1ZBTChMT0NBTEVfU05BVElWRUxBTkdOQU1FLCAiRW5nbGlzaCIpCitMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCAiNDQiKQorTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwgIkNhcmliYmVhbiIpCitMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCAiQ2FyaWJiZWFuIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCAiQ0FSIikKK0xPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCAiQ2FycmliZWFuIikKK0xPQ1ZBTChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSwgIjA4MDkiKQorTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksICI0NCIpCitMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UsICI4NTAiKQorTE9DVkFMKExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSwgIjEyNTIiKQorTE9DVkFMKExPQ0FMRV9TTElTVCwgIiwiKQorTE9DVkFMKExPQ0FMRV9JTUVBU1VSRSwgIjAiKQorTE9DVkFMKExPQ0FMRV9TREVDSU1BTCwgIi4iKQorTE9DVkFMKExPQ0FMRV9TVEhPVVNBTkQsICIsIikKK0xPQ1ZBTChMT0NBTEVfU0dST1VQSU5HLCAiMzswIikKK0xPQ1ZBTChMT0NBTEVfSURJR0lUUywgIjIiKQorTE9DVkFMKExPQ0FMRV9JTFpFUk8sICIxIikKK0xPQ1ZBTChMT0NBTEVfSU5FR05VTUJFUiwgIjEiKQorTE9DVkFMKExPQ0FMRV9TTkFUSVZFRElHSVRTLCAiMDEyMzQ1Njc4OSIpCitMT0NWQUwoTE9DQUxFX1NDVVJSRU5DWSwgIiQiKQorTE9DVkFMKExPQ0FMRV9TSU5UTFNZTUJPTCwgIlVTRCIpCitMT0NWQUwoTE9DQUxFX1NNT05ERUNJTUFMU0VQLCAiLiIpCitMT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCwgIiwiKQorTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcsICIzOzAiKQorTE9DVkFMKExPQ0FMRV9JQ1VSUkRJR0lUUywgIjIiKQorTE9DVkFMKExPQ0FMRV9JSU5UTENVUlJESUdJVFMsICIyIikKK0xPQ1ZBTChMT0NBTEVfSUNVUlJFTkNZLCAiMCIpCitMT0NWQUwoTE9DQUxFX0lORUdDVVJSLCAiMSIpCitMT0NWQUwoTE9DQUxFX1NEQVRFLCAiLyIpCitMT0NWQUwoTE9DQUxFX1NUSU1FLCAiOiIpCitMT0NWQUwoTE9DQUxFX1NTSE9SVERBVEUsICJkZC9NTS95eSIpCitMT0NWQUwoTE9DQUxFX1NMT05HREFURSwgImRkIE1NTU0geXl5eSIpCitMT0NWQUwoTE9DQUxFX1NUSU1FRk9STUFULCAiSEg6bW06c3MiKQorTE9DVkFMKExPQ0FMRV9JREFURSwgIjEiKQorTE9DVkFMKExPQ0FMRV9JTERBVEUsICIxIikKK0xPQ1ZBTChMT0NBTEVfSVRJTUUsICIxIikKK0xPQ1ZBTChMT0NBTEVfSVRJTUVNQVJLUE9TTiwgIjAiKQorTE9DVkFMKExPQ0FMRV9JQ0VOVFVSWSwgIjAiKQorTE9DVkFMKExPQ0FMRV9JVExaRVJPLCAiMSIpCitMT0NWQUwoTE9DQUxFX0lEQVlMWkVSTywgIjEiKQorTE9DVkFMKExPQ0FMRV9JTU9OTFpFUk8sICIxIikKK0xPQ1ZBTChMT0NBTEVfUzExNTksICJBTSIpCitMT0NWQUwoTE9DQUxFX1MyMzU5LCAiUE0iKQorTE9DVkFMKExPQ0FMRV9JQ0FMRU5EQVJUWVBFLCAiMSIpCitMT0NWQUwoTE9DQUxFX0lPUFRJT05BTENBTEVOREFSLCAiMCIpCitMT0NWQUwoTE9DQUxFX0lGSVJTVERBWU9GV0VFSywgIjAiKQorTE9DVkFMKExPQ0FMRV9JRklSU1RXRUVLT0ZZRUFSLCAiMCIpCisKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCAiTW9uZGF5IikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUyLCAiVHVlc2RheSIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywgIldlZG5lc2RheSIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwgIlRodXJzZGF5IikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU1LCAiRnJpZGF5IikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCAiU2F0dXJkYXkiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTcsICJTdW5kYXkiKQorCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwgIk1vbiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwgIlR1ZSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywgIldlZCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwgIlRodSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwgIkZyaSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwgIlNhdCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywgIlN1biIpCisKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEsICJKYW51YXJ5IikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsICJGZWJydWFyeSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCAiTWFyY2giKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwgIkFwcmlsIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTUsICJNYXkiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNiwgIkp1bmUiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNywgIkp1bHkiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOCwgIkF1Z3VzdCIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU5LCAiU2VwdGVtYmVyIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCAiT2N0b2JlciIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMSwgIk5vdmVtYmVyIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEyLCAiRGVjZW1iZXIiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTMsICIiKQorCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxLCAiSmFuIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsICJGZWIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMywgIk1hciIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0LCAiQXByIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUsICJNYXkiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNiwgIkp1biIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3LCAiSnVsIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgsICJBdWciKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOSwgIlNlcCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCwgIk9jdCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwgIk5vdiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiwgIkRlYyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMywgIiIpCisKK0xPQ1ZBTChMT0NBTEVfU1BPU0lUSVZFU0lHTiwgIiIpCitMT0NWQUwoTE9DQUxFX1NORUdBVElWRVNJR04sICItIikKK0xPQ1ZBTChMT0NBTEVfSVBPU1NJR05QT1NOLCAiMyIpCitMT0NWQUwoTE9DQUxFX0lORUdTSUdOUE9TTiwgIjMiKQorTE9DVkFMKExPQ0FMRV9JUE9TU1lNUFJFQ0VERVMsICIxIikKK0xPQ1ZBTChMT0NBTEVfSVBPU1NFUEJZU1BBQ0UsICIwIikKK0xPQ1ZBTChMT0NBTEVfSU5FR1NZTVBSRUNFREVTLCAiMSIpCitMT0NWQUwoTE9DQUxFX0lORUdTRVBCWVNQQUNFLCAiMCIpCisKKy8qIEdyZWdvcmlhbiBDYWxlbmRhciAqLwpkaWZmIC0tZ2l0IGEvb2xlL25scy9lbmMubmxzIGIvb2xlL25scy9lbmMubmxzCmluZGV4IDMxZWRlYzQuLjlkOTJlZTMgMTAwNjQ0Ci0tLSBhL29sZS9ubHMvZW5jLm5scworKysgYi9vbGUvbmxzL2VuYy5ubHMKQEAgLTEsNiArMSw2IEBACiAvKgogICoJT0xFMk5MUyBsaWJyYXJ5Ci0gKiAgICAgIENhbmFkYQorICogICAgICBDYW5hZGEgKEVuZ2xpc2gpCiAgKi8KIAogTE9DVkFMKExPQ0FMRV9JTEFOR1VBR0UsICIwNDA5IikKQEAgLTEwNywzICsxMDcsNSBAQAogTE9DVkFMKExPQ0FMRV9JUE9TU0VQQllTUEFDRSwgIjAiKQogTE9DVkFMKExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMsICIxIikKIExPQ1ZBTChMT0NBTEVfSU5FR1NFUEJZU1BBQ0UsICIwIikKKworLyogR3JlZ29yaWFuIENhbGVuZGFyICovCmRpZmYgLS1naXQgYS9vbGUvbmxzL2VuZy5ubHMgYi9vbGUvbmxzL2VuZy5ubHMKaW5kZXggMjVkYmQyNC4uOGJkMjk4NyAxMDA2NDQKLS0tIGEvb2xlL25scy9lbmcubmxzCisrKyBiL29sZS9ubHMvZW5nLm5scwpAQCAtMTA3LDMgKzEwNyw1IEBACiBMT0NWQUwoTE9DQUxFX0lQT1NTRVBCWVNQQUNFLCAiMCIpCiBMT0NWQUwoTE9DQUxFX0lORUdTWU1QUkVDRURFUywgIjEiKQogTE9DVkFMKExPQ0FMRV9JTkVHU0VQQllTUEFDRSwgIjAiKQorCisvKiBHcmVnb3JpYW4gQ2FsZW5kYXIgKi8KZGlmZiAtLWdpdCBhL29sZS9ubHMvZW5qLm5scyBiL29sZS9ubHMvZW5qLm5scwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWYxM2I3Ci0tLSAvZGV2L251bGwKKysrIGIvb2xlL25scy9lbmoubmxzCkBAIC0wLDAgKzEsMTExIEBACisvKgorICoJT0xFMk5MUyBsaWJyYXJ5CisgKiAgICAgIEphbWFpY2EKKyAqLworCitMT0NWQUwoTE9DQUxFX0lMQU5HVUFHRSwgIjA4MDkiKQorTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsICJFbmdsaXNoIChKYW1haWNhKSIpCitMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwgIkVuZ2xpc2giKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTEFOR05BTUUsICJlbmoiKQorTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsICJFbmdsaXNoIikKK0xPQ1ZBTChMT0NBTEVfSUNPVU5UUlksICI0NCIpCitMT0NWQUwoTE9DQUxFX1NDT1VOVFJZLCAiSmFtYWljYSIpCitMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCAiSmFtYWljYSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwgIkpBTSIpCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwgIkphbWFpY2EiKQorTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCAiMDgwOSIpCitMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwgIjQ0IikKK0xPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSwgIjg1MCIpCitMT0NWQUwoTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFLCAiMTI1MiIpCitMT0NWQUwoTE9DQUxFX1NMSVNULCAiLCIpCitMT0NWQUwoTE9DQUxFX0lNRUFTVVJFLCAiMCIpCitMT0NWQUwoTE9DQUxFX1NERUNJTUFMLCAiLiIpCitMT0NWQUwoTE9DQUxFX1NUSE9VU0FORCwgIiwiKQorTE9DVkFMKExPQ0FMRV9TR1JPVVBJTkcsICIzOzAiKQorTE9DVkFMKExPQ0FMRV9JRElHSVRTLCAiMiIpCitMT0NWQUwoTE9DQUxFX0lMWkVSTywgIjEiKQorTE9DVkFMKExPQ0FMRV9JTkVHTlVNQkVSLCAiMSIpCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVESUdJVFMsICIwMTIzNDU2Nzg5IikKK0xPQ1ZBTChMT0NBTEVfU0NVUlJFTkNZLCAiJCIpCitMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MLCAiVVNEIikKK0xPQ1ZBTChMT0NBTEVfU01PTkRFQ0lNQUxTRVAsICIuIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRIT1VTQU5EU0VQLCAiLCIpCitMT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORywgIjM7MCIpCitMT0NWQUwoTE9DQUxFX0lDVVJSRElHSVRTLCAiMiIpCitMT0NWQUwoTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUywgIjIiKQorTE9DVkFMKExPQ0FMRV9JQ1VSUkVOQ1ksICIwIikKK0xPQ1ZBTChMT0NBTEVfSU5FR0NVUlIsICIxIikKK0xPQ1ZBTChMT0NBTEVfU0RBVEUsICIvIikKK0xPQ1ZBTChMT0NBTEVfU1RJTUUsICI6IikKK0xPQ1ZBTChMT0NBTEVfU1NIT1JUREFURSwgImRkL01NL3l5IikKK0xPQ1ZBTChMT0NBTEVfU0xPTkdEQVRFLCAiZGQgTU1NTSB5eXl5IikKK0xPQ1ZBTChMT0NBTEVfU1RJTUVGT1JNQVQsICJISDptbTpzcyIpCitMT0NWQUwoTE9DQUxFX0lEQVRFLCAiMSIpCitMT0NWQUwoTE9DQUxFX0lMREFURSwgIjEiKQorTE9DVkFMKExPQ0FMRV9JVElNRSwgIjEiKQorTE9DVkFMKExPQ0FMRV9JVElNRU1BUktQT1NOLCAiMCIpCitMT0NWQUwoTE9DQUxFX0lDRU5UVVJZLCAiMCIpCitMT0NWQUwoTE9DQUxFX0lUTFpFUk8sICIxIikKK0xPQ1ZBTChMT0NBTEVfSURBWUxaRVJPLCAiMSIpCitMT0NWQUwoTE9DQUxFX0lNT05MWkVSTywgIjEiKQorTE9DVkFMKExPQ0FMRV9TMTE1OSwgIkFNIikKK0xPQ1ZBTChMT0NBTEVfUzIzNTksICJQTSIpCitMT0NWQUwoTE9DQUxFX0lDQUxFTkRBUlRZUEUsICIxIikKK0xPQ1ZBTChMT0NBTEVfSU9QVElPTkFMQ0FMRU5EQVIsICIwIikKK0xPQ1ZBTChMT0NBTEVfSUZJUlNUREFZT0ZXRUVLLCAiMCIpCitMT0NWQUwoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIsICIwIikKKworTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsICJNb25kYXkiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsICJUdWVzZGF5IikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCAiV2VkbmVzZGF5IikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCAiVGh1cnNkYXkiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsICJGcmlkYXkiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsICJTYXR1cmRheSIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywgIlN1bmRheSIpCisKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCAiTW9uIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCAiVHVlIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCAiV2VkIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCAiVGh1IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCAiRnJpIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCAiU2F0IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCAiU3VuIikKKworTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwgIkphbnVhcnkiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwgIkZlYnJ1YXJ5IikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTMsICJNYXJjaCIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCAiQXByaWwiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwgIk1heSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU2LCAiSnVuZSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCAiSnVseSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU4LCAiQXVndXN0IikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksICJTZXB0ZW1iZXIiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTAsICJPY3RvYmVyIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTExLCAiTm92ZW1iZXIiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsICJEZWNlbWJlciIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMywgIiIpCisKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsICJKYW4iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiwgIkZlYiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzLCAiTWFyIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQsICJBcHIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwgIk1heSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2LCAiSnVuIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcsICJKdWwiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCwgIkF1ZyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5LCAiU2VwIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwLCAiT2N0IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExLCAiTm92IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyLCAiRGVjIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzLCAiIikKKworTE9DVkFMKExPQ0FMRV9TUE9TSVRJVkVTSUdOLCAiIikKK0xPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTiwgIi0iKQorTE9DVkFMKExPQ0FMRV9JUE9TU0lHTlBPU04sICIzIikKK0xPQ1ZBTChMT0NBTEVfSU5FR1NJR05QT1NOLCAiMyIpCitMT0NWQUwoTE9DQUxFX0lQT1NTWU1QUkVDRURFUywgIjEiKQorTE9DVkFMKExPQ0FMRV9JUE9TU0VQQllTUEFDRSwgIjAiKQorTE9DVkFMKExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMsICIxIikKK0xPQ1ZBTChMT0NBTEVfSU5FR1NFUEJZU1BBQ0UsICIwIikKKworLyogR3JlZ29yaWFuIENhbGVuZGFyICovCmRpZmYgLS1naXQgYS9vbGUvbmxzL2Vucy5ubHMgYi9vbGUvbmxzL2Vucy5ubHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdhOGU4YwotLS0gL2Rldi9udWxsCisrKyBiL29sZS9ubHMvZW5zLm5scwpAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqCU9MRTJOTFMgbGlicmFyeQorICogICAgICBTb3V0aCBBZnJpY2EgKEVuZ2xpc2gpCisgKi8KKworTE9DVkFMKExPQ0FMRV9JTEFOR1VBR0UsICIwODA5IikKK0xPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCAiRW5nbGlzaCAoU291dGggQWZyaWNhKSIpCitMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwgIkVuZ2xpc2giKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTEFOR05BTUUsICJlbnMiKQorTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsICJFbmdsaXNoIikKKy8qIExPQ1ZBTChMT0NBTEVfSUNPVU5UUlksICIiKSAqLworTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwgIlNvdXRoIEFmcmljYSIpCitMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCAiU291dGggQWZyaWNhIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCAiWkFGIikKK0xPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCAiU291dGggQWZyaWNhIikKK0xPQ1ZBTChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSwgIjA4MDkiKQorTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksICI0NCIpCitMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UsICI4NTAiKQorTE9DVkFMKExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSwgIjEyNTIiKQorTE9DVkFMKExPQ0FMRV9TTElTVCwgIiwiKQorTE9DVkFMKExPQ0FMRV9JTUVBU1VSRSwgIjAiKQorTE9DVkFMKExPQ0FMRV9TREVDSU1BTCwgIi4iKQorTE9DVkFMKExPQ0FMRV9TVEhPVVNBTkQsICIsIikKK0xPQ1ZBTChMT0NBTEVfU0dST1VQSU5HLCAiMzswIikKK0xPQ1ZBTChMT0NBTEVfSURJR0lUUywgIjIiKQorTE9DVkFMKExPQ0FMRV9JTFpFUk8sICIxIikKK0xPQ1ZBTChMT0NBTEVfSU5FR05VTUJFUiwgIjEiKQorTE9DVkFMKExPQ0FMRV9TTkFUSVZFRElHSVRTLCAiMDEyMzQ1Njc4OSIpCitMT0NWQUwoTE9DQUxFX1NDVVJSRU5DWSwgIlIiKQorTE9DVkFMKExPQ0FMRV9TSU5UTFNZTUJPTCwgIlpBUiIpCitMT0NWQUwoTE9DQUxFX1NNT05ERUNJTUFMU0VQLCAiLiIpCitMT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCwgIiwiKQorTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcsICIzOzAiKQorTE9DVkFMKExPQ0FMRV9JQ1VSUkRJR0lUUywgIjIiKQorTE9DVkFMKExPQ0FMRV9JSU5UTENVUlJESUdJVFMsICIyIikKK0xPQ1ZBTChMT0NBTEVfSUNVUlJFTkNZLCAiMCIpCitMT0NWQUwoTE9DQUxFX0lORUdDVVJSLCAiMSIpCitMT0NWQUwoTE9DQUxFX1NEQVRFLCAiLyIpCitMT0NWQUwoTE9DQUxFX1NUSU1FLCAiOiIpCitMT0NWQUwoTE9DQUxFX1NTSE9SVERBVEUsICJkZC9NTS95eSIpCitMT0NWQUwoTE9DQUxFX1NMT05HREFURSwgImRkIE1NTU0geXl5eSIpCitMT0NWQUwoTE9DQUxFX1NUSU1FRk9STUFULCAiSEg6bW06c3MiKQorTE9DVkFMKExPQ0FMRV9JREFURSwgIjEiKQorTE9DVkFMKExPQ0FMRV9JTERBVEUsICIxIikKK0xPQ1ZBTChMT0NBTEVfSVRJTUUsICIxIikKK0xPQ1ZBTChMT0NBTEVfSVRJTUVNQVJLUE9TTiwgIjAiKQorTE9DVkFMKExPQ0FMRV9JQ0VOVFVSWSwgIjAiKQorTE9DVkFMKExPQ0FMRV9JVExaRVJPLCAiMSIpCitMT0NWQUwoTE9DQUxFX0lEQVlMWkVSTywgIjEiKQorTE9DVkFMKExPQ0FMRV9JTU9OTFpFUk8sICIxIikKK0xPQ1ZBTChMT0NBTEVfUzExNTksICJBTSIpCitMT0NWQUwoTE9DQUxFX1MyMzU5LCAiUE0iKQorTE9DVkFMKExPQ0FMRV9JQ0FMRU5EQVJUWVBFLCAiMSIpCitMT0NWQUwoTE9DQUxFX0lPUFRJT05BTENBTEVOREFSLCAiMCIpCitMT0NWQUwoTE9DQUxFX0lGSVJTVERBWU9GV0VFSywgIjAiKQorTE9DVkFMKExPQ0FMRV9JRklSU1RXRUVLT0ZZRUFSLCAiMCIpCisKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCAiTW9uZGF5IikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUyLCAiVHVlc2RheSIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywgIldlZG5lc2RheSIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwgIlRodXJzZGF5IikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU1LCAiRnJpZGF5IikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCAiU2F0dXJkYXkiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTcsICJTdW5kYXkiKQorCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwgIk1vbiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwgIlR1ZSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywgIldlZCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwgIlRodSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwgIkZyaSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwgIlNhdCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywgIlN1biIpCisKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEsICJKYW51YXJ5IikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsICJGZWJydWFyeSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCAiTWFyY2giKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwgIkFwcmlsIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTUsICJNYXkiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNiwgIkp1bmUiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNywgIkp1bHkiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOCwgIkF1Z3VzdCIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU5LCAiU2VwdGVtYmVyIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCAiT2N0b2JlciIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMSwgIk5vdmVtYmVyIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEyLCAiRGVjZW1iZXIiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTMsICIiKQorCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxLCAiSmFuIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsICJGZWIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMywgIk1hciIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0LCAiQXByIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUsICJNYXkiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNiwgIkp1biIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3LCAiSnVsIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgsICJBdWciKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOSwgIlNlcCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCwgIk9jdCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwgIk5vdiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiwgIkRlYyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMywgIiIpCisKK0xPQ1ZBTChMT0NBTEVfU1BPU0lUSVZFU0lHTiwgIiIpCitMT0NWQUwoTE9DQUxFX1NORUdBVElWRVNJR04sICItIikKK0xPQ1ZBTChMT0NBTEVfSVBPU1NJR05QT1NOLCAiMyIpCitMT0NWQUwoTE9DQUxFX0lORUdTSUdOUE9TTiwgIjMiKQorTE9DVkFMKExPQ0FMRV9JUE9TU1lNUFJFQ0VERVMsICIxIikKK0xPQ1ZBTChMT0NBTEVfSVBPU1NFUEJZU1BBQ0UsICIwIikKK0xPQ1ZBTChMT0NBTEVfSU5FR1NZTVBSRUNFREVTLCAiMSIpCitMT0NWQUwoTE9DQUxFX0lORUdTRVBCWVNQQUNFLCAiMCIpCisKKy8qIEdyZWdvcmlhbiBDYWxlbmRhciAqLwpkaWZmIC0tZ2l0IGEvb2xlL25scy9lbnUubmxzIGIvb2xlL25scy9lbnUubmxzCmluZGV4IDYzMWNkZmQuLjcxOGYyZjMgMTAwNjQ0Ci0tLSBhL29sZS9ubHMvZW51Lm5scworKysgYi9vbGUvbmxzL2VudS5ubHMKQEAgLTEwNywzICsxMDcsNSBAQAogTE9DVkFMKExPQ0FMRV9JUE9TU0VQQllTUEFDRSwgIjAiKQogTE9DVkFMKExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMsICIxIikKIExPQ1ZBTChMT0NBTEVfSU5FR1NFUEJZU1BBQ0UsICIwIikKKworLyogR3JlZ29yaWFuIENhbGVuZGFyICovClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvb2xlL25scy9lbnoubmxzIGIvb2xlL25scy9lbnoubmxzCmluZGV4IGM2ODI0ZWQuLjg2OWI3OWIgMTAwNjQ0Ci0tLSBhL29sZS9ubHMvZW56Lm5scworKysgYi9vbGUvbmxzL2Vuei5ubHMKQEAgLTI2LDggKzI2LDggQEAKIExPQ1ZBTChMT0NBTEVfSUxaRVJPLCAiMSIpCiBMT0NWQUwoTE9DQUxFX0lORUdOVU1CRVIsICIxIikKIExPQ1ZBTChMT0NBTEVfU05BVElWRURJR0lUUywgIjAxMjM0NTY3ODkiKQotTE9DVkFMKExPQ0FMRV9TQ1VSUkVOQ1ksICKjIikKLUxPQ1ZBTChMT0NBTEVfU0lOVExTWU1CT0wsICJHQlAiKQorTE9DVkFMKExPQ0FMRV9TQ1VSUkVOQ1ksICIkIikKK0xPQ1ZBTChMT0NBTEVfU0lOVExTWU1CT0wsICJOWkQiKQogTE9DVkFMKExPQ0FMRV9TTU9OREVDSU1BTFNFUCwgIi4iKQogTE9DVkFMKExPQ0FMRV9TTU9OVEhPVVNBTkRTRVAsICIsIikKIExPQ1ZBTChMT0NBTEVfU01PTkdST1VQSU5HLCAiMzswIikKQEAgLTEwNywzICsxMDcsNSBAQAogTE9DVkFMKExPQ0FMRV9JUE9TU0VQQllTUEFDRSwgIjAiKQogTE9DVkFMKExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMsICIxIikKIExPQ1ZBTChMT0NBTEVfSU5FR1NFUEJZU1BBQ0UsICIwIikKKworLyogR3JlZ29yaWFuIENhbGVuZGFyICovClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvb2xlL25scy9lc2EubmxzIGIvb2xlL25scy9lc2EubmxzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5YzU2MDIKLS0tIC9kZXYvbnVsbAorKysgYi9vbGUvbmxzL2VzYS5ubHMKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKglPTEUyTkxTIGxpYnJhcnkKKyAqICAgICAgU3BhbmlzaCAoUGFuYW1hKQorICovCisKKy8qIExPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsIiIpICovCitMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiU3BhbmlzaCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZMQU5HTkFNRSwiZXNhIikKK0xPQ1ZBTChMT0NBTEVfU05BVElWRUxBTkdOQU1FLCJQYW5hbWEiKQorLyogTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIiIpICovCitMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCJQYW5hbWEiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIlBBTiIpCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwiUGFuYW1hIikKKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPREVQQUdFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xJU1QsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lNRUFTVVJFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREVDSU1BTCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1RIT1VTQU5ELCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TR1JPVVBJTkcpICovCisvKiBMT0NWQUwoTE9DQUxFX0lESUdJVFMsIjIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTFpFUk8sIjEiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHTlVNQkVSKSAqLworTE9DVkFMKExPQ0FMRV9TTkFUSVZFRElHSVRTLCAiMDEyMzQ1Njc4OSIpCitMT0NWQUwoTE9DQUxFX1NDVVJSRU5DWSwiQiIpCitMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MLCAiUEFCIikKKy8qIExPQ1ZBTChMT0NBTEVfU01PTkRFQ0lNQUxTRVAsIiwiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhPVVNBTkRTRVAsIi4iKSAqLworTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcsIjM7MCIpCisvKiBMT0NWQUwoTE9DQUxFX0lDVVJSRElHSVRTLCIyIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUlOVExDVVJSRElHSVRTKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ1VSUkVOQ1ksIjMiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHQ1VSUiwiOCIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVRFLCIuIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1RJTUUsIjoiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TU0hPUlREQVRFLCJkZC9NTS15eXl5IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xPTkdEQVRFLCJkZGQsIGQuIE1NTU0geXl5eSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSU1FRk9STUFUKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREFURSwiMSIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lMREFURSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVRJTUUsIjEiKQorLyogTE9DVkFMKExPQ0FMRV9JVElNRU1BUktQT1NOKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ0VOVFVSWSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVRMWkVSTywiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lEQVlMWkVSTykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU1PTkxaRVJPKSAqLworLyogTE9DVkFMKExPQ0FMRV9TMTE1OSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1MyMzU5LCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNBTEVOREFSVFlQRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU9QVElPTkFMQ0FMRU5EQVIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVERBWU9GV0VFSykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUV0VFS09GWUVBUikgKi8KKworTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsImx1bmVzIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUyLCJtYXJ0ZXMiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsIm1pP3Jjb2xlcyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwianVldmVzIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU1LCJ2aWVybmVzIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCJzP2FiYWRvIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCJkb21pbmdvIikKKworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsImx1biIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwibWFyIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCJtaT8iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsImp1ZSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwidmllIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsIiIpICovCisKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEsImVuZXJvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsImZlYnJlcm8iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMywibWFyem8iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwiYWJyaWwiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwibWF5byIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU2LCJqdW5pbyIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCJqdWxpbyIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU4LCJhZ29zdG8iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOSwic2VwdGllbWJyZSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMCwib2N0dWJyZSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMSwibm92aWVtYnJlIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEyLCJkaWNpZW1icmUiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTMsIiIpCisKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsImVuZSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyLCJmZWIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMywibWFyIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQsImFiciIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1LCJtYXkiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNiwianVuIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcsImp1bCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4LCJhZ28iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOSwic2VwIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwLCJvY3QiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTEsIm5vdiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiwiZGljIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzLCIiKQorCisvKiBMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTkVHQVRJVkVTSUdOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NJR05QT1NOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NJR05QT1NOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NZTVBSRUNFREVTLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NFUEJZU1BBQ0UsICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMsICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU0VQQllTUEFDRSwgIiIpICovCisKKy8qIGNhbGVuZGFyaW8gZ3JlZ29yaWFubyAqLwpkaWZmIC0tZ2l0IGEvb2xlL25scy9lc2IubmxzIGIvb2xlL25scy9lc2IubmxzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmYWU1ODMKLS0tIC9kZXYvbnVsbAorKysgYi9vbGUvbmxzL2VzYi5ubHMKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKglPTEUyTkxTIGxpYnJhcnkKKyAqICAgICAgU3BhbmlzaCAoQm9saXZpYSkKKyAqLworCisvKiBMT0NWQUwoTE9DQUxFX0lMQU5HVUFHRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIlNwYW5pc2giKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTEFOR05BTUUsImVzYiIpCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwiQm9saXZpYSIpCisvKiBMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIkJvbGl2aWEiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIkJPTCIpCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwiQm9saXZpYSIpCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUTEFOR1VBR0UsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMSVNULCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTUVBU1VSRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RFQ0lNQUwsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSE9VU0FORCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0dST1VQSU5HKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRElHSVRTLCIyIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUxaRVJPLCIxIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR05VTUJFUikgKi8KK0xPQ1ZBTChMT0NBTEVfU05BVElWRURJR0lUUywgIjAxMjM0NTY3ODkiKQorTE9DVkFMKExPQ0FMRV9TQ1VSUkVOQ1ksIkJzIikKK0xPQ1ZBTChMT0NBTEVfU0lOVExTWU1CT0wsICJCT0IiKQorLyogTE9DVkFMKExPQ0FMRV9TTU9OREVDSU1BTFNFUCwiLCIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCwiLiIpICovCitMT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORywiMzswIikKKy8qIExPQ1ZBTChMT0NBTEVfSUNVUlJESUdJVFMsIjIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JSU5UTENVUlJESUdJVFMpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDVVJSRU5DWSwiMyIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdDVVJSLCI4IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBVEUsIi4iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVElNRSwiOiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NTSE9SVERBVEUsImRkL01NLXl5eXkiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTE9OR0RBVEUsImRkZCwgZC4gTU1NTSB5eXl5IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1RJTUVGT1JNQVQpICovCisvKiBMT0NWQUwoTE9DQUxFX0lEQVRFLCIxIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUxEQVRFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JVElNRSwiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lUSU1FTUFSS1BPU04pICovCisvKiBMT0NWQUwoTE9DQUxFX0lDRU5UVVJZKSAqLworLyogTE9DVkFMKExPQ0FMRV9JVExaRVJPLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSURBWUxaRVJPKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTU9OTFpFUk8pICovCisvKiBMT0NWQUwoTE9DQUxFX1MxMTU5LCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfUzIzNTksICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ0FMRU5EQVJUWVBFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JT1BUSU9OQUxDQUxFTkRBUikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUREFZT0ZXRUVLKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRklSU1RXRUVLT0ZZRUFSKSAqLworCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMSwibHVuZXMiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsIm1hcnRlcyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywibWk/cmNvbGVzIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCJqdWV2ZXMiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsInZpZXJuZXMiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsInM/YWJhZG8iKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTcsImRvbWluZ28iKQorCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwibHVuIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCJtYXIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsIm1pPyIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwianVlIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCJ2aWUiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiIikgKi8KKworTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiZW5lcm8iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiZmVicmVybyIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCJtYXJ6byIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCJhYnJpbCIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU1LCJtYXlvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsImp1bmlvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTcsImp1bGlvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTgsImFnb3N0byIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU5LCJzZXB0aWVtYnJlIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCJvY3R1YnJlIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTExLCJub3ZpZW1icmUiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsImRpY2llbWJyZSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMywiIikKKworTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSwiZW5lIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsImZlYiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzLCJtYXIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCwiYWJyIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUsIm1heSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2LCJqdW4iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNywianVsIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgsImFnbyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5LCJzZXAiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAsIm9jdCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwibm92IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyLCJkaWMiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMsIiIpCisKKy8qIExPQ1ZBTChMT0NBTEVfU1BPU0lUSVZFU0lHTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NORUdBVElWRVNJR04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU0lHTlBPU04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU0lHTlBPU04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU1lNUFJFQ0VERVMsICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU0VQQllTUEFDRSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTWU1QUkVDRURFUywgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTRVBCWVNQQUNFLCAiIikgKi8KKworLyogY2FsZW5kYXJpbyBncmVnb3JpYW5vICovCmRpZmYgLS1naXQgYS9vbGUvbmxzL2VzYy5ubHMgYi9vbGUvbmxzL2VzYy5ubHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE5YjY3ZAotLS0gL2Rldi9udWxsCisrKyBiL29sZS9ubHMvZXNjLm5scwpAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqCU9MRTJOTFMgbGlicmFyeQorICogICAgICBTcGFuaXNoIChDb3N0YSBSaWNhKQorICovCisKKy8qIExPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsIiIpICovCitMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiU3BhbmlzaCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZMQU5HTkFNRSwiZXNhIikKK0xPQ1ZBTChMT0NBTEVfU05BVElWRUxBTkdOQU1FLCJDb3N0YSBSaWNhIikKKy8qIExPQ1ZBTChMT0NBTEVfSUNPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NDT1VOVFJZLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TRU5HQ09VTlRSWSwiQ29zdGEgUmljYSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiQ1JJIikKK0xPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCJDb3N0YSBSaWNhIikKKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPREVQQUdFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xJU1QsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lNRUFTVVJFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREVDSU1BTCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1RIT1VTQU5ELCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TR1JPVVBJTkcpICovCisvKiBMT0NWQUwoTE9DQUxFX0lESUdJVFMsIjIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTFpFUk8sIjEiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHTlVNQkVSKSAqLworTE9DVkFMKExPQ0FMRV9TTkFUSVZFRElHSVRTLCAiMDEyMzQ1Njc4OSIpCitMT0NWQUwoTE9DQUxFX1NDVVJSRU5DWSwiQyIpCitMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MLCAiQ1JDIikKKy8qIExPQ1ZBTChMT0NBTEVfU01PTkRFQ0lNQUxTRVAsIiwiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhPVVNBTkRTRVAsIi4iKSAqLworTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcsIjM7MCIpCisvKiBMT0NWQUwoTE9DQUxFX0lDVVJSRElHSVRTLCIyIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUlOVExDVVJSRElHSVRTKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ1VSUkVOQ1ksIjMiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHQ1VSUiwiOCIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVRFLCIuIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1RJTUUsIjoiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TU0hPUlREQVRFLCJkZC9NTS15eXl5IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xPTkdEQVRFLCJkZGQsIGQuIE1NTU0geXl5eSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSU1FRk9STUFUKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREFURSwiMSIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lMREFURSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVRJTUUsIjEiKQorLyogTE9DVkFMKExPQ0FMRV9JVElNRU1BUktQT1NOKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ0VOVFVSWSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVRMWkVSTywiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lEQVlMWkVSTykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU1PTkxaRVJPKSAqLworTE9DVkFMKExPQ0FMRV9TMTE1OSwgIkFNIikKK0xPQ1ZBTChMT0NBTEVfUzIzNTksICJQTSIpCisvKiBMT0NWQUwoTE9DQUxFX0lDQUxFTkRBUlRZUEUpICovCisvKiBMT0NWQUwoTE9DQUxFX0lPUFRJT05BTENBTEVOREFSKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUspICovCisvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIpICovCisKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCJsdW5lcyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMiwibWFydGVzIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCJtaT9yY29sZXMiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTQsImp1ZXZlcyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNSwidmllcm5lcyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwicz9hYmFkbyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywiZG9taW5nbyIpCisKKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCJsdW4iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsIm1hciIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywibWk/IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCJqdWUiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsInZpZSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCIiKSAqLworCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCJlbmVybyIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUyLCJmZWJyZXJvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTMsIm1hcnpvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTQsImFicmlsIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTUsIm1heW8iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNiwianVuaW8iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNywianVsaW8iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOCwiYWdvc3RvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksInNlcHRpZW1icmUiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTAsIm9jdHVicmUiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTEsIm5vdmllbWJyZSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMiwiZGljaWVtYnJlIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEzLCIiKQorCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxLCJlbmUiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiwiZmViIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMsIm1hciIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0LCJhYnIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwibWF5IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYsImp1biIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3LCJqdWwiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCwiYWdvIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTksInNlcCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCwib2N0IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExLCJub3YiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsImRpYyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMywiIikKKworLyogTE9DVkFMKExPQ0FMRV9TUE9TSVRJVkVTSUdOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTSUdOUE9TTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTSUdOUE9TTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTWU1QUkVDRURFUywgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTRVBCWVNQQUNFLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NZTVBSRUNFREVTLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NFUEJZU1BBQ0UsICIiKSAqLworCisvKiBjYWxlbmRhcmlvIGdyZWdvcmlhbm8gKi8KZGlmZiAtLWdpdCBhL29sZS9ubHMvZXNkLm5scyBiL29sZS9ubHMvZXNkLm5scwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWVlOGM3Ci0tLSAvZGV2L251bGwKKysrIGIvb2xlL25scy9lc2QubmxzCkBAIC0wLDAgKzEsMTExIEBACisvKgorICoJT0xFMk5MUyBsaWJyYXJ5CisgKiAgICAgIFNwYW5pc2ggKERvbWluaWNhbiBSZXB1YmxpYykKKyAqLworCisvKiBMT0NWQUwoTE9DQUxFX0lMQU5HVUFHRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIlNwYW5pc2giKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTEFOR05BTUUsImVzZCIpCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwiUmVwP2JsaWNhIERvbWluaWNhbmEiKQorLyogTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIiIpICovCitMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCJEb21pbmljYW4gUmVwdWJsaWMiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIkRNQSIpCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwiRXNwYYBhIikKKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPREVQQUdFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xJU1QsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lNRUFTVVJFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREVDSU1BTCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1RIT1VTQU5ELCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TR1JPVVBJTkcpICovCisvKiBMT0NWQUwoTE9DQUxFX0lESUdJVFMsIjIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTFpFUk8sIjEiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHTlVNQkVSKSAqLworTE9DVkFMKExPQ0FMRV9TTkFUSVZFRElHSVRTLCAiMDEyMzQ1Njc4OSIpCitMT0NWQUwoTE9DQUxFX1NDVVJSRU5DWSwiUkQkIikKK0xPQ1ZBTChMT0NBTEVfU0lOVExTWU1CT0wsICJET1AiKQorLyogTE9DVkFMKExPQ0FMRV9TTU9OREVDSU1BTFNFUCwiLCIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCwiLiIpICovCitMT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORywiMzswIikKKy8qIExPQ1ZBTChMT0NBTEVfSUNVUlJESUdJVFMsIjIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JSU5UTENVUlJESUdJVFMpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDVVJSRU5DWSwiMyIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdDVVJSLCI4IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBVEUsIi4iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVElNRSwiOiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NTSE9SVERBVEUsImRkL01NLXl5eXkiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTE9OR0RBVEUsImRkZCwgZC4gTU1NTSB5eXl5IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1RJTUVGT1JNQVQpICovCisvKiBMT0NWQUwoTE9DQUxFX0lEQVRFLCIxIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUxEQVRFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JVElNRSwiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lUSU1FTUFSS1BPU04pICovCisvKiBMT0NWQUwoTE9DQUxFX0lDRU5UVVJZKSAqLworLyogTE9DVkFMKExPQ0FMRV9JVExaRVJPLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSURBWUxaRVJPKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTU9OTFpFUk8pICovCisvKiBMT0NWQUwoTE9DQUxFX1MxMTU5LCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfUzIzNTksICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ0FMRU5EQVJUWVBFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JT1BUSU9OQUxDQUxFTkRBUikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUREFZT0ZXRUVLKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRklSU1RXRUVLT0ZZRUFSKSAqLworCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMSwibHVuZXMiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsIm1hcnRlcyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywibWk/cmNvbGVzIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCJqdWV2ZXMiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsInZpZXJuZXMiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsInM/YWJhZG8iKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTcsImRvbWluZ28iKQorCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwibHVuIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCJtYXIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsIm1pPyIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwianVlIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCJ2aWUiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiIikgKi8KKworTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiZW5lcm8iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiZmVicmVybyIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCJtYXJ6byIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCJhYnJpbCIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU1LCJtYXlvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsImp1bmlvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTcsImp1bGlvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTgsImFnb3N0byIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU5LCJzZXB0aWVtYnJlIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCJvY3R1YnJlIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTExLCJub3ZpZW1icmUiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsImRpY2llbWJyZSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMywiIikKKworTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSwiZW5lIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsImZlYiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzLCJtYXIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCwiYWJyIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUsIm1heSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2LCJqdW4iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNywianVsIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgsImFnbyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5LCJzZXAiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAsIm9jdCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwibm92IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyLCJkaWMiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMsIiIpCisKKy8qIExPQ1ZBTChMT0NBTEVfU1BPU0lUSVZFU0lHTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NORUdBVElWRVNJR04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU0lHTlBPU04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU0lHTlBPU04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU1lNUFJFQ0VERVMsICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU0VQQllTUEFDRSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTWU1QUkVDRURFUywgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTRVBCWVNQQUNFLCAiIikgKi8KKworLyogY2FsZW5kYXJpbyBncmVnb3JpYW5vICovCmRpZmYgLS1naXQgYS9vbGUvbmxzL2VzZS5ubHMgYi9vbGUvbmxzL2VzZS5ubHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE0MTBhYwotLS0gL2Rldi9udWxsCisrKyBiL29sZS9ubHMvZXNlLm5scwpAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqCU9MRTJOTFMgbGlicmFyeQorICogICAgICBTcGFuaXNoIChFbCBTYWx2YWRvcikKKyAqLworCisvKiBMT0NWQUwoTE9DQUxFX0lMQU5HVUFHRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIlNwYW5pc2giKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTEFOR05BTUUsImVzZSIpCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwiRXNwYYBvbCIpCisvKiBMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIkVsIFNhbHZhZG9yIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCJTVkQiKQorTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsIkVzcGGAYSIpCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUTEFOR1VBR0UsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMSVNULCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTUVBU1VSRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RFQ0lNQUwsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSE9VU0FORCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0dST1VQSU5HKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRElHSVRTLCIyIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUxaRVJPLCIxIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR05VTUJFUikgKi8KK0xPQ1ZBTChMT0NBTEVfU05BVElWRURJR0lUUywgIjAxMjM0NTY3ODkiKQorTE9DVkFMKExPQ0FMRV9TQ1VSUkVOQ1ksIkMiKQorTE9DVkFMKExPQ0FMRV9TSU5UTFNZTUJPTCwgIlNWQyIpCisvKiBMT0NWQUwoTE9DQUxFX1NNT05ERUNJTUFMU0VQLCIsIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRIT1VTQU5EU0VQLCIuIikgKi8KK0xPQ1ZBTChMT0NBTEVfU01PTkdST1VQSU5HLCIzOzAiKQorLyogTE9DVkFMKExPQ0FMRV9JQ1VSUkRJR0lUUywiMiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNVUlJFTkNZLCIzIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR0NVUlIsIjgiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFURSwiLiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSU1FLCI6IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1NIT1JUREFURSwiZGQvTU0teXl5eSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMT05HREFURSwiZGRkLCBkLiBNTU1NIHl5eXkiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVElNRUZPUk1BVCkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURBVEUsIjEiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTERBVEUpICovCisvKiBMT0NWQUwoTE9DQUxFX0lUSU1FLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSVRJTUVNQVJLUE9TTikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNFTlRVUlkpICovCisvKiBMT0NWQUwoTE9DQUxFX0lUTFpFUk8sIjEiKQorLyogTE9DVkFMKExPQ0FMRV9JREFZTFpFUk8pICovCisvKiBMT0NWQUwoTE9DQUxFX0lNT05MWkVSTykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfUzExNTksICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TMjM1OSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDQUxFTkRBUlRZUEUpICovCisvKiBMT0NWQUwoTE9DQUxFX0lPUFRJT05BTENBTEVOREFSKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUspICovCisvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIpICovCisKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCJsdW5lcyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMiwibWFydGVzIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCJtaT9yY29sZXMiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTQsImp1ZXZlcyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNSwidmllcm5lcyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwicz9hYmFkbyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywiZG9taW5nbyIpCisKKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCJsdW4iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsIm1hciIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywibWk/IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCJqdWUiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsInZpZSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCIiKSAqLworCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCJlbmVybyIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUyLCJmZWJyZXJvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTMsIm1hcnpvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTQsImFicmlsIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTUsIm1heW8iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNiwianVuaW8iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNywianVsaW8iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOCwiYWdvc3RvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksInNlcHRpZW1icmUiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTAsIm9jdHVicmUiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTEsIm5vdmllbWJyZSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMiwiZGljaWVtYnJlIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEzLCIiKQorCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxLCJlbmUiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiwiZmViIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMsIm1hciIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0LCJhYnIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwibWF5IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYsImp1biIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3LCJqdWwiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCwiYWdvIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTksInNlcCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCwib2N0IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExLCJub3YiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsImRpYyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMywiIikKKworLyogTE9DVkFMKExPQ0FMRV9TUE9TSVRJVkVTSUdOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTSUdOUE9TTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTSUdOUE9TTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTWU1QUkVDRURFUywgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTRVBCWVNQQUNFLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NZTVBSRUNFREVTLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NFUEJZU1BBQ0UsICIiKSAqLworCisvKiBjYWxlbmRhcmlvIGdyZWdvcmlhbm8gKi8KZGlmZiAtLWdpdCBhL29sZS9ubHMvZXNmLm5scyBiL29sZS9ubHMvZXNmLm5scwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTNmYmViCi0tLSAvZGV2L251bGwKKysrIGIvb2xlL25scy9lc2YubmxzCkBAIC0wLDAgKzEsMTExIEBACisvKgorICoJT0xFMk5MUyBsaWJyYXJ5CisgKiAgICAgIFNwYW5pc2ggKEVjdWFkb3IpCisgKi8KKworLyogTE9DVkFMKExPQ0FMRV9JTEFOR1VBR0UsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0VOR0xBTkdVQUdFLCJTcGFuaXNoIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJlc2YiKQorTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIkVzcGGAb2wiKQorLyogTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIkVjdWFkb3IiKQorTE9DVkFMKExPQ0FMRV9TRU5HQ09VTlRSWSwiRWN1YWRvciIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiRUNVIikKK0xPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCJFY3VhZG9yIikKKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPREVQQUdFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xJU1QsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lNRUFTVVJFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREVDSU1BTCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1RIT1VTQU5ELCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TR1JPVVBJTkcpICovCisvKiBMT0NWQUwoTE9DQUxFX0lESUdJVFMsIjIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTFpFUk8sIjEiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHTlVNQkVSKSAqLworTE9DVkFMKExPQ0FMRV9TTkFUSVZFRElHSVRTLCAiMDEyMzQ1Njc4OSIpCitMT0NWQUwoTE9DQUxFX1NDVVJSRU5DWSwiUyIpCitMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MLCAiRUNTIikKKy8qIExPQ1ZBTChMT0NBTEVfU01PTkRFQ0lNQUxTRVAsIiwiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhPVVNBTkRTRVAsIi4iKSAqLworTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcsICIzOzAiKQorLyogTE9DVkFMKExPQ0FMRV9JQ1VSUkRJR0lUUywiMiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNVUlJFTkNZLCIzIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR0NVUlIsIjgiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFURSwiLiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSU1FLCI6IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1NIT1JUREFURSwiZGQvTU0teXl5eSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMT05HREFURSwiZGRkLCBkLiBNTU1NIHl5eXkiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVElNRUZPUk1BVCkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURBVEUsIjEiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTERBVEUpICovCisvKiBMT0NWQUwoTE9DQUxFX0lUSU1FLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSVRJTUVNQVJLUE9TTikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNFTlRVUlkpICovCisvKiBMT0NWQUwoTE9DQUxFX0lUTFpFUk8sIjEiKQorLyogTE9DVkFMKExPQ0FMRV9JREFZTFpFUk8pICovCisvKiBMT0NWQUwoTE9DQUxFX0lNT05MWkVSTykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfUzExNTksICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TMjM1OSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDQUxFTkRBUlRZUEUpICovCisvKiBMT0NWQUwoTE9DQUxFX0lPUFRJT05BTENBTEVOREFSKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUspICovCisvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIpICovCisKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCJsdW5lcyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMiwibWFydGVzIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCJtaT9yY29sZXMiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTQsImp1ZXZlcyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNSwidmllcm5lcyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwicz9hYmFkbyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywiZG9taW5nbyIpCisKKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCJsdW4iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsIm1hciIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywibWk/IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCJqdWUiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsInZpZSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCIiKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiZmVicmVybyIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCJtYXJ6byIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCJhYnJpbCIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU1LCJtYXlvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsImp1bmlvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTcsImp1bGlvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTgsImFnb3N0byIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU5LCJzZXB0aWVtYnJlIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCJvY3R1YnJlIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTExLCJub3ZpZW1icmUiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsImRpY2llbWJyZSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMywiIikKKworTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSwiZW5lIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsImZlYiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzLCJtYXIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCwiYWJyIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUsIm1heSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2LCJqdW4iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNywianVsIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgsImFnbyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5LCJzZXAiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAsIm9jdCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwibm92IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyLCJkaWMiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMsIiIpCisKKy8qIExPQ1ZBTChMT0NBTEVfU1BPU0lUSVZFU0lHTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NORUdBVElWRVNJR04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU0lHTlBPU04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU0lHTlBPU04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU1lNUFJFQ0VERVMsICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU0VQQllTUEFDRSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTWU1QUkVDRURFUywgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTRVBCWVNQQUNFLCAiIikgKi8KKworLyogY2FsZW5kYXJpbyBncmVnb3JpYW5vICovCmRpZmYgLS1naXQgYS9vbGUvbmxzL2VzZy5ubHMgYi9vbGUvbmxzL2VzZy5ubHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VlM2UyMwotLS0gL2Rldi9udWxsCisrKyBiL29sZS9ubHMvZXNnLm5scwpAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqCU9MRTJOTFMgbGlicmFyeQorICogICAgICBTcGFuaXNoIChHdWF0ZW1hbGEpCisgKi8KKworLyogTE9DVkFMKExPQ0FMRV9JTEFOR1VBR0UsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0VOR0xBTkdVQUdFLCJTcGFuaXNoIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJlc2ciKQorTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIkVzcGGAb2wiKQorLyogTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIkd1YXRlbWFsYSIpCitMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCJHdWF0ZW1hbGEiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIkdUTSIpCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwiR3VhdGVtYWxhIikKKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPREVQQUdFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xJU1QsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lNRUFTVVJFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREVDSU1BTCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1RIT1VTQU5ELCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TR1JPVVBJTkcpICovCisvKiBMT0NWQUwoTE9DQUxFX0lESUdJVFMsIjIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTFpFUk8sIjEiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHTlVNQkVSKSAqLworTE9DVkFMKExPQ0FMRV9TTkFUSVZFRElHSVRTLCAiMDEyMzQ1Njc4OSIpCitMT0NWQUwoTE9DQUxFX1NDVVJSRU5DWSwiUSIpCitMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MLCAiR1RRIikKKy8qIExPQ1ZBTChMT0NBTEVfU01PTkRFQ0lNQUxTRVAsIiwiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhPVVNBTkRTRVAsIi4iKSAqLworTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcsICIzOzAiKQorLyogTE9DVkFMKExPQ0FMRV9JQ1VSUkRJR0lUUywiMiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNVUlJFTkNZLCIzIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR0NVUlIsIjgiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFURSwiLiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSU1FLCI6IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1NIT1JUREFURSwiZGQvTU0teXl5eSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMT05HREFURSwiZGRkLCBkLiBNTU1NIHl5eXkiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVElNRUZPUk1BVCkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURBVEUsIjEiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTERBVEUpICovCisvKiBMT0NWQUwoTE9DQUxFX0lUSU1FLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSVRJTUVNQVJLUE9TTikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNFTlRVUlkpICovCisvKiBMT0NWQUwoTE9DQUxFX0lUTFpFUk8sIjEiKQorLyogTE9DVkFMKExPQ0FMRV9JREFZTFpFUk8pICovCisvKiBMT0NWQUwoTE9DQUxFX0lNT05MWkVSTykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfUzExNTksICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TMjM1OSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDQUxFTkRBUlRZUEUpICovCisvKiBMT0NWQUwoTE9DQUxFX0lPUFRJT05BTENBTEVOREFSKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUspICovCisvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIpICovCisKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCJsdW5lcyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMiwibWFydGVzIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCJtaT9yY29sZXMiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTQsImp1ZXZlcyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNSwidmllcm5lcyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwicz9hYmFkbyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywiZG9taW5nbyIpCisKKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCJsdW4iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsIm1hciIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywibWk/IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCJqdWUiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsInZpZSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCIiKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiZmVicmVybyIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCJtYXJ6byIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCJhYnJpbCIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU1LCJtYXlvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsImp1bmlvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTcsImp1bGlvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTgsImFnb3N0byIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU5LCJzZXB0aWVtYnJlIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCJvY3R1YnJlIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTExLCJub3ZpZW1icmUiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsImRpY2llbWJyZSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMywiIikKKworTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSwiZW5lIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsImZlYiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzLCJtYXIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCwiYWJyIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUsIm1heSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2LCJqdW4iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNywianVsIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgsImFnbyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5LCJzZXAiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAsIm9jdCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwibm92IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyLCJkaWMiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMsIiIpCisKKy8qIExPQ1ZBTChMT0NBTEVfU1BPU0lUSVZFU0lHTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NORUdBVElWRVNJR04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU0lHTlBPU04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU0lHTlBPU04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU1lNUFJFQ0VERVMsICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU0VQQllTUEFDRSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTWU1QUkVDRURFUywgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTRVBCWVNQQUNFLCAiIikgKi8KKworLyogY2FsZW5kYXJpbyBncmVnb3JpYW5vICovCmRpZmYgLS1naXQgYS9vbGUvbmxzL2VzaC5ubHMgYi9vbGUvbmxzL2VzaC5ubHMKaW5kZXggOWE4YTlmMS4uYmQyZTc0MyAxMDA2NDQKLS0tIGEvb2xlL25scy9lc2gubmxzCisrKyBiL29sZS9ubHMvZXNoLm5scwpAQCAtNCwxNyArNCwxOCBAQAogICovCiAKIC8qIExPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsIiIpICovCi1MT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiU3BhbmlzaCIpCitMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiRXNwYfFvbCAoSG9uZHVyYXMpIikKK0xPQ1ZBTChMT0NBTEVfU0VOR0xBTkdVQUdFLCJTcGFuaXNoIChIb25kdXJhcykiKQogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTEFOR05BTUUsImVzaCIpCi0vKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU05BVElWRUxBTkdOQU1FLCJFc3Bh8W9sIChIb25kdXJhcykiKQogLyogTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIiIpICovCi1MT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCJTcGFpbiIpCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCJFc3BhgGEiKSAqLworTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiSG9uZHVyYXMiKQorTE9DVkFMKExPQ0FMRV9TRU5HQ09VTlRSWSwiSG9uZHVyYXMiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIkhORCIpCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwiSG9uZHVyYXMiKQogLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksIiIpICovCitMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UsIjg1MCIpCiAvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFKSAqLwogLyogTE9DVkFMKExPQ0FMRV9TTElTVCwiIikgKi8KQEAgLTI2LDggKzI3LDggQEAKIC8qIExPQ1ZBTChMT0NBTEVfSUxaRVJPLCIxIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSU5FR05VTUJFUikgKi8KIExPQ1ZBTChMT0NBTEVfU05BVElWRURJR0lUUywgIjAxMjM0NTY3ODkiKQotTE9DVkFMKExPQ0FMRV9TQ1VSUkVOQ1ksIlB0cyIpCi1MT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MLCAiRVNQIikKK0xPQ1ZBTChMT0NBTEVfU0NVUlJFTkNZLCJMIikKK0xPQ1ZBTChMT0NBTEVfU0lOVExTWU1CT0wsICJITkwiKQogLyogTE9DVkFMKExPQ0FMRV9TTU9OREVDSU1BTFNFUCwiLCIpICovCiAvKiBMT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCwiLiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORykgKi8KQEAgLTU3LDIxICs1OCwyMSBAQAogCiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMSwibHVuZXMiKQogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsIm1hcnRlcyIpCi1MT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywibWk/cmNvbGVzIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCJtaelyY29sZXMiKQogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTQsImp1ZXZlcyIpCiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNSwidmllcm5lcyIpCi1MT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwicz9hYmFkbyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwic+FiYWRvIikKIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCJkb21pbmdvIikKIAotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsImx1biIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwibWFyIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCJtaT8iKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsImp1ZSIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwidmllIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsIiIpICovCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwibHVuIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCJtYXIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsIm1p6SIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwianVlIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCJ2aWUiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsInPhYiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiZG9tIikKIAotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEsImVuZXJvIikKIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsImZlYnJlcm8iKQogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMywibWFyem8iKQogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwiYWJyaWwiKQpAQCAtOTksOCArMTAwLDggQEAKIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyLCJkaWMiKQogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMsIiIpCiAKLS8qIExPQ1ZBTChMT0NBTEVfU1BPU0lUSVZFU0lHTiwgIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NORUdBVElWRVNJR04sICIiKSAqLworTE9DVkFMKExPQ0FMRV9TUE9TSVRJVkVTSUdOLCAiIikKK0xPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTiwgIi0iKQogLyogTE9DVkFMKExPQ0FMRV9JUE9TU0lHTlBPU04sICIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JTkVHU0lHTlBPU04sICIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JUE9TU1lNUFJFQ0VERVMsICIiKSAqLwpAQCAtMTA4LDMgKzEwOSw0IEBACiAvKiBMT0NWQUwoTE9DQUxFX0lORUdTWU1QUkVDRURFUywgIiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lORUdTRVBCWVNQQUNFLCAiIikgKi8KIAorLyogY2FsZW5kYXJpbyBncmVnb3JpYW5vICovCmRpZmYgLS1naXQgYS9vbGUvbmxzL2VzaS5ubHMgYi9vbGUvbmxzL2VzaS5ubHMKaW5kZXggMmM1Zjg4MS4uNTdiMDUzOCAxMDA2NDQKLS0tIGEvb2xlL25scy9lc2kubmxzCisrKyBiL29sZS9ubHMvZXNpLm5scwpAQCAtNCwxOCArNCwxOCBAQAogICovCiAKIC8qIExPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsIiIpICovCi1MT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiU3BhbmlzaCIpCitMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiRXNwYfFvbCAoTmljYXJhZ3VhKSIpCitMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiU3BhbmlzaCAoTmljYXJhZ3VhKSIpCiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZMQU5HTkFNRSwiZXNpIikKLS8qIExPQ1ZBTChMT0NBTEVfU05BVElWRUxBTkdOQU1FLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIkVzcGHxb2wgKE5pY2FyYWd1YSkiKQogLyogTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIiIpICovCi1MT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCJTcGFpbiIpCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCJFc3BhgGEiKSAqLworTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiTmljYXJhZ3VhIikKK0xPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIk5pY2FyYWd1YSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiTklDIikKK0xPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCJOaWNhcmFndWEiKQogLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UpICovCitMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UsIjg1MCIpCiAvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFKSAqLwogLyogTE9DVkFMKExPQ0FMRV9TTElTVCwiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSU1FQVNVUkUsIiIpICovCkBAIC0yNiw4ICsyNiw4IEBACiAvKiBMT0NWQUwoTE9DQUxFX0lMWkVSTywiMSIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lORUdOVU1CRVIpICovCiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVESUdJVFMsICIwMTIzNDU2Nzg5IikKLUxPQ1ZBTChMT0NBTEVfU0NVUlJFTkNZLCJQdHMiKQotTE9DVkFMKExPQ0FMRV9TSU5UTFNZTUJPTCwgIkVTUCIpCisvKiBMT0NWQUwoTE9DQUxFX1NDVVJSRU5DWSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0lOVExTWU1CT0wsICJOSU8iKQogLyogTE9DVkFMKExPQ0FMRV9TTU9OREVDSU1BTFNFUCwiLCIpICovCiAvKiBMT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCwiLiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORykgKi8KQEAgLTU3LDIxICs1NywyMSBAQAogCiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMSwibHVuZXMiKQogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsIm1hcnRlcyIpCi1MT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywibWk/cmNvbGVzIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCJtaelyY29sZXMiKQogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTQsImp1ZXZlcyIpCiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNSwidmllcm5lcyIpCi1MT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwicz9hYmFkbyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwic+FiYWRvIikKIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCJkb21pbmdvIikKIAotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsImx1biIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwibWFyIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCJtaT8iKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsImp1ZSIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwidmllIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsIiIpICovCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwibHVuIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCJtYXIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsIm1p6SIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwianVlIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCJ2aWUiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsInPhYiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiZG9tIikKIAotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEsImVuZXJvIikKIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsImZlYnJlcm8iKQogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMywibWFyem8iKQogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwiYWJyaWwiKQpAQCAtOTksOCArOTksOCBAQAogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsImRpYyIpCiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMywiIikKIAotLyogTE9DVkFMKExPQ0FMRV9TUE9TSVRJVkVTSUdOLCAiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTiwgIiIpICovCitMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04sICIiKQorTE9DVkFMKExPQ0FMRV9TTkVHQVRJVkVTSUdOLCAiLSIpCiAvKiBMT0NWQUwoTE9DQUxFX0lQT1NTSUdOUE9TTiwgIiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lORUdTSUdOUE9TTiwgIiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lQT1NTWU1QUkVDRURFUywgIiIpICovCkBAIC0xMDgsMyArMTA4LDUgQEAKIC8qIExPQ1ZBTChMT0NBTEVfSU5FR1NZTVBSRUNFREVTLCAiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSU5FR1NFUEJZU1BBQ0UsICIiKSAqLwogCisvKiBjYWxlbmRhcmlvIGdyZWdvcmlhbm8gKi8KKwpkaWZmIC0tZ2l0IGEvb2xlL25scy9lc2wubmxzIGIvb2xlL25scy9lc2wubmxzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmOTMzOWEKLS0tIC9kZXYvbnVsbAorKysgYi9vbGUvbmxzL2VzbC5ubHMKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKglPTEUyTkxTIGxpYnJhcnkKKyAqICAgICAgU3BhbmlzaCAoQ2hpbGUpCisgKi8KKworLyogTE9DVkFMKExPQ0FMRV9JTEFOR1VBR0UsIiIpICovCitMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiU3BhbmlzaCAoQ2hpbGUpIikKK0xPQ1ZBTChMT0NBTEVfU0VOR0xBTkdVQUdFLCJTcGFuaXNoIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJlc2wiKQorTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIkVzcGGAb2wiKQorLyogTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIiIpICovCitMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCJDaGlsZSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiQ0hMIikKKy8qIExPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCJDaGlsZSIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUTEFOR1VBR0UsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMSVNULCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTUVBU1VSRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RFQ0lNQUwsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSE9VU0FORCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0dST1VQSU5HKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRElHSVRTLCIyIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUxaRVJPLCIxIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR05VTUJFUikgKi8KK0xPQ1ZBTChMT0NBTEVfU05BVElWRURJR0lUUywgIjAxMjM0NTY3ODkiKQorTE9DVkFMKExPQ0FMRV9TQ1VSUkVOQ1ksIkNoJCIpCitMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MLCAiQ0xQIikKKy8qIExPQ1ZBTChMT0NBTEVfU01PTkRFQ0lNQUxTRVAsIiwiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhPVVNBTkRTRVAsIi4iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDVVJSRElHSVRTLCIyIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUlOVExDVVJSRElHSVRTKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ1VSUkVOQ1ksIjMiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHQ1VSUiwiOCIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVRFLCIuIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1RJTUUsIjoiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TU0hPUlREQVRFLCJkZC9NTS15eXl5IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xPTkdEQVRFLCJkZGQsIGQuIE1NTU0geXl5eSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSU1FRk9STUFUKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREFURSwiMSIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lMREFURSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVRJTUUsIjEiKQorLyogTE9DVkFMKExPQ0FMRV9JVElNRU1BUktQT1NOKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ0VOVFVSWSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVRMWkVSTywiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lEQVlMWkVSTykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU1PTkxaRVJPKSAqLworLyogTE9DVkFMKExPQ0FMRV9TMTE1OSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1MyMzU5LCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNBTEVOREFSVFlQRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU9QVElPTkFMQ0FMRU5EQVIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVERBWU9GV0VFSykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUV0VFS09GWUVBUikgKi8KKworTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsImx1bmVzIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUyLCJtYXJ0ZXMiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsIm1pP3Jjb2xlcyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwianVldmVzIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU1LCJ2aWVybmVzIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCJzP2FiYWRvIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCJkb21pbmdvIikKKworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsImx1biIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwibWFyIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCJtaT8iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsImp1ZSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwidmllIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsIiIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEsIiIpICovCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUyLCJmZWJyZXJvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTMsIm1hcnpvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTQsImFicmlsIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTUsIm1heW8iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNiwianVuaW8iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNywianVsaW8iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOCwiYWdvc3RvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksInNlcHRpZW1icmUiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTAsIm9jdHVicmUiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTEsIm5vdmllbWJyZSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMiwiZGljaWVtYnJlIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEzLCIiKQorCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxLCJlbmUiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiwiZmViIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMsIm1hciIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0LCJhYnIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwibWF5IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYsImp1biIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3LCJqdWwiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCwiYWdvIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTksInNlcCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCwib2N0IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExLCJub3YiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsImRpYyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMywiIikKKworLyogTE9DVkFMKExPQ0FMRV9TUE9TSVRJVkVTSUdOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTSUdOUE9TTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTSUdOUE9TTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTWU1QUkVDRURFUywgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTRVBCWVNQQUNFLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NZTVBSRUNFREVTLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NFUEJZU1BBQ0UsICIiKSAqLworCmRpZmYgLS1naXQgYS9vbGUvbmxzL2VzbS5ubHMgYi9vbGUvbmxzL2VzbS5ubHMKaW5kZXggNjMwMjNjNi4uNjk5MDU5NCAxMDA2NDQKLS0tIGEvb2xlL25scy9lc20ubmxzCisrKyBiL29sZS9ubHMvZXNtLm5scwpAQCAtMSwyMSArMSwyMSBAQAogLyoKICAqCU9MRTJOTFMgbGlicmFyeQotICogICAgICBNZXhpa28KKyAqICAgICAgTWV4aWNvCiAgKi8KIAogLyogTE9DVkFMKExPQ0FMRV9JTEFOR1VBR0UsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiIikgKi8KLUxPQ1ZBTChMT0NBTEVfU0VOR0xBTkdVQUdFLCJTcGFuaXNoIikKK0xPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCJFc3Bh8W9sIChNZXhpY28pIikKK0xPQ1ZBTChMT0NBTEVfU0VOR0xBTkdVQUdFLCJTcGFuaXNoIChNZXhpY28pIikKIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJlc20iKQotLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIiIpICovCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwiRXNwYfFvbCAoTWV4aWNvKSIpCiAvKiBMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIk1leGljbyIpCiBMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCJNZXhpY28iKQotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwiRXNwYYBhIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCJNeCIpCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwiTWV4aWNvIikKIC8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSwiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT1VOVFJZLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPREVQQUdFKSAqLworTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPREVQQUdFLCI4NTAiKQogLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSkgKi8KIC8qIExPQ1ZBTChMT0NBTEVfU0xJU1QsIiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lNRUFTVVJFLCIiKSAqLwpAQCAtMzAsNyArMzAsNyBAQAogTE9DVkFMKExPQ0FMRV9TSU5UTFNZTUJPTCwgIk1YTiIpCiAvKiBMT0NWQUwoTE9DQUxFX1NNT05ERUNJTUFMU0VQLCIsIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfU01PTlRIT1VTQU5EU0VQLCIuIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTkdST1VQSU5HKSAqLworTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcsICIzOzAiKQogLyogTE9DVkFMKExPQ0FMRV9JQ1VSUkRJR0lUUywiMiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUykgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSUNVUlJFTkNZLCIzIikgKi8KQEAgLTU3LDUwICs1Nyw1MCBAQAogCiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMSwibHVuZXMiKQogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsIm1hcnRlcyIpCi1MT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywibWk/cmNvbGVzIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCJtaelyY29sZXMiKQogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTQsImp1ZXZlcyIpCiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNSwidmllcm5lcyIpCi1MT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwicz9hYmFkbyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwic+FiYWRvIikKIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCJkb21pbmdvIikKIAotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsImx1biIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwibWFyIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCJtaT8iKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsImp1ZSIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwidmllIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsIiIpICovCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwibHVuIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCJtYXIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsIm1p6SIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwianVlIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCJ2aWUiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsInPhYiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiZG9tIikKIAotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiIikgKi8KLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsImZlYnJlcm8iKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMywibWFyem8iKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwiYWJyaWwiKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwibWF5byIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUU2LCJqdW5pbyIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCJqdWxpbyIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUU4LCJhZ29zdG8iKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOSwic2VwdGllbWJyZSIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMCwib2N0dWJyZSIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMSwibm92aWVtYnJlIikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEyLCJkaWNpZW1icmUiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiRW5lcm8iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiRmVicmVybyIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCJNYXJ6byIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCJBYnJpbCIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU1LCJNYXlvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsIkp1bmlvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTcsIkp1bGlvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTgsIkFnb3N0byIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU5LCJTZXB0aWVtYnJlIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCJPY3R1YnJlIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTExLCJOb3ZpZW1icmUiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsIkRpY2llbWJyZSIpCiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMywiIikKIAotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSwiZW5lIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsImZlYiIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzLCJtYXIiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCwiYWJyIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUsIm1heSIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2LCJqdW4iKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNywianVsIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgsImFnbyIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5LCJzZXAiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAsIm9jdCIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwibm92IikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyLCJkaWMiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSwiRW5lIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsIkZlYiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzLCJNYXIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCwiQWJyIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUsIk1heSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2LCJKdW4iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNywiSnVsIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgsIkFnbyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5LCJTZXAiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAsIk9jdCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwiTm92IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyLCJEaWMiKQogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMsIiIpCiAKLS8qIExPQ1ZBTChMT0NBTEVfU1BPU0lUSVZFU0lHTiwgIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NORUdBVElWRVNJR04sICIiKSAqLworTE9DVkFMKExPQ0FMRV9TUE9TSVRJVkVTSUdOLCAiIikKK0xPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTiwgIi0iKQogLyogTE9DVkFMKExPQ0FMRV9JUE9TU0lHTlBPU04sICIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JTkVHU0lHTlBPU04sICIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JUE9TU1lNUFJFQ0VERVMsICIiKSAqLwpAQCAtMTA4LDMgKzEwOCw0IEBACiAvKiBMT0NWQUwoTE9DQUxFX0lORUdTWU1QUkVDRURFUywgIiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lORUdTRVBCWVNQQUNFLCAiIikgKi8KIAorLyogY2FsZW5kYXJpbyBncmVnb3JpYW5vICovCmRpZmYgLS1naXQgYS9vbGUvbmxzL2Vzbi5ubHMgYi9vbGUvbmxzL2Vzbi5ubHMKaW5kZXggNjgzNGMyYS4uNjgwZjA0OCAxMDA2NDQKLS0tIGEvb2xlL25scy9lc24ubmxzCisrKyBiL29sZS9ubHMvZXNuLm5scwpAQCAtMSwyMSArMSwyMSBAQAogLyoKICAqCU9MRTJOTFMgbGlicmFyeQotICogICAgICBTcGFuaXNoIChNb2Rlcm4pCisgKiAgICAgIFNwYW5pc2ggKE1vZGVybiBTb3J0KQogICovCiAKIC8qIExPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsIiIpICovCi1MT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiU3BhbmlzaCIpCitMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiRXNwYfFvbCIpCitMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiU3BhbmlzaCAtIE1vZGVybiBTb3J0IikKIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJlc24iKQotLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIiIpICovCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwiRXNwYfFvbCAoTW9kZXJubykiKQogLyogTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIiIpICovCiBMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCJTcGFpbiIpCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCJFc3BhgGEiKSAqLworTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIkVzIikKK0xPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCJFc3Bh8WEiKQogLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UpICovCitMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UsIjg1MCIpCiAvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFKSAqLwogLyogTE9DVkFMKExPQ0FMRV9TTElTVCwiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSU1FQVNVUkUsIiIpICovCkBAIC0zMCw3ICszMCw3IEBACiBMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MLCAiRVNQIikKIC8qIExPQ1ZBTChMT0NBTEVfU01PTkRFQ0lNQUxTRVAsIiwiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhPVVNBTkRTRVAsIi4iKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcpICovCitMT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORywgIjM7MCIpCiAvKiBMT0NWQUwoTE9DQUxFX0lDVVJSRElHSVRTLCIyIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSUlOVExDVVJSRElHSVRTKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JQ1VSUkVOQ1ksIjMiKSAqLwpAQCAtNTcsMjEgKzU3LDIxIEBACiAKIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCJsdW5lcyIpCiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMiwibWFydGVzIikKLUxPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCJtaT9yY29sZXMiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsIm1p6XJjb2xlcyIpCiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwianVldmVzIikKIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU1LCJ2aWVybmVzIikKLUxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCJzP2FiYWRvIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCJz4WJhZG8iKQogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTcsImRvbWluZ28iKQogCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwibHVuIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCJtYXIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsIm1pPyIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwianVlIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCJ2aWUiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCJsdW4iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsIm1hciIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywibWnpIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCJqdWUiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsInZpZSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwic+FiIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCJkb20iKQogCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiZW5lcm8iKQogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiZmVicmVybyIpCiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCJtYXJ6byIpCiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCJhYnJpbCIpCkBAIC05OSw4ICs5OSw4IEBACiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiwiZGljIikKIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzLCIiKQogCi0vKiBMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04sICIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTkVHQVRJVkVTSUdOLCAiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU1BPU0lUSVZFU0lHTiwgIiIpCitMT0NWQUwoTE9DQUxFX1NORUdBVElWRVNJR04sICItIikKIC8qIExPQ1ZBTChMT0NBTEVfSVBPU1NJR05QT1NOLCAiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSU5FR1NJR05QT1NOLCAiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSVBPU1NZTVBSRUNFREVTLCAiIikgKi8KQEAgLTEwOCwzICsxMDgsNCBAQAogLyogTE9DVkFMKExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMsICIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JTkVHU0VQQllTUEFDRSwgIiIpICovCiAKKy8qIGNhbGVuZGFyaW8gZ3JlZ29yaWFubyAqLwpkaWZmIC0tZ2l0IGEvb2xlL25scy9lc28ubmxzIGIvb2xlL25scy9lc28ubmxzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3ODAxMDUKLS0tIC9kZXYvbnVsbAorKysgYi9vbGUvbmxzL2Vzby5ubHMKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKglPTEUyTkxTIGxpYnJhcnkKKyAqICAgICAgU3BhbmlzaCAoQ29sb21iaWEpCisgKi8KKworLyogTE9DVkFMKExPQ0FMRV9JTEFOR1VBR0UsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0VOR0xBTkdVQUdFLCJTcGFuaXNoIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJlc2ciKQorTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIkVzcGGAb2wiKQorLyogTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIkNvbG9tYmlhIikKK0xPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIkNvbG9tYmlhIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCJDT0wiKQorTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsIkNvbG9tYmlhIikKKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPREVQQUdFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xJU1QsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lNRUFTVVJFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREVDSU1BTCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1RIT1VTQU5ELCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TR1JPVVBJTkcpICovCisvKiBMT0NWQUwoTE9DQUxFX0lESUdJVFMsIjIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTFpFUk8sIjEiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHTlVNQkVSKSAqLworTE9DVkFMKExPQ0FMRV9TTkFUSVZFRElHSVRTLCAiMDEyMzQ1Njc4OSIpCitMT0NWQUwoTE9DQUxFX1NDVVJSRU5DWSwiQyQiKQorTE9DVkFMKExPQ0FMRV9TSU5UTFNZTUJPTCwgIkNPUCIpCisvKiBMT0NWQUwoTE9DQUxFX1NNT05ERUNJTUFMU0VQLCIsIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRIT1VTQU5EU0VQLCIuIikgKi8KK0xPQ1ZBTChMT0NBTEVfU01PTkdST1VQSU5HLCAiMzswIikKKy8qIExPQ1ZBTChMT0NBTEVfSUNVUlJESUdJVFMsIjIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JSU5UTENVUlJESUdJVFMpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDVVJSRU5DWSwiMyIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdDVVJSLCI4IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBVEUsIi4iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVElNRSwiOiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NTSE9SVERBVEUsImRkL01NLXl5eXkiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTE9OR0RBVEUsImRkZCwgZC4gTU1NTSB5eXl5IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1RJTUVGT1JNQVQpICovCisvKiBMT0NWQUwoTE9DQUxFX0lEQVRFLCIxIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUxEQVRFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JVElNRSwiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lUSU1FTUFSS1BPU04pICovCisvKiBMT0NWQUwoTE9DQUxFX0lDRU5UVVJZKSAqLworLyogTE9DVkFMKExPQ0FMRV9JVExaRVJPLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSURBWUxaRVJPKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTU9OTFpFUk8pICovCisvKiBMT0NWQUwoTE9DQUxFX1MxMTU5LCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfUzIzNTksICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ0FMRU5EQVJUWVBFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JT1BUSU9OQUxDQUxFTkRBUikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUREFZT0ZXRUVLKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRklSU1RXRUVLT0ZZRUFSKSAqLworCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMSwibHVuZXMiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsIm1hcnRlcyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywibWk/cmNvbGVzIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCJqdWV2ZXMiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsInZpZXJuZXMiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsInM/YWJhZG8iKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTcsImRvbWluZ28iKQorCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwibHVuIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCJtYXIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsIm1pPyIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwianVlIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCJ2aWUiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiIikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsImZlYnJlcm8iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMywibWFyem8iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwiYWJyaWwiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwibWF5byIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU2LCJqdW5pbyIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCJqdWxpbyIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU4LCJhZ29zdG8iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOSwic2VwdGllbWJyZSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMCwib2N0dWJyZSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMSwibm92aWVtYnJlIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEyLCJkaWNpZW1icmUiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTMsIiIpCisKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsImVuZSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyLCJmZWIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMywibWFyIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQsImFiciIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1LCJtYXkiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNiwianVuIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcsImp1bCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4LCJhZ28iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOSwic2VwIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwLCJvY3QiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTEsIm5vdiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiwiZGljIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzLCIiKQorCisvKiBMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTkVHQVRJVkVTSUdOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NJR05QT1NOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NJR05QT1NOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NZTVBSRUNFREVTLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NFUEJZU1BBQ0UsICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMsICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU0VQQllTUEFDRSwgIiIpICovCisKKy8qIGNhbGVuZGFyaW8gZ3JlZ29yaWFubyAqLwpkaWZmIC0tZ2l0IGEvb2xlL25scy9lc3AubmxzIGIvb2xlL25scy9lc3AubmxzCmluZGV4IDUxOTFlODkuLmRiYmMwZjMgMTAwNjQ0Ci0tLSBhL29sZS9ubHMvZXNwLm5scworKysgYi9vbGUvbmxzL2VzcC5ubHMKQEAgLTQsMTggKzQsMTggQEAKICAqLwogCiAvKiBMT0NWQUwoTE9DQUxFX0lMQU5HVUFHRSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCIiKSAqLwotTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIlNwYW5pc2giKQorTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsIkVzcGHxb2wiKQorTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIlNwYW5pc2ggLSBUcmFkaXRpb25hbCBTb3J0IikKIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJlc3AiKQotLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIiIpICovCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwiRXNwYfFvbCIpCiAvKiBMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIkVzcGHxYSIpCiBMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCJTcGFpbiIpCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCJFc3BhgGEiKSAqLworTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIkVzIikKK0xPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCJFc3Bh8WEiKQogLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UpICovCitMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UsIjg1MCIpCiAvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFKSAqLwogLyogTE9DVkFMKExPQ0FMRV9TTElTVCwiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSU1FQVNVUkUsIiIpICovCkBAIC0zMCw3ICszMCw3IEBACiBMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MLCAiRVNQIikKIC8qIExPQ1ZBTChMT0NBTEVfU01PTkRFQ0lNQUxTRVAsIiwiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhPVVNBTkRTRVAsIi4iKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcpICovCitMT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORywgIjM7MCIpCiAvKiBMT0NWQUwoTE9DQUxFX0lDVVJSRElHSVRTLCIyIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSUlOVExDVVJSRElHSVRTKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JQ1VSUkVOQ1ksIjMiKSAqLwpAQCAtNTcsMjEgKzU3LDIxIEBACiAKIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCJsdW5lcyIpCiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMiwibWFydGVzIikKLUxPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCJtaT9yY29sZXMiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsIm1p6XJjb2xlcyIpCiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwianVldmVzIikKIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU1LCJ2aWVybmVzIikKLUxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCJzP2FiYWRvIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCJz4WJhZG8iKQogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTcsImRvbWluZ28iKQogCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwibHVuIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCJtYXIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsIm1pPyIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwianVlIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCJ2aWUiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCJsdW4iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsIm1hciIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywibWnpIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCJqdWUiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsInZpZSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwic+FiIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCJkb20iKQogCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiZW5lcm8iKQogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiZmVicmVybyIpCiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCJtYXJ6byIpCiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCJhYnJpbCIpCkBAIC05OSw4ICs5OSw4IEBACiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiwiZGljIikKIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzLCIiKQogCi0vKiBMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04sICIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTkVHQVRJVkVTSUdOLCAiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU1BPU0lUSVZFU0lHTiwgIiIpCitMT0NWQUwoTE9DQUxFX1NORUdBVElWRVNJR04sICItIikKIC8qIExPQ1ZBTChMT0NBTEVfSVBPU1NJR05QT1NOLCAiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSU5FR1NJR05QT1NOLCAiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSVBPU1NZTVBSRUNFREVTLCAiIikgKi8KQEAgLTEwOCwzICsxMDgsNCBAQAogLyogTE9DVkFMKExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMsICIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JTkVHU0VQQllTUEFDRSwgIiIpICovCiAKKy8qIGNhbGVuZGFyaW8gZ3JlZ29yaWFubyAqLwpkaWZmIC0tZ2l0IGEvb2xlL25scy9lc3IubmxzIGIvb2xlL25scy9lc3IubmxzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2MDI3YWYKLS0tIC9kZXYvbnVsbAorKysgYi9vbGUvbmxzL2Vzci5ubHMKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKglPTEUyTkxTIGxpYnJhcnkKKyAqICAgICAgU3BhbmlzaCAoUGVydSkKKyAqLworCisvKiBMT0NWQUwoTE9DQUxFX0lMQU5HVUFHRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIlNwYW5pc2giKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTEFOR05BTUUsImVzZiIpCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwiRXNwYYBvbCIpCisvKiBMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiUGVydSIpCitMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCJQZXJ1IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCJQRVIiKQorTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsIlBlcnUiKQorLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTElTVCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU1FQVNVUkUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NERUNJTUFMLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVEhPVVNBTkQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NHUk9VUElORykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURJR0lUUywiMiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lMWkVSTywiMSIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdOVU1CRVIpICovCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVESUdJVFMsICIwMTIzNDU2Nzg5IikKK0xPQ1ZBTChMT0NBTEVfU0NVUlJFTkNZLCJTIikKK0xPQ1ZBTChMT0NBTEVfU0lOVExTWU1CT0wsICJQRVMiKQorLyogTE9DVkFMKExPQ0FMRV9TTU9OREVDSU1BTFNFUCwiLCIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCwiLiIpICovCitMT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORywgIjM7MCIpCisvKiBMT0NWQUwoTE9DQUxFX0lDVVJSRElHSVRTLCIyIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUlOVExDVVJSRElHSVRTKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ1VSUkVOQ1ksIjMiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHQ1VSUiwiOCIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVRFLCIuIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1RJTUUsIjoiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TU0hPUlREQVRFLCJkZC9NTS15eXl5IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xPTkdEQVRFLCJkZGQsIGQuIE1NTU0geXl5eSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSU1FRk9STUFUKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREFURSwiMSIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lMREFURSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVRJTUUsIjEiKQorLyogTE9DVkFMKExPQ0FMRV9JVElNRU1BUktQT1NOKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ0VOVFVSWSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVRMWkVSTywiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lEQVlMWkVSTykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU1PTkxaRVJPKSAqLworLyogTE9DVkFMKExPQ0FMRV9TMTE1OSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1MyMzU5LCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNBTEVOREFSVFlQRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU9QVElPTkFMQ0FMRU5EQVIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVERBWU9GV0VFSykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUV0VFS09GWUVBUikgKi8KKworTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsImx1bmVzIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUyLCJtYXJ0ZXMiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsIm1pP3Jjb2xlcyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwianVldmVzIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU1LCJ2aWVybmVzIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCJzP2FiYWRvIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCJkb21pbmdvIikKKworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsImx1biIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwibWFyIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCJtaT8iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsImp1ZSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwidmllIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsIiIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEsIiIpICovCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUyLCJmZWJyZXJvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTMsIm1hcnpvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTQsImFicmlsIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTUsIm1heW8iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNiwianVuaW8iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNywianVsaW8iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOCwiYWdvc3RvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksInNlcHRpZW1icmUiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTAsIm9jdHVicmUiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTEsIm5vdmllbWJyZSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMiwiZGljaWVtYnJlIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEzLCIiKQorCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxLCJlbmUiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiwiZmViIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMsIm1hciIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0LCJhYnIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwibWF5IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYsImp1biIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3LCJqdWwiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCwiYWdvIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTksInNlcCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCwib2N0IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExLCJub3YiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsImRpYyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMywiIikKKworLyogTE9DVkFMKExPQ0FMRV9TUE9TSVRJVkVTSUdOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTSUdOUE9TTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTSUdOUE9TTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTWU1QUkVDRURFUywgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTRVBCWVNQQUNFLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NZTVBSRUNFREVTLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NFUEJZU1BBQ0UsICIiKSAqLworCisvKiBjYWxlbmRhcmlvIGdyZWdvcmlhbm8gKi8KZGlmZiAtLWdpdCBhL29sZS9ubHMvZXNzLm5scyBiL29sZS9ubHMvZXNzLm5scwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmVhNzgxCi0tLSAvZGV2L251bGwKKysrIGIvb2xlL25scy9lc3MubmxzCkBAIC0wLDAgKzEsMTExIEBACisvKgorICoJT0xFMk5MUyBsaWJyYXJ5CisgKiAgICAgIFNwYW5pc2ggKEFyZ2VudGluaWEpCisgKi8KKworLyogTE9DVkFMKExPQ0FMRV9JTEFOR1VBR0UsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0VOR0xBTkdVQUdFLCJTcGFuaXNoIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJlc2ciKQorTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIkVzcGGAb2wiKQorLyogTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIkFyZ2VudGluaWEiKQorTE9DVkFMKExPQ0FMRV9TRU5HQ09VTlRSWSwiQXJnZW50aW5pYSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiQVJHIikKK0xPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCJBcmdlbnRpbmlhIikKKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPREVQQUdFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xJU1QsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lNRUFTVVJFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREVDSU1BTCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1RIT1VTQU5ELCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TR1JPVVBJTkcpICovCisvKiBMT0NWQUwoTE9DQUxFX0lESUdJVFMsIjIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTFpFUk8sIjEiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHTlVNQkVSKSAqLworTE9DVkFMKExPQ0FMRV9TTkFUSVZFRElHSVRTLCAiMDEyMzQ1Njc4OSIpCitMT0NWQUwoTE9DQUxFX1NDVVJSRU5DWSwiJCIpCitMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MLCAiQVJTIikKKy8qIExPQ1ZBTChMT0NBTEVfU01PTkRFQ0lNQUxTRVAsIiwiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhPVVNBTkRTRVAsIi4iKSAqLworTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcsICIzOzAiKQorLyogTE9DVkFMKExPQ0FMRV9JQ1VSUkRJR0lUUywiMiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNVUlJFTkNZLCIzIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR0NVUlIsIjgiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFURSwiLiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSU1FLCI6IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1NIT1JUREFURSwiZGQvTU0teXl5eSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMT05HREFURSwiZGRkLCBkLiBNTU1NIHl5eXkiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVElNRUZPUk1BVCkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURBVEUsIjEiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTERBVEUpICovCisvKiBMT0NWQUwoTE9DQUxFX0lUSU1FLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSVRJTUVNQVJLUE9TTikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNFTlRVUlkpICovCisvKiBMT0NWQUwoTE9DQUxFX0lUTFpFUk8sIjEiKQorLyogTE9DVkFMKExPQ0FMRV9JREFZTFpFUk8pICovCisvKiBMT0NWQUwoTE9DQUxFX0lNT05MWkVSTykgKi8KK0xPQ1ZBTChMT0NBTEVfUzExNTksICJBTSIpCitMT0NWQUwoTE9DQUxFX1MyMzU5LCAiUE0iKQorLyogTE9DVkFMKExPQ0FMRV9JQ0FMRU5EQVJUWVBFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JT1BUSU9OQUxDQUxFTkRBUikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUREFZT0ZXRUVLKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRklSU1RXRUVLT0ZZRUFSKSAqLworCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMSwibHVuZXMiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsIm1hcnRlcyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywibWk/cmNvbGVzIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCJqdWV2ZXMiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsInZpZXJuZXMiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsInM/YWJhZG8iKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTcsImRvbWluZ28iKQorCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwibHVuIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCJtYXIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsIm1pPyIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwianVlIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCJ2aWUiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiIikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsImZlYnJlcm8iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMywibWFyem8iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwiYWJyaWwiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwibWF5byIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU2LCJqdW5pbyIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCJqdWxpbyIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU4LCJhZ29zdG8iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOSwic2VwdGllbWJyZSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMCwib2N0dWJyZSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMSwibm92aWVtYnJlIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEyLCJkaWNpZW1icmUiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTMsIiIpCisKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsImVuZSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyLCJmZWIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMywibWFyIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQsImFiciIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1LCJtYXkiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNiwianVuIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcsImp1bCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4LCJhZ28iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOSwic2VwIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwLCJvY3QiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTEsIm5vdiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiwiZGljIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzLCIiKQorCisvKiBMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTkVHQVRJVkVTSUdOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NJR05QT1NOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NJR05QT1NOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NZTVBSRUNFREVTLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NFUEJZU1BBQ0UsICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMsICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU0VQQllTUEFDRSwgIiIpICovCisKKy8qIGNhbGVuZGFyaW8gZ3JlZ29yaWFubyAqLwpkaWZmIC0tZ2l0IGEvb2xlL25scy9lc3QubmxzIGIvb2xlL25scy9lc3QubmxzCmluZGV4IDNhNDUzYTIuLjdhMjk0NjUgMTAwNjQ0Ci0tLSBhL29sZS9ubHMvZXN0Lm5scworKysgYi9vbGUvbmxzL2VzdC5ubHMKQEAgLTUsMTMgKzUsMTMgQEAKIAogLyogTE9DVkFMKExPQ0FMRV9JTEFOR1VBR0UsIiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0VOR0xBTkdVQUdFLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIkVzdG9uaWFuIikKIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJlc3QiKQogLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIkVzdG9uaWEiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIkVlIikKIC8qIExPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksIiIpICovCkBAIC0yNyw3ICsyNyw3IEBACiAvKiBMT0NWQUwoTE9DQUxFX0lORUdOVU1CRVIpICovCiAvKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVESUdJVFMpICovCiAvKiBMT0NWQUwoTE9DQUxFX1NDVVJSRU5DWSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0lOVExTWU1CT0wpICovCitMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MLCJFRUsiKQogLyogTE9DVkFMKExPQ0FMRV9TTU9OREVDSU1BTFNFUCwiLCIpICovCiAvKiBMT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCwiLiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORykgKi8KQEAgLTU1LDUyICs1NSw1MiBAQAogLyogTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUspICovCiAvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIpICovCiAKLS8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCIiKSAqLworTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsImVzbWFzcORldiIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMiwidGVpc2lw5GV2IikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCJrb2xtYXDkZXYiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTQsIm1lbGphcORldiIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNSwicmVlZGUiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsImxhdXDkZXYiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTcsInD8aGFw5GV2IikKIAotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsIk1hIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCJUaSIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywiT24iKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsIlRvIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCJGciIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwiTPgiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsIlP4IikgKi8KK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCJFIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCJUIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCJLIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCJOIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCJSIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCJMIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCJQIikKIAotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTUsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU2LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNywiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTgsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU5LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTAsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEyLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiamFhbnVhciIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUyLCJ2ZWVicnVhciIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCJt5HJ0cyIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCJhcHJpbGwiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwibWFpIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsImp1dW5pIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTcsImp1dWxpIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTgsImF1Z3VzdCIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU5LCJzZXB0ZW1iZXIiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTAsIm9rdG9vYmVyIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTExLCJub3ZlbWJlciIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMiwiZGV0c2VtYmVyIikKIC8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEzLCIiKSAqLwogCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTksIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsIiIpICovCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxLCJqYWFuICIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyLCJ2ZWViciIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzLCJt5HJ0cyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0LCJhcHIgICIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1LCJtYWkgICIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2LCJqdXVuaSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3LCJqdXVsaSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4LCJhdWcgICIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5LCJzZXB0ICIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCwib2t0ICAiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTEsIm5vdiAgIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyLCJkZXRzICIpCiAvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMywiIikgKi8KIAotLyogTE9DVkFMKExPQ0FMRV9TUE9TSVRJVkVTSUdOLCAiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTiwgIiIpICovCitMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04sICIiKQorTE9DVkFMKExPQ0FMRV9TTkVHQVRJVkVTSUdOLCAiLSIpCiAvKiBMT0NWQUwoTE9DQUxFX0lQT1NTSUdOUE9TTiwgIiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lORUdTSUdOUE9TTiwgIiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lQT1NTWU1QUkVDRURFUywgIiIpICovCmRpZmYgLS1naXQgYS9vbGUvbmxzL2VzdS5ubHMgYi9vbGUvbmxzL2VzdS5ubHMKaW5kZXggNzQ5NjkwYi4uNTBlOWRmZiAxMDA2NDQKLS0tIGEvb2xlL25scy9lc3UubmxzCisrKyBiL29sZS9ubHMvZXN1Lm5scwpAQCAtNCwxOCArNCwxOCBAQAogICovCiAKIC8qIExPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsIiIpICovCi1MT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiU3BhbmlzaCIpCitMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiRXNwYfFvbCAoUHVlcnRvIFJpY28pIikKK0xPQ1ZBTChMT0NBTEVfU0VOR0xBTkdVQUdFLCJTcGFuaXNoIChQdWVydG8gUmljbykiKQogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTEFOR05BTUUsImVzdSIpCi0vKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU05BVElWRUxBTkdOQU1FLCJFc3Bh8W9sIChQdWVydG8gUmljbykiKQogLyogTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIiIpICovCi1MT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCJTcGFpbiIpCitMT0NWQUwoTE9DQUxFX1NDT1VOVFJZLCJQdWVydG8gUmljbyIpCitMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCJQdWVydG8gUmljbyIpCiAvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCJFc3BhgGEiKSAqLworTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsIlB1ZXJ0byBSaWNvIikKIC8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSwiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT1VOVFJZLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPREVQQUdFKSAqLworTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPREVQQUdFLCI4NTAiKQogLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSkgKi8KIC8qIExPQ1ZBTChMT0NBTEVfU0xJU1QsIiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lNRUFTVVJFLCIiKSAqLwpAQCAtMjYsOCArMjYsOCBAQAogLyogTE9DVkFMKExPQ0FMRV9JTFpFUk8sIjEiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JTkVHTlVNQkVSKSAqLwogTE9DVkFMKExPQ0FMRV9TTkFUSVZFRElHSVRTLCAiMDEyMzQ1Njc4OSIpCi1MT0NWQUwoTE9DQUxFX1NDVVJSRU5DWSwiUHRzIikKLUxPQ1ZBTChMT0NBTEVfU0lOVExTWU1CT0wsICJFU1AiKQorTE9DVkFMKExPQ0FMRV9TQ1VSUkVOQ1ksIiQiKQorLyogTE9DVkFMKExPQ0FMRV9TSU5UTFNZTUJPTCwgIkVTUCIpICovCiAvKiBMT0NWQUwoTE9DQUxFX1NNT05ERUNJTUFMU0VQLCIsIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfU01PTlRIT1VTQU5EU0VQLCIuIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfU01PTkdST1VQSU5HKSAqLwpAQCAtNTcsMjEgKzU3LDIxIEBACiAKIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCJsdW5lcyIpCiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMiwibWFydGVzIikKLUxPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCJtaT9yY29sZXMiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsIm1p6XJjb2xlcyIpCiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwianVldmVzIikKIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU1LCJ2aWVybmVzIikKLUxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCJzP2FiYWRvIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCJz4WJhZG8iKQogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTcsImRvbWluZ28iKQogCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwibHVuIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCJtYXIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsIm1pPyIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwianVlIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCJ2aWUiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCJsdW4iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsIm1hciIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywibWnpIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCJqdWUiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsInZpZSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwic+FiIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCJkb20iKQogCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiZW5lcm8iKQogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiZmVicmVybyIpCiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCJtYXJ6byIpCiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCJhYnJpbCIpCkBAIC05OSw4ICs5OSw4IEBACiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiwiZGljIikKIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzLCIiKQogCi0vKiBMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04sICIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTkVHQVRJVkVTSUdOLCAiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU1BPU0lUSVZFU0lHTiwgIiIpCitMT0NWQUwoTE9DQUxFX1NORUdBVElWRVNJR04sICItIikKIC8qIExPQ1ZBTChMT0NBTEVfSVBPU1NJR05QT1NOLCAiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSU5FR1NJR05QT1NOLCAiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSVBPU1NZTVBSRUNFREVTLCAiIikgKi8KZGlmZiAtLWdpdCBhL29sZS9ubHMvZXN2Lm5scyBiL29sZS9ubHMvZXN2Lm5scwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYWM2MzllCi0tLSAvZGV2L251bGwKKysrIGIvb2xlL25scy9lc3YubmxzCkBAIC0wLDAgKzEsMTExIEBACisvKgorICoJT0xFMk5MUyBsaWJyYXJ5CisgKiAgICAgIFNwYW5pc2ggKFZlbmV6dWVsYSkKKyAqLworCisvKiBMT0NWQUwoTE9DQUxFX0lMQU5HVUFHRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIlNwYW5pc2giKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTEFOR05BTUUsImVzdiIpCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwiRXNwYYBvbCIpCisvKiBMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiVmVuZXp1ZWxhIikKK0xPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIlZlbmV6dWVsYSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiVkVOIikKK0xPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCJWZW5lenVlbGEiKQorLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTElTVCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU1FQVNVUkUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NERUNJTUFMLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVEhPVVNBTkQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NHUk9VUElORykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURJR0lUUywiMiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lMWkVSTywiMSIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdOVU1CRVIpICovCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVESUdJVFMsICIwMTIzNDU2Nzg5IikKK0xPQ1ZBTChMT0NBTEVfU0NVUlJFTkNZLCJCcyIpCitMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MLCAiVkVCIikKKy8qIExPQ1ZBTChMT0NBTEVfU01PTkRFQ0lNQUxTRVAsIiwiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhPVVNBTkRTRVAsIi4iKSAqLworTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcsICIzOzAiKQorLyogTE9DVkFMKExPQ0FMRV9JQ1VSUkRJR0lUUywiMiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNVUlJFTkNZLCIzIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR0NVUlIsIjgiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFURSwiLiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSU1FLCI6IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1NIT1JUREFURSwiZGQvTU0teXl5eSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMT05HREFURSwiZGRkLCBkLiBNTU1NIHl5eXkiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVElNRUZPUk1BVCkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURBVEUsIjEiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTERBVEUpICovCisvKiBMT0NWQUwoTE9DQUxFX0lUSU1FLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSVRJTUVNQVJLUE9TTikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNFTlRVUlkpICovCisvKiBMT0NWQUwoTE9DQUxFX0lUTFpFUk8sIjEiKQorLyogTE9DVkFMKExPQ0FMRV9JREFZTFpFUk8pICovCisvKiBMT0NWQUwoTE9DQUxFX0lNT05MWkVSTykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfUzExNTksICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TMjM1OSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDQUxFTkRBUlRZUEUpICovCisvKiBMT0NWQUwoTE9DQUxFX0lPUFRJT05BTENBTEVOREFSKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUspICovCisvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIpICovCisKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCJsdW5lcyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMiwibWFydGVzIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCJtaT9yY29sZXMiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTQsImp1ZXZlcyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNSwidmllcm5lcyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwicz9hYmFkbyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywiZG9taW5nbyIpCisKKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCJsdW4iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsIm1hciIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywibWk/IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCJqdWUiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsInZpZSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCIiKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiZmVicmVybyIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCJtYXJ6byIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCJhYnJpbCIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU1LCJtYXlvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsImp1bmlvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTcsImp1bGlvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTgsImFnb3N0byIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU5LCJzZXB0aWVtYnJlIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCJvY3R1YnJlIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTExLCJub3ZpZW1icmUiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsImRpY2llbWJyZSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMywiIikKKworTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSwiZW5lIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsImZlYiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzLCJtYXIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCwiYWJyIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUsIm1heSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2LCJqdW4iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNywianVsIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgsImFnbyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5LCJzZXAiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAsIm9jdCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwibm92IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyLCJkaWMiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMsIiIpCisKKy8qIExPQ1ZBTChMT0NBTEVfU1BPU0lUSVZFU0lHTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NORUdBVElWRVNJR04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU0lHTlBPU04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU0lHTlBPU04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU1lNUFJFQ0VERVMsICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU0VQQllTUEFDRSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTWU1QUkVDRURFUywgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTRVBCWVNQQUNFLCAiIikgKi8KKworLyogY2FsZW5kYXJpbyBncmVnb3JpYW5vICovCmRpZmYgLS1naXQgYS9vbGUvbmxzL2VzeS5ubHMgYi9vbGUvbmxzL2VzeS5ubHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY4YjlhYwotLS0gL2Rldi9udWxsCisrKyBiL29sZS9ubHMvZXN5Lm5scwpAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqCU9MRTJOTFMgbGlicmFyeQorICogICAgICBTcGFuaXNoIChVcnVndWF5KQorICovCisKKy8qIExPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsIkVzcGGAb2wiKQorTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIlNwYW5pc2giKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTEFOR05BTUUsImVzeSIpCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwiVXJ1Z3VheSIpCisvKiBMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIlVydWd1YXkiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIlVSWSIpCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwiVXJ1Z3VheSIpCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUTEFOR1VBR0UsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMSVNULCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTUVBU1VSRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RFQ0lNQUwsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSE9VU0FORCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0dST1VQSU5HKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRElHSVRTLCIyIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUxaRVJPLCIxIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR05VTUJFUikgKi8KK0xPQ1ZBTChMT0NBTEVfU05BVElWRURJR0lUUywgIjAxMjM0NTY3ODkiKQorTE9DVkFMKExPQ0FMRV9TQ1VSUkVOQ1ksIk5VJCIpCitMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MLCAiVVlVIikKKy8qIExPQ1ZBTChMT0NBTEVfU01PTkRFQ0lNQUxTRVAsIiwiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhPVVNBTkRTRVAsIi4iKSAqLworTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcsIjM7MCIpCisvKiBMT0NWQUwoTE9DQUxFX0lDVVJSRElHSVRTLCIyIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUlOVExDVVJSRElHSVRTKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ1VSUkVOQ1ksIjMiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHQ1VSUiwiOCIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVRFLCIuIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1RJTUUsIjoiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TU0hPUlREQVRFLCJkZC9NTS15eXl5IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xPTkdEQVRFLCJkZGQsIGQuIE1NTU0geXl5eSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSU1FRk9STUFUKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREFURSwiMSIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lMREFURSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVRJTUUsIjEiKQorLyogTE9DVkFMKExPQ0FMRV9JVElNRU1BUktQT1NOKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ0VOVFVSWSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVRMWkVSTywiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lEQVlMWkVSTykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU1PTkxaRVJPKSAqLworLyogTE9DVkFMKExPQ0FMRV9TMTE1OSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1MyMzU5LCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNBTEVOREFSVFlQRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU9QVElPTkFMQ0FMRU5EQVIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVERBWU9GV0VFSykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUV0VFS09GWUVBUikgKi8KKworTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsImx1bmVzIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUyLCJtYXJ0ZXMiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsIm1pP3Jjb2xlcyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwianVldmVzIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU1LCJ2aWVybmVzIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCJzP2FiYWRvIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCJkb21pbmdvIikKKworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsImx1biIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwibWFyIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCJtaT8iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsImp1ZSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwidmllIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsIiIpICovCisKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEsImVuZXJvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsImZlYnJlcm8iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMywibWFyem8iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwiYWJyaWwiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwibWF5byIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU2LCJqdW5pbyIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCJqdWxpbyIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU4LCJhZ29zdG8iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOSwic2VwdGllbWJyZSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMCwib2N0dWJyZSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMSwibm92aWVtYnJlIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEyLCJkaWNpZW1icmUiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTMsIiIpCisKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsImVuZSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyLCJmZWIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMywibWFyIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQsImFiciIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1LCJtYXkiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNiwianVuIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcsImp1bCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4LCJhZ28iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOSwic2VwIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwLCJvY3QiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTEsIm5vdiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiwiZGljIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzLCIiKQorCisvKiBMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTkVHQVRJVkVTSUdOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NJR05QT1NOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NJR05QT1NOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NZTVBSRUNFREVTLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NFUEJZU1BBQ0UsICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMsICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU0VQQllTUEFDRSwgIiIpICovCisKKy8qIGNhbGVuZGFyaW8gZ3JlZ29yaWFubyAqLwpkaWZmIC0tZ2l0IGEvb2xlL25scy9lc3oubmxzIGIvb2xlL25scy9lc3oubmxzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxYWQzMTgKLS0tIC9kZXYvbnVsbAorKysgYi9vbGUvbmxzL2Vzei5ubHMKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKglPTEUyTkxTIGxpYnJhcnkKKyAqICAgICAgU3BhbmlzaCAoUGFyYWd1YXkpCisgKi8KKworLyogTE9DVkFMKExPQ0FMRV9JTEFOR1VBR0UsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0VOR0xBTkdVQUdFLCJTcGFuaXNoIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJlc3oiKQorTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIlBhcmFndWF5IikKKy8qIExPQ1ZBTChMT0NBTEVfSUNPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NDT1VOVFJZLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TRU5HQ09VTlRSWSwiUGFyYWd1YXkiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIlBSWSIpCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwiUGFyYWd1YXkiKQorLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTElTVCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU1FQVNVUkUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NERUNJTUFMLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVEhPVVNBTkQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NHUk9VUElORykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURJR0lUUywiMiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lMWkVSTywiMSIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdOVU1CRVIpICovCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVESUdJVFMsICIwMTIzNDU2Nzg5IikKK0xPQ1ZBTChMT0NBTEVfU0NVUlJFTkNZLCJHIikKK0xPQ1ZBTChMT0NBTEVfU0lOVExTWU1CT0wsICJQWUciKQorLyogTE9DVkFMKExPQ0FMRV9TTU9OREVDSU1BTFNFUCwiLCIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCwiLiIpICovCitMT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORywiMzswIikKKy8qIExPQ1ZBTChMT0NBTEVfSUNVUlJESUdJVFMsIjIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JSU5UTENVUlJESUdJVFMpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDVVJSRU5DWSwiMyIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdDVVJSLCI4IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBVEUsIi4iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVElNRSwiOiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NTSE9SVERBVEUsImRkL01NLXl5eXkiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTE9OR0RBVEUsImRkZCwgZC4gTU1NTSB5eXl5IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1RJTUVGT1JNQVQpICovCisvKiBMT0NWQUwoTE9DQUxFX0lEQVRFLCIxIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUxEQVRFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JVElNRSwiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lUSU1FTUFSS1BPU04pICovCisvKiBMT0NWQUwoTE9DQUxFX0lDRU5UVVJZKSAqLworLyogTE9DVkFMKExPQ0FMRV9JVExaRVJPLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSURBWUxaRVJPKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTU9OTFpFUk8pICovCisvKiBMT0NWQUwoTE9DQUxFX1MxMTU5LCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfUzIzNTksICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ0FMRU5EQVJUWVBFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JT1BUSU9OQUxDQUxFTkRBUikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUREFZT0ZXRUVLKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRklSU1RXRUVLT0ZZRUFSKSAqLworCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMSwibHVuZXMiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsIm1hcnRlcyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywibWk/cmNvbGVzIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCJqdWV2ZXMiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsInZpZXJuZXMiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsInM/YWJhZG8iKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTcsImRvbWluZ28iKQorCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwibHVuIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCJtYXIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsIm1pPyIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwianVlIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCJ2aWUiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiIikgKi8KKworTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiZW5lcm8iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiZmVicmVybyIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCJtYXJ6byIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCJhYnJpbCIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU1LCJtYXlvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsImp1bmlvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTcsImp1bGlvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTgsImFnb3N0byIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU5LCJzZXB0aWVtYnJlIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCJvY3R1YnJlIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTExLCJub3ZpZW1icmUiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsImRpY2llbWJyZSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMywiIikKKworTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSwiZW5lIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsImZlYiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzLCJtYXIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCwiYWJyIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUsIm1heSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2LCJqdW4iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNywianVsIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgsImFnbyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5LCJzZXAiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAsIm9jdCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwibm92IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyLCJkaWMiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMsIiIpCisKKy8qIExPQ1ZBTChMT0NBTEVfU1BPU0lUSVZFU0lHTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NORUdBVElWRVNJR04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU0lHTlBPU04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU0lHTlBPU04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU1lNUFJFQ0VERVMsICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU0VQQllTUEFDRSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTWU1QUkVDRURFUywgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTRVBCWVNQQUNFLCAiIikgKi8KKworLyogY2FsZW5kYXJpbyBncmVnb3JpYW5vICovCmRpZmYgLS1naXQgYS9vbGUvbmxzL2V1cS5ubHMgYi9vbGUvbmxzL2V1cS5ubHMKaW5kZXggOTg5YzVlNy4uYzY2MzlmZSAxMDA2NDQKLS0tIGEvb2xlL25scy9ldXEubmxzCisrKyBiL29sZS9ubHMvZXVxLm5scwpAQCAtNCwxOCArNCwxOCBAQAogICovCiAKIC8qIExPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsIiIpICovCi1MT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiU3BhbmlzaCIpCitMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiRXVza2FyYSIpCitMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiQmFzcXVlIikKIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJldXEiKQotLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIiIpICovCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwiRXVza2FyYSIpCiAvKiBMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiIikgKi8KLUxPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIlNwYWluIikKLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsIkVzcGGAYSIpICovCitMT0NWQUwoTE9DQUxFX1NDT1VOVFJZLCJFc3BhaW5hIikKK0xPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIlNwYWluIChCYXNxdWUpIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCJFcyIpCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwiRXNwYWluYSIpCiAvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUTEFOR1VBR0UsIiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSkgKi8KK0xPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSwiODUwIikKIC8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UpICovCiAvKiBMT0NWQUwoTE9DQUxFX1NMSVNULCIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JTUVBU1VSRSwiIikgKi8KQEAgLTM3LDggKzM3LDggQEAKIC8qIExPQ1ZBTChMT0NBTEVfSU5FR0NVUlIsIjgiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9TREFURSwiLiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX1NUSU1FLCI6IikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU1NIT1JUREFURSwiZGQvTU0teXl5eSIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NMT05HREFURSwiZGRkLCBkLiBNTU1NIHl5eXkiKSAqLworTE9DVkFMKExPQ0FMRV9TU0hPUlREQVRFLCJ5eXl5LU1NLWRkIikKK0xPQ1ZBTChMT0NBTEVfU0xPTkdEQVRFLCJkZGQsIHl5eXlla28gTU1NTXJlbiBkLmEiKQogLyogTE9DVkFMKExPQ0FMRV9TVElNRUZPUk1BVCkgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSURBVEUsIjEiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JTERBVEUpICovCkBAIC01NSwxMyArNTUsMTMgQEAKIC8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUREFZT0ZXRUVLKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JRklSU1RXRUVLT0ZZRUFSKSAqLwogCi1MT0NWQUwoTE9DQUxFX1NEQVlOQU1FMSwibHVuZXMiKQotTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsIm1hcnRlcyIpCi1MT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywibWk/cmNvbGVzIikKLUxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCJqdWV2ZXMiKQotTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsInZpZXJuZXMiKQotTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsInM/YWJhZG8iKQotTE9DVkFMKExPQ0FMRV9TREFZTkFNRTcsImRvbWluZ28iKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsImFzdGVsZWhlbmEiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsImFzdGVhcnRlYSIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywiYXN0ZWF6a2VuYSIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwib3N0ZWd1bmEiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsIm9zdGlyYWxhIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCJsYXJ1bmJhdGEiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTcsImlnYW5kZWEiKQogCiAvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwibHVuIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCJtYXIiKSAqLwpAQCAtNzEsMzYgKzcxLDM2IEBACiAvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCIiKSAqLwogCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCIiKSAqLwotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiZmVicmVybyIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCJtYXJ6byIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCJhYnJpbCIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUU1LCJtYXlvIikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsImp1bmlvIikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTcsImp1bGlvIikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTgsImFnb3N0byIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUU5LCJzZXB0aWVtYnJlIikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCJvY3R1YnJlIikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTExLCJub3ZpZW1icmUiKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsImRpY2llbWJyZSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCJ1cnRhcnJpbGEiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwib3RzYWlsYSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCJtYXJ0eG9hIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTQsImFwaXJpbGEiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwibWFpYXR6YSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU2LCJla2FpbmEiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNywidXp0YWlsYSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU4LCJhYnV6dHVhIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksImlyYWlsYSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMCwidXJyaWEiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTEsImF6YXJvYSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMiwiYWJlbmR1YSIpCiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMywiIikKIAotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSwiZW5lIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsImZlYiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxLCJ1cnQiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiwib3RzIikKIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMsIm1hciIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0LCJhYnIiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwibWF5IikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYsImp1biIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3LCJqdWwiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCwiYWdvIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTksInNlcCIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCwib2N0IikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExLCJub3YiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsImRpYyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0LCJhcGkiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwibWFpIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYsImVrYSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3LCJ1enQiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCwiYWJ1IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTksImlyYSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCwidXJyIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExLCJhemEiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsImFiZSIpCiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMywiIikKIAotLyogTE9DVkFMKExPQ0FMRV9TUE9TSVRJVkVTSUdOLCAiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTiwgIiIpICovCitMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04sICIiKQorTE9DVkFMKExPQ0FMRV9TTkVHQVRJVkVTSUdOLCAiLSIpCiAvKiBMT0NWQUwoTE9DQUxFX0lQT1NTSUdOUE9TTiwgIiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lORUdTSUdOUE9TTiwgIiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lQT1NTWU1QUkVDRURFUywgIiIpICovCmRpZmYgLS1naXQgYS9vbGUvbmxzL2Zpbi5ubHMgYi9vbGUvbmxzL2Zpbi5ubHMKaW5kZXggYTA2YjVkMy4uNmNkOTU0YyAxMDA2NDQKLS0tIGEvb2xlL25scy9maW4ubmxzCisrKyBiL29sZS9ubHMvZmluLm5scwpAQCAtMzAsNyArMzAsNyBAQAogTE9DVkFMKExPQ0FMRV9TSU5UTFNZTUJPTCwiRklNIikKIC8qIExPQ1ZBTChMT0NBTEVfU01PTkRFQ0lNQUxTRVApICovCiAvKiBMT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCkgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTkdST1VQSU5HKSAvKgorTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcsICIzOzAiKQogTE9DVkFMKExPQ0FMRV9JQ1VSUkRJR0lUUywiMiIpCiAvKiBMT0NWQUwoTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUykgKi8KIExPQ1ZBTChMT0NBTEVfSUNVUlJFTkNZLCIzIikKQEAgLTQzLDcgKzQzLDcgQEAKIExPQ1ZBTChMT0NBTEVfSURBVEUsIjEiKQogLyogTE9DVkFMKExPQ0FMRV9JTERBVEUpICovCiBMT0NWQUwoTE9DQUxFX0lUSU1FLCIxIikKLS8qIExPQ1ZBTChMT0NBTEVfSVRJTUVNQVJLUE9TTikgLyoKKy8qIExPQ1ZBTChMT0NBTEVfSVRJTUVNQVJLUE9TTikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSUNFTlRVUlkpICovCiBMT0NWQUwoTE9DQUxFX0lUTFpFUk8sIjEiKQogLyogTE9DVkFMKExPQ0FMRV9JREFZTFpFUk8pICovCkBAIC0xMDcsMyArMTA3LDUgQEAKIC8qIExPQ1ZBTChMT0NBTEVfSVBPU1NFUEJZU1BBQ0UpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lORUdTWU1QUkVDRURFUykgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSU5FR1NFUEJZU1BBQ0UpICovCisKKy8qIGdyZWdvcmlhYW5pbmVuIGthbGVudGVyaSAqLwpkaWZmIC0tZ2l0IGEvb2xlL25scy9mb3MubmxzIGIvb2xlL25scy9mb3MubmxzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhNGJlYWYKLS0tIC9kZXYvbnVsbAorKysgYi9vbGUvbmxzL2Zvcy5ubHMKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKglPTEUyTkxTIGxpYnJhcnkKKyAqICAgICAgRmFyb2UgSXNsYW5kcworICovCisKK0xPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCI5IikKK0xPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCIiKQorTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIkZhcm9lc2UiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTEFOR05BTUUsImZvcyIpCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwiZj9yb3lza3QiKQorLyogTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwiNDkiKSAqLworTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiIikKK0xPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIkZhcm9lIElzbGFuZHMiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIkZSUyIpCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwiRnJveWFyIikKKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSwiOSIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwiNDAiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPREVQQUdFLCI4NTEiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSkgKi8KK0xPQ1ZBTChMT0NBTEVfU0xJU1QsIjsiKQorTE9DVkFMKExPQ0FMRV9JTUVBU1VSRSwiMCIpCitMT0NWQUwoTE9DQUxFX1NERUNJTUFMLCIsIikKK0xPQ1ZBTChMT0NBTEVfU1RIT1VTQU5ELCIuIikKKy8qIExPQ1ZBTChMT0NBTEVfU0dST1VQSU5HKSAqLworTE9DVkFMKExPQ0FMRV9JRElHSVRTLCIyIikKK0xPQ1ZBTChMT0NBTEVfSUxaRVJPLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSU5FR05VTUJFUikgKi8KK0xPQ1ZBTChMT0NBTEVfU05BVElWRURJR0lUUywgIjAxMjM0NTY3ODkiKQorTE9DVkFMKExPQ0FMRV9TQ1VSUkVOQ1ksImtyIikKK0xPQ1ZBTChMT0NBTEVfU0lOVExTWU1CT0wsICJES0siKQorLyogTE9DVkFMKExPQ0FMRV9TTU9OREVDSU1BTFNFUCkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRIT1VTQU5EU0VQKSAqLworTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcsIjM7MCIpCitMT0NWQUwoTE9DQUxFX0lDVVJSRElHSVRTLCIyIikKKy8qIExPQ1ZBTChMT0NBTEVfSUlOVExDVVJSRElHSVRTKSAqLworTE9DVkFMKExPQ0FMRV9JQ1VSUkVOQ1ksIjMiKQorTE9DVkFMKExPQ0FMRV9JTkVHQ1VSUiwiOCIpCitMT0NWQUwoTE9DQUxFX1NEQVRFLCIuIikKK0xPQ1ZBTChMT0NBTEVfU1RJTUUsIjoiKQorTE9DVkFMKExPQ0FMRV9TU0hPUlREQVRFLCJkZC5NTS55eXl5IikKK0xPQ1ZBTChMT0NBTEVfU0xPTkdEQVRFLCJkZGQsIGQuIE1NTU0geXl5eSIpCisvKiBMT0NWQUwoTE9DQUxFX1NUSU1FRk9STUFUKSAqLworTE9DVkFMKExPQ0FMRV9JREFURSwiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lMREFURSkgKi8KK0xPQ1ZBTChMT0NBTEVfSVRJTUUsIjEiKQorLyogTE9DVkFMKExPQ0FMRV9JVElNRU1BUktQT1NOKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ0VOVFVSWSkgKi8KK0xPQ1ZBTChMT0NBTEVfSVRMWkVSTywiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lEQVlMWkVSTykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU1PTkxaRVJPKSAqLworLyogTE9DVkFMKExPQ0FMRV9TMTE1OSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfUzIzNTkpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDQUxFTkRBUlRZUEUpICovCisvKiBMT0NWQUwoTE9DQUxFX0lPUFRJT05BTENBTEVOREFSKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUspICovCisvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIpICovCisKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCJtgG5hZGFndXIiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsIj9vc2RhZ3VyIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCJtaWt1ZGFndXIiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTQsImg/c2RhZ3VyIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU1LCJmcj9nZ2phZGFndXIiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsImxleWdhcmRhZ3VyIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCJzdW5udWRhZ3VyIikKKworTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsIm0/biIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwidD9zIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCJtaWsiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsImg/cyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwiZnI/IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCJsZXkiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsInN1biIpCisKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEsImphbnVhciIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUyLCJmZWJydWFyIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTMsIm1hcnMiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwiYXByaWwiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwibWFpIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsImp1bmkiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNywianVsaSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU4LCJhdWd1c3QiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOSwic2VwdGVtYmVyIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCJva3RvYmVyIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTExLCJub3ZlbWJlciIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMiwiZGVzZW1iZXIiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTMsIiIpCisKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsImphbiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyLCJmZWIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMywibWFyIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQsImFwciIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1LCJtYWkiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNiwianVuIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcsImp1bCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4LCJhdWciKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOSwic2VwIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwLCJva3QiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTEsIm5vdiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiwiZGVzIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzLCIiKQorCisvKiBMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04pICovCisvKiBMT0NWQUwoTE9DQUxFX1NORUdBVElWRVNJR04pICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTSUdOUE9TTikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NJR05QT1NOKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU1lNUFJFQ0VERVMpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTRVBCWVNQQUNFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTRVBCWVNQQUNFKSAqLworCisvKiBEZW4gZ3JlZ29yaWFuc2tlIGthbGVuZGVyICovCmRpZmYgLS1naXQgYS9vbGUvbmxzL2ZyYS5ubHMgYi9vbGUvbmxzL2ZyYS5ubHMKaW5kZXggZGI5ZmVlMi4uYTYxODhkOSAxMDA2NDQKLS0tIGEvb2xlL25scy9mcmEubmxzCisrKyBiL29sZS9ubHMvZnJhLm5scwpAQCAtNCwxOCArNCwxOCBAQAogICovCiAKIC8qIExPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsIiIpICovCi1MT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiRnJhbmNlIikKK0xPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCJGcmFu52FpcyIpCitMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiRnJlbmNoIikKIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJmcmEiKQotLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIkZyYW7nYWlzIikKK0xPQ1ZBTChMT0NBTEVfSUNPVU5UUlksIjMzIikKK0xPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIkZyYW5jZSIpCitMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCJGcmFuY2UiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIkZyIikKK0xPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCJGcmFuY2UiKQogLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UpICovCitMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UsIjg1MCIpCiAvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFKSAqLwogLyogTE9DVkFMKExPQ0FMRV9TTElTVCwiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSU1FQVNVUkUsIiIpICovCkBAIC0yNSwxOSArMjUsMTkgQEAKIC8qIExPQ1ZBTChMT0NBTEVfSURJR0lUUywiMiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lMWkVSTywiMSIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lORUdOVU1CRVIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVESUdJVFMpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NDVVJSRU5DWSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0lOVExTWU1CT0wpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05ERUNJTUFMU0VQLCIsIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRIT1VTQU5EU0VQLCIuIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTkdST1VQSU5HKSAqLworTE9DVkFMKExPQ0FMRV9TTkFUSVZFRElHSVRTLCAiMDEyMzQ1Njc4OSIpCitMT0NWQUwoTE9DQUxFX1NDVVJSRU5DWSwiRiIpCitMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MLCAiRlJGIikKK0xPQ1ZBTChMT0NBTEVfU01PTkRFQ0lNQUxTRVAsIiwiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhPVVNBTkRTRVAsIi4iKQorTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcsICIzOzAiKQogLyogTE9DVkFMKExPQ0FMRV9JQ1VSUkRJR0lUUywiMiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUykgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSUNVUlJFTkNZLCIzIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSU5FR0NVUlIsIjgiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TREFURSwiLiIpICovCitMT0NWQUwoTE9DQUxFX1NEQVRFLCIvIikKIC8qIExPQ1ZBTChMT0NBTEVfU1RJTUUsIjoiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TU0hPUlREQVRFLCJkZC9NTS15eXl5IikgKi8KK0xPQ1ZBTChMT0NBTEVfU1NIT1JUREFURSwiZGQvTU0veXl5eSIpCiAvKiBMT0NWQUwoTE9DQUxFX1NMT05HREFURSwiZGRkLCBkLiBNTU1NIHl5eXkiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9TVElNRUZPUk1BVCkgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSURBVEUsIjEiKSAqLwpAQCAtNDgsNTkgKzQ4LDU5IEBACiAvKiBMT0NWQUwoTE9DQUxFX0lUTFpFUk8sIjEiKQogLyogTE9DVkFMKExPQ0FMRV9JREFZTFpFUk8pICovCiAvKiBMT0NWQUwoTE9DQUxFX0lNT05MWkVSTykgKi8KLS8qIExPQ1ZBTChMT0NBTEVfUzExNTksICIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TMjM1OSwgIiIpICovCitMT0NWQUwoTE9DQUxFX1MxMTU5LCAiIikKK0xPQ1ZBTChMT0NBTEVfUzIzNTksICIiKQogLyogTE9DVkFMKExPQ0FMRV9JQ0FMRU5EQVJUWVBFKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JT1BUSU9OQUxDQUxFTkRBUikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUREFZT0ZXRUVLKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JRklSU1RXRUVLT0ZZRUFSKSAqLwogCi0vKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUyLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU1LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCJsdW5kaSIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMiwibWFyZGkiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsIm1lcmNyZWRpIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCJqZXVkaSIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNSwidmVuZHJlZGkiKSAKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCJzYW1lZGkiKSAKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCJkaW1hbmNoZSIpCiAKLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCJNYSIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwiVGkiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsIk9uIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCJUbyIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwiRnIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsIkz4IikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCJT+CIpICovCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwibHVuIikgCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwibWFyIikgCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywibWVyIikgCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwiamV1IikgCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwidmVuIikgCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwic2FtIikgCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiZGltIikgCiAKLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUyLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMywiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTQsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU1LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNiwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTcsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU4LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTEsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMiwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEsImphbnZpZXIiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiZul2cmllciIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCJtYXJzIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTQsImF2cmlsIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTUsIm1haSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU2LCJqdWluIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTcsImp1aWxsZXQiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOCwiYW/7dCIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU5LCJzZXB0ZW1icmUiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTAsIm9jdG9icmUiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTEsIm5vdmVtYnJlIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEyLCJk6WNlbWJyZSIpCiAvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMywiIikgKi8KLQotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNywiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyLCIiKSAqLworICAKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsImphbiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyLCJm6XYiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMywibWFyIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQsImF2ciIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1LCJtYWkiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNiwianVuIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcsImp1bCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4LCJhb/siKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOSwic2VwIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwLCJvY3QiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTEsIm5vdiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiwiZOljIikKIC8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzLCIiKSAqLwogCi0vKiBMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04sICIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTkVHQVRJVkVTSUdOLCAiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU1BPU0lUSVZFU0lHTiwgIiIpCitMT0NWQUwoTE9DQUxFX1NORUdBVElWRVNJR04sICItIikKIC8qIExPQ1ZBTChMT0NBTEVfSVBPU1NJR05QT1NOLCAiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSU5FR1NJR05QT1NOLCAiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSVBPU1NZTVBSRUNFREVTLCAiIikgKi8KQEAgLTEwOCwzICsxMDgsNCBAQAogLyogTE9DVkFMKExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMsICIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JTkVHU0VQQllTUEFDRSwgIiIpICovCiAKKy8qIGNhbGVuZHJpZXIgZ3KAZ29yaWVuICovCmRpZmYgLS1naXQgYS9vbGUvbmxzL2ZyYi5ubHMgYi9vbGUvbmxzL2ZyYi5ubHMKaW5kZXggYWY2Nzc0NS4uYmU2NGIxYiAxMDA2NDQKLS0tIGEvb2xlL25scy9mcmIubmxzCisrKyBiL29sZS9ubHMvZnJiLm5scwpAQCAtNCwxOCArNCwxOCBAQAogICovCiAKIC8qIExPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsIiIpICovCi1MT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiQmVsZ2l1bSIpCitMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiRnJhbudhaXMgKEJlbGdpcXVlKSIpCitMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiRnJlbmNoIChCZWxnaXVtKSIpCiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZMQU5HTkFNRSwiZnJiIikKLS8qIExPQ1ZBTChMT0NBTEVfU05BVElWRUxBTkdOQU1FLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU05BVElWRUxBTkdOQU1FLCJGcmFu52FpcyAoQmVsZ2lxdWUpIikKK0xPQ1ZBTChMT0NBTEVfSUNPVU5UUlksIjMyIikKK0xPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIkJlbGdpcXVlIikKK0xPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIkJlbGdpdW0iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIkJlIikKK0xPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCJCZWxnaXF1ZSIpCiAvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUTEFOR1VBR0UsIiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSkgKi8KK0xPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSwiODUwIikKIC8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UpICovCiAvKiBMT0NWQUwoTE9DQUxFX1NMSVNULCIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JTUVBU1VSRSwiIikgKi8KQEAgLTI1LDE5ICsyNSwxOSBAQAogLyogTE9DVkFMKExPQ0FMRV9JRElHSVRTLCIyIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSUxaRVJPLCIxIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSU5FR05VTUJFUikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU05BVElWRURJR0lUUykgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0NVUlJFTkNZLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TSU5UTFNZTUJPTCkgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTkRFQ0lNQUxTRVAsIiwiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhPVVNBTkRTRVAsIi4iKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcpICovCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVESUdJVFMsICIwMTIzNDU2Nzg5IikKK0xPQ1ZBTChMT0NBTEVfU0NVUlJFTkNZLCJGQiIpCitMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MLCAiQkVGIikKK0xPQ1ZBTChMT0NBTEVfU01PTkRFQ0lNQUxTRVAsIiwiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhPVVNBTkRTRVAsIi4iKQorTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcsICIzOzAiKQogLyogTE9DVkFMKExPQ0FMRV9JQ1VSUkRJR0lUUywiMiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUykgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSUNVUlJFTkNZLCIzIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSU5FR0NVUlIsIjgiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TREFURSwiLiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NUSU1FLCI6IikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU1NIT1JUREFURSwiZGQvTU0teXl5eSIpICovCitMT0NWQUwoTE9DQUxFX1NEQVRFLCIvIikKK0xPQ1ZBTChMT0NBTEVfU1RJTUUsIjoiKQorTE9DVkFMKExPQ0FMRV9TU0hPUlREQVRFLCJkZC9NTS95eXl5IikKIC8qIExPQ1ZBTChMT0NBTEVfU0xPTkdEQVRFLCJkZGQsIGQuIE1NTU0geXl5eSIpICovCiAvKiBMT0NWQUwoTE9DQUxFX1NUSU1FRk9STUFUKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JREFURSwiMSIpICovCkBAIC00OCw1OSArNDgsNTkgQEAKIC8qIExPQ1ZBTChMT0NBTEVfSVRMWkVSTywiMSIpCiAvKiBMT0NWQUwoTE9DQUxFX0lEQVlMWkVSTykgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSU1PTkxaRVJPKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TMTE1OSwgIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1MyMzU5LCAiIikgKi8KK0xPQ1ZBTChMT0NBTEVfUzExNTksICIiKQorTE9DVkFMKExPQ0FMRV9TMjM1OSwgIiIpCiAvKiBMT0NWQUwoTE9DQUxFX0lDQUxFTkRBUlRZUEUpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lPUFRJT05BTENBTEVOREFSKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUspICovCiAvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIpICovCiAKLS8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCIiKSAqLworTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsImx1bmRpIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUyLCJtYXJkaSIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywibWVyY3JlZGkiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTQsImpldWRpIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU1LCJ2ZW5kcmVkaSIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwic2FtZWRpIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCJkaW1hbmNoZSIpCiAKLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCJNYSIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwiVGkiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsIk9uIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCJUbyIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwiRnIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsIkz4IikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCJT+CIpICovCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwibHVuIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCJtYXIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsIm1lciIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwiamV1IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCJ2ZW4iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsInNhbSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiZGltIikKIAotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTUsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU2LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNywiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTgsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU5LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTAsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEyLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiamFudmllciIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUyLCJm6XZyaWVyIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTMsIm1hcnMiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwiYXZyaWwiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwibWFpIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsImp1aW4iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNywianVpbGxldCIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU4LCJhb/t0IikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksInNlcHRlbWJyZSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMCwib2N0b2JyZSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMSwibm92ZW1icmUiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsImTpY2VtYnJlIikKIC8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEzLCIiKSAqLwogCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTksIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsIiIpICovCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxLCJqYW4iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiwiZul2IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMsIm1hciIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0LCJhdnIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwibWFpIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYsImp1biIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3LCJqdWwiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCwiYW/7IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTksInNlcCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCwib2N0IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExLCJub3YiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsImTpYyIpCiAvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMywiIikgKi8KIAotLyogTE9DVkFMKExPQ0FMRV9TUE9TSVRJVkVTSUdOLCAiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTiwgIiIpICovCitMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04sICIiKQorTE9DVkFMKExPQ0FMRV9TTkVHQVRJVkVTSUdOLCAiLSIpCiAvKiBMT0NWQUwoTE9DQUxFX0lQT1NTSUdOUE9TTiwgIiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lORUdTSUdOUE9TTiwgIiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lQT1NTWU1QUkVDRURFUywgIiIpICovCkBAIC0xMDgsMyArMTA4LDQgQEAKIC8qIExPQ1ZBTChMT0NBTEVfSU5FR1NZTVBSRUNFREVTLCAiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSU5FR1NFUEJZU1BBQ0UsICIiKSAqLwogCisvKiBjYWxlbmRyaWVyIGdy6WdvcmllbiAqLwpkaWZmIC0tZ2l0IGEvb2xlL25scy9mcmMubmxzIGIvb2xlL25scy9mcmMubmxzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4MjkwMTIKLS0tIC9kZXYvbnVsbAorKysgYi9vbGUvbmxzL2ZyYy5ubHMKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKglPTEUyTkxTIGxpYnJhcnkKKyAqICAgICAgQ2FuYWRhIChGcmVuY2gpCisgKi8KKworLyogTE9DVkFMKExPQ0FMRV9JTEFOR1VBR0UsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0VOR0xBTkdVQUdFLCJGcmVuY2giKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTEFOR05BTUUsImZyYyIpCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwiZnJhboBhaXMiKQorLyogTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIiIpICovCitMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCJDYW5hZGEiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIkNBTiIpCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwiQ2FuYWRhIikKKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPREVQQUdFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xJU1QsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lNRUFTVVJFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREVDSU1BTCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1RIT1VTQU5ELCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TR1JPVVBJTkcpICovCisvKiBMT0NWQUwoTE9DQUxFX0lESUdJVFMsIjIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTFpFUk8sIjEiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHTlVNQkVSKSAqLworTE9DVkFMKExPQ0FMRV9TTkFUSVZFRElHSVRTLCAiMDEyMzQ1Njc4OSIpCitMT0NWQUwoTE9DQUxFX1NDVVJSRU5DWSwiJCIpCitMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MLCAiQ0FEIikKK0xPQ1ZBTChMT0NBTEVfU01PTkRFQ0lNQUxTRVAsIiwiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhPVVNBTkRTRVAsIi4iKQorTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcsICIzOzAiKQorLyogTE9DVkFMKExPQ0FMRV9JQ1VSUkRJR0lUUywiMiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNVUlJFTkNZLCIzIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR0NVUlIsIjgiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFURSwiLiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSU1FLCI6IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1NIT1JUREFURSwiZGQvTU0teXl5eSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMT05HREFURSwiZGRkLCBkLiBNTU1NIHl5eXkiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVElNRUZPUk1BVCkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURBVEUsIjEiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTERBVEUpICovCisvKiBMT0NWQUwoTE9DQUxFX0lUSU1FLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSVRJTUVNQVJLUE9TTikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNFTlRVUlkpICovCisvKiBMT0NWQUwoTE9DQUxFX0lUTFpFUk8sIjEiKQorLyogTE9DVkFMKExPQ0FMRV9JREFZTFpFUk8pICovCisvKiBMT0NWQUwoTE9DQUxFX0lNT05MWkVSTykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfUzExNTksICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TMjM1OSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDQUxFTkRBUlRZUEUpICovCisvKiBMT0NWQUwoTE9DQUxFX0lPUFRJT05BTENBTEVOREFSKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUspICovCisvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIpICovCisKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCJsdW5kaSIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMiwibWFyZGkiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsIm1lcmNyZWRpIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCJqZXVkaSIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNSwidmVuZHJlZGkiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsInNhbWVkaSIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywiZGltYW5jaGUiKQorCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwibHVuIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCJtYXIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsIm1lciIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwiamV1IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCJ2ZW4iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsInNhbSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiZGltIikKKworTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiamFudmllciIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUyLCJmgHZyaWVyIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTMsIm1hcnMiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwiYXZyaWwiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwibWFpIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsImp1aW4iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNywianVpbGxldCIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU4LCJhb4B0IikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksInNlcHRlbWJyZSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMCwib2N0b2JyZSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMSwibm92ZW1icmUiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsImSAY2VtYnJlIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEzLCIiKQorCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxLCJqYW52IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsImaAdnIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMywibWFycyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0LCJhdnIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwibWFpIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYsImp1aW4iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNywianVpbCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4LCJhb4B0IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTksInNlcHQiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAsIm9jdCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwibm92IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyLCJkgGMiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMsIiIpCisKKy8qIExPQ1ZBTChMT0NBTEVfU1BPU0lUSVZFU0lHTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NORUdBVElWRVNJR04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU0lHTlBPU04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU0lHTlBPU04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU1lNUFJFQ0VERVMsICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU0VQQllTUEFDRSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTWU1QUkVDRURFUywgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTRVBCWVNQQUNFLCAiIikgKi8KKworLyogY2FsZW5kcmllciBncoBnb3JpZW4gKi8KZGlmZiAtLWdpdCBhL29sZS9ubHMvZnJsLm5scyBiL29sZS9ubHMvZnJsLm5scwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzBjYzVkCi0tLSAvZGV2L251bGwKKysrIGIvb2xlL25scy9mcmwubmxzCkBAIC0wLDAgKzEsMTExIEBACisvKgorICoJT0xFMk5MUyBsaWJyYXJ5CisgKiAgICAgIEx1eGVtYnVyZyAoRnJlbmNoKQorICovCisKKy8qIExPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsIiIpICovCitMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiRnJlbmNoIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJmcmwiKQorTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsImZyYW6AYWlzIikKKy8qIExPQ1ZBTChMT0NBTEVfSUNPVU5UUlksIiIpICovCitMT0NWQUwoTE9DQUxFX1NDT1VOVFJZLCJMdXhlbWJvdXJnIikKK0xPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIkx1eGVtYnVyZyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiTFVYIikKK0xPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCJMdXhlbWJvdXJnIikKKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPREVQQUdFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xJU1QsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lNRUFTVVJFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREVDSU1BTCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1RIT1VTQU5ELCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TR1JPVVBJTkcpICovCisvKiBMT0NWQUwoTE9DQUxFX0lESUdJVFMsIjIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTFpFUk8sIjEiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHTlVNQkVSKSAqLworTE9DVkFMKExPQ0FMRV9TTkFUSVZFRElHSVRTLCAiMDEyMzQ1Njc4OSIpCitMT0NWQUwoTE9DQUxFX1NDVVJSRU5DWSwiRiIpCitMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MLCAiTFVGIikKK0xPQ1ZBTChMT0NBTEVfU01PTkRFQ0lNQUxTRVAsIiwiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhPVVNBTkRTRVAsIi4iKQorTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcsICIzOzAiKQorLyogTE9DVkFMKExPQ0FMRV9JQ1VSUkRJR0lUUywiMiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNVUlJFTkNZLCIzIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR0NVUlIsIjgiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFURSwiLiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSU1FLCI6IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1NIT1JUREFURSwiZGQvTU0teXl5eSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMT05HREFURSwiZGRkLCBkLiBNTU1NIHl5eXkiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVElNRUZPUk1BVCkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURBVEUsIjEiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTERBVEUpICovCisvKiBMT0NWQUwoTE9DQUxFX0lUSU1FLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSVRJTUVNQVJLUE9TTikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNFTlRVUlkpICovCisvKiBMT0NWQUwoTE9DQUxFX0lUTFpFUk8sIjEiKQorLyogTE9DVkFMKExPQ0FMRV9JREFZTFpFUk8pICovCisvKiBMT0NWQUwoTE9DQUxFX0lNT05MWkVSTykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfUzExNTksICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TMjM1OSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDQUxFTkRBUlRZUEUpICovCisvKiBMT0NWQUwoTE9DQUxFX0lPUFRJT05BTENBTEVOREFSKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUspICovCisvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIpICovCisKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCJsdW5kaSIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMiwibWFyZGkiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsIm1lcmNyZWRpIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCJqZXVkaSIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNSwidmVuZHJlZGkiKSAKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCJzYW1lZGkiKSAKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCJkaW1hbmNoZSIpCisKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCJsdW4iKSAKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCJtYXIiKSAKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCJtZXIiKSAKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCJqZXUiKSAKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCJ2ZW4iKSAKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCJzYW0iKSAKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCJkaW0iKSAKKworTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiamFudmllciIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUyLCJmgHZyaWVyIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTMsIm1hcnMiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwiYXZyaWwiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwibWFpIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsImp1aW4iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNywianVpbGxldCIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU4LCJhb4B0IikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksInNlcHRlbWJyZSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMCwib2N0b2JyZSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMSwibm92ZW1icmUiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsImSAY2VtYnJlIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEzLCIiKQorCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxLCJqYW52IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsImaAdnIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMywibWFycyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0LCJhdnIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwibWFpIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYsImp1aW4iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNywianVpbCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4LCJhb4B0IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTksInNlcHQiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAsIm9jdCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwibm92IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyLCJkZWMiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMsIiIpCisKKy8qIExPQ1ZBTChMT0NBTEVfU1BPU0lUSVZFU0lHTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NORUdBVElWRVNJR04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU0lHTlBPU04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU0lHTlBPU04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU1lNUFJFQ0VERVMsICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU0VQQllTUEFDRSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTWU1QUkVDRURFUywgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTRVBCWVNQQUNFLCAiIikgKi8KKworLyogY2FsZW5kcmllciBncoBnb3JpZW4gKi8KZGlmZiAtLWdpdCBhL29sZS9ubHMvZnJzLm5scyBiL29sZS9ubHMvZnJzLm5scwppbmRleCA2MmM0YzhkLi45Yzc5NGYwIDEwMDY0NAotLS0gYS9vbGUvbmxzL2Zycy5ubHMKKysrIGIvb2xlL25scy9mcnMubmxzCkBAIC00LDE4ICs0LDE4IEBACiAgKi8KIAogLyogTE9DVkFMKExPQ0FMRV9JTEFOR1VBR0UsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiIikgKi8KLUxPQ1ZBTChMT0NBTEVfU0VOR0xBTkdVQUdFLCJTd2l0emVybGFuZCIpCitMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiRnJhbudhaXMgKFN1aXNzZSkiKQorTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIkZyZW5jaCAoU3dpdHplcmxhbmQpIikKIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJmcnMiKQotLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIiIpICovCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwiRnJhbudhaXMgKFN1aXNzZSkiKQogLyogTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIlN1aXNzZSIpCitMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCJTd2l0emVybGFuZCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiQ2giKQorTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsIlN1aXNzZSIpCiAvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUTEFOR1VBR0UsIiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSkgKi8KK0xPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSwiODUwIikKIC8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UpICovCiAvKiBMT0NWQUwoTE9DQUxFX1NMSVNULCIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JTUVBU1VSRSwiIikgKi8KQEAgLTI1LDEyICsyNSwxMiBAQAogLyogTE9DVkFMKExPQ0FMRV9JRElHSVRTLCIyIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSUxaRVJPLCIxIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSU5FR05VTUJFUikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU05BVElWRURJR0lUUykgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0NVUlJFTkNZLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TSU5UTFNZTUJPTCkgKi8KK0xPQ1ZBTChMT0NBTEVfU05BVElWRURJR0lUUywgIjAxMjM0NTY3ODkiKQorTE9DVkFMKExPQ0FMRV9TQ1VSUkVOQ1ksIlNGciIpCitMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MLCAiQ0hGIikKIC8qIExPQ1ZBTChMT0NBTEVfU01PTkRFQ0lNQUxTRVAsIiwiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhPVVNBTkRTRVAsIi4iKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcpICovCitMT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORywgIjM7MCIpCiAvKiBMT0NWQUwoTE9DQUxFX0lDVVJSRElHSVRTLCIyIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSUlOVExDVVJSRElHSVRTKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JQ1VSUkVOQ1ksIjMiKSAqLwpAQCAtNTUsNTIgKzU1LDUyIEBACiAvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVERBWU9GV0VFSykgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUV0VFS09GWUVBUikgKi8KIAotLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMiwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTQsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTcsIiIpICovCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMSwibHVuZGkiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsIm1hcmRpIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCJtZXJjcmVkaSIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwiamV1ZGkiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsInZlbmRyZWRpIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCJzYW1lZGkiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTcsImRpbWFuY2hlIikKIAotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsIk1hIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCJUaSIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywiT24iKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsIlRvIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCJGciIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwiTPgiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsIlP4IikgKi8KK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCJsdW4iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsIm1hciIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywibWVyIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCJqZXUiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsInZlbiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwic2FtIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCJkaW0iKQogCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTMsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOCwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMCwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTExLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsIiIpICovCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCJqYW52aWVyIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsImbpdnJpZXIiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMywibWFycyIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCJhdnJpbCIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU1LCJtYWkiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNiwianVpbiIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCJqdWlsbGV0IikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTgsImFv+3QiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOSwic2VwdGVtYnJlIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCJvY3RvYnJlIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTExLCJub3ZlbWJyZSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMiwiZOljZW1icmUiKQogLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTMsIiIpICovCiAKLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMywiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNiwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTEsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsImphbiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyLCJm6XYiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMywibWFyIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQsImF2ciIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1LCJtYWkiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNiwianVuIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcsImp1bCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4LCJhb/siKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOSwic2VwIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwLCJvY3QiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTEsIm5vdiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiwiZOljIikKIC8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzLCIiKSAqLwogCi0vKiBMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04sICIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTkVHQVRJVkVTSUdOLCAiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU1BPU0lUSVZFU0lHTiwgIiIpCitMT0NWQUwoTE9DQUxFX1NORUdBVElWRVNJR04sICItIikKIC8qIExPQ1ZBTChMT0NBTEVfSVBPU1NJR05QT1NOLCAiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSU5FR1NJR05QT1NOLCAiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSVBPU1NZTVBSRUNFREVTLCAiIikgKi8KQEAgLTEwOCwzICsxMDgsNCBAQAogLyogTE9DVkFMKExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMsICIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JTkVHU0VQQllTUEFDRSwgIiIpICovCiAKKy8qIGNhbGVuZHJpZXIgZ3LpZ29yaWVuICovCmRpZmYgLS1naXQgYS9vbGUvbmxzL2dyYy5ubHMgYi9vbGUvbmxzL2dyYy5ubHMKaW5kZXggMGU2ZTQyMy4uMTFmZDA2NiAxMDA2NDQKLS0tIGEvb2xlL25scy9ncmMubmxzCisrKyBiL29sZS9ubHMvZ3JjLm5scwpAQCAtMjUsMTIgKzI1LDEyIEBACiAvKiBMT0NWQUwoTE9DQUxFX0lESUdJVFMsIjIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JTFpFUk8sIjEiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JTkVHTlVNQkVSKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFRElHSVRTKSAqLworTE9DVkFMKExPQ0FMRV9TTkFUSVZFRElHSVRTLCAiMDEyMzQ1Njc4OSIpCiAvKiBMT0NWQUwoTE9DQUxFX1NDVVJSRU5DWSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0lOVExTWU1CT0wpICovCitMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MLCAiR1JEIikKIC8qIExPQ1ZBTChMT0NBTEVfU01PTkRFQ0lNQUxTRVAsIiwiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhPVVNBTkRTRVAsIi4iKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcpICovCitMT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORywgIjM7MCIpCiAvKiBMT0NWQUwoTE9DQUxFX0lDVVJSRElHSVRTLCIyIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSUlOVExDVVJSRElHSVRTKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JQ1VSUkVOQ1ksIjMiKSAqLwpkaWZmIC0tZ2l0IGEvb2xlL25scy9ocnYubmxzIGIvb2xlL25scy9ocnYubmxzCmluZGV4IGIwM2QyNjEuLjM2ZDQzMTQgMTAwNjQ0Ci0tLSBhL29sZS9ubHMvaHJ2Lm5scworKysgYi9vbGUvbmxzL2hydi5ubHMKQEAgLTUsMTQgKzUsMTQgQEAKIAogLyogTE9DVkFMKExPQ0FMRV9JTEFOR1VBR0UsIiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0VOR0xBTkdVQUdFLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIkNyb2F0aWFuIikKIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJocnYiKQotLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIiIpICovCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwiaHJ2YXRza2kiKQogLyogTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIkNyb2F0aWEiKQorLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIkhSViIpCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwiSHJ2YXRza2EiKQogLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksIiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UpICovCkBAIC0yNSwxMiArMjUsMTIgQEAKIC8qIExPQ1ZBTChMT0NBTEVfSURJR0lUUywiMiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lMWkVSTywiMSIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lORUdOVU1CRVIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVESUdJVFMpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NDVVJSRU5DWSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0lOVExTWU1CT0wpICovCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVESUdJVFMsIjAxMjM0NTY3ODkiKQorTE9DVkFMKExPQ0FMRV9TQ1VSUkVOQ1ksIkRpbiIpCitMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MLCJIUkQiKQogLyogTE9DVkFMKExPQ0FMRV9TTU9OREVDSU1BTFNFUCwiLCIpICovCiAvKiBMT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCwiLiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORykgKi8KK0xPQ1ZBTChMT0NBTEVfU01PTkdST1VQSU5HLCIzOzAiKQogLyogTE9DVkFMKExPQ0FMRV9JQ1VSUkRJR0lUUywiMiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUykgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSUNVUlJFTkNZLCIzIikgKi8KQEAgLTU1LDQ5ICs1NSw1MCBAQAogLyogTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUspICovCiAvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIpICovCiAKLS8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsInBvbmVkaiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMiwiZWxqYWsiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsInV0b3JhayIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwic3JpamVkYSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNSwiZXR2cnRhayIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwicGV0YWsiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTcsInN1Ym90YSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FPywibmVkamVsamEiKSAqLwogCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwiTWEiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsIlRpIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCJPbiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwiVG8iKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsIkZyIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCJM+CIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiU/giKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsIiIpICovCiAKLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUyLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMywiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTQsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU1LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNiwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTcsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU4LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTEsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMiwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEzLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwic2lqZT9hbmoiKSAKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsInZlbGphIikgCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCJvP3VqYWsiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwidHJhdmFuaiIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU1LCJzdmliYW5qIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsImxpcGFuaiIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCJzcnBhbmoiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNywia29sb3ZveiIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU5LCJydWphbiIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMCwibGlzdG9wYWQiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTEsInN0dWRlbmkiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsInByb3NpbmFjIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEyLCIiKQogCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTksIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMywiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsInNpaiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyLCJ2ZWwiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMywibz91IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQsInRyYSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1LCJzdmkiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNiwibGlwIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcsInNycCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4LCJrb2wiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOSwicnVqIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwLCJsaXMiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTEsInN0dSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiwicHJvIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzLCIiKQogCiAvKiBMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04sICIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9TTkVHQVRJVkVTSUdOLCAiIikgKi8KQEAgLTEwOCwzICsxMDksNCBAQAogLyogTE9DVkFMKExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMsICIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JTkVHU0VQQllTUEFDRSwgIiIpICovCiAKKy8qIEdyZWdvcmlqYW5za2kga2FsZW5kYXIgKi8KZGlmZiAtLWdpdCBhL29sZS9ubHMvaHVuLm5scyBiL29sZS9ubHMvaHVuLm5scwppbmRleCA0NjZlNzg5Li43ZGIzNWYwIDEwMDY0NAotLS0gYS9vbGUvbmxzL2h1bi5ubHMKKysrIGIvb2xlL25scy9odW4ubmxzCkBAIC0yNSwxMiArMjUsMTIgQEAKIExPQ1ZBTChMT0NBTEVfSURJR0lUUywiMiIpCiBMT0NWQUwoTE9DQUxFX0lMWkVSTywiMSIpCiAvKiBMT0NWQUwoTE9DQUxFX0lORUdOVU1CRVIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVESUdJVFMpICovCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVESUdJVFMsICIwMTIzNDU2Nzg5IikKIExPQ1ZBTChMT0NBTEVfU0NVUlJFTkNZLCJGdCIpCiBMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MLCJIVUYiKQogLyogTE9DVkFMKExPQ0FMRV9TTU9OREVDSU1BTFNFUCkgKi8KIC8qIExPQ1ZBTChMT0NBTEVfU01PTlRIT1VTQU5EU0VQKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcpICovCitMT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORywiMzswIikKIExPQ1ZBTChMT0NBTEVfSUNVUlJESUdJVFMsIjAiKQogLyogTE9DVkFMKExPQ0FMRV9JSU5UTENVUlJESUdJVFMpICovCiBMT0NWQUwoTE9DQUxFX0lDVVJSRU5DWSwiMyIpCmRpZmYgLS1naXQgYS9vbGUvbmxzL2luZC5ubHMgYi9vbGUvbmxzL2luZC5ubHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M5NjEwZgotLS0gL2Rldi9udWxsCisrKyBiL29sZS9ubHMvaW5kLm5scwpAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqCU9MRTJOTFMgbGlicmFyeQorICogICAgICBJbmRvbmVzaWEgKEJhaGFzYSkKKyAqLworCisvKiBMT0NWQUwoTE9DQUxFX0lMQU5HVUFHRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIiIpICovCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZMQU5HTkFNRSwiaW5kIikKKy8qIExPQ1ZBTChMT0NBTEVfU05BVElWRUxBTkdOQU1FLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPREVQQUdFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xJU1QsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lNRUFTVVJFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREVDSU1BTCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1RIT1VTQU5ELCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TR1JPVVBJTkcpICovCisvKiBMT0NWQUwoTE9DQUxFX0lESUdJVFMsIjIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTFpFUk8sIjEiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHTlVNQkVSKSAqLworTE9DVkFMKExPQ0FMRV9TTkFUSVZFRElHSVRTLCIwMTIzNDU2Nzg5IikKKy8qIExPQ1ZBTChMT0NBTEVfU0NVUlJFTkNZLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TSU5UTFNZTUJPTCwiQUVEIikKKy8qIExPQ1ZBTChMT0NBTEVfU01PTkRFQ0lNQUxTRVAsIiwiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhPVVNBTkRTRVAsIi4iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDVVJSRElHSVRTLCIyIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUlOVExDVVJSRElHSVRTKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ1VSUkVOQ1ksIjMiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHQ1VSUiwiOCIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVRFLCIuIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1RJTUUsIjoiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TU0hPUlREQVRFLCJkZC9NTS15eXl5IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xPTkdEQVRFLCJkZGQsIGQuIE1NTU0geXl5eSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSU1FRk9STUFUKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREFURSwiMSIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lMREFURSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVRJTUUsIjEiKQorLyogTE9DVkFMKExPQ0FMRV9JVElNRU1BUktQT1NOKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ0VOVFVSWSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVRMWkVSTywiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lEQVlMWkVSTykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU1PTkxaRVJPKSAqLworLyogTE9DVkFMKExPQ0FMRV9TMTE1OSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1MyMzU5LCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNBTEVOREFSVFlQRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU9QVElPTkFMQ0FMRU5EQVIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVERBWU9GV0VFSykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUV0VFS09GWUVBUikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTcsIiIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCIiKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTMsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTExLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMywiIikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMsIiIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU1BPU0lUSVZFU0lHTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NORUdBVElWRVNJR04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU0lHTlBPU04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU0lHTlBPU04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU1lNUFJFQ0VERVMsICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU0VQQllTUEFDRSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTWU1QUkVDRURFUywgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTRVBCWVNQQUNFLCAiIikgKi8KKworLyogKi8KZGlmZiAtLWdpdCBhL29sZS9ubHMvaXJsLm5scyBiL29sZS9ubHMvaXJsLm5scwppbmRleCBmYjE1MjI4Li5jZjk2ZTZmIDEwMDY0NAotLS0gYS9vbGUvbmxzL2lybC5ubHMKKysrIGIvb2xlL25scy9pcmwubmxzCkBAIC05LDkgKzksOSBAQAogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTEFOR05BTUUsICJpcmwiKQogTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsICJFbmdsaXNoIikKIExPQ1ZBTChMT0NBTEVfSUNPVU5UUlksICIxIikKLUxPQ1ZBTChMT0NBTEVfU0NPVU5UUlksICJVbml0ZWQgU3RhdGVzIikKLUxPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksICJVbml0ZWQgU3RhdGVzIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCAiVVNBIikKK0xPQ1ZBTChMT0NBTEVfU0NPVU5UUlksICJJcmVsYW5kIikKK0xPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksICJJcmVsYW5kIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCAiSVJMIikKIExPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCAiRWlyZSIpCiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUTEFOR1VBR0UsICIwNDA5IikKIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT1VOVFJZLCAiMSIpCkBAIC0xMDcsMyArMTA3LDUgQEAKIExPQ1ZBTChMT0NBTEVfSVBPU1NFUEJZU1BBQ0UsICIwIikKIExPQ1ZBTChMT0NBTEVfSU5FR1NZTVBSRUNFREVTLCAiMSIpCiBMT0NWQUwoTE9DQUxFX0lORUdTRVBCWVNQQUNFLCAiMCIpCisKKy8qIEdyZWdvcmlhbiBDYWxlbmRhciAqLwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL29sZS9ubHMvaXNsLm5scyBiL29sZS9ubHMvaXNsLm5scwppbmRleCBlMjA3ZGExLi5jYTdhNTc5IDEwMDY0NAotLS0gYS9vbGUvbmxzL2lzbC5ubHMKKysrIGIvb2xlL25scy9pc2wubmxzCkBAIC03LDcgKzcsNyBAQAogTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsIoBzbGVuc2siKQogTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIkljZWxhbmRpYyIpCiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZMQU5HTkFNRSwiaXNsIikKLUxPQ1ZBTChMT0NBTEVfU05BVElWRUxBTkdOQU1FLCKAc2xlbnNrIikKK0xPQ1ZBTChMT0NBTEVfU05BVElWRUxBTkdOQU1FLCKAc2xlbnNrYSIpCiAvKiBMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCI0OSIpICovCiBMT0NWQUwoTE9DQUxFX1NDT1VOVFJZLCKAc2xhbmQiKQogTE9DVkFMKExPQ0FMRV9TRU5HQ09VTlRSWSwiSWNlbGFuZCIpCkBAIC0zMCw3ICszMCw3IEBACiBMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MLCAiSVNLIikKIC8qIExPQ1ZBTChMT0NBTEVfU01PTkRFQ0lNQUxTRVApICovCiAvKiBMT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCkgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTkdST1VQSU5HKSAqLworTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcsIjM7MCIpCiBMT0NWQUwoTE9DQUxFX0lDVVJSRElHSVRTLCIyIikKIC8qIExPQ1ZBTChMT0NBTEVfSUlOVExDVVJSRElHSVRTKSAqLwogTE9DVkFMKExPQ0FMRV9JQ1VSUkVOQ1ksIjMiKQpAQCAtNTYsMjAgKzU2LDIwIEBACiAvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIpICovCiAKIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCJtgG51ZGFndXIiKQotTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsInRocmlkanVkYWd1ciIpCi1MT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywibWlkdmlrdWRhZ3VyIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUyLCI/aHJpZGp1ZGFndXIiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsIm1pP3Zpa3VkYWd1ciIpCiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwiZmltbXR1ZGFndXIiKQogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsImaAc3R1ZGFndXIiKQogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsImxhdWdhcmRhZ3VyIikKIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCJzdW5udWRhZ3VyIikKIAotTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsIm2AIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCJkciIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywibWkiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsImZpIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCJmgCIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwibGEiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsInN1IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCJtgG4iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsIj9yaSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywibWk/IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCJmaW0iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsImaAcyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwibGF1IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCJzdW4iKQogCiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCJqYW6AYXIiKQogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiZmVicoBhciIpCkBAIC0xMDcsMyArMTA3LDUgQEAKIC8qIExPQ1ZBTChMT0NBTEVfSVBPU1NFUEJZU1BBQ0UpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lORUdTWU1QUkVDRURFUykgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSU5FR1NFUEJZU1BBQ0UpICovCisKKy8qIGdyZWdvciAqLwpkaWZmIC0tZ2l0IGEvb2xlL25scy9pdGEubmxzIGIvb2xlL25scy9pdGEubmxzCmluZGV4IDY2NDU2OGUuLjI4MmE4NTcgMTAwNjQ0Ci0tLSBhL29sZS9ubHMvaXRhLm5scworKysgYi9vbGUvbmxzL2l0YS5ubHMKQEAgLTExLDExICsxMSwxMSBAQAogTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwiMzkiKQogTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiSXRhbGlhIikKIExPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIkl0YWx5IikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCJJdCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiSVRMIikKIExPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCJJdGFsaWEiKQogTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCI5IikKIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT1VOVFJZLCIzOSIpCi0vKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UpIC8qCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFKSAqLwogTE9DVkFMKExPQ0FMRV9TTElTVCwiOyIpCiBMT0NWQUwoTE9DQUxFX0lNRUFTVVJFLCIwIikKQEAgLTMwLDcgKzMwLDcgQEAKIExPQ1ZBTChMT0NBTEVfU0lOVExTWU1CT0wsICJJVEwiKQogLyogTE9DVkFMKExPQ0FMRV9TTU9OREVDSU1BTFNFUCkgKi8KIC8qIExPQ1ZBTChMT0NBTEVfU01PTlRIT1VTQU5EU0VQKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcpICovCitMT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORywiMzswIikKIExPQ1ZBTChMT0NBTEVfSUNVUlJESUdJVFMsIjIiKQogLyogTE9DVkFMKExPQ0FMRV9JSU5UTENVUlJESUdJVFMpICovCiBMT0NWQUwoTE9DQUxFX0lDVVJSRU5DWSwiMyIpCkBAIC03MSwzMiArNzEsMzIgQEAKIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCJTYSIpCiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiRG8iKQogCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCJHZW5uYWlvIikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsIkZlYmJyYWlvIikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTMsIk1hcnpvIikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTQsIkFwcmlsZSIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUU1LCJNYWdnaW8iKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNiwiR2l1Z25vIikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTcsIkx1Z2xpbyIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUU4LCJBZ29zdG8iKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOSwiU2V0dGVtYnJlIikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCJPdHRvYnJlIikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTExLCJOb3ZlbWJyZSIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMiwiRGljZW1icmUiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiZ2VubmFpbyIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUyLCJmZWJicmFpbyIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCJtYXJ6byIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCJhcHJpbGUiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwibWFnZ2lvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsImdpdWdubyIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCJsdWdsaW8iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOCwiYWdvc3RvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksInNldHRlbWJyZSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMCwib3R0b2JyZSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMSwibm92ZW1icmUiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsImRpY2VtYnJlIikKIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEzLCIiKQogCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxLCJHZW4iKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiwiRmViIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMsIk1hciIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0LCJBcHIiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwiTWFnIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYsIkdpdSIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3LCJMdWciKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCwiQWdvIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTksIlNldCIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCwiT3R0IikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExLCJOb3YiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsIkRpYyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxLCJnZW4iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiwiZmViIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMsIm1hciIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0LCJhcHIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwibWFnIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYsImdpdSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3LCJsdWciKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCwiYWdvIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTksInNldCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCwib3R0IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExLCJub3YiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsImRpYyIpCiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMywiIikKIAogLyogTE9DVkFMKExPQ0FMRV9TUE9TSVRJVkVTSUdOKSAqLwpAQCAtMTA4LDMgKzEwOCw0IEBACiAvKiBMT0NWQUwoTE9DQUxFX0lORUdTWU1QUkVDRURFUykgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSU5FR1NFUEJZU1BBQ0UpICovCiAgCisvKiBjYWxlbmRhcmlvIGdyZWdvcmlhbm8gKi8KZGlmZiAtLWdpdCBhL29sZS9ubHMvaXRzLm5scyBiL29sZS9ubHMvaXRzLm5scwppbmRleCBhNDkzZmRlLi44YzRiM2ZiIDEwMDY0NAotLS0gYS9vbGUvbmxzL2l0cy5ubHMKKysrIGIvb2xlL25scy9pdHMubmxzCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqCU9MRTJOTFMgbGlicmFyeQotICogICAgICBTd2l0emVybGFuZAorICogICAgICBTd2l0emVybGFuZCAoSXRhbGlhbm8pCiAgKi8KIAogTE9DVkFMKExPQ0FMRV9JTEFOR1VBR0UsIjkiKQpAQCAtMTEsNyArMTEsNyBAQAogTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwiNDEiKQogTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiU3ZpenplcmEiKQogTE9DVkFMKExPQ0FMRV9TRU5HQ09VTlRSWSwiU3dpdHplcmFuZCIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiQ0giKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIkNIRSIpCiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwiU3ZpenplcmEiKQogTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCI5IikKIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT1VOVFJZLCI0MSIpCkBAIC0zMCw3ICszMCw3IEBACiBMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MLCAiQ0hGIikKIC8qIExPQ1ZBTChMT0NBTEVfU01PTkRFQ0lNQUxTRVApICovCiAvKiBMT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCkgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTkdST1VQSU5HKSAqLworTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcsIjM7MCIpCiBMT0NWQUwoTE9DQUxFX0lDVVJSRElHSVRTLCIyIikKIC8qIExPQ1ZBTChMT0NBTEVfSUlOVExDVVJSRElHSVRTKSAqLwogTE9DVkFMKExPQ0FMRV9JQ1VSUkVOQ1ksIjMiKQpAQCAtNTUsNDggKzU1LDQ4IEBACiAvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVERBWU9GV0VFSykgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUV0VFS09GWUVBUikgKi8KIAotTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsIkx1bmVkaSciKQotTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsIk1hcnRlZGknIikKLUxPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCJNZXJjb2xlZGknIikKLUxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCJHaW92ZWRpJyIpCi1MT0NWQUwoTE9DQUxFX1NEQVlOQU1FNSwiVmVuZXJkaSciKQotTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsIlNhYmF0byIpCi1MT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywiRG9tZW5pY2EiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsImx1bmVkaSciKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsIm1hcnRlZGknIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCJtZXJjb2xlZGknIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCJnaW92ZWRpJyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNSwidmVuZXJkaSciKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsInNhYmF0byIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywiZG9tZW5pY2EiKQogCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwiTHUiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsIk1hIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCJNZSIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwiR2kiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsIlZlIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCJTYSIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiRG8iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsImx1biIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwibWFyIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCJtZXIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsImdpbyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwidmVuIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCJzYWIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsImRvbSIpCiAKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEsIkdlbm5haW8iKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiRmViYnJhaW8iKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMywiTWFyem8iKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwiQXByaWxlIikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTUsIk1hZ2dpbyIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUU2LCJHaXVnbm8iKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNywiTHVnbGlvIikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTgsIkFnb3N0byIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUU5LCJTZXR0ZW1icmUiKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTAsIk90dG9icmUiKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTEsIk5vdmVtYnJlIikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEyLCJEaWNlbWJyZSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCJnZW5uYWlvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsImZlYmJyYWlvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTMsIm1hcnpvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTQsImFwcmlsZSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU1LCJtYWdnaW8iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNiwiZ2l1Z25vIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTcsImx1Z2xpbyIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU4LCJhZ29zdG8iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOSwic2V0dGVtYnJlIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCJvdHRvYnJlIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTExLCJub3ZlbWJyZSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMiwiZGljZW1icmUiKQogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTMsIiIpCiAKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsIkdlbiIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyLCJGZWIiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMywiTWFyIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQsIkFwciIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1LCJNYWciKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNiwiR2l1IikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcsIkx1ZyIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4LCJBZ28iKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOSwiU2V0IikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwLCJPdHQiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTEsIk5vdiIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiwiRGljIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsImdlbiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyLCJmZWIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMywibWFyIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQsImFwciIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1LCJtYWciKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNiwiZ2l1IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcsImx1ZyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4LCJhZ28iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOSwic2V0IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwLCJvdHQiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTEsIm5vdiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiwiZGljIikKIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzLCIiKQogCiAvKiBMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04pICovCkBAIC0xMDgsMyArMTA4LDQgQEAKIC8qIExPQ1ZBTChMT0NBTEVfSU5FR1NZTVBSRUNFREVTKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JTkVHU0VQQllTUEFDRSkgKi8KICAKKy8qIGNhbGVuZGFyaW8gZ3JlZ29yaWFubyAqLwpkaWZmIC0tZ2l0IGEvb2xlL25scy9qcG4ubmxzIGIvb2xlL25scy9qcG4ubmxzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0MWNmODEKLS0tIC9kZXYvbnVsbAorKysgYi9vbGUvbmxzL2pwbi5ubHMKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKglPTEUyTkxTIGxpYnJhcnkKKyAqICAgICAgSmFwYW5lc2UKKyAqLworCisvKiBMT0NWQUwoTE9DQUxFX0lMQU5HVUFHRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIkphcGFuZXNlIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJqcG4iKQorLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIkphcGFuIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCJKUE4iKQorLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUTEFOR1VBR0UsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMSVNULCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTUVBU1VSRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RFQ0lNQUwsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSE9VU0FORCwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0dST1VQSU5HLCIzOzAiKQorLyogTE9DVkFMKExPQ0FMRV9JRElHSVRTLCIyIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUxaRVJPLCIxIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR05VTUJFUikgKi8KK0xPQ1ZBTChMT0NBTEVfU05BVElWRURJR0lUUywiMDEyMzQ1Njc4OSIpCisvKiBMT0NWQUwoTE9DQUxFX1NDVVJSRU5DWSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0lOVExTWU1CT0wsICJKUFkiKQorLyogTE9DVkFMKExPQ0FMRV9TTU9OREVDSU1BTFNFUCwiLCIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCwiLiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNVUlJESUdJVFMsIjIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JSU5UTENVUlJESUdJVFMpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDVVJSRU5DWSwiMyIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdDVVJSLCI4IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBVEUsIi4iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVElNRSwiOiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NTSE9SVERBVEUsImRkL01NLXl5eXkiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTE9OR0RBVEUsImRkZCwgZC4gTU1NTSB5eXl5IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1RJTUVGT1JNQVQpICovCisvKiBMT0NWQUwoTE9DQUxFX0lEQVRFLCIxIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUxEQVRFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JVElNRSwiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lUSU1FTUFSS1BPU04pICovCisvKiBMT0NWQUwoTE9DQUxFX0lDRU5UVVJZKSAqLworLyogTE9DVkFMKExPQ0FMRV9JVExaRVJPLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSURBWUxaRVJPKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTU9OTFpFUk8pICovCisvKiBMT0NWQUwoTE9DQUxFX1MxMTU5LCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfUzIzNTksICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ0FMRU5EQVJUWVBFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JT1BUSU9OQUxDQUxFTkRBUikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUREFZT0ZXRUVLKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRklSU1RXRUVLT0ZZRUFSKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU1LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywiIikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsIiIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU1LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTcsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU4LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEzLCIiKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMywiIikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TUE9TSVRJVkVTSUdOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTSUdOUE9TTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTSUdOUE9TTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTWU1QUkVDRURFUywgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTRVBCWVNQQUNFLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NZTVBSRUNFREVTLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NFUEJZU1BBQ0UsICIiKSAqLworCmRpZmYgLS1naXQgYS9vbGUvbmxzL2tvai5ubHMgYi9vbGUvbmxzL2tvai5ubHMKaW5kZXggNzFhY2ViMi4uNGRlOTIxMCAxMDA2NDQKLS0tIGEvb2xlL25scy9rb2oubmxzCisrKyBiL29sZS9ubHMva29qLm5scwpAQCAtMSwxNyArMSwxNyBAQAogLyoKICAqCU9MRTJOTFMgbGlicmFyeQotICogICAgICBLb3JlYW4KKyAqICAgICAgS29yZWFuIChKb2hhYikKICAqLwogCiAvKiBMT0NWQUwoTE9DQUxFX0lMQU5HVUFHRSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIiIpICovCitMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiS29yZWFuIChKb2hhYikiKSAKK0xPQ1ZBTChMT0NBTEVfU0VOR0xBTkdVQUdFLCJLb3JlYW4iKQogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTEFOR05BTUUsImtvaiIpCiAvKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSUNPVU5UUlksIiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX1NDT1VOVFJZLCIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9TRU5HQ09VTlRSWSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIktPUiIpCiAvKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSwiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT1VOVFJZLCIiKSAqLwpAQCAtMjUsMTIgKzI1LDEyIEBACiAvKiBMT0NWQUwoTE9DQUxFX0lESUdJVFMsIjIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JTFpFUk8sIjEiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JTkVHTlVNQkVSKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFRElHSVRTKSAqLworTE9DVkFMKExPQ0FMRV9TTkFUSVZFRElHSVRTLCAiMDEyMzQ1Njc4OSIpCiAvKiBMT0NWQUwoTE9DQUxFX1NDVVJSRU5DWSwiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfU0lOVExTWU1CT0wpICovCiAvKiBMT0NWQUwoTE9DQUxFX1NNT05ERUNJTUFMU0VQLCIsIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfU01PTlRIT1VTQU5EU0VQLCIuIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTkdST1VQSU5HKSAqLworTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcsIjM7MCIpCiAvKiBMT0NWQUwoTE9DQUxFX0lDVVJSRElHSVRTLCIyIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSUlOVExDVVJSRElHSVRTKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JQ1VSUkVOQ1ksIjMiKSAqLwpAQCAtNjMsMTMgKzYzLDEzIEBACiAvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCIiKSAqLwogCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwiTWEiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsIlRpIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCJPbiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwiVG8iKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsIkZyIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCJM+CIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiU/giKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsIiIpICovCiAKIC8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEsIiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUyLCIiKSAqLwpkaWZmIC0tZ2l0IGEvb2xlL25scy9sdGgubmxzIGIvb2xlL25scy9sdGgubmxzCmluZGV4IGY3NTg2OTcuLjA1MWMxNDEgMTAwNjQ0Ci0tLSBhL29sZS9ubHMvbHRoLm5scworKysgYi9vbGUvbmxzL2x0aC5ubHMKQEAgLTYzLDEzICs2MywxMyBAQAogLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsIiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywiIikgKi8KIAotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsIk1hIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCJUaSIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywiT24iKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsIlRvIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCJGciIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwiTPgiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsIlP4IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCIiKSAqLwogCiAvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiIikgKi8KZGlmZiAtLWdpdCBhL29sZS9ubHMvbHZpLm5scyBiL29sZS9ubHMvbHZpLm5scwppbmRleCBhMGQxNzczLi42Nzg2M2M3IDEwMDY0NAotLS0gYS9vbGUvbmxzL2x2aS5ubHMKKysrIGIvb2xlL25scy9sdmkubmxzCkBAIC02MywxMyArNjMsMTMgQEAKIC8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTcsIiIpICovCiAKLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCJNYSIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwiVGkiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsIk9uIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCJUbyIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwiRnIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsIkz4IikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCJT+CIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiIikgKi8KIAogLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsIiIpICovCmRpZmYgLS1naXQgYS9vbGUvbmxzL25sYi5ubHMgYi9vbGUvbmxzL25sYi5ubHMKaW5kZXggZTI5MTAzZi4uZjk5ODA1OSAxMDA2NDQKLS0tIGEvb2xlL25scy9ubGIubmxzCisrKyBiL29sZS9ubHMvbmxiLm5scwpAQCAtMSwxOCArMSwxOCBAQAogLyoKICAqCU9MRTJOTFMgbGlicmFyeQotICogICAgICBOZXRoZXJsYW5kcworICogICAgICBEdXRjaCAoQmVsZ2l1bSkKICAqLwogCiAvKiBMT0NWQUwoTE9DQUxFX0lMQU5HVUFHRSwiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIiIpICovCitMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiRHV0Y2giKQogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTEFOR05BTUUsIm5sYiIpCi0vKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU05BVElWRUxBTkdOQU1FLCJOZWRlcmxhbmRzIikKIC8qIExPQ1ZBTChMT0NBTEVfSUNPVU5UUlksIiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX1NDT1VOVFJZLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TRU5HQ09VTlRSWSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsIiIpICovCitMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCJCZWxnaXVtIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCJCRUwiKQorLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsIkJlbGdpIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSwiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT1VOVFJZLCIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPREVQQUdFKSAqLwpAQCAtMjUsMTIgKzI1LDEyIEBACiAvKiBMT0NWQUwoTE9DQUxFX0lESUdJVFMsIjIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JTFpFUk8sIjEiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JTkVHTlVNQkVSKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFRElHSVRTKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQ1VSUkVOQ1ksIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MKSAqLworTE9DVkFMKExPQ0FMRV9TTkFUSVZFRElHSVRTLCIwMTIzNDU2Nzg5IikKK0xPQ1ZBTChMT0NBTEVfU0NVUlJFTkNZLCJCRiIpCitMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MLCJCRUYiKQogLyogTE9DVkFMKExPQ0FMRV9TTU9OREVDSU1BTFNFUCwiLCIpICovCiAvKiBMT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCwiLiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORykgKi8KK0xPQ1ZBTChMT0NBTEVfU01PTkdST1VQSU5HLCIzOzAiKQogLyogTE9DVkFMKExPQ0FMRV9JQ1VSUkRJR0lUUywiMiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUykgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSUNVUlJFTkNZLCIzIikgKi8KQEAgLTU1LDQ5ICs1NSw0OSBAQAogLyogTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUspICovCiAvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIpICovCiAKLS8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCIiKSAqLworTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsIm1hYW5kYWciKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsImRpbnNkYWciKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsIndvZW5zZGFnIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCJkb25kZXJkYWciKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsInZyaWpkYWciKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsInphdGVyZGFnIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCJ6b25kYWciKQogCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwiTWEiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsIlRpIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCJPbiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwiVG8iKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsIkZyIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCJM+CIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiU/giKSAqLworTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsIm1hIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCJkaSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywid28iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsImRvIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCJ2ciIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwiemEiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsInpvIikKIAotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTUsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU2LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNywiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTgsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU5LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTAsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEyLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTMsIiIpICovCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCJqYW51YXIiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiZmVicnVhcmkiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMywibWFhcnQiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwiYXByaWwiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwibWVpIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsImp1bmkiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNywianVsaSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU4LCJhdWd1c3R1cyIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU5LCJzZXB0ZW1iZXIiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTAsIm9rdG9iZXIiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTEsIm5vdmVtYmVyIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEyLCJkZWNlbWJlciIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMywiIikKIAotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNywiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMsIiIpICovCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxLCJqYW4iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiwiZmViIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMsIm1ydCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0LCJhcHIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwibWVpIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYsImp1biIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3LCJqdWwiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCwiYXVnIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTksInNlcCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCwib2t0IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExLCJub3YiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsImRlYyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMywiIikKIAogLyogTE9DVkFMKExPQ0FMRV9TUE9TSVRJVkVTSUdOLCAiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTiwgIiIpICovCkBAIC0xMDgsMyArMTA4LDQgQEAKIC8qIExPQ1ZBTChMT0NBTEVfSU5FR1NZTVBSRUNFREVTLCAiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSU5FR1NFUEJZU1BBQ0UsICIiKSAqLwogCisvKiBHcmVnb3JpYW5zZSBrYWxlbmRlciAqLwpkaWZmIC0tZ2l0IGEvb2xlL25scy9ubGQubmxzIGIvb2xlL25scy9ubGQubmxzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3MDFkZjMKLS0tIC9kZXYvbnVsbAorKysgYi9vbGUvbmxzL25sZC5ubHMKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKglPTEUyTkxTIGxpYnJhcnkKKyAqICAgICAgRHV0Y2ggKE5ldGhlcmxhbmRzKQorICovCisKKy8qIExPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsIiIpICovCitMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiRHV0Y2giKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTEFOR05BTUUsIm5sZCIpCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwiTmVkZXJsYW5kcyIpCisvKiBMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIk5ldGhlcmxhbmRzIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCJOTEQiKQorTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsIk5lZGVybGFuZCIpCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUTEFOR1VBR0UsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMSVNULCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTUVBU1VSRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RFQ0lNQUwsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSE9VU0FORCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0dST1VQSU5HKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRElHSVRTLCIyIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUxaRVJPLCIxIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR05VTUJFUikgKi8KK0xPQ1ZBTChMT0NBTEVfU05BVElWRURJR0lUUywiMDEyMzQ1Njc4OSIpCitMT0NWQUwoTE9DQUxFX1NDVVJSRU5DWSwiRiIpCitMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MLCJOTEciKQorLyogTE9DVkFMKExPQ0FMRV9TTU9OREVDSU1BTFNFUCwiLCIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCwiLiIpICovCitMT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORywiMzswIikKKy8qIExPQ1ZBTChMT0NBTEVfSUNVUlJESUdJVFMsIjIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JSU5UTENVUlJESUdJVFMpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDVVJSRU5DWSwiMyIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdDVVJSLCI4IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBVEUsIi4iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVElNRSwiOiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NTSE9SVERBVEUsImRkL01NLXl5eXkiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTE9OR0RBVEUsImRkZCwgZC4gTU1NTSB5eXl5IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1RJTUVGT1JNQVQpICovCisvKiBMT0NWQUwoTE9DQUxFX0lEQVRFLCIxIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUxEQVRFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JVElNRSwiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lUSU1FTUFSS1BPU04pICovCisvKiBMT0NWQUwoTE9DQUxFX0lDRU5UVVJZKSAqLworLyogTE9DVkFMKExPQ0FMRV9JVExaRVJPLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSURBWUxaRVJPKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTU9OTFpFUk8pICovCisvKiBMT0NWQUwoTE9DQUxFX1MxMTU5LCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfUzIzNTksICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ0FMRU5EQVJUWVBFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JT1BUSU9OQUxDQUxFTkRBUikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUREFZT0ZXRUVLKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRklSU1RXRUVLT0ZZRUFSKSAqLworCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMSwibWFhbmRhZyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMiwiZGluc2RhZyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywid29lbnNkYWciKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTQsImRvbmRlcmRhZyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNSwidnJpamRhZyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwiemF0ZXJkYWciKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTcsInpvbmRhZyIpCisKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCJtYSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwiZGkiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsIndvIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCJkbyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwidnIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsInphIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCJ6byIpCisKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEsImphbnVhciIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUyLCJmZWJydWFyaSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCJtYWFydCIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCJhcHJpbCIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU1LCJtZWkiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNiwianVuaSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCJqdWxpIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTgsImF1Z3VzdHVzIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksInNlcHRlbWJlciIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMCwib2t0b2JlciIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMSwibm92ZW1iZXIiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsImRlY2VtYmVyIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEzLCIiKQorCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxLCJqYW4iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiwiZmViIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMsIm1ydCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0LCJhcHIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwibWVpIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYsImp1biIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3LCJqdWwiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCwiYXVnIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTksInNlcCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCwib2t0IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExLCJub3YiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsImRlYyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMywiIikKKworLyogTE9DVkFMKExPQ0FMRV9TUE9TSVRJVkVTSUdOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTSUdOUE9TTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTSUdOUE9TTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTWU1QUkVDRURFUywgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTRVBCWVNQQUNFLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NZTVBSRUNFREVTLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NFUEJZU1BBQ0UsICIiKSAqLworCisvKiBHcmVnb3JpYW5zZSBrYWxlbmRlciAqLwpkaWZmIC0tZ2l0IGEvb2xlL25scy9ub24ubmxzIGIvb2xlL25scy9ub24ubmxzCmluZGV4IGFhOTJlNzQuLmM2YWI5MTUgMTAwNjQ0Ci0tLSBhL29sZS9ubHMvbm9uLm5scworKysgYi9vbGUvbmxzL25vbi5ubHMKQEAgLTQsMTUgKzQsMTUgQEAKICAqLwogCiAvKiBMT0NWQUwoTE9DQUxFX0lMQU5HVUFHRSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIiIpICovCitMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiTm9yd2VnaWFuIChOeW5vcnNrKSIpCitMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiTm9yd2VnaWFuIikKIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJub24iKQotLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIiIpICovCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwibnlub3JzayIpCiAvKiBMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TRU5HQ09VTlRSWSwiTm9yd2F5IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCJOT1IiKQorTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsIk5vcmVnIikKIC8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSwiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT1VOVFJZLCIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPREVQQUdFKSAqLwpAQCAtMjUsMTIgKzI1LDEyIEBACiAvKiBMT0NWQUwoTE9DQUxFX0lESUdJVFMsIjIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JTFpFUk8sIjEiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JTkVHTlVNQkVSKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFRElHSVRTKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQ1VSUkVOQ1ksIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MKSAqLworTE9DVkFMKExPQ0FMRV9TTkFUSVZFRElHSVRTLCIwMTIzNDU2Nzg5IikKKy8qIExPQ1ZBTChMT0NBTEVfU0NVUlJFTkNZLCJrciIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MLCJOT0siKSAqLwogLyogTE9DVkFMKExPQ0FMRV9TTU9OREVDSU1BTFNFUCwiLCIpICovCiAvKiBMT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCwiLiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORykgKi8KK0xPQ1ZBTChMT0NBTEVfU01PTkdST1VQSU5HLCIzOzAiKQogLyogTE9DVkFMKExPQ0FMRV9JQ1VSUkRJR0lUUywiMiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUykgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSUNVUlJFTkNZLCIzIikgKi8KQEAgLTU1LDQ5ICs1NSw0OSBAQAogLyogTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUspICovCiAvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIpICovCiAKLS8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCIiKSAqLworTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsIm0/bmRhZyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMiwidHlzZGFnIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCJmcmVkYWciKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTQsIm9uc2RhZyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNSwidG9yc2RhZyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwibGF1cmRhZyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywic3VuZGFnIikKIAotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsIk1hIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCJUaSIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywiT24iKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsIlRvIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCJGciIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwiTPgiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsIlP4IikgKi8KK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCJtPyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwidHkiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsImZyIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCJvbiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwidG8iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsImxhdSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywic3UiKQogCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTMsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOCwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMCwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTExLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMywiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEsImphbnVhciIpIAorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiZmVicnVhciIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCJtYXJzIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTQsImFwcmlsIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTUsIm1haSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU2LCJqdW5pIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTcsImp1bGkiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOCwiYXVndXN0IikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksInNlcHRlbWJlciIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMCwib2t0b2JlciIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMSwibm92ZW1iZXIiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsImRlc2VtYmVyIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEzLCIiKQogCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTksIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMywiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsImphbiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyLCJmZWIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMywibWFyIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQsImFwciIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1LCJtYWkiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNiwianVuIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcsImp1bCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4LCJhdWciKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOSwic2VwIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwLCJva3QiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTEsIm5vdiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiwiZGVzIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzLCIiKQogCiAvKiBMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04sICIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9TTkVHQVRJVkVTSUdOLCAiIikgKi8KQEAgLTEwOCwzICsxMDgsNCBAQAogLyogTE9DVkFMKExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMsICIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JTkVHU0VQQllTUEFDRSwgIiIpICovCiAKKy8qIGdyZWdvcmlhbnNrIGthbGVuZGVyICovCmRpZmYgLS1naXQgYS9vbGUvbmxzL25vci5ubHMgYi9vbGUvbmxzL25vci5ubHMKaW5kZXggOTBlNDRmZC4uMjcyN2FlNiAxMDA2NDQKLS0tIGEvb2xlL25scy9ub3IubmxzCisrKyBiL29sZS9ubHMvbm9yLm5scwpAQCAtNCwxNSArNCwxNSBAQAogICovCiAKIC8qIExPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCJOb3J3ZWdpYW4gKEJva20/bCkiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIk5vcndlZ2lhbiIpICovCiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZMQU5HTkFNRSwibm9yIikKLS8qIExPQ1ZBTChMT0NBTEVfU05BVElWRUxBTkdOQU1FLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsImJva20/bCIpCiAvKiBMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TRU5HQ09VTlRSWSwiTm9yd2F5IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCJOT1IiKQorTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsIk5vcmdlIikKIC8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSwiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT1VOVFJZLCIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPREVQQUdFKSAqLwpAQCAtMjUsMTIgKzI1LDEyIEBACiAvKiBMT0NWQUwoTE9DQUxFX0lESUdJVFMsIjIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JTFpFUk8sIjEiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JTkVHTlVNQkVSKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFRElHSVRTKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQ1VSUkVOQ1ksIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OREVDSU1BTFNFUCwiLCIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCwiLiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORykgKi8KK0xPQ1ZBTChMT0NBTEVfU05BVElWRURJR0lUUywgIjAxMjM0NTY3ODkiKQorTE9DVkFMKExPQ0FMRV9TQ1VSUkVOQ1ksImtyIikKK0xPQ1ZBTChMT0NBTEVfU0lOVExTWU1CT0wsIk5PSyIpCitMT0NWQUwoTE9DQUxFX1NNT05ERUNJTUFMU0VQLCIsIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRIT1VTQU5EU0VQLCIuIikKK0xPQ1ZBTChMT0NBTEVfU01PTkdST1VQSU5HLCIzOzAiKQogLyogTE9DVkFMKExPQ0FMRV9JQ1VSUkRJR0lUUywiMiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUykgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSUNVUlJFTkNZLCIzIikgKi8KQEAgLTU1LDQ5ICs1NSw0OSBAQAogLyogTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUspICovCiAvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIpICovCiAKLS8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCIiKSAqLworTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsIm1hbmRhZyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMiwidGlyc2RhZyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywib25zZGFnIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCJ0b3JzZGFnIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU1LCJmcmVkYWciKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsImw/cmRhZyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywicz9uZGFnIikKIAotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsIk1hIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCJUaSIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywiT24iKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsIlRvIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCJGciIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwiTPgiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsIlP4IikgKi8KK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCJtYSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwidGkiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsIm9uIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCJ0byIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwiZnIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsImw/IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCJzPyIpCiAKLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUyLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMywiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTQsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU1LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNiwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTcsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU4LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTEsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMiwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEzLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiamFudWFyIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsImZlYnJ1YXIiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMywibWFycyIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCJhcHJpbCIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU1LCJtYWkiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNiwianVuaSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCJqdWxpIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTgsImF1Z3VzdCIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU5LCJzZXB0ZW1iZXIiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTAsIm9rdG9iZXIiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTEsIm5vdmVtYmVyIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEyLCJkZXNlbWJlciIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMywiIikKIAotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNywiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMsIiIpICovCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxLCJqYW4iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiwiZmViIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMsIm1hciIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0LCJhcHIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwibWFpIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYsImp1biIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3LCJqdWwiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCwiYXVnIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTksInNlcCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCwib2t0IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExLCJub3YiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsImRlcyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMywiIikKIAogLyogTE9DVkFMKExPQ0FMRV9TUE9TSVRJVkVTSUdOLCAiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTiwgIiIpICovCkBAIC0xMDgsMyArMTA4LDQgQEAKIC8qIExPQ1ZBTChMT0NBTEVfSU5FR1NZTVBSRUNFREVTLCAiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSU5FR1NFUEJZU1BBQ0UsICIiKSAqLwogCisvKiBncmVnb3JpYW5zayBrYWxlbmRlciAqLwpkaWZmIC0tZ2l0IGEvb2xlL25scy9wbGsubmxzIGIvb2xlL25scy9wbGsubmxzCmluZGV4IDc0NzRjODguLjVkODYxODQgMTAwNjQ0Ci0tLSBhL29sZS9ubHMvcGxrLm5scworKysgYi9vbGUvbmxzL3Bsay5ubHMKQEAgLTExLDcgKzExLDcgQEAKIExPQ1ZBTChMT0NBTEVfSUNPVU5UUlksIjQ5IikKIExPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIlBvbHNrYSIpCiBMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCJQb2xhbmQiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIlBsIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCJQTFoiKQogTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsIlBvbHNrYSIpCiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUTEFOR1VBR0UsIjkiKQogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksIjQ5IikKQEAgLTI1LDEyICsyNSwxMiBAQAogTE9DVkFMKExPQ0FMRV9JRElHSVRTLCIyIikKIExPQ1ZBTChMT0NBTEVfSUxaRVJPLCIxIikKIC8qIExPQ1ZBTChMT0NBTEVfSU5FR05VTUJFUikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU05BVElWRURJR0lUUykgKi8KK0xPQ1ZBTChMT0NBTEVfU05BVElWRURJR0lUUywiMDEyMzQ1Njc4OSIpCiBMT0NWQUwoTE9DQUxFX1NDVVJSRU5DWSwielx4QjMiKQogLyogTE9DVkFMKExPQ0FMRV9TSU5UTFNZTUJPTCkgKi8KIC8qIExPQ1ZBTChMT0NBTEVfU01PTkRFQ0lNQUxTRVApICovCiAvKiBMT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCkgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTkdST1VQSU5HKSAqLworTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcsIjM7MCIpCiBMT0NWQUwoTE9DQUxFX0lDVVJSRElHSVRTLCIyIikKIC8qIExPQ1ZBTChMT0NBTEVfSUlOVExDVVJSRElHSVRTKSAqLwogTE9DVkFMKExPQ0FMRV9JQ1VSUkVOQ1ksIjMiKQpAQCAtMTA3LDMgKzEwNyw1IEBACiAvKiBMT0NWQUwoTE9DQUxFX0lQT1NTRVBCWVNQQUNFKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lORUdTRVBCWVNQQUNFKSAqLworCisvKiBrYWxlbmRhcnogZ3JlZ29yaWE/ZHNraSAqLwpkaWZmIC0tZ2l0IGEvb2xlL25scy9wdGIubmxzIGIvb2xlL25scy9wdGIubmxzCmluZGV4IGU2MGM5MWUuLmQ5ZmZjM2EgMTAwNjQ0Ci0tLSBhL29sZS9ubHMvcHRiLm5scworKysgYi9vbGUvbmxzL3B0Yi5ubHMKQEAgLTE1LDcgKzE1LDcgQEAKIExPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCAiQnJhc2lsIikKIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSwgIjA0MDkiKQogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksICIxIikKLUxPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSwgIjQzNyIpCitMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UsICI4NTAiKQogTE9DVkFMKExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSwgIjEyNTIiKQogTE9DVkFMKExPQ0FMRV9TTElTVCwgIjsiKQogTE9DVkFMKExPQ0FMRV9JTUVBU1VSRSwgIjEiKQpAQCAtMjcsNyArMjcsNyBAQAogTE9DVkFMKExPQ0FMRV9JTkVHTlVNQkVSLCAiMSIpCiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVESUdJVFMsICIwMTIzNDU2Nzg5IikKIExPQ1ZBTChMT0NBTEVfU0NVUlJFTkNZLCAiJCIpCi1MT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MLCAiVVNEIikKK0xPQ1ZBTChMT0NBTEVfU0lOVExTWU1CT0wsICJCUkMiKQogTE9DVkFMKExPQ0FMRV9TTU9OREVDSU1BTFNFUCwgIiwiKQogTE9DVkFMKExPQ0FMRV9TTU9OVEhPVVNBTkRTRVAsICIuIikKIExPQ1ZBTChMT0NBTEVfU01PTkdST1VQSU5HLCAiMzswIikKQEAgLTU1LDExICs1NSwxMSBAQAogTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUssICI2IikKIExPQ1ZBTChMT0NBTEVfSUZJUlNUV0VFS09GWUVBUiwgIjAiKQogCi1MT0NWQUwoTE9DQUxFX1NEQVlOQU1FMSwgIlNlZ3VuZGEiKQotTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsICJUZXJcMzQ3YSIpCi1MT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywgIlF1YXJ0YSIpCi1MT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwgIlF1aW50YSIpCi1MT0NWQUwoTE9DQUxFX1NEQVlOQU1FNSwgIlNleHRhIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCAiU2VndW5kYS1mZWlyYSIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMiwgIlRlclwzNDdhLWZlaXJhIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCAiUXVhcnRhLWZlaXJhIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCAiUXVpbnRhLWZlaXJhIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU1LCAiU2V4dGEtZmVpcmEiKQogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsICJTXDM0MWJhZG8iKQogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTcsICJEb21pbmdvIikKIApAQCAtMTA3LDMgKzEwNyw1IEBACiBMT0NWQUwoTE9DQUxFX0lQT1NTRVBCWVNQQUNFLCAiMCIpCiBMT0NWQUwoTE9DQUxFX0lORUdTWU1QUkVDRURFUywgIjEiKQogTE9DVkFMKExPQ0FMRV9JTkVHU0VQQllTUEFDRSwgIjAiKQorCisvKiBDYWxlbmQ/cmlvIGdyZWdvcmlhbm8gKi8KZGlmZiAtLWdpdCBhL29sZS9ubHMvcHRnLm5scyBiL29sZS9ubHMvcHRnLm5scwppbmRleCBhYzQyOWQ0Li45ZGZkNmM4IDEwMDY0NAotLS0gYS9vbGUvbmxzL3B0Zy5ubHMKKysrIGIvb2xlL25scy9wdGcubmxzCkBAIC0xNSw3ICsxNSw3IEBACiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwgIlBvcnR1Z2FsIikKIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSwgIjA0MDkiKQogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksICIxIikKLUxPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSwgIjQzNyIpCitMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UsICI4NTAiKQogTE9DVkFMKExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSwgIjEyNTIiKQogTE9DVkFMKExPQ0FMRV9TTElTVCwgIjsiKQogTE9DVkFMKExPQ0FMRV9JTUVBU1VSRSwgIjEiKQpkaWZmIC0tZ2l0IGEvb2xlL25scy9yb20ubmxzIGIvb2xlL25scy9yb20ubmxzCmluZGV4IDljYWFiZjcuLjg1YzEzYTcgMTAwNjQ0Ci0tLSBhL29sZS9ubHMvcm9tLm5scworKysgYi9vbGUvbmxzL3JvbS5ubHMKQEAgLTUsMTMgKzUsMTMgQEAKIAogLyogTE9DVkFMKExPQ0FMRV9JTEFOR1VBR0UsIiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0VOR0xBTkdVQUdFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIlJvbWFuaWFuIikgKi8KIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJyb20iKQogLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIlJvbWFuaWEiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIlJPTSIpCiAvKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSwiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT1VOVFJZLCIiKSAqLwpAQCAtMjUsMTIgKzI1LDEyIEBACiAvKiBMT0NWQUwoTE9DQUxFX0lESUdJVFMsIjIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JTFpFUk8sIjEiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JTkVHTlVNQkVSKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFRElHSVRTKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQ1VSUkVOQ1ksIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MKSAqLworTE9DVkFMKExPQ0FMRV9TTkFUSVZFRElHSVRTLCIwMTIzNDU2Nzg5IikKK0xPQ1ZBTChMT0NBTEVfU0NVUlJFTkNZLCJMRUkiKQorTE9DVkFMKExPQ0FMRV9TSU5UTFNZTUJPTCwiUk9MKQogLyogTE9DVkFMKExPQ0FMRV9TTU9OREVDSU1BTFNFUCwiLCIpICovCiAvKiBMT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCwiLiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORykgKi8KK0xPQ1ZBTChMT0NBTEVfU01PTkdST1VQSU5HLCIzOzAiKQogLyogTE9DVkFMKExPQ0FMRV9JQ1VSUkRJR0lUUywiMiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUykgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSUNVUlJFTkNZLCIzIikgKi8KQEAgLTU1LDQ5ICs1NSw0OSBAQAogLyogTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUspICovCiAvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIpICovCiAKLS8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCIiKSAqLworTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsImx1bmkiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsIm1hcmNpIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCJtaWVyY3VyaSIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwiam9pIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU1LCJ2aW5lcmkiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsInM/bWI/dCIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywiZHVtaW5pYz8iKQogCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwiTWEiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsIlRpIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCJPbiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwiVG8iKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsIkZyIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCJM+CIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiU/giKSAqLworTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsIkw/IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCJNYSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywiTWkiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsIko/IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCJWPyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwiUz8iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsIkQ/IikKIAotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTUsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU2LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNywiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTgsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU5LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTAsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEyLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTMsIiIpICovCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCJpYW51YXJpZSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUyLCJmZWJydWFyaWUiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMywibWFydGllIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTQsImFycGlsaWUiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwibWFpIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsIml1bmllIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTcsIml1bGllIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTgsImF1Z3VzdCIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU5LCJzZXB0ZW1icmllIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCJvY3RvbWJyaWUiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTEsIm5vaWVtYnJpZSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMiwiZGVjZW1icmllIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEzLCIiKQogCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTksIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMywiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsIklhbiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyLCJGZWIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMywiTWFyIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQsIkFwciIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1LCJNYWkiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNiwiSXVuIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcsIkl1bCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4LCJBdWciKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOSwiU2VwIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwLCJPY3QiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTEsIk5vdiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiwiRGVjIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzLCIiKQogCiAvKiBMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04sICIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9TTkVHQVRJVkVTSUdOLCAiIikgKi8KQEAgLTEwOCwzICsxMDgsNCBAQAogLyogTE9DVkFMKExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMsICIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JTkVHU0VQQllTUEFDRSwgIiIpICovCiAKKy8qIEdyZWdvcmlhbiBjYWxlbmRhciAqLwpkaWZmIC0tZ2l0IGEvb2xlL25scy9ydXMubmxzIGIvb2xlL25scy9ydXMubmxzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzZmI2ODUKLS0tIC9kZXYvbnVsbAorKysgYi9vbGUvbmxzL3J1cy5ubHMKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKglPTEUyTkxTIGxpYnJhcnkKKyAqICAgICAgUnVzc2lhCisgKi8KKworLyogTE9DVkFMKExPQ0FMRV9JTEFOR1VBR0UsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0VOR0xBTkdVQUdFLCJSdXNzaWFuIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJydXMiKQorLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIlJ1c3NpYSIpCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTElTVCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU1FQVNVUkUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NERUNJTUFMLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVEhPVVNBTkQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NHUk9VUElORykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURJR0lUUywiMiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lMWkVSTywiMSIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdOVU1CRVIpICovCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVESUdJVFMsIjAxMjM0NTY3ODkiKQorLyogTE9DVkFMKExPQ0FMRV9TQ1VSUkVOQ1ksIiIpICovCitMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MLCJSVVIiKQorLyogTE9DVkFMKExPQ0FMRV9TTU9OREVDSU1BTFNFUCwiLCIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCwiLiIpICovCitMT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORywiMzswIikKKy8qIExPQ1ZBTChMT0NBTEVfSUNVUlJESUdJVFMsIjIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JSU5UTENVUlJESUdJVFMpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDVVJSRU5DWSwiMyIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdDVVJSLCI4IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBVEUsIi4iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVElNRSwiOiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NTSE9SVERBVEUsImRkL01NLXl5eXkiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTE9OR0RBVEUsImRkZCwgZC4gTU1NTSB5eXl5IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1RJTUVGT1JNQVQpICovCisvKiBMT0NWQUwoTE9DQUxFX0lEQVRFLCIxIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUxEQVRFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JVElNRSwiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lUSU1FTUFSS1BPU04pICovCisvKiBMT0NWQUwoTE9DQUxFX0lDRU5UVVJZKSAqLworLyogTE9DVkFMKExPQ0FMRV9JVExaRVJPLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSURBWUxaRVJPKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTU9OTFpFUk8pICovCisvKiBMT0NWQUwoTE9DQUxFX1MxMTU5LCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfUzIzNTksICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ0FMRU5EQVJUWVBFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JT1BUSU9OQUxDQUxFTkRBUikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUREFZT0ZXRUVLKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRklSU1RXRUVLT0ZZRUFSKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU1LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywiIikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsIiIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU1LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTcsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU4LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEzLCIiKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMywiIikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TUE9TSVRJVkVTSUdOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTSUdOUE9TTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTSUdOUE9TTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTWU1QUkVDRURFUywgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTRVBCWVNQQUNFLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NZTVBSRUNFREVTLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NFUEJZU1BBQ0UsICIiKSAqLworCmRpZmYgLS1naXQgYS9vbGUvbmxzL3NreS5ubHMgYi9vbGUvbmxzL3NreS5ubHMKaW5kZXggNGQ4YWYzYS4uZDZmOWQ4OCAxMDA2NDQKLS0tIGEvb2xlL25scy9za3kubmxzCisrKyBiL29sZS9ubHMvc2t5Lm5scwpAQCAtNjMsMTMgKzYzLDEzIEBACiAvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCIiKSAqLwogCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwiTWEiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsIlRpIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCJPbiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwiVG8iKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsIkZyIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCJM+CIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiU/giKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsIiIpICovCiAKIC8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEsIiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUyLCIiKSAqLwpkaWZmIC0tZ2l0IGEvb2xlL25scy9zbHYubmxzIGIvb2xlL25scy9zbHYubmxzCmluZGV4IDM3NDA2MmEuLjZmY2QxYzAgMTAwNjQ0Ci0tLSBhL29sZS9ubHMvc2x2Lm5scworKysgYi9vbGUvbmxzL3Nsdi5ubHMKQEAgLTYzLDEzICs2MywxMyBAQAogLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsIiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywiIikgKi8KIAotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsIk1hIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCJUaSIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywiT24iKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsIlRvIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCJGciIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwiTPgiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsIlP4IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCIiKSAqLwogCiAvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiIikgKi8KZGlmZiAtLWdpdCBhL29sZS9ubHMvc3FpLm5scyBiL29sZS9ubHMvc3FpLm5scwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTFjNzE5Ci0tLSAvZGV2L251bGwKKysrIGIvb2xlL25scy9zcWkubmxzCkBAIC0wLDAgKzEsMTExIEBACisvKgorICoJT0xFMk5MUyBsaWJyYXJ5CisgKiAgICAgIEFsYmFuaWEKKyAqLworCisvKiBMT0NWQUwoTE9DQUxFX0lMQU5HVUFHRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIkFsYmFuaWFuIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJzcWkiKQorLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIlNocWlwP3JpYSIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTElTVCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU1FQVNVUkUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NERUNJTUFMLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVEhPVVNBTkQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NHUk9VUElORykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURJR0lUUywiMiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lMWkVSTywiMSIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdOVU1CRVIpICovCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVESUdJVFMsIjAxMjM0NTY3ODkiKQorLyogTE9DVkFMKExPQ0FMRV9TQ1VSUkVOQ1ksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OREVDSU1BTFNFUCwiLCIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCwiLiIpICovCitMT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORywiMzswIikKKy8qIExPQ1ZBTChMT0NBTEVfSUNVUlJESUdJVFMsIjIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JSU5UTENVUlJESUdJVFMpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDVVJSRU5DWSwiMyIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdDVVJSLCI4IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBVEUsIi4iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVElNRSwiOiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NTSE9SVERBVEUsImRkL01NLXl5eXkiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTE9OR0RBVEUsImRkZCwgZC4gTU1NTSB5eXl5IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1RJTUVGT1JNQVQpICovCisvKiBMT0NWQUwoTE9DQUxFX0lEQVRFLCIxIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUxEQVRFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JVElNRSwiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lUSU1FTUFSS1BPU04pICovCisvKiBMT0NWQUwoTE9DQUxFX0lDRU5UVVJZKSAqLworLyogTE9DVkFMKExPQ0FMRV9JVExaRVJPLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSURBWUxaRVJPKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTU9OTFpFUk8pICovCisvKiBMT0NWQUwoTE9DQUxFX1MxMTU5LCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfUzIzNTksICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ0FMRU5EQVJUWVBFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JT1BUSU9OQUxDQUxFTkRBUikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUREFZT0ZXRUVLKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRklSU1RXRUVLT0ZZRUFSKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU1LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywiIikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsIiIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU1LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTcsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU4LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEzLCIiKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMywiIikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TUE9TSVRJVkVTSUdOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTSUdOUE9TTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTSUdOUE9TTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTWU1QUkVDRURFUywgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTRVBCWVNQQUNFLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NZTVBSRUNFREVTLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NFUEJZU1BBQ0UsICIiKSAqLworCisvKiBHcmVnb3JpYW4gQ2FsZW5kYXIgKi8KZGlmZiAtLWdpdCBhL29sZS9ubHMvc3JiLm5scyBiL29sZS9ubHMvc3JiLm5scwppbmRleCBlY2FhYTE4Li4xNmZkMDllIDEwMDY0NAotLS0gYS9vbGUvbmxzL3NyYi5ubHMKKysrIGIvb2xlL25scy9zcmIubmxzCkBAIC02MywxMyArNjMsMTMgQEAKIC8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTcsIiIpICovCiAKLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCJNYSIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwiVGkiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsIk9uIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCJUbyIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwiRnIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsIkz4IikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCJT+CIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiIikgKi8KIAogLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsIiIpICovCmRpZmYgLS1naXQgYS9vbGUvbmxzL3NybC5ubHMgYi9vbGUvbmxzL3NybC5ubHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU0YmI3ZAotLS0gL2Rldi9udWxsCisrKyBiL29sZS9ubHMvc3JsLm5scwpAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqCU9MRTJOTFMgbGlicmFyeQorICogICAgICBTZXJiaWFuIChMYXRpbikKKyAqLworCisvKiBMT0NWQUwoTE9DQUxFX0lMQU5HVUFHRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIiIpICovCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZMQU5HTkFNRSwic3JsIikKKy8qIExPQ1ZBTChMT0NBTEVfU05BVElWRUxBTkdOQU1FLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPREVQQUdFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xJU1QsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lNRUFTVVJFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREVDSU1BTCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1RIT1VTQU5ELCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TR1JPVVBJTkcpICovCisvKiBMT0NWQUwoTE9DQUxFX0lESUdJVFMsIjIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTFpFUk8sIjEiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHTlVNQkVSKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFRElHSVRTKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQ1VSUkVOQ1ksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OREVDSU1BTFNFUCwiLCIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCwiLiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNVUlJESUdJVFMsIjIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JSU5UTENVUlJESUdJVFMpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDVVJSRU5DWSwiMyIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdDVVJSLCI4IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBVEUsIi4iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVElNRSwiOiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NTSE9SVERBVEUsImRkL01NLXl5eXkiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTE9OR0RBVEUsImRkZCwgZC4gTU1NTSB5eXl5IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1RJTUVGT1JNQVQpICovCisvKiBMT0NWQUwoTE9DQUxFX0lEQVRFLCIxIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUxEQVRFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JVElNRSwiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lUSU1FTUFSS1BPU04pICovCisvKiBMT0NWQUwoTE9DQUxFX0lDRU5UVVJZKSAqLworLyogTE9DVkFMKExPQ0FMRV9JVExaRVJPLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSURBWUxaRVJPKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTU9OTFpFUk8pICovCisvKiBMT0NWQUwoTE9DQUxFX1MxMTU5LCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfUzIzNTksICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ0FMRU5EQVJUWVBFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JT1BUSU9OQUxDQUxFTkRBUikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUREFZT0ZXRUVLKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRklSU1RXRUVLT0ZZRUFSKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU1LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywiIikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsIiIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU1LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTcsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU4LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEzLCIiKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMywiIikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TUE9TSVRJVkVTSUdOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTSUdOUE9TTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTSUdOUE9TTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTWU1QUkVDRURFUywgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTRVBCWVNQQUNFLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NZTVBSRUNFREVTLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NFUEJZU1BBQ0UsICIiKSAqLworCmRpZmYgLS1naXQgYS9vbGUvbmxzL3N2Zi5ubHMgYi9vbGUvbmxzL3N2Zi5ubHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzUxNzc3NQotLS0gL2Rldi9udWxsCisrKyBiL29sZS9ubHMvc3ZmLm5scwpAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqCU9MRTJOTFMgbGlicmFyeQorICogICAgICBGaW5sYW5kIChTd2VkaXNoKQorICovCisKK0xPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCIxZCIpCitMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiU3ZlbnNrYSIpCitMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiU3dlZGlzaCAoRmlubGFuZCkiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTEFOR05BTUUsInN2ZSIpCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwiU3ZlbnNrYSIpCitMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCI0NSIpCitMT0NWQUwoTE9DQUxFX1NDT1VOVFJZLCJTV0UiKQorTE9DVkFMKExPQ0FMRV9TRU5HQ09VTlRSWSwiRmlubGFuZCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiRklOIikKK0xPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCJGaW5sYW5kIikKK0xPQ1ZBTChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSwiMWQiKQorTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksIjQ1IikKKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UpICovCitMT0NWQUwoTE9DQUxFX1NMSVNULCI7IikKK0xPQ1ZBTChMT0NBTEVfSU1FQVNVUkUsIjAiKQorTE9DVkFMKExPQ0FMRV9TREVDSU1BTCwiLCIpCitMT0NWQUwoTE9DQUxFX1NUSE9VU0FORCwiLiIpCisvKiBMT0NWQUwoTE9DQUxFX1NHUk9VUElORykgKi8KK0xPQ1ZBTChMT0NBTEVfSURJR0lUUywiMiIpCitMT0NWQUwoTE9DQUxFX0lMWkVSTywiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lORUdOVU1CRVIpICovCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVESUdJVFMsICIwMTIzNDU2Nzg5IikKK0xPQ1ZBTChMT0NBTEVfU0NVUlJFTkNZLCJtayIpCitMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MLCJGSU0iKQorTE9DVkFMKExPQ0FMRV9TTU9OREVDSU1BTFNFUCwiLCIpCitMT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCwiLiIpCisvKiBMT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORykgKi8KK0xPQ1ZBTChMT0NBTEVfSUNVUlJESUdJVFMsIjIiKQorLyogTE9DVkFMKExPQ0FMRV9JSU5UTENVUlJESUdJVFMpICovCitMT0NWQUwoTE9DQUxFX0lDVVJSRU5DWSwiMyIpCitMT0NWQUwoTE9DQUxFX0lORUdDVVJSLCI4IikKK0xPQ1ZBTChMT0NBTEVfU0RBVEUsIi4iKQorTE9DVkFMKExPQ0FMRV9TVElNRSwiOiIpCitMT0NWQUwoTE9DQUxFX1NTSE9SVERBVEUsImRkL01NLXl5eXkiKQorTE9DVkFMKExPQ0FMRV9TTE9OR0RBVEUsImRkZCwgZC4gTU1NTSB5eXl5IikKKy8qIExPQ1ZBTChMT0NBTEVfU1RJTUVGT1JNQVQpICovCitMT0NWQUwoTE9DQUxFX0lEQVRFLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSUxEQVRFKSAqLworTE9DVkFMKExPQ0FMRV9JVElNRSwiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lUSU1FTUFSS1BPU04pICovCisvKiBMT0NWQUwoTE9DQUxFX0lDRU5UVVJZKSAqLworTE9DVkFMKExPQ0FMRV9JVExaRVJPLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSURBWUxaRVJPKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTU9OTFpFUk8pICovCitMT0NWQUwoTE9DQUxFX1MxMTU5LCAiIikKK0xPQ1ZBTChMT0NBTEVfUzIzNTksICIiKQorLyogTE9DVkFMKExPQ0FMRV9JQ0FMRU5EQVJUWVBFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JT1BUSU9OQUxDQUxFTkRBUikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUREFZT0ZXRUVLKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRklSU1RXRUVLT0ZZRUFSKSAqLworCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMSwiTeVuZGFnIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUyLCJUaXNkYWciKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsIk9uc2RhZyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwiVG9yc2RhZyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNSwiRnJlZGFnIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCJM9nJkYWciKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTcsIlP2bmRhZyIpCisKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCJN5SIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwiVGkiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsIk9uIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCJUbyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwiRnIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsIkz2IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCJT9iIpCisKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEsIkphbnVhcmkiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiRmVicnVhcmkiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMywiTWFycyIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCJBcHJpbCIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU1LCJNYWoiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNiwiSnVuaSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCJKdWxpIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTgsIkF1Z3VzdGkiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOSwiU2VwdGVtYmVyIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCJPa3RvYmVyIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTExLCJOb3ZlbWJlciIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMiwiRGVjZW1iZXIiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTMsIiIpCisKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsIkphbiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyLCJGZWIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMywiTWFyIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQsIkFwciIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1LCJNYWoiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNiwiSnVuIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcsIkp1bCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4LCJBdWciKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOSwiU2VwIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwLCJPa3QiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTEsIk5vdiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiwiRGVjIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzLCIiKQorCitMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04sICIiKQorTE9DVkFMKExPQ0FMRV9TTkVHQVRJVkVTSUdOLCAiLSIpCitMT0NWQUwoTE9DQUxFX0lQT1NTSUdOUE9TTiwgIjMiKQorTE9DVkFMKExPQ0FMRV9JTkVHU0lHTlBPU04sICIzIikKK0xPQ1ZBTChMT0NBTEVfSVBPU1NZTVBSRUNFREVTLCAiMSIpCitMT0NWQUwoTE9DQUxFX0lQT1NTRVBCWVNQQUNFLCAiMCIpCitMT0NWQUwoTE9DQUxFX0lORUdTWU1QUkVDRURFUywgIjEiKQorTE9DVkFMKExPQ0FMRV9JTkVHU0VQQllTUEFDRSwgIjAiKQorCisvKiBncmVnb3JpYW5zayBrYWxlbmRlciAqLwpkaWZmIC0tZ2l0IGEvb2xlL25scy90cmsubmxzIGIvb2xlL25scy90cmsubmxzCmluZGV4IDNhNmI3YzkuLmQ5MDQ2MmIgMTAwNjQ0Ci0tLSBhL29sZS9ubHMvdHJrLm5scworKysgYi9vbGUvbmxzL3Ryay5ubHMKQEAgLTYzLDEzICs2MywxMyBAQAogLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsIiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywiIikgKi8KIAotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsIk1hIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCJUaSIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywiT24iKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsIlRvIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCJGciIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwiTPgiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsIlP4IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCIiKSAqLwogCiAvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiIikgKi8KZGlmZiAtLWdpdCBhL29sZS9ubHMvdWtyLm5scyBiL29sZS9ubHMvdWtyLm5scwppbmRleCAwZDY1YjI4Li5iMWU4YjQyIDEwMDY0NAotLS0gYS9vbGUvbmxzL3Vrci5ubHMKKysrIGIvb2xlL25scy91a3IubmxzCkBAIC02MywxMyArNjMsMTMgQEAKIC8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTcsIiIpICovCiAKLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCJNYSIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwiVGkiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsIk9uIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCJUbyIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwiRnIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsIkz4IikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCJT+CIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiIikgKi8KIAogLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsIiIpICovCmRpZmYgLS1naXQgYS9vbGUvbmxzL3poaC5ubHMgYi9vbGUvbmxzL3poaC5ubHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjVjOGM2MwotLS0gL2Rldi9udWxsCisrKyBiL29sZS9ubHMvemhoLm5scwpAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqCU9MRTJOTFMgbGlicmFyeQorICogICAgICBDaGluZXNlIChIb25nIEtvbmcpCisgKi8KKworLyogTE9DVkFMKExPQ0FMRV9JTEFOR1VBR0UsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0VOR0xBTkdVQUdFLCJDaGluZXNlIChIb25nIEtvbmcpIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJ6aGgiKQorLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTElTVCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU1FQVNVUkUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NERUNJTUFMLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVEhPVVNBTkQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NHUk9VUElORykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURJR0lUUywiMiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lMWkVSTywiMSIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdOVU1CRVIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVESUdJVFMpICovCisvKiBMT0NWQUwoTE9DQUxFX1NDVVJSRU5DWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0lOVExTWU1CT0wpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05ERUNJTUFMU0VQLCIsIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRIT1VTQU5EU0VQLCIuIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTkdST1VQSU5HKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ1VSUkRJR0lUUywiMiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNVUlJFTkNZLCIzIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR0NVUlIsIjgiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFURSwiLiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSU1FLCI6IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1NIT1JUREFURSwiZGQvTU0teXl5eSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMT05HREFURSwiZGRkLCBkLiBNTU1NIHl5eXkiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVElNRUZPUk1BVCkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURBVEUsIjEiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTERBVEUpICovCisvKiBMT0NWQUwoTE9DQUxFX0lUSU1FLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSVRJTUVNQVJLUE9TTikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNFTlRVUlkpICovCisvKiBMT0NWQUwoTE9DQUxFX0lUTFpFUk8sIjEiKQorLyogTE9DVkFMKExPQ0FMRV9JREFZTFpFUk8pICovCisvKiBMT0NWQUwoTE9DQUxFX0lNT05MWkVSTykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfUzExNTksICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TMjM1OSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDQUxFTkRBUlRZUEUpICovCisvKiBMT0NWQUwoTE9DQUxFX0lPUFRJT05BTENBTEVOREFSKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUspICovCisvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCIiKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiIikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU2LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTgsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU5LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTAsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTMsIiIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzLCIiKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTkVHQVRJVkVTSUdOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NJR05QT1NOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NJR05QT1NOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NZTVBSRUNFREVTLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NFUEJZU1BBQ0UsICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMsICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU0VQQllTUEFDRSwgIiIpICovCisKZGlmZiAtLWdpdCBhL29sZS9ubHMvemhpLm5scyBiL29sZS9ubHMvemhpLm5scwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDI3ZWY0Ci0tLSAvZGV2L251bGwKKysrIGIvb2xlL25scy96aGkubmxzCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICoJT0xFMk5MUyBsaWJyYXJ5CisgKiAgICAgIENoaW5lc2UgKFNpbmdhcG9yZSkKKyAqLworCisvKiBMT0NWQUwoTE9DQUxFX0lMQU5HVUFHRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIkNoaW5lc2UgKFNpbmdhcG9yZSkiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTEFOR05BTUUsInpoaSIpCisvKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TRU5HQ09VTlRSWSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCJTR1AiKQorLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUTEFOR1VBR0UsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMSVNULCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTUVBU1VSRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RFQ0lNQUwsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSE9VU0FORCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0dST1VQSU5HKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRElHSVRTLCIyIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUxaRVJPLCIxIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR05VTUJFUikgKi8KK0xPQ1ZBTChMT0NBTEVfU05BVElWRURJR0lUUywgIjAxMjM0NTY3ODkiKQorTE9DVkFMKExPQ0FMRV9TQ1VSUkVOQ1ksIiQiKQorTE9DVkFMKExPQ0FMRV9TSU5UTFNZTUJPTCwiU0dEIikKKy8qIExPQ1ZBTChMT0NBTEVfU01PTkRFQ0lNQUxTRVAsIiwiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhPVVNBTkRTRVAsIi4iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDVVJSRElHSVRTLCIyIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUlOVExDVVJSRElHSVRTKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ1VSUkVOQ1ksIjMiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHQ1VSUiwiOCIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVRFLCIuIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1RJTUUsIjoiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TU0hPUlREQVRFLCJkZC9NTS15eXl5IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xPTkdEQVRFLCJkZGQsIGQuIE1NTU0geXl5eSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSU1FRk9STUFUKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREFURSwiMSIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lMREFURSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVRJTUUsIjEiKQorLyogTE9DVkFMKExPQ0FMRV9JVElNRU1BUktQT1NOKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ0VOVFVSWSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVRMWkVSTywiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lEQVlMWkVSTykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU1PTkxaRVJPKSAqLworTE9DVkFMKExPQ0FMRV9TMTE1OSwgIkFNIikKK0xPQ1ZBTChMT0NBTEVfUzIzNTksICJQTSIpCisvKiBMT0NWQUwoTE9DQUxFX0lDQUxFTkRBUlRZUEUpICovCisvKiBMT0NWQUwoTE9DQUxFX0lPUFRJT05BTENBTEVOREFSKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUspICovCisvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCIiKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiIikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU2LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTgsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU5LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTAsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTMsIiIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzLCIiKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTkVHQVRJVkVTSUdOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NJR05QT1NOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NJR05QT1NOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NZTVBSRUNFREVTLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NFUEJZU1BBQ0UsICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMsICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU0VQQllTUEFDRSwgIiIpICovCisKZGlmZiAtLWdpdCBhL29sZS9ubHMvemhzLm5scyBiL29sZS9ubHMvemhzLm5scwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWZiMmZlCi0tLSAvZGV2L251bGwKKysrIGIvb2xlL25scy96aHMubmxzCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICoJT0xFMk5MUyBsaWJyYXJ5CisgKiAgICAgIFBlb3BsZSdzIHJlcHVibGljIG9mIENoaW5hCisgKi8KKworLyogTE9DVkFMKExPQ0FMRV9JTEFOR1VBR0UsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0VOR0xBTkdVQUdFLCJQZW9wbGUncyByZXB1YmxpYyBvZiBDaGluYSIpICovCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZMQU5HTkFNRSwiemhzIikKKy8qIExPQ1ZBTChMT0NBTEVfU05BVElWRUxBTkdOQU1FLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPREVQQUdFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xJU1QsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lNRUFTVVJFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREVDSU1BTCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1RIT1VTQU5ELCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TR1JPVVBJTkcpICovCisvKiBMT0NWQUwoTE9DQUxFX0lESUdJVFMsIjIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTFpFUk8sIjEiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHTlVNQkVSKSAqLworTE9DVkFMKExPQ0FMRV9TTkFUSVZFRElHSVRTLCAiMDEyMzQ1Njc4OSIpCisvKiBMT0NWQUwoTE9DQUxFX1NDVVJSRU5DWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0lOVExTWU1CT0wpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05ERUNJTUFMU0VQLCIsIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRIT1VTQU5EU0VQLCIuIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTkdST1VQSU5HKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ1VSUkRJR0lUUywiMiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNVUlJFTkNZLCIzIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR0NVUlIsIjgiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFURSwiLiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSU1FLCI6IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1NIT1JUREFURSwiZGQvTU0teXl5eSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMT05HREFURSwiZGRkLCBkLiBNTU1NIHl5eXkiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVElNRUZPUk1BVCkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURBVEUsIjEiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTERBVEUpICovCisvKiBMT0NWQUwoTE9DQUxFX0lUSU1FLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSVRJTUVNQVJLUE9TTikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNFTlRVUlkpICovCisvKiBMT0NWQUwoTE9DQUxFX0lUTFpFUk8sIjEiKQorLyogTE9DVkFMKExPQ0FMRV9JREFZTFpFUk8pICovCisvKiBMT0NWQUwoTE9DQUxFX0lNT05MWkVSTykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfUzExNTksICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TMjM1OSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDQUxFTkRBUlRZUEUpICovCisvKiBMT0NWQUwoTE9DQUxFX0lPUFRJT05BTENBTEVOREFSKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUspICovCisvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCIiKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwiTWEiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsIlRpIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCJPbiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwiVG8iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsIkZyIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCJM+CIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiU/giKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTMsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTExLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMywiIikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMsIiIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU1BPU0lUSVZFU0lHTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NORUdBVElWRVNJR04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU0lHTlBPU04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU0lHTlBPU04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU1lNUFJFQ0VERVMsICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU0VQQllTUEFDRSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTWU1QUkVDRURFUywgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTRVBCWVNQQUNFLCAiIikgKi8KKwpkaWZmIC0tZ2l0IGEvb2xlL29sZTJubHMuYyBiL29sZS9vbGUybmxzLmMKaW5kZXggMDgxNWQ5Ni4uYmY0YjczMiAxMDA2NDQKLS0tIGEvb2xlL29sZTJubHMuYworKysgYi9vbGUvb2xlMm5scy5jCkBAIC0yNTUxLDI3ICsyNTUxLDU3IEBACiAJCSBMUENTVFIgZm9ybWF0LCAgICAgIC8qIGluICAqLwogCQkgTFBTVFIgdGltZXN0ciwgICAgICAvKiBvdXQgKi8KIAkJIElOVDMyIHRpbWVsZW4gICAgICAgLyogaW4gICovKSAKLXsKLSAgIExQQ1NUUiByZWFsZm9ybWF0OwotICAgY2hhciBmbXRfYnVmWzQwXTsKLSAgIAotICAgVFJBQ0Uob2xlLCJHZXRUaW1lRm9ybWF0KDB4JTA0bHgsMHglMDhseCwlcCwlcywlcCwlZClcbiIsCi0JIGxvY2FsZSxmbGFncyx4dGltZSxmb3JtYXQsdGltZXN0cix0aW1lbGVuKTsKLSAgIAotICAgaWYgKGZvcm1hdCkgewotICAgICAgcmVhbGZvcm1hdCA9IGZvcm1hdDsKLSAgIH0gZWxzZSBpZiAobG9jYWxlKSB7Ci0gICAgICBHZXRMb2NhbGVJbmZvMzJBKGxvY2FsZSwgTE9DQUxFX1NUSU1FRk9STUFULAotCQkgICAgICAgZm10X2J1ZiwgIHNpemVvZihmbXRfYnVmKSk7Ci0gICAgICByZWFsZm9ybWF0ID0gZm10X2J1ZjsKLSAgIH0gZWxzZSB7Ci0gICAgICBXQVJOKG9sZSwgIkNhbGxlciBnYXZlIG5vIGxvY2FsZSBhbmQgbm8gZm9ybWF0XG4iKTsKLSAgICAgIHJlYWxmb3JtYXQgPSAiaGg6bW06c3MiOwotICAgfTsKLSAgIGlmICghbG9jYWxlKSB7Ci0gICAgICBsb2NhbGUgPSBHZXRTeXN0ZW1EZWZhdWx0TENJRCgpOwotICAgfQotICAgcmV0dXJuIE9MRV9HZXRGb3JtYXRBKGxvY2FsZSwgZmxhZ3MsIHh0aW1lLCByZWFsZm9ybWF0LCB0aW1lc3RyLCB0aW1lbGVuKTsKK3sgY2hhciBmb3JtYXRfYnVmWzQwXTsKKyAgTFBDU1RSIHRoaXNmb3JtYXQ7CisgIFNZU1RFTVRJTUUgdDsKKyAgTFBTWVNURU1USU1FIHRoaXN0aW1lOworICBMQ0lEIHRoaXNsb2NhbGU9MDsKKyAgRFdPUkQgdGhpc2ZsYWdzPUxPQ0FMRV9TVElNRUZPUk1BVDsgLyogc3RhbmRhcnQgdGltZWZvcm1hdCAqLzsKKyAgCisgIFRSQUNFKG9sZSwiR2V0VGltZUZvcm1hdCgweCUwNGx4LDB4JTA4bHgsJXAsJXMsJXAsJWQpXG4iLGxvY2FsZSxmbGFncyx4dGltZSxmb3JtYXQsdGltZXN0cix0aW1lbGVuKTsKKyAgaWYgKCFsb2NhbGUpIAorICB7IGxvY2FsZSA9IExPQ0FMRV9TWVNURU1fREVGQVVMVDsKKyAgfQorICAKKyAgaWYgKGxvY2FsZSA9PSBMT0NBTEVfU1lTVEVNX0RFRkFVTFQpIAorICB7IHRoaXNsb2NhbGUgPSBHZXRTeXN0ZW1EZWZhdWx0TENJRCgpOworICB9IAorICBlbHNlIGlmIChsb2NhbGUgPT0gTE9DQUxFX1VTRVJfREVGQVVMVCkgCisgIHsgdGhpc2xvY2FsZSA9IEdldFVzZXJEZWZhdWx0TENJRCgpOworCX0KKyAgZWxzZQorICB7IHRoaXNsb2NhbGUgPSBsb2NhbGU7CisgIH0KKyAgaWYgKGZvcm1hdCA9PSBOVUxMKSAKKyAgeyBpZiAoZmxhZ3MmTE9DQUxFX05PVVNFUk9WRVJSSURFKSAgLyp1c2Ugc3lzdGVtIGRlZmF1bHQqLworICAgIHsgdGhpc2xvY2FsZSA9IEdldFN5c3RlbURlZmF1bHRMQ0lEKCk7CisgICAgfQorICAgIHN3aXRjaCAoZmxhZ3MpCisgICAgeyBjYXNlIFRJTUVfTk9TRUNPTkRTOgorICAgICAgICBGSVhNRShvbGUsIlRJTUVfTk9TRUNPTkRTIG5vdCB5ZXQgaW1wbGVtZW50ZWQiKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFRJTUVfTk9NSU5VVEVTT1JTRUNPTkRTOgorICAgICAgICBGSVhNRShvbGUsIlRJTUVfTk9NSU5VVEVTT1JTRUNPTkRTIG5vdCB5ZXQgaW1wbGVtZW50ZWQiKTsKKyAgICAgICBicmVhazsKKyAgICB9ICAgCisgICAgR2V0TG9jYWxlSW5mbzMyQSh0aGlzbG9jYWxlLCB0aGlzZmxhZ3MsIGZvcm1hdF9idWYsc2l6ZW9mKGZvcm1hdF9idWYpKTsKKyAgICB0aGlzZm9ybWF0ID0gZm9ybWF0X2J1ZjsKKyAgfQorICBlbHNlIAorICB7IHRoaXNmb3JtYXQgPSBmb3JtYXQ7CisgIH0KKyAgCisgIGlmICghbG9jYWxlKSAKKyAgeyAgbG9jYWxlID0gR2V0U3lzdGVtRGVmYXVsdExDSUQoKTsKKyAgfQorICBpZiAoeHRpbWUgPT0gTlVMTCkgLyogTlVMTCBtZWFucyB1c2UgdGhlIGN1cnJlbnQgbG9jYWwgdGltZSovCisgIHsgR2V0U3lzdGVtVGltZSgmdCk7CisgICAgdGhpc3RpbWUgPSAmdDsKKyAgfSAKKyAgZWxzZQorICB7IHRoaXN0aW1lID0geHRpbWU7CisgIH0KKyAgcmV0dXJuIE9MRV9HZXRGb3JtYXRBKHRoaXNsb2NhbGUsIHRoaXNmbGFncywgdGhpc3RpbWUsIHRoaXNmb3JtYXQsdGltZXN0ciwgdGltZWxlbik7CiB9CiAKIApkaWZmIC0tZ2l0IGEvcHJvZ3JhbXMvY2xvY2svQ2hhbmdlTG9nIGIvcHJvZ3JhbXMvY2xvY2svQ2hhbmdlTG9nCmluZGV4IDU5MDZkNzkuLmFlY2M0NTcgMTAwNjQ0Ci0tLSBhL3Byb2dyYW1zL2Nsb2NrL0NoYW5nZUxvZworKysgYi9wcm9ncmFtcy9jbG9jay9DaGFuZ2VMb2cKQEAgLTEsOCArMSwxMyBAQAorU3VuIEp1bCAgNSAyMDoxMDo1MyAxOTk4ICBNYXJjZWwgQmF1ciA8bWJhdXJAZzI2LmV0aHouY2g+CisgICAgICAgKiBNb3ZlZCAiQWx3YXlzIG9uIHRvcCIgbWVudSBpbnRvIHN5c3RlbSBtZW51IChhcyBpbiBXaW5kb3dzKQorICAgICAgICAgVGhpcyByZXF1aXJlZCBtaW5vciBjaGFuZ2VzIGluIAorICAgICAgICAgW21haW4uaF0gW2Nsb2NrLnJjXSBbbGFuZ3VhZ2UuY10gWz8/LnJjXQorCiBGcmkgSnVuIDEyIDIyOjQ3OjU2IDE5OTggIE1hcmNlbCBCYXVyIDxtYmF1ckBnMjYuZXRoei5jaD4KICAgICAgICAqIEZpeGVkIHJlc291cmNlIGJ1ZyBpbiBVcGRhdGVXaW5kb3dDYXB0aW9uKCkgdGhhdCBjYXVzZWQgd3JvbmcgKG9sZCkKICAgICAgICAgIGxvY2FsZSBmb3IgdGhlIGRpc3BsYXllZCBkYXRlCiAgICAgICAgKiBUaGUgZGlnaXRhbCBjbG9jayBub3cgc2hvd3MgdXAgKFdJTkUtTkxTLVVOS05PV04gbWVhbnMgdGhhdCB0aGVyZQotICAgICAgICAgaXMgbm8gbG9jYWxlIHJ1bGUgZm9yIHRpbWUgc3RyaW5nIGZvcm1hdCBpbiAvb2xlL3dpbm5scy5jKQorICAgICAgICAgaXMgbm8gbG9jYWxlIHJ1bGUgZm9yIHRpbWUgc3RyaW5nIGZvcm1hdCBpbiAvb2xlL29sZTJubHMuYykKIAogVGh1IE1heSAyOCAyMDo0MjoxMyAxOTk4ICBNYXJjZWwgQmF1ciA8bWJhdXJAZzI2LmV0aHouY2g+CiAgICAgICAgKiBbbGFuZ3VhZ2UuY10KQEAgLTM2LDUgKzQxLDMgQEAKICAgICAgICAgIFttYWluLmNdIFttYWluLmhdIFt3aW5jbG9jay5jXSBbd2luY2xvY2suaF0KIAogICAgICAgICAgT3JpZ2luYWxzIGJ5IE1hcmNlbCBCYXVyCi0KLQpkaWZmIC0tZ2l0IGEvcHJvZ3JhbXMvY2xvY2svRGEucmMgYi9wcm9ncmFtcy9jbG9jay9EYS5yYwppbmRleCBlNTNjMzBjLi44ZjMyNDMzIDEwMDY0NAotLS0gYS9wcm9ncmFtcy9jbG9jay9EYS5yYworKysgYi9wcm9ncmFtcy9jbG9jay9EYS5yYwpAQCAtNiwyNyArNiwzNSBAQAogCiAjZGVmaW5lIExBTkdVQUdFX0lEICAgICAgICAgICAgICAgICAgRGEKICNkZWZpbmUgTEFOR1VBR0VfTlVNQkVSICAgICAgICAgICAgICA2Ci0jZGVmaW5lIExBTkdVQUdFX01FTlVfSVRFTSAgICAgICAgICAgIiZEYW5zayIKIAotLyogTWVudSAqLworCisvKiBTeXN0ZW0gTWVudSAqLworCisjZGVmaW5lIE1FTlVfT05fVE9QICAgICAgICAgICAgICAgICAgIiZBbHRpZCD4dmVyc3QiCisKKworLyogV2luZG93IE1lbnUgKi8KIAogI2RlZmluZSBNRU5VX1BST1BFUlRJRVMgICAgICAgICAgICAgICImSW5zdGlsbGluZ2VyIgogI2RlZmluZSBNRU5VX0FOQUxPRyAgICAgICAgICAgICAgICAgICImQW5hbG9nIgogI2RlZmluZSBNRU5VX0RJR0lUQUwgICAgICAgICAgICAgICAgICImRGlnaXRhbCIKICNkZWZpbmUgTUVOVV9GT05UICAgICAgICAgICAgICAgICAgICAiJlNrcmlmdHR5cGUuLi4iCiAjZGVmaW5lIE1FTlVfV0lUSE9VVF9USVRMRSAgICAgICAgICAgIlNranVsIFRpdGVsJmxpbmplIgotI2RlZmluZSBNRU5VX09OX1RPUCAgICAgICAgICAgICAgICAgICImQWx0aWQg+HZlcnN0IgorCiAjZGVmaW5lIE1FTlVfU0VDT05EUyAgICAgICAgICAgICAgICAgIlNlJmt1bmRlciIKICNkZWZpbmUgTUVOVV9EQVRFICAgICAgICAgICAgICAgICAgICAiRGEmdG8iCiAKICNkZWZpbmUgTUVOVV9MQU5HVUFHRSAgICAgICAgICAgICAgICAiUyZwcm9nIgorI2RlZmluZSBMQU5HVUFHRV9NRU5VX0lURU0gICAgICAgICAgICImRGFuc2siCiAKICNkZWZpbmUgTUVOVV9JTkZPICAgICAgICAgICAgICAgICAgICAiSW5mJm8uLi4iCiAjZGVmaW5lIE1FTlVfSU5GT19MSUNFTlNFICAgICAgICAgICAgIiZMaWNlbnMiCiAjZGVmaW5lIE1FTlVfSU5GT19OT19XQVJSQU5UWSAgICAgICAgIiZOTyBXQVJSQU5UWSIKICNkZWZpbmUgTUVOVV9JTkZPX0FCT1VUX1dJTkUgICAgICAgICAiJk9tIFVyLi4uIgogCi0vKiBTdHJpbmdzICovCisKKy8qIFdpbmRvdyBDYXB0aW9uICovCisKICNkZWZpbmUgU1RSSU5HX0NMT0NLICAgICAgICAgICAgICAgICAiVXIiCiAKIApkaWZmIC0tZ2l0IGEvcHJvZ3JhbXMvY2xvY2svRGUucmMgYi9wcm9ncmFtcy9jbG9jay9EZS5yYwppbmRleCBhYjEzNzFlLi4wY2JiZGJmIDEwMDY0NAotLS0gYS9wcm9ncmFtcy9jbG9jay9EZS5yYworKysgYi9wcm9ncmFtcy9jbG9jay9EZS5yYwpAQCAtNywyNyArNywzNSBAQAogCiAjZGVmaW5lIExBTkdVQUdFX0lEICAgICAgICAgICAgICAgICAgRGUKICNkZWZpbmUgTEFOR1VBR0VfTlVNQkVSICAgICAgICAgICAgICAyCi0jZGVmaW5lIExBTkdVQUdFX01FTlVfSVRFTSAgICAgICAgICAgIiZEZXV0c2NoIgogCi0vKiBNZW51ICovCisKKy8qIFN5c3RlbSBNZW51ICovCisKKyNkZWZpbmUgTUVOVV9PTl9UT1AgICAgICAgICAgICAgICAgICAiJkltbWVyIGltIFZvcmRlcmdydW5kIgorCisKKy8qIFdpbmRvdyBNZW51ICovCiAKICNkZWZpbmUgTUVOVV9QUk9QRVJUSUVTICAgICAgICAgICAgICAiJkVpbnN0ZWxsdW5nZW4iCiAjZGVmaW5lIE1FTlVfQU5BTE9HICAgICAgICAgICAgICAgICAgIkFuYSZsb2ciCiAjZGVmaW5lIE1FTlVfRElHSVRBTCAgICAgICAgICAgICAgICAgIkRpZ2kmdGFsIgogI2RlZmluZSBNRU5VX0ZPTlQgICAgICAgICAgICAgICAgICAgICJTY2hyaWZ0JmFydC4uLiIKICNkZWZpbmUgTUVOVV9XSVRIT1VUX1RJVExFICAgICAgICAgICAiJk9obmUgVGl0ZWxsZWlzdGUiCi0jZGVmaW5lIE1FTlVfT05fVE9QICAgICAgICAgICAgICAgICAgIiZJbW1lciBpbSBWb3JkZXJncnVuZCIKKwogI2RlZmluZSBNRU5VX1NFQ09ORFMgICAgICAgICAgICAgICAgICImU2VrdW5kZW4iCiAjZGVmaW5lIE1FTlVfREFURSAgICAgICAgICAgICAgICAgICAgIiZEYXR1bSIKIAogI2RlZmluZSBNRU5VX0xBTkdVQUdFICAgICAgICAgICAgICAgICImU3ByYWNoZSIKKyNkZWZpbmUgTEFOR1VBR0VfTUVOVV9JVEVNICAgICAgICAgICAiJkRldXRzY2giCiAKICNkZWZpbmUgTUVOVV9JTkZPICAgICAgICAgICAgICAgICAgICAiSW5mJm8uLi4iCiAjZGVmaW5lIE1FTlVfSU5GT19MSUNFTlNFICAgICAgICAgICAgIiZMaXplbnoiCiAjZGVmaW5lIE1FTlVfSU5GT19OT19XQVJSQU5UWSAgICAgICAgIiZLRUlORSBHQVJBTlRJRSIKICNkZWZpbmUgTUVOVV9JTkZPX0FCT1VUX1dJTkUgICAgICAgICAiJtxiZXIgVWhyLi4uIgogCi0vKiBTdHJpbmdzICovCisKKy8qIFdpbmRvdyBDYXB0aW9uICovCisKICNkZWZpbmUgU1RSSU5HX0NMT0NLICAgICAgICAgICAgICAgICAiVWhyIgogCiAjaW5jbHVkZSAiY2xvY2sucmMiCmRpZmYgLS1naXQgYS9wcm9ncmFtcy9jbG9jay9Fbi5yYyBiL3Byb2dyYW1zL2Nsb2NrL0VuLnJjCmluZGV4IDMzMzBjZjcuLjQ0M2U5NzQgMTAwNjQ0Ci0tLSBhL3Byb2dyYW1zL2Nsb2NrL0VuLnJjCisrKyBiL3Byb2dyYW1zL2Nsb2NrL0VuLnJjCkBAIC03LDI3ICs3LDMyIEBACiAKICNkZWZpbmUgTEFOR1VBR0VfSUQgICAgICAgICAgICAgICAgICBFbgogI2RlZmluZSBMQU5HVUFHRV9OVU1CRVIgICAgICAgICAgICAgIDAKLSNkZWZpbmUgTEFOR1VBR0VfTUVOVV9JVEVNICAgICAgICAgICAiJkVuZ2xpc2giCiAKLS8qIE1lbnUgKi8KKworLyogU3lzdGVtIE1lbnUgKi8KKworI2RlZmluZSBNRU5VX09OX1RPUCAgICAgICAgICAgICAgICAgICImQWx3YXlzIG9uIFRvcCIKKworLyogV2luZG93IE1lbnUgKi8KIAogI2RlZmluZSBNRU5VX1BST1BFUlRJRVMgICAgICAgICAgICAgICImUHJvcGVydGllcyIKICNkZWZpbmUgTUVOVV9BTkFMT0cgICAgICAgICAgICAgICAgICAiQW5hJmxvZyIKICNkZWZpbmUgTUVOVV9ESUdJVEFMICAgICAgICAgICAgICAgICAiRGlnaSZ0YWwiCiAjZGVmaW5lIE1FTlVfRk9OVCAgICAgICAgICAgICAgICAgICAgIiZGb250Li4uIgogI2RlZmluZSBNRU5VX1dJVEhPVVRfVElUTEUgICAgICAgICAgICImV2l0aG91dCBUaXRsZWJhciIKLSNkZWZpbmUgTUVOVV9PTl9UT1AgICAgICAgICAgICAgICAgICAiJkFsd2F5cyBvbiBUb3AiCisKICNkZWZpbmUgTUVOVV9TRUNPTkRTICAgICAgICAgICAgICAgICAiJlNlY29uZHMiCiAjZGVmaW5lIE1FTlVfREFURSAgICAgICAgICAgICAgICAgICAgIiZEYXRlIgogCiAjZGVmaW5lIE1FTlVfTEFOR1VBR0UgICAgICAgICAgICAgICAgIiZMYW5ndWFnZSIKKyNkZWZpbmUgTEFOR1VBR0VfTUVOVV9JVEVNICAgICAgICAgICAiJkVuZ2xpc2giCiAKICNkZWZpbmUgTUVOVV9JTkZPICAgICAgICAgICAgICAgICAgICAiSW5mJm8uLi4iCiAjZGVmaW5lIE1FTlVfSU5GT19MSUNFTlNFICAgICAgICAgICAgIiZMaWNlbnNlIgogI2RlZmluZSBNRU5VX0lORk9fTk9fV0FSUkFOVFkgICAgICAgICImTk8gV0FSUkFOVFkiCiAjZGVmaW5lIE1FTlVfSU5GT19BQk9VVF9XSU5FICAgICAgICAgIiZBYm91dCBDbG9jay4uLiIKIAotLyogU3RyaW5ncyAqLworLyogV2luZG93IENhcHRpb24gKi8KICNkZWZpbmUgU1RSSU5HX0NMT0NLICAgICAgICAgICAgICAgICAiQ2xvY2siCiAKIApkaWZmIC0tZ2l0IGEvcHJvZ3JhbXMvY2xvY2svUkVBRE1FIGIvcHJvZ3JhbXMvY2xvY2svUkVBRE1FCmluZGV4IDI5NmE2YTIuLjg4MDU3OWQgMTAwNjQ0Ci0tLSBhL3Byb2dyYW1zL2Nsb2NrL1JFQURNRQorKysgYi9wcm9ncmFtcy9jbG9jay9SRUFETUUKQEAgLTEwLDMgKzEwLDYgQEAKIAogIENvZGUgaXMgY3VycmVudGx5IHVuZGVyIGhlYXZ5IGNvbnN0cnVjdGlvbi4gUGxlYXNlIGRpcmVjdCBwYXRjaGVzIGFuZAogIGFkZGl0aW9ucyB0byBteSBwZXJzb25hbCBlbWFpbCBhZGRyZXNzIDxtYmF1ckBnMjYuZXRoei5jaD4KKworIElmIHlvdSB0aGluayB0aGF0IHRoZSBjb21waWxlZCBiaW5hcnkgaXMgdG9vIGJpZywgeW91IGNhbiByZWR1Y2UgaXRzIHNpemUKKyB3aXRoIHRoZSBjb21tYW5kICdzdHJpcCBjbG9jaycgKHBsZWFzZSBkb24ndCB0cnkgdGhpcyBvbiBsaWJyYXJpZXMpLgpkaWZmIC0tZ2l0IGEvcHJvZ3JhbXMvY2xvY2svU3cucmMgYi9wcm9ncmFtcy9jbG9jay9Tdy5yYwppbmRleCA5ZTU4Y2M5Li4wMmZiZjUwIDEwMDY0NAotLS0gYS9wcm9ncmFtcy9jbG9jay9Tdy5yYworKysgYi9wcm9ncmFtcy9jbG9jay9Tdy5yYwpAQCAtMiwzMiArMiw0MCBAQAogICogQ2xvY2sgKFN3ZWRpc2ggcmVzb3VyY2VzKQogICoKICAqIENvcHlyaWdodCAxOTk4IE1hcmNlbCBCYXVyIDxtYmF1ckBnMjYuZXRoei5jaD4KLSAqIFRyYW5zbGF0ZWQgaW50byBzd2VkaXNoIGJ5IEthcmwgQmFja3N0cvZtIDxrYXJsX2JAZ2VvY2l0aWVzLmNvbT4gCisgKiBUcmFuc2xhdGVkIGludG8gU3dlZGlzaCBieSBLYXJsIEJhY2tzdHL2bSA8a2FybF9iQGdlb2NpdGllcy5jb20+IAogICovCiAKICNkZWZpbmUgTEFOR1VBR0VfSUQgICAgICAgICAgICAgICAgICBTdwogI2RlZmluZSBMQU5HVUFHRV9OVU1CRVIgICAgICAgICAgICAgIDFkCi0jZGVmaW5lIExBTkdVQUdFX01FTlVfSVRFTSAgICAgICAgICAgIiZTdmVuc2thIgogCi0vKiBNZW51ICovCisKKy8qIFN5c3RlbSBNZW51ICovCisKKyNkZWZpbmUgTUVOVV9PTl9UT1AgICAgICAgICAgICAgICAgICAiJkFsbHRpZCD2dmVyc3QiCisKKworLyogV2luZG93IE1lbnUgKi8KIAogI2RlZmluZSBNRU5VX1BST1BFUlRJRVMgICAgICAgICAgICAgICImRWdlbnNrYXBlciIKICNkZWZpbmUgTUVOVV9BTkFMT0cgICAgICAgICAgICAgICAgICAiQW5hJmxvZyIKICNkZWZpbmUgTUVOVV9ESUdJVEFMICAgICAgICAgICAgICAgICAiRGlnaSZ0YWwiCiAjZGVmaW5lIE1FTlVfRk9OVCAgICAgICAgICAgICAgICAgICAgIiZGb250Li4uIgogI2RlZmluZSBNRU5VX1dJVEhPVVRfVElUTEUgICAgICAgICAgICImVXRhbiBUaXRsZWJhciIKLSNkZWZpbmUgTUVOVV9PTl9UT1AgICAgICAgICAgICAgICAgICAiJkFsbHRpZCD2dmVyc3QiCisKICNkZWZpbmUgTUVOVV9TRUNPTkRTICAgICAgICAgICAgICAgICAiJlNla3VuZGVyIgogI2RlZmluZSBNRU5VX0RBVEUgICAgICAgICAgICAgICAgICAgICImRGF0dW0iCiAKICNkZWZpbmUgTUVOVV9MQU5HVUFHRSAgICAgICAgICAgICAgICAiJlNwcuVrIgorI2RlZmluZSBMQU5HVUFHRV9NRU5VX0lURU0gICAgICAgICAgICImU3ZlbnNrYSIKIAogI2RlZmluZSBNRU5VX0lORk8gICAgICAgICAgICAgICAgICAgICJJbmYmby4uLiIKICNkZWZpbmUgTUVOVV9JTkZPX0xJQ0VOU0UgICAgICAgICAgICAiJkxpY2VucyIKICNkZWZpbmUgTUVOVV9JTkZPX05PX1dBUlJBTlRZICAgICAgICAiJklOR0VOIEdBUkFOVEkiCiAjZGVmaW5lIE1FTlVfSU5GT19BQk9VVF9XSU5FICAgICAgICAgIiZPbSBLbG9ja2FuLi4uIgogCi0vKiBTdHJpbmdzICovCisKKy8qIFdpbmRvdyBDYXB0aW9uICovCisKICNkZWZpbmUgU1RSSU5HX0NMT0NLICAgICAgICAgICAgICAgICAiS2xvY2thbiIKIAogI2luY2x1ZGUgImNsb2NrLnJjIgpkaWZmIC0tZ2l0IGEvcHJvZ3JhbXMvY2xvY2svVE9ETyBiL3Byb2dyYW1zL2Nsb2NrL1RPRE8KaW5kZXggZjgzMzZmMC4uNjNjODE1ZiAxMDA2NDQKLS0tIGEvcHJvZ3JhbXMvY2xvY2svVE9ETworKysgYi9wcm9ncmFtcy9jbG9jay9UT0RPCkBAIC01LDkgKzUsNiBAQAogLSBNYWtlICJXaXRob3V0IFRpdGxlYmFyIiwgRG91YmxlLWNsaWNraW5nIHRoZSBjbG9jayBzaG91bGQgcmV2ZWFsIHRoZSBjYXB0aW9uCiAgIGFnYWluLgogCi0tIE1vdmUgdGhlICJXaXRob3V0IFRpdGxlYmFyIiBpbnRvIHRoZSBTeXN0ZW0gTWVudSAoYXMgaW4gV2luZG93cykKLSAgKERvZXMgbm90IHdvcmsgcHJvYmFibHkgZHVlIHRvIFdpbmVsaWIpCi0KIC0gRm9udCBIYW5kbGluZyBvZiBEaWdpdGFsIENsb2NrLgogICAoRG9lcyBub3Qgd29yayBwcm9iYWJseSBkdWUgdG8gV2luZWxpYikKIApAQCAtMTcsNiArMTQsOCBAQAogLSBGaXggRW5nbGlzaCB0cmFuc2xhdGlvbiBieSBjb21wYXJpbmcgc3RyaW5ncyBmcm9tIGFuIG9yaWdpbmFsIEVuZ2xpc2gKICAgV2luZG93cyBDbG9jayBhcHBsaWNhdGlvbiAoSSBvbmx5IGhhdmUgYSBHZXJtYW4gdmVyc2lvbikuCiAKLS0gQWRkIG5ldyAucmMgcmVzb3VyY2VzIGZvciBhbGwgbGFuZ3VhZ2VzIHlvdSBrbm93LgorLSBBZGQgbmV3IC5yYyByZXNvdXJjZXMgZm9yIGFsbCBsYW5ndWFnZXMgeW91IGtub3cuIFRoYXQncyBpbiBmYWN0IHZlcnkgZWFzeS4gCisgIEp1c3QgY2xvbmUgdGhlIGZpbGUgRW4ucmMsIGNoYW5nZSB0aGUgc3RyaW5ncyBhbmQgc3VibWl0IGl0LiBZb3UgY2FuIGZpbmQKKyAgbXkgZW1haWwgYWRkcmVzcyBpbiB0aGUgUkVBRE1FIGZpbGUuCiAKIFBsZWFzZSBkb24ndCBmb3JnZXQgYSBDaGFuZ2VMb2cgZW50cnkuCmRpZmYgLS1naXQgYS9wcm9ncmFtcy9jbG9jay9jbG9jay5yYyBiL3Byb2dyYW1zL2Nsb2NrL2Nsb2NrLnJjCmluZGV4IDc1NmI4MzYuLmY0MTY5YzMgMTAwNjQ0Ci0tLSBhL3Byb2dyYW1zL2Nsb2NrL2Nsb2NrLnJjCisrKyBiL3Byb2dyYW1zL2Nsb2NrL2Nsb2NrLnJjCkBAIC0yNCwxOSArMjQsMTggQEAKICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgTUVOVUlURU0gTUVOVV9TRUNPTkRTLCAgICAgICAgICAgICAgIENMX1NFQ09ORFMKICAgIE1FTlVJVEVNIE1FTlVfREFURSwgICAgICAgICAgICAgICAgICBDTF9EQVRFCisgfQorCisgUE9QVVAgTUVOVV9MQU5HVUFHRSB7CisgICAvKiBEdW1teSBpdGVtLCB3aWxsIGJlIHJlbW92ZWQgKi8KICAgIE1FTlVJVEVNIFNFUEFSQVRPUgotICAgTUVOVUlURU0gTUVOVV9PTl9UT1AsICAgICAgICAgICAgICAgIENMX09OX1RPUAotICAgfQotICAgUE9QVVAgTUVOVV9MQU5HVUFHRSB7Ci0gICAgIC8qIER1bW15IGl0ZW0sIHdpbGwgYmUgcmVtb3ZlZCAqLwotICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKLSAgIH0KKyB9CiAgICAKLSAgIFBPUFVQIE1FTlVfSU5GTyB7Ci0gICAgICBNRU5VSVRFTSBNRU5VX0lORk9fTElDRU5TRSwgICAgICAgQ0xfSU5GT19MSUNFTlNFCi0gICAgICBNRU5VSVRFTSBNRU5VX0lORk9fTk9fV0FSUkFOVFksICAgQ0xfSU5GT19OT19XQVJSQU5UWQotICAgICAgTUVOVUlURU0gTUVOVV9JTkZPX0FCT1VUX1dJTkUsICAgIENMX0lORk9fQUJPVVRfV0lORQotICAgfQorIFBPUFVQIE1FTlVfSU5GTyB7CisgICBNRU5VSVRFTSBNRU5VX0lORk9fTElDRU5TRSwgICAgICAgQ0xfSU5GT19MSUNFTlNFCisgICBNRU5VSVRFTSBNRU5VX0lORk9fTk9fV0FSUkFOVFksICAgQ0xfSU5GT19OT19XQVJSQU5UWQorICAgTUVOVUlURU0gTUVOVV9JTkZPX0FCT1VUX1dJTkUsICAgIENMX0lORk9fQUJPVVRfV0lORQorIH0KICAKIH0KIApAQCAtNTEsNiArNTAsNyBAQAogCiAjZGVmaW5lIFNUUklOR19MQU5HVUFHRV9JRCAgICAgICAgU1RSSU5HSUZZKExBTkdVQUdFX0lEKQogI2RlZmluZSBTVFJJTkdfTEFOR1VBR0VfTUVOVV9JVEVNIExBTkdVQUdFX01FTlVfSVRFTQorI2RlZmluZSBTVFJJTkdfTUVOVV9PTl9UT1AgICAgICAgIE1FTlVfT05fVE9QCiAKIAogU1RSSU5HVEFCTEUKQEAgLTU4LDQgKzU4LDUgQEAKIEFERFNUUklORyhMQU5HVUFHRV9JRCkKIEFERFNUUklORyhMQU5HVUFHRV9NRU5VX0lURU0pCiBBRERTVFJJTkcoQ0xPQ0spCitBRERTVFJJTkcoTUVOVV9PTl9UT1ApCiB9CmRpZmYgLS1naXQgYS9wcm9ncmFtcy9jbG9jay9sYW5ndWFnZS5jIGIvcHJvZ3JhbXMvY2xvY2svbGFuZ3VhZ2UuYwppbmRleCBhNDFhZTZmLi5iMDEzN2JhIDEwMDY0NAotLS0gYS9wcm9ncmFtcy9jbG9jay9sYW5ndWFnZS5jCisrKyBiL3Byb2dyYW1zL2Nsb2NrL2xhbmd1YWdlLmMKQEAgLTQ1LDcgKzQ1LDcgQEAKICAgICAKICAgICBDaGVja01lbnVJdGVtKEdsb2JhbHMuaFByb3BlcnRpZXNNZW51LCBDTF9XSVRIT1VUX1RJVExFLCBNRl9CWUNPTU1BTkQgfCBcCiAgICAgICAgICAgICAgICAgIChHbG9iYWxzLmJXaXRob3V0VGl0bGUgPyBNRl9DSEVDS0VEIDogTUZfVU5DSEVDS0VEKSk7Ci0gICAgQ2hlY2tNZW51SXRlbShHbG9iYWxzLmhQcm9wZXJ0aWVzTWVudSwgQ0xfT05fVE9QLCBNRl9CWUNPTU1BTkQgfCBcCisgICAgQ2hlY2tNZW51SXRlbShHbG9iYWxzLmhTeXN0ZW1NZW51LCBDTF9PTl9UT1AsIE1GX0JZQ09NTUFORCB8IFwKICAgICAgICAgICAgICAgICAgKEdsb2JhbHMuYkFsd2F5c09uVG9wID8gTUZfQ0hFQ0tFRCA6IE1GX1VOQ0hFQ0tFRCkpOwogICAgIENoZWNrTWVudUl0ZW0oR2xvYmFscy5oUHJvcGVydGllc01lbnUsIENMX1NFQ09ORFMsIE1GX0JZQ09NTUFORCB8IFwKICAgICAgICAgICAgICAgICAgKEdsb2JhbHMuYlNlY29uZHMgPyBNRl9DSEVDS0VEIDogTUZfVU5DSEVDS0VEKSk7CkBAIC04OSwxMSArODksMTEgQEAKIFZPSUQgTEFOR1VBR0VfU2VsZWN0QnlOYW1lKExQQ1NUUiBsYW5nKQogewogICBJTlQgaTsKLSAgQ0hBUiBuZXdsYW5nWzNdOworICBDSEFSIHN6TmV3TGFuZ1szXTsKIAogICBmb3IgKGkgPSAwOyBpIDw9IE1BWF9MQU5HVUFHRV9OVU1CRVI7IGkrKykKLSAgICBpZiAoTEFOR1VBR0VfTG9hZFN0cmluZ090aGVyKGksIElEU19MQU5HVUFHRV9JRCwgbmV3bGFuZywgc2l6ZW9mKG5ld2xhbmcpKSAmJgotICAgICAgICAhbHN0cmNtcChsYW5nLCBuZXdsYW5nKSkKKyAgICBpZiAoTEFOR1VBR0VfTG9hZFN0cmluZ090aGVyKGksIElEU19MQU5HVUFHRV9JRCwgc3pOZXdMYW5nLCAKKyAgICAgICAgICAgICAgICBzaXplb2Yoc3pOZXdMYW5nKSkgJiYgIWxzdHJjbXAobGFuZywgc3pOZXdMYW5nKSkKICAgICAgIHsKICAgICAgICAgTEFOR1VBR0VfU2VsZWN0QnlOdW1iZXIoaSk7CiAgICAgICAgIHJldHVybjsKQEAgLTEwMSwzMyArMTAxLDMzIEBACiAKICAgLyogRmFsbGJhY2sgKi8KICAgICBmb3IgKGkgPSAwOyBpIDw9IE1BWF9MQU5HVUFHRV9OVU1CRVI7IGkrKykKLSAgICBpZiAoTEFOR1VBR0VfTG9hZFN0cmluZ090aGVyKGksIElEU19MQU5HVUFHRV9JRCwgbmV3bGFuZywgc2l6ZW9mKG5ld2xhbmcpKSkKKyAgICBpZiAoTEFOR1VBR0VfTG9hZFN0cmluZ090aGVyKGksIElEU19MQU5HVUFHRV9JRCwgc3pOZXdMYW5nLCBzaXplb2Yoc3pOZXdMYW5nKSkpCiAgICAgICB7CiAgICAgICAgIExBTkdVQUdFX1NlbGVjdEJ5TnVtYmVyKGkpOwogICAgICAgICByZXR1cm47CiAgICAgICB9CiAKLSAgTWVzc2FnZUJveChHbG9iYWxzLmhNYWluV25kLCAiTm8gbGFuZ3VhZ2UgZm91bmQiLCAiRkFUQUwgRVJST1IiLCBNQl9PSyk7Ci0gIFBvc3RRdWl0TWVzc2FnZSgxKTsKKyAgICBNZXNzYWdlQm94KEdsb2JhbHMuaE1haW5XbmQsICJObyBsYW5ndWFnZSBmb3VuZCIsICJGQVRBTCBFUlJPUiIsIE1CX09LKTsKKyAgICBQb3N0UXVpdE1lc3NhZ2UoMSk7CiB9CiAKIFZPSUQgTEFOR1VBR0VfU2VsZWN0QnlOdW1iZXIoVUlOVCBudW0pCiB7CiAgIElOVCAgICBpOwotICBDSEFSICAgbGFuZ1szXTsKKyAgQ0hBUiAgIHN6TGFuZ3VhZ2VbM107CiAKLSAgQ0hBUiAgIGl0ZW1bTUFYX1NUUklOR19MRU5dOworICBDSEFSICAgc3pJdGVtW01BWF9TVFJJTkdfTEVOXTsKICAgSE1FTlUgIGhNYWluTWVudTsKIAogICAvKiBTZWxlY3Qgc3RyaW5nIHRhYmxlICovCiAgIEdsb2JhbHMud1N0cmluZ1RhYmxlT2Zmc2V0ID0gbnVtICogMHgxMDA7CiAKICAgLyogR2V0IExhbmd1YWdlIGlkICovCi0gIExvYWRTdHJpbmcoR2xvYmFscy5oSW5zdGFuY2UsIElEU19MQU5HVUFHRV9JRCwgbGFuZywgc2l6ZW9mKGxhbmcpKTsKLSAgR2xvYmFscy5scHN6TGFuZ3VhZ2UgPSBsYW5nOworICBMb2FkU3RyaW5nKEdsb2JhbHMuaEluc3RhbmNlLCBJRFNfTEFOR1VBR0VfSUQsIHN6TGFuZ3VhZ2UsIHNpemVvZihzekxhbmd1YWdlKSk7CisgIEdsb2JhbHMubHBzekxhbmd1YWdlID0gc3pMYW5ndWFnZTsKIAogICAvKiBDaGFuZ2UgUmVzb3VyY2UgbmFtZXMgKi8KLSAgbHN0cmNweW4oU1RSSU5HX01FTlVfWHggKyBzaXplb2YoU1RSSU5HX01FTlVfWHgpIC0gMywgbGFuZywgMyk7CisgIGxzdHJjcHluKFNUUklOR19NRU5VX1h4ICsgc2l6ZW9mKFNUUklOR19NRU5VX1h4KSAtIDMsIHN6TGFuZ3VhZ2UsIDMpOwogCiAgIC8qIENyZWF0ZSBtZW51ICovCiAgIGhNYWluTWVudSA9IExvYWRNZW51KEdsb2JhbHMuaEluc3RhbmNlLCBTVFJJTkdfTUVOVV9YeCk7CkBAIC0xMzksOSArMTM5LDEwIEBACiAgIFJlbW92ZU1lbnUoR2xvYmFscy5oTGFuZ3VhZ2VNZW51LCAwLCBNRl9CWVBPU0lUSU9OKTsKICAgLyogQWRkIGxhbmd1YWdlIGl0ZW1zICovCiAgIGZvciAoaSA9IDA7IGkgPD0gTUFYX0xBTkdVQUdFX05VTUJFUjsgaSsrKQotICAgIGlmIChMQU5HVUFHRV9Mb2FkU3RyaW5nT3RoZXIoaSwgSURTX0xBTkdVQUdFX01FTlVfSVRFTSwgaXRlbSwgc2l6ZW9mKGl0ZW0pKSkKLSAgICAgIEFwcGVuZE1lbnUoR2xvYmFscy5oTGFuZ3VhZ2VNZW51LCBNRl9TVFJJTkcgfCBNRl9CWUNPTU1BTkQsCi0gICAgICAgICAgICAgICAgIENMX0ZJUlNUX0xBTkdVQUdFICsgaSwgaXRlbSk7CisgICAgaWYgKExBTkdVQUdFX0xvYWRTdHJpbmdPdGhlcihpLCBJRFNfTEFOR1VBR0VfTUVOVV9JVEVNLCBzekl0ZW0sIHNpemVvZihzekl0ZW0pKSkKKyAgICAgICAgICAgICBBcHBlbmRNZW51KEdsb2JhbHMuaExhbmd1YWdlTWVudSwgTUZfU1RSSU5HIHwgTUZfQllDT01NQU5ELAorICAgICAgICAgICAgICAgICAgICAgICAgQ0xfRklSU1RfTEFOR1VBR0UgKyBpLCBzekl0ZW0pOworICBFbmFibGVNZW51SXRlbShHbG9iYWxzLmhMYW5ndWFnZU1lbnUsIENMX0ZJUlNUX0xBTkdVQUdFICsgbnVtLCBNRl9CWUNPTU1BTkQgfCBNRl9DSEVDS0VEKTsKIAogICBTZXRNZW51KEdsb2JhbHMuaE1haW5XbmQsIGhNYWluTWVudSk7CiAKQEAgLTE1MSwxNCArMTUyLDIxIEBACiAKICNpZmRlZiBXSU5FTElCCiAgIC8qIFVwZGF0ZSBzeXN0ZW0gbWVudXMgKi8KLSAgZm9yIChpID0gMDsgTGFuZ3VhZ2VzW2ldLm5hbWUgJiYgbHN0cmNtcChsYW5nLCBMYW5ndWFnZXNbaV0ubmFtZSk7KSBpKys7CisgIGZvciAoaSA9IDA7IExhbmd1YWdlc1tpXS5uYW1lICYmIGxzdHJjbXAoc3pMYW5ndWFnZSwgTGFuZ3VhZ2VzW2ldLm5hbWUpOykgaSsrOwogICBpZiAoTGFuZ3VhZ2VzW2ldLm5hbWUpIE9wdGlvbnMubGFuZ3VhZ2UgPSBpOwogI2VuZGlmCiAKLSAgIC8qIHNwZWNpZmljIGZvciBDbG9jazogKi8KKyAgLyogc3BlY2lmaWMgZm9yIENsb2NrOiAqLwogCi0gICBMQU5HVUFHRV9VcGRhdGVNZW51Q2hlY2ttYXJrcygpOwotICAgTEFOR1VBR0VfVXBkYXRlV2luZG93Q2FwdGlvbigpOyAgIAorICBMQU5HVUFHRV9VcGRhdGVNZW51Q2hlY2ttYXJrcygpOworICBMQU5HVUFHRV9VcGRhdGVXaW5kb3dDYXB0aW9uKCk7ICAgCisKKyAgR2xvYmFscy5oU3lzdGVtTWVudSA9IEdldFN5c3RlbU1lbnUoR2xvYmFscy5oTWFpblduZCwgVFJVRSk7CisKKyAgLyogRklYTUU6IEFwcGVuZCBhIFNFUEFSQVRPUiB0byBHbG9iYWxzLmhTeXN0ZW1NZW51IGhlcmUgKi8KKworICBMb2FkU3RyaW5nKEdsb2JhbHMuaEluc3RhbmNlLCBJRFNfTUVOVV9PTl9UT1AsIHN6SXRlbSwgc2l6ZW9mKHN6SXRlbSkpOworICBBcHBlbmRNZW51KEdsb2JhbHMuaFN5c3RlbU1lbnUsIE1GX1NUUklORyB8IE1GX0JZQ09NTUFORCwgMTAwMCwgc3pJdGVtKTsKIH0KIAogVk9JRCBMQU5HVUFHRV9EZWZhdWx0SGFuZGxlKFdQQVJBTSB3UGFyYW0pCkBAIC0xODEsNyArMTg5LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3pCdWZmZXIpKTsgICAgICAgCiAgICAgICAgIEdsb2JhbHMubHBzekxhbmd1YWdlID0gTG9jYWxMb2NrKExvY2FsQWxsb2MoTE1FTV9GSVhFRCwgbHN0cmxlbihzekJ1ZmZlcikpKTsKIAotICAgICAgICBobWVtY3B5KEdsb2JhbHMubHBzekxhbmd1YWdlLCBzekJ1ZmZlciwgMStsc3RybGVuKHN6QnVmZmVyKSk7IAorLy8gICAgICAgIGhtZW1jcHkoR2xvYmFscy5scHN6TGFuZ3VhZ2UsIHN6QnVmZmVyLCAxK2xzdHJsZW4oc3pCdWZmZXIpKTsgCisgICAgICAgIGxzdHJjcHluKEdsb2JhbHMubHBzekxhbmd1YWdlLCBzekJ1ZmZlciwgc3RybGVuKHN6QnVmZmVyKSsxKTsgCiAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvcHJvZ3JhbXMvY2xvY2svbGljZW5zZS5jIGIvcHJvZ3JhbXMvY2xvY2svbGljZW5zZS5jCmluZGV4IDA5NWRhNTcuLmFkZmQ1ODYgMTAwNjQ0Ci0tLSBhL3Byb2dyYW1zL2Nsb2NrL2xpY2Vuc2UuYworKysgYi9wcm9ncmFtcy9jbG9jay9saWNlbnNlLmMKQEAgLTExLDIzICsxMSwyMyBAQAogc3RhdGljIExJQ0VOU0UqIFNlbGVjdExhbmd1YWdlKExQQ1NUUiBMYW5ndWFnZSkKIHsKIC8qCi0gIGlmICghbHN0cmNtcChMYW5ndWFnZSwgIkNhIikpIHJldHVybigmV2luZUxpY2Vuc2VfQ2EpOwotICBpZiAoIWxzdHJjbXAoTGFuZ3VhZ2UsICJDeiIpKSByZXR1cm4oJldpbmVMaWNlbnNlX0N6KTsKLSAgaWYgKCFsc3RyY21wKExhbmd1YWdlLCAiRGEiKSkgcmV0dXJuKCZXaW5lTGljZW5zZV9EYSk7Ci0gIGlmICghbHN0cmNtcChMYW5ndWFnZSwgIkRlIikpIHJldHVybigmV2luZUxpY2Vuc2VfRGUpOwotICBpZiAoIWxzdHJjbXAoTGFuZ3VhZ2UsICJFbiIpKSByZXR1cm4oJldpbmVMaWNlbnNlX0VuKTsKLSAgaWYgKCFsc3RyY21wKExhbmd1YWdlLCAiRW8iKSkgcmV0dXJuKCZXaW5lTGljZW5zZV9Fbyk7Ci0gIGlmICghbHN0cmNtcChMYW5ndWFnZSwgIkVzIikpIHJldHVybigmV2luZUxpY2Vuc2VfRXMpOwotICBpZiAoIWxzdHJjbXAoTGFuZ3VhZ2UsICJGaSIpKSByZXR1cm4oJldpbmVMaWNlbnNlX0ZpKTsKLSAgaWYgKCFsc3RyY21wKExhbmd1YWdlLCAiRnIiKSkgcmV0dXJuKCZXaW5lTGljZW5zZV9Gcik7Ci0gIGlmICghbHN0cmNtcChMYW5ndWFnZSwgIkh1IikpIHJldHVybigmV2luZUxpY2Vuc2VfSHUpOwotICBpZiAoIWxzdHJjbXAoTGFuZ3VhZ2UsICJJdCIpKSByZXR1cm4oJldpbmVMaWNlbnNlX0l0KTsKLSAgaWYgKCFsc3RyY21wKExhbmdhdWdlLCAiS28iKSkgcmV0dXJuKCZXaW5lTGljZW5zZV9Lbyk7Ci0gIGlmICghbHN0cmNtcChMYW5ndWFnZSwgIk5vIikpIHJldHVybigmV2luZUxpY2Vuc2VfTm8pOwotICBpZiAoIWxzdHJjbXAoTGFuZ3VhZ2UsICJQbCIpKSByZXR1cm4oJldpbmVMaWNlbnNlX1BsKTsKLSAgaWYgKCFsc3RyY21wKExhbmd1YWdlLCAiUG8iKSkgcmV0dXJuKCZXaW5lTGljZW5zZV9Qbyk7Ci0gIGlmICghbHN0cmNtcChMYW5ndWFnZSwgIlN3IikpIHJldHVybigmV2luZUxpY2Vuc2VfU3cpOyAKLSAgaWYgKCFsc3RyY21wKExhbmd1YWdlLCAiVmEiKSkgcmV0dXJuKCZXaW5lTGljZW5zZV9WYSk7CisgIGlmIChsc3RyY21wKExhbmd1YWdlLCAiQ2EiKSkgcmV0dXJuKCZXaW5lTGljZW5zZV9DYSk7CisgIGlmIChsc3RyY21wKExhbmd1YWdlLCAiQ3oiKSkgcmV0dXJuKCZXaW5lTGljZW5zZV9Deik7CisgIGlmIChsc3RyY21wKExhbmd1YWdlLCAiRGEiKSkgcmV0dXJuKCZXaW5lTGljZW5zZV9EYSk7CisgIGlmIChsc3RyY21wKExhbmd1YWdlLCAiRGUiKSkgcmV0dXJuKCZXaW5lTGljZW5zZV9EZSk7CisgIGlmIChsc3RyY21wKExhbmd1YWdlLCAiRW4iKSkgcmV0dXJuKCZXaW5lTGljZW5zZV9Fbik7CisgIGlmIChsc3RyY21wKExhbmd1YWdlLCAiRW8iKSkgcmV0dXJuKCZXaW5lTGljZW5zZV9Fbyk7CisgIGlmIChsc3RyY21wKExhbmd1YWdlLCAiRXMiKSkgcmV0dXJuKCZXaW5lTGljZW5zZV9Fcyk7CisgIGlmIChsc3RyY21wKExhbmd1YWdlLCAiRmkiKSkgcmV0dXJuKCZXaW5lTGljZW5zZV9GaSk7CisgIGlmIChsc3RyY21wKExhbmd1YWdlLCAiRnIiKSkgcmV0dXJuKCZXaW5lTGljZW5zZV9Gcik7CisgIGlmIChsc3RyY21wKExhbmd1YWdlLCAiSHUiKSkgcmV0dXJuKCZXaW5lTGljZW5zZV9IdSk7CisgIGlmIChsc3RyY21wKExhbmd1YWdlLCAiSXQiKSkgcmV0dXJuKCZXaW5lTGljZW5zZV9JdCk7CisgIGlmIChsc3RyY21wKExhbmdhdWdlLCAiS28iKSkgcmV0dXJuKCZXaW5lTGljZW5zZV9Lbyk7CisgIGlmIChsc3RyY21wKExhbmd1YWdlLCAiTm8iKSkgcmV0dXJuKCZXaW5lTGljZW5zZV9Obyk7CisgIGlmIChsc3RyY21wKExhbmd1YWdlLCAiUGwiKSkgcmV0dXJuKCZXaW5lTGljZW5zZV9QbCk7CisgIGlmIChsc3RyY21wKExhbmd1YWdlLCAiUG8iKSkgcmV0dXJuKCZXaW5lTGljZW5zZV9Qbyk7CisgIGlmIChsc3RyY21wKExhbmd1YWdlLCAiU3ciKSkgcmV0dXJuKCZXaW5lTGljZW5zZV9Tdyk7IAorICBpZiAobHN0cmNtcChMYW5ndWFnZSwgIlZhIikpIHJldHVybigmV2luZUxpY2Vuc2VfVmEpOwogKi8KICAgcmV0dXJuKCZXaW5lTGljZW5zZV9Fbik7CiB9CkBAIC00OSw0ICs0OSwzIEBACiAgIE1lc3NhZ2VCb3goV25kLCBMaWNlbnNlLT5XYXJyYW50eSwgTGljZW5zZS0+V2FycmFudHlDYXB0aW9uLAogICAgICAgICAgICAgIE1CX0lDT05FWENMQU1BVElPTiB8IE1CX09LKTsKIH0KLQpkaWZmIC0tZ2l0IGEvcHJvZ3JhbXMvY2xvY2svbWFpbi5jIGIvcHJvZ3JhbXMvY2xvY2svbWFpbi5jCmluZGV4IGU1YzY1OTEuLjQyZDVmMzcgMTAwNjQ0Ci0tLSBhL3Byb2dyYW1zL2Nsb2NrL21haW4uYworKysgYi9wcm9ncmFtcy9jbG9jay9tYWluLmMKQEAgLTExMiwxMCArMTEyLDEwIEBACiAgICAgICAgIGZvbnQubHBmbkhvb2sgICAgICAgID0gMDsKICAgICAgICAgZm9udC5scFRlbXBsYXRlTmFtZSAgPSAwOwogICAgICAgICBmb250LmhJbnN0YW5jZSAgICAgICA9IEdsb2JhbHMuaEluc3RhbmNlOwotICAgICAgICBmb250Lmxwc3pTdHlsZSAgICAgICA9IExGX0ZBQ0VTSVpFOworLy8gICAgICAgIGZvbnQubHBzelN0eWxlICAgICAgID0gTEZfRkFDRVNJWkU7CiAgICAgICAgIGZvbnQubkZvbnRUeXBlICAgICAgID0gMDsKICAgICAgICAgZm9udC5uU2l6ZU1pbiAgICAgICAgPSAwOwotICAgICAgICBmb250Lm5TaXplTWF4ICAgICAgICA9IDA7CisgICAgICAgIGZvbnQublNpemVNYXggICAgICAgID0gMTQ0OwogCiAgICAgICAgIGlmIChDaG9vc2VGb250KCZmb250KSkgewogICAgICAgICAgICAgLyogZG8gbm90aGluZyB5ZXQgKi8KQEAgLTIwMyw4ICsyMDMsOCBAQAogICAgIE1TRyAgICAgIG1zZzsKICAgICBXTkRDTEFTUyBjbGFzczsKICAgICAKLSAgICBjaGFyIGNsYXNzTmFtZVtdID0gIkNMQ2xhc3MiOyAgLyogVG8gbWFrZSBzdXJlIGNsYXNzTmFtZSA+PSAweDEwMDAwICovCi0gICAgY2hhciB3aW5OYW1lW10gICA9ICJDbG9jayI7CisgICAgY2hhciBzekNsYXNzTmFtZVtdID0gIkNMQ2xhc3MiOyAgLyogVG8gbWFrZSBzdXJlIGNsYXNzTmFtZSA+PSAweDEwMDAwICovCisgICAgY2hhciBzeldpbk5hbWVbXSAgID0gIkNsb2NrIjsKIAogICAgICNpZiBkZWZpbmVkKFdJTkVMSUIpICYmICFkZWZpbmVkKEhBVkVfV0lORV9DT05TVFJVQ1RPUikKICAgICAgIC8qIFJlZ2lzdGVyIHJlc291cmNlcyAqLwpAQCAtMjM5LDI5ICsyMzksMTggQEAKIAljbGFzcy5oQ3Vyc29yICAgICAgID0gTG9hZEN1cnNvciAoMCwgSURDX0FSUk9XKTsKIAljbGFzcy5oYnJCYWNrZ3JvdW5kID0gR2V0U3RvY2tPYmplY3QgKEdSQVlfQlJVU0gpOwogCWNsYXNzLmxwc3pNZW51TmFtZSAgPSAwOwotCWNsYXNzLmxwc3pDbGFzc05hbWUgPSBjbGFzc05hbWU7CisJY2xhc3MubHBzekNsYXNzTmFtZSA9IHN6Q2xhc3NOYW1lOwogICAgIH0KIAogICAgIGlmICghUmVnaXN0ZXJDbGFzcyAoJmNsYXNzKSkgcmV0dXJuIEZBTFNFOwogCi0gICAgR2xvYmFscy5oTWFpblduZCA9IENyZWF0ZVdpbmRvdyAoY2xhc3NOYW1lLCB3aW5OYW1lLCBXU19PVkVSTEFQUEVEV0lORE9XLAotCQkJQ1dfVVNFREVGQVVMVCwgMCwgQ1dfVVNFREVGQVVMVCwgR2xvYmFscy5NYXhYLCBHbG9iYWxzLk1heFksIAotCQkJTG9hZE1lbnUoR2xvYmFscy5oSW5zdGFuY2UsIFNUUklOR19NRU5VX1h4KSwKLQkJCUdsb2JhbHMuaEluc3RhbmNlLCAwKTsKKyAgICBHbG9iYWxzLmhNYWluV25kID0gQ3JlYXRlV2luZG93IChzekNsYXNzTmFtZSwgc3pXaW5OYW1lLCBXU19PVkVSTEFQUEVEV0lORE9XLAorICAgICAgICBDV19VU0VERUZBVUxULCAwLCBDV19VU0VERUZBVUxULCBHbG9iYWxzLk1heFgsIEdsb2JhbHMuTWF4WSwgCisgICAgICAgIExvYWRNZW51KEdsb2JhbHMuaEluc3RhbmNlLCBTVFJJTkdfTUVOVV9YeCksIEdsb2JhbHMuaEluc3RhbmNlLCAwKTsKIAkJCQogICAgIExBTkdVQUdFX1NlbGVjdEJ5TmFtZShHbG9iYWxzLmxwc3pMYW5ndWFnZSk7CiAgICAgU2V0TWVudShHbG9iYWxzLmhNYWluV25kLCBHbG9iYWxzLmhNYWluTWVudSk7CiAKLSAgICBHbG9iYWxzLmhTeXN0ZW1NZW51ID0gR2V0U3lzdGVtTWVudShHbG9iYWxzLmhNYWluV25kLCBUUlVFKTsKLQotICAgIC8qCi0gICAgICAgIEZJWE1FOiBUaGUgbmV4dCBmZXcgbGluZXMgYXJlIGFuIGF0dGVtcHQgdG8gYWRkIGEgbWVudSBpdGVtIHRvIHRoZSAKLSAgICAgICAgICAgICAgIHdpbmRvdyBzeXN0ZW0gbWVudS4gCi0gICAgKi8KLSAgICAKLSAgICBBcHBlbmRNZW51KEdsb2JhbHMuaFN5c3RlbU1lbnUsIE1GX1NUUklORyB8IE1GX0JZQ09NTUFORCwgMTAwMCwgIml0ZW0iKTsKLSAgICBTZXRTeXN0ZW1NZW51KEdsb2JhbHMuaE1haW5XbmQsIEdsb2JhbHMuaFN5c3RlbU1lbnUpOwotCiAgICAgTEFOR1VBR0VfVXBkYXRlTWVudUNoZWNrbWFya3MoKTsKIAogICAgIFNob3dXaW5kb3cgKEdsb2JhbHMuaE1haW5XbmQsIHNob3cpOwpkaWZmIC0tZ2l0IGEvcHJvZ3JhbXMvY2xvY2svbWFpbi5oIGIvcHJvZ3JhbXMvY2xvY2svbWFpbi5oCmluZGV4IDZlZmFmNzcuLjIyMWIxNjUgMTAwNjQ0Ci0tLSBhL3Byb2dyYW1zL2Nsb2NrL21haW4uaAorKysgYi9wcm9ncmFtcy9jbG9jay9tYWluLmgKQEAgLTYzLDIzICs2MywyNSBAQAogI2RlZmluZSBJRFNfTEFOR1VBR0VfSUQgICAgICAgICAgICAgICAgU1RSSU5HSUQoMDApCiAjZGVmaW5lIElEU19MQU5HVUFHRV9NRU5VX0lURU0gICAgICAgICBTVFJJTkdJRCgwMSkKICNkZWZpbmUgSURTX0NMT0NLICAgICAgICAgICAgICAgICAgICAgIFNUUklOR0lEKDAyKQorI2RlZmluZSBJRFNfTUVOVV9PTl9UT1AgICAgICAgICAgICAgICAgU1RSSU5HSUQoMDMpCiAKIC8qIG1haW4gbWVudSAqLwogCisjZGVmaW5lIENMX09OX1RPUCAgICAgICAgICAgICAgICA5OQorCiAjZGVmaW5lIENMX0FOQUxPRyAgICAgICAgICAgICAgICAxMDAKICNkZWZpbmUgQ0xfRElHSVRBTCAgICAgICAgICAgICAgIDEwMQogI2RlZmluZSBDTF9GT05UICAgICAgICAgICAgICAgICAgMTAyCiAjZGVmaW5lIENMX1dJVEhPVVRfVElUTEUgICAgICAgICAxMDMKLSNkZWZpbmUgQ0xfT05fVE9QICAgICAgICAgICAgICAgIDEwNAotI2RlZmluZSBDTF9TRUNPTkRTICAgICAgICAgICAgICAgMTA1Ci0jZGVmaW5lIENMX0RBVEUgICAgICAgICAgICAgICAgICAxMDYKKyNkZWZpbmUgQ0xfU0VDT05EUyAgICAgICAgICAgICAgIDEwNAorI2RlZmluZSBDTF9EQVRFICAgICAgICAgICAgICAgICAgMTA1CiAKLSNkZWZpbmUgQ0xfTEFOR1VBR0UgICAgICAgICAgICAgIDEwOAorI2RlZmluZSBDTF9MQU5HVUFHRSAgICAgICAgICAgICAgMjAwCiAKLSNkZWZpbmUgQ0xfSU5GTyAgICAgICAgICAgICAgICAgIDE4NgotI2RlZmluZSBDTF9JTkZPX0xJQ0VOU0UgICAgICAgICAgMTg3Ci0jZGVmaW5lIENMX0lORk9fTk9fV0FSUkFOVFkgICAgICAxODgKLSNkZWZpbmUgQ0xfSU5GT19BQk9VVF9XSU5FICAgICAgIDE4OQorI2RlZmluZSBDTF9JTkZPICAgICAgICAgICAgICAgICAgMzAxCisjZGVmaW5lIENMX0lORk9fTElDRU5TRSAgICAgICAgICAzMDIKKyNkZWZpbmUgQ0xfSU5GT19OT19XQVJSQU5UWSAgICAgIDMwMworI2RlZmluZSBDTF9JTkZPX0FCT1VUX1dJTkUgICAgICAgMzA0CiAKLSNkZWZpbmUgQ0xfRklSU1RfTEFOR1VBR0UgICAgICAgIDEwOQotI2RlZmluZSBDTF9MQVNUX0xBTkdVQUdFICAgICAgICAgMTg1CisjZGVmaW5lIENMX0ZJUlNUX0xBTkdVQUdFICAgICAgICAyMDAKKyNkZWZpbmUgQ0xfTEFTVF9MQU5HVUFHRSAgICAgICAgIDIyMApkaWZmIC0tZ2l0IGEvcHJvZ3JhbXMvY2xvY2svd2luY2xvY2suYyBiL3Byb2dyYW1zL2Nsb2NrL3dpbmNsb2NrLmMKaW5kZXggNWJhZjVlYi4uOTU3ODk2NiAxMDA2NDQKLS0tIGEvcHJvZ3JhbXMvY2xvY2svd2luY2xvY2suYworKysgYi9wcm9ncmFtcy9jbG9jay93aW5jbG9jay5jCkBAIC0zNiw2ICszNiw4IEBACiAKIGZsb2F0IFBpPTMuMTQxNTkyNjsKIAoraW50IG5MYXN0U2Vjb25kID0gNjA7CisKIEhhbmREYXRhIE9sZFNlY29uZCxPbGRIb3VyLE9sZE1pbnV0ZTsKIAogaW50IE1pZGRsZVgodm9pZCkgewpAQCAtMTk5LDkgKzIwMSwxMiBAQAogICBCT09MIFJlZHJhdzsKIAogICBHZXRMb2NhbFRpbWUoJnN0KTsKKworICBTID0gc3Qud1NlY29uZDsKKyAgaWYgKG5MYXN0U2Vjb25kPT1TKSB7IGV4aXQ7IH0KKyAgbkxhc3RTZWNvbmQgPSBTOwogICBIID0gc3Qud0hvdXI7CiAgIE0gPSBzdC53TWludXRlOwotICBTID0gc3Qud1NlY29uZDsKICAgRiA9IHN0LndNaWxsaXNlY29uZHMgLyAxMDsKICAgRiA9IEYgKyBTKjEwMDsKICAgTSA9IE0qMTAwMCtGLzY7CmRpZmYgLS1naXQgYS9wcm9ncmFtcy9wcm9nbWFuL0NoYW5nZUxvZyBiL3Byb2dyYW1zL3Byb2dtYW4vQ2hhbmdlTG9nCmluZGV4IDlkYjhhYjguLjRkODk3ODAgMTAwNjQ0Ci0tLSBhL3Byb2dyYW1zL3Byb2dtYW4vQ2hhbmdlTG9nCisrKyBiL3Byb2dyYW1zL3Byb2dtYW4vQ2hhbmdlTG9nCkBAIC0zNiw3ICszNiw3IEBACiAKIAkqIFByb2dyYW0gaWNvbnM6IHJlcGFpbnQgb24gV01fTkNQQUlOVCBvciBXTV9QQUlOVElDT04KIAotU3VuIEFwciAxNCAyMDowOToxOSAxOTk2ICBQYWJsbyBTYXJhdHhhZ2EgPHNydHhnQGxpbnV4LmNoYW5hZS5zdGJlbi5iZT4KK1N1biBBcHIgMTQgMjA6MDk6MTkgMTk5NiAgUGFibG8gU2FyYXR4YWdhIDxzcnR4Z0BjaGFuYWUuYWxwaGFuZXQuY2g+CiAKIAkqIFtGci5yY10gKG5ldykKIAlBZGRlZCBGcmVuY2ggbGFuZ3VhZ2Ugc3VwcG9ydC4KZGlmZiAtLWdpdCBhL3Byb2dyYW1zL3Byb2dtYW4vRnIucmMgYi9wcm9ncmFtcy9wcm9nbWFuL0ZyLnJjCmluZGV4IDI1MWI1YmQuLmIwYjM1YzIgMTAwNjQ0Ci0tLSBhL3Byb2dyYW1zL3Byb2dtYW4vRnIucmMKKysrIGIvcHJvZ3JhbXMvcHJvZ21hbi9Gci5yYwpAQCAtMiw3ICsyLDcgQEAKICAqIFByb2dyYW0gTWFuYWdlcgogICoKICAqIENvcHlyaWdodCAxOTk2IFVscmljaCBTY2htaWQKLSAqIEZyZW5jaCBGci5yYyBieSBQYWJsbyBTYXJhdHhhZ2EgPHNydHhnQGxpbnV4LmNoYW5hZS5zdGJlbi5iZT4KKyAqIEZyZW5jaCBGci5yYyBieSBQYWJsbyBTYXJhdHhhZ2EgPHNydHhnQGNoYW5hZS5hbHBoYW5ldC5jaD4KICAqLwogCiAjZGVmaW5lIExBTkdVQUdFX0lEICAgICAgICAgICAgICAgICAgRnIKZGlmZiAtLWdpdCBhL3Byb2dyYW1zL3JlZ3Rlc3QvcmVndGVzdC5jIGIvcHJvZ3JhbXMvcmVndGVzdC9yZWd0ZXN0LmMKaW5kZXggMTYxNTQ4Yi4uNWRhYmU0MSAxMDA2NDQKLS0tIGEvcHJvZ3JhbXMvcmVndGVzdC9yZWd0ZXN0LmMKKysrIGIvcHJvZ3JhbXMvcmVndGVzdC9yZWd0ZXN0LmMKQEAgLTIzLDYgKzIzLDggQEAKIC8qIFRydWUgdGhpcyB3aGVuIHNlY3VyaXR5IGlzIGltcGxlbWVudGVkICovCiAjZGVmaW5lIENIRUNLX1NBTSBGQUxTRQogCisjZGVmaW5lIEVSUihzLGQpIGZwcmludGYoc3RkZXJyLCAiJXM6IyVkKFN0YXR1cz0lbGQpXG4iLCBfX0ZVTkNUSU9OX18scyxkKQorCiAvKgogICogTk9URVM6IFRoZXNlIGluZGl2aWR1YWwgcm91dGluZXMgYXJlIGxpc3RlZCBpbiBhbHBoYWJldGljYWwgb3JkZXIuCiAgKgpAQCAtMzYsMTcgKzM4LDE2IEBACiB2b2lkIFRlc3RDbG9zZUtleSgpCiB7CiAgICAgbG9uZyBsU3RzOwotICAgIGZwcmludGYoc3RkZXJyLCAiVGVzdGluZyBSZWdDbG9zZUtleS4uLlxuIik7CiAKICAgICBsU3RzID0gUmVnQ2xvc2VLZXkoKEhLRVkpMik7Ci0gICAgaWYgKGxTdHMgIT0gRVJST1JfSU5WQUxJRF9IQU5ETEUpIGZwcmludGYoc3RkZXJyLCAiIDE6JWxkXG4iLGxTdHMpOworICAgIGlmIChsU3RzICE9IEVSUk9SX0lOVkFMSURfSEFORExFKSBFUlIoMSxsU3RzKTsKIAogICAgIGxTdHMgPSBSZWdDbG9zZUtleShIS0VZX0xPQ0FMX01BQ0hJTkUpOwotICAgIGlmIChsU3RzICE9IEVSUk9SX1NVQ0NFU1MpIGZwcmludGYoc3RkZXJyLCAiIDI6JWxkXG4iLGxTdHMpOworICAgIGlmIChsU3RzICE9IEVSUk9SX1NVQ0NFU1MpIEVSUigyLGxTdHMpOwogCiAgICAgLyogQ2hlY2sgdHdpY2UganVzdCBmb3Iga2lja3MgKi8KICAgICBsU3RzID0gUmVnQ2xvc2VLZXkoSEtFWV9MT0NBTF9NQUNISU5FKTsKLSAgICBpZiAobFN0cyAhPSBFUlJPUl9TVUNDRVNTKSBmcHJpbnRmKHN0ZGVyciwgIiAzOiVsZFxuIixsU3RzKTsKKyAgICBpZiAobFN0cyAhPSBFUlJPUl9TVUNDRVNTKSBFUlIoMyxsU3RzKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNTYsMTcgKzU3LDE2IEBACiB7CiAgICAgbG9uZyBsU3RzOwogICAgIEhLRVkgaGtleTsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIlRlc3RpbmcgUmVnQ29ubmVjdFJlZ2lzdHJ5Li4uXG4iKTsKIAogICAgIGxTdHMgPSBSZWdDb25uZWN0UmVnaXN0cnkoIiIsKEhLRVkpMiwmaGtleSk7Ci0gICAgaWYgKGxTdHMgIT0gRVJST1JfU1VDQ0VTUykgZnByaW50ZihzdGRlcnIsICIgMTolbGRcbiIsbFN0cyk7CisgICAgaWYgKGxTdHMgIT0gRVJST1JfU1VDQ0VTUykgRVJSKDEsbFN0cyk7CiAKICAgICBsU3RzID0gUmVnQ29ubmVjdFJlZ2lzdHJ5KCIiLEhLRVlfTE9DQUxfTUFDSElORSwmaGtleSk7Ci0gICAgaWYgKGxTdHMgIT0gRVJST1JfU1VDQ0VTUykgZnByaW50ZihzdGRlcnIsICIgMjolbGRcbiIsbFN0cyk7CisgICAgaWYgKGxTdHMgIT0gRVJST1JfU1VDQ0VTUykgRVJSKDIsbFN0cyk7CiAKICNpZiBUT09fU0xPVwogICAgIGxTdHMgPSBSZWdDb25uZWN0UmVnaXN0cnkoIlxcXFxyZWd0ZXN0IixIS0VZX0xPQ0FMX01BQ0hJTkUsJmhrZXkpOwotICAgIGlmIChsU3RzICE9IEVSUk9SX0JBRF9ORVRQQVRIKSBmcHJpbnRmKHN0ZGVyciwgIiAzOiVsZFxuIixsU3RzKTsKKyAgICBpZiAobFN0cyAhPSBFUlJPUl9CQURfTkVUUEFUSCkgRVJSKDMsbFN0cyk7CiAjZW5kaWYKIH0KIApAQCAtNzgsMjUgKzc4LDIzIEBACiAgICAgbG9uZyBsU3RzOwogICAgIEhLRVkgaGtleTsKIAotICAgIGZwcmludGYoc3RkZXJyLCAiVGVzdGluZyBSZWdDcmVhdGVLZXkuLi5cbiIpOwotCiAgICAgbFN0cyA9IFJlZ0NyZWF0ZUtleSgoSEtFWSkyLCIiLCZoa2V5KTsKLSAgICBpZiAobFN0cyAhPSBFUlJPUl9CQURLRVkpIGZwcmludGYoc3RkZXJyLCAiIDE6JWxkXG4iLGxTdHMpOworICAgIGlmIChsU3RzICE9IEVSUk9SX0JBREtFWSkgRVJSKDEsbFN0cyk7CiAKICAgICBsU3RzID0gUmVnQ3JlYXRlS2V5KEhLRVlfTE9DQUxfTUFDSElORSwiIiwmaGtleSk7Ci0gICAgaWYgKGxTdHMgIT0gRVJST1JfU1VDQ0VTUykgZnByaW50ZihzdGRlcnIsICIgMjolbGRcbiIsbFN0cyk7CisgICAgaWYgKGxTdHMgIT0gRVJST1JfU1VDQ0VTUykgRVJSKDIsbFN0cyk7CiAgICAgUmVnQ2xvc2VLZXkoaGtleSk7CiAKICAgICBsU3RzID0gUmVnQ3JlYXRlS2V5KEhLRVlfTE9DQUxfTUFDSElORSwiXFxhc2RmIiwmaGtleSk7Ci0gICAgaWYgKGxTdHMgIT0gRVJST1JfQkFEX1BBVEhOQU1FKSBmcHJpbnRmKHN0ZGVyciwgIiAzOiVsZFxuIixsU3RzKTsKKyAgICBpZiAobFN0cyAhPSBFUlJPUl9CQURfUEFUSE5BTUUpIEVSUigzLGxTdHMpOwogCiAjaWYgMAogICAgIGxTdHMgPSBSZWdDcmVhdGVLZXkoSEtFWV9MT0NBTF9NQUNISU5FLCJhc2RmXFwiLCZoa2V5KTsKLSAgICBpZiAobFN0cyAhPSBFUlJPUl9JTlZBTElEX1BBUkFNRVRFUikgZnByaW50ZihzdGRlcnIsICIgNDolbGRcbiIsbFN0cyk7CisgICAgaWYgKGxTdHMgIT0gRVJST1JfSU5WQUxJRF9QQVJBTUVURVIpIEVSUig0LGxTdHMpOwogI2VuZGlmCiAKICAgICBsU3RzID0gUmVnQ3JlYXRlS2V5KEhLRVlfTE9DQUxfTUFDSElORSwiXFxhc2RmXFwiLCZoa2V5KTsKLSAgICBpZiAobFN0cyAhPSBFUlJPUl9CQURfUEFUSE5BTUUpIGZwcmludGYoc3RkZXJyLCAiIDU6JWxkXG4iLGxTdHMpOworICAgIGlmIChsU3RzICE9IEVSUk9SX0JBRF9QQVRITkFNRSkgRVJSKDUsbFN0cyk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTEwOCwyMiArMTA2LDIwIEBACiAgICAgSEtFWSBoa2V5OwogICAgIERXT1JEIGR3RGlzcDsKIAotICAgIGZwcmludGYoc3RkZXJyLCAiVGVzdGluZyBSZWdDcmVhdGVLZXlFeC4uLlxuIik7Ci0KICAgICBsU3RzID0gUmVnQ3JlYXRlS2V5RXgoKEhLRVkpMiwiIiwwLCIiLDAsMCxOVUxMLCZoa2V5LCZkd0Rpc3ApOwotICAgIGlmIChsU3RzICE9IEVSUk9SX0lOVkFMSURfSEFORExFKSBmcHJpbnRmKHN0ZGVyciwgIiAxOiVsZFxuIixsU3RzKTsKKyAgICBpZiAobFN0cyAhPSBFUlJPUl9JTlZBTElEX0hBTkRMRSkgRVJSKDEsbFN0cyk7CiAKICAgICBsU3RzID0gUmVnQ3JlYXRlS2V5RXgoSEtFWV9MT0NBTF9NQUNISU5FLCJyZWd0ZXN0IiwwLCIiLDAsMCxOVUxMLCZoa2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAmZHdEaXNwKTsKLSAgICBpZiAobFN0cyAhPSBFUlJPUl9JTlZBTElEX1BBUkFNRVRFUikgZnByaW50ZihzdGRlcnIsICIgMjolbGRcbiIsbFN0cyk7CisgICAgaWYgKGxTdHMgIT0gRVJST1JfSU5WQUxJRF9QQVJBTUVURVIpIEVSUigyLGxTdHMpOwogCiAgICAgbFN0cyA9IFJlZ0NyZWF0ZUtleUV4KEhLRVlfTE9DQUxfTUFDSElORSwicmVndGVzdCIsMCwiYXNkZiIsMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgS0VZX0FMTF9BQ0NFU1MsTlVMTCwmaGtleSwmZHdEaXNwKTsKLSAgICBpZiAobFN0cyAhPSBFUlJPUl9JTlZBTElEX1BBUkFNRVRFUikgZnByaW50ZihzdGRlcnIsICIgMzolbGRcbiIsbFN0cyk7CisgICAgaWYgKGxTdHMgIT0gRVJST1JfSU5WQUxJRF9QQVJBTUVURVIpIEVSUigzLGxTdHMpOwogCiAgICAgbFN0cyA9IFJlZ0NyZWF0ZUtleUV4KEhLRVlfTE9DQUxfTUFDSElORSwicmVndGVzdCIsMCwiIiwwLAogICAgICAgICAgICAgICAgICAgICAgICAgICBLRVlfQUxMX0FDQ0VTUyxOVUxMLCZoa2V5LCZkd0Rpc3ApOwotICAgIGlmIChsU3RzICE9IEVSUk9SX0lOVkFMSURfUEFSQU1FVEVSKSBmcHJpbnRmKHN0ZGVyciwgIiA0OiVsZFxuIixsU3RzKTsKKyAgICBpZiAobFN0cyAhPSBFUlJPUl9JTlZBTElEX1BBUkFNRVRFUikgRVJSKDQsbFN0cyk7CiAKIH0KIApAQCAtMTMzLDE3ICsxMjksMTYgQEAKIHZvaWQgVGVzdERlbGV0ZUtleSgpCiB7CiAgICAgbG9uZyBsU3RzOwotICAgIGZwcmludGYoc3RkZXJyLCAiVGVzdGluZyBSZWdEZWxldGVLZXkuLi5cbiIpOwogCiAgICAgbFN0cyA9IFJlZ0RlbGV0ZUtleSgoSEtFWSkyLCAiYXNkZiIpOwotICAgIGlmIChsU3RzICE9IEVSUk9SX0lOVkFMSURfSEFORExFKSBmcHJpbnRmKHN0ZGVyciwgIiAxOiVsZFxuIixsU3RzKTsKKyAgICBpZiAobFN0cyAhPSBFUlJPUl9JTlZBTElEX0hBTkRMRSkgRVJSKDEsbFN0cyk7CiAKICAgICBsU3RzID0gUmVnRGVsZXRlS2V5KEhLRVlfQ1VSUkVOVF9VU0VSLCAiYXNkZiIpOwotICAgIGlmIChsU3RzICE9IEVSUk9SX0ZJTEVfTk9UX0ZPVU5EKSBmcHJpbnRmKHN0ZGVyciwgIiAyOiVsZFxuIixsU3RzKTsKKyAgICBpZiAobFN0cyAhPSBFUlJPUl9GSUxFX05PVF9GT1VORCkgRVJSKDIsbFN0cyk7CiAKICNpZiBDSEVDS19TQU0KICAgICBsU3RzID0gUmVnRGVsZXRlS2V5KEhLRVlfQ1VSUkVOVF9VU0VSLCAiIik7Ci0gICAgaWYgKGxTdHMgIT0gRVJST1JfQUNDRVNTX0RFTklFRCkgZnByaW50ZihzdGRlcnIsICIgMzolbGRcbiIsbFN0cyk7CisgICAgaWYgKGxTdHMgIT0gRVJST1JfQUNDRVNTX0RFTklFRCkgRVJSKDMsbFN0cyk7CiAjZW5kaWYKIH0KIApAQCAtMTUzLDE5ICsxNDgsMTggQEAKIHZvaWQgVGVzdERlbGV0ZVZhbHVlKCkKIHsKICAgICBsb25nIGxTdHM7Ci0gICAgZnByaW50ZihzdGRlcnIsICJUZXN0aW5nIFJlZ0RlbGV0ZVZhbHVlLi4uXG4iKTsKIAogICAgIGxTdHMgPSBSZWdEZWxldGVWYWx1ZSgoSEtFWSkyLCAiYXNkZiIpOwotICAgIGlmIChsU3RzICE9IEVSUk9SX0lOVkFMSURfSEFORExFKSBmcHJpbnRmKHN0ZGVyciwgIiAxOiVsZFxuIixsU3RzKTsKKyAgICBpZiAobFN0cyAhPSBFUlJPUl9JTlZBTElEX0hBTkRMRSkgRVJSKDEsbFN0cyk7CiAKICAgICBsU3RzID0gUmVnRGVsZXRlVmFsdWUoSEtFWV9DVVJSRU5UX1VTRVIsICIiKTsKLSAgICBpZiAobFN0cyAhPSBFUlJPUl9GSUxFX05PVF9GT1VORCkgZnByaW50ZihzdGRlcnIsICIgMjolbGRcbiIsbFN0cyk7CisgICAgaWYgKGxTdHMgIT0gRVJST1JfRklMRV9OT1RfRk9VTkQpIEVSUigyLGxTdHMpOwogCiAgICAgbFN0cyA9IFJlZ0RlbGV0ZVZhbHVlKEhLRVlfQ1VSUkVOVF9VU0VSLCAiYXNkZiIpOwotICAgIGlmIChsU3RzICE9IEVSUk9SX0ZJTEVfTk9UX0ZPVU5EKSBmcHJpbnRmKHN0ZGVyciwgIiAzOiVsZFxuIixsU3RzKTsKKyAgICBpZiAobFN0cyAhPSBFUlJPUl9GSUxFX05PVF9GT1VORCkgRVJSKDMsbFN0cyk7CiAKICAgICBsU3RzID0gUmVnRGVsZXRlVmFsdWUoSEtFWV9DVVJSRU5UX1VTRVIsICJcXGFzZGYiKTsKLSAgICBpZiAobFN0cyAhPSBFUlJPUl9GSUxFX05PVF9GT1VORCkgZnByaW50ZihzdGRlcnIsICIgNDolbGRcbiIsbFN0cyk7CisgICAgaWYgKGxTdHMgIT0gRVJST1JfRklMRV9OT1RfRk9VTkQpIEVSUig0LGxTdHMpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xNzcsMTggKzE3MSwxNyBAQAogICAgIGNoYXIgKnNWYWw7CiAgICAgbG9uZyBsVmFsOwogCi0gICAgZnByaW50ZihzdGRlcnIsICJUZXN0aW5nIFJlZ0VudW1LZXkuLi5cbiIpOwogICAgIGxWYWwgPSAxOwogICAgIHNWYWwgPSAoY2hhciAqKW1hbGxvYyhsVmFsICogc2l6ZW9mKGNoYXIpKTsKIAogICAgIGxTdHMgPSBSZWdFbnVtS2V5KChIS0VZKTIsMyxzVmFsLGxWYWwpOwotICAgIGlmIChsU3RzICE9IEVSUk9SX0lOVkFMSURfSEFORExFKSBmcHJpbnRmKHN0ZGVyciwgIiAxOiVsZFxuIixsU3RzKTsKKyAgICBpZiAobFN0cyAhPSBFUlJPUl9JTlZBTElEX0hBTkRMRSkgRVJSKDEsbFN0cyk7CiAKICAgICBsU3RzID0gUmVnRW51bUtleShIS0VZX0NVUlJFTlRfVVNFUiwtMSxzVmFsLGxWYWwpOwotICAgIGlmIChsU3RzICE9IEVSUk9SX05PX01PUkVfSVRFTVMpIGZwcmludGYoc3RkZXJyLCAiIDI6JWxkXG4iLGxTdHMpOworICAgIGlmIChsU3RzICE9IEVSUk9SX05PX01PUkVfSVRFTVMpIEVSUigyLGxTdHMpOwogCiAgICAgbFN0cyA9IFJlZ0VudW1LZXkoSEtFWV9DVVJSRU5UX1VTRVIsMCxzVmFsLGxWYWwpOwotICAgIGlmIChsU3RzICE9IEVSUk9SX01PUkVfREFUQSkgZnByaW50ZihzdGRlcnIsICIgMzolbGRcbiIsbFN0cyk7CisgICAgaWYgKGxTdHMgIT0gRVJST1JfTU9SRV9EQVRBKSBFUlIoMyxsU3RzKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMjAzLDIwICsxOTYsMTkgQEAKICAgICB1bnNpZ25lZCBsb25nIGxMZW4yOwogICAgIEZJTEVUSU1FIGZ0OwogCi0gICAgZnByaW50ZihzdGRlcnIsICJUZXN0aW5nIFJlZ0VudW1LZXlFeC4uLlxuIik7CiAgICAgbExlbjEgPSAxOwogICAgIHNWYWwgPSAoY2hhciAqKW1hbGxvYyhsTGVuMSAqIHNpemVvZihjaGFyKSk7CiAgICAgbExlbjIgPSAxOwogICAgIHNDbGFzcyA9IChjaGFyICopbWFsbG9jKGxMZW4yICogc2l6ZW9mKGNoYXIpKTsKIAogICAgIGxTdHMgPSBSZWdFbnVtS2V5RXgoKEhLRVkpMiwwLHNWYWwsJmxMZW4xLDAsc0NsYXNzLCZsTGVuMiwmZnQpOwotICAgIGlmIChsU3RzICE9IEVSUk9SX0lOVkFMSURfSEFORExFKSBmcHJpbnRmKHN0ZGVyciwgIiAxOiVsZFxuIixsU3RzKTsKKyAgICBpZiAobFN0cyAhPSBFUlJPUl9JTlZBTElEX0hBTkRMRSkgRVJSKDEsbFN0cyk7CiAKICAgICBsU3RzID0gUmVnRW51bUtleUV4KEhLRVlfTE9DQUxfTUFDSElORSwwLHNWYWwsJmxMZW4xLDAsc0NsYXNzLCZsTGVuMiwmZnQpOwotICAgIGlmIChsU3RzICE9IEVSUk9SX01PUkVfREFUQSkgZnByaW50ZihzdGRlcnIsICIgMjolbGRcbiIsbFN0cyk7CisgICAgaWYgKGxTdHMgIT0gRVJST1JfTU9SRV9EQVRBKSBFUlIoMixsU3RzKTsKIAogICAgIGxTdHMgPSBSZWdFbnVtS2V5RXgoSEtFWV9MT0NBTF9NQUNISU5FLDAsc1ZhbCwmbExlbjEsMCxzQ2xhc3MsJmxMZW4yLCZmdCk7Ci0gICAgaWYgKGxTdHMgIT0gRVJST1JfTU9SRV9EQVRBKSBmcHJpbnRmKHN0ZGVyciwgIiAzOiVsZFxuIixsU3RzKTsKKyAgICBpZiAobFN0cyAhPSBFUlJPUl9NT1JFX0RBVEEpIEVSUigzLGxTdHMpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0yMzEsMjMgKzIyMywyNSBAQAogICAgIHVuc2lnbmVkIGxvbmcgbExlbjE7CiAgICAgY2hhciAqYlZhbDsKIAotICAgIGZwcmludGYoc3RkZXJyLCAiVGVzdGluZyBSZWdFbnVtVmFsdWUuLi5cbiIpOwogICAgIGxWYWwgPSAxOwogICAgIHNWYWwgPSAoY2hhciAqKW1hbGxvYyhsVmFsICogc2l6ZW9mKGNoYXIpKTsKICAgICBsTGVuMSA9IDE7CiAgICAgYlZhbCA9IChjaGFyICopbWFsbG9jKGxMZW4xICogc2l6ZW9mKGNoYXIpKTsKIAogICAgIGxTdHMgPSBSZWdFbnVtVmFsdWUoKEhLRVkpMiwtMSxzVmFsLCZsVmFsLDAsJmxUeXBlLE5VTEwsJmxMZW4xKTsKLSAgICBpZiAobFN0cyAhPSBFUlJPUl9JTlZBTElEX0hBTkRMRSkgZnByaW50ZihzdGRlcnIsICIgMTolbGRcbiIsbFN0cyk7CisgICAgaWYgKGxTdHMgIT0gRVJST1JfSU5WQUxJRF9IQU5ETEUpIEVSUigxLGxTdHMpOwogCiAgICAgbFN0cyA9IFJlZ0VudW1WYWx1ZShIS0VZX0xPQ0FMX01BQ0hJTkUsLTEsc1ZhbCwmbFZhbCwwLCZsVHlwZSxOVUxMLCZsTGVuMSk7Ci0gICAgaWYgKGxTdHMgIT0gRVJST1JfTk9fTU9SRV9JVEVNUykgZnByaW50ZihzdGRlcnIsICIgMjolbGRcbiIsbFN0cyk7CisgICAgaWYgKGxTdHMgIT0gRVJST1JfTk9fTU9SRV9JVEVNUykgRVJSKDIsbFN0cyk7CiAKICAgICBsU3RzID0gUmVnRW51bVZhbHVlKEhLRVlfTE9DQUxfTUFDSElORSwwLHNWYWwsJmxWYWwsMCwmbFR5cGUsTlVMTCwmbExlbjEpOwotICAgIGlmIChsU3RzICE9IEVSUk9SX1NVQ0NFU1MpIGZwcmludGYoc3RkZXJyLCAiIDM6JWxkXG4iLGxTdHMpOworICAgIGlmIChsU3RzICE9IEVSUk9SX1NVQ0NFU1MpIEVSUigzLGxTdHMpOworCisgICAgbFN0cyA9IFJlZ0VudW1WYWx1ZShIS0VZX0xPQ0FMX01BQ0hJTkUsMCxzVmFsLCZsVmFsLDAsTlVMTCxOVUxMLCZsTGVuMSk7CisgICAgaWYgKGxTdHMgIT0gRVJST1JfU1VDQ0VTUykgRVJSKDQsbFN0cyk7CiAKICAgICBsU3RzID0gUmVnRW51bVZhbHVlKEhLRVlfTE9DQUxfTUFDSElORSwxLHNWYWwsJmxWYWwsMCwmbFR5cGUsYlZhbCwmbExlbjEpOwotICAgIGlmIChsU3RzICE9IEVSUk9SX05PX01PUkVfSVRFTVMpIGZwcmludGYoc3RkZXJyLCAiIDQ6JWxkXG4iLGxTdHMpOworICAgIGlmIChsU3RzICE9IEVSUk9SX05PX01PUkVfSVRFTVMpIEVSUig1LGxTdHMpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0yNTYsMTMgKzI1MCwxMiBAQAogdm9pZCBUZXN0Rmx1c2hLZXkoKQogewogICAgIGxvbmcgbFN0czsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIlRlc3RpbmcgUmVnRmx1c2hLZXkuLi5cbiIpOwogCiAgICAgbFN0cyA9IFJlZ0ZsdXNoS2V5KChIS0VZKTIpOwotICAgIGlmIChsU3RzICE9IEVSUk9SX0lOVkFMSURfSEFORExFKSBmcHJpbnRmKHN0ZGVyciwgIiAxOiVsZFxuIixsU3RzKTsKKyAgICBpZiAobFN0cyAhPSBFUlJPUl9JTlZBTElEX0hBTkRMRSkgRVJSKDEsbFN0cyk7CiAKICAgICBsU3RzID0gUmVnRmx1c2hLZXkoSEtFWV9MT0NBTF9NQUNISU5FKTsKLSAgICBpZiAobFN0cyAhPSBFUlJPUl9TVUNDRVNTKSBmcHJpbnRmKHN0ZGVyciwgIiAyOiVsZFxuIixsU3RzKTsKKyAgICBpZiAobFN0cyAhPSBFUlJPUl9TVUNDRVNTKSBFUlIoMixsU3RzKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMjc1LDE4ICsyNjgsMTcgQEAKICAgICBTRUNVUklUWV9ERVNDUklQVE9SIHNkOwogICAgIHVuc2lnbmVkIGxvbmcgbExlbjsKIAotICAgIGZwcmludGYoc3RkZXJyLCAiVGVzdGluZyBSZWdHZXRLZXlTZWN1cml0eS4uLlxuIik7CiAgICAgbExlbiA9IHNpemVvZihzZCk7Ci0KKyAgICBzaSA9IDA7CiAgICAgbFN0cyA9IFJlZ0dldEtleVNlY3VyaXR5KChIS0VZKTIsc2ksJnNkLCZsTGVuKTsKLSAgICBpZiAobFN0cyAhPSBFUlJPUl9JTlZBTElEX0hBTkRMRSkgZnByaW50ZihzdGRlcnIsICIgMTolbGRcbiIsbFN0cyk7CisgICAgaWYgKGxTdHMgIT0gRVJST1JfSU5WQUxJRF9IQU5ETEUpIEVSUigxLGxTdHMpOwogCiAgICAgbFN0cyA9IFJlZ0dldEtleVNlY3VyaXR5KEhLRVlfTE9DQUxfTUFDSElORSxzaSwmc2QsJmxMZW4pOwotICAgIGlmIChsU3RzICE9IEVSUk9SX0lOU1VGRklDSUVOVF9CVUZGRVIpIGZwcmludGYoc3RkZXJyLCAiIDI6JWxkXG4iLGxTdHMpOworICAgIGlmIChsU3RzICE9IEVSUk9SX0lOU1VGRklDSUVOVF9CVUZGRVIpIEVSUigyLGxTdHMpOwogCiAgICAgc2kgPSBHUk9VUF9TRUNVUklUWV9JTkZPUk1BVElPTjsKICAgICBsU3RzID0gUmVnR2V0S2V5U2VjdXJpdHkoSEtFWV9MT0NBTF9NQUNISU5FLHNpLCZzZCwmbExlbik7Ci0gICAgaWYgKGxTdHMgIT0gRVJST1JfU1VDQ0VTUykgZnByaW50ZihzdGRlcnIsICIgMzolbGRcbiIsbFN0cyk7CisgICAgaWYgKGxTdHMgIT0gRVJST1JfU1VDQ0VTUykgRVJSKDMsbFN0cyk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTI5NSwyNiArMjg3LDI1IEBACiB2b2lkIFRlc3RMb2FkS2V5KCkKIHsKICAgICBsb25nIGxTdHM7Ci0gICAgZnByaW50ZihzdGRlcnIsICJUZXN0aW5nIFJlZ0xvYWRLZXkuLi5cbiIpOwogCiAgICAgbFN0cyA9IFJlZ0xvYWRLZXkoKEhLRVkpMiwiIiwiIik7Ci0gICAgaWYgKGxTdHMgIT0gRVJST1JfSU5WQUxJRF9QQVJBTUVURVIpIGZwcmludGYoc3RkZXJyLCAiIDE6JWxkXG4iLGxTdHMpOworICAgIGlmIChsU3RzICE9IEVSUk9SX0lOVkFMSURfUEFSQU1FVEVSKSBFUlIoMSxsU3RzKTsKIAogICAgIGxTdHMgPSBSZWdMb2FkS2V5KEhLRVlfQ1VSUkVOVF9VU0VSLCIiLCIiKTsKLSAgICBpZiAobFN0cyAhPSBFUlJPUl9JTlZBTElEX1BBUkFNRVRFUikgZnByaW50ZihzdGRlcnIsICIgMjolbGRcbiIsbFN0cyk7CisgICAgaWYgKGxTdHMgIT0gRVJST1JfSU5WQUxJRF9QQVJBTUVURVIpIEVSUigyLGxTdHMpOwogCiAgICAgbFN0cyA9IFJlZ0xvYWRLZXkoSEtFWV9DVVJSRU5UX1VTRVIsInJlZ3Rlc3QiLCIiKTsKLSAgICBpZiAobFN0cyAhPSBFUlJPUl9JTlZBTElEX1BBUkFNRVRFUikgZnByaW50ZihzdGRlcnIsICIgMzolbGRcbiIsbFN0cyk7CisgICAgaWYgKGxTdHMgIT0gRVJST1JfSU5WQUxJRF9QQVJBTUVURVIpIEVSUigzLGxTdHMpOwogCiAgICAgbFN0cyA9IFJlZ0xvYWRLZXkoSEtFWV9DVVJSRU5UX1VTRVIsIlxccmVndGVzdCIsIiIpOwotICAgIGlmIChsU3RzICE9IEVSUk9SX0lOVkFMSURfUEFSQU1FVEVSKSBmcHJpbnRmKHN0ZGVyciwgIiA0OiVsZFxuIixsU3RzKTsKKyAgICBpZiAobFN0cyAhPSBFUlJPUl9JTlZBTElEX1BBUkFNRVRFUikgRVJSKDQsbFN0cyk7CiAKICNpZiBDSEVDS19TQU0KICAgICBsU3RzID0gUmVnTG9hZEtleShIS0VZX0NVUlJFTlRfVVNFUiwicmVndGVzdCIsInJlZ3Rlc3QuZGF0Iik7Ci0gICAgaWYgKGxTdHMgIT0gRVJST1JfUFJJVklMRUdFX05PVF9IRUxEKSBmcHJpbnRmKHN0ZGVyciwgIiA1OiVsZFxuIixsU3RzKTsKKyAgICBpZiAobFN0cyAhPSBFUlJPUl9QUklWSUxFR0VfTk9UX0hFTEQpIEVSUig1LGxTdHMpOwogCiAgICAgbFN0cyA9IFJlZ0xvYWRLZXkoSEtFWV9DVVJSRU5UX1VTRVIsIlxccmVndGVzdCIsInJlZ3Rlc3QuZGF0Iik7Ci0gICAgaWYgKGxTdHMgIT0gRVJST1JfUFJJVklMRUdFX05PVF9IRUxEKSBmcHJpbnRmKHN0ZGVyciwgIiA2OiVsZFxuIixsU3RzKTsKKyAgICBpZiAobFN0cyAhPSBFUlJPUl9QUklWSUxFR0VfTk9UX0hFTEQpIEVSUig2LGxTdHMpOwogI2VuZGlmCiB9CiAKQEAgLTMyNiwxOCArMzE3LDE3IEBACiAgICAgbG9uZyBsU3RzOwogICAgIEhBTkRMRSBoRXZlbnQ7CiAKLSAgICBmcHJpbnRmKHN0ZGVyciwgIlRlc3RpbmcgUmVnTm90aWZ5Q2hhbmdlS2V5VmFsdWUuLi5cbiIpOwogICAgIGhFdmVudCA9IChIQU5ETEUpMDsKIAogICAgIGxTdHMgPSBSZWdOb3RpZnlDaGFuZ2VLZXlWYWx1ZSgoSEtFWSkyLCBUUlVFLCBSRUdfTk9USUZZX0NIQU5HRV9OQU1FLCAwLCAwKTsKLSAgICBpZiAobFN0cyAhPSBFUlJPUl9JTlZBTElEX0hBTkRMRSkgZnByaW50ZihzdGRlcnIsICIgMTolbGRcbiIsbFN0cyk7CisgICAgaWYgKGxTdHMgIT0gRVJST1JfSU5WQUxJRF9IQU5ETEUpIEVSUigxLGxTdHMpOwogCiAgICAgbFN0cyA9IFJlZ05vdGlmeUNoYW5nZUtleVZhbHVlKEhLRVlfQ1VSUkVOVF9VU0VSLCBUUlVFLCBSRUdfTk9USUZZX0NIQU5HRV9OQU1FLCAwLCAxKTsKLSAgICBpZiAobFN0cyAhPSBFUlJPUl9JTlZBTElEX1BBUkFNRVRFUikgZnByaW50ZihzdGRlcnIsICIgMjolbGRcbiIsbFN0cyk7CisgICAgaWYgKGxTdHMgIT0gRVJST1JfSU5WQUxJRF9QQVJBTUVURVIpIEVSUigyLGxTdHMpOwogCiAgICAgaEV2ZW50ID0gKEhBTkRMRSlIS0VZX0NVUlJFTlRfVVNFUjsKICAgICBsU3RzID0gUmVnTm90aWZ5Q2hhbmdlS2V5VmFsdWUoSEtFWV9DVVJSRU5UX1VTRVIsIFRSVUUsIFJFR19OT1RJRllfQ0hBTkdFX05BTUUsIGhFdmVudCwgMSk7Ci0gICAgaWYgKGxTdHMgIT0gRVJST1JfSU5WQUxJRF9IQU5ETEUpIGZwcmludGYoc3RkZXJyLCAiIDM6JWxkXG4iLGxTdHMpOworICAgIGlmIChsU3RzICE9IEVSUk9SX0lOVkFMSURfSEFORExFKSBFUlIoMyxsU3RzKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMzQ3LDIwICszMzcsMTkgQEAKIHsKICAgICBsb25nIGxTdHM7CiAgICAgSEtFWSBoa2V5OwotICAgIGZwcmludGYoc3RkZXJyLCAiVGVzdGluZyBSZWdPcGVuS2V5Li4uXG4iKTsKIAogICAgIGxTdHMgPSBSZWdPcGVuS2V5KChIS0VZKTcyLCAiIiwmaGtleSk7Ci0gICAgaWYgKGxTdHMgIT0gRVJST1JfU1VDQ0VTUykgZnByaW50ZihzdGRlcnIsICIgMTolbGRcbiIsbFN0cyk7CisgICAgaWYgKGxTdHMgIT0gRVJST1JfU1VDQ0VTUykgRVJSKDEsbFN0cyk7CiAgICAgUmVnQ2xvc2VLZXkoaGtleSk7CiAKICAgICBsU3RzID0gUmVnT3BlbktleSgoSEtFWSkyLCAicmVndGVzdCIsJmhrZXkpOwotICAgIGlmIChsU3RzICE9IEVSUk9SX0lOVkFMSURfSEFORExFKSBmcHJpbnRmKHN0ZGVyciwgIiAyOiVsZFxuIixsU3RzKTsKKyAgICBpZiAobFN0cyAhPSBFUlJPUl9JTlZBTElEX0hBTkRMRSkgRVJSKDIsbFN0cyk7CiAKICAgICBsU3RzID0gUmVnT3BlbktleShIS0VZX0NVUlJFTlRfVVNFUiwgInJlZ3Rlc3QiLCZoa2V5KTsKLSAgICBpZiAobFN0cyAhPSBFUlJPUl9GSUxFX05PVF9GT1VORCkgZnByaW50ZihzdGRlcnIsICIgMzolbGRcbiIsbFN0cyk7CisgICAgaWYgKGxTdHMgIT0gRVJST1JfRklMRV9OT1RfRk9VTkQpIEVSUigzLGxTdHMpOwogCiAgICAgbFN0cyA9IFJlZ09wZW5LZXkoSEtFWV9DVVJSRU5UX1VTRVIsICJcXHJlZ3Rlc3QiLCZoa2V5KTsKLSAgICBpZiAobFN0cyAhPSBFUlJPUl9CQURfUEFUSE5BTUUpIGZwcmludGYoc3RkZXJyLCAiIDQ6JWxkXG4iLGxTdHMpOworICAgIGlmIChsU3RzICE9IEVSUk9SX0JBRF9QQVRITkFNRSkgRVJSKDQsbFN0cyk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTM3MCwxOSArMzU5LDE4IEBACiB7CiAgICAgbG9uZyBsU3RzOwogICAgIEhLRVkgaGtleTsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIlRlc3RpbmcgUmVnT3BlbktleUV4Li4uXG4iKTsKIAogICAgIGxTdHMgPSBSZWdPcGVuS2V5RXgoKEhLRVkpMiwiIiwwLEtFWV9BTExfQUNDRVNTLCZoa2V5KTsKLSAgICBpZiAobFN0cyAhPSBFUlJPUl9JTlZBTElEX0hBTkRMRSkgZnByaW50ZihzdGRlcnIsICIgMTolbGRcbiIsbFN0cyk7CisgICAgaWYgKGxTdHMgIT0gRVJST1JfSU5WQUxJRF9IQU5ETEUpIEVSUigxLGxTdHMpOwogCiAgICAgbFN0cyA9IFJlZ09wZW5LZXlFeChIS0VZX0NVUlJFTlRfVVNFUiwiXFxyZWd0ZXN0IiwwLEtFWV9BTExfQUNDRVNTLCZoa2V5KTsKLSAgICBpZiAobFN0cyAhPSBFUlJPUl9CQURfUEFUSE5BTUUpIGZwcmludGYoc3RkZXJyLCAiIDI6JWxkXG4iLGxTdHMpOworICAgIGlmIChsU3RzICE9IEVSUk9SX0JBRF9QQVRITkFNRSkgRVJSKDIsbFN0cyk7CiAKICAgICBsU3RzID0gUmVnT3BlbktleUV4KEhLRVlfQ1VSUkVOVF9VU0VSLCJyZWd0ZXN0IiwwLDAsJmhrZXkpOwotICAgIGlmIChsU3RzICE9IEVSUk9SX0ZJTEVfTk9UX0ZPVU5EKSBmcHJpbnRmKHN0ZGVyciwgIiAzOiVsZFxuIixsU3RzKTsKKyAgICBpZiAobFN0cyAhPSBFUlJPUl9GSUxFX05PVF9GT1VORCkgRVJSKDMsbFN0cyk7CiAKICAgICBsU3RzID0gUmVnT3BlbktleUV4KEhLRVlfQ1VSUkVOVF9VU0VSLCJyZWd0ZXN0XFwiLDAsMCwmaGtleSk7Ci0gICAgaWYgKGxTdHMgIT0gRVJST1JfRklMRV9OT1RfRk9VTkQpIGZwcmludGYoc3RkZXJyLCAiIDM6JWxkXG4iLGxTdHMpOworICAgIGlmIChsU3RzICE9IEVSUk9SX0ZJTEVfTk9UX0ZPVU5EKSBFUlIoNCxsU3RzKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNDAxLDcgKzM4OSw2IEBACiAgICAgdW5zaWduZWQgbG9uZyBsTWF4VmFsTGVuOwogICAgIHVuc2lnbmVkIGxvbmcgbFNlY0Rlc2NMZW47CiAgICAgRklMRVRJTUUgZnQ7Ci0gICAgZnByaW50ZihzdGRlcnIsICJUZXN0aW5nIFJlZ1F1ZXJ5SW5mb0tleS4uLlxuIik7CiAKICAgICBsQ2xhc3MgPSAxOwogICAgIHNDbGFzcyA9IChjaGFyICopbWFsbG9jKGxDbGFzcyAqIHNpemVvZihjaGFyKSk7CkBAIC00MDksMTIgKzM5NiwxMiBAQAogICAgIGxTdHMgPSBSZWdRdWVyeUluZm9LZXkoKEhLRVkpMixzQ2xhc3MsJmxDbGFzcywwLCZsU3ViS2V5cywmbE1heFN1YkxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICZsTWF4Q2xhc3NMZW4sJmxWYWx1ZXMsJmxNYXhWYWxOYW1lTGVuLCZsTWF4VmFsTGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJmxTZWNEZXNjTGVuLCAmZnQpOwotICAgIGlmIChsU3RzICE9IEVSUk9SX0lOVkFMSURfSEFORExFKSBmcHJpbnRmKHN0ZGVyciwgIiAxOiVsZFxuIixsU3RzKTsKKyAgICBpZiAobFN0cyAhPSBFUlJPUl9JTlZBTElEX0hBTkRMRSkgRVJSKDEsbFN0cyk7CiAKICAgICBsU3RzID0gUmVnUXVlcnlJbmZvS2V5KEhLRVlfQ1VSUkVOVF9VU0VSLHNDbGFzcywmbENsYXNzLDAsJmxTdWJLZXlzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJmxNYXhTdWJMZW4sJmxNYXhDbGFzc0xlbiwmbFZhbHVlcywmbE1heFZhbE5hbWVMZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbE1heFZhbExlbiwmbFNlY0Rlc2NMZW4sICZmdCk7Ci0gICAgaWYgKGxTdHMgIT0gRVJST1JfU1VDQ0VTUykgZnByaW50ZihzdGRlcnIsICIgMjolbGRcbiIsbFN0cyk7CisgICAgaWYgKGxTdHMgIT0gRVJST1JfU1VDQ0VTUykgRVJSKDIsbFN0cyk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTQyNiwyMSArNDEzLDIwIEBACiAgICAgbG9uZyBsTGVuOwogICAgIGNoYXIgKnNWYWw7CiAKLSAgICBmcHJpbnRmKHN0ZGVyciwgIlRlc3RpbmcgUmVnUXVlcnlWYWx1ZS4uLlxuIik7CiAgICAgc1ZhbCA9IChjaGFyICopbWFsbG9jKDgwICogc2l6ZW9mKGNoYXIpKTsKICAgICBsTGVuID0gc3RybGVuKHNWYWwpOwogCiAgICAgbFN0cyA9IFJlZ1F1ZXJ5VmFsdWUoKEhLRVkpMiwiIixOVUxMLCZsTGVuKTsKLSAgICBpZiAobFN0cyAhPSBFUlJPUl9JTlZBTElEX0hBTkRMRSkgZnByaW50ZihzdGRlcnIsICIgMTolbGRcbiIsbFN0cyk7CisgICAgaWYgKGxTdHMgIT0gRVJST1JfSU5WQUxJRF9IQU5ETEUpIEVSUigxLGxTdHMpOwogCiAgICAgbFN0cyA9IFJlZ1F1ZXJ5VmFsdWUoSEtFWV9DVVJSRU5UX1VTRVIsIiIsTlVMTCwmbExlbik7Ci0gICAgaWYgKGxTdHMgIT0gRVJST1JfU1VDQ0VTUykgZnByaW50ZihzdGRlcnIsICIgMjolbGRcbiIsbFN0cyk7CisgICAgaWYgKGxTdHMgIT0gRVJST1JfU1VDQ0VTUykgRVJSKDIsbFN0cyk7CiAKICAgICBsU3RzID0gUmVnUXVlcnlWYWx1ZShIS0VZX0NVUlJFTlRfVVNFUiwiXFxyZWd0ZXN0IixOVUxMLCZsTGVuKTsKLSAgICBpZiAobFN0cyAhPSBFUlJPUl9CQURfUEFUSE5BTUUpIGZwcmludGYoc3RkZXJyLCAiIDM6JWxkXG4iLGxTdHMpOworICAgIGlmIChsU3RzICE9IEVSUk9SX0JBRF9QQVRITkFNRSkgRVJSKDMsbFN0cyk7CiAKICAgICBsU3RzID0gUmVnUXVlcnlWYWx1ZShIS0VZX0NVUlJFTlRfVVNFUiwiIixzVmFsLCZsTGVuKTsKLSAgICBpZiAobFN0cyAhPSBFUlJPUl9TVUNDRVNTKSBmcHJpbnRmKHN0ZGVyciwgIiA0OiVsZFxuIixsU3RzKTsKKyAgICBpZiAobFN0cyAhPSBFUlJPUl9TVUNDRVNTKSBFUlIoNCxsU3RzKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNDUzLDE4ICs0MzksMTcgQEAKICAgICB1bnNpZ25lZCBsb25nIGxUeXBlOwogICAgIHVuc2lnbmVkIGxvbmcgbExlbjsKIAotICAgIGZwcmludGYoc3RkZXJyLCAiVGVzdGluZyBSZWdRdWVyeVZhbHVlRXguLi5cbiIpOwogICAgIGxMZW4gPSA4MDsKICAgICBzVmFsID0gKGNoYXIgKiltYWxsb2MobExlbiAqIHNpemVvZihjaGFyKSk7CiAKICAgICBsU3RzID0gUmVnUXVlcnlWYWx1ZUV4KChIS0VZKTIsIiIsMCwmbFR5cGUsc1ZhbCwmbExlbik7Ci0gICAgaWYgKGxTdHMgIT0gRVJST1JfSU5WQUxJRF9IQU5ETEUpIGZwcmludGYoc3RkZXJyLCAiIDE6JWxkXG4iLGxTdHMpOworICAgIGlmIChsU3RzICE9IEVSUk9SX0lOVkFMSURfSEFORExFKSBFUlIoMSxsU3RzKTsKIAogICAgIGxTdHMgPSBSZWdRdWVyeVZhbHVlRXgoSEtFWV9DVVJSRU5UX1VTRVIsIiIsKExQRFdPUkQpMSwmbFR5cGUsc1ZhbCwmbExlbik7Ci0gICAgaWYgKGxTdHMgIT0gRVJST1JfSU5WQUxJRF9QQVJBTUVURVIpIGZwcmludGYoc3RkZXJyLCAiIDI6JWxkXG4iLGxTdHMpOworICAgIGlmIChsU3RzICE9IEVSUk9SX0lOVkFMSURfUEFSQU1FVEVSKSBFUlIoMixsU3RzKTsKIAogICAgIGxTdHMgPSBSZWdRdWVyeVZhbHVlRXgoSEtFWV9MT0NBTF9NQUNISU5FLCIiLDAsJmxUeXBlLHNWYWwsJmxMZW4pOwotICAgIGlmIChsU3RzICE9IEVSUk9SX1NVQ0NFU1MpIGZwcmludGYoc3RkZXJyLCAiIDM6JWxkXG4iLGxTdHMpOworICAgIGlmIChsU3RzICE9IEVSUk9SX1NVQ0NFU1MpIEVSUigzLGxTdHMpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC00NzQsMTcgKzQ1OSwxNSBAQAogewogICAgIGxvbmcgbFN0czsKIAotICAgIGZwcmludGYoc3RkZXJyLCAiVGVzdGluZyBSZWdSZXBsYWNlS2V5Li4uXG4iKTsKLQogICAgIGxTdHMgPSBSZWdSZXBsYWNlS2V5KChIS0VZKTIsIiIsIiIsIiIpOwotICAgIGlmIChsU3RzICE9IEVSUk9SX0lOVkFMSURfSEFORExFKSBmcHJpbnRmKHN0ZGVyciwgIiAxOiVsZFxuIixsU3RzKTsKKyAgICBpZiAobFN0cyAhPSBFUlJPUl9JTlZBTElEX0hBTkRMRSkgRVJSKDEsbFN0cyk7CiAKICNpZiBDSEVDS19TQU0KICAgICBsU3RzID0gUmVnUmVwbGFjZUtleShIS0VZX0xPQ0FMX01BQ0hJTkUsIiIsIiIsIiIpOwotICAgIGlmIChsU3RzICE9IEVSUk9SX0FDQ0VTU19ERU5JRUQpIGZwcmludGYoc3RkZXJyLCAiIDI6JWxkXG4iLGxTdHMpOworICAgIGlmIChsU3RzICE9IEVSUk9SX0FDQ0VTU19ERU5JRUQpIEVSUigyLGxTdHMpOwogCiAgICAgbFN0cyA9IFJlZ1JlcGxhY2VLZXkoSEtFWV9MT0NBTF9NQUNISU5FLCJTb2Z0d2FyZSIsIiIsIiIpOwotICAgIGlmIChsU3RzICE9IEVSUk9SX0FDQ0VTU19ERU5JRUQpIGZwcmludGYoc3RkZXJyLCAiIDM6JWxkXG4iLGxTdHMpOworICAgIGlmIChsU3RzICE9IEVSUk9SX0FDQ0VTU19ERU5JRUQpIEVSUigzLGxTdHMpOwogI2VuZGlmCiB9CiAKQEAgLTQ5NCwxNiArNDc3LDE1IEBACiB2b2lkIFRlc3RSZXN0b3JlS2V5KCkKIHsKICAgICBsb25nIGxTdHM7Ci0gICAgZnByaW50ZihzdGRlcnIsICJUZXN0aW5nIFJlZ1Jlc3RvcmVLZXkuLi5cbiIpOwogCiAgICAgbFN0cyA9IFJlZ1Jlc3RvcmVLZXkoKEhLRVkpMiwiIiwwKTsKLSAgICBpZiAobFN0cyAhPSBFUlJPUl9JTlZBTElEX1BBUkFNRVRFUikgZnByaW50ZihzdGRlcnIsICIgMTolbGRcbiIsbFN0cyk7CisgICAgaWYgKGxTdHMgIT0gRVJST1JfSU5WQUxJRF9QQVJBTUVURVIpIEVSUigxLGxTdHMpOwogCiAgICAgbFN0cyA9IFJlZ1Jlc3RvcmVLZXkoSEtFWV9MT0NBTF9NQUNISU5FLCIiLDApOwotICAgIGlmIChsU3RzICE9IEVSUk9SX0lOVkFMSURfUEFSQU1FVEVSKSBmcHJpbnRmKHN0ZGVyciwgIiAyOiVsZFxuIixsU3RzKTsKKyAgICBpZiAobFN0cyAhPSBFUlJPUl9JTlZBTElEX1BBUkFNRVRFUikgRVJSKDIsbFN0cyk7CiAKICAgICBsU3RzID0gUmVnUmVzdG9yZUtleShIS0VZX0xPQ0FMX01BQ0hJTkUsImEuYSIsMCk7Ci0gICAgaWYgKGxTdHMgIT0gRVJST1JfRklMRV9OT1RfRk9VTkQpIGZwcmludGYoc3RkZXJyLCAiIDM6JWxkXG4iLGxTdHMpOworICAgIGlmIChsU3RzICE9IEVSUk9SX0ZJTEVfTk9UX0ZPVU5EKSBFUlIoMyxsU3RzKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNTEyLDE3ICs0OTQsMTYgQEAKIHZvaWQgVGVzdFNhdmVLZXkoKQogewogICAgIGxvbmcgbFN0czsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIlRlc3RpbmcgUmVnU2F2ZUtleS4uLlxuIik7CiAKICAgICBsU3RzID0gUmVnU2F2ZUtleSgoSEtFWSkyLCIiLE5VTEwpOwotICAgIGlmIChsU3RzICE9IEVSUk9SX0lOVkFMSURfUEFSQU1FVEVSKSBmcHJpbnRmKHN0ZGVyciwgIiAxOiVsZFxuIixsU3RzKTsKKyAgICBpZiAobFN0cyAhPSBFUlJPUl9JTlZBTElEX1BBUkFNRVRFUikgRVJSKDEsbFN0cyk7CiAKICAgICBsU3RzID0gUmVnU2F2ZUtleShIS0VZX0xPQ0FMX01BQ0hJTkUsIiIsTlVMTCk7Ci0gICAgaWYgKGxTdHMgIT0gRVJST1JfSU5WQUxJRF9QQVJBTUVURVIpIGZwcmludGYoc3RkZXJyLCAiIDI6JWxkXG4iLGxTdHMpOworICAgIGlmIChsU3RzICE9IEVSUk9SX0lOVkFMSURfUEFSQU1FVEVSKSBFUlIoMixsU3RzKTsKIAogI2lmIENIRUNLX1NBTQogICAgIGxTdHMgPSBSZWdTYXZlS2V5KEhLRVlfTE9DQUxfTUFDSElORSwiYS5hIixOVUxMKTsKLSAgICBpZiAobFN0cyAhPSBFUlJPUl9QUklWSUxFR0VfTk9UX0hFTEQpIGZwcmludGYoc3RkZXJyLCAiIDM6JWxkXG4iLGxTdHMpOworICAgIGlmIChsU3RzICE9IEVSUk9SX1BSSVZJTEVHRV9OT1RfSEVMRCkgRVJSKDMsbFN0cyk7CiAjZW5kaWYKIH0KIApAQCAtNTMzLDE5ICs1MTQsMTggQEAKIHsKICAgICBsb25nIGxTdHM7CiAgICAgU0VDVVJJVFlfREVTQ1JJUFRPUiBzZDsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIlRlc3RpbmcgUmVnU2V0S2V5U2VjdXJpdHkuLi5cbiIpOwogCiAgICAgbFN0cyA9IFJlZ1NldEtleVNlY3VyaXR5KChIS0VZKTIsMCxOVUxMKTsKLSAgICBpZiAobFN0cyAhPSBFUlJPUl9JTlZBTElEX1BBUkFNRVRFUikgZnByaW50ZihzdGRlcnIsICIgMTolbGRcbiIsbFN0cyk7CisgICAgaWYgKGxTdHMgIT0gRVJST1JfSU5WQUxJRF9QQVJBTUVURVIpIEVSUigxLGxTdHMpOwogCiAgICAgbFN0cyA9IFJlZ1NldEtleVNlY3VyaXR5KEhLRVlfTE9DQUxfTUFDSElORSwwLE5VTEwpOwotICAgIGlmIChsU3RzICE9IEVSUk9SX0lOVkFMSURfUEFSQU1FVEVSKSBmcHJpbnRmKHN0ZGVyciwgIiAyOiVsZFxuIixsU3RzKTsKKyAgICBpZiAobFN0cyAhPSBFUlJPUl9JTlZBTElEX1BBUkFNRVRFUikgRVJSKDIsbFN0cyk7CiAKICAgICBsU3RzID0gUmVnU2V0S2V5U2VjdXJpdHkoSEtFWV9MT0NBTF9NQUNISU5FLE9XTkVSX1NFQ1VSSVRZX0lORk9STUFUSU9OLE5VTEwpOwotICAgIGlmIChsU3RzICE9IEVSUk9SX0lOVkFMSURfUEFSQU1FVEVSKSBmcHJpbnRmKHN0ZGVyciwgIiAzOiVsZFxuIixsU3RzKTsKKyAgICBpZiAobFN0cyAhPSBFUlJPUl9JTlZBTElEX1BBUkFNRVRFUikgRVJSKDMsbFN0cyk7CiAKICAgICBsU3RzID0gUmVnU2V0S2V5U2VjdXJpdHkoSEtFWV9MT0NBTF9NQUNISU5FLE9XTkVSX1NFQ1VSSVRZX0lORk9STUFUSU9OLCZzZCk7Ci0gICAgaWYgKGxTdHMgIT0gRVJST1JfSU5WQUxJRF9QQVJBTUVURVIpIGZwcmludGYoc3RkZXJyLCAiIDQ6JWxkXG4iLGxTdHMpOworICAgIGlmIChsU3RzICE9IEVSUk9SX0lOVkFMSURfUEFSQU1FVEVSKSBFUlIoNCxsU3RzKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNTUzLDI3ICs1MzMsMjggQEAKICAqLwogdm9pZCBUZXN0U2V0VmFsdWUoKQogeworI2lmIE1BS0VfTlRfQ1JBU0gKICAgICBsb25nIGxTdHM7Ci0gICAgZnByaW50ZihzdGRlcnIsICJUZXN0aW5nIFJlZ1NldFZhbHVlLi4uXG4iKTsKKyNlbmRpZgogCiAjaWYgTUFLRV9OVF9DUkFTSAogICAgIGxTdHMgPSBSZWdTZXRWYWx1ZSgoSEtFWSkyLCIiLDAsTlVMTCwwKTsKLSAgICBpZiAobFN0cyAhPSBFUlJPUl9JTlZBTElEX1BBUkFNRVRFUikgZnByaW50ZihzdGRlcnIsICIgMTolbGRcbiIsbFN0cyk7CisgICAgaWYgKGxTdHMgIT0gRVJST1JfSU5WQUxJRF9QQVJBTUVURVIpIEVSUigxLGxTdHMpOwogI2VuZGlmCiAKICNpZiBNQUtFX05UX0NSQVNICiAgICAgbFN0cyA9IFJlZ1NldFZhbHVlKChIS0VZKTIsInJlZ3Rlc3QiLDAsTlVMTCwwKTsKLSAgICBpZiAobFN0cyAhPSBFUlJPUl9JTlZBTElEX1BBUkFNRVRFUikgZnByaW50ZihzdGRlcnIsICIgMjolbGRcbiIsbFN0cyk7CisgICAgaWYgKGxTdHMgIT0gRVJST1JfSU5WQUxJRF9QQVJBTUVURVIpIEVSUigyLGxTdHMpOwogI2VuZGlmCiAKICNpZiBNQUtFX05UX0NSQVNICiAgICAgbFN0cyA9IFJlZ1NldFZhbHVlKChIS0VZKTIsInJlZ3Rlc3QiLFJFR19TWixOVUxMLDApOwotICAgIGlmIChsU3RzICE9IEVSUk9SX0lOVkFMSURfSEFORExFKSBmcHJpbnRmKHN0ZGVyciwgIiAzOiVsZFxuIixsU3RzKTsKKyAgICBpZiAobFN0cyAhPSBFUlJPUl9JTlZBTElEX0hBTkRMRSkgRVJSKDMsbFN0cyk7CiAjZW5kaWYKIAogI2lmIE1BS0VfTlRfQ1JBU0gKICAgICBsU3RzID0gUmVnU2V0VmFsdWUoSEtFWV9MT0NBTF9NQUNISU5FLCJyZWd0ZXN0IixSRUdfU1osTlVMTCwwKTsKLSAgICBpZiAobFN0cyAhPSBFUlJPUl9JTlZBTElEX0hBTkRMRSkgZnByaW50ZihzdGRlcnIsICIgNDolbGRcbiIsbFN0cyk7CisgICAgaWYgKGxTdHMgIT0gRVJST1JfSU5WQUxJRF9IQU5ETEUpIEVSUig0LGxTdHMpOwogI2VuZGlmCiB9CiAKQEAgLTU4MywxMyArNTY0LDEyIEBACiB2b2lkIFRlc3RTZXRWYWx1ZUV4KCkKIHsKICAgICBsb25nIGxTdHM7Ci0gICAgZnByaW50ZihzdGRlcnIsICJUZXN0aW5nIFJlZ1NldFZhbHVlRXguLi5cbiIpOwogCiAgICAgbFN0cyA9IFJlZ1NldFZhbHVlRXgoKEhLRVkpMiwiIiwwLDAsTlVMTCwwKTsKLSAgICBpZiAobFN0cyAhPSBFUlJPUl9JTlZBTElEX0hBTkRMRSkgZnByaW50ZihzdGRlcnIsICIgMTolbGRcbiIsbFN0cyk7CisgICAgaWYgKGxTdHMgIT0gRVJST1JfSU5WQUxJRF9IQU5ETEUpIEVSUigxLGxTdHMpOwogCiAgICAgbFN0cyA9IFJlZ1NldFZhbHVlRXgoSEtFWV9MT0NBTF9NQUNISU5FLCIiLDAsMCxOVUxMLDApOwotICAgIGlmIChsU3RzICE9IEVSUk9SX1NVQ0NFU1MpIGZwcmludGYoc3RkZXJyLCAiIDI6JWxkXG4iLGxTdHMpOworICAgIGlmIChsU3RzICE9IEVSUk9SX1NVQ0NFU1MpIEVSUigyLGxTdHMpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC01OTcsMTggKzU3NywxOSBAQAogICovCiB2b2lkIFRlc3RVbkxvYWRLZXkoKQogeworI2lmIENIRUNLX1NBTQogICAgIGxvbmcgbFN0czsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIlRlc3RpbmcgUmVnVW5sb2FkS2V5Li4uXG4iKTsKKyNlbmRpZgogCiAjaWYgQ0hFQ0tfU0FNCiAgICAgbFN0cyA9IFJlZ1VuTG9hZEtleSgoSEtFWSkyLCIiKTsKLSAgICBpZiAobFN0cyAhPSBFUlJPUl9QUklWSUxFR0VfTk9UX0hFTEQpIGZwcmludGYoc3RkZXJyLCAiIDE6JWxkXG4iLGxTdHMpOworICAgIGlmIChsU3RzICE9IEVSUk9SX1BSSVZJTEVHRV9OT1RfSEVMRCkgRVJSKDEsbFN0cyk7CiAKICAgICBsU3RzID0gUmVnVW5Mb2FkS2V5KEhLRVlfTE9DQUxfTUFDSElORSwiIik7Ci0gICAgaWYgKGxTdHMgIT0gRVJST1JfUFJJVklMRUdFX05PVF9IRUxEKSBmcHJpbnRmKHN0ZGVyciwgIiAyOiVsZFxuIixsU3RzKTsKKyAgICBpZiAobFN0cyAhPSBFUlJPUl9QUklWSUxFR0VfTk9UX0hFTEQpIEVSUigyLGxTdHMpOwogCiAgICAgbFN0cyA9IFJlZ1VuTG9hZEtleShIS0VZX0xPQ0FMX01BQ0hJTkUsIlxccmVndGVzdCIpOwotICAgIGlmIChsU3RzICE9IEVSUk9SX1BSSVZJTEVHRV9OT1RfSEVMRCkgZnByaW50ZihzdGRlcnIsICIgMzolbGRcbiIsbFN0cyk7CisgICAgaWYgKGxTdHMgIT0gRVJST1JfUFJJVklMRUdFX05PVF9IRUxEKSBFUlIoMyxsU3RzKTsKICNlbmRpZgogfQogCkBAIC02MjAsMTcgKzYwMSwxNSBAQAogICAgIEhLRVkgaGtleTsKICAgICBsb25nIGxTdHM7CiAKLSAgICBmcHJpbnRmKHN0ZGVyciwgIlRlc3RpbmcgU2VxdWVuY2UxLi4uXG4iKTsKLQogICAgIGxTdHMgPSBSZWdDcmVhdGVLZXkoSEtFWV9DVVJSRU5UX1VTRVIsInJlZ3Rlc3QiLCZoa2V5KTsKLSAgICBpZiAobFN0cyAhPSBFUlJPUl9TVUNDRVNTKSBmcHJpbnRmKHN0ZGVyciwgIiAxOiVsZFxuIixsU3RzKTsKKyAgICBpZiAobFN0cyAhPSBFUlJPUl9TVUNDRVNTKSBFUlIoMSxsU3RzKTsKIAotICAgIGZwcmludGYoc3RkZXJyLCAiIGhrZXk9MHgleFxuIiwgaGtleSk7CisvKiAgICBmcHJpbnRmKHN0ZGVyciwgIiBoa2V5PTB4JXhcbiIsIGhrZXkpOyAqLwogCiAgICAgbFN0cyA9IFJlZ0RlbGV0ZUtleShIS0VZX0NVUlJFTlRfVVNFUiwgInJlZ3Rlc3QiKTsKLSAgICBpZiAobFN0cyAhPSBFUlJPUl9TVUNDRVNTKSBmcHJpbnRmKHN0ZGVyciwgIiAyOiVsZFxuIixsU3RzKTsKKyAgICBpZiAobFN0cyAhPSBFUlJPUl9TVUNDRVNTKSBFUlIoMixsU3RzKTsKICAgICBsU3RzID0gUmVnQ2xvc2VLZXkoaGtleSk7Ci0gICAgaWYgKGxTdHMgIT0gRVJST1JfU1VDQ0VTUykgZnByaW50ZihzdGRlcnIsICIgMzolbGRcbiIsbFN0cyk7CisgICAgaWYgKGxTdHMgIT0gRVJST1JfU1VDQ0VTUykgRVJSKDMsbFN0cyk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvcmMvUkVBRE1FIGIvcmMvUkVBRE1FCmluZGV4IDk0OTMzNWMuLjMxNGEwM2YgMTAwNjQ0Ci0tLSBhL3JjL1JFQURNRQorKysgYi9yYy9SRUFETUUKQEAgLTksNyArOSw3IEBACiBjb21tZGxnLmRsbCwgYnV0IHRoZSB1c2UgaW4gdGhlIGxpYnJhcnkgdmVyc2lvbiBpcyBwb3NzaWJsZSBhcyB3ZWxsLgogVGhlIGV4cGVjdGVkIGFkdmFudGFnZSBvZiB1c2luZyB3aW5lcmMgb3ZlciBzeXNyZXMuZGxsIGlzIGEgc3BlZWQKIGltcHJvdmVtZW50LCBob3dldmVyLCBhY3R1YWwgZGF0YSB0byBzdXBwb3J0IHRoYXQgY2xhaW0gYXJlIG5vdAotYXZhaWxhYmxlLiBUaGUgdXNlIG9mIHdpbmVyYyBtaWdodCBhbHNvIHNpbXBsaWZpZXMgdGhlIHNvdXJjZSBjb2RlLiBGb3IKK2F2YWlsYWJsZS4gVGhlIHVzZSBvZiB3aW5lcmMgbWlnaHQgYWxzbyBzaW1wbGlmeSB0aGUgc291cmNlIGNvZGUuIEZvcgogZXhhbXBsZSwgdGhlIHN5c3RlbSBtZW51IGlzIG1hbmFnZWQgaW4gdGhlIGZ1bmN0aW9uIENvcHlTeXNNZW51CiAoY29udHJvbHMvbWVudS5jKS4gQSB3aW5lcmMtYmFzZWQgaW1wbGVtZW50YXRpb24gd291bGQganVzdCBjYWxsCiAJcmV0dXJuIExvYWRNZW51SW5kaXJlY3QoX1N5c3Jlc19TWVNNRU5VKTsKZGlmZiAtLWdpdCBhL3JlbGF5MzIvY29tY3RsMzIuc3BlYyBiL3JlbGF5MzIvY29tY3RsMzIuc3BlYwppbmRleCAzZDA0YzA0Li42N2ZlNjE3IDEwMDY0NAotLS0gYS9yZWxheTMyL2NvbWN0bDMyLnNwZWMKKysrIGIvcmVsYXkzMi9jb21jdGwzMi5zcGVjCkBAIC03LDcgKzcsNyBAQAogIyAgIFRoaXMgbGlzdCB3YXMgY3JlYXRlZCBmcm9tIGEgY29tY3RsMzIuZGxsIHY0LjcyIChJRTQuMDEpLgogCiAgIDIgc3RkY2FsbCBNZW51SGVscChsb25nIGxvbmcgbG9uZyBsb25nIGxvbmcgbG9uZyBwdHIpIE1lbnVIZWxwCi0gIDMgc3R1YiBTaG93SGlkZU1lbnVDdGwKKyAgMyBzdGRjYWxsIFNob3dIaWRlTWVudUN0bChsb25nIGxvbmcgcHRyKSBTaG93SGlkZU1lbnVDdGwKICAgNCBzdGRjYWxsIEdldEVmZmVjdGl2ZUNsaWVudFJlY3QobG9uZyBsb25nIGxvbmcpIEdldEVmZmVjdGl2ZUNsaWVudFJlY3QKICAgNSBzdGRjYWxsIERyYXdTdGF0dXNUZXh0QShsb25nIHB0ciBzdHIgbG9uZykgRHJhd1N0YXR1c1RleHQzMkEKICAgNiBzdGRjYWxsIENyZWF0ZVN0YXR1c1dpbmRvd0EobG9uZyBzdHIgbG9uZyBsb25nKSBDcmVhdGVTdGF0dXNXaW5kb3czMkEKQEAgLTgwLDcgKzgwLDcgQEAKICA3MyBzdGRjYWxsIEZyZWUobG9uZykgQ09NQ1RMMzJfRnJlZQogIDc0IHN0ZGNhbGwgR2V0U2l6ZShsb25nKSBDT01DVEwzMl9HZXRTaXplCiAgNzUgc3RkY2FsbCBJbWFnZUxpc3RfU2V0RHJhZ0N1cnNvckltYWdlKHB0ciBsb25nIGxvbmcgbG9uZykgSW1hZ2VMaXN0X1NldERyYWdDdXJzb3JJbWFnZQotIDc2IHN0dWIgSW1hZ2VMaXN0X1NldEZpbHRlcgorIDc2IHN0ZGNhbGwgSW1hZ2VMaXN0X1NldEZpbHRlcihwdHIgbG9uZyBsb25nKSBJbWFnZUxpc3RfU2V0RmlsdGVyCiAgNzcgc3RkY2FsbCBJbWFnZUxpc3RfU2V0SWNvblNpemUocHRyIGxvbmcgbG9uZykgSW1hZ2VMaXN0X1NldEljb25TaXplCiAgNzggc3RkY2FsbCBJbWFnZUxpc3RfU2V0SW1hZ2VDb3VudChwdHIgbG9uZykgSW1hZ2VMaXN0X1NldEltYWdlQ291bnQKICA3OSBzdGRjYWxsIEltYWdlTGlzdF9TZXRPdmVybGF5SW1hZ2UocHRyIGxvbmcgbG9uZykgSW1hZ2VMaXN0X1NldE92ZXJsYXlJbWFnZQpAQCAtMTMzLDE4ICsxMzMsMTggQEAKIDMzNyBzdHViIERQQV9EZWxldGVBbGxQdHJzCiAzMzggc3R1YiBEUEFfU29ydAogMzM5IHN0dWIgRFBBX1NlYXJjaAotMzQwIHN0dWIgRFBBX0NyZWF0ZUV4Ci0zNDEgc3R1YiBTZW5kTm90aWZ5CiszNDAgc3RkY2FsbCBEUEFfQ3JlYXRlRXgobG9uZyBsb25nKSBEUEFfQ3JlYXRlRXgKKzM0MSBzdGRjYWxsIFNlbmROb3RpZnkobG9uZyBsb25nIGxvbmcgbG9uZykgQ09NQ1RMMzJfU2VuZE5vdGlmeQogMzQyIHN0dWIgU2VuZE5vdGlmeUV4CiAKLTM1MCBzdGRjYWxsIFN0ckNockEobG9uZyBsb25nKSBDT01DVEwzMl9TdHJDaHJBCi0zNTEgc3R1YiBTdHJSQ2hyCiszNTAgc3RkY2FsbCBTdHJDaHJBKHN0ciBzdHIpIENPTUNUTDMyX1N0ckNockEKKzM1MSBzdHViIFN0clJDaHJBCiAzNTIgc3R1YiBTdHJDbXBOQQogMzUzIHN0dWIgU3RyQ21wTklBCiAzNTQgc3R1YiBTdHJTdHJBCi0zNTUgc3R1YiBTdHJTdHJJQQorMzU1IHN0ZGNhbGwgU3RyU3RySUEoc3RyIHN0cikgQ09NQ1RMMzJfU3RyU3RySUEKIDM1NiBzdHViIFN0ckNTcG5BCi0zNTcgc3R1YiBTdHJUb0ludEEKKzM1NyBzdGRjYWxsIFN0clRvSW50QShzdHIpIENPTUNUTDMyX1N0clRvSW50QQogMzU4IHN0dWIgU3RyQ2hyVwogMzU5IHN0dWIgU3RyUkNoclcKIDM2MCBzdHViIFN0ckNtcE5XCmRpZmYgLS1naXQgYS9yZWxheTMyL2dkaTMyLnNwZWMgYi9yZWxheTMyL2dkaTMyLnNwZWMKaW5kZXggNTc2ZWNiNC4uOGYxMWM5YyAxMDA2NDQKLS0tIGEvcmVsYXkzMi9nZGkzMi5zcGVjCisrKyBiL3JlbGF5MzIvZ2RpMzIuc3BlYwpAQCAtNDQsMTIgKzQ0LDEwIEBACiAgNDAgc3RkY2FsbCBDcmVhdGVFbGxpcHRpY1JnbkluZGlyZWN0KHB0cikgQ3JlYXRlRWxsaXB0aWNSZ25JbmRpcmVjdDMyCiAgNDEgc3RkY2FsbCBDcmVhdGVFbmhNZXRhRmlsZUEobG9uZyBwdHIgcHRyIHB0cikgQ3JlYXRlRW5oTWV0YUZpbGUzMkEKICA0MiBzdHViIENyZWF0ZUVuaE1ldGFGaWxlVwotIDQzIHN0ZGNhbGwgQ3JlYXRlRm9udEEobG9uZyBsb25nIGxvbmcgbG9uZyBsb25nIGxvbmcgbG9uZyBsb25nCi0gICAgICAgICAgICAgICAgICAgICAgICBsb25nIGxvbmcgbG9uZyBsb25nIGxvbmcgc3RyKSBDcmVhdGVGb250MzJBCisgNDMgc3RkY2FsbCBDcmVhdGVGb250QShsb25nIGxvbmcgbG9uZyBsb25nIGxvbmcgbG9uZyBsb25nIGxvbmcgbG9uZyBsb25nIGxvbmcgbG9uZyBsb25nIHN0cikgQ3JlYXRlRm9udDMyQQogIDQ0IHN0ZGNhbGwgQ3JlYXRlRm9udEluZGlyZWN0QShwdHIpIENyZWF0ZUZvbnRJbmRpcmVjdDMyQQogIDQ1IHN0ZGNhbGwgQ3JlYXRlRm9udEluZGlyZWN0VyhwdHIpIENyZWF0ZUZvbnRJbmRpcmVjdDMyVwotIDQ2IHN0ZGNhbGwgQ3JlYXRlRm9udFcobG9uZyBsb25nIGxvbmcgbG9uZyBsb25nIGxvbmcgbG9uZyBsb25nCi0gICAgICAgICAgICAgICAgICAgICAgICBsb25nIGxvbmcgbG9uZyBsb25nIGxvbmcgd3N0cikgQ3JlYXRlRm9udDMyVworIDQ2IHN0ZGNhbGwgQ3JlYXRlRm9udFcobG9uZyBsb25nIGxvbmcgbG9uZyBsb25nIGxvbmcgbG9uZyBsb25nIGxvbmcgbG9uZyBsb25nIGxvbmcgbG9uZyB3c3RyKSBDcmVhdGVGb250MzJXCiAgNDcgc3RkY2FsbCBDcmVhdGVIYWxmdG9uZVBhbGV0dGUobG9uZykgQ3JlYXRlSGFsZnRvbmVQYWxldHRlCiAgNDggc3RkY2FsbCBDcmVhdGVIYXRjaEJydXNoKGxvbmcgbG9uZykgQ3JlYXRlSGF0Y2hCcnVzaDMyCiAgNDkgc3RkY2FsbCBDcmVhdGVJQ0Eoc3RyIHN0ciBzdHIgcHRyKSBDcmVhdGVJQzMyQQpAQCAtNjQsOCArNjIsNyBAQAogIDU4IHN0ZGNhbGwgQ3JlYXRlUG9seWdvblJnbihwdHIgbG9uZyBsb25nKSBDcmVhdGVQb2x5Z29uUmduMzIKICA1OSBzdGRjYWxsIENyZWF0ZVJlY3RSZ24obG9uZyBsb25nIGxvbmcgbG9uZykgQ3JlYXRlUmVjdFJnbjMyCiAgNjAgc3RkY2FsbCBDcmVhdGVSZWN0UmduSW5kaXJlY3QocHRyKSBDcmVhdGVSZWN0UmduSW5kaXJlY3QzMgotIDYxIHN0ZGNhbGwgQ3JlYXRlUm91bmRSZWN0UmduKGxvbmcgbG9uZyBsb25nIGxvbmcgbG9uZyBsb25nKQotICAgICAgICAgICAgIENyZWF0ZVJvdW5kUmVjdFJnbjMyCisgNjEgc3RkY2FsbCBDcmVhdGVSb3VuZFJlY3RSZ24obG9uZyBsb25nIGxvbmcgbG9uZyBsb25nIGxvbmcpIENyZWF0ZVJvdW5kUmVjdFJnbjMyCiAgNjIgc3RkY2FsbCBDcmVhdGVTY2FsYWJsZUZvbnRSZXNvdXJjZUEobG9uZyBzdHIgc3RyIHN0cikgQ3JlYXRlU2NhbGFibGVGb250UmVzb3VyY2UzMkEKICA2MyBzdGRjYWxsIENyZWF0ZVNjYWxhYmxlRm9udFJlc291cmNlVyhsb25nIHdzdHIgd3N0ciB3c3RyKSBDcmVhdGVTY2FsYWJsZUZvbnRSZXNvdXJjZTMyVwogIDY0IHN0ZGNhbGwgQ3JlYXRlU29saWRCcnVzaChsb25nKSBDcmVhdGVTb2xpZEJydXNoMzIKQEAgLTE2NCw4ICsxNjEsOCBAQAogMTU3IHN0dWIgR2V0Q2hhcldpZHRoRmxvYXRXCiAxNTggc3RkY2FsbCBHZXRDaGFyV2lkdGhXKGxvbmcgbG9uZyBsb25nIGxvbmcpIEdldENoYXJXaWR0aDMyVwogMTU5IHN0dWIgR2V0Q2hhcldpZHRoV09XCi0xNjAgc3R1YiBHZXRDaGFyYWN0ZXJQbGFjZW1lbnRBCi0xNjEgc3R1YiBHZXRDaGFyYWN0ZXJQbGFjZW1lbnRXCisxNjAgc3RkY2FsbCBHZXRDaGFyYWN0ZXJQbGFjZW1lbnRBKGxvbmcgc3RyIGxvbmcgbG9uZyBwdHIgbG9uZykgR2V0Q2hhcmFjdGVyUGxhY2VtZW50MzJBCisxNjEgc3RkY2FsbCBHZXRDaGFyYWN0ZXJQbGFjZW1lbnRXKGxvbmcgd3N0ciBsb25nIGxvbmcgcHRyIGxvbmcpIEdldENoYXJhY3RlclBsYWNlbWVudDMyVwogMTYyIHN0ZGNhbGwgR2V0Q2xpcEJveChsb25nIHB0cikgR2V0Q2xpcEJveDMyCiAxNjMgc3RkY2FsbCBHZXRDbGlwUmduKGxvbmcgbG9uZykgR2V0Q2xpcFJnbjMyCiAxNjQgc3R1YiBHZXRDb2xvckFkanVzdG1lbnQKQEAgLTE4MSw3ICsxNzgsNyBAQAogMTc0IHN0ZGNhbGwgR2V0RW5oTWV0YUZpbGVBKHB0cikgR2V0RW5oTWV0YUZpbGUzMkEKIDE3NSBzdGRjYWxsIEdldEVuaE1ldGFGaWxlQml0cyhsb25nIGxvbmcgcHRyKSBHZXRFbmhNZXRhRmlsZUJpdHMKIDE3NiBzdGRjYWxsIEdldEVuaE1ldGFGaWxlRGVzY3JpcHRpb25BKGxvbmcgbG9uZyBwdHIpIEdldEVuaE1ldGFGaWxlRGVzY3JpcHRpb24zMkEKLTE3NyBzdHViIEdldEVuaE1ldGFGaWxlRGVzY3JpcHRpb25XCisxNzcgc3RkY2FsbCBHZXRFbmhNZXRhRmlsZURlc2NyaXB0aW9uVyhsb25nIGxvbmcgcHRyKSBHZXRFbmhNZXRhRmlsZURlc2NyaXB0aW9uMzJXCiAxNzggc3RkY2FsbCBHZXRFbmhNZXRhRmlsZUhlYWRlcihsb25nIGxvbmcgcHRyKSBHZXRFbmhNZXRhRmlsZUhlYWRlcgogMTc5IHN0dWIgR2V0RW5oTWV0YUZpbGVQYWxldHRlRW50cmllcwogMTgwIHN0dWIgR2V0RW5oTWV0YUZpbGVXCkBAIC0yMTksNyArMjE2LDcgQEAKIDIxMiBzdGRjYWxsIEdldFBpeGVsRm9ybWF0KGxvbmcpIEdldFBpeGVsRm9ybWF0CiAyMTMgc3RkY2FsbCBHZXRQb2x5RmlsbE1vZGUobG9uZykgR2V0UG9seUZpbGxNb2RlMzIKIDIxNCBzdGRjYWxsIEdldFJPUDIobG9uZykgR2V0Uk9QMjMyCi0yMTUgc3R1YiBHZXRSYW5kb21SZ24KKzIxNSBzdGRjYWxsIEdldFJhbmRvbVJnbihsb25nIGxvbmcgbG9uZykgR2V0UmFuZG9tUmduCiAyMTYgc3RkY2FsbCBHZXRSYXN0ZXJpemVyQ2FwcyhwdHIgbG9uZykgR2V0UmFzdGVyaXplckNhcHMzMgogMjE3IHN0ZGNhbGwgR2V0UmVnaW9uRGF0YShsb25nIGxvbmcgcHRyKSBHZXRSZWdpb25EYXRhCiAyMTggc3RkY2FsbCBHZXRSZWxBYnMobG9uZykgR2V0UmVsQWJzMzIKQEAgLTI3Myw3ICsyNzAsNyBAQAogMjY2IHN0ZGNhbGwgUGxheU1ldGFGaWxlUmVjb3JkKGxvbmcgcHRyIHB0ciBsb25nKSBQbGF5TWV0YUZpbGVSZWNvcmQzMgogMjY3IHN0dWIgUGxnQmx0CiAyNjggc3RkY2FsbCBQb2x5QmV6aWVyKGxvbmcgcHRyIGxvbmcpIFBvbHlCZXppZXIzMgotMjY5IHN0dWIgUG9seUJlemllclRvCisyNjkgc3RkY2FsbCBQb2x5QmV6aWVyVG8obG9uZyBwdHIgbG9uZykgUG9seUJlemllclRvMzIKIDI3MCBzdHViIFBvbHlEcmF3CiAyNzEgc3RkY2FsbCBQb2x5UG9seWdvbihsb25nIHB0ciBwdHIgbG9uZykgUG9seVBvbHlnb24zMgogMjcyIHN0ZGNhbGwgUG9seVBvbHlsaW5lKGxvbmcgcHRyIHB0ciBsb25nKSBQb2x5UG9seWxpbmUzMgpAQCAtMzE3LDggKzMxNCw3IEBACiAzMTAgc3R1YiBTZXRDb2xvclNwYWNlCiAzMTEgc3RkY2FsbCBTZXRESUJDb2xvclRhYmxlKGxvbmcgbG9uZyBsb25nIHB0cikgU2V0RElCQ29sb3JUYWJsZTMyCiAzMTIgc3RkY2FsbCBTZXRESUJpdHMobG9uZyBsb25nIGxvbmcgbG9uZyBwdHIgcHRyIGxvbmcpIFNldERJQml0czMyCi0zMTMgc3RkY2FsbCBTZXRESUJpdHNUb0RldmljZShsb25nIGxvbmcgbG9uZyBsb25nIGxvbmcgbG9uZyBsb25nIGxvbmcgbG9uZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0ciBwdHIgbG9uZykgU2V0RElCaXRzVG9EZXZpY2UzMgorMzEzIHN0ZGNhbGwgU2V0RElCaXRzVG9EZXZpY2UobG9uZyBsb25nIGxvbmcgbG9uZyBsb25nIGxvbmcgbG9uZyBsb25nIGxvbmcgcHRyIHB0ciBsb25nKSBTZXRESUJpdHNUb0RldmljZTMyCiAzMTQgc3R1YiBTZXREZXZpY2VHYW1tYVJhbXAKIDMxNSBzdGRjYWxsIFNldEVuaE1ldGFGaWxlQml0cyhsb25nIHB0cikgU2V0RW5oTWV0YUZpbGVCaXRzCiAzMTYgc3R1YiBTZXRGb250RW51bWVyYXRpb24KQEAgLTM1NSwxMCArMzUxLDggQEAKIDM0NyBzdHViIFN0YXJ0RG9jQQogMzQ4IHN0dWIgU3RhcnREb2NXCiAzNDkgc3R1YiBTdGFydFBhZ2UKLTM1MCBzdGRjYWxsIFN0cmV0Y2hCbHQobG9uZyBsb25nIGxvbmcgbG9uZyBsb25nIGxvbmcgbG9uZyBsb25nIGxvbmcgbG9uZyBsb25nKQotICAgICAgICAgICAgU3RyZXRjaEJsdDMyCi0zNTEgc3RkY2FsbCBTdHJldGNoRElCaXRzKGxvbmcgbG9uZyBsb25nIGxvbmcgbG9uZyBsb25nIGxvbmcgbG9uZyBsb25nCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHB0ciBwdHIgbG9uZyBsb25nKSBTdHJldGNoRElCaXRzMzIKKzM1MCBzdGRjYWxsIFN0cmV0Y2hCbHQobG9uZyBsb25nIGxvbmcgbG9uZyBsb25nIGxvbmcgbG9uZyBsb25nIGxvbmcgbG9uZyBsb25nKSBTdHJldGNoQmx0MzIKKzM1MSBzdGRjYWxsIFN0cmV0Y2hESUJpdHMobG9uZyBsb25nIGxvbmcgbG9uZyBsb25nIGxvbmcgbG9uZyBsb25nIGxvbmcgcHRyIHB0ciBsb25nIGxvbmcpIFN0cmV0Y2hESUJpdHMzMgogMzUyIHN0dWIgU3Ryb2tlQW5kRmlsbFBhdGgKIDM1MyBzdHViIFN0cm9rZVBhdGgKIDM1NCBzdGRjYWxsIFN3YXBCdWZmZXJzKGxvbmcpIFN3YXBCdWZmZXJzCmRpZmYgLS1naXQgYS9yZWxheTMyL2tlcm5lbDMyLnNwZWMgYi9yZWxheTMyL2tlcm5lbDMyLnNwZWMKaW5kZXggMmUzNTY0Mi4uNjVmMmRkOCAxMDA2NDQKLS0tIGEvcmVsYXkzMi9rZXJuZWwzMi5zcGVjCisrKyBiL3JlbGF5MzIva2VybmVsMzIuc3BlYwpAQCAtNjI2LDcgKzYyNiw3IEBACiA2MDkgcmVnaXN0ZXIgU1VuTWFwTFNfSVBfRUJQXzM2KCkgU1VuTWFwTFNfSVBfRUJQXzM2CiA2MTAgcmVnaXN0ZXIgU1VuTWFwTFNfSVBfRUJQXzQwKCkgU1VuTWFwTFNfSVBfRUJQXzQwCiA2MTEgcmVnaXN0ZXIgU1VuTWFwTFNfSVBfRUJQXzgoKSBTVW5NYXBMU19JUF9FQlBfOAotNjEyIHN0dWIgU2Nyb2xsQ29uc29sZVNjcmVlbkJ1ZmZlckEKKzYxMiBzdGRjYWxsIFNjcm9sbENvbnNvbGVTY3JlZW5CdWZmZXJBKGxvbmcgcHRyIHB0ciBwdHIgcHRyKSBTY3JvbGxDb25zb2xlU2NyZWVuQnVmZmVyCiA2MTMgc3R1YiBTY3JvbGxDb25zb2xlU2NyZWVuQnVmZmVyVwogNjE0IHN0ZGNhbGwgU2VhcmNoUGF0aEEoc3RyIHN0ciBzdHIgbG9uZyBwdHIgcHRyKSBTZWFyY2hQYXRoMzJBCiA2MTUgc3RkY2FsbCBTZWFyY2hQYXRoVyh3c3RyIHdzdHIgd3N0ciBsb25nIHB0ciBwdHIpIFNlYXJjaFBhdGgzMlcKQEAgLTY5NCwxMSArNjk0LDExIEBACiA2Nzcgc3RkY2FsbCBTZXR1cENvbW0obG9uZyBsb25nIGxvbmcpIFNldHVwQ29tbQogNjc4IHN0ZGNhbGwgU2l6ZW9mUmVzb3VyY2UobG9uZyBsb25nKSBTaXplb2ZSZXNvdXJjZTMyCiA2Nzkgc3RkY2FsbCBTbGVlcChsb25nKSBTbGVlcAotNjgwIHN0dWIgU2xlZXBFeAorNjgwIHN0ZGNhbGwgU2xlZXBFeChsb25nIGxvbmcpIFNsZWVwRXgKIDY4MSBzdGRjYWxsIFN1c3BlbmRUaHJlYWQobG9uZykgU3VzcGVuZFRocmVhZAogNjgyIHN0ZGNhbGwgU3lzdGVtVGltZVRvRmlsZVRpbWUocHRyIHB0cikgU3lzdGVtVGltZVRvRmlsZVRpbWUKIDY4MyBzdHViIFN5c3RlbVRpbWVUb1R6U3BlY2lmaWNMb2NhbFRpbWUKLTY4NCBzdHViIFRlcm1pbmF0ZVByb2Nlc3MKKzY4NCBzdGRjYWxsIFRlcm1pbmF0ZVByb2Nlc3MocHRyIGxvbmcpIFRlcm1pbmF0ZVByb2Nlc3MKIDY4NSBzdGRjYWxsIFRlcm1pbmF0ZVRocmVhZChsb25nIGxvbmcpIFRlcm1pbmF0ZVRocmVhZAogNjg2IHN0dWIgVGhyZWFkMzJGaXJzdAogNjg3IHN0dWIgVGhyZWFkMzJOZXh0CmRpZmYgLS1naXQgYS9yZWxheTMyL21wci5zcGVjIGIvcmVsYXkzMi9tcHIuc3BlYwppbmRleCBhYTgzYzM5Li43NjBmMWRlIDEwMDY0NAotLS0gYS9yZWxheTMyL21wci5zcGVjCisrKyBiL3JlbGF5MzIvbXByLnNwZWMKQEAgLTI2LDEwICsyNiwxMCBAQAogMDAyMyBzdHViIE1QUl8yMwogMDAyNCBzdHViIE1QUl8yNAogMDAyNSBzdGRjYWxsIE1QUl8yNShzdHIgbG9uZykgX01QUl8yNQotMDAyNiBzdGRjYWxsIE11bHRpbmV0R2V0Q29ubmVjdGlvblBlcmZvcm1hbmNlQShwdHIgcHRyKSBNdWx0aW5ldEdldENvbm5lY3Rpb25QZXJmb3JtYW5jZTMyQQorCTAwMjYgc3RkY2FsbCBNdWx0aW5ldEdldENvbm5lY3Rpb25QZXJmb3JtYW5jZUEocHRyIHB0cikgTXVsdGluZXRHZXRDb25uZWN0aW9uUGVyZm9ybWFuY2UzMkEKIDAwMjcgc3R1YiBNdWx0aW5ldEdldENvbm5lY3Rpb25QZXJmb3JtYW5jZVcKLTAwMjggc3R1YiBNdWx0aW5ldEdldEVycm9yVGV4dEEKLTAwMjkgc3R1YiBNdWx0aW5ldEdldEVycm9yVGV4dFcKKzAwMjggc3RkY2FsbCBNdWx0aW5ldEdldEVycm9yVGV4dEEobG9uZyBwdHIgbG9uZylNdWx0aW5ldEdldEVycm9yVGV4dDMyQQorMDAyOSBzdGRjYWxsIE11bHRpbmV0R2V0RXJyb3JUZXh0Vyhsb25nIHB0ciBsb25nKU11bHRpbmV0R2V0RXJyb3JUZXh0MzJXCiAwMDMwIHN0dWIgTlBTQXV0aGVudGljYXRpb25EaWFsb2dBCiAwMDMxIHN0dWIgTlBTQ29weVN0cmluZ0EKIDAwMzIgc3R1YiBOUFNEZXZpY2VHZXROdW1iZXJBCkBAIC01OSw5ICs1OSw5IEBACiAwMDU2IHN0dWIgV05ldENhbmNlbENvbm5lY3Rpb25BCiAwMDU3IHN0dWIgV05ldENhbmNlbENvbm5lY3Rpb25XCiAwMDU4IHN0dWIgV05ldENsb3NlRW51bQotMDA1OSBzdHViIFdOZXRDb25uZWN0aW9uRGlhbG9nMUEKLTAwNjAgc3R1YiBXTmV0Q29ubmVjdGlvbkRpYWxvZzFXCi0wMDYxIHN0dWIgV05ldENvbm5lY3Rpb25EaWFsb2cKKzAwNTkgc3RkY2FsbCBXTmV0Q29ubmVjdGlvbkRpYWxvZzFBKHB0cikgV05ldENvbm5lY3Rpb25EaWFsb2cxXzMyQQorMDA2MCBzdGRjYWxsIFdOZXRDb25uZWN0aW9uRGlhbG9nMVcocHRyKSBXTmV0Q29ubmVjdGlvbkRpYWxvZzFfMzJXCiswMDYxIHN0ZGNhbGwgV05ldENvbm5lY3Rpb25EaWFsb2cxKGxvbmcgbG9uZykgV05ldENvbm5lY3Rpb25EaWFsb2cxXzMyCiAwMDYyIHN0dWIgV05ldERpc2Nvbm5lY3REaWFsb2cxQQogMDA2MyBzdHViIFdOZXREaXNjb25uZWN0RGlhbG9nMVcKIDAwNjQgc3R1YiBXTmV0RGlzY29ubmVjdERpYWxvZwpkaWZmIC0tZ2l0IGEvcmVsYXkzMi9udGRsbC5zcGVjIGIvcmVsYXkzMi9udGRsbC5zcGVjCmluZGV4IGFhZjJkNDEuLmNkNWRhYWEgMTAwNjQ0Ci0tLSBhL3JlbGF5MzIvbnRkbGwuc3BlYworKysgYi9yZWxheTMyL250ZGxsLnNwZWMKQEAgLTM3MSw3ICszNzEsNyBAQAogMzY4IHN0dWIgUnRsRmluZFNldEJpdHMKIDM2OSBzdHViIFJ0bEZpbmRTZXRCaXRzQW5kQ2xlYXIKIDM3MCBzdGRjYWxsIFJ0bEZpcnN0RnJlZUFjZShwdHIgcHRyKSBSdGxGaXJzdEZyZWVBY2UKLTM3MSBzdHViIFJ0bEZvcm1hdEN1cnJlbnRVc2VyS2V5UGF0aAorMzcxIHN0ZGNhbGwgUnRsRm9ybWF0Q3VycmVudFVzZXJLZXlQYXRoKCkgUnRsRm9ybWF0Q3VycmVudFVzZXJLZXlQYXRoCiAzNzIgc3R1YiBSdGxGb3JtYXRNZXNzYWdlCiAzNzMgc3RkY2FsbCBSdGxGcmVlQW5zaVN0cmluZyhsb25nKSBSdGxGcmVlQW5zaVN0cmluZwogMzc0IHN0ZGNhbGwgUnRsRnJlZUhlYXAobG9uZyBsb25nIGxvbmcpIEhlYXBGcmVlCmRpZmYgLS1naXQgYS9yZWxheTMyL3NoZWxsMzIuc3BlYyBiL3JlbGF5MzIvc2hlbGwzMi5zcGVjCmluZGV4IDJiYjgxMjYuLjg5NGZmMjIgMTAwNjQ0Ci0tLSBhL3JlbGF5MzIvc2hlbGwzMi5zcGVjCisrKyBiL3JlbGF5MzIvc2hlbGwzMi5zcGVjCkBAIC0yLDI5NiArMiwzNzQgQEAKIHR5cGUJd2luMzIKIAogIyBGdW5jdGlvbnMgZXhwb3J0ZWQgYnkgdGhlIFdpbjk1IHNoZWxsMzIuZGxsIAotIyAodGhlc2UgbmVlZCB0byBoYXZlIHRoZXNlIGV4YWN0IG9yZGluYWxzLCBmb3Igc29tZSB3aW45NSBkbGxzIAotIyAgaW1wb3J0IHNoZWxsMzIuZGxsIGJ5IG9yZGluYWwpCisjICh0aGVzZSBuZWVkIHRvIGhhdmUgdGhlc2UgZXhhY3Qgb3JkaW5hbHMsIGZvciBzb21lIAorIyAgd2luOTUgYW5kIHdpbk5UIGRsbHMgaW1wb3J0IHNoZWxsMzIuZGxsIGJ5IG9yZGluYWwpCisjIFRoaXMgbGlzdCB3YXMgdXBkYXRlZCB0byBkbGwgdmVyc2lvbiA0LjcyCiAKLSAgIDIgc3RkY2FsbCBTSEVMTDMyXzIobG9uZyBsb25nIGxvbmcgbG9uZyBsb25nIGxvbmcpIFNIRUxMMzJfMgotICAgMyBzdHViIENoZWNrRXNjYXBlc0EKLSAgIDQgc3R1YiBTSEVMTDMyXzQKLSAgIDUgc3R1YiBTSEVMTDMyXzUKLSAgIDYgc3R1YiBDaGVja0VzY2FwZXNXCi0gICA3IHN0ZGNhbGwgQ29tbWFuZExpbmVUb0FyZ3ZXKHdzdHIgcHRyKSBDb21tYW5kTGluZVRvQXJndlcKLSAgIDggc3R1YiBDb250cm9sX0ZpbGxDYWNoZV9SdW5ETEwKLSAgMTIgc3RkY2FsbCBDb250cm9sX1J1bkRMTChsb25nIGxvbmcgbG9uZyBsb25nKSBDb250cm9sX1J1bkRMTAotICAxNCBzdGRjYWxsIERsbEdldENsYXNzT2JqZWN0KGxvbmcgbG9uZyBwdHIpIFNIRUxMMzJfRGxsR2V0Q2xhc3NPYmplY3QKLSAgMTUgc3R1YiBTSEVMTDMyXzE1Ci0gIDE2IHN0ZGNhbGwgU0hFTEwzMl8xNihwdHIpIFNIRUxMMzJfMTYKLSAgMTcgc3R1YiBTSEVMTDMyXzE3Ci0gIDE4IHN0ZGNhbGwgU0hFTEwzMl8xOChwdHIpIFNIRUxMMzJfMTgKLSAgMTkgc3R1YiBTSEVMTDMyXzE5Ci0gIDIwIHN0dWIgU0hFTEwzMl8yMAotICAyMSBzdHViIFNIRUxMMzJfMjEKLSAgMjIgc3R1YiBEb0Vudmlyb25tZW50U3Vic3RBCi0gIDIzIHN0dWIgU0hFTEwzMl8yMwotICAyNCBzdHViIFNIRUxMMzJfMjQKLSAgMjUgc3RkY2FsbCBTSEVMTDMyXzI1KHB0ciBwdHIpIFNIRUxMMzJfMjUKLSAgMjYgc3R1YiBTSEVMTDMyXzI2Ci0gIDI3IHN0dWIgU0hFTEwzMl8yNwotICAyOCBzdHViIFNIRUxMMzJfMjgKLSAgMjkgc3RkY2FsbCBTSEVMTDMyXzI5KHN0cikgU0hFTEwzMl8yOQotICAzMCBzdGRjYWxsIFNIRUxMMzJfMzAocHRyIGxvbmcpIFNIRUxMMzJfMzAKLSAgMzEgc3RkY2FsbCBTSEVMTDMyXzMxKHN0cikgU0hFTEwzMl8zMQotICAzMiBzdGRjYWxsIFNIRUxMMzJfMzIoc3RyKSBTSEVMTDMyXzMyCi0gIDMzIHN0ZGNhbGwgU0hFTEwzMl8zMyhzdHIpIFNIRUxMMzJfMzMKLSAgMzQgc3RkY2FsbCBTSEVMTDMyXzM0KHN0cikgU0hFTEwzMl8zNAotICAzNSBzdGRjYWxsIFNIRUxMMzJfMzUoc3RyKSBTSEVMTDMyXzM1Ci0gIDM2IHN0ZGNhbGwgU0hFTEwzMl8zNihzdHIgc3RyKSBTSEVMTDMyXzM2Ci0gIDM3IHN0ZGNhbGwgU0hFTEwzMl8zNyhwdHIgc3RyIHN0cikgU0hFTEwzMl8zNwotICAzOCBzdHViIERvRW52aXJvbm1lbnRTdWJzdFcKLSAgMzkgc3R1YiBTSEVMTDMyXzM5Ci0gIDQwIHN0dWIgU0hFTEwzMl80MAotICA0MSBzdGRjYWxsIERyYWdBY2NlcHRGaWxlcyhsb25nIGxvbmcpIERyYWdBY2NlcHRGaWxlcwotICA0MiBzdHViIERyYWdGaW5pc2gKLSAgNDMgc3R1YiBTSEVMTDMyXzQzCi0gIDQ0IHN0dWIgRHJhZ1F1ZXJ5RmlsZQotICA0NSBzdGRjYWxsIFNIRUxMMzJfNDUoc3RyKSBTSEVMTDMyXzQ1Ci0gIDQ2IHN0dWIgU0hFTEwzMl80NgotICA0NyBzdHViIFNIRUxMMzJfNDcKLSAgNDggc3R1YiBTSEVMTDMyXzQ4Ci0gIDQ5IHN0dWIgU0hFTEwzMl80OQotICA1MCBzdHViIERyYWdRdWVyeUZpbGVBCi0gIDUxIHN0ZGNhbGwgU0hFTEwzMl81MShzdHIgbG9uZyBsb25nKSBTSEVMTDMyXzUxCi0gIDUyIHN0ZGNhbGwgU0hFTEwzMl81MihzdHIpIFNIRUxMMzJfNTIKLSAgNTMgc3R1YiBEcmFnUXVlcnlGaWxlQW9yVwotICA1NCBzdHViIERyYWdRdWVyeUZpbGVXCi0gIDU1IHN0dWIgU0hFTEwzMl81NQotICA1NiBzdGRjYWxsIFNIRUxMMzJfNTYoc3RyKSBTSEVMTDMyXzU2Ci0gIDU3IHN0dWIgU0hFTEwzMl81NwotICA1OCBzdGRjYWxsIFNIRUxMMzJfNTgobG9uZyBsb25nIGxvbmcgbG9uZykgU0hFTEwzMl81OAotICA1OSBzdHViIFNIRUxMMzJfNTkKLSAgNjAgc3RkY2FsbCBTSEVMTDMyXzYwKGxvbmcpIFNIRUxMMzJfNjAKLSAgNjEgc3RkY2FsbCBTSEVMTDMyXzYxKGxvbmcgbG9uZyBsb25nIHN0ciBzdHIgbG9uZykgU0hFTEwzMl82MQotICA2MiBzdGRjYWxsIFNIRUxMMzJfNjIobG9uZyBsb25nIGxvbmcgbG9uZykgU0hFTEwzMl82MgotICA2MyBzdGRjYWxsIFNIRUxMMzJfNjMobG9uZyBsb25nIGxvbmcgbG9uZyBzdHIgc3RyIHN0cikgU0hFTEwzMl82MwotICA2NCBzdHViIFNIRUxMMzJfNjQKLSAgNjUgc3R1YiBTSEVMTDMyXzY1Ci0gIDY2IHN0dWIgU0hFTEwzMl82NgotICA2NyBzdHViIFNIRUxMMzJfNjcKLSAgNjggc3RkY2FsbCBTSEVMTDMyXzY4KGxvbmcgbG9uZyBsb25nKSBTSEVMTDMyXzY4Ci0gIDY5IHN0dWIgU0hFTEwzMl82OQotICA3MCBzdHViIFNIRUxMMzJfNzAKLSAgNzEgc3RkY2FsbCBTSEVMTDMyXzcxKHB0ciBwdHIpIFNIRUxMMzJfNzEKLSAgNzIgc3RkY2FsbCBTSEVMTDMyXzcyKHB0ciBwdHIgbG9uZykgU0hFTEwzMl83MgotICA3MyBzdHViIFNIRUxMMzJfNzMKLSAgNzQgc3R1YiBTSEVMTDMyXzc0Ci0gIDc1IHN0dWIgU0hFTEwzMl83NQotICA3NiBzdHViIERyYWdRdWVyeVBvaW50Ci0gIDc3IHN0ZGNhbGwgU0hFTEwzMl83Nyhsb25nIGxvbmcgbG9uZykgU0hFTEwzMl83NwotICA3OCBzdHViIFNIRUxMMzJfNzgKKyAgIDIgc3RkY2FsbCBTSENoYW5nZU5vdGlmeVJlZ2lzdGVyKGxvbmcgbG9uZyBsb25nIGxvbmcgbG9uZyBsb25nKSBTSENoYW5nZU5vdGlmeVJlZ2lzdGVyCisgICAzIHN0dWIgQ2hlY2tFc2NhcGVzQSAgICMgZXhwb3J0ZWQgYnkgbmFtZQorICAgNCBzdHViIFNIQ2hhbmdlTm90aWZ5RGVyZWdpc3RlcgorICAgNSBzdHViIFNIQ2hhbmdlTm90aWZ5VXBkYXRlRW50cnlMaXN0CisgICA2IHN0dWIgQ2hlY2tFc2NhcGVzVyAgICMgZXhwb3J0ZWQgYnkgbmFtZQorICAgNyBzdGRjYWxsIENvbW1hbmRMaW5lVG9Bcmd2Vyh3c3RyIHB0cikgQ29tbWFuZExpbmVUb0FyZ3ZXICAgIyBleHBvcnRlZCBieSBuYW1lCisgICA4IHN0dWIgQ29udHJvbF9GaWxsQ2FjaGVfUnVuRExMICAgIyBleHBvcnRlZCBieSBuYW1lCisgICA5IHN0dWIgUGlmTWdyX09wZW5Qcm9wZXJ0aWVzCisgIDEwIHN0dWIgUGlmTWdyX0dldFByb3BlcnRpZXMKKyAgMTEgc3R1YiBQaWZNZ3JfU2V0UHJvcGVydGllcworICAxMiBzdHViIENvbnRyb2xfRmlsbENhY2hlX1J1bkRMTEEgICAjIGV4cG9ydGVkIGJ5IG5hbWUKKyAgMTMgc3R1YiBQaWZNZ3JfQ2xvc2VQcm9wZXJ0aWVzCisgIDE0IHN0dWIgQ29udHJvbF9GaWxsQ2FjaGVfUnVuRExMVyAgICMgZXhwb3J0ZWQgYnkgbmFtZQorICAxNSBzdGRjYWxsIElMR2V0RGlzcGxheU5hbWUocHRyIHB0cikgSUxHZXREaXNwbGF5TmFtZQorICAxNiBzdGRjYWxsIElMRmluZExhc3RJRChwdHIpIElMRmluZExhc3RJRAorICAxNyBzdHViIElMUmVtb3ZlTGFzdElECisgIDE4IHN0ZGNhbGwgSUxDbG9uZShwdHIpIElMQ2xvbmUKKyAgMTkgc3R1YiBJTENsb25lRmlyc3QKKyAgMjAgc3R1YiBJTEdsb2JhbENsb25lCisgIDIxIHN0dWIgSUxJc0VxdWFsCisgIDIyIHN0ZGNhbGwgQ29udHJvbF9SdW5ETEwobG9uZyBsb25nIGxvbmcgbG9uZykgQ29udHJvbF9SdW5ETEwgIyBleHBvcnRlZCBieSBuYW1lCisgIDIzIHN0dWIgSUxJc1BhcmVudAorICAyNCBzdHViIElMRmluZENoaWxkCisgIDI1IHN0ZGNhbGwgSUxDb21iaW5lKHB0ciBwdHIpIElMQ29tYmluZQorICAyNiBzdHViIElMTG9hZEZyb21TdHJlYW0KKyAgMjcgc3R1YiBJTFNhdmVUb1N0cmVhbQorICAyOCBzdHViIFNISUxDcmVhdGVGcm9tUGF0aAorICAyOSBzdGRjYWxsIFBhdGhJc1Jvb3Qoc3RyKSBQYXRoSXNSb290CisgIDMwIHN0ZGNhbGwgUGF0aEJ1aWxkUm9vdChwdHIgbG9uZykgUGF0aEJ1aWxkUm9vdAorICAzMSBzdGRjYWxsIFBhdGhGaW5kRXh0ZW5zaW9uKHN0cikgUGF0aEZpbmRFeHRlbnNpb24KKyAgMzIgc3RkY2FsbCBQYXRoQWRkQmFja3NsYXNoKHN0cikgUGF0aEFkZEJhY2tzbGFzaAorICAzMyBzdGRjYWxsIFBhdGhSZW1vdmVCbGFua3Moc3RyKSBQYXRoUmVtb3ZlQmxhbmtzCisgIDM0IHN0ZGNhbGwgUGF0aEZpbmRGaWxlbmFtZShzdHIpIFBhdGhGaW5kRmlsZW5hbWUKKyAgMzUgc3RkY2FsbCBQYXRoUmVtb3ZlRmlsZVNwZWMoc3RyKSBQYXRoUmVtb3ZlRmlsZVNwZWMKKyAgMzYgc3RkY2FsbCBQYXRoQXBwZW5kKHN0ciBzdHIpIFBhdGhBcHBlbmQKKyAgMzcgc3RkY2FsbCBQYXRoQ29tYmluZShwdHIgc3RyIHN0cikgUGF0aENvbWJpbmUKKyAgMzggc3R1YiBQYXRoU3RyaXBQYXRoCisgIDM5IHN0ZGNhbGwgUGF0aElzVU5DKHN0cikgUGF0aElzVU5DCisgIDQwIHN0dWIgUGF0aElzUmVsYXRpdmUKKyAgNDEgc3R1YiBDb250cm9sX1J1bkRMTEEgICAjIGV4cG9ydGVkIGJ5IG5hbWUKKyAgNDIgc3R1YiBDb250cm9sX1J1bkRMTFcgICAjIGV4cG9ydGVkIGJ5IG5hbWUKKyAgNDMgc3R1YiBQYXRoSXNFeGUKKyAgNDQgc3R1YiBEb0Vudmlyb25tZW50U3Vic3RBICAgIyBleHBvcnRlZCBieSBuYW1lCisgIDQ1IHN0ZGNhbGwgUGF0aEZpbGVFeGlzdHMoc3RyKSBQYXRoRmlsZUV4aXN0cworICA0NiBzdHViIFBhdGhNYXRjaFNwZWMKKyAgNDcgc3R1YiBQYXRoTWFrZVVuaXF1ZU5hbWUKKyAgNDggc3R1YiBQYXRoU2V0RGxnSXRlbVBhdGgKKyAgNDkgc3R1YiBQYXRoUXVhbGlmeQorICA1MCBzdHViIFBhdGhTdHJpcFRvUm9vdAorICA1MSBzdGRjYWxsIFBhdGhSZXNvbHZlKHN0ciBsb25nIGxvbmcpIFBhdGhSZXNvbHZlCisgIDUyIHN0ZGNhbGwgUGF0aEdldEFyZ3Moc3RyKSBQYXRoR2V0QXJncworICA1MyBzdHViIERvRW52aXJvbm1lbnRTdWJzdFcgICAjIGV4cG9ydGVkIGJ5IG5hbWUKKyAgNTQgc3RkY2FsbCBEcmFnQWNjZXB0RmlsZXMobG9uZyBsb25nKSBEcmFnQWNjZXB0RmlsZXMgICAjIGV4cG9ydGVkIGJ5IG5hbWUKKyAgNTUgc3R1YiBQYXRoUXVvdGVTcGFjZXMKKyAgNTYgc3RkY2FsbCBQYXRoVW5xdW90ZVNwYWNlcyhzdHIpIFBhdGhVbnF1b3RlU3BhY2VzCisgIDU3IHN0dWIgUGF0aEdldERyaXZlTnVtYmVyCisgIDU4IHN0ZGNhbGwgUGFyc2VGaWVsZChzdHIgbG9uZyBzdHIgbG9uZykgUGFyc2VGaWVsZAorICA1OSBzdHViIFJlc3RhcnREaWFsb2cKKyAgNjAgc3RkY2FsbCBFeGl0V2luZG93c0RpYWxvZyhsb25nKSBFeGl0V2luZG93c0RpYWxvZworICA2MSBzdGRjYWxsIFJ1bkZpbGVEbGcobG9uZyBsb25nIGxvbmcgc3RyIHN0ciBsb25nKSBSdW5GaWxlRGxnCisgIDYyIHN0ZGNhbGwgUGlja0ljb25EbGcobG9uZyBsb25nIGxvbmcgbG9uZykgUGlja0ljb25EbGcKKyAgNjMgc3RkY2FsbCBHZXRGaWxlTmFtZUZyb21Ccm93c2UobG9uZyBsb25nIGxvbmcgbG9uZyBzdHIgc3RyIHN0cikgR2V0RmlsZU5hbWVGcm9tQnJvd3NlCisgIDY0IHN0dWIgRHJpdmVUeXBlCisgIDY1IHN0dWIgSW52YWxpZGF0ZURyaXZlVHlwZQorICA2NiBzdHViIElzTmV0RHJpdmUKKyAgNjcgc3R1YiBTaGVsbF9NZXJnZU1lbnVzCisgIDY4IHN0ZGNhbGwgU0hHZXRTZXR0aW5ncyhsb25nIGxvbmcgbG9uZykgU0hHZXRTZXR0aW5ncworICA2OSBzdHViIFNIR2V0TmV0UmVzb3VyY2UKKyAgNzAgc3R1YiBTSENyZWF0ZURlZkNsYXNzT2JqZWN0CisgIDcxIHN0ZGNhbGwgU2hlbGxfR2V0SW1hZ2VMaXN0KHB0ciBwdHIpIFNoZWxsX0dldEltYWdlTGlzdAorICA3MiBzdGRjYWxsIFNoZWxsX0dldENhY2hlZEltYWdlSW5kZXgocHRyIHB0ciBsb25nKSBTaGVsbF9HZXRDYWNoZWRJbWFnZUluZGV4CisgIDczIHN0dWIgU0hTaGVsbEZvbGRlclZpZXdfTWVzc2FnZQorICA3NCBzdHViIFNIQ3JlYXRlU3RkRW51bUZtdEV0YworICA3NSBzdGRjYWxsIFBhdGhZZXRBbm90aGVyTWFrZVVuaXF1ZU5hbWUocHRyIHB0cikgUGF0aFlldEFub3RoZXJNYWtlVW5pcXVlTmFtZQorICA3NiBzdHViIERyYWdRdWVyeUluZm8KKyAgNzcgc3RkY2FsbCBTSE1hcFBJRExUb1N5c3RlbUltYWdlTGlzdEluZGV4KGxvbmcgbG9uZyBsb25nKSBTSE1hcFBJRExUb1N5c3RlbUltYWdlTGlzdEluZGV4CisgIDc4IHN0dWIgT2xlU3RyVG9TdHJOQDE2CisjICA3OSBzdHViIFN0clRvT2xlU3RyTkAxNgogICA3OSBzdGRjYWxsIFNIRUxMMzJfNzkoc3RyIHB0cikgU0hFTEwzMl83OQotICA4MCBzdHViIER1cGxpY2F0ZUljb24KLSAgODEgc3R1YiBTSEVMTDMyXzgxCi0gIDgyIHN0ZGNhbGwgRXh0cmFjdEFzc29jaWF0ZWRJY29uQShsb25nIHB0ciBsb25nKSBFeHRyYWN0QXNzb2NpYXRlZEljb24zMkEKLSAgODMgc3R1YiBTSEVMTDMyXzgzCi0gIDg0IHN0dWIgU0hFTEwzMl84NAotICA4NSBzdGRjYWxsIFNIRUxMMzJfODUobG9uZyBsb25nIGxvbmcgbG9uZykgU0hFTEwzMl84NQotICA4NiBzdGRjYWxsIFNIRUxMMzJfODYobG9uZyBwdHIpIFNIRUxMMzJfODYKLSAgODcgc3RkY2FsbCBTSEVMTDMyXzg3KGxvbmcpIFNIRUxMMzJfODcKLSAgODggc3R1YiBTSEVMTDMyXzg4Ci0gIDg5IHN0ZGNhbGwgU0hFTEwzMl84OShsb25nIGxvbmcgbG9uZykgU0hFTEwzMl84OQotICA5MCBzdHViIFNIRUxMMzJfOTAKLSAgOTEgc3R1YiBTSEVMTDMyXzkxCi0gIDkyIHN0dWIgU0hFTEwzMl85MgotICA5MyBzdHViIFNIRUxMMzJfOTMKLSAgOTQgc3R1YiBTSEVMTDMyXzk0Ci0gIDk1IHN0dWIgU0hFTEwzMl85NQotICA5NiBzdHViIFNIRUxMMzJfOTYKLSAgOTcgc3R1YiBTSEVMTDMyXzk3Ci0gIDk4IHN0dWIgU0hFTEwzMl85OAotICA5OSBzdHViIFNIRUxMMzJfOTkKLSAxMDAgc3RkY2FsbCBTSEVMTDMyXzEwMChsb25nKSBTSEVMTDMyXzEwMAotIDEwMSBzdHViIEV4dHJhY3RBc3NvY2lhdGVkSWNvbkV4QQotIDEwMiBzdGRjYWxsIFNIRUxMMzJfMTAyKHB0ciBwdHIgbG9uZyBwdHIgcHRyKSBTSEVMTDMyXzEwMgotIDEwMyBzdHViIFNIRUxMMzJfMTAzCi0gMTA0IHN0dWIgU0hFTEwzMl8xMDQKLSAxMDUgc3R1YiBTSEVMTDMyXzEwNQotIDEwNiBzdHViIFNIRUxMMzJfMTA2Ci0gMTA3IHN0dWIgU0hFTEwzMl8xMDcKLSAxMDggc3R1YiBTSEVMTDMyXzEwOAotIDEwOSBzdHViIFNIRUxMMzJfMTA5Ci0gMTEwIHN0dWIgU0hFTEwzMl8xMTAKLSAxMTEgc3R1YiBTSEVMTDMyXzExMQotIDExMiBzdHViIFNIRUxMMzJfMTEyCi0gMTEzIHN0dWIgU0hFTEwzMl8xMTMKLSAxMTQgc3R1YiBTSEVMTDMyXzExNAotIDExNSBzdHViIFNIRUxMMzJfMTE1Ci0gMTE2IHN0dWIgU0hFTEwzMl8xMTYKLSAxMTcgc3R1YiBTSEVMTDMyXzExNwotIDExOCBzdHViIFNIRUxMMzJfMTE4Ci0gMTE5IHN0ZGNhbGwgU0hFTEwzMl8xMTkocHRyKSBTSEVMTDMyXzExOQotIDEyMCBzdHViIFNIRUxMMzJfMTIwCi0gMTIxIHN0dWIgU0hFTEwzMl8xMjEKLSAxMjIgc3R1YiBTSEVMTDMyXzEyMgotIDEyMyBzdHViIFNIRUxMMzJfMTIzCi0gMTI0IHN0dWIgRXh0cmFjdEFzc29jaWF0ZWRJY29uRXhXCi0gMTI1IHN0dWIgRXh0cmFjdEFzc29jaWF0ZWRJY29uVwotIDEyNiBzdHViIFNIRUxMMzJfMTI2Ci0gMTI3IHN0dWIgU0hFTEwzMl8xMjcKKyAgODAgc3R1YiBEcmFnRmluaXNoICAgIyBleHBvcnRlZCBieSBuYW1lCisgIDgxIHN0dWIgRHJhZ1F1ZXJ5RmlsZSAgICMgZXhwb3J0ZWQgYnkgbmFtZQorICA4MiBzdHViIERyYWdRdWVyeUZpbGVBICAgIyBleHBvcnRlZCBieSBuYW1lCisgIDgzIHN0dWIgQ0lETERhdGFfQ3JlYXRlRnJvbUlEQXJyYXkKKyAgODQgc3R1YiBTSElzQmFkSW50ZXJmYWNlUHRyCisgIDg1IHN0ZGNhbGwgT3BlblJlZ1N0cmVhbShsb25nIGxvbmcgbG9uZyBsb25nKSBPcGVuUmVnU3RyZWFtCisgIDg2IHN0ZGNhbGwgU0hSZWdpc3RlckRyYWdEcm9wKGxvbmcgcHRyKSBTSFJlZ2lzdGVyRHJhZ0Ryb3AKKyAgODcgc3RkY2FsbCBTSFJldm9rZURyYWdEcm9wKGxvbmcpIFNIUmV2b2tlRHJhZ0Ryb3AKKyAgODggc3R1YiBTSERvRHJhZ0Ryb3AKKyAgODkgc3RkY2FsbCBTSENsb25lU3BlY2lhbElETGlzdChsb25nIGxvbmcgbG9uZykgU0hDbG9uZVNwZWNpYWxJRExpc3QKKyAgOTAgc3R1YiBTSEZpbmRGaWxlcworICA5MSBzdHViIFNIRmluZENvbXB1dGVyCisgIDkyIHN0dWIgUGF0aEdldFNob3J0UGF0aAorICA5MyBzdHViIFdpbjMyQ3JlYXRlRGlyZWN0b3J5CisgIDk0IHN0dWIgV2luMzJSZW1vdmVEaXJlY3RvcnkKKyAgOTUgc3R1YiBTSExvZ0lMRnJvbUZTSUwKKyAgOTYgc3R1YiBTdHJSZXRUb1N0ck4KKyAgOTcgc3R1YiBTSFdhaXRGb3JGaWxlVG9PcGVuCisgIDk4IHN0dWIgU0hHZXRSZWFsSURMCisgIDk5IHN0dWIgU2V0QXBwU3RhcnRpbmdDdXJzb3IKKyAxMDAgc3RkY2FsbCBTSFJlc3RyaWN0ZWQobG9uZykgU0hSZXN0cmljdGVkCisgMTAxIHN0dWIgRHJhZ1F1ZXJ5RmlsZUFvclcgICAjIGV4cG9ydGVkIGJ5IG5hbWUKKyAxMDIgc3RkY2FsbCBTSENvQ3JlYXRlSW5zdGFuY2UocHRyIHB0ciBsb25nIHB0ciBwdHIpIFNIQ29DcmVhdGVJbnN0YW5jZQorIDEwMyBzdGRjYWxsIFNpZ25hbEZpbGVPcGVuKGxvbmcpIFNpZ25hbEZpbGVPcGVuCisgMTA0IHN0dWIgRmlsZU1lbnVfRGVsZXRlQWxsSXRlbXMKKyAxMDUgc3R1YiBGaWxlTWVudV9EcmF3SXRlbQorIDEwNiBzdHViIEZpbGVNZW51X0ZpbmRTdWJNZW51QnlQaWRsCisgMTA3IHN0dWIgRmlsZU1lbnVfR2V0TGFzdFNlbGVjdGVkSXRlbVBpZGxzCisgMTA4IHN0dWIgRmlsZU1lbnVfSGFuZGxlTWVudUNoYXIKKyAxMDkgc3R1YiBGaWxlTWVudV9Jbml0TWVudVBvcHVwCisgMTEwIHN0dWIgRmlsZU1lbnVfSW5zZXJ0VXNpbmdQaWRsCisgMTExIHN0dWIgRmlsZU1lbnVfSW52YWxpZGF0ZQorIDExMiBzdHViIEZpbGVNZW51X01lYXN1cmVJdGVtCisgMTEzIHN0dWIgRmlsZU1lbnVfUmVwbGFjZVVzaW5nUGlkbAorIDExNCBzdHViIEZpbGVNZW51X0NyZWF0ZQorIDExNSBzdHViIEZpbGVNZW51X0FwcGVuZEl0ZW0KKyAxMTYgc3R1YiBGaWxlTWVudV9UcmFja1BvcHVwTWVudUV4CisgMTE3IHN0dWIgRmlsZU1lbnVfRGVsZXRlSXRlbUJ5Q21kCisgMTE4IHN0dWIgRmlsZU1lbnVfRGVzdHJveQorIDExOSBzdGRjYWxsIElzTEZORHJpdmUocHRyKSBJc0xGTkRyaXZlCisgMTIwIHN0dWIgRmlsZU1lbnVfQWJvcnRJbml0TWVudQorIDEyMSBzdHViIFNIRmx1c2hDbGlwYm9hcmQKKyAxMjIgc3R1YiBSdW5ETExfQ2FsbEVudHJ5MTYKKyAxMjMgc3R1YiBTSEZyZWVVbnVzZWRMaWJyYXJpZXMKKyAxMjQgc3R1YiBGaWxlTWVudV9BcHBlbmRGaWxlc0ZvclBpZGwKKyAxMjUgc3R1YiBGaWxlTWVudV9BZGRGaWxlc0ZvclBpZGwKKyAxMjYgc3R1YiBTSE91dE9mTWVtb3J5TWVzc2FnZUJveAorIDEyNyBzdHViIFNIV2luSGVscAogIDEyOCBzdGRjYWxsIERsbEdldENsYXNzT2JqZWN0KGxvbmcgbG9uZyBwdHIpIFNIRUxMMzJfRGxsR2V0Q2xhc3NPYmplY3QKLSAxMjkgc3R1YiBTSEVMTDMyXzEyOQotIDEzMCBzdHViIFNIRUxMMzJfMTMwCi0gMTMxIHN0dWIgU0hFTEwzMl8xMzEKLSAxMzIgc3R1YiBTSEVMTDMyXzEzMgotIDEzMyBzdGRjYWxsIEV4dHJhY3RJY29uQShsb25nIHN0ciBsb25nKSBFeHRyYWN0SWNvbjMyQQotIDEzNCBzdHViIFNIRUxMMzJfMTM0Ci0gMTM1IHN0dWIgRXh0cmFjdEljb25FeAotIDEzNiBzdHViIFNIRUxMMzJfMTM2Ci0gMTM3IHN0dWIgU0hFTEwzMl8xMzcKLSAxMzggc3R1YiBFeHRyYWN0SWNvbkV4QQotIDEzOSBzdHViIFNIRUxMMzJfMTM5Ci0gMTQwIHN0dWIgU0hFTEwzMl8xNDAKLSAxNDEgc3R1YiBTSEVMTDMyXzE0MQotIDE0MiBzdHViIFNIRUxMMzJfMTQyCi0gMTQzIHN0dWIgU0hFTEwzMl8xNDMKLSAxNDQgc3R1YiBTSEVMTDMyXzE0NAotIDE0NSBzdHViIFNIRUxMMzJfMTQ1Ci0gMTQ2IHN0dWIgU0hFTEwzMl8xNDYKLSAxNDcgc3RkY2FsbCBTSEVMTDMyXzE0Nyhsb25nIGxvbmcpIFNIRUxMMzJfMTQ3Ci0gMTQ4IHN0dWIgRXh0cmFjdEljb25SZXNJbmZvQQotIDE0OSBzdHViIFNIRUxMMzJfMTQ5Ci0gMTUwIHN0dWIgRXh0cmFjdEljb25SZXNJbmZvVwotIDE1MSBzdHViIFNIRUxMMzJfMTUxCi0gMTUyIHN0ZGNhbGwgU0hFTEwzMl8xNTIocHRyKSBTSEVMTDMyXzE1MgotIDE1MyBzdHViIFNIRUxMMzJfMTUzCi0gMTU0IHN0dWIgU0hFTEwzMl8xNTQKLSAxNTUgc3RkY2FsbCBTSEVMTDMyXzE1NShwdHIpIFNIRUxMMzJfMTU1Ci0gMTU2IHN0dWIgU0hFTEwzMl8xNTYKLSAxNTcgc3R1YiBTSEVMTDMyXzE1NwotIDE1OCBzdHViIFNIRUxMMzJfMTU4Ci0gMTU5IHN0dWIgU0hFTEwzMl8xNTkKLSAxNjAgc3R1YiBTSEVMTDMyXzE2MAotIDE2MSBzdHViIFNIRUxMMzJfMTYxCi0gMTYyIHN0dWIgU0hFTEwzMl8xNjIKLSAxNjMgc3R1YiBTSEVMTDMyXzE2MwotIDE2NCBzdHViIFNIRUxMMzJfMTY0Ci0gMTY1IHN0ZGNhbGwgU0hFTEwzMl8xNjUobG9uZyBsb25nKSBTSEVMTDMyXzE2NQotIDE2NiBzdHViIFNIRUxMMzJfMTY2Ci0gMTY3IHN0dWIgU0hFTEwzMl8xNjcKLSAxNjggc3R1YiBTSEVMTDMyXzE2OAotIDE2OSBzdHViIFNIRUxMMzJfMTY5Ci0gMTcwIHN0dWIgU0hFTEwzMl8xNzAKLSAxNzEgc3R1YiBTSEVMTDMyXzE3MQotIDE3MiBzdHViIFNIRUxMMzJfMTcyCi0gMTczIHN0dWIgU0hFTEwzMl8xNzMKLSAxNzQgc3R1YiBTSEVMTDMyXzE3NAotIDE3NSBzdGRjYWxsIFNIRUxMMzJfMTc1KGxvbmcgbG9uZyBsb25nIGxvbmcpIFNIRUxMMzJfMTc1Ci0gMTc2IHN0dWIgU0hFTEwzMl8xNzYKLSAxNzcgc3R1YiBTSEVMTDMyXzE3NwotIDE3OCBzdHViIFNIRUxMMzJfMTc4Ci0gMTc5IHN0dWIgU0hFTEwzMl8xNzkKLSAxODAgc3RkY2FsbCBFeHRyYWN0SWNvblcobG9uZyB3c3RyIGxvbmcpIEV4dHJhY3RJY29uMzJXCi0gMTgxIHN0ZGNhbGwgU0hFTEwzMl8xODEobG9uZyBsb25nKSBTSEVMTDMyXzE4MQotIDE4MiBzdHViIEV4dHJhY3RWZXJzaW9uUmVzb3VyY2UxNlcKLSAxODMgY2RlY2wgU0hFTEwzMl8xODMobG9uZyBsb25nIGxvbmcgbG9uZyBsb25nIGxvbmcpIFNIRUxMMzJfMTgzCi0gMTg0IHN0ZGNhbGwgU0hFTEwzMl8xODQobG9uZyBsb25nIGxvbmcgbG9uZyBsb25nKSBTSEVMTDMyXzE4NAotIDE4NSBzdHViIFNIRUxMMzJfMTg1Ci0gMTg2IHN0ZGNhbGwgRmluZEV4ZWN1dGFibGVBKHB0ciBwdHIgcHRyKSBGaW5kRXhlY3V0YWJsZTMyQQotIDE4NyBzdHViIEZpbmRFeGVjdXRhYmxlVwotIDE4OCBzdGRjYWxsIEZyZWVJY29uTGlzdChsb25nKSBGcmVlSWNvbkxpc3QKLSAxODkgc3R1YiBJbnRlcm5hbEV4dHJhY3RJY29uTGlzdEEKLSAxOTAgc3R1YiBJbnRlcm5hbEV4dHJhY3RJY29uTGlzdFcKLSAxOTEgc3R1YiBPcGVuQXNfUnVuRExMCi0gMTkyIHN0dWIgUHJpbnRlcnNHZXRDb21tYW5kX1J1bkRMTAotIDE5MyBzdHViIFJlYWxTaGVsbEV4ZWN1dGVBCi0gMTk0IHN0dWIgUmVhbFNoZWxsRXhlY3V0ZUV4QQotIDE5NSBzdGRjYWxsIFNIRUxMMzJfMTk1KHB0cikgU0hFTEwzMl8xOTUKLSAxOTYgc3RkY2FsbCBTSEVMTDMyXzE5Nihsb25nKSBTSEVMTDMyXzE5NgotIDE5NyBzdHViIFNIRUxMMzJfMTk3Ci0gMTk4IHN0dWIgU0hFTEwzMl8xOTgKLSAxOTkgc3R1YiBTSEVMTDMyXzE5OQotIDIwMCBzdHViIFNIRUxMMzJfMjAwCi0gMjAxIHN0dWIgU0hFTEwzMl8yMDEKLSAyMDIgc3R1YiBTSEVMTDMyXzIwMgotIDIwMyBzdHViIFJlYWxTaGVsbEV4ZWN1dGVFeFcKLSAyMDQgc3R1YiBSZWFsU2hlbGxFeGVjdXRlVwotIDIwNSBzdHViIFJlZ2VuZXJhdGVVc2VyRW52aXJvbm1lbnQKLSAyMDYgc3R1YiBTSEFkZFRvUmVjZW50RG9jcwotIDIwNyBzdGRjYWxsIFNIQXBwQmFyTWVzc2FnZShsb25nIHB0cikgU0hBcHBCYXJNZXNzYWdlMzIKLSAyMDggc3R1YiBTSEJyb3dzZUZvckZvbGRlcgotIDIwOSBzdGRjYWxsIFNIQnJvd3NlRm9yRm9sZGVyQShwdHIpIFNIQnJvd3NlRm9yRm9sZGVyMzJBCi0gMjEwIHN0dWIgU0hDaGFuZ2VOb3RpZnkKLSAyMTEgc3R1YiBTSEZpbGVPcGVyYXRpb24KLSAyMTIgc3R1YiBTSEZpbGVPcGVyYXRpb25BCi0gMjEzIHN0dWIgU0hGb3JtYXREcml2ZQotIDIxNCBzdHViIFNIRnJlZU5hbWVNYXBwaW5ncwotIDIxNSBzdHViIFNIR2V0RGF0YUZyb21JRExpc3RBCi0gMjE2IHN0ZGNhbGwgU0hHZXREZXNrdG9wRm9sZGVyKHB0cikgU0hHZXREZXNrdG9wRm9sZGVyCi0gMjE3IHN0ZGNhbGwgU0hHZXRGaWxlSW5mbyhwdHIgbG9uZyBwdHIgbG9uZyBsb25nKSBTSEdldEZpbGVJbmZvMzJBCi0gMjE4IHN0ZGNhbGwgU0hHZXRGaWxlSW5mb0EocHRyIGxvbmcgcHRyIGxvbmcgbG9uZykgU0hHZXRGaWxlSW5mbzMyQQotIDIxOSBzdHViIFNIR2V0SW5zdGFuY2VFeHBsb3JlcgotIDIyMCBzdGRjYWxsIFNIR2V0TWFsbG9jKHB0cikgU0hHZXRNYWxsb2MKLSAyMjEgc3RkY2FsbCBTSEdldFBhdGhGcm9tSURMaXN0KHB0ciBwdHIpIFNIR2V0UGF0aEZyb21JRExpc3QKLSAyMjIgc3R1YiBTSEdldFBhdGhGcm9tSURMaXN0QQotIDIyMyBzdGRjYWxsIFNIR2V0U3BlY2lhbEZvbGRlckxvY2F0aW9uKGxvbmcgbG9uZyBwdHIpIFNIR2V0U3BlY2lhbEZvbGRlckxvY2F0aW9uCi0gMjI0IHN0ZGNhbGwgU0hIZWxwU2hvcnRjdXRzX1J1bkRMTChsb25nIGxvbmcgbG9uZyBsb25nKSBTSEhlbHBTaG9ydGN1dHNfUnVuRExMCi0gMjI1IHN0dWIgU0hMb2FkSW5Qcm9jCi0gMjI2IHN0dWIgU2hlQ2hhbmdlRGlyQQotIDIyNyBzdHViIFNoZUNoYW5nZURpckV4QQotIDIyOCBzdHViIFNoZUNoYW5nZURpckV4VwotIDIyOSBzdHViIFNoZUNoYW5nZURpclcKLSAyMzAgc3R1YiBTaGVDb252ZXJ0UGF0aFcKLSAyMzEgc3R1YiBTaGVGdWxsUGF0aEEKLSAyMzIgc3R1YiBTaGVGdWxsUGF0aFcKLSAyMzMgc3R1YiBTaGVHZXRDdXJEcml2ZQotIDIzNCBzdHViIFNoZUdldERpckEKLSAyMzUgc3R1YiBTaGVHZXREaXJFeFcKLSAyMzYgc3R1YiBTaGVHZXREaXJXCi0gMjM3IHN0dWIgU2hlR2V0UGF0aE9mZnNldFcKLSAyMzggc3R1YiBTaGVSZW1vdmVRdW90ZXNBCi0gMjM5IHN0dWIgU2hlUmVtb3ZlUXVvdGVzVwotIDI0MCBzdHViIFNoZVNldEN1ckRyaXZlCi0gMjQxIHN0dWIgU2hlU2hvcnRlblBhdGhBCi0gMjQyIHN0dWIgU2hlU2hvcnRlblBhdGhXCi0gMjQzIHN0ZGNhbGwgU2hlbGxBYm91dEEobG9uZyBzdHIgc3RyIGxvbmcpIFNoZWxsQWJvdXQzMkEKLSAyNDQgc3RkY2FsbCBTaGVsbEFib3V0Vyhsb25nIHdzdHIgd3N0ciBsb25nKSBTaGVsbEFib3V0MzJXCi0gMjQ1IHN0ZGNhbGwgU2hlbGxFeGVjdXRlQShsb25nIHN0ciBzdHIgc3RyIHN0ciBsb25nKSBTaGVsbEV4ZWN1dGUzMkEKLSAyNDYgc3R1YiBTaGVsbEV4ZWN1dGVFeAotIDI0NyBzdHViIFNoZWxsRXhlY3V0ZUV4QQotIDI0OCBzdHViIFNoZWxsRXhlY3V0ZVcKLSAyNDkgc3RkY2FsbCBTaGVsbF9Ob3RpZnlJY29uKGxvbmcgcHRyKSBTaGVsbF9Ob3RpZnlJY29uCi0gMjUwIHN0ZGNhbGwgU2hlbGxfTm90aWZ5SWNvbkEobG9uZyBwdHIpIFNoZWxsX05vdGlmeUljb25BCi0gMjUxIHN0dWIgU2hsMTYzMl9UaHVua0RhdGEzMgotIDI1MiBzdHViIFNobDMyMTZfVGh1bmtEYXRhMzIKLSA1MDUgc3R1YiBTSEVMTDMyXzUwNQotIDUwNyBzdHViIFNIRUxMMzJfNTA3Ci0gNTEwIHN0dWIgU0hFTEwzMl81MTAKLSA1MTEgc3R1YiBTSEVMTDMyXzUxMQotMTAyNSBzdHViIEV4dHJhY3RJY29uRXhXICMgcHJvcGVyIG9yZGluYWwgdW5rbm93bgotMTAzMCBzdHViIEZpbmRFeGVEbGdQcm9jICMgcHJvcGVyIG9yZGluYWwgdW5rbm93bgotMTA0MyBzdHViIFJlZ2lzdGVyU2hlbGxIb29rICMgcHJvcGVyIG9yZGluYWwgdW5rbm93bgotMTA0OCBzdHViIFNIQnJvd3NlRm9yRm9sZGVyVyAjIHByb3BlciBvcmRpbmFsIHVua25vd24KLTEwNTIgc3R1YiBTSEZpbGVPcGVyYXRpb25XICMgcHJvcGVyIG9yZGluYWwgdW5rbm93bgotMTA1OCBzdHViIFNIR2V0RmlsZUluZm9XICMgcHJvcGVyIG9yZGluYWwgdW5rbm93bgotMTA2MyBzdHViIFNIR2V0UGF0aEZyb21JRExpc3RXICMgcHJvcGVyIG9yZGluYWwgdW5rbm93bgotMTA4OSBzdHViIFNoZWxsRXhlY3V0ZUV4VyAjIHByb3BlciBvcmRpbmFsIHVua25vd24KLTEwOTEgc3R1YiBTaGVsbEhvb2tQcm9jICMgcHJvcGVyIG9yZGluYWwgdW5rbm93bgotMTA5NCBzdHViIFNoZWxsX05vdGlmeUljb25XICMgcHJvcGVyIG9yZGluYWwgdW5rbm93bgotMTA5NSBzdHViIFN0ckNockEgIyBwcm9wZXIgb3JkaW5hbCB1bmtub3duCi0xMDk2IHN0dWIgU3RyQ2hySUEgIyBwcm9wZXIgb3JkaW5hbCB1bmtub3duCi0xMDk3IHN0dWIgU3RyQ2hySVcgIyBwcm9wZXIgb3JkaW5hbCB1bmtub3duCi0xMDk4IHN0dWIgU3RyQ2hyVyAjIHByb3BlciBvcmRpbmFsIHVua25vd24KLTEwOTkgc3R1YiBTdHJDbXBOQSAjIHByb3BlciBvcmRpbmFsIHVua25vd24KLTExMDAgc3R1YiBTdHJDbXBOSUEgIyBwcm9wZXIgb3JkaW5hbCB1bmtub3duCi0xMTAxIHN0dWIgU3RyQ21wTklXICMgcHJvcGVyIG9yZGluYWwgdW5rbm93bgotMTEwMiBzdHViIFN0ckNtcE5XICMgcHJvcGVyIG9yZGluYWwgdW5rbm93bgotMTEwMyBzdHViIFN0ckNweU5BICMgcHJvcGVyIG9yZGluYWwgdW5rbm93bgotMTEwNCBzdHViIFN0ckNweU5XICMgcHJvcGVyIG9yZGluYWwgdW5rbm93bgotMTEwNSBzdHViIFN0ck5DbXBBICMgcHJvcGVyIG9yZGluYWwgdW5rbm93bgotMTEwNiBzdHViIFN0ck5DbXBJQSAjIHByb3BlciBvcmRpbmFsIHVua25vd24KLTExMDcgc3R1YiBTdHJOQ21wSVcgIyBwcm9wZXIgb3JkaW5hbCB1bmtub3duCi0xMTA4IHN0dWIgU3RyTkNtcFcgIyBwcm9wZXIgb3JkaW5hbCB1bmtub3duCi0xMTA5IHN0dWIgU3RyTkNweUEgIyBwcm9wZXIgb3JkaW5hbCB1bmtub3duCi0xMTEwIHN0dWIgU3RyTkNweVcgIyBwcm9wZXIgb3JkaW5hbCB1bmtub3duCi0xMTExIHN0dWIgU3RyUkNockEgIyBwcm9wZXIgb3JkaW5hbCB1bmtub3duCi0xMTEyIHN0dWIgU3RyUkNocklBICMgcHJvcGVyIG9yZGluYWwgdW5rbm93bgotMTExMyBzdHViIFN0clJDaHJJVyAjIHByb3BlciBvcmRpbmFsIHVua25vd24KLTExMTQgc3R1YiBTdHJSQ2hyVyAjIHByb3BlciBvcmRpbmFsIHVua25vd24KLTExMTUgc3R1YiBTdHJSU3RyQSAjIHByb3BlciBvcmRpbmFsIHVua25vd24KLTExMTYgc3R1YiBTdHJSU3RySUEgIyBwcm9wZXIgb3JkaW5hbCB1bmtub3duCi0xMTE3IHN0dWIgU3RyUlN0cklXICMgcHJvcGVyIG9yZGluYWwgdW5rbm93bgotMTExOCBzdHViIFN0clJTdHJXICMgcHJvcGVyIG9yZGluYWwgdW5rbm93bgotMTExOSBzdHViIFN0clN0ckEgIyBwcm9wZXIgb3JkaW5hbCB1bmtub3duCi0xMTIwIHN0dWIgU3RyU3RySUEgIyBwcm9wZXIgb3JkaW5hbCB1bmtub3duCi0xMTIxIHN0dWIgU3RyU3RySVcgIyBwcm9wZXIgb3JkaW5hbCB1bmtub3duCi0xMTIyIHN0dWIgU3RyU3RyVyAjIHByb3BlciBvcmRpbmFsIHVua25vd24KLTExMjMgc3R1YiBXT1dTaGVsbEV4ZWN1dGUgIyBwcm9wZXIgb3JkaW5hbCB1bmtub3duCisgMTI5IHN0dWIgREFEX0F1dG9TY3JvbGwKKyAxMzAgc3R1YiBEQURfRHJhZ0VudGVyCisgMTMxIHN0dWIgREFEX0RyYWdFbnRlckV4CisgMTMyIHN0dWIgREFEX0RyYWdMZWF2ZQorIDEzMyBzdHViIERyYWdRdWVyeUZpbGVXICAgIyBleHBvcnRlZCBieSBuYW1lCisgMTM0IHN0dWIgREFEX0RyYWdNb3ZlCisgMTM1IHN0dWIgRHJhZ1F1ZXJ5UG9pbnQgICAjIGV4cG9ydGVkIGJ5IG5hbWUKKyAxMzYgc3R1YiBEQURfU2V0RHJhZ0ltYWdlCisgMTM3IHN0dWIgREFEX1Nob3dEcmFnSW1hZ2UKKyAxMzggc3R1YiBEdXBsaWNhdGVJY29uICAgIyBleHBvcnRlZCBieSBuYW1lCisgMTM5IHN0dWIgRGVza3RvcF9VcGRhdGVCcmllZmNhc2VPbkV2ZW50CisgMTQwIHN0dWIgRmlsZU1lbnVfRGVsZXRlSXRlbUJ5SW5kZXgKKyAxNDEgc3R1YiBGaWxlTWVudV9EZWxldGVJdGVtQnlGaXJzdElECisgMTQyIHN0dWIgRmlsZU1lbnVfRGVsZXRlU2VwYXJhdG9yCisgMTQzIHN0dWIgRmlsZU1lbnVfRW5hYmxlSXRlbUJ5Q21kCisgMTQ0IHN0dWIgRmlsZU1lbnVfR2V0SXRlbUV4dGVudAorIDE0NSBzdHViIFBhdGhGaW5kT25QYXRoCisgMTQ2IHN0dWIgUkxCdWlsZExpc3RPZlBhdGhzCisgMTQ3IHN0ZGNhbGwgU0hDTFNJREZyb21TdHJpbmcobG9uZyBsb25nKSBTSENMU0lERnJvbVN0cmluZworIDE0OCBzdGRjYWxsIEV4dHJhY3RBc3NvY2lhdGVkSWNvbkEobG9uZyBwdHIgbG9uZykgRXh0cmFjdEFzc29jaWF0ZWRJY29uMzJBICAgIyBleHBvcnRlZCBieSBuYW1lCisgMTQ5IHN0dWIgU0hGaW5kX0luaXRNZW51UG9wdXAKKyAxNTAgc3R1YiBFeHRyYWN0QXNzb2NpYXRlZEljb25FeEEgICAjIGV4cG9ydGVkIGJ5IG5hbWUKKyAxNTEgc3R1YiBTSExvYWRPTEUKKyAxNTIgc3RkY2FsbCBJTEdldFNpemUocHRyKSBJTEdldFNpemUKKyAxNTMgc3R1YiBJTEdldE5leHQKKyAxNTQgc3R1YiBJTEFwcGVuZAorIDE1NSBzdGRjYWxsIElMRnJlZShwdHIpIElMRnJlZQorIDE1NiBzdHViIElMR2xvYmFsRnJlZQorIDE1NyBzdHViIElMQ3JlYXRlRnJvbVBhdGgKKyAxNTggc3RkY2FsbCBQYXRoR2V0RXh0ZW5zaW9uKHN0ciBsb25nIGxvbmcpIFBhdGhHZXRFeHRlbnNpb24KKyAxNTkgc3R1YiBQYXRoSXNEaXJlY3RvcnkKKyAxNjAgc3R1YiBTSE5ldENvbm5lY3Rpb25EaWFsb2cKKyAxNjEgc3R1YiBTSFJ1bkNvbnJvbFBhbmVsCisgMTYyIHN0dWIgU0hTaW1wbGVJRExpc3RGcm9tUGF0aAorIDE2MyBzdHViIFN0clRvT2xlU3RyCisgMTY0IHN0dWIgV2luMzJEZWxldGVGaWxlCisgMTY1IHN0ZGNhbGwgU0hDcmVhdGVEaXJlY3RvcnkobG9uZyBsb25nKSBTSENyZWF0ZURpcmVjdG9yeQorIDE2NiBzdHViIENhbGxDUExFbnRyeTE2CisgMTY3IHN0dWIgU0hBZGRGcm9tUHJvcFNoZWV0RXh0QXJyYXkKKyAxNjggc3R1YiBTSENyZWF0ZVByb3BTaGVldEV4dEFycmF5CisgMTY5IHN0dWIgU0hEZXN0cm95UHJvcFNoZWV0RXh0QXJyYXkKKyAxNzAgc3R1YiBTSFJlcGxhY2VGcm9tUHJvcFNoZWV0RXh0QXJyYXkKKyAxNzEgc3R1YiBQYXRoQ2xlYW51cFNwZWMKKyAxNzIgc3R1YiBTSENyZWF0ZUxpbmtzCisgMTczIHN0dWIgU0hWYWxpZGF0ZVVOQworIDE3NCBzdHViIFNIQ3JlYXRlU2hlbGxGb2xkZXJWaWV3RXgKKyAxNzUgc3RkY2FsbCBTSEdldFNwZWNpYWxGb2xkZXJQYXRoKGxvbmcgbG9uZyBsb25nIGxvbmcpIFNIR2V0U3BlY2lhbEZvbGRlclBhdGgKKyAxNzYgc3R1YiBTSFNldEluc3RhbmNlRXhwbG9yZXIKKyAxNzcgc3R1YiBEQURfU2V0RHJhZ0ltYWdlRnJvbUxpc3RWaWV3CisgMTc4IHN0dWIgU0hPYmplY3RQcm9wZXJ0aWVzCisgMTc5IHN0dWIgU0hHZXROZXdMaW5rSW5mb0EKKyAxODAgc3R1YiBTSEdldE5ld0xpbmtJbmZvVworIDE4MSBzdGRjYWxsIFJlZ2lzdGVyU2hlbGxIb29rKGxvbmcgbG9uZykgUmVnaXN0ZXJTaGVsbEhvb2szMgorIDE4MiBzdHViIFNoZWxsTWVzc2FnZUJveFcKKyAxODMgY2RlY2wgU2hlbGxNZXNzYWdlQm94QShsb25nIGxvbmcgbG9uZyBsb25nIGxvbmcgbG9uZykgU2hlbGxNZXNzYWdlQm94QQorIDE4NCBzdGRjYWxsIEFycmFuZ2VXaW5kb3dzKGxvbmcgbG9uZyBsb25nIGxvbmcgbG9uZykgQXJyYW5nZVdpbmRvd3MKKyAxODUgc3R1YiBTSEhhbmRsZURpc2tGdWxsCisgMTg2IHN0dWIgRXh0cmFjdEFzc29jaWF0ZWRJY29uRXhXICAgIyBleHBvcnRlZCBieSBuYW1lCisgMTg3IHN0dWIgRXh0cmFjdEFzc29jaWF0ZWRJY29uVyAgICMgZXhwb3J0ZWQgYnkgbmFtZQorIDE4OCBzdGRjYWxsIEV4dHJhY3RJY29uQShsb25nIHN0ciBsb25nKSBFeHRyYWN0SWNvbjMyQSAgICMgZXhwb3J0ZWQgYnkgbmFtZQorIDE4OSBzdHViIEV4dHJhY3RJY29uRXggICAjIGV4cG9ydGVkIGJ5IG5hbWUKKyAxOTAgc3R1YiBFeHRyYWN0SWNvbkV4QSAgICMgZXhwb3J0ZWQgYnkgbmFtZQorIDE5MSBzdHViIEV4dHJhY3RJY29uRXhXICAgIyBleHBvcnRlZCBieSBuYW1lCisgMTkyIHN0dWIgRXh0cmFjdEljb25SZXNJbmZvQSAgICMgZXhwb3J0ZWQgYnkgbmFtZQorIDE5MyBzdHViIEV4dHJhY3RJY29uUmVzSW5mb1cgICAjIGV4cG9ydGVkIGJ5IG5hbWUKKyAxOTQgc3RkY2FsbCBFeHRyYWN0SWNvblcobG9uZyB3c3RyIGxvbmcpIEV4dHJhY3RJY29uMzJXICAgIyBleHBvcnRlZCBieSBuYW1lCisgMTk1IHN0ZGNhbGwgU0hGcmVlKHB0cikgU0hGcmVlCisgMTk2IHN0ZGNhbGwgU0hBbGxvYyhsb25nKSBTSEFsbG9jCisgMTk3IHN0dWIgU0hHbG9iYWxEZWZlY3QKKyAxOTggc3R1YiBTSEFib3J0SW52b2tlQ29tbWFuZAorIDE5OSBzdHViIFNIR2V0RmlsZUljb24KKyAyMDAgc3R1YiBTSExvY2FsQWxsb2MKKyAyMDEgc3R1YiBTSExvY2FsRnJlZQorIDIwMiBzdHViIFNITG9jYWxSZUFsbG9jCisgMjAzIHN0dWIgQWRkQ29tbWFzVworIDIwNCBzdHViIFNob3J0U2l6ZUZvcm1hdFcKKyAyMDUgc3R1YiBQcmludGVyX0xvYWRJY29uc1cKKyAyMDYgc3R1YiBMaW5rX0FkZEV4dHJhRGF0YVNlY3Rpb24KKyAyMDcgc3R1YiBMaW5rX1JlYWRFeHRyYURhdGFTZWN0aW9uCisgMjA4IHN0dWIgTGlua19SZW1vdmVFeHRyYURhdGFTZWN0aW9uCisgMjA5IHN0dWIgSW50NjRUb1N0cmluZworIDIxMCBzdHViIExhcmdlSW50ZWdlclRvU3RyaW5nCisgMjExIHN0dWIgUHJpbnRlcnNfR2V0UGlkbAorIDIxMiBzdHViIFByaW50ZXJfQWRkUHJpbnRlclByb3BQYWdlcworIDIxMyBzdHViIFByaW50ZXJzX1JlZ2lzdGVyV2luZG93VworIDIxNCBzdHViIFByaW50ZXJzX1VucmVnaXN0ZXJXaW5kb3cKKyAyMTUgc3R1YiBTSFN0YXJ0TmV0Q29ubmVjdGlvbkRpYWxvZ0AxMgorIDIxNiBzdHViIEV4dHJhY3RWZXJzaW9uUmVzb3VyY2UxNlcgICAjIGV4cG9ydGVkIGJ5IG5hbWUKKyAyMTcgc3R1YiBGaW5kRXhlRGxnUHJvYyAgICMgZXhwb3J0ZWQgYnkgbmFtZQorIDIxOCBzdGRjYWxsIEZpbmRFeGVjdXRhYmxlQShwdHIgcHRyIHB0cikgRmluZEV4ZWN1dGFibGUzMkEgICAjIGV4cG9ydGVkIGJ5IG5hbWUKKyAyMTkgc3R1YiBGaW5kRXhlY3V0YWJsZVcgICAjIGV4cG9ydGVkIGJ5IG5hbWUKKyAyMjAgc3RkY2FsbCBGcmVlSWNvbkxpc3QobG9uZykgRnJlZUljb25MaXN0ICAgIyBleHBvcnRlZCBieSBuYW1lCisgMjIxIHN0dWIgSW50ZXJuYWxFeHRyYWN0SWNvbkxpc3RBICAgIyBleHBvcnRlZCBieSBuYW1lCisgMjIyIHN0dWIgSW50ZXJuYWxFeHRyYWN0SWNvbkxpc3RXICAgIyBleHBvcnRlZCBieSBuYW1lCisgMjIzIHN0dWIgT3BlbkFzX1J1bkRMTCAgICMgZXhwb3J0ZWQgYnkgbmFtZQorIDIyNCBzdHViIE9wZW5Bc19SdW5ETExBICAgIyBleHBvcnRlZCBieSBuYW1lCisgMjI1IHN0dWIgT3BlbkFzX1J1bkRMTFcgICAjIGV4cG9ydGVkIGJ5IG5hbWUKKyAyMjYgc3R1YiBQcmludGVyc0dldENvbW1hbmRfUnVuRExMICAgIyBleHBvcnRlZCBieSBuYW1lCisgMjI3IHN0dWIgUHJpbnRlcnNHZXRDb21tYW5kX1J1bkRMTEEgICAjIGV4cG9ydGVkIGJ5IG5hbWUKKyAyMjggc3R1YiBQcmludGVyc0dldENvbW1hbmRfUnVuRExMVyAgICMgZXhwb3J0ZWQgYnkgbmFtZQorIDIyOSBzdHViIFJlYWxTaGVsbEV4ZWN1dGVBICAgIyBleHBvcnRlZCBieSBuYW1lCisgMjMwIHN0dWIgUmVhbFNoZWxsRXhlY3V0ZUV4QSAgICMgZXhwb3J0ZWQgYnkgbmFtZQorIDIzMSBzdHViIFJlYWxTaGVsbEV4ZWN1dGVFeFcgICAjIGV4cG9ydGVkIGJ5IG5hbWUKKyAyMzIgc3R1YiBSZWFsU2hlbGxFeGVjdXRlVyAgICMgZXhwb3J0ZWQgYnkgbmFtZQorIDIzMyBzdHViIFJlZ2VuZXJhdGVVc2VyRW52aXJvbm1lbnRAOCAgICMgZXhwb3J0ZWQgYnkgbmFtZQorIDIzNCBzdHViIFNIQWRkVG9SZWNlbnREb2NzQDggICAjIGV4cG9ydGVkIGJ5IG5hbWUKKyAyMzUgc3RkY2FsbCBTSEFwcEJhck1lc3NhZ2UobG9uZyBwdHIpIFNIQXBwQmFyTWVzc2FnZTMyICAgIyBleHBvcnRlZCBieSBuYW1lCisgMjM2IHN0dWIgU0hCcm93c2VGb3JGb2xkZXJANCAgICMgZXhwb3J0ZWQgYnkgbmFtZQorIDIzNyBzdGRjYWxsIFNIQnJvd3NlRm9yRm9sZGVyQShwdHIpIFNIQnJvd3NlRm9yRm9sZGVyMzJBICAgIyBleHBvcnRlZCBieSBuYW1lCisgMjM4IHN0dWIgU0hCcm93c2VGb3JGb2xkZXJXQDQgICAjIGV4cG9ydGVkIGJ5IG5hbWUKKyAyMzkgc3R1YiBTSENoYW5nZU5vdGlmeUAxNiAgICMgZXhwb3J0ZWQgYnkgbmFtZQorIDI0MCBzdHViIFNIRW1wdHlSZWN5Y2xlQmluQUAxMiAgICMgZXhwb3J0ZWQgYnkgbmFtZQorIDI0MSBzdHViIFNIRW1wdHlSZWN5Y2xlQmluV0AxMiAgICMgZXhwb3J0ZWQgYnkgbmFtZQorIDI0MiBzdHViIFNIRmlsZU9wZXJhdGlvbkA0ICAgIyBleHBvcnRlZCBieSBuYW1lCisgMjQzIHN0dWIgU0hGaWxlT3BlcmF0aW9uQUA0ICAgIyBleHBvcnRlZCBieSBuYW1lCisgMjQ0IHN0dWIgU0hGaWxlT3BlcmF0aW9uV0A0ICAgIyBleHBvcnRlZCBieSBuYW1lCisgMjQ1IHN0dWIgU0hGb3JtYXREcml2ZUAxNiAgICMgZXhwb3J0ZWQgYnkgbmFtZQorIDI0NiBzdHViIFNIRnJlZU5hbWVNYXBwaW5nc0A0ICAgIyBleHBvcnRlZCBieSBuYW1lCisgMjQ3IHN0dWIgU0hHZXREYXRhRnJvbUlETGlzdEFAMjAgICAjIGV4cG9ydGVkIGJ5IG5hbWUKKyAyNDggc3R1YiBTSEdldERhdGFGcm9tSURMaXN0V0AyMCAgICMgZXhwb3J0ZWQgYnkgbmFtZQorIDI0OSBzdHViIFBhdGhQYXJzZUljb25Mb2NhdGlvbkA0CisgMjUwIHN0dWIgUGF0aFJlbW92ZUV4dGVuc2lvbkA0CisgMjUxIHN0dWIgUGF0aFJlbW92ZUFyZ3NANQorIDI1MiBzdGRjYWxsIFNIR2V0RGVza3RvcEZvbGRlcihwdHIpIFNIR2V0RGVza3RvcEZvbGRlciAgICMgZXhwb3J0ZWQgYnkgbmFtZQorIDI1MyBzdGRjYWxsIFNIR2V0RmlsZUluZm8ocHRyIGxvbmcgcHRyIGxvbmcgbG9uZykgU0hHZXRGaWxlSW5mbzMyQSAgICMgZXhwb3J0ZWQgYnkgbmFtZQorIDI1NCBzdGRjYWxsIFNIR2V0RmlsZUluZm9BKHB0ciBsb25nIHB0ciBsb25nIGxvbmcpIFNIR2V0RmlsZUluZm8zMkEgICAjIGV4cG9ydGVkIGJ5IG5hbWUKKyAyNTUgc3R1YiBTSEdldEZpbGVJbmZvV0AyMCAjIGV4cG9ydGVkIGJ5IG5hbWUKKyAyNTYgc3R1YiBTSEdldEluc3RhbmNlRXhwbG9yZXIgICAjIGV4cG9ydGVkIGJ5IG5hbWUKKyAyNTcgc3RkY2FsbCBTSEdldE1hbGxvYyhwdHIpIFNIR2V0TWFsbG9jICAgIyBleHBvcnRlZCBieSBuYW1lCisgMjU4IHN0dWIgU0hHZXROZXdMaW5rSW5mb0AyMCAgICMgZXhwb3J0ZWQgYnkgbmFtZQorIDI1OSBzdGRjYWxsIFNIR2V0UGF0aEZyb21JRExpc3QocHRyIHB0cikgU0hHZXRQYXRoRnJvbUlETGlzdCAgICMgZXhwb3J0ZWQgYnkgbmFtZQorIDI2MCBzdHViIFNIR2V0UGF0aEZyb21JRExpc3RAOCAgICMgZXhwb3J0ZWQgYnkgbmFtZQorIDI2MSBzdHViIFNIR2V0UGF0aEZyb21JRExpc3RBQDggICAjIGV4cG9ydGVkIGJ5IG5hbWUKKyAyNjIgc3R1YiBTSEdldFBhdGhGcm9tSURMaXN0V0A4ICAgIyBleHBvcnRlZCBieSBuYW1lCisgMjYzIHN0ZGNhbGwgU0hHZXRTcGVjaWFsRm9sZGVyTG9jYXRpb24obG9uZyBsb25nIHB0cikgU0hHZXRTcGVjaWFsRm9sZGVyTG9jYXRpb24gICAjIGV4cG9ydGVkIGJ5IG5hbWUKKyAyNjQgc3RkY2FsbCBTSEhlbHBTaG9ydGN1dHNfUnVuRExMKGxvbmcgbG9uZyBsb25nIGxvbmcpIFNISGVscFNob3J0Y3V0c19SdW5ETEwgICAjIGV4cG9ydGVkIGJ5IG5hbWUKKyAyNjUgc3R1YiBTSEhlbHBTaG9ydGN1dHNfUnVuRExMQUAxNiAgICMgZXhwb3J0ZWQgYnkgbmFtZQorIDI2NiBzdHViIFNISGVscFNob3J0Y3V0c19SdW5ETExXQDE2ICAgIyBleHBvcnRlZCBieSBuYW1lCisgMjY3IHN0ZGNhbGwgU0hMb2FkSW5Qcm9jKGxvbmcpIFNITG9hZEluUHJvYyAgICMgZXhwb3J0ZWQgYnkgbmFtZQorIDI2OCBzdHViIFNIUXVlcnlSZWN5Y2xlQmluQUA4ICAgIyBleHBvcnRlZCBieSBuYW1lCisgMjY5IHN0dWIgU0hRdWVyeVJlY3ljbGVCaW5XQDggICAjIGV4cG9ydGVkIGJ5IG5hbWUKKyAyNzAgc3R1YiBTSFVwZGF0ZVJlY3ljbGVCaW5JY29uQDAgICAjIGV4cG9ydGVkIGJ5IG5hbWUKKworIDI3MSBzdHViIFNoZUNoYW5nZURpckEKKyAyNzIgc3R1YiBTaGVDaGFuZ2VEaXJFeEEKKyAyNzMgc3R1YiBTaGVDaGFuZ2VEaXJFeFcKKyAyNzQgc3R1YiBTaGVDaGFuZ2VEaXJXCisgMjc1IHN0dWIgU2hlQ29udmVydFBhdGhXCisgMjc2IHN0dWIgU2hlRnVsbFBhdGhBCisgMjc3IHN0dWIgU2hlRnVsbFBhdGhXCisgMjc4IHN0dWIgU2hlR2V0Q3VyRHJpdmUKKyAyNzkgc3R1YiBTaGVHZXREaXJBCisgMjgwIHN0dWIgU2hlR2V0RGlyRXhXCisgMjgxIHN0dWIgU2hlR2V0RGlyVworIDI4MiBzdHViIFNoZUdldFBhdGhPZmZzZXRXCisgMjgzIHN0dWIgU2hlUmVtb3ZlUXVvdGVzQQorIDI4NCBzdHViIFNoZVJlbW92ZVF1b3Rlc1cKKyAyODUgc3R1YiBTaGVTZXRDdXJEcml2ZQorIDI4NiBzdHViIFNoZVNob3J0ZW5QYXRoQQorIDI4NyBzdHViIFNoZVNob3J0ZW5QYXRoVworIDI4OCBzdGRjYWxsIFNoZWxsQWJvdXRBKGxvbmcgc3RyIHN0ciBsb25nKSBTaGVsbEFib3V0MzJBCisgMjg5IHN0ZGNhbGwgU2hlbGxBYm91dFcobG9uZyB3c3RyIHdzdHIgbG9uZykgU2hlbGxBYm91dDMyVworIDI5MCBzdGRjYWxsIFNoZWxsRXhlY3V0ZUEobG9uZyBzdHIgc3RyIHN0ciBzdHIgbG9uZykgU2hlbGxFeGVjdXRlMzJBCisgMjkxIHN0dWIgU2hlbGxFeGVjdXRlRXgKKyAyOTIgc3R1YiBTaGVsbEV4ZWN1dGVFeEEKKyAyOTMgc3R1YiBTaGVsbEV4ZWN1dGVFeFcKKyAyOTQgc3R1YiBTaGVsbEV4ZWN1dGVXCisgMjk1IHN0dWIgU2hlbGxIb29rUHJvYyAgICMgZXhwb3J0ZWQgYnkgbmFtZQorIDI5NiBzdGRjYWxsIFNoZWxsX05vdGlmeUljb24obG9uZyBwdHIpIFNoZWxsX05vdGlmeUljb24KKyAyOTcgc3RkY2FsbCBTaGVsbF9Ob3RpZnlJY29uQShsb25nIHB0cikgU2hlbGxfTm90aWZ5SWNvbkEKKyAyOTggc3R1YiBTaGVsbF9Ob3RpZnlJY29uVyAgICMgZXhwb3J0ZWQgYnkgbmFtZQorIDI5OSBzdHViIFNobDE2MzJfVGh1bmtEYXRhMzIKKyAzMDAgc3R1YiBTaGwzMjE2X1RodW5rRGF0YTMyCisgMzAxIHN0dWIgU3RyQ2hyQSAjIHByb3BlciBvcmRpbmFsIHVua25vd24KKyAzMDIgc3R1YiBTdHJDaHJJQSAjIHByb3BlciBvcmRpbmFsIHVua25vd24KKyAzMDMgc3R1YiBTdHJDaHJJVyAjIHByb3BlciBvcmRpbmFsIHVua25vd24KKyAzMDQgc3R1YiBTdHJDaHJXICMgcHJvcGVyIG9yZGluYWwgdW5rbm93bgorIDMwNSBzdHViIFN0ckNtcE5BICMgcHJvcGVyIG9yZGluYWwgdW5rbm93bgorIDMwNiBzdHViIFN0ckNtcE5JQSAjIHByb3BlciBvcmRpbmFsIHVua25vd24KKyAzMDcgc3R1YiBTdHJDbXBOSVcgIyBwcm9wZXIgb3JkaW5hbCB1bmtub3duCisgMzA4IHN0dWIgU3RyQ21wTlcgIyBwcm9wZXIgb3JkaW5hbCB1bmtub3duCisgMzA5IHN0dWIgU3RyQ3B5TkEgIyBwcm9wZXIgb3JkaW5hbCB1bmtub3duCisgMzEwIHN0dWIgU3RyQ3B5TlcgIyBwcm9wZXIgb3JkaW5hbCB1bmtub3duCisgMzExIHN0dWIgU3RyTkNtcEEgIyBwcm9wZXIgb3JkaW5hbCB1bmtub3duCisgMzEyIHN0dWIgU3RyTkNtcElBICMgcHJvcGVyIG9yZGluYWwgdW5rbm93bgorIDMxMyBzdHViIFN0ck5DbXBJVyAjIHByb3BlciBvcmRpbmFsIHVua25vd24KKyAzMTQgc3R1YiBTdHJOQ21wVyAjIHByb3BlciBvcmRpbmFsIHVua25vd24KKyAzMTUgc3R1YiBTdHJOQ3B5QSAjIHByb3BlciBvcmRpbmFsIHVua25vd24KKyAzMTYgc3R1YiBTdHJOQ3B5VyAjIHByb3BlciBvcmRpbmFsIHVua25vd24KKyAzMTcgc3R1YiBTdHJSQ2hyQSAjIHByb3BlciBvcmRpbmFsIHVua25vd24KKyAzMTggc3R1YiBTdHJSQ2hySUEgIyBwcm9wZXIgb3JkaW5hbCB1bmtub3duCisgMzE5IHN0dWIgU3RyUkNocklXICMgcHJvcGVyIG9yZGluYWwgdW5rbm93bgorIDMyMCBzdHViIFN0clJDaHJXICMgcHJvcGVyIG9yZGluYWwgdW5rbm93bgorIDMyMSBzdHViIFN0clJTdHJBICMgcHJvcGVyIG9yZGluYWwgdW5rbm93bgorIDMyMiBzdHViIFN0clJTdHJJQSAjIHByb3BlciBvcmRpbmFsIHVua25vd24KKyAzMjMgc3R1YiBTdHJSU3RySVcgIyBwcm9wZXIgb3JkaW5hbCB1bmtub3duCisgMzI0IHN0dWIgU3RyUlN0clcgIyBwcm9wZXIgb3JkaW5hbCB1bmtub3duCisgMzI1IHN0dWIgU3RyU3RyQSAjIHByb3BlciBvcmRpbmFsIHVua25vd24KKyAzMjYgc3R1YiBTdHJTdHJJQSAjIHByb3BlciBvcmRpbmFsIHVua25vd24KKyAzMjcgc3R1YiBTdHJTdHJJVyAjIHByb3BlciBvcmRpbmFsIHVua25vd24KKyAzMjggc3R1YiBTdHJTdHJXICMgcHJvcGVyIG9yZGluYWwgdW5rbm93biAKKyAzMjkgc3R1YiBXT1dTaGVsbEV4ZWN1dGUgIyBwcm9wZXIgb3JkaW5hbCB1bmtub3duCisKKyA1MDUgc3R1YiBTSFJlZ0Nsb3NlS2V5QDQKKyA1MDYgc3R1YiBTSFJlZ09wZW5LZXlBQDEyCisgNTA3IHN0dWIgU0hSZWdPcGVuS2V5V0AxMgorIDUwOCBzdHViIFNIUmVnUXVlcnlWYWx1ZUFAMTYKKyA1MDkgc3R1YiBTSFJlZ1F1ZXJ5VmFsdWVFeEFAMjQKKyA1MTAgc3R1YiBTSFJlZ1F1ZXJ5VmFsdWVXQDE2CisgNTExIHN0dWIgU0hSZWdRdWVyeVZhbHVlRXhXQDI0CisgNTEyIHN0dWIgU0hSZWdEZWxldGVLZXlXQDgKKworIDUyMCBzdHViIFNIQWxsb2NTaGFyZWRAMTIKKyA1MjEgc3R1YiBTSExvY2tTaGFyZWRAOAorIDUyMiBzdHViIFNIVW5sb2NrU2hhcmVkQDQKKyA1MjMgc3R1YiBTSEZyZWVTaGFyZWRAOAorIDUyNCBzdHViIFJlYWxEcml2ZVR5cGVAOAorIDUyNSBzdHViIFJlYWxEcml2ZVR5cGVGbGFnc0A4CisKKyA2NDAgc3R1YiBOVFNIQ2hhbmdlTm90aWZ5UmVnaXN0ZXJAMjQKKyA2NDEgc3R1YiBOVFNIQ2hhbmdlTm90aWZ5RGVyZWdpc3RlckA0CisKKyA2NDMgc3R1YiBTSENoYW5nZU5vdGlmeVJlY2VpdmVAMTYKKyA2NDQgc3R1YiBTSENoYW5nZU5vdGlmaWNhdGlvbl9Mb2NrQDE2CisgNjQ1IHN0dWIgU0hDaGFuZ2VOb3RpZmljYXRpb25fVW5sb2NrQDQKKyA2NDYgc3R1YiBTSENoYW5nZVJlZ2lzdHJhdGlvblJlY2VpdmVAOAorIDY0NyBzdHViIFJlY2VpdmVBZGRUb1JlY2VudERvY3MKKyA2NDggc3R1YiBTSFdhaXRPcF9PcGVyYXRlQDgKKworIDY1MCBzdHViIFBhdGhJc1NhbWVSb290CisgNjUxIHN0dWIgUmVhZENhYmluZXRTdGF0ZQorIDY1MiBzdHViIFdyaXRlQ2FiaW5ldFN0YXRlQDQKKyA2NTMgc3R1YiBQYXRoUHJvY2Vzc0NvbW1hbmQKKworIDY2MCBzdHViIEZpbGVJY29uSW5pdAorCisgNjgwIHN0dWIgSXNVc2VyQWRtaW4KKworMTIxNyBzdHViIEZPT0JBUjEyMTcgICAjIG5vIGpva2UhIFRoaXMgaXMgdGhlIHJlYWwgbmFtZSEhCmRpZmYgLS1naXQgYS9yZWxheTMyL3dpbm1tLnNwZWMgYi9yZWxheTMyL3dpbm1tLnNwZWMKaW5kZXggZmMyMTBlNi4uMmViYmRkNyAxMDA2NDQKLS0tIGEvcmVsYXkzMi93aW5tbS5zcGVjCisrKyBiL3JlbGF5MzIvd2lubW0uc3BlYwpAQCAtNTEsNyArNTEsNyBAQAogIDQ4IHN0dWIgbWNpTG9hZENvbW1hbmRSZXNvdXJjZQogIDQ5IHN0ZGNhbGwgbWNpU2VuZENvbW1hbmRBKGxvbmcgbG9uZyBsb25nIGxvbmcpIG1jaVNlbmRDb21tYW5kMzJBCiAgNTAgc3R1YiBtY2lTZW5kQ29tbWFuZFcKLSA1MSBzdGRjYWxsIG1jaVNlbmRTdHJpbmdBKHB0ciBwdHIgbG9uZyBsb25nKSBtY2lTZW5kU3RyaW5nCisgNTEgc3RkY2FsbCBtY2lTZW5kU3RyaW5nQShzdHIgcHRyIGxvbmcgbG9uZykgbWNpU2VuZFN0cmluZwogIDUyIHN0dWIgbWNpU2VuZFN0cmluZ1cKICA1MyBzdHViIG1jaVNldERyaXZlckRhdGEKICA1NCBzdHViIG1jaVNldFlpZWxkUHJvYwpkaWZmIC0tZ2l0IGEvcmVsYXkzMi93c29jazMyLnNwZWMgYi9yZWxheTMyL3dzb2NrMzIuc3BlYwppbmRleCBkZTE4YmNlLi5iMWI0OWY1IDEwMDY0NAotLS0gYS9yZWxheTMyL3dzb2NrMzIuc3BlYworKysgYi9yZWxheTMyL3dzb2NrMzIuc3BlYwpAQCAtMTAsNyArMTAsNyBAQAogMDA3IHN0ZGNhbGwgZ2V0c29ja29wdChsb25nIGxvbmcgbG9uZyBwdHIgcHRyKSBXSU5TT0NLX2dldHNvY2tvcHQzMgogMDA4IHN0ZGNhbGwgaHRvbmwobG9uZykgV0lOU09DS19odG9ubAogMDA5IHN0ZGNhbGwgaHRvbnMobG9uZykgV0lOU09DS19odG9ucwotMDEwIHN0ZGNhbGwgaW5ldF9hZGRyKHB0cikgV0lOU09DS19pbmV0X2FkZHIKKzAxMCBzdGRjYWxsIGluZXRfYWRkcihzdHIpIFdJTlNPQ0tfaW5ldF9hZGRyCiAwMTEgc3RkY2FsbCBpbmV0X250b2EocHRyKSBXSU5TT0NLX2luZXRfbnRvYTMyCiAwMTIgc3RkY2FsbCBpb2N0bHNvY2tldChsb25nIGxvbmcgcHRyKSBXSU5TT0NLX2lvY3Rsc29ja2V0MzIKIDAxMyBzdGRjYWxsIGxpc3Rlbihsb25nIGxvbmcpIFdJTlNPQ0tfbGlzdGVuMzIKZGlmZiAtLWdpdCBhL3NjaGVkdWxlci9NYWtlZmlsZS5pbiBiL3NjaGVkdWxlci9NYWtlZmlsZS5pbgppbmRleCBjMGIwYTJlLi5jMjczZGI2IDEwMDY0NAotLS0gYS9zY2hlZHVsZXIvTWFrZWZpbGUuaW4KKysrIGIvc2NoZWR1bGVyL01ha2VmaWxlLmluCkBAIC02LDYgKzYsNyBAQAogTU9EVUxFICAgID0gc2NoZWR1bGVyCiAKIENfU1JDUyA9IFwKKwljbGllbnQuYyBcCiAJY3JpdHNlY3Rpb24uYyBcCiAJZXZlbnQuYyBcCiAJaGFuZGxlLmMgXApkaWZmIC0tZ2l0IGEvc2NoZWR1bGVyL2NsaWVudC5jIGIvc2NoZWR1bGVyL2NsaWVudC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3OTEwYjMKLS0tIC9kZXYvbnVsbAorKysgYi9zY2hlZHVsZXIvY2xpZW50LmMKQEAgLTAsMCArMSwzMDggQEAKKy8qCisgKiBDbGllbnQgcGFydCBvZiB0aGUgY2xpZW50L3NlcnZlciBjb21tdW5pY2F0aW9uCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IEFsZXhhbmRyZSBKdWxsaWFyZAorICovCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPHN5cy91aW8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgInByb2Nlc3MuaCIKKyNpbmNsdWRlICJ0aHJlYWQuaCIKKyNpbmNsdWRlICJzZXJ2ZXIuaCIKKyNpbmNsdWRlICJ3aW5lcnJvci5oIgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIENMSUVOVF9TZW5kUmVxdWVzdF92CisgKgorICogU2VuZCBhIHJlcXVlc3QgdG8gdGhlIHNlcnZlci4KKyAqLworc3RhdGljIHZvaWQgQ0xJRU5UX1NlbmRSZXF1ZXN0X3YoIGVudW0gcmVxdWVzdCByZXEsIGludCBwYXNzX2ZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpb3ZlYyAqdmVjLCBpbnQgdmVjbGVuICkKK3sKKyAgICBUSERCICp0aGRiID0gVEhSRUFEX0N1cnJlbnQoKTsKKyAgICBzdHJ1Y3QgeyBzdHJ1Y3QgY21zZ2hkciBoZHI7IGludCBmZDsgfSBjbXNnID0KKyAgICAgICAgICAgICAgICAgICAgICAgICB7IHsgc2l6ZW9mKGNtc2cpLCBTT0xfU09DS0VULCBTQ01fUklHSFRTIH0sIHBhc3NfZmQgfTsKKyAgICBzdHJ1Y3QgbXNnaGRyIG1zZ2hkcjsKKyAgICBzdHJ1Y3QgaGVhZGVyIGhlYWQ7CisgICAgaW50IGksIHJldCwgbGVuOworCisgICAgbXNnaGRyLm1zZ19uYW1lICAgID0gTlVMTDsKKyAgICBtc2doZHIubXNnX25hbWVsZW4gPSAwOworCisgICAgYXNzZXJ0KCB2ZWNsZW4gPiAwICk7CisKKyAgICB2ZWNbMF0uaW92X2Jhc2UgICA9ICZoZWFkOworICAgIHZlY1swXS5pb3ZfbGVuICAgID0gc2l6ZW9mKGhlYWQpOworICAgIG1zZ2hkci5tc2dfaW92ICAgID0gdmVjOworICAgIG1zZ2hkci5tc2dfaW92bGVuID0gdmVjbGVuOworICAgIGZvciAoaSA9IGxlbiA9IDA7IGkgPCB2ZWNsZW47IGkrKykgbGVuICs9IHZlY1tpXS5pb3ZfbGVuOworCisgICAgYXNzZXJ0KCBsZW4gPD0gTUFYX01TR19MRU5HVEggKTsKKyAgICBoZWFkLnR5cGUgPSByZXE7CisgICAgaGVhZC5sZW4gID0gbGVuOworICAgIGhlYWQuc2VxICA9IHRoZGItPnNlcSsrOworCisgICAgaWYgKHBhc3NfZmQgPT0gLTEpICAvKiBubyBmZCB0byBwYXNzICovCisgICAgeworICAgICAgICBtc2doZHIubXNnX2NvbnRyb2wgPSBOVUxMOworICAgICAgICBtc2doZHIubXNnX2NvbnRyb2xsZW4gPSAwOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtc2doZHIubXNnX2NvbnRyb2wgPSAmY21zZzsKKyAgICAgICAgbXNnaGRyLm1zZ19jb250cm9sbGVuID0gc2l6ZW9mKGNtc2cpOworICAgIH0KKworICAgIGlmICgocmV0ID0gc2VuZG1zZyggdGhkYi0+c29ja2V0LCAmbXNnaGRyLCAwICkpIDwgbGVuKQorICAgIHsKKyAgICAgICAgZnByaW50Ziggc3RkZXJyLCAiRmF0YWwgcHJvdG9jb2wgZXJyb3I6ICIgKTsKKyAgICAgICAgaWYgKHJldCA9PSAtMSkgcGVycm9yKCAic2VuZG1zZyIgKTsKKyAgICAgICAgZWxzZSBmcHJpbnRmKCBzdGRlcnIsICJwYXJ0aWFsIG1zZyBzZW50ICVkLyVkXG4iLCByZXQsIGxlbiApOworICAgICAgICBFeGl0VGhyZWFkKDEpOworICAgIH0KKyAgICAvKiB3ZSBwYXNzZWQgdGhlIGZkIG5vdyB3ZSBjYW4gY2xvc2UgaXQgKi8KKyAgICBpZiAocGFzc19mZCAhPSAtMSkgY2xvc2UoIHBhc3NfZmQgKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBDTElFTlRfU2VuZFJlcXVlc3QKKyAqCisgKiBTZW5kIGEgcmVxdWVzdCB0byB0aGUgc2VydmVyLgorICovCitzdGF0aWMgdm9pZCBDTElFTlRfU2VuZFJlcXVlc3QoIGVudW0gcmVxdWVzdCByZXEsIGludCBwYXNzX2ZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbiwgLi4uIC8qIGFyZ18xLCBsZW5fMSwgZXRjLiAqLyApCit7CisgICAgc3RydWN0IGlvdmVjIHZlY1sxNl07CisgICAgdmFfbGlzdCBhcmdzOworICAgIGludCBpOworCisgICAgbisrOyAgLyogZm9yIHZlY1swXSAqLworICAgIGFzc2VydCggbiA8IDE2ICk7CisgICAgdmFfc3RhcnQoIGFyZ3MsIG4gKTsKKyAgICBmb3IgKGkgPSAxOyBpIDwgbjsgaSsrKQorICAgIHsKKyAgICAgICAgdmVjW2ldLmlvdl9iYXNlID0gdmFfYXJnKCBhcmdzLCB2b2lkICogKTsKKyAgICAgICAgdmVjW2ldLmlvdl9sZW4gID0gdmFfYXJnKCBhcmdzLCBpbnQgKTsKKyAgICB9CisgICAgdmFfZW5kKCBhcmdzICk7CisgICAgcmV0dXJuIENMSUVOVF9TZW5kUmVxdWVzdF92KCByZXEsIHBhc3NfZmQsIHZlYywgbiApOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIENMSUVOVF9XYWl0UmVwbHlfdgorICoKKyAqIFdhaXQgZm9yIGEgcmVwbHkgZnJvbSB0aGUgc2VydmVyLgorICogUmV0dXJucyB0aGUgZXJyb3IgY29kZSAob3IgMCBpZiBPSykuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgQ0xJRU5UX1dhaXRSZXBseV92KCBpbnQgKmxlbiwgaW50ICpwYXNzZWRfZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGlvdmVjICp2ZWMsIGludCB2ZWNsZW4gKQoreworICAgIFRIREIgKnRoZGIgPSBUSFJFQURfQ3VycmVudCgpOworICAgIHN0cnVjdCB7IHN0cnVjdCBjbXNnaGRyIGhkcjsgaW50IGZkOyB9IGNtc2cgPQorICAgICAgICAgICAgICAgICAgICAgICAgIHsgeyBzaXplb2YoY21zZyksIFNPTF9TT0NLRVQsIFNDTV9SSUdIVFMgfSwgLTEgfTsKKyAgICBzdHJ1Y3QgbXNnaGRyIG1zZ2hkcjsKKyAgICBzdHJ1Y3QgaGVhZGVyIGhlYWQ7CisgICAgaW50IHJldCwgcmVtYWluaW5nOworCisgICAgYXNzZXJ0KCB2ZWNsZW4gPiAwICk7CisgICAgdmVjWzBdLmlvdl9iYXNlICAgICAgID0gJmhlYWQ7CisgICAgdmVjWzBdLmlvdl9sZW4gICAgICAgID0gc2l6ZW9mKGhlYWQpOworICAgIG1zZ2hkci5tc2dfbmFtZSAgICAgICA9IE5VTEw7CisgICAgbXNnaGRyLm1zZ19uYW1lbGVuICAgID0gMDsKKyAgICBtc2doZHIubXNnX2lvdiAgICAgICAgPSB2ZWM7CisgICAgbXNnaGRyLm1zZ19pb3ZsZW4gICAgID0gdmVjbGVuOworICAgIG1zZ2hkci5tc2dfY29udHJvbCAgICA9ICZjbXNnOworICAgIG1zZ2hkci5tc2dfY29udHJvbGxlbiA9IHNpemVvZihjbXNnKTsKKworICAgIGlmICgocmV0ID0gcmVjdm1zZyggdGhkYi0+c29ja2V0LCAmbXNnaGRyLCAwICkpID09IC0xKQorICAgIHsKKyAgICAgICAgZnByaW50Ziggc3RkZXJyLCAiRmF0YWwgcHJvdG9jb2wgZXJyb3I6ICIgKTsKKyAgICAgICAgcGVycm9yKCJyZWN2bXNnIik7CisgICAgICAgIEV4aXRUaHJlYWQoMSk7CisgICAgfQorICAgIGlmIChyZXQgPCBzaXplb2YoaGVhZCkpCisgICAgeworICAgICAgICBmcHJpbnRmKCBzdGRlcnIsCisgICAgICAgICAgICAgICAgICJGYXRhbCBwcm90b2NvbCBlcnJvcjogcGFydGlhbCBoZWFkZXIgcmVjZWl2ZWQgJWQvJWRcbiIsCisgICAgICAgICAgICAgICAgIHJldCwgc2l6ZW9mKGhlYWQpKTsKKyAgICAgICAgRXhpdFRocmVhZCgxKTsKKyAgICB9CisgICAgaWYgKChoZWFkLmxlbiA8IHNpemVvZihoZWFkKSkgfHwgKGhlYWQubGVuID4gTUFYX01TR19MRU5HVEgpKQorICAgIHsKKyAgICAgICAgZnByaW50Ziggc3RkZXJyLCAiRmF0YWwgcHJvdG9jb2wgZXJyb3I6IGhlYWRlciBsZW5ndGggJWRcbiIsCisgICAgICAgICAgICAgICAgIGhlYWQubGVuICk7CisgICAgICAgIEV4aXRUaHJlYWQoMSk7CisgICAgfQorICAgIGlmIChoZWFkLnNlcSAhPSB0aGRiLT5zZXErKykKKyAgICB7CisgICAgICAgIGZwcmludGYoIHN0ZGVyciwKKyAgICAgICAgICAgICAgICAgIkZhdGFsIHByb3RvY29sIGVycm9yOiBzZXF1ZW5jZSAlMDh4IGluc3RlYWQgb2YgJTA4eFxuIiwKKyAgICAgICAgICAgICAgICAgaGVhZC5zZXEsIHRoZGItPnNlcSAtIDEgKTsKKyAgICAgICAgRXhpdFRocmVhZCgxKTsKKyAgICB9CisKKyAgICBpZiAoaGVhZC50eXBlICE9IEVSUk9SX1NVQ0NFU1MpCisgICAgeworICAgICAgICBTZXRMYXN0RXJyb3IoIGhlYWQudHlwZSApOworICAgIH0KKyAgICBlbHNlIGlmIChwYXNzZWRfZmQpCisgICAgeworICAgICAgICAqcGFzc2VkX2ZkID0gY21zZy5mZDsKKyAgICAgICAgY21zZy5mZCA9IC0xOworICAgIH0KKworICAgIGlmIChsZW4pICpsZW4gPSByZXQgLSBzaXplb2YoaGVhZCk7CisgICAgaWYgKGNtc2cuZmQgIT0gLTEpIGNsb3NlKCBjbXNnLmZkICk7CisgICAgcmVtYWluaW5nID0gaGVhZC5sZW4gLSByZXQ7CisgICAgd2hpbGUgKHJlbWFpbmluZyA+IDApICAvKiBkcm9wIHJlbWFpbmluZyBkYXRhICovCisgICAgeworICAgICAgICBjaGFyIGJ1ZmZlclsxMDI0XTsKKyAgICAgICAgaW50IGxlbiA9IHJlbWFpbmluZyA8IHNpemVvZihidWZmZXIpID8gcmVtYWluaW5nIDogc2l6ZW9mKGJ1ZmZlcik7CisgICAgICAgIGlmICgobGVuID0gcmVjdiggdGhkYi0+c29ja2V0LCBidWZmZXIsIGxlbiwgMCApKSA9PSAtMSkKKyAgICAgICAgeworICAgICAgICAgICAgZnByaW50Ziggc3RkZXJyLCAiRmF0YWwgcHJvdG9jb2wgZXJyb3I6ICIgKTsKKyAgICAgICAgICAgIHBlcnJvciggInJlY3YiICk7CisgICAgICAgICAgICBFeGl0VGhyZWFkKDEpOworICAgICAgICB9CisgICAgICAgIHJlbWFpbmluZyAtPSBsZW47CisgICAgfQorCisgICAgcmV0dXJuIGhlYWQudHlwZTsgIC8qIGVycm9yIGNvZGUgKi8KK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBDTElFTlRfV2FpdFJlcGx5CisgKgorICogV2FpdCBmb3IgYSByZXBseSBmcm9tIHRoZSBzZXJ2ZXIuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgQ0xJRU5UX1dhaXRSZXBseSggaW50ICpsZW4sIGludCAqcGFzc2VkX2ZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbiwgLi4uIC8qIGFyZ18xLCBsZW5fMSwgZXRjLiAqLyApCit7CisgICAgc3RydWN0IGlvdmVjIHZlY1sxNl07CisgICAgdmFfbGlzdCBhcmdzOworICAgIGludCBpOworCisgICAgbisrOyAgLyogZm9yIHZlY1swXSAqLworICAgIGFzc2VydCggbiA8IDE2ICk7CisgICAgdmFfc3RhcnQoIGFyZ3MsIG4gKTsKKyAgICBmb3IgKGkgPSAxOyBpIDwgbjsgaSsrKQorICAgIHsKKyAgICAgICAgdmVjW2ldLmlvdl9iYXNlID0gdmFfYXJnKCBhcmdzLCB2b2lkICogKTsKKyAgICAgICAgdmVjW2ldLmlvdl9sZW4gID0gdmFfYXJnKCBhcmdzLCBpbnQgKTsKKyAgICB9CisgICAgdmFfZW5kKCBhcmdzICk7CisgICAgcmV0dXJuIENMSUVOVF9XYWl0UmVwbHlfdiggbGVuLCBwYXNzZWRfZmQsIHZlYywgbiApOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIHNlbmRfbmV3X3RocmVhZAorICoKKyAqIFNlbmQgYSBuZXcgdGhyZWFkIHJlcXVlc3QuIEhlbHBlciBmdW5jdGlvbiBmb3IgQ0xJRU5UX05ld1RocmVhZC4KKyAqLworc3RhdGljIGludCBzZW5kX25ld190aHJlYWQoIFRIREIgKnRoZGIgKQoreworICAgIHN0cnVjdCBuZXdfdGhyZWFkX3JlcXVlc3QgcmVxdWVzdDsKKyAgICBzdHJ1Y3QgbmV3X3RocmVhZF9yZXBseSByZXBseTsKKyAgICBpbnQgbGVuLCBmZFsyXTsKKworICAgIGlmIChzb2NrZXRwYWlyKCBBRl9VTklYLCBTT0NLX1NUUkVBTSwgUEZfVU5JWCwgZmQgKSA9PSAtMSkKKyAgICB7CisgICAgICAgIFNldExhc3RFcnJvciggRVJST1JfVE9PX01BTllfT1BFTl9GSUxFUyApOyAgLyogRklYTUUgKi8KKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHJlcXVlc3QucGlkID0gdGhkYi0+cHJvY2Vzcy0+c2VydmVyX3BpZDsKKyAgICBDTElFTlRfU2VuZFJlcXVlc3QoIFJFUV9ORVdfVEhSRUFELCBmZFsxXSwgMSwgJnJlcXVlc3QsIHNpemVvZihyZXF1ZXN0KSApOworCisgICAgaWYgKENMSUVOVF9XYWl0UmVwbHkoICZsZW4sIE5VTEwsIDEsICZyZXBseSwgc2l6ZW9mKHJlcGx5KSApKSBnb3RvIGVycm9yOworICAgIGlmIChsZW4gPCBzaXplb2YocmVwbHkpKSBnb3RvIGVycm9yOworICAgIHRoZGItPnNlcnZlcl90aWQgPSByZXBseS50aWQ7CisgICAgdGhkYi0+cHJvY2Vzcy0+c2VydmVyX3BpZCA9IHJlcGx5LnBpZDsKKyAgICBpZiAodGhkYi0+c29ja2V0ICE9IC0xKSBjbG9zZSggdGhkYi0+c29ja2V0ICk7CisgICAgdGhkYi0+c29ja2V0ID0gZmRbMF07CisgICAgdGhkYi0+c2VxID0gMDsgIC8qIHJlc2V0IHRoZSBzZXF1ZW5jZSBudW1iZXIgZm9yIHRoZSBuZXcgZmQgKi8KKyAgICByZXR1cm4gMDsKKworIGVycm9yOgorICAgIGNsb3NlKCBmZFswXSApOworICAgIHJldHVybiAtMTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBDTElFTlRfTmV3VGhyZWFkCisgKgorICogU2VuZCBhIG5ldyB0aHJlYWQgcmVxdWVzdC4KKyAqLworaW50IENMSUVOVF9OZXdUaHJlYWQoIFRIREIgKnRoZGIgKQoreworICAgIGV4dGVybiBCT09MMzIgVEhSRUFEX0luaXREb25lOworCisgICAgaWYgKCFUSFJFQURfSW5pdERvbmUpICAvKiBmaXJzdCB0aHJlYWQgLT4gc3RhcnQgdGhlIHNlcnZlciAqLworICAgIHsKKyAgICAgICAgaW50IHRtcGZkWzJdOworICAgICAgICBjaGFyIGJ1ZmZlclsxNl07CisKKyAgICAgICAgaWYgKHNvY2tldHBhaXIoIEFGX1VOSVgsIFNPQ0tfU1RSRUFNLCBQRl9VTklYLCB0bXBmZCApID09IC0xKQorICAgICAgICB7CisgICAgICAgICAgICBwZXJyb3IoInNvY2tldHBhaXIiKTsKKyAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgIH0KKyAgICAgICAgc3dpdGNoKGZvcmsoKSkKKyAgICAgICAgeworICAgICAgICBjYXNlIC0xOiAgLyogZXJyb3IgKi8KKyAgICAgICAgICAgIHBlcnJvcigiZm9yayIpOworICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgY2FzZSAwOiAgLyogY2hpbGQgKi8KKyAgICAgICAgICAgIGNsb3NlKCB0bXBmZFswXSApOworICAgICAgICAgICAgc3ByaW50ZiggYnVmZmVyLCAiJWQiLCB0bXBmZFsxXSApOworI2lmZGVmIEVYRUNfU0VSVkVSCisgICAgICAgICAgICBleGVjbHAoICJ3aW5lc2VydmVyIiwgIndpbmVzZXJ2ZXIiLCBidWZmZXIsIE5VTEwgKTsKKyAgICAgICAgICAgIGV4ZWNsKCAiL3Vzci9sb2NhbC9iaW4vd2luZXNlcnZlciIsICJ3aW5lc2VydmVyIiwgYnVmZmVyLCBOVUxMICk7CisgICAgICAgICAgICBleGVjbCggIi4vc2VydmVyL3dpbmVzZXJ2ZXIiLCAid2luZXNlcnZlciIsIGJ1ZmZlciwgTlVMTCApOworI2VuZGlmCisgICAgICAgICAgICBzZXJ2ZXJfbWFpbl9sb29wKCB0bXBmZFsxXSApOworICAgICAgICAgICAgZXhpdCgwKTsKKyAgICAgICAgZGVmYXVsdDogIC8qIHBhcmVudCAqLworICAgICAgICAgICAgY2xvc2UoIHRtcGZkWzFdICk7CisgICAgICAgICAgICBTRVRfQ1VSX1RIUkVBRCggdGhkYiApOworICAgICAgICAgICAgVEhSRUFEX0luaXREb25lID0gVFJVRTsKKyAgICAgICAgICAgIHRoZGItPnNvY2tldCA9IHRtcGZkWzBdOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gc2VuZF9uZXdfdGhyZWFkKCB0aGRiICk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgQ0xJRU5UX0luaXRUaHJlYWQKKyAqCisgKiBTZW5kIGFuIGluaXQgdGhyZWFkIHJlcXVlc3QuIFJldHVybiAwIGlmIE9LLgorICovCitpbnQgQ0xJRU5UX0luaXRUaHJlYWQodm9pZCkKK3sKKyAgICBUSERCICp0aGRiID0gVEhSRUFEX0N1cnJlbnQoKTsKKyAgICBzdHJ1Y3QgaW5pdF90aHJlYWRfcmVxdWVzdCBpbml0OworICAgIGludCBsZW4gPSBzdHJsZW4oIHRoZGItPnByb2Nlc3MtPmVudl9kYi0+Y21kX2xpbmUgKTsKKworICAgIGluaXQucGlkID0gZ2V0cGlkKCk7CisgICAgbGVuID0gTUlOKCBsZW4sIE1BWF9NU0dfTEVOR1RIIC0gc2l6ZW9mKGluaXQpICk7CisKKyAgICBDTElFTlRfU2VuZFJlcXVlc3QoIFJFUV9JTklUX1RIUkVBRCwgLTEsIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAmaW5pdCwgc2l6ZW9mKGluaXQpLAorICAgICAgICAgICAgICAgICAgICAgICAgdGhkYi0+cHJvY2Vzcy0+ZW52X2RiLT5jbWRfbGluZSwgbGVuICk7CisgICAgcmV0dXJuIENMSUVOVF9XYWl0UmVwbHkoIE5VTEwsIE5VTEwsIE5VTEwsIDAgKTsKK30KZGlmZiAtLWdpdCBhL3NjaGVkdWxlci9rMzJvYmouYyBiL3NjaGVkdWxlci9rMzJvYmouYwppbmRleCAzYjkxYWI1Li45ODlkMzE5IDEwMDY0NAotLS0gYS9zY2hlZHVsZXIvazMyb2JqLmMKKysrIGIvc2NoZWR1bGVyL2szMm9iai5jCkBAIC0xNDYsNyArMTQ2LDggQEAKICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgIH0KICAgICBlbnRyeS0+bmV4dCA9IEszMk9CSl9GaXJzdEVudHJ5OwotICAgIGVudHJ5LT5vYmogPSBvYmo7CisgICAgZW50cnktPm9iaiAgPSBvYmo7CisgICAgZW50cnktPmxlbiAgPSBsZW47CiAgICAgbHN0cmNweTMyQSggZW50cnktPm5hbWUsIG5hbWUgKTsKICAgICBLMzJPQkpfRmlyc3RFbnRyeSA9IGVudHJ5OwogICAgIFNZU1RFTV9VTkxPQ0soKTsKZGlmZiAtLWdpdCBhL3NjaGVkdWxlci9wcm9jZXNzLmMgYi9zY2hlZHVsZXIvcHJvY2Vzcy5jCmluZGV4IDNlYmM2OWIuLmMyMTNkMmEgMTAwNjQ0Ci0tLSBhL3NjaGVkdWxlci9wcm9jZXNzLmMKKysrIGIvc2NoZWR1bGVyL3Byb2Nlc3MuYwpAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgIndpbmVycm9yLmgiCiAjaW5jbHVkZSAicGVfaW1hZ2UuaCIKICNpbmNsdWRlICJ0YXNrLmgiCisjaW5jbHVkZSAic2VydmVyLmgiCiAjaW5jbHVkZSAiZGVidWcuaCIKIAogLyogUHJvY2VzcyBzZWxmLWhhbmRsZSAqLwpAQCAtMTEyLDYgKzExMywxMCBAQAogICAgIEZJTEVfU2V0RmlsZVR5cGUoIHBkYi0+ZW52X2RiLT5oU3Rkb3V0LCBGSUxFX1RZUEVfQ0hBUiApOwogICAgIEZJTEVfU2V0RmlsZVR5cGUoIHBkYi0+ZW52X2RiLT5oU3RkZXJyLCBGSUxFX1RZUEVfQ0hBUiApOwogCisgICAgLyogQnVpbGQgdGhlIGNvbW1hbmQtbGluZSAqLworCisgICAgcGRiLT5lbnZfZGItPmNtZF9saW5lID0gSEVBUF9zdHJkdXBBKCBTeXN0ZW1IZWFwLCAwLCAia2VybmVsMzIiICk7CisKICAgICAvKiBCdWlsZCB0aGUgZW52aXJvbm1lbnQgc3RyaW5ncyAqLwogCiAgICAgcmV0dXJuIEVOVl9CdWlsZEVudmlyb25tZW50KCBwZGIgKTsKQEAgLTIxMCw3ICsyMTUsNiBAQAogICovCiBCT09MMzIgUFJPQ0VTU19Jbml0KHZvaWQpCiB7Ci0gICAgZXh0ZXJuIEJPT0wzMiBUSFJFQURfSW5pdERvbmU7CiAgICAgUERCMzIgKnBkYjsKICAgICBUSERCICp0aGRiOwogCkBAIC0yMjUsMTIgKzIyOSwxMyBAQAogICAgIGlmICghKHBkYiA9IFBST0NFU1NfQ3JlYXRlUERCKCBOVUxMICkpKSByZXR1cm4gRkFMU0U7CiAgICAgaWYgKCEodGhkYiA9IFRIUkVBRF9DcmVhdGUoIHBkYiwgMCwgRkFMU0UsIE5VTEwsIE5VTEwgKSkpIHJldHVybiBGQUxTRTsKICAgICB0aGRiLT51bml4X3BpZCA9IGdldHBpZCgpOwotICAgIFNFVF9DVVJfVEhSRUFEKCB0aGRiICk7Ci0gICAgVEhSRUFEX0luaXREb25lID0gVFJVRTsKIAogICAgIC8qIENyZWF0ZSB0aGUgZW52aXJvbm1lbnQgREIgb2YgdGhlIGZpcnN0IHByb2Nlc3MgKi8KICAgICBpZiAoIVBST0NFU1NfQnVpbGRFbnZEQiggcGRiICkpIHJldHVybiBGQUxTRTsKIAorICAgIC8qIEluaXRpYWxpemUgdGhlIGZpcnN0IHRocmVhZCAqLworICAgIGlmIChDTElFTlRfSW5pdFRocmVhZCgpKSByZXR1cm4gRkFMU0U7CisKICAgICByZXR1cm4gVFJVRTsKIH0KIApkaWZmIC0tZ2l0IGEvc2NoZWR1bGVyL3N5c2RlcHMuYyBiL3NjaGVkdWxlci9zeXNkZXBzLmMKaW5kZXggZDc2OTg4YS4uMzkwYzY4YyAxMDA2NDQKLS0tIGEvc2NoZWR1bGVyL3N5c2RlcHMuYworKysgYi9zY2hlZHVsZXIvc3lzZGVwcy5jCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KICNpbmNsdWRlICJ0aHJlYWQuaCIKKyNpbmNsdWRlICJzZXJ2ZXIuaCIKICNpbmNsdWRlICJ3aW5iYXNlLmgiCiAjaW5jbHVkZSAiZGVidWcuaCIKIApAQCAtODIsNiArODMsNyBAQAogICAgIExQVEhSRUFEX1NUQVJUX1JPVVRJTkUgZnVuYyA9IChMUFRIUkVBRF9TVEFSVF9ST1VUSU5FKXRoZGItPmVudHJ5X3BvaW50OwogICAgIHRoZGItPnVuaXhfcGlkID0gZ2V0cGlkKCk7CiAgICAgU0VUX0ZTKCB0aGRiLT50ZWJfc2VsICk7CisgICAgQ0xJRU5UX0luaXRUaHJlYWQoKTsKICAgICBFeGl0VGhyZWFkKCBmdW5jKCB0aGRiLT5lbnRyeV9hcmcgKSApOwogfQogI2VuZGlmICAvKiBfX2xpbnV4X18gKi8KQEAgLTk5LDYgKzEwMSw4IEBACiAgICAgaWYgKGNsb25lKCAoaW50ICgqKSh2b2lkICopKVNZU0RFUFNfU3RhcnRUaHJlYWQsIHRocmVhZC0+dGViLnN0YWNrX3RvcCwKICAgICAgICAgICAgICAgIENMT05FX1ZNIHwgQ0xPTkVfRlMgfCBDTE9ORV9GSUxFUyB8IFNJR0NITEQsIHRocmVhZCApIDwgMCkKICAgICAgICAgcmV0dXJuIC0xOworICAgIC8qIEZJWE1FOiBjbG9zZSB0aGUgY2hpbGQgc29ja2V0IGluIHRoZSBwYXJlbnQgcHJvY2VzcyAqLworLyogICAgY2xvc2UoIHRocmVhZC0+c29ja2V0ICk7Ki8KICNlbHNlCiAgICAgRklYTUUodGhyZWFkLCAiQ3JlYXRlVGhyZWFkOiBzdHViXG4iICk7CiAjZW5kaWYgIC8qIF9fbGludXhfXyAqLwpkaWZmIC0tZ2l0IGEvc2NoZWR1bGVyL3RocmVhZC5jIGIvc2NoZWR1bGVyL3RocmVhZC5jCmluZGV4IDExMzdkMzUuLmU4ODFlMDUgMTAwNjQ0Ci0tLSBhL3NjaGVkdWxlci90aHJlYWQuYworKysgYi9zY2hlZHVsZXIvdGhyZWFkLmMKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlICJzZWxlY3RvcnMuaCIKICNpbmNsdWRlICJtaXNjZW11LmgiCiAjaW5jbHVkZSAid2lubnQuaCIKKyNpbmNsdWRlICJzZXJ2ZXIuaCIKICNpbmNsdWRlICJkZWJ1Zy5oIgogCiAjaWZuZGVmIF9faTM4Nl9fCkBAIC0xNTIsNiArMTUzLDcgQEAKICAgICB0aGRiLT5leGl0X2NvZGUgICAgICAgPSAweDEwMzsgLyogU1RJTExfQUNUSVZFICovCiAgICAgdGhkYi0+ZW50cnlfcG9pbnQgICAgID0gc3RhcnRfYWRkcjsKICAgICB0aGRiLT5lbnRyeV9hcmcgICAgICAgPSBwYXJhbTsKKyAgICB0aGRiLT5zb2NrZXQgICAgICAgICAgPSAtMTsKIAogICAgIC8qIEFsbG9jYXRlIHRoZSBzdGFjayAqLwogCkBAIC0xOTksNiArMjAxLDEwIEBACiAKICAgICBpZiAoISh0aGRiLT5ldmVudCA9IEVWRU5UX0NyZWF0ZSggVFJVRSwgRkFMU0UgKSkpIGdvdG8gZXJyb3I7CiAKKyAgICAvKiBDcmVhdGUgdGhlIHRocmVhZCBzb2NrZXQgKi8KKworICAgIGlmIChDTElFTlRfTmV3VGhyZWFkKCB0aGRiICkpIGdvdG8gZXJyb3I7CisKICAgICAvKiBJbml0aWFsaXplIHRoZSB0aHJlYWQgY29udGV4dCAqLwogCiAgICAgR0VUX0NTKGNzKTsKQEAgLTIxNiw2ICsyMjIsNyBAQAogICAgIHJldHVybiB0aGRiOwogCiBlcnJvcjoKKyAgICBpZiAodGhkYi0+c29ja2V0ICE9IC0xKSBjbG9zZSggdGhkYi0+c29ja2V0ICk7CiAgICAgaWYgKHRoZGItPmV2ZW50KSBLMzJPQkpfRGVjQ291bnQoIHRoZGItPmV2ZW50ICk7CiAgICAgaWYgKHRoZGItPnRlYi5zdGFja19zZWwpIFNFTEVDVE9SX0ZyZWVCbG9jayggdGhkYi0+dGViLnN0YWNrX3NlbCwgMSApOwogICAgIGlmICh0aGRiLT50ZWJfc2VsKSBTRUxFQ1RPUl9GcmVlQmxvY2soIHRoZGItPnRlYl9zZWwsIDEgKTsKQEAgLTI5OSw2ICszMDYsNyBAQAogICAgICAgICB9CiAgICAgfQogI2VuZGlmCisgICAgY2xvc2UoIHRoZGItPnNvY2tldCApOwogICAgIEszMk9CSl9EZWNDb3VudCggdGhkYi0+ZXZlbnQgKTsKICAgICBTRUxFQ1RPUl9GcmVlQmxvY2soIHRoZGItPnRlYl9zZWwsIDEgKTsKICAgICBpZiAodGhkYi0+dGViLnN0YWNrX3NlbCkgU0VMRUNUT1JfRnJlZUJsb2NrKCB0aGRiLT50ZWIuc3RhY2tfc2VsLCAxICk7CkBAIC0zMTQsNyArMzIyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVEhSRUFEX1NUQVJUX1JPVVRJTkUgc3RhcnQsIExQVk9JRCBwYXJhbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERXT1JEIGZsYWdzLCBMUERXT1JEIGlkICkKIHsKLSAgICBIQU5ETEUzMiBoYW5kbGU7CisgICAgSEFORExFMzIgaGFuZGxlID0gSU5WQUxJRF9IQU5ETEVfVkFMVUUzMjsKICAgICBCT09MMzIgaW5oZXJpdCA9IChzYSAmJiAoc2EtPm5MZW5ndGg+PXNpemVvZigqc2EpKSAmJiBzYS0+YkluaGVyaXRIYW5kbGUpOwogCiAgICAgVEhEQiAqdGhyZWFkID0gVEhSRUFEX0NyZWF0ZSggUFJPQ0VTU19DdXJyZW50KCksIHN0YWNrLApAQCAtMzI4LDYgKzMzNiw3IEBACiAgICAgcmV0dXJuIGhhbmRsZTsKIAogZXJyb3I6CisgICAgaWYgKGhhbmRsZSAhPSBJTlZBTElEX0hBTkRMRV9WQUxVRTMyKSBDbG9zZUhhbmRsZSggaGFuZGxlICk7CiAgICAgSzMyT0JKX0RlY0NvdW50KCAmdGhyZWFkLT5oZWFkZXIgKTsKICAgICByZXR1cm4gSU5WQUxJRF9IQU5ETEVfVkFMVUUzMjsKIH0KZGlmZiAtLWdpdCBhL3NlcnZlci9NYWtlZmlsZS5pbiBiL3NlcnZlci9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODgxYzUyCi0tLSAvZGV2L251bGwKKysrIGIvc2VydmVyL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsMjYgQEAKK0RFRlMgICAgICA9IEBETExGTEFHU0AgLURfX1dJTkVfXyAtRF9fV0lORV9TRVJWRVJfXworVE9QU1JDRElSID0gQHRvcF9zcmNkaXJACitUT1BPQkpESVIgPSAuLgorU1JDRElSICAgID0gQHNyY2RpckAKK1ZQQVRIICAgICA9IEBzcmNkaXJACitNT0RVTEUgICAgPSBzZXJ2ZXIKKworQ19TUkNTID0gXAorCW9iamVjdC5jIFwKKwlwcm9jZXNzLmMgXAorCXNvY2tldC5jIFwKKwl0aHJlYWQuYworCitFWFRSQV9TUkNTID0gbWFpbi5jCitNQUlOX09CSlMgPSBtYWluLm8KKworUFJPR1JBTVMgPSB3aW5lc2VydmVyCisKK2FsbDogJChNT0RVTEUpLm8gJChQUk9HUkFNUykKKworQE1BS0VfUlVMRVNACisKK3dpbmVzZXJ2ZXI6ICQoT0JKUykgJChNQUlOX09CSlMpCisJZ2NjIC1vICQoUFJPR1JBTVMpICQoT0JKUykgJChNQUlOX09CSlMpCisKKyMjIyBEZXBlbmRlbmNpZXM6CmRpZmYgLS1naXQgYS9zZXJ2ZXIvbWFpbi5jIGIvc2VydmVyL21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTk2YTc2Ci0tLSAvZGV2L251bGwKKysrIGIvc2VydmVyL21haW4uYwpAQCAtMCwwICsxLDMzIEBACisvKgorICogU2VydmVyIG1haW4gZnVuY3Rpb24KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggQWxleGFuZHJlIEp1bGxpYXJkCisgKi8KKworI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVkZSAic2VydmVyLmgiCisKK2ludCBtYWluKCBpbnQgYXJnYywgY2hhciAqYXJndltdICkKK3sKKyAgICBpbnQgZmQ7CisKKyAgICBpZiAoYXJnYyAhPSAyKSBnb3RvIGVycm9yOworICAgIGlmICghaXNkaWdpdCggKmFyZ3ZbMV0gKSkgZ290byBlcnJvcjsKKyAgICBmZCA9IGF0b2koIGFyZ3ZbMV0gKTsKKyAgICAvKiBtYWtlIHN1cmUgdGhlIGZkIGlzIHZhbGlkICovCisgICAgaWYgKGZjbnRsKCBmZCwgRl9HRVRGTCwgMCApID09IC0xKSBnb3RvIGVycm9yOworCisgICAgZnByaW50Ziggc3RkZXJyLCAiU2VydmVyOiBzdGFydGluZyAocGlkPSVkKVxuIiwgZ2V0cGlkKCkgKTsKKyAgICBzZXJ2ZXJfbWFpbl9sb29wKCBmZCApOworICAgIGZwcmludGYoIHN0ZGVyciwgIlNlcnZlcjogZXhpdGluZyAocGlkPSVkKVxuIiwgZ2V0cGlkKCkgKTsKKyAgICBleGl0KDApOworCisgZXJyb3I6ICAgIAorICAgIGZwcmludGYoIHN0ZGVyciwgIiVzOiBtdXN0IGJlIHJ1biBmcm9tIFdpbmUuXG4iLCBhcmd2WzBdICk7CisgICAgZXhpdCgxKTsKK30KZGlmZiAtLWdpdCBhL3NlcnZlci9vYmplY3QuYyBiL3NlcnZlci9vYmplY3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzI0NzYxCi0tLSAvZGV2L251bGwKKysrIGIvc2VydmVyL29iamVjdC5jCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiBTZXJ2ZXItc2lkZSBvYmplY3RzCisgKiBUaGVzZSBhcmUgdGhlIHNlcnZlciBlcXVpdmFsZW50IG9mIEszMk9CSgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCBBbGV4YW5kcmUgSnVsbGlhcmQKKyAqLworCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJzZXJ2ZXIuaCIKKyNpbmNsdWRlICJvYmplY3QuaCIKKworc3RydWN0IG9iamVjdF9uYW1lCit7CisgICAgc3RydWN0IG9iamVjdF9uYW1lICpuZXh0OworICAgIHN0cnVjdCBvYmplY3QgICAgICAqb2JqOworICAgIGludCAgICAgICAgICAgICAgICAgbGVuOworICAgIGNoYXIgICAgICAgICAgICAgICAgbmFtZVsxXTsKK307CisKKyNkZWZpbmUgTkFNRV9IQVNIX1NJWkUgMzcKKworc3RhdGljIHN0cnVjdCBvYmplY3RfbmFtZSAqbmFtZXNbTkFNRV9IQVNIX1NJWkVdOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgZ2V0X25hbWVfaGFzaCggY29uc3QgY2hhciAqbmFtZSApCit7CisgICAgaW50IGhhc2ggPSAwOworICAgIHdoaWxlICgqbmFtZSkgaGFzaCBePSAqbmFtZSsrOworICAgIHJldHVybiBoYXNoICUgTkFNRV9IQVNIX1NJWkU7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb2JqZWN0X25hbWUgKmFkZF9uYW1lKCBzdHJ1Y3Qgb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUgKQoreworICAgIHN0cnVjdCBvYmplY3RfbmFtZSAqcHRyOworICAgIGludCBoYXNoID0gZ2V0X25hbWVfaGFzaCggbmFtZSApOworICAgIGludCBsZW4gPSBzdHJsZW4oIG5hbWUgKTsKKworICAgIGlmICghKHB0ciA9IChzdHJ1Y3Qgb2JqZWN0X25hbWUgKiltYWxsb2MoIHNpemVvZigqcHRyKSArIGxlbiApKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcHRyLT5uZXh0ID0gbmFtZXNbaGFzaF07CisgICAgcHRyLT5vYmogID0gb2JqOworICAgIHB0ci0+bGVuICA9IGxlbjsKKyAgICBzdHJjcHkoIHB0ci0+bmFtZSwgbmFtZSApOworICAgIG5hbWVzW2hhc2hdID0gcHRyOworICAgIHJldHVybiBwdHI7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfbmFtZSggc3RydWN0IG9iamVjdCAqb2JqICkKK3sKKyAgICBpbnQgaGFzaCA9IGdldF9uYW1lX2hhc2goIG9iai0+bmFtZS0+bmFtZSApOworICAgIHN0cnVjdCBvYmplY3RfbmFtZSAqKnBwdHIgPSAmbmFtZXNbaGFzaF07CisgICAgd2hpbGUgKCpwcHRyICYmICpwcHRyICE9IG9iai0+bmFtZSkgcHB0ciA9ICYoKnBwdHIpLT5uZXh0OworICAgIGFzc2VydCggKnBwdHIgKTsKKyAgICAqcHB0ciA9ICgqcHB0ciktPm5leHQ7CisgICAgZnJlZSggb2JqLT5uYW1lICk7Cit9CisKKy8qIGluaXRpYWxpemUgYW4gYWxyZWFkeSBhbGxvY2F0ZWQgb2JqZWN0ICovCit2b2lkIGluaXRfb2JqZWN0KCBzdHJ1Y3Qgb2JqZWN0ICpvYmosIGNvbnN0IHN0cnVjdCBvYmplY3Rfb3BzICpvcHMsCisgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lICkKK3sKKyAgICBvYmotPnJlZmNvdW50ID0gMTsKKyAgICBvYmotPm9wcyAgICAgID0gb3BzOworICAgIGlmICghbmFtZSkgb2JqLT5uYW1lID0gTlVMTDsKKyAgICBlbHNlIG9iai0+bmFtZSA9IGFkZF9uYW1lKCBvYmosIG5hbWUgKTsKK30KKworLyogcmVsZWFzZSBhbiBvYmplY3QgKGkuZS4gZGVjcmVtZW50IGl0cyByZWZjb3VudCAqLwordm9pZCByZWxlYXNlX29iamVjdCggdm9pZCAqcHRyICkKK3sKKyAgICBzdHJ1Y3Qgb2JqZWN0ICpvYmogPSAoc3RydWN0IG9iamVjdCAqKXB0cjsKKyAgICBhc3NlcnQoIG9iai0+cmVmY291bnQgKTsKKyAgICBpZiAoIS0tb2JqLT5yZWZjb3VudCkKKyAgICB7CisgICAgICAgIGlmIChvYmotPm5hbWUpIGZyZWVfbmFtZSggb2JqICk7CisgICAgICAgIG9iai0+b3BzLT5kZXN0cm95KCBvYmogKTsKKyAgICB9Cit9CisKKy8qIGZpbmQgYW4gb2JqZWN0IGJ5IGl0cyBuYW1lOyB0aGUgcmVmY291bnQgaXMgaW5jcmVtZW50ZWQgKi8KK3N0cnVjdCBvYmplY3QgKmZpbmRfb2JqZWN0KCBjb25zdCBjaGFyICpuYW1lICkKK3sKKyAgICBpbnQgaGFzaCA9IGdldF9uYW1lX2hhc2goIG5hbWUgKTsKKyAgICBzdHJ1Y3Qgb2JqZWN0X25hbWUgKnB0ciA9IG5hbWVzW2hhc2hdOworICAgIHdoaWxlIChwdHIgJiYgc3RyY21wKCBwdHItPm5hbWUsIG5hbWUgKSkgcHRyID0gcHRyLT5uZXh0OworICAgIGlmICghcHRyKSByZXR1cm4gTlVMTDsKKyAgICBwdHItPm9iai0+cmVmY291bnQrKzsKKyAgICByZXR1cm4gcHRyLT5vYmo7Cit9CisKZGlmZiAtLWdpdCBhL3NlcnZlci9vYmplY3QuaCBiL3NlcnZlci9vYmplY3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWY2YWJlCi0tLSAvZGV2L251bGwKKysrIGIvc2VydmVyL29iamVjdC5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBXaW5lIHNlcnZlciBvYmplY3RzCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IEFsZXhhbmRyZSBKdWxsaWFyZAorICovCisKKyNpZm5kZWYgX19XSU5FX09CSkVDVF9ICisjZGVmaW5lIF9fV0lORV9PQkpFQ1RfSAorCisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKworc3RydWN0IG9iamVjdDsKK3N0cnVjdCBvYmplY3RfbmFtZTsKKworc3RydWN0IG9iamVjdF9vcHMKK3sKKyAgICB2b2lkICgqZGVzdHJveSkoc3RydWN0IG9iamVjdCAqKTsgICAgLyogZGVzdHJveSBvbiByZWZjb3VudCA9PSAwICovCit9OworCitzdHJ1Y3Qgb2JqZWN0Cit7CisgICAgdW5zaWduZWQgaW50ICAgICAgICAgICAgICByZWZjb3VudDsKKyAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X29wcyAgKm9wczsKKyAgICBzdHJ1Y3Qgb2JqZWN0X25hbWUgICAgICAgKm5hbWU7Cit9OworCitleHRlcm4gdm9pZCBpbml0X29iamVjdCggc3RydWN0IG9iamVjdCAqb2JqLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X29wcyAqb3BzLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5hbWUgKTsKKy8qIHJlbGVhc2Ugb2JqZWN0IGNhbiB0YWtlIGFueSBwb2ludGVyLCBidXQgeW91IGJldHRlciBtYWtlIHN1cmUgdGhhdCAqLworLyogdGhlIHRoaW5nIHBvaW50ZWQgdG8gc3RhcnRzIHdpdGggYSBzdHJ1Y3Qgb2JqZWN0Li4uICovCitleHRlcm4gdm9pZCByZWxlYXNlX29iamVjdCggdm9pZCAqb2JqICk7CisKKy8qIHJlcXVlc3QgaGFuZGxlcnMgKi8KKworc3RydWN0IHRocmVhZDsKK3R5cGVkZWYgdm9pZCAoKnJlcV9oYW5kbGVyKSggdm9pZCAqZGF0YSwgaW50IGxlbiwgaW50IGZkLCBzdHJ1Y3QgdGhyZWFkICpzZWxmKTsKK2V4dGVybiBjb25zdCByZXFfaGFuZGxlciByZXFfaGFuZGxlcnNbUkVRX05CX1JFUVVFU1RTXTsKKworLyogc29ja2V0IGZ1bmN0aW9ucyAqLworCitleHRlcm4gaW50IGFkZF9jbGllbnQoIGludCBjbGllbnRfZmQsIHN0cnVjdCB0aHJlYWQgKnNlbGYgKTsKK2V4dGVybiB2b2lkIHJlbW92ZV9jbGllbnQoIGludCBjbGllbnRfZmQgKTsKK2V4dGVybiBpbnQgZ2V0X2luaXRpYWxfY2xpZW50X2ZkKHZvaWQpOworZXh0ZXJuIHZvaWQgc2V0X3RpbWVvdXQoIGludCBjbGllbnRfZmQsIHN0cnVjdCB0aW1ldmFsICp3aGVuICk7CitleHRlcm4gaW50IHNlbmRfcmVwbHkoIGludCBjbGllbnRfZmQsIGludCBlcnJfY29kZSwgaW50IHBhc3NfZmQsCisgICAgICAgICAgICAgICAgICAgICAgIGludCBuLCAuLi4gLyogYXJnXzEsIGxlbl8xLCAuLi4sIGFyZ19uLCBsZW5fbiAqLyApOworCisvKiBwcm9jZXNzIGZ1bmN0aW9ucyAqLworCitzdHJ1Y3QgcHJvY2VzczsKKworZXh0ZXJuIHN0cnVjdCBwcm9jZXNzICpjcmVhdGVfcHJvY2Vzcyh2b2lkKTsKK2V4dGVybiBzdHJ1Y3QgcHJvY2VzcyAqZ2V0X3Byb2Nlc3NfZnJvbV9pZCggdm9pZCAqaWQgKTsKKworI2VuZGlmICAvKiBfX1dJTkVfT0JKRUNUX0ggKi8KZGlmZiAtLWdpdCBhL3NlcnZlci9wcm9jZXNzLmMgYi9zZXJ2ZXIvcHJvY2Vzcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1NjkwZGIKLS0tIC9kZXYvbnVsbAorKysgYi9zZXJ2ZXIvcHJvY2Vzcy5jCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBTZXJ2ZXItc2lkZSBwcm9jZXNzIG1hbmFnZW1lbnQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggQWxleGFuZHJlIEp1bGxpYXJkCisgKi8KKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVkZSAic2VydmVyLmgiCisjaW5jbHVkZSAib2JqZWN0LmgiCisKKworLyogcHJvY2VzcyBzdHJ1Y3R1cmU7IG5vdCBtdWNoIGZvciBub3cuLi4gKi8KKworc3RydWN0IHByb2Nlc3MKK3sKKyAgICBzdHJ1Y3Qgb2JqZWN0ICAgb2JqOyAgICAgICAvKiBvYmplY3QgaGVhZGVyICovCisgICAgc3RydWN0IHByb2Nlc3MgKm5leHQ7ICAgICAgLyogc3lzdGVtLXdpZGUgcHJvY2VzcyBsaXN0ICovCisgICAgc3RydWN0IHByb2Nlc3MgKnByZXY7Cit9OworCitzdGF0aWMgc3RydWN0IHByb2Nlc3MgKmZpcnN0X3Byb2Nlc3M7CisKKy8qIHByb2Nlc3Mgb3BlcmF0aW9ucyAqLworCitzdGF0aWMgdm9pZCBkZXN0cm95X3Byb2Nlc3MoIHN0cnVjdCBvYmplY3QgKm9iaiApOworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9iamVjdF9vcHMgcHJvY2Vzc19vcHMgPQoreworICAgIGRlc3Ryb3lfcHJvY2VzcworfTsKKworLyogY3JlYXRlIGEgbmV3IHByb2Nlc3MgKi8KK3N0cnVjdCBwcm9jZXNzICpjcmVhdGVfcHJvY2Vzcyh2b2lkKQoreworICAgIHN0cnVjdCBwcm9jZXNzICpwcm9jZXNzOworCisgICAgaWYgKCEocHJvY2VzcyA9IG1hbGxvYyggc2l6ZW9mKCpwcm9jZXNzKSApKSkgcmV0dXJuIE5VTEw7CisgICAgaW5pdF9vYmplY3QoICZwcm9jZXNzLT5vYmosICZwcm9jZXNzX29wcywgTlVMTCApOworICAgIHByb2Nlc3MtPm5leHQgPSBmaXJzdF9wcm9jZXNzOworICAgIHByb2Nlc3MtPnByZXYgPSBOVUxMOworICAgIGZpcnN0X3Byb2Nlc3MgPSBwcm9jZXNzOworICAgIHJldHVybiBwcm9jZXNzOworfQorCisvKiBkZXN0cm95IGEgcHJvY2VzcyB3aGVuIGl0cyByZWZjb3VudCBpcyAwICovCitzdGF0aWMgdm9pZCBkZXN0cm95X3Byb2Nlc3MoIHN0cnVjdCBvYmplY3QgKm9iaiApCit7CisgICAgc3RydWN0IHByb2Nlc3MgKnByb2Nlc3MgPSAoc3RydWN0IHByb2Nlc3MgKilvYmo7CisgICAgYXNzZXJ0KCBvYmotPm9wcyA9PSAmcHJvY2Vzc19vcHMgKTsKKworICAgIGlmIChwcm9jZXNzLT5uZXh0KSBwcm9jZXNzLT5uZXh0LT5wcmV2ID0gcHJvY2Vzcy0+cHJldjsKKyAgICBpZiAocHJvY2Vzcy0+cHJldikgcHJvY2Vzcy0+cHJldi0+bmV4dCA9IHByb2Nlc3MtPm5leHQ7CisgICAgZWxzZSBmaXJzdF9wcm9jZXNzID0gcHJvY2Vzcy0+bmV4dDsKKyAgICBmcmVlKCBwcm9jZXNzICk7Cit9CisKKy8qIGdldCBhIHByb2Nlc3MgZnJvbSBhbiBpZCAoYW5kIGluY3JlbWVudCB0aGUgcmVmY291bnQpICovCitzdHJ1Y3QgcHJvY2VzcyAqZ2V0X3Byb2Nlc3NfZnJvbV9pZCggdm9pZCAqaWQgKQoreworICAgIHN0cnVjdCBwcm9jZXNzICpwID0gZmlyc3RfcHJvY2VzczsKKyAgICB3aGlsZSAocCAmJiAocCAhPSBpZCkpIHAgPSBwLT5uZXh0OworICAgIGlmIChwKSBwLT5vYmoucmVmY291bnQrKzsKKyAgICByZXR1cm4gcDsKK30KZGlmZiAtLWdpdCBhL3NlcnZlci9zb2NrZXQuYyBiL3NlcnZlci9zb2NrZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2E1ZTFjCi0tLSAvZGV2L251bGwKKysrIGIvc2VydmVyL3NvY2tldC5jCkBAIC0wLDAgKzEsNDY0IEBACisvKgorICogU2VydmVyLXNpZGUgc29ja2V0IGNvbW11bmljYXRpb24gZnVuY3Rpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IEFsZXhhbmRyZSBKdWxsaWFyZAorICovCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMvdWlvLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRlICJzZXJ2ZXIuaCIKKyNpbmNsdWRlICJvYmplY3QuaCIKKworLyogY2xpZW50IHN0YXRlICovCitlbnVtIHN0YXRlCit7CisgICAgUlVOTklORywgICAvKiBydW5uaW5nIG5vcm1hbGx5ICovCisgICAgU0VORElORywgICAvKiBzZW5kaW5nIHVzIGEgcmVxdWVzdCAqLworICAgIFdBSVRJTkcsICAgLyogd2FpdGluZyBmb3IgdXMgdG8gcmVwbHkgKi8KKyAgICBSRUFESU5HICAgIC8qIHJlYWRpbmcgb3VyIHJlcGx5ICovCit9OworCisvKiBjbGllbnQgdGltZW91dCAqLworc3RydWN0IHRpbWVvdXQKK3sKKyAgICBzdHJ1Y3QgdGltZXZhbCAgd2hlbjsgICAgLyogdGltZW91dCBleHBpcnkgKGFic29sdXRlIHRpbWUpICovCisgICAgc3RydWN0IHRpbWVvdXQgKm5leHQ7ICAgIC8qIG5leHQgaW4gc29ydGVkIGxpc3QgKi8KKyAgICBzdHJ1Y3QgdGltZW91dCAqcHJldjsgICAgLyogcHJldiBpbiBzb3J0ZWQgbGlzdCAqLworICAgIGludCAgICAgICAgICAgICBjbGllbnQ7ICAvKiBjbGllbnQgaWQgKi8KK307CisKKy8qIGNsaWVudCBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCBjbGllbnQKK3sKKyAgICBlbnVtIHN0YXRlICAgICAgICAgc3RhdGU7ICAgICAgICAvKiBjbGllbnQgc3RhdGUgKi8KKyAgICB1bnNpZ25lZCBpbnQgICAgICAgc2VxOyAgICAgICAgICAvKiBjdXJyZW50IHNlcXVlbmNlIG51bWJlciAqLworICAgIHN0cnVjdCBoZWFkZXIgICAgICBoZWFkOyAgICAgICAgIC8qIGN1cnJlbnQgbXNnIGhlYWRlciAqLworICAgIGNoYXIgICAgICAgICAgICAgICpkYXRhOyAgICAgICAgIC8qIGN1cnJlbnQgbXNnIGRhdGEgKi8KKyAgICBpbnQgICAgICAgICAgICAgICAgY291bnQ7ICAgICAgICAvKiBieXRlcyBzZW50L3JlY2VpdmVkIHNvIGZhciAqLworICAgIGludCAgICAgICAgICAgICAgICBwYXNzX2ZkOyAgICAgIC8qIGZkIHRvIHBhc3MgdG8gYW5kIGZyb20gdGhlIGNsaWVudCAqLworICAgIHN0cnVjdCB0aHJlYWQgICAgICpzZWxmOyAgICAgICAgIC8qIGNsaWVudCB0aHJlYWQgKG9wYXF1ZSBwb2ludGVyKSAqLworICAgIHN0cnVjdCB0aW1lb3V0ICAgICB0aW1lb3V0OyAgICAgIC8qIGNsaWVudCB0aW1lb3V0ICovCit9OworCisKK3N0YXRpYyBzdHJ1Y3QgY2xpZW50ICpjbGllbnRzW0ZEX1NFVFNJWkVdOyAgLyogY2xpZW50cyBhcnJheSAqLworc3RhdGljIGZkX3NldCByZWFkX3NldCwgd3JpdGVfc2V0OyAgICAgICAgICAvKiBjdXJyZW50IHNlbGVjdCBzZXRzICovCitzdGF0aWMgaW50IG5iX2NsaWVudHM7ICAgICAgICAgICAgICAgICAgICAgIC8qIGN1cnJlbnQgbnVtYmVyIG9mIGNsaWVudHMgKi8KK3N0YXRpYyBpbnQgbWF4X2ZkOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbWF4IGZkIGluIHVzZSAqLworc3RhdGljIGludCBpbml0aWFsX2NsaWVudF9mZDsgICAgICAgICAgICAgICAvKiBmZCBvZiB0aGUgZmlyc3QgY2xpZW50ICovCitzdGF0aWMgc3RydWN0IHRpbWVvdXQgKnRpbWVvdXRfaGVhZDsgICAgICAgIC8qIHNvcnRlZCB0aW1lb3V0cyBsaXN0IGhlYWQgKi8KK3N0YXRpYyBzdHJ1Y3QgdGltZW91dCAqdGltZW91dF90YWlsOyAgICAgICAgLyogc29ydGVkIHRpbWVvdXRzIGxpc3QgdGFpbCAqLworCisKKy8qIHNpZ25hbCBhIGNsaWVudCBwcm90b2NvbCBlcnJvciAqLworc3RhdGljIHZvaWQgcHJvdG9jb2xfZXJyb3IoIGludCBjbGllbnRfZmQsIGNvbnN0IGNoYXIgKmVyciwgLi4uICkKK3sKKyAgICB2YV9saXN0IGFyZ3M7CisKKyAgICB2YV9zdGFydCggYXJncywgZXJyICk7CisgICAgZnByaW50Ziggc3RkZXJyLCAiUHJvdG9jb2wgZXJyb3I6JWQ6ICIsIGNsaWVudF9mZCApOworICAgIHZmcHJpbnRmKCBzdGRlcnIsIGVyciwgYXJncyApOworICAgIHZhX2VuZCggYXJncyApOworfQorCisKKy8qIHNlbmQgYSBtZXNzYWdlIHRvIGEgY2xpZW50IHRoYXQgaXMgcmVhZHkgdG8gcmVjZWl2ZSBzb21ldGhpbmcgKi8KK3N0YXRpYyBpbnQgZG9fd3JpdGUoIGludCBjbGllbnRfZmQgKQoreworICAgIHN0cnVjdCBjbGllbnQgKmNsaWVudCA9IGNsaWVudHNbY2xpZW50X2ZkXTsKKyAgICBzdHJ1Y3QgaW92ZWMgdmVjWzJdOworICAgIHN0cnVjdCB7IHN0cnVjdCBjbXNnaGRyIGhkcjsgaW50IGZkOyB9IGNtc2cgPQorICAgICAgICAgICAgICAgICB7IHsgc2l6ZW9mKGNtc2cpLCBTT0xfU09DS0VULCBTQ01fUklHSFRTIH0sIGNsaWVudC0+cGFzc19mZCB9OworICAgIHN0cnVjdCBtc2doZHIgbXNnaGRyID0geyBOVUxMLCAwLCB2ZWMsIDIsIE5VTEwsIDAsIDAgfTsKKyAgICBpbnQgcmV0OworCisgICAgLyogbWFrZSBzdXJlIHdlIGhhdmUgc29tZXRoaW5nIHRvIHNlbmQgKi8KKyAgICBhc3NlcnQoIGNsaWVudC0+Y291bnQgPCBjbGllbnQtPmhlYWQubGVuICk7CisgICAgLyogbWFrZSBzdXJlIHRoZSBjbGllbnQgaXMgbGlzdGVuaW5nICovCisgICAgYXNzZXJ0KCBjbGllbnQtPnN0YXRlID09IFJFQURJTkcgKTsKKworICAgIGlmIChjbGllbnQtPmNvdW50IDwgc2l6ZW9mKGNsaWVudC0+aGVhZCkpCisgICAgeworICAgICAgICB2ZWNbMF0uaW92X2Jhc2UgPSAoY2hhciAqKSZjbGllbnQtPmhlYWQgKyBjbGllbnQtPmNvdW50OworICAgICAgICB2ZWNbMF0uaW92X2xlbiAgPSBzaXplb2YoY2xpZW50LT5oZWFkKSAtIGNsaWVudC0+Y291bnQ7CisgICAgICAgIHZlY1sxXS5pb3ZfYmFzZSA9IGNsaWVudC0+ZGF0YTsKKyAgICAgICAgdmVjWzFdLmlvdl9sZW4gID0gY2xpZW50LT5oZWFkLmxlbiAtIHNpemVvZihjbGllbnQtPmhlYWQpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB2ZWNbMF0uaW92X2Jhc2UgPSBjbGllbnQtPmRhdGEgKyBjbGllbnQtPmNvdW50IC0gc2l6ZW9mKGNsaWVudC0+aGVhZCk7CisgICAgICAgIHZlY1swXS5pb3ZfbGVuICA9IGNsaWVudC0+aGVhZC5sZW4gLSBjbGllbnQtPmNvdW50OworICAgICAgICBtc2doZHIubXNnX2lvdmxlbiA9IDE7CisgICAgfQorICAgIGlmIChjbGllbnQtPnBhc3NfZmQgIT0gLTEpCisgICAgeworICAgICAgICAvKiB3ZSBoYXZlIGFuIGZkIHRvIHNlbmQgKi8KKyAgICAgICAgbXNnaGRyLm1zZ19jb250cm9sID0gJmNtc2c7CisgICAgICAgIG1zZ2hkci5tc2dfY29udHJvbGxlbiA9IHNpemVvZihjbXNnKTsKKyAgICB9CisgICAgcmV0ID0gc2VuZG1zZyggY2xpZW50X2ZkLCAmbXNnaGRyLCAwICk7CisgICAgaWYgKHJldCA9PSAtMSkKKyAgICB7CisgICAgICAgIGlmIChlcnJubyAhPSBFUElQRSkgcGVycm9yKCJzZW5kbXNnIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgaWYgKGNsaWVudC0+cGFzc19mZCAhPSAtMSkgIC8qIFdlIHNlbnQgdGhlIGZkLCBub3cgd2UgY2FuIGNsb3NlIGl0ICovCisgICAgeworICAgICAgICBjbG9zZSggY2xpZW50LT5wYXNzX2ZkICk7CisgICAgICAgIGNsaWVudC0+cGFzc19mZCA9IC0xOworICAgIH0KKyAgICBpZiAoKGNsaWVudC0+Y291bnQgKz0gcmV0KSA8IGNsaWVudC0+aGVhZC5sZW4pIHJldHVybiAwOworCisgICAgLyogd2UgaGF2ZSBmaW5pc2hlZCB3aXRoIHRoaXMgbWVzc2FnZSAqLworICAgIGlmIChjbGllbnQtPmRhdGEpIGZyZWUoIGNsaWVudC0+ZGF0YSApOworICAgIGNsaWVudC0+ZGF0YSAgPSBOVUxMOworICAgIGNsaWVudC0+Y291bnQgPSAwOworICAgIGNsaWVudC0+c3RhdGUgPSBSVU5OSU5HOworICAgIGNsaWVudC0+c2VxKys7CisgICAgRkRfQ0xSKCBjbGllbnRfZmQsICZ3cml0ZV9zZXQgKTsKKyAgICBGRF9TRVQoIGNsaWVudF9mZCwgJnJlYWRfc2V0ICk7CisgICAgcmV0dXJuIDA7Cit9CisKKworLyogcmVhZCBhIG1lc3NhZ2UgZnJvbSBhIGNsaWVudCB0aGF0IGhhcyBzb21ldGhpbmcgdG8gc2F5ICovCitzdGF0aWMgaW50IGRvX3JlYWQoIGludCBjbGllbnRfZmQgKQoreworICAgIHN0cnVjdCBjbGllbnQgKmNsaWVudCA9IGNsaWVudHNbY2xpZW50X2ZkXTsKKyAgICBzdHJ1Y3QgaW92ZWMgdmVjOworICAgIHN0cnVjdCB7IHN0cnVjdCBjbXNnaGRyIGhkcjsgaW50IGZkOyB9IGNtc2cgPSB7IHsgc2l6ZW9mKGNtc2cpLCBTT0xfU09DS0VULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NNX1JJR0hUUyB9LCAtMSB9OworICAgIHN0cnVjdCBtc2doZHIgbXNnaGRyID0geyBOVUxMLCAwLCAmdmVjLCAxLCAmY21zZywgc2l6ZW9mKGNtc2cpLCAwIH07CisgICAgaW50IHJldDsKKworICAgIGlmIChjbGllbnQtPnN0YXRlID09IFJVTk5JTkcpIGNsaWVudC0+c3RhdGUgPSBTRU5ESU5HOworICAgIGFzc2VydCggY2xpZW50LT5zdGF0ZSA9PSBTRU5ESU5HICk7CisKKyAgICBpZiAoY2xpZW50LT5jb3VudCA8IHNpemVvZihjbGllbnQtPmhlYWQpKQorICAgIHsKKyAgICAgICAgdmVjLmlvdl9iYXNlID0gKGNoYXIgKikmY2xpZW50LT5oZWFkICsgY2xpZW50LT5jb3VudDsKKyAgICAgICAgdmVjLmlvdl9sZW4gID0gc2l6ZW9mKGNsaWVudC0+aGVhZCkgLSBjbGllbnQtPmNvdW50OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpZiAoIWNsaWVudC0+ZGF0YSAmJgorICAgICAgICAgICAgIShjbGllbnQtPmRhdGEgPSBtYWxsb2MoY2xpZW50LT5oZWFkLmxlbi1zaXplb2YoY2xpZW50LT5oZWFkKSkpKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB2ZWMuaW92X2Jhc2UgPSBjbGllbnQtPmRhdGEgKyBjbGllbnQtPmNvdW50IC0gc2l6ZW9mKGNsaWVudC0+aGVhZCk7CisgICAgICAgIHZlYy5pb3ZfbGVuICA9IGNsaWVudC0+aGVhZC5sZW4gLSBjbGllbnQtPmNvdW50OworICAgIH0KKworICAgIHJldCA9IHJlY3Ztc2coIGNsaWVudF9mZCwgJm1zZ2hkciwgMCApOworICAgIGlmIChyZXQgPT0gLTEpCisgICAgeworICAgICAgICBwZXJyb3IoInJlY3Ztc2ciKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBpZiAoY21zZy5mZCAhPSAtMSkKKyAgICB7CisgICAgICAgIC8qIGNhbiBvbmx5IHJlY2VpdmUgb25lIGZkIHBlciBtZXNzYWdlICovCisgICAgICAgIGlmIChjbGllbnQtPnBhc3NfZmQgIT0gLTEpIGNsb3NlKCBjbGllbnQtPnBhc3NfZmQgKTsKKyAgICAgICAgY2xpZW50LT5wYXNzX2ZkID0gY21zZy5mZDsKKyAgICB9CisgICAgZWxzZSBpZiAoIXJldCkgcmV0dXJuIC0xOyAgLyogY2xvc2VkIHBpcGUgKi8KKworICAgIGNsaWVudC0+Y291bnQgKz0gcmV0OworCisgICAgLyogcmVjZWl2ZWQgdGhlIGNvbXBsZXRlIGhlYWRlciB5ZXQ/ICovCisgICAgaWYgKGNsaWVudC0+Y291bnQgPCBzaXplb2YoY2xpZW50LT5oZWFkKSkgcmV0dXJuIDA7CisKKyAgICAvKiBzYW5pdHkgY2hlY2tzICovCisgICAgaWYgKGNsaWVudC0+aGVhZC5zZXEgIT0gY2xpZW50LT5zZXEpCisgICAgeworICAgICAgICBwcm90b2NvbF9lcnJvciggY2xpZW50X2ZkLCAiYmFkIHNlcXVlbmNlICUwOHggaW5zdGVhZCBvZiAlMDh4XG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50LT5oZWFkLnNlcSwgY2xpZW50LT5zZXEgKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBpZiAoKGNsaWVudC0+aGVhZC5sZW4gPCBzaXplb2YoY2xpZW50LT5oZWFkKSkgfHwKKyAgICAgICAgKGNsaWVudC0+aGVhZC5sZW4gPiBNQVhfTVNHX0xFTkdUSCArIHNpemVvZihjbGllbnQtPmhlYWQpKSkKKyAgICB7CisgICAgICAgIHByb3RvY29sX2Vycm9yKCBjbGllbnRfZmQsICJiYWQgaGVhZGVyIGxlbmd0aCAlMDh4XG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50LT5oZWFkLmxlbiApOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgLyogcmVjZWl2ZWQgdGhlIHdob2xlIG1lc3NhZ2U/ICovCisgICAgaWYgKGNsaWVudC0+Y291bnQgPT0gY2xpZW50LT5oZWFkLmxlbikKKyAgICB7CisgICAgICAgIC8qIGRvbmUgcmVhZGluZyB0aGUgZGF0YSwgY2FsbCB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gKi8KKworICAgICAgICBjaGFyICpkYXRhID0gY2xpZW50LT5kYXRhOworICAgICAgICBpbnQgcGFzc2VkX2ZkID0gY2xpZW50LT5wYXNzX2ZkOworICAgICAgICB1bnNpZ25lZCBzaG9ydCB0eXBlID0gY2xpZW50LT5oZWFkLnR5cGU7CisgICAgICAgIHVuc2lnbmVkIHNob3J0IGxlbiAgPSBjbGllbnQtPmhlYWQubGVuIC0gc2l6ZW9mKGNsaWVudC0+aGVhZCk7CisKKyAgICAgICAgaWYgKCh0eXBlID49IFJFUV9OQl9SRVFVRVNUUykgfHwgIXJlcV9oYW5kbGVyc1tjbGllbnQtPmhlYWQudHlwZV0pCisgICAgICAgIHsKKyAgICAgICAgICAgIHByb3RvY29sX2Vycm9yKCBjbGllbnRfZmQsICJ1bmtub3duIHJlcXVlc3QgJTA4eFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGllbnQtPmhlYWQudHlwZSApOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisKKyAgICAgICAgLyogY2xlYXIgdGhlIGluZm8gbm93LCBhcyB0aGUgY2xpZW50IG1heSBiZSBkZWxldGVkIGJ5IHRoZSBjYWxsYmFjayAqLworICAgICAgICBjbGllbnQtPmhlYWQubGVuICA9IDA7CisgICAgICAgIGNsaWVudC0+aGVhZC50eXBlID0gMDsKKyAgICAgICAgY2xpZW50LT5jb3VudCAgICAgPSAwOworICAgICAgICBjbGllbnQtPmRhdGEgICAgICA9IE5VTEw7CisgICAgICAgIGNsaWVudC0+cGFzc19mZCAgID0gLTE7CisgICAgICAgIGNsaWVudC0+c3RhdGUgICAgID0gV0FJVElORzsKKyAgICAgICAgY2xpZW50LT5zZXErKzsKKworICAgICAgICByZXFfaGFuZGxlcnNbdHlwZV0oIGRhdGEsIGxlbiwgcGFzc2VkX2ZkLCBjbGllbnQtPnNlbGYgKTsKKyAgICAgICAgaWYgKHBhc3NlZF9mZCAhPSAtMSkgY2xvc2UoIHBhc3NlZF9mZCApOworICAgICAgICBpZiAoZGF0YSkgZnJlZSggZGF0YSApOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworCisvKiBoYW5kbGUgYSBjbGllbnQgdGltZW91dCAqLworc3RhdGljIGludCBkb190aW1lb3V0KCBpbnQgY2xpZW50X2ZkICkKK3sKKyAgICBzdHJ1Y3QgY2xpZW50ICpjbGllbnQgPSBjbGllbnRzW2NsaWVudF9mZF07CisgICAgc2V0X3RpbWVvdXQoIGNsaWVudF9mZCwgMCApOyAgLyogUmVtb3ZlIHRoZSB0aW1lb3V0ICovCisgICAgcmVxX2hhbmRsZXJzW1JFUV9USU1FT1VUXSggTlVMTCwgMCwgLTEsIGNsaWVudC0+c2VsZiApOworICAgIHJldHVybiAwOworfQorCisKKy8qIHNlbmQgYSByZXBseSB0byBhIGNsaWVudCAqLworc3RhdGljIGludCBzZW5kX3JlcGx5X3YoIGludCBjbGllbnRfZmQsIGludCB0eXBlLCBpbnQgcGFzc19mZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaW92ZWMgKnZlYywgaW50IHZlY2xlbiApCit7CisgICAgaW50IGk7CisgICAgdW5zaWduZWQgaW50IGxlbjsKKyAgICBjaGFyICpwOworICAgIHN0cnVjdCBjbGllbnQgKmNsaWVudCA9IGNsaWVudHNbY2xpZW50X2ZkXTsKKworICAgIGFzc2VydCggY2xpZW50ICk7CisgICAgYXNzZXJ0KCBjbGllbnQtPnN0YXRlID09IFdBSVRJTkcgKTsKKyAgICBhc3NlcnQoICFjbGllbnQtPmRhdGEgKTsKKworICAgIGZvciAoaSA9IGxlbiA9IDA7IGkgPCB2ZWNsZW47IGkrKykgbGVuICs9IHZlY1tpXS5pb3ZfbGVuOworICAgIGFzc2VydCggbGVuIDwgTUFYX01TR19MRU5HVEggKTsKKworICAgIGlmIChsZW4gJiYgIShjbGllbnQtPmRhdGEgPSBtYWxsb2MoIGxlbiApKSkgcmV0dXJuIC0xOworICAgIGNsaWVudC0+Y291bnQgICAgID0gMDsKKyAgICBjbGllbnQtPmhlYWQubGVuICA9IGxlbiArIHNpemVvZihjbGllbnQtPmhlYWQpOworICAgIGNsaWVudC0+aGVhZC50eXBlID0gdHlwZTsKKyAgICBjbGllbnQtPmhlYWQuc2VxICA9IGNsaWVudC0+c2VxOworICAgIGNsaWVudC0+cGFzc19mZCAgID0gcGFzc19mZDsKKworICAgIGZvciAoaSA9IDAsIHAgPSBjbGllbnQtPmRhdGE7IGkgPCB2ZWNsZW47IGkrKykKKyAgICB7CisgICAgICAgIG1lbWNweSggcCwgdmVjW2ldLmlvdl9iYXNlLCB2ZWNbaV0uaW92X2xlbiApOworICAgICAgICBwICs9IHZlY1tpXS5pb3ZfbGVuOworICAgIH0KKworICAgIGNsaWVudC0+c3RhdGUgPSBSRUFESU5HOworICAgIEZEX0NMUiggY2xpZW50X2ZkLCAmcmVhZF9zZXQgKTsKKyAgICBGRF9TRVQoIGNsaWVudF9mZCwgJndyaXRlX3NldCApOworICAgIHJldHVybiAwOworfQorCisKKy8qIHNlcnZlciBtYWluIGxvb3AgKi8KK3ZvaWQgc2VydmVyX21haW5fbG9vcCggaW50IGZkICkKK3sKKyAgICBpbnQgaSwgcmV0OworCisgICAgc2V0c2lkKCk7CisgICAgc2lnbmFsKCBTSUdQSVBFLCBTSUdfSUdOICk7CisKKyAgICAvKiBzcGVjaWFsIG1hZ2ljIHRvIGNyZWF0ZSB0aGUgaW5pdGlhbCB0aHJlYWQgKi8KKyAgICBpbml0aWFsX2NsaWVudF9mZCA9IGZkOworICAgIGFkZF9jbGllbnQoIGluaXRpYWxfY2xpZW50X2ZkLCBOVUxMICk7CisKKyAgICB3aGlsZSAobmJfY2xpZW50cykKKyAgICB7CisgICAgICAgIGZkX3NldCByZWFkID0gcmVhZF9zZXQsIHdyaXRlID0gd3JpdGVfc2V0OworCisgICAgICAgIGlmICh0aW1lb3V0X2hlYWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0cnVjdCB0aW1ldmFsIHR2LCBub3c7CisgICAgICAgICAgICBnZXR0aW1lb2ZkYXkoICZub3csIE5VTEwgKTsKKyAgICAgICAgICAgIGlmICgodGltZW91dF9oZWFkLT53aGVuLnR2X3NlYyA8IG5vdy50dl9zZWMpIHx8CisgICAgICAgICAgICAgICAgKCh0aW1lb3V0X2hlYWQtPndoZW4udHZfc2VjID09IG5vdy50dl9zZWMpICYmCisgICAgICAgICAgICAgICAgICh0aW1lb3V0X2hlYWQtPndoZW4udHZfdXNlYyA8IG5vdy50dl91c2VjKSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW50IGlkID0gdGltZW91dF9oZWFkLT5jbGllbnQ7CisgICAgICAgICAgICAgICAgaWYgKGRvX3RpbWVvdXQoIGlkICkgPT0gLTEpIHJlbW92ZV9jbGllbnQoIGlkICk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0di50dl9zZWMgPSB0aW1lb3V0X2hlYWQtPndoZW4udHZfc2VjIC0gbm93LnR2X3NlYzsKKyAgICAgICAgICAgIGlmICgodHYudHZfdXNlYyA9IHRpbWVvdXRfaGVhZC0+d2hlbi50dl91c2VjIC0gbm93LnR2X3VzZWMpIDwgMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0di50dl91c2VjICs9IDEwMDAwMDA7CisgICAgICAgICAgICAgICAgdHYudHZfc2VjLS07CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXQgPSBzZWxlY3QoIG1heF9mZCArIDEsICZyZWFkLCAmd3JpdGUsIE5VTEwsICZ0diApOworICAgICAgICB9CisgICAgICAgIGVsc2UgIC8qIG5vIHRpbWVvdXQgKi8KKyAgICAgICAgeworICAgICAgICAgICAgcmV0ID0gc2VsZWN0KCBtYXhfZmQgKyAxLCAmcmVhZCwgJndyaXRlLCBOVUxMLCBOVUxMICk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXJldCkgY29udGludWU7CisgICAgICAgIGlmIChyZXQgPT0gLTEpIHBlcnJvcigic2VsZWN0Iik7CisKKyAgICAgICAgZm9yIChpID0gMDsgaSA8PSBtYXhfZmQ7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKEZEX0lTU0VUKCBpLCAmd3JpdGUgKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoIWNsaWVudHNbaV0pIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGlmIChkb193cml0ZSggaSApID09IC0xKSByZW1vdmVfY2xpZW50KCBpICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChGRF9JU1NFVCggaSwgJnJlYWQgKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoIWNsaWVudHNbaV0pIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGlmIChkb19yZWFkKCBpICkgPT0gLTEpIHJlbW92ZV9jbGllbnQoIGkgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIHNlcnZlci1zaWRlIGV4cG9ydGVkIGZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisvKiBhZGQgYSBjbGllbnQgKi8KK2ludCBhZGRfY2xpZW50KCBpbnQgY2xpZW50X2ZkLCBzdHJ1Y3QgdGhyZWFkICpzZWxmICkKK3sKKyAgICBpbnQgZmxhZ3M7CisgICAgc3RydWN0IGNsaWVudCAqY2xpZW50ID0gbWFsbG9jKCBzaXplb2YoKmNsaWVudCkgKTsKKyAgICBpZiAoIWNsaWVudCkgcmV0dXJuIC0xOworICAgIGFzc2VydCggIWNsaWVudHNbY2xpZW50X2ZkXSApOworCisgICAgY2xpZW50LT5zdGF0ZSAgICAgICAgICAgICAgICA9IFJVTk5JTkc7CisgICAgY2xpZW50LT5zZXEgICAgICAgICAgICAgICAgICA9IDA7CisgICAgY2xpZW50LT5oZWFkLmxlbiAgICAgICAgICAgICA9IDA7CisgICAgY2xpZW50LT5oZWFkLnR5cGUgICAgICAgICAgICA9IDA7CisgICAgY2xpZW50LT5jb3VudCAgICAgICAgICAgICAgICA9IDA7CisgICAgY2xpZW50LT5kYXRhICAgICAgICAgICAgICAgICA9IE5VTEw7CisgICAgY2xpZW50LT5zZWxmICAgICAgICAgICAgICAgICA9IHNlbGY7CisgICAgY2xpZW50LT5wYXNzX2ZkICAgICAgICAgICAgICA9IC0xOworICAgIGNsaWVudC0+dGltZW91dC53aGVuLnR2X3NlYyAgPSAwOworICAgIGNsaWVudC0+dGltZW91dC53aGVuLnR2X3VzZWMgPSAwOworICAgIGNsaWVudC0+dGltZW91dC5jbGllbnQgICAgICAgPSBjbGllbnRfZmQ7CisKKyAgICBmbGFncyA9IGZjbnRsKCBjbGllbnRfZmQsIEZfR0VURkwsIDAgKTsKKyAgICBmY250bCggY2xpZW50X2ZkLCBGX1NFVEZMLCBmbGFncyB8IE9fTk9OQkxPQ0sgKTsKKworICAgIGNsaWVudHNbY2xpZW50X2ZkXSA9IGNsaWVudDsKKyAgICBGRF9TRVQoIGNsaWVudF9mZCwgJnJlYWRfc2V0ICk7CisgICAgaWYgKGNsaWVudF9mZCA+IG1heF9mZCkgbWF4X2ZkID0gY2xpZW50X2ZkOworICAgIG5iX2NsaWVudHMrKzsKKyAgICByZXR1cm4gY2xpZW50X2ZkOworfQorCisvKiByZW1vdmUgYSBjbGllbnQgKi8KK3ZvaWQgcmVtb3ZlX2NsaWVudCggaW50IGNsaWVudF9mZCApCit7CisgICAgc3RydWN0IGNsaWVudCAqY2xpZW50ID0gY2xpZW50c1tjbGllbnRfZmRdOworICAgIGFzc2VydCggY2xpZW50ICk7CisKKyAgICByZXFfaGFuZGxlcnNbUkVRX0tJTExfVEhSRUFEXSggTlVMTCwgMCwgLTEsIGNsaWVudC0+c2VsZiApOworCisgICAgc2V0X3RpbWVvdXQoIGNsaWVudF9mZCwgMCApOworICAgIGNsaWVudHNbY2xpZW50X2ZkXSA9IE5VTEw7CisgICAgRkRfQ0xSKCBjbGllbnRfZmQsICZyZWFkX3NldCApOworICAgIEZEX0NMUiggY2xpZW50X2ZkLCAmd3JpdGVfc2V0ICk7CisgICAgaWYgKG1heF9mZCA9PSBjbGllbnRfZmQpIHdoaWxlIChtYXhfZmQgJiYgIWNsaWVudHNbbWF4X2ZkXSkgbWF4X2ZkLS07CisgICAgaWYgKGluaXRpYWxfY2xpZW50X2ZkID09IGNsaWVudF9mZCkgaW5pdGlhbF9jbGllbnRfZmQgPSAtMTsKKyAgICBjbG9zZSggY2xpZW50X2ZkICk7CisgICAgbmJfY2xpZW50cy0tOworCisgICAgLyogUHVyZ2UgbWVzc2FnZXMgKi8KKyAgICBpZiAoY2xpZW50LT5kYXRhKSBmcmVlKCBjbGllbnQtPmRhdGEgKTsKKyAgICBpZiAoY2xpZW50LT5wYXNzX2ZkICE9IC0xKSBjbG9zZSggY2xpZW50LT5wYXNzX2ZkICk7CisgICAgZnJlZSggY2xpZW50ICk7Cit9CisKKy8qIHJldHVybiB0aGUgZmQgb2YgdGhlIGluaXRpYWwgY2xpZW50ICovCitpbnQgZ2V0X2luaXRpYWxfY2xpZW50X2ZkKHZvaWQpCit7CisgICAgYXNzZXJ0KCBpbml0aWFsX2NsaWVudF9mZCAhPSAtMSApOworICAgIHJldHVybiBpbml0aWFsX2NsaWVudF9mZDsKK30KKworLyogc2V0IGEgY2xpZW50IHRpbWVvdXQgKi8KK3ZvaWQgc2V0X3RpbWVvdXQoIGludCBjbGllbnRfZmQsIHN0cnVjdCB0aW1ldmFsICp3aGVuICkKK3sKKyAgICBzdHJ1Y3QgdGltZW91dCAqdG0sICpwb3M7CisgICAgc3RydWN0IGNsaWVudCAqY2xpZW50ID0gY2xpZW50c1tjbGllbnRfZmRdOworICAgIGFzc2VydCggY2xpZW50ICk7CisKKyAgICB0bSA9ICZjbGllbnQtPnRpbWVvdXQ7CisgICAgaWYgKHRtLT53aGVuLnR2X3NlYyB8fCB0bS0+d2hlbi50dl91c2VjKQorICAgIHsKKyAgICAgICAgLyogdGhlcmUgaXMgYWxyZWFkeSBhIHRpbWVvdXQgKi8KKyAgICAgICAgaWYgKHRtLT5uZXh0KSB0bS0+bmV4dC0+cHJldiA9IHRtLT5wcmV2OworICAgICAgICBlbHNlIHRpbWVvdXRfdGFpbCA9IHRtLT5wcmV2OworICAgICAgICBpZiAodG0tPnByZXYpIHRtLT5wcmV2LT5uZXh0ID0gdG0tPm5leHQ7CisgICAgICAgIGVsc2UgdGltZW91dF9oZWFkID0gdG0tPm5leHQ7CisgICAgICAgIHRtLT53aGVuLnR2X3NlYyA9IHRtLT53aGVuLnR2X3VzZWMgPSAwOworICAgIH0KKyAgICBpZiAoIXdoZW4pIHJldHVybjsgIC8qIG5vIHRpbWVvdXQgKi8KKyAgICB0bS0+d2hlbiA9ICp3aGVuOworCisgICAgLyogTm93IGluc2VydCBpdCBpbiB0aGUgbGlua2VkIGxpc3QgKi8KKworICAgIGZvciAocG9zID0gdGltZW91dF9oZWFkOyBwb3M7IHBvcyA9IHBvcy0+bmV4dCkKKyAgICB7CisgICAgICAgIGlmIChwb3MtPndoZW4udHZfc2VjID4gdG0tPndoZW4udHZfc2VjKSBicmVhazsKKyAgICAgICAgaWYgKChwb3MtPndoZW4udHZfc2VjID09IHRtLT53aGVuLnR2X3NlYykgJiYKKyAgICAgICAgICAgIChwb3MtPndoZW4udHZfdXNlYyA+IHRtLT53aGVuLnR2X3VzZWMpKSBicmVhazsKKyAgICB9CisKKyAgICBpZiAocG9zKSAgLyogaW5zZXJ0IGl0IGJlZm9yZSAncG9zJyAqLworICAgIHsKKyAgICAgICAgaWYgKCh0bS0+cHJldiA9IHBvcy0+cHJldikpIHRtLT5wcmV2LT5uZXh0ID0gdG07CisgICAgICAgIGVsc2UgdGltZW91dF9oZWFkID0gdG07CisgICAgICAgIHRtLT5uZXh0ID0gcG9zOworICAgICAgICBwb3MtPnByZXYgPSB0bTsKKyAgICB9CisgICAgZWxzZSAgLyogaW5zZXJ0IGl0IGF0IHRoZSB0YWlsICovCisgICAgeworICAgICAgICB0bS0+bmV4dCA9IE5VTEw7CisgICAgICAgIGlmICh0aW1lb3V0X3RhaWwpIHRpbWVvdXRfdGFpbC0+bmV4dCA9IHRtOworICAgICAgICBlbHNlIHRpbWVvdXRfaGVhZCA9IHRtOworICAgICAgICB0bS0+cHJldiA9IHRpbWVvdXRfdGFpbDsKKyAgICAgICAgdGltZW91dF90YWlsID0gdG07CisgICAgfQorfQorCisvKiBzZW5kIGEgcmVwbHkgdG8gYSBjbGllbnQgKi8KK2ludCBzZW5kX3JlcGx5KCBpbnQgY2xpZW50X2ZkLCBpbnQgZXJyX2NvZGUsIGludCBwYXNzX2ZkLAorICAgICAgICAgICAgICAgIGludCBuLCAuLi4gLyogYXJnXzEsIGxlbl8xLCAuLi4sIGFyZ19uLCBsZW5fbiAqLyApCit7CisgICAgc3RydWN0IGlvdmVjIHZlY1sxNl07CisgICAgdmFfbGlzdCBhcmdzOworICAgIGludCBpOworCisgICAgYXNzZXJ0KCBuIDwgMTYgKTsKKyAgICB2YV9zdGFydCggYXJncywgbiApOworICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisgICAgeworICAgICAgICB2ZWNbaV0uaW92X2Jhc2UgPSB2YV9hcmcoIGFyZ3MsIHZvaWQgKiApOworICAgICAgICB2ZWNbaV0uaW92X2xlbiAgPSB2YV9hcmcoIGFyZ3MsIGludCApOworICAgIH0KKyAgICB2YV9lbmQoIGFyZ3MgKTsKKyAgICByZXR1cm4gc2VuZF9yZXBseV92KCBjbGllbnRfZmQsIGVycl9jb2RlLCBwYXNzX2ZkLCB2ZWMsIG4gKTsKK30KZGlmZiAtLWdpdCBhL3NlcnZlci90aHJlYWQuYyBiL3NlcnZlci90aHJlYWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWNlMzBiCi0tLSAvZGV2L251bGwKKysrIGIvc2VydmVyL3RocmVhZC5jCkBAIC0wLDAgKzEsMjA0IEBACisvKgorICogU2VydmVyLXNpZGUgdGhyZWFkIG1hbmFnZW1lbnQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggQWxleGFuZHJlIEp1bGxpYXJkCisgKi8KKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgIndpbmVycm9yLmgiCisjaW5jbHVkZSAic2VydmVyLmgiCisjaW5jbHVkZSAib2JqZWN0LmgiCisKKworLyogcmVxdWVzdCBoYW5kbGluZyAqLworCitzdGF0aWMgdm9pZCBoYW5kbGVfdGltZW91dCggdm9pZCAqZGF0YSwgaW50IGxlbiwgaW50IGZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aHJlYWQgKnNlbGYgKTsKK3N0YXRpYyB2b2lkIGhhbmRsZV9raWxsX3RocmVhZCggdm9pZCAqZGF0YSwgaW50IGxlbiwgaW50IGZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGhyZWFkICpzZWxmICk7CitzdGF0aWMgdm9pZCBoYW5kbGVfbmV3X3RocmVhZCggdm9pZCAqZGF0YSwgaW50IGxlbiwgaW50IGZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aHJlYWQgKnNlbGYgKTsKK3N0YXRpYyB2b2lkIGhhbmRsZV9pbml0X3RocmVhZCggdm9pZCAqZGF0YSwgaW50IGxlbiwgaW50IGZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGhyZWFkICpzZWxmICk7CisKK2NvbnN0IHJlcV9oYW5kbGVyIHJlcV9oYW5kbGVyc1tSRVFfTkJfUkVRVUVTVFNdID0KK3sKKyAgICBoYW5kbGVfdGltZW91dCwgICAgICAgIC8qIFJFUV9USU1FT1VUICovCisgICAgaGFuZGxlX2tpbGxfdGhyZWFkLCAgICAvKiBSRVFfS0lMTF9USFJFQUQgKi8KKyAgICBoYW5kbGVfbmV3X3RocmVhZCwgICAgIC8qIFJFUV9ORVdfVEhSRUFEICovCisgICAgaGFuZGxlX2luaXRfdGhyZWFkICAgICAvKiBSRVFfSU5JVF9USFJFQUQgKi8KK307CisKKworLyogdGhyZWFkIHN0cnVjdHVyZTsgbm90IG11Y2ggZm9yIG5vdy4uLiAqLworCitzdHJ1Y3QgdGhyZWFkCit7CisgICAgc3RydWN0IG9iamVjdCAgIG9iajsgICAgICAgLyogb2JqZWN0IGhlYWRlciAqLworICAgIHN0cnVjdCB0aHJlYWQgICpuZXh0OyAgICAgIC8qIHN5c3RlbS13aWRlIHRocmVhZCBsaXN0ICovCisgICAgc3RydWN0IHRocmVhZCAgKnByZXY7CisgICAgc3RydWN0IHByb2Nlc3MgKnByb2Nlc3M7CisgICAgaW50ICAgICAgICAgICAgIGNsaWVudF9mZDsgLyogY2xpZW50IGZkIGZvciBzb2NrZXQgY29tbXVuaWNhdGlvbnMgKi8KKyAgICBpbnQgICAgICAgICAgICAgdW5peF9waWQ7CisgICAgY2hhciAgICAgICAgICAgKm5hbWU7Cit9OworCitzdGF0aWMgc3RydWN0IHRocmVhZCAqZmlyc3RfdGhyZWFkOworCisvKiB0aHJlYWQgb3BlcmF0aW9ucyAqLworCitzdGF0aWMgdm9pZCBkZXN0cm95X3RocmVhZCggc3RydWN0IG9iamVjdCAqb2JqICk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2JqZWN0X29wcyB0aHJlYWRfb3BzID0KK3sKKyAgICBkZXN0cm95X3RocmVhZAorfTsKKworCisvKiBjcmVhdGUgYSBuZXcgdGhyZWFkICovCitzdGF0aWMgc3RydWN0IHRocmVhZCAqY3JlYXRlX3RocmVhZCggaW50IGZkLCB2b2lkICpwaWQgKQoreworICAgIHN0cnVjdCB0aHJlYWQgKnRocmVhZDsKKyAgICBzdHJ1Y3QgcHJvY2VzcyAqcHJvY2VzczsKKworICAgIGlmIChwaWQpCisgICAgeworICAgICAgICBpZiAoIShwcm9jZXNzID0gZ2V0X3Byb2Nlc3NfZnJvbV9pZCggcGlkICkpKSByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKCEocHJvY2VzcyA9IGNyZWF0ZV9wcm9jZXNzKCkpKSByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKCEodGhyZWFkID0gbWFsbG9jKCBzaXplb2YoKnRocmVhZCkgKSkpCisgICAgeworICAgICAgICByZWxlYXNlX29iamVjdCggcHJvY2VzcyApOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaW5pdF9vYmplY3QoICZ0aHJlYWQtPm9iaiwgJnRocmVhZF9vcHMsIE5VTEwgKTsKKyAgICB0aHJlYWQtPmNsaWVudF9mZCA9IGZkOworICAgIHRocmVhZC0+cHJvY2VzcyAgID0gcHJvY2VzczsKKyAgICB0aHJlYWQtPnVuaXhfcGlkICA9IDA7ICAvKiBub3Qga25vd24geWV0ICovCisgICAgdGhyZWFkLT5uYW1lICAgICAgPSBOVUxMOworCisgICAgdGhyZWFkLT5uZXh0ID0gZmlyc3RfdGhyZWFkOworICAgIHRocmVhZC0+cHJldiA9IE5VTEw7CisgICAgZmlyc3RfdGhyZWFkID0gdGhyZWFkOworCisgICAgaWYgKGFkZF9jbGllbnQoIGZkLCB0aHJlYWQgKSA9PSAtMSkKKyAgICB7CisgICAgICAgIHJlbGVhc2Vfb2JqZWN0KCB0aHJlYWQgKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiB0aHJlYWQ7Cit9CisKKy8qIGRlc3Ryb3kgYSB0aHJlYWQgd2hlbiBpdHMgcmVmY291bnQgaXMgMCAqLworc3RhdGljIHZvaWQgZGVzdHJveV90aHJlYWQoIHN0cnVjdCBvYmplY3QgKm9iaiApCit7CisgICAgc3RydWN0IHRocmVhZCAqdGhyZWFkID0gKHN0cnVjdCB0aHJlYWQgKilvYmo7CisgICAgYXNzZXJ0KCBvYmotPm9wcyA9PSAmdGhyZWFkX29wcyApOworCisgICAgcmVsZWFzZV9vYmplY3QoIHRocmVhZC0+cHJvY2VzcyApOworICAgIGlmICh0aHJlYWQtPm5leHQpIHRocmVhZC0+bmV4dC0+cHJldiA9IHRocmVhZC0+cHJldjsKKyAgICBpZiAodGhyZWFkLT5wcmV2KSB0aHJlYWQtPnByZXYtPm5leHQgPSB0aHJlYWQtPm5leHQ7CisgICAgZWxzZSBmaXJzdF90aHJlYWQgPSB0aHJlYWQtPm5leHQ7CisgICAgaWYgKHRocmVhZC0+bmFtZSkgZnJlZSggdGhyZWFkLT5uYW1lICk7CisgICAgZnJlZSggdGhyZWFkICk7Cit9CisKK3N0cnVjdCB0aHJlYWQgKmdldF90aHJlYWRfZnJvbV9pZCggdm9pZCAqaWQgKQoreworICAgIHN0cnVjdCB0aHJlYWQgKnQgPSBmaXJzdF90aHJlYWQ7CisgICAgd2hpbGUgKHQgJiYgKHQgIT0gaWQpKSB0ID0gdC0+bmV4dDsKKyAgICByZXR1cm4gdDsKK30KKworLyogaGFuZGxlIGEgY2xpZW50IHRpbWVvdXQgKHVudXNlZCBmb3Igbm93KSAqLworc3RhdGljIHZvaWQgaGFuZGxlX3RpbWVvdXQoIHZvaWQgKmRhdGEsIGludCBsZW4sIGludCBmZCwgc3RydWN0IHRocmVhZCAqc2VsZiApCit7CisvKiAgICBmcHJpbnRmKCBzdGRlcnIsICJTZXJ2ZXI6IGdvdCB0aW1lb3V0IGZvciAlc1xuIiwgc2VsZi0+bmFtZSApOyovCisgICAgc2VuZF9yZXBseSggc2VsZi0+Y2xpZW50X2ZkLCAwLCAtMSwgMCApOworfQorCisvKiBhIHRocmVhZCBoYXMgYmVlbiBraWxsZWQgKi8KK3N0YXRpYyB2b2lkIGhhbmRsZV9raWxsX3RocmVhZCggdm9pZCAqZGF0YSwgaW50IGxlbiwgaW50IGZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGhyZWFkICpzZWxmICkKK3sKKyAgICBpZiAoIXNlbGYpIHJldHVybjsgIC8qIGluaXRpYWwgY2xpZW50IGJlaW5nIGtpbGxlZCAqLworLyogICAgZnByaW50Ziggc3RkZXJyLCAiU2VydmVyOiB0aHJlYWQgJyVzJyBraWxsZWRcbiIsCisgICAgICAgICAgICAgICBzZWxmLT5uYW1lID8gc2VsZi0+bmFtZSA6ICI/Pz8iICk7CisqLworICAgIHJlbGVhc2Vfb2JqZWN0KCAmc2VsZi0+b2JqICk7Cit9CisKKy8qIGNyZWF0ZSBhIG5ldyB0aHJlYWQgKi8KK3N0YXRpYyB2b2lkIGhhbmRsZV9uZXdfdGhyZWFkKCB2b2lkICpkYXRhLCBpbnQgbGVuLCBpbnQgZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRocmVhZCAqc2VsZiApCit7CisgICAgc3RydWN0IG5ld190aHJlYWRfcmVxdWVzdCAqcmVxID0gKHN0cnVjdCBuZXdfdGhyZWFkX3JlcXVlc3QgKilkYXRhOworICAgIHN0cnVjdCBuZXdfdGhyZWFkX3JlcGx5IHJlcGx5OworICAgIHN0cnVjdCB0aHJlYWQgKm5ld190aHJlYWQ7CisgICAgaW50IG5ld19mZCwgZXJyOworCisgICAgaWYgKChuZXdfZmQgPSBkdXAoZmQpKSA9PSAtMSkKKyAgICB7CisgICAgICAgIG5ld190aHJlYWQgPSBOVUxMOworICAgICAgICBlcnIgPSBFUlJPUl9UT09fTUFOWV9PUEVOX0ZJTEVTOworICAgICAgICBnb3RvIGRvbmU7CisgICAgfQorICAgIGlmIChsZW4gIT0gc2l6ZW9mKCpyZXEpKQorICAgIHsKKyAgICAgICAgZXJyID0gRVJST1JfSU5WQUxJRF9QQVJBTUVURVI7CisgICAgICAgIGdvdG8gZG9uZTsKKyAgICB9CisgICAgaWYgKCEobmV3X3RocmVhZCA9IGNyZWF0ZV90aHJlYWQoIG5ld19mZCwgcmVxLT5waWQgKSkpCisgICAgeworICAgICAgICBlcnIgPSBFUlJPUl9OT1RfRU5PVUdIX01FTU9SWTsKKyAgICAgICAgY2xvc2UoIG5ld19mZCApOworICAgICAgICBnb3RvIGRvbmU7CisgICAgfQorICAgIHJlcGx5LnRpZCA9IG5ld190aHJlYWQ7CisgICAgcmVwbHkucGlkID0gbmV3X3RocmVhZC0+cHJvY2VzczsKKyAgICBlcnIgPSBFUlJPUl9TVUNDRVNTOworIGRvbmU6CisgICAgc2VuZF9yZXBseSggc2VsZiA/IHNlbGYtPmNsaWVudF9mZCA6IGdldF9pbml0aWFsX2NsaWVudF9mZCgpLAorICAgICAgICAgICAgICAgIGVyciwgLTEsIDEsICZyZXBseSwgc2l6ZW9mKHJlcGx5KSApOworfQorCisvKiBjcmVhdGUgYSBuZXcgdGhyZWFkICovCitzdGF0aWMgdm9pZCBoYW5kbGVfaW5pdF90aHJlYWQoIHZvaWQgKmRhdGEsIGludCBsZW4sIGludCBmZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRocmVhZCAqc2VsZiApCit7CisgICAgc3RydWN0IGluaXRfdGhyZWFkX3JlcXVlc3QgKnJlcSA9IChzdHJ1Y3QgaW5pdF90aHJlYWRfcmVxdWVzdCAqKWRhdGE7CisgICAgaW50IGVycjsKKworICAgIGlmIChsZW4gPCBzaXplb2YoKnJlcSkpCisgICAgeworICAgICAgICBlcnIgPSBFUlJPUl9JTlZBTElEX1BBUkFNRVRFUjsKKyAgICAgICAgZ290byBkb25lOworICAgIH0KKyAgICBsZW4gLT0gc2l6ZW9mKCpyZXEpOworICAgIHNlbGYtPnVuaXhfcGlkID0gcmVxLT5waWQ7CisgICAgaWYgKCEoc2VsZi0+bmFtZSA9IG1hbGxvYyggbGVuICsgMSApKSkKKyAgICB7CisgICAgICAgIGVyciA9IEVSUk9SX05PVF9FTk9VR0hfTUVNT1JZOworICAgICAgICBnb3RvIGRvbmU7CisgICAgfQorICAgIG1lbWNweSggc2VsZi0+bmFtZSwgKGNoYXIgKilkYXRhICsgc2l6ZW9mKCpyZXEpLCBsZW4gKTsKKyAgICBzZWxmLT5uYW1lW2xlbl0gPSAnXDAnOworICAgIAorLyogICAgZnByaW50Ziggc3RkZXJyLAorICAgICAgICAgICAgICJTZXJ2ZXI6IGluaXQgdGhyZWFkICclcycgcGlkPSUwOHggdGlkPSUwOHggdW5peF9waWQ9JWRcbiIsCisgICAgICAgICAgICAgc2VsZi0+bmFtZSwgKGludClzZWxmLT5wcm9jZXNzLCAoaW50KXNlbGYsIHNlbGYtPnVuaXhfcGlkICk7CisqLworCisgICAgZXJyID0gRVJST1JfU1VDQ0VTUzsKKyBkb25lOgorICAgIHNlbmRfcmVwbHkoIHNlbGYtPmNsaWVudF9mZCwgZXJyLCAtMSwgMCApOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbWFrZV9YMTF3cmFwcGVycyBiL3Rvb2xzL21ha2VfWDExd3JhcHBlcnMKaW5kZXggMmIzNGM4Yi4uODBiYWJlZSAxMDA3NTUKLS0tIGEvdG9vbHMvbWFrZV9YMTF3cmFwcGVycworKysgYi90b29scy9tYWtlX1gxMXdyYXBwZXJzCkBAIC05OCw2ICs5OCw5IEBACiAJb3V0cHV0X2ZuKCJYU2htQXR0YWNoIiwgU3RhdHVzLAogCQkgICJEaXNwbGF5ICosIFhTaG1TZWdtZW50SW5mbyAqIiwKIAkJICAiRGlzcGxheSAqYTAsIFhTaG1TZWdtZW50SW5mbyAqYTEiLCAiYTAsIGExIik7CisJb3V0cHV0X2ZuKCJYU2htUHV0SW1hZ2UiLCBTdGF0dXMsCisJCSAgIkRpc3BsYXkgKiwgRHJhd2FibGUsIEdDLCBYSW1hZ2UgKiwgaW50LCBpbnQsIGludCwgaW50LCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCwgQm9vbCIsCisJCSAgIkRpc3BsYXkgKmEwLCBEcmF3YWJsZSBhMSwgR0MgYTIsIFhJbWFnZSAqYTMsIGludCBhNCwgaW50IGE1LCBpbnQgYTYsIGludCBhNywgdW5zaWduZWQgaW50IGE4LCB1bnNpZ25lZCBpbnQgYTksIEJvb2wgYTEwIiwgImEwLCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgsIGE5LCBhMTAiKTsKICAgICB9IGVsc2UgewogCW9wZW4oSU4sICJlY2hvIFwiJHgxMV9pbmNsI2luY2x1ZGUgPFgxMS8kZXh0ZW5zaW9uc19kaXIkbmFtZS5oPlwiIHwgZ2NjIC1MJFgxMV9pbmNsdWRlX2RpciAtRSAtIHwgZ3JlcCAtdiAnXlsgXHRdKlwkJ3wiKSB8fCBkaWUgIm9wZW4iOwogCmRpZmYgLS1naXQgYS90c3gxMS9YMTFfY2FsbHMgYi90c3gxMS9YMTFfY2FsbHMKaW5kZXggODU2ZGRmNy4uYWVjYTJiNiAxMDA2NDQKLS0tIGEvdHN4MTEvWDExX2NhbGxzCisrKyBiL3RzeDExL1gxMV9jYWxscwpAQCAtMjEsNiArMjEsNyBAQAogWENsaXBCb3gKIFhDb252ZXJ0U2VsZWN0aW9uCiBYQ29weUFyZWEKK1hDb3B5Q29sb3JtYXBBbmRGcmVlCiBYQ29weVBsYW5lCiBYQ3JlYXRlQml0bWFwRnJvbURhdGEKIFhDcmVhdGVDb2xvcm1hcApAQCAtMTMzLDYgKzEzNCw3IEBACiBYU2htQXR0YWNoCiBYU2htRGV0YWNoCiBYU2htUGl4bWFwRm9ybWF0CitYU2htUHV0SW1hZ2UKIFhTaG1RdWVyeUV4dGVuc2lvbgogWFNocmlua1JlZ2lvbgogWFN0b3JlQ29sb3IKZGlmZiAtLWdpdCBhL3RzeDExL3RzX3hsaWIuYyBiL3RzeDExL3RzX3hsaWIuYwppbmRleCA3Y2VkODAxLi4yZTE2M2RmIDEwMDY0NAotLS0gYS90c3gxMS90c194bGliLmMKKysrIGIvdHN4MTEvdHNfeGxpYi5jCkBAIC0xMDUsNiArMTA1LDE3IEBACiAgIHJldHVybiByOwogfQogCitDb2xvcm1hcCAgVFNYQ29weUNvbG9ybWFwQW5kRnJlZShEaXNwbGF5KiBhMCwgQ29sb3JtYXAgYTEpCit7CisgIENvbG9ybWFwICByOworICBUUkFDRSh4MTEsICJDYWxsIFhDb3B5Q29sb3JtYXBBbmRGcmVlXG4iKTsKKyAgRW50ZXJDcml0aWNhbFNlY3Rpb24oICZYMTFEUlZfQ3JpdFNlY3Rpb24gKTsKKyAgciA9IFhDb3B5Q29sb3JtYXBBbmRGcmVlKGEwLCBhMSk7CisgIExlYXZlQ3JpdGljYWxTZWN0aW9uKCAmWDExRFJWX0NyaXRTZWN0aW9uICk7CisgIFRSQUNFKHgxMSwgIlJldCBYQ29weUNvbG9ybWFwQW5kRnJlZVxuIik7CisgIHJldHVybiByOworfQorCiBDb2xvcm1hcCAgVFNYQ3JlYXRlQ29sb3JtYXAoRGlzcGxheSogYTAsIFdpbmRvdyBhMSwgVmlzdWFsKiBhMiwgaW50IGEzKQogewogICBDb2xvcm1hcCAgcjsKZGlmZiAtLWdpdCBhL3RzeDExL3RzX3hzaG0uYyBiL3RzeDExL3RzX3hzaG0uYwppbmRleCBlM2FmZTZiLi5kZmU5NDM0IDEwMDY0NAotLS0gYS90c3gxMS90c194c2htLmMKKysrIGIvdHN4MTEvdHNfeHNobS5jCkBAIC01MiwzICs1MiwxNCBAQAogICBUUkFDRSh4MTEsICJSZXQgWFNobUF0dGFjaFxuIik7CiAgIHJldHVybiByOwogfQorCitTdGF0dXMgVFNYU2htUHV0SW1hZ2UoRGlzcGxheSAqYTAsIERyYXdhYmxlIGExLCBHQyBhMiwgWEltYWdlICphMywgaW50IGE0LCBpbnQgYTUsIGludCBhNiwgaW50IGE3LCB1bnNpZ25lZCBpbnQgYTgsIHVuc2lnbmVkIGludCBhOSwgQm9vbCBhMTApCit7CisgIFN0YXR1cyByOworICBUUkFDRSh4MTEsICJDYWxsIFhTaG1QdXRJbWFnZVxuIik7CisgIEVudGVyQ3JpdGljYWxTZWN0aW9uKCAmWDExRFJWX0NyaXRTZWN0aW9uICk7CisgIHIgPSBYU2htUHV0SW1hZ2UoYTAsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwgYTksIGExMCk7CisgIExlYXZlQ3JpdGljYWxTZWN0aW9uKCAmWDExRFJWX0NyaXRTZWN0aW9uICk7CisgIFRSQUNFKHgxMSwgIlJldCBYU2htUHV0SW1hZ2VcbiIpOworICByZXR1cm4gcjsKK30KZGlmZiAtLWdpdCBhL3dpbjMyL2FkdmFwaS5jIGIvd2luMzIvYWR2YXBpLmMKaW5kZXggMzY4NjQyZS4uZDJmZjY1ZiAxMDA2NDQKLS0tIGEvd2luMzIvYWR2YXBpLmMKKysrIGIvd2luMzIvYWR2YXBpLmMKQEAgLTExOCwxMCArMTE4LDEwIEBACiAgKiAgICAgICAgICAgR2V0VG9rZW5JbmZvcm1hdGlvbglbQURWQVBJMzIuNjZdCiAgKi8KIEJPT0wzMiBXSU5BUEkgR2V0VG9rZW5JbmZvcm1hdGlvbigKLQlIQU5ETEUzMiB0b2tlbiwvKlRPS0VOX0lORk9STUFUSU9OX0NMQVNTKi8gRFdPUkQgdG9rZW5pbmZvY2xhc3MsTFBWT0lEIHRva2VuaW5mbywKKwlIQU5ETEUzMiB0b2tlbixUT0tFTl9JTkZPUk1BVElPTl9DTEFTUyB0b2tlbmluZm9jbGFzcyxMUFZPSUQgdG9rZW5pbmZvLAogCURXT1JEIHRva2VuaW5mb2xlbmd0aCxMUERXT1JEIHJldGxlbgogKSB7Ci0JRklYTUUoYWR2YXBpLCIoJTA4eCwlbGQsJXAsJWxkLCVwKTogc3R1YlxuIiwKKyAgICAgICAgRklYTUUoYWR2YXBpLCIoJTA4eCwlZCwlcCwlbGQsJXApOiBzdHViXG4iLAogCSAgICAgIHRva2VuLHRva2VuaW5mb2NsYXNzLHRva2VuaW5mbyx0b2tlbmluZm9sZW5ndGgscmV0bGVuKTsKIAlyZXR1cm4gVFJVRTsKIH0KZGlmZiAtLWdpdCBhL3dpbjMyL2NvbnNvbGUuYyBiL3dpbjMyL2NvbnNvbGUuYwppbmRleCA1MDViZmVhLi42YmFiNDZkIDEwMDY0NAotLS0gYS93aW4zMi9jb25zb2xlLmMKKysrIGIvd2luMzIvY29uc29sZS5jCkBAIC0xMTM5LDMgKzExMzksMjAgQEAKICAgICBTZXRMYXN0RXJyb3IoRVJST1JfQ0FMTF9OT1RfSU1QTEVNRU5URUQpOwogICAgIHJldHVybiBGQUxTRTsKIH0KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBTY3JvbGxDb25zb2xlU2NyZWVuQnVmZmVyIFtLRVJORUwzMi42MTJdCisgKiAKKyAqIEJVR1MKKyAqICAgVW5pbXBsZW1lbnRlZAorICovCitCT09MMzIgV0lOQVBJIFNjcm9sbENvbnNvbGVTY3JlZW5CdWZmZXIoIEhBTkRMRTMyIGhDb25zb2xlT3V0cHV0LCAKKwkgICAgICBMUFNNQUxMX1JFQ1QgbHBTY3JvbGxSZWN0LCBMUFNNQUxMX1JFQ1QgbHBDbGlwUmVjdCwKKyAgICAgICAgICAgICAgQ09PUkQgZHdEZXN0T3JpZ2luLCBMUENIQVJfSU5GTyBscEZpbGwpCit7CisgICAgRklYTUUoY29uc29sZSwgIiglZCwlcCwlcCwlZHglZCwlcCk6IHN0dWJcbiIsIGhDb25zb2xlT3V0cHV0LGxwU2Nyb2xsUmVjdCwKKwkgIGxwQ2xpcFJlY3QsZHdEZXN0T3JpZ2luLngsZHdEZXN0T3JpZ2luLnksbHBGaWxsKTsKKyAgICBTZXRMYXN0RXJyb3IoRVJST1JfQ0FMTF9OT1RfSU1QTEVNRU5URUQpOworICAgIHJldHVybiBGQUxTRTsKK30KZGlmZiAtLWdpdCBhL3dpbjMyL2tlcm5lbDMyLmMgYi93aW4zMi9rZXJuZWwzMi5jCmluZGV4IGIwMWE0MGMuLjEyZTY5YjQgMTAwNjQ0Ci0tLSBhL3dpbjMyL2tlcm5lbDMyLmMKKysrIGIvd2luMzIva2VybmVsMzIuYwpAQCAtNzcsMTQgKzc3LDUzIEBACiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIF9sb2FkdGh1bmsKKyAqLworc3RhdGljIExQVk9JRCBfbG9hZHRodW5rKExQU1RSIG1vZHVsZSwgTFBTVFIgZnVuYywgTFBTVFIgbW9kdWxlMzIsIAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBUaHVua0RhdGFDb21tb24gKlREMzIpCit7CisgICAgc3RydWN0IFRodW5rRGF0YUNvbW1vbiAqVEQxNjsKKyAgICBITU9EVUxFMzIgaG1vZDsKKworICAgIGlmICgoaG1vZCA9IExvYWRMaWJyYXJ5MTYobW9kdWxlKSkgPD0gMzIpIAorICAgIHsKKyAgICAgICAgRVJSKHRodW5rLCAiKCVzLCAlcywgJXMsICVwKTogVW5hYmxlIHRvIGxvYWQgJyVzJywgZXJyb3IgJWRcbiIsCisgICAgICAgICAgICAgICAgICAgbW9kdWxlLCBmdW5jLCBtb2R1bGUzMiwgVEQzMiwgbW9kdWxlLCBobW9kKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKCEoVEQxNiA9IFBUUl9TRUdfVE9fTElOKFdJTjMyX0dldFByb2NBZGRyZXNzMTYoaG1vZCwgZnVuYykpKSkKKyAgICB7CisgICAgICAgIEVSUih0aHVuaywgIiglcywgJXMsICVzLCAlcCk6IFVuYWJsZSB0byBmaW5kICclcydcbiIsCisgICAgICAgICAgICAgICAgICAgbW9kdWxlLCBmdW5jLCBtb2R1bGUzMiwgVEQzMiwgZnVuYyk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlmIChURDMyICYmIG1lbWNtcChURDE2LT5tYWdpYywgVEQzMi0+bWFnaWMsIDQpKQorICAgIHsKKyAgICAgICAgRVJSKHRodW5rLCAiKCVzLCAlcywgJXMsICVwKTogQmFkIG1hZ2ljICVjJWMlYyVjIChzaG91bGQgYmUgJWMlYyVjJWMpXG4iLAorICAgICAgICAgICAgICAgICAgIG1vZHVsZSwgZnVuYywgbW9kdWxlMzIsIFREMzIsIAorICAgICAgICAgICAgICAgICAgIFREMTYtPm1hZ2ljWzBdLCBURDE2LT5tYWdpY1sxXSwgVEQxNi0+bWFnaWNbMl0sIFREMTYtPm1hZ2ljWzNdLAorICAgICAgICAgICAgICAgICAgIFREMzItPm1hZ2ljWzBdLCBURDMyLT5tYWdpY1sxXSwgVEQzMi0+bWFnaWNbMl0sIFREMzItPm1hZ2ljWzNdKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKFREMzIgJiYgVEQxNi0+Y2hlY2tzdW0gIT0gVEQzMi0+Y2hlY2tzdW0pCisgICAgeworICAgICAgICBFUlIodGh1bmssICIoJXMsICVzLCAlcywgJXApOiBXcm9uZyBjaGVja3N1bSAlMDhseCAoc2hvdWxkIGJlICUwOGx4KVxuIiwKKyAgICAgICAgICAgICAgICAgICBtb2R1bGUsIGZ1bmMsIG1vZHVsZTMyLCBURDMyLCBURDE2LT5jaGVja3N1bSwgVEQzMi0+Y2hlY2tzdW0pOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1cm4gVEQxNjsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgR2V0VGh1bmtTdHVmZiAgICAoS0VSTkVMMzIuNTMpCiAgKi8KIExQVk9JRCBXSU5BUEkgR2V0VGh1bmtTdHVmZihMUFNUUiBtb2R1bGUsIExQU1RSIGZ1bmMpCiB7Ci0gICAgSE1PRFVMRTMyIGhtb2QgPSBMb2FkTGlicmFyeTE2KG1vZHVsZSk7Ci0gICAgaWYgKGhtb2QgPD0gMzIpIHJldHVybiAwOwotCi0gICAgcmV0dXJuIFBUUl9TRUdfVE9fTElOKFdJTjMyX0dldFByb2NBZGRyZXNzMTYoaG1vZCwgZnVuYykpOworICAgIHJldHVybiBfbG9hZHRodW5rKG1vZHVsZSwgZnVuYywgIjxrZXJuZWw+IiwgTlVMTCk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTM1LDEzICsxNzQsOSBAQAogICAgIHsKICAgICAgICAgY2FzZSBETExfUFJPQ0VTU19BVFRBQ0g6CiAgICAgICAgIHsKLSAgICAgICAgICAgIHN0cnVjdCBUaHVua0RhdGFDb21tb24gKlREMTYgPSBHZXRUaHVua1N0dWZmKG1vZHVsZTE2LCB0aHVua2Z1bjE2KTsKLSAgICAgICAgICAgIGlmICghVEQxNiB8fCBURDE2LT5jaGVja3N1bSAhPSBURC0+Y2hlY2tzdW0KLSAgICAgICAgICAgICAgICAgICAgICB8fCBtZW1jbXAoVEQxNi0+bWFnaWMsIFRELT5tYWdpYywgNCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgRVJSKHRodW5rLCAiUHJvYmxlbSBsb2FkaW5nIDE2LWJpdCB0aHVuayBidWZmZXIhXG4iKTsKKyAgICAgICAgICAgIHN0cnVjdCBUaHVua0RhdGFDb21tb24gKlREMTY7CisgICAgICAgICAgICBpZiAoIShURDE2ID0gX2xvYWR0aHVuayhtb2R1bGUxNiwgdGh1bmtmdW4xNiwgbW9kdWxlMzIsIFREKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChkaXJlY3Rpb25TTCkKICAgICAgICAgICAgIHsKQEAgLTEwMDksNiArMTA0NCwxNSBAQAogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogCQlLRVJORUxfNDc1CQkoS0VSTkVMLjQ3NSkKKyAqIAlTZXQgdGhlIDE2LWJpdCAlZnMgdG8gdGhlIDMyLWJpdCAlZnMgKGN1cnJlbnQgVEVCIHNlbGVjdG9yKQorICovCitWT0lEIFdJTkFQSSBfS0VSTkVMXzQ3NShDT05URVhUICpjb250ZXh0KSAKK3sKKyAgICBHRVRfRlMoIFRIUkVBRF9DdXJyZW50KCktPnNhdmVkX2ZzICk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAJCUtFUk5FTF80MzEJCShLRVJORUwuNDMxKQogICoJCUlzUGVGb3JtYXQJCShXMzJTWVMuMikKICAqIENoZWNrcyB0aGUgcGFzc2VkIGZpbGVuYW1lIGlmIGl0IGlzIGEgUEUgZm9ybWF0IGV4ZWN1dGVhYmxlCmRpZmYgLS1naXQgYS93aW4zMi9uZXdmbnMuYyBiL3dpbjMyL25ld2Zucy5jCmluZGV4IDA4ZmFmMDEuLjdmNjE4ODcgMTAwNjQ0Ci0tLSBhL3dpbjMyL25ld2Zucy5jCisrKyBiL3dpbjMyL25ld2Zucy5jCkBAIC0yMzQsMTAgKzIzNCwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQRFdPUkQgbHBSZWFkVGltZW91dCApCiB7CiAgICAgRklYTUUod2luMzIsICIoJWQpOiBzdHViXG4iLGhNYWlsc2xvdCk7Ci0gICAgKmxwTWF4TWVzc2FnZVNpemUgPSBOVUxMOwotICAgICpscE5leHRTaXplID0gTlVMTDsKLSAgICAqbHBNZXNzYWdlQ291bnQgPSBOVUxMOwotICAgICpscFJlYWRUaW1lb3V0ID0gTlVMTDsKKyAgICAqbHBNYXhNZXNzYWdlU2l6ZSA9IChEV09SRClOVUxMOworICAgICpscE5leHRTaXplID0gKERXT1JEKU5VTEw7CisgICAgKmxwTWVzc2FnZUNvdW50ID0gKERXT1JEKU5VTEw7CisgICAgKmxwUmVhZFRpbWVvdXQgPSAoRFdPUkQpTlVMTDsKICAgICByZXR1cm4gVFJVRTsKIH0KIApAQCAtMzgyLDYgKzM4MiwzMSBAQAogCXJldHVybiBGQUxTRTsgCiB9CiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFNsZWVwRXggW0tFUk5FTDMyLjY4MF0KKyAqCisgKiBCVUdTCisgKiAgIFVuaW1wbGVtZW50ZWQKKyAqLworRFdPUkQgV0lOQVBJIFNsZWVwRXgoRFdPUkQgeDEsQk9PTDMyIHgyKQoreworICBGSVhNRSh3aW4zMiwiOiglZCwlbGQpOiBzdHViXG4iLHgxLHgyKTsKKyAgU2V0TGFzdEVycm9yKEVSUk9SX0NBTExfTk9UX0lNUExFTUVOVEVEKTsKKyAgcmV0dXJuIEZBTFNFOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUZXJtaW5hdGVQcm9jZXNzIFtLRVJORUwzMi42ODRdCisgKiAKKyAqIEJVR1MKKyAqICAgVW5pbXBsZW1lbnRlZAorICovCitpbnQgV0lOQVBJIFRlcm1pbmF0ZVByb2Nlc3MoSEFORExFMzIgaCwgaW50IHJldCkKK3sKKyAgRklYTUUod2luMzIsIjooJXAsJWQpOiBzdHViXG4iLGgscmV0KTsKKyAgU2V0TGFzdEVycm9yKEVSUk9SX0NBTExfTk9UX0lNUExFTUVOVEVEKTsKKwlyZXR1cm4gRkFMU0U7Cit9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIE9wZW5EZXNrdG9wMzJBIFtVU0VSMzIuNDA4XQpkaWZmIC0tZ2l0IGEvd2luMzIvcHJvY2Vzcy5jIGIvd2luMzIvcHJvY2Vzcy5jCmluZGV4IGM0YzE2MzUuLmE5ZThiMmQgMTAwNjQ0Ci0tLSBhL3dpbjMyL3Byb2Nlc3MuYworKysgYi93aW4zMi9wcm9jZXNzLmMKQEAgLTEwOCw5ICsxMDgsMTAgQEAKIAlEV09SRCBjcmVhdGlvbmZsYWdzLExQVk9JRCBlbnYsTFBDV1NUUiBjdXJkaXIsCiAJTFBTVEFSVFVQSU5GTzMyVyBzdGFydHVwaW5mbyxMUFBST0NFU1NfSU5GT1JNQVRJT04gcHJvY2Vzc2luZm8pCiB7Ci0gICAgRklYTUUod2luMzIsIiglcCwlcCwlcCwlcCwlZCwlMDhseCwlcCwlcCwlcCwlcCk6IHN0dWJcbiIsCi0gICAgICAgICAgICBhcHBuYW1lLGNtZGxpbmUscHJvY2Vzc2F0dHJpYnV0ZXMsdGhyZWFkYXR0cmlidXRlcywKLSAgICAgICAgICAgIGluaGVyaXRoYW5kbGVzLGNyZWF0aW9uZmxhZ3MsZW52LGN1cmRpcixzdGFydHVwaW5mbyxwcm9jZXNzaW5mbyApOworICAgIEZJWE1FKHdpbjMyLCIoJXAsJXMsJXAsJXAsJWQsJTA4bHgsJXAsJXMsJXAsJXApOiBzdHViXG4iLAorICAgICAgICAgICAgYXBwbmFtZSxkZWJ1Z3N0cl93KGNtZGxpbmUpLHByb2Nlc3NhdHRyaWJ1dGVzLHRocmVhZGF0dHJpYnV0ZXMsCisgICAgICAgICAgICBpbmhlcml0aGFuZGxlcyxjcmVhdGlvbmZsYWdzLGVudixkZWJ1Z3N0cl93KGN1cmRpciksc3RhcnR1cGluZm8sCisJICAgIHByb2Nlc3NpbmZvICk7CiAgICAgLyogbWFrZSBmcm9tIGxjYyB1c2VzIHN5c3RlbSBhcyBmYWxsYmFjayBpZiBDcmVhdGVQcm9jZXNzIHJldHVybnMKICAgICAgICBGQUxTRSwgc28gcmV0dXJuIGZhbHNlICovCiAgICAgcmV0dXJuIEZBTFNFOwpkaWZmIC0tZ2l0IGEvd2luZG93cy9tZGkuYyBiL3dpbmRvd3MvbWRpLmMKaW5kZXggNDdlN2UwNy4uYjMwNWJhMCAxMDA2NDQKLS0tIGEvd2luZG93cy9tZGkuYworKysgYi93aW5kb3dzL21kaS5jCkBAIC0xMzgzLDcgKzEzODMsNyBAQAogICAgIE1ESUNMSUVOVElORk8gICAgICAgKmNpOwogICAgIFdORCAgICAgICAgICAgICAgICAgKmNsaWVudFduZDsKIAotICAgIGNsaWVudFduZCAgPSBXSU5fRmluZFduZFB0cihHZXRQYXJlbnQxNihod25kKSk7CisgICAgY2xpZW50V25kICA9IFdJTl9GaW5kV25kUHRyKFdJTl9GaW5kV25kUHRyKGh3bmQpLT5wYXJlbnQtPmh3bmRTZWxmKTsKICAgICBjaSAgICAgICAgID0gKE1ESUNMSUVOVElORk8gKikgY2xpZW50V25kLT53RXh0cmE7CiAKICAgICBzd2l0Y2ggKG1lc3NhZ2UpCmRpZmYgLS1naXQgYS93aW5kb3dzL3N5c2NvbG9yLmMgYi93aW5kb3dzL3N5c2NvbG9yLmMKaW5kZXggZmU0ODQzMS4uYzNjMTBiMyAxMDA2NDQKLS0tIGEvd2luZG93cy9zeXNjb2xvci5jCisrKyBiL3dpbmRvd3Mvc3lzY29sb3IuYwpAQCAtNDYsMTkgKzQ2LDE5IEBACiB7CiAgICAgIlNjcm9sbGJhciIsICIyMjMgMjIzIDIyMyIsICAgICAgLyogQ09MT1JfU0NST0xMQkFSICAgICAgICAgICAqLwogICAgICJCYWNrZ3JvdW5kIiwgIjE5MiAxOTIgMTkyIiwgICAgIC8qIENPTE9SX0JBQ0tHUk9VTkQgICAgICAgICAgKi8KLSAgICAiQWN0aXZlVGl0bGUiLCAiMCA2NCAxMjgiLCAgICAgICAvKiBDT0xPUl9BQ1RJVkVDQVBUSU9OICAgICAgICovCi0gICAgIkluYWN0aXZlVGl0bGUiLCAiMjU1IDI1NSAyNTUiLCAgLyogQ09MT1JfSU5BQ1RJVkVDQVBUSU9OICAgICAqLworICAgICJBY3RpdmVUaXRsZSIsICIwIDAgMTI4IiwgICAgICAgIC8qIENPTE9SX0FDVElWRUNBUFRJT04gICAgICAgKi8KKyAgICAiSW5hY3RpdmVUaXRsZSIsICIxMjggMTI4IDEyOCIsICAvKiBDT0xPUl9JTkFDVElWRUNBUFRJT04gICAgICovCiAgICAgIk1lbnUiLCAiMTkyIDE5MiAxOTIiLCAgICAgICAgICAgLyogQ09MT1JfTUVOVSAgICAgICAgICAgICAgICAqLwogICAgICJXaW5kb3ciLCAiMjU1IDI1NSAyNTUiLCAgICAgICAgIC8qIENPTE9SX1dJTkRPVyAgICAgICAgICAgICAgKi8KICAgICAiV2luZG93RnJhbWUiLCAiMCAwIDAiLCAgICAgICAgICAvKiBDT0xPUl9XSU5ET1dGUkFNRSAgICAgICAgICovCiAgICAgIk1lbnVUZXh0IiwgIjAgMCAwIiwgICAgICAgICAgICAgLyogQ09MT1JfTUVOVVRFWFQgICAgICAgICAgICAqLwogICAgICJXaW5kb3dUZXh0IiwgIjAgMCAwIiwgICAgICAgICAgIC8qIENPTE9SX1dJTkRPV1RFWFQgICAgICAgICAgKi8KICAgICAiVGl0bGVUZXh0IiwgIjI1NSAyNTUgMjU1IiwgICAgICAvKiBDT0xPUl9DQVBUSU9OVEVYVCAgICAgICAgICovCi0gICAgIkFjdGl2ZUJvcmRlciIsICIxMjggMTI4IDEyOCIsICAgLyogQ09MT1JfQUNUSVZFQk9SREVSICAgICAgICAqLwotICAgICJJbmFjdGl2ZUJvcmRlciIsICIyNTUgMjU1IDI1NSIsIC8qIENPTE9SX0lOQUNUSVZFQk9SREVSICAgICAgKi8KKyAgICAiQWN0aXZlQm9yZGVyIiwgIjE5MiAxOTIgMTkyIiwgICAvKiBDT0xPUl9BQ1RJVkVCT1JERVIgICAgICAgICovCisgICAgIkluYWN0aXZlQm9yZGVyIiwgIjE5MiAxOTIgMTkyIiwgLyogQ09MT1JfSU5BQ1RJVkVCT1JERVIgICAgICAqLwogICAgICJBcHBXb3Jrc3BhY2UiLCAiMTI4IDEyOCAxMjgiLCAgIC8qIENPTE9SX0FQUFdPUktTUEFDRSAgICAgICAgKi8KLSAgICAiSGlsaWdodCIsICIyMjMgMjIzIDIyMyIsICAgICAgICAvKiBDT0xPUl9ISUdITElHSFQgICAgICAgICAgICovCi0gICAgIkhpbGlnaHRUZXh0IiwgIjAgMCAwIiwgICAgICAgICAgLyogQ09MT1JfSElHSExJR0hUVEVYVCAgICAgICAqLworICAgICJIaWxpZ2h0IiwgIjAgMCAxMjgiLCAgICAgICAgICAgIC8qIENPTE9SX0hJR0hMSUdIVCAgICAgICAgICAgKi8KKyAgICAiSGlsaWdodFRleHQiLCAiMjU1IDI1NSAyNTUiLCAgICAvKiBDT0xPUl9ISUdITElHSFRURVhUICAgICAgICovCiAgICAgIkJ1dHRvbkZhY2UiLCAiMTkyIDE5MiAxOTIiLCAgICAgLyogQ09MT1JfQlRORkFDRSAgICAgICAgICAgICAqLwogICAgICJCdXR0b25TaGFkb3ciLCAiMTI4IDEyOCAxMjgiLCAgIC8qIENPTE9SX0JUTlNIQURPVyAgICAgICAgICAgKi8KICAgICAiR3JheVRleHQiLCAiMTkyIDE5MiAxOTIiLCAgICAgICAvKiBDT0xPUl9HUkFZVEVYVCAgICAgICAgICAgICovCmRpZmYgLS1naXQgYS93aW5kb3dzL3dpbnBvcy5jIGIvd2luZG93cy93aW5wb3MuYwppbmRleCAxZWJhOTg2Li44YmVjNTE5IDEwMDY0NAotLS0gYS93aW5kb3dzL3dpbnBvcy5jCisrKyBiL3dpbmRvd3Mvd2lucG9zLmMKQEAgLTE1NDIsNyArMTU0MiwxMCBAQAogICAgIGlmKCBmQ2hhbmdlRm9jdXMgJiYgR2V0Rm9jdXMzMigpICkKIAlpZiggV0lOX0dldFRvcFBhcmVudChHZXRGb2N1czMyKCkpICE9IGh3bmRBY3RpdmUgKQogCSAgICBGT0NVU19Td2l0Y2hGb2N1cyggR2V0Rm9jdXMzMigpLAotCQkJICAgICAgICh3bmRQdHItPmR3U3R5bGUgJiBXU19NSU5JTUlaRSk/IDA6IGh3bmRBY3RpdmUpOworCQkJICAgICAgICh3bmRQdHIgJiYgKHduZFB0ci0+ZHdTdHlsZSAmIFdTX01JTklNSVpFKSk/CisJCQkgICAgICAgMDoKKwkJCSAgICAgICBod25kQWN0aXZlCisJICAgICk7CiAKICAgICBpZiggIWh3bmRQcmV2QWN0aXZlICYmIHduZFB0ciAmJiAKIAkgd25kUHRyLT53aW5kb3cgJiYgISh3bmRQdHItPmZsYWdzICYgV0lOX01BTkFHRUQpICkKQEAgLTIxNTUsOCArMjE1OCwxMSBAQAogICAgIGlmICgoaHduZEluc2VydEFmdGVyICE9IEhXTkRfVE9QKSAmJiAoaHduZEluc2VydEFmdGVyICE9IEhXTkRfQk9UVE9NKSkKICAgICAgICB7CiAJIFdORCogd25kID0gV0lOX0ZpbmRXbmRQdHIoaHduZEluc2VydEFmdGVyKTsKLQkgaWYoIHduZC0+cGFyZW50ICE9IHduZFB0ci0+cGFyZW50ICkgcmV0dXJuIEZBTFNFOwotCSBpZiggd25kLT5uZXh0ID09IHduZFB0ciApIGZsYWdzIHw9IFNXUF9OT1pPUkRFUjsKKworCSBpZiggd25kUHRyICkgeworCSAgIGlmKCB3bmQtPnBhcmVudCAhPSB3bmRQdHItPnBhcmVudCApIHJldHVybiBGQUxTRTsKKwkgICBpZiggd25kLT5uZXh0ID09IHduZFB0ciApIGZsYWdzIHw9IFNXUF9OT1pPUkRFUjsKKwkgfQogICAgICAgIH0KICAgICBlbHNlIGlmICghKHduZFB0ci0+d2luZG93KSkKICAgICAgICAgIC8qIEZJWE1FOiB0aGUgZm9sbG93aW5nIG9wdGltaXphdGlvbiBpcyBubyBnb29kIGZvciAiWC1lZCIgd2luZG93cyAqLwpkaWZmIC0tZ2l0IGEvd2luZS5pbmkgYi93aW5lLmluaQppbmRleCA3Y2RlODhiLi4zMmYwYjcxIDEwMDY0NAotLS0gYS93aW5lLmluaQorKysgYi93aW5lLmluaQpAQCAtNzQsMyArNzQsNiBAQAogCiBbc3B5XQogRXhjbHVkZT1XTV9TSVpFO1dNX1RJTUVSOworCitbVHdlYWsuTGF5b3V0XQorO1dpbjk1TG9vaz10cnVlCg==