-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathuserjs-base64.js
3 lines (3 loc) · 107 KB
/
userjs-base64.js
1
2
3
// 20250113 v133 user.js as base64 from main repo
// place this in a file named "userjs-base64.js"
const userjsbase64="LyoqKioqKgoqICAgIG5hbWU6IGFya2VuZm94IHVzZXIuanMKKiAgICBkYXRlOiAxMyBKYW51YXJ5IDIwMjUKKiB2ZXJzaW9uOiAxMzMKKiAgICB1cmxzOiBodHRwczovL2dpdGh1Yi5jb20vYXJrZW5mb3gvdXNlci5qcyBbcmVwb10KKiAgICAgICAgOiBodHRwczovL2Fya2VuZm94LmdpdGh1Yi5pby9ndWkvIFtpbnRlcmFjdGl2ZV0KKiBsaWNlbnNlOiBNSVQ6IGh0dHBzOi8vZ2l0aHViLmNvbS9hcmtlbmZveC91c2VyLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0UudHh0CgoqIFJFQURNRToKCiAgMS4gQ29uc2lkZXIgdXNpbmcgVG9yIEJyb3dzZXIgaWYgaXQgbWVldHMgeW91ciBuZWVkcyBvciBmaXRzIHlvdXIgdGhyZWF0IG1vZGVsCiAgICAgICAqIGh0dHBzOi8vMjAxOS53d3cudG9ycHJvamVjdC5vcmcvYWJvdXQvdG9ydXNlcnMuaHRtbAogIDIuIFJlYWQgdGhlIGVudGlyZSB3aWtpCiAgICAgICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hcmtlbmZveC91c2VyLmpzL3dpa2kKICAzLiBJZiB5b3Ugc2tpcHBlZCBzdGVwIDIsIHJldHVybiB0byBzdGVwIDIKICA0LiBNYWtlIGNoYW5nZXMgaW4gYSB1c2VyLW92ZXJyaWRlcy5qcwogICAgICAgKiBUaGVyZSBhcmUgb2Z0ZW4gdHJhZGUtb2ZmcyBhbmQgY29uZmxpY3RzIGJldHdlZW4gc2VjdXJpdHkgdnMgcHJpdmFjeSB2cyBhbnRpLXRyYWNraW5nCiAgICAgICAgIGFuZCB0aGVzZSBuZWVkIHRvIGJlIGJhbGFuY2VkIGFnYWluc3QgZnVuY3Rpb25hbGl0eSAmIGNvbnZlbmllbmNlICYgYnJlYWthZ2UKICAgICAgICogU29tZSBzaXRlIGJyZWFrYWdlIGFuZCB1bmludGVuZGVkIGNvbnNlcXVlbmNlcyB3aWxsIGhhcHBlbi4gRXZlcnlvbmUncyBleHBlcmllbmNlIHdpbGwgZGlmZmVyCiAgICAgICAgIGUuZy4gc29tZSB1c2VyIGRhdGEgaXMgZXJhc2VkIG9uIGV4aXQgKHNlY3Rpb24gMjgwMCksIGNoYW5nZSB0aGlzIHRvIHN1aXQgeW91ciBuZWVkcwogICAgICAgKiBXaGlsZSBub3QgMTAwJSBkZWZpbml0aXZlLCBzZWFyY2ggZm9yICJbU0VUVVAiIHRhZ3MKICA1LiBTb21lIHRhZyBpbmZvCiAgICAgICBbU0VUVVAtU0VDVVJJVFldIGl0J3Mgb25lIGl0ZW0sIHJlYWQgaXQKICAgICAgICAgICAgW1NFVFVQLVdFQl0gY2FuIGNhdXNlIHNvbWUgd2Vic2l0ZXMgdG8gYnJlYWsKICAgICAgICAgW1NFVFVQLUNIUk9NRV0gY2hhbmdlcyBob3cgRmlyZWZveCBpdHNlbGYgYmVoYXZlcyAoaS5lLiBub3QgZGlyZWN0bHkgd2Vic2l0ZSByZWxhdGVkKQogIDYuIE92ZXJyaWRlIFJlY2lwZXM6IGh0dHBzOi8vZ2l0aHViLmNvbS9hcmtlbmZveC91c2VyLmpzL2lzc3Vlcy8xMDgwCgoqIFJFTEVBU0VTOiBodHRwczovL2dpdGh1Yi5jb20vYXJrZW5mb3gvdXNlci5qcy9yZWxlYXNlcwoKICAqIFVzZSB0aGUgYXJrZW5mb3ggcmVsZWFzZSB0aGF0IG1hdGNoZXMgeW91ciBGaXJlZm94IHZlcnNpb24KICAgIC0gRE9OJ1Qgd2FpdCBmb3IgYXJrZW5mb3ggdG8gdXBkYXRlIEZpcmVmb3gsIG5vdGhpbmcgbWFqb3IgY2hhbmdlcyB0aGVzZSBkYXlzCiAgKiBFYWNoIHJlbGVhc2UKICAgIC0gcnVuIHByZWZzQ2xlYW5lciB0byByZXNldCBwcmVmcyBtYWRlIGluYWN0aXZlLCBpbmNsdWRpbmcgZGVwcmVjYXRlZCAoOTk5OSkKICAqIEVTUgogICAgLSBJdCBpcyByZWNvbW1lbmRlZCB0byBub3QgdXNlIHRoZSB1cGRhdGVyLCBvciB5b3Ugd2lsbCBnZXQgYSBsYXRlciB2ZXJzaW9uIHdoaWNoIG1heSBjYXVzZSBpc3N1ZXMuCiAgICAgIFNvIHlvdSBzaG91bGQgbWFudWFsbHkgYXBwZW5kIHlvdXIgb3ZlcnJpZGVzIChhbmQga2VlcCBhIGNvcHkpLCBhbmQgbWFudWFsbHkgdXBkYXRlIHdoZW4geW91CiAgICAgIGNoYW5nZSBFU1IgcmVsZWFzZXMgKGFya2VuZm94IGlzIGFscmVhZHkgcGFzdCB0aGF0IHJlbGVhc2UpCiAgICAtIElmIHlvdSBkZWNpZGUgdG8ga2VlcCB1cGRhdGluZywgdGhlbiB0aGUgb251cyBpcyBvbiB5b3UgLSBhbHNvIHNlZSBzZWN0aW9uIDk5OTkKCiogSU5ERVg6CgogIDAxMDA6IFNUQVJUVVAKICAwMjAwOiBHRU9MT0NBVElPTgogIDAzMDA6IFFVSUVURVIgRk9YCiAgMDQwMDogU0FGRSBCUk9XU0lORwogIDA2MDA6IEJMT0NLIElNUExJQ0lUIE9VVEJPVU5ECiAgMDcwMDogRE5TIC8gRG9IIC8gUFJPWFkgLyBTT0NLUwogIDA4MDA6IExPQ0FUSU9OIEJBUiAvIFNFQVJDSCBCQVIgLyBTVUdHRVNUSU9OUyAvIEhJU1RPUlkgLyBGT1JNUwogIDA5MDA6IFBBU1NXT1JEUwogIDEwMDA6IERJU0sgQVZPSURBTkNFCiAgMTIwMDogSFRUUFMgKFNTTC9UTFMgLyBPQ1NQIC8gQ0VSVFMgLyBIUEtQKQogIDE2MDA6IFJFRkVSRVJTCiAgMTcwMDogQ09OVEFJTkVSUwogIDIwMDA6IFBMVUdJTlMgLyBNRURJQSAvIFdFQlJUQwogIDI0MDA6IERPTSAoRE9DVU1FTlQgT0JKRUNUIE1PREVMKQogIDI2MDA6IE1JU0NFTExBTkVPVVMKICAyNzAwOiBFVFAgKEVOSEFOQ0VEIFRSQUNLSU5HIFBST1RFQ1RJT04pCiAgMjgwMDogU0hVVERPV04gJiBTQU5JVElaSU5HCiAgNDAwMDogRlBQIChmaW5nZXJwcmludGluZ1Byb3RlY3Rpb24pCiAgNDUwMDogT1BUSU9OQUwgUkZQIChyZXNpc3RGaW5nZXJwcmludGluZykKICA1MDAwOiBPUFRJT05BTCBPUFNFQwogIDU1MDA6IE9QVElPTkFMIEhBUkRFTklORwogIDYwMDA6IERPTidUIFRPVUNICiAgNzAwMDogRE9OJ1QgQk9USEVSCiAgODAwMDogRE9OJ1QgQk9USEVSOiBGSU5HRVJQUklOVElORwogIDkwMDA6IE5PTi1QUk9KRUNUIFJFTEFURUQKICA5OTk5OiBERVBSRUNBVEVEIC8gUkVOQU1FRAoKKioqKioqLwoKLyogU1RBUlQ6IGludGVybmFsIGN1c3RvbSBwcmVmIHRvIHRlc3QgZm9yIHN5bnRheCBlcnJvcnMKICogW05PVEVdIE5vdCBhbGwgc3ludGF4IGVycm9ycyBjYXVzZSBwYXJzaW5nIHRvIGFib3J0IGkuZS4gcmVhY2hpbmcgdGhlIGxhc3QgZGVidWcgcHJlZgogKiBubyBsb25nZXIgbmVjZXNzYXJpbHkgbWVhbnMgdGhhdCBhbGwgcHJlZnMgaGF2ZSBiZWVuIGFwcGxpZWQuIENoZWNrIHRoZSBjb25zb2xlIHJpZ2h0CiAqIGFmdGVyIHN0YXJ0dXAgZm9yIGFueSB3YXJuaW5ncy9lcnJvciBtZXNzYWdlcyByZWxhdGVkIHRvIG5vbi1hcHBsaWVkIHByZWZzCiAqIFsxXSBodHRwczovL2Jsb2cubW96aWxsYS5vcmcvbm5ldGhlcmNvdGUvMjAxOC8wMy8wOS9hLW5ldy1wcmVmZXJlbmNlcy1wYXJzZXItZm9yLWZpcmVmb3gvICoqKi8KdXNlcl9wcmVmKCJfdXNlci5qcy5wYXJyb3QiLCAiU1RBUlQ6IE9oIHllcywgdGhlIE5vcndlZ2lhbiBCbHVlLi4uIHdoYXQncyB3cm9uZyB3aXRoIGl0PyIpOwoKLyogMDAwMDogZGlzYWJsZSBhYm91dDpjb25maWcgd2FybmluZyAqKiovCnVzZXJfcHJlZigiYnJvd3Nlci5hYm91dENvbmZpZy5zaG93V2FybmluZyIsIGZhbHNlKTsKCi8qKiogW1NFQ1RJT04gMDEwMF06IFNUQVJUVVAgKioqLwp1c2VyX3ByZWYoIl91c2VyLmpzLnBhcnJvdCIsICIwMTAwIHN5bnRheCBlcnJvcjogdGhlIHBhcnJvdCdzIGRlYWQhIik7Ci8qIDAxMDI6IHNldCBzdGFydHVwIHBhZ2UgW1NFVFVQLUNIUk9NRV0KICogMD1ibGFuaywgMT1ob21lLCAyPWxhc3QgdmlzaXRlZCBwYWdlLCAzPXJlc3VtZSBwcmV2aW91cyBzZXNzaW9uCiAqIFtOT1RFXSBTZXNzaW9uIFJlc3RvcmUgaXMgY2xlYXJlZCB3aXRoIGhpc3RvcnkgKDI4MTEpLCBhbmQgbm90IHVzZWQgaW4gUHJpdmF0ZSBCcm93c2luZyBtb2RlCiAqIFtTRVRUSU5HXSBHZW5lcmFsPlN0YXJ0dXA+UmVzdG9yZSBwcmV2aW91cyBzZXNzaW9uICoqKi8KdXNlcl9wcmVmKCJicm93c2VyLnN0YXJ0dXAucGFnZSIsIDApOwovKiAwMTAzOiBzZXQgSE9NRStORVdXSU5ET1cgcGFnZQogKiBhYm91dDpob21lPUZpcmVmb3ggSG9tZSAoZGVmYXVsdCwgc2VlIDAxMDUpLCBjdXN0b20gVVJMLCBhYm91dDpibGFuawogKiBbU0VUVElOR10gSG9tZT5OZXcgV2luZG93cyBhbmQgVGFicz5Ib21lcGFnZSBhbmQgbmV3IHdpbmRvd3MgKioqLwp1c2VyX3ByZWYoImJyb3dzZXIuc3RhcnR1cC5ob21lcGFnZSIsICJhYm91dDpibGFuayIpOwovKiAwMTA0OiBzZXQgTkVXVEFCIHBhZ2UKICogdHJ1ZT1GaXJlZm94IEhvbWUgKGRlZmF1bHQsIHNlZSAwMTA1KSwgZmFsc2U9YmxhbmsgcGFnZQogKiBbU0VUVElOR10gSG9tZT5OZXcgV2luZG93cyBhbmQgVGFicz5OZXcgdGFicyAqKiovCnVzZXJfcHJlZigiYnJvd3Nlci5uZXd0YWJwYWdlLmVuYWJsZWQiLCBmYWxzZSk7Ci8qIDAxMDU6IGRpc2FibGUgc3BvbnNvcmVkIGNvbnRlbnQgb24gRmlyZWZveCBIb21lIChBY3Rpdml0eSBTdHJlYW0pCiAqIFtTRVRUSU5HXSBIb21lPkZpcmVmb3ggSG9tZSBDb250ZW50ICoqKi8KdXNlcl9wcmVmKCJicm93c2VyLm5ld3RhYnBhZ2UuYWN0aXZpdHktc3RyZWFtLnNob3dTcG9uc29yZWQiLCBmYWxzZSk7IC8vIFtGRjU4K10KdXNlcl9wcmVmKCJicm93c2VyLm5ld3RhYnBhZ2UuYWN0aXZpdHktc3RyZWFtLnNob3dTcG9uc29yZWRUb3BTaXRlcyIsIGZhbHNlKTsgLy8gW0ZGODMrXSBTaG9ydGN1dHM+U3BvbnNvcmVkIHNob3J0Y3V0cwovKiAwMTA2OiBjbGVhciBkZWZhdWx0IHRvcHNpdGVzCiAqIFtOT1RFXSBUaGlzIGRvZXMgbm90IGJsb2NrIHlvdSBmcm9tIGFkZGluZyB5b3VyIG93biAqKiovCnVzZXJfcHJlZigiYnJvd3Nlci5uZXd0YWJwYWdlLmFjdGl2aXR5LXN0cmVhbS5kZWZhdWx0LnNpdGVzIiwgIiIpOwoKLyoqKiBbU0VDVElPTiAwMjAwXTogR0VPTE9DQVRJT04gKioqLwp1c2VyX3ByZWYoIl91c2VyLmpzLnBhcnJvdCIsICIwMjAwIHN5bnRheCBlcnJvcjogdGhlIHBhcnJvdCdzIGRlZmluaXRlbHkgZGVjZWFzZWQhIik7Ci8qIDAyMDI6IGRpc2FibGUgdXNpbmcgdGhlIE9TJ3MgZ2VvbG9jYXRpb24gc2VydmljZSAqKiovCnVzZXJfcHJlZigiZ2VvLnByb3ZpZGVyLm1zLXdpbmRvd3MtbG9jYXRpb24iLCBmYWxzZSk7IC8vIFtXSU5ET1dTXQp1c2VyX3ByZWYoImdlby5wcm92aWRlci51c2VfY29yZWxvY2F0aW9uIiwgZmFsc2UpOyAvLyBbTUFDXQp1c2VyX3ByZWYoImdlby5wcm92aWRlci51c2VfZ2VvY2x1ZSIsIGZhbHNlKTsgLy8gW0ZGMTAyK10gW0xJTlVYXQoKLyoqKiBbU0VDVElPTiAwMzAwXTogUVVJRVRFUiBGT1ggKioqLwp1c2VyX3ByZWYoIl91c2VyLmpzLnBhcnJvdCIsICIwMzAwIHN5bnRheCBlcnJvcjogdGhlIHBhcnJvdCdzIG5vdCBwaW5pbicgZm9yIHRoZSBmam9yZHMhIik7Ci8qKiBSRUNPTU1FTkRBVElPTlMgKioqLwovKiAwMzIwOiBkaXNhYmxlIHJlY29tbWVuZGF0aW9uIHBhbmUgaW4gYWJvdXQ6YWRkb25zICh1c2VzIEdvb2dsZSBBbmFseXRpY3MpICoqKi8KdXNlcl9wcmVmKCJleHRlbnNpb25zLmdldEFkZG9ucy5zaG93UGFuZSIsIGZhbHNlKTsgLy8gW0hJRERFTiBQUkVGXQovKiAwMzIxOiBkaXNhYmxlIHJlY29tbWVuZGF0aW9ucyBpbiBhYm91dDphZGRvbnMnIEV4dGVuc2lvbnMgYW5kIFRoZW1lcyBwYW5lcyBbRkY2OCtdICoqKi8KdXNlcl9wcmVmKCJleHRlbnNpb25zLmh0bWxhYm91dGFkZG9ucy5yZWNvbW1lbmRhdGlvbnMuZW5hYmxlZCIsIGZhbHNlKTsKLyogMDMyMjogZGlzYWJsZSBwZXJzb25hbGl6ZWQgRXh0ZW5zaW9uIFJlY29tbWVuZGF0aW9ucyBpbiBhYm91dDphZGRvbnMgYW5kIEFNTyBbRkY2NStdCiAqIFtOT1RFXSBUaGlzIHByZWYgaGFzIG5vIGVmZmVjdCB3aGVuIEhlYWx0aCBSZXBvcnRzICgwMzMxKSBhcmUgZGlzYWJsZWQKICogW1NFVFRJTkddIFByaXZhY3kgJiBTZWN1cml0eT5GaXJlZm94IERhdGEgQ29sbGVjdGlvbiAmIFVzZT5BbGxvdyBGaXJlZm94IHRvIG1ha2UgcGVyc29uYWxpemVkIGV4dGVuc2lvbiByZWNvbW1lbmRhdGlvbnMKICogWzFdIGh0dHBzOi8vc3VwcG9ydC5tb3ppbGxhLm9yZy9rYi9wZXJzb25hbGl6ZWQtZXh0ZW5zaW9uLXJlY29tbWVuZGF0aW9ucyAqKiovCnVzZXJfcHJlZigiYnJvd3Nlci5kaXNjb3ZlcnkuZW5hYmxlZCIsIGZhbHNlKTsKLyogMDMyMzogZGlzYWJsZSBzaG9wcGluZyBleHBlcmllbmNlIFtGRjExNitdCiAqIFsxXSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0xODQwMTU2I2MwICoqKi8KdXNlcl9wcmVmKCJicm93c2VyLnNob3BwaW5nLmV4cGVyaWVuY2UyMDIzLmVuYWJsZWQiLCBmYWxzZSk7IC8vIFtERUZBVUxUOiBmYWxzZV0KCi8qKiBURUxFTUVUUlkgKioqLwovKiAwMzMwOiBkaXNhYmxlIG5ldyBkYXRhIHN1Ym1pc3Npb24gW0ZGNDErXQogKiBJZiBkaXNhYmxlZCwgbm8gcG9saWN5IGlzIHNob3duIG9yIHVwbG9hZCB0YWtlcyBwbGFjZSwgZXZlcgogKiBbMV0gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy8xMTk1NTUyICoqKi8KdXNlcl9wcmVmKCJkYXRhcmVwb3J0aW5nLnBvbGljeS5kYXRhU3VibWlzc2lvbkVuYWJsZWQiLCBmYWxzZSk7Ci8qIDAzMzE6IGRpc2FibGUgSGVhbHRoIFJlcG9ydHMKICogW1NFVFRJTkddIFByaXZhY3kgJiBTZWN1cml0eT5GaXJlZm94IERhdGEgQ29sbGVjdGlvbiAmIFVzZT5BbGxvdyBGaXJlZm94IHRvIHNlbmQgdGVjaG5pY2FsLi4uIGRhdGEgKioqLwp1c2VyX3ByZWYoImRhdGFyZXBvcnRpbmcuaGVhbHRocmVwb3J0LnVwbG9hZEVuYWJsZWQiLCBmYWxzZSk7Ci8qIDAzMzI6IGRpc2FibGUgdGVsZW1ldHJ5CiAqIFRoZSAidW5pZmllZCIgcHJlZiBhZmZlY3RzIHRoZSBiZWhhdmlvciBvZiB0aGUgImVuYWJsZWQiIHByZWYKICogLSBJZiAidW5pZmllZCIgaXMgZmFsc2UgdGhlbiAiZW5hYmxlZCIgY29udHJvbHMgdGhlIHRlbGVtZXRyeSBtb2R1bGUKICogLSBJZiAidW5pZmllZCIgaXMgdHJ1ZSB0aGVuICJlbmFibGVkIiBvbmx5IGNvbnRyb2xzIHdoZXRoZXIgdG8gcmVjb3JkIGV4dGVuZGVkIGRhdGEKICogW05PVEVdICJ0b29sa2l0LnRlbGVtZXRyeS5lbmFibGVkIiBpcyBub3cgTE9DS0VEIHRvIHJlZmxlY3QgcHJlcmVsZWFzZSAodHJ1ZSkgb3IgcmVsZWFzZSBidWlsZHMgKGZhbHNlKSBbMl0KICogWzFdIGh0dHBzOi8vZmlyZWZveC1zb3VyY2UtZG9jcy5tb3ppbGxhLm9yZy90b29sa2l0L2NvbXBvbmVudHMvdGVsZW1ldHJ5L3RlbGVtZXRyeS9pbnRlcm5hbHMvcHJlZmVyZW5jZXMuaHRtbAogKiBbMl0gaHR0cHM6Ly9tZWRpdW0uY29tL2dlb3JnLWZyaXR6c2NoZS9kYXRhLXByZWZlcmVuY2UtY2hhbmdlcy1pbi1maXJlZm94LTU4LTJkNWRmOWM0MjhiNSAqKiovCnVzZXJfcHJlZigidG9vbGtpdC50ZWxlbWV0cnkudW5pZmllZCIsIGZhbHNlKTsKdXNlcl9wcmVmKCJ0b29sa2l0LnRlbGVtZXRyeS5lbmFibGVkIiwgZmFsc2UpOyAvLyBzZWUgW05PVEVdCnVzZXJfcHJlZigidG9vbGtpdC50ZWxlbWV0cnkuc2VydmVyIiwgImRhdGE6LCIpOwp1c2VyX3ByZWYoInRvb2xraXQudGVsZW1ldHJ5LmFyY2hpdmUuZW5hYmxlZCIsIGZhbHNlKTsKdXNlcl9wcmVmKCJ0b29sa2l0LnRlbGVtZXRyeS5uZXdQcm9maWxlUGluZy5lbmFibGVkIiwgZmFsc2UpOyAvLyBbRkY1NStdCnVzZXJfcHJlZigidG9vbGtpdC50ZWxlbWV0cnkuc2h1dGRvd25QaW5nU2VuZGVyLmVuYWJsZWQiLCBmYWxzZSk7IC8vIFtGRjU1K10KdXNlcl9wcmVmKCJ0b29sa2l0LnRlbGVtZXRyeS51cGRhdGVQaW5nLmVuYWJsZWQiLCBmYWxzZSk7IC8vIFtGRjU2K10KdXNlcl9wcmVmKCJ0b29sa2l0LnRlbGVtZXRyeS5iaHJQaW5nLmVuYWJsZWQiLCBmYWxzZSk7IC8vIFtGRjU3K10gQmFja2dyb3VuZCBIYW5nIFJlcG9ydGVyCnVzZXJfcHJlZigidG9vbGtpdC50ZWxlbWV0cnkuZmlyc3RTaHV0ZG93blBpbmcuZW5hYmxlZCIsIGZhbHNlKTsgLy8gW0ZGNTcrXQovKiAwMzMzOiBkaXNhYmxlIFRlbGVtZXRyeSBDb3ZlcmFnZQogKiBbMV0gaHR0cHM6Ly9ibG9nLm1vemlsbGEub3JnL2RhdGEvMjAxOC8wOC8yMC9lZmZlY3RpdmVseS1tZWFzdXJpbmctc2VhcmNoLWluLWZpcmVmb3gvICoqKi8KdXNlcl9wcmVmKCJ0b29sa2l0LnRlbGVtZXRyeS5jb3ZlcmFnZS5vcHQtb3V0IiwgdHJ1ZSk7IC8vIFtISURERU4gUFJFRl0KdXNlcl9wcmVmKCJ0b29sa2l0LmNvdmVyYWdlLm9wdC1vdXQiLCB0cnVlKTsgLy8gW0ZGNjQrXSBbSElEREVOIFBSRUZdCnVzZXJfcHJlZigidG9vbGtpdC5jb3ZlcmFnZS5lbmRwb2ludC5iYXNlIiwgIiIpOwovKiAwMzM1OiBkaXNhYmxlIEZpcmVmb3ggSG9tZSAoQWN0aXZpdHkgU3RyZWFtKSB0ZWxlbWV0cnkgKioqLwp1c2VyX3ByZWYoImJyb3dzZXIubmV3dGFicGFnZS5hY3Rpdml0eS1zdHJlYW0uZmVlZHMudGVsZW1ldHJ5IiwgZmFsc2UpOwp1c2VyX3ByZWYoImJyb3dzZXIubmV3dGFicGFnZS5hY3Rpdml0eS1zdHJlYW0udGVsZW1ldHJ5IiwgZmFsc2UpOwoKLyoqIFNUVURJRVMgKioqLwovKiAwMzQwOiBkaXNhYmxlIFN0dWRpZXMKICogW1NFVFRJTkddIFByaXZhY3kgJiBTZWN1cml0eT5GaXJlZm94IERhdGEgQ29sbGVjdGlvbiAmIFVzZT5BbGxvdyBGaXJlZm94IHRvIGluc3RhbGwgYW5kIHJ1biBzdHVkaWVzICoqKi8KdXNlcl9wcmVmKCJhcHAuc2hpZWxkLm9wdG91dHN0dWRpZXMuZW5hYmxlZCIsIGZhbHNlKTsKLyogMDM0MTogZGlzYWJsZSBOb3JtYW5keS9TaGllbGQgW0ZGNjArXQogKiBTaGllbGQgaXMgYSB0ZWxlbWV0cnkgc3lzdGVtIHRoYXQgY2FuIHB1c2ggYW5kIHRlc3QgInJlY2lwZXMiCiAqIFsxXSBodHRwczovL21vemlsbGEuZ2l0aHViLmlvL25vcm1hbmR5LyAqKiovCnVzZXJfcHJlZigiYXBwLm5vcm1hbmR5LmVuYWJsZWQiLCBmYWxzZSk7CnVzZXJfcHJlZigiYXBwLm5vcm1hbmR5LmFwaV91cmwiLCAiIik7CgovKiogQ1JBU0ggUkVQT1JUUyAqKiovCi8qIDAzNTA6IGRpc2FibGUgQ3Jhc2ggUmVwb3J0cyAqKiovCnVzZXJfcHJlZigiYnJlYWtwYWQucmVwb3J0VVJMIiwgIiIpOwp1c2VyX3ByZWYoImJyb3dzZXIudGFicy5jcmFzaFJlcG9ydGluZy5zZW5kUmVwb3J0IiwgZmFsc2UpOyAvLyBbRkY0NCtdCiAgIC8vIHVzZXJfcHJlZigiYnJvd3Nlci5jcmFzaFJlcG9ydHMudW5zdWJtaXR0ZWRDaGVjay5lbmFibGVkIiwgZmFsc2UpOyAvLyBbRkY1MStdIFtERUZBVUxUOiBmYWxzZV0KLyogMDM1MTogZW5mb3JjZSBubyBzdWJtaXNzaW9uIG9mIGJhY2tsb2dnZWQgQ3Jhc2ggUmVwb3J0cyBbRkY1OCtdCiAqIFtTRVRUSU5HXSBQcml2YWN5ICYgU2VjdXJpdHk+RmlyZWZveCBEYXRhIENvbGxlY3Rpb24gJiBVc2U+QWxsb3cgRmlyZWZveCB0byBzZW5kIGJhY2tsb2dnZWQgY3Jhc2ggcmVwb3J0cyAgKioqLwp1c2VyX3ByZWYoImJyb3dzZXIuY3Jhc2hSZXBvcnRzLnVuc3VibWl0dGVkQ2hlY2suYXV0b1N1Ym1pdDIiLCBmYWxzZSk7IC8vIFtERUZBVUxUOiBmYWxzZV0KCi8qKiBPVEhFUiAqKiovCi8qIDAzNjA6IGRpc2FibGUgQ2FwdGl2ZSBQb3J0YWwgZGV0ZWN0aW9uCiAqIFsxXSBodHRwczovL3d3dy5lZmYub3JnL2RlZXBsaW5rcy8yMDE3LzA4L2hvdy1jYXB0aXZlLXBvcnRhbHMtaW50ZXJmZXJlLXdpcmVsZXNzLXNlY3VyaXR5LWFuZC1wcml2YWN5ICoqKi8KdXNlcl9wcmVmKCJjYXB0aXZlZGV0ZWN0LmNhbm9uaWNhbFVSTCIsICIiKTsKdXNlcl9wcmVmKCJuZXR3b3JrLmNhcHRpdmUtcG9ydGFsLXNlcnZpY2UuZW5hYmxlZCIsIGZhbHNlKTsgLy8gW0ZGNTIrXQovKiAwMzYxOiBkaXNhYmxlIE5ldHdvcmsgQ29ubmVjdGl2aXR5IGNoZWNrcyBbRkY2NStdCiAqIFsxXSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnLzE0NjA1MzcgKioqLwp1c2VyX3ByZWYoIm5ldHdvcmsuY29ubmVjdGl2aXR5LXNlcnZpY2UuZW5hYmxlZCIsIGZhbHNlKTsKCi8qKiogW1NFQ1RJT04gMDQwMF06IFNBRkUgQlJPV1NJTkcgKFNCKQogICBTQiBoYXMgdGFrZW4gbWFueSBzdGVwcyB0byBwcmVzZXJ2ZSBwcml2YWN5LiBJZiByZXF1aXJlZCwgYSBmdWxsIHVybCBpcyBuZXZlciBzZW50CiAgIHRvIEdvb2dsZSwgb25seSBhIHBhcnQtaGFzaCBvZiB0aGUgcHJlZml4LCBoaWRkZW4gd2l0aCBub2lzZSBvZiBvdGhlciByZWFsIHBhcnQtaGFzaGVzLgogICBGaXJlZm94IHRha2VzIG1lYXN1cmVzIHN1Y2ggYXMgc3RyaXBwaW5nIG91dCBpZGVudGlmeWluZyBwYXJhbWV0ZXJzIGFuZCBzaW5jZSBTQnY0IChGRjU3KykKICAgZG9lc24ndCBldmVuIHVzZSBjb29raWVzLiAoI1R1cm4gb24gYnJvd3Nlci5zYWZlYnJvd3NpbmcuZGVidWcgdG8gbW9uaXRvciB0aGlzIGFjdGl2aXR5KQoKICAgWzFdIGh0dHBzOi8vZmVlZGluZy5jbG91ZC5nZWVrLm56L3Bvc3RzL2hvdy1zYWZlLWJyb3dzaW5nLXdvcmtzLWluLWZpcmVmb3gvCiAgIFsyXSBodHRwczovL3dpa2kubW96aWxsYS5vcmcvU2VjdXJpdHkvU2FmZV9Ccm93c2luZwogICBbM10gaHR0cHM6Ly9zdXBwb3J0Lm1vemlsbGEub3JnL2tiL2hvdy1kb2VzLXBoaXNoaW5nLWFuZC1tYWx3YXJlLXByb3RlY3Rpb24td29yawogICBbNF0gaHR0cHM6Ly9lZHVjYXRlZGd1ZXNzd29yay5vcmcvcG9zdHMvc2FmZS1icm93c2luZy1wcml2YWN5LwoqKiovCnVzZXJfcHJlZigiX3VzZXIuanMucGFycm90IiwgIjA0MDAgc3ludGF4IGVycm9yOiB0aGUgcGFycm90J3MgcGFzc2VkIG9uISIpOwovKiAwNDAxOiBkaXNhYmxlIFNCIChTYWZlIEJyb3dzaW5nKQogKiBbV0FSTklOR10gRG8gdGhpcyBhdCB5b3VyIG93biByaXNrISBUaGVzZSBhcmUgdGhlIG1hc3RlciBzd2l0Y2hlcwogKiBbU0VUVElOR10gUHJpdmFjeSAmIFNlY3VyaXR5PlNlY3VyaXR5Pi4uLiBCbG9jayBkYW5nZXJvdXMgYW5kIGRlY2VwdGl2ZSBjb250ZW50ICoqKi8KICAgLy8gdXNlcl9wcmVmKCJicm93c2VyLnNhZmVicm93c2luZy5tYWx3YXJlLmVuYWJsZWQiLCBmYWxzZSk7CiAgIC8vIHVzZXJfcHJlZigiYnJvd3Nlci5zYWZlYnJvd3NpbmcucGhpc2hpbmcuZW5hYmxlZCIsIGZhbHNlKTsKLyogMDQwMjogZGlzYWJsZSBTQiBjaGVja3MgZm9yIGRvd25sb2FkcyAoYm90aCBsb2NhbCBsb29rdXBzICsgcmVtb3RlKQogKiBUaGlzIGlzIHRoZSBtYXN0ZXIgc3dpdGNoIGZvciB0aGUgc2FmZWJyb3dzaW5nLmRvd25sb2FkcyogcHJlZnMgKDA0MDMsIDA0MDQpCiAqIFtTRVRUSU5HXSBQcml2YWN5ICYgU2VjdXJpdHk+U2VjdXJpdHk+Li4uICJCbG9jayBkYW5nZXJvdXMgZG93bmxvYWRzIiAqKiovCiAgIC8vIHVzZXJfcHJlZigiYnJvd3Nlci5zYWZlYnJvd3NpbmcuZG93bmxvYWRzLmVuYWJsZWQiLCBmYWxzZSk7Ci8qIDA0MDM6IGRpc2FibGUgU0IgY2hlY2tzIGZvciBkb3dubG9hZHMgKHJlbW90ZSkKICogVG8gdmVyaWZ5IHRoZSBzYWZldHkgb2YgY2VydGFpbiBleGVjdXRhYmxlIGZpbGVzLCBGaXJlZm94IG1heSBzdWJtaXQgc29tZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUKICogZmlsZSwgaW5jbHVkaW5nIHRoZSBuYW1lLCBvcmlnaW4sIHNpemUgYW5kIGEgY3J5cHRvZ3JhcGhpYyBoYXNoIG9mIHRoZSBjb250ZW50cywgdG8gdGhlIEdvb2dsZQogKiBTYWZlIEJyb3dzaW5nIHNlcnZpY2Ugd2hpY2ggaGVscHMgRmlyZWZveCBkZXRlcm1pbmUgd2hldGhlciBvciBub3QgdGhlIGZpbGUgc2hvdWxkIGJlIGJsb2NrZWQKICogW1NFVFVQLVNFQ1VSSVRZXSBJZiB5b3UgZG8gbm90IHVuZGVyc3RhbmQgdGhpcywgb3IgeW91IHdhbnQgdGhpcyBwcm90ZWN0aW9uLCB0aGVuIG92ZXJyaWRlIHRoaXMgKioqLwp1c2VyX3ByZWYoImJyb3dzZXIuc2FmZWJyb3dzaW5nLmRvd25sb2Fkcy5yZW1vdGUuZW5hYmxlZCIsIGZhbHNlKTsKICAgLy8gdXNlcl9wcmVmKCJicm93c2VyLnNhZmVicm93c2luZy5kb3dubG9hZHMucmVtb3RlLnVybCIsICIiKTsgLy8gRGVmZW5zZS1pbi1kZXB0aAovKiAwNDA0OiBkaXNhYmxlIFNCIGNoZWNrcyBmb3IgdW53YW50ZWQgc29mdHdhcmUKICogW1NFVFRJTkddIFByaXZhY3kgJiBTZWN1cml0eT5TZWN1cml0eT4uLi4gIldhcm4geW91IGFib3V0IHVud2FudGVkIGFuZCB1bmNvbW1vbiBzb2Z0d2FyZSIgKioqLwogICAvLyB1c2VyX3ByZWYoImJyb3dzZXIuc2FmZWJyb3dzaW5nLmRvd25sb2Fkcy5yZW1vdGUuYmxvY2tfcG90ZW50aWFsbHlfdW53YW50ZWQiLCBmYWxzZSk7CiAgIC8vIHVzZXJfcHJlZigiYnJvd3Nlci5zYWZlYnJvd3NpbmcuZG93bmxvYWRzLnJlbW90ZS5ibG9ja191bmNvbW1vbiIsIGZhbHNlKTsKLyogMDQwNTogZGlzYWJsZSAiaWdub3JlIHRoaXMgd2FybmluZyIgb24gU0Igd2FybmluZ3MgW0ZGNDUrXQogKiBJZiBjbGlja2VkLCBpdCBieXBhc3NlcyB0aGUgYmxvY2sgZm9yIHRoYXQgc2Vzc2lvbi4gVGhpcyBpcyBhIG1lYW5zIGZvciBhZG1pbnMgdG8gZW5mb3JjZSBTQgogKiBbVEVTVF0gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hcmtlbmZveC91c2VyLmpzL3dpa2kvQXBwZW5kaXgtQS1UZXN0LVNpdGVzIy1tb3ppbGxhCiAqIFsxXSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnLzEyMjY0OTAgKioqLwogICAvLyB1c2VyX3ByZWYoImJyb3dzZXIuc2FmZWJyb3dzaW5nLmFsbG93T3ZlcnJpZGUiLCBmYWxzZSk7CgovKioqIFtTRUNUSU9OIDA2MDBdOiBCTE9DSyBJTVBMSUNJVCBPVVRCT1VORCBbbm90IGV4cGxpY2l0bHkgYXNrZWQgZm9yIC0gZS5nLiBjbGlja2VkIG9uXSAqKiovCnVzZXJfcHJlZigiX3VzZXIuanMucGFycm90IiwgIjA2MDAgc3ludGF4IGVycm9yOiB0aGUgcGFycm90J3Mgbm8gbW9yZSEiKTsKLyogMDYwMTogZGlzYWJsZSBsaW5rIHByZWZldGNoaW5nCiAqIFsxXSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVFRQL0xpbmtfcHJlZmV0Y2hpbmdfRkFRICoqKi8KdXNlcl9wcmVmKCJuZXR3b3JrLnByZWZldGNoLW5leHQiLCBmYWxzZSk7Ci8qIDA2MDI6IGRpc2FibGUgRE5TIHByZWZldGNoaW5nCiAqIFsxXSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvWC1ETlMtUHJlZmV0Y2gtQ29udHJvbCAqKiovCnVzZXJfcHJlZigibmV0d29yay5kbnMuZGlzYWJsZVByZWZldGNoIiwgdHJ1ZSk7CnVzZXJfcHJlZigibmV0d29yay5kbnMuZGlzYWJsZVByZWZldGNoRnJvbUhUVFBTIiwgdHJ1ZSk7Ci8qIDA2MDM6IGRpc2FibGUgcHJlZGljdG9yIC8gcHJlZmV0Y2hpbmcgKioqLwp1c2VyX3ByZWYoIm5ldHdvcmsucHJlZGljdG9yLmVuYWJsZWQiLCBmYWxzZSk7CnVzZXJfcHJlZigibmV0d29yay5wcmVkaWN0b3IuZW5hYmxlLXByZWZldGNoIiwgZmFsc2UpOyAvLyBbRkY0OCtdIFtERUZBVUxUOiBmYWxzZV0KLyogMDYwNDogZGlzYWJsZSBsaW5rLW1vdXNlb3ZlciBvcGVuaW5nIGNvbm5lY3Rpb24gdG8gbGlua2VkIHNlcnZlcgogKiBbMV0gaHR0cHM6Ly9uZXdzLnNsYXNoZG90Lm9yZy9zdG9yeS8xNS8wOC8xNC8yMzIxMjAyL2hvdy10by1xdWFzaC1maXJlZm94cy1zaWxlbnQtcmVxdWVzdHMgKioqLwp1c2VyX3ByZWYoIm5ldHdvcmsuaHR0cC5zcGVjdWxhdGl2ZS1wYXJhbGxlbC1saW1pdCIsIDApOwovKiAwNjA1OiBkaXNhYmxlIG1vdXNlZG93biBzcGVjdWxhdGl2ZSBjb25uZWN0aW9ucyBvbiBib29rbWFya3MgYW5kIGhpc3RvcnkgW0ZGOTgrXSAqKiovCnVzZXJfcHJlZigiYnJvd3Nlci5wbGFjZXMuc3BlY3VsYXRpdmVDb25uZWN0LmVuYWJsZWQiLCBmYWxzZSk7Ci8qIDA2MTA6IGVuZm9yY2Ugbm8gIkh5cGVybGluayBBdWRpdGluZyIgKGNsaWNrIHRyYWNraW5nKQogKiBbMV0gaHR0cHM6Ly93d3cuYmxlZXBpbmdjb21wdXRlci5jb20vbmV3cy9zb2Z0d2FyZS9tYWpvci1icm93c2Vycy10by1wcmV2ZW50LWRpc2FibGluZy1vZi1jbGljay10cmFja2luZy1wcml2YWN5LXJpc2svICoqKi8KICAgLy8gdXNlcl9wcmVmKCJicm93c2VyLnNlbmRfcGluZ3MiLCBmYWxzZSk7IC8vIFtERUZBVUxUOiBmYWxzZV0KCi8qKiogW1NFQ1RJT04gMDcwMF06IEROUyAvIERvSCAvIFBST1hZIC8gU09DS1MgKioqLwp1c2VyX3ByZWYoIl91c2VyLmpzLnBhcnJvdCIsICIwNzAwIHN5bnRheCBlcnJvcjogdGhlIHBhcnJvdCdzIGdpdmVuIHVwIHRoZSBnaG9zdCEiKTsKLyogMDcwMjogc2V0IHRoZSBwcm94eSBzZXJ2ZXIgdG8gZG8gYW55IEROUyBsb29rdXBzIHdoZW4gdXNpbmcgU09DS1MKICogZS5nLiBpbiBUb3IsIHRoaXMgc3RvcHMgeW91ciBsb2NhbCBETlMgc2VydmVyIGZyb20ga25vd2luZyB5b3VyIFRvciBkZXN0aW5hdGlvbgogKiBhcyBhIHJlbW90ZSBUb3Igbm9kZSB3aWxsIGhhbmRsZSB0aGUgRE5TIHJlcXVlc3QKICogWzFdIGh0dHBzOi8vdHJhYy50b3Jwcm9qZWN0Lm9yZy9wcm9qZWN0cy90b3Ivd2lraS9kb2MvVG9yaWZ5SE9XVE8vV2ViQnJvd3NlcnMgKioqLwp1c2VyX3ByZWYoIm5ldHdvcmsucHJveHkuc29ja3NfcmVtb3RlX2RucyIsIHRydWUpOwovKiAwNzAzOiBkaXNhYmxlIHVzaW5nIFVOQyAoVW5pZm9ybSBOYW1pbmcgQ29udmVudGlvbikgcGF0aHMgW0ZGNjErXQogKiBbU0VUVVAtQ0hST01FXSBDYW4gYnJlYWsgZXh0ZW5zaW9ucyBmb3IgcHJvZmlsZXMgb24gbmV0d29yayBzaGFyZXMKICogWzFdIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvMTQxMzg2OCAqKiovCnVzZXJfcHJlZigibmV0d29yay5maWxlLmRpc2FibGVfdW5jX3BhdGhzIiwgdHJ1ZSk7IC8vIFtISURERU4gUFJFRl0KLyogMDcwNDogZGlzYWJsZSBHSU8gYXMgYSBwb3RlbnRpYWwgcHJveHkgYnlwYXNzIHZlY3RvcgogKiBHdmZzL0dJTyBoYXMgYSBzZXQgb2Ygc3VwcG9ydGVkIHByb3RvY29scyBsaWtlIG9iZXgsIG5ldHdvcmssIGFyY2hpdmUsIGNvbXB1dGVyLAogKiBkYXYsIGNkZGEsIGdwaG90bzIsIHRyYXNoLCBldGMuIEZyb20gRkY4Ny0xMTcsIGJ5IGRlZmF1bHQgb25seSBzZnRwIHdhcyBhY2NlcHRlZAogKiBbMV0gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy8xNDMzNTA3CiAqIFsyXSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9HVmZzCiAqIFszXSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9HSU9fKHNvZnR3YXJlKSAqKiovCnVzZXJfcHJlZigibmV0d29yay5naW8uc3VwcG9ydGVkLXByb3RvY29scyIsICIiKTsgLy8gW0hJRERFTiBQUkVGXSBbREVGQVVMVDogIiIgRkYxMTgrXQovKiAwNzA1OiBkaXNhYmxlIHByb3h5IGRpcmVjdCBmYWlsb3ZlciBmb3Igc3lzdGVtIHJlcXVlc3RzIFtGRjkxK10KICogW1dBUk5JTkddIERlZmF1bHQgdHJ1ZSBpcyBhIHNlY3VyaXR5IGZlYXR1cmUgYWdhaW5zdCBtYWxpY2lvdXMgZXh0ZW5zaW9ucyBbMV0KICogW1NFVFVQLUNIUk9NRV0gSWYgeW91IHVzZSBhIHByb3h5IGFuZCB5b3UgdHJ1c3QgeW91ciBleHRlbnNpb25zCiAqIFsxXSBodHRwczovL2Jsb2cubW96aWxsYS5vcmcvc2VjdXJpdHkvMjAyMS8xMC8yNS9zZWN1cmluZy10aGUtcHJveHktYXBpLWZvci1maXJlZm94LWFkZC1vbnMvICoqKi8KICAgLy8gdXNlcl9wcmVmKCJuZXR3b3JrLnByb3h5LmZhaWxvdmVyX2RpcmVjdCIsIGZhbHNlKTsKLyogMDcwNjogZGlzYWJsZSBwcm94eSBieXBhc3MgZm9yIHN5c3RlbSByZXF1ZXN0IGZhaWx1cmVzIFtGRjk1K10KICogUmVtb3RlU2V0dGluZ3MsIFVwZGF0ZVNlcnZpY2UsIFRlbGVtZXRyeSBbMV0KICogW1dBUk5JTkddIElmIGZhbHNlLCB0aGlzIHdpbGwgYnJlYWsgdGhlIGZhbGxiYWNrIGZvciBzb21lIHNlY3VyaXR5IGZlYXR1cmVzCiAqIFtTRVRVUC1DSFJPTUVdIElmIHlvdSB1c2UgYSBwcm94eSBhbmQgeW91IHVuZGVyc3RhbmQgdGhlIHNlY3VyaXR5IGltcGFjdAogKiBbMV0gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9idWdsaXN0LmNnaT9idWdfaWQ9MTczMjc5MiwxNzMzOTk0LDE3MzM0ODEgKioqLwogICAvLyB1c2VyX3ByZWYoIm5ldHdvcmsucHJveHkuYWxsb3dfYnlwYXNzIiwgZmFsc2UpOwovKiAwNzEwOiBlbmFibGUgRE5TLW92ZXItSFRUUFMgKERvSCkgW0ZGNjArXQogKiAwPWRlZmF1bHQsIDI9aW5jcmVhc2VkIChUUlIgKFRydXN0ZWQgUmVjdXJzaXZlIFJlc29sdmVyKSBmaXJzdCksIDM9bWF4IChUUlIgb25seSksIDU9b2ZmIChubyByb2xsb3V0KQogKiBzZWUgImRvaC1yb2xsb3V0LmhvbWUtcmVnaW9uIjogVVNBIDIwMTksIENhbmFkYSAyMDIxLCBSdXNzaWEvVWtyYWluZSAyMDIyIFszXQogKiBbU0VUVElOR10gUHJpdmFjeSAmIFNlY3VyaXR5PkROUyBvdmVyIEhUVFBTCiAqIFsxXSBodHRwczovL2hhY2tzLm1vemlsbGEub3JnLzIwMTgvMDUvYS1jYXJ0b29uLWludHJvLXRvLWRucy1vdmVyLWh0dHBzLwogKiBbMl0gaHR0cHM6Ly93aWtpLm1vemlsbGEub3JnL1NlY3VyaXR5L0RPSC1yZXNvbHZlci1wb2xpY3kKICogWzNdIGh0dHBzOi8vc3VwcG9ydC5tb3ppbGxhLm9yZy9rYi9maXJlZm94LWRucy1vdmVyLWh0dHBzCiAqIFs0XSBodHRwczovL3d3dy5lZmYub3JnL2RlZXBsaW5rcy8yMDIwLzEyL2Rucy1kb2gtYW5kLW9kb2gtb2gtbXkteWVhci1yZXZpZXctMjAyMCAqKiovCiAgIC8vIHVzZXJfcHJlZigibmV0d29yay50cnIubW9kZSIsIDMpOwovKiAwNzEyOiBzZXQgRG9IIHByb3ZpZGVyCiAqIFRoZSBjdXN0b20gdXJpIGlzIHRoZSB2YWx1ZSBzaG93biB3aGVuIHlvdSAiQ2hvb3NlIHByb3ZpZGVyPkN1c3RvbT4iCiAqIFtOT1RFXSBJZiB5b3UgVVNFIGN1c3RvbSB0aGVuICJuZXR3b3JrLnRyci51cmkiIHNob3VsZCBiZSBzZXQgdGhlIHNhbWUKICogW1NFVFRJTkddIFByaXZhY3kgJiBTZWN1cml0eT5ETlMgb3ZlciBIVFRQUz5JbmNyZWFzZWQvTWF4PkNob29zZSBwcm92aWRlciAqKiovCiAgIC8vIHVzZXJfcHJlZigibmV0d29yay50cnIudXJpIiwgImh0dHBzOi8vZXhhbXBsZS5kbnMiKTsKICAgLy8gdXNlcl9wcmVmKCJuZXR3b3JrLnRyci5jdXN0b21fdXJpIiwgImh0dHBzOi8vZXhhbXBsZS5kbnMiKTsKCi8qKiogW1NFQ1RJT04gMDgwMF06IExPQ0FUSU9OIEJBUiAvIFNFQVJDSCBCQVIgLyBTVUdHRVNUSU9OUyAvIEhJU1RPUlkgLyBGT1JNUyAqKiovCnVzZXJfcHJlZigiX3VzZXIuanMucGFycm90IiwgIjA4MDAgc3ludGF4IGVycm9yOiB0aGUgcGFycm90J3MgY2Vhc2VkIHRvIGJlISIpOwovKiAwODAxOiBkaXNhYmxlIGxvY2F0aW9uIGJhciBtYWtpbmcgc3BlY3VsYXRpdmUgY29ubmVjdGlvbnMgW0ZGNTYrXQogKiBbMV0gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy8xMzQ4Mjc1ICoqKi8KdXNlcl9wcmVmKCJicm93c2VyLnVybGJhci5zcGVjdWxhdGl2ZUNvbm5lY3QuZW5hYmxlZCIsIGZhbHNlKTsKLyogMDgwMjogZGlzYWJsZSBsb2NhdGlvbiBiYXIgY29udGV4dHVhbCBzdWdnZXN0aW9ucwogKiBbTk9URV0gVGhlIFVJIGlzIGNvbnRyb2xsZWQgYnkgdGhlIC5lbmFibGVkIHByZWYKICogW1NFVFRJTkddIFNlYXJjaD5BZGRyZXNzIEJhcj5TdWdnZXN0aW9ucyBmcm9tLi4uCiAqIFsxXSBodHRwczovL2Jsb2cubW96aWxsYS5vcmcvZGF0YS8yMDIxLzA5LzE1L2RhdGEtYW5kLWZpcmVmb3gtc3VnZ2VzdC8gKioqLwp1c2VyX3ByZWYoImJyb3dzZXIudXJsYmFyLnF1aWNrc3VnZ2VzdC5lbmFibGVkIiwgZmFsc2UpOyAvLyBbRkY5MitdCnVzZXJfcHJlZigiYnJvd3Nlci51cmxiYXIuc3VnZ2VzdC5xdWlja3N1Z2dlc3Qubm9uc3BvbnNvcmVkIiwgZmFsc2UpOyAvLyBbRkY5NStdCnVzZXJfcHJlZigiYnJvd3Nlci51cmxiYXIuc3VnZ2VzdC5xdWlja3N1Z2dlc3Quc3BvbnNvcmVkIiwgZmFsc2UpOyAvLyBbRkY5MitdCi8qIDA4MDM6IGRpc2FibGUgbGl2ZSBzZWFyY2ggc3VnZ2VzdGlvbnMKICogW05PVEVdIEJvdGggbXVzdCBiZSB0cnVlIGZvciBsaXZlIHNlYXJjaCB0byB3b3JrIGluIHRoZSBsb2NhdGlvbiBiYXIKICogW1NFVFVQLUNIUk9NRV0gT3ZlcnJpZGUgdGhlc2UgaWYgeW91IHRydXN0IGFuZCB1c2UgYSBwcml2YWN5IHJlc3BlY3Rpbmcgc2VhcmNoIGVuZ2luZQogKiBbU0VUVElOR10gU2VhcmNoPlNob3cgc2VhcmNoIHN1Z2dlc3Rpb25zIHwgU2hvdyBzZWFyY2ggc3VnZ2VzdGlvbnMgaW4gYWRkcmVzcyBiYXIgcmVzdWx0cyAqKiovCnVzZXJfcHJlZigiYnJvd3Nlci5zZWFyY2guc3VnZ2VzdC5lbmFibGVkIiwgZmFsc2UpOwp1c2VyX3ByZWYoImJyb3dzZXIudXJsYmFyLnN1Z2dlc3Quc2VhcmNoZXMiLCBmYWxzZSk7Ci8qIDA4MDU6IGRpc2FibGUgdXJsYmFyIHRyZW5kaW5nIHNlYXJjaCBzdWdnZXN0aW9ucyBbRkYxMTgrXQogKiBbU0VUVElOR10gU2VhcmNoPlNlYXJjaCBTdWdnZXN0aW9ucz5TaG93IHRyZW5kaW5nIHNlYXJjaCBzdWdnZXN0aW9ucyAoRkYxMTkpICoqKi8KdXNlcl9wcmVmKCJicm93c2VyLnVybGJhci50cmVuZGluZy5mZWF0dXJlR2F0ZSIsIGZhbHNlKTsKLyogMDgwNjogZGlzYWJsZSB1cmxiYXIgc3VnZ2VzdGlvbnMgKioqLwp1c2VyX3ByZWYoImJyb3dzZXIudXJsYmFyLmFkZG9ucy5mZWF0dXJlR2F0ZSIsIGZhbHNlKTsgLy8gW0ZGMTE1K10KdXNlcl9wcmVmKCJicm93c2VyLnVybGJhci5mYWtlc3BvdC5mZWF0dXJlR2F0ZSIsIGZhbHNlKTsgLy8gW0ZGMTMwK10gW0RFRkFVTFQ6IGZhbHNlXQp1c2VyX3ByZWYoImJyb3dzZXIudXJsYmFyLm1kbi5mZWF0dXJlR2F0ZSIsIGZhbHNlKTsgLy8gW0ZGMTE3K10gW0hJRERFTiBQUkVGXQp1c2VyX3ByZWYoImJyb3dzZXIudXJsYmFyLnBvY2tldC5mZWF0dXJlR2F0ZSIsIGZhbHNlKTsgLy8gW0ZGMTE2K10gW0RFRkFVTFQ6IGZhbHNlXQp1c2VyX3ByZWYoImJyb3dzZXIudXJsYmFyLndlYXRoZXIuZmVhdHVyZUdhdGUiLCBmYWxzZSk7IC8vIFtGRjEwOCtdIFtERUZBVUxUOiBmYWxzZV0KdXNlcl9wcmVmKCJicm93c2VyLnVybGJhci55ZWxwLmZlYXR1cmVHYXRlIiwgZmFsc2UpOyAvLyBbRkYxMjQrXQovKiAwODA3OiBkaXNhYmxlIHVybGJhciBjbGlwYm9hcmQgc3VnZ2VzdGlvbnMgW0ZGMTE4K10gKioqLwogICAvLyB1c2VyX3ByZWYoImJyb3dzZXIudXJsYmFyLmNsaXBib2FyZC5mZWF0dXJlR2F0ZSIsIGZhbHNlKTsKLyogMDgwODogZGlzYWJsZSByZWNlbnQgc2VhcmNoZXMgW0ZGMTIwK10KICogW05PVEVdIFJlY2VudCBzZWFyY2hlcyBhcmUgY2xlYXJlZCB3aXRoIGhpc3RvcnkgKDI4MTEpCiAqIFsxXSBodHRwczovL3N1cHBvcnQubW96aWxsYS5vcmcva2Ivc2VhcmNoLXN1Z2dlc3Rpb25zLWZpcmVmb3ggKioqLwogICAvLyB1c2VyX3ByZWYoImJyb3dzZXIudXJsYmFyLnJlY2VudHNlYXJjaGVzLmZlYXR1cmVHYXRlIiwgZmFsc2UpOwovKiAwODEwOiBkaXNhYmxlIHNlYXJjaCBhbmQgZm9ybSBoaXN0b3J5CiAqIFtOT1RFXSBXZSBhbHNvIGNsZWFyIGZvcm1kYXRhIG9uIGV4aXQgKDI4MTEpCiAqIFtTRVRVUC1XRUJdIEJlIGF3YXJlIHRoYXQgYXV0b2NvbXBsZXRlIGZvcm0gZGF0YSBjYW4gYmUgcmVhZCBieSB0aGlyZCBwYXJ0aWVzIFsxXVsyXQogKiBbU0VUVElOR10gUHJpdmFjeSAmIFNlY3VyaXR5Pkhpc3Rvcnk+Q3VzdG9tIFNldHRpbmdzPlJlbWVtYmVyIHNlYXJjaCBhbmQgZm9ybSBoaXN0b3J5CiAqIFsxXSBodHRwczovL2Jsb2cubWluZGVkc2VjdXJpdHkuY29tLzIwMTEvMTAvYXV0b2NvbXBsZXRlYWdhaW4uaHRtbAogKiBbMl0gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy8zODE2ODEgKioqLwp1c2VyX3ByZWYoImJyb3dzZXIuZm9ybWZpbGwuZW5hYmxlIiwgZmFsc2UpOwovKiAwODE1OiBkaXNhYmxlIHRhYi10by1zZWFyY2ggW0ZGODUrXQogKiBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIGV4Y2x1ZGUgb24gYSBwZXItZW5naW5lIGJhc2lzIGJ5IHVuY2hlY2tpbmcgdGhlbSBpbiBPcHRpb25zPlNlYXJjaAogKiBbU0VUVElOR10gU2VhcmNoPkFkZHJlc3MgQmFyPldoZW4gdXNpbmcgdGhlIGFkZHJlc3MgYmFyLCBzdWdnZXN0PlNlYXJjaCBlbmdpbmVzICoqKi8KICAgLy8gdXNlcl9wcmVmKCJicm93c2VyLnVybGJhci5zdWdnZXN0LmVuZ2luZXMiLCBmYWxzZSk7Ci8qIDA4MjA6IGRpc2FibGUgY29sb3Jpbmcgb2YgdmlzaXRlZCBsaW5rcwogKiBbU0VUVVAtSEFSREVOXSBCdWxrIHJhcGlkIGhpc3Rvcnkgc25pZmZpbmcgd2FzIG1pdGlnYXRlZCBpbiAyMDEwIFsxXVsyXS4gU2xvd2VyIGFuZCBtb3JlIGV4cGVuc2l2ZQogKiByZWRyYXcgdGltaW5nIGF0dGFja3Mgd2VyZSBsYXJnZWx5IG1pdGlnYXRlZCBpbiBGRjc3KyBbM10uIFVzaW5nIFJGUCAoNDUwMSkgZnVydGhlciBoYW1wZXJzIHRpbWluZwogKiBhdHRhY2tzLiBEb24ndCBmb3JnZXQgY2xlYXJpbmcgaGlzdG9yeSBvbiBleGl0ICgyODExKS4gSG93ZXZlciwgc29jaWFsIGVuZ2luZWVyaW5nIFsyI2xpbWl0c11bNF1bNV0KICogYW5kIGFkdmFuY2VkIHRhcmdldGVkIHRpbWluZyBhdHRhY2tzIGNvdWxkIHN0aWxsIHByb2R1Y2UgdXNhYmxlIHJlc3VsdHMKICogWzFdIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0NTUy9Qcml2YWN5X2FuZF90aGVfOnZpc2l0ZWRfc2VsZWN0b3IKICogWzJdIGh0dHBzOi8vZGJhcm9uLm9yZy9tb3ppbGxhL3Zpc2l0ZWQtcHJpdmFjeQogKiBbM10gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy8xNjMyNzY1CiAqIFs0XSBodHRwczovL2VhcnRobG5nLmdpdGh1Yi5pby90ZXN0cGFnZXMvdmlzaXRlZF9saW5rcy5odG1sIChzZWUgZ2l0aHViIHdpa2kgQVBQRU5ESVggQSBvbiBob3cgdG8gdXNlKQogKiBbNV0gaHR0cHM6Ly9sY2FtdHVmLmJsb2dzcG90LmNvbS8yMDE2LzA4L2Nzcy1taXgtYmxlbmQtbW9kZS1pcy1iYWQtZm9yLWtlZXBpbmcuaHRtbCAqKiovCiAgIC8vIHVzZXJfcHJlZigibGF5b3V0LmNzcy52aXNpdGVkX2xpbmtzX2VuYWJsZWQiLCBmYWxzZSk7Ci8qIDA4MzA6IGVuYWJsZSBzZXBhcmF0ZSBkZWZhdWx0IHNlYXJjaCBlbmdpbmUgaW4gUHJpdmF0ZSBXaW5kb3dzIGFuZCBpdHMgVUkgc2V0dGluZwogKiBbU0VUVElOR10gU2VhcmNoPkRlZmF1bHQgU2VhcmNoIEVuZ2luZT5DaG9vc2UgYSBkaWZmZXJlbnQgZGVmYXVsdCBzZWFyY2ggZW5naW5lIGZvciBQcml2YXRlIFdpbmRvd3Mgb25seSAqKiovCnVzZXJfcHJlZigiYnJvd3Nlci5zZWFyY2guc2VwYXJhdGVQcml2YXRlRGVmYXVsdCIsIHRydWUpOyAvLyBbRkY3MCtdCnVzZXJfcHJlZigiYnJvd3Nlci5zZWFyY2guc2VwYXJhdGVQcml2YXRlRGVmYXVsdC51aS5lbmFibGVkIiwgdHJ1ZSk7IC8vIFtGRjcxK10KCi8qKiogW1NFQ1RJT04gMDkwMF06IFBBU1NXT1JEUwogICBbMV0gaHR0cHM6Ly9zdXBwb3J0Lm1vemlsbGEub3JnL2tiL3VzZS1wcmltYXJ5LXBhc3N3b3JkLXByb3RlY3Qtc3RvcmVkLWxvZ2lucy1hbmQtcGFzCioqKi8KdXNlcl9wcmVmKCJfdXNlci5qcy5wYXJyb3QiLCAiMDkwMCBzeW50YXggZXJyb3I6IHRoZSBwYXJyb3QncyBleHBpcmVkISIpOwovKiAwOTAzOiBkaXNhYmxlIGF1dG8tZmlsbGluZyB1c2VybmFtZSAmIHBhc3N3b3JkIGZvcm0gZmllbGRzCiAqIGNhbiBsZWFrIGluIGNyb3NzLXNpdGUgZm9ybXMgKmFuZCogYmUgc3Bvb2ZlZAogKiBbTk9URV0gVXNlcm5hbWUgJiBwYXNzd29yZCBpcyBzdGlsbCBhdmFpbGFibGUgd2hlbiB5b3UgZW50ZXIgdGhlIGZpZWxkCiAqIFtTRVRUSU5HXSBQcml2YWN5ICYgU2VjdXJpdHk+TG9naW5zIGFuZCBQYXNzd29yZHM+QXV0b2ZpbGwgbG9naW5zIGFuZCBwYXNzd29yZHMKICogWzFdIGh0dHBzOi8vZnJlZWRvbS10by10aW5rZXIuY29tLzIwMTcvMTIvMjcvbm8tYm91bmRhcmllcy1mb3ItdXNlci1pZGVudGl0aWVzLXdlYi10cmFja2Vycy1leHBsb2l0LWJyb3dzZXItbG9naW4tbWFuYWdlcnMvCiAqIFsyXSBodHRwczovL2hvbWVzLmVzYXQua3VsZXV2ZW4uYmUvfmFzZW5vbC9sZWFreS1mb3Jtcy8gKioqLwp1c2VyX3ByZWYoInNpZ25vbi5hdXRvZmlsbEZvcm1zIiwgZmFsc2UpOwovKiAwOTA0OiBkaXNhYmxlIGZvcm1sZXNzIGxvZ2luIGNhcHR1cmUgZm9yIFBhc3N3b3JkIE1hbmFnZXIgW0ZGNTErXSAqKiovCnVzZXJfcHJlZigic2lnbm9uLmZvcm1sZXNzQ2FwdHVyZS5lbmFibGVkIiwgZmFsc2UpOwovKiAwOTA1OiBsaW1pdCAob3IgZGlzYWJsZSkgSFRUUCBhdXRoZW50aWNhdGlvbiBjcmVkZW50aWFscyBkaWFsb2dzIHRyaWdnZXJlZCBieSBzdWItcmVzb3VyY2VzIFtGRjQxK10KICogaGFyZGVucyBhZ2FpbnN0IHBvdGVudGlhbCBjcmVkZW50aWFscyBwaGlzaGluZwogKiAwID0gZG9uJ3QgYWxsb3cgc3ViLXJlc291cmNlcyB0byBvcGVuIEhUVFAgYXV0aGVudGljYXRpb24gY3JlZGVudGlhbHMgZGlhbG9ncwogKiAxID0gZG9uJ3QgYWxsb3cgY3Jvc3Mtb3JpZ2luIHN1Yi1yZXNvdXJjZXMgdG8gb3BlbiBIVFRQIGF1dGhlbnRpY2F0aW9uIGNyZWRlbnRpYWxzIGRpYWxvZ3MKICogMiA9IGFsbG93IHN1Yi1yZXNvdXJjZXMgdG8gb3BlbiBIVFRQIGF1dGhlbnRpY2F0aW9uIGNyZWRlbnRpYWxzIGRpYWxvZ3MgKGRlZmF1bHQpICoqKi8KdXNlcl9wcmVmKCJuZXR3b3JrLmF1dGguc3VicmVzb3VyY2UtaHR0cC1hdXRoLWFsbG93IiwgMSk7Ci8qIDA5MDY6IGVuZm9yY2Ugbm8gYXV0b21hdGljIGF1dGhlbnRpY2F0aW9uIG9uIE1pY3Jvc29mdCBzaXRlcyBbRkY5MStdIFtXSU5ET1dTIDEwK10KICogW1NFVFRJTkddIFByaXZhY3kgJiBTZWN1cml0eT5Mb2dpbnMgYW5kIFBhc3N3b3Jkcz5BbGxvdyBXaW5kb3dzIHNpbmdsZSBzaWduLW9uIGZvci4uLgogKiBbMV0gaHR0cHM6Ly9zdXBwb3J0Lm1vemlsbGEub3JnL2tiL3dpbmRvd3Mtc3NvICoqKi8KICAgLy8gdXNlcl9wcmVmKCJuZXR3b3JrLmh0dHAud2luZG93cy1zc28uZW5hYmxlZCIsIGZhbHNlKTsgLy8gW0RFRkFVTFQ6IGZhbHNlXQovKiAwOTA3OiBlbmZvcmNlIG5vIGF1dG9tYXRpYyBhdXRoZW50aWNhdGlvbiBvbiBNaWNyb3NvZnQgc2l0ZXMgW0ZGMTMxK10gW01BQ10KICogT24gbWFjT1MsIFNTTyBvbmx5IHdvcmtzIG9uIGNvcnBvcmF0ZSBkZXZpY2VzICoqKi8KICAgLy8gdXNlcl9wcmVmKCJuZXR3b3JrLmh0dHAubWljcm9zb2Z0LWVudHJhLXNzby5lbmFibGVkIiwgZmFsc2UpOyAvLyBbREVGQVVMVDogZmFsc2VdCgovKioqIFtTRUNUSU9OIDEwMDBdOiBESVNLIEFWT0lEQU5DRSAqKiovCnVzZXJfcHJlZigiX3VzZXIuanMucGFycm90IiwgIjEwMDAgc3ludGF4IGVycm9yOiB0aGUgcGFycm90J3MgZ29uZSB0byBtZWV0ICdpcyBtYWtlciEiKTsKLyogMTAwMTogZGlzYWJsZSBkaXNrIGNhY2hlCiAqIFtOT1RFXSBXZSBhbHNvIGNsZWFyIGNhY2hlIG9uIGV4aXQgKDI4MTEpCiAqIFtTRVRVUC1DSFJPTUVdIElmIHlvdSB0aGluayBkaXNrIGNhY2hlIGhlbHBzIHBlcmYsIHRoZW4gZmVlbCBmcmVlIHRvIG92ZXJyaWRlIHRoaXMgKioqLwp1c2VyX3ByZWYoImJyb3dzZXIuY2FjaGUuZGlzay5lbmFibGUiLCBmYWxzZSk7Ci8qIDEwMDI6IHNldCBtZWRpYSBjYWNoZSBpbiBQcml2YXRlIEJyb3dzaW5nIHRvIGluLW1lbW9yeSBhbmQgaW5jcmVhc2UgaXRzIG1heGltdW0gc2l6ZQogKiBbTk9URV0gTVNFIChNZWRpYSBTb3VyY2UgRXh0ZW5zaW9ucykgYXJlIGFscmVhZHkgc3RvcmVkIGluLW1lbW9yeSBpbiBQQiAqKiovCnVzZXJfcHJlZigiYnJvd3Nlci5wcml2YXRlYnJvd3NpbmcuZm9yY2VNZWRpYU1lbW9yeUNhY2hlIiwgdHJ1ZSk7IC8vIFtGRjc1K10KdXNlcl9wcmVmKCJtZWRpYS5tZW1vcnlfY2FjaGVfbWF4X3NpemUiLCA2NTUzNik7Ci8qIDEwMDM6IGRpc2FibGUgc3RvcmluZyBleHRyYSBzZXNzaW9uIGRhdGEgW1NFVFVQLUNIUk9NRV0KICogZGVmaW5lIG9uIHdoaWNoIHNpdGVzIHRvIHNhdmUgZXh0cmEgc2Vzc2lvbiBkYXRhIHN1Y2ggYXMgZm9ybSBjb250ZW50LCBjb29raWVzIGFuZCBQT1NUIGRhdGEKICogMD1ldmVyeXdoZXJlLCAxPXVuZW5jcnlwdGVkIHNpdGVzLCAyPW5vd2hlcmUgKioqLwp1c2VyX3ByZWYoImJyb3dzZXIuc2Vzc2lvbnN0b3JlLnByaXZhY3lfbGV2ZWwiLCAyKTsKLyogMTAwNTogZGlzYWJsZSBhdXRvbWF0aWMgRmlyZWZveCBzdGFydCBhbmQgc2Vzc2lvbiByZXN0b3JlIGFmdGVyIHJlYm9vdCBbRkY2MitdIFtXSU5ET1dTXQogKiBbMV0gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy82MDM5MDMgKioqLwp1c2VyX3ByZWYoInRvb2xraXQud2luUmVnaXN0ZXJBcHBsaWNhdGlvblJlc3RhcnQiLCBmYWxzZSk7Ci8qIDEwMDY6IGRpc2FibGUgZmF2aWNvbnMgaW4gc2hvcnRjdXRzIFtXSU5ET1dTXQogKiBVUkwgc2hvcnRjdXRzIHVzZSBhIGNhY2hlZCByYW5kb21seSBuYW1lZCAuaWNvIGZpbGUgd2hpY2ggaXMgc3RvcmVkIGluIHlvdXIKICogcHJvZmlsZS9zaG9ydGN1dENhY2hlIGRpcmVjdG9yeS4gVGhlIC5pY28gcmVtYWlucyBhZnRlciB0aGUgc2hvcnRjdXQgaXMgZGVsZXRlZAogKiBJZiBzZXQgdG8gZmFsc2UgdGhlbiB0aGUgc2hvcnRjdXRzIHVzZSBhIGdlbmVyaWMgRmlyZWZveCBpY29uICoqKi8KdXNlcl9wcmVmKCJicm93c2VyLnNoZWxsLnNob3J0Y3V0RmF2aWNvbnMiLCBmYWxzZSk7CgovKioqIFtTRUNUSU9OIDEyMDBdOiBIVFRQUyAoU1NML1RMUyAvIE9DU1AgLyBDRVJUUyAvIEhQS1ApCiAgIFlvdXIgY2lwaGVyIGFuZCBvdGhlciBzZXR0aW5ncyBjYW4gYmUgdXNlZCBpbiBzZXJ2ZXIgc2lkZSBmaW5nZXJwcmludGluZwogICBbVEVTVF0gaHR0cHM6Ly93d3cuc3NsbGFicy5jb20vc3NsdGVzdC92aWV3TXlDbGllbnQuaHRtbAogICBbVEVTVF0gaHR0cHM6Ly9icm93c2VybGVha3MuY29tL3NzbAogICBbVEVTVF0gaHR0cHM6Ly9qYTNlci5jb20vCiAgIFsxXSBodHRwczovL3d3dy5zZWN1cml0eWFydHdvcmsuZXMvMjAxNy8wMi8wMi90bHMtY2xpZW50LWZpbmdlcnByaW50aW5nLXdpdGgtYnJvLwoqKiovCnVzZXJfcHJlZigiX3VzZXIuanMucGFycm90IiwgIjEyMDAgc3ludGF4IGVycm9yOiB0aGUgcGFycm90J3MgYSBzdGlmZiEiKTsKLyoqIFNTTCAoU2VjdXJlIFNvY2tldHMgTGF5ZXIpIC8gVExTIChUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkpICoqKi8KLyogMTIwMTogcmVxdWlyZSBzYWZlIG5lZ290aWF0aW9uCiAqIEJsb2NrcyBjb25uZWN0aW9ucyB0byBzZXJ2ZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBSRkMgNTc0NiBbMl0gYXMgdGhleSdyZSBwb3RlbnRpYWxseSB2dWxuZXJhYmxlIHRvIGEKICogTWlUTSBhdHRhY2sgWzNdLiBBIHNlcnZlciB3aXRob3V0IFJGQyA1NzQ2IGNhbiBiZSBzYWZlIGZyb20gdGhlIGF0dGFjayBpZiBpdCBkaXNhYmxlcyByZW5lZ290aWF0aW9ucwogKiBidXQgdGhlIHByb2JsZW0gaXMgdGhhdCB0aGUgYnJvd3NlciBjYW4ndCBrbm93IHRoYXQuIFNldHRpbmcgdGhpcyBwcmVmIHRvIHRydWUgaXMgdGhlIG9ubHkgd2F5IGZvciB0aGUKICogYnJvd3NlciB0byBlbnN1cmUgdGhlcmUgd2lsbCBiZSBubyB1bnNhZmUgcmVuZWdvdGlhdGlvbnMgb24gdGhlIGNoYW5uZWwgYmV0d2VlbiB0aGUgYnJvd3NlciBhbmQgdGhlIHNlcnZlcgogKiBbU0VUVVAtV0VCXSBTU0xfRVJST1JfVU5TQUZFX05FR09USUFUSU9OOiBpcyBpdCB3b3J0aCBvdmVycmlkaW5nIHRoaXMgZm9yIHRoYXQgb25lIHNpdGU/CiAqIFtTVEFUU10gU1NMIExhYnMgKE1heSAyMDI0KSByZXBvcnRzIG92ZXIgOTkuNyUgb2YgdG9wIHNpdGVzIGhhdmUgc2VjdXJlIHJlbmVnb3RpYXRpb24gWzRdCiAqIFsxXSBodHRwczovL3dpa2kubW96aWxsYS5vcmcvU2VjdXJpdHk6UmVuZWdvdGlhdGlvbgogKiBbMl0gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM1NzQ2CiAqIFszXSBodHRwczovL2N2ZS5taXRyZS5vcmcvY2dpLWJpbi9jdmVuYW1lLmNnaT9uYW1lPUNWRS0yMDA5LTM1NTUKICogWzRdIGh0dHBzOi8vd3d3LnNzbGxhYnMuY29tL3NzbC1wdWxzZS8gKioqLwp1c2VyX3ByZWYoInNlY3VyaXR5LnNzbC5yZXF1aXJlX3NhZmVfbmVnb3RpYXRpb24iLCB0cnVlKTsKLyogMTIwNjogZGlzYWJsZSBUTFMxLjMgMC1SVFQgKHJvdW5kLXRyaXAgdGltZSkgW0ZGNTErXQogKiBUaGlzIGRhdGEgaXMgbm90IGZvcndhcmQgc2VjcmV0LCBhcyBpdCBpcyBlbmNyeXB0ZWQgc29sZWx5IHVuZGVyIGtleXMgZGVyaXZlZCB1c2luZwogKiB0aGUgb2ZmZXJlZCBQU0suIFRoZXJlIGFyZSBubyBndWFyYW50ZWVzIG9mIG5vbi1yZXBsYXkgYmV0d2VlbiBjb25uZWN0aW9ucwogKiBbMV0gaHR0cHM6Ly9naXRodWIuY29tL3Rsc3dnL3RsczEzLXNwZWMvaXNzdWVzLzEwMDEKICogWzJdIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM5MDAxLmh0bWwjbmFtZS1yZXBsYXktYXR0YWNrcy13aXRoLTAtcnR0CiAqIFszXSBodHRwczovL2Jsb2cuY2xvdWRmbGFyZS5jb20vdGxzLTEtMy1vdmVydmlldy1hbmQtcS1hbmQtYS8gKioqLwp1c2VyX3ByZWYoInNlY3VyaXR5LnRscy5lbmFibGVfMHJ0dF9kYXRhIiwgZmFsc2UpOwoKLyoqIE9DU1AgKE9ubGluZSBDZXJ0aWZpY2F0ZSBTdGF0dXMgUHJvdG9jb2wpCiAgIFsxXSBodHRwczovL3Njb3R0aGVsbWUuY28udWsvcmV2b2NhdGlvbi1pcy1icm9rZW4vCiAgIFsyXSBodHRwczovL2Jsb2cubW96aWxsYS5vcmcvc2VjdXJpdHkvMjAxMy8wNy8yOS9vY3NwLXN0YXBsaW5nLWluLWZpcmVmb3gvCioqKi8KLyogMTIxMTogZW5mb3JjZSBPQ1NQIGZldGNoaW5nIHRvIGNvbmZpcm0gY3VycmVudCB2YWxpZGl0eSBvZiBjZXJ0aWZpY2F0ZXMKICogMD1kaXNhYmxlZCwgMT1lbmFibGVkIChkZWZhdWx0KSwgMj1lbmFibGVkIGZvciBFViBjZXJ0aWZpY2F0ZXMgb25seQogKiBPQ1NQIChub24tc3RhcGxlZCkgbGVha3MgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNpdGVzIHlvdSB2aXNpdCB0byB0aGUgQ0EgKGNlcnQgYXV0aG9yaXR5KQogKiBJdCdzIGEgdHJhZGUtb2ZmIGJldHdlZW4gc2VjdXJpdHkgKGNoZWNraW5nKSBhbmQgcHJpdmFjeSAobGVha2luZyBpbmZvIHRvIHRoZSBDQSkKICogW05PVEVdIFRoaXMgcHJlZiBvbmx5IGNvbnRyb2xzIE9DU1AgZmV0Y2hpbmcgYW5kIGRvZXMgbm90IGFmZmVjdCBPQ1NQIHN0YXBsaW5nCiAqIFtTRVRUSU5HXSBQcml2YWN5ICYgU2VjdXJpdHk+U2VjdXJpdHk+Q2VydGlmaWNhdGVzPlF1ZXJ5IE9DU1AgcmVzcG9uZGVyIHNlcnZlcnMuLi4KICogWzFdIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL09jc3AgKioqLwp1c2VyX3ByZWYoInNlY3VyaXR5Lk9DU1AuZW5hYmxlZCIsIDEpOyAvLyBbREVGQVVMVDogMV0KLyogMTIxMjogc2V0IE9DU1AgZmV0Y2ggZmFpbHVyZXMgKG5vbi1zdGFwbGVkLCBzZWUgMTIxMSkgdG8gaGFyZC1mYWlsCiAqIFtTRVRVUC1XRUJdIFNFQ19FUlJPUl9PQ1NQX1NFUlZFUl9FUlJPUgogKiBXaGVuIGEgQ0EgY2Fubm90IGJlIHJlYWNoZWQgdG8gdmFsaWRhdGUgYSBjZXJ0LCBGaXJlZm94IGp1c3QgY29udGludWVzIHRoZSBjb25uZWN0aW9uICg9c29mdC1mYWlsKQogKiBTZXR0aW5nIHRoaXMgcHJlZiB0byB0cnVlIHRlbGxzIEZpcmVmb3ggdG8gaW5zdGVhZCB0ZXJtaW5hdGUgdGhlIGNvbm5lY3Rpb24gKD1oYXJkLWZhaWwpCiAqIEl0IGlzIHBvaW50bGVzcyB0byBzb2Z0LWZhaWwgd2hlbiBhbiBPQ1NQIGZldGNoIGZhaWxzOiB5b3UgY2Fubm90IGNvbmZpcm0gYSBjZXJ0IGlzIHN0aWxsIHZhbGlkIChpdAogKiBjb3VsZCBoYXZlIGJlZW4gcmV2b2tlZCkgYW5kL29yIHlvdSBjb3VsZCBiZSB1bmRlciBhdHRhY2sgKGUuZy4gbWFsaWNpb3VzIGJsb2NraW5nIG9mIE9DU1Agc2VydmVycykKICogWzFdIGh0dHBzOi8vYmxvZy5tb3ppbGxhLm9yZy9zZWN1cml0eS8yMDEzLzA3LzI5L29jc3Atc3RhcGxpbmctaW4tZmlyZWZveC8KICogWzJdIGh0dHBzOi8vd3d3LmltcGVyaWFsdmlvbGV0Lm9yZy8yMDE0LzA0LzE5L3JldmNoZWNraW5nLmh0bWwgKioqLwp1c2VyX3ByZWYoInNlY3VyaXR5Lk9DU1AucmVxdWlyZSIsIHRydWUpOwoKLyoqIENFUlRTIC8gSFBLUCAoSFRUUCBQdWJsaWMgS2V5IFBpbm5pbmcpICoqKi8KLyogMTIyMzogZW5hYmxlIHN0cmljdCBQS1AgKFB1YmxpYyBLZXkgUGlubmluZykKICogMD1kaXNhYmxlZCwgMT1hbGxvdyB1c2VyIE1pVE0gKGRlZmF1bHQ7IHN1Y2ggYXMgeW91ciBhbnRpdmlydXMpLCAyPXN0cmljdAogKiBbU0VUVVAtV0VCXSBNT1pJTExBX1BLSVhfRVJST1JfS0VZX1BJTk5JTkdfRkFJTFVSRSAqKiovCnVzZXJfcHJlZigic2VjdXJpdHkuY2VydF9waW5uaW5nLmVuZm9yY2VtZW50X2xldmVsIiwgMik7Ci8qIDEyMjQ6IGVuYWJsZSBDUkxpdGUgW0ZGNzMrXQogKiAwID0gZGlzYWJsZWQKICogMSA9IGNvbnN1bHQgQ1JMaXRlIGJ1dCBvbmx5IGNvbGxlY3QgdGVsZW1ldHJ5CiAqIDIgPSBjb25zdWx0IENSTGl0ZSBhbmQgZW5mb3JjZSBib3RoICJSZXZva2VkIiBhbmQgIk5vdCBSZXZva2VkIiByZXN1bHRzCiAqIDMgPSBjb25zdWx0IENSTGl0ZSBhbmQgZW5mb3JjZSAiTm90IFJldm9rZWQiIHJlc3VsdHMsIGJ1dCBkZWZlciB0byBPQ1NQIGZvciAiUmV2b2tlZCIgKGRlZmF1bHQpCiAqIFsxXSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL2J1Z2xpc3QuY2dpP2J1Z19pZD0xNDI5ODAwLDE2NzA5ODUsMTc1MzA3MQogKiBbMl0gaHR0cHM6Ly9ibG9nLm1vemlsbGEub3JnL3NlY3VyaXR5L3RhZy9jcmxpdGUvICoqKi8KdXNlcl9wcmVmKCJzZWN1cml0eS5yZW1vdGVfc2V0dGluZ3MuY3JsaXRlX2ZpbHRlcnMuZW5hYmxlZCIsIHRydWUpOwp1c2VyX3ByZWYoInNlY3VyaXR5LnBraS5jcmxpdGVfbW9kZSIsIDIpOwoKLyoqIE1JWEVEIENPTlRFTlQgKioqLwovKiAxMjQxOiBkaXNhYmxlIGluc2VjdXJlIHBhc3NpdmUgY29udGVudCAoc3VjaCBhcyBpbWFnZXMpIG9uIGh0dHBzIHBhZ2VzICoqKi8KICAgLy8gdXNlcl9wcmVmKCJzZWN1cml0eS5taXhlZF9jb250ZW50LmJsb2NrX2Rpc3BsYXlfY29udGVudCIsIHRydWUpOyAvLyBEZWZlbnNlLWluLWRlcHRoIChzZWUgMTI0NCkKLyogMTI0NDogZW5hYmxlIEhUVFBTLU9ubHkgbW9kZSBpbiBhbGwgd2luZG93cwogKiBXaGVuIHRoZSB0b3AtbGV2ZWwgaXMgSFRUUFMsIGluc2VjdXJlIHN1YnJlc291cmNlcyBhcmUgYWxzbyB1cGdyYWRlZCAoc2lsZW50IGZhaWwpCiAqIFtTRVRUSU5HXSB0byBhZGQgc2l0ZSBleGNlcHRpb25zOiBQYWRsb2NrPkhUVFBTLU9ubHkgbW9kZT5PbiAoYWZ0ZXIgIkNvbnRpbnVlIHRvIEhUVFAgU2l0ZSIpCiAqIFtTRVRUSU5HXSBQcml2YWN5ICYgU2VjdXJpdHk+SFRUUFMtT25seSBNb2RlIChhbmQgbWFuYWdlIGV4Y2VwdGlvbnMpCiAqIFtURVNUXSBodHRwOi8vZXhhbXBsZS5jb20gW3VwZ3JhZGVdCiAqIFtURVNUXSBodHRwOi8vaHR0cGZvcmV2ZXIuY29tLyB8IGh0dHA6Ly9odHRwLnJpcCBbbm8gdXBncmFkZV0gKioqLwp1c2VyX3ByZWYoImRvbS5zZWN1cml0eS5odHRwc19vbmx5X21vZGUiLCB0cnVlKTsgLy8gW0ZGNzYrXQogICAvLyB1c2VyX3ByZWYoImRvbS5zZWN1cml0eS5odHRwc19vbmx5X21vZGVfcGJtIiwgdHJ1ZSk7IC8vIFtGRjgwK10KLyogMTI0NTogZW5hYmxlIEhUVFBTLU9ubHkgbW9kZSBmb3IgbG9jYWwgcmVzb3VyY2VzIFtGRjc3K10gKioqLwogICAvLyB1c2VyX3ByZWYoImRvbS5zZWN1cml0eS5odHRwc19vbmx5X21vZGUudXBncmFkZV9sb2NhbCIsIHRydWUpOwovKiAxMjQ2OiBkaXNhYmxlIEhUVFAgYmFja2dyb3VuZCByZXF1ZXN0cyBbRkY4MitdCiAqIFdoZW4gYXR0ZW1wdGluZyB0byB1cGdyYWRlLCBpZiB0aGUgc2VydmVyIGRvZXNuJ3QgcmVzcG9uZCB3aXRoaW4gMyBzZWNvbmRzLCBGaXJlZm94IHNlbmRzCiAqIGEgdG9wLWxldmVsIEhUVFAgcmVxdWVzdCB3aXRob3V0IHBhdGggaW4gb3JkZXIgdG8gY2hlY2sgaWYgdGhlIHNlcnZlciBzdXBwb3J0cyBIVFRQUyBvciBub3QKICogVGhpcyBpcyBkb25lIHRvIGF2b2lkIHdhaXRpbmcgZm9yIGEgdGltZW91dCB3aGljaCB0YWtlcyA5MCBzZWNvbmRzCiAqIFsxXSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL2J1Z2xpc3QuY2dpP2J1Z19pZD0xNjQyMzg3LDE2NjA5NDUgKioqLwp1c2VyX3ByZWYoImRvbS5zZWN1cml0eS5odHRwc19vbmx5X21vZGVfc2VuZF9odHRwX2JhY2tncm91bmRfcmVxdWVzdCIsIGZhbHNlKTsKCi8qKiBVSSAoVXNlciBJbnRlcmZhY2UpICoqKi8KLyogMTI3MDogZGlzcGxheSB3YXJuaW5nIG9uIHRoZSBwYWRsb2NrIGZvciAiYnJva2VuIHNlY3VyaXR5IiAoaWYgMTIwMSBpcyBmYWxzZSkKICogQnVnOiB3YXJuaW5nIHBhZGxvY2sgbm90IGluZGljYXRlZCBmb3Igc3VicmVzb3VyY2VzIG9uIGEgc2VjdXJlIHBhZ2UhIFsyXQogKiBbMV0gaHR0cHM6Ly93aWtpLm1vemlsbGEub3JnL1NlY3VyaXR5OlJlbmVnb3RpYXRpb24KICogWzJdIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvMTM1MzcwNSAqKiovCnVzZXJfcHJlZigic2VjdXJpdHkuc3NsLnRyZWF0X3Vuc2FmZV9uZWdvdGlhdGlvbl9hc19icm9rZW4iLCB0cnVlKTsKLyogMTI3MjogZGlzcGxheSBhZHZhbmNlZCBpbmZvcm1hdGlvbiBvbiBJbnNlY3VyZSBDb25uZWN0aW9uIHdhcm5pbmcgcGFnZXMKICogb25seSB3b3JrcyB3aGVuIGl0J3MgcG9zc2libGUgdG8gYWRkIGFuIGV4Y2VwdGlvbgogKiBpLmUuIGl0IGRvZXNuJ3Qgd29yayBmb3IgSFNUUyBkaXNjcmVwYW5jaWVzIChodHRwczovL3N1YmRvbWFpbi5wcmVsb2FkZWQtaHN0cy5iYWRzc2wuY29tLykKICogW1RFU1RdIGh0dHBzOi8vZXhwaXJlZC5iYWRzc2wuY29tLyAqKiovCnVzZXJfcHJlZigiYnJvd3Nlci54dWwuZXJyb3JfcGFnZXMuZXhwZXJ0X2JhZF9jZXJ0IiwgdHJ1ZSk7CgovKioqIFtTRUNUSU9OIDE2MDBdOiBSRUZFUkVSUwogICAgICAgICAgICAgICAgICBmdWxsIFVSSTogaHR0cHM6Ly9leGFtcGxlLmNvbTo4ODg4L2Zvby9iYXIuaHRtbD9pZD0xMjM0CiAgICAgc2NoZW1lK2hvc3QrcG9ydCtwYXRoOiBodHRwczovL2V4YW1wbGUuY29tOjg4ODgvZm9vL2Jhci5odG1sCiAgICAgICAgICBzY2hlbWUraG9zdCtwb3J0OiBodHRwczovL2V4YW1wbGUuY29tOjg4ODgKICAgWzFdIGh0dHBzOi8vZmVlZGluZy5jbG91ZC5nZWVrLm56L3Bvc3RzL3R3ZWFraW5nLXJlZmVycmVyLWZvci1wcml2YWN5LWluLWZpcmVmb3gvCioqKi8KdXNlcl9wcmVmKCJfdXNlci5qcy5wYXJyb3QiLCAiMTYwMCBzeW50YXggZXJyb3I6IHRoZSBwYXJyb3QgcmVzdHMgaW4gcGVhY2UhIik7Ci8qIDE2MDI6IGNvbnRyb2wgdGhlIGFtb3VudCBvZiBjcm9zcy1vcmlnaW4gaW5mb3JtYXRpb24gdG8gc2VuZCBbRkY1MitdCiAqIDA9c2VuZCBmdWxsIFVSSSAoZGVmYXVsdCksIDE9c2NoZW1lK2hvc3QrcG9ydCtwYXRoLCAyPXNjaGVtZStob3N0K3BvcnQgKioqLwp1c2VyX3ByZWYoIm5ldHdvcmsuaHR0cC5yZWZlcmVyLlhPcmlnaW5UcmltbWluZ1BvbGljeSIsIDIpOwoKLyoqKiBbU0VDVElPTiAxNzAwXTogQ09OVEFJTkVSUyAqKiovCnVzZXJfcHJlZigiX3VzZXIuanMucGFycm90IiwgIjE3MDAgc3ludGF4IGVycm9yOiB0aGUgcGFycm90J3MgYml0IHRoZSBkdXN0ISIpOwovKiAxNzAxOiBlbmFibGUgQ29udGFpbmVyIFRhYnMgYW5kIGl0cyBVSSBzZXR0aW5nIFtGRjUwK10KICogW1NFVFRJTkddIEdlbmVyYWw+VGFicz5FbmFibGUgQ29udGFpbmVyIFRhYnMKICogaHR0cHM6Ly93aWtpLm1vemlsbGEub3JnL1NlY3VyaXR5L0NvbnRleHR1YWxfSWRlbnRpdHlfUHJvamVjdC9Db250YWluZXJzICoqKi8KdXNlcl9wcmVmKCJwcml2YWN5LnVzZXJDb250ZXh0LmVuYWJsZWQiLCB0cnVlKTsKdXNlcl9wcmVmKCJwcml2YWN5LnVzZXJDb250ZXh0LnVpLmVuYWJsZWQiLCB0cnVlKTsKLyogMTcwMjogc2V0IGJlaGF2aW9yIG9uICIrIFRhYiIgYnV0dG9uIHRvIGRpc3BsYXkgY29udGFpbmVyIG1lbnUgb24gbGVmdCBjbGljayBbRkY3NCtdCiAqIFtOT1RFXSBUaGUgbWVudSBpcyBhbHdheXMgc2hvd24gb24gbG9uZyBwcmVzcyBhbmQgcmlnaHQgY2xpY2sKICogW1NFVFRJTkddIEdlbmVyYWw+VGFicz5FbmFibGUgQ29udGFpbmVyIFRhYnM+U2V0dGluZ3M+U2VsZWN0IGEgY29udGFpbmVyIGZvciBlYWNoIG5ldyB0YWIgKioqLwogICAvLyB1c2VyX3ByZWYoInByaXZhY3kudXNlckNvbnRleHQubmV3VGFiQ29udGFpbmVyT25MZWZ0Q2xpY2suZW5hYmxlZCIsIHRydWUpOwovKiAxNzAzOiBzZXQgZXh0ZXJuYWwgbGlua3MgdG8gb3BlbiBpbiBzaXRlLXNwZWNpZmljIGNvbnRhaW5lcnMgW0ZGMTIzK10KICogW1NFVFVQLVdFQl0gRGVwZW5kaW5nIG9uIHlvdXIgY29udGFpbmVyIGV4dGVuc2lvbihzKSBhbmQgdGhlaXIgc2V0dGluZ3MKICogdHJ1ZT1GaXJlZm94IHdpbGwgbm90IGNob29zZSBhIGNvbnRhaW5lciAoc28geW91ciBleHRlbnNpb24gY2FuKQogKiBmYWxzZT1GaXJlZm94IHdpbGwgY2hvb3NlIHRoZSBjb250YWluZXIvbm8tY29udGFpbmVyIChkZWZhdWx0KQogKiBbMV0gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy8xODc0NTk5ICoqKi8KICAgLy8gdXNlcl9wcmVmKCJicm93c2VyLmxpbmsuZm9yY2VfZGVmYXVsdF91c2VyX2NvbnRleHRfaWRfZm9yX2V4dGVybmFsX29wZW5zIiwgdHJ1ZSk7CgovKioqIFtTRUNUSU9OIDIwMDBdOiBQTFVHSU5TIC8gTUVESUEgLyBXRUJSVEMgKioqLwp1c2VyX3ByZWYoIl91c2VyLmpzLnBhcnJvdCIsICIyMDAwIHN5bnRheCBlcnJvcjogdGhlIHBhcnJvdCdzIHNudWZmZWQgaXQhIik7Ci8qIDIwMDI6IGZvcmNlIFdlYlJUQyBpbnNpZGUgdGhlIHByb3h5IFtGRjcwK10gKioqLwp1c2VyX3ByZWYoIm1lZGlhLnBlZXJjb25uZWN0aW9uLmljZS5wcm94eV9vbmx5X2lmX2JlaGluZF9wcm94eSIsIHRydWUpOwovKiAyMDAzOiBmb3JjZSBhIHNpbmdsZSBuZXR3b3JrIGludGVyZmFjZSBmb3IgSUNFIGNhbmRpZGF0ZXMgZ2VuZXJhdGlvbiBbRkY0MitdCiAqIFdoZW4gdXNpbmcgYSBzeXN0ZW0td2lkZSBwcm94eSwgaXQgdXNlcyB0aGUgcHJveHkgaW50ZXJmYWNlCiAqIFsxXSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9BUEkvUlRDSWNlQ2FuZGlkYXRlCiAqIFsyXSBodHRwczovL3dpa2kubW96aWxsYS5vcmcvTWVkaWEvV2ViUlRDL1ByaXZhY3kgKioqLwp1c2VyX3ByZWYoIm1lZGlhLnBlZXJjb25uZWN0aW9uLmljZS5kZWZhdWx0X2FkZHJlc3Nfb25seSIsIHRydWUpOwovKiAyMDA0OiBmb3JjZSBleGNsdXNpb24gb2YgcHJpdmF0ZSBJUHMgZnJvbSBJQ0UgY2FuZGlkYXRlcyBbRkY1MStdCiAqIFtTRVRVUC1IQVJERU5dIFRoaXMgd2lsbCBwcm90ZWN0IHlvdXIgcHJpdmF0ZSBJUCBldmVuIGluIFRSVVNURUQgc2NlbmFyaW9zIGFmdGVyIHlvdQogKiBncmFudCBkZXZpY2UgYWNjZXNzLCBidXQgb2Z0ZW4gcmVzdWx0cyBpbiBicmVha2FnZSBvbiB2aWRlby1jb25mZXJlbmNpbmcgcGxhdGZvcm1zICoqKi8KICAgLy8gdXNlcl9wcmVmKCJtZWRpYS5wZWVyY29ubmVjdGlvbi5pY2Uubm9faG9zdCIsIHRydWUpOwovKiAyMDIwOiBkaXNhYmxlIEdNUCAoR2Vja28gTWVkaWEgUGx1Z2lucykKICogWzFdIGh0dHBzOi8vd2lraS5tb3ppbGxhLm9yZy9HZWNrb01lZGlhUGx1Z2lucyAqKiovCiAgIC8vIHVzZXJfcHJlZigibWVkaWEuZ21wLXByb3ZpZGVyLmVuYWJsZWQiLCBmYWxzZSk7CgovKioqIFtTRUNUSU9OIDI0MDBdOiBET00gKERPQ1VNRU5UIE9CSkVDVCBNT0RFTCkgKioqLwp1c2VyX3ByZWYoIl91c2VyLmpzLnBhcnJvdCIsICIyNDAwIHN5bnRheCBlcnJvcjogdGhlIHBhcnJvdCdzIGtpY2tlZCB0aGUgYnVja2V0ISIpOwovKiAyNDAyOiBwcmV2ZW50IHNjcmlwdHMgZnJvbSBtb3ZpbmcgYW5kIHJlc2l6aW5nIG9wZW4gd2luZG93cyAqKiovCnVzZXJfcHJlZigiZG9tLmRpc2FibGVfd2luZG93X21vdmVfcmVzaXplIiwgdHJ1ZSk7CgovKioqIFtTRUNUSU9OIDI2MDBdOiBNSVNDRUxMQU5FT1VTICoqKi8KdXNlcl9wcmVmKCJfdXNlci5qcy5wYXJyb3QiLCAiMjYwMCBzeW50YXggZXJyb3I6IHRoZSBwYXJyb3QncyBydW4gZG93biB0aGUgY3VydGFpbiEiKTsKLyogMjYwMzogcmVtb3ZlIHRlbXAgZmlsZXMgb3BlbmVkIGZyb20gbm9uLVBCIHdpbmRvd3Mgd2l0aCBhbiBleHRlcm5hbCBhcHBsaWNhdGlvbgogKiBbMV0gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9idWdsaXN0LmNnaT9idWdfaWQ9MzAyNDMzLDE3Mzg1NzQgKioqLwp1c2VyX3ByZWYoImJyb3dzZXIuZG93bmxvYWQuc3RhcnRfZG93bmxvYWRzX2luX3RtcF9kaXIiLCB0cnVlKTsgLy8gW0ZGMTAyK10KdXNlcl9wcmVmKCJicm93c2VyLmhlbHBlckFwcHMuZGVsZXRlVGVtcEZpbGVPbkV4aXQiLCB0cnVlKTsKLyogMjYwNjogZGlzYWJsZSBVSVRvdXIgYmFja2VuZCBzbyB0aGVyZSBpcyBubyBjaGFuY2UgdGhhdCBhIHJlbW90ZSBwYWdlIGNhbiB1c2UgaXQgKioqLwp1c2VyX3ByZWYoImJyb3dzZXIudWl0b3VyLmVuYWJsZWQiLCBmYWxzZSk7CiAgIC8vIHVzZXJfcHJlZigiYnJvd3Nlci51aXRvdXIudXJsIiwgIiIpOyAvLyBEZWZlbnNlLWluLWRlcHRoCi8qIDI2MDg6IHJlc2V0IHJlbW90ZSBkZWJ1Z2dpbmcgdG8gZGlzYWJsZWQKICogWzFdIGh0dHBzOi8vZ2l0bGFiLnRvcnByb2plY3Qub3JnL3Rwby9hcHBsaWNhdGlvbnMvdG9yLWJyb3dzZXIvLS9pc3N1ZXMvMTYyMjIgKioqLwp1c2VyX3ByZWYoImRldnRvb2xzLmRlYnVnZ2VyLnJlbW90ZS1lbmFibGVkIiwgZmFsc2UpOyAvLyBbREVGQVVMVDogZmFsc2VdCi8qIDI2MTU6IGRpc2FibGUgd2Vic2l0ZXMgb3ZlcnJpZGluZyBGaXJlZm94J3Mga2V5Ym9hcmQgc2hvcnRjdXRzIFtGRjU4K10KICogMCAoZGVmYXVsdCkgb3IgMT1hbGxvdywgMj1ibG9jawogKiBbU0VUVElOR10gdG8gYWRkIHNpdGUgZXhjZXB0aW9uczogQ3RybCtJPlBlcm1pc3Npb25zPk92ZXJyaWRlIEtleWJvYXJkIFNob3J0Y3V0cyAqKiovCiAgIC8vIHVzZXJfcHJlZigicGVybWlzc2lvbnMuZGVmYXVsdC5zaG9ydGN1dHMiLCAyKTsKLyogMjYxNjogcmVtb3ZlIHNwZWNpYWwgcGVybWlzc2lvbnMgZm9yIGNlcnRhaW4gbW96aWxsYSBkb21haW5zIFtGRjM1K10KICogWzFdIHJlc291cmNlOi8vYXBwL2RlZmF1bHRzL3Blcm1pc3Npb25zICoqKi8KdXNlcl9wcmVmKCJwZXJtaXNzaW9ucy5tYW5hZ2VyLmRlZmF1bHRzVXJsIiwgIiIpOwovKiAyNjE5OiB1c2UgUHVueWNvZGUgaW4gSW50ZXJuYXRpb25hbGl6ZWQgRG9tYWluIE5hbWVzIHRvIGVsaW1pbmF0ZSBwb3NzaWJsZSBzcG9vZmluZwogKiBbU0VUVVAtV0VCXSBNaWdodCBiZSB1bmRlc2lyYWJsZSBmb3Igbm9uLWxhdGluIGFscGhhYmV0IHVzZXJzIHNpbmNlIGxlZ2l0aW1hdGUgSUROJ3MgYXJlIGFsc28gcHVueWNvZGVkCiAqIFtURVNUXSBodHRwczovL3d3dy54bi0tODBhazZhYTkyZS5jb20vICh3d3cuYXBwbGUuY29tKQogKiBbMV0gaHR0cHM6Ly93aWtpLm1vemlsbGEub3JnL0lETl9EaXNwbGF5X0FsZ29yaXRobQogKiBbMl0gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSUROX2hvbW9ncmFwaF9hdHRhY2sKICogWzNdIGh0dHBzOi8vY3ZlLm1pdHJlLm9yZy9jZ2ktYmluL2N2ZWtleS5jZ2k/a2V5d29yZD1wdW55Y29kZStmaXJlZm94CiAqIFs0XSBodHRwczovL3d3dy54dWRvbmd6LmNvbS9ibG9nLzIwMTcvaWRuLXBoaXNoaW5nLyAqKiovCnVzZXJfcHJlZigibmV0d29yay5JRE5fc2hvd19wdW55Y29kZSIsIHRydWUpOwovKiAyNjIwOiBlbmZvcmNlIFBERkpTLCBkaXNhYmxlIFBERkpTIHNjcmlwdGluZwogKiBUaGlzIHNldHRpbmcgY29udHJvbHMgaWYgdGhlIG9wdGlvbiAiRGlzcGxheSBpbiBGaXJlZm94IiBpcyBhdmFpbGFibGUgaW4gdGhlIHNldHRpbmcgYmVsb3cKICogICBhbmQgYnkgZWZmZWN0IGNvbnRyb2xzIHdoZXRoZXIgUERGcyBhcmUgaGFuZGxlZCBpbi1icm93c2VyIG9yIGV4dGVybmFsbHkgKCJBc2siIG9yICJPcGVuIFdpdGgiKQogKiBbV0hZXSBwZGZqcyBpcyBsaWdodHdlaWdodCwgb3BlbiBzb3VyY2UsIGFuZCBzZWN1cmU6IHRoZSBsYXN0IGV4cGxvaXQgd2FzIEp1bmUgMjAxNSBbMV0KICogICBJdCBkb2Vzbid0IGJyZWFrICJzdGF0ZSBzZXBhcmF0aW9uIiBvZiBicm93c2VyIGNvbnRlbnQgKGJ5IG5vdCBzaGFyaW5nIHdpdGggT1MsIGluZGVwZW5kZW50IGFwcHMpLgogKiAgIEl0IG1haW50YWlucyBkaXNrIGF2b2lkYW5jZSBhbmQgYXBwbGljYXRpb24gZGF0YSBpc29sYXRpb24uIEl0J3MgY29udmVuaWVudC4gWW91IGNhbiBzdGlsbCBzYXZlIHRvIGRpc2suCiAqIFtOT1RFXSBKUyBjYW4gc3RpbGwgZm9yY2UgYSBwZGYgdG8gb3BlbiBpbi1icm93c2VyIGJ5IGJ1bmRsaW5nIGl0cyBvd24gY29kZQogKiBbU0VUVVAtQ0hST01FXSBZb3UgbWF5IHByZWZlciBhIGRpZmZlcmVudCBwZGYgcmVhZGVyIGZvciBzZWN1cml0eS93b3JrZmxvdyByZWFzb25zCiAqIFtTRVRUSU5HXSBHZW5lcmFsPkFwcGxpY2F0aW9ucz5Qb3J0YWJsZSBEb2N1bWVudCBGb3JtYXQgKFBERikKICogWzFdIGh0dHBzOi8vY3ZlLm1pdHJlLm9yZy9jZ2ktYmluL2N2ZWtleS5jZ2k/a2V5d29yZD1wZGYuanMrZmlyZWZveCAqKiovCnVzZXJfcHJlZigicGRmanMuZGlzYWJsZWQiLCBmYWxzZSk7IC8vIFtERUZBVUxUOiBmYWxzZV0KdXNlcl9wcmVmKCJwZGZqcy5lbmFibGVTY3JpcHRpbmciLCBmYWxzZSk7IC8vIFtGRjg2K10KLyogMjYyNDogZGlzYWJsZSBtaWRkbGUgY2xpY2sgb24gbmV3IHRhYiBidXR0b24gb3BlbmluZyBVUkxzIG9yIHNlYXJjaGVzIHVzaW5nIGNsaXBib2FyZCBbRkYxMTUrXSAqLwp1c2VyX3ByZWYoImJyb3dzZXIudGFicy5zZWFyY2hjbGlwYm9hcmRmb3IubWlkZGxlY2xpY2siLCBmYWxzZSk7IC8vIFtERUZBVUxUOiBmYWxzZSBOT04tTElOVVhdCi8qIDI2MzA6IGRpc2FibGUgY29udGVudCBhbmFseXNpcyBieSBETFAgKERhdGEgTG9zcyBQcmV2ZW50aW9uKSBhZ2VudHMKICogRExQIGFnZW50cyBhcmUgYmFja2dyb3VuZCBwcm9jZXNzZXMgb24gbWFuYWdlZCBjb21wdXRlcnMgdGhhdCBhbGxvdyBlbnRlcnByaXNlcyB0byBtb25pdG9yIGxvY2FsbHkgcnVubmluZwogKiBhcHBsaWNhdGlvbnMgZm9yIGRhdGEgZXhmaWx0cmF0aW9uIGV2ZW50cywgd2hpY2ggdGhleSBjYW4gYWxsb3cvYmxvY2sgYmFzZWQgb24gY3VzdG9tZXIgZGVmaW5lZCBETFAgcG9saWNpZXMuCiAqIDA9QmxvY2sgYWxsIHJlcXVlc3RzLCAxPVdhcm4gb24gYWxsIHJlcXVlc3RzICh3aGljaCBsZXRzIHRoZSB1c2VyIGRlY2lkZSksIDI9QWxsb3cgYWxsIHJlcXVlc3RzCiAqIFsxXSBodHRwczovL2dpdGh1Yi5jb20vY2hyb21pdW0vY29udGVudF9hbmFseXNpc19zZGsgKi8KdXNlcl9wcmVmKCJicm93c2VyLmNvbnRlbnRhbmFseXNpcy5lbmFibGVkIiwgZmFsc2UpOyAvLyBbRkYxMjErXSBbREVGQVVMVDogZmFsc2VdCnVzZXJfcHJlZigiYnJvd3Nlci5jb250ZW50YW5hbHlzaXMuZGVmYXVsdF9yZXN1bHQiLCAwKTsgLy8gW0ZGMTI3K10gW0RFRkFVTFQ6IDBdCgovKiogRE9XTkxPQURTICoqKi8KLyogMjY1MTogZW5hYmxlIHVzZXIgaW50ZXJhY3Rpb24gZm9yIHNlY3VyaXR5IGJ5IGFsd2F5cyBhc2tpbmcgd2hlcmUgdG8gZG93bmxvYWQKICogW1NFVFVQLUNIUk9NRV0gT24gQW5kcm9pZCB0aGlzIGJsb2NrcyBsb25ndGFwcGluZyBhbmQgc2F2aW5nIGltYWdlcwogKiBbU0VUVElOR10gR2VuZXJhbD5Eb3dubG9hZHM+QWx3YXlzIGFzayB5b3Ugd2hlcmUgdG8gc2F2ZSBmaWxlcyAqKiovCnVzZXJfcHJlZigiYnJvd3Nlci5kb3dubG9hZC51c2VEb3dubG9hZERpciIsIGZhbHNlKTsKLyogMjY1MjogZGlzYWJsZSBkb3dubG9hZHMgcGFuZWwgb3BlbmluZyBvbiBldmVyeSBkb3dubG9hZCBbRkY5NitdICoqKi8KdXNlcl9wcmVmKCJicm93c2VyLmRvd25sb2FkLmFsd2F5c09wZW5QYW5lbCIsIGZhbHNlKTsKLyogMjY1MzogZGlzYWJsZSBhZGRpbmcgZG93bmxvYWRzIHRvIHRoZSBzeXN0ZW0ncyAicmVjZW50IGRvY3VtZW50cyIgbGlzdCAqKiovCnVzZXJfcHJlZigiYnJvd3Nlci5kb3dubG9hZC5tYW5hZ2VyLmFkZFRvUmVjZW50RG9jcyIsIGZhbHNlKTsKLyogMjY1NDogZW5hYmxlIHVzZXIgaW50ZXJhY3Rpb24gZm9yIHNlY3VyaXR5IGJ5IGFsd2F5cyBhc2tpbmcgaG93IHRvIGhhbmRsZSBuZXcgbWltZXR5cGVzIFtGRjEwMStdCiAqIFtTRVRUSU5HXSBHZW5lcmFsPkZpbGVzIGFuZCBBcHBsaWNhdGlvbnM+V2hhdCBzaG91bGQgRmlyZWZveCBkbyB3aXRoIG90aGVyIGZpbGVzICoqKi8KdXNlcl9wcmVmKCJicm93c2VyLmRvd25sb2FkLmFsd2F5c19hc2tfYmVmb3JlX2hhbmRsaW5nX25ld190eXBlcyIsIHRydWUpOwoKLyoqIEVYVEVOU0lPTlMgKioqLwovKiAyNjYwOiBsaW1pdCBhbGxvd2VkIGV4dGVuc2lvbiBkaXJlY3RvcmllcwogKiAxPXByb2ZpbGUsIDI9dXNlciwgND1hcHBsaWNhdGlvbiwgOD1zeXN0ZW0sIDE2PXRlbXBvcmFyeSwgMzE9YWxsCiAqIFRoZSBwcmVmIHZhbHVlIHJlcHJlc2VudHMgdGhlIHN1bTogZS5nLiA1IHdvdWxkIGJlIHByb2ZpbGUgYW5kIGFwcGxpY2F0aW9uIGRpcmVjdG9yaWVzCiAqIFtTRVRVUC1DSFJPTUVdIEJyZWFrcyB1c2FnZSBvZiBmaWxlcyB3aGljaCBhcmUgaW5zdGFsbGVkIG91dHNpZGUgYWxsb3dlZCBkaXJlY3RvcmllcwogKiBbMV0gaHR0cHM6Ly9hcmNoaXZlLmlzL0RZakFNICoqKi8KdXNlcl9wcmVmKCJleHRlbnNpb25zLmVuYWJsZWRTY29wZXMiLCA1KTsgLy8gW0hJRERFTiBQUkVGXQogICAvLyB1c2VyX3ByZWYoImV4dGVuc2lvbnMuYXV0b0Rpc2FibGVTY29wZXMiLCAxNSk7IC8vIFtERUZBVUxUOiAxNV0KLyogMjY2MTogZGlzYWJsZSBieXBhc3NpbmcgM3JkIHBhcnR5IGV4dGVuc2lvbiBpbnN0YWxsIHByb21wdHMgW0ZGODIrXQogKiBbMV0gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9idWdsaXN0LmNnaT9idWdfaWQ9MTY1OTUzMCwxNjgxMzMxICoqKi8KdXNlcl9wcmVmKCJleHRlbnNpb25zLnBvc3REb3dubG9hZFRoaXJkUGFydHlQcm9tcHQiLCBmYWxzZSk7Ci8qIDI2NjI6IGRpc2FibGUgd2ViZXh0ZW5zaW9uIHJlc3RyaWN0aW9ucyBvbiBjZXJ0YWluIG1vemlsbGEgZG9tYWlucyAoeW91IGFsc28gbmVlZCA0NTAzKSBbRkY2MCtdCiAqIFsxXSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL2J1Z2xpc3QuY2dpP2J1Z19pZD0xMzg0MzMwLDE0MDY3OTUsMTQxNTY0NCwxNDUzOTg4ICoqKi8KICAgLy8gdXNlcl9wcmVmKCJleHRlbnNpb25zLndlYmV4dGVuc2lvbnMucmVzdHJpY3RlZERvbWFpbnMiLCAiIik7CgovKioqIFtTRUNUSU9OIDI3MDBdOiBFVFAgKEVOSEFOQ0VEIFRSQUNLSU5HIFBST1RFQ1RJT04pICoqKi8KdXNlcl9wcmVmKCJfdXNlci5qcy5wYXJyb3QiLCAiMjcwMCBzeW50YXggZXJyb3I6IHRoZSBwYXJyb3QncyBqb2luZWQgdGhlIGJsZWVkaW4nIGNob2lyIGludmlzaWJsZSEiKTsKLyogMjcwMTogZW5hYmxlIEVUUCBTdHJpY3QgTW9kZSBbRkY4NitdCiAqIEVUUCBTdHJpY3QgTW9kZSBlbmFibGVzIFRvdGFsIENvb2tpZSBQcm90ZWN0aW9uIChUQ1ApCiAqIFtOT1RFXSBBZGRpbmcgc2l0ZSBleGNlcHRpb25zIGRpc2FibGVzIGFsbCBFVFAgcHJvdGVjdGlvbnMgZm9yIHRoYXQgc2l0ZSBhbmQgaW5jcmVhc2VzIHRoZSByaXNrIG9mCiAqIGNyb3NzLXNpdGUgc3RhdGUgdHJhY2tpbmcgZS5nLiBleGNlcHRpb25zIGZvciBTaXRlQSBhbmQgU2l0ZUIgbWVhbnMgUGFydHlDIG9uIGJvdGggc2l0ZXMgaXMgc2hhcmVkCiAqIFsxXSBodHRwczovL2Jsb2cubW96aWxsYS5vcmcvc2VjdXJpdHkvMjAyMS8wMi8yMy90b3RhbC1jb29raWUtcHJvdGVjdGlvbi8KICogW1NFVFRJTkddIHRvIGFkZCBzaXRlIGV4Y2VwdGlvbnM6IFVybGJhcj5FVFAgU2hpZWxkCiAqIFtTRVRUSU5HXSB0byBtYW5hZ2Ugc2l0ZSBleGNlcHRpb25zOiBPcHRpb25zPlByaXZhY3kgJiBTZWN1cml0eT5FbmhhbmNlZCBUcmFja2luZyBQcm90ZWN0aW9uPk1hbmFnZSBFeGNlcHRpb25zICoqKi8KdXNlcl9wcmVmKCJicm93c2VyLmNvbnRlbnRibG9ja2luZy5jYXRlZ29yeSIsICJzdHJpY3QiKTsgLy8gW0hJRERFTiBQUkVGXQovKiAyNzAyOiBkaXNhYmxlIEVUUCB3ZWIgY29tcGF0IGZlYXR1cmVzIFtGRjkzK10KICogW1NFVFVQLUhBUkRFTl0gSW5jbHVkZXMgc2tpcCBsaXN0cywgaGV1cmlzdGljcyAoU21hcnRCbG9jaykgYW5kIGF1dG9tYXRpYyBncmFudHMKICogT3BlbmVyIGFuZCByZWRpcmVjdCBoZXVyaXN0aWNzIGFyZSBncmFudGVkIGZvciAzMCBkYXlzLCBzZWUgWzNdCiAqIFsxXSBodHRwczovL2Jsb2cubW96aWxsYS5vcmcvc2VjdXJpdHkvMjAyMS8wNy8xMy9zbWFydGJsb2NrLXYyLwogKiBbMl0gaHR0cHM6Ly9oZy5tb3ppbGxhLm9yZy9tb3ppbGxhLWNlbnRyYWwvcmV2L2U1NDgzZmQ0NjlhYiNsNC4xMgogKiBbM10gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvUHJpdmFjeS9TdGF0ZV9QYXJ0aXRpb25pbmcjc3RvcmFnZV9hY2Nlc3NfaGV1cmlzdGljcyAqKiovCiAgIC8vIHVzZXJfcHJlZigicHJpdmFjeS5hbnRpdHJhY2tpbmcuZW5hYmxlV2ViY29tcGF0IiwgZmFsc2UpOwoKLyoqKiBbU0VDVElPTiAyODAwXTogU0hVVERPV04gJiBTQU5JVElaSU5HICoqKi8KdXNlcl9wcmVmKCJfdXNlci5qcy5wYXJyb3QiLCAiMjgwMCBzeW50YXggZXJyb3I6IHRoZSBwYXJyb3QncyBibGVlZGluJyBkZW1pc2VkISIpOwovKiAyODEwOiBlbmFibGUgRmlyZWZveCB0byBjbGVhciBpdGVtcyBvbiBzaHV0ZG93bgogKiBbTk9URV0gSW4gRkYxMjkrIGNsZWFyaW5nICJzaXRlU2V0dGluZ3MiIG9uIHNodXRkb3duICgyODExKSwgb3IgbWFudWFsbHkgdmlhIHNpdGUgZGF0YSAoMjgyMCkgYW5kCiAqIHZpYSBoaXN0b3J5ICgyODMwKSwgd2lsbCBubyBsb25nZXIgcmVtb3ZlIHNhbml0aXplIG9uIHNodXRkb3duICJjb29raWUgYW5kIHNpdGUgZGF0YSIgc2l0ZSBleGNlcHRpb25zICgyODE1KQogKiBbU0VUVElOR10gUHJpdmFjeSAmIFNlY3VyaXR5Pkhpc3Rvcnk+Q3VzdG9tIFNldHRpbmdzPkNsZWFyIGhpc3Rvcnkgd2hlbiBGaXJlZm94IGNsb3NlcyB8IFNldHRpbmdzICoqKi8KdXNlcl9wcmVmKCJwcml2YWN5LnNhbml0aXplLnNhbml0aXplT25TaHV0ZG93biIsIHRydWUpOwoKLyoqIFNBTklUSVpFIE9OIFNIVVRET1dOOiBJR05PUkVTICJBTExPVyIgU0lURSBFWENFUFRJT05TIHwgdjIgbWlncmF0aW9uIGlzIEZGMTI4KyAqKiovCi8qIDI4MTE6IHNldC9lbmZvcmNlIHdoYXQgaXRlbXMgdG8gY2xlYXIgb24gc2h1dGRvd24gKGlmIDI4MTAgaXMgdHJ1ZSkgW1NFVFVQLUNIUk9NRV0KICogW05PVEVdIElmICJoaXN0b3J5IiBpcyB0cnVlLCBkb3dubG9hZHMgd2lsbCBhbHNvIGJlIGNsZWFyZWQgKioqLwp1c2VyX3ByZWYoInByaXZhY3kuY2xlYXJPblNodXRkb3duLmNhY2hlIiwgdHJ1ZSk7ICAgICAvLyBbREVGQVVMVDogdHJ1ZV0KdXNlcl9wcmVmKCJwcml2YWN5LmNsZWFyT25TaHV0ZG93bl92Mi5jYWNoZSIsIHRydWUpOyAgLy8gW0ZGMTI4K10gW0RFRkFVTFQ6IHRydWVdCnVzZXJfcHJlZigicHJpdmFjeS5jbGVhck9uU2h1dGRvd24uZG93bmxvYWRzIiwgdHJ1ZSk7IC8vIFtERUZBVUxUOiB0cnVlXQp1c2VyX3ByZWYoInByaXZhY3kuY2xlYXJPblNodXRkb3duLmZvcm1kYXRhIiwgdHJ1ZSk7ICAvLyBbREVGQVVMVDogdHJ1ZV0KdXNlcl9wcmVmKCJwcml2YWN5LmNsZWFyT25TaHV0ZG93bi5oaXN0b3J5IiwgdHJ1ZSk7ICAgLy8gW0RFRkFVTFQ6IHRydWVdCnVzZXJfcHJlZigicHJpdmFjeS5jbGVhck9uU2h1dGRvd25fdjIuaGlzdG9yeUZvcm1EYXRhQW5kRG93bmxvYWRzIiwgdHJ1ZSk7IC8vIFtGRjEyOCtdIFtERUZBVUxUOiB0cnVlXQogICAvLyB1c2VyX3ByZWYoInByaXZhY3kuY2xlYXJPblNodXRkb3duLnNpdGVTZXR0aW5ncyIsIGZhbHNlKTsgLy8gW0RFRkFVTFQ6IGZhbHNlXQogICAvLyB1c2VyX3ByZWYoInByaXZhY3kuY2xlYXJPblNodXRkb3duX3YyLnNpdGVTZXR0aW5ncyIsIGZhbHNlKTsgLy8gW0ZGMTI4K10gW0RFRkFVTFQ6IGZhbHNlXQovKiAyODEyOiBzZXQgU2Vzc2lvbiBSZXN0b3JlIHRvIGNsZWFyIG9uIHNodXRkb3duIChpZiAyODEwIGlzIHRydWUpIFtGRjM0K10KICogW05PVEVdIE5vdCBuZWVkZWQgaWYgU2Vzc2lvbiBSZXN0b3JlIGlzIG5vdCB1c2VkICgwMTAyKSBvciBpdCBpcyBhbHJlYWR5IGNsZWFyZWQgd2l0aCBoaXN0b3J5ICgyODExKQogKiBbTk9URV0gSWYgdHJ1ZSwgdGhpcyBwcmV2ZW50cyByZXN1bWluZyBmcm9tIGNyYXNoZXMgKGFsc28gc2VlIDUwMDgpICoqKi8KICAgLy8gdXNlcl9wcmVmKCJwcml2YWN5LmNsZWFyT25TaHV0ZG93bi5vcGVuV2luZG93cyIsIHRydWUpOwoKLyoqIFNBTklUSVpFIE9OIFNIVVRET1dOOiBSRVNQRUNUUyAiQUxMT1ciIFNJVEUgRVhDRVBUSU9OUyBGRjEwMysgfCB2MiBtaWdyYXRpb24gaXMgRkYxMjgrICoqKi8KLyogMjgxNTogc2V0ICJDb29raWVzIiBhbmQgIlNpdGUgRGF0YSIgdG8gY2xlYXIgb24gc2h1dGRvd24gKGlmIDI4MTAgaXMgdHJ1ZSkgW1NFVFVQLUNIUk9NRV0KICogW05PVEVdIEV4Y2VwdGlvbnM6IEEgImNvb2tpZSIgcGVybWlzc2lvbiBhbHNvIGNvbnRyb2xzICJvZmZsaW5lQXBwcyIgKHNlZSBub3RlIGJlbG93KS4gRm9yIGNyb3NzLWRvbWFpbiBsb2dpbnMsCiAqIGFkZCBleGNlcHRpb25zIGZvciBib3RoIHNpdGVzIGUuZy4gaHR0cHM6Ly93d3cueW91dHViZS5jb20gKHNpdGUpICsgaHR0cHM6Ly9hY2NvdW50cy5nb29nbGUuY29tIChzaW5nbGUgc2lnbiBvbikKICogW05PVEVdICJvZmZsaW5lQXBwcyI6IE9mZmxpbmUgV2Vic2l0ZSBEYXRhOiBsb2NhbFN0b3JhZ2UsIHNlcnZpY2Ugd29ya2VyIGNhY2hlLCBRdW90YU1hbmFnZXIgKEluZGV4ZWREQiwgYXNtLWNhY2hlKQogKiBbTk9URV0gInNlc3Npb25zIjogQWN0aXZlIExvZ2lucyAoaGFzIG5vIHNpdGUgZXhjZXB0aW9ucyk6IHJlZmVycyB0byBIVFRQIEJhc2ljIEF1dGhlbnRpY2F0aW9uIFsxXSwgbm90IGxvZ2lucyB2aWEgY29va2llcwogKiBbV0FSTklOR10gQmUgc2VsZWN0aXZlIHdpdGggd2hhdCBzaXRlcyB5b3UgIkFsbG93IiwgYXMgdGhleSBhbHNvIGRpc2FibGUgcGFydGl0aW9uaW5nICgxNzY3MjcxKQogKiBbU0VUVElOR10gdG8gYWRkIHNpdGUgZXhjZXB0aW9uczogQ3RybCtJPlBlcm1pc3Npb25zPkNvb2tpZXM+QWxsb3cgKHdoZW4gb24gdGhlIHdlYnNpdGUgaW4gcXVlc3Rpb24pCiAqIFtTRVRUSU5HXSB0byBtYW5hZ2Ugc2l0ZSBleGNlcHRpb25zOiBPcHRpb25zPlByaXZhY3kgJiBTZWN1cml0eT5QZXJtaXNzaW9ucz5TZXR0aW5ncwogKiBbMV0gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQmFzaWNfYWNjZXNzX2F1dGhlbnRpY2F0aW9uICoqKi8KdXNlcl9wcmVmKCJwcml2YWN5LmNsZWFyT25TaHV0ZG93bi5jb29raWVzIiwgdHJ1ZSk7IC8vIENvb2tpZXMKdXNlcl9wcmVmKCJwcml2YWN5LmNsZWFyT25TaHV0ZG93bi5vZmZsaW5lQXBwcyIsIHRydWUpOyAvLyBTaXRlIERhdGEKdXNlcl9wcmVmKCJwcml2YWN5LmNsZWFyT25TaHV0ZG93bi5zZXNzaW9ucyIsIHRydWUpOyAgLy8gQWN0aXZlIExvZ2lucyBbREVGQVVMVDogdHJ1ZV0KdXNlcl9wcmVmKCJwcml2YWN5LmNsZWFyT25TaHV0ZG93bl92Mi5jb29raWVzQW5kU3RvcmFnZSIsIHRydWUpOyAvLyBDb29raWVzLCBTaXRlIERhdGEsIEFjdGl2ZSBMb2dpbnMgW0ZGMTI4K10KCi8qKiBTQU5JVElaRSBTSVRFIERBVEE6IElHTk9SRVMgIkFMTE9XIiBTSVRFIEVYQ0VQVElPTlMgKioqLwovKiAyODIwOiBzZXQgbWFudWFsICJDbGVhciBEYXRhIiBpdGVtcyBbU0VUVVAtQ0hST01FXSBbRkYxMjgrXQogKiBGaXJlZm94IHJlbWVtYmVycyB5b3VyIGxhc3QgY2hvaWNlcy4gVGhpcyB3aWxsIHJlc2V0IHRoZW0gd2hlbiB5b3Ugc3RhcnQgRmlyZWZveAogKiBbU0VUVElOR10gUHJpdmFjeSAmIFNlY3VyaXR5PkJyb3dzZXIgUHJpdmFjeT5Db29raWVzIGFuZCBTaXRlIERhdGE+Q2xlYXIgRGF0YSAqKiovCnVzZXJfcHJlZigicHJpdmFjeS5jbGVhclNpdGVEYXRhLmNhY2hlIiwgdHJ1ZSk7CnVzZXJfcHJlZigicHJpdmFjeS5jbGVhclNpdGVEYXRhLmNvb2tpZXNBbmRTdG9yYWdlIiwgZmFsc2UpOyAvLyBrZWVwIGZhbHNlIHVudGlsIGl0IHJlc3BlY3RzICJhbGxvdyIgc2l0ZSBleGNlcHRpb25zCnVzZXJfcHJlZigicHJpdmFjeS5jbGVhclNpdGVEYXRhLmhpc3RvcnlGb3JtRGF0YUFuZERvd25sb2FkcyIsIHRydWUpOwogICAvLyB1c2VyX3ByZWYoInByaXZhY3kuY2xlYXJTaXRlRGF0YS5zaXRlU2V0dGluZ3MiLCBmYWxzZSk7CgovKiogU0FOSVRJWkUgSElTVE9SWTogSUdOT1JFUyAiQUxMT1ciIFNJVEUgRVhDRVBUSU9OUyB8IGNsZWFySGlzdG9yeSBtaWdyYXRpb24gaXMgRkYxMjgrICoqKi8KLyogMjgzMDogc2V0IG1hbnVhbCAiQ2xlYXIgSGlzdG9yeSIgaXRlbXMsIGFsc28gdmlhIEN0cmwtU2hpZnQtRGVsIFtTRVRVUC1DSFJPTUVdCiAqIEZpcmVmb3ggcmVtZW1iZXJzIHlvdXIgbGFzdCBjaG9pY2VzLiBUaGlzIHdpbGwgcmVzZXQgdGhlbSB3aGVuIHlvdSBzdGFydCBGaXJlZm94CiAqIFtOT1RFXSBSZWdhcmRsZXNzIG9mIHdoYXQgeW91IHNldCAiZG93bmxvYWRzIiB0bywgYXMgc29vbiBhcyB0aGUgZGlhbG9nCiAqIGZvciAiQ2xlYXIgUmVjZW50IEhpc3RvcnkiIGlzIG9wZW5lZCwgaXQgaXMgc3luY2VkIHRvIHRoZSBzYW1lIGFzICJoaXN0b3J5IgogKiBbU0VUVElOR10gUHJpdmFjeSAmIFNlY3VyaXR5Pkhpc3Rvcnk+Q3VzdG9tIFNldHRpbmdzPkNsZWFyIEhpc3RvcnkgKioqLwp1c2VyX3ByZWYoInByaXZhY3kuY3BkLmNhY2hlIiwgdHJ1ZSk7ICAgIC8vIFtERUZBVUxUOiB0cnVlXQp1c2VyX3ByZWYoInByaXZhY3kuY2xlYXJIaXN0b3J5LmNhY2hlIiwgdHJ1ZSk7CnVzZXJfcHJlZigicHJpdmFjeS5jcGQuZm9ybWRhdGEiLCB0cnVlKTsgLy8gW0RFRkFVTFQ6IHRydWVdCnVzZXJfcHJlZigicHJpdmFjeS5jcGQuaGlzdG9yeSIsIHRydWUpOyAgLy8gW0RFRkFVTFQ6IHRydWVdCiAgIC8vIHVzZXJfcHJlZigicHJpdmFjeS5jcGQuZG93bmxvYWRzIiwgdHJ1ZSk7IC8vIG5vdCB1c2VkLCBzZWUgbm90ZSBhYm92ZQp1c2VyX3ByZWYoInByaXZhY3kuY2xlYXJIaXN0b3J5Lmhpc3RvcnlGb3JtRGF0YUFuZERvd25sb2FkcyIsIHRydWUpOwp1c2VyX3ByZWYoInByaXZhY3kuY3BkLmNvb2tpZXMiLCBmYWxzZSk7CnVzZXJfcHJlZigicHJpdmFjeS5jcGQuc2Vzc2lvbnMiLCB0cnVlKTsgLy8gW0RFRkFVTFQ6IHRydWVdCnVzZXJfcHJlZigicHJpdmFjeS5jcGQub2ZmbGluZUFwcHMiLCBmYWxzZSk7IC8vIFtERUZBVUxUOiBmYWxzZV0KdXNlcl9wcmVmKCJwcml2YWN5LmNsZWFySGlzdG9yeS5jb29raWVzQW5kU3RvcmFnZSIsIGZhbHNlKTsKICAgLy8gdXNlcl9wcmVmKCJwcml2YWN5LmNwZC5vcGVuV2luZG93cyIsIGZhbHNlKTsgLy8gU2Vzc2lvbiBSZXN0b3JlCiAgIC8vIHVzZXJfcHJlZigicHJpdmFjeS5jcGQucGFzc3dvcmRzIiwgZmFsc2UpOwogICAvLyB1c2VyX3ByZWYoInByaXZhY3kuY3BkLnNpdGVTZXR0aW5ncyIsIGZhbHNlKTsKICAgLy8gdXNlcl9wcmVmKCJwcml2YWN5LmNsZWFySGlzdG9yeS5zaXRlU2V0dGluZ3MiLCBmYWxzZSk7CgovKiogU0FOSVRJWkUgTUFOVUFMOiBUSU1FUkFOR0UgKioqLwovKiAyODQwOiBzZXQgIlRpbWUgcmFuZ2UgdG8gY2xlYXIiIGZvciAiQ2xlYXIgRGF0YSIgKDI4MjApIGFuZCAiQ2xlYXIgSGlzdG9yeSIgKDI4MzApCiAqIEZpcmVmb3ggcmVtZW1iZXJzIHlvdXIgbGFzdCBjaG9pY2UuIFRoaXMgd2lsbCByZXNldCB0aGUgdmFsdWUgd2hlbiB5b3Ugc3RhcnQgRmlyZWZveAogKiAwPWV2ZXJ5dGhpbmcsIDE9bGFzdCBob3VyLCAyPWxhc3QgdHdvIGhvdXJzLCAzPWxhc3QgZm91ciBob3VycywgND10b2RheQogKiBbTk9URV0gVmFsdWVzIDUgKGxhc3QgNSBtaW51dGVzKSBhbmQgNiAobGFzdCAyNCBob3VycykgYXJlIG5vdCBsaXN0ZWQgaW4gdGhlIGRyb3Bkb3duLAogKiB3aGljaCB3aWxsIGRpc3BsYXkgYSBibGFuayB2YWx1ZSwgYW5kIGFyZSBub3QgZ3VhcmFudGVlZCB0byB3b3JrICoqKi8KdXNlcl9wcmVmKCJwcml2YWN5LnNhbml0aXplLnRpbWVTcGFuIiwgMCk7CgovKioqIFtTRUNUSU9OIDQwMDBdOiBGUFAgKGZpbmdlcnByaW50aW5nUHJvdGVjdGlvbikKICAgUkZQICg0NTAxKSBvdmVycmlkZXMgRlBQCgogICBJbiBGRjExOCsgRlBQIGlzIG9uIGJ5IGRlZmF1bHQgaW4gcHJpdmF0ZSB3aW5kb3dzICg0MDAxKSBhbmQgaW4gRkYxMTkrIGlzIGNvbnRyb2xsZWQKICAgYnkgRVRQICgyNzAxKS4gRlBQIHdpbGwgYWxzbyB1c2UgUmVtb3RlIFNlcnZpY2VzIGluIGZ1dHVyZSB0byByZWxheCBGUFAgcHJvdGVjdGlvbnMKICAgb24gYSBwZXIgc2l0ZSBiYXNpcyBmb3IgY29tcGF0aWJpbGl0eSAoNDAwNCkuCgogICBodHRwczovL3NlYXJjaGZveC5vcmcvbW96aWxsYS1jZW50cmFsL3NvdXJjZS90b29sa2l0L2NvbXBvbmVudHMvcmVzaXN0ZmluZ2VycHJpbnRpbmcvUkZQVGFyZ2V0c0RlZmF1bHQuaW5jCgogICBbTk9URV0gUkZQVGFyZ2V0cyArIGdyYW51bGFyIG92ZXJyaWRlcyBhcmUgc29tZXdoYXQgZXhwZXJpbWVudGFsIGFuZCBtYXkgcHJvZHVjZSB1bmV4cGVjdGVkIHJlc3VsdHMKICAgLSBlLmcuIEZyYW1lUmF0ZSBjYW4gb25seSBiZSBjb250cm9sbGVkIHBlciBwcm9jZXNzLCBub3QgcGVyIG9yaWdpbgoKICAgMTgyNjQwOCAtIHJlc3RyaWN0IGZvbnRzIHRvIHN5c3RlbSAoa0Jhc2VGb250cyArIGtMYW5nUGFja0ZvbnRzKSAoV2luZG93cywgTWFjLCBzb21lIExpbnV4KQogICAgICBodHRwczovL3NlYXJjaGZveC5vcmcvbW96aWxsYS1jZW50cmFsL3NlYXJjaD9wYXRoPVN0YW5kYXJkRm9udHMqLmluYwogICAxODU4MTgxIC0gc3VidGx5IHJhbmRvbWl6ZSBjYW52YXMgcGVyIGVUTEQrMSwgcGVyIHNlc3Npb24gYW5kIHBlciB3aW5kb3ctbW9kZSAoRkYxMjArKQoqKiovCnVzZXJfcHJlZigiX3VzZXIuanMucGFycm90IiwgIjQwMDAgc3ludGF4IGVycm9yOiB0aGUgcGFycm90J3MgYmVyZWZ0IG9mIGxpZmUhIik7Ci8qIDQwMDE6IGVuYWJsZSBGUFAgaW4gUEIgbW9kZSBbRkYxMTQrXQogKiBbTk9URV0gSW4gRkYxMTkrLCBGUFAgZm9yIGFsbCBtb2RlcyAoNzAxNikgaXMgZW5hYmxlZCB3aXRoIEVUUCBTdHJpY3QgKDI3MDEpICoqKi8KICAgLy8gdXNlcl9wcmVmKCJwcml2YWN5LmZpbmdlcnByaW50aW5nUHJvdGVjdGlvbi5wYm1vZGUiLCB0cnVlKTsgLy8gW0RFRkFVTFQ6IHRydWUgRkYxMTgrXQovKiA0MDAyOiBzZXQgZ2xvYmFsIEZQUCBvdmVycmlkZXMgW0ZGMTE0K10KICogdXNlcyAiUkZQVGFyZ2V0cyIgWzFdIHdoaWNoIGRlc3BpdGUgdGhlIG5hbWUgdGhlc2UgYXJlIG5vdCB1c2VkIGJ5IFJGUAogKiBlLmcuICIrQWxsVGFyZ2V0cywtQ1NTUHJlZmVyc0NvbG9yU2NoZW1lLC1KU0RhdGVUaW1lVVRDIiA9IGFsbCB0YXJnZXRzIGJ1dCBhbGxvdyBwcmVmZXJzLWNvbG9yLXNjaGVtZSBhbmQgZG8gbm90IGNoYW5nZSB0aW1lem9uZQogKiBlLmcuICItQWxsVGFyZ2V0cywrQ2FudmFzUmFuZG9taXphdGlvbiwrSlNEYXRlVGltZVVUQyIgPSBubyB0YXJnZXRzIGJ1dCBkbyB1c2UgRlBQIGNhbnZhcyBhbmQgY2hhbmdlIHRpbWV6b25lCiAqIFtOT1RFXSBOb3Qgc3VwcG9ydGVkIGJ5IGFya2VuZm94LiBFaXRoZXIgdXNlIFJGUCBvciBGUFAgYXQgZGVmYXVsdHMKICogWzFdIGh0dHBzOi8vc2VhcmNoZm94Lm9yZy9tb3ppbGxhLWNlbnRyYWwvc291cmNlL3Rvb2xraXQvY29tcG9uZW50cy9yZXNpc3RmaW5nZXJwcmludGluZy9SRlBUYXJnZXRzLmluYyAqKiovCiAgIC8vIHVzZXJfcHJlZigicHJpdmFjeS5maW5nZXJwcmludGluZ1Byb3RlY3Rpb24ub3ZlcnJpZGVzIiwgIiIpOwovKiA0MDAzOiBzZXQgZ3JhbnVsYXIgRlBQIG92ZXJyaWRlcwogKiBKU09OIGZvcm1hdDogZS5nLiJbe1wiZmlyc3RQYXJ0eURvbWFpblwiOiBcIm5ldGZsaXguY29tXCIsIFwib3ZlcnJpZGVzXCI6IFwiLUNhbnZhc1JhbmRvbWl6YXRpb24sLUZyYW1lUmF0ZSxcIn1dIgogKiBbTk9URV0gTm90IHN1cHBvcnRlZCBieSBhcmtlbmZveC4gRWl0aGVyIHVzZSBSRlAgb3IgRlBQIGF0IGRlZmF1bHRzICoqKi8KICAgLy8gdXNlcl9wcmVmKCJwcml2YWN5LmZpbmdlcnByaW50aW5nUHJvdGVjdGlvbi5ncmFudWxhck92ZXJyaWRlcyIsICIiKTsKLyogNDAwNDogZGlzYWJsZSByZW1vdGUgRlBQIG92ZXJyaWRlcyBbRkYxMjcrXSAqKiovCiAgIC8vIHVzZXJfcHJlZigicHJpdmFjeS5maW5nZXJwcmludGluZ1Byb3RlY3Rpb24ucmVtb3RlT3ZlcnJpZGVzLmVuYWJsZWQiLCBmYWxzZSk7CgovKioqIFtTRUNUSU9OIDQ1MDBdOiBPUFRJT05BTCBSRlAgKHJlc2lzdEZpbmdlcnByaW50aW5nKQogICBSRlAgb3ZlcnJpZGVzIEZQUCAoNDAwMCkKCiAgIEZGMTI4KyBBcmtlbmZveCBieSBkZWZhdWx0IHVzZXMgRlBQIChhdXRvbWF0aWNhbGx5IGVuYWJsZWQgd2l0aCBFVFAgU3RyaWN0KS4gRm9yIG1vc3QgcGVvcGxlCiAgIHRoaXMgaXMgYWxsIHlvdSBuZWVkLiBUbyB1c2UgUkZQIGluc3RlYWQsIGFkZCBSRlAgKDQ1MDEpIHRvIHlvdXIgb3ZlcnJpZGVzLCBhbmQgb3B0aW9uYWxseQogICBhZGQgbGV0dGVyYm94aW5nICg0NTA0KSwgc3Bvb2ZfZW5nbGlzaCAoNDUwNiksIGFuZCB3ZWJnbCAoNDUyMCkuCgogICBSRlAgaXMgYW4gYWxsLW9yLW5vdGhpbmcgYnV5IGluOiB5b3UgY2Fubm90IHBpY2sgYW5kIGNob29zZSB3aGF0IHBhcnRzIHlvdSB3YW50CiAgIFtURVNUXSBodHRwczovL2Fya2VuZm94LmdpdGh1Yi5pby9UWlAvdHpwLmh0bWwKCiAgIFtXQVJOSU5HXSBETyBOT1QgVVNFIGV4dGVuc2lvbnMgdG8gYWx0ZXIgUkZQIHByb3RlY3RlZCBtZXRyaWNzCgogICAgNDE4OTg2IC0gbGltaXQgd2luZG93LnNjcmVlbiAmIENTUyBtZWRpYSBxdWVyaWVzIChGRjQxKQogICAxMzYwMDM5IC0gc3Bvb2YgbmF2aWdhdG9yLmhhcmR3YXJlQ29uY3VycmVuY3kgYXMgMiAoRkY1NSkKIEZGNTYKICAgMTMzMzY1MSAtIHNwb29mIFVzZXIgQWdlbnQgJiBOYXZpZ2F0b3IgQVBJCiAgICAgIHZlcnNpb246IGFuZHJvaWQgdmVyc2lvbiBzcG9vZmVkIGFzIEVTUiAoRkYxMTkgb3IgbG93ZXIpCiAgICAgIE9TOiBKUyBzcG9vZmVkIGFzIFdpbmRvd3MgMTAsIE9TIDEwLjE1LCBBbmRyb2lkIDEwLCBvciBMaW51eCB8IEhUVFAgSGVhZGVycyBzcG9vZmVkIGFzIFdpbmRvd3Mgb3IgQW5kcm9pZAogICAxMzY5MzE5IC0gZGlzYWJsZSBkZXZpY2Ugc2Vuc29yIEFQSQogICAxMzY5MzU3IC0gZGlzYWJsZSBzaXRlIHNwZWNpZmljIHpvb20KICAgMTMzNzE2MSAtIGhpZGUgZ2FtZXBhZHMgZnJvbSBjb250ZW50CiAgIDEzNzIwNzIgLSBzcG9vZiBuZXR3b3JrIGluZm9ybWF0aW9uIEFQSSBhcyAidW5rbm93biIgd2hlbiBkb20ubmV0aW5mby5lbmFibGVkID0gdHJ1ZQogICAxMzMzNjQxIC0gcmVkdWNlIGZpbmdlcnByaW50aW5nIGluIFdlYlNwZWVjaCBBUEkKIEZGNTcKICAgMTM2OTMwOSAtIHNwb29mIG1lZGlhIHN0YXRpc3RpY3MKICAgMTM4MjQ5OSAtIHJlZHVjZSBzY3JlZW4gY28tb3JkaW5hdGUgZmluZ2VycHJpbnRpbmcgaW4gVG91Y2ggQVBJCiAgIDEyMTcyOTAgJiAxNDA5Njc3IC0gZW5hYmxlIHNvbWUgZmluZ2VycHJpbnRpbmcgcmVzaXN0YW5jZSBmb3IgV2ViR0wKICAgMTM1NDYzMyAtIGxpbWl0IE1lZGlhRXJyb3IubWVzc2FnZSB0byBhIHdoaXRlbGlzdAogRkY1OCsKICAgMTM3MjA3MyAtIHNwb29mL2Jsb2NrIGZpbmdlcnByaW50aW5nIGluIE1lZGlhRGV2aWNlcyBBUEkgKEZGNTkpCiAgICAgIFNwb29mOiBlbnVtZXJhdGUgZGV2aWNlcyBhcyBvbmUgIkludGVybmFsIENhbWVyYSIgYW5kIG9uZSAiSW50ZXJuYWwgTWljcm9waG9uZSIKICAgICAgQmxvY2s6IHN1cHByZXNzZXMgdGhlIG9uZGV2aWNlY2hhbmdlIGV2ZW50CiAgIDEwMzkwNjkgLSB3YXJuIHdoZW4gbGFuZ3VhZ2UgcHJlZnMgYXJlIG5vdCBzZXQgdG8gImVuKiIgKEZGNTkpCiAgIDEyMjIyODUgJiAxNDMzNTkyIC0gc3Bvb2Yga2V5Ym9hcmQgZXZlbnRzIGFuZCBzdXBwcmVzcyBrZXlib2FyZCBtb2RpZmllciBldmVudHMgKEZGNTkpCiAgICAgIFNwb29maW5nIG1pbWljcyB0aGUgY29udGVudCBsYW5ndWFnZSBvZiB0aGUgZG9jdW1lbnQuIEN1cnJlbnRseSBpdCBvbmx5IHN1cHBvcnRzIGVuLVVTLgogICAgICBNb2RpZmllciBldmVudHMgc3VwcHJlc3NlZCBhcmUgU0hJRlQgYW5kIGJvdGggQUxUIGtleXMuIENocm9tZSBpcyBub3QgYWZmZWN0ZWQuCiAgIDEzMzcxNTcgLSBkaXNhYmxlIFdlYkdMIGRlYnVnIHJlbmRlcmVyIGluZm8gKEZGNjApCiAgIDE0NTkwODkgLSBkaXNhYmxlIE9TIGxvY2FsZSBpbiBIVFRQIEFjY2VwdC1MYW5ndWFnZSBoZWFkZXJzIChBTkRST0lEKSAoRkY2MikKICAgMTQ3OTIzOSAtIHJldHVybiAibm8tcHJlZmVyZW5jZSIgd2l0aCBwcmVmZXJzLXJlZHVjZWQtbW90aW9uIChGRjYzKQogICAxMzYzNTA4ICYgMTgyNjA1MSAtIHNwb29mL3N1cHByZXNzIFBvaW50ZXIgRXZlbnRzIChGRjY0LCBGRjEzMikKICAgMTQ5Mjc2NiAtIHNwb29mIHBvaW50ZXJFdmVudC5wb2ludGVyaWQgKEZGNjUpCiAgIDE0ODUyNjYgLSBkaXNhYmxlIGV4cG9zdXJlIG9mIHN5c3RlbSBjb2xvcnMgdG8gQ1NTIG9yIGNhbnZhcyAoRkY2NykKICAgMTQ5NDAzNCAtIHJldHVybiAibGlnaHQiIHdpdGggcHJlZmVycy1jb2xvci1zY2hlbWUgKEZGNjcpCiAgIDE1NjQ0MjIgLSBzcG9vZiBhdWRpb0NvbnRleHQgb3V0cHV0TGF0ZW5jeSAoRkY3MCkKICAgMTU5NTgyMyAtIHJldHVybiBhdWRpb0NvbnRleHQgc2FtcGxlUmF0ZSBhcyA0NDEwMCAoRkY3MikKICAgMTYwNzMxNiAtIHNwb29mIHBvaW50ZXIgYXMgY29hcnNlIGFuZCBob3ZlciBhcyBub25lIChBTkRST0lEKSAoRkY3NCkKICAgMTYyMTQzMyAtIHJhbmRvbWl6ZSBjYW52YXMgKHByZXZpb3VzbHkgRkY1OCsgcmV0dXJuZWQgYW4gYWxsLXdoaXRlIGNhbnZhcykgKEZGNzgpCiAgIDE1MDYzNjQgLSByZXR1cm4gIm5vLXByZWZlcmVuY2UiIHdpdGggcHJlZmVycy1jb250cmFzdCAoRkY4MCkKICAgMTY1Mzk4NyAtIGxpbWl0IGZvbnQgdmlzaWJpbGl0eSB0byBidW5kbGVkIGFuZCAiQmFzZSBGb250cyIgKFdpbmRvd3MsIE1hYywgc29tZSBMaW51eCkgKEZGODApCiAgIDE0NjE0NTQgLSBzcG9vZiBzbW9vdGg9dHJ1ZSBhbmQgcG93ZXJFZmZpY2llbnQ9ZmFsc2UgZm9yIHN1cHBvcnRlZCBtZWRpYSBpbiBNZWRpYUNhcGFiaWxpdGllcyAoRkY4MikKICAgIDUzMTkxNSAtIHVzZSBmZGxpYm0ncyBzaW4sIGNvcyBhbmQgdGFuIGluIGpzbWF0aCAoRkY5MywgRVNSOTEuMSkKICAgMTc1NjI4MCAtIGVuZm9yY2UgbmF2aWdhdG9yLnBkZlZpZXdlckVuYWJsZWQgYXMgdHJ1ZSBhbmQgcGx1Z2lucy9taW1lVHlwZXMgYXMgaGFyZC1jb2RlZCB2YWx1ZXMgKEZGMTAwLTExNSkKICAgMTY5MjYwOSAtIHJlZHVjZSBKUyB0aW1pbmcgcHJlY2lzaW9uIHRvIDE2LjY3bXMgKHByZXZpb3VzbHkgRkY1NSsgd2FzIDEwMG1zKSAoRkYxMDIpCiAgIDE0MjIyMzcgLSByZXR1cm4gInNyZ2IiIHdpdGggY29sb3ItZ2FtdXQgKEZGMTEwKQogICAxNzk0NjI4IC0gcmV0dXJuICJub25lIiB3aXRoIGludmVydGVkLWNvbG9ycyAoRkYxMTQpCiAgIDE3ODc3OTAgLSBub3JtYWxpemUgc3lzdGVtIGZvbnRzIChGRjEyOCkKICAgMTgzNTk4NyAtIHNwb29mIHRpbWV6b25lIGFzIEF0bGFudGljL1JleWtqYXZpayAocHJldmlvdXNseSBGRjU1KyB3YXMgVVRDKSAoRkYxMjgpCiAgIDE4MzQzMDcgLSBhbHdheXMgdXNlIHNtb290aCBzY3JvbGxpbmcgKEZGMTMyKQogICAxOTE4MjAyIC0gc3Bvb2Ygc2NyZWVuIG9yaWVudGF0aW9uIGJhc2VkIG9uIHNwb29mZWQgc2NyZWVuIHNpemUgYW5kIHBsYXRmb3JtIChGRjEzMikKICAgICAgcHJldmlvdXNseSBpdCBhbHdheXMgcmV0dXJuZWQgbGFuZHNjYXBlLXByaW1hcnkgYW5kIGFuIGFuZ2xlIG9mIDAgKEZGNTArKQogICAxMzkwNDY1IC0gbG9hZCBhbGwgc3VidGl0bGVzIGluIFdlYlZUVCAoVmlkZW8gVGV4dCBUcmFja3MpIChGRjEzMykKICAgMTg3MzM4MiAtIG1ha2Ugc3Bvb2ZlZCBkZXZpY2VQaXhlbFJhdGlvIGFuZCBDU1MgbWVkaWEgcXVlcmllcyBtYXRjaCAoRkYxMzMpCiAgICAgIHByZXZpb3VzbHkgRkY0MSsgZGV2aWNlUGl4ZWxSYXRpbyB3YXMgaGFyZGNvZGVkIGFzIDEgYW5kIEZGMTI3KyBhcyAyCiAgICAgIHByZXZpb3VzbHkgRkY0MSsgQ1NTIG1lZGlhIHF1ZXJpZXMgd2VyZSBzcG9vZmVkIGFzIHpvb20gbGV2ZWwgYXQgYSBkZXZpY2VQaXhlbFJhdGlvIG9mIDEKKioqLwp1c2VyX3ByZWYoIl91c2VyLmpzLnBhcnJvdCIsICI0NTAwIHN5bnRheCBlcnJvcjogdGhlIHBhcnJvdCdzIHBvcHBlZCAnaXMgY2xvZ3MiKTsKLyogNDUwMTogZW5hYmxlIFJGUAogKiBbTk9URV0gcGJtb2RlIGFwcGxpZXMgaWYgdHJ1ZSBhbmQgdGhlIG9yaWdpbmFsIHByZWYgaXMgZmFsc2UKICogW1NFVFVQLVdFQl0gUkZQIGNhbiBjYXVzZSBzb21lIHdlYnNpdGUgYnJlYWthZ2U6IG1haW5seSBjYW52YXMsIHVzZSBhIGNhbnZhcyBzaXRlIGV4Y2VwdGlvbiB2aWEgdGhlIHVybGJhci4KICogUkZQIGFsc28gaGFzIGEgZmV3IHNpZGUgZWZmZWN0czogbWFpbmx5IHRoYXQgdGltZXpvbmUgaXMgR01ULCBhbmQgd2Vic2l0ZXMgd2lsbCBwcmVmZXIgbGlnaHQgdGhlbWUgKioqLwogICAvLyB1c2VyX3ByZWYoInByaXZhY3kucmVzaXN0RmluZ2VycHJpbnRpbmciLCB0cnVlKTsgLy8gW0ZGNDErXQogICAvLyB1c2VyX3ByZWYoInByaXZhY3kucmVzaXN0RmluZ2VycHJpbnRpbmcucGJtb2RlIiwgdHJ1ZSk7IC8vIFtGRjExNCtdCi8qIDQ1MDI6IHNldCBSRlAgbmV3IHdpbmRvdyBzaXplIG1heCByb3VuZGVkIHZhbHVlcyBbRkY1NStdCiAqIFtTRVRVUC1DSFJPTUVdIHNpemVzIHJvdW5kIGRvd24gaW4gaHVuZHJlZHM6IHdpZHRoIHRvIDIwMHMgYW5kIGhlaWdodCB0byAxMDBzLCB0byBmaXQgeW91ciBzY3JlZW4KICogWzFdIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvMTMzMDg4MiAqKiovCnVzZXJfcHJlZigicHJpdmFjeS53aW5kb3cubWF4SW5uZXJXaWR0aCIsIDE2MDApOwp1c2VyX3ByZWYoInByaXZhY3kud2luZG93Lm1heElubmVySGVpZ2h0IiwgOTAwKTsKLyogNDUwMzogZGlzYWJsZSBtb3pBZGRvbk1hbmFnZXIgV2ViIEFQSSBbRkY1NytdCiAqIFtOT1RFXSBUbyBhbGxvdyBleHRlbnNpb25zIHRvIHdvcmsgb24gQU1PLCB5b3UgYWxzbyBuZWVkIDI2NjIKICogWzFdIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvYnVnbGlzdC5jZ2k/YnVnX2lkPTEzODQzMzAsMTQwNjc5NSwxNDE1NjQ0LDE0NTM5ODggKioqLwp1c2VyX3ByZWYoInByaXZhY3kucmVzaXN0RmluZ2VycHJpbnRpbmcuYmxvY2tfbW96QWRkb25NYW5hZ2VyIiwgdHJ1ZSk7Ci8qIDQ1MDQ6IGVuYWJsZSBsZXR0ZXJib3hpbmcgW0ZGNjcrXQogKiBEeW5hbWljYWxseSByZXNpemVzIHRoZSBpbm5lciB3aW5kb3cgYnkgYXBwbHlpbmcgbWFyZ2lucyBpbiBzdGVwcGVkIHJhbmdlcyBbMl0KICogSWYgeW91IHVzZSB0aGUgZGltZW5zaW9uIHByZWYsIHRoZW4gaXQgd2lsbCBvbmx5IGFwcGx5IHRob3NlIHJlc29sdXRpb25zLgogKiBUaGUgZm9ybWF0IGlzICJ3aWR0aDF4aGVpZ2h0MSwgd2lkdGgyeGhlaWdodDIsIC4uLiIgKGUuZy4gIjgwMHg2MDAsIDEwMDB4MTAwMCIpCiAqIFtTRVRVUC1XRUJdIFRoaXMgaXMgaW5kZXBlbmRlbnQgb2YgUkZQICg0NTAxKS4gSWYgeW91J3JlIG5vdCB1c2luZyBSRlAsIG9yIHlvdSBhcmUgYnV0CiAqIGRpc2xpa2UgdGhlIG1hcmdpbnMsIHRoZW4gZmxpcCB0aGlzIHByZWYsIGtlZXBpbmcgaW4gbWluZCB0aGF0IGl0IGlzIGVmZmVjdGl2ZWx5IGZpbmdlcnByaW50YWJsZQogKiBbV0FSTklOR10gRE8gTk9UIFVTRTogdGhlIGRpbWVuc2lvbiBwcmVmIGlzIG9ubHkgbWVhbnQgZm9yIHRlc3RpbmcKICogWzFdIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvMTQwNzM2NgogKiBbMl0gaHR0cHM6Ly9oZy5tb3ppbGxhLm9yZy9tb3ppbGxhLWNlbnRyYWwvcmV2LzcyMTFjYjRmNThmZiNsNS4xMyAqKiovCiAgIC8vIHVzZXJfcHJlZigicHJpdmFjeS5yZXNpc3RGaW5nZXJwcmludGluZy5sZXR0ZXJib3hpbmciLCB0cnVlKTsgLy8gW0hJRERFTiBQUkVGXQogICAvLyB1c2VyX3ByZWYoInByaXZhY3kucmVzaXN0RmluZ2VycHJpbnRpbmcubGV0dGVyYm94aW5nLmRpbWVuc2lvbnMiLCAiIik7IC8vIFtISURERU4gUFJFRl0KLyogNDUwNTogZGlzYWJsZSBSRlAgYnkgZG9tYWluIFtGRjkxK10KICogW05PVEVdIFdvcmtpbmcgZXhhbXBsZXM6ICJhcmtlbmZveC5naXRodWIuaW8iLCAiKmdpdGh1Yi5pbyIKICogTm9uLXdvcmtpbmcgZXhhbXBsZXM6ICJodHRwczovL2Fya2VuZm94LmdpdGh1Yi5pbyIsICJnaXRodWIuaW8iLCAiKmFya2VuZm94LmdpdGh1Yi5pbyIgKioqLwogICAvLyB1c2VyX3ByZWYoInByaXZhY3kucmVzaXN0RmluZ2VycHJpbnRpbmcuZXhlbXB0ZWREb21haW5zIiwgIiouZXhhbXBsZS5pbnZhbGlkIik7Ci8qIDQ1MDY6IGRpc2FibGUgUkZQIHNwb29mIGVuZ2xpc2ggcHJvbXB0IFtGRjU5K10KICogMD1wcm9tcHQsIDE9ZGlzYWJsZWQsIDI9ZW5hYmxlZAogKiBbTk9URV0gV2hlbiBjaGFuZ2luZyBmcm9tIHZhbHVlIDIsIHByZWZlcnJlZCBsYW5ndWFnZXMgKCdpbnRsLmFjY2VwdF9sYW5ndWFnZXMnKSBpcyBub3QgcmVzZXQuCiAqIFtTRVRVUC1XRUJdIHdoZW4gZW5hYmxlZCwgc2V0cyAnZW4tVVMsIGVuJyBmb3IgZGlzcGxheWluZyBwYWdlcyBhbmQgJ2VuLVVTJyBhcyBsb2NhbGUuCiAqIFtTRVRUSU5HXSBHZW5lcmFsPkxhbmd1YWdlPkNob29zZSB5b3VyIHByZWZlcnJlZCBsYW5ndWFnZSBmb3IgZGlzcGxheWluZyBwYWdlcz5DaG9vc2U+UmVxdWVzdCBFbmdsaXNoLi4uICoqKi8KdXNlcl9wcmVmKCJwcml2YWN5LnNwb29mX2VuZ2xpc2giLCAxKTsKLyogNDUxMDogZGlzYWJsZSB1c2luZyBzeXN0ZW0gY29sb3JzCiAqIFtTRVRUSU5HXSBHZW5lcmFsPkxhbmd1YWdlIGFuZCBBcHBlYXJhbmNlPkZvbnRzIGFuZCBDb2xvcnM+Q29sb3JzPlVzZSBzeXN0ZW0gY29sb3JzICoqKi8KdXNlcl9wcmVmKCJicm93c2VyLmRpc3BsYXkudXNlX3N5c3RlbV9jb2xvcnMiLCBmYWxzZSk7IC8vIFtERUZBVUxUOiBmYWxzZSBOT04tV0lORE9XU10KLyogNDUxMTogZGlzYWJsZSB1c2luZyBzeXN0ZW0gYWNjZW50IGNvbG9ycyAqKiovCnVzZXJfcHJlZigid2lkZ2V0Lm5vbi1uYXRpdmUtdGhlbWUudXNlLXRoZW1lLWFjY2VudCIsIGZhbHNlKTsgLy8gW0RFRkFVTFQ6IGZhbHNlIFdJTkRPV1NdCi8qIDQ1MTI6IGVuZm9yY2UgbGlua3MgdGFyZ2V0aW5nIG5ldyB3aW5kb3dzIHRvIG9wZW4gaW4gYSBuZXcgdGFiIGluc3RlYWQKICogMT1tb3N0IHJlY2VudCB3aW5kb3cgb3IgdGFiLCAyPW5ldyB3aW5kb3csIDM9bmV3IHRhYgogKiBTdG9wcyBtYWxpY2lvdXMgd2luZG93IHNpemVzIGFuZCBzb21lIHNjcmVlbiByZXNvbHV0aW9uIGxlYWtzLgogKiBZb3UgY2FuIHN0aWxsIHJpZ2h0LWNsaWNrIGEgbGluayBhbmQgb3BlbiBpbiBhIG5ldyB3aW5kb3cKICogW1NFVFRJTkddIEdlbmVyYWw+VGFicz5PcGVuIGxpbmtzIGluIHRhYnMgaW5zdGVhZCBvZiBuZXcgd2luZG93cwogKiBbVEVTVF0gaHR0cHM6Ly9hcmtlbmZveC5naXRodWIuaW8vVFpQL3R6cC5odG1sI3NjcmVlbgogKiBbMV0gaHR0cHM6Ly9naXRsYWIudG9ycHJvamVjdC5vcmcvdHBvL2FwcGxpY2F0aW9ucy90b3ItYnJvd3Nlci8tL2lzc3Vlcy85ODgxICoqKi8KdXNlcl9wcmVmKCJicm93c2VyLmxpbmsub3Blbl9uZXd3aW5kb3ciLCAzKTsgLy8gW0RFRkFVTFQ6IDNdCi8qIDQ1MTM6IHNldCBhbGwgb3BlbiB3aW5kb3cgbWV0aG9kcyB0byBhYmlkZSBieSAiYnJvd3Nlci5saW5rLm9wZW5fbmV3d2luZG93IiAoNDUxMikKICogWzFdIGh0dHBzOi8vc2VhcmNoZm94Lm9yZy9tb3ppbGxhLWNlbnRyYWwvc291cmNlL2RvbS90ZXN0cy9icm93c2VyL2Jyb3dzZXJfdGVzdF9uZXdfd2luZG93X2Zyb21fY29udGVudC5qcyAqKiovCnVzZXJfcHJlZigiYnJvd3Nlci5saW5rLm9wZW5fbmV3d2luZG93LnJlc3RyaWN0aW9uIiwgMCk7Ci8qIDQ1MjA6IGRpc2FibGUgV2ViR0wgKFdlYiBHcmFwaGljcyBMaWJyYXJ5KSAqKiovCiAgIC8vIHVzZXJfcHJlZigid2ViZ2wuZGlzYWJsZWQiLCB0cnVlKTsKCi8qKiogW1NFQ1RJT04gNTAwMF06IE9QVElPTkFMIE9QU0VDCiAgIERpc2sgYXZvaWRhbmNlLCBhcHBsaWNhdGlvbiBkYXRhIGlzb2xhdGlvbiwgZXllYmFsbHMuLi4KKioqLwp1c2VyX3ByZWYoIl91c2VyLmpzLnBhcnJvdCIsICI1MDAwIHN5bnRheCBlcnJvcjogdGhlIHBhcnJvdCdzIHRha2VuICdpcyBsYXN0IGJvdyIpOwovKiA1MDAxOiBzdGFydCBGaXJlZm94IGluIFBCIChQcml2YXRlIEJyb3dzaW5nKSBtb2RlCiAqIFtOT1RFXSBJbiB0aGlzIG1vZGUgYWxsIHdpbmRvd3MgYXJlICJwcml2YXRlIHdpbmRvd3MiIGFuZCB0aGUgUEIgbW9kZSBpY29uIGlzIG5vdCBkaXNwbGF5ZWQKICogW05PVEVdIFRoZSBQIGluIFBCIG1vZGUgY2FuIGJlIG1pc2xlYWRpbmc6IGl0IG1lYW5zIG5vICJwZXJzaXN0ZW50IiBkaXNrIHN0YXRlIHN1Y2ggYXMgaGlzdG9yeSwKICogY2FjaGVzLCBzZWFyY2hlcywgY29va2llcywgbG9jYWxTdG9yYWdlLCBJbmRleGVkREIgZXRjICh3aGljaCB5b3UgY2FuIGFjaGlldmUgaW4gbm9ybWFsIG1vZGUpLgogKiBJbiBmYWN0LCBQQiBtb2RlIGxpbWl0cyBvciByZW1vdmVzIHRoZSBhYmlsaXR5IHRvIGNvbnRyb2wgc29tZSBvZiB0aGVzZSwgYW5kIHlvdSBuZWVkIHRvIHF1aXQKICogRmlyZWZveCB0byBjbGVhciB0aGVtLiBQQiBpcyBiZXN0IHVzZWQgYXMgYSBvbmUgb2ZmIHdpbmRvdyAoTWVudT5OZXcgUHJpdmF0ZSBXaW5kb3cpIHRvIHByb3ZpZGUKICogYSB0ZW1wb3Jhcnkgc2VsZi1jb250YWluZWQgbmV3IHNlc3Npb24uIENsb3NlIGFsbCBwcml2YXRlIHdpbmRvd3MgdG8gY2xlYXIgdGhlIFBCIHNlc3Npb24uCiAqIFtTRVRUSU5HXSBQcml2YWN5ICYgU2VjdXJpdHk+SGlzdG9yeT5DdXN0b20gU2V0dGluZ3M+QWx3YXlzIHVzZSBwcml2YXRlIGJyb3dzaW5nIG1vZGUKICogWzFdIGh0dHBzOi8vd2lraS5tb3ppbGxhLm9yZy9Qcml2YXRlX0Jyb3dzaW5nCiAqIFsyXSBodHRwczovL3N1cHBvcnQubW96aWxsYS5vcmcva2IvY29tbW9uLW15dGhzLWFib3V0LXByaXZhdGUtYnJvd3NpbmcgKioqLwogICAvLyB1c2VyX3ByZWYoImJyb3dzZXIucHJpdmF0ZWJyb3dzaW5nLmF1dG9zdGFydCIsIHRydWUpOwovKiA1MDAyOiBkaXNhYmxlIG1lbW9yeSBjYWNoZQogKiBjYXBhY2l0eTogLTE9ZGV0ZXJtaW5lIGR5bmFtaWNhbGx5IChkZWZhdWx0KSwgMD1ub25lLCBuPW1lbW9yeSBjYXBhY2l0eSBpbiBraWJpYnl0ZXMgKioqLwogICAvLyB1c2VyX3ByZWYoImJyb3dzZXIuY2FjaGUubWVtb3J5LmVuYWJsZSIsIGZhbHNlKTsKICAgLy8gdXNlcl9wcmVmKCJicm93c2VyLmNhY2hlLm1lbW9yeS5jYXBhY2l0eSIsIDApOwovKiA1MDAzOiBkaXNhYmxlIHNhdmluZyBwYXNzd29yZHMKICogW05PVEVdIFRoaXMgZG9lcyBub3QgY2xlYXIgYW55IHBhc3N3b3JkcyBhbHJlYWR5IHNhdmVkCiAqIFtTRVRUSU5HXSBQcml2YWN5ICYgU2VjdXJpdHk+TG9naW5zIGFuZCBQYXNzd29yZHM+QXNrIHRvIHNhdmUgbG9naW5zIGFuZCBwYXNzd29yZHMgZm9yIHdlYnNpdGVzICoqKi8KICAgLy8gdXNlcl9wcmVmKCJzaWdub24ucmVtZW1iZXJTaWdub25zIiwgZmFsc2UpOwovKiA1MDA0OiBkaXNhYmxlIHBlcm1pc3Npb25zIG1hbmFnZXIgZnJvbSB3cml0aW5nIHRvIGRpc2sgW0ZGNDErXSBbUkVTVEFSVF0KICogW05PVEVdIFRoaXMgbWVhbnMgYW55IHBlcm1pc3Npb24gY2hhbmdlcyBhcmUgc2Vzc2lvbiBvbmx5CiAqIFsxXSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnLzk2NzgxMiAqKiovCiAgIC8vIHVzZXJfcHJlZigicGVybWlzc2lvbnMubWVtb3J5X29ubHkiLCB0cnVlKTsgLy8gW0hJRERFTiBQUkVGXQovKiA1MDA1OiBkaXNhYmxlIGludGVybWVkaWF0ZSBjZXJ0aWZpY2F0ZSBjYWNoaW5nIFtGRjQxK10gW1JFU1RBUlRdCiAqIFtOT1RFXSBUaGlzIGFmZmVjdHMgbG9naW4vY2VydC9rZXkgZGJzLiBUaGUgZWZmZWN0IGlzIGFsbCBjcmVkZW50aWFscyBhcmUgc2Vzc2lvbi1vbmx5LgogKiBTYXZlZCBsb2dpbnMgYW5kIHBhc3N3b3JkcyBhcmUgbm90IGF2YWlsYWJsZS4gUmVzZXQgdGhlIHByZWYgYW5kIHJlc3RhcnQgdG8gcmV0dXJuIHRoZW0gKioqLwogICAvLyB1c2VyX3ByZWYoInNlY3VyaXR5Lm5vY2VydGRiIiwgdHJ1ZSk7Ci8qIDUwMDY6IGRpc2FibGUgZmF2aWNvbnMgaW4gaGlzdG9yeSBhbmQgYm9va21hcmtzCiAqIFtOT1RFXSBTdG9yZWQgYXMgZGF0YSBibG9icyBpbiBmYXZpY29ucy5zcWxpdGUsIHRoZXNlIGRvbid0IHJldmVhbCBhbnl0aGluZyB0aGF0IHlvdXIKICogYWN0dWFsIGhpc3RvcnkgKGFuZCBib29rbWFya3MpIGFscmVhZHkgZG8uIFlvdXIgaGlzdG9yeSBpcyBtb3JlIGRldGFpbGVkLCBzbwogKiBjb250cm9sIHRoYXQgaW5zdGVhZDsgZS5nLiBkaXNhYmxlIGhpc3RvcnksIGNsZWFyIGhpc3Rvcnkgb24gZXhpdCwgdXNlIFBCIG1vZGUKICogW05PVEVdIGZhdmljb25zLnNxbGl0ZSBpcyBzYW5pdGl6ZWQgb24gRmlyZWZveCBjbG9zZSAqKiovCiAgIC8vIHVzZXJfcHJlZigiYnJvd3Nlci5jaHJvbWUuc2l0ZV9pY29ucyIsIGZhbHNlKTsKLyogNTAwNzogZXhjbHVkZSAiVW5kbyBDbG9zZWQgVGFicyIgaW4gU2Vzc2lvbiBSZXN0b3JlICoqKi8KICAgLy8gdXNlcl9wcmVmKCJicm93c2VyLnNlc3Npb25zdG9yZS5tYXhfdGFic191bmRvIiwgMCk7Ci8qIDUwMDg6IGRpc2FibGUgcmVzdW1pbmcgc2Vzc2lvbiBmcm9tIGNyYXNoCiAqIFtURVNUXSBhYm91dDpjcmFzaHBhcmVudCAqKiovCiAgIC8vIHVzZXJfcHJlZigiYnJvd3Nlci5zZXNzaW9uc3RvcmUucmVzdW1lX2Zyb21fY3Jhc2giLCBmYWxzZSk7Ci8qIDUwMDk6IGRpc2FibGUgIm9wZW4gd2l0aCIgaW4gZG93bmxvYWQgZGlhbG9nIFtGRjUwK10KICogQXBwbGljYXRpb24gZGF0YSBpc29sYXRpb24gWzFdCiAqIFsxXSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnLzEyODE5NTkgKioqLwogICAvLyB1c2VyX3ByZWYoImJyb3dzZXIuZG93bmxvYWQuZm9yYmlkX29wZW5fd2l0aCIsIHRydWUpOwovKiA1MDEwOiBkaXNhYmxlIGxvY2F0aW9uIGJhciBzdWdnZXN0aW9uIHR5cGVzCiAqIFtTRVRUSU5HXSBTZWFyY2g+QWRkcmVzcyBCYXI+V2hlbiB1c2luZyB0aGUgYWRkcmVzcyBiYXIsIHN1Z2dlc3QgKioqLwogICAvLyB1c2VyX3ByZWYoImJyb3dzZXIudXJsYmFyLnN1Z2dlc3QuaGlzdG9yeSIsIGZhbHNlKTsKICAgLy8gdXNlcl9wcmVmKCJicm93c2VyLnVybGJhci5zdWdnZXN0LmJvb2ttYXJrIiwgZmFsc2UpOwogICAvLyB1c2VyX3ByZWYoImJyb3dzZXIudXJsYmFyLnN1Z2dlc3Qub3BlbnBhZ2UiLCBmYWxzZSk7CiAgIC8vIHVzZXJfcHJlZigiYnJvd3Nlci51cmxiYXIuc3VnZ2VzdC50b3BzaXRlcyIsIGZhbHNlKTsgLy8gW0ZGNzgrXQovKiA1MDExOiBkaXNhYmxlIGxvY2F0aW9uIGJhciBkcm9wZG93bgogKiBUaGlzIHZhbHVlIGNvbnRyb2xzIHRoZSB0b3RhbCBudW1iZXIgb2YgZW50cmllcyB0byBhcHBlYXIgaW4gdGhlIGxvY2F0aW9uIGJhciBkcm9wZG93biAqKiovCiAgIC8vIHVzZXJfcHJlZigiYnJvd3Nlci51cmxiYXIubWF4UmljaFJlc3VsdHMiLCAwKTsKLyogNTAxMjogZGlzYWJsZSBsb2NhdGlvbiBiYXIgYXV0b2ZpbGwKICogWzFdIGh0dHBzOi8vc3VwcG9ydC5tb3ppbGxhLm9yZy9rYi9hZGRyZXNzLWJhci1hdXRvY29tcGxldGUtZmlyZWZveCN3X3VybC1hdXRvY29tcGxldGUgKioqLwogICAvLyB1c2VyX3ByZWYoImJyb3dzZXIudXJsYmFyLmF1dG9GaWxsIiwgZmFsc2UpOwovKiA1MDEzOiBkaXNhYmxlIGJyb3dzaW5nIGFuZCBkb3dubG9hZCBoaXN0b3J5CiAqIFtOT1RFXSBXZSBhbHNvIGNsZWFyIGhpc3RvcnkgYW5kIGRvd25sb2FkcyBvbiBleGl0ICgyODExKQogKiBbU0VUVElOR10gUHJpdmFjeSAmIFNlY3VyaXR5Pkhpc3Rvcnk+Q3VzdG9tIFNldHRpbmdzPlJlbWVtYmVyIGJyb3dzaW5nIGFuZCBkb3dubG9hZCBoaXN0b3J5ICoqKi8KICAgLy8gdXNlcl9wcmVmKCJwbGFjZXMuaGlzdG9yeS5lbmFibGVkIiwgZmFsc2UpOwovKiA1MDE0OiBkaXNhYmxlIFdpbmRvd3MganVtcGxpc3QgW1dJTkRPV1NdICoqKi8KICAgLy8gdXNlcl9wcmVmKCJicm93c2VyLnRhc2tiYXIubGlzdHMuZW5hYmxlZCIsIGZhbHNlKTsKICAgLy8gdXNlcl9wcmVmKCJicm93c2VyLnRhc2tiYXIubGlzdHMuZnJlcXVlbnQuZW5hYmxlZCIsIGZhbHNlKTsKICAgLy8gdXNlcl9wcmVmKCJicm93c2VyLnRhc2tiYXIubGlzdHMucmVjZW50LmVuYWJsZWQiLCBmYWxzZSk7CiAgIC8vIHVzZXJfcHJlZigiYnJvd3Nlci50YXNrYmFyLmxpc3RzLnRhc2tzLmVuYWJsZWQiLCBmYWxzZSk7Ci8qIDUwMTY6IGRpc2NvdXJhZ2UgZG93bmxvYWRpbmcgdG8gZGVza3RvcAogKiAwPWRlc2t0b3AsIDE9ZG93bmxvYWRzIChkZWZhdWx0KSwgMj1jdXN0b20KICogW1NFVFRJTkddIFRvIHNldCB5b3VyIGN1c3RvbSBkZWZhdWx0ICJkb3dubG9hZHMiOiBHZW5lcmFsPkRvd25sb2Fkcz5TYXZlIGZpbGVzIHRvICoqKi8KICAgLy8gdXNlcl9wcmVmKCJicm93c2VyLmRvd25sb2FkLmZvbGRlckxpc3QiLCAyKTsKLyogNTAxNzogZGlzYWJsZSBGb3JtIEF1dG9maWxsCiAqIElmIC5zdXBwb3J0ZWRDb3VudHJpZXMgaW5jbHVkZXMgeW91ciByZWdpb24gKGJyb3dzZXIuc2VhcmNoLnJlZ2lvbikgYW5kIC5zdXBwb3J0ZWQKICogaXMgImRldGVjdCIgKGRlZmF1bHQpLCB0aGVuIHRoZSBVSSB3aWxsIHNob3cuIFN0b3JlZCBkYXRhIGlzIG5vdCBzZWN1cmUsIHVzZXMgSlNPTgogKiBbU0VUVElOR10gUHJpdmFjeSAmIFNlY3VyaXR5PkZvcm1zIGFuZCBBdXRvZmlsbD5BdXRvZmlsbCBhZGRyZXNzZXMKICogWzFdIGh0dHBzOi8vd2lraS5tb3ppbGxhLm9yZy9GaXJlZm94L0ZlYXR1cmVzL0Zvcm1fQXV0b2ZpbGwgKioqLwogICAvLyB1c2VyX3ByZWYoImV4dGVuc2lvbnMuZm9ybWF1dG9maWxsLmFkZHJlc3Nlcy5lbmFibGVkIiwgZmFsc2UpOyAvLyBbRkY1NStdCiAgIC8vIHVzZXJfcHJlZigiZXh0ZW5zaW9ucy5mb3JtYXV0b2ZpbGwuY3JlZGl0Q2FyZHMuZW5hYmxlZCIsIGZhbHNlKTsgLy8gW0ZGNTYrXQovKiA1MDE4OiBsaW1pdCBldmVudHMgdGhhdCBjYW4gY2F1c2UgYSBwb3AtdXAgKioqLwogICAvLyB1c2VyX3ByZWYoImRvbS5wb3B1cF9hbGxvd2VkX2V2ZW50cyIsICJjbGljayBkYmxjbGljayBtb3VzZWRvd24gcG9pbnRlcmRvd24iKTsKLyogNTAxOTogZGlzYWJsZSBwYWdlIHRodW1ibmFpbCBjb2xsZWN0aW9uICoqKi8KICAgLy8gdXNlcl9wcmVmKCJicm93c2VyLnBhZ2V0aHVtYm5haWxzLmNhcHR1cmluZ19kaXNhYmxlZCIsIHRydWUpOyAvLyBbSElEREVOIFBSRUZdCi8qIDUwMjA6IGRpc2FibGUgV2luZG93cyBuYXRpdmUgbm90aWZpY2F0aW9ucyBhbmQgdXNlIGFwcCBub3RpY2F0aW9ucyBpbnN0ZWFkIFtGRjExMStdIFtXSU5ET1dTXSAqKiovCiAgIC8vIHVzZXJfcHJlZigiYWxlcnRzLnVzZVN5c3RlbUJhY2tlbmQud2luZG93cy5ub3RpZmljYXRpb25zZXJ2ZXIuZW5hYmxlZCIsIGZhbHNlKTsKLyogNTAyMTogZGlzYWJsZSBsb2NhdGlvbiBiYXIgdXNpbmcgc2VhcmNoCiAqIERvbid0IGxlYWsgVVJMIHR5cG9zIHRvIGEgc2VhcmNoIGVuZ2luZSwgZ2l2ZSBhbiBlcnJvciBtZXNzYWdlIGluc3RlYWQKICogRXhhbXBsZXM6ICJzZWNyZXRwbGFjZSxjb20iLCAic2VjcmV0cGxhY2UvY29tIiwgInNlY3JldHBsYWNlIGNvbSIsICJzZWNyZXQgcGxhY2UuY29tIgogKiBbTk9URV0gVGhpcyBkb2VzIG5vdCBhZmZlY3QgZXhwbGljaXQgdXNlciBhY3Rpb24gc3VjaCBhcyB1c2luZyBzZWFyY2ggYnV0dG9ucyBpbiB0aGUKICogZHJvcGRvd24sIG9yIHVzaW5nIGtleXdvcmQgc2VhcmNoIHNob3J0Y3V0cyB5b3UgY29uZmlndXJlIGluIG9wdGlvbnMgKGUuZy4gImQiIGZvciBEdWNrRHVja0dvKSAqKiovCiAgIC8vIHVzZXJfcHJlZigia2V5d29yZC5lbmFibGVkIiwgZmFsc2UpOwoKLyoqKiBbU0VDVElPTiA1NTAwXTogT1BUSU9OQUwgSEFSREVOSU5HCiAgIE5vdCByZWNvbW1lbmRlZC4gT3ZlcnJpZGluZyB0aGVzZSBjYW4gY2F1c2UgYnJlYWthZ2UgYW5kIHBlcmZvcm1hbmNlIGlzc3VlcywKICAgdGhleSBhcmUgbW9zdGx5IGZpbmdlcnByaW50YWJsZSwgYW5kIHRoZSB0aHJlYXQgbW9kZWwgaXMgcHJhY3RpY2FsbHkgbm9uZXhpc3RlbnQKKioqLwp1c2VyX3ByZWYoIl91c2VyLmpzLnBhcnJvdCIsICI1NTAwIHN5bnRheCBlcnJvcjogdGhpcyBpcyBhbiBleC1wYXJyb3QhIik7Ci8qIDU1MDE6IGRpc2FibGUgTWF0aE1MIChNYXRoZW1hdGljYWwgTWFya3VwIExhbmd1YWdlKSBbRkY1MStdCiAqIFsxXSBodHRwczovL2N2ZS5taXRyZS5vcmcvY2dpLWJpbi9jdmVrZXkuY2dpP2tleXdvcmQ9bWF0aG1sICoqKi8KICAgLy8gdXNlcl9wcmVmKCJtYXRobWwuZGlzYWJsZWQiLCB0cnVlKTsgLy8gMTE3MzE5OQovKiA1NTAyOiBkaXNhYmxlIGluLWNvbnRlbnQgU1ZHIChTY2FsYWJsZSBWZWN0b3IgR3JhcGhpY3MpIFtGRjUzK10KICogWzFdIGh0dHBzOi8vY3ZlLm1pdHJlLm9yZy9jZ2ktYmluL2N2ZWtleS5jZ2k/a2V5d29yZD1maXJlZm94K3N2ZyAqKiovCiAgIC8vIHVzZXJfcHJlZigic3ZnLmRpc2FibGVkIiwgdHJ1ZSk7IC8vIDEyMTY4OTMKLyogNTUwMzogZGlzYWJsZSBncmFwaGl0ZQogKiBbMV0gaHR0cHM6Ly9jdmUubWl0cmUub3JnL2NnaS1iaW4vY3Zla2V5LmNnaT9rZXl3b3JkPWZpcmVmb3grZ3JhcGhpdGUKICogWzJdIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0dyYXBoaXRlXyhTSUwpICoqKi8KICAgLy8gdXNlcl9wcmVmKCJnZnguZm9udF9yZW5kZXJpbmcuZ3JhcGhpdGUuZW5hYmxlZCIsIGZhbHNlKTsKLyogNTUwNDogZGlzYWJsZSBhc20uanMgW0ZGMjIrXQogKiBbMV0gaHR0cDovL2FzbWpzLm9yZy8KICogWzJdIGh0dHBzOi8vY3ZlLm1pdHJlLm9yZy9jZ2ktYmluL2N2ZWtleS5jZ2k/a2V5d29yZD1hc20uanMKICogWzNdIGh0dHBzOi8vcmgwZGV2LmdpdGh1Yi5pby9ibG9nLzIwMTcvdGhlLXJldHVybi1vZi10aGUtaml0LyAqKiovCiAgIC8vIHVzZXJfcHJlZigiamF2YXNjcmlwdC5vcHRpb25zLmFzbWpzIiwgZmFsc2UpOwovKiA1NTA1OiBkaXNhYmxlIElvbiBhbmQgYmFzZWxpbmUgSklUIHRvIGhhcmRlbiBhZ2FpbnN0IEpTIGV4cGxvaXRzIFtSRVNUQVJUXQogKiBbTk9URV0gV2hlbiBib3RoIElvbiBhbmQgSklUIGFyZSBkaXNhYmxlZCwgYW5kIHRydXN0ZWRwcmluY2lwYWxzCiAqIGlzIGVuYWJsZWQsIHRoZW4gSW9uIGNhbiBzdGlsbCBiZSB1c2VkIGJ5IGV4dGVuc2lvbnMgKDE1OTkyMjYpCiAqIFsxXSBodHRwczovL2N2ZS5taXRyZS5vcmcvY2dpLWJpbi9jdmVrZXkuY2dpP2tleXdvcmQ9ZmlyZWZveCtqaXQKICogWzJdIGh0dHBzOi8vbWljcm9zb2Z0ZWRnZS5naXRodWIuaW8vZWRnZXZyL3Bvc3RzL1N1cGVyLUR1cGVyLVNlY3VyZS1Nb2RlLyAqKiovCiAgIC8vIHVzZXJfcHJlZigiamF2YXNjcmlwdC5vcHRpb25zLmlvbiIsIGZhbHNlKTsKICAgLy8gdXNlcl9wcmVmKCJqYXZhc2NyaXB0Lm9wdGlvbnMuYmFzZWxpbmVqaXQiLCBmYWxzZSk7CiAgIC8vIHVzZXJfcHJlZigiamF2YXNjcmlwdC5vcHRpb25zLmppdF90cnVzdGVkcHJpbmNpcGFscyIsIHRydWUpOyAvLyBbRkY3NStdIFtISURERU4gUFJFRl0KLyogNTUwNjogZGlzYWJsZSBXZWJBc3NlbWJseSBbRkY1MitdCiAqIFZ1bG5lcmFiaWxpdGllcyBbMV0gaGF2ZSBpbmNyZWFzaW5nbHkgYmVlbiBmb3VuZCwgaW5jbHVkaW5nIHRob3NlIGtub3duIGFuZCBmaXhlZAogKiBpbiBuYXRpdmUgcHJvZ3JhbXMgeWVhcnMgYWdvIFsyXS4gV0FTTSBoYXMgcG93ZXJmdWwgbG93LWxldmVsIGFjY2VzcywgbWFraW5nCiAqIGNlcnRhaW4gYXR0YWNrcyAoYnJ1dGUtZm9yY2UpIGFuZCB2dWxuZXJhYmlsaXRpZXMgbW9yZSBwb3NzaWJsZQogKiBbU1RBVFNdIH4wLjIlIG9mIHdlYnNpdGVzLCBhYm91dCBoYWxmIG9mIHdoaWNoIGFyZSBmb3IgY3J5cHRvbWluaW5nIC8gbWFsdmVydGlzaW5nIFsyXVszXQogKiBbMV0gaHR0cHM6Ly9jdmUubWl0cmUub3JnL2NnaS1iaW4vY3Zla2V5LmNnaT9rZXl3b3JkPXdhc20KICogWzJdIGh0dHBzOi8vc3BlY3RydW0uaWVlZS5vcmcvdGVjaC10YWxrL3RlbGVjb20vc2VjdXJpdHkvbW9yZS13b3JyaWVzLW92ZXItdGhlLXNlY3VyaXR5LW9mLXdlYi1hc3NlbWJseQogKiBbM10gaHR0cHM6Ly93d3cuemRuZXQuY29tL2FydGljbGUvaGFsZi1vZi10aGUtd2Vic2l0ZXMtdXNpbmctd2ViYXNzZW1ibHktdXNlLWl0LWZvci1tYWxpY2lvdXMtcHVycG9zZXMgKioqLwogICAvLyB1c2VyX3ByZWYoImphdmFzY3JpcHQub3B0aW9ucy53YXNtIiwgZmFsc2UpOwovKiA1NTA3OiBkaXNhYmxlIHJlbmRlcmluZyBvZiBTVkcgT3BlblR5cGUgZm9udHMgKioqLwogICAvLyB1c2VyX3ByZWYoImdmeC5mb250X3JlbmRlcmluZy5vcGVudHlwZV9zdmcuZW5hYmxlZCIsIGZhbHNlKTsKLyogNTUwODogZGlzYWJsZSBhbGwgRFJNIGNvbnRlbnQgKEVNRTogRW5jcnlwdGlvbiBNZWRpYSBFeHRlbnNpb24pCiAqIE9wdGlvbmFsbHkgaGlkZSB0aGUgVUkgc2V0dGluZyB3aGljaCBhbHNvIGRpc2FibGVzIHRoZSBEUk0gcHJvbXB0CiAqIFtTRVRUSU5HXSBHZW5lcmFsPkRSTSBDb250ZW50PlBsYXkgRFJNLWNvbnRyb2xsZWQgY29udGVudAogKiBbVEVTVF0gaHR0cHM6Ly9iaXRtb3Zpbi5jb20vZGVtb3MvZHJtCiAqIFsxXSBodHRwczovL3d3dy5lZmYub3JnL2RlZXBsaW5rcy8yMDE3LzEwL2RybXMtZGVhZC1jYW5hcnktaG93LXdlLWp1c3QtbG9zdC13ZWItd2hhdC13ZS1sZWFybmVkLWl0LWFuZC13aGF0LXdlLW5lZWQtZG8tbmV4dCAqKiovCiAgIC8vIHVzZXJfcHJlZigibWVkaWEuZW1lLmVuYWJsZWQiLCBmYWxzZSk7CiAgIC8vIHVzZXJfcHJlZigiYnJvd3Nlci5lbWUudWkuZW5hYmxlZCIsIGZhbHNlKTsKLyogNTUwOTogZGlzYWJsZSBJUHY2IGlmIHVzaW5nIGEgVlBOCiAqIFRoaXMgaXMgYW4gYXBwbGljYXRpb24gbGV2ZWwgZmFsbGJhY2suIERpc2FibGluZyBJUHY2IGlzIGJlc3QgZG9uZSBhdCBhbiBPUy9uZXR3b3JrCiAqIGxldmVsLCBhbmQvb3IgY29uZmlndXJlZCBwcm9wZXJseSBpbiBzeXN0ZW0gd2lkZSBWUE4gc2V0dXBzLgogKiBbTk9URV0gUEhQIGRlZmF1bHRzIHRvIElQdjYgd2l0aCAibG9jYWxob3N0Ii4gVXNlICJwaHAgLVMgMTI3LjAuMC4xOlBPUlQiCiAqIFtTRVRVUC1XRUJdIFBSX0NPTk5FQ1RfUkVTRVRfRVJST1IKICogW1RFU1RdIGh0dHBzOi8vaXBsZWFrLm9yZy8KICogWzFdIGh0dHBzOi8vd3d3LmludGVybmV0c29jaWV0eS5vcmcvdGFnL2lwdjYtc2VjdXJpdHkvIChNeXRocyAyLDQsNSw2KSAqKiovCiAgIC8vIHVzZXJfcHJlZigibmV0d29yay5kbnMuZGlzYWJsZUlQdjYiLCB0cnVlKTsKLyogNTUxMDogY29udHJvbCB3aGVuIHRvIHNlbmQgYSBjcm9zcy1vcmlnaW4gcmVmZXJlcgogKiAwPWFsd2F5cyAoZGVmYXVsdCksIDE9b25seSBpZiBiYXNlIGRvbWFpbnMgbWF0Y2gsIDI9b25seSBpZiBob3N0cyBtYXRjaAogKiBbTk9URV0gV2lsbCBjYXVzZSBicmVha2FnZTogb2xkZXIgbW9kZW1zL3JvdXRlcnMgYW5kIHNvbWUgc2l0ZXMgZS5nIGJhbmtzLCB2aW1lbywgaWNsb3VkLCBpbnN0YWdyYW0gKioqLwogICAvLyB1c2VyX3ByZWYoIm5ldHdvcmsuaHR0cC5yZWZlcmVyLlhPcmlnaW5Qb2xpY3kiLCAyKTsKLyogNTUxMTogc2V0IERvSCBib290c3RyYXAgYWRkcmVzcyBbRkY4OStdCiAqIEZpcmVmb3ggdXNlcyB0aGUgc3lzdGVtIEROUyB0byBpbml0aWFsbHkgcmVzb2x2ZSB0aGUgSVAgYWRkcmVzcyBvZiB5b3VyIERvSCBzZXJ2ZXIuCiAqIFdoZW4gc2V0IHRvIGEgdmFsaWQsIHdvcmtpbmcgdmFsdWUgdGhhdCBtYXRjaGVzIHlvdXIgIm5ldHdvcmsudHJyLnVyaSIgKDA3MTIpIEZpcmVmb3gKICogd29uJ3QgdXNlIHRoZSBzeXN0ZW0gRE5TLiBJZiB0aGUgSVAgZG9lc24ndCBtYXRjaCB0aGVuIERvSCB3b24ndCB3b3JrICoqKi8KICAgLy8gdXNlcl9wcmVmKCJuZXR3b3JrLnRyci5ib290c3RyYXBBZGRyIiwgIjEwLjAuMC4xIik7IC8vIFtISURERU4gUFJFRl0KCi8qKiogW1NFQ1RJT04gNjAwMF06IERPTidUIFRPVUNIICoqKi8KdXNlcl9wcmVmKCJfdXNlci5qcy5wYXJyb3QiLCAiNjAwMCBzeW50YXggZXJyb3I6IHRoZSBwYXJyb3QncyAnaXN0b3J5ISIpOwovKiA2MDAxOiBlbmZvcmNlIEZpcmVmb3ggYmxvY2tsaXN0CiAqIFtXSFldIEl0IGluY2x1ZGVzIHVwZGF0ZXMgZm9yICJyZXZva2VkIGNlcnRpZmljYXRlcyIKICogWzFdIGh0dHBzOi8vYmxvZy5tb3ppbGxhLm9yZy9zZWN1cml0eS8yMDE1LzAzLzAzL3Jldm9raW5nLWludGVybWVkaWF0ZS1jZXJ0aWZpY2F0ZXMtaW50cm9kdWNpbmctb25lY3JsLyAqKiovCnVzZXJfcHJlZigiZXh0ZW5zaW9ucy5ibG9ja2xpc3QuZW5hYmxlZCIsIHRydWUpOyAvLyBbREVGQVVMVDogdHJ1ZV0KLyogNjAwMjogZW5mb3JjZSBubyByZWZlcmVyIHNwb29maW5nCiAqIFtXSFldIFNwb29maW5nIGNhbiBhZmZlY3QgQ1NSRiAoQ3Jvc3MtU2l0ZSBSZXF1ZXN0IEZvcmdlcnkpIHByb3RlY3Rpb25zICoqKi8KdXNlcl9wcmVmKCJuZXR3b3JrLmh0dHAucmVmZXJlci5zcG9vZlNvdXJjZSIsIGZhbHNlKTsgLy8gW0RFRkFVTFQ6IGZhbHNlXQovKiA2MDA0OiBlbmZvcmNlIGEgc2VjdXJpdHkgZGVsYXkgb24gc29tZSBjb25maXJtYXRpb24gZGlhbG9ncyBzdWNoIGFzIGluc3RhbGwsIG9wZW4vc2F2ZQogKiBbMV0gaHR0cHM6Ly93d3cuc3F1YXJlZnJlZS5jb20vMjAwNC8wNy8wMS9yYWNlLWNvbmRpdGlvbnMtaW4tc2VjdXJpdHktZGlhbG9ncy8gKioqLwp1c2VyX3ByZWYoInNlY3VyaXR5LmRpYWxvZ19lbmFibGVfZGVsYXkiLCAxMDAwKTsgLy8gW0RFRkFVTFQ6IDEwMDBdCi8qIDYwMDg6IGVuZm9yY2Ugbm8gRmlyc3QgUGFydHkgSXNvbGF0aW9uIFtGRjUxK10KICogW1dBUk5JTkddIFJlcGxhY2VkIHdpdGggbmV0d29yayBwYXJ0aXRpb25pbmcgKEZGODUrKSBhbmQgVENQICgyNzAxKSwgYW5kIGVuYWJsaW5nIEZQSQogKiBkaXNhYmxlcyB0aG9zZS4gRlBJIGlzIG5vIGxvbmdlciBtYWludGFpbmVkIGV4Y2VwdCBhdCBUb3IgUHJvamVjdCBmb3IgVG9yIEJyb3dzZXIncyBjb25maWcgKioqLwp1c2VyX3ByZWYoInByaXZhY3kuZmlyc3RwYXJ0eS5pc29sYXRlIiwgZmFsc2UpOyAvLyBbREVGQVVMVDogZmFsc2VdCi8qIDYwMDk6IGVuZm9yY2UgU21hcnRCbG9jayBzaGltcyAoYWJvdXQ6Y29tcGF0KSBbRkY4MStdCiAqIFsxXSBodHRwczovL2Jsb2cubW96aWxsYS5vcmcvc2VjdXJpdHkvMjAyMS8wMy8yMy9pbnRyb2R1Y2luZy1zbWFydGJsb2NrLyAqKiovCnVzZXJfcHJlZigiZXh0ZW5zaW9ucy53ZWJjb21wYXQuZW5hYmxlX3NoaW1zIiwgdHJ1ZSk7IC8vIFtISURERU4gUFJFRl0gW0RFRkFVTFQ6IHRydWVdCi8qIDYwMTA6IGVuZm9yY2Ugbm8gVExTIDEuMC8xLjEgZG93bmdyYWRlcwogKiBbVEVTVF0gaHR0cHM6Ly90bHMtdjEtMS5iYWRzc2wuY29tOjEwMTAvICoqKi8KdXNlcl9wcmVmKCJzZWN1cml0eS50bHMudmVyc2lvbi5lbmFibGUtZGVwcmVjYXRlZCIsIGZhbHNlKTsgLy8gW0RFRkFVTFQ6IGZhbHNlXQovKiA2MDExOiBlbmZvcmNlIGRpc2FibGluZyBvZiBXZWIgQ29tcGF0aWJpbGl0eSBSZXBvcnRlciBbRkY1NitdCiAqIFdlYiBDb21wYXRpYmlsaXR5IFJlcG9ydGVyIGFkZHMgYSAiUmVwb3J0IFNpdGUgSXNzdWUiIGJ1dHRvbiB0byBzZW5kIGRhdGEgdG8gTW96aWxsYQogKiBbV0hZXSBUbyBwcmV2ZW50IHdhc3RpbmcgTW96aWxsYSdzIHRpbWUgd2l0aCBhIGN1c3RvbSBzZXR1cCAqKiovCnVzZXJfcHJlZigiZXh0ZW5zaW9ucy53ZWJjb21wYXQtcmVwb3J0ZXIuZW5hYmxlZCIsIGZhbHNlKTsgLy8gW0RFRkFVTFQ6IGZhbHNlXQovKiA2MDEyOiBlbmZvcmNlIFF1YXJhbnRpbmVkIERvbWFpbnMgW0ZGMTE1K10KICogW1dIWV0gaHR0cHM6Ly9zdXBwb3J0Lm1vemlsbGEub3JnL2tiL3F1YXJhbnRpbmVkLWRvbWFpbnMgKi8KdXNlcl9wcmVmKCJleHRlbnNpb25zLnF1YXJhbnRpbmVkRG9tYWlucy5lbmFibGVkIiwgdHJ1ZSk7IC8vIFtERUZBVUxUOiB0cnVlXQovKiA2MDUwOiBwcmVmc0NsZWFuZXI6IHByZXZpb3VzbHkgYWN0aXZlIGl0ZW1zIHJlbW92ZWQgZnJvbSBhcmtlbmZveCAxMTUtMTI3ICoqKi8KICAgLy8gdXNlcl9wcmVmKCJhY2Nlc3NpYmlsaXR5LmZvcmNlX2Rpc2FibGVkIiwgIiIpOwogICAvLyB1c2VyX3ByZWYoImJyb3dzZXIudXJsYmFyLmRuc1Jlc29sdmVTaW5nbGVXb3Jkc0FmdGVyU2VhcmNoIiwgIiIpOwogICAvLyB1c2VyX3ByZWYoImdlby5wcm92aWRlci5uZXR3b3JrLnVybCIsICIiKTsKICAgLy8gdXNlcl9wcmVmKCJnZW8ucHJvdmlkZXIubmV0d29yay5sb2dnaW5nLmVuYWJsZWQiLCAiIik7CiAgIC8vIHVzZXJfcHJlZigiZ2VvLnByb3ZpZGVyLnVzZV9ncHNkIiwgIiIpOwogICAvLyB1c2VyX3ByZWYoIm5ldHdvcmsucHJvdG9jb2wtaGFuZGxlci5leHRlcm5hbC5tcy13aW5kb3dzLXN0b3JlIiwgIiIpOwogICAvLyB1c2VyX3ByZWYoInByaXZhY3kucGFydGl0aW9uLmFsd2F5c19wYXJ0aXRpb25fdGhpcmRfcGFydHlfbm9uX2Nvb2tpZV9zdG9yYWdlIiwgIiIpOwogICAvLyB1c2VyX3ByZWYoInByaXZhY3kucGFydGl0aW9uLmFsd2F5c19wYXJ0aXRpb25fdGhpcmRfcGFydHlfbm9uX2Nvb2tpZV9zdG9yYWdlLmV4ZW1wdF9zZXNzaW9uc3RvcmFnZSIsICIiKTsKICAgLy8gdXNlcl9wcmVmKCJwcml2YWN5LnBhcnRpdGlvbi5zZXJ2aWNlV29ya2VycyIsICIiKTsKCi8qKiogW1NFQ1RJT04gNzAwMF06IERPTidUIEJPVEhFUiAqKiovCnVzZXJfcHJlZigiX3VzZXIuanMucGFycm90IiwgIjcwMDAgc3ludGF4IGVycm9yOiB0aGUgcGFycm90J3MgcHVzaGluZyB1cCBkYWlzaWVzISIpOwovKiA3MDAxOiBkaXNhYmxlIEFQSXMKICogTG9jYXRpb24tQXdhcmUgQnJvd3NpbmcsIEZ1bGwgU2NyZWVuCiAqIFtXSFldIFRoZSBBUEkgc3RhdGUgaXMgZWFzaWx5IGZpbmdlcnByaW50YWJsZS4KICogR2VvIGlzIGJlaGluZCBhIHByb21wdCAoNzAwMikuIEZ1bGwgc2NyZWVuIHJlcXVpcmVzIHVzZXIgaW50ZXJhY3Rpb24gKioqLwogICAvLyB1c2VyX3ByZWYoImdlby5lbmFibGVkIiwgZmFsc2UpOwogICAvLyB1c2VyX3ByZWYoImZ1bGwtc2NyZWVuLWFwaS5lbmFibGVkIiwgZmFsc2UpOwovKiA3MDAyOiBzZXQgZGVmYXVsdCBwZXJtaXNzaW9ucwogKiBMb2NhdGlvbiwgQ2FtZXJhLCBNaWNyb3Bob25lLCBOb3RpZmljYXRpb25zIFtGRjU4K10gVmlydHVhbCBSZWFsaXR5IFtGRjczK10KICogMD1hbHdheXMgYXNrIChkZWZhdWx0KSwgMT1hbGxvdywgMj1ibG9jawogKiBbV0hZXSBUaGVzZSBhcmUgZmluZ2VycHJpbnRhYmxlIHZpYSBQZXJtaXNzaW9ucyBBUEksIGV4Y2VwdCBWUi4gSnVzdCBhZGQgc2l0ZQogKiBleGNlcHRpb25zIGFzIGFsbG93L2Jsb2NrIGZvciBmcmVxdWVudGx5IHZpc2l0ZWQvYW5ub3lpbmcgc2l0ZXM6IGkuZS4gbm90IGdsb2JhbAogKiBbU0VUVElOR10gdG8gYWRkIHNpdGUgZXhjZXB0aW9uczogQ3RybCtJPlBlcm1pc3Npb25zPgogKiBbU0VUVElOR10gdG8gbWFuYWdlIHNpdGUgZXhjZXB0aW9uczogT3B0aW9ucz5Qcml2YWN5ICYgU2VjdXJpdHk+UGVybWlzc2lvbnM+U2V0dGluZ3MgKioqLwogICAvLyB1c2VyX3ByZWYoInBlcm1pc3Npb25zLmRlZmF1bHQuZ2VvIiwgMCk7CiAgIC8vIHVzZXJfcHJlZigicGVybWlzc2lvbnMuZGVmYXVsdC5jYW1lcmEiLCAwKTsKICAgLy8gdXNlcl9wcmVmKCJwZXJtaXNzaW9ucy5kZWZhdWx0Lm1pY3JvcGhvbmUiLCAwKTsKICAgLy8gdXNlcl9wcmVmKCJwZXJtaXNzaW9ucy5kZWZhdWx0LmRlc2t0b3Atbm90aWZpY2F0aW9uIiwgMCk7CiAgIC8vIHVzZXJfcHJlZigicGVybWlzc2lvbnMuZGVmYXVsdC54ciIsIDApOyAvLyBWaXJ0dWFsIFJlYWxpdHkKLyogNzAwMzogZGlzYWJsZSBub24tbW9kZXJuIGNpcGhlciBzdWl0ZXMgWzFdCiAqIFtXSFldIFBhc3NpdmUgZmluZ2VycHJpbnRpbmcuIE1pbmltYWwvbm9uLWV4aXN0ZW50IHRocmVhdCBvZiBkb3duZ3JhZGUgYXR0YWNrcwogKiBbMV0gaHR0cHM6Ly9icm93c2VybGVha3MuY29tL3NzbCAqKiovCiAgIC8vIHVzZXJfcHJlZigic2VjdXJpdHkuc3NsMy5lY2RoZV9lY2RzYV9hZXNfMTI4X3NoYSIsIGZhbHNlKTsKICAgLy8gdXNlcl9wcmVmKCJzZWN1cml0eS5zc2wzLmVjZGhlX2VjZHNhX2Flc18yNTZfc2hhIiwgZmFsc2UpOwogICAvLyB1c2VyX3ByZWYoInNlY3VyaXR5LnNzbDMuZWNkaGVfcnNhX2Flc18xMjhfc2hhIiwgZmFsc2UpOwogICAvLyB1c2VyX3ByZWYoInNlY3VyaXR5LnNzbDMuZWNkaGVfcnNhX2Flc18yNTZfc2hhIiwgZmFsc2UpOwogICAvLyB1c2VyX3ByZWYoInNlY3VyaXR5LnNzbDMucnNhX2Flc18xMjhfZ2NtX3NoYTI1NiIsIGZhbHNlKTsgLy8gbm8gUEZTCiAgIC8vIHVzZXJfcHJlZigic2VjdXJpdHkuc3NsMy5yc2FfYWVzXzI1Nl9nY21fc2hhMzg0IiwgZmFsc2UpOyAvLyBubyBQRlMKICAgLy8gdXNlcl9wcmVmKCJzZWN1cml0eS5zc2wzLnJzYV9hZXNfMTI4X3NoYSIsIGZhbHNlKTsgLy8gbm8gUEZTCiAgIC8vIHVzZXJfcHJlZigic2VjdXJpdHkuc3NsMy5yc2FfYWVzXzI1Nl9zaGEiLCBmYWxzZSk7IC8vIG5vIFBGUwovKiA3MDA0OiBjb250cm9sIFRMUyB2ZXJzaW9ucwogKiBbV0hZXSBQYXNzaXZlIGZpbmdlcnByaW50aW5nIGFuZCBzZWN1cml0eSAqKiovCiAgIC8vIHVzZXJfcHJlZigic2VjdXJpdHkudGxzLnZlcnNpb24ubWluIiwgMyk7IC8vIFtERUZBVUxUOiAzXQogICAvLyB1c2VyX3ByZWYoInNlY3VyaXR5LnRscy52ZXJzaW9uLm1heCIsIDQpOwovKiA3MDA1OiBkaXNhYmxlIFNTTCBzZXNzaW9uIElEcyBbRkYzNitdCiAqIFtXSFldIFBhc3NpdmUgZmluZ2VycHJpbnRpbmcgYW5kIHBlcmYgY29zdHMuIFRoZXNlIGFyZSBzZXNzaW9uLW9ubHkKICogYW5kIGlzb2xhdGVkIHdpdGggbmV0d29yayBwYXJ0aXRpb25pbmcgKEZGODUrKSBhbmQvb3IgY29udGFpbmVycyAqKiovCiAgIC8vIHVzZXJfcHJlZigic2VjdXJpdHkuc3NsLmRpc2FibGVfc2Vzc2lvbl9pZGVudGlmaWVycyIsIHRydWUpOwovKiA3MDA3OiByZWZlcmVycwogKiBbV0hZXSBPbmx5IGNyb3NzLW9yaWdpbiByZWZlcmVycyAoMTYwMiwgNTUxMCkgbWF0dGVyICoqKi8KICAgLy8gdXNlcl9wcmVmKCJuZXR3b3JrLmh0dHAuc2VuZFJlZmVyZXJIZWFkZXIiLCAyKTsKICAgLy8gdXNlcl9wcmVmKCJuZXR3b3JrLmh0dHAucmVmZXJlci50cmltbWluZ1BvbGljeSIsIDApOwovKiA3MDA4OiBzZXQgdGhlIGRlZmF1bHQgUmVmZXJyZXIgUG9saWN5IFtGRjU5K10KICogMD1uby1yZWZlcmVyLCAxPXNhbWUtb3JpZ2luLCAyPXN0cmljdC1vcmlnaW4td2hlbi1jcm9zcy1vcmlnaW4sIDM9bm8tcmVmZXJyZXItd2hlbi1kb3duZ3JhZGUKICogW1dIWV0gRGVmYXVsdHMgYXJlIGZpbmUuIFRoZXkgY2FuIGJlIG92ZXJyaWRkZW4gYnkgYSBzaXRlLWNvbnRyb2xsZWQgUmVmZXJyZXIgUG9saWN5ICoqKi8KICAgLy8gdXNlcl9wcmVmKCJuZXR3b3JrLmh0dHAucmVmZXJlci5kZWZhdWx0UG9saWN5IiwgMik7IC8vIFtERUZBVUxUOiAyXQogICAvLyB1c2VyX3ByZWYoIm5ldHdvcmsuaHR0cC5yZWZlcmVyLmRlZmF1bHRQb2xpY3kucGJtb2RlIiwgMik7IC8vIFtERUZBVUxUOiAyXQovKiA3MDEwOiBkaXNhYmxlIEhUVFAgQWx0ZXJuYXRpdmUgU2VydmljZXMgW0ZGMzcrXQogKiBbV0hZXSBBbHJlYWR5IGlzb2xhdGVkIHdpdGggbmV0d29yayBwYXJ0aXRpb25pbmcgKEZGODUrKSAqKiovCiAgIC8vIHVzZXJfcHJlZigibmV0d29yay5odHRwLmFsdHN2Yy5lbmFibGVkIiwgZmFsc2UpOwovKiA3MDExOiBkaXNhYmxlIHdlYnNpdGUgY29udHJvbCBvdmVyIGJyb3dzZXIgcmlnaHQtY2xpY2sgY29udGV4dCBtZW51CiAqIFtXSFldIEp1c3QgdXNlIFNoaWZ0LVJpZ2h0LUNsaWNrICoqKi8KICAgLy8gdXNlcl9wcmVmKCJkb20uZXZlbnQuY29udGV4dG1lbnUuZW5hYmxlZCIsIGZhbHNlKTsKLyogNzAxMjogZGlzYWJsZSBpY29uIGZvbnRzIChnbHlwaHMpIGFuZCBsb2NhbCBmYWxsYmFjayByZW5kZXJpbmcKICogW1dIWV0gQnJlYWthZ2UsIGZvbnQgZmFsbGJhY2sgaXMgZXF1aXZhbGVuY3ksIGFsc28gUkZQCiAqIFsxXSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnLzc4OTc4OAogKiBbMl0gaHR0cHM6Ly9naXRsYWIudG9ycHJvamVjdC5vcmcvbGVnYWN5L3RyYWMvLS9pc3N1ZXMvODQ1NSAqKiovCiAgIC8vIHVzZXJfcHJlZigiZ2Z4LmRvd25sb2FkYWJsZV9mb250cy5lbmFibGVkIiwgZmFsc2UpOyAvLyBbRkY0MStdCiAgIC8vIHVzZXJfcHJlZigiZ2Z4LmRvd25sb2FkYWJsZV9mb250cy5mYWxsYmFja19kZWxheSIsIC0xKTsKLyogNzAxMzogZGlzYWJsZSBDbGlwYm9hcmQgQVBJCiAqIFtXSFldIEZpbmdlcnByaW50YWJsZS4gQnJlYWthZ2UuIEN1dC9jb3B5L3Bhc3RlIHJlcXVpcmUgdXNlcgogKiBpbnRlcmFjdGlvbiwgYW5kIHBhc3RlIGlzIGxpbWl0ZWQgdG8gZm9jdXNlZCBlZGl0YWJsZSBmaWVsZHMgKioqLwogICAvLyB1c2VyX3ByZWYoImRvbS5ldmVudC5jbGlwYm9hcmRldmVudHMuZW5hYmxlZCIsIGZhbHNlKTsKLyogNzAxNDogZGlzYWJsZSBTeXN0ZW0gQWRkLW9uIHVwZGF0ZXMKICogW1dIWV0gSXQgY2FuIGNvbXByb21pc2Ugc2VjdXJpdHkuIFN5c3RlbSBhZGRvbnMgc2hpcCB3aXRoIHByZWZzLCB1c2UgdGhvc2UgKioqLwogICAvLyB1c2VyX3ByZWYoImV4dGVuc2lvbnMuc3lzdGVtQWRkb24udXBkYXRlLmVuYWJsZWQiLCBmYWxzZSk7IC8vIFtGRjYyK10KICAgLy8gdXNlcl9wcmVmKCJleHRlbnNpb25zLnN5c3RlbUFkZG9uLnVwZGF0ZS51cmwiLCAiIik7IC8vIFtGRjQ0K10KLyogNzAxNTogZW5hYmxlIHRoZSBETlQgKERvIE5vdCBUcmFjaykgSFRUUCBoZWFkZXIKICogW1dIWV0gRE5UIGlzIGVuZm9yY2VkIHdpdGggVHJhY2tpbmcgUHJvdGVjdGlvbiB3aGljaCBpcyB1c2VkIGluIEVUUCBTdHJpY3QgKDI3MDEpICoqKi8KICAgLy8gdXNlcl9wcmVmKCJwcml2YWN5LmRvbm90dHJhY2toZWFkZXIuZW5hYmxlZCIsIHRydWUpOwovKiA3MDE2OiBjdXN0b21pemUgRVRQIHNldHRpbmdzCiAqIFtOT1RFXSBGUFAgKGZpbmdlcnByaW50aW5nUHJvdGVjdGlvbikgaXMgaWdub3JlZCB3aGVuIFJGUCAoNDUwMSkgaXMgZW5hYmxlZAogKiBbV0hZXSBBcmtlbmZveCBvbmx5IHN1cHBvcnRzIHN0cmljdCAoMjcwMSkgd2hpY2ggc2V0cyB0aGVzZSBhdCBydW50aW1lICoqKi8KICAgLy8gdXNlcl9wcmVmKCJuZXR3b3JrLmNvb2tpZS5jb29raWVCZWhhdmlvciIsIDUpOyAvLyBbREVGQVVMVDogNV0KICAgLy8gdXNlcl9wcmVmKCJuZXR3b3JrLmNvb2tpZS5jb29raWVCZWhhdmlvci5vcHRJblBhcnRpdGlvbmluZyIsIHRydWUpOyAvLyBbRVRQIEZGMTMyK10KICAgLy8gdXNlcl9wcmVmKCJuZXR3b3JrLmh0dHAucmVmZXJlci5kaXNhbGxvd0Nyb3NzU2l0ZVJlbGF4aW5nRGVmYXVsdCIsIHRydWUpOwogICAvLyB1c2VyX3ByZWYoIm5ldHdvcmsuaHR0cC5yZWZlcmVyLmRpc2FsbG93Q3Jvc3NTaXRlUmVsYXhpbmdEZWZhdWx0LnRvcF9uYXZpZ2F0aW9uIiwgdHJ1ZSk7IC8vIFtGRjEwMCtdCiAgIC8vIHVzZXJfcHJlZigicHJpdmFjeS5ib3VuY2VUcmFja2luZ1Byb3RlY3Rpb24ubW9kZSIsIDEpOyAvLyBbRkYxMzErXSBbRVRQIEZGMTMzK10KICAgLy8gdXNlcl9wcmVmKCJwcml2YWN5LmZpbmdlcnByaW50aW5nUHJvdGVjdGlvbiIsIHRydWUpOyAvLyBbRkYxMTQrXSBbRVRQIEZGMTE5K10KICAgLy8gdXNlcl9wcmVmKCJwcml2YWN5LnBhcnRpdGlvbi5uZXR3b3JrX3N0YXRlLm9jc3BfY2FjaGUiLCB0cnVlKTsgLy8gW0RFRkFVTFQ6IHRydWUgRkYxMjMrXQogICAvLyB1c2VyX3ByZWYoInByaXZhY3kucXVlcnlfc3RyaXBwaW5nLmVuYWJsZWQiLCB0cnVlKTsgLy8gW0ZGMTAxK10KICAgLy8gdXNlcl9wcmVmKCJwcml2YWN5LnRyYWNraW5ncHJvdGVjdGlvbi5lbmFibGVkIiwgdHJ1ZSk7CiAgIC8vIHVzZXJfcHJlZigicHJpdmFjeS50cmFja2luZ3Byb3RlY3Rpb24uc29jaWFsdHJhY2tpbmcuZW5hYmxlZCIsIHRydWUpOwogICAvLyB1c2VyX3ByZWYoInByaXZhY3kudHJhY2tpbmdwcm90ZWN0aW9uLmNyeXB0b21pbmluZy5lbmFibGVkIiwgdHJ1ZSk7IC8vIFtERUZBVUxUOiB0cnVlXQogICAvLyB1c2VyX3ByZWYoInByaXZhY3kudHJhY2tpbmdwcm90ZWN0aW9uLmZpbmdlcnByaW50aW5nLmVuYWJsZWQiLCB0cnVlKTsgLy8gW0RFRkFVTFQ6IHRydWVdCi8qIDcwMTc6IGRpc2FibGUgc2VydmljZSB3b3JrZXJzCiAqIFtXSFldIEFscmVhZHkgaXNvbGF0ZWQgd2l0aCBUQ1AgKDI3MDEpIGJlaGluZCBhIHByZWYgKDI3MTApICoqKi8KICAgLy8gdXNlcl9wcmVmKCJkb20uc2VydmljZVdvcmtlcnMuZW5hYmxlZCIsIGZhbHNlKTsKLyogNzAxODogZGlzYWJsZSBXZWIgTm90aWZpY2F0aW9ucyBbRkYyMitdCiAqIFtXSFldIFdlYiBOb3RpZmljYXRpb25zIGFyZSBiZWhpbmQgYSBwcm9tcHQgKDcwMDIpCiAqIFsxXSBodHRwczovL2Jsb2cubW96aWxsYS5vcmcvZW4vcHJvZHVjdHMvZmlyZWZveC9ibG9jay1ub3RpZmljYXRpb24tcmVxdWVzdHMvICoqKi8KICAgLy8gdXNlcl9wcmVmKCJkb20ud2Vibm90aWZpY2F0aW9ucy5lbmFibGVkIiwgZmFsc2UpOwovKiA3MDE5OiBkaXNhYmxlIFB1c2ggTm90aWZpY2F0aW9ucyBbRkY0NCtdCiAqIFtXSFldIFdlYnNpdGUgInB1c2giIHJlcXVpcmVzIHN1YnNjcmlwdGlvbiwgYW5kIHRoZSBBUEkgaXMgcmVxdWlyZWQgZm9yIENSTGl0ZSAoMTIyNCkKICogW05PVEVdIFRvIHJlbW92ZSBhbGwgc3Vic2NyaXB0aW9ucywgcmVzZXQgImRvbS5wdXNoLnVzZXJBZ2VudElEIgogKiBbMV0gaHR0cHM6Ly9zdXBwb3J0Lm1vemlsbGEub3JnL2tiL3B1c2gtbm90aWZpY2F0aW9ucy1maXJlZm94ICoqKi8KICAgLy8gdXNlcl9wcmVmKCJkb20ucHVzaC5lbmFibGVkIiwgZmFsc2UpOwovKiA3MDIwOiBkaXNhYmxlIFdlYlJUQyAoV2ViIFJlYWwtVGltZSBDb21tdW5pY2F0aW9uKQogKiBbV0hZXSBGaXJlZm94IGRlc2t0b3AgdXNlcyBtRE5TIGhvc3RuYW1lIG9iZnVzY2F0aW9uIGFuZCB0aGUgcHJpdmF0ZSBJUCBpcyBuZXZlciBleHBvc2VkIHVudGlsCiAqIHJlcXVpcmVkIGluIFRSVVNURUQgc2NlbmFyaW9zOyBpLmUuIGFmdGVyIHlvdSBncmFudCBkZXZpY2UgKG1pY3JvcGhvbmUgb3IgY2FtZXJhKSBhY2Nlc3MKICogW1RFU1RdIGh0dHBzOi8vYnJvd3NlcmxlYWtzLmNvbS93ZWJydGMKICogWzFdIGh0dHBzOi8vZ3JvdXBzLmdvb2dsZS5jb20vZy9kaXNjdXNzLXdlYnJ0Yy9jLzZzdFFYaTcyQkVVL20vMkZ3WmQyNFVBUUFKCiAqIFsyXSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtbW11c2ljLW1kbnMtaWNlLWNhbmRpZGF0ZXMjc2VjdGlvbi0zLjEuMSAqKiovCiAgIC8vIHVzZXJfcHJlZigibWVkaWEucGVlcmNvbm5lY3Rpb24uZW5hYmxlZCIsIGZhbHNlKTsKLyogNzAyMTogZW5hYmxlIEdQQyAoR2xvYmFsIFByaXZhY3kgQ29udHJvbCkgaW4gbm9uLVBCIHdpbmRvd3MKICogW1dIWV0gUGFzc2l2ZSBhbmQgYWN0aXZlIGZpbmdlcnByaW50aW5nLiBNb3N0bHkgcmVkdW5kYW50IHdpdGggVHJhY2tpbmcgUHJvdGVjdGlvbgogKiBpbiBFVFAgU3RyaWN0ICgyNzAxKSBhbmQgc2FuaXRpemluZyBvbiBjbG9zZSAoMjgwMHMpICoqKi8KICAgLy8gdXNlcl9wcmVmKCJwcml2YWN5Lmdsb2JhbHByaXZhY3ljb250cm9sLmVuYWJsZWQiLCB0cnVlKTsKCi8qKiogW1NFQ1RJT04gODAwMF06IERPTidUIEJPVEhFUjogRklOR0VSUFJJTlRJTkcKICAgW1dIWV0gVGhleSBhcmUgaW5zdWZmaWNpZW50IHRvIGhlbHAgYW50aS1maW5nZXJwcmludGluZyBhbmQgZG8gbW9yZSBoYXJtIHRoYW4gZ29vZAogICBbV0FSTklOR10gRE8gTk9UIFVTRSB3aXRoIFJGUC4gUkZQIGFscmVhZHkgY292ZXJzIHRoZXNlIGFuZCB0aGV5IGNhbiBpbnRlcmZlcmUKKioqLwp1c2VyX3ByZWYoIl91c2VyLmpzLnBhcnJvdCIsICI4MDAwIHN5bnRheCBlcnJvcjogdGhlIHBhcnJvdCdzIGNyb3NzZWQgdGhlIEpvcmRhbiIpOwovKiA4MDAxOiBwcmVmc0NsZWFuZXI6IHJlc2V0IGl0ZW1zIHVzZWxlc3MgZm9yIGFudGktZmluZ2VycHJpbnRpbmcgKioqLwogICAvLyB1c2VyX3ByZWYoImJyb3dzZXIuZGlzcGxheS51c2VfZG9jdW1lbnRfZm9udHMiLCAiIik7CiAgIC8vIHVzZXJfcHJlZigiYnJvd3Nlci56b29tLnNpdGVTcGVjaWZpYyIsICIiKTsKICAgLy8gdXNlcl9wcmVmKCJkZXZpY2Uuc2Vuc29ycy5lbmFibGVkIiwgIiIpOwogICAvLyB1c2VyX3ByZWYoImRvbS5lbmFibGVfcGVyZm9ybWFuY2UiLCAiIik7CiAgIC8vIHVzZXJfcHJlZigiZG9tLmVuYWJsZV9yZXNvdXJjZV90aW1pbmciLCAiIik7CiAgIC8vIHVzZXJfcHJlZigiZG9tLmdhbWVwYWQuZW5hYmxlZCIsICIiKTsKICAgLy8gdXNlcl9wcmVmKCJkb20ubWF4SGFyZHdhcmVDb25jdXJyZW5jeSIsICIiKTsKICAgLy8gdXNlcl9wcmVmKCJkb20udzNjX3RvdWNoX2V2ZW50cy5lbmFibGVkIiwgIiIpOwogICAvLyB1c2VyX3ByZWYoImRvbS53ZWJhdWRpby5lbmFibGVkIiwgIiIpOwogICAvLyB1c2VyX3ByZWYoImZvbnQuc3lzdGVtLndoaXRlbGlzdCIsICIiKTsKICAgLy8gdXNlcl9wcmVmKCJnZW5lcmFsLmFwcG5hbWUub3ZlcnJpZGUiLCAiIik7CiAgIC8vIHVzZXJfcHJlZigiZ2VuZXJhbC5hcHB2ZXJzaW9uLm92ZXJyaWRlIiwgIiIpOwogICAvLyB1c2VyX3ByZWYoImdlbmVyYWwuYnVpbGRJRC5vdmVycmlkZSIsICIiKTsKICAgLy8gdXNlcl9wcmVmKCJnZW5lcmFsLm9zY3B1Lm92ZXJyaWRlIiwgIiIpOwogICAvLyB1c2VyX3ByZWYoImdlbmVyYWwucGxhdGZvcm0ub3ZlcnJpZGUiLCAiIik7CiAgIC8vIHVzZXJfcHJlZigiZ2VuZXJhbC51c2VyYWdlbnQub3ZlcnJpZGUiLCAiIik7CiAgIC8vIHVzZXJfcHJlZigibWVkaWEubmF2aWdhdG9yLmVuYWJsZWQiLCAiIik7CiAgIC8vIHVzZXJfcHJlZigibWVkaWEub25kZXZpY2VjaGFuZ2UuZW5hYmxlZCIsICIiKTsKICAgLy8gdXNlcl9wcmVmKCJtZWRpYS52aWRlb19zdGF0cy5lbmFibGVkIiwgIiIpOwogICAvLyB1c2VyX3ByZWYoIm1lZGlhLndlYnNwZWVjaC5zeW50aC5lbmFibGVkIiwgIiIpOwogICAvLyB1c2VyX3ByZWYoInVpLnVzZV9zdGFuZGluc19mb3JfbmF0aXZlX2NvbG9ycyIsICIiKTsKICAgLy8gdXNlcl9wcmVmKCJ3ZWJnbC5lbmFibGUtZGVidWctcmVuZGVyZXItaW5mbyIsICIiKTsKCi8qKiogW1NFQ1RJT04gOTAwMF06IE5PTi1QUk9KRUNUIFJFTEFURUQgKioqLwp1c2VyX3ByZWYoIl91c2VyLmpzLnBhcnJvdCIsICI5MDAwIHN5bnRheCBlcnJvcjogdGhlIHBhcnJvdCdzIGNhc2hlZCBpbiAnaXMgY2hpcHMhIik7Ci8qIDkwMDE6IGRpc2FibGUgd2VsY29tZSBub3RpY2VzICoqKi8KdXNlcl9wcmVmKCJicm93c2VyLnN0YXJ0dXAuaG9tZXBhZ2Vfb3ZlcnJpZGUubXN0b25lIiwgImlnbm9yZSIpOyAvLyBbSElEREVOIFBSRUZdCi8qIDkwMDI6IGRpc2FibGUgR2VuZXJhbD5Ccm93c2luZz5SZWNvbW1lbmQgZXh0ZW5zaW9ucy9mZWF0dXJlcyBhcyB5b3UgYnJvd3NlIFtGRjY3K10gKioqLwp1c2VyX3ByZWYoImJyb3dzZXIubmV3dGFicGFnZS5hY3Rpdml0eS1zdHJlYW0uYXNyb3V0ZXIudXNlcnByZWZzLmNmci5hZGRvbnMiLCBmYWxzZSk7CnVzZXJfcHJlZigiYnJvd3Nlci5uZXd0YWJwYWdlLmFjdGl2aXR5LXN0cmVhbS5hc3JvdXRlci51c2VycHJlZnMuY2ZyLmZlYXR1cmVzIiwgZmFsc2UpOwovKiA5MDA0OiBkaXNhYmxlIHNlYXJjaCB0ZXJtcyBbRkYxMTArXQogKiBbU0VUVElOR10gU2VhcmNoPlNlYXJjaCBCYXI+VXNlIHRoZSBhZGRyZXNzIGJhciBmb3Igc2VhcmNoIGFuZCBuYXZpZ2F0aW9uPlNob3cgc2VhcmNoIHRlcm1zIGluc3RlYWQgb2YgVVJMLi4uICoqKi8KdXNlcl9wcmVmKCJicm93c2VyLnVybGJhci5zaG93U2VhcmNoVGVybXMuZW5hYmxlZCIsIGZhbHNlKTsKCi8qKiogW1NFQ1RJT04gOTk5OV06IERFUFJFQ0FURUQgLyBSRU5BTUVEICoqKi8KdXNlcl9wcmVmKCJfdXNlci5qcy5wYXJyb3QiLCAiOTk5OSBzeW50YXggZXJyb3I6IHRoZSBwYXJyb3QncyBzaHVmZmxlZCBvZmYgJ2lzIG1vcnRhbCBjb2lsISIpOwovKiBFU1IxMTUueCBzdGlsbCB1c2VzIGFsbCB0aGUgZm9sbG93aW5nIHByZWZzCi8vIFtOT1RFXSByZXBsYWNlIHRoZSAqIHdpdGggYSBzbGFzaCBpbiB0aGUgbGluZSBhYm92ZSB0byByZS1lbmFibGUgYWN0aXZlIG9uZXMKLy8gRkYxMTYKLy8gNDUwNjogc2V0IFJGUCdzIGZvbnQgdmlzaWJpbGl0eSBsZXZlbCAoMTQwMikgW0ZGOTQrXQogICAvLyBbLV0gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy8xODM4NDE1CiAgIC8vIHVzZXJfcHJlZigibGF5b3V0LmNzcy5mb250LXZpc2liaWxpdHkucmVzaXN0RmluZ2VycHJpbnRpbmciLCAxKTsgLy8gW0RFRkFVTFQ6IDFdCi8vIEZGMTE3Ci8vIDEyMjE6IGRpc2FibGUgV2luZG93cyBNaWNyb3NvZnQgRmFtaWx5IFNhZmV0eSBjZXJ0IFtGRjUwK10gW1dJTkRPV1NdCiAgIC8vIDA9ZGlzYWJsZSBkZXRlY3RpbmcgRmFtaWx5IFNhZmV0eSBtb2RlIGFuZCBpbXBvcnRpbmcgdGhlIHJvb3QKICAgLy8gMT1vbmx5IGF0dGVtcHQgdG8gZGV0ZWN0IEZhbWlseSBTYWZldHkgbW9kZSAoZG9uJ3QgaW1wb3J0IHRoZSByb290KQogICAvLyAyPWRldGVjdCBGYW1pbHkgU2FmZXR5IG1vZGUgYW5kIGltcG9ydCB0aGUgcm9vdAogICAvLyBbMV0gaHR0cHM6Ly9naXRsYWIudG9ycHJvamVjdC5vcmcvdHBvL2FwcGxpY2F0aW9ucy90b3ItYnJvd3Nlci8tL2lzc3Vlcy8yMTY4NgogICAvLyBbLV0gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy8xODQ0OTA4CnVzZXJfcHJlZigic2VjdXJpdHkuZmFtaWx5X3NhZmV0eS5tb2RlIiwgMCk7Ci8vIDcwMTg6IGRpc2FibGUgc2VydmljZSB3b3JrZXIgV2ViIE5vdGlmaWNhdGlvbnMgW0ZGNDQrXQogICAvLyBbV0hZXSBXZWIgTm90aWZpY2F0aW9ucyBhcmUgYmVoaW5kIGEgcHJvbXB0ICg3MDAyKQogICAvLyBbMV0gaHR0cHM6Ly9ibG9nLm1vemlsbGEub3JnL2VuL3Byb2R1Y3RzL2ZpcmVmb3gvYmxvY2stbm90aWZpY2F0aW9uLXJlcXVlc3RzLwogICAvLyBbLV0gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy8xODQyNDU3CiAgIC8vIHVzZXJfcHJlZigiZG9tLndlYm5vdGlmaWNhdGlvbnMuc2VydmljZXdvcmtlci5lbmFibGVkIiwgZmFsc2UpOwovLyBGRjExOAovLyAxNDAyOiBsaW1pdCBmb250IHZpc2liaWxpdHkgKFdpbmRvd3MsIE1hYywgc29tZSBMaW51eCkgW0ZGOTQrXQogICAvLyBVc2VzIGhhcmRjb2RlZCBsaXN0cyB3aXRoIHR3byBwYXJ0czoga0Jhc2VGb250cyArIGtMYW5nUGFja0ZvbnRzIFsxXSwgYnVuZGxlZCBmb250cyBhcmUgYXV0by1hbGxvd2VkCiAgIC8vIEluIG5vcm1hbCB3aW5kb3dzOiB1c2VzIHRoZSBmaXJzdCBhcHBsaWNhYmxlOiBSRlAgb3ZlciBUUCBvdmVyIFN0YW5kYXJkCiAgIC8vIEluIFByaXZhdGUgQnJvd3Npbmcgd2luZG93czogdXNlcyB0aGUgbW9zdCByZXN0cmljdGl2ZSBiZXR3ZWVuIG5vcm1hbCBhbmQgcHJpdmF0ZQogICAvLyAxPW9ubHkgYmFzZSBzeXN0ZW0gZm9udHMsIDI9YWxzbyBmb250cyBmcm9tIG9wdGlvbmFsIGxhbmd1YWdlIHBhY2tzLCAzPWFsc28gdXNlci1pbnN0YWxsZWQgZm9udHMKICAgLy8gWzFdIGh0dHBzOi8vc2VhcmNoZm94Lm9yZy9tb3ppbGxhLWNlbnRyYWwvc2VhcmNoP3BhdGg9U3RhbmRhcmRGb250cyouaW5jCiAgIC8vIFstXSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnLzE4NDc1OTkKICAgLy8gdXNlcl9wcmVmKCJsYXlvdXQuY3NzLmZvbnQtdmlzaWJpbGl0eS5wcml2YXRlIiwgMSk7CiAgIC8vIHVzZXJfcHJlZigibGF5b3V0LmNzcy5mb250LXZpc2liaWxpdHkuc3RhbmRhcmQiLCAxKTsKICAgLy8gdXNlcl9wcmVmKCJsYXlvdXQuY3NzLmZvbnQtdmlzaWJpbGl0eS50cmFja2luZ3Byb3RlY3Rpb24iLCAxKTsKLy8gMjYyMzogZGlzYWJsZSBwZXJtaXNzaW9ucyBkZWxlZ2F0aW9uIFtGRjczK10KICAgLy8gQ3VycmVudGx5IGFwcGxpZXMgdG8gY3Jvc3Mtb3JpZ2luIGdlb2xvY2F0aW9uLCBjYW1lcmEsIG1pYyBhbmQgc2NyZWVuLXNoYXJpbmcKICAgLy8gcGVybWlzc2lvbnMsIGFuZCBmdWxsc2NyZWVuIHJlcXVlc3RzLiBEaXNhYmxpbmcgZGVsZWdhdGlvbiBtZWFucyBhbnkgcHJvbXB0cwogICAvLyBmb3IgdGhlc2Ugd2lsbCBzaG93L3VzZSB0aGVpciBjb3JyZWN0IDNyZCBwYXJ0eSBvcmlnaW4KICAgLy8gWzFdIGh0dHBzOi8vZ3JvdXBzLmdvb2dsZS5jb20vZm9ydW0vIyF0b3BpYy9tb3ppbGxhLmRldi5wbGF0Zm9ybS9CZEZPTUF1Q0dXOC9kaXNjdXNzaW9uCiAgIC8vIFstXSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnLzE2OTcxNTEKICAgLy8gdXNlcl9wcmVmKCJwZXJtaXNzaW9ucy5kZWxlZ2F0aW9uLmVuYWJsZWQiLCBmYWxzZSk7Ci8vIEZGMTE5Ci8vIDAyMTE6IHVzZSBlbi1VUyBsb2NhbGUgcmVnYXJkbGVzcyBvZiB0aGUgc3lzdGVtIG9yIHJlZ2lvbiBsb2NhbGUKICAgLy8gW1NFVFVQLVdFQl0gTWF5IGJyZWFrIHNvbWUgaW5wdXQgbWV0aG9kcyBlLmcgeGltL2lidXMgZm9yIENKSyBsYW5ndWFnZXMgWzFdCiAgIC8vIFsxXSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL2J1Z2xpc3QuY2dpP2J1Z19pZD04Njc1MDEsMTYyOTYzMAogICAvLyBbLV0gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy8xODQ2MjI0CiAgIC8vIHVzZXJfcHJlZigiamF2YXNjcmlwdC51c2VfdXNfZW5nbGlzaF9sb2NhbGUiLCB0cnVlKTsgLy8gW0hJRERFTiBQUkVGXQovLyAwNzExOiBkaXNhYmxlIHNraXBwaW5nIERvSCB3aGVuIHBhcmVudGFsIGNvbnRyb2xzIGFyZSBlbmFibGVkIFtGRjcwK10KICAgLy8gWy1dIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvMTU4Njk0MQp1c2VyX3ByZWYoIm5ldHdvcmsuZG5zLnNraXBUUlItd2hlbi1wYXJlbnRhbC1jb250cm9sLWVuYWJsZWQiLCBmYWxzZSk7Ci8vIEZGMTIzCi8vIDAzMzQ6IGRpc2FibGUgUGluZ0NlbnRyZSB0ZWxlbWV0cnkgKHVzZWQgaW4gc2V2ZXJhbCBTeXN0ZW0gQWRkLW9ucykgW0ZGNTcrXQogICAvLyBEZWZlbnNlLWluLWRlcHRoOiBjdXJyZW50bHkgY292ZXJlZCBieSAwMzMxCiAgIC8vIFstXSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnLzE4Njg5ODgKdXNlcl9wcmVmKCJicm93c2VyLnBpbmctY2VudHJlLnRlbGVtZXRyeSIsIGZhbHNlKTsKLy8gRkYxMjYKLy8gOTAwMzogZGlzYWJsZSBXaGF0J3MgTmV3IHRvb2xiYXIgaWNvbiBbRkY2OStdCiAgIC8vIFstXSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnLzE3MjQzMDAKdXNlcl9wcmVmKCJicm93c2VyLm1lc3NhZ2luZy1zeXN0ZW0ud2hhdHNOZXdQYW5lbC5lbmFibGVkIiwgZmFsc2UpOwovLyBGRjEyNwogIC8vIDI2MzA6IGRpc2FibGUgY29udGVudCBhbmFseXNpcyBieSBETFAgKERhdGEgTG9zcyBQcmV2ZW50aW9uKSBhZ2VudHMgLSByZXBsYWNlZCBieSBkZWZhdWx0X3Jlc3VsdAogIC8vIFstXSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnLzE4ODAzMTQKdXNlcl9wcmVmKCJicm93c2VyLmNvbnRlbnRhbmFseXNpcy5kZWZhdWx0X2FsbG93IiwgZmFsc2UpOwovLyA0NTExOiBlbmZvcmNlIG5vbi1uYXRpdmUgd2lkZ2V0IHRoZW1lCiAgIC8vIFNlY3VyaXR5OiByZW1vdmVzL3JlZHVjZXMgc3lzdGVtIEFQSSBjYWxscywgZS5nLiB3aW4zMmsgQVBJIFsxXQogICAvLyBGaW5nZXJwcmludGluZzogcHJvdmlkZXMgYSB1bmlmb3JtIGxvb2sgYW5kIGZlZWwgYWNyb3NzIHBsYXRmb3JtcyBbMl0KICAgLy8gWzFdIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvMTM4MTkzOAogICAvLyBbMl0gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy8xNDExNDI1CiAgIC8vIFstXSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnLzE4NDg4OTkKdXNlcl9wcmVmKCJ3aWRnZXQubm9uLW5hdGl2ZS10aGVtZS5lbmFibGVkIiwgdHJ1ZSk7IC8vIFtERUZBVUxUOiB0cnVlXQovLyAqKiovCgovKiBFU1IxMjgueCBzdGlsbCB1c2VzIGFsbCB0aGUgZm9sbG93aW5nIHByZWZzCi8vIFtOT1RFXSByZXBsYWNlIHRoZSAqIHdpdGggYSBzbGFzaCBpbiB0aGUgbGluZSBhYm92ZSB0byByZS1lbmFibGUgYWN0aXZlIG9uZXMKLy8gRkYxMzIKLyogMjYxNzogcmVtb3ZlIHdlYmNoYW5uZWwgd2hpdGVsaXN0CiAgIC8vIFstXSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnLzEyNzU2MTIKICAgLy8gdXNlcl9wcmVmKCJ3ZWJjaGFubmVsLmFsbG93T2JqZWN0LnVybFdoaXRlbGlzdCIsICIiKTsKLy8gKioqLwoKLyogRU5EOiBpbnRlcm5hbCBjdXN0b20gcHJlZiB0byB0ZXN0IGZvciBzeW50YXggZXJyb3JzICoqKi8KdXNlcl9wcmVmKCJfdXNlci5qcy5wYXJyb3QiLCAiU1VDQ0VTUzogTm8gbm8gaGUncyBub3QgZGVhZCwgaGUncywgaGUncyByZXN0aW4nISIpOwo="