@microsoft/ocsdk 0.3.1-main.7086781 → 0.3.1-main.b56c728
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/dist/SDK.js +2 -2
- package/dist/SDK.min.js +1 -1
- package/lib/Common/Constants.d.ts +2 -1
- package/lib/Common/Constants.js +3 -2
- package/lib/Common/Constants.js.map +1 -1
- package/package.json +1 -1
package/dist/SDK.js
CHANGED
|
@@ -2412,7 +2412,7 @@ module.exports = g;
|
|
|
2412
2412
|
/***/ (function(module, exports, __webpack_require__) {
|
|
2413
2413
|
|
|
2414
2414
|
"use strict";
|
|
2415
|
-
var cov_1r6jlvxtwc=function(){var path="/home/runner/work/omnichannel-sdk/omnichannel-sdk/src/Common/Constants.ts",hash="
|
|
2415
|
+
var cov_1r6jlvxtwc=function(){var path="/home/runner/work/omnichannel-sdk/omnichannel-sdk/src/Common/Constants.ts",hash="da42173a970070e6cbb22589c55eb160af1f9e1f",Function=function(){}.constructor,global=new Function('return this')(),gcv="__coverage__",coverageData={path:"/home/runner/work/omnichannel-sdk/omnichannel-sdk/src/Common/Constants.ts",statementMap:{"0":{start:{line:2,column:0},end:{line:2,column:62}},"1":{start:{line:3,column:14},end:{line:3,column:32}},"2":{start:{line:4,column:31},end:{line:22,column:3}},"3":{start:{line:7,column:4},end:{line:7,column:91}},"4":{start:{line:8,column:4},end:{line:10,column:6}},"5":{start:{line:11,column:4},end:{line:14,column:6}},"6":{start:{line:15,column:4},end:{line:15,column:55}},"7":{start:{line:16,column:4},end:{line:16,column:38}},"8":{start:{line:17,column:4},end:{line:17,column:40}},"9":{start:{line:18,column:4},end:{line:18,column:63}},"10":{start:{line:19,column:4},end:{line:19,column:47}},"11":{start:{line:20,column:4},end:{line:20,column:58}},"12":{start:{line:21,column:4},end:{line:21,column:21}},"13":{start:{line:23,column:0},end:{line:23,column:28}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:4,column:31},end:{line:4,column:32}},loc:{start:{line:4,column:43},end:{line:22,column:1}},line:4},"1":{name:"Constants",decl:{start:{line:5,column:13},end:{line:5,column:22}},loc:{start:{line:5,column:25},end:{line:6,column:5}},line:5}},branchMap:{},s:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0},f:{"0":0,"1":0},b:{},inputSourceMap:{version:3,file:"/home/runner/work/omnichannel-sdk/omnichannel-sdk/src/Common/Constants.ts",sourceRoot:"",sources:["/home/runner/work/omnichannel-sdk/omnichannel-sdk/src/Common/Constants.ts"],names:[],mappings:";;AAAA,iCAAoC;AAEpC;IAAA;IAeA,CAAC;IAdwB,oDAA0C,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;IAC7E,wBAAc,GAAG;QACtC,cAAc,EAAE,kBAAkB;KACnC,CAAC;IACqB,4BAAkB,GAAG;QAC1C,eAAe,EAAE,qCAAqC;QACtD,iBAAiB,EAAE,UAAU;KAC9B,CAAC;IACqB,0BAAgB,GAAG,iBAAS,CAAC,GAAG,CAAC;IACjC,uBAAa,GAAG,OAAO,CAAC;IACxB,6BAAmB,GAAG,GAAG,CAAC;IAC1B,6BAAmB,GAAG,CAAC,wBAAwB,CAAC,CAAC;IACjD,uBAAa,GAAG,gBAAgB,CAAC;IACjC,6BAAmB,GAAG,qBAAqB,CAAC;IACrE,gBAAC;CAAA,AAfD,IAeC;kBAfoB,SAAS",sourcesContent:["import { ChannelId } from \"./Enums\";\n\nexport default class Constants {\n public static readonly requiredOmnichannelConfigurationParameters = [\"orgUrl\", \"orgId\", \"widgetId\"];\n public static readonly defaultHeaders = {\n \"Content-Type\": \"application/json\"\n };\n public static readonly bypassCacheHeaders = {\n \"Cache-Control\": \"no-store, must-revalidate, no-cache\",\n \"X-Cache-Control\": \"no-store\"\n };\n public static readonly defaultChannelId = ChannelId.LCW;\n public static readonly defaultLocale = \"en-us\";\n public static readonly noContentStatusCode = 204;\n public static readonly sensitiveProperties = [\"AuthenticatedUserToken\"];\n public static readonly transactionid = \"transaction-id\";\n public static readonly customerDisplayName = \"customerDisplayName\";\n}\n"]},_coverageSchema:"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c"},coverage=global[gcv]||(global[gcv]={});if(coverage[path]&&coverage[path].hash===hash){return coverage[path];}coverageData.hash=hash;return coverage[path]=coverageData;}();cov_1r6jlvxtwc.s[0]++;Object.defineProperty(exports,"__esModule",{value:true});var Enums_1=(cov_1r6jlvxtwc.s[1]++,__webpack_require__(/*! ./Enums */ "./src/Common/Enums.ts"));var Constants=(cov_1r6jlvxtwc.s[2]++,function(){cov_1r6jlvxtwc.f[0]++;function Constants(){cov_1r6jlvxtwc.f[1]++;}cov_1r6jlvxtwc.s[3]++;Constants.requiredOmnichannelConfigurationParameters=["orgUrl","orgId","widgetId"];cov_1r6jlvxtwc.s[4]++;Constants.defaultHeaders={"Content-Type":"application/json"};cov_1r6jlvxtwc.s[5]++;Constants.bypassCacheHeaders={"Cache-Control":"no-store, must-revalidate, no-cache","X-Cache-Control":"no-store"};cov_1r6jlvxtwc.s[6]++;Constants.defaultChannelId=Enums_1.ChannelId.LCW;cov_1r6jlvxtwc.s[7]++;Constants.defaultLocale="en-us";cov_1r6jlvxtwc.s[8]++;Constants.noContentStatusCode=204;cov_1r6jlvxtwc.s[9]++;Constants.sensitiveProperties=["AuthenticatedUserToken"];cov_1r6jlvxtwc.s[10]++;Constants.transactionid="transaction-id";cov_1r6jlvxtwc.s[11]++;Constants.customerDisplayName="customerDisplayName";cov_1r6jlvxtwc.s[12]++;return Constants;}());cov_1r6jlvxtwc.s[13]++;exports.default=Constants;
|
|
2416
2416
|
|
|
2417
2417
|
/***/ }),
|
|
2418
2418
|
|
|
@@ -2646,4 +2646,4 @@ var cov_2a1cn1sr0=function(){var path="/home/runner/work/omnichannel-sdk/omnicha
|
|
|
2646
2646
|
/***/ })
|
|
2647
2647
|
|
|
2648
2648
|
/******/ })));
|
|
2649
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYWRhcHRlcnMveGhyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYXhpb3MuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL0NhbmNlbFRva2VuLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL2lzQ2FuY2VsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9BeGlvcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvSW50ZXJjZXB0b3JNYW5hZ2VyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9idWlsZEZ1bGxQYXRoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9jcmVhdGVFcnJvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvZGlzcGF0Y2hSZXF1ZXN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9lbmhhbmNlRXJyb3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL21lcmdlQ29uZmlnLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9zZXR0bGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL3RyYW5zZm9ybURhdGEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9kZWZhdWx0cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYmluZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYnVpbGRVUkwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2NvbWJpbmVVUkxzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9jb29raWVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc0Fic29sdXRlVVJMLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc0F4aW9zRXJyb3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzVVJMU2FtZU9yaWdpbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvbm9ybWFsaXplSGVhZGVyTmFtZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvcGFyc2VIZWFkZXJzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9zcHJlYWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3ZhbGlkYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3V0aWxzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9jZXNzL2Jyb3dzZXIuanMiLCJ3ZWJwYWNrOi8vLyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvQ29tbW9uL0NvbnN0YW50cy50cyIsIndlYnBhY2s6Ly8vLi9zcmMvQ29tbW9uL0VudW1zLnRzIiwid2VicGFjazovLy8uL3NyYy9Db21tb24vRXZlbnROYW1lcy50cyIsIndlYnBhY2s6Ly8vLi9zcmMvQ29tbW9uL0xvY2FsZXMudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL0NvbW1vbi9PQ1NES0xvZ2dlci50cyIsIndlYnBhY2s6Ly8vLi9zcmMvQ29tbW9uL09tbmljaGFubmVsRW5kcG9pbnRzLnRzIiwid2VicGFjazovLy8uL3NyYy9Db21tb24vT21uaWNoYW5uZWxIVFRQSGVhZGVycy50cyIsIndlYnBhY2s6Ly8vLi9zcmMvTW9kZWwvTG9nTGV2ZWwudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL1NESy50cyIsIndlYnBhY2s6Ly8vLi9zcmMvU0RLUHJvdmlkZXIudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL1V0aWxzL0Jyb3dzZXJJbmZvLnRzIiwid2VicGFjazovLy8uL3NyYy9VdGlscy9EZXZpY2VJbmZvLnRzIiwid2VicGFjazovLy8uL3NyYy9VdGlscy9FdmVudE1hbmFnZXIudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL1V0aWxzL0xvZ2dpbmdTYW5pdGl6ZXIudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL1V0aWxzL09TSW5mby50cyIsIndlYnBhY2s6Ly8vLi9zcmMvVXRpbHMvVGVsZW1ldHJ5SGVscGVyLnRzIiwid2VicGFjazovLy8uL3NyYy9VdGlscy9UaW1lci50cyIsIndlYnBhY2s6Ly8vLi9zcmMvVXRpbHMvYXhpb3NSZXRyeS50cyIsIndlYnBhY2s6Ly8vLi9zcmMvVXRpbHMvdXVpZC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJFbnVtc18xIiwicmVxdWlyZSIsIkNvbnN0YW50cyIsInJlcXVpcmVkT21uaWNoYW5uZWxDb25maWd1cmF0aW9uUGFyYW1ldGVycyIsImRlZmF1bHRIZWFkZXJzIiwiYnlwYXNzQ2FjaGVIZWFkZXJzIiwiZGVmYXVsdENoYW5uZWxJZCIsIkNoYW5uZWxJZCIsIkxDVyIsImRlZmF1bHRMb2NhbGUiLCJub0NvbnRlbnRTdGF0dXNDb2RlIiwic2Vuc2l0aXZlUHJvcGVydGllcyIsInRyYW5zYWN0aW9uaWQiLCJjdXN0b21lckRpc3BsYXlOYW1lIiwiZGVmYXVsdCIsIkxpdmVDaGF0VmVyc2lvbiIsIk9DU0RLVGVsZW1ldHJ5RXZlbnQiLCJPcGVyYXRpbmdTeXN0ZW0iLCJEZXZpY2VUeXBlIiwiQnJvd3NlciIsIkJyb3dzZXJWZW5kb3IiLCJFdmVudE5hbWVzIiwiZ2V0IiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIkxvY2FsZXMiLCJzdXBwb3J0ZWRMb2NhbGVzIiwiVGVsZW1ldHJ5SGVscGVyXzEiLCJPQ1NES0xvZ2dlciIsImxvZ2dlciIsInByb3RvdHlwZSIsImxvZyIsImxvZ2xldmVsIiwidGVsZW1ldHJ5RXZlbnQiLCJjdXN0b21EYXRhIiwiZGVzY3JpcHRpb24iLCJpc0xvZ2dpbmdFbmFibGVkIiwibG9nRGF0YSIsIkdFVFRFTEVNRVRSWUVWRU5UREFUQSIsImxvZ0V2ZW50IiwibG9nTGV2ZWwiLCJzZXRUaW1lb3V0IiwibG9nQ2xpZW50U2RrVGVsZW1ldHJ5RXZlbnQiLCJiaW5kIiwiaXNOdWxsT3JVbmRlZmluZWQiLCJvYmoiLCJ1bmRlZmluZWQiLCJPbW5pY2hhbm5lbEVuZHBvaW50cyIsIkxpdmVDaGF0Q29uZmlnUGF0aCIsIkxpdmVDaGF0U2Vzc2lvbkluaXRQYXRoIiwiTGl2ZUNoYXRBdXRoU2Vzc2lvbkluaXRQYXRoIiwiTGl2ZUNoYXRHZXRDaGF0VG9rZW5QYXRoIiwiTGl2ZUNoYXR2MkdldENoYXRUb2tlblBhdGgiLCJMaXZlQ2hhdEF1dGhHZXRDaGF0VG9rZW5QYXRoIiwiTGl2ZUNoYXR2MkF1dGhHZXRDaGF0VG9rZW5QYXRoIiwiTGl2ZUNoYXRTZXNzaW9uQ2xvc2VQYXRoIiwiTGl2ZUNoYXRBdXRoU2Vzc2lvbkNsb3NlUGF0aCIsIkxpdmVDaGF0U3VibWl0UG9zdENoYXRQYXRoIiwiTGl2ZUNoYXRBdXRoU3VibWl0UG9zdENoYXRQYXRoIiwiTGl2ZUNoYXRHZXRTdXJ2ZXlJbnZpdGVMaW5rUGF0aCIsIkxpdmVDaGF0QXV0aEdldFN1cnZleUludml0ZUxpbmtQYXRoIiwiTGl2ZUNoYXRHZXRDaGF0VHJhbnNjcmlwdFBhdGgiLCJMaXZlQ2hhdHYyR2V0Q2hhdFRyYW5zY3JpcHRQYXRoIiwiTGl2ZUNoYXRBdXRoR2V0Q2hhdFRyYW5zY3JpcHRQYXRoIiwiTGl2ZUNoYXR2MkF1dGhHZXRDaGF0VHJhbnNjcmlwdFBhdGgiLCJMaXZlQ2hhdFRyYW5zY3JpcHRFbWFpbFJlcXVlc3RQYXRoIiwiTGl2ZUNoYXRBdXRoVHJhbnNjcmlwdEVtYWlsUmVxdWVzdFBhdGgiLCJMaXZlQ2hhdEZldGNoRGF0YU1hc2tpbmdJbmZvUGF0aCIsIkxpdmVDaGF0U2Vjb25kYXJ5Q2hhbm5lbEV2ZW50UGF0aCIsIkxpdmVDaGF0QXV0aFNlY29uZGFyeUNoYW5uZWxFdmVudFBhdGgiLCJMaXZlQ2hhdExpdmVXb3JrSXRlbURldGFpbHNQYXRoIiwiTGl2ZUNoYXRBdXRoTGl2ZVdvcmtJdGVtRGV0YWlsc1BhdGgiLCJMaXZlQ2hhdEdldFJlY29ubmVjdGFibGVDaGF0c1BhdGgiLCJMaXZlQ2hhdFJlY29ubmVjdEF2YWlsYWJpbGl0eVBhdGgiLCJMaXZlQ2hhdFZhbGlkYXRlQXV0aENoYXRNYXBSZWNvcmRQYXRoIiwiR2V0UXVldWVBdmFpbGFiaWxpdHlQYXRoIiwiU2VuZFR5cGluZ0luZGljYXRvclBhdGgiLCJPbW5pY2hhbm5lbEhUVFBIZWFkZXJzIiwiYXV0aGVudGljYXRlZFVzZXJUb2tlbiIsImF1dGhvcml6YXRpb24iLCJvcmdhbml6YXRpb25JZCIsIndpZGdldEFwcElkIiwicmVxdWVzdElkIiwiTG9nTGV2ZWwiLCJfX2Fzc2lnbiIsImFzc2lnbiIsInQiLCJzIiwiaSIsIm4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJwIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiYXBwbHkiLCJfX2F3YWl0ZXIiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsIlAiLCJnZW5lcmF0b3IiLCJhZG9wdCIsInJlc29sdmUiLCJQcm9taXNlIiwicmVqZWN0IiwiZnVsZmlsbGVkIiwic3RlcCIsIm5leHQiLCJlIiwicmVqZWN0ZWQiLCJyZXN1bHQiLCJkb25lIiwidGhlbiIsIl9fZ2VuZXJhdG9yIiwiYm9keSIsIl8iLCJsYWJlbCIsInNlbnQiLCJ0cnlzIiwib3BzIiwiZiIsInkiLCJnIiwidmVyYiIsIlN5bWJvbCIsIml0ZXJhdG9yIiwidiIsIm9wIiwiVHlwZUVycm9yIiwicG9wIiwicHVzaCIsImF4aW9zXzEiLCJCcm93c2VySW5mb18xIiwiQ29uc3RhbnRzXzEiLCJEZXZpY2VJbmZvXzEiLCJMb2NhbGVzXzEiLCJMb2dnaW5nU2FuaXRpemVyXzEiLCJMb2dMZXZlbF8xIiwiRW51bXNfMiIsIk9TSW5mb18xIiwiT21uaWNoYW5uZWxFbmRwb2ludHNfMSIsIk9tbmljaGFubmVsSFRUUEhlYWRlcnNfMSIsIlRpbWVyXzEiLCJheGlvc1JldHJ5XzEiLCJ1dWlkXzEiLCJTREsiLCJvbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24iLCJjb25maWd1cmF0aW9uIiwiZGVmYXVsdENvbmZpZ3VyYXRpb24iLCJrZXlzIiwiX2kiLCJfYSIsImtleSIsIkVycm9yIiwiY2hhbm5lbElkIiwidmFsdWVzIiwiaW5jbHVkZXMiLCJjdXJyZW50T21uaWNoYW5uZWxDb25maWd1cmF0aW9uUGFyYW1ldGVycyIsIl9iIiwiX2MiLCJsaXZlQ2hhdFZlcnNpb24iLCJWMSIsImdldENoYXRDb25maWciLCJieXBhc3NDYWNoZSIsInRpbWVyIiwiZW5kcG9pbnQiLCJheGlvc0luc3RhbmNlIiwiaGVhZGVycyIsInJlc3BvbnNlIiwiZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyIsImRhdGEiLCJUaW1lciIsIlRJTUVSIiwiSU5GTyIsIkdFVENIQVRDT05GSUciLCJSZXF1ZXN0SWQiLCJ1dWlkdjQiLCJvcmdVcmwiLCJvcmdJZCIsIndpZGdldElkIiwiY3JlYXRlIiwicmV0cmllcyIsIm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlIiwibWlsbGlTZWNvbmRzRWxhcHNlZCIsIlYyIiwiR0VUQ0hBVENPTkZJR1NVQ0NFU1MiLCJSZWdpb24iLCJFbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzIiwiVHJhbnNhY3Rpb25JZCIsImdldExXSURldGFpbHMiLCJnZXRMV0lEZXRhaWxzT3B0aW9uYWxQYXJhbXMiLCJyZWNvbm5lY3RJZCIsIm9wdGlvbnMiLCJfdGhpcyIsIkdFVExXSVNUQVRVU1NUQVJURUQiLCJtZXRob2QiLCJ1cmwiLCJlcnJvcl8xIiwiR0VUTFdJU1RBVFVTU1VDQ0VFREVEIiwiTG9nZ2luZ1Nhbml0aXplciIsInN0cmlwRXJyb3JTZW5zaXRpdmVQcm9wZXJ0aWVzIiwiRVJST1IiLCJHRVRMV0lTVEFUVVNGQUlMRUQiLCJFeGNlcHRpb25EZXRhaWxzIiwiZ2V0Q2hhdFRva2VuIiwiZ2V0Q2hhdFRva2VuT3B0aW9uYWxQYXJhbXMiLCJjdXJyZW50UmV0cnlDb3VudCIsImN1cnJlbnRMaXZlQ2hhdFZlcnNpb24iLCJHRVRDSEFUVE9LRU5TVEFSVEVEIiwiZXJyb3JfMiIsIkdFVENIQVRUT0tFTlNVQ0NFRURFRCIsInN0YXR1cyIsIkdFVENIQVRUT0tFTkZBSUxFRCIsImdldENoYXRUb2tlblJldHJ5Q291bnQiLCJjYXRjaCIsImVycm9yIiwiZ2V0Q2hhdFRva2VuVGltZUJldHdlZW5SZXRyaWVzT25GYWlsdXJlIiwiZ2V0UmVjb25uZWN0YWJsZUNoYXRzIiwicmVjb25uZWN0YWJsZUNoYXRzUGFyYW1zIiwiR0VUUkVDT05ORUNUQUJMRUNIQVRTIiwiZXJyb3JfMyIsImdldFJlY29ubmVjdEF2YWlsYWJpbGl0eSIsIkdFVFJFQ09OTkVDVEFWQUlMQUJJTElUWSIsImVycm9yXzQiLCJXQVJOIiwiZ2V0UXVldWVBdmFpbGFiaWxpdHkiLCJxdWV1ZUF2YWlsYWJpbGl0eU9wdGlvbmFsUGFyYW1zIiwiaW5pdENvbnRleHQiLCJnZXRDb250ZXh0IiwiR0VUUVVFVUVBVkFJTEFCSUxJVFlTVEFSVEVEIiwid2luZG93IiwiZG9jdW1lbnQiLCJicm93c2VyIiwiQnJvd3NlckluZm8iLCJnZXRCcm93c2VyTmFtZSIsImRldmljZSIsIkRldmljZUluZm8iLCJnZXREZXZpY2VUeXBlIiwib3JpZ2ludXJsIiwibG9jYXRpb24iLCJocmVmIiwib3MiLCJPU0luZm8iLCJnZXRPc1R5cGUiLCJsb2NhbGUiLCJkYXRhXzEiLCJlcnJvcl81IiwiR0VUUVVFVUVBVkFJTEFCSUxJVFlTVUNDRUVERUQiLCJHRVRRVUVVRUFWQUlMQUJJTElUWUZBSUxFRCIsInNlc3Npb25Jbml0Iiwic2Vzc2lvbkluaXRPcHRpb25hbFBhcmFtcyIsIlNFU1NJT05JTklUU1RBUlRFRCIsImVycm9yXzYiLCJTRVNTSU9OSU5JVFNVQ0NFRURFRCIsIlNFU1NJT05JTklURkFJTEVEIiwic2Vzc2lvbkNsb3NlIiwic2Vzc2lvbkNsb3NlT3B0aW9uYWxQYXJhbXMiLCJpc1JlY29ubmVjdENoYXQiLCJpc1BlcnNpc3RlbnRDaGF0IiwiY2hhdElkIiwiU0VTU0lPTkNMT1NFU1RBUlRFRCIsImVycm9yXzciLCJTRVNTSU9OQ0xPU0VTVUNDRUVERUQiLCJTRVNTSU9OQ0xPU0VGQUlMRUQiLCJ2YWxpZGF0ZUF1dGhDaGF0UmVjb3JkIiwidmFsaWRhdGVBdXRoQ2hhdFJlY29yZE9wdGlvbmFsUGFyYW1zIiwiX2QiLCJlcnJvcl84IiwiX2UiLCJWQUxJREFURUFVVEhDSEFUUkVDT1JEU1RBUlRFRCIsImF1dGhDaGF0RXhpc3QiLCJWQUxJREFURUFVVEhDSEFUUkVDT1JEU1VDQ0VFREVEIiwiVkFMSURBVEVBVVRIQ0hBVFJFQ09SREZBSUxFRCIsIkVycm9yQ29kZSIsInRvU3RyaW5nIiwic3VibWl0UG9zdENoYXRSZXNwb25zZSIsInBvc3RDaGF0UmVzcG9uc2UiLCJzdWJtaXRQb3N0Q2hhdFJlc3BvbnNlT3B0aW9uYWxQYXJhbXMiLCJTVUJNSVRQT1NUQ0hBVFNUQVJURUQiLCJKU09OIiwic3RyaW5naWZ5IiwiZXJyb3JfOSIsIlNVQk1JVFBPU1RDSEFUU1VDQ0VFREVEIiwiU1VCTUlUUE9TVENIQVRGQUlMRUQiLCJnZXRTdXJ2ZXlJbnZpdGVMaW5rIiwic3VydmV5T3duZXJJZCIsInN1cnZleUludml0ZUFQSVJlcXVlc3RCb2R5IiwiZ2V0c3VydmV5SW52aXRlTGlua09wdGlvbmFsUGFyYW1zIiwiR0VUU1VSVkVZSU5WSVRFTElOS1NUQVJURUQiLCJTdXJ2ZXlPd25lcklkIiwiZXJyb3JfMTAiLCJHRVRTVVJWRVlJTlZJVEVMSU5LU1VDQ0VFREVEIiwiR0VUU1VSVkVZSU5WSVRFTElOS0ZBSUxFRCIsImdldENoYXRUcmFuc2NyaXB0cyIsInRva2VuIiwiZ2V0Q2hhdFRyYW5zY3JpcHRzT3B0aW9uYWxQYXJhbXMiLCJHRVRDSEFUVFJBTlNDUklQVFNUQVJURUQiLCJlcnJvcl8xMSIsIkdFVENIQVRUUkFOU0NSSVBUU1VDQ0VFREVEIiwiR0VUQ0hBVFRSQU5TQ1JJUFRGQUlMRUQiLCJlbWFpbFRyYW5zY3JpcHQiLCJlbWFpbFJlcXVlc3RCb2R5IiwiZW1haWxUcmFuc2NyaXB0T3B0aW9uYWxQYXJhbXMiLCJFTUFJTFRSQU5TQ1JJUFRTVEFSVEVEIiwiZXJyb3JfMTIiLCJFTUFJTFRSQU5TQ1JJUFRTVUNDRUVERUQiLCJFTUFJTFRSQU5TQ1JJUFRGQUlMRUQiLCJmZXRjaERhdGFNYXNraW5nSW5mbyIsIkZFVENIREFUQU1BU0tJTkdTVEFSVEVEIiwiZXJyb3JfMTMiLCJGRVRDSERBVEFNQVNLSU5HU1VDQ0VFREVEIiwiRkVUQ0hEQVRBTUFTS0lOR0ZBSUxFRCIsIm1ha2VTZWNvbmRhcnlDaGFubmVsRXZlbnRSZXF1ZXN0Iiwic2Vjb25kYXJ5Q2hhbm5lbEV2ZW50UmVxdWVzdEJvZHkiLCJzZWNvbmRhcnlDaGFubmVsRXZlbnRPcHRpb25hbFBhcmFtcyIsImVycm9yXzE0IiwiU0VDT05EQVJZQ0hBTk5FTEVWRU5UUkVRVUVTVFNUQVJURUQiLCJTRUNPTkRBUllDSEFOTkVMRVZFTlRSRVFVRVNUU1VDQ0VFREVEIiwiU0VDT05EQVJZQ0hBTk5FTEVWRU5UUkVRVUVTVEZBSUxFRCIsInNlbmRUeXBpbmdJbmRpY2F0b3IiLCJzZW5kVHlwaW5nSW5kaWNhdG9yT3B0aW9uYWxQYXJhbXMiLCJlcnJvcl8xNSIsIlNFTkRUWVBJTkdJTkRJQ0FUT1JTVUNDRUVERUQiLCJTRU5EVFlQSU5HSU5ESUNBVE9SRkFJTEVEIiwiT0NTREtMb2dnZXJfMSIsIlNES18xIiwiU0RLUHJvdmlkZXIiLCJnZXRTREsiLCJpbG9nZ2VyIiwiVU5LTk9XTl9WRVJTSU9OIiwiUkVHRVhfVkVSU0lPTiIsImdldFVzZXJBZ2VudCIsInVzZXJBZ2VudCIsInVzZXJBZ2VudENvbnRhaW5zU3RyaW5nIiwic2VhcmNoU3RyaW5nIiwiaW5kZXhPZiIsImlzQ2hyb21lIiwiQ0hST01FIiwiRURHRSIsIkVER0VfQ0hST01JVU0iLCJpc0llIiwiaXNFZGdlIiwiaXNPcGVyYSIsIk9QRVJBIiwiRklSRUZPWCIsIlNBRkFSSSIsIklFIiwiVU5LTk9XTiIsImdldEJyb3dzZXJWZXJzaW9uIiwiZ2V0SWVWZXJzaW9uIiwiY2xhc3NpY0llVmVyc2lvbk1hdGNoZXMiLCJtYXRjaCIsIlJlZ0V4cCIsImllVmVyc2lvbk1hdGNoZXMiLCJnZXRPdGhlclZlcnNpb24iLCJicm93c2VyU3RyaW5nIiwibWF0Y2hlcyIsIm5hdmlnYXRvciIsIm1vYmlsZSIsInRhYmxldCIsIk1vYmlsZSIsIlRhYmxldCIsIkRlc2t0b3AiLCJFdmVudE1hbmFnZXIiLCJyYWlzZUN1c3RvbUV2ZW50IiwiZXZlbnROYW1lIiwicGF5bG9hZCIsImV2ZW50IiwiY3JlYXRlQ3VzdG9tRXZlbnQiLCJkaXNwYXRjaEV2ZW50IiwiZXZlbnREZXRhaWxzIiwiZGV0YWlsIiwiQ3VzdG9tRXZlbnQiLCJjcmVhdGVFdmVudCIsImluaXRDdXN0b21FdmVudCIsImVycm9yT2JqZWN0IiwiZm9yRWFjaCIsIndpbiIsIndpbnJ0Iiwid2lucGhvbmUiLCJvc3giLCJpb3MiLCJsaW51eCIsImFuZHJvaWQiLCJXSU5ET1dTX1BIT05FIiwiV0lORE9XU19SVCIsIklPUyIsIkFORFJPSUQiLCJMSU5VWCIsIk1BQ09TWCIsIldJTkRPV1MiLCJUZWxlbWV0cnlIZWxwZXIiLCJEZXNjcmlwdGlvbiIsIkV2ZW50IiwidGltZVN0YXJ0IiwiRGF0ZSIsImdldFRpbWUiLCJheGlvc1JldHJ5IiwiYXhpb3MiLCJheGlvc1JldHJ5T3B0aW9ucyIsImN1cnJlbnRUcnkiLCJvblN1Y2Nlc3MiLCJvbkVycm9yIiwiY29uZmlnIiwic2hvdWxkUmV0cnkiLCJpbnRlcmNlcHRvcnMiLCJ1c2UiLCJyZXBsYWNlIiwiYyIsInIiLCJNYXRoIiwicmFuZG9tIiwiRXZlbnROYW1lc18xIiwiU0RLUHJvdmlkZXJfMSIsIkV2ZW50TWFuYWdlcl8xIiwiZ2xvYmFsIiwiTWljcm9zb2Z0IiwiQ1JNIiwiT21uaWNoYW5uZWwiLCJVdGlsIiwiT0NTREtMT0FEIl0sIm1hcHBpbmdzIjoiO1FBQUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7OztRQUdBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwwQ0FBMEMsZ0NBQWdDO1FBQzFFO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0Esd0RBQXdELGtCQUFrQjtRQUMxRTtRQUNBLGlEQUFpRCxjQUFjO1FBQy9EOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSx5Q0FBeUMsaUNBQWlDO1FBQzFFLGdIQUFnSCxtQkFBbUIsRUFBRTtRQUNySTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDJCQUEyQiwwQkFBMEIsRUFBRTtRQUN2RCxpQ0FBaUMsZUFBZTtRQUNoRDtRQUNBO1FBQ0E7O1FBRUE7UUFDQSxzREFBc0QsK0RBQStEOztRQUVySDtRQUNBOzs7UUFHQTtRQUNBOzs7Ozs7Ozs7Ozs7QUNsRkEsaUJBQWlCLG1CQUFPLENB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QUFPO0FBQ2xCLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUM1VkE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztB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QUF1QjhWLGdCQUF2QixDQUF3Q2dELGFBQWE5WSxPQUFiLENBQXFCc1osU0FBN0QsQ0FBbkIsRUFDSCxDQTNCRCxJIiwiZmlsZSI6IlNESy5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSBcIi4vc3JjL2luZGV4LnRzXCIpO1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2xpYi9heGlvcycpOyIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xudmFyIHNldHRsZSA9IHJlcXVpcmUoJy4vLi4vY29yZS9zZXR0bGUnKTtcbnZhciBjb29raWVzID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL2Nvb2tpZXMnKTtcbnZhciBidWlsZFVSTCA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9idWlsZFVSTCcpO1xudmFyIGJ1aWxkRnVsbFBhdGggPSByZXF1aXJlKCcuLi9jb3JlL2J1aWxkRnVsbFBhdGgnKTtcbnZhciBwYXJzZUhlYWRlcnMgPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvcGFyc2VIZWFkZXJzJyk7XG52YXIgaXNVUkxTYW1lT3JpZ2luID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL2lzVVJMU2FtZU9yaWdpbicpO1xudmFyIGNyZWF0ZUVycm9yID0gcmVxdWlyZSgnLi4vY29yZS9jcmVhdGVFcnJvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHhockFkYXB0ZXIoY29uZmlnKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiBkaXNwYXRjaFhoclJlcXVlc3QocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgdmFyIHJlcXVlc3REYXRhID0gY29uZmlnLmRhdGE7XG4gICAgdmFyIHJlcXVlc3RIZWFkZXJzID0gY29uZmlnLmhlYWRlcnM7XG4gICAgdmFyIHJlc3BvbnNlVHlwZSA9IGNvbmZpZy5yZXNwb25zZVR5cGU7XG5cbiAgICBpZiAodXRpbHMuaXNGb3JtRGF0YShyZXF1ZXN0RGF0YSkpIHtcbiAgICAgIGRlbGV0ZSByZXF1ZXN0SGVhZGVyc1snQ29udGVudC1UeXBlJ107IC8vIExldCB0aGUgYnJvd3NlciBzZXQgaXRcbiAgICB9XG5cbiAgICB2YXIgcmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuXG4gICAgLy8gSFRUUCBiYXNpYyBhdXRoZW50aWNhdGlvblxuICAgIGlmIChjb25maWcuYXV0aCkge1xuICAgICAgdmFyIHVzZXJuYW1lID0gY29uZmlnLmF1dGgudXNlcm5hbWUgfHwgJyc7XG4gICAgICB2YXIgcGFzc3dvcmQgPSBjb25maWcuYXV0aC5wYXNzd29yZCA/IHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChjb25maWcuYXV0aC5wYXNzd29yZCkpIDogJyc7XG4gICAgICByZXF1ZXN0SGVhZGVycy5BdXRob3JpemF0aW9uID0gJ0Jhc2ljICcgKyBidG9hKHVzZXJuYW1lICsgJzonICsgcGFzc3dvcmQpO1xuICAgIH1cblxuICAgIHZhciBmdWxsUGF0aCA9IGJ1aWxkRnVsbFBhdGgoY29uZmlnLmJhc2VVUkwsIGNvbmZpZy51cmwpO1xuICAgIHJlcXVlc3Qub3Blbihjb25maWcubWV0aG9kLnRvVXBwZXJDYXNlKCksIGJ1aWxkVVJMKGZ1bGxQYXRoLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplciksIHRydWUpO1xuXG4gICAgLy8gU2V0IHRoZSByZXF1ZXN0IHRpbWVvdXQgaW4gTVNcbiAgICByZXF1ZXN0LnRpbWVvdXQgPSBjb25maWcudGltZW91dDtcblxuICAgIGZ1bmN0aW9uIG9ubG9hZGVuZCgpIHtcbiAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBQcmVwYXJlIHRoZSByZXNwb25zZVxuICAgICAgdmFyIHJlc3BvbnNlSGVhZGVycyA9ICdnZXRBbGxSZXNwb25zZUhlYWRlcnMnIGluIHJlcXVlc3QgPyBwYXJzZUhlYWRlcnMocmVxdWVzdC5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSkgOiBudWxsO1xuICAgICAgdmFyIHJlc3BvbnNlRGF0YSA9ICFyZXNwb25zZVR5cGUgfHwgcmVzcG9uc2VUeXBlID09PSAndGV4dCcgfHwgIHJlc3BvbnNlVHlwZSA9PT0gJ2pzb24nID9cbiAgICAgICAgcmVxdWVzdC5yZXNwb25zZVRleHQgOiByZXF1ZXN0LnJlc3BvbnNlO1xuICAgICAgdmFyIHJlc3BvbnNlID0ge1xuICAgICAgICBkYXRhOiByZXNwb25zZURhdGEsXG4gICAgICAgIHN0YXR1czogcmVxdWVzdC5zdGF0dXMsXG4gICAgICAgIHN0YXR1c1RleHQ6IHJlcXVlc3Quc3RhdHVzVGV4dCxcbiAgICAgICAgaGVhZGVyczogcmVzcG9uc2VIZWFkZXJzLFxuICAgICAgICBjb25maWc6IGNvbmZpZyxcbiAgICAgICAgcmVxdWVzdDogcmVxdWVzdFxuICAgICAgfTtcblxuICAgICAgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgcmVzcG9uc2UpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoJ29ubG9hZGVuZCcgaW4gcmVxdWVzdCkge1xuICAgICAgLy8gVXNlIG9ubG9hZGVuZCBpZiBhdmFpbGFibGVcbiAgICAgIHJlcXVlc3Qub25sb2FkZW5kID0gb25sb2FkZW5kO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBMaXN0ZW4gZm9yIHJlYWR5IHN0YXRlIHRvIGVtdWxhdGUgb25sb2FkZW5kXG4gICAgICByZXF1ZXN0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uIGhhbmRsZUxvYWQoKSB7XG4gICAgICAgIGlmICghcmVxdWVzdCB8fCByZXF1ZXN0LnJlYWR5U3RhdGUgIT09IDQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgcmVxdWVzdCBlcnJvcmVkIG91dCBhbmQgd2UgZGlkbid0IGdldCBhIHJlc3BvbnNlLCB0aGlzIHdpbGwgYmVcbiAgICAgICAgLy8gaGFuZGxlZCBieSBvbmVycm9yIGluc3RlYWRcbiAgICAgICAgLy8gV2l0aCBvbmUgZXhjZXB0aW9uOiByZXF1ZXN0IHRoYXQgdXNpbmcgZmlsZTogcHJvdG9jb2wsIG1vc3QgYnJvd3NlcnNcbiAgICAgICAgLy8gd2lsbCByZXR1cm4gc3RhdHVzIGFzIDAgZXZlbiB0aG91Z2ggaXQncyBhIHN1Y2Nlc3NmdWwgcmVxdWVzdFxuICAgICAgICBpZiAocmVxdWVzdC5zdGF0dXMgPT09IDAgJiYgIShyZXF1ZXN0LnJlc3BvbnNlVVJMICYmIHJlcXVlc3QucmVzcG9uc2VVUkwuaW5kZXhPZignZmlsZTonKSA9PT0gMCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmVhZHlzdGF0ZSBoYW5kbGVyIGlzIGNhbGxpbmcgYmVmb3JlIG9uZXJyb3Igb3Igb250aW1lb3V0IGhhbmRsZXJzLFxuICAgICAgICAvLyBzbyB3ZSBzaG91bGQgY2FsbCBvbmxvYWRlbmQgb24gdGhlIG5leHQgJ3RpY2snXG4gICAgICAgIHNldFRpbWVvdXQob25sb2FkZW5kKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIGJyb3dzZXIgcmVxdWVzdCBjYW5jZWxsYXRpb24gKGFzIG9wcG9zZWQgdG8gYSBtYW51YWwgY2FuY2VsbGF0aW9uKVxuICAgIHJlcXVlc3Qub25hYm9ydCA9IGZ1bmN0aW9uIGhhbmRsZUFib3J0KCkge1xuICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmVqZWN0KGNyZWF0ZUVycm9yKCdSZXF1ZXN0IGFib3J0ZWQnLCBjb25maWcsICdFQ09OTkFCT1JURUQnLCByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBIYW5kbGUgbG93IGxldmVsIG5ldHdvcmsgZXJyb3JzXG4gICAgcmVxdWVzdC5vbmVycm9yID0gZnVuY3Rpb24gaGFuZGxlRXJyb3IoKSB7XG4gICAgICAvLyBSZWFsIGVycm9ycyBhcmUgaGlkZGVuIGZyb20gdXMgYnkgdGhlIGJyb3dzZXJcbiAgICAgIC8vIG9uZXJyb3Igc2hvdWxkIG9ubHkgZmlyZSBpZiBpdCdzIGEgbmV0d29yayBlcnJvclxuICAgICAgcmVqZWN0KGNyZWF0ZUVycm9yKCdOZXR3b3JrIEVycm9yJywgY29uZmlnLCBudWxsLCByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBIYW5kbGUgdGltZW91dFxuICAgIHJlcXVlc3Qub250aW1lb3V0ID0gZnVuY3Rpb24gaGFuZGxlVGltZW91dCgpIHtcbiAgICAgIHZhciB0aW1lb3V0RXJyb3JNZXNzYWdlID0gJ3RpbWVvdXQgb2YgJyArIGNvbmZpZy50aW1lb3V0ICsgJ21zIGV4Y2VlZGVkJztcbiAgICAgIGlmIChjb25maWcudGltZW91dEVycm9yTWVzc2FnZSkge1xuICAgICAgICB0aW1lb3V0RXJyb3JNZXNzYWdlID0gY29uZmlnLnRpbWVvdXRFcnJvck1lc3NhZ2U7XG4gICAgICB9XG4gICAgICByZWplY3QoY3JlYXRlRXJyb3IoXG4gICAgICAgIHRpbWVvdXRFcnJvck1lc3NhZ2UsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgY29uZmlnLnRyYW5zaXRpb25hbCAmJiBjb25maWcudHJhbnNpdGlvbmFsLmNsYXJpZnlUaW1lb3V0RXJyb3IgPyAnRVRJTUVET1VUJyA6ICdFQ09OTkFCT1JURUQnLFxuICAgICAgICByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBBZGQgeHNyZiBoZWFkZXJcbiAgICAvLyBUaGlzIGlzIG9ubHkgZG9uZSBpZiBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciBlbnZpcm9ubWVudC5cbiAgICAvLyBTcGVjaWZpY2FsbHkgbm90IGlmIHdlJ3JlIGluIGEgd2ViIHdvcmtlciwgb3IgcmVhY3QtbmF0aXZlLlxuICAgIGlmICh1dGlscy5pc1N0YW5kYXJkQnJvd3NlckVudigpKSB7XG4gICAgICAvLyBBZGQgeHNyZiBoZWFkZXJcbiAgICAgIHZhciB4c3JmVmFsdWUgPSAoY29uZmlnLndpdGhDcmVkZW50aWFscyB8fCBpc1VSTFNhbWVPcmlnaW4oZnVsbFBhdGgpKSAmJiBjb25maWcueHNyZkNvb2tpZU5hbWUgP1xuICAgICAgICBjb29raWVzLnJlYWQoY29uZmlnLnhzcmZDb29raWVOYW1lKSA6XG4gICAgICAgIHVuZGVmaW5lZDtcblxuICAgICAgaWYgKHhzcmZWYWx1ZSkge1xuICAgICAgICByZXF1ZXN0SGVhZGVyc1tjb25maWcueHNyZkhlYWRlck5hbWVdID0geHNyZlZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFkZCBoZWFkZXJzIHRvIHRoZSByZXF1ZXN0XG4gICAgaWYgKCdzZXRSZXF1ZXN0SGVhZGVyJyBpbiByZXF1ZXN0KSB7XG4gICAgICB1dGlscy5mb3JFYWNoKHJlcXVlc3RIZWFkZXJzLCBmdW5jdGlvbiBzZXRSZXF1ZXN0SGVhZGVyKHZhbCwga2V5KSB7XG4gICAgICAgIGlmICh0eXBlb2YgcmVxdWVzdERhdGEgPT09ICd1bmRlZmluZWQnICYmIGtleS50b0xvd2VyQ2FzZSgpID09PSAnY29udGVudC10eXBlJykge1xuICAgICAgICAgIC8vIFJlbW92ZSBDb250ZW50LVR5cGUgaWYgZGF0YSBpcyB1bmRlZmluZWRcbiAgICAgICAgICBkZWxldGUgcmVxdWVzdEhlYWRlcnNba2V5XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBPdGhlcndpc2UgYWRkIGhlYWRlciB0byB0aGUgcmVxdWVzdFxuICAgICAgICAgIHJlcXVlc3Quc2V0UmVxdWVzdEhlYWRlcihrZXksIHZhbCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEFkZCB3aXRoQ3JlZGVudGlhbHMgdG8gcmVxdWVzdCBpZiBuZWVkZWRcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZy53aXRoQ3JlZGVudGlhbHMpKSB7XG4gICAgICByZXF1ZXN0LndpdGhDcmVkZW50aWFscyA9ICEhY29uZmlnLndpdGhDcmVkZW50aWFscztcbiAgICB9XG5cbiAgICAvLyBBZGQgcmVzcG9uc2VUeXBlIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgaWYgKHJlc3BvbnNlVHlwZSAmJiByZXNwb25zZVR5cGUgIT09ICdqc29uJykge1xuICAgICAgcmVxdWVzdC5yZXNwb25zZVR5cGUgPSBjb25maWcucmVzcG9uc2VUeXBlO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBwcm9ncmVzcyBpZiBuZWVkZWRcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5vbkRvd25sb2FkUHJvZ3Jlc3MgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBjb25maWcub25Eb3dubG9hZFByb2dyZXNzKTtcbiAgICB9XG5cbiAgICAvLyBOb3QgYWxsIGJyb3dzZXJzIHN1cHBvcnQgdXBsb2FkIGV2ZW50c1xuICAgIGlmICh0eXBlb2YgY29uZmlnLm9uVXBsb2FkUHJvZ3Jlc3MgPT09ICdmdW5jdGlvbicgJiYgcmVxdWVzdC51cGxvYWQpIHtcbiAgICAgIHJlcXVlc3QudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgY29uZmlnLm9uVXBsb2FkUHJvZ3Jlc3MpO1xuICAgIH1cblxuICAgIGlmIChjb25maWcuY2FuY2VsVG9rZW4pIHtcbiAgICAgIC8vIEhhbmRsZSBjYW5jZWxsYXRpb25cbiAgICAgIGNvbmZpZy5jYW5jZWxUb2tlbi5wcm9taXNlLnRoZW4oZnVuY3Rpb24gb25DYW5jZWxlZChjYW5jZWwpIHtcbiAgICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVxdWVzdC5hYm9ydCgpO1xuICAgICAgICByZWplY3QoY2FuY2VsKTtcbiAgICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICghcmVxdWVzdERhdGEpIHtcbiAgICAgIHJlcXVlc3REYXRhID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBTZW5kIHRoZSByZXF1ZXN0XG4gICAgcmVxdWVzdC5zZW5kKHJlcXVlc3REYXRhKTtcbiAgfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4vaGVscGVycy9iaW5kJyk7XG52YXIgQXhpb3MgPSByZXF1aXJlKCcuL2NvcmUvQXhpb3MnKTtcbnZhciBtZXJnZUNvbmZpZyA9IHJlcXVpcmUoJy4vY29yZS9tZXJnZUNvbmZpZycpO1xudmFyIGRlZmF1bHRzID0gcmVxdWlyZSgnLi9kZWZhdWx0cycpO1xuXG4vKipcbiAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiBBeGlvc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBkZWZhdWx0Q29uZmlnIFRoZSBkZWZhdWx0IGNvbmZpZyBmb3IgdGhlIGluc3RhbmNlXG4gKiBAcmV0dXJuIHtBeGlvc30gQSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2UoZGVmYXVsdENvbmZpZykge1xuICB2YXIgY29udGV4dCA9IG5ldyBBeGlvcyhkZWZhdWx0Q29uZmlnKTtcbiAgdmFyIGluc3RhbmNlID0gYmluZChBeGlvcy5wcm90b3R5cGUucmVxdWVzdCwgY29udGV4dCk7XG5cbiAgLy8gQ29weSBheGlvcy5wcm90b3R5cGUgdG8gaW5zdGFuY2VcbiAgdXRpbHMuZXh0ZW5kKGluc3RhbmNlLCBBeGlvcy5wcm90b3R5cGUsIGNvbnRleHQpO1xuXG4gIC8vIENvcHkgY29udGV4dCB0byBpbnN0YW5jZVxuICB1dGlscy5leHRlbmQoaW5zdGFuY2UsIGNvbnRleHQpO1xuXG4gIHJldHVybiBpbnN0YW5jZTtcbn1cblxuLy8gQ3JlYXRlIHRoZSBkZWZhdWx0IGluc3RhbmNlIHRvIGJlIGV4cG9ydGVkXG52YXIgYXhpb3MgPSBjcmVhdGVJbnN0YW5jZShkZWZhdWx0cyk7XG5cbi8vIEV4cG9zZSBBeGlvcyBjbGFzcyB0byBhbGxvdyBjbGFzcyBpbmhlcml0YW5jZVxuYXhpb3MuQXhpb3MgPSBBeGlvcztcblxuLy8gRmFjdG9yeSBmb3IgY3JlYXRpbmcgbmV3IGluc3RhbmNlc1xuYXhpb3MuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKGluc3RhbmNlQ29uZmlnKSB7XG4gIHJldHVybiBjcmVhdGVJbnN0YW5jZShtZXJnZUNvbmZpZyhheGlvcy5kZWZhdWx0cywgaW5zdGFuY2VDb25maWcpKTtcbn07XG5cbi8vIEV4cG9zZSBDYW5jZWwgJiBDYW5jZWxUb2tlblxuYXhpb3MuQ2FuY2VsID0gcmVxdWlyZSgnLi9jYW5jZWwvQ2FuY2VsJyk7XG5heGlvcy5DYW5jZWxUb2tlbiA9IHJlcXVpcmUoJy4vY2FuY2VsL0NhbmNlbFRva2VuJyk7XG5heGlvcy5pc0NhbmNlbCA9IHJlcXVpcmUoJy4vY2FuY2VsL2lzQ2FuY2VsJyk7XG5cbi8vIEV4cG9zZSBhbGwvc3ByZWFkXG5heGlvcy5hbGwgPSBmdW5jdGlvbiBhbGwocHJvbWlzZXMpIHtcbiAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKTtcbn07XG5heGlvcy5zcHJlYWQgPSByZXF1aXJlKCcuL2hlbHBlcnMvc3ByZWFkJyk7XG5cbi8vIEV4cG9zZSBpc0F4aW9zRXJyb3JcbmF4aW9zLmlzQXhpb3NFcnJvciA9IHJlcXVpcmUoJy4vaGVscGVycy9pc0F4aW9zRXJyb3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBheGlvcztcblxuLy8gQWxsb3cgdXNlIG9mIGRlZmF1bHQgaW1wb3J0IHN5bnRheCBpbiBUeXBlU2NyaXB0XG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gYXhpb3M7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQSBgQ2FuY2VsYCBpcyBhbiBvYmplY3QgdGhhdCBpcyB0aHJvd24gd2hlbiBhbiBvcGVyYXRpb24gaXMgY2FuY2VsZWQuXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0ge3N0cmluZz19IG1lc3NhZ2UgVGhlIG1lc3NhZ2UuXG4gKi9cbmZ1bmN0aW9uIENhbmNlbChtZXNzYWdlKSB7XG4gIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG59XG5cbkNhbmNlbC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuICdDYW5jZWwnICsgKHRoaXMubWVzc2FnZSA/ICc6ICcgKyB0aGlzLm1lc3NhZ2UgOiAnJyk7XG59O1xuXG5DYW5jZWwucHJvdG90eXBlLl9fQ0FOQ0VMX18gPSB0cnVlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IENhbmNlbDtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIENhbmNlbCA9IHJlcXVpcmUoJy4vQ2FuY2VsJyk7XG5cbi8qKlxuICogQSBgQ2FuY2VsVG9rZW5gIGlzIGFuIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlcXVlc3QgY2FuY2VsbGF0aW9uIG9mIGFuIG9wZXJhdGlvbi5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGV4ZWN1dG9yIFRoZSBleGVjdXRvciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gQ2FuY2VsVG9rZW4oZXhlY3V0b3IpIHtcbiAgaWYgKHR5cGVvZiBleGVjdXRvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2V4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4nKTtcbiAgfVxuXG4gIHZhciByZXNvbHZlUHJvbWlzZTtcbiAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gcHJvbWlzZUV4ZWN1dG9yKHJlc29sdmUpIHtcbiAgICByZXNvbHZlUHJvbWlzZSA9IHJlc29sdmU7XG4gIH0pO1xuXG4gIHZhciB0b2tlbiA9IHRoaXM7XG4gIGV4ZWN1dG9yKGZ1bmN0aW9uIGNhbmNlbChtZXNzYWdlKSB7XG4gICAgaWYgKHRva2VuLnJlYXNvbikge1xuICAgICAgLy8gQ2FuY2VsbGF0aW9uIGhhcyBhbHJlYWR5IGJlZW4gcmVxdWVzdGVkXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdG9rZW4ucmVhc29uID0gbmV3IENhbmNlbChtZXNzYWdlKTtcbiAgICByZXNvbHZlUHJvbWlzZSh0b2tlbi5yZWFzb24pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBUaHJvd3MgYSBgQ2FuY2VsYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICovXG5DYW5jZWxUb2tlbi5wcm90b3R5cGUudGhyb3dJZlJlcXVlc3RlZCA9IGZ1bmN0aW9uIHRocm93SWZSZXF1ZXN0ZWQoKSB7XG4gIGlmICh0aGlzLnJlYXNvbikge1xuICAgIHRocm93IHRoaXMucmVhc29uO1xuICB9XG59O1xuXG4vKipcbiAqIFJldHVybnMgYW4gb2JqZWN0IHRoYXQgY29udGFpbnMgYSBuZXcgYENhbmNlbFRva2VuYCBhbmQgYSBmdW5jdGlvbiB0aGF0LCB3aGVuIGNhbGxlZCxcbiAqIGNhbmNlbHMgdGhlIGBDYW5jZWxUb2tlbmAuXG4gKi9cbkNhbmNlbFRva2VuLnNvdXJjZSA9IGZ1bmN0aW9uIHNvdXJjZSgpIHtcbiAgdmFyIGNhbmNlbDtcbiAgdmFyIHRva2VuID0gbmV3IENhbmNlbFRva2VuKGZ1bmN0aW9uIGV4ZWN1dG9yKGMpIHtcbiAgICBjYW5jZWwgPSBjO1xuICB9KTtcbiAgcmV0dXJuIHtcbiAgICB0b2tlbjogdG9rZW4sXG4gICAgY2FuY2VsOiBjYW5jZWxcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQ2FuY2VsVG9rZW47XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNDYW5jZWwodmFsdWUpIHtcbiAgcmV0dXJuICEhKHZhbHVlICYmIHZhbHVlLl9fQ0FOQ0VMX18pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xudmFyIGJ1aWxkVVJMID0gcmVxdWlyZSgnLi4vaGVscGVycy9idWlsZFVSTCcpO1xudmFyIEludGVyY2VwdG9yTWFuYWdlciA9IHJlcXVpcmUoJy4vSW50ZXJjZXB0b3JNYW5hZ2VyJyk7XG52YXIgZGlzcGF0Y2hSZXF1ZXN0ID0gcmVxdWlyZSgnLi9kaXNwYXRjaFJlcXVlc3QnKTtcbnZhciBtZXJnZUNvbmZpZyA9IHJlcXVpcmUoJy4vbWVyZ2VDb25maWcnKTtcbnZhciB2YWxpZGF0b3IgPSByZXF1aXJlKCcuLi9oZWxwZXJzL3ZhbGlkYXRvcicpO1xuXG52YXIgdmFsaWRhdG9ycyA9IHZhbGlkYXRvci52YWxpZGF0b3JzO1xuLyoqXG4gKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VDb25maWcgVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgaW5zdGFuY2VcbiAqL1xuZnVuY3Rpb24gQXhpb3MoaW5zdGFuY2VDb25maWcpIHtcbiAgdGhpcy5kZWZhdWx0cyA9IGluc3RhbmNlQ29uZmlnO1xuICB0aGlzLmludGVyY2VwdG9ycyA9IHtcbiAgICByZXF1ZXN0OiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyKCksXG4gICAgcmVzcG9uc2U6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIoKVxuICB9O1xufVxuXG4vKipcbiAqIERpc3BhdGNoIGEgcmVxdWVzdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZyBzcGVjaWZpYyBmb3IgdGhpcyByZXF1ZXN0IChtZXJnZWQgd2l0aCB0aGlzLmRlZmF1bHRzKVxuICovXG5BeGlvcy5wcm90b3R5cGUucmVxdWVzdCA9IGZ1bmN0aW9uIHJlcXVlc3QoY29uZmlnKSB7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICAvLyBBbGxvdyBmb3IgYXhpb3MoJ2V4YW1wbGUvdXJsJ1ssIGNvbmZpZ10pIGEgbGEgZmV0Y2ggQVBJXG4gIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykge1xuICAgIGNvbmZpZyA9IGFyZ3VtZW50c1sxXSB8fCB7fTtcbiAgICBjb25maWcudXJsID0gYXJndW1lbnRzWzBdO1xuICB9IGVsc2Uge1xuICAgIGNvbmZpZyA9IGNvbmZpZyB8fCB7fTtcbiAgfVxuXG4gIGNvbmZpZyA9IG1lcmdlQ29uZmlnKHRoaXMuZGVmYXVsdHMsIGNvbmZpZyk7XG5cbiAgLy8gU2V0IGNvbmZpZy5tZXRob2RcbiAgaWYgKGNvbmZpZy5tZXRob2QpIHtcbiAgICBjb25maWcubWV0aG9kID0gY29uZmlnLm1ldGhvZC50b0xvd2VyQ2FzZSgpO1xuICB9IGVsc2UgaWYgKHRoaXMuZGVmYXVsdHMubWV0aG9kKSB7XG4gICAgY29uZmlnLm1ldGhvZCA9IHRoaXMuZGVmYXVsdHMubWV0aG9kLnRvTG93ZXJDYXNlKCk7XG4gIH0gZWxzZSB7XG4gICAgY29uZmlnLm1ldGhvZCA9ICdnZXQnO1xuICB9XG5cbiAgdmFyIHRyYW5zaXRpb25hbCA9IGNvbmZpZy50cmFuc2l0aW9uYWw7XG5cbiAgaWYgKHRyYW5zaXRpb25hbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdmFsaWRhdG9yLmFzc2VydE9wdGlvbnModHJhbnNpdGlvbmFsLCB7XG4gICAgICBzaWxlbnRKU09OUGFyc2luZzogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuLCAnMS4wLjAnKSxcbiAgICAgIGZvcmNlZEpTT05QYXJzaW5nOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4sICcxLjAuMCcpLFxuICAgICAgY2xhcmlmeVRpbWVvdXRFcnJvcjogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuLCAnMS4wLjAnKVxuICAgIH0sIGZhbHNlKTtcbiAgfVxuXG4gIC8vIGZpbHRlciBvdXQgc2tpcHBlZCBpbnRlcmNlcHRvcnNcbiAgdmFyIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluID0gW107XG4gIHZhciBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgPSB0cnVlO1xuICB0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24gdW5zaGlmdFJlcXVlc3RJbnRlcmNlcHRvcnMoaW50ZXJjZXB0b3IpIHtcbiAgICBpZiAodHlwZW9mIGludGVyY2VwdG9yLnJ1bldoZW4gPT09ICdmdW5jdGlvbicgJiYgaW50ZXJjZXB0b3IucnVuV2hlbihjb25maWcpID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyA9IHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyAmJiBpbnRlcmNlcHRvci5zeW5jaHJvbm91cztcblxuICAgIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLnVuc2hpZnQoaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gIH0pO1xuXG4gIHZhciByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4gPSBbXTtcbiAgdGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbiBwdXNoUmVzcG9uc2VJbnRlcmNlcHRvcnMoaW50ZXJjZXB0b3IpIHtcbiAgICByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4ucHVzaChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgfSk7XG5cbiAgdmFyIHByb21pc2U7XG5cbiAgaWYgKCFzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMpIHtcbiAgICB2YXIgY2hhaW4gPSBbZGlzcGF0Y2hSZXF1ZXN0LCB1bmRlZmluZWRdO1xuXG4gICAgQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuYXBwbHkoY2hhaW4sIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluKTtcbiAgICBjaGFpbiA9IGNoYWluLmNvbmNhdChyZXNwb25zZUludGVyY2VwdG9yQ2hhaW4pO1xuXG4gICAgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShjb25maWcpO1xuICAgIHdoaWxlIChjaGFpbi5sZW5ndGgpIHtcbiAgICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4oY2hhaW4uc2hpZnQoKSwgY2hhaW4uc2hpZnQoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH1cblxuXG4gIHZhciBuZXdDb25maWcgPSBjb25maWc7XG4gIHdoaWxlIChyZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi5sZW5ndGgpIHtcbiAgICB2YXIgb25GdWxmaWxsZWQgPSByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi5zaGlmdCgpO1xuICAgIHZhciBvblJlamVjdGVkID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4uc2hpZnQoKTtcbiAgICB0cnkge1xuICAgICAgbmV3Q29uZmlnID0gb25GdWxmaWxsZWQobmV3Q29uZmlnKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgb25SZWplY3RlZChlcnJvcik7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB0cnkge1xuICAgIHByb21pc2UgPSBkaXNwYXRjaFJlcXVlc3QobmV3Q29uZmlnKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICB9XG5cbiAgd2hpbGUgKHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbi5sZW5ndGgpIHtcbiAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbi5zaGlmdCgpLCByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4uc2hpZnQoKSk7XG4gIH1cblxuICByZXR1cm4gcHJvbWlzZTtcbn07XG5cbkF4aW9zLnByb3RvdHlwZS5nZXRVcmkgPSBmdW5jdGlvbiBnZXRVcmkoY29uZmlnKSB7XG4gIGNvbmZpZyA9IG1lcmdlQ29uZmlnKHRoaXMuZGVmYXVsdHMsIGNvbmZpZyk7XG4gIHJldHVybiBidWlsZFVSTChjb25maWcudXJsLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplcikucmVwbGFjZSgvXlxcPy8sICcnKTtcbn07XG5cbi8vIFByb3ZpZGUgYWxpYXNlcyBmb3Igc3VwcG9ydGVkIHJlcXVlc3QgbWV0aG9kc1xudXRpbHMuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdvcHRpb25zJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2ROb0RhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24odXJsLCBjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1lcmdlQ29uZmlnKGNvbmZpZyB8fCB7fSwge1xuICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICB1cmw6IHVybCxcbiAgICAgIGRhdGE6IChjb25maWcgfHwge30pLmRhdGFcbiAgICB9KSk7XG4gIH07XG59KTtcblxudXRpbHMuZm9yRWFjaChbJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2RXaXRoRGF0YShtZXRob2QpIHtcbiAgLyplc2xpbnQgZnVuYy1uYW1lczowKi9cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbih1cmwsIGRhdGEsIGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QobWVyZ2VDb25maWcoY29uZmlnIHx8IHt9LCB7XG4gICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgIHVybDogdXJsLFxuICAgICAgZGF0YTogZGF0YVxuICAgIH0pKTtcbiAgfTtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEF4aW9zO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbmZ1bmN0aW9uIEludGVyY2VwdG9yTWFuYWdlcigpIHtcbiAgdGhpcy5oYW5kbGVycyA9IFtdO1xufVxuXG4vKipcbiAqIEFkZCBhIG5ldyBpbnRlcmNlcHRvciB0byB0aGUgc3RhY2tcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdWxmaWxsZWQgVGhlIGZ1bmN0aW9uIHRvIGhhbmRsZSBgdGhlbmAgZm9yIGEgYFByb21pc2VgXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWplY3RlZCBUaGUgZnVuY3Rpb24gdG8gaGFuZGxlIGByZWplY3RgIGZvciBhIGBQcm9taXNlYFxuICpcbiAqIEByZXR1cm4ge051bWJlcn0gQW4gSUQgdXNlZCB0byByZW1vdmUgaW50ZXJjZXB0b3IgbGF0ZXJcbiAqL1xuSW50ZXJjZXB0b3JNYW5hZ2VyLnByb3RvdHlwZS51c2UgPSBmdW5jdGlvbiB1c2UoZnVsZmlsbGVkLCByZWplY3RlZCwgb3B0aW9ucykge1xuICB0aGlzLmhhbmRsZXJzLnB1c2goe1xuICAgIGZ1bGZpbGxlZDogZnVsZmlsbGVkLFxuICAgIHJlamVjdGVkOiByZWplY3RlZCxcbiAgICBzeW5jaHJvbm91czogb3B0aW9ucyA/IG9wdGlvbnMuc3luY2hyb25vdXMgOiBmYWxzZSxcbiAgICBydW5XaGVuOiBvcHRpb25zID8gb3B0aW9ucy5ydW5XaGVuIDogbnVsbFxuICB9KTtcbiAgcmV0dXJuIHRoaXMuaGFuZGxlcnMubGVuZ3RoIC0gMTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGFuIGludGVyY2VwdG9yIGZyb20gdGhlIHN0YWNrXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IGlkIFRoZSBJRCB0aGF0IHdhcyByZXR1cm5lZCBieSBgdXNlYFxuICovXG5JbnRlcmNlcHRvck1hbmFnZXIucHJvdG90eXBlLmVqZWN0ID0gZnVuY3Rpb24gZWplY3QoaWQpIHtcbiAgaWYgKHRoaXMuaGFuZGxlcnNbaWRdKSB7XG4gICAgdGhpcy5oYW5kbGVyc1tpZF0gPSBudWxsO1xuICB9XG59O1xuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBhbGwgdGhlIHJlZ2lzdGVyZWQgaW50ZXJjZXB0b3JzXG4gKlxuICogVGhpcyBtZXRob2QgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3Igc2tpcHBpbmcgb3ZlciBhbnlcbiAqIGludGVyY2VwdG9ycyB0aGF0IG1heSBoYXZlIGJlY29tZSBgbnVsbGAgY2FsbGluZyBgZWplY3RgLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBmdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIGludGVyY2VwdG9yXG4gKi9cbkludGVyY2VwdG9yTWFuYWdlci5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIGZvckVhY2goZm4pIHtcbiAgdXRpbHMuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLCBmdW5jdGlvbiBmb3JFYWNoSGFuZGxlcihoKSB7XG4gICAgaWYgKGggIT09IG51bGwpIHtcbiAgICAgIGZuKGgpO1xuICAgIH1cbiAgfSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEludGVyY2VwdG9yTWFuYWdlcjtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGlzQWJzb2x1dGVVUkwgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzQWJzb2x1dGVVUkwnKTtcbnZhciBjb21iaW5lVVJMcyA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvY29tYmluZVVSTHMnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFVSTCBieSBjb21iaW5pbmcgdGhlIGJhc2VVUkwgd2l0aCB0aGUgcmVxdWVzdGVkVVJMLFxuICogb25seSB3aGVuIHRoZSByZXF1ZXN0ZWRVUkwgaXMgbm90IGFscmVhZHkgYW4gYWJzb2x1dGUgVVJMLlxuICogSWYgdGhlIHJlcXVlc3RVUkwgaXMgYWJzb2x1dGUsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgcmVxdWVzdGVkVVJMIHVudG91Y2hlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSTCBUaGUgYmFzZSBVUkxcbiAqIEBwYXJhbSB7c3RyaW5nfSByZXF1ZXN0ZWRVUkwgQWJzb2x1dGUgb3IgcmVsYXRpdmUgVVJMIHRvIGNvbWJpbmVcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21iaW5lZCBmdWxsIHBhdGhcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBidWlsZEZ1bGxQYXRoKGJhc2VVUkwsIHJlcXVlc3RlZFVSTCkge1xuICBpZiAoYmFzZVVSTCAmJiAhaXNBYnNvbHV0ZVVSTChyZXF1ZXN0ZWRVUkwpKSB7XG4gICAgcmV0dXJuIGNvbWJpbmVVUkxzKGJhc2VVUkwsIHJlcXVlc3RlZFVSTCk7XG4gIH1cbiAgcmV0dXJuIHJlcXVlc3RlZFVSTDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBlbmhhbmNlRXJyb3IgPSByZXF1aXJlKCcuL2VuaGFuY2VFcnJvcicpO1xuXG4vKipcbiAqIENyZWF0ZSBhbiBFcnJvciB3aXRoIHRoZSBzcGVjaWZpZWQgbWVzc2FnZSwgY29uZmlnLCBlcnJvciBjb2RlLCByZXF1ZXN0IGFuZCByZXNwb25zZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbY29kZV0gVGhlIGVycm9yIGNvZGUgKGZvciBleGFtcGxlLCAnRUNPTk5BQk9SVEVEJykuXG4gKiBAcGFyYW0ge09iamVjdH0gW3JlcXVlc3RdIFRoZSByZXF1ZXN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXNwb25zZV0gVGhlIHJlc3BvbnNlLlxuICogQHJldHVybnMge0Vycm9yfSBUaGUgY3JlYXRlZCBlcnJvci5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjcmVhdGVFcnJvcihtZXNzYWdlLCBjb25maWcsIGNvZGUsIHJlcXVlc3QsIHJlc3BvbnNlKSB7XG4gIHZhciBlcnJvciA9IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgcmV0dXJuIGVuaGFuY2VFcnJvcihlcnJvciwgY29uZmlnLCBjb2RlLCByZXF1ZXN0LCByZXNwb25zZSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgdHJhbnNmb3JtRGF0YSA9IHJlcXVpcmUoJy4vdHJhbnNmb3JtRGF0YScpO1xudmFyIGlzQ2FuY2VsID0gcmVxdWlyZSgnLi4vY2FuY2VsL2lzQ2FuY2VsJyk7XG52YXIgZGVmYXVsdHMgPSByZXF1aXJlKCcuLi9kZWZhdWx0cycpO1xuXG4vKipcbiAqIFRocm93cyBhIGBDYW5jZWxgIGlmIGNhbmNlbGxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gKi9cbmZ1bmN0aW9uIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKSB7XG4gIGlmIChjb25maWcuY2FuY2VsVG9rZW4pIHtcbiAgICBjb25maWcuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpO1xuICB9XG59XG5cbi8qKlxuICogRGlzcGF0Y2ggYSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIgdXNpbmcgdGhlIGNvbmZpZ3VyZWQgYWRhcHRlci5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIFRoZSBjb25maWcgdGhhdCBpcyB0byBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdFxuICogQHJldHVybnMge1Byb21pc2V9IFRoZSBQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRpc3BhdGNoUmVxdWVzdChjb25maWcpIHtcbiAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gIC8vIEVuc3VyZSBoZWFkZXJzIGV4aXN0XG4gIGNvbmZpZy5oZWFkZXJzID0gY29uZmlnLmhlYWRlcnMgfHwge307XG5cbiAgLy8gVHJhbnNmb3JtIHJlcXVlc3QgZGF0YVxuICBjb25maWcuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICBjb25maWcsXG4gICAgY29uZmlnLmRhdGEsXG4gICAgY29uZmlnLmhlYWRlcnMsXG4gICAgY29uZmlnLnRyYW5zZm9ybVJlcXVlc3RcbiAgKTtcblxuICAvLyBGbGF0dGVuIGhlYWRlcnNcbiAgY29uZmlnLmhlYWRlcnMgPSB1dGlscy5tZXJnZShcbiAgICBjb25maWcuaGVhZGVycy5jb21tb24gfHwge30sXG4gICAgY29uZmlnLmhlYWRlcnNbY29uZmlnLm1ldGhvZF0gfHwge30sXG4gICAgY29uZmlnLmhlYWRlcnNcbiAgKTtcblxuICB1dGlscy5mb3JFYWNoKFxuICAgIFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJywgJ2NvbW1vbiddLFxuICAgIGZ1bmN0aW9uIGNsZWFuSGVhZGVyQ29uZmlnKG1ldGhvZCkge1xuICAgICAgZGVsZXRlIGNvbmZpZy5oZWFkZXJzW21ldGhvZF07XG4gICAgfVxuICApO1xuXG4gIHZhciBhZGFwdGVyID0gY29uZmlnLmFkYXB0ZXIgfHwgZGVmYXVsdHMuYWRhcHRlcjtcblxuICByZXR1cm4gYWRhcHRlcihjb25maWcpLnRoZW4oZnVuY3Rpb24gb25BZGFwdGVyUmVzb2x1dGlvbihyZXNwb25zZSkge1xuICAgIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgcmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICAgIGNvbmZpZyxcbiAgICAgIHJlc3BvbnNlLmRhdGEsXG4gICAgICByZXNwb25zZS5oZWFkZXJzLFxuICAgICAgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlXG4gICAgKTtcblxuICAgIHJldHVybiByZXNwb25zZTtcbiAgfSwgZnVuY3Rpb24gb25BZGFwdGVyUmVqZWN0aW9uKHJlYXNvbikge1xuICAgIGlmICghaXNDYW5jZWwocmVhc29uKSkge1xuICAgICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgICAvLyBUcmFuc2Zvcm0gcmVzcG9uc2UgZGF0YVxuICAgICAgaWYgKHJlYXNvbiAmJiByZWFzb24ucmVzcG9uc2UpIHtcbiAgICAgICAgcmVhc29uLnJlc3BvbnNlLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIHJlYXNvbi5yZXNwb25zZS5kYXRhLFxuICAgICAgICAgIHJlYXNvbi5yZXNwb25zZS5oZWFkZXJzLFxuICAgICAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZWFzb24pO1xuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogVXBkYXRlIGFuIEVycm9yIHdpdGggdGhlIHNwZWNpZmllZCBjb25maWcsIGVycm9yIGNvZGUsIGFuZCByZXNwb25zZS5cbiAqXG4gKiBAcGFyYW0ge0Vycm9yfSBlcnJvciBUaGUgZXJyb3IgdG8gdXBkYXRlLlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnLlxuICogQHBhcmFtIHtzdHJpbmd9IFtjb2RlXSBUaGUgZXJyb3IgY29kZSAoZm9yIGV4YW1wbGUsICdFQ09OTkFCT1JURUQnKS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVxdWVzdF0gVGhlIHJlcXVlc3QuXG4gKiBAcGFyYW0ge09iamVjdH0gW3Jlc3BvbnNlXSBUaGUgcmVzcG9uc2UuXG4gKiBAcmV0dXJucyB7RXJyb3J9IFRoZSBlcnJvci5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBlbmhhbmNlRXJyb3IoZXJyb3IsIGNvbmZpZywgY29kZSwgcmVxdWVzdCwgcmVzcG9uc2UpIHtcbiAgZXJyb3IuY29uZmlnID0gY29uZmlnO1xuICBpZiAoY29kZSkge1xuICAgIGVycm9yLmNvZGUgPSBjb2RlO1xuICB9XG5cbiAgZXJyb3IucmVxdWVzdCA9IHJlcXVlc3Q7XG4gIGVycm9yLnJlc3BvbnNlID0gcmVzcG9uc2U7XG4gIGVycm9yLmlzQXhpb3NFcnJvciA9IHRydWU7XG5cbiAgZXJyb3IudG9KU09OID0gZnVuY3Rpb24gdG9KU09OKCkge1xuICAgIHJldHVybiB7XG4gICAgICAvLyBTdGFuZGFyZFxuICAgICAgbWVzc2FnZTogdGhpcy5tZXNzYWdlLFxuICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgLy8gTWljcm9zb2Z0XG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5kZXNjcmlwdGlvbixcbiAgICAgIG51bWJlcjogdGhpcy5udW1iZXIsXG4gICAgICAvLyBNb3ppbGxhXG4gICAgICBmaWxlTmFtZTogdGhpcy5maWxlTmFtZSxcbiAgICAgIGxpbmVOdW1iZXI6IHRoaXMubGluZU51bWJlcixcbiAgICAgIGNvbHVtbk51bWJlcjogdGhpcy5jb2x1bW5OdW1iZXIsXG4gICAgICBzdGFjazogdGhpcy5zdGFjayxcbiAgICAgIC8vIEF4aW9zXG4gICAgICBjb25maWc6IHRoaXMuY29uZmlnLFxuICAgICAgY29kZTogdGhpcy5jb2RlXG4gICAgfTtcbiAgfTtcbiAgcmV0dXJuIGVycm9yO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBDb25maWctc3BlY2lmaWMgbWVyZ2UtZnVuY3Rpb24gd2hpY2ggY3JlYXRlcyBhIG5ldyBjb25maWctb2JqZWN0XG4gKiBieSBtZXJnaW5nIHR3byBjb25maWd1cmF0aW9uIG9iamVjdHMgdG9nZXRoZXIuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZzFcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcyXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBOZXcgb2JqZWN0IHJlc3VsdGluZyBmcm9tIG1lcmdpbmcgY29uZmlnMiB0byBjb25maWcxXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gbWVyZ2VDb25maWcoY29uZmlnMSwgY29uZmlnMikge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgY29uZmlnMiA9IGNvbmZpZzIgfHwge307XG4gIHZhciBjb25maWcgPSB7fTtcblxuICB2YXIgdmFsdWVGcm9tQ29uZmlnMktleXMgPSBbJ3VybCcsICdtZXRob2QnLCAnZGF0YSddO1xuICB2YXIgbWVyZ2VEZWVwUHJvcGVydGllc0tleXMgPSBbJ2hlYWRlcnMnLCAnYXV0aCcsICdwcm94eScsICdwYXJhbXMnXTtcbiAgdmFyIGRlZmF1bHRUb0NvbmZpZzJLZXlzID0gW1xuICAgICdiYXNlVVJMJywgJ3RyYW5zZm9ybVJlcXVlc3QnLCAndHJhbnNmb3JtUmVzcG9uc2UnLCAncGFyYW1zU2VyaWFsaXplcicsXG4gICAgJ3RpbWVvdXQnLCAndGltZW91dE1lc3NhZ2UnLCAnd2l0aENyZWRlbnRpYWxzJywgJ2FkYXB0ZXInLCAncmVzcG9uc2VUeXBlJywgJ3hzcmZDb29raWVOYW1lJyxcbiAgICAneHNyZkhlYWRlck5hbWUnLCAnb25VcGxvYWRQcm9ncmVzcycsICdvbkRvd25sb2FkUHJvZ3Jlc3MnLCAnZGVjb21wcmVzcycsXG4gICAgJ21heENvbnRlbnRMZW5ndGgnLCAnbWF4Qm9keUxlbmd0aCcsICdtYXhSZWRpcmVjdHMnLCAndHJhbnNwb3J0JywgJ2h0dHBBZ2VudCcsXG4gICAgJ2h0dHBzQWdlbnQnLCAnY2FuY2VsVG9rZW4nLCAnc29ja2V0UGF0aCcsICdyZXNwb25zZUVuY29kaW5nJ1xuICBdO1xuICB2YXIgZGlyZWN0TWVyZ2VLZXlzID0gWyd2YWxpZGF0ZVN0YXR1cyddO1xuXG4gIGZ1bmN0aW9uIGdldE1lcmdlZFZhbHVlKHRhcmdldCwgc291cmNlKSB7XG4gICAgaWYgKHV0aWxzLmlzUGxhaW5PYmplY3QodGFyZ2V0KSAmJiB1dGlscy5pc1BsYWluT2JqZWN0KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiB1dGlscy5tZXJnZSh0YXJnZXQsIHNvdXJjZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscy5pc1BsYWluT2JqZWN0KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiB1dGlscy5tZXJnZSh7fSwgc291cmNlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzLmlzQXJyYXkoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHNvdXJjZS5zbGljZSgpO1xuICAgIH1cbiAgICByZXR1cm4gc291cmNlO1xuICB9XG5cbiAgZnVuY3Rpb24gbWVyZ2VEZWVwUHJvcGVydGllcyhwcm9wKSB7XG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcyW3Byb3BdKSkge1xuICAgICAgY29uZmlnW3Byb3BdID0gZ2V0TWVyZ2VkVmFsdWUoY29uZmlnMVtwcm9wXSwgY29uZmlnMltwcm9wXSk7XG4gICAgfSBlbHNlIGlmICghdXRpbHMuaXNVbmRlZmluZWQoY29uZmlnMVtwcm9wXSkpIHtcbiAgICAgIGNvbmZpZ1twcm9wXSA9IGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgY29uZmlnMVtwcm9wXSk7XG4gICAgfVxuICB9XG5cbiAgdXRpbHMuZm9yRWFjaCh2YWx1ZUZyb21Db25maWcyS2V5cywgZnVuY3Rpb24gdmFsdWVGcm9tQ29uZmlnMihwcm9wKSB7XG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcyW3Byb3BdKSkge1xuICAgICAgY29uZmlnW3Byb3BdID0gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBjb25maWcyW3Byb3BdKTtcbiAgICB9XG4gIH0pO1xuXG4gIHV0aWxzLmZvckVhY2gobWVyZ2VEZWVwUHJvcGVydGllc0tleXMsIG1lcmdlRGVlcFByb3BlcnRpZXMpO1xuXG4gIHV0aWxzLmZvckVhY2goZGVmYXVsdFRvQ29uZmlnMktleXMsIGZ1bmN0aW9uIGRlZmF1bHRUb0NvbmZpZzIocHJvcCkge1xuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoY29uZmlnMltwcm9wXSkpIHtcbiAgICAgIGNvbmZpZ1twcm9wXSA9IGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgY29uZmlnMltwcm9wXSk7XG4gICAgfSBlbHNlIGlmICghdXRpbHMuaXNVbmRlZmluZWQoY29uZmlnMVtwcm9wXSkpIHtcbiAgICAgIGNvbmZpZ1twcm9wXSA9IGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgY29uZmlnMVtwcm9wXSk7XG4gICAgfVxuICB9KTtcblxuICB1dGlscy5mb3JFYWNoKGRpcmVjdE1lcmdlS2V5cywgZnVuY3Rpb24gbWVyZ2UocHJvcCkge1xuICAgIGlmIChwcm9wIGluIGNvbmZpZzIpIHtcbiAgICAgIGNvbmZpZ1twcm9wXSA9IGdldE1lcmdlZFZhbHVlKGNvbmZpZzFbcHJvcF0sIGNvbmZpZzJbcHJvcF0pO1xuICAgIH0gZWxzZSBpZiAocHJvcCBpbiBjb25maWcxKSB7XG4gICAgICBjb25maWdbcHJvcF0gPSBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGNvbmZpZzFbcHJvcF0pO1xuICAgIH1cbiAgfSk7XG5cbiAgdmFyIGF4aW9zS2V5cyA9IHZhbHVlRnJvbUNvbmZpZzJLZXlzXG4gICAgLmNvbmNhdChtZXJnZURlZXBQcm9wZXJ0aWVzS2V5cylcbiAgICAuY29uY2F0KGRlZmF1bHRUb0NvbmZpZzJLZXlzKVxuICAgIC5jb25jYXQoZGlyZWN0TWVyZ2VLZXlzKTtcblxuICB2YXIgb3RoZXJLZXlzID0gT2JqZWN0XG4gICAgLmtleXMoY29uZmlnMSlcbiAgICAuY29uY2F0KE9iamVjdC5rZXlzKGNvbmZpZzIpKVxuICAgIC5maWx0ZXIoZnVuY3Rpb24gZmlsdGVyQXhpb3NLZXlzKGtleSkge1xuICAgICAgcmV0dXJuIGF4aW9zS2V5cy5pbmRleE9mKGtleSkgPT09IC0xO1xuICAgIH0pO1xuXG4gIHV0aWxzLmZvckVhY2gob3RoZXJLZXlzLCBtZXJnZURlZXBQcm9wZXJ0aWVzKTtcblxuICByZXR1cm4gY29uZmlnO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGNyZWF0ZUVycm9yID0gcmVxdWlyZSgnLi9jcmVhdGVFcnJvcicpO1xuXG4vKipcbiAqIFJlc29sdmUgb3IgcmVqZWN0IGEgUHJvbWlzZSBiYXNlZCBvbiByZXNwb25zZSBzdGF0dXMuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVzb2x2ZSBBIGZ1bmN0aW9uIHRoYXQgcmVzb2x2ZXMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWplY3QgQSBmdW5jdGlvbiB0aGF0IHJlamVjdHMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge29iamVjdH0gcmVzcG9uc2UgVGhlIHJlc3BvbnNlLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHJlc3BvbnNlKSB7XG4gIHZhciB2YWxpZGF0ZVN0YXR1cyA9IHJlc3BvbnNlLmNvbmZpZy52YWxpZGF0ZVN0YXR1cztcbiAgaWYgKCFyZXNwb25zZS5zdGF0dXMgfHwgIXZhbGlkYXRlU3RhdHVzIHx8IHZhbGlkYXRlU3RhdHVzKHJlc3BvbnNlLnN0YXR1cykpIHtcbiAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgfSBlbHNlIHtcbiAgICByZWplY3QoY3JlYXRlRXJyb3IoXG4gICAgICAnUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAnICsgcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgcmVzcG9uc2UuY29uZmlnLFxuICAgICAgbnVsbCxcbiAgICAgIHJlc3BvbnNlLnJlcXVlc3QsXG4gICAgICByZXNwb25zZVxuICAgICkpO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgZGVmYXVsdHMgPSByZXF1aXJlKCcuLy4uL2RlZmF1bHRzJyk7XG5cbi8qKlxuICogVHJhbnNmb3JtIHRoZSBkYXRhIGZvciBhIHJlcXVlc3Qgb3IgYSByZXNwb25zZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fFN0cmluZ30gZGF0YSBUaGUgZGF0YSB0byBiZSB0cmFuc2Zvcm1lZFxuICogQHBhcmFtIHtBcnJheX0gaGVhZGVycyBUaGUgaGVhZGVycyBmb3IgdGhlIHJlcXVlc3Qgb3IgcmVzcG9uc2VcbiAqIEBwYXJhbSB7QXJyYXl8RnVuY3Rpb259IGZucyBBIHNpbmdsZSBmdW5jdGlvbiBvciBBcnJheSBvZiBmdW5jdGlvbnNcbiAqIEByZXR1cm5zIHsqfSBUaGUgcmVzdWx0aW5nIHRyYW5zZm9ybWVkIGRhdGFcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB0cmFuc2Zvcm1EYXRhKGRhdGEsIGhlYWRlcnMsIGZucykge1xuICB2YXIgY29udGV4dCA9IHRoaXMgfHwgZGVmYXVsdHM7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICB1dGlscy5mb3JFYWNoKGZucywgZnVuY3Rpb24gdHJhbnNmb3JtKGZuKSB7XG4gICAgZGF0YSA9IGZuLmNhbGwoY29udGV4dCwgZGF0YSwgaGVhZGVycyk7XG4gIH0pO1xuXG4gIHJldHVybiBkYXRhO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xudmFyIG5vcm1hbGl6ZUhlYWRlck5hbWUgPSByZXF1aXJlKCcuL2hlbHBlcnMvbm9ybWFsaXplSGVhZGVyTmFtZScpO1xudmFyIGVuaGFuY2VFcnJvciA9IHJlcXVpcmUoJy4vY29yZS9lbmhhbmNlRXJyb3InKTtcblxudmFyIERFRkFVTFRfQ09OVEVOVF9UWVBFID0ge1xuICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcbn07XG5cbmZ1bmN0aW9uIHNldENvbnRlbnRUeXBlSWZVbnNldChoZWFkZXJzLCB2YWx1ZSkge1xuICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGhlYWRlcnMpICYmIHV0aWxzLmlzVW5kZWZpbmVkKGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddKSkge1xuICAgIGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gdmFsdWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0RGVmYXVsdEFkYXB0ZXIoKSB7XG4gIHZhciBhZGFwdGVyO1xuICBpZiAodHlwZW9mIFhNTEh0dHBSZXF1ZXN0ICE9PSAndW5kZWZpbmVkJykge1xuICAgIC8vIEZvciBicm93c2VycyB1c2UgWEhSIGFkYXB0ZXJcbiAgICBhZGFwdGVyID0gcmVxdWlyZSgnLi9hZGFwdGVycy94aHInKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHByb2Nlc3MpID09PSAnW29iamVjdCBwcm9jZXNzXScpIHtcbiAgICAvLyBGb3Igbm9kZSB1c2UgSFRUUCBhZGFwdGVyXG4gICAgYWRhcHRlciA9IHJlcXVpcmUoJy4vYWRhcHRlcnMvaHR0cCcpO1xuICB9XG4gIHJldHVybiBhZGFwdGVyO1xufVxuXG5mdW5jdGlvbiBzdHJpbmdpZnlTYWZlbHkocmF3VmFsdWUsIHBhcnNlciwgZW5jb2Rlcikge1xuICBpZiAodXRpbHMuaXNTdHJpbmcocmF3VmFsdWUpKSB7XG4gICAgdHJ5IHtcbiAgICAgIChwYXJzZXIgfHwgSlNPTi5wYXJzZSkocmF3VmFsdWUpO1xuICAgICAgcmV0dXJuIHV0aWxzLnRyaW0ocmF3VmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlLm5hbWUgIT09ICdTeW50YXhFcnJvcicpIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gKGVuY29kZXIgfHwgSlNPTi5zdHJpbmdpZnkpKHJhd1ZhbHVlKTtcbn1cblxudmFyIGRlZmF1bHRzID0ge1xuXG4gIHRyYW5zaXRpb25hbDoge1xuICAgIHNpbGVudEpTT05QYXJzaW5nOiB0cnVlLFxuICAgIGZvcmNlZEpTT05QYXJzaW5nOiB0cnVlLFxuICAgIGNsYXJpZnlUaW1lb3V0RXJyb3I6IGZhbHNlXG4gIH0sXG5cbiAgYWRhcHRlcjogZ2V0RGVmYXVsdEFkYXB0ZXIoKSxcblxuICB0cmFuc2Zvcm1SZXF1ZXN0OiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVxdWVzdChkYXRhLCBoZWFkZXJzKSB7XG4gICAgbm9ybWFsaXplSGVhZGVyTmFtZShoZWFkZXJzLCAnQWNjZXB0Jyk7XG4gICAgbm9ybWFsaXplSGVhZGVyTmFtZShoZWFkZXJzLCAnQ29udGVudC1UeXBlJyk7XG5cbiAgICBpZiAodXRpbHMuaXNGb3JtRGF0YShkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNBcnJheUJ1ZmZlcihkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNCdWZmZXIoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzU3RyZWFtKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0ZpbGUoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzQmxvYihkYXRhKVxuICAgICkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIGlmICh1dGlscy5pc0FycmF5QnVmZmVyVmlldyhkYXRhKSkge1xuICAgICAgcmV0dXJuIGRhdGEuYnVmZmVyO1xuICAgIH1cbiAgICBpZiAodXRpbHMuaXNVUkxTZWFyY2hQYXJhbXMoZGF0YSkpIHtcbiAgICAgIHNldENvbnRlbnRUeXBlSWZVbnNldChoZWFkZXJzLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgnKTtcbiAgICAgIHJldHVybiBkYXRhLnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIGlmICh1dGlscy5pc09iamVjdChkYXRhKSB8fCAoaGVhZGVycyAmJiBoZWFkZXJzWydDb250ZW50LVR5cGUnXSA9PT0gJ2FwcGxpY2F0aW9uL2pzb24nKSkge1xuICAgICAgc2V0Q29udGVudFR5cGVJZlVuc2V0KGhlYWRlcnMsICdhcHBsaWNhdGlvbi9qc29uJyk7XG4gICAgICByZXR1cm4gc3RyaW5naWZ5U2FmZWx5KGRhdGEpO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YTtcbiAgfV0sXG5cbiAgdHJhbnNmb3JtUmVzcG9uc2U6IFtmdW5jdGlvbiB0cmFuc2Zvcm1SZXNwb25zZShkYXRhKSB7XG4gICAgdmFyIHRyYW5zaXRpb25hbCA9IHRoaXMudHJhbnNpdGlvbmFsO1xuICAgIHZhciBzaWxlbnRKU09OUGFyc2luZyA9IHRyYW5zaXRpb25hbCAmJiB0cmFuc2l0aW9uYWwuc2lsZW50SlNPTlBhcnNpbmc7XG4gICAgdmFyIGZvcmNlZEpTT05QYXJzaW5nID0gdHJhbnNpdGlvbmFsICYmIHRyYW5zaXRpb25hbC5mb3JjZWRKU09OUGFyc2luZztcbiAgICB2YXIgc3RyaWN0SlNPTlBhcnNpbmcgPSAhc2lsZW50SlNPTlBhcnNpbmcgJiYgdGhpcy5yZXNwb25zZVR5cGUgPT09ICdqc29uJztcblxuICAgIGlmIChzdHJpY3RKU09OUGFyc2luZyB8fCAoZm9yY2VkSlNPTlBhcnNpbmcgJiYgdXRpbHMuaXNTdHJpbmcoZGF0YSkgJiYgZGF0YS5sZW5ndGgpKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShkYXRhKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKHN0cmljdEpTT05QYXJzaW5nKSB7XG4gICAgICAgICAgaWYgKGUubmFtZSA9PT0gJ1N5bnRheEVycm9yJykge1xuICAgICAgICAgICAgdGhyb3cgZW5oYW5jZUVycm9yKGUsIHRoaXMsICdFX0pTT05fUEFSU0UnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XSxcblxuICAvKipcbiAgICogQSB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyB0byBhYm9ydCBhIHJlcXVlc3QuIElmIHNldCB0byAwIChkZWZhdWx0KSBhXG4gICAqIHRpbWVvdXQgaXMgbm90IGNyZWF0ZWQuXG4gICAqL1xuICB0aW1lb3V0OiAwLFxuXG4gIHhzcmZDb29raWVOYW1lOiAnWFNSRi1UT0tFTicsXG4gIHhzcmZIZWFkZXJOYW1lOiAnWC1YU1JGLVRPS0VOJyxcblxuICBtYXhDb250ZW50TGVuZ3RoOiAtMSxcbiAgbWF4Qm9keUxlbmd0aDogLTEsXG5cbiAgdmFsaWRhdGVTdGF0dXM6IGZ1bmN0aW9uIHZhbGlkYXRlU3RhdHVzKHN0YXR1cykge1xuICAgIHJldHVybiBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMDtcbiAgfVxufTtcblxuZGVmYXVsdHMuaGVhZGVycyA9IHtcbiAgY29tbW9uOiB7XG4gICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyonXG4gIH1cbn07XG5cbnV0aWxzLmZvckVhY2goWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZE5vRGF0YShtZXRob2QpIHtcbiAgZGVmYXVsdHMuaGVhZGVyc1ttZXRob2RdID0ge307XG59KTtcblxudXRpbHMuZm9yRWFjaChbJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2RXaXRoRGF0YShtZXRob2QpIHtcbiAgZGVmYXVsdHMuaGVhZGVyc1ttZXRob2RdID0gdXRpbHMubWVyZ2UoREVGQVVMVF9DT05URU5UX1RZUEUpO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmYXVsdHM7XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYmluZChmbiwgdGhpc0FyZykge1xuICByZXR1cm4gZnVuY3Rpb24gd3JhcCgpIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIGFyZ3NbaV0gPSBhcmd1bWVudHNbaV07XG4gICAgfVxuICAgIHJldHVybiBmbi5hcHBseSh0aGlzQXJnLCBhcmdzKTtcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxuZnVuY3Rpb24gZW5jb2RlKHZhbCkge1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHZhbCkuXG4gICAgcmVwbGFjZSgvJTNBL2dpLCAnOicpLlxuICAgIHJlcGxhY2UoLyUyNC9nLCAnJCcpLlxuICAgIHJlcGxhY2UoLyUyQy9naSwgJywnKS5cbiAgICByZXBsYWNlKC8lMjAvZywgJysnKS5cbiAgICByZXBsYWNlKC8lNUIvZ2ksICdbJykuXG4gICAgcmVwbGFjZSgvJTVEL2dpLCAnXScpO1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgVVJMIGJ5IGFwcGVuZGluZyBwYXJhbXMgdG8gdGhlIGVuZFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIGJhc2Ugb2YgdGhlIHVybCAoZS5nLiwgaHR0cDovL3d3dy5nb29nbGUuY29tKVxuICogQHBhcmFtIHtvYmplY3R9IFtwYXJhbXNdIFRoZSBwYXJhbXMgdG8gYmUgYXBwZW5kZWRcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBmb3JtYXR0ZWQgdXJsXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYnVpbGRVUkwodXJsLCBwYXJhbXMsIHBhcmFtc1NlcmlhbGl6ZXIpIHtcbiAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gIGlmICghcGFyYW1zKSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuXG4gIHZhciBzZXJpYWxpemVkUGFyYW1zO1xuICBpZiAocGFyYW1zU2VyaWFsaXplcikge1xuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSBwYXJhbXNTZXJpYWxpemVyKHBhcmFtcyk7XG4gIH0gZWxzZSBpZiAodXRpbHMuaXNVUkxTZWFyY2hQYXJhbXMocGFyYW1zKSkge1xuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSBwYXJhbXMudG9TdHJpbmcoKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgcGFydHMgPSBbXTtcblxuICAgIHV0aWxzLmZvckVhY2gocGFyYW1zLCBmdW5jdGlvbiBzZXJpYWxpemUodmFsLCBrZXkpIHtcbiAgICAgIGlmICh2YWwgPT09IG51bGwgfHwgdHlwZW9mIHZhbCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodXRpbHMuaXNBcnJheSh2YWwpKSB7XG4gICAgICAgIGtleSA9IGtleSArICdbXSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWwgPSBbdmFsXTtcbiAgICAgIH1cblxuICAgICAgdXRpbHMuZm9yRWFjaCh2YWwsIGZ1bmN0aW9uIHBhcnNlVmFsdWUodikge1xuICAgICAgICBpZiAodXRpbHMuaXNEYXRlKHYpKSB7XG4gICAgICAgICAgdiA9IHYudG9JU09TdHJpbmcoKTtcbiAgICAgICAgfSBlbHNlIGlmICh1dGlscy5pc09iamVjdCh2KSkge1xuICAgICAgICAgIHYgPSBKU09OLnN0cmluZ2lmeSh2KTtcbiAgICAgICAgfVxuICAgICAgICBwYXJ0cy5wdXNoKGVuY29kZShrZXkpICsgJz0nICsgZW5jb2RlKHYpKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHBhcnRzLmpvaW4oJyYnKTtcbiAgfVxuXG4gIGlmIChzZXJpYWxpemVkUGFyYW1zKSB7XG4gICAgdmFyIGhhc2htYXJrSW5kZXggPSB1cmwuaW5kZXhPZignIycpO1xuICAgIGlmIChoYXNobWFya0luZGV4ICE9PSAtMSkge1xuICAgICAgdXJsID0gdXJsLnNsaWNlKDAsIGhhc2htYXJrSW5kZXgpO1xuICAgIH1cblxuICAgIHVybCArPSAodXJsLmluZGV4T2YoJz8nKSA9PT0gLTEgPyAnPycgOiAnJicpICsgc2VyaWFsaXplZFBhcmFtcztcbiAgfVxuXG4gIHJldHVybiB1cmw7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgVVJMIGJ5IGNvbWJpbmluZyB0aGUgc3BlY2lmaWVkIFVSTHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSTCBUaGUgYmFzZSBVUkxcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGl2ZVVSTCBUaGUgcmVsYXRpdmUgVVJMXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29tYmluZWQgVVJMXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY29tYmluZVVSTHMoYmFzZVVSTCwgcmVsYXRpdmVVUkwpIHtcbiAgcmV0dXJuIHJlbGF0aXZlVVJMXG4gICAgPyBiYXNlVVJMLnJlcGxhY2UoL1xcLyskLywgJycpICsgJy8nICsgcmVsYXRpdmVVUkwucmVwbGFjZSgvXlxcLysvLCAnJylcbiAgICA6IGJhc2VVUkw7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gKFxuICB1dGlscy5pc1N0YW5kYXJkQnJvd3NlckVudigpID9cblxuICAvLyBTdGFuZGFyZCBicm93c2VyIGVudnMgc3VwcG9ydCBkb2N1bWVudC5jb29raWVcbiAgICAoZnVuY3Rpb24gc3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgd3JpdGU6IGZ1bmN0aW9uIHdyaXRlKG5hbWUsIHZhbHVlLCBleHBpcmVzLCBwYXRoLCBkb21haW4sIHNlY3VyZSkge1xuICAgICAgICAgIHZhciBjb29raWUgPSBbXTtcbiAgICAgICAgICBjb29raWUucHVzaChuYW1lICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKSk7XG5cbiAgICAgICAgICBpZiAodXRpbHMuaXNOdW1iZXIoZXhwaXJlcykpIHtcbiAgICAgICAgICAgIGNvb2tpZS5wdXNoKCdleHBpcmVzPScgKyBuZXcgRGF0ZShleHBpcmVzKS50b0dNVFN0cmluZygpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodXRpbHMuaXNTdHJpbmcocGF0aCkpIHtcbiAgICAgICAgICAgIGNvb2tpZS5wdXNoKCdwYXRoPScgKyBwYXRoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodXRpbHMuaXNTdHJpbmcoZG9tYWluKSkge1xuICAgICAgICAgICAgY29va2llLnB1c2goJ2RvbWFpbj0nICsgZG9tYWluKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoc2VjdXJlID09PSB0cnVlKSB7XG4gICAgICAgICAgICBjb29raWUucHVzaCgnc2VjdXJlJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZG9jdW1lbnQuY29va2llID0gY29va2llLmpvaW4oJzsgJyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcmVhZDogZnVuY3Rpb24gcmVhZChuYW1lKSB7XG4gICAgICAgICAgdmFyIG1hdGNoID0gZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoJyhefDtcXFxccyopKCcgKyBuYW1lICsgJyk9KFteO10qKScpKTtcbiAgICAgICAgICByZXR1cm4gKG1hdGNoID8gZGVjb2RlVVJJQ29tcG9uZW50KG1hdGNoWzNdKSA6IG51bGwpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKG5hbWUpIHtcbiAgICAgICAgICB0aGlzLndyaXRlKG5hbWUsICcnLCBEYXRlLm5vdygpIC0gODY0MDAwMDApO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0pKCkgOlxuXG4gIC8vIE5vbiBzdGFuZGFyZCBicm93c2VyIGVudiAod2ViIHdvcmtlcnMsIHJlYWN0LW5hdGl2ZSkgbGFjayBuZWVkZWQgc3VwcG9ydC5cbiAgICAoZnVuY3Rpb24gbm9uU3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgd3JpdGU6IGZ1bmN0aW9uIHdyaXRlKCkge30sXG4gICAgICAgIHJlYWQ6IGZ1bmN0aW9uIHJlYWQoKSB7IHJldHVybiBudWxsOyB9LFxuICAgICAgICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZSgpIHt9XG4gICAgICB9O1xuICAgIH0pKClcbik7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgVVJMIGlzIGFic29sdXRlXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgVVJMIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBzcGVjaWZpZWQgVVJMIGlzIGFic29sdXRlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0Fic29sdXRlVVJMKHVybCkge1xuICAvLyBBIFVSTCBpcyBjb25zaWRlcmVkIGFic29sdXRlIGlmIGl0IGJlZ2lucyB3aXRoIFwiPHNjaGVtZT46Ly9cIiBvciBcIi8vXCIgKHByb3RvY29sLXJlbGF0aXZlIFVSTCkuXG4gIC8vIFJGQyAzOTg2IGRlZmluZXMgc2NoZW1lIG5hbWUgYXMgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIGJlZ2lubmluZyB3aXRoIGEgbGV0dGVyIGFuZCBmb2xsb3dlZFxuICAvLyBieSBhbnkgY29tYmluYXRpb24gb2YgbGV0dGVycywgZGlnaXRzLCBwbHVzLCBwZXJpb2QsIG9yIGh5cGhlbi5cbiAgcmV0dXJuIC9eKFthLXpdW2EtelxcZFxcK1xcLVxcLl0qOik/XFwvXFwvL2kudGVzdCh1cmwpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHBheWxvYWQgaXMgYW4gZXJyb3IgdGhyb3duIGJ5IEF4aW9zXG4gKlxuICogQHBhcmFtIHsqfSBwYXlsb2FkIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgcGF5bG9hZCBpcyBhbiBlcnJvciB0aHJvd24gYnkgQXhpb3MsIG90aGVyd2lzZSBmYWxzZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzQXhpb3NFcnJvcihwYXlsb2FkKSB7XG4gIHJldHVybiAodHlwZW9mIHBheWxvYWQgPT09ICdvYmplY3QnKSAmJiAocGF5bG9hZC5pc0F4aW9zRXJyb3IgPT09IHRydWUpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IChcbiAgdXRpbHMuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSA/XG5cbiAgLy8gU3RhbmRhcmQgYnJvd3NlciBlbnZzIGhhdmUgZnVsbCBzdXBwb3J0IG9mIHRoZSBBUElzIG5lZWRlZCB0byB0ZXN0XG4gIC8vIHdoZXRoZXIgdGhlIHJlcXVlc3QgVVJMIGlzIG9mIHRoZSBzYW1lIG9yaWdpbiBhcyBjdXJyZW50IGxvY2F0aW9uLlxuICAgIChmdW5jdGlvbiBzdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgICB2YXIgbXNpZSA9IC8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG4gICAgICB2YXIgdXJsUGFyc2luZ05vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICB2YXIgb3JpZ2luVVJMO1xuXG4gICAgICAvKipcbiAgICAqIFBhcnNlIGEgVVJMIHRvIGRpc2NvdmVyIGl0J3MgY29tcG9uZW50c1xuICAgICpcbiAgICAqIEBwYXJhbSB7U3RyaW5nfSB1cmwgVGhlIFVSTCB0byBiZSBwYXJzZWRcbiAgICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAgKi9cbiAgICAgIGZ1bmN0aW9uIHJlc29sdmVVUkwodXJsKSB7XG4gICAgICAgIHZhciBocmVmID0gdXJsO1xuXG4gICAgICAgIGlmIChtc2llKSB7XG4gICAgICAgIC8vIElFIG5lZWRzIGF0dHJpYnV0ZSBzZXQgdHdpY2UgdG8gbm9ybWFsaXplIHByb3BlcnRpZXNcbiAgICAgICAgICB1cmxQYXJzaW5nTm9kZS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVmKTtcbiAgICAgICAgICBocmVmID0gdXJsUGFyc2luZ05vZGUuaHJlZjtcbiAgICAgICAgfVxuXG4gICAgICAgIHVybFBhcnNpbmdOb2RlLnNldEF0dHJpYnV0ZSgnaHJlZicsIGhyZWYpO1xuXG4gICAgICAgIC8vIHVybFBhcnNpbmdOb2RlIHByb3ZpZGVzIHRoZSBVcmxVdGlscyBpbnRlcmZhY2UgLSBodHRwOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jdXJsdXRpbHNcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBocmVmOiB1cmxQYXJzaW5nTm9kZS5ocmVmLFxuICAgICAgICAgIHByb3RvY29sOiB1cmxQYXJzaW5nTm9kZS5wcm90b2NvbCA/IHVybFBhcnNpbmdOb2RlLnByb3RvY29sLnJlcGxhY2UoLzokLywgJycpIDogJycsXG4gICAgICAgICAgaG9zdDogdXJsUGFyc2luZ05vZGUuaG9zdCxcbiAgICAgICAgICBzZWFyY2g6IHVybFBhcnNpbmdOb2RlLnNlYXJjaCA/IHVybFBhcnNpbmdOb2RlLnNlYXJjaC5yZXBsYWNlKC9eXFw/LywgJycpIDogJycsXG4gICAgICAgICAgaGFzaDogdXJsUGFyc2luZ05vZGUuaGFzaCA/IHVybFBhcnNpbmdOb2RlLmhhc2gucmVwbGFjZSgvXiMvLCAnJykgOiAnJyxcbiAgICAgICAgICBob3N0bmFtZTogdXJsUGFyc2luZ05vZGUuaG9zdG5hbWUsXG4gICAgICAgICAgcG9ydDogdXJsUGFyc2luZ05vZGUucG9ydCxcbiAgICAgICAgICBwYXRobmFtZTogKHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nKSA/XG4gICAgICAgICAgICB1cmxQYXJzaW5nTm9kZS5wYXRobmFtZSA6XG4gICAgICAgICAgICAnLycgKyB1cmxQYXJzaW5nTm9kZS5wYXRobmFtZVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBvcmlnaW5VUkwgPSByZXNvbHZlVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcblxuICAgICAgLyoqXG4gICAgKiBEZXRlcm1pbmUgaWYgYSBVUkwgc2hhcmVzIHRoZSBzYW1lIG9yaWdpbiBhcyB0aGUgY3VycmVudCBsb2NhdGlvblxuICAgICpcbiAgICAqIEBwYXJhbSB7U3RyaW5nfSByZXF1ZXN0VVJMIFRoZSBVUkwgdG8gdGVzdFxuICAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgVVJMIHNoYXJlcyB0aGUgc2FtZSBvcmlnaW4sIG90aGVyd2lzZSBmYWxzZVxuICAgICovXG4gICAgICByZXR1cm4gZnVuY3Rpb24gaXNVUkxTYW1lT3JpZ2luKHJlcXVlc3RVUkwpIHtcbiAgICAgICAgdmFyIHBhcnNlZCA9ICh1dGlscy5pc1N0cmluZyhyZXF1ZXN0VVJMKSkgPyByZXNvbHZlVVJMKHJlcXVlc3RVUkwpIDogcmVxdWVzdFVSTDtcbiAgICAgICAgcmV0dXJuIChwYXJzZWQucHJvdG9jb2wgPT09IG9yaWdpblVSTC5wcm90b2NvbCAmJlxuICAgICAgICAgICAgcGFyc2VkLmhvc3QgPT09IG9yaWdpblVSTC5ob3N0KTtcbiAgICAgIH07XG4gICAgfSkoKSA6XG5cbiAgLy8gTm9uIHN0YW5kYXJkIGJyb3dzZXIgZW52cyAod2ViIHdvcmtlcnMsIHJlYWN0LW5hdGl2ZSkgbGFjayBuZWVkZWQgc3VwcG9ydC5cbiAgICAoZnVuY3Rpb24gbm9uU3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGlzVVJMU2FtZU9yaWdpbigpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9O1xuICAgIH0pKClcbik7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gbm9ybWFsaXplSGVhZGVyTmFtZShoZWFkZXJzLCBub3JtYWxpemVkTmFtZSkge1xuICB1dGlscy5mb3JFYWNoKGhlYWRlcnMsIGZ1bmN0aW9uIHByb2Nlc3NIZWFkZXIodmFsdWUsIG5hbWUpIHtcbiAgICBpZiAobmFtZSAhPT0gbm9ybWFsaXplZE5hbWUgJiYgbmFtZS50b1VwcGVyQ2FzZSgpID09PSBub3JtYWxpemVkTmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICBoZWFkZXJzW25vcm1hbGl6ZWROYW1lXSA9IHZhbHVlO1xuICAgICAgZGVsZXRlIGhlYWRlcnNbbmFtZV07XG4gICAgfVxuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxuLy8gSGVhZGVycyB3aG9zZSBkdXBsaWNhdGVzIGFyZSBpZ25vcmVkIGJ5IG5vZGVcbi8vIGMuZi4gaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9odHRwLmh0bWwjaHR0cF9tZXNzYWdlX2hlYWRlcnNcbnZhciBpZ25vcmVEdXBsaWNhdGVPZiA9IFtcbiAgJ2FnZScsICdhdXRob3JpemF0aW9uJywgJ2NvbnRlbnQtbGVuZ3RoJywgJ2NvbnRlbnQtdHlwZScsICdldGFnJyxcbiAgJ2V4cGlyZXMnLCAnZnJvbScsICdob3N0JywgJ2lmLW1vZGlmaWVkLXNpbmNlJywgJ2lmLXVubW9kaWZpZWQtc2luY2UnLFxuICAnbGFzdC1tb2RpZmllZCcsICdsb2NhdGlvbicsICdtYXgtZm9yd2FyZHMnLCAncHJveHktYXV0aG9yaXphdGlvbicsXG4gICdyZWZlcmVyJywgJ3JldHJ5LWFmdGVyJywgJ3VzZXItYWdlbnQnXG5dO1xuXG4vKipcbiAqIFBhcnNlIGhlYWRlcnMgaW50byBhbiBvYmplY3RcbiAqXG4gKiBgYGBcbiAqIERhdGU6IFdlZCwgMjcgQXVnIDIwMTQgMDg6NTg6NDkgR01UXG4gKiBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb25cbiAqIENvbm5lY3Rpb246IGtlZXAtYWxpdmVcbiAqIFRyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaGVhZGVycyBIZWFkZXJzIG5lZWRpbmcgdG8gYmUgcGFyc2VkXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBIZWFkZXJzIHBhcnNlZCBpbnRvIGFuIG9iamVjdFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHBhcnNlSGVhZGVycyhoZWFkZXJzKSB7XG4gIHZhciBwYXJzZWQgPSB7fTtcbiAgdmFyIGtleTtcbiAgdmFyIHZhbDtcbiAgdmFyIGk7XG5cbiAgaWYgKCFoZWFkZXJzKSB7IHJldHVybiBwYXJzZWQ7IH1cblxuICB1dGlscy5mb3JFYWNoKGhlYWRlcnMuc3BsaXQoJ1xcbicpLCBmdW5jdGlvbiBwYXJzZXIobGluZSkge1xuICAgIGkgPSBsaW5lLmluZGV4T2YoJzonKTtcbiAgICBrZXkgPSB1dGlscy50cmltKGxpbmUuc3Vic3RyKDAsIGkpKS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhbCA9IHV0aWxzLnRyaW0obGluZS5zdWJzdHIoaSArIDEpKTtcblxuICAgIGlmIChrZXkpIHtcbiAgICAgIGlmIChwYXJzZWRba2V5XSAmJiBpZ25vcmVEdXBsaWNhdGVPZi5pbmRleE9mKGtleSkgPj0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoa2V5ID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgICAgcGFyc2VkW2tleV0gPSAocGFyc2VkW2tleV0gPyBwYXJzZWRba2V5XSA6IFtdKS5jb25jYXQoW3ZhbF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyc2VkW2tleV0gPSBwYXJzZWRba2V5XSA/IHBhcnNlZFtrZXldICsgJywgJyArIHZhbCA6IHZhbDtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBwYXJzZWQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFN5bnRhY3RpYyBzdWdhciBmb3IgaW52b2tpbmcgYSBmdW5jdGlvbiBhbmQgZXhwYW5kaW5nIGFuIGFycmF5IGZvciBhcmd1bWVudHMuXG4gKlxuICogQ29tbW9uIHVzZSBjYXNlIHdvdWxkIGJlIHRvIHVzZSBgRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5YC5cbiAqXG4gKiAgYGBganNcbiAqICBmdW5jdGlvbiBmKHgsIHksIHopIHt9XG4gKiAgdmFyIGFyZ3MgPSBbMSwgMiwgM107XG4gKiAgZi5hcHBseShudWxsLCBhcmdzKTtcbiAqICBgYGBcbiAqXG4gKiBXaXRoIGBzcHJlYWRgIHRoaXMgZXhhbXBsZSBjYW4gYmUgcmUtd3JpdHRlbi5cbiAqXG4gKiAgYGBganNcbiAqICBzcHJlYWQoZnVuY3Rpb24oeCwgeSwgeikge30pKFsxLCAyLCAzXSk7XG4gKiAgYGBgXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzcHJlYWQoY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoYXJyKSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFycik7XG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgcGtnID0gcmVxdWlyZSgnLi8uLi8uLi9wYWNrYWdlLmpzb24nKTtcblxudmFyIHZhbGlkYXRvcnMgPSB7fTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcblsnb2JqZWN0JywgJ2Jvb2xlYW4nLCAnbnVtYmVyJywgJ2Z1bmN0aW9uJywgJ3N0cmluZycsICdzeW1ib2wnXS5mb3JFYWNoKGZ1bmN0aW9uKHR5cGUsIGkpIHtcbiAgdmFsaWRhdG9yc1t0eXBlXSA9IGZ1bmN0aW9uIHZhbGlkYXRvcih0aGluZykge1xuICAgIHJldHVybiB0eXBlb2YgdGhpbmcgPT09IHR5cGUgfHwgJ2EnICsgKGkgPCAxID8gJ24gJyA6ICcgJykgKyB0eXBlO1xuICB9O1xufSk7XG5cbnZhciBkZXByZWNhdGVkV2FybmluZ3MgPSB7fTtcbnZhciBjdXJyZW50VmVyQXJyID0gcGtnLnZlcnNpb24uc3BsaXQoJy4nKTtcblxuLyoqXG4gKiBDb21wYXJlIHBhY2thZ2UgdmVyc2lvbnNcbiAqIEBwYXJhbSB7c3RyaW5nfSB2ZXJzaW9uXG4gKiBAcGFyYW0ge3N0cmluZz99IHRoYW5WZXJzaW9uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNPbGRlclZlcnNpb24odmVyc2lvbiwgdGhhblZlcnNpb24pIHtcbiAgdmFyIHBrZ1ZlcnNpb25BcnIgPSB0aGFuVmVyc2lvbiA/IHRoYW5WZXJzaW9uLnNwbGl0KCcuJykgOiBjdXJyZW50VmVyQXJyO1xuICB2YXIgZGVzdFZlciA9IHZlcnNpb24uc3BsaXQoJy4nKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAzOyBpKyspIHtcbiAgICBpZiAocGtnVmVyc2lvbkFycltpXSA+IGRlc3RWZXJbaV0pIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAocGtnVmVyc2lvbkFycltpXSA8IGRlc3RWZXJbaV0pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIFRyYW5zaXRpb25hbCBvcHRpb24gdmFsaWRhdG9yXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufGJvb2xlYW4/fSB2YWxpZGF0b3JcbiAqIEBwYXJhbSB7c3RyaW5nP30gdmVyc2lvblxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2VcbiAqIEByZXR1cm5zIHtmdW5jdGlvbn1cbiAqL1xudmFsaWRhdG9ycy50cmFuc2l0aW9uYWwgPSBmdW5jdGlvbiB0cmFuc2l0aW9uYWwodmFsaWRhdG9yLCB2ZXJzaW9uLCBtZXNzYWdlKSB7XG4gIHZhciBpc0RlcHJlY2F0ZWQgPSB2ZXJzaW9uICYmIGlzT2xkZXJWZXJzaW9uKHZlcnNpb24pO1xuXG4gIGZ1bmN0aW9uIGZvcm1hdE1lc3NhZ2Uob3B0LCBkZXNjKSB7XG4gICAgcmV0dXJuICdbQXhpb3MgdicgKyBwa2cudmVyc2lvbiArICddIFRyYW5zaXRpb25hbCBvcHRpb24gXFwnJyArIG9wdCArICdcXCcnICsgZGVzYyArIChtZXNzYWdlID8gJy4gJyArIG1lc3NhZ2UgOiAnJyk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICByZXR1cm4gZnVuY3Rpb24odmFsdWUsIG9wdCwgb3B0cykge1xuICAgIGlmICh2YWxpZGF0b3IgPT09IGZhbHNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZm9ybWF0TWVzc2FnZShvcHQsICcgaGFzIGJlZW4gcmVtb3ZlZCBpbiAnICsgdmVyc2lvbikpO1xuICAgIH1cblxuICAgIGlmIChpc0RlcHJlY2F0ZWQgJiYgIWRlcHJlY2F0ZWRXYXJuaW5nc1tvcHRdKSB7XG4gICAgICBkZXByZWNhdGVkV2FybmluZ3Nbb3B0XSA9IHRydWU7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBmb3JtYXRNZXNzYWdlKFxuICAgICAgICAgIG9wdCxcbiAgICAgICAgICAnIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdicgKyB2ZXJzaW9uICsgJyBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZWFyIGZ1dHVyZSdcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdG9yID8gdmFsaWRhdG9yKHZhbHVlLCBvcHQsIG9wdHMpIDogdHJ1ZTtcbiAgfTtcbn07XG5cbi8qKlxuICogQXNzZXJ0IG9iamVjdCdzIHByb3BlcnRpZXMgdHlwZVxuICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAqIEBwYXJhbSB7b2JqZWN0fSBzY2hlbWFcbiAqIEBwYXJhbSB7Ym9vbGVhbj99IGFsbG93VW5rbm93blxuICovXG5cbmZ1bmN0aW9uIGFzc2VydE9wdGlvbnMob3B0aW9ucywgc2NoZW1hLCBhbGxvd1Vua25vd24pIHtcbiAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ29wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgfVxuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9wdGlvbnMpO1xuICB2YXIgaSA9IGtleXMubGVuZ3RoO1xuICB3aGlsZSAoaS0tID4gMCkge1xuICAgIHZhciBvcHQgPSBrZXlzW2ldO1xuICAgIHZhciB2YWxpZGF0b3IgPSBzY2hlbWFbb3B0XTtcbiAgICBpZiAodmFsaWRhdG9yKSB7XG4gICAgICB2YXIgdmFsdWUgPSBvcHRpb25zW29wdF07XG4gICAgICB2YXIgcmVzdWx0ID0gdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWxpZGF0b3IodmFsdWUsIG9wdCwgb3B0aW9ucyk7XG4gICAgICBpZiAocmVzdWx0ICE9PSB0cnVlKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ29wdGlvbiAnICsgb3B0ICsgJyBtdXN0IGJlICcgKyByZXN1bHQpO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChhbGxvd1Vua25vd24gIT09IHRydWUpIHtcbiAgICAgIHRocm93IEVycm9yKCdVbmtub3duIG9wdGlvbiAnICsgb3B0KTtcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGlzT2xkZXJWZXJzaW9uOiBpc09sZGVyVmVyc2lvbixcbiAgYXNzZXJ0T3B0aW9uczogYXNzZXJ0T3B0aW9ucyxcbiAgdmFsaWRhdG9yczogdmFsaWRhdG9yc1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGJpbmQgPSByZXF1aXJlKCcuL2hlbHBlcnMvYmluZCcpO1xuXG4vLyB1dGlscyBpcyBhIGxpYnJhcnkgb2YgZ2VuZXJpYyBoZWxwZXIgZnVuY3Rpb25zIG5vbi1zcGVjaWZpYyB0byBheGlvc1xuXG52YXIgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIEFycmF5XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gQXJyYXksIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5KHZhbCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWwpID09PSAnW29iamVjdCBBcnJheV0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIHVuZGVmaW5lZFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSB2YWx1ZSBpcyB1bmRlZmluZWQsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1VuZGVmaW5lZCh2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICd1bmRlZmluZWQnO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQnVmZmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0J1ZmZlcih2YWwpIHtcbiAgcmV0dXJuIHZhbCAhPT0gbnVsbCAmJiAhaXNVbmRlZmluZWQodmFsKSAmJiB2YWwuY29uc3RydWN0b3IgIT09IG51bGwgJiYgIWlzVW5kZWZpbmVkKHZhbC5jb25zdHJ1Y3RvcilcbiAgICAmJiB0eXBlb2YgdmFsLmNvbnN0cnVjdG9yLmlzQnVmZmVyID09PSAnZnVuY3Rpb24nICYmIHZhbC5jb25zdHJ1Y3Rvci5pc0J1ZmZlcih2YWwpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5QnVmZmVyKHZhbCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWwpID09PSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRm9ybURhdGFcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBGb3JtRGF0YSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRm9ybURhdGEodmFsKSB7XG4gIHJldHVybiAodHlwZW9mIEZvcm1EYXRhICE9PSAndW5kZWZpbmVkJykgJiYgKHZhbCBpbnN0YW5jZW9mIEZvcm1EYXRhKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIHZpZXcgb24gYW4gQXJyYXlCdWZmZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIHZpZXcgb24gYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5QnVmZmVyVmlldyh2YWwpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKCh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnKSAmJiAoQXJyYXlCdWZmZXIuaXNWaWV3KSkge1xuICAgIHJlc3VsdCA9IEFycmF5QnVmZmVyLmlzVmlldyh2YWwpO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdCA9ICh2YWwpICYmICh2YWwuYnVmZmVyKSAmJiAodmFsLmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgU3RyaW5nXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBTdHJpbmcsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1N0cmluZyh2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgTnVtYmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBOdW1iZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc051bWJlcih2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdudW1iZXInO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIE9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIE9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbCkge1xuICByZXR1cm4gdmFsICE9PSBudWxsICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgcGxhaW4gT2JqZWN0XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIHBsYWluIE9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsKSB7XG4gIGlmICh0b1N0cmluZy5jYWxsKHZhbCkgIT09ICdbb2JqZWN0IE9iamVjdF0nKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIHByb3RvdHlwZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWwpO1xuICByZXR1cm4gcHJvdG90eXBlID09PSBudWxsIHx8IHByb3RvdHlwZSA9PT0gT2JqZWN0LnByb3RvdHlwZTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIERhdGVcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIERhdGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0RhdGUodmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IERhdGVdJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZpbGVcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZpbGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0ZpbGUodmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IEZpbGVdJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJsb2JcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJsb2IsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Jsb2IodmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IEJsb2JdJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGdW5jdGlvbiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJlYW1cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFN0cmVhbSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3RyZWFtKHZhbCkge1xuICByZXR1cm4gaXNPYmplY3QodmFsKSAmJiBpc0Z1bmN0aW9uKHZhbC5waXBlKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1VSTFNlYXJjaFBhcmFtcyh2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiBVUkxTZWFyY2hQYXJhbXMgIT09ICd1bmRlZmluZWQnICYmIHZhbCBpbnN0YW5jZW9mIFVSTFNlYXJjaFBhcmFtcztcbn1cblxuLyoqXG4gKiBUcmltIGV4Y2VzcyB3aGl0ZXNwYWNlIG9mZiB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyIFRoZSBTdHJpbmcgdG8gdHJpbVxuICogQHJldHVybnMge1N0cmluZ30gVGhlIFN0cmluZyBmcmVlZCBvZiBleGNlc3Mgd2hpdGVzcGFjZVxuICovXG5mdW5jdGlvbiB0cmltKHN0cikge1xuICByZXR1cm4gc3RyLnRyaW0gPyBzdHIudHJpbSgpIDogc3RyLnJlcGxhY2UoL15cXHMrfFxccyskL2csICcnKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgd2UncmUgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgZW52aXJvbm1lbnRcbiAqXG4gKiBUaGlzIGFsbG93cyBheGlvcyB0byBydW4gaW4gYSB3ZWIgd29ya2VyLCBhbmQgcmVhY3QtbmF0aXZlLlxuICogQm90aCBlbnZpcm9ubWVudHMgc3VwcG9ydCBYTUxIdHRwUmVxdWVzdCwgYnV0IG5vdCBmdWxseSBzdGFuZGFyZCBnbG9iYWxzLlxuICpcbiAqIHdlYiB3b3JrZXJzOlxuICogIHR5cGVvZiB3aW5kb3cgLT4gdW5kZWZpbmVkXG4gKiAgdHlwZW9mIGRvY3VtZW50IC0+IHVuZGVmaW5lZFxuICpcbiAqIHJlYWN0LW5hdGl2ZTpcbiAqICBuYXZpZ2F0b3IucHJvZHVjdCAtPiAnUmVhY3ROYXRpdmUnXG4gKiBuYXRpdmVzY3JpcHRcbiAqICBuYXZpZ2F0b3IucHJvZHVjdCAtPiAnTmF0aXZlU2NyaXB0JyBvciAnTlMnXG4gKi9cbmZ1bmN0aW9uIGlzU3RhbmRhcmRCcm93c2VyRW52KCkge1xuICBpZiAodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgKG5hdmlnYXRvci5wcm9kdWN0ID09PSAnUmVhY3ROYXRpdmUnIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdG9yLnByb2R1Y3QgPT09ICdOYXRpdmVTY3JpcHQnIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdG9yLnByb2R1Y3QgPT09ICdOUycpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnXG4gICk7XG59XG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGFuIEFycmF5IG9yIGFuIE9iamVjdCBpbnZva2luZyBhIGZ1bmN0aW9uIGZvciBlYWNoIGl0ZW0uXG4gKlxuICogSWYgYG9iamAgaXMgYW4gQXJyYXkgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgcGFzc2luZ1xuICogdGhlIHZhbHVlLCBpbmRleCwgYW5kIGNvbXBsZXRlIGFycmF5IGZvciBlYWNoIGl0ZW0uXG4gKlxuICogSWYgJ29iaicgaXMgYW4gT2JqZWN0IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHBhc3NpbmdcbiAqIHRoZSB2YWx1ZSwga2V5LCBhbmQgY29tcGxldGUgb2JqZWN0IGZvciBlYWNoIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fEFycmF5fSBvYmogVGhlIG9iamVjdCB0byBpdGVyYXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIGZvciBlYWNoIGl0ZW1cbiAqL1xuZnVuY3Rpb24gZm9yRWFjaChvYmosIGZuKSB7XG4gIC8vIERvbid0IGJvdGhlciBpZiBubyB2YWx1ZSBwcm92aWRlZFxuICBpZiAob2JqID09PSBudWxsIHx8IHR5cGVvZiBvYmogPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gRm9yY2UgYW4gYXJyYXkgaWYgbm90IGFscmVhZHkgc29tZXRoaW5nIGl0ZXJhYmxlXG4gIGlmICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xuICAgIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICAgIG9iaiA9IFtvYmpdO1xuICB9XG5cbiAgaWYgKGlzQXJyYXkob2JqKSkge1xuICAgIC8vIEl0ZXJhdGUgb3ZlciBhcnJheSB2YWx1ZXNcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IG9iai5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGZuLmNhbGwobnVsbCwgb2JqW2ldLCBpLCBvYmopO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBJdGVyYXRlIG92ZXIgb2JqZWN0IGtleXNcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkge1xuICAgICAgICBmbi5jYWxsKG51bGwsIG9ialtrZXldLCBrZXksIG9iaik7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQWNjZXB0cyB2YXJhcmdzIGV4cGVjdGluZyBlYWNoIGFyZ3VtZW50IHRvIGJlIGFuIG9iamVjdCwgdGhlblxuICogaW1tdXRhYmx5IG1lcmdlcyB0aGUgcHJvcGVydGllcyBvZiBlYWNoIG9iamVjdCBhbmQgcmV0dXJucyByZXN1bHQuXG4gKlxuICogV2hlbiBtdWx0aXBsZSBvYmplY3RzIGNvbnRhaW4gdGhlIHNhbWUga2V5IHRoZSBsYXRlciBvYmplY3QgaW5cbiAqIHRoZSBhcmd1bWVudHMgbGlzdCB3aWxsIHRha2UgcHJlY2VkZW5jZS5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgcmVzdWx0ID0gbWVyZ2Uoe2ZvbzogMTIzfSwge2ZvbzogNDU2fSk7XG4gKiBjb25zb2xlLmxvZyhyZXN1bHQuZm9vKTsgLy8gb3V0cHV0cyA0NTZcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmoxIE9iamVjdCB0byBtZXJnZVxuICogQHJldHVybnMge09iamVjdH0gUmVzdWx0IG9mIGFsbCBtZXJnZSBwcm9wZXJ0aWVzXG4gKi9cbmZ1bmN0aW9uIG1lcmdlKC8qIG9iajEsIG9iajIsIG9iajMsIC4uLiAqLykge1xuICB2YXIgcmVzdWx0ID0ge307XG4gIGZ1bmN0aW9uIGFzc2lnblZhbHVlKHZhbCwga2V5KSB7XG4gICAgaWYgKGlzUGxhaW5PYmplY3QocmVzdWx0W2tleV0pICYmIGlzUGxhaW5PYmplY3QodmFsKSkge1xuICAgICAgcmVzdWx0W2tleV0gPSBtZXJnZShyZXN1bHRba2V5XSwgdmFsKTtcbiAgICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QodmFsKSkge1xuICAgICAgcmVzdWx0W2tleV0gPSBtZXJnZSh7fSwgdmFsKTtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkodmFsKSkge1xuICAgICAgcmVzdWx0W2tleV0gPSB2YWwuc2xpY2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0W2tleV0gPSB2YWw7XG4gICAgfVxuICB9XG5cbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgZm9yRWFjaChhcmd1bWVudHNbaV0sIGFzc2lnblZhbHVlKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEV4dGVuZHMgb2JqZWN0IGEgYnkgbXV0YWJseSBhZGRpbmcgdG8gaXQgdGhlIHByb3BlcnRpZXMgb2Ygb2JqZWN0IGIuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGEgVGhlIG9iamVjdCB0byBiZSBleHRlbmRlZFxuICogQHBhcmFtIHtPYmplY3R9IGIgVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgZnJvbVxuICogQHBhcmFtIHtPYmplY3R9IHRoaXNBcmcgVGhlIG9iamVjdCB0byBiaW5kIGZ1bmN0aW9uIHRvXG4gKiBAcmV0dXJuIHtPYmplY3R9IFRoZSByZXN1bHRpbmcgdmFsdWUgb2Ygb2JqZWN0IGFcbiAqL1xuZnVuY3Rpb24gZXh0ZW5kKGEsIGIsIHRoaXNBcmcpIHtcbiAgZm9yRWFjaChiLCBmdW5jdGlvbiBhc3NpZ25WYWx1ZSh2YWwsIGtleSkge1xuICAgIGlmICh0aGlzQXJnICYmIHR5cGVvZiB2YWwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGFba2V5XSA9IGJpbmQodmFsLCB0aGlzQXJnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYVtrZXldID0gdmFsO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBhO1xufVxuXG4vKipcbiAqIFJlbW92ZSBieXRlIG9yZGVyIG1hcmtlci4gVGhpcyBjYXRjaGVzIEVGIEJCIEJGICh0aGUgVVRGLTggQk9NKVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50IHdpdGggQk9NXG4gKiBAcmV0dXJuIHtzdHJpbmd9IGNvbnRlbnQgdmFsdWUgd2l0aG91dCBCT01cbiAqL1xuZnVuY3Rpb24gc3RyaXBCT00oY29udGVudCkge1xuICBpZiAoY29udGVudC5jaGFyQ29kZUF0KDApID09PSAweEZFRkYpIHtcbiAgICBjb250ZW50ID0gY29udGVudC5zbGljZSgxKTtcbiAgfVxuICByZXR1cm4gY29udGVudDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGlzQXJyYXk6IGlzQXJyYXksXG4gIGlzQXJyYXlCdWZmZXI6IGlzQXJyYXlCdWZmZXIsXG4gIGlzQnVmZmVyOiBpc0J1ZmZlcixcbiAgaXNGb3JtRGF0YTogaXNGb3JtRGF0YSxcbiAgaXNBcnJheUJ1ZmZlclZpZXc6IGlzQXJyYXlCdWZmZXJWaWV3LFxuICBpc1N0cmluZzogaXNTdHJpbmcsXG4gIGlzTnVtYmVyOiBpc051bWJlcixcbiAgaXNPYmplY3Q6IGlzT2JqZWN0LFxuICBpc1BsYWluT2JqZWN0OiBpc1BsYWluT2JqZWN0LFxuICBpc1VuZGVmaW5lZDogaXNVbmRlZmluZWQsXG4gIGlzRGF0ZTogaXNEYXRlLFxuICBpc0ZpbGU6IGlzRmlsZSxcbiAgaXNCbG9iOiBpc0Jsb2IsXG4gIGlzRnVuY3Rpb246IGlzRnVuY3Rpb24sXG4gIGlzU3RyZWFtOiBpc1N0cmVhbSxcbiAgaXNVUkxTZWFyY2hQYXJhbXM6IGlzVVJMU2VhcmNoUGFyYW1zLFxuICBpc1N0YW5kYXJkQnJvd3NlckVudjogaXNTdGFuZGFyZEJyb3dzZXJFbnYsXG4gIGZvckVhY2g6IGZvckVhY2gsXG4gIG1lcmdlOiBtZXJnZSxcbiAgZXh0ZW5kOiBleHRlbmQsXG4gIHRyaW06IHRyaW0sXG4gIHN0cmlwQk9NOiBzdHJpcEJPTVxufTtcbiIsIi8vIHNoaW0gZm9yIHVzaW5nIHByb2Nlc3MgaW4gYnJvd3NlclxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xuXG4vLyBjYWNoZWQgZnJvbSB3aGF0ZXZlciBnbG9iYWwgaXMgcHJlc2VudCBzbyB0aGF0IHRlc3QgcnVubmVycyB0aGF0IHN0dWIgaXRcbi8vIGRvbid0IGJyZWFrIHRoaW5ncy4gIEJ1dCB3ZSBuZWVkIHRvIHdyYXAgaXQgaW4gYSB0cnkgY2F0Y2ggaW4gY2FzZSBpdCBpc1xuLy8gd3JhcHBlZCBpbiBzdHJpY3QgbW9kZSBjb2RlIHdoaWNoIGRvZXNuJ3QgZGVmaW5lIGFueSBnbG9iYWxzLiAgSXQncyBpbnNpZGUgYVxuLy8gZnVuY3Rpb24gYmVjYXVzZSB0cnkvY2F0Y2hlcyBkZW9wdGltaXplIGluIGNlcnRhaW4gZW5naW5lcy5cblxudmFyIGNhY2hlZFNldFRpbWVvdXQ7XG52YXIgY2FjaGVkQ2xlYXJUaW1lb3V0O1xuXG5mdW5jdGlvbiBkZWZhdWx0U2V0VGltb3V0KCkge1xuICAgIHRocm93IG5ldyBFcnJvcignc2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuZnVuY3Rpb24gZGVmYXVsdENsZWFyVGltZW91dCAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbihmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBjbGVhclRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgfVxufSAoKSlcbmZ1bmN0aW9uIHJ1blRpbWVvdXQoZnVuKSB7XG4gICAgaWYgKGNhY2hlZFNldFRpbWVvdXQgPT09IHNldFRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIC8vIGlmIHNldFRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRTZXRUaW1lb3V0ID09PSBkZWZhdWx0U2V0VGltb3V0IHx8ICFjYWNoZWRTZXRUaW1lb3V0KSAmJiBzZXRUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfSBjYXRjaChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbChudWxsLCBmdW4sIDApO1xuICAgICAgICB9IGNhdGNoKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3JcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwodGhpcywgZnVuLCAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG59XG5mdW5jdGlvbiBydW5DbGVhclRpbWVvdXQobWFya2VyKSB7XG4gICAgaWYgKGNhY2hlZENsZWFyVGltZW91dCA9PT0gY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIC8vIGlmIGNsZWFyVGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZENsZWFyVGltZW91dCA9PT0gZGVmYXVsdENsZWFyVGltZW91dCB8fCAhY2FjaGVkQ2xlYXJUaW1lb3V0KSAmJiBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0ICB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKG51bGwsIG1hcmtlcik7XG4gICAgICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3IuXG4gICAgICAgICAgICAvLyBTb21lIHZlcnNpb25zIG9mIEkuRS4gaGF2ZSBkaWZmZXJlbnQgcnVsZXMgZm9yIGNsZWFyVGltZW91dCB2cyBzZXRUaW1lb3V0XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwodGhpcywgbWFya2VyKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG5cbn1cbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG52YXIgY3VycmVudFF1ZXVlO1xudmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuICAgIGlmICghZHJhaW5pbmcgfHwgIWN1cnJlbnRRdWV1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgfVxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgZHJhaW5RdWV1ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGltZW91dCA9IHJ1blRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgICBkcmFpbmluZyA9IHRydWU7XG5cbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIHJ1bkNsZWFyVGltZW91dCh0aW1lb3V0KTtcbn1cblxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHJ1blRpbWVvdXQoZHJhaW5RdWV1ZSk7XG4gICAgfVxufTtcblxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZE9uY2VMaXN0ZW5lciA9IG5vb3A7XG5cbnByb2Nlc3MubGlzdGVuZXJzID0gZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuIFtdIH1cblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG4iLCJ2YXIgZztcblxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcbmcgPSAoZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzO1xufSkoKTtcblxudHJ5IHtcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXG5cdGcgPSBnIHx8IG5ldyBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XG59IGNhdGNoIChlKSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXG5cdGlmICh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKSBnID0gd2luZG93O1xufVxuXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGc7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBFbnVtc18xID0gcmVxdWlyZShcIi4vRW51bXNcIik7XG52YXIgQ29uc3RhbnRzID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIENvbnN0YW50cygpIHtcbiAgICB9XG4gICAgQ29uc3RhbnRzLnJlcXVpcmVkT21uaWNoYW5uZWxDb25maWd1cmF0aW9uUGFyYW1ldGVycyA9IFtcIm9yZ1VybFwiLCBcIm9yZ0lkXCIsIFwid2lkZ2V0SWRcIl07XG4gICAgQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzID0ge1xuICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIlxuICAgIH07XG4gICAgQ29uc3RhbnRzLmJ5cGFzc0NhY2hlSGVhZGVycyA9IHtcbiAgICAgICAgXCJjYWNoZS1jb250cm9sXCI6IFwibm8tc3RvcmUsIG11c3QtcmV2YWxpZGF0ZSwgbm8tY2FjaGVcIixcbiAgICB9O1xuICAgIENvbnN0YW50cy5kZWZhdWx0Q2hhbm5lbElkID0gRW51bXNfMS5DaGFubmVsSWQuTENXO1xuICAgIENvbnN0YW50cy5kZWZhdWx0TG9jYWxlID0gXCJlbi11c1wiO1xuICAgIENvbnN0YW50cy5ub0NvbnRlbnRTdGF0dXNDb2RlID0gMjA0O1xuICAgIENvbnN0YW50cy5zZW5zaXRpdmVQcm9wZXJ0aWVzID0gW1wiQXV0aGVudGljYXRlZFVzZXJUb2tlblwiXTtcbiAgICBDb25zdGFudHMudHJhbnNhY3Rpb25pZCA9IFwidHJhbnNhY3Rpb24taWRcIjtcbiAgICBDb25zdGFudHMuY3VzdG9tZXJEaXNwbGF5TmFtZSA9IFwiY3VzdG9tZXJEaXNwbGF5TmFtZVwiO1xuICAgIHJldHVybiBDb25zdGFudHM7XG59KCkpO1xuZXhwb3J0cy5kZWZhdWx0ID0gQ29uc3RhbnRzO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkxpdmVDaGF0VmVyc2lvbiA9IGV4cG9ydHMuT0NTREtUZWxlbWV0cnlFdmVudCA9IGV4cG9ydHMuQ2hhbm5lbElkID0gZXhwb3J0cy5PcGVyYXRpbmdTeXN0ZW0gPSBleHBvcnRzLkRldmljZVR5cGUgPSBleHBvcnRzLkJyb3dzZXIgPSBleHBvcnRzLkJyb3dzZXJWZW5kb3IgPSB2b2lkIDA7XG52YXIgQnJvd3NlclZlbmRvcjtcbihmdW5jdGlvbiAoQnJvd3NlclZlbmRvcikge1xuICAgIEJyb3dzZXJWZW5kb3JbXCJJRVwiXSA9IFwiSUVcIjtcbiAgICBCcm93c2VyVmVuZG9yW1wiQ0hST01FXCJdID0gXCJDaHJvbWVcIjtcbiAgICBCcm93c2VyVmVuZG9yW1wiRklSRUZPWFwiXSA9IFwiRmlyZWZveFwiO1xuICAgIEJyb3dzZXJWZW5kb3JbXCJTQUZBUklcIl0gPSBcIlNhZmFyaVwiO1xuICAgIEJyb3dzZXJWZW5kb3JbXCJFREdFXCJdID0gXCJFZGdlXCI7XG4gICAgQnJvd3NlclZlbmRvcltcIkVER0VfQ0hST01JVU1cIl0gPSBcIkVkZ1wiO1xuICAgIEJyb3dzZXJWZW5kb3JbXCJPUEVSQVwiXSA9IFwiT3BlcmFcIjtcbiAgICBCcm93c2VyVmVuZG9yW1wiVU5LTk9XTlwiXSA9IFwiVW5rbm93blwiO1xufSkoQnJvd3NlclZlbmRvciA9IGV4cG9ydHMuQnJvd3NlclZlbmRvciB8fCAoZXhwb3J0cy5Ccm93c2VyVmVuZG9yID0ge30pKTtcbnZhciBCcm93c2VyO1xuKGZ1bmN0aW9uIChCcm93c2VyKSB7XG4gICAgQnJvd3NlcltCcm93c2VyW1wiQ2hyb21lXCJdID0gMF0gPSBcIkNocm9tZVwiO1xuICAgIEJyb3dzZXJbQnJvd3NlcltcIkZpcmVmb3hcIl0gPSAxXSA9IFwiRmlyZWZveFwiO1xuICAgIEJyb3dzZXJbQnJvd3NlcltcIkllXCJdID0gMl0gPSBcIkllXCI7XG4gICAgQnJvd3NlcltCcm93c2VyW1wiRWRnZVwiXSA9IDNdID0gXCJFZGdlXCI7XG4gICAgQnJvd3NlcltCcm93c2VyW1wiU2FmYXJpXCJdID0gNF0gPSBcIlNhZmFyaVwiO1xuICAgIEJyb3dzZXJbQnJvd3NlcltcIk5vbmVcIl0gPSA1XSA9IFwiTm9uZVwiO1xufSkoQnJvd3NlciA9IGV4cG9ydHMuQnJvd3NlciB8fCAoZXhwb3J0cy5Ccm93c2VyID0ge30pKTtcbnZhciBEZXZpY2VUeXBlO1xuKGZ1bmN0aW9uIChEZXZpY2VUeXBlKSB7XG4gICAgRGV2aWNlVHlwZVtcIkRlc2t0b3BcIl0gPSBcIkRlc2t0b3BcIjtcbiAgICBEZXZpY2VUeXBlW1wiTW9iaWxlXCJdID0gXCJNb2JpbGVcIjtcbiAgICBEZXZpY2VUeXBlW1wiVGFibGV0XCJdID0gXCJUYWJsZXRcIjtcbn0pKERldmljZVR5cGUgPSBleHBvcnRzLkRldmljZVR5cGUgfHwgKGV4cG9ydHMuRGV2aWNlVHlwZSA9IHt9KSk7XG52YXIgT3BlcmF0aW5nU3lzdGVtO1xuKGZ1bmN0aW9uIChPcGVyYXRpbmdTeXN0ZW0pIHtcbiAgICBPcGVyYXRpbmdTeXN0ZW1bXCJXSU5ET1dTXCJdID0gXCJXaW5kb3dzXCI7XG4gICAgT3BlcmF0aW5nU3lzdGVtW1wiTUFDT1NYXCJdID0gXCJNYWMgT1MgWFwiO1xuICAgIE9wZXJhdGluZ1N5c3RlbVtcIldJTkRPV1NfUEhPTkVcIl0gPSBcIldpbmRvd3MgUGhvbmVcIjtcbiAgICBPcGVyYXRpbmdTeXN0ZW1bXCJXSU5ET1dTX1JUXCJdID0gXCJXaW5kb3dzIFJUXCI7XG4gICAgT3BlcmF0aW5nU3lzdGVtW1wiSU9TXCJdID0gXCJpT1NcIjtcbiAgICBPcGVyYXRpbmdTeXN0ZW1bXCJBTkRST0lEXCJdID0gXCJBbmRyb2lkXCI7XG4gICAgT3BlcmF0aW5nU3lzdGVtW1wiTElOVVhcIl0gPSBcIkxpbnV4XCI7XG4gICAgT3BlcmF0aW5nU3lzdGVtW1wiVU5LTk9XTlwiXSA9IFwiVW5rbm93blwiO1xufSkoT3BlcmF0aW5nU3lzdGVtID0gZXhwb3J0cy5PcGVyYXRpbmdTeXN0ZW0gfHwgKGV4cG9ydHMuT3BlcmF0aW5nU3lzdGVtID0ge30pKTtcbnZhciBDaGFubmVsSWQ7XG4oZnVuY3Rpb24gKENoYW5uZWxJZCkge1xuICAgIENoYW5uZWxJZFtcIkxDV1wiXSA9IFwibGN3XCI7XG4gICAgQ2hhbm5lbElkW1wiU01TXCJdID0gXCJzbXNcIjtcbiAgICBDaGFubmVsSWRbXCJGQUNFQk9PS1wiXSA9IFwiZmFjZWJvb2tcIjtcbiAgICBDaGFubmVsSWRbXCJXRUNIQVRcIl0gPSBcIndlY2hhdFwiO1xufSkoQ2hhbm5lbElkID0gZXhwb3J0cy5DaGFubmVsSWQgfHwgKGV4cG9ydHMuQ2hhbm5lbElkID0ge30pKTtcbnZhciBPQ1NES1RlbGVtZXRyeUV2ZW50O1xuKGZ1bmN0aW9uIChPQ1NES1RlbGVtZXRyeUV2ZW50KSB7XG4gICAgT0NTREtUZWxlbWV0cnlFdmVudFtcIkdFVENIQVRDT05GSUdcIl0gPSBcIkdldENoYXRDb25maWdcIjtcbiAgICBPQ1NES1RlbGVtZXRyeUV2ZW50W1wiR0VUQ0hBVENPTkZJR1NVQ0NFU1NcIl0gPSBcIkdldENoYXRDb25maWdTdWNjZWVkZWRcIjtcbiAgICBPQ1NES1RlbGVtZXRyeUV2ZW50W1wiR0VUUkVDT05ORUNUQUJMRUNIQVRTXCJdID0gXCJHZXRSZWNvbm5uZWN0YWJsZUNoYXRzXCI7XG4gICAgT0NTREtUZWxlbWV0cnlFdmVudFtcIkdFVFJFQ09OTkVDVEFWQUlMQUJJTElUWVwiXSA9IFwiR2V0UmVjb25ubmVjdGFibGVBdmFpbGFiaWxpdHlcIjtcbiAgICBPQ1NES1RlbGVtZXRyeUV2ZW50W1wiR0VUQ0hBVFRPS0VOU1RBUlRFRFwiXSA9IFwiR2V0Q2hhdFRva2VuU3RhcnRlZFwiO1xuICAgIE9DU0RLVGVsZW1ldHJ5RXZlbnRbXCJHRVRDSEFUVE9LRU5TVUNDRUVERURcIl0gPSBcIkdldENoYXRUb2tlblN1Y2NlZWRlZFwiO1xuICAgIE9DU0RLVGVsZW1ldHJ5RXZlbnRbXCJHRVRDSEFUVE9LRU5GQUlMRURcIl0gPSBcIkdldENoYXRUb2tlbkZhaWxlZFwiO1xuICAgIE9DU0RLVGVsZW1ldHJ5RXZlbnRbXCJHRVRMV0lTVEFUVVNTVEFSVEVEXCJdID0gXCJHZXRMd2lTdGF0dXNTdGFydGVkXCI7XG4gICAgT0NTREtUZWxlbWV0cnlFdmVudFtcIkdFVExXSVNUQVRVU1NVQ0NFRURFRFwiXSA9IFwiR2V0THdpU3RhdHVzU3VjY2VlZGVkXCI7XG4gICAgT0NTREtUZWxlbWV0cnlFdmVudFtcIkdFVExXSVNUQVRVU0ZBSUxFRFwiXSA9IFwiR2V0THdpU3RhdHVzRmFpbGVkXCI7XG4gICAgT0NTREtUZWxlbWV0cnlFdmVudFtcIlNFU1NJT05JTklUU1RBUlRFRFwiXSA9IFwiU2Vzc2lvbkluaXRTdGFydGVkXCI7XG4gICAgT0NTREtUZWxlbWV0cnlFdmVudFtcIlNFU1NJT05JTklUU1VDQ0VFREVEXCJdID0gXCJTZXNzaW9uSW5pdFN1Y2NlZWRlZFwiO1xuICAgIE9DU0RLVGVsZW1ldHJ5RXZlbnRbXCJTRVNTSU9OSU5JVEZBSUxFRFwiXSA9IFwiU2Vzc2lvbkluaXRGYWlsZWRcIjtcbiAgICBPQ1NES1RlbGVtZXRyeUV2ZW50W1wiU0VTU0lPTkNMT1NFU1RBUlRFRFwiXSA9IFwiU2Vzc2lvbkNsb3NlU3RhcnRlZFwiO1xuICAgIE9DU0RLVGVsZW1ldHJ5RXZlbnRbXCJTRVNTSU9OQ0xPU0VTVUNDRUVERURcIl0gPSBcIlNlc3Npb25DbG9zZVN1Y2NlZWRlZFwiO1xuICAgIE9DU0RLVGVsZW1ldHJ5RXZlbnRbXCJTRVNTSU9OQ0xPU0VGQUlMRURcIl0gPSBcIlNlc3Npb25DbG9zZUZhaWxlZFwiO1xuICAgIE9DU0RLVGVsZW1ldHJ5RXZlbnRbXCJTVUJNSVRQT1NUQ0hBVFNUQVJURURcIl0gPSBcIlN1Ym1pdFBvc3RDaGF0U3RhcnRlZFwiO1xuICAgIE9DU0RLVGVsZW1ldHJ5RXZlbnRbXCJTVUJNSVRQT1NUQ0hBVFNVQ0NFRURFRFwiXSA9IFwiU3VibWl0UG9zdENoYXRTdWNjZWVkZWRcIjtcbiAgICBPQ1NES1RlbGVtZXRyeUV2ZW50W1wiU1VCTUlUUE9TVENIQVRGQUlMRURcIl0gPSBcIlN1Ym1pdFBvc3RDaGF0RmFpbGVkXCI7XG4gICAgT0NTREtUZWxlbWV0cnlFdmVudFtcIkdFVENIQVRUUkFOU0NSSVBUU1RBUlRFRFwiXSA9IFwiR2V0Q2hhdFRyYW5zY3JpcHRTdGFydGVkXCI7XG4gICAgT0NTREtUZWxlbWV0cnlFdmVudFtcIkdFVENIQVRUUkFOU0NSSVBUU1VDQ0VFREVEXCJdID0gXCJHZXRDaGF0VHJhbnNjcmlwdFN1Y2NlZWRlZFwiO1xuICAgIE9DU0RLVGVsZW1ldHJ5RXZlbnRbXCJHRVRDSEFUVFJBTlNDUklQVEZBSUxFRFwiXSA9IFwiR2V0Q2hhdFRyYW5zY3JpcHRGYWlsZWRcIjtcbiAgICBPQ1NES1RlbGVtZXRyeUV2ZW50W1wiRU1BSUxUUkFOU0NSSVBUU1RBUlRFRFwiXSA9IFwiRW1haWxUcmFuc2NyaXB0U3RhcnRlZFwiO1xuICAgIE9DU0RLVGVsZW1ldHJ5RXZlbnRbXCJFTUFJTFRSQU5TQ1JJUFRTVUNDRUVERURcIl0gPSBcIkVtYWlsVHJhbnNjcmlwdFN1Y2NlZWRlZFwiO1xuICAgIE9DU0RLVGVsZW1ldHJ5RXZlbnRbXCJFTUFJTFRSQU5TQ1JJUFRGQUlMRURcIl0gPSBcIkVtYWlsVHJhbnNjcmlwdEZhaWxlZFwiO1xuICAgIE9DU0RLVGVsZW1ldHJ5RXZlbnRbXCJGRVRDSERBVEFNQVNLSU5HU1RBUlRFRFwiXSA9IFwiRmV0Y2hEYXRhTWFza2luZ1N0YXJ0ZWRcIjtcbiAgICBPQ1NES1RlbGVtZXRyeUV2ZW50W1wiRkVUQ0hEQVRBTUFTS0lOR1NVQ0NFRURFRFwiXSA9IFwiRmV0Y2hEYXRhTWFza2luZ1N1Y2NlZWRlZFwiO1xuICAgIE9DU0RLVGVsZW1ldHJ5RXZlbnRbXCJGRVRDSERBVEFNQVNLSU5HRkFJTEVEXCJdID0gXCJGZXRjaERhdGFNYXNraW5nRmFpbGVkXCI7XG4gICAgT0NTREtUZWxlbWV0cnlFdmVudFtcIlNFQ09OREFSWUNIQU5ORUxFVkVOVFJFUVVFU1RTVEFSVEVEXCJdID0gXCJTZWNvbmRhcnlDaGFubmVsRXZlbnRSZXF1ZXN0U3RhcnRlZFwiO1xuICAgIE9DU0RLVGVsZW1ldHJ5RXZlbnRbXCJTRUNPTkRBUllDSEFOTkVMRVZFTlRSRVFVRVNUU1VDQ0VFREVEXCJdID0gXCJTZWNvbmRhcnlDaGFubmVsRXZlbnRSZXF1ZXN0U3VjY2VlZGVkXCI7XG4gICAgT0NTREtUZWxlbWV0cnlFdmVudFtcIlNFQ09OREFSWUNIQU5ORUxFVkVOVFJFUVVFU1RGQUlMRURcIl0gPSBcIlNlY29uZGFyeUNoYW5uZWxFdmVudFJlcXVlc3RGYWlsZWRcIjtcbiAgICBPQ1NES1RlbGVtZXRyeUV2ZW50W1wiR0VUU1VSVkVZSU5WSVRFTElOS1NUQVJURURcIl0gPSBcIkdldFN1cnZleUludml0ZUxpbmtTdGFydGVkXCI7XG4gICAgT0NTREtUZWxlbWV0cnlFdmVudFtcIkdFVFNVUlZFWUlOVklURUxJTktTVUNDRUVERURcIl0gPSBcIkdldFN1cnZleUludml0ZUxpbmtTdWNjZWVkZWRcIjtcbiAgICBPQ1NES1RlbGVtZXRyeUV2ZW50W1wiR0VUU1VSVkVZSU5WSVRFTElOS0ZBSUxFRFwiXSA9IFwiR2V0U3VydmV5SW52aXRlTGlua0ZhaWxlZFwiO1xuICAgIE9DU0RLVGVsZW1ldHJ5RXZlbnRbXCJWQUxJREFURUFVVEhDSEFUUkVDT1JEU1RBUlRFRFwiXSA9IFwiVmFsaWRhdGVBdXRoQ2hhdFJlY29yZFN0YXJ0ZWRcIjtcbiAgICBPQ1NES1RlbGVtZXRyeUV2ZW50W1wiVkFMSURBVEVBVVRIQ0hBVFJFQ09SRFNVQ0NFRURFRFwiXSA9IFwiVmFsaWRhdGVBdXRoQ2hhdFJlY29yZFN1Y2NlZWRlZFwiO1xuICAgIE9DU0RLVGVsZW1ldHJ5RXZlbnRbXCJWQUxJREFURUFVVEhDSEFUUkVDT1JERkFJTEVEXCJdID0gXCJWYWxpZGF0ZUF1dGhDaGF0UmVjb3JkRmFpbGVkXCI7XG4gICAgT0NTREtUZWxlbWV0cnlFdmVudFtcIkdFVFFVRVVFQVZBSUxBQklMSVRZU1RBUlRFRFwiXSA9IFwiR2V0UXVldWVBdmFpbGFiaWxpdHlTdGFydGVkXCI7XG4gICAgT0NTREtUZWxlbWV0cnlFdmVudFtcIkdFVFFVRVVFQVZBSUxBQklMSVRZU1VDQ0VFREVEXCJdID0gXCJHZXRRdWV1ZUF2YWlsYWJpbGl0eVN1Y2NlZWRlZFwiO1xuICAgIE9DU0RLVGVsZW1ldHJ5RXZlbnRbXCJHRVRRVUVVRUFWQUlMQUJJTElUWUZBSUxFRFwiXSA9IFwiR2V0UXVldWVBdmFpbGFiaWxpdHlGYWlsZWRcIjtcbiAgICBPQ1NES1RlbGVtZXRyeUV2ZW50W1wiU0VORFRZUElOR0lORElDQVRPUkZBSUxFRFwiXSA9IFwiU2VuZFR5cGluZ0luZGljYXRvckZhaWxlZFwiO1xuICAgIE9DU0RLVGVsZW1ldHJ5RXZlbnRbXCJTRU5EVFlQSU5HSU5ESUNBVE9SU1VDQ0VFREVEXCJdID0gXCJTZW5kVHlwaW5nSW5kaWNhdG9yU3VjY2VlZGVkXCI7XG59KShPQ1NES1RlbGVtZXRyeUV2ZW50ID0gZXhwb3J0cy5PQ1NES1RlbGVtZXRyeUV2ZW50IHx8IChleHBvcnRzLk9DU0RLVGVsZW1ldHJ5RXZlbnQgPSB7fSkpO1xudmFyIExpdmVDaGF0VmVyc2lvbjtcbihmdW5jdGlvbiAoTGl2ZUNoYXRWZXJzaW9uKSB7XG4gICAgLy8gSUMzIGxpdmUgY2hhdFxuICAgIExpdmVDaGF0VmVyc2lvbltMaXZlQ2hhdFZlcnNpb25bXCJWMVwiXSA9IDFdID0gXCJWMVwiO1xuICAgIC8vIEFDUyBsaXZlIGNoYXRcbiAgICBMaXZlQ2hhdFZlcnNpb25bTGl2ZUNoYXRWZXJzaW9uW1wiVjJcIl0gPSAyXSA9IFwiVjJcIjtcbn0pKExpdmVDaGF0VmVyc2lvbiA9IGV4cG9ydHMuTGl2ZUNoYXRWZXJzaW9uIHx8IChleHBvcnRzLkxpdmVDaGF0VmVyc2lvbiA9IHt9KSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBFdmVudE5hbWVzID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEV2ZW50TmFtZXMoKSB7XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFdmVudE5hbWVzLCBcIk9DU0RLTE9BRFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gXCJvYzpzZGs6bG9hZFwiOyB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgcmV0dXJuIEV2ZW50TmFtZXM7XG59KCkpO1xuZXhwb3J0cy5kZWZhdWx0ID0gRXZlbnROYW1lcztcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIExvY2FsZXMgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gTG9jYWxlcygpIHtcbiAgICB9XG4gICAgTG9jYWxlcy5zdXBwb3J0ZWRMb2NhbGVzID0gW1xuICAgICAgICBcImFyLXNhXCIsXG4gICAgICAgIFwiYmctYmdcIixcbiAgICAgICAgXCJjYS1lc1wiLFxuICAgICAgICBcImNzLWN6XCIsXG4gICAgICAgIFwiZGEtZGtcIixcbiAgICAgICAgXCJkZS1kZVwiLFxuICAgICAgICBcImVsLWdyXCIsXG4gICAgICAgIFwiZW4tdXNcIixcbiAgICAgICAgXCJlcy1lc1wiLFxuICAgICAgICBcImV0LWVlXCIsXG4gICAgICAgIFwiZXUtZXNcIixcbiAgICAgICAgXCJmaS1maVwiLFxuICAgICAgICBcImZyLWZyXCIsXG4gICAgICAgIFwiZ2wtZXNcIixcbiAgICAgICAgXCJoZS1pbFwiLFxuICAgICAgICBcImhpLWluXCIsXG4gICAgICAgIFwiaHItaHJcIixcbiAgICAgICAgXCJodS1odVwiLFxuICAgICAgICBcImlkLWlkXCIsXG4gICAgICAgIFwiaXQtaXRcIixcbiAgICAgICAgXCJqYS1qcFwiLFxuICAgICAgICBcImtrLWt6XCIsXG4gICAgICAgIFwia28ta3JcIixcbiAgICAgICAgXCJsdC1sdFwiLFxuICAgICAgICBcImx2LWx2XCIsXG4gICAgICAgIFwibXMtbXlcIixcbiAgICAgICAgXCJuYi1ub1wiLFxuICAgICAgICBcIm5sLW5sXCIsXG4gICAgICAgIFwicGwtcGxcIixcbiAgICAgICAgXCJwdC1iclwiLFxuICAgICAgICBcInB0LXB0XCIsXG4gICAgICAgIFwicm8tcm9cIixcbiAgICAgICAgXCJydS1ydVwiLFxuICAgICAgICBcInNrLXNrXCIsXG4gICAgICAgIFwic2wtc2lcIixcbiAgICAgICAgXCJzci1jeXJsLWNzXCIsXG4gICAgICAgIFwic3ItbGF0bi1jc1wiLFxuICAgICAgICBcInN2LXNlXCIsXG4gICAgICAgIFwidGgtdGhcIixcbiAgICAgICAgXCJ0ci10clwiLFxuICAgICAgICBcInVrLXVhXCIsXG4gICAgICAgIFwidmktdm5cIixcbiAgICAgICAgXCJ6aC1jblwiLFxuICAgICAgICBcInpoLWhrXCIsXG4gICAgICAgIFwiemgtdHdcIlxuICAgIF07XG4gICAgcmV0dXJuIExvY2FsZXM7XG59KCkpO1xuZXhwb3J0cy5kZWZhdWx0ID0gTG9jYWxlcztcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIFRlbGVtZXRyeUhlbHBlcl8xID0gcmVxdWlyZShcIi4uL1V0aWxzL1RlbGVtZXRyeUhlbHBlclwiKTtcbnZhciBPQ1NES0xvZ2dlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBPQ1NES0xvZ2dlcihsb2dnZXIpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIgPSBsb2dnZXI7XG4gICAgfVxuICAgIE9DU0RLTG9nZ2VyLnByb3RvdHlwZS5sb2cgPSBmdW5jdGlvbiAobG9nbGV2ZWwsIHRlbGVtZXRyeUV2ZW50LCBjdXN0b21EYXRhLCBkZXNjcmlwdGlvbikge1xuICAgICAgICBpZiAodGhpcy5pc0xvZ2dpbmdFbmFibGVkKCkpIHtcbiAgICAgICAgICAgIHZhciBsb2dEYXRhID0gVGVsZW1ldHJ5SGVscGVyXzEuZGVmYXVsdC5HRVRURUxFTUVUUllFVkVOVERBVEEodGVsZW1ldHJ5RXZlbnQsIGN1c3RvbURhdGEsIGRlc2NyaXB0aW9uKTtcbiAgICAgICAgICAgIHRoaXMubG9nRXZlbnQobG9nbGV2ZWwsIGxvZ0RhdGEpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBPQ1NES0xvZ2dlci5wcm90b3R5cGUubG9nRXZlbnQgPSBmdW5jdGlvbiAobG9nTGV2ZWwsIGxvZ0RhdGEpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNMb2dnaW5nRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KHRoaXMubG9nZ2VyLmxvZ0NsaWVudFNka1RlbGVtZXRyeUV2ZW50LmJpbmQodGhpcy5sb2dnZXIpLCAwLCBsb2dMZXZlbCwgbG9nRGF0YSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE9DU0RLTG9nZ2VyLnByb3RvdHlwZS5pc0xvZ2dpbmdFbmFibGVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuaXNOdWxsT3JVbmRlZmluZWQodGhpcy5sb2dnZXIpO1xuICAgIH07XG4gICAgT0NTREtMb2dnZXIucHJvdG90eXBlLmlzTnVsbE9yVW5kZWZpbmVkID0gZnVuY3Rpb24gKG9iaikge1xuICAgICAgICByZXR1cm4gKG9iaiA9PT0gbnVsbCB8fCBvYmogPT09IHVuZGVmaW5lZCk7XG4gICAgfTtcbiAgICByZXR1cm4gT0NTREtMb2dnZXI7XG59KCkpO1xuZXhwb3J0cy5kZWZhdWx0ID0gT0NTREtMb2dnZXI7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBPbW5pY2hhbm5lbEVuZHBvaW50cyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBPbW5pY2hhbm5lbEVuZHBvaW50cygpIHtcbiAgICB9XG4gICAgT21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRDb25maWdQYXRoID0gXCJsaXZlY2hhdGNvbm5lY3Rvci9jb25maWdcIjtcbiAgICBPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdFNlc3Npb25Jbml0UGF0aCA9IFwibGl2ZWNoYXRjb25uZWN0b3Ivc2Vzc2lvbmluaXRcIjtcbiAgICBPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdEF1dGhTZXNzaW9uSW5pdFBhdGggPSBcImxpdmVjaGF0Y29ubmVjdG9yL2F1dGgvc2Vzc2lvbmluaXRcIjtcbiAgICBPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdEdldENoYXRUb2tlblBhdGggPSBcImxpdmVjaGF0Y29ubmVjdG9yL2dldGNoYXR0b2tlblwiO1xuICAgIE9tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0djJHZXRDaGF0VG9rZW5QYXRoID0gXCJsaXZlY2hhdGNvbm5lY3Rvci92Mi9nZXRjaGF0dG9rZW5cIjtcbiAgICBPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdEF1dGhHZXRDaGF0VG9rZW5QYXRoID0gXCJsaXZlY2hhdGNvbm5lY3Rvci9hdXRoL2dldGNoYXR0b2tlblwiO1xuICAgIE9tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0djJBdXRoR2V0Q2hhdFRva2VuUGF0aCA9IFwibGl2ZWNoYXRjb25uZWN0b3IvdjIvYXV0aC9nZXRjaGF0dG9rZW5cIjtcbiAgICBPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdFNlc3Npb25DbG9zZVBhdGggPSBcImxpdmVjaGF0Y29ubmVjdG9yL3Nlc3Npb25jbG9zZVwiO1xuICAgIE9tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0QXV0aFNlc3Npb25DbG9zZVBhdGggPSBcImxpdmVjaGF0Y29ubmVjdG9yL2F1dGgvc2Vzc2lvbmNsb3NlXCI7XG4gICAgT21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRTdWJtaXRQb3N0Q2hhdFBhdGggPSBcInN1cnZleS9zdWJtaXRwb3N0Y2hhdFwiO1xuICAgIE9tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0QXV0aFN1Ym1pdFBvc3RDaGF0UGF0aCA9IFwic3VydmV5L2F1dGgvc3VibWl0cG9zdGNoYXRcIjtcbiAgICBPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdEdldFN1cnZleUludml0ZUxpbmtQYXRoID0gXCJsaXZlY2hhdGNvbm5lY3Rvci9nZXRzdXJ2ZXlpbnZpdGVcIjtcbiAgICBPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdEF1dGhHZXRTdXJ2ZXlJbnZpdGVMaW5rUGF0aCA9IFwibGl2ZWNoYXRjb25uZWN0b3IvYXV0aC9nZXRzdXJ2ZXlpbnZpdGVcIjtcbiAgICBPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdEdldENoYXRUcmFuc2NyaXB0UGF0aCA9IFwibGl2ZWNoYXRjb25uZWN0b3IvZ2V0Y2hhdHRyYW5zY3JpcHRzXCI7XG4gICAgT21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXR2MkdldENoYXRUcmFuc2NyaXB0UGF0aCA9IFwibGl2ZWNoYXRjb25uZWN0b3IvdjIvZ2V0Y2hhdHRyYW5zY3JpcHRzXCI7XG4gICAgT21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRBdXRoR2V0Q2hhdFRyYW5zY3JpcHRQYXRoID0gXCJsaXZlY2hhdGNvbm5lY3Rvci9hdXRoL2dldGNoYXR0cmFuc2NyaXB0c1wiO1xuICAgIE9tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0djJBdXRoR2V0Q2hhdFRyYW5zY3JpcHRQYXRoID0gXCJsaXZlY2hhdGNvbm5lY3Rvci92Mi9hdXRoL2dldGNoYXR0cmFuc2NyaXB0c1wiO1xuICAgIE9tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0VHJhbnNjcmlwdEVtYWlsUmVxdWVzdFBhdGggPSBcImxpdmVjaGF0Y29ubmVjdG9yL2NyZWF0ZWVtYWlscmVxdWVzdFwiO1xuICAgIE9tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0QXV0aFRyYW5zY3JpcHRFbWFpbFJlcXVlc3RQYXRoID0gXCJsaXZlY2hhdGNvbm5lY3Rvci9hdXRoL2NyZWF0ZWVtYWlscmVxdWVzdFwiO1xuICAgIE9tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0RmV0Y2hEYXRhTWFza2luZ0luZm9QYXRoID0gXCJsaXZlY2hhdGNvbm5lY3Rvci9mZXRjaGRhdGFtYXNraW5naW5mb1wiO1xuICAgIE9tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0U2Vjb25kYXJ5Q2hhbm5lbEV2ZW50UGF0aCA9IFwibGl2ZWNoYXRjb25uZWN0b3Ivc2Vjb25kYXJ5Y2hhbm5lbGV2ZW50XCI7XG4gICAgT21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRBdXRoU2Vjb25kYXJ5Q2hhbm5lbEV2ZW50UGF0aCA9IFwibGl2ZWNoYXRjb25uZWN0b3IvYXV0aC9zZWNvbmRhcnljaGFubmVsZXZlbnRcIjtcbiAgICBPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdExpdmVXb3JrSXRlbURldGFpbHNQYXRoID0gXCJsaXZlY2hhdGNvbm5lY3Rvci9nZXRsaXZld29ya2l0ZW1kZXRhaWxzXCI7XG4gICAgT21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRBdXRoTGl2ZVdvcmtJdGVtRGV0YWlsc1BhdGggPSBcImxpdmVjaGF0Y29ubmVjdG9yL2F1dGgvZ2V0bGl2ZXdvcmtpdGVtZGV0YWlsc1wiO1xuICAgIE9tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0R2V0UmVjb25uZWN0YWJsZUNoYXRzUGF0aCA9IFwibGl2ZWNoYXRjb25uZWN0b3IvYXV0aC9yZWNvbm5lY3RhYmxlY2hhdHNcIjtcbiAgICBPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdFJlY29ubmVjdEF2YWlsYWJpbGl0eVBhdGggPSBcImxpdmVjaGF0Y29ubmVjdG9yL3JlY29ubmVjdFwiO1xuICAgIE9tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0VmFsaWRhdGVBdXRoQ2hhdE1hcFJlY29yZFBhdGggPSBcImxpdmVjaGF0Y29ubmVjdG9yL2F1dGgvdmFsaWRhdGVhdXRoY2hhdG1hcHJlY29yZFwiO1xuICAgIE9tbmljaGFubmVsRW5kcG9pbnRzLkdldFF1ZXVlQXZhaWxhYmlsaXR5UGF0aCA9IFwibGl2ZWNoYXRjb25uZWN0b3IvYXV0aC9nZXRxdWV1ZWF2YWlsYWJpbGl0eVwiO1xuICAgIE9tbmljaGFubmVsRW5kcG9pbnRzLlNlbmRUeXBpbmdJbmRpY2F0b3JQYXRoID0gXCJpbmJvdW5kL3R5cGluZ2luZGljYXRvci9saXZlY2hhdC9zZW5kdHlwaW5naW5kaWNhdG9yXCI7XG4gICAgcmV0dXJuIE9tbmljaGFubmVsRW5kcG9pbnRzO1xufSgpKTtcbmV4cG9ydHMuZGVmYXVsdCA9IE9tbmljaGFubmVsRW5kcG9pbnRzO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgT21uaWNoYW5uZWxIVFRQSGVhZGVycyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBPbW5pY2hhbm5lbEhUVFBIZWFkZXJzKCkge1xuICAgIH1cbiAgICBPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4gPSBcIkF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5cIjtcbiAgICBPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhvcml6YXRpb24gPSBcIkF1dGhvcml6YXRpb25cIjtcbiAgICBPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLm9yZ2FuaXphdGlvbklkID0gXCJPcmdhbml6YXRpb25JZFwiO1xuICAgIE9tbmljaGFubmVsSFRUUEhlYWRlcnMud2lkZ2V0QXBwSWQgPSBcIndpZGdldEFwcElkXCI7XG4gICAgT21uaWNoYW5uZWxIVFRQSGVhZGVycy5yZXF1ZXN0SWQgPSBcIlJlcXVlc3QtSWRcIjtcbiAgICByZXR1cm4gT21uaWNoYW5uZWxIVFRQSGVhZGVycztcbn0oKSk7XG5leHBvcnRzLmRlZmF1bHQgPSBPbW5pY2hhbm5lbEhUVFBIZWFkZXJzO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkxvZ0xldmVsID0gdm9pZCAwO1xudmFyIExvZ0xldmVsO1xuKGZ1bmN0aW9uIChMb2dMZXZlbCkge1xuICAgIExvZ0xldmVsW1wiSU5GT1wiXSA9IFwiSU5GT1wiO1xuICAgIExvZ0xldmVsW1wiREVCVUdcIl0gPSBcIkRFQlVHXCI7XG4gICAgTG9nTGV2ZWxbXCJXQVJOXCJdID0gXCJXQVJOXCI7XG4gICAgTG9nTGV2ZWxbXCJFUlJPUlwiXSA9IFwiRVJST1JcIjtcbn0pKExvZ0xldmVsID0gZXhwb3J0cy5Mb2dMZXZlbCB8fCAoZXhwb3J0cy5Mb2dMZXZlbCA9IHt9KSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbnZhciBfX2dlbmVyYXRvciA9ICh0aGlzICYmIHRoaXMuX19nZW5lcmF0b3IpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBib2R5KSB7XG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICAgICAgd2hpbGUgKF8pIHRyeSB7XG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgICB9XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIEVudW1zXzEgPSByZXF1aXJlKFwiLi9Db21tb24vRW51bXNcIik7XG52YXIgYXhpb3NfMSA9IHJlcXVpcmUoXCJheGlvc1wiKTtcbnZhciBCcm93c2VySW5mb18xID0gcmVxdWlyZShcIi4vVXRpbHMvQnJvd3NlckluZm9cIik7XG52YXIgQ29uc3RhbnRzXzEgPSByZXF1aXJlKFwiLi9Db21tb24vQ29uc3RhbnRzXCIpO1xudmFyIERldmljZUluZm9fMSA9IHJlcXVpcmUoXCIuL1V0aWxzL0RldmljZUluZm9cIik7XG52YXIgTG9jYWxlc18xID0gcmVxdWlyZShcIi4vQ29tbW9uL0xvY2FsZXNcIik7XG52YXIgTG9nZ2luZ1Nhbml0aXplcl8xID0gcmVxdWlyZShcIi4vVXRpbHMvTG9nZ2luZ1Nhbml0aXplclwiKTtcbnZhciBMb2dMZXZlbF8xID0gcmVxdWlyZShcIi4vTW9kZWwvTG9nTGV2ZWxcIik7XG52YXIgRW51bXNfMiA9IHJlcXVpcmUoXCIuL0NvbW1vbi9FbnVtc1wiKTtcbnZhciBPU0luZm9fMSA9IHJlcXVpcmUoXCIuL1V0aWxzL09TSW5mb1wiKTtcbnZhciBPbW5pY2hhbm5lbEVuZHBvaW50c18xID0gcmVxdWlyZShcIi4vQ29tbW9uL09tbmljaGFubmVsRW5kcG9pbnRzXCIpO1xudmFyIE9tbmljaGFubmVsSFRUUEhlYWRlcnNfMSA9IHJlcXVpcmUoXCIuL0NvbW1vbi9PbW5pY2hhbm5lbEhUVFBIZWFkZXJzXCIpO1xudmFyIFRpbWVyXzEgPSByZXF1aXJlKFwiLi9VdGlscy9UaW1lclwiKTtcbnZhciBheGlvc1JldHJ5XzEgPSByZXF1aXJlKFwiLi9VdGlscy9heGlvc1JldHJ5XCIpO1xudmFyIHV1aWRfMSA9IHJlcXVpcmUoXCIuL1V0aWxzL3V1aWRcIik7XG52YXIgU0RLID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFNESyhvbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24sIGNvbmZpZ3VyYXRpb24sIGxvZ2dlcikge1xuICAgICAgICBpZiAoY29uZmlndXJhdGlvbiA9PT0gdm9pZCAwKSB7IGNvbmZpZ3VyYXRpb24gPSBTREsuZGVmYXVsdENvbmZpZ3VyYXRpb247IH1cbiAgICAgICAgdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24gPSBvbW5pY2hhbm5lbENvbmZpZ3VyYXRpb247XG4gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb247XG4gICAgICAgIHRoaXMubG9nZ2VyID0gbG9nZ2VyO1xuICAgICAgICAvLyBTZXRzIHRvIGRlZmF1bHQgY29uZmlndXJhdGlvbiBpZiBwYXNzZWQgY29uZmlndXJhdGlvbiBpcyBlbXB0eSBvciBpcyBub3QgYW4gb2JqZWN0XG4gICAgICAgIGlmICghT2JqZWN0LmtleXModGhpcy5jb25maWd1cmF0aW9uKS5sZW5ndGggfHwgdHlwZW9mIChjb25maWd1cmF0aW9uKSAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uID0gU0RLLmRlZmF1bHRDb25maWd1cmF0aW9uO1xuICAgICAgICB9XG4gICAgICAgIC8vIFZhbGlkYXRlIFNESyBjb25maWdcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IE9iamVjdC5rZXlzKFNESy5kZWZhdWx0Q29uZmlndXJhdGlvbik7IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICB2YXIga2V5ID0gX2FbX2ldO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmNvbmZpZ3VyYXRpb24uaGFzT3duUHJvcGVydHkoa2V5KSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgJ1wiICsga2V5ICsgXCInIGluIFNES0NvbmZpZ3VyYXRpb25cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gVmFsaWRhdGUgY2hhbm5lbElkXG4gICAgICAgIHZhciBjaGFubmVsSWQgPSBvbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkO1xuICAgICAgICBpZiAoIU9iamVjdC52YWx1ZXMoRW51bXNfMS5DaGFubmVsSWQpLmluY2x1ZGVzKGNoYW5uZWxJZCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgY2hhbm5lbElkXCIpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFZhbGlkYXRlIE9DIGNvbmZpZ1xuICAgICAgICB2YXIgY3VycmVudE9tbmljaGFubmVsQ29uZmlndXJhdGlvblBhcmFtZXRlcnMgPSBPYmplY3Qua2V5cyhvbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24pO1xuICAgICAgICBmb3IgKHZhciBfYiA9IDAsIF9jID0gQ29uc3RhbnRzXzEuZGVmYXVsdC5yZXF1aXJlZE9tbmljaGFubmVsQ29uZmlndXJhdGlvblBhcmFtZXRlcnM7IF9iIDwgX2MubGVuZ3RoOyBfYisrKSB7XG4gICAgICAgICAgICB2YXIga2V5ID0gX2NbX2JdO1xuICAgICAgICAgICAgaWYgKCFjdXJyZW50T21uaWNoYW5uZWxDb25maWd1cmF0aW9uUGFyYW1ldGVycy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyAnXCIgKyBrZXkgKyBcIicgaW4gT21uaWNoYW5uZWxDb25maWd1cmF0aW9uXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMubGl2ZUNoYXRWZXJzaW9uID0gRW51bXNfMS5MaXZlQ2hhdFZlcnNpb24uVjE7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEZldGNoZXMgY2hhdCBjb25maWcuXG4gICAgICogQHBhcmFtIHJlcXVlc3RJZDogUmVxdWVzdElkIHRvIHVzZSB0byBnZXQgY2hhdCBjb25maWcgKE9wdGlvbmFsKS5cbiAgICAgKi9cbiAgICBTREsucHJvdG90eXBlLmdldENoYXRDb25maWcgPSBmdW5jdGlvbiAocmVxdWVzdElkLCBieXBhc3NDYWNoZSkge1xuICAgICAgICBpZiAoYnlwYXNzQ2FjaGUgPT09IHZvaWQgMCkgeyBieXBhc3NDYWNoZSA9IGZhbHNlOyB9XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB0aW1lciwgZW5kcG9pbnQsIGF4aW9zSW5zdGFuY2UsIGhlYWRlcnMsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCBkYXRhO1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGltZXIgPSBUaW1lcl8xLlRpbWVyLlRJTUVSKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5sb2dnZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5sb2coTG9nTGV2ZWxfMS5Mb2dMZXZlbC5JTkZPLCBFbnVtc18yLk9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUQ0hBVENPTkZJRywgeyBSZXF1ZXN0SWQ6IHJlcXVlc3RJZCB9LCBcIkdldCBDaGF0IENvbmZpZyBTdGFydGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXF1ZXN0SWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SWQgPSB1dWlkXzEudXVpZHY0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRwb2ludCA9IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybCArIFwiL1wiICsgT21uaWNoYW5uZWxFbmRwb2ludHNfMS5kZWZhdWx0LkxpdmVDaGF0Q29uZmlnUGF0aCArIFwiL1wiICsgdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWQgKyBcIi9cIiArIHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkICsgXCI/cmVxdWVzdElkPVwiICsgcmVxdWVzdElkICsgXCImY2hhbm5lbElkPVwiICsgdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXhpb3NJbnN0YW5jZSA9IGF4aW9zXzEuZGVmYXVsdC5jcmVhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF4aW9zUmV0cnlfMS5kZWZhdWx0KGF4aW9zSW5zdGFuY2UsIHsgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVycyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJ5cGFzc0NhY2hlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVycyA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCBDb25zdGFudHNfMS5kZWZhdWx0LmJ5cGFzc0NhY2hlSGVhZGVycyksIGhlYWRlcnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgYXhpb3NJbnN0YW5jZS5nZXQoZW5kcG9pbnQsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gcmVzcG9uc2UuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLkxpdmVDaGF0VmVyc2lvbiAmJiBkYXRhLkxpdmVDaGF0VmVyc2lvbiA9PT0gRW51bXNfMS5MaXZlQ2hhdFZlcnNpb24uVjIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxpdmVDaGF0VmVyc2lvbiA9IGRhdGEuTGl2ZUNoYXRWZXJzaW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5oZWFkZXJzID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UuaGVhZGVycyAmJiByZXNwb25zZS5oZWFkZXJzW1wiZGF0ZVwiXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuaGVhZGVyc1tcImRhdGVcIl0gPSByZXNwb25zZS5oZWFkZXJzW1wiZGF0ZVwiXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmxvZ2dlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmxvZyhMb2dMZXZlbF8xLkxvZ0xldmVsLklORk8sIEVudW1zXzIuT0NTREtUZWxlbWV0cnlFdmVudC5HRVRDSEFUQ09ORklHU1VDQ0VTUywgeyBSZXF1ZXN0SWQ6IHJlcXVlc3RJZCwgUmVnaW9uOiByZXNwb25zZS5kYXRhLlJlZ2lvbiwgRWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczogZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgVHJhbnNhY3Rpb25JZDogcmVzcG9uc2UuaGVhZGVyc1tcInRyYW5zYWN0aW9uLWlkXCJdIH0sIFwiR2V0IENoYXQgY29uZmlnIHN1Y2NlZWRlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBkYXRhXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBGZXRjaGVzIExXSSBkZXRhaWxzLlxuICAgICAqIEBwYXJhbSByZXF1ZXN0SWQ6IFJlcXVlc3RJZCB0byB1c2UgdG8gZ2V0IGNoYXQgY29uZmlnIChPcHRpb25hbCkuXG4gICAgICogQHBhcmFtIGdldExXSURldGFpbHNPcHRpb25hbFBhcmFtczogT3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgZ2V0IExXSSBEZXRhaWxzLlxuICAgICAqL1xuICAgIFNESy5wcm90b3R5cGUuZ2V0TFdJRGV0YWlscyA9IGZ1bmN0aW9uIChyZXF1ZXN0SWQsIGdldExXSURldGFpbHNPcHRpb25hbFBhcmFtcykge1xuICAgICAgICBpZiAoZ2V0TFdJRGV0YWlsc09wdGlvbmFsUGFyYW1zID09PSB2b2lkIDApIHsgZ2V0TFdJRGV0YWlsc09wdGlvbmFsUGFyYW1zID0ge307IH1cbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHRpbWVyLCBlbmRwb2ludCwgYXhpb3NJbnN0YW5jZSwgYXV0aGVudGljYXRlZFVzZXJUb2tlbiwgcmVjb25uZWN0SWQsIGhlYWRlcnMsIG9wdGlvbnM7XG4gICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIHRpbWVyID0gVGltZXJfMS5UaW1lci5USU1FUigpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmxvZ2dlcikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5sb2coTG9nTGV2ZWxfMS5Mb2dMZXZlbC5JTkZPLCBFbnVtc18yLk9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUTFdJU1RBVFVTU1RBUlRFRCwgeyBSZXF1ZXN0SWQ6IHJlcXVlc3RJZCB9LCBcIkdldCBMV0kgRGV0YWlscyBTdGFydGVkXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIXJlcXVlc3RJZCkge1xuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SWQgPSB1dWlkXzEudXVpZHY0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVuZHBvaW50ID0gdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsICsgXCIvXCIgKyBPbW5pY2hhbm5lbEVuZHBvaW50c18xLmRlZmF1bHQuTGl2ZUNoYXRMaXZlV29ya0l0ZW1EZXRhaWxzUGF0aCArIFwiL1wiICsgdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWQgKyBcIi9cIiArIHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkICsgXCIvXCIgKyByZXF1ZXN0SWQ7XG4gICAgICAgICAgICAgICAgYXhpb3NJbnN0YW5jZSA9IGF4aW9zXzEuZGVmYXVsdC5jcmVhdGUoKTtcbiAgICAgICAgICAgICAgICBheGlvc1JldHJ5XzEuZGVmYXVsdChheGlvc0luc3RhbmNlLCB7IHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSB9KTtcbiAgICAgICAgICAgICAgICBhdXRoZW50aWNhdGVkVXNlclRva2VuID0gZ2V0TFdJRGV0YWlsc09wdGlvbmFsUGFyYW1zLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4sIHJlY29ubmVjdElkID0gZ2V0TFdJRGV0YWlsc09wdGlvbmFsUGFyYW1zLnJlY29ubmVjdElkO1xuICAgICAgICAgICAgICAgIGhlYWRlcnMgPSBDb25zdGFudHNfMS5kZWZhdWx0LmRlZmF1bHRIZWFkZXJzO1xuICAgICAgICAgICAgICAgIC8vIHVwZGF0ZWQgYXV0aCBlbmRwb2ludCBmb3IgYXV0aGVudGljYXRlZCBjaGF0cyBhbmQgYWRkIGF1dGggdG9rZW4gaW4gaGVhZGVyXG4gICAgICAgICAgICAgICAgaWYgKGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnQgPSB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmwgKyBcIi9cIiArIE9tbmljaGFubmVsRW5kcG9pbnRzXzEuZGVmYXVsdC5MaXZlQ2hhdEF1dGhMaXZlV29ya0l0ZW1EZXRhaWxzUGF0aCArIFwiL1wiICsgdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWQgKyBcIi9cIiArIHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkICsgXCIvXCIgKyByZXF1ZXN0SWQ7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVyc18xLmRlZmF1bHQuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBBcHBlbmQgcmVjb25uZWN0IGlkIG9uIHRoZSBlbmRwb2ludCBpZiB2YWlsYWJsZVxuICAgICAgICAgICAgICAgIGlmIChyZWNvbm5lY3RJZCkge1xuICAgICAgICAgICAgICAgICAgICBlbmRwb2ludCArPSBcIi9cIiArIHJlY29ubmVjdElkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbmRwb2ludCArPSBcIj9jaGFubmVsSWQ9XCIgKyB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWQ7XG4gICAgICAgICAgICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgICAgICAgICAgICAgICB1cmw6IGVuZHBvaW50XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyByZXR1cm4gX19hd2FpdGVyKF90aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCBkYXRhLCBlcnJvcl8xLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2EudHJ5cy5wdXNoKFswLCAyLCAsIDVdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIGF4aW9zSW5zdGFuY2Uob3B0aW9ucyldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHJlc3BvbnNlLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5sb2dnZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5sb2coTG9nTGV2ZWxfMS5Mb2dMZXZlbC5JTkZPLCBFbnVtc18yLk9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUTFdJU1RBVFVTU1VDQ0VFREVELCB7IFJlcXVlc3RJZDogcmVxdWVzdElkLCBSZWdpb246IHJlc3BvbnNlLmRhdGEuUmVnaW9uLCBFbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzOiBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCBUcmFuc2FjdGlvbklkOiByZXNwb25zZS5oZWFkZXJzW1widHJhbnNhY3Rpb24taWRcIl0gfSwgXCJHZXQgTFdJIERldGFpbHMgc3VjY2VlZGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl8xID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMubG9nZ2VyKSByZXR1cm4gWzMgLypicmVhayovLCA0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIExvZ2dpbmdTYW5pdGl6ZXJfMS5Mb2dnaW5nU2FuaXRpemVyLnN0cmlwRXJyb3JTZW5zaXRpdmVQcm9wZXJ0aWVzKGVycm9yXzEpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIubG9nKExvZ0xldmVsXzEuTG9nTGV2ZWwuRVJST1IsIEVudW1zXzIuT0NTREtUZWxlbWV0cnlFdmVudC5HRVRMV0lTVEFUVVNGQUlMRUQsIHsgUmVxdWVzdElkOiByZXF1ZXN0SWQsIEV4Y2VwdGlvbkRldGFpbHM6IGVycm9yXzEsIEVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHM6IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgfSwgXCJHZXQgTFdJIERldGFpbHMgZmFpbGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2EubGFiZWwgPSA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDU6IHJldHVybiBbMiAvKnJldHVybiovXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7IH0pXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEZldGNoZXMgdGhlIGNoYXQgdG9rZW4gZnJvbSBPbW5pY2hhbm5lbCB0byBqb2luIFQxIHRocmVhZC5cbiAgICAgKiBAcGFyYW0gcmVxdWVzdElkOiBSZXF1ZXN0SWQgdG8gdXNlIGZvciBnZXRjaGF0dG9rZW4gKE9wdGlvbmFsKS5cbiAgICAgKiBAcGFyYW0gZ2V0Q2hhdFRva2VuT3B0aW9uYWxQYXJhbXM6IE9wdGlvbmFsIHBhcmFtZXRlcnMgZm9yIGdldCBjaGF0IHRva2VuLlxuICAgICAqL1xuICAgIFNESy5wcm90b3R5cGUuZ2V0Q2hhdFRva2VuID0gZnVuY3Rpb24gKHJlcXVlc3RJZCwgZ2V0Q2hhdFRva2VuT3B0aW9uYWxQYXJhbXMsIGN1cnJlbnRSZXRyeUNvdW50KSB7XG4gICAgICAgIGlmIChnZXRDaGF0VG9rZW5PcHRpb25hbFBhcmFtcyA9PT0gdm9pZCAwKSB7IGdldENoYXRUb2tlbk9wdGlvbmFsUGFyYW1zID0ge307IH1cbiAgICAgICAgaWYgKGN1cnJlbnRSZXRyeUNvdW50ID09PSB2b2lkIDApIHsgY3VycmVudFJldHJ5Q291bnQgPSAwOyB9XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB0aW1lciwgcmVjb25uZWN0SWQsIGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4sIGN1cnJlbnRMaXZlQ2hhdFZlcnNpb24sIGhlYWRlcnMsIGVuZHBvaW50LCBvcHRpb25zLCBheGlvc0luc3RhbmNlO1xuICAgICAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICB0aW1lciA9IFRpbWVyXzEuVGltZXIuVElNRVIoKTtcbiAgICAgICAgICAgICAgICByZWNvbm5lY3RJZCA9IGdldENoYXRUb2tlbk9wdGlvbmFsUGFyYW1zLnJlY29ubmVjdElkLCBhdXRoZW50aWNhdGVkVXNlclRva2VuID0gZ2V0Q2hhdFRva2VuT3B0aW9uYWxQYXJhbXMuYXV0aGVudGljYXRlZFVzZXJUb2tlbiwgY3VycmVudExpdmVDaGF0VmVyc2lvbiA9IGdldENoYXRUb2tlbk9wdGlvbmFsUGFyYW1zLmN1cnJlbnRMaXZlQ2hhdFZlcnNpb247XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubG9nZ2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmxvZyhMb2dMZXZlbF8xLkxvZ0xldmVsLklORk8sIEVudW1zXzIuT0NTREtUZWxlbWV0cnlFdmVudC5HRVRDSEFUVE9LRU5TVEFSVEVELCB7IFJlcXVlc3RJZDogcmVxdWVzdElkIH0sIFwiR2V0IENoYXQgVG9rZW4gU3RhcnRlZFwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRSZXRyeUNvdW50IDwgMCkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGN1cnJlbnRSZXRyeUNvdW50XCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIXJlcXVlc3RJZCkge1xuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SWQgPSB1dWlkXzEudXVpZHY0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGhlYWRlcnMgPSBDb25zdGFudHNfMS5kZWZhdWx0LmRlZmF1bHRIZWFkZXJzO1xuICAgICAgICAgICAgICAgIGVuZHBvaW50ID0gdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsICsgXCIvXCIgKyBPbW5pY2hhbm5lbEVuZHBvaW50c18xLmRlZmF1bHQuTGl2ZUNoYXRHZXRDaGF0VG9rZW5QYXRoICsgXCIvXCIgKyB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZCArIFwiL1wiICsgdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWQgKyBcIi9cIiArIHJlcXVlc3RJZDtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5saXZlQ2hhdFZlcnNpb24gPT09IEVudW1zXzEuTGl2ZUNoYXRWZXJzaW9uLlYyIHx8IChjdXJyZW50TGl2ZUNoYXRWZXJzaW9uICYmIGN1cnJlbnRMaXZlQ2hhdFZlcnNpb24gPT09IEVudW1zXzEuTGl2ZUNoYXRWZXJzaW9uLlYyKSkge1xuICAgICAgICAgICAgICAgICAgICBlbmRwb2ludCA9IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybCArIFwiL1wiICsgT21uaWNoYW5uZWxFbmRwb2ludHNfMS5kZWZhdWx0LkxpdmVDaGF0djJHZXRDaGF0VG9rZW5QYXRoICsgXCIvXCIgKyB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZCArIFwiL1wiICsgdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWQgKyBcIi9cIiArIHJlcXVlc3RJZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZHBvaW50ID0gdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsICsgXCIvXCIgKyBPbW5pY2hhbm5lbEVuZHBvaW50c18xLmRlZmF1bHQuTGl2ZUNoYXR2MkF1dGhHZXRDaGF0VG9rZW5QYXRoICsgXCIvXCIgKyB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZCArIFwiL1wiICsgdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWQgKyBcIi9cIiArIHJlcXVlc3RJZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVyc18xLmRlZmF1bHQuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYXV0aGVudGljYXRlZFVzZXJUb2tlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnQgPSB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmwgKyBcIi9cIiArIE9tbmljaGFubmVsRW5kcG9pbnRzXzEuZGVmYXVsdC5MaXZlQ2hhdEF1dGhHZXRDaGF0VG9rZW5QYXRoICsgXCIvXCIgKyB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZCArIFwiL1wiICsgdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWQgKyBcIi9cIiArIHJlcXVlc3RJZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVyc18xLmRlZmF1bHQuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyZWNvbm5lY3RJZCkge1xuICAgICAgICAgICAgICAgICAgICBlbmRwb2ludCArPSBcIi9cIiArIHJlY29ubmVjdElkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbmRwb2ludCArPSBcIj9jaGFubmVsSWQ9XCIgKyB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWQ7XG4gICAgICAgICAgICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgICAgICAgICAgICAgICB1cmw6IGVuZHBvaW50XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBheGlvc0luc3RhbmNlID0gYXhpb3NfMS5kZWZhdWx0LmNyZWF0ZSgpO1xuICAgICAgICAgICAgICAgIGF4aW9zUmV0cnlfMS5kZWZhdWx0KGF4aW9zSW5zdGFuY2UsIHsgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHJldHVybiBfX2F3YWl0ZXIoX3RoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIGRhdGEsIGVycm9yXzIsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHM7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2EudHJ5cy5wdXNoKFswLCAyLCAsIDVdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIGF4aW9zSW5zdGFuY2Uob3B0aW9ucyldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHJlc3BvbnNlLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXNvbHZlcyBvbmx5IGlmIGl0IGNvbnRhaW5zIGNoYXQgdG9rZW4gcmVzcG9uc2Ugd2hpY2ggb25seSBoYXBwZW5zIG9uIHN0YXR1cyAyMDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5yZXF1ZXN0SWQgPSByZXF1ZXN0SWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubG9nZ2VyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmxvZyhMb2dMZXZlbF8xLkxvZ0xldmVsLklORk8sIEVudW1zXzIuT0NTREtUZWxlbWV0cnlFdmVudC5HRVRDSEFUVE9LRU5TVUNDRUVERUQsIHsgUmVxdWVzdElkOiByZXF1ZXN0SWQsIFJlZ2lvbjogcmVzcG9uc2UuZGF0YS5SZWdpb24sIEVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHM6IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIFRyYW5zYWN0aW9uSWQ6IHJlc3BvbnNlLmhlYWRlcnNbXCJ0cmFuc2FjdGlvbi1pZFwiXSB9LCBcIkdldCBDaGF0IFRva2VuIFN1Y2NlZWRlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qL107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBObyBjb250ZW50IGZvciByZWNvbm5lY3QgY2hhdCBjYXNlIHNob3VsZG4ndCBiZSByZXRyaWVkLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlY29ubmVjdElkICYmIHJlc3BvbnNlLnN0YXR1cyA9PT0gQ29uc3RhbnRzXzEuZGVmYXVsdC5ub0NvbnRlbnRTdGF0dXNDb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qL107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMgLypicmVhayovLCA1XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfMiA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmxvZ2dlcikgcmV0dXJuIFszIC8qYnJlYWsqLywgNF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCBMb2dnaW5nU2FuaXRpemVyXzEuTG9nZ2luZ1Nhbml0aXplci5zdHJpcEVycm9yU2Vuc2l0aXZlUHJvcGVydGllcyhlcnJvcl8yKV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmxvZyhMb2dMZXZlbF8xLkxvZ0xldmVsLkVSUk9SLCBFbnVtc18yLk9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUQ0hBVFRPS0VORkFJTEVELCB7IFJlcXVlc3RJZDogcmVxdWVzdElkLCBFeGNlcHRpb25EZXRhaWxzOiBlcnJvcl8yLCBFbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzOiBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzIH0sIFwiR2V0IENoYXQgVG9rZW4gRmFpbGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2EubGFiZWwgPSA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3JfMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qL107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJhc2UgY2FzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRSZXRyeUNvdW50ICsgMSA+PSB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0Q2hhdFRva2VuUmV0cnlDb3VudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoXCJUaGUgcmV0cnkgZm9yIGdldGNoYXR0b2tlbiBoYXMgZXhjZWVkZWQgaXRzIG1heCB2YWx1ZSBvZiBcIiArIHRoaXMuY29uZmlndXJhdGlvbi5nZXRDaGF0VG9rZW5SZXRyeUNvdW50KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi9dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmV0cmllcyB1bnRpbCBpdCByZWFjaGVzIGl0cyBsaW1pdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuZ2V0Q2hhdFRva2VuKHJlcXVlc3RJZCwgZ2V0Q2hhdFRva2VuT3B0aW9uYWxQYXJhbXMsIGN1cnJlbnRSZXRyeUNvdW50ICsgMSkudGhlbihmdW5jdGlvbiAocmVzcG9uc2UpIHsgcmV0dXJuIHJlc29sdmUocmVzcG9uc2UpOyB9KS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHsgcmV0dXJuIHJlamVjdChlcnJvcik7IH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgdGhpcy5jb25maWd1cmF0aW9uLmdldENoYXRUb2tlblRpbWVCZXR3ZWVuUmV0cmllc09uRmFpbHVyZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qL107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pOyB9KV07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBGZXRjaGVzIHRoZSByZWNvbm5lY3RhYmxlIGNoYXRzIGZyb20gb21uaWNoYW5uZWwgZnJvbSB0aGUgZ2l2ZW4gdXNlciBpbmZvcm1hdGlvbiBpbiBKV1QgdG9rZW4oY2xhaW0gbmFtZTogc3ViKS5cbiAgICAgKiBAcGFyYW0gcmVjb25uZWN0YWJsZUNoYXRzUGFyYW1zIE1hbmRhdGUgcGFyYW1ldGVycyBmb3IgZ2V0IHJlY29ubmVjdGFibGUgY2hhdHMuXG4gICAgICovXG4gICAgU0RLLnByb3RvdHlwZS5nZXRSZWNvbm5lY3RhYmxlQ2hhdHMgPSBmdW5jdGlvbiAocmVjb25uZWN0YWJsZUNoYXRzUGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB0aW1lciwgYXV0aGVudGljYXRlZFVzZXJUb2tlbiwgZW5kcG9pbnQsIGhlYWRlcnMsIG9wdGlvbnMsIGF4aW9zSW5zdGFuY2U7XG4gICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIHRpbWVyID0gVGltZXJfMS5UaW1lci5USU1FUigpO1xuICAgICAgICAgICAgICAgIGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4gPSByZWNvbm5lY3RhYmxlQ2hhdHNQYXJhbXMuYXV0aGVudGljYXRlZFVzZXJUb2tlbjtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5sb2dnZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIubG9nKExvZ0xldmVsXzEuTG9nTGV2ZWwuSU5GTywgRW51bXNfMi5PQ1NES1RlbGVtZXRyeUV2ZW50LkdFVFJFQ09OTkVDVEFCTEVDSEFUUywgXCJHZXQgUmVjb25uZWN0YWJsZSBjaGF0IFN0YXJ0ZWRcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVuZHBvaW50ID0gdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsICsgXCIvXCIgKyBPbW5pY2hhbm5lbEVuZHBvaW50c18xLmRlZmF1bHQuTGl2ZUNoYXRHZXRSZWNvbm5lY3RhYmxlQ2hhdHNQYXRoICsgXCIvXCIgKyB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZCArIFwiL1wiICsgdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWQgKyBcIi9cIiArIHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkICsgXCI/Y2hhbm5lbElkPVwiICsgdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkO1xuICAgICAgICAgICAgICAgIGhlYWRlcnMgPSBDb25zdGFudHNfMS5kZWZhdWx0LmRlZmF1bHRIZWFkZXJzO1xuICAgICAgICAgICAgICAgIGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVyc18xLmRlZmF1bHQuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBlbmRwb2ludFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYXhpb3NJbnN0YW5jZSA9IGF4aW9zXzEuZGVmYXVsdC5jcmVhdGUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyByZXR1cm4gX19hd2FpdGVyKF90aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCBkYXRhLCBlcnJvcl8zLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2EudHJ5cy5wdXNoKFswLCAyLCAsIDVdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIGF4aW9zSW5zdGFuY2Uob3B0aW9ucyldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHJlc3BvbnNlLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXNvbHZlcyBvbmx5IGlmIGl0IGNvbnRhaW5zIHJlY29ubmVjdGFibGUgY2hhdHMgcmVzcG9uc2Ugd2hpY2ggb25seSBoYXBwZW5zIG9uIHN0YXR1cyAyMDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubG9nZ2VyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmxvZyhMb2dMZXZlbF8xLkxvZ0xldmVsLklORk8sIEVudW1zXzIuT0NTREtUZWxlbWV0cnlFdmVudC5HRVRSRUNPTk5FQ1RBQkxFQ0hBVFMsIHsgUmVnaW9uOiByZXNwb25zZS5kYXRhLlJlZ2lvbiwgRWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczogZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgVHJhbnNhY3Rpb25JZDogcmVzcG9uc2UuaGVhZGVyc1tDb25zdGFudHNfMS5kZWZhdWx0LnRyYW5zYWN0aW9uaWRdIH0sIFwiR2V0IFJlY29ubmVjdGFibGUgQ2hhdHMgU3VjY2VlZGVkIGFuZCBvbGQgc2Vzc2lvbiByZXR1cm5lZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qL107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBObyBkYXRhIGZvdW5kIGluIHRoZSBvbGQgc2Vzc2lvbnMgc28gcmV0dXJuaW5nIG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfMyA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmxvZ2dlcikgcmV0dXJuIFszIC8qYnJlYWsqLywgNF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCBMb2dnaW5nU2FuaXRpemVyXzEuTG9nZ2luZ1Nhbml0aXplci5zdHJpcEVycm9yU2Vuc2l0aXZlUHJvcGVydGllcyhlcnJvcl8zKV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmxvZyhMb2dMZXZlbF8xLkxvZ0xldmVsLkVSUk9SLCBFbnVtc18yLk9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUUkVDT05ORUNUQUJMRUNIQVRTLCB7IEV4Y2VwdGlvbkRldGFpbHM6IGVycm9yXzMsIEVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHM6IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgfSwgXCJHZXQgUmVjb25uZWN0YWJsZSBDaGF0cyBGYWlsZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYS5sYWJlbCA9IDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcl8zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA1OiByZXR1cm4gWzIgLypyZXR1cm4qL107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pOyB9KV07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvKipcbiAgICogRmV0Y2hlcyB0aGUgcmVjb25uZWN0YWJsZSBjaGF0cyBmcm9tIG9tbmljaGFubmVsIGZyb20gdGhlIGdpdmVuIHVzZXIgaW5mb3JtYXRpb24gaW4gSldUIHRva2VuKGNsYWltIG5hbWU6IHN1YikuXG4gICAqIEBwYXJhbSByZWNvbm5lY3RhYmxlQ2hhdHNQYXJhbXMgTWFuZGF0ZSBwYXJhbWV0ZXJzIGZvciBnZXQgcmVjb25uZWN0YWJsZSBjaGF0cy5cbiAgICovXG4gICAgU0RLLnByb3RvdHlwZS5nZXRSZWNvbm5lY3RBdmFpbGFiaWxpdHkgPSBmdW5jdGlvbiAocmVjb25uZWN0SWQpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHRpbWVyLCBlbmRwb2ludCwgaGVhZGVycywgb3B0aW9ucywgYXhpb3NJbnN0YW5jZTtcbiAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgdGltZXIgPSBUaW1lcl8xLlRpbWVyLlRJTUVSKCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubG9nZ2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmxvZyhMb2dMZXZlbF8xLkxvZ0xldmVsLklORk8sIEVudW1zXzIuT0NTREtUZWxlbWV0cnlFdmVudC5HRVRSRUNPTk5FQ1RBVkFJTEFCSUxJVFksIFwiR2V0IFJlY29ubmVjdCBhdmFpbGFiaWxpdHkgc3RhcnRlZFwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZW5kcG9pbnQgPSB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmwgKyBcIi9cIiArIE9tbmljaGFubmVsRW5kcG9pbnRzXzEuZGVmYXVsdC5MaXZlQ2hhdFJlY29ubmVjdEF2YWlsYWJpbGl0eVBhdGggKyBcIi9cIiArIHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkICsgXCIvXCIgKyB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZCArIFwiL1wiICsgcmVjb25uZWN0SWQ7XG4gICAgICAgICAgICAgICAgaGVhZGVycyA9IENvbnN0YW50c18xLmRlZmF1bHQuZGVmYXVsdEhlYWRlcnM7XG4gICAgICAgICAgICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgICAgICAgICAgICAgICB1cmw6IGVuZHBvaW50XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBheGlvc0luc3RhbmNlID0gYXhpb3NfMS5kZWZhdWx0LmNyZWF0ZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHJldHVybiBfX2F3YWl0ZXIoX3RoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIGRhdGEsIGVycm9yXzQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHM7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYS50cnlzLnB1c2goWzAsIDIsICwgNV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgYXhpb3NJbnN0YW5jZShvcHRpb25zKV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gcmVzcG9uc2UuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubG9nZ2VyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmxvZyhMb2dMZXZlbF8xLkxvZ0xldmVsLklORk8sIEVudW1zXzIuT0NTREtUZWxlbWV0cnlFdmVudC5HRVRSRUNPTk5FQ1RBVkFJTEFCSUxJVFksIHsgUmVnaW9uOiByZXNwb25zZS5kYXRhLlJlZ2lvbiwgRWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczogZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgVHJhbnNhY3Rpb25JZDogcmVzcG9uc2UuaGVhZGVyc1tDb25zdGFudHNfMS5kZWZhdWx0LnRyYW5zYWN0aW9uaWRdIH0sIFwiR2V0IFJlY29ubmVjdCBhdmFpbGFiaWxpdHkgU3VjY2VlZGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vIGRhdGEgZm91bmQgc28gcmV0dXJuaW5nIG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmxvZ2dlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmxvZyhMb2dMZXZlbF8xLkxvZ0xldmVsLldBUk4sIEVudW1zXzIuT0NTREtUZWxlbWV0cnlFdmVudC5HRVRSRUNPTk5FQ1RBVkFJTEFCSUxJVFksIHsgUmVnaW9uOiByZXNwb25zZS5kYXRhLlJlZ2lvbiwgRWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczogZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgVHJhbnNhY3Rpb25JZDogcmVzcG9uc2UuaGVhZGVyc1tDb25zdGFudHNfMS5kZWZhdWx0LnRyYW5zYWN0aW9uaWRdIH0sIFwiR2V0IFJlY29ubmVjdCBhdmFpbGFiaWxpdHkgZGlkbid0IHNlbmQgYW55IHZhbGlkIGRhdGEuXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi9dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl80ID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMubG9nZ2VyKSByZXR1cm4gWzMgLypicmVhayovLCA0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIExvZ2dpbmdTYW5pdGl6ZXJfMS5Mb2dnaW5nU2FuaXRpemVyLnN0cmlwRXJyb3JTZW5zaXRpdmVQcm9wZXJ0aWVzKGVycm9yXzQpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIubG9nKExvZ0xldmVsXzEuTG9nTGV2ZWwuRVJST1IsIEVudW1zXzIuT0NTREtUZWxlbWV0cnlFdmVudC5HRVRSRUNPTk5FQ1RBVkFJTEFCSUxJVFksIHsgRXhjZXB0aW9uRGV0YWlsczogZXJyb3JfNCwgRWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczogZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyB9LCBcIkdldCBSZWNvbm5lY3QgQXZhaWxhYmlsaXR5IEZhaWxlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9hLmxhYmVsID0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yXzQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi9dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDU6IHJldHVybiBbMiAvKnJldHVybiovXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7IH0pXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIHJlcXVlc3RJZDogUmVxdWVzdElkIHRvIHVzZSBmb3Igc2Vzc2lvbiBpbml0LlxuICAgICAqIEBwYXJhbSBxdWV1ZUF2YWlsYWJpbGl0eU9wdGlvbmFsUGFyYW1zOiBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciBzZXNzaW9uIGluaXQuXG4gICAgICovXG4gICAgU0RLLnByb3RvdHlwZS5nZXRRdWV1ZUF2YWlsYWJpbGl0eSA9IGZ1bmN0aW9uIChyZXF1ZXN0SWQsIHF1ZXVlQXZhaWxhYmlsaXR5T3B0aW9uYWxQYXJhbXMpIHtcbiAgICAgICAgaWYgKHF1ZXVlQXZhaWxhYmlsaXR5T3B0aW9uYWxQYXJhbXMgPT09IHZvaWQgMCkgeyBxdWV1ZUF2YWlsYWJpbGl0eU9wdGlvbmFsUGFyYW1zID0ge307IH1cbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHRpbWVyLCBlbmRwb2ludCwgYXhpb3NJbnN0YW5jZSwgYXV0aGVudGljYXRlZFVzZXJUb2tlbiwgaW5pdENvbnRleHQsIGdldENvbnRleHQsIGhlYWRlcnMsIGRhdGEsIG9wdGlvbnM7XG4gICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIHRpbWVyID0gVGltZXJfMS5UaW1lci5USU1FUigpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmxvZ2dlcikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5sb2coTG9nTGV2ZWxfMS5Mb2dMZXZlbC5JTkZPLCBFbnVtc18yLk9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUUVVFVUVBVkFJTEFCSUxJVFlTVEFSVEVELCB7IFJlcXVlc3RJZDogcmVxdWVzdElkIH0sIFwiR2V0IHF1ZXVlIGF2YWlsYWJpbGl0eSBzdGFydGVkXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbmRwb2ludCA9IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybCArIFwiL1wiICsgT21uaWNoYW5uZWxFbmRwb2ludHNfMS5kZWZhdWx0LkdldFF1ZXVlQXZhaWxhYmlsaXR5UGF0aCArIFwiL1wiICsgdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWQgKyBcIi9cIiArIHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkICsgXCIvXCIgKyByZXF1ZXN0SWQgKyBcIj9jaGFubmVsSWQ9bGN3XCI7XG4gICAgICAgICAgICAgICAgYXhpb3NJbnN0YW5jZSA9IGF4aW9zXzEuZGVmYXVsdC5jcmVhdGUoKTtcbiAgICAgICAgICAgICAgICBheGlvc1JldHJ5XzEuZGVmYXVsdChheGlvc0luc3RhbmNlLCB7IHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSB9KTtcbiAgICAgICAgICAgICAgICBhdXRoZW50aWNhdGVkVXNlclRva2VuID0gcXVldWVBdmFpbGFiaWxpdHlPcHRpb25hbFBhcmFtcy5hdXRoZW50aWNhdGVkVXNlclRva2VuLCBpbml0Q29udGV4dCA9IHF1ZXVlQXZhaWxhYmlsaXR5T3B0aW9uYWxQYXJhbXMuaW5pdENvbnRleHQsIGdldENvbnRleHQgPSBxdWV1ZUF2YWlsYWJpbGl0eU9wdGlvbmFsUGFyYW1zLmdldENvbnRleHQ7XG4gICAgICAgICAgICAgICAgaGVhZGVycyA9IENvbnN0YW50c18xLmRlZmF1bHQuZGVmYXVsdEhlYWRlcnM7XG4gICAgICAgICAgICAgICAgaWYgKGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzXzEuZGVmYXVsdC5hdXRoZW50aWNhdGVkVXNlclRva2VuXSA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRhdGEgPSBpbml0Q29udGV4dCB8fCB7fTtcbiAgICAgICAgICAgICAgICBpZiAoZ2V0Q29udGV4dCAmJiAhd2luZG93LmRvY3VtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJnZXRDb250ZXh0IGlzIG9ubHkgc3VwcG9ydGVkIG9uIHdlYiBicm93c2Vyc1wiKSldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZ2V0Q29udGV4dCkge1xuICAgICAgICAgICAgICAgICAgICBkYXRhLmJyb3dzZXIgPSBCcm93c2VySW5mb18xLkJyb3dzZXJJbmZvLmdldEJyb3dzZXJOYW1lKCk7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEuZGV2aWNlID0gRGV2aWNlSW5mb18xLkRldmljZUluZm8uZ2V0RGV2aWNlVHlwZSgpO1xuICAgICAgICAgICAgICAgICAgICBkYXRhLm9yaWdpbnVybCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuICAgICAgICAgICAgICAgICAgICBkYXRhLm9zID0gT1NJbmZvXzEuT1NJbmZvLmdldE9zVHlwZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIWRhdGEubG9jYWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEubG9jYWxlID0gQ29uc3RhbnRzXzEuZGVmYXVsdC5kZWZhdWx0TG9jYWxlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBWYWxpZGF0ZSBsb2NhbGVcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5sb2NhbGUgJiYgIUxvY2FsZXNfMS5kZWZhdWx0LnN1cHBvcnRlZExvY2FsZXMuaW5jbHVkZXMoZGF0YS5sb2NhbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBsb2NhbGU6ICdcIiArIGRhdGEubG9jYWxlICsgXCInXCIpKV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgICAgICAgICAgICAgIHVybDogZW5kcG9pbnRcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHJldHVybiBfX2F3YWl0ZXIoX3RoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIGRhdGFfMSwgZXJyb3JfNSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcztcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9hLnRyeXMucHVzaChbMCwgMiwgLCA1XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCBheGlvc0luc3RhbmNlKG9wdGlvbnMpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfMSA9IHJlc3BvbnNlLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YV8xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubG9nZ2VyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmxvZyhMb2dMZXZlbF8xLkxvZ0xldmVsLklORk8sIEVudW1zXzIuT0NTREtUZWxlbWV0cnlFdmVudC5HRVRRVUVVRUFWQUlMQUJJTElUWVNVQ0NFRURFRCwgeyBSZXF1ZXN0SWQ6IHJlcXVlc3RJZCwgUmVnaW9uOiByZXNwb25zZS5kYXRhLlJlZ2lvbiwgRWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczogZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgVHJhbnNhY3Rpb25JZDogcmVzcG9uc2UuaGVhZGVyc1tcInRyYW5zYWN0aW9uLWlkXCJdIH0sIFwiR2V0IHF1ZXVlIGF2YWlsYWJpbGl0eSBTdWNjZWVkZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZGF0YV8xKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl81ID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMubG9nZ2VyKSByZXR1cm4gWzMgLypicmVhayovLCA0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIExvZ2dpbmdTYW5pdGl6ZXJfMS5Mb2dnaW5nU2FuaXRpemVyLnN0cmlwRXJyb3JTZW5zaXRpdmVQcm9wZXJ0aWVzKGVycm9yXzUpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIubG9nKExvZ0xldmVsXzEuTG9nTGV2ZWwuRVJST1IsIEVudW1zXzIuT0NTREtUZWxlbWV0cnlFdmVudC5HRVRRVUVVRUFWQUlMQUJJTElUWUZBSUxFRCwgeyBSZXF1ZXN0SWQ6IHJlcXVlc3RJZCwgRXhjZXB0aW9uRGV0YWlsczogZXJyb3JfNSwgRWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczogZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyB9LCBcIkdldCBxdWV1ZSBhdmFpbGFiaWxpdHkgZmFpbGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2EubGFiZWwgPSA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3JfNSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMgLypicmVhayovLCA1XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA1OiByZXR1cm4gWzIgLypyZXR1cm4qL107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pOyB9KV07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBTdGFydHMgYSBzZXNzaW9uIHRvIG9tbmljaGFubmVsLlxuICAgICAqIEBwYXJhbSByZXF1ZXN0SWQ6IFJlcXVlc3RJZCB0byB1c2UgZm9yIHNlc3Npb24gaW5pdC5cbiAgICAgKiBAcGFyYW0gc2Vzc2lvbkluaXRPcHRpb25hbFBhcmFtczogT3B0aW9uYWwgcGFyYW1ldGVycyBmb3Igc2Vzc2lvbiBpbml0LlxuICAgICAqL1xuICAgIFNESy5wcm90b3R5cGUuc2Vzc2lvbkluaXQgPSBmdW5jdGlvbiAocmVxdWVzdElkLCBzZXNzaW9uSW5pdE9wdGlvbmFsUGFyYW1zKSB7XG4gICAgICAgIGlmIChzZXNzaW9uSW5pdE9wdGlvbmFsUGFyYW1zID09PSB2b2lkIDApIHsgc2Vzc2lvbkluaXRPcHRpb25hbFBhcmFtcyA9IHt9OyB9XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB0aW1lciwgYXhpb3NJbnN0YW5jZSwgcmVjb25uZWN0SWQsIGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4sIGluaXRDb250ZXh0LCBnZXRDb250ZXh0LCBoZWFkZXJzLCBlbmRwb2ludCwgZGF0YSwgb3B0aW9ucztcbiAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgdGltZXIgPSBUaW1lcl8xLlRpbWVyLlRJTUVSKCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubG9nZ2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmxvZyhMb2dMZXZlbF8xLkxvZ0xldmVsLklORk8sIEVudW1zXzIuT0NTREtUZWxlbWV0cnlFdmVudC5TRVNTSU9OSU5JVFNUQVJURUQsIHsgUmVxdWVzdElkOiByZXF1ZXN0SWQgfSwgXCJTZXNzaW9uIEluaXQgU3RhcnRlZFwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXhpb3NJbnN0YW5jZSA9IGF4aW9zXzEuZGVmYXVsdC5jcmVhdGUoKTtcbiAgICAgICAgICAgICAgICBheGlvc1JldHJ5XzEuZGVmYXVsdChheGlvc0luc3RhbmNlLCB7IHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSB9KTtcbiAgICAgICAgICAgICAgICByZWNvbm5lY3RJZCA9IHNlc3Npb25Jbml0T3B0aW9uYWxQYXJhbXMucmVjb25uZWN0SWQsIGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4gPSBzZXNzaW9uSW5pdE9wdGlvbmFsUGFyYW1zLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4sIGluaXRDb250ZXh0ID0gc2Vzc2lvbkluaXRPcHRpb25hbFBhcmFtcy5pbml0Q29udGV4dCwgZ2V0Q29udGV4dCA9IHNlc3Npb25Jbml0T3B0aW9uYWxQYXJhbXMuZ2V0Q29udGV4dDtcbiAgICAgICAgICAgICAgICBoZWFkZXJzID0gQ29uc3RhbnRzXzEuZGVmYXVsdC5kZWZhdWx0SGVhZGVycztcbiAgICAgICAgICAgICAgICBlbmRwb2ludCA9IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybCArIFwiL1wiICsgT21uaWNoYW5uZWxFbmRwb2ludHNfMS5kZWZhdWx0LkxpdmVDaGF0U2Vzc2lvbkluaXRQYXRoICsgXCIvXCIgKyB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZCArIFwiL1wiICsgdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWQgKyBcIi9cIiArIHJlcXVlc3RJZDtcbiAgICAgICAgICAgICAgICBpZiAoYXV0aGVudGljYXRlZFVzZXJUb2tlbikge1xuICAgICAgICAgICAgICAgICAgICBlbmRwb2ludCA9IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybCArIFwiL1wiICsgT21uaWNoYW5uZWxFbmRwb2ludHNfMS5kZWZhdWx0LkxpdmVDaGF0QXV0aFNlc3Npb25Jbml0UGF0aCArIFwiL1wiICsgdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWQgKyBcIi9cIiArIHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkICsgXCIvXCIgKyByZXF1ZXN0SWQ7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVyc18xLmRlZmF1bHQuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocmVjb25uZWN0SWQpIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnQgKz0gXCIvXCIgKyByZWNvbm5lY3RJZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZW5kcG9pbnQgKz0gXCI/Y2hhbm5lbElkPVwiICsgdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkO1xuICAgICAgICAgICAgICAgIGRhdGEgPSBpbml0Q29udGV4dCB8fCB7fTtcbiAgICAgICAgICAgICAgICBpZiAoZ2V0Q29udGV4dCAmJiAhd2luZG93LmRvY3VtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJnZXRDb250ZXh0IGlzIG9ubHkgc3VwcG9ydGVkIG9uIHdlYiBicm93c2Vyc1wiKSldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZ2V0Q29udGV4dCkge1xuICAgICAgICAgICAgICAgICAgICBkYXRhLmJyb3dzZXIgPSBCcm93c2VySW5mb18xLkJyb3dzZXJJbmZvLmdldEJyb3dzZXJOYW1lKCk7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEuZGV2aWNlID0gRGV2aWNlSW5mb18xLkRldmljZUluZm8uZ2V0RGV2aWNlVHlwZSgpO1xuICAgICAgICAgICAgICAgICAgICBkYXRhLm9yaWdpbnVybCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuICAgICAgICAgICAgICAgICAgICBkYXRhLm9zID0gT1NJbmZvXzEuT1NJbmZvLmdldE9zVHlwZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBTZXQgZGVmYXVsdCBsb2NhbGUgaWYgbG9jYWxlIGlzIGVtcHR5XG4gICAgICAgICAgICAgICAgaWYgKCFkYXRhLmxvY2FsZSkge1xuICAgICAgICAgICAgICAgICAgICBkYXRhLmxvY2FsZSA9IENvbnN0YW50c18xLmRlZmF1bHQuZGVmYXVsdExvY2FsZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gVmFsaWRhdGUgbG9jYWxlXG4gICAgICAgICAgICAgICAgaWYgKGRhdGEubG9jYWxlICYmICFMb2NhbGVzXzEuZGVmYXVsdC5zdXBwb3J0ZWRMb2NhbGVzLmluY2x1ZGVzKGRhdGEubG9jYWxlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgbG9jYWxlOiAnXCIgKyBkYXRhLmxvY2FsZSArIFwiJ1wiKSldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvcHRpb25zID0ge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICAgICAgICAgICAgICB1cmw6IGVuZHBvaW50XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyByZXR1cm4gX19hd2FpdGVyKF90aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCBlcnJvcl82LCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2EudHJ5cy5wdXNoKFswLCAyLCAsIDVdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIGF4aW9zSW5zdGFuY2Uob3B0aW9ucyldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubG9nZ2VyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIubG9nKExvZ0xldmVsXzEuTG9nTGV2ZWwuSU5GTywgRW51bXNfMi5PQ1NES1RlbGVtZXRyeUV2ZW50LlNFU1NJT05JTklUU1VDQ0VFREVELCB7IFJlcXVlc3RJZDogcmVxdWVzdElkLCBSZWdpb246IHJlc3BvbnNlLmRhdGEuUmVnaW9uLCBFbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzOiBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCBUcmFuc2FjdGlvbklkOiByZXNwb25zZS5oZWFkZXJzW1widHJhbnNhY3Rpb24taWRcIl0gfSwgXCJTZXNzaW9uIEluaXQgU3VjY2VlZGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszIC8qYnJlYWsqLywgNV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yXzYgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5sb2dnZXIpIHJldHVybiBbMyAvKmJyZWFrKi8sIDRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgTG9nZ2luZ1Nhbml0aXplcl8xLkxvZ2dpbmdTYW5pdGl6ZXIuc3RyaXBFcnJvclNlbnNpdGl2ZVByb3BlcnRpZXMoZXJyb3JfNildO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5sb2coTG9nTGV2ZWxfMS5Mb2dMZXZlbC5FUlJPUiwgRW51bXNfMi5PQ1NES1RlbGVtZXRyeUV2ZW50LlNFU1NJT05JTklURkFJTEVELCB7IFJlcXVlc3RJZDogcmVxdWVzdElkLCBFeGNlcHRpb25EZXRhaWxzOiBlcnJvcl82LCBFbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzOiBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzIH0sIFwiU2Vzc2lvbiBJbml0IEZhaWxlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9hLmxhYmVsID0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yXzYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszIC8qYnJlYWsqLywgNV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNTogcmV0dXJuIFsyIC8qcmV0dXJuKi9dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTsgfSldO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogQ2xvc2VzIHRoZSBvbW5pY2hhbm5lbCBzZXNzaW9uLlxuICAgICAqIEBwYXJhbSByZXF1ZXN0SWQ6IFJlcXVlc3RJZCB0byB1c2UgZm9yIHNlc3Npb24gY2xvc2UgKHNhbWUgcmVxdWVzdCBpZCBmb3Igc2Vzc2lvbiBpbml0KS5cbiAgICAgKiBAcGFyYW0gc2Vzc2lvbkNsb3NlT3B0aW9uYWxQYXJhbXM6IE9wdGlvbmFsIHBhcmFtZXRlcnMgZm9yIHNlc3Npb24gY2xvc2UuXG4gICAgICovXG4gICAgU0RLLnByb3RvdHlwZS5zZXNzaW9uQ2xvc2UgPSBmdW5jdGlvbiAocmVxdWVzdElkLCBzZXNzaW9uQ2xvc2VPcHRpb25hbFBhcmFtcykge1xuICAgICAgICBpZiAoc2Vzc2lvbkNsb3NlT3B0aW9uYWxQYXJhbXMgPT09IHZvaWQgMCkgeyBzZXNzaW9uQ2xvc2VPcHRpb25hbFBhcmFtcyA9IHt9OyB9XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB0aW1lciwgZW5kcG9pbnQsIGF4aW9zSW5zdGFuY2UsIGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4sIGlzUmVjb25uZWN0Q2hhdCwgaXNQZXJzaXN0ZW50Q2hhdCwgY2hhdElkLCBoZWFkZXJzLCBkYXRhLCBvcHRpb25zO1xuICAgICAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICB0aW1lciA9IFRpbWVyXzEuVGltZXIuVElNRVIoKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5sb2dnZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIubG9nKExvZ0xldmVsXzEuTG9nTGV2ZWwuSU5GTywgRW51bXNfMi5PQ1NES1RlbGVtZXRyeUV2ZW50LlNFU1NJT05DTE9TRVNUQVJURUQsIHsgUmVxdWVzdElkOiByZXF1ZXN0SWQgfSwgXCJTZXNzaW9uIENsb3NlIFN0YXJ0ZWRcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVuZHBvaW50ID0gdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsICsgXCIvXCIgKyBPbW5pY2hhbm5lbEVuZHBvaW50c18xLmRlZmF1bHQuTGl2ZUNoYXRTZXNzaW9uQ2xvc2VQYXRoICsgXCIvXCIgKyB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZCArIFwiL1wiICsgdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWQgKyBcIi9cIiArIHJlcXVlc3RJZCArIFwiP2NoYW5uZWxJZD1cIiArIHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZDtcbiAgICAgICAgICAgICAgICBheGlvc0luc3RhbmNlID0gYXhpb3NfMS5kZWZhdWx0LmNyZWF0ZSgpO1xuICAgICAgICAgICAgICAgIGF4aW9zUmV0cnlfMS5kZWZhdWx0KGF4aW9zSW5zdGFuY2UsIHsgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlIH0pO1xuICAgICAgICAgICAgICAgIGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4gPSBzZXNzaW9uQ2xvc2VPcHRpb25hbFBhcmFtcy5hdXRoZW50aWNhdGVkVXNlclRva2VuLCBpc1JlY29ubmVjdENoYXQgPSBzZXNzaW9uQ2xvc2VPcHRpb25hbFBhcmFtcy5pc1JlY29ubmVjdENoYXQsIGlzUGVyc2lzdGVudENoYXQgPSBzZXNzaW9uQ2xvc2VPcHRpb25hbFBhcmFtcy5pc1BlcnNpc3RlbnRDaGF0LCBjaGF0SWQgPSBzZXNzaW9uQ2xvc2VPcHRpb25hbFBhcmFtcy5jaGF0SWQ7XG4gICAgICAgICAgICAgICAgaGVhZGVycyA9IENvbnN0YW50c18xLmRlZmF1bHQuZGVmYXVsdEhlYWRlcnM7XG4gICAgICAgICAgICAgICAgZGF0YSA9IHt9O1xuICAgICAgICAgICAgICAgIGRhdGEuY2hhdElkID0gY2hhdElkO1xuICAgICAgICAgICAgICAgIGlmIChhdXRoZW50aWNhdGVkVXNlclRva2VuKSB7XG4gICAgICAgICAgICAgICAgICAgIGVuZHBvaW50ID0gdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsICsgXCIvXCIgKyBPbW5pY2hhbm5lbEVuZHBvaW50c18xLmRlZmF1bHQuTGl2ZUNoYXRBdXRoU2Vzc2lvbkNsb3NlUGF0aCArIFwiL1wiICsgdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWQgKyBcIi9cIiArIHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkICsgXCIvXCIgKyByZXF1ZXN0SWQgKyBcIj9jaGFubmVsSWQ9XCIgKyB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWQ7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVyc18xLmRlZmF1bHQuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaXNSZWNvbm5lY3RDaGF0KSB7XG4gICAgICAgICAgICAgICAgICAgIGVuZHBvaW50ICs9IFwiJmlzUmVjb25uZWN0Q2hhdD10cnVlXCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpc1BlcnNpc3RlbnRDaGF0KSB7XG4gICAgICAgICAgICAgICAgICAgIGVuZHBvaW50ICs9IFwiJmlzUGVyc2lzdGVudENoYXQ9dHJ1ZVwiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvcHRpb25zID0ge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICAgICAgICAgICAgICB1cmw6IGVuZHBvaW50XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyByZXR1cm4gX19hd2FpdGVyKF90aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCBlcnJvcl83LCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2EudHJ5cy5wdXNoKFswLCAyLCAsIDVdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIGF4aW9zSW5zdGFuY2Uob3B0aW9ucyldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubG9nZ2VyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIubG9nKExvZ0xldmVsXzEuTG9nTGV2ZWwuSU5GTywgRW51bXNfMi5PQ1NES1RlbGVtZXRyeUV2ZW50LlNFU1NJT05DTE9TRVNVQ0NFRURFRCwgeyBSZXF1ZXN0SWQ6IHJlcXVlc3RJZCwgUmVnaW9uOiByZXNwb25zZS5kYXRhLlJlZ2lvbiwgRWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczogZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgVHJhbnNhY3Rpb25JZDogcmVzcG9uc2UuaGVhZGVyc1tcInRyYW5zYWN0aW9uLWlkXCJdIH0sIFwiU2Vzc2lvbiBDbG9zZSBTdWNjZWVkZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMgLypicmVhayovLCA1XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfNyA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmxvZ2dlcikgcmV0dXJuIFszIC8qYnJlYWsqLywgNF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCBMb2dnaW5nU2FuaXRpemVyXzEuTG9nZ2luZ1Nhbml0aXplci5zdHJpcEVycm9yU2Vuc2l0aXZlUHJvcGVydGllcyhlcnJvcl83KV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmxvZyhMb2dMZXZlbF8xLkxvZ0xldmVsLkVSUk9SLCBFbnVtc18yLk9DU0RLVGVsZW1ldHJ5RXZlbnQuU0VTU0lPTkNMT1NFRkFJTEVELCB7IFJlcXVlc3RJZDogcmVxdWVzdElkLCBFeGNlcHRpb25EZXRhaWxzOiBlcnJvcl83LCBFbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzOiBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzIH0sIFwiU2Vzc2lvbiBDbG9zZSBGYWlsZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYS5sYWJlbCA9IDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszIC8qYnJlYWsqLywgNV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNTogcmV0dXJuIFsyIC8qcmV0dXJuKi9dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTsgfSldO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogVmFsaWRhdGUgdGhlIGF1dGggY2hhdCByZWNvcmQgZXhpc3RzIGluIGRhdGFiYXNlLlxuICAgICAqIEBwYXJhbSByZXF1ZXN0SWQ6IFJlcXVlc3RJZCBmb3IgdmFsaWRhdGVBdXRoQ2hhdFJlY29yZCAoc2FtZSByZXF1ZXN0IGlkIGZvciBzZXNzaW9uIGluaXQpLlxuICAgICAqIEBwYXJhbSB2YWxpZGF0ZUF1dGhDaGF0UmVjb3JkT3B0aW9uYWxQYXJhbXM6IE9wdGlvbmFsIHBhcmFtZXRlcnMgZm9yIHZhbGlkYXRlQXV0aENoYXRSZWNvcmQuXG4gICAgICovXG4gICAgU0RLLnByb3RvdHlwZS52YWxpZGF0ZUF1dGhDaGF0UmVjb3JkID0gZnVuY3Rpb24gKHJlcXVlc3RJZCwgdmFsaWRhdGVBdXRoQ2hhdFJlY29yZE9wdGlvbmFsUGFyYW1zKSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZDtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHRpbWVyLCBhdXRoZW50aWNhdGVkVXNlclRva2VuLCBjaGF0SWQsIGVuZHBvaW50LCBheGlvc0luc3RhbmNlLCBoZWFkZXJzLCBvcHRpb25zLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgZXJyb3JfOCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcztcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2UpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKF9lLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyID0gVGltZXJfMS5UaW1lci5USU1FUigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubG9nZ2VyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIubG9nKExvZ0xldmVsXzEuTG9nTGV2ZWwuSU5GTywgRW51bXNfMi5PQ1NES1RlbGVtZXRyeUV2ZW50LlZBTElEQVRFQVVUSENIQVRSRUNPUkRTVEFSVEVELCB7IFJlcXVlc3RJZDogcmVxdWVzdElkIH0sIFwiVmFsaWRhdGUgQXV0aCBDaGF0IFJlY29yZCBTdGFydGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYXV0aGVudGljYXRlZFVzZXJUb2tlbiA9IHZhbGlkYXRlQXV0aENoYXRSZWNvcmRPcHRpb25hbFBhcmFtcy5hdXRoZW50aWNhdGVkVXNlclRva2VuLCBjaGF0SWQgPSB2YWxpZGF0ZUF1dGhDaGF0UmVjb3JkT3B0aW9uYWxQYXJhbXMuY2hhdElkO1xuICAgICAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnQgPSB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmwgKyBcIi9cIiArIE9tbmljaGFubmVsRW5kcG9pbnRzXzEuZGVmYXVsdC5MaXZlQ2hhdFZhbGlkYXRlQXV0aENoYXRNYXBSZWNvcmRQYXRoICsgXCIvXCIgKyB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZCArIFwiL1wiICsgdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWQgKyBcIi9cIiArIGNoYXRJZCArIFwiL1wiICsgcmVxdWVzdElkICsgXCI/Y2hhbm5lbElkPVwiICsgdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXhpb3NJbnN0YW5jZSA9IGF4aW9zXzEuZGVmYXVsdC5jcmVhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF4aW9zUmV0cnlfMS5kZWZhdWx0KGF4aW9zSW5zdGFuY2UsIHsgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVycyA9IENvbnN0YW50c18xLmRlZmF1bHQuZGVmYXVsdEhlYWRlcnM7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXV0aGVudGljYXRlZFVzZXJUb2tlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVyc18xLmRlZmF1bHQuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IGVuZHBvaW50XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgX2UubGFiZWwgPSAxO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICBfZS50cnlzLnB1c2goWzEsIDMsICwgNV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgYXhpb3NJbnN0YW5jZShvcHRpb25zKV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gX2Uuc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKChfYSA9IHJlc3BvbnNlLmRhdGEpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5hdXRoQ2hhdEV4aXN0KSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfYiA9IHRoaXMubG9nZ2VyKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IubG9nKExvZ0xldmVsXzEuTG9nTGV2ZWwuSU5GTywgRW51bXNfMi5PQ1NES1RlbGVtZXRyeUV2ZW50LlZBTElEQVRFQVVUSENIQVRSRUNPUkRTVUNDRUVERUQsIHsgUmVxdWVzdElkOiByZXF1ZXN0SWQsIFJlZ2lvbjogcmVzcG9uc2UuZGF0YS5SZWdpb24sIEVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHM6IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIFRyYW5zYWN0aW9uSWQ6IHJlc3BvbnNlLmhlYWRlcnNbXCJ0cmFuc2FjdGlvbi1pZFwiXSB9LCBcIlZhbGlkYXRlIEF1dGggQ2hhdCBSZWNvcmQgU3VjY2VlZGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBQcm9taXNlLnJlc29sdmUocmVzcG9uc2UuZGF0YSldO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9jID0gdGhpcy5sb2dnZXIpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5sb2coTG9nTGV2ZWxfMS5Mb2dMZXZlbC5JTkZPLCBFbnVtc18yLk9DU0RLVGVsZW1ldHJ5RXZlbnQuVkFMSURBVEVBVVRIQ0hBVFJFQ09SREZBSUxFRCwgeyBSZXF1ZXN0SWQ6IHJlcXVlc3RJZCwgUmVnaW9uOiByZXNwb25zZS5kYXRhLlJlZ2lvbiwgRWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczogZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgVHJhbnNhY3Rpb25JZDogcmVzcG9uc2UuaGVhZGVyc1tcInRyYW5zYWN0aW9uLWlkXCJdLCBFcnJvckNvZGU6IHJlc3BvbnNlLnN0YXR1cyB9LCBcIlZhbGlkYXRlIEF1dGggQ2hhdCBSZWNvcmQgRmFpbGVkLiBSZWNvcmQgaXMgbm90IGZvdW5kIG9yIHJlcXVlc3QgaXMgbm90IGF1dGhvcml6ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIlZhbGlkYXRlIEF1dGggQ2hhdCBSZWNvcmQgRmFpbGVkLiBSZWNvcmQgaXMgbm90IGZvdW5kIG9yIHJlcXVlc3QgaXMgbm90IGF1dGhvcml6ZWRcIikpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDVdO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl84ID0gX2Uuc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCBMb2dnaW5nU2FuaXRpemVyXzEuTG9nZ2luZ1Nhbml0aXplci5zdHJpcEVycm9yU2Vuc2l0aXZlUHJvcGVydGllcyhlcnJvcl84KV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgICAgIF9lLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIChfZCA9IHRoaXMubG9nZ2VyKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QubG9nKExvZ0xldmVsXzEuTG9nTGV2ZWwuRVJST1IsIEVudW1zXzIuT0NTREtUZWxlbWV0cnlFdmVudC5WQUxJREFURUFVVEhDSEFUUkVDT1JERkFJTEVELCB7IFJlcXVlc3RJZDogcmVxdWVzdElkLCBFeGNlcHRpb25EZXRhaWxzOiBlcnJvcl84LCBFbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzOiBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzIH0sIFwiVmFsaWRhdGUgQXV0aCBDaGF0IFJlY29yZCBGYWlsZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3JfOC50b1N0cmluZygpID09PSBcIkVycm9yOiBSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlIDQwNFwiKSB7IC8vIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgUHJvbWlzZS5yZXNvbHZlKHt9KV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgUHJvbWlzZS5yZWplY3QoKV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMgLypicmVhayovLCA1XTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA1OiByZXR1cm4gWzIgLypyZXR1cm4qL107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogU3VibWl0cyBwb3N0IGNoYXQgcmVzcG9uc2UuXG4gICAgICogQHBhcmFtIHJlcXVlc3RJZCBSZXF1ZXN0SWQgb2YgdGhlIG9tbmljaGFubmVsIHNlc3Npb24uXG4gICAgICogQHBhcmFtIHBvc3RDaGF0UmVzcG9uc2UgUG9zdCBjaGF0IHJlc3BvbnNlIHRvIHN1Ym1pdC5cbiAgICAgKiBAcGFyYW0gc3VibWl0UG9zdENoYXRSZXNwb25zZU9wdGlvbmFsUGFyYW1zOiBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciBzdWJtaXQgcG9zdCBjaGF0IHJlc3BvbnNlLlxuICAgICAqL1xuICAgIFNESy5wcm90b3R5cGUuc3VibWl0UG9zdENoYXRSZXNwb25zZSA9IGZ1bmN0aW9uIChyZXF1ZXN0SWQsIHBvc3RDaGF0UmVzcG9uc2UsIHN1Ym1pdFBvc3RDaGF0UmVzcG9uc2VPcHRpb25hbFBhcmFtcykge1xuICAgICAgICBpZiAoc3VibWl0UG9zdENoYXRSZXNwb25zZU9wdGlvbmFsUGFyYW1zID09PSB2b2lkIDApIHsgc3VibWl0UG9zdENoYXRSZXNwb25zZU9wdGlvbmFsUGFyYW1zID0ge307IH1cbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHRpbWVyLCBlbmRwb2ludCwgYXhpb3NJbnN0YW5jZSwgYXV0aGVudGljYXRlZFVzZXJUb2tlbiwgaGVhZGVycywgb3B0aW9ucztcbiAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgdGltZXIgPSBUaW1lcl8xLlRpbWVyLlRJTUVSKCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubG9nZ2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmxvZyhMb2dMZXZlbF8xLkxvZ0xldmVsLklORk8sIEVudW1zXzIuT0NTREtUZWxlbWV0cnlFdmVudC5TVUJNSVRQT1NUQ0hBVFNUQVJURUQsIHsgUmVxdWVzdElkOiByZXF1ZXN0SWQgfSwgXCJTdWJtaXQgUG9zdCBDaGF0IFN0YXJ0ZWRcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVuZHBvaW50ID0gdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsICsgXCIvXCIgKyBPbW5pY2hhbm5lbEVuZHBvaW50c18xLmRlZmF1bHQuTGl2ZUNoYXRTdWJtaXRQb3N0Q2hhdFBhdGggKyBcIi9cIiArIHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkICsgXCIvXCIgKyB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZCArIFwiL1wiICsgcmVxdWVzdElkICsgXCI/Y2hhbm5lbElkPVwiICsgdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkO1xuICAgICAgICAgICAgICAgIGF4aW9zSW5zdGFuY2UgPSBheGlvc18xLmRlZmF1bHQuY3JlYXRlKCk7XG4gICAgICAgICAgICAgICAgYXhpb3NSZXRyeV8xLmRlZmF1bHQoYXhpb3NJbnN0YW5jZSwgeyByZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ubWF4UmVxdWVzdFJldHJpZXNPbkZhaWx1cmUgfSk7XG4gICAgICAgICAgICAgICAgYXV0aGVudGljYXRlZFVzZXJUb2tlbiA9IHN1Ym1pdFBvc3RDaGF0UmVzcG9uc2VPcHRpb25hbFBhcmFtcy5hdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgICAgICAgICAgICAgIGhlYWRlcnMgPSBDb25zdGFudHNfMS5kZWZhdWx0LmRlZmF1bHRIZWFkZXJzO1xuICAgICAgICAgICAgICAgIGlmIChhdXRoZW50aWNhdGVkVXNlclRva2VuKSB7XG4gICAgICAgICAgICAgICAgICAgIGVuZHBvaW50ID0gdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsICsgXCIvXCIgKyBPbW5pY2hhbm5lbEVuZHBvaW50c18xLmRlZmF1bHQuTGl2ZUNoYXRBdXRoU3VibWl0UG9zdENoYXRQYXRoICsgXCIvXCIgKyB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZCArIFwiL1wiICsgdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWQgKyBcIi9cIiArIHJlcXVlc3RJZCArIFwiP2NoYW5uZWxJZD1cIiArIHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZDtcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzXzEuZGVmYXVsdC5hdXRoZW50aWNhdGVkVXNlclRva2VuXSA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KHBvc3RDaGF0UmVzcG9uc2UpLFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICAgICAgICAgICAgICB1cmw6IGVuZHBvaW50XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyByZXR1cm4gX19hd2FpdGVyKF90aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCBlcnJvcl85LCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2EudHJ5cy5wdXNoKFswLCAyLCAsIDVdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIGF4aW9zSW5zdGFuY2Uob3B0aW9ucyldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubG9nZ2VyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIubG9nKExvZ0xldmVsXzEuTG9nTGV2ZWwuSU5GTywgRW51bXNfMi5PQ1NES1RlbGVtZXRyeUV2ZW50LlNVQk1JVFBPU1RDSEFUU1VDQ0VFREVELCB7IFJlcXVlc3RJZDogcmVxdWVzdElkLCBSZWdpb246IHJlc3BvbnNlLmRhdGEuUmVnaW9uLCBFbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzOiBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCBUcmFuc2FjdGlvbklkOiByZXNwb25zZS5oZWFkZXJzW1widHJhbnNhY3Rpb24taWRcIl0gfSwgXCJTdWJtaXQgUG9zdCBDaGF0IFN1Y2NlZWRlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl85ID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMubG9nZ2VyKSByZXR1cm4gWzMgLypicmVhayovLCA0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIExvZ2dpbmdTYW5pdGl6ZXJfMS5Mb2dnaW5nU2FuaXRpemVyLnN0cmlwRXJyb3JTZW5zaXRpdmVQcm9wZXJ0aWVzKGVycm9yXzkpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIubG9nKExvZ0xldmVsXzEuTG9nTGV2ZWwuRVJST1IsIEVudW1zXzIuT0NTREtUZWxlbWV0cnlFdmVudC5TVUJNSVRQT1NUQ0hBVEZBSUxFRCwgeyBSZXF1ZXN0SWQ6IHJlcXVlc3RJZCwgRXhjZXB0aW9uRGV0YWlsczogZXJyb3JfOSwgRWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczogZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyB9LCBcIlN1Ym1pdCBQb3N0IENoYXQgRmFpbGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2EubGFiZWwgPSA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDU6IHJldHVybiBbMiAvKnJldHVybiovXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7IH0pXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFN1Ym1pdHMgcG9zdCBjaGF0IHJlc3BvbnNlLlxuICAgICAqIEBwYXJhbSByZXF1ZXN0SWQgUmVxdWVzdElkIG9mIHRoZSBvbW5pY2hhbm5lbCBzZXNzaW9uLlxuICAgICAqIEBwYXJhbSBwb3N0Q2hhdFJlc3BvbnNlIFBvc3QgY2hhdCByZXNwb25zZSB0byBzdWJtaXQuXG4gICAgICogQHBhcmFtIHN1Ym1pdFBvc3RDaGF0UmVzcG9uc2VPcHRpb25hbFBhcmFtczogT3B0aW9uYWwgcGFyYW1ldGVycyBmb3Igc3VibWl0IHBvc3QgY2hhdCByZXNwb25zZS5cbiAgICAgKi9cbiAgICBTREsucHJvdG90eXBlLmdldFN1cnZleUludml0ZUxpbmsgPSBmdW5jdGlvbiAoc3VydmV5T3duZXJJZCwgc3VydmV5SW52aXRlQVBJUmVxdWVzdEJvZHksIGdldHN1cnZleUludml0ZUxpbmtPcHRpb25hbFBhcmFtcykge1xuICAgICAgICBpZiAoZ2V0c3VydmV5SW52aXRlTGlua09wdGlvbmFsUGFyYW1zID09PSB2b2lkIDApIHsgZ2V0c3VydmV5SW52aXRlTGlua09wdGlvbmFsUGFyYW1zID0ge307IH1cbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHRpbWVyLCBlbmRwb2ludCwgYXhpb3NJbnN0YW5jZSwgYXV0aGVudGljYXRlZFVzZXJUb2tlbiwgcmVxdWVzdElkLCBoZWFkZXJzLCBvcHRpb25zO1xuICAgICAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICB0aW1lciA9IFRpbWVyXzEuVGltZXIuVElNRVIoKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5sb2dnZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIubG9nKExvZ0xldmVsXzEuTG9nTGV2ZWwuSU5GTywgRW51bXNfMi5PQ1NES1RlbGVtZXRyeUV2ZW50LkdFVFNVUlZFWUlOVklURUxJTktTVEFSVEVELCB7IFN1cnZleU93bmVySWQ6IHN1cnZleU93bmVySWQgfSwgXCJHZXQgU3VydmV5IEludml0ZSBMaW5rIFN0YXJ0ZWRcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVuZHBvaW50ID0gdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsICsgXCIvXCIgKyBPbW5pY2hhbm5lbEVuZHBvaW50c18xLmRlZmF1bHQuTGl2ZUNoYXRHZXRTdXJ2ZXlJbnZpdGVMaW5rUGF0aCArIFwiL1wiICsgdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWQgKyBcIi9cIiArIHN1cnZleU93bmVySWQ7XG4gICAgICAgICAgICAgICAgYXhpb3NJbnN0YW5jZSA9IGF4aW9zXzEuZGVmYXVsdC5jcmVhdGUoKTtcbiAgICAgICAgICAgICAgICBheGlvc1JldHJ5XzEuZGVmYXVsdChheGlvc0luc3RhbmNlLCB7IHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSB9KTtcbiAgICAgICAgICAgICAgICBhdXRoZW50aWNhdGVkVXNlclRva2VuID0gZ2V0c3VydmV5SW52aXRlTGlua09wdGlvbmFsUGFyYW1zLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4sIHJlcXVlc3RJZCA9IGdldHN1cnZleUludml0ZUxpbmtPcHRpb25hbFBhcmFtcy5yZXF1ZXN0SWQ7XG4gICAgICAgICAgICAgICAgaGVhZGVycyA9IENvbnN0YW50c18xLmRlZmF1bHQuZGVmYXVsdEhlYWRlcnM7XG4gICAgICAgICAgICAgICAgaWYgKGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnQgPSB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmwgKyBcIi9cIiArIE9tbmljaGFubmVsRW5kcG9pbnRzXzEuZGVmYXVsdC5MaXZlQ2hhdEF1dGhHZXRTdXJ2ZXlJbnZpdGVMaW5rUGF0aCArIFwiL1wiICsgdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWQgKyBcIi9cIiArIHN1cnZleU93bmVySWQ7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVyc18xLmRlZmF1bHQuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnNfMS5kZWZhdWx0LndpZGdldEFwcElkXSA9IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocmVxdWVzdElkKSB7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVyc18xLmRlZmF1bHQucmVxdWVzdElkXSA9IHJlcXVlc3RJZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogSlNPTi5zdHJpbmdpZnkoc3VydmV5SW52aXRlQVBJUmVxdWVzdEJvZHkpLFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICAgICAgICAgICAgICB1cmw6IGVuZHBvaW50XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyByZXR1cm4gX19hd2FpdGVyKF90aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3BvbnNlLCBkYXRhLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCBlcnJvcl8xMCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcztcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9hLnRyeXMucHVzaChbMCwgMiwgLCA1XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCBheGlvc0luc3RhbmNlKG9wdGlvbnMpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gcmVzcG9uc2UuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubG9nZ2VyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIubG9nKExvZ0xldmVsXzEuTG9nTGV2ZWwuSU5GTywgRW51bXNfMi5PQ1NES1RlbGVtZXRyeUV2ZW50LkdFVFNVUlZFWUlOVklURUxJTktTVUNDRUVERUQsIHsgUmVnaW9uOiByZXNwb25zZS5kYXRhLlJlZ2lvbiwgRWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczogZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgVHJhbnNhY3Rpb25JZDogcmVzcG9uc2UuaGVhZGVyc1tcInRyYW5zYWN0aW9uLWlkXCJdIH0sIFwiR2V0IFN1cnZleSBJbnZpdGUgTGluayBTdWNjZWVkZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszIC8qYnJlYWsqLywgNV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yXzEwID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMubG9nZ2VyKSByZXR1cm4gWzMgLypicmVhayovLCA0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIExvZ2dpbmdTYW5pdGl6ZXJfMS5Mb2dnaW5nU2FuaXRpemVyLnN0cmlwRXJyb3JTZW5zaXRpdmVQcm9wZXJ0aWVzKGVycm9yXzEwKV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmxvZyhMb2dMZXZlbF8xLkxvZ0xldmVsLkVSUk9SLCBFbnVtc18yLk9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUU1VSVkVZSU5WSVRFTElOS0ZBSUxFRCwgeyBFeGNlcHRpb25EZXRhaWxzOiBlcnJvcl8xMCwgRWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczogZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyB9LCBcIkdldCBTdXJ2ZXkgSW52aXRlIExpbmsgRmFpbGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2EubGFiZWwgPSA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDU6IHJldHVybiBbMiAvKnJldHVybiovXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7IH0pXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEdldCBjaGF0IHRyYW5zY3JpcHRzIGZvciBjdXN0b21lci5cbiAgICAgKiBAcGFyYW0gcmVxdWVzdElkIFJlcXVlc3RJZCBvZiB0aGUgb21uaWNoYW5uZWwgc2Vzc2lvbi5cbiAgICAgKiBAcGFyYW0gY2hhdElkIENoYXQgdGhyZWFkIElkLlxuICAgICAqIEBwYXJhbSB0b2tlbiBTa3lwZSB0b2tlbi5cbiAgICAgKiBAcGFyYW0gZ2V0Q2hhdFRyYW5zY3JpcHRzT3B0aW9uYWxQYXJhbXMgT3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgZ2V0IGNoYXQgdHJhbnNjcmlwdHMuXG4gICAgICovXG4gICAgU0RLLnByb3RvdHlwZS5nZXRDaGF0VHJhbnNjcmlwdHMgPSBmdW5jdGlvbiAocmVxdWVzdElkLCBjaGF0SWQsIHRva2VuLCBnZXRDaGF0VHJhbnNjcmlwdHNPcHRpb25hbFBhcmFtcykge1xuICAgICAgICBpZiAoZ2V0Q2hhdFRyYW5zY3JpcHRzT3B0aW9uYWxQYXJhbXMgPT09IHZvaWQgMCkgeyBnZXRDaGF0VHJhbnNjcmlwdHNPcHRpb25hbFBhcmFtcyA9IHt9OyB9XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB0aW1lciwgZW5kcG9pbnQsIGF4aW9zSW5zdGFuY2UsIGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4sIGN1cnJlbnRMaXZlQ2hhdFZlcnNpb24sIGhlYWRlcnMsIG9wdGlvbnM7XG4gICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIHRpbWVyID0gVGltZXJfMS5UaW1lci5USU1FUigpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmxvZ2dlcikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5sb2coTG9nTGV2ZWxfMS5Mb2dMZXZlbC5JTkZPLCBFbnVtc18yLk9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUQ0hBVFRSQU5TQ1JJUFRTVEFSVEVELCB7IFJlcXVlc3RJZDogcmVxdWVzdElkIH0sIFwiR2V0IENoYXQgVHJhbnNjcmlwdCBTdGFydGVkXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbmRwb2ludCA9IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybCArIFwiL1wiICsgT21uaWNoYW5uZWxFbmRwb2ludHNfMS5kZWZhdWx0LkxpdmVDaGF0R2V0Q2hhdFRyYW5zY3JpcHRQYXRoICsgXCIvXCIgKyBjaGF0SWQgKyBcIi9cIiArIHJlcXVlc3RJZCArIFwiP2NoYW5uZWxJZD1cIiArIHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZDtcbiAgICAgICAgICAgICAgICBheGlvc0luc3RhbmNlID0gYXhpb3NfMS5kZWZhdWx0LmNyZWF0ZSgpO1xuICAgICAgICAgICAgICAgIGF4aW9zUmV0cnlfMS5kZWZhdWx0KGF4aW9zSW5zdGFuY2UsIHsgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlIH0pO1xuICAgICAgICAgICAgICAgIGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4gPSBnZXRDaGF0VHJhbnNjcmlwdHNPcHRpb25hbFBhcmFtcy5hdXRoZW50aWNhdGVkVXNlclRva2VuLCBjdXJyZW50TGl2ZUNoYXRWZXJzaW9uID0gZ2V0Q2hhdFRyYW5zY3JpcHRzT3B0aW9uYWxQYXJhbXMuY3VycmVudExpdmVDaGF0VmVyc2lvbjtcbiAgICAgICAgICAgICAgICBoZWFkZXJzID0gQ29uc3RhbnRzXzEuZGVmYXVsdC5kZWZhdWx0SGVhZGVycztcbiAgICAgICAgICAgICAgICBoZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnNfMS5kZWZhdWx0Lm9yZ2FuaXphdGlvbklkXSA9IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkO1xuICAgICAgICAgICAgICAgIGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVyc18xLmRlZmF1bHQud2lkZ2V0QXBwSWRdID0gdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWQ7XG4gICAgICAgICAgICAgICAgaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzXzEuZGVmYXVsdC5hdXRob3JpemF0aW9uXSA9IHRva2VuO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmxpdmVDaGF0VmVyc2lvbiA9PT0gRW51bXNfMS5MaXZlQ2hhdFZlcnNpb24uVjIgfHwgKGN1cnJlbnRMaXZlQ2hhdFZlcnNpb24gJiYgY3VycmVudExpdmVDaGF0VmVyc2lvbiA9PT0gRW51bXNfMS5MaXZlQ2hhdFZlcnNpb24uVjIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGVuZHBvaW50ID0gdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsICsgXCIvXCIgKyBPbW5pY2hhbm5lbEVuZHBvaW50c18xLmRlZmF1bHQuTGl2ZUNoYXR2MkdldENoYXRUcmFuc2NyaXB0UGF0aCArIFwiL1wiICsgY2hhdElkICsgXCIvXCIgKyByZXF1ZXN0SWQgKyBcIj9jaGFubmVsSWQ9XCIgKyB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhdXRoZW50aWNhdGVkVXNlclRva2VuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRwb2ludCA9IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybCArIFwiL1wiICsgT21uaWNoYW5uZWxFbmRwb2ludHNfMS5kZWZhdWx0LkxpdmVDaGF0djJBdXRoR2V0Q2hhdFRyYW5zY3JpcHRQYXRoICsgXCIvXCIgKyBjaGF0SWQgKyBcIi9cIiArIHJlcXVlc3RJZCArIFwiP2NoYW5uZWxJZD1cIiArIHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChhdXRoZW50aWNhdGVkVXNlclRva2VuKSB7XG4gICAgICAgICAgICAgICAgICAgIGVuZHBvaW50ID0gdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsICsgXCIvXCIgKyBPbW5pY2hhbm5lbEVuZHBvaW50c18xLmRlZmF1bHQuTGl2ZUNoYXRBdXRoR2V0Q2hhdFRyYW5zY3JpcHRQYXRoICsgXCIvXCIgKyBjaGF0SWQgKyBcIi9cIiArIHJlcXVlc3RJZCArIFwiP2NoYW5uZWxJZD1cIiArIHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgICAgICAgICAgICAgICB1cmw6IGVuZHBvaW50XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyByZXR1cm4gX19hd2FpdGVyKF90aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCBkYXRhLCBlcnJvcl8xMSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcztcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9hLnRyeXMucHVzaChbMCwgMiwgLCA1XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCBheGlvc0luc3RhbmNlKG9wdGlvbnMpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSByZXNwb25zZS5kYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubG9nZ2VyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIubG9nKExvZ0xldmVsXzEuTG9nTGV2ZWwuSU5GTywgRW51bXNfMi5PQ1NES1RlbGVtZXRyeUV2ZW50LkdFVENIQVRUUkFOU0NSSVBUU1VDQ0VFREVELCB7IFJlcXVlc3RJZDogcmVxdWVzdElkLCBSZWdpb246IHJlc3BvbnNlLmRhdGEuUmVnaW9uLCBFbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzOiBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCBUcmFuc2FjdGlvbklkOiByZXNwb25zZS5oZWFkZXJzW1widHJhbnNhY3Rpb24taWRcIl0gfSwgXCJHZXQgQ2hhdCBUcmFuc2NyaXB0IFN1Y2NlZWRlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMgLypicmVhayovLCA1XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfMTEgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5sb2dnZXIpIHJldHVybiBbMyAvKmJyZWFrKi8sIDRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgTG9nZ2luZ1Nhbml0aXplcl8xLkxvZ2dpbmdTYW5pdGl6ZXIuc3RyaXBFcnJvclNlbnNpdGl2ZVByb3BlcnRpZXMoZXJyb3JfMTEpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIubG9nKExvZ0xldmVsXzEuTG9nTGV2ZWwuRVJST1IsIEVudW1zXzIuT0NTREtUZWxlbWV0cnlFdmVudC5HRVRDSEFUVFJBTlNDUklQVEZBSUxFRCwgeyBSZXF1ZXN0SWQ6IHJlcXVlc3RJZCwgRXhjZXB0aW9uRGV0YWlsczogZXJyb3JfMTEsIEVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHM6IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgfSwgXCJHZXQgQ2hhdCBUcmFuc2NyaXB0IEZhaWxlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9hLmxhYmVsID0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yXzExKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDU6IHJldHVybiBbMiAvKnJldHVybiovXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7IH0pXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEVtYWlsIHRyYW5zY3JpcHQgdG8gY3VzdG9tZXIuXG4gICAgICogQHBhcmFtIHJlcXVlc3RJZCBSZXF1ZXN0SWQgb2YgdGhlIG9tbmljaGFubmVsIHNlc3Npb24uXG4gICAgICogQHBhcmFtIHRva2VuIFNreXBlIHRva2VuLlxuICAgICAqIEBwYXJhbSBlbWFpbFJlcXVlc3RCb2R5IEVtYWlsIHJlcXVlc3QgYm9keS5cbiAgICAgKiBAcGFyYW0gZW1haWxUcmFuc2NyaXB0T3B0aW9uYWxQYXJhbXMgT3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgZW1haWwgdHJhbnNjcmlwdC5cbiAgICAgKi9cbiAgICBTREsucHJvdG90eXBlLmVtYWlsVHJhbnNjcmlwdCA9IGZ1bmN0aW9uIChyZXF1ZXN0SWQsIHRva2VuLCBlbWFpbFJlcXVlc3RCb2R5LCBlbWFpbFRyYW5zY3JpcHRPcHRpb25hbFBhcmFtcykge1xuICAgICAgICBpZiAoZW1haWxUcmFuc2NyaXB0T3B0aW9uYWxQYXJhbXMgPT09IHZvaWQgMCkgeyBlbWFpbFRyYW5zY3JpcHRPcHRpb25hbFBhcmFtcyA9IHt9OyB9XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB0aW1lciwgZW5kcG9pbnQsIGF4aW9zSW5zdGFuY2UsIGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4sIGhlYWRlcnMsIG9wdGlvbnM7XG4gICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIHRpbWVyID0gVGltZXJfMS5UaW1lci5USU1FUigpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmxvZ2dlcikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5sb2coTG9nTGV2ZWxfMS5Mb2dMZXZlbC5JTkZPLCBFbnVtc18yLk9DU0RLVGVsZW1ldHJ5RXZlbnQuRU1BSUxUUkFOU0NSSVBUU1RBUlRFRCwgeyBSZXF1ZXN0SWQ6IHJlcXVlc3RJZCB9LCBcIkVtYWlsIFRyYW5zY3JpcHQgU3RhcnRlZFwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZW5kcG9pbnQgPSB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmwgKyBcIi9cIiArIE9tbmljaGFubmVsRW5kcG9pbnRzXzEuZGVmYXVsdC5MaXZlQ2hhdFRyYW5zY3JpcHRFbWFpbFJlcXVlc3RQYXRoICsgXCIvXCIgKyByZXF1ZXN0SWQgKyBcIj9jaGFubmVsSWQ9XCIgKyB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWQ7XG4gICAgICAgICAgICAgICAgYXhpb3NJbnN0YW5jZSA9IGF4aW9zXzEuZGVmYXVsdC5jcmVhdGUoKTtcbiAgICAgICAgICAgICAgICBheGlvc1JldHJ5XzEuZGVmYXVsdChheGlvc0luc3RhbmNlLCB7IHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSB9KTtcbiAgICAgICAgICAgICAgICBhdXRoZW50aWNhdGVkVXNlclRva2VuID0gZW1haWxUcmFuc2NyaXB0T3B0aW9uYWxQYXJhbXMuYXV0aGVudGljYXRlZFVzZXJUb2tlbjtcbiAgICAgICAgICAgICAgICBoZWFkZXJzID0gQ29uc3RhbnRzXzEuZGVmYXVsdC5kZWZhdWx0SGVhZGVycztcbiAgICAgICAgICAgICAgICBoZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnNfMS5kZWZhdWx0Lm9yZ2FuaXphdGlvbklkXSA9IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkO1xuICAgICAgICAgICAgICAgIGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVyc18xLmRlZmF1bHQud2lkZ2V0QXBwSWRdID0gdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWQ7XG4gICAgICAgICAgICAgICAgaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzXzEuZGVmYXVsdC5hdXRob3JpemF0aW9uXSA9IHRva2VuO1xuICAgICAgICAgICAgICAgIGlmIChhdXRoZW50aWNhdGVkVXNlclRva2VuKSB7XG4gICAgICAgICAgICAgICAgICAgIGVuZHBvaW50ID0gdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsICsgXCIvXCIgKyBPbW5pY2hhbm5lbEVuZHBvaW50c18xLmRlZmF1bHQuTGl2ZUNoYXRBdXRoVHJhbnNjcmlwdEVtYWlsUmVxdWVzdFBhdGggKyBcIi9cIiArIHJlcXVlc3RJZCArIFwiP2NoYW5uZWxJZD1cIiArIHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogSlNPTi5zdHJpbmdpZnkoZW1haWxSZXF1ZXN0Qm9keSksXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgICAgICAgICAgICAgIHVybDogZW5kcG9pbnRcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHJldHVybiBfX2F3YWl0ZXIoX3RoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIGVycm9yXzEyLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2EudHJ5cy5wdXNoKFswLCAyLCAsIDVdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIGF4aW9zSW5zdGFuY2Uob3B0aW9ucyldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubG9nZ2VyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIubG9nKExvZ0xldmVsXzEuTG9nTGV2ZWwuSU5GTywgRW51bXNfMi5PQ1NES1RlbGVtZXRyeUV2ZW50LkVNQUlMVFJBTlNDUklQVFNVQ0NFRURFRCwgeyBSZXF1ZXN0SWQ6IHJlcXVlc3RJZCwgUmVnaW9uOiByZXNwb25zZS5kYXRhLlJlZ2lvbiwgRWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczogZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgVHJhbnNhY3Rpb25JZDogcmVzcG9uc2UuaGVhZGVyc1tcInRyYW5zYWN0aW9uLWlkXCJdIH0sIFwiRW1haWwgVHJhbnNjcmlwdCBTdWNjZWVkZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMgLypicmVhayovLCA1XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfMTIgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5sb2dnZXIpIHJldHVybiBbMyAvKmJyZWFrKi8sIDRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgTG9nZ2luZ1Nhbml0aXplcl8xLkxvZ2dpbmdTYW5pdGl6ZXIuc3RyaXBFcnJvclNlbnNpdGl2ZVByb3BlcnRpZXMoZXJyb3JfMTIpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIubG9nKExvZ0xldmVsXzEuTG9nTGV2ZWwuRVJST1IsIEVudW1zXzIuT0NTREtUZWxlbWV0cnlFdmVudC5FTUFJTFRSQU5TQ1JJUFRGQUlMRUQsIHsgUmVxdWVzdElkOiByZXF1ZXN0SWQsIEV4Y2VwdGlvbkRldGFpbHM6IGVycm9yXzEyLCBFbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzOiBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzIH0sIFwiRW1haWwgVHJhbnNjcmlwdCBGYWlsZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYS5sYWJlbCA9IDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszIC8qYnJlYWsqLywgNV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNTogcmV0dXJuIFsyIC8qcmV0dXJuKi9dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTsgfSldO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogRmV0Y2ggZGF0YSBtYXNraW5nIGluZm8gb2YgdGhlIG9yZy5cbiAgICAgKiBAcGFyYW0gcmVxdWVzdElkIFJlcXVlc3RJZCBvZiB0aGUgb21uaWNoYW5uZWwgc2Vzc2lvbiAoT3B0aW9uYWwpLlxuICAgICAqL1xuICAgIFNESy5wcm90b3R5cGUuZmV0Y2hEYXRhTWFza2luZ0luZm8gPSBmdW5jdGlvbiAocmVxdWVzdElkKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB0aW1lciwgZW5kcG9pbnQsIGF4aW9zSW5zdGFuY2UsIGhlYWRlcnMsIG9wdGlvbnM7XG4gICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIHRpbWVyID0gVGltZXJfMS5UaW1lci5USU1FUigpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmxvZ2dlcikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5sb2coTG9nTGV2ZWxfMS5Mb2dMZXZlbC5JTkZPLCBFbnVtc18yLk9DU0RLVGVsZW1ldHJ5RXZlbnQuRkVUQ0hEQVRBTUFTS0lOR1NUQVJURUQsIHsgUmVxdWVzdElkOiByZXF1ZXN0SWQgfSwgXCJGZXRjaCBEYXRhIE1hc2tpbmcgU3RhcnRlZFwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFyZXF1ZXN0SWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdElkID0gdXVpZF8xLnV1aWR2NCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbmRwb2ludCA9IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybCArIFwiL1wiICsgT21uaWNoYW5uZWxFbmRwb2ludHNfMS5kZWZhdWx0LkxpdmVDaGF0RmV0Y2hEYXRhTWFza2luZ0luZm9QYXRoICsgXCIvXCIgKyB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZDtcbiAgICAgICAgICAgICAgICBheGlvc0luc3RhbmNlID0gYXhpb3NfMS5kZWZhdWx0LmNyZWF0ZSgpO1xuICAgICAgICAgICAgICAgIGF4aW9zUmV0cnlfMS5kZWZhdWx0KGF4aW9zSW5zdGFuY2UsIHsgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlIH0pO1xuICAgICAgICAgICAgICAgIGhlYWRlcnMgPSBDb25zdGFudHNfMS5kZWZhdWx0LmRlZmF1bHRIZWFkZXJzO1xuICAgICAgICAgICAgICAgIGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVyc18xLmRlZmF1bHQub3JnYW5pemF0aW9uSWRdID0gdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWQ7XG4gICAgICAgICAgICAgICAgaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzXzEuZGVmYXVsdC5yZXF1ZXN0SWRdID0gcmVxdWVzdElkO1xuICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBlbmRwb2ludFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgcmV0dXJuIF9fYXdhaXRlcihfdGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgZGF0YSwgZXJyb3JfMTMsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHM7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYS50cnlzLnB1c2goWzAsIDIsICwgNV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgYXhpb3NJbnN0YW5jZShvcHRpb25zKV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gcmVzcG9uc2UuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmxvZ2dlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmxvZyhMb2dMZXZlbF8xLkxvZ0xldmVsLklORk8sIEVudW1zXzIuT0NTREtUZWxlbWV0cnlFdmVudC5GRVRDSERBVEFNQVNLSU5HU1VDQ0VFREVELCB7IFJlcXVlc3RJZDogcmVxdWVzdElkLCBSZWdpb246IHJlc3BvbnNlLmRhdGEuUmVnaW9uLCBFbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzOiBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCBUcmFuc2FjdGlvbklkOiByZXNwb25zZS5oZWFkZXJzW1widHJhbnNhY3Rpb24taWRcIl0gfSwgXCJGZXRjaCBEYXRhIE1hc2tpbmcgU3VjY2VlZGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl8xMyA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmxvZ2dlcikgcmV0dXJuIFszIC8qYnJlYWsqLywgNF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCBMb2dnaW5nU2FuaXRpemVyXzEuTG9nZ2luZ1Nhbml0aXplci5zdHJpcEVycm9yU2Vuc2l0aXZlUHJvcGVydGllcyhlcnJvcl8xMyldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5sb2coTG9nTGV2ZWxfMS5Mb2dMZXZlbC5FUlJPUiwgRW51bXNfMi5PQ1NES1RlbGVtZXRyeUV2ZW50LkZFVENIREFUQU1BU0tJTkdGQUlMRUQsIHsgUmVxdWVzdElkOiByZXF1ZXN0SWQsIEV4Y2VwdGlvbkRldGFpbHM6IGVycm9yXzEzLCBFbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzOiBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzIH0sIFwiRmV0Y2ggRGF0YSBNYXNraW5nIEZhaWxlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9hLmxhYmVsID0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMgLypicmVhayovLCA1XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA1OiByZXR1cm4gWzIgLypyZXR1cm4qL107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pOyB9KV07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBNYWtlcyBhIHNlY29uZGFyeSBjaGFubmVsIGV2ZW50IG5ldHdvcmsgY2FsbCB0byBPbW5pY2hhbm5lbC5cbiAgICAgKiBAcGFyYW0gcmVxdWVzdElkIFJlcXVlc3RJZCB0byB1c2UgZm9yIHNlY29uZGFyeSBjaGFubmVsIGV2ZW50XG4gICAgICogQHBhcmFtIHNlY29uZGFyeUNoYW5uZWxFdmVudFJlcXVlc3RCb2R5IHNlY29uZGFyeUNoYW5uZWwgZXZlbnQgcmVxdWVzdCBib2R5XG4gICAgICogQHBhcmFtIHNlY29uZGFyeUNoYW5uZWxFdmVudE9wdGlvbmFsUGFyYW1zIE9wdGlvbmFsIHBhcmFtZXRlcnMgZm9yIHNlY29uZGFyeSBjaGFubmVsIGV2ZW50cy5cbiAgICAgKi9cbiAgICBTREsucHJvdG90eXBlLm1ha2VTZWNvbmRhcnlDaGFubmVsRXZlbnRSZXF1ZXN0ID0gZnVuY3Rpb24gKHJlcXVlc3RJZCwgc2Vjb25kYXJ5Q2hhbm5lbEV2ZW50UmVxdWVzdEJvZHksIHNlY29uZGFyeUNoYW5uZWxFdmVudE9wdGlvbmFsUGFyYW1zKSB7XG4gICAgICAgIGlmIChzZWNvbmRhcnlDaGFubmVsRXZlbnRPcHRpb25hbFBhcmFtcyA9PT0gdm9pZCAwKSB7IHNlY29uZGFyeUNoYW5uZWxFdmVudE9wdGlvbmFsUGFyYW1zID0ge307IH1cbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHRpbWVyLCBlbmRwb2ludCwgYXhpb3NJbnN0YW5jZSwgYXV0aGVudGljYXRlZFVzZXJUb2tlbiwgaGVhZGVycywgb3B0aW9ucywgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIGRhdGEsIGVycm9yXzE0LCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzO1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGltZXIgPSBUaW1lcl8xLlRpbWVyLlRJTUVSKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5sb2dnZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5sb2coTG9nTGV2ZWxfMS5Mb2dMZXZlbC5JTkZPLCBFbnVtc18yLk9DU0RLVGVsZW1ldHJ5RXZlbnQuU0VDT05EQVJZQ0hBTk5FTEVWRU5UUkVRVUVTVFNUQVJURUQsIHsgUmVxdWVzdElkOiByZXF1ZXN0SWQgfSwgXCJTZWNvbmRhcnkgQ2hhbm5lbCBFdmVudCBSZXF1ZXN0IFN0YXJ0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRwb2ludCA9IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybCArIFwiL1wiICsgT21uaWNoYW5uZWxFbmRwb2ludHNfMS5kZWZhdWx0LkxpdmVDaGF0U2Vjb25kYXJ5Q2hhbm5lbEV2ZW50UGF0aCArIFwiL1wiICsgdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWQgKyBcIi9cIiArIHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkICsgXCIvXCIgKyByZXF1ZXN0SWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBheGlvc0luc3RhbmNlID0gYXhpb3NfMS5kZWZhdWx0LmNyZWF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXhpb3NSZXRyeV8xLmRlZmF1bHQoYXhpb3NJbnN0YW5jZSwgeyByZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ubWF4UmVxdWVzdFJldHJpZXNPbkZhaWx1cmUgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRoZW50aWNhdGVkVXNlclRva2VuID0gc2Vjb25kYXJ5Q2hhbm5lbEV2ZW50T3B0aW9uYWxQYXJhbXMuYXV0aGVudGljYXRlZFVzZXJUb2tlbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnMgPSBDb25zdGFudHNfMS5kZWZhdWx0LmRlZmF1bHRIZWFkZXJzO1xuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzXzEuZGVmYXVsdC5vcmdhbml6YXRpb25JZF0gPSB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdXRoZW50aWNhdGVkVXNlclRva2VuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzXzEuZGVmYXVsdC5hdXRoZW50aWNhdGVkVXNlclRva2VuXSA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnQgPSB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmwgKyBcIi9cIiArIE9tbmljaGFubmVsRW5kcG9pbnRzXzEuZGVmYXVsdC5MaXZlQ2hhdEF1dGhTZWNvbmRhcnlDaGFubmVsRXZlbnRQYXRoICsgXCIvXCIgKyB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZCArIFwiL1wiICsgdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWQgKyBcIi9cIiArIHJlcXVlc3RJZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZHBvaW50ICs9IFwiP2NoYW5uZWxJZD1cIiArIENvbnN0YW50c18xLmRlZmF1bHQuZGVmYXVsdENoYW5uZWxJZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogSlNPTi5zdHJpbmdpZnkoc2Vjb25kYXJ5Q2hhbm5lbEV2ZW50UmVxdWVzdEJvZHkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IGVuZHBvaW50XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgX2EubGFiZWwgPSAxO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICBfYS50cnlzLnB1c2goWzEsIDMsICwgNl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgYXhpb3NJbnN0YW5jZShvcHRpb25zKV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gcmVzcG9uc2UuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmxvZ2dlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmxvZyhMb2dMZXZlbF8xLkxvZ0xldmVsLklORk8sIEVudW1zXzIuT0NTREtUZWxlbWV0cnlFdmVudC5TRUNPTkRBUllDSEFOTkVMRVZFTlRSRVFVRVNUU1VDQ0VFREVELCB7IFJlcXVlc3RJZDogcmVxdWVzdElkLCBSZWdpb246IGRhdGEuUmVnaW9uLCBFbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzOiBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCBUcmFuc2FjdGlvbklkOiByZXNwb25zZS5oZWFkZXJzW1widHJhbnNhY3Rpb24taWRcIl0gfSwgXCJTZWNvbmRhcnkgQ2hhbm5lbCBFdmVudCBSZXF1ZXN0IFN1Y2NlZWRlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDZdO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl8xNCA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmxvZ2dlcikgcmV0dXJuIFszIC8qYnJlYWsqLywgNV07XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCBMb2dnaW5nU2FuaXRpemVyXzEuTG9nZ2luZ1Nhbml0aXplci5zdHJpcEVycm9yU2Vuc2l0aXZlUHJvcGVydGllcyhlcnJvcl8xNCldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5sb2coTG9nTGV2ZWxfMS5Mb2dMZXZlbC5FUlJPUiwgRW51bXNfMi5PQ1NES1RlbGVtZXRyeUV2ZW50LlNFQ09OREFSWUNIQU5ORUxFVkVOVFJFUVVFU1RGQUlMRUQsIHsgUmVxdWVzdElkOiByZXF1ZXN0SWQsIEV4Y2VwdGlvbkRldGFpbHM6IGVycm9yXzE0LCBFbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzOiBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzIH0sIFwiU2Vjb25kYXJ5IENoYW5uZWwgRXZlbnQgUmVxdWVzdCBGYWlsZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBfYS5sYWJlbCA9IDU7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNTogdGhyb3cgZXJyb3JfMTQ7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjogcmV0dXJuIFsyIC8qcmV0dXJuKi9dO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8qKiBTZW5kIHR5cGluZyBpbmRpY2F0b3JcbiAgICAgKiBAcGFyYW0gcmVxdWVzdElkIFJlcXVlc3RJZCBvZiB0aGUgb21uaWNoYW5uZWwgc2Vzc2lvbi5cbiAgICAgKi9cbiAgICBTREsucHJvdG90eXBlLnNlbmRUeXBpbmdJbmRpY2F0b3IgPSBmdW5jdGlvbiAocmVxdWVzdElkLCBjdXJyZW50TGl2ZUNoYXRWZXJzaW9uLCBzZW5kVHlwaW5nSW5kaWNhdG9yT3B0aW9uYWxQYXJhbXMpIHtcbiAgICAgICAgaWYgKHNlbmRUeXBpbmdJbmRpY2F0b3JPcHRpb25hbFBhcmFtcyA9PT0gdm9pZCAwKSB7IHNlbmRUeXBpbmdJbmRpY2F0b3JPcHRpb25hbFBhcmFtcyA9IHt9OyB9XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB0aW1lciwgY3VzdG9tZXJEaXNwbGF5TmFtZSwgZW5kcG9pbnQsIGF4aW9zSW5zdGFuY2UsIGhlYWRlcnMsIG9wdGlvbnM7XG4gICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIC8vIGF2b2lkaW5nIGxvZ2dpbmcgSW5mbyBmb3IgdHlwaW5naW5kaWNhdG9yIHRvIHJlZHVjZSBsb2cgdHJhZmZpY1xuICAgICAgICAgICAgICAgIGlmICghY3VycmVudExpdmVDaGF0VmVyc2lvbiB8fCBjdXJyZW50TGl2ZUNoYXRWZXJzaW9uICE9PSBFbnVtc18xLkxpdmVDaGF0VmVyc2lvbi5WMikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgUHJvbWlzZS5yZXNvbHZlKCldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aW1lciA9IFRpbWVyXzEuVGltZXIuVElNRVIoKTtcbiAgICAgICAgICAgICAgICBjdXN0b21lckRpc3BsYXlOYW1lID0gc2VuZFR5cGluZ0luZGljYXRvck9wdGlvbmFsUGFyYW1zLmN1c3RvbWVyRGlzcGxheU5hbWU7XG4gICAgICAgICAgICAgICAgaWYgKCFjdXJyZW50TGl2ZUNoYXRWZXJzaW9uIHx8IGN1cnJlbnRMaXZlQ2hhdFZlcnNpb24gIT09IEVudW1zXzEuTGl2ZUNoYXRWZXJzaW9uLlYyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVHlwaW5nIGluZGljYXRvciBpcyBvbmx5IHN1cHBvcnRlZCBvbiB2MicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbmRwb2ludCA9IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybCArIFwiL1wiICsgT21uaWNoYW5uZWxFbmRwb2ludHNfMS5kZWZhdWx0LlNlbmRUeXBpbmdJbmRpY2F0b3JQYXRoICsgXCIvXCIgKyByZXF1ZXN0SWQ7XG4gICAgICAgICAgICAgICAgYXhpb3NJbnN0YW5jZSA9IGF4aW9zXzEuZGVmYXVsdC5jcmVhdGUoKTtcbiAgICAgICAgICAgICAgICBoZWFkZXJzID0gQ29uc3RhbnRzXzEuZGVmYXVsdC5kZWZhdWx0SGVhZGVycztcbiAgICAgICAgICAgICAgICBoZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnNfMS5kZWZhdWx0Lm9yZ2FuaXphdGlvbklkXSA9IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkO1xuICAgICAgICAgICAgICAgIGlmIChjdXN0b21lckRpc3BsYXlOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnNbQ29uc3RhbnRzXzEuZGVmYXVsdC5jdXN0b21lckRpc3BsYXlOYW1lXSA9IGN1c3RvbWVyRGlzcGxheU5hbWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgICAgICAgICAgICAgIHVybDogZW5kcG9pbnRcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHJldHVybiBfX2F3YWl0ZXIoX3RoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIGRhdGEsIGVycm9yXzE1LCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2EudHJ5cy5wdXNoKFswLCAyLCAsIDVdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIGF4aW9zSW5zdGFuY2Uob3B0aW9ucyldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHJlc3BvbnNlLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5sb2dnZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5sb2coTG9nTGV2ZWxfMS5Mb2dMZXZlbC5JTkZPLCBFbnVtc18yLk9DU0RLVGVsZW1ldHJ5RXZlbnQuU0VORFRZUElOR0lORElDQVRPUlNVQ0NFRURFRCwgeyBSZXF1ZXN0SWQ6IHJlcXVlc3RJZCwgUmVnaW9uOiBkYXRhLlJlZ2lvbiwgRWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczogZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgVHJhbnNhY3Rpb25JZDogcmVzcG9uc2UuaGVhZGVyc1tcInRyYW5zYWN0aW9uLWlkXCJdIH0sIFwiU2VuZCBUeXBpbmcgSW5kaWNhdG9yIFN1Y2NlZWRlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl8xNSA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmxvZ2dlcikgcmV0dXJuIFszIC8qYnJlYWsqLywgNF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCBMb2dnaW5nU2FuaXRpemVyXzEuTG9nZ2luZ1Nhbml0aXplci5zdHJpcEVycm9yU2Vuc2l0aXZlUHJvcGVydGllcyhlcnJvcl8xNSldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5sb2coTG9nTGV2ZWxfMS5Mb2dMZXZlbC5FUlJPUiwgRW51bXNfMi5PQ1NES1RlbGVtZXRyeUV2ZW50LlNFTkRUWVBJTkdJTkRJQ0FUT1JGQUlMRUQsIHsgUmVxdWVzdElkOiByZXF1ZXN0SWQsIEV4Y2VwdGlvbkRldGFpbHM6IGVycm9yXzE1LCBFbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzOiBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzIH0sIFwiU2VuZCBUeXBpbmcgSW5kaWNhdG9yIEZhaWxlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9hLmxhYmVsID0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yXzE1KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDU6IHJldHVybiBbMiAvKnJldHVybiovXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7IH0pXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFNESy5kZWZhdWx0Q29uZmlndXJhdGlvbiA9IHtcbiAgICAgICAgZ2V0Q2hhdFRva2VuUmV0cnlDb3VudDogMzUsXG4gICAgICAgIGdldENoYXRUb2tlblRpbWVCZXR3ZWVuUmV0cmllc09uRmFpbHVyZTogMTAwMDAsXG4gICAgICAgIG1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlOiAzXG4gICAgfTtcbiAgICByZXR1cm4gU0RLO1xufSgpKTtcbmV4cG9ydHMuZGVmYXVsdCA9IFNESztcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIENvbnN0YW50c18xID0gcmVxdWlyZShcIi4vQ29tbW9uL0NvbnN0YW50c1wiKTtcbnZhciBPQ1NES0xvZ2dlcl8xID0gcmVxdWlyZShcIi4vQ29tbW9uL09DU0RLTG9nZ2VyXCIpO1xudmFyIFNES18xID0gcmVxdWlyZShcIi4vU0RLXCIpO1xudmFyIFNES1Byb3ZpZGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFNES1Byb3ZpZGVyKCkge1xuICAgIH1cbiAgICBTREtQcm92aWRlci5nZXRTREsgPSBmdW5jdGlvbiAob21uaWNoYW5uZWxDb25maWd1cmF0aW9uLCBjb25maWd1cmF0aW9uLCBsb2dnZXIpIHtcbiAgICAgICAgdmFyIGlsb2dnZXIgPSBuZXcgT0NTREtMb2dnZXJfMS5kZWZhdWx0KGxvZ2dlcik7XG4gICAgICAgIHJldHVybiBuZXcgU0RLXzEuZGVmYXVsdCh7XG4gICAgICAgICAgICBjaGFubmVsSWQ6IG9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWQgfHwgQ29uc3RhbnRzXzEuZGVmYXVsdC5kZWZhdWx0Q2hhbm5lbElkLFxuICAgICAgICAgICAgb3JnSWQ6IG9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZCxcbiAgICAgICAgICAgIG9yZ1VybDogb21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybCxcbiAgICAgICAgICAgIHdpZGdldElkOiBvbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWRcbiAgICAgICAgfSwgY29uZmlndXJhdGlvbiB8fCB7fSwgaWxvZ2dlcik7XG4gICAgfTtcbiAgICByZXR1cm4gU0RLUHJvdmlkZXI7XG59KCkpO1xuZXhwb3J0cy5kZWZhdWx0ID0gU0RLUHJvdmlkZXI7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQnJvd3NlckluZm8gPSBleHBvcnRzLlVOS05PV05fVkVSU0lPTiA9IHZvaWQgMDtcbnZhciBFbnVtc18xID0gcmVxdWlyZShcIi4uL0NvbW1vbi9FbnVtc1wiKTtcbi8vIFBvcnRlZCBmcm9tIGh0dHBzOi8vZGV2LmF6dXJlLmNvbS9keW5hbWljc2NybS9PbmVDUk0vX2dpdC9DUk0uT21uaUNoYW5uZWwuTGl2ZUNoYXRXaWRnZXQ/cGF0aD0vc3JjL0xpdmVDaGF0TG9hZGVyL1V0aWxpdHkvQnJvd3NlckluZm8udHNcbnZhciBSRUdFWF9WRVJTSU9OID0gXCIoW1xcXFxkLC5dKylcIjtcbmV4cG9ydHMuVU5LTk9XTl9WRVJTSU9OID0gXCJVXCI7XG52YXIgQnJvd3NlckluZm8gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQnJvd3NlckluZm8oKSB7XG4gICAgfVxuICAgIEJyb3dzZXJJbmZvLmdldFVzZXJBZ2VudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudXNlckFnZW50KCk7XG4gICAgfTtcbiAgICBCcm93c2VySW5mby51c2VyQWdlbnRDb250YWluc1N0cmluZyA9IGZ1bmN0aW9uIChzZWFyY2hTdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VXNlckFnZW50KCkuaW5kZXhPZihzZWFyY2hTdHJpbmcpID4gLTE7XG4gICAgfTtcbiAgICBCcm93c2VySW5mby5pc0Nocm9tZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudXNlckFnZW50Q29udGFpbnNTdHJpbmcoRW51bXNfMS5Ccm93c2VyVmVuZG9yLkNIUk9NRSkgJiZcbiAgICAgICAgICAgICF0aGlzLnVzZXJBZ2VudENvbnRhaW5zU3RyaW5nKEVudW1zXzEuQnJvd3NlclZlbmRvci5FREdFKSAmJlxuICAgICAgICAgICAgIXRoaXMudXNlckFnZW50Q29udGFpbnNTdHJpbmcoRW51bXNfMS5Ccm93c2VyVmVuZG9yLkVER0VfQ0hST01JVU0pO1xuICAgIH07XG4gICAgQnJvd3NlckluZm8uaXNJZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudXNlckFnZW50Q29udGFpbnNTdHJpbmcoXCJUcmlkZW50XCIpO1xuICAgIH07XG4gICAgQnJvd3NlckluZm8uaXNFZGdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy51c2VyQWdlbnRDb250YWluc1N0cmluZyhFbnVtc18xLkJyb3dzZXJWZW5kb3IuRURHRSkgfHxcbiAgICAgICAgICAgIHRoaXMudXNlckFnZW50Q29udGFpbnNTdHJpbmcoRW51bXNfMS5Ccm93c2VyVmVuZG9yLkVER0VfQ0hST01JVU0pO1xuICAgIH07XG4gICAgQnJvd3NlckluZm8uaXNPcGVyYSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudXNlckFnZW50Q29udGFpbnNTdHJpbmcoXCJPUFIvXCIpO1xuICAgIH07XG4gICAgQnJvd3NlckluZm8uZ2V0QnJvd3Nlck5hbWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzT3BlcmEoKSkge1xuICAgICAgICAgICAgcmV0dXJuIEVudW1zXzEuQnJvd3NlclZlbmRvci5PUEVSQTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc0VkZ2UoKSkge1xuICAgICAgICAgICAgcmV0dXJuIEVudW1zXzEuQnJvd3NlclZlbmRvci5FREdFO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzQ2hyb21lKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBFbnVtc18xLkJyb3dzZXJWZW5kb3IuQ0hST01FO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnVzZXJBZ2VudENvbnRhaW5zU3RyaW5nKEVudW1zXzEuQnJvd3NlclZlbmRvci5GSVJFRk9YKSkge1xuICAgICAgICAgICAgcmV0dXJuIEVudW1zXzEuQnJvd3NlclZlbmRvci5GSVJFRk9YO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnVzZXJBZ2VudENvbnRhaW5zU3RyaW5nKEVudW1zXzEuQnJvd3NlclZlbmRvci5TQUZBUkkpKSB7XG4gICAgICAgICAgICByZXR1cm4gRW51bXNfMS5Ccm93c2VyVmVuZG9yLlNBRkFSSTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc0llKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBFbnVtc18xLkJyb3dzZXJWZW5kb3IuSUU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEVudW1zXzEuQnJvd3NlclZlbmRvci5VTktOT1dOO1xuICAgIH07XG4gICAgQnJvd3NlckluZm8uZ2V0QnJvd3NlclZlcnNpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBnZXRJZVZlcnNpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdXNlckFnZW50ID0gX3RoaXMuZ2V0VXNlckFnZW50KCk7XG4gICAgICAgICAgICB2YXIgY2xhc3NpY0llVmVyc2lvbk1hdGNoZXMgPSB1c2VyQWdlbnQubWF0Y2gobmV3IFJlZ0V4cChFbnVtc18xLkJyb3dzZXJWZW5kb3IuSUUgKyBcIiBcIiArIFJFR0VYX1ZFUlNJT04pKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBzZWN1cml0eS9kZXRlY3Qtbm9uLWxpdGVyYWwtcmVnZXhwXG4gICAgICAgICAgICBpZiAoY2xhc3NpY0llVmVyc2lvbk1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2xhc3NpY0llVmVyc2lvbk1hdGNoZXNbMV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgaWVWZXJzaW9uTWF0Y2hlcyA9IHVzZXJBZ2VudC5tYXRjaChuZXcgUmVnRXhwKFwicnY6XCIgKyBSRUdFWF9WRVJTSU9OKSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgc2VjdXJpdHkvZGV0ZWN0LW5vbi1saXRlcmFsLXJlZ2V4cFxuICAgICAgICAgICAgaWYgKGllVmVyc2lvbk1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWVWZXJzaW9uTWF0Y2hlc1sxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBnZXRPdGhlclZlcnNpb24gPSBmdW5jdGlvbiAoYnJvd3NlclN0cmluZykge1xuICAgICAgICAgICAgaWYgKGJyb3dzZXJTdHJpbmcgPT09IEVudW1zXzEuQnJvd3NlclZlbmRvci5TQUZBUkkpIHtcbiAgICAgICAgICAgICAgICBicm93c2VyU3RyaW5nID0gXCJWZXJzaW9uXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYnJvd3NlclN0cmluZyA9PT0gRW51bXNfMS5Ccm93c2VyVmVuZG9yLk9QRVJBKSB7XG4gICAgICAgICAgICAgICAgYnJvd3NlclN0cmluZyA9IFwiT1BSXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYnJvd3NlclN0cmluZyA9PT0gRW51bXNfMS5Ccm93c2VyVmVuZG9yLkVER0UpIHtcbiAgICAgICAgICAgICAgICBicm93c2VyU3RyaW5nID0gXCJFZGdlP1wiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIG1hdGNoZXMgPSBfdGhpcy5nZXRVc2VyQWdlbnQoKS5tYXRjaChuZXcgUmVnRXhwKGJyb3dzZXJTdHJpbmcgKyBcIi9cIiArIFJFR0VYX1ZFUlNJT04pKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBzZWN1cml0eS9kZXRlY3Qtbm9uLWxpdGVyYWwtcmVnZXhwXG4gICAgICAgICAgICBpZiAobWF0Y2hlcykge1xuICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaGVzWzFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGV4cG9ydHMuVU5LTk9XTl9WRVJTSU9OO1xuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5pc0llKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXRJZVZlcnNpb24oKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2V0T3RoZXJWZXJzaW9uKHRoaXMuZ2V0QnJvd3Nlck5hbWUoKSk7XG4gICAgfTtcbiAgICBCcm93c2VySW5mby51c2VyQWdlbnQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudDsgfTtcbiAgICByZXR1cm4gQnJvd3NlckluZm87XG59KCkpO1xuZXhwb3J0cy5Ccm93c2VySW5mbyA9IEJyb3dzZXJJbmZvO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkRldmljZUluZm8gPSB2b2lkIDA7XG52YXIgRW51bXNfMSA9IHJlcXVpcmUoXCIuLi9Db21tb24vRW51bXNcIik7XG4vLyBQb3J0ZWQgZnJvbSBodHRwczovL2Rldi5henVyZS5jb20vZHluYW1pY3Njcm0vT25lQ1JNL19naXQvQ1JNLk9tbmlDaGFubmVsLkxpdmVDaGF0V2lkZ2V0P3BhdGg9L3NyYy9MaXZlQ2hhdExvYWRlci9VdGlsaXR5L0RldmljZUluZm8udHMmdmVyc2lvbj1HQnJlbGVhc2VcbnZhciBEZXZpY2VJbmZvID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIERldmljZUluZm8oKSB7XG4gICAgfVxuICAgIERldmljZUluZm8uZ2V0RGV2aWNlVHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG1vYmlsZSA9IC8oYW5kcm9pZHxpcG9kfHdpbmRvd3MgcGhvbmV8d3BkZXNrdG9wfHdpbmRvd3MgY2V8YmxhY2tiZXJyeVxcdyp8bWVlZ298d2Vib3N8cGFsbXxzeW1iaWFufHBkYXxcXHcqP21vYmlsZVxcdyo/fFxcdyo/cGhvbmVcXHcqPykvaTtcbiAgICAgICAgdmFyIHRhYmxldCA9IC90YWJsZXR8aXBhZC9pO1xuICAgICAgICBpZiAod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2gobW9iaWxlKSkge1xuICAgICAgICAgICAgcmV0dXJuIEVudW1zXzEuRGV2aWNlVHlwZS5Nb2JpbGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKHRhYmxldCkpIHtcbiAgICAgICAgICAgIHJldHVybiBFbnVtc18xLkRldmljZVR5cGUuVGFibGV0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBFbnVtc18xLkRldmljZVR5cGUuRGVza3RvcDtcbiAgICB9O1xuICAgIHJldHVybiBEZXZpY2VJbmZvO1xufSgpKTtcbmV4cG9ydHMuRGV2aWNlSW5mbyA9IERldmljZUluZm87XG4iLCJcInVzZSBzdHJpY3RcIjtcbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlcyAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuLy8gUG9ydGVkIGZyb20gaHR0cHM6Ly9kZXYuYXp1cmUuY29tL2R5bmFtaWNzY3JtL09uZUNSTS9fZ2l0L0NSTS5PbW5pY2hhbm5lbC5JQzNDbGllbnQ/cGF0aD0vc3JjL0NvbW1vbi9FdmVudE1hbmFnZXIudHMmdmVyc2lvbj1HQm1hc3RlclxudmFyIEV2ZW50TWFuYWdlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBFdmVudE1hbmFnZXIoKSB7XG4gICAgfVxuICAgIEV2ZW50TWFuYWdlci5yYWlzZUN1c3RvbUV2ZW50ID0gZnVuY3Rpb24gKGV2ZW50TmFtZSwgcGF5bG9hZCkge1xuICAgICAgICB2YXIgZXZlbnQgPSBFdmVudE1hbmFnZXIuY3JlYXRlQ3VzdG9tRXZlbnQoZXZlbnROYW1lLCBwYXlsb2FkKTtcbiAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGN1c3RvbSBldmVudCBiYXNlZCBvbiB0aGUgZXZlbnROYW1lIGFuZCBwYXlsb2FkXG4gICAgICogVGhlIGN1c3RvbSBldmVudCBpcyBkaXNwYXRjaC1jb21wYXRpYmxlIGFjcm9zcyBicm93c2Vyc1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWU6IE5hbWUgb2YgdGhlIGV2ZW50LlxuICAgICAqIEBwYXJhbSB7YW55fSBwYXlsb2FkOiBUaGUgZXZlbnQgcGF5bG9hZC5cbiAgICAgKiBAcmV0dXJucyB7Q3VzdG9tRXZlbnR9OiBDdXN0b21FdmVudCBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBFdmVudE1hbmFnZXIuY3JlYXRlQ3VzdG9tRXZlbnQgPSBmdW5jdGlvbiAoZXZlbnROYW1lLCBwYXlsb2FkKSB7XG4gICAgICAgIHZhciBldmVudERldGFpbHMgPSBwYXlsb2FkID8ge1xuICAgICAgICAgICAgZGV0YWlsOiBwYXlsb2FkXG4gICAgICAgIH0gOiB1bmRlZmluZWQ7XG4gICAgICAgIHZhciBldmVudCA9IG51bGw7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBGb3Igbm9uIElFMTEgc2NlbmFyaW9zLCBjdXN0b21ldmVudCBvYmplY3QgY2FuIGJlIGRpc3BhdGNoZWRcbiAgICAgICAgICAgIGV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KGV2ZW50TmFtZSwgZXZlbnREZXRhaWxzKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLy8gU3BlY2lhbCBoYW5kbGluZyBmb3IgSUUxMSBzY2VuYXJpbywgd2hlcmUgY3VzdG9tZXZlbnQgb2JqZWN0IGNhbm5vdCBiZSBkaXNwYXRjaGVkXG4gICAgICAgICAgICBldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KFwiQ3VzdG9tRXZlbnRcIik7XG4gICAgICAgICAgICBldmVudC5pbml0Q3VzdG9tRXZlbnQoZXZlbnROYW1lLCB0cnVlLCB0cnVlLCBldmVudERldGFpbHMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBldmVudDtcbiAgICB9O1xuICAgIHJldHVybiBFdmVudE1hbmFnZXI7XG59KCkpO1xuZXhwb3J0cy5kZWZhdWx0ID0gRXZlbnRNYW5hZ2VyO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkxvZ2dpbmdTYW5pdGl6ZXIgPSB2b2lkIDA7XG52YXIgQ29uc3RhbnRzXzEgPSByZXF1aXJlKFwiLi4vQ29tbW9uL0NvbnN0YW50c1wiKTtcbnZhciBMb2dnaW5nU2FuaXRpemVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIExvZ2dpbmdTYW5pdGl6ZXIoKSB7XG4gICAgfVxuICAgIExvZ2dpbmdTYW5pdGl6ZXIuc3RyaXBFcnJvclNlbnNpdGl2ZVByb3BlcnRpZXMgPSBmdW5jdGlvbiAoZXJyb3JPYmplY3QpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgaWYgKGVycm9yT2JqZWN0ICYmIHR5cGVvZiBlcnJvck9iamVjdCA9PT0gJ29iamVjdCcgJiYgKChfYSA9IE9iamVjdC5rZXlzKGVycm9yT2JqZWN0KSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmxlbmd0aCkgPiAwKSB7XG4gICAgICAgICAgICAoX2IgPSBPYmplY3Qua2V5cyhlcnJvck9iamVjdCkpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICBpZiAoQ29uc3RhbnRzXzEuZGVmYXVsdC5zZW5zaXRpdmVQcm9wZXJ0aWVzLmluZGV4T2Yoa2V5KSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVtb3ZlIHNlbnNpdGl2ZSBwcm9wZXJ0aWVzIGZyb20gZXJyb3Igb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBlcnJvck9iamVjdFtcIlwiICsga2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGVycm9yT2JqZWN0W1wiXCIgKyBrZXldICE9PSBudWxsICYmIHR5cGVvZiBlcnJvck9iamVjdFtcIlwiICsga2V5XSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgc2Vuc2l0aXZlIHByb3BlcnRpZXMgaW4gbmVzdGVkIGVycm9yIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICBfdGhpcy5zdHJpcEVycm9yU2Vuc2l0aXZlUHJvcGVydGllcyhlcnJvck9iamVjdFtcIlwiICsga2V5XSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIExvZ2dpbmdTYW5pdGl6ZXI7XG59KCkpO1xuZXhwb3J0cy5Mb2dnaW5nU2FuaXRpemVyID0gTG9nZ2luZ1Nhbml0aXplcjtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5PU0luZm8gPSB2b2lkIDA7XG52YXIgRW51bXNfMSA9IHJlcXVpcmUoXCIuLi9Db21tb24vRW51bXNcIik7XG4vLyBQb3J0ZWQgZnJvbSBodHRwczovL2Rldi5henVyZS5jb20vZHluYW1pY3Njcm0vT25lQ1JNL19naXQvQ1JNLk9tbmlDaGFubmVsLkxpdmVDaGF0V2lkZ2V0P3BhdGg9L3NyYy9MaXZlQ2hhdExvYWRlci9VdGlsaXR5L09TSW5mby50cyZ2ZXJzaW9uPUdCcmVsZWFzZVxudmFyIE9TSW5mbyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBPU0luZm8oKSB7XG4gICAgfVxuICAgIE9TSW5mby5nZXRPc1R5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB3aW4gPSAvKHdpbmRvd3N8d2luMzIpL2k7XG4gICAgICAgIHZhciB3aW5ydCA9IC8gYXJtOy9pO1xuICAgICAgICB2YXIgd2lucGhvbmUgPSAvd2luZG93c1xcc3Bob25lXFxzXFxkK1xcLlxcZCsvaTtcbiAgICAgICAgdmFyIG9zeCA9IC8obWFjaW50b3NofG1hYyBvcyB4KS9pO1xuICAgICAgICB2YXIgaW9zID0gLyhpUGFkfGlQaG9uZXxpUG9kKSg/PS4qbGlrZSBNYWMgT1MgWCkvaTtcbiAgICAgICAgdmFyIGxpbnV4ID0gLyhsaW51eHxqb2xpfFtreGxuXT91YnVudHV8ZGViaWFufFtvcGVuXSpzdXNlfGdlbnRvb3xhcmNofHNsYWNrd2FyZXxmZWRvcmF8bWFuZHJpdmF8Y2VudG9zfHBjbGludXhvc3xyZWRoYXR8emVud2Fsa3xjcm9zKS9pO1xuICAgICAgICB2YXIgYW5kcm9pZCA9IC9hbmRyb2lkL2k7XG4gICAgICAgIHZhciB1c2VyQWdlbnQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudDsgfTtcbiAgICAgICAgaWYgKHVzZXJBZ2VudCgpLm1hdGNoKHdpbnBob25lKSkge1xuICAgICAgICAgICAgcmV0dXJuIEVudW1zXzEuT3BlcmF0aW5nU3lzdGVtLldJTkRPV1NfUEhPTkU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVzZXJBZ2VudCgpLm1hdGNoKHdpbnJ0KSkge1xuICAgICAgICAgICAgcmV0dXJuIEVudW1zXzEuT3BlcmF0aW5nU3lzdGVtLldJTkRPV1NfUlQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVzZXJBZ2VudCgpLm1hdGNoKGlvcykpIHtcbiAgICAgICAgICAgIHJldHVybiBFbnVtc18xLk9wZXJhdGluZ1N5c3RlbS5JT1M7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVzZXJBZ2VudCgpLm1hdGNoKGFuZHJvaWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gRW51bXNfMS5PcGVyYXRpbmdTeXN0ZW0uQU5EUk9JRDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodXNlckFnZW50KCkubWF0Y2gobGludXgpKSB7XG4gICAgICAgICAgICByZXR1cm4gRW51bXNfMS5PcGVyYXRpbmdTeXN0ZW0uTElOVVg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVzZXJBZ2VudCgpLm1hdGNoKG9zeCkpIHtcbiAgICAgICAgICAgIHJldHVybiBFbnVtc18xLk9wZXJhdGluZ1N5c3RlbS5NQUNPU1g7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVzZXJBZ2VudCgpLm1hdGNoKHdpbikpIHtcbiAgICAgICAgICAgIHJldHVybiBFbnVtc18xLk9wZXJhdGluZ1N5c3RlbS5XSU5ET1dTO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBFbnVtc18xLk9wZXJhdGluZ1N5c3RlbS5VTktOT1dOO1xuICAgIH07XG4gICAgcmV0dXJuIE9TSW5mbztcbn0oKSk7XG5leHBvcnRzLk9TSW5mbyA9IE9TSW5mbztcbiIsIlwidXNlIHN0cmljdFwiO1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlcyAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIFRlbGVtZXRyeUhlbHBlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBUZWxlbWV0cnlIZWxwZXIoKSB7XG4gICAgfVxuICAgIFRlbGVtZXRyeUhlbHBlci5HRVRURUxFTUVUUllFVkVOVERBVEEgPSBmdW5jdGlvbiAodGVsZW1ldHJ5RXZlbnQsIGN1c3RvbURhdGEsIGRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBEZXNjcmlwdGlvbjogZGVzY3JpcHRpb24sXG4gICAgICAgICAgICBFbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzOiBjdXN0b21EYXRhLkVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsXG4gICAgICAgICAgICBFdmVudDogdGVsZW1ldHJ5RXZlbnQsXG4gICAgICAgICAgICBFeGNlcHRpb25EZXRhaWxzOiBjdXN0b21EYXRhLkV4Y2VwdGlvbkRldGFpbHMsXG4gICAgICAgICAgICBSZWdpb246IGN1c3RvbURhdGEuUmVnaW9uLFxuICAgICAgICAgICAgUmVxdWVzdElkOiBjdXN0b21EYXRhLlJlcXVlc3RJZCxcbiAgICAgICAgICAgIFRyYW5zYWN0aW9uSWQ6IGN1c3RvbURhdGEuVHJhbnNhY3Rpb25JZFxuICAgICAgICB9O1xuICAgIH07XG4gICAgcmV0dXJuIFRlbGVtZXRyeUhlbHBlcjtcbn0oKSk7XG5leHBvcnRzLmRlZmF1bHQgPSBUZWxlbWV0cnlIZWxwZXI7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVGltZXIgPSB2b2lkIDA7XG52YXIgVGltZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gVGltZXIoKSB7XG4gICAgfVxuICAgIFRpbWVyLlRJTUVSID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgdGltZVN0YXJ0ID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBnZXQgbWlsbGlTZWNvbmRzRWxhcHNlZCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC0gdGltZVN0YXJ0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9O1xuICAgIHJldHVybiBUaW1lcjtcbn0oKSk7XG5leHBvcnRzLlRpbWVyID0gVGltZXI7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8qKlxuICogQ3VzdG9tIGhhbmRsZXIgZm9yIEhUVFAgY2FsbHMgd2l0aCBBeGlvcy4gSGFuZGxlciBhbGxvd3MgdG8gcmV0cnkgSFRUUCBjYWxscyBpZiBmYWlsZWQuXG4gKlxuICogQHBhcmFtIGF4aW9zIEF4aW9zIGluc3RhbmNlLlxuICogQHBhcmFtIGF4aW9zUmV0cnlPcHRpb25zIE9wdGlvbnMgZm9yIGF4aW9zIHJldHJ5LlxuICovXG52YXIgYXhpb3NSZXRyeSA9IGZ1bmN0aW9uIChheGlvcywgYXhpb3NSZXRyeU9wdGlvbnMpIHtcbiAgICB2YXIgcmV0cmllcyA9IGF4aW9zUmV0cnlPcHRpb25zLnJldHJpZXM7XG4gICAgdmFyIGN1cnJlbnRUcnkgPSAwO1xuICAgIC8vIE1ldGhvZCB0byBpbnRlcmNlcHRzIHJlc3BvbnNlcyB3aXRoaW4gcmFuZ2Ugb2YgMnh4XG4gICAgdmFyIG9uU3VjY2VzcyA9IHVuZGVmaW5lZDtcbiAgICAvLyBNZXRob2QgdG8gaW50ZXJjZXB0cyByZXNwb25zZXMgb3V0c2lkZSByYW5nZSBvZiAyeHhcbiAgICB2YXIgb25FcnJvciA9IGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICB2YXIgY29uZmlnID0gZXJyb3IuY29uZmlnO1xuICAgICAgICAvLyBJZiB3ZSBoYXZlIG5vIGluZm9ybWF0aW9uIG9mIHRoZSByZXF1ZXN0IHRvIHJldHJ5XG4gICAgICAgIGlmICghY29uZmlnKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFJldHJ5IHJlcXVlc3QgaWYgYmVsb3cgdGhyZXNob2xkXG4gICAgICAgIHZhciBzaG91bGRSZXRyeSA9IGN1cnJlbnRUcnkgPCByZXRyaWVzO1xuICAgICAgICBpZiAoc2hvdWxkUmV0cnkpIHtcbiAgICAgICAgICAgIGN1cnJlbnRUcnkrKztcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXR1cm4gcmVzb2x2ZShheGlvcyhjb25maWcpKTsgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgICB9O1xuICAgIGF4aW9zLmludGVyY2VwdG9ycy5yZXNwb25zZS51c2Uob25TdWNjZXNzLCBvbkVycm9yKTtcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBheGlvc1JldHJ5O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnV1aWR2NCA9IHZvaWQgMDtcbmV4cG9ydHMudXVpZHY0ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBcInh4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4eFwiLnJlcGxhY2UoL1t4eV0vZywgZnVuY3Rpb24gKGMpIHtcbiAgICAgICAgdmFyIHIgPSBNYXRoLnJhbmRvbSgpICogMTYgfCAwLCB2ID0gYyA9PT0gXCJ4XCIgPyByIDogKHIgJiAweDMgfCAweDgpO1xuICAgICAgICByZXR1cm4gdi50b1N0cmluZygxNik7XG4gICAgfSk7XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnV1aWR2NCA9IGV4cG9ydHMuU0RLUHJvdmlkZXIgPSB2b2lkIDA7XG4vLyBFbnRyeSBwb2ludFxudmFyIEV2ZW50TmFtZXNfMSA9IHJlcXVpcmUoXCIuL0NvbW1vbi9FdmVudE5hbWVzXCIpO1xudmFyIFNES1Byb3ZpZGVyXzEgPSByZXF1aXJlKFwiLi9TREtQcm92aWRlclwiKTtcbmV4cG9ydHMuU0RLUHJvdmlkZXIgPSBTREtQcm92aWRlcl8xLmRlZmF1bHQ7XG52YXIgRXZlbnRNYW5hZ2VyXzEgPSByZXF1aXJlKFwiLi9VdGlscy9FdmVudE1hbmFnZXJcIik7XG52YXIgdXVpZF8xID0gcmVxdWlyZShcIi4vVXRpbHMvdXVpZFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInV1aWR2NFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdXVpZF8xLnV1aWR2NDsgfSB9KTtcbihmdW5jdGlvbiAoKSB7XG4gICAgLy8gRGVjbGFyZXMgd2luZG93IG9iamVjdCBmb3IgTm9kZUpTIGVudmlyb25tZW50XG4gICAgaWYgKGdsb2JhbC53aW5kb3cgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBnbG9iYWwud2luZG93ID0gZ2xvYmFsO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIndpbmRvdyBvYmplY3Qgbm90IGZvdW5kXCIpO1xuICAgIH1cbiAgICAvLyBDaGVjayBleGlzdGVuY2Ugb2YgZ2xvYmFsIG9iamVjdHMgdG8gYXZvaWQgb3ZlcndyaXRlL2NsYXNoaW5nXG4gICAgaWYgKCEoXCJNaWNyb3NvZnRcIiBpbiB3aW5kb3cpKSB7XG4gICAgICAgIHdpbmRvdy5NaWNyb3NvZnQgPSB7fTtcbiAgICB9XG4gICAgaWYgKCEoXCJDUk1cIiBpbiB3aW5kb3cuTWljcm9zb2Z0KSkge1xuICAgICAgICB3aW5kb3cuTWljcm9zb2Z0LkNSTSA9IHt9O1xuICAgIH1cbiAgICBpZiAoIShcIk9tbmljaGFubmVsXCIgaW4gd2luZG93Lk1pY3Jvc29mdC5DUk0pKSB7XG4gICAgICAgIHdpbmRvdy5NaWNyb3NvZnQuQ1JNLk9tbmljaGFubmVsID0ge307XG4gICAgfVxuICAgIGlmICghKFwiU0RLXCIgaW4gd2luZG93Lk1pY3Jvc29mdC5DUk0uT21uaWNoYW5uZWwpKSB7XG4gICAgICAgIHdpbmRvdy5NaWNyb3NvZnQuQ1JNLk9tbmljaGFubmVsLlNESyA9IHtcbiAgICAgICAgICAgIFNES1Byb3ZpZGVyOiBTREtQcm92aWRlcl8xLmRlZmF1bHQsXG4gICAgICAgICAgICBVdGlsOiB7XG4gICAgICAgICAgICAgICAgdXVpZHY0OiB1dWlkXzEudXVpZHY0XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuICAgIHdpbmRvdy5kb2N1bWVudCAmJiBFdmVudE1hbmFnZXJfMS5kZWZhdWx0LnJhaXNlQ3VzdG9tRXZlbnQoRXZlbnROYW1lc18xLmRlZmF1bHQuT0NTREtMT0FEKTtcbn0pKCk7XG4iXSwic291cmNlUm9vdCI6IiJ9
|
|
2649
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYWRhcHRlcnMveGhyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYXhpb3MuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL0NhbmNlbFRva2VuLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL2lzQ2FuY2VsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9BeGlvcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvSW50ZXJjZXB0b3JNYW5hZ2VyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9idWlsZEZ1bGxQYXRoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9jcmVhdGVFcnJvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvZGlzcGF0Y2hSZXF1ZXN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9lbmhhbmNlRXJyb3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL21lcmdlQ29uZmlnLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9zZXR0bGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL3RyYW5zZm9ybURhdGEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9kZWZhdWx0cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYmluZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYnVpbGRVUkwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2NvbWJpbmVVUkxzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9jb29raWVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc0Fic29sdXRlVVJMLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc0F4aW9zRXJyb3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzVVJMU2FtZU9yaWdpbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvbm9ybWFsaXplSGVhZGVyTmFtZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvcGFyc2VIZWFkZXJzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9zcHJlYWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3ZhbGlkYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3V0aWxzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9jZXNzL2Jyb3dzZXIuanMiLCJ3ZWJwYWNrOi8vLyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvQ29tbW9uL0NvbnN0YW50cy50cyIsIndlYnBhY2s6Ly8vLi9zcmMvQ29tbW9uL0VudW1zLnRzIiwid2VicGFjazovLy8uL3NyYy9Db21tb24vRXZlbnROYW1lcy50cyIsIndlYnBhY2s6Ly8vLi9zcmMvQ29tbW9uL0xvY2FsZXMudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL0NvbW1vbi9PQ1NES0xvZ2dlci50cyIsIndlYnBhY2s6Ly8vLi9zcmMvQ29tbW9uL09tbmljaGFubmVsRW5kcG9pbnRzLnRzIiwid2VicGFjazovLy8uL3NyYy9Db21tb24vT21uaWNoYW5uZWxIVFRQSGVhZGVycy50cyIsIndlYnBhY2s6Ly8vLi9zcmMvTW9kZWwvTG9nTGV2ZWwudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL1NESy50cyIsIndlYnBhY2s6Ly8vLi9zcmMvU0RLUHJvdmlkZXIudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL1V0aWxzL0Jyb3dzZXJJbmZvLnRzIiwid2VicGFjazovLy8uL3NyYy9VdGlscy9EZXZpY2VJbmZvLnRzIiwid2VicGFjazovLy8uL3NyYy9VdGlscy9FdmVudE1hbmFnZXIudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL1V0aWxzL0xvZ2dpbmdTYW5pdGl6ZXIudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL1V0aWxzL09TSW5mby50cyIsIndlYnBhY2s6Ly8vLi9zcmMvVXRpbHMvVGVsZW1ldHJ5SGVscGVyLnRzIiwid2VicGFjazovLy8uL3NyYy9VdGlscy9UaW1lci50cyIsIndlYnBhY2s6Ly8vLi9zcmMvVXRpbHMvYXhpb3NSZXRyeS50cyIsIndlYnBhY2s6Ly8vLi9zcmMvVXRpbHMvdXVpZC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJFbnVtc18xIiwicmVxdWlyZSIsIkNvbnN0YW50cyIsInJlcXVpcmVkT21uaWNoYW5uZWxDb25maWd1cmF0aW9uUGFyYW1ldGVycyIsImRlZmF1bHRIZWFkZXJzIiwiYnlwYXNzQ2FjaGVIZWFkZXJzIiwiZGVmYXVsdENoYW5uZWxJZCIsIkNoYW5uZWxJZCIsIkxDVyIsImRlZmF1bHRMb2NhbGUiLCJub0NvbnRlbnRTdGF0dXNDb2RlIiwic2Vuc2l0aXZlUHJvcGVydGllcyIsInRyYW5zYWN0aW9uaWQiLCJjdXN0b21lckRpc3BsYXlOYW1lIiwiZGVmYXVsdCIsIkxpdmVDaGF0VmVyc2lvbiIsIk9DU0RLVGVsZW1ldHJ5RXZlbnQiLCJPcGVyYXRpbmdTeXN0ZW0iLCJEZXZpY2VUeXBlIiwiQnJvd3NlciIsIkJyb3dzZXJWZW5kb3IiLCJFdmVudE5hbWVzIiwiZ2V0IiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIkxvY2FsZXMiLCJzdXBwb3J0ZWRMb2NhbGVzIiwiVGVsZW1ldHJ5SGVscGVyXzEiLCJPQ1NES0xvZ2dlciIsImxvZ2dlciIsInByb3RvdHlwZSIsImxvZyIsImxvZ2xldmVsIiwidGVsZW1ldHJ5RXZlbnQiLCJjdXN0b21EYXRhIiwiZGVzY3JpcHRpb24iLCJpc0xvZ2dpbmdFbmFibGVkIiwibG9nRGF0YSIsIkdFVFRFTEVNRVRSWUVWRU5UREFUQSIsImxvZ0V2ZW50IiwibG9nTGV2ZWwiLCJzZXRUaW1lb3V0IiwibG9nQ2xpZW50U2RrVGVsZW1ldHJ5RXZlbnQiLCJiaW5kIiwiaXNOdWxsT3JVbmRlZmluZWQiLCJvYmoiLCJ1bmRlZmluZWQiLCJPbW5pY2hhbm5lbEVuZHBvaW50cyIsIkxpdmVDaGF0Q29uZmlnUGF0aCIsIkxpdmVDaGF0U2Vzc2lvbkluaXRQYXRoIiwiTGl2ZUNoYXRBdXRoU2Vzc2lvbkluaXRQYXRoIiwiTGl2ZUNoYXRHZXRDaGF0VG9rZW5QYXRoIiwiTGl2ZUNoYXR2MkdldENoYXRUb2tlblBhdGgiLCJMaXZlQ2hhdEF1dGhHZXRDaGF0VG9rZW5QYXRoIiwiTGl2ZUNoYXR2MkF1dGhHZXRDaGF0VG9rZW5QYXRoIiwiTGl2ZUNoYXRTZXNzaW9uQ2xvc2VQYXRoIiwiTGl2ZUNoYXRBdXRoU2Vzc2lvbkNsb3NlUGF0aCIsIkxpdmVDaGF0U3VibWl0UG9zdENoYXRQYXRoIiwiTGl2ZUNoYXRBdXRoU3VibWl0UG9zdENoYXRQYXRoIiwiTGl2ZUNoYXRHZXRTdXJ2ZXlJbnZpdGVMaW5rUGF0aCIsIkxpdmVDaGF0QXV0aEdldFN1cnZleUludml0ZUxpbmtQYXRoIiwiTGl2ZUNoYXRHZXRDaGF0VHJhbnNjcmlwdFBhdGgiLCJMaXZlQ2hhdHYyR2V0Q2hhdFRyYW5zY3JpcHRQYXRoIiwiTGl2ZUNoYXRBdXRoR2V0Q2hhdFRyYW5zY3JpcHRQYXRoIiwiTGl2ZUNoYXR2MkF1dGhHZXRDaGF0VHJhbnNjcmlwdFBhdGgiLCJMaXZlQ2hhdFRyYW5zY3JpcHRFbWFpbFJlcXVlc3RQYXRoIiwiTGl2ZUNoYXRBdXRoVHJhbnNjcmlwdEVtYWlsUmVxdWVzdFBhdGgiLCJMaXZlQ2hhdEZldGNoRGF0YU1hc2tpbmdJbmZvUGF0aCIsIkxpdmVDaGF0U2Vjb25kYXJ5Q2hhbm5lbEV2ZW50UGF0aCIsIkxpdmVDaGF0QXV0aFNlY29uZGFyeUNoYW5uZWxFdmVudFBhdGgiLCJMaXZlQ2hhdExpdmVXb3JrSXRlbURldGFpbHNQYXRoIiwiTGl2ZUNoYXRBdXRoTGl2ZVdvcmtJdGVtRGV0YWlsc1BhdGgiLCJMaXZlQ2hhdEdldFJlY29ubmVjdGFibGVDaGF0c1BhdGgiLCJMaXZlQ2hhdFJlY29ubmVjdEF2YWlsYWJpbGl0eVBhdGgiLCJMaXZlQ2hhdFZhbGlkYXRlQXV0aENoYXRNYXBSZWNvcmRQYXRoIiwiR2V0UXVldWVBdmFpbGFiaWxpdHlQYXRoIiwiU2VuZFR5cGluZ0luZGljYXRvclBhdGgiLCJPbW5pY2hhbm5lbEhUVFBIZWFkZXJzIiwiYXV0aGVudGljYXRlZFVzZXJUb2tlbiIsImF1dGhvcml6YXRpb24iLCJvcmdhbml6YXRpb25JZCIsIndpZGdldEFwcElkIiwicmVxdWVzdElkIiwiTG9nTGV2ZWwiLCJfX2Fzc2lnbiIsImFzc2lnbiIsInQiLCJzIiwiaSIsIm4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJwIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiYXBwbHkiLCJfX2F3YWl0ZXIiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsIlAiLCJnZW5lcmF0b3IiLCJhZG9wdCIsInJlc29sdmUiLCJQcm9taXNlIiwicmVqZWN0IiwiZnVsZmlsbGVkIiwic3RlcCIsIm5leHQiLCJlIiwicmVqZWN0ZWQiLCJyZXN1bHQiLCJkb25lIiwidGhlbiIsIl9fZ2VuZXJhdG9yIiwiYm9keSIsIl8iLCJsYWJlbCIsInNlbnQiLCJ0cnlzIiwib3BzIiwiZiIsInkiLCJnIiwidmVyYiIsIlN5bWJvbCIsIml0ZXJhdG9yIiwidiIsIm9wIiwiVHlwZUVycm9yIiwicG9wIiwicHVzaCIsImF4aW9zXzEiLCJCcm93c2VySW5mb18xIiwiQ29uc3RhbnRzXzEiLCJEZXZpY2VJbmZvXzEiLCJMb2NhbGVzXzEiLCJMb2dnaW5nU2FuaXRpemVyXzEiLCJMb2dMZXZlbF8xIiwiRW51bXNfMiIsIk9TSW5mb18xIiwiT21uaWNoYW5uZWxFbmRwb2ludHNfMSIsIk9tbmljaGFubmVsSFRUUEhlYWRlcnNfMSIsIlRpbWVyXzEiLCJheGlvc1JldHJ5XzEiLCJ1dWlkXzEiLCJTREsiLCJvbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24iLCJjb25maWd1cmF0aW9uIiwiZGVmYXVsdENvbmZpZ3VyYXRpb24iLCJrZXlzIiwiX2kiLCJfYSIsImtleSIsIkVycm9yIiwiY2hhbm5lbElkIiwidmFsdWVzIiwiaW5jbHVkZXMiLCJjdXJyZW50T21uaWNoYW5uZWxDb25maWd1cmF0aW9uUGFyYW1ldGVycyIsIl9iIiwiX2MiLCJsaXZlQ2hhdFZlcnNpb24iLCJWMSIsImdldENoYXRDb25maWciLCJieXBhc3NDYWNoZSIsInRpbWVyIiwiZW5kcG9pbnQiLCJheGlvc0luc3RhbmNlIiwiaGVhZGVycyIsInJlc3BvbnNlIiwiZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyIsImRhdGEiLCJUaW1lciIsIlRJTUVSIiwiSU5GTyIsIkdFVENIQVRDT05GSUciLCJSZXF1ZXN0SWQiLCJ1dWlkdjQiLCJvcmdVcmwiLCJvcmdJZCIsIndpZGdldElkIiwiY3JlYXRlIiwicmV0cmllcyIsIm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlIiwibWlsbGlTZWNvbmRzRWxhcHNlZCIsIlYyIiwiR0VUQ0hBVENPTkZJR1NVQ0NFU1MiLCJSZWdpb24iLCJFbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzIiwiVHJhbnNhY3Rpb25JZCIsImdldExXSURldGFpbHMiLCJnZXRMV0lEZXRhaWxzT3B0aW9uYWxQYXJhbXMiLCJyZWNvbm5lY3RJZCIsIm9wdGlvbnMiLCJfdGhpcyIsIkdFVExXSVNUQVRVU1NUQVJURUQiLCJtZXRob2QiLCJ1cmwiLCJlcnJvcl8xIiwiR0VUTFdJU1RBVFVTU1VDQ0VFREVEIiwiTG9nZ2luZ1Nhbml0aXplciIsInN0cmlwRXJyb3JTZW5zaXRpdmVQcm9wZXJ0aWVzIiwiRVJST1IiLCJHRVRMV0lTVEFUVVNGQUlMRUQiLCJFeGNlcHRpb25EZXRhaWxzIiwiZ2V0Q2hhdFRva2VuIiwiZ2V0Q2hhdFRva2VuT3B0aW9uYWxQYXJhbXMiLCJjdXJyZW50UmV0cnlDb3VudCIsImN1cnJlbnRMaXZlQ2hhdFZlcnNpb24iLCJHRVRDSEFUVE9LRU5TVEFSVEVEIiwiZXJyb3JfMiIsIkdFVENIQVRUT0tFTlNVQ0NFRURFRCIsInN0YXR1cyIsIkdFVENIQVRUT0tFTkZBSUxFRCIsImdldENoYXRUb2tlblJldHJ5Q291bnQiLCJjYXRjaCIsImVycm9yIiwiZ2V0Q2hhdFRva2VuVGltZUJldHdlZW5SZXRyaWVzT25GYWlsdXJlIiwiZ2V0UmVjb25uZWN0YWJsZUNoYXRzIiwicmVjb25uZWN0YWJsZUNoYXRzUGFyYW1zIiwiR0VUUkVDT05ORUNUQUJMRUNIQVRTIiwiZXJyb3JfMyIsImdldFJlY29ubmVjdEF2YWlsYWJpbGl0eSIsIkdFVFJFQ09OTkVDVEFWQUlMQUJJTElUWSIsImVycm9yXzQiLCJXQVJOIiwiZ2V0UXVldWVBdmFpbGFiaWxpdHkiLCJxdWV1ZUF2YWlsYWJpbGl0eU9wdGlvbmFsUGFyYW1zIiwiaW5pdENvbnRleHQiLCJnZXRDb250ZXh0IiwiR0VUUVVFVUVBVkFJTEFCSUxJVFlTVEFSVEVEIiwid2luZG93IiwiZG9jdW1lbnQiLCJicm93c2VyIiwiQnJvd3NlckluZm8iLCJnZXRCcm93c2VyTmFtZSIsImRldmljZSIsIkRldmljZUluZm8iLCJnZXREZXZpY2VUeXBlIiwib3JpZ2ludXJsIiwibG9jYXRpb24iLCJocmVmIiwib3MiLCJPU0luZm8iLCJnZXRPc1R5cGUiLCJsb2NhbGUiLCJkYXRhXzEiLCJlcnJvcl81IiwiR0VUUVVFVUVBVkFJTEFCSUxJVFlTVUNDRUVERUQiLCJHRVRRVUVVRUFWQUlMQUJJTElUWUZBSUxFRCIsInNlc3Npb25Jbml0Iiwic2Vzc2lvbkluaXRPcHRpb25hbFBhcmFtcyIsIlNFU1NJT05JTklUU1RBUlRFRCIsImVycm9yXzYiLCJTRVNTSU9OSU5JVFNVQ0NFRURFRCIsIlNFU1NJT05JTklURkFJTEVEIiwic2Vzc2lvbkNsb3NlIiwic2Vzc2lvbkNsb3NlT3B0aW9uYWxQYXJhbXMiLCJpc1JlY29ubmVjdENoYXQiLCJpc1BlcnNpc3RlbnRDaGF0IiwiY2hhdElkIiwiU0VTU0lPTkNMT1NFU1RBUlRFRCIsImVycm9yXzciLCJTRVNTSU9OQ0xPU0VTVUNDRUVERUQiLCJTRVNTSU9OQ0xPU0VGQUlMRUQiLCJ2YWxpZGF0ZUF1dGhDaGF0UmVjb3JkIiwidmFsaWRhdGVBdXRoQ2hhdFJlY29yZE9wdGlvbmFsUGFyYW1zIiwiX2QiLCJlcnJvcl84IiwiX2UiLCJWQUxJREFURUFVVEhDSEFUUkVDT1JEU1RBUlRFRCIsImF1dGhDaGF0RXhpc3QiLCJWQUxJREFURUFVVEhDSEFUUkVDT1JEU1VDQ0VFREVEIiwiVkFMSURBVEVBVVRIQ0hBVFJFQ09SREZBSUxFRCIsIkVycm9yQ29kZSIsInRvU3RyaW5nIiwic3VibWl0UG9zdENoYXRSZXNwb25zZSIsInBvc3RDaGF0UmVzcG9uc2UiLCJzdWJtaXRQb3N0Q2hhdFJlc3BvbnNlT3B0aW9uYWxQYXJhbXMiLCJTVUJNSVRQT1NUQ0hBVFNUQVJURUQiLCJKU09OIiwic3RyaW5naWZ5IiwiZXJyb3JfOSIsIlNVQk1JVFBPU1RDSEFUU1VDQ0VFREVEIiwiU1VCTUlUUE9TVENIQVRGQUlMRUQiLCJnZXRTdXJ2ZXlJbnZpdGVMaW5rIiwic3VydmV5T3duZXJJZCIsInN1cnZleUludml0ZUFQSVJlcXVlc3RCb2R5IiwiZ2V0c3VydmV5SW52aXRlTGlua09wdGlvbmFsUGFyYW1zIiwiR0VUU1VSVkVZSU5WSVRFTElOS1NUQVJURUQiLCJTdXJ2ZXlPd25lcklkIiwiZXJyb3JfMTAiLCJHRVRTVVJWRVlJTlZJVEVMSU5LU1VDQ0VFREVEIiwiR0VUU1VSVkVZSU5WSVRFTElOS0ZBSUxFRCIsImdldENoYXRUcmFuc2NyaXB0cyIsInRva2VuIiwiZ2V0Q2hhdFRyYW5zY3JpcHRzT3B0aW9uYWxQYXJhbXMiLCJHRVRDSEFUVFJBTlNDUklQVFNUQVJURUQiLCJlcnJvcl8xMSIsIkdFVENIQVRUUkFOU0NSSVBUU1VDQ0VFREVEIiwiR0VUQ0hBVFRSQU5TQ1JJUFRGQUlMRUQiLCJlbWFpbFRyYW5zY3JpcHQiLCJlbWFpbFJlcXVlc3RCb2R5IiwiZW1haWxUcmFuc2NyaXB0T3B0aW9uYWxQYXJhbXMiLCJFTUFJTFRSQU5TQ1JJUFRTVEFSVEVEIiwiZXJyb3JfMTIiLCJFTUFJTFRSQU5TQ1JJUFRTVUNDRUVERUQiLCJFTUFJTFRSQU5TQ1JJUFRGQUlMRUQiLCJmZXRjaERhdGFNYXNraW5nSW5mbyIsIkZFVENIREFUQU1BU0tJTkdTVEFSVEVEIiwiZXJyb3JfMTMiLCJGRVRDSERBVEFNQVNLSU5HU1VDQ0VFREVEIiwiRkVUQ0hEQVRBTUFTS0lOR0ZBSUxFRCIsIm1ha2VTZWNvbmRhcnlDaGFubmVsRXZlbnRSZXF1ZXN0Iiwic2Vjb25kYXJ5Q2hhbm5lbEV2ZW50UmVxdWVzdEJvZHkiLCJzZWNvbmRhcnlDaGFubmVsRXZlbnRPcHRpb25hbFBhcmFtcyIsImVycm9yXzE0IiwiU0VDT05EQVJZQ0hBTk5FTEVWRU5UUkVRVUVTVFNUQVJURUQiLCJTRUNPTkRBUllDSEFOTkVMRVZFTlRSRVFVRVNUU1VDQ0VFREVEIiwiU0VDT05EQVJZQ0hBTk5FTEVWRU5UUkVRVUVTVEZBSUxFRCIsInNlbmRUeXBpbmdJbmRpY2F0b3IiLCJzZW5kVHlwaW5nSW5kaWNhdG9yT3B0aW9uYWxQYXJhbXMiLCJlcnJvcl8xNSIsIlNFTkRUWVBJTkdJTkRJQ0FUT1JTVUNDRUVERUQiLCJTRU5EVFlQSU5HSU5ESUNBVE9SRkFJTEVEIiwiT0NTREtMb2dnZXJfMSIsIlNES18xIiwiU0RLUHJvdmlkZXIiLCJnZXRTREsiLCJpbG9nZ2VyIiwiVU5LTk9XTl9WRVJTSU9OIiwiUkVHRVhfVkVSU0lPTiIsImdldFVzZXJBZ2VudCIsInVzZXJBZ2VudCIsInVzZXJBZ2VudENvbnRhaW5zU3RyaW5nIiwic2VhcmNoU3RyaW5nIiwiaW5kZXhPZiIsImlzQ2hyb21lIiwiQ0hST01FIiwiRURHRSIsIkVER0VfQ0hST01JVU0iLCJpc0llIiwiaXNFZGdlIiwiaXNPcGVyYSIsIk9QRVJBIiwiRklSRUZPWCIsIlNBRkFSSSIsIklFIiwiVU5LTk9XTiIsImdldEJyb3dzZXJWZXJzaW9uIiwiZ2V0SWVWZXJzaW9uIiwiY2xhc3NpY0llVmVyc2lvbk1hdGNoZXMiLCJtYXRjaCIsIlJlZ0V4cCIsImllVmVyc2lvbk1hdGNoZXMiLCJnZXRPdGhlclZlcnNpb24iLCJicm93c2VyU3RyaW5nIiwibWF0Y2hlcyIsIm5hdmlnYXRvciIsIm1vYmlsZSIsInRhYmxldCIsIk1vYmlsZSIsIlRhYmxldCIsIkRlc2t0b3AiLCJFdmVudE1hbmFnZXIiLCJyYWlzZUN1c3RvbUV2ZW50IiwiZXZlbnROYW1lIiwicGF5bG9hZCIsImV2ZW50IiwiY3JlYXRlQ3VzdG9tRXZlbnQiLCJkaXNwYXRjaEV2ZW50IiwiZXZlbnREZXRhaWxzIiwiZGV0YWlsIiwiQ3VzdG9tRXZlbnQiLCJjcmVhdGVFdmVudCIsImluaXRDdXN0b21FdmVudCIsImVycm9yT2JqZWN0IiwiZm9yRWFjaCIsIndpbiIsIndpbnJ0Iiwid2lucGhvbmUiLCJvc3giLCJpb3MiLCJsaW51eCIsImFuZHJvaWQiLCJXSU5ET1dTX1BIT05FIiwiV0lORE9XU19SVCIsIklPUyIsIkFORFJPSUQiLCJMSU5VWCIsIk1BQ09TWCIsIldJTkRPV1MiLCJUZWxlbWV0cnlIZWxwZXIiLCJEZXNjcmlwdGlvbiIsIkV2ZW50IiwidGltZVN0YXJ0IiwiRGF0ZSIsImdldFRpbWUiLCJheGlvc1JldHJ5IiwiYXhpb3MiLCJheGlvc1JldHJ5T3B0aW9ucyIsImN1cnJlbnRUcnkiLCJvblN1Y2Nlc3MiLCJvbkVycm9yIiwiY29uZmlnIiwic2hvdWxkUmV0cnkiLCJpbnRlcmNlcHRvcnMiLCJ1c2UiLCJyZXBsYWNlIiwiYyIsInIiLCJNYXRoIiwicmFuZG9tIiwiRXZlbnROYW1lc18xIiwiU0RLUHJvdmlkZXJfMSIsIkV2ZW50TWFuYWdlcl8xIiwiZ2xvYmFsIiwiTWljcm9zb2Z0IiwiQ1JNIiwiT21uaWNoYW5uZWwiLCJVdGlsIiwiT0NTREtMT0FEIl0sIm1hcHBpbmdzIjoiO1FBQUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7OztRQUdBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwwQ0FBMEMsZ0NBQWdDO1FBQzFFO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0Esd0RBQXdELGtCQUFrQjtRQUMxRTtRQUNBLGlEQUFpRCxjQUFjO1FBQy9EOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSx5Q0FBeUMsaUNBQWlDO1FBQzFFLGdIQUFnSCxtQkFBbUIsRUFBRTtRQUNySTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDJCQUEyQiwwQkFBMEIsRUFBRTtRQUN2RCxpQ0FBaUMsZUFBZTtRQUNoRDtRQUNBO1FBQ0E7O1FBRUE7UUFDQSxzREFBc0QsK0RBQStEOztRQUVySDtRQUNBOzs7UUFHQTtRQUNBOzs7Ozs7Ozs7Ozs7QUNsRkEsaUJBQWlCLG1CQUFPLENB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QUFPO0FBQ2xCLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUM1VkE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztB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QUFtQnVMLGVBQWVoWixPQUFmLENBQXVCOFYsZ0JBQXZCLENBQXdDZ0QsYUFBYTlZLE9BQWIsQ0FBcUJzWixTQUE3RCxDQUFuQixFQUNILENBM0JELEkiLCJmaWxlIjoiU0RLLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiLi9zcmMvaW5kZXgudHNcIik7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbGliL2F4aW9zJyk7IiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgc2V0dGxlID0gcmVxdWlyZSgnLi8uLi9jb3JlL3NldHRsZScpO1xudmFyIGNvb2tpZXMgPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvY29va2llcycpO1xudmFyIGJ1aWxkVVJMID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL2J1aWxkVVJMJyk7XG52YXIgYnVpbGRGdWxsUGF0aCA9IHJlcXVpcmUoJy4uL2NvcmUvYnVpbGRGdWxsUGF0aCcpO1xudmFyIHBhcnNlSGVhZGVycyA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9wYXJzZUhlYWRlcnMnKTtcbnZhciBpc1VSTFNhbWVPcmlnaW4gPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvaXNVUkxTYW1lT3JpZ2luJyk7XG52YXIgY3JlYXRlRXJyb3IgPSByZXF1aXJlKCcuLi9jb3JlL2NyZWF0ZUVycm9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24geGhyQWRhcHRlcihjb25maWcpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIGRpc3BhdGNoWGhyUmVxdWVzdChyZXNvbHZlLCByZWplY3QpIHtcbiAgICB2YXIgcmVxdWVzdERhdGEgPSBjb25maWcuZGF0YTtcbiAgICB2YXIgcmVxdWVzdEhlYWRlcnMgPSBjb25maWcuaGVhZGVycztcbiAgICB2YXIgcmVzcG9uc2VUeXBlID0gY29uZmlnLnJlc3BvbnNlVHlwZTtcblxuICAgIGlmICh1dGlscy5pc0Zvcm1EYXRhKHJlcXVlc3REYXRhKSkge1xuICAgICAgZGVsZXRlIHJlcXVlc3RIZWFkZXJzWydDb250ZW50LVR5cGUnXTsgLy8gTGV0IHRoZSBicm93c2VyIHNldCBpdFxuICAgIH1cblxuICAgIHZhciByZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICAvLyBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uXG4gICAgaWYgKGNvbmZpZy5hdXRoKSB7XG4gICAgICB2YXIgdXNlcm5hbWUgPSBjb25maWcuYXV0aC51c2VybmFtZSB8fCAnJztcbiAgICAgIHZhciBwYXNzd29yZCA9IGNvbmZpZy5hdXRoLnBhc3N3b3JkID8gdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGNvbmZpZy5hdXRoLnBhc3N3b3JkKSkgOiAnJztcbiAgICAgIHJlcXVlc3RIZWFkZXJzLkF1dGhvcml6YXRpb24gPSAnQmFzaWMgJyArIGJ0b2EodXNlcm5hbWUgKyAnOicgKyBwYXNzd29yZCk7XG4gICAgfVxuXG4gICAgdmFyIGZ1bGxQYXRoID0gYnVpbGRGdWxsUGF0aChjb25maWcuYmFzZVVSTCwgY29uZmlnLnVybCk7XG4gICAgcmVxdWVzdC5vcGVuKGNvbmZpZy5tZXRob2QudG9VcHBlckNhc2UoKSwgYnVpbGRVUkwoZnVsbFBhdGgsIGNvbmZpZy5wYXJhbXMsIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyKSwgdHJ1ZSk7XG5cbiAgICAvLyBTZXQgdGhlIHJlcXVlc3QgdGltZW91dCBpbiBNU1xuICAgIHJlcXVlc3QudGltZW91dCA9IGNvbmZpZy50aW1lb3V0O1xuXG4gICAgZnVuY3Rpb24gb25sb2FkZW5kKCkge1xuICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIFByZXBhcmUgdGhlIHJlc3BvbnNlXG4gICAgICB2YXIgcmVzcG9uc2VIZWFkZXJzID0gJ2dldEFsbFJlc3BvbnNlSGVhZGVycycgaW4gcmVxdWVzdCA/IHBhcnNlSGVhZGVycyhyZXF1ZXN0LmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSA6IG51bGw7XG4gICAgICB2YXIgcmVzcG9uc2VEYXRhID0gIXJlc3BvbnNlVHlwZSB8fCByZXNwb25zZVR5cGUgPT09ICd0ZXh0JyB8fCAgcmVzcG9uc2VUeXBlID09PSAnanNvbicgP1xuICAgICAgICByZXF1ZXN0LnJlc3BvbnNlVGV4dCA6IHJlcXVlc3QucmVzcG9uc2U7XG4gICAgICB2YXIgcmVzcG9uc2UgPSB7XG4gICAgICAgIGRhdGE6IHJlc3BvbnNlRGF0YSxcbiAgICAgICAgc3RhdHVzOiByZXF1ZXN0LnN0YXR1cyxcbiAgICAgICAgc3RhdHVzVGV4dDogcmVxdWVzdC5zdGF0dXNUZXh0LFxuICAgICAgICBoZWFkZXJzOiByZXNwb25zZUhlYWRlcnMsXG4gICAgICAgIGNvbmZpZzogY29uZmlnLFxuICAgICAgICByZXF1ZXN0OiByZXF1ZXN0XG4gICAgICB9O1xuXG4gICAgICBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCByZXNwb25zZSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH1cblxuICAgIGlmICgnb25sb2FkZW5kJyBpbiByZXF1ZXN0KSB7XG4gICAgICAvLyBVc2Ugb25sb2FkZW5kIGlmIGF2YWlsYWJsZVxuICAgICAgcmVxdWVzdC5vbmxvYWRlbmQgPSBvbmxvYWRlbmQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIExpc3RlbiBmb3IgcmVhZHkgc3RhdGUgdG8gZW11bGF0ZSBvbmxvYWRlbmRcbiAgICAgIHJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gaGFuZGxlTG9hZCgpIHtcbiAgICAgICAgaWYgKCFyZXF1ZXN0IHx8IHJlcXVlc3QucmVhZHlTdGF0ZSAhPT0gNCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZSByZXF1ZXN0IGVycm9yZWQgb3V0IGFuZCB3ZSBkaWRuJ3QgZ2V0IGEgcmVzcG9uc2UsIHRoaXMgd2lsbCBiZVxuICAgICAgICAvLyBoYW5kbGVkIGJ5IG9uZXJyb3IgaW5zdGVhZFxuICAgICAgICAvLyBXaXRoIG9uZSBleGNlcHRpb246IHJlcXVlc3QgdGhhdCB1c2luZyBmaWxlOiBwcm90b2NvbCwgbW9zdCBicm93c2Vyc1xuICAgICAgICAvLyB3aWxsIHJldHVybiBzdGF0dXMgYXMgMCBldmVuIHRob3VnaCBpdCdzIGEgc3VjY2Vzc2Z1bCByZXF1ZXN0XG4gICAgICAgIGlmIChyZXF1ZXN0LnN0YXR1cyA9PT0gMCAmJiAhKHJlcXVlc3QucmVzcG9uc2VVUkwgJiYgcmVxdWVzdC5yZXNwb25zZVVSTC5pbmRleE9mKCdmaWxlOicpID09PSAwKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyByZWFkeXN0YXRlIGhhbmRsZXIgaXMgY2FsbGluZyBiZWZvcmUgb25lcnJvciBvciBvbnRpbWVvdXQgaGFuZGxlcnMsXG4gICAgICAgIC8vIHNvIHdlIHNob3VsZCBjYWxsIG9ubG9hZGVuZCBvbiB0aGUgbmV4dCAndGljaydcbiAgICAgICAgc2V0VGltZW91dChvbmxvYWRlbmQpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgYnJvd3NlciByZXF1ZXN0IGNhbmNlbGxhdGlvbiAoYXMgb3Bwb3NlZCB0byBhIG1hbnVhbCBjYW5jZWxsYXRpb24pXG4gICAgcmVxdWVzdC5vbmFib3J0ID0gZnVuY3Rpb24gaGFuZGxlQWJvcnQoKSB7XG4gICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICByZWplY3QoY3JlYXRlRXJyb3IoJ1JlcXVlc3QgYWJvcnRlZCcsIGNvbmZpZywgJ0VDT05OQUJPUlRFRCcsIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSBsb3cgbGV2ZWwgbmV0d29yayBlcnJvcnNcbiAgICByZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbiBoYW5kbGVFcnJvcigpIHtcbiAgICAgIC8vIFJlYWwgZXJyb3JzIGFyZSBoaWRkZW4gZnJvbSB1cyBieSB0aGUgYnJvd3NlclxuICAgICAgLy8gb25lcnJvciBzaG91bGQgb25seSBmaXJlIGlmIGl0J3MgYSBuZXR3b3JrIGVycm9yXG4gICAgICByZWplY3QoY3JlYXRlRXJyb3IoJ05ldHdvcmsgRXJyb3InLCBjb25maWcsIG51bGwsIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSB0aW1lb3V0XG4gICAgcmVxdWVzdC5vbnRpbWVvdXQgPSBmdW5jdGlvbiBoYW5kbGVUaW1lb3V0KCkge1xuICAgICAgdmFyIHRpbWVvdXRFcnJvck1lc3NhZ2UgPSAndGltZW91dCBvZiAnICsgY29uZmlnLnRpbWVvdXQgKyAnbXMgZXhjZWVkZWQnO1xuICAgICAgaWYgKGNvbmZpZy50aW1lb3V0RXJyb3JNZXNzYWdlKSB7XG4gICAgICAgIHRpbWVvdXRFcnJvck1lc3NhZ2UgPSBjb25maWcudGltZW91dEVycm9yTWVzc2FnZTtcbiAgICAgIH1cbiAgICAgIHJlamVjdChjcmVhdGVFcnJvcihcbiAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICBjb25maWcudHJhbnNpdGlvbmFsICYmIGNvbmZpZy50cmFuc2l0aW9uYWwuY2xhcmlmeVRpbWVvdXRFcnJvciA/ICdFVElNRURPVVQnIDogJ0VDT05OQUJPUlRFRCcsXG4gICAgICAgIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEFkZCB4c3JmIGhlYWRlclxuICAgIC8vIFRoaXMgaXMgb25seSBkb25lIGlmIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50LlxuICAgIC8vIFNwZWNpZmljYWxseSBub3QgaWYgd2UncmUgaW4gYSB3ZWIgd29ya2VyLCBvciByZWFjdC1uYXRpdmUuXG4gICAgaWYgKHV0aWxzLmlzU3RhbmRhcmRCcm93c2VyRW52KCkpIHtcbiAgICAgIC8vIEFkZCB4c3JmIGhlYWRlclxuICAgICAgdmFyIHhzcmZWYWx1ZSA9IChjb25maWcud2l0aENyZWRlbnRpYWxzIHx8IGlzVVJMU2FtZU9yaWdpbihmdWxsUGF0aCkpICYmIGNvbmZpZy54c3JmQ29va2llTmFtZSA/XG4gICAgICAgIGNvb2tpZXMucmVhZChjb25maWcueHNyZkNvb2tpZU5hbWUpIDpcbiAgICAgICAgdW5kZWZpbmVkO1xuXG4gICAgICBpZiAoeHNyZlZhbHVlKSB7XG4gICAgICAgIHJlcXVlc3RIZWFkZXJzW2NvbmZpZy54c3JmSGVhZGVyTmFtZV0gPSB4c3JmVmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQWRkIGhlYWRlcnMgdG8gdGhlIHJlcXVlc3RcbiAgICBpZiAoJ3NldFJlcXVlc3RIZWFkZXInIGluIHJlcXVlc3QpIHtcbiAgICAgIHV0aWxzLmZvckVhY2gocmVxdWVzdEhlYWRlcnMsIGZ1bmN0aW9uIHNldFJlcXVlc3RIZWFkZXIodmFsLCBrZXkpIHtcbiAgICAgICAgaWYgKHR5cGVvZiByZXF1ZXN0RGF0YSA9PT0gJ3VuZGVmaW5lZCcgJiYga2V5LnRvTG93ZXJDYXNlKCkgPT09ICdjb250ZW50LXR5cGUnKSB7XG4gICAgICAgICAgLy8gUmVtb3ZlIENvbnRlbnQtVHlwZSBpZiBkYXRhIGlzIHVuZGVmaW5lZFxuICAgICAgICAgIGRlbGV0ZSByZXF1ZXN0SGVhZGVyc1trZXldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIE90aGVyd2lzZSBhZGQgaGVhZGVyIHRvIHRoZSByZXF1ZXN0XG4gICAgICAgICAgcmVxdWVzdC5zZXRSZXF1ZXN0SGVhZGVyKGtleSwgdmFsKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQWRkIHdpdGhDcmVkZW50aWFscyB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoY29uZmlnLndpdGhDcmVkZW50aWFscykpIHtcbiAgICAgIHJlcXVlc3Qud2l0aENyZWRlbnRpYWxzID0gISFjb25maWcud2l0aENyZWRlbnRpYWxzO1xuICAgIH1cblxuICAgIC8vIEFkZCByZXNwb25zZVR5cGUgdG8gcmVxdWVzdCBpZiBuZWVkZWRcbiAgICBpZiAocmVzcG9uc2VUeXBlICYmIHJlc3BvbnNlVHlwZSAhPT0gJ2pzb24nKSB7XG4gICAgICByZXF1ZXN0LnJlc3BvbnNlVHlwZSA9IGNvbmZpZy5yZXNwb25zZVR5cGU7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHByb2dyZXNzIGlmIG5lZWRlZFxuICAgIGlmICh0eXBlb2YgY29uZmlnLm9uRG93bmxvYWRQcm9ncmVzcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIGNvbmZpZy5vbkRvd25sb2FkUHJvZ3Jlc3MpO1xuICAgIH1cblxuICAgIC8vIE5vdCBhbGwgYnJvd3NlcnMgc3VwcG9ydCB1cGxvYWQgZXZlbnRzXG4gICAgaWYgKHR5cGVvZiBjb25maWcub25VcGxvYWRQcm9ncmVzcyA9PT0gJ2Z1bmN0aW9uJyAmJiByZXF1ZXN0LnVwbG9hZCkge1xuICAgICAgcmVxdWVzdC51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBjb25maWcub25VcGxvYWRQcm9ncmVzcyk7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgICAgLy8gSGFuZGxlIGNhbmNlbGxhdGlvblxuICAgICAgY29uZmlnLmNhbmNlbFRva2VuLnByb21pc2UudGhlbihmdW5jdGlvbiBvbkNhbmNlbGVkKGNhbmNlbCkge1xuICAgICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZXF1ZXN0LmFib3J0KCk7XG4gICAgICAgIHJlamVjdChjYW5jZWwpO1xuICAgICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKCFyZXF1ZXN0RGF0YSkge1xuICAgICAgcmVxdWVzdERhdGEgPSBudWxsO1xuICAgIH1cblxuICAgIC8vIFNlbmQgdGhlIHJlcXVlc3RcbiAgICByZXF1ZXN0LnNlbmQocmVxdWVzdERhdGEpO1xuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi9oZWxwZXJzL2JpbmQnKTtcbnZhciBBeGlvcyA9IHJlcXVpcmUoJy4vY29yZS9BeGlvcycpO1xudmFyIG1lcmdlQ29uZmlnID0gcmVxdWlyZSgnLi9jb3JlL21lcmdlQ29uZmlnJyk7XG52YXIgZGVmYXVsdHMgPSByZXF1aXJlKCcuL2RlZmF1bHRzJyk7XG5cbi8qKlxuICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIEF4aW9zXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGRlZmF1bHRDb25maWcgVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgaW5zdGFuY2VcbiAqIEByZXR1cm4ge0F4aW9zfSBBIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICovXG5mdW5jdGlvbiBjcmVhdGVJbnN0YW5jZShkZWZhdWx0Q29uZmlnKSB7XG4gIHZhciBjb250ZXh0ID0gbmV3IEF4aW9zKGRlZmF1bHRDb25maWcpO1xuICB2YXIgaW5zdGFuY2UgPSBiaW5kKEF4aW9zLnByb3RvdHlwZS5yZXF1ZXN0LCBjb250ZXh0KTtcblxuICAvLyBDb3B5IGF4aW9zLnByb3RvdHlwZSB0byBpbnN0YW5jZVxuICB1dGlscy5leHRlbmQoaW5zdGFuY2UsIEF4aW9zLnByb3RvdHlwZSwgY29udGV4dCk7XG5cbiAgLy8gQ29weSBjb250ZXh0IHRvIGluc3RhbmNlXG4gIHV0aWxzLmV4dGVuZChpbnN0YW5jZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGluc3RhbmNlO1xufVxuXG4vLyBDcmVhdGUgdGhlIGRlZmF1bHQgaW5zdGFuY2UgdG8gYmUgZXhwb3J0ZWRcbnZhciBheGlvcyA9IGNyZWF0ZUluc3RhbmNlKGRlZmF1bHRzKTtcblxuLy8gRXhwb3NlIEF4aW9zIGNsYXNzIHRvIGFsbG93IGNsYXNzIGluaGVyaXRhbmNlXG5heGlvcy5BeGlvcyA9IEF4aW9zO1xuXG4vLyBGYWN0b3J5IGZvciBjcmVhdGluZyBuZXcgaW5zdGFuY2VzXG5heGlvcy5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoaW5zdGFuY2VDb25maWcpIHtcbiAgcmV0dXJuIGNyZWF0ZUluc3RhbmNlKG1lcmdlQ29uZmlnKGF4aW9zLmRlZmF1bHRzLCBpbnN0YW5jZUNvbmZpZykpO1xufTtcblxuLy8gRXhwb3NlIENhbmNlbCAmIENhbmNlbFRva2VuXG5heGlvcy5DYW5jZWwgPSByZXF1aXJlKCcuL2NhbmNlbC9DYW5jZWwnKTtcbmF4aW9zLkNhbmNlbFRva2VuID0gcmVxdWlyZSgnLi9jYW5jZWwvQ2FuY2VsVG9rZW4nKTtcbmF4aW9zLmlzQ2FuY2VsID0gcmVxdWlyZSgnLi9jYW5jZWwvaXNDYW5jZWwnKTtcblxuLy8gRXhwb3NlIGFsbC9zcHJlYWRcbmF4aW9zLmFsbCA9IGZ1bmN0aW9uIGFsbChwcm9taXNlcykge1xuICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xufTtcbmF4aW9zLnNwcmVhZCA9IHJlcXVpcmUoJy4vaGVscGVycy9zcHJlYWQnKTtcblxuLy8gRXhwb3NlIGlzQXhpb3NFcnJvclxuYXhpb3MuaXNBeGlvc0Vycm9yID0gcmVxdWlyZSgnLi9oZWxwZXJzL2lzQXhpb3NFcnJvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGF4aW9zO1xuXG4vLyBBbGxvdyB1c2Ugb2YgZGVmYXVsdCBpbXBvcnQgc3ludGF4IGluIFR5cGVTY3JpcHRcbm1vZHVsZS5leHBvcnRzLmRlZmF1bHQgPSBheGlvcztcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBBIGBDYW5jZWxgIGlzIGFuIG9iamVjdCB0aGF0IGlzIHRocm93biB3aGVuIGFuIG9wZXJhdGlvbiBpcyBjYW5jZWxlZC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSB7c3RyaW5nPX0gbWVzc2FnZSBUaGUgbWVzc2FnZS5cbiAqL1xuZnVuY3Rpb24gQ2FuY2VsKG1lc3NhZ2UpIHtcbiAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbn1cblxuQ2FuY2VsLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gJ0NhbmNlbCcgKyAodGhpcy5tZXNzYWdlID8gJzogJyArIHRoaXMubWVzc2FnZSA6ICcnKTtcbn07XG5cbkNhbmNlbC5wcm90b3R5cGUuX19DQU5DRUxfXyA9IHRydWU7XG5cbm1vZHVsZS5leHBvcnRzID0gQ2FuY2VsO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgQ2FuY2VsID0gcmVxdWlyZSgnLi9DYW5jZWwnKTtcblxuLyoqXG4gKiBBIGBDYW5jZWxUb2tlbmAgaXMgYW4gb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVxdWVzdCBjYW5jZWxsYXRpb24gb2YgYW4gb3BlcmF0aW9uLlxuICpcbiAqIEBjbGFzc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gZXhlY3V0b3IgVGhlIGV4ZWN1dG9yIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBDYW5jZWxUb2tlbihleGVjdXRvcikge1xuICBpZiAodHlwZW9mIGV4ZWN1dG9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLicpO1xuICB9XG5cbiAgdmFyIHJlc29sdmVQcm9taXNlO1xuICB0aGlzLnByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiBwcm9taXNlRXhlY3V0b3IocmVzb2x2ZSkge1xuICAgIHJlc29sdmVQcm9taXNlID0gcmVzb2x2ZTtcbiAgfSk7XG5cbiAgdmFyIHRva2VuID0gdGhpcztcbiAgZXhlY3V0b3IoZnVuY3Rpb24gY2FuY2VsKG1lc3NhZ2UpIHtcbiAgICBpZiAodG9rZW4ucmVhc29uKSB7XG4gICAgICAvLyBDYW5jZWxsYXRpb24gaGFzIGFscmVhZHkgYmVlbiByZXF1ZXN0ZWRcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0b2tlbi5yZWFzb24gPSBuZXcgQ2FuY2VsKG1lc3NhZ2UpO1xuICAgIHJlc29sdmVQcm9taXNlKHRva2VuLnJlYXNvbik7XG4gIH0pO1xufVxuXG4vKipcbiAqIFRocm93cyBhIGBDYW5jZWxgIGlmIGNhbmNlbGxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gKi9cbkNhbmNlbFRva2VuLnByb3RvdHlwZS50aHJvd0lmUmVxdWVzdGVkID0gZnVuY3Rpb24gdGhyb3dJZlJlcXVlc3RlZCgpIHtcbiAgaWYgKHRoaXMucmVhc29uKSB7XG4gICAgdGhyb3cgdGhpcy5yZWFzb247XG4gIH1cbn07XG5cbi8qKlxuICogUmV0dXJucyBhbiBvYmplY3QgdGhhdCBjb250YWlucyBhIG5ldyBgQ2FuY2VsVG9rZW5gIGFuZCBhIGZ1bmN0aW9uIHRoYXQsIHdoZW4gY2FsbGVkLFxuICogY2FuY2VscyB0aGUgYENhbmNlbFRva2VuYC5cbiAqL1xuQ2FuY2VsVG9rZW4uc291cmNlID0gZnVuY3Rpb24gc291cmNlKCkge1xuICB2YXIgY2FuY2VsO1xuICB2YXIgdG9rZW4gPSBuZXcgQ2FuY2VsVG9rZW4oZnVuY3Rpb24gZXhlY3V0b3IoYykge1xuICAgIGNhbmNlbCA9IGM7XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIHRva2VuOiB0b2tlbixcbiAgICBjYW5jZWw6IGNhbmNlbFxuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBDYW5jZWxUb2tlbjtcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0NhbmNlbCh2YWx1ZSkge1xuICByZXR1cm4gISEodmFsdWUgJiYgdmFsdWUuX19DQU5DRUxfXyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgYnVpbGRVUkwgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2J1aWxkVVJMJyk7XG52YXIgSW50ZXJjZXB0b3JNYW5hZ2VyID0gcmVxdWlyZSgnLi9JbnRlcmNlcHRvck1hbmFnZXInKTtcbnZhciBkaXNwYXRjaFJlcXVlc3QgPSByZXF1aXJlKCcuL2Rpc3BhdGNoUmVxdWVzdCcpO1xudmFyIG1lcmdlQ29uZmlnID0gcmVxdWlyZSgnLi9tZXJnZUNvbmZpZycpO1xudmFyIHZhbGlkYXRvciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvdmFsaWRhdG9yJyk7XG5cbnZhciB2YWxpZGF0b3JzID0gdmFsaWRhdG9yLnZhbGlkYXRvcnM7XG4vKipcbiAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZUNvbmZpZyBUaGUgZGVmYXVsdCBjb25maWcgZm9yIHRoZSBpbnN0YW5jZVxuICovXG5mdW5jdGlvbiBBeGlvcyhpbnN0YW5jZUNvbmZpZykge1xuICB0aGlzLmRlZmF1bHRzID0gaW5zdGFuY2VDb25maWc7XG4gIHRoaXMuaW50ZXJjZXB0b3JzID0ge1xuICAgIHJlcXVlc3Q6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIoKSxcbiAgICByZXNwb25zZTogbmV3IEludGVyY2VwdG9yTWFuYWdlcigpXG4gIH07XG59XG5cbi8qKlxuICogRGlzcGF0Y2ggYSByZXF1ZXN0XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnIHNwZWNpZmljIGZvciB0aGlzIHJlcXVlc3QgKG1lcmdlZCB3aXRoIHRoaXMuZGVmYXVsdHMpXG4gKi9cbkF4aW9zLnByb3RvdHlwZS5yZXF1ZXN0ID0gZnVuY3Rpb24gcmVxdWVzdChjb25maWcpIHtcbiAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gIC8vIEFsbG93IGZvciBheGlvcygnZXhhbXBsZS91cmwnWywgY29uZmlnXSkgYSBsYSBmZXRjaCBBUElcbiAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnKSB7XG4gICAgY29uZmlnID0gYXJndW1lbnRzWzFdIHx8IHt9O1xuICAgIGNvbmZpZy51cmwgPSBhcmd1bWVudHNbMF07XG4gIH0gZWxzZSB7XG4gICAgY29uZmlnID0gY29uZmlnIHx8IHt9O1xuICB9XG5cbiAgY29uZmlnID0gbWVyZ2VDb25maWcodGhpcy5kZWZhdWx0cywgY29uZmlnKTtcblxuICAvLyBTZXQgY29uZmlnLm1ldGhvZFxuICBpZiAoY29uZmlnLm1ldGhvZCkge1xuICAgIGNvbmZpZy5tZXRob2QgPSBjb25maWcubWV0aG9kLnRvTG93ZXJDYXNlKCk7XG4gIH0gZWxzZSBpZiAodGhpcy5kZWZhdWx0cy5tZXRob2QpIHtcbiAgICBjb25maWcubWV0aG9kID0gdGhpcy5kZWZhdWx0cy5tZXRob2QudG9Mb3dlckNhc2UoKTtcbiAgfSBlbHNlIHtcbiAgICBjb25maWcubWV0aG9kID0gJ2dldCc7XG4gIH1cblxuICB2YXIgdHJhbnNpdGlvbmFsID0gY29uZmlnLnRyYW5zaXRpb25hbDtcblxuICBpZiAodHJhbnNpdGlvbmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YWxpZGF0b3IuYXNzZXJ0T3B0aW9ucyh0cmFuc2l0aW9uYWwsIHtcbiAgICAgIHNpbGVudEpTT05QYXJzaW5nOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4sICcxLjAuMCcpLFxuICAgICAgZm9yY2VkSlNPTlBhcnNpbmc6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbiwgJzEuMC4wJyksXG4gICAgICBjbGFyaWZ5VGltZW91dEVycm9yOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4sICcxLjAuMCcpXG4gICAgfSwgZmFsc2UpO1xuICB9XG5cbiAgLy8gZmlsdGVyIG91dCBza2lwcGVkIGludGVyY2VwdG9yc1xuICB2YXIgcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4gPSBbXTtcbiAgdmFyIHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyA9IHRydWU7XG4gIHRoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbiB1bnNoaWZ0UmVxdWVzdEludGVyY2VwdG9ycyhpbnRlcmNlcHRvcikge1xuICAgIGlmICh0eXBlb2YgaW50ZXJjZXB0b3IucnVuV2hlbiA9PT0gJ2Z1bmN0aW9uJyAmJiBpbnRlcmNlcHRvci5ydW5XaGVuKGNvbmZpZykgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzID0gc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzICYmIGludGVyY2VwdG9yLnN5bmNocm9ub3VzO1xuXG4gICAgcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4udW5zaGlmdChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgfSk7XG5cbiAgdmFyIHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbiA9IFtdO1xuICB0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKGZ1bmN0aW9uIHB1c2hSZXNwb25zZUludGVyY2VwdG9ycyhpbnRlcmNlcHRvcikge1xuICAgIHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbi5wdXNoKGludGVyY2VwdG9yLmZ1bGZpbGxlZCwgaW50ZXJjZXB0b3IucmVqZWN0ZWQpO1xuICB9KTtcblxuICB2YXIgcHJvbWlzZTtcblxuICBpZiAoIXN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycykge1xuICAgIHZhciBjaGFpbiA9IFtkaXNwYXRjaFJlcXVlc3QsIHVuZGVmaW5lZF07XG5cbiAgICBBcnJheS5wcm90b3R5cGUudW5zaGlmdC5hcHBseShjaGFpbiwgcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4pO1xuICAgIGNoYWluID0gY2hhaW4uY29uY2F0KHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbik7XG5cbiAgICBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKGNvbmZpZyk7XG4gICAgd2hpbGUgKGNoYWluLmxlbmd0aCkge1xuICAgICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihjaGFpbi5zaGlmdCgpLCBjaGFpbi5zaGlmdCgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfVxuXG5cbiAgdmFyIG5ld0NvbmZpZyA9IGNvbmZpZztcbiAgd2hpbGUgKHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLmxlbmd0aCkge1xuICAgIHZhciBvbkZ1bGZpbGxlZCA9IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLnNoaWZ0KCk7XG4gICAgdmFyIG9uUmVqZWN0ZWQgPSByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi5zaGlmdCgpO1xuICAgIHRyeSB7XG4gICAgICBuZXdDb25maWcgPSBvbkZ1bGZpbGxlZChuZXdDb25maWcpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBvblJlamVjdGVkKGVycm9yKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHRyeSB7XG4gICAgcHJvbWlzZSA9IGRpc3BhdGNoUmVxdWVzdChuZXdDb25maWcpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gIH1cblxuICB3aGlsZSAocmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLmxlbmd0aCkge1xuICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4ocmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLnNoaWZ0KCksIHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbi5zaGlmdCgpKTtcbiAgfVxuXG4gIHJldHVybiBwcm9taXNlO1xufTtcblxuQXhpb3MucHJvdG90eXBlLmdldFVyaSA9IGZ1bmN0aW9uIGdldFVyaShjb25maWcpIHtcbiAgY29uZmlnID0gbWVyZ2VDb25maWcodGhpcy5kZWZhdWx0cywgY29uZmlnKTtcbiAgcmV0dXJuIGJ1aWxkVVJMKGNvbmZpZy51cmwsIGNvbmZpZy5wYXJhbXMsIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyKS5yZXBsYWNlKC9eXFw/LywgJycpO1xufTtcblxuLy8gUHJvdmlkZSBhbGlhc2VzIGZvciBzdXBwb3J0ZWQgcmVxdWVzdCBtZXRob2RzXG51dGlscy5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ29wdGlvbnMnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZE5vRGF0YShtZXRob2QpIHtcbiAgLyplc2xpbnQgZnVuYy1uYW1lczowKi9cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbih1cmwsIGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QobWVyZ2VDb25maWcoY29uZmlnIHx8IHt9LCB7XG4gICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgIHVybDogdXJsLFxuICAgICAgZGF0YTogKGNvbmZpZyB8fCB7fSkuZGF0YVxuICAgIH0pKTtcbiAgfTtcbn0pO1xuXG51dGlscy5mb3JFYWNoKFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZFdpdGhEYXRhKG1ldGhvZCkge1xuICAvKmVzbGludCBmdW5jLW5hbWVzOjAqL1xuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKHVybCwgZGF0YSwgY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdChtZXJnZUNvbmZpZyhjb25maWcgfHwge30sIHtcbiAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgdXJsOiB1cmwsXG4gICAgICBkYXRhOiBkYXRhXG4gICAgfSkpO1xuICB9O1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gQXhpb3M7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxuZnVuY3Rpb24gSW50ZXJjZXB0b3JNYW5hZ2VyKCkge1xuICB0aGlzLmhhbmRsZXJzID0gW107XG59XG5cbi8qKlxuICogQWRkIGEgbmV3IGludGVyY2VwdG9yIHRvIHRoZSBzdGFja1xuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bGZpbGxlZCBUaGUgZnVuY3Rpb24gdG8gaGFuZGxlIGB0aGVuYCBmb3IgYSBgUHJvbWlzZWBcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlamVjdGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHJlamVjdGAgZm9yIGEgYFByb21pc2VgXG4gKlxuICogQHJldHVybiB7TnVtYmVyfSBBbiBJRCB1c2VkIHRvIHJlbW92ZSBpbnRlcmNlcHRvciBsYXRlclxuICovXG5JbnRlcmNlcHRvck1hbmFnZXIucHJvdG90eXBlLnVzZSA9IGZ1bmN0aW9uIHVzZShmdWxmaWxsZWQsIHJlamVjdGVkLCBvcHRpb25zKSB7XG4gIHRoaXMuaGFuZGxlcnMucHVzaCh7XG4gICAgZnVsZmlsbGVkOiBmdWxmaWxsZWQsXG4gICAgcmVqZWN0ZWQ6IHJlamVjdGVkLFxuICAgIHN5bmNocm9ub3VzOiBvcHRpb25zID8gb3B0aW9ucy5zeW5jaHJvbm91cyA6IGZhbHNlLFxuICAgIHJ1bldoZW46IG9wdGlvbnMgPyBvcHRpb25zLnJ1bldoZW4gOiBudWxsXG4gIH0pO1xuICByZXR1cm4gdGhpcy5oYW5kbGVycy5sZW5ndGggLSAxO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYW4gaW50ZXJjZXB0b3IgZnJvbSB0aGUgc3RhY2tcbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gaWQgVGhlIElEIHRoYXQgd2FzIHJldHVybmVkIGJ5IGB1c2VgXG4gKi9cbkludGVyY2VwdG9yTWFuYWdlci5wcm90b3R5cGUuZWplY3QgPSBmdW5jdGlvbiBlamVjdChpZCkge1xuICBpZiAodGhpcy5oYW5kbGVyc1tpZF0pIHtcbiAgICB0aGlzLmhhbmRsZXJzW2lkXSA9IG51bGw7XG4gIH1cbn07XG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGFsbCB0aGUgcmVnaXN0ZXJlZCBpbnRlcmNlcHRvcnNcbiAqXG4gKiBUaGlzIG1ldGhvZCBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBza2lwcGluZyBvdmVyIGFueVxuICogaW50ZXJjZXB0b3JzIHRoYXQgbWF5IGhhdmUgYmVjb21lIGBudWxsYCBjYWxsaW5nIGBlamVjdGAuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggaW50ZXJjZXB0b3JcbiAqL1xuSW50ZXJjZXB0b3JNYW5hZ2VyLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gZm9yRWFjaChmbikge1xuICB1dGlscy5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsIGZ1bmN0aW9uIGZvckVhY2hIYW5kbGVyKGgpIHtcbiAgICBpZiAoaCAhPT0gbnVsbCkge1xuICAgICAgZm4oaCk7XG4gICAgfVxuICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gSW50ZXJjZXB0b3JNYW5hZ2VyO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaXNBYnNvbHV0ZVVSTCA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNBYnNvbHV0ZVVSTCcpO1xudmFyIGNvbWJpbmVVUkxzID0gcmVxdWlyZSgnLi4vaGVscGVycy9jb21iaW5lVVJMcycpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgVVJMIGJ5IGNvbWJpbmluZyB0aGUgYmFzZVVSTCB3aXRoIHRoZSByZXF1ZXN0ZWRVUkwsXG4gKiBvbmx5IHdoZW4gdGhlIHJlcXVlc3RlZFVSTCBpcyBub3QgYWxyZWFkeSBhbiBhYnNvbHV0ZSBVUkwuXG4gKiBJZiB0aGUgcmVxdWVzdFVSTCBpcyBhYnNvbHV0ZSwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSByZXF1ZXN0ZWRVUkwgdW50b3VjaGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVVJMIFRoZSBiYXNlIFVSTFxuICogQHBhcmFtIHtzdHJpbmd9IHJlcXVlc3RlZFVSTCBBYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkwgdG8gY29tYmluZVxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIGZ1bGwgcGF0aFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJ1aWxkRnVsbFBhdGgoYmFzZVVSTCwgcmVxdWVzdGVkVVJMKSB7XG4gIGlmIChiYXNlVVJMICYmICFpc0Fic29sdXRlVVJMKHJlcXVlc3RlZFVSTCkpIHtcbiAgICByZXR1cm4gY29tYmluZVVSTHMoYmFzZVVSTCwgcmVxdWVzdGVkVVJMKTtcbiAgfVxuICByZXR1cm4gcmVxdWVzdGVkVVJMO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGVuaGFuY2VFcnJvciA9IHJlcXVpcmUoJy4vZW5oYW5jZUVycm9yJyk7XG5cbi8qKlxuICogQ3JlYXRlIGFuIEVycm9yIHdpdGggdGhlIHNwZWNpZmllZCBtZXNzYWdlLCBjb25maWcsIGVycm9yIGNvZGUsIHJlcXVlc3QgYW5kIHJlc3BvbnNlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnLlxuICogQHBhcmFtIHtzdHJpbmd9IFtjb2RlXSBUaGUgZXJyb3IgY29kZSAoZm9yIGV4YW1wbGUsICdFQ09OTkFCT1JURUQnKS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVxdWVzdF0gVGhlIHJlcXVlc3QuXG4gKiBAcGFyYW0ge09iamVjdH0gW3Jlc3BvbnNlXSBUaGUgcmVzcG9uc2UuXG4gKiBAcmV0dXJucyB7RXJyb3J9IFRoZSBjcmVhdGVkIGVycm9yLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNyZWF0ZUVycm9yKG1lc3NhZ2UsIGNvbmZpZywgY29kZSwgcmVxdWVzdCwgcmVzcG9uc2UpIHtcbiAgdmFyIGVycm9yID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xuICByZXR1cm4gZW5oYW5jZUVycm9yKGVycm9yLCBjb25maWcsIGNvZGUsIHJlcXVlc3QsIHJlc3BvbnNlKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcbnZhciB0cmFuc2Zvcm1EYXRhID0gcmVxdWlyZSgnLi90cmFuc2Zvcm1EYXRhJyk7XG52YXIgaXNDYW5jZWwgPSByZXF1aXJlKCcuLi9jYW5jZWwvaXNDYW5jZWwnKTtcbnZhciBkZWZhdWx0cyA9IHJlcXVpcmUoJy4uL2RlZmF1bHRzJyk7XG5cbi8qKlxuICogVGhyb3dzIGEgYENhbmNlbGAgaWYgY2FuY2VsbGF0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZC5cbiAqL1xuZnVuY3Rpb24gdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpIHtcbiAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgIGNvbmZpZy5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBEaXNwYXRjaCBhIHJlcXVlc3QgdG8gdGhlIHNlcnZlciB1c2luZyB0aGUgY29uZmlndXJlZCBhZGFwdGVyLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZyB0aGF0IGlzIHRvIGJlIHVzZWQgZm9yIHRoZSByZXF1ZXN0XG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gVGhlIFByb21pc2UgdG8gYmUgZnVsZmlsbGVkXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGlzcGF0Y2hSZXF1ZXN0KGNvbmZpZykge1xuICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgLy8gRW5zdXJlIGhlYWRlcnMgZXhpc3RcbiAgY29uZmlnLmhlYWRlcnMgPSBjb25maWcuaGVhZGVycyB8fCB7fTtcblxuICAvLyBUcmFuc2Zvcm0gcmVxdWVzdCBkYXRhXG4gIGNvbmZpZy5kYXRhID0gdHJhbnNmb3JtRGF0YS5jYWxsKFxuICAgIGNvbmZpZyxcbiAgICBjb25maWcuZGF0YSxcbiAgICBjb25maWcuaGVhZGVycyxcbiAgICBjb25maWcudHJhbnNmb3JtUmVxdWVzdFxuICApO1xuXG4gIC8vIEZsYXR0ZW4gaGVhZGVyc1xuICBjb25maWcuaGVhZGVycyA9IHV0aWxzLm1lcmdlKFxuICAgIGNvbmZpZy5oZWFkZXJzLmNvbW1vbiB8fCB7fSxcbiAgICBjb25maWcuaGVhZGVyc1tjb25maWcubWV0aG9kXSB8fCB7fSxcbiAgICBjb25maWcuaGVhZGVyc1xuICApO1xuXG4gIHV0aWxzLmZvckVhY2goXG4gICAgWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAncG9zdCcsICdwdXQnLCAncGF0Y2gnLCAnY29tbW9uJ10sXG4gICAgZnVuY3Rpb24gY2xlYW5IZWFkZXJDb25maWcobWV0aG9kKSB7XG4gICAgICBkZWxldGUgY29uZmlnLmhlYWRlcnNbbWV0aG9kXTtcbiAgICB9XG4gICk7XG5cbiAgdmFyIGFkYXB0ZXIgPSBjb25maWcuYWRhcHRlciB8fCBkZWZhdWx0cy5hZGFwdGVyO1xuXG4gIHJldHVybiBhZGFwdGVyKGNvbmZpZykudGhlbihmdW5jdGlvbiBvbkFkYXB0ZXJSZXNvbHV0aW9uKHJlc3BvbnNlKSB7XG4gICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgLy8gVHJhbnNmb3JtIHJlc3BvbnNlIGRhdGFcbiAgICByZXNwb25zZS5kYXRhID0gdHJhbnNmb3JtRGF0YS5jYWxsKFxuICAgICAgY29uZmlnLFxuICAgICAgcmVzcG9uc2UuZGF0YSxcbiAgICAgIHJlc3BvbnNlLmhlYWRlcnMsXG4gICAgICBjb25maWcudHJhbnNmb3JtUmVzcG9uc2VcbiAgICApO1xuXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9LCBmdW5jdGlvbiBvbkFkYXB0ZXJSZWplY3Rpb24ocmVhc29uKSB7XG4gICAgaWYgKCFpc0NhbmNlbChyZWFzb24pKSB7XG4gICAgICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgICBpZiAocmVhc29uICYmIHJlYXNvbi5yZXNwb25zZSkge1xuICAgICAgICByZWFzb24ucmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgcmVhc29uLnJlc3BvbnNlLmRhdGEsXG4gICAgICAgICAgcmVhc29uLnJlc3BvbnNlLmhlYWRlcnMsXG4gICAgICAgICAgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlYXNvbik7XG4gIH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBVcGRhdGUgYW4gRXJyb3Igd2l0aCB0aGUgc3BlY2lmaWVkIGNvbmZpZywgZXJyb3IgY29kZSwgYW5kIHJlc3BvbnNlLlxuICpcbiAqIEBwYXJhbSB7RXJyb3J9IGVycm9yIFRoZSBlcnJvciB0byB1cGRhdGUuXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIFRoZSBjb25maWcuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2NvZGVdIFRoZSBlcnJvciBjb2RlIChmb3IgZXhhbXBsZSwgJ0VDT05OQUJPUlRFRCcpLlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXF1ZXN0XSBUaGUgcmVxdWVzdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVzcG9uc2VdIFRoZSByZXNwb25zZS5cbiAqIEByZXR1cm5zIHtFcnJvcn0gVGhlIGVycm9yLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGVuaGFuY2VFcnJvcihlcnJvciwgY29uZmlnLCBjb2RlLCByZXF1ZXN0LCByZXNwb25zZSkge1xuICBlcnJvci5jb25maWcgPSBjb25maWc7XG4gIGlmIChjb2RlKSB7XG4gICAgZXJyb3IuY29kZSA9IGNvZGU7XG4gIH1cblxuICBlcnJvci5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgZXJyb3IucmVzcG9uc2UgPSByZXNwb25zZTtcbiAgZXJyb3IuaXNBeGlvc0Vycm9yID0gdHJ1ZTtcblxuICBlcnJvci50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIFN0YW5kYXJkXG4gICAgICBtZXNzYWdlOiB0aGlzLm1lc3NhZ2UsXG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAvLyBNaWNyb3NvZnRcbiAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmRlc2NyaXB0aW9uLFxuICAgICAgbnVtYmVyOiB0aGlzLm51bWJlcixcbiAgICAgIC8vIE1vemlsbGFcbiAgICAgIGZpbGVOYW1lOiB0aGlzLmZpbGVOYW1lLFxuICAgICAgbGluZU51bWJlcjogdGhpcy5saW5lTnVtYmVyLFxuICAgICAgY29sdW1uTnVtYmVyOiB0aGlzLmNvbHVtbk51bWJlcixcbiAgICAgIHN0YWNrOiB0aGlzLnN0YWNrLFxuICAgICAgLy8gQXhpb3NcbiAgICAgIGNvbmZpZzogdGhpcy5jb25maWcsXG4gICAgICBjb2RlOiB0aGlzLmNvZGVcbiAgICB9O1xuICB9O1xuICByZXR1cm4gZXJyb3I7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG4vKipcbiAqIENvbmZpZy1zcGVjaWZpYyBtZXJnZS1mdW5jdGlvbiB3aGljaCBjcmVhdGVzIGEgbmV3IGNvbmZpZy1vYmplY3RcbiAqIGJ5IG1lcmdpbmcgdHdvIGNvbmZpZ3VyYXRpb24gb2JqZWN0cyB0b2dldGhlci5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnMVxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZzJcbiAqIEByZXR1cm5zIHtPYmplY3R9IE5ldyBvYmplY3QgcmVzdWx0aW5nIGZyb20gbWVyZ2luZyBjb25maWcyIHRvIGNvbmZpZzFcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtZXJnZUNvbmZpZyhjb25maWcxLCBjb25maWcyKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBjb25maWcyID0gY29uZmlnMiB8fCB7fTtcbiAgdmFyIGNvbmZpZyA9IHt9O1xuXG4gIHZhciB2YWx1ZUZyb21Db25maWcyS2V5cyA9IFsndXJsJywgJ21ldGhvZCcsICdkYXRhJ107XG4gIHZhciBtZXJnZURlZXBQcm9wZXJ0aWVzS2V5cyA9IFsnaGVhZGVycycsICdhdXRoJywgJ3Byb3h5JywgJ3BhcmFtcyddO1xuICB2YXIgZGVmYXVsdFRvQ29uZmlnMktleXMgPSBbXG4gICAgJ2Jhc2VVUkwnLCAndHJhbnNmb3JtUmVxdWVzdCcsICd0cmFuc2Zvcm1SZXNwb25zZScsICdwYXJhbXNTZXJpYWxpemVyJyxcbiAgICAndGltZW91dCcsICd0aW1lb3V0TWVzc2FnZScsICd3aXRoQ3JlZGVudGlhbHMnLCAnYWRhcHRlcicsICdyZXNwb25zZVR5cGUnLCAneHNyZkNvb2tpZU5hbWUnLFxuICAgICd4c3JmSGVhZGVyTmFtZScsICdvblVwbG9hZFByb2dyZXNzJywgJ29uRG93bmxvYWRQcm9ncmVzcycsICdkZWNvbXByZXNzJyxcbiAgICAnbWF4Q29udGVudExlbmd0aCcsICdtYXhCb2R5TGVuZ3RoJywgJ21heFJlZGlyZWN0cycsICd0cmFuc3BvcnQnLCAnaHR0cEFnZW50JyxcbiAgICAnaHR0cHNBZ2VudCcsICdjYW5jZWxUb2tlbicsICdzb2NrZXRQYXRoJywgJ3Jlc3BvbnNlRW5jb2RpbmcnXG4gIF07XG4gIHZhciBkaXJlY3RNZXJnZUtleXMgPSBbJ3ZhbGlkYXRlU3RhdHVzJ107XG5cbiAgZnVuY3Rpb24gZ2V0TWVyZ2VkVmFsdWUodGFyZ2V0LCBzb3VyY2UpIHtcbiAgICBpZiAodXRpbHMuaXNQbGFpbk9iamVjdCh0YXJnZXQpICYmIHV0aWxzLmlzUGxhaW5PYmplY3Qoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHV0aWxzLm1lcmdlKHRhcmdldCwgc291cmNlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzLmlzUGxhaW5PYmplY3Qoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHV0aWxzLm1lcmdlKHt9LCBzb3VyY2UpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNBcnJheShzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gc291cmNlLnNsaWNlKCk7XG4gICAgfVxuICAgIHJldHVybiBzb3VyY2U7XG4gIH1cblxuICBmdW5jdGlvbiBtZXJnZURlZXBQcm9wZXJ0aWVzKHByb3ApIHtcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZzJbcHJvcF0pKSB7XG4gICAgICBjb25maWdbcHJvcF0gPSBnZXRNZXJnZWRWYWx1ZShjb25maWcxW3Byb3BdLCBjb25maWcyW3Byb3BdKTtcbiAgICB9IGVsc2UgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcxW3Byb3BdKSkge1xuICAgICAgY29uZmlnW3Byb3BdID0gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBjb25maWcxW3Byb3BdKTtcbiAgICB9XG4gIH1cblxuICB1dGlscy5mb3JFYWNoKHZhbHVlRnJvbUNvbmZpZzJLZXlzLCBmdW5jdGlvbiB2YWx1ZUZyb21Db25maWcyKHByb3ApIHtcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZzJbcHJvcF0pKSB7XG4gICAgICBjb25maWdbcHJvcF0gPSBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGNvbmZpZzJbcHJvcF0pO1xuICAgIH1cbiAgfSk7XG5cbiAgdXRpbHMuZm9yRWFjaChtZXJnZURlZXBQcm9wZXJ0aWVzS2V5cywgbWVyZ2VEZWVwUHJvcGVydGllcyk7XG5cbiAgdXRpbHMuZm9yRWFjaChkZWZhdWx0VG9Db25maWcyS2V5cywgZnVuY3Rpb24gZGVmYXVsdFRvQ29uZmlnMihwcm9wKSB7XG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcyW3Byb3BdKSkge1xuICAgICAgY29uZmlnW3Byb3BdID0gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBjb25maWcyW3Byb3BdKTtcbiAgICB9IGVsc2UgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcxW3Byb3BdKSkge1xuICAgICAgY29uZmlnW3Byb3BdID0gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBjb25maWcxW3Byb3BdKTtcbiAgICB9XG4gIH0pO1xuXG4gIHV0aWxzLmZvckVhY2goZGlyZWN0TWVyZ2VLZXlzLCBmdW5jdGlvbiBtZXJnZShwcm9wKSB7XG4gICAgaWYgKHByb3AgaW4gY29uZmlnMikge1xuICAgICAgY29uZmlnW3Byb3BdID0gZ2V0TWVyZ2VkVmFsdWUoY29uZmlnMVtwcm9wXSwgY29uZmlnMltwcm9wXSk7XG4gICAgfSBlbHNlIGlmIChwcm9wIGluIGNvbmZpZzEpIHtcbiAgICAgIGNvbmZpZ1twcm9wXSA9IGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgY29uZmlnMVtwcm9wXSk7XG4gICAgfVxuICB9KTtcblxuICB2YXIgYXhpb3NLZXlzID0gdmFsdWVGcm9tQ29uZmlnMktleXNcbiAgICAuY29uY2F0KG1lcmdlRGVlcFByb3BlcnRpZXNLZXlzKVxuICAgIC5jb25jYXQoZGVmYXVsdFRvQ29uZmlnMktleXMpXG4gICAgLmNvbmNhdChkaXJlY3RNZXJnZUtleXMpO1xuXG4gIHZhciBvdGhlcktleXMgPSBPYmplY3RcbiAgICAua2V5cyhjb25maWcxKVxuICAgIC5jb25jYXQoT2JqZWN0LmtleXMoY29uZmlnMikpXG4gICAgLmZpbHRlcihmdW5jdGlvbiBmaWx0ZXJBeGlvc0tleXMoa2V5KSB7XG4gICAgICByZXR1cm4gYXhpb3NLZXlzLmluZGV4T2Yoa2V5KSA9PT0gLTE7XG4gICAgfSk7XG5cbiAgdXRpbHMuZm9yRWFjaChvdGhlcktleXMsIG1lcmdlRGVlcFByb3BlcnRpZXMpO1xuXG4gIHJldHVybiBjb25maWc7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY3JlYXRlRXJyb3IgPSByZXF1aXJlKCcuL2NyZWF0ZUVycm9yJyk7XG5cbi8qKlxuICogUmVzb2x2ZSBvciByZWplY3QgYSBQcm9taXNlIGJhc2VkIG9uIHJlc3BvbnNlIHN0YXR1cy5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZXNvbHZlIEEgZnVuY3Rpb24gdGhhdCByZXNvbHZlcyB0aGUgcHJvbWlzZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlamVjdCBBIGZ1bmN0aW9uIHRoYXQgcmVqZWN0cyB0aGUgcHJvbWlzZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSByZXNwb25zZSBUaGUgcmVzcG9uc2UuXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgcmVzcG9uc2UpIHtcbiAgdmFyIHZhbGlkYXRlU3RhdHVzID0gcmVzcG9uc2UuY29uZmlnLnZhbGlkYXRlU3RhdHVzO1xuICBpZiAoIXJlc3BvbnNlLnN0YXR1cyB8fCAhdmFsaWRhdGVTdGF0dXMgfHwgdmFsaWRhdGVTdGF0dXMocmVzcG9uc2Uuc3RhdHVzKSkge1xuICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICB9IGVsc2Uge1xuICAgIHJlamVjdChjcmVhdGVFcnJvcihcbiAgICAgICdSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICcgKyByZXNwb25zZS5zdGF0dXMsXG4gICAgICByZXNwb25zZS5jb25maWcsXG4gICAgICBudWxsLFxuICAgICAgcmVzcG9uc2UucmVxdWVzdCxcbiAgICAgIHJlc3BvbnNlXG4gICAgKSk7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcbnZhciBkZWZhdWx0cyA9IHJlcXVpcmUoJy4vLi4vZGVmYXVsdHMnKTtcblxuLyoqXG4gKiBUcmFuc2Zvcm0gdGhlIGRhdGEgZm9yIGEgcmVxdWVzdCBvciBhIHJlc3BvbnNlXG4gKlxuICogQHBhcmFtIHtPYmplY3R8U3RyaW5nfSBkYXRhIFRoZSBkYXRhIHRvIGJlIHRyYW5zZm9ybWVkXG4gKiBAcGFyYW0ge0FycmF5fSBoZWFkZXJzIFRoZSBoZWFkZXJzIGZvciB0aGUgcmVxdWVzdCBvciByZXNwb25zZVxuICogQHBhcmFtIHtBcnJheXxGdW5jdGlvbn0gZm5zIEEgc2luZ2xlIGZ1bmN0aW9uIG9yIEFycmF5IG9mIGZ1bmN0aW9uc1xuICogQHJldHVybnMgeyp9IFRoZSByZXN1bHRpbmcgdHJhbnNmb3JtZWQgZGF0YVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHRyYW5zZm9ybURhdGEoZGF0YSwgaGVhZGVycywgZm5zKSB7XG4gIHZhciBjb250ZXh0ID0gdGhpcyB8fCBkZWZhdWx0cztcbiAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gIHV0aWxzLmZvckVhY2goZm5zLCBmdW5jdGlvbiB0cmFuc2Zvcm0oZm4pIHtcbiAgICBkYXRhID0gZm4uY2FsbChjb250ZXh0LCBkYXRhLCBoZWFkZXJzKTtcbiAgfSk7XG5cbiAgcmV0dXJuIGRhdGE7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgbm9ybWFsaXplSGVhZGVyTmFtZSA9IHJlcXVpcmUoJy4vaGVscGVycy9ub3JtYWxpemVIZWFkZXJOYW1lJyk7XG52YXIgZW5oYW5jZUVycm9yID0gcmVxdWlyZSgnLi9jb3JlL2VuaGFuY2VFcnJvcicpO1xuXG52YXIgREVGQVVMVF9DT05URU5UX1RZUEUgPSB7XG4gICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ1xufTtcblxuZnVuY3Rpb24gc2V0Q29udGVudFR5cGVJZlVuc2V0KGhlYWRlcnMsIHZhbHVlKSB7XG4gIGlmICghdXRpbHMuaXNVbmRlZmluZWQoaGVhZGVycykgJiYgdXRpbHMuaXNVbmRlZmluZWQoaGVhZGVyc1snQ29udGVudC1UeXBlJ10pKSB7XG4gICAgaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSB2YWx1ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXREZWZhdWx0QWRhcHRlcigpIHtcbiAgdmFyIGFkYXB0ZXI7XG4gIGlmICh0eXBlb2YgWE1MSHR0cFJlcXVlc3QgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgLy8gRm9yIGJyb3dzZXJzIHVzZSBYSFIgYWRhcHRlclxuICAgIGFkYXB0ZXIgPSByZXF1aXJlKCcuL2FkYXB0ZXJzL3hocicpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocHJvY2VzcykgPT09ICdbb2JqZWN0IHByb2Nlc3NdJykge1xuICAgIC8vIEZvciBub2RlIHVzZSBIVFRQIGFkYXB0ZXJcbiAgICBhZGFwdGVyID0gcmVxdWlyZSgnLi9hZGFwdGVycy9odHRwJyk7XG4gIH1cbiAgcmV0dXJuIGFkYXB0ZXI7XG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeVNhZmVseShyYXdWYWx1ZSwgcGFyc2VyLCBlbmNvZGVyKSB7XG4gIGlmICh1dGlscy5pc1N0cmluZyhyYXdWYWx1ZSkpIHtcbiAgICB0cnkge1xuICAgICAgKHBhcnNlciB8fCBKU09OLnBhcnNlKShyYXdWYWx1ZSk7XG4gICAgICByZXR1cm4gdXRpbHMudHJpbShyYXdWYWx1ZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGUubmFtZSAhPT0gJ1N5bnRheEVycm9yJykge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAoZW5jb2RlciB8fCBKU09OLnN0cmluZ2lmeSkocmF3VmFsdWUpO1xufVxuXG52YXIgZGVmYXVsdHMgPSB7XG5cbiAgdHJhbnNpdGlvbmFsOiB7XG4gICAgc2lsZW50SlNPTlBhcnNpbmc6IHRydWUsXG4gICAgZm9yY2VkSlNPTlBhcnNpbmc6IHRydWUsXG4gICAgY2xhcmlmeVRpbWVvdXRFcnJvcjogZmFsc2VcbiAgfSxcblxuICBhZGFwdGVyOiBnZXREZWZhdWx0QWRhcHRlcigpLFxuXG4gIHRyYW5zZm9ybVJlcXVlc3Q6IFtmdW5jdGlvbiB0cmFuc2Zvcm1SZXF1ZXN0KGRhdGEsIGhlYWRlcnMpIHtcbiAgICBub3JtYWxpemVIZWFkZXJOYW1lKGhlYWRlcnMsICdBY2NlcHQnKTtcbiAgICBub3JtYWxpemVIZWFkZXJOYW1lKGhlYWRlcnMsICdDb250ZW50LVR5cGUnKTtcblxuICAgIGlmICh1dGlscy5pc0Zvcm1EYXRhKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0FycmF5QnVmZmVyKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0J1ZmZlcihkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNTdHJlYW0oZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzRmlsZShkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNCbG9iKGRhdGEpXG4gICAgKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgaWYgKHV0aWxzLmlzQXJyYXlCdWZmZXJWaWV3KGRhdGEpKSB7XG4gICAgICByZXR1cm4gZGF0YS5idWZmZXI7XG4gICAgfVxuICAgIGlmICh1dGlscy5pc1VSTFNlYXJjaFBhcmFtcyhkYXRhKSkge1xuICAgICAgc2V0Q29udGVudFR5cGVJZlVuc2V0KGhlYWRlcnMsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCcpO1xuICAgICAgcmV0dXJuIGRhdGEudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgaWYgKHV0aWxzLmlzT2JqZWN0KGRhdGEpIHx8IChoZWFkZXJzICYmIGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID09PSAnYXBwbGljYXRpb24vanNvbicpKSB7XG4gICAgICBzZXRDb250ZW50VHlwZUlmVW5zZXQoaGVhZGVycywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcbiAgICAgIHJldHVybiBzdHJpbmdpZnlTYWZlbHkoZGF0YSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XSxcblxuICB0cmFuc2Zvcm1SZXNwb25zZTogW2Z1bmN0aW9uIHRyYW5zZm9ybVJlc3BvbnNlKGRhdGEpIHtcbiAgICB2YXIgdHJhbnNpdGlvbmFsID0gdGhpcy50cmFuc2l0aW9uYWw7XG4gICAgdmFyIHNpbGVudEpTT05QYXJzaW5nID0gdHJhbnNpdGlvbmFsICYmIHRyYW5zaXRpb25hbC5zaWxlbnRKU09OUGFyc2luZztcbiAgICB2YXIgZm9yY2VkSlNPTlBhcnNpbmcgPSB0cmFuc2l0aW9uYWwgJiYgdHJhbnNpdGlvbmFsLmZvcmNlZEpTT05QYXJzaW5nO1xuICAgIHZhciBzdHJpY3RKU09OUGFyc2luZyA9ICFzaWxlbnRKU09OUGFyc2luZyAmJiB0aGlzLnJlc3BvbnNlVHlwZSA9PT0gJ2pzb24nO1xuXG4gICAgaWYgKHN0cmljdEpTT05QYXJzaW5nIHx8IChmb3JjZWRKU09OUGFyc2luZyAmJiB1dGlscy5pc1N0cmluZyhkYXRhKSAmJiBkYXRhLmxlbmd0aCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoc3RyaWN0SlNPTlBhcnNpbmcpIHtcbiAgICAgICAgICBpZiAoZS5uYW1lID09PSAnU3ludGF4RXJyb3InKSB7XG4gICAgICAgICAgICB0aHJvdyBlbmhhbmNlRXJyb3IoZSwgdGhpcywgJ0VfSlNPTl9QQVJTRScpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1dLFxuXG4gIC8qKlxuICAgKiBBIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIHRvIGFib3J0IGEgcmVxdWVzdC4gSWYgc2V0IHRvIDAgKGRlZmF1bHQpIGFcbiAgICogdGltZW91dCBpcyBub3QgY3JlYXRlZC5cbiAgICovXG4gIHRpbWVvdXQ6IDAsXG5cbiAgeHNyZkNvb2tpZU5hbWU6ICdYU1JGLVRPS0VOJyxcbiAgeHNyZkhlYWRlck5hbWU6ICdYLVhTUkYtVE9LRU4nLFxuXG4gIG1heENvbnRlbnRMZW5ndGg6IC0xLFxuICBtYXhCb2R5TGVuZ3RoOiAtMSxcblxuICB2YWxpZGF0ZVN0YXR1czogZnVuY3Rpb24gdmFsaWRhdGVTdGF0dXMoc3RhdHVzKSB7XG4gICAgcmV0dXJuIHN0YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwO1xuICB9XG59O1xuXG5kZWZhdWx0cy5oZWFkZXJzID0ge1xuICBjb21tb246IHtcbiAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKidcbiAgfVxufTtcblxudXRpbHMuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kTm9EYXRhKG1ldGhvZCkge1xuICBkZWZhdWx0cy5oZWFkZXJzW21ldGhvZF0gPSB7fTtcbn0pO1xuXG51dGlscy5mb3JFYWNoKFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZFdpdGhEYXRhKG1ldGhvZCkge1xuICBkZWZhdWx0cy5oZWFkZXJzW21ldGhvZF0gPSB1dGlscy5tZXJnZShERUZBVUxUX0NPTlRFTlRfVFlQRSk7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBkZWZhdWx0cztcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBiaW5kKGZuLCB0aGlzQXJnKSB7XG4gIHJldHVybiBmdW5jdGlvbiB3cmFwKCkge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoaXNBcmcsIGFyZ3MpO1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG5mdW5jdGlvbiBlbmNvZGUodmFsKSB7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQodmFsKS5cbiAgICByZXBsYWNlKC8lM0EvZ2ksICc6JykuXG4gICAgcmVwbGFjZSgvJTI0L2csICckJykuXG4gICAgcmVwbGFjZSgvJTJDL2dpLCAnLCcpLlxuICAgIHJlcGxhY2UoLyUyMC9nLCAnKycpLlxuICAgIHJlcGxhY2UoLyU1Qi9naSwgJ1snKS5cbiAgICByZXBsYWNlKC8lNUQvZ2ksICddJyk7XG59XG5cbi8qKlxuICogQnVpbGQgYSBVUkwgYnkgYXBwZW5kaW5nIHBhcmFtcyB0byB0aGUgZW5kXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgYmFzZSBvZiB0aGUgdXJsIChlLmcuLCBodHRwOi8vd3d3Lmdvb2dsZS5jb20pXG4gKiBAcGFyYW0ge29iamVjdH0gW3BhcmFtc10gVGhlIHBhcmFtcyB0byBiZSBhcHBlbmRlZFxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGZvcm1hdHRlZCB1cmxcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBidWlsZFVSTCh1cmwsIHBhcmFtcywgcGFyYW1zU2VyaWFsaXplcikge1xuICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgaWYgKCFwYXJhbXMpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG5cbiAgdmFyIHNlcmlhbGl6ZWRQYXJhbXM7XG4gIGlmIChwYXJhbXNTZXJpYWxpemVyKSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHBhcmFtc1NlcmlhbGl6ZXIocGFyYW1zKTtcbiAgfSBlbHNlIGlmICh1dGlscy5pc1VSTFNlYXJjaFBhcmFtcyhwYXJhbXMpKSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHBhcmFtcy50b1N0cmluZygpO1xuICB9IGVsc2Uge1xuICAgIHZhciBwYXJ0cyA9IFtdO1xuXG4gICAgdXRpbHMuZm9yRWFjaChwYXJhbXMsIGZ1bmN0aW9uIHNlcmlhbGl6ZSh2YWwsIGtleSkge1xuICAgICAgaWYgKHZhbCA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh1dGlscy5pc0FycmF5KHZhbCkpIHtcbiAgICAgICAga2V5ID0ga2V5ICsgJ1tdJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbCA9IFt2YWxdO1xuICAgICAgfVxuXG4gICAgICB1dGlscy5mb3JFYWNoKHZhbCwgZnVuY3Rpb24gcGFyc2VWYWx1ZSh2KSB7XG4gICAgICAgIGlmICh1dGlscy5pc0RhdGUodikpIHtcbiAgICAgICAgICB2ID0gdi50b0lTT1N0cmluZygpO1xuICAgICAgICB9IGVsc2UgaWYgKHV0aWxzLmlzT2JqZWN0KHYpKSB7XG4gICAgICAgICAgdiA9IEpTT04uc3RyaW5naWZ5KHYpO1xuICAgICAgICB9XG4gICAgICAgIHBhcnRzLnB1c2goZW5jb2RlKGtleSkgKyAnPScgKyBlbmNvZGUodikpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBzZXJpYWxpemVkUGFyYW1zID0gcGFydHMuam9pbignJicpO1xuICB9XG5cbiAgaWYgKHNlcmlhbGl6ZWRQYXJhbXMpIHtcbiAgICB2YXIgaGFzaG1hcmtJbmRleCA9IHVybC5pbmRleE9mKCcjJyk7XG4gICAgaWYgKGhhc2htYXJrSW5kZXggIT09IC0xKSB7XG4gICAgICB1cmwgPSB1cmwuc2xpY2UoMCwgaGFzaG1hcmtJbmRleCk7XG4gICAgfVxuXG4gICAgdXJsICs9ICh1cmwuaW5kZXhPZignPycpID09PSAtMSA/ICc/JyA6ICcmJykgKyBzZXJpYWxpemVkUGFyYW1zO1xuICB9XG5cbiAgcmV0dXJuIHVybDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBVUkwgYnkgY29tYmluaW5nIHRoZSBzcGVjaWZpZWQgVVJMc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVVJMIFRoZSBiYXNlIFVSTFxuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0aXZlVVJMIFRoZSByZWxhdGl2ZSBVUkxcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21iaW5lZCBVUkxcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjb21iaW5lVVJMcyhiYXNlVVJMLCByZWxhdGl2ZVVSTCkge1xuICByZXR1cm4gcmVsYXRpdmVVUkxcbiAgICA/IGJhc2VVUkwucmVwbGFjZSgvXFwvKyQvLCAnJykgKyAnLycgKyByZWxhdGl2ZVVSTC5yZXBsYWNlKC9eXFwvKy8sICcnKVxuICAgIDogYmFzZVVSTDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAoXG4gIHV0aWxzLmlzU3RhbmRhcmRCcm93c2VyRW52KCkgP1xuXG4gIC8vIFN0YW5kYXJkIGJyb3dzZXIgZW52cyBzdXBwb3J0IGRvY3VtZW50LmNvb2tpZVxuICAgIChmdW5jdGlvbiBzdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3cml0ZTogZnVuY3Rpb24gd3JpdGUobmFtZSwgdmFsdWUsIGV4cGlyZXMsIHBhdGgsIGRvbWFpbiwgc2VjdXJlKSB7XG4gICAgICAgICAgdmFyIGNvb2tpZSA9IFtdO1xuICAgICAgICAgIGNvb2tpZS5wdXNoKG5hbWUgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpKTtcblxuICAgICAgICAgIGlmICh1dGlscy5pc051bWJlcihleHBpcmVzKSkge1xuICAgICAgICAgICAgY29va2llLnB1c2goJ2V4cGlyZXM9JyArIG5ldyBEYXRlKGV4cGlyZXMpLnRvR01UU3RyaW5nKCkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh1dGlscy5pc1N0cmluZyhwYXRoKSkge1xuICAgICAgICAgICAgY29va2llLnB1c2goJ3BhdGg9JyArIHBhdGgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh1dGlscy5pc1N0cmluZyhkb21haW4pKSB7XG4gICAgICAgICAgICBjb29raWUucHVzaCgnZG9tYWluPScgKyBkb21haW4pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzZWN1cmUgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGNvb2tpZS5wdXNoKCdzZWN1cmUnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkb2N1bWVudC5jb29raWUgPSBjb29raWUuam9pbignOyAnKTtcbiAgICAgICAgfSxcblxuICAgICAgICByZWFkOiBmdW5jdGlvbiByZWFkKG5hbWUpIHtcbiAgICAgICAgICB2YXIgbWF0Y2ggPSBkb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgnKF58O1xcXFxzKikoJyArIG5hbWUgKyAnKT0oW147XSopJykpO1xuICAgICAgICAgIHJldHVybiAobWF0Y2ggPyBkZWNvZGVVUklDb21wb25lbnQobWF0Y2hbM10pIDogbnVsbCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUobmFtZSkge1xuICAgICAgICAgIHRoaXMud3JpdGUobmFtZSwgJycsIERhdGUubm93KCkgLSA4NjQwMDAwMCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSkoKSA6XG5cbiAgLy8gTm9uIHN0YW5kYXJkIGJyb3dzZXIgZW52ICh3ZWIgd29ya2VycywgcmVhY3QtbmF0aXZlKSBsYWNrIG5lZWRlZCBzdXBwb3J0LlxuICAgIChmdW5jdGlvbiBub25TdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3cml0ZTogZnVuY3Rpb24gd3JpdGUoKSB7fSxcbiAgICAgICAgcmVhZDogZnVuY3Rpb24gcmVhZCgpIHsgcmV0dXJuIG51bGw7IH0sXG4gICAgICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKCkge31cbiAgICAgIH07XG4gICAgfSkoKVxuKTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGVcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBVUkwgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzQWJzb2x1dGVVUkwodXJsKSB7XG4gIC8vIEEgVVJMIGlzIGNvbnNpZGVyZWQgYWJzb2x1dGUgaWYgaXQgYmVnaW5zIHdpdGggXCI8c2NoZW1lPjovL1wiIG9yIFwiLy9cIiAocHJvdG9jb2wtcmVsYXRpdmUgVVJMKS5cbiAgLy8gUkZDIDM5ODYgZGVmaW5lcyBzY2hlbWUgbmFtZSBhcyBhIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgYmVnaW5uaW5nIHdpdGggYSBsZXR0ZXIgYW5kIGZvbGxvd2VkXG4gIC8vIGJ5IGFueSBjb21iaW5hdGlvbiBvZiBsZXR0ZXJzLCBkaWdpdHMsIHBsdXMsIHBlcmlvZCwgb3IgaHlwaGVuLlxuICByZXR1cm4gL14oW2Etel1bYS16XFxkXFwrXFwtXFwuXSo6KT9cXC9cXC8vaS50ZXN0KHVybCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgcGF5bG9hZCBpcyBhbiBlcnJvciB0aHJvd24gYnkgQXhpb3NcbiAqXG4gKiBAcGFyYW0geyp9IHBheWxvYWQgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvcywgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNBeGlvc0Vycm9yKHBheWxvYWQpIHtcbiAgcmV0dXJuICh0eXBlb2YgcGF5bG9hZCA9PT0gJ29iamVjdCcpICYmIChwYXlsb2FkLmlzQXhpb3NFcnJvciA9PT0gdHJ1ZSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gKFxuICB1dGlscy5pc1N0YW5kYXJkQnJvd3NlckVudigpID9cblxuICAvLyBTdGFuZGFyZCBicm93c2VyIGVudnMgaGF2ZSBmdWxsIHN1cHBvcnQgb2YgdGhlIEFQSXMgbmVlZGVkIHRvIHRlc3RcbiAgLy8gd2hldGhlciB0aGUgcmVxdWVzdCBVUkwgaXMgb2YgdGhlIHNhbWUgb3JpZ2luIGFzIGN1cnJlbnQgbG9jYXRpb24uXG4gICAgKGZ1bmN0aW9uIHN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICAgIHZhciBtc2llID0gLyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbiAgICAgIHZhciB1cmxQYXJzaW5nTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgIHZhciBvcmlnaW5VUkw7XG5cbiAgICAgIC8qKlxuICAgICogUGFyc2UgYSBVUkwgdG8gZGlzY292ZXIgaXQncyBjb21wb25lbnRzXG4gICAgKlxuICAgICogQHBhcmFtIHtTdHJpbmd9IHVybCBUaGUgVVJMIHRvIGJlIHBhcnNlZFxuICAgICogQHJldHVybnMge09iamVjdH1cbiAgICAqL1xuICAgICAgZnVuY3Rpb24gcmVzb2x2ZVVSTCh1cmwpIHtcbiAgICAgICAgdmFyIGhyZWYgPSB1cmw7XG5cbiAgICAgICAgaWYgKG1zaWUpIHtcbiAgICAgICAgLy8gSUUgbmVlZHMgYXR0cmlidXRlIHNldCB0d2ljZSB0byBub3JtYWxpemUgcHJvcGVydGllc1xuICAgICAgICAgIHVybFBhcnNpbmdOb2RlLnNldEF0dHJpYnV0ZSgnaHJlZicsIGhyZWYpO1xuICAgICAgICAgIGhyZWYgPSB1cmxQYXJzaW5nTm9kZS5ocmVmO1xuICAgICAgICB9XG5cbiAgICAgICAgdXJsUGFyc2luZ05vZGUuc2V0QXR0cmlidXRlKCdocmVmJywgaHJlZik7XG5cbiAgICAgICAgLy8gdXJsUGFyc2luZ05vZGUgcHJvdmlkZXMgdGhlIFVybFV0aWxzIGludGVyZmFjZSAtIGh0dHA6Ly91cmwuc3BlYy53aGF0d2cub3JnLyN1cmx1dGlsc1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGhyZWY6IHVybFBhcnNpbmdOb2RlLmhyZWYsXG4gICAgICAgICAgcHJvdG9jb2w6IHVybFBhcnNpbmdOb2RlLnByb3RvY29sID8gdXJsUGFyc2luZ05vZGUucHJvdG9jb2wucmVwbGFjZSgvOiQvLCAnJykgOiAnJyxcbiAgICAgICAgICBob3N0OiB1cmxQYXJzaW5nTm9kZS5ob3N0LFxuICAgICAgICAgIHNlYXJjaDogdXJsUGFyc2luZ05vZGUuc2VhcmNoID8gdXJsUGFyc2luZ05vZGUuc2VhcmNoLnJlcGxhY2UoL15cXD8vLCAnJykgOiAnJyxcbiAgICAgICAgICBoYXNoOiB1cmxQYXJzaW5nTm9kZS5oYXNoID8gdXJsUGFyc2luZ05vZGUuaGFzaC5yZXBsYWNlKC9eIy8sICcnKSA6ICcnLFxuICAgICAgICAgIGhvc3RuYW1lOiB1cmxQYXJzaW5nTm9kZS5ob3N0bmFtZSxcbiAgICAgICAgICBwb3J0OiB1cmxQYXJzaW5nTm9kZS5wb3J0LFxuICAgICAgICAgIHBhdGhuYW1lOiAodXJsUGFyc2luZ05vZGUucGF0aG5hbWUuY2hhckF0KDApID09PSAnLycpID9cbiAgICAgICAgICAgIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lIDpcbiAgICAgICAgICAgICcvJyArIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIG9yaWdpblVSTCA9IHJlc29sdmVVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuXG4gICAgICAvKipcbiAgICAqIERldGVybWluZSBpZiBhIFVSTCBzaGFyZXMgdGhlIHNhbWUgb3JpZ2luIGFzIHRoZSBjdXJyZW50IGxvY2F0aW9uXG4gICAgKlxuICAgICogQHBhcmFtIHtTdHJpbmd9IHJlcXVlc3RVUkwgVGhlIFVSTCB0byB0ZXN0XG4gICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiBVUkwgc2hhcmVzIHRoZSBzYW1lIG9yaWdpbiwgb3RoZXJ3aXNlIGZhbHNlXG4gICAgKi9cbiAgICAgIHJldHVybiBmdW5jdGlvbiBpc1VSTFNhbWVPcmlnaW4ocmVxdWVzdFVSTCkge1xuICAgICAgICB2YXIgcGFyc2VkID0gKHV0aWxzLmlzU3RyaW5nKHJlcXVlc3RVUkwpKSA/IHJlc29sdmVVUkwocmVxdWVzdFVSTCkgOiByZXF1ZXN0VVJMO1xuICAgICAgICByZXR1cm4gKHBhcnNlZC5wcm90b2NvbCA9PT0gb3JpZ2luVVJMLnByb3RvY29sICYmXG4gICAgICAgICAgICBwYXJzZWQuaG9zdCA9PT0gb3JpZ2luVVJMLmhvc3QpO1xuICAgICAgfTtcbiAgICB9KSgpIDpcblxuICAvLyBOb24gc3RhbmRhcmQgYnJvd3NlciBlbnZzICh3ZWIgd29ya2VycywgcmVhY3QtbmF0aXZlKSBsYWNrIG5lZWRlZCBzdXBwb3J0LlxuICAgIChmdW5jdGlvbiBub25TdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gaXNVUkxTYW1lT3JpZ2luKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH07XG4gICAgfSkoKVxuKTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBub3JtYWxpemVIZWFkZXJOYW1lKGhlYWRlcnMsIG5vcm1hbGl6ZWROYW1lKSB7XG4gIHV0aWxzLmZvckVhY2goaGVhZGVycywgZnVuY3Rpb24gcHJvY2Vzc0hlYWRlcih2YWx1ZSwgbmFtZSkge1xuICAgIGlmIChuYW1lICE9PSBub3JtYWxpemVkTmFtZSAmJiBuYW1lLnRvVXBwZXJDYXNlKCkgPT09IG5vcm1hbGl6ZWROYW1lLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgIGhlYWRlcnNbbm9ybWFsaXplZE5hbWVdID0gdmFsdWU7XG4gICAgICBkZWxldGUgaGVhZGVyc1tuYW1lXTtcbiAgICB9XG4gIH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG4vLyBIZWFkZXJzIHdob3NlIGR1cGxpY2F0ZXMgYXJlIGlnbm9yZWQgYnkgbm9kZVxuLy8gYy5mLiBodHRwczovL25vZGVqcy5vcmcvYXBpL2h0dHAuaHRtbCNodHRwX21lc3NhZ2VfaGVhZGVyc1xudmFyIGlnbm9yZUR1cGxpY2F0ZU9mID0gW1xuICAnYWdlJywgJ2F1dGhvcml6YXRpb24nLCAnY29udGVudC1sZW5ndGgnLCAnY29udGVudC10eXBlJywgJ2V0YWcnLFxuICAnZXhwaXJlcycsICdmcm9tJywgJ2hvc3QnLCAnaWYtbW9kaWZpZWQtc2luY2UnLCAnaWYtdW5tb2RpZmllZC1zaW5jZScsXG4gICdsYXN0LW1vZGlmaWVkJywgJ2xvY2F0aW9uJywgJ21heC1mb3J3YXJkcycsICdwcm94eS1hdXRob3JpemF0aW9uJyxcbiAgJ3JlZmVyZXInLCAncmV0cnktYWZ0ZXInLCAndXNlci1hZ2VudCdcbl07XG5cbi8qKlxuICogUGFyc2UgaGVhZGVycyBpbnRvIGFuIG9iamVjdFxuICpcbiAqIGBgYFxuICogRGF0ZTogV2VkLCAyNyBBdWcgMjAxNCAwODo1ODo0OSBHTVRcbiAqIENvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvblxuICogQ29ubmVjdGlvbjoga2VlcC1hbGl2ZVxuICogVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWRcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBoZWFkZXJzIEhlYWRlcnMgbmVlZGluZyB0byBiZSBwYXJzZWRcbiAqIEByZXR1cm5zIHtPYmplY3R9IEhlYWRlcnMgcGFyc2VkIGludG8gYW4gb2JqZWN0XG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcGFyc2VIZWFkZXJzKGhlYWRlcnMpIHtcbiAgdmFyIHBhcnNlZCA9IHt9O1xuICB2YXIga2V5O1xuICB2YXIgdmFsO1xuICB2YXIgaTtcblxuICBpZiAoIWhlYWRlcnMpIHsgcmV0dXJuIHBhcnNlZDsgfVxuXG4gIHV0aWxzLmZvckVhY2goaGVhZGVycy5zcGxpdCgnXFxuJyksIGZ1bmN0aW9uIHBhcnNlcihsaW5lKSB7XG4gICAgaSA9IGxpbmUuaW5kZXhPZignOicpO1xuICAgIGtleSA9IHV0aWxzLnRyaW0obGluZS5zdWJzdHIoMCwgaSkpLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFsID0gdXRpbHMudHJpbShsaW5lLnN1YnN0cihpICsgMSkpO1xuXG4gICAgaWYgKGtleSkge1xuICAgICAgaWYgKHBhcnNlZFtrZXldICYmIGlnbm9yZUR1cGxpY2F0ZU9mLmluZGV4T2Yoa2V5KSA+PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChrZXkgPT09ICdzZXQtY29va2llJykge1xuICAgICAgICBwYXJzZWRba2V5XSA9IChwYXJzZWRba2V5XSA/IHBhcnNlZFtrZXldIDogW10pLmNvbmNhdChbdmFsXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJzZWRba2V5XSA9IHBhcnNlZFtrZXldID8gcGFyc2VkW2tleV0gKyAnLCAnICsgdmFsIDogdmFsO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogU3ludGFjdGljIHN1Z2FyIGZvciBpbnZva2luZyBhIGZ1bmN0aW9uIGFuZCBleHBhbmRpbmcgYW4gYXJyYXkgZm9yIGFyZ3VtZW50cy5cbiAqXG4gKiBDb21tb24gdXNlIGNhc2Ugd291bGQgYmUgdG8gdXNlIGBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHlgLlxuICpcbiAqICBgYGBqc1xuICogIGZ1bmN0aW9uIGYoeCwgeSwgeikge31cbiAqICB2YXIgYXJncyA9IFsxLCAyLCAzXTtcbiAqICBmLmFwcGx5KG51bGwsIGFyZ3MpO1xuICogIGBgYFxuICpcbiAqIFdpdGggYHNwcmVhZGAgdGhpcyBleGFtcGxlIGNhbiBiZSByZS13cml0dGVuLlxuICpcbiAqICBgYGBqc1xuICogIHNwcmVhZChmdW5jdGlvbih4LCB5LCB6KSB7fSkoWzEsIDIsIDNdKTtcbiAqICBgYGBcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHNwcmVhZChjYWxsYmFjaykge1xuICByZXR1cm4gZnVuY3Rpb24gd3JhcChhcnIpIHtcbiAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkobnVsbCwgYXJyKTtcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBwa2cgPSByZXF1aXJlKCcuLy4uLy4uL3BhY2thZ2UuanNvbicpO1xuXG52YXIgdmFsaWRhdG9ycyA9IHt9O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuWydvYmplY3QnLCAnYm9vbGVhbicsICdudW1iZXInLCAnZnVuY3Rpb24nLCAnc3RyaW5nJywgJ3N5bWJvbCddLmZvckVhY2goZnVuY3Rpb24odHlwZSwgaSkge1xuICB2YWxpZGF0b3JzW3R5cGVdID0gZnVuY3Rpb24gdmFsaWRhdG9yKHRoaW5nKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGluZyA9PT0gdHlwZSB8fCAnYScgKyAoaSA8IDEgPyAnbiAnIDogJyAnKSArIHR5cGU7XG4gIH07XG59KTtcblxudmFyIGRlcHJlY2F0ZWRXYXJuaW5ncyA9IHt9O1xudmFyIGN1cnJlbnRWZXJBcnIgPSBwa2cudmVyc2lvbi5zcGxpdCgnLicpO1xuXG4vKipcbiAqIENvbXBhcmUgcGFja2FnZSB2ZXJzaW9uc1xuICogQHBhcmFtIHtzdHJpbmd9IHZlcnNpb25cbiAqIEBwYXJhbSB7c3RyaW5nP30gdGhhblZlcnNpb25cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc09sZGVyVmVyc2lvbih2ZXJzaW9uLCB0aGFuVmVyc2lvbikge1xuICB2YXIgcGtnVmVyc2lvbkFyciA9IHRoYW5WZXJzaW9uID8gdGhhblZlcnNpb24uc3BsaXQoJy4nKSA6IGN1cnJlbnRWZXJBcnI7XG4gIHZhciBkZXN0VmVyID0gdmVyc2lvbi5zcGxpdCgnLicpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IDM7IGkrKykge1xuICAgIGlmIChwa2dWZXJzaW9uQXJyW2ldID4gZGVzdFZlcltpXSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmIChwa2dWZXJzaW9uQXJyW2ldIDwgZGVzdFZlcltpXSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogVHJhbnNpdGlvbmFsIG9wdGlvbiB2YWxpZGF0b3JcbiAqIEBwYXJhbSB7ZnVuY3Rpb258Ym9vbGVhbj99IHZhbGlkYXRvclxuICogQHBhcmFtIHtzdHJpbmc/fSB2ZXJzaW9uXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxuICogQHJldHVybnMge2Z1bmN0aW9ufVxuICovXG52YWxpZGF0b3JzLnRyYW5zaXRpb25hbCA9IGZ1bmN0aW9uIHRyYW5zaXRpb25hbCh2YWxpZGF0b3IsIHZlcnNpb24sIG1lc3NhZ2UpIHtcbiAgdmFyIGlzRGVwcmVjYXRlZCA9IHZlcnNpb24gJiYgaXNPbGRlclZlcnNpb24odmVyc2lvbik7XG5cbiAgZnVuY3Rpb24gZm9ybWF0TWVzc2FnZShvcHQsIGRlc2MpIHtcbiAgICByZXR1cm4gJ1tBeGlvcyB2JyArIHBrZy52ZXJzaW9uICsgJ10gVHJhbnNpdGlvbmFsIG9wdGlvbiBcXCcnICsgb3B0ICsgJ1xcJycgKyBkZXNjICsgKG1lc3NhZ2UgPyAnLiAnICsgbWVzc2FnZSA6ICcnKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSwgb3B0LCBvcHRzKSB7XG4gICAgaWYgKHZhbGlkYXRvciA9PT0gZmFsc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihmb3JtYXRNZXNzYWdlKG9wdCwgJyBoYXMgYmVlbiByZW1vdmVkIGluICcgKyB2ZXJzaW9uKSk7XG4gICAgfVxuXG4gICAgaWYgKGlzRGVwcmVjYXRlZCAmJiAhZGVwcmVjYXRlZFdhcm5pbmdzW29wdF0pIHtcbiAgICAgIGRlcHJlY2F0ZWRXYXJuaW5nc1tvcHRdID0gdHJ1ZTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGZvcm1hdE1lc3NhZ2UoXG4gICAgICAgICAgb3B0LFxuICAgICAgICAgICcgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2JyArIHZlcnNpb24gKyAnIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlJ1xuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0b3IgPyB2YWxpZGF0b3IodmFsdWUsIG9wdCwgb3B0cykgOiB0cnVlO1xuICB9O1xufTtcblxuLyoqXG4gKiBBc3NlcnQgb2JqZWN0J3MgcHJvcGVydGllcyB0eXBlXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICogQHBhcmFtIHtvYmplY3R9IHNjaGVtYVxuICogQHBhcmFtIHtib29sZWFuP30gYWxsb3dVbmtub3duXG4gKi9cblxuZnVuY3Rpb24gYXNzZXJ0T3B0aW9ucyhvcHRpb25zLCBzY2hlbWEsIGFsbG93VW5rbm93bikge1xuICBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICB9XG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMob3B0aW9ucyk7XG4gIHZhciBpID0ga2V5cy5sZW5ndGg7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgdmFyIG9wdCA9IGtleXNbaV07XG4gICAgdmFyIHZhbGlkYXRvciA9IHNjaGVtYVtvcHRdO1xuICAgIGlmICh2YWxpZGF0b3IpIHtcbiAgICAgIHZhciB2YWx1ZSA9IG9wdGlvbnNbb3B0XTtcbiAgICAgIHZhciByZXN1bHQgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbGlkYXRvcih2YWx1ZSwgb3B0LCBvcHRpb25zKTtcbiAgICAgIGlmIChyZXN1bHQgIT09IHRydWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uICcgKyBvcHQgKyAnIG11c3QgYmUgJyArIHJlc3VsdCk7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGFsbG93VW5rbm93biAhPT0gdHJ1ZSkge1xuICAgICAgdGhyb3cgRXJyb3IoJ1Vua25vd24gb3B0aW9uICcgKyBvcHQpO1xuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaXNPbGRlclZlcnNpb246IGlzT2xkZXJWZXJzaW9uLFxuICBhc3NlcnRPcHRpb25zOiBhc3NlcnRPcHRpb25zLFxuICB2YWxpZGF0b3JzOiB2YWxpZGF0b3JzXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJy4vaGVscGVycy9iaW5kJyk7XG5cbi8vIHV0aWxzIGlzIGEgbGlicmFyeSBvZiBnZW5lcmljIGhlbHBlciBmdW5jdGlvbnMgbm9uLXNwZWNpZmljIHRvIGF4aW9zXG5cbnZhciB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gQXJyYXlcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXkodmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgdW5kZWZpbmVkXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHZhbHVlIGlzIHVuZGVmaW5lZCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzVW5kZWZpbmVkKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ3VuZGVmaW5lZCc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCdWZmZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQnVmZmVyKHZhbCkge1xuICByZXR1cm4gdmFsICE9PSBudWxsICYmICFpc1VuZGVmaW5lZCh2YWwpICYmIHZhbC5jb25zdHJ1Y3RvciAhPT0gbnVsbCAmJiAhaXNVbmRlZmluZWQodmFsLmNvbnN0cnVjdG9yKVxuICAgICYmIHR5cGVvZiB2YWwuY29uc3RydWN0b3IuaXNCdWZmZXIgPT09ICdmdW5jdGlvbicgJiYgdmFsLmNvbnN0cnVjdG9yLmlzQnVmZmVyKHZhbCk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gQXJyYXlCdWZmZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheUJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlCdWZmZXIodmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IEFycmF5QnVmZmVyXSc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGb3JtRGF0YVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEZvcm1EYXRhLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGb3JtRGF0YSh2YWwpIHtcbiAgcmV0dXJuICh0eXBlb2YgRm9ybURhdGEgIT09ICd1bmRlZmluZWQnKSAmJiAodmFsIGluc3RhbmNlb2YgRm9ybURhdGEpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgdmlldyBvbiBhbiBBcnJheUJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgdmlldyBvbiBhbiBBcnJheUJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlCdWZmZXJWaWV3KHZhbCkge1xuICB2YXIgcmVzdWx0O1xuICBpZiAoKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcpICYmIChBcnJheUJ1ZmZlci5pc1ZpZXcpKSB7XG4gICAgcmVzdWx0ID0gQXJyYXlCdWZmZXIuaXNWaWV3KHZhbCk7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gKHZhbCkgJiYgKHZhbC5idWZmZXIpICYmICh2YWwuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJpbmdcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFN0cmluZywgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3RyaW5nKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ3N0cmluZyc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBOdW1iZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIE51bWJlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzTnVtYmVyKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ251bWJlcic7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gT2JqZWN0XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gT2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsKSB7XG4gIHJldHVybiB2YWwgIT09IG51bGwgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBwbGFpbiBPYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgcGxhaW4gT2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWwpIHtcbiAgaWYgKHRvU3RyaW5nLmNhbGwodmFsKSAhPT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgcHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbCk7XG4gIHJldHVybiBwcm90b3R5cGUgPT09IG51bGwgfHwgcHJvdG90eXBlID09PSBPYmplY3QucHJvdG90eXBlO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRGF0ZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRGF0ZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRGF0ZSh2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgRGF0ZV0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRmlsZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRmlsZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRmlsZSh2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgRmlsZV0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQmxvYlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQmxvYiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQmxvYih2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgQmxvYl0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZ1bmN0aW9uLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmVhbVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyZWFtLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTdHJlYW0odmFsKSB7XG4gIHJldHVybiBpc09iamVjdCh2YWwpICYmIGlzRnVuY3Rpb24odmFsLnBpcGUpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzVVJMU2VhcmNoUGFyYW1zKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIFVSTFNlYXJjaFBhcmFtcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsIGluc3RhbmNlb2YgVVJMU2VhcmNoUGFyYW1zO1xufVxuXG4vKipcbiAqIFRyaW0gZXhjZXNzIHdoaXRlc3BhY2Ugb2ZmIHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgVGhlIFN0cmluZyB0byB0cmltXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgU3RyaW5nIGZyZWVkIG9mIGV4Y2VzcyB3aGl0ZXNwYWNlXG4gKi9cbmZ1bmN0aW9uIHRyaW0oc3RyKSB7XG4gIHJldHVybiBzdHIudHJpbSA/IHN0ci50cmltKCkgOiBzdHIucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgJycpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiB3ZSdyZSBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciBlbnZpcm9ubWVudFxuICpcbiAqIFRoaXMgYWxsb3dzIGF4aW9zIHRvIHJ1biBpbiBhIHdlYiB3b3JrZXIsIGFuZCByZWFjdC1uYXRpdmUuXG4gKiBCb3RoIGVudmlyb25tZW50cyBzdXBwb3J0IFhNTEh0dHBSZXF1ZXN0LCBidXQgbm90IGZ1bGx5IHN0YW5kYXJkIGdsb2JhbHMuXG4gKlxuICogd2ViIHdvcmtlcnM6XG4gKiAgdHlwZW9mIHdpbmRvdyAtPiB1bmRlZmluZWRcbiAqICB0eXBlb2YgZG9jdW1lbnQgLT4gdW5kZWZpbmVkXG4gKlxuICogcmVhY3QtbmF0aXZlOlxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdSZWFjdE5hdGl2ZSdcbiAqIG5hdGl2ZXNjcmlwdFxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdOYXRpdmVTY3JpcHQnIG9yICdOUydcbiAqL1xuZnVuY3Rpb24gaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gIGlmICh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiAobmF2aWdhdG9yLnByb2R1Y3QgPT09ICdSZWFjdE5hdGl2ZScgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0b3IucHJvZHVjdCA9PT0gJ05hdGl2ZVNjcmlwdCcgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0b3IucHJvZHVjdCA9PT0gJ05TJykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIChcbiAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCdcbiAgKTtcbn1cblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgYW4gQXJyYXkgb3IgYW4gT2JqZWN0IGludm9raW5nIGEgZnVuY3Rpb24gZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiBgb2JqYCBpcyBhbiBBcnJheSBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGluZGV4LCBhbmQgY29tcGxldGUgYXJyYXkgZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiAnb2JqJyBpcyBhbiBPYmplY3QgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgcGFzc2luZ1xuICogdGhlIHZhbHVlLCBrZXksIGFuZCBjb21wbGV0ZSBvYmplY3QgZm9yIGVhY2ggcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IG9iaiBUaGUgb2JqZWN0IHRvIGl0ZXJhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBjYWxsYmFjayB0byBpbnZva2UgZm9yIGVhY2ggaXRlbVxuICovXG5mdW5jdGlvbiBmb3JFYWNoKG9iaiwgZm4pIHtcbiAgLy8gRG9uJ3QgYm90aGVyIGlmIG5vIHZhbHVlIHByb3ZpZGVkXG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBGb3JjZSBhbiBhcnJheSBpZiBub3QgYWxyZWFkeSBzb21ldGhpbmcgaXRlcmFibGVcbiAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gICAgb2JqID0gW29ial07XG4gIH1cblxuICBpZiAoaXNBcnJheShvYmopKSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIGFycmF5IHZhbHVlc1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gb2JqLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgZm4uY2FsbChudWxsLCBvYmpbaV0sIGksIG9iaik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIEl0ZXJhdGUgb3ZlciBvYmplY3Qga2V5c1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSB7XG4gICAgICAgIGZuLmNhbGwobnVsbCwgb2JqW2tleV0sIGtleSwgb2JqKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBBY2NlcHRzIHZhcmFyZ3MgZXhwZWN0aW5nIGVhY2ggYXJndW1lbnQgdG8gYmUgYW4gb2JqZWN0LCB0aGVuXG4gKiBpbW11dGFibHkgbWVyZ2VzIHRoZSBwcm9wZXJ0aWVzIG9mIGVhY2ggb2JqZWN0IGFuZCByZXR1cm5zIHJlc3VsdC5cbiAqXG4gKiBXaGVuIG11bHRpcGxlIG9iamVjdHMgY29udGFpbiB0aGUgc2FtZSBrZXkgdGhlIGxhdGVyIG9iamVjdCBpblxuICogdGhlIGFyZ3VtZW50cyBsaXN0IHdpbGwgdGFrZSBwcmVjZWRlbmNlLlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIHZhciByZXN1bHQgPSBtZXJnZSh7Zm9vOiAxMjN9LCB7Zm9vOiA0NTZ9KTtcbiAqIGNvbnNvbGUubG9nKHJlc3VsdC5mb28pOyAvLyBvdXRwdXRzIDQ1NlxuICogYGBgXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iajEgT2JqZWN0IHRvIG1lcmdlXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXN1bHQgb2YgYWxsIG1lcmdlIHByb3BlcnRpZXNcbiAqL1xuZnVuY3Rpb24gbWVyZ2UoLyogb2JqMSwgb2JqMiwgb2JqMywgLi4uICovKSB7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgZnVuY3Rpb24gYXNzaWduVmFsdWUodmFsLCBrZXkpIHtcbiAgICBpZiAoaXNQbGFpbk9iamVjdChyZXN1bHRba2V5XSkgJiYgaXNQbGFpbk9iamVjdCh2YWwpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IG1lcmdlKHJlc3VsdFtrZXldLCB2YWwpO1xuICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdCh2YWwpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IG1lcmdlKHt9LCB2YWwpO1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheSh2YWwpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IHZhbC5zbGljZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRba2V5XSA9IHZhbDtcbiAgICB9XG4gIH1cblxuICBmb3IgKHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBmb3JFYWNoKGFyZ3VtZW50c1tpXSwgYXNzaWduVmFsdWUpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRXh0ZW5kcyBvYmplY3QgYSBieSBtdXRhYmx5IGFkZGluZyB0byBpdCB0aGUgcHJvcGVydGllcyBvZiBvYmplY3QgYi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gYSBUaGUgb2JqZWN0IHRvIGJlIGV4dGVuZGVkXG4gKiBAcGFyYW0ge09iamVjdH0gYiBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tXG4gKiBAcGFyYW0ge09iamVjdH0gdGhpc0FyZyBUaGUgb2JqZWN0IHRvIGJpbmQgZnVuY3Rpb24gdG9cbiAqIEByZXR1cm4ge09iamVjdH0gVGhlIHJlc3VsdGluZyB2YWx1ZSBvZiBvYmplY3QgYVxuICovXG5mdW5jdGlvbiBleHRlbmQoYSwgYiwgdGhpc0FyZykge1xuICBmb3JFYWNoKGIsIGZ1bmN0aW9uIGFzc2lnblZhbHVlKHZhbCwga2V5KSB7XG4gICAgaWYgKHRoaXNBcmcgJiYgdHlwZW9mIHZhbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgYVtrZXldID0gYmluZCh2YWwsIHRoaXNBcmcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhW2tleV0gPSB2YWw7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGE7XG59XG5cbi8qKlxuICogUmVtb3ZlIGJ5dGUgb3JkZXIgbWFya2VyLiBUaGlzIGNhdGNoZXMgRUYgQkIgQkYgKHRoZSBVVEYtOCBCT00pXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbnRlbnQgd2l0aCBCT01cbiAqIEByZXR1cm4ge3N0cmluZ30gY29udGVudCB2YWx1ZSB3aXRob3V0IEJPTVxuICovXG5mdW5jdGlvbiBzdHJpcEJPTShjb250ZW50KSB7XG4gIGlmIChjb250ZW50LmNoYXJDb2RlQXQoMCkgPT09IDB4RkVGRikge1xuICAgIGNvbnRlbnQgPSBjb250ZW50LnNsaWNlKDEpO1xuICB9XG4gIHJldHVybiBjb250ZW50O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaXNBcnJheTogaXNBcnJheSxcbiAgaXNBcnJheUJ1ZmZlcjogaXNBcnJheUJ1ZmZlcixcbiAgaXNCdWZmZXI6IGlzQnVmZmVyLFxuICBpc0Zvcm1EYXRhOiBpc0Zvcm1EYXRhLFxuICBpc0FycmF5QnVmZmVyVmlldzogaXNBcnJheUJ1ZmZlclZpZXcsXG4gIGlzU3RyaW5nOiBpc1N0cmluZyxcbiAgaXNOdW1iZXI6IGlzTnVtYmVyLFxuICBpc09iamVjdDogaXNPYmplY3QsXG4gIGlzUGxhaW5PYmplY3Q6IGlzUGxhaW5PYmplY3QsXG4gIGlzVW5kZWZpbmVkOiBpc1VuZGVmaW5lZCxcbiAgaXNEYXRlOiBpc0RhdGUsXG4gIGlzRmlsZTogaXNGaWxlLFxuICBpc0Jsb2I6IGlzQmxvYixcbiAgaXNGdW5jdGlvbjogaXNGdW5jdGlvbixcbiAgaXNTdHJlYW06IGlzU3RyZWFtLFxuICBpc1VSTFNlYXJjaFBhcmFtczogaXNVUkxTZWFyY2hQYXJhbXMsXG4gIGlzU3RhbmRhcmRCcm93c2VyRW52OiBpc1N0YW5kYXJkQnJvd3NlckVudixcbiAgZm9yRWFjaDogZm9yRWFjaCxcbiAgbWVyZ2U6IG1lcmdlLFxuICBleHRlbmQ6IGV4dGVuZCxcbiAgdHJpbTogdHJpbSxcbiAgc3RyaXBCT006IHN0cmlwQk9NXG59O1xuIiwiLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG52YXIgcHJvY2VzcyA9IG1vZHVsZS5leHBvcnRzID0ge307XG5cbi8vIGNhY2hlZCBmcm9tIHdoYXRldmVyIGdsb2JhbCBpcyBwcmVzZW50IHNvIHRoYXQgdGVzdCBydW5uZXJzIHRoYXQgc3R1YiBpdFxuLy8gZG9uJ3QgYnJlYWsgdGhpbmdzLiAgQnV0IHdlIG5lZWQgdG8gd3JhcCBpdCBpbiBhIHRyeSBjYXRjaCBpbiBjYXNlIGl0IGlzXG4vLyB3cmFwcGVkIGluIHN0cmljdCBtb2RlIGNvZGUgd2hpY2ggZG9lc24ndCBkZWZpbmUgYW55IGdsb2JhbHMuICBJdCdzIGluc2lkZSBhXG4vLyBmdW5jdGlvbiBiZWNhdXNlIHRyeS9jYXRjaGVzIGRlb3B0aW1pemUgaW4gY2VydGFpbiBlbmdpbmVzLlxuXG52YXIgY2FjaGVkU2V0VGltZW91dDtcbnZhciBjYWNoZWRDbGVhclRpbWVvdXQ7XG5cbmZ1bmN0aW9uIGRlZmF1bHRTZXRUaW1vdXQoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG5mdW5jdGlvbiBkZWZhdWx0Q2xlYXJUaW1lb3V0ICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuKGZ1bmN0aW9uICgpIHtcbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIHNldFRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIGNsZWFyVGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICB9XG59ICgpKVxuZnVuY3Rpb24gcnVuVGltZW91dChmdW4pIHtcbiAgICBpZiAoY2FjaGVkU2V0VGltZW91dCA9PT0gc2V0VGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgLy8gaWYgc2V0VGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZFNldFRpbWVvdXQgPT09IGRlZmF1bHRTZXRUaW1vdXQgfHwgIWNhY2hlZFNldFRpbWVvdXQpICYmIHNldFRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9IGNhdGNoKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0IHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKG51bGwsIGZ1biwgMCk7XG4gICAgICAgIH0gY2F0Y2goZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvclxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbCh0aGlzLCBmdW4sIDApO1xuICAgICAgICB9XG4gICAgfVxuXG5cbn1cbmZ1bmN0aW9uIHJ1bkNsZWFyVGltZW91dChtYXJrZXIpIHtcbiAgICBpZiAoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgLy8gaWYgY2xlYXJUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBkZWZhdWx0Q2xlYXJUaW1lb3V0IHx8ICFjYWNoZWRDbGVhclRpbWVvdXQpICYmIGNsZWFyVGltZW91dCkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfSBjYXRjaCAoZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgIHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwobnVsbCwgbWFya2VyKTtcbiAgICAgICAgfSBjYXRjaCAoZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvci5cbiAgICAgICAgICAgIC8vIFNvbWUgdmVyc2lvbnMgb2YgSS5FLiBoYXZlIGRpZmZlcmVudCBydWxlcyBmb3IgY2xlYXJUaW1lb3V0IHZzIHNldFRpbWVvdXRcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbCh0aGlzLCBtYXJrZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG5cblxufVxudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgaWYgKCFkcmFpbmluZyB8fCAhY3VycmVudFF1ZXVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gcnVuVGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgcnVuQ2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgcnVuVGltZW91dChkcmFpblF1ZXVlKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kT25jZUxpc3RlbmVyID0gbm9vcDtcblxucHJvY2Vzcy5saXN0ZW5lcnMgPSBmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gW10gfVxuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcbiIsInZhciBnO1xuXG4vLyBUaGlzIHdvcmtzIGluIG5vbi1zdHJpY3QgbW9kZVxuZyA9IChmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXM7XG59KSgpO1xuXG50cnkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIGV2YWwgaXMgYWxsb3dlZCAoc2VlIENTUClcblx0ZyA9IGcgfHwgbmV3IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKTtcbn0gY2F0Y2ggKGUpIHtcblx0Ly8gVGhpcyB3b3JrcyBpZiB0aGUgd2luZG93IHJlZmVyZW5jZSBpcyBhdmFpbGFibGVcblx0aWYgKHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIpIGcgPSB3aW5kb3c7XG59XG5cbi8vIGcgY2FuIHN0aWxsIGJlIHVuZGVmaW5lZCwgYnV0IG5vdGhpbmcgdG8gZG8gYWJvdXQgaXQuLi5cbi8vIFdlIHJldHVybiB1bmRlZmluZWQsIGluc3RlYWQgb2Ygbm90aGluZyBoZXJlLCBzbyBpdCdzXG4vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XG5cbm1vZHVsZS5leHBvcnRzID0gZztcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIEVudW1zXzEgPSByZXF1aXJlKFwiLi9FbnVtc1wiKTtcbnZhciBDb25zdGFudHMgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQ29uc3RhbnRzKCkge1xuICAgIH1cbiAgICBDb25zdGFudHMucmVxdWlyZWRPbW5pY2hhbm5lbENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJzID0gW1wib3JnVXJsXCIsIFwib3JnSWRcIiwgXCJ3aWRnZXRJZFwiXTtcbiAgICBDb25zdGFudHMuZGVmYXVsdEhlYWRlcnMgPSB7XG4gICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiXG4gICAgfTtcbiAgICBDb25zdGFudHMuYnlwYXNzQ2FjaGVIZWFkZXJzID0ge1xuICAgICAgICBcIkNhY2hlLUNvbnRyb2xcIjogXCJuby1zdG9yZSwgbXVzdC1yZXZhbGlkYXRlLCBuby1jYWNoZVwiLFxuICAgICAgICBcIlgtQ2FjaGUtQ29udHJvbFwiOiBcIm5vLXN0b3JlXCJcbiAgICB9O1xuICAgIENvbnN0YW50cy5kZWZhdWx0Q2hhbm5lbElkID0gRW51bXNfMS5DaGFubmVsSWQuTENXO1xuICAgIENvbnN0YW50cy5kZWZhdWx0TG9jYWxlID0gXCJlbi11c1wiO1xuICAgIENvbnN0YW50cy5ub0NvbnRlbnRTdGF0dXNDb2RlID0gMjA0O1xuICAgIENvbnN0YW50cy5zZW5zaXRpdmVQcm9wZXJ0aWVzID0gW1wiQXV0aGVudGljYXRlZFVzZXJUb2tlblwiXTtcbiAgICBDb25zdGFudHMudHJhbnNhY3Rpb25pZCA9IFwidHJhbnNhY3Rpb24taWRcIjtcbiAgICBDb25zdGFudHMuY3VzdG9tZXJEaXNwbGF5TmFtZSA9IFwiY3VzdG9tZXJEaXNwbGF5TmFtZVwiO1xuICAgIHJldHVybiBDb25zdGFudHM7XG59KCkpO1xuZXhwb3J0cy5kZWZhdWx0ID0gQ29uc3RhbnRzO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkxpdmVDaGF0VmVyc2lvbiA9IGV4cG9ydHMuT0NTREtUZWxlbWV0cnlFdmVudCA9IGV4cG9ydHMuQ2hhbm5lbElkID0gZXhwb3J0cy5PcGVyYXRpbmdTeXN0ZW0gPSBleHBvcnRzLkRldmljZVR5cGUgPSBleHBvcnRzLkJyb3dzZXIgPSBleHBvcnRzLkJyb3dzZXJWZW5kb3IgPSB2b2lkIDA7XG52YXIgQnJvd3NlclZlbmRvcjtcbihmdW5jdGlvbiAoQnJvd3NlclZlbmRvcikge1xuICAgIEJyb3dzZXJWZW5kb3JbXCJJRVwiXSA9IFwiSUVcIjtcbiAgICBCcm93c2VyVmVuZG9yW1wiQ0hST01FXCJdID0gXCJDaHJvbWVcIjtcbiAgICBCcm93c2VyVmVuZG9yW1wiRklSRUZPWFwiXSA9IFwiRmlyZWZveFwiO1xuICAgIEJyb3dzZXJWZW5kb3JbXCJTQUZBUklcIl0gPSBcIlNhZmFyaVwiO1xuICAgIEJyb3dzZXJWZW5kb3JbXCJFREdFXCJdID0gXCJFZGdlXCI7XG4gICAgQnJvd3NlclZlbmRvcltcIkVER0VfQ0hST01JVU1cIl0gPSBcIkVkZ1wiO1xuICAgIEJyb3dzZXJWZW5kb3JbXCJPUEVSQVwiXSA9IFwiT3BlcmFcIjtcbiAgICBCcm93c2VyVmVuZG9yW1wiVU5LTk9XTlwiXSA9IFwiVW5rbm93blwiO1xufSkoQnJvd3NlclZlbmRvciA9IGV4cG9ydHMuQnJvd3NlclZlbmRvciB8fCAoZXhwb3J0cy5Ccm93c2VyVmVuZG9yID0ge30pKTtcbnZhciBCcm93c2VyO1xuKGZ1bmN0aW9uIChCcm93c2VyKSB7XG4gICAgQnJvd3NlcltCcm93c2VyW1wiQ2hyb21lXCJdID0gMF0gPSBcIkNocm9tZVwiO1xuICAgIEJyb3dzZXJbQnJvd3NlcltcIkZpcmVmb3hcIl0gPSAxXSA9IFwiRmlyZWZveFwiO1xuICAgIEJyb3dzZXJbQnJvd3NlcltcIkllXCJdID0gMl0gPSBcIkllXCI7XG4gICAgQnJvd3NlcltCcm93c2VyW1wiRWRnZVwiXSA9IDNdID0gXCJFZGdlXCI7XG4gICAgQnJvd3NlcltCcm93c2VyW1wiU2FmYXJpXCJdID0gNF0gPSBcIlNhZmFyaVwiO1xuICAgIEJyb3dzZXJbQnJvd3NlcltcIk5vbmVcIl0gPSA1XSA9IFwiTm9uZVwiO1xufSkoQnJvd3NlciA9IGV4cG9ydHMuQnJvd3NlciB8fCAoZXhwb3J0cy5Ccm93c2VyID0ge30pKTtcbnZhciBEZXZpY2VUeXBlO1xuKGZ1bmN0aW9uIChEZXZpY2VUeXBlKSB7XG4gICAgRGV2aWNlVHlwZVtcIkRlc2t0b3BcIl0gPSBcIkRlc2t0b3BcIjtcbiAgICBEZXZpY2VUeXBlW1wiTW9iaWxlXCJdID0gXCJNb2JpbGVcIjtcbiAgICBEZXZpY2VUeXBlW1wiVGFibGV0XCJdID0gXCJUYWJsZXRcIjtcbn0pKERldmljZVR5cGUgPSBleHBvcnRzLkRldmljZVR5cGUgfHwgKGV4cG9ydHMuRGV2aWNlVHlwZSA9IHt9KSk7XG52YXIgT3BlcmF0aW5nU3lzdGVtO1xuKGZ1bmN0aW9uIChPcGVyYXRpbmdTeXN0ZW0pIHtcbiAgICBPcGVyYXRpbmdTeXN0ZW1bXCJXSU5ET1dTXCJdID0gXCJXaW5kb3dzXCI7XG4gICAgT3BlcmF0aW5nU3lzdGVtW1wiTUFDT1NYXCJdID0gXCJNYWMgT1MgWFwiO1xuICAgIE9wZXJhdGluZ1N5c3RlbVtcIldJTkRPV1NfUEhPTkVcIl0gPSBcIldpbmRvd3MgUGhvbmVcIjtcbiAgICBPcGVyYXRpbmdTeXN0ZW1bXCJXSU5ET1dTX1JUXCJdID0gXCJXaW5kb3dzIFJUXCI7XG4gICAgT3BlcmF0aW5nU3lzdGVtW1wiSU9TXCJdID0gXCJpT1NcIjtcbiAgICBPcGVyYXRpbmdTeXN0ZW1bXCJBTkRST0lEXCJdID0gXCJBbmRyb2lkXCI7XG4gICAgT3BlcmF0aW5nU3lzdGVtW1wiTElOVVhcIl0gPSBcIkxpbnV4XCI7XG4gICAgT3BlcmF0aW5nU3lzdGVtW1wiVU5LTk9XTlwiXSA9IFwiVW5rbm93blwiO1xufSkoT3BlcmF0aW5nU3lzdGVtID0gZXhwb3J0cy5PcGVyYXRpbmdTeXN0ZW0gfHwgKGV4cG9ydHMuT3BlcmF0aW5nU3lzdGVtID0ge30pKTtcbnZhciBDaGFubmVsSWQ7XG4oZnVuY3Rpb24gKENoYW5uZWxJZCkge1xuICAgIENoYW5uZWxJZFtcIkxDV1wiXSA9IFwibGN3XCI7XG4gICAgQ2hhbm5lbElkW1wiU01TXCJdID0gXCJzbXNcIjtcbiAgICBDaGFubmVsSWRbXCJGQUNFQk9PS1wiXSA9IFwiZmFjZWJvb2tcIjtcbiAgICBDaGFubmVsSWRbXCJXRUNIQVRcIl0gPSBcIndlY2hhdFwiO1xufSkoQ2hhbm5lbElkID0gZXhwb3J0cy5DaGFubmVsSWQgfHwgKGV4cG9ydHMuQ2hhbm5lbElkID0ge30pKTtcbnZhciBPQ1NES1RlbGVtZXRyeUV2ZW50O1xuKGZ1bmN0aW9uIChPQ1NES1RlbGVtZXRyeUV2ZW50KSB7XG4gICAgT0NTREtUZWxlbWV0cnlFdmVudFtcIkdFVENIQVRDT05GSUdcIl0gPSBcIkdldENoYXRDb25maWdcIjtcbiAgICBPQ1NES1RlbGVtZXRyeUV2ZW50W1wiR0VUQ0hBVENPTkZJR1NVQ0NFU1NcIl0gPSBcIkdldENoYXRDb25maWdTdWNjZWVkZWRcIjtcbiAgICBPQ1NES1RlbGVtZXRyeUV2ZW50W1wiR0VUUkVDT05ORUNUQUJMRUNIQVRTXCJdID0gXCJHZXRSZWNvbm5uZWN0YWJsZUNoYXRzXCI7XG4gICAgT0NTREtUZWxlbWV0cnlFdmVudFtcIkdFVFJFQ09OTkVDVEFWQUlMQUJJTElUWVwiXSA9IFwiR2V0UmVjb25ubmVjdGFibGVBdmFpbGFiaWxpdHlcIjtcbiAgICBPQ1NES1RlbGVtZXRyeUV2ZW50W1wiR0VUQ0hBVFRPS0VOU1RBUlRFRFwiXSA9IFwiR2V0Q2hhdFRva2VuU3RhcnRlZFwiO1xuICAgIE9DU0RLVGVsZW1ldHJ5RXZlbnRbXCJHRVRDSEFUVE9LRU5TVUNDRUVERURcIl0gPSBcIkdldENoYXRUb2tlblN1Y2NlZWRlZFwiO1xuICAgIE9DU0RLVGVsZW1ldHJ5RXZlbnRbXCJHRVRDSEFUVE9LRU5GQUlMRURcIl0gPSBcIkdldENoYXRUb2tlbkZhaWxlZFwiO1xuICAgIE9DU0RLVGVsZW1ldHJ5RXZlbnRbXCJHRVRMV0lTVEFUVVNTVEFSVEVEXCJdID0gXCJHZXRMd2lTdGF0dXNTdGFydGVkXCI7XG4gICAgT0NTREtUZWxlbWV0cnlFdmVudFtcIkdFVExXSVNUQVRVU1NVQ0NFRURFRFwiXSA9IFwiR2V0THdpU3RhdHVzU3VjY2VlZGVkXCI7XG4gICAgT0NTREtUZWxlbWV0cnlFdmVudFtcIkdFVExXSVNUQVRVU0ZBSUxFRFwiXSA9IFwiR2V0THdpU3RhdHVzRmFpbGVkXCI7XG4gICAgT0NTREtUZWxlbWV0cnlFdmVudFtcIlNFU1NJT05JTklUU1RBUlRFRFwiXSA9IFwiU2Vzc2lvbkluaXRTdGFydGVkXCI7XG4gICAgT0NTREtUZWxlbWV0cnlFdmVudFtcIlNFU1NJT05JTklUU1VDQ0VFREVEXCJdID0gXCJTZXNzaW9uSW5pdFN1Y2NlZWRlZFwiO1xuICAgIE9DU0RLVGVsZW1ldHJ5RXZlbnRbXCJTRVNTSU9OSU5JVEZBSUxFRFwiXSA9IFwiU2Vzc2lvbkluaXRGYWlsZWRcIjtcbiAgICBPQ1NES1RlbGVtZXRyeUV2ZW50W1wiU0VTU0lPTkNMT1NFU1RBUlRFRFwiXSA9IFwiU2Vzc2lvbkNsb3NlU3RhcnRlZFwiO1xuICAgIE9DU0RLVGVsZW1ldHJ5RXZlbnRbXCJTRVNTSU9OQ0xPU0VTVUNDRUVERURcIl0gPSBcIlNlc3Npb25DbG9zZVN1Y2NlZWRlZFwiO1xuICAgIE9DU0RLVGVsZW1ldHJ5RXZlbnRbXCJTRVNTSU9OQ0xPU0VGQUlMRURcIl0gPSBcIlNlc3Npb25DbG9zZUZhaWxlZFwiO1xuICAgIE9DU0RLVGVsZW1ldHJ5RXZlbnRbXCJTVUJNSVRQT1NUQ0hBVFNUQVJURURcIl0gPSBcIlN1Ym1pdFBvc3RDaGF0U3RhcnRlZFwiO1xuICAgIE9DU0RLVGVsZW1ldHJ5RXZlbnRbXCJTVUJNSVRQT1NUQ0hBVFNVQ0NFRURFRFwiXSA9IFwiU3VibWl0UG9zdENoYXRTdWNjZWVkZWRcIjtcbiAgICBPQ1NES1RlbGVtZXRyeUV2ZW50W1wiU1VCTUlUUE9TVENIQVRGQUlMRURcIl0gPSBcIlN1Ym1pdFBvc3RDaGF0RmFpbGVkXCI7XG4gICAgT0NTREtUZWxlbWV0cnlFdmVudFtcIkdFVENIQVRUUkFOU0NSSVBUU1RBUlRFRFwiXSA9IFwiR2V0Q2hhdFRyYW5zY3JpcHRTdGFydGVkXCI7XG4gICAgT0NTREtUZWxlbWV0cnlFdmVudFtcIkdFVENIQVRUUkFOU0NSSVBUU1VDQ0VFREVEXCJdID0gXCJHZXRDaGF0VHJhbnNjcmlwdFN1Y2NlZWRlZFwiO1xuICAgIE9DU0RLVGVsZW1ldHJ5RXZlbnRbXCJHRVRDSEFUVFJBTlNDUklQVEZBSUxFRFwiXSA9IFwiR2V0Q2hhdFRyYW5zY3JpcHRGYWlsZWRcIjtcbiAgICBPQ1NES1RlbGVtZXRyeUV2ZW50W1wiRU1BSUxUUkFOU0NSSVBUU1RBUlRFRFwiXSA9IFwiRW1haWxUcmFuc2NyaXB0U3RhcnRlZFwiO1xuICAgIE9DU0RLVGVsZW1ldHJ5RXZlbnRbXCJFTUFJTFRSQU5TQ1JJUFRTVUNDRUVERURcIl0gPSBcIkVtYWlsVHJhbnNjcmlwdFN1Y2NlZWRlZFwiO1xuICAgIE9DU0RLVGVsZW1ldHJ5RXZlbnRbXCJFTUFJTFRSQU5TQ1JJUFRGQUlMRURcIl0gPSBcIkVtYWlsVHJhbnNjcmlwdEZhaWxlZFwiO1xuICAgIE9DU0RLVGVsZW1ldHJ5RXZlbnRbXCJGRVRDSERBVEFNQVNLSU5HU1RBUlRFRFwiXSA9IFwiRmV0Y2hEYXRhTWFza2luZ1N0YXJ0ZWRcIjtcbiAgICBPQ1NES1RlbGVtZXRyeUV2ZW50W1wiRkVUQ0hEQVRBTUFTS0lOR1NVQ0NFRURFRFwiXSA9IFwiRmV0Y2hEYXRhTWFza2luZ1N1Y2NlZWRlZFwiO1xuICAgIE9DU0RLVGVsZW1ldHJ5RXZlbnRbXCJGRVRDSERBVEFNQVNLSU5HRkFJTEVEXCJdID0gXCJGZXRjaERhdGFNYXNraW5nRmFpbGVkXCI7XG4gICAgT0NTREtUZWxlbWV0cnlFdmVudFtcIlNFQ09OREFSWUNIQU5ORUxFVkVOVFJFUVVFU1RTVEFSVEVEXCJdID0gXCJTZWNvbmRhcnlDaGFubmVsRXZlbnRSZXF1ZXN0U3RhcnRlZFwiO1xuICAgIE9DU0RLVGVsZW1ldHJ5RXZlbnRbXCJTRUNPTkRBUllDSEFOTkVMRVZFTlRSRVFVRVNUU1VDQ0VFREVEXCJdID0gXCJTZWNvbmRhcnlDaGFubmVsRXZlbnRSZXF1ZXN0U3VjY2VlZGVkXCI7XG4gICAgT0NTREtUZWxlbWV0cnlFdmVudFtcIlNFQ09OREFSWUNIQU5ORUxFVkVOVFJFUVVFU1RGQUlMRURcIl0gPSBcIlNlY29uZGFyeUNoYW5uZWxFdmVudFJlcXVlc3RGYWlsZWRcIjtcbiAgICBPQ1NES1RlbGVtZXRyeUV2ZW50W1wiR0VUU1VSVkVZSU5WSVRFTElOS1NUQVJURURcIl0gPSBcIkdldFN1cnZleUludml0ZUxpbmtTdGFydGVkXCI7XG4gICAgT0NTREtUZWxlbWV0cnlFdmVudFtcIkdFVFNVUlZFWUlOVklURUxJTktTVUNDRUVERURcIl0gPSBcIkdldFN1cnZleUludml0ZUxpbmtTdWNjZWVkZWRcIjtcbiAgICBPQ1NES1RlbGVtZXRyeUV2ZW50W1wiR0VUU1VSVkVZSU5WSVRFTElOS0ZBSUxFRFwiXSA9IFwiR2V0U3VydmV5SW52aXRlTGlua0ZhaWxlZFwiO1xuICAgIE9DU0RLVGVsZW1ldHJ5RXZlbnRbXCJWQUxJREFURUFVVEhDSEFUUkVDT1JEU1RBUlRFRFwiXSA9IFwiVmFsaWRhdGVBdXRoQ2hhdFJlY29yZFN0YXJ0ZWRcIjtcbiAgICBPQ1NES1RlbGVtZXRyeUV2ZW50W1wiVkFMSURBVEVBVVRIQ0hBVFJFQ09SRFNVQ0NFRURFRFwiXSA9IFwiVmFsaWRhdGVBdXRoQ2hhdFJlY29yZFN1Y2NlZWRlZFwiO1xuICAgIE9DU0RLVGVsZW1ldHJ5RXZlbnRbXCJWQUxJREFURUFVVEhDSEFUUkVDT1JERkFJTEVEXCJdID0gXCJWYWxpZGF0ZUF1dGhDaGF0UmVjb3JkRmFpbGVkXCI7XG4gICAgT0NTREtUZWxlbWV0cnlFdmVudFtcIkdFVFFVRVVFQVZBSUxBQklMSVRZU1RBUlRFRFwiXSA9IFwiR2V0UXVldWVBdmFpbGFiaWxpdHlTdGFydGVkXCI7XG4gICAgT0NTREtUZWxlbWV0cnlFdmVudFtcIkdFVFFVRVVFQVZBSUxBQklMSVRZU1VDQ0VFREVEXCJdID0gXCJHZXRRdWV1ZUF2YWlsYWJpbGl0eVN1Y2NlZWRlZFwiO1xuICAgIE9DU0RLVGVsZW1ldHJ5RXZlbnRbXCJHRVRRVUVVRUFWQUlMQUJJTElUWUZBSUxFRFwiXSA9IFwiR2V0UXVldWVBdmFpbGFiaWxpdHlGYWlsZWRcIjtcbiAgICBPQ1NES1RlbGVtZXRyeUV2ZW50W1wiU0VORFRZUElOR0lORElDQVRPUkZBSUxFRFwiXSA9IFwiU2VuZFR5cGluZ0luZGljYXRvckZhaWxlZFwiO1xuICAgIE9DU0RLVGVsZW1ldHJ5RXZlbnRbXCJTRU5EVFlQSU5HSU5ESUNBVE9SU1VDQ0VFREVEXCJdID0gXCJTZW5kVHlwaW5nSW5kaWNhdG9yU3VjY2VlZGVkXCI7XG59KShPQ1NES1RlbGVtZXRyeUV2ZW50ID0gZXhwb3J0cy5PQ1NES1RlbGVtZXRyeUV2ZW50IHx8IChleHBvcnRzLk9DU0RLVGVsZW1ldHJ5RXZlbnQgPSB7fSkpO1xudmFyIExpdmVDaGF0VmVyc2lvbjtcbihmdW5jdGlvbiAoTGl2ZUNoYXRWZXJzaW9uKSB7XG4gICAgLy8gSUMzIGxpdmUgY2hhdFxuICAgIExpdmVDaGF0VmVyc2lvbltMaXZlQ2hhdFZlcnNpb25bXCJWMVwiXSA9IDFdID0gXCJWMVwiO1xuICAgIC8vIEFDUyBsaXZlIGNoYXRcbiAgICBMaXZlQ2hhdFZlcnNpb25bTGl2ZUNoYXRWZXJzaW9uW1wiVjJcIl0gPSAyXSA9IFwiVjJcIjtcbn0pKExpdmVDaGF0VmVyc2lvbiA9IGV4cG9ydHMuTGl2ZUNoYXRWZXJzaW9uIHx8IChleHBvcnRzLkxpdmVDaGF0VmVyc2lvbiA9IHt9KSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBFdmVudE5hbWVzID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEV2ZW50TmFtZXMoKSB7XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFdmVudE5hbWVzLCBcIk9DU0RLTE9BRFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gXCJvYzpzZGs6bG9hZFwiOyB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgcmV0dXJuIEV2ZW50TmFtZXM7XG59KCkpO1xuZXhwb3J0cy5kZWZhdWx0ID0gRXZlbnROYW1lcztcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIExvY2FsZXMgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gTG9jYWxlcygpIHtcbiAgICB9XG4gICAgTG9jYWxlcy5zdXBwb3J0ZWRMb2NhbGVzID0gW1xuICAgICAgICBcImFyLXNhXCIsXG4gICAgICAgIFwiYmctYmdcIixcbiAgICAgICAgXCJjYS1lc1wiLFxuICAgICAgICBcImNzLWN6XCIsXG4gICAgICAgIFwiZGEtZGtcIixcbiAgICAgICAgXCJkZS1kZVwiLFxuICAgICAgICBcImVsLWdyXCIsXG4gICAgICAgIFwiZW4tdXNcIixcbiAgICAgICAgXCJlcy1lc1wiLFxuICAgICAgICBcImV0LWVlXCIsXG4gICAgICAgIFwiZXUtZXNcIixcbiAgICAgICAgXCJmaS1maVwiLFxuICAgICAgICBcImZyLWZyXCIsXG4gICAgICAgIFwiZ2wtZXNcIixcbiAgICAgICAgXCJoZS1pbFwiLFxuICAgICAgICBcImhpLWluXCIsXG4gICAgICAgIFwiaHItaHJcIixcbiAgICAgICAgXCJodS1odVwiLFxuICAgICAgICBcImlkLWlkXCIsXG4gICAgICAgIFwiaXQtaXRcIixcbiAgICAgICAgXCJqYS1qcFwiLFxuICAgICAgICBcImtrLWt6XCIsXG4gICAgICAgIFwia28ta3JcIixcbiAgICAgICAgXCJsdC1sdFwiLFxuICAgICAgICBcImx2LWx2XCIsXG4gICAgICAgIFwibXMtbXlcIixcbiAgICAgICAgXCJuYi1ub1wiLFxuICAgICAgICBcIm5sLW5sXCIsXG4gICAgICAgIFwicGwtcGxcIixcbiAgICAgICAgXCJwdC1iclwiLFxuICAgICAgICBcInB0LXB0XCIsXG4gICAgICAgIFwicm8tcm9cIixcbiAgICAgICAgXCJydS1ydVwiLFxuICAgICAgICBcInNrLXNrXCIsXG4gICAgICAgIFwic2wtc2lcIixcbiAgICAgICAgXCJzci1jeXJsLWNzXCIsXG4gICAgICAgIFwic3ItbGF0bi1jc1wiLFxuICAgICAgICBcInN2LXNlXCIsXG4gICAgICAgIFwidGgtdGhcIixcbiAgICAgICAgXCJ0ci10clwiLFxuICAgICAgICBcInVrLXVhXCIsXG4gICAgICAgIFwidmktdm5cIixcbiAgICAgICAgXCJ6aC1jblwiLFxuICAgICAgICBcInpoLWhrXCIsXG4gICAgICAgIFwiemgtdHdcIlxuICAgIF07XG4gICAgcmV0dXJuIExvY2FsZXM7XG59KCkpO1xuZXhwb3J0cy5kZWZhdWx0ID0gTG9jYWxlcztcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIFRlbGVtZXRyeUhlbHBlcl8xID0gcmVxdWlyZShcIi4uL1V0aWxzL1RlbGVtZXRyeUhlbHBlclwiKTtcbnZhciBPQ1NES0xvZ2dlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBPQ1NES0xvZ2dlcihsb2dnZXIpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIgPSBsb2dnZXI7XG4gICAgfVxuICAgIE9DU0RLTG9nZ2VyLnByb3RvdHlwZS5sb2cgPSBmdW5jdGlvbiAobG9nbGV2ZWwsIHRlbGVtZXRyeUV2ZW50LCBjdXN0b21EYXRhLCBkZXNjcmlwdGlvbikge1xuICAgICAgICBpZiAodGhpcy5pc0xvZ2dpbmdFbmFibGVkKCkpIHtcbiAgICAgICAgICAgIHZhciBsb2dEYXRhID0gVGVsZW1ldHJ5SGVscGVyXzEuZGVmYXVsdC5HRVRURUxFTUVUUllFVkVOVERBVEEodGVsZW1ldHJ5RXZlbnQsIGN1c3RvbURhdGEsIGRlc2NyaXB0aW9uKTtcbiAgICAgICAgICAgIHRoaXMubG9nRXZlbnQobG9nbGV2ZWwsIGxvZ0RhdGEpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBPQ1NES0xvZ2dlci5wcm90b3R5cGUubG9nRXZlbnQgPSBmdW5jdGlvbiAobG9nTGV2ZWwsIGxvZ0RhdGEpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNMb2dnaW5nRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KHRoaXMubG9nZ2VyLmxvZ0NsaWVudFNka1RlbGVtZXRyeUV2ZW50LmJpbmQodGhpcy5sb2dnZXIpLCAwLCBsb2dMZXZlbCwgbG9nRGF0YSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE9DU0RLTG9nZ2VyLnByb3RvdHlwZS5pc0xvZ2dpbmdFbmFibGVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuaXNOdWxsT3JVbmRlZmluZWQodGhpcy5sb2dnZXIpO1xuICAgIH07XG4gICAgT0NTREtMb2dnZXIucHJvdG90eXBlLmlzTnVsbE9yVW5kZWZpbmVkID0gZnVuY3Rpb24gKG9iaikge1xuICAgICAgICByZXR1cm4gKG9iaiA9PT0gbnVsbCB8fCBvYmogPT09IHVuZGVmaW5lZCk7XG4gICAgfTtcbiAgICByZXR1cm4gT0NTREtMb2dnZXI7XG59KCkpO1xuZXhwb3J0cy5kZWZhdWx0ID0gT0NTREtMb2dnZXI7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBPbW5pY2hhbm5lbEVuZHBvaW50cyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBPbW5pY2hhbm5lbEVuZHBvaW50cygpIHtcbiAgICB9XG4gICAgT21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRDb25maWdQYXRoID0gXCJsaXZlY2hhdGNvbm5lY3Rvci9jb25maWdcIjtcbiAgICBPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdFNlc3Npb25Jbml0UGF0aCA9IFwibGl2ZWNoYXRjb25uZWN0b3Ivc2Vzc2lvbmluaXRcIjtcbiAgICBPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdEF1dGhTZXNzaW9uSW5pdFBhdGggPSBcImxpdmVjaGF0Y29ubmVjdG9yL2F1dGgvc2Vzc2lvbmluaXRcIjtcbiAgICBPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdEdldENoYXRUb2tlblBhdGggPSBcImxpdmVjaGF0Y29ubmVjdG9yL2dldGNoYXR0b2tlblwiO1xuICAgIE9tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0djJHZXRDaGF0VG9rZW5QYXRoID0gXCJsaXZlY2hhdGNvbm5lY3Rvci92Mi9nZXRjaGF0dG9rZW5cIjtcbiAgICBPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdEF1dGhHZXRDaGF0VG9rZW5QYXRoID0gXCJsaXZlY2hhdGNvbm5lY3Rvci9hdXRoL2dldGNoYXR0b2tlblwiO1xuICAgIE9tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0djJBdXRoR2V0Q2hhdFRva2VuUGF0aCA9IFwibGl2ZWNoYXRjb25uZWN0b3IvdjIvYXV0aC9nZXRjaGF0dG9rZW5cIjtcbiAgICBPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdFNlc3Npb25DbG9zZVBhdGggPSBcImxpdmVjaGF0Y29ubmVjdG9yL3Nlc3Npb25jbG9zZVwiO1xuICAgIE9tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0QXV0aFNlc3Npb25DbG9zZVBhdGggPSBcImxpdmVjaGF0Y29ubmVjdG9yL2F1dGgvc2Vzc2lvbmNsb3NlXCI7XG4gICAgT21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRTdWJtaXRQb3N0Q2hhdFBhdGggPSBcInN1cnZleS9zdWJtaXRwb3N0Y2hhdFwiO1xuICAgIE9tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0QXV0aFN1Ym1pdFBvc3RDaGF0UGF0aCA9IFwic3VydmV5L2F1dGgvc3VibWl0cG9zdGNoYXRcIjtcbiAgICBPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdEdldFN1cnZleUludml0ZUxpbmtQYXRoID0gXCJsaXZlY2hhdGNvbm5lY3Rvci9nZXRzdXJ2ZXlpbnZpdGVcIjtcbiAgICBPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdEF1dGhHZXRTdXJ2ZXlJbnZpdGVMaW5rUGF0aCA9IFwibGl2ZWNoYXRjb25uZWN0b3IvYXV0aC9nZXRzdXJ2ZXlpbnZpdGVcIjtcbiAgICBPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdEdldENoYXRUcmFuc2NyaXB0UGF0aCA9IFwibGl2ZWNoYXRjb25uZWN0b3IvZ2V0Y2hhdHRyYW5zY3JpcHRzXCI7XG4gICAgT21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXR2MkdldENoYXRUcmFuc2NyaXB0UGF0aCA9IFwibGl2ZWNoYXRjb25uZWN0b3IvdjIvZ2V0Y2hhdHRyYW5zY3JpcHRzXCI7XG4gICAgT21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRBdXRoR2V0Q2hhdFRyYW5zY3JpcHRQYXRoID0gXCJsaXZlY2hhdGNvbm5lY3Rvci9hdXRoL2dldGNoYXR0cmFuc2NyaXB0c1wiO1xuICAgIE9tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0djJBdXRoR2V0Q2hhdFRyYW5zY3JpcHRQYXRoID0gXCJsaXZlY2hhdGNvbm5lY3Rvci92Mi9hdXRoL2dldGNoYXR0cmFuc2NyaXB0c1wiO1xuICAgIE9tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0VHJhbnNjcmlwdEVtYWlsUmVxdWVzdFBhdGggPSBcImxpdmVjaGF0Y29ubmVjdG9yL2NyZWF0ZWVtYWlscmVxdWVzdFwiO1xuICAgIE9tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0QXV0aFRyYW5zY3JpcHRFbWFpbFJlcXVlc3RQYXRoID0gXCJsaXZlY2hhdGNvbm5lY3Rvci9hdXRoL2NyZWF0ZWVtYWlscmVxdWVzdFwiO1xuICAgIE9tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0RmV0Y2hEYXRhTWFza2luZ0luZm9QYXRoID0gXCJsaXZlY2hhdGNvbm5lY3Rvci9mZXRjaGRhdGFtYXNraW5naW5mb1wiO1xuICAgIE9tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0U2Vjb25kYXJ5Q2hhbm5lbEV2ZW50UGF0aCA9IFwibGl2ZWNoYXRjb25uZWN0b3Ivc2Vjb25kYXJ5Y2hhbm5lbGV2ZW50XCI7XG4gICAgT21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRBdXRoU2Vjb25kYXJ5Q2hhbm5lbEV2ZW50UGF0aCA9IFwibGl2ZWNoYXRjb25uZWN0b3IvYXV0aC9zZWNvbmRhcnljaGFubmVsZXZlbnRcIjtcbiAgICBPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdExpdmVXb3JrSXRlbURldGFpbHNQYXRoID0gXCJsaXZlY2hhdGNvbm5lY3Rvci9nZXRsaXZld29ya2l0ZW1kZXRhaWxzXCI7XG4gICAgT21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRBdXRoTGl2ZVdvcmtJdGVtRGV0YWlsc1BhdGggPSBcImxpdmVjaGF0Y29ubmVjdG9yL2F1dGgvZ2V0bGl2ZXdvcmtpdGVtZGV0YWlsc1wiO1xuICAgIE9tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0R2V0UmVjb25uZWN0YWJsZUNoYXRzUGF0aCA9IFwibGl2ZWNoYXRjb25uZWN0b3IvYXV0aC9yZWNvbm5lY3RhYmxlY2hhdHNcIjtcbiAgICBPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdFJlY29ubmVjdEF2YWlsYWJpbGl0eVBhdGggPSBcImxpdmVjaGF0Y29ubmVjdG9yL3JlY29ubmVjdFwiO1xuICAgIE9tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0VmFsaWRhdGVBdXRoQ2hhdE1hcFJlY29yZFBhdGggPSBcImxpdmVjaGF0Y29ubmVjdG9yL2F1dGgvdmFsaWRhdGVhdXRoY2hhdG1hcHJlY29yZFwiO1xuICAgIE9tbmljaGFubmVsRW5kcG9pbnRzLkdldFF1ZXVlQXZhaWxhYmlsaXR5UGF0aCA9IFwibGl2ZWNoYXRjb25uZWN0b3IvYXV0aC9nZXRxdWV1ZWF2YWlsYWJpbGl0eVwiO1xuICAgIE9tbmljaGFubmVsRW5kcG9pbnRzLlNlbmRUeXBpbmdJbmRpY2F0b3JQYXRoID0gXCJpbmJvdW5kL3R5cGluZ2luZGljYXRvci9saXZlY2hhdC9zZW5kdHlwaW5naW5kaWNhdG9yXCI7XG4gICAgcmV0dXJuIE9tbmljaGFubmVsRW5kcG9pbnRzO1xufSgpKTtcbmV4cG9ydHMuZGVmYXVsdCA9IE9tbmljaGFubmVsRW5kcG9pbnRzO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgT21uaWNoYW5uZWxIVFRQSGVhZGVycyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBPbW5pY2hhbm5lbEhUVFBIZWFkZXJzKCkge1xuICAgIH1cbiAgICBPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4gPSBcIkF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5cIjtcbiAgICBPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhvcml6YXRpb24gPSBcIkF1dGhvcml6YXRpb25cIjtcbiAgICBPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLm9yZ2FuaXphdGlvbklkID0gXCJPcmdhbml6YXRpb25JZFwiO1xuICAgIE9tbmljaGFubmVsSFRUUEhlYWRlcnMud2lkZ2V0QXBwSWQgPSBcIndpZGdldEFwcElkXCI7XG4gICAgT21uaWNoYW5uZWxIVFRQSGVhZGVycy5yZXF1ZXN0SWQgPSBcIlJlcXVlc3QtSWRcIjtcbiAgICByZXR1cm4gT21uaWNoYW5uZWxIVFRQSGVhZGVycztcbn0oKSk7XG5leHBvcnRzLmRlZmF1bHQgPSBPbW5pY2hhbm5lbEhUVFBIZWFkZXJzO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkxvZ0xldmVsID0gdm9pZCAwO1xudmFyIExvZ0xldmVsO1xuKGZ1bmN0aW9uIChMb2dMZXZlbCkge1xuICAgIExvZ0xldmVsW1wiSU5GT1wiXSA9IFwiSU5GT1wiO1xuICAgIExvZ0xldmVsW1wiREVCVUdcIl0gPSBcIkRFQlVHXCI7XG4gICAgTG9nTGV2ZWxbXCJXQVJOXCJdID0gXCJXQVJOXCI7XG4gICAgTG9nTGV2ZWxbXCJFUlJPUlwiXSA9IFwiRVJST1JcIjtcbn0pKExvZ0xldmVsID0gZXhwb3J0cy5Mb2dMZXZlbCB8fCAoZXhwb3J0cy5Mb2dMZXZlbCA9IHt9KSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbnZhciBfX2dlbmVyYXRvciA9ICh0aGlzICYmIHRoaXMuX19nZW5lcmF0b3IpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBib2R5KSB7XG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICAgICAgd2hpbGUgKF8pIHRyeSB7XG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgICB9XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIEVudW1zXzEgPSByZXF1aXJlKFwiLi9Db21tb24vRW51bXNcIik7XG52YXIgYXhpb3NfMSA9IHJlcXVpcmUoXCJheGlvc1wiKTtcbnZhciBCcm93c2VySW5mb18xID0gcmVxdWlyZShcIi4vVXRpbHMvQnJvd3NlckluZm9cIik7XG52YXIgQ29uc3RhbnRzXzEgPSByZXF1aXJlKFwiLi9Db21tb24vQ29uc3RhbnRzXCIpO1xudmFyIERldmljZUluZm9fMSA9IHJlcXVpcmUoXCIuL1V0aWxzL0RldmljZUluZm9cIik7XG52YXIgTG9jYWxlc18xID0gcmVxdWlyZShcIi4vQ29tbW9uL0xvY2FsZXNcIik7XG52YXIgTG9nZ2luZ1Nhbml0aXplcl8xID0gcmVxdWlyZShcIi4vVXRpbHMvTG9nZ2luZ1Nhbml0aXplclwiKTtcbnZhciBMb2dMZXZlbF8xID0gcmVxdWlyZShcIi4vTW9kZWwvTG9nTGV2ZWxcIik7XG52YXIgRW51bXNfMiA9IHJlcXVpcmUoXCIuL0NvbW1vbi9FbnVtc1wiKTtcbnZhciBPU0luZm9fMSA9IHJlcXVpcmUoXCIuL1V0aWxzL09TSW5mb1wiKTtcbnZhciBPbW5pY2hhbm5lbEVuZHBvaW50c18xID0gcmVxdWlyZShcIi4vQ29tbW9uL09tbmljaGFubmVsRW5kcG9pbnRzXCIpO1xudmFyIE9tbmljaGFubmVsSFRUUEhlYWRlcnNfMSA9IHJlcXVpcmUoXCIuL0NvbW1vbi9PbW5pY2hhbm5lbEhUVFBIZWFkZXJzXCIpO1xudmFyIFRpbWVyXzEgPSByZXF1aXJlKFwiLi9VdGlscy9UaW1lclwiKTtcbnZhciBheGlvc1JldHJ5XzEgPSByZXF1aXJlKFwiLi9VdGlscy9heGlvc1JldHJ5XCIpO1xudmFyIHV1aWRfMSA9IHJlcXVpcmUoXCIuL1V0aWxzL3V1aWRcIik7XG52YXIgU0RLID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFNESyhvbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24sIGNvbmZpZ3VyYXRpb24sIGxvZ2dlcikge1xuICAgICAgICBpZiAoY29uZmlndXJhdGlvbiA9PT0gdm9pZCAwKSB7IGNvbmZpZ3VyYXRpb24gPSBTREsuZGVmYXVsdENvbmZpZ3VyYXRpb247IH1cbiAgICAgICAgdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24gPSBvbW5pY2hhbm5lbENvbmZpZ3VyYXRpb247XG4gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb247XG4gICAgICAgIHRoaXMubG9nZ2VyID0gbG9nZ2VyO1xuICAgICAgICAvLyBTZXRzIHRvIGRlZmF1bHQgY29uZmlndXJhdGlvbiBpZiBwYXNzZWQgY29uZmlndXJhdGlvbiBpcyBlbXB0eSBvciBpcyBub3QgYW4gb2JqZWN0XG4gICAgICAgIGlmICghT2JqZWN0LmtleXModGhpcy5jb25maWd1cmF0aW9uKS5sZW5ndGggfHwgdHlwZW9mIChjb25maWd1cmF0aW9uKSAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uID0gU0RLLmRlZmF1bHRDb25maWd1cmF0aW9uO1xuICAgICAgICB9XG4gICAgICAgIC8vIFZhbGlkYXRlIFNESyBjb25maWdcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IE9iamVjdC5rZXlzKFNESy5kZWZhdWx0Q29uZmlndXJhdGlvbik7IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICB2YXIga2V5ID0gX2FbX2ldO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmNvbmZpZ3VyYXRpb24uaGFzT3duUHJvcGVydHkoa2V5KSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgJ1wiICsga2V5ICsgXCInIGluIFNES0NvbmZpZ3VyYXRpb25cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gVmFsaWRhdGUgY2hhbm5lbElkXG4gICAgICAgIHZhciBjaGFubmVsSWQgPSBvbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkO1xuICAgICAgICBpZiAoIU9iamVjdC52YWx1ZXMoRW51bXNfMS5DaGFubmVsSWQpLmluY2x1ZGVzKGNoYW5uZWxJZCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgY2hhbm5lbElkXCIpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFZhbGlkYXRlIE9DIGNvbmZpZ1xuICAgICAgICB2YXIgY3VycmVudE9tbmljaGFubmVsQ29uZmlndXJhdGlvblBhcmFtZXRlcnMgPSBPYmplY3Qua2V5cyhvbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24pO1xuICAgICAgICBmb3IgKHZhciBfYiA9IDAsIF9jID0gQ29uc3RhbnRzXzEuZGVmYXVsdC5yZXF1aXJlZE9tbmljaGFubmVsQ29uZmlndXJhdGlvblBhcmFtZXRlcnM7IF9iIDwgX2MubGVuZ3RoOyBfYisrKSB7XG4gICAgICAgICAgICB2YXIga2V5ID0gX2NbX2JdO1xuICAgICAgICAgICAgaWYgKCFjdXJyZW50T21uaWNoYW5uZWxDb25maWd1cmF0aW9uUGFyYW1ldGVycy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyAnXCIgKyBrZXkgKyBcIicgaW4gT21uaWNoYW5uZWxDb25maWd1cmF0aW9uXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMubGl2ZUNoYXRWZXJzaW9uID0gRW51bXNfMS5MaXZlQ2hhdFZlcnNpb24uVjE7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEZldGNoZXMgY2hhdCBjb25maWcuXG4gICAgICogQHBhcmFtIHJlcXVlc3RJZDogUmVxdWVzdElkIHRvIHVzZSB0byBnZXQgY2hhdCBjb25maWcgKE9wdGlvbmFsKS5cbiAgICAgKi9cbiAgICBTREsucHJvdG90eXBlLmdldENoYXRDb25maWcgPSBmdW5jdGlvbiAocmVxdWVzdElkLCBieXBhc3NDYWNoZSkge1xuICAgICAgICBpZiAoYnlwYXNzQ2FjaGUgPT09IHZvaWQgMCkgeyBieXBhc3NDYWNoZSA9IGZhbHNlOyB9XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB0aW1lciwgZW5kcG9pbnQsIGF4aW9zSW5zdGFuY2UsIGhlYWRlcnMsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCBkYXRhO1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGltZXIgPSBUaW1lcl8xLlRpbWVyLlRJTUVSKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5sb2dnZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5sb2coTG9nTGV2ZWxfMS5Mb2dMZXZlbC5JTkZPLCBFbnVtc18yLk9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUQ0hBVENPTkZJRywgeyBSZXF1ZXN0SWQ6IHJlcXVlc3RJZCB9LCBcIkdldCBDaGF0IENvbmZpZyBTdGFydGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXF1ZXN0SWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SWQgPSB1dWlkXzEudXVpZHY0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRwb2ludCA9IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybCArIFwiL1wiICsgT21uaWNoYW5uZWxFbmRwb2ludHNfMS5kZWZhdWx0LkxpdmVDaGF0Q29uZmlnUGF0aCArIFwiL1wiICsgdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWQgKyBcIi9cIiArIHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkICsgXCI/cmVxdWVzdElkPVwiICsgcmVxdWVzdElkICsgXCImY2hhbm5lbElkPVwiICsgdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXhpb3NJbnN0YW5jZSA9IGF4aW9zXzEuZGVmYXVsdC5jcmVhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF4aW9zUmV0cnlfMS5kZWZhdWx0KGF4aW9zSW5zdGFuY2UsIHsgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVycyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJ5cGFzc0NhY2hlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVycyA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCBDb25zdGFudHNfMS5kZWZhdWx0LmJ5cGFzc0NhY2hlSGVhZGVycyksIGhlYWRlcnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgYXhpb3NJbnN0YW5jZS5nZXQoZW5kcG9pbnQsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gcmVzcG9uc2UuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLkxpdmVDaGF0VmVyc2lvbiAmJiBkYXRhLkxpdmVDaGF0VmVyc2lvbiA9PT0gRW51bXNfMS5MaXZlQ2hhdFZlcnNpb24uVjIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxpdmVDaGF0VmVyc2lvbiA9IGRhdGEuTGl2ZUNoYXRWZXJzaW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5oZWFkZXJzID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UuaGVhZGVycyAmJiByZXNwb25zZS5oZWFkZXJzW1wiZGF0ZVwiXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuaGVhZGVyc1tcImRhdGVcIl0gPSByZXNwb25zZS5oZWFkZXJzW1wiZGF0ZVwiXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmxvZ2dlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmxvZyhMb2dMZXZlbF8xLkxvZ0xldmVsLklORk8sIEVudW1zXzIuT0NTREtUZWxlbWV0cnlFdmVudC5HRVRDSEFUQ09ORklHU1VDQ0VTUywgeyBSZXF1ZXN0SWQ6IHJlcXVlc3RJZCwgUmVnaW9uOiByZXNwb25zZS5kYXRhLlJlZ2lvbiwgRWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczogZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgVHJhbnNhY3Rpb25JZDogcmVzcG9uc2UuaGVhZGVyc1tcInRyYW5zYWN0aW9uLWlkXCJdIH0sIFwiR2V0IENoYXQgY29uZmlnIHN1Y2NlZWRlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBkYXRhXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBGZXRjaGVzIExXSSBkZXRhaWxzLlxuICAgICAqIEBwYXJhbSByZXF1ZXN0SWQ6IFJlcXVlc3RJZCB0byB1c2UgdG8gZ2V0IGNoYXQgY29uZmlnIChPcHRpb25hbCkuXG4gICAgICogQHBhcmFtIGdldExXSURldGFpbHNPcHRpb25hbFBhcmFtczogT3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgZ2V0IExXSSBEZXRhaWxzLlxuICAgICAqL1xuICAgIFNESy5wcm90b3R5cGUuZ2V0TFdJRGV0YWlscyA9IGZ1bmN0aW9uIChyZXF1ZXN0SWQsIGdldExXSURldGFpbHNPcHRpb25hbFBhcmFtcykge1xuICAgICAgICBpZiAoZ2V0TFdJRGV0YWlsc09wdGlvbmFsUGFyYW1zID09PSB2b2lkIDApIHsgZ2V0TFdJRGV0YWlsc09wdGlvbmFsUGFyYW1zID0ge307IH1cbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHRpbWVyLCBlbmRwb2ludCwgYXhpb3NJbnN0YW5jZSwgYXV0aGVudGljYXRlZFVzZXJUb2tlbiwgcmVjb25uZWN0SWQsIGhlYWRlcnMsIG9wdGlvbnM7XG4gICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIHRpbWVyID0gVGltZXJfMS5UaW1lci5USU1FUigpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmxvZ2dlcikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5sb2coTG9nTGV2ZWxfMS5Mb2dMZXZlbC5JTkZPLCBFbnVtc18yLk9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUTFdJU1RBVFVTU1RBUlRFRCwgeyBSZXF1ZXN0SWQ6IHJlcXVlc3RJZCB9LCBcIkdldCBMV0kgRGV0YWlscyBTdGFydGVkXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIXJlcXVlc3RJZCkge1xuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SWQgPSB1dWlkXzEudXVpZHY0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVuZHBvaW50ID0gdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsICsgXCIvXCIgKyBPbW5pY2hhbm5lbEVuZHBvaW50c18xLmRlZmF1bHQuTGl2ZUNoYXRMaXZlV29ya0l0ZW1EZXRhaWxzUGF0aCArIFwiL1wiICsgdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWQgKyBcIi9cIiArIHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkICsgXCIvXCIgKyByZXF1ZXN0SWQ7XG4gICAgICAgICAgICAgICAgYXhpb3NJbnN0YW5jZSA9IGF4aW9zXzEuZGVmYXVsdC5jcmVhdGUoKTtcbiAgICAgICAgICAgICAgICBheGlvc1JldHJ5XzEuZGVmYXVsdChheGlvc0luc3RhbmNlLCB7IHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSB9KTtcbiAgICAgICAgICAgICAgICBhdXRoZW50aWNhdGVkVXNlclRva2VuID0gZ2V0TFdJRGV0YWlsc09wdGlvbmFsUGFyYW1zLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4sIHJlY29ubmVjdElkID0gZ2V0TFdJRGV0YWlsc09wdGlvbmFsUGFyYW1zLnJlY29ubmVjdElkO1xuICAgICAgICAgICAgICAgIGhlYWRlcnMgPSBDb25zdGFudHNfMS5kZWZhdWx0LmRlZmF1bHRIZWFkZXJzO1xuICAgICAgICAgICAgICAgIC8vIHVwZGF0ZWQgYXV0aCBlbmRwb2ludCBmb3IgYXV0aGVudGljYXRlZCBjaGF0cyBhbmQgYWRkIGF1dGggdG9rZW4gaW4gaGVhZGVyXG4gICAgICAgICAgICAgICAgaWYgKGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnQgPSB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmwgKyBcIi9cIiArIE9tbmljaGFubmVsRW5kcG9pbnRzXzEuZGVmYXVsdC5MaXZlQ2hhdEF1dGhMaXZlV29ya0l0ZW1EZXRhaWxzUGF0aCArIFwiL1wiICsgdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWQgKyBcIi9cIiArIHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkICsgXCIvXCIgKyByZXF1ZXN0SWQ7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVyc18xLmRlZmF1bHQuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBBcHBlbmQgcmVjb25uZWN0IGlkIG9uIHRoZSBlbmRwb2ludCBpZiB2YWlsYWJsZVxuICAgICAgICAgICAgICAgIGlmIChyZWNvbm5lY3RJZCkge1xuICAgICAgICAgICAgICAgICAgICBlbmRwb2ludCArPSBcIi9cIiArIHJlY29ubmVjdElkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbmRwb2ludCArPSBcIj9jaGFubmVsSWQ9XCIgKyB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWQ7XG4gICAgICAgICAgICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgICAgICAgICAgICAgICB1cmw6IGVuZHBvaW50XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyByZXR1cm4gX19hd2FpdGVyKF90aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCBkYXRhLCBlcnJvcl8xLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2EudHJ5cy5wdXNoKFswLCAyLCAsIDVdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIGF4aW9zSW5zdGFuY2Uob3B0aW9ucyldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHJlc3BvbnNlLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5sb2dnZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5sb2coTG9nTGV2ZWxfMS5Mb2dMZXZlbC5JTkZPLCBFbnVtc18yLk9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUTFdJU1RBVFVTU1VDQ0VFREVELCB7IFJlcXVlc3RJZDogcmVxdWVzdElkLCBSZWdpb246IHJlc3BvbnNlLmRhdGEuUmVnaW9uLCBFbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzOiBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCBUcmFuc2FjdGlvbklkOiByZXNwb25zZS5oZWFkZXJzW1widHJhbnNhY3Rpb24taWRcIl0gfSwgXCJHZXQgTFdJIERldGFpbHMgc3VjY2VlZGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl8xID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMubG9nZ2VyKSByZXR1cm4gWzMgLypicmVhayovLCA0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIExvZ2dpbmdTYW5pdGl6ZXJfMS5Mb2dnaW5nU2FuaXRpemVyLnN0cmlwRXJyb3JTZW5zaXRpdmVQcm9wZXJ0aWVzKGVycm9yXzEpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIubG9nKExvZ0xldmVsXzEuTG9nTGV2ZWwuRVJST1IsIEVudW1zXzIuT0NTREtUZWxlbWV0cnlFdmVudC5HRVRMV0lTVEFUVVNGQUlMRUQsIHsgUmVxdWVzdElkOiByZXF1ZXN0SWQsIEV4Y2VwdGlvbkRldGFpbHM6IGVycm9yXzEsIEVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHM6IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgfSwgXCJHZXQgTFdJIERldGFpbHMgZmFpbGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2EubGFiZWwgPSA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDU6IHJldHVybiBbMiAvKnJldHVybiovXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7IH0pXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEZldGNoZXMgdGhlIGNoYXQgdG9rZW4gZnJvbSBPbW5pY2hhbm5lbCB0byBqb2luIFQxIHRocmVhZC5cbiAgICAgKiBAcGFyYW0gcmVxdWVzdElkOiBSZXF1ZXN0SWQgdG8gdXNlIGZvciBnZXRjaGF0dG9rZW4gKE9wdGlvbmFsKS5cbiAgICAgKiBAcGFyYW0gZ2V0Q2hhdFRva2VuT3B0aW9uYWxQYXJhbXM6IE9wdGlvbmFsIHBhcmFtZXRlcnMgZm9yIGdldCBjaGF0IHRva2VuLlxuICAgICAqL1xuICAgIFNESy5wcm90b3R5cGUuZ2V0Q2hhdFRva2VuID0gZnVuY3Rpb24gKHJlcXVlc3RJZCwgZ2V0Q2hhdFRva2VuT3B0aW9uYWxQYXJhbXMsIGN1cnJlbnRSZXRyeUNvdW50KSB7XG4gICAgICAgIGlmIChnZXRDaGF0VG9rZW5PcHRpb25hbFBhcmFtcyA9PT0gdm9pZCAwKSB7IGdldENoYXRUb2tlbk9wdGlvbmFsUGFyYW1zID0ge307IH1cbiAgICAgICAgaWYgKGN1cnJlbnRSZXRyeUNvdW50ID09PSB2b2lkIDApIHsgY3VycmVudFJldHJ5Q291bnQgPSAwOyB9XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB0aW1lciwgcmVjb25uZWN0SWQsIGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4sIGN1cnJlbnRMaXZlQ2hhdFZlcnNpb24sIGhlYWRlcnMsIGVuZHBvaW50LCBvcHRpb25zLCBheGlvc0luc3RhbmNlO1xuICAgICAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICB0aW1lciA9IFRpbWVyXzEuVGltZXIuVElNRVIoKTtcbiAgICAgICAgICAgICAgICByZWNvbm5lY3RJZCA9IGdldENoYXRUb2tlbk9wdGlvbmFsUGFyYW1zLnJlY29ubmVjdElkLCBhdXRoZW50aWNhdGVkVXNlclRva2VuID0gZ2V0Q2hhdFRva2VuT3B0aW9uYWxQYXJhbXMuYXV0aGVudGljYXRlZFVzZXJUb2tlbiwgY3VycmVudExpdmVDaGF0VmVyc2lvbiA9IGdldENoYXRUb2tlbk9wdGlvbmFsUGFyYW1zLmN1cnJlbnRMaXZlQ2hhdFZlcnNpb247XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubG9nZ2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmxvZyhMb2dMZXZlbF8xLkxvZ0xldmVsLklORk8sIEVudW1zXzIuT0NTREtUZWxlbWV0cnlFdmVudC5HRVRDSEFUVE9LRU5TVEFSVEVELCB7IFJlcXVlc3RJZDogcmVxdWVzdElkIH0sIFwiR2V0IENoYXQgVG9rZW4gU3RhcnRlZFwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRSZXRyeUNvdW50IDwgMCkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGN1cnJlbnRSZXRyeUNvdW50XCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIXJlcXVlc3RJZCkge1xuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SWQgPSB1dWlkXzEudXVpZHY0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGhlYWRlcnMgPSBDb25zdGFudHNfMS5kZWZhdWx0LmRlZmF1bHRIZWFkZXJzO1xuICAgICAgICAgICAgICAgIGVuZHBvaW50ID0gdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsICsgXCIvXCIgKyBPbW5pY2hhbm5lbEVuZHBvaW50c18xLmRlZmF1bHQuTGl2ZUNoYXRHZXRDaGF0VG9rZW5QYXRoICsgXCIvXCIgKyB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZCArIFwiL1wiICsgdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWQgKyBcIi9cIiArIHJlcXVlc3RJZDtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5saXZlQ2hhdFZlcnNpb24gPT09IEVudW1zXzEuTGl2ZUNoYXRWZXJzaW9uLlYyIHx8IChjdXJyZW50TGl2ZUNoYXRWZXJzaW9uICYmIGN1cnJlbnRMaXZlQ2hhdFZlcnNpb24gPT09IEVudW1zXzEuTGl2ZUNoYXRWZXJzaW9uLlYyKSkge1xuICAgICAgICAgICAgICAgICAgICBlbmRwb2ludCA9IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybCArIFwiL1wiICsgT21uaWNoYW5uZWxFbmRwb2ludHNfMS5kZWZhdWx0LkxpdmVDaGF0djJHZXRDaGF0VG9rZW5QYXRoICsgXCIvXCIgKyB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZCArIFwiL1wiICsgdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWQgKyBcIi9cIiArIHJlcXVlc3RJZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZHBvaW50ID0gdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsICsgXCIvXCIgKyBPbW5pY2hhbm5lbEVuZHBvaW50c18xLmRlZmF1bHQuTGl2ZUNoYXR2MkF1dGhHZXRDaGF0VG9rZW5QYXRoICsgXCIvXCIgKyB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZCArIFwiL1wiICsgdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWQgKyBcIi9cIiArIHJlcXVlc3RJZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVyc18xLmRlZmF1bHQuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYXV0aGVudGljYXRlZFVzZXJUb2tlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnQgPSB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmwgKyBcIi9cIiArIE9tbmljaGFubmVsRW5kcG9pbnRzXzEuZGVmYXVsdC5MaXZlQ2hhdEF1dGhHZXRDaGF0VG9rZW5QYXRoICsgXCIvXCIgKyB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZCArIFwiL1wiICsgdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWQgKyBcIi9cIiArIHJlcXVlc3RJZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVyc18xLmRlZmF1bHQuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyZWNvbm5lY3RJZCkge1xuICAgICAgICAgICAgICAgICAgICBlbmRwb2ludCArPSBcIi9cIiArIHJlY29ubmVjdElkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbmRwb2ludCArPSBcIj9jaGFubmVsSWQ9XCIgKyB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWQ7XG4gICAgICAgICAgICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgICAgICAgICAgICAgICB1cmw6IGVuZHBvaW50XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBheGlvc0luc3RhbmNlID0gYXhpb3NfMS5kZWZhdWx0LmNyZWF0ZSgpO1xuICAgICAgICAgICAgICAgIGF4aW9zUmV0cnlfMS5kZWZhdWx0KGF4aW9zSW5zdGFuY2UsIHsgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHJldHVybiBfX2F3YWl0ZXIoX3RoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIGRhdGEsIGVycm9yXzIsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHM7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2EudHJ5cy5wdXNoKFswLCAyLCAsIDVdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIGF4aW9zSW5zdGFuY2Uob3B0aW9ucyldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHJlc3BvbnNlLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXNvbHZlcyBvbmx5IGlmIGl0IGNvbnRhaW5zIGNoYXQgdG9rZW4gcmVzcG9uc2Ugd2hpY2ggb25seSBoYXBwZW5zIG9uIHN0YXR1cyAyMDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5yZXF1ZXN0SWQgPSByZXF1ZXN0SWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubG9nZ2VyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmxvZyhMb2dMZXZlbF8xLkxvZ0xldmVsLklORk8sIEVudW1zXzIuT0NTREtUZWxlbWV0cnlFdmVudC5HRVRDSEFUVE9LRU5TVUNDRUVERUQsIHsgUmVxdWVzdElkOiByZXF1ZXN0SWQsIFJlZ2lvbjogcmVzcG9uc2UuZGF0YS5SZWdpb24sIEVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHM6IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIFRyYW5zYWN0aW9uSWQ6IHJlc3BvbnNlLmhlYWRlcnNbXCJ0cmFuc2FjdGlvbi1pZFwiXSB9LCBcIkdldCBDaGF0IFRva2VuIFN1Y2NlZWRlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qL107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBObyBjb250ZW50IGZvciByZWNvbm5lY3QgY2hhdCBjYXNlIHNob3VsZG4ndCBiZSByZXRyaWVkLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlY29ubmVjdElkICYmIHJlc3BvbnNlLnN0YXR1cyA9PT0gQ29uc3RhbnRzXzEuZGVmYXVsdC5ub0NvbnRlbnRTdGF0dXNDb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qL107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMgLypicmVhayovLCA1XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfMiA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmxvZ2dlcikgcmV0dXJuIFszIC8qYnJlYWsqLywgNF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCBMb2dnaW5nU2FuaXRpemVyXzEuTG9nZ2luZ1Nhbml0aXplci5zdHJpcEVycm9yU2Vuc2l0aXZlUHJvcGVydGllcyhlcnJvcl8yKV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmxvZyhMb2dMZXZlbF8xLkxvZ0xldmVsLkVSUk9SLCBFbnVtc18yLk9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUQ0hBVFRPS0VORkFJTEVELCB7IFJlcXVlc3RJZDogcmVxdWVzdElkLCBFeGNlcHRpb25EZXRhaWxzOiBlcnJvcl8yLCBFbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzOiBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzIH0sIFwiR2V0IENoYXQgVG9rZW4gRmFpbGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2EubGFiZWwgPSA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3JfMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qL107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJhc2UgY2FzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRSZXRyeUNvdW50ICsgMSA+PSB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0Q2hhdFRva2VuUmV0cnlDb3VudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoXCJUaGUgcmV0cnkgZm9yIGdldGNoYXR0b2tlbiBoYXMgZXhjZWVkZWQgaXRzIG1heCB2YWx1ZSBvZiBcIiArIHRoaXMuY29uZmlndXJhdGlvbi5nZXRDaGF0VG9rZW5SZXRyeUNvdW50KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi9dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmV0cmllcyB1bnRpbCBpdCByZWFjaGVzIGl0cyBsaW1pdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuZ2V0Q2hhdFRva2VuKHJlcXVlc3RJZCwgZ2V0Q2hhdFRva2VuT3B0aW9uYWxQYXJhbXMsIGN1cnJlbnRSZXRyeUNvdW50ICsgMSkudGhlbihmdW5jdGlvbiAocmVzcG9uc2UpIHsgcmV0dXJuIHJlc29sdmUocmVzcG9uc2UpOyB9KS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHsgcmV0dXJuIHJlamVjdChlcnJvcik7IH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgdGhpcy5jb25maWd1cmF0aW9uLmdldENoYXRUb2tlblRpbWVCZXR3ZWVuUmV0cmllc09uRmFpbHVyZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qL107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pOyB9KV07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBGZXRjaGVzIHRoZSByZWNvbm5lY3RhYmxlIGNoYXRzIGZyb20gb21uaWNoYW5uZWwgZnJvbSB0aGUgZ2l2ZW4gdXNlciBpbmZvcm1hdGlvbiBpbiBKV1QgdG9rZW4oY2xhaW0gbmFtZTogc3ViKS5cbiAgICAgKiBAcGFyYW0gcmVjb25uZWN0YWJsZUNoYXRzUGFyYW1zIE1hbmRhdGUgcGFyYW1ldGVycyBmb3IgZ2V0IHJlY29ubmVjdGFibGUgY2hhdHMuXG4gICAgICovXG4gICAgU0RLLnByb3RvdHlwZS5nZXRSZWNvbm5lY3RhYmxlQ2hhdHMgPSBmdW5jdGlvbiAocmVjb25uZWN0YWJsZUNoYXRzUGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB0aW1lciwgYXV0aGVudGljYXRlZFVzZXJUb2tlbiwgZW5kcG9pbnQsIGhlYWRlcnMsIG9wdGlvbnMsIGF4aW9zSW5zdGFuY2U7XG4gICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIHRpbWVyID0gVGltZXJfMS5UaW1lci5USU1FUigpO1xuICAgICAgICAgICAgICAgIGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4gPSByZWNvbm5lY3RhYmxlQ2hhdHNQYXJhbXMuYXV0aGVudGljYXRlZFVzZXJUb2tlbjtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5sb2dnZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIubG9nKExvZ0xldmVsXzEuTG9nTGV2ZWwuSU5GTywgRW51bXNfMi5PQ1NES1RlbGVtZXRyeUV2ZW50LkdFVFJFQ09OTkVDVEFCTEVDSEFUUywgXCJHZXQgUmVjb25uZWN0YWJsZSBjaGF0IFN0YXJ0ZWRcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVuZHBvaW50ID0gdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsICsgXCIvXCIgKyBPbW5pY2hhbm5lbEVuZHBvaW50c18xLmRlZmF1bHQuTGl2ZUNoYXRHZXRSZWNvbm5lY3RhYmxlQ2hhdHNQYXRoICsgXCIvXCIgKyB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZCArIFwiL1wiICsgdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWQgKyBcIi9cIiArIHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkICsgXCI/Y2hhbm5lbElkPVwiICsgdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkO1xuICAgICAgICAgICAgICAgIGhlYWRlcnMgPSBDb25zdGFudHNfMS5kZWZhdWx0LmRlZmF1bHRIZWFkZXJzO1xuICAgICAgICAgICAgICAgIGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVyc18xLmRlZmF1bHQuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBlbmRwb2ludFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYXhpb3NJbnN0YW5jZSA9IGF4aW9zXzEuZGVmYXVsdC5jcmVhdGUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyByZXR1cm4gX19hd2FpdGVyKF90aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCBkYXRhLCBlcnJvcl8zLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2EudHJ5cy5wdXNoKFswLCAyLCAsIDVdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIGF4aW9zSW5zdGFuY2Uob3B0aW9ucyldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHJlc3BvbnNlLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXNvbHZlcyBvbmx5IGlmIGl0IGNvbnRhaW5zIHJlY29ubmVjdGFibGUgY2hhdHMgcmVzcG9uc2Ugd2hpY2ggb25seSBoYXBwZW5zIG9uIHN0YXR1cyAyMDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubG9nZ2VyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmxvZyhMb2dMZXZlbF8xLkxvZ0xldmVsLklORk8sIEVudW1zXzIuT0NTREtUZWxlbWV0cnlFdmVudC5HRVRSRUNPTk5FQ1RBQkxFQ0hBVFMsIHsgUmVnaW9uOiByZXNwb25zZS5kYXRhLlJlZ2lvbiwgRWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczogZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgVHJhbnNhY3Rpb25JZDogcmVzcG9uc2UuaGVhZGVyc1tDb25zdGFudHNfMS5kZWZhdWx0LnRyYW5zYWN0aW9uaWRdIH0sIFwiR2V0IFJlY29ubmVjdGFibGUgQ2hhdHMgU3VjY2VlZGVkIGFuZCBvbGQgc2Vzc2lvbiByZXR1cm5lZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qL107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBObyBkYXRhIGZvdW5kIGluIHRoZSBvbGQgc2Vzc2lvbnMgc28gcmV0dXJuaW5nIG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfMyA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmxvZ2dlcikgcmV0dXJuIFszIC8qYnJlYWsqLywgNF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCBMb2dnaW5nU2FuaXRpemVyXzEuTG9nZ2luZ1Nhbml0aXplci5zdHJpcEVycm9yU2Vuc2l0aXZlUHJvcGVydGllcyhlcnJvcl8zKV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmxvZyhMb2dMZXZlbF8xLkxvZ0xldmVsLkVSUk9SLCBFbnVtc18yLk9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUUkVDT05ORUNUQUJMRUNIQVRTLCB7IEV4Y2VwdGlvbkRldGFpbHM6IGVycm9yXzMsIEVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHM6IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgfSwgXCJHZXQgUmVjb25uZWN0YWJsZSBDaGF0cyBGYWlsZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYS5sYWJlbCA9IDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcl8zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA1OiByZXR1cm4gWzIgLypyZXR1cm4qL107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pOyB9KV07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvKipcbiAgICogRmV0Y2hlcyB0aGUgcmVjb25uZWN0YWJsZSBjaGF0cyBmcm9tIG9tbmljaGFubmVsIGZyb20gdGhlIGdpdmVuIHVzZXIgaW5mb3JtYXRpb24gaW4gSldUIHRva2VuKGNsYWltIG5hbWU6IHN1YikuXG4gICAqIEBwYXJhbSByZWNvbm5lY3RhYmxlQ2hhdHNQYXJhbXMgTWFuZGF0ZSBwYXJhbWV0ZXJzIGZvciBnZXQgcmVjb25uZWN0YWJsZSBjaGF0cy5cbiAgICovXG4gICAgU0RLLnByb3RvdHlwZS5nZXRSZWNvbm5lY3RBdmFpbGFiaWxpdHkgPSBmdW5jdGlvbiAocmVjb25uZWN0SWQpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHRpbWVyLCBlbmRwb2ludCwgaGVhZGVycywgb3B0aW9ucywgYXhpb3NJbnN0YW5jZTtcbiAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgdGltZXIgPSBUaW1lcl8xLlRpbWVyLlRJTUVSKCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubG9nZ2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmxvZyhMb2dMZXZlbF8xLkxvZ0xldmVsLklORk8sIEVudW1zXzIuT0NTREtUZWxlbWV0cnlFdmVudC5HRVRSRUNPTk5FQ1RBVkFJTEFCSUxJVFksIFwiR2V0IFJlY29ubmVjdCBhdmFpbGFiaWxpdHkgc3RhcnRlZFwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZW5kcG9pbnQgPSB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmwgKyBcIi9cIiArIE9tbmljaGFubmVsRW5kcG9pbnRzXzEuZGVmYXVsdC5MaXZlQ2hhdFJlY29ubmVjdEF2YWlsYWJpbGl0eVBhdGggKyBcIi9cIiArIHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkICsgXCIvXCIgKyB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZCArIFwiL1wiICsgcmVjb25uZWN0SWQ7XG4gICAgICAgICAgICAgICAgaGVhZGVycyA9IENvbnN0YW50c18xLmRlZmF1bHQuZGVmYXVsdEhlYWRlcnM7XG4gICAgICAgICAgICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgICAgICAgICAgICAgICB1cmw6IGVuZHBvaW50XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBheGlvc0luc3RhbmNlID0gYXhpb3NfMS5kZWZhdWx0LmNyZWF0ZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHJldHVybiBfX2F3YWl0ZXIoX3RoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIGRhdGEsIGVycm9yXzQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHM7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYS50cnlzLnB1c2goWzAsIDIsICwgNV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgYXhpb3NJbnN0YW5jZShvcHRpb25zKV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gcmVzcG9uc2UuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubG9nZ2VyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmxvZyhMb2dMZXZlbF8xLkxvZ0xldmVsLklORk8sIEVudW1zXzIuT0NTREtUZWxlbWV0cnlFdmVudC5HRVRSRUNPTk5FQ1RBVkFJTEFCSUxJVFksIHsgUmVnaW9uOiByZXNwb25zZS5kYXRhLlJlZ2lvbiwgRWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczogZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgVHJhbnNhY3Rpb25JZDogcmVzcG9uc2UuaGVhZGVyc1tDb25zdGFudHNfMS5kZWZhdWx0LnRyYW5zYWN0aW9uaWRdIH0sIFwiR2V0IFJlY29ubmVjdCBhdmFpbGFiaWxpdHkgU3VjY2VlZGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vIGRhdGEgZm91bmQgc28gcmV0dXJuaW5nIG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmxvZ2dlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmxvZyhMb2dMZXZlbF8xLkxvZ0xldmVsLldBUk4sIEVudW1zXzIuT0NTREtUZWxlbWV0cnlFdmVudC5HRVRSRUNPTk5FQ1RBVkFJTEFCSUxJVFksIHsgUmVnaW9uOiByZXNwb25zZS5kYXRhLlJlZ2lvbiwgRWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczogZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgVHJhbnNhY3Rpb25JZDogcmVzcG9uc2UuaGVhZGVyc1tDb25zdGFudHNfMS5kZWZhdWx0LnRyYW5zYWN0aW9uaWRdIH0sIFwiR2V0IFJlY29ubmVjdCBhdmFpbGFiaWxpdHkgZGlkbid0IHNlbmQgYW55IHZhbGlkIGRhdGEuXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi9dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl80ID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMubG9nZ2VyKSByZXR1cm4gWzMgLypicmVhayovLCA0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIExvZ2dpbmdTYW5pdGl6ZXJfMS5Mb2dnaW5nU2FuaXRpemVyLnN0cmlwRXJyb3JTZW5zaXRpdmVQcm9wZXJ0aWVzKGVycm9yXzQpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIubG9nKExvZ0xldmVsXzEuTG9nTGV2ZWwuRVJST1IsIEVudW1zXzIuT0NTREtUZWxlbWV0cnlFdmVudC5HRVRSRUNPTk5FQ1RBVkFJTEFCSUxJVFksIHsgRXhjZXB0aW9uRGV0YWlsczogZXJyb3JfNCwgRWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczogZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyB9LCBcIkdldCBSZWNvbm5lY3QgQXZhaWxhYmlsaXR5IEZhaWxlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9hLmxhYmVsID0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yXzQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi9dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDU6IHJldHVybiBbMiAvKnJldHVybiovXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7IH0pXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIHJlcXVlc3RJZDogUmVxdWVzdElkIHRvIHVzZSBmb3Igc2Vzc2lvbiBpbml0LlxuICAgICAqIEBwYXJhbSBxdWV1ZUF2YWlsYWJpbGl0eU9wdGlvbmFsUGFyYW1zOiBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciBzZXNzaW9uIGluaXQuXG4gICAgICovXG4gICAgU0RLLnByb3RvdHlwZS5nZXRRdWV1ZUF2YWlsYWJpbGl0eSA9IGZ1bmN0aW9uIChyZXF1ZXN0SWQsIHF1ZXVlQXZhaWxhYmlsaXR5T3B0aW9uYWxQYXJhbXMpIHtcbiAgICAgICAgaWYgKHF1ZXVlQXZhaWxhYmlsaXR5T3B0aW9uYWxQYXJhbXMgPT09IHZvaWQgMCkgeyBxdWV1ZUF2YWlsYWJpbGl0eU9wdGlvbmFsUGFyYW1zID0ge307IH1cbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHRpbWVyLCBlbmRwb2ludCwgYXhpb3NJbnN0YW5jZSwgYXV0aGVudGljYXRlZFVzZXJUb2tlbiwgaW5pdENvbnRleHQsIGdldENvbnRleHQsIGhlYWRlcnMsIGRhdGEsIG9wdGlvbnM7XG4gICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIHRpbWVyID0gVGltZXJfMS5UaW1lci5USU1FUigpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmxvZ2dlcikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5sb2coTG9nTGV2ZWxfMS5Mb2dMZXZlbC5JTkZPLCBFbnVtc18yLk9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUUVVFVUVBVkFJTEFCSUxJVFlTVEFSVEVELCB7IFJlcXVlc3RJZDogcmVxdWVzdElkIH0sIFwiR2V0IHF1ZXVlIGF2YWlsYWJpbGl0eSBzdGFydGVkXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbmRwb2ludCA9IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybCArIFwiL1wiICsgT21uaWNoYW5uZWxFbmRwb2ludHNfMS5kZWZhdWx0LkdldFF1ZXVlQXZhaWxhYmlsaXR5UGF0aCArIFwiL1wiICsgdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWQgKyBcIi9cIiArIHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkICsgXCIvXCIgKyByZXF1ZXN0SWQgKyBcIj9jaGFubmVsSWQ9bGN3XCI7XG4gICAgICAgICAgICAgICAgYXhpb3NJbnN0YW5jZSA9IGF4aW9zXzEuZGVmYXVsdC5jcmVhdGUoKTtcbiAgICAgICAgICAgICAgICBheGlvc1JldHJ5XzEuZGVmYXVsdChheGlvc0luc3RhbmNlLCB7IHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSB9KTtcbiAgICAgICAgICAgICAgICBhdXRoZW50aWNhdGVkVXNlclRva2VuID0gcXVldWVBdmFpbGFiaWxpdHlPcHRpb25hbFBhcmFtcy5hdXRoZW50aWNhdGVkVXNlclRva2VuLCBpbml0Q29udGV4dCA9IHF1ZXVlQXZhaWxhYmlsaXR5T3B0aW9uYWxQYXJhbXMuaW5pdENvbnRleHQsIGdldENvbnRleHQgPSBxdWV1ZUF2YWlsYWJpbGl0eU9wdGlvbmFsUGFyYW1zLmdldENvbnRleHQ7XG4gICAgICAgICAgICAgICAgaGVhZGVycyA9IENvbnN0YW50c18xLmRlZmF1bHQuZGVmYXVsdEhlYWRlcnM7XG4gICAgICAgICAgICAgICAgaWYgKGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzXzEuZGVmYXVsdC5hdXRoZW50aWNhdGVkVXNlclRva2VuXSA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRhdGEgPSBpbml0Q29udGV4dCB8fCB7fTtcbiAgICAgICAgICAgICAgICBpZiAoZ2V0Q29udGV4dCAmJiAhd2luZG93LmRvY3VtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJnZXRDb250ZXh0IGlzIG9ubHkgc3VwcG9ydGVkIG9uIHdlYiBicm93c2Vyc1wiKSldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZ2V0Q29udGV4dCkge1xuICAgICAgICAgICAgICAgICAgICBkYXRhLmJyb3dzZXIgPSBCcm93c2VySW5mb18xLkJyb3dzZXJJbmZvLmdldEJyb3dzZXJOYW1lKCk7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEuZGV2aWNlID0gRGV2aWNlSW5mb18xLkRldmljZUluZm8uZ2V0RGV2aWNlVHlwZSgpO1xuICAgICAgICAgICAgICAgICAgICBkYXRhLm9yaWdpbnVybCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuICAgICAgICAgICAgICAgICAgICBkYXRhLm9zID0gT1NJbmZvXzEuT1NJbmZvLmdldE9zVHlwZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIWRhdGEubG9jYWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEubG9jYWxlID0gQ29uc3RhbnRzXzEuZGVmYXVsdC5kZWZhdWx0TG9jYWxlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBWYWxpZGF0ZSBsb2NhbGVcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5sb2NhbGUgJiYgIUxvY2FsZXNfMS5kZWZhdWx0LnN1cHBvcnRlZExvY2FsZXMuaW5jbHVkZXMoZGF0YS5sb2NhbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBsb2NhbGU6ICdcIiArIGRhdGEubG9jYWxlICsgXCInXCIpKV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgICAgICAgICAgICAgIHVybDogZW5kcG9pbnRcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHJldHVybiBfX2F3YWl0ZXIoX3RoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIGRhdGFfMSwgZXJyb3JfNSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcztcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9hLnRyeXMucHVzaChbMCwgMiwgLCA1XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCBheGlvc0luc3RhbmNlKG9wdGlvbnMpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfMSA9IHJlc3BvbnNlLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YV8xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubG9nZ2VyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmxvZyhMb2dMZXZlbF8xLkxvZ0xldmVsLklORk8sIEVudW1zXzIuT0NTREtUZWxlbWV0cnlFdmVudC5HRVRRVUVVRUFWQUlMQUJJTElUWVNVQ0NFRURFRCwgeyBSZXF1ZXN0SWQ6IHJlcXVlc3RJZCwgUmVnaW9uOiByZXNwb25zZS5kYXRhLlJlZ2lvbiwgRWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczogZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgVHJhbnNhY3Rpb25JZDogcmVzcG9uc2UuaGVhZGVyc1tcInRyYW5zYWN0aW9uLWlkXCJdIH0sIFwiR2V0IHF1ZXVlIGF2YWlsYWJpbGl0eSBTdWNjZWVkZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZGF0YV8xKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl81ID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMubG9nZ2VyKSByZXR1cm4gWzMgLypicmVhayovLCA0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIExvZ2dpbmdTYW5pdGl6ZXJfMS5Mb2dnaW5nU2FuaXRpemVyLnN0cmlwRXJyb3JTZW5zaXRpdmVQcm9wZXJ0aWVzKGVycm9yXzUpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIubG9nKExvZ0xldmVsXzEuTG9nTGV2ZWwuRVJST1IsIEVudW1zXzIuT0NTREtUZWxlbWV0cnlFdmVudC5HRVRRVUVVRUFWQUlMQUJJTElUWUZBSUxFRCwgeyBSZXF1ZXN0SWQ6IHJlcXVlc3RJZCwgRXhjZXB0aW9uRGV0YWlsczogZXJyb3JfNSwgRWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczogZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyB9LCBcIkdldCBxdWV1ZSBhdmFpbGFiaWxpdHkgZmFpbGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2EubGFiZWwgPSA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3JfNSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMgLypicmVhayovLCA1XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA1OiByZXR1cm4gWzIgLypyZXR1cm4qL107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pOyB9KV07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBTdGFydHMgYSBzZXNzaW9uIHRvIG9tbmljaGFubmVsLlxuICAgICAqIEBwYXJhbSByZXF1ZXN0SWQ6IFJlcXVlc3RJZCB0byB1c2UgZm9yIHNlc3Npb24gaW5pdC5cbiAgICAgKiBAcGFyYW0gc2Vzc2lvbkluaXRPcHRpb25hbFBhcmFtczogT3B0aW9uYWwgcGFyYW1ldGVycyBmb3Igc2Vzc2lvbiBpbml0LlxuICAgICAqL1xuICAgIFNESy5wcm90b3R5cGUuc2Vzc2lvbkluaXQgPSBmdW5jdGlvbiAocmVxdWVzdElkLCBzZXNzaW9uSW5pdE9wdGlvbmFsUGFyYW1zKSB7XG4gICAgICAgIGlmIChzZXNzaW9uSW5pdE9wdGlvbmFsUGFyYW1zID09PSB2b2lkIDApIHsgc2Vzc2lvbkluaXRPcHRpb25hbFBhcmFtcyA9IHt9OyB9XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB0aW1lciwgYXhpb3NJbnN0YW5jZSwgcmVjb25uZWN0SWQsIGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4sIGluaXRDb250ZXh0LCBnZXRDb250ZXh0LCBoZWFkZXJzLCBlbmRwb2ludCwgZGF0YSwgb3B0aW9ucztcbiAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgdGltZXIgPSBUaW1lcl8xLlRpbWVyLlRJTUVSKCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubG9nZ2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmxvZyhMb2dMZXZlbF8xLkxvZ0xldmVsLklORk8sIEVudW1zXzIuT0NTREtUZWxlbWV0cnlFdmVudC5TRVNTSU9OSU5JVFNUQVJURUQsIHsgUmVxdWVzdElkOiByZXF1ZXN0SWQgfSwgXCJTZXNzaW9uIEluaXQgU3RhcnRlZFwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXhpb3NJbnN0YW5jZSA9IGF4aW9zXzEuZGVmYXVsdC5jcmVhdGUoKTtcbiAgICAgICAgICAgICAgICBheGlvc1JldHJ5XzEuZGVmYXVsdChheGlvc0luc3RhbmNlLCB7IHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSB9KTtcbiAgICAgICAgICAgICAgICByZWNvbm5lY3RJZCA9IHNlc3Npb25Jbml0T3B0aW9uYWxQYXJhbXMucmVjb25uZWN0SWQsIGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4gPSBzZXNzaW9uSW5pdE9wdGlvbmFsUGFyYW1zLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4sIGluaXRDb250ZXh0ID0gc2Vzc2lvbkluaXRPcHRpb25hbFBhcmFtcy5pbml0Q29udGV4dCwgZ2V0Q29udGV4dCA9IHNlc3Npb25Jbml0T3B0aW9uYWxQYXJhbXMuZ2V0Q29udGV4dDtcbiAgICAgICAgICAgICAgICBoZWFkZXJzID0gQ29uc3RhbnRzXzEuZGVmYXVsdC5kZWZhdWx0SGVhZGVycztcbiAgICAgICAgICAgICAgICBlbmRwb2ludCA9IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybCArIFwiL1wiICsgT21uaWNoYW5uZWxFbmRwb2ludHNfMS5kZWZhdWx0LkxpdmVDaGF0U2Vzc2lvbkluaXRQYXRoICsgXCIvXCIgKyB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZCArIFwiL1wiICsgdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWQgKyBcIi9cIiArIHJlcXVlc3RJZDtcbiAgICAgICAgICAgICAgICBpZiAoYXV0aGVudGljYXRlZFVzZXJUb2tlbikge1xuICAgICAgICAgICAgICAgICAgICBlbmRwb2ludCA9IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybCArIFwiL1wiICsgT21uaWNoYW5uZWxFbmRwb2ludHNfMS5kZWZhdWx0LkxpdmVDaGF0QXV0aFNlc3Npb25Jbml0UGF0aCArIFwiL1wiICsgdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWQgKyBcIi9cIiArIHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkICsgXCIvXCIgKyByZXF1ZXN0SWQ7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVyc18xLmRlZmF1bHQuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocmVjb25uZWN0SWQpIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnQgKz0gXCIvXCIgKyByZWNvbm5lY3RJZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZW5kcG9pbnQgKz0gXCI/Y2hhbm5lbElkPVwiICsgdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkO1xuICAgICAgICAgICAgICAgIGRhdGEgPSBpbml0Q29udGV4dCB8fCB7fTtcbiAgICAgICAgICAgICAgICBpZiAoZ2V0Q29udGV4dCAmJiAhd2luZG93LmRvY3VtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJnZXRDb250ZXh0IGlzIG9ubHkgc3VwcG9ydGVkIG9uIHdlYiBicm93c2Vyc1wiKSldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZ2V0Q29udGV4dCkge1xuICAgICAgICAgICAgICAgICAgICBkYXRhLmJyb3dzZXIgPSBCcm93c2VySW5mb18xLkJyb3dzZXJJbmZvLmdldEJyb3dzZXJOYW1lKCk7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEuZGV2aWNlID0gRGV2aWNlSW5mb18xLkRldmljZUluZm8uZ2V0RGV2aWNlVHlwZSgpO1xuICAgICAgICAgICAgICAgICAgICBkYXRhLm9yaWdpbnVybCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuICAgICAgICAgICAgICAgICAgICBkYXRhLm9zID0gT1NJbmZvXzEuT1NJbmZvLmdldE9zVHlwZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBTZXQgZGVmYXVsdCBsb2NhbGUgaWYgbG9jYWxlIGlzIGVtcHR5XG4gICAgICAgICAgICAgICAgaWYgKCFkYXRhLmxvY2FsZSkge1xuICAgICAgICAgICAgICAgICAgICBkYXRhLmxvY2FsZSA9IENvbnN0YW50c18xLmRlZmF1bHQuZGVmYXVsdExvY2FsZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gVmFsaWRhdGUgbG9jYWxlXG4gICAgICAgICAgICAgICAgaWYgKGRhdGEubG9jYWxlICYmICFMb2NhbGVzXzEuZGVmYXVsdC5zdXBwb3J0ZWRMb2NhbGVzLmluY2x1ZGVzKGRhdGEubG9jYWxlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgbG9jYWxlOiAnXCIgKyBkYXRhLmxvY2FsZSArIFwiJ1wiKSldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvcHRpb25zID0ge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICAgICAgICAgICAgICB1cmw6IGVuZHBvaW50XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyByZXR1cm4gX19hd2FpdGVyKF90aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCBlcnJvcl82LCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2EudHJ5cy5wdXNoKFswLCAyLCAsIDVdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIGF4aW9zSW5zdGFuY2Uob3B0aW9ucyldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubG9nZ2VyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIubG9nKExvZ0xldmVsXzEuTG9nTGV2ZWwuSU5GTywgRW51bXNfMi5PQ1NES1RlbGVtZXRyeUV2ZW50LlNFU1NJT05JTklUU1VDQ0VFREVELCB7IFJlcXVlc3RJZDogcmVxdWVzdElkLCBSZWdpb246IHJlc3BvbnNlLmRhdGEuUmVnaW9uLCBFbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzOiBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCBUcmFuc2FjdGlvbklkOiByZXNwb25zZS5oZWFkZXJzW1widHJhbnNhY3Rpb24taWRcIl0gfSwgXCJTZXNzaW9uIEluaXQgU3VjY2VlZGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszIC8qYnJlYWsqLywgNV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yXzYgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5sb2dnZXIpIHJldHVybiBbMyAvKmJyZWFrKi8sIDRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgTG9nZ2luZ1Nhbml0aXplcl8xLkxvZ2dpbmdTYW5pdGl6ZXIuc3RyaXBFcnJvclNlbnNpdGl2ZVByb3BlcnRpZXMoZXJyb3JfNildO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5sb2coTG9nTGV2ZWxfMS5Mb2dMZXZlbC5FUlJPUiwgRW51bXNfMi5PQ1NES1RlbGVtZXRyeUV2ZW50LlNFU1NJT05JTklURkFJTEVELCB7IFJlcXVlc3RJZDogcmVxdWVzdElkLCBFeGNlcHRpb25EZXRhaWxzOiBlcnJvcl82LCBFbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzOiBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzIH0sIFwiU2Vzc2lvbiBJbml0IEZhaWxlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9hLmxhYmVsID0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yXzYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszIC8qYnJlYWsqLywgNV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNTogcmV0dXJuIFsyIC8qcmV0dXJuKi9dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTsgfSldO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogQ2xvc2VzIHRoZSBvbW5pY2hhbm5lbCBzZXNzaW9uLlxuICAgICAqIEBwYXJhbSByZXF1ZXN0SWQ6IFJlcXVlc3RJZCB0byB1c2UgZm9yIHNlc3Npb24gY2xvc2UgKHNhbWUgcmVxdWVzdCBpZCBmb3Igc2Vzc2lvbiBpbml0KS5cbiAgICAgKiBAcGFyYW0gc2Vzc2lvbkNsb3NlT3B0aW9uYWxQYXJhbXM6IE9wdGlvbmFsIHBhcmFtZXRlcnMgZm9yIHNlc3Npb24gY2xvc2UuXG4gICAgICovXG4gICAgU0RLLnByb3RvdHlwZS5zZXNzaW9uQ2xvc2UgPSBmdW5jdGlvbiAocmVxdWVzdElkLCBzZXNzaW9uQ2xvc2VPcHRpb25hbFBhcmFtcykge1xuICAgICAgICBpZiAoc2Vzc2lvbkNsb3NlT3B0aW9uYWxQYXJhbXMgPT09IHZvaWQgMCkgeyBzZXNzaW9uQ2xvc2VPcHRpb25hbFBhcmFtcyA9IHt9OyB9XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB0aW1lciwgZW5kcG9pbnQsIGF4aW9zSW5zdGFuY2UsIGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4sIGlzUmVjb25uZWN0Q2hhdCwgaXNQZXJzaXN0ZW50Q2hhdCwgY2hhdElkLCBoZWFkZXJzLCBkYXRhLCBvcHRpb25zO1xuICAgICAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICB0aW1lciA9IFRpbWVyXzEuVGltZXIuVElNRVIoKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5sb2dnZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIubG9nKExvZ0xldmVsXzEuTG9nTGV2ZWwuSU5GTywgRW51bXNfMi5PQ1NES1RlbGVtZXRyeUV2ZW50LlNFU1NJT05DTE9TRVNUQVJURUQsIHsgUmVxdWVzdElkOiByZXF1ZXN0SWQgfSwgXCJTZXNzaW9uIENsb3NlIFN0YXJ0ZWRcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVuZHBvaW50ID0gdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsICsgXCIvXCIgKyBPbW5pY2hhbm5lbEVuZHBvaW50c18xLmRlZmF1bHQuTGl2ZUNoYXRTZXNzaW9uQ2xvc2VQYXRoICsgXCIvXCIgKyB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZCArIFwiL1wiICsgdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWQgKyBcIi9cIiArIHJlcXVlc3RJZCArIFwiP2NoYW5uZWxJZD1cIiArIHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZDtcbiAgICAgICAgICAgICAgICBheGlvc0luc3RhbmNlID0gYXhpb3NfMS5kZWZhdWx0LmNyZWF0ZSgpO1xuICAgICAgICAgICAgICAgIGF4aW9zUmV0cnlfMS5kZWZhdWx0KGF4aW9zSW5zdGFuY2UsIHsgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlIH0pO1xuICAgICAgICAgICAgICAgIGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4gPSBzZXNzaW9uQ2xvc2VPcHRpb25hbFBhcmFtcy5hdXRoZW50aWNhdGVkVXNlclRva2VuLCBpc1JlY29ubmVjdENoYXQgPSBzZXNzaW9uQ2xvc2VPcHRpb25hbFBhcmFtcy5pc1JlY29ubmVjdENoYXQsIGlzUGVyc2lzdGVudENoYXQgPSBzZXNzaW9uQ2xvc2VPcHRpb25hbFBhcmFtcy5pc1BlcnNpc3RlbnRDaGF0LCBjaGF0SWQgPSBzZXNzaW9uQ2xvc2VPcHRpb25hbFBhcmFtcy5jaGF0SWQ7XG4gICAgICAgICAgICAgICAgaGVhZGVycyA9IENvbnN0YW50c18xLmRlZmF1bHQuZGVmYXVsdEhlYWRlcnM7XG4gICAgICAgICAgICAgICAgZGF0YSA9IHt9O1xuICAgICAgICAgICAgICAgIGRhdGEuY2hhdElkID0gY2hhdElkO1xuICAgICAgICAgICAgICAgIGlmIChhdXRoZW50aWNhdGVkVXNlclRva2VuKSB7XG4gICAgICAgICAgICAgICAgICAgIGVuZHBvaW50ID0gdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsICsgXCIvXCIgKyBPbW5pY2hhbm5lbEVuZHBvaW50c18xLmRlZmF1bHQuTGl2ZUNoYXRBdXRoU2Vzc2lvbkNsb3NlUGF0aCArIFwiL1wiICsgdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWQgKyBcIi9cIiArIHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkICsgXCIvXCIgKyByZXF1ZXN0SWQgKyBcIj9jaGFubmVsSWQ9XCIgKyB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWQ7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVyc18xLmRlZmF1bHQuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaXNSZWNvbm5lY3RDaGF0KSB7XG4gICAgICAgICAgICAgICAgICAgIGVuZHBvaW50ICs9IFwiJmlzUmVjb25uZWN0Q2hhdD10cnVlXCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpc1BlcnNpc3RlbnRDaGF0KSB7XG4gICAgICAgICAgICAgICAgICAgIGVuZHBvaW50ICs9IFwiJmlzUGVyc2lzdGVudENoYXQ9dHJ1ZVwiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvcHRpb25zID0ge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICAgICAgICAgICAgICB1cmw6IGVuZHBvaW50XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyByZXR1cm4gX19hd2FpdGVyKF90aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCBlcnJvcl83LCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2EudHJ5cy5wdXNoKFswLCAyLCAsIDVdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIGF4aW9zSW5zdGFuY2Uob3B0aW9ucyldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubG9nZ2VyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIubG9nKExvZ0xldmVsXzEuTG9nTGV2ZWwuSU5GTywgRW51bXNfMi5PQ1NES1RlbGVtZXRyeUV2ZW50LlNFU1NJT05DTE9TRVNVQ0NFRURFRCwgeyBSZXF1ZXN0SWQ6IHJlcXVlc3RJZCwgUmVnaW9uOiByZXNwb25zZS5kYXRhLlJlZ2lvbiwgRWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczogZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgVHJhbnNhY3Rpb25JZDogcmVzcG9uc2UuaGVhZGVyc1tcInRyYW5zYWN0aW9uLWlkXCJdIH0sIFwiU2Vzc2lvbiBDbG9zZSBTdWNjZWVkZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMgLypicmVhayovLCA1XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfNyA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmxvZ2dlcikgcmV0dXJuIFszIC8qYnJlYWsqLywgNF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCBMb2dnaW5nU2FuaXRpemVyXzEuTG9nZ2luZ1Nhbml0aXplci5zdHJpcEVycm9yU2Vuc2l0aXZlUHJvcGVydGllcyhlcnJvcl83KV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmxvZyhMb2dMZXZlbF8xLkxvZ0xldmVsLkVSUk9SLCBFbnVtc18yLk9DU0RLVGVsZW1ldHJ5RXZlbnQuU0VTU0lPTkNMT1NFRkFJTEVELCB7IFJlcXVlc3RJZDogcmVxdWVzdElkLCBFeGNlcHRpb25EZXRhaWxzOiBlcnJvcl83LCBFbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzOiBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzIH0sIFwiU2Vzc2lvbiBDbG9zZSBGYWlsZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYS5sYWJlbCA9IDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszIC8qYnJlYWsqLywgNV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNTogcmV0dXJuIFsyIC8qcmV0dXJuKi9dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTsgfSldO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogVmFsaWRhdGUgdGhlIGF1dGggY2hhdCByZWNvcmQgZXhpc3RzIGluIGRhdGFiYXNlLlxuICAgICAqIEBwYXJhbSByZXF1ZXN0SWQ6IFJlcXVlc3RJZCBmb3IgdmFsaWRhdGVBdXRoQ2hhdFJlY29yZCAoc2FtZSByZXF1ZXN0IGlkIGZvciBzZXNzaW9uIGluaXQpLlxuICAgICAqIEBwYXJhbSB2YWxpZGF0ZUF1dGhDaGF0UmVjb3JkT3B0aW9uYWxQYXJhbXM6IE9wdGlvbmFsIHBhcmFtZXRlcnMgZm9yIHZhbGlkYXRlQXV0aENoYXRSZWNvcmQuXG4gICAgICovXG4gICAgU0RLLnByb3RvdHlwZS52YWxpZGF0ZUF1dGhDaGF0UmVjb3JkID0gZnVuY3Rpb24gKHJlcXVlc3RJZCwgdmFsaWRhdGVBdXRoQ2hhdFJlY29yZE9wdGlvbmFsUGFyYW1zKSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZDtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHRpbWVyLCBhdXRoZW50aWNhdGVkVXNlclRva2VuLCBjaGF0SWQsIGVuZHBvaW50LCBheGlvc0luc3RhbmNlLCBoZWFkZXJzLCBvcHRpb25zLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgZXJyb3JfOCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcztcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2UpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKF9lLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyID0gVGltZXJfMS5UaW1lci5USU1FUigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubG9nZ2VyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIubG9nKExvZ0xldmVsXzEuTG9nTGV2ZWwuSU5GTywgRW51bXNfMi5PQ1NES1RlbGVtZXRyeUV2ZW50LlZBTElEQVRFQVVUSENIQVRSRUNPUkRTVEFSVEVELCB7IFJlcXVlc3RJZDogcmVxdWVzdElkIH0sIFwiVmFsaWRhdGUgQXV0aCBDaGF0IFJlY29yZCBTdGFydGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYXV0aGVudGljYXRlZFVzZXJUb2tlbiA9IHZhbGlkYXRlQXV0aENoYXRSZWNvcmRPcHRpb25hbFBhcmFtcy5hdXRoZW50aWNhdGVkVXNlclRva2VuLCBjaGF0SWQgPSB2YWxpZGF0ZUF1dGhDaGF0UmVjb3JkT3B0aW9uYWxQYXJhbXMuY2hhdElkO1xuICAgICAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnQgPSB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmwgKyBcIi9cIiArIE9tbmljaGFubmVsRW5kcG9pbnRzXzEuZGVmYXVsdC5MaXZlQ2hhdFZhbGlkYXRlQXV0aENoYXRNYXBSZWNvcmRQYXRoICsgXCIvXCIgKyB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZCArIFwiL1wiICsgdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWQgKyBcIi9cIiArIGNoYXRJZCArIFwiL1wiICsgcmVxdWVzdElkICsgXCI/Y2hhbm5lbElkPVwiICsgdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXhpb3NJbnN0YW5jZSA9IGF4aW9zXzEuZGVmYXVsdC5jcmVhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF4aW9zUmV0cnlfMS5kZWZhdWx0KGF4aW9zSW5zdGFuY2UsIHsgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVycyA9IENvbnN0YW50c18xLmRlZmF1bHQuZGVmYXVsdEhlYWRlcnM7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXV0aGVudGljYXRlZFVzZXJUb2tlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVyc18xLmRlZmF1bHQuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IGVuZHBvaW50XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgX2UubGFiZWwgPSAxO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICBfZS50cnlzLnB1c2goWzEsIDMsICwgNV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgYXhpb3NJbnN0YW5jZShvcHRpb25zKV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gX2Uuc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKChfYSA9IHJlc3BvbnNlLmRhdGEpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5hdXRoQ2hhdEV4aXN0KSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfYiA9IHRoaXMubG9nZ2VyKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IubG9nKExvZ0xldmVsXzEuTG9nTGV2ZWwuSU5GTywgRW51bXNfMi5PQ1NES1RlbGVtZXRyeUV2ZW50LlZBTElEQVRFQVVUSENIQVRSRUNPUkRTVUNDRUVERUQsIHsgUmVxdWVzdElkOiByZXF1ZXN0SWQsIFJlZ2lvbjogcmVzcG9uc2UuZGF0YS5SZWdpb24sIEVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHM6IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIFRyYW5zYWN0aW9uSWQ6IHJlc3BvbnNlLmhlYWRlcnNbXCJ0cmFuc2FjdGlvbi1pZFwiXSB9LCBcIlZhbGlkYXRlIEF1dGggQ2hhdCBSZWNvcmQgU3VjY2VlZGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBQcm9taXNlLnJlc29sdmUocmVzcG9uc2UuZGF0YSldO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9jID0gdGhpcy5sb2dnZXIpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5sb2coTG9nTGV2ZWxfMS5Mb2dMZXZlbC5JTkZPLCBFbnVtc18yLk9DU0RLVGVsZW1ldHJ5RXZlbnQuVkFMSURBVEVBVVRIQ0hBVFJFQ09SREZBSUxFRCwgeyBSZXF1ZXN0SWQ6IHJlcXVlc3RJZCwgUmVnaW9uOiByZXNwb25zZS5kYXRhLlJlZ2lvbiwgRWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczogZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgVHJhbnNhY3Rpb25JZDogcmVzcG9uc2UuaGVhZGVyc1tcInRyYW5zYWN0aW9uLWlkXCJdLCBFcnJvckNvZGU6IHJlc3BvbnNlLnN0YXR1cyB9LCBcIlZhbGlkYXRlIEF1dGggQ2hhdCBSZWNvcmQgRmFpbGVkLiBSZWNvcmQgaXMgbm90IGZvdW5kIG9yIHJlcXVlc3QgaXMgbm90IGF1dGhvcml6ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIlZhbGlkYXRlIEF1dGggQ2hhdCBSZWNvcmQgRmFpbGVkLiBSZWNvcmQgaXMgbm90IGZvdW5kIG9yIHJlcXVlc3QgaXMgbm90IGF1dGhvcml6ZWRcIikpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDVdO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl84ID0gX2Uuc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCBMb2dnaW5nU2FuaXRpemVyXzEuTG9nZ2luZ1Nhbml0aXplci5zdHJpcEVycm9yU2Vuc2l0aXZlUHJvcGVydGllcyhlcnJvcl84KV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgICAgIF9lLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIChfZCA9IHRoaXMubG9nZ2VyKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QubG9nKExvZ0xldmVsXzEuTG9nTGV2ZWwuRVJST1IsIEVudW1zXzIuT0NTREtUZWxlbWV0cnlFdmVudC5WQUxJREFURUFVVEhDSEFUUkVDT1JERkFJTEVELCB7IFJlcXVlc3RJZDogcmVxdWVzdElkLCBFeGNlcHRpb25EZXRhaWxzOiBlcnJvcl84LCBFbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzOiBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzIH0sIFwiVmFsaWRhdGUgQXV0aCBDaGF0IFJlY29yZCBGYWlsZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3JfOC50b1N0cmluZygpID09PSBcIkVycm9yOiBSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlIDQwNFwiKSB7IC8vIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgUHJvbWlzZS5yZXNvbHZlKHt9KV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgUHJvbWlzZS5yZWplY3QoKV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMgLypicmVhayovLCA1XTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA1OiByZXR1cm4gWzIgLypyZXR1cm4qL107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogU3VibWl0cyBwb3N0IGNoYXQgcmVzcG9uc2UuXG4gICAgICogQHBhcmFtIHJlcXVlc3RJZCBSZXF1ZXN0SWQgb2YgdGhlIG9tbmljaGFubmVsIHNlc3Npb24uXG4gICAgICogQHBhcmFtIHBvc3RDaGF0UmVzcG9uc2UgUG9zdCBjaGF0IHJlc3BvbnNlIHRvIHN1Ym1pdC5cbiAgICAgKiBAcGFyYW0gc3VibWl0UG9zdENoYXRSZXNwb25zZU9wdGlvbmFsUGFyYW1zOiBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciBzdWJtaXQgcG9zdCBjaGF0IHJlc3BvbnNlLlxuICAgICAqL1xuICAgIFNESy5wcm90b3R5cGUuc3VibWl0UG9zdENoYXRSZXNwb25zZSA9IGZ1bmN0aW9uIChyZXF1ZXN0SWQsIHBvc3RDaGF0UmVzcG9uc2UsIHN1Ym1pdFBvc3RDaGF0UmVzcG9uc2VPcHRpb25hbFBhcmFtcykge1xuICAgICAgICBpZiAoc3VibWl0UG9zdENoYXRSZXNwb25zZU9wdGlvbmFsUGFyYW1zID09PSB2b2lkIDApIHsgc3VibWl0UG9zdENoYXRSZXNwb25zZU9wdGlvbmFsUGFyYW1zID0ge307IH1cbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHRpbWVyLCBlbmRwb2ludCwgYXhpb3NJbnN0YW5jZSwgYXV0aGVudGljYXRlZFVzZXJUb2tlbiwgaGVhZGVycywgb3B0aW9ucztcbiAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgdGltZXIgPSBUaW1lcl8xLlRpbWVyLlRJTUVSKCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubG9nZ2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmxvZyhMb2dMZXZlbF8xLkxvZ0xldmVsLklORk8sIEVudW1zXzIuT0NTREtUZWxlbWV0cnlFdmVudC5TVUJNSVRQT1NUQ0hBVFNUQVJURUQsIHsgUmVxdWVzdElkOiByZXF1ZXN0SWQgfSwgXCJTdWJtaXQgUG9zdCBDaGF0IFN0YXJ0ZWRcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVuZHBvaW50ID0gdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsICsgXCIvXCIgKyBPbW5pY2hhbm5lbEVuZHBvaW50c18xLmRlZmF1bHQuTGl2ZUNoYXRTdWJtaXRQb3N0Q2hhdFBhdGggKyBcIi9cIiArIHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkICsgXCIvXCIgKyB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZCArIFwiL1wiICsgcmVxdWVzdElkICsgXCI/Y2hhbm5lbElkPVwiICsgdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkO1xuICAgICAgICAgICAgICAgIGF4aW9zSW5zdGFuY2UgPSBheGlvc18xLmRlZmF1bHQuY3JlYXRlKCk7XG4gICAgICAgICAgICAgICAgYXhpb3NSZXRyeV8xLmRlZmF1bHQoYXhpb3NJbnN0YW5jZSwgeyByZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ubWF4UmVxdWVzdFJldHJpZXNPbkZhaWx1cmUgfSk7XG4gICAgICAgICAgICAgICAgYXV0aGVudGljYXRlZFVzZXJUb2tlbiA9IHN1Ym1pdFBvc3RDaGF0UmVzcG9uc2VPcHRpb25hbFBhcmFtcy5hdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgICAgICAgICAgICAgIGhlYWRlcnMgPSBDb25zdGFudHNfMS5kZWZhdWx0LmRlZmF1bHRIZWFkZXJzO1xuICAgICAgICAgICAgICAgIGlmIChhdXRoZW50aWNhdGVkVXNlclRva2VuKSB7XG4gICAgICAgICAgICAgICAgICAgIGVuZHBvaW50ID0gdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsICsgXCIvXCIgKyBPbW5pY2hhbm5lbEVuZHBvaW50c18xLmRlZmF1bHQuTGl2ZUNoYXRBdXRoU3VibWl0UG9zdENoYXRQYXRoICsgXCIvXCIgKyB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZCArIFwiL1wiICsgdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWQgKyBcIi9cIiArIHJlcXVlc3RJZCArIFwiP2NoYW5uZWxJZD1cIiArIHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZDtcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzXzEuZGVmYXVsdC5hdXRoZW50aWNhdGVkVXNlclRva2VuXSA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KHBvc3RDaGF0UmVzcG9uc2UpLFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICAgICAgICAgICAgICB1cmw6IGVuZHBvaW50XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyByZXR1cm4gX19hd2FpdGVyKF90aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCBlcnJvcl85LCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2EudHJ5cy5wdXNoKFswLCAyLCAsIDVdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIGF4aW9zSW5zdGFuY2Uob3B0aW9ucyldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubG9nZ2VyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIubG9nKExvZ0xldmVsXzEuTG9nTGV2ZWwuSU5GTywgRW51bXNfMi5PQ1NES1RlbGVtZXRyeUV2ZW50LlNVQk1JVFBPU1RDSEFUU1VDQ0VFREVELCB7IFJlcXVlc3RJZDogcmVxdWVzdElkLCBSZWdpb246IHJlc3BvbnNlLmRhdGEuUmVnaW9uLCBFbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzOiBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCBUcmFuc2FjdGlvbklkOiByZXNwb25zZS5oZWFkZXJzW1widHJhbnNhY3Rpb24taWRcIl0gfSwgXCJTdWJtaXQgUG9zdCBDaGF0IFN1Y2NlZWRlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl85ID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMubG9nZ2VyKSByZXR1cm4gWzMgLypicmVhayovLCA0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIExvZ2dpbmdTYW5pdGl6ZXJfMS5Mb2dnaW5nU2FuaXRpemVyLnN0cmlwRXJyb3JTZW5zaXRpdmVQcm9wZXJ0aWVzKGVycm9yXzkpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIubG9nKExvZ0xldmVsXzEuTG9nTGV2ZWwuRVJST1IsIEVudW1zXzIuT0NTREtUZWxlbWV0cnlFdmVudC5TVUJNSVRQT1NUQ0hBVEZBSUxFRCwgeyBSZXF1ZXN0SWQ6IHJlcXVlc3RJZCwgRXhjZXB0aW9uRGV0YWlsczogZXJyb3JfOSwgRWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczogZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyB9LCBcIlN1Ym1pdCBQb3N0IENoYXQgRmFpbGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2EubGFiZWwgPSA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDU6IHJldHVybiBbMiAvKnJldHVybiovXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7IH0pXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFN1Ym1pdHMgcG9zdCBjaGF0IHJlc3BvbnNlLlxuICAgICAqIEBwYXJhbSByZXF1ZXN0SWQgUmVxdWVzdElkIG9mIHRoZSBvbW5pY2hhbm5lbCBzZXNzaW9uLlxuICAgICAqIEBwYXJhbSBwb3N0Q2hhdFJlc3BvbnNlIFBvc3QgY2hhdCByZXNwb25zZSB0byBzdWJtaXQuXG4gICAgICogQHBhcmFtIHN1Ym1pdFBvc3RDaGF0UmVzcG9uc2VPcHRpb25hbFBhcmFtczogT3B0aW9uYWwgcGFyYW1ldGVycyBmb3Igc3VibWl0IHBvc3QgY2hhdCByZXNwb25zZS5cbiAgICAgKi9cbiAgICBTREsucHJvdG90eXBlLmdldFN1cnZleUludml0ZUxpbmsgPSBmdW5jdGlvbiAoc3VydmV5T3duZXJJZCwgc3VydmV5SW52aXRlQVBJUmVxdWVzdEJvZHksIGdldHN1cnZleUludml0ZUxpbmtPcHRpb25hbFBhcmFtcykge1xuICAgICAgICBpZiAoZ2V0c3VydmV5SW52aXRlTGlua09wdGlvbmFsUGFyYW1zID09PSB2b2lkIDApIHsgZ2V0c3VydmV5SW52aXRlTGlua09wdGlvbmFsUGFyYW1zID0ge307IH1cbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHRpbWVyLCBlbmRwb2ludCwgYXhpb3NJbnN0YW5jZSwgYXV0aGVudGljYXRlZFVzZXJUb2tlbiwgcmVxdWVzdElkLCBoZWFkZXJzLCBvcHRpb25zO1xuICAgICAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICB0aW1lciA9IFRpbWVyXzEuVGltZXIuVElNRVIoKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5sb2dnZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIubG9nKExvZ0xldmVsXzEuTG9nTGV2ZWwuSU5GTywgRW51bXNfMi5PQ1NES1RlbGVtZXRyeUV2ZW50LkdFVFNVUlZFWUlOVklURUxJTktTVEFSVEVELCB7IFN1cnZleU93bmVySWQ6IHN1cnZleU93bmVySWQgfSwgXCJHZXQgU3VydmV5IEludml0ZSBMaW5rIFN0YXJ0ZWRcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVuZHBvaW50ID0gdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsICsgXCIvXCIgKyBPbW5pY2hhbm5lbEVuZHBvaW50c18xLmRlZmF1bHQuTGl2ZUNoYXRHZXRTdXJ2ZXlJbnZpdGVMaW5rUGF0aCArIFwiL1wiICsgdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWQgKyBcIi9cIiArIHN1cnZleU93bmVySWQ7XG4gICAgICAgICAgICAgICAgYXhpb3NJbnN0YW5jZSA9IGF4aW9zXzEuZGVmYXVsdC5jcmVhdGUoKTtcbiAgICAgICAgICAgICAgICBheGlvc1JldHJ5XzEuZGVmYXVsdChheGlvc0luc3RhbmNlLCB7IHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSB9KTtcbiAgICAgICAgICAgICAgICBhdXRoZW50aWNhdGVkVXNlclRva2VuID0gZ2V0c3VydmV5SW52aXRlTGlua09wdGlvbmFsUGFyYW1zLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4sIHJlcXVlc3RJZCA9IGdldHN1cnZleUludml0ZUxpbmtPcHRpb25hbFBhcmFtcy5yZXF1ZXN0SWQ7XG4gICAgICAgICAgICAgICAgaGVhZGVycyA9IENvbnN0YW50c18xLmRlZmF1bHQuZGVmYXVsdEhlYWRlcnM7XG4gICAgICAgICAgICAgICAgaWYgKGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnQgPSB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmwgKyBcIi9cIiArIE9tbmljaGFubmVsRW5kcG9pbnRzXzEuZGVmYXVsdC5MaXZlQ2hhdEF1dGhHZXRTdXJ2ZXlJbnZpdGVMaW5rUGF0aCArIFwiL1wiICsgdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWQgKyBcIi9cIiArIHN1cnZleU93bmVySWQ7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVyc18xLmRlZmF1bHQuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnNfMS5kZWZhdWx0LndpZGdldEFwcElkXSA9IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocmVxdWVzdElkKSB7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVyc18xLmRlZmF1bHQucmVxdWVzdElkXSA9IHJlcXVlc3RJZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogSlNPTi5zdHJpbmdpZnkoc3VydmV5SW52aXRlQVBJUmVxdWVzdEJvZHkpLFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICAgICAgICAgICAgICB1cmw6IGVuZHBvaW50XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyByZXR1cm4gX19hd2FpdGVyKF90aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3BvbnNlLCBkYXRhLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCBlcnJvcl8xMCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcztcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9hLnRyeXMucHVzaChbMCwgMiwgLCA1XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCBheGlvc0luc3RhbmNlKG9wdGlvbnMpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gcmVzcG9uc2UuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubG9nZ2VyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIubG9nKExvZ0xldmVsXzEuTG9nTGV2ZWwuSU5GTywgRW51bXNfMi5PQ1NES1RlbGVtZXRyeUV2ZW50LkdFVFNVUlZFWUlOVklURUxJTktTVUNDRUVERUQsIHsgUmVnaW9uOiByZXNwb25zZS5kYXRhLlJlZ2lvbiwgRWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczogZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgVHJhbnNhY3Rpb25JZDogcmVzcG9uc2UuaGVhZGVyc1tcInRyYW5zYWN0aW9uLWlkXCJdIH0sIFwiR2V0IFN1cnZleSBJbnZpdGUgTGluayBTdWNjZWVkZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszIC8qYnJlYWsqLywgNV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yXzEwID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMubG9nZ2VyKSByZXR1cm4gWzMgLypicmVhayovLCA0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIExvZ2dpbmdTYW5pdGl6ZXJfMS5Mb2dnaW5nU2FuaXRpemVyLnN0cmlwRXJyb3JTZW5zaXRpdmVQcm9wZXJ0aWVzKGVycm9yXzEwKV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmxvZyhMb2dMZXZlbF8xLkxvZ0xldmVsLkVSUk9SLCBFbnVtc18yLk9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUU1VSVkVZSU5WSVRFTElOS0ZBSUxFRCwgeyBFeGNlcHRpb25EZXRhaWxzOiBlcnJvcl8xMCwgRWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczogZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyB9LCBcIkdldCBTdXJ2ZXkgSW52aXRlIExpbmsgRmFpbGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2EubGFiZWwgPSA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDU6IHJldHVybiBbMiAvKnJldHVybiovXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7IH0pXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEdldCBjaGF0IHRyYW5zY3JpcHRzIGZvciBjdXN0b21lci5cbiAgICAgKiBAcGFyYW0gcmVxdWVzdElkIFJlcXVlc3RJZCBvZiB0aGUgb21uaWNoYW5uZWwgc2Vzc2lvbi5cbiAgICAgKiBAcGFyYW0gY2hhdElkIENoYXQgdGhyZWFkIElkLlxuICAgICAqIEBwYXJhbSB0b2tlbiBTa3lwZSB0b2tlbi5cbiAgICAgKiBAcGFyYW0gZ2V0Q2hhdFRyYW5zY3JpcHRzT3B0aW9uYWxQYXJhbXMgT3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgZ2V0IGNoYXQgdHJhbnNjcmlwdHMuXG4gICAgICovXG4gICAgU0RLLnByb3RvdHlwZS5nZXRDaGF0VHJhbnNjcmlwdHMgPSBmdW5jdGlvbiAocmVxdWVzdElkLCBjaGF0SWQsIHRva2VuLCBnZXRDaGF0VHJhbnNjcmlwdHNPcHRpb25hbFBhcmFtcykge1xuICAgICAgICBpZiAoZ2V0Q2hhdFRyYW5zY3JpcHRzT3B0aW9uYWxQYXJhbXMgPT09IHZvaWQgMCkgeyBnZXRDaGF0VHJhbnNjcmlwdHNPcHRpb25hbFBhcmFtcyA9IHt9OyB9XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB0aW1lciwgZW5kcG9pbnQsIGF4aW9zSW5zdGFuY2UsIGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4sIGN1cnJlbnRMaXZlQ2hhdFZlcnNpb24sIGhlYWRlcnMsIG9wdGlvbnM7XG4gICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIHRpbWVyID0gVGltZXJfMS5UaW1lci5USU1FUigpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmxvZ2dlcikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5sb2coTG9nTGV2ZWxfMS5Mb2dMZXZlbC5JTkZPLCBFbnVtc18yLk9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUQ0hBVFRSQU5TQ1JJUFRTVEFSVEVELCB7IFJlcXVlc3RJZDogcmVxdWVzdElkIH0sIFwiR2V0IENoYXQgVHJhbnNjcmlwdCBTdGFydGVkXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbmRwb2ludCA9IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybCArIFwiL1wiICsgT21uaWNoYW5uZWxFbmRwb2ludHNfMS5kZWZhdWx0LkxpdmVDaGF0R2V0Q2hhdFRyYW5zY3JpcHRQYXRoICsgXCIvXCIgKyBjaGF0SWQgKyBcIi9cIiArIHJlcXVlc3RJZCArIFwiP2NoYW5uZWxJZD1cIiArIHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZDtcbiAgICAgICAgICAgICAgICBheGlvc0luc3RhbmNlID0gYXhpb3NfMS5kZWZhdWx0LmNyZWF0ZSgpO1xuICAgICAgICAgICAgICAgIGF4aW9zUmV0cnlfMS5kZWZhdWx0KGF4aW9zSW5zdGFuY2UsIHsgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlIH0pO1xuICAgICAgICAgICAgICAgIGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4gPSBnZXRDaGF0VHJhbnNjcmlwdHNPcHRpb25hbFBhcmFtcy5hdXRoZW50aWNhdGVkVXNlclRva2VuLCBjdXJyZW50TGl2ZUNoYXRWZXJzaW9uID0gZ2V0Q2hhdFRyYW5zY3JpcHRzT3B0aW9uYWxQYXJhbXMuY3VycmVudExpdmVDaGF0VmVyc2lvbjtcbiAgICAgICAgICAgICAgICBoZWFkZXJzID0gQ29uc3RhbnRzXzEuZGVmYXVsdC5kZWZhdWx0SGVhZGVycztcbiAgICAgICAgICAgICAgICBoZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnNfMS5kZWZhdWx0Lm9yZ2FuaXphdGlvbklkXSA9IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkO1xuICAgICAgICAgICAgICAgIGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVyc18xLmRlZmF1bHQud2lkZ2V0QXBwSWRdID0gdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWQ7XG4gICAgICAgICAgICAgICAgaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzXzEuZGVmYXVsdC5hdXRob3JpemF0aW9uXSA9IHRva2VuO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmxpdmVDaGF0VmVyc2lvbiA9PT0gRW51bXNfMS5MaXZlQ2hhdFZlcnNpb24uVjIgfHwgKGN1cnJlbnRMaXZlQ2hhdFZlcnNpb24gJiYgY3VycmVudExpdmVDaGF0VmVyc2lvbiA9PT0gRW51bXNfMS5MaXZlQ2hhdFZlcnNpb24uVjIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGVuZHBvaW50ID0gdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsICsgXCIvXCIgKyBPbW5pY2hhbm5lbEVuZHBvaW50c18xLmRlZmF1bHQuTGl2ZUNoYXR2MkdldENoYXRUcmFuc2NyaXB0UGF0aCArIFwiL1wiICsgY2hhdElkICsgXCIvXCIgKyByZXF1ZXN0SWQgKyBcIj9jaGFubmVsSWQ9XCIgKyB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhdXRoZW50aWNhdGVkVXNlclRva2VuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRwb2ludCA9IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybCArIFwiL1wiICsgT21uaWNoYW5uZWxFbmRwb2ludHNfMS5kZWZhdWx0LkxpdmVDaGF0djJBdXRoR2V0Q2hhdFRyYW5zY3JpcHRQYXRoICsgXCIvXCIgKyBjaGF0SWQgKyBcIi9cIiArIHJlcXVlc3RJZCArIFwiP2NoYW5uZWxJZD1cIiArIHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChhdXRoZW50aWNhdGVkVXNlclRva2VuKSB7XG4gICAgICAgICAgICAgICAgICAgIGVuZHBvaW50ID0gdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsICsgXCIvXCIgKyBPbW5pY2hhbm5lbEVuZHBvaW50c18xLmRlZmF1bHQuTGl2ZUNoYXRBdXRoR2V0Q2hhdFRyYW5zY3JpcHRQYXRoICsgXCIvXCIgKyBjaGF0SWQgKyBcIi9cIiArIHJlcXVlc3RJZCArIFwiP2NoYW5uZWxJZD1cIiArIHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgICAgICAgICAgICAgICB1cmw6IGVuZHBvaW50XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyByZXR1cm4gX19hd2FpdGVyKF90aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCBkYXRhLCBlcnJvcl8xMSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcztcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9hLnRyeXMucHVzaChbMCwgMiwgLCA1XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCBheGlvc0luc3RhbmNlKG9wdGlvbnMpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSByZXNwb25zZS5kYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubG9nZ2VyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIubG9nKExvZ0xldmVsXzEuTG9nTGV2ZWwuSU5GTywgRW51bXNfMi5PQ1NES1RlbGVtZXRyeUV2ZW50LkdFVENIQVRUUkFOU0NSSVBUU1VDQ0VFREVELCB7IFJlcXVlc3RJZDogcmVxdWVzdElkLCBSZWdpb246IHJlc3BvbnNlLmRhdGEuUmVnaW9uLCBFbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzOiBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCBUcmFuc2FjdGlvbklkOiByZXNwb25zZS5oZWFkZXJzW1widHJhbnNhY3Rpb24taWRcIl0gfSwgXCJHZXQgQ2hhdCBUcmFuc2NyaXB0IFN1Y2NlZWRlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMgLypicmVhayovLCA1XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfMTEgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5sb2dnZXIpIHJldHVybiBbMyAvKmJyZWFrKi8sIDRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgTG9nZ2luZ1Nhbml0aXplcl8xLkxvZ2dpbmdTYW5pdGl6ZXIuc3RyaXBFcnJvclNlbnNpdGl2ZVByb3BlcnRpZXMoZXJyb3JfMTEpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIubG9nKExvZ0xldmVsXzEuTG9nTGV2ZWwuRVJST1IsIEVudW1zXzIuT0NTREtUZWxlbWV0cnlFdmVudC5HRVRDSEFUVFJBTlNDUklQVEZBSUxFRCwgeyBSZXF1ZXN0SWQ6IHJlcXVlc3RJZCwgRXhjZXB0aW9uRGV0YWlsczogZXJyb3JfMTEsIEVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHM6IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgfSwgXCJHZXQgQ2hhdCBUcmFuc2NyaXB0IEZhaWxlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9hLmxhYmVsID0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yXzExKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDU6IHJldHVybiBbMiAvKnJldHVybiovXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7IH0pXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEVtYWlsIHRyYW5zY3JpcHQgdG8gY3VzdG9tZXIuXG4gICAgICogQHBhcmFtIHJlcXVlc3RJZCBSZXF1ZXN0SWQgb2YgdGhlIG9tbmljaGFubmVsIHNlc3Npb24uXG4gICAgICogQHBhcmFtIHRva2VuIFNreXBlIHRva2VuLlxuICAgICAqIEBwYXJhbSBlbWFpbFJlcXVlc3RCb2R5IEVtYWlsIHJlcXVlc3QgYm9keS5cbiAgICAgKiBAcGFyYW0gZW1haWxUcmFuc2NyaXB0T3B0aW9uYWxQYXJhbXMgT3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgZW1haWwgdHJhbnNjcmlwdC5cbiAgICAgKi9cbiAgICBTREsucHJvdG90eXBlLmVtYWlsVHJhbnNjcmlwdCA9IGZ1bmN0aW9uIChyZXF1ZXN0SWQsIHRva2VuLCBlbWFpbFJlcXVlc3RCb2R5LCBlbWFpbFRyYW5zY3JpcHRPcHRpb25hbFBhcmFtcykge1xuICAgICAgICBpZiAoZW1haWxUcmFuc2NyaXB0T3B0aW9uYWxQYXJhbXMgPT09IHZvaWQgMCkgeyBlbWFpbFRyYW5zY3JpcHRPcHRpb25hbFBhcmFtcyA9IHt9OyB9XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB0aW1lciwgZW5kcG9pbnQsIGF4aW9zSW5zdGFuY2UsIGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4sIGhlYWRlcnMsIG9wdGlvbnM7XG4gICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIHRpbWVyID0gVGltZXJfMS5UaW1lci5USU1FUigpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmxvZ2dlcikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5sb2coTG9nTGV2ZWxfMS5Mb2dMZXZlbC5JTkZPLCBFbnVtc18yLk9DU0RLVGVsZW1ldHJ5RXZlbnQuRU1BSUxUUkFOU0NSSVBUU1RBUlRFRCwgeyBSZXF1ZXN0SWQ6IHJlcXVlc3RJZCB9LCBcIkVtYWlsIFRyYW5zY3JpcHQgU3RhcnRlZFwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZW5kcG9pbnQgPSB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmwgKyBcIi9cIiArIE9tbmljaGFubmVsRW5kcG9pbnRzXzEuZGVmYXVsdC5MaXZlQ2hhdFRyYW5zY3JpcHRFbWFpbFJlcXVlc3RQYXRoICsgXCIvXCIgKyByZXF1ZXN0SWQgKyBcIj9jaGFubmVsSWQ9XCIgKyB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWQ7XG4gICAgICAgICAgICAgICAgYXhpb3NJbnN0YW5jZSA9IGF4aW9zXzEuZGVmYXVsdC5jcmVhdGUoKTtcbiAgICAgICAgICAgICAgICBheGlvc1JldHJ5XzEuZGVmYXVsdChheGlvc0luc3RhbmNlLCB7IHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSB9KTtcbiAgICAgICAgICAgICAgICBhdXRoZW50aWNhdGVkVXNlclRva2VuID0gZW1haWxUcmFuc2NyaXB0T3B0aW9uYWxQYXJhbXMuYXV0aGVudGljYXRlZFVzZXJUb2tlbjtcbiAgICAgICAgICAgICAgICBoZWFkZXJzID0gQ29uc3RhbnRzXzEuZGVmYXVsdC5kZWZhdWx0SGVhZGVycztcbiAgICAgICAgICAgICAgICBoZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnNfMS5kZWZhdWx0Lm9yZ2FuaXphdGlvbklkXSA9IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkO1xuICAgICAgICAgICAgICAgIGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVyc18xLmRlZmF1bHQud2lkZ2V0QXBwSWRdID0gdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWQ7XG4gICAgICAgICAgICAgICAgaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzXzEuZGVmYXVsdC5hdXRob3JpemF0aW9uXSA9IHRva2VuO1xuICAgICAgICAgICAgICAgIGlmIChhdXRoZW50aWNhdGVkVXNlclRva2VuKSB7XG4gICAgICAgICAgICAgICAgICAgIGVuZHBvaW50ID0gdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsICsgXCIvXCIgKyBPbW5pY2hhbm5lbEVuZHBvaW50c18xLmRlZmF1bHQuTGl2ZUNoYXRBdXRoVHJhbnNjcmlwdEVtYWlsUmVxdWVzdFBhdGggKyBcIi9cIiArIHJlcXVlc3RJZCArIFwiP2NoYW5uZWxJZD1cIiArIHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogSlNPTi5zdHJpbmdpZnkoZW1haWxSZXF1ZXN0Qm9keSksXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgICAgICAgICAgICAgIHVybDogZW5kcG9pbnRcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHJldHVybiBfX2F3YWl0ZXIoX3RoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIGVycm9yXzEyLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2EudHJ5cy5wdXNoKFswLCAyLCAsIDVdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIGF4aW9zSW5zdGFuY2Uob3B0aW9ucyldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubG9nZ2VyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIubG9nKExvZ0xldmVsXzEuTG9nTGV2ZWwuSU5GTywgRW51bXNfMi5PQ1NES1RlbGVtZXRyeUV2ZW50LkVNQUlMVFJBTlNDUklQVFNVQ0NFRURFRCwgeyBSZXF1ZXN0SWQ6IHJlcXVlc3RJZCwgUmVnaW9uOiByZXNwb25zZS5kYXRhLlJlZ2lvbiwgRWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczogZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgVHJhbnNhY3Rpb25JZDogcmVzcG9uc2UuaGVhZGVyc1tcInRyYW5zYWN0aW9uLWlkXCJdIH0sIFwiRW1haWwgVHJhbnNjcmlwdCBTdWNjZWVkZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMgLypicmVhayovLCA1XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfMTIgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5sb2dnZXIpIHJldHVybiBbMyAvKmJyZWFrKi8sIDRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgTG9nZ2luZ1Nhbml0aXplcl8xLkxvZ2dpbmdTYW5pdGl6ZXIuc3RyaXBFcnJvclNlbnNpdGl2ZVByb3BlcnRpZXMoZXJyb3JfMTIpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIubG9nKExvZ0xldmVsXzEuTG9nTGV2ZWwuRVJST1IsIEVudW1zXzIuT0NTREtUZWxlbWV0cnlFdmVudC5FTUFJTFRSQU5TQ1JJUFRGQUlMRUQsIHsgUmVxdWVzdElkOiByZXF1ZXN0SWQsIEV4Y2VwdGlvbkRldGFpbHM6IGVycm9yXzEyLCBFbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzOiBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzIH0sIFwiRW1haWwgVHJhbnNjcmlwdCBGYWlsZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYS5sYWJlbCA9IDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszIC8qYnJlYWsqLywgNV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNTogcmV0dXJuIFsyIC8qcmV0dXJuKi9dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTsgfSldO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogRmV0Y2ggZGF0YSBtYXNraW5nIGluZm8gb2YgdGhlIG9yZy5cbiAgICAgKiBAcGFyYW0gcmVxdWVzdElkIFJlcXVlc3RJZCBvZiB0aGUgb21uaWNoYW5uZWwgc2Vzc2lvbiAoT3B0aW9uYWwpLlxuICAgICAqL1xuICAgIFNESy5wcm90b3R5cGUuZmV0Y2hEYXRhTWFza2luZ0luZm8gPSBmdW5jdGlvbiAocmVxdWVzdElkKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB0aW1lciwgZW5kcG9pbnQsIGF4aW9zSW5zdGFuY2UsIGhlYWRlcnMsIG9wdGlvbnM7XG4gICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIHRpbWVyID0gVGltZXJfMS5UaW1lci5USU1FUigpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmxvZ2dlcikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5sb2coTG9nTGV2ZWxfMS5Mb2dMZXZlbC5JTkZPLCBFbnVtc18yLk9DU0RLVGVsZW1ldHJ5RXZlbnQuRkVUQ0hEQVRBTUFTS0lOR1NUQVJURUQsIHsgUmVxdWVzdElkOiByZXF1ZXN0SWQgfSwgXCJGZXRjaCBEYXRhIE1hc2tpbmcgU3RhcnRlZFwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFyZXF1ZXN0SWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdElkID0gdXVpZF8xLnV1aWR2NCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbmRwb2ludCA9IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybCArIFwiL1wiICsgT21uaWNoYW5uZWxFbmRwb2ludHNfMS5kZWZhdWx0LkxpdmVDaGF0RmV0Y2hEYXRhTWFza2luZ0luZm9QYXRoICsgXCIvXCIgKyB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZDtcbiAgICAgICAgICAgICAgICBheGlvc0luc3RhbmNlID0gYXhpb3NfMS5kZWZhdWx0LmNyZWF0ZSgpO1xuICAgICAgICAgICAgICAgIGF4aW9zUmV0cnlfMS5kZWZhdWx0KGF4aW9zSW5zdGFuY2UsIHsgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlIH0pO1xuICAgICAgICAgICAgICAgIGhlYWRlcnMgPSBDb25zdGFudHNfMS5kZWZhdWx0LmRlZmF1bHRIZWFkZXJzO1xuICAgICAgICAgICAgICAgIGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVyc18xLmRlZmF1bHQub3JnYW5pemF0aW9uSWRdID0gdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWQ7XG4gICAgICAgICAgICAgICAgaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzXzEuZGVmYXVsdC5yZXF1ZXN0SWRdID0gcmVxdWVzdElkO1xuICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBlbmRwb2ludFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgcmV0dXJuIF9fYXdhaXRlcihfdGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgZGF0YSwgZXJyb3JfMTMsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHM7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYS50cnlzLnB1c2goWzAsIDIsICwgNV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgYXhpb3NJbnN0YW5jZShvcHRpb25zKV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gcmVzcG9uc2UuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmxvZ2dlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmxvZyhMb2dMZXZlbF8xLkxvZ0xldmVsLklORk8sIEVudW1zXzIuT0NTREtUZWxlbWV0cnlFdmVudC5GRVRDSERBVEFNQVNLSU5HU1VDQ0VFREVELCB7IFJlcXVlc3RJZDogcmVxdWVzdElkLCBSZWdpb246IHJlc3BvbnNlLmRhdGEuUmVnaW9uLCBFbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzOiBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCBUcmFuc2FjdGlvbklkOiByZXNwb25zZS5oZWFkZXJzW1widHJhbnNhY3Rpb24taWRcIl0gfSwgXCJGZXRjaCBEYXRhIE1hc2tpbmcgU3VjY2VlZGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl8xMyA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmxvZ2dlcikgcmV0dXJuIFszIC8qYnJlYWsqLywgNF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCBMb2dnaW5nU2FuaXRpemVyXzEuTG9nZ2luZ1Nhbml0aXplci5zdHJpcEVycm9yU2Vuc2l0aXZlUHJvcGVydGllcyhlcnJvcl8xMyldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5sb2coTG9nTGV2ZWxfMS5Mb2dMZXZlbC5FUlJPUiwgRW51bXNfMi5PQ1NES1RlbGVtZXRyeUV2ZW50LkZFVENIREFUQU1BU0tJTkdGQUlMRUQsIHsgUmVxdWVzdElkOiByZXF1ZXN0SWQsIEV4Y2VwdGlvbkRldGFpbHM6IGVycm9yXzEzLCBFbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzOiBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzIH0sIFwiRmV0Y2ggRGF0YSBNYXNraW5nIEZhaWxlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9hLmxhYmVsID0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMgLypicmVhayovLCA1XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA1OiByZXR1cm4gWzIgLypyZXR1cm4qL107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pOyB9KV07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBNYWtlcyBhIHNlY29uZGFyeSBjaGFubmVsIGV2ZW50IG5ldHdvcmsgY2FsbCB0byBPbW5pY2hhbm5lbC5cbiAgICAgKiBAcGFyYW0gcmVxdWVzdElkIFJlcXVlc3RJZCB0byB1c2UgZm9yIHNlY29uZGFyeSBjaGFubmVsIGV2ZW50XG4gICAgICogQHBhcmFtIHNlY29uZGFyeUNoYW5uZWxFdmVudFJlcXVlc3RCb2R5IHNlY29uZGFyeUNoYW5uZWwgZXZlbnQgcmVxdWVzdCBib2R5XG4gICAgICogQHBhcmFtIHNlY29uZGFyeUNoYW5uZWxFdmVudE9wdGlvbmFsUGFyYW1zIE9wdGlvbmFsIHBhcmFtZXRlcnMgZm9yIHNlY29uZGFyeSBjaGFubmVsIGV2ZW50cy5cbiAgICAgKi9cbiAgICBTREsucHJvdG90eXBlLm1ha2VTZWNvbmRhcnlDaGFubmVsRXZlbnRSZXF1ZXN0ID0gZnVuY3Rpb24gKHJlcXVlc3RJZCwgc2Vjb25kYXJ5Q2hhbm5lbEV2ZW50UmVxdWVzdEJvZHksIHNlY29uZGFyeUNoYW5uZWxFdmVudE9wdGlvbmFsUGFyYW1zKSB7XG4gICAgICAgIGlmIChzZWNvbmRhcnlDaGFubmVsRXZlbnRPcHRpb25hbFBhcmFtcyA9PT0gdm9pZCAwKSB7IHNlY29uZGFyeUNoYW5uZWxFdmVudE9wdGlvbmFsUGFyYW1zID0ge307IH1cbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHRpbWVyLCBlbmRwb2ludCwgYXhpb3NJbnN0YW5jZSwgYXV0aGVudGljYXRlZFVzZXJUb2tlbiwgaGVhZGVycywgb3B0aW9ucywgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIGRhdGEsIGVycm9yXzE0LCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzO1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGltZXIgPSBUaW1lcl8xLlRpbWVyLlRJTUVSKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5sb2dnZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5sb2coTG9nTGV2ZWxfMS5Mb2dMZXZlbC5JTkZPLCBFbnVtc18yLk9DU0RLVGVsZW1ldHJ5RXZlbnQuU0VDT05EQVJZQ0hBTk5FTEVWRU5UUkVRVUVTVFNUQVJURUQsIHsgUmVxdWVzdElkOiByZXF1ZXN0SWQgfSwgXCJTZWNvbmRhcnkgQ2hhbm5lbCBFdmVudCBSZXF1ZXN0IFN0YXJ0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRwb2ludCA9IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybCArIFwiL1wiICsgT21uaWNoYW5uZWxFbmRwb2ludHNfMS5kZWZhdWx0LkxpdmVDaGF0U2Vjb25kYXJ5Q2hhbm5lbEV2ZW50UGF0aCArIFwiL1wiICsgdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWQgKyBcIi9cIiArIHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkICsgXCIvXCIgKyByZXF1ZXN0SWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBheGlvc0luc3RhbmNlID0gYXhpb3NfMS5kZWZhdWx0LmNyZWF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXhpb3NSZXRyeV8xLmRlZmF1bHQoYXhpb3NJbnN0YW5jZSwgeyByZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ubWF4UmVxdWVzdFJldHJpZXNPbkZhaWx1cmUgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRoZW50aWNhdGVkVXNlclRva2VuID0gc2Vjb25kYXJ5Q2hhbm5lbEV2ZW50T3B0aW9uYWxQYXJhbXMuYXV0aGVudGljYXRlZFVzZXJUb2tlbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnMgPSBDb25zdGFudHNfMS5kZWZhdWx0LmRlZmF1bHRIZWFkZXJzO1xuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzXzEuZGVmYXVsdC5vcmdhbml6YXRpb25JZF0gPSB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdXRoZW50aWNhdGVkVXNlclRva2VuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzXzEuZGVmYXVsdC5hdXRoZW50aWNhdGVkVXNlclRva2VuXSA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnQgPSB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmwgKyBcIi9cIiArIE9tbmljaGFubmVsRW5kcG9pbnRzXzEuZGVmYXVsdC5MaXZlQ2hhdEF1dGhTZWNvbmRhcnlDaGFubmVsRXZlbnRQYXRoICsgXCIvXCIgKyB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZCArIFwiL1wiICsgdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWQgKyBcIi9cIiArIHJlcXVlc3RJZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZHBvaW50ICs9IFwiP2NoYW5uZWxJZD1cIiArIENvbnN0YW50c18xLmRlZmF1bHQuZGVmYXVsdENoYW5uZWxJZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogSlNPTi5zdHJpbmdpZnkoc2Vjb25kYXJ5Q2hhbm5lbEV2ZW50UmVxdWVzdEJvZHkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IGVuZHBvaW50XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgX2EubGFiZWwgPSAxO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICBfYS50cnlzLnB1c2goWzEsIDMsICwgNl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgYXhpb3NJbnN0YW5jZShvcHRpb25zKV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gcmVzcG9uc2UuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmxvZ2dlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmxvZyhMb2dMZXZlbF8xLkxvZ0xldmVsLklORk8sIEVudW1zXzIuT0NTREtUZWxlbWV0cnlFdmVudC5TRUNPTkRBUllDSEFOTkVMRVZFTlRSRVFVRVNUU1VDQ0VFREVELCB7IFJlcXVlc3RJZDogcmVxdWVzdElkLCBSZWdpb246IGRhdGEuUmVnaW9uLCBFbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzOiBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCBUcmFuc2FjdGlvbklkOiByZXNwb25zZS5oZWFkZXJzW1widHJhbnNhY3Rpb24taWRcIl0gfSwgXCJTZWNvbmRhcnkgQ2hhbm5lbCBFdmVudCBSZXF1ZXN0IFN1Y2NlZWRlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDZdO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl8xNCA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmxvZ2dlcikgcmV0dXJuIFszIC8qYnJlYWsqLywgNV07XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCBMb2dnaW5nU2FuaXRpemVyXzEuTG9nZ2luZ1Nhbml0aXplci5zdHJpcEVycm9yU2Vuc2l0aXZlUHJvcGVydGllcyhlcnJvcl8xNCldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5sb2coTG9nTGV2ZWxfMS5Mb2dMZXZlbC5FUlJPUiwgRW51bXNfMi5PQ1NES1RlbGVtZXRyeUV2ZW50LlNFQ09OREFSWUNIQU5ORUxFVkVOVFJFUVVFU1RGQUlMRUQsIHsgUmVxdWVzdElkOiByZXF1ZXN0SWQsIEV4Y2VwdGlvbkRldGFpbHM6IGVycm9yXzE0LCBFbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzOiBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzIH0sIFwiU2Vjb25kYXJ5IENoYW5uZWwgRXZlbnQgUmVxdWVzdCBGYWlsZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBfYS5sYWJlbCA9IDU7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNTogdGhyb3cgZXJyb3JfMTQ7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjogcmV0dXJuIFsyIC8qcmV0dXJuKi9dO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8qKiBTZW5kIHR5cGluZyBpbmRpY2F0b3JcbiAgICAgKiBAcGFyYW0gcmVxdWVzdElkIFJlcXVlc3RJZCBvZiB0aGUgb21uaWNoYW5uZWwgc2Vzc2lvbi5cbiAgICAgKi9cbiAgICBTREsucHJvdG90eXBlLnNlbmRUeXBpbmdJbmRpY2F0b3IgPSBmdW5jdGlvbiAocmVxdWVzdElkLCBjdXJyZW50TGl2ZUNoYXRWZXJzaW9uLCBzZW5kVHlwaW5nSW5kaWNhdG9yT3B0aW9uYWxQYXJhbXMpIHtcbiAgICAgICAgaWYgKHNlbmRUeXBpbmdJbmRpY2F0b3JPcHRpb25hbFBhcmFtcyA9PT0gdm9pZCAwKSB7IHNlbmRUeXBpbmdJbmRpY2F0b3JPcHRpb25hbFBhcmFtcyA9IHt9OyB9XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB0aW1lciwgY3VzdG9tZXJEaXNwbGF5TmFtZSwgZW5kcG9pbnQsIGF4aW9zSW5zdGFuY2UsIGhlYWRlcnMsIG9wdGlvbnM7XG4gICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIC8vIGF2b2lkaW5nIGxvZ2dpbmcgSW5mbyBmb3IgdHlwaW5naW5kaWNhdG9yIHRvIHJlZHVjZSBsb2cgdHJhZmZpY1xuICAgICAgICAgICAgICAgIGlmICghY3VycmVudExpdmVDaGF0VmVyc2lvbiB8fCBjdXJyZW50TGl2ZUNoYXRWZXJzaW9uICE9PSBFbnVtc18xLkxpdmVDaGF0VmVyc2lvbi5WMikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgUHJvbWlzZS5yZXNvbHZlKCldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aW1lciA9IFRpbWVyXzEuVGltZXIuVElNRVIoKTtcbiAgICAgICAgICAgICAgICBjdXN0b21lckRpc3BsYXlOYW1lID0gc2VuZFR5cGluZ0luZGljYXRvck9wdGlvbmFsUGFyYW1zLmN1c3RvbWVyRGlzcGxheU5hbWU7XG4gICAgICAgICAgICAgICAgaWYgKCFjdXJyZW50TGl2ZUNoYXRWZXJzaW9uIHx8IGN1cnJlbnRMaXZlQ2hhdFZlcnNpb24gIT09IEVudW1zXzEuTGl2ZUNoYXRWZXJzaW9uLlYyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVHlwaW5nIGluZGljYXRvciBpcyBvbmx5IHN1cHBvcnRlZCBvbiB2MicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbmRwb2ludCA9IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybCArIFwiL1wiICsgT21uaWNoYW5uZWxFbmRwb2ludHNfMS5kZWZhdWx0LlNlbmRUeXBpbmdJbmRpY2F0b3JQYXRoICsgXCIvXCIgKyByZXF1ZXN0SWQ7XG4gICAgICAgICAgICAgICAgYXhpb3NJbnN0YW5jZSA9IGF4aW9zXzEuZGVmYXVsdC5jcmVhdGUoKTtcbiAgICAgICAgICAgICAgICBoZWFkZXJzID0gQ29uc3RhbnRzXzEuZGVmYXVsdC5kZWZhdWx0SGVhZGVycztcbiAgICAgICAgICAgICAgICBoZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnNfMS5kZWZhdWx0Lm9yZ2FuaXphdGlvbklkXSA9IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkO1xuICAgICAgICAgICAgICAgIGlmIChjdXN0b21lckRpc3BsYXlOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnNbQ29uc3RhbnRzXzEuZGVmYXVsdC5jdXN0b21lckRpc3BsYXlOYW1lXSA9IGN1c3RvbWVyRGlzcGxheU5hbWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgICAgICAgICAgICAgIHVybDogZW5kcG9pbnRcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHJldHVybiBfX2F3YWl0ZXIoX3RoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIGRhdGEsIGVycm9yXzE1LCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2EudHJ5cy5wdXNoKFswLCAyLCAsIDVdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIGF4aW9zSW5zdGFuY2Uob3B0aW9ucyldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHJlc3BvbnNlLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5sb2dnZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5sb2coTG9nTGV2ZWxfMS5Mb2dMZXZlbC5JTkZPLCBFbnVtc18yLk9DU0RLVGVsZW1ldHJ5RXZlbnQuU0VORFRZUElOR0lORElDQVRPUlNVQ0NFRURFRCwgeyBSZXF1ZXN0SWQ6IHJlcXVlc3RJZCwgUmVnaW9uOiBkYXRhLlJlZ2lvbiwgRWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczogZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgVHJhbnNhY3Rpb25JZDogcmVzcG9uc2UuaGVhZGVyc1tcInRyYW5zYWN0aW9uLWlkXCJdIH0sIFwiU2VuZCBUeXBpbmcgSW5kaWNhdG9yIFN1Y2NlZWRlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl8xNSA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmxvZ2dlcikgcmV0dXJuIFszIC8qYnJlYWsqLywgNF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCBMb2dnaW5nU2FuaXRpemVyXzEuTG9nZ2luZ1Nhbml0aXplci5zdHJpcEVycm9yU2Vuc2l0aXZlUHJvcGVydGllcyhlcnJvcl8xNSldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5sb2coTG9nTGV2ZWxfMS5Mb2dMZXZlbC5FUlJPUiwgRW51bXNfMi5PQ1NES1RlbGVtZXRyeUV2ZW50LlNFTkRUWVBJTkdJTkRJQ0FUT1JGQUlMRUQsIHsgUmVxdWVzdElkOiByZXF1ZXN0SWQsIEV4Y2VwdGlvbkRldGFpbHM6IGVycm9yXzE1LCBFbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzOiBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzIH0sIFwiU2VuZCBUeXBpbmcgSW5kaWNhdG9yIEZhaWxlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9hLmxhYmVsID0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yXzE1KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDU6IHJldHVybiBbMiAvKnJldHVybiovXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7IH0pXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFNESy5kZWZhdWx0Q29uZmlndXJhdGlvbiA9IHtcbiAgICAgICAgZ2V0Q2hhdFRva2VuUmV0cnlDb3VudDogMzUsXG4gICAgICAgIGdldENoYXRUb2tlblRpbWVCZXR3ZWVuUmV0cmllc09uRmFpbHVyZTogMTAwMDAsXG4gICAgICAgIG1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlOiAzXG4gICAgfTtcbiAgICByZXR1cm4gU0RLO1xufSgpKTtcbmV4cG9ydHMuZGVmYXVsdCA9IFNESztcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIENvbnN0YW50c18xID0gcmVxdWlyZShcIi4vQ29tbW9uL0NvbnN0YW50c1wiKTtcbnZhciBPQ1NES0xvZ2dlcl8xID0gcmVxdWlyZShcIi4vQ29tbW9uL09DU0RLTG9nZ2VyXCIpO1xudmFyIFNES18xID0gcmVxdWlyZShcIi4vU0RLXCIpO1xudmFyIFNES1Byb3ZpZGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFNES1Byb3ZpZGVyKCkge1xuICAgIH1cbiAgICBTREtQcm92aWRlci5nZXRTREsgPSBmdW5jdGlvbiAob21uaWNoYW5uZWxDb25maWd1cmF0aW9uLCBjb25maWd1cmF0aW9uLCBsb2dnZXIpIHtcbiAgICAgICAgdmFyIGlsb2dnZXIgPSBuZXcgT0NTREtMb2dnZXJfMS5kZWZhdWx0KGxvZ2dlcik7XG4gICAgICAgIHJldHVybiBuZXcgU0RLXzEuZGVmYXVsdCh7XG4gICAgICAgICAgICBjaGFubmVsSWQ6IG9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWQgfHwgQ29uc3RhbnRzXzEuZGVmYXVsdC5kZWZhdWx0Q2hhbm5lbElkLFxuICAgICAgICAgICAgb3JnSWQ6IG9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZCxcbiAgICAgICAgICAgIG9yZ1VybDogb21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybCxcbiAgICAgICAgICAgIHdpZGdldElkOiBvbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWRcbiAgICAgICAgfSwgY29uZmlndXJhdGlvbiB8fCB7fSwgaWxvZ2dlcik7XG4gICAgfTtcbiAgICByZXR1cm4gU0RLUHJvdmlkZXI7XG59KCkpO1xuZXhwb3J0cy5kZWZhdWx0ID0gU0RLUHJvdmlkZXI7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQnJvd3NlckluZm8gPSBleHBvcnRzLlVOS05PV05fVkVSU0lPTiA9IHZvaWQgMDtcbnZhciBFbnVtc18xID0gcmVxdWlyZShcIi4uL0NvbW1vbi9FbnVtc1wiKTtcbi8vIFBvcnRlZCBmcm9tIGh0dHBzOi8vZGV2LmF6dXJlLmNvbS9keW5hbWljc2NybS9PbmVDUk0vX2dpdC9DUk0uT21uaUNoYW5uZWwuTGl2ZUNoYXRXaWRnZXQ/cGF0aD0vc3JjL0xpdmVDaGF0TG9hZGVyL1V0aWxpdHkvQnJvd3NlckluZm8udHNcbnZhciBSRUdFWF9WRVJTSU9OID0gXCIoW1xcXFxkLC5dKylcIjtcbmV4cG9ydHMuVU5LTk9XTl9WRVJTSU9OID0gXCJVXCI7XG52YXIgQnJvd3NlckluZm8gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQnJvd3NlckluZm8oKSB7XG4gICAgfVxuICAgIEJyb3dzZXJJbmZvLmdldFVzZXJBZ2VudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudXNlckFnZW50KCk7XG4gICAgfTtcbiAgICBCcm93c2VySW5mby51c2VyQWdlbnRDb250YWluc1N0cmluZyA9IGZ1bmN0aW9uIChzZWFyY2hTdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VXNlckFnZW50KCkuaW5kZXhPZihzZWFyY2hTdHJpbmcpID4gLTE7XG4gICAgfTtcbiAgICBCcm93c2VySW5mby5pc0Nocm9tZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudXNlckFnZW50Q29udGFpbnNTdHJpbmcoRW51bXNfMS5Ccm93c2VyVmVuZG9yLkNIUk9NRSkgJiZcbiAgICAgICAgICAgICF0aGlzLnVzZXJBZ2VudENvbnRhaW5zU3RyaW5nKEVudW1zXzEuQnJvd3NlclZlbmRvci5FREdFKSAmJlxuICAgICAgICAgICAgIXRoaXMudXNlckFnZW50Q29udGFpbnNTdHJpbmcoRW51bXNfMS5Ccm93c2VyVmVuZG9yLkVER0VfQ0hST01JVU0pO1xuICAgIH07XG4gICAgQnJvd3NlckluZm8uaXNJZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudXNlckFnZW50Q29udGFpbnNTdHJpbmcoXCJUcmlkZW50XCIpO1xuICAgIH07XG4gICAgQnJvd3NlckluZm8uaXNFZGdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy51c2VyQWdlbnRDb250YWluc1N0cmluZyhFbnVtc18xLkJyb3dzZXJWZW5kb3IuRURHRSkgfHxcbiAgICAgICAgICAgIHRoaXMudXNlckFnZW50Q29udGFpbnNTdHJpbmcoRW51bXNfMS5Ccm93c2VyVmVuZG9yLkVER0VfQ0hST01JVU0pO1xuICAgIH07XG4gICAgQnJvd3NlckluZm8uaXNPcGVyYSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudXNlckFnZW50Q29udGFpbnNTdHJpbmcoXCJPUFIvXCIpO1xuICAgIH07XG4gICAgQnJvd3NlckluZm8uZ2V0QnJvd3Nlck5hbWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzT3BlcmEoKSkge1xuICAgICAgICAgICAgcmV0dXJuIEVudW1zXzEuQnJvd3NlclZlbmRvci5PUEVSQTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc0VkZ2UoKSkge1xuICAgICAgICAgICAgcmV0dXJuIEVudW1zXzEuQnJvd3NlclZlbmRvci5FREdFO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzQ2hyb21lKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBFbnVtc18xLkJyb3dzZXJWZW5kb3IuQ0hST01FO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnVzZXJBZ2VudENvbnRhaW5zU3RyaW5nKEVudW1zXzEuQnJvd3NlclZlbmRvci5GSVJFRk9YKSkge1xuICAgICAgICAgICAgcmV0dXJuIEVudW1zXzEuQnJvd3NlclZlbmRvci5GSVJFRk9YO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnVzZXJBZ2VudENvbnRhaW5zU3RyaW5nKEVudW1zXzEuQnJvd3NlclZlbmRvci5TQUZBUkkpKSB7XG4gICAgICAgICAgICByZXR1cm4gRW51bXNfMS5Ccm93c2VyVmVuZG9yLlNBRkFSSTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc0llKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBFbnVtc18xLkJyb3dzZXJWZW5kb3IuSUU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEVudW1zXzEuQnJvd3NlclZlbmRvci5VTktOT1dOO1xuICAgIH07XG4gICAgQnJvd3NlckluZm8uZ2V0QnJvd3NlclZlcnNpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBnZXRJZVZlcnNpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdXNlckFnZW50ID0gX3RoaXMuZ2V0VXNlckFnZW50KCk7XG4gICAgICAgICAgICB2YXIgY2xhc3NpY0llVmVyc2lvbk1hdGNoZXMgPSB1c2VyQWdlbnQubWF0Y2gobmV3IFJlZ0V4cChFbnVtc18xLkJyb3dzZXJWZW5kb3IuSUUgKyBcIiBcIiArIFJFR0VYX1ZFUlNJT04pKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBzZWN1cml0eS9kZXRlY3Qtbm9uLWxpdGVyYWwtcmVnZXhwXG4gICAgICAgICAgICBpZiAoY2xhc3NpY0llVmVyc2lvbk1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2xhc3NpY0llVmVyc2lvbk1hdGNoZXNbMV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgaWVWZXJzaW9uTWF0Y2hlcyA9IHVzZXJBZ2VudC5tYXRjaChuZXcgUmVnRXhwKFwicnY6XCIgKyBSRUdFWF9WRVJTSU9OKSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgc2VjdXJpdHkvZGV0ZWN0LW5vbi1saXRlcmFsLXJlZ2V4cFxuICAgICAgICAgICAgaWYgKGllVmVyc2lvbk1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWVWZXJzaW9uTWF0Y2hlc1sxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBnZXRPdGhlclZlcnNpb24gPSBmdW5jdGlvbiAoYnJvd3NlclN0cmluZykge1xuICAgICAgICAgICAgaWYgKGJyb3dzZXJTdHJpbmcgPT09IEVudW1zXzEuQnJvd3NlclZlbmRvci5TQUZBUkkpIHtcbiAgICAgICAgICAgICAgICBicm93c2VyU3RyaW5nID0gXCJWZXJzaW9uXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYnJvd3NlclN0cmluZyA9PT0gRW51bXNfMS5Ccm93c2VyVmVuZG9yLk9QRVJBKSB7XG4gICAgICAgICAgICAgICAgYnJvd3NlclN0cmluZyA9IFwiT1BSXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYnJvd3NlclN0cmluZyA9PT0gRW51bXNfMS5Ccm93c2VyVmVuZG9yLkVER0UpIHtcbiAgICAgICAgICAgICAgICBicm93c2VyU3RyaW5nID0gXCJFZGdlP1wiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIG1hdGNoZXMgPSBfdGhpcy5nZXRVc2VyQWdlbnQoKS5tYXRjaChuZXcgUmVnRXhwKGJyb3dzZXJTdHJpbmcgKyBcIi9cIiArIFJFR0VYX1ZFUlNJT04pKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBzZWN1cml0eS9kZXRlY3Qtbm9uLWxpdGVyYWwtcmVnZXhwXG4gICAgICAgICAgICBpZiAobWF0Y2hlcykge1xuICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaGVzWzFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGV4cG9ydHMuVU5LTk9XTl9WRVJTSU9OO1xuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5pc0llKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXRJZVZlcnNpb24oKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2V0T3RoZXJWZXJzaW9uKHRoaXMuZ2V0QnJvd3Nlck5hbWUoKSk7XG4gICAgfTtcbiAgICBCcm93c2VySW5mby51c2VyQWdlbnQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudDsgfTtcbiAgICByZXR1cm4gQnJvd3NlckluZm87XG59KCkpO1xuZXhwb3J0cy5Ccm93c2VySW5mbyA9IEJyb3dzZXJJbmZvO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkRldmljZUluZm8gPSB2b2lkIDA7XG52YXIgRW51bXNfMSA9IHJlcXVpcmUoXCIuLi9Db21tb24vRW51bXNcIik7XG4vLyBQb3J0ZWQgZnJvbSBodHRwczovL2Rldi5henVyZS5jb20vZHluYW1pY3Njcm0vT25lQ1JNL19naXQvQ1JNLk9tbmlDaGFubmVsLkxpdmVDaGF0V2lkZ2V0P3BhdGg9L3NyYy9MaXZlQ2hhdExvYWRlci9VdGlsaXR5L0RldmljZUluZm8udHMmdmVyc2lvbj1HQnJlbGVhc2VcbnZhciBEZXZpY2VJbmZvID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIERldmljZUluZm8oKSB7XG4gICAgfVxuICAgIERldmljZUluZm8uZ2V0RGV2aWNlVHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG1vYmlsZSA9IC8oYW5kcm9pZHxpcG9kfHdpbmRvd3MgcGhvbmV8d3BkZXNrdG9wfHdpbmRvd3MgY2V8YmxhY2tiZXJyeVxcdyp8bWVlZ298d2Vib3N8cGFsbXxzeW1iaWFufHBkYXxcXHcqP21vYmlsZVxcdyo/fFxcdyo/cGhvbmVcXHcqPykvaTtcbiAgICAgICAgdmFyIHRhYmxldCA9IC90YWJsZXR8aXBhZC9pO1xuICAgICAgICBpZiAod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2gobW9iaWxlKSkge1xuICAgICAgICAgICAgcmV0dXJuIEVudW1zXzEuRGV2aWNlVHlwZS5Nb2JpbGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKHRhYmxldCkpIHtcbiAgICAgICAgICAgIHJldHVybiBFbnVtc18xLkRldmljZVR5cGUuVGFibGV0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBFbnVtc18xLkRldmljZVR5cGUuRGVza3RvcDtcbiAgICB9O1xuICAgIHJldHVybiBEZXZpY2VJbmZvO1xufSgpKTtcbmV4cG9ydHMuRGV2aWNlSW5mbyA9IERldmljZUluZm87XG4iLCJcInVzZSBzdHJpY3RcIjtcbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlcyAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuLy8gUG9ydGVkIGZyb20gaHR0cHM6Ly9kZXYuYXp1cmUuY29tL2R5bmFtaWNzY3JtL09uZUNSTS9fZ2l0L0NSTS5PbW5pY2hhbm5lbC5JQzNDbGllbnQ/cGF0aD0vc3JjL0NvbW1vbi9FdmVudE1hbmFnZXIudHMmdmVyc2lvbj1HQm1hc3RlclxudmFyIEV2ZW50TWFuYWdlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBFdmVudE1hbmFnZXIoKSB7XG4gICAgfVxuICAgIEV2ZW50TWFuYWdlci5yYWlzZUN1c3RvbUV2ZW50ID0gZnVuY3Rpb24gKGV2ZW50TmFtZSwgcGF5bG9hZCkge1xuICAgICAgICB2YXIgZXZlbnQgPSBFdmVudE1hbmFnZXIuY3JlYXRlQ3VzdG9tRXZlbnQoZXZlbnROYW1lLCBwYXlsb2FkKTtcbiAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGN1c3RvbSBldmVudCBiYXNlZCBvbiB0aGUgZXZlbnROYW1lIGFuZCBwYXlsb2FkXG4gICAgICogVGhlIGN1c3RvbSBldmVudCBpcyBkaXNwYXRjaC1jb21wYXRpYmxlIGFjcm9zcyBicm93c2Vyc1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWU6IE5hbWUgb2YgdGhlIGV2ZW50LlxuICAgICAqIEBwYXJhbSB7YW55fSBwYXlsb2FkOiBUaGUgZXZlbnQgcGF5bG9hZC5cbiAgICAgKiBAcmV0dXJucyB7Q3VzdG9tRXZlbnR9OiBDdXN0b21FdmVudCBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBFdmVudE1hbmFnZXIuY3JlYXRlQ3VzdG9tRXZlbnQgPSBmdW5jdGlvbiAoZXZlbnROYW1lLCBwYXlsb2FkKSB7XG4gICAgICAgIHZhciBldmVudERldGFpbHMgPSBwYXlsb2FkID8ge1xuICAgICAgICAgICAgZGV0YWlsOiBwYXlsb2FkXG4gICAgICAgIH0gOiB1bmRlZmluZWQ7XG4gICAgICAgIHZhciBldmVudCA9IG51bGw7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBGb3Igbm9uIElFMTEgc2NlbmFyaW9zLCBjdXN0b21ldmVudCBvYmplY3QgY2FuIGJlIGRpc3BhdGNoZWRcbiAgICAgICAgICAgIGV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KGV2ZW50TmFtZSwgZXZlbnREZXRhaWxzKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLy8gU3BlY2lhbCBoYW5kbGluZyBmb3IgSUUxMSBzY2VuYXJpbywgd2hlcmUgY3VzdG9tZXZlbnQgb2JqZWN0IGNhbm5vdCBiZSBkaXNwYXRjaGVkXG4gICAgICAgICAgICBldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KFwiQ3VzdG9tRXZlbnRcIik7XG4gICAgICAgICAgICBldmVudC5pbml0Q3VzdG9tRXZlbnQoZXZlbnROYW1lLCB0cnVlLCB0cnVlLCBldmVudERldGFpbHMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBldmVudDtcbiAgICB9O1xuICAgIHJldHVybiBFdmVudE1hbmFnZXI7XG59KCkpO1xuZXhwb3J0cy5kZWZhdWx0ID0gRXZlbnRNYW5hZ2VyO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkxvZ2dpbmdTYW5pdGl6ZXIgPSB2b2lkIDA7XG52YXIgQ29uc3RhbnRzXzEgPSByZXF1aXJlKFwiLi4vQ29tbW9uL0NvbnN0YW50c1wiKTtcbnZhciBMb2dnaW5nU2FuaXRpemVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIExvZ2dpbmdTYW5pdGl6ZXIoKSB7XG4gICAgfVxuICAgIExvZ2dpbmdTYW5pdGl6ZXIuc3RyaXBFcnJvclNlbnNpdGl2ZVByb3BlcnRpZXMgPSBmdW5jdGlvbiAoZXJyb3JPYmplY3QpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgaWYgKGVycm9yT2JqZWN0ICYmIHR5cGVvZiBlcnJvck9iamVjdCA9PT0gJ29iamVjdCcgJiYgKChfYSA9IE9iamVjdC5rZXlzKGVycm9yT2JqZWN0KSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmxlbmd0aCkgPiAwKSB7XG4gICAgICAgICAgICAoX2IgPSBPYmplY3Qua2V5cyhlcnJvck9iamVjdCkpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICBpZiAoQ29uc3RhbnRzXzEuZGVmYXVsdC5zZW5zaXRpdmVQcm9wZXJ0aWVzLmluZGV4T2Yoa2V5KSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVtb3ZlIHNlbnNpdGl2ZSBwcm9wZXJ0aWVzIGZyb20gZXJyb3Igb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBlcnJvck9iamVjdFtcIlwiICsga2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGVycm9yT2JqZWN0W1wiXCIgKyBrZXldICE9PSBudWxsICYmIHR5cGVvZiBlcnJvck9iamVjdFtcIlwiICsga2V5XSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgc2Vuc2l0aXZlIHByb3BlcnRpZXMgaW4gbmVzdGVkIGVycm9yIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICBfdGhpcy5zdHJpcEVycm9yU2Vuc2l0aXZlUHJvcGVydGllcyhlcnJvck9iamVjdFtcIlwiICsga2V5XSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIExvZ2dpbmdTYW5pdGl6ZXI7XG59KCkpO1xuZXhwb3J0cy5Mb2dnaW5nU2FuaXRpemVyID0gTG9nZ2luZ1Nhbml0aXplcjtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5PU0luZm8gPSB2b2lkIDA7XG52YXIgRW51bXNfMSA9IHJlcXVpcmUoXCIuLi9Db21tb24vRW51bXNcIik7XG4vLyBQb3J0ZWQgZnJvbSBodHRwczovL2Rldi5henVyZS5jb20vZHluYW1pY3Njcm0vT25lQ1JNL19naXQvQ1JNLk9tbmlDaGFubmVsLkxpdmVDaGF0V2lkZ2V0P3BhdGg9L3NyYy9MaXZlQ2hhdExvYWRlci9VdGlsaXR5L09TSW5mby50cyZ2ZXJzaW9uPUdCcmVsZWFzZVxudmFyIE9TSW5mbyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBPU0luZm8oKSB7XG4gICAgfVxuICAgIE9TSW5mby5nZXRPc1R5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB3aW4gPSAvKHdpbmRvd3N8d2luMzIpL2k7XG4gICAgICAgIHZhciB3aW5ydCA9IC8gYXJtOy9pO1xuICAgICAgICB2YXIgd2lucGhvbmUgPSAvd2luZG93c1xcc3Bob25lXFxzXFxkK1xcLlxcZCsvaTtcbiAgICAgICAgdmFyIG9zeCA9IC8obWFjaW50b3NofG1hYyBvcyB4KS9pO1xuICAgICAgICB2YXIgaW9zID0gLyhpUGFkfGlQaG9uZXxpUG9kKSg/PS4qbGlrZSBNYWMgT1MgWCkvaTtcbiAgICAgICAgdmFyIGxpbnV4ID0gLyhsaW51eHxqb2xpfFtreGxuXT91YnVudHV8ZGViaWFufFtvcGVuXSpzdXNlfGdlbnRvb3xhcmNofHNsYWNrd2FyZXxmZWRvcmF8bWFuZHJpdmF8Y2VudG9zfHBjbGludXhvc3xyZWRoYXR8emVud2Fsa3xjcm9zKS9pO1xuICAgICAgICB2YXIgYW5kcm9pZCA9IC9hbmRyb2lkL2k7XG4gICAgICAgIHZhciB1c2VyQWdlbnQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudDsgfTtcbiAgICAgICAgaWYgKHVzZXJBZ2VudCgpLm1hdGNoKHdpbnBob25lKSkge1xuICAgICAgICAgICAgcmV0dXJuIEVudW1zXzEuT3BlcmF0aW5nU3lzdGVtLldJTkRPV1NfUEhPTkU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVzZXJBZ2VudCgpLm1hdGNoKHdpbnJ0KSkge1xuICAgICAgICAgICAgcmV0dXJuIEVudW1zXzEuT3BlcmF0aW5nU3lzdGVtLldJTkRPV1NfUlQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVzZXJBZ2VudCgpLm1hdGNoKGlvcykpIHtcbiAgICAgICAgICAgIHJldHVybiBFbnVtc18xLk9wZXJhdGluZ1N5c3RlbS5JT1M7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVzZXJBZ2VudCgpLm1hdGNoKGFuZHJvaWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gRW51bXNfMS5PcGVyYXRpbmdTeXN0ZW0uQU5EUk9JRDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodXNlckFnZW50KCkubWF0Y2gobGludXgpKSB7XG4gICAgICAgICAgICByZXR1cm4gRW51bXNfMS5PcGVyYXRpbmdTeXN0ZW0uTElOVVg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVzZXJBZ2VudCgpLm1hdGNoKG9zeCkpIHtcbiAgICAgICAgICAgIHJldHVybiBFbnVtc18xLk9wZXJhdGluZ1N5c3RlbS5NQUNPU1g7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVzZXJBZ2VudCgpLm1hdGNoKHdpbikpIHtcbiAgICAgICAgICAgIHJldHVybiBFbnVtc18xLk9wZXJhdGluZ1N5c3RlbS5XSU5ET1dTO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBFbnVtc18xLk9wZXJhdGluZ1N5c3RlbS5VTktOT1dOO1xuICAgIH07XG4gICAgcmV0dXJuIE9TSW5mbztcbn0oKSk7XG5leHBvcnRzLk9TSW5mbyA9IE9TSW5mbztcbiIsIlwidXNlIHN0cmljdFwiO1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlcyAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIFRlbGVtZXRyeUhlbHBlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBUZWxlbWV0cnlIZWxwZXIoKSB7XG4gICAgfVxuICAgIFRlbGVtZXRyeUhlbHBlci5HRVRURUxFTUVUUllFVkVOVERBVEEgPSBmdW5jdGlvbiAodGVsZW1ldHJ5RXZlbnQsIGN1c3RvbURhdGEsIGRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBEZXNjcmlwdGlvbjogZGVzY3JpcHRpb24sXG4gICAgICAgICAgICBFbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzOiBjdXN0b21EYXRhLkVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsXG4gICAgICAgICAgICBFdmVudDogdGVsZW1ldHJ5RXZlbnQsXG4gICAgICAgICAgICBFeGNlcHRpb25EZXRhaWxzOiBjdXN0b21EYXRhLkV4Y2VwdGlvbkRldGFpbHMsXG4gICAgICAgICAgICBSZWdpb246IGN1c3RvbURhdGEuUmVnaW9uLFxuICAgICAgICAgICAgUmVxdWVzdElkOiBjdXN0b21EYXRhLlJlcXVlc3RJZCxcbiAgICAgICAgICAgIFRyYW5zYWN0aW9uSWQ6IGN1c3RvbURhdGEuVHJhbnNhY3Rpb25JZFxuICAgICAgICB9O1xuICAgIH07XG4gICAgcmV0dXJuIFRlbGVtZXRyeUhlbHBlcjtcbn0oKSk7XG5leHBvcnRzLmRlZmF1bHQgPSBUZWxlbWV0cnlIZWxwZXI7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVGltZXIgPSB2b2lkIDA7XG52YXIgVGltZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gVGltZXIoKSB7XG4gICAgfVxuICAgIFRpbWVyLlRJTUVSID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgdGltZVN0YXJ0ID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBnZXQgbWlsbGlTZWNvbmRzRWxhcHNlZCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC0gdGltZVN0YXJ0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9O1xuICAgIHJldHVybiBUaW1lcjtcbn0oKSk7XG5leHBvcnRzLlRpbWVyID0gVGltZXI7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8qKlxuICogQ3VzdG9tIGhhbmRsZXIgZm9yIEhUVFAgY2FsbHMgd2l0aCBBeGlvcy4gSGFuZGxlciBhbGxvd3MgdG8gcmV0cnkgSFRUUCBjYWxscyBpZiBmYWlsZWQuXG4gKlxuICogQHBhcmFtIGF4aW9zIEF4aW9zIGluc3RhbmNlLlxuICogQHBhcmFtIGF4aW9zUmV0cnlPcHRpb25zIE9wdGlvbnMgZm9yIGF4aW9zIHJldHJ5LlxuICovXG52YXIgYXhpb3NSZXRyeSA9IGZ1bmN0aW9uIChheGlvcywgYXhpb3NSZXRyeU9wdGlvbnMpIHtcbiAgICB2YXIgcmV0cmllcyA9IGF4aW9zUmV0cnlPcHRpb25zLnJldHJpZXM7XG4gICAgdmFyIGN1cnJlbnRUcnkgPSAwO1xuICAgIC8vIE1ldGhvZCB0byBpbnRlcmNlcHRzIHJlc3BvbnNlcyB3aXRoaW4gcmFuZ2Ugb2YgMnh4XG4gICAgdmFyIG9uU3VjY2VzcyA9IHVuZGVmaW5lZDtcbiAgICAvLyBNZXRob2QgdG8gaW50ZXJjZXB0cyByZXNwb25zZXMgb3V0c2lkZSByYW5nZSBvZiAyeHhcbiAgICB2YXIgb25FcnJvciA9IGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICB2YXIgY29uZmlnID0gZXJyb3IuY29uZmlnO1xuICAgICAgICAvLyBJZiB3ZSBoYXZlIG5vIGluZm9ybWF0aW9uIG9mIHRoZSByZXF1ZXN0IHRvIHJldHJ5XG4gICAgICAgIGlmICghY29uZmlnKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFJldHJ5IHJlcXVlc3QgaWYgYmVsb3cgdGhyZXNob2xkXG4gICAgICAgIHZhciBzaG91bGRSZXRyeSA9IGN1cnJlbnRUcnkgPCByZXRyaWVzO1xuICAgICAgICBpZiAoc2hvdWxkUmV0cnkpIHtcbiAgICAgICAgICAgIGN1cnJlbnRUcnkrKztcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXR1cm4gcmVzb2x2ZShheGlvcyhjb25maWcpKTsgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgICB9O1xuICAgIGF4aW9zLmludGVyY2VwdG9ycy5yZXNwb25zZS51c2Uob25TdWNjZXNzLCBvbkVycm9yKTtcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBheGlvc1JldHJ5O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnV1aWR2NCA9IHZvaWQgMDtcbmV4cG9ydHMudXVpZHY0ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBcInh4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4eFwiLnJlcGxhY2UoL1t4eV0vZywgZnVuY3Rpb24gKGMpIHtcbiAgICAgICAgdmFyIHIgPSBNYXRoLnJhbmRvbSgpICogMTYgfCAwLCB2ID0gYyA9PT0gXCJ4XCIgPyByIDogKHIgJiAweDMgfCAweDgpO1xuICAgICAgICByZXR1cm4gdi50b1N0cmluZygxNik7XG4gICAgfSk7XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnV1aWR2NCA9IGV4cG9ydHMuU0RLUHJvdmlkZXIgPSB2b2lkIDA7XG4vLyBFbnRyeSBwb2ludFxudmFyIEV2ZW50TmFtZXNfMSA9IHJlcXVpcmUoXCIuL0NvbW1vbi9FdmVudE5hbWVzXCIpO1xudmFyIFNES1Byb3ZpZGVyXzEgPSByZXF1aXJlKFwiLi9TREtQcm92aWRlclwiKTtcbmV4cG9ydHMuU0RLUHJvdmlkZXIgPSBTREtQcm92aWRlcl8xLmRlZmF1bHQ7XG52YXIgRXZlbnRNYW5hZ2VyXzEgPSByZXF1aXJlKFwiLi9VdGlscy9FdmVudE1hbmFnZXJcIik7XG52YXIgdXVpZF8xID0gcmVxdWlyZShcIi4vVXRpbHMvdXVpZFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInV1aWR2NFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdXVpZF8xLnV1aWR2NDsgfSB9KTtcbihmdW5jdGlvbiAoKSB7XG4gICAgLy8gRGVjbGFyZXMgd2luZG93IG9iamVjdCBmb3IgTm9kZUpTIGVudmlyb25tZW50XG4gICAgaWYgKGdsb2JhbC53aW5kb3cgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBnbG9iYWwud2luZG93ID0gZ2xvYmFsO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIndpbmRvdyBvYmplY3Qgbm90IGZvdW5kXCIpO1xuICAgIH1cbiAgICAvLyBDaGVjayBleGlzdGVuY2Ugb2YgZ2xvYmFsIG9iamVjdHMgdG8gYXZvaWQgb3ZlcndyaXRlL2NsYXNoaW5nXG4gICAgaWYgKCEoXCJNaWNyb3NvZnRcIiBpbiB3aW5kb3cpKSB7XG4gICAgICAgIHdpbmRvdy5NaWNyb3NvZnQgPSB7fTtcbiAgICB9XG4gICAgaWYgKCEoXCJDUk1cIiBpbiB3aW5kb3cuTWljcm9zb2Z0KSkge1xuICAgICAgICB3aW5kb3cuTWljcm9zb2Z0LkNSTSA9IHt9O1xuICAgIH1cbiAgICBpZiAoIShcIk9tbmljaGFubmVsXCIgaW4gd2luZG93Lk1pY3Jvc29mdC5DUk0pKSB7XG4gICAgICAgIHdpbmRvdy5NaWNyb3NvZnQuQ1JNLk9tbmljaGFubmVsID0ge307XG4gICAgfVxuICAgIGlmICghKFwiU0RLXCIgaW4gd2luZG93Lk1pY3Jvc29mdC5DUk0uT21uaWNoYW5uZWwpKSB7XG4gICAgICAgIHdpbmRvdy5NaWNyb3NvZnQuQ1JNLk9tbmljaGFubmVsLlNESyA9IHtcbiAgICAgICAgICAgIFNES1Byb3ZpZGVyOiBTREtQcm92aWRlcl8xLmRlZmF1bHQsXG4gICAgICAgICAgICBVdGlsOiB7XG4gICAgICAgICAgICAgICAgdXVpZHY0OiB1dWlkXzEudXVpZHY0XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuICAgIHdpbmRvdy5kb2N1bWVudCAmJiBFdmVudE1hbmFnZXJfMS5kZWZhdWx0LnJhaXNlQ3VzdG9tRXZlbnQoRXZlbnROYW1lc18xLmRlZmF1bHQuT0NTREtMT0FEKTtcbn0pKCk7XG4iXSwic291cmNlUm9vdCI6IiJ9
|