@useparagon/connect 1.0.1 → 1.0.2
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/changelog.md +4 -0
- package/dist/src/ConnectSDK.d.ts +3 -2
- package/dist/src/index.js +16 -5
- package/dist/src/types/sdk.d.ts +3 -3
- package/package.json +1 -1
package/dist/src/index.js
CHANGED
|
@@ -384,10 +384,14 @@ ${Object.keys(this.loadedConfigs).map(validAction => `- "${validAction}"`).join(
|
|
|
384
384
|
this.clearState();
|
|
385
385
|
this.render();
|
|
386
386
|
}
|
|
387
|
+
async connect(action) {
|
|
388
|
+
let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
389
|
+
await this._connect(action, params);
|
|
390
|
+
}
|
|
387
391
|
/**
|
|
388
392
|
* Display the Paragon Connect modal
|
|
389
393
|
*/
|
|
390
|
-
async
|
|
394
|
+
async _connect(action) {
|
|
391
395
|
let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
392
396
|
const {
|
|
393
397
|
mapObjectFields,
|
|
@@ -780,7 +784,7 @@ Call paragon.authenticate(<projectId>, <user token>) before using the SDK.`);
|
|
|
780
784
|
this.setModalState({
|
|
781
785
|
integration: null
|
|
782
786
|
});
|
|
783
|
-
return this.
|
|
787
|
+
return this._connect(action, mergedParams);
|
|
784
788
|
}
|
|
785
789
|
/**
|
|
786
790
|
* gates headless feature to pro and enterprise users
|
|
@@ -934,7 +938,7 @@ Call paragon.authenticate(<projectId>, <user token>) before using the SDK.`);
|
|
|
934
938
|
/**
|
|
935
939
|
* @param {host: string;} domain
|
|
936
940
|
* sets the domain for making http service request
|
|
937
|
-
* example: configureGlobal({host: 'myDomain.com'}) would set service urls as `https://service.myDomain.com`
|
|
941
|
+
* example: `configureGlobal({host: 'myDomain.com'});` would set service urls as `https://service.myDomain.com`
|
|
938
942
|
*/
|
|
939
943
|
configureGlobal(param) {
|
|
940
944
|
if (!param || !param.host) {
|
|
@@ -945,7 +949,14 @@ Call paragon.authenticate(<projectId>, <user token>) before using the SDK.`);
|
|
|
945
949
|
this.environments.DASHBOARD_PUBLIC_URL = (0, http_1.getServiceUrl)('dashboard', domain);
|
|
946
950
|
this.environments.PASSPORT_PUBLIC_URL = (0, http_1.getServiceUrl)('passport', domain);
|
|
947
951
|
this.environments.ZEUS_PUBLIC_URL = (0, http_1.getServiceUrl)('zeus', domain);
|
|
948
|
-
|
|
952
|
+
// setting cdn to dashboard url as enterprise environment don't have their own cdns PARA-8197
|
|
953
|
+
this.environments.CDN_PUBLIC_URL = (0, http_1.getServiceUrl)('dashboard', domain);
|
|
954
|
+
this.userState.authenticated = false;
|
|
955
|
+
if (this.root) {
|
|
956
|
+
this.root.src = `${this.environments.CONNECT_PUBLIC_URL}/ui${this.projectId ? `?projectId=${this.projectId}` : ''}`;
|
|
957
|
+
} else {
|
|
958
|
+
console.error('Root element not defined');
|
|
959
|
+
}
|
|
949
960
|
}
|
|
950
961
|
}
|
|
951
962
|
exports["default"] = ConnectSDK;
|
|
@@ -4373,4 +4384,4 @@ function __classPrivateFieldSet(receiver, state, value, kind, f) {
|
|
|
4373
4384
|
/******/
|
|
4374
4385
|
/******/ })()
|
|
4375
4386
|
;
|
|
4376
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixRQUFRO0FBQzFCO0FBQ0EsU0FBUyxjQUFjO0FBQ3ZCLGdEQUFnRDtBQUNoRDtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBLGtEQUFrRDtBQUNsRDtBQUNBLDRCQUE0QjtBQUM1Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixjQUFjO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FB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QWE7V0FDN0Q7Ozs7O1VFTkE7VUFDQTtVQUNBO1VBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdXNlcGFyYWdvbi9jb25uZWN0Ly4vc3JjL0Nvbm5lY3RTREsudHN4Iiwid2VicGFjazovL0B1c2VwYXJhZ29uL2Nvbm5lY3QvLi9zcmMvU0RLRXZlbnRFbWl0dGVyLnRzIiwid2VicGFjazovL0B1c2VwYXJhZ29uL2Nvbm5lY3QvLi9zcmMvY29uc3RhbnRzLnRzIiwid2VicGFjazovL0B1c2VwYXJhZ29uL2Nvbm5lY3QvLi9zcmMvZW50aXRpZXMvY29ubmVjdENyZWRlbnRpYWwuaW50ZXJmYWNlLnRzIiwid2VicGFjazovL0B1c2VwYXJhZ29uL2Nvbm5lY3QvLi9zcmMvZW50aXRpZXMvY3JlZGVudGlhbC5pbnRlcmZhY2UudHMiLCJ3ZWJwYWNrOi8vQHVzZXBhcmFnb24vY29ubmVjdC8uL3NyYy9lbnRpdGllcy9jdXN0b21JbnRlZ3JhdGlvbi5pbnRlcmZhY2UudHMiLCJ3ZWJwYWNrOi8vQHVzZXBhcmFnb24vY29ubmVjdC8uL3NyYy9lbnRpdGllcy9pbnRlZ3JhdGlvbi5pbnRlcmZhY2UudHMiLCJ3ZWJwYWNrOi8vQHVzZXBhcmFnb24vY29ubmVjdC8uL3NyYy9oZWxwZXJzL2luZGV4LnRzIiwid2VicGFjazovL0B1c2VwYXJhZ29uL2Nvbm5lY3QvLi9zcmMvaGVscGVycy9vYXV0aC50cyIsIndlYnBhY2s6Ly9AdXNlcGFyYWdvbi9jb25uZWN0Ly4vc3JjL2luZGV4LnRzIiwid2VicGFjazovL0B1c2VwYXJhZ29uL2Nvbm5lY3QvLi9zcmMvdHlwZXMvYWN0aW9uLnRzIiwid2VicGFjazovL0B1c2VwYXJhZ29uL2Nvbm5lY3QvLi9zcmMvdHlwZXMvYmlsbGluZy50cyIsIndlYnBhY2s6Ly9AdXNlcGFyYWdvbi9jb25uZWN0Ly4vc3JjL3R5cGVzL2Nvbm5lY3QudHMiLCJ3ZWJwYWNrOi8vQHVzZXBhcmFnb24vY29ubmVjdC8uL3NyYy90eXBlcy9jb25uZWN0TW9kYWwudHMiLCJ3ZWJwYWNrOi8vQHVzZXBhcmFnb24vY29ubmVjdC8uL3NyYy90eXBlcy9lbnZpcm9ubWVudC50cyIsIndlYnBhY2s6Ly9AdXNlcGFyYWdvbi9jb25uZWN0Ly4vc3JjL3R5cGVzL2V4ZWN1dGlvbi50cyIsIndlYnBhY2s6Ly9AdXNlcGFyYWdvbi9jb25uZWN0Ly4vc3JjL3R5cGVzL2luZGV4LnRzIiwid2VicGFjazovL0B1c2VwYXJhZ29uL2Nvbm5lY3QvLi9zcmMvdHlwZXMvb2F1dGgudHMiLCJ3ZWJwYWNrOi8vQHVzZXBhcmFnb24vY29ubmVjdC8uL3NyYy90eXBlcy9yZXNvbHZlcnMudHMiLCJ3ZWJwYWNrOi8vQHVzZXBhcmFnb24vY29ubmVjdC8uL3NyYy90eXBlcy9zZGsudHMiLCJ3ZWJwYWNrOi8vQHVzZXBhcmFnb24vY29ubmVjdC8uL3NyYy90eXBlcy9zdHJpcGUudHMiLCJ3ZWJwYWNrOi8vQHVzZXBhcmFnb24vY29ubmVjdC8uL3NyYy91dGlscy9jb25uZWN0LnRzIiwid2VicGFjazovL0B1c2VwYXJhZ29uL2Nvbm5lY3QvLi9zcmMvdXRpbHMvY3J5cHRvLnRzIiwid2VicGFjazovL0B1c2VwYXJhZ29uL2Nvbm5lY3QvLi9zcmMvdXRpbHMvZ2VuZXJpYy50cyIsIndlYnBhY2s6Ly9AdXNlcGFyYWdvbi9jb25uZWN0Ly4vc3JjL3V0aWxzL2h0dHAudHMiLCJ3ZWJwYWNrOi8vQHVzZXBhcmFnb24vY29ubmVjdC8uL3NyYy91dGlscy90aHJvdHRsZS50cyIsIndlYnBhY2s6Ly9AdXNlcGFyYWdvbi9jb25uZWN0Ly4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2guanMiLCJ3ZWJwYWNrOi8vQHVzZXBhcmFnb24vY29ubmVjdC8uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL2NvbW1vbi5qcyIsIndlYnBhY2s6Ly9AdXNlcGFyYWdvbi9jb25uZWN0Ly4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvaG1hYy5qcyIsIndlYnBhY2s6Ly9AdXNlcGFyYWdvbi9jb25uZWN0Ly4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvcmlwZW1kLmpzIiwid2VicGFjazovL0B1c2VwYXJhZ29uL2Nvbm5lY3QvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEuanMiLCJ3ZWJwYWNrOi8vQHVzZXBhcmFnb24vY29ubmVjdC8uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS8xLmpzIiwid2VicGFjazovL0B1c2VwYXJhZ29uL2Nvbm5lY3QvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvMjI0LmpzIiwid2VicGFjazovL0B1c2VwYXJhZ29uL2Nvbm5lY3QvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvMjU2LmpzIiwid2VicGFjazovL0B1c2VwYXJhZ29uL2Nvbm5lY3QvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvMzg0LmpzIiwid2VicGFjazovL0B1c2VwYXJhZ29uL2Nvbm5lY3QvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvNTEyLmpzIiwid2VicGFjazovL0B1c2VwYXJhZ29uL2Nvbm5lY3QvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvY29tbW9uLmpzIiwid2VicGFjazovL0B1c2VwYXJhZ29uL2Nvbm5lY3QvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC91dGlscy5qcyIsIndlYnBhY2s6Ly9AdXNlcGFyYWdvbi9jb25uZWN0Ly4vbm9kZV9tb2R1bGVzL2luaGVyaXRzL2luaGVyaXRzX2Jyb3dzZXIuanMiLCJ3ZWJwYWNrOi8vQHVzZXBhcmFnb24vY29ubmVjdC8uL25vZGVfbW9kdWxlcy9qd3QtZGVjb2RlL2J1aWxkL2p3dC1kZWNvZGUuZXNtLmpzIiwid2VicGFjazovL0B1c2VwYXJhZ29uL2Nvbm5lY3QvLi9ub2RlX21vZHVsZXMvbWluaW1hbGlzdGljLWFzc2VydC9pbmRleC5qcyIsIndlYnBhY2s6Ly9AdXNlcGFyYWdvbi9jb25uZWN0Ly4vbm9kZV9tb2R1bGVzL3Byb2Nlc3MvYnJvd3Nlci5qcyIsIndlYnBhY2s6Ly9AdXNlcGFyYWdvbi9jb25uZWN0Ly4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsIndlYnBhY2s6Ly9AdXNlcGFyYWdvbi9jb25uZWN0L3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL0B1c2VwYXJhZ29uL2Nvbm5lY3Qvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL0B1c2VwYXJhZ29uL2Nvbm5lY3Qvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9AdXNlcGFyYWdvbi9jb25uZWN0L3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vQHVzZXBhcmFnb24vY29ubmVjdC93ZWJwYWNrL2JlZm9yZS1zdGFydHVwIiwid2VicGFjazovL0B1c2VwYXJhZ29uL2Nvbm5lY3Qvd2VicGFjay9zdGFydHVwIiwid2VicGFjazovL0B1c2VwYXJhZ29uL2Nvbm5lY3Qvd2VicGFjay9hZnRlci1zdGFydHVwIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBqd3REZWNvZGUgZnJvbSAnand0LWRlY29kZSc7XG5cbmltcG9ydCB7IEFDVElPTl9DVVNUT00gfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBDcmVkZW50aWFsU3RhdHVzLCBJQ29ubmVjdENyZWRlbnRpYWwgfSBmcm9tICcuL2VudGl0aWVzL2Nvbm5lY3RDcmVkZW50aWFsLmludGVyZmFjZSc7XG5pbXBvcnQgeyBPYXV0aENhbGxiYWNrUmVzcG9uc2UgfSBmcm9tICcuL2VudGl0aWVzL2NyZWRlbnRpYWwuaW50ZXJmYWNlJztcbmltcG9ydCB7XG4gIElDb25uZWN0SW50ZWdyYXRpb25XaXRoQ3JlZGVudGlhbEluZm8sXG4gIElJbnRlZ3JhdGlvbk1ldGFkYXRhLFxuICBnZXRJbnRlZ3JhdGlvblR5cGVOYW1lLFxuICBpc0N1c3RvbUludGVncmF0aW9uVHlwZU5hbWUsXG59IGZyb20gJy4vZW50aXRpZXMvaW50ZWdyYXRpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IElQZXJzb25hLCBQZXJzb25hTWV0YSB9IGZyb20gJy4vZW50aXRpZXMvcGVyc29uYS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSUNvbm5lY3RTREtQcm9qZWN0IH0gZnJvbSAnLi9lbnRpdGllcy9wcm9qZWN0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBJQ29ubmVjdFVzZXJDb250ZXh0IH0gZnJvbSAnLi9oZWxwZXJzL0Nvbm5lY3RVc2VyQ29udGV4dCc7XG5pbXBvcnQgeyBzaG91bGRTaG93UHJlQXV0aElucHV0cywgc3RhcnRPQXV0aEZsb3cgfSBmcm9tICcuL2hlbHBlcnMvb2F1dGgnO1xuaW1wb3J0IFNES0V2ZW50RW1pdHRlciBmcm9tICcuL1NES0V2ZW50RW1pdHRlcic7XG5pbXBvcnQgeyBDb25uZWN0U2RrRW52aXJvbm1lbnRzIH0gZnJvbSAnLi9zZXJ2ZXIudHlwZXMnO1xuaW1wb3J0IHtcbiAgQWN0aW9uQ29uZmlnRFRPLFxuICBBdXRoZW50aWNhdGVPcHRpb25zLFxuICBBdXRoZW50aWNhdGVkQ29ubmVjdFVzZXIsXG4gIENvbm5lY3RBZGRPbixcbiAgUHJvcHMgYXMgQ29ubmVjdE1vZGFsUHJvcHMsXG4gIENvbm5lY3RQYXJhbXMsXG4gIENvbm5lY3RVc2VyLFxuICBEb2N1bWVudExvYWRpbmdTdGF0ZSxcbiAgRXZlbnRJbmZvLFxuICBGdW5jdGlvblByb3BlcnR5TmFtZXMsXG4gIElDb25uZWN0U0RLLFxuICBJQ29ubmVjdFVzZXIsXG4gIElORkVSX0NPTlRFTlRfVFlQRV9GUk9NX0NPTk5FQ1RfT1BUSU9OUyxcbiAgSW5zdGFsbE9wdGlvbnMsXG4gIEludGVncmF0aW9uSW5zdGFsbEV2ZW50LFxuICBNb2RhbENvbmZpZyxcbiAgU0RLRnVuY3Rpb25FcnJvck1lc3NhZ2UsXG4gIFNES0Z1bmN0aW9uSW52b2NhdGlvbk1lc3NhZ2UsXG4gIFNES0Z1bmN0aW9uUmVzcG9uc2VNZXNzYWdlLFxuICBTREtSZWNlaXZlZE1lc3NhZ2UsXG4gIFNES19FVkVOVCxcbiAgVHJpZ2dlcldvcmtmbG93UmVxdWVzdCxcbiAgVUlVcGRhdGVNZXNzYWdlLFxuICBVbndyYXBQcm9taXNlLFxuICBVc2VyUHJvdmlkZWRJbnRlZ3JhdGlvbkNvbmZpZyxcbiAgb3ZlcnJpZGVBY3Rpb25BbGlhcyxcbn0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBnZXRBc3NldFVybCB9IGZyb20gJy4vdXRpbHMvY29ubmVjdCc7XG5pbXBvcnQgeyBoYXNoIH0gZnJvbSAnLi91dGlscy9jcnlwdG8nO1xuaW1wb3J0IHsgZ2V0U2VydmljZVVybCwgaXNWYWxpZFVybCwgc2FuaXRpemVVcmwgfSBmcm9tICcuL3V0aWxzL2h0dHAnO1xuaW1wb3J0IHsgQ2FjaGVUaHJvdHRsZSB9IGZyb20gJy4vdXRpbHMvdGhyb3R0bGUnO1xuXG5jb25zdCBQQVJBR09OX1JPT1RfSUZSQU1FX0lEID0gJ3BhcmFnb24tY29ubmVjdC1mcmFtZSc7XG5jb25zdCBQQVJBR09OX1JPT1RfSUZSQU1FX0NPTlRBSU5FUl9JRCA9IGAke1BBUkFHT05fUk9PVF9JRlJBTUVfSUR9LWNvbnRhaW5lcmA7XG5jb25zdCBQQVJBR09OX1NUQVRFX1NUT1JBR0VfS0VZID0gJ3BhcmFnb24tY29ubmVjdC11c2VyLXN0YXRlJztcbmV4cG9ydCBjb25zdCBQQVJBR09OX09WRVJGTE9XX0VNUFRZX1ZBTFVFID0gJ1BBUkFHT05fT1ZFUkZMT1dfRU1QVFlfVkFMVUUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb25uZWN0U0RLIGV4dGVuZHMgU0RLRXZlbnRFbWl0dGVyIGltcGxlbWVudHMgSUNvbm5lY3RTREsge1xuICByb290OiBIVE1MSUZyYW1lRWxlbWVudCB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSByb290TG9hZGVkOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgcHJvamVjdElkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgbW9kYWxTdGF0ZTogQ29ubmVjdE1vZGFsUHJvcHMgPSB7XG4gICAgaW50ZWdyYXRpb246IG51bGwsXG4gICAgb25DbG9zZTogdGhpcy5vbkNsb3NlLmJpbmQodGhpcyksXG4gICAgb3ZlcmxheVN0eWxlOiB7IG92ZXJmbG93OiAnYXV0bycgfSxcbiAgICBvbk9wZW46IHRoaXMub25PcGVuLmJpbmQodGhpcyksXG4gICAgYXBpSW5zdGFsbGF0aW9uT3B0aW9uczoge1xuICAgICAgaXNBcGlJbnN0YWxsYXRpb246IGZhbHNlLFxuICAgICAgc2hvd1BvcnRhbEFmdGVySW5zdGFsbDogZmFsc2UsXG4gICAgfSxcbiAgfTtcbiAgcHJpdmF0ZSB1c2VyU3RhdGU6IENvbm5lY3RVc2VyID0ge1xuICAgIGF1dGhlbnRpY2F0ZWQ6IGZhbHNlLFxuICB9O1xuICBwcml2YXRlIGxvYWRlZENvbmZpZ3M6IHsgW3R5cGU6IHN0cmluZ106IE1vZGFsQ29uZmlnIH0gPSB7fTtcbiAgcHJpdmF0ZSBsb2FkZWRJbnRlZ3JhdGlvbnM6IHsgW3R5cGU6IHN0cmluZ106IElDb25uZWN0SW50ZWdyYXRpb25XaXRoQ3JlZGVudGlhbEluZm8gfSA9IHt9O1xuICBwcml2YXRlIGVuZFVzZXJJbnRlZ3JhdGlvbkNvbmZpZzogeyBbdHlwZTogc3RyaW5nXTogVXNlclByb3ZpZGVkSW50ZWdyYXRpb25Db25maWcgfSA9IHt9O1xuICBwcml2YXRlIGVudmlyb25tZW50czogQ29ubmVjdFNka0Vudmlyb25tZW50cztcbiAgcHJpdmF0ZSBwcm9qZWN0OiBJQ29ubmVjdFNES1Byb2plY3Q7XG5cbiAgLyoqXG4gICAqIG1hcCBiL3cgaW50ZWdyYXRpb24ga2V5IG5hbWUgdG8gaW50ZWdyYXRpb24gbWV0YWRhdGFcbiAgICovXG4gIHByaXZhdGUgbWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIElJbnRlZ3JhdGlvbk1ldGFkYXRhPiA9IHt9O1xuXG4gIC8qKlxuICAgKiBjYWNoZSBzZXJ2aWNlXG4gICAqL1xuICBwcml2YXRlIGNhY2hlZEFwaVJlc3BvbnNlOiBDYWNoZVRocm90dGxlID0gbmV3IENhY2hlVGhyb3R0bGUoeyB0dGw6IDEwMDAgKiA1IH0pO1xuXG4gIC8qKlxuICAgKiBpbiBvcmRlciB0byBub3QgY2FsbCBtdWx0aXBsZSBzYW1lIEdFVCByZXF1ZXN0IGF0IHNhbWUgdGltZVxuICAgKiB3ZSBhcmUgc3RvcmluZyB7a2V5IC0+IHByb21pc2V9IG1hcFxuICAgKi9cbiAgcHJpdmF0ZSBrZXlUb1JlcXVlc3RQcm9taXNlTWFwOiBSZWNvcmQ8c3RyaW5nLCBQcm9taXNlPHVua25vd24+PiA9IHt9O1xuXG4gIC8qKlxuICAgKiB0aGlzIHdpbGwgc3RvcmUgdGhlIG9yaWdpbmFsIG92ZXJmbG93IHN0eWxlIG9mIGJvZHlcbiAgICogd2UgYXJlIHVzaW5nIFBBUkFHT05fT1ZFUkZMT1dfRU1QVFlfVkFMVUUgYXMgZGVmYXVsdFxuICAgKiBzbyB0aGF0IHdlIHdpbGwgYmUgYWJsZSB0byBrbm93IHdoZXRoZXIgc3R5bGUgaXMgYWRkZWQgaW4gYm9keSBvciBub3RcbiAgICovXG4gIHByaXZhdGUgb3JpZ2luYWxCb2R5T3ZlcmZsb3c6IHN0cmluZyB8IG51bGwgPSBQQVJBR09OX09WRVJGTE9XX0VNUFRZX1ZBTFVFO1xuXG4gIHByaXZhdGUgY29uZmlnczogUmVjb3JkPHN0cmluZywgQWN0aW9uQ29uZmlnRFRPPiA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ2Nvbm5lY3Qgc2RrIGNhbiBvbmx5IGJlIHVzZWQgb24gYnJvd3NlcicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGFzc2V0VVJMOiBzdHJpbmcgPSBnZXRBc3NldFVybCh7XG4gICAgICBDRE5fUFVCTElDX1VSTDogcHJvY2Vzcy5lbnYuQ0ROX1BVQkxJQ19VUkwgfHwgJycsXG4gICAgICBEQVNIQk9BUkRfUFVCTElDX1VSTDogcHJvY2Vzcy5lbnYuREFTSEJPQVJEX1BVQkxJQ19VUkwgfHwgJycsXG4gICAgICBOT0RFX0VOVjogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgfHwgJycsXG4gICAgICBQTEFURk9STV9FTlY6IHByb2Nlc3MuZW52LlBMQVRGT1JNX0VOViB8fCAnJyxcbiAgICAgIFZFUlNJT046IHByb2Nlc3MuZW52LlZFUlNJT04gfHwgJycsXG4gICAgfSk7XG4gICAgdGhpcy5lbnZpcm9ubWVudHMgPSB7XG4gICAgICBDRE5fUFVCTElDX1VSTDogYXNzZXRVUkwsXG4gICAgICBDT05ORUNUX1BVQkxJQ19VUkw6IHByb2Nlc3MuZW52LkNPTk5FQ1RfUFVCTElDX1VSTCBhcyBzdHJpbmcsXG4gICAgICBEQVNIQk9BUkRfUFVCTElDX1VSTDogcHJvY2Vzcy5lbnYuREFTSEJPQVJEX1BVQkxJQ19VUkwgYXMgc3RyaW5nLFxuICAgICAgTk9ERV9FTlY6IHByb2Nlc3MuZW52Lk5PREVfRU5WIGFzIHN0cmluZyxcbiAgICAgIFBBU1NQT1JUX1BVQkxJQ19VUkw6IHByb2Nlc3MuZW52LlBBU1NQT1JUX1BVQkxJQ19VUkwgYXMgc3RyaW5nLFxuICAgICAgUExBVEZPUk1fRU5WOiBwcm9jZXNzLmVudi5QTEFURk9STV9FTlYgYXMgc3RyaW5nLFxuICAgICAgVkVSU0lPTjogcHJvY2Vzcy5lbnYuVkVSU0lPTiBhcyBzdHJpbmcsXG4gICAgICBaRVVTX1BVQkxJQ19VUkw6IHByb2Nlc3MuZW52LlpFVVNfUFVCTElDX1VSTCBhcyBzdHJpbmcsXG4gICAgfTtcblxuICAgIGlmICghdGhpcy5lbnZpcm9ubWVudHMuQ09OTkVDVF9QVUJMSUNfVVJMKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFnb24gU0RLIGVycm9yISBObyBgQ09OTkVDVF9QVUJMSUNfVVJMYCBjb25maWd1cmVkLicpO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMuZW52aXJvbm1lbnRzLkRBU0hCT0FSRF9QVUJMSUNfVVJMKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFnb24gU0RLIGVycm9yISBObyBgREFTSEJPQVJEX1BVQkxJQ19VUkxgIGNvbmZpZ3VyZWQuJyk7XG4gICAgfSBlbHNlIGlmICghdGhpcy5lbnZpcm9ubWVudHMuUEFTU1BPUlRfUFVCTElDX1VSTCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXJhZ29uIFNESyBlcnJvciEgTm8gYFBBU1NQT1JUX1BVQkxJQ19VUkxgIGNvbmZpZ3VyZWQuJyk7XG4gICAgfSBlbHNlIGlmICghdGhpcy5lbnZpcm9ubWVudHMuWkVVU19QVUJMSUNfVVJMKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFnb24gU0RLIGVycm9yISBObyBgWkVVU19QVUJMSUNfVVJMYCBjb25maWd1cmVkLicpO1xuICAgIH1cblxuICAgIHRoaXMubG9hZFN0YXRlKCk7XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIHRoaXMuZXZlbnRNZXNzYWdlSGFuZGxlci5iaW5kKHRoaXMpKTtcblxuICAgIGlmICh3aW5kb3cuZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gRG9jdW1lbnRMb2FkaW5nU3RhdGUuTE9BRElORykge1xuICAgICAgLy8gc3RpbGwgbG9hZGluZywgd2FpdCBmb3IgdGhlIGV2ZW50XG4gICAgICB3aW5kb3cuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsICgpID0+IHtcbiAgICAgICAgdGhpcy5jcmVhdGVSZWFjdFJvb3QoKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBET00gaXMgcmVhZHkhXG4gICAgICB0aGlzLmNyZWF0ZVJlYWN0Um9vdCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBwb3N0IG1lc3NhZ2UgaGFuZGxlclxuICAgKiBAcGFyYW0gZXZlbnRcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZXZlbnRNZXNzYWdlSGFuZGxlcihldmVudDogTWVzc2FnZUV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgc3dpdGNoIChldmVudC5kYXRhLnR5cGUpIHtcbiAgICAgIGNhc2UgJ29hdXRoX3N1Y2Nlc3NfY2FsbGJhY2snOlxuICAgICAgICBhd2FpdCB0aGlzLl9vYXV0aENhbGxiYWNrKGV2ZW50LmRhdGEuY3JlZGVudGlhbCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnb2F1dGhfZXJyb3JfY2FsbGJhY2snOlxuICAgICAgICBhd2FpdCB0aGlzLl9vYXV0aEVycm9yQ2FsbGJhY2soZXZlbnQuZGF0YS5lcnJvcik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXdhaXQgdGhpcy5mdW5jdGlvbkludm9jYXRpb25IYW5kbGVyKGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZ1bmN0aW9uSW52b2NhdGlvbkhhbmRsZXI8VCBleHRlbmRzIEZ1bmN0aW9uUHJvcGVydHlOYW1lczxDb25uZWN0U0RLPj4oXG4gICAgZXZlbnQ6IE1lc3NhZ2VFdmVudCxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKChldmVudC5kYXRhIGFzIFNES1JlY2VpdmVkTWVzc2FnZSkubWVzc2FnZVR5cGUgIT09ICdTREtfRlVOQ1RJT05fSU5WT0NBVElPTicpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgeyB0eXBlLCBpZCwgcGFyYW1ldGVycyB9ID0gZXZlbnQuZGF0YSBhcyBTREtGdW5jdGlvbkludm9jYXRpb25NZXNzYWdlPFQ+O1xuICAgIGxldCByZXBseTogU0RLRnVuY3Rpb25SZXNwb25zZU1lc3NhZ2U8VD4gfCBTREtGdW5jdGlvbkVycm9yTWVzc2FnZSB8IHVuZGVmaW5lZDtcblxuICAgIHRyeSB7XG4gICAgICAvLyBAdHMtaWdub3JlIFRoZSBzcHJlYWQgaXNuJ3QgcmVjb2duaXplZCBoZXJlIGFzIHZhbGlkIGFyZ3NcbiAgICAgIGNvbnN0IHJlc3VsdCA9IChhd2FpdCB0aGlzW3R5cGVdKC4uLnBhcmFtZXRlcnMpKSBhcyBVbndyYXBQcm9taXNlPFJldHVyblR5cGU8Q29ubmVjdFNES1tUXT4+O1xuICAgICAgcmVwbHkgPSB7IG1lc3NhZ2VUeXBlOiAnU0RLX0ZVTkNUSU9OX1JFU1BPTlNFJywgaWQsIHR5cGUsIHJlc3VsdCB9O1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmVwbHkgPSB7IG1lc3NhZ2VUeXBlOiAnU0RLX0ZVTkNUSU9OX0VSUk9SJywgZXJyb3I6IHRydWUsIG1lc3NhZ2U6IGVyci5tZXNzYWdlLCBpZCB9O1xuICAgIH1cblxuICAgIChldmVudC5zb3VyY2UgYXMgV2luZG93KS5wb3N0TWVzc2FnZShyZXBseSwgdGhpcy5lbnZpcm9ubWVudHMuQ09OTkVDVF9QVUJMSUNfVVJMKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlUmVhY3RSb290KCk6IHZvaWQge1xuICAgIHRoaXMucm9vdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpO1xuICAgIHRoaXMucm9vdC5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICB0aGlzLnJvb3RMb2FkZWQgPSB0cnVlO1xuICAgICAgLy8gd2hlbiByb290IGlzIGxvYWRlZCB0aGVuIHJlbmRlciBjb21wb25lbnRcbiAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGlzQXRSb290OiBib29sZWFuID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgIyR7UEFSQUdPTl9ST09UX0lGUkFNRV9DT05UQUlORVJfSUR9YClcbiAgICAgID8gdHJ1ZVxuICAgICAgOiBmYWxzZTtcbiAgICB0aGlzLnJvb3QuaWQgPSBQQVJBR09OX1JPT1RfSUZSQU1FX0lEO1xuICAgIHRoaXMucm9vdC5zcmMgPSBgJHt0aGlzLmVudmlyb25tZW50cy5DT05ORUNUX1BVQkxJQ19VUkx9L3VpJHtcbiAgICAgIHRoaXMucHJvamVjdElkID8gYD9wcm9qZWN0SWQ9JHt0aGlzLnByb2plY3RJZH1gIDogJydcbiAgICB9YDtcbiAgICB0aGlzLnJvb3Quc3R5bGUucG9zaXRpb24gPSBpc0F0Um9vdCA/ICdhYnNvbHV0ZScgOiAnZml4ZWQnO1xuICAgIHRoaXMucm9vdC5zdHlsZS50b3AgPSAnMCc7XG4gICAgdGhpcy5yb290LnN0eWxlLmxlZnQgPSAnMCc7XG4gICAgdGhpcy5yb290LnN0eWxlLndpZHRoID0gaXNBdFJvb3QgPyAnMTAwJScgOiAnMTAwdncnO1xuICAgIHRoaXMucm9vdC5zdHlsZS5oZWlnaHQgPSBpc0F0Um9vdCA/ICcxMDAlJyA6ICcxMDB2aCc7XG4gICAgdGhpcy5yb290LnN0eWxlLnpJbmRleCA9ICcyMTQ3NDgzNjQ3JztcbiAgICB0aGlzLnJvb3Quc3R5bGUuZGlzcGxheSA9ICdub25lJztcblxuICAgIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHtQQVJBR09OX1JPT1RfSUZSQU1FX0NPTlRBSU5FUl9JRH1gKSB8fCBkb2N1bWVudC5ib2R5KT8uYXBwZW5kQ2hpbGQoXG4gICAgICB0aGlzLnJvb3QsXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVBY3Rpb24oYWN0aW9uOiBzdHJpbmcsIHZhbGlkYXRlSXNFbmFibGVkOiBib29sZWFuID0gZmFsc2UpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMubG9hZGVkSW50ZWdyYXRpb25zW2FjdGlvbl0gJiYgIWlzQ3VzdG9tSW50ZWdyYXRpb25UeXBlTmFtZShhY3Rpb24pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBcIiR7YWN0aW9ufVwiIGlzIG5vdCBhIHZhbGlkIGludGVncmF0aW9uIHR5cGUuIFRoZSBpbnRlZ3JhdGlvbnMgeW91IGhhdmUgY29uZmlndXJlZCBmb3IgdGhpcyBQYXJhZ29uIHByb2plY3QgYXJlOlxuXG4ke09iamVjdC5rZXlzKHRoaXMubG9hZGVkQ29uZmlncylcbiAgLm1hcCgodmFsaWRBY3Rpb246IHN0cmluZykgPT4gYC0gXCIke3ZhbGlkQWN0aW9ufVwiYClcbiAgLmpvaW4oJ1xcbicpfVxuYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmxvYWRlZENvbmZpZ3NbYWN0aW9uXSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgcGFyYWdvbi5jb25uZWN0KCkgd2FzIGNhbGxlZCB3aXRoIFwiJHthY3Rpb259XCIsIGJ1dCB5b3UgZG8gbm90IGhhdmUgdGhpcyBpbnRlZ3JhdGlvbiBzZXQgdXAgaW4geW91ciBQYXJhZ29uIHByb2plY3QgeWV0LlxuXG4ke09iamVjdC5rZXlzKHRoaXMubG9hZGVkQ29uZmlncylcbiAgLm1hcCgodmFsaWRBY3Rpb246IHN0cmluZykgPT4gYC0gXCIke3ZhbGlkQWN0aW9ufVwiYClcbiAgLmpvaW4oJ1xcbicpfWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5sb2FkZWRJbnRlZ3JhdGlvbnNbYWN0aW9uXT8uaXNBY3RpdmUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYHBhcmFnb24uY29ubmVjdCgpIHdhcyBjYWxsZWQgd2l0aCBcIiR7YWN0aW9ufVwiLCBidXQgdGhpcyBpbnRlZ3JhdGlvbiBpcyBub3QgYWN0aXZlIGluIHlvdXIgUGFyYWdvbiBwcm9qZWN0IHlldC5gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodmFsaWRhdGVJc0VuYWJsZWQgJiYgdGhpcy51c2VyU3RhdGUuYXV0aGVudGljYXRlZCkge1xuICAgICAgcmV0dXJuIEJvb2xlYW4odGhpcy51c2VyU3RhdGUuaW50ZWdyYXRpb25zW2FjdGlvbl0/LmVuYWJsZWQpO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBib290c3RyYXBTREtTdGF0ZSh1c2VyTWV0YT86IFBlcnNvbmFNZXRhKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLnByb2plY3RJZCB8fCAhdGhpcy51c2VyU3RhdGUuYXV0aGVudGljYXRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucHJvamVjdCA9IChhd2FpdCB0aGlzLnNlbmRDb25uZWN0UmVxdWVzdDxJQ29ubmVjdFNES1Byb2plY3Q+KFxuICAgICAgYC9zZGsvcHJvamVjdHMvJHt0aGlzLnByb2plY3RJZH1gLFxuICAgICAge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgJ1gtUGFyYWdvbi1DYWNoZS1NZXRhZGF0YSc6ICcxJyxcbiAgICAgICAgICAuLi4odXNlck1ldGFcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICdYLVBhcmFnb24tVXNlci1NZXRhZGF0YSc6IEpTT04uc3RyaW5naWZ5KHVzZXJNZXRhKSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7fSksXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgZmFsc2UsXG4gICAgKSkgYXMgSUNvbm5lY3RTREtQcm9qZWN0O1xuXG4gICAgYXdhaXQgdGhpcy51cGRhdGVMb2NhbFN0YXRlKCk7XG4gIH1cblxuICBzZXRNb2RhbFN0YXRlKHN0YXRlUGFydGlhbDogUGFydGlhbDxDb25uZWN0TW9kYWxQcm9wcz4pOiB2b2lkIHtcbiAgICB0aGlzLm1vZGFsU3RhdGUgPSB7XG4gICAgICBjb25maWc6IHVuZGVmaW5lZCxcbiAgICAgIC4uLnRoaXMubW9kYWxTdGF0ZSxcbiAgICAgIC4uLnN0YXRlUGFydGlhbCxcbiAgICB9O1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgcHJldmlvdXMgU0RLIHN0YXRlIHNhdmVkIGluIGxvY2FsU3RvcmFnZS5cbiAgICpcbiAgICogKipXYXJuaW5nOioqIFRoaXMgZmF2b3JzIHN0b3JlZCB0byBjdXJyZW50IHN0YXRlLiBUaGlzIHNob3VsZCB0eXBpY2FsbHkgYmUgY2FsbGVkIGluXG4gICAqIHVuYXV0aGVudGljYXRlZCBjb250ZXh0cywgYXMgYSBmYWxsYmFjay5cbiAgICovXG4gIHByaXZhdGUgbG9hZFN0YXRlKCk6IHZvaWQge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbG9jYWxTdGF0ZToge1xuICAgICAgICAgIHVzZXJTdGF0ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gICAgICAgICAgcHJvamVjdElkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIH0gPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oUEFSQUdPTl9TVEFURV9TVE9SQUdFX0tFWSlcbiAgICAgICAgICA/IEpTT04ucGFyc2Uod2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKFBBUkFHT05fU1RBVEVfU1RPUkFHRV9LRVkpIGFzIHN0cmluZylcbiAgICAgICAgICA6IHt9O1xuXG4gICAgICAgIGlmIChsb2NhbFN0YXRlLnByb2plY3RJZCkge1xuICAgICAgICAgIHRoaXMucHJvamVjdElkID0gbG9jYWxTdGF0ZS5wcm9qZWN0SWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobG9jYWxTdGF0ZS51c2VyU3RhdGUpIHtcbiAgICAgICAgICBjb25zdCB7IHVzZXJTdGF0ZSB9ID0gbG9jYWxTdGF0ZTtcbiAgICAgICAgICBpZiAoJ2F1dGhlbnRpY2F0ZWQnIGluIHVzZXJTdGF0ZSAmJiB1c2VyU3RhdGUuYXV0aGVudGljYXRlZCAmJiAndG9rZW4nIGluIHVzZXJTdGF0ZSkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVBdXRoZW50aWNhdGVkVXNlcih1c2VyU3RhdGUpO1xuICAgICAgICAgICAgLy8gUmVmcmVzaCB1c2VyIHN0YXRlIGF1dG9tYXRpY2FsbHksIGlmIGF2YWlsYWJsZVxuICAgICAgICAgICAgdGhpcy5ib290c3RyYXBTREtTdGF0ZSgpLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICAgICAgLy8gUEFSQS0zMjY3XG4gICAgICAgICAgICAgIHRoaXMuY2xlYXJTdGF0ZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgJ01hbGZvcm1hdHRlZCBvciB1bmF1dGhlbnRpY2F0ZWQgdXNlciB3YXMgcGVyc2lzdGVkIGludG8gbG9jYWxTdG9yYWdlLiBSZWZ1c2luZyB0byBsb2FkLicsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHRoaXMuY2xlYXJTdGF0ZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyB0aGUgY3VycmVudCBTREsgc3RhdGUgaW50byBsb2NhbFN0b3JhZ2UsIGlmIGF2YWlsYWJsZS5cbiAgICovXG4gIHByaXZhdGUgc2F2ZVN0YXRlKCk6IHZvaWQge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnVzZXJTdGF0ZS5hdXRoZW50aWNhdGVkKSB7XG4gICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oXG4gICAgICAgIFBBUkFHT05fU1RBVEVfU1RPUkFHRV9LRVksXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHsgcHJvamVjdElkOiB0aGlzLnByb2plY3RJZCwgdXNlclN0YXRlOiB0aGlzLnVzZXJTdGF0ZSB9KSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENsZWFycyB0aGUgY3VycmVudCBTREsgc3RhdGUgZnJvbSBsb2NhbFN0b3JhZ2UsIGlmIGF2YWlsYWJsZS5cbiAgICovXG4gIHByaXZhdGUgY2xlYXJTdGF0ZSgpOiB2b2lkIHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShQQVJBR09OX1NUQVRFX1NUT1JBR0VfS0VZKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlbmRlcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yb290ICYmIHRoaXMucm9vdExvYWRlZCkge1xuICAgICAgY29uc3QgeyBvbkNsb3NlLCBvbk9wZW4sIC4uLm1vZGFsU3RhdGUgfSA9IHRoaXMubW9kYWxTdGF0ZTtcbiAgICAgIGNvbnN0IHVwZGF0ZTogVUlVcGRhdGVNZXNzYWdlID0ge1xuICAgICAgICBtZXNzYWdlVHlwZTogJ1VJX1VQREFURScsXG4gICAgICAgIG5leHRDb250ZXh0OiB7XG4gICAgICAgICAgdXNlcjogdGhpcy51c2VyU3RhdGUsXG4gICAgICAgICAgcHJvamVjdElkOiB0aGlzLnByb2plY3RJZCxcbiAgICAgICAgICBlbnZpcm9ubWVudHM6IHRoaXMuZW52aXJvbm1lbnRzLFxuICAgICAgICAgIHByb2plY3Q6IHRoaXMucHJvamVjdCxcbiAgICAgICAgICBlbmRVc2VySW50ZWdyYXRpb25Db25maWc6IHRoaXMubW9kYWxTdGF0ZS5pbnRlZ3JhdGlvblxuICAgICAgICAgICAgPyB0aGlzLmVuZFVzZXJJbnRlZ3JhdGlvbkNvbmZpZ1t0aGlzLm1vZGFsU3RhdGUuaW50ZWdyYXRpb24udHlwZV1cbiAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICB9LFxuICAgICAgICBuZXh0TW9kYWxTdGF0ZTogbW9kYWxTdGF0ZSxcbiAgICAgIH07XG5cbiAgICAgIGlmICghdGhpcy5yb290LmNvbnRlbnRXaW5kb3cpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdCcm93c2VyIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucm9vdC5jb250ZW50V2luZG93LnBvc3RNZXNzYWdlKHVwZGF0ZSwgdGhpcy5lbnZpcm9ubWVudHMuQ09OTkVDVF9QVUJMSUNfVVJMKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogdGhpcyB3aWxsIHVwZGF0ZSBjb250YWluZXIgc3R5bGVcbiAgICogQHBhcmFtIHBhcmFtMFxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgdXBkYXRlQ29udGFpbmVyU3R5bGUoeyBpc01vZGFsU2hvd24gfTogeyBpc01vZGFsU2hvd246IGJvb2xlYW4gfSkge1xuICAgIGlmICghdGhpcy5yb290KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChpc01vZGFsU2hvd24pIHtcbiAgICAgIHRoaXMucm9vdC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yb290LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEF1dGhlbnRpY2F0ZSB5b3VyIGVuZCB1c2VyIGludG8gdGhlIFBhcmFnb24gQ29ubmVjdCBTREsuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9qZWN0SWQgWW91ciBQYXJhZ29uIHByb2plY3QgSUQuXG4gICAqIEBwYXJhbSB0b2tlbiBBIEpXVCBzaWduZWQgYnkgeW91ciBBcHAgU2VydmVyLiBUaGUgSldUIHNob3VsZCBpbmNsdWRlIGEgdXNlciBJRCBhbmQgYVxuICAgKiBzZXNzaW9uIGV4cGlyYXRpb24gdGltZS5cbiAgICovXG4gIGFzeW5jIGF1dGhlbnRpY2F0ZShcbiAgICBwcm9qZWN0SWQ6IHN0cmluZyxcbiAgICB0b2tlbjogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBBdXRoZW50aWNhdGVPcHRpb25zLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXByb2plY3RJZCB8fCAhdG9rZW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigncHJvamVjdElkIG9yIHRva2VuIG5vdCBzcGVjaWZpZWQgdG8gcGFyYWdvbi5hdXRoZW50aWNhdGUoKScpO1xuICAgIH1cbiAgICBsZXQgZGVjb2RlZEp3dDogeyBzdWI/OiBzdHJpbmc7IGlkPzogc3RyaW5nIH0gPSB7fTtcbiAgICB0cnkge1xuICAgICAgZGVjb2RlZEp3dCA9IGp3dERlY29kZTx0eXBlb2YgZGVjb2RlZEp3dD4odG9rZW4pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBIHdlbGwtZm9ybWVkIEpXVCB3YXMgbm90IHByb3ZpZGVkIHRvIHBhcmFnb24uYXV0aGVudGljYXRlKCknKTtcbiAgICB9XG5cbiAgICB0aGlzLnByb2plY3RJZCA9IHByb2plY3RJZDtcbiAgICB0aGlzLnVzZXJTdGF0ZSA9IHtcbiAgICAgIGF1dGhlbnRpY2F0ZWQ6IHRydWUsXG4gICAgICB0b2tlbixcbiAgICAgIHVzZXJJZDogKGRlY29kZWRKd3Quc3ViIHx8IGRlY29kZWRKd3QuaWQpIGFzIHN0cmluZyxcbiAgICAgIGludGVncmF0aW9uczoge30sXG4gICAgICBtZXRhOiBvcHRpb25zPy5tZXRhZGF0YSA/PyB7fSxcbiAgICB9O1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmJvb3RzdHJhcFNES1N0YXRlKG9wdGlvbnM/Lm1ldGFkYXRhKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUud2FybigncGFyYWdvbi5hdXRoZW50aWNhdGUoKSBjb3VsZCBub3QgbG9naW4gdXNlcicsIGVycik7XG4gICAgICB0aGlzLmxvZ291dCgpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gYXV0aGVudGljYXRlIHVzZXIgd2l0aCBQYXJhZ29uOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIH1cbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgUGFyYWdvbiBhdXRoZW50aWNhdGlvbiBhbmQgaW50ZWdyYXRpb24gc3RhdGUgb2YgeW91ciBlbmQgdXNlci5cbiAgICovXG4gIGdldFVzZXIoKTogQ29ubmVjdFVzZXIge1xuICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBPYmplY3QuZW50cmllcyh0aGlzLnVzZXJTdGF0ZSkuZmlsdGVyKChba2V5XTogW3N0cmluZywgdW5rbm93bl0pID0+IGtleSAhPT0gJ3Rva2VuJyksXG4gICAgKSBhcyBDb25uZWN0VXNlcjtcbiAgfVxuXG4gIHVwZGF0ZUF1dGhlbnRpY2F0ZWRVc2VyKHN0YXRlUGFydGlhbDogUGFydGlhbDxBdXRoZW50aWNhdGVkQ29ubmVjdFVzZXI+KTogdm9pZCB7XG4gICAgaWYgKHRoaXMudXNlclN0YXRlLmF1dGhlbnRpY2F0ZWQpIHtcbiAgICAgIHRoaXMudXNlclN0YXRlID0geyAuLi50aGlzLnVzZXJTdGF0ZSwgLi4uc3RhdGVQYXJ0aWFsIH07XG4gICAgfSBlbHNlIGlmIChzdGF0ZVBhcnRpYWwuYXV0aGVudGljYXRlZCkge1xuICAgICAgdGhpcy51c2VyU3RhdGUgPSBzdGF0ZVBhcnRpYWwgYXMgQXV0aGVudGljYXRlZENvbm5lY3RVc2VyO1xuICAgIH1cbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvZ291dCB0aGUgY3VycmVudGx5IGF1dGhlbnRpY2F0ZWQgZW5kIHVzZXIgZnJvbSB0aGUgUGFyYWdvbiBTREsuXG4gICAqL1xuICBsb2dvdXQoKTogdm9pZCB7XG4gICAgdGhpcy51c2VyU3RhdGUgPSB7IGF1dGhlbnRpY2F0ZWQ6IGZhbHNlIH07XG4gICAgdGhpcy5jbGVhclN0YXRlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwbGF5IHRoZSBQYXJhZ29uIENvbm5lY3QgbW9kYWxcbiAgICovXG4gIGFzeW5jIGNvbm5lY3QoYWN0aW9uOiBzdHJpbmcsIHBhcmFtczogQ29ubmVjdFBhcmFtcyA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qge1xuICAgICAgbWFwT2JqZWN0RmllbGRzLFxuICAgICAgb3ZlcnJpZGVSZWRpcmVjdFVybCxcbiAgICAgIGlzQXBpSW5zdGFsbGF0aW9uID0gZmFsc2UsXG4gICAgICBzaG93UG9ydGFsQWZ0ZXJJbnN0YWxsLFxuICAgICAgYnlwYXNzUG9zdE9BdXRoUHJvbXB0LFxuICAgICAgLi4uY2FsbGJhY2tzXG4gICAgfSA9IHBhcmFtcztcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogKCkgPT4gdm9pZCwgcmVqZWN0OiAoZXJyOiBFcnJvcikgPT4gdm9pZCkgPT4ge1xuICAgICAgdGhpcy5zdWJzY3JpYmVUb0ludGVncmF0aW9uKGFjdGlvbiwge1xuICAgICAgICAuLi5jYWxsYmFja3MsXG4gICAgICAgIG9uSW5zdGFsbDogKGV2ZW50OiBJbnRlZ3JhdGlvbkluc3RhbGxFdmVudCwgdXNlcjogQXV0aGVudGljYXRlZENvbm5lY3RVc2VyKSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIGNhbGxiYWNrcz8ub25JbnN0YWxsXG4gICAgICAgICAgICA/IGNhbGxiYWNrcy5vbkluc3RhbGwoZXZlbnQsIHVzZXIpXG4gICAgICAgICAgICA6IGNhbGxiYWNrcz8ub25TdWNjZXNzPy4oZXZlbnQsIHVzZXIpO1xuICAgICAgICB9LFxuICAgICAgICBvbkVycm9yOiAoZXJyOiBFcnJvcikgPT4ge1xuICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgIGNhbGxiYWNrcz8ub25FcnJvcj8uKGVycik7XG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIG1hcE9iamVjdEZpZWxkcyAmJlxuICAgICAgICAgICF0aGlzLnByb2plY3QuYWNjZXNzaWJsZUZlYXR1cmVzLmluY2x1ZGVzKENvbm5lY3RBZGRPbi5EeW5hbWljRmllbGRNYXBwZXIpXG4gICAgICAgICkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBEeW5hbWljIEZpZWxkIE1hcHBpbmcgaXMgYXZhaWxhYmxlIG9uIG91ciBFbnRlcnByaXNlIHBsYW4uIENvbnRhY3Qgc2FsZXNAdXNlcGFyYWdvbi5jb20gdG8gbGVhcm4gbW9yZSBvciB1cGdyYWRlLmAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudmFsaWRhdGVBY3Rpb24oYWN0aW9uKTtcblxuICAgICAgICBpZiAob3ZlcnJpZGVSZWRpcmVjdFVybCAmJiAhaXNWYWxpZFVybChvdmVycmlkZVJlZGlyZWN0VXJsKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtvdmVycmlkZVJlZGlyZWN0VXJsfSBpcyBub3QgdmFsaWQgdXJsLmApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZW5kVXNlckludGVncmF0aW9uQ29uZmlnW2FjdGlvbl0gPSB7XG4gICAgICAgICAgbWFwT2JqZWN0RmllbGRzLFxuICAgICAgICAgIG92ZXJyaWRlUmVkaXJlY3RVcmw6IG92ZXJyaWRlUmVkaXJlY3RVcmwgPyBzYW5pdGl6ZVVybChvdmVycmlkZVJlZGlyZWN0VXJsKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgaW50ZWdyYXRpb246IElDb25uZWN0SW50ZWdyYXRpb25XaXRoQ3JlZGVudGlhbEluZm8gPSBPYmplY3QudmFsdWVzKFxuICAgICAgICAgIHRoaXMubG9hZGVkSW50ZWdyYXRpb25zLFxuICAgICAgICApLmZpbmQoXG4gICAgICAgICAgKGludGVncmF0aW9uOiBJQ29ubmVjdEludGVncmF0aW9uV2l0aENyZWRlbnRpYWxJbmZvKSA9PlxuICAgICAgICAgICAgZ2V0SW50ZWdyYXRpb25UeXBlTmFtZShpbnRlZ3JhdGlvbikgPT09IGFjdGlvbixcbiAgICAgICAgKSBhcyBJQ29ubmVjdEludGVncmF0aW9uV2l0aENyZWRlbnRpYWxJbmZvO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBpbiBjaHJvbWUgZ2V0dGluZyBpc3N1ZSBmb3IgYXN5bmNocm9ub3VzIHBvcHVwIG9wZW5pbmdcbiAgICAgICAgICogc2VlIFBBUkEtMTUwNVxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHBhcmFtcy5pc0FwaUluc3RhbGxhdGlvbiAmJlxuICAgICAgICAgICFzaG91bGRTaG93UHJlQXV0aElucHV0cyh7XG4gICAgICAgICAgICBpbnRlZ3JhdGlvbixcbiAgICAgICAgICAgIGF1dGhTY2hlbWU6IHRoaXMuY29uZmlnc1tpbnRlZ3JhdGlvbi50eXBlXS5hdXRoU2NoZW1lLFxuICAgICAgICAgICAgZW5kVXNlclN1cHBsaWVkVmFsdWVzOiB0aGlzLmNvbmZpZ3NbaW50ZWdyYXRpb24udHlwZV0uZW5kVXNlclN1cHBsaWVkVmFsdWVzLFxuICAgICAgICAgICAgaXNBY2NvdW50VHlwZVN1cHBvcnRlZDogdGhpcy5jb25maWdzW2ludGVncmF0aW9uLnR5cGVdLmlzQWNjb3VudFR5cGVTdXBwb3J0ZWQsXG4gICAgICAgICAgfSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgdm9pZCBzdGFydE9BdXRoRmxvdyh7XG4gICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgIHVzZXI6IHRoaXMudXNlclN0YXRlLFxuICAgICAgICAgICAgICBwcm9qZWN0SWQ6IHRoaXMucHJvamVjdElkLFxuICAgICAgICAgICAgICBlbnZpcm9ubWVudHM6IHRoaXMuZW52aXJvbm1lbnRzLFxuICAgICAgICAgICAgICBlbmRVc2VySW50ZWdyYXRpb25Db25maWc6IHRoaXMubW9kYWxTdGF0ZS5pbnRlZ3JhdGlvblxuICAgICAgICAgICAgICAgID8gdGhpcy5lbmRVc2VySW50ZWdyYXRpb25Db25maWdbdGhpcy5tb2RhbFN0YXRlLmludGVncmF0aW9uLnR5cGVdXG4gICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9IGFzIElDb25uZWN0VXNlckNvbnRleHQsXG4gICAgICAgICAgICBpbnRlZ3JhdGlvbixcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0TW9kYWxTdGF0ZSh7XG4gICAgICAgICAgaW50ZWdyYXRpb24sXG4gICAgICAgICAgY29uZmlnOiB0aGlzLmxvYWRlZENvbmZpZ3NbYWN0aW9uXSxcbiAgICAgICAgICBhcGlJbnN0YWxsYXRpb25PcHRpb25zOiB7XG4gICAgICAgICAgICBpc0FwaUluc3RhbGxhdGlvbixcbiAgICAgICAgICAgIHNob3dQb3J0YWxBZnRlckluc3RhbGwsXG4gICAgICAgICAgICBieXBhc3NQb3N0T0F1dGhQcm9tcHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5lbWl0RXJyb3IoZXJyLCBhY3Rpb24pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgX29hdXRoQ2FsbGJhY2sob2F1dGhSZXNwb25zZTogT2F1dGhDYWxsYmFja1Jlc3BvbnNlLCBjcmVkZW50aWFsSWQ/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGludGVncmF0aW9uSWQsIHBheWxvYWQgfSA9IG9hdXRoUmVzcG9uc2U7XG4gICAgY29uc3QgaW50ZWdyYXRpb246IElDb25uZWN0SW50ZWdyYXRpb25XaXRoQ3JlZGVudGlhbEluZm8gfCB1bmRlZmluZWQgPSBPYmplY3QudmFsdWVzKFxuICAgICAgdGhpcy5sb2FkZWRJbnRlZ3JhdGlvbnMsXG4gICAgKS5maW5kKFxuICAgICAgKGludGVncmF0aW9uOiBJQ29ubmVjdEludGVncmF0aW9uV2l0aENyZWRlbnRpYWxJbmZvKSA9PiBpbnRlZ3JhdGlvbi5pZCA9PT0gaW50ZWdyYXRpb25JZCxcbiAgICApO1xuICAgIGlmICghaW50ZWdyYXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdHlwZSA9IGdldEludGVncmF0aW9uVHlwZU5hbWUoaW50ZWdyYXRpb24pIGFzIHN0cmluZztcblxuICAgIGNvbnN0IGluc3RhbGxPcHRpb25zOiBJbnN0YWxsT3B0aW9ucyA9IHRoaXMubW9kYWxTdGF0ZS5hcGlJbnN0YWxsYXRpb25PcHRpb25zPy5pc0FwaUluc3RhbGxhdGlvblxuICAgICAgPyB0aGlzLm1vZGFsU3RhdGUuYXBpSW5zdGFsbGF0aW9uT3B0aW9uc1xuICAgICAgOiB7fTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB1c2VyID0gdGhpcy51c2VyU3RhdGUgYXMgQXV0aGVudGljYXRlZENvbm5lY3RVc2VyO1xuICAgICAgY29uc3QgcmVxdWVzdFVSSSA9IGNyZWRlbnRpYWxJZFxuICAgICAgICA/IGAvc2RrL2NyZWRlbnRpYWxzLyR7Y3JlZGVudGlhbElkfS9jb21wbGV0ZS1zZXR1cGBcbiAgICAgICAgOiBgL3Nkay9jcmVkZW50aWFsc2A7XG4gICAgICBjb25zdCBvYXV0aFJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kQ29ubmVjdFJlcXVlc3Q8SUNvbm5lY3RDcmVkZW50aWFsPihyZXF1ZXN0VVJJLCB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgaW50ZWdyYXRpb25JZDogaW50ZWdyYXRpb24uaWQsXG4gICAgICAgICAgY29uZmlnOiB7fSxcbiAgICAgICAgICBwYXlsb2FkLFxuICAgICAgICAgIGluc3RhbGxPcHRpb25zLFxuICAgICAgICB9KSxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIW9hdXRoUmVzcG9uc2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gc2F2ZSBvYXV0aCBjcmVkZW50aWFscycpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB7IGlkLCBjb25maWcsIHByb3ZpZGVySWQsIHN0YXR1cywgcHJvdmlkZXJEYXRhIH0gPSBvYXV0aFJlc3BvbnNlO1xuICAgICAgdGhpcy51cGRhdGVBdXRoZW50aWNhdGVkVXNlcih7XG4gICAgICAgIGludGVncmF0aW9uczoge1xuICAgICAgICAgIC4uLnVzZXIuaW50ZWdyYXRpb25zLFxuICAgICAgICAgIFt0eXBlXToge1xuICAgICAgICAgICAgLi4udXNlci5pbnRlZ3JhdGlvbnNbdHlwZV0sXG4gICAgICAgICAgICAuLi5jb25maWcsXG4gICAgICAgICAgICBjcmVkZW50aWFsU3RhdHVzOiBzdGF0dXMsXG4gICAgICAgICAgICBlbmFibGVkOiBzdGF0dXMgPT09IENyZWRlbnRpYWxTdGF0dXMuVkFMSUQsXG4gICAgICAgICAgICBjcmVkZW50aWFsSWQ6IGlkLFxuICAgICAgICAgICAgcHJvdmlkZXJJZCxcbiAgICAgICAgICAgIHByb3ZpZGVyRGF0YSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGlmIChzdGF0dXMgPT09IENyZWRlbnRpYWxTdGF0dXMuVkFMSUQpIHtcbiAgICAgICAgdGhpcy50cmlnZ2VyU0RLRXZlbnQoe1xuICAgICAgICAgIHR5cGU6IFNES19FVkVOVC5PTl9JTlRFR1JBVElPTl9JTlNUQUxMLFxuICAgICAgICAgIGludGVncmF0aW9uSWQ6IGludGVncmF0aW9uLmlkLFxuICAgICAgICAgIGludGVncmF0aW9uVHlwZTogdHlwZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLmVtaXRFcnJvcihlcnIsIHR5cGUpO1xuICAgICAgYXdhaXQgdGhpcy5fb2F1dGhFcnJvckNhbGxiYWNrKGVyci5tZXNzYWdlKTtcbiAgICB9XG4gIH1cblxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGZ1bmN0aW9uLW5hbWVcbiAgYXN5bmMgX29hdXRoRXJyb3JDYWxsYmFjayhlcnJvck1lc3NhZ2U6IHN0cmluZyB8IG9iamVjdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxldCBtZXNzYWdlOiBzdHJpbmcgfCBvYmplY3QgPSBlcnJvck1lc3NhZ2U7XG4gICAgLy9hbHNvIGxvZyBlcnJvciBpbiBjb25zb2xlXG4gICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGNvbm5lY3QgYWNjb3VudCB0byBQYXJhZ29uIG92ZXIgT0F1dGgnLCBtZXNzYWdlKTtcblxuICAgIGlmICh0eXBlb2YgbWVzc2FnZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIG1lc3NhZ2UgPSBKU09OLnN0cmluZ2lmeShtZXNzYWdlKTtcbiAgICB9XG4gICAgLy8gY3VycmVudGx5IGFsZXJ0aW5nIGdlbmVyaWMgZXJyb3Igb3IgZXJyb3IgbWVzc2FnZSBmb3Igb2F1dGggZmFpbHVyZVxuICAgIC8vIFRPRE86IHRvIG1ha2UgZ2VuZXJpYyBvYXV0aCBlcnJvciBtb2RhbCB0byBzaG93IGVycm9ybWVzc2FnZSBwcm9wZXJ0eVxuICAgIHdpbmRvdy5hbGVydChgU29tZXRoaW5nIHdlbnQgd3JvbmcgY29ubmVjdGluZyB5b3VyIGFjY291bnQuIFBsZWFzZSB0cnkgYWdhaW4gb3IgJHttZXNzYWdlfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmQgYSBDb25uZWN0IEFQSSByZXF1ZXN0LiBBdXRvbWF0aWNhbGx5IGhhbmRsZXMgYXV0aG9yaXphdGlvbiBhbmQgZXJyb3JzLlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcmVxdWVzdCwgaW5jbHVkaW5nIHRoZSBsZWFkaW5nIHNsYXNoLCBpLmUuIGAvc2RrL2FjdGlvbnNgXG4gICAqIEBwYXJhbSBpbml0IE9wdGlvbnMgZm9yIHRoZSByZXF1ZXN0LCBleGNsdWRpbmcgaGVhZGVycyAoYXV0b21hdGljYWxseSBhZGRlZCkuXG4gICAqIEBwYXJhbSBwcmVmaXhXaXRoUHJvamVjdFBhdGggRGVmYXVsdHMgdG8gdHJ1ZS4gUHJlcGVuZHMgL3Byb2plY3RzLyR7dGhpcy5wcm9qZWN0SWR9YCB0byB0aGVcbiAgICogcGF0aC5cbiAgICovXG4gIGFzeW5jIHNlbmRDb25uZWN0UmVxdWVzdDxUUmVzcG9uc2U+KFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBpbml0PzogUmVxdWVzdEluaXQgJiB7IGNhY2hlUmVzdWx0PzogYm9vbGVhbiB9LFxuICAgIHByZWZpeFdpdGhQcm9qZWN0UGF0aDogYm9vbGVhbiA9IHRydWUsXG4gICk6IFByb21pc2U8VFJlc3BvbnNlIHwgdW5kZWZpbmVkPiB7XG4gICAgaWYgKCF0aGlzLnVzZXJTdGF0ZS5hdXRoZW50aWNhdGVkIHx8ICF0aGlzLnByb2plY3RJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ29ubmVjdCBTREsgYXR0ZW1wdGVkIHRvIG1ha2UgYW4gQVBJIHJlcXVlc3QsIGJ1dCBubyB1c2VyIHdhcyBhdXRoZW50aWNhdGVkLlxuQ2FsbCBwYXJhZ29uLmF1dGhlbnRpY2F0ZSg8cHJvamVjdElkPiwgPHVzZXIgdG9rZW4+KSBiZWZvcmUgdXNpbmcgdGhlIFNESy5gLFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgdXJsOiBzdHJpbmcgPSBgJHt0aGlzLmVudmlyb25tZW50cy5aRVVTX1BVQkxJQ19VUkx9JHtcbiAgICAgIHByZWZpeFdpdGhQcm9qZWN0UGF0aCA/IGAvcHJvamVjdHMvJHt0aGlzLnByb2plY3RJZH1gIDogJydcbiAgICB9JHtwYXRofWA7XG5cbiAgICBjb25zdCBjYWNoZUtleTogc3RyaW5nID0gaGFzaChKU09OLnN0cmluZ2lmeSh7IHVybCwgcGF5bG9hZDogeyAuLi5pbml0IH0gfSkpO1xuICAgIGNvbnN0IGNhY2hlZFJlc3VsdCA9IGF3YWl0IHRoaXMuY2FjaGVkQXBpUmVzcG9uc2UuZ2V0KGNhY2hlS2V5LCB0cnVlKTtcbiAgICBpZiAoaW5pdD8uY2FjaGVSZXN1bHQgJiYgY2FjaGVkUmVzdWx0KSB7XG4gICAgICByZXR1cm4gY2FjaGVkUmVzdWx0O1xuICAgIH1cblxuICAgIGNvbnN0IHNob3VsZENhY2hlUmVxdWVzdDogYm9vbGVhbiA9IEJvb2xlYW4oIWluaXQgfHwgaW5pdC5tZXRob2QgPT09ICdHRVQnIHx8IGluaXQuY2FjaGVSZXN1bHQpO1xuXG4gICAgaWYgKHNob3VsZENhY2hlUmVxdWVzdCAmJiB0eXBlb2YgdGhpcy5rZXlUb1JlcXVlc3RQcm9taXNlTWFwW2NhY2hlS2V5XSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiB0aGlzLmtleVRvUmVxdWVzdFByb21pc2VNYXBbY2FjaGVLZXldIGFzIFByb21pc2U8VFJlc3BvbnNlIHwgdW5kZWZpbmVkPjtcbiAgICB9XG5cbiAgICBjb25zdCBhY2Nlc3NUb2tlbjogc3RyaW5nID0gdGhpcy51c2VyU3RhdGUudG9rZW47XG5cbiAgICBjb25zdCBvbkdvaW5nUmVxdWVzdDogUHJvbWlzZTxUUmVzcG9uc2UgfCB1bmRlZmluZWQ+ID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnNlbmRSZXF1ZXN0PFRSZXNwb25zZT4oXG4gICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIC4uLmluaXQsXG4gICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICBBY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgIC4uLmluaXQ/LmhlYWRlcnMsXG4gICAgICAgICAgICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke2FjY2Vzc1Rva2VufWAsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2hvdWxkQ2FjaGVSZXF1ZXN0ID8gY2FjaGVLZXkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9XG4gICAgICB9KSgpO1xuICAgIH0pO1xuXG4gICAgaWYgKHNob3VsZENhY2hlUmVxdWVzdCkge1xuICAgICAgdGhpcy5rZXlUb1JlcXVlc3RQcm9taXNlTWFwW2NhY2hlS2V5XSA9IG9uR29pbmdSZXF1ZXN0O1xuICAgIH1cbiAgICByZXR1cm4gb25Hb2luZ1JlcXVlc3Q7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlbmRSZXF1ZXN0PFRSZXNwb25zZT4oXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgaW5pdDogUmVxdWVzdEluaXQsXG4gICAgY2FjaGVLZXk/OiBzdHJpbmcsXG4gICk6IFByb21pc2U8VFJlc3BvbnNlIHwgdW5kZWZpbmVkPiB7XG4gICAgbGV0IHJlc3BvbnNlOiBSZXNwb25zZSB8IHVuZGVmaW5lZDtcbiAgICBsZXQgcmVzcG9uc2VCb2R5OiBUUmVzcG9uc2UgfCB1bmRlZmluZWQ7XG4gICAgbGV0IHJlc3BvbnNlRXJyb3I6IEVycm9yIHwgdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCwgaW5pdCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJlc3BvbnNlRXJyb3IgPSBlcnJvcjtcbiAgICB9XG5cbiAgICBpZiAoKHJlc3BvbnNlICYmICFyZXNwb25zZS5vaykgfHwgcmVzcG9uc2VFcnJvcikge1xuICAgICAgY29uc3QgcmVxdWVzdFJldHVybmVkQXV0aG9yaXphdGlvbkVycm9yOiBib29sZWFuID1cbiAgICAgICAgcmVzcG9uc2U/LnN0YXR1cyA9PT0gNDAxIHx8IHJlc3BvbnNlPy5zdGF0dXMgPT09IDQwMztcbiAgICAgIGlmICghdXJsLmluY2x1ZGVzKCdwcm94eScpICYmIHJlcXVlc3RSZXR1cm5lZEF1dGhvcml6YXRpb25FcnJvcikge1xuICAgICAgICB0aGlzLmxvZ291dCgpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2U6IHN0cmluZyA9IChhd2FpdCByZXNwb25zZT8udGV4dCgpKSB8fCAocmVzcG9uc2VFcnJvcj8ubWVzc2FnZSBhcyBzdHJpbmcpO1xuXG4gICAgICBpZiAoY2FjaGVLZXkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5jYWNoZWRBcGlSZXNwb25zZS5kZWwoY2FjaGVLZXkpO1xuICAgICAgICBkZWxldGUgdGhpcy5rZXlUb1JlcXVlc3RQcm9taXNlTWFwW2NhY2hlS2V5XTtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICByZXNwb25zZUJvZHkgPSBhd2FpdCByZXNwb25zZT8uanNvbigpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmVzcG9uc2VCb2R5ID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGlmIChjYWNoZUtleSkge1xuICAgICAgYXdhaXQgdGhpcy5jYWNoZWRBcGlSZXNwb25zZS5zZXQoY2FjaGVLZXksIHJlc3BvbnNlQm9keSk7XG4gICAgICBkZWxldGUgdGhpcy5rZXlUb1JlcXVlc3RQcm9taXNlTWFwW2NhY2hlS2V5XTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzcG9uc2VCb2R5O1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmRzIGEgcHJveHkgcmVxdWVzdCB0byBhbiBhY3Rpb25cbiAgICogQHBhcmFtIGFjdGlvblxuICAgKiBAcGFyYW0gcGF0aFxuICAgKiBAcGFyYW0gaW5pdFxuICAgKiBAcmV0dXJucyBhcGkgcmVxdWVzdCByZXNwb25zZVxuICAgKi9cbiAgYXN5bmMgcmVxdWVzdDxUUmVzcG9uc2U+KFxuICAgIGFjdGlvbjogc3RyaW5nLFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBpbml0OiB7XG4gICAgICBtZXRob2Q6IFJlcXVlc3RJbml0WydtZXRob2QnXTtcbiAgICAgIGJvZHk6IFJlcXVlc3RJbml0Wydib2R5J10gfCBvYmplY3Q7XG4gICAgICBoZWFkZXJzOiBSZXF1ZXN0SW5pdFsnaGVhZGVycyddO1xuICAgIH0sXG4gICk6IFByb21pc2U8VFJlc3BvbnNlIHwgdW5kZWZpbmVkPiB7XG4gICAgbGV0IGJhc2VQcm94eVBhdGg6IHN0cmluZyA9IGAvc2RrL3Byb3h5LyR7YWN0aW9ufWA7XG4gICAgaWYgKGlzQ3VzdG9tSW50ZWdyYXRpb25UeXBlTmFtZShhY3Rpb24pKSB7XG4gICAgICBiYXNlUHJveHlQYXRoID0gYC9zZGsvcHJveHkvY3VzdG9tLyR7XG4gICAgICAgIE9iamVjdC52YWx1ZXModGhpcy5sb2FkZWRJbnRlZ3JhdGlvbnMpLmZpbmQoXG4gICAgICAgICAgKGludGVncmF0aW9uOiBJQ29ubmVjdEludGVncmF0aW9uV2l0aENyZWRlbnRpYWxJbmZvKSA9PiB7XG4gICAgICAgICAgICBpZiAoaW50ZWdyYXRpb24uY3VzdG9tSW50ZWdyYXRpb24pIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGludGVncmF0aW9uLmN1c3RvbUludGVncmF0aW9uLnNsdWcgPT09IGFjdGlvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9LFxuICAgICAgICApPy5pZFxuICAgICAgfWA7XG4gICAgfVxuICAgIGNvbnN0IHBhdGhXaXRoTGVhZGluZ1NsYXNoOiBzdHJpbmcgPSBwYXRoLnN0YXJ0c1dpdGgoJy8nKSA/IHBhdGggOiBgLyR7cGF0aH1gO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kQ29ubmVjdFJlcXVlc3Q8eyBvdXRwdXQ6IFRSZXNwb25zZSB9PihcbiAgICAgIGAke2Jhc2VQcm94eVBhdGh9JHtwYXRoV2l0aExlYWRpbmdTbGFzaH1gLFxuICAgICAge1xuICAgICAgICBtZXRob2Q6IGluaXQubWV0aG9kLFxuICAgICAgICBib2R5OiB0eXBlb2YgaW5pdC5ib2R5ID09PSAnb2JqZWN0JyA/IEpTT04uc3RyaW5naWZ5KGluaXQuYm9keSkgOiBpbml0LmJvZHksXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAnQ29udGVudC1UeXBlJzogSU5GRVJfQ09OVEVOVF9UWVBFX0ZST01fQ09OTkVDVF9PUFRJT05TLFxuICAgICAgICAgIC4uLmluaXQuaGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgKTtcbiAgICByZXR1cm4gcmVzcG9uc2U/Lm91dHB1dDtcbiAgfVxuXG4gIGFzeW5jIGV2ZW50KG5hbWU6IHN0cmluZywgcGF5bG9hZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnNlbmRDb25uZWN0UmVxdWVzdChcbiAgICAgIGAvdjIvcHJvamVjdHMvJHt0aGlzLnByb2plY3RJZH0vc2RrL2V2ZW50cy90cmlnZ2VyYCxcbiAgICAgIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIHBheWxvYWQsXG4gICAgICAgIH0pLFxuICAgICAgfSxcbiAgICAgIGZhbHNlLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQHN1bW1hcnkgdGhpcyB3aWxsIGJlIGNhbGxlZCB0byBjbG9zZSB0aGUgbW9kYWxcbiAgICogQHBhcmFtIGZvcmNlQ2xvc2UgaXMgc2V0IHdoZW4gbW9kYWwgaXMgY2xvc2VkIGJ5IGNyb3NzIGJ0blxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgb25DbG9zZShmb3JjZUNsb3NlOiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcbiAgICBjb25zdCB7IGludGVncmF0aW9uLCBhcGlJbnN0YWxsYXRpb25PcHRpb25zIH0gPSB0aGlzLm1vZGFsU3RhdGU7XG5cbiAgICBpZiAoIWludGVncmF0aW9uKSB7XG4gICAgICAvLyBUaGlzIG1pZ2h0IGhhcHBlbiBpZiB0aGUgXCJYXCIgYnV0dG9uIGlzIGNsb3NlZCwgYmVjYXVzZSBgb25DbG9zZWAgd2lsbCBmaXJlIHR3aWNlLiBXZVxuICAgICAgLy8gaWdub3JlIGl0IGlmIHRoaXMgaXMgdGhlIGNhc2UuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMudHJpZ2dlclNES0V2ZW50KHtcbiAgICAgIHR5cGU6IFNES19FVkVOVC5PTl9QT1JUQUxfQ0xPU0UsXG4gICAgICBpbnRlZ3JhdGlvbklkOiBpbnRlZ3JhdGlvbi5pZCxcbiAgICAgIGludGVncmF0aW9uVHlwZTogZ2V0SW50ZWdyYXRpb25UeXBlTmFtZShpbnRlZ3JhdGlvbikgYXMgc3RyaW5nLFxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMub3JpZ2luYWxCb2R5T3ZlcmZsb3cgIT09IFBBUkFHT05fT1ZFUkZMT1dfRU1QVFlfVkFMVUUpIHtcbiAgICAgIHdpbmRvdy5kb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gdGhpcy5vcmlnaW5hbEJvZHlPdmVyZmxvdyBhcyBzdHJpbmc7XG4gICAgICB0aGlzLm9yaWdpbmFsQm9keU92ZXJmbG93ID0gUEFSQUdPTl9PVkVSRkxPV19FTVBUWV9WQUxVRTtcbiAgICB9XG5cbiAgICAvLyBOb3QgY2xlYXJpbmcgaW50ZWdyYXRpb24gc3RhdGUgdW5sZXNzIGl0IGlzIGNsb3NlZCBieSBjcm9zcyBidXR0b24gaW4gYXBpSW5zdGFsbGF0aW9uQ2FzZVxuICAgIGlmIChmb3JjZUNsb3NlIHx8ICFhcGlJbnN0YWxsYXRpb25PcHRpb25zPy5pc0FwaUluc3RhbGxhdGlvbikge1xuICAgICAgdGhpcy5zZXRNb2RhbFN0YXRlKHsgaW50ZWdyYXRpb246IG51bGwgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IHRoaXMgd2lsbCBiZSBjYWxsZWQgd2hlbiBtb2RhbCB3aWxsIGJlIHZpc2libGVcbiAgICovXG4gIG9uT3BlbigpOiB2b2lkIHtcbiAgICBjb25zdCB7IGludGVncmF0aW9uIH0gPSB0aGlzLm1vZGFsU3RhdGU7XG4gICAgaWYgKCFpbnRlZ3JhdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnRyaWdnZXJTREtFdmVudCh7XG4gICAgICB0eXBlOiBTREtfRVZFTlQuT05fUE9SVEFMX09QRU4sXG4gICAgICBpbnRlZ3JhdGlvbklkOiBpbnRlZ3JhdGlvbi5pZCxcbiAgICAgIGludGVncmF0aW9uVHlwZTogZ2V0SW50ZWdyYXRpb25UeXBlTmFtZShpbnRlZ3JhdGlvbikgYXMgc3RyaW5nLFxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMucm9vdCAmJiB0aGlzLm9yaWdpbmFsQm9keU92ZXJmbG93ID09PSBQQVJBR09OX09WRVJGTE9XX0VNUFRZX1ZBTFVFKSB7XG4gICAgICBjb25zdCBib3VuZGluZ1JlY3QgPSB0aGlzLnJvb3QuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAvLyBJZiB0aGUgQ29ubmVjdCBQb3J0YWwgaXMgYmlnZ2VyIHRoYW4gdGhlIHdpbmRvd1xuICAgICAgaWYgKHdpbmRvdy5pbm5lckhlaWdodCA8PSBib3VuZGluZ1JlY3QuaGVpZ2h0ICYmIHdpbmRvdy5pbm5lcldpZHRoIDw9IGJvdW5kaW5nUmVjdC53aWR0aCkge1xuICAgICAgICB0aGlzLm9yaWdpbmFsQm9keU92ZXJmbG93ID0gd2luZG93LmRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3c7XG4gICAgICAgIHdpbmRvdy5kb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIHRoaXMgaXMgc2hhcmVkIGluIENvbm5lY3RVc2VyQ29udGV4dFxuICAgKiBzbyB0aGF0IGV2ZW50IGNhbiBiZSB0cmlnZ2VyIGZyb20gY29tcG9uZW50c1xuICAgKiBAcGFyYW0gZXZlbnRJbmZvXG4gICAqL1xuICB0cmlnZ2VyU0RLRXZlbnQoZXZlbnRJbmZvOiBFdmVudEluZm8pOiB2b2lkIHtcbiAgICB0aGlzLnRyaWdnZXJFdmVudChldmVudEluZm8sIHRoaXMudXNlclN0YXRlIGFzIEF1dGhlbnRpY2F0ZWRDb25uZWN0VXNlcik7XG4gIH1cblxuICAvKipcbiAgICogZ2V0IHNpbmdsZSBvciBhbGwgbWV0YWRhdGEgaW5mbyBmb3IgaW50ZWdyYXRpb25zXG4gICAqIEBwYXJhbSBpbnRlZ3JhdGlvbktleU5hbWVcbiAgICogQHJldHVybnNcbiAgICovXG4gIGdldEludGVncmF0aW9uTWV0YWRhdGEoKTogSUludGVncmF0aW9uTWV0YWRhdGFbXTtcbiAgZ2V0SW50ZWdyYXRpb25NZXRhZGF0YShpbnRlZ3JhdGlvbktleU5hbWU6IHN0cmluZyk6IElJbnRlZ3JhdGlvbk1ldGFkYXRhO1xuICBnZXRJbnRlZ3JhdGlvbk1ldGFkYXRhKFxuICAgIGludGVncmF0aW9uS2V5TmFtZT86IHN0cmluZyxcbiAgKTogSUludGVncmF0aW9uTWV0YWRhdGEgfCBJSW50ZWdyYXRpb25NZXRhZGF0YVtdIHtcbiAgICBpZiAoIWludGVncmF0aW9uS2V5TmFtZSkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5tZXRhZGF0YSk7XG4gICAgfSBlbHNlIGlmICghdGhpcy5tZXRhZGF0YVtpbnRlZ3JhdGlvbktleU5hbWVdKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7aW50ZWdyYXRpb25LZXlOYW1lfSBpcyBub3QgYSB2YWxpZCBpbnRlZ3JhdGlvbiBuYW1lYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMubWV0YWRhdGFbaW50ZWdyYXRpb25LZXlOYW1lXTtcbiAgfVxuXG4gIC8qKlxuICAgKiB0cmlnZ2VyIGNvbm5lY3QgZW5kcG9pbnQgdHJpZ2dlciB3b3JrZmxvd1xuICAgKiBAcGFyYW0gd29ya2Zsb3dJZFxuICAgKiBAcGFyYW0gcGF5bG9hZFxuICAgKi9cbiAgd29ya2Zsb3coXG4gICAgd29ya2Zsb3dJZDogc3RyaW5nLFxuICAgIHsgYm9keSA9IHt9LCBxdWVyeSA9IHt9LCBoZWFkZXJzID0ge30gfTogVHJpZ2dlcldvcmtmbG93UmVxdWVzdCA9IHtcbiAgICAgIGJvZHk6IHt9LFxuICAgICAgaGVhZGVyczoge30sXG4gICAgICBxdWVyeToge30sXG4gICAgfSxcbiAgKTogUHJvbWlzZTxvYmplY3QgfCB1bmRlZmluZWQ+IHtcbiAgICBpZiAoIXdvcmtmbG93SWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignd29ya2Zsb3dJZCBpcyByZXF1aXJlZC4nKTtcbiAgICB9XG5cbiAgICBjb25zdCBxdWVyeVN0cmluZzogc3RyaW5nID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhxdWVyeSkudG9TdHJpbmcoKTtcblxuICAgIHJldHVybiB0aGlzLnNlbmRDb25uZWN0UmVxdWVzdDxvYmplY3Q+KFxuICAgICAgYC9zZGsvdHJpZ2dlcnMvJHt3b3JrZmxvd0lkfT8ke3F1ZXJ5U3RyaW5nfWAsXG4gICAgICB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShib2R5KSxcbiAgICAgICAgaGVhZGVycyxcbiAgICAgIH0sXG4gICAgICB0cnVlLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogZm9yIHByb2dyYW1tYXRpY2FsbHkgaW5zdGFsbGluZyBhbiBpbnRlZ3JhdGlvblxuICAgKi9cbiAgaW5zdGFsbEludGVncmF0aW9uKFxuICAgIGFjdGlvbjogc3RyaW5nLFxuICAgIHBhcmFtczogUGFydGlhbDxPbWl0PEluc3RhbGxPcHRpb25zLCAnaXNBcGlJbnN0YWxsYXRpb24nPj4gPSB7fSxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLnVzZXJTdGF0ZS5hdXRoZW50aWNhdGVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBVc2VyIG5vdCBhdXRoZW50aWNhdGVkLCBDYWxsIHBhcmFnb24uYXV0aGVudGljYXRlKDxwcm9qZWN0SWQ+LCA8dXNlciB0b2tlbj4pIGJlZm9yZSB1c2luZyB0aGUgU0RLLmAsXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBkZWZhdWx0SW5zdGFsbE9wdGlvbnM6IEluc3RhbGxPcHRpb25zID0ge1xuICAgICAgc2hvd1BvcnRhbEFmdGVySW5zdGFsbDogZmFsc2UsXG4gICAgICBieXBhc3NQb3N0T0F1dGhQcm9tcHQ6IGZhbHNlLFxuICAgIH07XG5cbiAgICBjb25zdCBtZXJnZWRQYXJhbXM6IEluc3RhbGxPcHRpb25zID0ge1xuICAgICAgLi4uZGVmYXVsdEluc3RhbGxPcHRpb25zLFxuICAgICAgLi4ucGFyYW1zLFxuICAgICAgaXNBcGlJbnN0YWxsYXRpb246IHRydWUsXG4gICAgfTtcblxuICAgIGlmIChtZXJnZWRQYXJhbXMuYnlwYXNzUG9zdE9BdXRoUHJvbXB0ICYmIG1lcmdlZFBhcmFtcy5zaG93UG9ydGFsQWZ0ZXJJbnN0YWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdDb3VsZCBub3QgdXNlIGJvdGggYGJ5cGFzc1Bvc3RPQXV0aFByb21wdGAgYW5kIGBzaG93UG9ydGFsQWZ0ZXJJbnN0YWxsYCBhcyB0cnVlIGF0IHRoZSBzYW1lIHRpbWUuJyxcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuZW5zdXJlSGVhZGxlc3NJc1N1cHBvcnRlZCgpO1xuXG4gICAgY29uc3QgaXNBbHJlYWR5RW5hYmxlZCA9IHRoaXMudmFsaWRhdGVBY3Rpb24oYWN0aW9uLCB0cnVlKTtcbiAgICBpZiAoaXNBbHJlYWR5RW5hYmxlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnRlZ3JhdGlvbiBcIiR7YWN0aW9ufVwiIGlzIGFscmVhZHkgaW5zdGFsbGVkLmApO1xuICAgIH1cblxuICAgIC8vIGFzIHdlIGhhdmUgYWRkZWQgaW50ZWdyYXRpb24gZGVwZW5kZW5jeSBpbiBDb25uZWN0TW9kYWwgdXNlRWZmZWN0IHRvIHRyaWdnZXIgZW5hYmxlSW50ZWdyYXRpb25cbiAgICAvLyBzbyB0aGlzIHJlc2V0IGlzIG5lZWRlZCBpbmNhc2UgcHJldmlvdXMgb25lIGZhaWxzXG4gICAgdGhpcy5zZXRNb2RhbFN0YXRlKHsgaW50ZWdyYXRpb246IG51bGwgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5jb25uZWN0KGFjdGlvbiwgbWVyZ2VkUGFyYW1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBnYXRlcyBoZWFkbGVzcyBmZWF0dXJlIHRvIHBybyBhbmQgZW50ZXJwcmlzZSB1c2Vyc1xuICAgKi9cbiAgZW5zdXJlSGVhZGxlc3NJc1N1cHBvcnRlZCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucHJvamVjdC5hY2Nlc3NpYmxlRmVhdHVyZXMuaW5jbHVkZXMoQ29ubmVjdEFkZE9uLkhlYWRsZXNzQ29ubmVjdFBvcnRhbCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0hlYWRsZXNzIENvbm5lY3QgUG9ydGFsIGlzIGF2YWlsYWJsZSBvbiBvdXIgUHJvIHBsYW4gYW5kIGFib3ZlLiBDb250YWN0IHNhbGVzQHVzZXBhcmFnb24uY29tIHRvIGxlYXJuIG1vcmUgb3IgdXBncmFkZS4nLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyB1bmluc3RhbGxJbnRlZ3JhdGlvbihhY3Rpb246IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy51c2VyU3RhdGUuYXV0aGVudGljYXRlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVXNlciBub3QgYXV0aGVudGljYXRlZCwgQ2FsbCBwYXJhZ29uLmF1dGhlbnRpY2F0ZSg8cHJvamVjdElkPiwgPHVzZXIgdG9rZW4+KSBiZWZvcmUgdXNpbmcgdGhlIFNESy5gLFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5lbnN1cmVIZWFkbGVzc0lzU3VwcG9ydGVkKCk7XG4gICAgaWYgKCF0aGlzLnZhbGlkYXRlQWN0aW9uKGFjdGlvbiwgdHJ1ZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW50ZWdyYXRpb24gXCIke2FjdGlvbn1cIiBpcyBub3QgaW5zdGFsbGVkLmApO1xuICAgIH1cblxuICAgIGNvbnN0IGludGVncmF0aW9uSWQgPSB0aGlzLmxvYWRlZEludGVncmF0aW9uc1thY3Rpb25dLmlkO1xuICAgIGF3YWl0IHRoaXMuc2VuZENvbm5lY3RSZXF1ZXN0KGAvc2RrL2ludGVncmF0aW9ucy8ke2ludGVncmF0aW9uSWR9YCwge1xuICAgICAgbWV0aG9kOiAnREVMRVRFJyxcbiAgICB9KTtcblxuICAgIHRoaXMudXBkYXRlQXV0aGVudGljYXRlZFVzZXIoe1xuICAgICAgaW50ZWdyYXRpb25zOiB7XG4gICAgICAgIC4uLnRoaXMudXNlclN0YXRlLmludGVncmF0aW9ucyxcbiAgICAgICAgW2FjdGlvbl06IHsgZW5hYmxlZDogZmFsc2UsIGNvbmZpZ3VyZWRXb3JrZmxvd3M6IHt9IH0sXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgdGhpcy5zYXZlU3RhdGUoKTtcblxuICAgIHRoaXMudHJpZ2dlclNES0V2ZW50KHtcbiAgICAgIHR5cGU6IFNES19FVkVOVC5PTl9JTlRFR1JBVElPTl9VTklOU1RBTEwsXG4gICAgICBpbnRlZ3JhdGlvbklkLFxuICAgICAgaW50ZWdyYXRpb25UeXBlOiBhY3Rpb24sXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBkaXNhYmxlV29ya2Zsb3cod29ya2Zsb3dJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLnVzZXJTdGF0ZS5hdXRoZW50aWNhdGVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBVc2VyIG5vdCBhdXRoZW50aWNhdGVkLCBDYWxsIHBhcmFnb24uYXV0aGVudGljYXRlKDxwcm9qZWN0SWQ+LCA8dXNlciB0b2tlbj4pIGJlZm9yZSB1c2luZyB0aGUgU0RLLmAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5pc1dvcmtmbG93RW5hYmxlZCh3b3JrZmxvd0lkKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBXb3JrZmxvdyAke3dvcmtmbG93SWR9IGNhbm5vdCBiZSBkaXNhYmxlZCBmb3IgdGhpcyB1c2VyLmApO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuc2VuZENvbm5lY3RSZXF1ZXN0PElDb25uZWN0Q3JlZGVudGlhbD4oYC9zZGsvd29ya2Zsb3dzLyR7d29ya2Zsb3dJZH1gLCB7XG4gICAgICBtZXRob2Q6ICdERUxFVEUnLFxuICAgIH0pO1xuXG4gICAgYXdhaXQgdGhpcy51cGRhdGVMb2NhbFN0YXRlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVwZGF0ZUxvY2FsU3RhdGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgW3VzZXJEYXRhLCBpbnRlZ3JhdGlvbnNdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgdGhpcy5mZXRjaFVzZXJEYXRhKCksXG4gICAgICB0aGlzLmZldGNoSW50ZWdyYXRpb25zKCksXG4gICAgXSk7XG5cbiAgICB0aGlzLnVwZGF0ZUF1dGhlbnRpY2F0ZWRVc2VyKHsgaW50ZWdyYXRpb25zOiB1c2VyRGF0YS5pbnRlZ3JhdGlvbnMsIG1ldGE6IHVzZXJEYXRhLm1ldGEgfSk7XG4gICAgYXdhaXQgdGhpcy5nZXRJbnRlZ3JhdGlvbkNvbmZpZ3MoaW50ZWdyYXRpb25zLm1hcCgoaW50ZWdyYXRpb24pID0+IGludGVncmF0aW9uLnR5cGUpKTtcbiAgICB0aGlzLnVwZGF0ZUludGVncmF0aW9ucyhpbnRlZ3JhdGlvbnMpO1xuICAgIHRoaXMuc2F2ZVN0YXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogYWxzbyByZXR1cm5zIGZhbHNlIGlmIHVuYWJsZSB0byBmaW5kIHdvcmtmbG93IGluIGNvbmZpZ3VyZWQgd29ya2Zsb3cgcHJvcGVydHkgb2YgYW55IGludGVncmF0aW9uXG4gICAqL1xuICBwcml2YXRlIGlzV29ya2Zsb3dFbmFibGVkKHdvcmtmbG93SWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IE9iamVjdC52YWx1ZXMoKHRoaXMudXNlclN0YXRlIGFzIEF1dGhlbnRpY2F0ZWRDb25uZWN0VXNlcikuaW50ZWdyYXRpb25zKS5maW5kKFxuICAgICAgKGludGVncmF0aW9uKSA9PiBpbnRlZ3JhdGlvbj8uY29uZmlndXJlZFdvcmtmbG93cz8uW3dvcmtmbG93SWRdPy5lbmFibGVkLFxuICAgICk7XG5cbiAgICByZXR1cm4gcmVzdWx0ID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogZ2V0cyB0aGUgdXNlciBkYXRhIGZyb20gYXBpIGAvc2RrL21lYFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBmZXRjaFVzZXJEYXRhKCk6IFByb21pc2U8SUNvbm5lY3RVc2VyPiB7XG4gICAgY29uc3QgdXNlckRhdGEgPSBhd2FpdCB0aGlzLnNlbmRDb25uZWN0UmVxdWVzdDxJQ29ubmVjdFVzZXI+KCcvc2RrL21lJyk7XG4gICAgaWYgKCF1c2VyRGF0YSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gZ2V0IHVzZXIgRGF0YScpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdXNlckRhdGE7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGludGVncmF0aW9ucyBmcm9tIGFwaSBgL3Nkay9pbnRlZ3JhdGlvbnNgXG4gICAqIFJlcXVpcmVkIHRoaXMgYW5vdGhlciByZXF1ZXN0IGZvciBpbnRlZ3JhdGlvbnMsIGFzIGAvc2RrL21lYCBwcm92aWRlcyBvbmx5IG1pbmltYWwgZGF0YSBmb3IgaW50ZWdyYXRpb25zXG4gICAqIHdlIGFsc28gbmVlZCBpbnRlZ3JhdGlvbiBjb25maWcgYW5kIG90aGVyIGNyZWRlbnRpYWxzIGluZm8gd2hpY2ggaXMgbm90IGluY2x1ZGVkIGluIGBzZGsvbWVgXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGZldGNoSW50ZWdyYXRpb25zKCk6IFByb21pc2U8SUNvbm5lY3RJbnRlZ3JhdGlvbldpdGhDcmVkZW50aWFsSW5mb1tdPiB7XG4gICAgY29uc3QgaW50ZWdyYXRpb25zID0gYXdhaXQgdGhpcy5zZW5kQ29ubmVjdFJlcXVlc3Q8SUNvbm5lY3RJbnRlZ3JhdGlvbldpdGhDcmVkZW50aWFsSW5mb1tdPihcbiAgICAgICcvc2RrL2ludGVncmF0aW9ucycsXG4gICAgKTtcblxuICAgIGlmICghaW50ZWdyYXRpb25zKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBmZXRjaCBpbnRlZ3JhdGlvbnMnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW50ZWdyYXRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgaW50ZXJuYWwgc3RhdGUgd2hlcmUgaW50ZWdyYXRpb24gaW5mb3JtYXRpb24gbWF5IGJlIHVzZWQuXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZUludGVncmF0aW9ucyhpbnRlZ3JhdGlvbnM6IElDb25uZWN0SW50ZWdyYXRpb25XaXRoQ3JlZGVudGlhbEluZm9bXSk6IHZvaWQge1xuICAgIGludGVncmF0aW9ucy5mb3JFYWNoKChpbnRlZ3JhdGlvbjogSUNvbm5lY3RJbnRlZ3JhdGlvbldpdGhDcmVkZW50aWFsSW5mbykgPT4ge1xuICAgICAgaWYgKGludGVncmF0aW9uLmNvbmZpZ3MubGVuZ3RoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgdHlwZSA9IGdldEludGVncmF0aW9uVHlwZU5hbWUoaW50ZWdyYXRpb24pIGFzIHN0cmluZztcblxuICAgICAgICAgIC8vIHVwZGF0ZSBsb2FkZWQgY29uZmlnc1xuICAgICAgICAgIHRoaXMubG9hZGVkQ29uZmlnc1t0eXBlXSA9IGludGVncmF0aW9uLmNvbmZpZ3NbMF0udmFsdWVzO1xuXG4gICAgICAgICAgLy8gdXBkYXRlIGxvYWRlZCBpbnRlZ3JhdGlvbnNcbiAgICAgICAgICB0aGlzLmxvYWRlZEludGVncmF0aW9uc1t0eXBlXSA9IGludGVncmF0aW9uO1xuXG4gICAgICAgICAgLy8gdXBkYXRlIGludGVncmF0aW9uIG1ldGFkYXRhXG4gICAgICAgICAgaWYgKEJvb2xlYW4oaW50ZWdyYXRpb24uaXNBY3RpdmUpKSB7XG4gICAgICAgICAgICB0aGlzLm1ldGFkYXRhW3R5cGVdID0ge1xuICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICBuYW1lOiBpbnRlZ3JhdGlvbi5jdXN0b21JbnRlZ3JhdGlvbj8ubmFtZSA/PyB0aGlzLmNvbmZpZ3NbaW50ZWdyYXRpb24udHlwZV0ubmFtZSxcbiAgICAgICAgICAgICAgYnJhbmRDb2xvcjpcbiAgICAgICAgICAgICAgICBpbnRlZ3JhdGlvbi5jb25maWdzWzBdLnZhbHVlcy5hY2NlbnRDb2xvciA/P1xuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnc1tpbnRlZ3JhdGlvbi50eXBlXS5icmFuZENvbG9yLFxuICAgICAgICAgICAgICBpY29uOlxuICAgICAgICAgICAgICAgIGludGVncmF0aW9uLmN1c3RvbUludGVncmF0aW9uPy5pY29uID8/XG4gICAgICAgICAgICAgICAgYCR7dGhpcy5lbnZpcm9ubWVudHMuQ0ROX1BVQkxJQ19VUkx9L2ludGVncmF0aW9ucy8ke1xuICAgICAgICAgICAgICAgICAgb3ZlcnJpZGVBY3Rpb25BbGlhc1tpbnRlZ3JhdGlvbi50eXBlXSB8fCBpbnRlZ3JhdGlvbi50eXBlXG4gICAgICAgICAgICAgICAgfS5zdmdgLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyB1cGRhdGUgbW9kYWwgc3RhdGUgKGlmIGJlaW5nIHVzZWQpXG4gICAgICAgICAgaWYgKHRoaXMubW9kYWxTdGF0ZS5pbnRlZ3JhdGlvbj8uaWQgPT09IGludGVncmF0aW9uLmlkKSB7XG4gICAgICAgICAgICB0aGlzLnNldE1vZGFsU3RhdGUoeyBpbnRlZ3JhdGlvbiB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNvbnNvbGUud2FybihlcnIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBzZXRVc2VyTWV0YWRhdGEobWV0YTogUGVyc29uYU1ldGEpOiBQcm9taXNlPEF1dGhlbnRpY2F0ZWRDb25uZWN0VXNlcj4ge1xuICAgIGF3YWl0IHRoaXMuc2VuZENvbm5lY3RSZXF1ZXN0PElQZXJzb25hPignL3Nkay9tZScsIHtcbiAgICAgIG1ldGhvZDogJ1BBVENIJyxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgbWV0YSB9KSxcbiAgICB9KTtcblxuICAgIGF3YWl0IHRoaXMudXBkYXRlTG9jYWxTdGF0ZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG5cbiAgICByZXR1cm4gdGhpcy51c2VyU3RhdGUgYXMgQXV0aGVudGljYXRlZENvbm5lY3RVc2VyO1xuICB9XG5cbiAgYXN5bmMgZ2V0SW50ZWdyYXRpb25Db25maWdzKGFjdGlvbk5hbWVzOiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHJlcXVpcmVkQ29uZmlnc0FjdGlvbnMgPSBhY3Rpb25OYW1lcy5maWx0ZXIoXG4gICAgICAoYWN0aW9uTmFtZTogc3RyaW5nKSA9PiAhdGhpcy5jb25maWdzW2FjdGlvbk5hbWVdICYmIGFjdGlvbk5hbWUgIT09IEFDVElPTl9DVVNUT00sXG4gICAgKTtcbiAgICBpZiAoIXJlcXVpcmVkQ29uZmlnc0FjdGlvbnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuc2VuZENvbm5lY3RSZXF1ZXN0PFJlY29yZDxzdHJpbmcsIEFjdGlvbkNvbmZpZ0RUTz4+KFxuICAgICAgJy9zZGsvYWN0aW9ucy9jb25maWdzJyxcbiAgICAgIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBhY3Rpb25OYW1lczogcmVxdWlyZWRDb25maWdzQWN0aW9ucyxcbiAgICAgICAgfSksXG4gICAgICB9LFxuICAgICk7XG4gICAgdGhpcy5jb25maWdzID0gcmVzdWx0ID8/IHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aG9zdDogc3RyaW5nO30gZG9tYWluXG4gICAqIHNldHMgdGhlIGRvbWFpbiBmb3IgbWFraW5nIGh0dHAgc2VydmljZSByZXF1ZXN0XG4gICAqIGV4YW1wbGU6IGNvbmZpZ3VyZUdsb2JhbCh7aG9zdDogJ215RG9tYWluLmNvbSd9KSB3b3VsZCBzZXQgc2VydmljZSB1cmxzIGFzIGBodHRwczovL3NlcnZpY2UubXlEb21haW4uY29tYFxuICAgKi9cbiAgY29uZmlndXJlR2xvYmFsKHBhcmFtOiB7IGhvc3Q6IHN0cmluZyB9KTogdm9pZCB7XG4gICAgaWYgKCFwYXJhbSB8fCAhcGFyYW0uaG9zdCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdob3N0IG5vdCBzcGVjaWZpZWQnKTtcbiAgICB9XG4gICAgY29uc3QgZG9tYWluID0gcGFyYW0uaG9zdC5pbmRleE9mKCdodHRwJykgPiAtMSA/IG5ldyBVUkwocGFyYW0uaG9zdCkuaG9zdG5hbWUgOiBwYXJhbS5ob3N0O1xuXG4gICAgdGhpcy5lbnZpcm9ubWVudHMuQ09OTkVDVF9QVUJMSUNfVVJMID0gZ2V0U2VydmljZVVybCgnY29ubmVjdCcsIGRvbWFpbik7XG4gICAgdGhpcy5lbnZpcm9ubWVudHMuREFTSEJPQVJEX1BVQkxJQ19VUkwgPSBnZXRTZXJ2aWNlVXJsKCdkYXNoYm9hcmQnLCBkb21haW4pO1xuICAgIHRoaXMuZW52aXJvbm1lbnRzLlBBU1NQT1JUX1BVQkxJQ19VUkwgPSBnZXRTZXJ2aWNlVXJsKCdwYXNzcG9ydCcsIGRvbWFpbik7XG4gICAgdGhpcy5lbnZpcm9ubWVudHMuWkVVU19QVUJMSUNfVVJMID0gZ2V0U2VydmljZVVybCgnemV1cycsIGRvbWFpbik7XG4gICAgdGhpcy5lbnZpcm9ubWVudHMuQ0ROX1BVQkxJQ19VUkwgPSBnZXRTZXJ2aWNlVXJsKCdjZG4nLCBkb21haW4pO1xuICB9XG59XG4iLCJpbXBvcnQge1xuICBBdXRoZW50aWNhdGVkQ29ubmVjdFVzZXIsXG4gIENhbGxiYWNrTWFwLFxuICBFdmVudEluZm8sXG4gIEludGVncmF0aW9uSW5zdGFsbEV2ZW50LFxuICBJbnRlZ3JhdGlvblVuaW5zdGFsbEV2ZW50LFxuICBMaXN0ZW5lckZ1bmN0aW9uLFxuICBQb3J0YWxDbG9zZUV2ZW50LFxuICBQb3J0YWxPcGVuRXZlbnQsXG4gIFNES0V2ZW50TGlzdGVuZXJNYXAsXG4gIFNES19FVkVOVCxcbiAgV29ya2Zsb3dTdGF0ZUNoYW5nZUV2ZW50LFxufSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU0RLRXZlbnRFbWl0dGVyIHtcbiAgcHJpdmF0ZSBldmVudExpc3RlbmVyc01hcDogUGFydGlhbDxTREtFdmVudExpc3RlbmVyTWFwPiA9IHt9O1xuICBwcml2YXRlIGludGVncmF0aW9uU3RhdGVDYWxsYmFja3M6IHsgW3R5cGU6IHN0cmluZ106IENhbGxiYWNrTWFwIH0gPSB7fTtcblxuICAvKipcbiAgICogdGhpcyB3aWxsIGFkZCBsaXN0ZW5lciB0byBldmVudCBsaXN0ZW5lcnMgbGlzdFxuICAgKiBAcGFyYW0gZXZlbnROYW1lXG4gICAqIEByZXR1cm5zIGZ1bmN0aW9uIHRvIHVuc3Vic2NyaWJlIGN1cnJlbnQgbGlzdGVuZXJcbiAgICovXG4gIHN1YnNjcmliZShldmVudE5hbWU6IFNES19FVkVOVCwgbGlzdGVuZXI6IExpc3RlbmVyRnVuY3Rpb24pOiAoKSA9PiBib29sZWFuIHtcbiAgICB0aGlzLmFzc2VydEV2ZW50VHlwZShldmVudE5hbWUpO1xuICAgIGlmICh0eXBlb2YgbGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgbm8gbGlzdGVuZXIgaXMgcHJvdmlkZWQgZm9yICR7ZXZlbnROYW1lfWApO1xuICAgIH1cblxuICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnNNYXAgPSB7XG4gICAgICAuLi50aGlzLmV2ZW50TGlzdGVuZXJzTWFwLFxuICAgICAgW2V2ZW50TmFtZV06IFsuLi4odGhpcy5ldmVudExpc3RlbmVyc01hcFtldmVudE5hbWVdID8/IFtdKSwgbGlzdGVuZXJdLFxuICAgIH07XG5cbiAgICAvLyByZXR1cm4gdW5zdWJzY3JpYmUgbGlzdGVuZXJcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMudW5zdWJzY3JpYmUoZXZlbnROYW1lLCBsaXN0ZW5lcik7XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiB0aGlzIG1ldGhvZCBhZGQgYmluZCBjYWxsYmFja01hcCB0byBpbnRlZ3JhdGlvbiB0eXBlXG4gICAqIGFuZCBlbWl0IGV2ZW50IGZvciBwYXJ0aWN1bGFyIGludGVncmF0aW9uXG4gICAqIEBwYXJhbSBpbnRlZ3JhdGlvblR5cGVcbiAgICogQHBhcmFtIGNhbGxiYWNrTWFwXG4gICAqL1xuICBzdWJzY3JpYmVUb0ludGVncmF0aW9uKGludGVncmF0aW9uVHlwZTogc3RyaW5nLCBjYWxsYmFja01hcDogQ2FsbGJhY2tNYXApOiB2b2lkIHtcbiAgICB0aGlzLmludGVncmF0aW9uU3RhdGVDYWxsYmFja3NbaW50ZWdyYXRpb25UeXBlXSA9IHsgLi4uY2FsbGJhY2tNYXAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiB0aGlzIG1ldGhvZCByZW1vdmVzIGxpc3RlbmVyIGZyb20gZXZlbkxpc3RlbmVyTWFwXG4gICAqIEBwYXJhbSBldmVudE5hbWVcbiAgICogQHBhcmFtIGxpc3RlbmVyXG4gICAqIEByZXR1cm5zIHRydWUgaWYgc3VjY2Vzc2Z1bGx5IHVuc3Vic2NyaWJlZCBlbHNlIGZhbHNlXG4gICAqL1xuICB1bnN1YnNjcmliZShldmVudE5hbWU6IFNES19FVkVOVCwgbGlzdGVuZXI6IExpc3RlbmVyRnVuY3Rpb24pOiBib29sZWFuIHtcbiAgICB0aGlzLmFzc2VydEV2ZW50VHlwZShldmVudE5hbWUpO1xuICAgIGlmICh0eXBlb2YgbGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbGlzdGVuZXIgaXMgcmVxdWlyZWQgZm9yIHVuc3Vic2NyaXB0aW9uJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgb2xkTGlzdGVuZXJzQ291bnQgPSAodGhpcy5ldmVudExpc3RlbmVyc01hcFtldmVudE5hbWVdID8/IFtdKS5sZW5ndGg7XG5cbiAgICB0aGlzLmV2ZW50TGlzdGVuZXJzTWFwID0ge1xuICAgICAgLi4udGhpcy5ldmVudExpc3RlbmVyc01hcCxcbiAgICAgIFtldmVudE5hbWVdOiAoKHRoaXMuZXZlbnRMaXN0ZW5lcnNNYXBbZXZlbnROYW1lXSBhcyBMaXN0ZW5lckZ1bmN0aW9uW10pID8/IFtdKS5maWx0ZXIoXG4gICAgICAgIChmbjogTGlzdGVuZXJGdW5jdGlvbikgPT4gZm4gIT09IGxpc3RlbmVyLFxuICAgICAgKSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIG9sZExpc3RlbmVyc0NvdW50ID4gdGhpcy5ldmVudExpc3RlbmVyc01hcFtldmVudE5hbWVdIS5sZW5ndGg7XG4gIH1cblxuICAvKipcbiAgICogY2hlY2sgaWYgZXZlbnQgaXMgdmFsaWQgcGFyYWdvbiBzZGsgZXZlbnRcbiAgICogQHBhcmFtIGV2ZW50TmFtZVxuICAgKi9cbiAgcHJpdmF0ZSBhc3NlcnRFdmVudFR5cGUoZXZlbnROYW1lOiB1bmtub3duKTogYXNzZXJ0cyBldmVudE5hbWUgaXMgU0RLX0VWRU5UIHtcbiAgICBpZiAoIU9iamVjdC52YWx1ZXMoU0RLX0VWRU5UKS5pbmNsdWRlcyhldmVudE5hbWUgYXMgU0RLX0VWRU5UKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2V2ZW50TmFtZX0gaXMgbm90IHZhbGlkIHBhcmFnb24gZXZlbnRgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogdGhpcyBtZXRob2QgY2FsbCBhdHRhY2hlZCBsaXN0ZW5lcnMgd2l0aCBwYXlsb2FkIGZvciBldmVudE5hbWUgdHlwZVxuICAgKiBAcGFyYW0gZXZlbnROYW1lXG4gICAqIEBwYXJhbSBldmVudFBheWxvYWRcbiAgICovXG4gIHByaXZhdGUgZW1pdFNhZmUoXG4gICAgZXZlbnROYW1lOiBTREtfRVZFTlQsXG4gICAgLi4uZXZlbnRQYXlsb2FkOiBQYXJhbWV0ZXJzPFNES0V2ZW50TGlzdGVuZXJNYXBba2V5b2YgU0RLRXZlbnRMaXN0ZW5lck1hcF1bbnVtYmVyXT5cbiAgKTogdm9pZCB7XG4gICAgKHRoaXMuZXZlbnRMaXN0ZW5lcnNNYXBbZXZlbnROYW1lXSA/PyBbXSkuZm9yRWFjaCgobGlzdGVuZXI6IEZ1bmN0aW9uKSA9PiB7XG4gICAgICAvLyBzZGsgc2hvdWxkIG5vdCBjYXJlIGFib3V0IGVycm9yIGluc2lkZSBsaXN0ZW5lcnNcbiAgICAgIHRyeSB7XG4gICAgICAgIGxpc3RlbmVyKC4uLmV2ZW50UGF5bG9hZCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiB0aGlzIG1ldGhvZCB3aWxsIGNhbGwgZXJyb3JDYWxsYmFjayBmb3IgaW50ZWdyYXRpb25cbiAgICogQHBhcmFtIGVycm9yXG4gICAqIEBwYXJhbSBpbnRlZ3JhdGlvblR5cGVcbiAgICovXG4gIGVtaXRFcnJvcihlcnJvcjogRXJyb3IsIGludGVncmF0aW9uVHlwZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5pbnZva2VDYWxsYmFja1NhZmUoaW50ZWdyYXRpb25UeXBlLCAnb25FcnJvcicsIGVycm9yKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAgdGhpcyB3aWxsIGNhbGwgY2FsbEJhY2sgZnVuY3Rpb24gaW5zaWRlIHRyeS1jYXRjaCBibG9ja1xuICAgKiBAcGFyYW0gaW50ZWdyYXRpb25UeXBlXG4gICAqIEBwYXJhbSBjYWxsYmFja1R5cGVcbiAgICogQHBhcmFtIHBheWxvYWRcbiAgICovXG4gIHByaXZhdGUgaW52b2tlQ2FsbGJhY2tTYWZlKFxuICAgIGludGVncmF0aW9uVHlwZTogc3RyaW5nLFxuICAgIGNhbGxiYWNrVHlwZToga2V5b2YgQ2FsbGJhY2tNYXAsXG4gICAgLy8gQHRzLWlnbm9yZSBjb3VsZCBub3QgaW5mZXIgb3B0aW9uYWwgY2FsbGJhY2tzXG4gICAgLi4ucGF5bG9hZDogUGFyYW1ldGVyczxDYWxsYmFja01hcFtrZXlvZiBDYWxsYmFja01hcF0+XG4gICk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICAvL0B0cy1pZ25vcmUgVE9ETyA6IGNoZWNrIHdoeSB0aGlzIGdpdmUgdHlwZSBlcnJvclxuICAgICAgdGhpcy5pbnRlZ3JhdGlvblN0YXRlQ2FsbGJhY2tzW2ludGVncmF0aW9uVHlwZV0/LltjYWxsYmFja1R5cGVdPy4oLi4ucGF5bG9hZCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiB0aGlzIHdpbGwgaW52b2tlIGVtaXRTYWZlIG1ldGhvZCB3aXRoIHByb3BlciBwYXlsb2FkXG4gICAqIEBwYXJhbSBldmVudFxuICAgKiBAcGFyYW0gdXNlclN0YXRlXG4gICAqIEBwYXJhbSBtb2RhbFN0YXRlXG4gICAqL1xuICB0cmlnZ2VyRXZlbnQoXG4gICAgeyB0eXBlLCBpbnRlZ3JhdGlvbklkLCBpbnRlZ3JhdGlvblR5cGUsIHdvcmtmbG93SWQsIHdvcmtmbG93U3RhdGVDaGFuZ2UgfTogRXZlbnRJbmZvLFxuICAgIHVzZXJTdGF0ZTogQXV0aGVudGljYXRlZENvbm5lY3RVc2VyLFxuICApOiB2b2lkIHtcbiAgICBpZiAoIWludGVncmF0aW9uSWQgfHwgIWludGVncmF0aW9uVHlwZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBTREtfRVZFTlQuT05fSU5URUdSQVRJT05fSU5TVEFMTDoge1xuICAgICAgICBjb25zdCBldmVudFBheWxvYWQ6IFtJbnRlZ3JhdGlvbkluc3RhbGxFdmVudCwgQXV0aGVudGljYXRlZENvbm5lY3RVc2VyXSA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpbnRlZ3JhdGlvbklkLFxuICAgICAgICAgICAgaW50ZWdyYXRpb25UeXBlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdXNlclN0YXRlLFxuICAgICAgICBdO1xuXG4gICAgICAgIHRoaXMuaW52b2tlQ2FsbGJhY2tTYWZlKGludGVncmF0aW9uVHlwZSwgJ29uSW5zdGFsbCcsIC4uLmV2ZW50UGF5bG9hZCk7XG4gICAgICAgIHRoaXMuZW1pdFNhZmUoU0RLX0VWRU5ULk9OX0lOVEVHUkFUSU9OX0lOU1RBTEwsIC4uLmV2ZW50UGF5bG9hZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBTREtfRVZFTlQuT05fSU5URUdSQVRJT05fVU5JTlNUQUxMOiB7XG4gICAgICAgIGNvbnN0IGV2ZW50UGF5bG9hZDogW0ludGVncmF0aW9uVW5pbnN0YWxsRXZlbnQsIEF1dGhlbnRpY2F0ZWRDb25uZWN0VXNlcl0gPSBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgaW50ZWdyYXRpb25JZCxcbiAgICAgICAgICAgIGludGVncmF0aW9uVHlwZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHVzZXJTdGF0ZSxcbiAgICAgICAgXTtcblxuICAgICAgICB0aGlzLmludm9rZUNhbGxiYWNrU2FmZShpbnRlZ3JhdGlvblR5cGUsICdvblVuaW5zdGFsbCcsIC4uLmV2ZW50UGF5bG9hZCk7XG4gICAgICAgIHRoaXMuZW1pdFNhZmUoU0RLX0VWRU5ULk9OX0lOVEVHUkFUSU9OX1VOSU5TVEFMTCwgLi4uZXZlbnRQYXlsb2FkKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIFNES19FVkVOVC5PTl9QT1JUQUxfT1BFTjoge1xuICAgICAgICBjb25zdCBldmVudFBheWxvYWQ6IFtQb3J0YWxPcGVuRXZlbnQsIEF1dGhlbnRpY2F0ZWRDb25uZWN0VXNlcl0gPSBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgaW50ZWdyYXRpb25JZCxcbiAgICAgICAgICAgIGludGVncmF0aW9uVHlwZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHVzZXJTdGF0ZSxcbiAgICAgICAgXTtcblxuICAgICAgICB0aGlzLmludm9rZUNhbGxiYWNrU2FmZShpbnRlZ3JhdGlvblR5cGUsICdvbk9wZW4nLCAuLi5ldmVudFBheWxvYWQpO1xuICAgICAgICB0aGlzLmVtaXRTYWZlKFNES19FVkVOVC5PTl9QT1JUQUxfT1BFTiwgLi4uZXZlbnRQYXlsb2FkKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIFNES19FVkVOVC5PTl9QT1JUQUxfQ0xPU0U6IHtcbiAgICAgICAgY29uc3QgZXZlbnRQYXlsb2FkOiBbUG9ydGFsQ2xvc2VFdmVudCwgQXV0aGVudGljYXRlZENvbm5lY3RVc2VyXSA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpbnRlZ3JhdGlvbklkLFxuICAgICAgICAgICAgaW50ZWdyYXRpb25UeXBlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdXNlclN0YXRlLFxuICAgICAgICBdO1xuXG4gICAgICAgIHRoaXMuaW52b2tlQ2FsbGJhY2tTYWZlKGludGVncmF0aW9uVHlwZSwgJ29uQ2xvc2UnLCAuLi5ldmVudFBheWxvYWQpO1xuICAgICAgICB0aGlzLmVtaXRTYWZlKFNES19FVkVOVC5PTl9QT1JUQUxfQ0xPU0UsIC4uLmV2ZW50UGF5bG9hZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBTREtfRVZFTlQuT05fV09SS0ZMT1dfQ0hBTkdFOiB7XG4gICAgICAgIGNvbnN0IGV2ZW50UGF5bG9hZDogW1dvcmtmbG93U3RhdGVDaGFuZ2VFdmVudCwgQXV0aGVudGljYXRlZENvbm5lY3RVc2VyXSA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpbnRlZ3JhdGlvbklkLFxuICAgICAgICAgICAgd29ya2Zsb3dJZDogd29ya2Zsb3dJZCBhcyBzdHJpbmcsXG4gICAgICAgICAgICB3b3JrZmxvd1N0YXRlQ2hhbmdlOiB3b3JrZmxvd1N0YXRlQ2hhbmdlIHx8IHt9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdXNlclN0YXRlLFxuICAgICAgICBdO1xuXG4gICAgICAgIHRoaXMuaW52b2tlQ2FsbGJhY2tTYWZlKGludGVncmF0aW9uVHlwZSwgJ29uV29ya2Zsb3dDaGFuZ2UnLCAuLi5ldmVudFBheWxvYWQpO1xuICAgICAgICB0aGlzLmVtaXRTYWZlKFNES19FVkVOVC5PTl9XT1JLRkxPV19DSEFOR0UsIC4uLmV2ZW50UGF5bG9hZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3R5cGV9IGlzIG5vdCB2YWxpZCBldmVudC5gKTtcbiAgICB9XG4gIH1cbn1cbiIsImV4cG9ydCBjb25zdCBBQ1RJT05fQ1VTVE9NID0gJ2N1c3RvbSc7XG4iLCJpbXBvcnQgeyBDb25uZWN0Q3JlZGVudGlhbENvbmZpZyB9IGZyb20gJy4uL3R5cGVzL2Nvbm5lY3QnO1xuXG5pbXBvcnQgeyBJQ29ubmVjdEludGVncmF0aW9uIH0gZnJvbSAnLi9pbnRlZ3JhdGlvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSVBlcnNvbmEgfSBmcm9tICcuL3BlcnNvbmEuaW50ZXJmYWNlJztcbmltcG9ydCB7IElQcm9qZWN0IH0gZnJvbSAnLi9wcm9qZWN0LmludGVyZmFjZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNvbm5lY3RDcmVkZW50aWFsIHtcbiAgaWQ6IHN0cmluZztcbiAgcHJvamVjdElkOiBzdHJpbmc7XG4gIGludGVncmF0aW9uSWQ6IHN0cmluZztcbiAgY29uZmlnOiBDb25uZWN0Q3JlZGVudGlhbENvbmZpZztcbiAgcGVyc29uYUlkOiBzdHJpbmc7XG4gIGlzUHJldmlld0NyZWRlbnRpYWw6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBwcm92aWRlcklkIDogdGhpcyBwcm9wZXJ0eSBzdG9yZXMgdXNlcidzIGlkZW50aWZpZXJzIGluIHRoaXJkIHBhcnR5IGRhdGFiYXNlIGUuZy4gU2hvcGlmeVxuICAgKi9cbiAgcHJvdmlkZXJJZDogc3RyaW5nO1xuICBkYXRlQ3JlYXRlZDogRGF0ZTtcbiAgZGF0ZVVwZGF0ZWQ6IERhdGU7XG4gIGRhdGVWYWxpZFVudGlsPzogRGF0ZTtcbiAgZGF0ZVJlZnJlc2hlZDogRGF0ZTtcbiAgc3RhdHVzOiBDcmVkZW50aWFsU3RhdHVzO1xuICAvKipcbiAgICogbWlzY2VsbGFuZW91cyBpbnRlZ3JhdGlvbiBwcm92aWRlciBkYXRhIHJlY2VpdmVkIGFsb25nIHdpdGggYWNjZXNzX3Rva2VuL3VzZXJpbmZvXG4gICAqL1xuICBwcm92aWRlckRhdGE6IENvbm5lY3RDcmVkZW50aWFsUHJvdmlkZXJEYXRhO1xuICAvKipcbiAgICogY291bnQgaG93IG1hbnkgdGltZXMgY3JlZGVudGlhbCBmYWlsZWQgdG8gcmVmcmVzaFxuICAgKi9cbiAgcmVmcmVzaEZhaWx1cmVDb3VudDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiB0cmFjayByZWZyZXNoaW5nIHN0YXR1c1xuICAgKi9cbiAgaXNSZWZyZXNoaW5nOiBib29sZWFuO1xuXG4gIHByb2plY3Q/OiBJUHJvamVjdDtcbiAgaW50ZWdyYXRpb24/OiBJQ29ubmVjdEludGVncmF0aW9uO1xuICBwZXJzb25hPzogSVBlcnNvbmE7XG59XG5cbmV4cG9ydCB0eXBlIENvbm5lY3RDcmVkZW50aWFsUHJvdmlkZXJEYXRhID0gUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbj47XG5cbmV4cG9ydCBlbnVtIENyZWRlbnRpYWxTdGF0dXMge1xuICBQRU5ESU5HID0gJ1BFTkRJTkcnLFxuICBJTlZBTElEID0gJ0lOVkFMSUQnLFxuICBWQUxJRCA9ICdWQUxJRCcsXG59IiwiZXhwb3J0IGVudW0gQXV0aGVudGljYXRpb25TY2hlbWUge1xuICBCQVNJQyA9ICdiYXNpYycsXG4gIE9BVVRIID0gJ29hdXRoJyxcbiAgT0FVVEhfQ0xJRU5UX0NSRURFTlRJQUwgPSAnb2F1dGhfY2xpZW50X2NyZWRlbnRpYWwnLFxuICBTRVJWSUNFX0FDQ09VTlQgPSAnc2VydmljZV9hY2NvdW50JyxcbiAgT0FVVEhfQVBQID0gJ29hdXRoX2FwcCcsXG4gIElNUEVSU09OQVRFRF9BUFAgPSAnaW1wZXJzb25hdGVkX2FwcCcsXG59XG5cbi8qKlxuICogb2F1dGggcmVzcG9uc2UgcmV0dXJuIGZyb20gb3VyIHNlcnZpY2VcbiAqL1xuZXhwb3J0IHR5cGUgT2F1dGhDYWxsYmFja1Jlc3BvbnNlID0ge1xuICBpbnRlZ3JhdGlvbklkOiBzdHJpbmc7XG4gIHBheWxvYWQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBhbnk+O1xufTtcbiIsImltcG9ydCB7IEludGVncmF0aW9uQ29ubmVjdElucHV0IH0gZnJvbSAnLi4vdHlwZXMvYWN0aW9uJztcbmltcG9ydCB7IERhdGFUeXBlLCBUb2tlbml6ZWRTb3VyY2UgfSBmcm9tICcuLi90eXBlcy9yZXNvbHZlcnMnO1xuXG5pbXBvcnQgeyBJQmFzZUVudGl0eSB9IGZyb20gJy4vYmFzZS5lbnRpdHknO1xuaW1wb3J0IHsgQXV0aGVudGljYXRpb25TY2hlbWUgfSBmcm9tICcuL2NyZWRlbnRpYWwuaW50ZXJmYWNlJztcbmltcG9ydCB7IElDb25uZWN0SW50ZWdyYXRpb24gfSBmcm9tICcuL2ludGVncmF0aW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJUHJvamVjdCB9IGZyb20gJy4vcHJvamVjdC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUmVxdWVzdEF1dGhvcml6YXRpb24gfSBmcm9tICcuL3N0ZXBzJztcblxuZXhwb3J0IGludGVyZmFjZSBJQ3VzdG9tSW50ZWdyYXRpb24gZXh0ZW5kcyBJQmFzZUVudGl0eSB7XG4gIC8qKlxuICAgKiB0aGUgcHJvamVjdCB0aGF0IGF1dGhvcmVkIGFuZCBtYWludGFpbnMgdGhpcyBjdXN0b20gaW50ZWdyYXRpb24uXG4gICAqL1xuICBwcm9qZWN0OiBJUHJvamVjdDtcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBwcm9qZWN0IHRoYXQgYXV0aG9yZWQgYW5kIG1haW50YWlucyB0aGlzIGN1c3RvbSBpbnRlZ3JhdGlvbi5cbiAgICovXG4gIHByb2plY3RJZDogc3RyaW5nO1xuXG4gIG5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIGEgc2x1ZyBnZW5lcmF0ZWQgZnJvbSB0aGUgbmFtZSBvZiB0aGUgY3VzdG9tIGludGVncmF0aW9uIChlLmcuIGBjdXN0b20uZ2l0aHViYClcbiAgICogaXQncyBzdHJpcHBlZCBvZiBub24tYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgYW5kIGxvd2VyY2FzZWRcbiAgICogdGhleSdyZSB1bmlxdWUgYmV0d2VlbiBwcm9qZWN0c1xuICAgKi9cbiAgcmVhZG9ubHkgc2x1Zz86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIENETiBwYXRoIG9mIHRoZSBjdXN0b20gaW50ZWdyYXRpb24ncyBTVkctZm9ybWF0IGljb24gZmlsZS5cbiAgICovXG4gIGljb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEluc3RhbmNlcyBvZiB0aGlzIGN1c3RvbSBpbnRlZ3JhdGlvbiBjb25maWd1cmVkIGZvciBhIHBhcnRpY3VsYXIgcHJvamVjdC5cbiAgICpcbiAgICogQ3VycmVudGx5LCB3ZSBvbmx5IGV4cGVjdCB0aGF0IG9uZSBpbnRlZ3JhdGlvbiB3aWxsIGJlIGFzc29jaWF0ZWQgd2l0aCBhIGN1c3RvbSBpbnRlZ3JhdGlvblxuICAgKiBhdCBhIHRpbWUuIEhvd2V2ZXIsIHRoaXMgaXMgc3ViamVjdCB0byBjaGFuZ2UgYW5kIHNob3VsZCBub3QgYmUgdHJlYXRlZCBhcyBhbiBpbnZhcmlhbnQgaW5cbiAgICogY29kZSAoaGVuY2UgdGhlIGFycmF5IHR5cGluZykuXG4gICAqL1xuICBpbnRlZ3JhdGlvbnM6IElDb25uZWN0SW50ZWdyYXRpb25bXTtcblxuICAvKipcbiAgICogQmFzaWMgKEFQSSBrZXlzKSBhbmQgT0F1dGggMi4wIGF1dGhlbnRpY2F0aW9uIHR5cGVzIGFyZSBzdXBwb3J0ZWQgZm9yIGN1c3RvbSBpbnRlZ3JhdGlvbnMuXG4gICAqL1xuICBhdXRoZW50aWNhdGlvblR5cGU/OiBBdXRoZW50aWNhdGlvblNjaGVtZTtcblxuICBpbnB1dEZpZWxkczogSW50ZWdyYXRpb25Db25uZWN0SW5wdXRbXTtcblxuICBvYXV0aEF1dGhvcml6YXRpb25Vcmw/OiBUb2tlbml6ZWRTb3VyY2U8RGF0YVR5cGUuU1RSSU5HPjtcblxuICBvYXV0aEFjY2Vzc1Rva2VuVXJsPzogVG9rZW5pemVkU291cmNlPERhdGFUeXBlLlNUUklORz47XG5cbiAgb2F1dGhTY29wZXM/OiBzdHJpbmc7XG5cbiAgb2F1dGhJbmNsdWRlQ2xpZW50QXV0aG9yaXphdGlvbkhlYWRlcj86IGJvb2xlYW47XG4gIHVzZVBLQ0VJbkNvZGVFeGNoYW5nZTogYm9vbGVhbjtcblxuICBhcGlCYXNlVXJsPzogVG9rZW5pemVkU291cmNlPERhdGFUeXBlLlNUUklORz47XG4gIHRlc3RFbmRwb2ludFBhdGg/OiBUb2tlbml6ZWRTb3VyY2U8RGF0YVR5cGUuU1RSSU5HPjtcblxuICBhcGlBdXRob3JpemF0aW9uOiBSZXF1ZXN0QXV0aG9yaXphdGlvbjtcblxuICBpc1B1Ymxpc2hlZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUHVibGlzaGVkQ3VzdG9tSW50ZWdyYXRpb24gZXh0ZW5kcyBJQ3VzdG9tSW50ZWdyYXRpb24ge1xuICBpc1B1Ymxpc2hlZDogdHJ1ZTtcbiAgbmFtZTogc3RyaW5nO1xuICByZWFkb25seSBzbHVnOiBzdHJpbmc7XG4gIGljb246IHN0cmluZztcbiAgYXV0aGVudGljYXRpb25UeXBlOiBBdXRoZW50aWNhdGlvblNjaGVtZTtcbiAgb2F1dGhDbGllbnRJZDogc3RyaW5nO1xuICBvYXV0aFNjb3Blczogc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVTbHVnRm9ySW50ZWdyYXRpb24oXG4gIGN1c3RvbUludGVncmF0aW9uOiBJQ3VzdG9tSW50ZWdyYXRpb24sXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoIWN1c3RvbUludGVncmF0aW9uLm5hbWUpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3Qgc2x1Zzogc3RyaW5nIHwgdW5kZWZpbmVkID0gY3VzdG9tSW50ZWdyYXRpb24ubmFtZVxuICAgID8gY3VzdG9tSW50ZWdyYXRpb24ubmFtZVxuICAgICAgICAucmVwbGFjZSgvW1xcV19dKy9nLCAnJylcbiAgICAgICAgLnRyaW0oKVxuICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgIDogdW5kZWZpbmVkO1xuICByZXR1cm4gYGN1c3RvbS4ke3NsdWd9YDtcbn1cbiIsImltcG9ydCB7IEFDVElPTl9DVVNUT00gfSBmcm9tICcuLi9jb25zdGFudHMnO1xuXG5pbXBvcnQgeyBJQ3VzdG9tSW50ZWdyYXRpb24sIGdlbmVyYXRlU2x1Z0ZvckludGVncmF0aW9uIH0gZnJvbSAnLi9jdXN0b21JbnRlZ3JhdGlvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSUNvbm5lY3RJbnRlZ3JhdGlvbkNvbmZpZyB9IGZyb20gJy4vaW50ZWdyYXRpb25Db25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7IElXb3JrZmxvd0Jhc2UgfSBmcm9tICcuL3dvcmtmbG93LmludGVyZmFjZSc7XG5cbmV4cG9ydCB0eXBlIElDb25uZWN0SW50ZWdyYXRpb24gPSB7XG4gIGlkOiBzdHJpbmc7XG4gIGRhdGVDcmVhdGVkOiBEYXRlO1xuICBkYXRlVXBkYXRlZDogRGF0ZTtcbiAgcHJvamVjdElkOiBzdHJpbmc7XG4gIGNvbmZpZ3M6IElDb25uZWN0SW50ZWdyYXRpb25Db25maWdbXTtcbiAgd29ya2Zsb3dzOiBJV29ya2Zsb3dCYXNlW107XG4gIHR5cGU6IHN0cmluZztcbiAgaXNBY3RpdmU6IGJvb2xlYW47XG4gIGN1c3RvbUludGVncmF0aW9uSWQ/OiBzdHJpbmc7XG4gIGN1c3RvbUludGVncmF0aW9uPzogSUN1c3RvbUludGVncmF0aW9uO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBJQ29ubmVjdEludGVncmF0aW9uV2l0aENyZWRlbnRpYWxJbmZvIGV4dGVuZHMgSUNvbm5lY3RJbnRlZ3JhdGlvbiB7XG4gIGhhc0NyZWRlbnRpYWw6IGJvb2xlYW47XG4gIGNvbm5lY3RlZFVzZXJMaW1pdE9uRGV2Q3JlZDogbnVtYmVyO1xuICBjb25uZWN0ZWRVc2VyTGltaXRSZWFjaGVkOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElJbnRlZ3JhdGlvbk1ldGFkYXRhIHtcbiAgdHlwZTogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIGljb246IHN0cmluZztcbiAgYnJhbmRDb2xvcjogc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW50ZWdyYXRpb25UeXBlTmFtZShpbnRlZ3JhdGlvbjogSUNvbm5lY3RJbnRlZ3JhdGlvbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmIChpbnRlZ3JhdGlvbi50eXBlID09PSBBQ1RJT05fQ1VTVE9NKSB7XG4gICAgaWYgKGludGVncmF0aW9uLmN1c3RvbUludGVncmF0aW9uKSB7XG4gICAgICByZXR1cm4gZ2VuZXJhdGVTbHVnRm9ySW50ZWdyYXRpb24oaW50ZWdyYXRpb24uY3VzdG9tSW50ZWdyYXRpb24pO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgQ3VzdG9tIGludGVncmF0aW9uIGRldGFpbHMgYXJlIG1pc3NpbmcgZnJvbSB0aGlzIGludGVncmF0aW9uOiAke2ludGVncmF0aW9uLmlkfWAsXG4gICAgKTtcbiAgfVxuICByZXR1cm4gaW50ZWdyYXRpb24udHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ3VzdG9tSW50ZWdyYXRpb25UeXBlTmFtZSh0eXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIHR5cGUuc3RhcnRzV2l0aCgnY3VzdG9tLicpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElDb25uZWN0SW50ZWdyYXRpb25XaXRoQ3JlZGVudGlhbEluZm8gZXh0ZW5kcyBJQ29ubmVjdEludGVncmF0aW9uIHtcbiAgaGFzQ3JlZGVudGlhbDogYm9vbGVhbjtcbiAgY29ubmVjdGVkVXNlckxpbWl0T25EZXZDcmVkOiBudW1iZXI7XG4gIGNvbm5lY3RlZFVzZXJMaW1pdFJlYWNoZWQ6IGJvb2xlYW47XG59XG4iLCJpbXBvcnQgeyBEYXRhVHlwZSwgS2V5ZWRTb3VyY2UgfSBmcm9tICcuLi90eXBlcy9yZXNvbHZlcnMnO1xuaW1wb3J0IHsgTm9uTnVsbFVuZGVmaW5lZEZpZWxkIH0gZnJvbSAnLi4vdHlwZXMvc2RrJztcblxuLyoqXG4gKiAgY2hlY2tzIGlmIGl0ZW1zIGlzIG9iamVjdCB0eXBlIG9yIG5vdFxuICogQHBhcmFtIGl0ZW1cbiAqIEByZXR1cm5zXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KGl0ZW06IHVua25vd24pOiBpdGVtIGlzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgcmV0dXJuICEhaXRlbSAmJiB0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoaXRlbSk7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBwYXJhbSAtIEtleWVkU291cmNlPERhdGFUeXBlLkFOWT5bXVxuICogQGRlc2NyaXB0aW9uIHBhcnNlIEtleWVkU291cmNlIGZvciBub24tZHluYW1pYyBzb3VyY2VzXG4gKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgc3RyaW5nIHwgYm9vbGVhbiB8IHVuZGVmaW5lZD59IC0gcGFyc2VkIGtleS12YWx1ZSBwYWlyIG9iamVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VLZXllZFNvdXJjZShcbiAgcGFyYW06IEtleWVkU291cmNlPERhdGFUeXBlLkFOWT5bXSxcbik6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IGJvb2xlYW4gfCB1bmRlZmluZWQ+IHtcbiAgaWYgKCFwYXJhbSB8fCAhcGFyYW0/Lmxlbmd0aCkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIHBhcmFtLm1hcCgocGFyYW06IEtleWVkU291cmNlPERhdGFUeXBlLkFOWT4pID0+IFtcbiAgICAgIHBhcmFtLmtleSxcbiAgICAgIHBhcmFtLnNvdXJjZS50eXBlID09PSAnVkFMVUUnID8gcGFyYW0uc291cmNlLnZhbHVlIDogdW5kZWZpbmVkLFxuICAgIF0pLFxuICApO1xufVxuXG4vKipcbiAqIHN0cmlwcyBudWxsIGFuZCB1bmRlZmluZWQga2V5cyBmcm9tIG9iamVjdFxuICogQHBhcmFtIG9ialxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmlwVW5kZWZpbmVkQW5kTnVsbDxUIGV4dGVuZHMgb2JqZWN0PihvYmo6IFQpOiBOb25OdWxsVW5kZWZpbmVkRmllbGQ8VD4ge1xuICBjb25zdCBuZXdPYmogPSB7fTtcbiAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKChrZXk6IHN0cmluZykgPT4ge1xuICAgIGlmIChpc09iamVjdChvYmpba2V5XSkpIHtcbiAgICAgIG5ld09ialtrZXldID0gc3RyaXBVbmRlZmluZWRBbmROdWxsKG9ialtrZXldKTtcbiAgICB9IGVsc2UgaWYgKG9ialtrZXldICE9PSB1bmRlZmluZWQgJiYgb2JqW2tleV0gIT09IG51bGwpIHtcbiAgICAgIG5ld09ialtrZXldID0gb2JqW2tleV07XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIG5ld09iaiBhcyBOb25OdWxsVW5kZWZpbmVkRmllbGQ8VD47XG59XG4iLCJpbXBvcnQgeyBBQ1RJT05fQ1VTVE9NIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IEF1dGhlbnRpY2F0aW9uU2NoZW1lIH0gZnJvbSAnLi4vZW50aXRpZXMvY3JlZGVudGlhbC5pbnRlcmZhY2UnO1xuaW1wb3J0IHtcbiAgSUNvbm5lY3RJbnRlZ3JhdGlvbldpdGhDcmVkZW50aWFsSW5mbyxcbiAgZ2V0SW50ZWdyYXRpb25UeXBlTmFtZSxcbiAgaXNDdXN0b21JbnRlZ3JhdGlvblR5cGVOYW1lLFxufSBmcm9tICcuLi9lbnRpdGllcy9pbnRlZ3JhdGlvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSW50ZWdyYXRpb25Db25uZWN0SW5wdXQgfSBmcm9tICcuLi90eXBlcy9hY3Rpb24nO1xuaW1wb3J0IHsgQXV0aGVudGljYXRlZENvbm5lY3RVc2VyIH0gZnJvbSAnLi4vdHlwZXMvY29ubmVjdCc7XG5pbXBvcnQgeyBhdXRoU2NoZW1hUmVxdWlyZWRJbnB1dHMgfSBmcm9tICcuLi90eXBlcy9vYXV0aCc7XG5pbXBvcnQgeyBEYXRhVHlwZSwgS2V5ZWRTb3VyY2UgfSBmcm9tICcuLi90eXBlcy9yZXNvbHZlcnMnO1xuXG5pbXBvcnQgeyBJQ29ubmVjdFVzZXJDb250ZXh0IH0gZnJvbSAnLi9Db25uZWN0VXNlckNvbnRleHQnO1xuXG5pbXBvcnQgeyBwYXJzZUtleWVkU291cmNlLCBzdHJpcFVuZGVmaW5lZEFuZE51bGwgfSBmcm9tICcuJztcblxuXG4vKipcbiAqIHRoaXMgY2hlY2sgaWYgaW5wdXRzIG5lZWRzIHRvIGJlIHNob3duIGJlZm9yZSBvYXV0aFxuICogQHBhcmFtIGludGVncmF0aW9uXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3Qgc2hvdWxkU2hvd1ByZUF1dGhJbnB1dHMgPSAoe1xuICBpbnRlZ3JhdGlvbixcbiAgYXV0aFNjaGVtZSxcbiAgZW5kVXNlclN1cHBsaWVkVmFsdWVzLFxuICBpc0FjY291bnRUeXBlU3VwcG9ydGVkLFxufToge1xuICBpbnRlZ3JhdGlvbjogSUNvbm5lY3RJbnRlZ3JhdGlvbldpdGhDcmVkZW50aWFsSW5mbztcbiAgcHJvdmlkZXI/OiBzdHJpbmc7XG4gIGF1dGhTY2hlbWU/OiBBdXRoZW50aWNhdGlvblNjaGVtZTtcbiAgZW5kVXNlclN1cHBsaWVkVmFsdWVzPzogSW50ZWdyYXRpb25Db25uZWN0SW5wdXRbXTtcbiAgaXNBY2NvdW50VHlwZVN1cHBvcnRlZDogYm9vbGVhbjtcbn0pOiBib29sZWFuID0+IHtcbiAgY29uc3QgYWN0aW9uVHlwZSA9IGdldEludGVncmF0aW9uVHlwZU5hbWUoaW50ZWdyYXRpb24pO1xuICBpZiAoIWFjdGlvblR5cGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBsZXQgaW5wdXRzOiBJbnRlZ3JhdGlvbkNvbm5lY3RJbnB1dFtdIHwgdW5kZWZpbmVkO1xuXG4gIGlmIChpbnRlZ3JhdGlvbi5jdXN0b21JbnRlZ3JhdGlvbikge1xuICAgIGNvbnN0IGN1c3RvbUludGVncmF0aW9uID0gaW50ZWdyYXRpb24uY3VzdG9tSW50ZWdyYXRpb247XG4gICAgY29uc3QgYXV0aFNwZWNpZmljSW5wdXRzID0gY3VzdG9tSW50ZWdyYXRpb24uYXV0aGVudGljYXRpb25UeXBlXG4gICAgICA/IGF1dGhTY2hlbWFSZXF1aXJlZElucHV0c1tjdXN0b21JbnRlZ3JhdGlvbi5hdXRoZW50aWNhdGlvblR5cGVdXG4gICAgICA6IFtdO1xuICAgIGlucHV0cyA9IFsuLi5hdXRoU3BlY2lmaWNJbnB1dHMsIC4uLihjdXN0b21JbnRlZ3JhdGlvbi5pbnB1dEZpZWxkcyA/PyBbXSldO1xuICB9IGVsc2UgaWYgKGF1dGhTY2hlbWUgPT09IEF1dGhlbnRpY2F0aW9uU2NoZW1lLk9BVVRIKSB7XG4gICAgaW5wdXRzID0gZW5kVXNlclN1cHBsaWVkVmFsdWVzO1xuICB9XG5cbiAgLyoqXG4gICAqIHdlIHNob3cgcHJlIGF1dGggaW5wdXRzIGluIGZvbGxvd2luZyBjYXNlc1xuICAgKiAxIC4gYmFzaWMgYXV0aFxuICAgKiAyLiBpbnRlZ3JhdGlvbiB0aGF0IHN1cHBvcnQgYWNjb3VudCB0eXBlIHNlbGVjdGlvblxuICAgKiAzLiBjdXN0b20gaW50ZWdyYXRpb24gd2l0aCBpbnB1dCBmaWVsZHNcbiAgICogNC4gb2F1dGggaW50ZWdyYXRpb24gd2l0aCBlbmRVc2VyU3VwcGxpZWRWYWx1ZXNcbiAgICovXG4gIHJldHVybiAoXG4gICAgQm9vbGVhbihhdXRoU2NoZW1lID09PSBBdXRoZW50aWNhdGlvblNjaGVtZS5CQVNJQykgfHxcbiAgICBCb29sZWFuKGlucHV0cz8ubGVuZ3RoKSB8fFxuICAgIGlzQWNjb3VudFR5cGVTdXBwb3J0ZWRcbiAgKTtcbn07XG5cbi8qKlxuICogIHN0YXJ0IG9hdXRoIGZsb3cgd2l0aCBuZXcgcG9wdXBcbiAqIEBwYXJhbSBwYXJhbTBcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBzdGFydE9BdXRoRmxvdyA9IGFzeW5jICh7XG4gIGNvbnRleHQsXG4gIGludGVncmF0aW9uLFxuICBlbmRVc2VyU3VwcGxpZWRWYWx1ZXMgPSB7fSxcbiAgYXV0aFBhcmFtcyxcbn06IHtcbiAgY29udGV4dDogSUNvbm5lY3RVc2VyQ29udGV4dDtcbiAgaW50ZWdyYXRpb246IElDb25uZWN0SW50ZWdyYXRpb25XaXRoQ3JlZGVudGlhbEluZm87XG4gIGVuZFVzZXJTdXBwbGllZFZhbHVlcz86IHsgW2lucHV0SWQ6IHN0cmluZ106IHN0cmluZyB9O1xuICBhdXRoUGFyYW1zPzogS2V5ZWRTb3VyY2U8RGF0YVR5cGUuQU5ZPltdIHwgdW5kZWZpbmVkO1xufSk6IFByb21pc2U8dm9pZD4gPT4ge1xuICBjb25zdCBhY3Rpb25UeXBlID0gZ2V0SW50ZWdyYXRpb25UeXBlTmFtZShpbnRlZ3JhdGlvbik7XG4gIGlmICghYWN0aW9uVHlwZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHJlcXVlc3RQYXJhbWV0ZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBib29sZWFuIHwgdW5kZWZpbmVkPiA9IGF1dGhQYXJhbXNcbiAgICA/IHBhcnNlS2V5ZWRTb3VyY2UoYXV0aFBhcmFtcylcbiAgICA6IHt9O1xuXG4gIGNvbnN0IHF1ZXJ5T2JqOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0gc3RyaXBVbmRlZmluZWRBbmROdWxsKHtcbiAgICBhY3Rpb246IGFjdGlvblR5cGUgJiYgaXNDdXN0b21JbnRlZ3JhdGlvblR5cGVOYW1lKGFjdGlvblR5cGUpID8gQUNUSU9OX0NVU1RPTSA6IGFjdGlvblR5cGUsXG4gICAgZW5kVXNlclN1cHBsaWVkVmFsdWVzOiBKU09OLnN0cmluZ2lmeShlbmRVc2VyU3VwcGxpZWRWYWx1ZXMpLFxuICAgIHBhcmFtZXRlcnM6IEpTT04uc3RyaW5naWZ5KHJlcXVlc3RQYXJhbWV0ZXJzKSxcbiAgICB1c2VyVG9rZW46IChjb250ZXh0LnVzZXIgYXMgQXV0aGVudGljYXRlZENvbm5lY3RVc2VyKS50b2tlbixcbiAgICBpbnRlZ3JhdGlvbklkOiBpbnRlZ3JhdGlvbi5pZCxcbiAgICByZWRpcmVjdFVybDogY29udGV4dC5lbmRVc2VySW50ZWdyYXRpb25Db25maWc/Lm92ZXJyaWRlUmVkaXJlY3RVcmwsXG4gICAgb3JpZ2luRm9yUG9zdE1lc3NhZ2U6IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4sXG4gIH0pIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblxuICBjb25zdCB1cmw6IHN0cmluZyA9IGAke2NvbnRleHQuZW52aXJvbm1lbnRzLlpFVVNfUFVCTElDX1VSTH0vcHJvamVjdHMvJHtcbiAgICBjb250ZXh0LnByb2plY3RJZFxuICB9L3Nkay9hY3Rpb25zL2J1aWxkLW9hdXRoPyR7bmV3IFVSTFNlYXJjaFBhcmFtcyhxdWVyeU9iaikudG9TdHJpbmcoKX1gO1xuICB3aW5kb3cub3Blbih1cmwsIHVuZGVmaW5lZCwgYHdpZHRoPSR7NTAwfSxoZWlnaHQ9JHs2MDB9LGxlZnQ9JHsxMDB9LHRvcD0kezE1MH1gKTtcbn07XG4iLCJpbXBvcnQgQ29ubmVjdFNESyBmcm9tICcuL0Nvbm5lY3RTREsnO1xuaW1wb3J0IHsgSUNvbm5lY3RTREsgfSBmcm9tICcuL3R5cGVzJztcbmV4cG9ydCAqIGZyb20gJy4vdHlwZXMvaW5kZXgnO1xuXG5jb25zdCBjb25uZWN0U2luZ2xldG9uID0gbmV3IENvbm5lY3RTREsoKTtcblxuZXhwb3J0IGNvbnN0IHBhcmFnb246IElDb25uZWN0U0RLID0ge1xuICBhdXRoZW50aWNhdGU6IGNvbm5lY3RTaW5nbGV0b24uYXV0aGVudGljYXRlLmJpbmQoY29ubmVjdFNpbmdsZXRvbiksXG4gIGNvbm5lY3Q6IGNvbm5lY3RTaW5nbGV0b24uY29ubmVjdC5iaW5kKGNvbm5lY3RTaW5nbGV0b24pLFxuICBldmVudDogY29ubmVjdFNpbmdsZXRvbi5ldmVudC5iaW5kKGNvbm5lY3RTaW5nbGV0b24pLFxuICBnZXRJbnRlZ3JhdGlvbk1ldGFkYXRhOiBjb25uZWN0U2luZ2xldG9uLmdldEludGVncmF0aW9uTWV0YWRhdGEuYmluZChjb25uZWN0U2luZ2xldG9uKSxcbiAgZ2V0VXNlcjogY29ubmVjdFNpbmdsZXRvbi5nZXRVc2VyLmJpbmQoY29ubmVjdFNpbmdsZXRvbiksXG4gIHJlcXVlc3Q6IGNvbm5lY3RTaW5nbGV0b24ucmVxdWVzdC5iaW5kKGNvbm5lY3RTaW5nbGV0b24pLFxuICBzdWJzY3JpYmU6IGNvbm5lY3RTaW5nbGV0b24uc3Vic2NyaWJlLmJpbmQoY29ubmVjdFNpbmdsZXRvbiksXG4gIHVuc3Vic2NyaWJlOiBjb25uZWN0U2luZ2xldG9uLnVuc3Vic2NyaWJlLmJpbmQoY29ubmVjdFNpbmdsZXRvbiksXG4gIHdvcmtmbG93OiBjb25uZWN0U2luZ2xldG9uLndvcmtmbG93LmJpbmQoY29ubmVjdFNpbmdsZXRvbiksXG4gIF9vYXV0aENhbGxiYWNrOiBjb25uZWN0U2luZ2xldG9uLl9vYXV0aENhbGxiYWNrLmJpbmQoY29ubmVjdFNpbmdsZXRvbiksXG4gIF9vYXV0aEVycm9yQ2FsbGJhY2s6IGNvbm5lY3RTaW5nbGV0b24uX29hdXRoRXJyb3JDYWxsYmFjay5iaW5kKGNvbm5lY3RTaW5nbGV0b24pLFxuICBpbnN0YWxsSW50ZWdyYXRpb246IGNvbm5lY3RTaW5nbGV0b24uaW5zdGFsbEludGVncmF0aW9uLmJpbmQoY29ubmVjdFNpbmdsZXRvbiksXG4gIHVuaW5zdGFsbEludGVncmF0aW9uOiBjb25uZWN0U2luZ2xldG9uLnVuaW5zdGFsbEludGVncmF0aW9uLmJpbmQoY29ubmVjdFNpbmdsZXRvbiksXG4gIGRpc2FibGVXb3JrZmxvdzogY29ubmVjdFNpbmdsZXRvbi5kaXNhYmxlV29ya2Zsb3cuYmluZChjb25uZWN0U2luZ2xldG9uKSxcbiAgc2V0VXNlck1ldGFkYXRhOiBjb25uZWN0U2luZ2xldG9uLnNldFVzZXJNZXRhZGF0YS5iaW5kKGNvbm5lY3RTaW5nbGV0b24pLFxuICBjb25maWd1cmVHbG9iYWw6IGNvbm5lY3RTaW5nbGV0b24uY29uZmlndXJlR2xvYmFsLmJpbmQoY29ubmVjdFNpbmdsZXRvbiksXG59O1xuXG5leHBvcnQgZGVmYXVsdCB7IENvbm5lY3RTREsgfTtcbiIsImltcG9ydCB7IFJlYWN0Tm9kZSB9IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IHsgQXV0aGVudGljYXRpb25TY2hlbWUgfSBmcm9tICcuLi9lbnRpdGllcy9jcmVkZW50aWFsLmludGVyZmFjZSc7XG5cbmltcG9ydCB7IFNpZGViYXJJbnB1dCB9IGZyb20gJy4vY29ubmVjdCc7XG5pbXBvcnQgeyBEYXRhVHlwZSwgS2V5ZWRTb3VyY2UsIFNvdXJjZSB9IGZyb20gJy4vcmVzb2x2ZXJzJztcblxuZXhwb3J0IGVudW0gU2lkZWJhcklucHV0VHlwZSB7XG4gIEF1dGggPSAnQVVUSCcsXG4gIEVudW0gPSAnRU5VTScsXG4gIER5bmFtaWNFbnVtID0gJ0RZTkFNSUNfRU5VTScsXG4gIEludGVudCA9ICdJTlRFTlQnLFxuICBUZXh0ID0gJ1RFWFQnLFxuICBUZXh0QXJlYSA9ICdURVhUQVJFQScsXG4gIFZhbHVlVGV4dCA9ICdURVhUX05PX1ZBUlMnLFxuICBWYWx1ZVRleHRBcmVhID0gJ1RFWFRBUkVBX05PX1ZBUlMnLFxuICBDb2RlID0gJ0NPREUnLFxuICBBY3Rpb25CdXR0b24gPSAnQUNUSU9OX0JVVFRPTicsXG4gIENvbmRpdGlvbmFsID0gJ0NPTkRJVElPTkFMJyxcbiAgRHluYW1pY0NvbmRpdGlvbmFsID0gJ0RZTkFNSUNfQ09ORElUSU9OQUwnLFxuICBOZXN0ZWRMaXN0ID0gJ05FU1RFRF9MSVNUJyxcbiAgRmlsZSA9ICdGSUxFJyxcbiAgRWRpdGFibGVEeW5hbWljRW51bSA9ICdFRElUQUJMRV9EWU5BTUlDX0VOVU0nLFxuICBFZGl0YWJsZUVudW0gPSAnRURJVEFCTEVfRU5VTScsXG4gIEJvb2xlYW5JbnB1dCA9ICdCT09MRUFOX0lOUFVUJyxcbiAgVXNlclN1cHBsaWVkQ3JlZGVudGlhbCA9ICdVU0VSX1NVUFBMSUVEX0NSRURFTlRJQUwnLFxuICBOYXRpdmVEeW5hbWljRW51bUlucHV0ID0gJ05BVElWRV9EWU5BTUlDX0lOUFVUJyxcbiAgVGltZUNvbnN0cmFpbnRJbnB1dCA9ICdUSU1FX0NPTlNUUkFJTlRfSU5QVVQnLFxuICBMaW5lc0xpc3RJbnB1dCA9ICdMaW5lc0xpc3RJbnB1dCcsXG4gIExpbmVzTGlzdER5bmFtaWNJbnB1dCA9ICdMaW5lc0xpc3REeW5hbWljSW5wdXQnLFxuICBOdW1iZXIgPSAnTlVNQkVSJyxcbiAgRW1haWwgPSAnRU1BSUwnLFxuICBVUkwgPSAnVVJMJyxcbiAgRW51bVRleHRBcmVhUGFpcklucHV0ID0gJ0VudW1UZXh0QXJlYVBhaXJJbnB1dCcsXG4gIEZpZWxkTWFwcGVyID0gJ0ZJRUxEX01BUFBFUicsXG4gIENvbWJvSW5wdXQgPSAnQ09NQk9fSU5QVVQnLFxuICBQYXNzd29yZCA9ICdQQVNTV09SRCcsXG4gIFN3aXRjaCA9ICdTV0lUQ0gnLFxufVxuXG5pbnRlcmZhY2UgQmFzZUlucHV0IHtcbiAgaWQ6IHN0cmluZztcbiAgdGl0bGU6IHN0cmluZztcbiAgc3VidGl0bGU/OiBSZWFjdE5vZGU7XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICAvKipcbiAgICogaWYgbm90IHByb3ZpZGVkIHRoZW4gdHJlYXRlZCBhcyB0cnVlXG4gICAqL1xuICByZXF1aXJlZD86IGJvb2xlYW47XG4gIGRlZmF1bHRWYWx1ZT86IGFueTtcbiAgZG9jdW1lbnRhdGlvbkxpbms/OiBzdHJpbmc7XG4gIGRvY3VtZW50YXRpb25MaW5rTGFiZWw/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBoaWRlIGlucHV0IGluIHNpZGViYXJzZWN0aW9uXG4gICAqL1xuICBoaWRkZW4/OiBib29sZWFuO1xuICAvKipcbiAgICogY2FuIG5vdCBjaGFuZ2UgdmFsdWUgaWYgcmVhZE9ubHlcbiAgICovXG4gIHJlYWRPbmx5PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbnRlZ3JhdGlvbkNvbm5lY3RJbnB1dCBleHRlbmRzIEJhc2VJbnB1dCB7XG4gIHR5cGU6XG4gICAgfCBTaWRlYmFySW5wdXRUeXBlLlZhbHVlVGV4dFxuICAgIHwgU2lkZWJhcklucHV0VHlwZS5QYXNzd29yZFxuICAgIHwgU2lkZWJhcklucHV0VHlwZS5EeW5hbWljRW51bVxuICAgIHwgU2lkZWJhcklucHV0VHlwZS5Db21ib0lucHV0XG4gICAgfCBTaWRlYmFySW5wdXRUeXBlLkVudW1cbiAgICB8IFNpZGViYXJJbnB1dFR5cGUuU3dpdGNoXG4gICAgfCBTaWRlYmFySW5wdXRUeXBlLlZhbHVlVGV4dEFyZWE7XG4gIGlucHV0VHlwZT86IHN0cmluZztcbiAgcHJlZml4TGFiZWw/OiBzdHJpbmc7XG4gIHN1ZmZpeExhYmVsPzogc3RyaW5nO1xuICBzb3VyY2VUeXBlPzogc3RyaW5nO1xuICBmYWxsYmFja1RleHQ/OiBzdHJpbmc7XG4gIGhpZGRlbkluQ29ubmVjdD86IGJvb2xlYW47XG59XG5cbnR5cGUgRW51bVNlY3Rpb248VCA9IGFueT4gPSB7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGl0ZW1zOiBFbnVtSW5wdXRWYWx1ZTxUPltdO1xufTtcblxudHlwZSBFbnVtSW5wdXRWYWx1ZTxUID0gYW55PiA9IHtcbiAgdmFsdWU6IFQ7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBzdWJ0aXRsZSBwcm9wZXJ0eSBpcyBmb3IgZGlzcGxheWluZyBhIGxpdHRsZSBoZWxwZXIgdGV4dCB0byBleHBsYWluIHRoZSBpdGVtIGluIGRyb3Bkb3duXG4gICAqL1xuICBzdWJ0aXRsZT86IHN0cmluZztcbn07XG5cbmV4cG9ydCBlbnVtIFRva2VuVHlwZSB7XG4gIEFDQ0VTU19UT0tFTiA9ICdBQ0NFU1NfVE9LRU4nLFxuICBSRUZSRVNIX1RPS0VOID0gJ1JFRlJFU0hfVE9LRU4nLFxuICBCT1RfVE9LRU4gPSAnQk9UX1RPS0VOJyxcbiAgS0xBVklZT19BUElfS0VZID0gJ0tMQVZJWU9fQVBJX0tFWScsXG4gIE1BUktFVE9fQ0xJRU5UX0lEID0gJ01BUktFVE9fQ0xJRU5UX0lEJyxcbiAgTUFSS0VUT19DTElFTlRfU0VDUkVUID0gJ01BUktFVE9fQ0xJRU5UX1NFQ1JFVEknLFxuICBNQVJLRVRPX0VORFBPSU5UID0gJ01BUktFVE9fRU5EUE9JTlQnLFxuICBNQVJLRVRPX0lERU5USVRZID0gJ01BUktFVE9fSURFTlRJVFknLFxuICBNT05EQVlfQVBJX1RPS0VOID0gJ01PTkRBWV9BUElfVE9LRU4nLFxuICBPUkFDTEVfQ0xPVURfVVJMID0gJ09SQUNMRV9DTE9VRF9VUkwnLFxuICBPUkFDTEVfUEFTU1dPUkQgPSAnT1JBQ0xFX1BBU1NXT1JEJyxcbiAgT1JBQ0xFX1VTRVJOQU1FID0gJ09SQUNMRV9VU0VSTkFNRScsXG4gIFNBR0VfSU5UQUNDVF9DT01QQU5ZX0lEID0gJ1NBR0VfSU5UQUNDVF9DT01QQU5ZX0lEJyxcbiAgU0FHRV9JTlRBQ0NUX1VTRVJfSUQgPSAnU0FHRV9JTlRBQ0NUX1VTRVJfSUQnLFxuICBTQUdFX0lOVEFDQ1RfVVNFUl9QQVNTV09SRCA9ICdTQUdFX0lOVEFDQ1RfVVNFUl9QQVNTV09SRCcsXG4gIFNBSUxUSFJVX0NPTVBBTllfS0VZID0gJ1NBSUxUSFJVX0NPTVBBTllfS0VZJyxcbiAgU0FJTFRIUlVfQ09NUEFOWV9TRUNSRVQgPSAnU0FJTFRIUlVfQ09NUEFOWV9TRUNSRVQnLFxuICBTRVJWSUNFTk9XX1BBU1NXT1JEID0gJ1NFUlZJQ0VOT1dfUEFTU1dPUkQnLFxuICBTRVJWSUNFTk9XX1NVQkRPTUFJTiA9ICdTRVJWSUNFTk9XX1NVQkRPTUFJTicsXG4gIFNFUlZJQ0VOT1dfVVNFUk5BTUUgPSAnU0VSVklDRU5PV19VU0VSTkFNRScsXG4gIFRBQkxFQVVfUEVSU09OQUxfQUNDRVNTX1RPS0VOX05BTUUgPSAnVEFCTEVBVV9QRVJTT05BTF9BQ0NFU1NfVE9LRU5fTkFNRScsXG4gIFRBQkxFQVVfUEVSU09OQUxfQUNDRVNTX1RPS0VOX1NFQ1JFVCA9ICdUQUJMRUFVX1BFUlNPTkFMX0FDQ0VTU19UT0tFTl9TRUNSRVQnLFxuICBUQUJMRUFVX1NFUlZFUl9OQU1FID0gJ1RBQkxFQVVfU0VSVkVSX05BTUUnLFxuICBUQUJMRUFVX1NJVEVfSUQgPSAnVEFCTEVBVV9TSVRFX0lEJyxcbiAgVFJFTExPX0FQSV9LRVkgPSAnVFJFTExPX0FQSV9LRVknLFxuICBUUkVMTE9fQVBJX1RPS0VOID0gJ1RSRUxMT19BUElfVE9LRU4nLFxuICBXT09DT01NRVJDRV9DT05TVU1FUl9LRVkgPSAnV09PQ09NTUVSQ0VfQ09OU1VNRVJfS0VZJyxcbiAgV09PQ09NTUVSQ0VfQ09OU1VNRVJfU0VDUkVUID0gJ1dPT0NPTU1FUkNFX0NPTlNVTUVSX1NFQ1JFVCcsXG4gIFdPT0NPTU1FUkNFX1NUT1JFX0RPTUFJTiA9ICdXT09DT01NRVJDRV9TVE9SRV9ET01BSU4nLFxuICBXT1JLQUJMRV9BUElfQUNDRVNTX1RPS0VOID0gJ1dPUktBQkxFX0FQSV9BQ0NFU1NfVE9LRU4nLFxuICBXT1JLQUJMRV9BQ0NPVU5UX1NVQkRPTUFJTiA9ICdXT1JLQUJMRV9BQ0NPVU5UX1NVQkRPTUFJTicsXG4gIFpPSE9fQ1JNX0FDQ09VTlRTX1NFUlZFUiA9ICdaT0hPX0NSTV9BQ0NPVU5UU19TRVJWRVInLFxuICBaT0hPX0NSTV9BUElfRE9NQUlOID0gJ1pPSE9fQ1JNX0FQSV9ET01BSU4nLFxufVxuXG5leHBvcnQgdHlwZSBEYXRhU291cmNlID1cbiAgfCBEeW5hbWljRGF0YVNvdXJjZTxhbnk+XG4gIHwgU3RhdGljRW51bURhdGFTb3VyY2VcbiAgfCBGaWVsZE1hcHBlckRhdGFTb3VyY2VcbiAgfCBDb21ib0lucHV0RGF0YVNvdXJjZTtcblxudHlwZSBCYXNpY0RhdGFTb3VyY2UgPSB7XG4gIC8qKlxuICAgKiB0aXRsZSBmb3IgZGF0YSBzb3VyY2VcbiAgICovXG4gIHRpdGxlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIGRlc2NyaXB0aW9uIGZvciBkYXRhIHNvdXJjZVxuICAgKi9cbiAgc3VidGl0bGU/OiBSZWFjdE5vZGU7XG5cbiAgLyoqXG4gICAqIElmIHNwZWNpZmllZCwgaW5zdHJ1Y3Rpb25hbFRleHQgcmVwbGFjZXMgdGhlIGRlZmF1bHQgdGV4dCBleHBsYWluaW5nIHRoZSBpbnB1dCB1bmRlciB0aGUgc2VsZWN0aW9uLFxuICAgKiBlLmcuIFwiTGV0IHlvdXIgdXNlcnMgc2VsZWN0IDxpbnB1dCBuYW1lPiBmcm9tIHRoZWlyIDxpbnRlZ3JhdGlvbiBuYW1lPiBhY2NvdW50LlwiXG4gICAqL1xuICBpbnN0cnVjdGlvbmFsVGV4dD86IFJlYWN0Tm9kZTtcblxuICAvKipcbiAgICogSWYgdHJ1ZSwgdGhpcyBwcm9wZXJ0eSBoaWRlcyB0aGlzIGRhdGEgc291cmNlIGFzIGEgQ29ubmVjdCBmaWVsZCB0eXBlLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgaGlkZUZyb21Db25uZWN0RmllbGRUeXBlcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIElmIHRydWUsIGRhdGFTb3VyY2Ugd2lsbCBiZSBmZXRjaGVkIGluIHBhZ2luYXRpb24gZm9ybWF0XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBzdXBwb3J0UGFnaW5hdGlvbj86IGJvb2xlYW47XG59O1xuXG50eXBlIER5bmFtaWNEYXRhU291cmNlPFRWYWx1ZXMgPSBFbnVtSW5wdXRWYWx1ZVtdPiA9IEJhc2ljRGF0YVNvdXJjZSAmIHtcbiAgdHlwZTogRGF0YVNvdXJjZVR5cGUuRFlOQU1JQztcblxuICAvKipcbiAgICogSWYgcHJvdmlkZWQsIHRoZSByZXNwb25zZSBmcm9tIHRoZSByZWZyZXNoIG1ldGhvZCB3aWxsIGJlIHNhdmVkIGludG8gdGhlIHN0ZXAuXG4gICAqL1xuICBjYWNoZUtleT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhpcyBhcnJheSBpcyB1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyIG9yIG5vdCB0aGUgaW5wdXQncyB2YWx1ZXMgc2hvdWxkIGJlXG4gICAqIHJlZnJlc2hlZC4gU3RyaW5ncyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgS2V5ZWRTb3VyY2UgZGVwZW5kZW5jeSB3aXRoaW5cbiAgICogYG9wdGlvbnMuYWN0aW9uUGFyYW1ldGVyc2AsIGFuZCBhIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYW55IG90aGVyXG4gICAqIGRlcGVuZGVuY3kgd2l0aGluIHRoZSBzdGVwJ3MgcGFyYW1ldGVycy5cbiAgICpcbiAgICogSWYgYHJlZnJlc2hEZXBlbmRlbmNpZXNgIGlzIGFuIGVtcHR5IGFycmF5LCB0aGUgaW5wdXQgd2lsbCByZWZyZXNoIG9uIG1vdW50LlxuICAgKiBJZiBgcmVmcmVzaERlcGVuZGVuY2llc2AgaXMgbm90IHByb3ZpZGVkLCB0aGUgaW5wdXQgd2lsbCBub3QgcmVmcmVzaCB1bmxlc3NcbiAgICogbWFudWFsbHkgaW52b2tlZCAoaS5lLiwgYnkgYSBidXR0b24pLlxuICAgKi9cbiAgcmVmcmVzaERlcGVuZGVuY2llcz86IChzdHJpbmcgfCAoKG9wdGlvbnM6IEFjdGlvblN0ZXBQYXJhbWV0ZXJzKSA9PiBhbnkpKVtdO1xuXG4gIC8qKlxuICAgKiBXaGVuIHRoZSBkYXRhIGNvbWVzIGJhY2sgZnJvbSB0aGUgaW50ZW50IHJlcXVlc3RlZCBieSB0aGUgYHJlZnJlc2hgIG1ldGhvZCxcbiAgICogdGhpcyBpcyB0aGUgbWV0aG9kIHVzZWQgdG8gbWFwIHRoZSBkYXRhIGludG8gdGhlIGlucHV0ICsgY2FjaGVcbiAgICovXG4gIG1hcFJlZnJlc2hUb1ZhbHVlczogKHJlc3BvbnNlOiBhbnkpID0+IFRWYWx1ZXM7XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIGlzIHJlc3BvbnNpYmxlIGZvciBzcGVjaWZ5aW5nIHRoZSBhY3Rpb24sIGludGVudCBhbmQgcGFyYW1ldGVyc1xuICAgKiBmb3IgbG9hZGluZyB0aGUgZGF0YSBpbnRvIHRoZSBpbnB1dFxuICAgKi9cbiAgZ2V0UmVmcmVzaEFjdGlvblBhcmFtZXRlcnM6IChcbiAgICBvcHRpb25zOiBBY3Rpb25TdGVwUGFyYW1ldGVycyxcbiAgICBpbnB1dHM6IFNpZGViYXJJbnB1dFtdLFxuICAgIGFjdGl2ZUlucHV0OiBTaWRlYmFySW5wdXQsXG4gICkgPT4gQWN0aW9uU3RlcFBhcmFtZXRlcnM7XG5cbiAgLyoqXG4gICAqIGNhbGxlZCBhZnRlciB0aGUgaW5wdXQgcmVmcmVzaGVzIHcvIHRoZSB2YWx1ZXMgbWFwcGVkIGZyb20gYG1hcFJlZnJlc2hUb1ZhbHVlc2BcbiAgICovXG4gIG9uUmVmcmVzaD86ICh2YWx1ZTogYW55KSA9PiBBY3Rpb25SZXNwb25zZTtcbn07XG5cbnR5cGUgQWN0aW9uUmVzcG9uc2UgPSBBbGVydEFjdGlvblJlc3BvbnNlIHwgRGlzcGF0Y2hBY3Rpb25SZXNwb25zZTtcbnR5cGUgQWxlcnRBY3Rpb25SZXNwb25zZSA9IHtcbiAgdHlwZTogQWN0aW9uUmVzcG9uc2VUeXBlLkFMRVJUO1xuICBzdGF0dXM6IEFjdGlvblJlc3BvbnNlU3RhdHVzO1xuICBtZXNzYWdlOiBzdHJpbmc7XG59O1xuXG50eXBlIERpc3BhdGNoQWN0aW9uUmVzcG9uc2UgPSB7XG4gIHR5cGU6IEFjdGlvblJlc3BvbnNlVHlwZS5ESVNQQVRDSDtcbiAgc3RhdHVzOiBBY3Rpb25SZXNwb25zZVN0YXR1cztcbiAgaWQ6IHN0cmluZztcbiAgc291cmNlOiBTb3VyY2U7XG59O1xuZW51bSBBY3Rpb25SZXNwb25zZVN0YXR1cyB7XG4gIElORk8gPSAnSU5GTycsXG4gIEVSUk9SID0gJ0VSUk9SJyxcbiAgU1VDQ0VTUyA9ICdTVUNDRVNTJyxcbn1cblxuZW51bSBBY3Rpb25SZXNwb25zZVR5cGUge1xuICBOT05FID0gJ05PTkUnLFxuICBSRV9BVVRIRU5USUNBVEUgPSAnUkVfQVVUSEVOVElDQVRFJyxcbiAgQUxFUlQgPSAnQUxFUlQnLFxuICBESVNQQVRDSCA9ICdESVNQQVRDSCcsXG59XG5cbnR5cGUgU3RhdGljRW51bURhdGFTb3VyY2UgPSBCYXNpY0RhdGFTb3VyY2UgJiB7XG4gIHR5cGU6IERhdGFTb3VyY2VUeXBlLlNUQVRJQ19FTlVNO1xuICAvKipcbiAgICogaWQgZm9yIGRhdGEgc291cmNlXG4gICAqL1xuICBpZDogc3RyaW5nO1xuICB2YWx1ZXM6IEVudW1JbnB1dFZhbHVlW10gfCBFbnVtU2VjdGlvbltdO1xufTtcblxuLyoqXG4gKiBBIEZpZWxkTWFwcGVyRGF0YVNvdXJjZSByZWZlcnMgdG8gYSBzb3VyY2UgdGhhdCBpcyBhYmxlIHRvIGRyaXZlIGFuIGlucHV0IHRoYXQgaXMgcmVzcG9uc2libGVcbiAqIGZvciBtYXBwaW5nIHJlbW90ZS9pbnRlZ3JhdGlvbiBmaWVsZHMgdG8gbG9jYWwvcHJvamVjdCBmaWVsZHMuXG4gKi9cbnR5cGUgRmllbGRNYXBwZXJEYXRhU291cmNlID0gQmFzaWNEYXRhU291cmNlICYge1xuICBpZDogc3RyaW5nO1xuICB0eXBlOiBEYXRhU291cmNlVHlwZS5GSUVMRF9NQVBQRVI7XG4gIHJlY29yZFNvdXJjZTogRHluYW1pY0RhdGFTb3VyY2U8KEVudW1TZWN0aW9uIHwgRW51bUlucHV0VmFsdWUpW10+O1xuICBmaWVsZFNvdXJjZTogRHluYW1pY0RhdGFTb3VyY2U8KEVudW1TZWN0aW9uIHwgRW51bUlucHV0VmFsdWUpW10+O1xufTtcblxuLyoqXG4gKiBBIENvbWJvSW5wdXREYXRhU291cmNlIHJlZmVycyB0byBhIHNvdXJjZSB0aGF0IGlzIGFibGUgdG8gZHJpdmUgYW4gaW5wdXQgdGhhdCBpcyByZXNwb25zaWJsZVxuICogZm9yIGNvbWJpbmluZyB0aGUgcmVtb3RlL2ludGVncmF0aW9uIGZpZWxkcyB0byBsb2NhbC9wcm9qZWN0IGZpZWxkcy5cbiAqL1xudHlwZSBDb21ib0lucHV0RGF0YVNvdXJjZSA9IEJhc2ljRGF0YVNvdXJjZSAmIHtcbiAgaWQ6IHN0cmluZztcbiAgdHlwZTogRGF0YVNvdXJjZVR5cGUuQ09NQk9fSU5QVVQ7XG4gIG1haW5JbnB1dFNvdXJjZTogRHluYW1pY0RhdGFTb3VyY2U8KEVudW1TZWN0aW9uIHwgRW51bUlucHV0VmFsdWUpW10+O1xuICBkZXBlbmRlbnRJbnB1dFNvdXJjZTogRHluYW1pY0RhdGFTb3VyY2U8KEVudW1TZWN0aW9uIHwgRW51bUlucHV0VmFsdWUpW10+O1xuICBmaWVsZFNvdXJjZT86IER5bmFtaWNEYXRhU291cmNlPChFbnVtU2VjdGlvbiB8IEVudW1JbnB1dFZhbHVlKVtdPjtcbn07XG5cbnR5cGUgQmFzZUFjdGlvblN0ZXBQYXJhbWV0ZXJzID0ge1xuICBhY3Rpb25UeXBlOiBzdHJpbmc7XG4gIGNyZWRlbnRpYWxzOiBzdHJpbmdbXTtcbiAgcmV0cnlPbkZhaWx1cmU/OiBib29sZWFuO1xuICBpZ25vcmVGYWlsdXJlPzogYm9vbGVhbjtcbn07XG5cbmVudW0gRGF0YVNvdXJjZVR5cGUge1xuICBEWU5BTUlDID0gJ0RZTkFNSUNfREFUQV9TT1VSQ0UnLFxuICBTVEFUSUNfRU5VTSA9ICdTVEFUSUNfRU5VTV9EQVRBX1NPVVJDRScsXG4gIEZJRUxEX01BUFBFUiA9ICdGSUVMRF9NQVBQRVJfREFUQV9TT1VSQ0UnLFxuICBDT01CT19JTlBVVCA9ICdDT01CT19JTlBVVF9EQVRBX1NPVVJDRScsXG59XG5cbnR5cGUgQWN0aW9uU3RlcFBhcmFtZXRlcnMgPSBCYXNlQWN0aW9uU3RlcFBhcmFtZXRlcnMgJiB7XG4gIGludGVudDogc3RyaW5nO1xuICBhY3Rpb25QYXJhbWV0ZXJzOiBLZXllZFNvdXJjZTxEYXRhVHlwZS5BTlk+W107XG59O1xuXG4vKipcbiAqIEl0IHdpbGwgb3ZlcnJpZGUgdGhlIGFjdGlvbiBhbGlhcyBmb3IgbWFraW5nIGZpbGVzIG5hbWUgbW9yZSBjbGVhbmVyXG4gKi9cbmV4cG9ydCBjb25zdCBvdmVycmlkZUFjdGlvbkFsaWFzOiBQYXJ0aWFsPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+ID0ge1xuICBtb25kYXk6ICdtb25kYXknLFxufTtcblxuZXhwb3J0IHR5cGUgQWN0aW9uQ29uZmlnRFRPID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGJyYW5kQ29sb3I6IHN0cmluZztcbiAgcHJvdmlkZXI6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgYXV0aFNjaGVtZTogQXV0aGVudGljYXRpb25TY2hlbWUgfCB1bmRlZmluZWQ7XG4gIGVuZFVzZXJTdXBwbGllZFZhbHVlczogSW50ZWdyYXRpb25Db25uZWN0SW5wdXRbXSB8IHVuZGVmaW5lZDtcbiAgaXNBY2NvdW50VHlwZVN1cHBvcnRlZDogYm9vbGVhbjtcbn07IiwiaW1wb3J0IHsgQmlsbGluZ1BsYW4sIENvbm5lY3RBZGRPbiwgQ29ubmVjdE5vblRyaWFsQmlsbGluZ1BsYW4gfSBmcm9tICcuL3N0cmlwZSc7XG5cbmV4cG9ydCBjb25zdCBDT05ORUNUX1BMQU5fRkVBVFVSRV9NQVA6IFJlY29yZDxDb25uZWN0Tm9uVHJpYWxCaWxsaW5nUGxhbiwgQ29ubmVjdEFkZE9uW10+ID0ge1xuICBbQmlsbGluZ1BsYW4uQ29ubmVjdEJhc2ljXTogW10sXG4gIFtCaWxsaW5nUGxhbi5Db25uZWN0UHJvXTogW1xuICAgIENvbm5lY3RBZGRPbi5DdXN0b21JbnRlZ3JhdGlvbkJ1aWxkZXIsXG4gICAgQ29ubmVjdEFkZE9uLkhlYWRsZXNzQ29ubmVjdFBvcnRhbCxcbiAgICBDb25uZWN0QWRkT24uTW9uaXRvcmluZyxcbiAgICBDb25uZWN0QWRkT24uVXNlck1ldGFkYXRhLFxuICAgIENvbm5lY3RBZGRPbi5XaGl0ZUxhYmVsaW5nLFxuICBdLFxuICBbQmlsbGluZ1BsYW4uQ29ubmVjdEVudGVycHJpc2VdOiBbXG4gICAgQ29ubmVjdEFkZE9uLkN1c3RvbUludGVncmF0aW9uQnVpbGRlcixcbiAgICBDb25uZWN0QWRkT24uRHluYW1pY0ZpZWxkTWFwcGVyLFxuICAgIENvbm5lY3RBZGRPbi5IZWFkbGVzc0Nvbm5lY3RQb3J0YWwsXG4gICAgQ29ubmVjdEFkZE9uLlRhc2tIaXN0b3J5QVBJLFxuICAgIENvbm5lY3RBZGRPbi5Nb25pdG9yaW5nLFxuICAgIENvbm5lY3RBZGRPbi5Sb2xlQmFzZWRBY2Nlc3NDb250cm9sLFxuICAgIENvbm5lY3RBZGRPbi5Vc2VyTWV0YWRhdGEsXG4gICAgQ29ubmVjdEFkZE9uLldoaXRlTGFiZWxpbmcsXG4gICAgQ29ubmVjdEFkZE9uLldvcmtmbG93UGVybWlzc2lvbixcbiAgXSxcbn07XG4iLCJpbXBvcnQge1xuICBDb25uZWN0Q3JlZGVudGlhbFByb3ZpZGVyRGF0YSxcbiAgQ3JlZGVudGlhbFN0YXR1cyxcbn0gZnJvbSAnLi4vZW50aXRpZXMvY29ubmVjdENyZWRlbnRpYWwuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBlcnNvbmFNZXRhIH0gZnJvbSAnLi4vZW50aXRpZXMvcGVyc29uYS5pbnRlcmZhY2UnO1xuXG5pbXBvcnQgeyBEYXRhU291cmNlLCBJbnRlZ3JhdGlvbkNvbm5lY3RJbnB1dCwgU2lkZWJhcklucHV0VHlwZSB9IGZyb20gJy4vYWN0aW9uJztcbmltcG9ydCB7IE9yQ29uZGl0aW9ucyB9IGZyb20gJy4vcmVzb2x2ZXJzJztcblxuZXhwb3J0IGludGVyZmFjZSBDb25uZWN0Q3JlZGVudGlhbENvbmZpZyB7XG4gIGNvbmZpZ3VyZWRXb3JrZmxvd3M/OiBJbnRlZ3JhdGlvbldvcmtmbG93U3RhdGVNYXA7XG4gIHNoYXJlZFNldHRpbmdzPzogeyBbaW5wdXRJZDogc3RyaW5nXTogQ29ubmVjdElucHV0VmFsdWUgfCB1bmRlZmluZWQgfTtcbn1cblxudHlwZSBDb25uZWN0SW5wdXRWYWx1ZSA9XG4gIHwgc3RyaW5nXG4gIHwgbnVtYmVyXG4gIHwgYm9vbGVhblxuICB8IEZpZWxkTWFwcGluZ1ZhbHVlXG4gIHwgQ29tYm9JbnB1dFZhbHVlXG4gIHwgdW5kZWZpbmVkO1xuXG50eXBlIEZpZWxkTWFwcGluZ1ZhbHVlID0ge1xuICBvYmplY3RNYXBwaW5nPzogc3RyaW5nO1xuICBmaWVsZE1hcHBpbmdzPzoge1xuICAgIFtsYWJlbDogc3RyaW5nXTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICB9O1xuICBkeW5hbWljTWFwcGluZ3M/OiB7XG4gICAgW21hcHBpbmdLZXk6IHN0cmluZ106IHtcbiAgICAgIGFwcGxpY2F0aW9uRmllbGQ/OiBzdHJpbmc7XG4gICAgICBpbnRlZ3JhdGlvbkZpZWxkPzogc3RyaW5nO1xuICAgIH07XG4gIH07XG4gIHVzZXJDcmVhdGVkRmllbGRzPzogc3RyaW5nW107XG4gIC8qKlxuICAgKiBUeXBlIG9mIGZpZWxkIG1hcHBlciB1c2VkIGZvciBjcmVhdGluZyBmaWVsZCBtYXBwaW5nc1xuICAgKiBAZGVmYXVsdCBTVEFUSUNcbiAgICovXG4gIG1hcHBpbmdUeXBlPzogJ1NUQVRJQycgfCAnRFlOQU1JQyc7XG59O1xuXG50eXBlIENvbWJvSW5wdXRWYWx1ZSA9IHtcbiAgbWFpbklucHV0Pzogc3RyaW5nO1xuICBkZXBlbmRlbnRJbnB1dD86IHN0cmluZztcbiAgZmllbGRNYXBwaW5ncz86IHtcbiAgICBbbGFiZWw6IHN0cmluZ106IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgfTtcbn07XG5cbnR5cGUgSW50ZWdyYXRpb25Xb3JrZmxvd1N0YXRlTWFwID0ge1xuICBbd29ya2Zsb3dJZDogc3RyaW5nXTogSW50ZWdyYXRpb25Xb3JrZmxvd1N0YXRlIHwgdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IHR5cGUgSW50ZWdyYXRpb25Xb3JrZmxvd1N0YXRlID0ge1xuICBlbmFibGVkOiBib29sZWFuO1xuICBzZXR0aW5nczogeyBbaW5wdXRJZDogc3RyaW5nXTogQ29ubmVjdElucHV0VmFsdWUgfCB1bmRlZmluZWQgfTtcbiAgLyoqXG4gICAqIHRpbWVzdGFtcCB2YWx1ZSBmb3IgbGFzdCBFeGVjdXRpb24gRGF0ZSBmb3Igd29ya2Zsb3cgLiBXaWxsIGJlIHN5bmNlZCB1cCBieSBjaHJvbm9zIHNlcnZpY2UuXG4gICAqL1xuICBsYXN0RXhlY3V0aW9uRGF0ZT86IERhdGU7XG4gIC8qKlxuICAgKiAgbGFzdCBleGVjdXRpb24gc3RhdHVzIGZvciB3b3JrZmxvdyAuIFdpbGwgYmUgc3luY2VkIHVwIGJ5IGNocm9ub3Mgc2VydmljZS5cbiAgICovXG4gIGxhc3RFeGVjdXRpb25TdGF0dXM/OiBFeGVjdXRpb25TdGF0dXM7XG59O1xuXG5lbnVtIEV4ZWN1dGlvblN0YXR1cyB7XG4gIE5PVF9TVEFSVEVEID0gJ05PVF9TVEFSVEVEJyxcbiAgREVMQVlFRCA9ICdERUxBWUVEJyxcbiAgUEFVU0VEID0gJ1BBVVNFRCcsXG4gIEVYRUNVVElORyA9ICdFWEVDVVRJTkcnLFxuICBGQUlMRUQgPSAnRkFJTEVEJyxcbiAgU1VDQ0VFREVEID0gJ1NVQ0NFRURFRCcsXG4gIFdBSVRJTkcgPSAnV0FJVElORycsXG59XG5cbmV4cG9ydCB0eXBlIE1vZGFsQ29uZmlnID0ge1xuICAvKipcbiAgICogQSBwcmltYXJ5IGNvbG9yIGZvciB0aGUgYmFja2dyb3VuZCBjb2xvciBvZiB0aGUgQ29ubmVjdCBtb2RhbC5cbiAgICovXG4gIGFjY2VudENvbG9yPzogc3RyaW5nO1xuICAvKipcbiAgICogQSBib29sZWFuIHRvIHNob3cgLyBoaWRlIHBhcmFnb24gbGluayBpbiBmb290ZXIgc2VjdGlvbi4gKGRlZmF1bHQgdHJ1ZSlcbiAgICovXG4gIHBhcmFnb25MaW5rPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEEgZGVzY3JpcHRpb24gZm9yIHRoZSBpbnRlZ3JhdGlvbidzIHB1cnBvc2UuIEFwcGVhcnMganVzdCBiZWxvdyB0aGUgaW50ZWdyYXRpb24gbmFtZS5cbiAgICovXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAvKipcbiAgICogQSBsb25nLWZvcm0gZGVzY3JpcHRpb24gZm9yIHRoZSBpbnRlZ3JhdGlvbidzIHB1cnBvc2UuIEFwcGVhcnMgaW4gdGhlIE92ZXJ2aWV3IHRhYiBvZiB0aGVcbiAgICogQ29ubmVjdCBtb2RhbC5cbiAgICovXG4gIG92ZXJ2aWV3Pzogc3RyaW5nO1xuICAvKipcbiAgICogSW5wdXRzIGFuZCBtZXRhZGF0YSBhYm91dCB0aGlzIGludGVncmF0aW9uJ3Mgd29ya2Zsb3dzLlxuICAgKi9cbiAgd29ya2Zsb3dNZXRhPzogSW50ZWdyYXRpb25Xb3JrZmxvd01ldGFNYXA7XG4gIC8qKlxuICAgKiBJbnB1dHMgbWV0YWRhdGEgZm9yIHNoYXJlZCB3b3JrZmxvdyBzZXR0aW5nc1xuICAgKi9cbiAgc2hhcmVkTWV0YT86IEludGVncmF0aW9uU2hhcmVkTWV0YTtcbn07XG50eXBlIEludGVncmF0aW9uU2hhcmVkTWV0YSA9IHtcbiAgLyoqXG4gICAqIElucHV0cyB0byBpbnRha2UgZ2xvYmFsL3NoYXJlZCB1c2VyIHNldHRpbmdzLCBjb25maWd1cmVkIGluIHRoZSBQb3J0YWwgRWRpdG9yLlxuICAgKi9cbiAgaW5wdXRzPzogU2VyaWFsaXplZENvbm5lY3RJbnB1dFtdO1xufTtcblxuY29uc3QgU3VwcG9ydGVkQ29ubmVjdElucHV0VHlwZXMgPSBbXG4gIFNpZGViYXJJbnB1dFR5cGUuVmFsdWVUZXh0LFxuICBTaWRlYmFySW5wdXRUeXBlLkR5bmFtaWNFbnVtLFxuICBTaWRlYmFySW5wdXRUeXBlLkVudW0sXG4gIFNpZGViYXJJbnB1dFR5cGUuTnVtYmVyLFxuICBTaWRlYmFySW5wdXRUeXBlLkVtYWlsLFxuICBTaWRlYmFySW5wdXRUeXBlLlVSTCxcbiAgU2lkZWJhcklucHV0VHlwZS5GaWVsZE1hcHBlcixcbiAgU2lkZWJhcklucHV0VHlwZS5Cb29sZWFuSW5wdXQsXG4gIFNpZGViYXJJbnB1dFR5cGUuQ29tYm9JbnB1dCxcbiAgU2lkZWJhcklucHV0VHlwZS5QYXNzd29yZCxcbiAgU2lkZWJhcklucHV0VHlwZS5Td2l0Y2gsXG4gIFNpZGViYXJJbnB1dFR5cGUuVmFsdWVUZXh0QXJlYSxcbl0gYXMgY29uc3Q7XG5cbnR5cGUgU3VwcG9ydGVkQ29ubmVjdElucHV0VHlwZSA9ICh0eXBlb2YgU3VwcG9ydGVkQ29ubmVjdElucHV0VHlwZXMpW251bWJlcl07XG5cbmV4cG9ydCB0eXBlIFNpZGViYXJJbnB1dCA9IEludGVncmF0aW9uQ29ubmVjdElucHV0O1xuXG50eXBlIFN1cHBvcnRlZENvbm5lY3RJbnB1dDxUIGV4dGVuZHMgU2lkZWJhcklucHV0ID0gU2lkZWJhcklucHV0PiA9IEV4dHJhY3Q8XG4gIFQsXG4gIHtcbiAgICB0eXBlOiBTdXBwb3J0ZWRDb25uZWN0SW5wdXRUeXBlO1xuICB9XG4+O1xuXG4vKipcbiAqIEEgU2VyaWFsaXplZENvbm5lY3RJbnB1dCBpcyBvbmUgdGhhdCBleGNsdWRlcyB0aGUgcHJvcGVydGllcyBvZiBhIER5bmFtaWNEYXRhU291cmNlLCB3aGljaCBhcmVcbiAqIGxvYWRlZCBpbiBhdCBydW50aW1lIHJhdGhlciB0aGFuIHNhdmVkIGluIHRoZSBEQi5cbiAqL1xudHlwZSBTZXJpYWxpemVkQ29ubmVjdElucHV0PFxuICBUSW5wdXRUeXBlIGV4dGVuZHMgU3VwcG9ydGVkQ29ubmVjdElucHV0VHlwZSA9IFN1cHBvcnRlZENvbm5lY3RJbnB1dFR5cGUsXG4+ID0ge1xuICBbVCBpbiBTdXBwb3J0ZWRDb25uZWN0SW5wdXRUeXBlXTogRXh0cmFjdDxcbiAgICBTdXBwb3J0ZWRDb25uZWN0SW5wdXQsXG4gICAge1xuICAgICAgdHlwZTogVDtcbiAgICB9XG4gID4gZXh0ZW5kcyB7IHNvdXJjZTogRGF0YVNvdXJjZSB9IHwgeyBnZXRWYWx1ZXM6IEZ1bmN0aW9uIH1cbiAgICA/IE9taXQ8XG4gICAgICAgIEV4dHJhY3Q8XG4gICAgICAgICAgU3VwcG9ydGVkQ29ubmVjdElucHV0LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFQ7XG4gICAgICAgICAgfVxuICAgICAgICA+LFxuICAgICAgICAnc291cmNlJyB8ICdnZXRWYWx1ZXMnXG4gICAgICA+ICYge1xuICAgICAgICAvKipcbiAgICAgICAgICogSWYgYSBDb25uZWN0IGlucHV0IGlzIGR5bmFtaWMgYW5kIHVzZXMgYSBEeW5hbWljRGF0YVNvdXJjZSwgYHNvdXJjZVR5cGVgIHdpbGwgbWF0Y2ggdGhlXG4gICAgICAgICAqIGBjYWNoZUtleWAgcHJvcGVydHkgb2YgdGhlIHNvdXJjZSBzcGVjaWZpZWQgaW4gdGhlIGFjdGlvbidzIHNvdXJjZXMgbW9kdWxlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBJZiBpdCB1c2VzIGEgRmllbGRNYXBwZXJEYXRhU291cmNlLCBgc291cmNlVHlwZWAgd2lsbCBtYXRjaCB0aGUgYGlkYCBwcm9wZXJ0eSBvZiB0aGUgc291cmNlLlxuICAgICAgICAgKi9cbiAgICAgICAgc291cmNlVHlwZT86IHN0cmluZztcbiAgICAgICAgLy8gdGhpcyB3aWxsIHNob3cgZXJyb3IgbWVzc2FnZSBmb3IgcG9zdCBvYXV0aCBpbnB1dFxuICAgICAgICBmYWxsYmFja1RleHQ/OiBzdHJpbmc7XG4gICAgICB9XG4gICAgOiBFeHRyYWN0PFxuICAgICAgICBTdXBwb3J0ZWRDb25uZWN0SW5wdXQsXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBUO1xuICAgICAgICB9XG4gICAgICA+O1xufVtUSW5wdXRUeXBlXSAmIHsgdG9vbHRpcD86IHN0cmluZyB9O1xuXG50eXBlIEludGVncmF0aW9uV29ya2Zsb3dNZXRhTWFwID0ge1xuICBbaWQ6IHN0cmluZ106IEludGVncmF0aW9uV29ya2Zsb3dNZXRhO1xufTtcbnR5cGUgSW50ZWdyYXRpb25Xb3JrZmxvd01ldGEgPSB7XG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIFdvcmtmbG93RW50aXR5LlxuICAgKi9cbiAgaWQ6IHN0cmluZztcbiAgLyoqXG4gICAqIEEgbG9uZ2VyLWZvcm0gZGVzY3JpcHRpb24gZm9yIHRoZSBXb3JrZmxvdydzIGZ1bmN0aW9uYWxpdHkuIEFjdHMgYXMgYSBcInN1YnRpdGxlXCIgdG8gdGhlXG4gICAqIFdvcmtmbG93RW50aXR5J3MgYGRlc2NyaXB0aW9uYCBwcm9wZXJ0eS5cbiAgICovXG4gIGluZm9UZXh0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgd2hldGhlciBvciBub3QgdG8gZW5hYmxlIHdvcmtmbG93IGZvciBjb25uZWN0ZWQgdXNlclxuICAgKiAgQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRlZmF1bHRFbmFibGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCB0aGUgd29ya2Zsb3cgZGlzcGxheXMgaW4gdGhlIENvbm5lY3QgUG9ydGFsLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgaGlkZGVuPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEFuIGluZGV4IHRvIHRyYWNrIHRoZSBwb3NpdGlvbmFsIG9yZGVyIG9mIGEgd29ya2Zsb3cgaW4gdGhlIGxpc3Qgb2YgZGlzcGxheWVkIHdvcmtmbG93cy5cbiAgICogSWYgYG9yZGVyYCBpcyB1bmRlZmluZWQsIHRoZSB3b3JrZmxvdyB3aWxsIGJlIHNvcnRlZCBieSBpdHMgYGNyZWF0ZWRBdGAgcHJvcGVydHkgKGFmdGVyIHRob3NlXG4gICAqIHRoYXQgYXJlIHNvcnRlZCBtYW51YWxseSBieSBgb3JkZXJgLilcbiAgICovXG4gIG9yZGVyPzogbnVtYmVyO1xuICAvKipcbiAgICogSW5wdXRzIHRvIGludGFrZSB3b3JrZmxvdy1zcGVjaWZpYyBzZXR0aW5ncywgY29uZmlndXJlZCBpbiB0aGUgUG9ydGFsIEVkaXRvci5cbiAgICovXG4gIGlucHV0czogU2VyaWFsaXplZENvbm5lY3RJbnB1dFtdO1xuXG4gIC8qKlxuICAgKiBDb25kaXRpb25zIHRvIGV2YWx1YXRlIHBlcm1pc3Npb24gZm9yIGVuZFVzZXIgYmFzZWQgb24gcGVyc29uYSBtZXRhZGF0YS5cbiAgICovXG4gIHBlcm1pc3Npb25zPzogT3JDb25kaXRpb25zO1xufTtcblxuLy8gZHluYW1pYyBNYXBwaW5nc1xuZXhwb3J0IHR5cGUgRHluYW1pY01hcHBpbmdGaWVsZCA9IHtcbiAgbGFiZWw6IHN0cmluZztcbiAgdmFsdWU6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIER5bmFtaWNNYXBwaW5nT3B0aW9ucyA9IHtcbiAgZmllbGRzOiBEeW5hbWljTWFwcGluZ0ZpZWxkW107XG4gIHVzZXJDYW5SZW1vdmVNYXBwaW5ncz86IGJvb2xlYW47XG4gIHVzZXJDYW5DcmVhdGVGaWVsZHM/OiBib29sZWFuO1xuICBkZWZhdWx0RmllbGRzPzogc3RyaW5nW107XG59O1xuXG5leHBvcnQgdHlwZSBBdXRoZW50aWNhdGVkQ29ubmVjdFVzZXIgPSB7XG4gIGF1dGhlbnRpY2F0ZWQ6IHRydWU7XG4gIHRva2VuOiBzdHJpbmc7XG4gIHVzZXJJZDogc3RyaW5nO1xuICBpbnRlZ3JhdGlvbnM6IFNES0ludGVncmF0aW9uU3RhdGU7XG4gIG1ldGE6IFBlcnNvbmFNZXRhO1xufTtcblxuLyoqXG4gKiBUaGUgY29udGVudHMgb2YgdGhlIGBpbnRlZ3JhdGlvbnNgIGZpZWxkIGZvciBhbiBhdXRoZW50aWNhdGVkIENvbm5lY3RVc2VyLlxuICpcbiAqIFRoZSBmaWVsZHMgZnJvbSBgQ29ubmVjdENyZWRlbnRpYWxDb25maWdgIGFyZSBzdG9yZWQ7IGFsbCBvdGhlciBmaWVsZHMgYXJlIGNvbXB1dGVkIGZyb20gb3RoZXJcbiAqIGF2YWlsYWJsZSBlbnRpdGllcy5cbiAqL1xudHlwZSBTREtJbnRlZ3JhdGlvblN0YXRlID0gUGFydGlhbDxcbiAgUmVjb3JkPFxuICAgIHN0cmluZyxcbiAgICB7XG4gICAgICBlbmFibGVkOiBib29sZWFuO1xuICAgICAgY3JlZGVudGlhbElkPzogc3RyaW5nO1xuICAgICAgY3JlZGVudGlhbFN0YXR1cz86IENyZWRlbnRpYWxTdGF0dXM7XG4gICAgICBwcm92aWRlcklkPzogc3RyaW5nO1xuICAgICAgcHJvdmlkZXJEYXRhPzogQ29ubmVjdENyZWRlbnRpYWxQcm92aWRlckRhdGE7XG4gICAgfSAmIENvbm5lY3RDcmVkZW50aWFsQ29uZmlnXG4gID5cbj47XG5cbmV4cG9ydCB0eXBlIElDb25uZWN0VXNlciA9IE9taXQ8QXV0aGVudGljYXRlZENvbm5lY3RVc2VyLCAndG9rZW4nPjtcbmV4cG9ydCBjb25zdCBJTkZFUl9DT05URU5UX1RZUEVfRlJPTV9DT05ORUNUX09QVElPTlMgPSAnYXV0byc7XG4iLCJpbXBvcnQgeyBJUHVibGlzaGVkQ3VzdG9tSW50ZWdyYXRpb24gfSBmcm9tICcuLi9lbnRpdGllcy9jdXN0b21JbnRlZ3JhdGlvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSUNvbm5lY3RJbnRlZ3JhdGlvbldpdGhDcmVkZW50aWFsSW5mbyB9IGZyb20gJy4uL2VudGl0aWVzL2ludGVncmF0aW9uLmludGVyZmFjZSc7XG5cbmltcG9ydCB7IE1vZGFsQ29uZmlnIH0gZnJvbSAnLi9jb25uZWN0JztcbmltcG9ydCB7IEluc3RhbGxPcHRpb25zLCBNb2RhbFZpZXcgfSBmcm9tICcuL3Nkayc7XG5cbmV4cG9ydCB0eXBlIFByb3BzID0ge1xuICBpbnRlZ3JhdGlvbjogSUNvbm5lY3RJbnRlZ3JhdGlvbldpdGhDcmVkZW50aWFsSW5mbyB8IG51bGw7XG4gIGN1c3RvbUludGVncmF0aW9uPzogSVB1Ymxpc2hlZEN1c3RvbUludGVncmF0aW9uO1xuICBjb25maWc/OiBNb2RhbENvbmZpZztcbiAgY29udGVudFN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcztcbiAgb3ZlcmxheVN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcztcbiAgcG9wdXBQcm9wcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGhpZGVDcm9zcz86IGJvb2xlYW47XG4gIHRhYlZpZXc/OiBNb2RhbFZpZXc7XG4gIGlzUHJldmlld01vZGU/OiBib29sZWFuO1xuICBvbkJlZm9yZUVuYWJsZUludGVncmF0aW9uPzogKCkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD47XG4gIG9uQ2xvc2U/OiAoKSA9PiB2b2lkO1xuICBvbk9wZW4/OiAoKSA9PiB2b2lkO1xuICBvblRhYlZpZXdDaGFuZ2U/OiAodmlldzogTW9kYWxWaWV3KSA9PiB2b2lkO1xuICAvKipcbiAgICogdGhpcyBmbGFnIGlzIGZvciBjb250cm9sbGluZyB0aGUgZW5hYmxpbmcgYmVoYXZpb3IgZnJvbSBvdXRzaWRlIHRoaXMgY29tcG9uZW50LlxuICAgKiBJdCBpcyBjdXJyZW50bHkgdXNlZCBpbiBCWU8gdG8gc2hvdyBpbnB1dCBzZXR0aW5ncyB3aGlsZSBhZGRpbmcgdGhlbSBsaXZlXG4gICAqL1xuICBwcmV2aWV3U2V0dGluZ3M/OiB7XG4gICAgaXNFbmFibGluZzogYm9vbGVhbjtcbiAgfTtcbiAgYXBpSW5zdGFsbGF0aW9uT3B0aW9ucz86IEluc3RhbGxPcHRpb25zO1xufTtcbiIsImV4cG9ydCBlbnVtIE5PREVfRU5WIHtcbiAgUFJPRFVDVElPTiA9ICdwcm9kdWN0aW9uJyxcbiAgREVWRUxPUE1FTlQgPSAnZGV2ZWxvcG1lbnQnLFxuICBURVNUID0gJ3Rlc3QnLFxufVxuXG5leHBvcnQgZW51bSBQTEFURk9STV9FTlYge1xuICBQUk9EVUNUSU9OID0gJ3Byb2R1Y3Rpb24nLFxuICBQUk9EVUNUSU9OX01JUlJPUl8xID0gJ3AtbTEnLFxuICBTVEFHSU5HID0gJ3N0YWdpbmcnLFxuICBTVEFHSU5HX01JUlJPUl8xID0gJ3MtbTEnLFxuICBERVZFTE9QTUVOVCA9ICdkZXYnLFxuICBURVNUID0gJ3Rlc3QnLFxuICBTQU5EQk9YID0gJ3NhbmRib3gnLFxuICBSRUxFQVNFID0gJ3JlbGVhc2UnLFxuICBFTlRFUlBSSVNFID0gJ2VudGVycHJpc2UnLFxufVxuIiwiZXhwb3J0IHR5cGUgRmFub3V0U3RhY2tFbnRyeSA9IHtcbiAgc3RlcElkOiBzdHJpbmc7XG4gIGluc3RhbmNlSWQ6IHN0cmluZztcbiAgaW5kZXg6IG51bWJlcjtcbn07XG4iLCJleHBvcnQgKiBmcm9tICcuL2FjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL2JpbGxpbmcnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25uZWN0JztcbmV4cG9ydCAqIGZyb20gJy4vY29ubmVjdE1vZGFsJztcbmV4cG9ydCAqIGZyb20gJy4vZW52aXJvbm1lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9leGVjdXRpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9vYXV0aCc7XG5leHBvcnQgKiBmcm9tICcuL3Jlc29sdmVycyc7XG5leHBvcnQgKiBmcm9tICcuL3Nkayc7XG5leHBvcnQgKiBmcm9tICcuL3N0cmlwZSc7XG4iLCJpbXBvcnQgeyBBdXRoZW50aWNhdGlvblNjaGVtZSB9IGZyb20gJy4uL2VudGl0aWVzL2NyZWRlbnRpYWwuaW50ZXJmYWNlJztcblxuaW1wb3J0IHsgSW50ZWdyYXRpb25Db25uZWN0SW5wdXQsIFNpZGViYXJJbnB1dFR5cGUgfSBmcm9tICcuL2FjdGlvbic7XG5cbmV4cG9ydCBjb25zdCBhdXRoU2NoZW1hUmVxdWlyZWRJbnB1dHM6IFJlY29yZDxBdXRoZW50aWNhdGlvblNjaGVtZSwgSW50ZWdyYXRpb25Db25uZWN0SW5wdXRbXT4gPSB7XG4gIFtBdXRoZW50aWNhdGlvblNjaGVtZS5CQVNJQ106IFtdLFxuICBbQXV0aGVudGljYXRpb25TY2hlbWUuSU1QRVJTT05BVEVEX0FQUF06IFtdLFxuICBbQXV0aGVudGljYXRpb25TY2hlbWUuT0FVVEhdOiBbXSxcbiAgW0F1dGhlbnRpY2F0aW9uU2NoZW1lLk9BVVRIX0FQUF06IFtdLFxuICBbQXV0aGVudGljYXRpb25TY2hlbWUuU0VSVklDRV9BQ0NPVU5UXTogW10sXG4gIFtBdXRoZW50aWNhdGlvblNjaGVtZS5PQVVUSF9DTElFTlRfQ1JFREVOVElBTF06IFtcbiAgICB7XG4gICAgICBpZDogJ2NsaWVudElkJyxcbiAgICAgIHRpdGxlOiAnQ2xpZW50IElEJyxcbiAgICAgIHR5cGU6IFNpZGViYXJJbnB1dFR5cGUuVmFsdWVUZXh0LFxuICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogJ2NsaWVudFNlY3JldCcsXG4gICAgICB0aXRsZTogJ0NsaWVudCBTZWNyZXQnLFxuICAgICAgdHlwZTogU2lkZWJhcklucHV0VHlwZS5WYWx1ZVRleHQsXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICB9LFxuICBdLFxufTsiLCJpbXBvcnQgeyBUb2tlblR5cGUgfSBmcm9tICcuL2FjdGlvbic7XG5pbXBvcnQgeyBGYW5vdXRTdGFja0VudHJ5IH0gZnJvbSAnLi9leGVjdXRpb24nO1xuXG5leHBvcnQgZW51bSBEYXRhVHlwZSB7XG4gIFNUUklORyA9ICdTVFJJTkcnLFxuICBOVU1CRVIgPSAnTlVNQkVSJyxcbiAgREFURSA9ICdEQVRFJyxcbiAgQk9PTEVBTiA9ICdCT09MRUFOJyxcbiAgRU1BSUwgPSAnRU1BSUwnLFxuICBPQkpFQ1QgPSAnT0JKRUNUJyxcbiAgQVJSQVkgPSAnQVJSQVknLFxuICBBTlkgPSAnQU5ZJyxcbiAgRklMRSA9ICdGSUxFJyxcbiAgTk9OX0RFQ0lNQUwgPSAnTk9OX0RFQ0lNQUwnLFxufVxuXG5leHBvcnQgdHlwZSBUb2tlbml6ZWRTb3VyY2U8VCBleHRlbmRzIERhdGFUeXBlID0gRGF0YVR5cGU+ID0ge1xuICBkYXRhVHlwZT86IFQ7XG4gIHR5cGU6ICdUT0tFTklaRUQnO1xuICBwYXJ0czogVG9rZW5pemVkVmFsdWVbXTtcbn07XG5cbnR5cGUgVG9rZW5pemVkVmFsdWU8VCBleHRlbmRzIERhdGFUeXBlID0gRGF0YVR5cGU+ID1cbiAgfCBWYWx1ZVNvdXJjZTxUPlxuICB8IFZhcmlhYmxlU291cmNlPFQ+XG4gIHwgU2VjcmV0U291cmNlXG4gIHwgQ29ubmVjdENyZWRlbnRpYWxTb3VyY2VcbiAgfCBPYmplY3RWYWx1ZVNvdXJjZVxuICB8IFBlcnNvbmFNZXRhZGF0YVNvdXJjZTtcblxudHlwZSBPYmplY3RWYWx1ZVNvdXJjZTxUIGV4dGVuZHMgRGF0YVR5cGUgPSBEYXRhVHlwZT4gPSB7XG4gIHR5cGU6ICdPQkpFQ1RfVkFMVUUnO1xuICBuYW1lOiBzdHJpbmc7XG4gIHBhdGg6IHN0cmluZ1tdO1xuICBkYXRhVHlwZT86IFQ7XG59O1xuXG50eXBlIFZhcmlhYmxlU291cmNlPFQgZXh0ZW5kcyBEYXRhVHlwZSA9IERhdGFUeXBlPiA9IHtcbiAgZGF0YVR5cGU/OiBUO1xuICB0eXBlOiAnVkFSSUFCTEUnO1xuICBzdGVwSWQ6IHN0cmluZztcbiAgcGF0aDogc3RyaW5nW107XG59O1xuXG50eXBlIFNlY3JldFNvdXJjZSA9IHtcbiAgdHlwZTogJ0VOVklST05NRU5UX1NFQ1JFVCc7XG4gIGVudmlyb25tZW50U2VjcmV0SWQ6IHN0cmluZztcbn07XG5cbnR5cGUgVmFsdWVTb3VyY2U8VCBleHRlbmRzIERhdGFUeXBlID0gRGF0YVR5cGU+ID0ge1xuICBkYXRhVHlwZT86IFQ7XG4gIHR5cGU6ICdWQUxVRSc7XG4gIHZhbHVlOiBEYXRhVHlwZVZhbHVlc1tUXTtcbn07XG5cbnR5cGUgQ29ubmVjdENyZWRlbnRpYWxTb3VyY2UgPVxuICB8IHtcbiAgICAgIHR5cGU6ICdDT05ORUNUX0NSRURFTlRJQUxfRklFTEQnO1xuICAgICAgZmllbGRUeXBlOiAnV09SS0ZMT1dfU0VUVElORyc7XG4gICAgICBpbnB1dElkOiBzdHJpbmc7XG4gICAgICAvKipcbiAgICAgICAqIEBzaW5jZSBQQVJBLTMwNjU6IENvbm5lY3RJbnB1dFZhbHVlIGNhbiBub3cgaW5jbHVkZSBtb3JlIHRoYW4gYSBzdHJpbmcvbnVtYmVyIHR5cGUsIHNvIGFcbiAgICAgICAqIHBhdGggaXMgc3BlY2lmaWVkIHNpbWlsYXJseSB0byBWYXJpYWJsZVNvdXJjZSB0byB0cmF2ZXJzZSBvYmplY3QgdHlwZXMuXG4gICAgICAgKi9cbiAgICAgIHBhdGg/OiBzdHJpbmdbXTtcbiAgICB9XG4gIHwge1xuICAgICAgdHlwZTogJ0NPTk5FQ1RfQ1JFREVOVElBTF9GSUVMRCc7XG4gICAgICBmaWVsZFR5cGU6ICdTSEFSRURfV09SS0ZMT1dfU0VUVElORyc7XG4gICAgICBpbnB1dElkOiBzdHJpbmc7XG4gICAgICBwYXRoPzogc3RyaW5nW107XG4gICAgfVxuICB8IHtcbiAgICAgIHR5cGU6ICdDT05ORUNUX0NSRURFTlRJQUxfRklFTEQnO1xuICAgICAgZmllbGRUeXBlOiAnRVhURVJOQUxfVVNFUl9JRCc7XG4gICAgfVxuICB8IHtcbiAgICAgIHR5cGU6ICdDT05ORUNUX0NSRURFTlRJQUxfRklFTEQnO1xuICAgICAgZmllbGRUeXBlOiAnRVhURVJOQUxfVVNFUl9QUk9WSURFUl9JRCc7XG4gICAgfVxuICB8IHtcbiAgICAgIHR5cGU6ICdDT05ORUNUX0NSRURFTlRJQUxfRklFTEQnO1xuICAgICAgZmllbGRUeXBlOiAnT0FVVEhfQUNDRVNTX1RPS0VOJztcbiAgICB9XG4gIHwge1xuICAgICAgdHlwZTogJ0NPTk5FQ1RfQ1JFREVOVElBTF9GSUVMRCc7XG4gICAgICBmaWVsZFR5cGU6ICdFWFRFUk5BTF9VU0VSX1BST1ZJREVSX0RBVEEnO1xuICAgICAgZGF0YUtleTogc3RyaW5nO1xuICAgIH07XG5cbnR5cGUgUGVyc29uYU1ldGFkYXRhU291cmNlID0ge1xuICB0eXBlOiAnUEVSU09OQV9NRVRBREFUQSc7XG4gIHBhdGg/OiBzdHJpbmdbXTtcbn07XG5cbnR5cGUgRGF0YVR5cGVWYWx1ZXMgPSB7XG4gIFtEYXRhVHlwZS5TVFJJTkddOiBzdHJpbmc7XG4gIFtEYXRhVHlwZS5OVU1CRVJdOiBudW1iZXI7XG4gIFtEYXRhVHlwZS5EQVRFXTogRGF0ZTtcbiAgW0RhdGFUeXBlLkJPT0xFQU5dOiBib29sZWFuO1xuICBbRGF0YVR5cGUuRU1BSUxdOiBzdHJpbmc7XG4gIFtEYXRhVHlwZS5PQkpFQ1RdOiBvYmplY3Q7XG4gIFtEYXRhVHlwZS5BUlJBWV06IGFueVtdO1xuICBbRGF0YVR5cGUuQU5ZXTogYW55O1xuICBbRGF0YVR5cGUuRklMRV06IEZpbGVWYWx1ZTtcbiAgW0RhdGFUeXBlLk5PTl9ERUNJTUFMXTogbnVtYmVyO1xufTtcblxudHlwZSBGaWxlRGF0YVR5cGUgPSBCdWZmZXI7XG5cbnR5cGUgRmlsZVZhbHVlID0ge1xuICBkYXRhOiBGaWxlRGF0YVR5cGU7XG4gIGRhdGFUeXBlOiBEYXRhVHlwZS5GSUxFO1xuICBlbmNvZGluZz86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG4gIG1pbWVUeXBlPzogc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xuICBzaXplPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgS2V5ZWRTb3VyY2U8VCBleHRlbmRzIERhdGFUeXBlID0gRGF0YVR5cGU+ID0ge1xuICBrZXk6IHN0cmluZztcbiAgc291cmNlOiBTb3VyY2U8VD47XG59O1xuXG5leHBvcnQgdHlwZSBTb3VyY2U8VCBleHRlbmRzIERhdGFUeXBlID0gRGF0YVR5cGU+ID1cbiAgfCBWYWx1ZVNvdXJjZTxUPlxuICB8IFZhcmlhYmxlU291cmNlPFQ+XG4gIHwgVG9rZW5pemVkU291cmNlPFQ+XG4gIHwgQ29uZGl0aW9uU291cmNlXG4gIHwgU2VjcmV0U291cmNlXG4gIHwgRXhlY3V0aW9uU291cmNlXG4gIHwgRmFub3V0RXhlY3V0aW9uU291cmNlXG4gIHwgVXNlclN1cHBsaWVkQ3JlZGVudGlhbFNvdXJjZVxuICB8IENvbm5lY3RDcmVkZW50aWFsU291cmNlXG4gIHwgT2JqZWN0VmFsdWVTb3VyY2VcbiAgfCBQZXJzb25hTWV0YWRhdGFTb3VyY2U7XG5cbnR5cGUgQ29uZGl0aW9uU291cmNlID0ge1xuICB0eXBlOiAnQ09ORElUSU9OJztcbiAgY29uZGl0aW9uOiBDb25kaXRpb25XcmFwcGVyO1xufTtcblxudHlwZSBDb25kaXRpb25XcmFwcGVyID0gSm9pbmVkQ29uZGl0aW9ucyB8IE9wZXJhdG9yQ29uZGl0aW9uO1xudHlwZSBKb2luZWRDb25kaXRpb25zID0gQW5kQ29uZGl0aW9ucyB8IE9yQ29uZGl0aW9ucztcbnR5cGUgQW5kQ29uZGl0aW9ucyA9IHtcbiAgdHlwZTogJ0pPSU4nO1xuICBqb2luOiAnQU5EJztcbiAgY29uZGl0aW9uczogQ29uZGl0aW9uV3JhcHBlcltdO1xufTtcblxuZXhwb3J0IHR5cGUgT3JDb25kaXRpb25zID0ge1xuICB0eXBlOiAnSk9JTic7XG4gIGpvaW46ICdPUic7XG4gIGNvbmRpdGlvbnM6IENvbmRpdGlvbldyYXBwZXJbXTtcbn07XG5cbnR5cGUgT3BlcmF0b3JDb25kaXRpb24gPSB7XG4gIHR5cGU6ICdPUEVSQVRPUic7XG4gIGNvbmRpdGlvbjogQ29uZGl0aW9uO1xufTtcblxudHlwZSBDb25kaXRpb24gPVxuICB8IHtcbiAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5Ob25lO1xuICAgICAgdmFyaWFibGU6IFNvdXJjZTxEYXRhVHlwZS5BTlk+O1xuICAgIH1cbiAgfCB7XG4gICAgICBvcGVyYXRvcjogT3BlcmF0b3IuU3RyaW5nQ29udGFpbnM7XG4gICAgICB2YXJpYWJsZTogU291cmNlPERhdGFUeXBlLlNUUklORz47XG4gICAgICBhcmd1bWVudDogU291cmNlPERhdGFUeXBlLlNUUklORz47XG4gICAgfVxuICB8IHtcbiAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5TdHJpbmdEb2VzTm90Q29udGFpbjtcbiAgICAgIHZhcmlhYmxlOiBTb3VyY2U8RGF0YVR5cGUuU1RSSU5HPjtcbiAgICAgIGFyZ3VtZW50OiBTb3VyY2U8RGF0YVR5cGUuU1RSSU5HPjtcbiAgICB9XG4gIHwge1xuICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLlN0cmluZ0V4YWN0bHlNYXRjaGVzO1xuICAgICAgdmFyaWFibGU6IFNvdXJjZTxEYXRhVHlwZS5TVFJJTkc+O1xuICAgICAgYXJndW1lbnQ6IFNvdXJjZTxEYXRhVHlwZS5TVFJJTkc+O1xuICAgIH1cbiAgfCB7XG4gICAgICBvcGVyYXRvcjogT3BlcmF0b3IuU3RyaW5nRG9lc05vdEV4YWN0bHlNYXRjaDtcbiAgICAgIHZhcmlhYmxlOiBTb3VyY2U8RGF0YVR5cGUuU1RSSU5HPjtcbiAgICAgIGFyZ3VtZW50OiBTb3VyY2U8RGF0YVR5cGUuU1RSSU5HPjtcbiAgICB9XG4gIHwge1xuICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLlN0cmluZ0lzSW47XG4gICAgICB2YXJpYWJsZTogU291cmNlPERhdGFUeXBlLlNUUklORz47XG4gICAgICBhcmd1bWVudDogU291cmNlPERhdGFUeXBlLlNUUklORz47XG4gICAgfVxuICB8IHtcbiAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5TdHJpbmdJc05vdEluO1xuICAgICAgdmFyaWFibGU6IFNvdXJjZTxEYXRhVHlwZS5TVFJJTkc+O1xuICAgICAgYXJndW1lbnQ6IFNvdXJjZTxEYXRhVHlwZS5TVFJJTkc+O1xuICAgIH1cbiAgfCB7XG4gICAgICBvcGVyYXRvcjogT3BlcmF0b3IuU3RyaW5nU3RhcnRzV2l0aDtcbiAgICAgIHZhcmlhYmxlOiBTb3VyY2U8RGF0YVR5cGUuU1RSSU5HPjtcbiAgICAgIGFyZ3VtZW50OiBTb3VyY2U8RGF0YVR5cGUuU1RSSU5HPjtcbiAgICB9XG4gIHwge1xuICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLlN0cmluZ0RvZXNOb3RTdGFydFdpdGg7XG4gICAgICB2YXJpYWJsZTogU291cmNlPERhdGFUeXBlLlNUUklORz47XG4gICAgICBhcmd1bWVudDogU291cmNlPERhdGFUeXBlLlNUUklORz47XG4gICAgfVxuICB8IHtcbiAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5TdHJpbmdFbmRzV2l0aDtcbiAgICAgIHZhcmlhYmxlOiBTb3VyY2U8RGF0YVR5cGUuU1RSSU5HPjtcbiAgICAgIGFyZ3VtZW50OiBTb3VyY2U8RGF0YVR5cGUuU1RSSU5HPjtcbiAgICB9XG4gIHwge1xuICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLlN0cmluZ0RvZXNOb3RFbmRXaXRoO1xuICAgICAgdmFyaWFibGU6IFNvdXJjZTxEYXRhVHlwZS5TVFJJTkc+O1xuICAgICAgYXJndW1lbnQ6IFNvdXJjZTxEYXRhVHlwZS5TVFJJTkc+O1xuICAgIH1cbiAgfCB7XG4gICAgICBvcGVyYXRvcjogT3BlcmF0b3IuTnVtYmVyR3JlYXRlclRoYW47XG4gICAgICB2YXJpYWJsZTogU291cmNlPERhdGFUeXBlLk5VTUJFUj47XG4gICAgICBhcmd1bWVudDogU291cmNlPERhdGFUeXBlLk5VTUJFUj47XG4gICAgfVxuICB8IHtcbiAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5OdW1iZXJMZXNzVGhhbjtcbiAgICAgIHZhcmlhYmxlOiBTb3VyY2U8RGF0YVR5cGUuTlVNQkVSPjtcbiAgICAgIGFyZ3VtZW50OiBTb3VyY2U8RGF0YVR5cGUuTlVNQkVSPjtcbiAgICB9XG4gIHwge1xuICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLk51bWJlckdyZWF0ZXJUaGFuT3JFcXVhbFRvO1xuICAgICAgdmFyaWFibGU6IFNvdXJjZTxEYXRhVHlwZS5OVU1CRVI+O1xuICAgICAgYXJndW1lbnQ6IFNvdXJjZTxEYXRhVHlwZS5OVU1CRVI+O1xuICAgIH1cbiAgfCB7XG4gICAgICBvcGVyYXRvcjogT3BlcmF0b3IuTnVtYmVyTGVzc1RoYW5PckVxdWFsVG87XG4gICAgICB2YXJpYWJsZTogU291cmNlPERhdGFUeXBlLk5VTUJFUj47XG4gICAgICBhcmd1bWVudDogU291cmNlPERhdGFUeXBlLk5VTUJFUj47XG4gICAgfVxuICB8IHtcbiAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5OdW1iZXJFcXVhbHM7XG4gICAgICB2YXJpYWJsZTogU291cmNlPERhdGFUeXBlLk5VTUJFUj47XG4gICAgICBhcmd1bWVudDogU291cmNlPERhdGFUeXBlLk5VTUJFUj47XG4gICAgfVxuICB8IHtcbiAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5OdW1iZXJEb2VzTm90RXF1YWw7XG4gICAgICB2YXJpYWJsZTogU291cmNlPERhdGFUeXBlLk5VTUJFUj47XG4gICAgICBhcmd1bWVudDogU291cmNlPERhdGFUeXBlLk5VTUJFUj47XG4gICAgfVxuICB8IHtcbiAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5EYXRlVGltZUFmdGVyO1xuICAgICAgdmFyaWFibGU6IFNvdXJjZTxEYXRhVHlwZS5EQVRFPjtcbiAgICAgIGFyZ3VtZW50OiBTb3VyY2U8RGF0YVR5cGUuREFURT47XG4gICAgfVxuICB8IHtcbiAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5EYXRlVGltZUJlZm9yZTtcbiAgICAgIHZhcmlhYmxlOiBTb3VyY2U8RGF0YVR5cGUuREFURT47XG4gICAgICBhcmd1bWVudDogU291cmNlPERhdGFUeXBlLkRBVEU+O1xuICAgIH1cbiAgfCB7XG4gICAgICBvcGVyYXRvcjogT3BlcmF0b3IuRGF0ZVRpbWVFcXVhbHM7XG4gICAgICB2YXJpYWJsZTogU291cmNlPERhdGFUeXBlLkRBVEU+O1xuICAgICAgYXJndW1lbnQ6IFNvdXJjZTxEYXRhVHlwZS5EQVRFPjtcbiAgICB9XG4gIHwge1xuICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLkJvb2xlYW5UcnVlO1xuICAgICAgdmFyaWFibGU6IFNvdXJjZTxEYXRhVHlwZS5CT09MRUFOPjtcbiAgICB9XG4gIHwge1xuICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLkJvb2xlYW5GYWxzZTtcbiAgICAgIHZhcmlhYmxlOiBTb3VyY2U8RGF0YVR5cGUuQk9PTEVBTj47XG4gICAgfVxuICB8IHsgb3BlcmF0b3I6IE9wZXJhdG9yLklzTnVsbDsgdmFyaWFibGU6IFNvdXJjZSB9XG4gIHwge1xuICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLklzTm90TnVsbDtcbiAgICAgIHZhcmlhYmxlOiBTb3VyY2U7XG4gICAgfVxuICB8IHsgb3BlcmF0b3I6IE9wZXJhdG9yLkV4aXN0czsgdmFyaWFibGU6IFNvdXJjZSB9XG4gIHwge1xuICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLkRvZXNOb3RFeGlzdDtcbiAgICAgIHZhcmlhYmxlOiBTb3VyY2U7XG4gICAgfVxuICB8IHtcbiAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5BcnJheUlzRW1wdHk7XG4gICAgICB2YXJpYWJsZTogU291cmNlPERhdGFUeXBlLkFSUkFZPjtcbiAgICB9XG4gIHwge1xuICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLkFycmF5SXNOb3RFbXB0eTtcbiAgICAgIHZhcmlhYmxlOiBTb3VyY2U8RGF0YVR5cGUuQVJSQVk+O1xuICAgIH1cbiAgfCB7XG4gICAgICBvcGVyYXRvcjogT3BlcmF0b3IuU3RyaW5nR3JlYXRlclRoYW47XG4gICAgICB2YXJpYWJsZTogU291cmNlPERhdGFUeXBlLlNUUklORz47XG4gICAgICBhcmd1bWVudDogU291cmNlPERhdGFUeXBlLlNUUklORz47XG4gICAgfVxuICB8IHtcbiAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5TdHJpbmdMZXNzVGhhbjtcbiAgICAgIHZhcmlhYmxlOiBTb3VyY2U8RGF0YVR5cGUuU1RSSU5HPjtcbiAgICAgIGFyZ3VtZW50OiBTb3VyY2U8RGF0YVR5cGUuU1RSSU5HPjtcbiAgICB9O1xuXG5lbnVtIE9wZXJhdG9yIHtcbiAgJ05vbmUnID0gJyRub25lJyxcbiAgJ1N0cmluZ0NvbnRhaW5zJyA9ICckc3RyaW5nQ29udGFpbnMnLFxuICAnU3RyaW5nRG9lc05vdENvbnRhaW4nID0gJyRzdHJpbmdEb2VzTm90Q29udGFpbicsXG4gICdTdHJpbmdFeGFjdGx5TWF0Y2hlcycgPSAnJHN0cmluZ0V4YWN0bHlNYXRjaGVzJyxcbiAgJ1N0cmluZ0RvZXNOb3RFeGFjdGx5TWF0Y2gnID0gJyRzdHJpbmdEb2VzTm90RXhhY3RseU1hdGNoJyxcbiAgJ1N0cmluZ0lzSW4nID0gJyRzdHJpbmdJc0luJyxcbiAgJ1N0cmluZ0lzTm90SW4nID0gJyRzdHJpbmdJc05vdEluJyxcbiAgJ1N0cmluZ1N0YXJ0c1dpdGgnID0gJyRzdHJpbmdTdGFydHNXaXRoJyxcbiAgJ1N0cmluZ0RvZXNOb3RTdGFydFdpdGgnID0gJyRzdHJpbmdEb2VzTm90U3RhcnRXaXRoJyxcbiAgJ1N0cmluZ0VuZHNXaXRoJyA9ICckc3RyaW5nRW5kc1dpdGgnLFxuICAnU3RyaW5nRG9lc05vdEVuZFdpdGgnID0gJyRzdHJpbmdEb2VzTm90RW5kV2l0aCcsXG4gICdOdW1iZXJHcmVhdGVyVGhhbicgPSAnJG51bWJlckdyZWF0ZXJUaGFuJyxcbiAgJ051bWJlckxlc3NUaGFuJyA9ICckbnVtYmVyTGVzc1RoYW4nLFxuICAnTnVtYmVyRXF1YWxzJyA9ICckbnVtYmVyRXF1YWxzJyxcbiAgJ051bWJlckRvZXNOb3RFcXVhbCcgPSAnJG51bWJlckRvZXNOb3RFcXVhbCcsXG4gICdOdW1iZXJMZXNzVGhhbk9yRXF1YWxUbycgPSAnJG51bWJlckxlc3NUaGFuT3JFcXVhbFRvJyxcbiAgJ051bWJlckdyZWF0ZXJUaGFuT3JFcXVhbFRvJyA9ICckbnVtYmVyR3JlYXRlclRoYW5PckVxdWFsVG8nLFxuICAnRGF0ZVRpbWVBZnRlcicgPSAnJGRhdGVUaW1lQWZ0ZXInLFxuICAnRGF0ZVRpbWVCZWZvcmUnID0gJyRkYXRlVGltZUJlZm9yZScsXG4gICdEYXRlVGltZUVxdWFscycgPSAnJGRhdGVUaW1lRXF1YWxzJyxcbiAgJ0Jvb2xlYW5UcnVlJyA9ICckYm9vbGVhblRydWUnLFxuICAnQm9vbGVhbkZhbHNlJyA9ICckYm9vbGVhbkZhbHNlJyxcbiAgLyoqIChQQVJBLTU1NTEpIHByZXZpb3VzbHkgb3BlcmF0b3JzIGZvciBEb2VzIEV4aXN0IC8gRG9lcyBOb3QgRXhpc3QgZG8gYSBzdHJpY3QgY2hlY2sgZm9yIGVxdWFsaXR5IHRvIG51bGwsIHJlc3VsdGluZyBpbiBhIGJ1ZyB3aGVyZSB2YWx1ZSBpcyB1bmRlZmluZWRcbiAgICogdG8gaGFuZGxlIHRoaXMgc2l0dWF0aW9uLCB3ZSBhcmUgYWRkaW5nIDIgbmV3IG9wZXJhdG9ycyBJc05vdE51bGwgYW5kIElzTnVsbCBhbmQgY2hhbmdpbmcgZnVuY3Rpb25hbGl0eSBvZlxuICAgKiBFeGlzdCBhbmQgRG9lc05vdEV4aXN0IG9wZXJhdG9ycyB0byBoYW5kbGUgdW5kZWZpbmVkIHZhbHVlc1xuICAgKi9cbiAgJ0lzTm90TnVsbCcgPSAnJGV4aXN0cycsXG4gICdJc051bGwnID0gJyRkb2VzTm90RXhpc3QnLFxuICAnRXhpc3RzJyA9ICckaXNOb3RVbmRlZmluZWRPck51bGwnLFxuICAnRG9lc05vdEV4aXN0JyA9ICckaXNVbmRlZmluZWRPck51bGwnLFxuICAnQXJyYXlJc0luJyA9ICckYXJyYXlJc0luJyxcbiAgJ0FycmF5SXNOb3RJbicgPSAnJGFycmF5SXNOb3RJbicsXG4gICdBcnJheUlzRW1wdHknID0gJyRhcnJheUlzRW1wdHknLFxuICAnQXJyYXlJc05vdEVtcHR5JyA9ICckYXJyYXlJc05vdEVtcHR5JyxcbiAgJ1N0cmluZ0dyZWF0ZXJUaGFuJyA9ICckc3RyaW5nR3JlYXRlclRoYW4nLFxuICAnU3RyaW5nTGVzc1RoYW4nID0gJyRzdHJpbmdMZXNzVGhhbicsXG59XG5cbnR5cGUgRXhlY3V0aW9uU291cmNlID0ge1xuICB0eXBlOiAnRVhFQ1VUSU9OJztcbiAgaWQ6IHN0cmluZzsgLy8gc3RlcCBleGVjdXRpb24gaWQgKGluc3RhbmNlKVxuICBzdGVwSWQ6IHN0cmluZzsgLy8gdGhlIGJhc2Ugc3RlcCBpZFxuXG4gIC8qKlxuICAgKiBhIHRpbWVzdGFtcCByZXByZXNlbnRpbmcgd2hlbiB0aGUgZXhlY3V0aW9uIG9jY3VycmVkXG4gICAqL1xuICBzdGFydDogbnVtYmVyO1xuICBmYW5vdXRTdGFjazogRmFub3V0U3RhY2tFbnRyeVtdO1xuXG4gIC8qKlxuICAgKiBUaGlzIGZsYWcgc3VnZ2VzdHMgdGhhdCB0aGUgY29udGVudCBvZiB0aGUgdmFyaWFibGUgd2lsbCBiZSBzdG9yZWQgb24gcmVtbW90ZSBzdG9yYWdlIHNlcnZpY2VcbiAgICogc3VjaCBhcyBzM1xuICAgKi9cbiAgcmVtb3RlQ2FjaGVkPzogYm9vbGVhbjtcbn07XG5cbi8vIGV4ZWN1dGlvbnMgd2l0aGluIGZhbm91dHMgYXJlIHJlcHJlc2VudGVkIGJ5IGEgYEZhbm91dEV4ZWN1dGlvblNvdXJjZWBcbi8vIGluIHJlZGlzLCB0aGVzZSBhcmUgc3RvcmVkIGFzIGEgbGlzdCBvZiBgRXhlY3V0aW9uU291cmNlYCB0eXBlc1xuLy8gdGhlIGBGYW5vdXRFeGVjdXRpb25Tb3VyY2VgIGlzIHVzZWQgdG8gcmV0cmlldmUgdGhpcyBsaXN0XG4vLyBhbmQgYSByZXNvbHZlciBkZXRlcm1pbmVzIHdoaWNoIG9mIHRoZSBleGVjdXRpb25zIHNob3VsZCBiZSBwYXNzZWQgYXMgdmFyaWFibGVzXG4vLyBkZXBlbmRpbmcgb24gdGhlIGNvbnRleHQgdGhhdCB0aGUgZXhlY3V0aW5nIHN0ZXAgaXMgaW5cbnR5cGUgRmFub3V0RXhlY3V0aW9uU291cmNlID0ge1xuICB0eXBlOiAnRkFOT1VUX0VYRUNVVElPTic7XG4gIHN0ZXBJZDogc3RyaW5nOyAvLyBzdGVwIGlkIG9mIHRoZSBleGVjdXRpb24sIE5PVCB0aGUgZmFub3V0XG59O1xuXG50eXBlIFVzZXJTdXBwbGllZENyZWRlbnRpYWxTb3VyY2UgPSB7XG4gIHR5cGU6ICdVU0VSX1NVUFBMSUVEX0NSRURFTlRJQUwnO1xuICB0b2tlblR5cGU6IFRva2VuVHlwZTtcbiAgcHJvdmlkZXJUeXBlOiBzdHJpbmc7XG4gIGNyZWRlbnRpYWw6IFRva2VuaXplZFNvdXJjZTxEYXRhVHlwZS5TVFJJTkc+O1xufTtcbiIsImltcG9ydCBDb25uZWN0U0RLIGZyb20gJy4uL0Nvbm5lY3RTREsnO1xuaW1wb3J0IHsgT2F1dGhDYWxsYmFja1Jlc3BvbnNlIH0gZnJvbSAnLi4vZW50aXRpZXMvY3JlZGVudGlhbC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSUludGVncmF0aW9uTWV0YWRhdGEgfSBmcm9tICcuLi9lbnRpdGllcy9pbnRlZ3JhdGlvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUGVyc29uYU1ldGEgfSBmcm9tICcuLi9lbnRpdGllcy9wZXJzb25hLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJQ29ubmVjdFVzZXJDb250ZXh0IH0gZnJvbSAnLi4vaGVscGVycy9Db25uZWN0VXNlckNvbnRleHQnO1xuaW1wb3J0IHtcbiAgQXV0aGVudGljYXRlZENvbm5lY3RVc2VyLFxuICBEeW5hbWljTWFwcGluZ0ZpZWxkLFxuICBEeW5hbWljTWFwcGluZ09wdGlvbnMsXG4gIEludGVncmF0aW9uV29ya2Zsb3dTdGF0ZSxcbn0gZnJvbSAnLi4vdHlwZXMvY29ubmVjdCc7XG5cbmltcG9ydCB7IFByb3BzIGFzIENvbm5lY3RNb2RhbFByb3BzIH0gZnJvbSAnLi9jb25uZWN0TW9kYWwnO1xuXG5leHBvcnQgdHlwZSBDb25uZWN0VXNlciA9IHsgYXV0aGVudGljYXRlZDogZmFsc2UgfSB8IEF1dGhlbnRpY2F0ZWRDb25uZWN0VXNlcjtcblxuZXhwb3J0IHR5cGUgRnVuY3Rpb25Qcm9wZXJ0eU5hbWVzPFQ+ID0ge1xuICBbSyBpbiBrZXlvZiBUXTogVFtLXSBleHRlbmRzIEZ1bmN0aW9uID8gSyA6IG5ldmVyO1xufVtrZXlvZiBUXTtcbnR5cGUgTm9uRnVuY3Rpb25Qcm9wZXJ0eU5hbWVzPFQ+ID0ge1xuICBbSyBpbiBrZXlvZiBUXTogVFtLXSBleHRlbmRzIEZ1bmN0aW9uID8gbmV2ZXIgOiBLO1xufVtrZXlvZiBUXTtcbmV4cG9ydCB0eXBlIE5vbkZ1bmN0aW9uUHJvcGVydGllczxUPiA9IFBpY2s8VCwgTm9uRnVuY3Rpb25Qcm9wZXJ0eU5hbWVzPFQ+PjtcbmV4cG9ydCB0eXBlIFVud3JhcFByb21pc2U8VD4gPSBUIGV4dGVuZHMgUHJvbWlzZUxpa2U8aW5mZXIgVT4gPyBVIDogVDtcblxuZXhwb3J0IHR5cGUgTm9uTnVsbFVuZGVmaW5lZEZpZWxkPFQ+ID0ge1xuICBbUCBpbiBrZXlvZiBUXS0/OiBOb25OdWxsVW5kZWZpbmVkRmllbGQ8Tm9uTnVsbGFibGU8VFtQXT4+O1xufTtcblxuZXhwb3J0IHR5cGUgVUlVcGRhdGVNZXNzYWdlID0ge1xuICBtZXNzYWdlVHlwZTogJ1VJX1VQREFURSc7XG4gIG5leHRDb250ZXh0OiBOb25GdW5jdGlvblByb3BlcnRpZXM8SUNvbm5lY3RVc2VyQ29udGV4dD47XG4gIG5leHRNb2RhbFN0YXRlOiBOb25GdW5jdGlvblByb3BlcnRpZXM8Q29ubmVjdE1vZGFsUHJvcHM+O1xufTtcblxuZXhwb3J0IHR5cGUgU0RLRnVuY3Rpb25JbnZvY2F0aW9uTWVzc2FnZTxUIGV4dGVuZHMgRnVuY3Rpb25Qcm9wZXJ0eU5hbWVzPENvbm5lY3RTREs+ID0gbmV2ZXI+ID0ge1xuICBtZXNzYWdlVHlwZTogJ1NES19GVU5DVElPTl9JTlZPQ0FUSU9OJztcbiAgdHlwZTogVDtcbiAgcGFyYW1ldGVyczogUGFyYW1ldGVyczxDb25uZWN0U0RLW1RdPjtcbiAgaWQ6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFNES0Z1bmN0aW9uUmVzcG9uc2VNZXNzYWdlPFQgZXh0ZW5kcyBGdW5jdGlvblByb3BlcnR5TmFtZXM8Q29ubmVjdFNESz4gPSBuZXZlcj4gPSB7XG4gIG1lc3NhZ2VUeXBlOiAnU0RLX0ZVTkNUSU9OX1JFU1BPTlNFJztcbiAgdHlwZTogVDtcbiAgcmVzdWx0OiBVbndyYXBQcm9taXNlPFJldHVyblR5cGU8Q29ubmVjdFNES1tUXT4+O1xuICBpZDogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgU0RLRnVuY3Rpb25FcnJvck1lc3NhZ2UgPSB7XG4gIG1lc3NhZ2VUeXBlOiAnU0RLX0ZVTkNUSU9OX0VSUk9SJztcbiAgZXJyb3I6IHRydWU7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgaWQ6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFNES1JlY2VpdmVkTWVzc2FnZSA9IFNES0Z1bmN0aW9uSW52b2NhdGlvbk1lc3NhZ2U7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNvbm5lY3RTREsge1xuICBhdXRoZW50aWNhdGUocHJvamVjdElkOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcsIG9wdGlvbnM/OiBBdXRoZW50aWNhdGVPcHRpb25zKTogUHJvbWlzZTx2b2lkPjtcbiAgY29ubmVjdChhY3Rpb246IHN0cmluZyk6IHZvaWQ7XG4gIGdldFVzZXIoKTogQ29ubmVjdFVzZXI7XG4gIC8qKlxuICAgKiAqKkRvIG5vdCBjYWxsIHRoaXMgZnVuY3Rpb24gZGlyZWN0bHkuKipcbiAgICpcbiAgICogSW52b2tlZCBieSB0aGUgT0F1dGggcG9wdXAgYWZ0ZXIgZmluaXNoaW5nIHRoZSBjcmVkZW50aWFsIGV4Y2hhbmdlLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX29hdXRoQ2FsbGJhY2soY3JlZGVudGlhbDogT2F1dGhDYWxsYmFja1Jlc3BvbnNlKTogUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogKipEbyBub3QgY2FsbCB0aGlzIGZ1bmN0aW9uIGRpcmVjdGx5LioqXG4gICAqXG4gICAqIEludm9rZWQgYnkgdGhlIE9BdXRoIHBvcHVwIG9uIGFuIGVycm9yIGVuY291bnRlcmVkIGR1cmluZyB0aGUgY3JlZGVudGlhbCBleGNoYW5nZS5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9vYXV0aEVycm9yQ2FsbGJhY2soZXJyb3JNZXNzYWdlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBpbnN0YWxscyBhbiBpbnRlZ3JhdGlvbiB3aXRob3V0IHRoZSBuZWVkIHRvIGNsaWNrIG9uIGVuYWJsZSBidXR0b24gZnJvbSBwb3J0YWxcbiAgICogSW5zdGFsbCBPcHRpb25zOlxuICAgKiBge3Nob3dQb3J0YWxBZnRlckluc3RhbGw6IGJvb2xlYW59YCBkZWNpZGVzIHdldGhlciB0byBzaG93IHBvcnRhbCB3aXRoIGNvbmZpZ3VyYXRpb24gdmlldyBhZnRlciB0aGUgaW5zdGFsbGF0aW9uIGlzIGNvbXBsZXRlZFxuICAgKi9cbiAgaW5zdGFsbEludGVncmF0aW9uKG5hbWU6IHN0cmluZywgb3B0aW9uczogSW5zdGFsbE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiB1bmluc3RhbGxzIGFuIGludGVncmF0aW9uIGZvciBjb25uZWN0ZWQgdXNlci5cbiAgICovXG4gIHVuaW5zdGFsbEludGVncmF0aW9uKG5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD47XG5cbiAgLyoqXG4gICAqIGRpc2FibGVzIGEgd29ya2Zsb3cgZm9yIHRoZSBjb25uZWN0ZWQgdXNlciBhbmQgdW5zdWJzY3JpYmVzIGFsbCB0aGUgd29ya2Zsb3dzIGluIGhlcm1lc1xuICAgKi9cbiAgZGlzYWJsZVdvcmtmbG93KHdvcmtmbG93SWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD47XG5cbiAgc2V0VXNlck1ldGFkYXRhKG1ldGE6IFBlcnNvbmFNZXRhKTogUHJvbWlzZTxBdXRoZW50aWNhdGVkQ29ubmVjdFVzZXI+O1xuXG4gIC8qKlxuICAgKiBzZXRzIHRoZSBiYXNlIHVybCBmb3IgZGlmZmVyZW50IHNlcnZpY2VzIHVzZWQgaW4gY29ubmVjdCBzZGtcbiAgICovXG4gIGNvbmZpZ3VyZUdsb2JhbChvcHRpb25zOiB7IGhvc3Q6IHN0cmluZyB9KTogdm9pZDtcblxuICAvKipcbiAgICogcmV0dXJucyBtZXRhZGF0YSBmb3IgZ2l2ZW4gaW50ZWdyYXRpb25cbiAgICogQHBhcmFtIGludGVncmF0aW9uTmFtZSBpbnRlZ3JhdGlvbiBuYW1lXG4gICAqL1xuICBnZXRJbnRlZ3JhdGlvbk1ldGFkYXRhKGludGVncmF0aW9uTmFtZTogc3RyaW5nKTogSUludGVncmF0aW9uTWV0YWRhdGE7XG4gIGdldEludGVncmF0aW9uTWV0YWRhdGEoKTogSUludGVncmF0aW9uTWV0YWRhdGFbXTtcblxuICAvKipcbiAgICogdHJpZ2dlcnMgYWxsIHdvcmtmbG93cyBmb3IgZXZlbnRcbiAgICogQHBhcmFtIG5hbWUgZXZlbnROYW1lXG4gICAqIEBwYXJhbSBwYXlsb2FkIGV2ZW50IHBheWxvYWQgb2JqZWN0XG4gICAqL1xuICBldmVudChuYW1lOiBzdHJpbmcsIHBheWxvYWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogbWFrZXMgYW4gY29ubmVjdCBwcm94eSBhY3Rpb24gcmVxdWVzdFxuICAgKiBAcGFyYW0gYWN0aW9uIGFjdGlvbk5hbWVcbiAgICogQHBhcmFtIHBhdGggcmVxdWVzdCBwYXRoXG4gICAqIEBwYXJhbSBpbml0IHJlcXVlc3QgaW5pdGlhbGl6YXRpb24gb3B0aW9ucyB7bWV0aG9kOiBodHRwTWV0aG9kLCBib2R5OlJlcXVlc3RCb2R5LCBoZWFkZXJ9XG4gICAqL1xuICByZXF1ZXN0PFRSZXNwb25zZT4oXG4gICAgYWN0aW9uOiBzdHJpbmcsXG4gICAgcGF0aDogc3RyaW5nLFxuICAgIGluaXQ6IHtcbiAgICAgIG1ldGhvZDogUmVxdWVzdEluaXRbJ21ldGhvZCddO1xuICAgICAgYm9keTogUmVxdWVzdEluaXRbJ2JvZHknXSB8IG9iamVjdDtcbiAgICAgIGhlYWRlcnM6IFJlcXVlc3RJbml0WydoZWFkZXJzJ107XG4gICAgfSxcbiAgKTogUHJvbWlzZTxUUmVzcG9uc2UgfCB1bmRlZmluZWQ+O1xuXG4gIC8qKlxuICAgKiBsaXN0ZW4gb24gY29ubmVjdCBzZGsgZXZlbnRzXG4gICAqIEBwYXJhbSBldmVudE5hbWUgU0RLRVZFTlRTXG4gICAqIEBwYXJhbSBsaXN0ZW5lclxuICAgKi9cbiAgc3Vic2NyaWJlKGV2ZW50TmFtZTogU0RLX0VWRU5ULCBsaXN0ZW5lcjogTGlzdGVuZXJGdW5jdGlvbik6ICgpID0+IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIHJlbW92ZSBsaXN0ZW5lcnMgb24gY29ubmVjdCBzZGsgZXZlbnRzXG4gICAqIEBwYXJhbSBldmVudE5hbWUgU0RLRVZFTlRTXG4gICAqIEBwYXJhbSBsaXN0ZW5lclxuICAgKi9cbiAgdW5zdWJzY3JpYmUoZXZlbnROYW1lOiBTREtfRVZFTlQsIGxpc3RlbmVyOiBMaXN0ZW5lckZ1bmN0aW9uKTogYm9vbGVhbjtcblxuICAvKipcbiAgICogdHJpZ2dlciBjb25uZWN0IGVuZHBvaW50IHRyaWdnZXIgd29ya2Zsb3dcbiAgICogQHBhcmFtIHdvcmtmbG93SWRcbiAgICogQHBhcmFtIHRyaWdnZXJXb3JrZmxvd1JlcXVlc3RcbiAgICovXG4gIHdvcmtmbG93KFxuICAgIHdvcmtmbG93SWQ6IHN0cmluZyxcbiAgICB0cmlnZ2VyV29ya2Zsb3dSZXF1ZXN0OiBUcmlnZ2VyV29ya2Zsb3dSZXF1ZXN0LFxuICApOiBQcm9taXNlPG9iamVjdCB8IHVuZGVmaW5lZD47XG59XG5cbi8qKlxuICogc2RrIGluc3RhbGwgb3B0aW9uc1xuICovXG5leHBvcnQgdHlwZSBJbnN0YWxsT3B0aW9ucyA9IHtcbiAgLyoqXG4gICAqIGFwaSBvbmx5IGluc3RhbGwgb3IgdWkgaW5zdGFsbFxuICAgKi9cbiAgaXNBcGlJbnN0YWxsYXRpb24/OiBib29sZWFuO1xuICAvKipcbiAgICogaWYgdHJ1ZSBzaG93IHBvcnRhbCB3aGVuIGluc3RhbGwgd2l0aCBhcGkgaW5zdGFsbCBvcHRpb25cbiAgICovXG4gIHNob3dQb3J0YWxBZnRlckluc3RhbGw/OiBib29sZWFuO1xuICAvKipcbiAgICogbm90IHNob3cgcG9zdCBvYXV0aCBwcm9tdCBpZiB0aGlzIGlzIHRydWVcbiAgICovXG4gIGJ5cGFzc1Bvc3RPQXV0aFByb21wdD86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBBdXRoZW50aWNhdGVPcHRpb25zID0ge1xuICBtZXRhZGF0YT86IFBlcnNvbmFNZXRhO1xufTtcblxuLyoqXG4gKiBDb25uZWN0IE1vZGFsIFRhYnNcbiAqL1xuZXhwb3J0IGVudW0gTW9kYWxWaWV3IHtcbiAgT1ZFUlZJRVcgPSAnb3ZlcnZpZXcnLFxuICBDT05GSUdVUkFUSU9OID0gJ2NvbmZpZ3VyYXRpb24nLFxufVxuXG5leHBvcnQgdHlwZSBJbnRlZ3JhdGlvbkluc3RhbGxFdmVudCA9IHtcbiAgaW50ZWdyYXRpb25JZDogc3RyaW5nO1xuICBpbnRlZ3JhdGlvblR5cGU6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIEludGVncmF0aW9uVW5pbnN0YWxsRXZlbnQgPSBJbnRlZ3JhdGlvbkluc3RhbGxFdmVudDtcblxuZXhwb3J0IHR5cGUgV29ya2Zsb3dTdGF0ZUNoYW5nZUV2ZW50ID0ge1xuICBpbnRlZ3JhdGlvbklkOiBzdHJpbmc7XG4gIHdvcmtmbG93SWQ6IHN0cmluZztcbiAgd29ya2Zsb3dTdGF0ZUNoYW5nZTogUGFydGlhbDxJbnRlZ3JhdGlvbldvcmtmbG93U3RhdGU+O1xufTtcblxuZXhwb3J0IHR5cGUgUG9ydGFsT3BlbkV2ZW50ID0ge1xuICBpbnRlZ3JhdGlvbklkOiBzdHJpbmc7XG4gIGludGVncmF0aW9uVHlwZTogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgUG9ydGFsQ2xvc2VFdmVudCA9IFBvcnRhbE9wZW5FdmVudDtcblxuZXhwb3J0IHR5cGUgQ2FsbGJhY2tNYXAgPSB7XG4gIG9uU3VjY2Vzcz86IChldmVudDogSW50ZWdyYXRpb25JbnN0YWxsRXZlbnQsIHVzZXI6IEF1dGhlbnRpY2F0ZWRDb25uZWN0VXNlcikgPT4gdm9pZDtcbiAgb25JbnN0YWxsPzogKGV2ZW50OiBJbnRlZ3JhdGlvbkluc3RhbGxFdmVudCwgdXNlcjogQXV0aGVudGljYXRlZENvbm5lY3RVc2VyKSA9PiB2b2lkO1xuICBvbkVycm9yPzogKGVycjogRXJyb3IpID0+IHZvaWQ7XG4gIG9uVW5pbnN0YWxsPzogKGV2ZW50OiBJbnRlZ3JhdGlvblVuaW5zdGFsbEV2ZW50LCB1c2VyOiBBdXRoZW50aWNhdGVkQ29ubmVjdFVzZXIpID0+IHZvaWQ7XG4gIG9uV29ya2Zsb3dDaGFuZ2U/OiAoZXZlbnQ6IFdvcmtmbG93U3RhdGVDaGFuZ2VFdmVudCwgdXNlcjogQXV0aGVudGljYXRlZENvbm5lY3RVc2VyKSA9PiB2b2lkO1xuICBvbk9wZW4/OiAoZXZlbnQ6IFBvcnRhbE9wZW5FdmVudCwgdXNlcjogQXV0aGVudGljYXRlZENvbm5lY3RVc2VyKSA9PiB2b2lkO1xuICBvbkNsb3NlPzogKGV2ZW50OiBQb3J0YWxDbG9zZUV2ZW50LCB1c2VyOiBBdXRoZW50aWNhdGVkQ29ubmVjdFVzZXIpID0+IHZvaWQ7XG59O1xuXG5leHBvcnQgdHlwZSBVc2VyUHJvdmlkZWRJbnRlZ3JhdGlvbkNvbmZpZyA9IHtcbiAgLyoqXG4gICAqIHVzZWQgdG8gb3ZlcnJpZGUgcmVkaXJlY3QgdXJsIHBhc3NlZCBpbiBnZXRBdXRoVXJsIGluc3RlYWQgb2Ygb3VyIHBhc3Nwb3J0IHVybFxuICAgKi9cbiAgb3ZlcnJpZGVSZWRpcmVjdFVybD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhpcyB3aWxsIGFsbG93IHVzZXJzIHRvIHByb3ZpZGUgZHluYW1pYyBmaWVsZHMgb3B0aW9ucyBmb3Igb2JqZWN0IG1hcHBpbmcgaW5wdXRzXG4gICAqL1xuICBtYXBPYmplY3RGaWVsZHM/OiB7XG4gICAgW29iamVjdE5hbWU6IHN0cmluZ106IER5bmFtaWNNYXBwaW5nRmllbGRbXSB8IER5bmFtaWNNYXBwaW5nT3B0aW9ucztcbiAgfTtcbn07XG5cbmV4cG9ydCB0eXBlIENvbm5lY3RQYXJhbXMgPSBDYWxsYmFja01hcCAmIFVzZXJQcm92aWRlZEludGVncmF0aW9uQ29uZmlnICYgSW5zdGFsbE9wdGlvbnM7XG5cbmV4cG9ydCB0eXBlIEV2ZW50SW5mbyA9IHtcbiAgdHlwZTogU0RLX0VWRU5UO1xuICBpbnRlZ3JhdGlvbklkOiBzdHJpbmc7XG4gIGludGVncmF0aW9uVHlwZTogc3RyaW5nO1xuICB3b3JrZmxvd0lkPzogc3RyaW5nO1xuICB3b3JrZmxvd1N0YXRlQ2hhbmdlPzogUGFydGlhbDxJbnRlZ3JhdGlvbldvcmtmbG93U3RhdGU+O1xufTtcblxuZXhwb3J0IGVudW0gU0RLX0VWRU5UIHtcbiAgT05fSU5URUdSQVRJT05fSU5TVEFMTCA9ICdvbkludGVncmF0aW9uSW5zdGFsbCcsXG4gIE9OX0lOVEVHUkFUSU9OX1VOSU5TVEFMTCA9ICdvbkludGVncmF0aW9uVW5pbnN0YWxsJyxcbiAgT05fV09SS0ZMT1dfQ0hBTkdFID0gJ29uV29ya2Zsb3dDaGFuZ2UnLFxuICBPTl9QT1JUQUxfT1BFTiA9ICdvblBvcnRhbE9wZW4nLFxuICBPTl9QT1JUQUxfQ0xPU0UgPSAnb25Qb3J0YWxDbG9zZScsXG59XG5cbmV4cG9ydCB0eXBlIFNES0V2ZW50TGlzdGVuZXJNYXAgPSB7XG4gIFtTREtfRVZFTlQuT05fSU5URUdSQVRJT05fSU5TVEFMTF06IEFycmF5PFxuICAgIChldmVudDogSW50ZWdyYXRpb25JbnN0YWxsRXZlbnQsIHVzZXI6IEF1dGhlbnRpY2F0ZWRDb25uZWN0VXNlcikgPT4gdm9pZFxuICA+O1xuICBbU0RLX0VWRU5ULk9OX0lOVEVHUkFUSU9OX1VOSU5TVEFMTF06IEFycmF5PFxuICAgIChldmVudDogSW50ZWdyYXRpb25Vbmluc3RhbGxFdmVudCwgdXNlcjogQXV0aGVudGljYXRlZENvbm5lY3RVc2VyKSA9PiB2b2lkXG4gID47XG4gIFtTREtfRVZFTlQuT05fUE9SVEFMX0NMT1NFXTogQXJyYXk8XG4gICAgKGV2ZW50OiBQb3J0YWxDbG9zZUV2ZW50LCB1c2VyOiBBdXRoZW50aWNhdGVkQ29ubmVjdFVzZXIpID0+IHZvaWRcbiAgPjtcbiAgW1NES19FVkVOVC5PTl9QT1JUQUxfT1BFTl06IEFycmF5PFxuICAgIChldmVudDogUG9ydGFsT3BlbkV2ZW50LCB1c2VyOiBBdXRoZW50aWNhdGVkQ29ubmVjdFVzZXIpID0+IHZvaWRcbiAgPjtcbiAgW1NES19FVkVOVC5PTl9XT1JLRkxPV19DSEFOR0VdOiBBcnJheTxcbiAgICAoZXZlbnQ6IFdvcmtmbG93U3RhdGVDaGFuZ2VFdmVudCwgdXNlcjogQXV0aGVudGljYXRlZENvbm5lY3RVc2VyKSA9PiB2b2lkXG4gID47XG59O1xuXG5leHBvcnQgdHlwZSBMaXN0ZW5lckZ1bmN0aW9uID0gU0RLRXZlbnRMaXN0ZW5lck1hcFtrZXlvZiBTREtFdmVudExpc3RlbmVyTWFwXVtudW1iZXJdO1xuXG5leHBvcnQgZW51bSBEb2N1bWVudExvYWRpbmdTdGF0ZSB7XG4gIExPQURJTkcgPSAnbG9hZGluZycsXG4gIElOVEVSQUNUSVZFID0gJ2ludGVyYWN0aXZlJyxcbiAgQ09NUExFVEUgPSAnY29tcGxldGUnLFxufVxuXG5leHBvcnQgdHlwZSBUcmlnZ2VyV29ya2Zsb3dSZXF1ZXN0ID0ge1xuICBib2R5PzogUmVxdWVzdEluaXRbJ2JvZHknXSB8IG9iamVjdDtcbiAgaGVhZGVycz86IFJlcXVlc3RJbml0WydoZWFkZXJzJ107XG4gIHF1ZXJ5PzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn07XG4iLCJleHBvcnQgZW51bSBCaWxsaW5nUGxhbiB7XG4gIC8vIENsYXNzaWNcbiAgQ2xhc3NpY0ZyZWUgPSAnZnJlZScsXG4gIENsYXNzaWNTdGFydGVyID0gJ3N0YXJ0ZXInLFxuICBDbGFzc2ljQnVzaW5lc3MgPSAnYnVzaW5lc3MnLFxuICBDbGFzc2ljUHJlbWl1bSA9ICdwcmVtaXVtJyxcbiAgQ2xhc3NpY0VudGVycHJpc2UgPSAnZW50ZXJwcmlzZScsXG5cbiAgLy8gQ29ubmVjdFxuICBDb25uZWN0VHJpYWwgPSAnY29ubmVjdF90cmlhbCcsXG4gIENvbm5lY3RCYXNpYyA9ICdiYXNpYycsXG4gIENvbm5lY3RQcm8gPSAncHJvJyxcbiAgQ29ubmVjdEVudGVycHJpc2UgPSAnY29ubmVjdF9lbnRlcnByaXNlJyxcbn1cblxuZXhwb3J0IGVudW0gQ29ubmVjdEFkZE9uIHtcbiAgQ3VzdG9tSW50ZWdyYXRpb25CdWlsZGVyID0gJ2J5bycsXG4gIER5bmFtaWNGaWVsZE1hcHBlciA9ICdkZm0nLFxuICBIZWFkbGVzc0Nvbm5lY3RQb3J0YWwgPSAnaGVhZGxlc3MtY3AnLFxuICBUYXNrSGlzdG9yeUFQSSA9ICd0aC1hcGknLFxuICBNb25pdG9yaW5nID0gJ21vbml0b3JpbmcnLFxuICBSb2xlQmFzZWRBY2Nlc3NDb250cm9sID0gJ3JiYWMnLFxuICBVc2VyTWV0YWRhdGEgPSAndXNlci1tZXRhZGF0YScsXG4gIFdoaXRlTGFiZWxpbmcgPSAnd2hpdGVsYWJlbCcsXG4gIFdvcmtmbG93UGVybWlzc2lvbiA9ICd3b3JrZmxvdy1wZXJtaXNzaW9ucycsXG59XG5cbmV4cG9ydCB0eXBlIENvbm5lY3ROb25UcmlhbEJpbGxpbmdQbGFuID1cbiAgfCBCaWxsaW5nUGxhbi5Db25uZWN0QmFzaWNcbiAgfCBCaWxsaW5nUGxhbi5Db25uZWN0UHJvXG4gIHwgQmlsbGluZ1BsYW4uQ29ubmVjdEVudGVycHJpc2U7XG4iLCJpbXBvcnQgeyBOT0RFX0VOViwgUExBVEZPUk1fRU5WIH0gZnJvbSAnLi4vdHlwZXMvZW52aXJvbm1lbnQnO1xuXG4vKipcbiAqIGdldCBhc3NldCB1cmwgaS5lLiBjZG4gcHVibGljIHVybCBvciBkYXNoYm9hcmQgcHVibGljIHVybFxuICogQHBhcmFtIGVudlxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEFzc2V0VXJsID0gKHtcbiAgQ0ROX1BVQkxJQ19VUkw6IGNkbkhvc3QsXG4gIERBU0hCT0FSRF9QVUJMSUNfVVJMOiBkYXNoYm9hcmRQdWJsaWNVUkwsXG4gIFZFUlNJT046IHZlcnNpb24sXG4gIFBMQVRGT1JNX0VOVjogcGxhdGZvcm1FbnYsXG4gIE5PREVfRU5WOiBub2RlRW52LFxufToge1xuICBDRE5fUFVCTElDX1VSTDogc3RyaW5nO1xuICBEQVNIQk9BUkRfUFVCTElDX1VSTDogc3RyaW5nO1xuICBOT0RFX0VOVjogc3RyaW5nO1xuICBQTEFURk9STV9FTlY6IHN0cmluZztcbiAgVkVSU0lPTjogc3RyaW5nO1xufSk6IHN0cmluZyA9PiB7XG4gIGlmIChjZG5Ib3N0ICYmIG5vZGVFbnYgPT09IE5PREVfRU5WLlBST0RVQ1RJT04gJiYgcGxhdGZvcm1FbnYgIT09IFBMQVRGT1JNX0VOVi5FTlRFUlBSSVNFKSB7XG4gICAgcmV0dXJuIGAke2Nkbkhvc3R9LyR7dmVyc2lvbn0vZGFzaGJvYXJkL3B1YmxpY2A7XG4gIH1cblxuICByZXR1cm4gZGFzaGJvYXJkUHVibGljVVJMO1xufTtcbiIsImltcG9ydCB7IHNoYTI1NiB9IGZyb20gJ2hhc2guanMnO1xuXG4vKipcbiAqIGhhc2hlcyBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybnMge3N0cmluZ30gMTAgZGlnaXQgaGFzaFxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzaCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gc2hhMjU2KCkudXBkYXRlKHZhbHVlKS5kaWdlc3QoJ2hleCcpLnN1YnN0cigwLCAxMCk7XG59XG4iLCJ0eXBlIEdlbmVyaWNSZXNvbHZlPFQgPSBhbnk+ID0ge1xuICAodmFsdWU6IFQpOiB2b2lkO1xufTtcblxuLyoqXG4gKiBhIGhlbHBlciBjbGFzcyBmb3IgY3JlYXRpbmcgZGVmZXJyZWQgcHJvbWlzZXNcbiAqIEB0dXRvcmlhbCBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9HRm9sZXk4My81ODc3ZjZjMDlmYmNmZDYyNTY5YzUxZGM5MTQ0NGNmMFxuICovXG5leHBvcnQgY2xhc3MgRGVmZXJyZWRQcm9taXNlPFQ+IGltcGxlbWVudHMgUHJvbWlzZTxUPiB7XG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiAnUHJvbWlzZSc7XG5cbiAgcHJpdmF0ZSBfcHJvbWlzZTogUHJvbWlzZTxUPjtcbiAgcHJpdmF0ZSBfcmVzb2x2ZTogKHZhbHVlPzogVCB8IFByb21pc2VMaWtlPFQ+KSA9PiB2b2lkO1xuICBwcml2YXRlIF9yZWplY3Q6IChyZWFzb24/OiBhbnkpID0+IHZvaWQ7XG4gIHByaXZhdGUgX3N0YXRlOiAncGVuZGluZycgfCAnZnVsZmlsbGVkJyB8ICdyZWplY3RlZCcgPSAncGVuZGluZyc7XG5cbiAgcHVibGljIGdldCBzdGF0ZSgpOiAncGVuZGluZycgfCAnZnVsZmlsbGVkJyB8ICdyZWplY3RlZCcge1xuICAgIHJldHVybiB0aGlzLl9zdGF0ZTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX3Byb21pc2UgPSBuZXcgUHJvbWlzZTxUPihcbiAgICAgIChyZXNvbHZlOiAodmFsdWU6IFQgfCBQcm9taXNlTGlrZTxUPikgPT4gdm9pZCwgcmVqZWN0OiAocmVhc29uPzogYW55KSA9PiB2b2lkKSA9PiB7XG4gICAgICAgIHRoaXMuX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgICAgICB0aGlzLl9yZWplY3QgPSByZWplY3Q7XG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgdGhlbjxUUmVzdWx0MSwgVFJlc3VsdDI+KFxuICAgIG9uZnVsZmlsbGVkPzogKHZhbHVlOiBUKSA9PiBUUmVzdWx0MSB8IFByb21pc2VMaWtlPFRSZXN1bHQxPixcbiAgICBvbnJlamVjdGVkPzogKHJlYXNvbjogYW55KSA9PiBUUmVzdWx0MiB8IFByb21pc2VMaWtlPFRSZXN1bHQyPixcbiAgKTogUHJvbWlzZTxUUmVzdWx0MSB8IFRSZXN1bHQyPiB7XG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2UudGhlbihvbmZ1bGZpbGxlZCwgb25yZWplY3RlZCk7XG4gIH1cblxuICBwdWJsaWMgY2F0Y2g8VFJlc3VsdD4oXG4gICAgb25yZWplY3RlZD86IChyZWFzb246IGFueSkgPT4gVFJlc3VsdCB8IFByb21pc2VMaWtlPFRSZXN1bHQ+LFxuICApOiBQcm9taXNlPFQgfCBUUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2UuY2F0Y2gob25yZWplY3RlZCk7XG4gIH1cblxuICBwdWJsaWMgcmVzb2x2ZSh2YWx1ZT86IFQgfCBQcm9taXNlTGlrZTxUPik6IHZvaWQge1xuICAgIHRoaXMuX3Jlc29sdmUodmFsdWUpO1xuICAgIHRoaXMuX3N0YXRlID0gJ2Z1bGZpbGxlZCc7XG4gIH1cblxuICBwdWJsaWMgcmVqZWN0KHJlYXNvbj86IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX3JlamVjdChyZWFzb24pO1xuICAgIHRoaXMuX3N0YXRlID0gJ3JlamVjdGVkJztcbiAgfVxuXG4gIHB1YmxpYyBmaW5hbGx5KG9uZmluYWxseT86ICgpID0+IHZvaWQpOiBQcm9taXNlPFQ+IHtcbiAgICBvbmZpbmFsbHk/LigpO1xuICAgIHJldHVybiB0aGlzLl9wcm9taXNlO1xuICB9XG59XG5cbi8qKlxuICogZ2l2ZW4gYSB0eXBlIGRlZmluaXRpb24gb2YgYSByZWNvcmQgYW5kIHBvc3NpYmxlIHZhbHVlcyBmb3IgZWFjaCBrZXksXG4gKiBpdCBnZW5lcmF0ZXMgYW4gYXJyYXkgb2YgZXZlcnkgcGVybXV0YXRpb25cbiAqXG4gKiBAdGVtcGxhdGUgVFxuICogQHBhcmFtIHt7IFtrIGluIGtleW9mIFRdOiBUW2tdW10gfX0gaW5wdXRcbiAqIEByZXR1cm5zIHtUW119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZU1hdHJpeDxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55Pj4oXG4gIGlucHV0OiB7IFtrIGluIGtleW9mIFRdOiBUW2tdW10gfSxcbiAgbGltaXQ/OiBudW1iZXIsXG4pOiBUW10ge1xuICBjb25zdCBrZXlzOiAoa2V5b2YgVClbXSA9IE9iamVjdC5rZXlzKGlucHV0KTtcblxuICAvLyBJZiB0aGVyZSdzIG1vcmUgdGhhbiAxIGtleSBhbmQgYXQgbGVhc3QgMSBrZXkgaGFzIGEgdmFsdWUsXG4gIC8vIHRoZW4gd2Ugd2FudCB0byBwdXNoIGFuIGVtcHR5IGl0ZW0gdG8gdGhlIHZhbHVlcyB0aGF0IGRvbid0IGhhdmUgYW55IHBhcmFtZXRlcnNcbiAgLy8gT3RoZXJ3aXNlIGFuIGVtcHR5IG1hdHJpeCB3aWxsIGJlIGdlbmVyYXRlZFxuICBjb25zdCBudW1WYWx1ZXM6IG51bWJlciA9IGtleXMucmVkdWNlPG51bWJlcj4oXG4gICAgKHN1bTogbnVtYmVyLCBrZXk6IGtleW9mIFQpOiBudW1iZXIgPT4gc3VtICsgaW5wdXRba2V5XS5sZW5ndGgsXG4gICAgMCxcbiAgKTtcbiAgaWYgKG51bVZhbHVlcyAmJiBrZXlzLmxlbmd0aCkge1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgIGlmICghaW5wdXRba2V5XS5sZW5ndGgpIHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZSB3ZSB3YW50IHRvIHB1c2ggYW4gZW1wdHkgaXRlbSB0byB0aGUgdmFsdWVzIHRoYXQgZG9uJ3QgaGF2ZSBhbnkgcGFyYW1ldGVyc1xuICAgICAgICBpbnB1dFtrZXldLnB1c2godW5kZWZpbmVkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBwYXJhbXM6IFRbXSA9IE9iamVjdC5lbnRyaWVzKGlucHV0KVxuICAgIC5yZWR1Y2UoKHBhcnRpYWxNYXRyaXg6IGFueVtdLCBbLCB2YWx1ZXNdOiBbc3RyaW5nLCBhbnlbXV0pID0+IHtcbiAgICAgIGlmICghcGFydGlhbE1hdHJpeC5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlcy5tYXAoKHYpID0+IFt2XSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwYXJ0aWFsTWF0cml4LnJlZHVjZSgocmVkdWNlZCwgY3VycmVudCkgPT4ge1xuICAgICAgICB2YWx1ZXMuZm9yRWFjaCgodmFsKSA9PiB7XG4gICAgICAgICAgY29uc3QgY29weSA9IGN1cnJlbnQuc2xpY2UoKTtcbiAgICAgICAgICBjb3B5LnB1c2godmFsKTtcbiAgICAgICAgICByZWR1Y2VkLnB1c2goY29weSk7XG4gICAgICAgIH0sIFtdKTtcbiAgICAgICAgcmV0dXJuIHJlZHVjZWQ7XG4gICAgICB9LCBbXSk7XG4gICAgfSwgW10pXG4gICAgLnJlZHVjZSgobWF0cml4OiBUW10sIHZhbHVlczogYW55W10pOiBUW10gPT4ge1xuICAgICAgY29uc3QgcGFyYW06IFQgPSB2YWx1ZXMucmVkdWNlKFxuICAgICAgICAocGFyYW1zOiBQYXJ0aWFsPFQ+LCB2YWx1ZTogYW55LCBpbmRleDogbnVtYmVyKTogUGFydGlhbDxUPiA9PiAoe1xuICAgICAgICAgIC4uLnBhcmFtcyxcbiAgICAgICAgICBba2V5c1tpbmRleF1dOiB2YWx1ZSxcbiAgICAgICAgfSksXG4gICAgICAgIHt9LFxuICAgICAgKTtcbiAgICAgIHJldHVybiBbLi4ubWF0cml4LCBwYXJhbV07XG4gICAgfSwgW10pIGFzIHVua25vd24gYXMgVFtdO1xuXG4gIHJldHVybiBsaW1pdCA/IHBhcmFtcy5zbGljZSgtMSAqIGxpbWl0KSA6IHBhcmFtcztcbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gc2xlZXAobWlsbGlzZWNvbmRzOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiBHZW5lcmljUmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtaWxsaXNlY29uZHMpKTtcbn0iLCIvKipcbiAqIGNoZWNrIGlmIHVybCBpcyB2YWxpZCBvciBub3RcbiAqIEBwYXJhbSB1cmxcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBpc1ZhbGlkVXJsID0gKHVybDogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gIGNvbnN0IHNhbml0aXplZFVybDogc3RyaW5nID0gc2FuaXRpemVVcmwodXJsKTtcbiAgdHJ5IHtcbiAgICBuZXcgZ2xvYmFsVGhpcy5VUkwoc2FuaXRpemVkVXJsKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG4vKipcbiAqIGl0IHdpbGwgYWRkIGh0dHBzIHByb3RvY29sIGlmIHByb3RvY29sIGlzIG5vdCBhZGRlZCBpbiB1dGxcbiAqIEBwYXJhbSB1cmxcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzYW5pdGl6ZVVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICghdXJsKSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuXG4gIC8vIGlmIGFueSB1cmwgbm90IGNvbnRhaW4gcHJvdG9jb2wgdGhlbiBhZGQgaHR0cHNcbiAgaWYgKCF1cmwubWF0Y2goL15bYS16QS1aXSs6XFwvXFwvLykpIHtcbiAgICByZXR1cm4gYGh0dHBzOi8vJHt1cmx9YDtcbiAgfVxuICByZXR1cm4gdXJsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VydmljZVVybChzZXJ2aWNlOiBzdHJpbmcsIGRvbWFpbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcHJlZml4OiBzdHJpbmcgPSBgaHR0cHM6Ly9gO1xuICBjb25zdCBzdWZmaXg6IHN0cmluZyA9IGAuJHtkb21haW59YDtcbiAgcmV0dXJuIGAke3ByZWZpeH0ke3NlcnZpY2V9JHtzdWZmaXh9YDtcbn1cbiIsImltcG9ydCB7IERlZmVycmVkUHJvbWlzZSB9IGZyb20gJy4vZ2VuZXJpYyc7XG5cbi8qKlxuICogd2hldGhlciB0byBkZWJvdW5jZSBvciB0aHJvdHRsZSBjYWNoZWQgaXRlbXNcbiAqIGRlZmF1bHRzIHRvIGBEZWJvdW5jZWAgYmVoYXZpb3JcbiAqL1xuZXhwb3J0IGVudW0gQ2FjaGVNb2RlIHtcbiAgRGVib3VuY2UgPSAnZGVib3VuY2UnLFxuICBUaHJvdHRsZSA9ICd0aHJvdHRsZScsXG59XG5cbi8qKlxuICogdXNlZCBieSBhIENhY2hlVGhyb3R0bGUgaW5zdGFuY2UgdG8ga2VlcCB0cmFjayBvZiBpdHMgc3RhdGVcbiAqIHRoaXMgaXMgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnNcbiAqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5lbnVtIENhY2hlVGhyb3R0bGVTdGF0ZSB7XG4gIENsb3NlZCA9ICdjbG9zZWQnLFxuICBJZGxlID0gJ2lkbGUnLFxuICBQcm9jZXNzaW5nID0gJ3Byb2Nlc3NpbmcnLFxufVxuXG4vKipcbiAqIGFuIGVudHJ5IHdpdGhpbiBhIENhY2hlVGhyb3R0bGUgaW5zdGFuY2UncyBjYWNoZVxuICovXG50eXBlIENhY2hlVGhyb3R0bGVFbnRyeTxUPiA9IHtcbiAgbW9kZT86IENhY2hlTW9kZTtcbiAgdGltZW91dDogbnVtYmVyO1xuICB0dGw6IG51bWJlcjtcbiAgdmFsdWU6IFQ7XG59O1xuXG4vKipcbiAqIHRoZSBpbi1tZW1vcnkgY2FjaGUgYSBDYWNoZVRocm90dGxlIGluc3RhbmNlIHVzZXNcbiAqL1xudHlwZSBDYWNoZVRocm90dGxlU3RvcmU8VD4gPSBSZWNvcmQ8c3RyaW5nLCBDYWNoZVRocm90dGxlRW50cnk8VD4+O1xuXG4vKipcbiAqIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBmb3IgYSBDYWNoZVRocm90dGxlIGluc3RhbmNlXG4gKi9cbmV4cG9ydCB0eXBlIENhY2hlVGhyb3R0bGVDb25maWc8VCA9IGFueT4gPSBQYXJ0aWFsPHtcbiAgLyoqXG4gICAqIHdoZW4gZW5hYmxlZCwgdGhpcyBjbGVhcnMgcGVuZGluZyBgZGVsYCBjYWxscyBmcm9tIHRoZSBxdWV1ZSB3aGVuIGBnZXRgLCBgc2V0YCwgb3IgYGdldE9yU2V0YCBpcyBjYWxsZWRcbiAgICogdGhpcyBjYW4gYmUgdXNlZCB0byBwcmV2ZW50IHF1ZXVlZCBkZWxldGUgY2FsbHMgZnJvbSBkZWxldGluZyByZWNlbnRseSByZXRyaWV2ZWQgc3RhdGVmdWwgdmFsdWVzLCBsaWtlIGRiIGNvbm5lY3Rpb25zXG4gICAqL1xuICBjbGVhclBlbmRpbmdEZWxldGVzOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiB3aGV0aGVyIHRvIG9wZXJhdGUgaW4gVGhyb3R0bGUgb3IgRGVib3VuY2UgbW9kZVxuICAgKi9cbiAgbW9kZTogQ2FjaGVNb2RlO1xuXG4gIC8qKlxuICAgKiBhbiBvcHRpb25hbCBjYWxsYmFjayBmb3IgaGFuZGxpbmcgaXRlbXMgd2hlbiB0aGV5IGdldCBkZXJlZ2lzdGVyZWQgZnJvbSB0aGUgY2FjaGVcbiAgICovXG4gIG9uRGVyZWdpc3RlcjogKHZhbHVlOiBUKSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZDtcblxuICAvKipcbiAgICogYW4gb3B0aW9uYWwgY2FsbGJhY2sgZm9yIHNlcmlhbGl6aW5nIGtleXNcbiAgICogaW4gdGhlIGNhc2UgdGhhdCBrZXlzIGFyZSBwYXJ0aWN1bGFybHkgbG9uZywgdGhpcyBjYW4gYmUgdXNlZCB0byBzaG9ydGVuIHRoZW1cbiAgICovXG4gIHNlcmlhbGl6ZUtleTogKGtleTogc3RyaW5nKSA9PiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIGhvdyBsb25nIGl0ZW1zIHNob3VsZCByZW1haW4gaW4gdGhlIGNhY2hlXG4gICAqIHRoZSB0dGwgaXMgcmVzZXQgZXZlcnkgdGltZSBhIGtleSBpcyBhY2Nlc3NlZFxuICAgKi9cbiAgdHRsOiBudW1iZXI7XG59PjtcblxuLyoqXG4gKiB0aGUgb3BlcmF0aW9ucyB0aGF0IGNhbiBpbnRlcm5hbGx5IGJlIHF1ZXVlZCBieSBhIENhY2hlVGhyb3R0bGUgaW5zdGFuY2VcbiAqL1xuZW51bSBDYWNoZVRocm90dGxlT3BlcmF0aW9uIHtcbiAgR2V0LFxuICBTZXQsXG4gIEdldE9yU2V0LFxuICBEZWwsXG4gIERvLFxufVxuXG4vKipcbiAqIHF1ZXVlIGl0ZW0sIGNvbnNpc3RzIG9mIGEga2V5LCBtZXRob2QgbmFtZSwgY2FsbGJhY2sgYW5kIGEgcHJvbWlzZSBmb3Igd2hlbiB0aGUgbWV0aG9kIHJlc29sdmVzXG4gKi9cbnR5cGUgUXVldWVJdGVtPFQ+ID0gW3N0cmluZywgQ2FjaGVUaHJvdHRsZU9wZXJhdGlvbiwgKCkgPT4gUHJvbWlzZTxUPiwgRGVmZXJyZWRQcm9taXNlPFQ+XTtcblxuLyoqXG4gKiBBIGhlbHBlciBjbGFzcyBmb3IgY2FjaGluZyBpdGVtcyBpbiBtZW1vcnkgYW5kIHRocm90dGxpbmcgLyBkZWJvdW5jaW5nIGZ1bmN0aW9uIGNhbGxzXG4gKiBtZXRob2RzIGZvciBnZXR0ZXJzLCBzZXR0ZXJzLCBhbmQgZXhlY3V0b3JzIGFyZSBxdWV1ZWQgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMgYmV0d2VlbiBjYWxscy5cbiAqIEl0IHByb3ZpZGVzIGhlbHBlciBtZXRob2RzIGZvciBoYW5kbGluZyBkZXJlZ2lzdGVyaW5nIG9mIGl0ZW1zLlxuICogVXNlZnVsIGZvciBjYWNoaW5nIGRhdGFiYXNlIGNvbm5lY3Rpb25zIG9yIHJhdGUtbGltaXRpbmcgb3V0Z29pbmcgU2VudHJ5IGNhbGxzLlxuICovXG5leHBvcnQgY2xhc3MgQ2FjaGVUaHJvdHRsZTxUID0gYW55PiB7XG4gICNzdGF0ZSA9IENhY2hlVGhyb3R0bGVTdGF0ZS5JZGxlO1xuXG4gIC8qKlxuICAgKiBpbiBtZW1vcnkgY2FjaGVcbiAgICovXG4gICNzdG9yZTogQ2FjaGVUaHJvdHRsZVN0b3JlPFQ+ID0ge307XG5cbiAgLyoqXG4gICAqIHRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgY2xhc3NcbiAgICovXG4gICNjb25maWc6IENhY2hlVGhyb3R0bGVDb25maWc8VD47XG5cbiAgLyoqXG4gICAqIGEgcXVldWUgb2YgbWV0aG9kcyB0byBiZSBjYWxsZWQuIGNvbnNpc3RzIG9mIGEga2V5LCBtZXRob2QgbmFtZSwgYW5kIGNhbGxiYWNrIGFuZCBhIHByb21pc2UgZm9yIHdoZW4gdGhlIG1ldGhvZCByZXNvbHZlc1xuICAgKiBbc2VyaWFsaXplZEtleTogc3RyaW5nLCBjYWxsYmFjazogKCkgPT4gUHJvbWlzZTxUPiwgcHJvbWlzZTogUHJvbWlzZTxUPl1cbiAgICovXG4gICNxdWV1ZTogQXJyYXk8UXVldWVJdGVtPFQ+PiA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogQ2FjaGVUaHJvdHRsZUNvbmZpZzxUPiA9IHt9KSB7XG4gICAgLy8gU2V0dGluZyBkZWZhdWx0IHZhbHVlcyBmb3IgYG1vZGVgIGFuZCBgdHRsYFxuICAgIHRoaXMuI2NvbmZpZyA9IHtcbiAgICAgIG1vZGU6IENhY2hlTW9kZS5EZWJvdW5jZSxcbiAgICAgIHR0bDogMCxcbiAgICAgIC4uLmNvbmZpZyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIGF0dGVtcHRzIHRvIHJldHJpZXZlIGEga2V5IGZyb20gdGhlIGNhY2hlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAgICogQHBhcmFtIHtib29sZWFufSBbYXNhcF0gYXNhcCA9IGFzIHNvb24gYXMgcG9zc2libGUuIHNob3VsZCB0aGlzIGJlIHF1ZXVlZCBvciBleGVjdXRlIGltbWVkaWF0ZWx5XG4gICAqIEByZXR1cm5zIHsoUHJvbWlzZTxUIHwgdW5kZWZpbmVkPil9XG4gICAqIEBtZW1iZXJvZiBDYWNoZVRocm90dGxlXG4gICAqL1xuICBhc3luYyBnZXQoa2V5OiBzdHJpbmcsIGFzYXA/OiBib29sZWFuKTogUHJvbWlzZTxUIHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3Qgc2VyaWFsaXplZEtleTogc3RyaW5nID0gdGhpcy5zZXJpYWxpemVLZXkoa2V5KTtcbiAgICBjb25zdCBjYWxsYmFjazogKCkgPT4gUHJvbWlzZTxUPiA9IGFzeW5jICgpOiBQcm9taXNlPFQ+ID0+IHtcbiAgICAgIGNvbnN0IGVudHJ5OiBDYWNoZVRocm90dGxlRW50cnk8VD4gfCB1bmRlZmluZWQgPSB0aGlzLiNzdG9yZVtzZXJpYWxpemVkS2V5XTtcbiAgICAgIGNvbnN0IHsgbW9kZSwgdHRsLCB2YWx1ZSB9ID0gZW50cnkgPz8ge307XG5cbiAgICAgIGlmIChlbnRyeSAmJiB0dGwgJiYgKCFtb2RlIHx8IG1vZGUgPT09IENhY2hlTW9kZS5EZWJvdW5jZSkpIHtcbiAgICAgICAgdGhpcy5yZWZyZXNoVGltZW91dChrZXksIHNlcmlhbGl6ZWRLZXksIHR0bCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLiNjb25maWcuY2xlYXJQZW5kaW5nRGVsZXRlcykge1xuICAgICAgICB0aGlzLmNsZWFyUGVuZGluZ0RlbGV0ZXNPbktleShzZXJpYWxpemVkS2V5LCB2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGFzYXAgPyBjYWxsYmFjaygpIDogdGhpcy5lbnF1ZXVlKHNlcmlhbGl6ZWRLZXksIENhY2hlVGhyb3R0bGVPcGVyYXRpb24uR2V0LCBjYWxsYmFjayk7XG4gIH1cblxuICAvKipcbiAgICogc3RvcmVzIGFuIGl0ZW0gaW4gdGhlIGNhY2hlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAgICogQHBhcmFtIHtUfSB2YWx1ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gW3R0bD10aGlzLl1cbiAgICogQHBhcmFtIHsqfSBjb25maWdcbiAgICogQHBhcmFtIHsqfSB0dGxcbiAgICogQHBhcmFtIHtDYWNoZU1vZGV9IFttb2RlXVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFthc2FwXSBhc2FwID0gYXMgc29vbiBhcyBwb3NzaWJsZS4gc2hvdWxkIHRoaXMgYmUgcXVldWVkIG9yIGV4ZWN1dGUgaW1tZWRpYXRlbHlcbiAgICogQHJldHVybnMge1Byb21pc2U8VD59XG4gICAqIEBtZW1iZXJvZiBDYWNoZVRocm90dGxlXG4gICAqL1xuICBhc3luYyBzZXQoXG4gICAga2V5OiBzdHJpbmcsXG4gICAgdmFsdWU6IFQsXG4gICAgdHRsOiBudW1iZXIgPSB0aGlzLiNjb25maWcudHRsIGFzIG51bWJlcixcbiAgICBtb2RlPzogQ2FjaGVNb2RlLFxuICAgIGFzYXA/OiBib29sZWFuLFxuICApOiBQcm9taXNlPFQ+IHtcbiAgICBjb25zdCBzZXJpYWxpemVkS2V5OiBzdHJpbmcgPSB0aGlzLnNlcmlhbGl6ZUtleShrZXkpO1xuICAgIGNvbnN0IGNhbGxiYWNrOiAoKSA9PiBQcm9taXNlPFQ+ID0gYXN5bmMgKCk6IFByb21pc2U8VD4gPT4ge1xuICAgICAgY29uc3QgZW50cnk6IENhY2hlVGhyb3R0bGVFbnRyeTxUPiB8IHVuZGVmaW5lZCA9IHRoaXMuI3N0b3JlW3NlcmlhbGl6ZWRLZXldO1xuICAgICAgY29uc3QgZGlkUHJldmlvdXNseUV4aXN0OiBib29sZWFuID0gZW50cnkgPyB0cnVlIDogZmFsc2U7XG4gICAgICB0aGlzLiNzdG9yZVtzZXJpYWxpemVkS2V5XSA9IHtcbiAgICAgICAgLi4uZW50cnksXG4gICAgICAgIG1vZGUsXG4gICAgICAgIHR0bCxcbiAgICAgICAgdmFsdWUsXG4gICAgICB9O1xuXG4gICAgICBpZiAoIWRpZFByZXZpb3VzbHlFeGlzdCB8fCBtb2RlICE9PSBDYWNoZU1vZGUuVGhyb3R0bGUpIHtcbiAgICAgICAgdGhpcy5yZWZyZXNoVGltZW91dChrZXksIHNlcmlhbGl6ZWRLZXksIHR0bCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLiNjb25maWcuY2xlYXJQZW5kaW5nRGVsZXRlcykge1xuICAgICAgICB0aGlzLmNsZWFyUGVuZGluZ0RlbGV0ZXNPbktleShzZXJpYWxpemVkS2V5LCB2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGFzYXAgPyBjYWxsYmFjaygpIDogdGhpcy5lbnF1ZXVlKHNlcmlhbGl6ZWRLZXksIENhY2hlVGhyb3R0bGVPcGVyYXRpb24uU2V0LCBjYWxsYmFjayk7XG4gIH1cblxuICAvKipcbiAgICogYXR0ZW1wdHMgdG8gcmV0cmlldmUgYSB2YWx1ZSBmcm9tIHRoZSBjYWNoZVxuICAgKiBpZiBpdCdzIG5vdCBhdmFpbGFibGUsIGl0IHNldHMgdGhlIHZhbHVlIHVzaW5nIHRoZSBwcm92aWRlZCBnZW5lcmF0b3IgbWV0aG9kXG4gICAqL1xuICBhc3luYyBnZXRPclNldChcbiAgICBrZXk6IHN0cmluZyxcbiAgICBnZW5lcmF0b3I6ICgpID0+IFQgfCBQcm9taXNlPFQ+LFxuICAgIHR0bDogbnVtYmVyID0gdGhpcy4jY29uZmlnLnR0bCBhcyBudW1iZXIsXG4gICAgbW9kZTogQ2FjaGVNb2RlID0gdGhpcy4jY29uZmlnLm1vZGUgYXMgQ2FjaGVNb2RlLFxuICAgIGFzYXA/OiBib29sZWFuLFxuICApOiBQcm9taXNlPFQ+IHtcbiAgICBjb25zdCBzZXJpYWxpemVkS2V5OiBzdHJpbmcgPSB0aGlzLnNlcmlhbGl6ZUtleShrZXkpO1xuICAgIGNvbnN0IGNhbGxiYWNrOiAoKSA9PiBQcm9taXNlPFQ+ID0gYXN5bmMgKCk6IFByb21pc2U8VD4gPT4ge1xuICAgICAgaWYgKHRoaXMuI3N0b3JlW3NlcmlhbGl6ZWRLZXldKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNzdG9yZVtzZXJpYWxpemVkS2V5XS52YWx1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdmFsdWU6IFQgPSBhd2FpdCBnZW5lcmF0b3IoKTtcbiAgICAgIGF3YWl0IHRoaXMuc2V0KGtleSwgdmFsdWUsIHR0bCwgbW9kZSwgdHJ1ZSk7XG5cbiAgICAgIGlmICh0aGlzLiNjb25maWcuY2xlYXJQZW5kaW5nRGVsZXRlcykge1xuICAgICAgICB0aGlzLmNsZWFyUGVuZGluZ0RlbGV0ZXNPbktleShzZXJpYWxpemVkS2V5LCB2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGFzYXBcbiAgICAgID8gY2FsbGJhY2soKVxuICAgICAgOiB0aGlzLmVucXVldWUoc2VyaWFsaXplZEtleSwgQ2FjaGVUaHJvdHRsZU9wZXJhdGlvbi5HZXRPclNldCwgY2FsbGJhY2spO1xuICB9XG5cbiAgLyoqXG4gICAqIGRlbGV0ZXMgYW4gaXRlbSBmcm9tIHRoZSBjYWNoZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzS2V5U2VyaWFsaXplZD1mYWxzZV1cbiAgICogQHBhcmFtIHtib29sZWFufSBbYXNhcF0gYXNhcCA9IGFzIHNvb24gYXMgcG9zc2libGUuIHNob3VsZCB0aGlzIGJlIHF1ZXVlZCBvciBleGVjdXRlIGltbWVkaWF0ZWx5XG4gICAqIEByZXR1cm5zIHsoUHJvbWlzZTxUIHwgdW5kZWZpbmVkPil9XG4gICAqIEBtZW1iZXJvZiBDYWNoZVRocm90dGxlXG4gICAqL1xuICBhc3luYyBkZWwoa2V5OiBzdHJpbmcsIGlzS2V5U2VyaWFsaXplZDogYm9vbGVhbiA9IGZhbHNlLCBhc2FwPzogYm9vbGVhbik6IFByb21pc2U8VCB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IHNlcmlhbGl6ZWRLZXk6IHN0cmluZyA9IGlzS2V5U2VyaWFsaXplZCA/IGtleSA6IHRoaXMuc2VyaWFsaXplS2V5KGtleSk7XG4gICAgY29uc3QgY2FsbGJhY2s6ICgpID0+IFByb21pc2U8VD4gPSBhc3luYyAoKTogUHJvbWlzZTxUPiA9PiB7XG4gICAgICBjb25zdCBlbnRyeTogQ2FjaGVUaHJvdHRsZUVudHJ5PFQ+IHwgdW5kZWZpbmVkID0gdGhpcy4jc3RvcmVbc2VyaWFsaXplZEtleV07XG4gICAgICBsZXQgdmFsdWU6IFQgfCB1bmRlZmluZWQ7XG5cbiAgICAgIGlmIChlbnRyeT8udGltZW91dCkge1xuICAgICAgICBjbGVhclRpbWVvdXQoZW50cnkudGltZW91dCBhcyB1bmtub3duIGFzIE5vZGVKUy5UaW1lb3V0KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgIHZhbHVlID0gZW50cnkudmFsdWU7XG4gICAgICAgIGRlbGV0ZSB0aGlzLiNzdG9yZVtzZXJpYWxpemVkS2V5XTtcblxuICAgICAgICAvLyBUT0RPOiBsb2cgYG9uRGVyZWdpc2VyYCBlcnJvcnNcbiAgICAgICAgLy8gVGhlIGBAc2hhcmVkL3V0aWxzL3Nka2AgbGlicmFyeSB0aGF0IHRoaXMgZmlsZSBpcyBzdG9yZWQgaW4gaXMgc2hhcmVkIHdpdGggdGhlIGRhc2hib2FyZC5cbiAgICAgICAgLy8gVW5mb3J0dW5hdGVseSB3ZSBjdXJyZW50bHkgZG9uJ3QgaGF2ZSBzdXBwb3J0IGZvciB1c2luZyBgQHNoYXJlZC9sb2dnZXIvc2RrYCBpbiBhbnkgZmlsZXMgdXNlZCBieSBpdC5cbiAgICAgICAgLy8gVGhhdCBtZWFucyB3ZSd2ZSBnb3QgdG8gc2lsZW50bHkgZmFpbCB0aGlzIGZvciBub3cg8J+YhVxuICAgICAgICAvL1xuICAgICAgICAvLyBBZGRpdGlvbmFsbHksIHRoaXMgaXMgbWVzc3kgYmVjYXVzZSBvbkRlcmVnaXN0ZXIgbWF5IGJlIHN5bmNocm9ub3VzIGFuZCBub3QgcmV0dXJuIGEgcHJvbWlzZS5cbiAgICAgICAgLy8gV2UgaGFkIHRvIHdyYXAgaXQgaW4gYW4gYXN5bmNocm9ub3VzIGNhbGwgdG8gZ2V0IHRoZSBwcm9taXNlLlxuICAgICAgICAvLyBgc2V0SW1tZWRpYXRlYCBvciBgcHJvY2Vzcy5uZXh0VGlja2Agd2Fzbid0IGdyZWF0IGJlY2F1c2Ugd2UgY2FuJ3QgcmVsaWFibHkgdGVzdCB0aGF0IGl0IHdvcmtlZC5cbiAgICAgICAgYXdhaXQgKGFzeW5jICgpID0+IHRoaXMuI2NvbmZpZy5vbkRlcmVnaXN0ZXI/Lih2YWx1ZSkpKCkuY2F0Y2goKF9lOiBFcnJvcikgPT4ge30pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdmFsdWUgYXMgVDtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGFzYXAgPyBjYWxsYmFjaygpIDogdGhpcy5lbnF1ZXVlKHNlcmlhbGl6ZWRLZXksIENhY2hlVGhyb3R0bGVPcGVyYXRpb24uRGVsLCBjYWxsYmFjayk7XG4gIH1cblxuICAvKipcbiAgICogcmV0dXJucyB0aGUga2V5cyBzdG9yZWQgaW4gdGhlIGNhY2hlXG4gICAqL1xuICBrZXlzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy4jc3RvcmUpO1xuICB9XG5cbiAgLyoqXG4gICAqIGV4ZWN1dGVzIGEgbWV0aG9kLiB0aGUgYGtleWAgaXMgdXNlZCBhcyBhIHVuaXF1ZSBpZGVudGlmaWVyIGZvciByYXRlLWxpbWl0aW5nIGNhbGxzXG4gICAqL1xuICBhc3luYyBkbyhcbiAgICBrZXk6IHN0cmluZyxcbiAgICBtZXRob2Q6ICgpID0+IFQgfCBQcm9taXNlPFQ+LFxuICAgIHR0bDogbnVtYmVyID0gdGhpcy4jY29uZmlnLnR0bCBhcyBudW1iZXIsXG4gICAgbW9kZTogQ2FjaGVNb2RlID0gdGhpcy4jY29uZmlnLm1vZGUgYXMgQ2FjaGVNb2RlLFxuICApOiBQcm9taXNlPFQ+IHtcbiAgICBjb25zdCBzZXJpYWxpemVkS2V5OiBzdHJpbmcgPSB0aGlzLnNlcmlhbGl6ZUtleShrZXkpO1xuICAgIHJldHVybiB0aGlzLmVucXVldWUoc2VyaWFsaXplZEtleSwgQ2FjaGVUaHJvdHRsZU9wZXJhdGlvbi5EbywgYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuI3N0b3JlW3NlcmlhbGl6ZWRLZXldKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNzdG9yZVtzZXJpYWxpemVkS2V5XS52YWx1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzdWx0OiBUID0gYXdhaXQgbWV0aG9kKCk7XG4gICAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCB0aGlzLnNldChrZXksIHJlc3VsdCwgdHRsLCBtb2RlLCB0cnVlKTtcbiAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogcmVtb3ZlcyBhbGwgdGhlIGl0ZW1zIGZyb20gdGhlIGNhY2hlLCBjbGVhcnMgdGltZW91dHMsIGFuZCBjYWxscyBkZXJlZ2lzdGVyIG1ldGhvZHNcbiAgICovXG4gIGFzeW5jIGNsb3NlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuI3N0YXRlID0gQ2FjaGVUaHJvdHRsZVN0YXRlLkNsb3NlZDtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChPYmplY3Qua2V5cyh0aGlzLiNzdG9yZSkubWFwKChrZXk6IHN0cmluZykgPT4gdGhpcy5kZWwoa2V5LCB0cnVlLCB0cnVlKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIHJlZnJlc2hlcyBhIHNldCBpbnRlcnZhbCBmb3IgY2xlYXJpbmcgYW4gaXRlbSBmcm9tIHRoZSBjYWNoZVxuICAgKiBpZiBhbiBleGlzdGluZyBpbnRlcnZhbCBleGlzdHMsIGl0IHJlbW92ZXMgaXRcbiAgICovXG4gIHByaXZhdGUgcmVmcmVzaFRpbWVvdXQoa2V5OiBzdHJpbmcsIHNlcmlhbGl6ZWRLZXk6IHN0cmluZywgdHRsOiBudW1iZXIpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgIGlmICh0aGlzLiNzdGF0ZSA9PT0gQ2FjaGVUaHJvdHRsZVN0YXRlLkNsb3NlZCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBlbnRyeTogQ2FjaGVUaHJvdHRsZUVudHJ5PFQ+IHwgdW5kZWZpbmVkID0gdGhpcy4jc3RvcmVbc2VyaWFsaXplZEtleV07XG5cbiAgICBpZiAodHRsICYmIGVudHJ5Py50aW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNsZWFyVGltZW91dChlbnRyeS50aW1lb3V0IGFzIHVua25vd24gYXMgTm9kZUpTLlRpbWVvdXQpO1xuICAgIH1cblxuICAgIGlmICh0dGwpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbWlzdXNlZC1wcm9taXNlc1xuICAgICAgZW50cnkudGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5kZWwoa2V5KSwgdHRsKSBhcyB1bmtub3duIGFzIG51bWJlcjtcbiAgICAgIHJldHVybiBlbnRyeS50aW1lb3V0O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiByZW1vdmVzIGFueSBwZW5kaW5nIGRlbGV0ZSBjYWxscyBvbiBhIGtleVxuICAgKiBAcGFyYW0ga2V5XG4gICAqL1xuICBwcml2YXRlIGNsZWFyUGVuZGluZ0RlbGV0ZXNPbktleShrZXk6IHN0cmluZywgY3VycmVudFZhbHVlOiBUKTogdm9pZCB7XG4gICAgdGhpcy4jcXVldWUgPSB0aGlzLiNxdWV1ZS5maWx0ZXIoKFtfa2V5LCBvcGVyYXRpb24sIF9tZXRob2QsIHByb21pc2VdKSA9PiB7XG4gICAgICBpZiAoa2V5ID09PSBfa2V5ICYmIG9wZXJhdGlvbiA9PT0gQ2FjaGVUaHJvdHRsZU9wZXJhdGlvbi5EZWwpIHtcbiAgICAgICAgcHJvbWlzZS5yZXNvbHZlKGN1cnJlbnRWYWx1ZSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogZ2VuZXJhdGVzIHRoZSBrZXkgdXNlZCBmb3Igc3RvcmluZyBpdGVtcyBpbiB0aGUgY2FjaGVcbiAgICovXG4gIHByaXZhdGUgc2VyaWFsaXplS2V5KGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy4jY29uZmlnLnNlcmlhbGl6ZUtleT8uKGtleSkgPz8ga2V5O1xuICB9XG5cbiAgLyoqXG4gICAqIHF1ZXVlcyBhIG1ldGhvZCBmb3IgcHJvY2Vzc2luZ1xuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBlbnF1ZXVlKFxuICAgIHNlcmlhbGl6ZWRLZXk6IHN0cmluZyxcbiAgICBvcGVyYXRpb246IENhY2hlVGhyb3R0bGVPcGVyYXRpb24sXG4gICAgbWV0aG9kOiAoKSA9PiBQcm9taXNlPFQ+LFxuICApOiBQcm9taXNlPFQ+IHtcbiAgICBjb25zdCBwcm9taXNlOiBEZWZlcnJlZFByb21pc2U8VD4gPSBuZXcgRGVmZXJyZWRQcm9taXNlPFQ+KCk7XG4gICAgdGhpcy4jcXVldWUucHVzaChbc2VyaWFsaXplZEtleSwgb3BlcmF0aW9uLCBtZXRob2QsIHByb21pc2VdKTtcblxuICAgIGlmICh0aGlzLiNzdGF0ZSA9PT0gQ2FjaGVUaHJvdHRsZVN0YXRlLklkbGUpIHtcbiAgICAgIHRoaXMuZmx1c2goKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBjYWxscyB0aGUgbWV0aG9kcyBpbiB0aGUgcXVldWVcbiAgICovXG4gIHByaXZhdGUgZmx1c2goKTogdm9pZCB7XG4gICAgdGhpcy4jc3RhdGUgPSBDYWNoZVRocm90dGxlU3RhdGUuUHJvY2Vzc2luZztcblxuICAgIHByb2Nlc3MubmV4dFRpY2soYXN5bmMgKCkgPT4ge1xuICAgICAgd2hpbGUgKHRoaXMuI3F1ZXVlLmxlbmd0aCAmJiB0aGlzLiNzdGF0ZSAhPT0gQ2FjaGVUaHJvdHRsZVN0YXRlLkNsb3NlZCkge1xuICAgICAgICBjb25zdCBjdXJyZW50SXRlbTogUXVldWVJdGVtPFQ+IHwgdW5kZWZpbmVkID0gdGhpcy4jcXVldWUuc2hpZnQoKTtcbiAgICAgICAgaWYgKGN1cnJlbnRJdGVtKSB7XG4gICAgICAgICAgY29uc3QgWywgLCBjdXJyZW50TWV0aG9kLCBjdXJyZW50UHJvbWlzZV0gPSBjdXJyZW50SXRlbTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3Qgb3V0cHV0OiBUID0gYXdhaXQgY3VycmVudE1ldGhvZCgpO1xuICAgICAgICAgICAgY3VycmVudFByb21pc2UucmVzb2x2ZShvdXRwdXQpO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGN1cnJlbnRQcm9taXNlLnJlamVjdChlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy4jc3RhdGUgPSBDYWNoZVRocm90dGxlU3RhdGUuSWRsZTtcbiAgICB9KTtcbiAgfVxufVxuIiwidmFyIGhhc2ggPSBleHBvcnRzO1xuXG5oYXNoLnV0aWxzID0gcmVxdWlyZSgnLi9oYXNoL3V0aWxzJyk7XG5oYXNoLmNvbW1vbiA9IHJlcXVpcmUoJy4vaGFzaC9jb21tb24nKTtcbmhhc2guc2hhID0gcmVxdWlyZSgnLi9oYXNoL3NoYScpO1xuaGFzaC5yaXBlbWQgPSByZXF1aXJlKCcuL2hhc2gvcmlwZW1kJyk7XG5oYXNoLmhtYWMgPSByZXF1aXJlKCcuL2hhc2gvaG1hYycpO1xuXG4vLyBQcm94eSBoYXNoIGZ1bmN0aW9ucyB0byB0aGUgbWFpbiBvYmplY3Rcbmhhc2guc2hhMSA9IGhhc2guc2hhLnNoYTE7XG5oYXNoLnNoYTI1NiA9IGhhc2guc2hhLnNoYTI1Njtcbmhhc2guc2hhMjI0ID0gaGFzaC5zaGEuc2hhMjI0O1xuaGFzaC5zaGEzODQgPSBoYXNoLnNoYS5zaGEzODQ7XG5oYXNoLnNoYTUxMiA9IGhhc2guc2hhLnNoYTUxMjtcbmhhc2gucmlwZW1kMTYwID0gaGFzaC5yaXBlbWQucmlwZW1kMTYwO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xuXG5mdW5jdGlvbiBCbG9ja0hhc2goKSB7XG4gIHRoaXMucGVuZGluZyA9IG51bGw7XG4gIHRoaXMucGVuZGluZ1RvdGFsID0gMDtcbiAgdGhpcy5ibG9ja1NpemUgPSB0aGlzLmNvbnN0cnVjdG9yLmJsb2NrU2l6ZTtcbiAgdGhpcy5vdXRTaXplID0gdGhpcy5jb25zdHJ1Y3Rvci5vdXRTaXplO1xuICB0aGlzLmhtYWNTdHJlbmd0aCA9IHRoaXMuY29uc3RydWN0b3IuaG1hY1N0cmVuZ3RoO1xuICB0aGlzLnBhZExlbmd0aCA9IHRoaXMuY29uc3RydWN0b3IucGFkTGVuZ3RoIC8gODtcbiAgdGhpcy5lbmRpYW4gPSAnYmlnJztcblxuICB0aGlzLl9kZWx0YTggPSB0aGlzLmJsb2NrU2l6ZSAvIDg7XG4gIHRoaXMuX2RlbHRhMzIgPSB0aGlzLmJsb2NrU2l6ZSAvIDMyO1xufVxuZXhwb3J0cy5CbG9ja0hhc2ggPSBCbG9ja0hhc2g7XG5cbkJsb2NrSGFzaC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKG1zZywgZW5jKSB7XG4gIC8vIENvbnZlcnQgbWVzc2FnZSB0byBhcnJheSwgcGFkIGl0LCBhbmQgam9pbiBpbnRvIDMyYml0IGJsb2Nrc1xuICBtc2cgPSB1dGlscy50b0FycmF5KG1zZywgZW5jKTtcbiAgaWYgKCF0aGlzLnBlbmRpbmcpXG4gICAgdGhpcy5wZW5kaW5nID0gbXNnO1xuICBlbHNlXG4gICAgdGhpcy5wZW5kaW5nID0gdGhpcy5wZW5kaW5nLmNvbmNhdChtc2cpO1xuICB0aGlzLnBlbmRpbmdUb3RhbCArPSBtc2cubGVuZ3RoO1xuXG4gIC8vIEVub3VnaCBkYXRhLCB0cnkgdXBkYXRpbmdcbiAgaWYgKHRoaXMucGVuZGluZy5sZW5ndGggPj0gdGhpcy5fZGVsdGE4KSB7XG4gICAgbXNnID0gdGhpcy5wZW5kaW5nO1xuXG4gICAgLy8gUHJvY2VzcyBwZW5kaW5nIGRhdGEgaW4gYmxvY2tzXG4gICAgdmFyIHIgPSBtc2cubGVuZ3RoICUgdGhpcy5fZGVsdGE4O1xuICAgIHRoaXMucGVuZGluZyA9IG1zZy5zbGljZShtc2cubGVuZ3RoIC0gciwgbXNnLmxlbmd0aCk7XG4gICAgaWYgKHRoaXMucGVuZGluZy5sZW5ndGggPT09IDApXG4gICAgICB0aGlzLnBlbmRpbmcgPSBudWxsO1xuXG4gICAgbXNnID0gdXRpbHMuam9pbjMyKG1zZywgMCwgbXNnLmxlbmd0aCAtIHIsIHRoaXMuZW5kaWFuKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkgKz0gdGhpcy5fZGVsdGEzMilcbiAgICAgIHRoaXMuX3VwZGF0ZShtc2csIGksIGkgKyB0aGlzLl9kZWx0YTMyKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuQmxvY2tIYXNoLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIHRoaXMudXBkYXRlKHRoaXMuX3BhZCgpKTtcbiAgYXNzZXJ0KHRoaXMucGVuZGluZyA9PT0gbnVsbCk7XG5cbiAgcmV0dXJuIHRoaXMuX2RpZ2VzdChlbmMpO1xufTtcblxuQmxvY2tIYXNoLnByb3RvdHlwZS5fcGFkID0gZnVuY3Rpb24gcGFkKCkge1xuICB2YXIgbGVuID0gdGhpcy5wZW5kaW5nVG90YWw7XG4gIHZhciBieXRlcyA9IHRoaXMuX2RlbHRhODtcbiAgdmFyIGsgPSBieXRlcyAtICgobGVuICsgdGhpcy5wYWRMZW5ndGgpICUgYnl0ZXMpO1xuICB2YXIgcmVzID0gbmV3IEFycmF5KGsgKyB0aGlzLnBhZExlbmd0aCk7XG4gIHJlc1swXSA9IDB4ODA7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgazsgaSsrKVxuICAgIHJlc1tpXSA9IDA7XG5cbiAgLy8gQXBwZW5kIGxlbmd0aFxuICBsZW4gPDw9IDM7XG4gIGlmICh0aGlzLmVuZGlhbiA9PT0gJ2JpZycpIHtcbiAgICBmb3IgKHZhciB0ID0gODsgdCA8IHRoaXMucGFkTGVuZ3RoOyB0KyspXG4gICAgICByZXNbaSsrXSA9IDA7XG5cbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAobGVuID4+PiAyNCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMTYpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDgpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IGxlbiAmIDB4ZmY7XG4gIH0gZWxzZSB7XG4gICAgcmVzW2krK10gPSBsZW4gJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gOCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMTYpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDI0KSAmIDB4ZmY7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuXG4gICAgZm9yICh0ID0gODsgdCA8IHRoaXMucGFkTGVuZ3RoOyB0KyspXG4gICAgICByZXNbaSsrXSA9IDA7XG4gIH1cblxuICByZXR1cm4gcmVzO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcblxuZnVuY3Rpb24gSG1hYyhoYXNoLCBrZXksIGVuYykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgSG1hYykpXG4gICAgcmV0dXJuIG5ldyBIbWFjKGhhc2gsIGtleSwgZW5jKTtcbiAgdGhpcy5IYXNoID0gaGFzaDtcbiAgdGhpcy5ibG9ja1NpemUgPSBoYXNoLmJsb2NrU2l6ZSAvIDg7XG4gIHRoaXMub3V0U2l6ZSA9IGhhc2gub3V0U2l6ZSAvIDg7XG4gIHRoaXMuaW5uZXIgPSBudWxsO1xuICB0aGlzLm91dGVyID0gbnVsbDtcblxuICB0aGlzLl9pbml0KHV0aWxzLnRvQXJyYXkoa2V5LCBlbmMpKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gSG1hYztcblxuSG1hYy5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbiBpbml0KGtleSkge1xuICAvLyBTaG9ydGVuIGtleSwgaWYgbmVlZGVkXG4gIGlmIChrZXkubGVuZ3RoID4gdGhpcy5ibG9ja1NpemUpXG4gICAga2V5ID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpLmRpZ2VzdCgpO1xuICBhc3NlcnQoa2V5Lmxlbmd0aCA8PSB0aGlzLmJsb2NrU2l6ZSk7XG5cbiAgLy8gQWRkIHBhZGRpbmcgdG8ga2V5XG4gIGZvciAodmFyIGkgPSBrZXkubGVuZ3RoOyBpIDwgdGhpcy5ibG9ja1NpemU7IGkrKylcbiAgICBrZXkucHVzaCgwKTtcblxuICBmb3IgKGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxuICAgIGtleVtpXSBePSAweDM2O1xuICB0aGlzLmlubmVyID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpO1xuXG4gIC8vIDB4MzYgXiAweDVjID0gMHg2YVxuICBmb3IgKGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxuICAgIGtleVtpXSBePSAweDZhO1xuICB0aGlzLm91dGVyID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpO1xufTtcblxuSG1hYy5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKG1zZywgZW5jKSB7XG4gIHRoaXMuaW5uZXIudXBkYXRlKG1zZywgZW5jKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5IbWFjLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIHRoaXMub3V0ZXIudXBkYXRlKHRoaXMuaW5uZXIuZGlnZXN0KCkpO1xuICByZXR1cm4gdGhpcy5vdXRlci5kaWdlc3QoZW5jKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcbnZhciBjb21tb24gPSByZXF1aXJlKCcuL2NvbW1vbicpO1xuXG52YXIgcm90bDMyID0gdXRpbHMucm90bDMyO1xudmFyIHN1bTMyID0gdXRpbHMuc3VtMzI7XG52YXIgc3VtMzJfMyA9IHV0aWxzLnN1bTMyXzM7XG52YXIgc3VtMzJfNCA9IHV0aWxzLnN1bTMyXzQ7XG52YXIgQmxvY2tIYXNoID0gY29tbW9uLkJsb2NrSGFzaDtcblxuZnVuY3Rpb24gUklQRU1EMTYwKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUklQRU1EMTYwKSlcbiAgICByZXR1cm4gbmV3IFJJUEVNRDE2MCgpO1xuXG4gIEJsb2NrSGFzaC5jYWxsKHRoaXMpO1xuXG4gIHRoaXMuaCA9IFsgMHg2NzQ1MjMwMSwgMHhlZmNkYWI4OSwgMHg5OGJhZGNmZSwgMHgxMDMyNTQ3NiwgMHhjM2QyZTFmMCBdO1xuICB0aGlzLmVuZGlhbiA9ICdsaXR0bGUnO1xufVxudXRpbHMuaW5oZXJpdHMoUklQRU1EMTYwLCBCbG9ja0hhc2gpO1xuZXhwb3J0cy5yaXBlbWQxNjAgPSBSSVBFTUQxNjA7XG5cblJJUEVNRDE2MC5ibG9ja1NpemUgPSA1MTI7XG5SSVBFTUQxNjAub3V0U2l6ZSA9IDE2MDtcblJJUEVNRDE2MC5obWFjU3RyZW5ndGggPSAxOTI7XG5SSVBFTUQxNjAucGFkTGVuZ3RoID0gNjQ7XG5cblJJUEVNRDE2MC5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIHVwZGF0ZShtc2csIHN0YXJ0KSB7XG4gIHZhciBBID0gdGhpcy5oWzBdO1xuICB2YXIgQiA9IHRoaXMuaFsxXTtcbiAgdmFyIEMgPSB0aGlzLmhbMl07XG4gIHZhciBEID0gdGhpcy5oWzNdO1xuICB2YXIgRSA9IHRoaXMuaFs0XTtcbiAgdmFyIEFoID0gQTtcbiAgdmFyIEJoID0gQjtcbiAgdmFyIENoID0gQztcbiAgdmFyIERoID0gRDtcbiAgdmFyIEVoID0gRTtcbiAgZm9yICh2YXIgaiA9IDA7IGogPCA4MDsgaisrKSB7XG4gICAgdmFyIFQgPSBzdW0zMihcbiAgICAgIHJvdGwzMihcbiAgICAgICAgc3VtMzJfNChBLCBmKGosIEIsIEMsIEQpLCBtc2dbcltqXSArIHN0YXJ0XSwgSyhqKSksXG4gICAgICAgIHNbal0pLFxuICAgICAgRSk7XG4gICAgQSA9IEU7XG4gICAgRSA9IEQ7XG4gICAgRCA9IHJvdGwzMihDLCAxMCk7XG4gICAgQyA9IEI7XG4gICAgQiA9IFQ7XG4gICAgVCA9IHN1bTMyKFxuICAgICAgcm90bDMyKFxuICAgICAgICBzdW0zMl80KEFoLCBmKDc5IC0gaiwgQmgsIENoLCBEaCksIG1zZ1tyaFtqXSArIHN0YXJ0XSwgS2goaikpLFxuICAgICAgICBzaFtqXSksXG4gICAgICBFaCk7XG4gICAgQWggPSBFaDtcbiAgICBFaCA9IERoO1xuICAgIERoID0gcm90bDMyKENoLCAxMCk7XG4gICAgQ2ggPSBCaDtcbiAgICBCaCA9IFQ7XG4gIH1cbiAgVCA9IHN1bTMyXzModGhpcy5oWzFdLCBDLCBEaCk7XG4gIHRoaXMuaFsxXSA9IHN1bTMyXzModGhpcy5oWzJdLCBELCBFaCk7XG4gIHRoaXMuaFsyXSA9IHN1bTMyXzModGhpcy5oWzNdLCBFLCBBaCk7XG4gIHRoaXMuaFszXSA9IHN1bTMyXzModGhpcy5oWzRdLCBBLCBCaCk7XG4gIHRoaXMuaFs0XSA9IHN1bTMyXzModGhpcy5oWzBdLCBCLCBDaCk7XG4gIHRoaXMuaFswXSA9IFQ7XG59O1xuXG5SSVBFTUQxNjAucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaCwgJ2xpdHRsZScpO1xuICBlbHNlXG4gICAgcmV0dXJuIHV0aWxzLnNwbGl0MzIodGhpcy5oLCAnbGl0dGxlJyk7XG59O1xuXG5mdW5jdGlvbiBmKGosIHgsIHksIHopIHtcbiAgaWYgKGogPD0gMTUpXG4gICAgcmV0dXJuIHggXiB5IF4gejtcbiAgZWxzZSBpZiAoaiA8PSAzMSlcbiAgICByZXR1cm4gKHggJiB5KSB8ICgofngpICYgeik7XG4gIGVsc2UgaWYgKGogPD0gNDcpXG4gICAgcmV0dXJuICh4IHwgKH55KSkgXiB6O1xuICBlbHNlIGlmIChqIDw9IDYzKVxuICAgIHJldHVybiAoeCAmIHopIHwgKHkgJiAofnopKTtcbiAgZWxzZVxuICAgIHJldHVybiB4IF4gKHkgfCAofnopKTtcbn1cblxuZnVuY3Rpb24gSyhqKSB7XG4gIGlmIChqIDw9IDE1KVxuICAgIHJldHVybiAweDAwMDAwMDAwO1xuICBlbHNlIGlmIChqIDw9IDMxKVxuICAgIHJldHVybiAweDVhODI3OTk5O1xuICBlbHNlIGlmIChqIDw9IDQ3KVxuICAgIHJldHVybiAweDZlZDllYmExO1xuICBlbHNlIGlmIChqIDw9IDYzKVxuICAgIHJldHVybiAweDhmMWJiY2RjO1xuICBlbHNlXG4gICAgcmV0dXJuIDB4YTk1M2ZkNGU7XG59XG5cbmZ1bmN0aW9uIEtoKGopIHtcbiAgaWYgKGogPD0gMTUpXG4gICAgcmV0dXJuIDB4NTBhMjhiZTY7XG4gIGVsc2UgaWYgKGogPD0gMzEpXG4gICAgcmV0dXJuIDB4NWM0ZGQxMjQ7XG4gIGVsc2UgaWYgKGogPD0gNDcpXG4gICAgcmV0dXJuIDB4NmQ3MDNlZjM7XG4gIGVsc2UgaWYgKGogPD0gNjMpXG4gICAgcmV0dXJuIDB4N2E2ZDc2ZTk7XG4gIGVsc2VcbiAgICByZXR1cm4gMHgwMDAwMDAwMDtcbn1cblxudmFyIHIgPSBbXG4gIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsXG4gIDcsIDQsIDEzLCAxLCAxMCwgNiwgMTUsIDMsIDEyLCAwLCA5LCA1LCAyLCAxNCwgMTEsIDgsXG4gIDMsIDEwLCAxNCwgNCwgOSwgMTUsIDgsIDEsIDIsIDcsIDAsIDYsIDEzLCAxMSwgNSwgMTIsXG4gIDEsIDksIDExLCAxMCwgMCwgOCwgMTIsIDQsIDEzLCAzLCA3LCAxNSwgMTQsIDUsIDYsIDIsXG4gIDQsIDAsIDUsIDksIDcsIDEyLCAyLCAxMCwgMTQsIDEsIDMsIDgsIDExLCA2LCAxNSwgMTNcbl07XG5cbnZhciByaCA9IFtcbiAgNSwgMTQsIDcsIDAsIDksIDIsIDExLCA0LCAxMywgNiwgMTUsIDgsIDEsIDEwLCAzLCAxMixcbiAgNiwgMTEsIDMsIDcsIDAsIDEzLCA1LCAxMCwgMTQsIDE1LCA4LCAxMiwgNCwgOSwgMSwgMixcbiAgMTUsIDUsIDEsIDMsIDcsIDE0LCA2LCA5LCAxMSwgOCwgMTIsIDIsIDEwLCAwLCA0LCAxMyxcbiAgOCwgNiwgNCwgMSwgMywgMTEsIDE1LCAwLCA1LCAxMiwgMiwgMTMsIDksIDcsIDEwLCAxNCxcbiAgMTIsIDE1LCAxMCwgNCwgMSwgNSwgOCwgNywgNiwgMiwgMTMsIDE0LCAwLCAzLCA5LCAxMVxuXTtcblxudmFyIHMgPSBbXG4gIDExLCAxNCwgMTUsIDEyLCA1LCA4LCA3LCA5LCAxMSwgMTMsIDE0LCAxNSwgNiwgNywgOSwgOCxcbiAgNywgNiwgOCwgMTMsIDExLCA5LCA3LCAxNSwgNywgMTIsIDE1LCA5LCAxMSwgNywgMTMsIDEyLFxuICAxMSwgMTMsIDYsIDcsIDE0LCA5LCAxMywgMTUsIDE0LCA4LCAxMywgNiwgNSwgMTIsIDcsIDUsXG4gIDExLCAxMiwgMTQsIDE1LCAxNCwgMTUsIDksIDgsIDksIDE0LCA1LCA2LCA4LCA2LCA1LCAxMixcbiAgOSwgMTUsIDUsIDExLCA2LCA4LCAxMywgMTIsIDUsIDEyLCAxMywgMTQsIDExLCA4LCA1LCA2XG5dO1xuXG52YXIgc2ggPSBbXG4gIDgsIDksIDksIDExLCAxMywgMTUsIDE1LCA1LCA3LCA3LCA4LCAxMSwgMTQsIDE0LCAxMiwgNixcbiAgOSwgMTMsIDE1LCA3LCAxMiwgOCwgOSwgMTEsIDcsIDcsIDEyLCA3LCA2LCAxNSwgMTMsIDExLFxuICA5LCA3LCAxNSwgMTEsIDgsIDYsIDYsIDE0LCAxMiwgMTMsIDUsIDE0LCAxMywgMTMsIDcsIDUsXG4gIDE1LCA1LCA4LCAxMSwgMTQsIDE0LCA2LCAxNCwgNiwgOSwgMTIsIDksIDEyLCA1LCAxNSwgOCxcbiAgOCwgNSwgMTIsIDksIDEyLCA1LCAxNCwgNiwgOCwgMTMsIDYsIDUsIDE1LCAxMywgMTEsIDExXG5dO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLnNoYTEgPSByZXF1aXJlKCcuL3NoYS8xJyk7XG5leHBvcnRzLnNoYTIyNCA9IHJlcXVpcmUoJy4vc2hhLzIyNCcpO1xuZXhwb3J0cy5zaGEyNTYgPSByZXF1aXJlKCcuL3NoYS8yNTYnKTtcbmV4cG9ydHMuc2hhMzg0ID0gcmVxdWlyZSgnLi9zaGEvMzg0Jyk7XG5leHBvcnRzLnNoYTUxMiA9IHJlcXVpcmUoJy4vc2hhLzUxMicpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xudmFyIGNvbW1vbiA9IHJlcXVpcmUoJy4uL2NvbW1vbicpO1xudmFyIHNoYUNvbW1vbiA9IHJlcXVpcmUoJy4vY29tbW9uJyk7XG5cbnZhciByb3RsMzIgPSB1dGlscy5yb3RsMzI7XG52YXIgc3VtMzIgPSB1dGlscy5zdW0zMjtcbnZhciBzdW0zMl81ID0gdXRpbHMuc3VtMzJfNTtcbnZhciBmdF8xID0gc2hhQ29tbW9uLmZ0XzE7XG52YXIgQmxvY2tIYXNoID0gY29tbW9uLkJsb2NrSGFzaDtcblxudmFyIHNoYTFfSyA9IFtcbiAgMHg1QTgyNzk5OSwgMHg2RUQ5RUJBMSxcbiAgMHg4RjFCQkNEQywgMHhDQTYyQzFENlxuXTtcblxuZnVuY3Rpb24gU0hBMSgpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFNIQTEpKVxuICAgIHJldHVybiBuZXcgU0hBMSgpO1xuXG4gIEJsb2NrSGFzaC5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHg2NzQ1MjMwMSwgMHhlZmNkYWI4OSwgMHg5OGJhZGNmZSxcbiAgICAweDEwMzI1NDc2LCAweGMzZDJlMWYwIF07XG4gIHRoaXMuVyA9IG5ldyBBcnJheSg4MCk7XG59XG5cbnV0aWxzLmluaGVyaXRzKFNIQTEsIEJsb2NrSGFzaCk7XG5tb2R1bGUuZXhwb3J0cyA9IFNIQTE7XG5cblNIQTEuYmxvY2tTaXplID0gNTEyO1xuU0hBMS5vdXRTaXplID0gMTYwO1xuU0hBMS5obWFjU3RyZW5ndGggPSA4MDtcblNIQTEucGFkTGVuZ3RoID0gNjQ7XG5cblNIQTEucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiBfdXBkYXRlKG1zZywgc3RhcnQpIHtcbiAgdmFyIFcgPSB0aGlzLlc7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAxNjsgaSsrKVxuICAgIFdbaV0gPSBtc2dbc3RhcnQgKyBpXTtcblxuICBmb3IoOyBpIDwgVy5sZW5ndGg7IGkrKylcbiAgICBXW2ldID0gcm90bDMyKFdbaSAtIDNdIF4gV1tpIC0gOF0gXiBXW2kgLSAxNF0gXiBXW2kgLSAxNl0sIDEpO1xuXG4gIHZhciBhID0gdGhpcy5oWzBdO1xuICB2YXIgYiA9IHRoaXMuaFsxXTtcbiAgdmFyIGMgPSB0aGlzLmhbMl07XG4gIHZhciBkID0gdGhpcy5oWzNdO1xuICB2YXIgZSA9IHRoaXMuaFs0XTtcblxuICBmb3IgKGkgPSAwOyBpIDwgVy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzID0gfn4oaSAvIDIwKTtcbiAgICB2YXIgdCA9IHN1bTMyXzUocm90bDMyKGEsIDUpLCBmdF8xKHMsIGIsIGMsIGQpLCBlLCBXW2ldLCBzaGExX0tbc10pO1xuICAgIGUgPSBkO1xuICAgIGQgPSBjO1xuICAgIGMgPSByb3RsMzIoYiwgMzApO1xuICAgIGIgPSBhO1xuICAgIGEgPSB0O1xuICB9XG5cbiAgdGhpcy5oWzBdID0gc3VtMzIodGhpcy5oWzBdLCBhKTtcbiAgdGhpcy5oWzFdID0gc3VtMzIodGhpcy5oWzFdLCBiKTtcbiAgdGhpcy5oWzJdID0gc3VtMzIodGhpcy5oWzJdLCBjKTtcbiAgdGhpcy5oWzNdID0gc3VtMzIodGhpcy5oWzNdLCBkKTtcbiAgdGhpcy5oWzRdID0gc3VtMzIodGhpcy5oWzRdLCBlKTtcbn07XG5cblNIQTEucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaCwgJ2JpZycpO1xuICBlbHNlXG4gICAgcmV0dXJuIHV0aWxzLnNwbGl0MzIodGhpcy5oLCAnYmlnJyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xudmFyIFNIQTI1NiA9IHJlcXVpcmUoJy4vMjU2Jyk7XG5cbmZ1bmN0aW9uIFNIQTIyNCgpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFNIQTIyNCkpXG4gICAgcmV0dXJuIG5ldyBTSEEyMjQoKTtcblxuICBTSEEyNTYuY2FsbCh0aGlzKTtcbiAgdGhpcy5oID0gW1xuICAgIDB4YzEwNTllZDgsIDB4MzY3Y2Q1MDcsIDB4MzA3MGRkMTcsIDB4ZjcwZTU5MzksXG4gICAgMHhmZmMwMGIzMSwgMHg2ODU4MTUxMSwgMHg2NGY5OGZhNywgMHhiZWZhNGZhNCBdO1xufVxudXRpbHMuaW5oZXJpdHMoU0hBMjI0LCBTSEEyNTYpO1xubW9kdWxlLmV4cG9ydHMgPSBTSEEyMjQ7XG5cblNIQTIyNC5ibG9ja1NpemUgPSA1MTI7XG5TSEEyMjQub3V0U2l6ZSA9IDIyNDtcblNIQTIyNC5obWFjU3RyZW5ndGggPSAxOTI7XG5TSEEyMjQucGFkTGVuZ3RoID0gNjQ7XG5cblNIQTIyNC5wcm90b3R5cGUuX2RpZ2VzdCA9IGZ1bmN0aW9uIGRpZ2VzdChlbmMpIHtcbiAgLy8gSnVzdCB0cnVuY2F0ZSBvdXRwdXRcbiAgaWYgKGVuYyA9PT0gJ2hleCcpXG4gICAgcmV0dXJuIHV0aWxzLnRvSGV4MzIodGhpcy5oLnNsaWNlKDAsIDcpLCAnYmlnJyk7XG4gIGVsc2VcbiAgICByZXR1cm4gdXRpbHMuc3BsaXQzMih0aGlzLmguc2xpY2UoMCwgNyksICdiaWcnKTtcbn07XG5cbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBjb21tb24gPSByZXF1aXJlKCcuLi9jb21tb24nKTtcbnZhciBzaGFDb21tb24gPSByZXF1aXJlKCcuL2NvbW1vbicpO1xudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcblxudmFyIHN1bTMyID0gdXRpbHMuc3VtMzI7XG52YXIgc3VtMzJfNCA9IHV0aWxzLnN1bTMyXzQ7XG52YXIgc3VtMzJfNSA9IHV0aWxzLnN1bTMyXzU7XG52YXIgY2gzMiA9IHNoYUNvbW1vbi5jaDMyO1xudmFyIG1hajMyID0gc2hhQ29tbW9uLm1hajMyO1xudmFyIHMwXzI1NiA9IHNoYUNvbW1vbi5zMF8yNTY7XG52YXIgczFfMjU2ID0gc2hhQ29tbW9uLnMxXzI1NjtcbnZhciBnMF8yNTYgPSBzaGFDb21tb24uZzBfMjU2O1xudmFyIGcxXzI1NiA9IHNoYUNvbW1vbi5nMV8yNTY7XG5cbnZhciBCbG9ja0hhc2ggPSBjb21tb24uQmxvY2tIYXNoO1xuXG52YXIgc2hhMjU2X0sgPSBbXG4gIDB4NDI4YTJmOTgsIDB4NzEzNzQ0OTEsIDB4YjVjMGZiY2YsIDB4ZTliNWRiYTUsXG4gIDB4Mzk1NmMyNWIsIDB4NTlmMTExZjEsIDB4OTIzZjgyYTQsIDB4YWIxYzVlZDUsXG4gIDB4ZDgwN2FhOTgsIDB4MTI4MzViMDEsIDB4MjQzMTg1YmUsIDB4NTUwYzdkYzMsXG4gIDB4NzJiZTVkNzQsIDB4ODBkZWIxZmUsIDB4OWJkYzA2YTcsIDB4YzE5YmYxNzQsXG4gIDB4ZTQ5YjY5YzEsIDB4ZWZiZTQ3ODYsIDB4MGZjMTlkYzYsIDB4MjQwY2ExY2MsXG4gIDB4MmRlOTJjNmYsIDB4NGE3NDg0YWEsIDB4NWNiMGE5ZGMsIDB4NzZmOTg4ZGEsXG4gIDB4OTgzZTUxNTIsIDB4YTgzMWM2NmQsIDB4YjAwMzI3YzgsIDB4YmY1OTdmYzcsXG4gIDB4YzZlMDBiZjMsIDB4ZDVhNzkxNDcsIDB4MDZjYTYzNTEsIDB4MTQyOTI5NjcsXG4gIDB4MjdiNzBhODUsIDB4MmUxYjIxMzgsIDB4NGQyYzZkZmMsIDB4NTMzODBkMTMsXG4gIDB4NjUwYTczNTQsIDB4NzY2YTBhYmIsIDB4ODFjMmM5MmUsIDB4OTI3MjJjODUsXG4gIDB4YTJiZmU4YTEsIDB4YTgxYTY2NGIsIDB4YzI0YjhiNzAsIDB4Yzc2YzUxYTMsXG4gIDB4ZDE5MmU4MTksIDB4ZDY5OTA2MjQsIDB4ZjQwZTM1ODUsIDB4MTA2YWEwNzAsXG4gIDB4MTlhNGMxMTYsIDB4MWUzNzZjMDgsIDB4Mjc0ODc3NGMsIDB4MzRiMGJjYjUsXG4gIDB4MzkxYzBjYjMsIDB4NGVkOGFhNGEsIDB4NWI5Y2NhNGYsIDB4NjgyZTZmZjMsXG4gIDB4NzQ4ZjgyZWUsIDB4NzhhNTYzNmYsIDB4ODRjODc4MTQsIDB4OGNjNzAyMDgsXG4gIDB4OTBiZWZmZmEsIDB4YTQ1MDZjZWIsIDB4YmVmOWEzZjcsIDB4YzY3MTc4ZjJcbl07XG5cbmZ1bmN0aW9uIFNIQTI1NigpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFNIQTI1NikpXG4gICAgcmV0dXJuIG5ldyBTSEEyNTYoKTtcblxuICBCbG9ja0hhc2guY2FsbCh0aGlzKTtcbiAgdGhpcy5oID0gW1xuICAgIDB4NmEwOWU2NjcsIDB4YmI2N2FlODUsIDB4M2M2ZWYzNzIsIDB4YTU0ZmY1M2EsXG4gICAgMHg1MTBlNTI3ZiwgMHg5YjA1Njg4YywgMHgxZjgzZDlhYiwgMHg1YmUwY2QxOVxuICBdO1xuICB0aGlzLmsgPSBzaGEyNTZfSztcbiAgdGhpcy5XID0gbmV3IEFycmF5KDY0KTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTI1NiwgQmxvY2tIYXNoKTtcbm1vZHVsZS5leHBvcnRzID0gU0hBMjU2O1xuXG5TSEEyNTYuYmxvY2tTaXplID0gNTEyO1xuU0hBMjU2Lm91dFNpemUgPSAyNTY7XG5TSEEyNTYuaG1hY1N0cmVuZ3RoID0gMTkyO1xuU0hBMjU2LnBhZExlbmd0aCA9IDY0O1xuXG5TSEEyNTYucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiBfdXBkYXRlKG1zZywgc3RhcnQpIHtcbiAgdmFyIFcgPSB0aGlzLlc7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAxNjsgaSsrKVxuICAgIFdbaV0gPSBtc2dbc3RhcnQgKyBpXTtcbiAgZm9yICg7IGkgPCBXLmxlbmd0aDsgaSsrKVxuICAgIFdbaV0gPSBzdW0zMl80KGcxXzI1NihXW2kgLSAyXSksIFdbaSAtIDddLCBnMF8yNTYoV1tpIC0gMTVdKSwgV1tpIC0gMTZdKTtcblxuICB2YXIgYSA9IHRoaXMuaFswXTtcbiAgdmFyIGIgPSB0aGlzLmhbMV07XG4gIHZhciBjID0gdGhpcy5oWzJdO1xuICB2YXIgZCA9IHRoaXMuaFszXTtcbiAgdmFyIGUgPSB0aGlzLmhbNF07XG4gIHZhciBmID0gdGhpcy5oWzVdO1xuICB2YXIgZyA9IHRoaXMuaFs2XTtcbiAgdmFyIGggPSB0aGlzLmhbN107XG5cbiAgYXNzZXJ0KHRoaXMuay5sZW5ndGggPT09IFcubGVuZ3RoKTtcbiAgZm9yIChpID0gMDsgaSA8IFcubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgVDEgPSBzdW0zMl81KGgsIHMxXzI1NihlKSwgY2gzMihlLCBmLCBnKSwgdGhpcy5rW2ldLCBXW2ldKTtcbiAgICB2YXIgVDIgPSBzdW0zMihzMF8yNTYoYSksIG1hajMyKGEsIGIsIGMpKTtcbiAgICBoID0gZztcbiAgICBnID0gZjtcbiAgICBmID0gZTtcbiAgICBlID0gc3VtMzIoZCwgVDEpO1xuICAgIGQgPSBjO1xuICAgIGMgPSBiO1xuICAgIGIgPSBhO1xuICAgIGEgPSBzdW0zMihUMSwgVDIpO1xuICB9XG5cbiAgdGhpcy5oWzBdID0gc3VtMzIodGhpcy5oWzBdLCBhKTtcbiAgdGhpcy5oWzFdID0gc3VtMzIodGhpcy5oWzFdLCBiKTtcbiAgdGhpcy5oWzJdID0gc3VtMzIodGhpcy5oWzJdLCBjKTtcbiAgdGhpcy5oWzNdID0gc3VtMzIodGhpcy5oWzNdLCBkKTtcbiAgdGhpcy5oWzRdID0gc3VtMzIodGhpcy5oWzRdLCBlKTtcbiAgdGhpcy5oWzVdID0gc3VtMzIodGhpcy5oWzVdLCBmKTtcbiAgdGhpcy5oWzZdID0gc3VtMzIodGhpcy5oWzZdLCBnKTtcbiAgdGhpcy5oWzddID0gc3VtMzIodGhpcy5oWzddLCBoKTtcbn07XG5cblNIQTI1Ni5wcm90b3R5cGUuX2RpZ2VzdCA9IGZ1bmN0aW9uIGRpZ2VzdChlbmMpIHtcbiAgaWYgKGVuYyA9PT0gJ2hleCcpXG4gICAgcmV0dXJuIHV0aWxzLnRvSGV4MzIodGhpcy5oLCAnYmlnJyk7XG4gIGVsc2VcbiAgICByZXR1cm4gdXRpbHMuc3BsaXQzMih0aGlzLmgsICdiaWcnKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbnZhciBTSEE1MTIgPSByZXF1aXJlKCcuLzUxMicpO1xuXG5mdW5jdGlvbiBTSEEzODQoKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTSEEzODQpKVxuICAgIHJldHVybiBuZXcgU0hBMzg0KCk7XG5cbiAgU0hBNTEyLmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFtcbiAgICAweGNiYmI5ZDVkLCAweGMxMDU5ZWQ4LFxuICAgIDB4NjI5YTI5MmEsIDB4MzY3Y2Q1MDcsXG4gICAgMHg5MTU5MDE1YSwgMHgzMDcwZGQxNyxcbiAgICAweDE1MmZlY2Q4LCAweGY3MGU1OTM5LFxuICAgIDB4NjczMzI2NjcsIDB4ZmZjMDBiMzEsXG4gICAgMHg4ZWI0NGE4NywgMHg2ODU4MTUxMSxcbiAgICAweGRiMGMyZTBkLCAweDY0Zjk4ZmE3LFxuICAgIDB4NDdiNTQ4MWQsIDB4YmVmYTRmYTQgXTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTM4NCwgU0hBNTEyKTtcbm1vZHVsZS5leHBvcnRzID0gU0hBMzg0O1xuXG5TSEEzODQuYmxvY2tTaXplID0gMTAyNDtcblNIQTM4NC5vdXRTaXplID0gMzg0O1xuU0hBMzg0LmhtYWNTdHJlbmd0aCA9IDE5MjtcblNIQTM4NC5wYWRMZW5ndGggPSAxMjg7XG5cblNIQTM4NC5wcm90b3R5cGUuX2RpZ2VzdCA9IGZ1bmN0aW9uIGRpZ2VzdChlbmMpIHtcbiAgaWYgKGVuYyA9PT0gJ2hleCcpXG4gICAgcmV0dXJuIHV0aWxzLnRvSGV4MzIodGhpcy5oLnNsaWNlKDAsIDEyKSwgJ2JpZycpO1xuICBlbHNlXG4gICAgcmV0dXJuIHV0aWxzLnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsIDEyKSwgJ2JpZycpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBjb21tb24gPSByZXF1aXJlKCcuLi9jb21tb24nKTtcbnZhciBhc3NlcnQgPSByZXF1aXJlKCdtaW5pbWFsaXN0aWMtYXNzZXJ0Jyk7XG5cbnZhciByb3RyNjRfaGkgPSB1dGlscy5yb3RyNjRfaGk7XG52YXIgcm90cjY0X2xvID0gdXRpbHMucm90cjY0X2xvO1xudmFyIHNocjY0X2hpID0gdXRpbHMuc2hyNjRfaGk7XG52YXIgc2hyNjRfbG8gPSB1dGlscy5zaHI2NF9sbztcbnZhciBzdW02NCA9IHV0aWxzLnN1bTY0O1xudmFyIHN1bTY0X2hpID0gdXRpbHMuc3VtNjRfaGk7XG52YXIgc3VtNjRfbG8gPSB1dGlscy5zdW02NF9sbztcbnZhciBzdW02NF80X2hpID0gdXRpbHMuc3VtNjRfNF9oaTtcbnZhciBzdW02NF80X2xvID0gdXRpbHMuc3VtNjRfNF9sbztcbnZhciBzdW02NF81X2hpID0gdXRpbHMuc3VtNjRfNV9oaTtcbnZhciBzdW02NF81X2xvID0gdXRpbHMuc3VtNjRfNV9sbztcblxudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbnZhciBzaGE1MTJfSyA9IFtcbiAgMHg0MjhhMmY5OCwgMHhkNzI4YWUyMiwgMHg3MTM3NDQ5MSwgMHgyM2VmNjVjZCxcbiAgMHhiNWMwZmJjZiwgMHhlYzRkM2IyZiwgMHhlOWI1ZGJhNSwgMHg4MTg5ZGJiYyxcbiAgMHgzOTU2YzI1YiwgMHhmMzQ4YjUzOCwgMHg1OWYxMTFmMSwgMHhiNjA1ZDAxOSxcbiAgMHg5MjNmODJhNCwgMHhhZjE5NGY5YiwgMHhhYjFjNWVkNSwgMHhkYTZkODExOCxcbiAgMHhkODA3YWE5OCwgMHhhMzAzMDI0MiwgMHgxMjgzNWIwMSwgMHg0NTcwNmZiZSxcbiAgMHgyNDMxODViZSwgMHg0ZWU0YjI4YywgMHg1NTBjN2RjMywgMHhkNWZmYjRlMixcbiAgMHg3MmJlNWQ3NCwgMHhmMjdiODk2ZiwgMHg4MGRlYjFmZSwgMHgzYjE2OTZiMSxcbiAgMHg5YmRjMDZhNywgMHgyNWM3MTIzNSwgMHhjMTliZjE3NCwgMHhjZjY5MjY5NCxcbiAgMHhlNDliNjljMSwgMHg5ZWYxNGFkMiwgMHhlZmJlNDc4NiwgMHgzODRmMjVlMyxcbiAgMHgwZmMxOWRjNiwgMHg4YjhjZDViNSwgMHgyNDBjYTFjYywgMHg3N2FjOWM2NSxcbiAgMHgyZGU5MmM2ZiwgMHg1OTJiMDI3NSwgMHg0YTc0ODRhYSwgMHg2ZWE2ZTQ4MyxcbiAgMHg1Y2IwYTlkYywgMHhiZDQxZmJkNCwgMHg3NmY5ODhkYSwgMHg4MzExNTNiNSxcbiAgMHg5ODNlNTE1MiwgMHhlZTY2ZGZhYiwgMHhhODMxYzY2ZCwgMHgyZGI0MzIxMCxcbiAgMHhiMDAzMjdjOCwgMHg5OGZiMjEzZiwgMHhiZjU5N2ZjNywgMHhiZWVmMGVlNCxcbiAgMHhjNmUwMGJmMywgMHgzZGE4OGZjMiwgMHhkNWE3OTE0NywgMHg5MzBhYTcyNSxcbiAgMHgwNmNhNjM1MSwgMHhlMDAzODI2ZiwgMHgxNDI5Mjk2NywgMHgwYTBlNmU3MCxcbiAgMHgyN2I3MGE4NSwgMHg0NmQyMmZmYywgMHgyZTFiMjEzOCwgMHg1YzI2YzkyNixcbiAgMHg0ZDJjNmRmYywgMHg1YWM0MmFlZCwgMHg1MzM4MGQxMywgMHg5ZDk1YjNkZixcbiAgMHg2NTBhNzM1NCwgMHg4YmFmNjNkZSwgMHg3NjZhMGFiYiwgMHgzYzc3YjJhOCxcbiAgMHg4MWMyYzkyZSwgMHg0N2VkYWVlNiwgMHg5MjcyMmM4NSwgMHgxNDgyMzUzYixcbiAgMHhhMmJmZThhMSwgMHg0Y2YxMDM2NCwgMHhhODFhNjY0YiwgMHhiYzQyMzAwMSxcbiAgMHhjMjRiOGI3MCwgMHhkMGY4OTc5MSwgMHhjNzZjNTFhMywgMHgwNjU0YmUzMCxcbiAgMHhkMTkyZTgxOSwgMHhkNmVmNTIxOCwgMHhkNjk5MDYyNCwgMHg1NTY1YTkxMCxcbiAgMHhmNDBlMzU4NSwgMHg1NzcxMjAyYSwgMHgxMDZhYTA3MCwgMHgzMmJiZDFiOCxcbiAgMHgxOWE0YzExNiwgMHhiOGQyZDBjOCwgMHgxZTM3NmMwOCwgMHg1MTQxYWI1MyxcbiAgMHgyNzQ4Nzc0YywgMHhkZjhlZWI5OSwgMHgzNGIwYmNiNSwgMHhlMTliNDhhOCxcbiAgMHgzOTFjMGNiMywgMHhjNWM5NWE2MywgMHg0ZWQ4YWE0YSwgMHhlMzQxOGFjYixcbiAgMHg1YjljY2E0ZiwgMHg3NzYzZTM3MywgMHg2ODJlNmZmMywgMHhkNmIyYjhhMyxcbiAgMHg3NDhmODJlZSwgMHg1ZGVmYjJmYywgMHg3OGE1NjM2ZiwgMHg0MzE3MmY2MCxcbiAgMHg4NGM4NzgxNCwgMHhhMWYwYWI3MiwgMHg4Y2M3MDIwOCwgMHgxYTY0MzllYyxcbiAgMHg5MGJlZmZmYSwgMHgyMzYzMWUyOCwgMHhhNDUwNmNlYiwgMHhkZTgyYmRlOSxcbiAgMHhiZWY5YTNmNywgMHhiMmM2NzkxNSwgMHhjNjcxNzhmMiwgMHhlMzcyNTMyYixcbiAgMHhjYTI3M2VjZSwgMHhlYTI2NjE5YywgMHhkMTg2YjhjNywgMHgyMWMwYzIwNyxcbiAgMHhlYWRhN2RkNiwgMHhjZGUwZWIxZSwgMHhmNTdkNGY3ZiwgMHhlZTZlZDE3OCxcbiAgMHgwNmYwNjdhYSwgMHg3MjE3NmZiYSwgMHgwYTYzN2RjNSwgMHhhMmM4OThhNixcbiAgMHgxMTNmOTgwNCwgMHhiZWY5MGRhZSwgMHgxYjcxMGIzNSwgMHgxMzFjNDcxYixcbiAgMHgyOGRiNzdmNSwgMHgyMzA0N2Q4NCwgMHgzMmNhYWI3YiwgMHg0MGM3MjQ5MyxcbiAgMHgzYzllYmUwYSwgMHgxNWM5YmViYywgMHg0MzFkNjdjNCwgMHg5YzEwMGQ0YyxcbiAgMHg0Y2M1ZDRiZSwgMHhjYjNlNDJiNiwgMHg1OTdmMjk5YywgMHhmYzY1N2UyYSxcbiAgMHg1ZmNiNmZhYiwgMHgzYWQ2ZmFlYywgMHg2YzQ0MTk4YywgMHg0YTQ3NTgxN1xuXTtcblxuZnVuY3Rpb24gU0hBNTEyKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBNTEyKSlcbiAgICByZXR1cm4gbmV3IFNIQTUxMigpO1xuXG4gIEJsb2NrSGFzaC5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHg2YTA5ZTY2NywgMHhmM2JjYzkwOCxcbiAgICAweGJiNjdhZTg1LCAweDg0Y2FhNzNiLFxuICAgIDB4M2M2ZWYzNzIsIDB4ZmU5NGY4MmIsXG4gICAgMHhhNTRmZjUzYSwgMHg1ZjFkMzZmMSxcbiAgICAweDUxMGU1MjdmLCAweGFkZTY4MmQxLFxuICAgIDB4OWIwNTY4OGMsIDB4MmIzZTZjMWYsXG4gICAgMHgxZjgzZDlhYiwgMHhmYjQxYmQ2YixcbiAgICAweDViZTBjZDE5LCAweDEzN2UyMTc5IF07XG4gIHRoaXMuayA9IHNoYTUxMl9LO1xuICB0aGlzLlcgPSBuZXcgQXJyYXkoMTYwKTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTUxMiwgQmxvY2tIYXNoKTtcbm1vZHVsZS5leHBvcnRzID0gU0hBNTEyO1xuXG5TSEE1MTIuYmxvY2tTaXplID0gMTAyNDtcblNIQTUxMi5vdXRTaXplID0gNTEyO1xuU0hBNTEyLmhtYWNTdHJlbmd0aCA9IDE5MjtcblNIQTUxMi5wYWRMZW5ndGggPSAxMjg7XG5cblNIQTUxMi5wcm90b3R5cGUuX3ByZXBhcmVCbG9jayA9IGZ1bmN0aW9uIF9wcmVwYXJlQmxvY2sobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICAvLyAzMiB4IDMyYml0IHdvcmRzXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMzI7IGkrKylcbiAgICBXW2ldID0gbXNnW3N0YXJ0ICsgaV07XG4gIGZvciAoOyBpIDwgVy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHZhciBjMF9oaSA9IGcxXzUxMl9oaShXW2kgLSA0XSwgV1tpIC0gM10pOyAgLy8gaSAtIDJcbiAgICB2YXIgYzBfbG8gPSBnMV81MTJfbG8oV1tpIC0gNF0sIFdbaSAtIDNdKTtcbiAgICB2YXIgYzFfaGkgPSBXW2kgLSAxNF07ICAvLyBpIC0gN1xuICAgIHZhciBjMV9sbyA9IFdbaSAtIDEzXTtcbiAgICB2YXIgYzJfaGkgPSBnMF81MTJfaGkoV1tpIC0gMzBdLCBXW2kgLSAyOV0pOyAgLy8gaSAtIDE1XG4gICAgdmFyIGMyX2xvID0gZzBfNTEyX2xvKFdbaSAtIDMwXSwgV1tpIC0gMjldKTtcbiAgICB2YXIgYzNfaGkgPSBXW2kgLSAzMl07ICAvLyBpIC0gMTZcbiAgICB2YXIgYzNfbG8gPSBXW2kgLSAzMV07XG5cbiAgICBXW2ldID0gc3VtNjRfNF9oaShcbiAgICAgIGMwX2hpLCBjMF9sbyxcbiAgICAgIGMxX2hpLCBjMV9sbyxcbiAgICAgIGMyX2hpLCBjMl9sbyxcbiAgICAgIGMzX2hpLCBjM19sbyk7XG4gICAgV1tpICsgMV0gPSBzdW02NF80X2xvKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvKTtcbiAgfVxufTtcblxuU0hBNTEyLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gX3VwZGF0ZShtc2csIHN0YXJ0KSB7XG4gIHRoaXMuX3ByZXBhcmVCbG9jayhtc2csIHN0YXJ0KTtcblxuICB2YXIgVyA9IHRoaXMuVztcblxuICB2YXIgYWggPSB0aGlzLmhbMF07XG4gIHZhciBhbCA9IHRoaXMuaFsxXTtcbiAgdmFyIGJoID0gdGhpcy5oWzJdO1xuICB2YXIgYmwgPSB0aGlzLmhbM107XG4gIHZhciBjaCA9IHRoaXMuaFs0XTtcbiAgdmFyIGNsID0gdGhpcy5oWzVdO1xuICB2YXIgZGggPSB0aGlzLmhbNl07XG4gIHZhciBkbCA9IHRoaXMuaFs3XTtcbiAgdmFyIGVoID0gdGhpcy5oWzhdO1xuICB2YXIgZWwgPSB0aGlzLmhbOV07XG4gIHZhciBmaCA9IHRoaXMuaFsxMF07XG4gIHZhciBmbCA9IHRoaXMuaFsxMV07XG4gIHZhciBnaCA9IHRoaXMuaFsxMl07XG4gIHZhciBnbCA9IHRoaXMuaFsxM107XG4gIHZhciBoaCA9IHRoaXMuaFsxNF07XG4gIHZhciBobCA9IHRoaXMuaFsxNV07XG5cbiAgYXNzZXJ0KHRoaXMuay5sZW5ndGggPT09IFcubGVuZ3RoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBXLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgdmFyIGMwX2hpID0gaGg7XG4gICAgdmFyIGMwX2xvID0gaGw7XG4gICAgdmFyIGMxX2hpID0gczFfNTEyX2hpKGVoLCBlbCk7XG4gICAgdmFyIGMxX2xvID0gczFfNTEyX2xvKGVoLCBlbCk7XG4gICAgdmFyIGMyX2hpID0gY2g2NF9oaShlaCwgZWwsIGZoLCBmbCwgZ2gsIGdsKTtcbiAgICB2YXIgYzJfbG8gPSBjaDY0X2xvKGVoLCBlbCwgZmgsIGZsLCBnaCwgZ2wpO1xuICAgIHZhciBjM19oaSA9IHRoaXMua1tpXTtcbiAgICB2YXIgYzNfbG8gPSB0aGlzLmtbaSArIDFdO1xuICAgIHZhciBjNF9oaSA9IFdbaV07XG4gICAgdmFyIGM0X2xvID0gV1tpICsgMV07XG5cbiAgICB2YXIgVDFfaGkgPSBzdW02NF81X2hpKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvLFxuICAgICAgYzRfaGksIGM0X2xvKTtcbiAgICB2YXIgVDFfbG8gPSBzdW02NF81X2xvKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvLFxuICAgICAgYzRfaGksIGM0X2xvKTtcblxuICAgIGMwX2hpID0gczBfNTEyX2hpKGFoLCBhbCk7XG4gICAgYzBfbG8gPSBzMF81MTJfbG8oYWgsIGFsKTtcbiAgICBjMV9oaSA9IG1hajY0X2hpKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wpO1xuICAgIGMxX2xvID0gbWFqNjRfbG8oYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCk7XG5cbiAgICB2YXIgVDJfaGkgPSBzdW02NF9oaShjMF9oaSwgYzBfbG8sIGMxX2hpLCBjMV9sbyk7XG4gICAgdmFyIFQyX2xvID0gc3VtNjRfbG8oYzBfaGksIGMwX2xvLCBjMV9oaSwgYzFfbG8pO1xuXG4gICAgaGggPSBnaDtcbiAgICBobCA9IGdsO1xuXG4gICAgZ2ggPSBmaDtcbiAgICBnbCA9IGZsO1xuXG4gICAgZmggPSBlaDtcbiAgICBmbCA9IGVsO1xuXG4gICAgZWggPSBzdW02NF9oaShkaCwgZGwsIFQxX2hpLCBUMV9sbyk7XG4gICAgZWwgPSBzdW02NF9sbyhkbCwgZGwsIFQxX2hpLCBUMV9sbyk7XG5cbiAgICBkaCA9IGNoO1xuICAgIGRsID0gY2w7XG5cbiAgICBjaCA9IGJoO1xuICAgIGNsID0gYmw7XG5cbiAgICBiaCA9IGFoO1xuICAgIGJsID0gYWw7XG5cbiAgICBhaCA9IHN1bTY0X2hpKFQxX2hpLCBUMV9sbywgVDJfaGksIFQyX2xvKTtcbiAgICBhbCA9IHN1bTY0X2xvKFQxX2hpLCBUMV9sbywgVDJfaGksIFQyX2xvKTtcbiAgfVxuXG4gIHN1bTY0KHRoaXMuaCwgMCwgYWgsIGFsKTtcbiAgc3VtNjQodGhpcy5oLCAyLCBiaCwgYmwpO1xuICBzdW02NCh0aGlzLmgsIDQsIGNoLCBjbCk7XG4gIHN1bTY0KHRoaXMuaCwgNiwgZGgsIGRsKTtcbiAgc3VtNjQodGhpcy5oLCA4LCBlaCwgZWwpO1xuICBzdW02NCh0aGlzLmgsIDEwLCBmaCwgZmwpO1xuICBzdW02NCh0aGlzLmgsIDEyLCBnaCwgZ2wpO1xuICBzdW02NCh0aGlzLmgsIDE0LCBoaCwgaGwpO1xufTtcblxuU0hBNTEyLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2JpZycpO1xufTtcblxuZnVuY3Rpb24gY2g2NF9oaSh4aCwgeGwsIHloLCB5bCwgemgpIHtcbiAgdmFyIHIgPSAoeGggJiB5aCkgXiAoKH54aCkgJiB6aCk7XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gY2g2NF9sbyh4aCwgeGwsIHloLCB5bCwgemgsIHpsKSB7XG4gIHZhciByID0gKHhsICYgeWwpIF4gKCh+eGwpICYgemwpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIG1hajY0X2hpKHhoLCB4bCwgeWgsIHlsLCB6aCkge1xuICB2YXIgciA9ICh4aCAmIHloKSBeICh4aCAmIHpoKSBeICh5aCAmIHpoKTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBtYWo2NF9sbyh4aCwgeGwsIHloLCB5bCwgemgsIHpsKSB7XG4gIHZhciByID0gKHhsICYgeWwpIF4gKHhsICYgemwpIF4gKHlsICYgemwpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHMwXzUxMl9oaSh4aCwgeGwpIHtcbiAgdmFyIGMwX2hpID0gcm90cjY0X2hpKHhoLCB4bCwgMjgpO1xuICB2YXIgYzFfaGkgPSByb3RyNjRfaGkoeGwsIHhoLCAyKTsgIC8vIDM0XG4gIHZhciBjMl9oaSA9IHJvdHI2NF9oaSh4bCwgeGgsIDcpOyAgLy8gMzlcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBzMF81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDI4KTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhsLCB4aCwgMik7ICAvLyAzNFxuICB2YXIgYzJfbG8gPSByb3RyNjRfbG8oeGwsIHhoLCA3KTsgIC8vIDM5XG5cbiAgdmFyIHIgPSBjMF9sbyBeIGMxX2xvIF4gYzJfbG87XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gczFfNTEyX2hpKHhoLCB4bCkge1xuICB2YXIgYzBfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCAxNCk7XG4gIHZhciBjMV9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDE4KTtcbiAgdmFyIGMyX2hpID0gcm90cjY0X2hpKHhsLCB4aCwgOSk7ICAvLyA0MVxuXG4gIHZhciByID0gYzBfaGkgXiBjMV9oaSBeIGMyX2hpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHMxXzUxMl9sbyh4aCwgeGwpIHtcbiAgdmFyIGMwX2xvID0gcm90cjY0X2xvKHhoLCB4bCwgMTQpO1xuICB2YXIgYzFfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCAxOCk7XG4gIHZhciBjMl9sbyA9IHJvdHI2NF9sbyh4bCwgeGgsIDkpOyAgLy8gNDFcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMF81MTJfaGkoeGgsIHhsKSB7XG4gIHZhciBjMF9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDEpO1xuICB2YXIgYzFfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCA4KTtcbiAgdmFyIGMyX2hpID0gc2hyNjRfaGkoeGgsIHhsLCA3KTtcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMF81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDEpO1xuICB2YXIgYzFfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCA4KTtcbiAgdmFyIGMyX2xvID0gc2hyNjRfbG8oeGgsIHhsLCA3KTtcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMV81MTJfaGkoeGgsIHhsKSB7XG4gIHZhciBjMF9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDE5KTtcbiAgdmFyIGMxX2hpID0gcm90cjY0X2hpKHhsLCB4aCwgMjkpOyAgLy8gNjFcbiAgdmFyIGMyX2hpID0gc2hyNjRfaGkoeGgsIHhsLCA2KTtcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMV81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDE5KTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhsLCB4aCwgMjkpOyAgLy8gNjFcbiAgdmFyIGMyX2xvID0gc2hyNjRfbG8oeGgsIHhsLCA2KTtcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xudmFyIHJvdHIzMiA9IHV0aWxzLnJvdHIzMjtcblxuZnVuY3Rpb24gZnRfMShzLCB4LCB5LCB6KSB7XG4gIGlmIChzID09PSAwKVxuICAgIHJldHVybiBjaDMyKHgsIHksIHopO1xuICBpZiAocyA9PT0gMSB8fCBzID09PSAzKVxuICAgIHJldHVybiBwMzIoeCwgeSwgeik7XG4gIGlmIChzID09PSAyKVxuICAgIHJldHVybiBtYWozMih4LCB5LCB6KTtcbn1cbmV4cG9ydHMuZnRfMSA9IGZ0XzE7XG5cbmZ1bmN0aW9uIGNoMzIoeCwgeSwgeikge1xuICByZXR1cm4gKHggJiB5KSBeICgofngpICYgeik7XG59XG5leHBvcnRzLmNoMzIgPSBjaDMyO1xuXG5mdW5jdGlvbiBtYWozMih4LCB5LCB6KSB7XG4gIHJldHVybiAoeCAmIHkpIF4gKHggJiB6KSBeICh5ICYgeik7XG59XG5leHBvcnRzLm1hajMyID0gbWFqMzI7XG5cbmZ1bmN0aW9uIHAzMih4LCB5LCB6KSB7XG4gIHJldHVybiB4IF4geSBeIHo7XG59XG5leHBvcnRzLnAzMiA9IHAzMjtcblxuZnVuY3Rpb24gczBfMjU2KHgpIHtcbiAgcmV0dXJuIHJvdHIzMih4LCAyKSBeIHJvdHIzMih4LCAxMykgXiByb3RyMzIoeCwgMjIpO1xufVxuZXhwb3J0cy5zMF8yNTYgPSBzMF8yNTY7XG5cbmZ1bmN0aW9uIHMxXzI1Nih4KSB7XG4gIHJldHVybiByb3RyMzIoeCwgNikgXiByb3RyMzIoeCwgMTEpIF4gcm90cjMyKHgsIDI1KTtcbn1cbmV4cG9ydHMuczFfMjU2ID0gczFfMjU2O1xuXG5mdW5jdGlvbiBnMF8yNTYoeCkge1xuICByZXR1cm4gcm90cjMyKHgsIDcpIF4gcm90cjMyKHgsIDE4KSBeICh4ID4+PiAzKTtcbn1cbmV4cG9ydHMuZzBfMjU2ID0gZzBfMjU2O1xuXG5mdW5jdGlvbiBnMV8yNTYoeCkge1xuICByZXR1cm4gcm90cjMyKHgsIDE3KSBeIHJvdHIzMih4LCAxOSkgXiAoeCA+Pj4gMTApO1xufVxuZXhwb3J0cy5nMV8yNTYgPSBnMV8yNTY7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBhc3NlcnQgPSByZXF1aXJlKCdtaW5pbWFsaXN0aWMtYXNzZXJ0Jyk7XG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xuXG5leHBvcnRzLmluaGVyaXRzID0gaW5oZXJpdHM7XG5cbmZ1bmN0aW9uIGlzU3Vycm9nYXRlUGFpcihtc2csIGkpIHtcbiAgaWYgKChtc2cuY2hhckNvZGVBdChpKSAmIDB4RkMwMCkgIT09IDB4RDgwMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoaSA8IDAgfHwgaSArIDEgPj0gbXNnLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gKG1zZy5jaGFyQ29kZUF0KGkgKyAxKSAmIDB4RkMwMCkgPT09IDB4REMwMDtcbn1cblxuZnVuY3Rpb24gdG9BcnJheShtc2csIGVuYykge1xuICBpZiAoQXJyYXkuaXNBcnJheShtc2cpKVxuICAgIHJldHVybiBtc2cuc2xpY2UoKTtcbiAgaWYgKCFtc2cpXG4gICAgcmV0dXJuIFtdO1xuICB2YXIgcmVzID0gW107XG4gIGlmICh0eXBlb2YgbXNnID09PSAnc3RyaW5nJykge1xuICAgIGlmICghZW5jKSB7XG4gICAgICAvLyBJbnNwaXJlZCBieSBzdHJpbmdUb1V0ZjhCeXRlQXJyYXkoKSBpbiBjbG9zdXJlLWxpYnJhcnkgYnkgR29vZ2xlXG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xlL2Nsb3N1cmUtbGlicmFyeS9ibG9iLzg1OThkODcyNDJhZjU5YWFjMjMzMjcwNzQyYzg5ODRlMmIyYmRiZTAvY2xvc3VyZS9nb29nL2NyeXB0L2NyeXB0LmpzI0wxMTctTDE0M1xuICAgICAgLy8gQXBhY2hlIExpY2Vuc2UgMi4wXG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xlL2Nsb3N1cmUtbGlicmFyeS9ibG9iL21hc3Rlci9MSUNFTlNFXG4gICAgICB2YXIgcCA9IDA7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgYyA9IG1zZy5jaGFyQ29kZUF0KGkpO1xuICAgICAgICBpZiAoYyA8IDEyOCkge1xuICAgICAgICAgIHJlc1twKytdID0gYztcbiAgICAgICAgfSBlbHNlIGlmIChjIDwgMjA0OCkge1xuICAgICAgICAgIHJlc1twKytdID0gKGMgPj4gNikgfCAxOTI7XG4gICAgICAgICAgcmVzW3ArK10gPSAoYyAmIDYzKSB8IDEyODtcbiAgICAgICAgfSBlbHNlIGlmIChpc1N1cnJvZ2F0ZVBhaXIobXNnLCBpKSkge1xuICAgICAgICAgIGMgPSAweDEwMDAwICsgKChjICYgMHgwM0ZGKSA8PCAxMCkgKyAobXNnLmNoYXJDb2RlQXQoKytpKSAmIDB4MDNGRik7XG4gICAgICAgICAgcmVzW3ArK10gPSAoYyA+PiAxOCkgfCAyNDA7XG4gICAgICAgICAgcmVzW3ArK10gPSAoKGMgPj4gMTIpICYgNjMpIHwgMTI4O1xuICAgICAgICAgIHJlc1twKytdID0gKChjID4+IDYpICYgNjMpIHwgMTI4O1xuICAgICAgICAgIHJlc1twKytdID0gKGMgJiA2MykgfCAxMjg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzW3ArK10gPSAoYyA+PiAxMikgfCAyMjQ7XG4gICAgICAgICAgcmVzW3ArK10gPSAoKGMgPj4gNikgJiA2MykgfCAxMjg7XG4gICAgICAgICAgcmVzW3ArK10gPSAoYyAmIDYzKSB8IDEyODtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZW5jID09PSAnaGV4Jykge1xuICAgICAgbXNnID0gbXNnLnJlcGxhY2UoL1teYS16MC05XSsvaWcsICcnKTtcbiAgICAgIGlmIChtc2cubGVuZ3RoICUgMiAhPT0gMClcbiAgICAgICAgbXNnID0gJzAnICsgbXNnO1xuICAgICAgZm9yIChpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkgKz0gMilcbiAgICAgICAgcmVzLnB1c2gocGFyc2VJbnQobXNnW2ldICsgbXNnW2kgKyAxXSwgMTYpKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yIChpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkrKylcbiAgICAgIHJlc1tpXSA9IG1zZ1tpXSB8IDA7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMudG9BcnJheSA9IHRvQXJyYXk7XG5cbmZ1bmN0aW9uIHRvSGV4KG1zZykge1xuICB2YXIgcmVzID0gJyc7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKVxuICAgIHJlcyArPSB6ZXJvMihtc2dbaV0udG9TdHJpbmcoMTYpKTtcbiAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMudG9IZXggPSB0b0hleDtcblxuZnVuY3Rpb24gaHRvbmwodykge1xuICB2YXIgcmVzID0gKHcgPj4+IDI0KSB8XG4gICAgICAgICAgICAoKHcgPj4+IDgpICYgMHhmZjAwKSB8XG4gICAgICAgICAgICAoKHcgPDwgOCkgJiAweGZmMDAwMCkgfFxuICAgICAgICAgICAgKCh3ICYgMHhmZikgPDwgMjQpO1xuICByZXR1cm4gcmVzID4+PiAwO1xufVxuZXhwb3J0cy5odG9ubCA9IGh0b25sO1xuXG5mdW5jdGlvbiB0b0hleDMyKG1zZywgZW5kaWFuKSB7XG4gIHZhciByZXMgPSAnJztcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgdyA9IG1zZ1tpXTtcbiAgICBpZiAoZW5kaWFuID09PSAnbGl0dGxlJylcbiAgICAgIHcgPSBodG9ubCh3KTtcbiAgICByZXMgKz0gemVybzgody50b1N0cmluZygxNikpO1xuICB9XG4gIHJldHVybiByZXM7XG59XG5leHBvcnRzLnRvSGV4MzIgPSB0b0hleDMyO1xuXG5mdW5jdGlvbiB6ZXJvMih3b3JkKSB7XG4gIGlmICh3b3JkLmxlbmd0aCA9PT0gMSlcbiAgICByZXR1cm4gJzAnICsgd29yZDtcbiAgZWxzZVxuICAgIHJldHVybiB3b3JkO1xufVxuZXhwb3J0cy56ZXJvMiA9IHplcm8yO1xuXG5mdW5jdGlvbiB6ZXJvOCh3b3JkKSB7XG4gIGlmICh3b3JkLmxlbmd0aCA9PT0gNylcbiAgICByZXR1cm4gJzAnICsgd29yZDtcbiAgZWxzZSBpZiAod29yZC5sZW5ndGggPT09IDYpXG4gICAgcmV0dXJuICcwMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gNSlcbiAgICByZXR1cm4gJzAwMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gNClcbiAgICByZXR1cm4gJzAwMDAnICsgd29yZDtcbiAgZWxzZSBpZiAod29yZC5sZW5ndGggPT09IDMpXG4gICAgcmV0dXJuICcwMDAwMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gMilcbiAgICByZXR1cm4gJzAwMDAwMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gMSlcbiAgICByZXR1cm4gJzAwMDAwMDAnICsgd29yZDtcbiAgZWxzZVxuICAgIHJldHVybiB3b3JkO1xufVxuZXhwb3J0cy56ZXJvOCA9IHplcm84O1xuXG5mdW5jdGlvbiBqb2luMzIobXNnLCBzdGFydCwgZW5kLCBlbmRpYW4pIHtcbiAgdmFyIGxlbiA9IGVuZCAtIHN0YXJ0O1xuICBhc3NlcnQobGVuICUgNCA9PT0gMCk7XG4gIHZhciByZXMgPSBuZXcgQXJyYXkobGVuIC8gNCk7XG4gIGZvciAodmFyIGkgPSAwLCBrID0gc3RhcnQ7IGkgPCByZXMubGVuZ3RoOyBpKyssIGsgKz0gNCkge1xuICAgIHZhciB3O1xuICAgIGlmIChlbmRpYW4gPT09ICdiaWcnKVxuICAgICAgdyA9IChtc2dba10gPDwgMjQpIHwgKG1zZ1trICsgMV0gPDwgMTYpIHwgKG1zZ1trICsgMl0gPDwgOCkgfCBtc2dbayArIDNdO1xuICAgIGVsc2VcbiAgICAgIHcgPSAobXNnW2sgKyAzXSA8PCAyNCkgfCAobXNnW2sgKyAyXSA8PCAxNikgfCAobXNnW2sgKyAxXSA8PCA4KSB8IG1zZ1trXTtcbiAgICByZXNbaV0gPSB3ID4+PiAwO1xuICB9XG4gIHJldHVybiByZXM7XG59XG5leHBvcnRzLmpvaW4zMiA9IGpvaW4zMjtcblxuZnVuY3Rpb24gc3BsaXQzMihtc2csIGVuZGlhbikge1xuICB2YXIgcmVzID0gbmV3IEFycmF5KG1zZy5sZW5ndGggKiA0KTtcbiAgZm9yICh2YXIgaSA9IDAsIGsgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrLCBrICs9IDQpIHtcbiAgICB2YXIgbSA9IG1zZ1tpXTtcbiAgICBpZiAoZW5kaWFuID09PSAnYmlnJykge1xuICAgICAgcmVzW2tdID0gbSA+Pj4gMjQ7XG4gICAgICByZXNbayArIDFdID0gKG0gPj4+IDE2KSAmIDB4ZmY7XG4gICAgICByZXNbayArIDJdID0gKG0gPj4+IDgpICYgMHhmZjtcbiAgICAgIHJlc1trICsgM10gPSBtICYgMHhmZjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzW2sgKyAzXSA9IG0gPj4+IDI0O1xuICAgICAgcmVzW2sgKyAyXSA9IChtID4+PiAxNikgJiAweGZmO1xuICAgICAgcmVzW2sgKyAxXSA9IChtID4+PiA4KSAmIDB4ZmY7XG4gICAgICByZXNba10gPSBtICYgMHhmZjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMuc3BsaXQzMiA9IHNwbGl0MzI7XG5cbmZ1bmN0aW9uIHJvdHIzMih3LCBiKSB7XG4gIHJldHVybiAodyA+Pj4gYikgfCAodyA8PCAoMzIgLSBiKSk7XG59XG5leHBvcnRzLnJvdHIzMiA9IHJvdHIzMjtcblxuZnVuY3Rpb24gcm90bDMyKHcsIGIpIHtcbiAgcmV0dXJuICh3IDw8IGIpIHwgKHcgPj4+ICgzMiAtIGIpKTtcbn1cbmV4cG9ydHMucm90bDMyID0gcm90bDMyO1xuXG5mdW5jdGlvbiBzdW0zMihhLCBiKSB7XG4gIHJldHVybiAoYSArIGIpID4+PiAwO1xufVxuZXhwb3J0cy5zdW0zMiA9IHN1bTMyO1xuXG5mdW5jdGlvbiBzdW0zMl8zKGEsIGIsIGMpIHtcbiAgcmV0dXJuIChhICsgYiArIGMpID4+PiAwO1xufVxuZXhwb3J0cy5zdW0zMl8zID0gc3VtMzJfMztcblxuZnVuY3Rpb24gc3VtMzJfNChhLCBiLCBjLCBkKSB7XG4gIHJldHVybiAoYSArIGIgKyBjICsgZCkgPj4+IDA7XG59XG5leHBvcnRzLnN1bTMyXzQgPSBzdW0zMl80O1xuXG5mdW5jdGlvbiBzdW0zMl81KGEsIGIsIGMsIGQsIGUpIHtcbiAgcmV0dXJuIChhICsgYiArIGMgKyBkICsgZSkgPj4+IDA7XG59XG5leHBvcnRzLnN1bTMyXzUgPSBzdW0zMl81O1xuXG5mdW5jdGlvbiBzdW02NChidWYsIHBvcywgYWgsIGFsKSB7XG4gIHZhciBiaCA9IGJ1Zltwb3NdO1xuICB2YXIgYmwgPSBidWZbcG9zICsgMV07XG5cbiAgdmFyIGxvID0gKGFsICsgYmwpID4+PiAwO1xuICB2YXIgaGkgPSAobG8gPCBhbCA/IDEgOiAwKSArIGFoICsgYmg7XG4gIGJ1Zltwb3NdID0gaGkgPj4+IDA7XG4gIGJ1Zltwb3MgKyAxXSA9IGxvO1xufVxuZXhwb3J0cy5zdW02NCA9IHN1bTY0O1xuXG5mdW5jdGlvbiBzdW02NF9oaShhaCwgYWwsIGJoLCBibCkge1xuICB2YXIgbG8gPSAoYWwgKyBibCkgPj4+IDA7XG4gIHZhciBoaSA9IChsbyA8IGFsID8gMSA6IDApICsgYWggKyBiaDtcbiAgcmV0dXJuIGhpID4+PiAwO1xufVxuZXhwb3J0cy5zdW02NF9oaSA9IHN1bTY0X2hpO1xuXG5mdW5jdGlvbiBzdW02NF9sbyhhaCwgYWwsIGJoLCBibCkge1xuICB2YXIgbG8gPSBhbCArIGJsO1xuICByZXR1cm4gbG8gPj4+IDA7XG59XG5leHBvcnRzLnN1bTY0X2xvID0gc3VtNjRfbG87XG5cbmZ1bmN0aW9uIHN1bTY0XzRfaGkoYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCwgZGgsIGRsKSB7XG4gIHZhciBjYXJyeSA9IDA7XG4gIHZhciBsbyA9IGFsO1xuICBsbyA9IChsbyArIGJsKSA+Pj4gMDtcbiAgY2FycnkgKz0gbG8gPCBhbCA/IDEgOiAwO1xuICBsbyA9IChsbyArIGNsKSA+Pj4gMDtcbiAgY2FycnkgKz0gbG8gPCBjbCA/IDEgOiAwO1xuICBsbyA9IChsbyArIGRsKSA+Pj4gMDtcbiAgY2FycnkgKz0gbG8gPCBkbCA/IDEgOiAwO1xuXG4gIHZhciBoaSA9IGFoICsgYmggKyBjaCArIGRoICsgY2Fycnk7XG4gIHJldHVybiBoaSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtNjRfNF9oaSA9IHN1bTY0XzRfaGk7XG5cbmZ1bmN0aW9uIHN1bTY0XzRfbG8oYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCwgZGgsIGRsKSB7XG4gIHZhciBsbyA9IGFsICsgYmwgKyBjbCArIGRsO1xuICByZXR1cm4gbG8gPj4+IDA7XG59XG5leHBvcnRzLnN1bTY0XzRfbG8gPSBzdW02NF80X2xvO1xuXG5mdW5jdGlvbiBzdW02NF81X2hpKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wsIGRoLCBkbCwgZWgsIGVsKSB7XG4gIHZhciBjYXJyeSA9IDA7XG4gIHZhciBsbyA9IGFsO1xuICBsbyA9IChsbyArIGJsKSA+Pj4gMDtcbiAgY2FycnkgKz0gbG8gPCBhbCA/IDEgOiAwO1xuICBsbyA9IChsbyArIGNsKSA+Pj4gMDtcbiAgY2FycnkgKz0gbG8gPCBjbCA/IDEgOiAwO1xuICBsbyA9IChsbyArIGRsKSA+Pj4gMDtcbiAgY2FycnkgKz0gbG8gPCBkbCA/IDEgOiAwO1xuICBsbyA9IChsbyArIGVsKSA+Pj4gMDtcbiAgY2FycnkgKz0gbG8gPCBlbCA/IDEgOiAwO1xuXG4gIHZhciBoaSA9IGFoICsgYmggKyBjaCArIGRoICsgZWggKyBjYXJyeTtcbiAgcmV0dXJuIGhpID4+PiAwO1xufVxuZXhwb3J0cy5zdW02NF81X2hpID0gc3VtNjRfNV9oaTtcblxuZnVuY3Rpb24gc3VtNjRfNV9sbyhhaCwgYWwsIGJoLCBibCwgY2gsIGNsLCBkaCwgZGwsIGVoLCBlbCkge1xuICB2YXIgbG8gPSBhbCArIGJsICsgY2wgKyBkbCArIGVsO1xuXG4gIHJldHVybiBsbyA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtNjRfNV9sbyA9IHN1bTY0XzVfbG87XG5cbmZ1bmN0aW9uIHJvdHI2NF9oaShhaCwgYWwsIG51bSkge1xuICB2YXIgciA9IChhbCA8PCAoMzIgLSBudW0pKSB8IChhaCA+Pj4gbnVtKTtcbiAgcmV0dXJuIHIgPj4+IDA7XG59XG5leHBvcnRzLnJvdHI2NF9oaSA9IHJvdHI2NF9oaTtcblxuZnVuY3Rpb24gcm90cjY0X2xvKGFoLCBhbCwgbnVtKSB7XG4gIHZhciByID0gKGFoIDw8ICgzMiAtIG51bSkpIHwgKGFsID4+PiBudW0pO1xuICByZXR1cm4gciA+Pj4gMDtcbn1cbmV4cG9ydHMucm90cjY0X2xvID0gcm90cjY0X2xvO1xuXG5mdW5jdGlvbiBzaHI2NF9oaShhaCwgYWwsIG51bSkge1xuICByZXR1cm4gYWggPj4+IG51bTtcbn1cbmV4cG9ydHMuc2hyNjRfaGkgPSBzaHI2NF9oaTtcblxuZnVuY3Rpb24gc2hyNjRfbG8oYWgsIGFsLCBudW0pIHtcbiAgdmFyIHIgPSAoYWggPDwgKDMyIC0gbnVtKSkgfCAoYWwgPj4+IG51bSk7XG4gIHJldHVybiByID4+PiAwO1xufVxuZXhwb3J0cy5zaHI2NF9sbyA9IHNocjY0X2xvO1xuIiwiaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gIC8vIGltcGxlbWVudGF0aW9uIGZyb20gc3RhbmRhcmQgbm9kZS5qcyAndXRpbCcgbW9kdWxlXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgaWYgKHN1cGVyQ3Rvcikge1xuICAgICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICAgIGN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckN0b3IucHJvdG90eXBlLCB7XG4gICAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgICAgdmFsdWU6IGN0b3IsXG4gICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9O1xufSBlbHNlIHtcbiAgLy8gb2xkIHNjaG9vbCBzaGltIGZvciBvbGQgYnJvd3NlcnNcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmhlcml0cyhjdG9yLCBzdXBlckN0b3IpIHtcbiAgICBpZiAoc3VwZXJDdG9yKSB7XG4gICAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvclxuICAgICAgdmFyIFRlbXBDdG9yID0gZnVuY3Rpb24gKCkge31cbiAgICAgIFRlbXBDdG9yLnByb3RvdHlwZSA9IHN1cGVyQ3Rvci5wcm90b3R5cGVcbiAgICAgIGN0b3IucHJvdG90eXBlID0gbmV3IFRlbXBDdG9yKClcbiAgICAgIGN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvclxuICAgIH1cbiAgfVxufVxuIiwiZnVuY3Rpb24gZShlKXt0aGlzLm1lc3NhZ2U9ZX1lLnByb3RvdHlwZT1uZXcgRXJyb3IsZS5wcm90b3R5cGUubmFtZT1cIkludmFsaWRDaGFyYWN0ZXJFcnJvclwiO3ZhciByPVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvdy5hdG9iJiZ3aW5kb3cuYXRvYi5iaW5kKHdpbmRvdyl8fGZ1bmN0aW9uKHIpe3ZhciB0PVN0cmluZyhyKS5yZXBsYWNlKC89KyQvLFwiXCIpO2lmKHQubGVuZ3RoJTQ9PTEpdGhyb3cgbmV3IGUoXCInYXRvYicgZmFpbGVkOiBUaGUgc3RyaW5nIHRvIGJlIGRlY29kZWQgaXMgbm90IGNvcnJlY3RseSBlbmNvZGVkLlwiKTtmb3IodmFyIG4sbyxhPTAsaT0wLGM9XCJcIjtvPXQuY2hhckF0KGkrKyk7fm8mJihuPWElND82NCpuK286byxhKyslNCk/Yys9U3RyaW5nLmZyb21DaGFyQ29kZSgyNTUmbj4+KC0yKmEmNikpOjApbz1cIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89XCIuaW5kZXhPZihvKTtyZXR1cm4gY307ZnVuY3Rpb24gdChlKXt2YXIgdD1lLnJlcGxhY2UoLy0vZyxcIitcIikucmVwbGFjZSgvXy9nLFwiL1wiKTtzd2l0Y2godC5sZW5ndGglNCl7Y2FzZSAwOmJyZWFrO2Nhc2UgMjp0Kz1cIj09XCI7YnJlYWs7Y2FzZSAzOnQrPVwiPVwiO2JyZWFrO2RlZmF1bHQ6dGhyb3dcIklsbGVnYWwgYmFzZTY0dXJsIHN0cmluZyFcIn10cnl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQocihlKS5yZXBsYWNlKC8oLikvZywoZnVuY3Rpb24oZSxyKXt2YXIgdD1yLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7cmV0dXJuIHQubGVuZ3RoPDImJih0PVwiMFwiK3QpLFwiJVwiK3R9KSkpfSh0KX1jYXRjaChlKXtyZXR1cm4gcih0KX19ZnVuY3Rpb24gbihlKXt0aGlzLm1lc3NhZ2U9ZX1mdW5jdGlvbiBvKGUscil7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIGUpdGhyb3cgbmV3IG4oXCJJbnZhbGlkIHRva2VuIHNwZWNpZmllZFwiKTt2YXIgbz0hMD09PShyPXJ8fHt9KS5oZWFkZXI/MDoxO3RyeXtyZXR1cm4gSlNPTi5wYXJzZSh0KGUuc3BsaXQoXCIuXCIpW29dKSl9Y2F0Y2goZSl7dGhyb3cgbmV3IG4oXCJJbnZhbGlkIHRva2VuIHNwZWNpZmllZDogXCIrZS5tZXNzYWdlKX19bi5wcm90b3R5cGU9bmV3IEVycm9yLG4ucHJvdG90eXBlLm5hbWU9XCJJbnZhbGlkVG9rZW5FcnJvclwiO2V4cG9ydCBkZWZhdWx0IG87ZXhwb3J0e24gYXMgSW52YWxpZFRva2VuRXJyb3J9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9and0LWRlY29kZS5lc20uanMubWFwXG4iLCJtb2R1bGUuZXhwb3J0cyA9IGFzc2VydDtcblxuZnVuY3Rpb24gYXNzZXJ0KHZhbCwgbXNnKSB7XG4gIGlmICghdmFsKVxuICAgIHRocm93IG5ldyBFcnJvcihtc2cgfHwgJ0Fzc2VydGlvbiBmYWlsZWQnKTtcbn1cblxuYXNzZXJ0LmVxdWFsID0gZnVuY3Rpb24gYXNzZXJ0RXF1YWwobCwgciwgbXNnKSB7XG4gIGlmIChsICE9IHIpXG4gICAgdGhyb3cgbmV3IEVycm9yKG1zZyB8fCAoJ0Fzc2VydGlvbiBmYWlsZWQ6ICcgKyBsICsgJyAhPSAnICsgcikpO1xufTtcbiIsIi8vIHNoaW0gZm9yIHVzaW5nIHByb2Nlc3MgaW4gYnJvd3NlclxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xuXG4vLyBjYWNoZWQgZnJvbSB3aGF0ZXZlciBnbG9iYWwgaXMgcHJlc2VudCBzbyB0aGF0IHRlc3QgcnVubmVycyB0aGF0IHN0dWIgaXRcbi8vIGRvbid0IGJyZWFrIHRoaW5ncy4gIEJ1dCB3ZSBuZWVkIHRvIHdyYXAgaXQgaW4gYSB0cnkgY2F0Y2ggaW4gY2FzZSBpdCBpc1xuLy8gd3JhcHBlZCBpbiBzdHJpY3QgbW9kZSBjb2RlIHdoaWNoIGRvZXNuJ3QgZGVmaW5lIGFueSBnbG9iYWxzLiAgSXQncyBpbnNpZGUgYVxuLy8gZnVuY3Rpb24gYmVjYXVzZSB0cnkvY2F0Y2hlcyBkZW9wdGltaXplIGluIGNlcnRhaW4gZW5naW5lcy5cblxudmFyIGNhY2hlZFNldFRpbWVvdXQ7XG52YXIgY2FjaGVkQ2xlYXJUaW1lb3V0O1xuXG5mdW5jdGlvbiBkZWZhdWx0U2V0VGltb3V0KCkge1xuICAgIHRocm93IG5ldyBFcnJvcignc2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuZnVuY3Rpb24gZGVmYXVsdENsZWFyVGltZW91dCAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbihmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBjbGVhclRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgfVxufSAoKSlcbmZ1bmN0aW9uIHJ1blRpbWVvdXQoZnVuKSB7XG4gICAgaWYgKGNhY2hlZFNldFRpbWVvdXQgPT09IHNldFRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIC8vIGlmIHNldFRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRTZXRUaW1lb3V0ID09PSBkZWZhdWx0U2V0VGltb3V0IHx8ICFjYWNoZWRTZXRUaW1lb3V0KSAmJiBzZXRUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfSBjYXRjaChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbChudWxsLCBmdW4sIDApO1xuICAgICAgICB9IGNhdGNoKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3JcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwodGhpcywgZnVuLCAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG59XG5mdW5jdGlvbiBydW5DbGVhclRpbWVvdXQobWFya2VyKSB7XG4gICAgaWYgKGNhY2hlZENsZWFyVGltZW91dCA9PT0gY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIC8vIGlmIGNsZWFyVGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZENsZWFyVGltZW91dCA9PT0gZGVmYXVsdENsZWFyVGltZW91dCB8fCAhY2FjaGVkQ2xlYXJUaW1lb3V0KSAmJiBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0ICB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKG51bGwsIG1hcmtlcik7XG4gICAgICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3IuXG4gICAgICAgICAgICAvLyBTb21lIHZlcnNpb25zIG9mIEkuRS4gaGF2ZSBkaWZmZXJlbnQgcnVsZXMgZm9yIGNsZWFyVGltZW91dCB2cyBzZXRUaW1lb3V0XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwodGhpcywgbWFya2VyKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG5cbn1cbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG52YXIgY3VycmVudFF1ZXVlO1xudmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuICAgIGlmICghZHJhaW5pbmcgfHwgIWN1cnJlbnRRdWV1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgfVxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgZHJhaW5RdWV1ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGltZW91dCA9IHJ1blRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgICBkcmFpbmluZyA9IHRydWU7XG5cbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIHJ1bkNsZWFyVGltZW91dCh0aW1lb3V0KTtcbn1cblxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHJ1blRpbWVvdXQoZHJhaW5RdWV1ZSk7XG4gICAgfVxufTtcblxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZE9uY2VMaXN0ZW5lciA9IG5vb3A7XG5cbnByb2Nlc3MubGlzdGVuZXJzID0gZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuIFtdIH1cblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG4iLCIvKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXHJcblxyXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcclxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxyXG5cclxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxyXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcclxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxyXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cclxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1JcclxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxyXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSAqL1xyXG5cclxudmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbihkLCBiKSB7XHJcbiAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XHJcbiAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxyXG4gICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XHJcbiAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xyXG4gICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XHJcbiAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XHJcbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgX19hc3NpZ24gPSBmdW5jdGlvbigpIHtcclxuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiBfX2Fzc2lnbih0KSB7XHJcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XHJcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3Jlc3QocywgZSkge1xyXG4gICAgdmFyIHQgPSB7fTtcclxuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxyXG4gICAgICAgIHRbcF0gPSBzW3BdO1xyXG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxyXG4gICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XHJcbiAgICAgICAgfVxyXG4gICAgcmV0dXJuIHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2RlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XHJcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcclxuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XHJcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19wYXJhbShwYXJhbUluZGV4LCBkZWNvcmF0b3IpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHsgZGVjb3JhdG9yKHRhcmdldCwga2V5LCBwYXJhbUluZGV4KTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkge1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcclxuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxyXG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XHJcbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XHJcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xyXG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcclxuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XHJcbiAgICAgICAgd2hpbGUgKF8pIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcclxuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XHJcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cclxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IHZhciBfX2NyZWF0ZUJpbmRpbmcgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XHJcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH0pO1xyXG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgIG9bazJdID0gbVtrXTtcclxufSk7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHBvcnRTdGFyKG0sIG8pIHtcclxuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobywgcCkpIF9fY3JlYXRlQmluZGluZyhvLCBtLCBwKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fdmFsdWVzKG8pIHtcclxuICAgIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgbSA9IHMgJiYgb1tzXSwgaSA9IDA7XHJcbiAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcclxuICAgIGlmIChvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHtcclxuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XHJcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihzID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZWFkKG8sIG4pIHtcclxuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcclxuICAgIGlmICghbSkgcmV0dXJuIG87XHJcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cclxuICAgIGZpbmFsbHkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cclxuICAgIH1cclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuLyoqIEBkZXByZWNhdGVkICovXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZCgpIHtcclxuICAgIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuLyoqIEBkZXByZWNhdGVkICovXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5cygpIHtcclxuICAgIGZvciAodmFyIHMgPSAwLCBpID0gMCwgaWwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWw7IGkrKykgcyArPSBhcmd1bWVudHNbaV0ubGVuZ3RoO1xyXG4gICAgZm9yICh2YXIgciA9IEFycmF5KHMpLCBrID0gMCwgaSA9IDA7IGkgPCBpbDsgaSsrKVxyXG4gICAgICAgIGZvciAodmFyIGEgPSBhcmd1bWVudHNbaV0sIGogPSAwLCBqbCA9IGEubGVuZ3RoOyBqIDwgamw7IGorKywgaysrKVxyXG4gICAgICAgICAgICByW2tdID0gYVtqXTtcclxuICAgIHJldHVybiByO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWRBcnJheSh0bywgZnJvbSwgcGFjaykge1xyXG4gICAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaSA9IDAsIGwgPSBmcm9tLmxlbmd0aCwgYXI7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICBpZiAoYXIgfHwgIShpIGluIGZyb20pKSB7XHJcbiAgICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XHJcbiAgICAgICAgICAgIGFyW2ldID0gZnJvbVtpXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdG8uY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20pKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXQodikge1xyXG4gICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jR2VuZXJhdG9yKHRoaXNBcmcsIF9hcmd1bWVudHMsIGdlbmVyYXRvcikge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XHJcbiAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaWYgKGdbbl0pIGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAocikgeyByLnZhbHVlIGluc3RhbmNlb2YgX19hd2FpdCA/IFByb21pc2UucmVzb2x2ZShyLnZhbHVlLnYpLnRoZW4oZnVsZmlsbCwgcmVqZWN0KSA6IHNldHRsZShxWzBdWzJdLCByKTsgfVxyXG4gICAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0RlbGVnYXRvcihvKSB7XHJcbiAgICB2YXIgaSwgcDtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiwgZnVuY3Rpb24gKGUpIHsgdGhyb3cgZTsgfSksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaVtuXSA9IG9bbl0gPyBmdW5jdGlvbiAodikgeyByZXR1cm4gKHAgPSAhcCkgPyB7IHZhbHVlOiBfX2F3YWl0KG9bbl0odikpLCBkb25lOiBuID09PSBcInJldHVyblwiIH0gOiBmID8gZih2KSA6IHY7IH0gOiBmOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xyXG4gICAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlbbl0gPSBvW25dICYmIGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHYgPSBvW25dKHYpLCBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB2LmRvbmUsIHYudmFsdWUpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tYWtlVGVtcGxhdGVPYmplY3QoY29va2VkLCByYXcpIHtcclxuICAgIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvb2tlZCwgXCJyYXdcIiwgeyB2YWx1ZTogcmF3IH0pOyB9IGVsc2UgeyBjb29rZWQucmF3ID0gcmF3OyB9XHJcbiAgICByZXR1cm4gY29va2VkO1xyXG59O1xyXG5cclxudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xyXG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcclxuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydFN0YXIobW9kKSB7XHJcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xyXG4gICAgdmFyIHJlc3VsdCA9IHt9O1xyXG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xyXG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydERlZmF1bHQobW9kKSB7XHJcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IGRlZmF1bHQ6IG1vZCB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEdldChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHtcclxuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtcclxuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xyXG4gICAgcmV0dXJuIGtpbmQgPT09IFwibVwiID8gZiA6IGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRTZXQocmVjZWl2ZXIsIHN0YXRlLCB2YWx1ZSwga2luZCwgZikge1xyXG4gICAgaWYgKGtpbmQgPT09IFwibVwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBtZXRob2QgaXMgbm90IHdyaXRhYmxlXCIpO1xyXG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyXCIpO1xyXG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcclxuICAgIHJldHVybiAoa2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIsIHZhbHVlKSA6IGYgPyBmLnZhbHVlID0gdmFsdWUgOiBzdGF0ZS5zZXQocmVjZWl2ZXIsIHZhbHVlKSksIHZhbHVlO1xyXG59XHJcbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpIiwiLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gKGV4cG9ydHMpID0+IHtcblx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cdH1cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbn07IiwiIiwiLy8gc3RhcnR1cFxuLy8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vLyBUaGlzIGVudHJ5IG1vZHVsZSBpcyByZWZlcmVuY2VkIGJ5IG90aGVyIG1vZHVsZXMgc28gaXQgY2FuJ3QgYmUgaW5saW5lZFxudmFyIF9fd2VicGFja19leHBvcnRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiLi9zcmMvaW5kZXgudHNcIik7XG4iLCIiXSwibmFtZXMiOlsiand0X2RlY29kZV8xIiwidHNsaWJfMSIsIl9faW1wb3J0RGVmYXVsdCIsInJlcXVpcmUiLCJjb25zdGFudHNfMSIsImNvbm5lY3RDcmVkZW50aWFsX2ludGVyZmFjZV8xIiwiaW50ZWdyYXRpb25faW50ZXJmYWNlXzEiLCJvYXV0aF8xIiwiU0RLRXZlbnRFbWl0dGVyXzEiLCJ0eXBlc18xIiwiY29ubmVjdF8xIiwiY3J5cHRvXzEiLCJodHRwXzEiLCJ0aHJvdHRsZV8xIiwiUEFSQUdPTl9ST09UX0lGUkFNRV9JRCIsIlBBUkFHT05fUk9PVF9JRlJBTUVfQ09OVEFJTkVSX0lEIiwiUEFSQUdPTl9TVEFURV9TVE9SQUdFX0tFWSIsImV4cG9ydHMiLCJQQVJBR09OX09WRVJGTE9XX0VNUFRZX1ZBTFVFIiwiQ29ubmVjdFNESyIsImRlZmF1bHQiLCJjb25zdHJ1Y3RvciIsInJvb3RMb2FkZWQiLCJtb2RhbFN0YXRlIiwiaW50ZWdyYXRpb24iLCJvbkNsb3NlIiwiYmluZCIsIm92ZXJsYXlTdHlsZSIsIm92ZXJmbG93Iiwib25PcGVuIiwiYXBpSW5zdGFsbGF0aW9uT3B0aW9ucyIsImlzQXBpSW5zdGFsbGF0aW9uIiwic2hvd1BvcnRhbEFmdGVySW5zdGFsbCIsInVzZXJTdGF0ZSIsImF1dGhlbnRpY2F0ZWQiLCJsb2FkZWRDb25maWdzIiwibG9hZGVkSW50ZWdyYXRpb25zIiwiZW5kVXNlckludGVncmF0aW9uQ29uZmlnIiwibWV0YWRhdGEiLCJjYWNoZWRBcGlSZXNwb25zZSIsIkNhY2hlVGhyb3R0bGUiLCJ0dGwiLCJrZXlUb1JlcXVlc3RQcm9taXNlTWFwIiwib3JpZ2luYWxCb2R5T3ZlcmZsb3ciLCJjb25maWdzIiwid2luZG93IiwiY29uc29sZSIsIndhcm4iLCJhc3NldFVSTCIsImdldEFzc2V0VXJsIiwiQ0ROX1BVQkxJQ19VUkwiLCJwcm9jZXNzIiwiZW52IiwiREFTSEJPQVJEX1BVQkxJQ19VUkwiLCJOT0RFX0VOViIsIlBMQVRGT1JNX0VOViIsIlZFUlNJT04iLCJlbnZpcm9ubWVudHMiLCJDT05ORUNUX1BVQkxJQ19VUkwiLCJQQVNTUE9SVF9QVUJMSUNfVVJMIiwiWkVVU19QVUJMSUNfVVJMIiwiRXJyb3IiLCJsb2FkU3RhdGUiLCJhZGRFdmVudExpc3RlbmVyIiwiZXZlbnRNZXNzYWdlSGFuZGxlciIsImRvY3VtZW50IiwicmVhZHlTdGF0ZSIsIkRvY3VtZW50TG9hZGluZ1N0YXRlIiwiTE9BRElORyIsImNyZWF0ZVJlYWN0Um9vdCIsImV2ZW50IiwiZGF0YSIsInR5cGUiLCJfb2F1dGhDYWxsYmFjayIsImNyZWRlbnRpYWwiLCJfb2F1dGhFcnJvckNhbGxiYWNrIiwiZXJyb3IiLCJmdW5jdGlvbkludm9jYXRpb25IYW5kbGVyIiwibWVzc2FnZVR5cGUiLCJpZCIsInBhcmFtZXRlcnMiLCJyZXBseSIsInJlc3VsdCIsImVyciIsIm1lc3NhZ2UiLCJzb3VyY2UiLCJwb3N0TWVzc2FnZSIsInJvb3QiLCJjcmVhdGVFbGVtZW50Iiwib25sb2FkIiwicmVuZGVyIiwiaXNBdFJvb3QiLCJxdWVyeVNlbGVjdG9yIiwic3JjIiwicHJvamVjdElkIiwic3R5bGUiLCJwb3NpdGlvbiIsInRvcCIsImxlZnQiLCJ3aWR0aCIsImhlaWdodCIsInpJbmRleCIsImRpc3BsYXkiLCJfYSIsImJvZHkiLCJhcHBlbmRDaGlsZCIsInZhbGlkYXRlQWN0aW9uIiwiYWN0aW9uIiwidmFsaWRhdGVJc0VuYWJsZWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJpc0N1c3RvbUludGVncmF0aW9uVHlwZU5hbWUiLCJPYmplY3QiLCJrZXlzIiwibWFwIiwidmFsaWRBY3Rpb24iLCJqb2luIiwiaXNBY3RpdmUiLCJCb29sZWFuIiwiX2IiLCJpbnRlZ3JhdGlvbnMiLCJlbmFibGVkIiwiYm9vdHN0cmFwU0RLU3RhdGUiLCJ1c2VyTWV0YSIsInByb2plY3QiLCJzZW5kQ29ubmVjdFJlcXVlc3QiLCJoZWFkZXJzIiwiSlNPTiIsInN0cmluZ2lmeSIsInVwZGF0ZUxvY2FsU3RhdGUiLCJzZXRNb2RhbFN0YXRlIiwic3RhdGVQYXJ0aWFsIiwiY29uZmlnIiwibG9jYWxTdGF0ZSIsImxvY2FsU3RvcmFnZSIsImdldEl0ZW0iLCJwYXJzZSIsInVwZGF0ZUF1dGhlbnRpY2F0ZWRVc2VyIiwiY2F0Y2giLCJjbGVhclN0YXRlIiwic2F2ZVN0YXRlIiwic2V0SXRlbSIsInJlbW92ZUl0ZW0iLCJ1cGRhdGUiLCJuZXh0Q29udGV4dCIsInVzZXIiLCJuZXh0TW9kYWxTdGF0ZSIsImNvbnRlbnRXaW5kb3ciLCJ1cGRhdGVDb250YWluZXJTdHlsZSIsIl9yZWYiLCJpc01vZGFsU2hvd24iLCJhdXRoZW50aWNhdGUiLCJ0b2tlbiIsIm9wdGlvbnMiLCJkZWNvZGVkSnd0IiwidXNlcklkIiwic3ViIiwibWV0YSIsImxvZ291dCIsImdldFVzZXIiLCJmcm9tRW50cmllcyIsImVudHJpZXMiLCJmaWx0ZXIiLCJfcmVmMiIsImtleSIsImNvbm5lY3QiLCJwYXJhbXMiLCJtYXBPYmplY3RGaWVsZHMiLCJvdmVycmlkZVJlZGlyZWN0VXJsIiwiYnlwYXNzUG9zdE9BdXRoUHJvbXB0IiwiY2FsbGJhY2tzIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJzdWJzY3JpYmVUb0ludGVncmF0aW9uIiwib25JbnN0YWxsIiwib25TdWNjZXNzIiwiY2FsbCIsIm9uRXJyb3IiLCJhY2Nlc3NpYmxlRmVhdHVyZXMiLCJpbmNsdWRlcyIsIkNvbm5lY3RBZGRPbiIsIkR5bmFtaWNGaWVsZE1hcHBlciIsImlzVmFsaWRVcmwiLCJzYW5pdGl6ZVVybCIsInZhbHVlcyIsImZpbmQiLCJnZXRJbnRlZ3JhdGlvblR5cGVOYW1lIiwic2hvdWxkU2hvd1ByZUF1dGhJbnB1dHMiLCJhdXRoU2NoZW1lIiwiZW5kVXNlclN1cHBsaWVkVmFsdWVzIiwiaXNBY2NvdW50VHlwZVN1cHBvcnRlZCIsInN0YXJ0T0F1dGhGbG93IiwiY29udGV4dCIsImVtaXRFcnJvciIsIm9hdXRoUmVzcG9uc2UiLCJjcmVkZW50aWFsSWQiLCJpbnRlZ3JhdGlvbklkIiwicGF5bG9hZCIsImluc3RhbGxPcHRpb25zIiwicmVxdWVzdFVSSSIsIm1ldGhvZCIsInByb3ZpZGVySWQiLCJzdGF0dXMiLCJwcm92aWRlckRhdGEiLCJjcmVkZW50aWFsU3RhdHVzIiwiQ3JlZGVudGlhbFN0YXR1cyIsIlZBTElEIiwidHJpZ2dlclNES0V2ZW50IiwiU0RLX0VWRU5UIiwiT05fSU5URUdSQVRJT05fSU5TVEFMTCIsImludGVncmF0aW9uVHlwZSIsImVycm9yTWVzc2FnZSIsImFsZXJ0IiwicGF0aCIsImluaXQiLCJwcmVmaXhXaXRoUHJvamVjdFBhdGgiLCJ1cmwiLCJjYWNoZUtleSIsImhhc2giLCJjYWNoZWRSZXN1bHQiLCJnZXQiLCJjYWNoZVJlc3VsdCIsInNob3VsZENhY2hlUmVxdWVzdCIsImFjY2Vzc1Rva2VuIiwib25Hb2luZ1JlcXVlc3QiLCJzZW5kUmVxdWVzdCIsIkFjY2VwdCIsIkF1dGhvcml6YXRpb24iLCJyZXNwb25zZSIsInJlc3BvbnNlQm9keSIsInJlc3BvbnNlRXJyb3IiLCJmZXRjaCIsIm9rIiwicmVxdWVzdFJldHVybmVkQXV0aG9yaXphdGlvbkVycm9yIiwidGV4dCIsImRlbCIsImpzb24iLCJzZXQiLCJyZXF1ZXN0IiwiYmFzZVByb3h5UGF0aCIsImN1c3RvbUludGVncmF0aW9uIiwic2x1ZyIsInBhdGhXaXRoTGVhZGluZ1NsYXNoIiwic3RhcnRzV2l0aCIsIklORkVSX0NPTlRFTlRfVFlQRV9GUk9NX0NPTk5FQ1RfT1BUSU9OUyIsIm91dHB1dCIsIm5hbWUiLCJmb3JjZUNsb3NlIiwiT05fUE9SVEFMX0NMT1NFIiwiT05fUE9SVEFMX09QRU4iLCJib3VuZGluZ1JlY3QiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJpbm5lckhlaWdodCIsImlubmVyV2lkdGgiLCJldmVudEluZm8iLCJ0cmlnZ2VyRXZlbnQiLCJnZXRJbnRlZ3JhdGlvbk1ldGFkYXRhIiwiaW50ZWdyYXRpb25LZXlOYW1lIiwid29ya2Zsb3ciLCJ3b3JrZmxvd0lkIiwicXVlcnkiLCJxdWVyeVN0cmluZyIsIlVSTFNlYXJjaFBhcmFtcyIsInRvU3RyaW5nIiwiaW5zdGFsbEludGVncmF0aW9uIiwiZGVmYXVsdEluc3RhbGxPcHRpb25zIiwibWVyZ2VkUGFyYW1zIiwiZW5zdXJlSGVhZGxlc3NJc1N1cHBvcnRlZCIsImlzQWxyZWFkeUVuYWJsZWQiLCJIZWFkbGVzc0Nvbm5lY3RQb3J0YWwiLCJ1bmluc3RhbGxJbnRlZ3JhdGlvbiIsImNvbmZpZ3VyZWRXb3JrZmxvd3MiLCJPTl9JTlRFR1JBVElPTl9VTklOU1RBTEwiLCJkaXNhYmxlV29ya2Zsb3ciLCJpc1dvcmtmbG93RW5hYmxlZCIsInVzZXJEYXRhIiwiYWxsIiwiZmV0Y2hVc2VyRGF0YSIsImZldGNoSW50ZWdyYXRpb25zIiwiZ2V0SW50ZWdyYXRpb25Db25maWdzIiwidXBkYXRlSW50ZWdyYXRpb25zIiwiZm9yRWFjaCIsImJyYW5kQ29sb3IiLCJfYyIsImFjY2VudENvbG9yIiwiaWNvbiIsIl9lIiwiX2QiLCJvdmVycmlkZUFjdGlvbkFsaWFzIiwiX2YiLCJzZXRVc2VyTWV0YWRhdGEiLCJhY3Rpb25OYW1lcyIsInJlcXVpcmVkQ29uZmlnc0FjdGlvbnMiLCJhY3Rpb25OYW1lIiwiQUNUSU9OX0NVU1RPTSIsImNvbmZpZ3VyZUdsb2JhbCIsInBhcmFtIiwiaG9zdCIsImRvbWFpbiIsImluZGV4T2YiLCJVUkwiLCJob3N0bmFtZSIsImdldFNlcnZpY2VVcmwiLCJTREtFdmVudEVtaXR0ZXIiLCJldmVudExpc3RlbmVyc01hcCIsImludGVncmF0aW9uU3RhdGVDYWxsYmFja3MiLCJzdWJzY3JpYmUiLCJldmVudE5hbWUiLCJsaXN0ZW5lciIsImFzc2VydEV2ZW50VHlwZSIsInVuc3Vic2NyaWJlIiwiY2FsbGJhY2tNYXAiLCJvbGRMaXN0ZW5lcnNDb3VudCIsImZuIiwiZW1pdFNhZmUiLCJfbGVuIiwiZXZlbnRQYXlsb2FkIiwiQXJyYXkiLCJfa2V5IiwiaW52b2tlQ2FsbGJhY2tTYWZlIiwiY2FsbGJhY2tUeXBlIiwiX2xlbjIiLCJfa2V5MiIsIndvcmtmbG93U3RhdGVDaGFuZ2UiLCJPTl9XT1JLRkxPV19DSEFOR0UiLCJBdXRoZW50aWNhdGlvblNjaGVtZSIsImdlbmVyYXRlU2x1Z0ZvckludGVncmF0aW9uIiwicmVwbGFjZSIsInRyaW0iLCJ0b0xvd2VyQ2FzZSIsImN1c3RvbUludGVncmF0aW9uX2ludGVyZmFjZV8xIiwiaXNPYmplY3QiLCJpdGVtIiwiaXNBcnJheSIsInBhcnNlS2V5ZWRTb3VyY2UiLCJ2YWx1ZSIsInN0cmlwVW5kZWZpbmVkQW5kTnVsbCIsIm9iaiIsIm5ld09iaiIsImNyZWRlbnRpYWxfaW50ZXJmYWNlXzEiLCJfMSIsImFjdGlvblR5cGUiLCJpbnB1dHMiLCJhdXRoU3BlY2lmaWNJbnB1dHMiLCJhdXRoZW50aWNhdGlvblR5cGUiLCJhdXRoU2NoZW1hUmVxdWlyZWRJbnB1dHMiLCJpbnB1dEZpZWxkcyIsIk9BVVRIIiwiQkFTSUMiLCJhdXRoUGFyYW1zIiwicmVxdWVzdFBhcmFtZXRlcnMiLCJxdWVyeU9iaiIsInVzZXJUb2tlbiIsInJlZGlyZWN0VXJsIiwib3JpZ2luRm9yUG9zdE1lc3NhZ2UiLCJsb2NhdGlvbiIsIm9yaWdpbiIsIm9wZW4iLCJDb25uZWN0U0RLXzEiLCJfX2V4cG9ydFN0YXIiLCJjb25uZWN0U2luZ2xldG9uIiwicGFyYWdvbiIsIlNpZGViYXJJbnB1dFR5cGUiLCJUb2tlblR5cGUiLCJBY3Rpb25SZXNwb25zZVN0YXR1cyIsIkFjdGlvblJlc3BvbnNlVHlwZSIsIkRhdGFTb3VyY2VUeXBlIiwibW9uZGF5Iiwic3RyaXBlXzEiLCJDT05ORUNUX1BMQU5fRkVBVFVSRV9NQVAiLCJCaWxsaW5nUGxhbiIsIkNvbm5lY3RCYXNpYyIsIkNvbm5lY3RQcm8iLCJDdXN0b21JbnRlZ3JhdGlvbkJ1aWxkZXIiLCJNb25pdG9yaW5nIiwiVXNlck1ldGFkYXRhIiwiV2hpdGVMYWJlbGluZyIsIkNvbm5lY3RFbnRlcnByaXNlIiwiVGFza0hpc3RvcnlBUEkiLCJSb2xlQmFzZWRBY2Nlc3NDb250cm9sIiwiV29ya2Zsb3dQZXJtaXNzaW9uIiwiYWN0aW9uXzEiLCJFeGVjdXRpb25TdGF0dXMiLCJTdXBwb3J0ZWRDb25uZWN0SW5wdXRUeXBlcyIsIlZhbHVlVGV4dCIsIkR5bmFtaWNFbnVtIiwiRW51bSIsIk51bWJlciIsIkVtYWlsIiwiRmllbGRNYXBwZXIiLCJCb29sZWFuSW5wdXQiLCJDb21ib0lucHV0IiwiUGFzc3dvcmQiLCJTd2l0Y2giLCJWYWx1ZVRleHRBcmVhIiwiSU1QRVJTT05BVEVEX0FQUCIsIk9BVVRIX0FQUCIsIlNFUlZJQ0VfQUNDT1VOVCIsIk9BVVRIX0NMSUVOVF9DUkVERU5USUFMIiwidGl0bGUiLCJyZXF1aXJlZCIsIkRhdGFUeXBlIiwiT3BlcmF0b3IiLCJNb2RhbFZpZXciLCJlbnZpcm9ubWVudF8xIiwiY2RuSG9zdCIsImRhc2hib2FyZFB1YmxpY1VSTCIsInZlcnNpb24iLCJwbGF0Zm9ybUVudiIsIm5vZGVFbnYiLCJQUk9EVUNUSU9OIiwiRU5URVJQUklTRSIsImhhc2hfanNfMSIsInNoYTI1NiIsImRpZ2VzdCIsInN1YnN0ciIsIkRlZmVycmVkUHJvbWlzZSIsInN0YXRlIiwiX3N0YXRlIiwiX3Byb21pc2UiLCJfcmVzb2x2ZSIsIl9yZWplY3QiLCJ0aGVuIiwib25mdWxmaWxsZWQiLCJvbnJlamVjdGVkIiwicmVhc29uIiwiZmluYWxseSIsIm9uZmluYWxseSIsIlN5bWJvbCIsInRvU3RyaW5nVGFnIiwiZ2VuZXJhdGVNYXRyaXgiLCJpbnB1dCIsImxpbWl0IiwibnVtVmFsdWVzIiwicmVkdWNlIiwic3VtIiwicHVzaCIsInBhcnRpYWxNYXRyaXgiLCJ2IiwicmVkdWNlZCIsImN1cnJlbnQiLCJ2YWwiLCJjb3B5Iiwic2xpY2UiLCJtYXRyaXgiLCJpbmRleCIsInNsZWVwIiwibWlsbGlzZWNvbmRzIiwic2V0VGltZW91dCIsInNhbml0aXplZFVybCIsImdsb2JhbFRoaXMiLCJtYXRjaCIsInNlcnZpY2UiLCJwcmVmaXgiLCJzdWZmaXgiLCJnZW5lcmljXzEiLCJDYWNoZU1vZGUiLCJDYWNoZVRocm90dGxlU3RhdGUiLCJDYWNoZVRocm90dGxlT3BlcmF0aW9uIiwiX0NhY2hlVGhyb3R0bGVfc3RhdGUiLCJJZGxlIiwiX0NhY2hlVGhyb3R0bGVfc3RvcmUiLCJfQ2FjaGVUaHJvdHRsZV9jb25maWciLCJfQ2FjaGVUaHJvdHRsZV9xdWV1ZSIsIl9fY2xhc3NQcml2YXRlRmllbGRTZXQiLCJtb2RlIiwiRGVib3VuY2UiLCJhc2FwIiwic2VyaWFsaXplZEtleSIsInNlcmlhbGl6ZUtleSIsImNhbGxiYWNrIiwiZW50cnkiLCJfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0IiwicmVmcmVzaFRpbWVvdXQiLCJjbGVhclBlbmRpbmdEZWxldGVzIiwiY2xlYXJQZW5kaW5nRGVsZXRlc09uS2V5IiwiZW5xdWV1ZSIsIkdldCIsImRpZFByZXZpb3VzbHlFeGlzdCIsIlRocm90dGxlIiwiU2V0IiwiZ2V0T3JTZXQiLCJnZW5lcmF0b3IiLCJHZXRPclNldCIsImlzS2V5U2VyaWFsaXplZCIsInRpbWVvdXQiLCJjbGVhclRpbWVvdXQiLCJvbkRlcmVnaXN0ZXIiLCJEZWwiLCJkbyIsIkRvIiwiY2xvc2UiLCJDbG9zZWQiLCJjdXJyZW50VmFsdWUiLCJvcGVyYXRpb24iLCJfbWV0aG9kIiwicHJvbWlzZSIsImZsdXNoIiwiUHJvY2Vzc2luZyIsIm5leHRUaWNrIiwiY3VycmVudEl0ZW0iLCJzaGlmdCIsImN1cnJlbnRNZXRob2QiLCJjdXJyZW50UHJvbWlzZSIsImUiXSwic291cmNlUm9vdCI6IiJ9
|
|
4387
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUNBLDRCQUE0QjtBQUM1Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixjQUFjO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckMscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckMscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7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QSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixzQkFBc0I7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHNDQUFzQzs7QUFFdEM7QUFDQTtBQUNBOztBQUVBLDRCQUE0QjtBQUM1QjtBQUNBO0FBQ0E7QUFDQSw2QkFBNkI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3ZMN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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Q0FBaUMsdUNBQXVDLFlBQVksS0FBSyxPQUFPO0FBQ2hHO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLDRCQUE0QjtBQUN0RSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1AsNkNBQTZDO0FBQzdDO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7VUM5T0E7VUFDQTs7VUFFQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTs7VUFFQTtVQUNBOztVQUVBO1VBQ0E7VUFDQTs7Ozs7V0N0QkE7V0FDQTtXQUNBO1dBQ0E7V0FDQSx5Q0FBeUMsd0NBQXdDO1dBQ2pGO1dBQ0E7V0FDQTs7Ozs7V0NQQTs7Ozs7V0NBQTtXQUNBO1dBQ0E7V0FDQSx1REFBdUQsaUJBQWlCO1dBQ3hFO1dBQ0EsZ0RBQWdELGFBQWE7V0FDN0Q7Ozs7O1VFTkE7VUFDQTtVQUNBO1VBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdXNlcGFyYWdvbi9jb25uZWN0Ly4vc3JjL0Nvbm5lY3RTREsudHN4Iiwid2VicGFjazovL0B1c2VwYXJhZ29uL2Nvbm5lY3QvLi9zcmMvU0RLRXZlbnRFbWl0dGVyLnRzIiwid2VicGFjazovL0B1c2VwYXJhZ29uL2Nvbm5lY3QvLi9zcmMvY29uc3RhbnRzLnRzIiwid2VicGFjazovL0B1c2VwYXJhZ29uL2Nvbm5lY3QvLi9zcmMvZW50aXRpZXMvY29ubmVjdENyZWRlbnRpYWwuaW50ZXJmYWNlLnRzIiwid2VicGFjazovL0B1c2VwYXJhZ29uL2Nvbm5lY3QvLi9zcmMvZW50aXRpZXMvY3JlZGVudGlhbC5pbnRlcmZhY2UudHMiLCJ3ZWJwYWNrOi8vQHVzZXBhcmFnb24vY29ubmVjdC8uL3NyYy9lbnRpdGllcy9jdXN0b21JbnRlZ3JhdGlvbi5pbnRlcmZhY2UudHMiLCJ3ZWJwYWNrOi8vQHVzZXBhcmFnb24vY29ubmVjdC8uL3NyYy9lbnRpdGllcy9pbnRlZ3JhdGlvbi5pbnRlcmZhY2UudHMiLCJ3ZWJwYWNrOi8vQHVzZXBhcmFnb24vY29ubmVjdC8uL3NyYy9oZWxwZXJzL2luZGV4LnRzIiwid2VicGFjazovL0B1c2VwYXJhZ29uL2Nvbm5lY3QvLi9zcmMvaGVscGVycy9vYXV0aC50cyIsIndlYnBhY2s6Ly9AdXNlcGFyYWdvbi9jb25uZWN0Ly4vc3JjL2luZGV4LnRzIiwid2VicGFjazovL0B1c2VwYXJhZ29uL2Nvbm5lY3QvLi9zcmMvdHlwZXMvYWN0aW9uLnRzIiwid2VicGFjazovL0B1c2VwYXJhZ29uL2Nvbm5lY3QvLi9zcmMvdHlwZXMvYmlsbGluZy50cyIsIndlYnBhY2s6Ly9AdXNlcGFyYWdvbi9jb25uZWN0Ly4vc3JjL3R5cGVzL2Nvbm5lY3QudHMiLCJ3ZWJwYWNrOi8vQHVzZXBhcmFnb24vY29ubmVjdC8uL3NyYy90eXBlcy9jb25uZWN0TW9kYWwudHMiLCJ3ZWJwYWNrOi8vQHVzZXBhcmFnb24vY29ubmVjdC8uL3NyYy90eXBlcy9lbnZpcm9ubWVudC50cyIsIndlYnBhY2s6Ly9AdXNlcGFyYWdvbi9jb25uZWN0Ly4vc3JjL3R5cGVzL2V4ZWN1dGlvbi50cyIsIndlYnBhY2s6Ly9AdXNlcGFyYWdvbi9jb25uZWN0Ly4vc3JjL3R5cGVzL2luZGV4LnRzIiwid2VicGFjazovL0B1c2VwYXJhZ29uL2Nvbm5lY3QvLi9zcmMvdHlwZXMvb2F1dGgudHMiLCJ3ZWJwYWNrOi8vQHVzZXBhcmFnb24vY29ubmVjdC8uL3NyYy90eXBlcy9yZXNvbHZlcnMudHMiLCJ3ZWJwYWNrOi8vQHVzZXBhcmFnb24vY29ubmVjdC8uL3NyYy90eXBlcy9zZGsudHMiLCJ3ZWJwYWNrOi8vQHVzZXBhcmFnb24vY29ubmVjdC8uL3NyYy90eXBlcy9zdHJpcGUudHMiLCJ3ZWJwYWNrOi8vQHVzZXBhcmFnb24vY29ubmVjdC8uL3NyYy91dGlscy9jb25uZWN0LnRzIiwid2VicGFjazovL0B1c2VwYXJhZ29uL2Nvbm5lY3QvLi9zcmMvdXRpbHMvY3J5cHRvLnRzIiwid2VicGFjazovL0B1c2VwYXJhZ29uL2Nvbm5lY3QvLi9zcmMvdXRpbHMvZ2VuZXJpYy50cyIsIndlYnBhY2s6Ly9AdXNlcGFyYWdvbi9jb25uZWN0Ly4vc3JjL3V0aWxzL2h0dHAudHMiLCJ3ZWJwYWNrOi8vQHVzZXBhcmFnb24vY29ubmVjdC8uL3NyYy91dGlscy90aHJvdHRsZS50cyIsIndlYnBhY2s6Ly9AdXNlcGFyYWdvbi9jb25uZWN0Ly4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2guanMiLCJ3ZWJwYWNrOi8vQHVzZXBhcmFnb24vY29ubmVjdC8uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL2NvbW1vbi5qcyIsIndlYnBhY2s6Ly9AdXNlcGFyYWdvbi9jb25uZWN0Ly4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvaG1hYy5qcyIsIndlYnBhY2s6Ly9AdXNlcGFyYWdvbi9jb25uZWN0Ly4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvcmlwZW1kLmpzIiwid2VicGFjazovL0B1c2VwYXJhZ29uL2Nvbm5lY3QvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEuanMiLCJ3ZWJwYWNrOi8vQHVzZXBhcmFnb24vY29ubmVjdC8uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS8xLmpzIiwid2VicGFjazovL0B1c2VwYXJhZ29uL2Nvbm5lY3QvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvMjI0LmpzIiwid2VicGFjazovL0B1c2VwYXJhZ29uL2Nvbm5lY3QvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvMjU2LmpzIiwid2VicGFjazovL0B1c2VwYXJhZ29uL2Nvbm5lY3QvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvMzg0LmpzIiwid2VicGFjazovL0B1c2VwYXJhZ29uL2Nvbm5lY3QvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvNTEyLmpzIiwid2VicGFjazovL0B1c2VwYXJhZ29uL2Nvbm5lY3QvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvY29tbW9uLmpzIiwid2VicGFjazovL0B1c2VwYXJhZ29uL2Nvbm5lY3QvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC91dGlscy5qcyIsIndlYnBhY2s6Ly9AdXNlcGFyYWdvbi9jb25uZWN0Ly4vbm9kZV9tb2R1bGVzL2luaGVyaXRzL2luaGVyaXRzX2Jyb3dzZXIuanMiLCJ3ZWJwYWNrOi8vQHVzZXBhcmFnb24vY29ubmVjdC8uL25vZGVfbW9kdWxlcy9qd3QtZGVjb2RlL2J1aWxkL2p3dC1kZWNvZGUuZXNtLmpzIiwid2VicGFjazovL0B1c2VwYXJhZ29uL2Nvbm5lY3QvLi9ub2RlX21vZHVsZXMvbWluaW1hbGlzdGljLWFzc2VydC9pbmRleC5qcyIsIndlYnBhY2s6Ly9AdXNlcGFyYWdvbi9jb25uZWN0Ly4vbm9kZV9tb2R1bGVzL3Byb2Nlc3MvYnJvd3Nlci5qcyIsIndlYnBhY2s6Ly9AdXNlcGFyYWdvbi9jb25uZWN0Ly4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsIndlYnBhY2s6Ly9AdXNlcGFyYWdvbi9jb25uZWN0L3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL0B1c2VwYXJhZ29uL2Nvbm5lY3Qvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL0B1c2VwYXJhZ29uL2Nvbm5lY3Qvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9AdXNlcGFyYWdvbi9jb25uZWN0L3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vQHVzZXBhcmFnb24vY29ubmVjdC93ZWJwYWNrL2JlZm9yZS1zdGFydHVwIiwid2VicGFjazovL0B1c2VwYXJhZ29uL2Nvbm5lY3Qvd2VicGFjay9zdGFydHVwIiwid2VicGFjazovL0B1c2VwYXJhZ29uL2Nvbm5lY3Qvd2VicGFjay9hZnRlci1zdGFydHVwIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBqd3REZWNvZGUgZnJvbSAnand0LWRlY29kZSc7XG5cbmltcG9ydCB7IEFDVElPTl9DVVNUT00gfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBDcmVkZW50aWFsU3RhdHVzLCBJQ29ubmVjdENyZWRlbnRpYWwgfSBmcm9tICcuL2VudGl0aWVzL2Nvbm5lY3RDcmVkZW50aWFsLmludGVyZmFjZSc7XG5pbXBvcnQgeyBPYXV0aENhbGxiYWNrUmVzcG9uc2UgfSBmcm9tICcuL2VudGl0aWVzL2NyZWRlbnRpYWwuaW50ZXJmYWNlJztcbmltcG9ydCB7XG4gIElDb25uZWN0SW50ZWdyYXRpb25XaXRoQ3JlZGVudGlhbEluZm8sXG4gIElJbnRlZ3JhdGlvbk1ldGFkYXRhLFxuICBnZXRJbnRlZ3JhdGlvblR5cGVOYW1lLFxuICBpc0N1c3RvbUludGVncmF0aW9uVHlwZU5hbWUsXG59IGZyb20gJy4vZW50aXRpZXMvaW50ZWdyYXRpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IElQZXJzb25hLCBQZXJzb25hTWV0YSB9IGZyb20gJy4vZW50aXRpZXMvcGVyc29uYS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSUNvbm5lY3RTREtQcm9qZWN0IH0gZnJvbSAnLi9lbnRpdGllcy9wcm9qZWN0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBJQ29ubmVjdFVzZXJDb250ZXh0IH0gZnJvbSAnLi9oZWxwZXJzL0Nvbm5lY3RVc2VyQ29udGV4dCc7XG5pbXBvcnQgeyBzaG91bGRTaG93UHJlQXV0aElucHV0cywgc3RhcnRPQXV0aEZsb3cgfSBmcm9tICcuL2hlbHBlcnMvb2F1dGgnO1xuaW1wb3J0IFNES0V2ZW50RW1pdHRlciBmcm9tICcuL1NES0V2ZW50RW1pdHRlcic7XG5pbXBvcnQgeyBDb25uZWN0U2RrRW52aXJvbm1lbnRzIH0gZnJvbSAnLi9zZXJ2ZXIudHlwZXMnO1xuaW1wb3J0IHtcbiAgQWN0aW9uQ29uZmlnRFRPLFxuICBBdXRoZW50aWNhdGVPcHRpb25zLFxuICBBdXRoZW50aWNhdGVkQ29ubmVjdFVzZXIsXG4gIENvbm5lY3RBZGRPbixcbiAgUHJvcHMgYXMgQ29ubmVjdE1vZGFsUHJvcHMsXG4gIENvbm5lY3RQYXJhbXMsXG4gIENvbm5lY3RVc2VyLFxuICBEb2N1bWVudExvYWRpbmdTdGF0ZSxcbiAgRXZlbnRJbmZvLFxuICBGdW5jdGlvblByb3BlcnR5TmFtZXMsXG4gIElDb25uZWN0U0RLLFxuICBJQ29ubmVjdFVzZXIsXG4gIElORkVSX0NPTlRFTlRfVFlQRV9GUk9NX0NPTk5FQ1RfT1BUSU9OUyxcbiAgSW5zdGFsbE9wdGlvbnMsXG4gIEludGVncmF0aW9uSW5zdGFsbEV2ZW50LFxuICBNb2RhbENvbmZpZyxcbiAgU0RLRnVuY3Rpb25FcnJvck1lc3NhZ2UsXG4gIFNES0Z1bmN0aW9uSW52b2NhdGlvbk1lc3NhZ2UsXG4gIFNES0Z1bmN0aW9uUmVzcG9uc2VNZXNzYWdlLFxuICBTREtSZWNlaXZlZE1lc3NhZ2UsXG4gIFNES19FVkVOVCxcbiAgVHJpZ2dlcldvcmtmbG93UmVxdWVzdCxcbiAgVUlVcGRhdGVNZXNzYWdlLFxuICBVbndyYXBQcm9taXNlLFxuICBVc2VyUHJvdmlkZWRJbnRlZ3JhdGlvbkNvbmZpZyxcbiAgb3ZlcnJpZGVBY3Rpb25BbGlhcyxcbn0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBnZXRBc3NldFVybCB9IGZyb20gJy4vdXRpbHMvY29ubmVjdCc7XG5pbXBvcnQgeyBoYXNoIH0gZnJvbSAnLi91dGlscy9jcnlwdG8nO1xuaW1wb3J0IHsgZ2V0U2VydmljZVVybCwgaXNWYWxpZFVybCwgc2FuaXRpemVVcmwgfSBmcm9tICcuL3V0aWxzL2h0dHAnO1xuaW1wb3J0IHsgQ2FjaGVUaHJvdHRsZSB9IGZyb20gJy4vdXRpbHMvdGhyb3R0bGUnO1xuXG5jb25zdCBQQVJBR09OX1JPT1RfSUZSQU1FX0lEID0gJ3BhcmFnb24tY29ubmVjdC1mcmFtZSc7XG5jb25zdCBQQVJBR09OX1JPT1RfSUZSQU1FX0NPTlRBSU5FUl9JRCA9IGAke1BBUkFHT05fUk9PVF9JRlJBTUVfSUR9LWNvbnRhaW5lcmA7XG5jb25zdCBQQVJBR09OX1NUQVRFX1NUT1JBR0VfS0VZID0gJ3BhcmFnb24tY29ubmVjdC11c2VyLXN0YXRlJztcbmV4cG9ydCBjb25zdCBQQVJBR09OX09WRVJGTE9XX0VNUFRZX1ZBTFVFID0gJ1BBUkFHT05fT1ZFUkZMT1dfRU1QVFlfVkFMVUUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb25uZWN0U0RLIGV4dGVuZHMgU0RLRXZlbnRFbWl0dGVyIGltcGxlbWVudHMgSUNvbm5lY3RTREsge1xuICByb290OiBIVE1MSUZyYW1lRWxlbWVudCB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSByb290TG9hZGVkOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgcHJvamVjdElkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgbW9kYWxTdGF0ZTogQ29ubmVjdE1vZGFsUHJvcHMgPSB7XG4gICAgaW50ZWdyYXRpb246IG51bGwsXG4gICAgb25DbG9zZTogdGhpcy5vbkNsb3NlLmJpbmQodGhpcyksXG4gICAgb3ZlcmxheVN0eWxlOiB7IG92ZXJmbG93OiAnYXV0bycgfSxcbiAgICBvbk9wZW46IHRoaXMub25PcGVuLmJpbmQodGhpcyksXG4gICAgYXBpSW5zdGFsbGF0aW9uT3B0aW9uczoge1xuICAgICAgaXNBcGlJbnN0YWxsYXRpb246IGZhbHNlLFxuICAgICAgc2hvd1BvcnRhbEFmdGVySW5zdGFsbDogZmFsc2UsXG4gICAgfSxcbiAgfTtcbiAgcHJpdmF0ZSB1c2VyU3RhdGU6IENvbm5lY3RVc2VyID0ge1xuICAgIGF1dGhlbnRpY2F0ZWQ6IGZhbHNlLFxuICB9O1xuICBwcml2YXRlIGxvYWRlZENvbmZpZ3M6IHsgW3R5cGU6IHN0cmluZ106IE1vZGFsQ29uZmlnIH0gPSB7fTtcbiAgcHJpdmF0ZSBsb2FkZWRJbnRlZ3JhdGlvbnM6IHsgW3R5cGU6IHN0cmluZ106IElDb25uZWN0SW50ZWdyYXRpb25XaXRoQ3JlZGVudGlhbEluZm8gfSA9IHt9O1xuICBwcml2YXRlIGVuZFVzZXJJbnRlZ3JhdGlvbkNvbmZpZzogeyBbdHlwZTogc3RyaW5nXTogVXNlclByb3ZpZGVkSW50ZWdyYXRpb25Db25maWcgfSA9IHt9O1xuICBwcml2YXRlIGVudmlyb25tZW50czogQ29ubmVjdFNka0Vudmlyb25tZW50cztcbiAgcHJpdmF0ZSBwcm9qZWN0OiBJQ29ubmVjdFNES1Byb2plY3Q7XG5cbiAgLyoqXG4gICAqIG1hcCBiL3cgaW50ZWdyYXRpb24ga2V5IG5hbWUgdG8gaW50ZWdyYXRpb24gbWV0YWRhdGFcbiAgICovXG4gIHByaXZhdGUgbWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIElJbnRlZ3JhdGlvbk1ldGFkYXRhPiA9IHt9O1xuXG4gIC8qKlxuICAgKiBjYWNoZSBzZXJ2aWNlXG4gICAqL1xuICBwcml2YXRlIGNhY2hlZEFwaVJlc3BvbnNlOiBDYWNoZVRocm90dGxlID0gbmV3IENhY2hlVGhyb3R0bGUoeyB0dGw6IDEwMDAgKiA1IH0pO1xuXG4gIC8qKlxuICAgKiBpbiBvcmRlciB0byBub3QgY2FsbCBtdWx0aXBsZSBzYW1lIEdFVCByZXF1ZXN0IGF0IHNhbWUgdGltZVxuICAgKiB3ZSBhcmUgc3RvcmluZyB7a2V5IC0+IHByb21pc2V9IG1hcFxuICAgKi9cbiAgcHJpdmF0ZSBrZXlUb1JlcXVlc3RQcm9taXNlTWFwOiBSZWNvcmQ8c3RyaW5nLCBQcm9taXNlPHVua25vd24+PiA9IHt9O1xuXG4gIC8qKlxuICAgKiB0aGlzIHdpbGwgc3RvcmUgdGhlIG9yaWdpbmFsIG92ZXJmbG93IHN0eWxlIG9mIGJvZHlcbiAgICogd2UgYXJlIHVzaW5nIFBBUkFHT05fT1ZFUkZMT1dfRU1QVFlfVkFMVUUgYXMgZGVmYXVsdFxuICAgKiBzbyB0aGF0IHdlIHdpbGwgYmUgYWJsZSB0byBrbm93IHdoZXRoZXIgc3R5bGUgaXMgYWRkZWQgaW4gYm9keSBvciBub3RcbiAgICovXG4gIHByaXZhdGUgb3JpZ2luYWxCb2R5T3ZlcmZsb3c6IHN0cmluZyB8IG51bGwgPSBQQVJBR09OX09WRVJGTE9XX0VNUFRZX1ZBTFVFO1xuXG4gIHByaXZhdGUgY29uZmlnczogUmVjb3JkPHN0cmluZywgQWN0aW9uQ29uZmlnRFRPPiA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ2Nvbm5lY3Qgc2RrIGNhbiBvbmx5IGJlIHVzZWQgb24gYnJvd3NlcicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGFzc2V0VVJMOiBzdHJpbmcgPSBnZXRBc3NldFVybCh7XG4gICAgICBDRE5fUFVCTElDX1VSTDogcHJvY2Vzcy5lbnYuQ0ROX1BVQkxJQ19VUkwgfHwgJycsXG4gICAgICBEQVNIQk9BUkRfUFVCTElDX1VSTDogcHJvY2Vzcy5lbnYuREFTSEJPQVJEX1BVQkxJQ19VUkwgfHwgJycsXG4gICAgICBOT0RFX0VOVjogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgfHwgJycsXG4gICAgICBQTEFURk9STV9FTlY6IHByb2Nlc3MuZW52LlBMQVRGT1JNX0VOViB8fCAnJyxcbiAgICAgIFZFUlNJT046IHByb2Nlc3MuZW52LlZFUlNJT04gfHwgJycsXG4gICAgfSk7XG4gICAgdGhpcy5lbnZpcm9ubWVudHMgPSB7XG4gICAgICBDRE5fUFVCTElDX1VSTDogYXNzZXRVUkwsXG4gICAgICBDT05ORUNUX1BVQkxJQ19VUkw6IHByb2Nlc3MuZW52LkNPTk5FQ1RfUFVCTElDX1VSTCBhcyBzdHJpbmcsXG4gICAgICBEQVNIQk9BUkRfUFVCTElDX1VSTDogcHJvY2Vzcy5lbnYuREFTSEJPQVJEX1BVQkxJQ19VUkwgYXMgc3RyaW5nLFxuICAgICAgTk9ERV9FTlY6IHByb2Nlc3MuZW52Lk5PREVfRU5WIGFzIHN0cmluZyxcbiAgICAgIFBBU1NQT1JUX1BVQkxJQ19VUkw6IHByb2Nlc3MuZW52LlBBU1NQT1JUX1BVQkxJQ19VUkwgYXMgc3RyaW5nLFxuICAgICAgUExBVEZPUk1fRU5WOiBwcm9jZXNzLmVudi5QTEFURk9STV9FTlYgYXMgc3RyaW5nLFxuICAgICAgVkVSU0lPTjogcHJvY2Vzcy5lbnYuVkVSU0lPTiBhcyBzdHJpbmcsXG4gICAgICBaRVVTX1BVQkxJQ19VUkw6IHByb2Nlc3MuZW52LlpFVVNfUFVCTElDX1VSTCBhcyBzdHJpbmcsXG4gICAgfTtcblxuICAgIGlmICghdGhpcy5lbnZpcm9ubWVudHMuQ09OTkVDVF9QVUJMSUNfVVJMKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFnb24gU0RLIGVycm9yISBObyBgQ09OTkVDVF9QVUJMSUNfVVJMYCBjb25maWd1cmVkLicpO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMuZW52aXJvbm1lbnRzLkRBU0hCT0FSRF9QVUJMSUNfVVJMKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFnb24gU0RLIGVycm9yISBObyBgREFTSEJPQVJEX1BVQkxJQ19VUkxgIGNvbmZpZ3VyZWQuJyk7XG4gICAgfSBlbHNlIGlmICghdGhpcy5lbnZpcm9ubWVudHMuUEFTU1BPUlRfUFVCTElDX1VSTCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXJhZ29uIFNESyBlcnJvciEgTm8gYFBBU1NQT1JUX1BVQkxJQ19VUkxgIGNvbmZpZ3VyZWQuJyk7XG4gICAgfSBlbHNlIGlmICghdGhpcy5lbnZpcm9ubWVudHMuWkVVU19QVUJMSUNfVVJMKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFnb24gU0RLIGVycm9yISBObyBgWkVVU19QVUJMSUNfVVJMYCBjb25maWd1cmVkLicpO1xuICAgIH1cblxuICAgIHRoaXMubG9hZFN0YXRlKCk7XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIHRoaXMuZXZlbnRNZXNzYWdlSGFuZGxlci5iaW5kKHRoaXMpKTtcblxuICAgIGlmICh3aW5kb3cuZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gRG9jdW1lbnRMb2FkaW5nU3RhdGUuTE9BRElORykge1xuICAgICAgLy8gc3RpbGwgbG9hZGluZywgd2FpdCBmb3IgdGhlIGV2ZW50XG4gICAgICB3aW5kb3cuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsICgpID0+IHtcbiAgICAgICAgdGhpcy5jcmVhdGVSZWFjdFJvb3QoKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBET00gaXMgcmVhZHkhXG4gICAgICB0aGlzLmNyZWF0ZVJlYWN0Um9vdCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBwb3N0IG1lc3NhZ2UgaGFuZGxlclxuICAgKiBAcGFyYW0gZXZlbnRcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZXZlbnRNZXNzYWdlSGFuZGxlcihldmVudDogTWVzc2FnZUV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgc3dpdGNoIChldmVudC5kYXRhLnR5cGUpIHtcbiAgICAgIGNhc2UgJ29hdXRoX3N1Y2Nlc3NfY2FsbGJhY2snOlxuICAgICAgICBhd2FpdCB0aGlzLl9vYXV0aENhbGxiYWNrKGV2ZW50LmRhdGEuY3JlZGVudGlhbCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnb2F1dGhfZXJyb3JfY2FsbGJhY2snOlxuICAgICAgICBhd2FpdCB0aGlzLl9vYXV0aEVycm9yQ2FsbGJhY2soZXZlbnQuZGF0YS5lcnJvcik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXdhaXQgdGhpcy5mdW5jdGlvbkludm9jYXRpb25IYW5kbGVyKGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZ1bmN0aW9uSW52b2NhdGlvbkhhbmRsZXI8VCBleHRlbmRzIEZ1bmN0aW9uUHJvcGVydHlOYW1lczxDb25uZWN0U0RLPj4oXG4gICAgZXZlbnQ6IE1lc3NhZ2VFdmVudCxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKChldmVudC5kYXRhIGFzIFNES1JlY2VpdmVkTWVzc2FnZSkubWVzc2FnZVR5cGUgIT09ICdTREtfRlVOQ1RJT05fSU5WT0NBVElPTicpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgeyB0eXBlLCBpZCwgcGFyYW1ldGVycyB9ID0gZXZlbnQuZGF0YSBhcyBTREtGdW5jdGlvbkludm9jYXRpb25NZXNzYWdlPFQ+O1xuICAgIGxldCByZXBseTogU0RLRnVuY3Rpb25SZXNwb25zZU1lc3NhZ2U8VD4gfCBTREtGdW5jdGlvbkVycm9yTWVzc2FnZSB8IHVuZGVmaW5lZDtcblxuICAgIHRyeSB7XG4gICAgICAvLyBAdHMtaWdub3JlIFRoZSBzcHJlYWQgaXNuJ3QgcmVjb2duaXplZCBoZXJlIGFzIHZhbGlkIGFyZ3NcbiAgICAgIGNvbnN0IHJlc3VsdCA9IChhd2FpdCB0aGlzW3R5cGVdKC4uLnBhcmFtZXRlcnMpKSBhcyBVbndyYXBQcm9taXNlPFJldHVyblR5cGU8Q29ubmVjdFNES1tUXT4+O1xuICAgICAgcmVwbHkgPSB7IG1lc3NhZ2VUeXBlOiAnU0RLX0ZVTkNUSU9OX1JFU1BPTlNFJywgaWQsIHR5cGUsIHJlc3VsdCB9O1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmVwbHkgPSB7IG1lc3NhZ2VUeXBlOiAnU0RLX0ZVTkNUSU9OX0VSUk9SJywgZXJyb3I6IHRydWUsIG1lc3NhZ2U6IGVyci5tZXNzYWdlLCBpZCB9O1xuICAgIH1cblxuICAgIChldmVudC5zb3VyY2UgYXMgV2luZG93KS5wb3N0TWVzc2FnZShyZXBseSwgdGhpcy5lbnZpcm9ubWVudHMuQ09OTkVDVF9QVUJMSUNfVVJMKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlUmVhY3RSb290KCk6IHZvaWQge1xuICAgIHRoaXMucm9vdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpO1xuICAgIHRoaXMucm9vdC5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICB0aGlzLnJvb3RMb2FkZWQgPSB0cnVlO1xuICAgICAgLy8gd2hlbiByb290IGlzIGxvYWRlZCB0aGVuIHJlbmRlciBjb21wb25lbnRcbiAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGlzQXRSb290OiBib29sZWFuID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgIyR7UEFSQUdPTl9ST09UX0lGUkFNRV9DT05UQUlORVJfSUR9YClcbiAgICAgID8gdHJ1ZVxuICAgICAgOiBmYWxzZTtcbiAgICB0aGlzLnJvb3QuaWQgPSBQQVJBR09OX1JPT1RfSUZSQU1FX0lEO1xuICAgIHRoaXMucm9vdC5zcmMgPSBgJHt0aGlzLmVudmlyb25tZW50cy5DT05ORUNUX1BVQkxJQ19VUkx9L3VpJHtcbiAgICAgIHRoaXMucHJvamVjdElkID8gYD9wcm9qZWN0SWQ9JHt0aGlzLnByb2plY3RJZH1gIDogJydcbiAgICB9YDtcbiAgICB0aGlzLnJvb3Quc3R5bGUucG9zaXRpb24gPSBpc0F0Um9vdCA/ICdhYnNvbHV0ZScgOiAnZml4ZWQnO1xuICAgIHRoaXMucm9vdC5zdHlsZS50b3AgPSAnMCc7XG4gICAgdGhpcy5yb290LnN0eWxlLmxlZnQgPSAnMCc7XG4gICAgdGhpcy5yb290LnN0eWxlLndpZHRoID0gaXNBdFJvb3QgPyAnMTAwJScgOiAnMTAwdncnO1xuICAgIHRoaXMucm9vdC5zdHlsZS5oZWlnaHQgPSBpc0F0Um9vdCA/ICcxMDAlJyA6ICcxMDB2aCc7XG4gICAgdGhpcy5yb290LnN0eWxlLnpJbmRleCA9ICcyMTQ3NDgzNjQ3JztcbiAgICB0aGlzLnJvb3Quc3R5bGUuZGlzcGxheSA9ICdub25lJztcblxuICAgIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHtQQVJBR09OX1JPT1RfSUZSQU1FX0NPTlRBSU5FUl9JRH1gKSB8fCBkb2N1bWVudC5ib2R5KT8uYXBwZW5kQ2hpbGQoXG4gICAgICB0aGlzLnJvb3QsXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVBY3Rpb24oYWN0aW9uOiBzdHJpbmcsIHZhbGlkYXRlSXNFbmFibGVkOiBib29sZWFuID0gZmFsc2UpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMubG9hZGVkSW50ZWdyYXRpb25zW2FjdGlvbl0gJiYgIWlzQ3VzdG9tSW50ZWdyYXRpb25UeXBlTmFtZShhY3Rpb24pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBcIiR7YWN0aW9ufVwiIGlzIG5vdCBhIHZhbGlkIGludGVncmF0aW9uIHR5cGUuIFRoZSBpbnRlZ3JhdGlvbnMgeW91IGhhdmUgY29uZmlndXJlZCBmb3IgdGhpcyBQYXJhZ29uIHByb2plY3QgYXJlOlxuXG4ke09iamVjdC5rZXlzKHRoaXMubG9hZGVkQ29uZmlncylcbiAgLm1hcCgodmFsaWRBY3Rpb246IHN0cmluZykgPT4gYC0gXCIke3ZhbGlkQWN0aW9ufVwiYClcbiAgLmpvaW4oJ1xcbicpfVxuYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmxvYWRlZENvbmZpZ3NbYWN0aW9uXSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgcGFyYWdvbi5jb25uZWN0KCkgd2FzIGNhbGxlZCB3aXRoIFwiJHthY3Rpb259XCIsIGJ1dCB5b3UgZG8gbm90IGhhdmUgdGhpcyBpbnRlZ3JhdGlvbiBzZXQgdXAgaW4geW91ciBQYXJhZ29uIHByb2plY3QgeWV0LlxuXG4ke09iamVjdC5rZXlzKHRoaXMubG9hZGVkQ29uZmlncylcbiAgLm1hcCgodmFsaWRBY3Rpb246IHN0cmluZykgPT4gYC0gXCIke3ZhbGlkQWN0aW9ufVwiYClcbiAgLmpvaW4oJ1xcbicpfWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5sb2FkZWRJbnRlZ3JhdGlvbnNbYWN0aW9uXT8uaXNBY3RpdmUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYHBhcmFnb24uY29ubmVjdCgpIHdhcyBjYWxsZWQgd2l0aCBcIiR7YWN0aW9ufVwiLCBidXQgdGhpcyBpbnRlZ3JhdGlvbiBpcyBub3QgYWN0aXZlIGluIHlvdXIgUGFyYWdvbiBwcm9qZWN0IHlldC5gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodmFsaWRhdGVJc0VuYWJsZWQgJiYgdGhpcy51c2VyU3RhdGUuYXV0aGVudGljYXRlZCkge1xuICAgICAgcmV0dXJuIEJvb2xlYW4odGhpcy51c2VyU3RhdGUuaW50ZWdyYXRpb25zW2FjdGlvbl0/LmVuYWJsZWQpO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBib290c3RyYXBTREtTdGF0ZSh1c2VyTWV0YT86IFBlcnNvbmFNZXRhKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLnByb2plY3RJZCB8fCAhdGhpcy51c2VyU3RhdGUuYXV0aGVudGljYXRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucHJvamVjdCA9IChhd2FpdCB0aGlzLnNlbmRDb25uZWN0UmVxdWVzdDxJQ29ubmVjdFNES1Byb2plY3Q+KFxuICAgICAgYC9zZGsvcHJvamVjdHMvJHt0aGlzLnByb2plY3RJZH1gLFxuICAgICAge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgJ1gtUGFyYWdvbi1DYWNoZS1NZXRhZGF0YSc6ICcxJyxcbiAgICAgICAgICAuLi4odXNlck1ldGFcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICdYLVBhcmFnb24tVXNlci1NZXRhZGF0YSc6IEpTT04uc3RyaW5naWZ5KHVzZXJNZXRhKSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7fSksXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgZmFsc2UsXG4gICAgKSkgYXMgSUNvbm5lY3RTREtQcm9qZWN0O1xuXG4gICAgYXdhaXQgdGhpcy51cGRhdGVMb2NhbFN0YXRlKCk7XG4gIH1cblxuICBzZXRNb2RhbFN0YXRlKHN0YXRlUGFydGlhbDogUGFydGlhbDxDb25uZWN0TW9kYWxQcm9wcz4pOiB2b2lkIHtcbiAgICB0aGlzLm1vZGFsU3RhdGUgPSB7XG4gICAgICBjb25maWc6IHVuZGVmaW5lZCxcbiAgICAgIC4uLnRoaXMubW9kYWxTdGF0ZSxcbiAgICAgIC4uLnN0YXRlUGFydGlhbCxcbiAgICB9O1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgcHJldmlvdXMgU0RLIHN0YXRlIHNhdmVkIGluIGxvY2FsU3RvcmFnZS5cbiAgICpcbiAgICogKipXYXJuaW5nOioqIFRoaXMgZmF2b3JzIHN0b3JlZCB0byBjdXJyZW50IHN0YXRlLiBUaGlzIHNob3VsZCB0eXBpY2FsbHkgYmUgY2FsbGVkIGluXG4gICAqIHVuYXV0aGVudGljYXRlZCBjb250ZXh0cywgYXMgYSBmYWxsYmFjay5cbiAgICovXG4gIHByaXZhdGUgbG9hZFN0YXRlKCk6IHZvaWQge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbG9jYWxTdGF0ZToge1xuICAgICAgICAgIHVzZXJTdGF0ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gICAgICAgICAgcHJvamVjdElkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIH0gPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oUEFSQUdPTl9TVEFURV9TVE9SQUdFX0tFWSlcbiAgICAgICAgICA/IEpTT04ucGFyc2Uod2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKFBBUkFHT05fU1RBVEVfU1RPUkFHRV9LRVkpIGFzIHN0cmluZylcbiAgICAgICAgICA6IHt9O1xuXG4gICAgICAgIGlmIChsb2NhbFN0YXRlLnByb2plY3RJZCkge1xuICAgICAgICAgIHRoaXMucHJvamVjdElkID0gbG9jYWxTdGF0ZS5wcm9qZWN0SWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobG9jYWxTdGF0ZS51c2VyU3RhdGUpIHtcbiAgICAgICAgICBjb25zdCB7IHVzZXJTdGF0ZSB9ID0gbG9jYWxTdGF0ZTtcbiAgICAgICAgICBpZiAoJ2F1dGhlbnRpY2F0ZWQnIGluIHVzZXJTdGF0ZSAmJiB1c2VyU3RhdGUuYXV0aGVudGljYXRlZCAmJiAndG9rZW4nIGluIHVzZXJTdGF0ZSkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVBdXRoZW50aWNhdGVkVXNlcih1c2VyU3RhdGUpO1xuICAgICAgICAgICAgLy8gUmVmcmVzaCB1c2VyIHN0YXRlIGF1dG9tYXRpY2FsbHksIGlmIGF2YWlsYWJsZVxuICAgICAgICAgICAgdGhpcy5ib290c3RyYXBTREtTdGF0ZSgpLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICAgICAgLy8gUEFSQS0zMjY3XG4gICAgICAgICAgICAgIHRoaXMuY2xlYXJTdGF0ZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgJ01hbGZvcm1hdHRlZCBvciB1bmF1dGhlbnRpY2F0ZWQgdXNlciB3YXMgcGVyc2lzdGVkIGludG8gbG9jYWxTdG9yYWdlLiBSZWZ1c2luZyB0byBsb2FkLicsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHRoaXMuY2xlYXJTdGF0ZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyB0aGUgY3VycmVudCBTREsgc3RhdGUgaW50byBsb2NhbFN0b3JhZ2UsIGlmIGF2YWlsYWJsZS5cbiAgICovXG4gIHByaXZhdGUgc2F2ZVN0YXRlKCk6IHZvaWQge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnVzZXJTdGF0ZS5hdXRoZW50aWNhdGVkKSB7XG4gICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oXG4gICAgICAgIFBBUkFHT05fU1RBVEVfU1RPUkFHRV9LRVksXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHsgcHJvamVjdElkOiB0aGlzLnByb2plY3RJZCwgdXNlclN0YXRlOiB0aGlzLnVzZXJTdGF0ZSB9KSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENsZWFycyB0aGUgY3VycmVudCBTREsgc3RhdGUgZnJvbSBsb2NhbFN0b3JhZ2UsIGlmIGF2YWlsYWJsZS5cbiAgICovXG4gIHByaXZhdGUgY2xlYXJTdGF0ZSgpOiB2b2lkIHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShQQVJBR09OX1NUQVRFX1NUT1JBR0VfS0VZKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlbmRlcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yb290ICYmIHRoaXMucm9vdExvYWRlZCkge1xuICAgICAgY29uc3QgeyBvbkNsb3NlLCBvbk9wZW4sIC4uLm1vZGFsU3RhdGUgfSA9IHRoaXMubW9kYWxTdGF0ZTtcbiAgICAgIGNvbnN0IHVwZGF0ZTogVUlVcGRhdGVNZXNzYWdlID0ge1xuICAgICAgICBtZXNzYWdlVHlwZTogJ1VJX1VQREFURScsXG4gICAgICAgIG5leHRDb250ZXh0OiB7XG4gICAgICAgICAgdXNlcjogdGhpcy51c2VyU3RhdGUsXG4gICAgICAgICAgcHJvamVjdElkOiB0aGlzLnByb2plY3RJZCxcbiAgICAgICAgICBlbnZpcm9ubWVudHM6IHRoaXMuZW52aXJvbm1lbnRzLFxuICAgICAgICAgIHByb2plY3Q6IHRoaXMucHJvamVjdCxcbiAgICAgICAgICBlbmRVc2VySW50ZWdyYXRpb25Db25maWc6IHRoaXMubW9kYWxTdGF0ZS5pbnRlZ3JhdGlvblxuICAgICAgICAgICAgPyB0aGlzLmVuZFVzZXJJbnRlZ3JhdGlvbkNvbmZpZ1t0aGlzLm1vZGFsU3RhdGUuaW50ZWdyYXRpb24udHlwZV1cbiAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICB9LFxuICAgICAgICBuZXh0TW9kYWxTdGF0ZTogbW9kYWxTdGF0ZSxcbiAgICAgIH07XG5cbiAgICAgIGlmICghdGhpcy5yb290LmNvbnRlbnRXaW5kb3cpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdCcm93c2VyIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucm9vdC5jb250ZW50V2luZG93LnBvc3RNZXNzYWdlKHVwZGF0ZSwgdGhpcy5lbnZpcm9ubWVudHMuQ09OTkVDVF9QVUJMSUNfVVJMKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogdGhpcyB3aWxsIHVwZGF0ZSBjb250YWluZXIgc3R5bGVcbiAgICogQHBhcmFtIHBhcmFtMFxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgdXBkYXRlQ29udGFpbmVyU3R5bGUoeyBpc01vZGFsU2hvd24gfTogeyBpc01vZGFsU2hvd246IGJvb2xlYW4gfSkge1xuICAgIGlmICghdGhpcy5yb290KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChpc01vZGFsU2hvd24pIHtcbiAgICAgIHRoaXMucm9vdC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yb290LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEF1dGhlbnRpY2F0ZSB5b3VyIGVuZCB1c2VyIGludG8gdGhlIFBhcmFnb24gQ29ubmVjdCBTREsuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9qZWN0SWQgWW91ciBQYXJhZ29uIHByb2plY3QgSUQuXG4gICAqIEBwYXJhbSB0b2tlbiBBIEpXVCBzaWduZWQgYnkgeW91ciBBcHAgU2VydmVyLiBUaGUgSldUIHNob3VsZCBpbmNsdWRlIGEgdXNlciBJRCBhbmQgYVxuICAgKiBzZXNzaW9uIGV4cGlyYXRpb24gdGltZS5cbiAgICovXG4gIGFzeW5jIGF1dGhlbnRpY2F0ZShcbiAgICBwcm9qZWN0SWQ6IHN0cmluZyxcbiAgICB0b2tlbjogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBBdXRoZW50aWNhdGVPcHRpb25zLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXByb2plY3RJZCB8fCAhdG9rZW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigncHJvamVjdElkIG9yIHRva2VuIG5vdCBzcGVjaWZpZWQgdG8gcGFyYWdvbi5hdXRoZW50aWNhdGUoKScpO1xuICAgIH1cbiAgICBsZXQgZGVjb2RlZEp3dDogeyBzdWI/OiBzdHJpbmc7IGlkPzogc3RyaW5nIH0gPSB7fTtcbiAgICB0cnkge1xuICAgICAgZGVjb2RlZEp3dCA9IGp3dERlY29kZTx0eXBlb2YgZGVjb2RlZEp3dD4odG9rZW4pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBIHdlbGwtZm9ybWVkIEpXVCB3YXMgbm90IHByb3ZpZGVkIHRvIHBhcmFnb24uYXV0aGVudGljYXRlKCknKTtcbiAgICB9XG5cbiAgICB0aGlzLnByb2plY3RJZCA9IHByb2plY3RJZDtcbiAgICB0aGlzLnVzZXJTdGF0ZSA9IHtcbiAgICAgIGF1dGhlbnRpY2F0ZWQ6IHRydWUsXG4gICAgICB0b2tlbixcbiAgICAgIHVzZXJJZDogKGRlY29kZWRKd3Quc3ViIHx8IGRlY29kZWRKd3QuaWQpIGFzIHN0cmluZyxcbiAgICAgIGludGVncmF0aW9uczoge30sXG4gICAgICBtZXRhOiBvcHRpb25zPy5tZXRhZGF0YSA/PyB7fSxcbiAgICB9O1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmJvb3RzdHJhcFNES1N0YXRlKG9wdGlvbnM/Lm1ldGFkYXRhKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUud2FybigncGFyYWdvbi5hdXRoZW50aWNhdGUoKSBjb3VsZCBub3QgbG9naW4gdXNlcicsIGVycik7XG4gICAgICB0aGlzLmxvZ291dCgpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gYXV0aGVudGljYXRlIHVzZXIgd2l0aCBQYXJhZ29uOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIH1cbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgUGFyYWdvbiBhdXRoZW50aWNhdGlvbiBhbmQgaW50ZWdyYXRpb24gc3RhdGUgb2YgeW91ciBlbmQgdXNlci5cbiAgICovXG4gIGdldFVzZXIoKTogQ29ubmVjdFVzZXIge1xuICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBPYmplY3QuZW50cmllcyh0aGlzLnVzZXJTdGF0ZSkuZmlsdGVyKChba2V5XTogW3N0cmluZywgdW5rbm93bl0pID0+IGtleSAhPT0gJ3Rva2VuJyksXG4gICAgKSBhcyBDb25uZWN0VXNlcjtcbiAgfVxuXG4gIHVwZGF0ZUF1dGhlbnRpY2F0ZWRVc2VyKHN0YXRlUGFydGlhbDogUGFydGlhbDxBdXRoZW50aWNhdGVkQ29ubmVjdFVzZXI+KTogdm9pZCB7XG4gICAgaWYgKHRoaXMudXNlclN0YXRlLmF1dGhlbnRpY2F0ZWQpIHtcbiAgICAgIHRoaXMudXNlclN0YXRlID0geyAuLi50aGlzLnVzZXJTdGF0ZSwgLi4uc3RhdGVQYXJ0aWFsIH07XG4gICAgfSBlbHNlIGlmIChzdGF0ZVBhcnRpYWwuYXV0aGVudGljYXRlZCkge1xuICAgICAgdGhpcy51c2VyU3RhdGUgPSBzdGF0ZVBhcnRpYWwgYXMgQXV0aGVudGljYXRlZENvbm5lY3RVc2VyO1xuICAgIH1cbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvZ291dCB0aGUgY3VycmVudGx5IGF1dGhlbnRpY2F0ZWQgZW5kIHVzZXIgZnJvbSB0aGUgUGFyYWdvbiBTREsuXG4gICAqL1xuICBsb2dvdXQoKTogdm9pZCB7XG4gICAgdGhpcy51c2VyU3RhdGUgPSB7IGF1dGhlbnRpY2F0ZWQ6IGZhbHNlIH07XG4gICAgdGhpcy5jbGVhclN0YXRlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGFzeW5jIGNvbm5lY3QoYWN0aW9uOiBzdHJpbmcsIHBhcmFtczogQ29ubmVjdFBhcmFtcyA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fY29ubmVjdChhY3Rpb24sIHBhcmFtcyk7XG4gIH1cblxuICAvKipcbiAgICogRGlzcGxheSB0aGUgUGFyYWdvbiBDb25uZWN0IG1vZGFsXG4gICAqL1xuICBhc3luYyBfY29ubmVjdChhY3Rpb246IHN0cmluZywgcGFyYW1zOiBDb25uZWN0UGFyYW1zICYgSW5zdGFsbE9wdGlvbnMgPSB7fSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG1hcE9iamVjdEZpZWxkcyxcbiAgICAgIG92ZXJyaWRlUmVkaXJlY3RVcmwsXG4gICAgICBpc0FwaUluc3RhbGxhdGlvbiA9IGZhbHNlLFxuICAgICAgc2hvd1BvcnRhbEFmdGVySW5zdGFsbCxcbiAgICAgIGJ5cGFzc1Bvc3RPQXV0aFByb21wdCxcbiAgICAgIC4uLmNhbGxiYWNrc1xuICAgIH0gPSBwYXJhbXM7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6ICgpID0+IHZvaWQsIHJlamVjdDogKGVycjogRXJyb3IpID0+IHZvaWQpID0+IHtcbiAgICAgIHRoaXMuc3Vic2NyaWJlVG9JbnRlZ3JhdGlvbihhY3Rpb24sIHtcbiAgICAgICAgLi4uY2FsbGJhY2tzLFxuICAgICAgICBvbkluc3RhbGw6IChldmVudDogSW50ZWdyYXRpb25JbnN0YWxsRXZlbnQsIHVzZXI6IEF1dGhlbnRpY2F0ZWRDb25uZWN0VXNlcikgPT4ge1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICBjYWxsYmFja3M/Lm9uSW5zdGFsbFxuICAgICAgICAgICAgPyBjYWxsYmFja3Mub25JbnN0YWxsKGV2ZW50LCB1c2VyKVxuICAgICAgICAgICAgOiBjYWxsYmFja3M/Lm9uU3VjY2Vzcz8uKGV2ZW50LCB1c2VyKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25FcnJvcjogKGVycjogRXJyb3IpID0+IHtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICBjYWxsYmFja3M/Lm9uRXJyb3I/LihlcnIpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBtYXBPYmplY3RGaWVsZHMgJiZcbiAgICAgICAgICAhdGhpcy5wcm9qZWN0LmFjY2Vzc2libGVGZWF0dXJlcy5pbmNsdWRlcyhDb25uZWN0QWRkT24uRHluYW1pY0ZpZWxkTWFwcGVyKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgRHluYW1pYyBGaWVsZCBNYXBwaW5nIGlzIGF2YWlsYWJsZSBvbiBvdXIgRW50ZXJwcmlzZSBwbGFuLiBDb250YWN0IHNhbGVzQHVzZXBhcmFnb24uY29tIHRvIGxlYXJuIG1vcmUgb3IgdXBncmFkZS5gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnZhbGlkYXRlQWN0aW9uKGFjdGlvbik7XG5cbiAgICAgICAgaWYgKG92ZXJyaWRlUmVkaXJlY3RVcmwgJiYgIWlzVmFsaWRVcmwob3ZlcnJpZGVSZWRpcmVjdFVybCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7b3ZlcnJpZGVSZWRpcmVjdFVybH0gaXMgbm90IHZhbGlkIHVybC5gKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVuZFVzZXJJbnRlZ3JhdGlvbkNvbmZpZ1thY3Rpb25dID0ge1xuICAgICAgICAgIG1hcE9iamVjdEZpZWxkcyxcbiAgICAgICAgICBvdmVycmlkZVJlZGlyZWN0VXJsOiBvdmVycmlkZVJlZGlyZWN0VXJsID8gc2FuaXRpemVVcmwob3ZlcnJpZGVSZWRpcmVjdFVybCkgOiB1bmRlZmluZWQsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGludGVncmF0aW9uOiBJQ29ubmVjdEludGVncmF0aW9uV2l0aENyZWRlbnRpYWxJbmZvID0gT2JqZWN0LnZhbHVlcyhcbiAgICAgICAgICB0aGlzLmxvYWRlZEludGVncmF0aW9ucyxcbiAgICAgICAgKS5maW5kKFxuICAgICAgICAgIChpbnRlZ3JhdGlvbjogSUNvbm5lY3RJbnRlZ3JhdGlvbldpdGhDcmVkZW50aWFsSW5mbykgPT5cbiAgICAgICAgICAgIGdldEludGVncmF0aW9uVHlwZU5hbWUoaW50ZWdyYXRpb24pID09PSBhY3Rpb24sXG4gICAgICAgICkgYXMgSUNvbm5lY3RJbnRlZ3JhdGlvbldpdGhDcmVkZW50aWFsSW5mbztcblxuICAgICAgICAvKipcbiAgICAgICAgICogaW4gY2hyb21lIGdldHRpbmcgaXNzdWUgZm9yIGFzeW5jaHJvbm91cyBwb3B1cCBvcGVuaW5nXG4gICAgICAgICAqIHNlZSBQQVJBLTE1MDVcbiAgICAgICAgICovXG4gICAgICAgIGlmIChcbiAgICAgICAgICBwYXJhbXMuaXNBcGlJbnN0YWxsYXRpb24gJiZcbiAgICAgICAgICAhc2hvdWxkU2hvd1ByZUF1dGhJbnB1dHMoe1xuICAgICAgICAgICAgaW50ZWdyYXRpb24sXG4gICAgICAgICAgICBhdXRoU2NoZW1lOiB0aGlzLmNvbmZpZ3NbaW50ZWdyYXRpb24udHlwZV0uYXV0aFNjaGVtZSxcbiAgICAgICAgICAgIGVuZFVzZXJTdXBwbGllZFZhbHVlczogdGhpcy5jb25maWdzW2ludGVncmF0aW9uLnR5cGVdLmVuZFVzZXJTdXBwbGllZFZhbHVlcyxcbiAgICAgICAgICAgIGlzQWNjb3VudFR5cGVTdXBwb3J0ZWQ6IHRoaXMuY29uZmlnc1tpbnRlZ3JhdGlvbi50eXBlXS5pc0FjY291bnRUeXBlU3VwcG9ydGVkLFxuICAgICAgICAgIH0pXG4gICAgICAgICkge1xuICAgICAgICAgIHZvaWQgc3RhcnRPQXV0aEZsb3coe1xuICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICB1c2VyOiB0aGlzLnVzZXJTdGF0ZSxcbiAgICAgICAgICAgICAgcHJvamVjdElkOiB0aGlzLnByb2plY3RJZCxcbiAgICAgICAgICAgICAgZW52aXJvbm1lbnRzOiB0aGlzLmVudmlyb25tZW50cyxcbiAgICAgICAgICAgICAgZW5kVXNlckludGVncmF0aW9uQ29uZmlnOiB0aGlzLm1vZGFsU3RhdGUuaW50ZWdyYXRpb25cbiAgICAgICAgICAgICAgICA/IHRoaXMuZW5kVXNlckludGVncmF0aW9uQ29uZmlnW3RoaXMubW9kYWxTdGF0ZS5pbnRlZ3JhdGlvbi50eXBlXVxuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfSBhcyBJQ29ubmVjdFVzZXJDb250ZXh0LFxuICAgICAgICAgICAgaW50ZWdyYXRpb24sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldE1vZGFsU3RhdGUoe1xuICAgICAgICAgIGludGVncmF0aW9uLFxuICAgICAgICAgIGNvbmZpZzogdGhpcy5sb2FkZWRDb25maWdzW2FjdGlvbl0sXG4gICAgICAgICAgYXBpSW5zdGFsbGF0aW9uT3B0aW9uczoge1xuICAgICAgICAgICAgaXNBcGlJbnN0YWxsYXRpb24sXG4gICAgICAgICAgICBzaG93UG9ydGFsQWZ0ZXJJbnN0YWxsLFxuICAgICAgICAgICAgYnlwYXNzUG9zdE9BdXRoUHJvbXB0LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMuZW1pdEVycm9yKGVyciwgYWN0aW9uKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIF9vYXV0aENhbGxiYWNrKG9hdXRoUmVzcG9uc2U6IE9hdXRoQ2FsbGJhY2tSZXNwb25zZSwgY3JlZGVudGlhbElkPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBpbnRlZ3JhdGlvbklkLCBwYXlsb2FkIH0gPSBvYXV0aFJlc3BvbnNlO1xuICAgIGNvbnN0IGludGVncmF0aW9uOiBJQ29ubmVjdEludGVncmF0aW9uV2l0aENyZWRlbnRpYWxJbmZvIHwgdW5kZWZpbmVkID0gT2JqZWN0LnZhbHVlcyhcbiAgICAgIHRoaXMubG9hZGVkSW50ZWdyYXRpb25zLFxuICAgICkuZmluZChcbiAgICAgIChpbnRlZ3JhdGlvbjogSUNvbm5lY3RJbnRlZ3JhdGlvbldpdGhDcmVkZW50aWFsSW5mbykgPT4gaW50ZWdyYXRpb24uaWQgPT09IGludGVncmF0aW9uSWQsXG4gICAgKTtcbiAgICBpZiAoIWludGVncmF0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHR5cGUgPSBnZXRJbnRlZ3JhdGlvblR5cGVOYW1lKGludGVncmF0aW9uKSBhcyBzdHJpbmc7XG5cbiAgICBjb25zdCBpbnN0YWxsT3B0aW9uczogSW5zdGFsbE9wdGlvbnMgPSB0aGlzLm1vZGFsU3RhdGUuYXBpSW5zdGFsbGF0aW9uT3B0aW9ucz8uaXNBcGlJbnN0YWxsYXRpb25cbiAgICAgID8gdGhpcy5tb2RhbFN0YXRlLmFwaUluc3RhbGxhdGlvbk9wdGlvbnNcbiAgICAgIDoge307XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgdXNlciA9IHRoaXMudXNlclN0YXRlIGFzIEF1dGhlbnRpY2F0ZWRDb25uZWN0VXNlcjtcbiAgICAgIGNvbnN0IHJlcXVlc3RVUkkgPSBjcmVkZW50aWFsSWRcbiAgICAgICAgPyBgL3Nkay9jcmVkZW50aWFscy8ke2NyZWRlbnRpYWxJZH0vY29tcGxldGUtc2V0dXBgXG4gICAgICAgIDogYC9zZGsvY3JlZGVudGlhbHNgO1xuICAgICAgY29uc3Qgb2F1dGhSZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VuZENvbm5lY3RSZXF1ZXN0PElDb25uZWN0Q3JlZGVudGlhbD4ocmVxdWVzdFVSSSwge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIGludGVncmF0aW9uSWQ6IGludGVncmF0aW9uLmlkLFxuICAgICAgICAgIGNvbmZpZzoge30sXG4gICAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgICBpbnN0YWxsT3B0aW9ucyxcbiAgICAgICAgfSksXG4gICAgICB9KTtcblxuICAgICAgaWYgKCFvYXV0aFJlc3BvbnNlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIHNhdmUgb2F1dGggY3JlZGVudGlhbHMnKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBpZCwgY29uZmlnLCBwcm92aWRlcklkLCBzdGF0dXMsIHByb3ZpZGVyRGF0YSB9ID0gb2F1dGhSZXNwb25zZTtcbiAgICAgIHRoaXMudXBkYXRlQXV0aGVudGljYXRlZFVzZXIoe1xuICAgICAgICBpbnRlZ3JhdGlvbnM6IHtcbiAgICAgICAgICAuLi51c2VyLmludGVncmF0aW9ucyxcbiAgICAgICAgICBbdHlwZV06IHtcbiAgICAgICAgICAgIC4uLnVzZXIuaW50ZWdyYXRpb25zW3R5cGVdLFxuICAgICAgICAgICAgLi4uY29uZmlnLFxuICAgICAgICAgICAgY3JlZGVudGlhbFN0YXR1czogc3RhdHVzLFxuICAgICAgICAgICAgZW5hYmxlZDogc3RhdHVzID09PSBDcmVkZW50aWFsU3RhdHVzLlZBTElELFxuICAgICAgICAgICAgY3JlZGVudGlhbElkOiBpZCxcbiAgICAgICAgICAgIHByb3ZpZGVySWQsXG4gICAgICAgICAgICBwcm92aWRlckRhdGEsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoc3RhdHVzID09PSBDcmVkZW50aWFsU3RhdHVzLlZBTElEKSB7XG4gICAgICAgIHRoaXMudHJpZ2dlclNES0V2ZW50KHtcbiAgICAgICAgICB0eXBlOiBTREtfRVZFTlQuT05fSU5URUdSQVRJT05fSU5TVEFMTCxcbiAgICAgICAgICBpbnRlZ3JhdGlvbklkOiBpbnRlZ3JhdGlvbi5pZCxcbiAgICAgICAgICBpbnRlZ3JhdGlvblR5cGU6IHR5cGUsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5lbWl0RXJyb3IoZXJyLCB0eXBlKTtcbiAgICAgIGF3YWl0IHRoaXMuX29hdXRoRXJyb3JDYWxsYmFjayhlcnIubWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBmdW5jdGlvbi1uYW1lXG4gIGFzeW5jIF9vYXV0aEVycm9yQ2FsbGJhY2soZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCBvYmplY3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsZXQgbWVzc2FnZTogc3RyaW5nIHwgb2JqZWN0ID0gZXJyb3JNZXNzYWdlO1xuICAgIC8vYWxzbyBsb2cgZXJyb3IgaW4gY29uc29sZVxuICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBjb25uZWN0IGFjY291bnQgdG8gUGFyYWdvbiBvdmVyIE9BdXRoJywgbWVzc2FnZSk7XG5cbiAgICBpZiAodHlwZW9mIG1lc3NhZ2UgPT09ICdvYmplY3QnKSB7XG4gICAgICBtZXNzYWdlID0gSlNPTi5zdHJpbmdpZnkobWVzc2FnZSk7XG4gICAgfVxuICAgIC8vIGN1cnJlbnRseSBhbGVydGluZyBnZW5lcmljIGVycm9yIG9yIGVycm9yIG1lc3NhZ2UgZm9yIG9hdXRoIGZhaWx1cmVcbiAgICAvLyBUT0RPOiB0byBtYWtlIGdlbmVyaWMgb2F1dGggZXJyb3IgbW9kYWwgdG8gc2hvdyBlcnJvcm1lc3NhZ2UgcHJvcGVydHlcbiAgICB3aW5kb3cuYWxlcnQoYFNvbWV0aGluZyB3ZW50IHdyb25nIGNvbm5lY3RpbmcgeW91ciBhY2NvdW50LiBQbGVhc2UgdHJ5IGFnYWluIG9yICR7bWVzc2FnZX1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kIGEgQ29ubmVjdCBBUEkgcmVxdWVzdC4gQXV0b21hdGljYWxseSBoYW5kbGVzIGF1dGhvcml6YXRpb24gYW5kIGVycm9ycy5cbiAgICpcbiAgICogQHBhcmFtIHBhdGggVGhlIHBhdGggb2YgdGhlIHJlcXVlc3QsIGluY2x1ZGluZyB0aGUgbGVhZGluZyBzbGFzaCwgaS5lLiBgL3Nkay9hY3Rpb25zYFxuICAgKiBAcGFyYW0gaW5pdCBPcHRpb25zIGZvciB0aGUgcmVxdWVzdCwgZXhjbHVkaW5nIGhlYWRlcnMgKGF1dG9tYXRpY2FsbHkgYWRkZWQpLlxuICAgKiBAcGFyYW0gcHJlZml4V2l0aFByb2plY3RQYXRoIERlZmF1bHRzIHRvIHRydWUuIFByZXBlbmRzIC9wcm9qZWN0cy8ke3RoaXMucHJvamVjdElkfWAgdG8gdGhlXG4gICAqIHBhdGguXG4gICAqL1xuICBhc3luYyBzZW5kQ29ubmVjdFJlcXVlc3Q8VFJlc3BvbnNlPihcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgaW5pdD86IFJlcXVlc3RJbml0ICYgeyBjYWNoZVJlc3VsdD86IGJvb2xlYW4gfSxcbiAgICBwcmVmaXhXaXRoUHJvamVjdFBhdGg6IGJvb2xlYW4gPSB0cnVlLFxuICApOiBQcm9taXNlPFRSZXNwb25zZSB8IHVuZGVmaW5lZD4ge1xuICAgIGlmICghdGhpcy51c2VyU3RhdGUuYXV0aGVudGljYXRlZCB8fCAhdGhpcy5wcm9qZWN0SWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENvbm5lY3QgU0RLIGF0dGVtcHRlZCB0byBtYWtlIGFuIEFQSSByZXF1ZXN0LCBidXQgbm8gdXNlciB3YXMgYXV0aGVudGljYXRlZC5cbkNhbGwgcGFyYWdvbi5hdXRoZW50aWNhdGUoPHByb2plY3RJZD4sIDx1c2VyIHRva2VuPikgYmVmb3JlIHVzaW5nIHRoZSBTREsuYCxcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IHVybDogc3RyaW5nID0gYCR7dGhpcy5lbnZpcm9ubWVudHMuWkVVU19QVUJMSUNfVVJMfSR7XG4gICAgICBwcmVmaXhXaXRoUHJvamVjdFBhdGggPyBgL3Byb2plY3RzLyR7dGhpcy5wcm9qZWN0SWR9YCA6ICcnXG4gICAgfSR7cGF0aH1gO1xuXG4gICAgY29uc3QgY2FjaGVLZXk6IHN0cmluZyA9IGhhc2goSlNPTi5zdHJpbmdpZnkoeyB1cmwsIHBheWxvYWQ6IHsgLi4uaW5pdCB9IH0pKTtcbiAgICBjb25zdCBjYWNoZWRSZXN1bHQgPSBhd2FpdCB0aGlzLmNhY2hlZEFwaVJlc3BvbnNlLmdldChjYWNoZUtleSwgdHJ1ZSk7XG4gICAgaWYgKGluaXQ/LmNhY2hlUmVzdWx0ICYmIGNhY2hlZFJlc3VsdCkge1xuICAgICAgcmV0dXJuIGNhY2hlZFJlc3VsdDtcbiAgICB9XG5cbiAgICBjb25zdCBzaG91bGRDYWNoZVJlcXVlc3Q6IGJvb2xlYW4gPSBCb29sZWFuKCFpbml0IHx8IGluaXQubWV0aG9kID09PSAnR0VUJyB8fCBpbml0LmNhY2hlUmVzdWx0KTtcblxuICAgIGlmIChzaG91bGRDYWNoZVJlcXVlc3QgJiYgdHlwZW9mIHRoaXMua2V5VG9SZXF1ZXN0UHJvbWlzZU1hcFtjYWNoZUtleV0gPT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4gdGhpcy5rZXlUb1JlcXVlc3RQcm9taXNlTWFwW2NhY2hlS2V5XSBhcyBQcm9taXNlPFRSZXNwb25zZSB8IHVuZGVmaW5lZD47XG4gICAgfVxuXG4gICAgY29uc3QgYWNjZXNzVG9rZW46IHN0cmluZyA9IHRoaXMudXNlclN0YXRlLnRva2VuO1xuXG4gICAgY29uc3Qgb25Hb2luZ1JlcXVlc3Q6IFByb21pc2U8VFJlc3BvbnNlIHwgdW5kZWZpbmVkPiA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5zZW5kUmVxdWVzdDxUUmVzcG9uc2U+KFxuICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAuLi5pbml0LFxuICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgQWNjZXB0OiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICAuLi5pbml0Py5oZWFkZXJzLFxuICAgICAgICAgICAgICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHthY2Nlc3NUb2tlbn1gLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNob3VsZENhY2hlUmVxdWVzdCA/IGNhY2hlS2V5IDogdW5kZWZpbmVkLFxuICAgICAgICAgICk7XG4gICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfSkoKTtcbiAgICB9KTtcblxuICAgIGlmIChzaG91bGRDYWNoZVJlcXVlc3QpIHtcbiAgICAgIHRoaXMua2V5VG9SZXF1ZXN0UHJvbWlzZU1hcFtjYWNoZUtleV0gPSBvbkdvaW5nUmVxdWVzdDtcbiAgICB9XG4gICAgcmV0dXJuIG9uR29pbmdSZXF1ZXN0O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZW5kUmVxdWVzdDxUUmVzcG9uc2U+KFxuICAgIHVybDogc3RyaW5nLFxuICAgIGluaXQ6IFJlcXVlc3RJbml0LFxuICAgIGNhY2hlS2V5Pzogc3RyaW5nLFxuICApOiBQcm9taXNlPFRSZXNwb25zZSB8IHVuZGVmaW5lZD4ge1xuICAgIGxldCByZXNwb25zZTogUmVzcG9uc2UgfCB1bmRlZmluZWQ7XG4gICAgbGV0IHJlc3BvbnNlQm9keTogVFJlc3BvbnNlIHwgdW5kZWZpbmVkO1xuICAgIGxldCByZXNwb25zZUVycm9yOiBFcnJvciB8IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIGluaXQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXNwb25zZUVycm9yID0gZXJyb3I7XG4gICAgfVxuXG4gICAgaWYgKChyZXNwb25zZSAmJiAhcmVzcG9uc2Uub2spIHx8IHJlc3BvbnNlRXJyb3IpIHtcbiAgICAgIGNvbnN0IHJlcXVlc3RSZXR1cm5lZEF1dGhvcml6YXRpb25FcnJvcjogYm9vbGVhbiA9XG4gICAgICAgIHJlc3BvbnNlPy5zdGF0dXMgPT09IDQwMSB8fCByZXNwb25zZT8uc3RhdHVzID09PSA0MDM7XG4gICAgICBpZiAoIXVybC5pbmNsdWRlcygncHJveHknKSAmJiByZXF1ZXN0UmV0dXJuZWRBdXRob3JpemF0aW9uRXJyb3IpIHtcbiAgICAgICAgdGhpcy5sb2dvdXQoKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlOiBzdHJpbmcgPSAoYXdhaXQgcmVzcG9uc2U/LnRleHQoKSkgfHwgKHJlc3BvbnNlRXJyb3I/Lm1lc3NhZ2UgYXMgc3RyaW5nKTtcblxuICAgICAgaWYgKGNhY2hlS2V5KSB7XG4gICAgICAgIGF3YWl0IHRoaXMuY2FjaGVkQXBpUmVzcG9uc2UuZGVsKGNhY2hlS2V5KTtcbiAgICAgICAgZGVsZXRlIHRoaXMua2V5VG9SZXF1ZXN0UHJvbWlzZU1hcFtjYWNoZUtleV07XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcmVzcG9uc2VCb2R5ID0gYXdhaXQgcmVzcG9uc2U/Lmpzb24oKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJlc3BvbnNlQm9keSA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAoY2FjaGVLZXkpIHtcbiAgICAgIGF3YWl0IHRoaXMuY2FjaGVkQXBpUmVzcG9uc2Uuc2V0KGNhY2hlS2V5LCByZXNwb25zZUJvZHkpO1xuICAgICAgZGVsZXRlIHRoaXMua2V5VG9SZXF1ZXN0UHJvbWlzZU1hcFtjYWNoZUtleV07XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3BvbnNlQm9keTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kcyBhIHByb3h5IHJlcXVlc3QgdG8gYW4gYWN0aW9uXG4gICAqIEBwYXJhbSBhY3Rpb25cbiAgICogQHBhcmFtIHBhdGhcbiAgICogQHBhcmFtIGluaXRcbiAgICogQHJldHVybnMgYXBpIHJlcXVlc3QgcmVzcG9uc2VcbiAgICovXG4gIGFzeW5jIHJlcXVlc3Q8VFJlc3BvbnNlPihcbiAgICBhY3Rpb246IHN0cmluZyxcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgaW5pdDoge1xuICAgICAgbWV0aG9kOiBSZXF1ZXN0SW5pdFsnbWV0aG9kJ107XG4gICAgICBib2R5OiBSZXF1ZXN0SW5pdFsnYm9keSddIHwgb2JqZWN0O1xuICAgICAgaGVhZGVyczogUmVxdWVzdEluaXRbJ2hlYWRlcnMnXTtcbiAgICB9LFxuICApOiBQcm9taXNlPFRSZXNwb25zZSB8IHVuZGVmaW5lZD4ge1xuICAgIGxldCBiYXNlUHJveHlQYXRoOiBzdHJpbmcgPSBgL3Nkay9wcm94eS8ke2FjdGlvbn1gO1xuICAgIGlmIChpc0N1c3RvbUludGVncmF0aW9uVHlwZU5hbWUoYWN0aW9uKSkge1xuICAgICAgYmFzZVByb3h5UGF0aCA9IGAvc2RrL3Byb3h5L2N1c3RvbS8ke1xuICAgICAgICBPYmplY3QudmFsdWVzKHRoaXMubG9hZGVkSW50ZWdyYXRpb25zKS5maW5kKFxuICAgICAgICAgIChpbnRlZ3JhdGlvbjogSUNvbm5lY3RJbnRlZ3JhdGlvbldpdGhDcmVkZW50aWFsSW5mbykgPT4ge1xuICAgICAgICAgICAgaWYgKGludGVncmF0aW9uLmN1c3RvbUludGVncmF0aW9uKSB7XG4gICAgICAgICAgICAgIHJldHVybiBpbnRlZ3JhdGlvbi5jdXN0b21JbnRlZ3JhdGlvbi5zbHVnID09PSBhY3Rpb247XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfSxcbiAgICAgICAgKT8uaWRcbiAgICAgIH1gO1xuICAgIH1cbiAgICBjb25zdCBwYXRoV2l0aExlYWRpbmdTbGFzaDogc3RyaW5nID0gcGF0aC5zdGFydHNXaXRoKCcvJykgPyBwYXRoIDogYC8ke3BhdGh9YDtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VuZENvbm5lY3RSZXF1ZXN0PHsgb3V0cHV0OiBUUmVzcG9uc2UgfT4oXG4gICAgICBgJHtiYXNlUHJveHlQYXRofSR7cGF0aFdpdGhMZWFkaW5nU2xhc2h9YCxcbiAgICAgIHtcbiAgICAgICAgbWV0aG9kOiBpbml0Lm1ldGhvZCxcbiAgICAgICAgYm9keTogdHlwZW9mIGluaXQuYm9keSA9PT0gJ29iamVjdCcgPyBKU09OLnN0cmluZ2lmeShpbml0LmJvZHkpIDogaW5pdC5ib2R5LFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6IElORkVSX0NPTlRFTlRfVFlQRV9GUk9NX0NPTk5FQ1RfT1BUSU9OUyxcbiAgICAgICAgICAuLi5pbml0LmhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICk7XG4gICAgcmV0dXJuIHJlc3BvbnNlPy5vdXRwdXQ7XG4gIH1cblxuICBhc3luYyBldmVudChuYW1lOiBzdHJpbmcsIHBheWxvYWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5zZW5kQ29ubmVjdFJlcXVlc3QoXG4gICAgICBgL3YyL3Byb2plY3RzLyR7dGhpcy5wcm9qZWN0SWR9L3Nkay9ldmVudHMvdHJpZ2dlcmAsXG4gICAgICB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICBwYXlsb2FkLFxuICAgICAgICB9KSxcbiAgICAgIH0sXG4gICAgICBmYWxzZSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IHRoaXMgd2lsbCBiZSBjYWxsZWQgdG8gY2xvc2UgdGhlIG1vZGFsXG4gICAqIEBwYXJhbSBmb3JjZUNsb3NlIGlzIHNldCB3aGVuIG1vZGFsIGlzIGNsb3NlZCBieSBjcm9zcyBidG5cbiAgICogQHJldHVybnNcbiAgICovXG4gIG9uQ2xvc2UoZm9yY2VDbG9zZTogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XG4gICAgY29uc3QgeyBpbnRlZ3JhdGlvbiwgYXBpSW5zdGFsbGF0aW9uT3B0aW9ucyB9ID0gdGhpcy5tb2RhbFN0YXRlO1xuXG4gICAgaWYgKCFpbnRlZ3JhdGlvbikge1xuICAgICAgLy8gVGhpcyBtaWdodCBoYXBwZW4gaWYgdGhlIFwiWFwiIGJ1dHRvbiBpcyBjbG9zZWQsIGJlY2F1c2UgYG9uQ2xvc2VgIHdpbGwgZmlyZSB0d2ljZS4gV2VcbiAgICAgIC8vIGlnbm9yZSBpdCBpZiB0aGlzIGlzIHRoZSBjYXNlLlxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnRyaWdnZXJTREtFdmVudCh7XG4gICAgICB0eXBlOiBTREtfRVZFTlQuT05fUE9SVEFMX0NMT1NFLFxuICAgICAgaW50ZWdyYXRpb25JZDogaW50ZWdyYXRpb24uaWQsXG4gICAgICBpbnRlZ3JhdGlvblR5cGU6IGdldEludGVncmF0aW9uVHlwZU5hbWUoaW50ZWdyYXRpb24pIGFzIHN0cmluZyxcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLm9yaWdpbmFsQm9keU92ZXJmbG93ICE9PSBQQVJBR09OX09WRVJGTE9XX0VNUFRZX1ZBTFVFKSB7XG4gICAgICB3aW5kb3cuZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9IHRoaXMub3JpZ2luYWxCb2R5T3ZlcmZsb3cgYXMgc3RyaW5nO1xuICAgICAgdGhpcy5vcmlnaW5hbEJvZHlPdmVyZmxvdyA9IFBBUkFHT05fT1ZFUkZMT1dfRU1QVFlfVkFMVUU7XG4gICAgfVxuXG4gICAgLy8gTm90IGNsZWFyaW5nIGludGVncmF0aW9uIHN0YXRlIHVubGVzcyBpdCBpcyBjbG9zZWQgYnkgY3Jvc3MgYnV0dG9uIGluIGFwaUluc3RhbGxhdGlvbkNhc2VcbiAgICBpZiAoZm9yY2VDbG9zZSB8fCAhYXBpSW5zdGFsbGF0aW9uT3B0aW9ucz8uaXNBcGlJbnN0YWxsYXRpb24pIHtcbiAgICAgIHRoaXMuc2V0TW9kYWxTdGF0ZSh7IGludGVncmF0aW9uOiBudWxsIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSB0aGlzIHdpbGwgYmUgY2FsbGVkIHdoZW4gbW9kYWwgd2lsbCBiZSB2aXNpYmxlXG4gICAqL1xuICBvbk9wZW4oKTogdm9pZCB7XG4gICAgY29uc3QgeyBpbnRlZ3JhdGlvbiB9ID0gdGhpcy5tb2RhbFN0YXRlO1xuICAgIGlmICghaW50ZWdyYXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy50cmlnZ2VyU0RLRXZlbnQoe1xuICAgICAgdHlwZTogU0RLX0VWRU5ULk9OX1BPUlRBTF9PUEVOLFxuICAgICAgaW50ZWdyYXRpb25JZDogaW50ZWdyYXRpb24uaWQsXG4gICAgICBpbnRlZ3JhdGlvblR5cGU6IGdldEludGVncmF0aW9uVHlwZU5hbWUoaW50ZWdyYXRpb24pIGFzIHN0cmluZyxcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLnJvb3QgJiYgdGhpcy5vcmlnaW5hbEJvZHlPdmVyZmxvdyA9PT0gUEFSQUdPTl9PVkVSRkxPV19FTVBUWV9WQUxVRSkge1xuICAgICAgY29uc3QgYm91bmRpbmdSZWN0ID0gdGhpcy5yb290LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgLy8gSWYgdGhlIENvbm5lY3QgUG9ydGFsIGlzIGJpZ2dlciB0aGFuIHRoZSB3aW5kb3dcbiAgICAgIGlmICh3aW5kb3cuaW5uZXJIZWlnaHQgPD0gYm91bmRpbmdSZWN0LmhlaWdodCAmJiB3aW5kb3cuaW5uZXJXaWR0aCA8PSBib3VuZGluZ1JlY3Qud2lkdGgpIHtcbiAgICAgICAgdGhpcy5vcmlnaW5hbEJvZHlPdmVyZmxvdyA9IHdpbmRvdy5kb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93O1xuICAgICAgICB3aW5kb3cuZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiB0aGlzIGlzIHNoYXJlZCBpbiBDb25uZWN0VXNlckNvbnRleHRcbiAgICogc28gdGhhdCBldmVudCBjYW4gYmUgdHJpZ2dlciBmcm9tIGNvbXBvbmVudHNcbiAgICogQHBhcmFtIGV2ZW50SW5mb1xuICAgKi9cbiAgdHJpZ2dlclNES0V2ZW50KGV2ZW50SW5mbzogRXZlbnRJbmZvKTogdm9pZCB7XG4gICAgdGhpcy50cmlnZ2VyRXZlbnQoZXZlbnRJbmZvLCB0aGlzLnVzZXJTdGF0ZSBhcyBBdXRoZW50aWNhdGVkQ29ubmVjdFVzZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIGdldCBzaW5nbGUgb3IgYWxsIG1ldGFkYXRhIGluZm8gZm9yIGludGVncmF0aW9uc1xuICAgKiBAcGFyYW0gaW50ZWdyYXRpb25LZXlOYW1lXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBnZXRJbnRlZ3JhdGlvbk1ldGFkYXRhKCk6IElJbnRlZ3JhdGlvbk1ldGFkYXRhW107XG4gIGdldEludGVncmF0aW9uTWV0YWRhdGEoaW50ZWdyYXRpb25LZXlOYW1lOiBzdHJpbmcpOiBJSW50ZWdyYXRpb25NZXRhZGF0YTtcbiAgZ2V0SW50ZWdyYXRpb25NZXRhZGF0YShcbiAgICBpbnRlZ3JhdGlvbktleU5hbWU/OiBzdHJpbmcsXG4gICk6IElJbnRlZ3JhdGlvbk1ldGFkYXRhIHwgSUludGVncmF0aW9uTWV0YWRhdGFbXSB7XG4gICAgaWYgKCFpbnRlZ3JhdGlvbktleU5hbWUpIHtcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMubWV0YWRhdGEpO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMubWV0YWRhdGFbaW50ZWdyYXRpb25LZXlOYW1lXSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2ludGVncmF0aW9uS2V5TmFtZX0gaXMgbm90IGEgdmFsaWQgaW50ZWdyYXRpb24gbmFtZWApO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLm1ldGFkYXRhW2ludGVncmF0aW9uS2V5TmFtZV07XG4gIH1cblxuICAvKipcbiAgICogdHJpZ2dlciBjb25uZWN0IGVuZHBvaW50IHRyaWdnZXIgd29ya2Zsb3dcbiAgICogQHBhcmFtIHdvcmtmbG93SWRcbiAgICogQHBhcmFtIHBheWxvYWRcbiAgICovXG4gIHdvcmtmbG93KFxuICAgIHdvcmtmbG93SWQ6IHN0cmluZyxcbiAgICB7IGJvZHkgPSB7fSwgcXVlcnkgPSB7fSwgaGVhZGVycyA9IHt9IH06IFRyaWdnZXJXb3JrZmxvd1JlcXVlc3QgPSB7XG4gICAgICBib2R5OiB7fSxcbiAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgcXVlcnk6IHt9LFxuICAgIH0sXG4gICk6IFByb21pc2U8b2JqZWN0IHwgdW5kZWZpbmVkPiB7XG4gICAgaWYgKCF3b3JrZmxvd0lkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3dvcmtmbG93SWQgaXMgcmVxdWlyZWQuJyk7XG4gICAgfVxuXG4gICAgY29uc3QgcXVlcnlTdHJpbmc6IHN0cmluZyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMocXVlcnkpLnRvU3RyaW5nKCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZW5kQ29ubmVjdFJlcXVlc3Q8b2JqZWN0PihcbiAgICAgIGAvc2RrL3RyaWdnZXJzLyR7d29ya2Zsb3dJZH0/JHtxdWVyeVN0cmluZ31gLFxuICAgICAge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoYm9keSksXG4gICAgICAgIGhlYWRlcnMsXG4gICAgICB9LFxuICAgICAgdHJ1ZSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIGZvciBwcm9ncmFtbWF0aWNhbGx5IGluc3RhbGxpbmcgYW4gaW50ZWdyYXRpb25cbiAgICovXG4gIGluc3RhbGxJbnRlZ3JhdGlvbihcbiAgICBhY3Rpb246IHN0cmluZyxcbiAgICBwYXJhbXM6IFBhcnRpYWw8T21pdDxJbnN0YWxsT3B0aW9ucywgJ2lzQXBpSW5zdGFsbGF0aW9uJz4+ID0ge30sXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy51c2VyU3RhdGUuYXV0aGVudGljYXRlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVXNlciBub3QgYXV0aGVudGljYXRlZCwgQ2FsbCBwYXJhZ29uLmF1dGhlbnRpY2F0ZSg8cHJvamVjdElkPiwgPHVzZXIgdG9rZW4+KSBiZWZvcmUgdXNpbmcgdGhlIFNESy5gLFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgZGVmYXVsdEluc3RhbGxPcHRpb25zOiBJbnN0YWxsT3B0aW9ucyA9IHtcbiAgICAgIHNob3dQb3J0YWxBZnRlckluc3RhbGw6IGZhbHNlLFxuICAgICAgYnlwYXNzUG9zdE9BdXRoUHJvbXB0OiBmYWxzZSxcbiAgICB9O1xuXG4gICAgY29uc3QgbWVyZ2VkUGFyYW1zOiBJbnN0YWxsT3B0aW9ucyA9IHtcbiAgICAgIC4uLmRlZmF1bHRJbnN0YWxsT3B0aW9ucyxcbiAgICAgIC4uLnBhcmFtcyxcbiAgICAgIGlzQXBpSW5zdGFsbGF0aW9uOiB0cnVlLFxuICAgIH07XG5cbiAgICBpZiAobWVyZ2VkUGFyYW1zLmJ5cGFzc1Bvc3RPQXV0aFByb21wdCAmJiBtZXJnZWRQYXJhbXMuc2hvd1BvcnRhbEFmdGVySW5zdGFsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnQ291bGQgbm90IHVzZSBib3RoIGBieXBhc3NQb3N0T0F1dGhQcm9tcHRgIGFuZCBgc2hvd1BvcnRhbEFmdGVySW5zdGFsbGAgYXMgdHJ1ZSBhdCB0aGUgc2FtZSB0aW1lLicsXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLmVuc3VyZUhlYWRsZXNzSXNTdXBwb3J0ZWQoKTtcblxuICAgIGNvbnN0IGlzQWxyZWFkeUVuYWJsZWQgPSB0aGlzLnZhbGlkYXRlQWN0aW9uKGFjdGlvbiwgdHJ1ZSk7XG4gICAgaWYgKGlzQWxyZWFkeUVuYWJsZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW50ZWdyYXRpb24gXCIke2FjdGlvbn1cIiBpcyBhbHJlYWR5IGluc3RhbGxlZC5gKTtcbiAgICB9XG5cbiAgICAvLyBhcyB3ZSBoYXZlIGFkZGVkIGludGVncmF0aW9uIGRlcGVuZGVuY3kgaW4gQ29ubmVjdE1vZGFsIHVzZUVmZmVjdCB0byB0cmlnZ2VyIGVuYWJsZUludGVncmF0aW9uXG4gICAgLy8gc28gdGhpcyByZXNldCBpcyBuZWVkZWQgaW5jYXNlIHByZXZpb3VzIG9uZSBmYWlsc1xuICAgIHRoaXMuc2V0TW9kYWxTdGF0ZSh7IGludGVncmF0aW9uOiBudWxsIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuX2Nvbm5lY3QoYWN0aW9uLCBtZXJnZWRQYXJhbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIGdhdGVzIGhlYWRsZXNzIGZlYXR1cmUgdG8gcHJvIGFuZCBlbnRlcnByaXNlIHVzZXJzXG4gICAqL1xuICBlbnN1cmVIZWFkbGVzc0lzU3VwcG9ydGVkKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5wcm9qZWN0LmFjY2Vzc2libGVGZWF0dXJlcy5pbmNsdWRlcyhDb25uZWN0QWRkT24uSGVhZGxlc3NDb25uZWN0UG9ydGFsKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnSGVhZGxlc3MgQ29ubmVjdCBQb3J0YWwgaXMgYXZhaWxhYmxlIG9uIG91ciBQcm8gcGxhbiBhbmQgYWJvdmUuIENvbnRhY3Qgc2FsZXNAdXNlcGFyYWdvbi5jb20gdG8gbGVhcm4gbW9yZSBvciB1cGdyYWRlLicsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHVuaW5zdGFsbEludGVncmF0aW9uKGFjdGlvbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLnVzZXJTdGF0ZS5hdXRoZW50aWNhdGVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBVc2VyIG5vdCBhdXRoZW50aWNhdGVkLCBDYWxsIHBhcmFnb24uYXV0aGVudGljYXRlKDxwcm9qZWN0SWQ+LCA8dXNlciB0b2tlbj4pIGJlZm9yZSB1c2luZyB0aGUgU0RLLmAsXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLmVuc3VyZUhlYWRsZXNzSXNTdXBwb3J0ZWQoKTtcbiAgICBpZiAoIXRoaXMudmFsaWRhdGVBY3Rpb24oYWN0aW9uLCB0cnVlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnRlZ3JhdGlvbiBcIiR7YWN0aW9ufVwiIGlzIG5vdCBpbnN0YWxsZWQuYCk7XG4gICAgfVxuXG4gICAgY29uc3QgaW50ZWdyYXRpb25JZCA9IHRoaXMubG9hZGVkSW50ZWdyYXRpb25zW2FjdGlvbl0uaWQ7XG4gICAgYXdhaXQgdGhpcy5zZW5kQ29ubmVjdFJlcXVlc3QoYC9zZGsvaW50ZWdyYXRpb25zLyR7aW50ZWdyYXRpb25JZH1gLCB7XG4gICAgICBtZXRob2Q6ICdERUxFVEUnLFxuICAgIH0pO1xuXG4gICAgdGhpcy51cGRhdGVBdXRoZW50aWNhdGVkVXNlcih7XG4gICAgICBpbnRlZ3JhdGlvbnM6IHtcbiAgICAgICAgLi4udGhpcy51c2VyU3RhdGUuaW50ZWdyYXRpb25zLFxuICAgICAgICBbYWN0aW9uXTogeyBlbmFibGVkOiBmYWxzZSwgY29uZmlndXJlZFdvcmtmbG93czoge30gfSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICB0aGlzLnNhdmVTdGF0ZSgpO1xuXG4gICAgdGhpcy50cmlnZ2VyU0RLRXZlbnQoe1xuICAgICAgdHlwZTogU0RLX0VWRU5ULk9OX0lOVEVHUkFUSU9OX1VOSU5TVEFMTCxcbiAgICAgIGludGVncmF0aW9uSWQsXG4gICAgICBpbnRlZ3JhdGlvblR5cGU6IGFjdGlvbixcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGRpc2FibGVXb3JrZmxvdyh3b3JrZmxvd0lkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMudXNlclN0YXRlLmF1dGhlbnRpY2F0ZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFVzZXIgbm90IGF1dGhlbnRpY2F0ZWQsIENhbGwgcGFyYWdvbi5hdXRoZW50aWNhdGUoPHByb2plY3RJZD4sIDx1c2VyIHRva2VuPikgYmVmb3JlIHVzaW5nIHRoZSBTREsuYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmlzV29ya2Zsb3dFbmFibGVkKHdvcmtmbG93SWQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFdvcmtmbG93ICR7d29ya2Zsb3dJZH0gY2Fubm90IGJlIGRpc2FibGVkIGZvciB0aGlzIHVzZXIuYCk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5zZW5kQ29ubmVjdFJlcXVlc3Q8SUNvbm5lY3RDcmVkZW50aWFsPihgL3Nkay93b3JrZmxvd3MvJHt3b3JrZmxvd0lkfWAsIHtcbiAgICAgIG1ldGhvZDogJ0RFTEVURScsXG4gICAgfSk7XG5cbiAgICBhd2FpdCB0aGlzLnVwZGF0ZUxvY2FsU3RhdGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlTG9jYWxTdGF0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBbdXNlckRhdGEsIGludGVncmF0aW9uc10gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICB0aGlzLmZldGNoVXNlckRhdGEoKSxcbiAgICAgIHRoaXMuZmV0Y2hJbnRlZ3JhdGlvbnMoKSxcbiAgICBdKTtcblxuICAgIHRoaXMudXBkYXRlQXV0aGVudGljYXRlZFVzZXIoeyBpbnRlZ3JhdGlvbnM6IHVzZXJEYXRhLmludGVncmF0aW9ucywgbWV0YTogdXNlckRhdGEubWV0YSB9KTtcbiAgICBhd2FpdCB0aGlzLmdldEludGVncmF0aW9uQ29uZmlncyhpbnRlZ3JhdGlvbnMubWFwKChpbnRlZ3JhdGlvbikgPT4gaW50ZWdyYXRpb24udHlwZSkpO1xuICAgIHRoaXMudXBkYXRlSW50ZWdyYXRpb25zKGludGVncmF0aW9ucyk7XG4gICAgdGhpcy5zYXZlU3RhdGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBhbHNvIHJldHVybnMgZmFsc2UgaWYgdW5hYmxlIHRvIGZpbmQgd29ya2Zsb3cgaW4gY29uZmlndXJlZCB3b3JrZmxvdyBwcm9wZXJ0eSBvZiBhbnkgaW50ZWdyYXRpb25cbiAgICovXG4gIHByaXZhdGUgaXNXb3JrZmxvd0VuYWJsZWQod29ya2Zsb3dJZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcmVzdWx0ID0gT2JqZWN0LnZhbHVlcygodGhpcy51c2VyU3RhdGUgYXMgQXV0aGVudGljYXRlZENvbm5lY3RVc2VyKS5pbnRlZ3JhdGlvbnMpLmZpbmQoXG4gICAgICAoaW50ZWdyYXRpb24pID0+IGludGVncmF0aW9uPy5jb25maWd1cmVkV29ya2Zsb3dzPy5bd29ya2Zsb3dJZF0/LmVuYWJsZWQsXG4gICAgKTtcblxuICAgIHJldHVybiByZXN1bHQgPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBnZXRzIHRoZSB1c2VyIGRhdGEgZnJvbSBhcGkgYC9zZGsvbWVgXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGZldGNoVXNlckRhdGEoKTogUHJvbWlzZTxJQ29ubmVjdFVzZXI+IHtcbiAgICBjb25zdCB1c2VyRGF0YSA9IGF3YWl0IHRoaXMuc2VuZENvbm5lY3RSZXF1ZXN0PElDb25uZWN0VXNlcj4oJy9zZGsvbWUnKTtcbiAgICBpZiAoIXVzZXJEYXRhKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBnZXQgdXNlciBEYXRhJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB1c2VyRGF0YTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgaW50ZWdyYXRpb25zIGZyb20gYXBpIGAvc2RrL2ludGVncmF0aW9uc2BcbiAgICogUmVxdWlyZWQgdGhpcyBhbm90aGVyIHJlcXVlc3QgZm9yIGludGVncmF0aW9ucywgYXMgYC9zZGsvbWVgIHByb3ZpZGVzIG9ubHkgbWluaW1hbCBkYXRhIGZvciBpbnRlZ3JhdGlvbnNcbiAgICogd2UgYWxzbyBuZWVkIGludGVncmF0aW9uIGNvbmZpZyBhbmQgb3RoZXIgY3JlZGVudGlhbHMgaW5mbyB3aGljaCBpcyBub3QgaW5jbHVkZWQgaW4gYHNkay9tZWBcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZmV0Y2hJbnRlZ3JhdGlvbnMoKTogUHJvbWlzZTxJQ29ubmVjdEludGVncmF0aW9uV2l0aENyZWRlbnRpYWxJbmZvW10+IHtcbiAgICBjb25zdCBpbnRlZ3JhdGlvbnMgPSBhd2FpdCB0aGlzLnNlbmRDb25uZWN0UmVxdWVzdDxJQ29ubmVjdEludGVncmF0aW9uV2l0aENyZWRlbnRpYWxJbmZvW10+KFxuICAgICAgJy9zZGsvaW50ZWdyYXRpb25zJyxcbiAgICApO1xuXG4gICAgaWYgKCFpbnRlZ3JhdGlvbnMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGZldGNoIGludGVncmF0aW9ucycpO1xuICAgIH1cblxuICAgIHJldHVybiBpbnRlZ3JhdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyBpbnRlcm5hbCBzdGF0ZSB3aGVyZSBpbnRlZ3JhdGlvbiBpbmZvcm1hdGlvbiBtYXkgYmUgdXNlZC5cbiAgICovXG4gIHByaXZhdGUgdXBkYXRlSW50ZWdyYXRpb25zKGludGVncmF0aW9uczogSUNvbm5lY3RJbnRlZ3JhdGlvbldpdGhDcmVkZW50aWFsSW5mb1tdKTogdm9pZCB7XG4gICAgaW50ZWdyYXRpb25zLmZvckVhY2goKGludGVncmF0aW9uOiBJQ29ubmVjdEludGVncmF0aW9uV2l0aENyZWRlbnRpYWxJbmZvKSA9PiB7XG4gICAgICBpZiAoaW50ZWdyYXRpb24uY29uZmlncy5sZW5ndGgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB0eXBlID0gZ2V0SW50ZWdyYXRpb25UeXBlTmFtZShpbnRlZ3JhdGlvbikgYXMgc3RyaW5nO1xuXG4gICAgICAgICAgLy8gdXBkYXRlIGxvYWRlZCBjb25maWdzXG4gICAgICAgICAgdGhpcy5sb2FkZWRDb25maWdzW3R5cGVdID0gaW50ZWdyYXRpb24uY29uZmlnc1swXS52YWx1ZXM7XG5cbiAgICAgICAgICAvLyB1cGRhdGUgbG9hZGVkIGludGVncmF0aW9uc1xuICAgICAgICAgIHRoaXMubG9hZGVkSW50ZWdyYXRpb25zW3R5cGVdID0gaW50ZWdyYXRpb247XG5cbiAgICAgICAgICAvLyB1cGRhdGUgaW50ZWdyYXRpb24gbWV0YWRhdGFcbiAgICAgICAgICBpZiAoQm9vbGVhbihpbnRlZ3JhdGlvbi5pc0FjdGl2ZSkpIHtcbiAgICAgICAgICAgIHRoaXMubWV0YWRhdGFbdHlwZV0gPSB7XG4gICAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICAgIG5hbWU6IGludGVncmF0aW9uLmN1c3RvbUludGVncmF0aW9uPy5uYW1lID8/IHRoaXMuY29uZmlnc1tpbnRlZ3JhdGlvbi50eXBlXS5uYW1lLFxuICAgICAgICAgICAgICBicmFuZENvbG9yOlxuICAgICAgICAgICAgICAgIGludGVncmF0aW9uLmNvbmZpZ3NbMF0udmFsdWVzLmFjY2VudENvbG9yID8/XG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWdzW2ludGVncmF0aW9uLnR5cGVdLmJyYW5kQ29sb3IsXG4gICAgICAgICAgICAgIGljb246XG4gICAgICAgICAgICAgICAgaW50ZWdyYXRpb24uY3VzdG9tSW50ZWdyYXRpb24/Lmljb24gPz9cbiAgICAgICAgICAgICAgICBgJHt0aGlzLmVudmlyb25tZW50cy5DRE5fUFVCTElDX1VSTH0vaW50ZWdyYXRpb25zLyR7XG4gICAgICAgICAgICAgICAgICBvdmVycmlkZUFjdGlvbkFsaWFzW2ludGVncmF0aW9uLnR5cGVdIHx8IGludGVncmF0aW9uLnR5cGVcbiAgICAgICAgICAgICAgICB9LnN2Z2AsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIHVwZGF0ZSBtb2RhbCBzdGF0ZSAoaWYgYmVpbmcgdXNlZClcbiAgICAgICAgICBpZiAodGhpcy5tb2RhbFN0YXRlLmludGVncmF0aW9uPy5pZCA9PT0gaW50ZWdyYXRpb24uaWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0TW9kYWxTdGF0ZSh7IGludGVncmF0aW9uIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKGVycik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHNldFVzZXJNZXRhZGF0YShtZXRhOiBQZXJzb25hTWV0YSk6IFByb21pc2U8QXV0aGVudGljYXRlZENvbm5lY3RVc2VyPiB7XG4gICAgYXdhaXQgdGhpcy5zZW5kQ29ubmVjdFJlcXVlc3Q8SVBlcnNvbmE+KCcvc2RrL21lJywge1xuICAgICAgbWV0aG9kOiAnUEFUQ0gnLFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBtZXRhIH0pLFxuICAgIH0pO1xuXG4gICAgYXdhaXQgdGhpcy51cGRhdGVMb2NhbFN0YXRlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcblxuICAgIHJldHVybiB0aGlzLnVzZXJTdGF0ZSBhcyBBdXRoZW50aWNhdGVkQ29ubmVjdFVzZXI7XG4gIH1cblxuICBhc3luYyBnZXRJbnRlZ3JhdGlvbkNvbmZpZ3MoYWN0aW9uTmFtZXM6IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcmVxdWlyZWRDb25maWdzQWN0aW9ucyA9IGFjdGlvbk5hbWVzLmZpbHRlcihcbiAgICAgIChhY3Rpb25OYW1lOiBzdHJpbmcpID0+ICF0aGlzLmNvbmZpZ3NbYWN0aW9uTmFtZV0gJiYgYWN0aW9uTmFtZSAhPT0gQUNUSU9OX0NVU1RPTSxcbiAgICApO1xuICAgIGlmICghcmVxdWlyZWRDb25maWdzQWN0aW9ucy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5zZW5kQ29ubmVjdFJlcXVlc3Q8UmVjb3JkPHN0cmluZywgQWN0aW9uQ29uZmlnRFRPPj4oXG4gICAgICAnL3Nkay9hY3Rpb25zL2NvbmZpZ3MnLFxuICAgICAge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIGFjdGlvbk5hbWVzOiByZXF1aXJlZENvbmZpZ3NBY3Rpb25zLFxuICAgICAgICB9KSxcbiAgICAgIH0sXG4gICAgKTtcbiAgICB0aGlzLmNvbmZpZ3MgPSByZXN1bHQgPz8ge307XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtob3N0OiBzdHJpbmc7fSBkb21haW5cbiAgICogc2V0cyB0aGUgZG9tYWluIGZvciBtYWtpbmcgaHR0cCBzZXJ2aWNlIHJlcXVlc3RcbiAgICogZXhhbXBsZTogYGNvbmZpZ3VyZUdsb2JhbCh7aG9zdDogJ215RG9tYWluLmNvbSd9KTtgIHdvdWxkIHNldCBzZXJ2aWNlIHVybHMgYXMgYGh0dHBzOi8vc2VydmljZS5teURvbWFpbi5jb21gXG4gICAqL1xuICBjb25maWd1cmVHbG9iYWwocGFyYW06IHsgaG9zdDogc3RyaW5nIH0pOiB2b2lkIHtcbiAgICBpZiAoIXBhcmFtIHx8ICFwYXJhbS5ob3N0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2hvc3Qgbm90IHNwZWNpZmllZCcpO1xuICAgIH1cbiAgICBjb25zdCBkb21haW4gPSBwYXJhbS5ob3N0LmluZGV4T2YoJ2h0dHAnKSA+IC0xID8gbmV3IFVSTChwYXJhbS5ob3N0KS5ob3N0bmFtZSA6IHBhcmFtLmhvc3Q7XG5cbiAgICB0aGlzLmVudmlyb25tZW50cy5DT05ORUNUX1BVQkxJQ19VUkwgPSBnZXRTZXJ2aWNlVXJsKCdjb25uZWN0JywgZG9tYWluKTtcbiAgICB0aGlzLmVudmlyb25tZW50cy5EQVNIQk9BUkRfUFVCTElDX1VSTCA9IGdldFNlcnZpY2VVcmwoJ2Rhc2hib2FyZCcsIGRvbWFpbik7XG4gICAgdGhpcy5lbnZpcm9ubWVudHMuUEFTU1BPUlRfUFVCTElDX1VSTCA9IGdldFNlcnZpY2VVcmwoJ3Bhc3Nwb3J0JywgZG9tYWluKTtcbiAgICB0aGlzLmVudmlyb25tZW50cy5aRVVTX1BVQkxJQ19VUkwgPSBnZXRTZXJ2aWNlVXJsKCd6ZXVzJywgZG9tYWluKTtcbiAgICAvLyBzZXR0aW5nIGNkbiB0byBkYXNoYm9hcmQgdXJsIGFzIGVudGVycHJpc2UgZW52aXJvbm1lbnQgZG9uJ3QgaGF2ZSB0aGVpciBvd24gY2RucyBQQVJBLTgxOTdcbiAgICB0aGlzLmVudmlyb25tZW50cy5DRE5fUFVCTElDX1VSTCA9IGdldFNlcnZpY2VVcmwoJ2Rhc2hib2FyZCcsIGRvbWFpbik7XG5cbiAgICB0aGlzLnVzZXJTdGF0ZS5hdXRoZW50aWNhdGVkID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5yb290KSB7XG4gICAgICB0aGlzLnJvb3Quc3JjID0gYCR7dGhpcy5lbnZpcm9ubWVudHMuQ09OTkVDVF9QVUJMSUNfVVJMfS91aSR7XG4gICAgICAgIHRoaXMucHJvamVjdElkID8gYD9wcm9qZWN0SWQ9JHt0aGlzLnByb2plY3RJZH1gIDogJydcbiAgICAgIH1gO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdSb290IGVsZW1lbnQgbm90IGRlZmluZWQnKTtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIEF1dGhlbnRpY2F0ZWRDb25uZWN0VXNlcixcbiAgQ2FsbGJhY2tNYXAsXG4gIEV2ZW50SW5mbyxcbiAgSW50ZWdyYXRpb25JbnN0YWxsRXZlbnQsXG4gIEludGVncmF0aW9uVW5pbnN0YWxsRXZlbnQsXG4gIExpc3RlbmVyRnVuY3Rpb24sXG4gIFBvcnRhbENsb3NlRXZlbnQsXG4gIFBvcnRhbE9wZW5FdmVudCxcbiAgU0RLRXZlbnRMaXN0ZW5lck1hcCxcbiAgU0RLX0VWRU5ULFxuICBXb3JrZmxvd1N0YXRlQ2hhbmdlRXZlbnQsXG59IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTREtFdmVudEVtaXR0ZXIge1xuICBwcml2YXRlIGV2ZW50TGlzdGVuZXJzTWFwOiBQYXJ0aWFsPFNES0V2ZW50TGlzdGVuZXJNYXA+ID0ge307XG4gIHByaXZhdGUgaW50ZWdyYXRpb25TdGF0ZUNhbGxiYWNrczogeyBbdHlwZTogc3RyaW5nXTogQ2FsbGJhY2tNYXAgfSA9IHt9O1xuXG4gIC8qKlxuICAgKiB0aGlzIHdpbGwgYWRkIGxpc3RlbmVyIHRvIGV2ZW50IGxpc3RlbmVycyBsaXN0XG4gICAqIEBwYXJhbSBldmVudE5hbWVcbiAgICogQHJldHVybnMgZnVuY3Rpb24gdG8gdW5zdWJzY3JpYmUgY3VycmVudCBsaXN0ZW5lclxuICAgKi9cbiAgc3Vic2NyaWJlKGV2ZW50TmFtZTogU0RLX0VWRU5ULCBsaXN0ZW5lcjogTGlzdGVuZXJGdW5jdGlvbik6ICgpID0+IGJvb2xlYW4ge1xuICAgIHRoaXMuYXNzZXJ0RXZlbnRUeXBlKGV2ZW50TmFtZSk7XG4gICAgaWYgKHR5cGVvZiBsaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBubyBsaXN0ZW5lciBpcyBwcm92aWRlZCBmb3IgJHtldmVudE5hbWV9YCk7XG4gICAgfVxuXG4gICAgdGhpcy5ldmVudExpc3RlbmVyc01hcCA9IHtcbiAgICAgIC4uLnRoaXMuZXZlbnRMaXN0ZW5lcnNNYXAsXG4gICAgICBbZXZlbnROYW1lXTogWy4uLih0aGlzLmV2ZW50TGlzdGVuZXJzTWFwW2V2ZW50TmFtZV0gPz8gW10pLCBsaXN0ZW5lcl0sXG4gICAgfTtcblxuICAgIC8vIHJldHVybiB1bnN1YnNjcmliZSBsaXN0ZW5lclxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy51bnN1YnNjcmliZShldmVudE5hbWUsIGxpc3RlbmVyKTtcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIHRoaXMgbWV0aG9kIGFkZCBiaW5kIGNhbGxiYWNrTWFwIHRvIGludGVncmF0aW9uIHR5cGVcbiAgICogYW5kIGVtaXQgZXZlbnQgZm9yIHBhcnRpY3VsYXIgaW50ZWdyYXRpb25cbiAgICogQHBhcmFtIGludGVncmF0aW9uVHlwZVxuICAgKiBAcGFyYW0gY2FsbGJhY2tNYXBcbiAgICovXG4gIHN1YnNjcmliZVRvSW50ZWdyYXRpb24oaW50ZWdyYXRpb25UeXBlOiBzdHJpbmcsIGNhbGxiYWNrTWFwOiBDYWxsYmFja01hcCk6IHZvaWQge1xuICAgIHRoaXMuaW50ZWdyYXRpb25TdGF0ZUNhbGxiYWNrc1tpbnRlZ3JhdGlvblR5cGVdID0geyAuLi5jYWxsYmFja01hcCB9O1xuICB9XG5cbiAgLyoqXG4gICAqIHRoaXMgbWV0aG9kIHJlbW92ZXMgbGlzdGVuZXIgZnJvbSBldmVuTGlzdGVuZXJNYXBcbiAgICogQHBhcmFtIGV2ZW50TmFtZVxuICAgKiBAcGFyYW0gbGlzdGVuZXJcbiAgICogQHJldHVybnMgdHJ1ZSBpZiBzdWNjZXNzZnVsbHkgdW5zdWJzY3JpYmVkIGVsc2UgZmFsc2VcbiAgICovXG4gIHVuc3Vic2NyaWJlKGV2ZW50TmFtZTogU0RLX0VWRU5ULCBsaXN0ZW5lcjogTGlzdGVuZXJGdW5jdGlvbik6IGJvb2xlYW4ge1xuICAgIHRoaXMuYXNzZXJ0RXZlbnRUeXBlKGV2ZW50TmFtZSk7XG4gICAgaWYgKHR5cGVvZiBsaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdsaXN0ZW5lciBpcyByZXF1aXJlZCBmb3IgdW5zdWJzY3JpcHRpb24nKTtcbiAgICB9XG5cbiAgICBjb25zdCBvbGRMaXN0ZW5lcnNDb3VudCA9ICh0aGlzLmV2ZW50TGlzdGVuZXJzTWFwW2V2ZW50TmFtZV0gPz8gW10pLmxlbmd0aDtcblxuICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnNNYXAgPSB7XG4gICAgICAuLi50aGlzLmV2ZW50TGlzdGVuZXJzTWFwLFxuICAgICAgW2V2ZW50TmFtZV06ICgodGhpcy5ldmVudExpc3RlbmVyc01hcFtldmVudE5hbWVdIGFzIExpc3RlbmVyRnVuY3Rpb25bXSkgPz8gW10pLmZpbHRlcihcbiAgICAgICAgKGZuOiBMaXN0ZW5lckZ1bmN0aW9uKSA9PiBmbiAhPT0gbGlzdGVuZXIsXG4gICAgICApLFxuICAgIH07XG5cbiAgICByZXR1cm4gb2xkTGlzdGVuZXJzQ291bnQgPiB0aGlzLmV2ZW50TGlzdGVuZXJzTWFwW2V2ZW50TmFtZV0hLmxlbmd0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBjaGVjayBpZiBldmVudCBpcyB2YWxpZCBwYXJhZ29uIHNkayBldmVudFxuICAgKiBAcGFyYW0gZXZlbnROYW1lXG4gICAqL1xuICBwcml2YXRlIGFzc2VydEV2ZW50VHlwZShldmVudE5hbWU6IHVua25vd24pOiBhc3NlcnRzIGV2ZW50TmFtZSBpcyBTREtfRVZFTlQge1xuICAgIGlmICghT2JqZWN0LnZhbHVlcyhTREtfRVZFTlQpLmluY2x1ZGVzKGV2ZW50TmFtZSBhcyBTREtfRVZFTlQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZXZlbnROYW1lfSBpcyBub3QgdmFsaWQgcGFyYWdvbiBldmVudGApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiB0aGlzIG1ldGhvZCBjYWxsIGF0dGFjaGVkIGxpc3RlbmVycyB3aXRoIHBheWxvYWQgZm9yIGV2ZW50TmFtZSB0eXBlXG4gICAqIEBwYXJhbSBldmVudE5hbWVcbiAgICogQHBhcmFtIGV2ZW50UGF5bG9hZFxuICAgKi9cbiAgcHJpdmF0ZSBlbWl0U2FmZShcbiAgICBldmVudE5hbWU6IFNES19FVkVOVCxcbiAgICAuLi5ldmVudFBheWxvYWQ6IFBhcmFtZXRlcnM8U0RLRXZlbnRMaXN0ZW5lck1hcFtrZXlvZiBTREtFdmVudExpc3RlbmVyTWFwXVtudW1iZXJdPlxuICApOiB2b2lkIHtcbiAgICAodGhpcy5ldmVudExpc3RlbmVyc01hcFtldmVudE5hbWVdID8/IFtdKS5mb3JFYWNoKChsaXN0ZW5lcjogRnVuY3Rpb24pID0+IHtcbiAgICAgIC8vIHNkayBzaG91bGQgbm90IGNhcmUgYWJvdXQgZXJyb3IgaW5zaWRlIGxpc3RlbmVyc1xuICAgICAgdHJ5IHtcbiAgICAgICAgbGlzdGVuZXIoLi4uZXZlbnRQYXlsb2FkKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIHRoaXMgbWV0aG9kIHdpbGwgY2FsbCBlcnJvckNhbGxiYWNrIGZvciBpbnRlZ3JhdGlvblxuICAgKiBAcGFyYW0gZXJyb3JcbiAgICogQHBhcmFtIGludGVncmF0aW9uVHlwZVxuICAgKi9cbiAgZW1pdEVycm9yKGVycm9yOiBFcnJvciwgaW50ZWdyYXRpb25UeXBlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmludm9rZUNhbGxiYWNrU2FmZShpbnRlZ3JhdGlvblR5cGUsICdvbkVycm9yJywgZXJyb3IpO1xuICB9XG5cbiAgLyoqXG4gICAqICB0aGlzIHdpbGwgY2FsbCBjYWxsQmFjayBmdW5jdGlvbiBpbnNpZGUgdHJ5LWNhdGNoIGJsb2NrXG4gICAqIEBwYXJhbSBpbnRlZ3JhdGlvblR5cGVcbiAgICogQHBhcmFtIGNhbGxiYWNrVHlwZVxuICAgKiBAcGFyYW0gcGF5bG9hZFxuICAgKi9cbiAgcHJpdmF0ZSBpbnZva2VDYWxsYmFja1NhZmUoXG4gICAgaW50ZWdyYXRpb25UeXBlOiBzdHJpbmcsXG4gICAgY2FsbGJhY2tUeXBlOiBrZXlvZiBDYWxsYmFja01hcCxcbiAgICAvLyBAdHMtaWdub3JlIGNvdWxkIG5vdCBpbmZlciBvcHRpb25hbCBjYWxsYmFja3NcbiAgICAuLi5wYXlsb2FkOiBQYXJhbWV0ZXJzPENhbGxiYWNrTWFwW2tleW9mIENhbGxiYWNrTWFwXT5cbiAgKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIC8vQHRzLWlnbm9yZSBUT0RPIDogY2hlY2sgd2h5IHRoaXMgZ2l2ZSB0eXBlIGVycm9yXG4gICAgICB0aGlzLmludGVncmF0aW9uU3RhdGVDYWxsYmFja3NbaW50ZWdyYXRpb25UeXBlXT8uW2NhbGxiYWNrVHlwZV0/LiguLi5wYXlsb2FkKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIHRoaXMgd2lsbCBpbnZva2UgZW1pdFNhZmUgbWV0aG9kIHdpdGggcHJvcGVyIHBheWxvYWRcbiAgICogQHBhcmFtIGV2ZW50XG4gICAqIEBwYXJhbSB1c2VyU3RhdGVcbiAgICogQHBhcmFtIG1vZGFsU3RhdGVcbiAgICovXG4gIHRyaWdnZXJFdmVudChcbiAgICB7IHR5cGUsIGludGVncmF0aW9uSWQsIGludGVncmF0aW9uVHlwZSwgd29ya2Zsb3dJZCwgd29ya2Zsb3dTdGF0ZUNoYW5nZSB9OiBFdmVudEluZm8sXG4gICAgdXNlclN0YXRlOiBBdXRoZW50aWNhdGVkQ29ubmVjdFVzZXIsXG4gICk6IHZvaWQge1xuICAgIGlmICghaW50ZWdyYXRpb25JZCB8fCAhaW50ZWdyYXRpb25UeXBlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIFNES19FVkVOVC5PTl9JTlRFR1JBVElPTl9JTlNUQUxMOiB7XG4gICAgICAgIGNvbnN0IGV2ZW50UGF5bG9hZDogW0ludGVncmF0aW9uSW5zdGFsbEV2ZW50LCBBdXRoZW50aWNhdGVkQ29ubmVjdFVzZXJdID0gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGludGVncmF0aW9uSWQsXG4gICAgICAgICAgICBpbnRlZ3JhdGlvblR5cGUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB1c2VyU3RhdGUsXG4gICAgICAgIF07XG5cbiAgICAgICAgdGhpcy5pbnZva2VDYWxsYmFja1NhZmUoaW50ZWdyYXRpb25UeXBlLCAnb25JbnN0YWxsJywgLi4uZXZlbnRQYXlsb2FkKTtcbiAgICAgICAgdGhpcy5lbWl0U2FmZShTREtfRVZFTlQuT05fSU5URUdSQVRJT05fSU5TVEFMTCwgLi4uZXZlbnRQYXlsb2FkKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIFNES19FVkVOVC5PTl9JTlRFR1JBVElPTl9VTklOU1RBTEw6IHtcbiAgICAgICAgY29uc3QgZXZlbnRQYXlsb2FkOiBbSW50ZWdyYXRpb25Vbmluc3RhbGxFdmVudCwgQXV0aGVudGljYXRlZENvbm5lY3RVc2VyXSA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpbnRlZ3JhdGlvbklkLFxuICAgICAgICAgICAgaW50ZWdyYXRpb25UeXBlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdXNlclN0YXRlLFxuICAgICAgICBdO1xuXG4gICAgICAgIHRoaXMuaW52b2tlQ2FsbGJhY2tTYWZlKGludGVncmF0aW9uVHlwZSwgJ29uVW5pbnN0YWxsJywgLi4uZXZlbnRQYXlsb2FkKTtcbiAgICAgICAgdGhpcy5lbWl0U2FmZShTREtfRVZFTlQuT05fSU5URUdSQVRJT05fVU5JTlNUQUxMLCAuLi5ldmVudFBheWxvYWQpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgU0RLX0VWRU5ULk9OX1BPUlRBTF9PUEVOOiB7XG4gICAgICAgIGNvbnN0IGV2ZW50UGF5bG9hZDogW1BvcnRhbE9wZW5FdmVudCwgQXV0aGVudGljYXRlZENvbm5lY3RVc2VyXSA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpbnRlZ3JhdGlvbklkLFxuICAgICAgICAgICAgaW50ZWdyYXRpb25UeXBlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdXNlclN0YXRlLFxuICAgICAgICBdO1xuXG4gICAgICAgIHRoaXMuaW52b2tlQ2FsbGJhY2tTYWZlKGludGVncmF0aW9uVHlwZSwgJ29uT3BlbicsIC4uLmV2ZW50UGF5bG9hZCk7XG4gICAgICAgIHRoaXMuZW1pdFNhZmUoU0RLX0VWRU5ULk9OX1BPUlRBTF9PUEVOLCAuLi5ldmVudFBheWxvYWQpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgU0RLX0VWRU5ULk9OX1BPUlRBTF9DTE9TRToge1xuICAgICAgICBjb25zdCBldmVudFBheWxvYWQ6IFtQb3J0YWxDbG9zZUV2ZW50LCBBdXRoZW50aWNhdGVkQ29ubmVjdFVzZXJdID0gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGludGVncmF0aW9uSWQsXG4gICAgICAgICAgICBpbnRlZ3JhdGlvblR5cGUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB1c2VyU3RhdGUsXG4gICAgICAgIF07XG5cbiAgICAgICAgdGhpcy5pbnZva2VDYWxsYmFja1NhZmUoaW50ZWdyYXRpb25UeXBlLCAnb25DbG9zZScsIC4uLmV2ZW50UGF5bG9hZCk7XG4gICAgICAgIHRoaXMuZW1pdFNhZmUoU0RLX0VWRU5ULk9OX1BPUlRBTF9DTE9TRSwgLi4uZXZlbnRQYXlsb2FkKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIFNES19FVkVOVC5PTl9XT1JLRkxPV19DSEFOR0U6IHtcbiAgICAgICAgY29uc3QgZXZlbnRQYXlsb2FkOiBbV29ya2Zsb3dTdGF0ZUNoYW5nZUV2ZW50LCBBdXRoZW50aWNhdGVkQ29ubmVjdFVzZXJdID0gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGludGVncmF0aW9uSWQsXG4gICAgICAgICAgICB3b3JrZmxvd0lkOiB3b3JrZmxvd0lkIGFzIHN0cmluZyxcbiAgICAgICAgICAgIHdvcmtmbG93U3RhdGVDaGFuZ2U6IHdvcmtmbG93U3RhdGVDaGFuZ2UgfHwge30sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB1c2VyU3RhdGUsXG4gICAgICAgIF07XG5cbiAgICAgICAgdGhpcy5pbnZva2VDYWxsYmFja1NhZmUoaW50ZWdyYXRpb25UeXBlLCAnb25Xb3JrZmxvd0NoYW5nZScsIC4uLmV2ZW50UGF5bG9hZCk7XG4gICAgICAgIHRoaXMuZW1pdFNhZmUoU0RLX0VWRU5ULk9OX1dPUktGTE9XX0NIQU5HRSwgLi4uZXZlbnRQYXlsb2FkKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dHlwZX0gaXMgbm90IHZhbGlkIGV2ZW50LmApO1xuICAgIH1cbiAgfVxufVxuIiwiZXhwb3J0IGNvbnN0IEFDVElPTl9DVVNUT00gPSAnY3VzdG9tJztcbiIsImltcG9ydCB7IENvbm5lY3RDcmVkZW50aWFsQ29uZmlnIH0gZnJvbSAnLi4vdHlwZXMvY29ubmVjdCc7XG5cbmltcG9ydCB7IElDb25uZWN0SW50ZWdyYXRpb24gfSBmcm9tICcuL2ludGVncmF0aW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJUGVyc29uYSB9IGZyb20gJy4vcGVyc29uYS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSVByb2plY3QgfSBmcm9tICcuL3Byb2plY3QuaW50ZXJmYWNlJztcblxuZXhwb3J0IGludGVyZmFjZSBJQ29ubmVjdENyZWRlbnRpYWwge1xuICBpZDogc3RyaW5nO1xuICBwcm9qZWN0SWQ6IHN0cmluZztcbiAgaW50ZWdyYXRpb25JZDogc3RyaW5nO1xuICBjb25maWc6IENvbm5lY3RDcmVkZW50aWFsQ29uZmlnO1xuICBwZXJzb25hSWQ6IHN0cmluZztcbiAgaXNQcmV2aWV3Q3JlZGVudGlhbDogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHByb3BlcnR5IHByb3ZpZGVySWQgOiB0aGlzIHByb3BlcnR5IHN0b3JlcyB1c2VyJ3MgaWRlbnRpZmllcnMgaW4gdGhpcmQgcGFydHkgZGF0YWJhc2UgZS5nLiBTaG9waWZ5XG4gICAqL1xuICBwcm92aWRlcklkOiBzdHJpbmc7XG4gIGRhdGVDcmVhdGVkOiBEYXRlO1xuICBkYXRlVXBkYXRlZDogRGF0ZTtcbiAgZGF0ZVZhbGlkVW50aWw/OiBEYXRlO1xuICBkYXRlUmVmcmVzaGVkOiBEYXRlO1xuICBzdGF0dXM6IENyZWRlbnRpYWxTdGF0dXM7XG4gIC8qKlxuICAgKiBtaXNjZWxsYW5lb3VzIGludGVncmF0aW9uIHByb3ZpZGVyIGRhdGEgcmVjZWl2ZWQgYWxvbmcgd2l0aCBhY2Nlc3NfdG9rZW4vdXNlcmluZm9cbiAgICovXG4gIHByb3ZpZGVyRGF0YTogQ29ubmVjdENyZWRlbnRpYWxQcm92aWRlckRhdGE7XG4gIC8qKlxuICAgKiBjb3VudCBob3cgbWFueSB0aW1lcyBjcmVkZW50aWFsIGZhaWxlZCB0byByZWZyZXNoXG4gICAqL1xuICByZWZyZXNoRmFpbHVyZUNvdW50OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIHRyYWNrIHJlZnJlc2hpbmcgc3RhdHVzXG4gICAqL1xuICBpc1JlZnJlc2hpbmc6IGJvb2xlYW47XG5cbiAgcHJvamVjdD86IElQcm9qZWN0O1xuICBpbnRlZ3JhdGlvbj86IElDb25uZWN0SW50ZWdyYXRpb247XG4gIHBlcnNvbmE/OiBJUGVyc29uYTtcbn1cblxuZXhwb3J0IHR5cGUgQ29ubmVjdENyZWRlbnRpYWxQcm92aWRlckRhdGEgPSBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuPjtcblxuZXhwb3J0IGVudW0gQ3JlZGVudGlhbFN0YXR1cyB7XG4gIFBFTkRJTkcgPSAnUEVORElORycsXG4gIElOVkFMSUQgPSAnSU5WQUxJRCcsXG4gIFZBTElEID0gJ1ZBTElEJyxcbn0iLCJleHBvcnQgZW51bSBBdXRoZW50aWNhdGlvblNjaGVtZSB7XG4gIEJBU0lDID0gJ2Jhc2ljJyxcbiAgT0FVVEggPSAnb2F1dGgnLFxuICBPQVVUSF9DTElFTlRfQ1JFREVOVElBTCA9ICdvYXV0aF9jbGllbnRfY3JlZGVudGlhbCcsXG4gIFNFUlZJQ0VfQUNDT1VOVCA9ICdzZXJ2aWNlX2FjY291bnQnLFxuICBPQVVUSF9BUFAgPSAnb2F1dGhfYXBwJyxcbiAgSU1QRVJTT05BVEVEX0FQUCA9ICdpbXBlcnNvbmF0ZWRfYXBwJyxcbn1cblxuLyoqXG4gKiBvYXV0aCByZXNwb25zZSByZXR1cm4gZnJvbSBvdXIgc2VydmljZVxuICovXG5leHBvcnQgdHlwZSBPYXV0aENhbGxiYWNrUmVzcG9uc2UgPSB7XG4gIGludGVncmF0aW9uSWQ6IHN0cmluZztcbiAgcGF5bG9hZDogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IGFueT47XG59O1xuIiwiaW1wb3J0IHsgSW50ZWdyYXRpb25Db25uZWN0SW5wdXQgfSBmcm9tICcuLi90eXBlcy9hY3Rpb24nO1xuaW1wb3J0IHsgRGF0YVR5cGUsIFRva2VuaXplZFNvdXJjZSB9IGZyb20gJy4uL3R5cGVzL3Jlc29sdmVycyc7XG5cbmltcG9ydCB7IElCYXNlRW50aXR5IH0gZnJvbSAnLi9iYXNlLmVudGl0eSc7XG5pbXBvcnQgeyBBdXRoZW50aWNhdGlvblNjaGVtZSB9IGZyb20gJy4vY3JlZGVudGlhbC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSUNvbm5lY3RJbnRlZ3JhdGlvbiB9IGZyb20gJy4vaW50ZWdyYXRpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IElQcm9qZWN0IH0gZnJvbSAnLi9wcm9qZWN0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBSZXF1ZXN0QXV0aG9yaXphdGlvbiB9IGZyb20gJy4vc3RlcHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElDdXN0b21JbnRlZ3JhdGlvbiBleHRlbmRzIElCYXNlRW50aXR5IHtcbiAgLyoqXG4gICAqIHRoZSBwcm9qZWN0IHRoYXQgYXV0aG9yZWQgYW5kIG1haW50YWlucyB0aGlzIGN1c3RvbSBpbnRlZ3JhdGlvbi5cbiAgICovXG4gIHByb2plY3Q6IElQcm9qZWN0O1xuXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIHByb2plY3QgdGhhdCBhdXRob3JlZCBhbmQgbWFpbnRhaW5zIHRoaXMgY3VzdG9tIGludGVncmF0aW9uLlxuICAgKi9cbiAgcHJvamVjdElkOiBzdHJpbmc7XG5cbiAgbmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogYSBzbHVnIGdlbmVyYXRlZCBmcm9tIHRoZSBuYW1lIG9mIHRoZSBjdXN0b20gaW50ZWdyYXRpb24gKGUuZy4gYGN1c3RvbS5naXRodWJgKVxuICAgKiBpdCdzIHN0cmlwcGVkIG9mIG5vbi1hbHBoYW51bWVyaWMgY2hhcmFjdGVycyBhbmQgbG93ZXJjYXNlZFxuICAgKiB0aGV5J3JlIHVuaXF1ZSBiZXR3ZWVuIHByb2plY3RzXG4gICAqL1xuICByZWFkb25seSBzbHVnPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQ0ROIHBhdGggb2YgdGhlIGN1c3RvbSBpbnRlZ3JhdGlvbidzIFNWRy1mb3JtYXQgaWNvbiBmaWxlLlxuICAgKi9cbiAgaWNvbj86IHN0cmluZztcblxuICAvKipcbiAgICogSW5zdGFuY2VzIG9mIHRoaXMgY3VzdG9tIGludGVncmF0aW9uIGNvbmZpZ3VyZWQgZm9yIGEgcGFydGljdWxhciBwcm9qZWN0LlxuICAgKlxuICAgKiBDdXJyZW50bHksIHdlIG9ubHkgZXhwZWN0IHRoYXQgb25lIGludGVncmF0aW9uIHdpbGwgYmUgYXNzb2NpYXRlZCB3aXRoIGEgY3VzdG9tIGludGVncmF0aW9uXG4gICAqIGF0IGEgdGltZS4gSG93ZXZlciwgdGhpcyBpcyBzdWJqZWN0IHRvIGNoYW5nZSBhbmQgc2hvdWxkIG5vdCBiZSB0cmVhdGVkIGFzIGFuIGludmFyaWFudCBpblxuICAgKiBjb2RlIChoZW5jZSB0aGUgYXJyYXkgdHlwaW5nKS5cbiAgICovXG4gIGludGVncmF0aW9uczogSUNvbm5lY3RJbnRlZ3JhdGlvbltdO1xuXG4gIC8qKlxuICAgKiBCYXNpYyAoQVBJIGtleXMpIGFuZCBPQXV0aCAyLjAgYXV0aGVudGljYXRpb24gdHlwZXMgYXJlIHN1cHBvcnRlZCBmb3IgY3VzdG9tIGludGVncmF0aW9ucy5cbiAgICovXG4gIGF1dGhlbnRpY2F0aW9uVHlwZT86IEF1dGhlbnRpY2F0aW9uU2NoZW1lO1xuXG4gIGlucHV0RmllbGRzOiBJbnRlZ3JhdGlvbkNvbm5lY3RJbnB1dFtdO1xuXG4gIG9hdXRoQXV0aG9yaXphdGlvblVybD86IFRva2VuaXplZFNvdXJjZTxEYXRhVHlwZS5TVFJJTkc+O1xuXG4gIG9hdXRoQWNjZXNzVG9rZW5Vcmw/OiBUb2tlbml6ZWRTb3VyY2U8RGF0YVR5cGUuU1RSSU5HPjtcblxuICBvYXV0aFNjb3Blcz86IHN0cmluZztcblxuICBvYXV0aEluY2x1ZGVDbGllbnRBdXRob3JpemF0aW9uSGVhZGVyPzogYm9vbGVhbjtcbiAgdXNlUEtDRUluQ29kZUV4Y2hhbmdlOiBib29sZWFuO1xuXG4gIGFwaUJhc2VVcmw/OiBUb2tlbml6ZWRTb3VyY2U8RGF0YVR5cGUuU1RSSU5HPjtcbiAgdGVzdEVuZHBvaW50UGF0aD86IFRva2VuaXplZFNvdXJjZTxEYXRhVHlwZS5TVFJJTkc+O1xuXG4gIGFwaUF1dGhvcml6YXRpb246IFJlcXVlc3RBdXRob3JpemF0aW9uO1xuXG4gIGlzUHVibGlzaGVkOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElQdWJsaXNoZWRDdXN0b21JbnRlZ3JhdGlvbiBleHRlbmRzIElDdXN0b21JbnRlZ3JhdGlvbiB7XG4gIGlzUHVibGlzaGVkOiB0cnVlO1xuICBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNsdWc6IHN0cmluZztcbiAgaWNvbjogc3RyaW5nO1xuICBhdXRoZW50aWNhdGlvblR5cGU6IEF1dGhlbnRpY2F0aW9uU2NoZW1lO1xuICBvYXV0aENsaWVudElkOiBzdHJpbmc7XG4gIG9hdXRoU2NvcGVzOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVNsdWdGb3JJbnRlZ3JhdGlvbihcbiAgY3VzdG9tSW50ZWdyYXRpb246IElDdXN0b21JbnRlZ3JhdGlvbixcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICghY3VzdG9tSW50ZWdyYXRpb24ubmFtZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBzbHVnOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBjdXN0b21JbnRlZ3JhdGlvbi5uYW1lXG4gICAgPyBjdXN0b21JbnRlZ3JhdGlvbi5uYW1lXG4gICAgICAgIC5yZXBsYWNlKC9bXFxXX10rL2csICcnKVxuICAgICAgICAudHJpbSgpXG4gICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgOiB1bmRlZmluZWQ7XG4gIHJldHVybiBgY3VzdG9tLiR7c2x1Z31gO1xufVxuIiwiaW1wb3J0IHsgQUNUSU9OX0NVU1RPTSB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5cbmltcG9ydCB7IElDdXN0b21JbnRlZ3JhdGlvbiwgZ2VuZXJhdGVTbHVnRm9ySW50ZWdyYXRpb24gfSBmcm9tICcuL2N1c3RvbUludGVncmF0aW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJQ29ubmVjdEludGVncmF0aW9uQ29uZmlnIH0gZnJvbSAnLi9pbnRlZ3JhdGlvbkNvbmZpZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSVdvcmtmbG93QmFzZSB9IGZyb20gJy4vd29ya2Zsb3cuaW50ZXJmYWNlJztcblxuZXhwb3J0IHR5cGUgSUNvbm5lY3RJbnRlZ3JhdGlvbiA9IHtcbiAgaWQ6IHN0cmluZztcbiAgZGF0ZUNyZWF0ZWQ6IERhdGU7XG4gIGRhdGVVcGRhdGVkOiBEYXRlO1xuICBwcm9qZWN0SWQ6IHN0cmluZztcbiAgY29uZmlnczogSUNvbm5lY3RJbnRlZ3JhdGlvbkNvbmZpZ1tdO1xuICB3b3JrZmxvd3M6IElXb3JrZmxvd0Jhc2VbXTtcbiAgdHlwZTogc3RyaW5nO1xuICBpc0FjdGl2ZTogYm9vbGVhbjtcbiAgY3VzdG9tSW50ZWdyYXRpb25JZD86IHN0cmluZztcbiAgY3VzdG9tSW50ZWdyYXRpb24/OiBJQ3VzdG9tSW50ZWdyYXRpb247XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIElDb25uZWN0SW50ZWdyYXRpb25XaXRoQ3JlZGVudGlhbEluZm8gZXh0ZW5kcyBJQ29ubmVjdEludGVncmF0aW9uIHtcbiAgaGFzQ3JlZGVudGlhbDogYm9vbGVhbjtcbiAgY29ubmVjdGVkVXNlckxpbWl0T25EZXZDcmVkOiBudW1iZXI7XG4gIGNvbm5lY3RlZFVzZXJMaW1pdFJlYWNoZWQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUludGVncmF0aW9uTWV0YWRhdGEge1xuICB0eXBlOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgaWNvbjogc3RyaW5nO1xuICBicmFuZENvbG9yOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnRlZ3JhdGlvblR5cGVOYW1lKGludGVncmF0aW9uOiBJQ29ubmVjdEludGVncmF0aW9uKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKGludGVncmF0aW9uLnR5cGUgPT09IEFDVElPTl9DVVNUT00pIHtcbiAgICBpZiAoaW50ZWdyYXRpb24uY3VzdG9tSW50ZWdyYXRpb24pIHtcbiAgICAgIHJldHVybiBnZW5lcmF0ZVNsdWdGb3JJbnRlZ3JhdGlvbihpbnRlZ3JhdGlvbi5jdXN0b21JbnRlZ3JhdGlvbik7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBDdXN0b20gaW50ZWdyYXRpb24gZGV0YWlscyBhcmUgbWlzc2luZyBmcm9tIHRoaXMgaW50ZWdyYXRpb246ICR7aW50ZWdyYXRpb24uaWR9YCxcbiAgICApO1xuICB9XG4gIHJldHVybiBpbnRlZ3JhdGlvbi50eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDdXN0b21JbnRlZ3JhdGlvblR5cGVOYW1lKHR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gdHlwZS5zdGFydHNXaXRoKCdjdXN0b20uJyk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNvbm5lY3RJbnRlZ3JhdGlvbldpdGhDcmVkZW50aWFsSW5mbyBleHRlbmRzIElDb25uZWN0SW50ZWdyYXRpb24ge1xuICBoYXNDcmVkZW50aWFsOiBib29sZWFuO1xuICBjb25uZWN0ZWRVc2VyTGltaXRPbkRldkNyZWQ6IG51bWJlcjtcbiAgY29ubmVjdGVkVXNlckxpbWl0UmVhY2hlZDogYm9vbGVhbjtcbn1cbiIsImltcG9ydCB7IERhdGFUeXBlLCBLZXllZFNvdXJjZSB9IGZyb20gJy4uL3R5cGVzL3Jlc29sdmVycyc7XG5pbXBvcnQgeyBOb25OdWxsVW5kZWZpbmVkRmllbGQgfSBmcm9tICcuLi90eXBlcy9zZGsnO1xuXG4vKipcbiAqICBjaGVja3MgaWYgaXRlbXMgaXMgb2JqZWN0IHR5cGUgb3Igbm90XG4gKiBAcGFyYW0gaXRlbVxuICogQHJldHVybnNcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QoaXRlbTogdW5rbm93bik6IGl0ZW0gaXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICByZXR1cm4gISFpdGVtICYmIHR5cGVvZiBpdGVtID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShpdGVtKTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHBhcmFtIC0gS2V5ZWRTb3VyY2U8RGF0YVR5cGUuQU5ZPltdXG4gKiBAZGVzY3JpcHRpb24gcGFyc2UgS2V5ZWRTb3VyY2UgZm9yIG5vbi1keW5hbWljIHNvdXJjZXNcbiAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBib29sZWFuIHwgdW5kZWZpbmVkPn0gLSBwYXJzZWQga2V5LXZhbHVlIHBhaXIgb2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUtleWVkU291cmNlKFxuICBwYXJhbTogS2V5ZWRTb3VyY2U8RGF0YVR5cGUuQU5ZPltdLFxuKTogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgYm9vbGVhbiB8IHVuZGVmaW5lZD4ge1xuICBpZiAoIXBhcmFtIHx8ICFwYXJhbT8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgcGFyYW0ubWFwKChwYXJhbTogS2V5ZWRTb3VyY2U8RGF0YVR5cGUuQU5ZPikgPT4gW1xuICAgICAgcGFyYW0ua2V5LFxuICAgICAgcGFyYW0uc291cmNlLnR5cGUgPT09ICdWQUxVRScgPyBwYXJhbS5zb3VyY2UudmFsdWUgOiB1bmRlZmluZWQsXG4gICAgXSksXG4gICk7XG59XG5cbi8qKlxuICogc3RyaXBzIG51bGwgYW5kIHVuZGVmaW5lZCBrZXlzIGZyb20gb2JqZWN0XG4gKiBAcGFyYW0gb2JqXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc3RyaXBVbmRlZmluZWRBbmROdWxsPFQgZXh0ZW5kcyBvYmplY3Q+KG9iajogVCk6IE5vbk51bGxVbmRlZmluZWRGaWVsZDxUPiB7XG4gIGNvbnN0IG5ld09iaiA9IHt9O1xuICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goKGtleTogc3RyaW5nKSA9PiB7XG4gICAgaWYgKGlzT2JqZWN0KG9ialtrZXldKSkge1xuICAgICAgbmV3T2JqW2tleV0gPSBzdHJpcFVuZGVmaW5lZEFuZE51bGwob2JqW2tleV0pO1xuICAgIH0gZWxzZSBpZiAob2JqW2tleV0gIT09IHVuZGVmaW5lZCAmJiBvYmpba2V5XSAhPT0gbnVsbCkge1xuICAgICAgbmV3T2JqW2tleV0gPSBvYmpba2V5XTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gbmV3T2JqIGFzIE5vbk51bGxVbmRlZmluZWRGaWVsZDxUPjtcbn1cbiIsImltcG9ydCB7IEFDVElPTl9DVVNUT00gfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgQXV0aGVudGljYXRpb25TY2hlbWUgfSBmcm9tICcuLi9lbnRpdGllcy9jcmVkZW50aWFsLmludGVyZmFjZSc7XG5pbXBvcnQge1xuICBJQ29ubmVjdEludGVncmF0aW9uV2l0aENyZWRlbnRpYWxJbmZvLFxuICBnZXRJbnRlZ3JhdGlvblR5cGVOYW1lLFxuICBpc0N1c3RvbUludGVncmF0aW9uVHlwZU5hbWUsXG59IGZyb20gJy4uL2VudGl0aWVzL2ludGVncmF0aW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJbnRlZ3JhdGlvbkNvbm5lY3RJbnB1dCB9IGZyb20gJy4uL3R5cGVzL2FjdGlvbic7XG5pbXBvcnQgeyBBdXRoZW50aWNhdGVkQ29ubmVjdFVzZXIgfSBmcm9tICcuLi90eXBlcy9jb25uZWN0JztcbmltcG9ydCB7IGF1dGhTY2hlbWFSZXF1aXJlZElucHV0cyB9IGZyb20gJy4uL3R5cGVzL29hdXRoJztcbmltcG9ydCB7IERhdGFUeXBlLCBLZXllZFNvdXJjZSB9IGZyb20gJy4uL3R5cGVzL3Jlc29sdmVycyc7XG5cbmltcG9ydCB7IElDb25uZWN0VXNlckNvbnRleHQgfSBmcm9tICcuL0Nvbm5lY3RVc2VyQ29udGV4dCc7XG5cbmltcG9ydCB7IHBhcnNlS2V5ZWRTb3VyY2UsIHN0cmlwVW5kZWZpbmVkQW5kTnVsbCB9IGZyb20gJy4nO1xuXG5cbi8qKlxuICogdGhpcyBjaGVjayBpZiBpbnB1dHMgbmVlZHMgdG8gYmUgc2hvd24gYmVmb3JlIG9hdXRoXG4gKiBAcGFyYW0gaW50ZWdyYXRpb25cbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBzaG91bGRTaG93UHJlQXV0aElucHV0cyA9ICh7XG4gIGludGVncmF0aW9uLFxuICBhdXRoU2NoZW1lLFxuICBlbmRVc2VyU3VwcGxpZWRWYWx1ZXMsXG4gIGlzQWNjb3VudFR5cGVTdXBwb3J0ZWQsXG59OiB7XG4gIGludGVncmF0aW9uOiBJQ29ubmVjdEludGVncmF0aW9uV2l0aENyZWRlbnRpYWxJbmZvO1xuICBwcm92aWRlcj86IHN0cmluZztcbiAgYXV0aFNjaGVtZT86IEF1dGhlbnRpY2F0aW9uU2NoZW1lO1xuICBlbmRVc2VyU3VwcGxpZWRWYWx1ZXM/OiBJbnRlZ3JhdGlvbkNvbm5lY3RJbnB1dFtdO1xuICBpc0FjY291bnRUeXBlU3VwcG9ydGVkOiBib29sZWFuO1xufSk6IGJvb2xlYW4gPT4ge1xuICBjb25zdCBhY3Rpb25UeXBlID0gZ2V0SW50ZWdyYXRpb25UeXBlTmFtZShpbnRlZ3JhdGlvbik7XG4gIGlmICghYWN0aW9uVHlwZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGxldCBpbnB1dHM6IEludGVncmF0aW9uQ29ubmVjdElucHV0W10gfCB1bmRlZmluZWQ7XG5cbiAgaWYgKGludGVncmF0aW9uLmN1c3RvbUludGVncmF0aW9uKSB7XG4gICAgY29uc3QgY3VzdG9tSW50ZWdyYXRpb24gPSBpbnRlZ3JhdGlvbi5jdXN0b21JbnRlZ3JhdGlvbjtcbiAgICBjb25zdCBhdXRoU3BlY2lmaWNJbnB1dHMgPSBjdXN0b21JbnRlZ3JhdGlvbi5hdXRoZW50aWNhdGlvblR5cGVcbiAgICAgID8gYXV0aFNjaGVtYVJlcXVpcmVkSW5wdXRzW2N1c3RvbUludGVncmF0aW9uLmF1dGhlbnRpY2F0aW9uVHlwZV1cbiAgICAgIDogW107XG4gICAgaW5wdXRzID0gWy4uLmF1dGhTcGVjaWZpY0lucHV0cywgLi4uKGN1c3RvbUludGVncmF0aW9uLmlucHV0RmllbGRzID8/IFtdKV07XG4gIH0gZWxzZSBpZiAoYXV0aFNjaGVtZSA9PT0gQXV0aGVudGljYXRpb25TY2hlbWUuT0FVVEgpIHtcbiAgICBpbnB1dHMgPSBlbmRVc2VyU3VwcGxpZWRWYWx1ZXM7XG4gIH1cblxuICAvKipcbiAgICogd2Ugc2hvdyBwcmUgYXV0aCBpbnB1dHMgaW4gZm9sbG93aW5nIGNhc2VzXG4gICAqIDEgLiBiYXNpYyBhdXRoXG4gICAqIDIuIGludGVncmF0aW9uIHRoYXQgc3VwcG9ydCBhY2NvdW50IHR5cGUgc2VsZWN0aW9uXG4gICAqIDMuIGN1c3RvbSBpbnRlZ3JhdGlvbiB3aXRoIGlucHV0IGZpZWxkc1xuICAgKiA0LiBvYXV0aCBpbnRlZ3JhdGlvbiB3aXRoIGVuZFVzZXJTdXBwbGllZFZhbHVlc1xuICAgKi9cbiAgcmV0dXJuIChcbiAgICBCb29sZWFuKGF1dGhTY2hlbWUgPT09IEF1dGhlbnRpY2F0aW9uU2NoZW1lLkJBU0lDKSB8fFxuICAgIEJvb2xlYW4oaW5wdXRzPy5sZW5ndGgpIHx8XG4gICAgaXNBY2NvdW50VHlwZVN1cHBvcnRlZFxuICApO1xufTtcblxuLyoqXG4gKiAgc3RhcnQgb2F1dGggZmxvdyB3aXRoIG5ldyBwb3B1cFxuICogQHBhcmFtIHBhcmFtMFxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IHN0YXJ0T0F1dGhGbG93ID0gYXN5bmMgKHtcbiAgY29udGV4dCxcbiAgaW50ZWdyYXRpb24sXG4gIGVuZFVzZXJTdXBwbGllZFZhbHVlcyA9IHt9LFxuICBhdXRoUGFyYW1zLFxufToge1xuICBjb250ZXh0OiBJQ29ubmVjdFVzZXJDb250ZXh0O1xuICBpbnRlZ3JhdGlvbjogSUNvbm5lY3RJbnRlZ3JhdGlvbldpdGhDcmVkZW50aWFsSW5mbztcbiAgZW5kVXNlclN1cHBsaWVkVmFsdWVzPzogeyBbaW5wdXRJZDogc3RyaW5nXTogc3RyaW5nIH07XG4gIGF1dGhQYXJhbXM/OiBLZXllZFNvdXJjZTxEYXRhVHlwZS5BTlk+W10gfCB1bmRlZmluZWQ7XG59KTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGNvbnN0IGFjdGlvblR5cGUgPSBnZXRJbnRlZ3JhdGlvblR5cGVOYW1lKGludGVncmF0aW9uKTtcbiAgaWYgKCFhY3Rpb25UeXBlKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcmVxdWVzdFBhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IGJvb2xlYW4gfCB1bmRlZmluZWQ+ID0gYXV0aFBhcmFtc1xuICAgID8gcGFyc2VLZXllZFNvdXJjZShhdXRoUGFyYW1zKVxuICAgIDoge307XG5cbiAgY29uc3QgcXVlcnlPYmo6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSBzdHJpcFVuZGVmaW5lZEFuZE51bGwoe1xuICAgIGFjdGlvbjogYWN0aW9uVHlwZSAmJiBpc0N1c3RvbUludGVncmF0aW9uVHlwZU5hbWUoYWN0aW9uVHlwZSkgPyBBQ1RJT05fQ1VTVE9NIDogYWN0aW9uVHlwZSxcbiAgICBlbmRVc2VyU3VwcGxpZWRWYWx1ZXM6IEpTT04uc3RyaW5naWZ5KGVuZFVzZXJTdXBwbGllZFZhbHVlcyksXG4gICAgcGFyYW1ldGVyczogSlNPTi5zdHJpbmdpZnkocmVxdWVzdFBhcmFtZXRlcnMpLFxuICAgIHVzZXJUb2tlbjogKGNvbnRleHQudXNlciBhcyBBdXRoZW50aWNhdGVkQ29ubmVjdFVzZXIpLnRva2VuLFxuICAgIGludGVncmF0aW9uSWQ6IGludGVncmF0aW9uLmlkLFxuICAgIHJlZGlyZWN0VXJsOiBjb250ZXh0LmVuZFVzZXJJbnRlZ3JhdGlvbkNvbmZpZz8ub3ZlcnJpZGVSZWRpcmVjdFVybCxcbiAgICBvcmlnaW5Gb3JQb3N0TWVzc2FnZTogd2luZG93LmxvY2F0aW9uLm9yaWdpbixcbiAgfSkgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXG4gIGNvbnN0IHVybDogc3RyaW5nID0gYCR7Y29udGV4dC5lbnZpcm9ubWVudHMuWkVVU19QVUJMSUNfVVJMfS9wcm9qZWN0cy8ke1xuICAgIGNvbnRleHQucHJvamVjdElkXG4gIH0vc2RrL2FjdGlvbnMvYnVpbGQtb2F1dGg/JHtuZXcgVVJMU2VhcmNoUGFyYW1zKHF1ZXJ5T2JqKS50b1N0cmluZygpfWA7XG4gIHdpbmRvdy5vcGVuKHVybCwgdW5kZWZpbmVkLCBgd2lkdGg9JHs1MDB9LGhlaWdodD0kezYwMH0sbGVmdD0kezEwMH0sdG9wPSR7MTUwfWApO1xufTtcbiIsImltcG9ydCBDb25uZWN0U0RLIGZyb20gJy4vQ29ubmVjdFNESyc7XG5pbXBvcnQgeyBJQ29ubmVjdFNESyB9IGZyb20gJy4vdHlwZXMnO1xuZXhwb3J0ICogZnJvbSAnLi90eXBlcy9pbmRleCc7XG5cbmNvbnN0IGNvbm5lY3RTaW5nbGV0b24gPSBuZXcgQ29ubmVjdFNESygpO1xuXG5leHBvcnQgY29uc3QgcGFyYWdvbjogSUNvbm5lY3RTREsgPSB7XG4gIGF1dGhlbnRpY2F0ZTogY29ubmVjdFNpbmdsZXRvbi5hdXRoZW50aWNhdGUuYmluZChjb25uZWN0U2luZ2xldG9uKSxcbiAgY29ubmVjdDogY29ubmVjdFNpbmdsZXRvbi5jb25uZWN0LmJpbmQoY29ubmVjdFNpbmdsZXRvbiksXG4gIGV2ZW50OiBjb25uZWN0U2luZ2xldG9uLmV2ZW50LmJpbmQoY29ubmVjdFNpbmdsZXRvbiksXG4gIGdldEludGVncmF0aW9uTWV0YWRhdGE6IGNvbm5lY3RTaW5nbGV0b24uZ2V0SW50ZWdyYXRpb25NZXRhZGF0YS5iaW5kKGNvbm5lY3RTaW5nbGV0b24pLFxuICBnZXRVc2VyOiBjb25uZWN0U2luZ2xldG9uLmdldFVzZXIuYmluZChjb25uZWN0U2luZ2xldG9uKSxcbiAgcmVxdWVzdDogY29ubmVjdFNpbmdsZXRvbi5yZXF1ZXN0LmJpbmQoY29ubmVjdFNpbmdsZXRvbiksXG4gIHN1YnNjcmliZTogY29ubmVjdFNpbmdsZXRvbi5zdWJzY3JpYmUuYmluZChjb25uZWN0U2luZ2xldG9uKSxcbiAgdW5zdWJzY3JpYmU6IGNvbm5lY3RTaW5nbGV0b24udW5zdWJzY3JpYmUuYmluZChjb25uZWN0U2luZ2xldG9uKSxcbiAgd29ya2Zsb3c6IGNvbm5lY3RTaW5nbGV0b24ud29ya2Zsb3cuYmluZChjb25uZWN0U2luZ2xldG9uKSxcbiAgX29hdXRoQ2FsbGJhY2s6IGNvbm5lY3RTaW5nbGV0b24uX29hdXRoQ2FsbGJhY2suYmluZChjb25uZWN0U2luZ2xldG9uKSxcbiAgX29hdXRoRXJyb3JDYWxsYmFjazogY29ubmVjdFNpbmdsZXRvbi5fb2F1dGhFcnJvckNhbGxiYWNrLmJpbmQoY29ubmVjdFNpbmdsZXRvbiksXG4gIGluc3RhbGxJbnRlZ3JhdGlvbjogY29ubmVjdFNpbmdsZXRvbi5pbnN0YWxsSW50ZWdyYXRpb24uYmluZChjb25uZWN0U2luZ2xldG9uKSxcbiAgdW5pbnN0YWxsSW50ZWdyYXRpb246IGNvbm5lY3RTaW5nbGV0b24udW5pbnN0YWxsSW50ZWdyYXRpb24uYmluZChjb25uZWN0U2luZ2xldG9uKSxcbiAgZGlzYWJsZVdvcmtmbG93OiBjb25uZWN0U2luZ2xldG9uLmRpc2FibGVXb3JrZmxvdy5iaW5kKGNvbm5lY3RTaW5nbGV0b24pLFxuICBzZXRVc2VyTWV0YWRhdGE6IGNvbm5lY3RTaW5nbGV0b24uc2V0VXNlck1ldGFkYXRhLmJpbmQoY29ubmVjdFNpbmdsZXRvbiksXG4gIGNvbmZpZ3VyZUdsb2JhbDogY29ubmVjdFNpbmdsZXRvbi5jb25maWd1cmVHbG9iYWwuYmluZChjb25uZWN0U2luZ2xldG9uKSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHsgQ29ubmVjdFNESyB9O1xuIiwiaW1wb3J0IHsgUmVhY3ROb2RlIH0gZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgeyBBdXRoZW50aWNhdGlvblNjaGVtZSB9IGZyb20gJy4uL2VudGl0aWVzL2NyZWRlbnRpYWwuaW50ZXJmYWNlJztcblxuaW1wb3J0IHsgU2lkZWJhcklucHV0IH0gZnJvbSAnLi9jb25uZWN0JztcbmltcG9ydCB7IERhdGFUeXBlLCBLZXllZFNvdXJjZSwgU291cmNlIH0gZnJvbSAnLi9yZXNvbHZlcnMnO1xuXG5leHBvcnQgZW51bSBTaWRlYmFySW5wdXRUeXBlIHtcbiAgQXV0aCA9ICdBVVRIJyxcbiAgRW51bSA9ICdFTlVNJyxcbiAgRHluYW1pY0VudW0gPSAnRFlOQU1JQ19FTlVNJyxcbiAgSW50ZW50ID0gJ0lOVEVOVCcsXG4gIFRleHQgPSAnVEVYVCcsXG4gIFRleHRBcmVhID0gJ1RFWFRBUkVBJyxcbiAgVmFsdWVUZXh0ID0gJ1RFWFRfTk9fVkFSUycsXG4gIFZhbHVlVGV4dEFyZWEgPSAnVEVYVEFSRUFfTk9fVkFSUycsXG4gIENvZGUgPSAnQ09ERScsXG4gIEFjdGlvbkJ1dHRvbiA9ICdBQ1RJT05fQlVUVE9OJyxcbiAgQ29uZGl0aW9uYWwgPSAnQ09ORElUSU9OQUwnLFxuICBEeW5hbWljQ29uZGl0aW9uYWwgPSAnRFlOQU1JQ19DT05ESVRJT05BTCcsXG4gIE5lc3RlZExpc3QgPSAnTkVTVEVEX0xJU1QnLFxuICBGaWxlID0gJ0ZJTEUnLFxuICBFZGl0YWJsZUR5bmFtaWNFbnVtID0gJ0VESVRBQkxFX0RZTkFNSUNfRU5VTScsXG4gIEVkaXRhYmxlRW51bSA9ICdFRElUQUJMRV9FTlVNJyxcbiAgQm9vbGVhbklucHV0ID0gJ0JPT0xFQU5fSU5QVVQnLFxuICBVc2VyU3VwcGxpZWRDcmVkZW50aWFsID0gJ1VTRVJfU1VQUExJRURfQ1JFREVOVElBTCcsXG4gIE5hdGl2ZUR5bmFtaWNFbnVtSW5wdXQgPSAnTkFUSVZFX0RZTkFNSUNfSU5QVVQnLFxuICBUaW1lQ29uc3RyYWludElucHV0ID0gJ1RJTUVfQ09OU1RSQUlOVF9JTlBVVCcsXG4gIExpbmVzTGlzdElucHV0ID0gJ0xpbmVzTGlzdElucHV0JyxcbiAgTGluZXNMaXN0RHluYW1pY0lucHV0ID0gJ0xpbmVzTGlzdER5bmFtaWNJbnB1dCcsXG4gIE51bWJlciA9ICdOVU1CRVInLFxuICBFbWFpbCA9ICdFTUFJTCcsXG4gIFVSTCA9ICdVUkwnLFxuICBFbnVtVGV4dEFyZWFQYWlySW5wdXQgPSAnRW51bVRleHRBcmVhUGFpcklucHV0JyxcbiAgRmllbGRNYXBwZXIgPSAnRklFTERfTUFQUEVSJyxcbiAgQ29tYm9JbnB1dCA9ICdDT01CT19JTlBVVCcsXG4gIFBhc3N3b3JkID0gJ1BBU1NXT1JEJyxcbiAgU3dpdGNoID0gJ1NXSVRDSCcsXG59XG5cbmludGVyZmFjZSBCYXNlSW5wdXQge1xuICBpZDogc3RyaW5nO1xuICB0aXRsZTogc3RyaW5nO1xuICBzdWJ0aXRsZT86IFJlYWN0Tm9kZTtcbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBpZiBub3QgcHJvdmlkZWQgdGhlbiB0cmVhdGVkIGFzIHRydWVcbiAgICovXG4gIHJlcXVpcmVkPzogYm9vbGVhbjtcbiAgZGVmYXVsdFZhbHVlPzogYW55O1xuICBkb2N1bWVudGF0aW9uTGluaz86IHN0cmluZztcbiAgZG9jdW1lbnRhdGlvbkxpbmtMYWJlbD86IHN0cmluZztcbiAgLyoqXG4gICAqIGhpZGUgaW5wdXQgaW4gc2lkZWJhcnNlY3Rpb25cbiAgICovXG4gIGhpZGRlbj86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBjYW4gbm90IGNoYW5nZSB2YWx1ZSBpZiByZWFkT25seVxuICAgKi9cbiAgcmVhZE9ubHk/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEludGVncmF0aW9uQ29ubmVjdElucHV0IGV4dGVuZHMgQmFzZUlucHV0IHtcbiAgdHlwZTpcbiAgICB8IFNpZGViYXJJbnB1dFR5cGUuVmFsdWVUZXh0XG4gICAgfCBTaWRlYmFySW5wdXRUeXBlLlBhc3N3b3JkXG4gICAgfCBTaWRlYmFySW5wdXRUeXBlLkR5bmFtaWNFbnVtXG4gICAgfCBTaWRlYmFySW5wdXRUeXBlLkNvbWJvSW5wdXRcbiAgICB8IFNpZGViYXJJbnB1dFR5cGUuRW51bVxuICAgIHwgU2lkZWJhcklucHV0VHlwZS5Td2l0Y2hcbiAgICB8IFNpZGViYXJJbnB1dFR5cGUuVmFsdWVUZXh0QXJlYTtcbiAgaW5wdXRUeXBlPzogc3RyaW5nO1xuICBwcmVmaXhMYWJlbD86IHN0cmluZztcbiAgc3VmZml4TGFiZWw/OiBzdHJpbmc7XG4gIHNvdXJjZVR5cGU/OiBzdHJpbmc7XG4gIGZhbGxiYWNrVGV4dD86IHN0cmluZztcbiAgaGlkZGVuSW5Db25uZWN0PzogYm9vbGVhbjtcbn1cblxudHlwZSBFbnVtU2VjdGlvbjxUID0gYW55PiA9IHtcbiAgdGl0bGU6IHN0cmluZztcbiAgaXRlbXM6IEVudW1JbnB1dFZhbHVlPFQ+W107XG59O1xuXG50eXBlIEVudW1JbnB1dFZhbHVlPFQgPSBhbnk+ID0ge1xuICB2YWx1ZTogVDtcbiAgbGFiZWw6IHN0cmluZztcbiAgLyoqXG4gICAqIHN1YnRpdGxlIHByb3BlcnR5IGlzIGZvciBkaXNwbGF5aW5nIGEgbGl0dGxlIGhlbHBlciB0ZXh0IHRvIGV4cGxhaW4gdGhlIGl0ZW0gaW4gZHJvcGRvd25cbiAgICovXG4gIHN1YnRpdGxlPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGVudW0gVG9rZW5UeXBlIHtcbiAgQUNDRVNTX1RPS0VOID0gJ0FDQ0VTU19UT0tFTicsXG4gIFJFRlJFU0hfVE9LRU4gPSAnUkVGUkVTSF9UT0tFTicsXG4gIEJPVF9UT0tFTiA9ICdCT1RfVE9LRU4nLFxuICBLTEFWSVlPX0FQSV9LRVkgPSAnS0xBVklZT19BUElfS0VZJyxcbiAgTUFSS0VUT19DTElFTlRfSUQgPSAnTUFSS0VUT19DTElFTlRfSUQnLFxuICBNQVJLRVRPX0NMSUVOVF9TRUNSRVQgPSAnTUFSS0VUT19DTElFTlRfU0VDUkVUSScsXG4gIE1BUktFVE9fRU5EUE9JTlQgPSAnTUFSS0VUT19FTkRQT0lOVCcsXG4gIE1BUktFVE9fSURFTlRJVFkgPSAnTUFSS0VUT19JREVOVElUWScsXG4gIE1PTkRBWV9BUElfVE9LRU4gPSAnTU9OREFZX0FQSV9UT0tFTicsXG4gIE9SQUNMRV9DTE9VRF9VUkwgPSAnT1JBQ0xFX0NMT1VEX1VSTCcsXG4gIE9SQUNMRV9QQVNTV09SRCA9ICdPUkFDTEVfUEFTU1dPUkQnLFxuICBPUkFDTEVfVVNFUk5BTUUgPSAnT1JBQ0xFX1VTRVJOQU1FJyxcbiAgU0FHRV9JTlRBQ0NUX0NPTVBBTllfSUQgPSAnU0FHRV9JTlRBQ0NUX0NPTVBBTllfSUQnLFxuICBTQUdFX0lOVEFDQ1RfVVNFUl9JRCA9ICdTQUdFX0lOVEFDQ1RfVVNFUl9JRCcsXG4gIFNBR0VfSU5UQUNDVF9VU0VSX1BBU1NXT1JEID0gJ1NBR0VfSU5UQUNDVF9VU0VSX1BBU1NXT1JEJyxcbiAgU0FJTFRIUlVfQ09NUEFOWV9LRVkgPSAnU0FJTFRIUlVfQ09NUEFOWV9LRVknLFxuICBTQUlMVEhSVV9DT01QQU5ZX1NFQ1JFVCA9ICdTQUlMVEhSVV9DT01QQU5ZX1NFQ1JFVCcsXG4gIFNFUlZJQ0VOT1dfUEFTU1dPUkQgPSAnU0VSVklDRU5PV19QQVNTV09SRCcsXG4gIFNFUlZJQ0VOT1dfU1VCRE9NQUlOID0gJ1NFUlZJQ0VOT1dfU1VCRE9NQUlOJyxcbiAgU0VSVklDRU5PV19VU0VSTkFNRSA9ICdTRVJWSUNFTk9XX1VTRVJOQU1FJyxcbiAgVEFCTEVBVV9QRVJTT05BTF9BQ0NFU1NfVE9LRU5fTkFNRSA9ICdUQUJMRUFVX1BFUlNPTkFMX0FDQ0VTU19UT0tFTl9OQU1FJyxcbiAgVEFCTEVBVV9QRVJTT05BTF9BQ0NFU1NfVE9LRU5fU0VDUkVUID0gJ1RBQkxFQVVfUEVSU09OQUxfQUNDRVNTX1RPS0VOX1NFQ1JFVCcsXG4gIFRBQkxFQVVfU0VSVkVSX05BTUUgPSAnVEFCTEVBVV9TRVJWRVJfTkFNRScsXG4gIFRBQkxFQVVfU0lURV9JRCA9ICdUQUJMRUFVX1NJVEVfSUQnLFxuICBUUkVMTE9fQVBJX0tFWSA9ICdUUkVMTE9fQVBJX0tFWScsXG4gIFRSRUxMT19BUElfVE9LRU4gPSAnVFJFTExPX0FQSV9UT0tFTicsXG4gIFdPT0NPTU1FUkNFX0NPTlNVTUVSX0tFWSA9ICdXT09DT01NRVJDRV9DT05TVU1FUl9LRVknLFxuICBXT09DT01NRVJDRV9DT05TVU1FUl9TRUNSRVQgPSAnV09PQ09NTUVSQ0VfQ09OU1VNRVJfU0VDUkVUJyxcbiAgV09PQ09NTUVSQ0VfU1RPUkVfRE9NQUlOID0gJ1dPT0NPTU1FUkNFX1NUT1JFX0RPTUFJTicsXG4gIFdPUktBQkxFX0FQSV9BQ0NFU1NfVE9LRU4gPSAnV09SS0FCTEVfQVBJX0FDQ0VTU19UT0tFTicsXG4gIFdPUktBQkxFX0FDQ09VTlRfU1VCRE9NQUlOID0gJ1dPUktBQkxFX0FDQ09VTlRfU1VCRE9NQUlOJyxcbiAgWk9IT19DUk1fQUNDT1VOVFNfU0VSVkVSID0gJ1pPSE9fQ1JNX0FDQ09VTlRTX1NFUlZFUicsXG4gIFpPSE9fQ1JNX0FQSV9ET01BSU4gPSAnWk9IT19DUk1fQVBJX0RPTUFJTicsXG59XG5cbmV4cG9ydCB0eXBlIERhdGFTb3VyY2UgPVxuICB8IER5bmFtaWNEYXRhU291cmNlPGFueT5cbiAgfCBTdGF0aWNFbnVtRGF0YVNvdXJjZVxuICB8IEZpZWxkTWFwcGVyRGF0YVNvdXJjZVxuICB8IENvbWJvSW5wdXREYXRhU291cmNlO1xuXG50eXBlIEJhc2ljRGF0YVNvdXJjZSA9IHtcbiAgLyoqXG4gICAqIHRpdGxlIGZvciBkYXRhIHNvdXJjZVxuICAgKi9cbiAgdGl0bGU6IHN0cmluZztcblxuICAvKipcbiAgICogZGVzY3JpcHRpb24gZm9yIGRhdGEgc291cmNlXG4gICAqL1xuICBzdWJ0aXRsZT86IFJlYWN0Tm9kZTtcblxuICAvKipcbiAgICogSWYgc3BlY2lmaWVkLCBpbnN0cnVjdGlvbmFsVGV4dCByZXBsYWNlcyB0aGUgZGVmYXVsdCB0ZXh0IGV4cGxhaW5pbmcgdGhlIGlucHV0IHVuZGVyIHRoZSBzZWxlY3Rpb24sXG4gICAqIGUuZy4gXCJMZXQgeW91ciB1c2VycyBzZWxlY3QgPGlucHV0IG5hbWU+IGZyb20gdGhlaXIgPGludGVncmF0aW9uIG5hbWU+IGFjY291bnQuXCJcbiAgICovXG4gIGluc3RydWN0aW9uYWxUZXh0PzogUmVhY3ROb2RlO1xuXG4gIC8qKlxuICAgKiBJZiB0cnVlLCB0aGlzIHByb3BlcnR5IGhpZGVzIHRoaXMgZGF0YSBzb3VyY2UgYXMgYSBDb25uZWN0IGZpZWxkIHR5cGUuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBoaWRlRnJvbUNvbm5lY3RGaWVsZFR5cGVzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSWYgdHJ1ZSwgZGF0YVNvdXJjZSB3aWxsIGJlIGZldGNoZWQgaW4gcGFnaW5hdGlvbiBmb3JtYXRcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHN1cHBvcnRQYWdpbmF0aW9uPzogYm9vbGVhbjtcbn07XG5cbnR5cGUgRHluYW1pY0RhdGFTb3VyY2U8VFZhbHVlcyA9IEVudW1JbnB1dFZhbHVlW10+ID0gQmFzaWNEYXRhU291cmNlICYge1xuICB0eXBlOiBEYXRhU291cmNlVHlwZS5EWU5BTUlDO1xuXG4gIC8qKlxuICAgKiBJZiBwcm92aWRlZCwgdGhlIHJlc3BvbnNlIGZyb20gdGhlIHJlZnJlc2ggbWV0aG9kIHdpbGwgYmUgc2F2ZWQgaW50byB0aGUgc3RlcC5cbiAgICovXG4gIGNhY2hlS2V5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGlzIGFycmF5IGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHRoZSBpbnB1dCdzIHZhbHVlcyBzaG91bGQgYmVcbiAgICogcmVmcmVzaGVkLiBTdHJpbmdzIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBLZXllZFNvdXJjZSBkZXBlbmRlbmN5IHdpdGhpblxuICAgKiBgb3B0aW9ucy5hY3Rpb25QYXJhbWV0ZXJzYCwgYW5kIGEgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhbnkgb3RoZXJcbiAgICogZGVwZW5kZW5jeSB3aXRoaW4gdGhlIHN0ZXAncyBwYXJhbWV0ZXJzLlxuICAgKlxuICAgKiBJZiBgcmVmcmVzaERlcGVuZGVuY2llc2AgaXMgYW4gZW1wdHkgYXJyYXksIHRoZSBpbnB1dCB3aWxsIHJlZnJlc2ggb24gbW91bnQuXG4gICAqIElmIGByZWZyZXNoRGVwZW5kZW5jaWVzYCBpcyBub3QgcHJvdmlkZWQsIHRoZSBpbnB1dCB3aWxsIG5vdCByZWZyZXNoIHVubGVzc1xuICAgKiBtYW51YWxseSBpbnZva2VkIChpLmUuLCBieSBhIGJ1dHRvbikuXG4gICAqL1xuICByZWZyZXNoRGVwZW5kZW5jaWVzPzogKHN0cmluZyB8ICgob3B0aW9uczogQWN0aW9uU3RlcFBhcmFtZXRlcnMpID0+IGFueSkpW107XG5cbiAgLyoqXG4gICAqIFdoZW4gdGhlIGRhdGEgY29tZXMgYmFjayBmcm9tIHRoZSBpbnRlbnQgcmVxdWVzdGVkIGJ5IHRoZSBgcmVmcmVzaGAgbWV0aG9kLFxuICAgKiB0aGlzIGlzIHRoZSBtZXRob2QgdXNlZCB0byBtYXAgdGhlIGRhdGEgaW50byB0aGUgaW5wdXQgKyBjYWNoZVxuICAgKi9cbiAgbWFwUmVmcmVzaFRvVmFsdWVzOiAocmVzcG9uc2U6IGFueSkgPT4gVFZhbHVlcztcblxuICAvKipcbiAgICogVGhpcyBtZXRob2QgaXMgcmVzcG9uc2libGUgZm9yIHNwZWNpZnlpbmcgdGhlIGFjdGlvbiwgaW50ZW50IGFuZCBwYXJhbWV0ZXJzXG4gICAqIGZvciBsb2FkaW5nIHRoZSBkYXRhIGludG8gdGhlIGlucHV0XG4gICAqL1xuICBnZXRSZWZyZXNoQWN0aW9uUGFyYW1ldGVyczogKFxuICAgIG9wdGlvbnM6IEFjdGlvblN0ZXBQYXJhbWV0ZXJzLFxuICAgIGlucHV0czogU2lkZWJhcklucHV0W10sXG4gICAgYWN0aXZlSW5wdXQ6IFNpZGViYXJJbnB1dCxcbiAgKSA9PiBBY3Rpb25TdGVwUGFyYW1ldGVycztcblxuICAvKipcbiAgICogY2FsbGVkIGFmdGVyIHRoZSBpbnB1dCByZWZyZXNoZXMgdy8gdGhlIHZhbHVlcyBtYXBwZWQgZnJvbSBgbWFwUmVmcmVzaFRvVmFsdWVzYFxuICAgKi9cbiAgb25SZWZyZXNoPzogKHZhbHVlOiBhbnkpID0+IEFjdGlvblJlc3BvbnNlO1xufTtcblxudHlwZSBBY3Rpb25SZXNwb25zZSA9IEFsZXJ0QWN0aW9uUmVzcG9uc2UgfCBEaXNwYXRjaEFjdGlvblJlc3BvbnNlO1xudHlwZSBBbGVydEFjdGlvblJlc3BvbnNlID0ge1xuICB0eXBlOiBBY3Rpb25SZXNwb25zZVR5cGUuQUxFUlQ7XG4gIHN0YXR1czogQWN0aW9uUmVzcG9uc2VTdGF0dXM7XG4gIG1lc3NhZ2U6IHN0cmluZztcbn07XG5cbnR5cGUgRGlzcGF0Y2hBY3Rpb25SZXNwb25zZSA9IHtcbiAgdHlwZTogQWN0aW9uUmVzcG9uc2VUeXBlLkRJU1BBVENIO1xuICBzdGF0dXM6IEFjdGlvblJlc3BvbnNlU3RhdHVzO1xuICBpZDogc3RyaW5nO1xuICBzb3VyY2U6IFNvdXJjZTtcbn07XG5lbnVtIEFjdGlvblJlc3BvbnNlU3RhdHVzIHtcbiAgSU5GTyA9ICdJTkZPJyxcbiAgRVJST1IgPSAnRVJST1InLFxuICBTVUNDRVNTID0gJ1NVQ0NFU1MnLFxufVxuXG5lbnVtIEFjdGlvblJlc3BvbnNlVHlwZSB7XG4gIE5PTkUgPSAnTk9ORScsXG4gIFJFX0FVVEhFTlRJQ0FURSA9ICdSRV9BVVRIRU5USUNBVEUnLFxuICBBTEVSVCA9ICdBTEVSVCcsXG4gIERJU1BBVENIID0gJ0RJU1BBVENIJyxcbn1cblxudHlwZSBTdGF0aWNFbnVtRGF0YVNvdXJjZSA9IEJhc2ljRGF0YVNvdXJjZSAmIHtcbiAgdHlwZTogRGF0YVNvdXJjZVR5cGUuU1RBVElDX0VOVU07XG4gIC8qKlxuICAgKiBpZCBmb3IgZGF0YSBzb3VyY2VcbiAgICovXG4gIGlkOiBzdHJpbmc7XG4gIHZhbHVlczogRW51bUlucHV0VmFsdWVbXSB8IEVudW1TZWN0aW9uW107XG59O1xuXG4vKipcbiAqIEEgRmllbGRNYXBwZXJEYXRhU291cmNlIHJlZmVycyB0byBhIHNvdXJjZSB0aGF0IGlzIGFibGUgdG8gZHJpdmUgYW4gaW5wdXQgdGhhdCBpcyByZXNwb25zaWJsZVxuICogZm9yIG1hcHBpbmcgcmVtb3RlL2ludGVncmF0aW9uIGZpZWxkcyB0byBsb2NhbC9wcm9qZWN0IGZpZWxkcy5cbiAqL1xudHlwZSBGaWVsZE1hcHBlckRhdGFTb3VyY2UgPSBCYXNpY0RhdGFTb3VyY2UgJiB7XG4gIGlkOiBzdHJpbmc7XG4gIHR5cGU6IERhdGFTb3VyY2VUeXBlLkZJRUxEX01BUFBFUjtcbiAgcmVjb3JkU291cmNlOiBEeW5hbWljRGF0YVNvdXJjZTwoRW51bVNlY3Rpb24gfCBFbnVtSW5wdXRWYWx1ZSlbXT47XG4gIGZpZWxkU291cmNlOiBEeW5hbWljRGF0YVNvdXJjZTwoRW51bVNlY3Rpb24gfCBFbnVtSW5wdXRWYWx1ZSlbXT47XG59O1xuXG4vKipcbiAqIEEgQ29tYm9JbnB1dERhdGFTb3VyY2UgcmVmZXJzIHRvIGEgc291cmNlIHRoYXQgaXMgYWJsZSB0byBkcml2ZSBhbiBpbnB1dCB0aGF0IGlzIHJlc3BvbnNpYmxlXG4gKiBmb3IgY29tYmluaW5nIHRoZSByZW1vdGUvaW50ZWdyYXRpb24gZmllbGRzIHRvIGxvY2FsL3Byb2plY3QgZmllbGRzLlxuICovXG50eXBlIENvbWJvSW5wdXREYXRhU291cmNlID0gQmFzaWNEYXRhU291cmNlICYge1xuICBpZDogc3RyaW5nO1xuICB0eXBlOiBEYXRhU291cmNlVHlwZS5DT01CT19JTlBVVDtcbiAgbWFpbklucHV0U291cmNlOiBEeW5hbWljRGF0YVNvdXJjZTwoRW51bVNlY3Rpb24gfCBFbnVtSW5wdXRWYWx1ZSlbXT47XG4gIGRlcGVuZGVudElucHV0U291cmNlOiBEeW5hbWljRGF0YVNvdXJjZTwoRW51bVNlY3Rpb24gfCBFbnVtSW5wdXRWYWx1ZSlbXT47XG4gIGZpZWxkU291cmNlPzogRHluYW1pY0RhdGFTb3VyY2U8KEVudW1TZWN0aW9uIHwgRW51bUlucHV0VmFsdWUpW10+O1xufTtcblxudHlwZSBCYXNlQWN0aW9uU3RlcFBhcmFtZXRlcnMgPSB7XG4gIGFjdGlvblR5cGU6IHN0cmluZztcbiAgY3JlZGVudGlhbHM6IHN0cmluZ1tdO1xuICByZXRyeU9uRmFpbHVyZT86IGJvb2xlYW47XG4gIGlnbm9yZUZhaWx1cmU/OiBib29sZWFuO1xufTtcblxuZW51bSBEYXRhU291cmNlVHlwZSB7XG4gIERZTkFNSUMgPSAnRFlOQU1JQ19EQVRBX1NPVVJDRScsXG4gIFNUQVRJQ19FTlVNID0gJ1NUQVRJQ19FTlVNX0RBVEFfU09VUkNFJyxcbiAgRklFTERfTUFQUEVSID0gJ0ZJRUxEX01BUFBFUl9EQVRBX1NPVVJDRScsXG4gIENPTUJPX0lOUFVUID0gJ0NPTUJPX0lOUFVUX0RBVEFfU09VUkNFJyxcbn1cblxudHlwZSBBY3Rpb25TdGVwUGFyYW1ldGVycyA9IEJhc2VBY3Rpb25TdGVwUGFyYW1ldGVycyAmIHtcbiAgaW50ZW50OiBzdHJpbmc7XG4gIGFjdGlvblBhcmFtZXRlcnM6IEtleWVkU291cmNlPERhdGFUeXBlLkFOWT5bXTtcbn07XG5cbi8qKlxuICogSXQgd2lsbCBvdmVycmlkZSB0aGUgYWN0aW9uIGFsaWFzIGZvciBtYWtpbmcgZmlsZXMgbmFtZSBtb3JlIGNsZWFuZXJcbiAqL1xuZXhwb3J0IGNvbnN0IG92ZXJyaWRlQWN0aW9uQWxpYXM6IFBhcnRpYWw8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4gPSB7XG4gIG1vbmRheTogJ21vbmRheScsXG59O1xuXG5leHBvcnQgdHlwZSBBY3Rpb25Db25maWdEVE8gPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgYnJhbmRDb2xvcjogc3RyaW5nO1xuICBwcm92aWRlcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBhdXRoU2NoZW1lOiBBdXRoZW50aWNhdGlvblNjaGVtZSB8IHVuZGVmaW5lZDtcbiAgZW5kVXNlclN1cHBsaWVkVmFsdWVzOiBJbnRlZ3JhdGlvbkNvbm5lY3RJbnB1dFtdIHwgdW5kZWZpbmVkO1xuICBpc0FjY291bnRUeXBlU3VwcG9ydGVkOiBib29sZWFuO1xufTsiLCJpbXBvcnQgeyBCaWxsaW5nUGxhbiwgQ29ubmVjdEFkZE9uLCBDb25uZWN0Tm9uVHJpYWxCaWxsaW5nUGxhbiB9IGZyb20gJy4vc3RyaXBlJztcblxuZXhwb3J0IGNvbnN0IENPTk5FQ1RfUExBTl9GRUFUVVJFX01BUDogUmVjb3JkPENvbm5lY3ROb25UcmlhbEJpbGxpbmdQbGFuLCBDb25uZWN0QWRkT25bXT4gPSB7XG4gIFtCaWxsaW5nUGxhbi5Db25uZWN0QmFzaWNdOiBbXSxcbiAgW0JpbGxpbmdQbGFuLkNvbm5lY3RQcm9dOiBbXG4gICAgQ29ubmVjdEFkZE9uLkN1c3RvbUludGVncmF0aW9uQnVpbGRlcixcbiAgICBDb25uZWN0QWRkT24uSGVhZGxlc3NDb25uZWN0UG9ydGFsLFxuICAgIENvbm5lY3RBZGRPbi5Nb25pdG9yaW5nLFxuICAgIENvbm5lY3RBZGRPbi5Vc2VyTWV0YWRhdGEsXG4gICAgQ29ubmVjdEFkZE9uLldoaXRlTGFiZWxpbmcsXG4gIF0sXG4gIFtCaWxsaW5nUGxhbi5Db25uZWN0RW50ZXJwcmlzZV06IFtcbiAgICBDb25uZWN0QWRkT24uQ3VzdG9tSW50ZWdyYXRpb25CdWlsZGVyLFxuICAgIENvbm5lY3RBZGRPbi5EeW5hbWljRmllbGRNYXBwZXIsXG4gICAgQ29ubmVjdEFkZE9uLkhlYWRsZXNzQ29ubmVjdFBvcnRhbCxcbiAgICBDb25uZWN0QWRkT24uVGFza0hpc3RvcnlBUEksXG4gICAgQ29ubmVjdEFkZE9uLk1vbml0b3JpbmcsXG4gICAgQ29ubmVjdEFkZE9uLlJvbGVCYXNlZEFjY2Vzc0NvbnRyb2wsXG4gICAgQ29ubmVjdEFkZE9uLlVzZXJNZXRhZGF0YSxcbiAgICBDb25uZWN0QWRkT24uV2hpdGVMYWJlbGluZyxcbiAgICBDb25uZWN0QWRkT24uV29ya2Zsb3dQZXJtaXNzaW9uLFxuICBdLFxufTtcbiIsImltcG9ydCB7XG4gIENvbm5lY3RDcmVkZW50aWFsUHJvdmlkZXJEYXRhLFxuICBDcmVkZW50aWFsU3RhdHVzLFxufSBmcm9tICcuLi9lbnRpdGllcy9jb25uZWN0Q3JlZGVudGlhbC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUGVyc29uYU1ldGEgfSBmcm9tICcuLi9lbnRpdGllcy9wZXJzb25hLmludGVyZmFjZSc7XG5cbmltcG9ydCB7IERhdGFTb3VyY2UsIEludGVncmF0aW9uQ29ubmVjdElucHV0LCBTaWRlYmFySW5wdXRUeXBlIH0gZnJvbSAnLi9hY3Rpb24nO1xuaW1wb3J0IHsgT3JDb25kaXRpb25zIH0gZnJvbSAnLi9yZXNvbHZlcnMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbm5lY3RDcmVkZW50aWFsQ29uZmlnIHtcbiAgY29uZmlndXJlZFdvcmtmbG93cz86IEludGVncmF0aW9uV29ya2Zsb3dTdGF0ZU1hcDtcbiAgc2hhcmVkU2V0dGluZ3M/OiB7IFtpbnB1dElkOiBzdHJpbmddOiBDb25uZWN0SW5wdXRWYWx1ZSB8IHVuZGVmaW5lZCB9O1xufVxuXG50eXBlIENvbm5lY3RJbnB1dFZhbHVlID1cbiAgfCBzdHJpbmdcbiAgfCBudW1iZXJcbiAgfCBib29sZWFuXG4gIHwgRmllbGRNYXBwaW5nVmFsdWVcbiAgfCBDb21ib0lucHV0VmFsdWVcbiAgfCB1bmRlZmluZWQ7XG5cbnR5cGUgRmllbGRNYXBwaW5nVmFsdWUgPSB7XG4gIG9iamVjdE1hcHBpbmc/OiBzdHJpbmc7XG4gIGZpZWxkTWFwcGluZ3M/OiB7XG4gICAgW2xhYmVsOiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIH07XG4gIGR5bmFtaWNNYXBwaW5ncz86IHtcbiAgICBbbWFwcGluZ0tleTogc3RyaW5nXToge1xuICAgICAgYXBwbGljYXRpb25GaWVsZD86IHN0cmluZztcbiAgICAgIGludGVncmF0aW9uRmllbGQ/OiBzdHJpbmc7XG4gICAgfTtcbiAgfTtcbiAgdXNlckNyZWF0ZWRGaWVsZHM/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFR5cGUgb2YgZmllbGQgbWFwcGVyIHVzZWQgZm9yIGNyZWF0aW5nIGZpZWxkIG1hcHBpbmdzXG4gICAqIEBkZWZhdWx0IFNUQVRJQ1xuICAgKi9cbiAgbWFwcGluZ1R5cGU/OiAnU1RBVElDJyB8ICdEWU5BTUlDJztcbn07XG5cbnR5cGUgQ29tYm9JbnB1dFZhbHVlID0ge1xuICBtYWluSW5wdXQ/OiBzdHJpbmc7XG4gIGRlcGVuZGVudElucHV0Pzogc3RyaW5nO1xuICBmaWVsZE1hcHBpbmdzPzoge1xuICAgIFtsYWJlbDogc3RyaW5nXTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICB9O1xufTtcblxudHlwZSBJbnRlZ3JhdGlvbldvcmtmbG93U3RhdGVNYXAgPSB7XG4gIFt3b3JrZmxvd0lkOiBzdHJpbmddOiBJbnRlZ3JhdGlvbldvcmtmbG93U3RhdGUgfCB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgdHlwZSBJbnRlZ3JhdGlvbldvcmtmbG93U3RhdGUgPSB7XG4gIGVuYWJsZWQ6IGJvb2xlYW47XG4gIHNldHRpbmdzOiB7IFtpbnB1dElkOiBzdHJpbmddOiBDb25uZWN0SW5wdXRWYWx1ZSB8IHVuZGVmaW5lZCB9O1xuICAvKipcbiAgICogdGltZXN0YW1wIHZhbHVlIGZvciBsYXN0IEV4ZWN1dGlvbiBEYXRlIGZvciB3b3JrZmxvdyAuIFdpbGwgYmUgc3luY2VkIHVwIGJ5IGNocm9ub3Mgc2VydmljZS5cbiAgICovXG4gIGxhc3RFeGVjdXRpb25EYXRlPzogRGF0ZTtcbiAgLyoqXG4gICAqICBsYXN0IGV4ZWN1dGlvbiBzdGF0dXMgZm9yIHdvcmtmbG93IC4gV2lsbCBiZSBzeW5jZWQgdXAgYnkgY2hyb25vcyBzZXJ2aWNlLlxuICAgKi9cbiAgbGFzdEV4ZWN1dGlvblN0YXR1cz86IEV4ZWN1dGlvblN0YXR1cztcbn07XG5cbmVudW0gRXhlY3V0aW9uU3RhdHVzIHtcbiAgTk9UX1NUQVJURUQgPSAnTk9UX1NUQVJURUQnLFxuICBERUxBWUVEID0gJ0RFTEFZRUQnLFxuICBQQVVTRUQgPSAnUEFVU0VEJyxcbiAgRVhFQ1VUSU5HID0gJ0VYRUNVVElORycsXG4gIEZBSUxFRCA9ICdGQUlMRUQnLFxuICBTVUNDRUVERUQgPSAnU1VDQ0VFREVEJyxcbiAgV0FJVElORyA9ICdXQUlUSU5HJyxcbn1cblxuZXhwb3J0IHR5cGUgTW9kYWxDb25maWcgPSB7XG4gIC8qKlxuICAgKiBBIHByaW1hcnkgY29sb3IgZm9yIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSBDb25uZWN0IG1vZGFsLlxuICAgKi9cbiAgYWNjZW50Q29sb3I/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBIGJvb2xlYW4gdG8gc2hvdyAvIGhpZGUgcGFyYWdvbiBsaW5rIGluIGZvb3RlciBzZWN0aW9uLiAoZGVmYXVsdCB0cnVlKVxuICAgKi9cbiAgcGFyYWdvbkxpbms/OiBib29sZWFuO1xuICAvKipcbiAgICogQSBkZXNjcmlwdGlvbiBmb3IgdGhlIGludGVncmF0aW9uJ3MgcHVycG9zZS4gQXBwZWFycyBqdXN0IGJlbG93IHRoZSBpbnRlZ3JhdGlvbiBuYW1lLlxuICAgKi9cbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBIGxvbmctZm9ybSBkZXNjcmlwdGlvbiBmb3IgdGhlIGludGVncmF0aW9uJ3MgcHVycG9zZS4gQXBwZWFycyBpbiB0aGUgT3ZlcnZpZXcgdGFiIG9mIHRoZVxuICAgKiBDb25uZWN0IG1vZGFsLlxuICAgKi9cbiAgb3ZlcnZpZXc/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBJbnB1dHMgYW5kIG1ldGFkYXRhIGFib3V0IHRoaXMgaW50ZWdyYXRpb24ncyB3b3JrZmxvd3MuXG4gICAqL1xuICB3b3JrZmxvd01ldGE/OiBJbnRlZ3JhdGlvbldvcmtmbG93TWV0YU1hcDtcbiAgLyoqXG4gICAqIElucHV0cyBtZXRhZGF0YSBmb3Igc2hhcmVkIHdvcmtmbG93IHNldHRpbmdzXG4gICAqL1xuICBzaGFyZWRNZXRhPzogSW50ZWdyYXRpb25TaGFyZWRNZXRhO1xufTtcbnR5cGUgSW50ZWdyYXRpb25TaGFyZWRNZXRhID0ge1xuICAvKipcbiAgICogSW5wdXRzIHRvIGludGFrZSBnbG9iYWwvc2hhcmVkIHVzZXIgc2V0dGluZ3MsIGNvbmZpZ3VyZWQgaW4gdGhlIFBvcnRhbCBFZGl0b3IuXG4gICAqL1xuICBpbnB1dHM/OiBTZXJpYWxpemVkQ29ubmVjdElucHV0W107XG59O1xuXG5jb25zdCBTdXBwb3J0ZWRDb25uZWN0SW5wdXRUeXBlcyA9IFtcbiAgU2lkZWJhcklucHV0VHlwZS5WYWx1ZVRleHQsXG4gIFNpZGViYXJJbnB1dFR5cGUuRHluYW1pY0VudW0sXG4gIFNpZGViYXJJbnB1dFR5cGUuRW51bSxcbiAgU2lkZWJhcklucHV0VHlwZS5OdW1iZXIsXG4gIFNpZGViYXJJbnB1dFR5cGUuRW1haWwsXG4gIFNpZGViYXJJbnB1dFR5cGUuVVJMLFxuICBTaWRlYmFySW5wdXRUeXBlLkZpZWxkTWFwcGVyLFxuICBTaWRlYmFySW5wdXRUeXBlLkJvb2xlYW5JbnB1dCxcbiAgU2lkZWJhcklucHV0VHlwZS5Db21ib0lucHV0LFxuICBTaWRlYmFySW5wdXRUeXBlLlBhc3N3b3JkLFxuICBTaWRlYmFySW5wdXRUeXBlLlN3aXRjaCxcbiAgU2lkZWJhcklucHV0VHlwZS5WYWx1ZVRleHRBcmVhLFxuXSBhcyBjb25zdDtcblxudHlwZSBTdXBwb3J0ZWRDb25uZWN0SW5wdXRUeXBlID0gKHR5cGVvZiBTdXBwb3J0ZWRDb25uZWN0SW5wdXRUeXBlcylbbnVtYmVyXTtcblxuZXhwb3J0IHR5cGUgU2lkZWJhcklucHV0ID0gSW50ZWdyYXRpb25Db25uZWN0SW5wdXQ7XG5cbnR5cGUgU3VwcG9ydGVkQ29ubmVjdElucHV0PFQgZXh0ZW5kcyBTaWRlYmFySW5wdXQgPSBTaWRlYmFySW5wdXQ+ID0gRXh0cmFjdDxcbiAgVCxcbiAge1xuICAgIHR5cGU6IFN1cHBvcnRlZENvbm5lY3RJbnB1dFR5cGU7XG4gIH1cbj47XG5cbi8qKlxuICogQSBTZXJpYWxpemVkQ29ubmVjdElucHV0IGlzIG9uZSB0aGF0IGV4Y2x1ZGVzIHRoZSBwcm9wZXJ0aWVzIG9mIGEgRHluYW1pY0RhdGFTb3VyY2UsIHdoaWNoIGFyZVxuICogbG9hZGVkIGluIGF0IHJ1bnRpbWUgcmF0aGVyIHRoYW4gc2F2ZWQgaW4gdGhlIERCLlxuICovXG50eXBlIFNlcmlhbGl6ZWRDb25uZWN0SW5wdXQ8XG4gIFRJbnB1dFR5cGUgZXh0ZW5kcyBTdXBwb3J0ZWRDb25uZWN0SW5wdXRUeXBlID0gU3VwcG9ydGVkQ29ubmVjdElucHV0VHlwZSxcbj4gPSB7XG4gIFtUIGluIFN1cHBvcnRlZENvbm5lY3RJbnB1dFR5cGVdOiBFeHRyYWN0PFxuICAgIFN1cHBvcnRlZENvbm5lY3RJbnB1dCxcbiAgICB7XG4gICAgICB0eXBlOiBUO1xuICAgIH1cbiAgPiBleHRlbmRzIHsgc291cmNlOiBEYXRhU291cmNlIH0gfCB7IGdldFZhbHVlczogRnVuY3Rpb24gfVxuICAgID8gT21pdDxcbiAgICAgICAgRXh0cmFjdDxcbiAgICAgICAgICBTdXBwb3J0ZWRDb25uZWN0SW5wdXQsXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogVDtcbiAgICAgICAgICB9XG4gICAgICAgID4sXG4gICAgICAgICdzb3VyY2UnIHwgJ2dldFZhbHVlcydcbiAgICAgID4gJiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJZiBhIENvbm5lY3QgaW5wdXQgaXMgZHluYW1pYyBhbmQgdXNlcyBhIER5bmFtaWNEYXRhU291cmNlLCBgc291cmNlVHlwZWAgd2lsbCBtYXRjaCB0aGVcbiAgICAgICAgICogYGNhY2hlS2V5YCBwcm9wZXJ0eSBvZiB0aGUgc291cmNlIHNwZWNpZmllZCBpbiB0aGUgYWN0aW9uJ3Mgc291cmNlcyBtb2R1bGUuXG4gICAgICAgICAqXG4gICAgICAgICAqIElmIGl0IHVzZXMgYSBGaWVsZE1hcHBlckRhdGFTb3VyY2UsIGBzb3VyY2VUeXBlYCB3aWxsIG1hdGNoIHRoZSBgaWRgIHByb3BlcnR5IG9mIHRoZSBzb3VyY2UuXG4gICAgICAgICAqL1xuICAgICAgICBzb3VyY2VUeXBlPzogc3RyaW5nO1xuICAgICAgICAvLyB0aGlzIHdpbGwgc2hvdyBlcnJvciBtZXNzYWdlIGZvciBwb3N0IG9hdXRoIGlucHV0XG4gICAgICAgIGZhbGxiYWNrVGV4dD86IHN0cmluZztcbiAgICAgIH1cbiAgICA6IEV4dHJhY3Q8XG4gICAgICAgIFN1cHBvcnRlZENvbm5lY3RJbnB1dCxcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IFQ7XG4gICAgICAgIH1cbiAgICAgID47XG59W1RJbnB1dFR5cGVdICYgeyB0b29sdGlwPzogc3RyaW5nIH07XG5cbnR5cGUgSW50ZWdyYXRpb25Xb3JrZmxvd01ldGFNYXAgPSB7XG4gIFtpZDogc3RyaW5nXTogSW50ZWdyYXRpb25Xb3JrZmxvd01ldGE7XG59O1xudHlwZSBJbnRlZ3JhdGlvbldvcmtmbG93TWV0YSA9IHtcbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgV29ya2Zsb3dFbnRpdHkuXG4gICAqL1xuICBpZDogc3RyaW5nO1xuICAvKipcbiAgICogQSBsb25nZXItZm9ybSBkZXNjcmlwdGlvbiBmb3IgdGhlIFdvcmtmbG93J3MgZnVuY3Rpb25hbGl0eS4gQWN0cyBhcyBhIFwic3VidGl0bGVcIiB0byB0aGVcbiAgICogV29ya2Zsb3dFbnRpdHkncyBgZGVzY3JpcHRpb25gIHByb3BlcnR5LlxuICAgKi9cbiAgaW5mb1RleHQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERldGVybWluZSB3aGV0aGVyIG9yIG5vdCB0byBlbmFibGUgd29ya2Zsb3cgZm9yIGNvbm5lY3RlZCB1c2VyXG4gICAqICBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGVmYXVsdEVuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IHRoZSB3b3JrZmxvdyBkaXNwbGF5cyBpbiB0aGUgQ29ubmVjdCBQb3J0YWwuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBoaWRkZW4/OiBib29sZWFuO1xuICAvKipcbiAgICogQW4gaW5kZXggdG8gdHJhY2sgdGhlIHBvc2l0aW9uYWwgb3JkZXIgb2YgYSB3b3JrZmxvdyBpbiB0aGUgbGlzdCBvZiBkaXNwbGF5ZWQgd29ya2Zsb3dzLlxuICAgKiBJZiBgb3JkZXJgIGlzIHVuZGVmaW5lZCwgdGhlIHdvcmtmbG93IHdpbGwgYmUgc29ydGVkIGJ5IGl0cyBgY3JlYXRlZEF0YCBwcm9wZXJ0eSAoYWZ0ZXIgdGhvc2VcbiAgICogdGhhdCBhcmUgc29ydGVkIG1hbnVhbGx5IGJ5IGBvcmRlcmAuKVxuICAgKi9cbiAgb3JkZXI/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBJbnB1dHMgdG8gaW50YWtlIHdvcmtmbG93LXNwZWNpZmljIHNldHRpbmdzLCBjb25maWd1cmVkIGluIHRoZSBQb3J0YWwgRWRpdG9yLlxuICAgKi9cbiAgaW5wdXRzOiBTZXJpYWxpemVkQ29ubmVjdElucHV0W107XG5cbiAgLyoqXG4gICAqIENvbmRpdGlvbnMgdG8gZXZhbHVhdGUgcGVybWlzc2lvbiBmb3IgZW5kVXNlciBiYXNlZCBvbiBwZXJzb25hIG1ldGFkYXRhLlxuICAgKi9cbiAgcGVybWlzc2lvbnM/OiBPckNvbmRpdGlvbnM7XG59O1xuXG4vLyBkeW5hbWljIE1hcHBpbmdzXG5leHBvcnQgdHlwZSBEeW5hbWljTWFwcGluZ0ZpZWxkID0ge1xuICBsYWJlbDogc3RyaW5nO1xuICB2YWx1ZTogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgRHluYW1pY01hcHBpbmdPcHRpb25zID0ge1xuICBmaWVsZHM6IER5bmFtaWNNYXBwaW5nRmllbGRbXTtcbiAgdXNlckNhblJlbW92ZU1hcHBpbmdzPzogYm9vbGVhbjtcbiAgdXNlckNhbkNyZWF0ZUZpZWxkcz86IGJvb2xlYW47XG4gIGRlZmF1bHRGaWVsZHM/OiBzdHJpbmdbXTtcbn07XG5cbmV4cG9ydCB0eXBlIEF1dGhlbnRpY2F0ZWRDb25uZWN0VXNlciA9IHtcbiAgYXV0aGVudGljYXRlZDogdHJ1ZTtcbiAgdG9rZW46IHN0cmluZztcbiAgdXNlcklkOiBzdHJpbmc7XG4gIGludGVncmF0aW9uczogU0RLSW50ZWdyYXRpb25TdGF0ZTtcbiAgbWV0YTogUGVyc29uYU1ldGE7XG59O1xuXG4vKipcbiAqIFRoZSBjb250ZW50cyBvZiB0aGUgYGludGVncmF0aW9uc2AgZmllbGQgZm9yIGFuIGF1dGhlbnRpY2F0ZWQgQ29ubmVjdFVzZXIuXG4gKlxuICogVGhlIGZpZWxkcyBmcm9tIGBDb25uZWN0Q3JlZGVudGlhbENvbmZpZ2AgYXJlIHN0b3JlZDsgYWxsIG90aGVyIGZpZWxkcyBhcmUgY29tcHV0ZWQgZnJvbSBvdGhlclxuICogYXZhaWxhYmxlIGVudGl0aWVzLlxuICovXG50eXBlIFNES0ludGVncmF0aW9uU3RhdGUgPSBQYXJ0aWFsPFxuICBSZWNvcmQ8XG4gICAgc3RyaW5nLFxuICAgIHtcbiAgICAgIGVuYWJsZWQ6IGJvb2xlYW47XG4gICAgICBjcmVkZW50aWFsSWQ/OiBzdHJpbmc7XG4gICAgICBjcmVkZW50aWFsU3RhdHVzPzogQ3JlZGVudGlhbFN0YXR1cztcbiAgICAgIHByb3ZpZGVySWQ/OiBzdHJpbmc7XG4gICAgICBwcm92aWRlckRhdGE/OiBDb25uZWN0Q3JlZGVudGlhbFByb3ZpZGVyRGF0YTtcbiAgICB9ICYgQ29ubmVjdENyZWRlbnRpYWxDb25maWdcbiAgPlxuPjtcblxuZXhwb3J0IHR5cGUgSUNvbm5lY3RVc2VyID0gT21pdDxBdXRoZW50aWNhdGVkQ29ubmVjdFVzZXIsICd0b2tlbic+O1xuZXhwb3J0IGNvbnN0IElORkVSX0NPTlRFTlRfVFlQRV9GUk9NX0NPTk5FQ1RfT1BUSU9OUyA9ICdhdXRvJztcbiIsImltcG9ydCB7IElQdWJsaXNoZWRDdXN0b21JbnRlZ3JhdGlvbiB9IGZyb20gJy4uL2VudGl0aWVzL2N1c3RvbUludGVncmF0aW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJQ29ubmVjdEludGVncmF0aW9uV2l0aENyZWRlbnRpYWxJbmZvIH0gZnJvbSAnLi4vZW50aXRpZXMvaW50ZWdyYXRpb24uaW50ZXJmYWNlJztcblxuaW1wb3J0IHsgTW9kYWxDb25maWcgfSBmcm9tICcuL2Nvbm5lY3QnO1xuaW1wb3J0IHsgSW5zdGFsbE9wdGlvbnMsIE1vZGFsVmlldyB9IGZyb20gJy4vc2RrJztcblxuZXhwb3J0IHR5cGUgUHJvcHMgPSB7XG4gIGludGVncmF0aW9uOiBJQ29ubmVjdEludGVncmF0aW9uV2l0aENyZWRlbnRpYWxJbmZvIHwgbnVsbDtcbiAgY3VzdG9tSW50ZWdyYXRpb24/OiBJUHVibGlzaGVkQ3VzdG9tSW50ZWdyYXRpb247XG4gIGNvbmZpZz86IE1vZGFsQ29uZmlnO1xuICBjb250ZW50U3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzO1xuICBvdmVybGF5U3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzO1xuICBwb3B1cFByb3BzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgaGlkZUNyb3NzPzogYm9vbGVhbjtcbiAgdGFiVmlldz86IE1vZGFsVmlldztcbiAgaXNQcmV2aWV3TW9kZT86IGJvb2xlYW47XG4gIG9uQmVmb3JlRW5hYmxlSW50ZWdyYXRpb24/OiAoKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbiAgb25DbG9zZT86ICgpID0+IHZvaWQ7XG4gIG9uT3Blbj86ICgpID0+IHZvaWQ7XG4gIG9uVGFiVmlld0NoYW5nZT86ICh2aWV3OiBNb2RhbFZpZXcpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiB0aGlzIGZsYWcgaXMgZm9yIGNvbnRyb2xsaW5nIHRoZSBlbmFibGluZyBiZWhhdmlvciBmcm9tIG91dHNpZGUgdGhpcyBjb21wb25lbnQuXG4gICAqIEl0IGlzIGN1cnJlbnRseSB1c2VkIGluIEJZTyB0byBzaG93IGlucHV0IHNldHRpbmdzIHdoaWxlIGFkZGluZyB0aGVtIGxpdmVcbiAgICovXG4gIHByZXZpZXdTZXR0aW5ncz86IHtcbiAgICBpc0VuYWJsaW5nOiBib29sZWFuO1xuICB9O1xuICBhcGlJbnN0YWxsYXRpb25PcHRpb25zPzogSW5zdGFsbE9wdGlvbnM7XG59O1xuIiwiZXhwb3J0IGVudW0gTk9ERV9FTlYge1xuICBQUk9EVUNUSU9OID0gJ3Byb2R1Y3Rpb24nLFxuICBERVZFTE9QTUVOVCA9ICdkZXZlbG9wbWVudCcsXG4gIFRFU1QgPSAndGVzdCcsXG59XG5cbmV4cG9ydCBlbnVtIFBMQVRGT1JNX0VOViB7XG4gIFBST0RVQ1RJT04gPSAncHJvZHVjdGlvbicsXG4gIFBST0RVQ1RJT05fTUlSUk9SXzEgPSAncC1tMScsXG4gIFNUQUdJTkcgPSAnc3RhZ2luZycsXG4gIFNUQUdJTkdfTUlSUk9SXzEgPSAncy1tMScsXG4gIERFVkVMT1BNRU5UID0gJ2RldicsXG4gIFRFU1QgPSAndGVzdCcsXG4gIFNBTkRCT1ggPSAnc2FuZGJveCcsXG4gIFJFTEVBU0UgPSAncmVsZWFzZScsXG4gIEVOVEVSUFJJU0UgPSAnZW50ZXJwcmlzZScsXG59XG4iLCJleHBvcnQgdHlwZSBGYW5vdXRTdGFja0VudHJ5ID0ge1xuICBzdGVwSWQ6IHN0cmluZztcbiAgaW5zdGFuY2VJZDogc3RyaW5nO1xuICBpbmRleDogbnVtYmVyO1xufTtcbiIsImV4cG9ydCAqIGZyb20gJy4vYWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vYmlsbGluZyc7XG5leHBvcnQgKiBmcm9tICcuL2Nvbm5lY3QnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25uZWN0TW9kYWwnO1xuZXhwb3J0ICogZnJvbSAnLi9lbnZpcm9ubWVudCc7XG5leHBvcnQgKiBmcm9tICcuL2V4ZWN1dGlvbic7XG5leHBvcnQgKiBmcm9tICcuL29hdXRoJztcbmV4cG9ydCAqIGZyb20gJy4vcmVzb2x2ZXJzJztcbmV4cG9ydCAqIGZyb20gJy4vc2RrJztcbmV4cG9ydCAqIGZyb20gJy4vc3RyaXBlJztcbiIsImltcG9ydCB7IEF1dGhlbnRpY2F0aW9uU2NoZW1lIH0gZnJvbSAnLi4vZW50aXRpZXMvY3JlZGVudGlhbC5pbnRlcmZhY2UnO1xuXG5pbXBvcnQgeyBJbnRlZ3JhdGlvbkNvbm5lY3RJbnB1dCwgU2lkZWJhcklucHV0VHlwZSB9IGZyb20gJy4vYWN0aW9uJztcblxuZXhwb3J0IGNvbnN0IGF1dGhTY2hlbWFSZXF1aXJlZElucHV0czogUmVjb3JkPEF1dGhlbnRpY2F0aW9uU2NoZW1lLCBJbnRlZ3JhdGlvbkNvbm5lY3RJbnB1dFtdPiA9IHtcbiAgW0F1dGhlbnRpY2F0aW9uU2NoZW1lLkJBU0lDXTogW10sXG4gIFtBdXRoZW50aWNhdGlvblNjaGVtZS5JTVBFUlNPTkFURURfQVBQXTogW10sXG4gIFtBdXRoZW50aWNhdGlvblNjaGVtZS5PQVVUSF06IFtdLFxuICBbQXV0aGVudGljYXRpb25TY2hlbWUuT0FVVEhfQVBQXTogW10sXG4gIFtBdXRoZW50aWNhdGlvblNjaGVtZS5TRVJWSUNFX0FDQ09VTlRdOiBbXSxcbiAgW0F1dGhlbnRpY2F0aW9uU2NoZW1lLk9BVVRIX0NMSUVOVF9DUkVERU5USUFMXTogW1xuICAgIHtcbiAgICAgIGlkOiAnY2xpZW50SWQnLFxuICAgICAgdGl0bGU6ICdDbGllbnQgSUQnLFxuICAgICAgdHlwZTogU2lkZWJhcklucHV0VHlwZS5WYWx1ZVRleHQsXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiAnY2xpZW50U2VjcmV0JyxcbiAgICAgIHRpdGxlOiAnQ2xpZW50IFNlY3JldCcsXG4gICAgICB0eXBlOiBTaWRlYmFySW5wdXRUeXBlLlZhbHVlVGV4dCxcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgIH0sXG4gIF0sXG59OyIsImltcG9ydCB7IFRva2VuVHlwZSB9IGZyb20gJy4vYWN0aW9uJztcbmltcG9ydCB7IEZhbm91dFN0YWNrRW50cnkgfSBmcm9tICcuL2V4ZWN1dGlvbic7XG5cbmV4cG9ydCBlbnVtIERhdGFUeXBlIHtcbiAgU1RSSU5HID0gJ1NUUklORycsXG4gIE5VTUJFUiA9ICdOVU1CRVInLFxuICBEQVRFID0gJ0RBVEUnLFxuICBCT09MRUFOID0gJ0JPT0xFQU4nLFxuICBFTUFJTCA9ICdFTUFJTCcsXG4gIE9CSkVDVCA9ICdPQkpFQ1QnLFxuICBBUlJBWSA9ICdBUlJBWScsXG4gIEFOWSA9ICdBTlknLFxuICBGSUxFID0gJ0ZJTEUnLFxuICBOT05fREVDSU1BTCA9ICdOT05fREVDSU1BTCcsXG59XG5cbmV4cG9ydCB0eXBlIFRva2VuaXplZFNvdXJjZTxUIGV4dGVuZHMgRGF0YVR5cGUgPSBEYXRhVHlwZT4gPSB7XG4gIGRhdGFUeXBlPzogVDtcbiAgdHlwZTogJ1RPS0VOSVpFRCc7XG4gIHBhcnRzOiBUb2tlbml6ZWRWYWx1ZVtdO1xufTtcblxudHlwZSBUb2tlbml6ZWRWYWx1ZTxUIGV4dGVuZHMgRGF0YVR5cGUgPSBEYXRhVHlwZT4gPVxuICB8IFZhbHVlU291cmNlPFQ+XG4gIHwgVmFyaWFibGVTb3VyY2U8VD5cbiAgfCBTZWNyZXRTb3VyY2VcbiAgfCBDb25uZWN0Q3JlZGVudGlhbFNvdXJjZVxuICB8IE9iamVjdFZhbHVlU291cmNlXG4gIHwgUGVyc29uYU1ldGFkYXRhU291cmNlO1xuXG50eXBlIE9iamVjdFZhbHVlU291cmNlPFQgZXh0ZW5kcyBEYXRhVHlwZSA9IERhdGFUeXBlPiA9IHtcbiAgdHlwZTogJ09CSkVDVF9WQUxVRSc7XG4gIG5hbWU6IHN0cmluZztcbiAgcGF0aDogc3RyaW5nW107XG4gIGRhdGFUeXBlPzogVDtcbn07XG5cbnR5cGUgVmFyaWFibGVTb3VyY2U8VCBleHRlbmRzIERhdGFUeXBlID0gRGF0YVR5cGU+ID0ge1xuICBkYXRhVHlwZT86IFQ7XG4gIHR5cGU6ICdWQVJJQUJMRSc7XG4gIHN0ZXBJZDogc3RyaW5nO1xuICBwYXRoOiBzdHJpbmdbXTtcbn07XG5cbnR5cGUgU2VjcmV0U291cmNlID0ge1xuICB0eXBlOiAnRU5WSVJPTk1FTlRfU0VDUkVUJztcbiAgZW52aXJvbm1lbnRTZWNyZXRJZDogc3RyaW5nO1xufTtcblxudHlwZSBWYWx1ZVNvdXJjZTxUIGV4dGVuZHMgRGF0YVR5cGUgPSBEYXRhVHlwZT4gPSB7XG4gIGRhdGFUeXBlPzogVDtcbiAgdHlwZTogJ1ZBTFVFJztcbiAgdmFsdWU6IERhdGFUeXBlVmFsdWVzW1RdO1xufTtcblxudHlwZSBDb25uZWN0Q3JlZGVudGlhbFNvdXJjZSA9XG4gIHwge1xuICAgICAgdHlwZTogJ0NPTk5FQ1RfQ1JFREVOVElBTF9GSUVMRCc7XG4gICAgICBmaWVsZFR5cGU6ICdXT1JLRkxPV19TRVRUSU5HJztcbiAgICAgIGlucHV0SWQ6IHN0cmluZztcbiAgICAgIC8qKlxuICAgICAgICogQHNpbmNlIFBBUkEtMzA2NTogQ29ubmVjdElucHV0VmFsdWUgY2FuIG5vdyBpbmNsdWRlIG1vcmUgdGhhbiBhIHN0cmluZy9udW1iZXIgdHlwZSwgc28gYVxuICAgICAgICogcGF0aCBpcyBzcGVjaWZpZWQgc2ltaWxhcmx5IHRvIFZhcmlhYmxlU291cmNlIHRvIHRyYXZlcnNlIG9iamVjdCB0eXBlcy5cbiAgICAgICAqL1xuICAgICAgcGF0aD86IHN0cmluZ1tdO1xuICAgIH1cbiAgfCB7XG4gICAgICB0eXBlOiAnQ09OTkVDVF9DUkVERU5USUFMX0ZJRUxEJztcbiAgICAgIGZpZWxkVHlwZTogJ1NIQVJFRF9XT1JLRkxPV19TRVRUSU5HJztcbiAgICAgIGlucHV0SWQ6IHN0cmluZztcbiAgICAgIHBhdGg/OiBzdHJpbmdbXTtcbiAgICB9XG4gIHwge1xuICAgICAgdHlwZTogJ0NPTk5FQ1RfQ1JFREVOVElBTF9GSUVMRCc7XG4gICAgICBmaWVsZFR5cGU6ICdFWFRFUk5BTF9VU0VSX0lEJztcbiAgICB9XG4gIHwge1xuICAgICAgdHlwZTogJ0NPTk5FQ1RfQ1JFREVOVElBTF9GSUVMRCc7XG4gICAgICBmaWVsZFR5cGU6ICdFWFRFUk5BTF9VU0VSX1BST1ZJREVSX0lEJztcbiAgICB9XG4gIHwge1xuICAgICAgdHlwZTogJ0NPTk5FQ1RfQ1JFREVOVElBTF9GSUVMRCc7XG4gICAgICBmaWVsZFR5cGU6ICdPQVVUSF9BQ0NFU1NfVE9LRU4nO1xuICAgIH1cbiAgfCB7XG4gICAgICB0eXBlOiAnQ09OTkVDVF9DUkVERU5USUFMX0ZJRUxEJztcbiAgICAgIGZpZWxkVHlwZTogJ0VYVEVSTkFMX1VTRVJfUFJPVklERVJfREFUQSc7XG4gICAgICBkYXRhS2V5OiBzdHJpbmc7XG4gICAgfTtcblxudHlwZSBQZXJzb25hTWV0YWRhdGFTb3VyY2UgPSB7XG4gIHR5cGU6ICdQRVJTT05BX01FVEFEQVRBJztcbiAgcGF0aD86IHN0cmluZ1tdO1xufTtcblxudHlwZSBEYXRhVHlwZVZhbHVlcyA9IHtcbiAgW0RhdGFUeXBlLlNUUklOR106IHN0cmluZztcbiAgW0RhdGFUeXBlLk5VTUJFUl06IG51bWJlcjtcbiAgW0RhdGFUeXBlLkRBVEVdOiBEYXRlO1xuICBbRGF0YVR5cGUuQk9PTEVBTl06IGJvb2xlYW47XG4gIFtEYXRhVHlwZS5FTUFJTF06IHN0cmluZztcbiAgW0RhdGFUeXBlLk9CSkVDVF06IG9iamVjdDtcbiAgW0RhdGFUeXBlLkFSUkFZXTogYW55W107XG4gIFtEYXRhVHlwZS5BTlldOiBhbnk7XG4gIFtEYXRhVHlwZS5GSUxFXTogRmlsZVZhbHVlO1xuICBbRGF0YVR5cGUuTk9OX0RFQ0lNQUxdOiBudW1iZXI7XG59O1xuXG50eXBlIEZpbGVEYXRhVHlwZSA9IEJ1ZmZlcjtcblxudHlwZSBGaWxlVmFsdWUgPSB7XG4gIGRhdGE6IEZpbGVEYXRhVHlwZTtcbiAgZGF0YVR5cGU6IERhdGFUeXBlLkZJTEU7XG4gIGVuY29kaW5nPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbiAgbWltZVR5cGU/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHNpemU/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBLZXllZFNvdXJjZTxUIGV4dGVuZHMgRGF0YVR5cGUgPSBEYXRhVHlwZT4gPSB7XG4gIGtleTogc3RyaW5nO1xuICBzb3VyY2U6IFNvdXJjZTxUPjtcbn07XG5cbmV4cG9ydCB0eXBlIFNvdXJjZTxUIGV4dGVuZHMgRGF0YVR5cGUgPSBEYXRhVHlwZT4gPVxuICB8IFZhbHVlU291cmNlPFQ+XG4gIHwgVmFyaWFibGVTb3VyY2U8VD5cbiAgfCBUb2tlbml6ZWRTb3VyY2U8VD5cbiAgfCBDb25kaXRpb25Tb3VyY2VcbiAgfCBTZWNyZXRTb3VyY2VcbiAgfCBFeGVjdXRpb25Tb3VyY2VcbiAgfCBGYW5vdXRFeGVjdXRpb25Tb3VyY2VcbiAgfCBVc2VyU3VwcGxpZWRDcmVkZW50aWFsU291cmNlXG4gIHwgQ29ubmVjdENyZWRlbnRpYWxTb3VyY2VcbiAgfCBPYmplY3RWYWx1ZVNvdXJjZVxuICB8IFBlcnNvbmFNZXRhZGF0YVNvdXJjZTtcblxudHlwZSBDb25kaXRpb25Tb3VyY2UgPSB7XG4gIHR5cGU6ICdDT05ESVRJT04nO1xuICBjb25kaXRpb246IENvbmRpdGlvbldyYXBwZXI7XG59O1xuXG50eXBlIENvbmRpdGlvbldyYXBwZXIgPSBKb2luZWRDb25kaXRpb25zIHwgT3BlcmF0b3JDb25kaXRpb247XG50eXBlIEpvaW5lZENvbmRpdGlvbnMgPSBBbmRDb25kaXRpb25zIHwgT3JDb25kaXRpb25zO1xudHlwZSBBbmRDb25kaXRpb25zID0ge1xuICB0eXBlOiAnSk9JTic7XG4gIGpvaW46ICdBTkQnO1xuICBjb25kaXRpb25zOiBDb25kaXRpb25XcmFwcGVyW107XG59O1xuXG5leHBvcnQgdHlwZSBPckNvbmRpdGlvbnMgPSB7XG4gIHR5cGU6ICdKT0lOJztcbiAgam9pbjogJ09SJztcbiAgY29uZGl0aW9uczogQ29uZGl0aW9uV3JhcHBlcltdO1xufTtcblxudHlwZSBPcGVyYXRvckNvbmRpdGlvbiA9IHtcbiAgdHlwZTogJ09QRVJBVE9SJztcbiAgY29uZGl0aW9uOiBDb25kaXRpb247XG59O1xuXG50eXBlIENvbmRpdGlvbiA9XG4gIHwge1xuICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLk5vbmU7XG4gICAgICB2YXJpYWJsZTogU291cmNlPERhdGFUeXBlLkFOWT47XG4gICAgfVxuICB8IHtcbiAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5TdHJpbmdDb250YWlucztcbiAgICAgIHZhcmlhYmxlOiBTb3VyY2U8RGF0YVR5cGUuU1RSSU5HPjtcbiAgICAgIGFyZ3VtZW50OiBTb3VyY2U8RGF0YVR5cGUuU1RSSU5HPjtcbiAgICB9XG4gIHwge1xuICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLlN0cmluZ0RvZXNOb3RDb250YWluO1xuICAgICAgdmFyaWFibGU6IFNvdXJjZTxEYXRhVHlwZS5TVFJJTkc+O1xuICAgICAgYXJndW1lbnQ6IFNvdXJjZTxEYXRhVHlwZS5TVFJJTkc+O1xuICAgIH1cbiAgfCB7XG4gICAgICBvcGVyYXRvcjogT3BlcmF0b3IuU3RyaW5nRXhhY3RseU1hdGNoZXM7XG4gICAgICB2YXJpYWJsZTogU291cmNlPERhdGFUeXBlLlNUUklORz47XG4gICAgICBhcmd1bWVudDogU291cmNlPERhdGFUeXBlLlNUUklORz47XG4gICAgfVxuICB8IHtcbiAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5TdHJpbmdEb2VzTm90RXhhY3RseU1hdGNoO1xuICAgICAgdmFyaWFibGU6IFNvdXJjZTxEYXRhVHlwZS5TVFJJTkc+O1xuICAgICAgYXJndW1lbnQ6IFNvdXJjZTxEYXRhVHlwZS5TVFJJTkc+O1xuICAgIH1cbiAgfCB7XG4gICAgICBvcGVyYXRvcjogT3BlcmF0b3IuU3RyaW5nSXNJbjtcbiAgICAgIHZhcmlhYmxlOiBTb3VyY2U8RGF0YVR5cGUuU1RSSU5HPjtcbiAgICAgIGFyZ3VtZW50OiBTb3VyY2U8RGF0YVR5cGUuU1RSSU5HPjtcbiAgICB9XG4gIHwge1xuICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLlN0cmluZ0lzTm90SW47XG4gICAgICB2YXJpYWJsZTogU291cmNlPERhdGFUeXBlLlNUUklORz47XG4gICAgICBhcmd1bWVudDogU291cmNlPERhdGFUeXBlLlNUUklORz47XG4gICAgfVxuICB8IHtcbiAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5TdHJpbmdTdGFydHNXaXRoO1xuICAgICAgdmFyaWFibGU6IFNvdXJjZTxEYXRhVHlwZS5TVFJJTkc+O1xuICAgICAgYXJndW1lbnQ6IFNvdXJjZTxEYXRhVHlwZS5TVFJJTkc+O1xuICAgIH1cbiAgfCB7XG4gICAgICBvcGVyYXRvcjogT3BlcmF0b3IuU3RyaW5nRG9lc05vdFN0YXJ0V2l0aDtcbiAgICAgIHZhcmlhYmxlOiBTb3VyY2U8RGF0YVR5cGUuU1RSSU5HPjtcbiAgICAgIGFyZ3VtZW50OiBTb3VyY2U8RGF0YVR5cGUuU1RSSU5HPjtcbiAgICB9XG4gIHwge1xuICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLlN0cmluZ0VuZHNXaXRoO1xuICAgICAgdmFyaWFibGU6IFNvdXJjZTxEYXRhVHlwZS5TVFJJTkc+O1xuICAgICAgYXJndW1lbnQ6IFNvdXJjZTxEYXRhVHlwZS5TVFJJTkc+O1xuICAgIH1cbiAgfCB7XG4gICAgICBvcGVyYXRvcjogT3BlcmF0b3IuU3RyaW5nRG9lc05vdEVuZFdpdGg7XG4gICAgICB2YXJpYWJsZTogU291cmNlPERhdGFUeXBlLlNUUklORz47XG4gICAgICBhcmd1bWVudDogU291cmNlPERhdGFUeXBlLlNUUklORz47XG4gICAgfVxuICB8IHtcbiAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5OdW1iZXJHcmVhdGVyVGhhbjtcbiAgICAgIHZhcmlhYmxlOiBTb3VyY2U8RGF0YVR5cGUuTlVNQkVSPjtcbiAgICAgIGFyZ3VtZW50OiBTb3VyY2U8RGF0YVR5cGUuTlVNQkVSPjtcbiAgICB9XG4gIHwge1xuICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLk51bWJlckxlc3NUaGFuO1xuICAgICAgdmFyaWFibGU6IFNvdXJjZTxEYXRhVHlwZS5OVU1CRVI+O1xuICAgICAgYXJndW1lbnQ6IFNvdXJjZTxEYXRhVHlwZS5OVU1CRVI+O1xuICAgIH1cbiAgfCB7XG4gICAgICBvcGVyYXRvcjogT3BlcmF0b3IuTnVtYmVyR3JlYXRlclRoYW5PckVxdWFsVG87XG4gICAgICB2YXJpYWJsZTogU291cmNlPERhdGFUeXBlLk5VTUJFUj47XG4gICAgICBhcmd1bWVudDogU291cmNlPERhdGFUeXBlLk5VTUJFUj47XG4gICAgfVxuICB8IHtcbiAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5OdW1iZXJMZXNzVGhhbk9yRXF1YWxUbztcbiAgICAgIHZhcmlhYmxlOiBTb3VyY2U8RGF0YVR5cGUuTlVNQkVSPjtcbiAgICAgIGFyZ3VtZW50OiBTb3VyY2U8RGF0YVR5cGUuTlVNQkVSPjtcbiAgICB9XG4gIHwge1xuICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLk51bWJlckVxdWFscztcbiAgICAgIHZhcmlhYmxlOiBTb3VyY2U8RGF0YVR5cGUuTlVNQkVSPjtcbiAgICAgIGFyZ3VtZW50OiBTb3VyY2U8RGF0YVR5cGUuTlVNQkVSPjtcbiAgICB9XG4gIHwge1xuICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLk51bWJlckRvZXNOb3RFcXVhbDtcbiAgICAgIHZhcmlhYmxlOiBTb3VyY2U8RGF0YVR5cGUuTlVNQkVSPjtcbiAgICAgIGFyZ3VtZW50OiBTb3VyY2U8RGF0YVR5cGUuTlVNQkVSPjtcbiAgICB9XG4gIHwge1xuICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLkRhdGVUaW1lQWZ0ZXI7XG4gICAgICB2YXJpYWJsZTogU291cmNlPERhdGFUeXBlLkRBVEU+O1xuICAgICAgYXJndW1lbnQ6IFNvdXJjZTxEYXRhVHlwZS5EQVRFPjtcbiAgICB9XG4gIHwge1xuICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLkRhdGVUaW1lQmVmb3JlO1xuICAgICAgdmFyaWFibGU6IFNvdXJjZTxEYXRhVHlwZS5EQVRFPjtcbiAgICAgIGFyZ3VtZW50OiBTb3VyY2U8RGF0YVR5cGUuREFURT47XG4gICAgfVxuICB8IHtcbiAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5EYXRlVGltZUVxdWFscztcbiAgICAgIHZhcmlhYmxlOiBTb3VyY2U8RGF0YVR5cGUuREFURT47XG4gICAgICBhcmd1bWVudDogU291cmNlPERhdGFUeXBlLkRBVEU+O1xuICAgIH1cbiAgfCB7XG4gICAgICBvcGVyYXRvcjogT3BlcmF0b3IuQm9vbGVhblRydWU7XG4gICAgICB2YXJpYWJsZTogU291cmNlPERhdGFUeXBlLkJPT0xFQU4+O1xuICAgIH1cbiAgfCB7XG4gICAgICBvcGVyYXRvcjogT3BlcmF0b3IuQm9vbGVhbkZhbHNlO1xuICAgICAgdmFyaWFibGU6IFNvdXJjZTxEYXRhVHlwZS5CT09MRUFOPjtcbiAgICB9XG4gIHwgeyBvcGVyYXRvcjogT3BlcmF0b3IuSXNOdWxsOyB2YXJpYWJsZTogU291cmNlIH1cbiAgfCB7XG4gICAgICBvcGVyYXRvcjogT3BlcmF0b3IuSXNOb3ROdWxsO1xuICAgICAgdmFyaWFibGU6IFNvdXJjZTtcbiAgICB9XG4gIHwgeyBvcGVyYXRvcjogT3BlcmF0b3IuRXhpc3RzOyB2YXJpYWJsZTogU291cmNlIH1cbiAgfCB7XG4gICAgICBvcGVyYXRvcjogT3BlcmF0b3IuRG9lc05vdEV4aXN0O1xuICAgICAgdmFyaWFibGU6IFNvdXJjZTtcbiAgICB9XG4gIHwge1xuICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLkFycmF5SXNFbXB0eTtcbiAgICAgIHZhcmlhYmxlOiBTb3VyY2U8RGF0YVR5cGUuQVJSQVk+O1xuICAgIH1cbiAgfCB7XG4gICAgICBvcGVyYXRvcjogT3BlcmF0b3IuQXJyYXlJc05vdEVtcHR5O1xuICAgICAgdmFyaWFibGU6IFNvdXJjZTxEYXRhVHlwZS5BUlJBWT47XG4gICAgfVxuICB8IHtcbiAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5TdHJpbmdHcmVhdGVyVGhhbjtcbiAgICAgIHZhcmlhYmxlOiBTb3VyY2U8RGF0YVR5cGUuU1RSSU5HPjtcbiAgICAgIGFyZ3VtZW50OiBTb3VyY2U8RGF0YVR5cGUuU1RSSU5HPjtcbiAgICB9XG4gIHwge1xuICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLlN0cmluZ0xlc3NUaGFuO1xuICAgICAgdmFyaWFibGU6IFNvdXJjZTxEYXRhVHlwZS5TVFJJTkc+O1xuICAgICAgYXJndW1lbnQ6IFNvdXJjZTxEYXRhVHlwZS5TVFJJTkc+O1xuICAgIH07XG5cbmVudW0gT3BlcmF0b3Ige1xuICAnTm9uZScgPSAnJG5vbmUnLFxuICAnU3RyaW5nQ29udGFpbnMnID0gJyRzdHJpbmdDb250YWlucycsXG4gICdTdHJpbmdEb2VzTm90Q29udGFpbicgPSAnJHN0cmluZ0RvZXNOb3RDb250YWluJyxcbiAgJ1N0cmluZ0V4YWN0bHlNYXRjaGVzJyA9ICckc3RyaW5nRXhhY3RseU1hdGNoZXMnLFxuICAnU3RyaW5nRG9lc05vdEV4YWN0bHlNYXRjaCcgPSAnJHN0cmluZ0RvZXNOb3RFeGFjdGx5TWF0Y2gnLFxuICAnU3RyaW5nSXNJbicgPSAnJHN0cmluZ0lzSW4nLFxuICAnU3RyaW5nSXNOb3RJbicgPSAnJHN0cmluZ0lzTm90SW4nLFxuICAnU3RyaW5nU3RhcnRzV2l0aCcgPSAnJHN0cmluZ1N0YXJ0c1dpdGgnLFxuICAnU3RyaW5nRG9lc05vdFN0YXJ0V2l0aCcgPSAnJHN0cmluZ0RvZXNOb3RTdGFydFdpdGgnLFxuICAnU3RyaW5nRW5kc1dpdGgnID0gJyRzdHJpbmdFbmRzV2l0aCcsXG4gICdTdHJpbmdEb2VzTm90RW5kV2l0aCcgPSAnJHN0cmluZ0RvZXNOb3RFbmRXaXRoJyxcbiAgJ051bWJlckdyZWF0ZXJUaGFuJyA9ICckbnVtYmVyR3JlYXRlclRoYW4nLFxuICAnTnVtYmVyTGVzc1RoYW4nID0gJyRudW1iZXJMZXNzVGhhbicsXG4gICdOdW1iZXJFcXVhbHMnID0gJyRudW1iZXJFcXVhbHMnLFxuICAnTnVtYmVyRG9lc05vdEVxdWFsJyA9ICckbnVtYmVyRG9lc05vdEVxdWFsJyxcbiAgJ051bWJlckxlc3NUaGFuT3JFcXVhbFRvJyA9ICckbnVtYmVyTGVzc1RoYW5PckVxdWFsVG8nLFxuICAnTnVtYmVyR3JlYXRlclRoYW5PckVxdWFsVG8nID0gJyRudW1iZXJHcmVhdGVyVGhhbk9yRXF1YWxUbycsXG4gICdEYXRlVGltZUFmdGVyJyA9ICckZGF0ZVRpbWVBZnRlcicsXG4gICdEYXRlVGltZUJlZm9yZScgPSAnJGRhdGVUaW1lQmVmb3JlJyxcbiAgJ0RhdGVUaW1lRXF1YWxzJyA9ICckZGF0ZVRpbWVFcXVhbHMnLFxuICAnQm9vbGVhblRydWUnID0gJyRib29sZWFuVHJ1ZScsXG4gICdCb29sZWFuRmFsc2UnID0gJyRib29sZWFuRmFsc2UnLFxuICAvKiogKFBBUkEtNTU1MSkgcHJldmlvdXNseSBvcGVyYXRvcnMgZm9yIERvZXMgRXhpc3QgLyBEb2VzIE5vdCBFeGlzdCBkbyBhIHN0cmljdCBjaGVjayBmb3IgZXF1YWxpdHkgdG8gbnVsbCwgcmVzdWx0aW5nIGluIGEgYnVnIHdoZXJlIHZhbHVlIGlzIHVuZGVmaW5lZFxuICAgKiB0byBoYW5kbGUgdGhpcyBzaXR1YXRpb24sIHdlIGFyZSBhZGRpbmcgMiBuZXcgb3BlcmF0b3JzIElzTm90TnVsbCBhbmQgSXNOdWxsIGFuZCBjaGFuZ2luZyBmdW5jdGlvbmFsaXR5IG9mXG4gICAqIEV4aXN0IGFuZCBEb2VzTm90RXhpc3Qgb3BlcmF0b3JzIHRvIGhhbmRsZSB1bmRlZmluZWQgdmFsdWVzXG4gICAqL1xuICAnSXNOb3ROdWxsJyA9ICckZXhpc3RzJyxcbiAgJ0lzTnVsbCcgPSAnJGRvZXNOb3RFeGlzdCcsXG4gICdFeGlzdHMnID0gJyRpc05vdFVuZGVmaW5lZE9yTnVsbCcsXG4gICdEb2VzTm90RXhpc3QnID0gJyRpc1VuZGVmaW5lZE9yTnVsbCcsXG4gICdBcnJheUlzSW4nID0gJyRhcnJheUlzSW4nLFxuICAnQXJyYXlJc05vdEluJyA9ICckYXJyYXlJc05vdEluJyxcbiAgJ0FycmF5SXNFbXB0eScgPSAnJGFycmF5SXNFbXB0eScsXG4gICdBcnJheUlzTm90RW1wdHknID0gJyRhcnJheUlzTm90RW1wdHknLFxuICAnU3RyaW5nR3JlYXRlclRoYW4nID0gJyRzdHJpbmdHcmVhdGVyVGhhbicsXG4gICdTdHJpbmdMZXNzVGhhbicgPSAnJHN0cmluZ0xlc3NUaGFuJyxcbn1cblxudHlwZSBFeGVjdXRpb25Tb3VyY2UgPSB7XG4gIHR5cGU6ICdFWEVDVVRJT04nO1xuICBpZDogc3RyaW5nOyAvLyBzdGVwIGV4ZWN1dGlvbiBpZCAoaW5zdGFuY2UpXG4gIHN0ZXBJZDogc3RyaW5nOyAvLyB0aGUgYmFzZSBzdGVwIGlkXG5cbiAgLyoqXG4gICAqIGEgdGltZXN0YW1wIHJlcHJlc2VudGluZyB3aGVuIHRoZSBleGVjdXRpb24gb2NjdXJyZWRcbiAgICovXG4gIHN0YXJ0OiBudW1iZXI7XG4gIGZhbm91dFN0YWNrOiBGYW5vdXRTdGFja0VudHJ5W107XG5cbiAgLyoqXG4gICAqIFRoaXMgZmxhZyBzdWdnZXN0cyB0aGF0IHRoZSBjb250ZW50IG9mIHRoZSB2YXJpYWJsZSB3aWxsIGJlIHN0b3JlZCBvbiByZW1tb3RlIHN0b3JhZ2Ugc2VydmljZVxuICAgKiBzdWNoIGFzIHMzXG4gICAqL1xuICByZW1vdGVDYWNoZWQ/OiBib29sZWFuO1xufTtcblxuLy8gZXhlY3V0aW9ucyB3aXRoaW4gZmFub3V0cyBhcmUgcmVwcmVzZW50ZWQgYnkgYSBgRmFub3V0RXhlY3V0aW9uU291cmNlYFxuLy8gaW4gcmVkaXMsIHRoZXNlIGFyZSBzdG9yZWQgYXMgYSBsaXN0IG9mIGBFeGVjdXRpb25Tb3VyY2VgIHR5cGVzXG4vLyB0aGUgYEZhbm91dEV4ZWN1dGlvblNvdXJjZWAgaXMgdXNlZCB0byByZXRyaWV2ZSB0aGlzIGxpc3Rcbi8vIGFuZCBhIHJlc29sdmVyIGRldGVybWluZXMgd2hpY2ggb2YgdGhlIGV4ZWN1dGlvbnMgc2hvdWxkIGJlIHBhc3NlZCBhcyB2YXJpYWJsZXNcbi8vIGRlcGVuZGluZyBvbiB0aGUgY29udGV4dCB0aGF0IHRoZSBleGVjdXRpbmcgc3RlcCBpcyBpblxudHlwZSBGYW5vdXRFeGVjdXRpb25Tb3VyY2UgPSB7XG4gIHR5cGU6ICdGQU5PVVRfRVhFQ1VUSU9OJztcbiAgc3RlcElkOiBzdHJpbmc7IC8vIHN0ZXAgaWQgb2YgdGhlIGV4ZWN1dGlvbiwgTk9UIHRoZSBmYW5vdXRcbn07XG5cbnR5cGUgVXNlclN1cHBsaWVkQ3JlZGVudGlhbFNvdXJjZSA9IHtcbiAgdHlwZTogJ1VTRVJfU1VQUExJRURfQ1JFREVOVElBTCc7XG4gIHRva2VuVHlwZTogVG9rZW5UeXBlO1xuICBwcm92aWRlclR5cGU6IHN0cmluZztcbiAgY3JlZGVudGlhbDogVG9rZW5pemVkU291cmNlPERhdGFUeXBlLlNUUklORz47XG59O1xuIiwiaW1wb3J0IENvbm5lY3RTREsgZnJvbSAnLi4vQ29ubmVjdFNESyc7XG5pbXBvcnQgeyBPYXV0aENhbGxiYWNrUmVzcG9uc2UgfSBmcm9tICcuLi9lbnRpdGllcy9jcmVkZW50aWFsLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJSW50ZWdyYXRpb25NZXRhZGF0YSB9IGZyb20gJy4uL2VudGl0aWVzL2ludGVncmF0aW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQZXJzb25hTWV0YSB9IGZyb20gJy4uL2VudGl0aWVzL3BlcnNvbmEuaW50ZXJmYWNlJztcbmltcG9ydCB7IElDb25uZWN0VXNlckNvbnRleHQgfSBmcm9tICcuLi9oZWxwZXJzL0Nvbm5lY3RVc2VyQ29udGV4dCc7XG5pbXBvcnQge1xuICBBdXRoZW50aWNhdGVkQ29ubmVjdFVzZXIsXG4gIER5bmFtaWNNYXBwaW5nRmllbGQsXG4gIER5bmFtaWNNYXBwaW5nT3B0aW9ucyxcbiAgSW50ZWdyYXRpb25Xb3JrZmxvd1N0YXRlLFxufSBmcm9tICcuLi90eXBlcy9jb25uZWN0JztcblxuaW1wb3J0IHsgUHJvcHMgYXMgQ29ubmVjdE1vZGFsUHJvcHMgfSBmcm9tICcuL2Nvbm5lY3RNb2RhbCc7XG5cbmV4cG9ydCB0eXBlIENvbm5lY3RVc2VyID0geyBhdXRoZW50aWNhdGVkOiBmYWxzZSB9IHwgQXV0aGVudGljYXRlZENvbm5lY3RVc2VyO1xuXG5leHBvcnQgdHlwZSBGdW5jdGlvblByb3BlcnR5TmFtZXM8VD4gPSB7XG4gIFtLIGluIGtleW9mIFRdOiBUW0tdIGV4dGVuZHMgRnVuY3Rpb24gPyBLIDogbmV2ZXI7XG59W2tleW9mIFRdO1xudHlwZSBOb25GdW5jdGlvblByb3BlcnR5TmFtZXM8VD4gPSB7XG4gIFtLIGluIGtleW9mIFRdOiBUW0tdIGV4dGVuZHMgRnVuY3Rpb24gPyBuZXZlciA6IEs7XG59W2tleW9mIFRdO1xuZXhwb3J0IHR5cGUgTm9uRnVuY3Rpb25Qcm9wZXJ0aWVzPFQ+ID0gUGljazxULCBOb25GdW5jdGlvblByb3BlcnR5TmFtZXM8VD4+O1xuZXhwb3J0IHR5cGUgVW53cmFwUHJvbWlzZTxUPiA9IFQgZXh0ZW5kcyBQcm9taXNlTGlrZTxpbmZlciBVPiA/IFUgOiBUO1xuXG5leHBvcnQgdHlwZSBOb25OdWxsVW5kZWZpbmVkRmllbGQ8VD4gPSB7XG4gIFtQIGluIGtleW9mIFRdLT86IE5vbk51bGxVbmRlZmluZWRGaWVsZDxOb25OdWxsYWJsZTxUW1BdPj47XG59O1xuXG5leHBvcnQgdHlwZSBVSVVwZGF0ZU1lc3NhZ2UgPSB7XG4gIG1lc3NhZ2VUeXBlOiAnVUlfVVBEQVRFJztcbiAgbmV4dENvbnRleHQ6IE5vbkZ1bmN0aW9uUHJvcGVydGllczxJQ29ubmVjdFVzZXJDb250ZXh0PjtcbiAgbmV4dE1vZGFsU3RhdGU6IE5vbkZ1bmN0aW9uUHJvcGVydGllczxDb25uZWN0TW9kYWxQcm9wcz47XG59O1xuXG5leHBvcnQgdHlwZSBTREtGdW5jdGlvbkludm9jYXRpb25NZXNzYWdlPFQgZXh0ZW5kcyBGdW5jdGlvblByb3BlcnR5TmFtZXM8Q29ubmVjdFNESz4gPSBuZXZlcj4gPSB7XG4gIG1lc3NhZ2VUeXBlOiAnU0RLX0ZVTkNUSU9OX0lOVk9DQVRJT04nO1xuICB0eXBlOiBUO1xuICBwYXJhbWV0ZXJzOiBQYXJhbWV0ZXJzPENvbm5lY3RTREtbVF0+O1xuICBpZDogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgU0RLRnVuY3Rpb25SZXNwb25zZU1lc3NhZ2U8VCBleHRlbmRzIEZ1bmN0aW9uUHJvcGVydHlOYW1lczxDb25uZWN0U0RLPiA9IG5ldmVyPiA9IHtcbiAgbWVzc2FnZVR5cGU6ICdTREtfRlVOQ1RJT05fUkVTUE9OU0UnO1xuICB0eXBlOiBUO1xuICByZXN1bHQ6IFVud3JhcFByb21pc2U8UmV0dXJuVHlwZTxDb25uZWN0U0RLW1RdPj47XG4gIGlkOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBTREtGdW5jdGlvbkVycm9yTWVzc2FnZSA9IHtcbiAgbWVzc2FnZVR5cGU6ICdTREtfRlVOQ1RJT05fRVJST1InO1xuICBlcnJvcjogdHJ1ZTtcbiAgbWVzc2FnZTogc3RyaW5nO1xuICBpZDogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgU0RLUmVjZWl2ZWRNZXNzYWdlID0gU0RLRnVuY3Rpb25JbnZvY2F0aW9uTWVzc2FnZTtcblxuZXhwb3J0IGludGVyZmFjZSBJQ29ubmVjdFNESyB7XG4gIGF1dGhlbnRpY2F0ZShwcm9qZWN0SWQ6IHN0cmluZywgdG9rZW46IHN0cmluZywgb3B0aW9ucz86IEF1dGhlbnRpY2F0ZU9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+O1xuICBjb25uZWN0KGFjdGlvbjogc3RyaW5nLCBvcHRpb25zOiBDb25uZWN0UGFyYW1zKTogdm9pZDtcbiAgZ2V0VXNlcigpOiBDb25uZWN0VXNlcjtcbiAgLyoqXG4gICAqICoqRG8gbm90IGNhbGwgdGhpcyBmdW5jdGlvbiBkaXJlY3RseS4qKlxuICAgKlxuICAgKiBJbnZva2VkIGJ5IHRoZSBPQXV0aCBwb3B1cCBhZnRlciBmaW5pc2hpbmcgdGhlIGNyZWRlbnRpYWwgZXhjaGFuZ2UuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfb2F1dGhDYWxsYmFjayhjcmVkZW50aWFsOiBPYXV0aENhbGxiYWNrUmVzcG9uc2UpOiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiAqKkRvIG5vdCBjYWxsIHRoaXMgZnVuY3Rpb24gZGlyZWN0bHkuKipcbiAgICpcbiAgICogSW52b2tlZCBieSB0aGUgT0F1dGggcG9wdXAgb24gYW4gZXJyb3IgZW5jb3VudGVyZWQgZHVyaW5nIHRoZSBjcmVkZW50aWFsIGV4Y2hhbmdlLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX29hdXRoRXJyb3JDYWxsYmFjayhlcnJvck1lc3NhZ2U6IHN0cmluZyk6IFByb21pc2U8dm9pZD47XG5cbiAgLyoqXG4gICAqIGluc3RhbGxzIGFuIGludGVncmF0aW9uIHdpdGhvdXQgdGhlIG5lZWQgdG8gY2xpY2sgb24gZW5hYmxlIGJ1dHRvbiBmcm9tIHBvcnRhbFxuICAgKiBJbnN0YWxsIE9wdGlvbnM6XG4gICAqIGB7c2hvd1BvcnRhbEFmdGVySW5zdGFsbDogYm9vbGVhbn1gIGRlY2lkZXMgd2V0aGVyIHRvIHNob3cgcG9ydGFsIHdpdGggY29uZmlndXJhdGlvbiB2aWV3IGFmdGVyIHRoZSBpbnN0YWxsYXRpb24gaXMgY29tcGxldGVkXG4gICAqL1xuICBpbnN0YWxsSW50ZWdyYXRpb24oXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIG9wdGlvbnM6IFBhcnRpYWw8T21pdDxJbnN0YWxsT3B0aW9ucywgJ2lzQXBpSW5zdGFsbGF0aW9uJz4+LFxuICApOiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiB1bmluc3RhbGxzIGFuIGludGVncmF0aW9uIGZvciBjb25uZWN0ZWQgdXNlci5cbiAgICovXG4gIHVuaW5zdGFsbEludGVncmF0aW9uKG5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD47XG5cbiAgLyoqXG4gICAqIGRpc2FibGVzIGEgd29ya2Zsb3cgZm9yIHRoZSBjb25uZWN0ZWQgdXNlciBhbmQgdW5zdWJzY3JpYmVzIGFsbCB0aGUgd29ya2Zsb3dzIGluIGhlcm1lc1xuICAgKi9cbiAgZGlzYWJsZVdvcmtmbG93KHdvcmtmbG93SWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD47XG5cbiAgc2V0VXNlck1ldGFkYXRhKG1ldGE6IFBlcnNvbmFNZXRhKTogUHJvbWlzZTxBdXRoZW50aWNhdGVkQ29ubmVjdFVzZXI+O1xuXG4gIC8qKlxuICAgKiBzZXRzIHRoZSBiYXNlIHVybCBmb3IgZGlmZmVyZW50IHNlcnZpY2VzIHVzZWQgaW4gY29ubmVjdCBzZGtcbiAgICovXG4gIGNvbmZpZ3VyZUdsb2JhbChvcHRpb25zOiB7IGhvc3Q6IHN0cmluZyB9KTogdm9pZDtcblxuICAvKipcbiAgICogcmV0dXJucyBtZXRhZGF0YSBmb3IgZ2l2ZW4gaW50ZWdyYXRpb25cbiAgICogQHBhcmFtIGludGVncmF0aW9uTmFtZSBpbnRlZ3JhdGlvbiBuYW1lXG4gICAqL1xuICBnZXRJbnRlZ3JhdGlvbk1ldGFkYXRhKGludGVncmF0aW9uTmFtZTogc3RyaW5nKTogSUludGVncmF0aW9uTWV0YWRhdGE7XG4gIGdldEludGVncmF0aW9uTWV0YWRhdGEoKTogSUludGVncmF0aW9uTWV0YWRhdGFbXTtcblxuICAvKipcbiAgICogdHJpZ2dlcnMgYWxsIHdvcmtmbG93cyBmb3IgZXZlbnRcbiAgICogQHBhcmFtIG5hbWUgZXZlbnROYW1lXG4gICAqIEBwYXJhbSBwYXlsb2FkIGV2ZW50IHBheWxvYWQgb2JqZWN0XG4gICAqL1xuICBldmVudChuYW1lOiBzdHJpbmcsIHBheWxvYWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogbWFrZXMgYW4gY29ubmVjdCBwcm94eSBhY3Rpb24gcmVxdWVzdFxuICAgKiBAcGFyYW0gYWN0aW9uIGFjdGlvbk5hbWVcbiAgICogQHBhcmFtIHBhdGggcmVxdWVzdCBwYXRoXG4gICAqIEBwYXJhbSBpbml0IHJlcXVlc3QgaW5pdGlhbGl6YXRpb24gb3B0aW9ucyB7bWV0aG9kOiBodHRwTWV0aG9kLCBib2R5OlJlcXVlc3RCb2R5LCBoZWFkZXJ9XG4gICAqL1xuICByZXF1ZXN0PFRSZXNwb25zZT4oXG4gICAgYWN0aW9uOiBzdHJpbmcsXG4gICAgcGF0aDogc3RyaW5nLFxuICAgIGluaXQ6IHtcbiAgICAgIG1ldGhvZDogUmVxdWVzdEluaXRbJ21ldGhvZCddO1xuICAgICAgYm9keTogUmVxdWVzdEluaXRbJ2JvZHknXSB8IG9iamVjdDtcbiAgICAgIGhlYWRlcnM6IFJlcXVlc3RJbml0WydoZWFkZXJzJ107XG4gICAgfSxcbiAgKTogUHJvbWlzZTxUUmVzcG9uc2UgfCB1bmRlZmluZWQ+O1xuXG4gIC8qKlxuICAgKiBsaXN0ZW4gb24gY29ubmVjdCBzZGsgZXZlbnRzXG4gICAqIEBwYXJhbSBldmVudE5hbWUgU0RLRVZFTlRTXG4gICAqIEBwYXJhbSBsaXN0ZW5lclxuICAgKi9cbiAgc3Vic2NyaWJlKGV2ZW50TmFtZTogU0RLX0VWRU5ULCBsaXN0ZW5lcjogTGlzdGVuZXJGdW5jdGlvbik6ICgpID0+IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIHJlbW92ZSBsaXN0ZW5lcnMgb24gY29ubmVjdCBzZGsgZXZlbnRzXG4gICAqIEBwYXJhbSBldmVudE5hbWUgU0RLRVZFTlRTXG4gICAqIEBwYXJhbSBsaXN0ZW5lclxuICAgKi9cbiAgdW5zdWJzY3JpYmUoZXZlbnROYW1lOiBTREtfRVZFTlQsIGxpc3RlbmVyOiBMaXN0ZW5lckZ1bmN0aW9uKTogYm9vbGVhbjtcblxuICAvKipcbiAgICogdHJpZ2dlciBjb25uZWN0IGVuZHBvaW50IHRyaWdnZXIgd29ya2Zsb3dcbiAgICogQHBhcmFtIHdvcmtmbG93SWRcbiAgICogQHBhcmFtIHRyaWdnZXJXb3JrZmxvd1JlcXVlc3RcbiAgICovXG4gIHdvcmtmbG93KFxuICAgIHdvcmtmbG93SWQ6IHN0cmluZyxcbiAgICB0cmlnZ2VyV29ya2Zsb3dSZXF1ZXN0OiBUcmlnZ2VyV29ya2Zsb3dSZXF1ZXN0LFxuICApOiBQcm9taXNlPG9iamVjdCB8IHVuZGVmaW5lZD47XG59XG5cbi8qKlxuICogc2RrIGluc3RhbGwgb3B0aW9uc1xuICovXG5leHBvcnQgdHlwZSBJbnN0YWxsT3B0aW9ucyA9IHtcbiAgLyoqXG4gICAqIGFwaSBvbmx5IGluc3RhbGwgb3IgdWkgaW5zdGFsbFxuICAgKi9cbiAgaXNBcGlJbnN0YWxsYXRpb24/OiBib29sZWFuO1xuICAvKipcbiAgICogaWYgdHJ1ZSBzaG93IHBvcnRhbCB3aGVuIGluc3RhbGwgd2l0aCBhcGkgaW5zdGFsbCBvcHRpb25cbiAgICovXG4gIHNob3dQb3J0YWxBZnRlckluc3RhbGw/OiBib29sZWFuO1xuICAvKipcbiAgICogbm90IHNob3cgcG9zdCBvYXV0aCBwcm9tdCBpZiB0aGlzIGlzIHRydWVcbiAgICovXG4gIGJ5cGFzc1Bvc3RPQXV0aFByb21wdD86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBBdXRoZW50aWNhdGVPcHRpb25zID0ge1xuICBtZXRhZGF0YT86IFBlcnNvbmFNZXRhO1xufTtcblxuLyoqXG4gKiBDb25uZWN0IE1vZGFsIFRhYnNcbiAqL1xuZXhwb3J0IGVudW0gTW9kYWxWaWV3IHtcbiAgT1ZFUlZJRVcgPSAnb3ZlcnZpZXcnLFxuICBDT05GSUdVUkFUSU9OID0gJ2NvbmZpZ3VyYXRpb24nLFxufVxuXG5leHBvcnQgdHlwZSBJbnRlZ3JhdGlvbkluc3RhbGxFdmVudCA9IHtcbiAgaW50ZWdyYXRpb25JZDogc3RyaW5nO1xuICBpbnRlZ3JhdGlvblR5cGU6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIEludGVncmF0aW9uVW5pbnN0YWxsRXZlbnQgPSBJbnRlZ3JhdGlvbkluc3RhbGxFdmVudDtcblxuZXhwb3J0IHR5cGUgV29ya2Zsb3dTdGF0ZUNoYW5nZUV2ZW50ID0ge1xuICBpbnRlZ3JhdGlvbklkOiBzdHJpbmc7XG4gIHdvcmtmbG93SWQ6IHN0cmluZztcbiAgd29ya2Zsb3dTdGF0ZUNoYW5nZTogUGFydGlhbDxJbnRlZ3JhdGlvbldvcmtmbG93U3RhdGU+O1xufTtcblxuZXhwb3J0IHR5cGUgUG9ydGFsT3BlbkV2ZW50ID0ge1xuICBpbnRlZ3JhdGlvbklkOiBzdHJpbmc7XG4gIGludGVncmF0aW9uVHlwZTogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgUG9ydGFsQ2xvc2VFdmVudCA9IFBvcnRhbE9wZW5FdmVudDtcblxuZXhwb3J0IHR5cGUgQ2FsbGJhY2tNYXAgPSB7XG4gIG9uU3VjY2Vzcz86IChldmVudDogSW50ZWdyYXRpb25JbnN0YWxsRXZlbnQsIHVzZXI6IEF1dGhlbnRpY2F0ZWRDb25uZWN0VXNlcikgPT4gdm9pZDtcbiAgb25JbnN0YWxsPzogKGV2ZW50OiBJbnRlZ3JhdGlvbkluc3RhbGxFdmVudCwgdXNlcjogQXV0aGVudGljYXRlZENvbm5lY3RVc2VyKSA9PiB2b2lkO1xuICBvbkVycm9yPzogKGVycjogRXJyb3IpID0+IHZvaWQ7XG4gIG9uVW5pbnN0YWxsPzogKGV2ZW50OiBJbnRlZ3JhdGlvblVuaW5zdGFsbEV2ZW50LCB1c2VyOiBBdXRoZW50aWNhdGVkQ29ubmVjdFVzZXIpID0+IHZvaWQ7XG4gIG9uV29ya2Zsb3dDaGFuZ2U/OiAoZXZlbnQ6IFdvcmtmbG93U3RhdGVDaGFuZ2VFdmVudCwgdXNlcjogQXV0aGVudGljYXRlZENvbm5lY3RVc2VyKSA9PiB2b2lkO1xuICBvbk9wZW4/OiAoZXZlbnQ6IFBvcnRhbE9wZW5FdmVudCwgdXNlcjogQXV0aGVudGljYXRlZENvbm5lY3RVc2VyKSA9PiB2b2lkO1xuICBvbkNsb3NlPzogKGV2ZW50OiBQb3J0YWxDbG9zZUV2ZW50LCB1c2VyOiBBdXRoZW50aWNhdGVkQ29ubmVjdFVzZXIpID0+IHZvaWQ7XG59O1xuXG5leHBvcnQgdHlwZSBVc2VyUHJvdmlkZWRJbnRlZ3JhdGlvbkNvbmZpZyA9IHtcbiAgLyoqXG4gICAqIHVzZWQgdG8gb3ZlcnJpZGUgcmVkaXJlY3QgdXJsIHBhc3NlZCBpbiBnZXRBdXRoVXJsIGluc3RlYWQgb2Ygb3VyIHBhc3Nwb3J0IHVybFxuICAgKi9cbiAgb3ZlcnJpZGVSZWRpcmVjdFVybD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhpcyB3aWxsIGFsbG93IHVzZXJzIHRvIHByb3ZpZGUgZHluYW1pYyBmaWVsZHMgb3B0aW9ucyBmb3Igb2JqZWN0IG1hcHBpbmcgaW5wdXRzXG4gICAqL1xuICBtYXBPYmplY3RGaWVsZHM/OiB7XG4gICAgW29iamVjdE5hbWU6IHN0cmluZ106IER5bmFtaWNNYXBwaW5nRmllbGRbXSB8IER5bmFtaWNNYXBwaW5nT3B0aW9ucztcbiAgfTtcbn07XG5cbmV4cG9ydCB0eXBlIENvbm5lY3RQYXJhbXMgPSBDYWxsYmFja01hcCAmIFVzZXJQcm92aWRlZEludGVncmF0aW9uQ29uZmlnO1xuXG5leHBvcnQgdHlwZSBFdmVudEluZm8gPSB7XG4gIHR5cGU6IFNES19FVkVOVDtcbiAgaW50ZWdyYXRpb25JZDogc3RyaW5nO1xuICBpbnRlZ3JhdGlvblR5cGU6IHN0cmluZztcbiAgd29ya2Zsb3dJZD86IHN0cmluZztcbiAgd29ya2Zsb3dTdGF0ZUNoYW5nZT86IFBhcnRpYWw8SW50ZWdyYXRpb25Xb3JrZmxvd1N0YXRlPjtcbn07XG5cbmV4cG9ydCBlbnVtIFNES19FVkVOVCB7XG4gIE9OX0lOVEVHUkFUSU9OX0lOU1RBTEwgPSAnb25JbnRlZ3JhdGlvbkluc3RhbGwnLFxuICBPTl9JTlRFR1JBVElPTl9VTklOU1RBTEwgPSAnb25JbnRlZ3JhdGlvblVuaW5zdGFsbCcsXG4gIE9OX1dPUktGTE9XX0NIQU5HRSA9ICdvbldvcmtmbG93Q2hhbmdlJyxcbiAgT05fUE9SVEFMX09QRU4gPSAnb25Qb3J0YWxPcGVuJyxcbiAgT05fUE9SVEFMX0NMT1NFID0gJ29uUG9ydGFsQ2xvc2UnLFxufVxuXG5leHBvcnQgdHlwZSBTREtFdmVudExpc3RlbmVyTWFwID0ge1xuICBbU0RLX0VWRU5ULk9OX0lOVEVHUkFUSU9OX0lOU1RBTExdOiBBcnJheTxcbiAgICAoZXZlbnQ6IEludGVncmF0aW9uSW5zdGFsbEV2ZW50LCB1c2VyOiBBdXRoZW50aWNhdGVkQ29ubmVjdFVzZXIpID0+IHZvaWRcbiAgPjtcbiAgW1NES19FVkVOVC5PTl9JTlRFR1JBVElPTl9VTklOU1RBTExdOiBBcnJheTxcbiAgICAoZXZlbnQ6IEludGVncmF0aW9uVW5pbnN0YWxsRXZlbnQsIHVzZXI6IEF1dGhlbnRpY2F0ZWRDb25uZWN0VXNlcikgPT4gdm9pZFxuICA+O1xuICBbU0RLX0VWRU5ULk9OX1BPUlRBTF9DTE9TRV06IEFycmF5PFxuICAgIChldmVudDogUG9ydGFsQ2xvc2VFdmVudCwgdXNlcjogQXV0aGVudGljYXRlZENvbm5lY3RVc2VyKSA9PiB2b2lkXG4gID47XG4gIFtTREtfRVZFTlQuT05fUE9SVEFMX09QRU5dOiBBcnJheTxcbiAgICAoZXZlbnQ6IFBvcnRhbE9wZW5FdmVudCwgdXNlcjogQXV0aGVudGljYXRlZENvbm5lY3RVc2VyKSA9PiB2b2lkXG4gID47XG4gIFtTREtfRVZFTlQuT05fV09SS0ZMT1dfQ0hBTkdFXTogQXJyYXk8XG4gICAgKGV2ZW50OiBXb3JrZmxvd1N0YXRlQ2hhbmdlRXZlbnQsIHVzZXI6IEF1dGhlbnRpY2F0ZWRDb25uZWN0VXNlcikgPT4gdm9pZFxuICA+O1xufTtcblxuZXhwb3J0IHR5cGUgTGlzdGVuZXJGdW5jdGlvbiA9IFNES0V2ZW50TGlzdGVuZXJNYXBba2V5b2YgU0RLRXZlbnRMaXN0ZW5lck1hcF1bbnVtYmVyXTtcblxuZXhwb3J0IGVudW0gRG9jdW1lbnRMb2FkaW5nU3RhdGUge1xuICBMT0FESU5HID0gJ2xvYWRpbmcnLFxuICBJTlRFUkFDVElWRSA9ICdpbnRlcmFjdGl2ZScsXG4gIENPTVBMRVRFID0gJ2NvbXBsZXRlJyxcbn1cblxuZXhwb3J0IHR5cGUgVHJpZ2dlcldvcmtmbG93UmVxdWVzdCA9IHtcbiAgYm9keT86IFJlcXVlc3RJbml0Wydib2R5J10gfCBvYmplY3Q7XG4gIGhlYWRlcnM/OiBSZXF1ZXN0SW5pdFsnaGVhZGVycyddO1xuICBxdWVyeT86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59O1xuIiwiZXhwb3J0IGVudW0gQmlsbGluZ1BsYW4ge1xuICAvLyBDbGFzc2ljXG4gIENsYXNzaWNGcmVlID0gJ2ZyZWUnLFxuICBDbGFzc2ljU3RhcnRlciA9ICdzdGFydGVyJyxcbiAgQ2xhc3NpY0J1c2luZXNzID0gJ2J1c2luZXNzJyxcbiAgQ2xhc3NpY1ByZW1pdW0gPSAncHJlbWl1bScsXG4gIENsYXNzaWNFbnRlcnByaXNlID0gJ2VudGVycHJpc2UnLFxuXG4gIC8vIENvbm5lY3RcbiAgQ29ubmVjdFRyaWFsID0gJ2Nvbm5lY3RfdHJpYWwnLFxuICBDb25uZWN0QmFzaWMgPSAnYmFzaWMnLFxuICBDb25uZWN0UHJvID0gJ3BybycsXG4gIENvbm5lY3RFbnRlcnByaXNlID0gJ2Nvbm5lY3RfZW50ZXJwcmlzZScsXG59XG5cbmV4cG9ydCBlbnVtIENvbm5lY3RBZGRPbiB7XG4gIEN1c3RvbUludGVncmF0aW9uQnVpbGRlciA9ICdieW8nLFxuICBEeW5hbWljRmllbGRNYXBwZXIgPSAnZGZtJyxcbiAgSGVhZGxlc3NDb25uZWN0UG9ydGFsID0gJ2hlYWRsZXNzLWNwJyxcbiAgVGFza0hpc3RvcnlBUEkgPSAndGgtYXBpJyxcbiAgTW9uaXRvcmluZyA9ICdtb25pdG9yaW5nJyxcbiAgUm9sZUJhc2VkQWNjZXNzQ29udHJvbCA9ICdyYmFjJyxcbiAgVXNlck1ldGFkYXRhID0gJ3VzZXItbWV0YWRhdGEnLFxuICBXaGl0ZUxhYmVsaW5nID0gJ3doaXRlbGFiZWwnLFxuICBXb3JrZmxvd1Blcm1pc3Npb24gPSAnd29ya2Zsb3ctcGVybWlzc2lvbnMnLFxufVxuXG5leHBvcnQgdHlwZSBDb25uZWN0Tm9uVHJpYWxCaWxsaW5nUGxhbiA9XG4gIHwgQmlsbGluZ1BsYW4uQ29ubmVjdEJhc2ljXG4gIHwgQmlsbGluZ1BsYW4uQ29ubmVjdFByb1xuICB8IEJpbGxpbmdQbGFuLkNvbm5lY3RFbnRlcnByaXNlO1xuIiwiaW1wb3J0IHsgTk9ERV9FTlYsIFBMQVRGT1JNX0VOViB9IGZyb20gJy4uL3R5cGVzL2Vudmlyb25tZW50JztcblxuLyoqXG4gKiBnZXQgYXNzZXQgdXJsIGkuZS4gY2RuIHB1YmxpYyB1cmwgb3IgZGFzaGJvYXJkIHB1YmxpYyB1cmxcbiAqIEBwYXJhbSBlbnZcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRBc3NldFVybCA9ICh7XG4gIENETl9QVUJMSUNfVVJMOiBjZG5Ib3N0LFxuICBEQVNIQk9BUkRfUFVCTElDX1VSTDogZGFzaGJvYXJkUHVibGljVVJMLFxuICBWRVJTSU9OOiB2ZXJzaW9uLFxuICBQTEFURk9STV9FTlY6IHBsYXRmb3JtRW52LFxuICBOT0RFX0VOVjogbm9kZUVudixcbn06IHtcbiAgQ0ROX1BVQkxJQ19VUkw6IHN0cmluZztcbiAgREFTSEJPQVJEX1BVQkxJQ19VUkw6IHN0cmluZztcbiAgTk9ERV9FTlY6IHN0cmluZztcbiAgUExBVEZPUk1fRU5WOiBzdHJpbmc7XG4gIFZFUlNJT046IHN0cmluZztcbn0pOiBzdHJpbmcgPT4ge1xuICBpZiAoY2RuSG9zdCAmJiBub2RlRW52ID09PSBOT0RFX0VOVi5QUk9EVUNUSU9OICYmIHBsYXRmb3JtRW52ICE9PSBQTEFURk9STV9FTlYuRU5URVJQUklTRSkge1xuICAgIHJldHVybiBgJHtjZG5Ib3N0fS8ke3ZlcnNpb259L2Rhc2hib2FyZC9wdWJsaWNgO1xuICB9XG5cbiAgcmV0dXJuIGRhc2hib2FyZFB1YmxpY1VSTDtcbn07XG4iLCJpbXBvcnQgeyBzaGEyNTYgfSBmcm9tICdoYXNoLmpzJztcblxuLyoqXG4gKiBoYXNoZXMgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm5zIHtzdHJpbmd9IDEwIGRpZ2l0IGhhc2hcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc2godmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIHNoYTI1NigpLnVwZGF0ZSh2YWx1ZSkuZGlnZXN0KCdoZXgnKS5zdWJzdHIoMCwgMTApO1xufVxuIiwidHlwZSBHZW5lcmljUmVzb2x2ZTxUID0gYW55PiA9IHtcbiAgKHZhbHVlOiBUKTogdm9pZDtcbn07XG5cbi8qKlxuICogYSBoZWxwZXIgY2xhc3MgZm9yIGNyZWF0aW5nIGRlZmVycmVkIHByb21pc2VzXG4gKiBAdHV0b3JpYWwgaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vR0ZvbGV5ODMvNTg3N2Y2YzA5ZmJjZmQ2MjU2OWM1MWRjOTE0NDRjZjBcbiAqL1xuZXhwb3J0IGNsYXNzIERlZmVycmVkUHJvbWlzZTxUPiBpbXBsZW1lbnRzIFByb21pc2U8VD4ge1xuICBbU3ltYm9sLnRvU3RyaW5nVGFnXTogJ1Byb21pc2UnO1xuXG4gIHByaXZhdGUgX3Byb21pc2U6IFByb21pc2U8VD47XG4gIHByaXZhdGUgX3Jlc29sdmU6ICh2YWx1ZT86IFQgfCBQcm9taXNlTGlrZTxUPikgPT4gdm9pZDtcbiAgcHJpdmF0ZSBfcmVqZWN0OiAocmVhc29uPzogYW55KSA9PiB2b2lkO1xuICBwcml2YXRlIF9zdGF0ZTogJ3BlbmRpbmcnIHwgJ2Z1bGZpbGxlZCcgfCAncmVqZWN0ZWQnID0gJ3BlbmRpbmcnO1xuXG4gIHB1YmxpYyBnZXQgc3RhdGUoKTogJ3BlbmRpbmcnIHwgJ2Z1bGZpbGxlZCcgfCAncmVqZWN0ZWQnIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGU7XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLl9wcm9taXNlID0gbmV3IFByb21pc2U8VD4oXG4gICAgICAocmVzb2x2ZTogKHZhbHVlOiBUIHwgUHJvbWlzZUxpa2U8VD4pID0+IHZvaWQsIHJlamVjdDogKHJlYXNvbj86IGFueSkgPT4gdm9pZCkgPT4ge1xuICAgICAgICB0aGlzLl9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgICAgdGhpcy5fcmVqZWN0ID0gcmVqZWN0O1xuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHRoZW48VFJlc3VsdDEsIFRSZXN1bHQyPihcbiAgICBvbmZ1bGZpbGxlZD86ICh2YWx1ZTogVCkgPT4gVFJlc3VsdDEgfCBQcm9taXNlTGlrZTxUUmVzdWx0MT4sXG4gICAgb25yZWplY3RlZD86IChyZWFzb246IGFueSkgPT4gVFJlc3VsdDIgfCBQcm9taXNlTGlrZTxUUmVzdWx0Mj4sXG4gICk6IFByb21pc2U8VFJlc3VsdDEgfCBUUmVzdWx0Mj4ge1xuICAgIHJldHVybiB0aGlzLl9wcm9taXNlLnRoZW4ob25mdWxmaWxsZWQsIG9ucmVqZWN0ZWQpO1xuICB9XG5cbiAgcHVibGljIGNhdGNoPFRSZXN1bHQ+KFxuICAgIG9ucmVqZWN0ZWQ/OiAocmVhc29uOiBhbnkpID0+IFRSZXN1bHQgfCBQcm9taXNlTGlrZTxUUmVzdWx0PixcbiAgKTogUHJvbWlzZTxUIHwgVFJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLl9wcm9taXNlLmNhdGNoKG9ucmVqZWN0ZWQpO1xuICB9XG5cbiAgcHVibGljIHJlc29sdmUodmFsdWU/OiBUIHwgUHJvbWlzZUxpa2U8VD4pOiB2b2lkIHtcbiAgICB0aGlzLl9yZXNvbHZlKHZhbHVlKTtcbiAgICB0aGlzLl9zdGF0ZSA9ICdmdWxmaWxsZWQnO1xuICB9XG5cbiAgcHVibGljIHJlamVjdChyZWFzb24/OiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLl9yZWplY3QocmVhc29uKTtcbiAgICB0aGlzLl9zdGF0ZSA9ICdyZWplY3RlZCc7XG4gIH1cblxuICBwdWJsaWMgZmluYWxseShvbmZpbmFsbHk/OiAoKSA9PiB2b2lkKTogUHJvbWlzZTxUPiB7XG4gICAgb25maW5hbGx5Py4oKTtcbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZTtcbiAgfVxufVxuXG4vKipcbiAqIGdpdmVuIGEgdHlwZSBkZWZpbml0aW9uIG9mIGEgcmVjb3JkIGFuZCBwb3NzaWJsZSB2YWx1ZXMgZm9yIGVhY2gga2V5LFxuICogaXQgZ2VuZXJhdGVzIGFuIGFycmF5IG9mIGV2ZXJ5IHBlcm11dGF0aW9uXG4gKlxuICogQHRlbXBsYXRlIFRcbiAqIEBwYXJhbSB7eyBbayBpbiBrZXlvZiBUXTogVFtrXVtdIH19IGlucHV0XG4gKiBAcmV0dXJucyB7VFtdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVNYXRyaXg8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4+KFxuICBpbnB1dDogeyBbayBpbiBrZXlvZiBUXTogVFtrXVtdIH0sXG4gIGxpbWl0PzogbnVtYmVyLFxuKTogVFtdIHtcbiAgY29uc3Qga2V5czogKGtleW9mIFQpW10gPSBPYmplY3Qua2V5cyhpbnB1dCk7XG5cbiAgLy8gSWYgdGhlcmUncyBtb3JlIHRoYW4gMSBrZXkgYW5kIGF0IGxlYXN0IDEga2V5IGhhcyBhIHZhbHVlLFxuICAvLyB0aGVuIHdlIHdhbnQgdG8gcHVzaCBhbiBlbXB0eSBpdGVtIHRvIHRoZSB2YWx1ZXMgdGhhdCBkb24ndCBoYXZlIGFueSBwYXJhbWV0ZXJzXG4gIC8vIE90aGVyd2lzZSBhbiBlbXB0eSBtYXRyaXggd2lsbCBiZSBnZW5lcmF0ZWRcbiAgY29uc3QgbnVtVmFsdWVzOiBudW1iZXIgPSBrZXlzLnJlZHVjZTxudW1iZXI+KFxuICAgIChzdW06IG51bWJlciwga2V5OiBrZXlvZiBUKTogbnVtYmVyID0+IHN1bSArIGlucHV0W2tleV0ubGVuZ3RoLFxuICAgIDAsXG4gICk7XG4gIGlmIChudW1WYWx1ZXMgJiYga2V5cy5sZW5ndGgpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICBpZiAoIWlucHV0W2tleV0ubGVuZ3RoKSB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmUgd2Ugd2FudCB0byBwdXNoIGFuIGVtcHR5IGl0ZW0gdG8gdGhlIHZhbHVlcyB0aGF0IGRvbid0IGhhdmUgYW55IHBhcmFtZXRlcnNcbiAgICAgICAgaW5wdXRba2V5XS5wdXNoKHVuZGVmaW5lZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcGFyYW1zOiBUW10gPSBPYmplY3QuZW50cmllcyhpbnB1dClcbiAgICAucmVkdWNlKChwYXJ0aWFsTWF0cml4OiBhbnlbXSwgWywgdmFsdWVzXTogW3N0cmluZywgYW55W11dKSA9PiB7XG4gICAgICBpZiAoIXBhcnRpYWxNYXRyaXgubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZXMubWFwKCh2KSA9PiBbdl0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFydGlhbE1hdHJpeC5yZWR1Y2UoKHJlZHVjZWQsIGN1cnJlbnQpID0+IHtcbiAgICAgICAgdmFsdWVzLmZvckVhY2goKHZhbCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvcHkgPSBjdXJyZW50LnNsaWNlKCk7XG4gICAgICAgICAgY29weS5wdXNoKHZhbCk7XG4gICAgICAgICAgcmVkdWNlZC5wdXNoKGNvcHkpO1xuICAgICAgICB9LCBbXSk7XG4gICAgICAgIHJldHVybiByZWR1Y2VkO1xuICAgICAgfSwgW10pO1xuICAgIH0sIFtdKVxuICAgIC5yZWR1Y2UoKG1hdHJpeDogVFtdLCB2YWx1ZXM6IGFueVtdKTogVFtdID0+IHtcbiAgICAgIGNvbnN0IHBhcmFtOiBUID0gdmFsdWVzLnJlZHVjZShcbiAgICAgICAgKHBhcmFtczogUGFydGlhbDxUPiwgdmFsdWU6IGFueSwgaW5kZXg6IG51bWJlcik6IFBhcnRpYWw8VD4gPT4gKHtcbiAgICAgICAgICAuLi5wYXJhbXMsXG4gICAgICAgICAgW2tleXNbaW5kZXhdXTogdmFsdWUsXG4gICAgICAgIH0pLFxuICAgICAgICB7fSxcbiAgICAgICk7XG4gICAgICByZXR1cm4gWy4uLm1hdHJpeCwgcGFyYW1dO1xuICAgIH0sIFtdKSBhcyB1bmtub3duIGFzIFRbXTtcblxuICByZXR1cm4gbGltaXQgPyBwYXJhbXMuc2xpY2UoLTEgKiBsaW1pdCkgOiBwYXJhbXM7XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIHNsZWVwKG1pbGxpc2Vjb25kczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogR2VuZXJpY1Jlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbWlsbGlzZWNvbmRzKSk7XG59IiwiLyoqXG4gKiBjaGVjayBpZiB1cmwgaXMgdmFsaWQgb3Igbm90XG4gKiBAcGFyYW0gdXJsXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgaXNWYWxpZFVybCA9ICh1cmw6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICBjb25zdCBzYW5pdGl6ZWRVcmw6IHN0cmluZyA9IHNhbml0aXplVXJsKHVybCk7XG4gIHRyeSB7XG4gICAgbmV3IGdsb2JhbFRoaXMuVVJMKHNhbml0aXplZFVybCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxuLyoqXG4gKiBpdCB3aWxsIGFkZCBodHRwcyBwcm90b2NvbCBpZiBwcm90b2NvbCBpcyBub3QgYWRkZWQgaW4gdXRsXG4gKiBAcGFyYW0gdXJsXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2FuaXRpemVVcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoIXVybCkge1xuICAgIHJldHVybiB1cmw7XG4gIH1cblxuICAvLyBpZiBhbnkgdXJsIG5vdCBjb250YWluIHByb3RvY29sIHRoZW4gYWRkIGh0dHBzXG4gIGlmICghdXJsLm1hdGNoKC9eW2EtekEtWl0rOlxcL1xcLy8pKSB7XG4gICAgcmV0dXJuIGBodHRwczovLyR7dXJsfWA7XG4gIH1cbiAgcmV0dXJuIHVybDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlcnZpY2VVcmwoc2VydmljZTogc3RyaW5nLCBkb21haW46IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHByZWZpeDogc3RyaW5nID0gYGh0dHBzOi8vYDtcbiAgY29uc3Qgc3VmZml4OiBzdHJpbmcgPSBgLiR7ZG9tYWlufWA7XG4gIHJldHVybiBgJHtwcmVmaXh9JHtzZXJ2aWNlfSR7c3VmZml4fWA7XG59XG4iLCJpbXBvcnQgeyBEZWZlcnJlZFByb21pc2UgfSBmcm9tICcuL2dlbmVyaWMnO1xuXG4vKipcbiAqIHdoZXRoZXIgdG8gZGVib3VuY2Ugb3IgdGhyb3R0bGUgY2FjaGVkIGl0ZW1zXG4gKiBkZWZhdWx0cyB0byBgRGVib3VuY2VgIGJlaGF2aW9yXG4gKi9cbmV4cG9ydCBlbnVtIENhY2hlTW9kZSB7XG4gIERlYm91bmNlID0gJ2RlYm91bmNlJyxcbiAgVGhyb3R0bGUgPSAndGhyb3R0bGUnLFxufVxuXG4vKipcbiAqIHVzZWQgYnkgYSBDYWNoZVRocm90dGxlIGluc3RhbmNlIHRvIGtlZXAgdHJhY2sgb2YgaXRzIHN0YXRlXG4gKiB0aGlzIGlzIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zXG4gKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZW51bSBDYWNoZVRocm90dGxlU3RhdGUge1xuICBDbG9zZWQgPSAnY2xvc2VkJyxcbiAgSWRsZSA9ICdpZGxlJyxcbiAgUHJvY2Vzc2luZyA9ICdwcm9jZXNzaW5nJyxcbn1cblxuLyoqXG4gKiBhbiBlbnRyeSB3aXRoaW4gYSBDYWNoZVRocm90dGxlIGluc3RhbmNlJ3MgY2FjaGVcbiAqL1xudHlwZSBDYWNoZVRocm90dGxlRW50cnk8VD4gPSB7XG4gIG1vZGU/OiBDYWNoZU1vZGU7XG4gIHRpbWVvdXQ6IG51bWJlcjtcbiAgdHRsOiBudW1iZXI7XG4gIHZhbHVlOiBUO1xufTtcblxuLyoqXG4gKiB0aGUgaW4tbWVtb3J5IGNhY2hlIGEgQ2FjaGVUaHJvdHRsZSBpbnN0YW5jZSB1c2VzXG4gKi9cbnR5cGUgQ2FjaGVUaHJvdHRsZVN0b3JlPFQ+ID0gUmVjb3JkPHN0cmluZywgQ2FjaGVUaHJvdHRsZUVudHJ5PFQ+PjtcblxuLyoqXG4gKiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgZm9yIGEgQ2FjaGVUaHJvdHRsZSBpbnN0YW5jZVxuICovXG5leHBvcnQgdHlwZSBDYWNoZVRocm90dGxlQ29uZmlnPFQgPSBhbnk+ID0gUGFydGlhbDx7XG4gIC8qKlxuICAgKiB3aGVuIGVuYWJsZWQsIHRoaXMgY2xlYXJzIHBlbmRpbmcgYGRlbGAgY2FsbHMgZnJvbSB0aGUgcXVldWUgd2hlbiBgZ2V0YCwgYHNldGAsIG9yIGBnZXRPclNldGAgaXMgY2FsbGVkXG4gICAqIHRoaXMgY2FuIGJlIHVzZWQgdG8gcHJldmVudCBxdWV1ZWQgZGVsZXRlIGNhbGxzIGZyb20gZGVsZXRpbmcgcmVjZW50bHkgcmV0cmlldmVkIHN0YXRlZnVsIHZhbHVlcywgbGlrZSBkYiBjb25uZWN0aW9uc1xuICAgKi9cbiAgY2xlYXJQZW5kaW5nRGVsZXRlczogYm9vbGVhbjtcblxuICAvKipcbiAgICogd2hldGhlciB0byBvcGVyYXRlIGluIFRocm90dGxlIG9yIERlYm91bmNlIG1vZGVcbiAgICovXG4gIG1vZGU6IENhY2hlTW9kZTtcblxuICAvKipcbiAgICogYW4gb3B0aW9uYWwgY2FsbGJhY2sgZm9yIGhhbmRsaW5nIGl0ZW1zIHdoZW4gdGhleSBnZXQgZGVyZWdpc3RlcmVkIGZyb20gdGhlIGNhY2hlXG4gICAqL1xuICBvbkRlcmVnaXN0ZXI6ICh2YWx1ZTogVCkgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWQ7XG5cbiAgLyoqXG4gICAqIGFuIG9wdGlvbmFsIGNhbGxiYWNrIGZvciBzZXJpYWxpemluZyBrZXlzXG4gICAqIGluIHRoZSBjYXNlIHRoYXQga2V5cyBhcmUgcGFydGljdWxhcmx5IGxvbmcsIHRoaXMgY2FuIGJlIHVzZWQgdG8gc2hvcnRlbiB0aGVtXG4gICAqL1xuICBzZXJpYWxpemVLZXk6IChrZXk6IHN0cmluZykgPT4gc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBob3cgbG9uZyBpdGVtcyBzaG91bGQgcmVtYWluIGluIHRoZSBjYWNoZVxuICAgKiB0aGUgdHRsIGlzIHJlc2V0IGV2ZXJ5IHRpbWUgYSBrZXkgaXMgYWNjZXNzZWRcbiAgICovXG4gIHR0bDogbnVtYmVyO1xufT47XG5cbi8qKlxuICogdGhlIG9wZXJhdGlvbnMgdGhhdCBjYW4gaW50ZXJuYWxseSBiZSBxdWV1ZWQgYnkgYSBDYWNoZVRocm90dGxlIGluc3RhbmNlXG4gKi9cbmVudW0gQ2FjaGVUaHJvdHRsZU9wZXJhdGlvbiB7XG4gIEdldCxcbiAgU2V0LFxuICBHZXRPclNldCxcbiAgRGVsLFxuICBEbyxcbn1cblxuLyoqXG4gKiBxdWV1ZSBpdGVtLCBjb25zaXN0cyBvZiBhIGtleSwgbWV0aG9kIG5hbWUsIGNhbGxiYWNrIGFuZCBhIHByb21pc2UgZm9yIHdoZW4gdGhlIG1ldGhvZCByZXNvbHZlc1xuICovXG50eXBlIFF1ZXVlSXRlbTxUPiA9IFtzdHJpbmcsIENhY2hlVGhyb3R0bGVPcGVyYXRpb24sICgpID0+IFByb21pc2U8VD4sIERlZmVycmVkUHJvbWlzZTxUPl07XG5cbi8qKlxuICogQSBoZWxwZXIgY2xhc3MgZm9yIGNhY2hpbmcgaXRlbXMgaW4gbWVtb3J5IGFuZCB0aHJvdHRsaW5nIC8gZGVib3VuY2luZyBmdW5jdGlvbiBjYWxsc1xuICogbWV0aG9kcyBmb3IgZ2V0dGVycywgc2V0dGVycywgYW5kIGV4ZWN1dG9ycyBhcmUgcXVldWVkIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIGJldHdlZW4gY2FsbHMuXG4gKiBJdCBwcm92aWRlcyBoZWxwZXIgbWV0aG9kcyBmb3IgaGFuZGxpbmcgZGVyZWdpc3RlcmluZyBvZiBpdGVtcy5cbiAqIFVzZWZ1bCBmb3IgY2FjaGluZyBkYXRhYmFzZSBjb25uZWN0aW9ucyBvciByYXRlLWxpbWl0aW5nIG91dGdvaW5nIFNlbnRyeSBjYWxscy5cbiAqL1xuZXhwb3J0IGNsYXNzIENhY2hlVGhyb3R0bGU8VCA9IGFueT4ge1xuICAjc3RhdGUgPSBDYWNoZVRocm90dGxlU3RhdGUuSWRsZTtcblxuICAvKipcbiAgICogaW4gbWVtb3J5IGNhY2hlXG4gICAqL1xuICAjc3RvcmU6IENhY2hlVGhyb3R0bGVTdG9yZTxUPiA9IHt9O1xuXG4gIC8qKlxuICAgKiB0aGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIGNsYXNzXG4gICAqL1xuICAjY29uZmlnOiBDYWNoZVRocm90dGxlQ29uZmlnPFQ+O1xuXG4gIC8qKlxuICAgKiBhIHF1ZXVlIG9mIG1ldGhvZHMgdG8gYmUgY2FsbGVkLiBjb25zaXN0cyBvZiBhIGtleSwgbWV0aG9kIG5hbWUsIGFuZCBjYWxsYmFjayBhbmQgYSBwcm9taXNlIGZvciB3aGVuIHRoZSBtZXRob2QgcmVzb2x2ZXNcbiAgICogW3NlcmlhbGl6ZWRLZXk6IHN0cmluZywgY2FsbGJhY2s6ICgpID0+IFByb21pc2U8VD4sIHByb21pc2U6IFByb21pc2U8VD5dXG4gICAqL1xuICAjcXVldWU6IEFycmF5PFF1ZXVlSXRlbTxUPj4gPSBbXTtcblxuICBjb25zdHJ1Y3Rvcihjb25maWc6IENhY2hlVGhyb3R0bGVDb25maWc8VD4gPSB7fSkge1xuICAgIC8vIFNldHRpbmcgZGVmYXVsdCB2YWx1ZXMgZm9yIGBtb2RlYCBhbmQgYHR0bGBcbiAgICB0aGlzLiNjb25maWcgPSB7XG4gICAgICBtb2RlOiBDYWNoZU1vZGUuRGVib3VuY2UsXG4gICAgICB0dGw6IDAsXG4gICAgICAuLi5jb25maWcsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBhdHRlbXB0cyB0byByZXRyaWV2ZSBhIGtleSBmcm9tIHRoZSBjYWNoZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FzYXBdIGFzYXAgPSBhcyBzb29uIGFzIHBvc3NpYmxlLiBzaG91bGQgdGhpcyBiZSBxdWV1ZWQgb3IgZXhlY3V0ZSBpbW1lZGlhdGVseVxuICAgKiBAcmV0dXJucyB7KFByb21pc2U8VCB8IHVuZGVmaW5lZD4pfVxuICAgKiBAbWVtYmVyb2YgQ2FjaGVUaHJvdHRsZVxuICAgKi9cbiAgYXN5bmMgZ2V0KGtleTogc3RyaW5nLCBhc2FwPzogYm9vbGVhbik6IFByb21pc2U8VCB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IHNlcmlhbGl6ZWRLZXk6IHN0cmluZyA9IHRoaXMuc2VyaWFsaXplS2V5KGtleSk7XG4gICAgY29uc3QgY2FsbGJhY2s6ICgpID0+IFByb21pc2U8VD4gPSBhc3luYyAoKTogUHJvbWlzZTxUPiA9PiB7XG4gICAgICBjb25zdCBlbnRyeTogQ2FjaGVUaHJvdHRsZUVudHJ5PFQ+IHwgdW5kZWZpbmVkID0gdGhpcy4jc3RvcmVbc2VyaWFsaXplZEtleV07XG4gICAgICBjb25zdCB7IG1vZGUsIHR0bCwgdmFsdWUgfSA9IGVudHJ5ID8/IHt9O1xuXG4gICAgICBpZiAoZW50cnkgJiYgdHRsICYmICghbW9kZSB8fCBtb2RlID09PSBDYWNoZU1vZGUuRGVib3VuY2UpKSB7XG4gICAgICAgIHRoaXMucmVmcmVzaFRpbWVvdXQoa2V5LCBzZXJpYWxpemVkS2V5LCB0dGwpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy4jY29uZmlnLmNsZWFyUGVuZGluZ0RlbGV0ZXMpIHtcbiAgICAgICAgdGhpcy5jbGVhclBlbmRpbmdEZWxldGVzT25LZXkoc2VyaWFsaXplZEtleSwgdmFsdWUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfTtcblxuICAgIHJldHVybiBhc2FwID8gY2FsbGJhY2soKSA6IHRoaXMuZW5xdWV1ZShzZXJpYWxpemVkS2V5LCBDYWNoZVRocm90dGxlT3BlcmF0aW9uLkdldCwgY2FsbGJhY2spO1xuICB9XG5cbiAgLyoqXG4gICAqIHN0b3JlcyBhbiBpdGVtIGluIHRoZSBjYWNoZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAqIEBwYXJhbSB7VH0gdmFsdWVcbiAgICogQHBhcmFtIHtudW1iZXJ9IFt0dGw9dGhpcy5dXG4gICAqIEBwYXJhbSB7Kn0gY29uZmlnXG4gICAqIEBwYXJhbSB7Kn0gdHRsXG4gICAqIEBwYXJhbSB7Q2FjaGVNb2RlfSBbbW9kZV1cbiAgICogQHBhcmFtIHtib29sZWFufSBbYXNhcF0gYXNhcCA9IGFzIHNvb24gYXMgcG9zc2libGUuIHNob3VsZCB0aGlzIGJlIHF1ZXVlZCBvciBleGVjdXRlIGltbWVkaWF0ZWx5XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFQ+fVxuICAgKiBAbWVtYmVyb2YgQ2FjaGVUaHJvdHRsZVxuICAgKi9cbiAgYXN5bmMgc2V0KFxuICAgIGtleTogc3RyaW5nLFxuICAgIHZhbHVlOiBULFxuICAgIHR0bDogbnVtYmVyID0gdGhpcy4jY29uZmlnLnR0bCBhcyBudW1iZXIsXG4gICAgbW9kZT86IENhY2hlTW9kZSxcbiAgICBhc2FwPzogYm9vbGVhbixcbiAgKTogUHJvbWlzZTxUPiB7XG4gICAgY29uc3Qgc2VyaWFsaXplZEtleTogc3RyaW5nID0gdGhpcy5zZXJpYWxpemVLZXkoa2V5KTtcbiAgICBjb25zdCBjYWxsYmFjazogKCkgPT4gUHJvbWlzZTxUPiA9IGFzeW5jICgpOiBQcm9taXNlPFQ+ID0+IHtcbiAgICAgIGNvbnN0IGVudHJ5OiBDYWNoZVRocm90dGxlRW50cnk8VD4gfCB1bmRlZmluZWQgPSB0aGlzLiNzdG9yZVtzZXJpYWxpemVkS2V5XTtcbiAgICAgIGNvbnN0IGRpZFByZXZpb3VzbHlFeGlzdDogYm9vbGVhbiA9IGVudHJ5ID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgdGhpcy4jc3RvcmVbc2VyaWFsaXplZEtleV0gPSB7XG4gICAgICAgIC4uLmVudHJ5LFxuICAgICAgICBtb2RlLFxuICAgICAgICB0dGwsXG4gICAgICAgIHZhbHVlLFxuICAgICAgfTtcblxuICAgICAgaWYgKCFkaWRQcmV2aW91c2x5RXhpc3QgfHwgbW9kZSAhPT0gQ2FjaGVNb2RlLlRocm90dGxlKSB7XG4gICAgICAgIHRoaXMucmVmcmVzaFRpbWVvdXQoa2V5LCBzZXJpYWxpemVkS2V5LCB0dGwpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy4jY29uZmlnLmNsZWFyUGVuZGluZ0RlbGV0ZXMpIHtcbiAgICAgICAgdGhpcy5jbGVhclBlbmRpbmdEZWxldGVzT25LZXkoc2VyaWFsaXplZEtleSwgdmFsdWUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfTtcblxuICAgIHJldHVybiBhc2FwID8gY2FsbGJhY2soKSA6IHRoaXMuZW5xdWV1ZShzZXJpYWxpemVkS2V5LCBDYWNoZVRocm90dGxlT3BlcmF0aW9uLlNldCwgY2FsbGJhY2spO1xuICB9XG5cbiAgLyoqXG4gICAqIGF0dGVtcHRzIHRvIHJldHJpZXZlIGEgdmFsdWUgZnJvbSB0aGUgY2FjaGVcbiAgICogaWYgaXQncyBub3QgYXZhaWxhYmxlLCBpdCBzZXRzIHRoZSB2YWx1ZSB1c2luZyB0aGUgcHJvdmlkZWQgZ2VuZXJhdG9yIG1ldGhvZFxuICAgKi9cbiAgYXN5bmMgZ2V0T3JTZXQoXG4gICAga2V5OiBzdHJpbmcsXG4gICAgZ2VuZXJhdG9yOiAoKSA9PiBUIHwgUHJvbWlzZTxUPixcbiAgICB0dGw6IG51bWJlciA9IHRoaXMuI2NvbmZpZy50dGwgYXMgbnVtYmVyLFxuICAgIG1vZGU6IENhY2hlTW9kZSA9IHRoaXMuI2NvbmZpZy5tb2RlIGFzIENhY2hlTW9kZSxcbiAgICBhc2FwPzogYm9vbGVhbixcbiAgKTogUHJvbWlzZTxUPiB7XG4gICAgY29uc3Qgc2VyaWFsaXplZEtleTogc3RyaW5nID0gdGhpcy5zZXJpYWxpemVLZXkoa2V5KTtcbiAgICBjb25zdCBjYWxsYmFjazogKCkgPT4gUHJvbWlzZTxUPiA9IGFzeW5jICgpOiBQcm9taXNlPFQ+ID0+IHtcbiAgICAgIGlmICh0aGlzLiNzdG9yZVtzZXJpYWxpemVkS2V5XSkge1xuICAgICAgICByZXR1cm4gdGhpcy4jc3RvcmVbc2VyaWFsaXplZEtleV0udmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHZhbHVlOiBUID0gYXdhaXQgZ2VuZXJhdG9yKCk7XG4gICAgICBhd2FpdCB0aGlzLnNldChrZXksIHZhbHVlLCB0dGwsIG1vZGUsIHRydWUpO1xuXG4gICAgICBpZiAodGhpcy4jY29uZmlnLmNsZWFyUGVuZGluZ0RlbGV0ZXMpIHtcbiAgICAgICAgdGhpcy5jbGVhclBlbmRpbmdEZWxldGVzT25LZXkoc2VyaWFsaXplZEtleSwgdmFsdWUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfTtcblxuICAgIHJldHVybiBhc2FwXG4gICAgICA/IGNhbGxiYWNrKClcbiAgICAgIDogdGhpcy5lbnF1ZXVlKHNlcmlhbGl6ZWRLZXksIENhY2hlVGhyb3R0bGVPcGVyYXRpb24uR2V0T3JTZXQsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBkZWxldGVzIGFuIGl0ZW0gZnJvbSB0aGUgY2FjaGVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0tleVNlcmlhbGl6ZWQ9ZmFsc2VdXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FzYXBdIGFzYXAgPSBhcyBzb29uIGFzIHBvc3NpYmxlLiBzaG91bGQgdGhpcyBiZSBxdWV1ZWQgb3IgZXhlY3V0ZSBpbW1lZGlhdGVseVxuICAgKiBAcmV0dXJucyB7KFByb21pc2U8VCB8IHVuZGVmaW5lZD4pfVxuICAgKiBAbWVtYmVyb2YgQ2FjaGVUaHJvdHRsZVxuICAgKi9cbiAgYXN5bmMgZGVsKGtleTogc3RyaW5nLCBpc0tleVNlcmlhbGl6ZWQ6IGJvb2xlYW4gPSBmYWxzZSwgYXNhcD86IGJvb2xlYW4pOiBQcm9taXNlPFQgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCBzZXJpYWxpemVkS2V5OiBzdHJpbmcgPSBpc0tleVNlcmlhbGl6ZWQgPyBrZXkgOiB0aGlzLnNlcmlhbGl6ZUtleShrZXkpO1xuICAgIGNvbnN0IGNhbGxiYWNrOiAoKSA9PiBQcm9taXNlPFQ+ID0gYXN5bmMgKCk6IFByb21pc2U8VD4gPT4ge1xuICAgICAgY29uc3QgZW50cnk6IENhY2hlVGhyb3R0bGVFbnRyeTxUPiB8IHVuZGVmaW5lZCA9IHRoaXMuI3N0b3JlW3NlcmlhbGl6ZWRLZXldO1xuICAgICAgbGV0IHZhbHVlOiBUIHwgdW5kZWZpbmVkO1xuXG4gICAgICBpZiAoZW50cnk/LnRpbWVvdXQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGVudHJ5LnRpbWVvdXQgYXMgdW5rbm93biBhcyBOb2RlSlMuVGltZW91dCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICB2YWx1ZSA9IGVudHJ5LnZhbHVlO1xuICAgICAgICBkZWxldGUgdGhpcy4jc3RvcmVbc2VyaWFsaXplZEtleV07XG5cbiAgICAgICAgLy8gVE9ETzogbG9nIGBvbkRlcmVnaXNlcmAgZXJyb3JzXG4gICAgICAgIC8vIFRoZSBgQHNoYXJlZC91dGlscy9zZGtgIGxpYnJhcnkgdGhhdCB0aGlzIGZpbGUgaXMgc3RvcmVkIGluIGlzIHNoYXJlZCB3aXRoIHRoZSBkYXNoYm9hcmQuXG4gICAgICAgIC8vIFVuZm9ydHVuYXRlbHkgd2UgY3VycmVudGx5IGRvbid0IGhhdmUgc3VwcG9ydCBmb3IgdXNpbmcgYEBzaGFyZWQvbG9nZ2VyL3Nka2AgaW4gYW55IGZpbGVzIHVzZWQgYnkgaXQuXG4gICAgICAgIC8vIFRoYXQgbWVhbnMgd2UndmUgZ290IHRvIHNpbGVudGx5IGZhaWwgdGhpcyBmb3Igbm93IPCfmIVcbiAgICAgICAgLy9cbiAgICAgICAgLy8gQWRkaXRpb25hbGx5LCB0aGlzIGlzIG1lc3N5IGJlY2F1c2Ugb25EZXJlZ2lzdGVyIG1heSBiZSBzeW5jaHJvbm91cyBhbmQgbm90IHJldHVybiBhIHByb21pc2UuXG4gICAgICAgIC8vIFdlIGhhZCB0byB3cmFwIGl0IGluIGFuIGFzeW5jaHJvbm91cyBjYWxsIHRvIGdldCB0aGUgcHJvbWlzZS5cbiAgICAgICAgLy8gYHNldEltbWVkaWF0ZWAgb3IgYHByb2Nlc3MubmV4dFRpY2tgIHdhc24ndCBncmVhdCBiZWNhdXNlIHdlIGNhbid0IHJlbGlhYmx5IHRlc3QgdGhhdCBpdCB3b3JrZWQuXG4gICAgICAgIGF3YWl0IChhc3luYyAoKSA9PiB0aGlzLiNjb25maWcub25EZXJlZ2lzdGVyPy4odmFsdWUpKSgpLmNhdGNoKChfZTogRXJyb3IpID0+IHt9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZhbHVlIGFzIFQ7XG4gICAgfTtcblxuICAgIHJldHVybiBhc2FwID8gY2FsbGJhY2soKSA6IHRoaXMuZW5xdWV1ZShzZXJpYWxpemVkS2V5LCBDYWNoZVRocm90dGxlT3BlcmF0aW9uLkRlbCwgY2FsbGJhY2spO1xuICB9XG5cbiAgLyoqXG4gICAqIHJldHVybnMgdGhlIGtleXMgc3RvcmVkIGluIHRoZSBjYWNoZVxuICAgKi9cbiAga2V5cygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuI3N0b3JlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBleGVjdXRlcyBhIG1ldGhvZC4gdGhlIGBrZXlgIGlzIHVzZWQgYXMgYSB1bmlxdWUgaWRlbnRpZmllciBmb3IgcmF0ZS1saW1pdGluZyBjYWxsc1xuICAgKi9cbiAgYXN5bmMgZG8oXG4gICAga2V5OiBzdHJpbmcsXG4gICAgbWV0aG9kOiAoKSA9PiBUIHwgUHJvbWlzZTxUPixcbiAgICB0dGw6IG51bWJlciA9IHRoaXMuI2NvbmZpZy50dGwgYXMgbnVtYmVyLFxuICAgIG1vZGU6IENhY2hlTW9kZSA9IHRoaXMuI2NvbmZpZy5tb2RlIGFzIENhY2hlTW9kZSxcbiAgKTogUHJvbWlzZTxUPiB7XG4gICAgY29uc3Qgc2VyaWFsaXplZEtleTogc3RyaW5nID0gdGhpcy5zZXJpYWxpemVLZXkoa2V5KTtcbiAgICByZXR1cm4gdGhpcy5lbnF1ZXVlKHNlcmlhbGl6ZWRLZXksIENhY2hlVGhyb3R0bGVPcGVyYXRpb24uRG8sIGFzeW5jICgpID0+IHtcbiAgICAgIGlmICh0aGlzLiNzdG9yZVtzZXJpYWxpemVkS2V5XSkge1xuICAgICAgICByZXR1cm4gdGhpcy4jc3RvcmVbc2VyaWFsaXplZEtleV0udmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlc3VsdDogVCA9IGF3YWl0IG1ldGhvZCgpO1xuICAgICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgdGhpcy5zZXQoa2V5LCByZXN1bHQsIHR0bCwgbW9kZSwgdHJ1ZSk7XG4gICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIHJlbW92ZXMgYWxsIHRoZSBpdGVtcyBmcm9tIHRoZSBjYWNoZSwgY2xlYXJzIHRpbWVvdXRzLCBhbmQgY2FsbHMgZGVyZWdpc3RlciBtZXRob2RzXG4gICAqL1xuICBhc3luYyBjbG9zZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLiNzdGF0ZSA9IENhY2hlVGhyb3R0bGVTdGF0ZS5DbG9zZWQ7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoT2JqZWN0LmtleXModGhpcy4jc3RvcmUpLm1hcCgoa2V5OiBzdHJpbmcpID0+IHRoaXMuZGVsKGtleSwgdHJ1ZSwgdHJ1ZSkpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiByZWZyZXNoZXMgYSBzZXQgaW50ZXJ2YWwgZm9yIGNsZWFyaW5nIGFuIGl0ZW0gZnJvbSB0aGUgY2FjaGVcbiAgICogaWYgYW4gZXhpc3RpbmcgaW50ZXJ2YWwgZXhpc3RzLCBpdCByZW1vdmVzIGl0XG4gICAqL1xuICBwcml2YXRlIHJlZnJlc2hUaW1lb3V0KGtleTogc3RyaW5nLCBzZXJpYWxpemVkS2V5OiBzdHJpbmcsIHR0bDogbnVtYmVyKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodGhpcy4jc3RhdGUgPT09IENhY2hlVGhyb3R0bGVTdGF0ZS5DbG9zZWQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgZW50cnk6IENhY2hlVGhyb3R0bGVFbnRyeTxUPiB8IHVuZGVmaW5lZCA9IHRoaXMuI3N0b3JlW3NlcmlhbGl6ZWRLZXldO1xuXG4gICAgaWYgKHR0bCAmJiBlbnRyeT8udGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjbGVhclRpbWVvdXQoZW50cnkudGltZW91dCBhcyB1bmtub3duIGFzIE5vZGVKUy5UaW1lb3V0KTtcbiAgICB9XG5cbiAgICBpZiAodHRsKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW1pc3VzZWQtcHJvbWlzZXNcbiAgICAgIGVudHJ5LnRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMuZGVsKGtleSksIHR0bCkgYXMgdW5rbm93biBhcyBudW1iZXI7XG4gICAgICByZXR1cm4gZW50cnkudGltZW91dDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogcmVtb3ZlcyBhbnkgcGVuZGluZyBkZWxldGUgY2FsbHMgb24gYSBrZXlcbiAgICogQHBhcmFtIGtleVxuICAgKi9cbiAgcHJpdmF0ZSBjbGVhclBlbmRpbmdEZWxldGVzT25LZXkoa2V5OiBzdHJpbmcsIGN1cnJlbnRWYWx1ZTogVCk6IHZvaWQge1xuICAgIHRoaXMuI3F1ZXVlID0gdGhpcy4jcXVldWUuZmlsdGVyKChbX2tleSwgb3BlcmF0aW9uLCBfbWV0aG9kLCBwcm9taXNlXSkgPT4ge1xuICAgICAgaWYgKGtleSA9PT0gX2tleSAmJiBvcGVyYXRpb24gPT09IENhY2hlVGhyb3R0bGVPcGVyYXRpb24uRGVsKSB7XG4gICAgICAgIHByb21pc2UucmVzb2x2ZShjdXJyZW50VmFsdWUpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIGdlbmVyYXRlcyB0aGUga2V5IHVzZWQgZm9yIHN0b3JpbmcgaXRlbXMgaW4gdGhlIGNhY2hlXG4gICAqL1xuICBwcml2YXRlIHNlcmlhbGl6ZUtleShrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuI2NvbmZpZy5zZXJpYWxpemVLZXk/LihrZXkpID8/IGtleTtcbiAgfVxuXG4gIC8qKlxuICAgKiBxdWV1ZXMgYSBtZXRob2QgZm9yIHByb2Nlc3NpbmdcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZW5xdWV1ZShcbiAgICBzZXJpYWxpemVkS2V5OiBzdHJpbmcsXG4gICAgb3BlcmF0aW9uOiBDYWNoZVRocm90dGxlT3BlcmF0aW9uLFxuICAgIG1ldGhvZDogKCkgPT4gUHJvbWlzZTxUPixcbiAgKTogUHJvbWlzZTxUPiB7XG4gICAgY29uc3QgcHJvbWlzZTogRGVmZXJyZWRQcm9taXNlPFQ+ID0gbmV3IERlZmVycmVkUHJvbWlzZTxUPigpO1xuICAgIHRoaXMuI3F1ZXVlLnB1c2goW3NlcmlhbGl6ZWRLZXksIG9wZXJhdGlvbiwgbWV0aG9kLCBwcm9taXNlXSk7XG5cbiAgICBpZiAodGhpcy4jc3RhdGUgPT09IENhY2hlVGhyb3R0bGVTdGF0ZS5JZGxlKSB7XG4gICAgICB0aGlzLmZsdXNoKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH1cblxuICAvKipcbiAgICogY2FsbHMgdGhlIG1ldGhvZHMgaW4gdGhlIHF1ZXVlXG4gICAqL1xuICBwcml2YXRlIGZsdXNoKCk6IHZvaWQge1xuICAgIHRoaXMuI3N0YXRlID0gQ2FjaGVUaHJvdHRsZVN0YXRlLlByb2Nlc3Npbmc7XG5cbiAgICBwcm9jZXNzLm5leHRUaWNrKGFzeW5jICgpID0+IHtcbiAgICAgIHdoaWxlICh0aGlzLiNxdWV1ZS5sZW5ndGggJiYgdGhpcy4jc3RhdGUgIT09IENhY2hlVGhyb3R0bGVTdGF0ZS5DbG9zZWQpIHtcbiAgICAgICAgY29uc3QgY3VycmVudEl0ZW06IFF1ZXVlSXRlbTxUPiB8IHVuZGVmaW5lZCA9IHRoaXMuI3F1ZXVlLnNoaWZ0KCk7XG4gICAgICAgIGlmIChjdXJyZW50SXRlbSkge1xuICAgICAgICAgIGNvbnN0IFssICwgY3VycmVudE1ldGhvZCwgY3VycmVudFByb21pc2VdID0gY3VycmVudEl0ZW07XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IG91dHB1dDogVCA9IGF3YWl0IGN1cnJlbnRNZXRob2QoKTtcbiAgICAgICAgICAgIGN1cnJlbnRQcm9taXNlLnJlc29sdmUob3V0cHV0KTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjdXJyZW50UHJvbWlzZS5yZWplY3QoZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuI3N0YXRlID0gQ2FjaGVUaHJvdHRsZVN0YXRlLklkbGU7XG4gICAgfSk7XG4gIH1cbn1cbiIsInZhciBoYXNoID0gZXhwb3J0cztcblxuaGFzaC51dGlscyA9IHJlcXVpcmUoJy4vaGFzaC91dGlscycpO1xuaGFzaC5jb21tb24gPSByZXF1aXJlKCcuL2hhc2gvY29tbW9uJyk7XG5oYXNoLnNoYSA9IHJlcXVpcmUoJy4vaGFzaC9zaGEnKTtcbmhhc2gucmlwZW1kID0gcmVxdWlyZSgnLi9oYXNoL3JpcGVtZCcpO1xuaGFzaC5obWFjID0gcmVxdWlyZSgnLi9oYXNoL2htYWMnKTtcblxuLy8gUHJveHkgaGFzaCBmdW5jdGlvbnMgdG8gdGhlIG1haW4gb2JqZWN0XG5oYXNoLnNoYTEgPSBoYXNoLnNoYS5zaGExO1xuaGFzaC5zaGEyNTYgPSBoYXNoLnNoYS5zaGEyNTY7XG5oYXNoLnNoYTIyNCA9IGhhc2guc2hhLnNoYTIyNDtcbmhhc2guc2hhMzg0ID0gaGFzaC5zaGEuc2hhMzg0O1xuaGFzaC5zaGE1MTIgPSBoYXNoLnNoYS5zaGE1MTI7XG5oYXNoLnJpcGVtZDE2MCA9IGhhc2gucmlwZW1kLnJpcGVtZDE2MDtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcblxuZnVuY3Rpb24gQmxvY2tIYXNoKCkge1xuICB0aGlzLnBlbmRpbmcgPSBudWxsO1xuICB0aGlzLnBlbmRpbmdUb3RhbCA9IDA7XG4gIHRoaXMuYmxvY2tTaXplID0gdGhpcy5jb25zdHJ1Y3Rvci5ibG9ja1NpemU7XG4gIHRoaXMub3V0U2l6ZSA9IHRoaXMuY29uc3RydWN0b3Iub3V0U2l6ZTtcbiAgdGhpcy5obWFjU3RyZW5ndGggPSB0aGlzLmNvbnN0cnVjdG9yLmhtYWNTdHJlbmd0aDtcbiAgdGhpcy5wYWRMZW5ndGggPSB0aGlzLmNvbnN0cnVjdG9yLnBhZExlbmd0aCAvIDg7XG4gIHRoaXMuZW5kaWFuID0gJ2JpZyc7XG5cbiAgdGhpcy5fZGVsdGE4ID0gdGhpcy5ibG9ja1NpemUgLyA4O1xuICB0aGlzLl9kZWx0YTMyID0gdGhpcy5ibG9ja1NpemUgLyAzMjtcbn1cbmV4cG9ydHMuQmxvY2tIYXNoID0gQmxvY2tIYXNoO1xuXG5CbG9ja0hhc2gucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIHVwZGF0ZShtc2csIGVuYykge1xuICAvLyBDb252ZXJ0IG1lc3NhZ2UgdG8gYXJyYXksIHBhZCBpdCwgYW5kIGpvaW4gaW50byAzMmJpdCBibG9ja3NcbiAgbXNnID0gdXRpbHMudG9BcnJheShtc2csIGVuYyk7XG4gIGlmICghdGhpcy5wZW5kaW5nKVxuICAgIHRoaXMucGVuZGluZyA9IG1zZztcbiAgZWxzZVxuICAgIHRoaXMucGVuZGluZyA9IHRoaXMucGVuZGluZy5jb25jYXQobXNnKTtcbiAgdGhpcy5wZW5kaW5nVG90YWwgKz0gbXNnLmxlbmd0aDtcblxuICAvLyBFbm91Z2ggZGF0YSwgdHJ5IHVwZGF0aW5nXG4gIGlmICh0aGlzLnBlbmRpbmcubGVuZ3RoID49IHRoaXMuX2RlbHRhOCkge1xuICAgIG1zZyA9IHRoaXMucGVuZGluZztcblxuICAgIC8vIFByb2Nlc3MgcGVuZGluZyBkYXRhIGluIGJsb2Nrc1xuICAgIHZhciByID0gbXNnLmxlbmd0aCAlIHRoaXMuX2RlbHRhODtcbiAgICB0aGlzLnBlbmRpbmcgPSBtc2cuc2xpY2UobXNnLmxlbmd0aCAtIHIsIG1zZy5sZW5ndGgpO1xuICAgIGlmICh0aGlzLnBlbmRpbmcubGVuZ3RoID09PSAwKVxuICAgICAgdGhpcy5wZW5kaW5nID0gbnVsbDtcblxuICAgIG1zZyA9IHV0aWxzLmpvaW4zMihtc2csIDAsIG1zZy5sZW5ndGggLSByLCB0aGlzLmVuZGlhbik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpICs9IHRoaXMuX2RlbHRhMzIpXG4gICAgICB0aGlzLl91cGRhdGUobXNnLCBpLCBpICsgdGhpcy5fZGVsdGEzMik7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbkJsb2NrSGFzaC5wcm90b3R5cGUuZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICB0aGlzLnVwZGF0ZSh0aGlzLl9wYWQoKSk7XG4gIGFzc2VydCh0aGlzLnBlbmRpbmcgPT09IG51bGwpO1xuXG4gIHJldHVybiB0aGlzLl9kaWdlc3QoZW5jKTtcbn07XG5cbkJsb2NrSGFzaC5wcm90b3R5cGUuX3BhZCA9IGZ1bmN0aW9uIHBhZCgpIHtcbiAgdmFyIGxlbiA9IHRoaXMucGVuZGluZ1RvdGFsO1xuICB2YXIgYnl0ZXMgPSB0aGlzLl9kZWx0YTg7XG4gIHZhciBrID0gYnl0ZXMgLSAoKGxlbiArIHRoaXMucGFkTGVuZ3RoKSAlIGJ5dGVzKTtcbiAgdmFyIHJlcyA9IG5ldyBBcnJheShrICsgdGhpcy5wYWRMZW5ndGgpO1xuICByZXNbMF0gPSAweDgwO1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGs7IGkrKylcbiAgICByZXNbaV0gPSAwO1xuXG4gIC8vIEFwcGVuZCBsZW5ndGhcbiAgbGVuIDw8PSAzO1xuICBpZiAodGhpcy5lbmRpYW4gPT09ICdiaWcnKSB7XG4gICAgZm9yICh2YXIgdCA9IDg7IHQgPCB0aGlzLnBhZExlbmd0aDsgdCsrKVxuICAgICAgcmVzW2krK10gPSAwO1xuXG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMjQpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDE2KSAmIDB4ZmY7XG4gICAgcmVzW2krK10gPSAobGVuID4+PiA4KSAmIDB4ZmY7XG4gICAgcmVzW2krK10gPSBsZW4gJiAweGZmO1xuICB9IGVsc2Uge1xuICAgIHJlc1tpKytdID0gbGVuICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDgpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDE2KSAmIDB4ZmY7XG4gICAgcmVzW2krK10gPSAobGVuID4+PiAyNCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcblxuICAgIGZvciAodCA9IDg7IHQgPCB0aGlzLnBhZExlbmd0aDsgdCsrKVxuICAgICAgcmVzW2krK10gPSAwO1xuICB9XG5cbiAgcmV0dXJuIHJlcztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcbnZhciBhc3NlcnQgPSByZXF1aXJlKCdtaW5pbWFsaXN0aWMtYXNzZXJ0Jyk7XG5cbmZ1bmN0aW9uIEhtYWMoaGFzaCwga2V5LCBlbmMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEhtYWMpKVxuICAgIHJldHVybiBuZXcgSG1hYyhoYXNoLCBrZXksIGVuYyk7XG4gIHRoaXMuSGFzaCA9IGhhc2g7XG4gIHRoaXMuYmxvY2tTaXplID0gaGFzaC5ibG9ja1NpemUgLyA4O1xuICB0aGlzLm91dFNpemUgPSBoYXNoLm91dFNpemUgLyA4O1xuICB0aGlzLmlubmVyID0gbnVsbDtcbiAgdGhpcy5vdXRlciA9IG51bGw7XG5cbiAgdGhpcy5faW5pdCh1dGlscy50b0FycmF5KGtleSwgZW5jKSk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IEhtYWM7XG5cbkhtYWMucHJvdG90eXBlLl9pbml0ID0gZnVuY3Rpb24gaW5pdChrZXkpIHtcbiAgLy8gU2hvcnRlbiBrZXksIGlmIG5lZWRlZFxuICBpZiAoa2V5Lmxlbmd0aCA+IHRoaXMuYmxvY2tTaXplKVxuICAgIGtleSA9IG5ldyB0aGlzLkhhc2goKS51cGRhdGUoa2V5KS5kaWdlc3QoKTtcbiAgYXNzZXJ0KGtleS5sZW5ndGggPD0gdGhpcy5ibG9ja1NpemUpO1xuXG4gIC8vIEFkZCBwYWRkaW5nIHRvIGtleVxuICBmb3IgKHZhciBpID0ga2V5Lmxlbmd0aDsgaSA8IHRoaXMuYmxvY2tTaXplOyBpKyspXG4gICAga2V5LnB1c2goMCk7XG5cbiAgZm9yIChpID0gMDsgaSA8IGtleS5sZW5ndGg7IGkrKylcbiAgICBrZXlbaV0gXj0gMHgzNjtcbiAgdGhpcy5pbm5lciA9IG5ldyB0aGlzLkhhc2goKS51cGRhdGUoa2V5KTtcblxuICAvLyAweDM2IF4gMHg1YyA9IDB4NmFcbiAgZm9yIChpID0gMDsgaSA8IGtleS5sZW5ndGg7IGkrKylcbiAgICBrZXlbaV0gXj0gMHg2YTtcbiAgdGhpcy5vdXRlciA9IG5ldyB0aGlzLkhhc2goKS51cGRhdGUoa2V5KTtcbn07XG5cbkhtYWMucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIHVwZGF0ZShtc2csIGVuYykge1xuICB0aGlzLmlubmVyLnVwZGF0ZShtc2csIGVuYyk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuSG1hYy5wcm90b3R5cGUuZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICB0aGlzLm91dGVyLnVwZGF0ZSh0aGlzLmlubmVyLmRpZ2VzdCgpKTtcbiAgcmV0dXJuIHRoaXMub3V0ZXIuZGlnZXN0KGVuYyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi9jb21tb24nKTtcblxudmFyIHJvdGwzMiA9IHV0aWxzLnJvdGwzMjtcbnZhciBzdW0zMiA9IHV0aWxzLnN1bTMyO1xudmFyIHN1bTMyXzMgPSB1dGlscy5zdW0zMl8zO1xudmFyIHN1bTMyXzQgPSB1dGlscy5zdW0zMl80O1xudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbmZ1bmN0aW9uIFJJUEVNRDE2MCgpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJJUEVNRDE2MCkpXG4gICAgcmV0dXJuIG5ldyBSSVBFTUQxNjAoKTtcblxuICBCbG9ja0hhc2guY2FsbCh0aGlzKTtcblxuICB0aGlzLmggPSBbIDB4Njc0NTIzMDEsIDB4ZWZjZGFiODksIDB4OThiYWRjZmUsIDB4MTAzMjU0NzYsIDB4YzNkMmUxZjAgXTtcbiAgdGhpcy5lbmRpYW4gPSAnbGl0dGxlJztcbn1cbnV0aWxzLmluaGVyaXRzKFJJUEVNRDE2MCwgQmxvY2tIYXNoKTtcbmV4cG9ydHMucmlwZW1kMTYwID0gUklQRU1EMTYwO1xuXG5SSVBFTUQxNjAuYmxvY2tTaXplID0gNTEyO1xuUklQRU1EMTYwLm91dFNpemUgPSAxNjA7XG5SSVBFTUQxNjAuaG1hY1N0cmVuZ3RoID0gMTkyO1xuUklQRU1EMTYwLnBhZExlbmd0aCA9IDY0O1xuXG5SSVBFTUQxNjAucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgQSA9IHRoaXMuaFswXTtcbiAgdmFyIEIgPSB0aGlzLmhbMV07XG4gIHZhciBDID0gdGhpcy5oWzJdO1xuICB2YXIgRCA9IHRoaXMuaFszXTtcbiAgdmFyIEUgPSB0aGlzLmhbNF07XG4gIHZhciBBaCA9IEE7XG4gIHZhciBCaCA9IEI7XG4gIHZhciBDaCA9IEM7XG4gIHZhciBEaCA9IEQ7XG4gIHZhciBFaCA9IEU7XG4gIGZvciAodmFyIGogPSAwOyBqIDwgODA7IGorKykge1xuICAgIHZhciBUID0gc3VtMzIoXG4gICAgICByb3RsMzIoXG4gICAgICAgIHN1bTMyXzQoQSwgZihqLCBCLCBDLCBEKSwgbXNnW3Jbal0gKyBzdGFydF0sIEsoaikpLFxuICAgICAgICBzW2pdKSxcbiAgICAgIEUpO1xuICAgIEEgPSBFO1xuICAgIEUgPSBEO1xuICAgIEQgPSByb3RsMzIoQywgMTApO1xuICAgIEMgPSBCO1xuICAgIEIgPSBUO1xuICAgIFQgPSBzdW0zMihcbiAgICAgIHJvdGwzMihcbiAgICAgICAgc3VtMzJfNChBaCwgZig3OSAtIGosIEJoLCBDaCwgRGgpLCBtc2dbcmhbal0gKyBzdGFydF0sIEtoKGopKSxcbiAgICAgICAgc2hbal0pLFxuICAgICAgRWgpO1xuICAgIEFoID0gRWg7XG4gICAgRWggPSBEaDtcbiAgICBEaCA9IHJvdGwzMihDaCwgMTApO1xuICAgIENoID0gQmg7XG4gICAgQmggPSBUO1xuICB9XG4gIFQgPSBzdW0zMl8zKHRoaXMuaFsxXSwgQywgRGgpO1xuICB0aGlzLmhbMV0gPSBzdW0zMl8zKHRoaXMuaFsyXSwgRCwgRWgpO1xuICB0aGlzLmhbMl0gPSBzdW0zMl8zKHRoaXMuaFszXSwgRSwgQWgpO1xuICB0aGlzLmhbM10gPSBzdW0zMl8zKHRoaXMuaFs0XSwgQSwgQmgpO1xuICB0aGlzLmhbNF0gPSBzdW0zMl8zKHRoaXMuaFswXSwgQiwgQ2gpO1xuICB0aGlzLmhbMF0gPSBUO1xufTtcblxuUklQRU1EMTYwLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdsaXR0bGUnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2xpdHRsZScpO1xufTtcblxuZnVuY3Rpb24gZihqLCB4LCB5LCB6KSB7XG4gIGlmIChqIDw9IDE1KVxuICAgIHJldHVybiB4IF4geSBeIHo7XG4gIGVsc2UgaWYgKGogPD0gMzEpXG4gICAgcmV0dXJuICh4ICYgeSkgfCAoKH54KSAmIHopO1xuICBlbHNlIGlmIChqIDw9IDQ3KVxuICAgIHJldHVybiAoeCB8ICh+eSkpIF4gejtcbiAgZWxzZSBpZiAoaiA8PSA2MylcbiAgICByZXR1cm4gKHggJiB6KSB8ICh5ICYgKH56KSk7XG4gIGVsc2VcbiAgICByZXR1cm4geCBeICh5IHwgKH56KSk7XG59XG5cbmZ1bmN0aW9uIEsoaikge1xuICBpZiAoaiA8PSAxNSlcbiAgICByZXR1cm4gMHgwMDAwMDAwMDtcbiAgZWxzZSBpZiAoaiA8PSAzMSlcbiAgICByZXR1cm4gMHg1YTgyNzk5OTtcbiAgZWxzZSBpZiAoaiA8PSA0NylcbiAgICByZXR1cm4gMHg2ZWQ5ZWJhMTtcbiAgZWxzZSBpZiAoaiA8PSA2MylcbiAgICByZXR1cm4gMHg4ZjFiYmNkYztcbiAgZWxzZVxuICAgIHJldHVybiAweGE5NTNmZDRlO1xufVxuXG5mdW5jdGlvbiBLaChqKSB7XG4gIGlmIChqIDw9IDE1KVxuICAgIHJldHVybiAweDUwYTI4YmU2O1xuICBlbHNlIGlmIChqIDw9IDMxKVxuICAgIHJldHVybiAweDVjNGRkMTI0O1xuICBlbHNlIGlmIChqIDw9IDQ3KVxuICAgIHJldHVybiAweDZkNzAzZWYzO1xuICBlbHNlIGlmIChqIDw9IDYzKVxuICAgIHJldHVybiAweDdhNmQ3NmU5O1xuICBlbHNlXG4gICAgcmV0dXJuIDB4MDAwMDAwMDA7XG59XG5cbnZhciByID0gW1xuICAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LFxuICA3LCA0LCAxMywgMSwgMTAsIDYsIDE1LCAzLCAxMiwgMCwgOSwgNSwgMiwgMTQsIDExLCA4LFxuICAzLCAxMCwgMTQsIDQsIDksIDE1LCA4LCAxLCAyLCA3LCAwLCA2LCAxMywgMTEsIDUsIDEyLFxuICAxLCA5LCAxMSwgMTAsIDAsIDgsIDEyLCA0LCAxMywgMywgNywgMTUsIDE0LCA1LCA2LCAyLFxuICA0LCAwLCA1LCA5LCA3LCAxMiwgMiwgMTAsIDE0LCAxLCAzLCA4LCAxMSwgNiwgMTUsIDEzXG5dO1xuXG52YXIgcmggPSBbXG4gIDUsIDE0LCA3LCAwLCA5LCAyLCAxMSwgNCwgMTMsIDYsIDE1LCA4LCAxLCAxMCwgMywgMTIsXG4gIDYsIDExLCAzLCA3LCAwLCAxMywgNSwgMTAsIDE0LCAxNSwgOCwgMTIsIDQsIDksIDEsIDIsXG4gIDE1LCA1LCAxLCAzLCA3LCAxNCwgNiwgOSwgMTEsIDgsIDEyLCAyLCAxMCwgMCwgNCwgMTMsXG4gIDgsIDYsIDQsIDEsIDMsIDExLCAxNSwgMCwgNSwgMTIsIDIsIDEzLCA5LCA3LCAxMCwgMTQsXG4gIDEyLCAxNSwgMTAsIDQsIDEsIDUsIDgsIDcsIDYsIDIsIDEzLCAxNCwgMCwgMywgOSwgMTFcbl07XG5cbnZhciBzID0gW1xuICAxMSwgMTQsIDE1LCAxMiwgNSwgOCwgNywgOSwgMTEsIDEzLCAxNCwgMTUsIDYsIDcsIDksIDgsXG4gIDcsIDYsIDgsIDEzLCAxMSwgOSwgNywgMTUsIDcsIDEyLCAxNSwgOSwgMTEsIDcsIDEzLCAxMixcbiAgMTEsIDEzLCA2LCA3LCAxNCwgOSwgMTMsIDE1LCAxNCwgOCwgMTMsIDYsIDUsIDEyLCA3LCA1LFxuICAxMSwgMTIsIDE0LCAxNSwgMTQsIDE1LCA5LCA4LCA5LCAxNCwgNSwgNiwgOCwgNiwgNSwgMTIsXG4gIDksIDE1LCA1LCAxMSwgNiwgOCwgMTMsIDEyLCA1LCAxMiwgMTMsIDE0LCAxMSwgOCwgNSwgNlxuXTtcblxudmFyIHNoID0gW1xuICA4LCA5LCA5LCAxMSwgMTMsIDE1LCAxNSwgNSwgNywgNywgOCwgMTEsIDE0LCAxNCwgMTIsIDYsXG4gIDksIDEzLCAxNSwgNywgMTIsIDgsIDksIDExLCA3LCA3LCAxMiwgNywgNiwgMTUsIDEzLCAxMSxcbiAgOSwgNywgMTUsIDExLCA4LCA2LCA2LCAxNCwgMTIsIDEzLCA1LCAxNCwgMTMsIDEzLCA3LCA1LFxuICAxNSwgNSwgOCwgMTEsIDE0LCAxNCwgNiwgMTQsIDYsIDksIDEyLCA5LCAxMiwgNSwgMTUsIDgsXG4gIDgsIDUsIDEyLCA5LCAxMiwgNSwgMTQsIDYsIDgsIDEzLCA2LCA1LCAxNSwgMTMsIDExLCAxMVxuXTtcbiIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5zaGExID0gcmVxdWlyZSgnLi9zaGEvMScpO1xuZXhwb3J0cy5zaGEyMjQgPSByZXF1aXJlKCcuL3NoYS8yMjQnKTtcbmV4cG9ydHMuc2hhMjU2ID0gcmVxdWlyZSgnLi9zaGEvMjU2Jyk7XG5leHBvcnRzLnNoYTM4NCA9IHJlcXVpcmUoJy4vc2hhLzM4NCcpO1xuZXhwb3J0cy5zaGE1MTIgPSByZXF1aXJlKCcuL3NoYS81MTInKTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBjb21tb24gPSByZXF1aXJlKCcuLi9jb21tb24nKTtcbnZhciBzaGFDb21tb24gPSByZXF1aXJlKCcuL2NvbW1vbicpO1xuXG52YXIgcm90bDMyID0gdXRpbHMucm90bDMyO1xudmFyIHN1bTMyID0gdXRpbHMuc3VtMzI7XG52YXIgc3VtMzJfNSA9IHV0aWxzLnN1bTMyXzU7XG52YXIgZnRfMSA9IHNoYUNvbW1vbi5mdF8xO1xudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbnZhciBzaGExX0sgPSBbXG4gIDB4NUE4Mjc5OTksIDB4NkVEOUVCQTEsXG4gIDB4OEYxQkJDREMsIDB4Q0E2MkMxRDZcbl07XG5cbmZ1bmN0aW9uIFNIQTEoKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTSEExKSlcbiAgICByZXR1cm4gbmV3IFNIQTEoKTtcblxuICBCbG9ja0hhc2guY2FsbCh0aGlzKTtcbiAgdGhpcy5oID0gW1xuICAgIDB4Njc0NTIzMDEsIDB4ZWZjZGFiODksIDB4OThiYWRjZmUsXG4gICAgMHgxMDMyNTQ3NiwgMHhjM2QyZTFmMCBdO1xuICB0aGlzLlcgPSBuZXcgQXJyYXkoODApO1xufVxuXG51dGlscy5pbmhlcml0cyhTSEExLCBCbG9ja0hhc2gpO1xubW9kdWxlLmV4cG9ydHMgPSBTSEExO1xuXG5TSEExLmJsb2NrU2l6ZSA9IDUxMjtcblNIQTEub3V0U2l6ZSA9IDE2MDtcblNIQTEuaG1hY1N0cmVuZ3RoID0gODA7XG5TSEExLnBhZExlbmd0aCA9IDY0O1xuXG5TSEExLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gX3VwZGF0ZShtc2csIHN0YXJ0KSB7XG4gIHZhciBXID0gdGhpcy5XO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMTY7IGkrKylcbiAgICBXW2ldID0gbXNnW3N0YXJ0ICsgaV07XG5cbiAgZm9yKDsgaSA8IFcubGVuZ3RoOyBpKyspXG4gICAgV1tpXSA9IHJvdGwzMihXW2kgLSAzXSBeIFdbaSAtIDhdIF4gV1tpIC0gMTRdIF4gV1tpIC0gMTZdLCAxKTtcblxuICB2YXIgYSA9IHRoaXMuaFswXTtcbiAgdmFyIGIgPSB0aGlzLmhbMV07XG4gIHZhciBjID0gdGhpcy5oWzJdO1xuICB2YXIgZCA9IHRoaXMuaFszXTtcbiAgdmFyIGUgPSB0aGlzLmhbNF07XG5cbiAgZm9yIChpID0gMDsgaSA8IFcubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcyA9IH5+KGkgLyAyMCk7XG4gICAgdmFyIHQgPSBzdW0zMl81KHJvdGwzMihhLCA1KSwgZnRfMShzLCBiLCBjLCBkKSwgZSwgV1tpXSwgc2hhMV9LW3NdKTtcbiAgICBlID0gZDtcbiAgICBkID0gYztcbiAgICBjID0gcm90bDMyKGIsIDMwKTtcbiAgICBiID0gYTtcbiAgICBhID0gdDtcbiAgfVxuXG4gIHRoaXMuaFswXSA9IHN1bTMyKHRoaXMuaFswXSwgYSk7XG4gIHRoaXMuaFsxXSA9IHN1bTMyKHRoaXMuaFsxXSwgYik7XG4gIHRoaXMuaFsyXSA9IHN1bTMyKHRoaXMuaFsyXSwgYyk7XG4gIHRoaXMuaFszXSA9IHN1bTMyKHRoaXMuaFszXSwgZCk7XG4gIHRoaXMuaFs0XSA9IHN1bTMyKHRoaXMuaFs0XSwgZSk7XG59O1xuXG5TSEExLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2JpZycpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBTSEEyNTYgPSByZXF1aXJlKCcuLzI1NicpO1xuXG5mdW5jdGlvbiBTSEEyMjQoKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTSEEyMjQpKVxuICAgIHJldHVybiBuZXcgU0hBMjI0KCk7XG5cbiAgU0hBMjU2LmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFtcbiAgICAweGMxMDU5ZWQ4LCAweDM2N2NkNTA3LCAweDMwNzBkZDE3LCAweGY3MGU1OTM5LFxuICAgIDB4ZmZjMDBiMzEsIDB4Njg1ODE1MTEsIDB4NjRmOThmYTcsIDB4YmVmYTRmYTQgXTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTIyNCwgU0hBMjU2KTtcbm1vZHVsZS5leHBvcnRzID0gU0hBMjI0O1xuXG5TSEEyMjQuYmxvY2tTaXplID0gNTEyO1xuU0hBMjI0Lm91dFNpemUgPSAyMjQ7XG5TSEEyMjQuaG1hY1N0cmVuZ3RoID0gMTkyO1xuU0hBMjI0LnBhZExlbmd0aCA9IDY0O1xuXG5TSEEyMjQucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIC8vIEp1c3QgdHJ1bmNhdGUgb3V0cHV0XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaC5zbGljZSgwLCA3KSwgJ2JpZycpO1xuICBlbHNlXG4gICAgcmV0dXJuIHV0aWxzLnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsIDcpLCAnYmlnJyk7XG59O1xuXG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi4vY29tbW9uJyk7XG52YXIgc2hhQ29tbW9uID0gcmVxdWlyZSgnLi9jb21tb24nKTtcbnZhciBhc3NlcnQgPSByZXF1aXJlKCdtaW5pbWFsaXN0aWMtYXNzZXJ0Jyk7XG5cbnZhciBzdW0zMiA9IHV0aWxzLnN1bTMyO1xudmFyIHN1bTMyXzQgPSB1dGlscy5zdW0zMl80O1xudmFyIHN1bTMyXzUgPSB1dGlscy5zdW0zMl81O1xudmFyIGNoMzIgPSBzaGFDb21tb24uY2gzMjtcbnZhciBtYWozMiA9IHNoYUNvbW1vbi5tYWozMjtcbnZhciBzMF8yNTYgPSBzaGFDb21tb24uczBfMjU2O1xudmFyIHMxXzI1NiA9IHNoYUNvbW1vbi5zMV8yNTY7XG52YXIgZzBfMjU2ID0gc2hhQ29tbW9uLmcwXzI1NjtcbnZhciBnMV8yNTYgPSBzaGFDb21tb24uZzFfMjU2O1xuXG52YXIgQmxvY2tIYXNoID0gY29tbW9uLkJsb2NrSGFzaDtcblxudmFyIHNoYTI1Nl9LID0gW1xuICAweDQyOGEyZjk4LCAweDcxMzc0NDkxLCAweGI1YzBmYmNmLCAweGU5YjVkYmE1LFxuICAweDM5NTZjMjViLCAweDU5ZjExMWYxLCAweDkyM2Y4MmE0LCAweGFiMWM1ZWQ1LFxuICAweGQ4MDdhYTk4LCAweDEyODM1YjAxLCAweDI0MzE4NWJlLCAweDU1MGM3ZGMzLFxuICAweDcyYmU1ZDc0LCAweDgwZGViMWZlLCAweDliZGMwNmE3LCAweGMxOWJmMTc0LFxuICAweGU0OWI2OWMxLCAweGVmYmU0Nzg2LCAweDBmYzE5ZGM2LCAweDI0MGNhMWNjLFxuICAweDJkZTkyYzZmLCAweDRhNzQ4NGFhLCAweDVjYjBhOWRjLCAweDc2Zjk4OGRhLFxuICAweDk4M2U1MTUyLCAweGE4MzFjNjZkLCAweGIwMDMyN2M4LCAweGJmNTk3ZmM3LFxuICAweGM2ZTAwYmYzLCAweGQ1YTc5MTQ3LCAweDA2Y2E2MzUxLCAweDE0MjkyOTY3LFxuICAweDI3YjcwYTg1LCAweDJlMWIyMTM4LCAweDRkMmM2ZGZjLCAweDUzMzgwZDEzLFxuICAweDY1MGE3MzU0LCAweDc2NmEwYWJiLCAweDgxYzJjOTJlLCAweDkyNzIyYzg1LFxuICAweGEyYmZlOGExLCAweGE4MWE2NjRiLCAweGMyNGI4YjcwLCAweGM3NmM1MWEzLFxuICAweGQxOTJlODE5LCAweGQ2OTkwNjI0LCAweGY0MGUzNTg1LCAweDEwNmFhMDcwLFxuICAweDE5YTRjMTE2LCAweDFlMzc2YzA4LCAweDI3NDg3NzRjLCAweDM0YjBiY2I1LFxuICAweDM5MWMwY2IzLCAweDRlZDhhYTRhLCAweDViOWNjYTRmLCAweDY4MmU2ZmYzLFxuICAweDc0OGY4MmVlLCAweDc4YTU2MzZmLCAweDg0Yzg3ODE0LCAweDhjYzcwMjA4LFxuICAweDkwYmVmZmZhLCAweGE0NTA2Y2ViLCAweGJlZjlhM2Y3LCAweGM2NzE3OGYyXG5dO1xuXG5mdW5jdGlvbiBTSEEyNTYoKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTSEEyNTYpKVxuICAgIHJldHVybiBuZXcgU0hBMjU2KCk7XG5cbiAgQmxvY2tIYXNoLmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFtcbiAgICAweDZhMDllNjY3LCAweGJiNjdhZTg1LCAweDNjNmVmMzcyLCAweGE1NGZmNTNhLFxuICAgIDB4NTEwZTUyN2YsIDB4OWIwNTY4OGMsIDB4MWY4M2Q5YWIsIDB4NWJlMGNkMTlcbiAgXTtcbiAgdGhpcy5rID0gc2hhMjU2X0s7XG4gIHRoaXMuVyA9IG5ldyBBcnJheSg2NCk7XG59XG51dGlscy5pbmhlcml0cyhTSEEyNTYsIEJsb2NrSGFzaCk7XG5tb2R1bGUuZXhwb3J0cyA9IFNIQTI1NjtcblxuU0hBMjU2LmJsb2NrU2l6ZSA9IDUxMjtcblNIQTI1Ni5vdXRTaXplID0gMjU2O1xuU0hBMjU2LmhtYWNTdHJlbmd0aCA9IDE5MjtcblNIQTI1Ni5wYWRMZW5ndGggPSA2NDtcblxuU0hBMjU2LnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gX3VwZGF0ZShtc2csIHN0YXJ0KSB7XG4gIHZhciBXID0gdGhpcy5XO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMTY7IGkrKylcbiAgICBXW2ldID0gbXNnW3N0YXJ0ICsgaV07XG4gIGZvciAoOyBpIDwgVy5sZW5ndGg7IGkrKylcbiAgICBXW2ldID0gc3VtMzJfNChnMV8yNTYoV1tpIC0gMl0pLCBXW2kgLSA3XSwgZzBfMjU2KFdbaSAtIDE1XSksIFdbaSAtIDE2XSk7XG5cbiAgdmFyIGEgPSB0aGlzLmhbMF07XG4gIHZhciBiID0gdGhpcy5oWzFdO1xuICB2YXIgYyA9IHRoaXMuaFsyXTtcbiAgdmFyIGQgPSB0aGlzLmhbM107XG4gIHZhciBlID0gdGhpcy5oWzRdO1xuICB2YXIgZiA9IHRoaXMuaFs1XTtcbiAgdmFyIGcgPSB0aGlzLmhbNl07XG4gIHZhciBoID0gdGhpcy5oWzddO1xuXG4gIGFzc2VydCh0aGlzLmsubGVuZ3RoID09PSBXLmxlbmd0aCk7XG4gIGZvciAoaSA9IDA7IGkgPCBXLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIFQxID0gc3VtMzJfNShoLCBzMV8yNTYoZSksIGNoMzIoZSwgZiwgZyksIHRoaXMua1tpXSwgV1tpXSk7XG4gICAgdmFyIFQyID0gc3VtMzIoczBfMjU2KGEpLCBtYWozMihhLCBiLCBjKSk7XG4gICAgaCA9IGc7XG4gICAgZyA9IGY7XG4gICAgZiA9IGU7XG4gICAgZSA9IHN1bTMyKGQsIFQxKTtcbiAgICBkID0gYztcbiAgICBjID0gYjtcbiAgICBiID0gYTtcbiAgICBhID0gc3VtMzIoVDEsIFQyKTtcbiAgfVxuXG4gIHRoaXMuaFswXSA9IHN1bTMyKHRoaXMuaFswXSwgYSk7XG4gIHRoaXMuaFsxXSA9IHN1bTMyKHRoaXMuaFsxXSwgYik7XG4gIHRoaXMuaFsyXSA9IHN1bTMyKHRoaXMuaFsyXSwgYyk7XG4gIHRoaXMuaFszXSA9IHN1bTMyKHRoaXMuaFszXSwgZCk7XG4gIHRoaXMuaFs0XSA9IHN1bTMyKHRoaXMuaFs0XSwgZSk7XG4gIHRoaXMuaFs1XSA9IHN1bTMyKHRoaXMuaFs1XSwgZik7XG4gIHRoaXMuaFs2XSA9IHN1bTMyKHRoaXMuaFs2XSwgZyk7XG4gIHRoaXMuaFs3XSA9IHN1bTMyKHRoaXMuaFs3XSwgaCk7XG59O1xuXG5TSEEyNTYucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaCwgJ2JpZycpO1xuICBlbHNlXG4gICAgcmV0dXJuIHV0aWxzLnNwbGl0MzIodGhpcy5oLCAnYmlnJyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG52YXIgU0hBNTEyID0gcmVxdWlyZSgnLi81MTInKTtcblxuZnVuY3Rpb24gU0hBMzg0KCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMzg0KSlcbiAgICByZXR1cm4gbmV3IFNIQTM4NCgpO1xuXG4gIFNIQTUxMi5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHhjYmJiOWQ1ZCwgMHhjMTA1OWVkOCxcbiAgICAweDYyOWEyOTJhLCAweDM2N2NkNTA3LFxuICAgIDB4OTE1OTAxNWEsIDB4MzA3MGRkMTcsXG4gICAgMHgxNTJmZWNkOCwgMHhmNzBlNTkzOSxcbiAgICAweDY3MzMyNjY3LCAweGZmYzAwYjMxLFxuICAgIDB4OGViNDRhODcsIDB4Njg1ODE1MTEsXG4gICAgMHhkYjBjMmUwZCwgMHg2NGY5OGZhNyxcbiAgICAweDQ3YjU0ODFkLCAweGJlZmE0ZmE0IF07XG59XG51dGlscy5pbmhlcml0cyhTSEEzODQsIFNIQTUxMik7XG5tb2R1bGUuZXhwb3J0cyA9IFNIQTM4NDtcblxuU0hBMzg0LmJsb2NrU2l6ZSA9IDEwMjQ7XG5TSEEzODQub3V0U2l6ZSA9IDM4NDtcblNIQTM4NC5obWFjU3RyZW5ndGggPSAxOTI7XG5TSEEzODQucGFkTGVuZ3RoID0gMTI4O1xuXG5TSEEzODQucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaC5zbGljZSgwLCAxMiksICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaC5zbGljZSgwLCAxMiksICdiaWcnKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi4vY29tbW9uJyk7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xuXG52YXIgcm90cjY0X2hpID0gdXRpbHMucm90cjY0X2hpO1xudmFyIHJvdHI2NF9sbyA9IHV0aWxzLnJvdHI2NF9sbztcbnZhciBzaHI2NF9oaSA9IHV0aWxzLnNocjY0X2hpO1xudmFyIHNocjY0X2xvID0gdXRpbHMuc2hyNjRfbG87XG52YXIgc3VtNjQgPSB1dGlscy5zdW02NDtcbnZhciBzdW02NF9oaSA9IHV0aWxzLnN1bTY0X2hpO1xudmFyIHN1bTY0X2xvID0gdXRpbHMuc3VtNjRfbG87XG52YXIgc3VtNjRfNF9oaSA9IHV0aWxzLnN1bTY0XzRfaGk7XG52YXIgc3VtNjRfNF9sbyA9IHV0aWxzLnN1bTY0XzRfbG87XG52YXIgc3VtNjRfNV9oaSA9IHV0aWxzLnN1bTY0XzVfaGk7XG52YXIgc3VtNjRfNV9sbyA9IHV0aWxzLnN1bTY0XzVfbG87XG5cbnZhciBCbG9ja0hhc2ggPSBjb21tb24uQmxvY2tIYXNoO1xuXG52YXIgc2hhNTEyX0sgPSBbXG4gIDB4NDI4YTJmOTgsIDB4ZDcyOGFlMjIsIDB4NzEzNzQ0OTEsIDB4MjNlZjY1Y2QsXG4gIDB4YjVjMGZiY2YsIDB4ZWM0ZDNiMmYsIDB4ZTliNWRiYTUsIDB4ODE4OWRiYmMsXG4gIDB4Mzk1NmMyNWIsIDB4ZjM0OGI1MzgsIDB4NTlmMTExZjEsIDB4YjYwNWQwMTksXG4gIDB4OTIzZjgyYTQsIDB4YWYxOTRmOWIsIDB4YWIxYzVlZDUsIDB4ZGE2ZDgxMTgsXG4gIDB4ZDgwN2FhOTgsIDB4YTMwMzAyNDIsIDB4MTI4MzViMDEsIDB4NDU3MDZmYmUsXG4gIDB4MjQzMTg1YmUsIDB4NGVlNGIyOGMsIDB4NTUwYzdkYzMsIDB4ZDVmZmI0ZTIsXG4gIDB4NzJiZTVkNzQsIDB4ZjI3Yjg5NmYsIDB4ODBkZWIxZmUsIDB4M2IxNjk2YjEsXG4gIDB4OWJkYzA2YTcsIDB4MjVjNzEyMzUsIDB4YzE5YmYxNzQsIDB4Y2Y2OTI2OTQsXG4gIDB4ZTQ5YjY5YzEsIDB4OWVmMTRhZDIsIDB4ZWZiZTQ3ODYsIDB4Mzg0ZjI1ZTMsXG4gIDB4MGZjMTlkYzYsIDB4OGI4Y2Q1YjUsIDB4MjQwY2ExY2MsIDB4NzdhYzljNjUsXG4gIDB4MmRlOTJjNmYsIDB4NTkyYjAyNzUsIDB4NGE3NDg0YWEsIDB4NmVhNmU0ODMsXG4gIDB4NWNiMGE5ZGMsIDB4YmQ0MWZiZDQsIDB4NzZmOTg4ZGEsIDB4ODMxMTUzYjUsXG4gIDB4OTgzZTUxNTIsIDB4ZWU2NmRmYWIsIDB4YTgzMWM2NmQsIDB4MmRiNDMyMTAsXG4gIDB4YjAwMzI3YzgsIDB4OThmYjIxM2YsIDB4YmY1OTdmYzcsIDB4YmVlZjBlZTQsXG4gIDB4YzZlMDBiZjMsIDB4M2RhODhmYzIsIDB4ZDVhNzkxNDcsIDB4OTMwYWE3MjUsXG4gIDB4MDZjYTYzNTEsIDB4ZTAwMzgyNmYsIDB4MTQyOTI5NjcsIDB4MGEwZTZlNzAsXG4gIDB4MjdiNzBhODUsIDB4NDZkMjJmZmMsIDB4MmUxYjIxMzgsIDB4NWMyNmM5MjYsXG4gIDB4NGQyYzZkZmMsIDB4NWFjNDJhZWQsIDB4NTMzODBkMTMsIDB4OWQ5NWIzZGYsXG4gIDB4NjUwYTczNTQsIDB4OGJhZjYzZGUsIDB4NzY2YTBhYmIsIDB4M2M3N2IyYTgsXG4gIDB4ODFjMmM5MmUsIDB4NDdlZGFlZTYsIDB4OTI3MjJjODUsIDB4MTQ4MjM1M2IsXG4gIDB4YTJiZmU4YTEsIDB4NGNmMTAzNjQsIDB4YTgxYTY2NGIsIDB4YmM0MjMwMDEsXG4gIDB4YzI0YjhiNzAsIDB4ZDBmODk3OTEsIDB4Yzc2YzUxYTMsIDB4MDY1NGJlMzAsXG4gIDB4ZDE5MmU4MTksIDB4ZDZlZjUyMTgsIDB4ZDY5OTA2MjQsIDB4NTU2NWE5MTAsXG4gIDB4ZjQwZTM1ODUsIDB4NTc3MTIwMmEsIDB4MTA2YWEwNzAsIDB4MzJiYmQxYjgsXG4gIDB4MTlhNGMxMTYsIDB4YjhkMmQwYzgsIDB4MWUzNzZjMDgsIDB4NTE0MWFiNTMsXG4gIDB4Mjc0ODc3NGMsIDB4ZGY4ZWViOTksIDB4MzRiMGJjYjUsIDB4ZTE5YjQ4YTgsXG4gIDB4MzkxYzBjYjMsIDB4YzVjOTVhNjMsIDB4NGVkOGFhNGEsIDB4ZTM0MThhY2IsXG4gIDB4NWI5Y2NhNGYsIDB4Nzc2M2UzNzMsIDB4NjgyZTZmZjMsIDB4ZDZiMmI4YTMsXG4gIDB4NzQ4ZjgyZWUsIDB4NWRlZmIyZmMsIDB4NzhhNTYzNmYsIDB4NDMxNzJmNjAsXG4gIDB4ODRjODc4MTQsIDB4YTFmMGFiNzIsIDB4OGNjNzAyMDgsIDB4MWE2NDM5ZWMsXG4gIDB4OTBiZWZmZmEsIDB4MjM2MzFlMjgsIDB4YTQ1MDZjZWIsIDB4ZGU4MmJkZTksXG4gIDB4YmVmOWEzZjcsIDB4YjJjNjc5MTUsIDB4YzY3MTc4ZjIsIDB4ZTM3MjUzMmIsXG4gIDB4Y2EyNzNlY2UsIDB4ZWEyNjYxOWMsIDB4ZDE4NmI4YzcsIDB4MjFjMGMyMDcsXG4gIDB4ZWFkYTdkZDYsIDB4Y2RlMGViMWUsIDB4ZjU3ZDRmN2YsIDB4ZWU2ZWQxNzgsXG4gIDB4MDZmMDY3YWEsIDB4NzIxNzZmYmEsIDB4MGE2MzdkYzUsIDB4YTJjODk4YTYsXG4gIDB4MTEzZjk4MDQsIDB4YmVmOTBkYWUsIDB4MWI3MTBiMzUsIDB4MTMxYzQ3MWIsXG4gIDB4MjhkYjc3ZjUsIDB4MjMwNDdkODQsIDB4MzJjYWFiN2IsIDB4NDBjNzI0OTMsXG4gIDB4M2M5ZWJlMGEsIDB4MTVjOWJlYmMsIDB4NDMxZDY3YzQsIDB4OWMxMDBkNGMsXG4gIDB4NGNjNWQ0YmUsIDB4Y2IzZTQyYjYsIDB4NTk3ZjI5OWMsIDB4ZmM2NTdlMmEsXG4gIDB4NWZjYjZmYWIsIDB4M2FkNmZhZWMsIDB4NmM0NDE5OGMsIDB4NGE0NzU4MTdcbl07XG5cbmZ1bmN0aW9uIFNIQTUxMigpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFNIQTUxMikpXG4gICAgcmV0dXJuIG5ldyBTSEE1MTIoKTtcblxuICBCbG9ja0hhc2guY2FsbCh0aGlzKTtcbiAgdGhpcy5oID0gW1xuICAgIDB4NmEwOWU2NjcsIDB4ZjNiY2M5MDgsXG4gICAgMHhiYjY3YWU4NSwgMHg4NGNhYTczYixcbiAgICAweDNjNmVmMzcyLCAweGZlOTRmODJiLFxuICAgIDB4YTU0ZmY1M2EsIDB4NWYxZDM2ZjEsXG4gICAgMHg1MTBlNTI3ZiwgMHhhZGU2ODJkMSxcbiAgICAweDliMDU2ODhjLCAweDJiM2U2YzFmLFxuICAgIDB4MWY4M2Q5YWIsIDB4ZmI0MWJkNmIsXG4gICAgMHg1YmUwY2QxOSwgMHgxMzdlMjE3OSBdO1xuICB0aGlzLmsgPSBzaGE1MTJfSztcbiAgdGhpcy5XID0gbmV3IEFycmF5KDE2MCk7XG59XG51dGlscy5pbmhlcml0cyhTSEE1MTIsIEJsb2NrSGFzaCk7XG5tb2R1bGUuZXhwb3J0cyA9IFNIQTUxMjtcblxuU0hBNTEyLmJsb2NrU2l6ZSA9IDEwMjQ7XG5TSEE1MTIub3V0U2l6ZSA9IDUxMjtcblNIQTUxMi5obWFjU3RyZW5ndGggPSAxOTI7XG5TSEE1MTIucGFkTGVuZ3RoID0gMTI4O1xuXG5TSEE1MTIucHJvdG90eXBlLl9wcmVwYXJlQmxvY2sgPSBmdW5jdGlvbiBfcHJlcGFyZUJsb2NrKG1zZywgc3RhcnQpIHtcbiAgdmFyIFcgPSB0aGlzLlc7XG5cbiAgLy8gMzIgeCAzMmJpdCB3b3Jkc1xuICBmb3IgKHZhciBpID0gMDsgaSA8IDMyOyBpKyspXG4gICAgV1tpXSA9IG1zZ1tzdGFydCArIGldO1xuICBmb3IgKDsgaSA8IFcubGVuZ3RoOyBpICs9IDIpIHtcbiAgICB2YXIgYzBfaGkgPSBnMV81MTJfaGkoV1tpIC0gNF0sIFdbaSAtIDNdKTsgIC8vIGkgLSAyXG4gICAgdmFyIGMwX2xvID0gZzFfNTEyX2xvKFdbaSAtIDRdLCBXW2kgLSAzXSk7XG4gICAgdmFyIGMxX2hpID0gV1tpIC0gMTRdOyAgLy8gaSAtIDdcbiAgICB2YXIgYzFfbG8gPSBXW2kgLSAxM107XG4gICAgdmFyIGMyX2hpID0gZzBfNTEyX2hpKFdbaSAtIDMwXSwgV1tpIC0gMjldKTsgIC8vIGkgLSAxNVxuICAgIHZhciBjMl9sbyA9IGcwXzUxMl9sbyhXW2kgLSAzMF0sIFdbaSAtIDI5XSk7XG4gICAgdmFyIGMzX2hpID0gV1tpIC0gMzJdOyAgLy8gaSAtIDE2XG4gICAgdmFyIGMzX2xvID0gV1tpIC0gMzFdO1xuXG4gICAgV1tpXSA9IHN1bTY0XzRfaGkoXG4gICAgICBjMF9oaSwgYzBfbG8sXG4gICAgICBjMV9oaSwgYzFfbG8sXG4gICAgICBjMl9oaSwgYzJfbG8sXG4gICAgICBjM19oaSwgYzNfbG8pO1xuICAgIFdbaSArIDFdID0gc3VtNjRfNF9sbyhcbiAgICAgIGMwX2hpLCBjMF9sbyxcbiAgICAgIGMxX2hpLCBjMV9sbyxcbiAgICAgIGMyX2hpLCBjMl9sbyxcbiAgICAgIGMzX2hpLCBjM19sbyk7XG4gIH1cbn07XG5cblNIQTUxMi5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIF91cGRhdGUobXNnLCBzdGFydCkge1xuICB0aGlzLl9wcmVwYXJlQmxvY2sobXNnLCBzdGFydCk7XG5cbiAgdmFyIFcgPSB0aGlzLlc7XG5cbiAgdmFyIGFoID0gdGhpcy5oWzBdO1xuICB2YXIgYWwgPSB0aGlzLmhbMV07XG4gIHZhciBiaCA9IHRoaXMuaFsyXTtcbiAgdmFyIGJsID0gdGhpcy5oWzNdO1xuICB2YXIgY2ggPSB0aGlzLmhbNF07XG4gIHZhciBjbCA9IHRoaXMuaFs1XTtcbiAgdmFyIGRoID0gdGhpcy5oWzZdO1xuICB2YXIgZGwgPSB0aGlzLmhbN107XG4gIHZhciBlaCA9IHRoaXMuaFs4XTtcbiAgdmFyIGVsID0gdGhpcy5oWzldO1xuICB2YXIgZmggPSB0aGlzLmhbMTBdO1xuICB2YXIgZmwgPSB0aGlzLmhbMTFdO1xuICB2YXIgZ2ggPSB0aGlzLmhbMTJdO1xuICB2YXIgZ2wgPSB0aGlzLmhbMTNdO1xuICB2YXIgaGggPSB0aGlzLmhbMTRdO1xuICB2YXIgaGwgPSB0aGlzLmhbMTVdO1xuXG4gIGFzc2VydCh0aGlzLmsubGVuZ3RoID09PSBXLmxlbmd0aCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgVy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHZhciBjMF9oaSA9IGhoO1xuICAgIHZhciBjMF9sbyA9IGhsO1xuICAgIHZhciBjMV9oaSA9IHMxXzUxMl9oaShlaCwgZWwpO1xuICAgIHZhciBjMV9sbyA9IHMxXzUxMl9sbyhlaCwgZWwpO1xuICAgIHZhciBjMl9oaSA9IGNoNjRfaGkoZWgsIGVsLCBmaCwgZmwsIGdoLCBnbCk7XG4gICAgdmFyIGMyX2xvID0gY2g2NF9sbyhlaCwgZWwsIGZoLCBmbCwgZ2gsIGdsKTtcbiAgICB2YXIgYzNfaGkgPSB0aGlzLmtbaV07XG4gICAgdmFyIGMzX2xvID0gdGhpcy5rW2kgKyAxXTtcbiAgICB2YXIgYzRfaGkgPSBXW2ldO1xuICAgIHZhciBjNF9sbyA9IFdbaSArIDFdO1xuXG4gICAgdmFyIFQxX2hpID0gc3VtNjRfNV9oaShcbiAgICAgIGMwX2hpLCBjMF9sbyxcbiAgICAgIGMxX2hpLCBjMV9sbyxcbiAgICAgIGMyX2hpLCBjMl9sbyxcbiAgICAgIGMzX2hpLCBjM19sbyxcbiAgICAgIGM0X2hpLCBjNF9sbyk7XG4gICAgdmFyIFQxX2xvID0gc3VtNjRfNV9sbyhcbiAgICAgIGMwX2hpLCBjMF9sbyxcbiAgICAgIGMxX2hpLCBjMV9sbyxcbiAgICAgIGMyX2hpLCBjMl9sbyxcbiAgICAgIGMzX2hpLCBjM19sbyxcbiAgICAgIGM0X2hpLCBjNF9sbyk7XG5cbiAgICBjMF9oaSA9IHMwXzUxMl9oaShhaCwgYWwpO1xuICAgIGMwX2xvID0gczBfNTEyX2xvKGFoLCBhbCk7XG4gICAgYzFfaGkgPSBtYWo2NF9oaShhaCwgYWwsIGJoLCBibCwgY2gsIGNsKTtcbiAgICBjMV9sbyA9IG1hajY0X2xvKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wpO1xuXG4gICAgdmFyIFQyX2hpID0gc3VtNjRfaGkoYzBfaGksIGMwX2xvLCBjMV9oaSwgYzFfbG8pO1xuICAgIHZhciBUMl9sbyA9IHN1bTY0X2xvKGMwX2hpLCBjMF9sbywgYzFfaGksIGMxX2xvKTtcblxuICAgIGhoID0gZ2g7XG4gICAgaGwgPSBnbDtcblxuICAgIGdoID0gZmg7XG4gICAgZ2wgPSBmbDtcblxuICAgIGZoID0gZWg7XG4gICAgZmwgPSBlbDtcblxuICAgIGVoID0gc3VtNjRfaGkoZGgsIGRsLCBUMV9oaSwgVDFfbG8pO1xuICAgIGVsID0gc3VtNjRfbG8oZGwsIGRsLCBUMV9oaSwgVDFfbG8pO1xuXG4gICAgZGggPSBjaDtcbiAgICBkbCA9IGNsO1xuXG4gICAgY2ggPSBiaDtcbiAgICBjbCA9IGJsO1xuXG4gICAgYmggPSBhaDtcbiAgICBibCA9IGFsO1xuXG4gICAgYWggPSBzdW02NF9oaShUMV9oaSwgVDFfbG8sIFQyX2hpLCBUMl9sbyk7XG4gICAgYWwgPSBzdW02NF9sbyhUMV9oaSwgVDFfbG8sIFQyX2hpLCBUMl9sbyk7XG4gIH1cblxuICBzdW02NCh0aGlzLmgsIDAsIGFoLCBhbCk7XG4gIHN1bTY0KHRoaXMuaCwgMiwgYmgsIGJsKTtcbiAgc3VtNjQodGhpcy5oLCA0LCBjaCwgY2wpO1xuICBzdW02NCh0aGlzLmgsIDYsIGRoLCBkbCk7XG4gIHN1bTY0KHRoaXMuaCwgOCwgZWgsIGVsKTtcbiAgc3VtNjQodGhpcy5oLCAxMCwgZmgsIGZsKTtcbiAgc3VtNjQodGhpcy5oLCAxMiwgZ2gsIGdsKTtcbiAgc3VtNjQodGhpcy5oLCAxNCwgaGgsIGhsKTtcbn07XG5cblNIQTUxMi5wcm90b3R5cGUuX2RpZ2VzdCA9IGZ1bmN0aW9uIGRpZ2VzdChlbmMpIHtcbiAgaWYgKGVuYyA9PT0gJ2hleCcpXG4gICAgcmV0dXJuIHV0aWxzLnRvSGV4MzIodGhpcy5oLCAnYmlnJyk7XG4gIGVsc2VcbiAgICByZXR1cm4gdXRpbHMuc3BsaXQzMih0aGlzLmgsICdiaWcnKTtcbn07XG5cbmZ1bmN0aW9uIGNoNjRfaGkoeGgsIHhsLCB5aCwgeWwsIHpoKSB7XG4gIHZhciByID0gKHhoICYgeWgpIF4gKCh+eGgpICYgemgpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIGNoNjRfbG8oeGgsIHhsLCB5aCwgeWwsIHpoLCB6bCkge1xuICB2YXIgciA9ICh4bCAmIHlsKSBeICgofnhsKSAmIHpsKTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBtYWo2NF9oaSh4aCwgeGwsIHloLCB5bCwgemgpIHtcbiAgdmFyIHIgPSAoeGggJiB5aCkgXiAoeGggJiB6aCkgXiAoeWggJiB6aCk7XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gbWFqNjRfbG8oeGgsIHhsLCB5aCwgeWwsIHpoLCB6bCkge1xuICB2YXIgciA9ICh4bCAmIHlsKSBeICh4bCAmIHpsKSBeICh5bCAmIHpsKTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBzMF81MTJfaGkoeGgsIHhsKSB7XG4gIHZhciBjMF9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDI4KTtcbiAgdmFyIGMxX2hpID0gcm90cjY0X2hpKHhsLCB4aCwgMik7ICAvLyAzNFxuICB2YXIgYzJfaGkgPSByb3RyNjRfaGkoeGwsIHhoLCA3KTsgIC8vIDM5XG5cbiAgdmFyIHIgPSBjMF9oaSBeIGMxX2hpIF4gYzJfaGk7XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gczBfNTEyX2xvKHhoLCB4bCkge1xuICB2YXIgYzBfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCAyOCk7XG4gIHZhciBjMV9sbyA9IHJvdHI2NF9sbyh4bCwgeGgsIDIpOyAgLy8gMzRcbiAgdmFyIGMyX2xvID0gcm90cjY0X2xvKHhsLCB4aCwgNyk7ICAvLyAzOVxuXG4gIHZhciByID0gYzBfbG8gXiBjMV9sbyBeIGMyX2xvO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHMxXzUxMl9oaSh4aCwgeGwpIHtcbiAgdmFyIGMwX2hpID0gcm90cjY0X2hpKHhoLCB4bCwgMTQpO1xuICB2YXIgYzFfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCAxOCk7XG4gIHZhciBjMl9oaSA9IHJvdHI2NF9oaSh4bCwgeGgsIDkpOyAgLy8gNDFcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBzMV81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDE0KTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhoLCB4bCwgMTgpO1xuICB2YXIgYzJfbG8gPSByb3RyNjRfbG8oeGwsIHhoLCA5KTsgIC8vIDQxXG5cbiAgdmFyIHIgPSBjMF9sbyBeIGMxX2xvIF4gYzJfbG87XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gZzBfNTEyX2hpKHhoLCB4bCkge1xuICB2YXIgYzBfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCAxKTtcbiAgdmFyIGMxX2hpID0gcm90cjY0X2hpKHhoLCB4bCwgOCk7XG4gIHZhciBjMl9oaSA9IHNocjY0X2hpKHhoLCB4bCwgNyk7XG5cbiAgdmFyIHIgPSBjMF9oaSBeIGMxX2hpIF4gYzJfaGk7XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gZzBfNTEyX2xvKHhoLCB4bCkge1xuICB2YXIgYzBfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCAxKTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhoLCB4bCwgOCk7XG4gIHZhciBjMl9sbyA9IHNocjY0X2xvKHhoLCB4bCwgNyk7XG5cbiAgdmFyIHIgPSBjMF9sbyBeIGMxX2xvIF4gYzJfbG87XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gZzFfNTEyX2hpKHhoLCB4bCkge1xuICB2YXIgYzBfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCAxOSk7XG4gIHZhciBjMV9oaSA9IHJvdHI2NF9oaSh4bCwgeGgsIDI5KTsgIC8vIDYxXG4gIHZhciBjMl9oaSA9IHNocjY0X2hpKHhoLCB4bCwgNik7XG5cbiAgdmFyIHIgPSBjMF9oaSBeIGMxX2hpIF4gYzJfaGk7XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gZzFfNTEyX2xvKHhoLCB4bCkge1xuICB2YXIgYzBfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCAxOSk7XG4gIHZhciBjMV9sbyA9IHJvdHI2NF9sbyh4bCwgeGgsIDI5KTsgIC8vIDYxXG4gIHZhciBjMl9sbyA9IHNocjY0X2xvKHhoLCB4bCwgNik7XG5cbiAgdmFyIHIgPSBjMF9sbyBeIGMxX2xvIF4gYzJfbG87XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciByb3RyMzIgPSB1dGlscy5yb3RyMzI7XG5cbmZ1bmN0aW9uIGZ0XzEocywgeCwgeSwgeikge1xuICBpZiAocyA9PT0gMClcbiAgICByZXR1cm4gY2gzMih4LCB5LCB6KTtcbiAgaWYgKHMgPT09IDEgfHwgcyA9PT0gMylcbiAgICByZXR1cm4gcDMyKHgsIHksIHopO1xuICBpZiAocyA9PT0gMilcbiAgICByZXR1cm4gbWFqMzIoeCwgeSwgeik7XG59XG5leHBvcnRzLmZ0XzEgPSBmdF8xO1xuXG5mdW5jdGlvbiBjaDMyKHgsIHksIHopIHtcbiAgcmV0dXJuICh4ICYgeSkgXiAoKH54KSAmIHopO1xufVxuZXhwb3J0cy5jaDMyID0gY2gzMjtcblxuZnVuY3Rpb24gbWFqMzIoeCwgeSwgeikge1xuICByZXR1cm4gKHggJiB5KSBeICh4ICYgeikgXiAoeSAmIHopO1xufVxuZXhwb3J0cy5tYWozMiA9IG1hajMyO1xuXG5mdW5jdGlvbiBwMzIoeCwgeSwgeikge1xuICByZXR1cm4geCBeIHkgXiB6O1xufVxuZXhwb3J0cy5wMzIgPSBwMzI7XG5cbmZ1bmN0aW9uIHMwXzI1Nih4KSB7XG4gIHJldHVybiByb3RyMzIoeCwgMikgXiByb3RyMzIoeCwgMTMpIF4gcm90cjMyKHgsIDIyKTtcbn1cbmV4cG9ydHMuczBfMjU2ID0gczBfMjU2O1xuXG5mdW5jdGlvbiBzMV8yNTYoeCkge1xuICByZXR1cm4gcm90cjMyKHgsIDYpIF4gcm90cjMyKHgsIDExKSBeIHJvdHIzMih4LCAyNSk7XG59XG5leHBvcnRzLnMxXzI1NiA9IHMxXzI1NjtcblxuZnVuY3Rpb24gZzBfMjU2KHgpIHtcbiAgcmV0dXJuIHJvdHIzMih4LCA3KSBeIHJvdHIzMih4LCAxOCkgXiAoeCA+Pj4gMyk7XG59XG5leHBvcnRzLmcwXzI1NiA9IGcwXzI1NjtcblxuZnVuY3Rpb24gZzFfMjU2KHgpIHtcbiAgcmV0dXJuIHJvdHIzMih4LCAxNykgXiByb3RyMzIoeCwgMTkpIF4gKHggPj4+IDEwKTtcbn1cbmV4cG9ydHMuZzFfMjU2ID0gZzFfMjU2O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcblxuZXhwb3J0cy5pbmhlcml0cyA9IGluaGVyaXRzO1xuXG5mdW5jdGlvbiBpc1N1cnJvZ2F0ZVBhaXIobXNnLCBpKSB7XG4gIGlmICgobXNnLmNoYXJDb2RlQXQoaSkgJiAweEZDMDApICE9PSAweEQ4MDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKGkgPCAwIHx8IGkgKyAxID49IG1zZy5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIChtc2cuY2hhckNvZGVBdChpICsgMSkgJiAweEZDMDApID09PSAweERDMDA7XG59XG5cbmZ1bmN0aW9uIHRvQXJyYXkobXNnLCBlbmMpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkobXNnKSlcbiAgICByZXR1cm4gbXNnLnNsaWNlKCk7XG4gIGlmICghbXNnKVxuICAgIHJldHVybiBbXTtcbiAgdmFyIHJlcyA9IFtdO1xuICBpZiAodHlwZW9mIG1zZyA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAoIWVuYykge1xuICAgICAgLy8gSW5zcGlyZWQgYnkgc3RyaW5nVG9VdGY4Qnl0ZUFycmF5KCkgaW4gY2xvc3VyZS1saWJyYXJ5IGJ5IEdvb2dsZVxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZS9jbG9zdXJlLWxpYnJhcnkvYmxvYi84NTk4ZDg3MjQyYWY1OWFhYzIzMzI3MDc0MmM4OTg0ZTJiMmJkYmUwL2Nsb3N1cmUvZ29vZy9jcnlwdC9jcnlwdC5qcyNMMTE3LUwxNDNcbiAgICAgIC8vIEFwYWNoZSBMaWNlbnNlIDIuMFxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZS9jbG9zdXJlLWxpYnJhcnkvYmxvYi9tYXN0ZXIvTElDRU5TRVxuICAgICAgdmFyIHAgPSAwO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGMgPSBtc2cuY2hhckNvZGVBdChpKTtcbiAgICAgICAgaWYgKGMgPCAxMjgpIHtcbiAgICAgICAgICByZXNbcCsrXSA9IGM7XG4gICAgICAgIH0gZWxzZSBpZiAoYyA8IDIwNDgpIHtcbiAgICAgICAgICByZXNbcCsrXSA9IChjID4+IDYpIHwgMTkyO1xuICAgICAgICAgIHJlc1twKytdID0gKGMgJiA2MykgfCAxMjg7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNTdXJyb2dhdGVQYWlyKG1zZywgaSkpIHtcbiAgICAgICAgICBjID0gMHgxMDAwMCArICgoYyAmIDB4MDNGRikgPDwgMTApICsgKG1zZy5jaGFyQ29kZUF0KCsraSkgJiAweDAzRkYpO1xuICAgICAgICAgIHJlc1twKytdID0gKGMgPj4gMTgpIHwgMjQwO1xuICAgICAgICAgIHJlc1twKytdID0gKChjID4+IDEyKSAmIDYzKSB8IDEyODtcbiAgICAgICAgICByZXNbcCsrXSA9ICgoYyA+PiA2KSAmIDYzKSB8IDEyODtcbiAgICAgICAgICByZXNbcCsrXSA9IChjICYgNjMpIHwgMTI4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc1twKytdID0gKGMgPj4gMTIpIHwgMjI0O1xuICAgICAgICAgIHJlc1twKytdID0gKChjID4+IDYpICYgNjMpIHwgMTI4O1xuICAgICAgICAgIHJlc1twKytdID0gKGMgJiA2MykgfCAxMjg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGVuYyA9PT0gJ2hleCcpIHtcbiAgICAgIG1zZyA9IG1zZy5yZXBsYWNlKC9bXmEtejAtOV0rL2lnLCAnJyk7XG4gICAgICBpZiAobXNnLmxlbmd0aCAlIDIgIT09IDApXG4gICAgICAgIG1zZyA9ICcwJyArIG1zZztcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpICs9IDIpXG4gICAgICAgIHJlcy5wdXNoKHBhcnNlSW50KG1zZ1tpXSArIG1zZ1tpICsgMV0sIDE2KSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAoaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyspXG4gICAgICByZXNbaV0gPSBtc2dbaV0gfCAwO1xuICB9XG4gIHJldHVybiByZXM7XG59XG5leHBvcnRzLnRvQXJyYXkgPSB0b0FycmF5O1xuXG5mdW5jdGlvbiB0b0hleChtc2cpIHtcbiAgdmFyIHJlcyA9ICcnO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkrKylcbiAgICByZXMgKz0gemVybzIobXNnW2ldLnRvU3RyaW5nKDE2KSk7XG4gIHJldHVybiByZXM7XG59XG5leHBvcnRzLnRvSGV4ID0gdG9IZXg7XG5cbmZ1bmN0aW9uIGh0b25sKHcpIHtcbiAgdmFyIHJlcyA9ICh3ID4+PiAyNCkgfFxuICAgICAgICAgICAgKCh3ID4+PiA4KSAmIDB4ZmYwMCkgfFxuICAgICAgICAgICAgKCh3IDw8IDgpICYgMHhmZjAwMDApIHxcbiAgICAgICAgICAgICgodyAmIDB4ZmYpIDw8IDI0KTtcbiAgcmV0dXJuIHJlcyA+Pj4gMDtcbn1cbmV4cG9ydHMuaHRvbmwgPSBodG9ubDtcblxuZnVuY3Rpb24gdG9IZXgzMihtc2csIGVuZGlhbikge1xuICB2YXIgcmVzID0gJyc7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHcgPSBtc2dbaV07XG4gICAgaWYgKGVuZGlhbiA9PT0gJ2xpdHRsZScpXG4gICAgICB3ID0gaHRvbmwodyk7XG4gICAgcmVzICs9IHplcm84KHcudG9TdHJpbmcoMTYpKTtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy50b0hleDMyID0gdG9IZXgzMjtcblxuZnVuY3Rpb24gemVybzIod29yZCkge1xuICBpZiAod29yZC5sZW5ndGggPT09IDEpXG4gICAgcmV0dXJuICcwJyArIHdvcmQ7XG4gIGVsc2VcbiAgICByZXR1cm4gd29yZDtcbn1cbmV4cG9ydHMuemVybzIgPSB6ZXJvMjtcblxuZnVuY3Rpb24gemVybzgod29yZCkge1xuICBpZiAod29yZC5sZW5ndGggPT09IDcpXG4gICAgcmV0dXJuICcwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSA2KVxuICAgIHJldHVybiAnMDAnICsgd29yZDtcbiAgZWxzZSBpZiAod29yZC5sZW5ndGggPT09IDUpXG4gICAgcmV0dXJuICcwMDAnICsgd29yZDtcbiAgZWxzZSBpZiAod29yZC5sZW5ndGggPT09IDQpXG4gICAgcmV0dXJuICcwMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSAzKVxuICAgIHJldHVybiAnMDAwMDAnICsgd29yZDtcbiAgZWxzZSBpZiAod29yZC5sZW5ndGggPT09IDIpXG4gICAgcmV0dXJuICcwMDAwMDAnICsgd29yZDtcbiAgZWxzZSBpZiAod29yZC5sZW5ndGggPT09IDEpXG4gICAgcmV0dXJuICcwMDAwMDAwJyArIHdvcmQ7XG4gIGVsc2VcbiAgICByZXR1cm4gd29yZDtcbn1cbmV4cG9ydHMuemVybzggPSB6ZXJvODtcblxuZnVuY3Rpb24gam9pbjMyKG1zZywgc3RhcnQsIGVuZCwgZW5kaWFuKSB7XG4gIHZhciBsZW4gPSBlbmQgLSBzdGFydDtcbiAgYXNzZXJ0KGxlbiAlIDQgPT09IDApO1xuICB2YXIgcmVzID0gbmV3IEFycmF5KGxlbiAvIDQpO1xuICBmb3IgKHZhciBpID0gMCwgayA9IHN0YXJ0OyBpIDwgcmVzLmxlbmd0aDsgaSsrLCBrICs9IDQpIHtcbiAgICB2YXIgdztcbiAgICBpZiAoZW5kaWFuID09PSAnYmlnJylcbiAgICAgIHcgPSAobXNnW2tdIDw8IDI0KSB8IChtc2dbayArIDFdIDw8IDE2KSB8IChtc2dbayArIDJdIDw8IDgpIHwgbXNnW2sgKyAzXTtcbiAgICBlbHNlXG4gICAgICB3ID0gKG1zZ1trICsgM10gPDwgMjQpIHwgKG1zZ1trICsgMl0gPDwgMTYpIHwgKG1zZ1trICsgMV0gPDwgOCkgfCBtc2dba107XG4gICAgcmVzW2ldID0gdyA+Pj4gMDtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy5qb2luMzIgPSBqb2luMzI7XG5cbmZ1bmN0aW9uIHNwbGl0MzIobXNnLCBlbmRpYW4pIHtcbiAgdmFyIHJlcyA9IG5ldyBBcnJheShtc2cubGVuZ3RoICogNCk7XG4gIGZvciAodmFyIGkgPSAwLCBrID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkrKywgayArPSA0KSB7XG4gICAgdmFyIG0gPSBtc2dbaV07XG4gICAgaWYgKGVuZGlhbiA9PT0gJ2JpZycpIHtcbiAgICAgIHJlc1trXSA9IG0gPj4+IDI0O1xuICAgICAgcmVzW2sgKyAxXSA9IChtID4+PiAxNikgJiAweGZmO1xuICAgICAgcmVzW2sgKyAyXSA9IChtID4+PiA4KSAmIDB4ZmY7XG4gICAgICByZXNbayArIDNdID0gbSAmIDB4ZmY7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc1trICsgM10gPSBtID4+PiAyNDtcbiAgICAgIHJlc1trICsgMl0gPSAobSA+Pj4gMTYpICYgMHhmZjtcbiAgICAgIHJlc1trICsgMV0gPSAobSA+Pj4gOCkgJiAweGZmO1xuICAgICAgcmVzW2tdID0gbSAmIDB4ZmY7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXM7XG59XG5leHBvcnRzLnNwbGl0MzIgPSBzcGxpdDMyO1xuXG5mdW5jdGlvbiByb3RyMzIodywgYikge1xuICByZXR1cm4gKHcgPj4+IGIpIHwgKHcgPDwgKDMyIC0gYikpO1xufVxuZXhwb3J0cy5yb3RyMzIgPSByb3RyMzI7XG5cbmZ1bmN0aW9uIHJvdGwzMih3LCBiKSB7XG4gIHJldHVybiAodyA8PCBiKSB8ICh3ID4+PiAoMzIgLSBiKSk7XG59XG5leHBvcnRzLnJvdGwzMiA9IHJvdGwzMjtcblxuZnVuY3Rpb24gc3VtMzIoYSwgYikge1xuICByZXR1cm4gKGEgKyBiKSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtMzIgPSBzdW0zMjtcblxuZnVuY3Rpb24gc3VtMzJfMyhhLCBiLCBjKSB7XG4gIHJldHVybiAoYSArIGIgKyBjKSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtMzJfMyA9IHN1bTMyXzM7XG5cbmZ1bmN0aW9uIHN1bTMyXzQoYSwgYiwgYywgZCkge1xuICByZXR1cm4gKGEgKyBiICsgYyArIGQpID4+PiAwO1xufVxuZXhwb3J0cy5zdW0zMl80ID0gc3VtMzJfNDtcblxuZnVuY3Rpb24gc3VtMzJfNShhLCBiLCBjLCBkLCBlKSB7XG4gIHJldHVybiAoYSArIGIgKyBjICsgZCArIGUpID4+PiAwO1xufVxuZXhwb3J0cy5zdW0zMl81ID0gc3VtMzJfNTtcblxuZnVuY3Rpb24gc3VtNjQoYnVmLCBwb3MsIGFoLCBhbCkge1xuICB2YXIgYmggPSBidWZbcG9zXTtcbiAgdmFyIGJsID0gYnVmW3BvcyArIDFdO1xuXG4gIHZhciBsbyA9IChhbCArIGJsKSA+Pj4gMDtcbiAgdmFyIGhpID0gKGxvIDwgYWwgPyAxIDogMCkgKyBhaCArIGJoO1xuICBidWZbcG9zXSA9IGhpID4+PiAwO1xuICBidWZbcG9zICsgMV0gPSBsbztcbn1cbmV4cG9ydHMuc3VtNjQgPSBzdW02NDtcblxuZnVuY3Rpb24gc3VtNjRfaGkoYWgsIGFsLCBiaCwgYmwpIHtcbiAgdmFyIGxvID0gKGFsICsgYmwpID4+PiAwO1xuICB2YXIgaGkgPSAobG8gPCBhbCA/IDEgOiAwKSArIGFoICsgYmg7XG4gIHJldHVybiBoaSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtNjRfaGkgPSBzdW02NF9oaTtcblxuZnVuY3Rpb24gc3VtNjRfbG8oYWgsIGFsLCBiaCwgYmwpIHtcbiAgdmFyIGxvID0gYWwgKyBibDtcbiAgcmV0dXJuIGxvID4+PiAwO1xufVxuZXhwb3J0cy5zdW02NF9sbyA9IHN1bTY0X2xvO1xuXG5mdW5jdGlvbiBzdW02NF80X2hpKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wsIGRoLCBkbCkge1xuICB2YXIgY2FycnkgPSAwO1xuICB2YXIgbG8gPSBhbDtcbiAgbG8gPSAobG8gKyBibCkgPj4+IDA7XG4gIGNhcnJ5ICs9IGxvIDwgYWwgPyAxIDogMDtcbiAgbG8gPSAobG8gKyBjbCkgPj4+IDA7XG4gIGNhcnJ5ICs9IGxvIDwgY2wgPyAxIDogMDtcbiAgbG8gPSAobG8gKyBkbCkgPj4+IDA7XG4gIGNhcnJ5ICs9IGxvIDwgZGwgPyAxIDogMDtcblxuICB2YXIgaGkgPSBhaCArIGJoICsgY2ggKyBkaCArIGNhcnJ5O1xuICByZXR1cm4gaGkgPj4+IDA7XG59XG5leHBvcnRzLnN1bTY0XzRfaGkgPSBzdW02NF80X2hpO1xuXG5mdW5jdGlvbiBzdW02NF80X2xvKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wsIGRoLCBkbCkge1xuICB2YXIgbG8gPSBhbCArIGJsICsgY2wgKyBkbDtcbiAgcmV0dXJuIGxvID4+PiAwO1xufVxuZXhwb3J0cy5zdW02NF80X2xvID0gc3VtNjRfNF9sbztcblxuZnVuY3Rpb24gc3VtNjRfNV9oaShhaCwgYWwsIGJoLCBibCwgY2gsIGNsLCBkaCwgZGwsIGVoLCBlbCkge1xuICB2YXIgY2FycnkgPSAwO1xuICB2YXIgbG8gPSBhbDtcbiAgbG8gPSAobG8gKyBibCkgPj4+IDA7XG4gIGNhcnJ5ICs9IGxvIDwgYWwgPyAxIDogMDtcbiAgbG8gPSAobG8gKyBjbCkgPj4+IDA7XG4gIGNhcnJ5ICs9IGxvIDwgY2wgPyAxIDogMDtcbiAgbG8gPSAobG8gKyBkbCkgPj4+IDA7XG4gIGNhcnJ5ICs9IGxvIDwgZGwgPyAxIDogMDtcbiAgbG8gPSAobG8gKyBlbCkgPj4+IDA7XG4gIGNhcnJ5ICs9IGxvIDwgZWwgPyAxIDogMDtcblxuICB2YXIgaGkgPSBhaCArIGJoICsgY2ggKyBkaCArIGVoICsgY2Fycnk7XG4gIHJldHVybiBoaSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtNjRfNV9oaSA9IHN1bTY0XzVfaGk7XG5cbmZ1bmN0aW9uIHN1bTY0XzVfbG8oYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCwgZGgsIGRsLCBlaCwgZWwpIHtcbiAgdmFyIGxvID0gYWwgKyBibCArIGNsICsgZGwgKyBlbDtcblxuICByZXR1cm4gbG8gPj4+IDA7XG59XG5leHBvcnRzLnN1bTY0XzVfbG8gPSBzdW02NF81X2xvO1xuXG5mdW5jdGlvbiByb3RyNjRfaGkoYWgsIGFsLCBudW0pIHtcbiAgdmFyIHIgPSAoYWwgPDwgKDMyIC0gbnVtKSkgfCAoYWggPj4+IG51bSk7XG4gIHJldHVybiByID4+PiAwO1xufVxuZXhwb3J0cy5yb3RyNjRfaGkgPSByb3RyNjRfaGk7XG5cbmZ1bmN0aW9uIHJvdHI2NF9sbyhhaCwgYWwsIG51bSkge1xuICB2YXIgciA9IChhaCA8PCAoMzIgLSBudW0pKSB8IChhbCA+Pj4gbnVtKTtcbiAgcmV0dXJuIHIgPj4+IDA7XG59XG5leHBvcnRzLnJvdHI2NF9sbyA9IHJvdHI2NF9sbztcblxuZnVuY3Rpb24gc2hyNjRfaGkoYWgsIGFsLCBudW0pIHtcbiAgcmV0dXJuIGFoID4+PiBudW07XG59XG5leHBvcnRzLnNocjY0X2hpID0gc2hyNjRfaGk7XG5cbmZ1bmN0aW9uIHNocjY0X2xvKGFoLCBhbCwgbnVtKSB7XG4gIHZhciByID0gKGFoIDw8ICgzMiAtIG51bSkpIHwgKGFsID4+PiBudW0pO1xuICByZXR1cm4gciA+Pj4gMDtcbn1cbmV4cG9ydHMuc2hyNjRfbG8gPSBzaHI2NF9sbztcbiIsImlmICh0eXBlb2YgT2JqZWN0LmNyZWF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAvLyBpbXBsZW1lbnRhdGlvbiBmcm9tIHN0YW5kYXJkIG5vZGUuanMgJ3V0aWwnIG1vZHVsZVxuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluaGVyaXRzKGN0b3IsIHN1cGVyQ3Rvcikge1xuICAgIGlmIChzdXBlckN0b3IpIHtcbiAgICAgIGN0b3Iuc3VwZXJfID0gc3VwZXJDdG9yXG4gICAgICBjdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDdG9yLnByb3RvdHlwZSwge1xuICAgICAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgICAgIHZhbHVlOiBjdG9yLFxuICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfTtcbn0gZWxzZSB7XG4gIC8vIG9sZCBzY2hvb2wgc2hpbSBmb3Igb2xkIGJyb3dzZXJzXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgaWYgKHN1cGVyQ3Rvcikge1xuICAgICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICAgIHZhciBUZW1wQ3RvciA9IGZ1bmN0aW9uICgpIHt9XG4gICAgICBUZW1wQ3Rvci5wcm90b3R5cGUgPSBzdXBlckN0b3IucHJvdG90eXBlXG4gICAgICBjdG9yLnByb3RvdHlwZSA9IG5ldyBUZW1wQ3RvcigpXG4gICAgICBjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGN0b3JcbiAgICB9XG4gIH1cbn1cbiIsImZ1bmN0aW9uIGUoZSl7dGhpcy5tZXNzYWdlPWV9ZS5wcm90b3R5cGU9bmV3IEVycm9yLGUucHJvdG90eXBlLm5hbWU9XCJJbnZhbGlkQ2hhcmFjdGVyRXJyb3JcIjt2YXIgcj1cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3cuYXRvYiYmd2luZG93LmF0b2IuYmluZCh3aW5kb3cpfHxmdW5jdGlvbihyKXt2YXIgdD1TdHJpbmcocikucmVwbGFjZSgvPSskLyxcIlwiKTtpZih0Lmxlbmd0aCU0PT0xKXRocm93IG5ldyBlKFwiJ2F0b2InIGZhaWxlZDogVGhlIHN0cmluZyB0byBiZSBkZWNvZGVkIGlzIG5vdCBjb3JyZWN0bHkgZW5jb2RlZC5cIik7Zm9yKHZhciBuLG8sYT0wLGk9MCxjPVwiXCI7bz10LmNoYXJBdChpKyspO35vJiYobj1hJTQ/NjQqbitvOm8sYSsrJTQpP2MrPVN0cmluZy5mcm9tQ2hhckNvZGUoMjU1Jm4+PigtMiphJjYpKTowKW89XCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPVwiLmluZGV4T2Yobyk7cmV0dXJuIGN9O2Z1bmN0aW9uIHQoZSl7dmFyIHQ9ZS5yZXBsYWNlKC8tL2csXCIrXCIpLnJlcGxhY2UoL18vZyxcIi9cIik7c3dpdGNoKHQubGVuZ3RoJTQpe2Nhc2UgMDpicmVhaztjYXNlIDI6dCs9XCI9PVwiO2JyZWFrO2Nhc2UgMzp0Kz1cIj1cIjticmVhaztkZWZhdWx0OnRocm93XCJJbGxlZ2FsIGJhc2U2NHVybCBzdHJpbmchXCJ9dHJ5e3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHIoZSkucmVwbGFjZSgvKC4pL2csKGZ1bmN0aW9uKGUscil7dmFyIHQ9ci5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO3JldHVybiB0Lmxlbmd0aDwyJiYodD1cIjBcIit0KSxcIiVcIit0fSkpKX0odCl9Y2F0Y2goZSl7cmV0dXJuIHIodCl9fWZ1bmN0aW9uIG4oZSl7dGhpcy5tZXNzYWdlPWV9ZnVuY3Rpb24gbyhlLHIpe2lmKFwic3RyaW5nXCIhPXR5cGVvZiBlKXRocm93IG5ldyBuKFwiSW52YWxpZCB0b2tlbiBzcGVjaWZpZWRcIik7dmFyIG89ITA9PT0ocj1yfHx7fSkuaGVhZGVyPzA6MTt0cnl7cmV0dXJuIEpTT04ucGFyc2UodChlLnNwbGl0KFwiLlwiKVtvXSkpfWNhdGNoKGUpe3Rocm93IG5ldyBuKFwiSW52YWxpZCB0b2tlbiBzcGVjaWZpZWQ6IFwiK2UubWVzc2FnZSl9fW4ucHJvdG90eXBlPW5ldyBFcnJvcixuLnByb3RvdHlwZS5uYW1lPVwiSW52YWxpZFRva2VuRXJyb3JcIjtleHBvcnQgZGVmYXVsdCBvO2V4cG9ydHtuIGFzIEludmFsaWRUb2tlbkVycm9yfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWp3dC1kZWNvZGUuZXNtLmpzLm1hcFxuIiwibW9kdWxlLmV4cG9ydHMgPSBhc3NlcnQ7XG5cbmZ1bmN0aW9uIGFzc2VydCh2YWwsIG1zZykge1xuICBpZiAoIXZhbClcbiAgICB0aHJvdyBuZXcgRXJyb3IobXNnIHx8ICdBc3NlcnRpb24gZmFpbGVkJyk7XG59XG5cbmFzc2VydC5lcXVhbCA9IGZ1bmN0aW9uIGFzc2VydEVxdWFsKGwsIHIsIG1zZykge1xuICBpZiAobCAhPSByKVxuICAgIHRocm93IG5ldyBFcnJvcihtc2cgfHwgKCdBc3NlcnRpb24gZmFpbGVkOiAnICsgbCArICcgIT0gJyArIHIpKTtcbn07XG4iLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcblxuLy8gY2FjaGVkIGZyb20gd2hhdGV2ZXIgZ2xvYmFsIGlzIHByZXNlbnQgc28gdGhhdCB0ZXN0IHJ1bm5lcnMgdGhhdCBzdHViIGl0XG4vLyBkb24ndCBicmVhayB0aGluZ3MuICBCdXQgd2UgbmVlZCB0byB3cmFwIGl0IGluIGEgdHJ5IGNhdGNoIGluIGNhc2UgaXQgaXNcbi8vIHdyYXBwZWQgaW4gc3RyaWN0IG1vZGUgY29kZSB3aGljaCBkb2Vzbid0IGRlZmluZSBhbnkgZ2xvYmFscy4gIEl0J3MgaW5zaWRlIGFcbi8vIGZ1bmN0aW9uIGJlY2F1c2UgdHJ5L2NhdGNoZXMgZGVvcHRpbWl6ZSBpbiBjZXJ0YWluIGVuZ2luZXMuXG5cbnZhciBjYWNoZWRTZXRUaW1lb3V0O1xudmFyIGNhY2hlZENsZWFyVGltZW91dDtcblxuZnVuY3Rpb24gZGVmYXVsdFNldFRpbW91dCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRDbGVhclRpbWVvdXQgKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG4oZnVuY3Rpb24gKCkge1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0VGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2xlYXJUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgIH1cbn0gKCkpXG5mdW5jdGlvbiBydW5UaW1lb3V0KGZ1bikge1xuICAgIGlmIChjYWNoZWRTZXRUaW1lb3V0ID09PSBzZXRUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICAvLyBpZiBzZXRUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkU2V0VGltZW91dCA9PT0gZGVmYXVsdFNldFRpbW91dCB8fCAhY2FjaGVkU2V0VGltZW91dCkgJiYgc2V0VGltZW91dCkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dChmdW4sIDApO1xuICAgIH0gY2F0Y2goZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwobnVsbCwgZnVuLCAwKTtcbiAgICAgICAgfSBjYXRjaChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yXG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKHRoaXMsIGZ1biwgMCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxufVxuZnVuY3Rpb24gcnVuQ2xlYXJUaW1lb3V0KG1hcmtlcikge1xuICAgIGlmIChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGNsZWFyVGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICAvLyBpZiBjbGVhclRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGRlZmF1bHRDbGVhclRpbWVvdXQgfHwgIWNhY2hlZENsZWFyVGltZW91dCkgJiYgY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCAgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbChudWxsLCBtYXJrZXIpO1xuICAgICAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yLlxuICAgICAgICAgICAgLy8gU29tZSB2ZXJzaW9ucyBvZiBJLkUuIGhhdmUgZGlmZmVyZW50IHJ1bGVzIGZvciBjbGVhclRpbWVvdXQgdnMgc2V0VGltZW91dFxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKHRoaXMsIG1hcmtlcik7XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG59XG52YXIgcXVldWUgPSBbXTtcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xudmFyIGN1cnJlbnRRdWV1ZTtcbnZhciBxdWV1ZUluZGV4ID0gLTE7XG5cbmZ1bmN0aW9uIGNsZWFuVXBOZXh0VGljaygpIHtcbiAgICBpZiAoIWRyYWluaW5nIHx8ICFjdXJyZW50UXVldWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGlmIChjdXJyZW50UXVldWUubGVuZ3RoKSB7XG4gICAgICAgIHF1ZXVlID0gY3VycmVudFF1ZXVlLmNvbmNhdChxdWV1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgIH1cbiAgICBpZiAocXVldWUubGVuZ3RoKSB7XG4gICAgICAgIGRyYWluUXVldWUoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYWluUXVldWUoKSB7XG4gICAgaWYgKGRyYWluaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHRpbWVvdXQgPSBydW5UaW1lb3V0KGNsZWFuVXBOZXh0VGljayk7XG4gICAgZHJhaW5pbmcgPSB0cnVlO1xuXG4gICAgdmFyIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB3aGlsZShsZW4pIHtcbiAgICAgICAgY3VycmVudFF1ZXVlID0gcXVldWU7XG4gICAgICAgIHF1ZXVlID0gW107XG4gICAgICAgIHdoaWxlICgrK3F1ZXVlSW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UXVldWUpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UXVldWVbcXVldWVJbmRleF0ucnVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgfVxuICAgIGN1cnJlbnRRdWV1ZSA9IG51bGw7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBydW5DbGVhclRpbWVvdXQodGltZW91dCk7XG59XG5cbnByb2Nlc3MubmV4dFRpY2sgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcXVldWUucHVzaChuZXcgSXRlbShmdW4sIGFyZ3MpKTtcbiAgICBpZiAocXVldWUubGVuZ3RoID09PSAxICYmICFkcmFpbmluZykge1xuICAgICAgICBydW5UaW1lb3V0KGRyYWluUXVldWUpO1xuICAgIH1cbn07XG5cbi8vIHY4IGxpa2VzIHByZWRpY3RpYmxlIG9iamVjdHNcbmZ1bmN0aW9uIEl0ZW0oZnVuLCBhcnJheSkge1xuICAgIHRoaXMuZnVuID0gZnVuO1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbn1cbkl0ZW0ucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmZ1bi5hcHBseShudWxsLCB0aGlzLmFycmF5KTtcbn07XG5wcm9jZXNzLnRpdGxlID0gJ2Jyb3dzZXInO1xucHJvY2Vzcy5icm93c2VyID0gdHJ1ZTtcbnByb2Nlc3MuZW52ID0ge307XG5wcm9jZXNzLmFyZ3YgPSBbXTtcbnByb2Nlc3MudmVyc2lvbiA9ICcnOyAvLyBlbXB0eSBzdHJpbmcgdG8gYXZvaWQgcmVnZXhwIGlzc3Vlc1xucHJvY2Vzcy52ZXJzaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBub29wKCkge31cblxucHJvY2Vzcy5vbiA9IG5vb3A7XG5wcm9jZXNzLmFkZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3Mub25jZSA9IG5vb3A7XG5wcm9jZXNzLm9mZiA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUxpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcbnByb2Nlc3MuZW1pdCA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRPbmNlTGlzdGVuZXIgPSBub29wO1xuXG5wcm9jZXNzLmxpc3RlbmVycyA9IGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiBbXSB9XG5cbnByb2Nlc3MuYmluZGluZyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcblxucHJvY2Vzcy5jd2QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnLycgfTtcbnByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZGlyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5wcm9jZXNzLnVtYXNrID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xuIiwiLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxyXG5cclxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XHJcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cclxuXHJcblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcclxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXHJcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcclxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXHJcbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXHJcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcclxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UgKi9cclxuXHJcbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcclxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xyXG4gICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcclxuICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xyXG4gICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxyXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XHJcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xyXG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH1cclxuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcclxuICAgIHZhciB0ID0ge307XHJcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcclxuICAgICAgICB0W3BdID0gc1twXTtcclxuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcclxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xyXG4gICAgICAgIH1cclxuICAgIHJldHVybiB0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcGFyYW0ocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XHJcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cclxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxyXG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19nZW5lcmF0b3IodGhpc0FyZywgYm9keSkge1xyXG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcclxuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XHJcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xyXG4gICAgICAgIHdoaWxlIChfKSB0cnkge1xyXG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XHJcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcclxuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xyXG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XHJcbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgX19jcmVhdGVCaW5kaW5nID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9KTtcclxufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcclxuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICBvW2syXSA9IG1ba107XHJcbn0pO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXhwb3J0U3RhcihtLCBvKSB7XHJcbiAgICBmb3IgKHZhciBwIGluIG0pIGlmIChwICE9PSBcImRlZmF1bHRcIiAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sIHApKSBfX2NyZWF0ZUJpbmRpbmcobywgbSwgcCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XHJcbiAgICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xyXG4gICAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XHJcbiAgICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XHJcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xyXG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVhZChvLCBuKSB7XHJcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XHJcbiAgICBpZiAoIW0pIHJldHVybiBvO1xyXG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XHJcbiAgICBmaW5hbGx5IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbi8qKiBAZGVwcmVjYXRlZCAqL1xyXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWQoKSB7XHJcbiAgICBmb3IgKHZhciBhciA9IFtdLCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKylcclxuICAgICAgICBhciA9IGFyLmNvbmNhdChfX3JlYWQoYXJndW1lbnRzW2ldKSk7XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbi8qKiBAZGVwcmVjYXRlZCAqL1xyXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWRBcnJheXMoKSB7XHJcbiAgICBmb3IgKHZhciBzID0gMCwgaSA9IDAsIGlsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHMgKz0gYXJndW1lbnRzW2ldLmxlbmd0aDtcclxuICAgIGZvciAodmFyIHIgPSBBcnJheShzKSwgayA9IDAsIGkgPSAwOyBpIDwgaWw7IGkrKylcclxuICAgICAgICBmb3IgKHZhciBhID0gYXJndW1lbnRzW2ldLCBqID0gMCwgamwgPSBhLmxlbmd0aDsgaiA8IGpsOyBqKyssIGsrKylcclxuICAgICAgICAgICAgcltrXSA9IGFbal07XHJcbiAgICByZXR1cm4gcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXkodG8sIGZyb20sIHBhY2spIHtcclxuICAgIGlmIChwYWNrIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIGkgPSAwLCBsID0gZnJvbS5sZW5ndGgsIGFyOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xyXG4gICAgICAgICAgICBpZiAoIWFyKSBhciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20sIDAsIGkpO1xyXG4gICAgICAgICAgICBhcltpXSA9IGZyb21baV07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRvLmNvbmNhdChhciB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tKSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0KHYpIHtcclxuICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSwgaSwgcSA9IFtdO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlmIChnW25dKSBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChhLCBiKSB7IHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cclxuICAgIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkgeyByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNEZWxlZ2F0b3Iobykge1xyXG4gICAgdmFyIGksIHA7XHJcbiAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIsIGZ1bmN0aW9uIChlKSB7IHRocm93IGU7IH0pLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlbbl0gPSBvW25dID8gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIChwID0gIXApID8geyB2YWx1ZTogX19hd2FpdChvW25dKHYpKSwgZG9uZTogbiA9PT0gXCJyZXR1cm5cIiB9IDogZiA/IGYodikgOiB2OyB9IDogZjsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY1ZhbHVlcyhvKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcclxuICAgIHJldHVybiBtID8gbS5jYWxsKG8pIDogKG8gPSB0eXBlb2YgX192YWx1ZXMgPT09IFwiZnVuY3Rpb25cIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCksIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpKTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWFrZVRlbXBsYXRlT2JqZWN0KGNvb2tlZCwgcmF3KSB7XHJcbiAgICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb29rZWQsIFwicmF3XCIsIHsgdmFsdWU6IHJhdyB9KTsgfSBlbHNlIHsgY29va2VkLnJhdyA9IHJhdzsgfVxyXG4gICAgcmV0dXJuIGNvb2tlZDtcclxufTtcclxuXHJcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcclxufSkgOiBmdW5jdGlvbihvLCB2KSB7XHJcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnRTdGFyKG1vZCkge1xyXG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcclxuICAgIHZhciByZXN1bHQgPSB7fTtcclxuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcclxuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnREZWZhdWx0KG1vZCkge1xyXG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBkZWZhdWx0OiBtb2QgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRHZXQocmVjZWl2ZXIsIHN0YXRlLCBraW5kLCBmKSB7XHJcbiAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXJcIik7XHJcbiAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcclxuICAgIHJldHVybiBraW5kID09PSBcIm1cIiA/IGYgOiBraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlcikgOiBmID8gZi52YWx1ZSA6IHN0YXRlLmdldChyZWNlaXZlcik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHJlY2VpdmVyLCBzdGF0ZSwgdmFsdWUsIGtpbmQsIGYpIHtcclxuICAgIGlmIChraW5kID09PSBcIm1cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZVwiKTtcclxuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlclwiKTtcclxuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XHJcbiAgICByZXR1cm4gKGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyLCB2YWx1ZSkgOiBmID8gZi52YWx1ZSA9IHZhbHVlIDogc3RhdGUuc2V0KHJlY2VpdmVyLCB2YWx1ZSkpLCB2YWx1ZTtcclxufVxyXG4iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsIiIsIi8vIHN0YXJ0dXBcbi8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLy8gVGhpcyBlbnRyeSBtb2R1bGUgaXMgcmVmZXJlbmNlZCBieSBvdGhlciBtb2R1bGVzIHNvIGl0IGNhbid0IGJlIGlubGluZWRcbnZhciBfX3dlYnBhY2tfZXhwb3J0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIi4vc3JjL2luZGV4LnRzXCIpO1xuIiwiIl0sIm5hbWVzIjpbImp3dF9kZWNvZGVfMSIsInRzbGliXzEiLCJfX2ltcG9ydERlZmF1bHQiLCJyZXF1aXJlIiwiY29uc3RhbnRzXzEiLCJjb25uZWN0Q3JlZGVudGlhbF9pbnRlcmZhY2VfMSIsImludGVncmF0aW9uX2ludGVyZmFjZV8xIiwib2F1dGhfMSIsIlNES0V2ZW50RW1pdHRlcl8xIiwidHlwZXNfMSIsImNvbm5lY3RfMSIsImNyeXB0b18xIiwiaHR0cF8xIiwidGhyb3R0bGVfMSIsIlBBUkFHT05fUk9PVF9JRlJBTUVfSUQiLCJQQVJBR09OX1JPT1RfSUZSQU1FX0NPTlRBSU5FUl9JRCIsIlBBUkFHT05fU1RBVEVfU1RPUkFHRV9LRVkiLCJleHBvcnRzIiwiUEFSQUdPTl9PVkVSRkxPV19FTVBUWV9WQUxVRSIsIkNvbm5lY3RTREsiLCJkZWZhdWx0IiwiY29uc3RydWN0b3IiLCJyb290TG9hZGVkIiwibW9kYWxTdGF0ZSIsImludGVncmF0aW9uIiwib25DbG9zZSIsImJpbmQiLCJvdmVybGF5U3R5bGUiLCJvdmVyZmxvdyIsIm9uT3BlbiIsImFwaUluc3RhbGxhdGlvbk9wdGlvbnMiLCJpc0FwaUluc3RhbGxhdGlvbiIsInNob3dQb3J0YWxBZnRlckluc3RhbGwiLCJ1c2VyU3RhdGUiLCJhdXRoZW50aWNhdGVkIiwibG9hZGVkQ29uZmlncyIsImxvYWRlZEludGVncmF0aW9ucyIsImVuZFVzZXJJbnRlZ3JhdGlvbkNvbmZpZyIsIm1ldGFkYXRhIiwiY2FjaGVkQXBpUmVzcG9uc2UiLCJDYWNoZVRocm90dGxlIiwidHRsIiwia2V5VG9SZXF1ZXN0UHJvbWlzZU1hcCIsIm9yaWdpbmFsQm9keU92ZXJmbG93IiwiY29uZmlncyIsIndpbmRvdyIsImNvbnNvbGUiLCJ3YXJuIiwiYXNzZXRVUkwiLCJnZXRBc3NldFVybCIsIkNETl9QVUJMSUNfVVJMIiwicHJvY2VzcyIsImVudiIsIkRBU0hCT0FSRF9QVUJMSUNfVVJMIiwiTk9ERV9FTlYiLCJQTEFURk9STV9FTlYiLCJWRVJTSU9OIiwiZW52aXJvbm1lbnRzIiwiQ09OTkVDVF9QVUJMSUNfVVJMIiwiUEFTU1BPUlRfUFVCTElDX1VSTCIsIlpFVVNfUFVCTElDX1VSTCIsIkVycm9yIiwibG9hZFN0YXRlIiwiYWRkRXZlbnRMaXN0ZW5lciIsImV2ZW50TWVzc2FnZUhhbmRsZXIiLCJkb2N1bWVudCIsInJlYWR5U3RhdGUiLCJEb2N1bWVudExvYWRpbmdTdGF0ZSIsIkxPQURJTkciLCJjcmVhdGVSZWFjdFJvb3QiLCJldmVudCIsImRhdGEiLCJ0eXBlIiwiX29hdXRoQ2FsbGJhY2siLCJjcmVkZW50aWFsIiwiX29hdXRoRXJyb3JDYWxsYmFjayIsImVycm9yIiwiZnVuY3Rpb25JbnZvY2F0aW9uSGFuZGxlciIsIm1lc3NhZ2VUeXBlIiwiaWQiLCJwYXJhbWV0ZXJzIiwicmVwbHkiLCJyZXN1bHQiLCJlcnIiLCJtZXNzYWdlIiwic291cmNlIiwicG9zdE1lc3NhZ2UiLCJyb290IiwiY3JlYXRlRWxlbWVudCIsIm9ubG9hZCIsInJlbmRlciIsImlzQXRSb290IiwicXVlcnlTZWxlY3RvciIsInNyYyIsInByb2plY3RJZCIsInN0eWxlIiwicG9zaXRpb24iLCJ0b3AiLCJsZWZ0Iiwid2lkdGgiLCJoZWlnaHQiLCJ6SW5kZXgiLCJkaXNwbGF5IiwiX2EiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJ2YWxpZGF0ZUFjdGlvbiIsImFjdGlvbiIsInZhbGlkYXRlSXNFbmFibGVkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwiaXNDdXN0b21JbnRlZ3JhdGlvblR5cGVOYW1lIiwiT2JqZWN0Iiwia2V5cyIsIm1hcCIsInZhbGlkQWN0aW9uIiwiam9pbiIsImlzQWN0aXZlIiwiQm9vbGVhbiIsIl9iIiwiaW50ZWdyYXRpb25zIiwiZW5hYmxlZCIsImJvb3RzdHJhcFNES1N0YXRlIiwidXNlck1ldGEiLCJwcm9qZWN0Iiwic2VuZENvbm5lY3RSZXF1ZXN0IiwiaGVhZGVycyIsIkpTT04iLCJzdHJpbmdpZnkiLCJ1cGRhdGVMb2NhbFN0YXRlIiwic2V0TW9kYWxTdGF0ZSIsInN0YXRlUGFydGlhbCIsImNvbmZpZyIsImxvY2FsU3RhdGUiLCJsb2NhbFN0b3JhZ2UiLCJnZXRJdGVtIiwicGFyc2UiLCJ1cGRhdGVBdXRoZW50aWNhdGVkVXNlciIsImNhdGNoIiwiY2xlYXJTdGF0ZSIsInNhdmVTdGF0ZSIsInNldEl0ZW0iLCJyZW1vdmVJdGVtIiwidXBkYXRlIiwibmV4dENvbnRleHQiLCJ1c2VyIiwibmV4dE1vZGFsU3RhdGUiLCJjb250ZW50V2luZG93IiwidXBkYXRlQ29udGFpbmVyU3R5bGUiLCJfcmVmIiwiaXNNb2RhbFNob3duIiwiYXV0aGVudGljYXRlIiwidG9rZW4iLCJvcHRpb25zIiwiZGVjb2RlZEp3dCIsInVzZXJJZCIsInN1YiIsIm1ldGEiLCJsb2dvdXQiLCJnZXRVc2VyIiwiZnJvbUVudHJpZXMiLCJlbnRyaWVzIiwiZmlsdGVyIiwiX3JlZjIiLCJrZXkiLCJjb25uZWN0IiwicGFyYW1zIiwiX2Nvbm5lY3QiLCJtYXBPYmplY3RGaWVsZHMiLCJvdmVycmlkZVJlZGlyZWN0VXJsIiwiYnlwYXNzUG9zdE9BdXRoUHJvbXB0IiwiY2FsbGJhY2tzIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJzdWJzY3JpYmVUb0ludGVncmF0aW9uIiwib25JbnN0YWxsIiwib25TdWNjZXNzIiwiY2FsbCIsIm9uRXJyb3IiLCJhY2Nlc3NpYmxlRmVhdHVyZXMiLCJpbmNsdWRlcyIsIkNvbm5lY3RBZGRPbiIsIkR5bmFtaWNGaWVsZE1hcHBlciIsImlzVmFsaWRVcmwiLCJzYW5pdGl6ZVVybCIsInZhbHVlcyIsImZpbmQiLCJnZXRJbnRlZ3JhdGlvblR5cGVOYW1lIiwic2hvdWxkU2hvd1ByZUF1dGhJbnB1dHMiLCJhdXRoU2NoZW1lIiwiZW5kVXNlclN1cHBsaWVkVmFsdWVzIiwiaXNBY2NvdW50VHlwZVN1cHBvcnRlZCIsInN0YXJ0T0F1dGhGbG93IiwiY29udGV4dCIsImVtaXRFcnJvciIsIm9hdXRoUmVzcG9uc2UiLCJjcmVkZW50aWFsSWQiLCJpbnRlZ3JhdGlvbklkIiwicGF5bG9hZCIsImluc3RhbGxPcHRpb25zIiwicmVxdWVzdFVSSSIsIm1ldGhvZCIsInByb3ZpZGVySWQiLCJzdGF0dXMiLCJwcm92aWRlckRhdGEiLCJjcmVkZW50aWFsU3RhdHVzIiwiQ3JlZGVudGlhbFN0YXR1cyIsIlZBTElEIiwidHJpZ2dlclNES0V2ZW50IiwiU0RLX0VWRU5UIiwiT05fSU5URUdSQVRJT05fSU5TVEFMTCIsImludGVncmF0aW9uVHlwZSIsImVycm9yTWVzc2FnZSIsImFsZXJ0IiwicGF0aCIsImluaXQiLCJwcmVmaXhXaXRoUHJvamVjdFBhdGgiLCJ1cmwiLCJjYWNoZUtleSIsImhhc2giLCJjYWNoZWRSZXN1bHQiLCJnZXQiLCJjYWNoZVJlc3VsdCIsInNob3VsZENhY2hlUmVxdWVzdCIsImFjY2Vzc1Rva2VuIiwib25Hb2luZ1JlcXVlc3QiLCJzZW5kUmVxdWVzdCIsIkFjY2VwdCIsIkF1dGhvcml6YXRpb24iLCJyZXNwb25zZSIsInJlc3BvbnNlQm9keSIsInJlc3BvbnNlRXJyb3IiLCJmZXRjaCIsIm9rIiwicmVxdWVzdFJldHVybmVkQXV0aG9yaXphdGlvbkVycm9yIiwidGV4dCIsImRlbCIsImpzb24iLCJzZXQiLCJyZXF1ZXN0IiwiYmFzZVByb3h5UGF0aCIsImN1c3RvbUludGVncmF0aW9uIiwic2x1ZyIsInBhdGhXaXRoTGVhZGluZ1NsYXNoIiwic3RhcnRzV2l0aCIsIklORkVSX0NPTlRFTlRfVFlQRV9GUk9NX0NPTk5FQ1RfT1BUSU9OUyIsIm91dHB1dCIsIm5hbWUiLCJmb3JjZUNsb3NlIiwiT05fUE9SVEFMX0NMT1NFIiwiT05fUE9SVEFMX09QRU4iLCJib3VuZGluZ1JlY3QiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJpbm5lckhlaWdodCIsImlubmVyV2lkdGgiLCJldmVudEluZm8iLCJ0cmlnZ2VyRXZlbnQiLCJnZXRJbnRlZ3JhdGlvbk1ldGFkYXRhIiwiaW50ZWdyYXRpb25LZXlOYW1lIiwid29ya2Zsb3ciLCJ3b3JrZmxvd0lkIiwicXVlcnkiLCJxdWVyeVN0cmluZyIsIlVSTFNlYXJjaFBhcmFtcyIsInRvU3RyaW5nIiwiaW5zdGFsbEludGVncmF0aW9uIiwiZGVmYXVsdEluc3RhbGxPcHRpb25zIiwibWVyZ2VkUGFyYW1zIiwiZW5zdXJlSGVhZGxlc3NJc1N1cHBvcnRlZCIsImlzQWxyZWFkeUVuYWJsZWQiLCJIZWFkbGVzc0Nvbm5lY3RQb3J0YWwiLCJ1bmluc3RhbGxJbnRlZ3JhdGlvbiIsImNvbmZpZ3VyZWRXb3JrZmxvd3MiLCJPTl9JTlRFR1JBVElPTl9VTklOU1RBTEwiLCJkaXNhYmxlV29ya2Zsb3ciLCJpc1dvcmtmbG93RW5hYmxlZCIsInVzZXJEYXRhIiwiYWxsIiwiZmV0Y2hVc2VyRGF0YSIsImZldGNoSW50ZWdyYXRpb25zIiwiZ2V0SW50ZWdyYXRpb25Db25maWdzIiwidXBkYXRlSW50ZWdyYXRpb25zIiwiZm9yRWFjaCIsImJyYW5kQ29sb3IiLCJfYyIsImFjY2VudENvbG9yIiwiaWNvbiIsIl9lIiwiX2QiLCJvdmVycmlkZUFjdGlvbkFsaWFzIiwiX2YiLCJzZXRVc2VyTWV0YWRhdGEiLCJhY3Rpb25OYW1lcyIsInJlcXVpcmVkQ29uZmlnc0FjdGlvbnMiLCJhY3Rpb25OYW1lIiwiQUNUSU9OX0NVU1RPTSIsImNvbmZpZ3VyZUdsb2JhbCIsInBhcmFtIiwiaG9zdCIsImRvbWFpbiIsImluZGV4T2YiLCJVUkwiLCJob3N0bmFtZSIsImdldFNlcnZpY2VVcmwiLCJTREtFdmVudEVtaXR0ZXIiLCJldmVudExpc3RlbmVyc01hcCIsImludGVncmF0aW9uU3RhdGVDYWxsYmFja3MiLCJzdWJzY3JpYmUiLCJldmVudE5hbWUiLCJsaXN0ZW5lciIsImFzc2VydEV2ZW50VHlwZSIsInVuc3Vic2NyaWJlIiwiY2FsbGJhY2tNYXAiLCJvbGRMaXN0ZW5lcnNDb3VudCIsImZuIiwiZW1pdFNhZmUiLCJfbGVuIiwiZXZlbnRQYXlsb2FkIiwiQXJyYXkiLCJfa2V5IiwiaW52b2tlQ2FsbGJhY2tTYWZlIiwiY2FsbGJhY2tUeXBlIiwiX2xlbjIiLCJfa2V5MiIsIndvcmtmbG93U3RhdGVDaGFuZ2UiLCJPTl9XT1JLRkxPV19DSEFOR0UiLCJBdXRoZW50aWNhdGlvblNjaGVtZSIsImdlbmVyYXRlU2x1Z0ZvckludGVncmF0aW9uIiwicmVwbGFjZSIsInRyaW0iLCJ0b0xvd2VyQ2FzZSIsImN1c3RvbUludGVncmF0aW9uX2ludGVyZmFjZV8xIiwiaXNPYmplY3QiLCJpdGVtIiwiaXNBcnJheSIsInBhcnNlS2V5ZWRTb3VyY2UiLCJ2YWx1ZSIsInN0cmlwVW5kZWZpbmVkQW5kTnVsbCIsIm9iaiIsIm5ld09iaiIsImNyZWRlbnRpYWxfaW50ZXJmYWNlXzEiLCJfMSIsImFjdGlvblR5cGUiLCJpbnB1dHMiLCJhdXRoU3BlY2lmaWNJbnB1dHMiLCJhdXRoZW50aWNhdGlvblR5cGUiLCJhdXRoU2NoZW1hUmVxdWlyZWRJbnB1dHMiLCJpbnB1dEZpZWxkcyIsIk9BVVRIIiwiQkFTSUMiLCJhdXRoUGFyYW1zIiwicmVxdWVzdFBhcmFtZXRlcnMiLCJxdWVyeU9iaiIsInVzZXJUb2tlbiIsInJlZGlyZWN0VXJsIiwib3JpZ2luRm9yUG9zdE1lc3NhZ2UiLCJsb2NhdGlvbiIsIm9yaWdpbiIsIm9wZW4iLCJDb25uZWN0U0RLXzEiLCJfX2V4cG9ydFN0YXIiLCJjb25uZWN0U2luZ2xldG9uIiwicGFyYWdvbiIsIlNpZGViYXJJbnB1dFR5cGUiLCJUb2tlblR5cGUiLCJBY3Rpb25SZXNwb25zZVN0YXR1cyIsIkFjdGlvblJlc3BvbnNlVHlwZSIsIkRhdGFTb3VyY2VUeXBlIiwibW9uZGF5Iiwic3RyaXBlXzEiLCJDT05ORUNUX1BMQU5fRkVBVFVSRV9NQVAiLCJCaWxsaW5nUGxhbiIsIkNvbm5lY3RCYXNpYyIsIkNvbm5lY3RQcm8iLCJDdXN0b21JbnRlZ3JhdGlvbkJ1aWxkZXIiLCJNb25pdG9yaW5nIiwiVXNlck1ldGFkYXRhIiwiV2hpdGVMYWJlbGluZyIsIkNvbm5lY3RFbnRlcnByaXNlIiwiVGFza0hpc3RvcnlBUEkiLCJSb2xlQmFzZWRBY2Nlc3NDb250cm9sIiwiV29ya2Zsb3dQZXJtaXNzaW9uIiwiYWN0aW9uXzEiLCJFeGVjdXRpb25TdGF0dXMiLCJTdXBwb3J0ZWRDb25uZWN0SW5wdXRUeXBlcyIsIlZhbHVlVGV4dCIsIkR5bmFtaWNFbnVtIiwiRW51bSIsIk51bWJlciIsIkVtYWlsIiwiRmllbGRNYXBwZXIiLCJCb29sZWFuSW5wdXQiLCJDb21ib0lucHV0IiwiUGFzc3dvcmQiLCJTd2l0Y2giLCJWYWx1ZVRleHRBcmVhIiwiSU1QRVJTT05BVEVEX0FQUCIsIk9BVVRIX0FQUCIsIlNFUlZJQ0VfQUNDT1VOVCIsIk9BVVRIX0NMSUVOVF9DUkVERU5USUFMIiwidGl0bGUiLCJyZXF1aXJlZCIsIkRhdGFUeXBlIiwiT3BlcmF0b3IiLCJNb2RhbFZpZXciLCJlbnZpcm9ubWVudF8xIiwiY2RuSG9zdCIsImRhc2hib2FyZFB1YmxpY1VSTCIsInZlcnNpb24iLCJwbGF0Zm9ybUVudiIsIm5vZGVFbnYiLCJQUk9EVUNUSU9OIiwiRU5URVJQUklTRSIsImhhc2hfanNfMSIsInNoYTI1NiIsImRpZ2VzdCIsInN1YnN0ciIsIkRlZmVycmVkUHJvbWlzZSIsInN0YXRlIiwiX3N0YXRlIiwiX3Byb21pc2UiLCJfcmVzb2x2ZSIsIl9yZWplY3QiLCJ0aGVuIiwib25mdWxmaWxsZWQiLCJvbnJlamVjdGVkIiwicmVhc29uIiwiZmluYWxseSIsIm9uZmluYWxseSIsIlN5bWJvbCIsInRvU3RyaW5nVGFnIiwiZ2VuZXJhdGVNYXRyaXgiLCJpbnB1dCIsImxpbWl0IiwibnVtVmFsdWVzIiwicmVkdWNlIiwic3VtIiwicHVzaCIsInBhcnRpYWxNYXRyaXgiLCJ2IiwicmVkdWNlZCIsImN1cnJlbnQiLCJ2YWwiLCJjb3B5Iiwic2xpY2UiLCJtYXRyaXgiLCJpbmRleCIsInNsZWVwIiwibWlsbGlzZWNvbmRzIiwic2V0VGltZW91dCIsInNhbml0aXplZFVybCIsImdsb2JhbFRoaXMiLCJtYXRjaCIsInNlcnZpY2UiLCJwcmVmaXgiLCJzdWZmaXgiLCJnZW5lcmljXzEiLCJDYWNoZU1vZGUiLCJDYWNoZVRocm90dGxlU3RhdGUiLCJDYWNoZVRocm90dGxlT3BlcmF0aW9uIiwiX0NhY2hlVGhyb3R0bGVfc3RhdGUiLCJJZGxlIiwiX0NhY2hlVGhyb3R0bGVfc3RvcmUiLCJfQ2FjaGVUaHJvdHRsZV9jb25maWciLCJfQ2FjaGVUaHJvdHRsZV9xdWV1ZSIsIl9fY2xhc3NQcml2YXRlRmllbGRTZXQiLCJtb2RlIiwiRGVib3VuY2UiLCJhc2FwIiwic2VyaWFsaXplZEtleSIsInNlcmlhbGl6ZUtleSIsImNhbGxiYWNrIiwiZW50cnkiLCJfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0IiwicmVmcmVzaFRpbWVvdXQiLCJjbGVhclBlbmRpbmdEZWxldGVzIiwiY2xlYXJQZW5kaW5nRGVsZXRlc09uS2V5IiwiZW5xdWV1ZSIsIkdldCIsImRpZFByZXZpb3VzbHlFeGlzdCIsIlRocm90dGxlIiwiU2V0IiwiZ2V0T3JTZXQiLCJnZW5lcmF0b3IiLCJHZXRPclNldCIsImlzS2V5U2VyaWFsaXplZCIsInRpbWVvdXQiLCJjbGVhclRpbWVvdXQiLCJvbkRlcmVnaXN0ZXIiLCJEZWwiLCJkbyIsIkRvIiwiY2xvc2UiLCJDbG9zZWQiLCJjdXJyZW50VmFsdWUiLCJvcGVyYXRpb24iLCJfbWV0aG9kIiwicHJvbWlzZSIsImZsdXNoIiwiUHJvY2Vzc2luZyIsIm5leHRUaWNrIiwiY3VycmVudEl0ZW0iLCJzaGlmdCIsImN1cnJlbnRNZXRob2QiLCJjdXJyZW50UHJvbWlzZSIsImUiXSwic291cmNlUm9vdCI6IiJ9
|