@phenixrts/sdk 2023.2.7-beta.77 → 2023.2.8-beta.78
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/channels/debug/channels.js +956 -958
- package/channels/debug/package.json +1 -1
- package/channels/debug.private/channels.js +874 -876
- package/channels/debug.private/package.json +1 -1
- package/channels/es5.debug.private/channels.js +2 -4
- package/channels/es5.debug.private/package.json +1 -1
- package/channels/min/channels.js +1 -1
- package/channels/min/channels.js.map +1 -1
- package/channels/min/package.json +1 -1
- package/channels/min.private/channels.js +1 -1
- package/channels/min.private/channels.js.map +1 -1
- package/channels/min.private/package.json +1 -1
- package/channels/package.json +1 -1
- package/full/debug/full.js +1077 -1079
- package/full/debug/package.json +1 -1
- package/full/debug.private/full.js +995 -997
- package/full/debug.private/package.json +1 -1
- package/full/min/full.js +1 -1
- package/full/min/full.js.map +1 -1
- package/full/min/package.json +1 -1
- package/full/min.private/full.js +1 -1
- package/full/min.private/full.js.map +1 -1
- package/full/min.private/package.json +1 -1
- package/full/package.json +1 -1
- package/package.json +1 -1
- package/publish/debug/package.json +1 -1
- package/publish/debug/publish.js +793 -795
- package/publish/debug.private/package.json +1 -1
- package/publish/debug.private/publish.js +793 -795
- package/publish/min/package.json +1 -1
- package/publish/min/publish.js +1 -1
- package/publish/min/publish.js.map +1 -1
- package/publish/min.private/package.json +1 -1
- package/publish/min.private/publish.js +1 -1
- package/publish/min.private/publish.js.map +1 -1
- package/publish/package.json +1 -1
- package/types/sdk/api/Publish.d.ts +0 -2
|
@@ -6707,7 +6707,6 @@ var EndPoint = /*#__PURE__*/function () {
|
|
|
6707
6707
|
},
|
|
6708
6708
|
createAnswerDescription: {
|
|
6709
6709
|
streamId: '',
|
|
6710
|
-
options: ['upload'],
|
|
6711
6710
|
apiVersion: apiVersion
|
|
6712
6711
|
}
|
|
6713
6712
|
};
|
|
@@ -6722,7 +6721,6 @@ var EndPoint = /*#__PURE__*/function () {
|
|
|
6722
6721
|
name: name,
|
|
6723
6722
|
createOfferDescription: {
|
|
6724
6723
|
streamId: '',
|
|
6725
|
-
options: ['upload'],
|
|
6726
6724
|
apiVersion: apiVersion
|
|
6727
6725
|
}
|
|
6728
6726
|
};
|
|
@@ -8115,7 +8113,7 @@ var VersionManager = /*#__PURE__*/function () {
|
|
|
8115
8113
|
key: "sdkVersion",
|
|
8116
8114
|
get: function get() {
|
|
8117
8115
|
try {
|
|
8118
|
-
return "2023-
|
|
8116
|
+
return "2023-07-04T12:35:39.563Z (2023.2.8-beta.78)";
|
|
8119
8117
|
} catch (e) {
|
|
8120
8118
|
return this._defaultVersion;
|
|
8121
8119
|
}
|
|
@@ -9637,4 +9635,4 @@ if (!global.fetch) {
|
|
|
9637
9635
|
/******/ })()
|
|
9638
9636
|
;
|
|
9639
9637
|
});
|
|
9640
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hcnJheUxpa2VUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hcnJheVdpdGhIb2xlcy5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXJyYXlXaXRob3V0SG9sZXMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXN5bmNUb0dlbmVyYXRvci5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY2xhc3NDYWxsQ2hlY2suanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NyZWF0ZUNsYXNzLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZ2V0UHJvdG90eXBlT2YuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pdGVyYWJsZVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9ub25JdGVyYWJsZVJlc3QuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL25vbkl0ZXJhYmxlU3ByZWFkLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zZXRQcm90b3R5cGVPZi5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheS5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Db25zdW1hYmxlQXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvUHJpbWl0aXZlLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b1Byb3BlcnR5S2V5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3JlZ2VuZXJhdG9yUnVudGltZS5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy90eXBlb2YuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL3JlZ2VuZXJhdG9yL2luZGV4LmpzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2RvbS9Ccm93c2VyRGV0ZWN0b3IudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2RvbS9QbGFpbkNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2RvbS9HYXJiYWdlQ29sbGVjdG9yTWFuYWdlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL05ldHdvcmtNb25pdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vU3RyZWFtU2V0dXBMaXN0ZW5lci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZWRnZUF1dGgvRWRnZUF1dGhQYXJzZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2VkZ2VBdXRoL0VkZ2VUb2tlbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZW52aXJvbm1lbnQvQnVpbGRGZWF0dXJlcy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2Vudmlyb25tZW50L1BhcmFtZXRlcnMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xhbmcvRGlzcG9zYWJsZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbGFuZy9EaXNwb3NhYmxlTGlzdC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbGFuZy9TdHJpbmdzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sYW5nL2Fzc2VydFVucmVhY2hhYmxlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvQXBwZW5kZXJzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvQ29uc29sZUFwcGVuZGVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvTG9nZ2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvTG9nZ2VyRGVmYXVsdHMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Mb2dnZXJGYWN0b3J5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvTG9nZ2luZ0xldmVsTWFwcGluZy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0xvZ2dpbmdUaHJlc2hvbGQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvTWV0cmljVHlwZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9NZXRyaWNzQ29uZmlndXJhdGlvbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9NZXRyaWNzRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9NZXRyaWNzU2VydmljZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9NZXRyaWNzVHlwZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9UZWxlbWV0cmljTGV2ZWxNYXBwaW5nLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL1RlbGVtZXRyeURlZmF1bHQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J0Yy9QZWVyQ29ubmVjdGlvblNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J0Yy9SdGNDb25maWd1cmF0aW9uTWFuYWdlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1J0Y0Nvbm5lY3Rpb25Nb25pdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvU2RwUGFyc2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvVmFuaWxsYVBlZXJDb25uZWN0aW9uLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcngvUmVhZE9ubHlTdWJqZWN0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9yeC9TdWJqZWN0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvRW52aXJvbm1lbnQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9TREsudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9UZWxlbWV0cnlVcmwudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9hcGkvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jaGFubmVscy9DaGFubmVsLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY2hhbm5lbHMvQ2hhbm5lbFN0YXRlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY2hhbm5lbHMvQ2hhbm5lbHMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jaGFubmVscy9pbmRleC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NvbnRleHQvQ2hhbm5lbENvbnRleHQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jb250ZXh0L1BlZXJDb25uZWN0aW9uQ29udGV4dC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NvbnRleHQvU3RhdGVDb250ZXh0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY29udGV4dC9Ub2tlbkNvbnRleHQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kZWZhdWx0cy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2Rpc2NvdmVyeS9CaXRyYXRlTW9kZU1hcHBpbmcudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvQml0cmF0ZVN0YXRlTWFwcGluZy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2Rpc2NvdmVyeS9EaXNjb3ZlcnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvRGlzY292ZXJ5U2VydmljZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2Rpc2NvdmVyeS9EaXNjb3ZlcnlVcmkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvRW5kUG9pbnQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvSW5zZXJ0YWJsZVN0cmVhbXMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvUmVhbFRpbWVTdHJlYW0udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvUmVhbFRpbWVTdHJlYW1GYWN0b3J5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvdmVyc2lvbi9WZXJzaW9uTWFuYWdlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdGVsZW1ldHJ5L1RlbGVtZXRyeUFwZW5kZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3RlbGVtZXRyeS9UZWxlbWV0cnlDb25maWd1cmF0aW9uLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy90ZWxlbWV0cnkvVGVsZW1ldHJ5U2VydmljZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdGltZS9EdXJhdGlvbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdGltZS9FeHBvbmVudGlhbEJhY2tvZmYudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3ZpZGVvL0RpbWVuc2lvbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdmlkZW8vU2Vzc2lvblRlbGVtZXRyeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdmlkZW8vVmlkZW9UZWxlbWV0cnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL3doYXR3Zy1mZXRjaC9mZXRjaC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svcnVudGltZS9jb21wYXQgZ2V0IGRlZmF1bHQgZXhwb3J0Iiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svc3RhcnR1cCJdLCJuYW1lcyI6WyJkZWZhdWx0RG9jdW1lbnRGb2N1c0ludGVydmFsVGltZW91dCIsIkFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yIiwiX2NsYXNzQ2FsbENoZWNrIiwiX2RlZmluZVByb3BlcnR5IiwiRGlzcG9zYWJsZUxpc3QiLCJEYXRlIiwibm93IiwiX2lzRm9yZWdyb3VuZCIsIlN1YmplY3QiLCJfcmVhZE9ubHlJc0ZvcmVncm91bmQiLCJSZWFkT25seVN1YmplY3QiLCJkZXRlY3RUYWJGb2N1c0NoYW5nZSIsIl9jcmVhdGVDbGFzcyIsImtleSIsImdldCIsInZhbHVlIiwiZ2V0VGltZVNpbmNlTGFzdENoYW5nZSIsIl90aW1lT2ZMYXN0VGFiRm9jdXNDaGFuZ2UiLCJkaXNwb3NlIiwiX2Rpc3Bvc2FibGVzIiwiX3RoaXMiLCJoaWRkZW4iLCJ2aXNpYmlsaXR5Q2hhbmdlIiwiZG9jdW1lbnQiLCJfdHlwZW9mIiwibXNIaWRkZW4iLCJ3ZWJraXRIaWRkZW4iLCJoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlIiwiaXNGb3JlZ3JvdW5kIiwic2V0Rm9jdXNTdGF0ZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJhZGQiLCJEaXNwb3NhYmxlIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImxpc3RlbkZvckRvY3VtZW50Rm9jdXMiLCJjYWxsIiwiX3RoaXMyIiwiX2RvY3VtZW50Rm9jdXNJbnRlcnZhbCIsIndpbmRvdyIsInNldEludGVydmFsIiwiaGFzRm9jdXMiLCJjbGVhckludGVydmFsIiwiQnJvd3NlckRldGVjdG9yIiwiX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbiIsIl9icm93c2VyTmFtZSIsIl9icm93c2VyTWFqb3JWZXJzaW9uIiwiX2lzQ2hyb21lNjkiLCJfaXNDaHJvbWU3MCIsIl9pc0Nocm9tZTcxIiwiX2lzQ2hyb21lNzIiLCJfaXNDaHJvbWU3NCIsIl9pc0Nocm9tZTc1IiwiX2lzQ2hyb21lNzYiLCJfaXNDaHJvbWU3NyIsImlzTW9iaWxlIiwiX25hdmlnYXRvciIsInRlc3QiLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJwYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbiIsImJyb3dzZXJOYW1lQW5kVmVyc2lvbiIsIm1hdGNoIiwiX2Jyb3dzZXJOYW1lQW5kVmVyc2lvblJlZ2V4IiwicGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb25Gb3JJRSIsInBhcnNlQnJvd3Nlck5hbWUiLCJicm93c2VyTmFtZUxpc3QiLCJzcGxpdCIsInBhcnNlQnJvd3Nlck1ham9yVmVyc2lvbiIsImJyb3dzZXJWZXJzaW9uTGlzdCIsImZ1bGxWZXJzaW9uIiwiTnVtYmVyIiwibXNpZSIsImluZGV4T2YiLCJjb25jYXQiLCJwYXJzZUludCIsInN1YnN0cmluZyIsInRyaWRlbnQiLCJ2ZXJzaW9uIiwiaW5jbHVkZXMiLCJQbGFpbkNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIiLCJnZXRTdHJpbmdWYWx1ZSIsIm5hbWUiLCJkZWZhdWx0U3RyaW5nVmFsdWUiLCJnZXRCb29sZWFuVmFsdWUiLCJkZWZhdWx0Qm9vbGVhblZhbHVlIiwiVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nIiwiVGVsZW1ldHJ5RGVmYXVsdCIsIkxvZ2dpbmdMZXZlbE1hcHBpbmciLCJMb2dnZXJEZWZhdWx0cyIsIkdhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyIiwiRXJyb3IiLCJmb3JjZUdhcmJhZ2VDb2xsZWN0aW9uIiwiRmVhdHVyZUVuYWJsZW1lbnQiLCJmb3JjZUNocm9tZUdhcmJhZ2VDb2xsZWN0aW9uIiwicXVldWVNaWNyb3Rhc2siLCJvdmVybG9hZE1lbW9yeVRvSW52b2tlR2FyYmFnZUNvbGxlY3Rpb24iLCJzZXRUaW1lb3V0IiwiaW1nIiwiY3JlYXRlRWxlbWVudCIsInNyYyIsIlVSTCIsImNyZWF0ZU9iamVjdFVSTCIsIkJsb2IiLCJBcnJheUJ1ZmZlciIsIm9uZXJyb3IiLCJyZXZva2VPYmplY3RVUkwiLCJOZXR3b3JrTW9uaXRvciIsInVuZGVmaW5lZCIsImlzU3VwcG9ydGVkIiwic2V0dXBOZXR3b3JrQ2hhbmdlTGlzdGVuZXJzIiwidXBkYXRlU3RhdGlzdGljcyIsIl9pc1N1cHBvcnRlZCIsIl9ydHQiLCJfZWZmZWN0aXZlVHlwZSIsIl9kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSIsImdldERvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5IiwiZG93bmxpbmsiLCJkb3dubGlua01heCIsImdldEVmZmVjdGl2ZVR5cGUiLCJlZmZlY3RpdmVUeXBlIiwidHlwZSIsImdldFJvdW5kVHJpcFRpbWUiLCJydHQiLCJsaXN0ZW5lciIsIlN0cmVhbVNldHVwTGlzdGVuZXIiLCJwYWdlTG9hZFRpbWUiLCJMb2dnZXJGYWN0b3J5IiwiU0RLIiwiX3N0YXJ0VGltZSIsIl9wYWdlTG9hZFRpbWUiLCJzdWNjZXNzIiwic3RyZWFtSWQiLCJyZWNvcmRTdHJlYW1NZXRyaWMiLCJNZXRyaWNzVHlwZSIsImZhaWwiLCJtZXRyaWNUeXBlIiwiX21ldHJpY1N1Ym1pdHRlZCIsInNldHVwVGltZSIsIm1ldHJpY05hbWUiLCJNZXRyaWNUeXBlIiwiZ2V0TmFtZSIsIm1ldHJpY3NTZXJ2aWNlIiwicHVzaCIsInJ1bnRpbWUiLCJ1aW50NjQiLCJfbG9nZ2VyIiwiaW5mbyIsIkR1cmF0aW9ucyIsInRvSXNvU3RyaW5nIiwiZWRnZUF1dGhUb2tlblByZWZpeCIsIkVkZ2VBdXRoUGFyc2VyIiwicGFyc2VUb2tlbiIsInRva2VuIiwiaXNFbmNvZGVkRWRnZVRva2VuVmFsaWQiLCJlcnJvciIsIkVkZ2VUb2tlbiIsImRlY29kZWRUb2tlbiIsImF0b2IiLCJzdWJzdHIiLCJsZW5ndGgiLCJlZGdlVG9rZW4iLCJKU09OIiwicGFyc2UiLCJlIiwic3RhcnRzV2l0aCIsIl9lZGdlVG9rZW4kdG9rZW4iLCJfZWRnZVRva2VuJHRva2VuMiIsIl9hcHBsaWNhdGlvbklkIiwiYXBwbGljYXRpb25JZCIsIl90b2tlbiIsInVyaSIsImNhcGFiaWxpdGllcyIsIkJ1aWxkRmVhdHVyZXMiLCJfc2VuZExvY2FsQ2FuZGlkYXRlcyIsIl9zZW5kTG9ncyIsIl9zZW5kTWV0cmljcyIsIl9sb2dUb0NvbnNvbGUiLCJhcHBseUZlYXR1cmVzIiwiZmVhdHVyZXMiLCJfX0ZFQVRVUkVTX18iLCJzZW5kTG9jYWxDYW5kaWRhdGVzIiwic2VuZExvZ3MiLCJzZW5kTWV0cmljcyIsImxvZ1RvQ29uc29sZSIsIk1lZGlhU3RyZWFtVHJhY2tQcm9jZXNzb3IiLCJNZWRpYVN0cmVhbVRyYWNrR2VuZXJhdG9yIiwiX2RvY3VtZW50IiwiUGFyYW1ldGVycyIsIl9kaXNjb3ZlcnlQYXJhbWV0ZXJzIiwiYXBwbHlQYXJhbWV0ZXJzIiwicGFyYW1ldGVycyIsIl9fUEFSQU1FVEVSU19fIiwiZGlzY292ZXJ5IiwiaW50ZW50aW9ucyIsImRpc3Bvc2FibGUiLCJfZGlzcG9zZWQiLCJfZGlzcG9zYWJsZSIsIl9saXN0IiwiZm9yRWFjaCIsInRvU3RyaW5nIiwiU3RyaW5ncyIsInJhbmRvbSIsInJhbmRvbTEzQ2hhcmFjdGVycyIsIk1hdGgiLCJsb29wcyIsImNlaWwiLCJBcnJheSIsImZpbGwiLCJyZWR1Y2UiLCJzdHJpbmciLCJmdW5jIiwiYXNzZXJ0VW5yZWFjaGFibGUiLCJ4IiwiQXBwZW5kZXJzIiwiX2FwcGVuZGVycyIsImFwcGVuZGVyIiwicmVtb3ZlIiwiaXRlbXMiLCJpdGVtIiwiQ29uc29sZUFwcGVuZGVyIiwidGhyZXNob2xkIiwiX3RocmVzaG9sZCIsImxvZyIsImxvZ0xldmVsIiwibWVzc2FnZSIsImNhdGVnb3J5IiwiZGF0ZSIsImZ1bGxNZXNzYWdlIiwidG9JU09TdHJpbmciLCJMb2dnaW5nTGV2ZWwiLCJjb25zb2xlIiwiTG9nZ2VyIiwiYXBwZW5kZXJzIiwiX2NhdGVnb3J5IiwidHJhY2UiLCJUcmFjZSIsIl9sZW4iLCJhcmd1bWVudHMiLCJhcmdzIiwiX2tleSIsImRlYnVnIiwiRGVidWciLCJfbGVuMiIsIl9rZXkyIiwiSW5mbyIsIl9sZW4zIiwiX2tleTMiLCJ3YXJuIiwiV2FybiIsIl9sZW40IiwiX2tleTQiLCJfbGVuNSIsIl9rZXk1IiwiZmF0YWwiLCJGYXRhbCIsIl9sZW42IiwiX2tleTYiLCJsZXZlbCIsInJlcGxhY2VQbGFjZWhvbGRlcnMiLCJyZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nIiwiaW5kZXgiLCJyZXBsYWNlQXJndW1lbnQiLCJzcGxpY2UiLCJzdHJpbmdpZnkiLCJhY2N1bXVsYXRvciIsImN1cnJlbnRWYWx1ZSIsImFycmF5Iiwic3RhY2siLCJhcmciLCJjYWNoZSIsIk9iamVjdCIsImFyZ3VtZW50IiwiZGF0YSIsInRvU3RyaW5nU3RyIiwiX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24iLCJnZXRMb2dnZXIiLCJsb2dnZXIiLCJfbG9nZ2VycyIsImFwcGx5TG9nZ2VyQ29uZmlnRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJhcHBseUxvZ2dpbmdMZXZlbCIsImFwcGx5QXBwZW5kZXJMb2dnaW5nTGV2ZWwiLCJhcHBseUNvbnNvbGVMb2dnZXIiLCJiaW5kIiwiYXBwbHlUZWxlbWV0cnlMb2dnZXIiLCJwYXJhbWV0ZXJWYWx1ZSIsIl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIiwic2V0VGhyZXNob2xkIiwiYXBwbHlBcHBlbmRlciIsIlRlbGVtZXRyeUFwcGVuZGVyIiwiQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciIsIkxvZ2dpbmdUaHJlc2hvbGQiLCJUZWxlbWV0cnlDb25maWd1cmF0aW9uIiwiY29udmVydExvZ2dpbmdMZXZlbFRvTG9nZ2luZ0xldmVsVHlwZSIsImxvZ2dpbmdMZXZlbCIsImNvbnZlcnRMb2dnaW5nTGV2ZWxUeXBlVG9Mb2dnaW5nTGV2ZWwiLCJsb2dnaW5nTGV2ZWxUeXBlIiwibWV0cmljcyIsIl9tZXRyaWNzIiwiZ2V0VGVsZW1ldHJ5TGV2ZWwiLCJUZWxlbWV0cnlMZXZlbCIsIk1ldHJpY3NDb25maWd1cmF0aW9uIiwiX3VybCIsInNldCIsInVybCIsIm1ldHJpY3NVcmwiLCJwYXRobmFtZSIsIl9lbnZpcm9ubWVudCIsImVudmlyb25tZW50IiwiX3RlbmFuY3kiLCJ0ZW5hbmN5IiwiX3Nlc3Npb25JZCIsInNlc3Npb25JZCIsIk1ldHJpY3NGYWN0b3J5IiwiZ2V0TWV0cmljc1NlcnZpY2UiLCJtZXRyaWNzU2VydmljZXMiLCJfbWV0cmljc1NlcnZpY2VzIiwibWV0cmljc0NvbmZpZ3VyYXRpb24iLCJUZWxlbWV0cnlVcmwiLCJFbnZpcm9ubWVudCIsIk1ldHJpY3NTZXJ2aWNlIiwic2V0VGVsZW1ldHJ5TGV2ZWwiLCJ0ZWxlbWV0cnlMZXZlbCIsInZhbHVlcyIsInJlcXVlc3RTaXplTGltaXQiLCJsb2NhdGlvbiIsImhvc3RuYW1lIiwiX21ldHJpY3NDb25maWd1cmF0aW9uIiwibWV0cmljIiwicHJldmlvdXNWYWx1ZSIsInJlc291cmNlIiwia2luZCIsIm1ldHJpY1JlY29yZCIsInRpbWVzdGFtcCIsImZ1bGxRdWFsaWZpZWROYW1lIiwiX2RvbWFpbiIsIlZlcnNpb25NYW5hZ2VyIiwiaWdub3JlZCIsInNlbmRNZXRyaWNzSWZBYmxlIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwiX2NhbGxlZSIsIm1ldHJpY3NNZXNzYWdlcyIsImZvcm1EYXRhIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwiRm9ybURhdGEiLCJhcHBlbmQiLCJyZWNvcmRzIiwiZmV0Y2giLCJtZXRob2QiLCJib2R5IiwiYWJydXB0Iiwic2VudCIsInN0b3AiLCJfeCIsImFwcGx5IiwiX3NlbmRNZXRyaWNzSWZBYmxlIiwiX2NhbGxlZTIiLCJfY2FsbGVlMiQiLCJfY29udGV4dDIiLCJfaXNTZW5kaW5nIiwic2xpY2UiLCJ0aGVuIiwicmVzcG9uc2UiLCJjb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUb1RlbGVtZXRyeUxldmVsVHlwZSIsImNvbnZlcnRUZWxlbWV0cnlMZXZlbFR5cGVUb1RlbGVtZXRyeUxldmVsIiwidGVsZW1ldHJ5TGV2ZWxUeXBlIiwiUGVlckNvbm5lY3Rpb25TZXJ2aWNlIiwiX3BlZXJDb25uZWN0aW9uRmFjdG9yeSIsImluaXRpYXRlSW5pdGlhbFByZWNhY2hpbmciLCJwcmVjYWNoZUNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIiLCJfcHJlY2FjaGVDcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyIiwiX2NhY2hlZCIsImRpcmVjdGlvbiIsInBlZXJDb25uZWN0aW9uIiwiY3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlciIsIl9jcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyIiwiX2NhbGxlZTMiLCJfYXJnczMiLCJfY2FsbGVlMyQiLCJfY29udGV4dDMiLCJjcmVhdGVQZWVyQ29ubmVjdGlvbiIsIl9yZWYiLCJzdXBwb3J0c0FkZFRyYW5zY2VpdmVyIiwidmlkZW9UcmFuc2NlaXZlciIsImF1ZGlvVHJhbnNjZWl2ZXIiLCJvcHRpb25zIiwiYWRkVHJhbnNjZWl2ZXIiLCJ0MCIsInQxIiwidDIiLCJjcmVhdGVPZmZlciIsInQzIiwibG9jYWxPZmZlciIsIm9mZmVyVG9SZWNlaXZlQXVkaW8iLCJvZmZlclRvUmVjZWl2ZVZpZGVvIiwidDQiLCJ0NSIsIlZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkiLCJSdGNDb25maWd1cmF0aW9uTWFuYWdlciIsInRydW5jYXRlSWNlU2VydmVycyIsImNvbmZpZ3VyYXRpb24iLCJpY2VTZXJ2ZXJzIiwiaSIsInVybHMiLCJ1c2VybmFtZSIsImNyZWRlbnRpYWwiLCJ1cGRhdGVTdGF0aXN0aWNUaW1lb3V0IiwiUnRjQ29ubmVjdGlvbk1vbml0b3IiLCJtZWRpYVN0cmVhbSIsImVzdGltYXRlZFJvdW5kVHJpcFRpbWUiLCJfcGVlckNvbm5lY3Rpb24iLCJfZXN0aW1hdGVkUm91bmRUcmlwVGltZSIsIl90cmFja3NUb01vbml0b3IiLCJnZXRUcmFja3MiLCJtYXAiLCJ0cmFjayIsInBhcnNlZFNEUCIsIlNkcFBhcnNlciIsImN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbiIsInNkcCIsIl9lc3RpbWF0ZWRBdWRpb0NvZGVjIiwiYXVkaW9Db2RlYyIsIl9lc3RpbWF0ZWRWaWRlb0NvZGVjIiwidmlkZW9Db2RlYyIsInVwZGF0ZVN0YXRpc3RpYyIsIl9ydGNTdGF0aXN0aWMiLCJfaXNNb25pdG9yUnVubmluZyIsIl91cGRhdGVUaW1lb3V0IiwiY2xlYXJUaW1lb3V0IiwiX3VwZGF0ZVN0YXRpc3RpYyIsIl9pZ25vcmVkIiwiZ2V0S2luZEZvclNhZmFyaTExIiwidXBkYXRlU3RhdGlzdGljTGVnYWN5IiwiaWQiLCJnZXRTdGF0cyIsInN0YXRzIiwicnRjU3RhdGlzdGljcyIsInJvdW5kVHJpcFRpbWUiLCJsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAiLCJyZXBvcnQiLCJjdXJyZW50Um91bmRUcmlwVGltZSIsIm1lZGlhVHlwZSIsImNvZGVjIiwiY29kZWNJZCIsIm1pbWVUeXBlIiwiX3RoaXMkX3J0Y1N0YXRpc3RpYyR2IiwiX3RoaXMkX3J0Y1N0YXRpc3RpYyR2MiIsIl90aGlzJF9ydGNTdGF0aXN0aWMkdjMiLCJfdGhpcyRfcnRjU3RhdGlzdGljJHY0IiwiX3RoaXMkX3J0Y1N0YXRpc3RpYyR2NSIsImJ5dGVzIiwiYnl0ZXNSZWNlaXZlZCIsInByZXZpb3VzQnl0ZXNSZWNlaXZlZCIsImJ5dGVzRGVsdGEiLCJ0aW1lRGVsdGEiLCJiaXRyYXRlIiwiZmxvb3IiLCJzc3JjIiwicGFja2V0c0xvc3QiLCJwYWNrZXRzUmVjZWl2ZWQiLCJnZXRDb2RlY0J5VHlwZSIsInZpZGVvIiwiZnJhbWVzRGVjb2RlZCIsImZwcyIsInJvdW5kIiwiX3VwZGF0ZVN0YXRpc3RpY0xlZ2FjeSIsImdldFN0YXRzTGVnYWN5IiwicmVzdWx0IiwibmFtZXMiLCJzdGF0IiwiX3NkcCIsInNkcFNwbGl0QnlMaW5lcyIsInNkcFNwbGl0QnlUcmFja3MiLCJfYXVkaW9Db2RlYyIsImFwcGx5Q29kZWMiLCJfdmlkZW9Db2RlYyIsIl9pc0F1ZGlvVHJhY2tFbmFibGVkIiwiaXNUcmFja0J5VHlwZUVuYWJsZWQiLCJfaXNWaWRlb1RyYWNrRW5hYmxlZCIsInNkcFNlY3Rpb25Gb3JUeXBlIiwiZmluZCIsInNkcFRyYWNrIiwidXNlZENvZGVjTGluZSIsInNkcExpbmUiLCJ1c2VkQ29kZWMiLCJjb2RlY05hbWUiLCJWYW5pbGxhUGVlckNvbm5lY3Rpb24iLCJ3ZWJraXRSVENQZWVyQ29ubmVjdGlvbiIsIlJUQ1BlZXJDb25uZWN0aW9uIiwiY3VycmVudExvY2FsRGVzY3JpcHRpb24iLCJjb25uZWN0aW9uU3RhdGUiLCJpY2VDb25uZWN0aW9uU3RhdGUiLCJnZXRDb25maWd1cmF0aW9uIiwic2V0Q29uZmlndXJhdGlvbiIsIl9jcmVhdGVPZmZlciIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiX2NyZWF0ZUFuc3dlciIsImNyZWF0ZUFuc3dlciIsIl94MiIsIl9zZXRMb2NhbERlc2NyaXB0aW9uIiwiZGVzY3JpcHRpb24iLCJzZXRMb2NhbERlc2NyaXB0aW9uIiwiUlRDU2Vzc2lvbkRlc2NyaXB0aW9uIiwiX3gzIiwiX3NldFJlbW90ZURlc2NyaXB0aW9uIiwiX2NhbGxlZTQiLCJfZGVzY3JpcHRpb24kc2RwIiwiaGFzQ3J5cHRvIiwiX2NhbGxlZTQkIiwiX2NvbnRleHQ0Iiwic2V0UmVtb3RlRGVzY3JpcHRpb24iLCJfeDQiLCJnZXRTZW5kZXJzIiwic2VsZWN0b3IiLCJfdGhpczMiLCJhZGRTdHJlYW0iLCJfdGhpczQiLCJhZGRUcmFjayIsIm9udHJhY2siLCJoYW5kbGVyIiwib25pY2VjYW5kaWRhdGUiLCJvbmNvbm5lY3Rpb25zdGF0ZWNoYW5nZSIsIm9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlIiwiY2xvc2UiLCJfY3JlYXRlUGVlckNvbm5lY3Rpb24iLCJzdWJqZWN0IiwiX3N1YmplY3QiLCJzdWJzY3JpYmUiLCJEaXNwb3NhYmxlTGlzdGVuZXIiLCJfRGlzcG9zYWJsZSIsIl9pbmhlcml0cyIsIl9zdXBlciIsIl9jcmVhdGVTdXBlciIsImxpc3RlbmVycyIsImlkeCIsIl9saXN0ZW5lcnMiLCJfdmFsdWUiLCJjaGFuZ2VkIiwiY29tcGFyYWJsZSIsImVxdWFscyIsImdldEVudmlyb25tZW50RnJvbVVybCIsImJhc2VVUkwiLCJvcmlnaW4iLCJfY2xpZW50U2Vzc2lvbklkIiwiX2xvYWRlZFRpbWVzdGFtcCIsIl9yZWFkT25seUluaXRpYWxpemVkIiwiX3JlYWRPbmx5RGlzY292ZXJ5VXJpIiwiX3JlYWRPbmx5UGVlckNvbm5lY3Rpb25GYWN0b3J5IiwiX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZSIsIl9hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24iLCJfYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSIsIl9hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSIsIl9mb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0IiwiX3NraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlcyIsIl93ZWJQbGF5ZXJMb2FkZXIiLCJfc2hha2FQbGF5ZXJMb2FkZXIiLCJfaGxzSnNMb2FkZXIiLCJfbWV0cmljc1NlcnZpY2UiLCJfYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IiLCJfdGVsZW1ldHJ5VXJsIiwiX21heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMiLCJyZXRyaWVzQW1vdW50IiwiX3RlbGVtZXRyeUxldmVsIiwiYXBwbHlUZWxlbWV0cnlDb25maWd1cmF0aW9uIiwidGVsZW1ldHJ5Q29uZmlndXJhdGlvbiIsImNsaWVudFNlc3Npb25JZCIsImlnbm9yZWRFbnZpcm9ubWVudCIsImlnbm9yZWREaXNjb3ZlcnlVcmkiLCJ0ZWxlbWV0cnlVcmwiLCJ0ZWxlbWV0cnlBcHBlbmRlciIsImlnbm9yZWRUZW5hbmN5IiwiYXBwbHlNZXRyaWNzQ29uZmlndXJhdGlvbiIsIkRpc2NvdmVyeVVyaSIsImlnbm9yZWRUZWxlbWV0cnlMZXZlbCIsImFwcGx5QXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJhcHBseUF1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbkZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uIiwiYXBwbHlGb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0RnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJhcHBseVNraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlc0Zyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uIiwiYXBwbHlEaXNjb3ZlcnlVcmlEZWZhdWx0RnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJkaXNjb3ZlcnlVcmkiLCJnZXRUZWxlbWV0cnlVcmwiLCJjaGFubmVsVG9rZW4iLCJ1cmlWYWx1ZSIsImJhc2VVUklWYWx1ZSIsImluaXQiLCJfaW5pdGlhbGl6ZWQiLCJwZWVyQ29ubmVjdGlvbkZhY3RvcnkiLCJjb25zb2xlTG9nZ2luZ0xldmVsIiwiY29uc29sZUFwcGVuZGVyIiwiYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSIsImF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlIiwid2ViUGxheWVyTG9hZGVyIiwic2hha2FQbGF5ZXJMb2FkZXIiLCJobHNKc0xvYWRlciIsInNlZ21lbnRzIiwicHJvdG9jb2wiLCJ1bnNoaWZ0IiwiZW5kc1dpdGgiLCJqb2luIiwiQml0cmF0ZVN0YXRlIiwiQml0cmF0ZU1vZGUiLCJkZWZhdWx0U3RyZWFtVGVybWluYXRpb25SZWFzb24iLCJmYWlsdXJlQ291bnRDbGVhblVwSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyIsInN0YW5kYnlQb2xsaW5nSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyIsIkNoYW5uZWwiLCJ2aWRlb0VsZW1lbnQiLCJjaGFubmVsQ29udGV4dE9wdGlvbnMiLCJ0YXJnZXRMYWciLCJ2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrIiwiZW5jb2RlZFZpZGVvU3RyZWFtU2luayIsImVuY29kZWRBdWRpb1N0cmVhbVNpbmsiLCJoYXNJbnNlcnRhYmxlU3RyZWFtcyIsIl90b2tlbkNvbnRleHQiLCJUb2tlbkNvbnRleHQiLCJfY2hhbm5lbENvbnRleHQiLCJDaGFubmVsQ29udGV4dCIsIl9wZWVyQ29ubmVjdGlvbkNvbnRleHQiLCJQZWVyQ29ubmVjdGlvbkNvbnRleHQiLCJfc3RhdGVDb250ZXh0IiwiU3RhdGVDb250ZXh0IiwiX2V4cG9uZW50aWFsQmFja29mZiIsIkV4cG9uZW50aWFsQmFja29mZiIsIl9jaGFubmVsU3RhcnRUaW1lIiwiX3JlYWRPbmx5VmlkZW9FbGVtZW50IiwiX3JlYWRPbmx5VG9rZW4iLCJfcmVhZE9ubHlQZWVyQ29ubmVjdGlvbiIsIl9yZWFkT25seVN0YXRlIiwic3RhdGUiLCJfcmVhZE9ubHlBdXRvTXV0ZWQiLCJhdXRvTXV0ZWQiLCJfcmVhZE9ubHlBdXRvUGF1c2VkIiwiYXV0b1BhdXNlZCIsIl9yZWFkT25seVRva2VuRXhwaXJpbmciLCJ0b2tlbkV4cGlyaW5nIiwiX3JlYWRPbmx5QXV0aG9yaXplZCIsImF1dGhvcml6ZWQiLCJfcmVhZE9ubHlPbmxpbmUiLCJvbmxpbmUiLCJfcmVhZE9ubHlMb2FkaW5nIiwibG9hZGluZyIsIl9yZWFkT25seVBsYXlpbmciLCJwbGF5aW5nIiwiX3JlYWRPbmx5U3RhbmRieSIsInN0YW5kYnkiLCJfcmVhZE9ubHlTdG9wcGVkIiwic3RvcHBlZCIsIl9yZWFkT25seVRhcmdldExhZyIsIl9yZWFkT25seUxhZyIsImxhZyIsIl9yZWFkT25seUJpdHJhdGVMaW1pdCIsImJpdHJhdGVMaW1pdCIsIl9yZWFkT25seVJlc29sdXRpb24iLCJyZXNvbHV0aW9uIiwiX3JlYWRPbmx5RmFpbHVyZUNvdW50IiwiZmFpbHVyZUNvdW50IiwiX3JlYWRPbmx5RW5kUG9pbnQiLCJlbmRQb2ludCIsIl9yZWFkT25seVN0cmVhbSIsInN0cmVhbSIsIl9yZWFkT25seVJ0Y1N0YXRpc3RpY3MiLCJfcmVhZE9ubHlNZWRpYVN0cmVhbSIsIl9zZXNzaW9uVGVsZW1ldHJ5IiwiU2Vzc2lvblRlbGVtZXRyeSIsImNoYW5uZWxEaXNwb3NhYmxlcyIsIl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIiLCJoYW5kbGVWaWRlb01ldGFEYXRhQ2hhbmdlZCIsInJlbmRlcmVyRGlzcG9zYWJsZXMiLCJ2aWRlb1RlbGVtZXRyeSIsImRhdGFzZXQiLCJWaWRlb1RlbGVtZXRyeSIsInNldHVwTGlzdGVuZXJGb3JUaW1lVG9GaXJzdFRpbWUiLCJzZXR1cExpc3RlbmVyRm9yUmVidWZmZXJpbmciLCJDaGFubmVsU3RhdGUiLCJyZXN0YXJ0QWZ0ZXJTdG9wIiwiY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0Iiwib25WaWRlb1Jlc29sdXRpb25DaGFuZ2VzIiwiZWxhcHNlZEluTWlsbGlzZWNvbmRzIiwiY2hhbm5lbEluaXRpYWxpemF0aW9uIiwiZ2V0VGltZSIsImxpbWl0Qml0cmF0ZSIsImRlc3Ryb3lTdHJlYW1PblVubW91bnQiLCJzdGFydCIsInBhdXNlIiwic3JjT2JqZWN0Iiwid2lkdGgiLCJ2aWRlb1dpZHRoIiwiaGVpZ2h0IiwidmlkZW9IZWlnaHQiLCJEaW1lbnNpb24iLCJkaXNwb3NhYmxlcyIsInNldEJpdHJhdGVMaW1pdCIsImNsZWFyQml0cmF0ZUxpbWl0IiwiYml0cmF0ZUluQml0c1BlclNlY29uZCIsInN0YXR1cyIsInVwZGF0ZVRhcmdldExhZyIsIl9zdG9wIiwicmVhc29uIiwiaXNTdGFydGluZyIsInByb2Nlc3NTdG9wIiwiY2xlYW5VcFJlc291cmNlcyIsIl9yZXN1bWUiLCJwbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudCIsInJlc3VtZSIsIm11dGUiLCJtdXRlZCIsInVubXV0ZSIsIl9kaXNwb3NlIiwiaXNEaXNwb3NlZCIsImdldFVyaSIsIl9zdGFydCIsInByb2Nlc3NTdGFydCIsIl9wcm9jZXNzU3RhcnQiLCJfY2FsbGVlNSIsIl90aGlzNSIsImxpc3Rlbk9uU3RyZWFtU2V0dXAiLCJoYW5kbGVTdHJlYW1GYWlsdXJlQ2FsbGJhY2siLCJzdHJlYW1QbGF5ZXIiLCJfY2FsbGVlNSQiLCJfY29udGV4dDUiLCJEaXNjb3ZlcnkiLCJoYW5kbGVTdHJlYW1GYWlsdXJlIiwiU3RyZWFtRmFjdG9yeSIsInRpbWVvdXRJZCIsImdldFJldHJ5SW50ZXJ2YWwiLCJfcmVzdGFydEFmdGVyU3RvcCIsIl9jYWxsZWU2IiwiX2NhbGxlZTYkIiwiX2NvbnRleHQ2IiwiX3BsYXkiLCJfY2FsbGVlNyIsIl9jYWxsZWU3JCIsIl9jb250ZXh0NyIsInBsYXkiLCJnZXRFeHBvbmVudGlhbEJhY2tvZmZJbnRlcnZhbEJ5RmFpbHVyZUNvdW50IiwiX2hhbmRsZVN0cmVhbUZhaWx1cmUiLCJfY2FsbGVlOCIsIl9jYWxsZWU4JCIsIl9jb250ZXh0OCIsIl90aGlzNiIsImRlc3Ryb3lTdHJlYW0iLCJfcmVmMiIsInBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMiLCJfcGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQiLCJfY2FsbGVlOSIsIl90aGlzNyIsInBsYXlQcm9taXNlIiwiX2NhbGxlZTkkIiwiX2NvbnRleHQ5IiwiaGFzQXVkaW9UcmFjayIsImZpbHRlciIsImF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlT2ZmIiwiQ2hhbm5lbHMiLCJjcmVhdGVDaGFubmVsIiwiY2hhbm5lbE9wdGlvbnMiLCJkZWZhdWx0VGFyZ2V0TGFnIiwiX29wdGlvbnMkdGFyZ2V0TGFnIiwiYXBwbHlTdGF0dXMiLCJhcHBseVNlc3Npb25BbmRTdHJlYW1Qcm9wZXJ0aWVzVG9WaWRlb0VsZW1lbnQiLCJtYXBTdWJzY3JpYmVTdGF0dXNUb0NoYW5uZWxTdGF0dXMiLCJkZWZhdWx0RGlzY292ZXJ5VXJpIiwiQml0cmF0ZU1vZGVNYXBwaW5nIiwiY29udmVydEJpdHJhdGVNb2RlVG9CaXRyYXRlTW9kZVR5cGUiLCJiaXRyYXRlTW9kZSIsIkJpdHJhdGVTdGF0ZU1hcHBpbmciLCJjb252ZXJ0Qml0cmF0ZVN0YXRlVG9CaXRyYXRlU3RhdGVUeXBlIiwiYml0cmF0ZVN0YXRlIiwiZGlzY292ZXJ5Q2FjaGVJbnRlcnZhbCIsIl9wcmVjYWNoZUNsb3Nlc3RFbmRQb2ludERpc2NvdmVyeSIsImRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50V2l0aENhY2hpbmciLCJwcmVjYWNoZUNsb3Nlc3RFbmRQb2ludERpc2NvdmVyeSIsIl9kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nIiwiZGlzY292ZXJ5U2VydmljZSIsImNhY2hlZFZhbHVlIiwiX2NhY2hlIiwiRGlzY292ZXJ5U2VydmljZSIsImRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50IiwiY2xlYXJDYWNoZWRDbG9zZXN0RW5kcG9pbnQiLCJkZWZhdWx0VGltZW91dCIsIl91cmkiLCJfZGlzY292ZXJOZWFyYnlFbmRQb2ludHMiLCJ0aW1lb3V0IiwiYXNTdHJpbmciLCJlbmRQb2ludHMiLCJyYWNlIiwiXyIsIm9rIiwidGV4dCIsIkVuZFBvaW50IiwiZGlzY292ZXJOZWFyYnlFbmRQb2ludHMiLCJfZGlzY292ZXJDbG9zZXN0RW5kUG9pbnQiLCJmYWlsZWRSZXF1ZXN0cyIsInByb3BhZ2F0ZUZhaWx1cmVJZkFsbFJlcXVlc3RzRmFpbGVkIiwiX2FyZ3MyIiwicGluZyIsInRpbWUiLCJfZGlzY292ZXJ5VXJpIiwiYnVpbGREaXNjb3ZlcnlVcmwiLCJzZGtWZXJzaW9uIiwic2VhcmNoIiwiVVJMU2VhcmNoUGFyYW1zIiwiYXBpVmVyc2lvbiIsIl90aW1lb3V0IiwiX3JvdW5kVHJpcFRpbWUiLCJfcGluZyIsImZpbmlzaGVkIiwiYnVpbGRQaW5nVXJsIiwiX3N1YnNjcmliZSIsImxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uIiwiY2xpZW50VmVyc2lvbiIsImJvZHlXaXRoT2ZmZXIiLCJib2R5V2l0aG91dE9mZmVyIiwiaHR0cFJlc3BvbnNlIiwic3Vic2NyaWJlUmVzcG9uc2UiLCJidWlsZFVybCIsImJlYXJlclRva2VuIiwiaHR0cFJvdW5kVHJpcFRpbWUiLCJzZXNzaW9uRGVzY3JpcHRpb24iLCJjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvbiIsImNyZWF0ZU9mZmVyRGVzY3JpcHRpb24iLCJtYXBIdHRwU3RhdHVzVG9TdWJzY3JpYmVTdGF0dXMiLCJjb252ZXJ0SHR0cFJlc3BvbnNlVG9TdWJzY3JpYmVSZXNwb25zZSIsIl9wdWJsaXNoIiwibWFwSHR0cFN0YXR1c1RvUHVibGlzaFN0YXR1cyIsImNvbnZlcnRIdHRwUmVzcG9uc2VUb1B1Ymxpc2hSZXNwb25zZSIsInB1Ymxpc2giLCJfeDUiLCJfeDYiLCJfeDciLCJzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlIiwic2hhcmVkU2VjcmV0IiwibWFwSHR0cFN0YXR1c1RvU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMiLCJjb252ZXJ0SHR0cFJlc3BvbnNlVG9TZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlIiwiX3g4IiwiX3g5IiwiX2xpbWl0Qml0cmF0ZSIsIm1hcEh0dHBTdGF0dXNUb1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzIiwiX3gxMCIsIl94MTEiLCJfeDEyIiwiX3gxMyIsIl94MTQiLCJfYWRkSWNlQ2FuZGlkYXRlcyIsImNhbmRpZGF0ZXMiLCJkaXNjb3ZlcnlDb21wbGV0ZWQiLCJhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UiLCJfYXJnczYiLCJtYXBIdHRwU3RhdHVzVG9BZGRJY2VDYW5kaWRhdGVzU3RhdHVzIiwiY29udmVydEh0dHBSZXNwb25zZVRvQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlIiwiYWRkSWNlQ2FuZGlkYXRlcyIsIl94MTUiLCJfeDE2IiwiX3gxNyIsIl9kZXN0cm95U3RyZWFtIiwiZGVzdHJveVN0cmVhbVJlc3BvbnNlIiwibWFwSHR0cFN0YXR1c1RvU2V0RGVzdHJveVN0cmVhbVN0YXR1cyIsImNvbnZlcnRIdHRwUmVzcG9uc2VUb0Rlc3Ryb3lTdHJlYW1SZXNwb25zZSIsIl94MTgiLCJfeDE5IiwiX2Rlc3Ryb3lTdHJlYW1PblVubW91bnQiLCJzZW5kQmVhY29uIiwiX3gyMCIsIl94MjEiLCJwYXRoIiwicGF0aEFzQXJyYXkiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJfY29udmVydEh0dHBSZXNwb25zZVRvU3Vic2NyaWJlUmVzcG9uc2UiLCJqc29uIiwicnRjQ29uZmlndXJhdGlvbiIsImNvbnZlcnRJUnRjQ29uZmlndXJhdGlvblRvUlRDQ29uZmlndXJhdGlvbiIsImNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UiLCJjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UiLCJfeDIyIiwiX3gyMyIsIl9jb252ZXJ0SHR0cFJlc3BvbnNlVG9QdWJsaXNoUmVzcG9uc2UiLCJfY2FsbGVlMTAiLCJwdWJsaXNoUmVzcG9uc2UiLCJfY2FsbGVlMTAkIiwiX2NvbnRleHQxMCIsIl94MjQiLCJfeDI1IiwiYnVuZGxlUG9saWN5IiwiaWNlQ2FuZGlkYXRlUG9vbFNpemUiLCJpY2VUcmFuc3BvcnRQb2xpY3kiLCJydGNwTXV4UG9saWN5IiwiX2NvbnZlcnRIdHRwUmVzcG9uc2VUb1NldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UiLCJfY2FsbGVlMTEiLCJfY2FsbGVlMTEkIiwiX2NvbnRleHQxMSIsIl94MjYiLCJfY29udmVydEh0dHBSZXNwb25zZVRvQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlIiwiX2NhbGxlZTEyIiwiX2NhbGxlZTEyJCIsIl9jb250ZXh0MTIiLCJfeDI3IiwiX2NvbnZlcnRIdHRwUmVzcG9uc2VUb0Rlc3Ryb3lTdHJlYW1SZXNwb25zZSIsIl9jYWxsZWUxMyIsIl9jYWxsZWUxMyQiLCJfY29udGV4dDEzIiwiX3gyOCIsIkluc2VydGFibGVTdHJlYW1zIiwic2V0dXBNZWRpYVN0cmVhbVRyYWNrVHJhbnNmb3JtIiwidHJhbnNmb3JtIiwidmlkZW9UcmFjayIsImdldFZpZGVvVHJhY2tzIiwidHJhbnNmb3JtZXIiLCJUcmFuc2Zvcm1TdHJlYW0iLCJwcm9jZXNzb3IiLCJnZW5lcmF0b3IiLCJzb3VyY2UiLCJyZWFkYWJsZSIsInNpbmsiLCJ3cml0YWJsZSIsInBpcGVUaHJvdWdoIiwicGlwZVRvIiwidHJhbnNmb3JtZWRTdHJlYW0iLCJNZWRpYVN0cmVhbSIsImdldEF1ZGlvVHJhY2tzIiwiYXVkaW9UcmFjayIsImljZUNhbmRpZGF0ZUFjY3VtdWxhdGlvbkludGVydmFsIiwiZGVmYXVsdFN0cmVhbVNldHVwVGltZW91dCIsIlJlYWxUaW1lU3RyZWFtIiwiY2hhbm5lbENvbnRleHQiLCJwZWVyQ29ubmVjdGlvbkNvbnRleHQiLCJhbGwiLCJfcmVmMyIsIl9zbGljZWRUb0FycmF5IiwiX3JlZjMkIiwic3VwcG9ydHNTZXRDb25maWd1cmF0aW9uIiwic3VwcG9ydHNHZXRDb25maWd1cmF0aW9uIiwiX3JlZjQiLCJhcHBseVJ0Y0NvbmZpZ3VyYXRpb24iLCJzdWJtaXRDYW5kaWRhdGVzVGltZW91dCIsImNhbmNlbERpc2NvdmVyeSIsImNhbmRpZGF0ZSIsIl9yZWY1IiwicmV0cnlDYWxsYmFjayIsIm9uTGluZSIsInJlY29ubmVjdFBlZXJDb25uZWN0aW9uIiwibWVkaWFTdHJlYW1Qcm9taXNlIiwic3RyZWFtcyIsInRyYWNrTGlzdGVuZXIiLCJhbnN3ZXIiLCJfcmVmNiIsIm1hcFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzVG9DaGFubmVsU3RhdHVzIiwicnRjQ29ubmVjdGlvbk1vbml0b3IiLCJydGNTdGF0aXN0aWMiLCJzdGF0aXN0aWNzIiwicnRjVmlkZW9TdGF0aXN0aWMiLCJydGNBdWRpb1N0YXRpc3RpYyIsImF1ZGlvIiwiYXVkaW9UcmFja0ZhaWxlZCIsInZpZGVvVHJhY2tGYWlsZWQiLCJfYXBwbHlSdGNDb25maWd1cmF0aW9uIiwib3B0aW9uYWxQZWVyQ29ubmVjdGlvbiIsIm5ld1J0Y0NvbmZpZ3VyYXRpb24iLCJfb2JqZWN0U3ByZWFkIiwiX3BlZXJDb25uZWN0aW9uJGN1cnJlIiwiaXNDbGllbnRPZmZlckZsb3ciLCJpY2VSZXN0YXJ0Iiwib2ZmZXIiLCJSZWFsVGltZVN0cmVhbUZhY3RvcnkiLCJjcmVhdGUiLCJ0b2tlbkNhcGFiaWxpdGllcyIsIl9fQlVJTERfVkVSU0lPTl9fIiwiX2RlZmF1bHRWZXJzaW9uIiwiX3RlbGVtZXRyeVNlcnZpY2UiLCJUZWxlbWV0cnlTZXJ2aWNlIiwibG9nUmVjb3JkIiwiX2xvZ3MiLCJzZW5kTG9nc0lmQWJsZSIsImxvZ01lc3NhZ2VzIiwiX3NlbmRMb2dzSWZBYmxlIiwibnVtYmVyT2ZMb2dzVG9TZW5kIiwic2l6ZU9mTG9nc1RvU2VuZCIsImdldExvZ1NpemUiLCJzdW0iLCJkdXJhdGlvbiIsIl9kdXJhdGlvbiIsImlzTmVnYXRpdmUiLCJhYnMiLCJvZmZzZXQiLCJtaWxsaXNlY29uZHMiLCJzZWNvbmRzIiwibWludXRlcyIsImhvdXJzIiwicGFydHMiLCJTdHJpbmciLCJwYWRTdGFydCIsInRhcmdldExlbmd0aCIsInBhZFN0cmluZyIsInJlcGVhdCIsImRlZmF1bHRCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiZGVmYXVsdE1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJkZWZhdWx0TWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsImJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJtaW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwibWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsIl9iYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiX21pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJfbWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsImJhY2tvZmZJbnRlcnZhbEluU2Vjb25kcyIsInJhbmRvbWl6YXRpb24iLCJleHBvbmVudGlhbEJhY2tvZmYiLCJwb3ciLCJleHBvbmVudGlhbEJhY2tvZmZXaXRoUmFuZG9taXphdGlvbiIsImV4cG9uZW50aWFsQmFja29mZldpdGhSYW5kb21pemF0aW9uSW5NaWxsaXNlY29uZCIsIm1heCIsIm1pbiIsIm90aGVyIiwiX25ldHdvcmtNb25pdG9yIiwicmVjb3JkRm9yZWdyb3VuZENoYW5nZSIsInJlY29yZE5ldHdvcmtSVFRVcGRhdGUiLCJyZWNvcmROZXR3b3JrVHlwZUNoYW5nZVVwZGF0ZSIsImRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5IiwicmVjb3JkTmV0d29ya0Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5VXBkYXRlIiwidGltZVNpbmNlTGFzdENoYW5nZSIsIm5ld1JUVCIsIm9sZFJ0dCIsIl9sYXN0TmV0d29ya1N0YXRpc3RpY3MiLCJuZXdOZXR3b3JrVHlwZSIsIm9sZE5ldHdvcmtUeXBlIiwibmV3Q2FwYWNpdHkiLCJvbGRDYXBhY2l0eSIsImNoYW5uZWxTdGFydFRpbWUiLCJfc3RyZWFtSWQiLCJfc3RhcnRSZWNvcmRpbmdGaXJzdEZyYW1lIiwiX2xpc3RlblRvRmlyc3RUaW1lIiwiY2FsbFRpbWVUb0ZpcnN0RnJhbWUiLCJfY2xlYXJUaW1lVG9GaXJzdEZyYW1lTGlzdGVuZXIiLCJfbGlzdGVuRm9yU3RhbGwiLCJvblN0YWxsIiwiX2xpc3RlbkZvckNvbnRpbnVhdGlvbiIsImV2ZW50Iiwib25Db250aW51YXRpb24iLCJfY2xlYXJSZWJ1ZmZlcmluZ0xpc3RlbmVyIiwicHVzaFRpbWVUb0ZpcnN0RnJhbWUiLCJwdXNoQ2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSIsIl90aW1lVG9GaXJzdEZyYW1lIiwiZHVyYXRpb25TaW5jZVBhZ2VMb2FkIiwiX2NoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUiLCJfdmlkZW9TdGFsbGVkIiwiYnVmZmVyZWQiLCJidWZmZXJMZW5ndGgiLCJoYXNOb3RQcm9ncmVzc2VkU2luY2VMYXN0UHJvZ3Jlc3NFdmVudCIsImVuZCIsIl9sYXN0UHJvZ3Jlc3MiLCJ0aW1lU2luY2VTdG9wIiwibmV3UmVzb2x1dGlvbiIsIl92aWRlb1Jlc29sdXRpb24iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxPOzs7Ozs7Ozs7Ozs7O0FDVmU7QUFDZjtBQUNBLHdDQUF3QyxTQUFTO0FBQ2pEO0FBQ0EsQzs7Ozs7Ozs7Ozs7Ozs7QUNKZTtBQUNmO0FBQ0EsQzs7Ozs7Ozs7Ozs7Ozs7O0FDRnFEO0FBQ3RDO0FBQ2YsaUNBQWlDLDZEQUFnQjtBQUNqRCxDOzs7Ozs7Ozs7Ozs7OztBQ0hlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDOzs7Ozs7Ozs7Ozs7OztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ2U7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDOzs7Ozs7Ozs7Ozs7OztBQzdCZTtBQUNmO0FBQ0E7QUFDQTtBQUNBLEM7Ozs7Ozs7Ozs7Ozs7OztBQ0orQztBQUMvQztBQUNBLGlCQUFpQixrQkFBa0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsMERBQWE7QUFDL0M7QUFDQTtBQUNlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFH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QUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsaUJBQWlCLGlCQUFpQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0EscURBQXFEO0FBQ3JELE9BQU87QUFDUDtBQUNBLE9BQU87QUFDUCw0RUFBNEU7QUFDNUU7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsNEJBQTRCLHFCQUFxQjtBQUNqRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBLHFDQUFxQywwQkFBMEI7QUFDL0Q7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDZCQUE2QiwwQkFBMEIsZUFBZTtBQUN0RTs7QUFFTztBQUNQO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7VUM1bEJBO1VBQ0E7O1VBRUE7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBOztVQUVBO1VBQ0E7O1VBRUE7VUFDQTtVQUNBOzs7OztXQ3JCQTtXQUNBO1dBQ0E7V0FDQSxjQUFjLDBCQUEwQixFQUFFO1dBQzFDLGNBQWMsZUFBZTtXQUM3QixnQ0FBZ0MsWUFBWTtXQUM1QztXQUNBLEU7Ozs7O1dDUEE7V0FDQTtXQUNBO1dBQ0E7V0FDQSx3Q0FBd0MseUNBQXlDO1dBQ2pGO1dBQ0E7V0FDQSxFOzs7OztXQ1BBLDZDQUE2Qyx3REFBd0QsRTs7Ozs7V0NBckc7V0FDQTtXQUNBO1dBQ0Esc0RBQXNELGtCQUFrQjtXQUN4RTtXQUNBLCtDQUErQyxjQUFjO1dBQzdELEU7Ozs7VUNOQTtVQUNBO1VBQ0E7VUFDQTtVQUNBIiwiZmlsZSI6ImNoYW5uZWxzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW10sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wicGhlbml4XCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcInBoZW5peFwiXSA9IGZhY3RvcnkoKTtcbn0pKHNlbGYsIGZ1bmN0aW9uKCkge1xucmV0dXJuICIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7XG4gIGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIGFycjJbaV0gPSBhcnJbaV07XG4gIHJldHVybiBhcnIyO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjtcbn0iLCJpbXBvcnQgYXJyYXlMaWtlVG9BcnJheSBmcm9tIFwiLi9hcnJheUxpa2VUb0FycmF5LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KGFycik7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gIGlmIChzZWxmID09PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIH1cbiAgcmV0dXJuIHNlbGY7XG59IiwiZnVuY3Rpb24gYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBrZXksIGFyZykge1xuICB0cnkge1xuICAgIHZhciBpbmZvID0gZ2VuW2tleV0oYXJnKTtcbiAgICB2YXIgdmFsdWUgPSBpbmZvLnZhbHVlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJlamVjdChlcnJvcik7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChpbmZvLmRvbmUpIHtcbiAgICByZXNvbHZlKHZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICBQcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4oX25leHQsIF90aHJvdyk7XG4gIH1cbn1cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hc3luY1RvR2VuZXJhdG9yKGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzLFxuICAgICAgYXJncyA9IGFyZ3VtZW50cztcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIGdlbiA9IGZuLmFwcGx5KHNlbGYsIGFyZ3MpO1xuICAgICAgZnVuY3Rpb24gX25leHQodmFsdWUpIHtcbiAgICAgICAgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcIm5leHRcIiwgdmFsdWUpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX3Rocm93KGVycikge1xuICAgICAgICBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwidGhyb3dcIiwgZXJyKTtcbiAgICAgIH1cbiAgICAgIF9uZXh0KHVuZGVmaW5lZCk7XG4gICAgfSk7XG4gIH07XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn0iLCJpbXBvcnQgdG9Qcm9wZXJ0eUtleSBmcm9tIFwiLi90b1Byb3BlcnR5S2V5LmpzXCI7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCB0b1Byb3BlcnR5S2V5KGRlc2NyaXB0b3Iua2V5KSwgZGVzY3JpcHRvcik7XG4gIH1cbn1cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbnN0cnVjdG9yLCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pO1xuICByZXR1cm4gQ29uc3RydWN0b3I7XG59IiwiaW1wb3J0IHRvUHJvcGVydHlLZXkgZnJvbSBcIi4vdG9Qcm9wZXJ0eUtleS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBrZXkgPSB0b1Byb3BlcnR5S2V5KGtleSk7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiBvYmo7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gICAgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTtcbiAgfTtcbiAgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTtcbn0iLCJpbXBvcnQgc2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vc2V0UHJvdG90eXBlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICB9XG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwge1xuICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICB2YWx1ZTogc3ViQ2xhc3MsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH1cbiAgfSk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzdWJDbGFzcywgXCJwcm90b3R5cGVcIiwge1xuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KTtcbiAgaWYgKHN1cGVyQ2xhc3MpIHNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHtcbiAgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgaXRlcltTeW1ib2wuaXRlcmF0b3JdICE9IG51bGwgfHwgaXRlcltcIkBAaXRlcmF0b3JcIl0gIT0gbnVsbCkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkge1xuICB2YXIgX2kgPSBudWxsID09IGFyciA/IG51bGwgOiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgYXJyW1N5bWJvbC5pdGVyYXRvcl0gfHwgYXJyW1wiQEBpdGVyYXRvclwiXTtcbiAgaWYgKG51bGwgIT0gX2kpIHtcbiAgICB2YXIgX3MsXG4gICAgICBfZSxcbiAgICAgIF94LFxuICAgICAgX3IsXG4gICAgICBfYXJyID0gW10sXG4gICAgICBfbiA9ICEwLFxuICAgICAgX2QgPSAhMTtcbiAgICB0cnkge1xuICAgICAgaWYgKF94ID0gKF9pID0gX2kuY2FsbChhcnIpKS5uZXh0LCAwID09PSBpKSB7XG4gICAgICAgIGlmIChPYmplY3QoX2kpICE9PSBfaSkgcmV0dXJuO1xuICAgICAgICBfbiA9ICExO1xuICAgICAgfSBlbHNlIGZvciAoOyAhKF9uID0gKF9zID0gX3guY2FsbChfaSkpLmRvbmUpICYmIChfYXJyLnB1c2goX3MudmFsdWUpLCBfYXJyLmxlbmd0aCAhPT0gaSk7IF9uID0gITApO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgX2QgPSAhMCwgX2UgPSBlcnI7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghX24gJiYgbnVsbCAhPSBfaVtcInJldHVyblwiXSAmJiAoX3IgPSBfaVtcInJldHVyblwiXSgpLCBPYmplY3QoX3IpICE9PSBfcikpIHJldHVybjtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChfZCkgdGhyb3cgX2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBfYXJyO1xuICB9XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xufSIsImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuaW1wb3J0IGFzc2VydFRoaXNJbml0aWFsaXplZCBmcm9tIFwiLi9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHtcbiAgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHtcbiAgICByZXR1cm4gY2FsbDtcbiAgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7XG4gIH1cbiAgcmV0dXJuIGFzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgcmV0dXJuIG87XG4gIH07XG4gIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7XG59IiwiaW1wb3J0IGFycmF5V2l0aEhvbGVzIGZyb20gXCIuL2FycmF5V2l0aEhvbGVzLmpzXCI7XG5pbXBvcnQgaXRlcmFibGVUb0FycmF5TGltaXQgZnJvbSBcIi4vaXRlcmFibGVUb0FycmF5TGltaXQuanNcIjtcbmltcG9ydCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSBmcm9tIFwiLi91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qc1wiO1xuaW1wb3J0IG5vbkl0ZXJhYmxlUmVzdCBmcm9tIFwiLi9ub25JdGVyYWJsZVJlc3QuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkge1xuICByZXR1cm4gYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBpdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgbm9uSXRlcmFibGVSZXN0KCk7XG59IiwiaW1wb3J0IGFycmF5V2l0aG91dEhvbGVzIGZyb20gXCIuL2FycmF5V2l0aG91dEhvbGVzLmpzXCI7XG5pbXBvcnQgaXRlcmFibGVUb0FycmF5IGZyb20gXCIuL2l0ZXJhYmxlVG9BcnJheS5qc1wiO1xuaW1wb3J0IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IGZyb20gXCIuL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzXCI7XG5pbXBvcnQgbm9uSXRlcmFibGVTcHJlYWQgZnJvbSBcIi4vbm9uSXRlcmFibGVTcHJlYWQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHtcbiAgcmV0dXJuIGFycmF5V2l0aG91dEhvbGVzKGFycikgfHwgaXRlcmFibGVUb0FycmF5KGFycikgfHwgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBub25JdGVyYWJsZVNwcmVhZCgpO1xufSIsImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3RvUHJpbWl0aXZlKGlucHV0LCBoaW50KSB7XG4gIGlmIChfdHlwZW9mKGlucHV0KSAhPT0gXCJvYmplY3RcIiB8fCBpbnB1dCA9PT0gbnVsbCkgcmV0dXJuIGlucHV0O1xuICB2YXIgcHJpbSA9IGlucHV0W1N5bWJvbC50b1ByaW1pdGl2ZV07XG4gIGlmIChwcmltICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgcmVzID0gcHJpbS5jYWxsKGlucHV0LCBoaW50IHx8IFwiZGVmYXVsdFwiKTtcbiAgICBpZiAoX3R5cGVvZihyZXMpICE9PSBcIm9iamVjdFwiKSByZXR1cm4gcmVzO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTtcbiAgfVxuICByZXR1cm4gKGhpbnQgPT09IFwic3RyaW5nXCIgPyBTdHJpbmcgOiBOdW1iZXIpKGlucHV0KTtcbn0iLCJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmltcG9ydCB0b1ByaW1pdGl2ZSBmcm9tIFwiLi90b1ByaW1pdGl2ZS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkoYXJnKSB7XG4gIHZhciBrZXkgPSB0b1ByaW1pdGl2ZShhcmcsIFwic3RyaW5nXCIpO1xuICByZXR1cm4gX3R5cGVvZihrZXkpID09PSBcInN5bWJvbFwiID8ga2V5IDogU3RyaW5nKGtleSk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiB0eXBlb2Ygb2JqO1xuICB9IDogZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiBvYmogJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG4gIH0sIF90eXBlb2Yob2JqKTtcbn0iLCJpbXBvcnQgYXJyYXlMaWtlVG9BcnJheSBmcm9tIFwiLi9hcnJheUxpa2VUb0FycmF5LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7XG4gIGlmICghbykgcmV0dXJuO1xuICBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG4gIHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTtcbiAgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTtcbiAgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7XG4gIGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xufSIsInZhciBfdHlwZW9mID0gcmVxdWlyZShcIi4vdHlwZW9mLmpzXCIpW1wiZGVmYXVsdFwiXTtcbmZ1bmN0aW9uIF9yZWdlbmVyYXRvclJ1bnRpbWUoKSB7XG4gIFwidXNlIHN0cmljdFwiOyAvKiEgcmVnZW5lcmF0b3ItcnVudGltZSAtLSBDb3B5cmlnaHQgKGMpIDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4gLS0gbGljZW5zZSAoTUlUKTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2Jsb2IvbWFpbi9MSUNFTlNFICovXG4gIG1vZHVsZS5leHBvcnRzID0gX3JlZ2VuZXJhdG9yUnVudGltZSA9IGZ1bmN0aW9uIF9yZWdlbmVyYXRvclJ1bnRpbWUoKSB7XG4gICAgcmV0dXJuIGV4cG9ydHM7XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cztcbiAgdmFyIGV4cG9ydHMgPSB7fSxcbiAgICBPcCA9IE9iamVjdC5wcm90b3R5cGUsXG4gICAgaGFzT3duID0gT3AuaGFzT3duUHJvcGVydHksXG4gICAgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgfHwgZnVuY3Rpb24gKG9iaiwga2V5LCBkZXNjKSB7XG4gICAgICBvYmpba2V5XSA9IGRlc2MudmFsdWU7XG4gICAgfSxcbiAgICAkU3ltYm9sID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgPyBTeW1ib2wgOiB7fSxcbiAgICBpdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuaXRlcmF0b3IgfHwgXCJAQGl0ZXJhdG9yXCIsXG4gICAgYXN5bmNJdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuYXN5bmNJdGVyYXRvciB8fCBcIkBAYXN5bmNJdGVyYXRvclwiLFxuICAgIHRvU3RyaW5nVGFnU3ltYm9sID0gJFN5bWJvbC50b1N0cmluZ1RhZyB8fCBcIkBAdG9TdHJpbmdUYWdcIjtcbiAgZnVuY3Rpb24gZGVmaW5lKG9iaiwga2V5LCB2YWx1ZSkge1xuICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6ICEwLFxuICAgICAgY29uZmlndXJhYmxlOiAhMCxcbiAgICAgIHdyaXRhYmxlOiAhMFxuICAgIH0pLCBvYmpba2V5XTtcbiAgfVxuICB0cnkge1xuICAgIGRlZmluZSh7fSwgXCJcIik7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGRlZmluZSA9IGZ1bmN0aW9uIGRlZmluZShvYmosIGtleSwgdmFsdWUpIHtcbiAgICAgIHJldHVybiBvYmpba2V5XSA9IHZhbHVlO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCkge1xuICAgIHZhciBwcm90b0dlbmVyYXRvciA9IG91dGVyRm4gJiYgb3V0ZXJGbi5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IgPyBvdXRlckZuIDogR2VuZXJhdG9yLFxuICAgICAgZ2VuZXJhdG9yID0gT2JqZWN0LmNyZWF0ZShwcm90b0dlbmVyYXRvci5wcm90b3R5cGUpLFxuICAgICAgY29udGV4dCA9IG5ldyBDb250ZXh0KHRyeUxvY3NMaXN0IHx8IFtdKTtcbiAgICByZXR1cm4gZGVmaW5lUHJvcGVydHkoZ2VuZXJhdG9yLCBcIl9pbnZva2VcIiwge1xuICAgICAgdmFsdWU6IG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dClcbiAgICB9KSwgZ2VuZXJhdG9yO1xuICB9XG4gIGZ1bmN0aW9uIHRyeUNhdGNoKGZuLCBvYmosIGFyZykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcIm5vcm1hbFwiLFxuICAgICAgICBhcmc6IGZuLmNhbGwob2JqLCBhcmcpXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJ0aHJvd1wiLFxuICAgICAgICBhcmc6IGVyclxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgZXhwb3J0cy53cmFwID0gd3JhcDtcbiAgdmFyIENvbnRpbnVlU2VudGluZWwgPSB7fTtcbiAgZnVuY3Rpb24gR2VuZXJhdG9yKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb24oKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSgpIHt9XG4gIHZhciBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuICBkZWZpbmUoSXRlcmF0b3JQcm90b3R5cGUsIGl0ZXJhdG9yU3ltYm9sLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pO1xuICB2YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YsXG4gICAgTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90byAmJiBnZXRQcm90byhnZXRQcm90byh2YWx1ZXMoW10pKSk7XG4gIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICYmIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICE9PSBPcCAmJiBoYXNPd24uY2FsbChOYXRpdmVJdGVyYXRvclByb3RvdHlwZSwgaXRlcmF0b3JTeW1ib2wpICYmIChJdGVyYXRvclByb3RvdHlwZSA9IE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlKTtcbiAgdmFyIEdwID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUucHJvdG90eXBlID0gR2VuZXJhdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUpO1xuICBmdW5jdGlvbiBkZWZpbmVJdGVyYXRvck1ldGhvZHMocHJvdG90eXBlKSB7XG4gICAgW1wibmV4dFwiLCBcInRocm93XCIsIFwicmV0dXJuXCJdLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZCkge1xuICAgICAgZGVmaW5lKHByb3RvdHlwZSwgbWV0aG9kLCBmdW5jdGlvbiAoYXJnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnZva2UobWV0aG9kLCBhcmcpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgZnVuY3Rpb24gQXN5bmNJdGVyYXRvcihnZW5lcmF0b3IsIFByb21pc2VJbXBsKSB7XG4gICAgZnVuY3Rpb24gaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChnZW5lcmF0b3JbbWV0aG9kXSwgZ2VuZXJhdG9yLCBhcmcpO1xuICAgICAgaWYgKFwidGhyb3dcIiAhPT0gcmVjb3JkLnR5cGUpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlY29yZC5hcmcsXG4gICAgICAgICAgdmFsdWUgPSByZXN1bHQudmFsdWU7XG4gICAgICAgIHJldHVybiB2YWx1ZSAmJiBcIm9iamVjdFwiID09IF90eXBlb2YodmFsdWUpICYmIGhhc093bi5jYWxsKHZhbHVlLCBcIl9fYXdhaXRcIikgPyBQcm9taXNlSW1wbC5yZXNvbHZlKHZhbHVlLl9fYXdhaXQpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaW52b2tlKFwibmV4dFwiLCB2YWx1ZSwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgIGludm9rZShcInRocm93XCIsIGVyciwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfSkgOiBQcm9taXNlSW1wbC5yZXNvbHZlKHZhbHVlKS50aGVuKGZ1bmN0aW9uICh1bndyYXBwZWQpIHtcbiAgICAgICAgICByZXN1bHQudmFsdWUgPSB1bndyYXBwZWQsIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGludm9rZShcInRocm93XCIsIGVycm9yLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJlamVjdChyZWNvcmQuYXJnKTtcbiAgICB9XG4gICAgdmFyIHByZXZpb3VzUHJvbWlzZTtcbiAgICBkZWZpbmVQcm9wZXJ0eSh0aGlzLCBcIl9pbnZva2VcIiwge1xuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKG1ldGhvZCwgYXJnKSB7XG4gICAgICAgIGZ1bmN0aW9uIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCkge1xuICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZUltcGwoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcmV2aW91c1Byb21pc2UgPSBwcmV2aW91c1Byb21pc2UgPyBwcmV2aW91c1Byb21pc2UudGhlbihjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZywgY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcpIDogY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBmdW5jdGlvbiBtYWtlSW52b2tlTWV0aG9kKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpIHtcbiAgICB2YXIgc3RhdGUgPSBcInN1c3BlbmRlZFN0YXJ0XCI7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChtZXRob2QsIGFyZykge1xuICAgICAgaWYgKFwiZXhlY3V0aW5nXCIgPT09IHN0YXRlKSB0aHJvdyBuZXcgRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nXCIpO1xuICAgICAgaWYgKFwiY29tcGxldGVkXCIgPT09IHN0YXRlKSB7XG4gICAgICAgIGlmIChcInRocm93XCIgPT09IG1ldGhvZCkgdGhyb3cgYXJnO1xuICAgICAgICByZXR1cm4gZG9uZVJlc3VsdCgpO1xuICAgICAgfVxuICAgICAgZm9yIChjb250ZXh0Lm1ldGhvZCA9IG1ldGhvZCwgY29udGV4dC5hcmcgPSBhcmc7Oykge1xuICAgICAgICB2YXIgZGVsZWdhdGUgPSBjb250ZXh0LmRlbGVnYXRlO1xuICAgICAgICBpZiAoZGVsZWdhdGUpIHtcbiAgICAgICAgICB2YXIgZGVsZWdhdGVSZXN1bHQgPSBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcbiAgICAgICAgICBpZiAoZGVsZWdhdGVSZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCA9PT0gQ29udGludWVTZW50aW5lbCkgY29udGludWU7XG4gICAgICAgICAgICByZXR1cm4gZGVsZWdhdGVSZXN1bHQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChcIm5leHRcIiA9PT0gY29udGV4dC5tZXRob2QpIGNvbnRleHQuc2VudCA9IGNvbnRleHQuX3NlbnQgPSBjb250ZXh0LmFyZztlbHNlIGlmIChcInRocm93XCIgPT09IGNvbnRleHQubWV0aG9kKSB7XG4gICAgICAgICAgaWYgKFwic3VzcGVuZGVkU3RhcnRcIiA9PT0gc3RhdGUpIHRocm93IHN0YXRlID0gXCJjb21wbGV0ZWRcIiwgY29udGV4dC5hcmc7XG4gICAgICAgICAgY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihjb250ZXh0LmFyZyk7XG4gICAgICAgIH0gZWxzZSBcInJldHVyblwiID09PSBjb250ZXh0Lm1ldGhvZCAmJiBjb250ZXh0LmFicnVwdChcInJldHVyblwiLCBjb250ZXh0LmFyZyk7XG4gICAgICAgIHN0YXRlID0gXCJleGVjdXRpbmdcIjtcbiAgICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpO1xuICAgICAgICBpZiAoXCJub3JtYWxcIiA9PT0gcmVjb3JkLnR5cGUpIHtcbiAgICAgICAgICBpZiAoc3RhdGUgPSBjb250ZXh0LmRvbmUgPyBcImNvbXBsZXRlZFwiIDogXCJzdXNwZW5kZWRZaWVsZFwiLCByZWNvcmQuYXJnID09PSBDb250aW51ZVNlbnRpbmVsKSBjb250aW51ZTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IHJlY29yZC5hcmcsXG4gICAgICAgICAgICBkb25lOiBjb250ZXh0LmRvbmVcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIFwidGhyb3dcIiA9PT0gcmVjb3JkLnR5cGUgJiYgKHN0YXRlID0gXCJjb21wbGV0ZWRcIiwgY29udGV4dC5tZXRob2QgPSBcInRocm93XCIsIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZyk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KSB7XG4gICAgdmFyIG1ldGhvZE5hbWUgPSBjb250ZXh0Lm1ldGhvZCxcbiAgICAgIG1ldGhvZCA9IGRlbGVnYXRlLml0ZXJhdG9yW21ldGhvZE5hbWVdO1xuICAgIGlmICh1bmRlZmluZWQgPT09IG1ldGhvZCkgcmV0dXJuIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsLCBcInRocm93XCIgPT09IG1ldGhvZE5hbWUgJiYgZGVsZWdhdGUuaXRlcmF0b3JbXCJyZXR1cm5cIl0gJiYgKGNvbnRleHQubWV0aG9kID0gXCJyZXR1cm5cIiwgY29udGV4dC5hcmcgPSB1bmRlZmluZWQsIG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpLCBcInRocm93XCIgPT09IGNvbnRleHQubWV0aG9kKSB8fCBcInJldHVyblwiICE9PSBtZXRob2ROYW1lICYmIChjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIiwgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFwiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAnXCIgKyBtZXRob2ROYW1lICsgXCInIG1ldGhvZFwiKSksIENvbnRpbnVlU2VudGluZWw7XG4gICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKG1ldGhvZCwgZGVsZWdhdGUuaXRlcmF0b3IsIGNvbnRleHQuYXJnKTtcbiAgICBpZiAoXCJ0aHJvd1wiID09PSByZWNvcmQudHlwZSkgcmV0dXJuIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiLCBjb250ZXh0LmFyZyA9IHJlY29yZC5hcmcsIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsLCBDb250aW51ZVNlbnRpbmVsO1xuICAgIHZhciBpbmZvID0gcmVjb3JkLmFyZztcbiAgICByZXR1cm4gaW5mbyA/IGluZm8uZG9uZSA/IChjb250ZXh0W2RlbGVnYXRlLnJlc3VsdE5hbWVdID0gaW5mby52YWx1ZSwgY29udGV4dC5uZXh0ID0gZGVsZWdhdGUubmV4dExvYywgXCJyZXR1cm5cIiAhPT0gY29udGV4dC5tZXRob2QgJiYgKGNvbnRleHQubWV0aG9kID0gXCJuZXh0XCIsIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkKSwgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGwsIENvbnRpbnVlU2VudGluZWwpIDogaW5mbyA6IChjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIiwgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFwiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3RcIiksIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsLCBDb250aW51ZVNlbnRpbmVsKTtcbiAgfVxuICBmdW5jdGlvbiBwdXNoVHJ5RW50cnkobG9jcykge1xuICAgIHZhciBlbnRyeSA9IHtcbiAgICAgIHRyeUxvYzogbG9jc1swXVxuICAgIH07XG4gICAgMSBpbiBsb2NzICYmIChlbnRyeS5jYXRjaExvYyA9IGxvY3NbMV0pLCAyIGluIGxvY3MgJiYgKGVudHJ5LmZpbmFsbHlMb2MgPSBsb2NzWzJdLCBlbnRyeS5hZnRlckxvYyA9IGxvY3NbM10pLCB0aGlzLnRyeUVudHJpZXMucHVzaChlbnRyeSk7XG4gIH1cbiAgZnVuY3Rpb24gcmVzZXRUcnlFbnRyeShlbnRyeSkge1xuICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uIHx8IHt9O1xuICAgIHJlY29yZC50eXBlID0gXCJub3JtYWxcIiwgZGVsZXRlIHJlY29yZC5hcmcsIGVudHJ5LmNvbXBsZXRpb24gPSByZWNvcmQ7XG4gIH1cbiAgZnVuY3Rpb24gQ29udGV4dCh0cnlMb2NzTGlzdCkge1xuICAgIHRoaXMudHJ5RW50cmllcyA9IFt7XG4gICAgICB0cnlMb2M6IFwicm9vdFwiXG4gICAgfV0sIHRyeUxvY3NMaXN0LmZvckVhY2gocHVzaFRyeUVudHJ5LCB0aGlzKSwgdGhpcy5yZXNldCghMCk7XG4gIH1cbiAgZnVuY3Rpb24gdmFsdWVzKGl0ZXJhYmxlKSB7XG4gICAgaWYgKGl0ZXJhYmxlKSB7XG4gICAgICB2YXIgaXRlcmF0b3JNZXRob2QgPSBpdGVyYWJsZVtpdGVyYXRvclN5bWJvbF07XG4gICAgICBpZiAoaXRlcmF0b3JNZXRob2QpIHJldHVybiBpdGVyYXRvck1ldGhvZC5jYWxsKGl0ZXJhYmxlKTtcbiAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGl0ZXJhYmxlLm5leHQpIHJldHVybiBpdGVyYWJsZTtcbiAgICAgIGlmICghaXNOYU4oaXRlcmFibGUubGVuZ3RoKSkge1xuICAgICAgICB2YXIgaSA9IC0xLFxuICAgICAgICAgIG5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgZm9yICg7ICsraSA8IGl0ZXJhYmxlLmxlbmd0aDspIGlmIChoYXNPd24uY2FsbChpdGVyYWJsZSwgaSkpIHJldHVybiBuZXh0LnZhbHVlID0gaXRlcmFibGVbaV0sIG5leHQuZG9uZSA9ICExLCBuZXh0O1xuICAgICAgICAgICAgcmV0dXJuIG5leHQudmFsdWUgPSB1bmRlZmluZWQsIG5leHQuZG9uZSA9ICEwLCBuZXh0O1xuICAgICAgICAgIH07XG4gICAgICAgIHJldHVybiBuZXh0Lm5leHQgPSBuZXh0O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgbmV4dDogZG9uZVJlc3VsdFxuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gZG9uZVJlc3VsdCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgIGRvbmU6ICEwXG4gICAgfTtcbiAgfVxuICByZXR1cm4gR2VuZXJhdG9yRnVuY3Rpb24ucHJvdG90eXBlID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIGRlZmluZVByb3BlcnR5KEdwLCBcImNvbnN0cnVjdG9yXCIsIHtcbiAgICB2YWx1ZTogR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsXG4gICAgY29uZmlndXJhYmxlOiAhMFxuICB9KSwgZGVmaW5lUHJvcGVydHkoR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIFwiY29uc3RydWN0b3JcIiwge1xuICAgIHZhbHVlOiBHZW5lcmF0b3JGdW5jdGlvbixcbiAgICBjb25maWd1cmFibGU6ICEwXG4gIH0pLCBHZW5lcmF0b3JGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IGRlZmluZShHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSwgdG9TdHJpbmdUYWdTeW1ib2wsIFwiR2VuZXJhdG9yRnVuY3Rpb25cIiksIGV4cG9ydHMuaXNHZW5lcmF0b3JGdW5jdGlvbiA9IGZ1bmN0aW9uIChnZW5GdW4pIHtcbiAgICB2YXIgY3RvciA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZ2VuRnVuICYmIGdlbkZ1bi5jb25zdHJ1Y3RvcjtcbiAgICByZXR1cm4gISFjdG9yICYmIChjdG9yID09PSBHZW5lcmF0b3JGdW5jdGlvbiB8fCBcIkdlbmVyYXRvckZ1bmN0aW9uXCIgPT09IChjdG9yLmRpc3BsYXlOYW1lIHx8IGN0b3IubmFtZSkpO1xuICB9LCBleHBvcnRzLm1hcmsgPSBmdW5jdGlvbiAoZ2VuRnVuKSB7XG4gICAgcmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihnZW5GdW4sIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKSA6IChnZW5GdW4uX19wcm90b19fID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIGRlZmluZShnZW5GdW4sIHRvU3RyaW5nVGFnU3ltYm9sLCBcIkdlbmVyYXRvckZ1bmN0aW9uXCIpKSwgZ2VuRnVuLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoR3ApLCBnZW5GdW47XG4gIH0sIGV4cG9ydHMuYXdyYXAgPSBmdW5jdGlvbiAoYXJnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIF9fYXdhaXQ6IGFyZ1xuICAgIH07XG4gIH0sIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSksIGRlZmluZShBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSwgYXN5bmNJdGVyYXRvclN5bWJvbCwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KSwgZXhwb3J0cy5Bc3luY0l0ZXJhdG9yID0gQXN5bmNJdGVyYXRvciwgZXhwb3J0cy5hc3luYyA9IGZ1bmN0aW9uIChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCwgUHJvbWlzZUltcGwpIHtcbiAgICB2b2lkIDAgPT09IFByb21pc2VJbXBsICYmIChQcm9taXNlSW1wbCA9IFByb21pc2UpO1xuICAgIHZhciBpdGVyID0gbmV3IEFzeW5jSXRlcmF0b3Iod3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCksIFByb21pc2VJbXBsKTtcbiAgICByZXR1cm4gZXhwb3J0cy5pc0dlbmVyYXRvckZ1bmN0aW9uKG91dGVyRm4pID8gaXRlciA6IGl0ZXIubmV4dCgpLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgcmV0dXJuIHJlc3VsdC5kb25lID8gcmVzdWx0LnZhbHVlIDogaXRlci5uZXh0KCk7XG4gICAgfSk7XG4gIH0sIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhHcCksIGRlZmluZShHcCwgdG9TdHJpbmdUYWdTeW1ib2wsIFwiR2VuZXJhdG9yXCIpLCBkZWZpbmUoR3AsIGl0ZXJhdG9yU3ltYm9sLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pLCBkZWZpbmUoR3AsIFwidG9TdHJpbmdcIiwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBcIltvYmplY3QgR2VuZXJhdG9yXVwiO1xuICB9KSwgZXhwb3J0cy5rZXlzID0gZnVuY3Rpb24gKHZhbCkge1xuICAgIHZhciBvYmplY3QgPSBPYmplY3QodmFsKSxcbiAgICAgIGtleXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSBrZXlzLnB1c2goa2V5KTtcbiAgICByZXR1cm4ga2V5cy5yZXZlcnNlKCksIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICBmb3IgKDsga2V5cy5sZW5ndGg7KSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzLnBvcCgpO1xuICAgICAgICBpZiAoa2V5IGluIG9iamVjdCkgcmV0dXJuIG5leHQudmFsdWUgPSBrZXksIG5leHQuZG9uZSA9ICExLCBuZXh0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5leHQuZG9uZSA9ICEwLCBuZXh0O1xuICAgIH07XG4gIH0sIGV4cG9ydHMudmFsdWVzID0gdmFsdWVzLCBDb250ZXh0LnByb3RvdHlwZSA9IHtcbiAgICBjb25zdHJ1Y3RvcjogQ29udGV4dCxcbiAgICByZXNldDogZnVuY3Rpb24gcmVzZXQoc2tpcFRlbXBSZXNldCkge1xuICAgICAgaWYgKHRoaXMucHJldiA9IDAsIHRoaXMubmV4dCA9IDAsIHRoaXMuc2VudCA9IHRoaXMuX3NlbnQgPSB1bmRlZmluZWQsIHRoaXMuZG9uZSA9ICExLCB0aGlzLmRlbGVnYXRlID0gbnVsbCwgdGhpcy5tZXRob2QgPSBcIm5leHRcIiwgdGhpcy5hcmcgPSB1bmRlZmluZWQsIHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKHJlc2V0VHJ5RW50cnkpLCAhc2tpcFRlbXBSZXNldCkgZm9yICh2YXIgbmFtZSBpbiB0aGlzKSBcInRcIiA9PT0gbmFtZS5jaGFyQXQoMCkgJiYgaGFzT3duLmNhbGwodGhpcywgbmFtZSkgJiYgIWlzTmFOKCtuYW1lLnNsaWNlKDEpKSAmJiAodGhpc1tuYW1lXSA9IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBzdG9wOiBmdW5jdGlvbiBzdG9wKCkge1xuICAgICAgdGhpcy5kb25lID0gITA7XG4gICAgICB2YXIgcm9vdFJlY29yZCA9IHRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO1xuICAgICAgaWYgKFwidGhyb3dcIiA9PT0gcm9vdFJlY29yZC50eXBlKSB0aHJvdyByb290UmVjb3JkLmFyZztcbiAgICAgIHJldHVybiB0aGlzLnJ2YWw7XG4gICAgfSxcbiAgICBkaXNwYXRjaEV4Y2VwdGlvbjogZnVuY3Rpb24gZGlzcGF0Y2hFeGNlcHRpb24oZXhjZXB0aW9uKSB7XG4gICAgICBpZiAodGhpcy5kb25lKSB0aHJvdyBleGNlcHRpb247XG4gICAgICB2YXIgY29udGV4dCA9IHRoaXM7XG4gICAgICBmdW5jdGlvbiBoYW5kbGUobG9jLCBjYXVnaHQpIHtcbiAgICAgICAgcmV0dXJuIHJlY29yZC50eXBlID0gXCJ0aHJvd1wiLCByZWNvcmQuYXJnID0gZXhjZXB0aW9uLCBjb250ZXh0Lm5leHQgPSBsb2MsIGNhdWdodCAmJiAoY29udGV4dC5tZXRob2QgPSBcIm5leHRcIiwgY29udGV4dC5hcmcgPSB1bmRlZmluZWQpLCAhIWNhdWdodDtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldLFxuICAgICAgICAgIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb247XG4gICAgICAgIGlmIChcInJvb3RcIiA9PT0gZW50cnkudHJ5TG9jKSByZXR1cm4gaGFuZGxlKFwiZW5kXCIpO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldikge1xuICAgICAgICAgIHZhciBoYXNDYXRjaCA9IGhhc093bi5jYWxsKGVudHJ5LCBcImNhdGNoTG9jXCIpLFxuICAgICAgICAgICAgaGFzRmluYWxseSA9IGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIik7XG4gICAgICAgICAgaWYgKGhhc0NhdGNoICYmIGhhc0ZpbmFsbHkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgITApO1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgfSBlbHNlIGlmIChoYXNDYXRjaCkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmNhdGNoTG9jKSByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCAhMCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzRmluYWxseSkgdGhyb3cgbmV3IEVycm9yKFwidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHlcIik7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGFicnVwdDogZnVuY3Rpb24gYWJydXB0KHR5cGUsIGFyZykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPD0gdGhpcy5wcmV2ICYmIGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIikgJiYgdGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgIHZhciBmaW5hbGx5RW50cnkgPSBlbnRyeTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZmluYWxseUVudHJ5ICYmIChcImJyZWFrXCIgPT09IHR5cGUgfHwgXCJjb250aW51ZVwiID09PSB0eXBlKSAmJiBmaW5hbGx5RW50cnkudHJ5TG9jIDw9IGFyZyAmJiBhcmcgPD0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2MgJiYgKGZpbmFsbHlFbnRyeSA9IG51bGwpO1xuICAgICAgdmFyIHJlY29yZCA9IGZpbmFsbHlFbnRyeSA/IGZpbmFsbHlFbnRyeS5jb21wbGV0aW9uIDoge307XG4gICAgICByZXR1cm4gcmVjb3JkLnR5cGUgPSB0eXBlLCByZWNvcmQuYXJnID0gYXJnLCBmaW5hbGx5RW50cnkgPyAodGhpcy5tZXRob2QgPSBcIm5leHRcIiwgdGhpcy5uZXh0ID0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2MsIENvbnRpbnVlU2VudGluZWwpIDogdGhpcy5jb21wbGV0ZShyZWNvcmQpO1xuICAgIH0sXG4gICAgY29tcGxldGU6IGZ1bmN0aW9uIGNvbXBsZXRlKHJlY29yZCwgYWZ0ZXJMb2MpIHtcbiAgICAgIGlmIChcInRocm93XCIgPT09IHJlY29yZC50eXBlKSB0aHJvdyByZWNvcmQuYXJnO1xuICAgICAgcmV0dXJuIFwiYnJlYWtcIiA9PT0gcmVjb3JkLnR5cGUgfHwgXCJjb250aW51ZVwiID09PSByZWNvcmQudHlwZSA/IHRoaXMubmV4dCA9IHJlY29yZC5hcmcgOiBcInJldHVyblwiID09PSByZWNvcmQudHlwZSA/ICh0aGlzLnJ2YWwgPSB0aGlzLmFyZyA9IHJlY29yZC5hcmcsIHRoaXMubWV0aG9kID0gXCJyZXR1cm5cIiwgdGhpcy5uZXh0ID0gXCJlbmRcIikgOiBcIm5vcm1hbFwiID09PSByZWNvcmQudHlwZSAmJiBhZnRlckxvYyAmJiAodGhpcy5uZXh0ID0gYWZ0ZXJMb2MpLCBDb250aW51ZVNlbnRpbmVsO1xuICAgIH0sXG4gICAgZmluaXNoOiBmdW5jdGlvbiBmaW5pc2goZmluYWxseUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS5maW5hbGx5TG9jID09PSBmaW5hbGx5TG9jKSByZXR1cm4gdGhpcy5jb21wbGV0ZShlbnRyeS5jb21wbGV0aW9uLCBlbnRyeS5hZnRlckxvYyksIHJlc2V0VHJ5RW50cnkoZW50cnkpLCBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgfVxuICAgIH0sXG4gICAgXCJjYXRjaFwiOiBmdW5jdGlvbiBfY2F0Y2godHJ5TG9jKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA9PT0gdHJ5TG9jKSB7XG4gICAgICAgICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb247XG4gICAgICAgICAgaWYgKFwidGhyb3dcIiA9PT0gcmVjb3JkLnR5cGUpIHtcbiAgICAgICAgICAgIHZhciB0aHJvd24gPSByZWNvcmQuYXJnO1xuICAgICAgICAgICAgcmVzZXRUcnlFbnRyeShlbnRyeSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0aHJvd247XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdFwiKTtcbiAgICB9LFxuICAgIGRlbGVnYXRlWWllbGQ6IGZ1bmN0aW9uIGRlbGVnYXRlWWllbGQoaXRlcmFibGUsIHJlc3VsdE5hbWUsIG5leHRMb2MpIHtcbiAgICAgIHJldHVybiB0aGlzLmRlbGVnYXRlID0ge1xuICAgICAgICBpdGVyYXRvcjogdmFsdWVzKGl0ZXJhYmxlKSxcbiAgICAgICAgcmVzdWx0TmFtZTogcmVzdWx0TmFtZSxcbiAgICAgICAgbmV4dExvYzogbmV4dExvY1xuICAgICAgfSwgXCJuZXh0XCIgPT09IHRoaXMubWV0aG9kICYmICh0aGlzLmFyZyA9IHVuZGVmaW5lZCksIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuICB9LCBleHBvcnRzO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfcmVnZW5lcmF0b3JSdW50aW1lLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiAobW9kdWxlLmV4cG9ydHMgPSBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiB0eXBlb2Ygb2JqO1xuICB9IDogZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiBvYmogJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cyksIF90eXBlb2Yob2JqKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3R5cGVvZiwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsIi8vIFRPRE8oQmFiZWwgOCk6IFJlbW92ZSB0aGlzIGZpbGUuXG5cbnZhciBydW50aW1lID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvcmVnZW5lcmF0b3JSdW50aW1lXCIpKCk7XG5tb2R1bGUuZXhwb3J0cyA9IHJ1bnRpbWU7XG5cbi8vIENvcGllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWdlbmVyYXRvci9ibG9iL21haW4vcGFja2FnZXMvcnVudGltZS9ydW50aW1lLmpzI0w3MzY9XG50cnkge1xuICByZWdlbmVyYXRvclJ1bnRpbWUgPSBydW50aW1lO1xufSBjYXRjaCAoYWNjaWRlbnRhbFN0cmljdE1vZGUpIHtcbiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSBcIm9iamVjdFwiKSB7XG4gICAgZ2xvYmFsVGhpcy5yZWdlbmVyYXRvclJ1bnRpbWUgPSBydW50aW1lO1xuICB9IGVsc2Uge1xuICAgIEZ1bmN0aW9uKFwiclwiLCBcInJlZ2VuZXJhdG9yUnVudGltZSA9IHJcIikocnVudGltZSk7XG4gIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IFJlYWRPbmx5U3ViamVjdCBmcm9tICcuLi9yeC9SZWFkT25seVN1YmplY3QnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuXG5jb25zdCBkZWZhdWx0RG9jdW1lbnRGb2N1c0ludGVydmFsVGltZW91dCA9IDMwMDA7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5SXNGb3JlZ3JvdW5kOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX2lzRm9yZWdyb3VuZDogU3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSBfdGltZU9mTGFzdFRhYkZvY3VzQ2hhbmdlOiBudW1iZXIgPSBEYXRlLm5vdygpO1xuICBwcml2YXRlIF9kb2N1bWVudEZvY3VzSW50ZXJ2YWw6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLl9pc0ZvcmVncm91bmQgPSBuZXcgU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgICB0aGlzLl9yZWFkT25seUlzRm9yZWdyb3VuZCA9IG5ldyBSZWFkT25seVN1YmplY3QodGhpcy5faXNGb3JlZ3JvdW5kKTtcbiAgICB0aGlzLmRldGVjdFRhYkZvY3VzQ2hhbmdlKCk7XG4gIH1cblxuICBnZXQgaXNGb3JlZ3JvdW5kKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5SXNGb3JlZ3JvdW5kO1xuICB9XG5cbiAgZ2V0VGltZVNpbmNlTGFzdENoYW5nZSgpOiBudW1iZXIge1xuICAgIHJldHVybiBEYXRlLm5vdygpIC0gdGhpcy5fdGltZU9mTGFzdFRhYkZvY3VzQ2hhbmdlO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGRldGVjdFRhYkZvY3VzQ2hhbmdlKCk6IHZvaWQge1xuICAgIGxldCBoaWRkZW47XG4gICAgbGV0IHZpc2liaWxpdHlDaGFuZ2U7XG5cbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ICE9PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIER1ZSB0byB0eXBlc2NyaXB0IG5vdCBoYXZpbmcgYSBkZWZpbml0aW9uIGZvciAnbXNIaWRkZW4nIG9yICd3ZWJraXRIaWRkZW4nIHR5cGVzXG4gICAgLy8gUmVxdWlyZWQgdG8gQHRzLWlnbm9yZSB0byBwcmV2ZW50IHR5cGVzY3JpcHQgZXJyb3JzXG4gICAgLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50ICovXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQubXNIaWRkZW4gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBoaWRkZW4gPSAnbXNIaWRkZW4nO1xuICAgICAgdmlzaWJpbGl0eUNoYW5nZSA9ICdtc3Zpc2liaWxpdHljaGFuZ2UnO1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGRvY3VtZW50LndlYmtpdEhpZGRlbiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGhpZGRlbiA9ICd3ZWJraXRIaWRkZW4nO1xuICAgICAgdmlzaWJpbGl0eUNoYW5nZSA9ICd3ZWJraXR2aXNpYmlsaXR5Y2hhbmdlJztcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBkb2N1bWVudC5oaWRkZW4gIT09ICd1bmRlZmluZWQnKSB7IC8vIE9wZXJhIDEyLjEwIGFuZCBGaXJlZm94IDE4IGFuZCBsYXRlciBzdXBwb3J0XG4gICAgICBoaWRkZW4gPSAnaGlkZGVuJztcbiAgICAgIHZpc2liaWxpdHlDaGFuZ2UgPSAndmlzaWJpbGl0eWNoYW5nZSc7XG4gICAgfVxuICAgIC8qIGVzbGludC1lbmFibGUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50ICovXG5cbiAgICBjb25zdCBoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlID0gKCk6IHZvaWQgPT4ge1xuICAgICAgY29uc3QgaXNGb3JlZ3JvdW5kID0gIWRvY3VtZW50W2hpZGRlbl07XG5cbiAgICAgIHRoaXMuc2V0Rm9jdXNTdGF0ZShpc0ZvcmVncm91bmQpO1xuICAgIH07XG5cbiAgICBpZiAodHlwZW9mIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudFtoaWRkZW5dICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih2aXNpYmlsaXR5Q2hhbmdlLCBoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlLCBmYWxzZSk7XG5cbiAgICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodmlzaWJpbGl0eUNoYW5nZSwgaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSwgZmFsc2UpO1xuICAgICAgfSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxpc3RlbkZvckRvY3VtZW50Rm9jdXMuY2FsbCh0aGlzKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGxpc3RlbkZvckRvY3VtZW50Rm9jdXMoKTogdm9pZCB7XG4gICAgdGhpcy5fZG9jdW1lbnRGb2N1c0ludGVydmFsID0gd2luZG93LnNldEludGVydmFsKCgpID0+IHtcbiAgICAgIGNvbnN0IGlzRm9yZWdyb3VuZCA9IGRvY3VtZW50Lmhhc0ZvY3VzKCk7XG5cbiAgICAgIHRoaXMuc2V0Rm9jdXNTdGF0ZShpc0ZvcmVncm91bmQpO1xuICAgIH0sIGRlZmF1bHREb2N1bWVudEZvY3VzSW50ZXJ2YWxUaW1lb3V0KTtcblxuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fZG9jdW1lbnRGb2N1c0ludGVydmFsKSB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5fZG9jdW1lbnRGb2N1c0ludGVydmFsKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fZG9jdW1lbnRGb2N1c0ludGVydmFsID0gbnVsbDtcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIHNldEZvY3VzU3RhdGUoaXNGb3JlZ3JvdW5kKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2lzRm9yZWdyb3VuZCA9PT0gaXNGb3JlZ3JvdW5kKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faXNGb3JlZ3JvdW5kLnZhbHVlID0gaXNGb3JlZ3JvdW5kO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCcm93c2VyRGV0ZWN0b3Ige1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfYnJvd3Nlck5hbWVBbmRWZXJzaW9uUmVnZXggPSAvKE1TSUV8KD8hR2Vja28uKylGaXJlZm94fCg/IUFwcGxlV2ViS2l0LitDaHJvbWUuKylTYWZhcml8KD8hQXBwbGVXZWJLaXQuKylDaHJvbWV8QXBwbGVXZWJLaXQoPyEuK0Nocm9tZXwuK1NhZmFyaSl8R2Vja28oPyEuK0ZpcmVmb3gpKSg/OiB8XFwvKShbXFxkLmFwcmVdKykvZztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbiA9IEJyb3dzZXJEZXRlY3Rvci5wYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbigpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfYnJvd3Nlck5hbWUgPSBCcm93c2VyRGV0ZWN0b3IucGFyc2VCcm93c2VyTmFtZSgpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfYnJvd3Nlck1ham9yVmVyc2lvbiA9IEJyb3dzZXJEZXRlY3Rvci5wYXJzZUJyb3dzZXJNYWpvclZlcnNpb24oKTtcblxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU2OSA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNjkuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTcwID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83MC4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzEgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzcxLicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3MiA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzIuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTc0ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83NC4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzUgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzc1LicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3NiA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzYuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTc3ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83Ny4nKTtcblxuICBzdGF0aWMgZ2V0IGJyb3dzZXJOYW1lQW5kVmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYnJvd3Nlck5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fYnJvd3Nlck5hbWU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGJyb3dzZXJNYWpvclZlcnNpb24oKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fYnJvd3Nlck1ham9yVmVyc2lvbjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU2OSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTY5O1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTcwKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzA7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzEoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3MTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3MigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTcyO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTc0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3NTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3NigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTc2O1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTc3KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzc7XG4gIH1cblxuICBzdGF0aWMgaXNNb2JpbGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICgvQW5kcm9pZHxpUGhvbmV8aVBhZHxpUG9kfEJsYWNrQmVycnl8T3BlcmEgTWluaS9pKS50ZXN0KG5hdmlnYXRvcj8udXNlckFnZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgaWYgKCFuYXZpZ2F0b3IgfHwgIW5hdmlnYXRvci51c2VyQWdlbnQpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCBicm93c2VyTmFtZUFuZFZlcnNpb24gPSBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uUmVnZXgpO1xuXG4gICAgaWYgKGJyb3dzZXJOYW1lQW5kVmVyc2lvbiAmJiBicm93c2VyTmFtZUFuZFZlcnNpb25bMF0pIHtcbiAgICAgIHJldHVybiBicm93c2VyTmFtZUFuZFZlcnNpb25bMF07XG4gICAgfVxuXG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5wYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbkZvcklFKCk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBwYXJzZUJyb3dzZXJOYW1lKCk6IHN0cmluZyB7XG4gICAgaWYgKCFCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbikge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGNvbnN0IGJyb3dzZXJOYW1lTGlzdCA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLnNwbGl0KCcvJyk7XG5cbiAgICBpZiAoIWJyb3dzZXJOYW1lTGlzdCB8fCAhYnJvd3Nlck5hbWVMaXN0WzBdKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJyb3dzZXJOYW1lTGlzdFswXTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHBhcnNlQnJvd3Nlck1ham9yVmVyc2lvbigpOiBudW1iZXIge1xuICAgIGlmICghQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24pIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIGNvbnN0IGJyb3dzZXJWZXJzaW9uTGlzdCA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLnNwbGl0KCcvJyk7XG5cbiAgICBpZiAoIWJyb3dzZXJWZXJzaW9uTGlzdCB8fCAhYnJvd3NlclZlcnNpb25MaXN0WzFdKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBjb25zdCBmdWxsVmVyc2lvbiA9IGJyb3dzZXJWZXJzaW9uTGlzdFsxXTtcblxuICAgIGlmICghZnVsbFZlcnNpb24pIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIHJldHVybiBOdW1iZXIoZnVsbFZlcnNpb24uc3BsaXQoJy4nKVswXSkgfHwgMDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uRm9ySUUoKTogc3RyaW5nIHtcbiAgICBpZiAoIW5hdmlnYXRvciB8fCAhbmF2aWdhdG9yLnVzZXJBZ2VudCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGNvbnN0IHVzZXJBZ2VudCA9IG5hdmlnYXRvci51c2VyQWdlbnQ7XG4gICAgY29uc3QgbXNpZSA9IHVzZXJBZ2VudC5pbmRleE9mKCdNU0lFICcpO1xuXG4gICAgaWYgKG1zaWUgPiAwKSB7XG4gICAgICAvLyBJRSAxMCBvciBvbGRlciA9PiByZXR1cm4gdmVyc2lvbiBudW1iZXJcbiAgICAgIHJldHVybiBgSUUvJHtwYXJzZUludCh1c2VyQWdlbnQuc3Vic3RyaW5nKG1zaWUgKyA1LCB1c2VyQWdlbnQuaW5kZXhPZignLicsIG1zaWUpKSwgMTApfWA7XG4gICAgfVxuXG4gICAgY29uc3QgdHJpZGVudCA9IHVzZXJBZ2VudC5pbmRleE9mKCdUcmlkZW50LycpO1xuXG4gICAgaWYgKHRyaWRlbnQgPiAwKSB7XG4gICAgICAvLyBJRSAxMSA9PiByZXR1cm4gdmVyc2lvbiBudW1iZXJcbiAgICAgIGNvbnN0IHZlcnNpb24gPSB1c2VyQWdlbnQuaW5kZXhPZigncnY6Jyk7XG5cbiAgICAgIHJldHVybiBgSUUvJHtwYXJzZUludCh1c2VyQWdlbnQuc3Vic3RyaW5nKHZlcnNpb24gKyAzLCB1c2VyQWdlbnQuaW5kZXhPZignLicsIHZlcnNpb24pKSwgMTApfWA7XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nIGZyb20gJy4uL21ldHJpY3MvVGVsZW1ldHJpY0xldmVsTWFwcGluZyc7XG5pbXBvcnQgVGVsZW1ldHJ5RGVmYXVsdCBmcm9tICcuLi9tZXRyaWNzL1RlbGVtZXRyeURlZmF1bHQnO1xuaW1wb3J0IExvZ2dpbmdMZXZlbE1hcHBpbmcgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dpbmdMZXZlbE1hcHBpbmcnO1xuaW1wb3J0IExvZ2dlckRlZmF1bHRzIGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJEZWZhdWx0cyc7XG5cbi8vIFRoaXMgZmlsZSBpcyB1c2VkIG9ubHkgZm9yIHRoZSBzaWxlbnQgYnVpbGQgdG8gbW9jayBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIGNsYXNzXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQbGFpbkNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIge1xuICBnZXRTdHJpbmdWYWx1ZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRlZmF1bHRTdHJpbmdWYWx1ZVtuYW1lXTtcbiAgfVxuXG4gIGdldEJvb2xlYW5WYWx1ZShuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kZWZhdWx0Qm9vbGVhblZhbHVlW25hbWVdO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgZGVmYXVsdFN0cmluZ1ZhbHVlKCk6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9IHtcbiAgICByZXR1cm4ge1xuICAgICAgJ3BoZW5peC1tZXRyaWNzLWxldmVsJzogVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nLmNvbnZlcnRUZWxlbWV0cnlMZXZlbFRvVGVsZW1ldHJ5TGV2ZWxUeXBlKFRlbGVtZXRyeURlZmF1bHQuZGVmYXVsdFRlbGVtZXRyeUxldmVsKSxcbiAgICAgICdwaGVuaXgtbG9nZ2luZy1sZXZlbCc6IExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFRvTG9nZ2luZ0xldmVsVHlwZShMb2dnZXJEZWZhdWx0cy5kZWZhdWx0TG9nZ2luZ0xldmVsKSxcbiAgICAgICdwaGVuaXgtY29uc29sZS1sb2dnaW5nLWxldmVsJzogTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlKExvZ2dlckRlZmF1bHRzLmRlZmF1bHRDb25zb2xlTG9nZ2luZ0xldmVsKSxcbiAgICAgICdwaGVuaXgtdGVsZW1ldHJ5LWxvZ2dpbmctbGV2ZWwnOiBMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUoTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdFRlbGVtZXRyeUxvZ2dpbmdMZXZlbCksXG4gICAgICAncGhlbml4LWNoYW5uZWwtdG9rZW4nOiAnJyxcbiAgICAgICdwaGVuaXgtdXJpJzogJycsXG4gICAgICAncGhlbml4LWJhc2UtdXJpJzogJydcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgZGVmYXVsdEJvb2xlYW5WYWx1ZSgpOiB7IFtuYW1lOiBzdHJpbmddOiBib29sZWFuIH0ge1xuICAgIHJldHVybiB7XG4gICAgICAncGhlbml4LWF1dG9tYXRpY2FsbHktcmV0cnktb24tZmFpbHVyZSc6IHRydWUsXG4gICAgICAncGhlbml4LWF1dG9tYXRpY2FsbHktcmVjb25uZWN0LXBlZXItY29ubmVjdGlvbic6IHRydWUsXG4gICAgICAncGhlbml4LWZvcmNlLWdhcmJhZ2UtY29sbGVjdGlvbi1vbi1yZXN0YXJ0JzogdHJ1ZSxcbiAgICAgICdwaGVuaXgtc2tpcC1nYXJiYWdlLWNvbGxlY3Rpb24tb24tbW9iaWxlLWRldmljZXMnOiB0cnVlXG4gICAgfTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uL2Vudmlyb25tZW50L0ZlYXR1cmVFbmFibGVtZW50JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXIge1xuICBzdGF0aWMgZm9yY2VHYXJiYWdlQ29sbGVjdGlvbigpOiB2b2lkIHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuaXNGb3JjZUNocm9tZUdhcmJhZ2VDb2xsZWN0aW9uU3VwcG9ydGVkKSB7XG4gICAgICB0aGlzLmZvcmNlQ2hyb21lR2FyYmFnZUNvbGxlY3Rpb24oKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBmb3JjZUNocm9tZUdhcmJhZ2VDb2xsZWN0aW9uKCk6IHZvaWQge1xuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5pc1F1ZXVlTWljcm90YXNrU3VwcG9ydGVkKSB7XG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgIHRoaXMub3ZlcmxvYWRNZW1vcnlUb0ludm9rZUdhcmJhZ2VDb2xsZWN0aW9uKCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMub3ZlcmxvYWRNZW1vcnlUb0ludm9rZUdhcmJhZ2VDb2xsZWN0aW9uKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBvdmVybG9hZE1lbW9yeVRvSW52b2tlR2FyYmFnZUNvbGxlY3Rpb24oKTogdm9pZCB7XG4gICAgbGV0IGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xuXG4gICAgaW1nLnNyYyA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFtuZXcgQXJyYXlCdWZmZXIoMTBlKzcpXSkpOyAvLyAxMDBNYiBvciBsZXNzIG9yIG1vcmUgZGVwZW5kaW5nIG9uIGFzIHlvdSB3aXNoIHRvIGZvcmNlL2ludm9rZSBHQyBjeWNsZSBydW5cbiAgICBpbWcub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgd2luZG93LlVSTC5yZXZva2VPYmplY3RVUkwodGhpcy5zcmMpO1xuXG4gICAgICBpbWcgPSBudWxsO1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXIgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi9yeC9TdWJqZWN0JztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTmV0d29ya01vbml0b3IgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdCA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pc1N1cHBvcnRlZCA9IG5hdmlnYXRvciAmJiBuYXZpZ2F0b3JbJ2Nvbm5lY3Rpb24nXTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcnR0OiBTdWJqZWN0PG51bWJlcj4gPSBuZXcgU3ViamVjdCh1bmRlZmluZWQpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9lZmZlY3RpdmVUeXBlOiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdCh1bmRlZmluZWQpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eTogU3ViamVjdDxudW1iZXI+ID0gbmV3IFN1YmplY3QodW5kZWZpbmVkKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBpZiAoIXRoaXMuaXNTdXBwb3J0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNldHVwTmV0d29ya0NoYW5nZUxpc3RlbmVycygpO1xuICAgIHRoaXMudXBkYXRlU3RhdGlzdGljcygpO1xuICB9XG5cbiAgZ2V0IGlzU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc1N1cHBvcnRlZDtcbiAgfVxuXG4gIGdldCBydHQoKTogU3ViamVjdDxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fcnR0O1xuICB9XG5cbiAgZ2V0IGVmZmVjdGl2ZVR5cGUoKTogU3ViamVjdDxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5fZWZmZWN0aXZlVHlwZTtcbiAgfVxuXG4gIGdldCBkb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSgpOiBTdWJqZWN0PG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLl9kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSgpOiBudW1iZXIge1xuICAgIGlmICghdGhpcy5pc1N1cHBvcnRlZCkge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIHJldHVybiBuYXZpZ2F0b3JbJ2Nvbm5lY3Rpb24nXS5kb3dubGluayB8fCBuYXZpZ2F0b3JbJ2Nvbm5lY3Rpb24nXS5kb3dubGlua01heDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RWZmZWN0aXZlVHlwZSgpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5pc1N1cHBvcnRlZCkge1xuICAgICAgcmV0dXJuICdVbmtub3duJztcbiAgICB9XG5cbiAgICByZXR1cm4gbmF2aWdhdG9yWydjb25uZWN0aW9uJ10uZWZmZWN0aXZlVHlwZSB8fCBuYXZpZ2F0b3JbJ2Nvbm5lY3Rpb24nXS50eXBlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSb3VuZFRyaXBUaW1lKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIG5hdmlnYXRvclsnY29ubmVjdGlvbiddLnJ0dDtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBOZXR3b3JrQ2hhbmdlTGlzdGVuZXJzKCk6IHZvaWQge1xuICAgIGNvbnN0IGxpc3RlbmVyID0gKCk6IHZvaWQgPT4ge1xuICAgICAgdGhpcy51cGRhdGVTdGF0aXN0aWNzKCk7XG4gICAgfTtcblxuICAgIG5hdmlnYXRvclsnY29ubmVjdGlvbiddLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGxpc3RlbmVyKTtcblxuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICBuYXZpZ2F0b3JbJ2Nvbm5lY3Rpb24nXS5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBsaXN0ZW5lcik7XG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTdGF0aXN0aWNzKCk6IHZvaWQge1xuICAgIHRoaXMuX3J0dC52YWx1ZSA9IHRoaXMuZ2V0Um91bmRUcmlwVGltZSgpO1xuICAgIHRoaXMuX2VmZmVjdGl2ZVR5cGUudmFsdWUgPSB0aGlzLmdldEVmZmVjdGl2ZVR5cGUoKTtcbiAgICB0aGlzLl9kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eS52YWx1ZSA9IHRoaXMuZ2V0RG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkoKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IE1ldHJpY3NUeXBlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1R5cGUnO1xuaW1wb3J0IE1ldHJpY1R5cGUgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNUeXBlJztcbmltcG9ydCBEdXJhdGlvbnMgZnJvbSAnLi4vdGltZS9EdXJhdGlvbic7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IFNESyBmcm9tICcuLi9zZGsvU0RLJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcblxuZXhwb3J0IGNsYXNzIFN0cmVhbVNldHVwTGlzdGVuZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU3RyZWFtU2V0dXBMaXN0ZW5lcicpO1xuICBwcml2YXRlIHJlYWRvbmx5IG1ldHJpY3NTZXJ2aWNlID0gU0RLLm1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wYWdlTG9hZFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RhcnRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgX21ldHJpY1N1Ym1pdHRlZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHBhZ2VMb2FkVGltZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLl9wYWdlTG9hZFRpbWUgPSBwYWdlTG9hZFRpbWU7XG4gIH1cblxuICBzdWNjZXNzKHN0cmVhbUlkKTogdm9pZCB7XG4gICAgdGhpcy5yZWNvcmRTdHJlYW1NZXRyaWMoTWV0cmljc1R5cGUuU2V0dXBDb21wbGV0ZWQsIHN0cmVhbUlkKTtcbiAgfVxuXG4gIGZhaWwoKTogdm9pZCB7XG4gICAgdGhpcy5yZWNvcmRTdHJlYW1NZXRyaWMoTWV0cmljc1R5cGUuU2V0dXBGYWlsZWQpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvcmRTdHJlYW1NZXRyaWMobWV0cmljVHlwZTogTWV0cmljc1R5cGUsIHN0cmVhbUlkPzogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX21ldHJpY1N1Ym1pdHRlZCkge1xuICAgICAgcmV0dXJuIDtcbiAgICB9XG5cbiAgICB0aGlzLl9tZXRyaWNTdWJtaXR0ZWQgPSB0cnVlO1xuXG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBzZXR1cFRpbWUgPSBub3cgLSB0aGlzLl9zdGFydFRpbWU7XG4gICAgY29uc3QgbWV0cmljTmFtZSA9IG5ldyBNZXRyaWNUeXBlKG1ldHJpY1R5cGUpLmdldE5hbWUoKTtcblxuICAgIHRoaXMubWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IHNldHVwVGltZX0sXG4gICAgICBzdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBbJXNdIFN0cmVhbSBtZXRyaWMgWyVzXSBpbiBbJXNdJyxcbiAgICAgIG5ldyBEdXJhdGlvbnMobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKS50b0lzb1N0cmluZygpLFxuICAgICAgc3RyZWFtSWQsXG4gICAgICBtZXRyaWNOYW1lLFxuICAgICAgbmV3IER1cmF0aW9ucyhzZXR1cFRpbWUpLnRvSXNvU3RyaW5nKClcbiAgICApO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IEVkZ2VUb2tlbiBmcm9tICcuL0VkZ2VUb2tlbic7XG5pbXBvcnQge0VuY29kZWRFZGdlVG9rZW59IGZyb20gJy4vRW5jb2RlZEVkZ2VUb2tlbic7XG5cbmNvbnN0IGVkZ2VBdXRoVG9rZW5QcmVmaXggPSAnRElHRVNUOic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVkZ2VBdXRoUGFyc2VyIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdFZGdlQXV0aFBhcnNlcicpO1xuXG4gIHN0YXRpYyBwYXJzZVRva2VuKHRva2VuOiBFbmNvZGVkRWRnZVRva2VuKTogRWRnZVRva2VuIHtcbiAgICBpZiAoIXRoaXMuaXNFbmNvZGVkRWRnZVRva2VuVmFsaWQodG9rZW4pKSB7XG4gICAgICBFZGdlQXV0aFBhcnNlci5fbG9nZ2VyLmVycm9yKCdUb2tlbiBpcyBub3QgdmFsaWQgWyVzXScsIHRva2VuKTtcblxuICAgICAgcmV0dXJuIG5ldyBFZGdlVG9rZW4obnVsbCk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRlY29kZWRUb2tlbiA9IGF0b2IodG9rZW4uc3Vic3RyKGVkZ2VBdXRoVG9rZW5QcmVmaXgubGVuZ3RoKSk7XG4gICAgICBjb25zdCBlZGdlVG9rZW4gPSBKU09OLnBhcnNlKGRlY29kZWRUb2tlbik7XG5cbiAgICAgIGVkZ2VUb2tlbi50b2tlbiA9IEpTT04ucGFyc2UoZWRnZVRva2VuLnRva2VuKTtcblxuICAgICAgcmV0dXJuIG5ldyBFZGdlVG9rZW4oZWRnZVRva2VuKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBFZGdlQXV0aFBhcnNlci5fbG9nZ2VyLmVycm9yKCdDYW5ub3QgcGFyc2UgdG9rZW4gdmFsdWUnLCBlKTtcblxuICAgICAgcmV0dXJuIG5ldyBFZGdlVG9rZW4obnVsbCk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGlzRW5jb2RlZEVkZ2VUb2tlblZhbGlkKHRva2VuOiBFbmNvZGVkRWRnZVRva2VuKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdG9rZW4gJiYgdG9rZW4uc3RhcnRzV2l0aChlZGdlQXV0aFRva2VuUHJlZml4KTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW50ZXJmYWNlIElUb2tlbiB7XG4gIHVyaTogVVJMIHwgbnVsbDtcbiAgY2FwYWJpbGl0aWVzOiBzdHJpbmdbXTtcbn1cblxuaW50ZXJmYWNlIElFZGdlVG9rZW4ge1xuICBhcHBsaWNhdGlvbklkOiBzdHJpbmc7XG4gIHRva2VuOiBJVG9rZW47XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVkZ2VUb2tlbiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FwcGxpY2F0aW9uSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfdG9rZW46IElUb2tlbjtcblxuICBjb25zdHJ1Y3RvcihlZGdlVG9rZW46IElFZGdlVG9rZW4pIHtcbiAgICB0aGlzLl9hcHBsaWNhdGlvbklkID0gZWRnZVRva2VuPy5hcHBsaWNhdGlvbklkIHx8ICcnO1xuICAgIHRoaXMuX3Rva2VuID0ge1xuICAgICAgdXJpOiBlZGdlVG9rZW4/LnRva2VuPy51cmkgPyBuZXcgVVJMKGVkZ2VUb2tlbi50b2tlbi51cmkpIDogbnVsbCxcbiAgICAgIGNhcGFiaWxpdGllczogZWRnZVRva2VuPy50b2tlbj8uY2FwYWJpbGl0aWVzIHx8IFtdXG4gICAgfTtcbiAgfVxuXG4gIGdldCB1cmkoKTogVVJMIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3Rva2VuLnVyaTtcbiAgfVxuXG4gIGdldCBjYXBhYmlsaXRpZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLl90b2tlbi5jYXBhYmlsaXRpZXM7XG4gIH1cblxuICBnZXQgdGVuYW5jeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9hcHBsaWNhdGlvbklkO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0xvZ2dpbmdMZXZlbFR5cGV9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuaW1wb3J0IHtUZWxlbWV0cnlMZXZlbFR5cGV9IGZyb20gJy4uL21ldHJpY3MvTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuXG5kZWNsYXJlIGNvbnN0IF9fRkVBVFVSRVNfXzoge1xuICBzZW5kTG9jYWxDYW5kaWRhdGVzOiBib29sZWFuO1xuICBzZW5kTG9nczogTG9nZ2luZ0xldmVsVHlwZTtcbiAgc2VuZE1ldHJpY3M6IFRlbGVtZXRyeUxldmVsVHlwZTtcbiAgbG9nVG9Db25zb2xlOiBMb2dnaW5nTGV2ZWxUeXBlO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnVpbGRGZWF0dXJlcyB7XG4gIHByaXZhdGUgc3RhdGljIF9zZW5kTG9jYWxDYW5kaWRhdGVzOiBib29sZWFuO1xuICBwcml2YXRlIHN0YXRpYyBfc2VuZExvZ3M6IExvZ2dpbmdMZXZlbFR5cGU7XG4gIHByaXZhdGUgc3RhdGljIF9zZW5kTWV0cmljczogVGVsZW1ldHJ5TGV2ZWxUeXBlO1xuICBwcml2YXRlIHN0YXRpYyBfbG9nVG9Db25zb2xlOiBMb2dnaW5nTGV2ZWxUeXBlO1xuXG4gIHN0YXRpYyBnZXQgc2VuZExvY2FsQ2FuZGlkYXRlcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fc2VuZExvY2FsQ2FuZGlkYXRlcztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2VuZExvZ3MoKTogTG9nZ2luZ0xldmVsVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbmRMb2dzO1xuICB9XG5cbiAgc3RhdGljIGdldCBzZW5kTWV0cmljcygpOiBUZWxlbWV0cnlMZXZlbFR5cGUge1xuICAgIHJldHVybiB0aGlzLl9zZW5kTWV0cmljcztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgbG9nVG9Db25zb2xlKCk6IExvZ2dpbmdMZXZlbFR5cGUge1xuICAgIHJldHVybiB0aGlzLl9sb2dUb0NvbnNvbGU7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlGZWF0dXJlcygpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZmVhdHVyZXMgPSBfX0ZFQVRVUkVTX187XG5cbiAgICAgIHRoaXMuX3NlbmRMb2NhbENhbmRpZGF0ZXMgPSAnc2VuZExvY2FsQ2FuZGlkYXRlcycgaW4gZmVhdHVyZXMgPyBmZWF0dXJlcy5zZW5kTG9jYWxDYW5kaWRhdGVzIDogdHJ1ZTtcbiAgICAgIHRoaXMuX3NlbmRMb2dzID0gJ3NlbmRMb2dzJyBpbiBmZWF0dXJlcyA/IGZlYXR1cmVzLnNlbmRMb2dzIDogJ0FsbCc7XG4gICAgICB0aGlzLl9zZW5kTWV0cmljcyA9ICdzZW5kTWV0cmljcycgaW4gZmVhdHVyZXMgPyBmZWF0dXJlcy5zZW5kTWV0cmljcyA6ICdBbGwnO1xuICAgICAgdGhpcy5fbG9nVG9Db25zb2xlID0gJ2xvZ1RvQ29uc29sZScgaW4gZmVhdHVyZXMgPyBmZWF0dXJlcy5sb2dUb0NvbnNvbGUgOiAnQWxsJztcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9zZW5kTG9jYWxDYW5kaWRhdGVzID0gdHJ1ZTtcbiAgICAgIHRoaXMuX3NlbmRMb2dzID0gJ0FsbCc7XG4gICAgICB0aGlzLl9zZW5kTWV0cmljcyA9ICdBbGwnO1xuICAgICAgdGhpcy5fbG9nVG9Db25zb2xlID0gJ0FsbCc7XG4gICAgfVxuICB9XG59XG5cbkJ1aWxkRmVhdHVyZXMuYXBwbHlGZWF0dXJlcygpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEJyb3dzZXJEZXRlY3RvciBmcm9tICcuLi9kb20vQnJvd3NlckRldGVjdG9yJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmVhdHVyZUVuYWJsZW1lbnQge1xuICBzdGF0aWMgZ2V0IGNsaWVudE9mZmVyRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgLy8gQ2xpZW50IG9mZmVyIHdvcmtmbG93IGRvZXMgbm90IHdvcmsgY29ycmVjdGx5IGluIHRoZSBmb2xsb3dpbmcgYnJvd3NlcnNcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzQgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTc1IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3NiB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzc7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGFkZFRyYW5jZWl2ZXJEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAvLyBDaHJvbWUgNjksIDcwLCA3MSwgNzIgZXhwb3NlcyBgYWRkVHJhbmNlaXZlcmAgYnV0IGl0IGRvZXMgbm90IHdvcmsgY29ycmVjdGx5XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTY5IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3MCB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzEgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTcyO1xuICB9XG5cbiAgc3RhdGljIGdldCBnZXRTdGF0c1Byb21pc2VCYXNlZERpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDY2O1xuICB9XG5cbiAgc3RhdGljIGdldCBnZXRDdXJyZW50T2ZmZXJEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnQ2hyb21lJyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA2OSB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnRmlyZWZveCcgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNTY7XG4gIH1cblxuICBzdGF0aWMgZ2V0IG9uVHJhY2tEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnQ2hyb21lJyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA2MyB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnRmlyZWZveCcgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNTI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHdlYmtpdFJUQ1BlZXJDb25uZWN0aW9uRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnQ2hyb21lJyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA1NTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgcHJvbWlzZUJhc2VkUENNZXRob2RzRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0ZpcmVmb3gnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDUyO1xuICB9XG5cbiAgc3RhdGljIGdldCBzaG91bGRVc2VOYXRpdmVIbHMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ1NhZmFyaScgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ1NhbXN1bmdCcm93c2VyJztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNQcmVjYWNoaW5nRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lICE9PSAnSUUnO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0luc2VydGFibGVTdHJlYW1zU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhKHR5cGVvZiBNZWRpYVN0cmVhbVRyYWNrUHJvY2Vzc29yID09PSAndW5kZWZpbmVkJyB8fFxuICAgICAgdHlwZW9mIE1lZGlhU3RyZWFtVHJhY2tHZW5lcmF0b3IgPT09ICd1bmRlZmluZWQnKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNGb3JjZUNocm9tZUdhcmJhZ2VDb2xsZWN0aW9uU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIHR5cGVvZiBkb2N1bWVudD8uY3JlYXRlRWxlbWVudCA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNRdWV1ZU1pY3JvdGFza1N1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnQ2hyb21lJyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA+PSA3MSB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnRmlyZWZveCcgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPj0gNjkgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ1NhZmFyaSc7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzTW9iaWxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuaXNNb2JpbGUoKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZGVjbGFyZSBjb25zdCBfX1BBUkFNRVRFUlNfXzoge1xuICBkaXNjb3Zlcnk6IElEaXNjb3ZlcnlQYXJhbWV0ZXI7XG59O1xuXG5pbnRlcmZhY2UgSURpc2NvdmVyeVBhcmFtZXRlcntcbiAgaW50ZW50aW9uczogc3RyaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQYXJhbWV0ZXJzIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2Rpc2NvdmVyeVBhcmFtZXRlcnM6IElEaXNjb3ZlcnlQYXJhbWV0ZXIgO1xuXG4gIHN0YXRpYyBnZXQgZGlzY292ZXJ5UGFyYW1ldGVycygpOiBJRGlzY292ZXJ5UGFyYW1ldGVyIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzY292ZXJ5UGFyYW1ldGVycztcbiAgfVxuXG4gIHN0YXRpYyBhcHBseVBhcmFtZXRlcnMoKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhcmFtZXRlcnMgPSBfX1BBUkFNRVRFUlNfXztcblxuICAgICAgdGhpcy5fZGlzY292ZXJ5UGFyYW1ldGVycyA9ICdkaXNjb3ZlcnknIGluIHBhcmFtZXRlcnMgPyBwYXJhbWV0ZXJzLmRpc2NvdmVyeSA6IHtpbnRlbnRpb25zOiAnJ307XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fZGlzY292ZXJ5UGFyYW1ldGVycyA9IHtpbnRlbnRpb25zOiAnJ307XG4gICAgfVxuICB9XG59XG5cblBhcmFtZXRlcnMuYXBwbHlQYXJhbWV0ZXJzKCk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi9JRGlzcG9zYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpc3Bvc2FibGUgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgX2Rpc3Bvc2VkOiBib29sZWFuO1xuICBwcml2YXRlIF9kaXNwb3NhYmxlOiAoKSA9PiB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKGRpc3Bvc2FibGU6ICgpID0+IHZvaWQpIHtcbiAgICB0aGlzLl9kaXNwb3NlZCA9IGZhbHNlO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGUgPSBkaXNwb3NhYmxlO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9kaXNwb3NlZCA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcy5fZGlzcG9zYWJsZS5jYWxsKHRoaXMpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi9JRGlzcG9zYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpc3Bvc2FibGVMaXN0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbGlzdDogSURpc3Bvc2FibGVbXSA9IFtdO1xuXG4gIGFkZChkaXNwb3NhYmxlOiBJRGlzcG9zYWJsZSk6IHZvaWQge1xuICAgIHRoaXMuX2xpc3QucHVzaChkaXNwb3NhYmxlKTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fbGlzdC5mb3JFYWNoKGRpc3Bvc2FibGUgPT4gZGlzcG9zYWJsZS5kaXNwb3NlKCkpO1xuICAgIHRoaXMuX2xpc3QubGVuZ3RoID0gMDtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBEaXNwb3NhYmxlTGlzdFtkaXNwb3NhYmxlcz0ke3RoaXMuX2xpc3QubGVuZ3RofV1gO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdHJpbmdzIHtcbiAgc3RhdGljIHJhbmRvbShsZW5ndGg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3QgcmFuZG9tMTNDaGFyYWN0ZXJzID0gKCk6IHN0cmluZyA9PiB7XG4gICAgICByZXR1cm4gTWF0aC5yYW5kb20oKS50b1N0cmluZygxNikuc3Vic3RyaW5nKDIsIDE1KTtcbiAgICB9O1xuXG4gICAgY29uc3QgbG9vcHM6IG51bWJlciA9IE1hdGguY2VpbChsZW5ndGggLyAxMyk7XG5cbiAgICByZXR1cm4gbmV3IEFycmF5KGxvb3BzKS5maWxsKHJhbmRvbTEzQ2hhcmFjdGVycykucmVkdWNlKChzdHJpbmcsIGZ1bmMpID0+IHtcbiAgICAgIHJldHVybiBzdHJpbmcgKyBmdW5jKCk7XG4gICAgfSwgJycpLnN1YnN0cmluZygwLCBsZW5ndGgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1N0cmluZ3MgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0VW5yZWFjaGFibGUoeDogbmV2ZXIpOiBuZXZlciB7XG4gIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCB2YWx1ZSBbJHt4fV0uIFRoaXMgc2hvdWxkIG5ldmVyIGJlIHJlYWNoZWRgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXNzZXJ0VW5yZWFjaGFibGU7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lBcHBlbmRlcn0gZnJvbSAnLi9JQXBwZW5kZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcHBlbmRlcnMge1xuICBwcml2YXRlIF9hcHBlbmRlcnM6IEFycmF5PElBcHBlbmRlcj4gPSBbXTtcblxuICBnZXQgdmFsdWUoKTogQXJyYXk8SUFwcGVuZGVyPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwcGVuZGVycztcbiAgfVxuXG4gIGFkZChhcHBlbmRlcjogSUFwcGVuZGVyKTogdm9pZCB7XG4gICAgdGhpcy5fYXBwZW5kZXJzLnB1c2goYXBwZW5kZXIpO1xuICB9XG5cbiAgcmVtb3ZlKGFwcGVuZGVyKTogdm9pZCB7XG4gICAgdGhpcy5fYXBwZW5kZXJzID0gdGhpcy5fYXBwZW5kZXJzLnJlZHVjZSgoaXRlbXMsIGl0ZW0pID0+IHtcbiAgICAgIGlmICghKGl0ZW0gPT09IGFwcGVuZGVyKSkge1xuICAgICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaXRlbXM7XG4gICAgfSwgW10gYXMgQXJyYXk8SUFwcGVuZGVyPik7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7SUFwcGVuZGVyfSBmcm9tICcuL0lBcHBlbmRlcic7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb25zb2xlQXBwZW5kZXIgaW1wbGVtZW50cyBJQXBwZW5kZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF90aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbDtcblxuICBsb2cobG9nTGV2ZWw6IExvZ2dpbmdMZXZlbCwgbWVzc2FnZTogc3RyaW5nLCBjYXRlZ29yeTogc3RyaW5nLCBkYXRlOiBEYXRlKTogdm9pZCB7XG4gICAgaWYgKGxvZ0xldmVsIDwgdGhpcy5fdGhyZXNob2xkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZnVsbE1lc3NhZ2UgPSBgJHtkYXRlLnRvSVNPU3RyaW5nKCl9IFske2NhdGVnb3J5fV0gWyR7TG9nZ2luZ0xldmVsW2xvZ0xldmVsXX1dICR7bWVzc2FnZX1gO1xuXG4gICAgaWYgKGxvZ0xldmVsIDwgTG9nZ2luZ0xldmVsLldhcm4pIHtcbiAgICAgIGNvbnNvbGUubG9nKGZ1bGxNZXNzYWdlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnNvbGUuZXJyb3IoZnVsbE1lc3NhZ2UpO1xuICB9XG5cbiAgY29uc3RydWN0b3IodGhyZXNob2xkOiBMb2dnaW5nTGV2ZWwpIHtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7SUFwcGVuZGVyfSBmcm9tICcuL0lBcHBlbmRlcic7XG5pbXBvcnQgQXBwZW5kZXJzIGZyb20gJy4vQXBwZW5kZXJzJztcbmltcG9ydCBMb2dnaW5nVGhyZXNob2xkIGZyb20gJy4vTG9nZ2luZ1RocmVzaG9sZCc7XG5cbmV4cG9ydCBlbnVtIExvZ2dpbmdMZXZlbCB7XG4gIEFsbCA9IC0xLFxuICBUcmFjZSA9IDEwLFxuICBEZWJ1ZyA9IDIwLFxuICBJbmZvID0gMzAsXG4gIFdhcm4gPSA0MCxcbiAgRXJyb3IgPSA1MCxcbiAgRmF0YWwgPSA2MCxcbiAgT2ZmID0gMTAwLFxufVxuXG5leHBvcnQgdHlwZSBMb2dnaW5nTGV2ZWxUeXBlID0gJ09mZicgfCAnVHJhY2UnIHwgJ0RlYnVnJyB8ICdJbmZvJyB8ICdXYXJuJyB8ICdFcnJvcicgfCAnRmF0YWwnIHwgJ0FsbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvZ2dlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NhdGVnb3J5OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FwcGVuZGVyczogQXBwZW5kZXJzO1xuICBwcml2YXRlIHJlYWRvbmx5IF90aHJlc2hvbGQ6IExvZ2dpbmdUaHJlc2hvbGQ7XG5cbiAgZ2V0IGNhdGVnb3J5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2NhdGVnb3J5O1xuICB9XG5cbiAgZ2V0IGFwcGVuZGVycygpOiBBcHBlbmRlcnMge1xuICAgIHJldHVybiB0aGlzLl9hcHBlbmRlcnM7XG4gIH1cblxuICBnZXQgdGhyZXNob2xkKCk6IExvZ2dpbmdUaHJlc2hvbGQge1xuICAgIHJldHVybiB0aGlzLl90aHJlc2hvbGQ7XG4gIH1cblxuICB0cmFjZSguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuVHJhY2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuVHJhY2UsIGFyZ3MpO1xuICB9XG5cbiAgZGVidWcoLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLkRlYnVnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLkRlYnVnLCBhcmdzKTtcbiAgfVxuXG4gIGluZm8oLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLkluZm8pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuSW5mbywgYXJncyk7XG4gIH1cblxuICB3YXJuKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5XYXJuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLldhcm4sIGFyZ3MpO1xuICB9XG5cbiAgZXJyb3IoLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLkVycm9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLkVycm9yLCBhcmdzKTtcbiAgfVxuXG4gIGZhdGFsKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5GYXRhbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nKExvZ2dpbmdMZXZlbC5GYXRhbCwgYXJncyk7XG4gIH1cblxuICBwcml2YXRlIGxvZyhsZXZlbDogbnVtYmVyLCBhcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoKTtcbiAgICBjb25zdCBtZXNzYWdlID0gdGhpcy5yZXBsYWNlUGxhY2Vob2xkZXJzKGFyZ3MpO1xuXG4gICAgdGhpcy5fYXBwZW5kZXJzLnZhbHVlLmZvckVhY2goKGFwcGVuZGVyOiBJQXBwZW5kZXIpID0+IHtcbiAgICAgIGFwcGVuZGVyLmxvZyhsZXZlbCwgbWVzc2FnZSwgdGhpcy5jYXRlZ29yeSwgZGF0ZSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlcGxhY2VQbGFjZWhvbGRlcnMoYXJnczogYW55KTogc3RyaW5nIHtcbiAgICBsZXQgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyA9IGFyZ3NbMF07XG4gICAgbGV0IGluZGV4ID0gMDtcblxuICAgIHdoaWxlIChyZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLmluZGV4T2YgJiYgYXJncy5sZW5ndGggPiAxICYmIGluZGV4ID49IDApIHtcbiAgICAgIGluZGV4ID0gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5pbmRleE9mKCclJywgaW5kZXgpO1xuXG4gICAgICBpZiAoaW5kZXggPiAwKSB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZyhpbmRleCArIDEsIGluZGV4ICsgMik7XG5cbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgY2FzZSAnJSc6XG4gICAgICAgICAgICAvLyBFc2NhcGVkICclJScgdHVybnMgaW50byAnJSdcbiAgICAgICAgICAgIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcgPSByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZygwLCBpbmRleCkgKyByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZyhpbmRleCArIDEpO1xuICAgICAgICAgICAgaW5kZXgrKztcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAncyc6XG4gICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAvLyBSZXBsYWNlICclZCcgb3IgJyVzJyB3aXRoIHRoZSBhcmd1bWVudFxuICAgICAgICAgICAgYXJnc1swXSA9IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcgPSB0aGlzLnJlcGxhY2VBcmd1bWVudChcbiAgICAgICAgICAgICAgdGhpcy50b1N0cmluZyhhcmdzWzFdKSxcbiAgICAgICAgICAgICAgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyxcbiAgICAgICAgICAgICAgaW5kZXhcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBhcmdzLnNwbGljZSgxLCAxKTtcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnaic6XG4gICAgICAgICAgICAvLyBSZXBsYWNlICVqJyB3aXRoIHRoZSBhcmd1bWVudFxuICAgICAgICAgICAgYXJnc1swXSA9IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcgPSB0aGlzLnJlcGxhY2VBcmd1bWVudChcbiAgICAgICAgICAgICAgdGhpcy5zdHJpbmdpZnkoYXJnc1sxXSksXG4gICAgICAgICAgICAgIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcsXG4gICAgICAgICAgICAgIGluZGV4XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBhcmdzLnNwbGljZSgxLCAxKTtcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBhcmdzLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYXJncy5sZW5ndGggPiAxKSB7XG4gICAgICBhcmdzID0gYXJncy5yZWR1Y2UoKGFjY3VtdWxhdG9yLCBjdXJyZW50VmFsdWUsIGluZGV4LCBhcnJheSkgPT4ge1xuICAgICAgICBpZiAoaW5kZXggKyAxID09PSBhcnJheS5sZW5ndGggJiYgY3VycmVudFZhbHVlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gYWNjdW11bGF0b3IgKyAnXFxuJyArIHRoaXMudG9TdHJpbmcoY3VycmVudFZhbHVlLnN0YWNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhY2N1bXVsYXRvciArIGBbJHt0aGlzLnRvU3RyaW5nKGN1cnJlbnRWYWx1ZSl9XWA7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJncy50b1N0cmluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdHJpbmdpZnkoYXJnOiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNhY2hlID0gW107XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KFxuICAgICAgICBhcmcgaW5zdGFuY2VvZiBFcnJvciA/IHRoaXMudG9TdHJpbmcoYXJnKSA6IGFyZyxcbiAgICAgICAgKGtleSwgdmFsdWUpID0+IHtcbiAgICAgICAgICBpZiAoISF2YWx1ZSAmJiB2YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICAgICAgaWYgKGNhY2hlLmluY2x1ZGVzKHZhbHVlKSkge1xuICAgICAgICAgICAgICByZXR1cm4gJzxyZWN1cnNpdmU+JztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2FjaGUucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICAyXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiAnW29iamVjdCBpbnZhbGlkIEpTT04uc3RyaW5naWZ5XSc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXBsYWNlQXJndW1lbnQoYXJndW1lbnQ6IGFueSwgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZzogc3RyaW5nLCBpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5zdWJzdHJpbmcoMCwgaW5kZXgpICsgdGhpcy50b1N0cmluZyhhcmd1bWVudCkgKyByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZyhpbmRleCArIDIpO1xuICB9XG5cbiAgcHJpdmF0ZSB0b1N0cmluZyhkYXRhOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICByZXR1cm4gZGF0YSA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIGRhdGEudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBsZXQgdG9TdHJpbmdTdHIgPSAnJztcblxuICAgIGlmIChkYXRhKSB7XG4gICAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdG9TdHJpbmdTdHIgPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICB9IGVsc2UgaWYgKGRhdGEgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0b1N0cmluZ1N0ciA9IGRhdGEudG9TdHJpbmcoKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHRvU3RyaW5nU3RyID0gJ1tvYmplY3QgaW52YWxpZCB0b1N0cmluZygpXSc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdG9TdHJpbmdTdHI7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihjYXRlZ29yeTogc3RyaW5nLCBhcHBlbmRlcnM6IEFwcGVuZGVycywgdGhyZXNob2xkOiBMb2dnaW5nVGhyZXNob2xkKSB7XG4gICAgdGhpcy5fY2F0ZWdvcnkgPSBjYXRlZ29yeTtcbiAgICB0aGlzLl9hcHBlbmRlcnMgPSBhcHBlbmRlcnM7XG4gICAgdGhpcy5fdGhyZXNob2xkID0gdGhyZXNob2xkO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgQnVpbGRGZWF0dXJlcyBmcm9tICcuLi9lbnZpcm9ubWVudC9CdWlsZEZlYXR1cmVzJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9nZ2VyRGVmYXVsdHMge1xuICBzdGF0aWMgZ2V0IGRlZmF1bHRMb2dnaW5nTGV2ZWwoKTogTG9nZ2luZ0xldmVsIHtcbiAgICByZXR1cm4gTG9nZ2luZ0xldmVsW0J1aWxkRmVhdHVyZXMuc2VuZExvZ3NdO1xuICB9XG5cbiAgc3RhdGljIGdldCBkZWZhdWx0Q29uc29sZUxvZ2dpbmdMZXZlbCgpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHJldHVybiBMb2dnaW5nTGV2ZWxbQnVpbGRGZWF0dXJlcy5sb2dUb0NvbnNvbGVdO1xuICB9XG5cbiAgc3RhdGljIGdldCBkZWZhdWx0VGVsZW1ldHJ5TG9nZ2luZ0xldmVsKCk6IExvZ2dpbmdMZXZlbCB7XG4gICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5JbmZvO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4vTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXIsIHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4vTG9nZ2VyJztcbmltcG9ydCBBcHBlbmRlcnMgZnJvbSAnLi9BcHBlbmRlcnMnO1xuaW1wb3J0IExvZ2dpbmdUaHJlc2hvbGQgZnJvbSAnLi9Mb2dnaW5nVGhyZXNob2xkJztcbmltcG9ydCBDb25zb2xlQXBwZW5kZXIgZnJvbSAnLi9Db25zb2xlQXBwZW5kZXInO1xuaW1wb3J0IFRlbGVtZXRyeUFwcGVuZGVyIGZyb20gJy4uL3RlbGVtZXRyeS9UZWxlbWV0cnlBcGVuZGVyJztcbmltcG9ydCBUZWxlbWV0cnlDb25maWd1cmF0aW9uIGZyb20gJy4uL3RlbGVtZXRyeS9UZWxlbWV0cnlDb25maWd1cmF0aW9uJztcbmltcG9ydCBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIGZyb20gJy4uL2RvbS9Db25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyJztcbmltcG9ydCB7SUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXJ9IGZyb20gJy4uL2RvbS9JQ29uZmlndXJhdGlvblBhcmFtYXRlclJlYWRlcic7XG5pbXBvcnQgTG9nZ2VyRGVmYXVsdHMgZnJvbSAnLi9Mb2dnZXJEZWZhdWx0cyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvZ2dlckZhY3Rvcnkge1xuICBwcml2YXRlIHN0YXRpYyBfY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcjogSUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIgPSBuZXcgQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcigpO1xuICBwcml2YXRlIHN0YXRpYyBfbG9nZ2Vyczoge1tjYXRlZ29yeTogc3RyaW5nXTogSUxvZ2dlcn0gPSB7fTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2FwcGVuZGVyczogQXBwZW5kZXJzID0gbmV3IEFwcGVuZGVycygpO1xuICBwcml2YXRlIHN0YXRpYyBfdGhyZXNob2xkOiBMb2dnaW5nVGhyZXNob2xkID0gbmV3IExvZ2dpbmdUaHJlc2hvbGQoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb246IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24gPSBuZXcgVGVsZW1ldHJ5Q29uZmlndXJhdGlvbigpO1xuXG4gIHN0YXRpYyBnZXQgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbigpOiBUZWxlbWV0cnlDb25maWd1cmF0aW9uIHtcbiAgICByZXR1cm4gTG9nZ2VyRmFjdG9yeS5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIHN0YXRpYyBnZXRMb2dnZXIoY2F0ZWdvcnk6IHN0cmluZyk6IElMb2dnZXIge1xuICAgIGlmICh0eXBlb2YgY2F0ZWdvcnkgIT09ICdzdHJpbmcnKSB7XG4gICAgICBjYXRlZ29yeSA9ICdTREsnO1xuICAgIH1cblxuICAgIGNvbnN0IGxvZ2dlciA9IExvZ2dlckZhY3RvcnkuX2xvZ2dlcnNbY2F0ZWdvcnldO1xuXG4gICAgaWYgKGxvZ2dlcikge1xuICAgICAgcmV0dXJuIGxvZ2dlcjtcbiAgICB9XG5cbiAgICByZXR1cm4gTG9nZ2VyRmFjdG9yeS5fbG9nZ2Vyc1tjYXRlZ29yeV0gPSBuZXcgTG9nZ2VyKGNhdGVnb3J5LCB0aGlzLl9hcHBlbmRlcnMsIHRoaXMuX3RocmVzaG9sZCk7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlMb2dnZXJDb25maWdGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICBMb2dnZXJGYWN0b3J5LmFwcGx5TG9nZ2luZ0xldmVsKCk7XG4gICAgTG9nZ2VyRmFjdG9yeS5hcHBseUFwcGVuZGVyTG9nZ2luZ0xldmVsKCdjb25zb2xlJywgTG9nZ2VyRmFjdG9yeS5hcHBseUNvbnNvbGVMb2dnZXIuYmluZCh0aGlzKSk7XG4gICAgTG9nZ2VyRmFjdG9yeS5hcHBseUFwcGVuZGVyTG9nZ2luZ0xldmVsKCd0ZWxlbWV0cnknLCBMb2dnZXJGYWN0b3J5LmFwcGx5VGVsZW1ldHJ5TG9nZ2VyLmJpbmQodGhpcykpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXBwbHlMb2dnaW5nTGV2ZWwoKTogdm9pZCB7XG4gICAgY29uc3QgcGFyYW1ldGVyVmFsdWUgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKCdwaGVuaXgtbG9nZ2luZy1sZXZlbCcpO1xuXG4gICAgaWYgKExvZ2dpbmdMZXZlbFtwYXJhbWV0ZXJWYWx1ZV0pIHtcbiAgICAgIHRoaXMuX3RocmVzaG9sZC5zZXRUaHJlc2hvbGQoTG9nZ2luZ0xldmVsW3BhcmFtZXRlclZhbHVlXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXBwbHlBcHBlbmRlckxvZ2dpbmdMZXZlbChuYW1lOiBzdHJpbmcsIGFwcGx5QXBwZW5kZXI6IChsZXZlbDogTG9nZ2luZ0xldmVsKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgY29uc3QgcGFyYW1ldGVyVmFsdWUgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKGBwaGVuaXgtJHtuYW1lfS1sb2dnaW5nLWxldmVsYCk7XG5cbiAgICBpZiAocGFyYW1ldGVyVmFsdWUgPT09ICdPZmYnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYXBwbHlBcHBlbmRlcihMb2dnaW5nTGV2ZWxbcGFyYW1ldGVyVmFsdWVdKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFwcGx5Q29uc29sZUxvZ2dlcihsZXZlbDogTG9nZ2luZ0xldmVsKTogdm9pZCB7XG4gICAgdGhpcy5fYXBwZW5kZXJzLmFkZChuZXcgQ29uc29sZUFwcGVuZGVyKGxldmVsIHx8IExvZ2dlckRlZmF1bHRzLmRlZmF1bHRDb25zb2xlTG9nZ2luZ0xldmVsKSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhcHBseVRlbGVtZXRyeUxvZ2dlcihsZXZlbDogTG9nZ2luZ0xldmVsKTogdm9pZCB7XG4gICAgdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50aHJlc2hvbGQgPSBsZXZlbCB8fCBMb2dnZXJEZWZhdWx0cy5kZWZhdWx0VGVsZW1ldHJ5TG9nZ2luZ0xldmVsO1xuXG4gICAgdGhpcy5fYXBwZW5kZXJzLmFkZChuZXcgVGVsZW1ldHJ5QXBwZW5kZXIodGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbikpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0xvZ2dlckZhY3RvcnkgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59XG5cbkxvZ2dlckZhY3RvcnkuYXBwbHlMb2dnZXJDb25maWdGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWwsIExvZ2dpbmdMZXZlbFR5cGV9IGZyb20gJy4vTG9nZ2VyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9nZ2luZ0xldmVsTWFwcGluZyB7XG4gIHN0YXRpYyBjb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlKGxvZ2dpbmdMZXZlbDogTG9nZ2luZ0xldmVsKTogTG9nZ2luZ0xldmVsVHlwZSB7XG4gICAgc3dpdGNoIChsb2dnaW5nTGV2ZWwpIHtcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLk9mZjpcbiAgICAgICAgcmV0dXJuICdPZmYnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuVHJhY2U6XG4gICAgICAgIHJldHVybiAnVHJhY2UnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuRGVidWc6XG4gICAgICAgIHJldHVybiAnRGVidWcnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuSW5mbzpcbiAgICAgICAgcmV0dXJuICdUcmFjZSc7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5XYXJuOlxuICAgICAgICByZXR1cm4gJ1dhcm4nO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuRXJyb3I6XG4gICAgICAgIHJldHVybiAnRXJyb3InO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuRmF0YWw6XG4gICAgICAgIHJldHVybiAnRmF0YWwnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuQWxsOlxuICAgICAgICByZXR1cm4gJ0FsbCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShsb2dnaW5nTGV2ZWwpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBjb252ZXJ0TG9nZ2luZ0xldmVsVHlwZVRvTG9nZ2luZ0xldmVsKGxvZ2dpbmdMZXZlbFR5cGU6IExvZ2dpbmdMZXZlbFR5cGUpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHN3aXRjaCAobG9nZ2luZ0xldmVsVHlwZSkge1xuICAgICAgY2FzZSAnT2ZmJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5PZmY7XG4gICAgICBjYXNlICdUcmFjZSc6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuVHJhY2U7XG4gICAgICBjYXNlICdEZWJ1Zyc6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuRGVidWc7XG4gICAgICBjYXNlICdJbmZvJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5JbmZvO1xuICAgICAgY2FzZSAnV2Fybic6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuV2FybjtcbiAgICAgIGNhc2UgJ0Vycm9yJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5FcnJvcjtcbiAgICAgIGNhc2UgJ0ZhdGFsJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5GYXRhbDtcbiAgICAgIGNhc2UgJ0FsbCc6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuQWxsO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUobG9nZ2luZ0xldmVsVHlwZSk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRGVmYXVsdHMgZnJvbSAnLi9Mb2dnZXJEZWZhdWx0cyc7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2dnaW5nVGhyZXNob2xkIHtcbiAgcHJpdmF0ZSBfdGhyZXNob2xkOiBMb2dnaW5nTGV2ZWwgPSBMb2dnZXJEZWZhdWx0cy5kZWZhdWx0TG9nZ2luZ0xldmVsO1xuXG4gIGdldCB2YWx1ZSgpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHJldHVybiB0aGlzLl90aHJlc2hvbGQ7XG4gIH1cblxuICBzZXRUaHJlc2hvbGQodGhyZXNob2xkOiBMb2dnaW5nTGV2ZWwpOiB2b2lkIHtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7VGVsZW1ldHJ5TGV2ZWx9IGZyb20gJy4vTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IE1ldHJpY3NUeXBlIGZyb20gJy4vTWV0cmljc1R5cGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXRyaWNUeXBlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWV0cmljczogTWV0cmljc1R5cGU7XG5cbiAgY29uc3RydWN0b3IobWV0cmljczogTWV0cmljc1R5cGUpIHtcbiAgICB0aGlzLl9tZXRyaWNzID0gbWV0cmljcztcbiAgfVxuXG4gIGdldE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gTWV0cmljc1R5cGVbdGhpcy5fbWV0cmljc107XG4gIH1cblxuICBnZXRUZWxlbWV0cnlMZXZlbCgpOiBUZWxlbWV0cnlMZXZlbCB7XG4gICAgc3dpdGNoICh0aGlzLl9tZXRyaWNzKSB7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlRpbWVUb0ZpcnN0RnJhbWU6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5Fc3NlbnRpYWw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkNoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWU6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5Fc3NlbnRpYWw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlN0YWxsZWQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkJ1ZmZlcmluZzpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuU2V0dXBDb21wbGV0ZWQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlNldHVwRmFpbGVkOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5Sb3VuZFRyaXBUaW1lOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5Eb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eTpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuTmV0d29ya1R5cGU6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlJlc29sdXRpb25DaGFuZ2VkOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5BcHBsaWNhdGlvbkZvcmVncm91bmQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkFwcGxpY2F0aW9uQmFja2dyb3VuZDpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRoaXMuX21ldHJpY3MpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFRlbGVtZXRyeURlZmF1bHQgZnJvbSAnLi9UZWxlbWV0cnlEZWZhdWx0JztcblxuZXhwb3J0IGVudW0gVGVsZW1ldHJ5TGV2ZWwge1xuICBPZmYgPSAxMDAsXG4gIEVzc2VudGlhbCA9IDEwLFxuICBBbGwgPSAtMVxufVxuXG5leHBvcnQgdHlwZSBUZWxlbWV0cnlMZXZlbFR5cGUgPSAnT2ZmJyB8ICdFc3NlbnRpYWwnIHwgJ0FsbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1ldHJpY3NDb25maWd1cmF0aW9uIHtcbiAgcHJpdmF0ZSBfdXJsID0gJ2h0dHBzOi8vdGVsZW1ldHJ5LnBoZW5peHJ0cy5jb20vdGVsZW1ldHJ5L21ldHJpY3MnO1xuICBwcml2YXRlIF90ZW5hbmN5OiBzdHJpbmc7XG4gIHByaXZhdGUgX3Nlc3Npb25JZDogc3RyaW5nO1xuICBwcml2YXRlIF9lbnZpcm9ubWVudDogc3RyaW5nO1xuICBwcml2YXRlIF90aHJlc2hvbGQ6IFRlbGVtZXRyeUxldmVsID0gVGVsZW1ldHJ5RGVmYXVsdC5kZWZhdWx0VGVsZW1ldHJ5TGV2ZWw7XG5cbiAgZ2V0IHVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl91cmw7XG4gIH1cblxuICBzZXQgdXJsKHVybDogc3RyaW5nKSB7XG4gICAgY29uc3QgbWV0cmljc1VybCA9IG5ldyBVUkwodXJsKTtcblxuICAgIG1ldHJpY3NVcmwucGF0aG5hbWUgPSBtZXRyaWNzVXJsLnBhdGhuYW1lICsgJy9tZXRyaWNzJztcblxuICAgIHRoaXMuX3VybCA9IG1ldHJpY3NVcmwudG9TdHJpbmcoKTtcbiAgfVxuXG4gIGdldCBlbnZpcm9ubWVudCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9lbnZpcm9ubWVudDtcbiAgfVxuXG4gIHNldCBlbnZpcm9ubWVudChlbnZpcm9ubWVudDogc3RyaW5nKSB7XG4gICAgdGhpcy5fZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudDtcbiAgfVxuXG4gIGdldCB0ZW5hbmN5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3RlbmFuY3k7XG4gIH1cblxuICBzZXQgdGVuYW5jeSh0ZW5hbmN5OiBzdHJpbmcpIHtcbiAgICB0aGlzLl90ZW5hbmN5ID0gdGVuYW5jeTtcbiAgfVxuXG4gIGdldCBzZXNzaW9uSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc2Vzc2lvbklkO1xuICB9XG5cbiAgc2V0IHNlc3Npb25JZChzZXNzaW9uSWQ6IHN0cmluZykge1xuICAgIHRoaXMuX3Nlc3Npb25JZCA9IHNlc3Npb25JZDtcbiAgfVxuXG4gIGdldCB0aHJlc2hvbGQoKTogVGVsZW1ldHJ5TGV2ZWwge1xuICAgIHJldHVybiB0aGlzLl90aHJlc2hvbGQ7XG4gIH1cblxuICBzZXQgdGhyZXNob2xkKHRocmVzaG9sZDogVGVsZW1ldHJ5TGV2ZWwpIHtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4vTWV0cmljc1NlcnZpY2UnO1xuaW1wb3J0IE1ldHJpY3NDb25maWd1cmF0aW9uLCB7VGVsZW1ldHJ5TGV2ZWx9IGZyb20gJy4vTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IFNESyBmcm9tICcuLi9zZGsvU0RLJztcbmltcG9ydCBUZWxlbWV0cnlVcmwgZnJvbSAnLi4vc2RrL1RlbGVtZXRyeVVybCc7XG5pbXBvcnQgRW52aXJvbm1lbnQgZnJvbSAnLi4vc2RrL0Vudmlyb25tZW50JztcbmltcG9ydCBUZWxlbWV0cnlMZXZlbE1hcHBpbmcgZnJvbSAnLi9UZWxlbWV0cmljTGV2ZWxNYXBwaW5nJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0cmljc0ZhY3Rvcnkge1xuICBwcml2YXRlIHN0YXRpYyBfbWV0cmljc1NlcnZpY2VzOiB7W2NhdGVnb3J5OiBzdHJpbmddOiBNZXRyaWNzU2VydmljZX0gPSB7fTtcblxuICBzdGF0aWMgZ2V0TWV0cmljc1NlcnZpY2UodXJsOiBzdHJpbmcpOiBNZXRyaWNzU2VydmljZSB7XG4gICAgaWYgKHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VyJyk7XG4gICAgfVxuXG4gICAgY29uc3QgbWV0cmljc1NlcnZpY2VzID0gTWV0cmljc0ZhY3RvcnkuX21ldHJpY3NTZXJ2aWNlc1t1cmxdO1xuXG4gICAgaWYgKG1ldHJpY3NTZXJ2aWNlcykge1xuICAgICAgcmV0dXJuIG1ldHJpY3NTZXJ2aWNlcztcbiAgICB9XG5cbiAgICBjb25zdCBtZXRyaWNzQ29uZmlndXJhdGlvbiA9IG5ldyBNZXRyaWNzQ29uZmlndXJhdGlvbigpO1xuXG4gICAgbWV0cmljc0NvbmZpZ3VyYXRpb24uc2Vzc2lvbklkID0gU0RLLmNsaWVudFNlc3Npb25JZDtcbiAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi50ZW5hbmN5ID0gU0RLLnRlbmFuY3kudmFsdWU7XG4gICAgbWV0cmljc0NvbmZpZ3VyYXRpb24udXJsID0gVGVsZW1ldHJ5VXJsLmdldFRlbGVtZXRyeVVybCh1cmwpO1xuICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLmVudmlyb25tZW50ID0gRW52aXJvbm1lbnQuZ2V0RW52aXJvbm1lbnRGcm9tVXJsKHVybCk7XG5cbiAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi50aHJlc2hvbGQgPSBUZWxlbWV0cnlMZXZlbE1hcHBpbmcuY29udmVydFRlbGVtZXRyeUxldmVsVHlwZVRvVGVsZW1ldHJ5TGV2ZWwoU0RLLnRlbGVtZXRyeUxldmVsKTtcblxuICAgIHJldHVybiBNZXRyaWNzRmFjdG9yeS5fbWV0cmljc1NlcnZpY2VzW3VybF0gPSBuZXcgTWV0cmljc1NlcnZpY2UobWV0cmljc0NvbmZpZ3VyYXRpb24pO1xuICB9XG5cbiAgc3RhdGljIHNldFRlbGVtZXRyeUxldmVsKHRlbGVtZXRyeUxldmVsOiBUZWxlbWV0cnlMZXZlbCk6IHZvaWQge1xuICAgIGNvbnN0IG1ldHJpY3NTZXJ2aWNlcyA9IE9iamVjdC52YWx1ZXMoTWV0cmljc0ZhY3RvcnkuX21ldHJpY3NTZXJ2aWNlcyk7XG5cbiAgICBpZiAobWV0cmljc1NlcnZpY2VzICYmIG1ldHJpY3NTZXJ2aWNlcy5sZW5ndGgpIHtcbiAgICAgIG1ldHJpY3NTZXJ2aWNlcy5mb3JFYWNoKG1ldHJpY3NTZXJ2aWNlID0+IHtcbiAgICAgICAgY29uc3QgbWV0cmljc0NvbmZpZ3VyYXRpb24gPSBtZXRyaWNzU2VydmljZS5tZXRyaWNzQ29uZmlndXJhdGlvbjtcblxuICAgICAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi50aHJlc2hvbGQgPSB0ZWxlbWV0cnlMZXZlbDtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdMb2dnZXJGYWN0b3J5IGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFZlcnNpb25NYW5hZ2VyIGZyb20gJy4uL3Nkay92ZXJzaW9uL1ZlcnNpb25NYW5hZ2VyJztcbmltcG9ydCBNZXRyaWNzQ29uZmlndXJhdGlvbiBmcm9tICcuL01ldHJpY3NDb25maWd1cmF0aW9uJztcbmltcG9ydCBNZXRyaWNUeXBlIGZyb20gJy4vTWV0cmljVHlwZSc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi9NZXRyaWNzVHlwZSc7XG5cbmNvbnN0IHJlcXVlc3RTaXplTGltaXQgPSAxMDI0O1xuXG5pbnRlcmZhY2UgSVZhbHVlIHtcbiAgc3RyaW5nPzogc3RyaW5nO1xuICB1aW50NjQ/OiBudW1iZXI7XG4gIGZsb2F0PzogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgSU1ldHJpY1JlY29yZCB7XG4gIHRpbWVzdGFtcDogc3RyaW5nO1xuICB0ZW5hbmN5OiBzdHJpbmc7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICBzdHJlYW1JZDogc3RyaW5nO1xuICBtZXRyaWM6IHN0cmluZztcbiAgdmFsdWU6IElWYWx1ZTtcbiAgcHJldmlvdXNWYWx1ZTogSVZhbHVlO1xuICBmdWxsUXVhbGlmaWVkTmFtZTogc3RyaW5nO1xuICBlbnZpcm9ubWVudDogc3RyaW5nO1xuICB2ZXJzaW9uOiBzdHJpbmc7XG4gIHJ1bnRpbWU6IG51bWJlcjtcbiAgcmVzb3VyY2U/OiBzdHJpbmc7XG4gIGtpbmQ/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBJTWV0cmljIHtcbiAgc3RyZWFtSWQ/OiBzdHJpbmc7XG4gIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlO1xuICB2YWx1ZT86IElWYWx1ZTtcbiAgcHJldmlvdXNWYWx1ZT86IElWYWx1ZTtcbiAgcnVudGltZTogbnVtYmVyO1xuICByZXNvdXJjZT86IHN0cmluZztcbiAga2luZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0cmljc1NlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IF9tZXRyaWNzQ29uZmlndXJhdGlvbjogTWV0cmljc0NvbmZpZ3VyYXRpb247XG4gIHByaXZhdGUgX21ldHJpY3M6IEFycmF5PElNZXRyaWNSZWNvcmQ+ID0gW107XG4gIHByaXZhdGUgX2lzU2VuZGluZzogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfZG9tYWluID0gbG9jYXRpb24uaG9zdG5hbWU7XG5cbiAgY29uc3RydWN0b3IobWV0cmljc0NvbmZpZ3VyYXRpb246IE1ldHJpY3NDb25maWd1cmF0aW9uKSB7XG4gICAgdGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb24gPSBtZXRyaWNzQ29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIGdldCBtZXRyaWNzQ29uZmlndXJhdGlvbigpOiBNZXRyaWNzQ29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uO1xuICB9XG5cbiAgcHVzaChtZXRyaWM6IElNZXRyaWMpOiB2b2lkIHtcbiAgICBjb25zdCB7c3RyZWFtSWQsIHZhbHVlLCBwcmV2aW91c1ZhbHVlLCBydW50aW1lLCByZXNvdXJjZSwga2luZH0gPSBtZXRyaWM7XG4gICAgY29uc3QgbWV0cmljVHlwZSA9IG5ldyBNZXRyaWNUeXBlKG1ldHJpYy5tZXRyaWNUeXBlKTtcblxuICAgIGlmICh0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbi50aHJlc2hvbGQgPiBtZXRyaWNUeXBlLmdldFRlbGVtZXRyeUxldmVsKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBtZXRyaWNSZWNvcmQgPSB7XG4gICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIHRlbmFuY3k6IHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLnRlbmFuY3ksXG4gICAgICBzZXNzaW9uSWQ6IHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLnNlc3Npb25JZCxcbiAgICAgIHN0cmVhbUlkLFxuICAgICAgbWV0cmljOiBtZXRyaWNUeXBlLmdldE5hbWUoKSxcbiAgICAgIHZhbHVlLFxuICAgICAgcHJldmlvdXNWYWx1ZSxcbiAgICAgIGZ1bGxRdWFsaWZpZWROYW1lOiB0aGlzLl9kb21haW4sXG4gICAgICBlbnZpcm9ubWVudDogdGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQsXG4gICAgICB2ZXJzaW9uOiBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uLFxuICAgICAgcnVudGltZSxcbiAgICAgIHJlc291cmNlLFxuICAgICAga2luZFxuICAgIH07XG5cbiAgICB0aGlzLl9tZXRyaWNzLnB1c2gobWV0cmljUmVjb3JkKTtcblxuICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRNZXRyaWNzSWZBYmxlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlbmRNZXRyaWNzKG1ldHJpY3NNZXNzYWdlczogQXJyYXk8SU1ldHJpY1JlY29yZD4pOiBQcm9taXNlPFJlc3BvbnNlIHwgdm9pZD4ge1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoe3JlY29yZHM6IG1ldHJpY3NNZXNzYWdlc30pKTtcblxuICAgIHJldHVybiBhd2FpdCBmZXRjaCh0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbi51cmwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogZm9ybURhdGFcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2VuZE1ldHJpY3NJZkFibGUoKTogUHJvbWlzZTxSZXNwb25zZSB8IHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fbWV0cmljcy5sZW5ndGggPD0gMCB8fCB0aGlzLl9pc1NlbmRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pc1NlbmRpbmcgPSB0cnVlO1xuXG4gICAgY29uc3QgbWV0cmljc01lc3NhZ2VzID0gdGhpcy5fbWV0cmljcy5zbGljZSgwLCByZXF1ZXN0U2l6ZUxpbWl0KTtcblxuICAgIHRoaXMuX21ldHJpY3MgPSB0aGlzLl9tZXRyaWNzLnNsaWNlKHJlcXVlc3RTaXplTGltaXQpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2VuZE1ldHJpY3MobWV0cmljc01lc3NhZ2VzKS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgIHRoaXMuX2lzU2VuZGluZyA9IGZhbHNlO1xuXG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTWV0cmljc0lmQWJsZSgpO1xuXG4gICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgdGhpcy5faXNTZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRNZXRyaWNzSWZBYmxlKCk7XG4gICAgfSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmVudW0gTWV0cmljc1R5cGUge1xuICBUaW1lVG9GaXJzdEZyYW1lLFxuICBDaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lLFxuICBTdGFsbGVkLFxuICBCdWZmZXJpbmcsXG4gIFNldHVwQ29tcGxldGVkLFxuICBTZXR1cEZhaWxlZCxcbiAgUm91bmRUcmlwVGltZSxcbiAgRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHksXG4gIE5ldHdvcmtUeXBlLFxuICBSZXNvbHV0aW9uQ2hhbmdlZCxcbiAgQXBwbGljYXRpb25Gb3JlZ3JvdW5kLFxuICBBcHBsaWNhdGlvbkJhY2tncm91bmRcbn1cblxuZXhwb3J0IGRlZmF1bHQgTWV0cmljc1R5cGU7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge1RlbGVtZXRyeUxldmVsLCBUZWxlbWV0cnlMZXZlbFR5cGV9IGZyb20gJy4vTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlMZXZlbE1hcHBpbmcge1xuICBzdGF0aWMgY29udmVydFRlbGVtZXRyeUxldmVsVG9UZWxlbWV0cnlMZXZlbFR5cGUodGVsZW1ldHJ5TGV2ZWw6IFRlbGVtZXRyeUxldmVsKTogVGVsZW1ldHJ5TGV2ZWxUeXBlIHtcbiAgICBzd2l0Y2ggKHRlbGVtZXRyeUxldmVsKSB7XG4gICAgICBjYXNlIFRlbGVtZXRyeUxldmVsLk9mZjpcbiAgICAgICAgcmV0dXJuICdPZmYnO1xuICAgICAgY2FzZSBUZWxlbWV0cnlMZXZlbC5Fc3NlbnRpYWw6XG4gICAgICAgIHJldHVybiAnRXNzZW50aWFsJztcbiAgICAgIGNhc2UgVGVsZW1ldHJ5TGV2ZWwuQWxsOlxuICAgICAgICByZXR1cm4gJ0FsbCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0ZWxlbWV0cnlMZXZlbCk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGNvbnZlcnRUZWxlbWV0cnlMZXZlbFR5cGVUb1RlbGVtZXRyeUxldmVsKHRlbGVtZXRyeUxldmVsVHlwZTogVGVsZW1ldHJ5TGV2ZWxUeXBlKTogVGVsZW1ldHJ5TGV2ZWwge1xuICAgIHN3aXRjaCAodGVsZW1ldHJ5TGV2ZWxUeXBlKSB7XG4gICAgICBjYXNlICdPZmYnOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuT2ZmO1xuICAgICAgY2FzZSAnRXNzZW50aWFsJzpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkVzc2VudGlhbDtcbiAgICAgIGNhc2UgJ0FsbCc6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0ZWxlbWV0cnlMZXZlbFR5cGUpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEJ1aWxkRmVhdHVyZXMgZnJvbSAnLi4vZW52aXJvbm1lbnQvQnVpbGRGZWF0dXJlcyc7XG5pbXBvcnQge1RlbGVtZXRyeUxldmVsfSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NDb25maWd1cmF0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVsZW1ldHJ5RGVmYXVsdCB7XG4gIHN0YXRpYyBnZXQgZGVmYXVsdFRlbGVtZXRyeUxldmVsKCk6IFRlbGVtZXRyeUxldmVsIHtcbiAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWxbQnVpbGRGZWF0dXJlcy5zZW5kTWV0cmljc107XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi9yeC9TdWJqZWN0JztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4vSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb25GYWN0b3J5IGZyb20gJy4vSVBlZXJDb25uZWN0aW9uRmFjdG9yeSc7XG5pbXBvcnQgVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeSBmcm9tICcuL1ZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnknO1xuXG5leHBvcnQgaW50ZXJmYWNlIElQZWVyQ29ubmVjdGlvbk9mZmVySW5pdCB7XG4gIGF1ZGlvVHJhbnNjZWl2ZXI/OiBSVENSdHBUcmFuc2NlaXZlcjtcbiAgdmlkZW9UcmFuc2NlaXZlcj86IFJUQ1J0cFRyYW5zY2VpdmVyO1xuICBwZWVyQ29ubmVjdGlvbjogSVBlZXJDb25uZWN0aW9uO1xuICBsb2NhbE9mZmVyOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQZWVyQ29ubmVjdGlvblNlcnZpY2Uge1xuICBwcml2YXRlIHN0YXRpYyBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1BlZXJDb25uZWN0aW9uU2VydmljZScpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfcGVlckNvbm5lY3Rpb25GYWN0b3J5OiBTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+ID0gbmV3IFN1YmplY3Q8SVBlZXJDb25uZWN0aW9uRmFjdG9yeT4obmV3IFZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkoKSk7XG4gIHByaXZhdGUgc3RhdGljIF9jYWNoZWQ6IHtcbiAgICBkaXJlY3Rpb24/OiBSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbjtcbiAgICBwZWVyQ29ubmVjdGlvbjogUHJvbWlzZTxJUGVlckNvbm5lY3Rpb25PZmZlckluaXQ+O1xuICB9O1xuXG4gIHN0YXRpYyBnZXQgcGVlckNvbm5lY3Rpb25GYWN0b3J5KCk6IFN1YmplY3Q8SVBlZXJDb25uZWN0aW9uRmFjdG9yeT4ge1xuICAgIHJldHVybiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX3BlZXJDb25uZWN0aW9uRmFjdG9yeTtcbiAgfVxuXG4gIHN0YXRpYyBpbml0aWF0ZUluaXRpYWxQcmVjYWNoaW5nKCk6IHZvaWQge1xuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5pc1ByZWNhY2hpbmdFbmFibGVkKSB7XG4gICAgICBjb25zdCBpZ25vcmVkID0gUGVlckNvbm5lY3Rpb25TZXJ2aWNlLnByZWNhY2hlQ3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcigpXG4gICAgICAgIC5jYXRjaChlID0+IFBlZXJDb25uZWN0aW9uU2VydmljZS5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcHJlLWNhY2hlIHBlZXIgY29ubmVjdGlvbiBvZmZlcicsIGUpKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgcHJlY2FjaGVDcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyKCk6IFByb21pc2U8eyBwZWVyQ29ubmVjdGlvbjogUHJvbWlzZTxJUGVlckNvbm5lY3Rpb25PZmZlckluaXQgfCB2b2lkPjsgZGlyZWN0aW9uOiBSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbiB9PiB7XG4gICAgcmV0dXJuIFBlZXJDb25uZWN0aW9uU2VydmljZS5fY2FjaGVkID0ge1xuICAgICAgZGlyZWN0aW9uOiAncmVjdm9ubHknLFxuICAgICAgcGVlckNvbm5lY3Rpb246IFBlZXJDb25uZWN0aW9uU2VydmljZS5jcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyKClcbiAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIFBlZXJDb25uZWN0aW9uU2VydmljZS5fY2FjaGVkID0gbnVsbDtcblxuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH0pXG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyKGRpcmVjdGlvbjogUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24gPSAncmVjdm9ubHknKTogUHJvbWlzZTxJUGVlckNvbm5lY3Rpb25PZmZlckluaXQ+IHtcbiAgICBpZiAoUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9jYWNoZWQgJiYgUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9jYWNoZWQuZGlyZWN0aW9uID09PSBkaXJlY3Rpb24pIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9jYWNoZWQucGVlckNvbm5lY3Rpb247XG5cbiAgICAgIFBlZXJDb25uZWN0aW9uU2VydmljZS5fY2FjaGVkID0gbnVsbDtcblxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX3BlZXJDb25uZWN0aW9uRmFjdG9yeS52YWx1ZS5jcmVhdGVQZWVyQ29ubmVjdGlvbigpXG4gICAgICAudGhlbihhc3luYyBwZWVyQ29ubmVjdGlvbiA9PiB7XG4gICAgICAgIGNvbnN0IHN1cHBvcnRzQWRkVHJhbnNjZWl2ZXIgPSBwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c0FkZFRyYW5zY2VpdmVyO1xuICAgICAgICBsZXQgdmlkZW9UcmFuc2NlaXZlciwgYXVkaW9UcmFuc2NlaXZlcjtcblxuICAgICAgICBpZiAoc3VwcG9ydHNBZGRUcmFuc2NlaXZlcikge1xuICAgICAgICAgIGF1ZGlvVHJhbnNjZWl2ZXIgPSBwZWVyQ29ubmVjdGlvbi5hZGRUcmFuc2NlaXZlcignYXVkaW8nLCB7ZGlyZWN0aW9ufSk7XG4gICAgICAgICAgdmlkZW9UcmFuc2NlaXZlciA9IHBlZXJDb25uZWN0aW9uLmFkZFRyYW5zY2VpdmVyKCd2aWRlbycsIHtkaXJlY3Rpb259KTtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhdWRpb1RyYW5zY2VpdmVyLFxuICAgICAgICAgICAgdmlkZW9UcmFuc2NlaXZlcixcbiAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uOiBwZWVyQ29ubmVjdGlvbixcbiAgICAgICAgICAgIGxvY2FsT2ZmZXI6IGF3YWl0IHBlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKHVuZGVmaW5lZClcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGRpcmVjdGlvbiA9PT0gJ3JlY3Zvbmx5JyA/IHtcbiAgICAgICAgICBvZmZlclRvUmVjZWl2ZUF1ZGlvOiB0cnVlLFxuICAgICAgICAgIG9mZmVyVG9SZWNlaXZlVmlkZW86IHRydWVcbiAgICAgICAgfSA6IHt9O1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcGVlckNvbm5lY3Rpb246IHBlZXJDb25uZWN0aW9uLFxuICAgICAgICAgIGxvY2FsT2ZmZXI6IGF3YWl0IHBlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKG9wdGlvbnMpXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdQZWVyQ29ubmVjdGlvblNlcnZpY2UgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59XG5cblBlZXJDb25uZWN0aW9uU2VydmljZS5pbml0aWF0ZUluaXRpYWxQcmVjYWNoaW5nKCk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdGNDb25maWd1cmF0aW9uTWFuYWdlciB7XG4gIHN0YXRpYyB0cnVuY2F0ZUljZVNlcnZlcnMoY29uZmlndXJhdGlvbjogUlRDQ29uZmlndXJhdGlvbik6IFJUQ0NvbmZpZ3VyYXRpb24ge1xuICAgIGNvbnN0IGljZVNlcnZlcnM6IFJUQ0ljZVNlcnZlcltdID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgdXJsczogc3RyaW5nW10gPSBbXTtcblxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IDI7IGluZGV4KyspIHtcbiAgICAgICAgY29uc3QgdXJsID0gY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLnVybHNbaW5kZXhdO1xuXG4gICAgICAgIGlmICh1cmwpIHtcbiAgICAgICAgICB1cmxzLnB1c2goY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLnVybHNbaW5kZXhdKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpY2VTZXJ2ZXJzLnB1c2goe1xuICAgICAgICB1cmxzOiB1cmxzLFxuICAgICAgICB1c2VybmFtZTogY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLnVzZXJuYW1lLFxuICAgICAgICBjcmVkZW50aWFsOiBjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0uY3JlZGVudGlhbFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzID0gaWNlU2VydmVycztcblxuICAgIHJldHVybiBjb25maWd1cmF0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1J0Y0NvbmZpZ3VyYXRpb25NYW5hZ2VyIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi9yeC9TdWJqZWN0JztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5pbXBvcnQgU2RwUGFyc2VyIGZyb20gJy4vU2RwUGFyc2VyJztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0lEaXNwb3NhYmxlJztcblxuZXhwb3J0IGludGVyZmFjZSBJUnRjTW9uaXRvclN0YXRpc3RpYyB7XG4gIFtraW5kOiBzdHJpbmddOiBJUnRjU3RhdGlzdGljO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElMZWdhY3lSVENTdGF0c1JlcG9ydCB7XG4gIHJlc3VsdDogKCkgPT4gSUxlZ2FjeVJUQ1N0YXRzUmVwb3J0SXRlbVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElMZWdhY3lSVENTdGF0c1JlcG9ydEl0ZW0gZXh0ZW5kcyBSVENTdGF0c1JlcG9ydCB7XG4gIHR5cGU6IHN0cmluZztcbiAgbmFtZXM6ICgpID0+IHN0cmluZ1tdO1xuICBzdGF0OiAobmFtZSkgPT4gbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElSdGNTdGF0aXN0aWMge1xuICBzc3JjPzogc3RyaW5nO1xuICBtZWRpYVR5cGU/OiBzdHJpbmc7XG4gIHRpbWVzdGFtcDogbnVtYmVyO1xuICBiaXRyYXRlPzogbnVtYmVyO1xuICBieXRlc1JlY2VpdmVkPzogbnVtYmVyO1xuICBmcmFtZXNEZWNvZGVkPzogbnVtYmVyO1xuICBwYWNrZXRzTG9zdD86IG51bWJlcjtcbiAgcGFja2V0c1JlY2VpdmVkPzogbnVtYmVyO1xuICBjb2RlYz86IHN0cmluZztcbiAgZnBzPzogbnVtYmVyO1xuICByb3VuZFRyaXBUaW1lPzogbnVtYmVyO1xuICBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXA/OiBudW1iZXI7XG59XG5cbmNvbnN0IHVwZGF0ZVN0YXRpc3RpY1RpbWVvdXQgPSAxMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdGNDb25uZWN0aW9uTW9uaXRvciBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZXN0aW1hdGVkUm91bmRUcmlwVGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9lc3RpbWF0ZWRWaWRlb0NvZGVjOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VzdGltYXRlZEF1ZGlvQ29kZWM6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfcnRjU3RhdGlzdGljOiBTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPiA9IG5ldyBTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPih7fSk7XG4gIHByaXZhdGUgX3BlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb247XG4gIHByaXZhdGUgX2lzTW9uaXRvclJ1bm5pbmcgPSB0cnVlO1xuICBwcml2YXRlIF91cGRhdGVUaW1lb3V0OiBudW1iZXI7XG4gIHByaXZhdGUgX3RyYWNrc1RvTW9uaXRvcjogc3RyaW5nW107XG5cbiAgY29uc3RydWN0b3IocGVlckNvbm5lY3Rpb246IElQZWVyQ29ubmVjdGlvbiwgbWVkaWFTdHJlYW06IE1lZGlhU3RyZWFtLCBlc3RpbWF0ZWRSb3VuZFRyaXBUaW1lOiBudW1iZXIpIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbiA9IHBlZXJDb25uZWN0aW9uO1xuICAgIHRoaXMuX2VzdGltYXRlZFJvdW5kVHJpcFRpbWUgPSBlc3RpbWF0ZWRSb3VuZFRyaXBUaW1lO1xuICAgIHRoaXMuX3RyYWNrc1RvTW9uaXRvciA9IG1lZGlhU3RyZWFtLmdldFRyYWNrcygpLm1hcCh0cmFjayA9PiB0cmFjay5raW5kKSB8fCBbXTtcblxuICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbikge1xuICAgICAgaWYgKCFGZWF0dXJlRW5hYmxlbWVudC5nZXRDdXJyZW50T2ZmZXJEaXNhYmxlZCkge1xuICAgICAgICBjb25zdCBwYXJzZWRTRFAgPSBuZXcgU2RwUGFyc2VyKHRoaXMuX3BlZXJDb25uZWN0aW9uLmN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbi5zZHApO1xuXG4gICAgICAgIHRoaXMuX2VzdGltYXRlZEF1ZGlvQ29kZWMgPSBwYXJzZWRTRFAuYXVkaW9Db2RlYztcbiAgICAgICAgdGhpcy5fZXN0aW1hdGVkVmlkZW9Db2RlYyA9IHBhcnNlZFNEUC52aWRlb0NvZGVjO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnVwZGF0ZVN0YXRpc3RpYygpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBydGNTdGF0aXN0aWMoKTogU3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz4ge1xuICAgIHJldHVybiB0aGlzLl9ydGNTdGF0aXN0aWM7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2lzTW9uaXRvclJ1bm5pbmcgPSBmYWxzZTtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbiA9IG51bGw7XG5cbiAgICBpZiAodGhpcy5fdXBkYXRlVGltZW91dCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3VwZGF0ZVRpbWVvdXQpO1xuICAgICAgdGhpcy5fdXBkYXRlVGltZW91dCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVTdGF0aXN0aWMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmdldFN0YXRzUHJvbWlzZUJhc2VkRGlzYWJsZWQpIHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSBhd2FpdCB0aGlzLnVwZGF0ZVN0YXRpc3RpY0xlZ2FjeSgpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU2FmYXJpIDExIGRvZXNudCBoYXZlIGtpbmQgb3IgbWVkaWFUeXBlIHNvIHdlIG5lZWQgdG8gdGFrZSBpdCBmcm9tIHRoZSBpbmJvdW5kLXJ0cCBvYmplY3QgaWRcbiAgICBjb25zdCBnZXRLaW5kRm9yU2FmYXJpMTEgPSAoaXRlbSk6IHN0cmluZyA9PiBpdGVtLmlkLmluY2x1ZGVzKCdBdWRpbycpID8gJ2F1ZGlvJyA6IGl0ZW0uaWQuaW5jbHVkZXMoJ1ZpZGVvJykgPyAndmlkZW8nIDogJyc7XG4gICAgY29uc3QgaWdub3JlZCA9IGF3YWl0IHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldFN0YXRzKG51bGwpXG4gICAgICAudGhlbihzdGF0cyA9PiB7XG4gICAgICAgIGNvbnN0IHJ0Y1N0YXRpc3RpY3M6IElSdGNNb25pdG9yU3RhdGlzdGljID0ge307XG5cbiAgICAgICAgaWYgKHN0YXRzKSB7XG4gICAgICAgICAgbGV0IHJvdW5kVHJpcFRpbWUgPSB0aGlzLl9lc3RpbWF0ZWRSb3VuZFRyaXBUaW1lO1xuICAgICAgICAgIGxldCBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXA7XG5cbiAgICAgICAgICBzdGF0cy5mb3JFYWNoKHJlcG9ydCA9PiB7XG4gICAgICAgICAgICBpZiAocmVwb3J0LnR5cGUgPT09ICdjYW5kaWRhdGUtcGFpcicgJiYgcmVwb3J0LmN1cnJlbnRSb3VuZFRyaXBUaW1lKSB7XG4gICAgICAgICAgICAgIHJvdW5kVHJpcFRpbWUgPSByZXBvcnQuY3VycmVudFJvdW5kVHJpcFRpbWUgKiAxMDAwO1xuXG4gICAgICAgICAgICAgIGlmIChydGNTdGF0aXN0aWNzWydhdWRpbyddKSB7XG4gICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1snYXVkaW8nXS5yb3VuZFRyaXBUaW1lID0gcm91bmRUcmlwVGltZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChydGNTdGF0aXN0aWNzWyd2aWRlbyddKSB7XG4gICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1sndmlkZW8nXS5yb3VuZFRyaXBUaW1lID0gcm91bmRUcmlwVGltZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocmVwb3J0LnR5cGUgPT09ICdjYW5kaWRhdGUtcGFpcicgJiYgcmVwb3J0Lmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCkge1xuICAgICAgICAgICAgICBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAgPSByZXBvcnQubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wO1xuXG4gICAgICAgICAgICAgIGlmIChydGNTdGF0aXN0aWNzWydhdWRpbyddKSB7XG4gICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1snYXVkaW8nXS5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAgPSBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXA7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAocnRjU3RhdGlzdGljc1sndmlkZW8nXSkge1xuICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbJ3ZpZGVvJ10ubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wID0gbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyZXBvcnQudHlwZSA9PT0gJ2luYm91bmQtcnRwJykge1xuICAgICAgICAgICAgICBjb25zdCBraW5kID0gcmVwb3J0LmtpbmQgfHwgcmVwb3J0Lm1lZGlhVHlwZSB8fCBnZXRLaW5kRm9yU2FmYXJpMTEocmVwb3J0KTtcbiAgICAgICAgICAgICAgbGV0IGNvZGVjID0gJyc7XG5cbiAgICAgICAgICAgICAgc3RhdHMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5pZCA9PT0gcmVwb3J0LmNvZGVjSWQpIHtcbiAgICAgICAgICAgICAgICAgIGNvZGVjID0gaXRlbS5taW1lVHlwZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIGlmIChraW5kICYmIHRoaXMuX3RyYWNrc1RvTW9uaXRvci5pbmNsdWRlcyhraW5kKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGVzID0gcmVwb3J0LmJ5dGVzUmVjZWl2ZWQgfHwgMDtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c0J5dGVzUmVjZWl2ZWQgPSB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWU/LltraW5kXT8uYnl0ZXNSZWNlaXZlZCA/PyAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGVzRGVsdGEgPSBieXRlcyAtIHByZXZpb3VzQnl0ZXNSZWNlaXZlZDtcbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lRGVsdGEgPSByZXBvcnQudGltZXN0YW1wIC0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlPy5ba2luZF0/LnRpbWVzdGFtcDtcbiAgICAgICAgICAgICAgICBjb25zdCBiaXRyYXRlID0gYnl0ZXNEZWx0YSAmJiB0aW1lRGVsdGEgPyBNYXRoLmZsb29yKDggKiBieXRlc0RlbHRhIC9cbiAgICAgICAgICAgICAgICAgIHRpbWVEZWx0YSAqIDEwMDApIDogMDtcblxuICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3Nba2luZF0gPSB7XG4gICAgICAgICAgICAgICAgICBzc3JjOiByZXBvcnQuc3NyYyxcbiAgICAgICAgICAgICAgICAgIG1lZGlhVHlwZToga2luZCxcbiAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcDogcmVwb3J0LnRpbWVzdGFtcCxcbiAgICAgICAgICAgICAgICAgIGJpdHJhdGUsXG4gICAgICAgICAgICAgICAgICBieXRlc1JlY2VpdmVkOiByZXBvcnQuYnl0ZXNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgIHBhY2tldHNMb3N0OiByZXBvcnQucGFja2V0c0xvc3QsXG4gICAgICAgICAgICAgICAgICBwYWNrZXRzUmVjZWl2ZWQ6IHJlcG9ydC5wYWNrZXRzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICBjb2RlYzogY29kZWMgfHwgdGhpcy5nZXRDb2RlY0J5VHlwZShraW5kKSxcbiAgICAgICAgICAgICAgICAgIHJvdW5kVHJpcFRpbWVcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKHJlcG9ydC5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAgfHwgbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wKSB7XG4gICAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzW2tpbmRdLmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCA9IHJlcG9ydC5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAgfHwgbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChraW5kID09PSAndmlkZW8nICYmIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZSAmJiB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUudmlkZW8pIHtcbiAgICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3Nba2luZF1bJ2ZyYW1lc0RlY29kZWQnXSA9IHJlcG9ydC5mcmFtZXNEZWNvZGVkO1xuXG4gICAgICAgICAgICAgICAgICBjb25zdCBmcHMgPSAocmVwb3J0LmZyYW1lc0RlY29kZWQgLSB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUudmlkZW8uZnJhbWVzRGVjb2RlZCkgL1xuICAgICAgICAgICAgICAgICAgICAocnRjU3RhdGlzdGljc1traW5kXS50aW1lc3RhbXAgLSB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUudmlkZW8udGltZXN0YW1wKSAqXG4gICAgICAgICAgICAgICAgICAgIDEwMDA7XG5cbiAgICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3Nba2luZF1bJ2ZwcyddID0gZnBzID8gTWF0aC5yb3VuZChmcHMgKiAxMDApIC8gMTAwIDogMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZSA9IHJ0Y1N0YXRpc3RpY3M7XG4gICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2lzTW9uaXRvclJ1bm5pbmcpIHtcbiAgICAgICAgICB0aGlzLl91cGRhdGVUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdGhpcy51cGRhdGVTdGF0aXN0aWMoKSwgdXBkYXRlU3RhdGlzdGljVGltZW91dCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVTdGF0aXN0aWNMZWdhY3koKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgaWdub3JlZCA9IGF3YWl0IHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldFN0YXRzTGVnYWN5KCkudGhlbihzdGF0cyA9PiB7XG4gICAgICBjb25zdCBydGNTdGF0aXN0aWNzOiBJUnRjTW9uaXRvclN0YXRpc3RpYyA9IHt9O1xuICAgICAgbGV0IHJvdW5kVHJpcFRpbWUgPSB0aGlzLl9lc3RpbWF0ZWRSb3VuZFRyaXBUaW1lO1xuXG4gICAgICBzdGF0cy5yZXN1bHQoKS5mb3JFYWNoKHJlcG9ydCA9PiB7XG4gICAgICAgIHJlcG9ydC5uYW1lcygpLmZvckVhY2gobmFtZSA9PiB7XG4gICAgICAgICAgaWYgKG5hbWUgPT09ICdnb29nUlRUJykge1xuICAgICAgICAgICAgcm91bmRUcmlwVGltZSA9IHJlcG9ydC5zdGF0KG5hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHJlcG9ydC50eXBlID09PSAnc3NyYycpIHtcbiAgICAgICAgICBjb25zdCBtZWRpYVR5cGUgPSByZXBvcnQuc3RhdCgnbWVkaWFUeXBlJykudG9TdHJpbmcoKTtcblxuICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXSA9IHt0aW1lc3RhbXA6IERhdGUubm93KCl9O1xuICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsnc3NyYyddID0gcmVwb3J0LnN0YXQoJ3NzcmMnKS50b1N0cmluZygpO1xuICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsnbWVkaWFUeXBlJ10gPSBtZWRpYVR5cGU7XG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydieXRlc1JlY2VpdmVkJ10gPSByZXBvcnQuc3RhdCgnYnl0ZXNSZWNlaXZlZCcpO1xuICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsncGFja2V0c0xvc3QnXSA9IHJlcG9ydC5zdGF0KCdwYWNrZXRzTG9zdCcpO1xuICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsncGFja2V0c1JlY2VpdmVkJ10gPSByZXBvcnQuc3RhdCgncGFja2V0c1JlY2VpdmVkJyk7XG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydjb2RlYyddID0gcmVwb3J0LnN0YXQoJ2dvb2dDb2RlY05hbWUnKS50b1N0cmluZygpIHx8IHRoaXMuZ2V0Q29kZWNCeVR5cGUobWVkaWFUeXBlKTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ3JvdW5kVHJpcFRpbWUnXSA9IHJvdW5kVHJpcFRpbWU7XG5cbiAgICAgICAgICBpZiAobWVkaWFUeXBlID09PSAndmlkZW8nICYmIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZSAmJiB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUudmlkZW8pIHtcbiAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsnZnJhbWVzRGVjb2RlZCddID0gcmVwb3J0LnN0YXQoJ2ZyYW1lc0RlY29kZWQnKTtcbiAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsnZnBzJ10gPSAocnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdLmZyYW1lc0RlY29kZWQgLSB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUudmlkZW8uZnJhbWVzRGVjb2RlZCkgL1xuICAgICAgICAgICAgICAocnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdLnRpbWVzdGFtcCAtIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlby50aW1lc3RhbXApICpcbiAgICAgICAgICAgIDEwMDAgfHwgMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlID0gcnRjU3RhdGlzdGljcztcbiAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9pc01vbml0b3JSdW5uaW5nKSB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZVRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB0aGlzLnVwZGF0ZVN0YXRpc3RpYygpLCB1cGRhdGVTdGF0aXN0aWNUaW1lb3V0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29kZWNCeVR5cGUodHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ2F1ZGlvJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VzdGltYXRlZEF1ZGlvQ29kZWM7XG4gICAgICBjYXNlICd2aWRlbyc6XG4gICAgICAgIHJldHVybiB0aGlzLl9lc3RpbWF0ZWRWaWRlb0NvZGVjO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICd1bmtub3duJztcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2RwUGFyc2VyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2RwOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2F1ZGlvQ29kZWM6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlkZW9Db2RlYzogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pc0F1ZGlvVHJhY2tFbmFibGVkOiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pc1ZpZGVvVHJhY2tFbmFibGVkOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKHNkcDogc3RyaW5nKSB7XG4gICAgdGhpcy5fc2RwID0gc2RwO1xuXG4gICAgY29uc3Qgc2RwU3BsaXRCeUxpbmVzID0gdGhpcy5fc2RwLnNwbGl0KC8oXFxyXFxufFxccnxcXG4pLyk7XG4gICAgY29uc3Qgc2RwU3BsaXRCeVRyYWNrcyA9IHRoaXMuX3NkcC5zcGxpdCgnbT0nKTtcblxuICAgIHRoaXMuX2F1ZGlvQ29kZWMgPSB0aGlzLmFwcGx5Q29kZWMoJ2F1ZGlvJywgc2RwU3BsaXRCeUxpbmVzKTtcbiAgICB0aGlzLl92aWRlb0NvZGVjID0gdGhpcy5hcHBseUNvZGVjKCd2aWRlbycsIHNkcFNwbGl0QnlMaW5lcyk7XG4gICAgdGhpcy5faXNBdWRpb1RyYWNrRW5hYmxlZCA9IHRoaXMuaXNUcmFja0J5VHlwZUVuYWJsZWQoJ2F1ZGlvJywgc2RwU3BsaXRCeVRyYWNrcyk7XG4gICAgdGhpcy5faXNWaWRlb1RyYWNrRW5hYmxlZCA9IHRoaXMuaXNUcmFja0J5VHlwZUVuYWJsZWQoJ3ZpZGVvJywgc2RwU3BsaXRCeVRyYWNrcyk7XG4gIH1cblxuICBnZXQgYXVkaW9Db2RlYygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9hdWRpb0NvZGVjO1xuICB9XG5cbiAgZ2V0IHZpZGVvQ29kZWMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdmlkZW9Db2RlYztcbiAgfVxuXG4gIGdldCBpc0F1ZGlvVHJhY2tFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc0F1ZGlvVHJhY2tFbmFibGVkO1xuICB9XG5cbiAgZ2V0IGlzVmlkZW9UcmFja0VuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzVmlkZW9UcmFja0VuYWJsZWQ7XG4gIH1cblxuICBwcml2YXRlIGlzVHJhY2tCeVR5cGVFbmFibGVkKHR5cGU6IHN0cmluZywgc2RwU3BsaXRCeVRyYWNrczogc3RyaW5nW10pOiBib29sZWFuIHtcbiAgICBjb25zdCBzZHBTZWN0aW9uRm9yVHlwZSA9IHNkcFNwbGl0QnlUcmFja3MuZmluZChzZHBUcmFjayA9PiBzZHBUcmFjay5zdGFydHNXaXRoKHR5cGUpKTtcblxuICAgIGlmICghc2RwU2VjdGlvbkZvclR5cGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gIXNkcFNlY3Rpb25Gb3JUeXBlLmluY2x1ZGVzKGBhPWluYWN0aXZlYCk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5Q29kZWModHlwZTogc3RyaW5nLCBzZHBTcGxpdEJ5TGluZXM6IHN0cmluZyBbXSk6IHN0cmluZyB7XG4gICAgY29uc3QgdXNlZENvZGVjTGluZSA9IHNkcFNwbGl0QnlMaW5lcy5maW5kKHNkcExpbmUgPT4gc2RwTGluZS5pbmNsdWRlcyhgYT1ydHBtYXA6JHtzZHBTcGxpdEJ5TGluZXMuZmluZChpID0+IGkuaW5jbHVkZXMoYG09JHt0eXBlfWApKS5zcGxpdCgnICcpWzNdfWApKTtcbiAgICBjb25zdCB1c2VkQ29kZWMgPSB1c2VkQ29kZWNMaW5lLnNwbGl0KCcgJylbMV07XG4gICAgY29uc3QgY29kZWNOYW1lID0gdXNlZENvZGVjLnNwbGl0KCcvJylbMF07XG5cbiAgICByZXR1cm4gY29kZWNOYW1lO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uLCB7UGVlckNvbm5lY3Rpb25FdmVudHN9IGZyb20gJy4vSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IHtJTGVnYWN5UlRDU3RhdHNSZXBvcnR9IGZyb20gJy4vUnRjQ29ubmVjdGlvbk1vbml0b3InO1xuXG5jbGFzcyBWYW5pbGxhUGVlckNvbm5lY3Rpb24gaW1wbGVtZW50cyBJUGVlckNvbm5lY3Rpb24ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignVmFuaWxsYVBlZXJDb25uZWN0aW9uJyk7XG4gIHByaXZhdGUgX3BlZXJDb25uZWN0aW9uOiBSVENQZWVyQ29ubmVjdGlvbjtcblxuICBjb25zdHJ1Y3Rvcihjb25maWd1cmF0aW9uPzogUlRDQ29uZmlndXJhdGlvbikge1xuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC53ZWJraXRSVENQZWVyQ29ubmVjdGlvbkVuYWJsZWQpIHtcbiAgICAgIC8vIElnbm9yZWQgYXMgbGVnYWN5IHdlYmtpdFJUQ1BlZXJDb25uZWN0aW9uIGNsYXNzIGlzIGRlcHJlY2F0ZWRcbiAgICAgIC8vIFRoaXMgd2FzIGEgQ2hyb21lIHNwZWNpZmljIGltcGxlbWVudGF0aW9uXG4gICAgICAvLyBSZXF1aXJlcyBhIHRzLWlnbm9yZSBkaXJlY3RpdmUgdG8gcHJldmVudCB0eXBlc2NyaXB0IGVycm9yc1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb24gPSBuZXcgd2Via2l0UlRDUGVlckNvbm5lY3Rpb24oY29uZmlndXJhdGlvbik7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbiA9IG5ldyBSVENQZWVyQ29ubmVjdGlvbihjb25maWd1cmF0aW9uKTtcbiAgfVxuXG4gIGdldCBuYXRpdmUoKTogUlRDUGVlckNvbm5lY3Rpb24gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb247XG4gIH1cblxuICBnZXQgY3VycmVudExvY2FsRGVzY3JpcHRpb24oKTogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmN1cnJlbnRMb2NhbERlc2NyaXB0aW9uO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbigpOiBSVENTZXNzaW9uRGVzY3JpcHRpb24gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3VycmVudFJlbW90ZURlc2NyaXB0aW9uO1xuICB9XG5cbiAgZ2V0IGNvbm5lY3Rpb25TdGF0ZSgpOiBSVENQZWVyQ29ubmVjdGlvblN0YXRlIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY29ubmVjdGlvblN0YXRlO1xuICB9XG5cbiAgZ2V0IGljZUNvbm5lY3Rpb25TdGF0ZSgpOiBSVENJY2VDb25uZWN0aW9uU3RhdGUge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGU7XG4gIH1cblxuICBnZXQgc3VwcG9ydHNHZXRDb25maWd1cmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0Q29uZmlndXJhdGlvbiA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxuXG4gIGdldCBzdXBwb3J0c1NldENvbmZpZ3VyYXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5zZXRDb25maWd1cmF0aW9uID09PSAnZnVuY3Rpb24nO1xuICB9XG5cbiAgZ2V0IHN1cHBvcnRzQWRkVHJhbnNjZWl2ZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICFGZWF0dXJlRW5hYmxlbWVudC5hZGRUcmFuY2VpdmVyRGlzYWJsZWQgJiYgdHlwZW9mIHRoaXMuX3BlZXJDb25uZWN0aW9uLmFkZFRyYW5zY2VpdmVyID09PSAnZnVuY3Rpb24nO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlT2ZmZXIob3B0aW9ucz86IFJUQ09mZmVyT3B0aW9ucyk6IFByb21pc2U8UlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdD4ge1xuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5wcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCkge1xuICAgICAgLy8gSWdub3JlZCBhcyBsZWdhY3kgY3JlYXRlT2ZmZXIgbWV0aG9kIHdpdGggY2FsbGJhY2tzIGlzIGRlcHJlY2F0ZWRcbiAgICAgIC8vIFJlcXVpcmVzIGEgdHMtaWdub3JlIGRpcmVjdGl2ZSB0byBwcmV2ZW50IHR5cGVzY3JpcHQgZXJyb3JzXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3JlYXRlT2ZmZXIocmVzb2x2ZSwgcmVqZWN0LCBvcHRpb25zKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKG9wdGlvbnMpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlQW5zd2VyKG9wdGlvbnM/OiBSVENBbnN3ZXJPcHRpb25zKTogUHJvbWlzZTxSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0PiB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LnByb21pc2VCYXNlZFBDTWV0aG9kc0Rpc2FibGVkKSB7XG4gICAgICAvLyBJZ25vcmVkIGFzIGxlZ2FjeSBjcmVhdGVBbnN3ZXIgbWV0aG9kIHdpdGggY2FsbGJhY2tzIGlzIGRlcHJlY2F0ZWRcbiAgICAgIC8vIFJlcXVpcmVzIGEgdHMtaWdub3JlIGRpcmVjdGl2ZSB0byBwcmV2ZW50IHR5cGVzY3JpcHQgZXJyb3JzXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3JlYXRlQW5zd2VyKHJlc29sdmUsIHJlamVjdCwgb3B0aW9ucykpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jcmVhdGVBbnN3ZXIob3B0aW9ucyk7XG4gIH1cblxuICBhc3luYyBzZXRMb2NhbERlc2NyaXB0aW9uKGRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24oRmVhdHVyZUVuYWJsZW1lbnQucHJvbWlzZUJhc2VkUENNZXRob2RzRGlzYWJsZWQgP1xuICAgICAgbmV3IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbihkZXNjcmlwdGlvbikgOiBkZXNjcmlwdGlvbik7XG4gIH1cblxuICBhc3luYyBzZXRSZW1vdGVEZXNjcmlwdGlvbihkZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGhhc0NyeXB0byA9IGRlc2NyaXB0aW9uLnNkcD8ubWF0Y2goL2E9Y3J5cHRvOi9pKTtcblxuICAgIGlmIChoYXNDcnlwdG8pIHtcbiAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdTRFAgYT1jcnlwdG8gaXMgbm90IHN1cHBvcnRlZCcpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5zZXRSZW1vdGVEZXNjcmlwdGlvbihGZWF0dXJlRW5hYmxlbWVudC5wcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCA/XG4gICAgICBuZXcgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKSA6IGRlc2NyaXB0aW9uKTtcbiAgfVxuXG4gIGdldFNlbmRlcnMoKTogUlRDUnRwU2VuZGVyW10ge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRTZW5kZXJzKCk7XG4gIH1cblxuICBnZXRTdGF0cyhzZWxlY3Rvcj86IE1lZGlhU3RyZWFtVHJhY2sgfCBudWxsKTogUHJvbWlzZTxSVENTdGF0c1JlcG9ydD4ge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRTdGF0cyhzZWxlY3Rvcik7XG4gIH1cblxuICBnZXRTdGF0c0xlZ2FjeSgpOiBQcm9taXNlPElMZWdhY3lSVENTdGF0c1JlcG9ydD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIC8vIElnbm9yZWQgZHVlIHRvIHR5cGVzY3JpcHQgbm90IGhhdmluZyBsZWdhY3kgJ2dldFN0YXRzJyBtZXRob2QgdHlwZSBkZWZpbml0aW9uXG4gICAgICAvLyBUaGlzIHdhcyBhIENocm9tZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgJ2dldFN0YXRzJyBtZXRob2QgZm9yXG4gICAgICAvLyBDaHJvbWVAPD0gNjYgZGV0YWlsZWQgaGVyZTogaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NjI3ODE2XG4gICAgICAvLyBSZXF1aXJlcyBhIHRzLWlnbm9yZSBkaXJlY3RpdmUgdG8gcHJldmVudCB0eXBlc2NyaXB0IGVycm9yc1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldFN0YXRzKHJlc29sdmUpO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkRXZlbnRMaXN0ZW5lcih0eXBlOiBQZWVyQ29ubmVjdGlvbkV2ZW50cywgbGlzdGVuZXI6IEV2ZW50TGlzdGVuZXJPckV2ZW50TGlzdGVuZXJPYmplY3QsIG9wdGlvbnM/OiBib29sZWFuIHwgQWRkRXZlbnRMaXN0ZW5lck9wdGlvbnMpOiB2b2lkIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCBvcHRpb25zKTtcbiAgfVxuXG4gIHJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZTogUGVlckNvbm5lY3Rpb25FdmVudHMsIGxpc3RlbmVyOiBFdmVudExpc3RlbmVyT3JFdmVudExpc3RlbmVyT2JqZWN0LCBvcHRpb25zPzogYm9vbGVhbiB8IEV2ZW50TGlzdGVuZXJPcHRpb25zKTogdm9pZCB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lciwgb3B0aW9ucyk7XG4gIH1cblxuICBhZGRUcmFuc2NlaXZlcihuYW1lOiBzdHJpbmcsIG9wdGlvbnM6IFJUQ1J0cFRyYW5zY2VpdmVySW5pdCk6IFJUQ1J0cFRyYW5zY2VpdmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uYWRkVHJhbnNjZWl2ZXIobmFtZSwgb3B0aW9ucyk7XG4gIH1cblxuICBhZGRTdHJlYW0obWVkaWFTdHJlYW06IE1lZGlhU3RyZWFtKTogdm9pZCB7XG4gICAgbWVkaWFTdHJlYW0uZ2V0VHJhY2tzKCkuZm9yRWFjaCh0cmFjayA9PiB7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5hZGRUcmFjayh0cmFjayk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRDb25maWd1cmF0aW9uKCk6IFJUQ0NvbmZpZ3VyYXRpb24ge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRDb25maWd1cmF0aW9uKCk7XG4gIH1cblxuICBzZXRDb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb246IFJUQ0NvbmZpZ3VyYXRpb24pOiB2b2lkIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5zZXRDb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb24pO1xuICB9XG5cbiAgc2V0IG9udHJhY2soaGFuZGxlcjogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IFJUQ1RyYWNrRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCkge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9udHJhY2sgPSBoYW5kbGVyO1xuICB9XG5cbiAgZ2V0IG9udHJhY2soKTogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IFJUQ1RyYWNrRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9udHJhY2s7XG4gIH1cblxuICBzZXQgb25pY2VjYW5kaWRhdGUoaGFuZGxlcjogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IFJUQ1BlZXJDb25uZWN0aW9uSWNlRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCkge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9uaWNlY2FuZGlkYXRlID0gaGFuZGxlcjtcbiAgfVxuXG4gIGdldCBvbmljZWNhbmRpZGF0ZSgpOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogUlRDUGVlckNvbm5lY3Rpb25JY2VFdmVudCkgPT4gdW5rbm93bikgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24ub25pY2VjYW5kaWRhdGU7XG4gIH1cblxuICBzZXQgb25jb25uZWN0aW9uc3RhdGVjaGFuZ2UoaGFuZGxlcjogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IFJUQ1BlZXJDb25uZWN0aW9uSWNlRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCkge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9uY29ubmVjdGlvbnN0YXRlY2hhbmdlID0gaGFuZGxlcjtcbiAgfVxuXG4gIGdldCBvbmNvbm5lY3Rpb25zdGF0ZWNoYW5nZSgpOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogUlRDUGVlckNvbm5lY3Rpb25JY2VFdmVudCkgPT4gdW5rbm93bikgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24ub25jb25uZWN0aW9uc3RhdGVjaGFuZ2U7XG4gIH1cblxuICBzZXQgb25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UoaGFuZGxlcjogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IEV2ZW50KSA9PiB1bmtub3duKSB8IG51bGwpIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZSA9IGhhbmRsZXI7XG4gIH1cblxuICBnZXQgb25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UoKTogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IEV2ZW50KSA9PiB1bmtub3duKSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZTtcbiAgfVxuXG4gIGNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLmNsb3NlKCk7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uID0gbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBWYW5pbGxhUGVlckNvbm5lY3Rpb247IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBJUGVlckNvbm5lY3Rpb25GYWN0b3J5IGZyb20gJy4vSVBlZXJDb25uZWN0aW9uRmFjdG9yeSc7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4vSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCBWYW5pbGxhUGVlckNvbm5lY3Rpb24gZnJvbSAnLi9WYW5pbGxhUGVlckNvbm5lY3Rpb24nO1xuXG5jbGFzcyBWYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5IGltcGxlbWVudHMgSVBlZXJDb25uZWN0aW9uRmFjdG9yeSB7XG4gIGFzeW5jIGNyZWF0ZVBlZXJDb25uZWN0aW9uKGNvbmZpZ3VyYXRpb24/OiBSVENDb25maWd1cmF0aW9uKTogUHJvbWlzZTxJUGVlckNvbm5lY3Rpb24+IHtcbiAgICByZXR1cm4gbmV3IFZhbmlsbGFQZWVyQ29ubmVjdGlvbihjb25maWd1cmF0aW9uKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBWYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5OyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgU3ViamVjdCBmcm9tICcuL1N1YmplY3QnO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFkT25seVN1YmplY3Q8VD4ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdWJqZWN0OiBTdWJqZWN0PFQ+O1xuXG4gIGNvbnN0cnVjdG9yKHN1YmplY3Q6IFN1YmplY3Q8VD4pIHtcbiAgICB0aGlzLl9zdWJqZWN0ID0gc3ViamVjdDtcbiAgfVxuXG4gIGdldCB2YWx1ZSgpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5fc3ViamVjdC52YWx1ZTtcbiAgfVxuXG4gIHN1YnNjcmliZShsaXN0ZW5lcjogKFQpID0+IHZvaWQpOiBJRGlzcG9zYWJsZSB7XG4gICAgcmV0dXJuIHRoaXMuX3N1YmplY3Quc3Vic2NyaWJlKGxpc3RlbmVyKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IElDb21wYXJhYmxlIGZyb20gJy4uL2xhbmcvSUNvbXBhcmFibGUnO1xuXG5jbGFzcyBEaXNwb3NhYmxlTGlzdGVuZXI8VD4gZXh0ZW5kcyBEaXNwb3NhYmxlIHtcbiAgY29uc3RydWN0b3IobGlzdGVuZXJzOiBBcnJheTxUPiwgbGlzdGVuZXI6IFQpIHtcbiAgICBzdXBlcigoKSA9PiB7XG4gICAgICBjb25zdCBpZHggPSBsaXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lcik7XG5cbiAgICAgIGlmIChpZHggPj0gMCkge1xuICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGlkeCwgMSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3ViamVjdDxUPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xpc3RlbmVyczogQXJyYXk8KFQpID0+IHZvaWQ+O1xuICBwcml2YXRlIF92YWx1ZTogVDtcblxuICBjb25zdHJ1Y3Rvcih2YWx1ZTogVCkge1xuICAgIHRoaXMuX2xpc3RlbmVycyA9IFtdO1xuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gIH1cblxuICBzZXQgdmFsdWUodmFsdWU6IFQpIHtcbiAgICBsZXQgY2hhbmdlZCA9IHRoaXMuX3ZhbHVlICE9PSB2YWx1ZTtcblxuICAgIGlmIChjaGFuZ2VkICYmIHZhbHVlKSB7XG4gICAgICBjb25zdCBjb21wYXJhYmxlID0gdmFsdWUgYXMgdW5rbm93biBhcyBJQ29tcGFyYWJsZTxUPjtcblxuICAgICAgaWYgKHR5cGVvZiBjb21wYXJhYmxlLmVxdWFscyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjaGFuZ2VkID0gIWNvbXBhcmFibGUuZXF1YWxzKHRoaXMuX3ZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWNoYW5nZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuXG4gICAgdGhpcy5fbGlzdGVuZXJzLmZvckVhY2gobGlzdGVuZXIgPT4ge1xuICAgICAgbGlzdGVuZXIodmFsdWUpO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0IHZhbHVlKCk6IFQge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuXG4gIHN1YnNjcmliZShsaXN0ZW5lcjogKFQpID0+IHZvaWQpOiBJRGlzcG9zYWJsZSB7XG4gICAgdGhpcy5fbGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuXG4gICAgbGlzdGVuZXIodGhpcy5fdmFsdWUpO1xuXG4gICAgcmV0dXJuIG5ldyBEaXNwb3NhYmxlTGlzdGVuZXI8KFQpID0+IHZvaWQ+KHRoaXMuX2xpc3RlbmVycywgbGlzdGVuZXIpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVudmlyb25tZW50IHtcbiAgc3RhdGljIGdldEVudmlyb25tZW50RnJvbVVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJhc2VVUkwgPSBuZXcgVVJMKHVybCk7XG5cbiAgICAgIHJldHVybiBiYXNlVVJMLm9yaWdpbjtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgU3RyaW5ncyBmcm9tICcuLi9sYW5nL1N0cmluZ3MnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgUmVhZE9ubHlTdWJqZWN0IGZyb20gJy4uL3J4L1JlYWRPbmx5U3ViamVjdCc7XG5pbXBvcnQgRWRnZUF1dGhQYXJzZXIgZnJvbSAnLi4vZWRnZUF1dGgvRWRnZUF1dGhQYXJzZXInO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsLCBMb2dnaW5nTGV2ZWxUeXBlfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyJztcbmltcG9ydCBDb25zb2xlQXBwZW5kZXIgZnJvbSAnLi4vbG9nZ2VyL0NvbnNvbGVBcHBlbmRlcic7XG5pbXBvcnQgVGVsZW1ldHJ5QXBwZW5kZXIgZnJvbSAnLi4vdGVsZW1ldHJ5L1RlbGVtZXRyeUFwZW5kZXInO1xuaW1wb3J0IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIgZnJvbSAnLi4vZG9tL0NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXInO1xuaW1wb3J0IE1ldHJpY3NDb25maWd1cmF0aW9uLCB7VGVsZW1ldHJ5TGV2ZWwsIFRlbGVtZXRyeUxldmVsVHlwZX0gZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzU2VydmljZSc7XG5pbXBvcnQgVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nIGZyb20gJy4uL21ldHJpY3MvVGVsZW1ldHJpY0xldmVsTWFwcGluZyc7XG5pbXBvcnQgTG9nZ2luZ0xldmVsTWFwcGluZyBmcm9tICcuLi9sb2dnZXIvTG9nZ2luZ0xldmVsTWFwcGluZyc7XG5pbXBvcnQgQnVpbGRGZWF0dXJlcyBmcm9tICcuLi9lbnZpcm9ubWVudC9CdWlsZEZlYXR1cmVzJztcbmltcG9ydCBCcm93c2VyRGV0ZWN0b3IgZnJvbSAnLi4vZG9tL0Jyb3dzZXJEZXRlY3Rvcic7XG5pbXBvcnQge0lDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyfSBmcm9tICcuLi9kb20vSUNvbmZpZ3VyYXRpb25QYXJhbWF0ZXJSZWFkZXInO1xuaW1wb3J0IEFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yIGZyb20gJy4uL2RvbS9BcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcic7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uRmFjdG9yeSBmcm9tICcuLi9ydGMvSVBlZXJDb25uZWN0aW9uRmFjdG9yeSc7XG5pbXBvcnQgUGVlckNvbm5lY3Rpb25TZXJ2aWNlIGZyb20gJy4uL3J0Yy9QZWVyQ29ubmVjdGlvblNlcnZpY2UnO1xuaW1wb3J0IFRlbGVtZXRyeVVybCBmcm9tICcuL1RlbGVtZXRyeVVybCc7XG5pbXBvcnQgRW52aXJvbm1lbnQgZnJvbSAnLi9FbnZpcm9ubWVudCc7XG5pbXBvcnQge0hsc1BsYXllclR5cGUsIFNoYWthVHlwZSwgV2ViUGxheWVyVHlwZX0gZnJvbSAnLi9zdHJlYW1pbmcvU3RyZWFtVHlwZXMnO1xuaW1wb3J0IERpc2NvdmVyeVVyaSBmcm9tICcuL2Rpc2NvdmVyeS9EaXNjb3ZlcnlVcmknO1xuaW1wb3J0IE1ldHJpY3NGYWN0b3J5IGZyb20gJy4uL21ldHJpY3MvTWV0cmljc0ZhY3RvcnknO1xuaW1wb3J0IFRlbGVtZXRyeURlZmF1bHQgZnJvbSAnLi4vbWV0cmljcy9UZWxlbWV0cnlEZWZhdWx0JztcblxuY29uc3QgcGFnZUxvYWRUaW1lID0gd2luZG93WydfX3BoZW5peFBhZ2VMb2FkVGltZSddIHx8IHdpbmRvd1snX19wYWdlTG9hZFRpbWUnXSB8fCBEYXRlLm5vdygpO1xuXG5pbnRlcmZhY2UgSUluaXRPcHRpb25zIHtcbiAgZGlzY292ZXJ5VXJpPzogc3RyaW5nO1xuICBwZWVyQ29ubmVjdGlvbkZhY3Rvcnk/OiBJUGVlckNvbm5lY3Rpb25GYWN0b3J5O1xuICB0ZWxlbWV0cnlMZXZlbD86IFRlbGVtZXRyeUxldmVsVHlwZTtcbiAgbG9nZ2luZ0xldmVsPzogTG9nZ2luZ0xldmVsVHlwZTtcbiAgY29uc29sZUxvZ2dpbmdMZXZlbD86IExvZ2dpbmdMZXZlbFR5cGU7XG4gIGF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0/OiBib29sZWFuO1xuICBhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZT86IGJvb2xlYW47XG4gIHdlYlBsYXllckxvYWRlcj86IChwbGF5ZXI6IFdlYlBsYXllclR5cGUpID0+IHZvaWQ7XG4gIHNoYWthUGxheWVyTG9hZGVyPzogKHBsYXllcjogU2hha2FUeXBlKSA9PiB2b2lkO1xuICBobHNKc0xvYWRlcj86IChwbGF5ZXI6IEhsc1BsYXllclR5cGUpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNESyB7XG4gIHByaXZhdGUgc3RhdGljIF9hdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmUgPSB0cnVlO1xuICBwcml2YXRlIHN0YXRpYyBfYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uID0gdHJ1ZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2F1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0gPSB0cnVlO1xuICBwcml2YXRlIHN0YXRpYyBfYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUgPSB0cnVlO1xuICBwcml2YXRlIHN0YXRpYyBfZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydCA9IHRydWU7XG4gIHByaXZhdGUgc3RhdGljIF9za2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXMgPSB0cnVlO1xuICBwcml2YXRlIHN0YXRpYyBfd2ViUGxheWVyTG9hZGVyID0gbnVsbDtcbiAgcHJpdmF0ZSBzdGF0aWMgX3NoYWthUGxheWVyTG9hZGVyID0gbnVsbDtcbiAgcHJpdmF0ZSBzdGF0aWMgX2hsc0pzTG9hZGVyID0gbnVsbDtcbiAgcHJpdmF0ZSBzdGF0aWMgX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXI6IElDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyID0gbmV3IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yOiBBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcjtcbiAgcHJpdmF0ZSBzdGF0aWMgX2Vudmlyb25tZW50OiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KCcnKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3RlbGVtZXRyeVVybDogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPignaHR0cHM6Ly90ZWxlbWV0cnkucGhlbml4cnRzLmNvbS90ZWxlbWV0cnknKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX21heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSA4O1xuICBwcml2YXRlIHN0YXRpYyBfdGVsZW1ldHJ5TGV2ZWw6IFN1YmplY3Q8VGVsZW1ldHJ5TGV2ZWw+ID0gbmV3IFN1YmplY3Q8VGVsZW1ldHJ5TGV2ZWw+KFRlbGVtZXRyeURlZmF1bHQuZGVmYXVsdFRlbGVtZXRyeUxldmVsKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX21ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX21ldHJpY3NDb25maWd1cmF0aW9uOiBNZXRyaWNzQ29uZmlndXJhdGlvbjtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3NlbmRMb2NhbENhbmRpZGF0ZXM6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdChCdWlsZEZlYXR1cmVzLnNlbmRMb2NhbENhbmRpZGF0ZXMpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfdGVuYW5jeTogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPignJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9jbGllbnRTZXNzaW9uSWQ6IHN0cmluZyA9IFN0cmluZ3MucmFuZG9tKDMyKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2xvYWRlZFRpbWVzdGFtcDogRGF0ZSA9IG5ldyBEYXRlKCk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU0RLJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pbml0aWFsaXplZDogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3JlYWRPbmx5SW5pdGlhbGl6ZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4oU0RLLl9pbml0aWFsaXplZCk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9yZWFkT25seURpc2NvdmVyeVVyaTogUmVhZE9ubHlTdWJqZWN0PHN0cmluZz4gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PHN0cmluZz4oRGlzY292ZXJ5VXJpLnVyaSk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9yZWFkT25seVBlZXJDb25uZWN0aW9uRmFjdG9yeTogUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb25GYWN0b3J5PihQZWVyQ29ubmVjdGlvblNlcnZpY2UucGVlckNvbm5lY3Rpb25GYWN0b3J5KTtcblxuICBzdGF0aWMgZ2V0IHBhZ2VMb2FkVGltZSgpOiBudW1iZXIge1xuICAgIHJldHVybiBwYWdlTG9hZFRpbWU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNlbmRMb2NhbENhbmRpZGF0ZXMoKTogU3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbmRMb2NhbENhbmRpZGF0ZXM7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHRlbmFuY3koKTogU3ViamVjdDxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5fdGVuYW5jeTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgY2xpZW50U2Vzc2lvbklkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFNESy5fY2xpZW50U2Vzc2lvbklkO1xuICB9XG5cbiAgc3RhdGljIGdldCBsb2FkZWRUaW1lc3RhbXAoKTogRGF0ZSB7XG4gICAgcmV0dXJuIFNESy5fbG9hZGVkVGltZXN0YW1wO1xuICB9XG5cbiAgc3RhdGljIGdldCBpbml0aWFsaXplZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBTREsuX3JlYWRPbmx5SW5pdGlhbGl6ZWQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGRpc2NvdmVyeVVyaSgpOiBSZWFkT25seVN1YmplY3Q8c3RyaW5nPiB7XG4gICAgcmV0dXJuIFNESy5fcmVhZE9ubHlEaXNjb3ZlcnlVcmk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHBlZXJDb25uZWN0aW9uRmFjdG9yeSgpOiBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uRmFjdG9yeT4ge1xuICAgIHJldHVybiBTREsuX3JlYWRPbmx5UGVlckNvbm5lY3Rpb25GYWN0b3J5O1xuICB9XG5cbiAgc3RhdGljIGdldCBhdXRvbWF0aWNSZXRyeU9uRmFpbHVyZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gU0RLLl9hdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGF1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gU0RLLl9hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb247XG4gIH1cblxuICBzdGF0aWMgZ2V0IGF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFNESy5fYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFNESy5fYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2ZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fc2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzO1xuICB9XG5cbiAgc3RhdGljIGdldCB3ZWJQbGF5ZXJMb2FkZXIoKTogKFdlYlBsYXllclR5cGUpID0+IHZvaWQge1xuICAgIHJldHVybiB0aGlzLl93ZWJQbGF5ZXJMb2FkZXI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNoYWthUGxheWVyTG9hZGVyKCk6IChTaGFrYVR5cGUpID0+IHZvaWQge1xuICAgIHJldHVybiB0aGlzLl9zaGFrYVBsYXllckxvYWRlcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaGxzSnNMb2FkZXIoKTogKEhsc1BsYXllclR5cGUpID0+IHZvaWQge1xuICAgIHJldHVybiB0aGlzLl9obHNKc0xvYWRlcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgbWV0cmljc1NlcnZpY2UoKTogTWV0cmljc1NlcnZpY2Uge1xuICAgIHJldHVybiBTREsuX21ldHJpY3NTZXJ2aWNlO1xuICB9XG5cbiAgc3RhdGljIGdldCBhcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcigpOiBBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciB7XG4gICAgcmV0dXJuIHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yO1xuICB9XG5cbiAgc3RhdGljIGdldCB0ZWxlbWV0cnlVcmwoKTogU3ViamVjdDxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5fdGVsZW1ldHJ5VXJsO1xuICB9XG5cbiAgc3RhdGljIGdldCBtYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX21heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHM7XG4gIH1cblxuICBzdGF0aWMgc2V0IG1heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMocmV0cmllc0Ftb3VudDogbnVtYmVyKSB7XG4gICAgdGhpcy5fbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IHJldHJpZXNBbW91bnQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGxvZ2dpbmdMZXZlbCgpOiBMb2dnaW5nTGV2ZWxUeXBlIHtcbiAgICByZXR1cm4gTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlKHRoaXMuX2xvZ2dlci50aHJlc2hvbGQudmFsdWUpO1xuICB9XG5cbiAgc3RhdGljIGdldCB0ZWxlbWV0cnlMZXZlbCgpOiBUZWxlbWV0cnlMZXZlbFR5cGUge1xuICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbE1hcHBpbmcuY29udmVydFRlbGVtZXRyeUxldmVsVG9UZWxlbWV0cnlMZXZlbFR5cGUoU0RLLl90ZWxlbWV0cnlMZXZlbC52YWx1ZSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGJyb3dzZXJEZXRlY3RvcigpOiBCcm93c2VyRGV0ZWN0b3Ige1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3I7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlUZWxlbWV0cnlDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24gPSBMb2dnZXJGYWN0b3J5LnRlbGVtZXRyeUNvbmZpZ3VyYXRpb247XG5cbiAgICB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnNlc3Npb25JZCA9IFNESy5jbGllbnRTZXNzaW9uSWQ7XG5cbiAgICBjb25zdCBpZ25vcmVkRW52aXJvbm1lbnQgPSBTREsuX2Vudmlyb25tZW50LnN1YnNjcmliZShlbnZpcm9ubWVudCA9PiB7XG4gICAgICB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLmVudmlyb25tZW50ID0gZW52aXJvbm1lbnQ7XG4gICAgfSk7XG4gICAgY29uc3QgaWdub3JlZERpc2NvdmVyeVVyaSA9IFNESy50ZWxlbWV0cnlVcmwuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIGNvbnN0IHRlbGVtZXRyeUFwcGVuZGVyID0gdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy52YWx1ZS5maW5kKGFwcGVuZGVyID0+IGFwcGVuZGVyIGluc3RhbmNlb2YgVGVsZW1ldHJ5QXBwZW5kZXIpO1xuXG4gICAgICBpZiAodGVsZW1ldHJ5QXBwZW5kZXIpIHtcbiAgICAgICAgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi51cmwgPSB2YWx1ZTtcblxuICAgICAgICB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnJlbW92ZSh0ZWxlbWV0cnlBcHBlbmRlcik7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMuYWRkKG5ldyBUZWxlbWV0cnlBcHBlbmRlcih0ZWxlbWV0cnlDb25maWd1cmF0aW9uKSk7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdUZWxlbWV0cnkgVVJMIHdhcyBzZXQgdG8gWyVzXScsIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24udXJsKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBpZ25vcmVkVGVuYW5jeSA9IFNESy5fdGVuYW5jeS5zdWJzY3JpYmUodGVuYW5jeSA9PiB7XG4gICAgICBjb25zdCB0ZWxlbWV0cnlBcHBlbmRlciA9IHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMudmFsdWUuZmluZChhcHBlbmRlciA9PiBhcHBlbmRlciBpbnN0YW5jZW9mIFRlbGVtZXRyeUFwcGVuZGVyKTtcblxuICAgICAgaWYgKHRlbGVtZXRyeUFwcGVuZGVyICYmIHRlbmFuY3kpIHtcbiAgICAgICAgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50ZW5hbmN5ID0gdGVuYW5jeTtcblxuICAgICAgICB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnJlbW92ZSh0ZWxlbWV0cnlBcHBlbmRlcik7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMuYWRkKG5ldyBUZWxlbWV0cnlBcHBlbmRlcih0ZWxlbWV0cnlDb25maWd1cmF0aW9uKSk7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdUZWxlbWV0cnkgdGVuYW5jeSB3YXMgc2V0IHRvIFslc10nLCB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRlbmFuY3kpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5TWV0cmljc0NvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgU0RLLl9tZXRyaWNzU2VydmljZSA9IE1ldHJpY3NGYWN0b3J5LmdldE1ldHJpY3NTZXJ2aWNlKERpc2NvdmVyeVVyaS51cmkudmFsdWUpO1xuICAgIFNESy5fbWV0cmljc0NvbmZpZ3VyYXRpb24gPSBTREsuX21ldHJpY3NTZXJ2aWNlLm1ldHJpY3NDb25maWd1cmF0aW9uO1xuXG4gICAgU0RLLl9tZXRyaWNzQ29uZmlndXJhdGlvbi5zZXNzaW9uSWQgPSBTREsuY2xpZW50U2Vzc2lvbklkO1xuXG4gICAgY29uc3QgaWdub3JlZEVudmlyb25tZW50ID0gU0RLLl9lbnZpcm9ubWVudC5zdWJzY3JpYmUoZW52aXJvbm1lbnQgPT4ge1xuICAgICAgU0RLLl9tZXRyaWNzQ29uZmlndXJhdGlvbi5lbnZpcm9ubWVudCA9IGVudmlyb25tZW50O1xuICAgIH0pO1xuICAgIGNvbnN0IGlnbm9yZWREaXNjb3ZlcnlVcmkgPSBTREsudGVsZW1ldHJ5VXJsLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICBTREsuX21ldHJpY3NDb25maWd1cmF0aW9uLnVybCA9IHZhbHVlO1xuICAgIH0pO1xuICAgIGNvbnN0IGlnbm9yZWRUZW5hbmN5ID0gU0RLLl90ZW5hbmN5LnN1YnNjcmliZSh0ZW5hbmN5ID0+IHtcbiAgICAgIFNESy5fbWV0cmljc0NvbmZpZ3VyYXRpb24udGVuYW5jeSA9IHRlbmFuY3k7XG4gICAgfSk7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKCdwaGVuaXgtbWV0cmljcy1sZXZlbCcpO1xuXG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBNZXRyaWNzRmFjdG9yeS5zZXRUZWxlbWV0cnlMZXZlbChUZWxlbWV0cnlMZXZlbFt2YWx1ZV0pO1xuICAgIH1cblxuICAgIGNvbnN0IGlnbm9yZWRUZWxlbWV0cnlMZXZlbCA9IFNESy5fdGVsZW1ldHJ5TGV2ZWwuc3Vic2NyaWJlKHRlbGVtZXRyeUxldmVsID0+IHtcbiAgICAgIE1ldHJpY3NGYWN0b3J5LnNldFRlbGVtZXRyeUxldmVsKHRlbGVtZXRyeUxldmVsKTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseUF1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZUZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZSA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0Qm9vbGVhblZhbHVlKCdwaGVuaXgtYXV0b21hdGljYWxseS1yZXRyeS1vbi1mYWlsdXJlJyk7XG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0F1dG9tYXRpY2FsbHkgcmV0cnkgb24gZmFpbHVyZSBpcyBzZXQgdG86IFslc10nLCB0aGlzLl9hdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmUpO1xuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5QXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRCb29sZWFuVmFsdWUoJ3BoZW5peC1hdXRvbWF0aWNhbGx5LXJlY29ubmVjdC1wZWVyLWNvbm5lY3Rpb24nKTtcbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnQXV0b21hdGljYWxseSByZWNvbm5lY3QgcGVlciBjb25uZWN0aW9uIGlzIHNldCB0bzogWyVzXScsIHRoaXMuX2F1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbik7XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBzdGF0aWMgYXBwbHlGb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0RnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydCA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0Qm9vbGVhblZhbHVlKCdwaGVuaXgtZm9yY2UtZ2FyYmFnZS1jb2xsZWN0aW9uLW9uLXJlc3RhcnQnKTtcbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnRm9yY2UgZ2FyYmFnZSBjb2xsZWN0aW9uIG9uIHJlc3RhcnQgaXMgc2V0IHRvOiBbJXNdJywgdGhpcy5fZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydCk7XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBzdGF0aWMgYXBwbHlTa2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXNGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9za2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXMgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldEJvb2xlYW5WYWx1ZSgncGhlbml4LXNraXAtZ2FyYmFnZS1jb2xsZWN0aW9uLW9uLW1vYmlsZS1kZXZpY2VzJyk7XG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1NraXAgZ2FyYmFnZSBjb2xsZWN0aW9uIG9uIG1vYmlsZSBkZXZpY2VzIG9uIHJlc3RhcnQgaXMgc2V0IHRvOiBbJXNdJywgdGhpcy5fc2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzKTtcblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseURpc2NvdmVyeVVyaURlZmF1bHRGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICBTREsuZGlzY292ZXJ5VXJpLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICBTREsudGVsZW1ldHJ5VXJsLnZhbHVlID0gU0RLLmdldFRlbGVtZXRyeVVybCh2YWx1ZSk7XG4gICAgICBTREsuX2Vudmlyb25tZW50LnZhbHVlID0gRW52aXJvbm1lbnQuZ2V0RW52aXJvbm1lbnRGcm9tVXJsKHZhbHVlKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGNoYW5uZWxUb2tlbiA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoJ3BoZW5peC1jaGFubmVsLXRva2VuJyk7XG5cbiAgICBpZiAoY2hhbm5lbFRva2VuKSB7XG4gICAgICBjb25zdCBlZGdlVG9rZW4gPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKGNoYW5uZWxUb2tlbik7XG5cbiAgICAgIFNESy5fdGVuYW5jeS52YWx1ZSA9IGVkZ2VUb2tlbi50ZW5hbmN5O1xuICAgICAgRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSA9IChlZGdlVG9rZW4udXJpIHx8IFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpLnRvU3RyaW5nKCk7XG5cbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdEaXNjb3ZlcnkgVVJJIHNldCBmcm9tIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHRvIFslc10nLCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHVyaVZhbHVlID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRTdHJpbmdWYWx1ZSgncGhlbml4LXVyaScpO1xuXG4gICAgaWYgKHVyaVZhbHVlKSB7XG4gICAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gdXJpVmFsdWU7XG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnRGlzY292ZXJ5IFVSSSBzZXQgZnJvbSBcInBoZW5peC11cmlcIiBjb25maWd1cmF0aW9uIHBhcmFtZXRlciB0YWcgdG8gWyVzXScsIFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYmFzZVVSSVZhbHVlID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRTdHJpbmdWYWx1ZSgncGhlbml4LWJhc2UtdXJpJyk7XG5cbiAgICBpZiAoYmFzZVVSSVZhbHVlKSB7XG4gICAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gYCR7YmFzZVVSSVZhbHVlfS9wY2FzdC9lbmRQb2ludHNgO1xuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Rpc2NvdmVyeSBVUkkgc2V0IGZyb20gXCJwaGVuaXgtYmFzZS11cmlcIiBjb25maWd1cmF0aW9uIHBhcmFtZXRlciB0YWcgdG8gWyVzXScsIFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGluaXQob3B0aW9ucz86IElJbml0T3B0aW9ucyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5faW5pdGlhbGl6ZWQudmFsdWUpIHtcbiAgICAgIHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yID0gbmV3IEFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yKCk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgIGlmIChvcHRpb25zLmRpc2NvdmVyeVVyaSkge1xuICAgICAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gb3B0aW9ucy5kaXNjb3ZlcnlVcmk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLnBlZXJDb25uZWN0aW9uRmFjdG9yeSkge1xuICAgICAgICBQZWVyQ29ubmVjdGlvblNlcnZpY2UucGVlckNvbm5lY3Rpb25GYWN0b3J5LnZhbHVlID0gb3B0aW9ucy5wZWVyQ29ubmVjdGlvbkZhY3Rvcnk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLnRlbGVtZXRyeUxldmVsICYmIFRlbGVtZXRyeUxldmVsW29wdGlvbnMudGVsZW1ldHJ5TGV2ZWxdKSB7XG4gICAgICAgIFNESy5fdGVsZW1ldHJ5TGV2ZWwudmFsdWUgPSBUZWxlbWV0cnlMZXZlbE1hcHBpbmcuY29udmVydFRlbGVtZXRyeUxldmVsVHlwZVRvVGVsZW1ldHJ5TGV2ZWwob3B0aW9ucy50ZWxlbWV0cnlMZXZlbCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmxvZ2dpbmdMZXZlbCAmJiBMb2dnaW5nTGV2ZWxbb3B0aW9ucy5sb2dnaW5nTGV2ZWxdKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci50aHJlc2hvbGQuc2V0VGhyZXNob2xkKExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFR5cGVUb0xvZ2dpbmdMZXZlbChvcHRpb25zLmxvZ2dpbmdMZXZlbCkpO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5jb25zb2xlTG9nZ2luZ0xldmVsICYmXG4gICAgICAgIExvZ2dpbmdMZXZlbFtvcHRpb25zLmNvbnNvbGVMb2dnaW5nTGV2ZWxdKSB7XG4gICAgICAgIGNvbnN0IGNvbnNvbGVBcHBlbmRlciA9IHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMudmFsdWUuZmluZChhcHBlbmRlciA9PiBhcHBlbmRlciBpbnN0YW5jZW9mIENvbnNvbGVBcHBlbmRlcik7XG5cbiAgICAgICAgaWYgKGNvbnNvbGVBcHBlbmRlcikge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMucmVtb3ZlKGNvbnNvbGVBcHBlbmRlcik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5jb25zb2xlTG9nZ2luZ0xldmVsICE9PSAnT2ZmJykge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMuYWRkKG5ldyBDb25zb2xlQXBwZW5kZXIoTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVHlwZVRvTG9nZ2luZ0xldmVsKG9wdGlvbnMuY29uc29sZUxvZ2dpbmdMZXZlbCkpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMuYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHRoaXMuX2F1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0gPSBvcHRpb25zLmF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW07XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHRoaXMuX2F1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlID0gb3B0aW9ucy5hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMud2ViUGxheWVyTG9hZGVyKSB7XG4gICAgICAgIHRoaXMuX3dlYlBsYXllckxvYWRlciA9IG9wdGlvbnMud2ViUGxheWVyTG9hZGVyO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5zaGFrYVBsYXllckxvYWRlcikge1xuICAgICAgICB0aGlzLl9zaGFrYVBsYXllckxvYWRlciA9IG9wdGlvbnMuc2hha2FQbGF5ZXJMb2FkZXI7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmhsc0pzTG9hZGVyKSB7XG4gICAgICAgIHRoaXMuX2hsc0pzTG9hZGVyID0gb3B0aW9ucy5obHNKc0xvYWRlcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBTREsuX2luaXRpYWxpemVkLnZhbHVlID0gdHJ1ZTtcbiAgfVxuXG4gIHN0YXRpYyBkaXNwb3NlKCk6IHZvaWQge1xuICAgIFNESy5faW5pdGlhbGl6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvci5kaXNwb3NlKCk7XG4gICAgdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IgPSBudWxsO1xuICB9XG5cbiAgc3RhdGljIGdldFRlbGVtZXRyeVVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFRlbGVtZXRyeVVybC5nZXRUZWxlbWV0cnlVcmwodXJsKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTREsgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59XG5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd1bmxvYWQnLCAoKSA9PiB7XG4gIFNESy5kaXNwb3NlKCk7XG59KTtcblxuU0RLLmFwcGx5RGlzY292ZXJ5VXJpRGVmYXVsdEZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk7XG5TREsuYXBwbHlNZXRyaWNzQ29uZmlndXJhdGlvbigpO1xuU0RLLmFwcGx5VGVsZW1ldHJ5Q29uZmlndXJhdGlvbigpO1xuU0RLLmFwcGx5QXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTtcblNESy5hcHBseUF1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbkZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk7XG5TREsuYXBwbHlGb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0RnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTtcblNESy5hcHBseVNraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlc0Zyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk7XG5TREsuaW5pdCgpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlVcmwge1xuICBzdGF0aWMgZ2V0VGVsZW1ldHJ5VXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYmFzZVVSTCA9IG5ldyBVUkwodXJsKTtcbiAgICAgIGNvbnN0IHNlZ21lbnRzID0gYmFzZVVSTC5ob3N0bmFtZS5zcGxpdCgnLicpO1xuXG4gICAgICBzd2l0Y2ggKGJhc2VVUkwucHJvdG9jb2wpIHtcbiAgICAgICAgY2FzZSAnd3M6JzpcbiAgICAgICAgICBiYXNlVVJMLnByb3RvY29sID0gJ2h0dHA6JztcblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd3c3M6JzpcbiAgICAgICAgICBiYXNlVVJMLnByb3RvY29sID0gJ2h0dHBzOic7XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2VnbWVudHMubGVuZ3RoID09PSAyIHx8XG4gICAgICAgICAgKHNlZ21lbnRzLmxlbmd0aCA9PT0gMyAmJiBzZWdtZW50c1tzZWdtZW50cy5sZW5ndGggLSAyXS5sZW5ndGggPD0gMiAmJiBzZWdtZW50c1tzZWdtZW50cy5sZW5ndGggLSAxXS5sZW5ndGggPD0gMylcbiAgICAgICkge1xuICAgICAgICBzZWdtZW50cy51bnNoaWZ0KCd0ZWxlbWV0cnknKTtcbiAgICAgIH0gZWxzZSBpZiAoc2VnbWVudHNbMF0uc3RhcnRzV2l0aCgnc3RnLScpIHx8IHNlZ21lbnRzWzBdLmVuZHNXaXRoKCctc3RnJykgfHwgc2VnbWVudHNbMF0uaW5jbHVkZXMoJy1zdGctJykgfHwgc2VnbWVudHNbMF0gPT09ICdzdGcnKSB7XG4gICAgICAgIHNlZ21lbnRzWzBdID0gJ3RlbGVtZXRyeS1zdGcnO1xuICAgICAgfSBlbHNlIGlmIChzZWdtZW50c1swXS5zdGFydHNXaXRoKCdsb2NhbCcpIHx8IHNlZ21lbnRzWzBdLmVuZHNXaXRoKCctbG9jYWwnKSkge1xuICAgICAgICAvLyBMZWF2ZSBVUkwgdW5jaGFuZ2VkXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWdtZW50c1swXSA9ICd0ZWxlbWV0cnknO1xuICAgICAgfVxuXG4gICAgICBiYXNlVVJMLmhvc3RuYW1lID0gc2VnbWVudHMuam9pbignLicpO1xuXG4gICAgICByZXR1cm4gYCR7YmFzZVVSTC5vcmlnaW59L3RlbGVtZXRyeWA7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IHR5cGUgQml0cmF0ZVN0YXRlVHlwZSA9ICdLZWVwJyB8ICdSZXNldCc7XG5leHBvcnQgdHlwZSBCaXRyYXRlTW9kZVR5cGUgPSAnTm9ybWFsJyB8ICdGb3JjZScgfCAnUmVzZXQnO1xuXG5leHBvcnQgZW51bSBCaXRyYXRlU3RhdGUge1xuICBLZWVwLFxuICBSZXNldFxufVxuXG5leHBvcnQgZW51bSBCaXRyYXRlTW9kZSB7XG4gIE5vcm1hbCxcbiAgRm9yY2UsXG4gIFJlc2V0XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlIHtcbiAgYXBpVmVyc2lvbjogbnVtYmVyO1xuICBzaGFyZWRTZWNyZXQ6IHN0cmluZztcbiAgZWxhcHNlZEluTWlsbGlzZWNvbmRzOiBudW1iZXI7XG4gIGJpdHJhdGVJbkJpdHNQZXJTZWNvbmQ6IG51bWJlcjtcbiAgYml0cmF0ZVN0YXRlOiBCaXRyYXRlU3RhdGVUeXBlO1xuICBiaXRyYXRlTW9kZTogQml0cmF0ZU1vZGVUeXBlO1xufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IFJlYWRPbmx5U3ViamVjdCBmcm9tICcuLi8uLi9yeC9SZWFkT25seVN1YmplY3QnO1xuaW1wb3J0IERpbWVuc2lvbiBmcm9tICcuLi8uLi92aWRlby9EaW1lbnNpb24nO1xuaW1wb3J0IEV4cG9uZW50aWFsQmFja29mZiBmcm9tICcuLi8uLi90aW1lL0V4cG9uZW50aWFsQmFja29mZic7XG5pbXBvcnQgRW5kUG9pbnQsIHtJU3RyZWFtfSBmcm9tICcuLi9kaXNjb3ZlcnkvRW5kUG9pbnQnO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IEdhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyIGZyb20gJy4uLy4uL2RvbS9HYXJiYWdlQ29sbGVjdG9yTWFuYWdlcic7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4uLy4uL3J0Yy9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IENoYW5uZWxTdGF0ZSBmcm9tICcuL0NoYW5uZWxTdGF0ZSc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBWaWRlb1RlbGVtZXRyeSBmcm9tICcuLi8uLi92aWRlby9WaWRlb1RlbGVtZXRyeSc7XG5pbXBvcnQgU2Vzc2lvblRlbGVtZXRyeSBmcm9tICcuLi8uLi92aWRlby9TZXNzaW9uVGVsZW1ldHJ5JztcbmltcG9ydCB7SVJ0Y01vbml0b3JTdGF0aXN0aWN9IGZyb20gJy4uLy4uL3J0Yy9SdGNDb25uZWN0aW9uTW9uaXRvcic7XG5pbXBvcnQge0JpdHJhdGVNb2RlLCBCaXRyYXRlU3RhdGV9IGZyb20gJy4uL2FwaS9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSc7XG5pbXBvcnQgRWRnZUF1dGhQYXJzZXIgZnJvbSAnLi4vLi4vZWRnZUF1dGgvRWRnZUF1dGhQYXJzZXInO1xuaW1wb3J0IHtFbmNvZGVkRWRnZVRva2VufSBmcm9tICcuLi8uLi9lZGdlQXV0aC9FbmNvZGVkRWRnZVRva2VuJztcbmltcG9ydCB7Qml0c1BlclNlY29uZCwgTWlsbGlzZWNvbmR9IGZyb20gJy4uLy4uL3VuaXRzL1VuaXRzJztcbmltcG9ydCBUb2tlbkNvbnRleHQgZnJvbSAnLi4vY29udGV4dC9Ub2tlbkNvbnRleHQnO1xuaW1wb3J0IENoYW5uZWxDb250ZXh0LCB7SVN0cmVhbVRyYWNrVHJhbnNmb3JtLCBJRW5jb2RlZFN0cmVhbVNpbmssIENoYW5uZWxDb250ZXh0T3B0aW9uc30gZnJvbSAnLi4vY29udGV4dC9DaGFubmVsQ29udGV4dCc7XG5pbXBvcnQgUGVlckNvbm5lY3Rpb25Db250ZXh0IGZyb20gJy4uL2NvbnRleHQvUGVlckNvbm5lY3Rpb25Db250ZXh0JztcbmltcG9ydCBTdGF0ZUNvbnRleHQgZnJvbSAnLi4vY29udGV4dC9TdGF0ZUNvbnRleHQnO1xuaW1wb3J0IFN0cmVhbUZhY3RvcnkgZnJvbSAnLi4vc3RyZWFtaW5nL1N0cmVhbUZhY3RvcnknO1xuaW1wb3J0IERpc2NvdmVyeSBmcm9tICcuLi9kaXNjb3ZlcnkvRGlzY292ZXJ5JztcbmltcG9ydCBEaXNjb3ZlcnlVcmkgZnJvbSAnLi4vZGlzY292ZXJ5L0Rpc2NvdmVyeVVyaSc7XG5pbXBvcnQgTWV0cmljc0ZhY3RvcnkgZnJvbSAnLi4vLi4vbWV0cmljcy9NZXRyaWNzRmFjdG9yeSc7XG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi4vLi4vbWV0cmljcy9NZXRyaWNzU2VydmljZSc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuXG5jb25zdCBkZWZhdWx0U3RyZWFtVGVybWluYXRpb25SZWFzb24gPSAnY2xpZW50OnRlcm1pbmF0aW9uJztcbmNvbnN0IGZhaWx1cmVDb3VudENsZWFuVXBJbnRlcnZhbEluTWlsbGlzZWNvbmRzID0gMzAwMDtcbmNvbnN0IHN0YW5kYnlQb2xsaW5nSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyA9IDE1MDAwO1xuXG5leHBvcnQgdHlwZSBDaGFubmVsT3B0aW9ucyA9IHtcbiAgdGFyZ2V0TGFnPzogTWlsbGlzZWNvbmQ7XG4gIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s/OiBJU3RyZWFtVHJhY2tUcmFuc2Zvcm08VmlkZW9GcmFtZT47XG4gIGVuY29kZWRWaWRlb1N0cmVhbVNpbms/OiBJRW5jb2RlZFN0cmVhbVNpbms8UlRDRW5jb2RlZFZpZGVvRnJhbWU+O1xuICBlbmNvZGVkQXVkaW9TdHJlYW1TaW5rPzogSUVuY29kZWRTdHJlYW1TaW5rPFJUQ0VuY29kZWRBdWRpb0ZyYW1lPjtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENoYW5uZWwgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdDaGFubmVsJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Rva2VuQ29udGV4dDogVG9rZW5Db250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9jaGFubmVsQ29udGV4dDogQ2hhbm5lbENvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BlZXJDb25uZWN0aW9uQ29udGV4dDogUGVlckNvbm5lY3Rpb25Db250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdGF0ZUNvbnRleHQ6IFN0YXRlQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfZXhwb25lbnRpYWxCYWNrb2ZmOiBFeHBvbmVudGlhbEJhY2tvZmY7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5uZWxTdGFydFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlWaWRlb0VsZW1lbnQ6IFJlYWRPbmx5U3ViamVjdDxIVE1MVmlkZW9FbGVtZW50PjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlUb2tlbjogUmVhZE9ubHlTdWJqZWN0PEVuY29kZWRFZGdlVG9rZW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVBlZXJDb25uZWN0aW9uOiBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlTdGF0ZTogUmVhZE9ubHlTdWJqZWN0PENoYW5uZWxTdGF0ZT47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5QXV0b011dGVkOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5QXV0b1BhdXNlZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVRva2VuRXhwaXJpbmc6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlBdXRob3JpemVkOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5T25saW5lOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5TG9hZGluZzogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVBsYXlpbmc6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlTdGFuZGJ5OiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5U3RvcHBlZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVRhcmdldExhZzogUmVhZE9ubHlTdWJqZWN0PE1pbGxpc2Vjb25kPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlMYWc6IFJlYWRPbmx5U3ViamVjdDxNaWxsaXNlY29uZD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5Qml0cmF0ZUxpbWl0OiBSZWFkT25seVN1YmplY3Q8Qml0c1BlclNlY29uZD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5UmVzb2x1dGlvbjogUmVhZE9ubHlTdWJqZWN0PERpbWVuc2lvbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5RmFpbHVyZUNvdW50OiBSZWFkT25seVN1YmplY3Q8bnVtYmVyPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlFbmRQb2ludDogUmVhZE9ubHlTdWJqZWN0PEVuZFBvaW50PjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlTdHJlYW06IFJlYWRPbmx5U3ViamVjdDxJU3RyZWFtPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlSdGNTdGF0aXN0aWNzOiBSZWFkT25seVN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seU1lZGlhU3RyZWFtOiBSZWFkT25seVN1YmplY3Q8TWVkaWFTdHJlYW0+O1xuXG4gIHByaXZhdGUgX21ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2Vzc2lvblRlbGVtZXRyeTogU2Vzc2lvblRlbGVtZXRyeTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyOiAoKSA9PiB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCwgdG9rZW46IEVuY29kZWRFZGdlVG9rZW4sIG9wdGlvbnM/OiBDaGFubmVsT3B0aW9ucykge1xuICAgIGNvbnN0IGVkZ2VUb2tlbiA9IEVkZ2VBdXRoUGFyc2VyLnBhcnNlVG9rZW4odG9rZW4pO1xuICAgIGNvbnN0IGNoYW5uZWxDb250ZXh0T3B0aW9uczogQ2hhbm5lbENvbnRleHRPcHRpb25zID0ge1xuICAgICAgdGFyZ2V0TGFnOiBvcHRpb25zPy50YXJnZXRMYWcsXG4gICAgICB2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBvcHRpb25zPy52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrLFxuICAgICAgZW5jb2RlZFZpZGVvU3RyZWFtU2luazogb3B0aW9ucz8uZW5jb2RlZFZpZGVvU3RyZWFtU2luayxcbiAgICAgIGVuY29kZWRBdWRpb1N0cmVhbVNpbms6IG9wdGlvbnM/LmVuY29kZWRBdWRpb1N0cmVhbVNpbmssXG4gICAgICBoYXNJbnNlcnRhYmxlU3RyZWFtczogZWRnZVRva2VuLmNhcGFiaWxpdGllcy5pbmNsdWRlcygnaW5zZXJ0YWJsZS1zdHJlYW1zJylcbiAgICB9O1xuXG4gICAgdGhpcy5fdG9rZW5Db250ZXh0ID0gbmV3IFRva2VuQ29udGV4dCh0b2tlbik7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQgPSBuZXcgQ2hhbm5lbENvbnRleHQoY2hhbm5lbENvbnRleHRPcHRpb25zKTtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQgPSBuZXcgUGVlckNvbm5lY3Rpb25Db250ZXh0KCk7XG4gICAgdGhpcy5fc3RhdGVDb250ZXh0ID0gbmV3IFN0YXRlQ29udGV4dCgpO1xuICAgIHRoaXMuX2V4cG9uZW50aWFsQmFja29mZiA9IG5ldyBFeHBvbmVudGlhbEJhY2tvZmYoKTtcbiAgICB0aGlzLl9jaGFubmVsU3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLl9yZWFkT25seVZpZGVvRWxlbWVudCA9IG5ldyBSZWFkT25seVN1YmplY3Q8SFRNTFZpZGVvRWxlbWVudD4odGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50KTtcbiAgICB0aGlzLl9yZWFkT25seVRva2VuID0gbmV3IFJlYWRPbmx5U3ViamVjdDxzdHJpbmc+KHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbik7XG4gICAgdGhpcy5fcmVhZE9ubHlQZWVyQ29ubmVjdGlvbiA9IG5ldyBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uPih0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24pO1xuICAgIHRoaXMuX3JlYWRPbmx5U3RhdGUgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PENoYW5uZWxTdGF0ZT4odGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUpO1xuICAgIHRoaXMuX3JlYWRPbmx5QXV0b011dGVkID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQpO1xuICAgIHRoaXMuX3JlYWRPbmx5QXV0b1BhdXNlZCA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZCk7XG4gICAgdGhpcy5fcmVhZE9ubHlUb2tlbkV4cGlyaW5nID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl90b2tlbkNvbnRleHQudG9rZW5FeHBpcmluZyk7XG4gICAgdGhpcy5fcmVhZE9ubHlBdXRob3JpemVkID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkKTtcbiAgICB0aGlzLl9yZWFkT25seU9ubGluZSA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQub25saW5lKTtcbiAgICB0aGlzLl9yZWFkT25seUxvYWRpbmcgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcpO1xuICAgIHRoaXMuX3JlYWRPbmx5UGxheWluZyA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZyk7XG4gICAgdGhpcy5fcmVhZE9ubHlTdGFuZGJ5ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5zdGFuZGJ5KTtcbiAgICB0aGlzLl9yZWFkT25seVN0b3BwZWQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0b3BwZWQpO1xuICAgIHRoaXMuX3JlYWRPbmx5VGFyZ2V0TGFnID0gbmV3IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnRhcmdldExhZyk7XG4gICAgdGhpcy5fcmVhZE9ubHlMYWcgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PG51bWJlcj4odGhpcy5fY2hhbm5lbENvbnRleHQubGFnKTtcbiAgICB0aGlzLl9yZWFkT25seUJpdHJhdGVMaW1pdCA9IG5ldyBSZWFkT25seVN1YmplY3Q8bnVtYmVyPih0aGlzLl9jaGFubmVsQ29udGV4dC5iaXRyYXRlTGltaXQpO1xuICAgIHRoaXMuX3JlYWRPbmx5UmVzb2x1dGlvbiA9IG5ldyBSZWFkT25seVN1YmplY3Q8RGltZW5zaW9uPih0aGlzLl9jaGFubmVsQ29udGV4dC5yZXNvbHV0aW9uKTtcbiAgICB0aGlzLl9yZWFkT25seUZhaWx1cmVDb3VudCA9IG5ldyBSZWFkT25seVN1YmplY3Q8bnVtYmVyPih0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQpO1xuICAgIHRoaXMuX3JlYWRPbmx5RW5kUG9pbnQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PEVuZFBvaW50Pih0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludCk7XG4gICAgdGhpcy5fcmVhZE9ubHlTdHJlYW0gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PElTdHJlYW0+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbSk7XG4gICAgdGhpcy5fcmVhZE9ubHlSdGNTdGF0aXN0aWNzID0gbmV3IFJlYWRPbmx5U3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz4odGhpcy5fY2hhbm5lbENvbnRleHQucnRjU3RhdGlzdGljcyk7XG4gICAgdGhpcy5fcmVhZE9ubHlNZWRpYVN0cmVhbSA9IG5ldyBSZWFkT25seVN1YmplY3Q8TWVkaWFTdHJlYW0+KHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbSk7XG5cbiAgICBjb25zdCBkaXNjb3ZlcnlVcmkgPSAoZWRnZVRva2VuLnVyaSB8fCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKS50b1N0cmluZygpO1xuXG4gICAgU0RLLnRlbmFuY3kudmFsdWUgPSBlZGdlVG9rZW4udGVuYW5jeSB8fCBTREsudGVuYW5jeS52YWx1ZTtcbiAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gZGlzY292ZXJ5VXJpO1xuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlID0gTWV0cmljc0ZhY3RvcnkuZ2V0TWV0cmljc1NlcnZpY2UoZGlzY292ZXJ5VXJpKTtcbiAgICB0aGlzLl9zZXNzaW9uVGVsZW1ldHJ5ID0gbmV3IFNlc3Npb25UZWxlbWV0cnkoU0RLLnBhZ2VMb2FkVGltZSwgdGhpcy5fbWV0cmljc1NlcnZpY2UpO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQodGhpcy5fc2Vzc2lvblRlbGVtZXRyeSk7XG4gICAgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyID0gdGhpcy5oYW5kbGVWaWRlb01ldGFEYXRhQ2hhbmdlZC5iaW5kKHRoaXMpO1xuICAgIHRoaXMudmlkZW9FbGVtZW50ID0gdmlkZW9FbGVtZW50O1xuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZChcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC5zdWJzY3JpYmUodmlkZW9FbGVtZW50ID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICAgICAgaWYgKCF2aWRlb0VsZW1lbnQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzLmFkZCh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0uc3Vic2NyaWJlKHN0cmVhbSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5KSB7XG4gICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1RlbGVtZXRyeS5kaXNwb3NlKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFzdHJlYW0pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIXRoaXMudmlkZW9FbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRoaXMudmlkZW9FbGVtZW50LmRhdGFzZXQpIHtcbiAgICAgICAgICAgIHRoaXMudmlkZW9FbGVtZW50LmRhdGFzZXQuc2Vzc2lvbklkID0gU0RLLmNsaWVudFNlc3Npb25JZDtcbiAgICAgICAgICAgIHRoaXMudmlkZW9FbGVtZW50LmRhdGFzZXQuc3RyZWFtSWQgPSB0aGlzLnN0cmVhbUlkO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5ID0gbmV3IFZpZGVvVGVsZW1ldHJ5KHRoaXMuc3RyZWFtSWQsIFNESy5wYWdlTG9hZFRpbWUsIHRoaXMuX2NoYW5uZWxTdGFydFRpbWUsIHRoaXMuX21ldHJpY3NTZXJ2aWNlKTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1RlbGVtZXRyeS5zZXR1cExpc3RlbmVyRm9yVGltZVRvRmlyc3RUaW1lKHRoaXMudmlkZW9FbGVtZW50KTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1RlbGVtZXRyeS5zZXR1cExpc3RlbmVyRm9yUmVidWZmZXJpbmcodGhpcy52aWRlb0VsZW1lbnQpO1xuXG4gICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID09PSBDaGFubmVsU3RhdGUuU3RvcHBlZCkge1xuICAgICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMucmVzdGFydEFmdGVyU3RvcCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQodGhpcy5fY2hhbm5lbENvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcyk7XG4gICAgICB9KSk7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZChcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnN1YnNjcmliZShzdGF0ZSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5jbGVhckZhaWx1cmVDb3VudFRpbWVvdXQpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fY2hhbm5lbENvbnRleHQuY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5fY2hhbm5lbENvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YXRlICE9PSBDaGFubmVsU3RhdGUuUGxheWluZykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNsZWFyRmFpbHVyZUNvdW50VGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUgPSAwO1xuICAgICAgICB9LCBmYWlsdXJlQ291bnRDbGVhblVwSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyk7XG4gICAgICB9KSk7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZChcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlc29sdXRpb24uc3Vic2NyaWJlKHJlc29sdXRpb24gPT4ge1xuICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9UZWxlbWV0cnkpIHtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1RlbGVtZXRyeS5vblZpZGVvUmVzb2x1dGlvbkNoYW5nZXMocmVzb2x1dGlvbi50b1N0cmluZygpKTtcbiAgICAgICAgfVxuICAgICAgfSkpO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQoXG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5iaXRyYXRlTGltaXQuc3Vic2NyaWJlKGJpdHJhdGVMaW1pdCA9PiB7XG4gICAgICAgIGlmIChiaXRyYXRlTGltaXQgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlKSB7XG4gICAgICAgICAgY29uc3QgZWxhcHNlZEluTWlsbGlzZWNvbmRzID0gRGF0ZS5ub3coKSAtIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxJbml0aWFsaXphdGlvbi5nZXRUaW1lKCk7XG4gICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLmxpbWl0Qml0cmF0ZShcbiAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSxcbiAgICAgICAgICAgIGVsYXBzZWRJbk1pbGxpc2Vjb25kcyxcbiAgICAgICAgICAgIGJpdHJhdGVMaW1pdCxcbiAgICAgICAgICAgIEJpdHJhdGVTdGF0ZS5LZWVwLFxuICAgICAgICAgICAgQml0cmF0ZU1vZGUuTm9ybWFsXG4gICAgICAgICAgKVxuICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0Vycm9yIHdoaWxlIHNldHRpbmcgbGltaXQgYml0cmF0ZScsIGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGNvbnN0IGRlc3Ryb3lTdHJlYW1PblVubW91bnQgPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5kZXN0cm95U3RyZWFtT25Vbm1vdW50KHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSwgJ2NsaWVudDp0ZXJtaW5hdGlvbi1vbi13aW5kb3ctdW5sb2FkJyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdiZWZvcmV1bmxvYWQnLCBkZXN0cm95U3RyZWFtT25Vbm1vdW50KTtcblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2JlZm9yZXVubG9hZCcsIGRlc3Ryb3lTdHJlYW1PblVubW91bnQpO1xuICAgIH0pKTtcblxuICAgIHRoaXMuc3RhcnQoKTtcbiAgfVxuXG4gIGdldCB2aWRlb0VsZW1lbnQoKTogSFRNTFZpZGVvRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcbiAgfVxuXG4gIHNldCB2aWRlb0VsZW1lbnQodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50KSB7XG4gICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSkge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWRlZGRhdGEnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWRlZG1ldGFkYXRhJywgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuXG4gICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQpIHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQuc2Vzc2lvbklkID0gJyc7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0LnN0cmVhbUlkID0gJyc7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlbmRlcmVyRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2UoKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5zcmNPYmplY3QgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlN0b3BwZWQ7XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUgPSB2aWRlb0VsZW1lbnQ7XG5cbiAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVkZGF0YScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVkbWV0YWRhdGEnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVWaWRlb01ldGFEYXRhQ2hhbmdlZCgpOiB2b2lkIHtcbiAgICBjb25zdCB2aWRlb0VsZW1lbnQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWU7XG5cbiAgICBpZiAodmlkZW9FbGVtZW50KSB7XG4gICAgICBpZiAodGhpcy5yZXNvbHV0aW9uLnZhbHVlLndpZHRoICE9PSB2aWRlb0VsZW1lbnQudmlkZW9XaWR0aCB8fCB0aGlzLnJlc29sdXRpb24udmFsdWUuaGVpZ2h0ICE9PSB2aWRlb0VsZW1lbnQudmlkZW9IZWlnaHQpIHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVzb2x1dGlvbi52YWx1ZSA9IG5ldyBEaW1lbnNpb24odmlkZW9FbGVtZW50LnZpZGVvV2lkdGgsIHZpZGVvRWxlbWVudC52aWRlb0hlaWdodCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlc29sdXRpb24udmFsdWUgPSBEaW1lbnNpb24uZW1wdHk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHRva2VuKCk6IEVuY29kZWRFZGdlVG9rZW4ge1xuICAgIHJldHVybiB0aGlzLl90b2tlbkNvbnRleHQudG9rZW4udmFsdWU7XG4gIH1cblxuICBzZXQgdG9rZW4odG9rZW46IEVuY29kZWRFZGdlVG9rZW4pIHtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICB0aGlzLl90b2tlbkNvbnRleHQudG9rZW4udmFsdWUgPSB0b2tlbjtcbiAgICB0aGlzLl90b2tlbkNvbnRleHQudG9rZW5FeHBpcmluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgY29uc3QgZWRnZVRva2VuID0gRWRnZUF1dGhQYXJzZXIucGFyc2VUb2tlbih0aGlzLl90b2tlbkNvbnRleHQudG9rZW4udmFsdWUpO1xuICAgIGNvbnN0IGRpc2NvdmVyeVVyaSA9IChlZGdlVG9rZW4udXJpIHx8IFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpLnRvU3RyaW5nKCk7XG5cbiAgICBTREsudGVuYW5jeS52YWx1ZSA9IGVkZ2VUb2tlbi50ZW5hbmN5IHx8IFNESy50ZW5hbmN5LnZhbHVlO1xuICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSBkaXNjb3ZlcnlVcmk7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZSA9IE1ldHJpY3NGYWN0b3J5LmdldE1ldHJpY3NTZXJ2aWNlKGRpc2NvdmVyeVVyaSk7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuaGFzSW5zZXJ0YWJsZVN0cmVhbXMudmFsdWUgPSBlZGdlVG9rZW4uY2FwYWJpbGl0aWVzLmluY2x1ZGVzKCdpbnNlcnRhYmxlLXN0cmVhbXMnKTtcblxuICAgIHRoaXMuc3RhcnQoKTtcbiAgfVxuXG4gIGdldCBwZWVyQ29ubmVjdGlvbigpOiBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5UGVlckNvbm5lY3Rpb247XG4gIH1cblxuICBnZXQgc3RhdGUoKTogUmVhZE9ubHlTdWJqZWN0PENoYW5uZWxTdGF0ZT4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVN0YXRlO1xuICB9XG5cbiAgZ2V0IGF1dG9NdXRlZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUF1dG9NdXRlZDtcbiAgfVxuXG4gIGdldCBhdXRvUGF1c2VkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5QXV0b1BhdXNlZDtcbiAgfVxuXG4gIGdldCB0b2tlbkV4cGlyaW5nKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5VG9rZW5FeHBpcmluZztcbiAgfVxuXG4gIGdldCBhdXRob3JpemVkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5QXV0aG9yaXplZDtcbiAgfVxuXG4gIGdldCBvbmxpbmUoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlPbmxpbmU7XG4gIH1cblxuICBnZXQgbG9hZGluZygpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUxvYWRpbmc7XG4gIH1cblxuICBnZXQgcGxheWluZygpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVBsYXlpbmc7XG4gIH1cblxuICBnZXQgc3RhbmRieSgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVN0YW5kYnk7XG4gIH1cblxuICBnZXQgc3RvcHBlZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVN0b3BwZWQ7XG4gIH1cblxuICBnZXQgdGFyZ2V0TGFnKCk6IFJlYWRPbmx5U3ViamVjdDxNaWxsaXNlY29uZD4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVRhcmdldExhZztcbiAgfVxuXG4gIGdldCBsYWcoKTogUmVhZE9ubHlTdWJqZWN0PE1pbGxpc2Vjb25kPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5TGFnO1xuICB9XG5cbiAgZ2V0IGJpdHJhdGVMaW1pdCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUJpdHJhdGVMaW1pdC52YWx1ZTtcbiAgfVxuXG4gIGdldCByZXNvbHV0aW9uKCk6IFJlYWRPbmx5U3ViamVjdDxEaW1lbnNpb24+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlSZXNvbHV0aW9uO1xuICB9XG5cbiAgZ2V0IGZhaWx1cmVDb3VudCgpOiBSZWFkT25seVN1YmplY3Q8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5RmFpbHVyZUNvdW50O1xuICB9XG5cbiAgZ2V0IGVuZFBvaW50KCk6IFJlYWRPbmx5U3ViamVjdDxFbmRQb2ludD4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUVuZFBvaW50O1xuICB9XG5cbiAgZ2V0IHN0cmVhbSgpOiBSZWFkT25seVN1YmplY3Q8SVN0cmVhbT4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVN0cmVhbTtcbiAgfVxuXG4gIGdldCBzdHJlYW1JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZDtcbiAgfVxuXG4gIGdldCBydGNTdGF0aXN0aWNzKCk6IFJlYWRPbmx5U3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVJ0Y1N0YXRpc3RpY3M7XG4gIH1cblxuICBnZXQgbWVkaWFTdHJlYW0oKTogUmVhZE9ubHlTdWJqZWN0PE1lZGlhU3RyZWFtPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5TWVkaWFTdHJlYW07XG4gIH1cblxuICBzZXRCaXRyYXRlTGltaXQoYml0cmF0ZUxpbWl0OiBCaXRzUGVyU2Vjb25kKTogdm9pZCB7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYml0cmF0ZUxpbWl0LnZhbHVlID0gYml0cmF0ZUxpbWl0O1xuICB9XG5cbiAgY2xlYXJCaXRyYXRlTGltaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LmJpdHJhdGVMaW1pdC52YWx1ZSAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZSAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUpIHtcbiAgICAgIGNvbnN0IGVsYXBzZWRJbk1pbGxpc2Vjb25kcyA9IERhdGUubm93KCkgLSB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsSW5pdGlhbGl6YXRpb24uZ2V0VGltZSgpO1xuICAgICAgY29uc3QgYml0cmF0ZUluQml0c1BlclNlY29uZCA9IDA7XG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUubGltaXRCaXRyYXRlKFxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUsXG4gICAgICAgIGVsYXBzZWRJbk1pbGxpc2Vjb25kcyxcbiAgICAgICAgYml0cmF0ZUluQml0c1BlclNlY29uZCxcbiAgICAgICAgQml0cmF0ZVN0YXRlLktlZXAsXG4gICAgICAgIEJpdHJhdGVNb2RlLlJlc2V0XG4gICAgICApXG4gICAgICAgIC50aGVuKCh7c3RhdHVzfSkgPT4ge1xuICAgICAgICAgIGlmIChzdGF0dXMgPT09ICdvaycpIHtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmJpdHJhdGVMaW1pdC52YWx1ZSA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdFcnJvciB3aGlsZSBzZXR0aW5nIGxpbWl0IGJpdHJhdGUnLCBlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlVGFyZ2V0TGFnKGxhZzogTWlsbGlzZWNvbmQpOiB2b2lkIHtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC50YXJnZXRMYWcudmFsdWUgPSBsYWc7XG4gIH1cblxuICBhc3luYyBzdG9wKHJlYXNvbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgaWYgKCF0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSkge1xuICAgICAgICB0aGlzLnByb2Nlc3NTdG9wKHJlYXNvbik7XG5cbiAgICAgICAgcmVzb2x2ZSgpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcy5hZGQodGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcuc3Vic2NyaWJlKGlzU3RhcnRpbmcgPT4ge1xuICAgICAgICBpZiAoIWlzU3RhcnRpbmcpIHtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NTdG9wKHJlYXNvbik7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NTdG9wKHJlYXNvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSkge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlKCk7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuc3JjT2JqZWN0ID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgIHRoaXMuY2xlYW5VcFJlc291cmNlcyhyZWFzb24pO1xuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuU3RvcHBlZDtcbiAgfVxuXG4gIGFzeW5jIHJlc3VtZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlKSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgIHJldHVybiB0aGlzLnBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgbXV0ZSgpOiB2b2lkIHtcbiAgICBjb25zdCB2aWRlb0VsZW1lbnQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWU7XG5cbiAgICBpZiAodmlkZW9FbGVtZW50KSB7XG4gICAgICB2aWRlb0VsZW1lbnQubXV0ZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHVubXV0ZSgpOiB2b2lkIHtcbiAgICBjb25zdCB2aWRlb0VsZW1lbnQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWU7XG5cbiAgICBpZiAodmlkZW9FbGVtZW50KSB7XG4gICAgICB2aWRlb0VsZW1lbnQubXV0ZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRpc3Bvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcCgnY2xpZW50OmNoYW5uZWwtZGlzcG9zZScpLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc0Rpc3Bvc2VkID0gdHJ1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldFVyaSh0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbik6IFVSTCB7XG4gICAgY29uc3QgdXJsID0gRWRnZUF1dGhQYXJzZXIucGFyc2VUb2tlbih0b2tlbikudXJpO1xuXG4gICAgaWYgKHVybCkge1xuICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnRmFsbCBiYWNrIHRvIHRoZSBkZWZhdWx0IGRpc2NvdmVyIFVSSSBbJXNdJywgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG5cbiAgICByZXR1cm4gbmV3IFVSTChTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9zdGF0ZUNvbnRleHQuaXNEaXNwb3NlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDaGFubmVsIHdhcyBhbHJlYWR5IGRpc3Bvc2VkJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBhbHJlYWR5IHN0YXJ0aW5nLCBza2lwcGluZyBzdGFydCcpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXMucHJvY2Vzc1N0YXJ0KCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByb2Nlc3NTdGFydCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbiA9IHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbi52YWx1ZTtcbiAgICBjb25zdCBsaXN0ZW5PblN0cmVhbVNldHVwID0gdGhpcy5fc2Vzc2lvblRlbGVtZXRyeS5saXN0ZW5PblN0cmVhbVNldHVwKCk7XG5cbiAgICBpZiAoIUVkZ2VBdXRoUGFyc2VyLmlzRW5jb2RlZEVkZ2VUb2tlblZhbGlkKHRva2VuKSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcGFyc2UgdG9rZW4gWyVzXScsIHRva2VuKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlVuYXV0aG9yaXplZDtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuaGFzSW5zZXJ0YWJsZVN0cmVhbXMudmFsdWUpIHtcbiAgICAgIGlmICghdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaykge1xuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ2luc2VydGFibGUtc3RyZWFtcyBlbmFibGVkLCBidXQgbWlzc2luZyBjYWxsYmFjayBmdW5jdGlvbiBDcmVhdGVDaGFubmVsT3B0aW9ucy52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrJyk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFGZWF0dXJlRW5hYmxlbWVudC5pc0luc2VydGFibGVTdHJlYW1zU3VwcG9ydGVkKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignaW5zZXJ0YWJsZS1zdHJlYW1zIGVuYWJsZWQsIGJ1dCBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgTWVkaWEgU3RyZWFtIFRyYWNrIEFQSScpO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5VbnN1cHBvcnRlZEZlYXR1cmU7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignQ3JlYXRlQ2hhbm5lbE9wdGlvbnMudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayBjYWxsYmFjayBmdW5jdGlvbiBmb3VuZCwgYnV0IGZlYXR1cmUgaXMgbm90IGVuYWJsZWQgdmlhIGluc2VydGFibGUtc3RyZWFtcyBjYXBhYmlsaXR5Jyk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmNsZWFuVXBSZXNvdXJjZXMoJ2NsaWVudDpzdGFydCcpO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlN0YXJ0aW5nO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgY29uc3QgdXJpID0gdGhpcy5nZXRVcmkodG9rZW4pO1xuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZGlzcG9zYWJsZXMuYWRkKFxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUuc3Vic2NyaWJlKHN0YXRlID0+IHtcbiAgICAgICAgaWYgKHN0YXRlID09PSBDaGFubmVsU3RhdGUuRXJyb3IgfHwgc3RhdGUgPT09IENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nKSB7XG4gICAgICAgICAgRGlzY292ZXJ5LmNsZWFyQ2FjaGVkQ2xvc2VzdEVuZHBvaW50KHVyaSk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGNvbnN0IGhhbmRsZVN0cmVhbUZhaWx1cmVDYWxsYmFjazogKCkgPT4gUHJvbWlzZTx2b2lkPiA9ICgpID0+IG5ldyBQcm9taXNlKChyZXNvbHZlKTogdm9pZCA9PiB7XG4gICAgICAvLyBOZWVkIHRvIHNldCBpc1N0YXJ0aW5nIHRvIGZhbHNlIGFuZCBjYWxsIGhhbmRsZVN0cmVhbUZhaWx1cmUgaWYgc3RyZWFtIG1vbml0b3JzIGZvdW5kIGFuIGlzc3VlXG4gICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICByZXR1cm4gcmVzb2x2ZSh0aGlzLmhhbmRsZVN0cmVhbUZhaWx1cmUoKSk7XG4gICAgfSk7XG4gICAgY29uc3Qgc3RyZWFtUGxheWVyID0gU3RyZWFtRmFjdG9yeS5jcmVhdGUodG9rZW4sIHRoaXMuX2NoYW5uZWxDb250ZXh0LCB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmVDYWxsYmFjayk7XG5cbiAgICBpZiAoIXN0cmVhbVBsYXllcikge1xuICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiBzdHJlYW1QbGF5ZXIuc3RhcnQoXG4gICAgICB1cmksXG4gICAgICB0b2tlbixcbiAgICAgIGxpc3Rlbk9uU3RyZWFtU2V0dXAsXG4gICAgICB0aGlzLnBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50LmJpbmQodGhpcykpXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgIGxpc3Rlbk9uU3RyZWFtU2V0dXAuZmFpbCgpO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSsrO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0Lm9ubGluZS52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuY2xlYW5VcFJlc291cmNlcygnY2xpZW50OmNsZWFudXAtYWZ0ZXItZmFpbGVkLXNldHVwJyk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuRXJyb3I7XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc3RhcnQgY2hhbm5lbCcsIGUpO1xuICAgICAgfSlcbiAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPT09IENoYW5uZWxTdGF0ZS5QbGF5aW5nIHx8ICFTREsuYXV0b21hdGljUmV0cnlPbkZhaWx1cmUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5oYW5kbGVTdHJlYW1GYWlsdXJlKClcbiAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgaGFuZGxpbmcgc3RyZWFtIGZhaWx1cmUnLCBlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCB0aGlzLmdldFJldHJ5SW50ZXJ2YWwoKSk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgfSkpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlc3RhcnRBZnRlclN0b3AoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX3N0YXRlQ29udGV4dC5pc0Rpc3Bvc2VkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NoYW5uZWwgd2FzIGFscmVhZHkgZGlzcG9zZWQnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5wbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudCh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl90b2tlbkNvbnRleHQudG9rZW4udmFsdWUpIHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnN0YXJ0KCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHBsYXkoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbWVkaWFTdHJlYW0gPSB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWU7XG5cbiAgICBpZiAoIW1lZGlhU3RyZWFtKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdGFydCgpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KG1lZGlhU3RyZWFtKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UmV0cnlJbnRlcnZhbCgpOiBudW1iZXIge1xuICAgIHN3aXRjaCAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUpIHtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0YW5kQnk6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5PZmZsaW5lOlxuICAgICAgICByZXR1cm4gc3RhbmRieVBvbGxpbmdJbnRlcnZhbEluTWlsbGlzZWNvbmRzO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuRXJyb3I6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuR2VvUmVzdHJpY3RlZDpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkdlb0Jsb2NrZWQ6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdG9wcGVkOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RhcnRpbmc6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5QbGF5aW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUGF1c2VkOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUmVjb25uZWN0aW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuVW5zdXBwb3J0ZWRGZWF0dXJlOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yOlxuICAgICAgICAvLyBGaXJzdCBhbmQgc2Vjb25kIGF0dGVtcHQgZmFzdCwgYWZ0ZXIgdGhhdCBleHBvbmVudGlhbCB3aXRoIGJhY2tvZmYgaW50ZXJ2YWxcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4cG9uZW50aWFsQmFja29mZi5nZXRFeHBvbmVudGlhbEJhY2tvZmZJbnRlcnZhbEJ5RmFpbHVyZUNvdW50KHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVTdHJlYW1GYWlsdXJlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHN3aXRjaCAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUpIHtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkVycm9yOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUmVjb25uZWN0aW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RhbmRCeTpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLk9mZmxpbmU6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnUmV0cnkgc3RhcnQgd2l0aCBpbml0aWFsIHN0YXRlIFslc10gWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlLCBDaGFubmVsU3RhdGVbdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWVdKTtcblxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlVuYXV0aG9yaXplZDpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgdW5hdXRob3JpemVkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4gUGxlYXNlIHByb3ZpZGUgYSBuZXcgdG9rZW4gYW5kIGludm9rZSBzdGFydCgpJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuR2VvUmVzdHJpY3RlZDpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgZ2VvIHJlc3RyaWN0ZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LiBQbGVhc2UgcHJvdmlkZSBhIG5ldyB0b2tlbiBhbmQgaW52b2tlIHN0YXJ0KCknKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5HZW9CbG9ja2VkOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBnZW8gYmxvY2tlZCwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuIFBsZWFzZSBwcm92aWRlIGEgbmV3IHRva2VuIGFuZCBpbnZva2Ugc3RhcnQoKScpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0b3BwZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIHN0b3BwZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LicpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlBsYXlpbmc6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIHBsYXlpbmcsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0Jyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUGF1c2VkOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBwYXVzZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LiBQbGVhc2UgaW52b2tlIHBsYXkoKScpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0YXJ0aW5nOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBhbHJlYWR5IHN0YXJ0aW5nLCBza2lwcGluZyByZXRyeSBvZiBzdGFydCcpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlVuc3VwcG9ydGVkRmVhdHVyZTpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgc3RvcHBlZCBkdWUgdG8gdW5zdXBwb3J0ZWQgZmVhdHVyZSwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBzdG9wcGVkIGR1ZSB0byBjb25maWd1cmF0aW9uIGVycm9yLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4nKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3RhcnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYW5VcFJlc291cmNlcyhyZWFzb246IHN0cmluZyA9IGRlZmF1bHRTdHJlYW1UZXJtaW5hdGlvblJlYXNvbik6IHZvaWQge1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgIGNvbnN0IHBlZXJDb25uZWN0aW9uID0gdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlO1xuXG4gICAgaWYgKHBlZXJDb25uZWN0aW9uKSB7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgPSBudWxsO1xuICAgICAgcGVlckNvbm5lY3Rpb24uY2xvc2UoKTtcbiAgICAgIHBlZXJDb25uZWN0aW9uLmRpc3Bvc2UoKTtcblxuICAgICAgaWYgKFNESy5mb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0ICYmICEoRmVhdHVyZUVuYWJsZW1lbnQuaXNNb2JpbGUgJiYgU0RLLnNraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlcykpIHtcbiAgICAgICAgR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXIuZm9yY2VHYXJiYWdlQ29sbGVjdGlvbigpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUpIHtcbiAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZS5nZXRUcmFja3MoKS5mb3JFYWNoKHRyYWNrID0+IHRyYWNrLnN0b3AoKSk7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RvcHBlZC52YWx1ZSA9IHRydWU7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhbmRieS52YWx1ZSA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZSkge1xuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLmRlc3Ryb3lTdHJlYW0odGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlLCByZWFzb24pXG4gICAgICAgIC50aGVuKCh7c3RhdHVzfSkgPT4ge1xuICAgICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdbJXNdIEZhaWxlZCB0byBkZXN0cm95IHN0cmVhbSB3aXRoIHJlYXNvbiBbJXNdJywgdGhpcy5zdHJlYW1JZCwgc3RhdHVzKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIERlc3Ryb3llZCBzdHJlYW0gd2l0aCByZWFzb24gWyVzXScsIHRoaXMuc3RyZWFtSWQsIHN0YXR1cyk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ1slc10gRmFpbGVkIHRvIGRlc3Ryb3kgc3RyZWFtJywgdGhpcy5zdHJlYW1JZCwgZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnZpZGVvRWxlbWVudCAmJiB0aGlzLnZpZGVvRWxlbWVudC5kYXRhc2V0KSB7XG4gICAgICB0aGlzLnZpZGVvRWxlbWVudC5kYXRhc2V0LnNlc3Npb25JZCA9ICcnO1xuICAgICAgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldC5zdHJlYW1JZCA9ICcnO1xuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSA9IG51bGw7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUgPSBudWxsO1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gMDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQobWVkaWFTdHJlYW06IE1lZGlhU3RyZWFtKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdmlkZW9FbGVtZW50ID0gdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlO1xuXG4gICAgaWYgKCF2aWRlb0VsZW1lbnQpIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuU3RvcHBlZDtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZpZGVvRWxlbWVudC5zcmNPYmplY3QgPSBtZWRpYVN0cmVhbTtcblxuICAgIGNvbnN0IHBsYXlQcm9taXNlID0gdmlkZW9FbGVtZW50LnBsYXkoKTtcblxuICAgIGlmIChwbGF5UHJvbWlzZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSB0cnVlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGxheWluZztcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiBwbGF5UHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IHRydWU7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QbGF5aW5nO1xuICAgIH0pLmNhdGNoKGUgPT4ge1xuICAgICAgY29uc3QgaGFzQXVkaW9UcmFjayA9ICEhbWVkaWFTdHJlYW0uZ2V0VHJhY2tzKCkuZmlsdGVyKHRyYWNrID0+IHtcbiAgICAgICAgcmV0dXJuIHRyYWNrLmtpbmQgPT09ICdhdWRpbyc7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlT2ZmID0gIVNESy5hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZTtcblxuICAgICAgaWYgKGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlT2ZmIHx8IHZpZGVvRWxlbWVudC5tdXRlZCB8fCAhaGFzQXVkaW9UcmFjaykge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QYXVzZWQ7XG5cbiAgICAgICAgaWYgKGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlT2ZmKSB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gUGF1c2VkIHZpZGVvIGFmdGVyIHBsYXkgZmFpbGVkLiBNYW51YWwgdXNlciBhY3Rpb24gcmVxdWlyZWQuJywgdGhpcy5zdHJlYW1JZCwgZSk7XG4gICAgICAgICAgdmlkZW9FbGVtZW50LnNyY09iamVjdCA9IG51bGw7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzQXVkaW9UcmFjaykge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBwbGF5IHZpZGVvLiBNYW51YWwgdXNlciBhY3Rpb24gcmVxdWlyZWQuJywgdGhpcy5zdHJlYW1JZCwgZSk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gcGxheSBtdXRlZCB2aWRlby4gTWFudWFsIHVzZXIgYWN0aW9uIHJlcXVpcmVkLicsIHRoaXMuc3RyZWFtSWQsIGUpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmlkZW9FbGVtZW50Lm11dGVkID0gdHJ1ZTtcblxuICAgICAgcmV0dXJuIHZpZGVvRWxlbWVudC5wbGF5KClcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFBsYXllZCB2aWRlbyBhZnRlciBhdXRvIG11dGluZy4gTWFudWFsIHVzZXIgYWN0aW9uIHJlcXVpcmVkIHRvIHVubXV0ZS4nLCB0aGlzLnN0cmVhbUlkKTtcblxuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QbGF5aW5nO1xuICAgICAgICB9KS5jYXRjaChlID0+IHtcbiAgICAgICAgICB2aWRlb0VsZW1lbnQubXV0ZWQgPSBmYWxzZTtcblxuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBwbGF5IHZpZGVvLiBNYW51YWwgdXNlciBhY3Rpb24gcmVxdWlyZWQuJywgdGhpcy5zdHJlYW1JZCwgZSk7XG5cbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBhdXNlZDtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmVudW0gQ2hhbm5lbFN0YXRlIHtcbiAgT2ZmbGluZSA9IDEsXG4gIFN0YXJ0aW5nLFxuICBQYXVzZWQsXG4gIFBsYXlpbmcsXG4gIFJlY292ZXJpbmcsXG4gIFJlY29ubmVjdGluZyxcbiAgU3RhbmRCeSxcbiAgU3RvcHBlZCxcbiAgVW5hdXRob3JpemVkLFxuICBHZW9SZXN0cmljdGVkLFxuICBHZW9CbG9ja2VkLFxuICBVbnN1cHBvcnRlZEZlYXR1cmUsXG4gIENvbmZpZ3VyYXRpb25FcnJvcixcbiAgRXJyb3Jcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2hhbm5lbFN0YXRlOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgQ2hhbm5lbCwge0NoYW5uZWxPcHRpb25zfSBmcm9tICcuL0NoYW5uZWwnO1xuaW1wb3J0IHtJU3RyZWFtVHJhY2tUcmFuc2Zvcm0sIElFbmNvZGVkU3RyZWFtU2lua30gZnJvbSAnLi4vY29udGV4dC9DaGFubmVsQ29udGV4dCc7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQge0VuY29kZWRFZGdlVG9rZW59IGZyb20gJy4uLy4uL2VkZ2VBdXRoL0VuY29kZWRFZGdlVG9rZW4nO1xuaW1wb3J0IHtNaWxsaXNlY29uZH0gZnJvbSAnLi4vLi4vdW5pdHMvVW5pdHMnO1xuXG50eXBlIENyZWF0ZUNoYW5uZWxPcHRpb25zID0ge1xuICB2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQ7XG4gIHRva2VuOiBFbmNvZGVkRWRnZVRva2VuO1xuICB0YXJnZXRMYWc/OiBNaWxsaXNlY29uZDtcbiAgdmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaz86IElTdHJlYW1UcmFja1RyYW5zZm9ybTxWaWRlb0ZyYW1lPjtcbiAgZW5jb2RlZFZpZGVvU3RyZWFtU2luaz86IElFbmNvZGVkU3RyZWFtU2luazxSVENFbmNvZGVkVmlkZW9GcmFtZT47XG4gIGVuY29kZWRBdWRpb1N0cmVhbVNpbms/OiBJRW5jb2RlZFN0cmVhbVNpbms8UlRDRW5jb2RlZEF1ZGlvRnJhbWU+O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hhbm5lbHMge1xuICBzdGF0aWMgY3JlYXRlQ2hhbm5lbChvcHRpb25zOiBDcmVhdGVDaGFubmVsT3B0aW9ucyk6IENoYW5uZWwge1xuICAgIGlmICghU0RLLmluaXRpYWxpemVkLnZhbHVlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NESyBpcyBub3QgbG9hZGVkLicpO1xuICAgIH1cblxuICAgIGNvbnN0IGNoYW5uZWxPcHRpb25zOiBDaGFubmVsT3B0aW9ucyA9IHtcbiAgICAgIHRhcmdldExhZzogb3B0aW9ucy50YXJnZXRMYWcsXG4gICAgICB2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBvcHRpb25zLnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2ssXG4gICAgICBlbmNvZGVkVmlkZW9TdHJlYW1TaW5rOiBvcHRpb25zLmVuY29kZWRWaWRlb1N0cmVhbVNpbmssXG4gICAgICBlbmNvZGVkQXVkaW9TdHJlYW1TaW5rOiBvcHRpb25zLmVuY29kZWRBdWRpb1N0cmVhbVNpbmtcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBDaGFubmVsKG9wdGlvbnMudmlkZW9FbGVtZW50LCBvcHRpb25zLnRva2VuLCBjaGFubmVsT3B0aW9ucyk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2hhbm5lbHMgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBDaGFubmVscyBmcm9tICcuL0NoYW5uZWxzJztcbmltcG9ydCBDaGFubmVsU3RhdGUgZnJvbSAnLi9DaGFubmVsU3RhdGUnO1xuXG5leHBvcnQge1xuICBTREssXG4gIENoYW5uZWxzLFxuICBDaGFubmVsU3RhdGVcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgU0RLLFxuICBDaGFubmVscyxcbiAgQ2hhbm5lbFN0YXRlXG59OyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgQ2hhbm5lbFN0YXRlIGZyb20gJy4uL2NoYW5uZWxzL0NoYW5uZWxTdGF0ZSc7XG5pbXBvcnQgRGltZW5zaW9uIGZyb20gJy4uLy4uL3ZpZGVvL0RpbWVuc2lvbic7XG5pbXBvcnQgRW5kUG9pbnQsIHtJU3RyZWFtLCBTdWJzY3JpYmVTdGF0dXN9IGZyb20gJy4uL2Rpc2NvdmVyeS9FbmRQb2ludCc7XG5pbXBvcnQgVmlkZW9UZWxlbWV0cnkgZnJvbSAnLi4vLi4vdmlkZW8vVmlkZW9UZWxlbWV0cnknO1xuaW1wb3J0IHtJUnRjTW9uaXRvclN0YXRpc3RpYywgSVJ0Y1N0YXRpc3RpY30gZnJvbSAnLi4vLi4vcnRjL1J0Y0Nvbm5lY3Rpb25Nb25pdG9yJztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCB7Qml0c1BlclNlY29uZCwgTWlsbGlzZWNvbmR9IGZyb20gJy4uLy4uL3VuaXRzL1VuaXRzJztcblxuY29uc3QgZGVmYXVsdFRhcmdldExhZyA9IDA7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVN0cmVhbVRyYWNrVHJhbnNmb3JtPFQgPSBBdWRpb0RhdGEgfCBWaWRlb0ZyYW1lPiB7XG4gIChjaHVuazogVCwgY29udHJvbGxlcjogVHJhbnNmb3JtU3RyZWFtRGVmYXVsdENvbnRyb2xsZXI8VD4pOiB2b2lkIHwgUHJvbWlzZUxpa2U8dm9pZD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUVuY29kZWRTdHJlYW1TaW5rPFQgPSBSVENFbmNvZGVkQXVkaW9GcmFtZSB8IFJUQ0VuY29kZWRWaWRlb0ZyYW1lPiB7XG4gIChjaHVuazogVCk6IHZvaWQgfCBQcm9taXNlTGlrZTx2b2lkPjtcbn1cblxuZXhwb3J0IHR5cGUgQ2hhbm5lbENvbnRleHRPcHRpb25zID0ge1xuICB0YXJnZXRMYWc/OiBudW1iZXI7XG4gIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s/OiBJU3RyZWFtVHJhY2tUcmFuc2Zvcm08VmlkZW9GcmFtZT47XG4gIGVuY29kZWRWaWRlb1N0cmVhbVNpbms/OiBJRW5jb2RlZFN0cmVhbVNpbms8UlRDRW5jb2RlZFZpZGVvRnJhbWU+O1xuICBlbmNvZGVkQXVkaW9TdHJlYW1TaW5rPzogSUVuY29kZWRTdHJlYW1TaW5rPFJUQ0VuY29kZWRBdWRpb0ZyYW1lPjtcbiAgaGFzSW5zZXJ0YWJsZVN0cmVhbXM/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hhbm5lbENvbnRleHQge1xuICBjaGFubmVsSW5pdGlhbGl6YXRpb246IERhdGU7XG4gIGRpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdDtcbiAgY2hhbm5lbERpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdDtcbiAgcmVuZGVyZXJEaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3Q7XG4gIHZpZGVvRWxlbWVudDogU3ViamVjdDxIVE1MVmlkZW9FbGVtZW50PjtcbiAgc3RhdGU6IFN1YmplY3Q8Q2hhbm5lbFN0YXRlPjtcbiAgYXV0b011dGVkOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBhdXRvUGF1c2VkOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBhdXRob3JpemVkOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBvbmxpbmU6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIGxvYWRpbmc6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHBsYXlpbmc6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHN0YW5kYnk6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHN0b3BwZWQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHRhcmdldExhZzogU3ViamVjdDxNaWxsaXNlY29uZD47XG4gIGxhZzogU3ViamVjdDxNaWxsaXNlY29uZD47XG4gIGJpdHJhdGVMaW1pdDogU3ViamVjdDxCaXRzUGVyU2Vjb25kPjtcbiAgcmVzb2x1dGlvbjogU3ViamVjdDxEaW1lbnNpb24+O1xuICBmYWlsdXJlQ291bnQ6IFN1YmplY3Q8bnVtYmVyPjtcbiAgZW5kUG9pbnQ6IFN1YmplY3Q8RW5kUG9pbnQ+O1xuICBzdHJlYW06IFN1YmplY3Q8SVN0cmVhbT47XG4gIHJ0Y1N0YXRpc3RpY3M6IFN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+O1xuICB2aWRlb1RlbGVtZXRyeTogVmlkZW9UZWxlbWV0cnk7XG4gIHJ0Y0F1ZGlvU3RhdGlzdGljOiBJUnRjU3RhdGlzdGljO1xuICBydGNWaWRlb1N0YXRpc3RpYzogSVJ0Y1N0YXRpc3RpYztcbiAgY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0OiBudW1iZXI7XG4gIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s/OiBJU3RyZWFtVHJhY2tUcmFuc2Zvcm08VmlkZW9GcmFtZT47XG4gIGVuY29kZWRWaWRlb1N0cmVhbVNpbms/OiBJRW5jb2RlZFN0cmVhbVNpbms8UlRDRW5jb2RlZFZpZGVvRnJhbWU+O1xuICBlbmNvZGVkQXVkaW9TdHJlYW1TaW5rPzogSUVuY29kZWRTdHJlYW1TaW5rPFJUQ0VuY29kZWRBdWRpb0ZyYW1lPjtcbiAgaGFzSW5zZXJ0YWJsZVN0cmVhbXM6IFN1YmplY3Q8Ym9vbGVhbj47XG5cbiAgY29uc3RydWN0b3Iob3B0aW9ucz86IENoYW5uZWxDb250ZXh0T3B0aW9ucykge1xuICAgIHRoaXMuZGlzcG9zYWJsZXMgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgICB0aGlzLmNoYW5uZWxEaXNwb3NhYmxlcyA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICAgIHRoaXMucmVuZGVyZXJEaXNwb3NhYmxlcyA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICAgIHRoaXMuY2hhbm5lbEluaXRpYWxpemF0aW9uID0gbmV3IERhdGUoKTtcbiAgICB0aGlzLnZpZGVvRWxlbWVudCA9IG5ldyBTdWJqZWN0PEhUTUxWaWRlb0VsZW1lbnQ+KG51bGwpO1xuICAgIHRoaXMuc3RhdGUgPSBuZXcgU3ViamVjdDxDaGFubmVsU3RhdGU+KENoYW5uZWxTdGF0ZS5TdGFydGluZyk7XG4gICAgdGhpcy5hdXRvTXV0ZWQgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5hdXRvUGF1c2VkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMuYXV0aG9yaXplZCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICAgIHRoaXMub25saW5lID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gICAgdGhpcy5sb2FkaW5nID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMucGxheWluZyA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLnN0YW5kYnkgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5zdG9wcGVkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMudGFyZ2V0TGFnID0gbmV3IFN1YmplY3Q8TWlsbGlzZWNvbmQ+KG9wdGlvbnM/LnRhcmdldExhZyA/PyBkZWZhdWx0VGFyZ2V0TGFnKTtcbiAgICB0aGlzLmxhZyA9IG5ldyBTdWJqZWN0PE1pbGxpc2Vjb25kPigwKTtcbiAgICB0aGlzLmJpdHJhdGVMaW1pdCA9IG5ldyBTdWJqZWN0PEJpdHNQZXJTZWNvbmQ+KDApO1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IG5ldyBTdWJqZWN0PERpbWVuc2lvbj4oRGltZW5zaW9uLmVtcHR5KTtcbiAgICB0aGlzLmZhaWx1cmVDb3VudCA9IG5ldyBTdWJqZWN0PG51bWJlcj4oMCk7XG4gICAgdGhpcy5lbmRQb2ludCA9IG5ldyBTdWJqZWN0PEVuZFBvaW50PihudWxsKTtcbiAgICB0aGlzLnN0cmVhbSA9IG5ldyBTdWJqZWN0PElTdHJlYW0+KG51bGwpO1xuICAgIHRoaXMucnRjU3RhdGlzdGljcyA9IG5ldyBTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPihudWxsKTtcbiAgICB0aGlzLnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2sgPSBvcHRpb25zPy52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrO1xuICAgIHRoaXMuZW5jb2RlZFZpZGVvU3RyZWFtU2luayA9IG9wdGlvbnM/LmVuY29kZWRWaWRlb1N0cmVhbVNpbms7XG4gICAgdGhpcy5lbmNvZGVkQXVkaW9TdHJlYW1TaW5rID0gb3B0aW9ucz8uZW5jb2RlZEF1ZGlvU3RyZWFtU2luaztcbiAgICB0aGlzLmhhc0luc2VydGFibGVTdHJlYW1zID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oISFvcHRpb25zPy5oYXNJbnNlcnRhYmxlU3RyZWFtcyk7XG4gIH1cblxuICBnZXQgc3RyZWFtSWQoKTogc3RyaW5nIHtcbiAgICBjb25zdCBzdHJlYW0gPSB0aGlzLnN0cmVhbS52YWx1ZTtcblxuICAgIGlmICghc3RyZWFtKSB7XG4gICAgICByZXR1cm4gJy0nO1xuICAgIH1cblxuICAgIHJldHVybiBzdHJlYW0uc3RyZWFtSWQ7XG4gIH1cblxuICBhcHBseVN0YXR1cyhzdGF0dXM6IFN1YnNjcmliZVN0YXR1cyk6IHZvaWQge1xuICAgIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgICBjYXNlICdvayc6XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndW5hdXRob3JpemVkJzpcbiAgICAgIGNhc2UgJ2dlby1yZXN0cmljdGVkJzpcbiAgICAgIGNhc2UgJ2dlby1ibG9ja2VkJzpcbiAgICAgICAgdGhpcy5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1mYWxsdGhyb3VnaFxuICAgICAgY2FzZSAnbm8tc3RyZWFtJzpcbiAgICAgIGNhc2UgJ25vdC1mb3VuZCc6XG4gICAgICAgIHRoaXMuZmFpbHVyZUNvdW50LnZhbHVlID0gMDtcbiAgICAgICAgdGhpcy5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RhbmRieS52YWx1ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuc3RvcHBlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0cmVhbS52YWx1ZSA9IG51bGw7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy5mYWlsdXJlQ291bnQudmFsdWUrKztcbiAgICAgICAgdGhpcy5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RhbmRieS52YWx1ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuc3RvcHBlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0cmVhbS52YWx1ZSA9IG51bGw7XG4gICAgICAgIHRoaXMuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuRXJyb3I7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGFwcGx5U2Vzc2lvbkFuZFN0cmVhbVByb3BlcnRpZXNUb1ZpZGVvRWxlbWVudCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy52aWRlb0VsZW1lbnQudmFsdWUgJiYgdGhpcy52aWRlb0VsZW1lbnQudmFsdWUuZGF0YXNldCkge1xuICAgICAgdGhpcy52aWRlb0VsZW1lbnQudmFsdWUuZGF0YXNldC5zZXNzaW9uSWQgPSBTREsuY2xpZW50U2Vzc2lvbklkO1xuICAgICAgdGhpcy52aWRlb0VsZW1lbnQudmFsdWUuZGF0YXNldC5zdHJlYW1JZCA9IHRoaXMuc3RyZWFtSWQ7XG4gICAgfVxuICB9XG5cbiAgbWFwU3Vic2NyaWJlU3RhdHVzVG9DaGFubmVsU3RhdHVzKHN0YXR1czogU3Vic2NyaWJlU3RhdHVzKTogQ2hhbm5lbFN0YXRlIHtcbiAgICBzd2l0Y2ggKHN0YXR1cykge1xuICAgICAgY2FzZSAnb2snOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlN0YXJ0aW5nO1xuICAgICAgY2FzZSAnbm8tc3RyZWFtJzpcbiAgICAgIGNhc2UgJ25vdC1mb3VuZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuU3RhbmRCeTtcbiAgICAgIGNhc2UgJ2dlby1yZXN0cmljdGVkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5HZW9SZXN0cmljdGVkO1xuICAgICAgY2FzZSAnZ2VvLWJsb2NrZWQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLkdlb0Jsb2NrZWQ7XG4gICAgICBjYXNlICd1bmF1dGhvcml6ZWQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlVuYXV0aG9yaXplZDtcbiAgICAgIGNhc2UgJ2NhcGFjaXR5JzpcbiAgICAgIGNhc2UgJ3JhdGUtbGltaXRlZCc6XG4gICAgICBjYXNlICd0aW1lb3V0JzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nO1xuICAgICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5FcnJvcjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHN0YXR1cyk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi8uLi9yeC9TdWJqZWN0JztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi4vLi4vcnRjL0lQZWVyQ29ubmVjdGlvbic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBlZXJDb25uZWN0aW9uQ29udGV4dCB7XG4gIG1lZGlhU3RyZWFtOiBTdWJqZWN0PE1lZGlhU3RyZWFtPjtcbiAgcGVlckNvbm5lY3Rpb246IFN1YmplY3Q8SVBlZXJDb25uZWN0aW9uPjtcbiAgcGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0czogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMubWVkaWFTdHJlYW0gPSBuZXcgU3ViamVjdDxNZWRpYVN0cmVhbT4obnVsbCk7XG4gICAgdGhpcy5wZWVyQ29ubmVjdGlvbiA9IG5ldyBTdWJqZWN0PElQZWVyQ29ubmVjdGlvbj4obnVsbCk7XG4gICAgdGhpcy5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gMDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vLi4vcngvU3ViamVjdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0YXRlQ29udGV4dCB7XG4gIGlzU3RhcnRpbmc6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIGlzRGlzcG9zZWQ6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5pc1N0YXJ0aW5nID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMuaXNEaXNwb3NlZCA9IGZhbHNlO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi8uLi9yeC9TdWJqZWN0JztcbmltcG9ydCB7RW5jb2RlZEVkZ2VUb2tlbn0gZnJvbSAnLi4vLi4vZWRnZUF1dGgvRW5jb2RlZEVkZ2VUb2tlbic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRva2VuQ29udGV4dCB7XG4gIHRva2VuOiBTdWJqZWN0PEVuY29kZWRFZGdlVG9rZW4+O1xuICB0b2tlbkV4cGlyaW5nOiBTdWJqZWN0PGJvb2xlYW4+O1xuXG4gIGNvbnN0cnVjdG9yKHRva2VuOiBFbmNvZGVkRWRnZVRva2VuKSB7XG4gICAgdGhpcy50b2tlbiA9IG5ldyBTdWJqZWN0PEVuY29kZWRFZGdlVG9rZW4+KHRva2VuKTtcbiAgICB0aGlzLnRva2VuRXhwaXJpbmcgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuY29uc3QgZGVmYXVsdERpc2NvdmVyeVVyaSA9ICdodHRwczovL3BjYXN0LnBoZW5peHJ0cy5jb20vcGNhc3QvZW5kUG9pbnRzJztcblxuZXhwb3J0IHtkZWZhdWx0RGlzY292ZXJ5VXJpfTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7Qml0cmF0ZU1vZGUsIEJpdHJhdGVNb2RlVHlwZX0gZnJvbSAnLi4vYXBpL1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQml0cmF0ZU1vZGVNYXBwaW5nIHtcbiAgc3RhdGljIGNvbnZlcnRCaXRyYXRlTW9kZVRvQml0cmF0ZU1vZGVUeXBlKGJpdHJhdGVNb2RlOiBCaXRyYXRlTW9kZSk6IEJpdHJhdGVNb2RlVHlwZSB7XG4gICAgc3dpdGNoIChiaXRyYXRlTW9kZSkge1xuICAgICAgY2FzZSBCaXRyYXRlTW9kZS5Ob3JtYWw6XG4gICAgICAgIHJldHVybiAnTm9ybWFsJztcbiAgICAgIGNhc2UgQml0cmF0ZU1vZGUuRm9yY2U6XG4gICAgICAgIHJldHVybiAnRm9yY2UnO1xuICAgICAgY2FzZSBCaXRyYXRlTW9kZS5SZXNldDpcbiAgICAgICAgcmV0dXJuICdSZXNldCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShiaXRyYXRlTW9kZSk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0JpdHJhdGVTdGF0ZSwgQml0cmF0ZVN0YXRlVHlwZX0gZnJvbSAnLi4vYXBpL1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQml0cmF0ZVN0YXRlTWFwcGluZyB7XG4gIHN0YXRpYyBjb252ZXJ0Qml0cmF0ZVN0YXRlVG9CaXRyYXRlU3RhdGVUeXBlKGJpdHJhdGVTdGF0ZTogQml0cmF0ZVN0YXRlKTogQml0cmF0ZVN0YXRlVHlwZSB7XG4gICAgc3dpdGNoIChiaXRyYXRlU3RhdGUpIHtcbiAgICAgIGNhc2UgQml0cmF0ZVN0YXRlLktlZXA6XG4gICAgICAgIHJldHVybiAnS2VlcCc7XG4gICAgICBjYXNlIEJpdHJhdGVTdGF0ZS5SZXNldDpcbiAgICAgICAgcmV0dXJuICdSZXNldCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShiaXRyYXRlU3RhdGUpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEVuZFBvaW50IGZyb20gJy4vRW5kUG9pbnQnO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IERpc2NvdmVyeVNlcnZpY2UgZnJvbSAnLi9EaXNjb3ZlcnlTZXJ2aWNlJztcblxuY29uc3QgZGlzY292ZXJ5Q2FjaGVJbnRlcnZhbCA9IDYwMDAwO1xuXG5pbnRlcmZhY2UgSVBlclVSSUVuZHBvaW50IHsgW3g6IHN0cmluZ106IFByb21pc2U8RW5kUG9pbnQ+IH1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzY292ZXJ5IHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2NhY2hlOiBJUGVyVVJJRW5kcG9pbnQgPSB7fTtcblxuICBzdGF0aWMgYXN5bmMgcHJlY2FjaGVDbG9zZXN0RW5kUG9pbnREaXNjb3ZlcnkoKTogUHJvbWlzZTxFbmRQb2ludD4ge1xuICAgIGNvbnN0IHVyaSA9IG5ldyBVUkwoU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG5cbiAgICByZXR1cm4gRGlzY292ZXJ5LmRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50V2l0aENhY2hpbmcodXJpKTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBkaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nKHVyaTogVVJMKTogUHJvbWlzZTxFbmRQb2ludD4ge1xuICAgIGNvbnN0IHVybCA9IHVyaS50b1N0cmluZygpO1xuXG4gICAgaWYgKERpc2NvdmVyeS5fY2FjaGVbdXJsXSkge1xuICAgICAgcmV0dXJuIERpc2NvdmVyeS5fY2FjaGVbdXJsXTtcbiAgICB9XG5cbiAgICBjb25zdCBkaXNjb3ZlcnlTZXJ2aWNlID0gbmV3IERpc2NvdmVyeVNlcnZpY2UodXJpKTtcbiAgICBjb25zdCBjYWNoZWRWYWx1ZSA9IERpc2NvdmVyeS5fY2FjaGVbdXJsXSA9IGRpc2NvdmVyeVNlcnZpY2UuZGlzY292ZXJDbG9zZXN0RW5kUG9pbnQoKTtcbiAgICBjb25zdCBpZ25vcmVkID0gRGlzY292ZXJ5Ll9jYWNoZVt1cmxdLnRoZW4oKCkgPT4ge1xuICAgICAgY29uc3QgaWdub3JlZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAoRGlzY292ZXJ5Ll9jYWNoZVt1cmxdID09PSBjYWNoZWRWYWx1ZSkge1xuICAgICAgICAgIGRlbGV0ZSBEaXNjb3ZlcnkuX2NhY2hlW3VybF07XG4gICAgICAgIH1cbiAgICAgIH0sIGRpc2NvdmVyeUNhY2hlSW50ZXJ2YWwpO1xuICAgIH0pLmNhdGNoKCgpID0+IHtcbiAgICAgIGRlbGV0ZSBEaXNjb3ZlcnkuX2NhY2hlW3VybF07XG4gICAgfSk7XG5cbiAgICByZXR1cm4gY2FjaGVkVmFsdWU7XG4gIH1cblxuICBzdGF0aWMgY2xlYXJDYWNoZWRDbG9zZXN0RW5kcG9pbnQodXJpOiBVUkwpOiB2b2lkIHtcbiAgICBjb25zdCB1cmwgPSB1cmkudG9TdHJpbmcoKTtcblxuICAgIGlmIChEaXNjb3ZlcnkuX2NhY2hlW3VybF0pIHtcbiAgICAgIGRlbGV0ZSBEaXNjb3ZlcnkuX2NhY2hlW3VybF07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rpc2NvdmVyeSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn1cblxuY29uc3QgaWdub3JlZCA9IERpc2NvdmVyeS5wcmVjYWNoZUNsb3Nlc3RFbmRQb2ludERpc2NvdmVyeSgpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IEVuZFBvaW50IGZyb20gJy4vRW5kUG9pbnQnO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuLi8uLi9tZXRyaWNzL01ldHJpY3NUeXBlJztcbmltcG9ydCBEaXNjb3ZlcnlVcmkgZnJvbSAnLi9EaXNjb3ZlcnlVcmknO1xuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4uLy4uL21ldHJpY3MvTWV0cmljc1NlcnZpY2UnO1xuaW1wb3J0IE1ldHJpY3NGYWN0b3J5IGZyb20gJy4uLy4uL21ldHJpY3MvTWV0cmljc0ZhY3RvcnknO1xuXG5jb25zdCBkZWZhdWx0VGltZW91dCA9IDIwMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXNjb3ZlcnlTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ0Rpc2NvdmVyeScpO1xuICBwcml2YXRlIF9tZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgX3VyaTogVVJMO1xuXG4gIGNvbnN0cnVjdG9yKHVyaTogVVJMKSB7XG4gICAgaWYgKCF1cmkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRGlzY292ZXJ5IHJlcXVpcmVzIHVyaScpO1xuICAgIH1cblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlID0gTWV0cmljc0ZhY3RvcnkuZ2V0TWV0cmljc1NlcnZpY2UodXJpLnRvU3RyaW5nKCkpO1xuICAgIHRoaXMuX3VyaSA9IHVyaTtcbiAgfVxuXG4gIGFzeW5jIGRpc2NvdmVyTmVhcmJ5RW5kUG9pbnRzKHVyaTogVVJMLCB0aW1lb3V0OiBudW1iZXIpOiBQcm9taXNlPEVuZFBvaW50W10+IHtcbiAgICBpZiAoIXRpbWVvdXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRGlzY292ZXJ5IHJlcXVpcmVzIHRpbWVvdXQnKTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSB1cmkudG9TdHJpbmcoKTtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgY2FjaGU6ICduby1jYWNoZSdcbiAgICAgIH0pLFxuICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KChfLCByZWplY3QpID0+XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihgRGlzY292ZXJ5IHRpbWVkIG91dCBbJHt1cmx9XWApKSwgdGltZW91dClcbiAgICAgIClcbiAgICBdKTtcblxuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRGlzY292ZXJ5IGZhaWxlZCBbJHt1cmx9XSBbJHtyZXNwb25zZS5zdGF0dXN9XWApO1xuICAgIH1cblxuICAgIGlmIChyZXNwb25zZS5ib2R5ID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYERpc2NvdmVyeSBmYWlsZWQgd2l0aCBubyBkYXRhIFske3VybH1dYCk7XG4gICAgfVxuXG4gICAgY29uc3QgYXNTdHJpbmcgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG4gICAgY29uc3QgZW5kUG9pbnRzID0gYXNTdHJpbmcuc3BsaXQoJywnKTtcblxuICAgIHJldHVybiBlbmRQb2ludHMubWFwKGVuZFBvaW50ID0+IG5ldyBFbmRQb2ludChlbmRQb2ludCwgdGltZW91dCkpO1xuICB9XG5cbiAgYXN5bmMgZGlzY292ZXJDbG9zZXN0RW5kUG9pbnQodGltZW91dDogbnVtYmVyID0gZGVmYXVsdFRpbWVvdXQpOiBQcm9taXNlPEVuZFBvaW50PiB7XG4gICAgY29uc3QgdXJsID0gRGlzY292ZXJ5VXJpLmJ1aWxkRGlzY292ZXJ5VXJsKHRoaXMuX3VyaSk7XG4gICAgY29uc3QgZW5kUG9pbnRzID0gYXdhaXQgdGhpcy5kaXNjb3Zlck5lYXJieUVuZFBvaW50cyhuZXcgVVJMKHVybCksIHRpbWVvdXQpO1xuICAgIGxldCBmYWlsZWRSZXF1ZXN0cyA9IDA7XG4gICAgY29uc3QgcHJvcGFnYXRlRmFpbHVyZUlmQWxsUmVxdWVzdHNGYWlsZWQgPSAoKTogUHJvbWlzZTx2b2lkPiA9PiBuZXcgUHJvbWlzZSgoXywgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAoZmFpbGVkUmVxdWVzdHMgPj0gZW5kUG9pbnRzLmxlbmd0aCkge1xuICAgICAgICByZWplY3QoYERpc2NvdmVyeSBvZiBbJHtlbmRQb2ludHMubGVuZ3RofV0gZW5kcG9pbnRzIGZyb20gWyR7dXJsfV0gZmFpbGVkLCBwcmV2ZW50aW5nIGl0IGZyb20gY29tcGxldGluZ2ApO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGVuZFBvaW50ID0gYXdhaXQgUHJvbWlzZS5yYWNlKGVuZFBvaW50cy5tYXAoZW5kUG9pbnQgPT4gZW5kUG9pbnRcbiAgICAgIC5waW5nKClcbiAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLndhcm4oJ0ZhaWxlZCB0byBwaW5nIGVuZCBwb2ludCBbJXNdJywgZW5kUG9pbnQsIGUpO1xuXG4gICAgICAgIGZhaWxlZFJlcXVlc3RzKys7XG5cbiAgICAgICAgcmV0dXJuIHByb3BhZ2F0ZUZhaWx1cmVJZkFsbFJlcXVlc3RzRmFpbGVkKCk7XG4gICAgICB9KVxuICAgICAgLnRoZW4odGltZSA9PiB7XG4gICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Rpc2NvdmVyZWQgZW5kIHBvaW50IFslc10gd2l0aCB0aW1lIFslc10nLCBlbmRQb2ludC50b1N0cmluZygpLCB0aW1lKTtcbiAgICAgICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuUm91bmRUcmlwVGltZSxcbiAgICAgICAgICBydW50aW1lOiAobm93IC0gU0RLLnBhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgICAgIHZhbHVlOiB7dWludDY0OiB0aW1lIHx8IDB9LFxuICAgICAgICAgIHJlc291cmNlOiBlbmRQb2ludC50b1N0cmluZygpLFxuICAgICAgICAgIGtpbmQ6ICdwaW5nJ1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gZW5kUG9pbnQ7XG4gICAgICB9KSkpO1xuXG4gICAgcmV0dXJuIGVuZFBvaW50O1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCB7ZGVmYXVsdERpc2NvdmVyeVVyaX0gZnJvbSAnLi4vZGVmYXVsdHMnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgVmVyc2lvbk1hbmFnZXIgZnJvbSAnLi4vdmVyc2lvbi9WZXJzaW9uTWFuYWdlcic7XG5pbXBvcnQgUGFyYW1ldGVycyBmcm9tICcuLi8uLi9lbnZpcm9ubWVudC9QYXJhbWV0ZXJzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzY292ZXJ5VXJpIHtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2Rpc2NvdmVyeVVyaTogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPihkZWZhdWx0RGlzY292ZXJ5VXJpKTtcblxuICBzdGF0aWMgZ2V0IHVyaSgpOiBTdWJqZWN0PHN0cmluZz4ge1xuICAgIHJldHVybiBEaXNjb3ZlcnlVcmkuX2Rpc2NvdmVyeVVyaTtcbiAgfVxuXG4gIHN0YXRpYyBidWlsZERpc2NvdmVyeVVybCh1cmk6IFVSTCk6IHN0cmluZyB7XG4gICAgY29uc3QgdXJsID0gbmV3IFVSTCh1cmkudG9TdHJpbmcoKSk7XG4gICAgY29uc3Qgc2RrVmVyc2lvbiA9IFZlcnNpb25NYW5hZ2VyLnNka1ZlcnNpb247XG4gICAgY29uc3QgaW50ZW50aW9ucyA9IFBhcmFtZXRlcnMuZGlzY292ZXJ5UGFyYW1ldGVycy5pbnRlbnRpb25zO1xuXG4gICAgdXJsLnNlYXJjaCA9IGA/JHtuZXcgVVJMU2VhcmNoUGFyYW1zKFtbJ3ZlcnNpb24nLCBzZGtWZXJzaW9uXSwgWydpbnRlbnRpb25zJywgaW50ZW50aW9uc10sIFsnXycsIGAke0RhdGUubm93KCl9YF1dKS50b1N0cmluZygpfWA7XG5cbiAgICBpZiAodXJsLnBhdGhuYW1lID09PSAnLycpIHtcbiAgICAgIHVybC5wYXRobmFtZSA9ICcvcGNhc3QvZW5kUG9pbnRzJztcbiAgICB9XG5cbiAgICByZXR1cm4gdXJsLnRvU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignRGlzY292ZXJ5VXJpIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBFZGdlQXV0aFBhcnNlciBmcm9tICcuLi8uLi9lZGdlQXV0aC9FZGdlQXV0aFBhcnNlcic7XG5pbXBvcnQge0VuY29kZWRFZGdlVG9rZW59IGZyb20gJy4uLy4uL2VkZ2VBdXRoL0VuY29kZWRFZGdlVG9rZW4nO1xuXG5pbXBvcnQge1xuICBJU3Vic2NyaWJlUmVzcG9uc2UsXG4gIElTdWJzY3JpYmVXaXRoT2ZmZXJSZXF1ZXN0LFxuICBJU3Vic2NyaWJlV2l0aG91dE9mZmVyUmVxdWVzdFxufSBmcm9tICcuLi9hcGkvU3Vic2NyaWJlJztcbmltcG9ydCB7SVNldFJlbW90ZURlc2NyaXB0aW9uUmVxdWVzdCwgSVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2V9IGZyb20gJy4uL2FwaS9TZXRSZW1vdGVEZXNjcmlwdGlvbic7XG5pbXBvcnQge0lEZXN0cm95U3RyZWFtUmVxdWVzdCwgSURlc3Ryb3lTdHJlYW1SZXNwb25zZX0gZnJvbSAnLi4vYXBpL0Rlc3Ryb3lTdHJlYW0nO1xuaW1wb3J0IHtJQWRkSWNlQ2FuZGlkYXRlc1JlcXVlc3QsIElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2V9IGZyb20gJy4uL2FwaS9BZGRJY2VDYW5kaWRhdGVzJztcbmltcG9ydCBWZXJzaW9uTWFuYWdlciBmcm9tICcuLi92ZXJzaW9uL1ZlcnNpb25NYW5hZ2VyJztcbmltcG9ydCBQYXJhbWV0ZXJzIGZyb20gJy4uLy4uL2Vudmlyb25tZW50L1BhcmFtZXRlcnMnO1xuaW1wb3J0IHtCaXRyYXRlTW9kZSwgQml0cmF0ZVN0YXRlLCBJU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGV9IGZyb20gJy4uL2FwaS9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSc7XG5pbXBvcnQgQml0cmF0ZU1vZGVNYXBwaW5nIGZyb20gJy4vQml0cmF0ZU1vZGVNYXBwaW5nJztcbmltcG9ydCBCaXRyYXRlU3RhdGVNYXBwaW5nIGZyb20gJy4vQml0cmF0ZVN0YXRlTWFwcGluZyc7XG5pbXBvcnQge0JpdHNQZXJTZWNvbmQsIE1pbGxpc2Vjb25kfSBmcm9tICcuLi8uLi91bml0cy9Vbml0cyc7XG5pbXBvcnQge1xuICBJUHVibGlzaFJlc3BvbnNlLFxuICBJUHVibGlzaFdpdGhPZmZlclJlcXVlc3QsXG4gIElQdWJsaXNoV2l0aG91dE9mZmVyUmVxdWVzdCxcbiAgUHVibGlzaFN0YXR1c1xufSBmcm9tICcuLi9hcGkvUHVibGlzaCc7XG5cbmNvbnN0IGFwaVZlcnNpb24gPSA3O1xuXG5leHBvcnQgdHlwZSBTdWJzY3JpYmVTdGF0dXMgPSAnb2snIHwgJ25vLXN0cmVhbScgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ2dlby1yZXN0cmljdGVkJyB8ICdnZW8tYmxvY2tlZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCB0eXBlIFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzID0gJ29rJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCB0eXBlIFNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzID0gJ29rJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCB0eXBlIFJlbW92ZVRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzID0gJ29rJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCB0eXBlIEFkZEljZUNhbmRpZGF0ZXNTdGF0dXMgPSAnb2snIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmYWlsZWQnO1xuZXhwb3J0IHR5cGUgRGVzdHJveVN0cmVhbVN0YXR1cyA9ICdvaycgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgaW50ZXJmYWNlIElTdHJlYW0ge1xuICBzdHJlYW1JZDogc3RyaW5nO1xuICBzaGFyZWRTZWNyZXQ6IHN0cmluZztcbiAgdGVuYW5jeTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTdWJzY3JpYmVSZXNwb25zZUluaXQge1xuICBzdGF0dXM6IFN1YnNjcmliZVN0YXR1cztcbiAgc3RyZWFtPzogSVN0cmVhbTtcbiAgbGFnPzogTWlsbGlzZWNvbmQ7XG4gIHJ0Y0NvbmZpZ3VyYXRpb24/OiBSVENDb25maWd1cmF0aW9uO1xuICBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlPzoge1xuICAgIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbiAgfTtcbiAgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlPzoge1xuICAgIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbiAgfTtcbiAgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIElQdWJsaXNoUmVzcG9uc2VJbml0ID0ge1xuICBzdGF0dXM6IFB1Ymxpc2hTdGF0dXM7XG4gIHN0cmVhbT86IElTdHJlYW07XG4gIGxhZz86IE1pbGxpc2Vjb25kO1xuICBydGNDb25maWd1cmF0aW9uPzogUlRDQ29uZmlndXJhdGlvbjtcbiAgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG4gIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG4gIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2U/OiB7XG4gICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xuICB9O1xufTtcblxuaW50ZXJmYWNlIElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlSW5pdCB7XG4gIHN0YXR1czogU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXM7XG4gIHNlc3Npb25EZXNjcmlwdGlvbj86IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG59XG5cbmludGVyZmFjZSBJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlSW5pdCB7XG4gIHN0YXR1czogQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cztcbiAgb3B0aW9ucz86IHN0cmluZ1tdO1xufVxuXG5pbnRlcmZhY2UgSVNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlUmVzcG9uc2VJbml0IHtcbiAgc3RhdHVzOiBTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cztcbn1cblxuaW50ZXJmYWNlIElEZXN0cm95U3RyZWFtUmVzcG9uc2VJbml0IHtcbiAgc3RhdHVzOiBEZXN0cm95U3RyZWFtU3RhdHVzO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmRQb2ludCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdFbmRQb2ludCcpO1xuICBwcml2YXRlIHJlYWRvbmx5IF91cmk6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfdGltZW91dDogbnVtYmVyO1xuICBwcml2YXRlIF9yb3VuZFRyaXBUaW1lOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IodXJpOiBzdHJpbmcsIHRpbWVvdXQ6IG51bWJlcikge1xuICAgIHRoaXMuX3VyaSA9IHVyaTtcbiAgICB0aGlzLl90aW1lb3V0ID0gdGltZW91dDtcblxuICAgIGlmICghdGltZW91dCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFbmQgcG9pbnQgcmVxdWlyZXMgYSB0aW1lb3V0YCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHJvdW5kVHJpcFRpbWUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcm91bmRUcmlwVGltZTtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBFbmRQb2ludFt1cmk9JHt0aGlzLl91cml9XWA7XG4gIH1cblxuICBhc3luYyBwaW5nKCk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFBpbmdVcmwoKTtcbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgIGNhY2hlOiAnbm8tY2FjaGUnXG4gICAgICB9KSxcbiAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPigoXywgcmVqZWN0KSA9PlxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoYFBpbmcgdGltZWQgb3V0IFske3VybH1dYCkpLCB0aGlzLl90aW1lb3V0KVxuICAgICAgKVxuICAgIF0pO1xuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcblxuICAgIGlmICghcmVzcG9uc2Uub2spIHsgLyogSGFuZGxlICovXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFBpbmcgZmFpbGVkIFske3VybH1dIFske3Jlc3BvbnNlLnN0YXR1c31dYCk7XG4gICAgfVxuXG4gICAgdGhpcy5fcm91bmRUcmlwVGltZSA9IGZpbmlzaGVkIC0gc3RhcnQ7XG5cbiAgICByZXR1cm4gdGhpcy5fcm91bmRUcmlwVGltZTtcbiAgfVxuXG4gIGFzeW5jIHN1YnNjcmliZSh0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbiwgbG9jYWxTZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQsIGZhaWx1cmVDb3VudDogbnVtYmVyKTogUHJvbWlzZTxJU3Vic2NyaWJlUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgdGVuYW5jeSA9IEVkZ2VBdXRoUGFyc2VyLnBhcnNlVG9rZW4odG9rZW4pLnRlbmFuY3k7XG5cbiAgICBpZiAoIXRlbmFuY3kpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHBhcnNlIHRva2VuIFslc10nLCB0b2tlbik7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAndW5hdXRob3JpemVkJ307XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbdGVuYW5jeSwgJ3N0cmVhbScsICdzdWJzY3JpYmUnXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGNvbnN0IGNsaWVudFZlcnNpb24gPSBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uO1xuXG4gICAgaWYgKGZhaWx1cmVDb3VudCA9PT0gMCAmJiBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgY29uc3QgYm9keVdpdGhPZmZlcjogSVN1YnNjcmliZVdpdGhPZmZlclJlcXVlc3QgPSB7XG4gICAgICAgIGFwaVZlcnNpb24sXG4gICAgICAgIGNsaWVudFZlcnNpb24sXG4gICAgICAgIGJlYXJlclRva2VuOiB0b2tlbixcbiAgICAgICAgZmFpbHVyZUNvdW50LFxuICAgICAgICBodHRwUm91bmRUcmlwVGltZTogdGhpcy5fcm91bmRUcmlwVGltZSxcbiAgICAgICAgc2V0UmVtb3RlRGVzY3JpcHRpb246IHtcbiAgICAgICAgICBhcGlWZXJzaW9uLFxuICAgICAgICAgIHNlc3Npb25EZXNjcmlwdGlvbjoge1xuICAgICAgICAgICAgdHlwZTogbG9jYWxTZXNzaW9uRGVzY3JpcHRpb24udHlwZSxcbiAgICAgICAgICAgIHNkcDogbG9jYWxTZXNzaW9uRGVzY3JpcHRpb24uc2RwXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvbjoge2FwaVZlcnNpb259XG4gICAgICB9O1xuXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keVdpdGhPZmZlcikpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBib2R5V2l0aG91dE9mZmVyOiBJU3Vic2NyaWJlV2l0aG91dE9mZmVyUmVxdWVzdCA9IHtcbiAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgY2xpZW50VmVyc2lvbixcbiAgICAgICAgYmVhcmVyVG9rZW46IHRva2VuLFxuICAgICAgICBmYWlsdXJlQ291bnQsXG4gICAgICAgIGh0dHBSb3VuZFRyaXBUaW1lOiB0aGlzLl9yb3VuZFRyaXBUaW1lLFxuICAgICAgICBjcmVhdGVPZmZlckRlc2NyaXB0aW9uOiB7YXBpVmVyc2lvbn1cbiAgICAgIH07XG5cbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5V2l0aG91dE9mZmVyKSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0ID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGFcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHN1YnNjcmliZScsIG5ldyBFcnJvcihgU3Vic2NyaWJlIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dClcbiAgICAgICAgKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzdWJzY3JpYmUnLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IFN1YnNjcmliZVN0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvU3Vic2NyaWJlU3RhdHVzKGh0dHBSZXNwb25zZSk7XG5cbiAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICByZXR1cm4ge3N0YXR1c307XG4gICAgfVxuXG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHN1YnNjcmliZVJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb252ZXJ0SHR0cFJlc3BvbnNlVG9TdWJzY3JpYmVSZXNwb25zZSh0ZW5hbmN5LCBodHRwUmVzcG9uc2UpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmRlYnVnKCdHb3Qgc3Vic2NyaWJlIHJlc3BvbnNlIFslal0gaW4gWyVzXSBtcycsIHN1YnNjcmliZVJlc3BvbnNlLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiBzdWJzY3JpYmVSZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIHB1Ymxpc2gobmFtZTogc3RyaW5nLCB0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbiwgbG9jYWxTZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQsIGZhaWx1cmVDb3VudDogbnVtYmVyKTogUHJvbWlzZTxJUHVibGlzaFJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHRlbmFuY3kgPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKHRva2VuKS50ZW5hbmN5O1xuXG4gICAgaWYgKCF0ZW5hbmN5KSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwYXJzZSB0b2tlbiBbJXNdJywgdG9rZW4pO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ3VuYXV0aG9yaXplZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3RlbmFuY3ksICdzdHJlYW0nLCAncHVibGlzaCddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgY29uc3QgY2xpZW50VmVyc2lvbiA9IFZlcnNpb25NYW5hZ2VyLnNka1ZlcnNpb247XG5cbiAgICBpZiAoZmFpbHVyZUNvdW50ID09PSAwICYmIGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICBjb25zdCBib2R5V2l0aE9mZmVyOiBJUHVibGlzaFdpdGhPZmZlclJlcXVlc3QgPSB7XG4gICAgICAgIGFwaVZlcnNpb24sXG4gICAgICAgIGNsaWVudFZlcnNpb24sXG4gICAgICAgIGJlYXJlclRva2VuOiB0b2tlbixcbiAgICAgICAgZmFpbHVyZUNvdW50LFxuICAgICAgICBodHRwUm91bmRUcmlwVGltZTogdGhpcy5fcm91bmRUcmlwVGltZSxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgc2V0UmVtb3RlRGVzY3JpcHRpb246IHtcbiAgICAgICAgICBhcGlWZXJzaW9uLFxuICAgICAgICAgIHNlc3Npb25EZXNjcmlwdGlvbjoge1xuICAgICAgICAgICAgdHlwZTogbG9jYWxTZXNzaW9uRGVzY3JpcHRpb24udHlwZSxcbiAgICAgICAgICAgIHNkcDogbG9jYWxTZXNzaW9uRGVzY3JpcHRpb24uc2RwXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvbjoge1xuICAgICAgICAgIHN0cmVhbUlkOiAnJyxcbiAgICAgICAgICBvcHRpb25zOiBbJ3VwbG9hZCddLFxuICAgICAgICAgIGFwaVZlcnNpb25cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHlXaXRoT2ZmZXIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgYm9keVdpdGhvdXRPZmZlcjogSVB1Ymxpc2hXaXRob3V0T2ZmZXJSZXF1ZXN0ID0ge1xuICAgICAgICBhcGlWZXJzaW9uLFxuICAgICAgICBjbGllbnRWZXJzaW9uLFxuICAgICAgICBiZWFyZXJUb2tlbjogdG9rZW4sXG4gICAgICAgIGZhaWx1cmVDb3VudCxcbiAgICAgICAgaHR0cFJvdW5kVHJpcFRpbWU6IHRoaXMuX3JvdW5kVHJpcFRpbWUsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb246IHtcbiAgICAgICAgICBzdHJlYW1JZDogJycsXG4gICAgICAgICAgb3B0aW9uczogWyd1cGxvYWQnXSxcbiAgICAgICAgICBhcGlWZXJzaW9uXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5V2l0aG91dE9mZmVyKSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0ID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGFcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHB1Ymxpc2gnLCBuZXcgRXJyb3IoYFB1Ymxpc2ggdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KVxuICAgICAgICApXG4gICAgICBdKVxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHB1Ymxpc2gnLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IFB1Ymxpc2hTdGF0dXMgPSB0aGlzLm1hcEh0dHBTdGF0dXNUb1B1Ymxpc2hTdGF0dXMoaHR0cFJlc3BvbnNlKTtcblxuICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgIHJldHVybiB7c3RhdHVzfTtcbiAgICB9XG5cbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgc3Vic2NyaWJlUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbnZlcnRIdHRwUmVzcG9uc2VUb1B1Ymxpc2hSZXNwb25zZSh0ZW5hbmN5LCBodHRwUmVzcG9uc2UpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmRlYnVnKCdHb3QgcHVibGlzaCByZXNwb25zZSBbJWpdIGluIFslc10gbXMnLCBzdWJzY3JpYmVSZXNwb25zZSwgZmluaXNoZWQgLSBzdGFydCk7XG5cbiAgICByZXR1cm4gc3Vic2NyaWJlUmVzcG9uc2U7XG4gIH1cblxuICBhc3luYyBzZXRSZW1vdGVEZXNjcmlwdGlvbihzdHJlYW06IElTdHJlYW0sIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdCk6IFByb21pc2U8SVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbc3RyZWFtLnRlbmFuY3ksICdzdHJlYW0nLCBzdHJlYW0uc3RyZWFtSWQsICdkZXNjcmlwdGlvbicsICdyZW1vdGUnXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGNvbnN0IGJvZHk6IElTZXRSZW1vdGVEZXNjcmlwdGlvblJlcXVlc3QgPSB7XG4gICAgICBhcGlWZXJzaW9uLFxuICAgICAgc2hhcmVkU2VjcmV0OiBzdHJlYW0uc2hhcmVkU2VjcmV0LFxuICAgICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiB7XG4gICAgICAgIHR5cGU6IHNlc3Npb25EZXNjcmlwdGlvbi50eXBlLFxuICAgICAgICBzZHA6IHNlc3Npb25EZXNjcmlwdGlvbi5zZHBcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIGZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uJywgbmV3IEVycm9yKGBTZXQgcmVtb3RlIGRlc2NyaXB0aW9uIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dClcbiAgICAgICAgKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMoaHR0cFJlc3BvbnNlKTtcblxuICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgIHJldHVybiB7c3RhdHVzfTtcbiAgICB9XG5cbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29udmVydEh0dHBSZXNwb25zZVRvU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZShodHRwUmVzcG9uc2UpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmRlYnVnKCdHb3Qgc2V0IHJlbW90ZSBkZXNjcmlwdGlvbiByZXNwb25zZSBbJWpdIGluIFslc10gbXMnLCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlO1xuICB9XG5cbiAgYXN5bmMgbGltaXRCaXRyYXRlKFxuICAgIHN0cmVhbTogSVN0cmVhbSxcbiAgICBlbGFwc2VkSW5NaWxsaXNlY29uZHM6IG51bWJlcixcbiAgICBiaXRyYXRlSW5CaXRzUGVyU2Vjb25kOiBCaXRzUGVyU2Vjb25kLFxuICAgIGJpdHJhdGVTdGF0ZTogQml0cmF0ZVN0YXRlLFxuICAgIGJpdHJhdGVNb2RlOiBCaXRyYXRlTW9kZSxcbiAgKTogUHJvbWlzZTxJU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFtzdHJlYW0udGVuYW5jeSwgJ3N0cmVhbScsIHN0cmVhbS5zdHJlYW1JZCwgJ2JpdHJhdGUnXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGNvbnN0IGJvZHk6IElTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSA9IHtcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBzaGFyZWRTZWNyZXQ6IHN0cmVhbS5zaGFyZWRTZWNyZXQsXG4gICAgICBlbGFwc2VkSW5NaWxsaXNlY29uZHMsXG4gICAgICBiaXRyYXRlSW5CaXRzUGVyU2Vjb25kLFxuICAgICAgYml0cmF0ZVN0YXRlOiBCaXRyYXRlU3RhdGVNYXBwaW5nLmNvbnZlcnRCaXRyYXRlU3RhdGVUb0JpdHJhdGVTdGF0ZVR5cGUoYml0cmF0ZVN0YXRlKSxcbiAgICAgIGJpdHJhdGVNb2RlOiBCaXRyYXRlTW9kZU1hcHBpbmcuY29udmVydEJpdHJhdGVNb2RlVG9CaXRyYXRlTW9kZVR5cGUoYml0cmF0ZU1vZGUpXG4gICAgfTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5KSk7XG5cbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgbGV0IGh0dHBSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHRpbWVvdXQgPSBudWxsO1xuXG4gICAgICBodHRwUmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBmb3JtRGF0YVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KHJlc29sdmUgPT5cbiAgICAgICAgICB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc2V0IGxpbWl0IGJpdHJhdGUgdGltZWQnLCBuZXcgRXJyb3IoYFNldCBsaW1pdCBiaXRyYXRlIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dClcbiAgICAgICAgKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzZXQgbGltaXQgYml0cmF0ZSB0aW1lZCcsIGUpO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ2ZhaWxlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1czogU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMgPSB0aGlzLm1hcEh0dHBTdGF0dXNUb1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzKGh0dHBSZXNwb25zZSk7XG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0dvdCBzZXQgbGltaXQgYml0cmF0ZSByZXNwb25zZSBbJXNdIGluIFslc10gbXMnLCBzdGF0dXMsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHtzdGF0dXN9O1xuICB9XG5cbiAgYXN5bmMgYWRkSWNlQ2FuZGlkYXRlcyhzdHJlYW06IElTdHJlYW0sIGNhbmRpZGF0ZXM6IFJUQ0ljZUNhbmRpZGF0ZVtdLCBkaXNjb3ZlcnlDb21wbGV0ZWQ6IGJvb2xlYW4sIG9wdGlvbnM6IHN0cmluZ1tdID0gW10pOiBQcm9taXNlPElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbc3RyZWFtLnRlbmFuY3ksICdzdHJlYW0nLCBzdHJlYW0uc3RyZWFtSWQsICdpY2UnLCAnY2FuZGlkYXRlcyddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgY29uc3QgYm9keTogSUFkZEljZUNhbmRpZGF0ZXNSZXF1ZXN0ID0ge1xuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHNoYXJlZFNlY3JldDogc3RyZWFtLnNoYXJlZFNlY3JldCxcbiAgICAgIGNhbmRpZGF0ZXMsXG4gICAgICBkaXNjb3ZlcnlDb21wbGV0ZWQsXG4gICAgICBvcHRpb25zXG4gICAgfTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5KSk7XG5cbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgbGV0IGh0dHBSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHRpbWVvdXQgPSBudWxsO1xuXG4gICAgICBodHRwUmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBmb3JtRGF0YVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KHJlc29sdmUgPT5cbiAgICAgICAgICB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gYWRkIGljZSBjYW5kaWRhdGVzJywgbmV3IEVycm9yKGBBZGQgaWNlIGNhbmRpZGF0ZXMgdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KVxuICAgICAgICApXG4gICAgICBdKVxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIGFkZCBpY2UgY2FuZGlkYXRlcycsIGUpO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ2ZhaWxlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1czogQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyhodHRwUmVzcG9uc2UpO1xuXG4gICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgcmV0dXJuIHtzdGF0dXN9O1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbnZlcnRIdHRwUmVzcG9uc2VUb0FkZEljZUNhbmRpZGF0ZXNSZXNwb25zZShodHRwUmVzcG9uc2UpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0dvdCBhZGQgSUNFIGNhbmRpZGF0ZXMgcmVzcG9uc2UgWyVqXSBpbiBbJXNdIG1zJywgYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2U7XG4gIH1cblxuICBhc3luYyBkZXN0cm95U3RyZWFtKHN0cmVhbTogSVN0cmVhbSwgcmVhc29uOiBzdHJpbmcpOiBQcm9taXNlPElEZXN0cm95U3RyZWFtUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbc3RyZWFtLnRlbmFuY3ksICdzdHJlYW0nLCBzdHJlYW0uc3RyZWFtSWQsICdkZXN0cm95J10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBjb25zdCBib2R5OiBJRGVzdHJveVN0cmVhbVJlcXVlc3QgPSB7XG4gICAgICBhcGlWZXJzaW9uLFxuICAgICAgc2hhcmVkU2VjcmV0OiBzdHJlYW0uc2hhcmVkU2VjcmV0LFxuICAgICAgcmVhc29uLFxuICAgICAgb3B0aW9uczogW11cbiAgICB9O1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIGZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhLFxuICAgICAgICAgIGNhY2hlOiAnbm8tY2FjaGUnXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzdWJzY3JpYmUnLCBuZXcgRXJyb3IoYERlbGV0ZSBzdHJlYW0gdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KVxuICAgICAgICApXG4gICAgICBdKVxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIGRlbGV0ZSBzdHJlYW0nLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IERlc3Ryb3lTdHJlYW1TdGF0dXMgPSB0aGlzLm1hcEh0dHBTdGF0dXNUb1NldERlc3Ryb3lTdHJlYW1TdGF0dXMoaHR0cFJlc3BvbnNlKTtcblxuICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgIHJldHVybiB7c3RhdHVzfTtcbiAgICB9XG5cbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG4gICAgY29uc3QgZGVzdHJveVN0cmVhbVJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb252ZXJ0SHR0cFJlc3BvbnNlVG9EZXN0cm95U3RyZWFtUmVzcG9uc2UoaHR0cFJlc3BvbnNlKTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdHb3QgZGVzdHJveSBzdHJlYW0gcmVzcG9uc2UgWyVqXSBpbiBbJXNdIG1zJywgZGVzdHJveVN0cmVhbVJlc3BvbnNlLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiBkZXN0cm95U3RyZWFtUmVzcG9uc2U7XG4gIH1cblxuICBhc3luYyBkZXN0cm95U3RyZWFtT25Vbm1vdW50KHN0cmVhbTogSVN0cmVhbSwgcmVhc29uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIW5hdmlnYXRvcj8uc2VuZEJlYWNvbikge1xuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuZGVzdHJveVN0cmVhbShzdHJlYW0sIHJlYXNvbik7XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbc3RyZWFtLnRlbmFuY3ksICdzdHJlYW0nLCBzdHJlYW0uc3RyZWFtSWQsICdkZXN0cm95J10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBjb25zdCBib2R5OiBJRGVzdHJveVN0cmVhbVJlcXVlc3QgPSB7XG4gICAgICBhcGlWZXJzaW9uLFxuICAgICAgc2hhcmVkU2VjcmV0OiBzdHJlYW0uc2hhcmVkU2VjcmV0LFxuICAgICAgcmVhc29uLFxuICAgICAgb3B0aW9uczogW11cbiAgICB9O1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcblxuICAgIG5hdmlnYXRvci5zZW5kQmVhY29uKHVybCwgZm9ybURhdGEpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFVybChwYXRoOiBzdHJpbmdbXSk6IFVSTCB7XG4gICAgY29uc3QgdXJpID0gbmV3IFVSTCh0aGlzLl91cmkpO1xuICAgIGNvbnN0IHBhdGhBc0FycmF5ID0gdXJpLnBhdGhuYW1lLnNwbGl0KCcvJyk7XG5cbiAgICBwYXRoQXNBcnJheS5sZW5ndGggPSBwYXRoQXNBcnJheS5sZW5ndGggLSAxO1xuXG4gICAgdXJpLnBhdGhuYW1lID0gcGF0aEFzQXJyYXkuY29uY2F0KC4uLnBhdGgpLmpvaW4oJy8nKTtcblxuICAgIHJldHVybiB1cmk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkUGluZ1VybCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHVyaSA9IG5ldyBVUkwodGhpcy5fdXJpKTtcbiAgICBjb25zdCBzZGtWZXJzaW9uID0gVmVyc2lvbk1hbmFnZXIuc2RrVmVyc2lvbjtcbiAgICBjb25zdCBpbnRlbnRpb25zID0gUGFyYW1ldGVycy5kaXNjb3ZlcnlQYXJhbWV0ZXJzLmludGVudGlvbnM7XG5cbiAgICB1cmkuc2VhcmNoID0gYD8ke25ldyBVUkxTZWFyY2hQYXJhbXMoW1sndHlwZScsICdodHRwJ10sIFsndmVyc2lvbicsIHNka1ZlcnNpb25dLCBbJ2ludGVudGlvbnMnLCBpbnRlbnRpb25zXSwgWydfJywgYCR7RGF0ZS5ub3coKX1gXV0pLnRvU3RyaW5nKCl9YDtcblxuICAgIHJldHVybiB1cmkudG9TdHJpbmcoKTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwSHR0cFN0YXR1c1RvUHVibGlzaFN0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBQdWJsaXNoU3RhdHVzIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gJ3VuYXV0aG9yaXplZCc7XG4gICAgICBjYXNlIDQwMjpcbiAgICAgICAgcmV0dXJuICdnZW8tcmVzdHJpY3RlZCc7XG4gICAgICBjYXNlIDQwMzpcbiAgICAgICAgcmV0dXJuICdnZW8tYmxvY2tlZCc7XG4gICAgICBjYXNlIDQwODpcbiAgICAgICAgcmV0dXJuICd0aW1lb3V0JztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9TdWJzY3JpYmVTdGF0dXMocmVzcG9uc2U6IFJlc3BvbnNlKTogU3Vic2NyaWJlU3RhdHVzIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gJ3VuYXV0aG9yaXplZCc7XG4gICAgICBjYXNlIDQwMjpcbiAgICAgICAgcmV0dXJuICdnZW8tcmVzdHJpY3RlZCc7XG4gICAgICBjYXNlIDQwMzpcbiAgICAgICAgcmV0dXJuICdnZW8tYmxvY2tlZCc7XG4gICAgICBjYXNlIDQwODpcbiAgICAgICAgcmV0dXJuICd0aW1lb3V0JztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9TZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFwSHR0cFN0YXR1c1RvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMocmVzcG9uc2U6IFJlc3BvbnNlKTogU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb0FkZEljZUNhbmRpZGF0ZXNTdGF0dXMocmVzcG9uc2U6IFJlc3BvbnNlKTogQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFwSHR0cFN0YXR1c1RvU2V0RGVzdHJveVN0cmVhbVN0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBEZXN0cm95U3RyZWFtU3RhdHVzIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gJ3VuYXV0aG9yaXplZCc7XG4gICAgICBjYXNlIDQwODpcbiAgICAgICAgcmV0dXJuICd0aW1lb3V0JztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjb252ZXJ0SHR0cFJlc3BvbnNlVG9TdWJzY3JpYmVSZXNwb25zZSh0ZW5hbmN5OiBzdHJpbmcsIHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8SVN1YnNjcmliZVJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgSVN1YnNjcmliZVJlc3BvbnNlO1xuICAgIGNvbnN0IHN1YnNjcmliZVJlc3BvbnNlOiBJU3Vic2NyaWJlUmVzcG9uc2VJbml0ID0ge3N0YXR1czogZGF0YS5zdGF0dXN9O1xuXG4gICAgc3Vic2NyaWJlUmVzcG9uc2Uuc3RyZWFtID0ge1xuICAgICAgdGVuYW5jeSxcbiAgICAgIHN0cmVhbUlkOiBkYXRhLnN0cmVhbUlkLFxuICAgICAgc2hhcmVkU2VjcmV0OiBkYXRhLnNoYXJlZFNlY3JldFxuICAgIH07XG5cbiAgICBzdWJzY3JpYmVSZXNwb25zZS5sYWcgPSBkYXRhLmxhZztcblxuICAgIGlmIChkYXRhKSB7XG4gICAgICBpZiAoZGF0YS5ydGNDb25maWd1cmF0aW9uKSB7XG4gICAgICAgIHN1YnNjcmliZVJlc3BvbnNlLnJ0Y0NvbmZpZ3VyYXRpb24gPSB0aGlzLmNvbnZlcnRJUnRjQ29uZmlndXJhdGlvblRvUlRDQ29uZmlndXJhdGlvbihkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24pO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlICYmIGRhdGEuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgc3Vic2NyaWJlUmVzcG9uc2Uuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IGRhdGEuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb259O1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlICYmIGRhdGEuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgc3Vic2NyaWJlUmVzcG9uc2UuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IGRhdGEuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb259O1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHN1YnNjcmliZVJlc3BvbnNlLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IGRhdGEuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbn07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1YnNjcmliZVJlc3BvbnNlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjb252ZXJ0SHR0cFJlc3BvbnNlVG9QdWJsaXNoUmVzcG9uc2UodGVuYW5jeTogc3RyaW5nLCByZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPElQdWJsaXNoUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBJUHVibGlzaFJlc3BvbnNlO1xuICAgIGNvbnN0IHB1Ymxpc2hSZXNwb25zZTogSVB1Ymxpc2hSZXNwb25zZUluaXQgPSB7c3RhdHVzOiBkYXRhLnN0YXR1c307XG5cbiAgICBwdWJsaXNoUmVzcG9uc2Uuc3RyZWFtID0ge1xuICAgICAgdGVuYW5jeSxcbiAgICAgIHN0cmVhbUlkOiBkYXRhLnN0cmVhbUlkLFxuICAgICAgc2hhcmVkU2VjcmV0OiBkYXRhLnNoYXJlZFNlY3JldFxuICAgIH07XG5cbiAgICBpZiAoZGF0YSkge1xuICAgICAgaWYgKGRhdGEucnRjQ29uZmlndXJhdGlvbikge1xuICAgICAgICBwdWJsaXNoUmVzcG9uc2UucnRjQ29uZmlndXJhdGlvbiA9IHRoaXMuY29udmVydElSdGNDb25maWd1cmF0aW9uVG9SVENDb25maWd1cmF0aW9uKGRhdGEucnRjQ29uZmlndXJhdGlvbik7XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgICBwdWJsaXNoUmVzcG9uc2Uuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IGRhdGEuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb259O1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlICYmIGRhdGEuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgcHVibGlzaFJlc3BvbnNlLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UgPSB7c2Vzc2lvbkRlc2NyaXB0aW9uOiBkYXRhLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9ufTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlICYmIGRhdGEuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgICBwdWJsaXNoUmVzcG9uc2UuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlID0ge3Nlc3Npb25EZXNjcmlwdGlvbjogZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9ufTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcHVibGlzaFJlc3BvbnNlO1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0SVJ0Y0NvbmZpZ3VyYXRpb25Ub1JUQ0NvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbjogUlRDQ29uZmlndXJhdGlvbik6IFJUQ0NvbmZpZ3VyYXRpb24ge1xuICAgIGNvbnN0IHJ0Y0NvbmZpZ3VyYXRpb246IFJUQ0NvbmZpZ3VyYXRpb24gPSB7aWNlU2VydmVyczogW119O1xuXG4gICAgaWYgKGNvbmZpZ3VyYXRpb24uYnVuZGxlUG9saWN5KSB7XG4gICAgICBydGNDb25maWd1cmF0aW9uLmJ1bmRsZVBvbGljeSA9IGNvbmZpZ3VyYXRpb24uYnVuZGxlUG9saWN5O1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY29uZmlndXJhdGlvbi5pY2VDYW5kaWRhdGVQb29sU2l6ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24uaWNlQ2FuZGlkYXRlUG9vbFNpemUgPSBjb25maWd1cmF0aW9uLmljZUNhbmRpZGF0ZVBvb2xTaXplO1xuICAgIH1cblxuICAgIGlmIChjb25maWd1cmF0aW9uLmljZVNlcnZlcnMpIHtcbiAgICAgIGNvbnN0IGljZVNlcnZlcnM6IFJUQ0ljZVNlcnZlcltdID0gW107XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGljZVNlcnZlcnMucHVzaCh7XG4gICAgICAgICAgdXJsczogY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLnVybHMsXG4gICAgICAgICAgdXNlcm5hbWU6IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS51c2VybmFtZSxcbiAgICAgICAgICBjcmVkZW50aWFsOiBjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0uY3JlZGVudGlhbFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcnRjQ29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzID0gaWNlU2VydmVycztcbiAgICB9XG5cbiAgICBpZiAoY29uZmlndXJhdGlvbi5pY2VUcmFuc3BvcnRQb2xpY3kpIHtcbiAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24uaWNlVHJhbnNwb3J0UG9saWN5ID0gY29uZmlndXJhdGlvbi5pY2VUcmFuc3BvcnRQb2xpY3k7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZ3VyYXRpb24ucnRjcE11eFBvbGljeSkge1xuICAgICAgcnRjQ29uZmlndXJhdGlvbi5ydGNwTXV4UG9saWN5ID0gY29uZmlndXJhdGlvbi5ydGNwTXV4UG9saWN5O1xuICAgIH1cblxuICAgIHJldHVybiBydGNDb25maWd1cmF0aW9uO1xuICB9XG4gIHByaXZhdGUgYXN5bmMgY29udmVydEh0dHBSZXNwb25zZVRvU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZShyZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgSVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2U7XG4gICAgY29uc3Qgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZTogSVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2VJbml0ID0ge3N0YXR1czogZGF0YS5zdGF0dXN9O1xuXG4gICAgaWYgKGRhdGEgJiYgZGF0YS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uID0gZGF0YS5zZXNzaW9uRGVzY3JpcHRpb247XG4gICAgfVxuXG4gICAgcmV0dXJuIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2U7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbnZlcnRIdHRwUmVzcG9uc2VUb0FkZEljZUNhbmRpZGF0ZXNSZXNwb25zZShyZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlO1xuICAgIGNvbnN0IGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZTogSUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZUluaXQgPSB7XG4gICAgICBzdGF0dXM6IGRhdGEuc3RhdHVzLFxuICAgICAgb3B0aW9uczogW11cbiAgICB9O1xuXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGlmIChkYXRhLm9wdGlvbnMpIHtcbiAgICAgICAgYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlLm9wdGlvbnMgPSBkYXRhLm9wdGlvbnM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29udmVydEh0dHBSZXNwb25zZVRvRGVzdHJveVN0cmVhbVJlc3BvbnNlKHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8SURlc3Ryb3lTdHJlYW1SZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIElEZXN0cm95U3RyZWFtUmVzcG9uc2U7XG4gICAgY29uc3QgZGVzdHJveVN0cmVhbTogSURlc3Ryb3lTdHJlYW1SZXNwb25zZUluaXQgPSB7c3RhdHVzOiBkYXRhLnN0YXR1c307XG5cbiAgICByZXR1cm4gZGVzdHJveVN0cmVhbTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtJU3RyZWFtVHJhY2tUcmFuc2Zvcm19IGZyb20gJy4uL2NvbnRleHQvQ2hhbm5lbENvbnRleHQnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbnNlcnRhYmxlU3RyZWFtcyB7XG4gIHN0YXRpYyBzZXR1cE1lZGlhU3RyZWFtVHJhY2tUcmFuc2Zvcm0odHJhbnNmb3JtOiBJU3RyZWFtVHJhY2tUcmFuc2Zvcm08VmlkZW9GcmFtZT4sIHN0cmVhbTogTWVkaWFTdHJlYW0pIHtcbiAgICBjb25zdCB2aWRlb1RyYWNrID0gc3RyZWFtLmdldFZpZGVvVHJhY2tzKClbMF07XG5cbiAgICBpZiAodmlkZW9UcmFjaykge1xuICAgICAgY29uc3QgdHJhbnNmb3JtZXIgPSBuZXcgVHJhbnNmb3JtU3RyZWFtKHt0cmFuc2Zvcm19KTtcbiAgICAgIGNvbnN0IHByb2Nlc3NvciA9IG5ldyBNZWRpYVN0cmVhbVRyYWNrUHJvY2Vzc29yKHt0cmFjazogdmlkZW9UcmFja30pO1xuICAgICAgY29uc3QgZ2VuZXJhdG9yID0gbmV3IE1lZGlhU3RyZWFtVHJhY2tHZW5lcmF0b3Ioe2tpbmQ6ICd2aWRlbyd9KTtcbiAgICAgIGNvbnN0IHNvdXJjZSA9IHByb2Nlc3Nvci5yZWFkYWJsZTtcbiAgICAgIGNvbnN0IHNpbmsgPSBnZW5lcmF0b3Iud3JpdGFibGU7XG5cbiAgICAgIHNvdXJjZVxuICAgICAgICAucGlwZVRocm91Z2godHJhbnNmb3JtZXIpXG4gICAgICAgIC5waXBlVG8oc2luayk7XG5cbiAgICAgIGNvbnN0IHRyYW5zZm9ybWVkU3RyZWFtID0gbmV3IE1lZGlhU3RyZWFtKCk7XG5cbiAgICAgIHRyYW5zZm9ybWVkU3RyZWFtLmFkZFRyYWNrKGdlbmVyYXRvcik7XG4gICAgICBzdHJlYW0uZ2V0QXVkaW9UcmFja3MoKS5mb3JFYWNoKGF1ZGlvVHJhY2sgPT4ge1xuICAgICAgICB0cmFuc2Zvcm1lZFN0cmVhbS5hZGRUcmFjayhhdWRpb1RyYWNrKTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gdHJhbnNmb3JtZWRTdHJlYW07XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cmVhbTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW5zZXJ0YWJsZVN0cmVhbXMgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4uLy4uL3J0Yy9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IEdhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyIGZyb20gJy4uLy4uL2RvbS9HYXJiYWdlQ29sbGVjdG9yTWFuYWdlcic7XG5pbXBvcnQge0lTdHJlYW19IGZyb20gJy4vSVN0cmVhbSc7XG5pbXBvcnQge1NldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzfSBmcm9tICcuLi9kaXNjb3ZlcnkvRW5kUG9pbnQnO1xuaW1wb3J0IFBlZXJDb25uZWN0aW9uU2VydmljZSBmcm9tICcuLi8uLi9ydGMvUGVlckNvbm5lY3Rpb25TZXJ2aWNlJztcbmltcG9ydCBEaXNjb3ZlcnkgZnJvbSAnLi4vZGlzY292ZXJ5L0Rpc2NvdmVyeSc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IENoYW5uZWxTdGF0ZSBmcm9tICcuLi9jaGFubmVscy9DaGFubmVsU3RhdGUnO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uLy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IFJ0Y0Nvbm5lY3Rpb25Nb25pdG9yIGZyb20gJy4uLy4uL3J0Yy9SdGNDb25uZWN0aW9uTW9uaXRvcic7XG5pbXBvcnQgRHVyYXRpb25zIGZyb20gJy4uLy4uL3RpbWUvRHVyYXRpb24nO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBDaGFubmVsQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L0NoYW5uZWxDb250ZXh0JztcbmltcG9ydCBSdGNDb25maWd1cmF0aW9uTWFuYWdlciBmcm9tICcuLi8uLi9ydGMvUnRjQ29uZmlndXJhdGlvbk1hbmFnZXInO1xuaW1wb3J0IFBlZXJDb25uZWN0aW9uQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L1BlZXJDb25uZWN0aW9uQ29udGV4dCc7XG5pbXBvcnQgSW5zZXJ0YWJsZVN0cmVhbXMgZnJvbSAnLi9JbnNlcnRhYmxlU3RyZWFtcyc7XG5cbmNvbnN0IGljZUNhbmRpZGF0ZUFjY3VtdWxhdGlvbkludGVydmFsID0gMTAwO1xuY29uc3QgZGVmYXVsdFN0cmVhbVNldHVwVGltZW91dCA9IDMwMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFsVGltZVN0cmVhbSBpbXBsZW1lbnRzIElTdHJlYW0ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignUmVhbFRpbWVTdHJlYW0nKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbm5lbENvbnRleHQ6IENoYW5uZWxDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9wZWVyQ29ubmVjdGlvbkNvbnRleHQ6IFBlZXJDb25uZWN0aW9uQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfaGFuZGxlU3RyZWFtRmFpbHVyZTogKCkgPT4gUHJvbWlzZTx2b2lkPjtcblxuICBjb25zdHJ1Y3RvcihjaGFubmVsQ29udGV4dCwgcGVlckNvbm5lY3Rpb25Db250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlOiAoKSA9PiBQcm9taXNlPHZvaWQ+KSB7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQgPSBjaGFubmVsQ29udGV4dDtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQgPSBwZWVyQ29ubmVjdGlvbkNvbnRleHQ7XG4gICAgdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSA9IGhhbmRsZVN0cmVhbUZhaWx1cmU7XG4gIH1cblxuICBzdGFydCh1cmksIHRva2VuLCBsaXN0ZW5PblN0cmVhbVNldHVwLCBwbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBQcm9taXNlLmFsbChbXG4gICAgICBEaXNjb3ZlcnkuZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyh1cmkpLFxuICAgICAgUGVlckNvbm5lY3Rpb25TZXJ2aWNlLmNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIoKVxuICAgICAgICAudGhlbigoe2xvY2FsT2ZmZXIsIHBlZXJDb25uZWN0aW9ufSkgPT4ge1xuICAgICAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSA9IHBlZXJDb25uZWN0aW9uO1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxvY2FsT2ZmZXIsXG4gICAgICAgICAgICBwZWVyQ29ubmVjdGlvblxuICAgICAgICAgIH07XG4gICAgICAgIH0pXG4gICAgXSlcbiAgICAgIC50aGVuKChbZW5kUG9pbnQsIHtsb2NhbE9mZmVyLCBwZWVyQ29ubmVjdGlvbn1dKSA9PiB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0Lm9ubGluZS52YWx1ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlID0gZW5kUG9pbnQ7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDb25uZWN0aW5nIHRvIFslc10nLCBlbmRQb2ludC50b1N0cmluZygpKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0xvY2FsIG9mZmVyOlxcbicgKyBsb2NhbE9mZmVyLnNkcCk7XG5cbiAgICAgICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmNsaWVudE9mZmVyRGlzYWJsZWQgfHwgIXBlZXJDb25uZWN0aW9uLnN1cHBvcnRzU2V0Q29uZmlndXJhdGlvbiB8fCAhcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNHZXRDb25maWd1cmF0aW9uKSB7XG4gICAgICAgICAgcGVlckNvbm5lY3Rpb24uY2xvc2UoKTtcbiAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5kaXNwb3NlKCk7XG5cbiAgICAgICAgICBpZiAoU0RLLmZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnQgJiYgIShGZWF0dXJlRW5hYmxlbWVudC5pc01vYmlsZSAmJiBTREsuc2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzKSkge1xuICAgICAgICAgICAgR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXIuZm9yY2VHYXJiYWdlQ29sbGVjdGlvbigpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHBlZXJDb25uZWN0aW9uID0gbnVsbDtcbiAgICAgICAgICBsb2NhbE9mZmVyID0gbnVsbDtcbiAgICAgICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgPSBwZWVyQ29ubmVjdGlvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBlbmRQb2ludC5zdWJzY3JpYmUodG9rZW4sIGxvY2FsT2ZmZXIsIHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSk7XG4gICAgICB9KVxuICAgICAgLnRoZW4oKHtzdGF0dXMsIHN0cmVhbSwgcnRjQ29uZmlndXJhdGlvbiwgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSwgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLCBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLCBsYWd9KSA9PiB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSA9IHN0cmVhbTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubGFnLnZhbHVlID0gbGFnO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmFwcGx5U2Vzc2lvbkFuZFN0cmVhbVByb3BlcnRpZXNUb1ZpZGVvRWxlbWVudCgpO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICAnWyVzXSBTdWJzY3JpYmUgY29tcGxldGVkIFslc10gWyVqXSBbJWpdIFslal0gWyVqXScsXG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24sXG4gICAgICAgICAgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSxcbiAgICAgICAgICBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UsXG4gICAgICAgICAgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gdGhpcy5fY2hhbm5lbENvbnRleHQubWFwU3Vic2NyaWJlU3RhdHVzVG9DaGFubmVsU3RhdHVzKHN0YXR1cyk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXBwbHlTdGF0dXMoc3RhdHVzKTtcblxuICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBwbHlSdGNDb25maWd1cmF0aW9uKHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSwgcnRjQ29uZmlndXJhdGlvbilcbiAgICAgICAgICAudGhlbihwZWVyQ29ubmVjdGlvbiA9PiB7XG4gICAgICAgICAgICBsZXQgc3VibWl0Q2FuZGlkYXRlc1RpbWVvdXQ7XG4gICAgICAgICAgICBsZXQgY2FuY2VsRGlzY292ZXJ5ID0gZmFsc2U7XG4gICAgICAgICAgICBsZXQgZGlzY292ZXJ5Q29tcGxldGVkID0gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCBjYW5kaWRhdGVzOiBSVENJY2VDYW5kaWRhdGVbXSA9IFtdO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSkge1xuICAgICAgICAgICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgPSBwZWVyQ29ubmVjdGlvbjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ub25pY2VjYW5kaWRhdGUgPSAoZSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlICE9PSBzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlICE9PSBwZWVyQ29ubmVjdGlvbikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChjYW5jZWxEaXNjb3ZlcnkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoIVNESy5zZW5kTG9jYWxDYW5kaWRhdGVzLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGUuY2FuZGlkYXRlICYmIGUuY2FuZGlkYXRlLmNhbmRpZGF0ZSkge1xuICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMucHVzaChlLmNhbmRpZGF0ZSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGlzY292ZXJ5Q29tcGxldGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICghc3VibWl0Q2FuZGlkYXRlc1RpbWVvdXQpIHtcbiAgICAgICAgICAgICAgICBzdWJtaXRDYW5kaWRhdGVzVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSAhPT0gc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgaWYgKGNhbmNlbERpc2NvdmVyeSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5hZGRJY2VDYW5kaWRhdGVzKHN0cmVhbSwgY2FuZGlkYXRlcywgZGlzY292ZXJ5Q29tcGxldGVkKVxuICAgICAgICAgICAgICAgICAgICAudGhlbigoe3N0YXR1cywgb3B0aW9uc30pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIud2FybignWyVzXSBGYWlsZWQgdG8gYWRkIElDRSBjYW5kaWRhdGVzIHdpdGggcmVhc29uIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgc3RhdHVzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmluY2x1ZGVzKCdjYW5jZWwnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsRGlzY292ZXJ5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBBZGRlZCBJQ0UgY2FuZGlkYXRlcyB3aXRoIHJlYXNvbiBbJXNdIGFuZCBvcHRpb25zIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgc3RhdHVzLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignWyVzXSBGYWlsZWQgdG8gYWRkIElDRSBjYW5kaWRhdGVzJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGUpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LCBpY2VDYW5kaWRhdGVBY2N1bXVsYXRpb25JbnRlcnZhbCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLm9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlICE9PSBzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlICE9PSBwZWVyQ29ubmVjdGlvbikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IHJldHJ5Q2FsbGJhY2sgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgLy8gSWYgd2Ugc3RvcCBub3JtYWxseSB0aGUgcGVlciBjb25uZWN0aW9uIGlzIHVucmVnaXN0ZXJlZCBmaXJzdC5cbiAgICAgICAgICAgICAgICAvLyBUaHVzIGFueXRpbWUgd2Ugc2VlIGEgY2xvc2VkIHBlZXIgY29ubmVjdGlvbiB0aGF0IGlzIHN0aWxsIHZhbGlkLCBpdCBpcyBhbiBlcnJvci5cbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5FcnJvcjtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5wYXVzZSgpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnNyY09iamVjdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2hhbmRsZVN0cmVhbUZhaWx1cmUoKVxuICAgICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgJ1slc10gRmFpbGVkIGhhbmRsaW5nIHN0cmVhbSBmYWlsdXJlIGFmdGVyIHBlZXIgY29ubmVjdGlvbiBzdG9wcGVkIHdpdGggc3RhdGUgWyVzXScsXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgIGVcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIHN3aXRjaCAocGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnY2hlY2tpbmcnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2NvbXBsZXRlZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnY29ubmVjdGVkJzpcbiAgICAgICAgICAgICAgICBjYXNlICduZXcnOlxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnZGlzY29ubmVjdGVkJzpcbiAgICAgICAgICAgICAgICBjYXNlICdmYWlsZWQnOlxuICAgICAgICAgICAgICAgICAgaWYgKG5hdmlnYXRvci5vbkxpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gSUNFIGNvbm5lY3Rpb24gc3RhdGUgY2hhbmdlZCB0byBbJXNdLCB0cnlpbmcgdG8gcmVjb25uZWN0JywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVjb25uZWN0UGVlckNvbm5lY3Rpb24ocGVlckNvbm5lY3Rpb24sIHJldHJ5Q2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgY2FzZSAnY2xvc2VkJzpcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIElDRSBjb25uZWN0aW9uIHN0YXRlIGNoYW5nZWQgdG8gWyVzXSwgcmV0cnlpbmcgdG8gY29ubmVjdCcsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUpO1xuXG4gICAgICAgICAgICAgICAgICByZXRyeUNhbGxiYWNrKCk7XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUocGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgbWVkaWFTdHJlYW1Qcm9taXNlID0gbmV3IFByb21pc2U8TWVkaWFTdHJlYW0+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFGZWF0dXJlRW5hYmxlbWVudC5vblRyYWNrRGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoJ1N0cmVhbSBzZXR1cCB0aW1lZCBvdXQnKSksIGRlZmF1bHRTdHJlYW1TZXR1cFRpbWVvdXQpO1xuXG4gICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ub250cmFjayA9IChlKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgICBsZXQgc3RyZWFtID0gZS5zdHJlYW1zWzBdO1xuXG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICBzdHJlYW0gPSBJbnNlcnRhYmxlU3RyZWFtcy5zZXR1cE1lZGlhU3RyZWFtVHJhY2tUcmFuc2Zvcm0odGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaywgc3RyZWFtKTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKHN0cmVhbSk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IHRyYWNrTGlzdGVuZXIgPSAoZSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKCd0cmFjaycsIHRyYWNrTGlzdGVuZXIpO1xuICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2FkZHN0cmVhbScsIHRyYWNrTGlzdGVuZXIpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGUuc3RyZWFtcykge1xuICAgICAgICAgICAgICAgICAgcmVzb2x2ZShlLnN0cmVhbXNbMF0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKGUuc3RyZWFtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigndHJhY2snLCB0cmFja0xpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKCdhZGRzdHJlYW0nLCB0cmFja0xpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdTdHJlYW0gc2V0dXAgdGltZWQgb3V0JykpO1xuICAgICAgICAgICAgICB9LCBkZWZhdWx0U3RyZWFtU2V0dXBUaW1lb3V0KTtcblxuICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5hZGRFdmVudExpc3RlbmVyKCd0cmFjaycsIHRyYWNrTGlzdGVuZXIpO1xuICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5hZGRFdmVudExpc3RlbmVyKCdhZGRzdHJlYW0nLCB0cmFja0xpc3RlbmVyKTtcblxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gU2V0IGxvY2FsIFNEUCBvZmZlciBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcCk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24oc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pXG4gICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHNldCBsb2NhbCBkZXNjcmlwdGlvbiBbJWpdIHdpdGggbWVzc2FnZSBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLCBlLm1lc3NhZ2UpO1xuXG4gICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFNldCByZW1vdGUgU0RQIGFuc3dlciBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcCk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldFJlbW90ZURlc2NyaXB0aW9uKGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKVxuICAgICAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uIFslal0gd2l0aCBtZXNzYWdlIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24sIGUubWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBTZXQgcmVtb3RlIFNEUCBvZmZlciBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24uc2RwKTtcblxuICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0UmVtb3RlRGVzY3JpcHRpb24oY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbilcbiAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gc2V0IHJlbW90ZSBkZXNjcmlwdGlvbiBbJWpdIHdpdGggbWVzc2FnZSBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24sIGUubWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uY3JlYXRlQW5zd2VyKHtcbiAgICAgICAgICAgICAgICAgICAgb2ZmZXJUb1JlY2VpdmVBdWRpbzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgb2ZmZXJUb1JlY2VpdmVWaWRlbzogdHJ1ZVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSkudGhlbihhbnN3ZXIgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gU2V0IGxvY2FsIFNEUCBhbnN3ZXIgWyVqXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBhbnN3ZXIpO1xuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUuc2V0UmVtb3RlRGVzY3JpcHRpb24oc3RyZWFtLCBhbnN3ZXIpO1xuICAgICAgICAgICAgICAgIH0pLnRoZW4oKHtzdGF0dXMsIHNlc3Npb25EZXNjcmlwdGlvbn0pID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gdGhpcy5tYXBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1c1RvQ2hhbm5lbFN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhbmRieS52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0b3BwZWQudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKHNlc3Npb25EZXNjcmlwdGlvbilcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBzZXQgbG9jYWwgZGVzY3JpcHRpb24gWyVqXSB3aXRoIG1lc3NhZ2UgWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBzZXNzaW9uRGVzY3JpcHRpb24sIGUubWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBsaXN0ZW5PblN0cmVhbVNldHVwLnN1Y2Nlc3ModGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQpO1xuXG4gICAgICAgICAgICAgIHJldHVybiBtZWRpYVN0cmVhbVByb21pc2U7XG4gICAgICAgICAgICB9KS50aGVuKG1lZGlhU3RyZWFtID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlID0gbWVkaWFTdHJlYW07XG5cbiAgICAgICAgICAgICAgY29uc3QgcnRjQ29ubmVjdGlvbk1vbml0b3IgPSBuZXcgUnRjQ29ubmVjdGlvbk1vbml0b3IocGVlckNvbm5lY3Rpb24sIG1lZGlhU3RyZWFtLCB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5yb3VuZFRyaXBUaW1lIC8gNCk7XG5cbiAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZGlzcG9zYWJsZXMuYWRkKHJ0Y0Nvbm5lY3Rpb25Nb25pdG9yKTtcblxuICAgICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gcnRjQ29ubmVjdGlvbk1vbml0b3IucnRjU3RhdGlzdGljLnN1YnNjcmliZShzdGF0aXN0aWNzID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNTdGF0aXN0aWNzLnZhbHVlID0gc3RhdGlzdGljcztcblxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMgJiYgIXRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYyA9IHN0YXRpc3RpY3MuYXVkaW87XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyA9IHN0YXRpc3RpY3MudmlkZW87XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsZXQgYXVkaW9UcmFja0ZhaWxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGxldCB2aWRlb1RyYWNrRmFpbGVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICBpZiAoc3RhdGlzdGljcy5hdWRpbykge1xuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljLnRpbWVzdGFtcCAhPT0gc3RhdGlzdGljcy5hdWRpby50aW1lc3RhbXApIHtcbiAgICAgICAgICAgICAgICAgICAgYXVkaW9UcmFja0ZhaWxlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljLmJ5dGVzUmVjZWl2ZWQgPT09IHN0YXRpc3RpY3MuYXVkaW8uYnl0ZXNSZWNlaXZlZDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoYXVkaW9UcmFja0ZhaWxlZCAmJiBuYXZpZ2F0b3Iub25MaW5lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBBdWRpbyB0cmFjayBmYWlsZWQgd2l0aCBsYXN0IGJ5dGVzUmVjZWl2ZWQgWyVzXSBpcyBlcXVhbCB0byBwcmV2aW91cyBieXRlc1JlY2VpdmVkIFslc10gd2l0aGluIFslc10nLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0aXN0aWNzLmF1ZGlvLmJ5dGVzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYy5ieXRlc1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IER1cmF0aW9ucyhzdGF0aXN0aWNzLmF1ZGlvLnRpbWVzdGFtcCAtIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljLnRpbWVzdGFtcCkudG9Jc29TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYyA9IHN0YXRpc3RpY3MuYXVkaW87XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHN0YXRpc3RpY3MudmlkZW8pIHtcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYy50aW1lc3RhbXAgIT09IHN0YXRpc3RpY3MudmlkZW8udGltZXN0YW1wKSB7XG4gICAgICAgICAgICAgICAgICAgIHZpZGVvVHJhY2tGYWlsZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYy5ieXRlc1JlY2VpdmVkID09PSBzdGF0aXN0aWNzLnZpZGVvLmJ5dGVzUmVjZWl2ZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHZpZGVvVHJhY2tGYWlsZWQgJiYgbmF2aWdhdG9yLm9uTGluZSkge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1slc10gVmlkZW8gdHJhY2sgZmFpbGVkIHdpdGggbGFzdCBieXRlc1JlY2VpdmVkIFslc10gaXMgZXF1YWwgdG8gcHJldmlvdXMgYnl0ZXNSZWNlaXZlZCBbJXNdIHdpdGhpbiBbJXNdJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGlzdGljcy52aWRlby5ieXRlc1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMuYnl0ZXNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBEdXJhdGlvbnMoc3RhdGlzdGljcy52aWRlby50aW1lc3RhbXAgLSB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYy50aW1lc3RhbXApLnRvSXNvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMgPSBzdGF0aXN0aWNzLnZpZGVvO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICgodmlkZW9UcmFja0ZhaWxlZCB8fCBhdWRpb1RyYWNrRmFpbGVkKSAmJiBuYXZpZ2F0b3Iub25MaW5lKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCByZXRyeUNhbGxiYWNrID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5FcnJvcjtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnNyY09iamVjdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgIHJ0Y0Nvbm5lY3Rpb25Nb25pdG9yLmRpc3Bvc2UoKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSgpXG4gICAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBGYWlsZWQgaGFuZGxpbmcgc3RyZWFtIGZhaWx1cmUgYWZ0ZXIgdHJhY2sgc3RvcHBlZCB3aXRoIHN0YXRlIFslc10nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBlXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgdGhpcy5yZWNvbm5lY3RQZWVyQ29ubmVjdGlvbihwZWVyQ29ubmVjdGlvbiwgcmV0cnlDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIGlmICghU0RLLmF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBhdXNlZDtcblxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiBwbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudChtZWRpYVN0cmVhbSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBhcHBseVJ0Y0NvbmZpZ3VyYXRpb24oXG4gICAgb3B0aW9uYWxQZWVyQ29ubmVjdGlvbjogSVBlZXJDb25uZWN0aW9uIHwgbnVsbCxcbiAgICBydGNDb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uKTogUHJvbWlzZTxJUGVlckNvbm5lY3Rpb24+IHtcbiAgICBpZiAoIW9wdGlvbmFsUGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24gPSBSdGNDb25maWd1cmF0aW9uTWFuYWdlci50cnVuY2F0ZUljZVNlcnZlcnMocnRjQ29uZmlndXJhdGlvbik7XG5cbiAgICAgIHJldHVybiBTREsucGVlckNvbm5lY3Rpb25GYWN0b3J5LnZhbHVlLmNyZWF0ZVBlZXJDb25uZWN0aW9uKHJ0Y0NvbmZpZ3VyYXRpb24pO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld1J0Y0NvbmZpZ3VyYXRpb24gPSB7XG4gICAgICAuLi5vcHRpb25hbFBlZXJDb25uZWN0aW9uLmdldENvbmZpZ3VyYXRpb24oKSxcbiAgICAgIC4uLnJ0Y0NvbmZpZ3VyYXRpb25cbiAgICB9O1xuXG4gICAgb3B0aW9uYWxQZWVyQ29ubmVjdGlvbi5zZXRDb25maWd1cmF0aW9uKG5ld1J0Y0NvbmZpZ3VyYXRpb24pO1xuXG4gICAgcmV0dXJuIG9wdGlvbmFsUGVlckNvbm5lY3Rpb247XG4gIH1cblxuICBwcml2YXRlIHJlY29ubmVjdFBlZXJDb25uZWN0aW9uKHBlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb24sIHJldHJ5Q2FsbGJhY2s6ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBpZiAocGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlID09PSAnY2xvc2VkJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlJlY29ubmVjdGluZztcblxuICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA8IFNESy5tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzIHx8ICFTREsuYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uKSB7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cysrO1xuXG4gICAgICBjb25zdCBpc0NsaWVudE9mZmVyRmxvdyA9IHBlZXJDb25uZWN0aW9uLmN1cnJlbnRMb2NhbERlc2NyaXB0aW9uPy50eXBlID09PSAnb2ZmZXInO1xuXG4gICAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuY2xpZW50T2ZmZXJEaXNhYmxlZCB8fFxuICAgICAgICAhcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNTZXRDb25maWd1cmF0aW9uIHx8XG4gICAgICAgICFwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c0dldENvbmZpZ3VyYXRpb24gfHxcbiAgICAgICAgIWlzQ2xpZW50T2ZmZXJGbG93XG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnUmVjb25uZWN0aW5nIHBlZXIgY29ubmVjdGlvbiBieSByZXN0YXJ0aW5nIElDRScpO1xuXG4gICAgICBjb25zdCBjdXJyZW50TG9jYWxEZXNjcmlwdGlvbiA9IHBlZXJDb25uZWN0aW9uLmN1cnJlbnRMb2NhbERlc2NyaXB0aW9uO1xuICAgICAgY29uc3QgaWdub3JlZCA9IHBlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKHtpY2VSZXN0YXJ0OiB0cnVlfSkudGhlbihvZmZlciA9PiB7XG4gICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKG9mZmVyKS50aGVuKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0TG9jYWxEZXNjcmlwdGlvbihjdXJyZW50TG9jYWxEZXNjcmlwdGlvbik7XG4gICAgICAgIH0pO1xuICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHJlY29ubmVjdCBwZWVyIGNvbm5lY3Rpb24nLCBlKTtcbiAgICAgICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG4gICAgICAgICAgcmV0cnlDYWxsYmFjaygpO1xuICAgICAgICB9KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdGYWlsZWQgdG8gcmVjb25uZWN0IHBlZXIgY29ubmVjdGlvbiBhZnRlciBbJXNdIGF0dGVtcHRzLCBwZXJmb3JtaW5nIGZ1bGwgcmVjb3ZlcnknLCB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyk7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICAgIHJldHJ5Q2FsbGJhY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXNUb0NoYW5uZWxTdGF0dXMoc3RhdHVzOiBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyk6IENoYW5uZWxTdGF0ZSB7XG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgIGNhc2UgJ29rJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5TdGFydGluZztcbiAgICAgIGNhc2UgJ3VuYXV0aG9yaXplZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkO1xuICAgICAgY2FzZSAnbm90LWZvdW5kJzpcbiAgICAgIGNhc2UgJ2NhcGFjaXR5JzpcbiAgICAgIGNhc2UgJ3JhdGUtbGltaXRlZCc6XG4gICAgICBjYXNlICd0aW1lb3V0JzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nO1xuICAgICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5FcnJvcjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHN0YXR1cyk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lTdHJlYW19IGZyb20gJy4vSVN0cmVhbSc7XG5pbXBvcnQgRWRnZUF1dGhQYXJzZXIgZnJvbSAnLi4vLi4vZWRnZUF1dGgvRWRnZUF1dGhQYXJzZXInO1xuaW1wb3J0IFJlYWxUaW1lU3RyZWFtIGZyb20gJy4vUmVhbFRpbWVTdHJlYW0nO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBDaGFubmVsU3RhdGUgZnJvbSAnLi4vY2hhbm5lbHMvQ2hhbm5lbFN0YXRlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVhbFRpbWVTdHJlYW1GYWN0b3J5IHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdTdHJlYW1pbmcnKTtcblxuICBzdGF0aWMgY3JlYXRlKHRva2VuOiBzdHJpbmcsIGNoYW5uZWxDb250ZXh0LCBwZWVyQ29ubmVjdGlvbkNvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmU6ICgpID0+IFByb21pc2U8dm9pZD4pOiBJU3RyZWFtIHtcbiAgICBjb25zdCB0b2tlbkNhcGFiaWxpdGllcyA9IEVkZ2VBdXRoUGFyc2VyLnBhcnNlVG9rZW4odG9rZW4pLmNhcGFiaWxpdGllcztcblxuICAgIGlmICh0b2tlbkNhcGFiaWxpdGllcy5pbmNsdWRlcygncnRtcCcpKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ1NESyBkb2VzIG5vdCBzdXBwb3J0IFJUTVAgcGxheWJhY2suJyk7XG4gICAgICBjaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5VbnN1cHBvcnRlZEZlYXR1cmU7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodG9rZW5DYXBhYmlsaXRpZXMuaW5jbHVkZXMoJ3N0cmVhbWluZycpKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ1RoaXMgYnVpbGQgZG9lcyBub3Qgc3VwcG9ydCBMaXZlIFN0cmVhbSBwbGF5YmFjay4nKTtcbiAgICAgIGNoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlVuc3VwcG9ydGVkRmVhdHVyZTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUmVhbFRpbWVTdHJlYW0oY2hhbm5lbENvbnRleHQsIHBlZXJDb25uZWN0aW9uQ29udGV4dCwgaGFuZGxlU3RyZWFtRmFpbHVyZSk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlYWxUaW1lU3RyZWFtRmFjdG9yeSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmRlY2xhcmUgY29uc3QgX19CVUlMRF9WRVJTSU9OX186IHN0cmluZztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVyc2lvbk1hbmFnZXIge1xuICBwcml2YXRlIHN0YXRpYyBfZGVmYXVsdFZlcnNpb24gPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG5cbiAgc3RhdGljIGdldCBzZGtWZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBfX0JVSUxEX1ZFUlNJT05fXztcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdFZlcnNpb247XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgVGVsZW1ldHJ5U2VydmljZSBmcm9tICcuL1RlbGVtZXRyeVNlcnZpY2UnO1xuaW1wb3J0IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24gZnJvbSAnLi9UZWxlbWV0cnlDb25maWd1cmF0aW9uJztcbmltcG9ydCB7SUFwcGVuZGVyfSBmcm9tICcuLi9sb2dnZXIvSUFwcGVuZGVyJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVsZW1ldHJ5QXBwZW5kZXIgaW1wbGVtZW50cyBJQXBwZW5kZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF90ZWxlbWV0cnlTZXJ2aWNlOiBUZWxlbWV0cnlTZXJ2aWNlO1xuICBwcml2YXRlIHJlYWRvbmx5IF90ZW5hbmN5OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Nlc3Npb25JZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF90aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbDtcblxuICBjb25zdHJ1Y3Rvcih0ZWxlbWV0cnlDb25maWd1cmF0aW9uOiBUZWxlbWV0cnlDb25maWd1cmF0aW9uKSB7XG4gICAgdGhpcy5fdGVuYW5jeSA9IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24udGVuYW5jeTtcbiAgICB0aGlzLl9zZXNzaW9uSWQgPSB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnNlc3Npb25JZDtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRocmVzaG9sZDtcbiAgICB0aGlzLl90ZWxlbWV0cnlTZXJ2aWNlID0gbmV3IFRlbGVtZXRyeVNlcnZpY2UodGVsZW1ldHJ5Q29uZmlndXJhdGlvbik7XG4gIH1cblxuICBsb2cobG9nTGV2ZWw6IExvZ2dpbmdMZXZlbCwgbWVzc2FnZTogc3RyaW5nLCBjYXRlZ29yeTogc3RyaW5nLCBkYXRlOiBEYXRlKTogdm9pZCB7XG4gICAgaWYgKGxvZ0xldmVsIDwgdGhpcy5fdGhyZXNob2xkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fdGVsZW1ldHJ5U2VydmljZS5wdXNoKGxvZ0xldmVsLCBtZXNzYWdlLCBjYXRlZ29yeSwgZGF0ZSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyJztcbmltcG9ydCBMb2dnZXJEZWZhdWx0cyBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRGVmYXVsdHMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlDb25maWd1cmF0aW9uIHtcbiAgcHJpdmF0ZSBfdXJsID0gJ2h0dHBzOi8vdGVsZW1ldHJ5LnBoZW5peHJ0cy5jb20vdGVsZW1ldHJ5L2xvZ3MnO1xuICBwcml2YXRlIF90ZW5hbmN5OiBzdHJpbmc7XG4gIHByaXZhdGUgX3Nlc3Npb25JZDogc3RyaW5nO1xuICBwcml2YXRlIF9lbnZpcm9ubWVudDogc3RyaW5nO1xuICBwcml2YXRlIF90aHJlc2hvbGQgPSBMb2dnZXJEZWZhdWx0cy5kZWZhdWx0VGVsZW1ldHJ5TG9nZ2luZ0xldmVsO1xuXG4gIGdldCB1cmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdXJsO1xuICB9XG5cbiAgc2V0IHVybCh1cmw6IHN0cmluZykge1xuICAgIGNvbnN0IHRlbGVtZXRyeVVybCA9IG5ldyBVUkwodXJsKTtcblxuICAgIHRlbGVtZXRyeVVybC5wYXRobmFtZSA9IHRlbGVtZXRyeVVybC5wYXRobmFtZSArICcvbG9ncyc7XG5cbiAgICB0aGlzLl91cmwgPSB0ZWxlbWV0cnlVcmwudG9TdHJpbmcoKTtcbiAgfVxuXG4gIGdldCBlbnZpcm9ubWVudCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9lbnZpcm9ubWVudDtcbiAgfVxuXG4gIHNldCBlbnZpcm9ubWVudChlbnZpcm9ubWVudDogc3RyaW5nKSB7XG4gICAgdGhpcy5fZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudDtcbiAgfVxuXG4gIGdldCB0ZW5hbmN5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3RlbmFuY3k7XG4gIH1cblxuICBzZXQgdGVuYW5jeSh0ZW5hbmN5OiBzdHJpbmcpIHtcbiAgICB0aGlzLl90ZW5hbmN5ID0gdGVuYW5jeTtcbiAgfVxuXG4gIGdldCBzZXNzaW9uSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc2Vzc2lvbklkO1xuICB9XG5cbiAgc2V0IHNlc3Npb25JZChzZXNzaW9uSWQ6IHN0cmluZykge1xuICAgIHRoaXMuX3Nlc3Npb25JZCA9IHNlc3Npb25JZDtcbiAgfVxuXG4gIGdldCB0aHJlc2hvbGQoKTogTG9nZ2luZ0xldmVsIHtcbiAgICByZXR1cm4gdGhpcy5fdGhyZXNob2xkO1xuICB9XG5cbiAgc2V0IHRocmVzaG9sZCh0aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbCkge1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRocmVzaG9sZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuaW1wb3J0IFZlcnNpb25NYW5hZ2VyIGZyb20gJy4uL3Nkay92ZXJzaW9uL1ZlcnNpb25NYW5hZ2VyJztcbmltcG9ydCBUZWxlbWV0cnlDb25maWd1cmF0aW9uIGZyb20gJy4vVGVsZW1ldHJ5Q29uZmlndXJhdGlvbic7XG5cbmNvbnN0IHJlcXVlc3RTaXplTGltaXQgPSA4MTkyO1xuXG5pbnRlcmZhY2UgSUxvZ0l0ZW0ge1xuICB0aW1lc3RhbXA6IHN0cmluZztcbiAgdGVuYW5jeTogc3RyaW5nO1xuICBsZXZlbDogc3RyaW5nO1xuICBjYXRlZ29yeTogc3RyaW5nO1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICB2ZXJzaW9uOiBzdHJpbmc7XG4gIGVudmlyb25tZW50OiBzdHJpbmc7XG4gIGZ1bGxRdWFsaWZpZWROYW1lOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeVNlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IF90ZWxlbWV0cnlDb25maWd1cmF0aW9uOiBUZWxlbWV0cnlDb25maWd1cmF0aW9uO1xuXG4gIHByaXZhdGUgX2xvZ3M6IEFycmF5PElMb2dJdGVtPiA9IFtdO1xuICBwcml2YXRlIF9pc1NlbmRpbmc6IGJvb2xlYW47XG4gIHByaXZhdGUgX2RvbWFpbiA9IGxvY2F0aW9uLmhvc3RuYW1lO1xuXG4gIGNvbnN0cnVjdG9yKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb246IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pIHtcbiAgICB0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uID0gdGVsZW1ldHJ5Q29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIHB1c2gobG9nTGV2ZWw6IExvZ2dpbmdMZXZlbCwgbWVzc2FnZTogc3RyaW5nLCBjYXRlZ29yeTogc3RyaW5nLCB0aW1lc3RhbXA6IERhdGUpOiB2b2lkIHtcbiAgICBjb25zdCBsb2dSZWNvcmQgPSB7XG4gICAgICB0aW1lc3RhbXA6IHRpbWVzdGFtcC50b0lTT1N0cmluZygpLFxuICAgICAgdGVuYW5jeTogdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50ZW5hbmN5LFxuICAgICAgbGV2ZWw6IExvZ2dpbmdMZXZlbFtsb2dMZXZlbF0sXG4gICAgICBjYXRlZ29yeSxcbiAgICAgIG1lc3NhZ2UsXG4gICAgICBzZXNzaW9uSWQ6IHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24uc2Vzc2lvbklkLFxuICAgICAgdmVyc2lvbjogVmVyc2lvbk1hbmFnZXIuc2RrVmVyc2lvbixcbiAgICAgIGVudmlyb25tZW50OiB0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uLmVudmlyb25tZW50LFxuICAgICAgZnVsbFF1YWxpZmllZE5hbWU6IHRoaXMuX2RvbWFpblxuICAgIH07XG5cbiAgICBpZiAobG9nTGV2ZWwgPCBMb2dnaW5nTGV2ZWwuRXJyb3IpIHtcbiAgICAgIHRoaXMuX2xvZ3MucHVzaChsb2dSZWNvcmQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9sb2dzLnVuc2hpZnQobG9nUmVjb3JkKTtcbiAgICB9XG5cbiAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTG9nc0lmQWJsZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZW5kTG9ncyhsb2dNZXNzYWdlczogQXJyYXk8SUxvZ0l0ZW0+KTogUHJvbWlzZTxSZXNwb25zZSB8IHZvaWQ+IHtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KHtyZWNvcmRzOiBsb2dNZXNzYWdlc30pKTtcblxuICAgIHJldHVybiBhd2FpdCBmZXRjaCh0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uLnVybCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBmb3JtRGF0YVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZW5kTG9nc0lmQWJsZSgpOiBQcm9taXNlPFJlc3BvbnNlIHwgdm9pZD4ge1xuICAgIGlmICh0aGlzLl9sb2dzLmxlbmd0aCA8PSAwIHx8IHRoaXMuX2lzU2VuZGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBudW1iZXJPZkxvZ3NUb1NlbmQgPSAwO1xuICAgIGxldCBzaXplT2ZMb2dzVG9TZW5kID0gMDtcblxuICAgIHRoaXMuX2lzU2VuZGluZyA9IHRydWU7XG5cbiAgICBjb25zdCBnZXRMb2dTaXplID0gKGxvZzogSUxvZ0l0ZW0pOiBudW1iZXIgPT4gT2JqZWN0LnZhbHVlcyhsb2cpXG4gICAgICAucmVkdWNlKChzdW0sIGl0ZW0pID0+IHN1bSArIChpdGVtID8gaXRlbS5sZW5ndGggOiAwKSwgMCk7XG5cbiAgICB3aGlsZSAodGhpcy5fbG9ncy5sZW5ndGggPiBudW1iZXJPZkxvZ3NUb1NlbmQgJiYgZ2V0TG9nU2l6ZSh0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0pICsgc2l6ZU9mTG9nc1RvU2VuZCA8IHJlcXVlc3RTaXplTGltaXQpIHtcbiAgICAgIHNpemVPZkxvZ3NUb1NlbmQgKz0gZ2V0TG9nU2l6ZSh0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0pO1xuICAgICAgbnVtYmVyT2ZMb2dzVG9TZW5kKys7XG4gICAgfVxuXG4gICAgaWYgKCFudW1iZXJPZkxvZ3NUb1NlbmQpIHtcbiAgICAgIHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXS5tZXNzYWdlID0gdGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdLm1lc3NhZ2Uuc3Vic3RyaW5nKDAsXG4gICAgICAgIGdldExvZ1NpemUodGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdKSArIChyZXF1ZXN0U2l6ZUxpbWl0IC0gZ2V0TG9nU2l6ZSh0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0pKSk7XG4gICAgICBudW1iZXJPZkxvZ3NUb1NlbmQgPSAxO1xuICAgIH1cblxuICAgIGNvbnN0IGxvZ01lc3NhZ2VzID0gdGhpcy5fbG9ncy5zbGljZSgwLCBudW1iZXJPZkxvZ3NUb1NlbmQpO1xuXG4gICAgdGhpcy5fbG9ncyA9IHRoaXMuX2xvZ3Muc2xpY2UobnVtYmVyT2ZMb2dzVG9TZW5kKTtcblxuICAgIHJldHVybiB0aGlzLnNlbmRMb2dzKGxvZ01lc3NhZ2VzKS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgIHRoaXMuX2lzU2VuZGluZyA9IGZhbHNlO1xuXG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTG9nc0lmQWJsZSgpO1xuXG4gICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgdGhpcy5faXNTZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRMb2dzSWZBYmxlKCk7XG4gICAgfSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRHVyYXRpb25zIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZHVyYXRpb246IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihkdXJhdGlvbiA9IDApIHtcbiAgICB0aGlzLl9kdXJhdGlvbiA9IGR1cmF0aW9uO1xuICB9XG5cbiAgdG9Jc29TdHJpbmcoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5fZHVyYXRpb24gPT09IDApIHtcbiAgICAgIHJldHVybiAnUDBTJztcbiAgICB9XG5cbiAgICBjb25zdCBpc05lZ2F0aXZlID0gdGhpcy5fZHVyYXRpb24gPCAwO1xuICAgIGNvbnN0IGR1cmF0aW9uID0gaXNOZWdhdGl2ZSA/IE1hdGguYWJzKHRoaXMuX2R1cmF0aW9uKSA6IHRoaXMuX2R1cmF0aW9uO1xuICAgIGxldCBvZmZzZXQgPSBNYXRoLmZsb29yKGR1cmF0aW9uKTtcbiAgICBjb25zdCBtaWxsaXNlY29uZHMgPSBvZmZzZXQgJSAxMDAwO1xuXG4gICAgb2Zmc2V0ID0gTWF0aC5mbG9vcihvZmZzZXQgLyAxMDAwKTtcblxuICAgIGNvbnN0IHNlY29uZHMgPSBvZmZzZXQgJSA2MDtcblxuICAgIG9mZnNldCA9IE1hdGguZmxvb3Iob2Zmc2V0IC8gNjApO1xuXG4gICAgY29uc3QgbWludXRlcyA9IG9mZnNldCAlIDYwO1xuXG4gICAgb2Zmc2V0ID0gTWF0aC5mbG9vcihvZmZzZXQgLyA2MCk7XG5cbiAgICBjb25zdCBob3VycyA9IG9mZnNldCAlIDI0O1xuICAgIGNvbnN0IHBhcnRzID0gWydQVCddO1xuXG4gICAgaWYgKGlzTmVnYXRpdmUpIHtcbiAgICAgIHBhcnRzLnVuc2hpZnQoJy0nKTtcbiAgICB9XG5cbiAgICBpZiAoaG91cnMpIHtcbiAgICAgIHBhcnRzLnB1c2goaG91cnMgKyAnSCcpO1xuICAgIH1cblxuICAgIGlmIChtaW51dGVzKSB7XG4gICAgICBwYXJ0cy5wdXNoKG1pbnV0ZXMgKyAnTScpO1xuICAgIH1cblxuICAgIGlmIChzZWNvbmRzIHx8IG1pbGxpc2Vjb25kcykge1xuICAgICAgcGFydHMucHVzaChTdHJpbmcoc2Vjb25kcykpO1xuXG4gICAgICBpZiAobWlsbGlzZWNvbmRzKSB7XG4gICAgICAgIHBhcnRzLnB1c2goJy4nICsgdGhpcy5wYWRTdGFydChtaWxsaXNlY29uZHMudG9TdHJpbmcoKSwgMywgJzAnKSk7XG4gICAgICB9XG5cbiAgICAgIHBhcnRzLnB1c2goJ1MnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFydHMuam9pbignJyk7XG4gIH1cblxuICBwYWRTdGFydChpdGVtOiBzdHJpbmcsIHRhcmdldExlbmd0aDogbnVtYmVyLCBwYWRTdHJpbmc6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdGFyZ2V0TGVuZ3RoID0gdGFyZ2V0TGVuZ3RoID4+IDA7XG4gICAgcGFkU3RyaW5nID0gU3RyaW5nKCh0eXBlb2YgcGFkU3RyaW5nICE9PSAndW5kZWZpbmVkJyA/IHBhZFN0cmluZyA6ICcgJykpO1xuXG4gICAgaWYgKGl0ZW0ubGVuZ3RoID4gdGFyZ2V0TGVuZ3RoKSB7XG4gICAgICByZXR1cm4gaXRlbTtcbiAgICB9XG5cbiAgICB0YXJnZXRMZW5ndGggPSB0YXJnZXRMZW5ndGggLSBpdGVtLmxlbmd0aDtcblxuICAgIGlmICh0YXJnZXRMZW5ndGggPiBwYWRTdHJpbmcubGVuZ3RoKSB7XG4gICAgICBwYWRTdHJpbmcgKz0gcGFkU3RyaW5nLnJlcGVhdCh0YXJnZXRMZW5ndGggLyBwYWRTdHJpbmcubGVuZ3RoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFkU3RyaW5nLnNsaWNlKDAsIHRhcmdldExlbmd0aCkgKyBpdGVtO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmNvbnN0IGRlZmF1bHRCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kID0gMjAwMDtcbmNvbnN0IGRlZmF1bHRNaW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kID0gMTtcbmNvbnN0IGRlZmF1bHRNYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kID0gMzAwMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFeHBvbmVudGlhbEJhY2tvZmYge1xuICBwcml2YXRlIHJlYWRvbmx5IF9iYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ6IG51bWJlciA9IGRlZmF1bHRCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kLFxuICAgIG1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ6IG51bWJlciA9IGRlZmF1bHRNaW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kLFxuICAgIG1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ6IG51bWJlciA9IGRlZmF1bHRNYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kXG4gICkge1xuICAgIHRoaXMuX2JhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgPSBiYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kO1xuICAgIHRoaXMuX21pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgPSBtaW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kO1xuICAgIHRoaXMuX21heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgPSBtYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kO1xuICB9XG5cbiAgZ2V0RXhwb25lbnRpYWxCYWNrb2ZmSW50ZXJ2YWxCeUZhaWx1cmVDb3VudChmYWlsdXJlQ291bnQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgYmFja29mZkludGVydmFsSW5TZWNvbmRzID0gdGhpcy5fYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCAvIDEwMDA7XG4gICAgY29uc3QgcmFuZG9taXphdGlvbiA9IDAuNSArICgwLjUgKiBNYXRoLnJhbmRvbSgpKTsgLy8gWzAuNSwgMSlcbiAgICBjb25zdCBleHBvbmVudGlhbEJhY2tvZmYgPSBNYXRoLnBvdyhiYWNrb2ZmSW50ZXJ2YWxJblNlY29uZHMsIGZhaWx1cmVDb3VudCAtIDIpOyAvLyAgWzEvNCAxLzIgMSAyIDQgOCAuLi4uXVxuICAgIGNvbnN0IGV4cG9uZW50aWFsQmFja29mZldpdGhSYW5kb21pemF0aW9uID0gTWF0aC5mbG9vcihleHBvbmVudGlhbEJhY2tvZmYpICogcmFuZG9taXphdGlvbjtcbiAgICBjb25zdCBleHBvbmVudGlhbEJhY2tvZmZXaXRoUmFuZG9taXphdGlvbkluTWlsbGlzZWNvbmQgPSBNYXRoLmNlaWwoTWF0aC5tYXgoZXhwb25lbnRpYWxCYWNrb2ZmV2l0aFJhbmRvbWl6YXRpb24gKiAxMDAwLCB0aGlzLl9taW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kKSk7XG5cbiAgICByZXR1cm4gTWF0aC5taW4oZXhwb25lbnRpYWxCYWNrb2ZmV2l0aFJhbmRvbWl6YXRpb25Jbk1pbGxpc2Vjb25kLCB0aGlzLl9tYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IElDb21wYXJhYmxlIGZyb20gJy4uL2xhbmcvSUNvbXBhcmFibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaW1lbnNpb24gaW1wbGVtZW50cyBJQ29tcGFyYWJsZTxEaW1lbnNpb24+IHtcbiAgcmVhZG9ubHkgd2lkdGg6IG51bWJlcjtcbiAgcmVhZG9ubHkgaGVpZ2h0OiBudW1iZXI7XG5cbiAgc3RhdGljIGdldCBlbXB0eSgpOiBEaW1lbnNpb24ge1xuICAgIHJldHVybiBuZXcgRGltZW5zaW9uKDAsIDApO1xuICB9XG5cbiAgY29uc3RydWN0b3Iod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgICB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG4gIH1cblxuICBlcXVhbHMob3RoZXI6IERpbWVuc2lvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBvdGhlciAmJiB0aGlzLndpZHRoID09PSBvdGhlci53aWR0aCAmJiB0aGlzLmhlaWdodCA9PT0gb3RoZXIuaGVpZ2h0O1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy53aWR0aH14JHt0aGlzLmhlaWdodH1gO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge1N0cmVhbVNldHVwTGlzdGVuZXJ9IGZyb20gJy4uL2RvbS9TdHJlYW1TZXR1cExpc3RlbmVyJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgTmV0d29ya01vbml0b3IgZnJvbSAnLi4vZG9tL05ldHdvcmtNb25pdG9yJztcbmltcG9ydCBTREsgZnJvbSAnLi4vc2RrL1NESyc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzVHlwZSc7XG5pbXBvcnQgRHVyYXRpb25zIGZyb20gJy4uL3RpbWUvRHVyYXRpb24nO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1NlcnZpY2UnO1xuXG5pbnRlcmZhY2UgSU5ldHdvcmtTdGF0aXN0aWNzIHtcbiAgcnR0PzogbnVtYmVyO1xuICBlZmZlY3RpdmVUeXBlPzogc3RyaW5nO1xuICBkb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eT86IG51bWJlcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2Vzc2lvblRlbGVtZXRyeSBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1Nlc3Npb25UZWxlbWV0cnknKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciA9IFNESy5hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbmV0d29ya01vbml0b3I6IE5ldHdvcmtNb25pdG9yID0gbmV3IE5ldHdvcmtNb25pdG9yKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BhZ2VMb2FkVGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSBfbGFzdE5ldHdvcmtTdGF0aXN0aWNzOiBJTmV0d29ya1N0YXRpc3RpY3MgPSB7fTtcblxuICBjb25zdHJ1Y3RvcihwYWdlTG9hZFRpbWU6IG51bWJlciwgbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlKSB7XG4gICAgdGhpcy5fcGFnZUxvYWRUaW1lID0gcGFnZUxvYWRUaW1lO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9uZXR3b3JrTW9uaXRvcik7XG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UgPSBtZXRyaWNzU2VydmljZTtcblxuICAgIGlmICghdGhpcy5fbmV0d29ya01vbml0b3IuaXNTdXBwb3J0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IuaXNGb3JlZ3JvdW5kLnN1YnNjcmliZShpc0ZvcmVncm91bmQgPT4ge1xuICAgICAgdGhpcy5yZWNvcmRGb3JlZ3JvdW5kQ2hhbmdlKGlzRm9yZWdyb3VuZCk7XG4gICAgfSkpO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9uZXR3b3JrTW9uaXRvci5ydHQuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIHRoaXMucmVjb3JkTmV0d29ya1JUVFVwZGF0ZSh2YWx1ZSk7XG4gICAgfSkpO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9uZXR3b3JrTW9uaXRvci5lZmZlY3RpdmVUeXBlLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICB0aGlzLnJlY29yZE5ldHdvcmtUeXBlQ2hhbmdlVXBkYXRlKHZhbHVlKTtcbiAgICB9KSk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX25ldHdvcmtNb25pdG9yLmRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5LnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICB0aGlzLnJlY29yZE5ldHdvcmtEb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eVVwZGF0ZSh2YWx1ZSk7XG4gICAgfSkpO1xuICB9XG5cbiAgbGlzdGVuT25TdHJlYW1TZXR1cCgpOiBTdHJlYW1TZXR1cExpc3RlbmVyIHtcbiAgICByZXR1cm4gbmV3IFN0cmVhbVNldHVwTGlzdGVuZXIodGhpcy5fcGFnZUxvYWRUaW1lKTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvcmRGb3JlZ3JvdW5kQ2hhbmdlKGlzRm9yZWdyb3VuZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3QgdGltZVNpbmNlTGFzdENoYW5nZSA9IHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yLmdldFRpbWVTaW5jZUxhc3RDaGFuZ2UoKTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogaXNGb3JlZ3JvdW5kID8gTWV0cmljc1R5cGUuQXBwbGljYXRpb25Gb3JlZ3JvdW5kIDogTWV0cmljc1R5cGUuQXBwbGljYXRpb25CYWNrZ3JvdW5kLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IHRpbWVTaW5jZUxhc3RDaGFuZ2V9XG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdBcHBsaWNhdGlvbiBoYXMgZ29uZSBpbnRvIHRoZSBbJXNdIGFmdGVyIFslc10gbXMnLFxuICAgICAgaXNGb3JlZ3JvdW5kID8gJ2ZvcmVncm91bmQnIDogJ2JhY2tncm91bmQnLFxuICAgICAgbmV3IER1cmF0aW9ucyh0aW1lU2luY2VMYXN0Q2hhbmdlKS50b0lzb1N0cmluZygpLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlY29yZE5ldHdvcmtSVFRVcGRhdGUobmV3UlRUOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IG9sZFJ0dCA9IHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5ydHQ7XG5cbiAgICB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MucnR0ID0gbmV3UlRUO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5Sb3VuZFRyaXBUaW1lLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IG5ld1JUVH0sXG4gICAgICBwcmV2aW91c1ZhbHVlOiBvbGRSdHQgPyB7dWludDY0OiBvbGRSdHR9IDogdW5kZWZpbmVkLFxuICAgICAgcmVzb3VyY2U6ICduYXZpZ2F0b3InXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIE5ldHdvcmsgUlRUIGNoYW5nZWQgdG8gWyVzXSBmcm9tIFslc10nLFxuICAgICAgbmV3IER1cmF0aW9ucyhub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpLnRvSXNvU3RyaW5nKCksXG4gICAgICBuZXdSVFQsXG4gICAgICBvbGRSdHRcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvcmROZXR3b3JrVHlwZUNoYW5nZVVwZGF0ZShuZXdOZXR3b3JrVHlwZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBvbGROZXR3b3JrVHlwZSA9IHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5lZmZlY3RpdmVUeXBlO1xuXG4gICAgdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLmVmZmVjdGl2ZVR5cGUgPSBuZXdOZXR3b3JrVHlwZTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuTmV0d29ya1R5cGUsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3N0cmluZzogbmV3TmV0d29ya1R5cGV9LFxuICAgICAgcHJldmlvdXNWYWx1ZTogb2xkTmV0d29ya1R5cGUgPyB7c3RyaW5nOiBvbGROZXR3b3JrVHlwZX0gOiB1bmRlZmluZWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gTmV0d29yayBlZmZlY3RpdmUgdHlwZSBoYXMgY2hhbmdlZCB0byBbJXNdIGZyb20gWyVzXScsXG4gICAgICBuZXcgRHVyYXRpb25zKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkudG9Jc29TdHJpbmcoKSxcbiAgICAgIG5ld05ldHdvcmtUeXBlLFxuICAgICAgb2xkTmV0d29ya1R5cGVcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvcmROZXR3b3JrRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHlVcGRhdGUobmV3Q2FwYWNpdHk6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgb2xkQ2FwYWNpdHkgPSB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MuZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHk7XG5cbiAgICB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MuZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkgPSBuZXdDYXBhY2l0eTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHksXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge2Zsb2F0OiBuZXdDYXBhY2l0eX0sXG4gICAgICBwcmV2aW91c1ZhbHVlOiBvbGRDYXBhY2l0eSA/IHtmbG9hdDogb2xkQ2FwYWNpdHl9IDogdW5kZWZpbmVkXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIE5ldHdvcmsgZG93bmxpbmsgdGhyb3VnaHB1dCBjYXBhY2l0eSBjaGFuZ2VkIHRvIFslc10gZnJvbSBbJXNdJyxcbiAgICAgIG5ldyBEdXJhdGlvbnMobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKS50b0lzb1N0cmluZygpLFxuICAgICAgbmV3Q2FwYWNpdHksXG4gICAgICBvbGRDYXBhY2l0eVxuICAgICk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgRHVyYXRpb25zIGZyb20gJy4uL3RpbWUvRHVyYXRpb24nO1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NUeXBlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCBNZXRyaWNzU2VydmljZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmlkZW9UZWxlbWV0cnkgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BhZ2VMb2FkVGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jaGFubmVsU3RhcnRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdTdHJlYW1UZWxlbWV0cnknKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0cmVhbUlkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZTtcbiAgcHJpdmF0ZSBfbGlzdGVuVG9GaXJzdFRpbWU6ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUgX2xpc3RlbkZvclN0YWxsOiAoKSA9PiB2b2lkO1xuICBwcml2YXRlIF9saXN0ZW5Gb3JDb250aW51YXRpb246IChldmVudCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBfdGltZVRvRmlyc3RGcmFtZTogbnVtYmVyO1xuICBwcml2YXRlIF9jaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lOiBudW1iZXI7XG4gIHByaXZhdGUgX3N0YXJ0UmVjb3JkaW5nRmlyc3RGcmFtZTogbnVtYmVyO1xuICBwcml2YXRlIF92aWRlb1N0YWxsZWQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBfbGFzdFByb2dyZXNzOiBudW1iZXI7XG4gIHByaXZhdGUgX3ZpZGVvUmVzb2x1dGlvbjogc3RyaW5nO1xuICBwcml2YXRlIF9jbGVhclRpbWVUb0ZpcnN0RnJhbWVMaXN0ZW5lcjogRGlzcG9zYWJsZTtcbiAgcHJpdmF0ZSBfY2xlYXJSZWJ1ZmZlcmluZ0xpc3RlbmVyOiBEaXNwb3NhYmxlO1xuXG4gIGNvbnN0cnVjdG9yKHN0cmVhbUlkOiBzdHJpbmcsIHBhZ2VMb2FkVGltZTogbnVtYmVyLCBjaGFubmVsU3RhcnRUaW1lOiBudW1iZXIsIG1ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZSkge1xuICAgIHRoaXMuX3N0cmVhbUlkID0gc3RyZWFtSWQ7XG4gICAgdGhpcy5fcGFnZUxvYWRUaW1lID0gcGFnZUxvYWRUaW1lO1xuICAgIHRoaXMuX2NoYW5uZWxTdGFydFRpbWUgPSBjaGFubmVsU3RhcnRUaW1lO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UgPSBtZXRyaWNzU2VydmljZTtcbiAgfVxuXG4gIHNldHVwTGlzdGVuZXJGb3JUaW1lVG9GaXJzdFRpbWUodmlkZW86IEhUTUxWaWRlb0VsZW1lbnQpOiB2b2lkIHtcbiAgICB0aGlzLl9zdGFydFJlY29yZGluZ0ZpcnN0RnJhbWUgPSBEYXRlLm5vdygpO1xuXG4gICAgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUgPSAoKTogdm9pZCA9PiB0aGlzLmNhbGxUaW1lVG9GaXJzdEZyYW1lKCk7XG5cbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdsb2FkZWRkYXRhJywgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUpO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlZG1ldGFkYXRhJywgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUpO1xuXG4gICAgdGhpcy5fY2xlYXJUaW1lVG9GaXJzdEZyYW1lTGlzdGVuZXIgPSBuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkZWRkYXRhJywgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUpO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZGVkbWV0YWRhdGEnLCB0aGlzLl9saXN0ZW5Ub0ZpcnN0VGltZSk7XG4gICAgfSk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX2NsZWFyVGltZVRvRmlyc3RGcmFtZUxpc3RlbmVyKTtcbiAgfVxuXG4gIHNldHVwTGlzdGVuZXJGb3JSZWJ1ZmZlcmluZyh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCk6IHZvaWQge1xuICAgIHRoaXMuX2xpc3RlbkZvclN0YWxsID0gKCk6IHZvaWQgPT4gdGhpcy5vblN0YWxsKCk7XG5cbiAgICB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24gPSAoZXZlbnQpOiB2b2lkID0+IHRoaXMub25Db250aW51YXRpb24oZXZlbnQsIHZpZGVvKTtcblxuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3N0YWxsZWQnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigncGF1c2UnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcignc3VzcGVuZCcsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdwbGF5JywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdwbGF5aW5nJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigndGltZXVwZGF0ZScsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG5cbiAgICB0aGlzLl9jbGVhclJlYnVmZmVyaW5nTGlzdGVuZXIgPSBuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdzdGFsbGVkJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigncGF1c2UnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdzdXNwZW5kJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigncGxheScsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdwbGF5aW5nJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RpbWV1cGRhdGUnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX2NsZWFyUmVidWZmZXJpbmdMaXN0ZW5lcik7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGR1cmF0aW9uU2luY2VQYWdlTG9hZCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICByZXR1cm4gbmV3IER1cmF0aW9ucyhub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpLnRvSXNvU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIGNhbGxUaW1lVG9GaXJzdEZyYW1lKCk6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICB0aGlzLnB1c2hUaW1lVG9GaXJzdEZyYW1lKG5vdyk7XG4gICAgdGhpcy5wdXNoQ2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZShub3cpO1xuXG4gICAgdGhpcy5fY2xlYXJUaW1lVG9GaXJzdEZyYW1lTGlzdGVuZXIuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBwdXNoVGltZVRvRmlyc3RGcmFtZShub3cpOiB2b2lkIHtcbiAgICB0aGlzLl90aW1lVG9GaXJzdEZyYW1lID0gbm93IC0gdGhpcy5fc3RhcnRSZWNvcmRpbmdGaXJzdEZyYW1lO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5UaW1lVG9GaXJzdEZyYW1lLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IHRoaXMuX3RpbWVUb0ZpcnN0RnJhbWV9LFxuICAgICAgc3RyZWFtSWQ6IHRoaXMuX3N0cmVhbUlkXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIFslc10gRmlyc3QgZnJhbWUgWyVzXScsXG4gICAgICB0aGlzLmR1cmF0aW9uU2luY2VQYWdlTG9hZCxcbiAgICAgIHRoaXMuX3N0cmVhbUlkLFxuICAgICAgbmV3IER1cmF0aW9ucyh0aGlzLl90aW1lVG9GaXJzdEZyYW1lKS50b0lzb1N0cmluZygpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcHVzaENoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUobm93KTogdm9pZCB7XG4gICAgdGhpcy5fY2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSA9IG5vdyAtIHRoaXMuX2NoYW5uZWxTdGFydFRpbWU7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLkNoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogdGhpcy5fY2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZX0sXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gWyVzXSBDaGFubmVsIGNyZWF0aW9uIHRvIGZpcnN0IGZyYW1lIFslc10nLFxuICAgICAgdGhpcy5kdXJhdGlvblNpbmNlUGFnZUxvYWQsXG4gICAgICB0aGlzLl9zdHJlYW1JZCxcbiAgICAgIG5ldyBEdXJhdGlvbnModGhpcy5fY2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSkudG9Jc29TdHJpbmcoKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG9uU3RhbGwoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3ZpZGVvU3RhbGxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuU3RhbGxlZCxcbiAgICAgIHJ1bnRpbWU6IChEYXRlLm5vdygpIC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX3ZpZGVvU3RhbGxlZCA9IERhdGUubm93KCk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIFslc10gW2J1ZmZlcmluZ10gU3RyZWFtIGhhcyBzdGFsbGVkJyxcbiAgICAgIHRoaXMuZHVyYXRpb25TaW5jZVBhZ2VMb2FkLFxuICAgICAgdGhpcy5fc3RyZWFtSWRcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBvbkNvbnRpbnVhdGlvbihldmVudCwgdmlkZW8pOiB2b2lkIHtcbiAgICBpZiAoIXZpZGVvLmJ1ZmZlcmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYnVmZmVyTGVuZ3RoID0gdmlkZW8uYnVmZmVyZWQubGVuZ3RoO1xuICAgIGNvbnN0IGhhc05vdFByb2dyZXNzZWRTaW5jZUxhc3RQcm9ncmVzc0V2ZW50ID0gZXZlbnQudHlwZSA9PT0gJ3BsYXlpbmcnXG4gICAgfHwgYnVmZmVyTGVuZ3RoID4gMCA/IChldmVudC50eXBlID09PSAncHJvZ3Jlc3MnXG4gICAgICB8fCBldmVudC50eXBlID09PSAndGltZXVwZGF0ZScpXG4gICAgICAmJiB2aWRlby5idWZmZXJlZC5lbmQoYnVmZmVyTGVuZ3RoIC0gMSkgPT09IHRoaXMuX2xhc3RQcm9ncmVzcyA6IHRydWU7XG5cbiAgICBpZiAoIXRoaXMuX3ZpZGVvU3RhbGxlZCB8fCBoYXNOb3RQcm9ncmVzc2VkU2luY2VMYXN0UHJvZ3Jlc3NFdmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldmVudC50eXBlID09PSAncHJvZ3Jlc3MnKSB7XG4gICAgICB0aGlzLl9sYXN0UHJvZ3Jlc3MgPSB2aWRlby5idWZmZXJlZC5lbmQoYnVmZmVyTGVuZ3RoIC0gMSk7XG4gICAgfVxuXG4gICAgY29uc3QgdGltZVNpbmNlU3RvcCA9IERhdGUubm93KCkgLSB0aGlzLl92aWRlb1N0YWxsZWQ7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLkJ1ZmZlcmluZyxcbiAgICAgIHJ1bnRpbWU6IChEYXRlLm5vdygpIC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogdGltZVNpbmNlU3RvcH0sXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gWyVzXSBbYnVmZmVyaW5nXSBTdHJlYW0gaGFzIHJlY292ZXJlZCBmcm9tIHN0YWxsIGFmdGVyIFslc10nLFxuICAgICAgdGhpcy5kdXJhdGlvblNpbmNlUGFnZUxvYWQsXG4gICAgICB0aGlzLl9zdHJlYW1JZCxcbiAgICAgIG5ldyBEdXJhdGlvbnModGltZVNpbmNlU3RvcCkudG9Jc29TdHJpbmcoKVxuICAgICk7XG4gICAgdGhpcy5fdmlkZW9TdGFsbGVkID0gbnVsbDtcbiAgfVxuXG4gIG9uVmlkZW9SZXNvbHV0aW9uQ2hhbmdlcyhuZXdSZXNvbHV0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLlJlc29sdXRpb25DaGFuZ2VkLFxuICAgICAgcnVudGltZTogKERhdGUubm93KCkgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7c3RyaW5nOiBuZXdSZXNvbHV0aW9ufSxcbiAgICAgIHByZXZpb3VzVmFsdWU6IHRoaXMuX3ZpZGVvUmVzb2x1dGlvbiA/IHtzdHJpbmc6IHRoaXMuX3ZpZGVvUmVzb2x1dGlvbn0gOiB1bmRlZmluZWQsXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX3ZpZGVvUmVzb2x1dGlvbiA9IG5ld1Jlc29sdXRpb247XG4gIH1cbn0iLCJ2YXIgZ2xvYmFsID1cbiAgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyAmJiBnbG9iYWxUaGlzKSB8fFxuICAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnICYmIHNlbGYpIHx8XG4gICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyAmJiBnbG9iYWwpXG5cbnZhciBzdXBwb3J0ID0ge1xuICBzZWFyY2hQYXJhbXM6ICdVUkxTZWFyY2hQYXJhbXMnIGluIGdsb2JhbCxcbiAgaXRlcmFibGU6ICdTeW1ib2wnIGluIGdsb2JhbCAmJiAnaXRlcmF0b3InIGluIFN5bWJvbCxcbiAgYmxvYjpcbiAgICAnRmlsZVJlYWRlcicgaW4gZ2xvYmFsICYmXG4gICAgJ0Jsb2InIGluIGdsb2JhbCAmJlxuICAgIChmdW5jdGlvbigpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIG5ldyBCbG9iKClcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfSkoKSxcbiAgZm9ybURhdGE6ICdGb3JtRGF0YScgaW4gZ2xvYmFsLFxuICBhcnJheUJ1ZmZlcjogJ0FycmF5QnVmZmVyJyBpbiBnbG9iYWxcbn1cblxuZnVuY3Rpb24gaXNEYXRhVmlldyhvYmopIHtcbiAgcmV0dXJuIG9iaiAmJiBEYXRhVmlldy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihvYmopXG59XG5cbmlmIChzdXBwb3J0LmFycmF5QnVmZmVyKSB7XG4gIHZhciB2aWV3Q2xhc3NlcyA9IFtcbiAgICAnW29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgJ1tvYmplY3QgVWludDMyQXJyYXldJyxcbiAgICAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICAnW29iamVjdCBGbG9hdDY0QXJyYXldJ1xuICBdXG5cbiAgdmFyIGlzQXJyYXlCdWZmZXJWaWV3ID1cbiAgICBBcnJheUJ1ZmZlci5pc1ZpZXcgfHxcbiAgICBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiBvYmogJiYgdmlld0NsYXNzZXMuaW5kZXhPZihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSkgPiAtMVxuICAgIH1cbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplTmFtZShuYW1lKSB7XG4gIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICBuYW1lID0gU3RyaW5nKG5hbWUpXG4gIH1cbiAgaWYgKC9bXmEtejAtOVxcLSMkJSYnKisuXl9gfH4hXS9pLnRlc3QobmFtZSkgfHwgbmFtZSA9PT0gJycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGNoYXJhY3RlciBpbiBoZWFkZXIgZmllbGQgbmFtZTogXCInICsgbmFtZSArICdcIicpXG4gIH1cbiAgcmV0dXJuIG5hbWUudG9Mb3dlckNhc2UoKVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVWYWx1ZSh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgIHZhbHVlID0gU3RyaW5nKHZhbHVlKVxuICB9XG4gIHJldHVybiB2YWx1ZVxufVxuXG4vLyBCdWlsZCBhIGRlc3RydWN0aXZlIGl0ZXJhdG9yIGZvciB0aGUgdmFsdWUgbGlzdFxuZnVuY3Rpb24gaXRlcmF0b3JGb3IoaXRlbXMpIHtcbiAgdmFyIGl0ZXJhdG9yID0ge1xuICAgIG5leHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHZhbHVlID0gaXRlbXMuc2hpZnQoKVxuICAgICAgcmV0dXJuIHtkb25lOiB2YWx1ZSA9PT0gdW5kZWZpbmVkLCB2YWx1ZTogdmFsdWV9XG4gICAgfVxuICB9XG5cbiAgaWYgKHN1cHBvcnQuaXRlcmFibGUpIHtcbiAgICBpdGVyYXRvcltTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gaXRlcmF0b3JcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaXRlcmF0b3Jcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEhlYWRlcnMoaGVhZGVycykge1xuICB0aGlzLm1hcCA9IHt9XG5cbiAgaWYgKGhlYWRlcnMgaW5zdGFuY2VvZiBIZWFkZXJzKSB7XG4gICAgaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgICB0aGlzLmFwcGVuZChuYW1lLCB2YWx1ZSlcbiAgICB9LCB0aGlzKVxuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHtcbiAgICBoZWFkZXJzLmZvckVhY2goZnVuY3Rpb24oaGVhZGVyKSB7XG4gICAgICB0aGlzLmFwcGVuZChoZWFkZXJbMF0sIGhlYWRlclsxXSlcbiAgICB9LCB0aGlzKVxuICB9IGVsc2UgaWYgKGhlYWRlcnMpIHtcbiAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhoZWFkZXJzKS5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgIHRoaXMuYXBwZW5kKG5hbWUsIGhlYWRlcnNbbmFtZV0pXG4gICAgfSwgdGhpcylcbiAgfVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICBuYW1lID0gbm9ybWFsaXplTmFtZShuYW1lKVxuICB2YWx1ZSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKVxuICB2YXIgb2xkVmFsdWUgPSB0aGlzLm1hcFtuYW1lXVxuICB0aGlzLm1hcFtuYW1lXSA9IG9sZFZhbHVlID8gb2xkVmFsdWUgKyAnLCAnICsgdmFsdWUgOiB2YWx1ZVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBmdW5jdGlvbihuYW1lKSB7XG4gIGRlbGV0ZSB0aGlzLm1hcFtub3JtYWxpemVOYW1lKG5hbWUpXVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbihuYW1lKSB7XG4gIG5hbWUgPSBub3JtYWxpemVOYW1lKG5hbWUpXG4gIHJldHVybiB0aGlzLmhhcyhuYW1lKSA/IHRoaXMubWFwW25hbWVdIDogbnVsbFxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbihuYW1lKSB7XG4gIHJldHVybiB0aGlzLm1hcC5oYXNPd25Qcm9wZXJ0eShub3JtYWxpemVOYW1lKG5hbWUpKVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICB0aGlzLm1hcFtub3JtYWxpemVOYW1lKG5hbWUpXSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24oY2FsbGJhY2ssIHRoaXNBcmcpIHtcbiAgZm9yICh2YXIgbmFtZSBpbiB0aGlzLm1hcCkge1xuICAgIGlmICh0aGlzLm1hcC5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgY2FsbGJhY2suY2FsbCh0aGlzQXJnLCB0aGlzLm1hcFtuYW1lXSwgbmFtZSwgdGhpcylcbiAgICB9XG4gIH1cbn1cblxuSGVhZGVycy5wcm90b3R5cGUua2V5cyA9IGZ1bmN0aW9uKCkge1xuICB2YXIgaXRlbXMgPSBbXVxuICB0aGlzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICBpdGVtcy5wdXNoKG5hbWUpXG4gIH0pXG4gIHJldHVybiBpdGVyYXRvckZvcihpdGVtcylcbn1cblxuSGVhZGVycy5wcm90b3R5cGUudmFsdWVzID0gZnVuY3Rpb24oKSB7XG4gIHZhciBpdGVtcyA9IFtdXG4gIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSkge1xuICAgIGl0ZW1zLnB1c2godmFsdWUpXG4gIH0pXG4gIHJldHVybiBpdGVyYXRvckZvcihpdGVtcylcbn1cblxuSGVhZGVycy5wcm90b3R5cGUuZW50cmllcyA9IGZ1bmN0aW9uKCkge1xuICB2YXIgaXRlbXMgPSBbXVxuICB0aGlzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICBpdGVtcy5wdXNoKFtuYW1lLCB2YWx1ZV0pXG4gIH0pXG4gIHJldHVybiBpdGVyYXRvckZvcihpdGVtcylcbn1cblxuaWYgKHN1cHBvcnQuaXRlcmFibGUpIHtcbiAgSGVhZGVycy5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXSA9IEhlYWRlcnMucHJvdG90eXBlLmVudHJpZXNcbn1cblxuZnVuY3Rpb24gY29uc3VtZWQoYm9keSkge1xuICBpZiAoYm9keS5ib2R5VXNlZCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCdBbHJlYWR5IHJlYWQnKSlcbiAgfVxuICBib2R5LmJvZHlVc2VkID0gdHJ1ZVxufVxuXG5mdW5jdGlvbiBmaWxlUmVhZGVyUmVhZHkocmVhZGVyKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXNvbHZlKHJlYWRlci5yZXN1bHQpXG4gICAgfVxuICAgIHJlYWRlci5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICByZWplY3QocmVhZGVyLmVycm9yKVxuICAgIH1cbiAgfSlcbn1cblxuZnVuY3Rpb24gcmVhZEJsb2JBc0FycmF5QnVmZmVyKGJsb2IpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKClcbiAgdmFyIHByb21pc2UgPSBmaWxlUmVhZGVyUmVhZHkocmVhZGVyKVxuICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoYmxvYilcbiAgcmV0dXJuIHByb21pc2Vcbn1cblxuZnVuY3Rpb24gcmVhZEJsb2JBc1RleHQoYmxvYikge1xuICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKVxuICB2YXIgcHJvbWlzZSA9IGZpbGVSZWFkZXJSZWFkeShyZWFkZXIpXG4gIHJlYWRlci5yZWFkQXNUZXh0KGJsb2IpXG4gIHJldHVybiBwcm9taXNlXG59XG5cbmZ1bmN0aW9uIHJlYWRBcnJheUJ1ZmZlckFzVGV4dChidWYpIHtcbiAgdmFyIHZpZXcgPSBuZXcgVWludDhBcnJheShidWYpXG4gIHZhciBjaGFycyA9IG5ldyBBcnJheSh2aWV3Lmxlbmd0aClcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHZpZXcubGVuZ3RoOyBpKyspIHtcbiAgICBjaGFyc1tpXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUodmlld1tpXSlcbiAgfVxuICByZXR1cm4gY2hhcnMuam9pbignJylcbn1cblxuZnVuY3Rpb24gYnVmZmVyQ2xvbmUoYnVmKSB7XG4gIGlmIChidWYuc2xpY2UpIHtcbiAgICByZXR1cm4gYnVmLnNsaWNlKDApXG4gIH0gZWxzZSB7XG4gICAgdmFyIHZpZXcgPSBuZXcgVWludDhBcnJheShidWYuYnl0ZUxlbmd0aClcbiAgICB2aWV3LnNldChuZXcgVWludDhBcnJheShidWYpKVxuICAgIHJldHVybiB2aWV3LmJ1ZmZlclxuICB9XG59XG5cbmZ1bmN0aW9uIEJvZHkoKSB7XG4gIHRoaXMuYm9keVVzZWQgPSBmYWxzZVxuXG4gIHRoaXMuX2luaXRCb2R5ID0gZnVuY3Rpb24oYm9keSkge1xuICAgIC8qXG4gICAgICBmZXRjaC1tb2NrIHdyYXBzIHRoZSBSZXNwb25zZSBvYmplY3QgaW4gYW4gRVM2IFByb3h5IHRvXG4gICAgICBwcm92aWRlIHVzZWZ1bCB0ZXN0IGhhcm5lc3MgZmVhdHVyZXMgc3VjaCBhcyBmbHVzaC4gSG93ZXZlciwgb25cbiAgICAgIEVTNSBicm93c2VycyB3aXRob3V0IGZldGNoIG9yIFByb3h5IHN1cHBvcnQgcG9sbHlmaWxscyBtdXN0IGJlIHVzZWQ7XG4gICAgICB0aGUgcHJveHktcG9sbHlmaWxsIGlzIHVuYWJsZSB0byBwcm94eSBhbiBhdHRyaWJ1dGUgdW5sZXNzIGl0IGV4aXN0c1xuICAgICAgb24gdGhlIG9iamVjdCBiZWZvcmUgdGhlIFByb3h5IGlzIGNyZWF0ZWQuIFRoaXMgY2hhbmdlIGVuc3VyZXNcbiAgICAgIFJlc3BvbnNlLmJvZHlVc2VkIGV4aXN0cyBvbiB0aGUgaW5zdGFuY2UsIHdoaWxlIG1haW50YWluaW5nIHRoZVxuICAgICAgc2VtYW50aWMgb2Ygc2V0dGluZyBSZXF1ZXN0LmJvZHlVc2VkIGluIHRoZSBjb25zdHJ1Y3RvciBiZWZvcmVcbiAgICAgIF9pbml0Qm9keSBpcyBjYWxsZWQuXG4gICAgKi9cbiAgICB0aGlzLmJvZHlVc2VkID0gdGhpcy5ib2R5VXNlZFxuICAgIHRoaXMuX2JvZHlJbml0ID0gYm9keVxuICAgIGlmICghYm9keSkge1xuICAgICAgdGhpcy5fYm9keVRleHQgPSAnJ1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLl9ib2R5VGV4dCA9IGJvZHlcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYmxvYiAmJiBCbG9iLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICB0aGlzLl9ib2R5QmxvYiA9IGJvZHlcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuZm9ybURhdGEgJiYgRm9ybURhdGEucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgIHRoaXMuX2JvZHlGb3JtRGF0YSA9IGJvZHlcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuc2VhcmNoUGFyYW1zICYmIFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgdGhpcy5fYm9keVRleHQgPSBib2R5LnRvU3RyaW5nKClcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYXJyYXlCdWZmZXIgJiYgc3VwcG9ydC5ibG9iICYmIGlzRGF0YVZpZXcoYm9keSkpIHtcbiAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlciA9IGJ1ZmZlckNsb25lKGJvZHkuYnVmZmVyKVxuICAgICAgLy8gSUUgMTAtMTEgY2FuJ3QgaGFuZGxlIGEgRGF0YVZpZXcgYm9keS5cbiAgICAgIHRoaXMuX2JvZHlJbml0ID0gbmV3IEJsb2IoW3RoaXMuX2JvZHlBcnJheUJ1ZmZlcl0pXG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LmFycmF5QnVmZmVyICYmIChBcnJheUJ1ZmZlci5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSB8fCBpc0FycmF5QnVmZmVyVmlldyhib2R5KSkpIHtcbiAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlciA9IGJ1ZmZlckNsb25lKGJvZHkpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2JvZHlUZXh0ID0gYm9keSA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChib2R5KVxuICAgIH1cblxuICAgIGlmICghdGhpcy5oZWFkZXJzLmdldCgnY29udGVudC10eXBlJykpIHtcbiAgICAgIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgJ3RleHQvcGxhaW47Y2hhcnNldD1VVEYtOCcpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlCbG9iICYmIHRoaXMuX2JvZHlCbG9iLnR5cGUpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgdGhpcy5fYm9keUJsb2IudHlwZSlcbiAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5zZWFyY2hQYXJhbXMgJiYgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICAgIHRoaXMuaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOCcpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHN1cHBvcnQuYmxvYikge1xuICAgIHRoaXMuYmxvYiA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHJlamVjdGVkID0gY29uc3VtZWQodGhpcylcbiAgICAgIGlmIChyZWplY3RlZCkge1xuICAgICAgICByZXR1cm4gcmVqZWN0ZWRcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2JvZHlCbG9iKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUJsb2IpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBCbG9iKFt0aGlzLl9ib2R5QXJyYXlCdWZmZXJdKSlcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUZvcm1EYXRhKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IHJlYWQgRm9ybURhdGEgYm9keSBhcyBibG9iJylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IEJsb2IoW3RoaXMuX2JvZHlUZXh0XSkpXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5hcnJheUJ1ZmZlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikge1xuICAgICAgICB2YXIgaXNDb25zdW1lZCA9IGNvbnN1bWVkKHRoaXMpXG4gICAgICAgIGlmIChpc0NvbnN1bWVkKSB7XG4gICAgICAgICAgcmV0dXJuIGlzQ29uc3VtZWRcbiAgICAgICAgfVxuICAgICAgICBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFxuICAgICAgICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyLmJ1ZmZlci5zbGljZShcbiAgICAgICAgICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyLmJ5dGVPZmZzZXQsXG4gICAgICAgICAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlci5ieXRlT2Zmc2V0ICsgdGhpcy5fYm9keUFycmF5QnVmZmVyLmJ5dGVMZW5ndGhcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJsb2IoKS50aGVuKHJlYWRCbG9iQXNBcnJheUJ1ZmZlcilcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB0aGlzLnRleHQgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgcmVqZWN0ZWQgPSBjb25zdW1lZCh0aGlzKVxuICAgIGlmIChyZWplY3RlZCkge1xuICAgICAgcmV0dXJuIHJlamVjdGVkXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2JvZHlCbG9iKSB7XG4gICAgICByZXR1cm4gcmVhZEJsb2JBc1RleHQodGhpcy5fYm9keUJsb2IpXG4gICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVhZEFycmF5QnVmZmVyQXNUZXh0KHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikpXG4gICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5Rm9ybURhdGEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IHJlYWQgRm9ybURhdGEgYm9keSBhcyB0ZXh0JylcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5VGV4dClcbiAgICB9XG4gIH1cblxuICBpZiAoc3VwcG9ydC5mb3JtRGF0YSkge1xuICAgIHRoaXMuZm9ybURhdGEgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLnRleHQoKS50aGVuKGRlY29kZSlcbiAgICB9XG4gIH1cblxuICB0aGlzLmpzb24gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy50ZXh0KCkudGhlbihKU09OLnBhcnNlKVxuICB9XG5cbiAgcmV0dXJuIHRoaXNcbn1cblxuLy8gSFRUUCBtZXRob2RzIHdob3NlIGNhcGl0YWxpemF0aW9uIHNob3VsZCBiZSBub3JtYWxpemVkXG52YXIgbWV0aG9kcyA9IFsnREVMRVRFJywgJ0dFVCcsICdIRUFEJywgJ09QVElPTlMnLCAnUE9TVCcsICdQVVQnXVxuXG5mdW5jdGlvbiBub3JtYWxpemVNZXRob2QobWV0aG9kKSB7XG4gIHZhciB1cGNhc2VkID0gbWV0aG9kLnRvVXBwZXJDYXNlKClcbiAgcmV0dXJuIG1ldGhvZHMuaW5kZXhPZih1cGNhc2VkKSA+IC0xID8gdXBjYXNlZCA6IG1ldGhvZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gUmVxdWVzdChpbnB1dCwgb3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUmVxdWVzdCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQbGVhc2UgdXNlIHRoZSBcIm5ld1wiIG9wZXJhdG9yLCB0aGlzIERPTSBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLicpXG4gIH1cblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fVxuICB2YXIgYm9keSA9IG9wdGlvbnMuYm9keVxuXG4gIGlmIChpbnB1dCBpbnN0YW5jZW9mIFJlcXVlc3QpIHtcbiAgICBpZiAoaW5wdXQuYm9keVVzZWQpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FscmVhZHkgcmVhZCcpXG4gICAgfVxuICAgIHRoaXMudXJsID0gaW5wdXQudXJsXG4gICAgdGhpcy5jcmVkZW50aWFscyA9IGlucHV0LmNyZWRlbnRpYWxzXG4gICAgaWYgKCFvcHRpb25zLmhlYWRlcnMpIHtcbiAgICAgIHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKGlucHV0LmhlYWRlcnMpXG4gICAgfVxuICAgIHRoaXMubWV0aG9kID0gaW5wdXQubWV0aG9kXG4gICAgdGhpcy5tb2RlID0gaW5wdXQubW9kZVxuICAgIHRoaXMuc2lnbmFsID0gaW5wdXQuc2lnbmFsXG4gICAgaWYgKCFib2R5ICYmIGlucHV0Ll9ib2R5SW5pdCAhPSBudWxsKSB7XG4gICAgICBib2R5ID0gaW5wdXQuX2JvZHlJbml0XG4gICAgICBpbnB1dC5ib2R5VXNlZCA9IHRydWVcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhpcy51cmwgPSBTdHJpbmcoaW5wdXQpXG4gIH1cblxuICB0aGlzLmNyZWRlbnRpYWxzID0gb3B0aW9ucy5jcmVkZW50aWFscyB8fCB0aGlzLmNyZWRlbnRpYWxzIHx8ICdzYW1lLW9yaWdpbidcbiAgaWYgKG9wdGlvbnMuaGVhZGVycyB8fCAhdGhpcy5oZWFkZXJzKSB7XG4gICAgdGhpcy5oZWFkZXJzID0gbmV3IEhlYWRlcnMob3B0aW9ucy5oZWFkZXJzKVxuICB9XG4gIHRoaXMubWV0aG9kID0gbm9ybWFsaXplTWV0aG9kKG9wdGlvbnMubWV0aG9kIHx8IHRoaXMubWV0aG9kIHx8ICdHRVQnKVxuICB0aGlzLm1vZGUgPSBvcHRpb25zLm1vZGUgfHwgdGhpcy5tb2RlIHx8IG51bGxcbiAgdGhpcy5zaWduYWwgPSBvcHRpb25zLnNpZ25hbCB8fCB0aGlzLnNpZ25hbFxuICB0aGlzLnJlZmVycmVyID0gbnVsbFxuXG4gIGlmICgodGhpcy5tZXRob2QgPT09ICdHRVQnIHx8IHRoaXMubWV0aG9kID09PSAnSEVBRCcpICYmIGJvZHkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdCb2R5IG5vdCBhbGxvd2VkIGZvciBHRVQgb3IgSEVBRCByZXF1ZXN0cycpXG4gIH1cbiAgdGhpcy5faW5pdEJvZHkoYm9keSlcblxuICBpZiAodGhpcy5tZXRob2QgPT09ICdHRVQnIHx8IHRoaXMubWV0aG9kID09PSAnSEVBRCcpIHtcbiAgICBpZiAob3B0aW9ucy5jYWNoZSA9PT0gJ25vLXN0b3JlJyB8fCBvcHRpb25zLmNhY2hlID09PSAnbm8tY2FjaGUnKSB7XG4gICAgICAvLyBTZWFyY2ggZm9yIGEgJ18nIHBhcmFtZXRlciBpbiB0aGUgcXVlcnkgc3RyaW5nXG4gICAgICB2YXIgcmVQYXJhbVNlYXJjaCA9IC8oWz8mXSlfPVteJl0qL1xuICAgICAgaWYgKHJlUGFyYW1TZWFyY2gudGVzdCh0aGlzLnVybCkpIHtcbiAgICAgICAgLy8gSWYgaXQgYWxyZWFkeSBleGlzdHMgdGhlbiBzZXQgdGhlIHZhbHVlIHdpdGggdGhlIGN1cnJlbnQgdGltZVxuICAgICAgICB0aGlzLnVybCA9IHRoaXMudXJsLnJlcGxhY2UocmVQYXJhbVNlYXJjaCwgJyQxXz0nICsgbmV3IERhdGUoKS5nZXRUaW1lKCkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBPdGhlcndpc2UgYWRkIGEgbmV3ICdfJyBwYXJhbWV0ZXIgdG8gdGhlIGVuZCB3aXRoIHRoZSBjdXJyZW50IHRpbWVcbiAgICAgICAgdmFyIHJlUXVlcnlTdHJpbmcgPSAvXFw/L1xuICAgICAgICB0aGlzLnVybCArPSAocmVRdWVyeVN0cmluZy50ZXN0KHRoaXMudXJsKSA/ICcmJyA6ICc/JykgKyAnXz0nICsgbmV3IERhdGUoKS5nZXRUaW1lKClcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuUmVxdWVzdC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBSZXF1ZXN0KHRoaXMsIHtib2R5OiB0aGlzLl9ib2R5SW5pdH0pXG59XG5cbmZ1bmN0aW9uIGRlY29kZShib2R5KSB7XG4gIHZhciBmb3JtID0gbmV3IEZvcm1EYXRhKClcbiAgYm9keVxuICAgIC50cmltKClcbiAgICAuc3BsaXQoJyYnKVxuICAgIC5mb3JFYWNoKGZ1bmN0aW9uKGJ5dGVzKSB7XG4gICAgICBpZiAoYnl0ZXMpIHtcbiAgICAgICAgdmFyIHNwbGl0ID0gYnl0ZXMuc3BsaXQoJz0nKVxuICAgICAgICB2YXIgbmFtZSA9IHNwbGl0LnNoaWZ0KCkucmVwbGFjZSgvXFwrL2csICcgJylcbiAgICAgICAgdmFyIHZhbHVlID0gc3BsaXQuam9pbignPScpLnJlcGxhY2UoL1xcKy9nLCAnICcpXG4gICAgICAgIGZvcm0uYXBwZW5kKGRlY29kZVVSSUNvbXBvbmVudChuYW1lKSwgZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlKSlcbiAgICAgIH1cbiAgICB9KVxuICByZXR1cm4gZm9ybVxufVxuXG5mdW5jdGlvbiBwYXJzZUhlYWRlcnMocmF3SGVhZGVycykge1xuICB2YXIgaGVhZGVycyA9IG5ldyBIZWFkZXJzKClcbiAgLy8gUmVwbGFjZSBpbnN0YW5jZXMgb2YgXFxyXFxuIGFuZCBcXG4gZm9sbG93ZWQgYnkgYXQgbGVhc3Qgb25lIHNwYWNlIG9yIGhvcml6b250YWwgdGFiIHdpdGggYSBzcGFjZVxuICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMCNzZWN0aW9uLTMuMlxuICB2YXIgcHJlUHJvY2Vzc2VkSGVhZGVycyA9IHJhd0hlYWRlcnMucmVwbGFjZSgvXFxyP1xcbltcXHQgXSsvZywgJyAnKVxuICAvLyBBdm9pZGluZyBzcGxpdCB2aWEgcmVnZXggdG8gd29yayBhcm91bmQgYSBjb21tb24gSUUxMSBidWcgd2l0aCB0aGUgY29yZS1qcyAzLjYuMCByZWdleCBwb2x5ZmlsbFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZ2l0aHViL2ZldGNoL2lzc3Vlcy83NDhcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzc1MVxuICBwcmVQcm9jZXNzZWRIZWFkZXJzXG4gICAgLnNwbGl0KCdcXHInKVxuICAgIC5tYXAoZnVuY3Rpb24oaGVhZGVyKSB7XG4gICAgICByZXR1cm4gaGVhZGVyLmluZGV4T2YoJ1xcbicpID09PSAwID8gaGVhZGVyLnN1YnN0cigxLCBoZWFkZXIubGVuZ3RoKSA6IGhlYWRlclxuICAgIH0pXG4gICAgLmZvckVhY2goZnVuY3Rpb24obGluZSkge1xuICAgICAgdmFyIHBhcnRzID0gbGluZS5zcGxpdCgnOicpXG4gICAgICB2YXIga2V5ID0gcGFydHMuc2hpZnQoKS50cmltKClcbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gcGFydHMuam9pbignOicpLnRyaW0oKVxuICAgICAgICBoZWFkZXJzLmFwcGVuZChrZXksIHZhbHVlKVxuICAgICAgfVxuICAgIH0pXG4gIHJldHVybiBoZWFkZXJzXG59XG5cbkJvZHkuY2FsbChSZXF1ZXN0LnByb3RvdHlwZSlcblxuZXhwb3J0IGZ1bmN0aW9uIFJlc3BvbnNlKGJvZHlJbml0LCBvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBSZXNwb25zZSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQbGVhc2UgdXNlIHRoZSBcIm5ld1wiIG9wZXJhdG9yLCB0aGlzIERPTSBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLicpXG4gIH1cbiAgaWYgKCFvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IHt9XG4gIH1cblxuICB0aGlzLnR5cGUgPSAnZGVmYXVsdCdcbiAgdGhpcy5zdGF0dXMgPSBvcHRpb25zLnN0YXR1cyA9PT0gdW5kZWZpbmVkID8gMjAwIDogb3B0aW9ucy5zdGF0dXNcbiAgdGhpcy5vayA9IHRoaXMuc3RhdHVzID49IDIwMCAmJiB0aGlzLnN0YXR1cyA8IDMwMFxuICB0aGlzLnN0YXR1c1RleHQgPSBvcHRpb25zLnN0YXR1c1RleHQgPT09IHVuZGVmaW5lZCA/ICcnIDogJycgKyBvcHRpb25zLnN0YXR1c1RleHRcbiAgdGhpcy5oZWFkZXJzID0gbmV3IEhlYWRlcnMob3B0aW9ucy5oZWFkZXJzKVxuICB0aGlzLnVybCA9IG9wdGlvbnMudXJsIHx8ICcnXG4gIHRoaXMuX2luaXRCb2R5KGJvZHlJbml0KVxufVxuXG5Cb2R5LmNhbGwoUmVzcG9uc2UucHJvdG90eXBlKVxuXG5SZXNwb25zZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBSZXNwb25zZSh0aGlzLl9ib2R5SW5pdCwge1xuICAgIHN0YXR1czogdGhpcy5zdGF0dXMsXG4gICAgc3RhdHVzVGV4dDogdGhpcy5zdGF0dXNUZXh0LFxuICAgIGhlYWRlcnM6IG5ldyBIZWFkZXJzKHRoaXMuaGVhZGVycyksXG4gICAgdXJsOiB0aGlzLnVybFxuICB9KVxufVxuXG5SZXNwb25zZS5lcnJvciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcmVzcG9uc2UgPSBuZXcgUmVzcG9uc2UobnVsbCwge3N0YXR1czogMCwgc3RhdHVzVGV4dDogJyd9KVxuICByZXNwb25zZS50eXBlID0gJ2Vycm9yJ1xuICByZXR1cm4gcmVzcG9uc2Vcbn1cblxudmFyIHJlZGlyZWN0U3RhdHVzZXMgPSBbMzAxLCAzMDIsIDMwMywgMzA3LCAzMDhdXG5cblJlc3BvbnNlLnJlZGlyZWN0ID0gZnVuY3Rpb24odXJsLCBzdGF0dXMpIHtcbiAgaWYgKHJlZGlyZWN0U3RhdHVzZXMuaW5kZXhPZihzdGF0dXMpID09PSAtMSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbnZhbGlkIHN0YXR1cyBjb2RlJylcbiAgfVxuXG4gIHJldHVybiBuZXcgUmVzcG9uc2UobnVsbCwge3N0YXR1czogc3RhdHVzLCBoZWFkZXJzOiB7bG9jYXRpb246IHVybH19KVxufVxuXG5leHBvcnQgdmFyIERPTUV4Y2VwdGlvbiA9IGdsb2JhbC5ET01FeGNlcHRpb25cbnRyeSB7XG4gIG5ldyBET01FeGNlcHRpb24oKVxufSBjYXRjaCAoZXJyKSB7XG4gIERPTUV4Y2VwdGlvbiA9IGZ1bmN0aW9uKG1lc3NhZ2UsIG5hbWUpIHtcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlXG4gICAgdGhpcy5uYW1lID0gbmFtZVxuICAgIHZhciBlcnJvciA9IEVycm9yKG1lc3NhZ2UpXG4gICAgdGhpcy5zdGFjayA9IGVycm9yLnN0YWNrXG4gIH1cbiAgRE9NRXhjZXB0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKVxuICBET01FeGNlcHRpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRE9NRXhjZXB0aW9uXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmZXRjaChpbnB1dCwgaW5pdCkge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgdmFyIHJlcXVlc3QgPSBuZXcgUmVxdWVzdChpbnB1dCwgaW5pdClcblxuICAgIGlmIChyZXF1ZXN0LnNpZ25hbCAmJiByZXF1ZXN0LnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICByZXR1cm4gcmVqZWN0KG5ldyBET01FeGNlcHRpb24oJ0Fib3J0ZWQnLCAnQWJvcnRFcnJvcicpKVxuICAgIH1cblxuICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKVxuXG4gICAgZnVuY3Rpb24gYWJvcnRYaHIoKSB7XG4gICAgICB4aHIuYWJvcnQoKVxuICAgIH1cblxuICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICBzdGF0dXM6IHhoci5zdGF0dXMsXG4gICAgICAgIHN0YXR1c1RleHQ6IHhoci5zdGF0dXNUZXh0LFxuICAgICAgICBoZWFkZXJzOiBwYXJzZUhlYWRlcnMoeGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpIHx8ICcnKVxuICAgICAgfVxuICAgICAgb3B0aW9ucy51cmwgPSAncmVzcG9uc2VVUkwnIGluIHhociA/IHhoci5yZXNwb25zZVVSTCA6IG9wdGlvbnMuaGVhZGVycy5nZXQoJ1gtUmVxdWVzdC1VUkwnKVxuICAgICAgdmFyIGJvZHkgPSAncmVzcG9uc2UnIGluIHhociA/IHhoci5yZXNwb25zZSA6IHhoci5yZXNwb25zZVRleHRcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlc29sdmUobmV3IFJlc3BvbnNlKGJvZHksIG9wdGlvbnMpKVxuICAgICAgfSwgMClcbiAgICB9XG5cbiAgICB4aHIub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ05ldHdvcmsgcmVxdWVzdCBmYWlsZWQnKSlcbiAgICAgIH0sIDApXG4gICAgfVxuXG4gICAgeGhyLm9udGltZW91dCA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ05ldHdvcmsgcmVxdWVzdCBmYWlsZWQnKSlcbiAgICAgIH0sIDApXG4gICAgfVxuXG4gICAgeGhyLm9uYWJvcnQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlamVjdChuZXcgRE9NRXhjZXB0aW9uKCdBYm9ydGVkJywgJ0Fib3J0RXJyb3InKSlcbiAgICAgIH0sIDApXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZml4VXJsKHVybCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHVybCA9PT0gJycgJiYgZ2xvYmFsLmxvY2F0aW9uLmhyZWYgPyBnbG9iYWwubG9jYXRpb24uaHJlZiA6IHVybFxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gdXJsXG4gICAgICB9XG4gICAgfVxuXG4gICAgeGhyLm9wZW4ocmVxdWVzdC5tZXRob2QsIGZpeFVybChyZXF1ZXN0LnVybCksIHRydWUpXG5cbiAgICBpZiAocmVxdWVzdC5jcmVkZW50aWFscyA9PT0gJ2luY2x1ZGUnKSB7XG4gICAgICB4aHIud2l0aENyZWRlbnRpYWxzID0gdHJ1ZVxuICAgIH0gZWxzZSBpZiAocmVxdWVzdC5jcmVkZW50aWFscyA9PT0gJ29taXQnKSB7XG4gICAgICB4aHIud2l0aENyZWRlbnRpYWxzID0gZmFsc2VcbiAgICB9XG5cbiAgICBpZiAoJ3Jlc3BvbnNlVHlwZScgaW4geGhyKSB7XG4gICAgICBpZiAoc3VwcG9ydC5ibG9iKSB7XG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSAnYmxvYidcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHN1cHBvcnQuYXJyYXlCdWZmZXIgJiZcbiAgICAgICAgcmVxdWVzdC5oZWFkZXJzLmdldCgnQ29udGVudC1UeXBlJykgJiZcbiAgICAgICAgcmVxdWVzdC5oZWFkZXJzLmdldCgnQ29udGVudC1UeXBlJykuaW5kZXhPZignYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJykgIT09IC0xXG4gICAgICApIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9ICdhcnJheWJ1ZmZlcidcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaW5pdCAmJiB0eXBlb2YgaW5pdC5oZWFkZXJzID09PSAnb2JqZWN0JyAmJiAhKGluaXQuaGVhZGVycyBpbnN0YW5jZW9mIEhlYWRlcnMpKSB7XG4gICAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhpbml0LmhlYWRlcnMpLmZvckVhY2goZnVuY3Rpb24obmFtZSkge1xuICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihuYW1lLCBub3JtYWxpemVWYWx1ZShpbml0LmhlYWRlcnNbbmFtZV0pKVxuICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgcmVxdWVzdC5oZWFkZXJzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIobmFtZSwgdmFsdWUpXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChyZXF1ZXN0LnNpZ25hbCkge1xuICAgICAgcmVxdWVzdC5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydFhocilcblxuICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAvLyBET05FIChzdWNjZXNzIG9yIGZhaWx1cmUpXG4gICAgICAgIGlmICh4aHIucmVhZHlTdGF0ZSA9PT0gNCkge1xuICAgICAgICAgIHJlcXVlc3Quc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnRYaHIpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB4aHIuc2VuZCh0eXBlb2YgcmVxdWVzdC5fYm9keUluaXQgPT09ICd1bmRlZmluZWQnID8gbnVsbCA6IHJlcXVlc3QuX2JvZHlJbml0KVxuICB9KVxufVxuXG5mZXRjaC5wb2x5ZmlsbCA9IHRydWVcblxuaWYgKCFnbG9iYWwuZmV0Y2gpIHtcbiAgZ2xvYmFsLmZldGNoID0gZmV0Y2hcbiAgZ2xvYmFsLkhlYWRlcnMgPSBIZWFkZXJzXG4gIGdsb2JhbC5SZXF1ZXN0ID0gUmVxdWVzdFxuICBnbG9iYWwuUmVzcG9uc2UgPSBSZXNwb25zZVxufVxuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0aWYoX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSkge1xuXHRcdHJldHVybiBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdGZ1bmN0aW9uKCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuXHRcdGZ1bmN0aW9uKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgZGVmaW5pdGlvbikge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmosIHByb3ApIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApOyB9IiwiLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCIvLyBtb2R1bGUgZXhwb3J0cyBtdXN0IGJlIHJldHVybmVkIGZyb20gcnVudGltZSBzbyBlbnRyeSBpbmxpbmluZyBpcyBkaXNhYmxlZFxuLy8gc3RhcnR1cFxuLy8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fKFwiLi9ub2RlX21vZHVsZXMvd2hhdHdnLWZldGNoL2ZldGNoLmpzXCIpO1xucmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oXCIuL3NyYy9zZGsvY2hhbm5lbHMvaW5kZXgudHNcIik7XG4iXSwic291cmNlUm9vdCI6IiJ9
|
|
9638
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hcnJheUxpa2VUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hcnJheVdpdGhIb2xlcy5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXJyYXlXaXRob3V0SG9sZXMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXN5bmNUb0dlbmVyYXRvci5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY2xhc3NDYWxsQ2hlY2suanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NyZWF0ZUNsYXNzLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZ2V0UHJvdG90eXBlT2YuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pdGVyYWJsZVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9ub25JdGVyYWJsZVJlc3QuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL25vbkl0ZXJhYmxlU3ByZWFkLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zZXRQcm90b3R5cGVPZi5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheS5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Db25zdW1hYmxlQXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvUHJpbWl0aXZlLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b1Byb3BlcnR5S2V5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3JlZ2VuZXJhdG9yUnVudGltZS5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy90eXBlb2YuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL3JlZ2VuZXJhdG9yL2luZGV4LmpzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2RvbS9Ccm93c2VyRGV0ZWN0b3IudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2RvbS9QbGFpbkNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2RvbS9HYXJiYWdlQ29sbGVjdG9yTWFuYWdlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL05ldHdvcmtNb25pdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vU3RyZWFtU2V0dXBMaXN0ZW5lci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZWRnZUF1dGgvRWRnZUF1dGhQYXJzZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2VkZ2VBdXRoL0VkZ2VUb2tlbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZW52aXJvbm1lbnQvQnVpbGRGZWF0dXJlcy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2Vudmlyb25tZW50L1BhcmFtZXRlcnMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xhbmcvRGlzcG9zYWJsZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbGFuZy9EaXNwb3NhYmxlTGlzdC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbGFuZy9TdHJpbmdzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sYW5nL2Fzc2VydFVucmVhY2hhYmxlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvQXBwZW5kZXJzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvQ29uc29sZUFwcGVuZGVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvTG9nZ2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvTG9nZ2VyRGVmYXVsdHMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Mb2dnZXJGYWN0b3J5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvTG9nZ2luZ0xldmVsTWFwcGluZy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0xvZ2dpbmdUaHJlc2hvbGQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvTWV0cmljVHlwZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9NZXRyaWNzQ29uZmlndXJhdGlvbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9NZXRyaWNzRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9NZXRyaWNzU2VydmljZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9NZXRyaWNzVHlwZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9UZWxlbWV0cmljTGV2ZWxNYXBwaW5nLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL1RlbGVtZXRyeURlZmF1bHQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J0Yy9QZWVyQ29ubmVjdGlvblNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J0Yy9SdGNDb25maWd1cmF0aW9uTWFuYWdlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1J0Y0Nvbm5lY3Rpb25Nb25pdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvU2RwUGFyc2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvVmFuaWxsYVBlZXJDb25uZWN0aW9uLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcngvUmVhZE9ubHlTdWJqZWN0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9yeC9TdWJqZWN0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvRW52aXJvbm1lbnQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9TREsudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9UZWxlbWV0cnlVcmwudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9hcGkvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jaGFubmVscy9DaGFubmVsLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY2hhbm5lbHMvQ2hhbm5lbFN0YXRlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY2hhbm5lbHMvQ2hhbm5lbHMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jaGFubmVscy9pbmRleC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NvbnRleHQvQ2hhbm5lbENvbnRleHQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jb250ZXh0L1BlZXJDb25uZWN0aW9uQ29udGV4dC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NvbnRleHQvU3RhdGVDb250ZXh0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY29udGV4dC9Ub2tlbkNvbnRleHQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kZWZhdWx0cy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2Rpc2NvdmVyeS9CaXRyYXRlTW9kZU1hcHBpbmcudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvQml0cmF0ZVN0YXRlTWFwcGluZy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2Rpc2NvdmVyeS9EaXNjb3ZlcnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvRGlzY292ZXJ5U2VydmljZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2Rpc2NvdmVyeS9EaXNjb3ZlcnlVcmkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvRW5kUG9pbnQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvSW5zZXJ0YWJsZVN0cmVhbXMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvUmVhbFRpbWVTdHJlYW0udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvUmVhbFRpbWVTdHJlYW1GYWN0b3J5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvdmVyc2lvbi9WZXJzaW9uTWFuYWdlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdGVsZW1ldHJ5L1RlbGVtZXRyeUFwZW5kZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3RlbGVtZXRyeS9UZWxlbWV0cnlDb25maWd1cmF0aW9uLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy90ZWxlbWV0cnkvVGVsZW1ldHJ5U2VydmljZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdGltZS9EdXJhdGlvbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdGltZS9FeHBvbmVudGlhbEJhY2tvZmYudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3ZpZGVvL0RpbWVuc2lvbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdmlkZW8vU2Vzc2lvblRlbGVtZXRyeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdmlkZW8vVmlkZW9UZWxlbWV0cnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL3doYXR3Zy1mZXRjaC9mZXRjaC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svcnVudGltZS9jb21wYXQgZ2V0IGRlZmF1bHQgZXhwb3J0Iiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svc3RhcnR1cCJdLCJuYW1lcyI6WyJkZWZhdWx0RG9jdW1lbnRGb2N1c0ludGVydmFsVGltZW91dCIsIkFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yIiwiX2NsYXNzQ2FsbENoZWNrIiwiX2RlZmluZVByb3BlcnR5IiwiRGlzcG9zYWJsZUxpc3QiLCJEYXRlIiwibm93IiwiX2lzRm9yZWdyb3VuZCIsIlN1YmplY3QiLCJfcmVhZE9ubHlJc0ZvcmVncm91bmQiLCJSZWFkT25seVN1YmplY3QiLCJkZXRlY3RUYWJGb2N1c0NoYW5nZSIsIl9jcmVhdGVDbGFzcyIsImtleSIsImdldCIsInZhbHVlIiwiZ2V0VGltZVNpbmNlTGFzdENoYW5nZSIsIl90aW1lT2ZMYXN0VGFiRm9jdXNDaGFuZ2UiLCJkaXNwb3NlIiwiX2Rpc3Bvc2FibGVzIiwiX3RoaXMiLCJoaWRkZW4iLCJ2aXNpYmlsaXR5Q2hhbmdlIiwiZG9jdW1lbnQiLCJfdHlwZW9mIiwibXNIaWRkZW4iLCJ3ZWJraXRIaWRkZW4iLCJoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlIiwiaXNGb3JlZ3JvdW5kIiwic2V0Rm9jdXNTdGF0ZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJhZGQiLCJEaXNwb3NhYmxlIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImxpc3RlbkZvckRvY3VtZW50Rm9jdXMiLCJjYWxsIiwiX3RoaXMyIiwiX2RvY3VtZW50Rm9jdXNJbnRlcnZhbCIsIndpbmRvdyIsInNldEludGVydmFsIiwiaGFzRm9jdXMiLCJjbGVhckludGVydmFsIiwiQnJvd3NlckRldGVjdG9yIiwiX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbiIsIl9icm93c2VyTmFtZSIsIl9icm93c2VyTWFqb3JWZXJzaW9uIiwiX2lzQ2hyb21lNjkiLCJfaXNDaHJvbWU3MCIsIl9pc0Nocm9tZTcxIiwiX2lzQ2hyb21lNzIiLCJfaXNDaHJvbWU3NCIsIl9pc0Nocm9tZTc1IiwiX2lzQ2hyb21lNzYiLCJfaXNDaHJvbWU3NyIsImlzTW9iaWxlIiwiX25hdmlnYXRvciIsInRlc3QiLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJwYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbiIsImJyb3dzZXJOYW1lQW5kVmVyc2lvbiIsIm1hdGNoIiwiX2Jyb3dzZXJOYW1lQW5kVmVyc2lvblJlZ2V4IiwicGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb25Gb3JJRSIsInBhcnNlQnJvd3Nlck5hbWUiLCJicm93c2VyTmFtZUxpc3QiLCJzcGxpdCIsInBhcnNlQnJvd3Nlck1ham9yVmVyc2lvbiIsImJyb3dzZXJWZXJzaW9uTGlzdCIsImZ1bGxWZXJzaW9uIiwiTnVtYmVyIiwibXNpZSIsImluZGV4T2YiLCJjb25jYXQiLCJwYXJzZUludCIsInN1YnN0cmluZyIsInRyaWRlbnQiLCJ2ZXJzaW9uIiwiaW5jbHVkZXMiLCJQbGFpbkNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIiLCJnZXRTdHJpbmdWYWx1ZSIsIm5hbWUiLCJkZWZhdWx0U3RyaW5nVmFsdWUiLCJnZXRCb29sZWFuVmFsdWUiLCJkZWZhdWx0Qm9vbGVhblZhbHVlIiwiVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nIiwiVGVsZW1ldHJ5RGVmYXVsdCIsIkxvZ2dpbmdMZXZlbE1hcHBpbmciLCJMb2dnZXJEZWZhdWx0cyIsIkdhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyIiwiRXJyb3IiLCJmb3JjZUdhcmJhZ2VDb2xsZWN0aW9uIiwiRmVhdHVyZUVuYWJsZW1lbnQiLCJmb3JjZUNocm9tZUdhcmJhZ2VDb2xsZWN0aW9uIiwicXVldWVNaWNyb3Rhc2siLCJvdmVybG9hZE1lbW9yeVRvSW52b2tlR2FyYmFnZUNvbGxlY3Rpb24iLCJzZXRUaW1lb3V0IiwiaW1nIiwiY3JlYXRlRWxlbWVudCIsInNyYyIsIlVSTCIsImNyZWF0ZU9iamVjdFVSTCIsIkJsb2IiLCJBcnJheUJ1ZmZlciIsIm9uZXJyb3IiLCJyZXZva2VPYmplY3RVUkwiLCJOZXR3b3JrTW9uaXRvciIsInVuZGVmaW5lZCIsImlzU3VwcG9ydGVkIiwic2V0dXBOZXR3b3JrQ2hhbmdlTGlzdGVuZXJzIiwidXBkYXRlU3RhdGlzdGljcyIsIl9pc1N1cHBvcnRlZCIsIl9ydHQiLCJfZWZmZWN0aXZlVHlwZSIsIl9kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSIsImdldERvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5IiwiZG93bmxpbmsiLCJkb3dubGlua01heCIsImdldEVmZmVjdGl2ZVR5cGUiLCJlZmZlY3RpdmVUeXBlIiwidHlwZSIsImdldFJvdW5kVHJpcFRpbWUiLCJydHQiLCJsaXN0ZW5lciIsIlN0cmVhbVNldHVwTGlzdGVuZXIiLCJwYWdlTG9hZFRpbWUiLCJMb2dnZXJGYWN0b3J5IiwiU0RLIiwiX3N0YXJ0VGltZSIsIl9wYWdlTG9hZFRpbWUiLCJzdWNjZXNzIiwic3RyZWFtSWQiLCJyZWNvcmRTdHJlYW1NZXRyaWMiLCJNZXRyaWNzVHlwZSIsImZhaWwiLCJtZXRyaWNUeXBlIiwiX21ldHJpY1N1Ym1pdHRlZCIsInNldHVwVGltZSIsIm1ldHJpY05hbWUiLCJNZXRyaWNUeXBlIiwiZ2V0TmFtZSIsIm1ldHJpY3NTZXJ2aWNlIiwicHVzaCIsInJ1bnRpbWUiLCJ1aW50NjQiLCJfbG9nZ2VyIiwiaW5mbyIsIkR1cmF0aW9ucyIsInRvSXNvU3RyaW5nIiwiZWRnZUF1dGhUb2tlblByZWZpeCIsIkVkZ2VBdXRoUGFyc2VyIiwicGFyc2VUb2tlbiIsInRva2VuIiwiaXNFbmNvZGVkRWRnZVRva2VuVmFsaWQiLCJlcnJvciIsIkVkZ2VUb2tlbiIsImRlY29kZWRUb2tlbiIsImF0b2IiLCJzdWJzdHIiLCJsZW5ndGgiLCJlZGdlVG9rZW4iLCJKU09OIiwicGFyc2UiLCJlIiwic3RhcnRzV2l0aCIsIl9lZGdlVG9rZW4kdG9rZW4iLCJfZWRnZVRva2VuJHRva2VuMiIsIl9hcHBsaWNhdGlvbklkIiwiYXBwbGljYXRpb25JZCIsIl90b2tlbiIsInVyaSIsImNhcGFiaWxpdGllcyIsIkJ1aWxkRmVhdHVyZXMiLCJfc2VuZExvY2FsQ2FuZGlkYXRlcyIsIl9zZW5kTG9ncyIsIl9zZW5kTWV0cmljcyIsIl9sb2dUb0NvbnNvbGUiLCJhcHBseUZlYXR1cmVzIiwiZmVhdHVyZXMiLCJfX0ZFQVRVUkVTX18iLCJzZW5kTG9jYWxDYW5kaWRhdGVzIiwic2VuZExvZ3MiLCJzZW5kTWV0cmljcyIsImxvZ1RvQ29uc29sZSIsIk1lZGlhU3RyZWFtVHJhY2tQcm9jZXNzb3IiLCJNZWRpYVN0cmVhbVRyYWNrR2VuZXJhdG9yIiwiX2RvY3VtZW50IiwiUGFyYW1ldGVycyIsIl9kaXNjb3ZlcnlQYXJhbWV0ZXJzIiwiYXBwbHlQYXJhbWV0ZXJzIiwicGFyYW1ldGVycyIsIl9fUEFSQU1FVEVSU19fIiwiZGlzY292ZXJ5IiwiaW50ZW50aW9ucyIsImRpc3Bvc2FibGUiLCJfZGlzcG9zZWQiLCJfZGlzcG9zYWJsZSIsIl9saXN0IiwiZm9yRWFjaCIsInRvU3RyaW5nIiwiU3RyaW5ncyIsInJhbmRvbSIsInJhbmRvbTEzQ2hhcmFjdGVycyIsIk1hdGgiLCJsb29wcyIsImNlaWwiLCJBcnJheSIsImZpbGwiLCJyZWR1Y2UiLCJzdHJpbmciLCJmdW5jIiwiYXNzZXJ0VW5yZWFjaGFibGUiLCJ4IiwiQXBwZW5kZXJzIiwiX2FwcGVuZGVycyIsImFwcGVuZGVyIiwicmVtb3ZlIiwiaXRlbXMiLCJpdGVtIiwiQ29uc29sZUFwcGVuZGVyIiwidGhyZXNob2xkIiwiX3RocmVzaG9sZCIsImxvZyIsImxvZ0xldmVsIiwibWVzc2FnZSIsImNhdGVnb3J5IiwiZGF0ZSIsImZ1bGxNZXNzYWdlIiwidG9JU09TdHJpbmciLCJMb2dnaW5nTGV2ZWwiLCJjb25zb2xlIiwiTG9nZ2VyIiwiYXBwZW5kZXJzIiwiX2NhdGVnb3J5IiwidHJhY2UiLCJUcmFjZSIsIl9sZW4iLCJhcmd1bWVudHMiLCJhcmdzIiwiX2tleSIsImRlYnVnIiwiRGVidWciLCJfbGVuMiIsIl9rZXkyIiwiSW5mbyIsIl9sZW4zIiwiX2tleTMiLCJ3YXJuIiwiV2FybiIsIl9sZW40IiwiX2tleTQiLCJfbGVuNSIsIl9rZXk1IiwiZmF0YWwiLCJGYXRhbCIsIl9sZW42IiwiX2tleTYiLCJsZXZlbCIsInJlcGxhY2VQbGFjZWhvbGRlcnMiLCJyZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nIiwiaW5kZXgiLCJyZXBsYWNlQXJndW1lbnQiLCJzcGxpY2UiLCJzdHJpbmdpZnkiLCJhY2N1bXVsYXRvciIsImN1cnJlbnRWYWx1ZSIsImFycmF5Iiwic3RhY2siLCJhcmciLCJjYWNoZSIsIk9iamVjdCIsImFyZ3VtZW50IiwiZGF0YSIsInRvU3RyaW5nU3RyIiwiX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24iLCJnZXRMb2dnZXIiLCJsb2dnZXIiLCJfbG9nZ2VycyIsImFwcGx5TG9nZ2VyQ29uZmlnRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJhcHBseUxvZ2dpbmdMZXZlbCIsImFwcGx5QXBwZW5kZXJMb2dnaW5nTGV2ZWwiLCJhcHBseUNvbnNvbGVMb2dnZXIiLCJiaW5kIiwiYXBwbHlUZWxlbWV0cnlMb2dnZXIiLCJwYXJhbWV0ZXJWYWx1ZSIsIl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIiwic2V0VGhyZXNob2xkIiwiYXBwbHlBcHBlbmRlciIsIlRlbGVtZXRyeUFwcGVuZGVyIiwiQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciIsIkxvZ2dpbmdUaHJlc2hvbGQiLCJUZWxlbWV0cnlDb25maWd1cmF0aW9uIiwiY29udmVydExvZ2dpbmdMZXZlbFRvTG9nZ2luZ0xldmVsVHlwZSIsImxvZ2dpbmdMZXZlbCIsImNvbnZlcnRMb2dnaW5nTGV2ZWxUeXBlVG9Mb2dnaW5nTGV2ZWwiLCJsb2dnaW5nTGV2ZWxUeXBlIiwibWV0cmljcyIsIl9tZXRyaWNzIiwiZ2V0VGVsZW1ldHJ5TGV2ZWwiLCJUZWxlbWV0cnlMZXZlbCIsIk1ldHJpY3NDb25maWd1cmF0aW9uIiwiX3VybCIsInNldCIsInVybCIsIm1ldHJpY3NVcmwiLCJwYXRobmFtZSIsIl9lbnZpcm9ubWVudCIsImVudmlyb25tZW50IiwiX3RlbmFuY3kiLCJ0ZW5hbmN5IiwiX3Nlc3Npb25JZCIsInNlc3Npb25JZCIsIk1ldHJpY3NGYWN0b3J5IiwiZ2V0TWV0cmljc1NlcnZpY2UiLCJtZXRyaWNzU2VydmljZXMiLCJfbWV0cmljc1NlcnZpY2VzIiwibWV0cmljc0NvbmZpZ3VyYXRpb24iLCJUZWxlbWV0cnlVcmwiLCJFbnZpcm9ubWVudCIsIk1ldHJpY3NTZXJ2aWNlIiwic2V0VGVsZW1ldHJ5TGV2ZWwiLCJ0ZWxlbWV0cnlMZXZlbCIsInZhbHVlcyIsInJlcXVlc3RTaXplTGltaXQiLCJsb2NhdGlvbiIsImhvc3RuYW1lIiwiX21ldHJpY3NDb25maWd1cmF0aW9uIiwibWV0cmljIiwicHJldmlvdXNWYWx1ZSIsInJlc291cmNlIiwia2luZCIsIm1ldHJpY1JlY29yZCIsInRpbWVzdGFtcCIsImZ1bGxRdWFsaWZpZWROYW1lIiwiX2RvbWFpbiIsIlZlcnNpb25NYW5hZ2VyIiwiaWdub3JlZCIsInNlbmRNZXRyaWNzSWZBYmxlIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwiX2NhbGxlZSIsIm1ldHJpY3NNZXNzYWdlcyIsImZvcm1EYXRhIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwiRm9ybURhdGEiLCJhcHBlbmQiLCJyZWNvcmRzIiwiZmV0Y2giLCJtZXRob2QiLCJib2R5IiwiYWJydXB0Iiwic2VudCIsInN0b3AiLCJfeCIsImFwcGx5IiwiX3NlbmRNZXRyaWNzSWZBYmxlIiwiX2NhbGxlZTIiLCJfY2FsbGVlMiQiLCJfY29udGV4dDIiLCJfaXNTZW5kaW5nIiwic2xpY2UiLCJ0aGVuIiwicmVzcG9uc2UiLCJjb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUb1RlbGVtZXRyeUxldmVsVHlwZSIsImNvbnZlcnRUZWxlbWV0cnlMZXZlbFR5cGVUb1RlbGVtZXRyeUxldmVsIiwidGVsZW1ldHJ5TGV2ZWxUeXBlIiwiUGVlckNvbm5lY3Rpb25TZXJ2aWNlIiwiX3BlZXJDb25uZWN0aW9uRmFjdG9yeSIsImluaXRpYXRlSW5pdGlhbFByZWNhY2hpbmciLCJwcmVjYWNoZUNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIiLCJfcHJlY2FjaGVDcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyIiwiX2NhY2hlZCIsImRpcmVjdGlvbiIsInBlZXJDb25uZWN0aW9uIiwiY3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlciIsIl9jcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyIiwiX2NhbGxlZTMiLCJfYXJnczMiLCJfY2FsbGVlMyQiLCJfY29udGV4dDMiLCJjcmVhdGVQZWVyQ29ubmVjdGlvbiIsIl9yZWYiLCJzdXBwb3J0c0FkZFRyYW5zY2VpdmVyIiwidmlkZW9UcmFuc2NlaXZlciIsImF1ZGlvVHJhbnNjZWl2ZXIiLCJvcHRpb25zIiwiYWRkVHJhbnNjZWl2ZXIiLCJ0MCIsInQxIiwidDIiLCJjcmVhdGVPZmZlciIsInQzIiwibG9jYWxPZmZlciIsIm9mZmVyVG9SZWNlaXZlQXVkaW8iLCJvZmZlclRvUmVjZWl2ZVZpZGVvIiwidDQiLCJ0NSIsIlZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkiLCJSdGNDb25maWd1cmF0aW9uTWFuYWdlciIsInRydW5jYXRlSWNlU2VydmVycyIsImNvbmZpZ3VyYXRpb24iLCJpY2VTZXJ2ZXJzIiwiaSIsInVybHMiLCJ1c2VybmFtZSIsImNyZWRlbnRpYWwiLCJ1cGRhdGVTdGF0aXN0aWNUaW1lb3V0IiwiUnRjQ29ubmVjdGlvbk1vbml0b3IiLCJtZWRpYVN0cmVhbSIsImVzdGltYXRlZFJvdW5kVHJpcFRpbWUiLCJfcGVlckNvbm5lY3Rpb24iLCJfZXN0aW1hdGVkUm91bmRUcmlwVGltZSIsIl90cmFja3NUb01vbml0b3IiLCJnZXRUcmFja3MiLCJtYXAiLCJ0cmFjayIsInBhcnNlZFNEUCIsIlNkcFBhcnNlciIsImN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbiIsInNkcCIsIl9lc3RpbWF0ZWRBdWRpb0NvZGVjIiwiYXVkaW9Db2RlYyIsIl9lc3RpbWF0ZWRWaWRlb0NvZGVjIiwidmlkZW9Db2RlYyIsInVwZGF0ZVN0YXRpc3RpYyIsIl9ydGNTdGF0aXN0aWMiLCJfaXNNb25pdG9yUnVubmluZyIsIl91cGRhdGVUaW1lb3V0IiwiY2xlYXJUaW1lb3V0IiwiX3VwZGF0ZVN0YXRpc3RpYyIsIl9pZ25vcmVkIiwiZ2V0S2luZEZvclNhZmFyaTExIiwidXBkYXRlU3RhdGlzdGljTGVnYWN5IiwiaWQiLCJnZXRTdGF0cyIsInN0YXRzIiwicnRjU3RhdGlzdGljcyIsInJvdW5kVHJpcFRpbWUiLCJsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAiLCJyZXBvcnQiLCJjdXJyZW50Um91bmRUcmlwVGltZSIsIm1lZGlhVHlwZSIsImNvZGVjIiwiY29kZWNJZCIsIm1pbWVUeXBlIiwiX3RoaXMkX3J0Y1N0YXRpc3RpYyR2IiwiX3RoaXMkX3J0Y1N0YXRpc3RpYyR2MiIsIl90aGlzJF9ydGNTdGF0aXN0aWMkdjMiLCJfdGhpcyRfcnRjU3RhdGlzdGljJHY0IiwiX3RoaXMkX3J0Y1N0YXRpc3RpYyR2NSIsImJ5dGVzIiwiYnl0ZXNSZWNlaXZlZCIsInByZXZpb3VzQnl0ZXNSZWNlaXZlZCIsImJ5dGVzRGVsdGEiLCJ0aW1lRGVsdGEiLCJiaXRyYXRlIiwiZmxvb3IiLCJzc3JjIiwicGFja2V0c0xvc3QiLCJwYWNrZXRzUmVjZWl2ZWQiLCJnZXRDb2RlY0J5VHlwZSIsInZpZGVvIiwiZnJhbWVzRGVjb2RlZCIsImZwcyIsInJvdW5kIiwiX3VwZGF0ZVN0YXRpc3RpY0xlZ2FjeSIsImdldFN0YXRzTGVnYWN5IiwicmVzdWx0IiwibmFtZXMiLCJzdGF0IiwiX3NkcCIsInNkcFNwbGl0QnlMaW5lcyIsInNkcFNwbGl0QnlUcmFja3MiLCJfYXVkaW9Db2RlYyIsImFwcGx5Q29kZWMiLCJfdmlkZW9Db2RlYyIsIl9pc0F1ZGlvVHJhY2tFbmFibGVkIiwiaXNUcmFja0J5VHlwZUVuYWJsZWQiLCJfaXNWaWRlb1RyYWNrRW5hYmxlZCIsInNkcFNlY3Rpb25Gb3JUeXBlIiwiZmluZCIsInNkcFRyYWNrIiwidXNlZENvZGVjTGluZSIsInNkcExpbmUiLCJ1c2VkQ29kZWMiLCJjb2RlY05hbWUiLCJWYW5pbGxhUGVlckNvbm5lY3Rpb24iLCJ3ZWJraXRSVENQZWVyQ29ubmVjdGlvbiIsIlJUQ1BlZXJDb25uZWN0aW9uIiwiY3VycmVudExvY2FsRGVzY3JpcHRpb24iLCJjb25uZWN0aW9uU3RhdGUiLCJpY2VDb25uZWN0aW9uU3RhdGUiLCJnZXRDb25maWd1cmF0aW9uIiwic2V0Q29uZmlndXJhdGlvbiIsIl9jcmVhdGVPZmZlciIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiX2NyZWF0ZUFuc3dlciIsImNyZWF0ZUFuc3dlciIsIl94MiIsIl9zZXRMb2NhbERlc2NyaXB0aW9uIiwiZGVzY3JpcHRpb24iLCJzZXRMb2NhbERlc2NyaXB0aW9uIiwiUlRDU2Vzc2lvbkRlc2NyaXB0aW9uIiwiX3gzIiwiX3NldFJlbW90ZURlc2NyaXB0aW9uIiwiX2NhbGxlZTQiLCJfZGVzY3JpcHRpb24kc2RwIiwiaGFzQ3J5cHRvIiwiX2NhbGxlZTQkIiwiX2NvbnRleHQ0Iiwic2V0UmVtb3RlRGVzY3JpcHRpb24iLCJfeDQiLCJnZXRTZW5kZXJzIiwic2VsZWN0b3IiLCJfdGhpczMiLCJhZGRTdHJlYW0iLCJfdGhpczQiLCJhZGRUcmFjayIsIm9udHJhY2siLCJoYW5kbGVyIiwib25pY2VjYW5kaWRhdGUiLCJvbmNvbm5lY3Rpb25zdGF0ZWNoYW5nZSIsIm9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlIiwiY2xvc2UiLCJfY3JlYXRlUGVlckNvbm5lY3Rpb24iLCJzdWJqZWN0IiwiX3N1YmplY3QiLCJzdWJzY3JpYmUiLCJEaXNwb3NhYmxlTGlzdGVuZXIiLCJfRGlzcG9zYWJsZSIsIl9pbmhlcml0cyIsIl9zdXBlciIsIl9jcmVhdGVTdXBlciIsImxpc3RlbmVycyIsImlkeCIsIl9saXN0ZW5lcnMiLCJfdmFsdWUiLCJjaGFuZ2VkIiwiY29tcGFyYWJsZSIsImVxdWFscyIsImdldEVudmlyb25tZW50RnJvbVVybCIsImJhc2VVUkwiLCJvcmlnaW4iLCJfY2xpZW50U2Vzc2lvbklkIiwiX2xvYWRlZFRpbWVzdGFtcCIsIl9yZWFkT25seUluaXRpYWxpemVkIiwiX3JlYWRPbmx5RGlzY292ZXJ5VXJpIiwiX3JlYWRPbmx5UGVlckNvbm5lY3Rpb25GYWN0b3J5IiwiX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZSIsIl9hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24iLCJfYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSIsIl9hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSIsIl9mb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0IiwiX3NraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlcyIsIl93ZWJQbGF5ZXJMb2FkZXIiLCJfc2hha2FQbGF5ZXJMb2FkZXIiLCJfaGxzSnNMb2FkZXIiLCJfbWV0cmljc1NlcnZpY2UiLCJfYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IiLCJfdGVsZW1ldHJ5VXJsIiwiX21heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMiLCJyZXRyaWVzQW1vdW50IiwiX3RlbGVtZXRyeUxldmVsIiwiYXBwbHlUZWxlbWV0cnlDb25maWd1cmF0aW9uIiwidGVsZW1ldHJ5Q29uZmlndXJhdGlvbiIsImNsaWVudFNlc3Npb25JZCIsImlnbm9yZWRFbnZpcm9ubWVudCIsImlnbm9yZWREaXNjb3ZlcnlVcmkiLCJ0ZWxlbWV0cnlVcmwiLCJ0ZWxlbWV0cnlBcHBlbmRlciIsImlnbm9yZWRUZW5hbmN5IiwiYXBwbHlNZXRyaWNzQ29uZmlndXJhdGlvbiIsIkRpc2NvdmVyeVVyaSIsImlnbm9yZWRUZWxlbWV0cnlMZXZlbCIsImFwcGx5QXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJhcHBseUF1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbkZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uIiwiYXBwbHlGb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0RnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJhcHBseVNraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlc0Zyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uIiwiYXBwbHlEaXNjb3ZlcnlVcmlEZWZhdWx0RnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJkaXNjb3ZlcnlVcmkiLCJnZXRUZWxlbWV0cnlVcmwiLCJjaGFubmVsVG9rZW4iLCJ1cmlWYWx1ZSIsImJhc2VVUklWYWx1ZSIsImluaXQiLCJfaW5pdGlhbGl6ZWQiLCJwZWVyQ29ubmVjdGlvbkZhY3RvcnkiLCJjb25zb2xlTG9nZ2luZ0xldmVsIiwiY29uc29sZUFwcGVuZGVyIiwiYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSIsImF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlIiwid2ViUGxheWVyTG9hZGVyIiwic2hha2FQbGF5ZXJMb2FkZXIiLCJobHNKc0xvYWRlciIsInNlZ21lbnRzIiwicHJvdG9jb2wiLCJ1bnNoaWZ0IiwiZW5kc1dpdGgiLCJqb2luIiwiQml0cmF0ZVN0YXRlIiwiQml0cmF0ZU1vZGUiLCJkZWZhdWx0U3RyZWFtVGVybWluYXRpb25SZWFzb24iLCJmYWlsdXJlQ291bnRDbGVhblVwSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyIsInN0YW5kYnlQb2xsaW5nSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyIsIkNoYW5uZWwiLCJ2aWRlb0VsZW1lbnQiLCJjaGFubmVsQ29udGV4dE9wdGlvbnMiLCJ0YXJnZXRMYWciLCJ2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrIiwiZW5jb2RlZFZpZGVvU3RyZWFtU2luayIsImVuY29kZWRBdWRpb1N0cmVhbVNpbmsiLCJoYXNJbnNlcnRhYmxlU3RyZWFtcyIsIl90b2tlbkNvbnRleHQiLCJUb2tlbkNvbnRleHQiLCJfY2hhbm5lbENvbnRleHQiLCJDaGFubmVsQ29udGV4dCIsIl9wZWVyQ29ubmVjdGlvbkNvbnRleHQiLCJQZWVyQ29ubmVjdGlvbkNvbnRleHQiLCJfc3RhdGVDb250ZXh0IiwiU3RhdGVDb250ZXh0IiwiX2V4cG9uZW50aWFsQmFja29mZiIsIkV4cG9uZW50aWFsQmFja29mZiIsIl9jaGFubmVsU3RhcnRUaW1lIiwiX3JlYWRPbmx5VmlkZW9FbGVtZW50IiwiX3JlYWRPbmx5VG9rZW4iLCJfcmVhZE9ubHlQZWVyQ29ubmVjdGlvbiIsIl9yZWFkT25seVN0YXRlIiwic3RhdGUiLCJfcmVhZE9ubHlBdXRvTXV0ZWQiLCJhdXRvTXV0ZWQiLCJfcmVhZE9ubHlBdXRvUGF1c2VkIiwiYXV0b1BhdXNlZCIsIl9yZWFkT25seVRva2VuRXhwaXJpbmciLCJ0b2tlbkV4cGlyaW5nIiwiX3JlYWRPbmx5QXV0aG9yaXplZCIsImF1dGhvcml6ZWQiLCJfcmVhZE9ubHlPbmxpbmUiLCJvbmxpbmUiLCJfcmVhZE9ubHlMb2FkaW5nIiwibG9hZGluZyIsIl9yZWFkT25seVBsYXlpbmciLCJwbGF5aW5nIiwiX3JlYWRPbmx5U3RhbmRieSIsInN0YW5kYnkiLCJfcmVhZE9ubHlTdG9wcGVkIiwic3RvcHBlZCIsIl9yZWFkT25seVRhcmdldExhZyIsIl9yZWFkT25seUxhZyIsImxhZyIsIl9yZWFkT25seUJpdHJhdGVMaW1pdCIsImJpdHJhdGVMaW1pdCIsIl9yZWFkT25seVJlc29sdXRpb24iLCJyZXNvbHV0aW9uIiwiX3JlYWRPbmx5RmFpbHVyZUNvdW50IiwiZmFpbHVyZUNvdW50IiwiX3JlYWRPbmx5RW5kUG9pbnQiLCJlbmRQb2ludCIsIl9yZWFkT25seVN0cmVhbSIsInN0cmVhbSIsIl9yZWFkT25seVJ0Y1N0YXRpc3RpY3MiLCJfcmVhZE9ubHlNZWRpYVN0cmVhbSIsIl9zZXNzaW9uVGVsZW1ldHJ5IiwiU2Vzc2lvblRlbGVtZXRyeSIsImNoYW5uZWxEaXNwb3NhYmxlcyIsIl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIiLCJoYW5kbGVWaWRlb01ldGFEYXRhQ2hhbmdlZCIsInJlbmRlcmVyRGlzcG9zYWJsZXMiLCJ2aWRlb1RlbGVtZXRyeSIsImRhdGFzZXQiLCJWaWRlb1RlbGVtZXRyeSIsInNldHVwTGlzdGVuZXJGb3JUaW1lVG9GaXJzdFRpbWUiLCJzZXR1cExpc3RlbmVyRm9yUmVidWZmZXJpbmciLCJDaGFubmVsU3RhdGUiLCJyZXN0YXJ0QWZ0ZXJTdG9wIiwiY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0Iiwib25WaWRlb1Jlc29sdXRpb25DaGFuZ2VzIiwiZWxhcHNlZEluTWlsbGlzZWNvbmRzIiwiY2hhbm5lbEluaXRpYWxpemF0aW9uIiwiZ2V0VGltZSIsImxpbWl0Qml0cmF0ZSIsImRlc3Ryb3lTdHJlYW1PblVubW91bnQiLCJzdGFydCIsInBhdXNlIiwic3JjT2JqZWN0Iiwid2lkdGgiLCJ2aWRlb1dpZHRoIiwiaGVpZ2h0IiwidmlkZW9IZWlnaHQiLCJEaW1lbnNpb24iLCJkaXNwb3NhYmxlcyIsInNldEJpdHJhdGVMaW1pdCIsImNsZWFyQml0cmF0ZUxpbWl0IiwiYml0cmF0ZUluQml0c1BlclNlY29uZCIsInN0YXR1cyIsInVwZGF0ZVRhcmdldExhZyIsIl9zdG9wIiwicmVhc29uIiwiaXNTdGFydGluZyIsInByb2Nlc3NTdG9wIiwiY2xlYW5VcFJlc291cmNlcyIsIl9yZXN1bWUiLCJwbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudCIsInJlc3VtZSIsIm11dGUiLCJtdXRlZCIsInVubXV0ZSIsIl9kaXNwb3NlIiwiaXNEaXNwb3NlZCIsImdldFVyaSIsIl9zdGFydCIsInByb2Nlc3NTdGFydCIsIl9wcm9jZXNzU3RhcnQiLCJfY2FsbGVlNSIsIl90aGlzNSIsImxpc3Rlbk9uU3RyZWFtU2V0dXAiLCJoYW5kbGVTdHJlYW1GYWlsdXJlQ2FsbGJhY2siLCJzdHJlYW1QbGF5ZXIiLCJfY2FsbGVlNSQiLCJfY29udGV4dDUiLCJEaXNjb3ZlcnkiLCJoYW5kbGVTdHJlYW1GYWlsdXJlIiwiU3RyZWFtRmFjdG9yeSIsInRpbWVvdXRJZCIsImdldFJldHJ5SW50ZXJ2YWwiLCJfcmVzdGFydEFmdGVyU3RvcCIsIl9jYWxsZWU2IiwiX2NhbGxlZTYkIiwiX2NvbnRleHQ2IiwiX3BsYXkiLCJfY2FsbGVlNyIsIl9jYWxsZWU3JCIsIl9jb250ZXh0NyIsInBsYXkiLCJnZXRFeHBvbmVudGlhbEJhY2tvZmZJbnRlcnZhbEJ5RmFpbHVyZUNvdW50IiwiX2hhbmRsZVN0cmVhbUZhaWx1cmUiLCJfY2FsbGVlOCIsIl9jYWxsZWU4JCIsIl9jb250ZXh0OCIsIl90aGlzNiIsImRlc3Ryb3lTdHJlYW0iLCJfcmVmMiIsInBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMiLCJfcGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQiLCJfY2FsbGVlOSIsIl90aGlzNyIsInBsYXlQcm9taXNlIiwiX2NhbGxlZTkkIiwiX2NvbnRleHQ5IiwiaGFzQXVkaW9UcmFjayIsImZpbHRlciIsImF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlT2ZmIiwiQ2hhbm5lbHMiLCJjcmVhdGVDaGFubmVsIiwiY2hhbm5lbE9wdGlvbnMiLCJkZWZhdWx0VGFyZ2V0TGFnIiwiX29wdGlvbnMkdGFyZ2V0TGFnIiwiYXBwbHlTdGF0dXMiLCJhcHBseVNlc3Npb25BbmRTdHJlYW1Qcm9wZXJ0aWVzVG9WaWRlb0VsZW1lbnQiLCJtYXBTdWJzY3JpYmVTdGF0dXNUb0NoYW5uZWxTdGF0dXMiLCJkZWZhdWx0RGlzY292ZXJ5VXJpIiwiQml0cmF0ZU1vZGVNYXBwaW5nIiwiY29udmVydEJpdHJhdGVNb2RlVG9CaXRyYXRlTW9kZVR5cGUiLCJiaXRyYXRlTW9kZSIsIkJpdHJhdGVTdGF0ZU1hcHBpbmciLCJjb252ZXJ0Qml0cmF0ZVN0YXRlVG9CaXRyYXRlU3RhdGVUeXBlIiwiYml0cmF0ZVN0YXRlIiwiZGlzY292ZXJ5Q2FjaGVJbnRlcnZhbCIsIl9wcmVjYWNoZUNsb3Nlc3RFbmRQb2ludERpc2NvdmVyeSIsImRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50V2l0aENhY2hpbmciLCJwcmVjYWNoZUNsb3Nlc3RFbmRQb2ludERpc2NvdmVyeSIsIl9kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nIiwiZGlzY292ZXJ5U2VydmljZSIsImNhY2hlZFZhbHVlIiwiX2NhY2hlIiwiRGlzY292ZXJ5U2VydmljZSIsImRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50IiwiY2xlYXJDYWNoZWRDbG9zZXN0RW5kcG9pbnQiLCJkZWZhdWx0VGltZW91dCIsIl91cmkiLCJfZGlzY292ZXJOZWFyYnlFbmRQb2ludHMiLCJ0aW1lb3V0IiwiYXNTdHJpbmciLCJlbmRQb2ludHMiLCJyYWNlIiwiXyIsIm9rIiwidGV4dCIsIkVuZFBvaW50IiwiZGlzY292ZXJOZWFyYnlFbmRQb2ludHMiLCJfZGlzY292ZXJDbG9zZXN0RW5kUG9pbnQiLCJmYWlsZWRSZXF1ZXN0cyIsInByb3BhZ2F0ZUZhaWx1cmVJZkFsbFJlcXVlc3RzRmFpbGVkIiwiX2FyZ3MyIiwicGluZyIsInRpbWUiLCJfZGlzY292ZXJ5VXJpIiwiYnVpbGREaXNjb3ZlcnlVcmwiLCJzZGtWZXJzaW9uIiwic2VhcmNoIiwiVVJMU2VhcmNoUGFyYW1zIiwiYXBpVmVyc2lvbiIsIl90aW1lb3V0IiwiX3JvdW5kVHJpcFRpbWUiLCJfcGluZyIsImZpbmlzaGVkIiwiYnVpbGRQaW5nVXJsIiwiX3N1YnNjcmliZSIsImxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uIiwiY2xpZW50VmVyc2lvbiIsImJvZHlXaXRoT2ZmZXIiLCJib2R5V2l0aG91dE9mZmVyIiwiaHR0cFJlc3BvbnNlIiwic3Vic2NyaWJlUmVzcG9uc2UiLCJidWlsZFVybCIsImJlYXJlclRva2VuIiwiaHR0cFJvdW5kVHJpcFRpbWUiLCJzZXNzaW9uRGVzY3JpcHRpb24iLCJjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvbiIsImNyZWF0ZU9mZmVyRGVzY3JpcHRpb24iLCJtYXBIdHRwU3RhdHVzVG9TdWJzY3JpYmVTdGF0dXMiLCJjb252ZXJ0SHR0cFJlc3BvbnNlVG9TdWJzY3JpYmVSZXNwb25zZSIsIl9wdWJsaXNoIiwibWFwSHR0cFN0YXR1c1RvUHVibGlzaFN0YXR1cyIsImNvbnZlcnRIdHRwUmVzcG9uc2VUb1B1Ymxpc2hSZXNwb25zZSIsInB1Ymxpc2giLCJfeDUiLCJfeDYiLCJfeDciLCJzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlIiwic2hhcmVkU2VjcmV0IiwibWFwSHR0cFN0YXR1c1RvU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMiLCJjb252ZXJ0SHR0cFJlc3BvbnNlVG9TZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlIiwiX3g4IiwiX3g5IiwiX2xpbWl0Qml0cmF0ZSIsIm1hcEh0dHBTdGF0dXNUb1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzIiwiX3gxMCIsIl94MTEiLCJfeDEyIiwiX3gxMyIsIl94MTQiLCJfYWRkSWNlQ2FuZGlkYXRlcyIsImNhbmRpZGF0ZXMiLCJkaXNjb3ZlcnlDb21wbGV0ZWQiLCJhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UiLCJfYXJnczYiLCJtYXBIdHRwU3RhdHVzVG9BZGRJY2VDYW5kaWRhdGVzU3RhdHVzIiwiY29udmVydEh0dHBSZXNwb25zZVRvQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlIiwiYWRkSWNlQ2FuZGlkYXRlcyIsIl94MTUiLCJfeDE2IiwiX3gxNyIsIl9kZXN0cm95U3RyZWFtIiwiZGVzdHJveVN0cmVhbVJlc3BvbnNlIiwibWFwSHR0cFN0YXR1c1RvU2V0RGVzdHJveVN0cmVhbVN0YXR1cyIsImNvbnZlcnRIdHRwUmVzcG9uc2VUb0Rlc3Ryb3lTdHJlYW1SZXNwb25zZSIsIl94MTgiLCJfeDE5IiwiX2Rlc3Ryb3lTdHJlYW1PblVubW91bnQiLCJzZW5kQmVhY29uIiwiX3gyMCIsIl94MjEiLCJwYXRoIiwicGF0aEFzQXJyYXkiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJfY29udmVydEh0dHBSZXNwb25zZVRvU3Vic2NyaWJlUmVzcG9uc2UiLCJqc29uIiwicnRjQ29uZmlndXJhdGlvbiIsImNvbnZlcnRJUnRjQ29uZmlndXJhdGlvblRvUlRDQ29uZmlndXJhdGlvbiIsImNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UiLCJjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UiLCJfeDIyIiwiX3gyMyIsIl9jb252ZXJ0SHR0cFJlc3BvbnNlVG9QdWJsaXNoUmVzcG9uc2UiLCJfY2FsbGVlMTAiLCJwdWJsaXNoUmVzcG9uc2UiLCJfY2FsbGVlMTAkIiwiX2NvbnRleHQxMCIsIl94MjQiLCJfeDI1IiwiYnVuZGxlUG9saWN5IiwiaWNlQ2FuZGlkYXRlUG9vbFNpemUiLCJpY2VUcmFuc3BvcnRQb2xpY3kiLCJydGNwTXV4UG9saWN5IiwiX2NvbnZlcnRIdHRwUmVzcG9uc2VUb1NldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UiLCJfY2FsbGVlMTEiLCJfY2FsbGVlMTEkIiwiX2NvbnRleHQxMSIsIl94MjYiLCJfY29udmVydEh0dHBSZXNwb25zZVRvQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlIiwiX2NhbGxlZTEyIiwiX2NhbGxlZTEyJCIsIl9jb250ZXh0MTIiLCJfeDI3IiwiX2NvbnZlcnRIdHRwUmVzcG9uc2VUb0Rlc3Ryb3lTdHJlYW1SZXNwb25zZSIsIl9jYWxsZWUxMyIsIl9jYWxsZWUxMyQiLCJfY29udGV4dDEzIiwiX3gyOCIsIkluc2VydGFibGVTdHJlYW1zIiwic2V0dXBNZWRpYVN0cmVhbVRyYWNrVHJhbnNmb3JtIiwidHJhbnNmb3JtIiwidmlkZW9UcmFjayIsImdldFZpZGVvVHJhY2tzIiwidHJhbnNmb3JtZXIiLCJUcmFuc2Zvcm1TdHJlYW0iLCJwcm9jZXNzb3IiLCJnZW5lcmF0b3IiLCJzb3VyY2UiLCJyZWFkYWJsZSIsInNpbmsiLCJ3cml0YWJsZSIsInBpcGVUaHJvdWdoIiwicGlwZVRvIiwidHJhbnNmb3JtZWRTdHJlYW0iLCJNZWRpYVN0cmVhbSIsImdldEF1ZGlvVHJhY2tzIiwiYXVkaW9UcmFjayIsImljZUNhbmRpZGF0ZUFjY3VtdWxhdGlvbkludGVydmFsIiwiZGVmYXVsdFN0cmVhbVNldHVwVGltZW91dCIsIlJlYWxUaW1lU3RyZWFtIiwiY2hhbm5lbENvbnRleHQiLCJwZWVyQ29ubmVjdGlvbkNvbnRleHQiLCJhbGwiLCJfcmVmMyIsIl9zbGljZWRUb0FycmF5IiwiX3JlZjMkIiwic3VwcG9ydHNTZXRDb25maWd1cmF0aW9uIiwic3VwcG9ydHNHZXRDb25maWd1cmF0aW9uIiwiX3JlZjQiLCJhcHBseVJ0Y0NvbmZpZ3VyYXRpb24iLCJzdWJtaXRDYW5kaWRhdGVzVGltZW91dCIsImNhbmNlbERpc2NvdmVyeSIsImNhbmRpZGF0ZSIsIl9yZWY1IiwicmV0cnlDYWxsYmFjayIsIm9uTGluZSIsInJlY29ubmVjdFBlZXJDb25uZWN0aW9uIiwibWVkaWFTdHJlYW1Qcm9taXNlIiwic3RyZWFtcyIsInRyYWNrTGlzdGVuZXIiLCJhbnN3ZXIiLCJfcmVmNiIsIm1hcFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzVG9DaGFubmVsU3RhdHVzIiwicnRjQ29ubmVjdGlvbk1vbml0b3IiLCJydGNTdGF0aXN0aWMiLCJzdGF0aXN0aWNzIiwicnRjVmlkZW9TdGF0aXN0aWMiLCJydGNBdWRpb1N0YXRpc3RpYyIsImF1ZGlvIiwiYXVkaW9UcmFja0ZhaWxlZCIsInZpZGVvVHJhY2tGYWlsZWQiLCJfYXBwbHlSdGNDb25maWd1cmF0aW9uIiwib3B0aW9uYWxQZWVyQ29ubmVjdGlvbiIsIm5ld1J0Y0NvbmZpZ3VyYXRpb24iLCJfb2JqZWN0U3ByZWFkIiwiX3BlZXJDb25uZWN0aW9uJGN1cnJlIiwiaXNDbGllbnRPZmZlckZsb3ciLCJpY2VSZXN0YXJ0Iiwib2ZmZXIiLCJSZWFsVGltZVN0cmVhbUZhY3RvcnkiLCJjcmVhdGUiLCJ0b2tlbkNhcGFiaWxpdGllcyIsIl9fQlVJTERfVkVSU0lPTl9fIiwiX2RlZmF1bHRWZXJzaW9uIiwiX3RlbGVtZXRyeVNlcnZpY2UiLCJUZWxlbWV0cnlTZXJ2aWNlIiwibG9nUmVjb3JkIiwiX2xvZ3MiLCJzZW5kTG9nc0lmQWJsZSIsImxvZ01lc3NhZ2VzIiwiX3NlbmRMb2dzSWZBYmxlIiwibnVtYmVyT2ZMb2dzVG9TZW5kIiwic2l6ZU9mTG9nc1RvU2VuZCIsImdldExvZ1NpemUiLCJzdW0iLCJkdXJhdGlvbiIsIl9kdXJhdGlvbiIsImlzTmVnYXRpdmUiLCJhYnMiLCJvZmZzZXQiLCJtaWxsaXNlY29uZHMiLCJzZWNvbmRzIiwibWludXRlcyIsImhvdXJzIiwicGFydHMiLCJTdHJpbmciLCJwYWRTdGFydCIsInRhcmdldExlbmd0aCIsInBhZFN0cmluZyIsInJlcGVhdCIsImRlZmF1bHRCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiZGVmYXVsdE1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJkZWZhdWx0TWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsImJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJtaW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwibWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsIl9iYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiX21pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJfbWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsImJhY2tvZmZJbnRlcnZhbEluU2Vjb25kcyIsInJhbmRvbWl6YXRpb24iLCJleHBvbmVudGlhbEJhY2tvZmYiLCJwb3ciLCJleHBvbmVudGlhbEJhY2tvZmZXaXRoUmFuZG9taXphdGlvbiIsImV4cG9uZW50aWFsQmFja29mZldpdGhSYW5kb21pemF0aW9uSW5NaWxsaXNlY29uZCIsIm1heCIsIm1pbiIsIm90aGVyIiwiX25ldHdvcmtNb25pdG9yIiwicmVjb3JkRm9yZWdyb3VuZENoYW5nZSIsInJlY29yZE5ldHdvcmtSVFRVcGRhdGUiLCJyZWNvcmROZXR3b3JrVHlwZUNoYW5nZVVwZGF0ZSIsImRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5IiwicmVjb3JkTmV0d29ya0Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5VXBkYXRlIiwidGltZVNpbmNlTGFzdENoYW5nZSIsIm5ld1JUVCIsIm9sZFJ0dCIsIl9sYXN0TmV0d29ya1N0YXRpc3RpY3MiLCJuZXdOZXR3b3JrVHlwZSIsIm9sZE5ldHdvcmtUeXBlIiwibmV3Q2FwYWNpdHkiLCJvbGRDYXBhY2l0eSIsImNoYW5uZWxTdGFydFRpbWUiLCJfc3RyZWFtSWQiLCJfc3RhcnRSZWNvcmRpbmdGaXJzdEZyYW1lIiwiX2xpc3RlblRvRmlyc3RUaW1lIiwiY2FsbFRpbWVUb0ZpcnN0RnJhbWUiLCJfY2xlYXJUaW1lVG9GaXJzdEZyYW1lTGlzdGVuZXIiLCJfbGlzdGVuRm9yU3RhbGwiLCJvblN0YWxsIiwiX2xpc3RlbkZvckNvbnRpbnVhdGlvbiIsImV2ZW50Iiwib25Db250aW51YXRpb24iLCJfY2xlYXJSZWJ1ZmZlcmluZ0xpc3RlbmVyIiwicHVzaFRpbWVUb0ZpcnN0RnJhbWUiLCJwdXNoQ2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSIsIl90aW1lVG9GaXJzdEZyYW1lIiwiZHVyYXRpb25TaW5jZVBhZ2VMb2FkIiwiX2NoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUiLCJfdmlkZW9TdGFsbGVkIiwiYnVmZmVyZWQiLCJidWZmZXJMZW5ndGgiLCJoYXNOb3RQcm9ncmVzc2VkU2luY2VMYXN0UHJvZ3Jlc3NFdmVudCIsImVuZCIsIl9sYXN0UHJvZ3Jlc3MiLCJ0aW1lU2luY2VTdG9wIiwibmV3UmVzb2x1dGlvbiIsIl92aWRlb1Jlc29sdXRpb24iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxPOzs7Ozs7Ozs7Ozs7O0FDVmU7QUFDZjtBQUNBLHdDQUF3QyxTQUFTO0FBQ2pEO0FBQ0EsQzs7Ozs7Ozs7Ozs7Ozs7QUNKZTtBQUNmO0FBQ0EsQzs7Ozs7Ozs7Ozs7Ozs7O0FDRnFEO0FBQ3RDO0FBQ2YsaUNBQWlDLDZEQUFnQjtBQUNqRCxDOzs7Ozs7Ozs7Ozs7OztBQ0hlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDOzs7Ozs7Ozs7Ozs7OztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ2U7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDOzs7Ozs7Ozs7Ozs7OztBQzdCZTtBQUNmO0FBQ0E7QUFDQTtBQUNBLEM7Ozs7Ozs7Ozs7Ozs7OztBQ0orQztBQUMvQztBQUNBLGlCQUFpQixrQkFBa0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsMERBQWE7QUFDL0M7QUFDQTtBQUNlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFH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QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsaUJBQWlCLGlCQUFpQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0EscURBQXFEO0FBQ3JELE9BQU87QUFDUDtBQUNBLE9BQU87QUFDUCw0RUFBNEU7QUFDNUU7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsNEJBQTRCLHFCQUFxQjtBQUNqRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBLHFDQUFxQywwQkFBMEI7QUFDL0Q7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDZCQUE2QiwwQkFBMEIsZUFBZTtBQUN0RTs7QUFFTztBQUNQO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7VUM1bEJBO1VBQ0E7O1VBRUE7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBOztVQUVBO1VBQ0E7O1VBRUE7VUFDQTtVQUNBOzs7OztXQ3JCQTtXQUNBO1dBQ0E7V0FDQSxjQUFjLDBCQUEwQixFQUFFO1dBQzFDLGNBQWMsZUFBZTtXQUM3QixnQ0FBZ0MsWUFBWTtXQUM1QztXQUNBLEU7Ozs7O1dDUEE7V0FDQTtXQUNBO1dBQ0E7V0FDQSx3Q0FBd0MseUNBQXlDO1dBQ2pGO1dBQ0E7V0FDQSxFOzs7OztXQ1BBLDZDQUE2Qyx3REFBd0QsRTs7Ozs7V0NBckc7V0FDQTtXQUNBO1dBQ0Esc0RBQXNELGtCQUFrQjtXQUN4RTtXQUNBLCtDQUErQyxjQUFjO1dBQzdELEU7Ozs7VUNOQTtVQUNBO1VBQ0E7VUFDQTtVQUNBIiwiZmlsZSI6ImNoYW5uZWxzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW10sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wicGhlbml4XCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcInBoZW5peFwiXSA9IGZhY3RvcnkoKTtcbn0pKHNlbGYsIGZ1bmN0aW9uKCkge1xucmV0dXJuICIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7XG4gIGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIGFycjJbaV0gPSBhcnJbaV07XG4gIHJldHVybiBhcnIyO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjtcbn0iLCJpbXBvcnQgYXJyYXlMaWtlVG9BcnJheSBmcm9tIFwiLi9hcnJheUxpa2VUb0FycmF5LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KGFycik7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gIGlmIChzZWxmID09PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIH1cbiAgcmV0dXJuIHNlbGY7XG59IiwiZnVuY3Rpb24gYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBrZXksIGFyZykge1xuICB0cnkge1xuICAgIHZhciBpbmZvID0gZ2VuW2tleV0oYXJnKTtcbiAgICB2YXIgdmFsdWUgPSBpbmZvLnZhbHVlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJlamVjdChlcnJvcik7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChpbmZvLmRvbmUpIHtcbiAgICByZXNvbHZlKHZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICBQcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4oX25leHQsIF90aHJvdyk7XG4gIH1cbn1cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hc3luY1RvR2VuZXJhdG9yKGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzLFxuICAgICAgYXJncyA9IGFyZ3VtZW50cztcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIGdlbiA9IGZuLmFwcGx5KHNlbGYsIGFyZ3MpO1xuICAgICAgZnVuY3Rpb24gX25leHQodmFsdWUpIHtcbiAgICAgICAgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcIm5leHRcIiwgdmFsdWUpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX3Rocm93KGVycikge1xuICAgICAgICBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwidGhyb3dcIiwgZXJyKTtcbiAgICAgIH1cbiAgICAgIF9uZXh0KHVuZGVmaW5lZCk7XG4gICAgfSk7XG4gIH07XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn0iLCJpbXBvcnQgdG9Qcm9wZXJ0eUtleSBmcm9tIFwiLi90b1Byb3BlcnR5S2V5LmpzXCI7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCB0b1Byb3BlcnR5S2V5KGRlc2NyaXB0b3Iua2V5KSwgZGVzY3JpcHRvcik7XG4gIH1cbn1cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbnN0cnVjdG9yLCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pO1xuICByZXR1cm4gQ29uc3RydWN0b3I7XG59IiwiaW1wb3J0IHRvUHJvcGVydHlLZXkgZnJvbSBcIi4vdG9Qcm9wZXJ0eUtleS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBrZXkgPSB0b1Byb3BlcnR5S2V5KGtleSk7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiBvYmo7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gICAgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTtcbiAgfTtcbiAgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTtcbn0iLCJpbXBvcnQgc2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vc2V0UHJvdG90eXBlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICB9XG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwge1xuICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICB2YWx1ZTogc3ViQ2xhc3MsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH1cbiAgfSk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzdWJDbGFzcywgXCJwcm90b3R5cGVcIiwge1xuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KTtcbiAgaWYgKHN1cGVyQ2xhc3MpIHNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHtcbiAgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgaXRlcltTeW1ib2wuaXRlcmF0b3JdICE9IG51bGwgfHwgaXRlcltcIkBAaXRlcmF0b3JcIl0gIT0gbnVsbCkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkge1xuICB2YXIgX2kgPSBudWxsID09IGFyciA/IG51bGwgOiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgYXJyW1N5bWJvbC5pdGVyYXRvcl0gfHwgYXJyW1wiQEBpdGVyYXRvclwiXTtcbiAgaWYgKG51bGwgIT0gX2kpIHtcbiAgICB2YXIgX3MsXG4gICAgICBfZSxcbiAgICAgIF94LFxuICAgICAgX3IsXG4gICAgICBfYXJyID0gW10sXG4gICAgICBfbiA9ICEwLFxuICAgICAgX2QgPSAhMTtcbiAgICB0cnkge1xuICAgICAgaWYgKF94ID0gKF9pID0gX2kuY2FsbChhcnIpKS5uZXh0LCAwID09PSBpKSB7XG4gICAgICAgIGlmIChPYmplY3QoX2kpICE9PSBfaSkgcmV0dXJuO1xuICAgICAgICBfbiA9ICExO1xuICAgICAgfSBlbHNlIGZvciAoOyAhKF9uID0gKF9zID0gX3guY2FsbChfaSkpLmRvbmUpICYmIChfYXJyLnB1c2goX3MudmFsdWUpLCBfYXJyLmxlbmd0aCAhPT0gaSk7IF9uID0gITApO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgX2QgPSAhMCwgX2UgPSBlcnI7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghX24gJiYgbnVsbCAhPSBfaVtcInJldHVyblwiXSAmJiAoX3IgPSBfaVtcInJldHVyblwiXSgpLCBPYmplY3QoX3IpICE9PSBfcikpIHJldHVybjtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChfZCkgdGhyb3cgX2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBfYXJyO1xuICB9XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xufSIsImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuaW1wb3J0IGFzc2VydFRoaXNJbml0aWFsaXplZCBmcm9tIFwiLi9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHtcbiAgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHtcbiAgICByZXR1cm4gY2FsbDtcbiAgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7XG4gIH1cbiAgcmV0dXJuIGFzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgcmV0dXJuIG87XG4gIH07XG4gIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7XG59IiwiaW1wb3J0IGFycmF5V2l0aEhvbGVzIGZyb20gXCIuL2FycmF5V2l0aEhvbGVzLmpzXCI7XG5pbXBvcnQgaXRlcmFibGVUb0FycmF5TGltaXQgZnJvbSBcIi4vaXRlcmFibGVUb0FycmF5TGltaXQuanNcIjtcbmltcG9ydCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSBmcm9tIFwiLi91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qc1wiO1xuaW1wb3J0IG5vbkl0ZXJhYmxlUmVzdCBmcm9tIFwiLi9ub25JdGVyYWJsZVJlc3QuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkge1xuICByZXR1cm4gYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBpdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgbm9uSXRlcmFibGVSZXN0KCk7XG59IiwiaW1wb3J0IGFycmF5V2l0aG91dEhvbGVzIGZyb20gXCIuL2FycmF5V2l0aG91dEhvbGVzLmpzXCI7XG5pbXBvcnQgaXRlcmFibGVUb0FycmF5IGZyb20gXCIuL2l0ZXJhYmxlVG9BcnJheS5qc1wiO1xuaW1wb3J0IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IGZyb20gXCIuL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzXCI7XG5pbXBvcnQgbm9uSXRlcmFibGVTcHJlYWQgZnJvbSBcIi4vbm9uSXRlcmFibGVTcHJlYWQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHtcbiAgcmV0dXJuIGFycmF5V2l0aG91dEhvbGVzKGFycikgfHwgaXRlcmFibGVUb0FycmF5KGFycikgfHwgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBub25JdGVyYWJsZVNwcmVhZCgpO1xufSIsImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3RvUHJpbWl0aXZlKGlucHV0LCBoaW50KSB7XG4gIGlmIChfdHlwZW9mKGlucHV0KSAhPT0gXCJvYmplY3RcIiB8fCBpbnB1dCA9PT0gbnVsbCkgcmV0dXJuIGlucHV0O1xuICB2YXIgcHJpbSA9IGlucHV0W1N5bWJvbC50b1ByaW1pdGl2ZV07XG4gIGlmIChwcmltICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgcmVzID0gcHJpbS5jYWxsKGlucHV0LCBoaW50IHx8IFwiZGVmYXVsdFwiKTtcbiAgICBpZiAoX3R5cGVvZihyZXMpICE9PSBcIm9iamVjdFwiKSByZXR1cm4gcmVzO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTtcbiAgfVxuICByZXR1cm4gKGhpbnQgPT09IFwic3RyaW5nXCIgPyBTdHJpbmcgOiBOdW1iZXIpKGlucHV0KTtcbn0iLCJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmltcG9ydCB0b1ByaW1pdGl2ZSBmcm9tIFwiLi90b1ByaW1pdGl2ZS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkoYXJnKSB7XG4gIHZhciBrZXkgPSB0b1ByaW1pdGl2ZShhcmcsIFwic3RyaW5nXCIpO1xuICByZXR1cm4gX3R5cGVvZihrZXkpID09PSBcInN5bWJvbFwiID8ga2V5IDogU3RyaW5nKGtleSk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiB0eXBlb2Ygb2JqO1xuICB9IDogZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiBvYmogJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG4gIH0sIF90eXBlb2Yob2JqKTtcbn0iLCJpbXBvcnQgYXJyYXlMaWtlVG9BcnJheSBmcm9tIFwiLi9hcnJheUxpa2VUb0FycmF5LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7XG4gIGlmICghbykgcmV0dXJuO1xuICBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG4gIHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTtcbiAgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTtcbiAgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7XG4gIGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xufSIsInZhciBfdHlwZW9mID0gcmVxdWlyZShcIi4vdHlwZW9mLmpzXCIpW1wiZGVmYXVsdFwiXTtcbmZ1bmN0aW9uIF9yZWdlbmVyYXRvclJ1bnRpbWUoKSB7XG4gIFwidXNlIHN0cmljdFwiOyAvKiEgcmVnZW5lcmF0b3ItcnVudGltZSAtLSBDb3B5cmlnaHQgKGMpIDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4gLS0gbGljZW5zZSAoTUlUKTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2Jsb2IvbWFpbi9MSUNFTlNFICovXG4gIG1vZHVsZS5leHBvcnRzID0gX3JlZ2VuZXJhdG9yUnVudGltZSA9IGZ1bmN0aW9uIF9yZWdlbmVyYXRvclJ1bnRpbWUoKSB7XG4gICAgcmV0dXJuIGV4cG9ydHM7XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cztcbiAgdmFyIGV4cG9ydHMgPSB7fSxcbiAgICBPcCA9IE9iamVjdC5wcm90b3R5cGUsXG4gICAgaGFzT3duID0gT3AuaGFzT3duUHJvcGVydHksXG4gICAgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgfHwgZnVuY3Rpb24gKG9iaiwga2V5LCBkZXNjKSB7XG4gICAgICBvYmpba2V5XSA9IGRlc2MudmFsdWU7XG4gICAgfSxcbiAgICAkU3ltYm9sID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgPyBTeW1ib2wgOiB7fSxcbiAgICBpdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuaXRlcmF0b3IgfHwgXCJAQGl0ZXJhdG9yXCIsXG4gICAgYXN5bmNJdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuYXN5bmNJdGVyYXRvciB8fCBcIkBAYXN5bmNJdGVyYXRvclwiLFxuICAgIHRvU3RyaW5nVGFnU3ltYm9sID0gJFN5bWJvbC50b1N0cmluZ1RhZyB8fCBcIkBAdG9TdHJpbmdUYWdcIjtcbiAgZnVuY3Rpb24gZGVmaW5lKG9iaiwga2V5LCB2YWx1ZSkge1xuICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6ICEwLFxuICAgICAgY29uZmlndXJhYmxlOiAhMCxcbiAgICAgIHdyaXRhYmxlOiAhMFxuICAgIH0pLCBvYmpba2V5XTtcbiAgfVxuICB0cnkge1xuICAgIGRlZmluZSh7fSwgXCJcIik7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGRlZmluZSA9IGZ1bmN0aW9uIGRlZmluZShvYmosIGtleSwgdmFsdWUpIHtcbiAgICAgIHJldHVybiBvYmpba2V5XSA9IHZhbHVlO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCkge1xuICAgIHZhciBwcm90b0dlbmVyYXRvciA9IG91dGVyRm4gJiYgb3V0ZXJGbi5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IgPyBvdXRlckZuIDogR2VuZXJhdG9yLFxuICAgICAgZ2VuZXJhdG9yID0gT2JqZWN0LmNyZWF0ZShwcm90b0dlbmVyYXRvci5wcm90b3R5cGUpLFxuICAgICAgY29udGV4dCA9IG5ldyBDb250ZXh0KHRyeUxvY3NMaXN0IHx8IFtdKTtcbiAgICByZXR1cm4gZGVmaW5lUHJvcGVydHkoZ2VuZXJhdG9yLCBcIl9pbnZva2VcIiwge1xuICAgICAgdmFsdWU6IG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dClcbiAgICB9KSwgZ2VuZXJhdG9yO1xuICB9XG4gIGZ1bmN0aW9uIHRyeUNhdGNoKGZuLCBvYmosIGFyZykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcIm5vcm1hbFwiLFxuICAgICAgICBhcmc6IGZuLmNhbGwob2JqLCBhcmcpXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJ0aHJvd1wiLFxuICAgICAgICBhcmc6IGVyclxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgZXhwb3J0cy53cmFwID0gd3JhcDtcbiAgdmFyIENvbnRpbnVlU2VudGluZWwgPSB7fTtcbiAgZnVuY3Rpb24gR2VuZXJhdG9yKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb24oKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSgpIHt9XG4gIHZhciBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuICBkZWZpbmUoSXRlcmF0b3JQcm90b3R5cGUsIGl0ZXJhdG9yU3ltYm9sLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pO1xuICB2YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YsXG4gICAgTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90byAmJiBnZXRQcm90byhnZXRQcm90byh2YWx1ZXMoW10pKSk7XG4gIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICYmIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICE9PSBPcCAmJiBoYXNPd24uY2FsbChOYXRpdmVJdGVyYXRvclByb3RvdHlwZSwgaXRlcmF0b3JTeW1ib2wpICYmIChJdGVyYXRvclByb3RvdHlwZSA9IE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlKTtcbiAgdmFyIEdwID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUucHJvdG90eXBlID0gR2VuZXJhdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUpO1xuICBmdW5jdGlvbiBkZWZpbmVJdGVyYXRvck1ldGhvZHMocHJvdG90eXBlKSB7XG4gICAgW1wibmV4dFwiLCBcInRocm93XCIsIFwicmV0dXJuXCJdLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZCkge1xuICAgICAgZGVmaW5lKHByb3RvdHlwZSwgbWV0aG9kLCBmdW5jdGlvbiAoYXJnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnZva2UobWV0aG9kLCBhcmcpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgZnVuY3Rpb24gQXN5bmNJdGVyYXRvcihnZW5lcmF0b3IsIFByb21pc2VJbXBsKSB7XG4gICAgZnVuY3Rpb24gaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChnZW5lcmF0b3JbbWV0aG9kXSwgZ2VuZXJhdG9yLCBhcmcpO1xuICAgICAgaWYgKFwidGhyb3dcIiAhPT0gcmVjb3JkLnR5cGUpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlY29yZC5hcmcsXG4gICAgICAgICAgdmFsdWUgPSByZXN1bHQudmFsdWU7XG4gICAgICAgIHJldHVybiB2YWx1ZSAmJiBcIm9iamVjdFwiID09IF90eXBlb2YodmFsdWUpICYmIGhhc093bi5jYWxsKHZhbHVlLCBcIl9fYXdhaXRcIikgPyBQcm9taXNlSW1wbC5yZXNvbHZlKHZhbHVlLl9fYXdhaXQpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaW52b2tlKFwibmV4dFwiLCB2YWx1ZSwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgIGludm9rZShcInRocm93XCIsIGVyciwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfSkgOiBQcm9taXNlSW1wbC5yZXNvbHZlKHZhbHVlKS50aGVuKGZ1bmN0aW9uICh1bndyYXBwZWQpIHtcbiAgICAgICAgICByZXN1bHQudmFsdWUgPSB1bndyYXBwZWQsIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGludm9rZShcInRocm93XCIsIGVycm9yLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJlamVjdChyZWNvcmQuYXJnKTtcbiAgICB9XG4gICAgdmFyIHByZXZpb3VzUHJvbWlzZTtcbiAgICBkZWZpbmVQcm9wZXJ0eSh0aGlzLCBcIl9pbnZva2VcIiwge1xuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKG1ldGhvZCwgYXJnKSB7XG4gICAgICAgIGZ1bmN0aW9uIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCkge1xuICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZUltcGwoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcmV2aW91c1Byb21pc2UgPSBwcmV2aW91c1Byb21pc2UgPyBwcmV2aW91c1Byb21pc2UudGhlbihjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZywgY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcpIDogY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBmdW5jdGlvbiBtYWtlSW52b2tlTWV0aG9kKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpIHtcbiAgICB2YXIgc3RhdGUgPSBcInN1c3BlbmRlZFN0YXJ0XCI7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChtZXRob2QsIGFyZykge1xuICAgICAgaWYgKFwiZXhlY3V0aW5nXCIgPT09IHN0YXRlKSB0aHJvdyBuZXcgRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nXCIpO1xuICAgICAgaWYgKFwiY29tcGxldGVkXCIgPT09IHN0YXRlKSB7XG4gICAgICAgIGlmIChcInRocm93XCIgPT09IG1ldGhvZCkgdGhyb3cgYXJnO1xuICAgICAgICByZXR1cm4gZG9uZVJlc3VsdCgpO1xuICAgICAgfVxuICAgICAgZm9yIChjb250ZXh0Lm1ldGhvZCA9IG1ldGhvZCwgY29udGV4dC5hcmcgPSBhcmc7Oykge1xuICAgICAgICB2YXIgZGVsZWdhdGUgPSBjb250ZXh0LmRlbGVnYXRlO1xuICAgICAgICBpZiAoZGVsZWdhdGUpIHtcbiAgICAgICAgICB2YXIgZGVsZWdhdGVSZXN1bHQgPSBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcbiAgICAgICAgICBpZiAoZGVsZWdhdGVSZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCA9PT0gQ29udGludWVTZW50aW5lbCkgY29udGludWU7XG4gICAgICAgICAgICByZXR1cm4gZGVsZWdhdGVSZXN1bHQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChcIm5leHRcIiA9PT0gY29udGV4dC5tZXRob2QpIGNvbnRleHQuc2VudCA9IGNvbnRleHQuX3NlbnQgPSBjb250ZXh0LmFyZztlbHNlIGlmIChcInRocm93XCIgPT09IGNvbnRleHQubWV0aG9kKSB7XG4gICAgICAgICAgaWYgKFwic3VzcGVuZGVkU3RhcnRcIiA9PT0gc3RhdGUpIHRocm93IHN0YXRlID0gXCJjb21wbGV0ZWRcIiwgY29udGV4dC5hcmc7XG4gICAgICAgICAgY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihjb250ZXh0LmFyZyk7XG4gICAgICAgIH0gZWxzZSBcInJldHVyblwiID09PSBjb250ZXh0Lm1ldGhvZCAmJiBjb250ZXh0LmFicnVwdChcInJldHVyblwiLCBjb250ZXh0LmFyZyk7XG4gICAgICAgIHN0YXRlID0gXCJleGVjdXRpbmdcIjtcbiAgICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpO1xuICAgICAgICBpZiAoXCJub3JtYWxcIiA9PT0gcmVjb3JkLnR5cGUpIHtcbiAgICAgICAgICBpZiAoc3RhdGUgPSBjb250ZXh0LmRvbmUgPyBcImNvbXBsZXRlZFwiIDogXCJzdXNwZW5kZWRZaWVsZFwiLCByZWNvcmQuYXJnID09PSBDb250aW51ZVNlbnRpbmVsKSBjb250aW51ZTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IHJlY29yZC5hcmcsXG4gICAgICAgICAgICBkb25lOiBjb250ZXh0LmRvbmVcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIFwidGhyb3dcIiA9PT0gcmVjb3JkLnR5cGUgJiYgKHN0YXRlID0gXCJjb21wbGV0ZWRcIiwgY29udGV4dC5tZXRob2QgPSBcInRocm93XCIsIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZyk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KSB7XG4gICAgdmFyIG1ldGhvZE5hbWUgPSBjb250ZXh0Lm1ldGhvZCxcbiAgICAgIG1ldGhvZCA9IGRlbGVnYXRlLml0ZXJhdG9yW21ldGhvZE5hbWVdO1xuICAgIGlmICh1bmRlZmluZWQgPT09IG1ldGhvZCkgcmV0dXJuIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsLCBcInRocm93XCIgPT09IG1ldGhvZE5hbWUgJiYgZGVsZWdhdGUuaXRlcmF0b3JbXCJyZXR1cm5cIl0gJiYgKGNvbnRleHQubWV0aG9kID0gXCJyZXR1cm5cIiwgY29udGV4dC5hcmcgPSB1bmRlZmluZWQsIG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpLCBcInRocm93XCIgPT09IGNvbnRleHQubWV0aG9kKSB8fCBcInJldHVyblwiICE9PSBtZXRob2ROYW1lICYmIChjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIiwgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFwiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAnXCIgKyBtZXRob2ROYW1lICsgXCInIG1ldGhvZFwiKSksIENvbnRpbnVlU2VudGluZWw7XG4gICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKG1ldGhvZCwgZGVsZWdhdGUuaXRlcmF0b3IsIGNvbnRleHQuYXJnKTtcbiAgICBpZiAoXCJ0aHJvd1wiID09PSByZWNvcmQudHlwZSkgcmV0dXJuIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiLCBjb250ZXh0LmFyZyA9IHJlY29yZC5hcmcsIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsLCBDb250aW51ZVNlbnRpbmVsO1xuICAgIHZhciBpbmZvID0gcmVjb3JkLmFyZztcbiAgICByZXR1cm4gaW5mbyA/IGluZm8uZG9uZSA/IChjb250ZXh0W2RlbGVnYXRlLnJlc3VsdE5hbWVdID0gaW5mby52YWx1ZSwgY29udGV4dC5uZXh0ID0gZGVsZWdhdGUubmV4dExvYywgXCJyZXR1cm5cIiAhPT0gY29udGV4dC5tZXRob2QgJiYgKGNvbnRleHQubWV0aG9kID0gXCJuZXh0XCIsIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkKSwgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGwsIENvbnRpbnVlU2VudGluZWwpIDogaW5mbyA6IChjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIiwgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFwiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3RcIiksIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsLCBDb250aW51ZVNlbnRpbmVsKTtcbiAgfVxuICBmdW5jdGlvbiBwdXNoVHJ5RW50cnkobG9jcykge1xuICAgIHZhciBlbnRyeSA9IHtcbiAgICAgIHRyeUxvYzogbG9jc1swXVxuICAgIH07XG4gICAgMSBpbiBsb2NzICYmIChlbnRyeS5jYXRjaExvYyA9IGxvY3NbMV0pLCAyIGluIGxvY3MgJiYgKGVudHJ5LmZpbmFsbHlMb2MgPSBsb2NzWzJdLCBlbnRyeS5hZnRlckxvYyA9IGxvY3NbM10pLCB0aGlzLnRyeUVudHJpZXMucHVzaChlbnRyeSk7XG4gIH1cbiAgZnVuY3Rpb24gcmVzZXRUcnlFbnRyeShlbnRyeSkge1xuICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uIHx8IHt9O1xuICAgIHJlY29yZC50eXBlID0gXCJub3JtYWxcIiwgZGVsZXRlIHJlY29yZC5hcmcsIGVudHJ5LmNvbXBsZXRpb24gPSByZWNvcmQ7XG4gIH1cbiAgZnVuY3Rpb24gQ29udGV4dCh0cnlMb2NzTGlzdCkge1xuICAgIHRoaXMudHJ5RW50cmllcyA9IFt7XG4gICAgICB0cnlMb2M6IFwicm9vdFwiXG4gICAgfV0sIHRyeUxvY3NMaXN0LmZvckVhY2gocHVzaFRyeUVudHJ5LCB0aGlzKSwgdGhpcy5yZXNldCghMCk7XG4gIH1cbiAgZnVuY3Rpb24gdmFsdWVzKGl0ZXJhYmxlKSB7XG4gICAgaWYgKGl0ZXJhYmxlKSB7XG4gICAgICB2YXIgaXRlcmF0b3JNZXRob2QgPSBpdGVyYWJsZVtpdGVyYXRvclN5bWJvbF07XG4gICAgICBpZiAoaXRlcmF0b3JNZXRob2QpIHJldHVybiBpdGVyYXRvck1ldGhvZC5jYWxsKGl0ZXJhYmxlKTtcbiAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGl0ZXJhYmxlLm5leHQpIHJldHVybiBpdGVyYWJsZTtcbiAgICAgIGlmICghaXNOYU4oaXRlcmFibGUubGVuZ3RoKSkge1xuICAgICAgICB2YXIgaSA9IC0xLFxuICAgICAgICAgIG5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgZm9yICg7ICsraSA8IGl0ZXJhYmxlLmxlbmd0aDspIGlmIChoYXNPd24uY2FsbChpdGVyYWJsZSwgaSkpIHJldHVybiBuZXh0LnZhbHVlID0gaXRlcmFibGVbaV0sIG5leHQuZG9uZSA9ICExLCBuZXh0O1xuICAgICAgICAgICAgcmV0dXJuIG5leHQudmFsdWUgPSB1bmRlZmluZWQsIG5leHQuZG9uZSA9ICEwLCBuZXh0O1xuICAgICAgICAgIH07XG4gICAgICAgIHJldHVybiBuZXh0Lm5leHQgPSBuZXh0O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgbmV4dDogZG9uZVJlc3VsdFxuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gZG9uZVJlc3VsdCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgIGRvbmU6ICEwXG4gICAgfTtcbiAgfVxuICByZXR1cm4gR2VuZXJhdG9yRnVuY3Rpb24ucHJvdG90eXBlID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIGRlZmluZVByb3BlcnR5KEdwLCBcImNvbnN0cnVjdG9yXCIsIHtcbiAgICB2YWx1ZTogR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsXG4gICAgY29uZmlndXJhYmxlOiAhMFxuICB9KSwgZGVmaW5lUHJvcGVydHkoR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIFwiY29uc3RydWN0b3JcIiwge1xuICAgIHZhbHVlOiBHZW5lcmF0b3JGdW5jdGlvbixcbiAgICBjb25maWd1cmFibGU6ICEwXG4gIH0pLCBHZW5lcmF0b3JGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IGRlZmluZShHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSwgdG9TdHJpbmdUYWdTeW1ib2wsIFwiR2VuZXJhdG9yRnVuY3Rpb25cIiksIGV4cG9ydHMuaXNHZW5lcmF0b3JGdW5jdGlvbiA9IGZ1bmN0aW9uIChnZW5GdW4pIHtcbiAgICB2YXIgY3RvciA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZ2VuRnVuICYmIGdlbkZ1bi5jb25zdHJ1Y3RvcjtcbiAgICByZXR1cm4gISFjdG9yICYmIChjdG9yID09PSBHZW5lcmF0b3JGdW5jdGlvbiB8fCBcIkdlbmVyYXRvckZ1bmN0aW9uXCIgPT09IChjdG9yLmRpc3BsYXlOYW1lIHx8IGN0b3IubmFtZSkpO1xuICB9LCBleHBvcnRzLm1hcmsgPSBmdW5jdGlvbiAoZ2VuRnVuKSB7XG4gICAgcmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihnZW5GdW4sIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKSA6IChnZW5GdW4uX19wcm90b19fID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIGRlZmluZShnZW5GdW4sIHRvU3RyaW5nVGFnU3ltYm9sLCBcIkdlbmVyYXRvckZ1bmN0aW9uXCIpKSwgZ2VuRnVuLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoR3ApLCBnZW5GdW47XG4gIH0sIGV4cG9ydHMuYXdyYXAgPSBmdW5jdGlvbiAoYXJnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIF9fYXdhaXQ6IGFyZ1xuICAgIH07XG4gIH0sIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSksIGRlZmluZShBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSwgYXN5bmNJdGVyYXRvclN5bWJvbCwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KSwgZXhwb3J0cy5Bc3luY0l0ZXJhdG9yID0gQXN5bmNJdGVyYXRvciwgZXhwb3J0cy5hc3luYyA9IGZ1bmN0aW9uIChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCwgUHJvbWlzZUltcGwpIHtcbiAgICB2b2lkIDAgPT09IFByb21pc2VJbXBsICYmIChQcm9taXNlSW1wbCA9IFByb21pc2UpO1xuICAgIHZhciBpdGVyID0gbmV3IEFzeW5jSXRlcmF0b3Iod3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCksIFByb21pc2VJbXBsKTtcbiAgICByZXR1cm4gZXhwb3J0cy5pc0dlbmVyYXRvckZ1bmN0aW9uKG91dGVyRm4pID8gaXRlciA6IGl0ZXIubmV4dCgpLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgcmV0dXJuIHJlc3VsdC5kb25lID8gcmVzdWx0LnZhbHVlIDogaXRlci5uZXh0KCk7XG4gICAgfSk7XG4gIH0sIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhHcCksIGRlZmluZShHcCwgdG9TdHJpbmdUYWdTeW1ib2wsIFwiR2VuZXJhdG9yXCIpLCBkZWZpbmUoR3AsIGl0ZXJhdG9yU3ltYm9sLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pLCBkZWZpbmUoR3AsIFwidG9TdHJpbmdcIiwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBcIltvYmplY3QgR2VuZXJhdG9yXVwiO1xuICB9KSwgZXhwb3J0cy5rZXlzID0gZnVuY3Rpb24gKHZhbCkge1xuICAgIHZhciBvYmplY3QgPSBPYmplY3QodmFsKSxcbiAgICAgIGtleXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSBrZXlzLnB1c2goa2V5KTtcbiAgICByZXR1cm4ga2V5cy5yZXZlcnNlKCksIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICBmb3IgKDsga2V5cy5sZW5ndGg7KSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzLnBvcCgpO1xuICAgICAgICBpZiAoa2V5IGluIG9iamVjdCkgcmV0dXJuIG5leHQudmFsdWUgPSBrZXksIG5leHQuZG9uZSA9ICExLCBuZXh0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5leHQuZG9uZSA9ICEwLCBuZXh0O1xuICAgIH07XG4gIH0sIGV4cG9ydHMudmFsdWVzID0gdmFsdWVzLCBDb250ZXh0LnByb3RvdHlwZSA9IHtcbiAgICBjb25zdHJ1Y3RvcjogQ29udGV4dCxcbiAgICByZXNldDogZnVuY3Rpb24gcmVzZXQoc2tpcFRlbXBSZXNldCkge1xuICAgICAgaWYgKHRoaXMucHJldiA9IDAsIHRoaXMubmV4dCA9IDAsIHRoaXMuc2VudCA9IHRoaXMuX3NlbnQgPSB1bmRlZmluZWQsIHRoaXMuZG9uZSA9ICExLCB0aGlzLmRlbGVnYXRlID0gbnVsbCwgdGhpcy5tZXRob2QgPSBcIm5leHRcIiwgdGhpcy5hcmcgPSB1bmRlZmluZWQsIHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKHJlc2V0VHJ5RW50cnkpLCAhc2tpcFRlbXBSZXNldCkgZm9yICh2YXIgbmFtZSBpbiB0aGlzKSBcInRcIiA9PT0gbmFtZS5jaGFyQXQoMCkgJiYgaGFzT3duLmNhbGwodGhpcywgbmFtZSkgJiYgIWlzTmFOKCtuYW1lLnNsaWNlKDEpKSAmJiAodGhpc1tuYW1lXSA9IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBzdG9wOiBmdW5jdGlvbiBzdG9wKCkge1xuICAgICAgdGhpcy5kb25lID0gITA7XG4gICAgICB2YXIgcm9vdFJlY29yZCA9IHRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO1xuICAgICAgaWYgKFwidGhyb3dcIiA9PT0gcm9vdFJlY29yZC50eXBlKSB0aHJvdyByb290UmVjb3JkLmFyZztcbiAgICAgIHJldHVybiB0aGlzLnJ2YWw7XG4gICAgfSxcbiAgICBkaXNwYXRjaEV4Y2VwdGlvbjogZnVuY3Rpb24gZGlzcGF0Y2hFeGNlcHRpb24oZXhjZXB0aW9uKSB7XG4gICAgICBpZiAodGhpcy5kb25lKSB0aHJvdyBleGNlcHRpb247XG4gICAgICB2YXIgY29udGV4dCA9IHRoaXM7XG4gICAgICBmdW5jdGlvbiBoYW5kbGUobG9jLCBjYXVnaHQpIHtcbiAgICAgICAgcmV0dXJuIHJlY29yZC50eXBlID0gXCJ0aHJvd1wiLCByZWNvcmQuYXJnID0gZXhjZXB0aW9uLCBjb250ZXh0Lm5leHQgPSBsb2MsIGNhdWdodCAmJiAoY29udGV4dC5tZXRob2QgPSBcIm5leHRcIiwgY29udGV4dC5hcmcgPSB1bmRlZmluZWQpLCAhIWNhdWdodDtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldLFxuICAgICAgICAgIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb247XG4gICAgICAgIGlmIChcInJvb3RcIiA9PT0gZW50cnkudHJ5TG9jKSByZXR1cm4gaGFuZGxlKFwiZW5kXCIpO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldikge1xuICAgICAgICAgIHZhciBoYXNDYXRjaCA9IGhhc093bi5jYWxsKGVudHJ5LCBcImNhdGNoTG9jXCIpLFxuICAgICAgICAgICAgaGFzRmluYWxseSA9IGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIik7XG4gICAgICAgICAgaWYgKGhhc0NhdGNoICYmIGhhc0ZpbmFsbHkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgITApO1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgfSBlbHNlIGlmIChoYXNDYXRjaCkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmNhdGNoTG9jKSByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCAhMCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzRmluYWxseSkgdGhyb3cgbmV3IEVycm9yKFwidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHlcIik7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGFicnVwdDogZnVuY3Rpb24gYWJydXB0KHR5cGUsIGFyZykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPD0gdGhpcy5wcmV2ICYmIGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIikgJiYgdGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgIHZhciBmaW5hbGx5RW50cnkgPSBlbnRyeTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZmluYWxseUVudHJ5ICYmIChcImJyZWFrXCIgPT09IHR5cGUgfHwgXCJjb250aW51ZVwiID09PSB0eXBlKSAmJiBmaW5hbGx5RW50cnkudHJ5TG9jIDw9IGFyZyAmJiBhcmcgPD0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2MgJiYgKGZpbmFsbHlFbnRyeSA9IG51bGwpO1xuICAgICAgdmFyIHJlY29yZCA9IGZpbmFsbHlFbnRyeSA/IGZpbmFsbHlFbnRyeS5jb21wbGV0aW9uIDoge307XG4gICAgICByZXR1cm4gcmVjb3JkLnR5cGUgPSB0eXBlLCByZWNvcmQuYXJnID0gYXJnLCBmaW5hbGx5RW50cnkgPyAodGhpcy5tZXRob2QgPSBcIm5leHRcIiwgdGhpcy5uZXh0ID0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2MsIENvbnRpbnVlU2VudGluZWwpIDogdGhpcy5jb21wbGV0ZShyZWNvcmQpO1xuICAgIH0sXG4gICAgY29tcGxldGU6IGZ1bmN0aW9uIGNvbXBsZXRlKHJlY29yZCwgYWZ0ZXJMb2MpIHtcbiAgICAgIGlmIChcInRocm93XCIgPT09IHJlY29yZC50eXBlKSB0aHJvdyByZWNvcmQuYXJnO1xuICAgICAgcmV0dXJuIFwiYnJlYWtcIiA9PT0gcmVjb3JkLnR5cGUgfHwgXCJjb250aW51ZVwiID09PSByZWNvcmQudHlwZSA/IHRoaXMubmV4dCA9IHJlY29yZC5hcmcgOiBcInJldHVyblwiID09PSByZWNvcmQudHlwZSA/ICh0aGlzLnJ2YWwgPSB0aGlzLmFyZyA9IHJlY29yZC5hcmcsIHRoaXMubWV0aG9kID0gXCJyZXR1cm5cIiwgdGhpcy5uZXh0ID0gXCJlbmRcIikgOiBcIm5vcm1hbFwiID09PSByZWNvcmQudHlwZSAmJiBhZnRlckxvYyAmJiAodGhpcy5uZXh0ID0gYWZ0ZXJMb2MpLCBDb250aW51ZVNlbnRpbmVsO1xuICAgIH0sXG4gICAgZmluaXNoOiBmdW5jdGlvbiBmaW5pc2goZmluYWxseUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS5maW5hbGx5TG9jID09PSBmaW5hbGx5TG9jKSByZXR1cm4gdGhpcy5jb21wbGV0ZShlbnRyeS5jb21wbGV0aW9uLCBlbnRyeS5hZnRlckxvYyksIHJlc2V0VHJ5RW50cnkoZW50cnkpLCBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgfVxuICAgIH0sXG4gICAgXCJjYXRjaFwiOiBmdW5jdGlvbiBfY2F0Y2godHJ5TG9jKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA9PT0gdHJ5TG9jKSB7XG4gICAgICAgICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb247XG4gICAgICAgICAgaWYgKFwidGhyb3dcIiA9PT0gcmVjb3JkLnR5cGUpIHtcbiAgICAgICAgICAgIHZhciB0aHJvd24gPSByZWNvcmQuYXJnO1xuICAgICAgICAgICAgcmVzZXRUcnlFbnRyeShlbnRyeSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0aHJvd247XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdFwiKTtcbiAgICB9LFxuICAgIGRlbGVnYXRlWWllbGQ6IGZ1bmN0aW9uIGRlbGVnYXRlWWllbGQoaXRlcmFibGUsIHJlc3VsdE5hbWUsIG5leHRMb2MpIHtcbiAgICAgIHJldHVybiB0aGlzLmRlbGVnYXRlID0ge1xuICAgICAgICBpdGVyYXRvcjogdmFsdWVzKGl0ZXJhYmxlKSxcbiAgICAgICAgcmVzdWx0TmFtZTogcmVzdWx0TmFtZSxcbiAgICAgICAgbmV4dExvYzogbmV4dExvY1xuICAgICAgfSwgXCJuZXh0XCIgPT09IHRoaXMubWV0aG9kICYmICh0aGlzLmFyZyA9IHVuZGVmaW5lZCksIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuICB9LCBleHBvcnRzO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfcmVnZW5lcmF0b3JSdW50aW1lLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiAobW9kdWxlLmV4cG9ydHMgPSBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiB0eXBlb2Ygb2JqO1xuICB9IDogZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiBvYmogJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cyksIF90eXBlb2Yob2JqKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3R5cGVvZiwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsIi8vIFRPRE8oQmFiZWwgOCk6IFJlbW92ZSB0aGlzIGZpbGUuXG5cbnZhciBydW50aW1lID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvcmVnZW5lcmF0b3JSdW50aW1lXCIpKCk7XG5tb2R1bGUuZXhwb3J0cyA9IHJ1bnRpbWU7XG5cbi8vIENvcGllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWdlbmVyYXRvci9ibG9iL21haW4vcGFja2FnZXMvcnVudGltZS9ydW50aW1lLmpzI0w3MzY9XG50cnkge1xuICByZWdlbmVyYXRvclJ1bnRpbWUgPSBydW50aW1lO1xufSBjYXRjaCAoYWNjaWRlbnRhbFN0cmljdE1vZGUpIHtcbiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSBcIm9iamVjdFwiKSB7XG4gICAgZ2xvYmFsVGhpcy5yZWdlbmVyYXRvclJ1bnRpbWUgPSBydW50aW1lO1xuICB9IGVsc2Uge1xuICAgIEZ1bmN0aW9uKFwiclwiLCBcInJlZ2VuZXJhdG9yUnVudGltZSA9IHJcIikocnVudGltZSk7XG4gIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IFJlYWRPbmx5U3ViamVjdCBmcm9tICcuLi9yeC9SZWFkT25seVN1YmplY3QnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuXG5jb25zdCBkZWZhdWx0RG9jdW1lbnRGb2N1c0ludGVydmFsVGltZW91dCA9IDMwMDA7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5SXNGb3JlZ3JvdW5kOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX2lzRm9yZWdyb3VuZDogU3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSBfdGltZU9mTGFzdFRhYkZvY3VzQ2hhbmdlOiBudW1iZXIgPSBEYXRlLm5vdygpO1xuICBwcml2YXRlIF9kb2N1bWVudEZvY3VzSW50ZXJ2YWw6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLl9pc0ZvcmVncm91bmQgPSBuZXcgU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgICB0aGlzLl9yZWFkT25seUlzRm9yZWdyb3VuZCA9IG5ldyBSZWFkT25seVN1YmplY3QodGhpcy5faXNGb3JlZ3JvdW5kKTtcbiAgICB0aGlzLmRldGVjdFRhYkZvY3VzQ2hhbmdlKCk7XG4gIH1cblxuICBnZXQgaXNGb3JlZ3JvdW5kKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5SXNGb3JlZ3JvdW5kO1xuICB9XG5cbiAgZ2V0VGltZVNpbmNlTGFzdENoYW5nZSgpOiBudW1iZXIge1xuICAgIHJldHVybiBEYXRlLm5vdygpIC0gdGhpcy5fdGltZU9mTGFzdFRhYkZvY3VzQ2hhbmdlO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGRldGVjdFRhYkZvY3VzQ2hhbmdlKCk6IHZvaWQge1xuICAgIGxldCBoaWRkZW47XG4gICAgbGV0IHZpc2liaWxpdHlDaGFuZ2U7XG5cbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ICE9PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIER1ZSB0byB0eXBlc2NyaXB0IG5vdCBoYXZpbmcgYSBkZWZpbml0aW9uIGZvciAnbXNIaWRkZW4nIG9yICd3ZWJraXRIaWRkZW4nIHR5cGVzXG4gICAgLy8gUmVxdWlyZWQgdG8gQHRzLWlnbm9yZSB0byBwcmV2ZW50IHR5cGVzY3JpcHQgZXJyb3JzXG4gICAgLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50ICovXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQubXNIaWRkZW4gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBoaWRkZW4gPSAnbXNIaWRkZW4nO1xuICAgICAgdmlzaWJpbGl0eUNoYW5nZSA9ICdtc3Zpc2liaWxpdHljaGFuZ2UnO1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGRvY3VtZW50LndlYmtpdEhpZGRlbiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGhpZGRlbiA9ICd3ZWJraXRIaWRkZW4nO1xuICAgICAgdmlzaWJpbGl0eUNoYW5nZSA9ICd3ZWJraXR2aXNpYmlsaXR5Y2hhbmdlJztcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBkb2N1bWVudC5oaWRkZW4gIT09ICd1bmRlZmluZWQnKSB7IC8vIE9wZXJhIDEyLjEwIGFuZCBGaXJlZm94IDE4IGFuZCBsYXRlciBzdXBwb3J0XG4gICAgICBoaWRkZW4gPSAnaGlkZGVuJztcbiAgICAgIHZpc2liaWxpdHlDaGFuZ2UgPSAndmlzaWJpbGl0eWNoYW5nZSc7XG4gICAgfVxuICAgIC8qIGVzbGludC1lbmFibGUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50ICovXG5cbiAgICBjb25zdCBoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlID0gKCk6IHZvaWQgPT4ge1xuICAgICAgY29uc3QgaXNGb3JlZ3JvdW5kID0gIWRvY3VtZW50W2hpZGRlbl07XG5cbiAgICAgIHRoaXMuc2V0Rm9jdXNTdGF0ZShpc0ZvcmVncm91bmQpO1xuICAgIH07XG5cbiAgICBpZiAodHlwZW9mIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudFtoaWRkZW5dICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih2aXNpYmlsaXR5Q2hhbmdlLCBoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlLCBmYWxzZSk7XG5cbiAgICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodmlzaWJpbGl0eUNoYW5nZSwgaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSwgZmFsc2UpO1xuICAgICAgfSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxpc3RlbkZvckRvY3VtZW50Rm9jdXMuY2FsbCh0aGlzKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGxpc3RlbkZvckRvY3VtZW50Rm9jdXMoKTogdm9pZCB7XG4gICAgdGhpcy5fZG9jdW1lbnRGb2N1c0ludGVydmFsID0gd2luZG93LnNldEludGVydmFsKCgpID0+IHtcbiAgICAgIGNvbnN0IGlzRm9yZWdyb3VuZCA9IGRvY3VtZW50Lmhhc0ZvY3VzKCk7XG5cbiAgICAgIHRoaXMuc2V0Rm9jdXNTdGF0ZShpc0ZvcmVncm91bmQpO1xuICAgIH0sIGRlZmF1bHREb2N1bWVudEZvY3VzSW50ZXJ2YWxUaW1lb3V0KTtcblxuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fZG9jdW1lbnRGb2N1c0ludGVydmFsKSB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5fZG9jdW1lbnRGb2N1c0ludGVydmFsKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fZG9jdW1lbnRGb2N1c0ludGVydmFsID0gbnVsbDtcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIHNldEZvY3VzU3RhdGUoaXNGb3JlZ3JvdW5kKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2lzRm9yZWdyb3VuZCA9PT0gaXNGb3JlZ3JvdW5kKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faXNGb3JlZ3JvdW5kLnZhbHVlID0gaXNGb3JlZ3JvdW5kO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCcm93c2VyRGV0ZWN0b3Ige1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfYnJvd3Nlck5hbWVBbmRWZXJzaW9uUmVnZXggPSAvKE1TSUV8KD8hR2Vja28uKylGaXJlZm94fCg/IUFwcGxlV2ViS2l0LitDaHJvbWUuKylTYWZhcml8KD8hQXBwbGVXZWJLaXQuKylDaHJvbWV8QXBwbGVXZWJLaXQoPyEuK0Nocm9tZXwuK1NhZmFyaSl8R2Vja28oPyEuK0ZpcmVmb3gpKSg/OiB8XFwvKShbXFxkLmFwcmVdKykvZztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbiA9IEJyb3dzZXJEZXRlY3Rvci5wYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbigpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfYnJvd3Nlck5hbWUgPSBCcm93c2VyRGV0ZWN0b3IucGFyc2VCcm93c2VyTmFtZSgpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfYnJvd3Nlck1ham9yVmVyc2lvbiA9IEJyb3dzZXJEZXRlY3Rvci5wYXJzZUJyb3dzZXJNYWpvclZlcnNpb24oKTtcblxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU2OSA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNjkuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTcwID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83MC4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzEgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzcxLicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3MiA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzIuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTc0ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83NC4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzUgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzc1LicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3NiA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzYuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTc3ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83Ny4nKTtcblxuICBzdGF0aWMgZ2V0IGJyb3dzZXJOYW1lQW5kVmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYnJvd3Nlck5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fYnJvd3Nlck5hbWU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGJyb3dzZXJNYWpvclZlcnNpb24oKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fYnJvd3Nlck1ham9yVmVyc2lvbjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU2OSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTY5O1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTcwKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzA7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzEoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3MTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3MigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTcyO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTc0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3NTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3NigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTc2O1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTc3KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzc7XG4gIH1cblxuICBzdGF0aWMgaXNNb2JpbGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICgvQW5kcm9pZHxpUGhvbmV8aVBhZHxpUG9kfEJsYWNrQmVycnl8T3BlcmEgTWluaS9pKS50ZXN0KG5hdmlnYXRvcj8udXNlckFnZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgaWYgKCFuYXZpZ2F0b3IgfHwgIW5hdmlnYXRvci51c2VyQWdlbnQpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCBicm93c2VyTmFtZUFuZFZlcnNpb24gPSBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uUmVnZXgpO1xuXG4gICAgaWYgKGJyb3dzZXJOYW1lQW5kVmVyc2lvbiAmJiBicm93c2VyTmFtZUFuZFZlcnNpb25bMF0pIHtcbiAgICAgIHJldHVybiBicm93c2VyTmFtZUFuZFZlcnNpb25bMF07XG4gICAgfVxuXG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5wYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbkZvcklFKCk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBwYXJzZUJyb3dzZXJOYW1lKCk6IHN0cmluZyB7XG4gICAgaWYgKCFCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbikge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGNvbnN0IGJyb3dzZXJOYW1lTGlzdCA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLnNwbGl0KCcvJyk7XG5cbiAgICBpZiAoIWJyb3dzZXJOYW1lTGlzdCB8fCAhYnJvd3Nlck5hbWVMaXN0WzBdKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJyb3dzZXJOYW1lTGlzdFswXTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHBhcnNlQnJvd3Nlck1ham9yVmVyc2lvbigpOiBudW1iZXIge1xuICAgIGlmICghQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24pIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIGNvbnN0IGJyb3dzZXJWZXJzaW9uTGlzdCA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLnNwbGl0KCcvJyk7XG5cbiAgICBpZiAoIWJyb3dzZXJWZXJzaW9uTGlzdCB8fCAhYnJvd3NlclZlcnNpb25MaXN0WzFdKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBjb25zdCBmdWxsVmVyc2lvbiA9IGJyb3dzZXJWZXJzaW9uTGlzdFsxXTtcblxuICAgIGlmICghZnVsbFZlcnNpb24pIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIHJldHVybiBOdW1iZXIoZnVsbFZlcnNpb24uc3BsaXQoJy4nKVswXSkgfHwgMDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uRm9ySUUoKTogc3RyaW5nIHtcbiAgICBpZiAoIW5hdmlnYXRvciB8fCAhbmF2aWdhdG9yLnVzZXJBZ2VudCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGNvbnN0IHVzZXJBZ2VudCA9IG5hdmlnYXRvci51c2VyQWdlbnQ7XG4gICAgY29uc3QgbXNpZSA9IHVzZXJBZ2VudC5pbmRleE9mKCdNU0lFICcpO1xuXG4gICAgaWYgKG1zaWUgPiAwKSB7XG4gICAgICAvLyBJRSAxMCBvciBvbGRlciA9PiByZXR1cm4gdmVyc2lvbiBudW1iZXJcbiAgICAgIHJldHVybiBgSUUvJHtwYXJzZUludCh1c2VyQWdlbnQuc3Vic3RyaW5nKG1zaWUgKyA1LCB1c2VyQWdlbnQuaW5kZXhPZignLicsIG1zaWUpKSwgMTApfWA7XG4gICAgfVxuXG4gICAgY29uc3QgdHJpZGVudCA9IHVzZXJBZ2VudC5pbmRleE9mKCdUcmlkZW50LycpO1xuXG4gICAgaWYgKHRyaWRlbnQgPiAwKSB7XG4gICAgICAvLyBJRSAxMSA9PiByZXR1cm4gdmVyc2lvbiBudW1iZXJcbiAgICAgIGNvbnN0IHZlcnNpb24gPSB1c2VyQWdlbnQuaW5kZXhPZigncnY6Jyk7XG5cbiAgICAgIHJldHVybiBgSUUvJHtwYXJzZUludCh1c2VyQWdlbnQuc3Vic3RyaW5nKHZlcnNpb24gKyAzLCB1c2VyQWdlbnQuaW5kZXhPZignLicsIHZlcnNpb24pKSwgMTApfWA7XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nIGZyb20gJy4uL21ldHJpY3MvVGVsZW1ldHJpY0xldmVsTWFwcGluZyc7XG5pbXBvcnQgVGVsZW1ldHJ5RGVmYXVsdCBmcm9tICcuLi9tZXRyaWNzL1RlbGVtZXRyeURlZmF1bHQnO1xuaW1wb3J0IExvZ2dpbmdMZXZlbE1hcHBpbmcgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dpbmdMZXZlbE1hcHBpbmcnO1xuaW1wb3J0IExvZ2dlckRlZmF1bHRzIGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJEZWZhdWx0cyc7XG5cbi8vIFRoaXMgZmlsZSBpcyB1c2VkIG9ubHkgZm9yIHRoZSBzaWxlbnQgYnVpbGQgdG8gbW9jayBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIGNsYXNzXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQbGFpbkNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIge1xuICBnZXRTdHJpbmdWYWx1ZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRlZmF1bHRTdHJpbmdWYWx1ZVtuYW1lXTtcbiAgfVxuXG4gIGdldEJvb2xlYW5WYWx1ZShuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kZWZhdWx0Qm9vbGVhblZhbHVlW25hbWVdO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgZGVmYXVsdFN0cmluZ1ZhbHVlKCk6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9IHtcbiAgICByZXR1cm4ge1xuICAgICAgJ3BoZW5peC1tZXRyaWNzLWxldmVsJzogVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nLmNvbnZlcnRUZWxlbWV0cnlMZXZlbFRvVGVsZW1ldHJ5TGV2ZWxUeXBlKFRlbGVtZXRyeURlZmF1bHQuZGVmYXVsdFRlbGVtZXRyeUxldmVsKSxcbiAgICAgICdwaGVuaXgtbG9nZ2luZy1sZXZlbCc6IExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFRvTG9nZ2luZ0xldmVsVHlwZShMb2dnZXJEZWZhdWx0cy5kZWZhdWx0TG9nZ2luZ0xldmVsKSxcbiAgICAgICdwaGVuaXgtY29uc29sZS1sb2dnaW5nLWxldmVsJzogTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlKExvZ2dlckRlZmF1bHRzLmRlZmF1bHRDb25zb2xlTG9nZ2luZ0xldmVsKSxcbiAgICAgICdwaGVuaXgtdGVsZW1ldHJ5LWxvZ2dpbmctbGV2ZWwnOiBMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUoTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdFRlbGVtZXRyeUxvZ2dpbmdMZXZlbCksXG4gICAgICAncGhlbml4LWNoYW5uZWwtdG9rZW4nOiAnJyxcbiAgICAgICdwaGVuaXgtdXJpJzogJycsXG4gICAgICAncGhlbml4LWJhc2UtdXJpJzogJydcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgZGVmYXVsdEJvb2xlYW5WYWx1ZSgpOiB7IFtuYW1lOiBzdHJpbmddOiBib29sZWFuIH0ge1xuICAgIHJldHVybiB7XG4gICAgICAncGhlbml4LWF1dG9tYXRpY2FsbHktcmV0cnktb24tZmFpbHVyZSc6IHRydWUsXG4gICAgICAncGhlbml4LWF1dG9tYXRpY2FsbHktcmVjb25uZWN0LXBlZXItY29ubmVjdGlvbic6IHRydWUsXG4gICAgICAncGhlbml4LWZvcmNlLWdhcmJhZ2UtY29sbGVjdGlvbi1vbi1yZXN0YXJ0JzogdHJ1ZSxcbiAgICAgICdwaGVuaXgtc2tpcC1nYXJiYWdlLWNvbGxlY3Rpb24tb24tbW9iaWxlLWRldmljZXMnOiB0cnVlXG4gICAgfTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uL2Vudmlyb25tZW50L0ZlYXR1cmVFbmFibGVtZW50JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXIge1xuICBzdGF0aWMgZm9yY2VHYXJiYWdlQ29sbGVjdGlvbigpOiB2b2lkIHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuaXNGb3JjZUNocm9tZUdhcmJhZ2VDb2xsZWN0aW9uU3VwcG9ydGVkKSB7XG4gICAgICB0aGlzLmZvcmNlQ2hyb21lR2FyYmFnZUNvbGxlY3Rpb24oKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBmb3JjZUNocm9tZUdhcmJhZ2VDb2xsZWN0aW9uKCk6IHZvaWQge1xuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5pc1F1ZXVlTWljcm90YXNrU3VwcG9ydGVkKSB7XG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgIHRoaXMub3ZlcmxvYWRNZW1vcnlUb0ludm9rZUdhcmJhZ2VDb2xsZWN0aW9uKCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMub3ZlcmxvYWRNZW1vcnlUb0ludm9rZUdhcmJhZ2VDb2xsZWN0aW9uKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBvdmVybG9hZE1lbW9yeVRvSW52b2tlR2FyYmFnZUNvbGxlY3Rpb24oKTogdm9pZCB7XG4gICAgbGV0IGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xuXG4gICAgaW1nLnNyYyA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFtuZXcgQXJyYXlCdWZmZXIoMTBlKzcpXSkpOyAvLyAxMDBNYiBvciBsZXNzIG9yIG1vcmUgZGVwZW5kaW5nIG9uIGFzIHlvdSB3aXNoIHRvIGZvcmNlL2ludm9rZSBHQyBjeWNsZSBydW5cbiAgICBpbWcub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgd2luZG93LlVSTC5yZXZva2VPYmplY3RVUkwodGhpcy5zcmMpO1xuXG4gICAgICBpbWcgPSBudWxsO1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXIgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi9yeC9TdWJqZWN0JztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTmV0d29ya01vbml0b3IgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdCA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pc1N1cHBvcnRlZCA9IG5hdmlnYXRvciAmJiBuYXZpZ2F0b3JbJ2Nvbm5lY3Rpb24nXTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcnR0OiBTdWJqZWN0PG51bWJlcj4gPSBuZXcgU3ViamVjdCh1bmRlZmluZWQpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9lZmZlY3RpdmVUeXBlOiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdCh1bmRlZmluZWQpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eTogU3ViamVjdDxudW1iZXI+ID0gbmV3IFN1YmplY3QodW5kZWZpbmVkKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBpZiAoIXRoaXMuaXNTdXBwb3J0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNldHVwTmV0d29ya0NoYW5nZUxpc3RlbmVycygpO1xuICAgIHRoaXMudXBkYXRlU3RhdGlzdGljcygpO1xuICB9XG5cbiAgZ2V0IGlzU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc1N1cHBvcnRlZDtcbiAgfVxuXG4gIGdldCBydHQoKTogU3ViamVjdDxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fcnR0O1xuICB9XG5cbiAgZ2V0IGVmZmVjdGl2ZVR5cGUoKTogU3ViamVjdDxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5fZWZmZWN0aXZlVHlwZTtcbiAgfVxuXG4gIGdldCBkb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSgpOiBTdWJqZWN0PG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLl9kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSgpOiBudW1iZXIge1xuICAgIGlmICghdGhpcy5pc1N1cHBvcnRlZCkge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIHJldHVybiBuYXZpZ2F0b3JbJ2Nvbm5lY3Rpb24nXS5kb3dubGluayB8fCBuYXZpZ2F0b3JbJ2Nvbm5lY3Rpb24nXS5kb3dubGlua01heDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RWZmZWN0aXZlVHlwZSgpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5pc1N1cHBvcnRlZCkge1xuICAgICAgcmV0dXJuICdVbmtub3duJztcbiAgICB9XG5cbiAgICByZXR1cm4gbmF2aWdhdG9yWydjb25uZWN0aW9uJ10uZWZmZWN0aXZlVHlwZSB8fCBuYXZpZ2F0b3JbJ2Nvbm5lY3Rpb24nXS50eXBlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSb3VuZFRyaXBUaW1lKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIG5hdmlnYXRvclsnY29ubmVjdGlvbiddLnJ0dDtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBOZXR3b3JrQ2hhbmdlTGlzdGVuZXJzKCk6IHZvaWQge1xuICAgIGNvbnN0IGxpc3RlbmVyID0gKCk6IHZvaWQgPT4ge1xuICAgICAgdGhpcy51cGRhdGVTdGF0aXN0aWNzKCk7XG4gICAgfTtcblxuICAgIG5hdmlnYXRvclsnY29ubmVjdGlvbiddLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGxpc3RlbmVyKTtcblxuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICBuYXZpZ2F0b3JbJ2Nvbm5lY3Rpb24nXS5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBsaXN0ZW5lcik7XG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTdGF0aXN0aWNzKCk6IHZvaWQge1xuICAgIHRoaXMuX3J0dC52YWx1ZSA9IHRoaXMuZ2V0Um91bmRUcmlwVGltZSgpO1xuICAgIHRoaXMuX2VmZmVjdGl2ZVR5cGUudmFsdWUgPSB0aGlzLmdldEVmZmVjdGl2ZVR5cGUoKTtcbiAgICB0aGlzLl9kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eS52YWx1ZSA9IHRoaXMuZ2V0RG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkoKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IE1ldHJpY3NUeXBlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1R5cGUnO1xuaW1wb3J0IE1ldHJpY1R5cGUgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNUeXBlJztcbmltcG9ydCBEdXJhdGlvbnMgZnJvbSAnLi4vdGltZS9EdXJhdGlvbic7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IFNESyBmcm9tICcuLi9zZGsvU0RLJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcblxuZXhwb3J0IGNsYXNzIFN0cmVhbVNldHVwTGlzdGVuZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU3RyZWFtU2V0dXBMaXN0ZW5lcicpO1xuICBwcml2YXRlIHJlYWRvbmx5IG1ldHJpY3NTZXJ2aWNlID0gU0RLLm1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wYWdlTG9hZFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RhcnRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgX21ldHJpY1N1Ym1pdHRlZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHBhZ2VMb2FkVGltZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLl9wYWdlTG9hZFRpbWUgPSBwYWdlTG9hZFRpbWU7XG4gIH1cblxuICBzdWNjZXNzKHN0cmVhbUlkKTogdm9pZCB7XG4gICAgdGhpcy5yZWNvcmRTdHJlYW1NZXRyaWMoTWV0cmljc1R5cGUuU2V0dXBDb21wbGV0ZWQsIHN0cmVhbUlkKTtcbiAgfVxuXG4gIGZhaWwoKTogdm9pZCB7XG4gICAgdGhpcy5yZWNvcmRTdHJlYW1NZXRyaWMoTWV0cmljc1R5cGUuU2V0dXBGYWlsZWQpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvcmRTdHJlYW1NZXRyaWMobWV0cmljVHlwZTogTWV0cmljc1R5cGUsIHN0cmVhbUlkPzogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX21ldHJpY1N1Ym1pdHRlZCkge1xuICAgICAgcmV0dXJuIDtcbiAgICB9XG5cbiAgICB0aGlzLl9tZXRyaWNTdWJtaXR0ZWQgPSB0cnVlO1xuXG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBzZXR1cFRpbWUgPSBub3cgLSB0aGlzLl9zdGFydFRpbWU7XG4gICAgY29uc3QgbWV0cmljTmFtZSA9IG5ldyBNZXRyaWNUeXBlKG1ldHJpY1R5cGUpLmdldE5hbWUoKTtcblxuICAgIHRoaXMubWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IHNldHVwVGltZX0sXG4gICAgICBzdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBbJXNdIFN0cmVhbSBtZXRyaWMgWyVzXSBpbiBbJXNdJyxcbiAgICAgIG5ldyBEdXJhdGlvbnMobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKS50b0lzb1N0cmluZygpLFxuICAgICAgc3RyZWFtSWQsXG4gICAgICBtZXRyaWNOYW1lLFxuICAgICAgbmV3IER1cmF0aW9ucyhzZXR1cFRpbWUpLnRvSXNvU3RyaW5nKClcbiAgICApO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IEVkZ2VUb2tlbiBmcm9tICcuL0VkZ2VUb2tlbic7XG5pbXBvcnQge0VuY29kZWRFZGdlVG9rZW59IGZyb20gJy4vRW5jb2RlZEVkZ2VUb2tlbic7XG5cbmNvbnN0IGVkZ2VBdXRoVG9rZW5QcmVmaXggPSAnRElHRVNUOic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVkZ2VBdXRoUGFyc2VyIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdFZGdlQXV0aFBhcnNlcicpO1xuXG4gIHN0YXRpYyBwYXJzZVRva2VuKHRva2VuOiBFbmNvZGVkRWRnZVRva2VuKTogRWRnZVRva2VuIHtcbiAgICBpZiAoIXRoaXMuaXNFbmNvZGVkRWRnZVRva2VuVmFsaWQodG9rZW4pKSB7XG4gICAgICBFZGdlQXV0aFBhcnNlci5fbG9nZ2VyLmVycm9yKCdUb2tlbiBpcyBub3QgdmFsaWQgWyVzXScsIHRva2VuKTtcblxuICAgICAgcmV0dXJuIG5ldyBFZGdlVG9rZW4obnVsbCk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRlY29kZWRUb2tlbiA9IGF0b2IodG9rZW4uc3Vic3RyKGVkZ2VBdXRoVG9rZW5QcmVmaXgubGVuZ3RoKSk7XG4gICAgICBjb25zdCBlZGdlVG9rZW4gPSBKU09OLnBhcnNlKGRlY29kZWRUb2tlbik7XG5cbiAgICAgIGVkZ2VUb2tlbi50b2tlbiA9IEpTT04ucGFyc2UoZWRnZVRva2VuLnRva2VuKTtcblxuICAgICAgcmV0dXJuIG5ldyBFZGdlVG9rZW4oZWRnZVRva2VuKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBFZGdlQXV0aFBhcnNlci5fbG9nZ2VyLmVycm9yKCdDYW5ub3QgcGFyc2UgdG9rZW4gdmFsdWUnLCBlKTtcblxuICAgICAgcmV0dXJuIG5ldyBFZGdlVG9rZW4obnVsbCk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGlzRW5jb2RlZEVkZ2VUb2tlblZhbGlkKHRva2VuOiBFbmNvZGVkRWRnZVRva2VuKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdG9rZW4gJiYgdG9rZW4uc3RhcnRzV2l0aChlZGdlQXV0aFRva2VuUHJlZml4KTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW50ZXJmYWNlIElUb2tlbiB7XG4gIHVyaTogVVJMIHwgbnVsbDtcbiAgY2FwYWJpbGl0aWVzOiBzdHJpbmdbXTtcbn1cblxuaW50ZXJmYWNlIElFZGdlVG9rZW4ge1xuICBhcHBsaWNhdGlvbklkOiBzdHJpbmc7XG4gIHRva2VuOiBJVG9rZW47XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVkZ2VUb2tlbiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FwcGxpY2F0aW9uSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfdG9rZW46IElUb2tlbjtcblxuICBjb25zdHJ1Y3RvcihlZGdlVG9rZW46IElFZGdlVG9rZW4pIHtcbiAgICB0aGlzLl9hcHBsaWNhdGlvbklkID0gZWRnZVRva2VuPy5hcHBsaWNhdGlvbklkIHx8ICcnO1xuICAgIHRoaXMuX3Rva2VuID0ge1xuICAgICAgdXJpOiBlZGdlVG9rZW4/LnRva2VuPy51cmkgPyBuZXcgVVJMKGVkZ2VUb2tlbi50b2tlbi51cmkpIDogbnVsbCxcbiAgICAgIGNhcGFiaWxpdGllczogZWRnZVRva2VuPy50b2tlbj8uY2FwYWJpbGl0aWVzIHx8IFtdXG4gICAgfTtcbiAgfVxuXG4gIGdldCB1cmkoKTogVVJMIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3Rva2VuLnVyaTtcbiAgfVxuXG4gIGdldCBjYXBhYmlsaXRpZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLl90b2tlbi5jYXBhYmlsaXRpZXM7XG4gIH1cblxuICBnZXQgdGVuYW5jeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9hcHBsaWNhdGlvbklkO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0xvZ2dpbmdMZXZlbFR5cGV9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuaW1wb3J0IHtUZWxlbWV0cnlMZXZlbFR5cGV9IGZyb20gJy4uL21ldHJpY3MvTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuXG5kZWNsYXJlIGNvbnN0IF9fRkVBVFVSRVNfXzoge1xuICBzZW5kTG9jYWxDYW5kaWRhdGVzOiBib29sZWFuO1xuICBzZW5kTG9nczogTG9nZ2luZ0xldmVsVHlwZTtcbiAgc2VuZE1ldHJpY3M6IFRlbGVtZXRyeUxldmVsVHlwZTtcbiAgbG9nVG9Db25zb2xlOiBMb2dnaW5nTGV2ZWxUeXBlO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnVpbGRGZWF0dXJlcyB7XG4gIHByaXZhdGUgc3RhdGljIF9zZW5kTG9jYWxDYW5kaWRhdGVzOiBib29sZWFuO1xuICBwcml2YXRlIHN0YXRpYyBfc2VuZExvZ3M6IExvZ2dpbmdMZXZlbFR5cGU7XG4gIHByaXZhdGUgc3RhdGljIF9zZW5kTWV0cmljczogVGVsZW1ldHJ5TGV2ZWxUeXBlO1xuICBwcml2YXRlIHN0YXRpYyBfbG9nVG9Db25zb2xlOiBMb2dnaW5nTGV2ZWxUeXBlO1xuXG4gIHN0YXRpYyBnZXQgc2VuZExvY2FsQ2FuZGlkYXRlcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fc2VuZExvY2FsQ2FuZGlkYXRlcztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2VuZExvZ3MoKTogTG9nZ2luZ0xldmVsVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbmRMb2dzO1xuICB9XG5cbiAgc3RhdGljIGdldCBzZW5kTWV0cmljcygpOiBUZWxlbWV0cnlMZXZlbFR5cGUge1xuICAgIHJldHVybiB0aGlzLl9zZW5kTWV0cmljcztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgbG9nVG9Db25zb2xlKCk6IExvZ2dpbmdMZXZlbFR5cGUge1xuICAgIHJldHVybiB0aGlzLl9sb2dUb0NvbnNvbGU7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlGZWF0dXJlcygpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZmVhdHVyZXMgPSBfX0ZFQVRVUkVTX187XG5cbiAgICAgIHRoaXMuX3NlbmRMb2NhbENhbmRpZGF0ZXMgPSAnc2VuZExvY2FsQ2FuZGlkYXRlcycgaW4gZmVhdHVyZXMgPyBmZWF0dXJlcy5zZW5kTG9jYWxDYW5kaWRhdGVzIDogdHJ1ZTtcbiAgICAgIHRoaXMuX3NlbmRMb2dzID0gJ3NlbmRMb2dzJyBpbiBmZWF0dXJlcyA/IGZlYXR1cmVzLnNlbmRMb2dzIDogJ0FsbCc7XG4gICAgICB0aGlzLl9zZW5kTWV0cmljcyA9ICdzZW5kTWV0cmljcycgaW4gZmVhdHVyZXMgPyBmZWF0dXJlcy5zZW5kTWV0cmljcyA6ICdBbGwnO1xuICAgICAgdGhpcy5fbG9nVG9Db25zb2xlID0gJ2xvZ1RvQ29uc29sZScgaW4gZmVhdHVyZXMgPyBmZWF0dXJlcy5sb2dUb0NvbnNvbGUgOiAnQWxsJztcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9zZW5kTG9jYWxDYW5kaWRhdGVzID0gdHJ1ZTtcbiAgICAgIHRoaXMuX3NlbmRMb2dzID0gJ0FsbCc7XG4gICAgICB0aGlzLl9zZW5kTWV0cmljcyA9ICdBbGwnO1xuICAgICAgdGhpcy5fbG9nVG9Db25zb2xlID0gJ0FsbCc7XG4gICAgfVxuICB9XG59XG5cbkJ1aWxkRmVhdHVyZXMuYXBwbHlGZWF0dXJlcygpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEJyb3dzZXJEZXRlY3RvciBmcm9tICcuLi9kb20vQnJvd3NlckRldGVjdG9yJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmVhdHVyZUVuYWJsZW1lbnQge1xuICBzdGF0aWMgZ2V0IGNsaWVudE9mZmVyRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgLy8gQ2xpZW50IG9mZmVyIHdvcmtmbG93IGRvZXMgbm90IHdvcmsgY29ycmVjdGx5IGluIHRoZSBmb2xsb3dpbmcgYnJvd3NlcnNcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzQgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTc1IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3NiB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzc7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGFkZFRyYW5jZWl2ZXJEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAvLyBDaHJvbWUgNjksIDcwLCA3MSwgNzIgZXhwb3NlcyBgYWRkVHJhbmNlaXZlcmAgYnV0IGl0IGRvZXMgbm90IHdvcmsgY29ycmVjdGx5XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTY5IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3MCB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzEgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTcyO1xuICB9XG5cbiAgc3RhdGljIGdldCBnZXRTdGF0c1Byb21pc2VCYXNlZERpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDY2O1xuICB9XG5cbiAgc3RhdGljIGdldCBnZXRDdXJyZW50T2ZmZXJEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnQ2hyb21lJyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA2OSB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnRmlyZWZveCcgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNTY7XG4gIH1cblxuICBzdGF0aWMgZ2V0IG9uVHJhY2tEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnQ2hyb21lJyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA2MyB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnRmlyZWZveCcgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNTI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHdlYmtpdFJUQ1BlZXJDb25uZWN0aW9uRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnQ2hyb21lJyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA1NTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgcHJvbWlzZUJhc2VkUENNZXRob2RzRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0ZpcmVmb3gnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDUyO1xuICB9XG5cbiAgc3RhdGljIGdldCBzaG91bGRVc2VOYXRpdmVIbHMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ1NhZmFyaScgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ1NhbXN1bmdCcm93c2VyJztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNQcmVjYWNoaW5nRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lICE9PSAnSUUnO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0luc2VydGFibGVTdHJlYW1zU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhKHR5cGVvZiBNZWRpYVN0cmVhbVRyYWNrUHJvY2Vzc29yID09PSAndW5kZWZpbmVkJyB8fFxuICAgICAgdHlwZW9mIE1lZGlhU3RyZWFtVHJhY2tHZW5lcmF0b3IgPT09ICd1bmRlZmluZWQnKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNGb3JjZUNocm9tZUdhcmJhZ2VDb2xsZWN0aW9uU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIHR5cGVvZiBkb2N1bWVudD8uY3JlYXRlRWxlbWVudCA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNRdWV1ZU1pY3JvdGFza1N1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnQ2hyb21lJyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA+PSA3MSB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnRmlyZWZveCcgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPj0gNjkgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ1NhZmFyaSc7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzTW9iaWxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuaXNNb2JpbGUoKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZGVjbGFyZSBjb25zdCBfX1BBUkFNRVRFUlNfXzoge1xuICBkaXNjb3Zlcnk6IElEaXNjb3ZlcnlQYXJhbWV0ZXI7XG59O1xuXG5pbnRlcmZhY2UgSURpc2NvdmVyeVBhcmFtZXRlcntcbiAgaW50ZW50aW9uczogc3RyaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQYXJhbWV0ZXJzIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2Rpc2NvdmVyeVBhcmFtZXRlcnM6IElEaXNjb3ZlcnlQYXJhbWV0ZXIgO1xuXG4gIHN0YXRpYyBnZXQgZGlzY292ZXJ5UGFyYW1ldGVycygpOiBJRGlzY292ZXJ5UGFyYW1ldGVyIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzY292ZXJ5UGFyYW1ldGVycztcbiAgfVxuXG4gIHN0YXRpYyBhcHBseVBhcmFtZXRlcnMoKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhcmFtZXRlcnMgPSBfX1BBUkFNRVRFUlNfXztcblxuICAgICAgdGhpcy5fZGlzY292ZXJ5UGFyYW1ldGVycyA9ICdkaXNjb3ZlcnknIGluIHBhcmFtZXRlcnMgPyBwYXJhbWV0ZXJzLmRpc2NvdmVyeSA6IHtpbnRlbnRpb25zOiAnJ307XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fZGlzY292ZXJ5UGFyYW1ldGVycyA9IHtpbnRlbnRpb25zOiAnJ307XG4gICAgfVxuICB9XG59XG5cblBhcmFtZXRlcnMuYXBwbHlQYXJhbWV0ZXJzKCk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi9JRGlzcG9zYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpc3Bvc2FibGUgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgX2Rpc3Bvc2VkOiBib29sZWFuO1xuICBwcml2YXRlIF9kaXNwb3NhYmxlOiAoKSA9PiB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKGRpc3Bvc2FibGU6ICgpID0+IHZvaWQpIHtcbiAgICB0aGlzLl9kaXNwb3NlZCA9IGZhbHNlO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGUgPSBkaXNwb3NhYmxlO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9kaXNwb3NlZCA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcy5fZGlzcG9zYWJsZS5jYWxsKHRoaXMpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi9JRGlzcG9zYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpc3Bvc2FibGVMaXN0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbGlzdDogSURpc3Bvc2FibGVbXSA9IFtdO1xuXG4gIGFkZChkaXNwb3NhYmxlOiBJRGlzcG9zYWJsZSk6IHZvaWQge1xuICAgIHRoaXMuX2xpc3QucHVzaChkaXNwb3NhYmxlKTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fbGlzdC5mb3JFYWNoKGRpc3Bvc2FibGUgPT4gZGlzcG9zYWJsZS5kaXNwb3NlKCkpO1xuICAgIHRoaXMuX2xpc3QubGVuZ3RoID0gMDtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBEaXNwb3NhYmxlTGlzdFtkaXNwb3NhYmxlcz0ke3RoaXMuX2xpc3QubGVuZ3RofV1gO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdHJpbmdzIHtcbiAgc3RhdGljIHJhbmRvbShsZW5ndGg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3QgcmFuZG9tMTNDaGFyYWN0ZXJzID0gKCk6IHN0cmluZyA9PiB7XG4gICAgICByZXR1cm4gTWF0aC5yYW5kb20oKS50b1N0cmluZygxNikuc3Vic3RyaW5nKDIsIDE1KTtcbiAgICB9O1xuXG4gICAgY29uc3QgbG9vcHM6IG51bWJlciA9IE1hdGguY2VpbChsZW5ndGggLyAxMyk7XG5cbiAgICByZXR1cm4gbmV3IEFycmF5KGxvb3BzKS5maWxsKHJhbmRvbTEzQ2hhcmFjdGVycykucmVkdWNlKChzdHJpbmcsIGZ1bmMpID0+IHtcbiAgICAgIHJldHVybiBzdHJpbmcgKyBmdW5jKCk7XG4gICAgfSwgJycpLnN1YnN0cmluZygwLCBsZW5ndGgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1N0cmluZ3MgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0VW5yZWFjaGFibGUoeDogbmV2ZXIpOiBuZXZlciB7XG4gIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCB2YWx1ZSBbJHt4fV0uIFRoaXMgc2hvdWxkIG5ldmVyIGJlIHJlYWNoZWRgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXNzZXJ0VW5yZWFjaGFibGU7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lBcHBlbmRlcn0gZnJvbSAnLi9JQXBwZW5kZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcHBlbmRlcnMge1xuICBwcml2YXRlIF9hcHBlbmRlcnM6IEFycmF5PElBcHBlbmRlcj4gPSBbXTtcblxuICBnZXQgdmFsdWUoKTogQXJyYXk8SUFwcGVuZGVyPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwcGVuZGVycztcbiAgfVxuXG4gIGFkZChhcHBlbmRlcjogSUFwcGVuZGVyKTogdm9pZCB7XG4gICAgdGhpcy5fYXBwZW5kZXJzLnB1c2goYXBwZW5kZXIpO1xuICB9XG5cbiAgcmVtb3ZlKGFwcGVuZGVyKTogdm9pZCB7XG4gICAgdGhpcy5fYXBwZW5kZXJzID0gdGhpcy5fYXBwZW5kZXJzLnJlZHVjZSgoaXRlbXMsIGl0ZW0pID0+IHtcbiAgICAgIGlmICghKGl0ZW0gPT09IGFwcGVuZGVyKSkge1xuICAgICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaXRlbXM7XG4gICAgfSwgW10gYXMgQXJyYXk8SUFwcGVuZGVyPik7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7SUFwcGVuZGVyfSBmcm9tICcuL0lBcHBlbmRlcic7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb25zb2xlQXBwZW5kZXIgaW1wbGVtZW50cyBJQXBwZW5kZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF90aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbDtcblxuICBsb2cobG9nTGV2ZWw6IExvZ2dpbmdMZXZlbCwgbWVzc2FnZTogc3RyaW5nLCBjYXRlZ29yeTogc3RyaW5nLCBkYXRlOiBEYXRlKTogdm9pZCB7XG4gICAgaWYgKGxvZ0xldmVsIDwgdGhpcy5fdGhyZXNob2xkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZnVsbE1lc3NhZ2UgPSBgJHtkYXRlLnRvSVNPU3RyaW5nKCl9IFske2NhdGVnb3J5fV0gWyR7TG9nZ2luZ0xldmVsW2xvZ0xldmVsXX1dICR7bWVzc2FnZX1gO1xuXG4gICAgaWYgKGxvZ0xldmVsIDwgTG9nZ2luZ0xldmVsLldhcm4pIHtcbiAgICAgIGNvbnNvbGUubG9nKGZ1bGxNZXNzYWdlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnNvbGUuZXJyb3IoZnVsbE1lc3NhZ2UpO1xuICB9XG5cbiAgY29uc3RydWN0b3IodGhyZXNob2xkOiBMb2dnaW5nTGV2ZWwpIHtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7SUFwcGVuZGVyfSBmcm9tICcuL0lBcHBlbmRlcic7XG5pbXBvcnQgQXBwZW5kZXJzIGZyb20gJy4vQXBwZW5kZXJzJztcbmltcG9ydCBMb2dnaW5nVGhyZXNob2xkIGZyb20gJy4vTG9nZ2luZ1RocmVzaG9sZCc7XG5cbmV4cG9ydCBlbnVtIExvZ2dpbmdMZXZlbCB7XG4gIEFsbCA9IC0xLFxuICBUcmFjZSA9IDEwLFxuICBEZWJ1ZyA9IDIwLFxuICBJbmZvID0gMzAsXG4gIFdhcm4gPSA0MCxcbiAgRXJyb3IgPSA1MCxcbiAgRmF0YWwgPSA2MCxcbiAgT2ZmID0gMTAwLFxufVxuXG5leHBvcnQgdHlwZSBMb2dnaW5nTGV2ZWxUeXBlID0gJ09mZicgfCAnVHJhY2UnIHwgJ0RlYnVnJyB8ICdJbmZvJyB8ICdXYXJuJyB8ICdFcnJvcicgfCAnRmF0YWwnIHwgJ0FsbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvZ2dlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NhdGVnb3J5OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FwcGVuZGVyczogQXBwZW5kZXJzO1xuICBwcml2YXRlIHJlYWRvbmx5IF90aHJlc2hvbGQ6IExvZ2dpbmdUaHJlc2hvbGQ7XG5cbiAgZ2V0IGNhdGVnb3J5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2NhdGVnb3J5O1xuICB9XG5cbiAgZ2V0IGFwcGVuZGVycygpOiBBcHBlbmRlcnMge1xuICAgIHJldHVybiB0aGlzLl9hcHBlbmRlcnM7XG4gIH1cblxuICBnZXQgdGhyZXNob2xkKCk6IExvZ2dpbmdUaHJlc2hvbGQge1xuICAgIHJldHVybiB0aGlzLl90aHJlc2hvbGQ7XG4gIH1cblxuICB0cmFjZSguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuVHJhY2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuVHJhY2UsIGFyZ3MpO1xuICB9XG5cbiAgZGVidWcoLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLkRlYnVnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLkRlYnVnLCBhcmdzKTtcbiAgfVxuXG4gIGluZm8oLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLkluZm8pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuSW5mbywgYXJncyk7XG4gIH1cblxuICB3YXJuKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5XYXJuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLldhcm4sIGFyZ3MpO1xuICB9XG5cbiAgZXJyb3IoLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLkVycm9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLkVycm9yLCBhcmdzKTtcbiAgfVxuXG4gIGZhdGFsKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5GYXRhbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nKExvZ2dpbmdMZXZlbC5GYXRhbCwgYXJncyk7XG4gIH1cblxuICBwcml2YXRlIGxvZyhsZXZlbDogbnVtYmVyLCBhcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoKTtcbiAgICBjb25zdCBtZXNzYWdlID0gdGhpcy5yZXBsYWNlUGxhY2Vob2xkZXJzKGFyZ3MpO1xuXG4gICAgdGhpcy5fYXBwZW5kZXJzLnZhbHVlLmZvckVhY2goKGFwcGVuZGVyOiBJQXBwZW5kZXIpID0+IHtcbiAgICAgIGFwcGVuZGVyLmxvZyhsZXZlbCwgbWVzc2FnZSwgdGhpcy5jYXRlZ29yeSwgZGF0ZSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlcGxhY2VQbGFjZWhvbGRlcnMoYXJnczogYW55KTogc3RyaW5nIHtcbiAgICBsZXQgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyA9IGFyZ3NbMF07XG4gICAgbGV0IGluZGV4ID0gMDtcblxuICAgIHdoaWxlIChyZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLmluZGV4T2YgJiYgYXJncy5sZW5ndGggPiAxICYmIGluZGV4ID49IDApIHtcbiAgICAgIGluZGV4ID0gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5pbmRleE9mKCclJywgaW5kZXgpO1xuXG4gICAgICBpZiAoaW5kZXggPiAwKSB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZyhpbmRleCArIDEsIGluZGV4ICsgMik7XG5cbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgY2FzZSAnJSc6XG4gICAgICAgICAgICAvLyBFc2NhcGVkICclJScgdHVybnMgaW50byAnJSdcbiAgICAgICAgICAgIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcgPSByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZygwLCBpbmRleCkgKyByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZyhpbmRleCArIDEpO1xuICAgICAgICAgICAgaW5kZXgrKztcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAncyc6XG4gICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAvLyBSZXBsYWNlICclZCcgb3IgJyVzJyB3aXRoIHRoZSBhcmd1bWVudFxuICAgICAgICAgICAgYXJnc1swXSA9IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcgPSB0aGlzLnJlcGxhY2VBcmd1bWVudChcbiAgICAgICAgICAgICAgdGhpcy50b1N0cmluZyhhcmdzWzFdKSxcbiAgICAgICAgICAgICAgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyxcbiAgICAgICAgICAgICAgaW5kZXhcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBhcmdzLnNwbGljZSgxLCAxKTtcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnaic6XG4gICAgICAgICAgICAvLyBSZXBsYWNlICVqJyB3aXRoIHRoZSBhcmd1bWVudFxuICAgICAgICAgICAgYXJnc1swXSA9IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcgPSB0aGlzLnJlcGxhY2VBcmd1bWVudChcbiAgICAgICAgICAgICAgdGhpcy5zdHJpbmdpZnkoYXJnc1sxXSksXG4gICAgICAgICAgICAgIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcsXG4gICAgICAgICAgICAgIGluZGV4XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBhcmdzLnNwbGljZSgxLCAxKTtcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBhcmdzLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYXJncy5sZW5ndGggPiAxKSB7XG4gICAgICBhcmdzID0gYXJncy5yZWR1Y2UoKGFjY3VtdWxhdG9yLCBjdXJyZW50VmFsdWUsIGluZGV4LCBhcnJheSkgPT4ge1xuICAgICAgICBpZiAoaW5kZXggKyAxID09PSBhcnJheS5sZW5ndGggJiYgY3VycmVudFZhbHVlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gYWNjdW11bGF0b3IgKyAnXFxuJyArIHRoaXMudG9TdHJpbmcoY3VycmVudFZhbHVlLnN0YWNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhY2N1bXVsYXRvciArIGBbJHt0aGlzLnRvU3RyaW5nKGN1cnJlbnRWYWx1ZSl9XWA7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJncy50b1N0cmluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdHJpbmdpZnkoYXJnOiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNhY2hlID0gW107XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KFxuICAgICAgICBhcmcgaW5zdGFuY2VvZiBFcnJvciA/IHRoaXMudG9TdHJpbmcoYXJnKSA6IGFyZyxcbiAgICAgICAgKGtleSwgdmFsdWUpID0+IHtcbiAgICAgICAgICBpZiAoISF2YWx1ZSAmJiB2YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICAgICAgaWYgKGNhY2hlLmluY2x1ZGVzKHZhbHVlKSkge1xuICAgICAgICAgICAgICByZXR1cm4gJzxyZWN1cnNpdmU+JztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2FjaGUucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICAyXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiAnW29iamVjdCBpbnZhbGlkIEpTT04uc3RyaW5naWZ5XSc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXBsYWNlQXJndW1lbnQoYXJndW1lbnQ6IGFueSwgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZzogc3RyaW5nLCBpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5zdWJzdHJpbmcoMCwgaW5kZXgpICsgdGhpcy50b1N0cmluZyhhcmd1bWVudCkgKyByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZyhpbmRleCArIDIpO1xuICB9XG5cbiAgcHJpdmF0ZSB0b1N0cmluZyhkYXRhOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICByZXR1cm4gZGF0YSA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIGRhdGEudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBsZXQgdG9TdHJpbmdTdHIgPSAnJztcblxuICAgIGlmIChkYXRhKSB7XG4gICAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdG9TdHJpbmdTdHIgPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICB9IGVsc2UgaWYgKGRhdGEgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0b1N0cmluZ1N0ciA9IGRhdGEudG9TdHJpbmcoKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHRvU3RyaW5nU3RyID0gJ1tvYmplY3QgaW52YWxpZCB0b1N0cmluZygpXSc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdG9TdHJpbmdTdHI7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihjYXRlZ29yeTogc3RyaW5nLCBhcHBlbmRlcnM6IEFwcGVuZGVycywgdGhyZXNob2xkOiBMb2dnaW5nVGhyZXNob2xkKSB7XG4gICAgdGhpcy5fY2F0ZWdvcnkgPSBjYXRlZ29yeTtcbiAgICB0aGlzLl9hcHBlbmRlcnMgPSBhcHBlbmRlcnM7XG4gICAgdGhpcy5fdGhyZXNob2xkID0gdGhyZXNob2xkO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgQnVpbGRGZWF0dXJlcyBmcm9tICcuLi9lbnZpcm9ubWVudC9CdWlsZEZlYXR1cmVzJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9nZ2VyRGVmYXVsdHMge1xuICBzdGF0aWMgZ2V0IGRlZmF1bHRMb2dnaW5nTGV2ZWwoKTogTG9nZ2luZ0xldmVsIHtcbiAgICByZXR1cm4gTG9nZ2luZ0xldmVsW0J1aWxkRmVhdHVyZXMuc2VuZExvZ3NdO1xuICB9XG5cbiAgc3RhdGljIGdldCBkZWZhdWx0Q29uc29sZUxvZ2dpbmdMZXZlbCgpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHJldHVybiBMb2dnaW5nTGV2ZWxbQnVpbGRGZWF0dXJlcy5sb2dUb0NvbnNvbGVdO1xuICB9XG5cbiAgc3RhdGljIGdldCBkZWZhdWx0VGVsZW1ldHJ5TG9nZ2luZ0xldmVsKCk6IExvZ2dpbmdMZXZlbCB7XG4gICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5JbmZvO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4vTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXIsIHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4vTG9nZ2VyJztcbmltcG9ydCBBcHBlbmRlcnMgZnJvbSAnLi9BcHBlbmRlcnMnO1xuaW1wb3J0IExvZ2dpbmdUaHJlc2hvbGQgZnJvbSAnLi9Mb2dnaW5nVGhyZXNob2xkJztcbmltcG9ydCBDb25zb2xlQXBwZW5kZXIgZnJvbSAnLi9Db25zb2xlQXBwZW5kZXInO1xuaW1wb3J0IFRlbGVtZXRyeUFwcGVuZGVyIGZyb20gJy4uL3RlbGVtZXRyeS9UZWxlbWV0cnlBcGVuZGVyJztcbmltcG9ydCBUZWxlbWV0cnlDb25maWd1cmF0aW9uIGZyb20gJy4uL3RlbGVtZXRyeS9UZWxlbWV0cnlDb25maWd1cmF0aW9uJztcbmltcG9ydCBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIGZyb20gJy4uL2RvbS9Db25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyJztcbmltcG9ydCB7SUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXJ9IGZyb20gJy4uL2RvbS9JQ29uZmlndXJhdGlvblBhcmFtYXRlclJlYWRlcic7XG5pbXBvcnQgTG9nZ2VyRGVmYXVsdHMgZnJvbSAnLi9Mb2dnZXJEZWZhdWx0cyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvZ2dlckZhY3Rvcnkge1xuICBwcml2YXRlIHN0YXRpYyBfY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcjogSUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIgPSBuZXcgQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcigpO1xuICBwcml2YXRlIHN0YXRpYyBfbG9nZ2Vyczoge1tjYXRlZ29yeTogc3RyaW5nXTogSUxvZ2dlcn0gPSB7fTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2FwcGVuZGVyczogQXBwZW5kZXJzID0gbmV3IEFwcGVuZGVycygpO1xuICBwcml2YXRlIHN0YXRpYyBfdGhyZXNob2xkOiBMb2dnaW5nVGhyZXNob2xkID0gbmV3IExvZ2dpbmdUaHJlc2hvbGQoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb246IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24gPSBuZXcgVGVsZW1ldHJ5Q29uZmlndXJhdGlvbigpO1xuXG4gIHN0YXRpYyBnZXQgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbigpOiBUZWxlbWV0cnlDb25maWd1cmF0aW9uIHtcbiAgICByZXR1cm4gTG9nZ2VyRmFjdG9yeS5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIHN0YXRpYyBnZXRMb2dnZXIoY2F0ZWdvcnk6IHN0cmluZyk6IElMb2dnZXIge1xuICAgIGlmICh0eXBlb2YgY2F0ZWdvcnkgIT09ICdzdHJpbmcnKSB7XG4gICAgICBjYXRlZ29yeSA9ICdTREsnO1xuICAgIH1cblxuICAgIGNvbnN0IGxvZ2dlciA9IExvZ2dlckZhY3RvcnkuX2xvZ2dlcnNbY2F0ZWdvcnldO1xuXG4gICAgaWYgKGxvZ2dlcikge1xuICAgICAgcmV0dXJuIGxvZ2dlcjtcbiAgICB9XG5cbiAgICByZXR1cm4gTG9nZ2VyRmFjdG9yeS5fbG9nZ2Vyc1tjYXRlZ29yeV0gPSBuZXcgTG9nZ2VyKGNhdGVnb3J5LCB0aGlzLl9hcHBlbmRlcnMsIHRoaXMuX3RocmVzaG9sZCk7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlMb2dnZXJDb25maWdGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICBMb2dnZXJGYWN0b3J5LmFwcGx5TG9nZ2luZ0xldmVsKCk7XG4gICAgTG9nZ2VyRmFjdG9yeS5hcHBseUFwcGVuZGVyTG9nZ2luZ0xldmVsKCdjb25zb2xlJywgTG9nZ2VyRmFjdG9yeS5hcHBseUNvbnNvbGVMb2dnZXIuYmluZCh0aGlzKSk7XG4gICAgTG9nZ2VyRmFjdG9yeS5hcHBseUFwcGVuZGVyTG9nZ2luZ0xldmVsKCd0ZWxlbWV0cnknLCBMb2dnZXJGYWN0b3J5LmFwcGx5VGVsZW1ldHJ5TG9nZ2VyLmJpbmQodGhpcykpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXBwbHlMb2dnaW5nTGV2ZWwoKTogdm9pZCB7XG4gICAgY29uc3QgcGFyYW1ldGVyVmFsdWUgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKCdwaGVuaXgtbG9nZ2luZy1sZXZlbCcpO1xuXG4gICAgaWYgKExvZ2dpbmdMZXZlbFtwYXJhbWV0ZXJWYWx1ZV0pIHtcbiAgICAgIHRoaXMuX3RocmVzaG9sZC5zZXRUaHJlc2hvbGQoTG9nZ2luZ0xldmVsW3BhcmFtZXRlclZhbHVlXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXBwbHlBcHBlbmRlckxvZ2dpbmdMZXZlbChuYW1lOiBzdHJpbmcsIGFwcGx5QXBwZW5kZXI6IChsZXZlbDogTG9nZ2luZ0xldmVsKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgY29uc3QgcGFyYW1ldGVyVmFsdWUgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKGBwaGVuaXgtJHtuYW1lfS1sb2dnaW5nLWxldmVsYCk7XG5cbiAgICBpZiAocGFyYW1ldGVyVmFsdWUgPT09ICdPZmYnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYXBwbHlBcHBlbmRlcihMb2dnaW5nTGV2ZWxbcGFyYW1ldGVyVmFsdWVdKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFwcGx5Q29uc29sZUxvZ2dlcihsZXZlbDogTG9nZ2luZ0xldmVsKTogdm9pZCB7XG4gICAgdGhpcy5fYXBwZW5kZXJzLmFkZChuZXcgQ29uc29sZUFwcGVuZGVyKGxldmVsIHx8IExvZ2dlckRlZmF1bHRzLmRlZmF1bHRDb25zb2xlTG9nZ2luZ0xldmVsKSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhcHBseVRlbGVtZXRyeUxvZ2dlcihsZXZlbDogTG9nZ2luZ0xldmVsKTogdm9pZCB7XG4gICAgdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50aHJlc2hvbGQgPSBsZXZlbCB8fCBMb2dnZXJEZWZhdWx0cy5kZWZhdWx0VGVsZW1ldHJ5TG9nZ2luZ0xldmVsO1xuXG4gICAgdGhpcy5fYXBwZW5kZXJzLmFkZChuZXcgVGVsZW1ldHJ5QXBwZW5kZXIodGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbikpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0xvZ2dlckZhY3RvcnkgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59XG5cbkxvZ2dlckZhY3RvcnkuYXBwbHlMb2dnZXJDb25maWdGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWwsIExvZ2dpbmdMZXZlbFR5cGV9IGZyb20gJy4vTG9nZ2VyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9nZ2luZ0xldmVsTWFwcGluZyB7XG4gIHN0YXRpYyBjb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlKGxvZ2dpbmdMZXZlbDogTG9nZ2luZ0xldmVsKTogTG9nZ2luZ0xldmVsVHlwZSB7XG4gICAgc3dpdGNoIChsb2dnaW5nTGV2ZWwpIHtcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLk9mZjpcbiAgICAgICAgcmV0dXJuICdPZmYnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuVHJhY2U6XG4gICAgICAgIHJldHVybiAnVHJhY2UnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuRGVidWc6XG4gICAgICAgIHJldHVybiAnRGVidWcnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuSW5mbzpcbiAgICAgICAgcmV0dXJuICdUcmFjZSc7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5XYXJuOlxuICAgICAgICByZXR1cm4gJ1dhcm4nO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuRXJyb3I6XG4gICAgICAgIHJldHVybiAnRXJyb3InO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuRmF0YWw6XG4gICAgICAgIHJldHVybiAnRmF0YWwnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuQWxsOlxuICAgICAgICByZXR1cm4gJ0FsbCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShsb2dnaW5nTGV2ZWwpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBjb252ZXJ0TG9nZ2luZ0xldmVsVHlwZVRvTG9nZ2luZ0xldmVsKGxvZ2dpbmdMZXZlbFR5cGU6IExvZ2dpbmdMZXZlbFR5cGUpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHN3aXRjaCAobG9nZ2luZ0xldmVsVHlwZSkge1xuICAgICAgY2FzZSAnT2ZmJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5PZmY7XG4gICAgICBjYXNlICdUcmFjZSc6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuVHJhY2U7XG4gICAgICBjYXNlICdEZWJ1Zyc6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuRGVidWc7XG4gICAgICBjYXNlICdJbmZvJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5JbmZvO1xuICAgICAgY2FzZSAnV2Fybic6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuV2FybjtcbiAgICAgIGNhc2UgJ0Vycm9yJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5FcnJvcjtcbiAgICAgIGNhc2UgJ0ZhdGFsJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5GYXRhbDtcbiAgICAgIGNhc2UgJ0FsbCc6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuQWxsO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUobG9nZ2luZ0xldmVsVHlwZSk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRGVmYXVsdHMgZnJvbSAnLi9Mb2dnZXJEZWZhdWx0cyc7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2dnaW5nVGhyZXNob2xkIHtcbiAgcHJpdmF0ZSBfdGhyZXNob2xkOiBMb2dnaW5nTGV2ZWwgPSBMb2dnZXJEZWZhdWx0cy5kZWZhdWx0TG9nZ2luZ0xldmVsO1xuXG4gIGdldCB2YWx1ZSgpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHJldHVybiB0aGlzLl90aHJlc2hvbGQ7XG4gIH1cblxuICBzZXRUaHJlc2hvbGQodGhyZXNob2xkOiBMb2dnaW5nTGV2ZWwpOiB2b2lkIHtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7VGVsZW1ldHJ5TGV2ZWx9IGZyb20gJy4vTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IE1ldHJpY3NUeXBlIGZyb20gJy4vTWV0cmljc1R5cGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXRyaWNUeXBlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWV0cmljczogTWV0cmljc1R5cGU7XG5cbiAgY29uc3RydWN0b3IobWV0cmljczogTWV0cmljc1R5cGUpIHtcbiAgICB0aGlzLl9tZXRyaWNzID0gbWV0cmljcztcbiAgfVxuXG4gIGdldE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gTWV0cmljc1R5cGVbdGhpcy5fbWV0cmljc107XG4gIH1cblxuICBnZXRUZWxlbWV0cnlMZXZlbCgpOiBUZWxlbWV0cnlMZXZlbCB7XG4gICAgc3dpdGNoICh0aGlzLl9tZXRyaWNzKSB7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlRpbWVUb0ZpcnN0RnJhbWU6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5Fc3NlbnRpYWw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkNoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWU6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5Fc3NlbnRpYWw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlN0YWxsZWQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkJ1ZmZlcmluZzpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuU2V0dXBDb21wbGV0ZWQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlNldHVwRmFpbGVkOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5Sb3VuZFRyaXBUaW1lOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5Eb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eTpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuTmV0d29ya1R5cGU6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlJlc29sdXRpb25DaGFuZ2VkOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5BcHBsaWNhdGlvbkZvcmVncm91bmQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkFwcGxpY2F0aW9uQmFja2dyb3VuZDpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRoaXMuX21ldHJpY3MpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFRlbGVtZXRyeURlZmF1bHQgZnJvbSAnLi9UZWxlbWV0cnlEZWZhdWx0JztcblxuZXhwb3J0IGVudW0gVGVsZW1ldHJ5TGV2ZWwge1xuICBPZmYgPSAxMDAsXG4gIEVzc2VudGlhbCA9IDEwLFxuICBBbGwgPSAtMVxufVxuXG5leHBvcnQgdHlwZSBUZWxlbWV0cnlMZXZlbFR5cGUgPSAnT2ZmJyB8ICdFc3NlbnRpYWwnIHwgJ0FsbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1ldHJpY3NDb25maWd1cmF0aW9uIHtcbiAgcHJpdmF0ZSBfdXJsID0gJ2h0dHBzOi8vdGVsZW1ldHJ5LnBoZW5peHJ0cy5jb20vdGVsZW1ldHJ5L21ldHJpY3MnO1xuICBwcml2YXRlIF90ZW5hbmN5OiBzdHJpbmc7XG4gIHByaXZhdGUgX3Nlc3Npb25JZDogc3RyaW5nO1xuICBwcml2YXRlIF9lbnZpcm9ubWVudDogc3RyaW5nO1xuICBwcml2YXRlIF90aHJlc2hvbGQ6IFRlbGVtZXRyeUxldmVsID0gVGVsZW1ldHJ5RGVmYXVsdC5kZWZhdWx0VGVsZW1ldHJ5TGV2ZWw7XG5cbiAgZ2V0IHVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl91cmw7XG4gIH1cblxuICBzZXQgdXJsKHVybDogc3RyaW5nKSB7XG4gICAgY29uc3QgbWV0cmljc1VybCA9IG5ldyBVUkwodXJsKTtcblxuICAgIG1ldHJpY3NVcmwucGF0aG5hbWUgPSBtZXRyaWNzVXJsLnBhdGhuYW1lICsgJy9tZXRyaWNzJztcblxuICAgIHRoaXMuX3VybCA9IG1ldHJpY3NVcmwudG9TdHJpbmcoKTtcbiAgfVxuXG4gIGdldCBlbnZpcm9ubWVudCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9lbnZpcm9ubWVudDtcbiAgfVxuXG4gIHNldCBlbnZpcm9ubWVudChlbnZpcm9ubWVudDogc3RyaW5nKSB7XG4gICAgdGhpcy5fZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudDtcbiAgfVxuXG4gIGdldCB0ZW5hbmN5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3RlbmFuY3k7XG4gIH1cblxuICBzZXQgdGVuYW5jeSh0ZW5hbmN5OiBzdHJpbmcpIHtcbiAgICB0aGlzLl90ZW5hbmN5ID0gdGVuYW5jeTtcbiAgfVxuXG4gIGdldCBzZXNzaW9uSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc2Vzc2lvbklkO1xuICB9XG5cbiAgc2V0IHNlc3Npb25JZChzZXNzaW9uSWQ6IHN0cmluZykge1xuICAgIHRoaXMuX3Nlc3Npb25JZCA9IHNlc3Npb25JZDtcbiAgfVxuXG4gIGdldCB0aHJlc2hvbGQoKTogVGVsZW1ldHJ5TGV2ZWwge1xuICAgIHJldHVybiB0aGlzLl90aHJlc2hvbGQ7XG4gIH1cblxuICBzZXQgdGhyZXNob2xkKHRocmVzaG9sZDogVGVsZW1ldHJ5TGV2ZWwpIHtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4vTWV0cmljc1NlcnZpY2UnO1xuaW1wb3J0IE1ldHJpY3NDb25maWd1cmF0aW9uLCB7VGVsZW1ldHJ5TGV2ZWx9IGZyb20gJy4vTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IFNESyBmcm9tICcuLi9zZGsvU0RLJztcbmltcG9ydCBUZWxlbWV0cnlVcmwgZnJvbSAnLi4vc2RrL1RlbGVtZXRyeVVybCc7XG5pbXBvcnQgRW52aXJvbm1lbnQgZnJvbSAnLi4vc2RrL0Vudmlyb25tZW50JztcbmltcG9ydCBUZWxlbWV0cnlMZXZlbE1hcHBpbmcgZnJvbSAnLi9UZWxlbWV0cmljTGV2ZWxNYXBwaW5nJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0cmljc0ZhY3Rvcnkge1xuICBwcml2YXRlIHN0YXRpYyBfbWV0cmljc1NlcnZpY2VzOiB7W2NhdGVnb3J5OiBzdHJpbmddOiBNZXRyaWNzU2VydmljZX0gPSB7fTtcblxuICBzdGF0aWMgZ2V0TWV0cmljc1NlcnZpY2UodXJsOiBzdHJpbmcpOiBNZXRyaWNzU2VydmljZSB7XG4gICAgaWYgKHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VyJyk7XG4gICAgfVxuXG4gICAgY29uc3QgbWV0cmljc1NlcnZpY2VzID0gTWV0cmljc0ZhY3RvcnkuX21ldHJpY3NTZXJ2aWNlc1t1cmxdO1xuXG4gICAgaWYgKG1ldHJpY3NTZXJ2aWNlcykge1xuICAgICAgcmV0dXJuIG1ldHJpY3NTZXJ2aWNlcztcbiAgICB9XG5cbiAgICBjb25zdCBtZXRyaWNzQ29uZmlndXJhdGlvbiA9IG5ldyBNZXRyaWNzQ29uZmlndXJhdGlvbigpO1xuXG4gICAgbWV0cmljc0NvbmZpZ3VyYXRpb24uc2Vzc2lvbklkID0gU0RLLmNsaWVudFNlc3Npb25JZDtcbiAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi50ZW5hbmN5ID0gU0RLLnRlbmFuY3kudmFsdWU7XG4gICAgbWV0cmljc0NvbmZpZ3VyYXRpb24udXJsID0gVGVsZW1ldHJ5VXJsLmdldFRlbGVtZXRyeVVybCh1cmwpO1xuICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLmVudmlyb25tZW50ID0gRW52aXJvbm1lbnQuZ2V0RW52aXJvbm1lbnRGcm9tVXJsKHVybCk7XG5cbiAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi50aHJlc2hvbGQgPSBUZWxlbWV0cnlMZXZlbE1hcHBpbmcuY29udmVydFRlbGVtZXRyeUxldmVsVHlwZVRvVGVsZW1ldHJ5TGV2ZWwoU0RLLnRlbGVtZXRyeUxldmVsKTtcblxuICAgIHJldHVybiBNZXRyaWNzRmFjdG9yeS5fbWV0cmljc1NlcnZpY2VzW3VybF0gPSBuZXcgTWV0cmljc1NlcnZpY2UobWV0cmljc0NvbmZpZ3VyYXRpb24pO1xuICB9XG5cbiAgc3RhdGljIHNldFRlbGVtZXRyeUxldmVsKHRlbGVtZXRyeUxldmVsOiBUZWxlbWV0cnlMZXZlbCk6IHZvaWQge1xuICAgIGNvbnN0IG1ldHJpY3NTZXJ2aWNlcyA9IE9iamVjdC52YWx1ZXMoTWV0cmljc0ZhY3RvcnkuX21ldHJpY3NTZXJ2aWNlcyk7XG5cbiAgICBpZiAobWV0cmljc1NlcnZpY2VzICYmIG1ldHJpY3NTZXJ2aWNlcy5sZW5ndGgpIHtcbiAgICAgIG1ldHJpY3NTZXJ2aWNlcy5mb3JFYWNoKG1ldHJpY3NTZXJ2aWNlID0+IHtcbiAgICAgICAgY29uc3QgbWV0cmljc0NvbmZpZ3VyYXRpb24gPSBtZXRyaWNzU2VydmljZS5tZXRyaWNzQ29uZmlndXJhdGlvbjtcblxuICAgICAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi50aHJlc2hvbGQgPSB0ZWxlbWV0cnlMZXZlbDtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdMb2dnZXJGYWN0b3J5IGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFZlcnNpb25NYW5hZ2VyIGZyb20gJy4uL3Nkay92ZXJzaW9uL1ZlcnNpb25NYW5hZ2VyJztcbmltcG9ydCBNZXRyaWNzQ29uZmlndXJhdGlvbiBmcm9tICcuL01ldHJpY3NDb25maWd1cmF0aW9uJztcbmltcG9ydCBNZXRyaWNUeXBlIGZyb20gJy4vTWV0cmljVHlwZSc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi9NZXRyaWNzVHlwZSc7XG5cbmNvbnN0IHJlcXVlc3RTaXplTGltaXQgPSAxMDI0O1xuXG5pbnRlcmZhY2UgSVZhbHVlIHtcbiAgc3RyaW5nPzogc3RyaW5nO1xuICB1aW50NjQ/OiBudW1iZXI7XG4gIGZsb2F0PzogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgSU1ldHJpY1JlY29yZCB7XG4gIHRpbWVzdGFtcDogc3RyaW5nO1xuICB0ZW5hbmN5OiBzdHJpbmc7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICBzdHJlYW1JZDogc3RyaW5nO1xuICBtZXRyaWM6IHN0cmluZztcbiAgdmFsdWU6IElWYWx1ZTtcbiAgcHJldmlvdXNWYWx1ZTogSVZhbHVlO1xuICBmdWxsUXVhbGlmaWVkTmFtZTogc3RyaW5nO1xuICBlbnZpcm9ubWVudDogc3RyaW5nO1xuICB2ZXJzaW9uOiBzdHJpbmc7XG4gIHJ1bnRpbWU6IG51bWJlcjtcbiAgcmVzb3VyY2U/OiBzdHJpbmc7XG4gIGtpbmQ/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBJTWV0cmljIHtcbiAgc3RyZWFtSWQ/OiBzdHJpbmc7XG4gIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlO1xuICB2YWx1ZT86IElWYWx1ZTtcbiAgcHJldmlvdXNWYWx1ZT86IElWYWx1ZTtcbiAgcnVudGltZTogbnVtYmVyO1xuICByZXNvdXJjZT86IHN0cmluZztcbiAga2luZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0cmljc1NlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IF9tZXRyaWNzQ29uZmlndXJhdGlvbjogTWV0cmljc0NvbmZpZ3VyYXRpb247XG4gIHByaXZhdGUgX21ldHJpY3M6IEFycmF5PElNZXRyaWNSZWNvcmQ+ID0gW107XG4gIHByaXZhdGUgX2lzU2VuZGluZzogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfZG9tYWluID0gbG9jYXRpb24uaG9zdG5hbWU7XG5cbiAgY29uc3RydWN0b3IobWV0cmljc0NvbmZpZ3VyYXRpb246IE1ldHJpY3NDb25maWd1cmF0aW9uKSB7XG4gICAgdGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb24gPSBtZXRyaWNzQ29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIGdldCBtZXRyaWNzQ29uZmlndXJhdGlvbigpOiBNZXRyaWNzQ29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uO1xuICB9XG5cbiAgcHVzaChtZXRyaWM6IElNZXRyaWMpOiB2b2lkIHtcbiAgICBjb25zdCB7c3RyZWFtSWQsIHZhbHVlLCBwcmV2aW91c1ZhbHVlLCBydW50aW1lLCByZXNvdXJjZSwga2luZH0gPSBtZXRyaWM7XG4gICAgY29uc3QgbWV0cmljVHlwZSA9IG5ldyBNZXRyaWNUeXBlKG1ldHJpYy5tZXRyaWNUeXBlKTtcblxuICAgIGlmICh0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbi50aHJlc2hvbGQgPiBtZXRyaWNUeXBlLmdldFRlbGVtZXRyeUxldmVsKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBtZXRyaWNSZWNvcmQgPSB7XG4gICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIHRlbmFuY3k6IHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLnRlbmFuY3ksXG4gICAgICBzZXNzaW9uSWQ6IHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLnNlc3Npb25JZCxcbiAgICAgIHN0cmVhbUlkLFxuICAgICAgbWV0cmljOiBtZXRyaWNUeXBlLmdldE5hbWUoKSxcbiAgICAgIHZhbHVlLFxuICAgICAgcHJldmlvdXNWYWx1ZSxcbiAgICAgIGZ1bGxRdWFsaWZpZWROYW1lOiB0aGlzLl9kb21haW4sXG4gICAgICBlbnZpcm9ubWVudDogdGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQsXG4gICAgICB2ZXJzaW9uOiBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uLFxuICAgICAgcnVudGltZSxcbiAgICAgIHJlc291cmNlLFxuICAgICAga2luZFxuICAgIH07XG5cbiAgICB0aGlzLl9tZXRyaWNzLnB1c2gobWV0cmljUmVjb3JkKTtcblxuICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRNZXRyaWNzSWZBYmxlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlbmRNZXRyaWNzKG1ldHJpY3NNZXNzYWdlczogQXJyYXk8SU1ldHJpY1JlY29yZD4pOiBQcm9taXNlPFJlc3BvbnNlIHwgdm9pZD4ge1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoe3JlY29yZHM6IG1ldHJpY3NNZXNzYWdlc30pKTtcblxuICAgIHJldHVybiBhd2FpdCBmZXRjaCh0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbi51cmwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogZm9ybURhdGFcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2VuZE1ldHJpY3NJZkFibGUoKTogUHJvbWlzZTxSZXNwb25zZSB8IHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fbWV0cmljcy5sZW5ndGggPD0gMCB8fCB0aGlzLl9pc1NlbmRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pc1NlbmRpbmcgPSB0cnVlO1xuXG4gICAgY29uc3QgbWV0cmljc01lc3NhZ2VzID0gdGhpcy5fbWV0cmljcy5zbGljZSgwLCByZXF1ZXN0U2l6ZUxpbWl0KTtcblxuICAgIHRoaXMuX21ldHJpY3MgPSB0aGlzLl9tZXRyaWNzLnNsaWNlKHJlcXVlc3RTaXplTGltaXQpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2VuZE1ldHJpY3MobWV0cmljc01lc3NhZ2VzKS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgIHRoaXMuX2lzU2VuZGluZyA9IGZhbHNlO1xuXG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTWV0cmljc0lmQWJsZSgpO1xuXG4gICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgdGhpcy5faXNTZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRNZXRyaWNzSWZBYmxlKCk7XG4gICAgfSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmVudW0gTWV0cmljc1R5cGUge1xuICBUaW1lVG9GaXJzdEZyYW1lLFxuICBDaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lLFxuICBTdGFsbGVkLFxuICBCdWZmZXJpbmcsXG4gIFNldHVwQ29tcGxldGVkLFxuICBTZXR1cEZhaWxlZCxcbiAgUm91bmRUcmlwVGltZSxcbiAgRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHksXG4gIE5ldHdvcmtUeXBlLFxuICBSZXNvbHV0aW9uQ2hhbmdlZCxcbiAgQXBwbGljYXRpb25Gb3JlZ3JvdW5kLFxuICBBcHBsaWNhdGlvbkJhY2tncm91bmRcbn1cblxuZXhwb3J0IGRlZmF1bHQgTWV0cmljc1R5cGU7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge1RlbGVtZXRyeUxldmVsLCBUZWxlbWV0cnlMZXZlbFR5cGV9IGZyb20gJy4vTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlMZXZlbE1hcHBpbmcge1xuICBzdGF0aWMgY29udmVydFRlbGVtZXRyeUxldmVsVG9UZWxlbWV0cnlMZXZlbFR5cGUodGVsZW1ldHJ5TGV2ZWw6IFRlbGVtZXRyeUxldmVsKTogVGVsZW1ldHJ5TGV2ZWxUeXBlIHtcbiAgICBzd2l0Y2ggKHRlbGVtZXRyeUxldmVsKSB7XG4gICAgICBjYXNlIFRlbGVtZXRyeUxldmVsLk9mZjpcbiAgICAgICAgcmV0dXJuICdPZmYnO1xuICAgICAgY2FzZSBUZWxlbWV0cnlMZXZlbC5Fc3NlbnRpYWw6XG4gICAgICAgIHJldHVybiAnRXNzZW50aWFsJztcbiAgICAgIGNhc2UgVGVsZW1ldHJ5TGV2ZWwuQWxsOlxuICAgICAgICByZXR1cm4gJ0FsbCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0ZWxlbWV0cnlMZXZlbCk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGNvbnZlcnRUZWxlbWV0cnlMZXZlbFR5cGVUb1RlbGVtZXRyeUxldmVsKHRlbGVtZXRyeUxldmVsVHlwZTogVGVsZW1ldHJ5TGV2ZWxUeXBlKTogVGVsZW1ldHJ5TGV2ZWwge1xuICAgIHN3aXRjaCAodGVsZW1ldHJ5TGV2ZWxUeXBlKSB7XG4gICAgICBjYXNlICdPZmYnOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuT2ZmO1xuICAgICAgY2FzZSAnRXNzZW50aWFsJzpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkVzc2VudGlhbDtcbiAgICAgIGNhc2UgJ0FsbCc6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0ZWxlbWV0cnlMZXZlbFR5cGUpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEJ1aWxkRmVhdHVyZXMgZnJvbSAnLi4vZW52aXJvbm1lbnQvQnVpbGRGZWF0dXJlcyc7XG5pbXBvcnQge1RlbGVtZXRyeUxldmVsfSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NDb25maWd1cmF0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVsZW1ldHJ5RGVmYXVsdCB7XG4gIHN0YXRpYyBnZXQgZGVmYXVsdFRlbGVtZXRyeUxldmVsKCk6IFRlbGVtZXRyeUxldmVsIHtcbiAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWxbQnVpbGRGZWF0dXJlcy5zZW5kTWV0cmljc107XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi9yeC9TdWJqZWN0JztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4vSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb25GYWN0b3J5IGZyb20gJy4vSVBlZXJDb25uZWN0aW9uRmFjdG9yeSc7XG5pbXBvcnQgVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeSBmcm9tICcuL1ZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnknO1xuXG5leHBvcnQgaW50ZXJmYWNlIElQZWVyQ29ubmVjdGlvbk9mZmVySW5pdCB7XG4gIGF1ZGlvVHJhbnNjZWl2ZXI/OiBSVENSdHBUcmFuc2NlaXZlcjtcbiAgdmlkZW9UcmFuc2NlaXZlcj86IFJUQ1J0cFRyYW5zY2VpdmVyO1xuICBwZWVyQ29ubmVjdGlvbjogSVBlZXJDb25uZWN0aW9uO1xuICBsb2NhbE9mZmVyOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQZWVyQ29ubmVjdGlvblNlcnZpY2Uge1xuICBwcml2YXRlIHN0YXRpYyBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1BlZXJDb25uZWN0aW9uU2VydmljZScpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfcGVlckNvbm5lY3Rpb25GYWN0b3J5OiBTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+ID0gbmV3IFN1YmplY3Q8SVBlZXJDb25uZWN0aW9uRmFjdG9yeT4obmV3IFZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkoKSk7XG4gIHByaXZhdGUgc3RhdGljIF9jYWNoZWQ6IHtcbiAgICBkaXJlY3Rpb24/OiBSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbjtcbiAgICBwZWVyQ29ubmVjdGlvbjogUHJvbWlzZTxJUGVlckNvbm5lY3Rpb25PZmZlckluaXQ+O1xuICB9O1xuXG4gIHN0YXRpYyBnZXQgcGVlckNvbm5lY3Rpb25GYWN0b3J5KCk6IFN1YmplY3Q8SVBlZXJDb25uZWN0aW9uRmFjdG9yeT4ge1xuICAgIHJldHVybiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX3BlZXJDb25uZWN0aW9uRmFjdG9yeTtcbiAgfVxuXG4gIHN0YXRpYyBpbml0aWF0ZUluaXRpYWxQcmVjYWNoaW5nKCk6IHZvaWQge1xuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5pc1ByZWNhY2hpbmdFbmFibGVkKSB7XG4gICAgICBjb25zdCBpZ25vcmVkID0gUGVlckNvbm5lY3Rpb25TZXJ2aWNlLnByZWNhY2hlQ3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcigpXG4gICAgICAgIC5jYXRjaChlID0+IFBlZXJDb25uZWN0aW9uU2VydmljZS5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcHJlLWNhY2hlIHBlZXIgY29ubmVjdGlvbiBvZmZlcicsIGUpKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgcHJlY2FjaGVDcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyKCk6IFByb21pc2U8eyBwZWVyQ29ubmVjdGlvbjogUHJvbWlzZTxJUGVlckNvbm5lY3Rpb25PZmZlckluaXQgfCB2b2lkPjsgZGlyZWN0aW9uOiBSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbiB9PiB7XG4gICAgcmV0dXJuIFBlZXJDb25uZWN0aW9uU2VydmljZS5fY2FjaGVkID0ge1xuICAgICAgZGlyZWN0aW9uOiAncmVjdm9ubHknLFxuICAgICAgcGVlckNvbm5lY3Rpb246IFBlZXJDb25uZWN0aW9uU2VydmljZS5jcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyKClcbiAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIFBlZXJDb25uZWN0aW9uU2VydmljZS5fY2FjaGVkID0gbnVsbDtcblxuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH0pXG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyKGRpcmVjdGlvbjogUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24gPSAncmVjdm9ubHknKTogUHJvbWlzZTxJUGVlckNvbm5lY3Rpb25PZmZlckluaXQ+IHtcbiAgICBpZiAoUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9jYWNoZWQgJiYgUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9jYWNoZWQuZGlyZWN0aW9uID09PSBkaXJlY3Rpb24pIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9jYWNoZWQucGVlckNvbm5lY3Rpb247XG5cbiAgICAgIFBlZXJDb25uZWN0aW9uU2VydmljZS5fY2FjaGVkID0gbnVsbDtcblxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX3BlZXJDb25uZWN0aW9uRmFjdG9yeS52YWx1ZS5jcmVhdGVQZWVyQ29ubmVjdGlvbigpXG4gICAgICAudGhlbihhc3luYyBwZWVyQ29ubmVjdGlvbiA9PiB7XG4gICAgICAgIGNvbnN0IHN1cHBvcnRzQWRkVHJhbnNjZWl2ZXIgPSBwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c0FkZFRyYW5zY2VpdmVyO1xuICAgICAgICBsZXQgdmlkZW9UcmFuc2NlaXZlciwgYXVkaW9UcmFuc2NlaXZlcjtcblxuICAgICAgICBpZiAoc3VwcG9ydHNBZGRUcmFuc2NlaXZlcikge1xuICAgICAgICAgIGF1ZGlvVHJhbnNjZWl2ZXIgPSBwZWVyQ29ubmVjdGlvbi5hZGRUcmFuc2NlaXZlcignYXVkaW8nLCB7ZGlyZWN0aW9ufSk7XG4gICAgICAgICAgdmlkZW9UcmFuc2NlaXZlciA9IHBlZXJDb25uZWN0aW9uLmFkZFRyYW5zY2VpdmVyKCd2aWRlbycsIHtkaXJlY3Rpb259KTtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhdWRpb1RyYW5zY2VpdmVyLFxuICAgICAgICAgICAgdmlkZW9UcmFuc2NlaXZlcixcbiAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uOiBwZWVyQ29ubmVjdGlvbixcbiAgICAgICAgICAgIGxvY2FsT2ZmZXI6IGF3YWl0IHBlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKHVuZGVmaW5lZClcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGRpcmVjdGlvbiA9PT0gJ3JlY3Zvbmx5JyA/IHtcbiAgICAgICAgICBvZmZlclRvUmVjZWl2ZUF1ZGlvOiB0cnVlLFxuICAgICAgICAgIG9mZmVyVG9SZWNlaXZlVmlkZW86IHRydWVcbiAgICAgICAgfSA6IHt9O1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcGVlckNvbm5lY3Rpb246IHBlZXJDb25uZWN0aW9uLFxuICAgICAgICAgIGxvY2FsT2ZmZXI6IGF3YWl0IHBlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKG9wdGlvbnMpXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdQZWVyQ29ubmVjdGlvblNlcnZpY2UgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59XG5cblBlZXJDb25uZWN0aW9uU2VydmljZS5pbml0aWF0ZUluaXRpYWxQcmVjYWNoaW5nKCk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdGNDb25maWd1cmF0aW9uTWFuYWdlciB7XG4gIHN0YXRpYyB0cnVuY2F0ZUljZVNlcnZlcnMoY29uZmlndXJhdGlvbjogUlRDQ29uZmlndXJhdGlvbik6IFJUQ0NvbmZpZ3VyYXRpb24ge1xuICAgIGNvbnN0IGljZVNlcnZlcnM6IFJUQ0ljZVNlcnZlcltdID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgdXJsczogc3RyaW5nW10gPSBbXTtcblxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IDI7IGluZGV4KyspIHtcbiAgICAgICAgY29uc3QgdXJsID0gY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLnVybHNbaW5kZXhdO1xuXG4gICAgICAgIGlmICh1cmwpIHtcbiAgICAgICAgICB1cmxzLnB1c2goY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLnVybHNbaW5kZXhdKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpY2VTZXJ2ZXJzLnB1c2goe1xuICAgICAgICB1cmxzOiB1cmxzLFxuICAgICAgICB1c2VybmFtZTogY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLnVzZXJuYW1lLFxuICAgICAgICBjcmVkZW50aWFsOiBjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0uY3JlZGVudGlhbFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzID0gaWNlU2VydmVycztcblxuICAgIHJldHVybiBjb25maWd1cmF0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1J0Y0NvbmZpZ3VyYXRpb25NYW5hZ2VyIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi9yeC9TdWJqZWN0JztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5pbXBvcnQgU2RwUGFyc2VyIGZyb20gJy4vU2RwUGFyc2VyJztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0lEaXNwb3NhYmxlJztcblxuZXhwb3J0IGludGVyZmFjZSBJUnRjTW9uaXRvclN0YXRpc3RpYyB7XG4gIFtraW5kOiBzdHJpbmddOiBJUnRjU3RhdGlzdGljO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElMZWdhY3lSVENTdGF0c1JlcG9ydCB7XG4gIHJlc3VsdDogKCkgPT4gSUxlZ2FjeVJUQ1N0YXRzUmVwb3J0SXRlbVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElMZWdhY3lSVENTdGF0c1JlcG9ydEl0ZW0gZXh0ZW5kcyBSVENTdGF0c1JlcG9ydCB7XG4gIHR5cGU6IHN0cmluZztcbiAgbmFtZXM6ICgpID0+IHN0cmluZ1tdO1xuICBzdGF0OiAobmFtZSkgPT4gbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElSdGNTdGF0aXN0aWMge1xuICBzc3JjPzogc3RyaW5nO1xuICBtZWRpYVR5cGU/OiBzdHJpbmc7XG4gIHRpbWVzdGFtcDogbnVtYmVyO1xuICBiaXRyYXRlPzogbnVtYmVyO1xuICBieXRlc1JlY2VpdmVkPzogbnVtYmVyO1xuICBmcmFtZXNEZWNvZGVkPzogbnVtYmVyO1xuICBwYWNrZXRzTG9zdD86IG51bWJlcjtcbiAgcGFja2V0c1JlY2VpdmVkPzogbnVtYmVyO1xuICBjb2RlYz86IHN0cmluZztcbiAgZnBzPzogbnVtYmVyO1xuICByb3VuZFRyaXBUaW1lPzogbnVtYmVyO1xuICBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXA/OiBudW1iZXI7XG59XG5cbmNvbnN0IHVwZGF0ZVN0YXRpc3RpY1RpbWVvdXQgPSAxMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdGNDb25uZWN0aW9uTW9uaXRvciBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZXN0aW1hdGVkUm91bmRUcmlwVGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9lc3RpbWF0ZWRWaWRlb0NvZGVjOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VzdGltYXRlZEF1ZGlvQ29kZWM6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfcnRjU3RhdGlzdGljOiBTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPiA9IG5ldyBTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPih7fSk7XG4gIHByaXZhdGUgX3BlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb247XG4gIHByaXZhdGUgX2lzTW9uaXRvclJ1bm5pbmcgPSB0cnVlO1xuICBwcml2YXRlIF91cGRhdGVUaW1lb3V0OiBudW1iZXI7XG4gIHByaXZhdGUgX3RyYWNrc1RvTW9uaXRvcjogc3RyaW5nW107XG5cbiAgY29uc3RydWN0b3IocGVlckNvbm5lY3Rpb246IElQZWVyQ29ubmVjdGlvbiwgbWVkaWFTdHJlYW06IE1lZGlhU3RyZWFtLCBlc3RpbWF0ZWRSb3VuZFRyaXBUaW1lOiBudW1iZXIpIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbiA9IHBlZXJDb25uZWN0aW9uO1xuICAgIHRoaXMuX2VzdGltYXRlZFJvdW5kVHJpcFRpbWUgPSBlc3RpbWF0ZWRSb3VuZFRyaXBUaW1lO1xuICAgIHRoaXMuX3RyYWNrc1RvTW9uaXRvciA9IG1lZGlhU3RyZWFtLmdldFRyYWNrcygpLm1hcCh0cmFjayA9PiB0cmFjay5raW5kKSB8fCBbXTtcblxuICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbikge1xuICAgICAgaWYgKCFGZWF0dXJlRW5hYmxlbWVudC5nZXRDdXJyZW50T2ZmZXJEaXNhYmxlZCkge1xuICAgICAgICBjb25zdCBwYXJzZWRTRFAgPSBuZXcgU2RwUGFyc2VyKHRoaXMuX3BlZXJDb25uZWN0aW9uLmN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbi5zZHApO1xuXG4gICAgICAgIHRoaXMuX2VzdGltYXRlZEF1ZGlvQ29kZWMgPSBwYXJzZWRTRFAuYXVkaW9Db2RlYztcbiAgICAgICAgdGhpcy5fZXN0aW1hdGVkVmlkZW9Db2RlYyA9IHBhcnNlZFNEUC52aWRlb0NvZGVjO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnVwZGF0ZVN0YXRpc3RpYygpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBydGNTdGF0aXN0aWMoKTogU3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz4ge1xuICAgIHJldHVybiB0aGlzLl9ydGNTdGF0aXN0aWM7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2lzTW9uaXRvclJ1bm5pbmcgPSBmYWxzZTtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbiA9IG51bGw7XG5cbiAgICBpZiAodGhpcy5fdXBkYXRlVGltZW91dCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3VwZGF0ZVRpbWVvdXQpO1xuICAgICAgdGhpcy5fdXBkYXRlVGltZW91dCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVTdGF0aXN0aWMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmdldFN0YXRzUHJvbWlzZUJhc2VkRGlzYWJsZWQpIHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSBhd2FpdCB0aGlzLnVwZGF0ZVN0YXRpc3RpY0xlZ2FjeSgpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU2FmYXJpIDExIGRvZXNudCBoYXZlIGtpbmQgb3IgbWVkaWFUeXBlIHNvIHdlIG5lZWQgdG8gdGFrZSBpdCBmcm9tIHRoZSBpbmJvdW5kLXJ0cCBvYmplY3QgaWRcbiAgICBjb25zdCBnZXRLaW5kRm9yU2FmYXJpMTEgPSAoaXRlbSk6IHN0cmluZyA9PiBpdGVtLmlkLmluY2x1ZGVzKCdBdWRpbycpID8gJ2F1ZGlvJyA6IGl0ZW0uaWQuaW5jbHVkZXMoJ1ZpZGVvJykgPyAndmlkZW8nIDogJyc7XG4gICAgY29uc3QgaWdub3JlZCA9IGF3YWl0IHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldFN0YXRzKG51bGwpXG4gICAgICAudGhlbihzdGF0cyA9PiB7XG4gICAgICAgIGNvbnN0IHJ0Y1N0YXRpc3RpY3M6IElSdGNNb25pdG9yU3RhdGlzdGljID0ge307XG5cbiAgICAgICAgaWYgKHN0YXRzKSB7XG4gICAgICAgICAgbGV0IHJvdW5kVHJpcFRpbWUgPSB0aGlzLl9lc3RpbWF0ZWRSb3VuZFRyaXBUaW1lO1xuICAgICAgICAgIGxldCBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXA7XG5cbiAgICAgICAgICBzdGF0cy5mb3JFYWNoKHJlcG9ydCA9PiB7XG4gICAgICAgICAgICBpZiAocmVwb3J0LnR5cGUgPT09ICdjYW5kaWRhdGUtcGFpcicgJiYgcmVwb3J0LmN1cnJlbnRSb3VuZFRyaXBUaW1lKSB7XG4gICAgICAgICAgICAgIHJvdW5kVHJpcFRpbWUgPSByZXBvcnQuY3VycmVudFJvdW5kVHJpcFRpbWUgKiAxMDAwO1xuXG4gICAgICAgICAgICAgIGlmIChydGNTdGF0aXN0aWNzWydhdWRpbyddKSB7XG4gICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1snYXVkaW8nXS5yb3VuZFRyaXBUaW1lID0gcm91bmRUcmlwVGltZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChydGNTdGF0aXN0aWNzWyd2aWRlbyddKSB7XG4gICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1sndmlkZW8nXS5yb3VuZFRyaXBUaW1lID0gcm91bmRUcmlwVGltZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocmVwb3J0LnR5cGUgPT09ICdjYW5kaWRhdGUtcGFpcicgJiYgcmVwb3J0Lmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCkge1xuICAgICAgICAgICAgICBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAgPSByZXBvcnQubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wO1xuXG4gICAgICAgICAgICAgIGlmIChydGNTdGF0aXN0aWNzWydhdWRpbyddKSB7XG4gICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1snYXVkaW8nXS5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAgPSBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXA7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAocnRjU3RhdGlzdGljc1sndmlkZW8nXSkge1xuICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbJ3ZpZGVvJ10ubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wID0gbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyZXBvcnQudHlwZSA9PT0gJ2luYm91bmQtcnRwJykge1xuICAgICAgICAgICAgICBjb25zdCBraW5kID0gcmVwb3J0LmtpbmQgfHwgcmVwb3J0Lm1lZGlhVHlwZSB8fCBnZXRLaW5kRm9yU2FmYXJpMTEocmVwb3J0KTtcbiAgICAgICAgICAgICAgbGV0IGNvZGVjID0gJyc7XG5cbiAgICAgICAgICAgICAgc3RhdHMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5pZCA9PT0gcmVwb3J0LmNvZGVjSWQpIHtcbiAgICAgICAgICAgICAgICAgIGNvZGVjID0gaXRlbS5taW1lVHlwZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIGlmIChraW5kICYmIHRoaXMuX3RyYWNrc1RvTW9uaXRvci5pbmNsdWRlcyhraW5kKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGVzID0gcmVwb3J0LmJ5dGVzUmVjZWl2ZWQgfHwgMDtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c0J5dGVzUmVjZWl2ZWQgPSB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWU/LltraW5kXT8uYnl0ZXNSZWNlaXZlZCA/PyAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGVzRGVsdGEgPSBieXRlcyAtIHByZXZpb3VzQnl0ZXNSZWNlaXZlZDtcbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lRGVsdGEgPSByZXBvcnQudGltZXN0YW1wIC0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlPy5ba2luZF0/LnRpbWVzdGFtcDtcbiAgICAgICAgICAgICAgICBjb25zdCBiaXRyYXRlID0gYnl0ZXNEZWx0YSAmJiB0aW1lRGVsdGEgPyBNYXRoLmZsb29yKDggKiBieXRlc0RlbHRhIC9cbiAgICAgICAgICAgICAgICAgIHRpbWVEZWx0YSAqIDEwMDApIDogMDtcblxuICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3Nba2luZF0gPSB7XG4gICAgICAgICAgICAgICAgICBzc3JjOiByZXBvcnQuc3NyYyxcbiAgICAgICAgICAgICAgICAgIG1lZGlhVHlwZToga2luZCxcbiAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcDogcmVwb3J0LnRpbWVzdGFtcCxcbiAgICAgICAgICAgICAgICAgIGJpdHJhdGUsXG4gICAgICAgICAgICAgICAgICBieXRlc1JlY2VpdmVkOiByZXBvcnQuYnl0ZXNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgIHBhY2tldHNMb3N0OiByZXBvcnQucGFja2V0c0xvc3QsXG4gICAgICAgICAgICAgICAgICBwYWNrZXRzUmVjZWl2ZWQ6IHJlcG9ydC5wYWNrZXRzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICBjb2RlYzogY29kZWMgfHwgdGhpcy5nZXRDb2RlY0J5VHlwZShraW5kKSxcbiAgICAgICAgICAgICAgICAgIHJvdW5kVHJpcFRpbWVcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKHJlcG9ydC5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAgfHwgbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wKSB7XG4gICAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzW2tpbmRdLmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCA9IHJlcG9ydC5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAgfHwgbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChraW5kID09PSAndmlkZW8nICYmIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZSAmJiB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUudmlkZW8pIHtcbiAgICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3Nba2luZF1bJ2ZyYW1lc0RlY29kZWQnXSA9IHJlcG9ydC5mcmFtZXNEZWNvZGVkO1xuXG4gICAgICAgICAgICAgICAgICBjb25zdCBmcHMgPSAocmVwb3J0LmZyYW1lc0RlY29kZWQgLSB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUudmlkZW8uZnJhbWVzRGVjb2RlZCkgL1xuICAgICAgICAgICAgICAgICAgICAocnRjU3RhdGlzdGljc1traW5kXS50aW1lc3RhbXAgLSB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUudmlkZW8udGltZXN0YW1wKSAqXG4gICAgICAgICAgICAgICAgICAgIDEwMDA7XG5cbiAgICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3Nba2luZF1bJ2ZwcyddID0gZnBzID8gTWF0aC5yb3VuZChmcHMgKiAxMDApIC8gMTAwIDogMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZSA9IHJ0Y1N0YXRpc3RpY3M7XG4gICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2lzTW9uaXRvclJ1bm5pbmcpIHtcbiAgICAgICAgICB0aGlzLl91cGRhdGVUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdGhpcy51cGRhdGVTdGF0aXN0aWMoKSwgdXBkYXRlU3RhdGlzdGljVGltZW91dCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVTdGF0aXN0aWNMZWdhY3koKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgaWdub3JlZCA9IGF3YWl0IHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldFN0YXRzTGVnYWN5KCkudGhlbihzdGF0cyA9PiB7XG4gICAgICBjb25zdCBydGNTdGF0aXN0aWNzOiBJUnRjTW9uaXRvclN0YXRpc3RpYyA9IHt9O1xuICAgICAgbGV0IHJvdW5kVHJpcFRpbWUgPSB0aGlzLl9lc3RpbWF0ZWRSb3VuZFRyaXBUaW1lO1xuXG4gICAgICBzdGF0cy5yZXN1bHQoKS5mb3JFYWNoKHJlcG9ydCA9PiB7XG4gICAgICAgIHJlcG9ydC5uYW1lcygpLmZvckVhY2gobmFtZSA9PiB7XG4gICAgICAgICAgaWYgKG5hbWUgPT09ICdnb29nUlRUJykge1xuICAgICAgICAgICAgcm91bmRUcmlwVGltZSA9IHJlcG9ydC5zdGF0KG5hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHJlcG9ydC50eXBlID09PSAnc3NyYycpIHtcbiAgICAgICAgICBjb25zdCBtZWRpYVR5cGUgPSByZXBvcnQuc3RhdCgnbWVkaWFUeXBlJykudG9TdHJpbmcoKTtcblxuICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXSA9IHt0aW1lc3RhbXA6IERhdGUubm93KCl9O1xuICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsnc3NyYyddID0gcmVwb3J0LnN0YXQoJ3NzcmMnKS50b1N0cmluZygpO1xuICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsnbWVkaWFUeXBlJ10gPSBtZWRpYVR5cGU7XG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydieXRlc1JlY2VpdmVkJ10gPSByZXBvcnQuc3RhdCgnYnl0ZXNSZWNlaXZlZCcpO1xuICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsncGFja2V0c0xvc3QnXSA9IHJlcG9ydC5zdGF0KCdwYWNrZXRzTG9zdCcpO1xuICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsncGFja2V0c1JlY2VpdmVkJ10gPSByZXBvcnQuc3RhdCgncGFja2V0c1JlY2VpdmVkJyk7XG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydjb2RlYyddID0gcmVwb3J0LnN0YXQoJ2dvb2dDb2RlY05hbWUnKS50b1N0cmluZygpIHx8IHRoaXMuZ2V0Q29kZWNCeVR5cGUobWVkaWFUeXBlKTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ3JvdW5kVHJpcFRpbWUnXSA9IHJvdW5kVHJpcFRpbWU7XG5cbiAgICAgICAgICBpZiAobWVkaWFUeXBlID09PSAndmlkZW8nICYmIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZSAmJiB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUudmlkZW8pIHtcbiAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsnZnJhbWVzRGVjb2RlZCddID0gcmVwb3J0LnN0YXQoJ2ZyYW1lc0RlY29kZWQnKTtcbiAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsnZnBzJ10gPSAocnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdLmZyYW1lc0RlY29kZWQgLSB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUudmlkZW8uZnJhbWVzRGVjb2RlZCkgL1xuICAgICAgICAgICAgICAocnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdLnRpbWVzdGFtcCAtIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlby50aW1lc3RhbXApICpcbiAgICAgICAgICAgIDEwMDAgfHwgMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlID0gcnRjU3RhdGlzdGljcztcbiAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9pc01vbml0b3JSdW5uaW5nKSB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZVRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB0aGlzLnVwZGF0ZVN0YXRpc3RpYygpLCB1cGRhdGVTdGF0aXN0aWNUaW1lb3V0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29kZWNCeVR5cGUodHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ2F1ZGlvJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VzdGltYXRlZEF1ZGlvQ29kZWM7XG4gICAgICBjYXNlICd2aWRlbyc6XG4gICAgICAgIHJldHVybiB0aGlzLl9lc3RpbWF0ZWRWaWRlb0NvZGVjO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICd1bmtub3duJztcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2RwUGFyc2VyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2RwOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2F1ZGlvQ29kZWM6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlkZW9Db2RlYzogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pc0F1ZGlvVHJhY2tFbmFibGVkOiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pc1ZpZGVvVHJhY2tFbmFibGVkOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKHNkcDogc3RyaW5nKSB7XG4gICAgdGhpcy5fc2RwID0gc2RwO1xuXG4gICAgY29uc3Qgc2RwU3BsaXRCeUxpbmVzID0gdGhpcy5fc2RwLnNwbGl0KC8oXFxyXFxufFxccnxcXG4pLyk7XG4gICAgY29uc3Qgc2RwU3BsaXRCeVRyYWNrcyA9IHRoaXMuX3NkcC5zcGxpdCgnbT0nKTtcblxuICAgIHRoaXMuX2F1ZGlvQ29kZWMgPSB0aGlzLmFwcGx5Q29kZWMoJ2F1ZGlvJywgc2RwU3BsaXRCeUxpbmVzKTtcbiAgICB0aGlzLl92aWRlb0NvZGVjID0gdGhpcy5hcHBseUNvZGVjKCd2aWRlbycsIHNkcFNwbGl0QnlMaW5lcyk7XG4gICAgdGhpcy5faXNBdWRpb1RyYWNrRW5hYmxlZCA9IHRoaXMuaXNUcmFja0J5VHlwZUVuYWJsZWQoJ2F1ZGlvJywgc2RwU3BsaXRCeVRyYWNrcyk7XG4gICAgdGhpcy5faXNWaWRlb1RyYWNrRW5hYmxlZCA9IHRoaXMuaXNUcmFja0J5VHlwZUVuYWJsZWQoJ3ZpZGVvJywgc2RwU3BsaXRCeVRyYWNrcyk7XG4gIH1cblxuICBnZXQgYXVkaW9Db2RlYygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9hdWRpb0NvZGVjO1xuICB9XG5cbiAgZ2V0IHZpZGVvQ29kZWMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdmlkZW9Db2RlYztcbiAgfVxuXG4gIGdldCBpc0F1ZGlvVHJhY2tFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc0F1ZGlvVHJhY2tFbmFibGVkO1xuICB9XG5cbiAgZ2V0IGlzVmlkZW9UcmFja0VuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzVmlkZW9UcmFja0VuYWJsZWQ7XG4gIH1cblxuICBwcml2YXRlIGlzVHJhY2tCeVR5cGVFbmFibGVkKHR5cGU6IHN0cmluZywgc2RwU3BsaXRCeVRyYWNrczogc3RyaW5nW10pOiBib29sZWFuIHtcbiAgICBjb25zdCBzZHBTZWN0aW9uRm9yVHlwZSA9IHNkcFNwbGl0QnlUcmFja3MuZmluZChzZHBUcmFjayA9PiBzZHBUcmFjay5zdGFydHNXaXRoKHR5cGUpKTtcblxuICAgIGlmICghc2RwU2VjdGlvbkZvclR5cGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gIXNkcFNlY3Rpb25Gb3JUeXBlLmluY2x1ZGVzKGBhPWluYWN0aXZlYCk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5Q29kZWModHlwZTogc3RyaW5nLCBzZHBTcGxpdEJ5TGluZXM6IHN0cmluZyBbXSk6IHN0cmluZyB7XG4gICAgY29uc3QgdXNlZENvZGVjTGluZSA9IHNkcFNwbGl0QnlMaW5lcy5maW5kKHNkcExpbmUgPT4gc2RwTGluZS5pbmNsdWRlcyhgYT1ydHBtYXA6JHtzZHBTcGxpdEJ5TGluZXMuZmluZChpID0+IGkuaW5jbHVkZXMoYG09JHt0eXBlfWApKS5zcGxpdCgnICcpWzNdfWApKTtcbiAgICBjb25zdCB1c2VkQ29kZWMgPSB1c2VkQ29kZWNMaW5lLnNwbGl0KCcgJylbMV07XG4gICAgY29uc3QgY29kZWNOYW1lID0gdXNlZENvZGVjLnNwbGl0KCcvJylbMF07XG5cbiAgICByZXR1cm4gY29kZWNOYW1lO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uLCB7UGVlckNvbm5lY3Rpb25FdmVudHN9IGZyb20gJy4vSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IHtJTGVnYWN5UlRDU3RhdHNSZXBvcnR9IGZyb20gJy4vUnRjQ29ubmVjdGlvbk1vbml0b3InO1xuXG5jbGFzcyBWYW5pbGxhUGVlckNvbm5lY3Rpb24gaW1wbGVtZW50cyBJUGVlckNvbm5lY3Rpb24ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignVmFuaWxsYVBlZXJDb25uZWN0aW9uJyk7XG4gIHByaXZhdGUgX3BlZXJDb25uZWN0aW9uOiBSVENQZWVyQ29ubmVjdGlvbjtcblxuICBjb25zdHJ1Y3Rvcihjb25maWd1cmF0aW9uPzogUlRDQ29uZmlndXJhdGlvbikge1xuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC53ZWJraXRSVENQZWVyQ29ubmVjdGlvbkVuYWJsZWQpIHtcbiAgICAgIC8vIElnbm9yZWQgYXMgbGVnYWN5IHdlYmtpdFJUQ1BlZXJDb25uZWN0aW9uIGNsYXNzIGlzIGRlcHJlY2F0ZWRcbiAgICAgIC8vIFRoaXMgd2FzIGEgQ2hyb21lIHNwZWNpZmljIGltcGxlbWVudGF0aW9uXG4gICAgICAvLyBSZXF1aXJlcyBhIHRzLWlnbm9yZSBkaXJlY3RpdmUgdG8gcHJldmVudCB0eXBlc2NyaXB0IGVycm9yc1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb24gPSBuZXcgd2Via2l0UlRDUGVlckNvbm5lY3Rpb24oY29uZmlndXJhdGlvbik7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbiA9IG5ldyBSVENQZWVyQ29ubmVjdGlvbihjb25maWd1cmF0aW9uKTtcbiAgfVxuXG4gIGdldCBuYXRpdmUoKTogUlRDUGVlckNvbm5lY3Rpb24gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb247XG4gIH1cblxuICBnZXQgY3VycmVudExvY2FsRGVzY3JpcHRpb24oKTogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmN1cnJlbnRMb2NhbERlc2NyaXB0aW9uO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbigpOiBSVENTZXNzaW9uRGVzY3JpcHRpb24gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3VycmVudFJlbW90ZURlc2NyaXB0aW9uO1xuICB9XG5cbiAgZ2V0IGNvbm5lY3Rpb25TdGF0ZSgpOiBSVENQZWVyQ29ubmVjdGlvblN0YXRlIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY29ubmVjdGlvblN0YXRlO1xuICB9XG5cbiAgZ2V0IGljZUNvbm5lY3Rpb25TdGF0ZSgpOiBSVENJY2VDb25uZWN0aW9uU3RhdGUge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGU7XG4gIH1cblxuICBnZXQgc3VwcG9ydHNHZXRDb25maWd1cmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0Q29uZmlndXJhdGlvbiA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxuXG4gIGdldCBzdXBwb3J0c1NldENvbmZpZ3VyYXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5zZXRDb25maWd1cmF0aW9uID09PSAnZnVuY3Rpb24nO1xuICB9XG5cbiAgZ2V0IHN1cHBvcnRzQWRkVHJhbnNjZWl2ZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICFGZWF0dXJlRW5hYmxlbWVudC5hZGRUcmFuY2VpdmVyRGlzYWJsZWQgJiYgdHlwZW9mIHRoaXMuX3BlZXJDb25uZWN0aW9uLmFkZFRyYW5zY2VpdmVyID09PSAnZnVuY3Rpb24nO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlT2ZmZXIob3B0aW9ucz86IFJUQ09mZmVyT3B0aW9ucyk6IFByb21pc2U8UlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdD4ge1xuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5wcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCkge1xuICAgICAgLy8gSWdub3JlZCBhcyBsZWdhY3kgY3JlYXRlT2ZmZXIgbWV0aG9kIHdpdGggY2FsbGJhY2tzIGlzIGRlcHJlY2F0ZWRcbiAgICAgIC8vIFJlcXVpcmVzIGEgdHMtaWdub3JlIGRpcmVjdGl2ZSB0byBwcmV2ZW50IHR5cGVzY3JpcHQgZXJyb3JzXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3JlYXRlT2ZmZXIocmVzb2x2ZSwgcmVqZWN0LCBvcHRpb25zKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKG9wdGlvbnMpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlQW5zd2VyKG9wdGlvbnM/OiBSVENBbnN3ZXJPcHRpb25zKTogUHJvbWlzZTxSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0PiB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LnByb21pc2VCYXNlZFBDTWV0aG9kc0Rpc2FibGVkKSB7XG4gICAgICAvLyBJZ25vcmVkIGFzIGxlZ2FjeSBjcmVhdGVBbnN3ZXIgbWV0aG9kIHdpdGggY2FsbGJhY2tzIGlzIGRlcHJlY2F0ZWRcbiAgICAgIC8vIFJlcXVpcmVzIGEgdHMtaWdub3JlIGRpcmVjdGl2ZSB0byBwcmV2ZW50IHR5cGVzY3JpcHQgZXJyb3JzXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3JlYXRlQW5zd2VyKHJlc29sdmUsIHJlamVjdCwgb3B0aW9ucykpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jcmVhdGVBbnN3ZXIob3B0aW9ucyk7XG4gIH1cblxuICBhc3luYyBzZXRMb2NhbERlc2NyaXB0aW9uKGRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24oRmVhdHVyZUVuYWJsZW1lbnQucHJvbWlzZUJhc2VkUENNZXRob2RzRGlzYWJsZWQgP1xuICAgICAgbmV3IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbihkZXNjcmlwdGlvbikgOiBkZXNjcmlwdGlvbik7XG4gIH1cblxuICBhc3luYyBzZXRSZW1vdGVEZXNjcmlwdGlvbihkZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGhhc0NyeXB0byA9IGRlc2NyaXB0aW9uLnNkcD8ubWF0Y2goL2E9Y3J5cHRvOi9pKTtcblxuICAgIGlmIChoYXNDcnlwdG8pIHtcbiAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdTRFAgYT1jcnlwdG8gaXMgbm90IHN1cHBvcnRlZCcpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5zZXRSZW1vdGVEZXNjcmlwdGlvbihGZWF0dXJlRW5hYmxlbWVudC5wcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCA/XG4gICAgICBuZXcgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKSA6IGRlc2NyaXB0aW9uKTtcbiAgfVxuXG4gIGdldFNlbmRlcnMoKTogUlRDUnRwU2VuZGVyW10ge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRTZW5kZXJzKCk7XG4gIH1cblxuICBnZXRTdGF0cyhzZWxlY3Rvcj86IE1lZGlhU3RyZWFtVHJhY2sgfCBudWxsKTogUHJvbWlzZTxSVENTdGF0c1JlcG9ydD4ge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRTdGF0cyhzZWxlY3Rvcik7XG4gIH1cblxuICBnZXRTdGF0c0xlZ2FjeSgpOiBQcm9taXNlPElMZWdhY3lSVENTdGF0c1JlcG9ydD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIC8vIElnbm9yZWQgZHVlIHRvIHR5cGVzY3JpcHQgbm90IGhhdmluZyBsZWdhY3kgJ2dldFN0YXRzJyBtZXRob2QgdHlwZSBkZWZpbml0aW9uXG4gICAgICAvLyBUaGlzIHdhcyBhIENocm9tZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgJ2dldFN0YXRzJyBtZXRob2QgZm9yXG4gICAgICAvLyBDaHJvbWVAPD0gNjYgZGV0YWlsZWQgaGVyZTogaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NjI3ODE2XG4gICAgICAvLyBSZXF1aXJlcyBhIHRzLWlnbm9yZSBkaXJlY3RpdmUgdG8gcHJldmVudCB0eXBlc2NyaXB0IGVycm9yc1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldFN0YXRzKHJlc29sdmUpO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkRXZlbnRMaXN0ZW5lcih0eXBlOiBQZWVyQ29ubmVjdGlvbkV2ZW50cywgbGlzdGVuZXI6IEV2ZW50TGlzdGVuZXJPckV2ZW50TGlzdGVuZXJPYmplY3QsIG9wdGlvbnM/OiBib29sZWFuIHwgQWRkRXZlbnRMaXN0ZW5lck9wdGlvbnMpOiB2b2lkIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCBvcHRpb25zKTtcbiAgfVxuXG4gIHJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZTogUGVlckNvbm5lY3Rpb25FdmVudHMsIGxpc3RlbmVyOiBFdmVudExpc3RlbmVyT3JFdmVudExpc3RlbmVyT2JqZWN0LCBvcHRpb25zPzogYm9vbGVhbiB8IEV2ZW50TGlzdGVuZXJPcHRpb25zKTogdm9pZCB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lciwgb3B0aW9ucyk7XG4gIH1cblxuICBhZGRUcmFuc2NlaXZlcihuYW1lOiBzdHJpbmcsIG9wdGlvbnM6IFJUQ1J0cFRyYW5zY2VpdmVySW5pdCk6IFJUQ1J0cFRyYW5zY2VpdmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uYWRkVHJhbnNjZWl2ZXIobmFtZSwgb3B0aW9ucyk7XG4gIH1cblxuICBhZGRTdHJlYW0obWVkaWFTdHJlYW06IE1lZGlhU3RyZWFtKTogdm9pZCB7XG4gICAgbWVkaWFTdHJlYW0uZ2V0VHJhY2tzKCkuZm9yRWFjaCh0cmFjayA9PiB7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5hZGRUcmFjayh0cmFjayk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRDb25maWd1cmF0aW9uKCk6IFJUQ0NvbmZpZ3VyYXRpb24ge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRDb25maWd1cmF0aW9uKCk7XG4gIH1cblxuICBzZXRDb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb246IFJUQ0NvbmZpZ3VyYXRpb24pOiB2b2lkIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5zZXRDb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb24pO1xuICB9XG5cbiAgc2V0IG9udHJhY2soaGFuZGxlcjogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IFJUQ1RyYWNrRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCkge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9udHJhY2sgPSBoYW5kbGVyO1xuICB9XG5cbiAgZ2V0IG9udHJhY2soKTogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IFJUQ1RyYWNrRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9udHJhY2s7XG4gIH1cblxuICBzZXQgb25pY2VjYW5kaWRhdGUoaGFuZGxlcjogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IFJUQ1BlZXJDb25uZWN0aW9uSWNlRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCkge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9uaWNlY2FuZGlkYXRlID0gaGFuZGxlcjtcbiAgfVxuXG4gIGdldCBvbmljZWNhbmRpZGF0ZSgpOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogUlRDUGVlckNvbm5lY3Rpb25JY2VFdmVudCkgPT4gdW5rbm93bikgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24ub25pY2VjYW5kaWRhdGU7XG4gIH1cblxuICBzZXQgb25jb25uZWN0aW9uc3RhdGVjaGFuZ2UoaGFuZGxlcjogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IFJUQ1BlZXJDb25uZWN0aW9uSWNlRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCkge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9uY29ubmVjdGlvbnN0YXRlY2hhbmdlID0gaGFuZGxlcjtcbiAgfVxuXG4gIGdldCBvbmNvbm5lY3Rpb25zdGF0ZWNoYW5nZSgpOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogUlRDUGVlckNvbm5lY3Rpb25JY2VFdmVudCkgPT4gdW5rbm93bikgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24ub25jb25uZWN0aW9uc3RhdGVjaGFuZ2U7XG4gIH1cblxuICBzZXQgb25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UoaGFuZGxlcjogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IEV2ZW50KSA9PiB1bmtub3duKSB8IG51bGwpIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZSA9IGhhbmRsZXI7XG4gIH1cblxuICBnZXQgb25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UoKTogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IEV2ZW50KSA9PiB1bmtub3duKSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZTtcbiAgfVxuXG4gIGNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLmNsb3NlKCk7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uID0gbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBWYW5pbGxhUGVlckNvbm5lY3Rpb247IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBJUGVlckNvbm5lY3Rpb25GYWN0b3J5IGZyb20gJy4vSVBlZXJDb25uZWN0aW9uRmFjdG9yeSc7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4vSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCBWYW5pbGxhUGVlckNvbm5lY3Rpb24gZnJvbSAnLi9WYW5pbGxhUGVlckNvbm5lY3Rpb24nO1xuXG5jbGFzcyBWYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5IGltcGxlbWVudHMgSVBlZXJDb25uZWN0aW9uRmFjdG9yeSB7XG4gIGFzeW5jIGNyZWF0ZVBlZXJDb25uZWN0aW9uKGNvbmZpZ3VyYXRpb24/OiBSVENDb25maWd1cmF0aW9uKTogUHJvbWlzZTxJUGVlckNvbm5lY3Rpb24+IHtcbiAgICByZXR1cm4gbmV3IFZhbmlsbGFQZWVyQ29ubmVjdGlvbihjb25maWd1cmF0aW9uKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBWYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5OyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgU3ViamVjdCBmcm9tICcuL1N1YmplY3QnO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFkT25seVN1YmplY3Q8VD4ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdWJqZWN0OiBTdWJqZWN0PFQ+O1xuXG4gIGNvbnN0cnVjdG9yKHN1YmplY3Q6IFN1YmplY3Q8VD4pIHtcbiAgICB0aGlzLl9zdWJqZWN0ID0gc3ViamVjdDtcbiAgfVxuXG4gIGdldCB2YWx1ZSgpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5fc3ViamVjdC52YWx1ZTtcbiAgfVxuXG4gIHN1YnNjcmliZShsaXN0ZW5lcjogKFQpID0+IHZvaWQpOiBJRGlzcG9zYWJsZSB7XG4gICAgcmV0dXJuIHRoaXMuX3N1YmplY3Quc3Vic2NyaWJlKGxpc3RlbmVyKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IElDb21wYXJhYmxlIGZyb20gJy4uL2xhbmcvSUNvbXBhcmFibGUnO1xuXG5jbGFzcyBEaXNwb3NhYmxlTGlzdGVuZXI8VD4gZXh0ZW5kcyBEaXNwb3NhYmxlIHtcbiAgY29uc3RydWN0b3IobGlzdGVuZXJzOiBBcnJheTxUPiwgbGlzdGVuZXI6IFQpIHtcbiAgICBzdXBlcigoKSA9PiB7XG4gICAgICBjb25zdCBpZHggPSBsaXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lcik7XG5cbiAgICAgIGlmIChpZHggPj0gMCkge1xuICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGlkeCwgMSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3ViamVjdDxUPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xpc3RlbmVyczogQXJyYXk8KFQpID0+IHZvaWQ+O1xuICBwcml2YXRlIF92YWx1ZTogVDtcblxuICBjb25zdHJ1Y3Rvcih2YWx1ZTogVCkge1xuICAgIHRoaXMuX2xpc3RlbmVycyA9IFtdO1xuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gIH1cblxuICBzZXQgdmFsdWUodmFsdWU6IFQpIHtcbiAgICBsZXQgY2hhbmdlZCA9IHRoaXMuX3ZhbHVlICE9PSB2YWx1ZTtcblxuICAgIGlmIChjaGFuZ2VkICYmIHZhbHVlKSB7XG4gICAgICBjb25zdCBjb21wYXJhYmxlID0gdmFsdWUgYXMgdW5rbm93biBhcyBJQ29tcGFyYWJsZTxUPjtcblxuICAgICAgaWYgKHR5cGVvZiBjb21wYXJhYmxlLmVxdWFscyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjaGFuZ2VkID0gIWNvbXBhcmFibGUuZXF1YWxzKHRoaXMuX3ZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWNoYW5nZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuXG4gICAgdGhpcy5fbGlzdGVuZXJzLmZvckVhY2gobGlzdGVuZXIgPT4ge1xuICAgICAgbGlzdGVuZXIodmFsdWUpO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0IHZhbHVlKCk6IFQge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuXG4gIHN1YnNjcmliZShsaXN0ZW5lcjogKFQpID0+IHZvaWQpOiBJRGlzcG9zYWJsZSB7XG4gICAgdGhpcy5fbGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuXG4gICAgbGlzdGVuZXIodGhpcy5fdmFsdWUpO1xuXG4gICAgcmV0dXJuIG5ldyBEaXNwb3NhYmxlTGlzdGVuZXI8KFQpID0+IHZvaWQ+KHRoaXMuX2xpc3RlbmVycywgbGlzdGVuZXIpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVudmlyb25tZW50IHtcbiAgc3RhdGljIGdldEVudmlyb25tZW50RnJvbVVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJhc2VVUkwgPSBuZXcgVVJMKHVybCk7XG5cbiAgICAgIHJldHVybiBiYXNlVVJMLm9yaWdpbjtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgU3RyaW5ncyBmcm9tICcuLi9sYW5nL1N0cmluZ3MnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgUmVhZE9ubHlTdWJqZWN0IGZyb20gJy4uL3J4L1JlYWRPbmx5U3ViamVjdCc7XG5pbXBvcnQgRWRnZUF1dGhQYXJzZXIgZnJvbSAnLi4vZWRnZUF1dGgvRWRnZUF1dGhQYXJzZXInO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsLCBMb2dnaW5nTGV2ZWxUeXBlfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyJztcbmltcG9ydCBDb25zb2xlQXBwZW5kZXIgZnJvbSAnLi4vbG9nZ2VyL0NvbnNvbGVBcHBlbmRlcic7XG5pbXBvcnQgVGVsZW1ldHJ5QXBwZW5kZXIgZnJvbSAnLi4vdGVsZW1ldHJ5L1RlbGVtZXRyeUFwZW5kZXInO1xuaW1wb3J0IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIgZnJvbSAnLi4vZG9tL0NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXInO1xuaW1wb3J0IE1ldHJpY3NDb25maWd1cmF0aW9uLCB7VGVsZW1ldHJ5TGV2ZWwsIFRlbGVtZXRyeUxldmVsVHlwZX0gZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzU2VydmljZSc7XG5pbXBvcnQgVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nIGZyb20gJy4uL21ldHJpY3MvVGVsZW1ldHJpY0xldmVsTWFwcGluZyc7XG5pbXBvcnQgTG9nZ2luZ0xldmVsTWFwcGluZyBmcm9tICcuLi9sb2dnZXIvTG9nZ2luZ0xldmVsTWFwcGluZyc7XG5pbXBvcnQgQnVpbGRGZWF0dXJlcyBmcm9tICcuLi9lbnZpcm9ubWVudC9CdWlsZEZlYXR1cmVzJztcbmltcG9ydCBCcm93c2VyRGV0ZWN0b3IgZnJvbSAnLi4vZG9tL0Jyb3dzZXJEZXRlY3Rvcic7XG5pbXBvcnQge0lDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyfSBmcm9tICcuLi9kb20vSUNvbmZpZ3VyYXRpb25QYXJhbWF0ZXJSZWFkZXInO1xuaW1wb3J0IEFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yIGZyb20gJy4uL2RvbS9BcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcic7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uRmFjdG9yeSBmcm9tICcuLi9ydGMvSVBlZXJDb25uZWN0aW9uRmFjdG9yeSc7XG5pbXBvcnQgUGVlckNvbm5lY3Rpb25TZXJ2aWNlIGZyb20gJy4uL3J0Yy9QZWVyQ29ubmVjdGlvblNlcnZpY2UnO1xuaW1wb3J0IFRlbGVtZXRyeVVybCBmcm9tICcuL1RlbGVtZXRyeVVybCc7XG5pbXBvcnQgRW52aXJvbm1lbnQgZnJvbSAnLi9FbnZpcm9ubWVudCc7XG5pbXBvcnQge0hsc1BsYXllclR5cGUsIFNoYWthVHlwZSwgV2ViUGxheWVyVHlwZX0gZnJvbSAnLi9zdHJlYW1pbmcvU3RyZWFtVHlwZXMnO1xuaW1wb3J0IERpc2NvdmVyeVVyaSBmcm9tICcuL2Rpc2NvdmVyeS9EaXNjb3ZlcnlVcmknO1xuaW1wb3J0IE1ldHJpY3NGYWN0b3J5IGZyb20gJy4uL21ldHJpY3MvTWV0cmljc0ZhY3RvcnknO1xuaW1wb3J0IFRlbGVtZXRyeURlZmF1bHQgZnJvbSAnLi4vbWV0cmljcy9UZWxlbWV0cnlEZWZhdWx0JztcblxuY29uc3QgcGFnZUxvYWRUaW1lID0gd2luZG93WydfX3BoZW5peFBhZ2VMb2FkVGltZSddIHx8IHdpbmRvd1snX19wYWdlTG9hZFRpbWUnXSB8fCBEYXRlLm5vdygpO1xuXG5pbnRlcmZhY2UgSUluaXRPcHRpb25zIHtcbiAgZGlzY292ZXJ5VXJpPzogc3RyaW5nO1xuICBwZWVyQ29ubmVjdGlvbkZhY3Rvcnk/OiBJUGVlckNvbm5lY3Rpb25GYWN0b3J5O1xuICB0ZWxlbWV0cnlMZXZlbD86IFRlbGVtZXRyeUxldmVsVHlwZTtcbiAgbG9nZ2luZ0xldmVsPzogTG9nZ2luZ0xldmVsVHlwZTtcbiAgY29uc29sZUxvZ2dpbmdMZXZlbD86IExvZ2dpbmdMZXZlbFR5cGU7XG4gIGF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0/OiBib29sZWFuO1xuICBhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZT86IGJvb2xlYW47XG4gIHdlYlBsYXllckxvYWRlcj86IChwbGF5ZXI6IFdlYlBsYXllclR5cGUpID0+IHZvaWQ7XG4gIHNoYWthUGxheWVyTG9hZGVyPzogKHBsYXllcjogU2hha2FUeXBlKSA9PiB2b2lkO1xuICBobHNKc0xvYWRlcj86IChwbGF5ZXI6IEhsc1BsYXllclR5cGUpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNESyB7XG4gIHByaXZhdGUgc3RhdGljIF9hdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmUgPSB0cnVlO1xuICBwcml2YXRlIHN0YXRpYyBfYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uID0gdHJ1ZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2F1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0gPSB0cnVlO1xuICBwcml2YXRlIHN0YXRpYyBfYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUgPSB0cnVlO1xuICBwcml2YXRlIHN0YXRpYyBfZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydCA9IHRydWU7XG4gIHByaXZhdGUgc3RhdGljIF9za2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXMgPSB0cnVlO1xuICBwcml2YXRlIHN0YXRpYyBfd2ViUGxheWVyTG9hZGVyID0gbnVsbDtcbiAgcHJpdmF0ZSBzdGF0aWMgX3NoYWthUGxheWVyTG9hZGVyID0gbnVsbDtcbiAgcHJpdmF0ZSBzdGF0aWMgX2hsc0pzTG9hZGVyID0gbnVsbDtcbiAgcHJpdmF0ZSBzdGF0aWMgX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXI6IElDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyID0gbmV3IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yOiBBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcjtcbiAgcHJpdmF0ZSBzdGF0aWMgX2Vudmlyb25tZW50OiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KCcnKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3RlbGVtZXRyeVVybDogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPignaHR0cHM6Ly90ZWxlbWV0cnkucGhlbml4cnRzLmNvbS90ZWxlbWV0cnknKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX21heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSA4O1xuICBwcml2YXRlIHN0YXRpYyBfdGVsZW1ldHJ5TGV2ZWw6IFN1YmplY3Q8VGVsZW1ldHJ5TGV2ZWw+ID0gbmV3IFN1YmplY3Q8VGVsZW1ldHJ5TGV2ZWw+KFRlbGVtZXRyeURlZmF1bHQuZGVmYXVsdFRlbGVtZXRyeUxldmVsKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX21ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX21ldHJpY3NDb25maWd1cmF0aW9uOiBNZXRyaWNzQ29uZmlndXJhdGlvbjtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3NlbmRMb2NhbENhbmRpZGF0ZXM6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdChCdWlsZEZlYXR1cmVzLnNlbmRMb2NhbENhbmRpZGF0ZXMpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfdGVuYW5jeTogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPignJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9jbGllbnRTZXNzaW9uSWQ6IHN0cmluZyA9IFN0cmluZ3MucmFuZG9tKDMyKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2xvYWRlZFRpbWVzdGFtcDogRGF0ZSA9IG5ldyBEYXRlKCk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU0RLJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pbml0aWFsaXplZDogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3JlYWRPbmx5SW5pdGlhbGl6ZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4oU0RLLl9pbml0aWFsaXplZCk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9yZWFkT25seURpc2NvdmVyeVVyaTogUmVhZE9ubHlTdWJqZWN0PHN0cmluZz4gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PHN0cmluZz4oRGlzY292ZXJ5VXJpLnVyaSk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9yZWFkT25seVBlZXJDb25uZWN0aW9uRmFjdG9yeTogUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb25GYWN0b3J5PihQZWVyQ29ubmVjdGlvblNlcnZpY2UucGVlckNvbm5lY3Rpb25GYWN0b3J5KTtcblxuICBzdGF0aWMgZ2V0IHBhZ2VMb2FkVGltZSgpOiBudW1iZXIge1xuICAgIHJldHVybiBwYWdlTG9hZFRpbWU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNlbmRMb2NhbENhbmRpZGF0ZXMoKTogU3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbmRMb2NhbENhbmRpZGF0ZXM7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHRlbmFuY3koKTogU3ViamVjdDxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5fdGVuYW5jeTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgY2xpZW50U2Vzc2lvbklkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFNESy5fY2xpZW50U2Vzc2lvbklkO1xuICB9XG5cbiAgc3RhdGljIGdldCBsb2FkZWRUaW1lc3RhbXAoKTogRGF0ZSB7XG4gICAgcmV0dXJuIFNESy5fbG9hZGVkVGltZXN0YW1wO1xuICB9XG5cbiAgc3RhdGljIGdldCBpbml0aWFsaXplZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBTREsuX3JlYWRPbmx5SW5pdGlhbGl6ZWQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGRpc2NvdmVyeVVyaSgpOiBSZWFkT25seVN1YmplY3Q8c3RyaW5nPiB7XG4gICAgcmV0dXJuIFNESy5fcmVhZE9ubHlEaXNjb3ZlcnlVcmk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHBlZXJDb25uZWN0aW9uRmFjdG9yeSgpOiBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uRmFjdG9yeT4ge1xuICAgIHJldHVybiBTREsuX3JlYWRPbmx5UGVlckNvbm5lY3Rpb25GYWN0b3J5O1xuICB9XG5cbiAgc3RhdGljIGdldCBhdXRvbWF0aWNSZXRyeU9uRmFpbHVyZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gU0RLLl9hdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGF1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gU0RLLl9hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb247XG4gIH1cblxuICBzdGF0aWMgZ2V0IGF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFNESy5fYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFNESy5fYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2ZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fc2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzO1xuICB9XG5cbiAgc3RhdGljIGdldCB3ZWJQbGF5ZXJMb2FkZXIoKTogKFdlYlBsYXllclR5cGUpID0+IHZvaWQge1xuICAgIHJldHVybiB0aGlzLl93ZWJQbGF5ZXJMb2FkZXI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNoYWthUGxheWVyTG9hZGVyKCk6IChTaGFrYVR5cGUpID0+IHZvaWQge1xuICAgIHJldHVybiB0aGlzLl9zaGFrYVBsYXllckxvYWRlcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaGxzSnNMb2FkZXIoKTogKEhsc1BsYXllclR5cGUpID0+IHZvaWQge1xuICAgIHJldHVybiB0aGlzLl9obHNKc0xvYWRlcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgbWV0cmljc1NlcnZpY2UoKTogTWV0cmljc1NlcnZpY2Uge1xuICAgIHJldHVybiBTREsuX21ldHJpY3NTZXJ2aWNlO1xuICB9XG5cbiAgc3RhdGljIGdldCBhcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcigpOiBBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciB7XG4gICAgcmV0dXJuIHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yO1xuICB9XG5cbiAgc3RhdGljIGdldCB0ZWxlbWV0cnlVcmwoKTogU3ViamVjdDxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5fdGVsZW1ldHJ5VXJsO1xuICB9XG5cbiAgc3RhdGljIGdldCBtYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX21heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHM7XG4gIH1cblxuICBzdGF0aWMgc2V0IG1heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMocmV0cmllc0Ftb3VudDogbnVtYmVyKSB7XG4gICAgdGhpcy5fbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IHJldHJpZXNBbW91bnQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGxvZ2dpbmdMZXZlbCgpOiBMb2dnaW5nTGV2ZWxUeXBlIHtcbiAgICByZXR1cm4gTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlKHRoaXMuX2xvZ2dlci50aHJlc2hvbGQudmFsdWUpO1xuICB9XG5cbiAgc3RhdGljIGdldCB0ZWxlbWV0cnlMZXZlbCgpOiBUZWxlbWV0cnlMZXZlbFR5cGUge1xuICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbE1hcHBpbmcuY29udmVydFRlbGVtZXRyeUxldmVsVG9UZWxlbWV0cnlMZXZlbFR5cGUoU0RLLl90ZWxlbWV0cnlMZXZlbC52YWx1ZSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGJyb3dzZXJEZXRlY3RvcigpOiBCcm93c2VyRGV0ZWN0b3Ige1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3I7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlUZWxlbWV0cnlDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24gPSBMb2dnZXJGYWN0b3J5LnRlbGVtZXRyeUNvbmZpZ3VyYXRpb247XG5cbiAgICB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnNlc3Npb25JZCA9IFNESy5jbGllbnRTZXNzaW9uSWQ7XG5cbiAgICBjb25zdCBpZ25vcmVkRW52aXJvbm1lbnQgPSBTREsuX2Vudmlyb25tZW50LnN1YnNjcmliZShlbnZpcm9ubWVudCA9PiB7XG4gICAgICB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLmVudmlyb25tZW50ID0gZW52aXJvbm1lbnQ7XG4gICAgfSk7XG4gICAgY29uc3QgaWdub3JlZERpc2NvdmVyeVVyaSA9IFNESy50ZWxlbWV0cnlVcmwuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIGNvbnN0IHRlbGVtZXRyeUFwcGVuZGVyID0gdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy52YWx1ZS5maW5kKGFwcGVuZGVyID0+IGFwcGVuZGVyIGluc3RhbmNlb2YgVGVsZW1ldHJ5QXBwZW5kZXIpO1xuXG4gICAgICBpZiAodGVsZW1ldHJ5QXBwZW5kZXIpIHtcbiAgICAgICAgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi51cmwgPSB2YWx1ZTtcblxuICAgICAgICB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnJlbW92ZSh0ZWxlbWV0cnlBcHBlbmRlcik7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMuYWRkKG5ldyBUZWxlbWV0cnlBcHBlbmRlcih0ZWxlbWV0cnlDb25maWd1cmF0aW9uKSk7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdUZWxlbWV0cnkgVVJMIHdhcyBzZXQgdG8gWyVzXScsIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24udXJsKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBpZ25vcmVkVGVuYW5jeSA9IFNESy5fdGVuYW5jeS5zdWJzY3JpYmUodGVuYW5jeSA9PiB7XG4gICAgICBjb25zdCB0ZWxlbWV0cnlBcHBlbmRlciA9IHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMudmFsdWUuZmluZChhcHBlbmRlciA9PiBhcHBlbmRlciBpbnN0YW5jZW9mIFRlbGVtZXRyeUFwcGVuZGVyKTtcblxuICAgICAgaWYgKHRlbGVtZXRyeUFwcGVuZGVyICYmIHRlbmFuY3kpIHtcbiAgICAgICAgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50ZW5hbmN5ID0gdGVuYW5jeTtcblxuICAgICAgICB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnJlbW92ZSh0ZWxlbWV0cnlBcHBlbmRlcik7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMuYWRkKG5ldyBUZWxlbWV0cnlBcHBlbmRlcih0ZWxlbWV0cnlDb25maWd1cmF0aW9uKSk7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdUZWxlbWV0cnkgdGVuYW5jeSB3YXMgc2V0IHRvIFslc10nLCB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRlbmFuY3kpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5TWV0cmljc0NvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgU0RLLl9tZXRyaWNzU2VydmljZSA9IE1ldHJpY3NGYWN0b3J5LmdldE1ldHJpY3NTZXJ2aWNlKERpc2NvdmVyeVVyaS51cmkudmFsdWUpO1xuICAgIFNESy5fbWV0cmljc0NvbmZpZ3VyYXRpb24gPSBTREsuX21ldHJpY3NTZXJ2aWNlLm1ldHJpY3NDb25maWd1cmF0aW9uO1xuXG4gICAgU0RLLl9tZXRyaWNzQ29uZmlndXJhdGlvbi5zZXNzaW9uSWQgPSBTREsuY2xpZW50U2Vzc2lvbklkO1xuXG4gICAgY29uc3QgaWdub3JlZEVudmlyb25tZW50ID0gU0RLLl9lbnZpcm9ubWVudC5zdWJzY3JpYmUoZW52aXJvbm1lbnQgPT4ge1xuICAgICAgU0RLLl9tZXRyaWNzQ29uZmlndXJhdGlvbi5lbnZpcm9ubWVudCA9IGVudmlyb25tZW50O1xuICAgIH0pO1xuICAgIGNvbnN0IGlnbm9yZWREaXNjb3ZlcnlVcmkgPSBTREsudGVsZW1ldHJ5VXJsLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICBTREsuX21ldHJpY3NDb25maWd1cmF0aW9uLnVybCA9IHZhbHVlO1xuICAgIH0pO1xuICAgIGNvbnN0IGlnbm9yZWRUZW5hbmN5ID0gU0RLLl90ZW5hbmN5LnN1YnNjcmliZSh0ZW5hbmN5ID0+IHtcbiAgICAgIFNESy5fbWV0cmljc0NvbmZpZ3VyYXRpb24udGVuYW5jeSA9IHRlbmFuY3k7XG4gICAgfSk7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKCdwaGVuaXgtbWV0cmljcy1sZXZlbCcpO1xuXG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBNZXRyaWNzRmFjdG9yeS5zZXRUZWxlbWV0cnlMZXZlbChUZWxlbWV0cnlMZXZlbFt2YWx1ZV0pO1xuICAgIH1cblxuICAgIGNvbnN0IGlnbm9yZWRUZWxlbWV0cnlMZXZlbCA9IFNESy5fdGVsZW1ldHJ5TGV2ZWwuc3Vic2NyaWJlKHRlbGVtZXRyeUxldmVsID0+IHtcbiAgICAgIE1ldHJpY3NGYWN0b3J5LnNldFRlbGVtZXRyeUxldmVsKHRlbGVtZXRyeUxldmVsKTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseUF1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZUZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZSA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0Qm9vbGVhblZhbHVlKCdwaGVuaXgtYXV0b21hdGljYWxseS1yZXRyeS1vbi1mYWlsdXJlJyk7XG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0F1dG9tYXRpY2FsbHkgcmV0cnkgb24gZmFpbHVyZSBpcyBzZXQgdG86IFslc10nLCB0aGlzLl9hdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmUpO1xuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5QXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRCb29sZWFuVmFsdWUoJ3BoZW5peC1hdXRvbWF0aWNhbGx5LXJlY29ubmVjdC1wZWVyLWNvbm5lY3Rpb24nKTtcbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnQXV0b21hdGljYWxseSByZWNvbm5lY3QgcGVlciBjb25uZWN0aW9uIGlzIHNldCB0bzogWyVzXScsIHRoaXMuX2F1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbik7XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBzdGF0aWMgYXBwbHlGb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0RnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydCA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0Qm9vbGVhblZhbHVlKCdwaGVuaXgtZm9yY2UtZ2FyYmFnZS1jb2xsZWN0aW9uLW9uLXJlc3RhcnQnKTtcbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnRm9yY2UgZ2FyYmFnZSBjb2xsZWN0aW9uIG9uIHJlc3RhcnQgaXMgc2V0IHRvOiBbJXNdJywgdGhpcy5fZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydCk7XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBzdGF0aWMgYXBwbHlTa2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXNGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9za2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXMgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldEJvb2xlYW5WYWx1ZSgncGhlbml4LXNraXAtZ2FyYmFnZS1jb2xsZWN0aW9uLW9uLW1vYmlsZS1kZXZpY2VzJyk7XG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1NraXAgZ2FyYmFnZSBjb2xsZWN0aW9uIG9uIG1vYmlsZSBkZXZpY2VzIG9uIHJlc3RhcnQgaXMgc2V0IHRvOiBbJXNdJywgdGhpcy5fc2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzKTtcblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseURpc2NvdmVyeVVyaURlZmF1bHRGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICBTREsuZGlzY292ZXJ5VXJpLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICBTREsudGVsZW1ldHJ5VXJsLnZhbHVlID0gU0RLLmdldFRlbGVtZXRyeVVybCh2YWx1ZSk7XG4gICAgICBTREsuX2Vudmlyb25tZW50LnZhbHVlID0gRW52aXJvbm1lbnQuZ2V0RW52aXJvbm1lbnRGcm9tVXJsKHZhbHVlKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGNoYW5uZWxUb2tlbiA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoJ3BoZW5peC1jaGFubmVsLXRva2VuJyk7XG5cbiAgICBpZiAoY2hhbm5lbFRva2VuKSB7XG4gICAgICBjb25zdCBlZGdlVG9rZW4gPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKGNoYW5uZWxUb2tlbik7XG5cbiAgICAgIFNESy5fdGVuYW5jeS52YWx1ZSA9IGVkZ2VUb2tlbi50ZW5hbmN5O1xuICAgICAgRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSA9IChlZGdlVG9rZW4udXJpIHx8IFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpLnRvU3RyaW5nKCk7XG5cbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdEaXNjb3ZlcnkgVVJJIHNldCBmcm9tIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHRvIFslc10nLCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHVyaVZhbHVlID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRTdHJpbmdWYWx1ZSgncGhlbml4LXVyaScpO1xuXG4gICAgaWYgKHVyaVZhbHVlKSB7XG4gICAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gdXJpVmFsdWU7XG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnRGlzY292ZXJ5IFVSSSBzZXQgZnJvbSBcInBoZW5peC11cmlcIiBjb25maWd1cmF0aW9uIHBhcmFtZXRlciB0YWcgdG8gWyVzXScsIFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYmFzZVVSSVZhbHVlID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRTdHJpbmdWYWx1ZSgncGhlbml4LWJhc2UtdXJpJyk7XG5cbiAgICBpZiAoYmFzZVVSSVZhbHVlKSB7XG4gICAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gYCR7YmFzZVVSSVZhbHVlfS9wY2FzdC9lbmRQb2ludHNgO1xuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Rpc2NvdmVyeSBVUkkgc2V0IGZyb20gXCJwaGVuaXgtYmFzZS11cmlcIiBjb25maWd1cmF0aW9uIHBhcmFtZXRlciB0YWcgdG8gWyVzXScsIFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGluaXQob3B0aW9ucz86IElJbml0T3B0aW9ucyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5faW5pdGlhbGl6ZWQudmFsdWUpIHtcbiAgICAgIHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yID0gbmV3IEFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yKCk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgIGlmIChvcHRpb25zLmRpc2NvdmVyeVVyaSkge1xuICAgICAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gb3B0aW9ucy5kaXNjb3ZlcnlVcmk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLnBlZXJDb25uZWN0aW9uRmFjdG9yeSkge1xuICAgICAgICBQZWVyQ29ubmVjdGlvblNlcnZpY2UucGVlckNvbm5lY3Rpb25GYWN0b3J5LnZhbHVlID0gb3B0aW9ucy5wZWVyQ29ubmVjdGlvbkZhY3Rvcnk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLnRlbGVtZXRyeUxldmVsICYmIFRlbGVtZXRyeUxldmVsW29wdGlvbnMudGVsZW1ldHJ5TGV2ZWxdKSB7XG4gICAgICAgIFNESy5fdGVsZW1ldHJ5TGV2ZWwudmFsdWUgPSBUZWxlbWV0cnlMZXZlbE1hcHBpbmcuY29udmVydFRlbGVtZXRyeUxldmVsVHlwZVRvVGVsZW1ldHJ5TGV2ZWwob3B0aW9ucy50ZWxlbWV0cnlMZXZlbCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmxvZ2dpbmdMZXZlbCAmJiBMb2dnaW5nTGV2ZWxbb3B0aW9ucy5sb2dnaW5nTGV2ZWxdKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci50aHJlc2hvbGQuc2V0VGhyZXNob2xkKExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFR5cGVUb0xvZ2dpbmdMZXZlbChvcHRpb25zLmxvZ2dpbmdMZXZlbCkpO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5jb25zb2xlTG9nZ2luZ0xldmVsICYmXG4gICAgICAgIExvZ2dpbmdMZXZlbFtvcHRpb25zLmNvbnNvbGVMb2dnaW5nTGV2ZWxdKSB7XG4gICAgICAgIGNvbnN0IGNvbnNvbGVBcHBlbmRlciA9IHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMudmFsdWUuZmluZChhcHBlbmRlciA9PiBhcHBlbmRlciBpbnN0YW5jZW9mIENvbnNvbGVBcHBlbmRlcik7XG5cbiAgICAgICAgaWYgKGNvbnNvbGVBcHBlbmRlcikge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMucmVtb3ZlKGNvbnNvbGVBcHBlbmRlcik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5jb25zb2xlTG9nZ2luZ0xldmVsICE9PSAnT2ZmJykge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMuYWRkKG5ldyBDb25zb2xlQXBwZW5kZXIoTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVHlwZVRvTG9nZ2luZ0xldmVsKG9wdGlvbnMuY29uc29sZUxvZ2dpbmdMZXZlbCkpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMuYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHRoaXMuX2F1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0gPSBvcHRpb25zLmF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW07XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHRoaXMuX2F1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlID0gb3B0aW9ucy5hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMud2ViUGxheWVyTG9hZGVyKSB7XG4gICAgICAgIHRoaXMuX3dlYlBsYXllckxvYWRlciA9IG9wdGlvbnMud2ViUGxheWVyTG9hZGVyO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5zaGFrYVBsYXllckxvYWRlcikge1xuICAgICAgICB0aGlzLl9zaGFrYVBsYXllckxvYWRlciA9IG9wdGlvbnMuc2hha2FQbGF5ZXJMb2FkZXI7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmhsc0pzTG9hZGVyKSB7XG4gICAgICAgIHRoaXMuX2hsc0pzTG9hZGVyID0gb3B0aW9ucy5obHNKc0xvYWRlcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBTREsuX2luaXRpYWxpemVkLnZhbHVlID0gdHJ1ZTtcbiAgfVxuXG4gIHN0YXRpYyBkaXNwb3NlKCk6IHZvaWQge1xuICAgIFNESy5faW5pdGlhbGl6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvci5kaXNwb3NlKCk7XG4gICAgdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IgPSBudWxsO1xuICB9XG5cbiAgc3RhdGljIGdldFRlbGVtZXRyeVVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFRlbGVtZXRyeVVybC5nZXRUZWxlbWV0cnlVcmwodXJsKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTREsgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59XG5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd1bmxvYWQnLCAoKSA9PiB7XG4gIFNESy5kaXNwb3NlKCk7XG59KTtcblxuU0RLLmFwcGx5RGlzY292ZXJ5VXJpRGVmYXVsdEZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk7XG5TREsuYXBwbHlNZXRyaWNzQ29uZmlndXJhdGlvbigpO1xuU0RLLmFwcGx5VGVsZW1ldHJ5Q29uZmlndXJhdGlvbigpO1xuU0RLLmFwcGx5QXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTtcblNESy5hcHBseUF1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbkZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk7XG5TREsuYXBwbHlGb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0RnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTtcblNESy5hcHBseVNraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlc0Zyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk7XG5TREsuaW5pdCgpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlVcmwge1xuICBzdGF0aWMgZ2V0VGVsZW1ldHJ5VXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYmFzZVVSTCA9IG5ldyBVUkwodXJsKTtcbiAgICAgIGNvbnN0IHNlZ21lbnRzID0gYmFzZVVSTC5ob3N0bmFtZS5zcGxpdCgnLicpO1xuXG4gICAgICBzd2l0Y2ggKGJhc2VVUkwucHJvdG9jb2wpIHtcbiAgICAgICAgY2FzZSAnd3M6JzpcbiAgICAgICAgICBiYXNlVVJMLnByb3RvY29sID0gJ2h0dHA6JztcblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd3c3M6JzpcbiAgICAgICAgICBiYXNlVVJMLnByb3RvY29sID0gJ2h0dHBzOic7XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2VnbWVudHMubGVuZ3RoID09PSAyIHx8XG4gICAgICAgICAgKHNlZ21lbnRzLmxlbmd0aCA9PT0gMyAmJiBzZWdtZW50c1tzZWdtZW50cy5sZW5ndGggLSAyXS5sZW5ndGggPD0gMiAmJiBzZWdtZW50c1tzZWdtZW50cy5sZW5ndGggLSAxXS5sZW5ndGggPD0gMylcbiAgICAgICkge1xuICAgICAgICBzZWdtZW50cy51bnNoaWZ0KCd0ZWxlbWV0cnknKTtcbiAgICAgIH0gZWxzZSBpZiAoc2VnbWVudHNbMF0uc3RhcnRzV2l0aCgnc3RnLScpIHx8IHNlZ21lbnRzWzBdLmVuZHNXaXRoKCctc3RnJykgfHwgc2VnbWVudHNbMF0uaW5jbHVkZXMoJy1zdGctJykgfHwgc2VnbWVudHNbMF0gPT09ICdzdGcnKSB7XG4gICAgICAgIHNlZ21lbnRzWzBdID0gJ3RlbGVtZXRyeS1zdGcnO1xuICAgICAgfSBlbHNlIGlmIChzZWdtZW50c1swXS5zdGFydHNXaXRoKCdsb2NhbCcpIHx8IHNlZ21lbnRzWzBdLmVuZHNXaXRoKCctbG9jYWwnKSkge1xuICAgICAgICAvLyBMZWF2ZSBVUkwgdW5jaGFuZ2VkXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWdtZW50c1swXSA9ICd0ZWxlbWV0cnknO1xuICAgICAgfVxuXG4gICAgICBiYXNlVVJMLmhvc3RuYW1lID0gc2VnbWVudHMuam9pbignLicpO1xuXG4gICAgICByZXR1cm4gYCR7YmFzZVVSTC5vcmlnaW59L3RlbGVtZXRyeWA7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IHR5cGUgQml0cmF0ZVN0YXRlVHlwZSA9ICdLZWVwJyB8ICdSZXNldCc7XG5leHBvcnQgdHlwZSBCaXRyYXRlTW9kZVR5cGUgPSAnTm9ybWFsJyB8ICdGb3JjZScgfCAnUmVzZXQnO1xuXG5leHBvcnQgZW51bSBCaXRyYXRlU3RhdGUge1xuICBLZWVwLFxuICBSZXNldFxufVxuXG5leHBvcnQgZW51bSBCaXRyYXRlTW9kZSB7XG4gIE5vcm1hbCxcbiAgRm9yY2UsXG4gIFJlc2V0XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlIHtcbiAgYXBpVmVyc2lvbjogbnVtYmVyO1xuICBzaGFyZWRTZWNyZXQ6IHN0cmluZztcbiAgZWxhcHNlZEluTWlsbGlzZWNvbmRzOiBudW1iZXI7XG4gIGJpdHJhdGVJbkJpdHNQZXJTZWNvbmQ6IG51bWJlcjtcbiAgYml0cmF0ZVN0YXRlOiBCaXRyYXRlU3RhdGVUeXBlO1xuICBiaXRyYXRlTW9kZTogQml0cmF0ZU1vZGVUeXBlO1xufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IFJlYWRPbmx5U3ViamVjdCBmcm9tICcuLi8uLi9yeC9SZWFkT25seVN1YmplY3QnO1xuaW1wb3J0IERpbWVuc2lvbiBmcm9tICcuLi8uLi92aWRlby9EaW1lbnNpb24nO1xuaW1wb3J0IEV4cG9uZW50aWFsQmFja29mZiBmcm9tICcuLi8uLi90aW1lL0V4cG9uZW50aWFsQmFja29mZic7XG5pbXBvcnQgRW5kUG9pbnQsIHtJU3RyZWFtfSBmcm9tICcuLi9kaXNjb3ZlcnkvRW5kUG9pbnQnO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IEdhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyIGZyb20gJy4uLy4uL2RvbS9HYXJiYWdlQ29sbGVjdG9yTWFuYWdlcic7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4uLy4uL3J0Yy9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IENoYW5uZWxTdGF0ZSBmcm9tICcuL0NoYW5uZWxTdGF0ZSc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBWaWRlb1RlbGVtZXRyeSBmcm9tICcuLi8uLi92aWRlby9WaWRlb1RlbGVtZXRyeSc7XG5pbXBvcnQgU2Vzc2lvblRlbGVtZXRyeSBmcm9tICcuLi8uLi92aWRlby9TZXNzaW9uVGVsZW1ldHJ5JztcbmltcG9ydCB7SVJ0Y01vbml0b3JTdGF0aXN0aWN9IGZyb20gJy4uLy4uL3J0Yy9SdGNDb25uZWN0aW9uTW9uaXRvcic7XG5pbXBvcnQge0JpdHJhdGVNb2RlLCBCaXRyYXRlU3RhdGV9IGZyb20gJy4uL2FwaS9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSc7XG5pbXBvcnQgRWRnZUF1dGhQYXJzZXIgZnJvbSAnLi4vLi4vZWRnZUF1dGgvRWRnZUF1dGhQYXJzZXInO1xuaW1wb3J0IHtFbmNvZGVkRWRnZVRva2VufSBmcm9tICcuLi8uLi9lZGdlQXV0aC9FbmNvZGVkRWRnZVRva2VuJztcbmltcG9ydCB7Qml0c1BlclNlY29uZCwgTWlsbGlzZWNvbmR9IGZyb20gJy4uLy4uL3VuaXRzL1VuaXRzJztcbmltcG9ydCBUb2tlbkNvbnRleHQgZnJvbSAnLi4vY29udGV4dC9Ub2tlbkNvbnRleHQnO1xuaW1wb3J0IENoYW5uZWxDb250ZXh0LCB7SVN0cmVhbVRyYWNrVHJhbnNmb3JtLCBJRW5jb2RlZFN0cmVhbVNpbmssIENoYW5uZWxDb250ZXh0T3B0aW9uc30gZnJvbSAnLi4vY29udGV4dC9DaGFubmVsQ29udGV4dCc7XG5pbXBvcnQgUGVlckNvbm5lY3Rpb25Db250ZXh0IGZyb20gJy4uL2NvbnRleHQvUGVlckNvbm5lY3Rpb25Db250ZXh0JztcbmltcG9ydCBTdGF0ZUNvbnRleHQgZnJvbSAnLi4vY29udGV4dC9TdGF0ZUNvbnRleHQnO1xuaW1wb3J0IFN0cmVhbUZhY3RvcnkgZnJvbSAnLi4vc3RyZWFtaW5nL1N0cmVhbUZhY3RvcnknO1xuaW1wb3J0IERpc2NvdmVyeSBmcm9tICcuLi9kaXNjb3ZlcnkvRGlzY292ZXJ5JztcbmltcG9ydCBEaXNjb3ZlcnlVcmkgZnJvbSAnLi4vZGlzY292ZXJ5L0Rpc2NvdmVyeVVyaSc7XG5pbXBvcnQgTWV0cmljc0ZhY3RvcnkgZnJvbSAnLi4vLi4vbWV0cmljcy9NZXRyaWNzRmFjdG9yeSc7XG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi4vLi4vbWV0cmljcy9NZXRyaWNzU2VydmljZSc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuXG5jb25zdCBkZWZhdWx0U3RyZWFtVGVybWluYXRpb25SZWFzb24gPSAnY2xpZW50OnRlcm1pbmF0aW9uJztcbmNvbnN0IGZhaWx1cmVDb3VudENsZWFuVXBJbnRlcnZhbEluTWlsbGlzZWNvbmRzID0gMzAwMDtcbmNvbnN0IHN0YW5kYnlQb2xsaW5nSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyA9IDE1MDAwO1xuXG5leHBvcnQgdHlwZSBDaGFubmVsT3B0aW9ucyA9IHtcbiAgdGFyZ2V0TGFnPzogTWlsbGlzZWNvbmQ7XG4gIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s/OiBJU3RyZWFtVHJhY2tUcmFuc2Zvcm08VmlkZW9GcmFtZT47XG4gIGVuY29kZWRWaWRlb1N0cmVhbVNpbms/OiBJRW5jb2RlZFN0cmVhbVNpbms8UlRDRW5jb2RlZFZpZGVvRnJhbWU+O1xuICBlbmNvZGVkQXVkaW9TdHJlYW1TaW5rPzogSUVuY29kZWRTdHJlYW1TaW5rPFJUQ0VuY29kZWRBdWRpb0ZyYW1lPjtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENoYW5uZWwgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdDaGFubmVsJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Rva2VuQ29udGV4dDogVG9rZW5Db250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9jaGFubmVsQ29udGV4dDogQ2hhbm5lbENvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BlZXJDb25uZWN0aW9uQ29udGV4dDogUGVlckNvbm5lY3Rpb25Db250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdGF0ZUNvbnRleHQ6IFN0YXRlQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfZXhwb25lbnRpYWxCYWNrb2ZmOiBFeHBvbmVudGlhbEJhY2tvZmY7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5uZWxTdGFydFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlWaWRlb0VsZW1lbnQ6IFJlYWRPbmx5U3ViamVjdDxIVE1MVmlkZW9FbGVtZW50PjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlUb2tlbjogUmVhZE9ubHlTdWJqZWN0PEVuY29kZWRFZGdlVG9rZW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVBlZXJDb25uZWN0aW9uOiBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlTdGF0ZTogUmVhZE9ubHlTdWJqZWN0PENoYW5uZWxTdGF0ZT47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5QXV0b011dGVkOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5QXV0b1BhdXNlZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVRva2VuRXhwaXJpbmc6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlBdXRob3JpemVkOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5T25saW5lOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5TG9hZGluZzogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVBsYXlpbmc6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlTdGFuZGJ5OiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5U3RvcHBlZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVRhcmdldExhZzogUmVhZE9ubHlTdWJqZWN0PE1pbGxpc2Vjb25kPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlMYWc6IFJlYWRPbmx5U3ViamVjdDxNaWxsaXNlY29uZD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5Qml0cmF0ZUxpbWl0OiBSZWFkT25seVN1YmplY3Q8Qml0c1BlclNlY29uZD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5UmVzb2x1dGlvbjogUmVhZE9ubHlTdWJqZWN0PERpbWVuc2lvbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5RmFpbHVyZUNvdW50OiBSZWFkT25seVN1YmplY3Q8bnVtYmVyPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlFbmRQb2ludDogUmVhZE9ubHlTdWJqZWN0PEVuZFBvaW50PjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlTdHJlYW06IFJlYWRPbmx5U3ViamVjdDxJU3RyZWFtPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlSdGNTdGF0aXN0aWNzOiBSZWFkT25seVN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seU1lZGlhU3RyZWFtOiBSZWFkT25seVN1YmplY3Q8TWVkaWFTdHJlYW0+O1xuXG4gIHByaXZhdGUgX21ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2Vzc2lvblRlbGVtZXRyeTogU2Vzc2lvblRlbGVtZXRyeTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyOiAoKSA9PiB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCwgdG9rZW46IEVuY29kZWRFZGdlVG9rZW4sIG9wdGlvbnM/OiBDaGFubmVsT3B0aW9ucykge1xuICAgIGNvbnN0IGVkZ2VUb2tlbiA9IEVkZ2VBdXRoUGFyc2VyLnBhcnNlVG9rZW4odG9rZW4pO1xuICAgIGNvbnN0IGNoYW5uZWxDb250ZXh0T3B0aW9uczogQ2hhbm5lbENvbnRleHRPcHRpb25zID0ge1xuICAgICAgdGFyZ2V0TGFnOiBvcHRpb25zPy50YXJnZXRMYWcsXG4gICAgICB2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBvcHRpb25zPy52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrLFxuICAgICAgZW5jb2RlZFZpZGVvU3RyZWFtU2luazogb3B0aW9ucz8uZW5jb2RlZFZpZGVvU3RyZWFtU2luayxcbiAgICAgIGVuY29kZWRBdWRpb1N0cmVhbVNpbms6IG9wdGlvbnM/LmVuY29kZWRBdWRpb1N0cmVhbVNpbmssXG4gICAgICBoYXNJbnNlcnRhYmxlU3RyZWFtczogZWRnZVRva2VuLmNhcGFiaWxpdGllcy5pbmNsdWRlcygnaW5zZXJ0YWJsZS1zdHJlYW1zJylcbiAgICB9O1xuXG4gICAgdGhpcy5fdG9rZW5Db250ZXh0ID0gbmV3IFRva2VuQ29udGV4dCh0b2tlbik7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQgPSBuZXcgQ2hhbm5lbENvbnRleHQoY2hhbm5lbENvbnRleHRPcHRpb25zKTtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQgPSBuZXcgUGVlckNvbm5lY3Rpb25Db250ZXh0KCk7XG4gICAgdGhpcy5fc3RhdGVDb250ZXh0ID0gbmV3IFN0YXRlQ29udGV4dCgpO1xuICAgIHRoaXMuX2V4cG9uZW50aWFsQmFja29mZiA9IG5ldyBFeHBvbmVudGlhbEJhY2tvZmYoKTtcbiAgICB0aGlzLl9jaGFubmVsU3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLl9yZWFkT25seVZpZGVvRWxlbWVudCA9IG5ldyBSZWFkT25seVN1YmplY3Q8SFRNTFZpZGVvRWxlbWVudD4odGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50KTtcbiAgICB0aGlzLl9yZWFkT25seVRva2VuID0gbmV3IFJlYWRPbmx5U3ViamVjdDxzdHJpbmc+KHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbik7XG4gICAgdGhpcy5fcmVhZE9ubHlQZWVyQ29ubmVjdGlvbiA9IG5ldyBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uPih0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24pO1xuICAgIHRoaXMuX3JlYWRPbmx5U3RhdGUgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PENoYW5uZWxTdGF0ZT4odGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUpO1xuICAgIHRoaXMuX3JlYWRPbmx5QXV0b011dGVkID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQpO1xuICAgIHRoaXMuX3JlYWRPbmx5QXV0b1BhdXNlZCA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZCk7XG4gICAgdGhpcy5fcmVhZE9ubHlUb2tlbkV4cGlyaW5nID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl90b2tlbkNvbnRleHQudG9rZW5FeHBpcmluZyk7XG4gICAgdGhpcy5fcmVhZE9ubHlBdXRob3JpemVkID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkKTtcbiAgICB0aGlzLl9yZWFkT25seU9ubGluZSA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQub25saW5lKTtcbiAgICB0aGlzLl9yZWFkT25seUxvYWRpbmcgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcpO1xuICAgIHRoaXMuX3JlYWRPbmx5UGxheWluZyA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZyk7XG4gICAgdGhpcy5fcmVhZE9ubHlTdGFuZGJ5ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5zdGFuZGJ5KTtcbiAgICB0aGlzLl9yZWFkT25seVN0b3BwZWQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0b3BwZWQpO1xuICAgIHRoaXMuX3JlYWRPbmx5VGFyZ2V0TGFnID0gbmV3IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnRhcmdldExhZyk7XG4gICAgdGhpcy5fcmVhZE9ubHlMYWcgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PG51bWJlcj4odGhpcy5fY2hhbm5lbENvbnRleHQubGFnKTtcbiAgICB0aGlzLl9yZWFkT25seUJpdHJhdGVMaW1pdCA9IG5ldyBSZWFkT25seVN1YmplY3Q8bnVtYmVyPih0aGlzLl9jaGFubmVsQ29udGV4dC5iaXRyYXRlTGltaXQpO1xuICAgIHRoaXMuX3JlYWRPbmx5UmVzb2x1dGlvbiA9IG5ldyBSZWFkT25seVN1YmplY3Q8RGltZW5zaW9uPih0aGlzLl9jaGFubmVsQ29udGV4dC5yZXNvbHV0aW9uKTtcbiAgICB0aGlzLl9yZWFkT25seUZhaWx1cmVDb3VudCA9IG5ldyBSZWFkT25seVN1YmplY3Q8bnVtYmVyPih0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQpO1xuICAgIHRoaXMuX3JlYWRPbmx5RW5kUG9pbnQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PEVuZFBvaW50Pih0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludCk7XG4gICAgdGhpcy5fcmVhZE9ubHlTdHJlYW0gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PElTdHJlYW0+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbSk7XG4gICAgdGhpcy5fcmVhZE9ubHlSdGNTdGF0aXN0aWNzID0gbmV3IFJlYWRPbmx5U3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz4odGhpcy5fY2hhbm5lbENvbnRleHQucnRjU3RhdGlzdGljcyk7XG4gICAgdGhpcy5fcmVhZE9ubHlNZWRpYVN0cmVhbSA9IG5ldyBSZWFkT25seVN1YmplY3Q8TWVkaWFTdHJlYW0+KHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbSk7XG5cbiAgICBjb25zdCBkaXNjb3ZlcnlVcmkgPSAoZWRnZVRva2VuLnVyaSB8fCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKS50b1N0cmluZygpO1xuXG4gICAgU0RLLnRlbmFuY3kudmFsdWUgPSBlZGdlVG9rZW4udGVuYW5jeSB8fCBTREsudGVuYW5jeS52YWx1ZTtcbiAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gZGlzY292ZXJ5VXJpO1xuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlID0gTWV0cmljc0ZhY3RvcnkuZ2V0TWV0cmljc1NlcnZpY2UoZGlzY292ZXJ5VXJpKTtcbiAgICB0aGlzLl9zZXNzaW9uVGVsZW1ldHJ5ID0gbmV3IFNlc3Npb25UZWxlbWV0cnkoU0RLLnBhZ2VMb2FkVGltZSwgdGhpcy5fbWV0cmljc1NlcnZpY2UpO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQodGhpcy5fc2Vzc2lvblRlbGVtZXRyeSk7XG4gICAgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyID0gdGhpcy5oYW5kbGVWaWRlb01ldGFEYXRhQ2hhbmdlZC5iaW5kKHRoaXMpO1xuICAgIHRoaXMudmlkZW9FbGVtZW50ID0gdmlkZW9FbGVtZW50O1xuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZChcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC5zdWJzY3JpYmUodmlkZW9FbGVtZW50ID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICAgICAgaWYgKCF2aWRlb0VsZW1lbnQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzLmFkZCh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0uc3Vic2NyaWJlKHN0cmVhbSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5KSB7XG4gICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1RlbGVtZXRyeS5kaXNwb3NlKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFzdHJlYW0pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIXRoaXMudmlkZW9FbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRoaXMudmlkZW9FbGVtZW50LmRhdGFzZXQpIHtcbiAgICAgICAgICAgIHRoaXMudmlkZW9FbGVtZW50LmRhdGFzZXQuc2Vzc2lvbklkID0gU0RLLmNsaWVudFNlc3Npb25JZDtcbiAgICAgICAgICAgIHRoaXMudmlkZW9FbGVtZW50LmRhdGFzZXQuc3RyZWFtSWQgPSB0aGlzLnN0cmVhbUlkO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5ID0gbmV3IFZpZGVvVGVsZW1ldHJ5KHRoaXMuc3RyZWFtSWQsIFNESy5wYWdlTG9hZFRpbWUsIHRoaXMuX2NoYW5uZWxTdGFydFRpbWUsIHRoaXMuX21ldHJpY3NTZXJ2aWNlKTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1RlbGVtZXRyeS5zZXR1cExpc3RlbmVyRm9yVGltZVRvRmlyc3RUaW1lKHRoaXMudmlkZW9FbGVtZW50KTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1RlbGVtZXRyeS5zZXR1cExpc3RlbmVyRm9yUmVidWZmZXJpbmcodGhpcy52aWRlb0VsZW1lbnQpO1xuXG4gICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID09PSBDaGFubmVsU3RhdGUuU3RvcHBlZCkge1xuICAgICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMucmVzdGFydEFmdGVyU3RvcCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQodGhpcy5fY2hhbm5lbENvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcyk7XG4gICAgICB9KSk7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZChcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnN1YnNjcmliZShzdGF0ZSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5jbGVhckZhaWx1cmVDb3VudFRpbWVvdXQpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fY2hhbm5lbENvbnRleHQuY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5fY2hhbm5lbENvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YXRlICE9PSBDaGFubmVsU3RhdGUuUGxheWluZykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNsZWFyRmFpbHVyZUNvdW50VGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUgPSAwO1xuICAgICAgICB9LCBmYWlsdXJlQ291bnRDbGVhblVwSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyk7XG4gICAgICB9KSk7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZChcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlc29sdXRpb24uc3Vic2NyaWJlKHJlc29sdXRpb24gPT4ge1xuICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9UZWxlbWV0cnkpIHtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1RlbGVtZXRyeS5vblZpZGVvUmVzb2x1dGlvbkNoYW5nZXMocmVzb2x1dGlvbi50b1N0cmluZygpKTtcbiAgICAgICAgfVxuICAgICAgfSkpO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQoXG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5iaXRyYXRlTGltaXQuc3Vic2NyaWJlKGJpdHJhdGVMaW1pdCA9PiB7XG4gICAgICAgIGlmIChiaXRyYXRlTGltaXQgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlKSB7XG4gICAgICAgICAgY29uc3QgZWxhcHNlZEluTWlsbGlzZWNvbmRzID0gRGF0ZS5ub3coKSAtIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxJbml0aWFsaXphdGlvbi5nZXRUaW1lKCk7XG4gICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLmxpbWl0Qml0cmF0ZShcbiAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSxcbiAgICAgICAgICAgIGVsYXBzZWRJbk1pbGxpc2Vjb25kcyxcbiAgICAgICAgICAgIGJpdHJhdGVMaW1pdCxcbiAgICAgICAgICAgIEJpdHJhdGVTdGF0ZS5LZWVwLFxuICAgICAgICAgICAgQml0cmF0ZU1vZGUuTm9ybWFsXG4gICAgICAgICAgKVxuICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0Vycm9yIHdoaWxlIHNldHRpbmcgbGltaXQgYml0cmF0ZScsIGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGNvbnN0IGRlc3Ryb3lTdHJlYW1PblVubW91bnQgPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5kZXN0cm95U3RyZWFtT25Vbm1vdW50KHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSwgJ2NsaWVudDp0ZXJtaW5hdGlvbi1vbi13aW5kb3ctdW5sb2FkJyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdiZWZvcmV1bmxvYWQnLCBkZXN0cm95U3RyZWFtT25Vbm1vdW50KTtcblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2JlZm9yZXVubG9hZCcsIGRlc3Ryb3lTdHJlYW1PblVubW91bnQpO1xuICAgIH0pKTtcblxuICAgIHRoaXMuc3RhcnQoKTtcbiAgfVxuXG4gIGdldCB2aWRlb0VsZW1lbnQoKTogSFRNTFZpZGVvRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcbiAgfVxuXG4gIHNldCB2aWRlb0VsZW1lbnQodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50KSB7XG4gICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSkge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWRlZGRhdGEnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWRlZG1ldGFkYXRhJywgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuXG4gICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQpIHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQuc2Vzc2lvbklkID0gJyc7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0LnN0cmVhbUlkID0gJyc7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlbmRlcmVyRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2UoKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5zcmNPYmplY3QgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlN0b3BwZWQ7XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUgPSB2aWRlb0VsZW1lbnQ7XG5cbiAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVkZGF0YScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVkbWV0YWRhdGEnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVWaWRlb01ldGFEYXRhQ2hhbmdlZCgpOiB2b2lkIHtcbiAgICBjb25zdCB2aWRlb0VsZW1lbnQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWU7XG5cbiAgICBpZiAodmlkZW9FbGVtZW50KSB7XG4gICAgICBpZiAodGhpcy5yZXNvbHV0aW9uLnZhbHVlLndpZHRoICE9PSB2aWRlb0VsZW1lbnQudmlkZW9XaWR0aCB8fCB0aGlzLnJlc29sdXRpb24udmFsdWUuaGVpZ2h0ICE9PSB2aWRlb0VsZW1lbnQudmlkZW9IZWlnaHQpIHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVzb2x1dGlvbi52YWx1ZSA9IG5ldyBEaW1lbnNpb24odmlkZW9FbGVtZW50LnZpZGVvV2lkdGgsIHZpZGVvRWxlbWVudC52aWRlb0hlaWdodCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlc29sdXRpb24udmFsdWUgPSBEaW1lbnNpb24uZW1wdHk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHRva2VuKCk6IEVuY29kZWRFZGdlVG9rZW4ge1xuICAgIHJldHVybiB0aGlzLl90b2tlbkNvbnRleHQudG9rZW4udmFsdWU7XG4gIH1cblxuICBzZXQgdG9rZW4odG9rZW46IEVuY29kZWRFZGdlVG9rZW4pIHtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICB0aGlzLl90b2tlbkNvbnRleHQudG9rZW4udmFsdWUgPSB0b2tlbjtcbiAgICB0aGlzLl90b2tlbkNvbnRleHQudG9rZW5FeHBpcmluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgY29uc3QgZWRnZVRva2VuID0gRWRnZUF1dGhQYXJzZXIucGFyc2VUb2tlbih0aGlzLl90b2tlbkNvbnRleHQudG9rZW4udmFsdWUpO1xuICAgIGNvbnN0IGRpc2NvdmVyeVVyaSA9IChlZGdlVG9rZW4udXJpIHx8IFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpLnRvU3RyaW5nKCk7XG5cbiAgICBTREsudGVuYW5jeS52YWx1ZSA9IGVkZ2VUb2tlbi50ZW5hbmN5IHx8IFNESy50ZW5hbmN5LnZhbHVlO1xuICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSBkaXNjb3ZlcnlVcmk7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZSA9IE1ldHJpY3NGYWN0b3J5LmdldE1ldHJpY3NTZXJ2aWNlKGRpc2NvdmVyeVVyaSk7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuaGFzSW5zZXJ0YWJsZVN0cmVhbXMudmFsdWUgPSBlZGdlVG9rZW4uY2FwYWJpbGl0aWVzLmluY2x1ZGVzKCdpbnNlcnRhYmxlLXN0cmVhbXMnKTtcblxuICAgIHRoaXMuc3RhcnQoKTtcbiAgfVxuXG4gIGdldCBwZWVyQ29ubmVjdGlvbigpOiBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5UGVlckNvbm5lY3Rpb247XG4gIH1cblxuICBnZXQgc3RhdGUoKTogUmVhZE9ubHlTdWJqZWN0PENoYW5uZWxTdGF0ZT4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVN0YXRlO1xuICB9XG5cbiAgZ2V0IGF1dG9NdXRlZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUF1dG9NdXRlZDtcbiAgfVxuXG4gIGdldCBhdXRvUGF1c2VkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5QXV0b1BhdXNlZDtcbiAgfVxuXG4gIGdldCB0b2tlbkV4cGlyaW5nKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5VG9rZW5FeHBpcmluZztcbiAgfVxuXG4gIGdldCBhdXRob3JpemVkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5QXV0aG9yaXplZDtcbiAgfVxuXG4gIGdldCBvbmxpbmUoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlPbmxpbmU7XG4gIH1cblxuICBnZXQgbG9hZGluZygpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUxvYWRpbmc7XG4gIH1cblxuICBnZXQgcGxheWluZygpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVBsYXlpbmc7XG4gIH1cblxuICBnZXQgc3RhbmRieSgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVN0YW5kYnk7XG4gIH1cblxuICBnZXQgc3RvcHBlZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVN0b3BwZWQ7XG4gIH1cblxuICBnZXQgdGFyZ2V0TGFnKCk6IFJlYWRPbmx5U3ViamVjdDxNaWxsaXNlY29uZD4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVRhcmdldExhZztcbiAgfVxuXG4gIGdldCBsYWcoKTogUmVhZE9ubHlTdWJqZWN0PE1pbGxpc2Vjb25kPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5TGFnO1xuICB9XG5cbiAgZ2V0IGJpdHJhdGVMaW1pdCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUJpdHJhdGVMaW1pdC52YWx1ZTtcbiAgfVxuXG4gIGdldCByZXNvbHV0aW9uKCk6IFJlYWRPbmx5U3ViamVjdDxEaW1lbnNpb24+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlSZXNvbHV0aW9uO1xuICB9XG5cbiAgZ2V0IGZhaWx1cmVDb3VudCgpOiBSZWFkT25seVN1YmplY3Q8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5RmFpbHVyZUNvdW50O1xuICB9XG5cbiAgZ2V0IGVuZFBvaW50KCk6IFJlYWRPbmx5U3ViamVjdDxFbmRQb2ludD4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUVuZFBvaW50O1xuICB9XG5cbiAgZ2V0IHN0cmVhbSgpOiBSZWFkT25seVN1YmplY3Q8SVN0cmVhbT4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVN0cmVhbTtcbiAgfVxuXG4gIGdldCBzdHJlYW1JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZDtcbiAgfVxuXG4gIGdldCBydGNTdGF0aXN0aWNzKCk6IFJlYWRPbmx5U3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVJ0Y1N0YXRpc3RpY3M7XG4gIH1cblxuICBnZXQgbWVkaWFTdHJlYW0oKTogUmVhZE9ubHlTdWJqZWN0PE1lZGlhU3RyZWFtPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5TWVkaWFTdHJlYW07XG4gIH1cblxuICBzZXRCaXRyYXRlTGltaXQoYml0cmF0ZUxpbWl0OiBCaXRzUGVyU2Vjb25kKTogdm9pZCB7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYml0cmF0ZUxpbWl0LnZhbHVlID0gYml0cmF0ZUxpbWl0O1xuICB9XG5cbiAgY2xlYXJCaXRyYXRlTGltaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LmJpdHJhdGVMaW1pdC52YWx1ZSAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZSAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUpIHtcbiAgICAgIGNvbnN0IGVsYXBzZWRJbk1pbGxpc2Vjb25kcyA9IERhdGUubm93KCkgLSB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsSW5pdGlhbGl6YXRpb24uZ2V0VGltZSgpO1xuICAgICAgY29uc3QgYml0cmF0ZUluQml0c1BlclNlY29uZCA9IDA7XG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUubGltaXRCaXRyYXRlKFxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUsXG4gICAgICAgIGVsYXBzZWRJbk1pbGxpc2Vjb25kcyxcbiAgICAgICAgYml0cmF0ZUluQml0c1BlclNlY29uZCxcbiAgICAgICAgQml0cmF0ZVN0YXRlLktlZXAsXG4gICAgICAgIEJpdHJhdGVNb2RlLlJlc2V0XG4gICAgICApXG4gICAgICAgIC50aGVuKCh7c3RhdHVzfSkgPT4ge1xuICAgICAgICAgIGlmIChzdGF0dXMgPT09ICdvaycpIHtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmJpdHJhdGVMaW1pdC52YWx1ZSA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdFcnJvciB3aGlsZSBzZXR0aW5nIGxpbWl0IGJpdHJhdGUnLCBlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlVGFyZ2V0TGFnKGxhZzogTWlsbGlzZWNvbmQpOiB2b2lkIHtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC50YXJnZXRMYWcudmFsdWUgPSBsYWc7XG4gIH1cblxuICBhc3luYyBzdG9wKHJlYXNvbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgaWYgKCF0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSkge1xuICAgICAgICB0aGlzLnByb2Nlc3NTdG9wKHJlYXNvbik7XG5cbiAgICAgICAgcmVzb2x2ZSgpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcy5hZGQodGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcuc3Vic2NyaWJlKGlzU3RhcnRpbmcgPT4ge1xuICAgICAgICBpZiAoIWlzU3RhcnRpbmcpIHtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NTdG9wKHJlYXNvbik7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NTdG9wKHJlYXNvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSkge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlKCk7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuc3JjT2JqZWN0ID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgIHRoaXMuY2xlYW5VcFJlc291cmNlcyhyZWFzb24pO1xuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuU3RvcHBlZDtcbiAgfVxuXG4gIGFzeW5jIHJlc3VtZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlKSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgIHJldHVybiB0aGlzLnBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgbXV0ZSgpOiB2b2lkIHtcbiAgICBjb25zdCB2aWRlb0VsZW1lbnQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWU7XG5cbiAgICBpZiAodmlkZW9FbGVtZW50KSB7XG4gICAgICB2aWRlb0VsZW1lbnQubXV0ZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHVubXV0ZSgpOiB2b2lkIHtcbiAgICBjb25zdCB2aWRlb0VsZW1lbnQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWU7XG5cbiAgICBpZiAodmlkZW9FbGVtZW50KSB7XG4gICAgICB2aWRlb0VsZW1lbnQubXV0ZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRpc3Bvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcCgnY2xpZW50OmNoYW5uZWwtZGlzcG9zZScpLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc0Rpc3Bvc2VkID0gdHJ1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldFVyaSh0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbik6IFVSTCB7XG4gICAgY29uc3QgdXJsID0gRWRnZUF1dGhQYXJzZXIucGFyc2VUb2tlbih0b2tlbikudXJpO1xuXG4gICAgaWYgKHVybCkge1xuICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnRmFsbCBiYWNrIHRvIHRoZSBkZWZhdWx0IGRpc2NvdmVyIFVSSSBbJXNdJywgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG5cbiAgICByZXR1cm4gbmV3IFVSTChTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9zdGF0ZUNvbnRleHQuaXNEaXNwb3NlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDaGFubmVsIHdhcyBhbHJlYWR5IGRpc3Bvc2VkJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBhbHJlYWR5IHN0YXJ0aW5nLCBza2lwcGluZyBzdGFydCcpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXMucHJvY2Vzc1N0YXJ0KCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByb2Nlc3NTdGFydCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbiA9IHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbi52YWx1ZTtcbiAgICBjb25zdCBsaXN0ZW5PblN0cmVhbVNldHVwID0gdGhpcy5fc2Vzc2lvblRlbGVtZXRyeS5saXN0ZW5PblN0cmVhbVNldHVwKCk7XG5cbiAgICBpZiAoIUVkZ2VBdXRoUGFyc2VyLmlzRW5jb2RlZEVkZ2VUb2tlblZhbGlkKHRva2VuKSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcGFyc2UgdG9rZW4gWyVzXScsIHRva2VuKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlVuYXV0aG9yaXplZDtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuaGFzSW5zZXJ0YWJsZVN0cmVhbXMudmFsdWUpIHtcbiAgICAgIGlmICghdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaykge1xuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ2luc2VydGFibGUtc3RyZWFtcyBlbmFibGVkLCBidXQgbWlzc2luZyBjYWxsYmFjayBmdW5jdGlvbiBDcmVhdGVDaGFubmVsT3B0aW9ucy52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrJyk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFGZWF0dXJlRW5hYmxlbWVudC5pc0luc2VydGFibGVTdHJlYW1zU3VwcG9ydGVkKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignaW5zZXJ0YWJsZS1zdHJlYW1zIGVuYWJsZWQsIGJ1dCBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgTWVkaWEgU3RyZWFtIFRyYWNrIEFQSScpO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5VbnN1cHBvcnRlZEZlYXR1cmU7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignQ3JlYXRlQ2hhbm5lbE9wdGlvbnMudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayBjYWxsYmFjayBmdW5jdGlvbiBmb3VuZCwgYnV0IGZlYXR1cmUgaXMgbm90IGVuYWJsZWQgdmlhIGluc2VydGFibGUtc3RyZWFtcyBjYXBhYmlsaXR5Jyk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmNsZWFuVXBSZXNvdXJjZXMoJ2NsaWVudDpzdGFydCcpO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlN0YXJ0aW5nO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgY29uc3QgdXJpID0gdGhpcy5nZXRVcmkodG9rZW4pO1xuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZGlzcG9zYWJsZXMuYWRkKFxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUuc3Vic2NyaWJlKHN0YXRlID0+IHtcbiAgICAgICAgaWYgKHN0YXRlID09PSBDaGFubmVsU3RhdGUuRXJyb3IgfHwgc3RhdGUgPT09IENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nKSB7XG4gICAgICAgICAgRGlzY292ZXJ5LmNsZWFyQ2FjaGVkQ2xvc2VzdEVuZHBvaW50KHVyaSk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGNvbnN0IGhhbmRsZVN0cmVhbUZhaWx1cmVDYWxsYmFjazogKCkgPT4gUHJvbWlzZTx2b2lkPiA9ICgpID0+IG5ldyBQcm9taXNlKChyZXNvbHZlKTogdm9pZCA9PiB7XG4gICAgICAvLyBOZWVkIHRvIHNldCBpc1N0YXJ0aW5nIHRvIGZhbHNlIGFuZCBjYWxsIGhhbmRsZVN0cmVhbUZhaWx1cmUgaWYgc3RyZWFtIG1vbml0b3JzIGZvdW5kIGFuIGlzc3VlXG4gICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICByZXR1cm4gcmVzb2x2ZSh0aGlzLmhhbmRsZVN0cmVhbUZhaWx1cmUoKSk7XG4gICAgfSk7XG4gICAgY29uc3Qgc3RyZWFtUGxheWVyID0gU3RyZWFtRmFjdG9yeS5jcmVhdGUodG9rZW4sIHRoaXMuX2NoYW5uZWxDb250ZXh0LCB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmVDYWxsYmFjayk7XG5cbiAgICBpZiAoIXN0cmVhbVBsYXllcikge1xuICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiBzdHJlYW1QbGF5ZXIuc3RhcnQoXG4gICAgICB1cmksXG4gICAgICB0b2tlbixcbiAgICAgIGxpc3Rlbk9uU3RyZWFtU2V0dXAsXG4gICAgICB0aGlzLnBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50LmJpbmQodGhpcykpXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgIGxpc3Rlbk9uU3RyZWFtU2V0dXAuZmFpbCgpO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSsrO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0Lm9ubGluZS52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuY2xlYW5VcFJlc291cmNlcygnY2xpZW50OmNsZWFudXAtYWZ0ZXItZmFpbGVkLXNldHVwJyk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuRXJyb3I7XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc3RhcnQgY2hhbm5lbCcsIGUpO1xuICAgICAgfSlcbiAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPT09IENoYW5uZWxTdGF0ZS5QbGF5aW5nIHx8ICFTREsuYXV0b21hdGljUmV0cnlPbkZhaWx1cmUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5oYW5kbGVTdHJlYW1GYWlsdXJlKClcbiAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgaGFuZGxpbmcgc3RyZWFtIGZhaWx1cmUnLCBlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCB0aGlzLmdldFJldHJ5SW50ZXJ2YWwoKSk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgfSkpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlc3RhcnRBZnRlclN0b3AoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX3N0YXRlQ29udGV4dC5pc0Rpc3Bvc2VkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NoYW5uZWwgd2FzIGFscmVhZHkgZGlzcG9zZWQnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5wbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudCh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl90b2tlbkNvbnRleHQudG9rZW4udmFsdWUpIHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnN0YXJ0KCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHBsYXkoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbWVkaWFTdHJlYW0gPSB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWU7XG5cbiAgICBpZiAoIW1lZGlhU3RyZWFtKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdGFydCgpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KG1lZGlhU3RyZWFtKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UmV0cnlJbnRlcnZhbCgpOiBudW1iZXIge1xuICAgIHN3aXRjaCAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUpIHtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0YW5kQnk6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5PZmZsaW5lOlxuICAgICAgICByZXR1cm4gc3RhbmRieVBvbGxpbmdJbnRlcnZhbEluTWlsbGlzZWNvbmRzO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuRXJyb3I6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuR2VvUmVzdHJpY3RlZDpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkdlb0Jsb2NrZWQ6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdG9wcGVkOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RhcnRpbmc6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5QbGF5aW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUGF1c2VkOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUmVjb25uZWN0aW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuVW5zdXBwb3J0ZWRGZWF0dXJlOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yOlxuICAgICAgICAvLyBGaXJzdCBhbmQgc2Vjb25kIGF0dGVtcHQgZmFzdCwgYWZ0ZXIgdGhhdCBleHBvbmVudGlhbCB3aXRoIGJhY2tvZmYgaW50ZXJ2YWxcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4cG9uZW50aWFsQmFja29mZi5nZXRFeHBvbmVudGlhbEJhY2tvZmZJbnRlcnZhbEJ5RmFpbHVyZUNvdW50KHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVTdHJlYW1GYWlsdXJlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHN3aXRjaCAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUpIHtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkVycm9yOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUmVjb25uZWN0aW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RhbmRCeTpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLk9mZmxpbmU6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnUmV0cnkgc3RhcnQgd2l0aCBpbml0aWFsIHN0YXRlIFslc10gWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlLCBDaGFubmVsU3RhdGVbdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWVdKTtcblxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlVuYXV0aG9yaXplZDpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgdW5hdXRob3JpemVkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4gUGxlYXNlIHByb3ZpZGUgYSBuZXcgdG9rZW4gYW5kIGludm9rZSBzdGFydCgpJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuR2VvUmVzdHJpY3RlZDpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgZ2VvIHJlc3RyaWN0ZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LiBQbGVhc2UgcHJvdmlkZSBhIG5ldyB0b2tlbiBhbmQgaW52b2tlIHN0YXJ0KCknKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5HZW9CbG9ja2VkOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBnZW8gYmxvY2tlZCwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuIFBsZWFzZSBwcm92aWRlIGEgbmV3IHRva2VuIGFuZCBpbnZva2Ugc3RhcnQoKScpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0b3BwZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIHN0b3BwZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LicpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlBsYXlpbmc6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIHBsYXlpbmcsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0Jyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUGF1c2VkOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBwYXVzZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LiBQbGVhc2UgaW52b2tlIHBsYXkoKScpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0YXJ0aW5nOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBhbHJlYWR5IHN0YXJ0aW5nLCBza2lwcGluZyByZXRyeSBvZiBzdGFydCcpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlVuc3VwcG9ydGVkRmVhdHVyZTpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgc3RvcHBlZCBkdWUgdG8gdW5zdXBwb3J0ZWQgZmVhdHVyZSwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBzdG9wcGVkIGR1ZSB0byBjb25maWd1cmF0aW9uIGVycm9yLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4nKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3RhcnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYW5VcFJlc291cmNlcyhyZWFzb246IHN0cmluZyA9IGRlZmF1bHRTdHJlYW1UZXJtaW5hdGlvblJlYXNvbik6IHZvaWQge1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgIGNvbnN0IHBlZXJDb25uZWN0aW9uID0gdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlO1xuXG4gICAgaWYgKHBlZXJDb25uZWN0aW9uKSB7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgPSBudWxsO1xuICAgICAgcGVlckNvbm5lY3Rpb24uY2xvc2UoKTtcbiAgICAgIHBlZXJDb25uZWN0aW9uLmRpc3Bvc2UoKTtcblxuICAgICAgaWYgKFNESy5mb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0ICYmICEoRmVhdHVyZUVuYWJsZW1lbnQuaXNNb2JpbGUgJiYgU0RLLnNraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlcykpIHtcbiAgICAgICAgR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXIuZm9yY2VHYXJiYWdlQ29sbGVjdGlvbigpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUpIHtcbiAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZS5nZXRUcmFja3MoKS5mb3JFYWNoKHRyYWNrID0+IHRyYWNrLnN0b3AoKSk7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RvcHBlZC52YWx1ZSA9IHRydWU7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhbmRieS52YWx1ZSA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZSkge1xuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLmRlc3Ryb3lTdHJlYW0odGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlLCByZWFzb24pXG4gICAgICAgIC50aGVuKCh7c3RhdHVzfSkgPT4ge1xuICAgICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdbJXNdIEZhaWxlZCB0byBkZXN0cm95IHN0cmVhbSB3aXRoIHJlYXNvbiBbJXNdJywgdGhpcy5zdHJlYW1JZCwgc3RhdHVzKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIERlc3Ryb3llZCBzdHJlYW0gd2l0aCByZWFzb24gWyVzXScsIHRoaXMuc3RyZWFtSWQsIHN0YXR1cyk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ1slc10gRmFpbGVkIHRvIGRlc3Ryb3kgc3RyZWFtJywgdGhpcy5zdHJlYW1JZCwgZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnZpZGVvRWxlbWVudCAmJiB0aGlzLnZpZGVvRWxlbWVudC5kYXRhc2V0KSB7XG4gICAgICB0aGlzLnZpZGVvRWxlbWVudC5kYXRhc2V0LnNlc3Npb25JZCA9ICcnO1xuICAgICAgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldC5zdHJlYW1JZCA9ICcnO1xuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSA9IG51bGw7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUgPSBudWxsO1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gMDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQobWVkaWFTdHJlYW06IE1lZGlhU3RyZWFtKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdmlkZW9FbGVtZW50ID0gdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlO1xuXG4gICAgaWYgKCF2aWRlb0VsZW1lbnQpIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuU3RvcHBlZDtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZpZGVvRWxlbWVudC5zcmNPYmplY3QgPSBtZWRpYVN0cmVhbTtcblxuICAgIGNvbnN0IHBsYXlQcm9taXNlID0gdmlkZW9FbGVtZW50LnBsYXkoKTtcblxuICAgIGlmIChwbGF5UHJvbWlzZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSB0cnVlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGxheWluZztcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiBwbGF5UHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IHRydWU7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QbGF5aW5nO1xuICAgIH0pLmNhdGNoKGUgPT4ge1xuICAgICAgY29uc3QgaGFzQXVkaW9UcmFjayA9ICEhbWVkaWFTdHJlYW0uZ2V0VHJhY2tzKCkuZmlsdGVyKHRyYWNrID0+IHtcbiAgICAgICAgcmV0dXJuIHRyYWNrLmtpbmQgPT09ICdhdWRpbyc7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlT2ZmID0gIVNESy5hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZTtcblxuICAgICAgaWYgKGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlT2ZmIHx8IHZpZGVvRWxlbWVudC5tdXRlZCB8fCAhaGFzQXVkaW9UcmFjaykge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QYXVzZWQ7XG5cbiAgICAgICAgaWYgKGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlT2ZmKSB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gUGF1c2VkIHZpZGVvIGFmdGVyIHBsYXkgZmFpbGVkLiBNYW51YWwgdXNlciBhY3Rpb24gcmVxdWlyZWQuJywgdGhpcy5zdHJlYW1JZCwgZSk7XG4gICAgICAgICAgdmlkZW9FbGVtZW50LnNyY09iamVjdCA9IG51bGw7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzQXVkaW9UcmFjaykge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBwbGF5IHZpZGVvLiBNYW51YWwgdXNlciBhY3Rpb24gcmVxdWlyZWQuJywgdGhpcy5zdHJlYW1JZCwgZSk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gcGxheSBtdXRlZCB2aWRlby4gTWFudWFsIHVzZXIgYWN0aW9uIHJlcXVpcmVkLicsIHRoaXMuc3RyZWFtSWQsIGUpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmlkZW9FbGVtZW50Lm11dGVkID0gdHJ1ZTtcblxuICAgICAgcmV0dXJuIHZpZGVvRWxlbWVudC5wbGF5KClcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFBsYXllZCB2aWRlbyBhZnRlciBhdXRvIG11dGluZy4gTWFudWFsIHVzZXIgYWN0aW9uIHJlcXVpcmVkIHRvIHVubXV0ZS4nLCB0aGlzLnN0cmVhbUlkKTtcblxuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QbGF5aW5nO1xuICAgICAgICB9KS5jYXRjaChlID0+IHtcbiAgICAgICAgICB2aWRlb0VsZW1lbnQubXV0ZWQgPSBmYWxzZTtcblxuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBwbGF5IHZpZGVvLiBNYW51YWwgdXNlciBhY3Rpb24gcmVxdWlyZWQuJywgdGhpcy5zdHJlYW1JZCwgZSk7XG5cbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBhdXNlZDtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmVudW0gQ2hhbm5lbFN0YXRlIHtcbiAgT2ZmbGluZSA9IDEsXG4gIFN0YXJ0aW5nLFxuICBQYXVzZWQsXG4gIFBsYXlpbmcsXG4gIFJlY292ZXJpbmcsXG4gIFJlY29ubmVjdGluZyxcbiAgU3RhbmRCeSxcbiAgU3RvcHBlZCxcbiAgVW5hdXRob3JpemVkLFxuICBHZW9SZXN0cmljdGVkLFxuICBHZW9CbG9ja2VkLFxuICBVbnN1cHBvcnRlZEZlYXR1cmUsXG4gIENvbmZpZ3VyYXRpb25FcnJvcixcbiAgRXJyb3Jcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2hhbm5lbFN0YXRlOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgQ2hhbm5lbCwge0NoYW5uZWxPcHRpb25zfSBmcm9tICcuL0NoYW5uZWwnO1xuaW1wb3J0IHtJU3RyZWFtVHJhY2tUcmFuc2Zvcm0sIElFbmNvZGVkU3RyZWFtU2lua30gZnJvbSAnLi4vY29udGV4dC9DaGFubmVsQ29udGV4dCc7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQge0VuY29kZWRFZGdlVG9rZW59IGZyb20gJy4uLy4uL2VkZ2VBdXRoL0VuY29kZWRFZGdlVG9rZW4nO1xuaW1wb3J0IHtNaWxsaXNlY29uZH0gZnJvbSAnLi4vLi4vdW5pdHMvVW5pdHMnO1xuXG50eXBlIENyZWF0ZUNoYW5uZWxPcHRpb25zID0ge1xuICB2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQ7XG4gIHRva2VuOiBFbmNvZGVkRWRnZVRva2VuO1xuICB0YXJnZXRMYWc/OiBNaWxsaXNlY29uZDtcbiAgdmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaz86IElTdHJlYW1UcmFja1RyYW5zZm9ybTxWaWRlb0ZyYW1lPjtcbiAgZW5jb2RlZFZpZGVvU3RyZWFtU2luaz86IElFbmNvZGVkU3RyZWFtU2luazxSVENFbmNvZGVkVmlkZW9GcmFtZT47XG4gIGVuY29kZWRBdWRpb1N0cmVhbVNpbms/OiBJRW5jb2RlZFN0cmVhbVNpbms8UlRDRW5jb2RlZEF1ZGlvRnJhbWU+O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hhbm5lbHMge1xuICBzdGF0aWMgY3JlYXRlQ2hhbm5lbChvcHRpb25zOiBDcmVhdGVDaGFubmVsT3B0aW9ucyk6IENoYW5uZWwge1xuICAgIGlmICghU0RLLmluaXRpYWxpemVkLnZhbHVlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NESyBpcyBub3QgbG9hZGVkLicpO1xuICAgIH1cblxuICAgIGNvbnN0IGNoYW5uZWxPcHRpb25zOiBDaGFubmVsT3B0aW9ucyA9IHtcbiAgICAgIHRhcmdldExhZzogb3B0aW9ucy50YXJnZXRMYWcsXG4gICAgICB2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBvcHRpb25zLnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2ssXG4gICAgICBlbmNvZGVkVmlkZW9TdHJlYW1TaW5rOiBvcHRpb25zLmVuY29kZWRWaWRlb1N0cmVhbVNpbmssXG4gICAgICBlbmNvZGVkQXVkaW9TdHJlYW1TaW5rOiBvcHRpb25zLmVuY29kZWRBdWRpb1N0cmVhbVNpbmtcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBDaGFubmVsKG9wdGlvbnMudmlkZW9FbGVtZW50LCBvcHRpb25zLnRva2VuLCBjaGFubmVsT3B0aW9ucyk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2hhbm5lbHMgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBDaGFubmVscyBmcm9tICcuL0NoYW5uZWxzJztcbmltcG9ydCBDaGFubmVsU3RhdGUgZnJvbSAnLi9DaGFubmVsU3RhdGUnO1xuXG5leHBvcnQge1xuICBTREssXG4gIENoYW5uZWxzLFxuICBDaGFubmVsU3RhdGVcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgU0RLLFxuICBDaGFubmVscyxcbiAgQ2hhbm5lbFN0YXRlXG59OyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgQ2hhbm5lbFN0YXRlIGZyb20gJy4uL2NoYW5uZWxzL0NoYW5uZWxTdGF0ZSc7XG5pbXBvcnQgRGltZW5zaW9uIGZyb20gJy4uLy4uL3ZpZGVvL0RpbWVuc2lvbic7XG5pbXBvcnQgRW5kUG9pbnQsIHtJU3RyZWFtLCBTdWJzY3JpYmVTdGF0dXN9IGZyb20gJy4uL2Rpc2NvdmVyeS9FbmRQb2ludCc7XG5pbXBvcnQgVmlkZW9UZWxlbWV0cnkgZnJvbSAnLi4vLi4vdmlkZW8vVmlkZW9UZWxlbWV0cnknO1xuaW1wb3J0IHtJUnRjTW9uaXRvclN0YXRpc3RpYywgSVJ0Y1N0YXRpc3RpY30gZnJvbSAnLi4vLi4vcnRjL1J0Y0Nvbm5lY3Rpb25Nb25pdG9yJztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCB7Qml0c1BlclNlY29uZCwgTWlsbGlzZWNvbmR9IGZyb20gJy4uLy4uL3VuaXRzL1VuaXRzJztcblxuY29uc3QgZGVmYXVsdFRhcmdldExhZyA9IDA7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVN0cmVhbVRyYWNrVHJhbnNmb3JtPFQgPSBBdWRpb0RhdGEgfCBWaWRlb0ZyYW1lPiB7XG4gIChjaHVuazogVCwgY29udHJvbGxlcjogVHJhbnNmb3JtU3RyZWFtRGVmYXVsdENvbnRyb2xsZXI8VD4pOiB2b2lkIHwgUHJvbWlzZUxpa2U8dm9pZD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUVuY29kZWRTdHJlYW1TaW5rPFQgPSBSVENFbmNvZGVkQXVkaW9GcmFtZSB8IFJUQ0VuY29kZWRWaWRlb0ZyYW1lPiB7XG4gIChjaHVuazogVCk6IHZvaWQgfCBQcm9taXNlTGlrZTx2b2lkPjtcbn1cblxuZXhwb3J0IHR5cGUgQ2hhbm5lbENvbnRleHRPcHRpb25zID0ge1xuICB0YXJnZXRMYWc/OiBudW1iZXI7XG4gIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s/OiBJU3RyZWFtVHJhY2tUcmFuc2Zvcm08VmlkZW9GcmFtZT47XG4gIGVuY29kZWRWaWRlb1N0cmVhbVNpbms/OiBJRW5jb2RlZFN0cmVhbVNpbms8UlRDRW5jb2RlZFZpZGVvRnJhbWU+O1xuICBlbmNvZGVkQXVkaW9TdHJlYW1TaW5rPzogSUVuY29kZWRTdHJlYW1TaW5rPFJUQ0VuY29kZWRBdWRpb0ZyYW1lPjtcbiAgaGFzSW5zZXJ0YWJsZVN0cmVhbXM/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hhbm5lbENvbnRleHQge1xuICBjaGFubmVsSW5pdGlhbGl6YXRpb246IERhdGU7XG4gIGRpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdDtcbiAgY2hhbm5lbERpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdDtcbiAgcmVuZGVyZXJEaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3Q7XG4gIHZpZGVvRWxlbWVudDogU3ViamVjdDxIVE1MVmlkZW9FbGVtZW50PjtcbiAgc3RhdGU6IFN1YmplY3Q8Q2hhbm5lbFN0YXRlPjtcbiAgYXV0b011dGVkOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBhdXRvUGF1c2VkOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBhdXRob3JpemVkOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBvbmxpbmU6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIGxvYWRpbmc6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHBsYXlpbmc6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHN0YW5kYnk6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHN0b3BwZWQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHRhcmdldExhZzogU3ViamVjdDxNaWxsaXNlY29uZD47XG4gIGxhZzogU3ViamVjdDxNaWxsaXNlY29uZD47XG4gIGJpdHJhdGVMaW1pdDogU3ViamVjdDxCaXRzUGVyU2Vjb25kPjtcbiAgcmVzb2x1dGlvbjogU3ViamVjdDxEaW1lbnNpb24+O1xuICBmYWlsdXJlQ291bnQ6IFN1YmplY3Q8bnVtYmVyPjtcbiAgZW5kUG9pbnQ6IFN1YmplY3Q8RW5kUG9pbnQ+O1xuICBzdHJlYW06IFN1YmplY3Q8SVN0cmVhbT47XG4gIHJ0Y1N0YXRpc3RpY3M6IFN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+O1xuICB2aWRlb1RlbGVtZXRyeTogVmlkZW9UZWxlbWV0cnk7XG4gIHJ0Y0F1ZGlvU3RhdGlzdGljOiBJUnRjU3RhdGlzdGljO1xuICBydGNWaWRlb1N0YXRpc3RpYzogSVJ0Y1N0YXRpc3RpYztcbiAgY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0OiBudW1iZXI7XG4gIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s/OiBJU3RyZWFtVHJhY2tUcmFuc2Zvcm08VmlkZW9GcmFtZT47XG4gIGVuY29kZWRWaWRlb1N0cmVhbVNpbms/OiBJRW5jb2RlZFN0cmVhbVNpbms8UlRDRW5jb2RlZFZpZGVvRnJhbWU+O1xuICBlbmNvZGVkQXVkaW9TdHJlYW1TaW5rPzogSUVuY29kZWRTdHJlYW1TaW5rPFJUQ0VuY29kZWRBdWRpb0ZyYW1lPjtcbiAgaGFzSW5zZXJ0YWJsZVN0cmVhbXM6IFN1YmplY3Q8Ym9vbGVhbj47XG5cbiAgY29uc3RydWN0b3Iob3B0aW9ucz86IENoYW5uZWxDb250ZXh0T3B0aW9ucykge1xuICAgIHRoaXMuZGlzcG9zYWJsZXMgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgICB0aGlzLmNoYW5uZWxEaXNwb3NhYmxlcyA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICAgIHRoaXMucmVuZGVyZXJEaXNwb3NhYmxlcyA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICAgIHRoaXMuY2hhbm5lbEluaXRpYWxpemF0aW9uID0gbmV3IERhdGUoKTtcbiAgICB0aGlzLnZpZGVvRWxlbWVudCA9IG5ldyBTdWJqZWN0PEhUTUxWaWRlb0VsZW1lbnQ+KG51bGwpO1xuICAgIHRoaXMuc3RhdGUgPSBuZXcgU3ViamVjdDxDaGFubmVsU3RhdGU+KENoYW5uZWxTdGF0ZS5TdGFydGluZyk7XG4gICAgdGhpcy5hdXRvTXV0ZWQgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5hdXRvUGF1c2VkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMuYXV0aG9yaXplZCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICAgIHRoaXMub25saW5lID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gICAgdGhpcy5sb2FkaW5nID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMucGxheWluZyA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLnN0YW5kYnkgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5zdG9wcGVkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMudGFyZ2V0TGFnID0gbmV3IFN1YmplY3Q8TWlsbGlzZWNvbmQ+KG9wdGlvbnM/LnRhcmdldExhZyA/PyBkZWZhdWx0VGFyZ2V0TGFnKTtcbiAgICB0aGlzLmxhZyA9IG5ldyBTdWJqZWN0PE1pbGxpc2Vjb25kPigwKTtcbiAgICB0aGlzLmJpdHJhdGVMaW1pdCA9IG5ldyBTdWJqZWN0PEJpdHNQZXJTZWNvbmQ+KDApO1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IG5ldyBTdWJqZWN0PERpbWVuc2lvbj4oRGltZW5zaW9uLmVtcHR5KTtcbiAgICB0aGlzLmZhaWx1cmVDb3VudCA9IG5ldyBTdWJqZWN0PG51bWJlcj4oMCk7XG4gICAgdGhpcy5lbmRQb2ludCA9IG5ldyBTdWJqZWN0PEVuZFBvaW50PihudWxsKTtcbiAgICB0aGlzLnN0cmVhbSA9IG5ldyBTdWJqZWN0PElTdHJlYW0+KG51bGwpO1xuICAgIHRoaXMucnRjU3RhdGlzdGljcyA9IG5ldyBTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPihudWxsKTtcbiAgICB0aGlzLnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2sgPSBvcHRpb25zPy52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrO1xuICAgIHRoaXMuZW5jb2RlZFZpZGVvU3RyZWFtU2luayA9IG9wdGlvbnM/LmVuY29kZWRWaWRlb1N0cmVhbVNpbms7XG4gICAgdGhpcy5lbmNvZGVkQXVkaW9TdHJlYW1TaW5rID0gb3B0aW9ucz8uZW5jb2RlZEF1ZGlvU3RyZWFtU2luaztcbiAgICB0aGlzLmhhc0luc2VydGFibGVTdHJlYW1zID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oISFvcHRpb25zPy5oYXNJbnNlcnRhYmxlU3RyZWFtcyk7XG4gIH1cblxuICBnZXQgc3RyZWFtSWQoKTogc3RyaW5nIHtcbiAgICBjb25zdCBzdHJlYW0gPSB0aGlzLnN0cmVhbS52YWx1ZTtcblxuICAgIGlmICghc3RyZWFtKSB7XG4gICAgICByZXR1cm4gJy0nO1xuICAgIH1cblxuICAgIHJldHVybiBzdHJlYW0uc3RyZWFtSWQ7XG4gIH1cblxuICBhcHBseVN0YXR1cyhzdGF0dXM6IFN1YnNjcmliZVN0YXR1cyk6IHZvaWQge1xuICAgIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgICBjYXNlICdvayc6XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndW5hdXRob3JpemVkJzpcbiAgICAgIGNhc2UgJ2dlby1yZXN0cmljdGVkJzpcbiAgICAgIGNhc2UgJ2dlby1ibG9ja2VkJzpcbiAgICAgICAgdGhpcy5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1mYWxsdGhyb3VnaFxuICAgICAgY2FzZSAnbm8tc3RyZWFtJzpcbiAgICAgIGNhc2UgJ25vdC1mb3VuZCc6XG4gICAgICAgIHRoaXMuZmFpbHVyZUNvdW50LnZhbHVlID0gMDtcbiAgICAgICAgdGhpcy5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RhbmRieS52YWx1ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuc3RvcHBlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0cmVhbS52YWx1ZSA9IG51bGw7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy5mYWlsdXJlQ291bnQudmFsdWUrKztcbiAgICAgICAgdGhpcy5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RhbmRieS52YWx1ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuc3RvcHBlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0cmVhbS52YWx1ZSA9IG51bGw7XG4gICAgICAgIHRoaXMuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuRXJyb3I7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGFwcGx5U2Vzc2lvbkFuZFN0cmVhbVByb3BlcnRpZXNUb1ZpZGVvRWxlbWVudCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy52aWRlb0VsZW1lbnQudmFsdWUgJiYgdGhpcy52aWRlb0VsZW1lbnQudmFsdWUuZGF0YXNldCkge1xuICAgICAgdGhpcy52aWRlb0VsZW1lbnQudmFsdWUuZGF0YXNldC5zZXNzaW9uSWQgPSBTREsuY2xpZW50U2Vzc2lvbklkO1xuICAgICAgdGhpcy52aWRlb0VsZW1lbnQudmFsdWUuZGF0YXNldC5zdHJlYW1JZCA9IHRoaXMuc3RyZWFtSWQ7XG4gICAgfVxuICB9XG5cbiAgbWFwU3Vic2NyaWJlU3RhdHVzVG9DaGFubmVsU3RhdHVzKHN0YXR1czogU3Vic2NyaWJlU3RhdHVzKTogQ2hhbm5lbFN0YXRlIHtcbiAgICBzd2l0Y2ggKHN0YXR1cykge1xuICAgICAgY2FzZSAnb2snOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlN0YXJ0aW5nO1xuICAgICAgY2FzZSAnbm8tc3RyZWFtJzpcbiAgICAgIGNhc2UgJ25vdC1mb3VuZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuU3RhbmRCeTtcbiAgICAgIGNhc2UgJ2dlby1yZXN0cmljdGVkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5HZW9SZXN0cmljdGVkO1xuICAgICAgY2FzZSAnZ2VvLWJsb2NrZWQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLkdlb0Jsb2NrZWQ7XG4gICAgICBjYXNlICd1bmF1dGhvcml6ZWQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlVuYXV0aG9yaXplZDtcbiAgICAgIGNhc2UgJ2NhcGFjaXR5JzpcbiAgICAgIGNhc2UgJ3JhdGUtbGltaXRlZCc6XG4gICAgICBjYXNlICd0aW1lb3V0JzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nO1xuICAgICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5FcnJvcjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHN0YXR1cyk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi8uLi9yeC9TdWJqZWN0JztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi4vLi4vcnRjL0lQZWVyQ29ubmVjdGlvbic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBlZXJDb25uZWN0aW9uQ29udGV4dCB7XG4gIG1lZGlhU3RyZWFtOiBTdWJqZWN0PE1lZGlhU3RyZWFtPjtcbiAgcGVlckNvbm5lY3Rpb246IFN1YmplY3Q8SVBlZXJDb25uZWN0aW9uPjtcbiAgcGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0czogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMubWVkaWFTdHJlYW0gPSBuZXcgU3ViamVjdDxNZWRpYVN0cmVhbT4obnVsbCk7XG4gICAgdGhpcy5wZWVyQ29ubmVjdGlvbiA9IG5ldyBTdWJqZWN0PElQZWVyQ29ubmVjdGlvbj4obnVsbCk7XG4gICAgdGhpcy5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gMDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vLi4vcngvU3ViamVjdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0YXRlQ29udGV4dCB7XG4gIGlzU3RhcnRpbmc6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIGlzRGlzcG9zZWQ6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5pc1N0YXJ0aW5nID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMuaXNEaXNwb3NlZCA9IGZhbHNlO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi8uLi9yeC9TdWJqZWN0JztcbmltcG9ydCB7RW5jb2RlZEVkZ2VUb2tlbn0gZnJvbSAnLi4vLi4vZWRnZUF1dGgvRW5jb2RlZEVkZ2VUb2tlbic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRva2VuQ29udGV4dCB7XG4gIHRva2VuOiBTdWJqZWN0PEVuY29kZWRFZGdlVG9rZW4+O1xuICB0b2tlbkV4cGlyaW5nOiBTdWJqZWN0PGJvb2xlYW4+O1xuXG4gIGNvbnN0cnVjdG9yKHRva2VuOiBFbmNvZGVkRWRnZVRva2VuKSB7XG4gICAgdGhpcy50b2tlbiA9IG5ldyBTdWJqZWN0PEVuY29kZWRFZGdlVG9rZW4+KHRva2VuKTtcbiAgICB0aGlzLnRva2VuRXhwaXJpbmcgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuY29uc3QgZGVmYXVsdERpc2NvdmVyeVVyaSA9ICdodHRwczovL3BjYXN0LnBoZW5peHJ0cy5jb20vcGNhc3QvZW5kUG9pbnRzJztcblxuZXhwb3J0IHtkZWZhdWx0RGlzY292ZXJ5VXJpfTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7Qml0cmF0ZU1vZGUsIEJpdHJhdGVNb2RlVHlwZX0gZnJvbSAnLi4vYXBpL1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQml0cmF0ZU1vZGVNYXBwaW5nIHtcbiAgc3RhdGljIGNvbnZlcnRCaXRyYXRlTW9kZVRvQml0cmF0ZU1vZGVUeXBlKGJpdHJhdGVNb2RlOiBCaXRyYXRlTW9kZSk6IEJpdHJhdGVNb2RlVHlwZSB7XG4gICAgc3dpdGNoIChiaXRyYXRlTW9kZSkge1xuICAgICAgY2FzZSBCaXRyYXRlTW9kZS5Ob3JtYWw6XG4gICAgICAgIHJldHVybiAnTm9ybWFsJztcbiAgICAgIGNhc2UgQml0cmF0ZU1vZGUuRm9yY2U6XG4gICAgICAgIHJldHVybiAnRm9yY2UnO1xuICAgICAgY2FzZSBCaXRyYXRlTW9kZS5SZXNldDpcbiAgICAgICAgcmV0dXJuICdSZXNldCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShiaXRyYXRlTW9kZSk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0JpdHJhdGVTdGF0ZSwgQml0cmF0ZVN0YXRlVHlwZX0gZnJvbSAnLi4vYXBpL1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQml0cmF0ZVN0YXRlTWFwcGluZyB7XG4gIHN0YXRpYyBjb252ZXJ0Qml0cmF0ZVN0YXRlVG9CaXRyYXRlU3RhdGVUeXBlKGJpdHJhdGVTdGF0ZTogQml0cmF0ZVN0YXRlKTogQml0cmF0ZVN0YXRlVHlwZSB7XG4gICAgc3dpdGNoIChiaXRyYXRlU3RhdGUpIHtcbiAgICAgIGNhc2UgQml0cmF0ZVN0YXRlLktlZXA6XG4gICAgICAgIHJldHVybiAnS2VlcCc7XG4gICAgICBjYXNlIEJpdHJhdGVTdGF0ZS5SZXNldDpcbiAgICAgICAgcmV0dXJuICdSZXNldCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShiaXRyYXRlU3RhdGUpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEVuZFBvaW50IGZyb20gJy4vRW5kUG9pbnQnO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IERpc2NvdmVyeVNlcnZpY2UgZnJvbSAnLi9EaXNjb3ZlcnlTZXJ2aWNlJztcblxuY29uc3QgZGlzY292ZXJ5Q2FjaGVJbnRlcnZhbCA9IDYwMDAwO1xuXG5pbnRlcmZhY2UgSVBlclVSSUVuZHBvaW50IHsgW3g6IHN0cmluZ106IFByb21pc2U8RW5kUG9pbnQ+IH1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzY292ZXJ5IHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2NhY2hlOiBJUGVyVVJJRW5kcG9pbnQgPSB7fTtcblxuICBzdGF0aWMgYXN5bmMgcHJlY2FjaGVDbG9zZXN0RW5kUG9pbnREaXNjb3ZlcnkoKTogUHJvbWlzZTxFbmRQb2ludD4ge1xuICAgIGNvbnN0IHVyaSA9IG5ldyBVUkwoU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG5cbiAgICByZXR1cm4gRGlzY292ZXJ5LmRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50V2l0aENhY2hpbmcodXJpKTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBkaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nKHVyaTogVVJMKTogUHJvbWlzZTxFbmRQb2ludD4ge1xuICAgIGNvbnN0IHVybCA9IHVyaS50b1N0cmluZygpO1xuXG4gICAgaWYgKERpc2NvdmVyeS5fY2FjaGVbdXJsXSkge1xuICAgICAgcmV0dXJuIERpc2NvdmVyeS5fY2FjaGVbdXJsXTtcbiAgICB9XG5cbiAgICBjb25zdCBkaXNjb3ZlcnlTZXJ2aWNlID0gbmV3IERpc2NvdmVyeVNlcnZpY2UodXJpKTtcbiAgICBjb25zdCBjYWNoZWRWYWx1ZSA9IERpc2NvdmVyeS5fY2FjaGVbdXJsXSA9IGRpc2NvdmVyeVNlcnZpY2UuZGlzY292ZXJDbG9zZXN0RW5kUG9pbnQoKTtcbiAgICBjb25zdCBpZ25vcmVkID0gRGlzY292ZXJ5Ll9jYWNoZVt1cmxdLnRoZW4oKCkgPT4ge1xuICAgICAgY29uc3QgaWdub3JlZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAoRGlzY292ZXJ5Ll9jYWNoZVt1cmxdID09PSBjYWNoZWRWYWx1ZSkge1xuICAgICAgICAgIGRlbGV0ZSBEaXNjb3ZlcnkuX2NhY2hlW3VybF07XG4gICAgICAgIH1cbiAgICAgIH0sIGRpc2NvdmVyeUNhY2hlSW50ZXJ2YWwpO1xuICAgIH0pLmNhdGNoKCgpID0+IHtcbiAgICAgIGRlbGV0ZSBEaXNjb3ZlcnkuX2NhY2hlW3VybF07XG4gICAgfSk7XG5cbiAgICByZXR1cm4gY2FjaGVkVmFsdWU7XG4gIH1cblxuICBzdGF0aWMgY2xlYXJDYWNoZWRDbG9zZXN0RW5kcG9pbnQodXJpOiBVUkwpOiB2b2lkIHtcbiAgICBjb25zdCB1cmwgPSB1cmkudG9TdHJpbmcoKTtcblxuICAgIGlmIChEaXNjb3ZlcnkuX2NhY2hlW3VybF0pIHtcbiAgICAgIGRlbGV0ZSBEaXNjb3ZlcnkuX2NhY2hlW3VybF07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rpc2NvdmVyeSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn1cblxuY29uc3QgaWdub3JlZCA9IERpc2NvdmVyeS5wcmVjYWNoZUNsb3Nlc3RFbmRQb2ludERpc2NvdmVyeSgpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IEVuZFBvaW50IGZyb20gJy4vRW5kUG9pbnQnO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuLi8uLi9tZXRyaWNzL01ldHJpY3NUeXBlJztcbmltcG9ydCBEaXNjb3ZlcnlVcmkgZnJvbSAnLi9EaXNjb3ZlcnlVcmknO1xuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4uLy4uL21ldHJpY3MvTWV0cmljc1NlcnZpY2UnO1xuaW1wb3J0IE1ldHJpY3NGYWN0b3J5IGZyb20gJy4uLy4uL21ldHJpY3MvTWV0cmljc0ZhY3RvcnknO1xuXG5jb25zdCBkZWZhdWx0VGltZW91dCA9IDIwMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXNjb3ZlcnlTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ0Rpc2NvdmVyeScpO1xuICBwcml2YXRlIF9tZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgX3VyaTogVVJMO1xuXG4gIGNvbnN0cnVjdG9yKHVyaTogVVJMKSB7XG4gICAgaWYgKCF1cmkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRGlzY292ZXJ5IHJlcXVpcmVzIHVyaScpO1xuICAgIH1cblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlID0gTWV0cmljc0ZhY3RvcnkuZ2V0TWV0cmljc1NlcnZpY2UodXJpLnRvU3RyaW5nKCkpO1xuICAgIHRoaXMuX3VyaSA9IHVyaTtcbiAgfVxuXG4gIGFzeW5jIGRpc2NvdmVyTmVhcmJ5RW5kUG9pbnRzKHVyaTogVVJMLCB0aW1lb3V0OiBudW1iZXIpOiBQcm9taXNlPEVuZFBvaW50W10+IHtcbiAgICBpZiAoIXRpbWVvdXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRGlzY292ZXJ5IHJlcXVpcmVzIHRpbWVvdXQnKTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSB1cmkudG9TdHJpbmcoKTtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgY2FjaGU6ICduby1jYWNoZSdcbiAgICAgIH0pLFxuICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KChfLCByZWplY3QpID0+XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihgRGlzY292ZXJ5IHRpbWVkIG91dCBbJHt1cmx9XWApKSwgdGltZW91dClcbiAgICAgIClcbiAgICBdKTtcblxuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRGlzY292ZXJ5IGZhaWxlZCBbJHt1cmx9XSBbJHtyZXNwb25zZS5zdGF0dXN9XWApO1xuICAgIH1cblxuICAgIGlmIChyZXNwb25zZS5ib2R5ID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYERpc2NvdmVyeSBmYWlsZWQgd2l0aCBubyBkYXRhIFske3VybH1dYCk7XG4gICAgfVxuXG4gICAgY29uc3QgYXNTdHJpbmcgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG4gICAgY29uc3QgZW5kUG9pbnRzID0gYXNTdHJpbmcuc3BsaXQoJywnKTtcblxuICAgIHJldHVybiBlbmRQb2ludHMubWFwKGVuZFBvaW50ID0+IG5ldyBFbmRQb2ludChlbmRQb2ludCwgdGltZW91dCkpO1xuICB9XG5cbiAgYXN5bmMgZGlzY292ZXJDbG9zZXN0RW5kUG9pbnQodGltZW91dDogbnVtYmVyID0gZGVmYXVsdFRpbWVvdXQpOiBQcm9taXNlPEVuZFBvaW50PiB7XG4gICAgY29uc3QgdXJsID0gRGlzY292ZXJ5VXJpLmJ1aWxkRGlzY292ZXJ5VXJsKHRoaXMuX3VyaSk7XG4gICAgY29uc3QgZW5kUG9pbnRzID0gYXdhaXQgdGhpcy5kaXNjb3Zlck5lYXJieUVuZFBvaW50cyhuZXcgVVJMKHVybCksIHRpbWVvdXQpO1xuICAgIGxldCBmYWlsZWRSZXF1ZXN0cyA9IDA7XG4gICAgY29uc3QgcHJvcGFnYXRlRmFpbHVyZUlmQWxsUmVxdWVzdHNGYWlsZWQgPSAoKTogUHJvbWlzZTx2b2lkPiA9PiBuZXcgUHJvbWlzZSgoXywgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAoZmFpbGVkUmVxdWVzdHMgPj0gZW5kUG9pbnRzLmxlbmd0aCkge1xuICAgICAgICByZWplY3QoYERpc2NvdmVyeSBvZiBbJHtlbmRQb2ludHMubGVuZ3RofV0gZW5kcG9pbnRzIGZyb20gWyR7dXJsfV0gZmFpbGVkLCBwcmV2ZW50aW5nIGl0IGZyb20gY29tcGxldGluZ2ApO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGVuZFBvaW50ID0gYXdhaXQgUHJvbWlzZS5yYWNlKGVuZFBvaW50cy5tYXAoZW5kUG9pbnQgPT4gZW5kUG9pbnRcbiAgICAgIC5waW5nKClcbiAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLndhcm4oJ0ZhaWxlZCB0byBwaW5nIGVuZCBwb2ludCBbJXNdJywgZW5kUG9pbnQsIGUpO1xuXG4gICAgICAgIGZhaWxlZFJlcXVlc3RzKys7XG5cbiAgICAgICAgcmV0dXJuIHByb3BhZ2F0ZUZhaWx1cmVJZkFsbFJlcXVlc3RzRmFpbGVkKCk7XG4gICAgICB9KVxuICAgICAgLnRoZW4odGltZSA9PiB7XG4gICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Rpc2NvdmVyZWQgZW5kIHBvaW50IFslc10gd2l0aCB0aW1lIFslc10nLCBlbmRQb2ludC50b1N0cmluZygpLCB0aW1lKTtcbiAgICAgICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuUm91bmRUcmlwVGltZSxcbiAgICAgICAgICBydW50aW1lOiAobm93IC0gU0RLLnBhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgICAgIHZhbHVlOiB7dWludDY0OiB0aW1lIHx8IDB9LFxuICAgICAgICAgIHJlc291cmNlOiBlbmRQb2ludC50b1N0cmluZygpLFxuICAgICAgICAgIGtpbmQ6ICdwaW5nJ1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gZW5kUG9pbnQ7XG4gICAgICB9KSkpO1xuXG4gICAgcmV0dXJuIGVuZFBvaW50O1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCB7ZGVmYXVsdERpc2NvdmVyeVVyaX0gZnJvbSAnLi4vZGVmYXVsdHMnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgVmVyc2lvbk1hbmFnZXIgZnJvbSAnLi4vdmVyc2lvbi9WZXJzaW9uTWFuYWdlcic7XG5pbXBvcnQgUGFyYW1ldGVycyBmcm9tICcuLi8uLi9lbnZpcm9ubWVudC9QYXJhbWV0ZXJzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzY292ZXJ5VXJpIHtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2Rpc2NvdmVyeVVyaTogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPihkZWZhdWx0RGlzY292ZXJ5VXJpKTtcblxuICBzdGF0aWMgZ2V0IHVyaSgpOiBTdWJqZWN0PHN0cmluZz4ge1xuICAgIHJldHVybiBEaXNjb3ZlcnlVcmkuX2Rpc2NvdmVyeVVyaTtcbiAgfVxuXG4gIHN0YXRpYyBidWlsZERpc2NvdmVyeVVybCh1cmk6IFVSTCk6IHN0cmluZyB7XG4gICAgY29uc3QgdXJsID0gbmV3IFVSTCh1cmkudG9TdHJpbmcoKSk7XG4gICAgY29uc3Qgc2RrVmVyc2lvbiA9IFZlcnNpb25NYW5hZ2VyLnNka1ZlcnNpb247XG4gICAgY29uc3QgaW50ZW50aW9ucyA9IFBhcmFtZXRlcnMuZGlzY292ZXJ5UGFyYW1ldGVycy5pbnRlbnRpb25zO1xuXG4gICAgdXJsLnNlYXJjaCA9IGA/JHtuZXcgVVJMU2VhcmNoUGFyYW1zKFtbJ3ZlcnNpb24nLCBzZGtWZXJzaW9uXSwgWydpbnRlbnRpb25zJywgaW50ZW50aW9uc10sIFsnXycsIGAke0RhdGUubm93KCl9YF1dKS50b1N0cmluZygpfWA7XG5cbiAgICBpZiAodXJsLnBhdGhuYW1lID09PSAnLycpIHtcbiAgICAgIHVybC5wYXRobmFtZSA9ICcvcGNhc3QvZW5kUG9pbnRzJztcbiAgICB9XG5cbiAgICByZXR1cm4gdXJsLnRvU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignRGlzY292ZXJ5VXJpIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBFZGdlQXV0aFBhcnNlciBmcm9tICcuLi8uLi9lZGdlQXV0aC9FZGdlQXV0aFBhcnNlcic7XG5pbXBvcnQge0VuY29kZWRFZGdlVG9rZW59IGZyb20gJy4uLy4uL2VkZ2VBdXRoL0VuY29kZWRFZGdlVG9rZW4nO1xuXG5pbXBvcnQge1xuICBJU3Vic2NyaWJlUmVzcG9uc2UsXG4gIElTdWJzY3JpYmVXaXRoT2ZmZXJSZXF1ZXN0LFxuICBJU3Vic2NyaWJlV2l0aG91dE9mZmVyUmVxdWVzdFxufSBmcm9tICcuLi9hcGkvU3Vic2NyaWJlJztcbmltcG9ydCB7SVNldFJlbW90ZURlc2NyaXB0aW9uUmVxdWVzdCwgSVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2V9IGZyb20gJy4uL2FwaS9TZXRSZW1vdGVEZXNjcmlwdGlvbic7XG5pbXBvcnQge0lEZXN0cm95U3RyZWFtUmVxdWVzdCwgSURlc3Ryb3lTdHJlYW1SZXNwb25zZX0gZnJvbSAnLi4vYXBpL0Rlc3Ryb3lTdHJlYW0nO1xuaW1wb3J0IHtJQWRkSWNlQ2FuZGlkYXRlc1JlcXVlc3QsIElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2V9IGZyb20gJy4uL2FwaS9BZGRJY2VDYW5kaWRhdGVzJztcbmltcG9ydCBWZXJzaW9uTWFuYWdlciBmcm9tICcuLi92ZXJzaW9uL1ZlcnNpb25NYW5hZ2VyJztcbmltcG9ydCBQYXJhbWV0ZXJzIGZyb20gJy4uLy4uL2Vudmlyb25tZW50L1BhcmFtZXRlcnMnO1xuaW1wb3J0IHtCaXRyYXRlTW9kZSwgQml0cmF0ZVN0YXRlLCBJU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGV9IGZyb20gJy4uL2FwaS9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSc7XG5pbXBvcnQgQml0cmF0ZU1vZGVNYXBwaW5nIGZyb20gJy4vQml0cmF0ZU1vZGVNYXBwaW5nJztcbmltcG9ydCBCaXRyYXRlU3RhdGVNYXBwaW5nIGZyb20gJy4vQml0cmF0ZVN0YXRlTWFwcGluZyc7XG5pbXBvcnQge0JpdHNQZXJTZWNvbmQsIE1pbGxpc2Vjb25kfSBmcm9tICcuLi8uLi91bml0cy9Vbml0cyc7XG5pbXBvcnQge1xuICBJUHVibGlzaFJlc3BvbnNlLFxuICBJUHVibGlzaFdpdGhPZmZlclJlcXVlc3QsXG4gIElQdWJsaXNoV2l0aG91dE9mZmVyUmVxdWVzdCxcbiAgUHVibGlzaFN0YXR1c1xufSBmcm9tICcuLi9hcGkvUHVibGlzaCc7XG5cbmNvbnN0IGFwaVZlcnNpb24gPSA3O1xuXG5leHBvcnQgdHlwZSBTdWJzY3JpYmVTdGF0dXMgPSAnb2snIHwgJ25vLXN0cmVhbScgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ2dlby1yZXN0cmljdGVkJyB8ICdnZW8tYmxvY2tlZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCB0eXBlIFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzID0gJ29rJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCB0eXBlIFNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzID0gJ29rJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCB0eXBlIFJlbW92ZVRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzID0gJ29rJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCB0eXBlIEFkZEljZUNhbmRpZGF0ZXNTdGF0dXMgPSAnb2snIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmYWlsZWQnO1xuZXhwb3J0IHR5cGUgRGVzdHJveVN0cmVhbVN0YXR1cyA9ICdvaycgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgaW50ZXJmYWNlIElTdHJlYW0ge1xuICBzdHJlYW1JZDogc3RyaW5nO1xuICBzaGFyZWRTZWNyZXQ6IHN0cmluZztcbiAgdGVuYW5jeTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTdWJzY3JpYmVSZXNwb25zZUluaXQge1xuICBzdGF0dXM6IFN1YnNjcmliZVN0YXR1cztcbiAgc3RyZWFtPzogSVN0cmVhbTtcbiAgbGFnPzogTWlsbGlzZWNvbmQ7XG4gIHJ0Y0NvbmZpZ3VyYXRpb24/OiBSVENDb25maWd1cmF0aW9uO1xuICBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlPzoge1xuICAgIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbiAgfTtcbiAgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlPzoge1xuICAgIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbiAgfTtcbiAgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIElQdWJsaXNoUmVzcG9uc2VJbml0ID0ge1xuICBzdGF0dXM6IFB1Ymxpc2hTdGF0dXM7XG4gIHN0cmVhbT86IElTdHJlYW07XG4gIGxhZz86IE1pbGxpc2Vjb25kO1xuICBydGNDb25maWd1cmF0aW9uPzogUlRDQ29uZmlndXJhdGlvbjtcbiAgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG4gIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG4gIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2U/OiB7XG4gICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xuICB9O1xufTtcblxuaW50ZXJmYWNlIElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlSW5pdCB7XG4gIHN0YXR1czogU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXM7XG4gIHNlc3Npb25EZXNjcmlwdGlvbj86IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG59XG5cbmludGVyZmFjZSBJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlSW5pdCB7XG4gIHN0YXR1czogQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cztcbiAgb3B0aW9ucz86IHN0cmluZ1tdO1xufVxuXG5pbnRlcmZhY2UgSVNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlUmVzcG9uc2VJbml0IHtcbiAgc3RhdHVzOiBTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cztcbn1cblxuaW50ZXJmYWNlIElEZXN0cm95U3RyZWFtUmVzcG9uc2VJbml0IHtcbiAgc3RhdHVzOiBEZXN0cm95U3RyZWFtU3RhdHVzO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmRQb2ludCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdFbmRQb2ludCcpO1xuICBwcml2YXRlIHJlYWRvbmx5IF91cmk6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfdGltZW91dDogbnVtYmVyO1xuICBwcml2YXRlIF9yb3VuZFRyaXBUaW1lOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IodXJpOiBzdHJpbmcsIHRpbWVvdXQ6IG51bWJlcikge1xuICAgIHRoaXMuX3VyaSA9IHVyaTtcbiAgICB0aGlzLl90aW1lb3V0ID0gdGltZW91dDtcblxuICAgIGlmICghdGltZW91dCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFbmQgcG9pbnQgcmVxdWlyZXMgYSB0aW1lb3V0YCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHJvdW5kVHJpcFRpbWUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcm91bmRUcmlwVGltZTtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBFbmRQb2ludFt1cmk9JHt0aGlzLl91cml9XWA7XG4gIH1cblxuICBhc3luYyBwaW5nKCk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFBpbmdVcmwoKTtcbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgIGNhY2hlOiAnbm8tY2FjaGUnXG4gICAgICB9KSxcbiAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPigoXywgcmVqZWN0KSA9PlxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoYFBpbmcgdGltZWQgb3V0IFske3VybH1dYCkpLCB0aGlzLl90aW1lb3V0KVxuICAgICAgKVxuICAgIF0pO1xuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcblxuICAgIGlmICghcmVzcG9uc2Uub2spIHsgLyogSGFuZGxlICovXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFBpbmcgZmFpbGVkIFske3VybH1dIFske3Jlc3BvbnNlLnN0YXR1c31dYCk7XG4gICAgfVxuXG4gICAgdGhpcy5fcm91bmRUcmlwVGltZSA9IGZpbmlzaGVkIC0gc3RhcnQ7XG5cbiAgICByZXR1cm4gdGhpcy5fcm91bmRUcmlwVGltZTtcbiAgfVxuXG4gIGFzeW5jIHN1YnNjcmliZSh0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbiwgbG9jYWxTZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQsIGZhaWx1cmVDb3VudDogbnVtYmVyKTogUHJvbWlzZTxJU3Vic2NyaWJlUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgdGVuYW5jeSA9IEVkZ2VBdXRoUGFyc2VyLnBhcnNlVG9rZW4odG9rZW4pLnRlbmFuY3k7XG5cbiAgICBpZiAoIXRlbmFuY3kpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHBhcnNlIHRva2VuIFslc10nLCB0b2tlbik7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAndW5hdXRob3JpemVkJ307XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbdGVuYW5jeSwgJ3N0cmVhbScsICdzdWJzY3JpYmUnXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGNvbnN0IGNsaWVudFZlcnNpb24gPSBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uO1xuXG4gICAgaWYgKGZhaWx1cmVDb3VudCA9PT0gMCAmJiBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgY29uc3QgYm9keVdpdGhPZmZlcjogSVN1YnNjcmliZVdpdGhPZmZlclJlcXVlc3QgPSB7XG4gICAgICAgIGFwaVZlcnNpb24sXG4gICAgICAgIGNsaWVudFZlcnNpb24sXG4gICAgICAgIGJlYXJlclRva2VuOiB0b2tlbixcbiAgICAgICAgZmFpbHVyZUNvdW50LFxuICAgICAgICBodHRwUm91bmRUcmlwVGltZTogdGhpcy5fcm91bmRUcmlwVGltZSxcbiAgICAgICAgc2V0UmVtb3RlRGVzY3JpcHRpb246IHtcbiAgICAgICAgICBhcGlWZXJzaW9uLFxuICAgICAgICAgIHNlc3Npb25EZXNjcmlwdGlvbjoge1xuICAgICAgICAgICAgdHlwZTogbG9jYWxTZXNzaW9uRGVzY3JpcHRpb24udHlwZSxcbiAgICAgICAgICAgIHNkcDogbG9jYWxTZXNzaW9uRGVzY3JpcHRpb24uc2RwXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvbjoge2FwaVZlcnNpb259XG4gICAgICB9O1xuXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keVdpdGhPZmZlcikpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBib2R5V2l0aG91dE9mZmVyOiBJU3Vic2NyaWJlV2l0aG91dE9mZmVyUmVxdWVzdCA9IHtcbiAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgY2xpZW50VmVyc2lvbixcbiAgICAgICAgYmVhcmVyVG9rZW46IHRva2VuLFxuICAgICAgICBmYWlsdXJlQ291bnQsXG4gICAgICAgIGh0dHBSb3VuZFRyaXBUaW1lOiB0aGlzLl9yb3VuZFRyaXBUaW1lLFxuICAgICAgICBjcmVhdGVPZmZlckRlc2NyaXB0aW9uOiB7YXBpVmVyc2lvbn1cbiAgICAgIH07XG5cbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5V2l0aG91dE9mZmVyKSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0ID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGFcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHN1YnNjcmliZScsIG5ldyBFcnJvcihgU3Vic2NyaWJlIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dClcbiAgICAgICAgKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzdWJzY3JpYmUnLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IFN1YnNjcmliZVN0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvU3Vic2NyaWJlU3RhdHVzKGh0dHBSZXNwb25zZSk7XG5cbiAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICByZXR1cm4ge3N0YXR1c307XG4gICAgfVxuXG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHN1YnNjcmliZVJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb252ZXJ0SHR0cFJlc3BvbnNlVG9TdWJzY3JpYmVSZXNwb25zZSh0ZW5hbmN5LCBodHRwUmVzcG9uc2UpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmRlYnVnKCdHb3Qgc3Vic2NyaWJlIHJlc3BvbnNlIFslal0gaW4gWyVzXSBtcycsIHN1YnNjcmliZVJlc3BvbnNlLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiBzdWJzY3JpYmVSZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIHB1Ymxpc2gobmFtZTogc3RyaW5nLCB0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbiwgbG9jYWxTZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQsIGZhaWx1cmVDb3VudDogbnVtYmVyKTogUHJvbWlzZTxJUHVibGlzaFJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHRlbmFuY3kgPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKHRva2VuKS50ZW5hbmN5O1xuXG4gICAgaWYgKCF0ZW5hbmN5KSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwYXJzZSB0b2tlbiBbJXNdJywgdG9rZW4pO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ3VuYXV0aG9yaXplZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3RlbmFuY3ksICdzdHJlYW0nLCAncHVibGlzaCddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgY29uc3QgY2xpZW50VmVyc2lvbiA9IFZlcnNpb25NYW5hZ2VyLnNka1ZlcnNpb247XG5cbiAgICBpZiAoZmFpbHVyZUNvdW50ID09PSAwICYmIGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICBjb25zdCBib2R5V2l0aE9mZmVyOiBJUHVibGlzaFdpdGhPZmZlclJlcXVlc3QgPSB7XG4gICAgICAgIGFwaVZlcnNpb24sXG4gICAgICAgIGNsaWVudFZlcnNpb24sXG4gICAgICAgIGJlYXJlclRva2VuOiB0b2tlbixcbiAgICAgICAgZmFpbHVyZUNvdW50LFxuICAgICAgICBodHRwUm91bmRUcmlwVGltZTogdGhpcy5fcm91bmRUcmlwVGltZSxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgc2V0UmVtb3RlRGVzY3JpcHRpb246IHtcbiAgICAgICAgICBhcGlWZXJzaW9uLFxuICAgICAgICAgIHNlc3Npb25EZXNjcmlwdGlvbjoge1xuICAgICAgICAgICAgdHlwZTogbG9jYWxTZXNzaW9uRGVzY3JpcHRpb24udHlwZSxcbiAgICAgICAgICAgIHNkcDogbG9jYWxTZXNzaW9uRGVzY3JpcHRpb24uc2RwXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvbjoge1xuICAgICAgICAgIHN0cmVhbUlkOiAnJyxcbiAgICAgICAgICBhcGlWZXJzaW9uXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5V2l0aE9mZmVyKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGJvZHlXaXRob3V0T2ZmZXI6IElQdWJsaXNoV2l0aG91dE9mZmVyUmVxdWVzdCA9IHtcbiAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgY2xpZW50VmVyc2lvbixcbiAgICAgICAgYmVhcmVyVG9rZW46IHRva2VuLFxuICAgICAgICBmYWlsdXJlQ291bnQsXG4gICAgICAgIGh0dHBSb3VuZFRyaXBUaW1lOiB0aGlzLl9yb3VuZFRyaXBUaW1lLFxuICAgICAgICBuYW1lLFxuICAgICAgICBjcmVhdGVPZmZlckRlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgc3RyZWFtSWQ6ICcnLFxuICAgICAgICAgIGFwaVZlcnNpb25cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHlXaXRob3V0T2ZmZXIpKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgbGV0IGh0dHBSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHRpbWVvdXQgPSBudWxsO1xuXG4gICAgICBodHRwUmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBmb3JtRGF0YVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KHJlc29sdmUgPT5cbiAgICAgICAgICB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcHVibGlzaCcsIG5ldyBFcnJvcihgUHVibGlzaCB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcHVibGlzaCcsIGUpO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ2ZhaWxlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1czogUHVibGlzaFN0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvUHVibGlzaFN0YXR1cyhodHRwUmVzcG9uc2UpO1xuXG4gICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgcmV0dXJuIHtzdGF0dXN9O1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBzdWJzY3JpYmVSZXNwb25zZSA9IGF3YWl0IHRoaXMuY29udmVydEh0dHBSZXNwb25zZVRvUHVibGlzaFJlc3BvbnNlKHRlbmFuY3ksIGh0dHBSZXNwb25zZSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuZGVidWcoJ0dvdCBwdWJsaXNoIHJlc3BvbnNlIFslal0gaW4gWyVzXSBtcycsIHN1YnNjcmliZVJlc3BvbnNlLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiBzdWJzY3JpYmVSZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIHNldFJlbW90ZURlc2NyaXB0aW9uKHN0cmVhbTogSVN0cmVhbSwgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0KTogUHJvbWlzZTxJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFtzdHJlYW0udGVuYW5jeSwgJ3N0cmVhbScsIHN0cmVhbS5zdHJlYW1JZCwgJ2Rlc2NyaXB0aW9uJywgJ3JlbW90ZSddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgY29uc3QgYm9keTogSVNldFJlbW90ZURlc2NyaXB0aW9uUmVxdWVzdCA9IHtcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBzaGFyZWRTZWNyZXQ6IHN0cmVhbS5zaGFyZWRTZWNyZXQsXG4gICAgICBzZXNzaW9uRGVzY3JpcHRpb246IHtcbiAgICAgICAgdHlwZTogc2Vzc2lvbkRlc2NyaXB0aW9uLnR5cGUsXG4gICAgICAgIHNkcDogc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcFxuICAgICAgfVxuICAgIH07XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keSkpO1xuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0ID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGFcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHNldCByZW1vdGUgZGVzY3JpcHRpb24nLCBuZXcgRXJyb3IoYFNldCByZW1vdGUgZGVzY3JpcHRpb24gdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KVxuICAgICAgICApXG4gICAgICBdKVxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHNldCByZW1vdGUgZGVzY3JpcHRpb24nLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9TZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyhodHRwUmVzcG9uc2UpO1xuXG4gICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgcmV0dXJuIHtzdGF0dXN9O1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb252ZXJ0SHR0cFJlc3BvbnNlVG9TZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlKGh0dHBSZXNwb25zZSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuZGVidWcoJ0dvdCBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uIHJlc3BvbnNlIFslal0gaW4gWyVzXSBtcycsIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2U7XG4gIH1cblxuICBhc3luYyBsaW1pdEJpdHJhdGUoXG4gICAgc3RyZWFtOiBJU3RyZWFtLFxuICAgIGVsYXBzZWRJbk1pbGxpc2Vjb25kczogbnVtYmVyLFxuICAgIGJpdHJhdGVJbkJpdHNQZXJTZWNvbmQ6IEJpdHNQZXJTZWNvbmQsXG4gICAgYml0cmF0ZVN0YXRlOiBCaXRyYXRlU3RhdGUsXG4gICAgYml0cmF0ZU1vZGU6IEJpdHJhdGVNb2RlLFxuICApOiBQcm9taXNlPElTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3N0cmVhbS50ZW5hbmN5LCAnc3RyZWFtJywgc3RyZWFtLnN0cmVhbUlkLCAnYml0cmF0ZSddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgY29uc3QgYm9keTogSVNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlID0ge1xuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHNoYXJlZFNlY3JldDogc3RyZWFtLnNoYXJlZFNlY3JldCxcbiAgICAgIGVsYXBzZWRJbk1pbGxpc2Vjb25kcyxcbiAgICAgIGJpdHJhdGVJbkJpdHNQZXJTZWNvbmQsXG4gICAgICBiaXRyYXRlU3RhdGU6IEJpdHJhdGVTdGF0ZU1hcHBpbmcuY29udmVydEJpdHJhdGVTdGF0ZVRvQml0cmF0ZVN0YXRlVHlwZShiaXRyYXRlU3RhdGUpLFxuICAgICAgYml0cmF0ZU1vZGU6IEJpdHJhdGVNb2RlTWFwcGluZy5jb252ZXJ0Qml0cmF0ZU1vZGVUb0JpdHJhdGVNb2RlVHlwZShiaXRyYXRlTW9kZSlcbiAgICB9O1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIGZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzZXQgbGltaXQgYml0cmF0ZSB0aW1lZCcsIG5ldyBFcnJvcihgU2V0IGxpbWl0IGJpdHJhdGUgdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KVxuICAgICAgICApXG4gICAgICBdKVxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHNldCBsaW1pdCBiaXRyYXRlIHRpbWVkJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMoaHR0cFJlc3BvbnNlKTtcbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnR290IHNldCBsaW1pdCBiaXRyYXRlIHJlc3BvbnNlIFslc10gaW4gWyVzXSBtcycsIHN0YXR1cywgZmluaXNoZWQgLSBzdGFydCk7XG5cbiAgICByZXR1cm4ge3N0YXR1c307XG4gIH1cblxuICBhc3luYyBhZGRJY2VDYW5kaWRhdGVzKHN0cmVhbTogSVN0cmVhbSwgY2FuZGlkYXRlczogUlRDSWNlQ2FuZGlkYXRlW10sIGRpc2NvdmVyeUNvbXBsZXRlZDogYm9vbGVhbiwgb3B0aW9uczogc3RyaW5nW10gPSBbXSk6IFByb21pc2U8SUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFtzdHJlYW0udGVuYW5jeSwgJ3N0cmVhbScsIHN0cmVhbS5zdHJlYW1JZCwgJ2ljZScsICdjYW5kaWRhdGVzJ10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBjb25zdCBib2R5OiBJQWRkSWNlQ2FuZGlkYXRlc1JlcXVlc3QgPSB7XG4gICAgICBhcGlWZXJzaW9uLFxuICAgICAgc2hhcmVkU2VjcmV0OiBzdHJlYW0uc2hhcmVkU2VjcmV0LFxuICAgICAgY2FuZGlkYXRlcyxcbiAgICAgIGRpc2NvdmVyeUNvbXBsZXRlZCxcbiAgICAgIG9wdGlvbnNcbiAgICB9O1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIGZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBhZGQgaWNlIGNhbmRpZGF0ZXMnLCBuZXcgRXJyb3IoYEFkZCBpY2UgY2FuZGlkYXRlcyB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gYWRkIGljZSBjYW5kaWRhdGVzJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBBZGRJY2VDYW5kaWRhdGVzU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9BZGRJY2VDYW5kaWRhdGVzU3RhdHVzKGh0dHBSZXNwb25zZSk7XG5cbiAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICByZXR1cm4ge3N0YXR1c307XG4gICAgfVxuXG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZSA9IGF3YWl0IHRoaXMuY29udmVydEh0dHBSZXNwb25zZVRvQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlKGh0dHBSZXNwb25zZSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnR290IGFkZCBJQ0UgY2FuZGlkYXRlcyByZXNwb25zZSBbJWpdIGluIFslc10gbXMnLCBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIGRlc3Ryb3lTdHJlYW0oc3RyZWFtOiBJU3RyZWFtLCByZWFzb246IHN0cmluZyk6IFByb21pc2U8SURlc3Ryb3lTdHJlYW1SZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFtzdHJlYW0udGVuYW5jeSwgJ3N0cmVhbScsIHN0cmVhbS5zdHJlYW1JZCwgJ2Rlc3Ryb3knXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGNvbnN0IGJvZHk6IElEZXN0cm95U3RyZWFtUmVxdWVzdCA9IHtcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBzaGFyZWRTZWNyZXQ6IHN0cmVhbS5zaGFyZWRTZWNyZXQsXG4gICAgICByZWFzb24sXG4gICAgICBvcHRpb25zOiBbXVxuICAgIH07XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keSkpO1xuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0ID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGEsXG4gICAgICAgICAgY2FjaGU6ICduby1jYWNoZSdcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHN1YnNjcmliZScsIG5ldyBFcnJvcihgRGVsZXRlIHN0cmVhbSB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gZGVsZXRlIHN0cmVhbScsIGUpO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ2ZhaWxlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1czogRGVzdHJveVN0cmVhbVN0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvU2V0RGVzdHJveVN0cmVhbVN0YXR1cyhodHRwUmVzcG9uc2UpO1xuXG4gICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgcmV0dXJuIHtzdGF0dXN9O1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBkZXN0cm95U3RyZWFtUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbnZlcnRIdHRwUmVzcG9uc2VUb0Rlc3Ryb3lTdHJlYW1SZXNwb25zZShodHRwUmVzcG9uc2UpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0dvdCBkZXN0cm95IHN0cmVhbSByZXNwb25zZSBbJWpdIGluIFslc10gbXMnLCBkZXN0cm95U3RyZWFtUmVzcG9uc2UsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIGRlc3Ryb3lTdHJlYW1SZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIGRlc3Ryb3lTdHJlYW1PblVubW91bnQoc3RyZWFtOiBJU3RyZWFtLCByZWFzb246IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghbmF2aWdhdG9yPy5zZW5kQmVhY29uKSB7XG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5kZXN0cm95U3RyZWFtKHN0cmVhbSwgcmVhc29uKTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFtzdHJlYW0udGVuYW5jeSwgJ3N0cmVhbScsIHN0cmVhbS5zdHJlYW1JZCwgJ2Rlc3Ryb3knXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGNvbnN0IGJvZHk6IElEZXN0cm95U3RyZWFtUmVxdWVzdCA9IHtcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBzaGFyZWRTZWNyZXQ6IHN0cmVhbS5zaGFyZWRTZWNyZXQsXG4gICAgICByZWFzb24sXG4gICAgICBvcHRpb25zOiBbXVxuICAgIH07XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keSkpO1xuXG4gICAgbmF2aWdhdG9yLnNlbmRCZWFjb24odXJsLCBmb3JtRGF0YSk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkVXJsKHBhdGg6IHN0cmluZ1tdKTogVVJMIHtcbiAgICBjb25zdCB1cmkgPSBuZXcgVVJMKHRoaXMuX3VyaSk7XG4gICAgY29uc3QgcGF0aEFzQXJyYXkgPSB1cmkucGF0aG5hbWUuc3BsaXQoJy8nKTtcblxuICAgIHBhdGhBc0FycmF5Lmxlbmd0aCA9IHBhdGhBc0FycmF5Lmxlbmd0aCAtIDE7XG5cbiAgICB1cmkucGF0aG5hbWUgPSBwYXRoQXNBcnJheS5jb25jYXQoLi4ucGF0aCkuam9pbignLycpO1xuXG4gICAgcmV0dXJuIHVyaTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRQaW5nVXJsKCk6IHN0cmluZyB7XG4gICAgY29uc3QgdXJpID0gbmV3IFVSTCh0aGlzLl91cmkpO1xuICAgIGNvbnN0IHNka1ZlcnNpb24gPSBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uO1xuICAgIGNvbnN0IGludGVudGlvbnMgPSBQYXJhbWV0ZXJzLmRpc2NvdmVyeVBhcmFtZXRlcnMuaW50ZW50aW9ucztcblxuICAgIHVyaS5zZWFyY2ggPSBgPyR7bmV3IFVSTFNlYXJjaFBhcmFtcyhbWyd0eXBlJywgJ2h0dHAnXSwgWyd2ZXJzaW9uJywgc2RrVmVyc2lvbl0sIFsnaW50ZW50aW9ucycsIGludGVudGlvbnNdLCBbJ18nLCBgJHtEYXRlLm5vdygpfWBdXSkudG9TdHJpbmcoKX1gO1xuXG4gICAgcmV0dXJuIHVyaS50b1N0cmluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9QdWJsaXNoU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IFB1Ymxpc2hTdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDAyOlxuICAgICAgICByZXR1cm4gJ2dlby1yZXN0cmljdGVkJztcbiAgICAgIGNhc2UgNDAzOlxuICAgICAgICByZXR1cm4gJ2dlby1ibG9ja2VkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb1N1YnNjcmliZVN0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBTdWJzY3JpYmVTdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDAyOlxuICAgICAgICByZXR1cm4gJ2dlby1yZXN0cmljdGVkJztcbiAgICAgIGNhc2UgNDAzOlxuICAgICAgICByZXR1cm4gJ2dlby1ibG9ja2VkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb1NldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gJ3VuYXV0aG9yaXplZCc7XG4gICAgICBjYXNlIDQwODpcbiAgICAgICAgcmV0dXJuICd0aW1lb3V0JztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFwSHR0cFN0YXR1c1RvQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBBZGRJY2VDYW5kaWRhdGVzU3RhdHVzIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gJ3VuYXV0aG9yaXplZCc7XG4gICAgICBjYXNlIDQwODpcbiAgICAgICAgcmV0dXJuICd0aW1lb3V0JztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9TZXREZXN0cm95U3RyZWFtU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IERlc3Ryb3lTdHJlYW1TdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbnZlcnRIdHRwUmVzcG9uc2VUb1N1YnNjcmliZVJlc3BvbnNlKHRlbmFuY3k6IHN0cmluZywgcmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxJU3Vic2NyaWJlUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBJU3Vic2NyaWJlUmVzcG9uc2U7XG4gICAgY29uc3Qgc3Vic2NyaWJlUmVzcG9uc2U6IElTdWJzY3JpYmVSZXNwb25zZUluaXQgPSB7c3RhdHVzOiBkYXRhLnN0YXR1c307XG5cbiAgICBzdWJzY3JpYmVSZXNwb25zZS5zdHJlYW0gPSB7XG4gICAgICB0ZW5hbmN5LFxuICAgICAgc3RyZWFtSWQ6IGRhdGEuc3RyZWFtSWQsXG4gICAgICBzaGFyZWRTZWNyZXQ6IGRhdGEuc2hhcmVkU2VjcmV0XG4gICAgfTtcblxuICAgIHN1YnNjcmliZVJlc3BvbnNlLmxhZyA9IGRhdGEubGFnO1xuXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGlmIChkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgc3Vic2NyaWJlUmVzcG9uc2UucnRjQ29uZmlndXJhdGlvbiA9IHRoaXMuY29udmVydElSdGNDb25maWd1cmF0aW9uVG9SVENDb25maWd1cmF0aW9uKGRhdGEucnRjQ29uZmlndXJhdGlvbik7XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgICBzdWJzY3JpYmVSZXNwb25zZS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlID0ge3Nlc3Npb25EZXNjcmlwdGlvbjogZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbn07XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgICBzdWJzY3JpYmVSZXNwb25zZS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlID0ge3Nlc3Npb25EZXNjcmlwdGlvbjogZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbn07XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSAmJiBkYXRhLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgc3Vic2NyaWJlUmVzcG9uc2UuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlID0ge3Nlc3Npb25EZXNjcmlwdGlvbjogZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9ufTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc3Vic2NyaWJlUmVzcG9uc2U7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbnZlcnRIdHRwUmVzcG9uc2VUb1B1Ymxpc2hSZXNwb25zZSh0ZW5hbmN5OiBzdHJpbmcsIHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8SVB1Ymxpc2hSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIElQdWJsaXNoUmVzcG9uc2U7XG4gICAgY29uc3QgcHVibGlzaFJlc3BvbnNlOiBJUHVibGlzaFJlc3BvbnNlSW5pdCA9IHtzdGF0dXM6IGRhdGEuc3RhdHVzfTtcblxuICAgIHB1Ymxpc2hSZXNwb25zZS5zdHJlYW0gPSB7XG4gICAgICB0ZW5hbmN5LFxuICAgICAgc3RyZWFtSWQ6IGRhdGEuc3RyZWFtSWQsXG4gICAgICBzaGFyZWRTZWNyZXQ6IGRhdGEuc2hhcmVkU2VjcmV0XG4gICAgfTtcblxuICAgIGlmIChkYXRhKSB7XG4gICAgICBpZiAoZGF0YS5ydGNDb25maWd1cmF0aW9uKSB7XG4gICAgICAgIHB1Ymxpc2hSZXNwb25zZS5ydGNDb25maWd1cmF0aW9uID0gdGhpcy5jb252ZXJ0SVJ0Y0NvbmZpZ3VyYXRpb25Ub1JUQ0NvbmZpZ3VyYXRpb24oZGF0YS5ydGNDb25maWd1cmF0aW9uKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSAmJiBkYXRhLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHB1Ymxpc2hSZXNwb25zZS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlID0ge3Nlc3Npb25EZXNjcmlwdGlvbjogZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbn07XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgICBwdWJsaXNoUmVzcG9uc2UuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IGRhdGEuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb259O1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHB1Ymxpc2hSZXNwb25zZS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UgPSB7c2Vzc2lvbkRlc2NyaXB0aW9uOiBkYXRhLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb259O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwdWJsaXNoUmVzcG9uc2U7XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRJUnRjQ29uZmlndXJhdGlvblRvUlRDQ29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uKTogUlRDQ29uZmlndXJhdGlvbiB7XG4gICAgY29uc3QgcnRjQ29uZmlndXJhdGlvbjogUlRDQ29uZmlndXJhdGlvbiA9IHtpY2VTZXJ2ZXJzOiBbXX07XG5cbiAgICBpZiAoY29uZmlndXJhdGlvbi5idW5kbGVQb2xpY3kpIHtcbiAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24uYnVuZGxlUG9saWN5ID0gY29uZmlndXJhdGlvbi5idW5kbGVQb2xpY3k7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjb25maWd1cmF0aW9uLmljZUNhbmRpZGF0ZVBvb2xTaXplID09PSAnbnVtYmVyJykge1xuICAgICAgcnRjQ29uZmlndXJhdGlvbi5pY2VDYW5kaWRhdGVQb29sU2l6ZSA9IGNvbmZpZ3VyYXRpb24uaWNlQ2FuZGlkYXRlUG9vbFNpemU7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZ3VyYXRpb24uaWNlU2VydmVycykge1xuICAgICAgY29uc3QgaWNlU2VydmVyczogUlRDSWNlU2VydmVyW10gPSBbXTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb25maWd1cmF0aW9uLmljZVNlcnZlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWNlU2VydmVycy5wdXNoKHtcbiAgICAgICAgICB1cmxzOiBjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0udXJscyxcbiAgICAgICAgICB1c2VybmFtZTogY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLnVzZXJuYW1lLFxuICAgICAgICAgIGNyZWRlbnRpYWw6IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS5jcmVkZW50aWFsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBydGNDb25maWd1cmF0aW9uLmljZVNlcnZlcnMgPSBpY2VTZXJ2ZXJzO1xuICAgIH1cblxuICAgIGlmIChjb25maWd1cmF0aW9uLmljZVRyYW5zcG9ydFBvbGljeSkge1xuICAgICAgcnRjQ29uZmlndXJhdGlvbi5pY2VUcmFuc3BvcnRQb2xpY3kgPSBjb25maWd1cmF0aW9uLmljZVRyYW5zcG9ydFBvbGljeTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlndXJhdGlvbi5ydGNwTXV4UG9saWN5KSB7XG4gICAgICBydGNDb25maWd1cmF0aW9uLnJ0Y3BNdXhQb2xpY3kgPSBjb25maWd1cmF0aW9uLnJ0Y3BNdXhQb2xpY3k7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJ0Y0NvbmZpZ3VyYXRpb247XG4gIH1cbiAgcHJpdmF0ZSBhc3luYyBjb252ZXJ0SHR0cFJlc3BvbnNlVG9TZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlKHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8SVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZTtcbiAgICBjb25zdCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlOiBJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZUluaXQgPSB7c3RhdHVzOiBkYXRhLnN0YXR1c307XG5cbiAgICBpZiAoZGF0YSAmJiBkYXRhLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24gPSBkYXRhLnNlc3Npb25EZXNjcmlwdGlvbjtcbiAgICB9XG5cbiAgICByZXR1cm4gc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29udmVydEh0dHBSZXNwb25zZVRvQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlKHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8SUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2U7XG4gICAgY29uc3QgYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlOiBJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlSW5pdCA9IHtcbiAgICAgIHN0YXR1czogZGF0YS5zdGF0dXMsXG4gICAgICBvcHRpb25zOiBbXVxuICAgIH07XG5cbiAgICBpZiAoZGF0YSkge1xuICAgICAgaWYgKGRhdGEub3B0aW9ucykge1xuICAgICAgICBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2Uub3B0aW9ucyA9IGRhdGEub3B0aW9ucztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjb252ZXJ0SHR0cFJlc3BvbnNlVG9EZXN0cm95U3RyZWFtUmVzcG9uc2UocmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxJRGVzdHJveVN0cmVhbVJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgSURlc3Ryb3lTdHJlYW1SZXNwb25zZTtcbiAgICBjb25zdCBkZXN0cm95U3RyZWFtOiBJRGVzdHJveVN0cmVhbVJlc3BvbnNlSW5pdCA9IHtzdGF0dXM6IGRhdGEuc3RhdHVzfTtcblxuICAgIHJldHVybiBkZXN0cm95U3RyZWFtO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lTdHJlYW1UcmFja1RyYW5zZm9ybX0gZnJvbSAnLi4vY29udGV4dC9DaGFubmVsQ29udGV4dCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEluc2VydGFibGVTdHJlYW1zIHtcbiAgc3RhdGljIHNldHVwTWVkaWFTdHJlYW1UcmFja1RyYW5zZm9ybSh0cmFuc2Zvcm06IElTdHJlYW1UcmFja1RyYW5zZm9ybTxWaWRlb0ZyYW1lPiwgc3RyZWFtOiBNZWRpYVN0cmVhbSkge1xuICAgIGNvbnN0IHZpZGVvVHJhY2sgPSBzdHJlYW0uZ2V0VmlkZW9UcmFja3MoKVswXTtcblxuICAgIGlmICh2aWRlb1RyYWNrKSB7XG4gICAgICBjb25zdCB0cmFuc2Zvcm1lciA9IG5ldyBUcmFuc2Zvcm1TdHJlYW0oe3RyYW5zZm9ybX0pO1xuICAgICAgY29uc3QgcHJvY2Vzc29yID0gbmV3IE1lZGlhU3RyZWFtVHJhY2tQcm9jZXNzb3Ioe3RyYWNrOiB2aWRlb1RyYWNrfSk7XG4gICAgICBjb25zdCBnZW5lcmF0b3IgPSBuZXcgTWVkaWFTdHJlYW1UcmFja0dlbmVyYXRvcih7a2luZDogJ3ZpZGVvJ30pO1xuICAgICAgY29uc3Qgc291cmNlID0gcHJvY2Vzc29yLnJlYWRhYmxlO1xuICAgICAgY29uc3Qgc2luayA9IGdlbmVyYXRvci53cml0YWJsZTtcblxuICAgICAgc291cmNlXG4gICAgICAgIC5waXBlVGhyb3VnaCh0cmFuc2Zvcm1lcilcbiAgICAgICAgLnBpcGVUbyhzaW5rKTtcblxuICAgICAgY29uc3QgdHJhbnNmb3JtZWRTdHJlYW0gPSBuZXcgTWVkaWFTdHJlYW0oKTtcblxuICAgICAgdHJhbnNmb3JtZWRTdHJlYW0uYWRkVHJhY2soZ2VuZXJhdG9yKTtcbiAgICAgIHN0cmVhbS5nZXRBdWRpb1RyYWNrcygpLmZvckVhY2goYXVkaW9UcmFjayA9PiB7XG4gICAgICAgIHRyYW5zZm9ybWVkU3RyZWFtLmFkZFRyYWNrKGF1ZGlvVHJhY2spO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB0cmFuc2Zvcm1lZFN0cmVhbTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RyZWFtO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnNlcnRhYmxlU3RyZWFtcyBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi4vLi4vcnRjL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQgR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXIgZnJvbSAnLi4vLi4vZG9tL0dhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyJztcbmltcG9ydCB7SVN0cmVhbX0gZnJvbSAnLi9JU3RyZWFtJztcbmltcG9ydCB7U2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXN9IGZyb20gJy4uL2Rpc2NvdmVyeS9FbmRQb2ludCc7XG5pbXBvcnQgUGVlckNvbm5lY3Rpb25TZXJ2aWNlIGZyb20gJy4uLy4uL3J0Yy9QZWVyQ29ubmVjdGlvblNlcnZpY2UnO1xuaW1wb3J0IERpc2NvdmVyeSBmcm9tICcuLi9kaXNjb3ZlcnkvRGlzY292ZXJ5JztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi8uLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5pbXBvcnQgQ2hhbm5lbFN0YXRlIGZyb20gJy4uL2NoYW5uZWxzL0NoYW5uZWxTdGF0ZSc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQgUnRjQ29ubmVjdGlvbk1vbml0b3IgZnJvbSAnLi4vLi4vcnRjL1J0Y0Nvbm5lY3Rpb25Nb25pdG9yJztcbmltcG9ydCBEdXJhdGlvbnMgZnJvbSAnLi4vLi4vdGltZS9EdXJhdGlvbic7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IENoYW5uZWxDb250ZXh0IGZyb20gJy4uL2NvbnRleHQvQ2hhbm5lbENvbnRleHQnO1xuaW1wb3J0IFJ0Y0NvbmZpZ3VyYXRpb25NYW5hZ2VyIGZyb20gJy4uLy4uL3J0Yy9SdGNDb25maWd1cmF0aW9uTWFuYWdlcic7XG5pbXBvcnQgUGVlckNvbm5lY3Rpb25Db250ZXh0IGZyb20gJy4uL2NvbnRleHQvUGVlckNvbm5lY3Rpb25Db250ZXh0JztcbmltcG9ydCBJbnNlcnRhYmxlU3RyZWFtcyBmcm9tICcuL0luc2VydGFibGVTdHJlYW1zJztcblxuY29uc3QgaWNlQ2FuZGlkYXRlQWNjdW11bGF0aW9uSW50ZXJ2YWwgPSAxMDA7XG5jb25zdCBkZWZhdWx0U3RyZWFtU2V0dXBUaW1lb3V0ID0gMzAwMDA7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlYWxUaW1lU3RyZWFtIGltcGxlbWVudHMgSVN0cmVhbSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdSZWFsVGltZVN0cmVhbScpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jaGFubmVsQ29udGV4dDogQ2hhbm5lbENvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BlZXJDb25uZWN0aW9uQ29udGV4dDogUGVlckNvbm5lY3Rpb25Db250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9oYW5kbGVTdHJlYW1GYWlsdXJlOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG4gIGNvbnN0cnVjdG9yKGNoYW5uZWxDb250ZXh0LCBwZWVyQ29ubmVjdGlvbkNvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmU6ICgpID0+IFByb21pc2U8dm9pZD4pIHtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dCA9IGNoYW5uZWxDb250ZXh0O1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dCA9IHBlZXJDb25uZWN0aW9uQ29udGV4dDtcbiAgICB0aGlzLl9oYW5kbGVTdHJlYW1GYWlsdXJlID0gaGFuZGxlU3RyZWFtRmFpbHVyZTtcbiAgfVxuXG4gIHN0YXJ0KHVyaSwgdG9rZW4sIGxpc3Rlbk9uU3RyZWFtU2V0dXAsIHBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKFtcbiAgICAgIERpc2NvdmVyeS5kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nKHVyaSksXG4gICAgICBQZWVyQ29ubmVjdGlvblNlcnZpY2UuY3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcigpXG4gICAgICAgIC50aGVuKCh7bG9jYWxPZmZlciwgcGVlckNvbm5lY3Rpb259KSA9PiB7XG4gICAgICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlID0gcGVlckNvbm5lY3Rpb247XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbG9jYWxPZmZlcixcbiAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uXG4gICAgICAgICAgfTtcbiAgICAgICAgfSlcbiAgICBdKVxuICAgICAgLnRoZW4oKFtlbmRQb2ludCwge2xvY2FsT2ZmZXIsIHBlZXJDb25uZWN0aW9ufV0pID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQub25saW5lLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUgPSBlbmRQb2ludDtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Nvbm5lY3RpbmcgdG8gWyVzXScsIGVuZFBvaW50LnRvU3RyaW5nKCkpO1xuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnTG9jYWwgb2ZmZXI6XFxuJyArIGxvY2FsT2ZmZXIuc2RwKTtcblxuICAgICAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuY2xpZW50T2ZmZXJEaXNhYmxlZCB8fCAhcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNTZXRDb25maWd1cmF0aW9uIHx8ICFwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c0dldENvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5jbG9zZSgpO1xuICAgICAgICAgIHBlZXJDb25uZWN0aW9uLmRpc3Bvc2UoKTtcblxuICAgICAgICAgIGlmIChTREsuZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydCAmJiAhKEZlYXR1cmVFbmFibGVtZW50LmlzTW9iaWxlICYmIFNESy5za2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXMpKSB7XG4gICAgICAgICAgICBHYXJiYWdlQ29sbGVjdG9yTWFuYWdlci5mb3JjZUdhcmJhZ2VDb2xsZWN0aW9uKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcGVlckNvbm5lY3Rpb24gPSBudWxsO1xuICAgICAgICAgIGxvY2FsT2ZmZXIgPSBudWxsO1xuICAgICAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSA9IHBlZXJDb25uZWN0aW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGVuZFBvaW50LnN1YnNjcmliZSh0b2tlbiwgbG9jYWxPZmZlciwgdGhpcy5fY2hhbm5lbENvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlKTtcbiAgICAgIH0pXG4gICAgICAudGhlbigoe3N0YXR1cywgc3RyZWFtLCBydGNDb25maWd1cmF0aW9uLCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLCBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UsIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UsIGxhZ30pID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlID0gc3RyZWFtO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sYWcudmFsdWUgPSBsYWc7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXBwbHlTZXNzaW9uQW5kU3RyZWFtUHJvcGVydGllc1RvVmlkZW9FbGVtZW50KCk7XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmRlYnVnKFxuICAgICAgICAgICdbJXNdIFN1YnNjcmliZSBjb21wbGV0ZWQgWyVzXSBbJWpdIFslal0gWyVqXSBbJWpdJyxcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgcnRjQ29uZmlndXJhdGlvbixcbiAgICAgICAgICBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLFxuICAgICAgICAgIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSxcbiAgICAgICAgICBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5tYXBTdWJzY3JpYmVTdGF0dXNUb0NoYW5uZWxTdGF0dXMoc3RhdHVzKTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hcHBseVN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5hcHBseVJ0Y0NvbmZpZ3VyYXRpb24odGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlLCBydGNDb25maWd1cmF0aW9uKVxuICAgICAgICAgIC50aGVuKHBlZXJDb25uZWN0aW9uID0+IHtcbiAgICAgICAgICAgIGxldCBzdWJtaXRDYW5kaWRhdGVzVGltZW91dDtcbiAgICAgICAgICAgIGxldCBjYW5jZWxEaXNjb3ZlcnkgPSBmYWxzZTtcbiAgICAgICAgICAgIGxldCBkaXNjb3ZlcnlDb21wbGV0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZXM6IFJUQ0ljZUNhbmRpZGF0ZVtdID0gW107XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlKSB7XG4gICAgICAgICAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSA9IHBlZXJDb25uZWN0aW9uO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5vbmljZWNhbmRpZGF0ZSA9IChlKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgIT09IHN0cmVhbSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgIT09IHBlZXJDb25uZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGNhbmNlbERpc2NvdmVyeSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICghU0RLLnNlbmRMb2NhbENhbmRpZGF0ZXMudmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoZS5jYW5kaWRhdGUgJiYgZS5jYW5kaWRhdGUuY2FuZGlkYXRlKSB7XG4gICAgICAgICAgICAgICAgY2FuZGlkYXRlcy5wdXNoKGUuY2FuZGlkYXRlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkaXNjb3ZlcnlDb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKCFzdWJtaXRDYW5kaWRhdGVzVGltZW91dCkge1xuICAgICAgICAgICAgICAgIHN1Ym1pdENhbmRpZGF0ZXNUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlICE9PSBzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBpZiAoY2FuY2VsRGlzY292ZXJ5KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLmFkZEljZUNhbmRpZGF0ZXMoc3RyZWFtLCBjYW5kaWRhdGVzLCBkaXNjb3ZlcnlDb21wbGV0ZWQpXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKCh7c3RhdHVzLCBvcHRpb25zfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdbJXNdIEZhaWxlZCB0byBhZGQgSUNFIGNhbmRpZGF0ZXMgd2l0aCByZWFzb24gWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBzdGF0dXMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZXMoJ2NhbmNlbCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxEaXNjb3ZlcnkgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEFkZGVkIElDRSBjYW5kaWRhdGVzIHdpdGggcmVhc29uIFslc10gYW5kIG9wdGlvbnMgWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBzdGF0dXMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdbJXNdIEZhaWxlZCB0byBhZGQgSUNFIGNhbmRpZGF0ZXMnLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgZSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sIGljZUNhbmRpZGF0ZUFjY3VtdWxhdGlvbkludGVydmFsKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ub25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgIT09IHN0cmVhbSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgIT09IHBlZXJDb25uZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29uc3QgcmV0cnlDYWxsYmFjayA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICAvLyBJZiB3ZSBzdG9wIG5vcm1hbGx5IHRoZSBwZWVyIGNvbm5lY3Rpb24gaXMgdW5yZWdpc3RlcmVkIGZpcnN0LlxuICAgICAgICAgICAgICAgIC8vIFRodXMgYW55dGltZSB3ZSBzZWUgYSBjbG9zZWQgcGVlciBjb25uZWN0aW9uIHRoYXQgaXMgc3RpbGwgdmFsaWQsIGl0IGlzIGFuIGVycm9yLlxuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkVycm9yO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlKCk7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuc3JjT2JqZWN0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSgpXG4gICAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBGYWlsZWQgaGFuZGxpbmcgc3RyZWFtIGZhaWx1cmUgYWZ0ZXIgcGVlciBjb25uZWN0aW9uIHN0b3BwZWQgd2l0aCBzdGF0ZSBbJXNdJyxcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgZVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgc3dpdGNoIChwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdjaGVja2luZyc6XG4gICAgICAgICAgICAgICAgY2FzZSAnY29tcGxldGVkJzpcbiAgICAgICAgICAgICAgICBjYXNlICdjb25uZWN0ZWQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ25ldyc6XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgICAgICBjYXNlICdkaXNjb25uZWN0ZWQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2ZhaWxlZCc6XG4gICAgICAgICAgICAgICAgICBpZiAobmF2aWdhdG9yLm9uTGluZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBJQ0UgY29ubmVjdGlvbiBzdGF0ZSBjaGFuZ2VkIHRvIFslc10sIHRyeWluZyB0byByZWNvbm5lY3QnLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWNvbm5lY3RQZWVyQ29ubmVjdGlvbihwZWVyQ29ubmVjdGlvbiwgcmV0cnlDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBjYXNlICdjbG9zZWQnOlxuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gSUNFIGNvbm5lY3Rpb24gc3RhdGUgY2hhbmdlZCB0byBbJXNdLCByZXRyeWluZyB0byBjb25uZWN0JywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSk7XG5cbiAgICAgICAgICAgICAgICAgIHJldHJ5Q2FsbGJhY2soKTtcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBtZWRpYVN0cmVhbVByb21pc2UgPSBuZXcgUHJvbWlzZTxNZWRpYVN0cmVhbT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIUZlYXR1cmVFbmFibGVtZW50Lm9uVHJhY2tEaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcignU3RyZWFtIHNldHVwIHRpbWVkIG91dCcpKSwgZGVmYXVsdFN0cmVhbVNldHVwVGltZW91dCk7XG5cbiAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5vbnRyYWNrID0gKGUpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICAgIGxldCBzdHJlYW0gPSBlLnN0cmVhbXNbMF07XG5cbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0cmVhbSA9IEluc2VydGFibGVTdHJlYW1zLnNldHVwTWVkaWFTdHJlYW1UcmFja1RyYW5zZm9ybSh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrLCBzdHJlYW0pO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgICAgICAgICAgIHJlc29sdmUoc3RyZWFtKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29uc3QgdHJhY2tMaXN0ZW5lciA9IChlKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11c2UtYmVmb3JlLWRlZmluZVxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RyYWNrJywgdHJhY2tMaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWRkc3RyZWFtJywgdHJhY2tMaXN0ZW5lcik7XG5cbiAgICAgICAgICAgICAgICBpZiAoZS5zdHJlYW1zKSB7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKGUuc3RyZWFtc1swXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHJlc29sdmUoZS5zdHJlYW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKCd0cmFjaycsIHRyYWNrTGlzdGVuZXIpO1xuICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2FkZHN0cmVhbScsIHRyYWNrTGlzdGVuZXIpO1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ1N0cmVhbSBzZXR1cCB0aW1lZCBvdXQnKSk7XG4gICAgICAgICAgICAgIH0sIGRlZmF1bHRTdHJlYW1TZXR1cFRpbWVvdXQpO1xuXG4gICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLmFkZEV2ZW50TGlzdGVuZXIoJ3RyYWNrJywgdHJhY2tMaXN0ZW5lcik7XG4gICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLmFkZEV2ZW50TGlzdGVuZXIoJ2FkZHN0cmVhbScsIHRyYWNrTGlzdGVuZXIpO1xuXG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4ocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIXNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBTZXQgbG9jYWwgU0RQIG9mZmVyIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24uc2RwKTtcblxuICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0TG9jYWxEZXNjcmlwdGlvbihzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbilcbiAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gc2V0IGxvY2FsIGRlc2NyaXB0aW9uIFslal0gd2l0aCBtZXNzYWdlIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24sIGUubWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gU2V0IHJlbW90ZSBTRFAgYW5zd2VyIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24uc2RwKTtcblxuICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0UmVtb3RlRGVzY3JpcHRpb24oY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pXG4gICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHNldCByZW1vdGUgZGVzY3JpcHRpb24gWyVqXSB3aXRoIG1lc3NhZ2UgWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbiwgZS5tZXNzYWdlKTtcblxuICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIWNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFNldCByZW1vdGUgU0RQIG9mZmVyIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbi5zZHApO1xuXG4gICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRSZW1vdGVEZXNjcmlwdGlvbihjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKVxuICAgICAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uIFslal0gd2l0aCBtZXNzYWdlIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbiwgZS5tZXNzYWdlKTtcblxuICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5jcmVhdGVBbnN3ZXIoe1xuICAgICAgICAgICAgICAgICAgICBvZmZlclRvUmVjZWl2ZUF1ZGlvOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBvZmZlclRvUmVjZWl2ZVZpZGVvOiB0cnVlXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KS50aGVuKGFuc3dlciA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBTZXQgbG9jYWwgU0RQIGFuc3dlciBbJWpdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGFuc3dlcik7XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5zZXRSZW1vdGVEZXNjcmlwdGlvbihzdHJlYW0sIGFuc3dlcik7XG4gICAgICAgICAgICAgICAgfSkudGhlbigoe3N0YXR1cywgc2Vzc2lvbkRlc2NyaXB0aW9ufSkgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSB0aGlzLm1hcFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzVG9DaGFubmVsU3RhdHVzKHN0YXR1cyk7XG5cbiAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGFuZGJ5LnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RvcHBlZC52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24oc2Vzc2lvbkRlc2NyaXB0aW9uKVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHNldCBsb2NhbCBkZXNjcmlwdGlvbiBbJWpdIHdpdGggbWVzc2FnZSBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHNlc3Npb25EZXNjcmlwdGlvbiwgZS5tZXNzYWdlKTtcblxuICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIGxpc3Rlbk9uU3RyZWFtU2V0dXAuc3VjY2Vzcyh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIG1lZGlhU3RyZWFtUHJvbWlzZTtcbiAgICAgICAgICAgIH0pLnRoZW4obWVkaWFTdHJlYW0gPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUgPSBtZWRpYVN0cmVhbTtcblxuICAgICAgICAgICAgICBjb25zdCBydGNDb25uZWN0aW9uTW9uaXRvciA9IG5ldyBSdGNDb25uZWN0aW9uTW9uaXRvcihwZWVyQ29ubmVjdGlvbiwgbWVkaWFTdHJlYW0sIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLnJvdW5kVHJpcFRpbWUgLyA0KTtcblxuICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5kaXNwb3NhYmxlcy5hZGQocnRjQ29ubmVjdGlvbk1vbml0b3IpO1xuXG4gICAgICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSBydGNDb25uZWN0aW9uTW9uaXRvci5ydGNTdGF0aXN0aWMuc3Vic2NyaWJlKHN0YXRpc3RpY3MgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1N0YXRpc3RpY3MudmFsdWUgPSBzdGF0aXN0aWNzO1xuXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyAmJiAhdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljID0gc3RhdGlzdGljcy5hdWRpbztcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljID0gc3RhdGlzdGljcy52aWRlbztcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxldCBhdWRpb1RyYWNrRmFpbGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgbGV0IHZpZGVvVHJhY2tGYWlsZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgIGlmIChzdGF0aXN0aWNzLmF1ZGlvKSB7XG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMudGltZXN0YW1wICE9PSBzdGF0aXN0aWNzLmF1ZGlvLnRpbWVzdGFtcCkge1xuICAgICAgICAgICAgICAgICAgICBhdWRpb1RyYWNrRmFpbGVkID0gdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMuYnl0ZXNSZWNlaXZlZCA9PT0gc3RhdGlzdGljcy5hdWRpby5ieXRlc1JlY2VpdmVkO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChhdWRpb1RyYWNrRmFpbGVkICYmIG5hdmlnYXRvci5vbkxpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICAgICAgICAgICAgICAgICAgICdbJXNdIEF1ZGlvIHRyYWNrIGZhaWxlZCB3aXRoIGxhc3QgYnl0ZXNSZWNlaXZlZCBbJXNdIGlzIGVxdWFsIHRvIHByZXZpb3VzIGJ5dGVzUmVjZWl2ZWQgWyVzXSB3aXRoaW4gWyVzXScsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpc3RpY3MuYXVkaW8uYnl0ZXNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljLmJ5dGVzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgRHVyYXRpb25zKHN0YXRpc3RpY3MuYXVkaW8udGltZXN0YW1wIC0gdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMudGltZXN0YW1wKS50b0lzb1N0cmluZygpXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljID0gc3RhdGlzdGljcy5hdWRpbztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoc3RhdGlzdGljcy52aWRlbykge1xuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljLnRpbWVzdGFtcCAhPT0gc3RhdGlzdGljcy52aWRlby50aW1lc3RhbXApIHtcbiAgICAgICAgICAgICAgICAgICAgdmlkZW9UcmFja0ZhaWxlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljLmJ5dGVzUmVjZWl2ZWQgPT09IHN0YXRpc3RpY3MudmlkZW8uYnl0ZXNSZWNlaXZlZDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodmlkZW9UcmFja0ZhaWxlZCAmJiBuYXZpZ2F0b3Iub25MaW5lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBWaWRlbyB0cmFjayBmYWlsZWQgd2l0aCBsYXN0IGJ5dGVzUmVjZWl2ZWQgWyVzXSBpcyBlcXVhbCB0byBwcmV2aW91cyBieXRlc1JlY2VpdmVkIFslc10gd2l0aGluIFslc10nLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0aXN0aWNzLnZpZGVvLmJ5dGVzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYy5ieXRlc1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IER1cmF0aW9ucyhzdGF0aXN0aWNzLnZpZGVvLnRpbWVzdGFtcCAtIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljLnRpbWVzdGFtcCkudG9Jc29TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyA9IHN0YXRpc3RpY3MudmlkZW87XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCh2aWRlb1RyYWNrRmFpbGVkIHx8IGF1ZGlvVHJhY2tGYWlsZWQpICYmIG5hdmlnYXRvci5vbkxpbmUpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJldHJ5Q2FsbGJhY2sgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkVycm9yO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuc3JjT2JqZWN0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgcnRjQ29ubmVjdGlvbk1vbml0b3IuZGlzcG9zZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9oYW5kbGVTdHJlYW1GYWlsdXJlKClcbiAgICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdbJXNdIEZhaWxlZCBoYW5kbGluZyBzdHJlYW0gZmFpbHVyZSBhZnRlciB0cmFjayBzdG9wcGVkIHdpdGggc3RhdGUgWyVzXScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGVcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICB0aGlzLnJlY29ubmVjdFBlZXJDb25uZWN0aW9uKHBlZXJDb25uZWN0aW9uLCByZXRyeUNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgaWYgKCFTREsuYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGF1c2VkO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KG1lZGlhU3RyZWFtKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGFwcGx5UnRjQ29uZmlndXJhdGlvbihcbiAgICBvcHRpb25hbFBlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb24gfCBudWxsLFxuICAgIHJ0Y0NvbmZpZ3VyYXRpb246IFJUQ0NvbmZpZ3VyYXRpb24pOiBQcm9taXNlPElQZWVyQ29ubmVjdGlvbj4ge1xuICAgIGlmICghb3B0aW9uYWxQZWVyQ29ubmVjdGlvbikge1xuICAgICAgcnRjQ29uZmlndXJhdGlvbiA9IFJ0Y0NvbmZpZ3VyYXRpb25NYW5hZ2VyLnRydW5jYXRlSWNlU2VydmVycyhydGNDb25maWd1cmF0aW9uKTtcblxuICAgICAgcmV0dXJuIFNESy5wZWVyQ29ubmVjdGlvbkZhY3RvcnkudmFsdWUuY3JlYXRlUGVlckNvbm5lY3Rpb24ocnRjQ29uZmlndXJhdGlvbik7XG4gICAgfVxuXG4gICAgY29uc3QgbmV3UnRjQ29uZmlndXJhdGlvbiA9IHtcbiAgICAgIC4uLm9wdGlvbmFsUGVlckNvbm5lY3Rpb24uZ2V0Q29uZmlndXJhdGlvbigpLFxuICAgICAgLi4ucnRjQ29uZmlndXJhdGlvblxuICAgIH07XG5cbiAgICBvcHRpb25hbFBlZXJDb25uZWN0aW9uLnNldENvbmZpZ3VyYXRpb24obmV3UnRjQ29uZmlndXJhdGlvbik7XG5cbiAgICByZXR1cm4gb3B0aW9uYWxQZWVyQ29ubmVjdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb25uZWN0UGVlckNvbm5lY3Rpb24ocGVlckNvbm5lY3Rpb246IElQZWVyQ29ubmVjdGlvbiwgcmV0cnlDYWxsYmFjazogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIGlmIChwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUgPT09ICdjbG9zZWQnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUmVjb25uZWN0aW5nO1xuXG4gICAgaWYgKHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzIDwgU0RLLm1heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgfHwgIVNESy5hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzKys7XG5cbiAgICAgIGNvbnN0IGlzQ2xpZW50T2ZmZXJGbG93ID0gcGVlckNvbm5lY3Rpb24uY3VycmVudExvY2FsRGVzY3JpcHRpb24/LnR5cGUgPT09ICdvZmZlcic7XG5cbiAgICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5jbGllbnRPZmZlckRpc2FibGVkIHx8XG4gICAgICAgICFwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c1NldENvbmZpZ3VyYXRpb24gfHxcbiAgICAgICAgIXBlZXJDb25uZWN0aW9uLnN1cHBvcnRzR2V0Q29uZmlndXJhdGlvbiB8fFxuICAgICAgICAhaXNDbGllbnRPZmZlckZsb3dcbiAgICAgICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdSZWNvbm5lY3RpbmcgcGVlciBjb25uZWN0aW9uIGJ5IHJlc3RhcnRpbmcgSUNFJyk7XG5cbiAgICAgIGNvbnN0IGN1cnJlbnRMb2NhbERlc2NyaXB0aW9uID0gcGVlckNvbm5lY3Rpb24uY3VycmVudExvY2FsRGVzY3JpcHRpb247XG4gICAgICBjb25zdCBpZ25vcmVkID0gcGVlckNvbm5lY3Rpb24uY3JlYXRlT2ZmZXIoe2ljZVJlc3RhcnQ6IHRydWV9KS50aGVuKG9mZmVyID0+IHtcbiAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24ob2ZmZXIpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKGN1cnJlbnRMb2NhbERlc2NyaXB0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcmVjb25uZWN0IHBlZXIgY29ubmVjdGlvbicsIGUpO1xuICAgICAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gMDtcbiAgICAgICAgICByZXRyeUNhbGxiYWNrKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0ZhaWxlZCB0byByZWNvbm5lY3QgcGVlciBjb25uZWN0aW9uIGFmdGVyIFslc10gYXR0ZW1wdHMsIHBlcmZvcm1pbmcgZnVsbCByZWNvdmVyeScsIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzKTtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG4gICAgcmV0cnlDYWxsYmFjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1c1RvQ2hhbm5lbFN0YXR1cyhzdGF0dXM6IFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzKTogQ2hhbm5lbFN0YXRlIHtcbiAgICBzd2l0Y2ggKHN0YXR1cykge1xuICAgICAgY2FzZSAnb2snOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlN0YXJ0aW5nO1xuICAgICAgY2FzZSAndW5hdXRob3JpemVkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5VbmF1dGhvcml6ZWQ7XG4gICAgICBjYXNlICdub3QtZm91bmQnOlxuICAgICAgY2FzZSAnY2FwYWNpdHknOlxuICAgICAgY2FzZSAncmF0ZS1saW1pdGVkJzpcbiAgICAgIGNhc2UgJ3RpbWVvdXQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlJlY292ZXJpbmc7XG4gICAgICBjYXNlICdmYWlsZWQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLkVycm9yO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoc3RhdHVzKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7SVN0cmVhbX0gZnJvbSAnLi9JU3RyZWFtJztcbmltcG9ydCBFZGdlQXV0aFBhcnNlciBmcm9tICcuLi8uLi9lZGdlQXV0aC9FZGdlQXV0aFBhcnNlcic7XG5pbXBvcnQgUmVhbFRpbWVTdHJlYW0gZnJvbSAnLi9SZWFsVGltZVN0cmVhbSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IENoYW5uZWxTdGF0ZSBmcm9tICcuLi9jaGFubmVscy9DaGFubmVsU3RhdGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFsVGltZVN0cmVhbUZhY3Rvcnkge1xuICBwcml2YXRlIHN0YXRpYyBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1N0cmVhbWluZycpO1xuXG4gIHN0YXRpYyBjcmVhdGUodG9rZW46IHN0cmluZywgY2hhbm5lbENvbnRleHQsIHBlZXJDb25uZWN0aW9uQ29udGV4dCwgaGFuZGxlU3RyZWFtRmFpbHVyZTogKCkgPT4gUHJvbWlzZTx2b2lkPik6IElTdHJlYW0ge1xuICAgIGNvbnN0IHRva2VuQ2FwYWJpbGl0aWVzID0gRWRnZUF1dGhQYXJzZXIucGFyc2VUb2tlbih0b2tlbikuY2FwYWJpbGl0aWVzO1xuXG4gICAgaWYgKHRva2VuQ2FwYWJpbGl0aWVzLmluY2x1ZGVzKCdydG1wJykpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignU0RLIGRvZXMgbm90IHN1cHBvcnQgUlRNUCBwbGF5YmFjay4nKTtcbiAgICAgIGNoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlVuc3VwcG9ydGVkRmVhdHVyZTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0b2tlbkNhcGFiaWxpdGllcy5pbmNsdWRlcygnc3RyZWFtaW5nJykpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignVGhpcyBidWlsZCBkb2VzIG5vdCBzdXBwb3J0IExpdmUgU3RyZWFtIHBsYXliYWNrLicpO1xuICAgICAgY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuVW5zdXBwb3J0ZWRGZWF0dXJlO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBSZWFsVGltZVN0cmVhbShjaGFubmVsQ29udGV4dCwgcGVlckNvbm5lY3Rpb25Db250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignUmVhbFRpbWVTdHJlYW1GYWN0b3J5IGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZGVjbGFyZSBjb25zdCBfX0JVSUxEX1ZFUlNJT05fXzogc3RyaW5nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZXJzaW9uTWFuYWdlciB7XG4gIHByaXZhdGUgc3RhdGljIF9kZWZhdWx0VmVyc2lvbiA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcblxuICBzdGF0aWMgZ2V0IHNka1ZlcnNpb24oKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIF9fQlVJTERfVkVSU0lPTl9fO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiB0aGlzLl9kZWZhdWx0VmVyc2lvbjtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBUZWxlbWV0cnlTZXJ2aWNlIGZyb20gJy4vVGVsZW1ldHJ5U2VydmljZSc7XG5pbXBvcnQgVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiBmcm9tICcuL1RlbGVtZXRyeUNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHtJQXBwZW5kZXJ9IGZyb20gJy4uL2xvZ2dlci9JQXBwZW5kZXInO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlBcHBlbmRlciBpbXBsZW1lbnRzIElBcHBlbmRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RlbGVtZXRyeVNlcnZpY2U6IFRlbGVtZXRyeVNlcnZpY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RlbmFuY3k6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RocmVzaG9sZDogTG9nZ2luZ0xldmVsO1xuXG4gIGNvbnN0cnVjdG9yKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb246IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pIHtcbiAgICB0aGlzLl90ZW5hbmN5ID0gdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50ZW5hbmN5O1xuICAgIHRoaXMuX3Nlc3Npb25JZCA9IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24uc2Vzc2lvbklkO1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24udGhyZXNob2xkO1xuICAgIHRoaXMuX3RlbGVtZXRyeVNlcnZpY2UgPSBuZXcgVGVsZW1ldHJ5U2VydmljZSh0ZWxlbWV0cnlDb25maWd1cmF0aW9uKTtcbiAgfVxuXG4gIGxvZyhsb2dMZXZlbDogTG9nZ2luZ0xldmVsLCBtZXNzYWdlOiBzdHJpbmcsIGNhdGVnb3J5OiBzdHJpbmcsIGRhdGU6IERhdGUpOiB2b2lkIHtcbiAgICBpZiAobG9nTGV2ZWwgPCB0aGlzLl90aHJlc2hvbGQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl90ZWxlbWV0cnlTZXJ2aWNlLnB1c2gobG9nTGV2ZWwsIG1lc3NhZ2UsIGNhdGVnb3J5LCBkYXRlKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuaW1wb3J0IExvZ2dlckRlZmF1bHRzIGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJEZWZhdWx0cyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24ge1xuICBwcml2YXRlIF91cmwgPSAnaHR0cHM6Ly90ZWxlbWV0cnkucGhlbml4cnRzLmNvbS90ZWxlbWV0cnkvbG9ncyc7XG4gIHByaXZhdGUgX3RlbmFuY3k6IHN0cmluZztcbiAgcHJpdmF0ZSBfc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgX2Vudmlyb25tZW50OiBzdHJpbmc7XG4gIHByaXZhdGUgX3RocmVzaG9sZCA9IExvZ2dlckRlZmF1bHRzLmRlZmF1bHRUZWxlbWV0cnlMb2dnaW5nTGV2ZWw7XG5cbiAgZ2V0IHVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl91cmw7XG4gIH1cblxuICBzZXQgdXJsKHVybDogc3RyaW5nKSB7XG4gICAgY29uc3QgdGVsZW1ldHJ5VXJsID0gbmV3IFVSTCh1cmwpO1xuXG4gICAgdGVsZW1ldHJ5VXJsLnBhdGhuYW1lID0gdGVsZW1ldHJ5VXJsLnBhdGhuYW1lICsgJy9sb2dzJztcblxuICAgIHRoaXMuX3VybCA9IHRlbGVtZXRyeVVybC50b1N0cmluZygpO1xuICB9XG5cbiAgZ2V0IGVudmlyb25tZW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Vudmlyb25tZW50O1xuICB9XG5cbiAgc2V0IGVudmlyb25tZW50KGVudmlyb25tZW50OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9lbnZpcm9ubWVudCA9IGVudmlyb25tZW50O1xuICB9XG5cbiAgZ2V0IHRlbmFuY3koKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdGVuYW5jeTtcbiAgfVxuXG4gIHNldCB0ZW5hbmN5KHRlbmFuY3k6IHN0cmluZykge1xuICAgIHRoaXMuX3RlbmFuY3kgPSB0ZW5hbmN5O1xuICB9XG5cbiAgZ2V0IHNlc3Npb25JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zZXNzaW9uSWQ7XG4gIH1cblxuICBzZXQgc2Vzc2lvbklkKHNlc3Npb25JZDogc3RyaW5nKSB7XG4gICAgdGhpcy5fc2Vzc2lvbklkID0gc2Vzc2lvbklkO1xuICB9XG5cbiAgZ2V0IHRocmVzaG9sZCgpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHJldHVybiB0aGlzLl90aHJlc2hvbGQ7XG4gIH1cblxuICBzZXQgdGhyZXNob2xkKHRocmVzaG9sZDogTG9nZ2luZ0xldmVsKSB7XG4gICAgdGhpcy5fdGhyZXNob2xkID0gdGhyZXNob2xkO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlcic7XG5pbXBvcnQgVmVyc2lvbk1hbmFnZXIgZnJvbSAnLi4vc2RrL3ZlcnNpb24vVmVyc2lvbk1hbmFnZXInO1xuaW1wb3J0IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24gZnJvbSAnLi9UZWxlbWV0cnlDb25maWd1cmF0aW9uJztcblxuY29uc3QgcmVxdWVzdFNpemVMaW1pdCA9IDgxOTI7XG5cbmludGVyZmFjZSBJTG9nSXRlbSB7XG4gIHRpbWVzdGFtcDogc3RyaW5nO1xuICB0ZW5hbmN5OiBzdHJpbmc7XG4gIGxldmVsOiBzdHJpbmc7XG4gIGNhdGVnb3J5OiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHZlcnNpb246IHN0cmluZztcbiAgZW52aXJvbm1lbnQ6IHN0cmluZztcbiAgZnVsbFF1YWxpZmllZE5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVsZW1ldHJ5U2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb246IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb247XG5cbiAgcHJpdmF0ZSBfbG9nczogQXJyYXk8SUxvZ0l0ZW0+ID0gW107XG4gIHByaXZhdGUgX2lzU2VuZGluZzogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfZG9tYWluID0gbG9jYXRpb24uaG9zdG5hbWU7XG5cbiAgY29uc3RydWN0b3IodGVsZW1ldHJ5Q29uZmlndXJhdGlvbjogVGVsZW1ldHJ5Q29uZmlndXJhdGlvbikge1xuICAgIHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24gPSB0ZWxlbWV0cnlDb25maWd1cmF0aW9uO1xuICB9XG5cbiAgcHVzaChsb2dMZXZlbDogTG9nZ2luZ0xldmVsLCBtZXNzYWdlOiBzdHJpbmcsIGNhdGVnb3J5OiBzdHJpbmcsIHRpbWVzdGFtcDogRGF0ZSk6IHZvaWQge1xuICAgIGNvbnN0IGxvZ1JlY29yZCA9IHtcbiAgICAgIHRpbWVzdGFtcDogdGltZXN0YW1wLnRvSVNPU3RyaW5nKCksXG4gICAgICB0ZW5hbmN5OiB0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRlbmFuY3ksXG4gICAgICBsZXZlbDogTG9nZ2luZ0xldmVsW2xvZ0xldmVsXSxcbiAgICAgIGNhdGVnb3J5LFxuICAgICAgbWVzc2FnZSxcbiAgICAgIHNlc3Npb25JZDogdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi5zZXNzaW9uSWQsXG4gICAgICB2ZXJzaW9uOiBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uLFxuICAgICAgZW52aXJvbm1lbnQ6IHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQsXG4gICAgICBmdWxsUXVhbGlmaWVkTmFtZTogdGhpcy5fZG9tYWluXG4gICAgfTtcblxuICAgIGlmIChsb2dMZXZlbCA8IExvZ2dpbmdMZXZlbC5FcnJvcikge1xuICAgICAgdGhpcy5fbG9ncy5wdXNoKGxvZ1JlY29yZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2xvZ3MudW5zaGlmdChsb2dSZWNvcmQpO1xuICAgIH1cblxuICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRMb2dzSWZBYmxlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlbmRMb2dzKGxvZ01lc3NhZ2VzOiBBcnJheTxJTG9nSXRlbT4pOiBQcm9taXNlPFJlc3BvbnNlIHwgdm9pZD4ge1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoe3JlY29yZHM6IGxvZ01lc3NhZ2VzfSkpO1xuXG4gICAgcmV0dXJuIGF3YWl0IGZldGNoKHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24udXJsLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlbmRMb2dzSWZBYmxlKCk6IFByb21pc2U8UmVzcG9uc2UgfCB2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2xvZ3MubGVuZ3RoIDw9IDAgfHwgdGhpcy5faXNTZW5kaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IG51bWJlck9mTG9nc1RvU2VuZCA9IDA7XG4gICAgbGV0IHNpemVPZkxvZ3NUb1NlbmQgPSAwO1xuXG4gICAgdGhpcy5faXNTZW5kaW5nID0gdHJ1ZTtcblxuICAgIGNvbnN0IGdldExvZ1NpemUgPSAobG9nOiBJTG9nSXRlbSk6IG51bWJlciA9PiBPYmplY3QudmFsdWVzKGxvZylcbiAgICAgIC5yZWR1Y2UoKHN1bSwgaXRlbSkgPT4gc3VtICsgKGl0ZW0gPyBpdGVtLmxlbmd0aCA6IDApLCAwKTtcblxuICAgIHdoaWxlICh0aGlzLl9sb2dzLmxlbmd0aCA+IG51bWJlck9mTG9nc1RvU2VuZCAmJiBnZXRMb2dTaXplKHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXSkgKyBzaXplT2ZMb2dzVG9TZW5kIDwgcmVxdWVzdFNpemVMaW1pdCkge1xuICAgICAgc2l6ZU9mTG9nc1RvU2VuZCArPSBnZXRMb2dTaXplKHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXSk7XG4gICAgICBudW1iZXJPZkxvZ3NUb1NlbmQrKztcbiAgICB9XG5cbiAgICBpZiAoIW51bWJlck9mTG9nc1RvU2VuZCkge1xuICAgICAgdGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdLm1lc3NhZ2UgPSB0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0ubWVzc2FnZS5zdWJzdHJpbmcoMCxcbiAgICAgICAgZ2V0TG9nU2l6ZSh0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0pICsgKHJlcXVlc3RTaXplTGltaXQgLSBnZXRMb2dTaXplKHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXSkpKTtcbiAgICAgIG51bWJlck9mTG9nc1RvU2VuZCA9IDE7XG4gICAgfVxuXG4gICAgY29uc3QgbG9nTWVzc2FnZXMgPSB0aGlzLl9sb2dzLnNsaWNlKDAsIG51bWJlck9mTG9nc1RvU2VuZCk7XG5cbiAgICB0aGlzLl9sb2dzID0gdGhpcy5fbG9ncy5zbGljZShudW1iZXJPZkxvZ3NUb1NlbmQpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2VuZExvZ3MobG9nTWVzc2FnZXMpLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgdGhpcy5faXNTZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRMb2dzSWZBYmxlKCk7XG5cbiAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9KS5jYXRjaCgoKSA9PiB7XG4gICAgICB0aGlzLl9pc1NlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZExvZ3NJZkFibGUoKTtcbiAgICB9KTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEdXJhdGlvbnMge1xuICBwcml2YXRlIHJlYWRvbmx5IF9kdXJhdGlvbjogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKGR1cmF0aW9uID0gMCkge1xuICAgIHRoaXMuX2R1cmF0aW9uID0gZHVyYXRpb247XG4gIH1cblxuICB0b0lzb1N0cmluZygpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLl9kdXJhdGlvbiA9PT0gMCkge1xuICAgICAgcmV0dXJuICdQMFMnO1xuICAgIH1cblxuICAgIGNvbnN0IGlzTmVnYXRpdmUgPSB0aGlzLl9kdXJhdGlvbiA8IDA7XG4gICAgY29uc3QgZHVyYXRpb24gPSBpc05lZ2F0aXZlID8gTWF0aC5hYnModGhpcy5fZHVyYXRpb24pIDogdGhpcy5fZHVyYXRpb247XG4gICAgbGV0IG9mZnNldCA9IE1hdGguZmxvb3IoZHVyYXRpb24pO1xuICAgIGNvbnN0IG1pbGxpc2Vjb25kcyA9IG9mZnNldCAlIDEwMDA7XG5cbiAgICBvZmZzZXQgPSBNYXRoLmZsb29yKG9mZnNldCAvIDEwMDApO1xuXG4gICAgY29uc3Qgc2Vjb25kcyA9IG9mZnNldCAlIDYwO1xuXG4gICAgb2Zmc2V0ID0gTWF0aC5mbG9vcihvZmZzZXQgLyA2MCk7XG5cbiAgICBjb25zdCBtaW51dGVzID0gb2Zmc2V0ICUgNjA7XG5cbiAgICBvZmZzZXQgPSBNYXRoLmZsb29yKG9mZnNldCAvIDYwKTtcblxuICAgIGNvbnN0IGhvdXJzID0gb2Zmc2V0ICUgMjQ7XG4gICAgY29uc3QgcGFydHMgPSBbJ1BUJ107XG5cbiAgICBpZiAoaXNOZWdhdGl2ZSkge1xuICAgICAgcGFydHMudW5zaGlmdCgnLScpO1xuICAgIH1cblxuICAgIGlmIChob3Vycykge1xuICAgICAgcGFydHMucHVzaChob3VycyArICdIJyk7XG4gICAgfVxuXG4gICAgaWYgKG1pbnV0ZXMpIHtcbiAgICAgIHBhcnRzLnB1c2gobWludXRlcyArICdNJyk7XG4gICAgfVxuXG4gICAgaWYgKHNlY29uZHMgfHwgbWlsbGlzZWNvbmRzKSB7XG4gICAgICBwYXJ0cy5wdXNoKFN0cmluZyhzZWNvbmRzKSk7XG5cbiAgICAgIGlmIChtaWxsaXNlY29uZHMpIHtcbiAgICAgICAgcGFydHMucHVzaCgnLicgKyB0aGlzLnBhZFN0YXJ0KG1pbGxpc2Vjb25kcy50b1N0cmluZygpLCAzLCAnMCcpKTtcbiAgICAgIH1cblxuICAgICAgcGFydHMucHVzaCgnUycpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJ0cy5qb2luKCcnKTtcbiAgfVxuXG4gIHBhZFN0YXJ0KGl0ZW06IHN0cmluZywgdGFyZ2V0TGVuZ3RoOiBudW1iZXIsIHBhZFN0cmluZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0YXJnZXRMZW5ndGggPSB0YXJnZXRMZW5ndGggPj4gMDtcbiAgICBwYWRTdHJpbmcgPSBTdHJpbmcoKHR5cGVvZiBwYWRTdHJpbmcgIT09ICd1bmRlZmluZWQnID8gcGFkU3RyaW5nIDogJyAnKSk7XG5cbiAgICBpZiAoaXRlbS5sZW5ndGggPiB0YXJnZXRMZW5ndGgpIHtcbiAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cblxuICAgIHRhcmdldExlbmd0aCA9IHRhcmdldExlbmd0aCAtIGl0ZW0ubGVuZ3RoO1xuXG4gICAgaWYgKHRhcmdldExlbmd0aCA+IHBhZFN0cmluZy5sZW5ndGgpIHtcbiAgICAgIHBhZFN0cmluZyArPSBwYWRTdHJpbmcucmVwZWF0KHRhcmdldExlbmd0aCAvIHBhZFN0cmluZy5sZW5ndGgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYWRTdHJpbmcuc2xpY2UoMCwgdGFyZ2V0TGVuZ3RoKSArIGl0ZW07XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuY29uc3QgZGVmYXVsdEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgPSAyMDAwO1xuY29uc3QgZGVmYXVsdE1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgPSAxO1xuY29uc3QgZGVmYXVsdE1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgPSAzMDAwMDA7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEV4cG9uZW50aWFsQmFja29mZiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2JhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDogbnVtYmVyID0gZGVmYXVsdEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQsXG4gICAgbWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDogbnVtYmVyID0gZGVmYXVsdE1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQsXG4gICAgbWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDogbnVtYmVyID0gZGVmYXVsdE1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmRcbiAgKSB7XG4gICAgdGhpcy5fYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCA9IGJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ7XG4gICAgdGhpcy5fbWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCA9IG1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ7XG4gICAgdGhpcy5fbWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCA9IG1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ7XG4gIH1cblxuICBnZXRFeHBvbmVudGlhbEJhY2tvZmZJbnRlcnZhbEJ5RmFpbHVyZUNvdW50KGZhaWx1cmVDb3VudDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBiYWNrb2ZmSW50ZXJ2YWxJblNlY29uZHMgPSB0aGlzLl9iYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIC8gMTAwMDtcbiAgICBjb25zdCByYW5kb21pemF0aW9uID0gMC41ICsgKDAuNSAqIE1hdGgucmFuZG9tKCkpOyAvLyBbMC41LCAxKVxuICAgIGNvbnN0IGV4cG9uZW50aWFsQmFja29mZiA9IE1hdGgucG93KGJhY2tvZmZJbnRlcnZhbEluU2Vjb25kcywgZmFpbHVyZUNvdW50IC0gMik7IC8vICBbMS80IDEvMiAxIDIgNCA4IC4uLi5dXG4gICAgY29uc3QgZXhwb25lbnRpYWxCYWNrb2ZmV2l0aFJhbmRvbWl6YXRpb24gPSBNYXRoLmZsb29yKGV4cG9uZW50aWFsQmFja29mZikgKiByYW5kb21pemF0aW9uO1xuICAgIGNvbnN0IGV4cG9uZW50aWFsQmFja29mZldpdGhSYW5kb21pemF0aW9uSW5NaWxsaXNlY29uZCA9IE1hdGguY2VpbChNYXRoLm1heChleHBvbmVudGlhbEJhY2tvZmZXaXRoUmFuZG9taXphdGlvbiAqIDEwMDAsIHRoaXMuX21pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQpKTtcblxuICAgIHJldHVybiBNYXRoLm1pbihleHBvbmVudGlhbEJhY2tvZmZXaXRoUmFuZG9taXphdGlvbkluTWlsbGlzZWNvbmQsIHRoaXMuX21heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgSUNvbXBhcmFibGUgZnJvbSAnLi4vbGFuZy9JQ29tcGFyYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpbWVuc2lvbiBpbXBsZW1lbnRzIElDb21wYXJhYmxlPERpbWVuc2lvbj4ge1xuICByZWFkb25seSB3aWR0aDogbnVtYmVyO1xuICByZWFkb25seSBoZWlnaHQ6IG51bWJlcjtcblxuICBzdGF0aWMgZ2V0IGVtcHR5KCk6IERpbWVuc2lvbiB7XG4gICAgcmV0dXJuIG5ldyBEaW1lbnNpb24oMCwgMCk7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcih3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAgIHRoaXMud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcbiAgfVxuXG4gIGVxdWFscyhvdGhlcjogRGltZW5zaW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG90aGVyICYmIHRoaXMud2lkdGggPT09IG90aGVyLndpZHRoICYmIHRoaXMuaGVpZ2h0ID09PSBvdGhlci5oZWlnaHQ7XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLndpZHRofXgke3RoaXMuaGVpZ2h0fWA7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7U3RyZWFtU2V0dXBMaXN0ZW5lcn0gZnJvbSAnLi4vZG9tL1N0cmVhbVNldHVwTGlzdGVuZXInO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBOZXR3b3JrTW9uaXRvciBmcm9tICcuLi9kb20vTmV0d29ya01vbml0b3InO1xuaW1wb3J0IFNESyBmcm9tICcuLi9zZGsvU0RLJztcbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NUeXBlJztcbmltcG9ydCBEdXJhdGlvbnMgZnJvbSAnLi4vdGltZS9EdXJhdGlvbic7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzU2VydmljZSc7XG5cbmludGVyZmFjZSBJTmV0d29ya1N0YXRpc3RpY3Mge1xuICBydHQ/OiBudW1iZXI7XG4gIGVmZmVjdGl2ZVR5cGU/OiBzdHJpbmc7XG4gIGRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5PzogbnVtYmVyO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZXNzaW9uVGVsZW1ldHJ5IGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU2Vzc2lvblRlbGVtZXRyeScpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yID0gU0RLLmFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yO1xuICBwcml2YXRlIHJlYWRvbmx5IF9uZXR3b3JrTW9uaXRvcjogTmV0d29ya01vbml0b3IgPSBuZXcgTmV0d29ya01vbml0b3IoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGFnZUxvYWRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdCA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICBwcml2YXRlIF9sYXN0TmV0d29ya1N0YXRpc3RpY3M6IElOZXR3b3JrU3RhdGlzdGljcyA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKHBhZ2VMb2FkVGltZTogbnVtYmVyLCBtZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2UpIHtcbiAgICB0aGlzLl9wYWdlTG9hZFRpbWUgPSBwYWdlTG9hZFRpbWU7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX25ldHdvcmtNb25pdG9yKTtcbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZSA9IG1ldHJpY3NTZXJ2aWNlO1xuXG4gICAgaWYgKCF0aGlzLl9uZXR3b3JrTW9uaXRvci5pc1N1cHBvcnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvci5pc0ZvcmVncm91bmQuc3Vic2NyaWJlKGlzRm9yZWdyb3VuZCA9PiB7XG4gICAgICB0aGlzLnJlY29yZEZvcmVncm91bmRDaGFuZ2UoaXNGb3JlZ3JvdW5kKTtcbiAgICB9KSk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX25ldHdvcmtNb25pdG9yLnJ0dC5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgdGhpcy5yZWNvcmROZXR3b3JrUlRUVXBkYXRlKHZhbHVlKTtcbiAgICB9KSk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX25ldHdvcmtNb25pdG9yLmVmZmVjdGl2ZVR5cGUuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIHRoaXMucmVjb3JkTmV0d29ya1R5cGVDaGFuZ2VVcGRhdGUodmFsdWUpO1xuICAgIH0pKTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fbmV0d29ya01vbml0b3IuZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIHRoaXMucmVjb3JkTmV0d29ya0Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5VXBkYXRlKHZhbHVlKTtcbiAgICB9KSk7XG4gIH1cblxuICBsaXN0ZW5PblN0cmVhbVNldHVwKCk6IFN0cmVhbVNldHVwTGlzdGVuZXIge1xuICAgIHJldHVybiBuZXcgU3RyZWFtU2V0dXBMaXN0ZW5lcih0aGlzLl9wYWdlTG9hZFRpbWUpO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIHJlY29yZEZvcmVncm91bmRDaGFuZ2UoaXNGb3JlZ3JvdW5kOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCB0aW1lU2luY2VMYXN0Q2hhbmdlID0gdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IuZ2V0VGltZVNpbmNlTGFzdENoYW5nZSgpO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBpc0ZvcmVncm91bmQgPyBNZXRyaWNzVHlwZS5BcHBsaWNhdGlvbkZvcmVncm91bmQgOiBNZXRyaWNzVHlwZS5BcHBsaWNhdGlvbkJhY2tncm91bmQsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogdGltZVNpbmNlTGFzdENoYW5nZX1cbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ0FwcGxpY2F0aW9uIGhhcyBnb25lIGludG8gdGhlIFslc10gYWZ0ZXIgWyVzXSBtcycsXG4gICAgICBpc0ZvcmVncm91bmQgPyAnZm9yZWdyb3VuZCcgOiAnYmFja2dyb3VuZCcsXG4gICAgICBuZXcgRHVyYXRpb25zKHRpbWVTaW5jZUxhc3RDaGFuZ2UpLnRvSXNvU3RyaW5nKCksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb3JkTmV0d29ya1JUVFVwZGF0ZShuZXdSVFQ6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgb2xkUnR0ID0gdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLnJ0dDtcblxuICAgIHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5ydHQgPSBuZXdSVFQ7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLlJvdW5kVHJpcFRpbWUsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogbmV3UlRUfSxcbiAgICAgIHByZXZpb3VzVmFsdWU6IG9sZFJ0dCA/IHt1aW50NjQ6IG9sZFJ0dH0gOiB1bmRlZmluZWQsXG4gICAgICByZXNvdXJjZTogJ25hdmlnYXRvcidcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gTmV0d29yayBSVFQgY2hhbmdlZCB0byBbJXNdIGZyb20gWyVzXScsXG4gICAgICBuZXcgRHVyYXRpb25zKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkudG9Jc29TdHJpbmcoKSxcbiAgICAgIG5ld1JUVCxcbiAgICAgIG9sZFJ0dFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlY29yZE5ldHdvcmtUeXBlQ2hhbmdlVXBkYXRlKG5ld05ldHdvcmtUeXBlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IG9sZE5ldHdvcmtUeXBlID0gdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLmVmZmVjdGl2ZVR5cGU7XG5cbiAgICB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MuZWZmZWN0aXZlVHlwZSA9IG5ld05ldHdvcmtUeXBlO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5OZXR3b3JrVHlwZSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7c3RyaW5nOiBuZXdOZXR3b3JrVHlwZX0sXG4gICAgICBwcmV2aW91c1ZhbHVlOiBvbGROZXR3b3JrVHlwZSA/IHtzdHJpbmc6IG9sZE5ldHdvcmtUeXBlfSA6IHVuZGVmaW5lZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBOZXR3b3JrIGVmZmVjdGl2ZSB0eXBlIGhhcyBjaGFuZ2VkIHRvIFslc10gZnJvbSBbJXNdJyxcbiAgICAgIG5ldyBEdXJhdGlvbnMobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKS50b0lzb1N0cmluZygpLFxuICAgICAgbmV3TmV0d29ya1R5cGUsXG4gICAgICBvbGROZXR3b3JrVHlwZVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlY29yZE5ldHdvcmtEb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eVVwZGF0ZShuZXdDYXBhY2l0eTogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBvbGRDYXBhY2l0eSA9IHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eTtcblxuICAgIHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSA9IG5ld0NhcGFjaXR5O1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5Eb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7ZmxvYXQ6IG5ld0NhcGFjaXR5fSxcbiAgICAgIHByZXZpb3VzVmFsdWU6IG9sZENhcGFjaXR5ID8ge2Zsb2F0OiBvbGRDYXBhY2l0eX0gOiB1bmRlZmluZWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gTmV0d29yayBkb3dubGluayB0aHJvdWdocHV0IGNhcGFjaXR5IGNoYW5nZWQgdG8gWyVzXSBmcm9tIFslc10nLFxuICAgICAgbmV3IER1cmF0aW9ucyhub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpLnRvSXNvU3RyaW5nKCksXG4gICAgICBuZXdDYXBhY2l0eSxcbiAgICAgIG9sZENhcGFjaXR5XG4gICAgKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBEdXJhdGlvbnMgZnJvbSAnLi4vdGltZS9EdXJhdGlvbic7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IE1ldHJpY3NUeXBlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1R5cGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1NlcnZpY2UnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWaWRlb1RlbGVtZXRyeSBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGFnZUxvYWRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5uZWxTdGFydFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1N0cmVhbVRlbGVtZXRyeScpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RyZWFtSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIF9saXN0ZW5Ub0ZpcnN0VGltZTogKCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBfbGlzdGVuRm9yU3RhbGw6ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUgX2xpc3RlbkZvckNvbnRpbnVhdGlvbjogKGV2ZW50KSA9PiB2b2lkO1xuICBwcml2YXRlIF90aW1lVG9GaXJzdEZyYW1lOiBudW1iZXI7XG4gIHByaXZhdGUgX2NoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfc3RhcnRSZWNvcmRpbmdGaXJzdEZyYW1lOiBudW1iZXI7XG4gIHByaXZhdGUgX3ZpZGVvU3RhbGxlZDogbnVtYmVyO1xuICBwcml2YXRlIF9sYXN0UHJvZ3Jlc3M6IG51bWJlcjtcbiAgcHJpdmF0ZSBfdmlkZW9SZXNvbHV0aW9uOiBzdHJpbmc7XG4gIHByaXZhdGUgX2NsZWFyVGltZVRvRmlyc3RGcmFtZUxpc3RlbmVyOiBEaXNwb3NhYmxlO1xuICBwcml2YXRlIF9jbGVhclJlYnVmZmVyaW5nTGlzdGVuZXI6IERpc3Bvc2FibGU7XG5cbiAgY29uc3RydWN0b3Ioc3RyZWFtSWQ6IHN0cmluZywgcGFnZUxvYWRUaW1lOiBudW1iZXIsIGNoYW5uZWxTdGFydFRpbWU6IG51bWJlciwgbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlKSB7XG4gICAgdGhpcy5fc3RyZWFtSWQgPSBzdHJlYW1JZDtcbiAgICB0aGlzLl9wYWdlTG9hZFRpbWUgPSBwYWdlTG9hZFRpbWU7XG4gICAgdGhpcy5fY2hhbm5lbFN0YXJ0VGltZSA9IGNoYW5uZWxTdGFydFRpbWU7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZSA9IG1ldHJpY3NTZXJ2aWNlO1xuICB9XG5cbiAgc2V0dXBMaXN0ZW5lckZvclRpbWVUb0ZpcnN0VGltZSh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCk6IHZvaWQge1xuICAgIHRoaXMuX3N0YXJ0UmVjb3JkaW5nRmlyc3RGcmFtZSA9IERhdGUubm93KCk7XG5cbiAgICB0aGlzLl9saXN0ZW5Ub0ZpcnN0VGltZSA9ICgpOiB2b2lkID0+IHRoaXMuY2FsbFRpbWVUb0ZpcnN0RnJhbWUoKTtcblxuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlZGRhdGEnLCB0aGlzLl9saXN0ZW5Ub0ZpcnN0VGltZSk7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVkbWV0YWRhdGEnLCB0aGlzLl9saXN0ZW5Ub0ZpcnN0VGltZSk7XG5cbiAgICB0aGlzLl9jbGVhclRpbWVUb0ZpcnN0RnJhbWVMaXN0ZW5lciA9IG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWRlZGRhdGEnLCB0aGlzLl9saXN0ZW5Ub0ZpcnN0VGltZSk7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkZWRtZXRhZGF0YScsIHRoaXMuX2xpc3RlblRvRmlyc3RUaW1lKTtcbiAgICB9KTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fY2xlYXJUaW1lVG9GaXJzdEZyYW1lTGlzdGVuZXIpO1xuICB9XG5cbiAgc2V0dXBMaXN0ZW5lckZvclJlYnVmZmVyaW5nKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50KTogdm9pZCB7XG4gICAgdGhpcy5fbGlzdGVuRm9yU3RhbGwgPSAoKTogdm9pZCA9PiB0aGlzLm9uU3RhbGwoKTtcblxuICAgIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbiA9IChldmVudCk6IHZvaWQgPT4gdGhpcy5vbkNvbnRpbnVhdGlvbihldmVudCwgdmlkZW8pO1xuXG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcignc3RhbGxlZCcsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdwYXVzZScsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdzdXNwZW5kJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3BsYXknLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3BsYXlpbmcnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCd0aW1ldXBkYXRlJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcblxuICAgIHRoaXMuX2NsZWFyUmVidWZmZXJpbmdMaXN0ZW5lciA9IG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3N0YWxsZWQnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdwYXVzZScsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3N1c3BlbmQnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdwbGF5JywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BsYXlpbmcnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigndGltZXVwZGF0ZScsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fY2xlYXJSZWJ1ZmZlcmluZ0xpc3RlbmVyKTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgZHVyYXRpb25TaW5jZVBhZ2VMb2FkKCk6IHN0cmluZyB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgIHJldHVybiBuZXcgRHVyYXRpb25zKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkudG9Jc29TdHJpbmcoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2FsbFRpbWVUb0ZpcnN0RnJhbWUoKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgIHRoaXMucHVzaFRpbWVUb0ZpcnN0RnJhbWUobm93KTtcbiAgICB0aGlzLnB1c2hDaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lKG5vdyk7XG5cbiAgICB0aGlzLl9jbGVhclRpbWVUb0ZpcnN0RnJhbWVMaXN0ZW5lci5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIHB1c2hUaW1lVG9GaXJzdEZyYW1lKG5vdyk6IHZvaWQge1xuICAgIHRoaXMuX3RpbWVUb0ZpcnN0RnJhbWUgPSBub3cgLSB0aGlzLl9zdGFydFJlY29yZGluZ0ZpcnN0RnJhbWU7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLlRpbWVUb0ZpcnN0RnJhbWUsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogdGhpcy5fdGltZVRvRmlyc3RGcmFtZX0sXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gWyVzXSBGaXJzdCBmcmFtZSBbJXNdJyxcbiAgICAgIHRoaXMuZHVyYXRpb25TaW5jZVBhZ2VMb2FkLFxuICAgICAgdGhpcy5fc3RyZWFtSWQsXG4gICAgICBuZXcgRHVyYXRpb25zKHRoaXMuX3RpbWVUb0ZpcnN0RnJhbWUpLnRvSXNvU3RyaW5nKClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBwdXNoQ2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZShub3cpOiB2b2lkIHtcbiAgICB0aGlzLl9jaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lID0gbm93IC0gdGhpcy5fY2hhbm5lbFN0YXJ0VGltZTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuQ2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7dWludDY0OiB0aGlzLl9jaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lfSxcbiAgICAgIHN0cmVhbUlkOiB0aGlzLl9zdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBbJXNdIENoYW5uZWwgY3JlYXRpb24gdG8gZmlyc3QgZnJhbWUgWyVzXScsXG4gICAgICB0aGlzLmR1cmF0aW9uU2luY2VQYWdlTG9hZCxcbiAgICAgIHRoaXMuX3N0cmVhbUlkLFxuICAgICAgbmV3IER1cmF0aW9ucyh0aGlzLl9jaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lKS50b0lzb1N0cmluZygpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgb25TdGFsbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fdmlkZW9TdGFsbGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5TdGFsbGVkLFxuICAgICAgcnVudGltZTogKERhdGUubm93KCkgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHN0cmVhbUlkOiB0aGlzLl9zdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fdmlkZW9TdGFsbGVkID0gRGF0ZS5ub3coKTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gWyVzXSBbYnVmZmVyaW5nXSBTdHJlYW0gaGFzIHN0YWxsZWQnLFxuICAgICAgdGhpcy5kdXJhdGlvblNpbmNlUGFnZUxvYWQsXG4gICAgICB0aGlzLl9zdHJlYW1JZFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG9uQ29udGludWF0aW9uKGV2ZW50LCB2aWRlbyk6IHZvaWQge1xuICAgIGlmICghdmlkZW8uYnVmZmVyZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBidWZmZXJMZW5ndGggPSB2aWRlby5idWZmZXJlZC5sZW5ndGg7XG4gICAgY29uc3QgaGFzTm90UHJvZ3Jlc3NlZFNpbmNlTGFzdFByb2dyZXNzRXZlbnQgPSBldmVudC50eXBlID09PSAncGxheWluZydcbiAgICB8fCBidWZmZXJMZW5ndGggPiAwID8gKGV2ZW50LnR5cGUgPT09ICdwcm9ncmVzcydcbiAgICAgIHx8IGV2ZW50LnR5cGUgPT09ICd0aW1ldXBkYXRlJylcbiAgICAgICYmIHZpZGVvLmJ1ZmZlcmVkLmVuZChidWZmZXJMZW5ndGggLSAxKSA9PT0gdGhpcy5fbGFzdFByb2dyZXNzIDogdHJ1ZTtcblxuICAgIGlmICghdGhpcy5fdmlkZW9TdGFsbGVkIHx8IGhhc05vdFByb2dyZXNzZWRTaW5jZUxhc3RQcm9ncmVzc0V2ZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09ICdwcm9ncmVzcycpIHtcbiAgICAgIHRoaXMuX2xhc3RQcm9ncmVzcyA9IHZpZGVvLmJ1ZmZlcmVkLmVuZChidWZmZXJMZW5ndGggLSAxKTtcbiAgICB9XG5cbiAgICBjb25zdCB0aW1lU2luY2VTdG9wID0gRGF0ZS5ub3coKSAtIHRoaXMuX3ZpZGVvU3RhbGxlZDtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuQnVmZmVyaW5nLFxuICAgICAgcnVudGltZTogKERhdGUubm93KCkgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7dWludDY0OiB0aW1lU2luY2VTdG9wfSxcbiAgICAgIHN0cmVhbUlkOiB0aGlzLl9zdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBbJXNdIFtidWZmZXJpbmddIFN0cmVhbSBoYXMgcmVjb3ZlcmVkIGZyb20gc3RhbGwgYWZ0ZXIgWyVzXScsXG4gICAgICB0aGlzLmR1cmF0aW9uU2luY2VQYWdlTG9hZCxcbiAgICAgIHRoaXMuX3N0cmVhbUlkLFxuICAgICAgbmV3IER1cmF0aW9ucyh0aW1lU2luY2VTdG9wKS50b0lzb1N0cmluZygpXG4gICAgKTtcbiAgICB0aGlzLl92aWRlb1N0YWxsZWQgPSBudWxsO1xuICB9XG5cbiAgb25WaWRlb1Jlc29sdXRpb25DaGFuZ2VzKG5ld1Jlc29sdXRpb246IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuUmVzb2x1dGlvbkNoYW5nZWQsXG4gICAgICBydW50aW1lOiAoRGF0ZS5ub3coKSAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHtzdHJpbmc6IG5ld1Jlc29sdXRpb259LFxuICAgICAgcHJldmlvdXNWYWx1ZTogdGhpcy5fdmlkZW9SZXNvbHV0aW9uID8ge3N0cmluZzogdGhpcy5fdmlkZW9SZXNvbHV0aW9ufSA6IHVuZGVmaW5lZCxcbiAgICAgIHN0cmVhbUlkOiB0aGlzLl9zdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fdmlkZW9SZXNvbHV0aW9uID0gbmV3UmVzb2x1dGlvbjtcbiAgfVxufSIsInZhciBnbG9iYWwgPVxuICAodHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnICYmIGdsb2JhbFRoaXMpIHx8XG4gICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgJiYgc2VsZikgfHxcbiAgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnICYmIGdsb2JhbClcblxudmFyIHN1cHBvcnQgPSB7XG4gIHNlYXJjaFBhcmFtczogJ1VSTFNlYXJjaFBhcmFtcycgaW4gZ2xvYmFsLFxuICBpdGVyYWJsZTogJ1N5bWJvbCcgaW4gZ2xvYmFsICYmICdpdGVyYXRvcicgaW4gU3ltYm9sLFxuICBibG9iOlxuICAgICdGaWxlUmVhZGVyJyBpbiBnbG9iYWwgJiZcbiAgICAnQmxvYicgaW4gZ2xvYmFsICYmXG4gICAgKGZ1bmN0aW9uKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbmV3IEJsb2IoKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9KSgpLFxuICBmb3JtRGF0YTogJ0Zvcm1EYXRhJyBpbiBnbG9iYWwsXG4gIGFycmF5QnVmZmVyOiAnQXJyYXlCdWZmZXInIGluIGdsb2JhbFxufVxuXG5mdW5jdGlvbiBpc0RhdGFWaWV3KG9iaikge1xuICByZXR1cm4gb2JqICYmIERhdGFWaWV3LnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKG9iailcbn1cblxuaWYgKHN1cHBvcnQuYXJyYXlCdWZmZXIpIHtcbiAgdmFyIHZpZXdDbGFzc2VzID0gW1xuICAgICdbb2JqZWN0IEludDhBcnJheV0nLFxuICAgICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcbiAgICAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nLFxuICAgICdbb2JqZWN0IEludDE2QXJyYXldJyxcbiAgICAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgICdbb2JqZWN0IEludDMyQXJyYXldJyxcbiAgICAnW29iamVjdCBVaW50MzJBcnJheV0nLFxuICAgICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nXG4gIF1cblxuICB2YXIgaXNBcnJheUJ1ZmZlclZpZXcgPVxuICAgIEFycmF5QnVmZmVyLmlzVmlldyB8fFxuICAgIGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIG9iaiAmJiB2aWV3Q2xhc3Nlcy5pbmRleE9mKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopKSA+IC0xXG4gICAgfVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVOYW1lKG5hbWUpIHtcbiAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykge1xuICAgIG5hbWUgPSBTdHJpbmcobmFtZSlcbiAgfVxuICBpZiAoL1teYS16MC05XFwtIyQlJicqKy5eX2B8fiFdL2kudGVzdChuYW1lKSB8fCBuYW1lID09PSAnJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgY2hhcmFjdGVyIGluIGhlYWRlciBmaWVsZCBuYW1lOiBcIicgKyBuYW1lICsgJ1wiJylcbiAgfVxuICByZXR1cm4gbmFtZS50b0xvd2VyQ2FzZSgpXG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVZhbHVlKHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgdmFsdWUgPSBTdHJpbmcodmFsdWUpXG4gIH1cbiAgcmV0dXJuIHZhbHVlXG59XG5cbi8vIEJ1aWxkIGEgZGVzdHJ1Y3RpdmUgaXRlcmF0b3IgZm9yIHRoZSB2YWx1ZSBsaXN0XG5mdW5jdGlvbiBpdGVyYXRvckZvcihpdGVtcykge1xuICB2YXIgaXRlcmF0b3IgPSB7XG4gICAgbmV4dDogZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgdmFsdWUgPSBpdGVtcy5zaGlmdCgpXG4gICAgICByZXR1cm4ge2RvbmU6IHZhbHVlID09PSB1bmRlZmluZWQsIHZhbHVlOiB2YWx1ZX1cbiAgICB9XG4gIH1cblxuICBpZiAoc3VwcG9ydC5pdGVyYWJsZSkge1xuICAgIGl0ZXJhdG9yW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBpdGVyYXRvclxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpdGVyYXRvclxufVxuXG5leHBvcnQgZnVuY3Rpb24gSGVhZGVycyhoZWFkZXJzKSB7XG4gIHRoaXMubWFwID0ge31cblxuICBpZiAoaGVhZGVycyBpbnN0YW5jZW9mIEhlYWRlcnMpIHtcbiAgICBoZWFkZXJzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICAgIHRoaXMuYXBwZW5kKG5hbWUsIHZhbHVlKVxuICAgIH0sIHRoaXMpXG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShoZWFkZXJzKSkge1xuICAgIGhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbihoZWFkZXIpIHtcbiAgICAgIHRoaXMuYXBwZW5kKGhlYWRlclswXSwgaGVhZGVyWzFdKVxuICAgIH0sIHRoaXMpXG4gIH0gZWxzZSBpZiAoaGVhZGVycykge1xuICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGhlYWRlcnMpLmZvckVhY2goZnVuY3Rpb24obmFtZSkge1xuICAgICAgdGhpcy5hcHBlbmQobmFtZSwgaGVhZGVyc1tuYW1lXSlcbiAgICB9LCB0aGlzKVxuICB9XG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIG5hbWUgPSBub3JtYWxpemVOYW1lKG5hbWUpXG4gIHZhbHVlID0gbm9ybWFsaXplVmFsdWUodmFsdWUpXG4gIHZhciBvbGRWYWx1ZSA9IHRoaXMubWFwW25hbWVdXG4gIHRoaXMubWFwW25hbWVdID0gb2xkVmFsdWUgPyBvbGRWYWx1ZSArICcsICcgKyB2YWx1ZSA6IHZhbHVlXG59XG5cbkhlYWRlcnMucHJvdG90eXBlWydkZWxldGUnXSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgZGVsZXRlIHRoaXMubWFwW25vcm1hbGl6ZU5hbWUobmFtZSldXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgbmFtZSA9IG5vcm1hbGl6ZU5hbWUobmFtZSlcbiAgcmV0dXJuIHRoaXMuaGFzKG5hbWUpID8gdGhpcy5tYXBbbmFtZV0gOiBudWxsXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgcmV0dXJuIHRoaXMubWFwLmhhc093blByb3BlcnR5KG5vcm1hbGl6ZU5hbWUobmFtZSkpXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHRoaXMubWFwW25vcm1hbGl6ZU5hbWUobmFtZSldID0gbm9ybWFsaXplVmFsdWUodmFsdWUpXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbihjYWxsYmFjaywgdGhpc0FyZykge1xuICBmb3IgKHZhciBuYW1lIGluIHRoaXMubWFwKSB7XG4gICAgaWYgKHRoaXMubWFwLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICBjYWxsYmFjay5jYWxsKHRoaXNBcmcsIHRoaXMubWFwW25hbWVdLCBuYW1lLCB0aGlzKVxuICAgIH1cbiAgfVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5rZXlzID0gZnVuY3Rpb24oKSB7XG4gIHZhciBpdGVtcyA9IFtdXG4gIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgIGl0ZW1zLnB1c2gobmFtZSlcbiAgfSlcbiAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS52YWx1ZXMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGl0ZW1zID0gW11cbiAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgaXRlbXMucHVzaCh2YWx1ZSlcbiAgfSlcbiAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5lbnRyaWVzID0gZnVuY3Rpb24oKSB7XG4gIHZhciBpdGVtcyA9IFtdXG4gIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgIGl0ZW1zLnB1c2goW25hbWUsIHZhbHVlXSlcbiAgfSlcbiAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxufVxuXG5pZiAoc3VwcG9ydC5pdGVyYWJsZSkge1xuICBIZWFkZXJzLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdID0gSGVhZGVycy5wcm90b3R5cGUuZW50cmllc1xufVxuXG5mdW5jdGlvbiBjb25zdW1lZChib2R5KSB7XG4gIGlmIChib2R5LmJvZHlVc2VkKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoJ0FscmVhZHkgcmVhZCcpKVxuICB9XG4gIGJvZHkuYm9keVVzZWQgPSB0cnVlXG59XG5cbmZ1bmN0aW9uIGZpbGVSZWFkZXJSZWFkeShyZWFkZXIpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJlc29sdmUocmVhZGVyLnJlc3VsdClcbiAgICB9XG4gICAgcmVhZGVyLm9uZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJlamVjdChyZWFkZXIuZXJyb3IpXG4gICAgfVxuICB9KVxufVxuXG5mdW5jdGlvbiByZWFkQmxvYkFzQXJyYXlCdWZmZXIoYmxvYikge1xuICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKVxuICB2YXIgcHJvbWlzZSA9IGZpbGVSZWFkZXJSZWFkeShyZWFkZXIpXG4gIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihibG9iKVxuICByZXR1cm4gcHJvbWlzZVxufVxuXG5mdW5jdGlvbiByZWFkQmxvYkFzVGV4dChibG9iKSB7XG4gIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpXG4gIHZhciBwcm9taXNlID0gZmlsZVJlYWRlclJlYWR5KHJlYWRlcilcbiAgcmVhZGVyLnJlYWRBc1RleHQoYmxvYilcbiAgcmV0dXJuIHByb21pc2Vcbn1cblxuZnVuY3Rpb24gcmVhZEFycmF5QnVmZmVyQXNUZXh0KGJ1Zikge1xuICB2YXIgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1ZilcbiAgdmFyIGNoYXJzID0gbmV3IEFycmF5KHZpZXcubGVuZ3RoKVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdmlldy5sZW5ndGg7IGkrKykge1xuICAgIGNoYXJzW2ldID0gU3RyaW5nLmZyb21DaGFyQ29kZSh2aWV3W2ldKVxuICB9XG4gIHJldHVybiBjaGFycy5qb2luKCcnKVxufVxuXG5mdW5jdGlvbiBidWZmZXJDbG9uZShidWYpIHtcbiAgaWYgKGJ1Zi5zbGljZSkge1xuICAgIHJldHVybiBidWYuc2xpY2UoMClcbiAgfSBlbHNlIHtcbiAgICB2YXIgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1Zi5ieXRlTGVuZ3RoKVxuICAgIHZpZXcuc2V0KG5ldyBVaW50OEFycmF5KGJ1ZikpXG4gICAgcmV0dXJuIHZpZXcuYnVmZmVyXG4gIH1cbn1cblxuZnVuY3Rpb24gQm9keSgpIHtcbiAgdGhpcy5ib2R5VXNlZCA9IGZhbHNlXG5cbiAgdGhpcy5faW5pdEJvZHkgPSBmdW5jdGlvbihib2R5KSB7XG4gICAgLypcbiAgICAgIGZldGNoLW1vY2sgd3JhcHMgdGhlIFJlc3BvbnNlIG9iamVjdCBpbiBhbiBFUzYgUHJveHkgdG9cbiAgICAgIHByb3ZpZGUgdXNlZnVsIHRlc3QgaGFybmVzcyBmZWF0dXJlcyBzdWNoIGFzIGZsdXNoLiBIb3dldmVyLCBvblxuICAgICAgRVM1IGJyb3dzZXJzIHdpdGhvdXQgZmV0Y2ggb3IgUHJveHkgc3VwcG9ydCBwb2xseWZpbGxzIG11c3QgYmUgdXNlZDtcbiAgICAgIHRoZSBwcm94eS1wb2xseWZpbGwgaXMgdW5hYmxlIHRvIHByb3h5IGFuIGF0dHJpYnV0ZSB1bmxlc3MgaXQgZXhpc3RzXG4gICAgICBvbiB0aGUgb2JqZWN0IGJlZm9yZSB0aGUgUHJveHkgaXMgY3JlYXRlZC4gVGhpcyBjaGFuZ2UgZW5zdXJlc1xuICAgICAgUmVzcG9uc2UuYm9keVVzZWQgZXhpc3RzIG9uIHRoZSBpbnN0YW5jZSwgd2hpbGUgbWFpbnRhaW5pbmcgdGhlXG4gICAgICBzZW1hbnRpYyBvZiBzZXR0aW5nIFJlcXVlc3QuYm9keVVzZWQgaW4gdGhlIGNvbnN0cnVjdG9yIGJlZm9yZVxuICAgICAgX2luaXRCb2R5IGlzIGNhbGxlZC5cbiAgICAqL1xuICAgIHRoaXMuYm9keVVzZWQgPSB0aGlzLmJvZHlVc2VkXG4gICAgdGhpcy5fYm9keUluaXQgPSBib2R5XG4gICAgaWYgKCFib2R5KSB7XG4gICAgICB0aGlzLl9ib2R5VGV4dCA9ICcnXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMuX2JvZHlUZXh0ID0gYm9keVxuICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5ibG9iICYmIEJsb2IucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgIHRoaXMuX2JvZHlCbG9iID0gYm9keVxuICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5mb3JtRGF0YSAmJiBGb3JtRGF0YS5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgdGhpcy5fYm9keUZvcm1EYXRhID0gYm9keVxuICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5zZWFyY2hQYXJhbXMgJiYgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICB0aGlzLl9ib2R5VGV4dCA9IGJvZHkudG9TdHJpbmcoKVxuICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5hcnJheUJ1ZmZlciAmJiBzdXBwb3J0LmJsb2IgJiYgaXNEYXRhVmlldyhib2R5KSkge1xuICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyID0gYnVmZmVyQ2xvbmUoYm9keS5idWZmZXIpXG4gICAgICAvLyBJRSAxMC0xMSBjYW4ndCBoYW5kbGUgYSBEYXRhVmlldyBib2R5LlxuICAgICAgdGhpcy5fYm9keUluaXQgPSBuZXcgQmxvYihbdGhpcy5fYm9keUFycmF5QnVmZmVyXSlcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYXJyYXlCdWZmZXIgJiYgKEFycmF5QnVmZmVyLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpIHx8IGlzQXJyYXlCdWZmZXJWaWV3KGJvZHkpKSkge1xuICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyID0gYnVmZmVyQ2xvbmUoYm9keSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fYm9keVRleHQgPSBib2R5ID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGJvZHkpXG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKSkge1xuICAgICAgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLmhlYWRlcnMuc2V0KCdjb250ZW50LXR5cGUnLCAndGV4dC9wbGFpbjtjaGFyc2V0PVVURi04JylcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUJsb2IgJiYgdGhpcy5fYm9keUJsb2IudHlwZSkge1xuICAgICAgICB0aGlzLmhlYWRlcnMuc2V0KCdjb250ZW50LXR5cGUnLCB0aGlzLl9ib2R5QmxvYi50eXBlKVxuICAgICAgfSBlbHNlIGlmIChzdXBwb3J0LnNlYXJjaFBhcmFtcyAmJiBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04JylcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoc3VwcG9ydC5ibG9iKSB7XG4gICAgdGhpcy5ibG9iID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgcmVqZWN0ZWQgPSBjb25zdW1lZCh0aGlzKVxuICAgICAgaWYgKHJlamVjdGVkKSB7XG4gICAgICAgIHJldHVybiByZWplY3RlZFxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fYm9keUJsb2IpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5QmxvYilcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IEJsb2IoW3RoaXMuX2JvZHlBcnJheUJ1ZmZlcl0pKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5Rm9ybURhdGEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgcmVhZCBGb3JtRGF0YSBib2R5IGFzIGJsb2InKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQmxvYihbdGhpcy5fYm9keVRleHRdKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmFycmF5QnVmZmVyID0gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7XG4gICAgICAgIHZhciBpc0NvbnN1bWVkID0gY29uc3VtZWQodGhpcylcbiAgICAgICAgaWYgKGlzQ29uc3VtZWQpIHtcbiAgICAgICAgICByZXR1cm4gaXNDb25zdW1lZFxuICAgICAgICB9XG4gICAgICAgIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcodGhpcy5fYm9keUFycmF5QnVmZmVyKSkge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoXG4gICAgICAgICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIuYnVmZmVyLnNsaWNlKFxuICAgICAgICAgICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIuYnl0ZU9mZnNldCxcbiAgICAgICAgICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyLmJ5dGVPZmZzZXQgKyB0aGlzLl9ib2R5QXJyYXlCdWZmZXIuYnl0ZUxlbmd0aFxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcilcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmxvYigpLnRoZW4ocmVhZEJsb2JBc0FycmF5QnVmZmVyKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHRoaXMudGV4dCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByZWplY3RlZCA9IGNvbnN1bWVkKHRoaXMpXG4gICAgaWYgKHJlamVjdGVkKSB7XG4gICAgICByZXR1cm4gcmVqZWN0ZWRcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fYm9keUJsb2IpIHtcbiAgICAgIHJldHVybiByZWFkQmxvYkFzVGV4dCh0aGlzLl9ib2R5QmxvYilcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZWFkQXJyYXlCdWZmZXJBc1RleHQodGhpcy5fYm9keUFycmF5QnVmZmVyKSlcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlGb3JtRGF0YSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgcmVhZCBGb3JtRGF0YSBib2R5IGFzIHRleHQnKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlUZXh0KVxuICAgIH1cbiAgfVxuXG4gIGlmIChzdXBwb3J0LmZvcm1EYXRhKSB7XG4gICAgdGhpcy5mb3JtRGF0YSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oZGVjb2RlKVxuICAgIH1cbiAgfVxuXG4gIHRoaXMuanNvbiA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnRleHQoKS50aGVuKEpTT04ucGFyc2UpXG4gIH1cblxuICByZXR1cm4gdGhpc1xufVxuXG4vLyBIVFRQIG1ldGhvZHMgd2hvc2UgY2FwaXRhbGl6YXRpb24gc2hvdWxkIGJlIG5vcm1hbGl6ZWRcbnZhciBtZXRob2RzID0gWydERUxFVEUnLCAnR0VUJywgJ0hFQUQnLCAnT1BUSU9OUycsICdQT1NUJywgJ1BVVCddXG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZU1ldGhvZChtZXRob2QpIHtcbiAgdmFyIHVwY2FzZWQgPSBtZXRob2QudG9VcHBlckNhc2UoKVxuICByZXR1cm4gbWV0aG9kcy5pbmRleE9mKHVwY2FzZWQpID4gLTEgPyB1cGNhc2VkIDogbWV0aG9kXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBSZXF1ZXN0KGlucHV0LCBvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBSZXF1ZXN0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1BsZWFzZSB1c2UgdGhlIFwibmV3XCIgb3BlcmF0b3IsIHRoaXMgRE9NIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uJylcbiAgfVxuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9XG4gIHZhciBib2R5ID0gb3B0aW9ucy5ib2R5XG5cbiAgaWYgKGlucHV0IGluc3RhbmNlb2YgUmVxdWVzdCkge1xuICAgIGlmIChpbnB1dC5ib2R5VXNlZCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQWxyZWFkeSByZWFkJylcbiAgICB9XG4gICAgdGhpcy51cmwgPSBpbnB1dC51cmxcbiAgICB0aGlzLmNyZWRlbnRpYWxzID0gaW5wdXQuY3JlZGVudGlhbHNcbiAgICBpZiAoIW9wdGlvbnMuaGVhZGVycykge1xuICAgICAgdGhpcy5oZWFkZXJzID0gbmV3IEhlYWRlcnMoaW5wdXQuaGVhZGVycylcbiAgICB9XG4gICAgdGhpcy5tZXRob2QgPSBpbnB1dC5tZXRob2RcbiAgICB0aGlzLm1vZGUgPSBpbnB1dC5tb2RlXG4gICAgdGhpcy5zaWduYWwgPSBpbnB1dC5zaWduYWxcbiAgICBpZiAoIWJvZHkgJiYgaW5wdXQuX2JvZHlJbml0ICE9IG51bGwpIHtcbiAgICAgIGJvZHkgPSBpbnB1dC5fYm9keUluaXRcbiAgICAgIGlucHV0LmJvZHlVc2VkID0gdHJ1ZVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aGlzLnVybCA9IFN0cmluZyhpbnB1dClcbiAgfVxuXG4gIHRoaXMuY3JlZGVudGlhbHMgPSBvcHRpb25zLmNyZWRlbnRpYWxzIHx8IHRoaXMuY3JlZGVudGlhbHMgfHwgJ3NhbWUtb3JpZ2luJ1xuICBpZiAob3B0aW9ucy5oZWFkZXJzIHx8ICF0aGlzLmhlYWRlcnMpIHtcbiAgICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhvcHRpb25zLmhlYWRlcnMpXG4gIH1cbiAgdGhpcy5tZXRob2QgPSBub3JtYWxpemVNZXRob2Qob3B0aW9ucy5tZXRob2QgfHwgdGhpcy5tZXRob2QgfHwgJ0dFVCcpXG4gIHRoaXMubW9kZSA9IG9wdGlvbnMubW9kZSB8fCB0aGlzLm1vZGUgfHwgbnVsbFxuICB0aGlzLnNpZ25hbCA9IG9wdGlvbnMuc2lnbmFsIHx8IHRoaXMuc2lnbmFsXG4gIHRoaXMucmVmZXJyZXIgPSBudWxsXG5cbiAgaWYgKCh0aGlzLm1ldGhvZCA9PT0gJ0dFVCcgfHwgdGhpcy5tZXRob2QgPT09ICdIRUFEJykgJiYgYm9keSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0JvZHkgbm90IGFsbG93ZWQgZm9yIEdFVCBvciBIRUFEIHJlcXVlc3RzJylcbiAgfVxuICB0aGlzLl9pbml0Qm9keShib2R5KVxuXG4gIGlmICh0aGlzLm1ldGhvZCA9PT0gJ0dFVCcgfHwgdGhpcy5tZXRob2QgPT09ICdIRUFEJykge1xuICAgIGlmIChvcHRpb25zLmNhY2hlID09PSAnbm8tc3RvcmUnIHx8IG9wdGlvbnMuY2FjaGUgPT09ICduby1jYWNoZScpIHtcbiAgICAgIC8vIFNlYXJjaCBmb3IgYSAnXycgcGFyYW1ldGVyIGluIHRoZSBxdWVyeSBzdHJpbmdcbiAgICAgIHZhciByZVBhcmFtU2VhcmNoID0gLyhbPyZdKV89W14mXSovXG4gICAgICBpZiAocmVQYXJhbVNlYXJjaC50ZXN0KHRoaXMudXJsKSkge1xuICAgICAgICAvLyBJZiBpdCBhbHJlYWR5IGV4aXN0cyB0aGVuIHNldCB0aGUgdmFsdWUgd2l0aCB0aGUgY3VycmVudCB0aW1lXG4gICAgICAgIHRoaXMudXJsID0gdGhpcy51cmwucmVwbGFjZShyZVBhcmFtU2VhcmNoLCAnJDFfPScgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE90aGVyd2lzZSBhZGQgYSBuZXcgJ18nIHBhcmFtZXRlciB0byB0aGUgZW5kIHdpdGggdGhlIGN1cnJlbnQgdGltZVxuICAgICAgICB2YXIgcmVRdWVyeVN0cmluZyA9IC9cXD8vXG4gICAgICAgIHRoaXMudXJsICs9IChyZVF1ZXJ5U3RyaW5nLnRlc3QodGhpcy51cmwpID8gJyYnIDogJz8nKSArICdfPScgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5SZXF1ZXN0LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFJlcXVlc3QodGhpcywge2JvZHk6IHRoaXMuX2JvZHlJbml0fSlcbn1cblxuZnVuY3Rpb24gZGVjb2RlKGJvZHkpIHtcbiAgdmFyIGZvcm0gPSBuZXcgRm9ybURhdGEoKVxuICBib2R5XG4gICAgLnRyaW0oKVxuICAgIC5zcGxpdCgnJicpXG4gICAgLmZvckVhY2goZnVuY3Rpb24oYnl0ZXMpIHtcbiAgICAgIGlmIChieXRlcykge1xuICAgICAgICB2YXIgc3BsaXQgPSBieXRlcy5zcGxpdCgnPScpXG4gICAgICAgIHZhciBuYW1lID0gc3BsaXQuc2hpZnQoKS5yZXBsYWNlKC9cXCsvZywgJyAnKVxuICAgICAgICB2YXIgdmFsdWUgPSBzcGxpdC5qb2luKCc9JykucmVwbGFjZSgvXFwrL2csICcgJylcbiAgICAgICAgZm9ybS5hcHBlbmQoZGVjb2RlVVJJQ29tcG9uZW50KG5hbWUpLCBkZWNvZGVVUklDb21wb25lbnQodmFsdWUpKVxuICAgICAgfVxuICAgIH0pXG4gIHJldHVybiBmb3JtXG59XG5cbmZ1bmN0aW9uIHBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKSB7XG4gIHZhciBoZWFkZXJzID0gbmV3IEhlYWRlcnMoKVxuICAvLyBSZXBsYWNlIGluc3RhbmNlcyBvZiBcXHJcXG4gYW5kIFxcbiBmb2xsb3dlZCBieSBhdCBsZWFzdCBvbmUgc3BhY2Ugb3IgaG9yaXpvbnRhbCB0YWIgd2l0aCBhIHNwYWNlXG4gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4yXG4gIHZhciBwcmVQcm9jZXNzZWRIZWFkZXJzID0gcmF3SGVhZGVycy5yZXBsYWNlKC9cXHI/XFxuW1xcdCBdKy9nLCAnICcpXG4gIC8vIEF2b2lkaW5nIHNwbGl0IHZpYSByZWdleCB0byB3b3JrIGFyb3VuZCBhIGNvbW1vbiBJRTExIGJ1ZyB3aXRoIHRoZSBjb3JlLWpzIDMuNi4wIHJlZ2V4IHBvbHlmaWxsXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9naXRodWIvZmV0Y2gvaXNzdWVzLzc0OFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNzUxXG4gIHByZVByb2Nlc3NlZEhlYWRlcnNcbiAgICAuc3BsaXQoJ1xccicpXG4gICAgLm1hcChmdW5jdGlvbihoZWFkZXIpIHtcbiAgICAgIHJldHVybiBoZWFkZXIuaW5kZXhPZignXFxuJykgPT09IDAgPyBoZWFkZXIuc3Vic3RyKDEsIGhlYWRlci5sZW5ndGgpIDogaGVhZGVyXG4gICAgfSlcbiAgICAuZm9yRWFjaChmdW5jdGlvbihsaW5lKSB7XG4gICAgICB2YXIgcGFydHMgPSBsaW5lLnNwbGl0KCc6JylcbiAgICAgIHZhciBrZXkgPSBwYXJ0cy5zaGlmdCgpLnRyaW0oKVxuICAgICAgaWYgKGtleSkge1xuICAgICAgICB2YXIgdmFsdWUgPSBwYXJ0cy5qb2luKCc6JykudHJpbSgpXG4gICAgICAgIGhlYWRlcnMuYXBwZW5kKGtleSwgdmFsdWUpXG4gICAgICB9XG4gICAgfSlcbiAgcmV0dXJuIGhlYWRlcnNcbn1cblxuQm9keS5jYWxsKFJlcXVlc3QucHJvdG90eXBlKVxuXG5leHBvcnQgZnVuY3Rpb24gUmVzcG9uc2UoYm9keUluaXQsIG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlc3BvbnNlKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1BsZWFzZSB1c2UgdGhlIFwibmV3XCIgb3BlcmF0b3IsIHRoaXMgRE9NIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uJylcbiAgfVxuICBpZiAoIW9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0ge31cbiAgfVxuXG4gIHRoaXMudHlwZSA9ICdkZWZhdWx0J1xuICB0aGlzLnN0YXR1cyA9IG9wdGlvbnMuc3RhdHVzID09PSB1bmRlZmluZWQgPyAyMDAgOiBvcHRpb25zLnN0YXR1c1xuICB0aGlzLm9rID0gdGhpcy5zdGF0dXMgPj0gMjAwICYmIHRoaXMuc3RhdHVzIDwgMzAwXG4gIHRoaXMuc3RhdHVzVGV4dCA9IG9wdGlvbnMuc3RhdHVzVGV4dCA9PT0gdW5kZWZpbmVkID8gJycgOiAnJyArIG9wdGlvbnMuc3RhdHVzVGV4dFxuICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhvcHRpb25zLmhlYWRlcnMpXG4gIHRoaXMudXJsID0gb3B0aW9ucy51cmwgfHwgJydcbiAgdGhpcy5faW5pdEJvZHkoYm9keUluaXQpXG59XG5cbkJvZHkuY2FsbChSZXNwb25zZS5wcm90b3R5cGUpXG5cblJlc3BvbnNlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFJlc3BvbnNlKHRoaXMuX2JvZHlJbml0LCB7XG4gICAgc3RhdHVzOiB0aGlzLnN0YXR1cyxcbiAgICBzdGF0dXNUZXh0OiB0aGlzLnN0YXR1c1RleHQsXG4gICAgaGVhZGVyczogbmV3IEhlYWRlcnModGhpcy5oZWFkZXJzKSxcbiAgICB1cmw6IHRoaXMudXJsXG4gIH0pXG59XG5cblJlc3BvbnNlLmVycm9yID0gZnVuY3Rpb24oKSB7XG4gIHZhciByZXNwb25zZSA9IG5ldyBSZXNwb25zZShudWxsLCB7c3RhdHVzOiAwLCBzdGF0dXNUZXh0OiAnJ30pXG4gIHJlc3BvbnNlLnR5cGUgPSAnZXJyb3InXG4gIHJldHVybiByZXNwb25zZVxufVxuXG52YXIgcmVkaXJlY3RTdGF0dXNlcyA9IFszMDEsIDMwMiwgMzAzLCAzMDcsIDMwOF1cblxuUmVzcG9uc2UucmVkaXJlY3QgPSBmdW5jdGlvbih1cmwsIHN0YXR1cykge1xuICBpZiAocmVkaXJlY3RTdGF0dXNlcy5pbmRleE9mKHN0YXR1cykgPT09IC0xKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgc3RhdHVzIGNvZGUnKVxuICB9XG5cbiAgcmV0dXJuIG5ldyBSZXNwb25zZShudWxsLCB7c3RhdHVzOiBzdGF0dXMsIGhlYWRlcnM6IHtsb2NhdGlvbjogdXJsfX0pXG59XG5cbmV4cG9ydCB2YXIgRE9NRXhjZXB0aW9uID0gZ2xvYmFsLkRPTUV4Y2VwdGlvblxudHJ5IHtcbiAgbmV3IERPTUV4Y2VwdGlvbigpXG59IGNhdGNoIChlcnIpIHtcbiAgRE9NRXhjZXB0aW9uID0gZnVuY3Rpb24obWVzc2FnZSwgbmFtZSkge1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2VcbiAgICB0aGlzLm5hbWUgPSBuYW1lXG4gICAgdmFyIGVycm9yID0gRXJyb3IobWVzc2FnZSlcbiAgICB0aGlzLnN0YWNrID0gZXJyb3Iuc3RhY2tcbiAgfVxuICBET01FeGNlcHRpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpXG4gIERPTUV4Y2VwdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBET01FeGNlcHRpb25cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZldGNoKGlucHV0LCBpbml0KSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICB2YXIgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KGlucHV0LCBpbml0KVxuXG4gICAgaWYgKHJlcXVlc3Quc2lnbmFsICYmIHJlcXVlc3Quc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgIHJldHVybiByZWplY3QobmV3IERPTUV4Y2VwdGlvbignQWJvcnRlZCcsICdBYm9ydEVycm9yJykpXG4gICAgfVxuXG4gICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpXG5cbiAgICBmdW5jdGlvbiBhYm9ydFhocigpIHtcbiAgICAgIHhoci5hYm9ydCgpXG4gICAgfVxuXG4gICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICAgIHN0YXR1czogeGhyLnN0YXR1cyxcbiAgICAgICAgc3RhdHVzVGV4dDogeGhyLnN0YXR1c1RleHQsXG4gICAgICAgIGhlYWRlcnM6IHBhcnNlSGVhZGVycyh4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkgfHwgJycpXG4gICAgICB9XG4gICAgICBvcHRpb25zLnVybCA9ICdyZXNwb25zZVVSTCcgaW4geGhyID8geGhyLnJlc3BvbnNlVVJMIDogb3B0aW9ucy5oZWFkZXJzLmdldCgnWC1SZXF1ZXN0LVVSTCcpXG4gICAgICB2YXIgYm9keSA9ICdyZXNwb25zZScgaW4geGhyID8geGhyLnJlc3BvbnNlIDogeGhyLnJlc3BvbnNlVGV4dFxuICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgcmVzb2x2ZShuZXcgUmVzcG9uc2UoYm9keSwgb3B0aW9ucykpXG4gICAgICB9LCAwKVxuICAgIH1cblxuICAgIHhoci5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICByZWplY3QobmV3IFR5cGVFcnJvcignTmV0d29yayByZXF1ZXN0IGZhaWxlZCcpKVxuICAgICAgfSwgMClcbiAgICB9XG5cbiAgICB4aHIub250aW1lb3V0ID0gZnVuY3Rpb24oKSB7XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICByZWplY3QobmV3IFR5cGVFcnJvcignTmV0d29yayByZXF1ZXN0IGZhaWxlZCcpKVxuICAgICAgfSwgMClcbiAgICB9XG5cbiAgICB4aHIub25hYm9ydCA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBET01FeGNlcHRpb24oJ0Fib3J0ZWQnLCAnQWJvcnRFcnJvcicpKVxuICAgICAgfSwgMClcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmaXhVcmwodXJsKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdXJsID09PSAnJyAmJiBnbG9iYWwubG9jYXRpb24uaHJlZiA/IGdsb2JhbC5sb2NhdGlvbi5ocmVmIDogdXJsXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiB1cmxcbiAgICAgIH1cbiAgICB9XG5cbiAgICB4aHIub3BlbihyZXF1ZXN0Lm1ldGhvZCwgZml4VXJsKHJlcXVlc3QudXJsKSwgdHJ1ZSlcblxuICAgIGlmIChyZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAnaW5jbHVkZScpIHtcbiAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSB0cnVlXG4gICAgfSBlbHNlIGlmIChyZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAnb21pdCcpIHtcbiAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSBmYWxzZVxuICAgIH1cblxuICAgIGlmICgncmVzcG9uc2VUeXBlJyBpbiB4aHIpIHtcbiAgICAgIGlmIChzdXBwb3J0LmJsb2IpIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9ICdibG9iJ1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgc3VwcG9ydC5hcnJheUJ1ZmZlciAmJlxuICAgICAgICByZXF1ZXN0LmhlYWRlcnMuZ2V0KCdDb250ZW50LVR5cGUnKSAmJlxuICAgICAgICByZXF1ZXN0LmhlYWRlcnMuZ2V0KCdDb250ZW50LVR5cGUnKS5pbmRleE9mKCdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nKSAhPT0gLTFcbiAgICAgICkge1xuICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gJ2FycmF5YnVmZmVyJ1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpbml0ICYmIHR5cGVvZiBpbml0LmhlYWRlcnMgPT09ICdvYmplY3QnICYmICEoaW5pdC5oZWFkZXJzIGluc3RhbmNlb2YgSGVhZGVycykpIHtcbiAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGluaXQuaGVhZGVycykuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7XG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKG5hbWUsIG5vcm1hbGl6ZVZhbHVlKGluaXQuaGVhZGVyc1tuYW1lXSkpXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICByZXF1ZXN0LmhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihuYW1lLCB2YWx1ZSlcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHJlcXVlc3Quc2lnbmFsKSB7XG4gICAgICByZXF1ZXN0LnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIGFib3J0WGhyKVxuXG4gICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIC8vIERPTkUgKHN1Y2Nlc3Mgb3IgZmFpbHVyZSlcbiAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09PSA0KSB7XG4gICAgICAgICAgcmVxdWVzdC5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydFhocilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHhoci5zZW5kKHR5cGVvZiByZXF1ZXN0Ll9ib2R5SW5pdCA9PT0gJ3VuZGVmaW5lZCcgPyBudWxsIDogcmVxdWVzdC5fYm9keUluaXQpXG4gIH0pXG59XG5cbmZldGNoLnBvbHlmaWxsID0gdHJ1ZVxuXG5pZiAoIWdsb2JhbC5mZXRjaCkge1xuICBnbG9iYWwuZmV0Y2ggPSBmZXRjaFxuICBnbG9iYWwuSGVhZGVycyA9IEhlYWRlcnNcbiAgZ2xvYmFsLlJlcXVlc3QgPSBSZXF1ZXN0XG4gIGdsb2JhbC5SZXNwb25zZSA9IFJlc3BvbnNlXG59XG4iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHRpZihfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdKSB7XG5cdFx0cmV0dXJuIF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0uZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcblx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG5cdFx0ZnVuY3Rpb24oKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG5cdFx0ZnVuY3Rpb24oKSB7IHJldHVybiBtb2R1bGU7IH07XG5cdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsIHsgYTogZ2V0dGVyIH0pO1xuXHRyZXR1cm4gZ2V0dGVyO1xufTsiLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBkZWZpbml0aW9uKSB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iaiwgcHJvcCkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCk7IH0iLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsIi8vIG1vZHVsZSBleHBvcnRzIG11c3QgYmUgcmV0dXJuZWQgZnJvbSBydW50aW1lIHNvIGVudHJ5IGlubGluaW5nIGlzIGRpc2FibGVkXG4vLyBzdGFydHVwXG4vLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18oXCIuL25vZGVfbW9kdWxlcy93aGF0d2ctZmV0Y2gvZmV0Y2guanNcIik7XG5yZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhcIi4vc3JjL3Nkay9jaGFubmVscy9pbmRleC50c1wiKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=
|