@dollhousemcp/mcp-server 2.0.13 → 2.0.14
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 +8 -0
- package/dist/di/Container.d.ts.map +1 -1
- package/dist/di/Container.js +19 -9
- package/dist/elements/BaseElement.js +2 -2
- package/dist/elements/memories/Memory.d.ts.map +1 -1
- package/dist/elements/memories/Memory.js +3 -3
- package/dist/elements/skills/Skill.d.ts.map +1 -1
- package/dist/elements/skills/Skill.js +4 -4
- package/dist/elements/templates/Template.d.ts.map +1 -1
- package/dist/elements/templates/Template.js +4 -4
- package/dist/generated/version.d.ts +2 -2
- package/dist/generated/version.js +3 -3
- package/dist/handlers/ElementCRUDHandler.d.ts +10 -0
- package/dist/handlers/ElementCRUDHandler.d.ts.map +1 -1
- package/dist/handlers/ElementCRUDHandler.js +123 -1
- package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts +1 -0
- package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/MCPAQLHandler.js +31 -2
- package/dist/services/ActivationStore.d.ts +20 -0
- package/dist/services/ActivationStore.d.ts.map +1 -1
- package/dist/services/ActivationStore.js +104 -1
- package/dist/web/console/IngestRoutes.d.ts +1 -0
- package/dist/web/console/IngestRoutes.d.ts.map +1 -1
- package/dist/web/console/IngestRoutes.js +4 -1
- package/dist/web/console/UnifiedConsole.js +2 -1
- package/dist/web/public/permissions.css +224 -16
- package/dist/web/public/permissions.js +326 -63
- package/dist/web/public/sessions.js +218 -98
- package/dist/web/public/styles.css +15 -10
- package/dist/web/routes/permissionRoutes.d.ts.map +1 -1
- package/dist/web/routes/permissionRoutes.js +57 -19
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +2 -1
- package/package.json +1 -1
- package/server.json +2 -2
package/dist/di/Container.js
CHANGED
|
@@ -635,8 +635,8 @@ export class DollhouseContainer {
|
|
|
635
635
|
await sweepStalePortFiles();
|
|
636
636
|
}
|
|
637
637
|
catch { /* sweep failure is non-fatal */ }
|
|
638
|
-
await this.deferredWebConsole(timer);
|
|
639
|
-
await this.deferredPermissionServer(timer);
|
|
638
|
+
const consoleResult = await this.deferredWebConsole(timer);
|
|
639
|
+
await this.deferredPermissionServer(consoleResult, timer);
|
|
640
640
|
}
|
|
641
641
|
async deferredMemoryAutoload(timer) {
|
|
642
642
|
timer?.startPhase('memory_autoload', false);
|
|
@@ -735,7 +735,7 @@ export class DollhouseContainer {
|
|
|
735
735
|
timer?.startPhase('web_console', false);
|
|
736
736
|
try {
|
|
737
737
|
if (!env.DOLLHOUSE_WEB_CONSOLE)
|
|
738
|
-
return;
|
|
738
|
+
return null;
|
|
739
739
|
const activationStore = this.resolve('ActivationStore');
|
|
740
740
|
const sessionId = activationStore.getSessionId();
|
|
741
741
|
const portfolioManager = this.resolve('PortfolioManager');
|
|
@@ -758,13 +758,17 @@ export class DollhouseContainer {
|
|
|
758
758
|
port: configPort,
|
|
759
759
|
});
|
|
760
760
|
logger.info(`[Container] Web console started as ${result.role}`);
|
|
761
|
+
return result;
|
|
761
762
|
}
|
|
762
763
|
catch (error) {
|
|
763
764
|
logger.warn('[Container] Web console startup failed:', error);
|
|
765
|
+
return null;
|
|
766
|
+
}
|
|
767
|
+
finally {
|
|
768
|
+
timer?.endPhase('web_console');
|
|
764
769
|
}
|
|
765
|
-
timer?.endPhase('web_console');
|
|
766
770
|
}
|
|
767
|
-
async deferredPermissionServer(timer) {
|
|
771
|
+
async deferredPermissionServer(consoleResult, timer) {
|
|
768
772
|
timer?.startPhase('permission_server', false);
|
|
769
773
|
try {
|
|
770
774
|
if (!env.DOLLHOUSE_PERMISSION_SERVER) {
|
|
@@ -776,9 +780,15 @@ export class DollhouseContainer {
|
|
|
776
780
|
return;
|
|
777
781
|
}
|
|
778
782
|
// Permission routes are already mounted on the unified web console.
|
|
779
|
-
// We just need to write the port
|
|
780
|
-
//
|
|
781
|
-
const port =
|
|
783
|
+
// We just need to write the active leader port so the PreToolUse hook
|
|
784
|
+
// script reaches the same console instance that owns the live audit feed.
|
|
785
|
+
const port = consoleResult?.role === 'leader'
|
|
786
|
+
? consoleResult.port
|
|
787
|
+
: consoleResult?.election.leaderInfo.port;
|
|
788
|
+
if (!port) {
|
|
789
|
+
logger.debug('[Container] Permission server skipped — no active web console port available');
|
|
790
|
+
return;
|
|
791
|
+
}
|
|
782
792
|
const startMs = Date.now();
|
|
783
793
|
const { writePortFile, registerPortCleanup } = await import('../auto-dollhouse/portDiscovery.js');
|
|
784
794
|
logger.debug(`[Container] Writing permission server port file for port ${port}`);
|
|
@@ -1332,4 +1342,4 @@ export class DollhouseContainer {
|
|
|
1332
1342
|
}
|
|
1333
1343
|
}
|
|
1334
1344
|
}
|
|
1335
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udGFpbmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RpL0NvbnRhaW5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDcEIsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUFFLGVBQWUsRUFBRSxlQUFlLElBQUksT0FBTyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRXRFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN2QyxPQUFPLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxnQ0FBZ0MsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2hKLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM3RCxPQUFPLEVBQ0wsWUFBWSxFQUNaLGlCQUFpQixFQUNqQixzQkFBc0IsRUFDdEIsZ0JBQWdCLEVBQ2hCLGNBQWMsRUFDZCxnQkFBZ0IsR0FDakIsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLE1BQU0sa0NBQWtDLENB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QztZQUMvRSxDQUFDO1FBQ0gsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixZQUFZLENBQUMsUUFBUSxDQUFDLDhDQUE4QyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQy9FLENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgb3MgZnJvbSBcIm9zXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBQQUNLQUdFX1ZFUlNJT04sIFBBQ0tBR0VfVkVSU0lPTiBhcyBWRVJTSU9OIH0gZnJvbSBcIi4uL2dlbmVyYXRlZC92ZXJzaW9uLmpzXCI7XG5pbXBvcnQgeyBTZWN1cml0eU1vbml0b3IgfSBmcm9tIFwiLi4vc2VjdXJpdHkvc2VjdXJpdHlNb25pdG9yLmpzXCI7XG5pbXBvcnQgeyBWZXJiVHJpZ2dlck1hbmFnZXIgfSBmcm9tIFwiLi4vcG9ydGZvbGlvL1ZlcmJUcmlnZ2VyTWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgUmVsYXRpb25zaGlwTWFuYWdlciB9IGZyb20gXCIuLi9wb3J0Zm9saW8vUmVsYXRpb25zaGlwTWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgTkxQU2NvcmluZ01hbmFnZXIgfSBmcm9tIFwiLi4vcG9ydGZvbGlvL05MUFNjb3JpbmdNYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBTZXJ2ZXIgfSBmcm9tIFwiQG1vZGVsY29udGV4dHByb3RvY29sL3Nkay9zZXJ2ZXIvaW5kZXguanNcIjtcbmltcG9ydCB7IGxvYWRJbmRpY2F0b3JDb25maWcgfSBmcm9tIFwiLi4vY29uZmlnL2luZGljYXRvci1jb25maWcuanNcIjtcbmltcG9ydCB7IGVudiB9IGZyb20gXCIuLi9jb25maWcvZW52LmpzXCI7XG5pbXBvcnQgeyBBUElDYWNoZSwgQ29sbGVjdGlvbkNhY2hlLCBDb2xsZWN0aW9uSW5kZXhDYWNoZSwgQ2FjaGVNZW1vcnlCdWRnZXQgfSBmcm9tIFwiLi4vY2FjaGUvaW5kZXguanNcIjtcbmltcG9ydCB7IGdldFZhbGlkYXRlZEdsb2JhbENhY2hlTWVtb3J5Qnl0ZXMsIGdldFZhbGlkYXRlZE1heEJhY2t1cHNQZXJFbGVtZW50LCBTVE9SQUdFX0xBWUVSX0NPTkZJRyB9IGZyb20gXCIuLi9jb25maWcvcGVyZm9ybWFuY2UtY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBCYWNrdXBTZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL0JhY2t1cFNlcnZpY2UuanNcIjtcbmltcG9ydCB7XG4gIEdpdEh1YkNsaWVudCxcbiAgQ29sbGVjdGlvbkJyb3dzZXIsXG4gIENvbGxlY3Rpb25JbmRleE1hbmFnZXIsXG4gIENvbGxlY3Rpb25TZWFyY2gsXG4gIFBlcnNvbmFEZXRhaWxzLFxuICBFbGVtZW50SW5zdGFsbGVyLFxufSBmcm9tIFwiLi4vY29sbGVjdGlvbi9pbmRleC5qc1wiO1xuaW1wb3J0IHsgR2l0SHViQXV0aE1hbmFnZXIgfSBmcm9tIFwiLi4vYXV0aC9HaXRIdWJBdXRoTWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgUG9ydGZvbGlvTWFuYWdlciwgRWxlbWVudFR5cGUgfSBmcm9tIFwiLi4vcG9ydGZvbGlvL1BvcnRmb2xpb01hbmFnZXIuanNcIjtcbmltcG9ydCB7IE1pZ3JhdGlvbk1hbmFnZXIgfSBmcm9tIFwiLi4vcG9ydGZvbGlvL01pZ3JhdGlvbk1hbmFnZXIuanNcIjtcbmltcG9ydCB7IEVuaGFuY2VkSW5kZXhNYW5hZ2VyIH0gZnJvbSBcIi4uL3BvcnRmb2xpby9FbmhhbmNlZEluZGV4TWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgRW5oYW5jZWRJbmRleEhhbmRsZXIgfSBmcm9tIFwiLi4vaGFuZGxlcnMvRW5oYW5jZWRJbmRleEhhbmRsZXIuanNcIjtcbmltcG9ydCB7IE1DUEFRTEhhbmRsZXIsIHR5cGUgSGFuZGxlclJlZ2lzdHJ5IH0gZnJvbSBcIi4uL2hhbmRsZXJzL21jcC1hcWwvTUNQQVFMSGFuZGxlci5qc1wiO1xuaW1wb3J0IHsgR2F0ZWtlZXBlciB9IGZyb20gXCIuLi9oYW5kbGVycy9tY3AtYXFsL0dhdGVrZWVwZXIuanNcIjtcbmltcG9ydCB7IFNraWxsTWFuYWdlciB9IGZyb20gXCIuLi9lbGVtZW50cy9za2lsbHMvaW5kZXguanNcIjtcbmltcG9ydCB7IFRlbXBsYXRlTWFuYWdlciB9IGZyb20gXCIuLi9lbGVtZW50cy90ZW1wbGF0ZXMvVGVtcGxhdGVNYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZVJlbmRlcmVyIH0gZnJvbSBcIi4uL3V0aWxzL1RlbXBsYXRlUmVuZGVyZXIuanNcIjtcbmltcG9ydCB7IEFnZW50TWFuYWdlciB9IGZyb20gXCIuLi9lbGVtZW50cy9hZ2VudHMvQWdlbnRNYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBNZW1vcnkgfSBmcm9tIFwiLi4vZWxlbWVudHMvbWVtb3JpZXMvTWVtb3J5LmpzXCI7XG5pbXBvcnQgeyBNZW1vcnlNYW5hZ2VyIH0gZnJvbSBcIi4uL2VsZW1lbnRzL21lbW9yaWVzL01lbW9yeU1hbmFnZXIuanNcIjtcbmltcG9ydCB7IFdlYlNTRUxvZ1NpbmsgfSBmcm9tIFwiLi4vd2ViL3NpbmtzL1dlYlNTRUxvZ1NpbmsuanNcIjtcbmltcG9ydCB7IFdlYlNTRU1ldHJpY3NTaW5rIH0gZnJvbSBcIi4uL3dlYi9zaW5rcy9XZWJTU0VNZXRyaWNzU2luay5qc1wiO1xuaW1wb3J0IHsgRW5zZW1ibGVNYW5hZ2VyIH0gZnJvbSBcIi4uL2VsZW1lbnRzL2Vuc2VtYmxlcy9FbnNlbWJsZU1hbmFnZXIuanNcIjtcbmltcG9ydCB7IFBlcnNvbmFFeHBvcnRlciwgUGVyc29uYUltcG9ydGVyIH0gZnJvbSBcIi4uL3BlcnNvbmEvZXhwb3J0LWltcG9ydC9pbmRleC5qc1wiO1xuaW1wb3J0IHsgUGVyc29uYU1hbmFnZXIgfSBmcm9tIFwiLi4vcGVyc29uYS9QZXJzb25hTWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgUGVyc29uYUhhbmRsZXIgfSBmcm9tIFwiLi4vaGFuZGxlcnMvUGVyc29uYUhhbmRsZXIuanNcIjtcbmltcG9ydCB7IEVsZW1lbnRDUlVESGFuZGxlciB9IGZyb20gXCIuLi9oYW5kbGVycy9FbGVtZW50Q1JVREhhbmRsZXIuanNcIjtcbmltcG9ydCB7IENvbGxlY3Rpb25IYW5kbGVyIH0gZnJvbSBcIi4uL2hhbmRsZXJzL0NvbGxlY3Rpb25IYW5kbGVyLmpzXCI7XG5pbXBvcnQgeyBQb3J0Zm9saW9IYW5kbGVyIH0gZnJvbSBcIi4uL2hhbmRsZXJzL1BvcnRmb2xpb0hhbmRsZXIuanNcIjtcbmltcG9ydCB7IFBvcnRmb2xpb1B1bGxIYW5kbGVyIH0gZnJvbSBcIi4uL2hhbmRsZXJzL1BvcnRmb2xpb1B1bGxIYW5kbGVyLmpzXCI7XG5pbXBvcnQgeyBHaXRIdWJBdXRoSGFuZGxlciB9IGZyb20gXCIuLi9oYW5kbGVycy9HaXRIdWJBdXRoSGFuZGxlci5qc1wiO1xuaW1wb3J0IHsgRGlzcGxheUNvbmZpZ0hhbmRsZXIgfSBmcm9tIFwiLi4vaGFuZGxlcnMvRGlzcGxheUNvbmZpZ0hhbmRsZXIuanNcIjtcbmltcG9ydCB7IElkZW50aXR5SGFuZGxlciB9IGZyb20gXCIuLi9oYW5kbGVycy9JZGVudGl0eUhhbmRsZXIuanNcIjtcbmltcG9ydCB7IENvbmZpZ0hhbmRsZXIgfSBmcm9tIFwiLi4vaGFuZGxlcnMvQ29uZmlnSGFuZGxlci5qc1wiO1xuaW1wb3J0IHsgU3luY0hhbmRsZXIgfSBmcm9tIFwiLi4vaGFuZGxlcnMvU3luY0hhbmRsZXJWMi5qc1wiO1xuaW1wb3J0IHsgVG9vbFJlZ2lzdHJ5IH0gZnJvbSBcIi4uL2hhbmRsZXJzL1Rvb2xSZWdpc3RyeS5qc1wiO1xuaW1wb3J0IHsgU2VydmVyU2V0dXAgfSBmcm9tIFwiLi4vc2VydmVyL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBTZXJ2ZXJTdGFydHVwIH0gZnJvbSBcIi4uL3NlcnZlci9zdGFydHVwLmpzXCI7XG5pbXBvcnQgeyBQYXRoVmFsaWRhdG9yIH0gZnJvbSBcIi4uL3NlY3VyaXR5L3BhdGhWYWxpZGF0b3IuanNcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi91dGlscy9sb2dnZXIuanNcIjtcbmltcG9ydCB7IEVycm9ySGFuZGxlciB9IGZyb20gXCIuLi91dGlscy9FcnJvckhhbmRsZXIuanNcIjtcbmltcG9ydCB7IFVuaWZpZWRJbmRleE1hbmFnZXIgfSBmcm9tIFwiLi4vcG9ydGZvbGlvL1VuaWZpZWRJbmRleE1hbmFnZXIuanNcIjtcbmltcG9ydCB7IFBvcnRmb2xpb0luZGV4TWFuYWdlciB9IGZyb20gXCIuLi9wb3J0Zm9saW8vUG9ydGZvbGlvSW5kZXhNYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBTdWJtaXRUb1BvcnRmb2xpb1Rvb2wgfSBmcm9tIFwiLi4vdG9vbHMvcG9ydGZvbGlvL3N1Ym1pdFRvUG9ydGZvbGlvVG9vbC5qc1wiO1xuaW1wb3J0IHsgQ29uZmlnTWFuYWdlciB9IGZyb20gXCIuLi9jb25maWcvQ29uZmlnTWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgUG9ydGZvbGlvUmVwb01hbmFnZXIgfSBmcm9tIFwiLi4vcG9ydGZvbGlvL1BvcnRmb2xpb1JlcG9NYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBQb3J0Zm9saW9TeW5jTWFuYWdlciB9IGZyb20gXCIuLi9wb3J0Zm9saW8vUG9ydGZvbGlvU3luY01hbmFnZXIuanNcIjtcbmltcG9ydCB7IGdldFBvcnRmb2xpb1JlcG9zaXRvcnlOYW1lIH0gZnJvbSBcIi4uL2NvbmZpZy9wb3J0Zm9saW9Db25maWcuanNcIjtcbmltcG9ydCB7IEdpdEh1YlBvcnRmb2xpb0luZGV4ZXIgfSBmcm9tIFwiLi4vcG9ydGZvbGlvL0dpdEh1YlBvcnRmb2xpb0luZGV4ZXIuanNcIjtcbmltcG9ydCB7IEluZGV4Q29uZmlnTWFuYWdlciB9IGZyb20gXCIuLi9wb3J0Zm9saW8vY29uZmlnL0luZGV4Q29uZmlnLmpzXCI7XG5pbXBvcnQgeyBQb3J0Zm9saW9TeW5jQ29tcGFyZXIgfSBmcm9tIFwiLi4vc3luYy9Qb3J0Zm9saW9TeW5jQ29tcGFyZXIuanNcIjtcbmltcG9ydCB7IFBvcnRmb2xpb0Rvd25sb2FkZXIgfSBmcm9tIFwiLi4vc3luYy9Qb3J0Zm9saW9Eb3dubG9hZGVyLmpzXCI7XG5pbXBvcnQgeyBQZXJmb3JtYW5jZU1vbml0b3IgfSBmcm9tIFwiLi4vdXRpbHMvUGVyZm9ybWFuY2VNb25pdG9yLmpzXCI7XG5pbXBvcnQgeyBCdWlsZEluZm9TZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL0J1aWxkSW5mb1NlcnZpY2UuanNcIjtcbmltcG9ydCB7IEluaXRpYWxpemF0aW9uU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9Jbml0aWFsaXphdGlvblNlcnZpY2UuanNcIjtcbmltcG9ydCB7IFBlcnNvbmFJbmRpY2F0b3JTZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL1BlcnNvbmFJbmRpY2F0b3JTZXJ2aWNlLmpzXCI7XG5pbXBvcnQgeyBGaWxlTG9ja01hbmFnZXIgfSBmcm9tICcuLi9zZWN1cml0eS9maWxlTG9ja01hbmFnZXIuanMnO1xuaW1wb3J0IHsgU3RhdGVDaGFuZ2VOb3RpZmllciB9IGZyb20gXCIuLi9zZXJ2aWNlcy9TdGF0ZUNoYW5nZU5vdGlmaWVyLmpzXCI7XG5pbXBvcnQgeyBTZXJpYWxpemF0aW9uU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9TZXJpYWxpemF0aW9uU2VydmljZS5qc1wiO1xuaW1wb3J0IHsgRmlsZVdhdGNoU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9GaWxlV2F0Y2hTZXJ2aWNlLmpzXCI7XG5pbXBvcnQgeyBNZXRhZGF0YVNlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvTWV0YWRhdGFTZXJ2aWNlLmpzXCI7XG5pbXBvcnQgeyBGaWxlT3BlcmF0aW9uc1NlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvRmlsZU9wZXJhdGlvbnNTZXJ2aWNlLmpzXCI7XG5pbXBvcnQgeyBWYWxpZGF0aW9uUmVnaXN0cnkgfSBmcm9tIFwiLi4vc2VydmljZXMvdmFsaWRhdGlvbi9WYWxpZGF0aW9uUmVnaXN0cnkuanNcIjtcbmltcG9ydCB7IFRyaWdnZXJWYWxpZGF0aW9uU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy92YWxpZGF0aW9uL1RyaWdnZXJWYWxpZGF0aW9uU2VydmljZS5qc1wiO1xuaW1wb3J0IHsgVmFsaWRhdGlvblNlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvdmFsaWRhdGlvbi9WYWxpZGF0aW9uU2VydmljZS5qc1wiO1xuaW1wb3J0IHsgR2l0SHViUmF0ZUxpbWl0ZXIgfSBmcm9tIFwiLi4vdXRpbHMvR2l0SHViUmF0ZUxpbWl0ZXIuanNcIjtcbmltcG9ydCB7IEFudGhyb3BpY1RvRG9sbGhvdXNlQ29udmVydGVyLCBEb2xsaG91c2VUb0FudGhyb3BpY0NvbnZlcnRlciB9IGZyb20gXCIuLi9jb252ZXJ0ZXJzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBEYW5nZXJab25lRW5mb3JjZXIgfSBmcm9tIFwiLi4vc2VjdXJpdHkvRGFuZ2VyWm9uZUVuZm9yY2VyLmpzXCI7XG5pbXBvcnQgeyBBY3RpdmF0aW9uU3RvcmUgfSBmcm9tIFwiLi4vc2VydmljZXMvQWN0aXZhdGlvblN0b3JlLmpzXCI7XG5pbXBvcnQgeyBWZXJpZmljYXRpb25TdG9yZSB9IGZyb20gXCJAZG9sbGhvdXNlbWNwL3NhZmV0eVwiO1xuaW1wb3J0IHsgVmVyaWZpY2F0aW9uTm90aWZpZXIgfSBmcm9tIFwiLi4vc2VydmljZXMvVmVyaWZpY2F0aW9uTm90aWZpZXIuanNcIjtcbmltcG9ydCB7IFBhdHRlcm5FbmNyeXB0b3IgfSBmcm9tIFwiLi4vc2VjdXJpdHkvZW5jcnlwdGlvbi9QYXR0ZXJuRW5jcnlwdG9yLmpzXCI7XG5pbXBvcnQgeyBQYXR0ZXJuRGVjcnlwdG9yIH0gZnJvbSBcIi4uL3NlY3VyaXR5L2VuY3J5cHRpb24vUGF0dGVybkRlY3J5cHRvci5qc1wiO1xuaW1wb3J0IHsgQ29udGV4dFRyYWNrZXIgfSBmcm9tIFwiLi4vc2VjdXJpdHkvZW5jcnlwdGlvbi9Db250ZXh0VHJhY2tlci5qc1wiO1xuaW1wb3J0IHsgUGF0dGVybkV4dHJhY3RvciB9IGZyb20gXCIuLi9zZWN1cml0eS92YWxpZGF0aW9uL1BhdHRlcm5FeHRyYWN0b3IuanNcIjtcbmltcG9ydCB7IEJhY2tncm91bmRWYWxpZGF0b3IgfSBmcm9tIFwiLi4vc2VjdXJpdHkvdmFsaWRhdGlvbi9CYWNrZ3JvdW5kVmFsaWRhdG9yLmpzXCI7XG5pbXBvcnQgeyBTZWN1cml0eVRlbGVtZXRyeSB9IGZyb20gXCIuLi9zZWN1cml0eS90ZWxlbWV0cnkvU2VjdXJpdHlUZWxlbWV0cnkuanNcIjtcbmltcG9ydCB7IENvbnRlbnRWYWxpZGF0b3IgfSBmcm9tIFwiLi4vc2VjdXJpdHkvY29udGVudFZhbGlkYXRvci5qc1wiO1xuaW1wb3J0IHsgT3BlcmF0aW9uYWxUZWxlbWV0cnkgfSBmcm9tIFwiLi4vdGVsZW1ldHJ5L09wZXJhdGlvbmFsVGVsZW1ldHJ5LmpzXCI7XG5pbXBvcnQgeyBTdGFydHVwVGltZXIgfSBmcm9tIFwiLi4vdGVsZW1ldHJ5L1N0YXJ0dXBUaW1lci5qc1wiO1xuaW1wb3J0IHsgRGVmYXVsdEVuaGFuY2VkSW5kZXhIZWxwZXJzIH0gZnJvbSBcIi4uL3BvcnRmb2xpby9lbmhhbmNlZC1pbmRleC9FbmhhbmNlZEluZGV4SGVscGVycy5qc1wiO1xuaW1wb3J0IHsgRWxlbWVudERlZmluaXRpb25CdWlsZGVyIH0gZnJvbSBcIi4uL3BvcnRmb2xpby9lbmhhbmNlZC1pbmRleC9FbGVtZW50RGVmaW5pdGlvbkJ1aWxkZXIuanNcIjtcbmltcG9ydCB7IEFjdGlvblRyaWdnZXJFeHRyYWN0b3IgfSBmcm9tIFwiLi4vcG9ydGZvbGlvL2VuaGFuY2VkLWluZGV4L0FjdGlvblRyaWdnZXJFeHRyYWN0b3IuanNcIjtcbmltcG9ydCB7IFRyaWdnZXJNZXRyaWNzVHJhY2tlciB9IGZyb20gXCIuLi9wb3J0Zm9saW8vZW5oYW5jZWQtaW5kZXgvVHJpZ2dlck1ldHJpY3NUcmFja2VyLmpzXCI7XG5pbXBvcnQgeyBTZW1hbnRpY1JlbGF0aW9uc2hpcFNlcnZpY2UgfSBmcm9tIFwiLi4vcG9ydGZvbGlvL2VuaGFuY2VkLWluZGV4L1NlbWFudGljUmVsYXRpb25zaGlwU2VydmljZS5qc1wiO1xuaW1wb3J0IHsgRWxlbWVudEV2ZW50RGlzcGF0Y2hlciB9IGZyb20gJy4uL2V2ZW50cy9FbGVtZW50RXZlbnREaXNwYXRjaGVyLmpzJztcbmltcG9ydCB7IFRva2VuTWFuYWdlciB9IGZyb20gXCIuLi9zZWN1cml0eS90b2tlbk1hbmFnZXIuanNcIjtcbmltcG9ydCB7XG4gIFBhZ2luYXRpb25TZXJ2aWNlLFxuICBGaWx0ZXJTZXJ2aWNlLFxuICBTb3J0U2VydmljZSxcbiAgRWxlbWVudFF1ZXJ5U2VydmljZSxcbn0gZnJvbSAnLi4vc2VydmljZXMvcXVlcnkvaW5kZXguanMnO1xuaW1wb3J0IHsgUmV0ZW50aW9uUG9saWN5U2VydmljZSwgTWVtb3J5UmV0ZW50aW9uU3RyYXRlZ3kgfSBmcm9tICcuLi9zZXJ2aWNlcy9SZXRlbnRpb25Qb2xpY3lTZXJ2aWNlLmpzJztcbmltcG9ydCB7IFBvbGljeUV4cG9ydFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9Qb2xpY3lFeHBvcnRTZXJ2aWNlLmpzJztcbmltcG9ydCB7IExvZ01hbmFnZXIsIGJ1aWxkTG9nTWFuYWdlckNvbmZpZyB9IGZyb20gJy4uL2xvZ2dpbmcvTG9nTWFuYWdlci5qcyc7XG5pbXBvcnQgeyBGaWxlTG9nU2luayB9IGZyb20gJy4uL2xvZ2dpbmcvc2lua3MvRmlsZUxvZ1NpbmsuanMnO1xuaW1wb3J0IHsgTWVtb3J5TG9nU2luayB9IGZyb20gJy4uL2xvZ2dpbmcvc2lua3MvTWVtb3J5TG9nU2luay5qcyc7XG5pbXBvcnQgeyBQbGFpblRleHRGb3JtYXR0ZXIgfSBmcm9tICcuLi9sb2dnaW5nL2Zvcm1hdHRlcnMvUGxhaW5UZXh0Rm9ybWF0dGVyLmpzJztcbmltcG9ydCB7IEpzb25sRm9ybWF0dGVyIH0gZnJvbSAnLi4vbG9nZ2luZy9mb3JtYXR0ZXJzL0pzb25sRm9ybWF0dGVyLmpzJztcbmltcG9ydCB7IHdpcmVMb2dIb29rcywgZ2V0VHJpZ2dlck1ldHJpY3NMb2dMaXN0ZW5lciB9IGZyb20gJy4uL2xvZ2dpbmcvTG9nSG9va3MuanMnO1xuaW1wb3J0IHsgTWV0cmljc01hbmFnZXIgfSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NNYW5hZ2VyLmpzJztcbmltcG9ydCB7IE1lbW9yeU1ldHJpY3NTaW5rIH0gZnJvbSAnLi4vbWV0cmljcy9zaW5rcy9NZW1vcnlNZXRyaWNzU2luay5qcyc7XG5pbXBvcnQgeyBidWlsZE1ldHJpY3NNYW5hZ2VyQ29uZmlnIH0gZnJvbSAnLi4vbWV0cmljcy90eXBlcy5qcyc7XG5pbXBvcnQge1xuICBQZXJmb3JtYW5jZU1vbml0b3JDb2xsZWN0b3IsXG4gIExSVUNhY2hlQ29sbGVjdG9yLFxuICBTZWN1cml0eU1vbml0b3JDb2xsZWN0b3IsXG4gIFNlY3VyaXR5VGVsZW1ldHJ5Q29sbGVjdG9yLFxuICBGaWxlTG9ja01hbmFnZXJDb2xsZWN0b3IsXG4gIERlZmF1bHRFbGVtZW50UHJvdmlkZXJDb2xsZWN0b3IsXG4gIFRyaWdnZXJNZXRyaWNzVHJhY2tlckNvbGxlY3RvcixcbiAgT3BlcmF0aW9uYWxUZWxlbWV0cnlDb2xsZWN0b3IsXG4gIE9wZXJhdGlvbk1ldHJpY3NDb2xsZWN0b3IsXG4gIEdhdGVrZWVwZXJNZXRyaWNzQ29sbGVjdG9yLFxufSBmcm9tICcuLi9tZXRyaWNzL2NvbGxlY3RvcnMvaW5kZXguanMnO1xuaW1wb3J0IHsgT3BlcmF0aW9uTWV0cmljc1RyYWNrZXIgfSBmcm9tICcuLi9tZXRyaWNzL09wZXJhdGlvbk1ldHJpY3NUcmFja2VyLmpzJztcbmltcG9ydCB7IEdhdGVrZWVwZXJNZXRyaWNzVHJhY2tlciB9IGZyb20gJy4uL21ldHJpY3MvR2F0ZWtlZXBlck1ldHJpY3NUcmFja2VyLmpzJztcblxuLy8gU3RhdGUgaXMgb3duZWQgYnkgUGVyc29uYU1hbmFnZXIgYW5kIHNlcnZpY2VzXG5cbmV4cG9ydCBpbnRlcmZhY2UgSGFuZGxlckJ1bmRsZSB7XG4gIHBlcnNvbmFIYW5kbGVyOiBQZXJzb25hSGFuZGxlcjtcbiAgZWxlbWVudENydWRIYW5kbGVyOiBFbGVtZW50Q1JVREhhbmRsZXI7XG4gIGNvbGxlY3Rpb25IYW5kbGVyOiBDb2xsZWN0aW9uSGFuZGxlcjtcbiAgcG9ydGZvbGlvSGFuZGxlcjogUG9ydGZvbGlvSGFuZGxlcjtcbiAgZ2l0aHViQXV0aEhhbmRsZXI6IEdpdEh1YkF1dGhIYW5kbGVyO1xuICBkaXNwbGF5Q29uZmlnSGFuZGxlcjogRGlzcGxheUNvbmZpZ0hhbmRsZXI7XG4gIGlkZW50aXR5SGFuZGxlcjogSWRlbnRpdHlIYW5kbGVyO1xuICBjb25maWdIYW5kbGVyOiBDb25maWdIYW5kbGVyO1xuICBzeW5jSGFuZGxlcjogU3luY0hhbmRsZXI7XG4gIHRvb2xSZWdpc3RyeTogVG9vbFJlZ2lzdHJ5O1xuICBlbmhhbmNlZEluZGV4SGFuZGxlcjogRW5oYW5jZWRJbmRleEhhbmRsZXI7XG4gIG1jcEFxbEhhbmRsZXI6IE1DUEFRTEhhbmRsZXI7XG59XG5cbi8qKlxuICogVHlwZS1zYWZlIHNlcnZpY2UgcmVjb3JkIGZvciBkZXBlbmRlbmN5IGluamVjdGlvbiBjb250YWluZXJcbiAqXG4gKiBGSVg6IFJlcGxhY2VkICdhbnknIHR5cGVzIHdpdGggcHJvcGVyIGdlbmVyaWNzIHRvIGVuc3VyZSB0eXBlIHNhZmV0eVxuICogUHJldmlvdXNseTogVXNlZCAnYW55JyB3aGljaCBhbGxvd2VkIHVuc2FmZSBjYXN0cyBhbmQgcnVudGltZSBlcnJvcnNcbiAqIE5vdzogVXNlcyBnZW5lcmljIFQgd2l0aCAndW5rbm93bicgZmFsbGJhY2sgZm9yIGNvbXBpbGUtdGltZSB0eXBlIGNoZWNraW5nXG4gKlxuICogQHRlbXBsYXRlIFQgVGhlIHNlcnZpY2UgdHlwZSAoZGVmYXVsdHMgdG8gdW5rbm93biBmb3IgbWF4aW11bSBzYWZldHkpXG4gKi9cbmludGVyZmFjZSBTZXJ2aWNlUmVjb3JkPFQgPSB1bmtub3duPiB7XG4gIGZhY3Rvcnk6ICgpID0+IFQ7XG4gIGluc3RhbmNlOiBUIHwgbnVsbDtcbiAgc2luZ2xldG9uOiBib29sZWFuO1xufVxuXG5leHBvcnQgY2xhc3MgRG9sbGhvdXNlQ29udGFpbmVyIHtcbiAgcHJpdmF0ZSBzZXJ2aWNlcyA9IG5ldyBNYXA8c3RyaW5nLCBTZXJ2aWNlUmVjb3JkPigpO1xuICBwcml2YXRlIHBlcnNvbmFzRGlyOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgLyoqIElzc3VlICM3MDY6IFNldCB0byB0cnVlIG9uY2UgY29tcGxldGVEZWZlcnJlZFNldHVwKCkgcmVzb2x2ZXMuICovXG4gIHB1YmxpYyBkZWZlcnJlZFNldHVwQ29tcGxldGUgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvLyBGSVg6IERNQ1AtU0VDLTAwNiAtIEF1ZGl0IERJIGNvbnRhaW5lciBpbml0aWFsaXphdGlvblxuICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgIHR5cGU6ICdQT1JURk9MSU9fSU5JVElBTElaQVRJT04nLFxuICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgc291cmNlOiAnRG9sbGhvdXNlQ29udGFpbmVyLmNvbnN0cnVjdG9yJyxcbiAgICAgIGRldGFpbHM6ICdEZXBlbmRlbmN5IGluamVjdGlvbiBjb250YWluZXIgaW5pdGlhbGl6aW5nJ1xuICAgIH0pO1xuICAgIHRoaXMucmVnaXN0ZXJTZXJ2aWNlcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGEgc2VydmljZSB3aXRoIHRoZSBESSBjb250YWluZXJcbiAgICpcbiAgICogRklYOiBBZGRlZCBleHBsaWNpdCB0eXBlIHBhcmFtZXRlciBmb3IgdHlwZSBzYWZldHlcbiAgICogVGhlIGZhY3RvcnkgaXMgc3RvcmVkIGFzICgpID0+IHVua25vd24gaW50ZXJuYWxseSB0byBhbGxvdyBoZXRlcm9nZW5lb3VzIHN0b3JhZ2UsXG4gICAqIGJ1dCB0aGUgdHlwZSBUIGlzIHByZXNlcnZlZCBmb3IgcmVzb2x2ZSgpIGNhbGxzXG4gICAqXG4gICAqIEB0ZW1wbGF0ZSBUIFRoZSBzZXJ2aWNlIHR5cGVcbiAgICogQHBhcmFtIG5hbWUgVW5pcXVlIHNlcnZpY2UgaWRlbnRpZmllclxuICAgKiBAcGFyYW0gZmFjdG9yeSBGYWN0b3J5IGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyB0aGUgc2VydmljZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0gb3B0aW9ucyBDb25maWd1cmF0aW9uIG9wdGlvbnMgKHNpbmdsZXRvbiBiZWhhdmlvcilcbiAgICovXG4gIHB1YmxpYyByZWdpc3RlcjxUPihuYW1lOiBzdHJpbmcsIGZhY3Rvcnk6ICgpID0+IFQsIG9wdGlvbnM6IHsgc2luZ2xldG9uPzogYm9vbGVhbiB9ID0geyBzaW5nbGV0b246IHRydWUgfSk6IHZvaWQge1xuICAgIC8vIEZJWDogRE1DUC1TRUMtMDA2IC0gQXVkaXQgc2VydmljZSByZWdpc3RyYXRpb25cbiAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICB0eXBlOiAnRUxFTUVOVF9DUkVBVEVEJyxcbiAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgIHNvdXJjZTogJ0RvbGxob3VzZUNvbnRhaW5lci5yZWdpc3RlcicsXG4gICAgICBkZXRhaWxzOiBgU2VydmljZSByZWdpc3RlcmVkOiAke25hbWV9YCxcbiAgICAgIGFkZGl0aW9uYWxEYXRhOiB7IHNlcnZpY2VOYW1lOiBuYW1lLCBzaW5nbGV0b246IG9wdGlvbnMuc2luZ2xldG9uID8/IHRydWUgfVxuICAgIH0pO1xuICAgIHRoaXMuc2VydmljZXMuc2V0KG5hbWUsIHtcbiAgICAgIGZhY3Rvcnk6IGZhY3RvcnkgYXMgKCkgPT4gdW5rbm93bixcbiAgICAgIGluc3RhbmNlOiBudWxsLFxuICAgICAgc2luZ2xldG9uOiBvcHRpb25zLnNpbmdsZXRvbiA/PyB0cnVlXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSBhIHNlcnZpY2UgZnJvbSB0aGUgREkgY29udGFpbmVyXG4gICAqXG4gICAqIEZJWDogVHlwZSBzYWZldHkgaW1wcm92ZWQgd2l0aCBleHBsaWNpdCBjYXN0aW5nIGFuZCB2YWxpZGF0aW9uXG4gICAqIFRoZSAnYXMgVCcgY2FzdCBpcyBzYWZlIGJlY2F1c2U6XG4gICAqIDEuIFNlcnZpY2VzIGFyZSByZWdpc3RlcmVkIHdpdGggdHlwZWQgZmFjdG9yaWVzXG4gICAqIDIuIFRoZSBzZXJ2aWNlIG5hbWUgYWN0cyBhcyBhIHR5cGUgZGlzY3JpbWluYXRvclxuICAgKiAzLiBJbmNvcnJlY3QgdXNhZ2Ugd2lsbCBiZSBjYXVnaHQgYXQgdGhlIHJlZ2lzdHJhdGlvbiBzaXRlXG4gICAqXG4gICAqIEB0ZW1wbGF0ZSBUIFRoZSBleHBlY3RlZCBzZXJ2aWNlIHR5cGVcbiAgICogQHBhcmFtIG5hbWUgU2VydmljZSBpZGVudGlmaWVyXG4gICAqIEByZXR1cm5zIFRoZSBzZXJ2aWNlIGluc3RhbmNlXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgc2VydmljZSBpcyBub3QgcmVnaXN0ZXJlZFxuICAgKi9cbiAgcHVibGljIHJlc29sdmU8VD4obmFtZTogc3RyaW5nKTogVCB7XG4gICAgY29uc3Qgc2VydmljZSA9IHRoaXMuc2VydmljZXMuZ2V0KG5hbWUpO1xuICAgIGlmICghc2VydmljZSkge1xuICAgICAgLy8gRklYOiBETUNQLVNFQy0wMDYgLSBBdWRpdCBzZXJ2aWNlIHJlc29sdXRpb24gZmFpbHVyZXNcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogJ01FTU9SWV9MT0FEX0ZBSUxFRCcsXG4gICAgICAgIHNldmVyaXR5OiAnTUVESVVNJyxcbiAgICAgICAgc291cmNlOiAnRG9sbGhvdXNlQ29udGFpbmVyLnJlc29sdmUnLFxuICAgICAgICBkZXRhaWxzOiBgU2VydmljZSBub3QgcmVnaXN0ZXJlZDogJHtuYW1lfWAsXG4gICAgICAgIGFkZGl0aW9uYWxEYXRhOiB7IHNlcnZpY2VOYW1lOiBuYW1lIH1cbiAgICAgIH0pO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBTZXJ2aWNlIG5vdCByZWdpc3RlcmVkOiAke25hbWV9YCk7XG4gICAgfVxuXG4gICAgaWYgKHNlcnZpY2Uuc2luZ2xldG9uKSB7XG4gICAgICBpZiAoIXNlcnZpY2UuaW5zdGFuY2UpIHtcbiAgICAgICAgc2VydmljZS5pbnN0YW5jZSA9IHNlcnZpY2UuZmFjdG9yeSgpO1xuICAgICAgICAvLyBGSVg6IERNQ1AtU0VDLTAwNiAtIEF1ZGl0IHNpbmdsZXRvbiBpbnN0YW50aWF0aW9uXG4gICAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgICB0eXBlOiAnRUxFTUVOVF9DUkVBVEVEJyxcbiAgICAgICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICAgICAgc291cmNlOiAnRG9sbGhvdXNlQ29udGFpbmVyLnJlc29sdmUnLFxuICAgICAgICAgIGRldGFpbHM6IGBTaW5nbGV0b24gaW5zdGFudGlhdGVkOiAke25hbWV9YCxcbiAgICAgICAgICBhZGRpdGlvbmFsRGF0YTogeyBzZXJ2aWNlTmFtZTogbmFtZSB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNlcnZpY2UuaW5zdGFuY2UgYXMgVDtcbiAgICB9XG5cbiAgICByZXR1cm4gc2VydmljZS5mYWN0b3J5KCkgYXMgVDtcbiAgfVxuXG4gIHByaXZhdGUgcmVnaXN0ZXJTZXJ2aWNlcygpOiB2b2lkIHtcblxuXG4gICAgLy8gSXNzdWUgIzcwNjogU3RhcnR1cCB0aW1pbmcgaW5zdHJ1bWVudGF0aW9uXG4gICAgdGhpcy5yZWdpc3RlcignU3RhcnR1cFRpbWVyJywgKCkgPT4gbmV3IFN0YXJ0dXBUaW1lcigpKTtcblxuICAgIC8vIENPUkUgJiBDQUNISU5HXG4gICAgdGhpcy5yZWdpc3RlcignQ2FjaGVNZW1vcnlCdWRnZXQnLCAoKSA9PiBuZXcgQ2FjaGVNZW1vcnlCdWRnZXQoe1xuICAgICAgZ2xvYmFsTGltaXRCeXRlczogZ2V0VmFsaWRhdGVkR2xvYmFsQ2FjaGVNZW1vcnlCeXRlcygpLFxuICAgIH0pKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdBUElDYWNoZScsICgpID0+IG5ldyBBUElDYWNoZSgpKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdDb2xsZWN0aW9uQ2FjaGUnLCAoKSA9PiBuZXcgQ29sbGVjdGlvbkNhY2hlKHRoaXMucmVzb2x2ZSgnRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJyksIHVuZGVmaW5lZCkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ1JhdGVMaW1pdFRyYWNrZXInLCAoKSA9PiBuZXcgTWFwPHN0cmluZywgbnVtYmVyW10+KCkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0ZpbGVMb2NrTWFuYWdlcicsICgpID0+IG5ldyBGaWxlTG9ja01hbmFnZXIoKSk7XG4gICAgdGhpcy5yZWdpc3RlcignRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJywgKCkgPT4gbmV3IEZpbGVPcGVyYXRpb25zU2VydmljZSh0aGlzLnJlc29sdmUoJ0ZpbGVMb2NrTWFuYWdlcicpKSk7XG4gICAgdGhpcy5yZWdpc3RlcignQ29uZmlnTWFuYWdlcicsICgpID0+IHtcbiAgICAgIHJldHVybiBuZXcgQ29uZmlnTWFuYWdlcih0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpLCBvcyk7XG4gICAgfSk7XG4gICAgLy8gSXNzdWUgIzUxOiBHZW5lcmljIHJldGVudGlvbiBwb2xpY3kgc2VydmljZSB3aXRoIHN0cmF0ZWd5IHBhdHRlcm5cbiAgICB0aGlzLnJlZ2lzdGVyKCdSZXRlbnRpb25Qb2xpY3lTZXJ2aWNlJywgKCkgPT4ge1xuICAgICAgY29uc3Qgc2VydmljZSA9IG5ldyBSZXRlbnRpb25Qb2xpY3lTZXJ2aWNlKHRoaXMucmVzb2x2ZSgnQ29uZmlnTWFuYWdlcicpKTtcbiAgICAgIC8vIFJlZ2lzdGVyIG1lbW9yeSByZXRlbnRpb24gc3RyYXRlZ3kgKGZpcnN0IG9mIHBvdGVudGlhbGx5IDUwKyBlbGVtZW50IHR5cGVzKVxuICAgICAgc2VydmljZS5yZWdpc3RlclN0cmF0ZWd5KG5ldyBNZW1vcnlSZXRlbnRpb25TdHJhdGVneSgpKTtcbiAgICAgIHJldHVybiBzZXJ2aWNlO1xuICAgIH0pO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0luZGV4Q29uZmlnTWFuYWdlcicsICgpID0+IG5ldyBJbmRleENvbmZpZ01hbmFnZXIoKSk7XG4gICAgdGhpcy5yZWdpc3RlcignSW5kaWNhdG9yQ29uZmlnJywgKCkgPT4gbG9hZEluZGljYXRvckNvbmZpZygpKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdTdGF0ZUNoYW5nZU5vdGlmaWVyJywgKCkgPT4gbmV3IFN0YXRlQ2hhbmdlTm90aWZpZXIoKSk7XG4gICAgdGhpcy5yZWdpc3RlcignR2l0SHViUmF0ZUxpbWl0ZXInLCAoKSA9PiBuZXcgR2l0SHViUmF0ZUxpbWl0ZXIoXG4gICAgICB0aGlzLnJlc29sdmUoJ1Rva2VuTWFuYWdlcicpXG4gICAgKSk7XG4gICAgdGhpcy5yZWdpc3RlcignRWxlbWVudEV2ZW50RGlzcGF0Y2hlcicsICgpID0+IEVsZW1lbnRFdmVudERpc3BhdGNoZXIuZ2V0U2hhcmVkRGlzcGF0Y2hlcigpKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdNQ1BMb2dnZXInLCAoKSA9PiBsb2dnZXIpO1xuXG4gICAgdGhpcy5yZWdpc3RlcignUGVyc29uYUltcG9ydGVyJywgKCkgPT4ge1xuICAgICAgY29uc3QgcG9ydGZvbGlvTWFuYWdlciA9IHRoaXMucmVzb2x2ZTxQb3J0Zm9saW9NYW5hZ2VyPignUG9ydGZvbGlvTWFuYWdlcicpO1xuICAgICAgY29uc3QgcGVyc29uYXNEaXIgPSBwb3J0Zm9saW9NYW5hZ2VyLmdldEVsZW1lbnREaXIoRWxlbWVudFR5cGUuUEVSU09OQSk7XG4gICAgICAvLyBUaGlzIGlzIGEgYml0IG9mIGEgaGFjayB0byBicmVhayB0aGUgY2lyY3VsYXIgZGVwZW5kZW5jeS4gV2UgcmVzb2x2ZSBQZXJzb25hTWFuYWdlciBpbnNpZGUgdGhlIHByb3ZpZGVyIGZ1bmN0aW9uLlxuICAgICAgY29uc3QgY3VycmVudFVzZXJQcm92aWRlciA9ICgpID0+IHRoaXMucmVzb2x2ZTxQZXJzb25hTWFuYWdlcj4oJ1BlcnNvbmFNYW5hZ2VyJykuZ2V0Q3VycmVudFVzZXJGb3JBdHRyaWJ1dGlvbigpO1xuICAgICAgcmV0dXJuIG5ldyBQZXJzb25hSW1wb3J0ZXIoXG4gICAgICAgIHBlcnNvbmFzRGlyLFxuICAgICAgICBjdXJyZW50VXNlclByb3ZpZGVyLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJylcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICAvLyBHSVRIVUIgJiBDT0xMRUNUSU9OXG4gICAgdGhpcy5yZWdpc3RlcignR2l0SHViQ2xpZW50JywgKCkgPT4gbmV3IEdpdEh1YkNsaWVudChcbiAgICAgIHRoaXMucmVzb2x2ZSgnQVBJQ2FjaGUnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnUmF0ZUxpbWl0VHJhY2tlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdUb2tlbk1hbmFnZXInKVxuICAgICkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0dpdEh1YkF1dGhNYW5hZ2VyJywgKCkgPT4gbmV3IEdpdEh1YkF1dGhNYW5hZ2VyKFxuICAgICAgdGhpcy5yZXNvbHZlKCdBUElDYWNoZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdDb25maWdNYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1Rva2VuTWFuYWdlcicpXG4gICAgKSk7XG4gICAgdGhpcy5yZWdpc3RlcignQ29sbGVjdGlvbkluZGV4TWFuYWdlcicsICgpID0+IG5ldyBDb2xsZWN0aW9uSW5kZXhNYW5hZ2VyKHtcbiAgICAgIGZpbGVPcGVyYXRpb25zOiB0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpXG4gICAgfSkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0NvbGxlY3Rpb25Ccm93c2VyJywgKCkgPT4gbmV3IENvbGxlY3Rpb25Ccm93c2VyKHRoaXMucmVzb2x2ZSgnR2l0SHViQ2xpZW50JyksIHRoaXMucmVzb2x2ZSgnQ29sbGVjdGlvbkNhY2hlJyksIHRoaXMucmVzb2x2ZSgnQ29sbGVjdGlvbkluZGV4TWFuYWdlcicpKSk7XG4gICAgdGhpcy5yZWdpc3RlcignQ29sbGVjdGlvblNlYXJjaCcsICgpID0+IG5ldyBDb2xsZWN0aW9uU2VhcmNoKFxuICAgICAgdGhpcy5yZXNvbHZlKCdHaXRIdWJDbGllbnQnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnQ29sbGVjdGlvbkNhY2hlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0NvbGxlY3Rpb25JbmRleENhY2hlJylcbiAgICApKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdQZXJzb25hRGV0YWlscycsICgpID0+IG5ldyBQZXJzb25hRGV0YWlscyh0aGlzLnJlc29sdmUoJ0dpdEh1YkNsaWVudCcpKSk7XG5cbiAgICAvLyBQT1JURk9MSU8gJiBNQU5BR0VSU1xuICAgIHRoaXMucmVnaXN0ZXIoJ1BvcnRmb2xpb01hbmFnZXInLCAoKSA9PiBuZXcgUG9ydGZvbGlvTWFuYWdlcihcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJyksXG4gICAgICB1bmRlZmluZWRcbiAgICApKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdQZXJzb25hTWFuYWdlcicsICgpID0+IG5ldyBQZXJzb25hTWFuYWdlcihcbiAgICAgIHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvTWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdJbmRpY2F0b3JDb25maWcnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZUxvY2tNYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdWYWxpZGF0aW9uUmVnaXN0cnknKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnTWV0YWRhdGFTZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1BlcnNvbmFJbXBvcnRlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdTdGF0ZUNoYW5nZU5vdGlmaWVyJyksXG4gICAgICB7XG4gICAgICAgIGV2ZW50RGlzcGF0Y2hlcjogdGhpcy5yZXNvbHZlKCdFbGVtZW50RXZlbnREaXNwYXRjaGVyJyksXG4gICAgICAgIGVuYWJsZUZpbGVXYXRjaGVyOiB0cnVlLFxuICAgICAgICBhdXRvUmVsb2FkT25FeHRlcm5hbENoYW5nZTogdHJ1ZSxcbiAgICAgICAgZmlsZVdhdGNoU2VydmljZTogdGhpcy5yZXNvbHZlKCdGaWxlV2F0Y2hTZXJ2aWNlJyksXG4gICAgICAgIG1lbW9yeUJ1ZGdldDogdGhpcy5yZXNvbHZlKCdDYWNoZU1lbW9yeUJ1ZGdldCcpLFxuICAgICAgICBiYWNrdXBTZXJ2aWNlOiB0aGlzLnJlc29sdmUoJ0JhY2t1cFNlcnZpY2UnKVxuICAgICAgfVxuICAgICkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0luaXRpYWxpemF0aW9uU2VydmljZScsICgpID0+IG5ldyBJbml0aWFsaXphdGlvblNlcnZpY2UoXG4gICAgICB0aGlzLnJlc29sdmUoJ1BlcnNvbmFNYW5hZ2VyJylcbiAgICApKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdQZXJzb25hSW5kaWNhdG9yU2VydmljZScsICgpID0+IG5ldyBQZXJzb25hSW5kaWNhdG9yU2VydmljZShcbiAgICAgIHRoaXMucmVzb2x2ZSgnUGVyc29uYU1hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnSW5kaWNhdG9yQ29uZmlnJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1N0YXRlQ2hhbmdlTm90aWZpZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnRWxlbWVudEV2ZW50RGlzcGF0Y2hlcicpXG4gICAgKSk7XG4gICAgdGhpcy5yZWdpc3RlcignTWlncmF0aW9uTWFuYWdlcicsICgpID0+IG5ldyBNaWdyYXRpb25NYW5hZ2VyKHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvTWFuYWdlcicpLCB0aGlzLnJlc29sdmUoJ0ZpbGVMb2NrTWFuYWdlcicpLCB0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpKSk7XG4gICAgdGhpcy5yZWdpc3RlcignRWxlbWVudEluc3RhbGxlcicsICgpID0+IG5ldyBFbGVtZW50SW5zdGFsbGVyKHRoaXMucmVzb2x2ZSgnR2l0SHViQ2xpZW50JyksIHtcbiAgICAgIHBvcnRmb2xpb01hbmFnZXI6IHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvTWFuYWdlcicpLFxuICAgICAgdW5pZmllZEluZGV4TWFuYWdlcjogdGhpcy5yZXNvbHZlKCdVbmlmaWVkSW5kZXhNYW5hZ2VyJyksXG4gICAgICBmaWxlT3BlcmF0aW9uczogdGhpcy5yZXNvbHZlKCdGaWxlT3BlcmF0aW9uc1NlcnZpY2UnKVxuICAgIH0pKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdQb3J0Zm9saW9SZXBvTWFuYWdlcicsICgpID0+IG5ldyBQb3J0Zm9saW9SZXBvTWFuYWdlcihcbiAgICAgIHRoaXMucmVzb2x2ZSgnVG9rZW5NYW5hZ2VyJyksXG4gICAgICBnZXRQb3J0Zm9saW9SZXBvc2l0b3J5TmFtZSgpXG4gICAgKSk7XG4gICAgdGhpcy5yZWdpc3RlcignR2l0SHViUG9ydGZvbGlvSW5kZXhlcicsICgpID0+IG5ldyBHaXRIdWJQb3J0Zm9saW9JbmRleGVyKFxuICAgICAgdGhpcy5yZXNvbHZlKCdQb3J0Zm9saW9SZXBvTWFuYWdlcicpXG4gICAgKSk7XG4gICAgXG4gICAgLy8gU0VSVklDRVNcbiAgICB0aGlzLnJlZ2lzdGVyKCdTZXJpYWxpemF0aW9uU2VydmljZScsICgpID0+IG5ldyBTZXJpYWxpemF0aW9uU2VydmljZSgpKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdNZXRhZGF0YVNlcnZpY2UnLCAoKSA9PiBuZXcgTWV0YWRhdGFTZXJ2aWNlKCkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ1RyaWdnZXJWYWxpZGF0aW9uU2VydmljZScsICgpID0+IG5ldyBUcmlnZ2VyVmFsaWRhdGlvblNlcnZpY2UoKSk7XG4gICAgdGhpcy5yZWdpc3RlcignVmFsaWRhdGlvblNlcnZpY2UnLCAoKSA9PiBuZXcgVmFsaWRhdGlvblNlcnZpY2UoKSk7XG4gICAgdGhpcy5yZWdpc3RlcignRmlsZVdhdGNoU2VydmljZScsICgpID0+IG5ldyBGaWxlV2F0Y2hTZXJ2aWNlKCkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ1ZhbGlkYXRpb25SZWdpc3RyeScsICgpID0+IG5ldyBWYWxpZGF0aW9uUmVnaXN0cnkoXG4gICAgICB0aGlzLnJlc29sdmUoJ1ZhbGlkYXRpb25TZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1RyaWdnZXJWYWxpZGF0aW9uU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdNZXRhZGF0YVNlcnZpY2UnKVxuICAgICkpO1xuXG4gICAgLy8gTE9HR0lOR1xuICAgIHRoaXMucmVnaXN0ZXIoJ0xvZ01hbmFnZXInLCAoKSA9PiB7XG4gICAgICBjb25zdCBjb25maWcgPSBidWlsZExvZ01hbmFnZXJDb25maWcoZW52KTtcbiAgICAgIGNvbnN0IG1hbmFnZXIgPSBuZXcgTG9nTWFuYWdlcihjb25maWcpO1xuXG4gICAgICAvLyBQaGFzZSAyOiBGaWxlTG9nU2lua1xuICAgICAgY29uc3QgZm9ybWF0dGVyID0gY29uZmlnLmxvZ0Zvcm1hdCA9PT0gJ2pzb25sJ1xuICAgICAgICA/IG5ldyBKc29ubEZvcm1hdHRlcigpXG4gICAgICAgIDogbmV3IFBsYWluVGV4dEZvcm1hdHRlcigpO1xuICAgICAgY29uc3QgZmlsZVNpbmsgPSBuZXcgRmlsZUxvZ1Npbmsoe1xuICAgICAgICBsb2dEaXI6IGNvbmZpZy5sb2dEaXIsXG4gICAgICAgIGZvcm1hdHRlcixcbiAgICAgICAgbWF4RmlsZVNpemU6IGNvbmZpZy5maWxlTWF4U2l6ZSxcbiAgICAgICAgcmV0ZW50aW9uRGF5czogY29uZmlnLnJldGVudGlvbkRheXMsXG4gICAgICAgIHNlY3VyaXR5UmV0ZW50aW9uRGF5czogY29uZmlnLnNlY3VyaXR5UmV0ZW50aW9uRGF5cyxcbiAgICAgICAgbWF4RGlyU2l6ZUJ5dGVzOiBjb25maWcubWF4RGlyU2l6ZUJ5dGVzLFxuICAgICAgICBtYXhGaWxlc1BlckNhdGVnb3J5OiBjb25maWcubWF4RmlsZXNQZXJDYXRlZ29yeSxcbiAgICAgIH0pO1xuICAgICAgbWFuYWdlci5yZWdpc3RlclNpbmsoZmlsZVNpbmspO1xuICAgICAgZmlsZVNpbmsuc3RhcnRDbGVhbnVwVGltZXIoKTtcblxuICAgICAgLy8gUGhhc2UgMzogTWVtb3J5TG9nU2lua1xuICAgICAgY29uc3QgbWVtb3J5U2luayA9IG5ldyBNZW1vcnlMb2dTaW5rKHtcbiAgICAgICAgYXBwQ2FwYWNpdHk6IGNvbmZpZy5tZW1vcnlBcHBDYXBhY2l0eSxcbiAgICAgICAgc2VjdXJpdHlDYXBhY2l0eTogY29uZmlnLm1lbW9yeVNlY3VyaXR5Q2FwYWNpdHksXG4gICAgICAgIHBlcmZDYXBhY2l0eTogY29uZmlnLm1lbW9yeVBlcmZDYXBhY2l0eSxcbiAgICAgICAgdGVsZW1ldHJ5Q2FwYWNpdHk6IGNvbmZpZy5tZW1vcnlUZWxlbWV0cnlDYXBhY2l0eSxcbiAgICAgIH0pO1xuICAgICAgbWFuYWdlci5yZWdpc3RlclNpbmsobWVtb3J5U2luayk7XG5cbiAgICAgIHRoaXMucmVnaXN0ZXIoJ01lbW9yeUxvZ1NpbmsnLCAoKSA9PiBtZW1vcnlTaW5rKTtcblxuICAgICAgLy8gU3RhcnR1cCBtYXJrZXIg4oCUIGZpcnN0IGVudHJ5IGluIGV2ZXJ5IHNlcnZlciBzZXNzaW9uXG4gICAgICBtYW5hZ2VyLmxvZyh7XG4gICAgICAgIGlkOiBtYW5hZ2VyLmdlbmVyYXRlSWQoKSxcbiAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIGNhdGVnb3J5OiAnYXBwbGljYXRpb24nLFxuICAgICAgICBsZXZlbDogJ2luZm8nLFxuICAgICAgICBzb3VyY2U6ICdEb2xsaG91c2VNQ1AnLFxuICAgICAgICBtZXNzYWdlOiBgRG9sbGhvdXNlTUNQIHYke1ZFUlNJT059IHN0YXJ0aW5nYCxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIHZlcnNpb246IFZFUlNJT04sXG4gICAgICAgICAgbG9nTGV2ZWw6IGNvbmZpZy5sb2dMZXZlbCxcbiAgICAgICAgICBsb2dGb3JtYXQ6IGNvbmZpZy5sb2dGb3JtYXQsXG4gICAgICAgICAgY29uc29sZTogZW52LkRPTExIT1VTRV9XRUJfQ09OU09MRVxuICAgICAgICAgICAgPyBgaHR0cDovL2RvbGxob3VzZS5sb2NhbGhvc3Q6JHtlbnYuRE9MTEhPVVNFX1dFQl9DT05TT0xFX1BPUlR9YFxuICAgICAgICAgICAgOiAnZGlzYWJsZWQnLFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBtYW5hZ2VyO1xuICAgIH0pO1xuXG4gICAgLy8gTUVUUklDUyBDT0xMRUNUSU9OXG4gICAgLy8gTWVtb3J5TWV0cmljc1NpbmsgaXMgcmVnaXN0ZXJlZCBzZXBhcmF0ZWx5IChub3QgYXMgYSBzaWRlIGVmZmVjdCBpbnNpZGVcbiAgICAvLyBNZXRyaWNzTWFuYWdlcidzIGZhY3RvcnkpIHNvIGl0J3MgYXZhaWxhYmxlIGluIHRoZSBjb250YWluZXIgcmVnYXJkbGVzc1xuICAgIC8vIG9mIE1ldHJpY3NNYW5hZ2VyIHJlc29sdXRpb24gb3JkZXIuXG4gICAgY29uc3QgbWV0cmljc0NvbmZpZyA9IGJ1aWxkTWV0cmljc01hbmFnZXJDb25maWcoZW52KTtcbiAgICBpZiAobWV0cmljc0NvbmZpZy5lbmFibGVkKSB7XG4gICAgICBjb25zdCBtZW1vcnlNZXRyaWNzU2luayA9IG5ldyBNZW1vcnlNZXRyaWNzU2luayhtZXRyaWNzQ29uZmlnLm1lbW9yeVNuYXBzaG90Q2FwYWNpdHkpO1xuICAgICAgdGhpcy5yZWdpc3RlcignTWVtb3J5TWV0cmljc1NpbmsnLCAoKSA9PiBtZW1vcnlNZXRyaWNzU2luayk7XG5cbiAgICAgIHRoaXMucmVnaXN0ZXIoJ01ldHJpY3NNYW5hZ2VyJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBtYW5hZ2VyID0gbmV3IE1ldHJpY3NNYW5hZ2VyKG1ldHJpY3NDb25maWcsIGxvZ2dlcik7XG4gICAgICAgIG1hbmFnZXIucmVnaXN0ZXJTaW5rKG1lbW9yeU1ldHJpY3NTaW5rKTtcbiAgICAgICAgcmV0dXJuIG1hbmFnZXI7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBURUxFTUVUUllcbiAgICB0aGlzLnJlZ2lzdGVyKCdPcGVyYXRpb25hbFRlbGVtZXRyeScsICgpID0+IG5ldyBPcGVyYXRpb25hbFRlbGVtZXRyeShcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJylcbiAgICApKTtcblxuICAgIC8vIEJBQ0tVUCBTRVJWSUNFIChJc3N1ZSAjNjU5OiBVbml2ZXJzYWwgYmFja3VwIGZvciBhbGwgZWxlbWVudCB0eXBlcylcbiAgICB0aGlzLnJlZ2lzdGVyKCdCYWNrdXBTZXJ2aWNlJywgKCkgPT4gbmV3IEJhY2t1cFNlcnZpY2UoXG4gICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpLFxuICAgICAge1xuICAgICAgICBiYWNrdXBSb290RGlyOiBwYXRoLmpvaW4odGhpcy5yZXNvbHZlPFBvcnRmb2xpb01hbmFnZXI+KCdQb3J0Zm9saW9NYW5hZ2VyJykuZ2V0QmFzZURpcigpLCAnLmJhY2t1cHMnKSxcbiAgICAgICAgbWF4QmFja3Vwc1BlckVsZW1lbnQ6IGdldFZhbGlkYXRlZE1heEJhY2t1cHNQZXJFbGVtZW50KCksXG4gICAgICAgIGVuYWJsZWQ6IFNUT1JBR0VfTEFZRVJfQ09ORklHLkJBQ0tVUFNfRU5BQkxFRCxcbiAgICAgIH1cbiAgICApKTtcblxuICAgIC8vIFBPTElDWSBFWFBPUlQgU0VSVklDRSAoSXNzdWUgIzc2MjogRXhwb3J0IHBvbGljaWVzIHRvIGJyaWRnZSlcbiAgICB0aGlzLnJlZ2lzdGVyKCdQb2xpY3lFeHBvcnRTZXJ2aWNlJywgKCkgPT4gbmV3IFBvbGljeUV4cG9ydFNlcnZpY2Uoe1xuICAgICAgZ2V0QWN0aXZlRWxlbWVudHNGb3JQb2xpY3k6IGFzeW5jICgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBoYW5kbGVyID0gdGhpcy5yZXNvbHZlPEVsZW1lbnRDUlVESGFuZGxlcj4oJ0VsZW1lbnRDUlVESGFuZGxlcicpO1xuICAgICAgICAgIHJldHVybiBoYW5kbGVyLmdldEFjdGl2ZUVsZW1lbnRzRm9yUG9saWN5KCk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGdldFNlcnZlclZlcnNpb246ICgpID0+IFBBQ0tBR0VfVkVSU0lPTixcbiAgICB9KSk7XG5cbiAgICAvLyBFTEVNRU5UIE1BTkFHRVJTXG4gICAgdGhpcy5yZWdpc3RlcignU2tpbGxNYW5hZ2VyJywgKCkgPT4gbmV3IFNraWxsTWFuYWdlcihcbiAgICAgIHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvTWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdGaWxlTG9ja01hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1ZhbGlkYXRpb25SZWdpc3RyeScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdTZXJpYWxpemF0aW9uU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdNZXRhZGF0YVNlcnZpY2UnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZVdhdGNoU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdDYWNoZU1lbW9yeUJ1ZGdldCcpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdCYWNrdXBTZXJ2aWNlJylcbiAgICApKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdUZW1wbGF0ZU1hbmFnZXInLCAoKSA9PiBuZXcgVGVtcGxhdGVNYW5hZ2VyKFxuICAgICAgdGhpcy5yZXNvbHZlKCdQb3J0Zm9saW9NYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVMb2NrTWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdGaWxlT3BlcmF0aW9uc1NlcnZpY2UnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnVmFsaWRhdGlvblJlZ2lzdHJ5JyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1NlcmlhbGl6YXRpb25TZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ01ldGFkYXRhU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdGaWxlV2F0Y2hTZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0NhY2hlTWVtb3J5QnVkZ2V0JyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0JhY2t1cFNlcnZpY2UnKVxuICAgICkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ1RlbXBsYXRlUmVuZGVyZXInLCAoKSA9PiBuZXcgVGVtcGxhdGVSZW5kZXJlcih0aGlzLnJlc29sdmUoJ1RlbXBsYXRlTWFuYWdlcicpKSk7XG4gICAgdGhpcy5yZWdpc3RlcignQWdlbnRNYW5hZ2VyJywgKCkgPT4gbmV3IEFnZW50TWFuYWdlcihcbiAgICAgIHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvTWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdGaWxlTG9ja01hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZTxQb3J0Zm9saW9NYW5hZ2VyPignUG9ydGZvbGlvTWFuYWdlcicpLmdldEJhc2VEaXIoKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1ZhbGlkYXRpb25SZWdpc3RyeScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdTZXJpYWxpemF0aW9uU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdNZXRhZGF0YVNlcnZpY2UnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZVdhdGNoU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdDYWNoZU1lbW9yeUJ1ZGdldCcpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdCYWNrdXBTZXJ2aWNlJylcbiAgICApKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdNZW1vcnlNYW5hZ2VyJywgKCkgPT4gbmV3IE1lbW9yeU1hbmFnZXIoXG4gICAgICB0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb01hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZUxvY2tNYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdWYWxpZGF0aW9uUmVnaXN0cnknKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnU2VyaWFsaXphdGlvblNlcnZpY2UnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnTWV0YWRhdGFTZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVXYXRjaFNlcnZpY2UnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnQ2FjaGVNZW1vcnlCdWRnZXQnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnQmFja3VwU2VydmljZScpXG4gICAgKSk7XG4gICAgdGhpcy5yZWdpc3RlcignRW5zZW1ibGVNYW5hZ2VyJywgKCkgPT4gbmV3IEVuc2VtYmxlTWFuYWdlcihcbiAgICAgIHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvTWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdGaWxlTG9ja01hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1ZhbGlkYXRpb25SZWdpc3RyeScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdTZXJpYWxpemF0aW9uU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdNZXRhZGF0YVNlcnZpY2UnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZVdhdGNoU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdDYWNoZU1lbW9yeUJ1ZGdldCcpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdCYWNrdXBTZXJ2aWNlJylcbiAgICApKTtcbiAgICBNZW1vcnkuY29uZmlndXJlTWVtb3J5TWFuYWdlclJlc29sdmVyKCgpID0+IHRoaXMucmVzb2x2ZSgnTWVtb3J5TWFuYWdlcicpKTtcbiAgICAvLyBJc3N1ZSAjNTE6IENvbmZpZ3VyZSByZXRlbnRpb24gcG9saWN5IHJlc29sdmVyIGZvciBNZW1vcnkgY2xhc3NcbiAgICBNZW1vcnkuY29uZmlndXJlUmV0ZW50aW9uUG9saWN5UmVzb2x2ZXIoKCkgPT4gdGhpcy5yZXNvbHZlKCdSZXRlbnRpb25Qb2xpY3lTZXJ2aWNlJykpO1xuICAgIC8vIElzc3VlICMxMTE6IENvbmZpZ3VyZSBlbGVtZW50IG1hbmFnZXIgcmVzb2x2ZXIgZm9yIEFnZW50TWFuYWdlciAoZWxlbWVudC1hZ25vc3RpYyBhY3RpdmF0aW9uKVxuICAgIEFnZW50TWFuYWdlci5zZXRFbGVtZW50TWFuYWdlclJlc29sdmVyKChtYW5hZ2VyTmFtZTogc3RyaW5nKSA9PiB0aGlzLnJlc29sdmUobWFuYWdlck5hbWUpKTtcbiAgICAvLyBJc3N1ZSAjNDAyOiBDb25maWd1cmUgRGFuZ2VyWm9uZUVuZm9yY2VyIHJlc29sdmVyIGZvciBBZ2VudE1hbmFnZXIgKGF1dG9ub215IGV2YWx1YXRpb24pXG4gICAgQWdlbnRNYW5hZ2VyLnNldERhbmdlclpvbmVFbmZvcmNlclJlc29sdmVyKCgpID0+IHRoaXMucmVzb2x2ZSgnRGFuZ2VyWm9uZUVuZm9yY2VyJykpO1xuICAgIC8vIElzc3VlICMxNDI6IENvbmZpZ3VyZSBWZXJpZmljYXRpb25TdG9yZSByZXNvbHZlciBmb3IgQWdlbnRNYW5hZ2VyIChkYW5nZXIgem9uZSB2ZXJpZmljYXRpb24pXG4gICAgQWdlbnRNYW5hZ2VyLnNldFZlcmlmaWNhdGlvblN0b3JlUmVzb2x2ZXIoKCkgPT4gdGhpcy5yZXNvbHZlKCdWZXJpZmljYXRpb25TdG9yZScpKTtcblxuICAgIC8vIFFVRVJZIFNFUlZJQ0VTIChJc3N1ZSAjMzg6IFBhZ2luYXRpb24sIGZpbHRlcmluZywgc29ydGluZylcbiAgICAvLyBUaGVzZSBzZXJ2aWNlcyBhcmUgZWxlbWVudC1hZ25vc3RpYyBhbmQgY2FuIGJlIHVzZWQgd2l0aCBhbnkgZWxlbWVudCB0eXBlXG4gICAgdGhpcy5yZWdpc3RlcignUGFnaW5hdGlvblNlcnZpY2UnLCAoKSA9PiBuZXcgUGFnaW5hdGlvblNlcnZpY2UoKSk7XG4gICAgdGhpcy5yZWdpc3RlcignRmlsdGVyU2VydmljZScsICgpID0+IG5ldyBGaWx0ZXJTZXJ2aWNlKCkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ1NvcnRTZXJ2aWNlJywgKCkgPT4gbmV3IFNvcnRTZXJ2aWNlKCkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0VsZW1lbnRRdWVyeVNlcnZpY2UnLCAoKSA9PiBuZXcgRWxlbWVudFF1ZXJ5U2VydmljZShcbiAgICAgIHRoaXMucmVzb2x2ZTxQYWdpbmF0aW9uU2VydmljZT4oJ1BhZ2luYXRpb25TZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmU8RmlsdGVyU2VydmljZT4oJ0ZpbHRlclNlcnZpY2UnKSxcbiAgICAgIHRoaXMucmVzb2x2ZTxTb3J0U2VydmljZT4oJ1NvcnRTZXJ2aWNlJylcbiAgICApKTtcblxuICAgIC8vIENPTlZFUlRFUlNcbiAgICB0aGlzLnJlZ2lzdGVyKCdBbnRocm9waWNUb0RvbGxob3VzZUNvbnZlcnRlcicsICgpID0+IG5ldyBBbnRocm9waWNUb0RvbGxob3VzZUNvbnZlcnRlcigpKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdEb2xsaG91c2VUb0FudGhyb3BpY0NvbnZlcnRlcicsICgpID0+IG5ldyBEb2xsaG91c2VUb0FudGhyb3BpY0NvbnZlcnRlcigpKTtcblxuICAgIC8vIFNFQ1VSSVRZIFNFUlZJQ0VTXG4gICAgLy8gSXNzdWUgIzQwMjogRGFuZ2VyWm9uZUVuZm9yY2VyIGFzIERJLW1hbmFnZWQgc2luZ2xldG9uIChyZXBsYWNlcyBtb2R1bGUtbGV2ZWwgc2luZ2xldG9uKVxuICAgIHRoaXMucmVnaXN0ZXIoJ0RhbmdlclpvbmVFbmZvcmNlcicsICgpID0+IG5ldyBEYW5nZXJab25lRW5mb3JjZXIoXG4gICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpXG4gICAgKSk7XG4gICAgLy8gSXNzdWUgIzU5ODogQWN0aXZhdGlvblN0b3JlIGZvciBwZXItc2Vzc2lvbiBhY3RpdmF0aW9uIHBlcnNpc3RlbmNlXG4gICAgdGhpcy5yZWdpc3RlcignQWN0aXZhdGlvblN0b3JlJywgKCkgPT4gbmV3IEFjdGl2YXRpb25TdG9yZShcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJylcbiAgICApKTtcbiAgICAvLyBJc3N1ZSAjMTQyOiBWZXJpZmljYXRpb25TdG9yZSBmb3IgZGFuZ2VyIHpvbmUgY2hhbGxlbmdlIGNvZGVzIChzZXJ2ZXItc2lkZSlcbiAgICB0aGlzLnJlZ2lzdGVyKCdWZXJpZmljYXRpb25TdG9yZScsICgpID0+IG5ldyBWZXJpZmljYXRpb25TdG9yZSgpKTtcbiAgICAvLyBJc3N1ZSAjNTIyOiBOb24tYmxvY2tpbmcgT1MgZGlhbG9nIG5vdGlmaWVyIGZvciB2ZXJpZmljYXRpb24gY29kZXNcbiAgICB0aGlzLnJlZ2lzdGVyKCdWZXJpZmljYXRpb25Ob3RpZmllcicsICgpID0+IG5ldyBWZXJpZmljYXRpb25Ob3RpZmllcigpKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdUb2tlbk1hbmFnZXInLCAoKSA9PiBuZXcgVG9rZW5NYW5hZ2VyKFxuICAgICAgdGhpcy5yZXNvbHZlKCdGaWxlT3BlcmF0aW9uc1NlcnZpY2UnKVxuICAgICkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ1BhdHRlcm5FbmNyeXB0b3InLCAoKSA9PiBuZXcgUGF0dGVybkVuY3J5cHRvcigpKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdDb250ZXh0VHJhY2tlcicsICgpID0+IG5ldyBDb250ZXh0VHJhY2tlcigpKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdQYXR0ZXJuRGVjcnlwdG9yJywgKCkgPT4gbmV3IFBhdHRlcm5EZWNyeXB0b3IoXG4gICAgICB0aGlzLnJlc29sdmUoJ1BhdHRlcm5FbmNyeXB0b3InKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnQ29udGV4dFRyYWNrZXInKVxuICAgICkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ1BhdHRlcm5FeHRyYWN0b3InLCAoKSA9PiBuZXcgUGF0dGVybkV4dHJhY3RvcihcbiAgICAgIHRoaXMucmVzb2x2ZSgnUGF0dGVybkVuY3J5cHRvcicpXG4gICAgKSk7XG4gICAgdGhpcy5yZWdpc3RlcignQmFja2dyb3VuZFZhbGlkYXRvcicsICgpID0+IG5ldyBCYWNrZ3JvdW5kVmFsaWRhdG9yKFxuICAgICAgdGhpcy5yZXNvbHZlKCdQYXR0ZXJuRXh0cmFjdG9yJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ01lbW9yeU1hbmFnZXInKVxuICAgICkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ1NlY3VyaXR5VGVsZW1ldHJ5JywgKCkgPT4gbmV3IFNlY3VyaXR5VGVsZW1ldHJ5KCkpO1xuICAgIENvbnRlbnRWYWxpZGF0b3IuY29uZmlndXJlVGVsZW1ldHJ5UmVzb2x2ZXIoKCkgPT4gdGhpcy5yZXNvbHZlKCdTZWN1cml0eVRlbGVtZXRyeScpKTtcblxuICAgIC8vIE5MUCAmIElOREVYSU5HXG4gICAgdGhpcy5yZWdpc3RlcignTkxQU2NvcmluZ01hbmFnZXInLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGluZGV4Q29uZmlnTWFuYWdlciA9IHRoaXMucmVzb2x2ZTxJbmRleENvbmZpZ01hbmFnZXI+KCdJbmRleENvbmZpZ01hbmFnZXInKTtcbiAgICAgICAgY29uc3QgY29uZmlnID0gaW5kZXhDb25maWdNYW5hZ2VyLmdldENvbmZpZygpO1xuICAgICAgICByZXR1cm4gbmV3IE5MUFNjb3JpbmdNYW5hZ2VyKHtcbiAgICAgICAgICAgIGNhY2hlRXhwaXJ5OiBjb25maWcubmxwLmNhY2hlRXhwaXJ5TWludXRlcyAqIDYwICogMTAwMCxcbiAgICAgICAgICAgIG1pblRva2VuTGVuZ3RoOiBjb25maWcubmxwLm1pblRva2VuTGVuZ3RoLFxuICAgICAgICAgICAgZW50cm9weUJhbmRzOiBjb25maWcubmxwLmVudHJvcHlCYW5kcyxcbiAgICAgICAgICAgIGphY2NhcmRUaHJlc2hvbGRzOiBjb25maWcubmxwLmphY2NhcmRUaHJlc2hvbGRzXG4gICAgICAgIH0sIGluZGV4Q29uZmlnTWFuYWdlcik7XG4gICAgfSk7XG4gICAgdGhpcy5yZWdpc3RlcignVmVyYlRyaWdnZXJNYW5hZ2VyJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBpbmRleENvbmZpZ01hbmFnZXIgPSB0aGlzLnJlc29sdmU8SW5kZXhDb25maWdNYW5hZ2VyPignSW5kZXhDb25maWdNYW5hZ2VyJyk7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGluZGV4Q29uZmlnTWFuYWdlci5nZXRDb25maWcoKTtcbiAgICAgICAgcmV0dXJuIG5ldyBWZXJiVHJpZ2dlck1hbmFnZXIoe1xuICAgICAgICAgICAgY29uZmlkZW5jZVRocmVzaG9sZDogY29uZmlnLnZlcmJzLmNvbmZpZGVuY2VUaHJlc2hvbGQsXG4gICAgICAgICAgICBtYXhFbGVtZW50c1BlclZlcmI6IGNvbmZpZy52ZXJicy5tYXhFbGVtZW50c1BlclZlcmIsXG4gICAgICAgICAgICBpbmNsdWRlU3lub255bXM6IGNvbmZpZy52ZXJicy5pbmNsdWRlU3lub255bXNcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgdGhpcy5yZWdpc3RlcignUmVsYXRpb25zaGlwTWFuYWdlcicsICgpID0+IHtcbiAgICAgICAgY29uc3QgaW5kZXhDb25maWdNYW5hZ2VyID0gdGhpcy5yZXNvbHZlPEluZGV4Q29uZmlnTWFuYWdlcj4oJ0luZGV4Q29uZmlnTWFuYWdlcicpO1xuICAgICAgICBjb25zdCBjb25maWcgPSBpbmRleENvbmZpZ01hbmFnZXIuZ2V0Q29uZmlnKCk7XG4gICAgICAgIHJldHVybiBuZXcgUmVsYXRpb25zaGlwTWFuYWdlcih7XG4gICAgICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICAgICAgICBtaW5Db25maWRlbmNlOiBjb25maWcucGVyZm9ybWFuY2Uuc2ltaWxhcml0eVRocmVzaG9sZCxcbiAgICAgICAgICAgICAgICBlbmFibGVBdXRvRGlzY292ZXJ5OiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW5kZXhDb25maWdNYW5hZ2VyLFxuICAgICAgICAgICAgdmVyYlRyaWdnZXJNYW5hZ2VyOiB0aGlzLnJlc29sdmUoJ1ZlcmJUcmlnZ2VyTWFuYWdlcicpLFxuICAgICAgICAgICAgbmxwU2NvcmluZzogdGhpcy5yZXNvbHZlKCdOTFBTY29yaW5nTWFuYWdlcicpLFxuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdQb3J0Zm9saW9JbmRleE1hbmFnZXInLCAoKSA9PiBuZXcgUG9ydGZvbGlvSW5kZXhNYW5hZ2VyKHRoaXMucmVzb2x2ZSgnSW5kZXhDb25maWdNYW5hZ2VyJyksIHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvTWFuYWdlcicpLCB0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpKSk7XG4gICAgdGhpcy5yZWdpc3RlcignRW5oYW5jZWRJbmRleEhlbHBlcnMnLCAoKSA9PiBuZXcgRGVmYXVsdEVuaGFuY2VkSW5kZXhIZWxwZXJzKFxuICAgICAgbmV3IEVsZW1lbnREZWZpbml0aW9uQnVpbGRlcigpLFxuICAgICAgbmV3IFNlbWFudGljUmVsYXRpb25zaGlwU2VydmljZSh7XG4gICAgICAgIG5scFNjb3Jpbmc6IHRoaXMucmVzb2x2ZSgnTkxQU2NvcmluZ01hbmFnZXInKSxcbiAgICAgICAgcmVsYXRpb25zaGlwTWFuYWdlcjogdGhpcy5yZXNvbHZlKCdSZWxhdGlvbnNoaXBNYW5hZ2VyJylcbiAgICAgIH0pLFxuICAgICAgKGNvbnRleHQpID0+IG5ldyBBY3Rpb25UcmlnZ2VyRXh0cmFjdG9yKGNvbnRleHQpLFxuICAgICAgKG9wdGlvbnMpID0+IHtcbiAgICAgICAgY29uc3QgdHJhY2tlciA9IG5ldyBUcmlnZ2VyTWV0cmljc1RyYWNrZXIob3B0aW9ucyk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdHJhY2tlci5hZGRMb2dMaXN0ZW5lcihnZXRUcmlnZ2VyTWV0cmljc0xvZ0xpc3RlbmVyKFxuICAgICAgICAgICAgdGhpcy5yZXNvbHZlKCdMb2dNYW5hZ2VyJyksXG4gICAgICAgICAgICB0aGlzLnJlc29sdmUoJ0NvbnRleHRUcmFja2VyJylcbiAgICAgICAgICApKTtcbiAgICAgICAgfSBjYXRjaCB7IC8qIExvZ01hbmFnZXIgbm90IHlldCByZWdpc3RlcmVkICovIH1cbiAgICAgICAgcmV0dXJuIHRyYWNrZXI7XG4gICAgICB9XG4gICAgKSk7XG4gICAgdGhpcy5yZWdpc3RlcignRW5oYW5jZWRJbmRleE1hbmFnZXInLCAoKSA9PiBuZXcgRW5oYW5jZWRJbmRleE1hbmFnZXIoXG4gICAgICAgIHRoaXMucmVzb2x2ZSgnSW5kZXhDb25maWdNYW5hZ2VyJyksXG4gICAgICAgIHRoaXMucmVzb2x2ZSgnQ29uZmlnTWFuYWdlcicpLFxuICAgICAgICB0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb0luZGV4TWFuYWdlcicpLFxuICAgICAgICB0aGlzLnJlc29sdmUoJ05MUFNjb3JpbmdNYW5hZ2VyJyksXG4gICAgICAgIHRoaXMucmVzb2x2ZSgnVmVyYlRyaWdnZXJNYW5hZ2VyJyksXG4gICAgICAgIHRoaXMucmVzb2x2ZSgnUmVsYXRpb25zaGlwTWFuYWdlcicpLFxuICAgICAgICB0aGlzLnJlc29sdmUoJ0VuaGFuY2VkSW5kZXhIZWxwZXJzJyksXG4gICAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJylcbiAgICApKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdDb2xsZWN0aW9uSW5kZXhDYWNoZScsICgpID0+IG5ldyBDb2xsZWN0aW9uSW5kZXhDYWNoZShcbiAgICAgICAgdGhpcy5yZXNvbHZlKCdHaXRIdWJDbGllbnQnKSxcbiAgICAgICAgcHJvY2Vzcy5jd2QoKSxcbiAgICAgICAgdGhpcy5yZXNvbHZlKCdQZXJmb3JtYW5jZU1vbml0b3InKSxcbiAgICAgICAgdGhpcy5yZXNvbHZlKCdGaWxlT3BlcmF0aW9uc1NlcnZpY2UnKVxuICAgICkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ1VuaWZpZWRJbmRleE1hbmFnZXInLCAoKSA9PiBuZXcgVW5pZmllZEluZGV4TWFuYWdlcih7XG4gICAgICAgIHBvcnRmb2xpb0luZGV4TWFuYWdlcjogdGhpcy5yZXNvbHZlKCdQb3J0Zm9saW9JbmRleE1hbmFnZXInKSxcbiAgICAgICAgZ2l0aHViSW5kZXhlcjogdGhpcy5yZXNvbHZlKCdHaXRIdWJQb3J0Zm9saW9JbmRleGVyJyksXG4gICAgICAgIGNvbGxlY3Rpb25JbmRleENhY2hlOiB0aGlzLnJlc29sdmUoJ0NvbGxlY3Rpb25JbmRleENhY2hlJyksXG4gICAgICAgIGdpdGh1YkNsaWVudDogdGhpcy5yZXNvbHZlKCdHaXRIdWJDbGllbnQnKSxcbiAgICAgICAgYXBpQ2FjaGU6IHRoaXMucmVzb2x2ZSgnQVBJQ2FjaGUnKSxcbiAgICAgICAgcmF0ZUxpbWl0VHJhY2tlcjogdGhpcy5yZXNvbHZlKCdSYXRlTGltaXRUcmFja2VyJyksXG4gICAgICAgIHBlcmZvcm1hbmNlTW9uaXRvcjogdGhpcy5yZXNvbHZlKCdQZXJmb3JtYW5jZU1vbml0b3InKSxcbiAgICAgICAgZmlsZU9wZXJhdGlvbnM6IHRoaXMucmVzb2x2ZSgnRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJylcbiAgICB9KSk7XG5cbiAgICB0aGlzLnJlZ2lzdGVyKCdQb3J0Zm9saW9TeW5jQ29tcGFyZXInLCAoKSA9PiBuZXcgUG9ydGZvbGlvU3luY0NvbXBhcmVyKCkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ1BvcnRmb2xpb0Rvd25sb2FkZXInLCAoKSA9PiBuZXcgUG9ydGZvbGlvRG93bmxvYWRlcigpKTtcblxuICAgIC8vIFNZTkMgJiBUT09MU1xuICAgIHRoaXMucmVnaXN0ZXIoJ1BvcnRmb2xpb1B1bGxIYW5kbGVyJywgKCkgPT4gbmV3IFBvcnRmb2xpb1B1bGxIYW5kbGVyKHtcbiAgICAgICAgcG9ydGZvbGlvTWFuYWdlcjogdGhpcy5yZXNvbHZlKCdQb3J0Zm9saW9NYW5hZ2VyJyksXG4gICAgICAgIGluZGV4TWFuYWdlcjogdGhpcy5yZXNvbHZlKCdQb3J0Zm9saW9JbmRleE1hbmFnZXInKSxcbiAgICAgICAgZ2l0aHViSW5kZXhlcjogdGhpcy5yZXNvbHZlKCdHaXRIdWJQb3J0Zm9saW9JbmRleGVyJyksXG4gICAgICAgIHBvcnRmb2xpb1JlcG9NYW5hZ2VyOiB0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb1JlcG9NYW5hZ2VyJyksXG4gICAgICAgIHN5bmNDb21wYXJlcjogdGhpcy5yZXNvbHZlKCdQb3J0Zm9saW9TeW5jQ29tcGFyZXInKSxcbiAgICAgICAgZG93bmxvYWRlcjogdGhpcy5yZXNvbHZlKCdQb3J0Zm9saW9Eb3dubG9hZGVyJyksXG4gICAgICAgIGZpbGVPcGVyYXRpb25zOiB0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpLFxuICAgICAgICB0b2tlbk1hbmFnZXI6IHRoaXMucmVzb2x2ZSgnVG9rZW5NYW5hZ2VyJyksXG4gICAgfSkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ1N1Ym1pdFRvUG9ydGZvbGlvVG9vbCcsICgpID0+IG5ldyBTdWJtaXRUb1BvcnRmb2xpb1Rvb2wodGhpcy5yZXNvbHZlKCdBUElDYWNoZScpLCB7XG4gICAgICAgIGF1dGhNYW5hZ2VyOiB0aGlzLnJlc29sdmUoJ0dpdEh1YkF1dGhNYW5hZ2VyJyksXG4gICAgICAgIHBvcnRmb2xpb01hbmFnZXI6IHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvTWFuYWdlcicpLFxuICAgICAgICBwb3J0Zm9saW9JbmRleE1hbmFnZXI6IHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvSW5kZXhNYW5hZ2VyJyksXG4gICAgICAgIHBvcnRmb2xpb1JlcG9NYW5hZ2VyOiB0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb1JlcG9NYW5hZ2VyJyksXG4gICAgICAgIHJhdGVMaW1pdGVyOiB0aGlzLnJlc29sdmUoJ0dpdEh1YlJhdGVMaW1pdGVyJyksXG4gICAgICAgIGZpbGVPcGVyYXRpb25zOiB0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpLFxuICAgICAgICB0b2tlbk1hbmFnZXI6IHRoaXMucmVzb2x2ZSgnVG9rZW5NYW5hZ2VyJylcbiAgICB9KSk7XG4gICAgdGhpcy5yZWdpc3RlcignUG9ydGZvbGlvU3luY01hbmFnZXInLCAoKSA9PiBuZXcgUG9ydGZvbGlvU3luY01hbmFnZXIoe1xuICAgICAgICBjb25maWdNYW5hZ2VyOiB0aGlzLnJlc29sdmUoJ0NvbmZpZ01hbmFnZXInKSxcbiAgICAgICAgcG9ydGZvbGlvTWFuYWdlcjogdGhpcy5yZXNvbHZlKCdQb3J0Zm9saW9NYW5hZ2VyJyksXG4gICAgICAgIHBvcnRmb2xpb1JlcG9NYW5hZ2VyOiB0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb1JlcG9NYW5hZ2VyJyksXG4gICAgICAgIGluZGV4ZXI6IHRoaXMucmVzb2x2ZSgnR2l0SHViUG9ydGZvbGlvSW5kZXhlcicpLFxuICAgICAgICBmaWxlT3BlcmF0aW9uczogdGhpcy5yZXNvbHZlKCdGaWxlT3BlcmF0aW9uc1NlcnZpY2UnKSxcbiAgICAgICAgdG9rZW5NYW5hZ2VyOiB0aGlzLnJlc29sdmUoJ1Rva2VuTWFuYWdlcicpXG4gICAgfSkpO1xuXG4gICAgLy8gU0VSVkVSXG4gICAgdGhpcy5yZWdpc3RlcignU2VydmVyU2V0dXAnLCAoKSA9PiBuZXcgU2VydmVyU2V0dXAoXG4gICAgICB0aGlzLnJlc29sdmU8Q29udGV4dFRyYWNrZXI+KCdDb250ZXh0VHJhY2tlcicpXG4gICAgKSk7XG4gICAgdGhpcy5yZWdpc3RlcignU2VydmVyU3RhcnR1cCcsICgpID0+IG5ldyBTZXJ2ZXJTdGFydHVwKFxuICAgICAgdGhpcy5yZXNvbHZlKCdQb3J0Zm9saW9NYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVMb2NrTWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdDb25maWdNYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ01pZ3JhdGlvbk1hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnTWVtb3J5TWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdPcGVyYXRpb25hbFRlbGVtZXRyeScpXG4gICAgKSk7XG4gICAgdGhpcy5yZWdpc3RlcignQnVpbGRJbmZvU2VydmljZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHNlcnZpY2UgPSBuZXcgQnVpbGRJbmZvU2VydmljZSh0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpKTtcbiAgICAgIC8vIElzc3VlICM3MDY6IFdpcmUgc3RhcnR1cCBpbnN0cnVtZW50YXRpb25cbiAgICAgIHNlcnZpY2Uuc2V0U3RhcnR1cFRpbWVyKHRoaXMucmVzb2x2ZTxTdGFydHVwVGltZXI+KCdTdGFydHVwVGltZXInKSk7XG4gICAgICBzZXJ2aWNlLnNldERlZmVycmVkU2V0dXBDaGVja2VyKCgpID0+IHRoaXMuZGVmZXJyZWRTZXR1cENvbXBsZXRlKTtcbiAgICAgIHJldHVybiBzZXJ2aWNlO1xuICAgIH0pO1xuICAgIHRoaXMucmVnaXN0ZXIoJ1BlcmZvcm1hbmNlTW9uaXRvcicsICgpID0+IHtcbiAgICAgIGNvbnN0IG1vbml0b3IgPSBuZXcgUGVyZm9ybWFuY2VNb25pdG9yKCk7XG4gICAgICBtb25pdG9yLnN0YXJ0TW9uaXRvcmluZygpO1xuICAgICAgcmV0dXJuIG1vbml0b3I7XG4gICAgfSk7XG5cbiAgICB0aGlzLnJlZ2lzdGVyKCdPcGVyYXRpb25NZXRyaWNzVHJhY2tlcicsICgpID0+IG5ldyBPcGVyYXRpb25NZXRyaWNzVHJhY2tlcigpLCB7IHNpbmdsZXRvbjogdHJ1ZSB9KTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdHYXRla2VlcGVyTWV0cmljc1RyYWNrZXInLCAoKSA9PiBuZXcgR2F0ZWtlZXBlck1ldHJpY3NUcmFja2VyKCksIHsgc2luZ2xldG9uOiB0cnVlIH0pO1xuICB9XG5cbiAgcHVibGljIGdldFBlcnNvbmFzRGlyKCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnBlcnNvbmFzRGlyO1xuICB9XG5cbiAgLyoqXG4gICAqIFByZXBhcmUgcG9ydGZvbGlvIOKAlCBjcml0aWNhbCBwYXRoIG9ubHkuXG4gICAqXG4gICAqIElzc3VlICM3MDY6IFNwbGl0IGZyb20gdGhlIG9yaWdpbmFsIG1vbm9saXRoaWMgcHJlcGFyZVBvcnRmb2xpbygpLlxuICAgKiBPbmx5IHdvcmsgcmVxdWlyZWQgYmVmb3JlIE1DUCBjb25uZWN0KCkgcnVucyBoZXJlLiBOb24tY3JpdGljYWwgd29ya1xuICAgKiAobWVtb3J5IGF1dG8tbG9hZCwgYWN0aXZhdGlvbiByZXN0b3JlLCBsb2cgaG9va3MsIGRhbmdlciB6b25lIGluaXQpXG4gICAqIGlzIGRlZmVycmVkIHRvIGNvbXBsZXRlRGVmZXJyZWRTZXR1cCgpIHdoaWNoIHJ1bnMgcG9zdC1jb25uZWN0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHByZXBhcmVQb3J0Zm9saW8oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdGltZXIgPSB0aGlzLnJlc29sdmU8U3RhcnR1cFRpbWVyPignU3RhcnR1cFRpbWVyJyk7XG4gICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBtaWdyYXRpb25NYW5hZ2VyID0gdGhpcy5yZXNvbHZlPE1pZ3JhdGlvbk1hbmFnZXI+KCdNaWdyYXRpb25NYW5hZ2VyJyk7XG4gICAgY29uc3QgcG9ydGZvbGlvTWFuYWdlciA9IHRoaXMucmVzb2x2ZTxQb3J0Zm9saW9NYW5hZ2VyPignUG9ydGZvbGlvTWFuYWdlcicpO1xuXG4gICAgLy8gLS0tIGNvbmZpZ19jaGVja3MgKGNyaXRpY2FsKSAtLS1cbiAgICB0aW1lci5zdGFydFBoYXNlKCdjb25maWdfY2hlY2tzJywgdHJ1ZSk7XG5cbiAgICAvLyBQRVJGT1JNQU5DRSBPUFRJTUlaQVRJT046IFJ1biBpbmRlcGVuZGVudCBjaGVja3MgaW4gcGFyYWxsZWwgKDQwLTYwJSBmYXN0ZXIgc3RhcnR1cClcbiAgICAvLyBVc2UgUHJvbWlzZS5hbGxTZXR0bGVkIHRvIGNhcHR1cmUgYWxsIGNoZWNrIHJlc3VsdHMsIGV2ZW4gaWYgb25lIGZhaWxzXG4gICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChbXG4gICAgICBtaWdyYXRpb25NYW5hZ2VyLm5lZWRzTWlncmF0aW9uKCksXG4gICAgICBwb3J0Zm9saW9NYW5hZ2VyLmV4aXN0cygpXG4gICAgXSk7XG5cbiAgICAvLyBFeHRyYWN0IHJlc3VsdHMgYW5kIGNvbGxlY3QgYW55IGVycm9yc1xuICAgIGNvbnN0IGNoZWNrRXJyb3JzOiBBcnJheTx7IGNoZWNrOiBzdHJpbmc7IGVycm9yOiBFcnJvciB9PiA9IFtdO1xuXG4gICAgbGV0IG5lZWRzTWlncmF0aW9uID0gZmFsc2U7XG4gICAgaWYgKHJlc3VsdHNbMF0uc3RhdHVzID09PSAnZnVsZmlsbGVkJykge1xuICAgICAgbmVlZHNNaWdyYXRpb24gPSByZXN1bHRzWzBdLnZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjaGVja0Vycm9ycy5wdXNoKHtcbiAgICAgICAgY2hlY2s6ICdtaWdyYXRpb24nLFxuICAgICAgICBlcnJvcjogcmVzdWx0c1swXS5yZWFzb24gaW5zdGFuY2VvZiBFcnJvciA/IHJlc3VsdHNbMF0ucmVhc29uIDogbmV3IEVycm9yKFN0cmluZyhyZXN1bHRzWzBdLnJlYXNvbikpXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBsZXQgcG9ydGZvbGlvRXhpc3RzID0gZmFsc2U7XG4gICAgaWYgKHJlc3VsdHNbMV0uc3RhdHVzID09PSAnZnVsZmlsbGVkJykge1xuICAgICAgcG9ydGZvbGlvRXhpc3RzID0gcmVzdWx0c1sxXS52YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2hlY2tFcnJvcnMucHVzaCh7XG4gICAgICAgIGNoZWNrOiAncG9ydGZvbGlvJyxcbiAgICAgICAgZXJyb3I6IHJlc3VsdHNbMV0ucmVhc29uIGluc3RhbmNlb2YgRXJyb3IgPyByZXN1bHRzWzFdLnJlYXNvbiA6IG5ldyBFcnJvcihTdHJpbmcocmVzdWx0c1sxXS5yZWFzb24pKVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gSWYgYm90aCBjaGVja3MgZmFpbGVkLCB0aHJvdyBjb21wcmVoZW5zaXZlIGVycm9yXG4gICAgaWYgKGNoZWNrRXJyb3JzLmxlbmd0aCA9PT0gMikge1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlcyA9IGNoZWNrRXJyb3JzLm1hcChlID0+IGAke2UuY2hlY2t9OiAke2UuZXJyb3IubWVzc2FnZX1gKS5qb2luKCc7ICcpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQb3J0Zm9saW8gcHJlcGFyYXRpb24gZmFpbGVkIC0gYWxsIGNoZWNrcyBmYWlsZWQ6ICR7ZXJyb3JNZXNzYWdlc31gKTtcbiAgICB9XG5cbiAgICAvLyBJZiBvbmx5IG9uZSBjaGVjayBmYWlsZWQsIGxvZyB3YXJuaW5nIGJ1dCBjb250aW51ZVxuICAgIGlmIChjaGVja0Vycm9ycy5sZW5ndGggPT09IDEpIHtcbiAgICAgIGxvZ2dlci53YXJuKGBQb3J0Zm9saW8gY2hlY2sgZmFpbGVkIGJ1dCBjb250aW51aW5nOiAke2NoZWNrRXJyb3JzWzBdLmNoZWNrfSAtICR7Y2hlY2tFcnJvcnNbMF0uZXJyb3IubWVzc2FnZX1gKTtcbiAgICB9XG5cbiAgICB0aW1lci5lbmRQaGFzZSgnY29uZmlnX2NoZWNrcycpO1xuXG4gICAgLy8gLS0tIG1pZ3JhdGlvbiAoY3JpdGljYWwsIGNvbmRpdGlvbmFsKSAtLS1cbiAgICBpZiAobmVlZHNNaWdyYXRpb24pIHtcbiAgICAgIHRpbWVyLnN0YXJ0UGhhc2UoJ21pZ3JhdGlvbicsIHRydWUpO1xuICAgICAgbG9nZ2VyLmluZm8oXCJMZWdhY3kgcGVyc29uYXMgZGV0ZWN0ZWQuIFN0YXJ0aW5nIG1pZ3JhdGlvbi4uLlwiKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG1pZ3JhdGlvbk1hbmFnZXIubWlncmF0ZSh7IGJhY2t1cDogdHJ1ZSB9KTtcblxuICAgICAgaWYgKHJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKGBTdWNjZXNzZnVsbHkgbWlncmF0ZWQgJHtyZXN1bHQubWlncmF0ZWRDb3VudH0gcGVyc29uYXNgKTtcbiAgICAgICAgaWYgKHJlc3VsdC5iYWNrZWRVcCAmJiByZXN1bHQuYmFja3VwUGF0aCkge1xuICAgICAgICAgIGxvZ2dlci5pbmZvKGBCYWNrdXAgY3JlYXRlZCBhdDogJHtyZXN1bHQuYmFja3VwUGF0aH1gKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKFwiTWlncmF0aW9uIGNvbXBsZXRlZCB3aXRoIGVycm9yczpcIik7XG4gICAgICAgIHJlc3VsdC5lcnJvcnMuZm9yRWFjaCgoZXJyKSA9PiBsb2dnZXIuZXJyb3IoYCAgLSAke2Vycn1gKSk7XG4gICAgICB9XG4gICAgICB0aW1lci5lbmRQaGFzZSgnbWlncmF0aW9uJyk7XG4gICAgfVxuXG4gICAgLy8gLS0tIHBvcnRmb2xpb19pbml0IChjcml0aWNhbCwgY29uZGl0aW9uYWwpIC0tLVxuICAgIGlmICghcG9ydGZvbGlvRXhpc3RzKSB7XG4gICAgICB0aW1lci5zdGFydFBoYXNlKCdwb3J0Zm9saW9faW5pdCcsIHRydWUpO1xuICAgICAgbG9nZ2VyLmluZm8oXCJDcmVhdGluZyBwb3J0Zm9saW8gZGlyZWN0b3J5IHN0cnVjdHVyZS4uLlwiKTtcbiAgICAgIGF3YWl0IHBvcnRmb2xpb01hbmFnZXIuaW5pdGlhbGl6ZSgpO1xuICAgICAgdGltZXIuZW5kUGhhc2UoJ3BvcnRmb2xpb19pbml0Jyk7XG4gICAgfVxuXG4gICAgLy8gUEVSRk9STUFOQ0UgT1BUSU1JWkFUSU9OOiBJbml0aWFsaXplIGNvbGxlY3Rpb24gY2FjaGUgaW4gYmFja2dyb3VuZCAobm9uLWJsb2NraW5nKVxuICAgIC8vIFRoaXMgaXMgc2FmZSBiZWNhdXNlIGNvbGxlY3Rpb24gY2FjaGUgaXMgbm90IGNyaXRpY2FsIGZvciBzdGFydHVwXG4gICAgdGhpcy5pbml0aWFsaXplQ29sbGVjdGlvbkNhY2hlKCkuY2F0Y2goZXJyID0+XG4gICAgICBsb2dnZXIud2FybignQmFja2dyb3VuZCBjb2xsZWN0aW9uIGNhY2hlIGluaXRpYWxpemF0aW9uIGZhaWxlZCAod2lsbCByZXRyeSBvbiBkZW1hbmQpJywgZXJyKVxuICAgICk7XG5cbiAgICB0aGlzLnBlcnNvbmFzRGlyID0gcG9ydGZvbGlvTWFuYWdlci5nZXRFbGVtZW50RGlyKEVsZW1lbnRUeXBlLlBFUlNPTkEpO1xuXG4gICAgLy8gLS0tIGNvbmZpZ19tYW5hZ2VyIChjcml0aWNhbCkgLS0tXG4gICAgdGltZXIuc3RhcnRQaGFzZSgnY29uZmlnX21hbmFnZXInLCB0cnVlKTtcbiAgICBjb25zdCBjb25maWdNYW5hZ2VyID0gdGhpcy5yZXNvbHZlPENvbmZpZ01hbmFnZXI+KCdDb25maWdNYW5hZ2VyJyk7XG4gICAgYXdhaXQgY29uZmlnTWFuYWdlci5pbml0aWFsaXplKCk7XG4gICAgdGltZXIuZW5kUGhhc2UoJ2NvbmZpZ19tYW5hZ2VyJyk7XG5cbiAgICBjb25zdCBlbGFwc2VkVGltZSA9IERhdGUubm93KCkgLSBzdGFydFRpbWU7XG4gICAgbG9nZ2VyLmluZm8oYFtTdGFydHVwXSBDcml0aWNhbCBwb3J0Zm9saW8gcGF0aCBjb21wbGV0ZWQgaW4gJHtlbGFwc2VkVGltZX1tcyAocGVyc29uYXMgZGlyZWN0b3J5OiAke3RoaXMucGVyc29uYXNEaXJ9KWApO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXBsZXRlIG5vbi1jcml0aWNhbCBzZXR1cCBhZnRlciBNQ1AgY29ubmVjdCgpLlxuICAgKlxuICAgKiBJc3N1ZSAjNzA2OiBUaGVzZSBvcGVyYXRpb25zIHdlcmUgcHJldmlvdXNseSBpbiBwcmVwYXJlUG9ydGZvbGlvKCkgYnV0IGFyZVxuICAgKiBub24tZmF0YWwgYW5kIGNhbiBzYWZlbHkgcnVuIGFmdGVyIHRoZSBzZXJ2ZXIgaXMgYWNjZXB0aW5nIGNvbm5lY3Rpb25zLlxuICAgKiBUaGlzIHNocmlua3MgdGhlIGNyaXRpY2FsIHBhdGggYnkgMTAwMC0zNzAwbXMuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgY29tcGxldGVEZWZlcnJlZFNldHVwKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHRpbWVyID0gdGhpcy5yZXNvbHZlPFN0YXJ0dXBUaW1lcj4oJ1N0YXJ0dXBUaW1lcicpO1xuXG4gICAgLy8gSXNzdWUgIzcwNjogVGVzdCBob29rIOKAlCBpbmplY3QgYXJ0aWZpY2lhbCBkZWxheSB0byBzaW11bGF0ZSBzbG93IGRlZmVycmVkIHNldHVwLlxuICAgIC8vIE9ubHkgYWN0aXZlIHdoZW4gRE9MTEhPVVNFX1RFU1RfREVGRVJSRURfREVMQVlfTVMgaXMgc2V0IChpbnRlZ3JhdGlvbiB0ZXN0cykuXG4gICAgY29uc3QgdGVzdERlbGF5ID0gcGFyc2VJbnQocHJvY2Vzcy5lbnYuRE9MTEhPVVNFX1RFU1RfREVGRVJSRURfREVMQVlfTVMgfHwgJzAnLCAxMCk7XG4gICAgaWYgKHRlc3REZWxheSA+IDApIHtcbiAgICAgIGxvZ2dlci5pbmZvKGBbU3RhcnR1cF0gVGVzdCBkZWxheSBpbmplY3RlZDogJHt0ZXN0RGVsYXl9bXNgKTtcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCB0ZXN0RGVsYXkpKTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLmNvbXBsZXRlU2lua1NldHVwKHRpbWVyKTtcbiAgICBhd2FpdCB0aGlzLmNvbXBsZXRlQ29uc29sZVNldHVwKHRpbWVyKTtcblxuICAgIHRoaXMuZGVmZXJyZWRTZXR1cENvbXBsZXRlID0gdHJ1ZTtcblxuICAgIGNvbnN0IHJlcG9ydCA9IHRpbWVyLmdldFJlcG9ydCgpO1xuICAgIGxvZ2dlci5pbmZvKFxuICAgICAgYFtTdGFydHVwXSBEZWZlcnJlZCBzZXR1cCBjb21wbGV0ZWQgaW4gJHtyZXBvcnQuZGVmZXJyZWRNc31tcyBgICtcbiAgICAgIGAodG90YWwgc3RhcnR1cDogJHtyZXBvcnQudG90YWxNc31tcywgY3JpdGljYWw6ICR7cmVwb3J0LmNyaXRpY2FsUGF0aE1zfW1zKWBcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFdpcmUgc2lua3MsIGhvb2tzLCBjb2xsZWN0b3JzLCBhbmQgc2VjdXJpdHkg4oCUIGV2ZXJ5dGhpbmcgRVhDRVBUXG4gICAqIHRoZSB3ZWIgY29uc29sZSBsZWFkZXIgZWxlY3Rpb24gYW5kIHBlcm1pc3Npb24gc2VydmVyLlxuICAgKlxuICAgKiBDYWxsZWQgYnkgY29tcGxldGVEZWZlcnJlZFNldHVwKCkgaW4gTUNQIHN0ZGlvIG1vZGUsIGFuZCBkaXJlY3RseVxuICAgKiBieSB0aGUgLS13ZWIgc3RhbmRhbG9uZSBwYXRoIHdoaWNoIElTIHRoZSBzZXJ2ZXIgKCMxODY2KS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBjb21wbGV0ZVNpbmtTZXR1cCh0aW1lcj86IFN0YXJ0dXBUaW1lcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuZGVmZXJyZWRNZW1vcnlBdXRvbG9hZCh0aW1lcik7XG4gICAgYXdhaXQgdGhpcy5kZWZlcnJlZEFjdGl2YXRpb25SZXN0b3JlKHRpbWVyKTtcbiAgICBhd2FpdCB0aGlzLmRlZmVycmVkUG9saWN5RXhwb3J0KCk7XG4gICAgYXdhaXQgdGhpcy5kZWZlcnJlZExvZ0hvb2tzKHRpbWVyKTtcbiAgICBhd2FpdCB0aGlzLmRlZmVycmVkTWV0cmljc0NvbGxlY3RvcnModGltZXIpO1xuICAgIGF3YWl0IHRoaXMuZGVmZXJyZWREYW5nZXJab25lSW5pdCh0aW1lcik7XG4gICAgYXdhaXQgdGhpcy5kZWZlcnJlZFBhdHRlcm5FbmNyeXB0aW9uKHRpbWVyKTtcbiAgICBhd2FpdCB0aGlzLmRlZmVycmVkQmFja2dyb3VuZFZhbGlkYXRvcih0aW1lcik7XG4gIH1cblxuICAvKipcbiAgICogTGVhZGVyIGVsZWN0aW9uLCB3ZWIgY29uc29sZSBzZXJ2ZXIsIGFuZCBwZXJtaXNzaW9uIHNlcnZlci5cbiAgICogT25seSBjYWxsZWQgaW4gTUNQIHN0ZGlvIG1vZGUg4oCUIC0td2ViIHN0YW5kYWxvbmUgbW9kZSBJUyB0aGUgc2VydmVyICgjMTg2NikuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgY29tcGxldGVDb25zb2xlU2V0dXAodGltZXI/OiBTdGFydHVwVGltZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBTd2VlcCBzdGFsZSBwb3J0IGZpbGVzIGZyb20gcHJpb3Igc2Vzc2lvbnMgYmVmb3JlIGFueSBwb3J0IG9wZXJhdGlvbnMgKCMxODU2KS5cbiAgICAvLyBSdW5zIHVuY29uZGl0aW9uYWxseSDigJQgc3RhbGUgZmlsZXMgYWNjdW11bGF0ZSByZWdhcmRsZXNzIG9mIERPTExIT1VTRV9XRUJfQ09OU09MRS5cbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBzd2VlcFN0YWxlUG9ydEZpbGVzIH0gPSBhd2FpdCBpbXBvcnQoJy4uL3dlYi9wb3J0RGlzY292ZXJ5LmpzJyk7XG4gICAgICBhd2FpdCBzd2VlcFN0YWxlUG9ydEZpbGVzKCk7XG4gICAgfSBjYXRjaCB7IC8qIHN3ZWVwIGZhaWx1cmUgaXMgbm9uLWZhdGFsICovIH1cblxuICAgIGF3YWl0IHRoaXMuZGVmZXJyZWRXZWJDb25zb2xlKHRpbWVyKTtcbiAgICBhd2FpdCB0aGlzLmRlZmVycmVkUGVybWlzc2lvblNlcnZlcih0aW1lcik7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRlZmVycmVkTWVtb3J5QXV0b2xvYWQodGltZXI/OiBTdGFydHVwVGltZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aW1lcj8uc3RhcnRQaGFzZSgnbWVtb3J5X2F1dG9sb2FkJywgZmFsc2UpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb25maWdNYW5hZ2VyID0gdGhpcy5yZXNvbHZlPENvbmZpZ01hbmFnZXI+KCdDb25maWdNYW5hZ2VyJyk7XG4gICAgICBjb25zdCBjb25maWcgPSBjb25maWdNYW5hZ2VyLmdldENvbmZpZygpO1xuXG4gICAgICBpZiAoY29uZmlnLmF1dG9Mb2FkLmVuYWJsZWQpIHtcbiAgICAgICAgY29uc3QgbWVtb3J5TWFuYWdlciA9IHRoaXMucmVzb2x2ZTxNZW1vcnlNYW5hZ2VyPignTWVtb3J5TWFuYWdlcicpO1xuICAgICAgICBjb25zdCBhdXRvTG9hZFJlc3VsdCA9IGF3YWl0IG1lbW9yeU1hbmFnZXIubG9hZEFuZEFjdGl2YXRlQXV0b0xvYWRNZW1vcmllcygpO1xuXG4gICAgICAgIGlmIChhdXRvTG9hZFJlc3VsdC5lcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGxvZ2dlci53YXJuKFxuICAgICAgICAgICAgYFtDb250YWluZXJdIEF1dG8tbG9hZCBjb21wbGV0ZWQgd2l0aCAke2F1dG9Mb2FkUmVzdWx0LmVycm9ycy5sZW5ndGh9IGVycm9yKHMpOmAsXG4gICAgICAgICAgICBhdXRvTG9hZFJlc3VsdC5lcnJvcnNcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgbG9nZ2VyLmluZm8oXG4gICAgICAgICAgYFtDb250YWluZXJdIEF1dG8tbG9hZGVkICR7YXV0b0xvYWRSZXN1bHQubG9hZGVkfSBtZW1vcmllcyBgICtcbiAgICAgICAgICBgKH4ke2F1dG9Mb2FkUmVzdWx0LnRvdGFsVG9rZW5zfSB0b2tlbnMpLCAke2F1dG9Mb2FkUmVzdWx0LnNraXBwZWR9IHNraXBwZWRgXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dnZXIuZGVidWcoJ1tDb250YWluZXJdIEF1dG8tbG9hZCBtZW1vcmllcyBkaXNhYmxlZCBpbiBjb25maWd1cmF0aW9uJyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignW0NvbnRhaW5lcl0gTWVtb3J5IGF1dG8tbG9hZCBmYWlsZWQ6JywgZXJyb3IpO1xuICAgIH1cbiAgICB0aW1lcj8uZW5kUGhhc2UoJ21lbW9yeV9hdXRvbG9hZCcpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkZWZlcnJlZEFjdGl2YXRpb25SZXN0b3JlKHRpbWVyPzogU3RhcnR1cFRpbWVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGltZXI/LnN0YXJ0UGhhc2UoJ2FjdGl2YXRpb25fcmVzdG9yZScsIGZhbHNlKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYWN0aXZhdGlvblN0b3JlID0gdGhpcy5yZXNvbHZlPEFjdGl2YXRpb25TdG9yZT4oJ0FjdGl2YXRpb25TdG9yZScpO1xuICAgICAgYXdhaXQgYWN0aXZhdGlvblN0b3JlLmluaXRpYWxpemUoKTtcblxuICAgICAgaWYgKGFjdGl2YXRpb25TdG9yZS5pc0VuYWJsZWQoKSkge1xuICAgICAgICBhd2FpdCB0aGlzLnJlc3RvcmVBY3RpdmF0aW9ucyhhY3RpdmF0aW9uU3RvcmUpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIud2FybignW0NvbnRhaW5lcl0gQWN0aXZhdGlvbiBzdGF0ZSByZXN0b3JhdGlvbiBmYWlsZWQ6JywgZXJyb3IpO1xuICAgIH1cbiAgICB0aW1lcj8uZW5kUGhhc2UoJ2FjdGl2YXRpb25fcmVzdG9yZScpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkZWZlcnJlZFBvbGljeUV4cG9ydCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcG9saWN5RXhwb3J0U2VydmljZSA9IHRoaXMucmVzb2x2ZTxQb2xpY3lFeHBvcnRTZXJ2aWNlPignUG9saWN5RXhwb3J0U2VydmljZScpO1xuICAgICAgYXdhaXQgcG9saWN5RXhwb3J0U2VydmljZS5leHBvcnRQb2xpY2llcygpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZGVidWcoJ1tDb250YWluZXJdIFBvbGljeSBleHBvcnQgc2tpcHBlZDonLCBlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkZWZlcnJlZExvZ0hvb2tzKHRpbWVyPzogU3RhcnR1cFRpbWVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGltZXI/LnN0YXJ0UGhhc2UoJ2xvZ19ob29rcycsIGZhbHNlKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbG9nTWFuYWdlciA9IHRoaXMucmVzb2x2ZTxMb2dNYW5hZ2VyPignTG9nTWFuYWdlcicpO1xuICAgICAgY29uc3QgbG9nQ2xlYW51cHMgPSB3aXJlTG9nSG9va3MobG9nTWFuYWdlciwgdGhpcyk7XG4gICAgICB0aGlzLnJlZ2lzdGVyKCdfbG9nSG9va0NsZWFudXBzJywgKCkgPT4gbG9nQ2xlYW51cHMpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIud2FybignW0NvbnRhaW5lcl0gRmFpbGVkIHRvIHdpcmUgbG9nIGhvb2tzOicsIGVycm9yKTtcbiAgICB9XG4gICAgdGltZXI/LmVuZFBoYXNlKCdsb2dfaG9va3MnKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZGVmZXJyZWRNZXRyaWNzQ29sbGVjdG9ycyh0aW1lcj86IFN0YXJ0dXBUaW1lcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHRpbWVyPy5zdGFydFBoYXNlKCdtZXRyaWNzX2NvbGxlY3RvcnMnLCBmYWxzZSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG1ldHJpY3NNYW5hZ2VyID0gdGhpcy5yZXNvbHZlPE1ldHJpY3NNYW5hZ2VyPignTWV0cmljc01hbmFnZXInKTtcbiAgICAgIHRoaXMud2lyZU1ldHJpY3NDb2xsZWN0b3JzKG1ldHJpY3NNYW5hZ2VyKTtcbiAgICAgIG1ldHJpY3NNYW5hZ2VyLnN0YXJ0KCk7XG4gICAgICBsb2dnZXIuaW5mbygnW0NvbnRhaW5lcl0gTWV0cmljcyBjb2xsZWN0aW9uIHN0YXJ0ZWQnKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLndhcm4oJ1tDb250YWluZXJdIE1ldHJpY3Mgd2lyaW5nIHNraXBwZWQ6JywgZXJyb3IpO1xuICAgIH1cbiAgICB0aW1lcj8uZW5kUGhhc2UoJ21ldHJpY3NfY29sbGVjdG9ycycpO1xuICB9XG5cbiAgLyoqIFRyeSB0byByZXNvbHZlIGEgc2VydmljZSwgcmV0dXJuaW5nIHVuZGVmaW5lZCBpZiBub3QgcmVnaXN0ZXJlZCAqL1xuICBwcml2YXRlIHRyeVJlc29sdmU8VD4obmFtZTogc3RyaW5nKTogVCB8IHVuZGVmaW5lZCB7XG4gICAgdHJ5IHsgcmV0dXJuIHRoaXMucmVzb2x2ZTxUPihuYW1lKTsgfSBjYXRjaCB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgfVxuXG4gIC8qKiBXaXJlIFNTRSBicm9hZGNhc3Qgc2lua3MgZm9yIHRoZSB3ZWIgY29uc29sZSAqL1xuICBwcml2YXRlIHdpcmVTU0VCcm9hZGNhc3RzKFxuICAgIHdlYlJlc3VsdDogaW1wb3J0KCcuLi93ZWIvc2VydmVyLmpzJykuV2ViU2VydmVyUmVzdWx0LFxuICAgIG1ldHJpY3NTaW5rOiBNZW1vcnlNZXRyaWNzU2luayB8IHVuZGVmaW5lZCxcbiAgKTogdm9pZCB7XG4gICAgaWYgKHdlYlJlc3VsdC5sb2dCcm9hZGNhc3QpIHtcbiAgICAgIGNvbnN0IGxvZ01hbmFnZXIgPSB0aGlzLnJlc29sdmU8TG9nTWFuYWdlcj4oJ0xvZ01hbmFnZXInKTtcbiAgICAgIGxvZ01hbmFnZXIucmVnaXN0ZXJTaW5rKG5ldyBXZWJTU0VMb2dTaW5rKHdlYlJlc3VsdC5sb2dCcm9hZGNhc3QpKTtcbiAgICB9XG4gICAgaWYgKHdlYlJlc3VsdC5tZXRyaWNzT25TbmFwc2hvdCAmJiBtZXRyaWNzU2luaykge1xuICAgICAgY29uc3QgbWV0cmljc01hbmFnZXIgPSB0aGlzLnRyeVJlc29sdmU8TWV0cmljc01hbmFnZXI+KCdNZXRyaWNzTWFuYWdlcicpO1xuICAgICAgaWYgKG1ldHJpY3NNYW5hZ2VyKSB7XG4gICAgICAgIG1ldHJpY3NNYW5hZ2VyLnJlZ2lzdGVyU2luayhuZXcgV2ViU1NFTWV0cmljc1Npbmsod2ViUmVzdWx0Lm1ldHJpY3NPblNuYXBzaG90KSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkZWZlcnJlZFdlYkNvbnNvbGUodGltZXI/OiBTdGFydHVwVGltZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aW1lcj8uc3RhcnRQaGFzZSgnd2ViX2NvbnNvbGUnLCBmYWxzZSk7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghZW52LkRPTExIT1VTRV9XRUJfQ09OU09MRSkgcmV0dXJuO1xuXG4gICAgICBjb25zdCBhY3RpdmF0aW9uU3RvcmUgPSB0aGlzLnJlc29sdmU8QWN0aXZhdGlvblN0b3JlPignQWN0aXZhdGlvblN0b3JlJyk7XG4gICAgICBjb25zdCBzZXNzaW9uSWQgPSBhY3RpdmF0aW9uU3RvcmUuZ2V0U2Vzc2lvbklkKCk7XG4gICAgICBjb25zdCBwb3J0Zm9saW9NYW5hZ2VyID0gdGhpcy5yZXNvbHZlPFBvcnRmb2xpb01hbmFnZXI+KCdQb3J0Zm9saW9NYW5hZ2VyJyk7XG4gICAgICBjb25zdCBtZW1vcnlTaW5rID0gdGhpcy5yZXNvbHZlPE1lbW9yeUxvZ1Npbms+KCdNZW1vcnlMb2dTaW5rJyk7XG4gICAgICBjb25zdCBtZXRyaWNzU2luayA9IHRoaXMudHJ5UmVzb2x2ZTxNZW1vcnlNZXRyaWNzU2luaz4oJ01lbW9yeU1ldHJpY3NTaW5rJyk7XG4gICAgICBjb25zdCBtY3BBcWxIYW5kbGVyID0gdGhpcy50cnlSZXNvbHZlPE1DUEFRTEhhbmRsZXI+KCdtY3BBcWxIYW5kbGVyJyk7XG4gICAgICBjb25zdCBsb2dNYW5hZ2VyID0gdGhpcy5yZXNvbHZlPExvZ01hbmFnZXI+KCdMb2dNYW5hZ2VyJyk7XG5cbiAgICAgIC8vIFJlc29sdmUgY29uc29sZSBwb3J0OiBjb25maWcgZmlsZSDihpIgZW52IHZhciDihpIgZGVmYXVsdCAoIzE4NDApXG4gICAgICBjb25zdCBjb25maWdNYW5hZ2VyID0gdGhpcy5yZXNvbHZlPENvbmZpZ01hbmFnZXI+KCdDb25maWdNYW5hZ2VyJyk7XG4gICAgICBjb25zdCBjb25maWdQb3J0ID0gY29uZmlnTWFuYWdlci5nZXRTZXR0aW5nPG51bWJlcj4oJ2NvbnNvbGUucG9ydCcpO1xuXG4gICAgICBjb25zdCB7IHN0YXJ0VW5pZmllZENvbnNvbGUgfSA9IGF3YWl0IGltcG9ydCgnLi4vd2ViL2NvbnNvbGUvVW5pZmllZENvbnNvbGUuanMnKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHN0YXJ0VW5pZmllZENvbnNvbGUoe1xuICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgIHBvcnRmb2xpb0RpcjogcG9ydGZvbGlvTWFuYWdlci5nZXRCYXNlRGlyKCksXG4gICAgICAgIG1lbW9yeVNpbmssXG4gICAgICAgIG1ldHJpY3NTaW5rLFxuICAgICAgICBtY3BBcWxIYW5kbGVyLFxuICAgICAgICByZWdpc3RlckxvZ1Npbms6IChzaW5rKSA9PiBsb2dNYW5hZ2VyLnJlZ2lzdGVyU2luayhzaW5rKSxcbiAgICAgICAgd2lyZVNTRUJyb2FkY2FzdHM6ICh3ZWJSZXN1bHQsIG1TaW5rKSA9PiB0aGlzLndpcmVTU0VCcm9hZGNhc3RzKHdlYlJlc3VsdCwgbVNpbmspLFxuICAgICAgICBwb3J0OiBjb25maWdQb3J0LFxuICAgICAgfSk7XG5cbiAgICAgIGxvZ2dlci5pbmZvKGBbQ29udGFpbmVyXSBXZWIgY29uc29sZSBzdGFydGVkIGFzICR7cmVzdWx0LnJvbGV9YCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci53YXJuKCdbQ29udGFpbmVyXSBXZWIgY29uc29sZSBzdGFydHVwIGZhaWxlZDonLCBlcnJvcik7XG4gICAgfVxuICAgIHRpbWVyPy5lbmRQaGFzZSgnd2ViX2NvbnNvbGUnKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZGVmZXJyZWRQZXJtaXNzaW9uU2VydmVyKHRpbWVyPzogU3RhcnR1cFRpbWVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGltZXI/LnN0YXJ0UGhhc2UoJ3Blcm1pc3Npb25fc2VydmVyJywgZmFsc2UpO1xuICAgIHRyeSB7XG4gICAgICBpZiAoIWVudi5ET0xMSE9VU0VfUEVSTUlTU0lPTl9TRVJWRVIpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdbQ29udGFpbmVyXSBQZXJtaXNzaW9uIHNlcnZlciBkaXNhYmxlZCB2aWEgRE9MTEhPVVNFX1BFUk1JU1NJT05fU0VSVkVSPWZhbHNlJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFlbnYuRE9MTEhPVVNFX1dFQl9DT05TT0xFKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnW0NvbnRhaW5lcl0gUGVybWlzc2lvbiBzZXJ2ZXIgc2tpcHBlZCDigJQgd2ViIGNvbnNvbGUgaXMgZGlzYWJsZWQnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBQZXJtaXNzaW9uIHJvdXRlcyBhcmUgYWxyZWFkeSBtb3VudGVkIG9uIHRoZSB1bmlmaWVkIHdlYiBjb25zb2xlLlxuICAgICAgLy8gV2UganVzdCBuZWVkIHRvIHdyaXRlIHRoZSBwb3J0IGZpbGUgc28gdGhlIFByZVRvb2xVc2UgaG9vayBzY3JpcHRcbiAgICAgIC8vIGNhbiBkaXNjb3ZlciBpdC4gTm8gc2VwYXJhdGUgc2VydmVyIOKAlCB1c2UgdGhlIGV4aXN0aW5nIGNvbnNvbGUgcG9ydC5cbiAgICAgIGNvbnN0IHBvcnQgPSBlbnYuRE9MTEhPVVNFX1dFQl9DT05TT0xFX1BPUlQ7XG4gICAgICBjb25zdCBzdGFydE1zID0gRGF0ZS5ub3coKTtcblxuICAgICAgY29uc3QgeyB3cml0ZVBvcnRGaWxlLCByZWdpc3RlclBvcnRDbGVhbnVwIH0gPSBhd2FpdCBpbXBvcnQoJy4uL2F1dG8tZG9sbGhvdXNlL3BvcnREaXNjb3ZlcnkuanMnKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgW0NvbnRhaW5lcl0gV3JpdGluZyBwZXJtaXNzaW9uIHNlcnZlciBwb3J0IGZpbGUgZm9yIHBvcnQgJHtwb3J0fWApO1xuICAgICAgYXdhaXQgd3JpdGVQb3J0RmlsZShwb3J0KTtcbiAgICAgIHJlZ2lzdGVyUG9ydENsZWFudXAoKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgW0NvbnRhaW5lcl0gUG9ydCBjbGVhbnVwIGhhbmRsZXJzIHJlZ2lzdGVyZWRgKTtcblxuICAgICAgY29uc3QgZWxhcHNlZE1zID0gRGF0ZS5ub3coKSAtIHN0YXJ0TXM7XG4gICAgICBsb2dnZXIuaW5mbyhgW0NvbnRhaW5lcl0gUGVybWlzc2lvbiBzZXJ2ZXIgcG9ydCBmaWxlIHdyaXR0ZW4gKHBvcnQgJHtwb3J0fSwgJHtlbGFwc2VkTXN9bXMpYCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci53YXJuKCdbQ29udGFpbmVyXSBQZXJtaXNzaW9uIHNlcnZlciBzdGFydHVwIGZhaWxlZDonLCBlcnJvcik7XG4gICAgfVxuICAgIHRpbWVyPy5lbmRQaGFzZSgncGVybWlzc2lvbl9zZXJ2ZXInKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZGVmZXJyZWREYW5nZXJab25lSW5pdCh0aW1lcj86IFN0YXJ0dXBUaW1lcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHRpbWVyPy5zdGFydFBoYXNlKCdkYW5nZXJfem9uZV9pbml0JywgZmFsc2UpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBkYW5nZXJab25lRW5mb3JjZXIgPSB0aGlzLnJlc29sdmU8RGFuZ2VyWm9uZUVuZm9yY2VyPignRGFuZ2VyWm9uZUVuZm9yY2VyJyk7XG4gICAgICBhd2FpdCBkYW5nZXJab25lRW5mb3JjZXIuaW5pdGlhbGl6ZSgpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIud2FybignW0NvbnRhaW5lcl0gRGFuZ2VyWm9uZUVuZm9yY2VyIGluaXRpYWxpemF0aW9uIGZhaWxlZDonLCBlcnJvcik7XG4gICAgfVxuICAgIHRpbWVyPy5lbmRQaGFzZSgnZGFuZ2VyX3pvbmVfaW5pdCcpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkZWZlcnJlZFBhdHRlcm5FbmNyeXB0aW9uKHRpbWVyPzogU3RhcnR1cFRpbWVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGltZXI/LnN0YXJ0UGhhc2UoJ3BhdHRlcm5fZW5jcnlwdGlvbicsIGZhbHNlKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGF0dGVybkVuY3J5cHRvciA9IHRoaXMucmVzb2x2ZSgnUGF0dGVybkVuY3J5cHRvcicpIGFzIFBhdHRlcm5FbmNyeXB0b3I7XG4gICAgICBhd2FpdCBwYXR0ZXJuRW5jcnlwdG9yLmluaXRpYWxpemUoKTtcbiAgICAgIGxvZ2dlci5pbmZvKFwiUGF0dGVybiBlbmNyeXB0aW9uIGluaXRpYWxpemVkXCIpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIud2FybignW0NvbnRhaW5lcl0gUGF0dGVybiBlbmNyeXB0aW9uIGluaXRpYWxpemF0aW9uIGZhaWxlZDonLCBlcnJvcik7XG4gICAgfVxuICAgIHRpbWVyPy5lbmRQaGFzZSgncGF0dGVybl9lbmNyeXB0aW9uJyk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRlZmVycmVkQmFja2dyb3VuZFZhbGlkYXRvcih0aW1lcj86IFN0YXJ0dXBUaW1lcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHRpbWVyPy5zdGFydFBoYXNlKCdiYWNrZ3JvdW5kX3ZhbGlkYXRvcicsIGZhbHNlKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYmFja2dyb3VuZFZhbGlkYXRvciA9IHRoaXMucmVzb2x2ZSgnQmFja2dyb3VuZFZhbGlkYXRvcicpIGFzIGFueTtcbiAgICAgIGJhY2tncm91bmRWYWxpZGF0b3Iuc3RhcnQoKTtcbiAgICAgIGxvZ2dlci5pbmZvKFwiQmFja2dyb3VuZCB2YWxpZGF0b3Igc3RhcnRlZCBmb3IgbWVtb3J5IHNlY3VyaXR5XCIpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIud2FybignW0NvbnRhaW5lcl0gQmFja2dyb3VuZCB2YWxpZGF0b3Igc3RhcnQgZmFpbGVkOicsIGVycm9yKTtcbiAgICB9XG4gICAgdGltZXI/LmVuZFBoYXNlKCdiYWNrZ3JvdW5kX3ZhbGlkYXRvcicpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc3RvcmUgcGVyLXNlc3Npb24gYWN0aXZhdGlvbiBzdGF0ZSBmcm9tIHRoZSBBY3RpdmF0aW9uU3RvcmUuXG4gICAqIENhbGxlZCBkdXJpbmcgcHJlcGFyZVBvcnRmb2xpbygpIGFmdGVyIGF1dG8tbG9hZCBtZW1vcmllcy5cbiAgICpcbiAgICogSXNzdWUgIzU5ODogRWFjaCBlbGVtZW50IHR5cGUgaXMgcmVzdG9yZWQgaW5kZXBlbmRlbnRseS5cbiAgICogTWlzc2luZyBlbGVtZW50cyAoZGVsZXRlZCBzaW5jZSBsYXN0IHNlc3Npb24pIGFyZSBza2lwcGVkIGFuZCBwcnVuZWQuXG4gICAqIEF1dG8tbG9hZGVkIG1lbW9yaWVzIGFyZSBkZWR1cGxpY2F0ZWQgKG5vdCBhY3RpdmF0ZWQgdHdpY2UpLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyByZXN0b3JlQWN0aXZhdGlvbnMoc3RvcmU6IEFjdGl2YXRpb25TdG9yZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHBlcnNvbmFNYW5hZ2VyID0gdGhpcy5yZXNvbHZlPFBlcnNvbmFNYW5hZ2VyPignUGVyc29uYU1hbmFnZXInKTtcbiAgICBjb25zdCBza2lsbE1hbmFnZXIgPSB0aGlzLnJlc29sdmU8U2tpbGxNYW5hZ2VyPignU2tpbGxNYW5hZ2VyJyk7XG4gICAgY29uc3QgYWdlbnRNYW5hZ2VyID0gdGhpcy5yZXNvbHZlPEFnZW50TWFuYWdlcj4oJ0FnZW50TWFuYWdlcicpO1xuICAgIGNvbnN0IG1lbW9yeU1hbmFnZXIgPSB0aGlzLnJlc29sdmU8TWVtb3J5TWFuYWdlcj4oJ01lbW9yeU1hbmFnZXInKTtcbiAgICBjb25zdCBlbnNlbWJsZU1hbmFnZXIgPSB0aGlzLnJlc29sdmU8RW5zZW1ibGVNYW5hZ2VyPignRW5zZW1ibGVNYW5hZ2VyJyk7XG5cbiAgICBsZXQgcmVzdG9yZWRDb3VudCA9IDA7XG4gICAgbGV0IHNraXBwZWRDb3VudCA9IDA7XG5cbiAgICAvLyBSZXN0b3JlIHBlcnNvbmFzICh1c2VzIGZpbGVuYW1lIGlmIGF2YWlsYWJsZSwgZmFsbHMgYmFjayB0byBuYW1lKVxuICAgIC8vIElzc3VlICM4NDM6IGFjdGl2YXRlUGVyc29uYSgpIGlzIG5vdyBhc3luYyDigJQgdXNlcyBkaXNrIGZhbGxiYWNrIGZvciBjYWNoZSBtaXNzZXNcbiAgICBmb3IgKGNvbnN0IGFjdGl2YXRpb24gb2Ygc3RvcmUuZ2V0QWN0aXZhdGlvbnMoJ3BlcnNvbmEnKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgaWRlbnRpZmllciA9IGFjdGl2YXRpb24uZmlsZW5hbWUgfHwgYWN0aXZhdGlvbi5uYW1lO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwZXJzb25hTWFuYWdlci5hY3RpdmF0ZVBlcnNvbmEoaWRlbnRpZmllcik7XG4gICAgICAgIGlmIChyZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgIHJlc3RvcmVkQ291bnQrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2dnZXIuZGVidWcoYFtBY3RpdmF0aW9uU3RvcmVdIFBydW5pbmcgbWlzc2luZyBwZXJzb25hICcke2FjdGl2YXRpb24ubmFtZX0nYCk7XG4gICAgICAgICAgc3RvcmUucmVtb3ZlU3RhbGVBY3RpdmF0aW9uKCdwZXJzb25hJywgYWN0aXZhdGlvbi5uYW1lKTtcbiAgICAgICAgICBza2lwcGVkQ291bnQrKztcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgW0FjdGl2YXRpb25TdG9yZV0gU2tpcHBpbmcgZmFpbGVkIHBlcnNvbmEgJyR7YWN0aXZhdGlvbi5uYW1lfSdgKTtcbiAgICAgICAgc3RvcmUucmVtb3ZlU3RhbGVBY3RpdmF0aW9uKCdwZXJzb25hJywgYWN0aXZhdGlvbi5uYW1lKTtcbiAgICAgICAgc2tpcHBlZENvdW50Kys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmVzdG9yZSBza2lsbHNcbiAgICAvLyBOT1RFOiBhY3RpdmF0ZVNraWxsKCkgcmV0dXJucyB7c3VjY2VzcywgbWVzc2FnZX0g4oCUIGl0IG5ldmVyIHRocm93cyBvbiBub3QtZm91bmQuXG4gICAgZm9yIChjb25zdCBhY3RpdmF0aW9uIG9mIHN0b3JlLmdldEFjdGl2YXRpb25zKCdza2lsbCcpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBza2lsbE1hbmFnZXIuYWN0aXZhdGVTa2lsbChhY3RpdmF0aW9uLm5hbWUpO1xuICAgICAgICBpZiAocmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgICByZXN0b3JlZENvdW50Kys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbG9nZ2VyLmRlYnVnKGBbQWN0aXZhdGlvblN0b3JlXSBQcnVuaW5nIG1pc3Npbmcgc2tpbGwgJyR7YWN0aXZhdGlvbi5uYW1lfSdgKTtcbiAgICAgICAgICBzdG9yZS5yZW1vdmVTdGFsZUFjdGl2YXRpb24oJ3NraWxsJywgYWN0aXZhdGlvbi5uYW1lKTtcbiAgICAgICAgICBza2lwcGVkQ291bnQrKztcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgW0FjdGl2YXRpb25TdG9yZV0gU2tpcHBpbmcgZmFpbGVkIHNraWxsICcke2FjdGl2YXRpb24ubmFtZX0nYCk7XG4gICAgICAgIHN0b3JlLnJlbW92ZVN0YWxlQWN0aXZhdGlvbignc2tpbGwnLCBhY3RpdmF0aW9uLm5hbWUpO1xuICAgICAgICBza2lwcGVkQ291bnQrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZXN0b3JlIGFnZW50c1xuICAgIGZvciAoY29uc3QgYWN0aXZhdGlvbiBvZiBzdG9yZS5nZXRBY3RpdmF0aW9ucygnYWdlbnQnKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYWdlbnRNYW5hZ2VyLmFjdGl2YXRlQWdlbnQoYWN0aXZhdGlvbi5uYW1lKTtcbiAgICAgICAgaWYgKHJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgICAgcmVzdG9yZWRDb3VudCsrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhgW0FjdGl2YXRpb25TdG9yZV0gUHJ1bmluZyBtaXNzaW5nIGFnZW50ICcke2FjdGl2YXRpb24ubmFtZX0nYCk7XG4gICAgICAgICAgc3RvcmUucmVtb3ZlU3RhbGVBY3RpdmF0aW9uKCdhZ2VudCcsIGFjdGl2YXRpb24ubmFtZSk7XG4gICAgICAgICAgc2tpcHBlZENvdW50Kys7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBsb2dnZXIuZGVidWcoYFtBY3RpdmF0aW9uU3RvcmVdIFNraXBwaW5nIGZhaWxlZCBhZ2VudCAnJHthY3RpdmF0aW9uLm5hbWV9J2ApO1xuICAgICAgICBzdG9yZS5yZW1vdmVTdGFsZUFjdGl2YXRpb24oJ2FnZW50JywgYWN0aXZhdGlvbi5uYW1lKTtcbiAgICAgICAgc2tpcHBlZENvdW50Kys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmVzdG9yZSBtZW1vcmllcyAoZGVkdXAgYWdhaW5zdCBhdXRvLWxvYWRlZCBvbmVzKVxuICAgIGNvbnN0IGFjdGl2ZU1lbW9yaWVzID0gYXdhaXQgbWVtb3J5TWFuYWdlci5nZXRBY3RpdmVNZW1vcmllcygpO1xuICAgIGNvbnN0IGFjdGl2ZU1lbW9yeU5hbWVzID0gbmV3IFNldChhY3RpdmVNZW1vcmllcy5tYXAobSA9PiBtLm1ldGFkYXRhLm5hbWUpKTtcbiAgICBmb3IgKGNvbnN0IGFjdGl2YXRpb24gb2Ygc3RvcmUuZ2V0QWN0aXZhdGlvbnMoJ21lbW9yeScpKSB7XG4gICAgICBpZiAoYWN0aXZlTWVtb3J5TmFtZXMuaGFzKGFjdGl2YXRpb24ubmFtZSkpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBbQWN0aXZhdGlvblN0b3JlXSBNZW1vcnkgJyR7YWN0aXZhdGlvbi5uYW1lfScgYWxyZWFkeSBhY3RpdmUgKGF1dG8tbG9hZGVkKSwgc2tpcHBpbmdgKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBtZW1vcnlNYW5hZ2VyLmFjdGl2YXRlTWVtb3J5KGFjdGl2YXRpb24ubmFtZSk7XG4gICAgICAgIGlmIChyZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgIHJlc3RvcmVkQ291bnQrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2dnZXIuZGVidWcoYFtBY3RpdmF0aW9uU3RvcmVdIFBydW5pbmcgbWlzc2luZyBtZW1vcnkgJyR7YWN0aXZhdGlvbi5uYW1lfSdgKTtcbiAgICAgICAgICBzdG9yZS5yZW1vdmVTdGFsZUFjdGl2YXRpb24oJ21lbW9yeScsIGFjdGl2YXRpb24ubmFtZSk7XG4gICAgICAgICAgc2tpcHBlZENvdW50Kys7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBsb2dnZXIuZGVidWcoYFtBY3RpdmF0aW9uU3RvcmVdIFNraXBwaW5nIGZhaWxlZCBtZW1vcnkgJyR7YWN0aXZhdGlvbi5uYW1lfSdgKTtcbiAgICAgICAgc3RvcmUucmVtb3ZlU3RhbGVBY3RpdmF0aW9uKCdtZW1vcnknLCBhY3RpdmF0aW9uLm5hbWUpO1xuICAgICAgICBza2lwcGVkQ291bnQrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZXN0b3JlIGVuc2VtYmxlc1xuICAgIGZvciAoY29uc3QgYWN0aXZhdGlvbiBvZiBzdG9yZS5nZXRBY3RpdmF0aW9ucygnZW5zZW1ibGUnKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZW5zZW1ibGVNYW5hZ2VyLmFjdGl2YXRlRW5zZW1ibGUoYWN0aXZhdGlvbi5uYW1lKTtcbiAgICAgICAgaWYgKHJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgICAgcmVzdG9yZWRDb3VudCsrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhgW0FjdGl2YXRpb25TdG9yZV0gUHJ1bmluZyBtaXNzaW5nIGVuc2VtYmxlICcke2FjdGl2YXRpb24ubmFtZX0nYCk7XG4gICAgICAgICAgc3RvcmUucmVtb3ZlU3RhbGVBY3RpdmF0aW9uKCdlbnNlbWJsZScsIGFjdGl2YXRpb24ubmFtZSk7XG4gICAgICAgICAgc2tpcHBlZENvdW50Kys7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBsb2dnZXIuZGVidWcoYFtBY3RpdmF0aW9uU3RvcmVdIFNraXBwaW5nIGZhaWxlZCBlbnNlbWJsZSAnJHthY3RpdmF0aW9uLm5hbWV9J2ApO1xuICAgICAgICBzdG9yZS5yZW1vdmVTdGFsZUFjdGl2YXRpb24oJ2Vuc2VtYmxlJywgYWN0aXZhdGlvbi5uYW1lKTtcbiAgICAgICAgc2tpcHBlZENvdW50Kys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHJlc3RvcmVkQ291bnQgPiAwIHx8IHNraXBwZWRDb3VudCA+IDApIHtcbiAgICAgIGxvZ2dlci5pbmZvKFxuICAgICAgICBgW0FjdGl2YXRpb25TdG9yZV0gUmVzdG9yZWQgJHtyZXN0b3JlZENvdW50fSBlbGVtZW50KHMpLCBza2lwcGVkICR7c2tpcHBlZENvdW50fSBzdGFsZSBmb3Igc2Vzc2lvbiAnJHtzdG9yZS5nZXRTZXNzaW9uSWQoKX0nYFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQm9vdHN0cmFwIGFsbCBoYW5kbGVycyB3aXRob3V0IHJlZ2lzdGVyaW5nIE1DUCB0b29scy5cbiAgICogVXNlZCBieSB3ZWItb25seSBtb2RlICgtLXdlYikgdG8gZ2V0IE1DUEFRTEhhbmRsZXIgd2l0aG91dCBhbiBNQ1AgU2VydmVyLlxuICAgKiBJc3N1ZSAjNzk2OiBTcGxpdCBESSBjb250YWluZXIgYm9vdHN0cmFwIGZyb20gdHJhbnNwb3J0IGNvbm5lY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgYm9vdHN0cmFwSGFuZGxlcnMoKTogUHJvbWlzZTxIYW5kbGVyQnVuZGxlPiB7XG4gICAgaWYgKCF0aGlzLnBlcnNvbmFzRGlyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQZXJzb25hIGRpcmVjdG9yeSBub3QgaW5pdGlhbGl6ZWQuIENhbGwgcHJlcGFyZVBvcnRmb2xpbygpIGZpcnN0LlwiKTtcbiAgICB9XG5cbiAgICBQYXRoVmFsaWRhdG9yLmluaXRpYWxpemUodGhpcy5wZXJzb25hc0Rpcik7XG5cbiAgICBjb25zdCBpbmRpY2F0b3JTZXJ2aWNlID0gdGhpcy5yZXNvbHZlPFBlcnNvbmFJbmRpY2F0b3JTZXJ2aWNlPignUGVyc29uYUluZGljYXRvclNlcnZpY2UnKTtcbiAgICBjb25zdCBwZXJzb25hTWFuYWdlciA9IHRoaXMucmVzb2x2ZTxQZXJzb25hTWFuYWdlcj4oJ1BlcnNvbmFNYW5hZ2VyJyk7XG4gICAgY29uc3QgaW5pdFNlcnZpY2UgPSB0aGlzLnJlc29sdmU8SW5pdGlhbGl6YXRpb25TZXJ2aWNlPignSW5pdGlhbGl6YXRpb25TZXJ2aWNlJyk7XG4gICAgY29uc3QgcGVyc29uYUV4cG9ydGVyID0gbmV3IFBlcnNvbmFFeHBvcnRlcigoKSA9PiBwZXJzb25hTWFuYWdlci5nZXRDdXJyZW50VXNlckZvckF0dHJpYnV0aW9uKCkpO1xuICAgIGNvbnN0IHBlcnNvbmFJbXBvcnRlciA9IG5ldyBQZXJzb25hSW1wb3J0ZXIodGhpcy5wZXJzb25hc0RpciwgKCkgPT4gcGVyc29uYU1hbmFnZXIuZ2V0Q3VycmVudFVzZXJGb3JBdHRyaWJ1dGlvbigpKTtcblxuICAgIC8vIENyZWF0ZSBzdGF0ZSBhY2Nlc3NvciBmb3IgUGVyc29uYUhhbmRsZXJcbiAgICBjb25zdCBhY3RpdmVQZXJzb25hQWNjZXNzb3IgPSB7XG4gICAgICBnZXQ6ICgpID0+IHBlcnNvbmFNYW5hZ2VyLmdldEFjdGl2ZVBlcnNvbmEoKT8uZmlsZW5hbWUgfHwgbnVsbCxcbiAgICAgIHNldDogKHZhbHVlOiBzdHJpbmcgfCBudWxsKSA9PiB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgIC8vIElzc3VlICM4NDM6IGFjdGl2YXRlUGVyc29uYSBpcyBub3cgYXN5bmMgYnV0IHRoaXMgc2V0dGVyIGlzIHN5bmNocm9ub3VzLlxuICAgICAgICAgIC8vIEZpcmUtYW5kLWZvcmdldCDigJQgUGVyc29uYUhhbmRsZXIgZG9lcyBpdHMgb3duIGxvb2t1cCBiZWZvcmUgY2FsbGluZyBzZXQoKS5cbiAgICAgICAgICAvLyBMb2cgYXQgZXJyb3IgbGV2ZWwgc2luY2UgYWN0aXZhdGlvbiBmYWlsdXJlcyBoZXJlIGluZGljYXRlIHN0YWxlIHN0YXRlLlxuICAgICAgICAgIHBlcnNvbmFNYW5hZ2VyLmFjdGl2YXRlUGVyc29uYSh2YWx1ZSkuY2F0Y2goZXJyID0+XG4gICAgICAgICAgICBsb2dnZXIuZXJyb3IoYFtDb250YWluZXJdIFBlcnNvbmEgYWN0aXZhdGlvbiBmYWlsZWQgZm9yIFwiJHt2YWx1ZX1cIiDigJQgc3RhdGUgYWNjZXNzb3IgbWF5IGJlIHN0YWxlOmAsIGVycilcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlcnNvbmFNYW5hZ2VyLmRlYWN0aXZhdGVQZXJzb25hKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgcGVyc29uYUhhbmRsZXIgPSBuZXcgUGVyc29uYUhhbmRsZXIoXG4gICAgICBwZXJzb25hTWFuYWdlcixcbiAgICAgIHBlcnNvbmFFeHBvcnRlcixcbiAgICAgIHBlcnNvbmFJbXBvcnRlcixcbiAgICAgIGluaXRTZXJ2aWNlLFxuICAgICAgaW5kaWNhdG9yU2VydmljZSxcbiAgICAgIGFjdGl2ZVBlcnNvbmFBY2Nlc3NvclxuICAgICk7XG5cbiAgICBhd2FpdCBwZXJzb25hTWFuYWdlci5yZWxvYWQoKTtcblxuICAgIGNvbnN0IGVsZW1lbnRDcnVkSGFuZGxlciA9IG5ldyBFbGVtZW50Q1JVREhhbmRsZXIoXG4gICAgICB0aGlzLnJlc29sdmUoJ1NraWxsTWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdUZW1wbGF0ZU1hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnVGVtcGxhdGVSZW5kZXJlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdBZ2VudE1hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnTWVtb3J5TWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdFbnNlbWJsZU1hbmFnZXInKSxcbiAgICAgIHBlcnNvbmFNYW5hZ2VyLFxuICAgICAgdGhpcy5yZXNvbHZlKCdQb3J0Zm9saW9NYW5hZ2VyJyksXG4gICAgICBpbml0U2VydmljZSxcbiAgICAgIGluZGljYXRvclNlcnZpY2UsXG4gICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdFbGVtZW50UXVlcnlTZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1ZhbGlkYXRpb25SZWdpc3RyeScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdBY3RpdmF0aW9uU3RvcmUnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnQmFja3VwU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdQb2xpY3lFeHBvcnRTZXJ2aWNlJylcbiAgICApO1xuICAgIC8vIFJlZ2lzdGVyIGZvciBsYXp5IHJlc29sdXRpb24gYnkgUG9saWN5RXhwb3J0U2VydmljZVxuICAgIHRoaXMucmVnaXN0ZXIoJ0VsZW1lbnRDUlVESGFuZGxlcicsICgpID0+IGVsZW1lbnRDcnVkSGFuZGxlcik7XG5cbiAgICAvLyBNQ1BBUUxIYW5kbGVyIGNyZWF0ZWQgbGF0ZXIgYWZ0ZXIgYWxsIGhhbmRsZXJzIGFyZSBpbnN0YW50aWF0ZWRcbiAgICAvLyBTZWUgYmVsb3cgYWZ0ZXIgZW5oYW5jZWRJbmRleEhhbmRsZXIgY3JlYXRpb25cblxuICAgIGNvbnN0IGNvbGxlY3Rpb25IYW5kbGVyID0gbmV3IENvbGxlY3Rpb25IYW5kbGVyKFxuICAgICAgdGhpcy5yZXNvbHZlKCdDb2xsZWN0aW9uQnJvd3NlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdDb2xsZWN0aW9uU2VhcmNoJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1BlcnNvbmFEZXRhaWxzJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0VsZW1lbnRJbnN0YWxsZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnQ29sbGVjdGlvbkNhY2hlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb01hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnQVBJQ2FjaGUnKSxcbiAgICAgIHBlcnNvbmFNYW5hZ2VyLCAvLyBVc2UgdGhlIHJlc29sdmVkIFBlcnNvbmFNYW5hZ2VyXG4gICAgICB0aGlzLnJlc29sdmUoJ1N1Ym1pdFRvUG9ydGZvbGlvVG9vbCcpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdVbmlmaWVkSW5kZXhNYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0luaXRpYWxpemF0aW9uU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdQZXJzb25hSW5kaWNhdG9yU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdGaWxlT3BlcmF0aW9uc1NlcnZpY2UnKVxuICAgICk7XG5cbiAgICBjb25zdCBwb3J0Zm9saW9IYW5kbGVyID0gbmV3IFBvcnRmb2xpb0hhbmRsZXIoXG4gICAgICB0aGlzLnJlc29sdmUoJ0dpdEh1YkF1dGhNYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb01hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvUHVsbEhhbmRsZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvSW5kZXhNYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1VuaWZpZWRJbmRleE1hbmFnZXInKSxcbiAgICAgIGluaXRTZXJ2aWNlLFxuICAgICAgaW5kaWNhdG9yU2VydmljZSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnQ29uZmlnTWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdGaWxlT3BlcmF0aW9uc1NlcnZpY2UnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnVG9rZW5NYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb1JlcG9NYW5hZ2VyJylcbiAgICApO1xuXG4gICAgY29uc3QgZ2l0aHViQXV0aEhhbmRsZXIgPSBuZXcgR2l0SHViQXV0aEhhbmRsZXIoXG4gICAgICB0aGlzLnJlc29sdmUoJ0dpdEh1YkF1dGhNYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0NvbmZpZ01hbmFnZXInKSxcbiAgICAgIGluaXRTZXJ2aWNlLFxuICAgICAgaW5kaWNhdG9yU2VydmljZSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJylcbiAgICApO1xuXG4gICAgY29uc3QgZGlzcGxheUNvbmZpZ0hhbmRsZXIgPSBuZXcgRGlzcGxheUNvbmZpZ0hhbmRsZXIoXG4gICAgICBwZXJzb25hTWFuYWdlcixcbiAgICAgIGluaXRTZXJ2aWNlLFxuICAgICAgaW5kaWNhdG9yU2VydmljZVxuICAgICk7XG5cbiAgICBjb25zdCBpZGVudGl0eUhhbmRsZXIgPSBuZXcgSWRlbnRpdHlIYW5kbGVyKFxuICAgICAgcGVyc29uYU1hbmFnZXIsXG4gICAgICBpbml0U2VydmljZSxcbiAgICAgIGluZGljYXRvclNlcnZpY2VcbiAgICApO1xuXG4gICAgY29uc3QgY29uZmlnSGFuZGxlciA9IG5ldyBDb25maWdIYW5kbGVyKFxuICAgICAgdGhpcy5yZXNvbHZlKCdDb25maWdNYW5hZ2VyJyksXG4gICAgICBpbml0U2VydmljZSxcbiAgICAgIGluZGljYXRvclNlcnZpY2VcbiAgICApO1xuICAgIGNvbnN0IHN5bmNIYW5kbGVyID0gbmV3IFN5bmNIYW5kbGVyKFxuICAgICAgdGhpcy5yZXNvbHZlKCdQb3J0Zm9saW9TeW5jTWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdDb25maWdNYW5hZ2VyJyksXG4gICAgICBpbmRpY2F0b3JTZXJ2aWNlXG4gICAgKTtcblxuICAgIGNvbnN0IGVuaGFuY2VkSW5kZXhIYW5kbGVyID0gbmV3IEVuaGFuY2VkSW5kZXhIYW5kbGVyKFxuICAgICAgdGhpcy5yZXNvbHZlKCdFbmhhbmNlZEluZGV4TWFuYWdlcicpLFxuICAgICAgaW5kaWNhdG9yU2VydmljZVxuICAgICk7XG5cbiAgICAvLyBJc3N1ZSAjNDUyOiBDcmVhdGUgR2F0ZWtlZXBlciBwb2xpY3kgZW5naW5lIGluc3RhbmNlXG4gICAgLy8gSXNzdWUgIzY3OTogYWxsb3dFbGVtZW50UG9saWN5T3ZlcnJpZGVzIHdpcmVkIGZyb20gZW52IChET0xMSE9VU0VfR0FURUtFRVBFUl9FTEVNRU5UX1BPTElDWV9PVkVSUklERVMpXG4gICAgY29uc3QgZ2F0ZWtlZXBlciA9IG5ldyBHYXRla2VlcGVyKHVuZGVmaW5lZCwge1xuICAgICAgZW5hYmxlQXVkaXRMb2dnaW5nOiB0cnVlLFxuICAgICAgcmVxdWlyZURhbmdlclpvbmVWZXJpZmljYXRpb246IHRydWUsXG4gICAgICBhbGxvd0VsZW1lbnRQb2xpY3lPdmVycmlkZXM6IGVudi5ET0xMSE9VU0VfR0FURUtFRVBFUl9FTEVNRU5UX1BPTElDWV9PVkVSUklERVMsXG4gICAgfSk7XG5cbiAgICAvLyBDcmVhdGUgTUNQQVFMSGFuZGxlciB3aXRoIGFsbCBhdmFpbGFibGUgaGFuZGxlcnMgZm9yIGZ1bGwgb3BlcmF0aW9uIGNvdmVyYWdlIChJc3N1ZSAjMjQxKVxuICAgIC8vIElzc3VlICMzMDE6IFBhc3MgQ29udGV4dFRyYWNrZXIgZm9yIHJlcXVlc3QgY29ycmVsYXRpb24gbWV0YWRhdGFcbiAgICAvLyBJc3N1ZSAjNDAyOiBQYXNzIERhbmdlclpvbmVFbmZvcmNlciB2aWEgSGFuZGxlclJlZ2lzdHJ5XG4gICAgLy8gQnVpbGQgaGFuZGxlciByZWdpc3RyeSwgdGhlbiBhZGQgbGF6eSBtZXRyaWNzU2luayBnZXR0ZXIuXG4gICAgLy8gTWVtb3J5TWV0cmljc1NpbmsgaXMgcmVnaXN0ZXJlZCBkdXJpbmcgZGVmZXJyZWRTZXR1cCAoYWZ0ZXIgTWV0cmljc01hbmFnZXIuc3RhcnQoKSksXG4gICAgLy8gc28gaXQgaXNuJ3QgYXZhaWxhYmxlIGF0IGhhbmRsZXIgY29uc3RydWN0aW9uIHRpbWUg4oCUIHJlc29sdmUgb24gZmlyc3QgYWNjZXNzIGluc3RlYWQuXG4gICAgY29uc3QgaGFuZGxlckRlcHM6IEhhbmRsZXJSZWdpc3RyeSA9IHtcbiAgICAgIGVsZW1lbnRDUlVEOiBlbGVtZW50Q3J1ZEhhbmRsZXIsXG4gICAgICBtZW1vcnlNYW5hZ2VyOiB0aGlzLnJlc29sdmUoJ01lbW9yeU1hbmFnZXInKSxcbiAgICAgIGFnZW50TWFuYWdlcjogdGhpcy5yZXNvbHZlKCdBZ2VudE1hbmFnZXInKSxcbiAgICAgIHRlbXBsYXRlUmVuZGVyZXI6IHRoaXMucmVzb2x2ZSgnVGVtcGxhdGVSZW5kZXJlcicpLFxuICAgICAgZWxlbWVudFF1ZXJ5U2VydmljZTogdGhpcy5yZXNvbHZlKCdFbGVtZW50UXVlcnlTZXJ2aWNlJyksXG4gICAgICAvLyBNQ1AtQVFMIGV4dGVuc2lvbiBoYW5kbGVycyAoSXNzdWUgIzI0MSlcbiAgICAgIGNvbGxlY3Rpb25IYW5kbGVyLFxuICAgICAgcG9ydGZvbGlvSGFuZGxlcixcbiAgICAgIGF1dGhIYW5kbGVyOiBnaXRodWJBdXRoSGFuZGxlcixcbiAgICAgIGNvbmZpZ0hhbmRsZXIsXG4gICAgICBlbmhhbmNlZEluZGV4SGFuZGxlcixcbiAgICAgIHBlcnNvbmFIYW5kbGVyLFxuICAgICAgc3luY0hhbmRsZXIsXG4gICAgICBidWlsZEluZm9TZXJ2aWNlOiB0aGlzLnJlc29sdmUoJ0J1aWxkSW5mb1NlcnZpY2UnKSxcbiAgICAgIGNhY2hlTWVtb3J5QnVkZ2V0OiB0aGlzLnJlc29sdmUoJ0NhY2hlTWVtb3J5QnVkZ2V0JyksXG4gICAgICBnYXRla2VlcGVyLCAgLy8gSXNzdWUgIzQ1MjogUG9saWN5IGVuZ2luZSBmb3IgZW5mb3JjZSgpXG4gICAgICBkYW5nZXJab25lRW5mb3JjZXI6IHRoaXMucmVzb2x2ZSgnRGFuZ2VyWm9uZUVuZm9yY2VyJyksXG4gICAgICB2ZXJpZmljYXRpb25TdG9yZTogdGhpcy5yZXNvbHZlKCdWZXJpZmljYXRpb25TdG9yZScpLCAgLy8gSXNzdWUgIzE0MjogVmVyaWZpY2F0aW9uIGNvZGVzXG4gICAgICB2ZXJpZmljYXRpb25Ob3RpZmllcjogdGhpcy5yZXNvbHZlKCdWZXJpZmljYXRpb25Ob3RpZmllcicpLCAgLy8gSXNzdWUgIzUyMjogT1MgZGlhbG9nIGZvciBjb2Rlc1xuICAgICAgbWVtb3J5U2luazogdGhpcy5yZXNvbHZlPE1lbW9yeUxvZ1Npbms+KCdNZW1vcnlMb2dTaW5rJyksICAvLyBJc3N1ZSAjNTI4OiBDUlVERS1yb3V0ZWQgcXVlcnlfbG9nc1xuICAgICAgcGVyZm9ybWFuY2VNb25pdG9yOiB0aGlzLnJlc29sdmU8UGVyZm9ybWFuY2VNb25pdG9yPignUGVyZm9ybWFuY2VNb25pdG9yJyksXG4gICAgICBvcGVyYXRpb25NZXRyaWNzVHJhY2tlcjogdGhpcy5yZXNvbHZlPE9wZXJhdGlvbk1ldHJpY3NUcmFja2VyPignT3BlcmF0aW9uTWV0cmljc1RyYWNrZXInKSxcbiAgICAgIGdhdGVrZWVwZXJNZXRyaWNzVHJhY2tlcjogdGhpcy5yZXNvbHZlPEdhdGVrZWVwZXJNZXRyaWNzVHJhY2tlcj4oJ0dhdGVrZWVwZXJNZXRyaWNzVHJhY2tlcicpLFxuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGhhbmRsZXJEZXBzLCAnbWV0cmljc1NpbmsnLCB7XG4gICAgICBnZXQ6ICgpID0+IHsgdHJ5IHsgcmV0dXJuIHRoaXMucmVzb2x2ZTxNZW1vcnlNZXRyaWNzU2luaz4oJ01lbW9yeU1ldHJpY3NTaW5rJyk7IH0gY2F0Y2ggeyByZXR1cm4gdW5kZWZpbmVkOyB9IH0sXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIH0pO1xuICAgIGNvbnN0IG1jcEFxbEhhbmRsZXIgPSBuZXcgTUNQQVFMSGFuZGxlcihoYW5kbGVyRGVwcywgdGhpcy5yZXNvbHZlPENvbnRleHRUcmFja2VyPignQ29udGV4dFRyYWNrZXInKSk7XG5cbiAgICAvLyBSZWdpc3RlciBtY3BBcWxIYW5kbGVyIGFzIGEgc2luZ2xldG9uIGZvciB0ZXN0IGFjY2Vzc1xuICAgIHRoaXMucmVnaXN0ZXIoJ21jcEFxbEhhbmRsZXInLCAoKSA9PiBtY3BBcWxIYW5kbGVyLCB7IHNpbmdsZXRvbjogdHJ1ZSB9KTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdnYXRla2VlcGVyJywgKCkgPT4gZ2F0ZWtlZXBlciwgeyBzaW5nbGV0b246IHRydWUgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgcGVyc29uYUhhbmRsZXIsXG4gICAgICBlbGVtZW50Q3J1ZEhhbmRsZXIsXG4gICAgICBjb2xsZWN0aW9uSGFuZGxlcixcbiAgICAgIHBvcnRmb2xpb0hhbmRsZXIsXG4gICAgICBnaXRodWJBdXRoSGFuZGxlcixcbiAgICAgIGRpc3BsYXlDb25maWdIYW5kbGVyLFxuICAgICAgaWRlbnRpdHlIYW5kbGVyLFxuICAgICAgY29uZmlnSGFuZGxlcixcbiAgICAgIHN5bmNIYW5kbGVyLFxuICAgICAgdG9vbFJlZ2lzdHJ5OiB1bmRlZmluZWQgYXMgdW5rbm93biBhcyBUb29sUmVnaXN0cnksIC8vIE5vIHRvb2wgcmVnaXN0cnkgaW4gYm9vdHN0cmFwLW9ubHkgbW9kZVxuICAgICAgZW5oYW5jZWRJbmRleEhhbmRsZXIsXG4gICAgICBtY3BBcWxIYW5kbGVyLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFsbCBoYW5kbGVycyB3aXRoIGRlcGVuZGVuY3kgaW5qZWN0aW9uIGFuZCByZWdpc3RlciBNQ1AgdG9vbHMuXG4gICAqIEBwYXJhbSBzZXJ2ZXIgLSBNQ1AgU2VydmVyIGluc3RhbmNlIGZvciB0b29sIHJlZ2lzdHJhdGlvblxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNyZWF0ZUhhbmRsZXJzKHNlcnZlcjogU2VydmVyKTogUHJvbWlzZTxIYW5kbGVyQnVuZGxlPiB7XG4gICAgY29uc3QgYnVuZGxlID0gYXdhaXQgdGhpcy5ib290c3RyYXBIYW5kbGVycygpO1xuXG4gICAgY29uc3QgdG9vbFJlZ2lzdHJ5ID0gbmV3IFRvb2xSZWdpc3RyeShzZXJ2ZXIpO1xuXG4gICAgLy8gUmVnaXN0ZXIgdG9vbHMgYmFzZWQgb24gTUNQX0lOVEVSRkFDRV9NT0RFIChJc3N1ZSAjMjM3KVxuICAgIC8vIC0gJ2Rpc2NyZXRlJzogUmVnaXN0ZXIgaW5kaXZpZHVhbCBkaXNjcmV0ZSB0b29scyAofjQwIHRvb2xzKVxuICAgIC8vIC0gJ21jcGFxbCc6IFJlZ2lzdGVyIGNvbnNvbGlkYXRlZCBNQ1AtQVFMIGludGVyZmFjZSBvbmx5ICh+NCBvciAxIHRvb2xzKVxuICAgIC8vIFRva2VuIGNvdW50cyBhcmUgbG9nZ2VkIGR5bmFtaWNhbGx5IGF0IHN0YXJ0dXAgdmlhIGxvZ1Rvb2xUb2tlblN0YXRzKClcbiAgICBjb25zdCBpbnRlcmZhY2VNb2RlID0gZW52Lk1DUF9JTlRFUkZBQ0VfTU9ERTtcbiAgICBsb2dnZXIuaW5mbyhgTUNQIEludGVyZmFjZSBNb2RlOiAke2ludGVyZmFjZU1vZGV9YCk7XG5cbiAgICBpZiAoaW50ZXJmYWNlTW9kZSA9PT0gJ2Rpc2NyZXRlJykge1xuICAgICAgLy8gRGlzY3JldGUgbW9kZTogUmVnaXN0ZXIgYWxsIGluZGl2aWR1YWwgdG9vbHNcbiAgICAgIHRvb2xSZWdpc3RyeS5yZWdpc3RlclBlcnNvbmFUb29scyhidW5kbGUucGVyc29uYUhhbmRsZXIpO1xuICAgICAgdG9vbFJlZ2lzdHJ5LnJlZ2lzdGVyRWxlbWVudFRvb2xzKGJ1bmRsZS5lbGVtZW50Q3J1ZEhhbmRsZXIpO1xuICAgICAgdG9vbFJlZ2lzdHJ5LnJlZ2lzdGVyQ29sbGVjdGlvblRvb2xzKGJ1bmRsZS5jb2xsZWN0aW9uSGFuZGxlcik7XG4gICAgICB0b29sUmVnaXN0cnkucmVnaXN0ZXJQb3J0Zm9saW9Ub29scyhidW5kbGUucG9ydGZvbGlvSGFuZGxlcik7XG4gICAgICB0b29sUmVnaXN0cnkucmVnaXN0ZXJBdXRoVG9vbHMoYnVuZGxlLmdpdGh1YkF1dGhIYW5kbGVyKTtcbiAgICAgIHRvb2xSZWdpc3RyeS5yZWdpc3RlckNvbmZpZ1Rvb2xzKHtcbiAgICAgICAgaGFuZGxlQ29uZmlnT3BlcmF0aW9uOiAob3B0aW9ucykgPT5cbiAgICAgICAgICBidW5kbGUuY29uZmlnSGFuZGxlci5oYW5kbGVDb25maWdPcGVyYXRpb24ob3B0aW9ucyksXG4gICAgICAgIGhhbmRsZVN5bmNPcGVyYXRpb246IChvcHRpb25zKSA9PlxuICAgICAgICAgIGJ1bmRsZS5zeW5jSGFuZGxlci5oYW5kbGVTeW5jT3BlcmF0aW9uKG9wdGlvbnMpLFxuICAgICAgfSk7XG4gICAgICB0b29sUmVnaXN0cnkucmVnaXN0ZXJFbmhhbmNlZEluZGV4VG9vbHMoXG4gICAgICAgIGJ1bmRsZS5lbmhhbmNlZEluZGV4SGFuZGxlcixcbiAgICAgICAgdGhpcy5yZXNvbHZlPEluZGV4Q29uZmlnTWFuYWdlcj4oJ0luZGV4Q29uZmlnTWFuYWdlcicpLmdldENvbmZpZygpXG4gICAgICApO1xuICAgICAgdG9vbFJlZ2lzdHJ5LnJlZ2lzdGVyQnVpbGRJbmZvVG9vbHModGhpcy5yZXNvbHZlKCdCdWlsZEluZm9TZXJ2aWNlJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBNQ1AtQVFMIG1vZGU6IFJlZ2lzdGVyIG9ubHkgTUNQLUFRTCB0b29sc1xuICAgICAgdG9vbFJlZ2lzdHJ5LnJlZ2lzdGVyTUNQQVFMVG9vbHMoYnVuZGxlLm1jcEFxbEhhbmRsZXIpO1xuICAgIH1cblxuICAgIC8vIExvZyB0b2tlbiBzdGF0aXN0aWNzIChJc3N1ZSAjMjM3IGVuaGFuY2VtZW50KVxuICAgIHRoaXMubG9nVG9vbFRva2VuU3RhdHModG9vbFJlZ2lzdHJ5LCBpbnRlcmZhY2VNb2RlLCBidW5kbGUubWNwQXFsSGFuZGxlciwge1xuICAgICAgcGVyc29uYUhhbmRsZXI6IGJ1bmRsZS5wZXJzb25hSGFuZGxlcixcbiAgICAgIGVsZW1lbnRDcnVkSGFuZGxlcjogYnVuZGxlLmVsZW1lbnRDcnVkSGFuZGxlcixcbiAgICAgIGNvbGxlY3Rpb25IYW5kbGVyOiBidW5kbGUuY29sbGVjdGlvbkhhbmRsZXIsXG4gICAgICBwb3J0Zm9saW9IYW5kbGVyOiBidW5kbGUucG9ydGZvbGlvSGFuZGxlcixcbiAgICAgIGdpdGh1YkF1dGhIYW5kbGVyOiBidW5kbGUuZ2l0aHViQXV0aEhhbmRsZXIsXG4gICAgICBjb25maWdIYW5kbGVyOiBidW5kbGUuY29uZmlnSGFuZGxlcixcbiAgICAgIHN5bmNIYW5kbGVyOiBidW5kbGUuc3luY0hhbmRsZXIsXG4gICAgICBlbmhhbmNlZEluZGV4SGFuZGxlcjogYnVuZGxlLmVuaGFuY2VkSW5kZXhIYW5kbGVyLFxuICAgIH0pO1xuXG4gICAgdGhpcy5yZXNvbHZlPFNlcnZlclNldHVwPignU2VydmVyU2V0dXAnKS5zZXR1cFNlcnZlcihzZXJ2ZXIsIHRvb2xSZWdpc3RyeSwgYnVuZGxlLmVsZW1lbnRDcnVkSGFuZGxlcik7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uYnVuZGxlLFxuICAgICAgdG9vbFJlZ2lzdHJ5LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogTG9nIHRvb2wgdG9rZW4gc3RhdGlzdGljcyBmb3IgbW9uaXRvcmluZyBhbmQgZG9jdW1lbnRhdGlvbi5cbiAgICogU2hvd3MgY3VycmVudCBtb2RlIHRva2VuIGNvdW50LCBhbHRlcm5hdGl2ZSBtb2RlIGNvbXBhcmlzb24sIGFuZCBzYXZpbmdzLlxuICAgKlxuICAgKiBUaGlzIGlzIGltcG9ydGFudCBmb3I6XG4gICAqIDEuIERvY3VtZW50aW5nIGFjdHVhbCB0b2tlbiBzYXZpbmdzIGFjaGlldmVkXG4gICAqIDIuIE1vbml0b3JpbmcgY29udGV4dCB3aW5kb3cgdXNhZ2VcbiAgICogMy4gU3VwcG9ydGluZyBmdXR1cmUgTUNQLUFRTCBhZGFwdGVyIGRldmVsb3BtZW50XG4gICAqXG4gICAqIElzc3VlICMyMzcgZW5oYW5jZW1lbnRcbiAgICovXG4gIHByaXZhdGUgbG9nVG9vbFRva2VuU3RhdHMoXG4gICAgdG9vbFJlZ2lzdHJ5OiBUb29sUmVnaXN0cnksXG4gICAgaW50ZXJmYWNlTW9kZTogJ2Rpc2NyZXRlJyB8ICdtY3BhcWwnLFxuICAgIG1jcEFxbEhhbmRsZXI6IE1DUEFRTEhhbmRsZXIsXG4gICAgZGlzY3JldGVIYW5kbGVyczoge1xuICAgICAgcGVyc29uYUhhbmRsZXI6IFBlcnNvbmFIYW5kbGVyO1xuICAgICAgZWxlbWVudENydWRIYW5kbGVyOiBFbGVtZW50Q1JVREhhbmRsZXI7XG4gICAgICBjb2xsZWN0aW9uSGFuZGxlcjogQ29sbGVjdGlvbkhhbmRsZXI7XG4gICAgICBwb3J0Zm9saW9IYW5kbGVyOiBQb3J0Zm9saW9IYW5kbGVyO1xuICAgICAgZ2l0aHViQXV0aEhhbmRsZXI6IEdpdEh1YkF1dGhIYW5kbGVyO1xuICAgICAgY29uZmlnSGFuZGxlcjogQ29uZmlnSGFuZGxlcjtcbiAgICAgIHN5bmNIYW5kbGVyOiBTeW5jSGFuZGxlcjtcbiAgICAgIGVuaGFuY2VkSW5kZXhIYW5kbGVyOiBFbmhhbmNlZEluZGV4SGFuZGxlcjtcbiAgICB9XG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnRUb2tlbnMgPSB0b29sUmVnaXN0cnkuZ2V0VG9vbFRva2VuRXN0aW1hdGUoKTtcbiAgICBjb25zdCBjdXJyZW50VG9vbENvdW50ID0gdG9vbFJlZ2lzdHJ5LmdldFRvb2xDb3VudCgpO1xuXG4gICAgLy8gQ2FsY3VsYXRlIGFsdGVybmF0aXZlIG1vZGUgdG9rZW5zIGZvciBjb21wYXJpc29uXG4gICAgbGV0IGFsdGVybmF0aXZlVG9rZW5zOiBudW1iZXI7XG4gICAgbGV0IGFsdGVybmF0aXZlVG9vbENvdW50OiBudW1iZXI7XG5cbiAgICBpZiAoaW50ZXJmYWNlTW9kZSA9PT0gJ2Rpc2NyZXRlJykge1xuICAgICAgLy8gQ3VycmVudCBpcyBkaXNjcmV0ZSwgY2FsY3VsYXRlIHdoYXQgbWNwYXFsIHdvdWxkIGJlXG4gICAgICBjb25zdCB0ZW1wUmVnaXN0cnkgPSBuZXcgVG9vbFJlZ2lzdHJ5KHt9IGFzIFNlcnZlcik7XG4gICAgICB0ZW1wUmVnaXN0cnkucmVnaXN0ZXJNQ1BBUUxUb29scyhtY3BBcWxIYW5kbGVyKTtcbiAgICAgIGFsdGVybmF0aXZlVG9rZW5zID0gdGVtcFJlZ2lzdHJ5LmdldFRvb2xUb2tlbkVzdGltYXRlKCk7XG4gICAgICBhbHRlcm5hdGl2ZVRvb2xDb3VudCA9IHRlbXBSZWdpc3RyeS5nZXRUb29sQ291bnQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ3VycmVudCBpcyBtY3BhcWwsIGNhbGN1bGF0ZSB3aGF0IGRpc2NyZXRlIHdvdWxkIGJlXG4gICAgICBjb25zdCB0ZW1wUmVnaXN0cnkgPSBuZXcgVG9vbFJlZ2lzdHJ5KHt9IGFzIFNlcnZlcik7XG4gICAgICB0ZW1wUmVnaXN0cnkucmVnaXN0ZXJQZXJzb25hVG9vbHMoZGlzY3JldGVIYW5kbGVycy5wZXJzb25hSGFuZGxlcik7XG4gICAgICB0ZW1wUmVnaXN0cnkucmVnaXN0ZXJFbGVtZW50VG9vbHMoZGlzY3JldGVIYW5kbGVycy5lbGVtZW50Q3J1ZEhhbmRsZXIpO1xuICAgICAgdGVtcFJlZ2lzdHJ5LnJlZ2lzdGVyQ29sbGVjdGlvblRvb2xzKGRpc2NyZXRlSGFuZGxlcnMuY29sbGVjdGlvbkhhbmRsZXIpO1xuICAgICAgdGVtcFJlZ2lzdHJ5LnJlZ2lzdGVyUG9ydGZvbGlvVG9vbHMoZGlzY3JldGVIYW5kbGVycy5wb3J0Zm9saW9IYW5kbGVyKTtcbiAgICAgIHRlbXBSZWdpc3RyeS5yZWdpc3RlckF1dGhUb29scyhkaXNjcmV0ZUhhbmRsZXJzLmdpdGh1YkF1dGhIYW5kbGVyKTtcbiAgICAgIHRlbXBSZWdpc3RyeS5yZWdpc3RlckNvbmZpZ1Rvb2xzKHtcbiAgICAgICAgaGFuZGxlQ29uZmlnT3BlcmF0aW9uOiAob3B0aW9ucykgPT5cbiAgICAgICAgICBkaXNjcmV0ZUhhbmRsZXJzLmNvbmZpZ0hhbmRsZXIuaGFuZGxlQ29uZmlnT3BlcmF0aW9uKG9wdGlvbnMpLFxuICAgICAgICBoYW5kbGVTeW5jT3BlcmF0aW9uOiAob3B0aW9ucykgPT5cbiAgICAgICAgICBkaXNjcmV0ZUhhbmRsZXJzLnN5bmNIYW5kbGVyLmhhbmRsZVN5bmNPcGVyYXRpb24ob3B0aW9ucyksXG4gICAgICB9KTtcbiAgICAgIHRlbXBSZWdpc3RyeS5yZWdpc3RlckVuaGFuY2VkSW5kZXhUb29scyhcbiAgICAgICAgZGlzY3JldGVIYW5kbGVycy5lbmhhbmNlZEluZGV4SGFuZGxlcixcbiAgICAgICAgdGhpcy5yZXNvbHZlPEluZGV4Q29uZmlnTWFuYWdlcj4oJ0luZGV4Q29uZmlnTWFuYWdlcicpLmdldENvbmZpZygpXG4gICAgICApO1xuICAgICAgdGVtcFJlZ2lzdHJ5LnJlZ2lzdGVyQnVpbGRJbmZvVG9vbHModGhpcy5yZXNvbHZlKCdCdWlsZEluZm9TZXJ2aWNlJykpO1xuICAgICAgYWx0ZXJuYXRpdmVUb2tlbnMgPSB0ZW1wUmVnaXN0cnkuZ2V0VG9vbFRva2VuRXN0aW1hdGUoKTtcbiAgICAgIGFsdGVybmF0aXZlVG9vbENvdW50ID0gdGVtcFJlZ2lzdHJ5LmdldFRvb2xDb3VudCgpO1xuICAgIH1cblxuICAgIC8vIENhbGN1bGF0ZSBzYXZpbmdzIChwb3NpdGl2ZSA9IGN1cnJlbnQgbW9kZSBzYXZlcyB0b2tlbnMpXG4gICAgY29uc3QgdG9rZW5EaWZmID0gYWx0ZXJuYXRpdmVUb2tlbnMgLSBjdXJyZW50VG9rZW5zO1xuICAgIGNvbnN0IHNhdmluZ3NQZXJjZW50ID0gYWx0ZXJuYXRpdmVUb2tlbnMgPiAwXG4gICAgICA/ICgodG9rZW5EaWZmIC8gYWx0ZXJuYXRpdmVUb2tlbnMpICogMTAwKS50b0ZpeGVkKDEpXG4gICAgICA6ICcwJztcblxuICAgIC8vIExvZyB0aGUgY29tcGFyaXNvblxuICAgIGxvZ2dlci5pbmZvKFxuICAgICAgYFRvb2wgUmVnaXN0cmF0aW9uIENvbXBsZXRlOiAke2N1cnJlbnRUb29sQ291bnR9IHRvb2xzLCB+JHtjdXJyZW50VG9rZW5zLnRvTG9jYWxlU3RyaW5nKCl9IHRva2Vuc2BcbiAgICApO1xuXG4gICAgaWYgKGludGVyZmFjZU1vZGUgPT09ICdtY3BhcWwnKSB7XG4gICAgICAvLyBIaWdobGlnaHQgc2F2aW5ncyB3aGVuIHVzaW5nIG1jcGFxbFxuICAgICAgbG9nZ2VyLmluZm8oXG4gICAgICAgIGBUb2tlbiBTYXZpbmdzOiAke3Rva2VuRGlmZi50b0xvY2FsZVN0cmluZygpfSB0b2tlbnMgc2F2ZWQgKCR7c2F2aW5nc1BlcmNlbnR9JSkgdnMgZGlzY3JldGUgbW9kZSAoJHthbHRlcm5hdGl2ZVRvb2xDb3VudH0gdG9vbHMsIH4ke2FsdGVybmF0aXZlVG9rZW5zLnRvTG9jYWxlU3RyaW5nKCl9IHRva2VucylgXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJbiBkaXNjcmV0ZSBtb2RlLCBzaG93IHdoYXQgbWNwYXFsIHdvdWxkIHNhdmVcbiAgICAgIGxvZ2dlci5pbmZvKFxuICAgICAgICBgQWx0ZXJuYXRpdmU6IG1jcGFxbCBtb2RlIHdvdWxkIHVzZSAke2FsdGVybmF0aXZlVG9vbENvdW50fSB0b29scywgfiR7YWx0ZXJuYXRpdmVUb2tlbnMudG9Mb2NhbGVTdHJpbmcoKX0gdG9rZW5zICgke01hdGguYWJzKE51bWJlcihzYXZpbmdzUGVyY2VudCkpfSUgJHt0b2tlbkRpZmYgPCAwID8gJ21vcmUnIDogJ2xlc3MnfSlgXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBXaXJlIGFsbCBtZXRyaWMgY29sbGVjdG9ycyBpbnRvIHRoZSBNZXRyaWNzTWFuYWdlci5cbiAgICogTWlycm9ycyB3aXJlTG9nSG9va3MoKSDigJQga2VlcHMgY29sbGVjdG9yIHJlZ2lzdHJhdGlvbiBvdXQgb2YgdGhlIGNvbnN0cnVjdG9yLlxuICAgKi9cbiAgcHJpdmF0ZSB3aXJlTWV0cmljc0NvbGxlY3RvcnMobWV0cmljc01hbmFnZXI6IE1ldHJpY3NNYW5hZ2VyKTogdm9pZCB7XG4gICAgLy8gUGVyZm9ybWFuY2VNb25pdG9yIChpbnN0YW5jZSlcbiAgICB0cnkge1xuICAgICAgY29uc3QgbW9uaXRvciA9IHRoaXMucmVzb2x2ZTxpbXBvcnQoJy4uL3V0aWxzL1BlcmZvcm1hbmNlTW9uaXRvci5qcycpLlBlcmZvcm1hbmNlTW9uaXRvcj4oJ1BlcmZvcm1hbmNlTW9uaXRvcicpO1xuICAgICAgbWV0cmljc01hbmFnZXIucmVnaXN0ZXJDb2xsZWN0b3IobmV3IFBlcmZvcm1hbmNlTW9uaXRvckNvbGxlY3Rvcihtb25pdG9yKSk7XG4gICAgfSBjYXRjaCB7IC8qIG5vdCByZWdpc3RlcmVkICovIH1cblxuICAgIC8vIExSVUNhY2hlIGluc3RhbmNlcyDigJQgQVBJIGNhY2hlICsgYWxsIGVsZW1lbnQgbWFuYWdlciBjYWNoZXNcbiAgICBjb25zdCBjYWNoZXMgPSB0aGlzLmNvbGxlY3RMcnVDYWNoZXNGb3JNZXRyaWNzKCk7XG4gICAgaWYgKGNhY2hlcy5sZW5ndGggPiAwKSB7XG4gICAgICBtZXRyaWNzTWFuYWdlci5yZWdpc3RlckNvbGxlY3RvcihuZXcgTFJVQ2FjaGVDb2xsZWN0b3IoY2FjaGVzKSk7XG4gICAgfVxuXG4gICAgLy8gU2VjdXJpdHlNb25pdG9yIChzdGF0aWMpXG4gICAgdHJ5IHtcbiAgICAgIG1ldHJpY3NNYW5hZ2VyLnJlZ2lzdGVyQ29sbGVjdG9yKG5ldyBTZWN1cml0eU1vbml0b3JDb2xsZWN0b3IoKSk7XG4gICAgfSBjYXRjaCB7IC8qIG5vdCBhdmFpbGFibGUgKi8gfVxuXG4gICAgLy8gU2VjdXJpdHlUZWxlbWV0cnkgKGluc3RhbmNlKVxuICAgIHRyeSB7XG4gICAgICBjb25zdCB0ZWxlbWV0cnkgPSB0aGlzLnJlc29sdmU8aW1wb3J0KCcuLi9zZWN1cml0eS90ZWxlbWV0cnkvU2VjdXJpdHlUZWxlbWV0cnkuanMnKS5TZWN1cml0eVRlbGVtZXRyeT4oJ1NlY3VyaXR5VGVsZW1ldHJ5Jyk7XG4gICAgICBtZXRyaWNzTWFuYWdlci5yZWdpc3RlckNvbGxlY3RvcihuZXcgU2VjdXJpdHlUZWxlbWV0cnlDb2xsZWN0b3IodGVsZW1ldHJ5KSk7XG4gICAgfSBjYXRjaCB7IC8qIG5vdCByZWdpc3RlcmVkICovIH1cblxuICAgIC8vIEZpbGVMb2NrTWFuYWdlciAoaW5zdGFuY2UpXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGxvY2tNYW5hZ2VyID0gdGhpcy5yZXNvbHZlPGltcG9ydCgnLi4vc2VjdXJpdHkvZmlsZUxvY2tNYW5hZ2VyLmpzJykuRmlsZUxvY2tNYW5hZ2VyPignRmlsZUxvY2tNYW5hZ2VyJyk7XG4gICAgICBtZXRyaWNzTWFuYWdlci5yZWdpc3RlckNvbGxlY3RvcihuZXcgRmlsZUxvY2tNYW5hZ2VyQ29sbGVjdG9yKGxvY2tNYW5hZ2VyKSk7XG4gICAgfSBjYXRjaCB7IC8qIG5vdCByZWdpc3RlcmVkICovIH1cblxuICAgIC8vIERlZmF1bHRFbGVtZW50UHJvdmlkZXIgKHN0YXRpYylcbiAgICB0cnkge1xuICAgICAgbWV0cmljc01hbmFnZXIucmVnaXN0ZXJDb2xsZWN0b3IobmV3IERlZmF1bHRFbGVtZW50UHJvdmlkZXJDb2xsZWN0b3IoKSk7XG4gICAgfSBjYXRjaCB7IC8qIG5vdCBhdmFpbGFibGUgKi8gfVxuXG4gICAgLy8gVHJpZ2dlck1ldHJpY3NUcmFja2VyIChpbnN0YW5jZSDigJQgY3JlYXRlZCBpbnNpZGUgRW5oYW5jZWRJbmRleE1hbmFnZXIgZmFjdG9yeSlcbiAgICB0cnkge1xuICAgICAgY29uc3QgZW5oYW5jZWRJbmRleCA9IHRoaXMucmVzb2x2ZTxpbXBvcnQoJy4uL3BvcnRmb2xpby9FbmhhbmNlZEluZGV4TWFuYWdlci5qcycpLkVuaGFuY2VkSW5kZXhNYW5hZ2VyPignRW5oYW5jZWRJbmRleE1hbmFnZXInKTtcbiAgICAgIC8vIEVuaGFuY2VkSW5kZXhNYW5hZ2VyIGV4cG9zZXMgdHJhY2tlciB2aWEgcHVibGljIGdldHRlciBpZiBhdmFpbGFibGVcbiAgICAgIGlmICgndHJpZ2dlck1ldHJpY3NUcmFja2VyJyBpbiBlbmhhbmNlZEluZGV4KSB7XG4gICAgICAgIGNvbnN0IHRyYWNrZXIgPSAoZW5oYW5jZWRJbmRleCBhcyBhbnkpLnRyaWdnZXJNZXRyaWNzVHJhY2tlcjtcbiAgICAgICAgaWYgKHRyYWNrZXIpIHtcbiAgICAgICAgICBtZXRyaWNzTWFuYWdlci5yZWdpc3RlckNvbGxlY3RvcihuZXcgVHJpZ2dlck1ldHJpY3NUcmFja2VyQ29sbGVjdG9yKHRyYWNrZXIpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggeyAvKiBub3QgcmVnaXN0ZXJlZCAqLyB9XG5cbiAgICAvLyBPcGVyYXRpb25hbFRlbGVtZXRyeSAoaW5zdGFuY2UpXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG9wVGVsZW1ldHJ5ID0gdGhpcy5yZXNvbHZlPGltcG9ydCgnLi4vdGVsZW1ldHJ5L09wZXJhdGlvbmFsVGVsZW1ldHJ5LmpzJykuT3BlcmF0aW9uYWxUZWxlbWV0cnk+KCdPcGVyYXRpb25hbFRlbGVtZXRyeScpO1xuICAgICAgbWV0cmljc01hbmFnZXIucmVnaXN0ZXJDb2xsZWN0b3IobmV3IE9wZXJhdGlvbmFsVGVsZW1ldHJ5Q29sbGVjdG9yKG9wVGVsZW1ldHJ5KSk7XG4gICAgfSBjYXRjaCB7IC8qIG5vdCByZWdpc3RlcmVkICovIH1cblxuICAgIC8vIE9wZXJhdGlvbk1ldHJpY3NUcmFja2VyIChpbnN0YW5jZSlcbiAgICB0cnkge1xuICAgICAgY29uc3Qgb3BUcmFja2VyID0gdGhpcy5yZXNvbHZlPE9wZXJhdGlvbk1ldHJpY3NUcmFja2VyPignT3BlcmF0aW9uTWV0cmljc1RyYWNrZXInKTtcbiAgICAgIG1ldHJpY3NNYW5hZ2VyLnJlZ2lzdGVyQ29sbGVjdG9yKG5ldyBPcGVyYXRpb25NZXRyaWNzQ29sbGVjdG9yKG9wVHJhY2tlcikpO1xuICAgIH0gY2F0Y2ggeyAvKiBub3QgcmVnaXN0ZXJlZCAqLyB9XG5cbiAgICAvLyBHYXRla2VlcGVyTWV0cmljc1RyYWNrZXIgKGluc3RhbmNlKVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBna1RyYWNrZXIgPSB0aGlzLnJlc29sdmU8R2F0ZWtlZXBlck1ldHJpY3NUcmFja2VyPignR2F0ZWtlZXBlck1ldHJpY3NUcmFja2VyJyk7XG4gICAgICBtZXRyaWNzTWFuYWdlci5yZWdpc3RlckNvbGxlY3RvcihuZXcgR2F0ZWtlZXBlck1ldHJpY3NDb2xsZWN0b3IoZ2tUcmFja2VyKSk7XG4gICAgfSBjYXRjaCB7IC8qIG5vdCByZWdpc3RlcmVkICovIH1cbiAgfVxuXG4gIHByaXZhdGUgY29sbGVjdExydUNhY2hlc0Zvck1ldHJpY3MoKTogQXJyYXk8eyBuYW1lOiBzdHJpbmc7IGluc3RhbmNlOiBpbXBvcnQoJy4uL2NhY2hlL0xSVUNhY2hlLmpzJykuTFJVQ2FjaGU8dW5rbm93bj4gfT4ge1xuICAgIGNvbnN0IGNhY2hlczogQXJyYXk8eyBuYW1lOiBzdHJpbmc7IGluc3RhbmNlOiBpbXBvcnQoJy4uL2NhY2hlL0xSVUNhY2hlLmpzJykuTFJVQ2FjaGU8dW5rbm93bj4gfT4gPSBbXTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYXBpQ2FjaGUgPSB0aGlzLnJlc29sdmU8eyBnZXRTdGF0cygpOiBpbXBvcnQoJy4uL2NhY2hlL0xSVUNhY2hlLmpzJykuQ2FjaGVTdGF0cyB9PignQVBJQ2FjaGUnKTtcbiAgICAgIGNhY2hlcy5wdXNoKHsgbmFtZTogJ0FQSUNhY2hlJywgaW5zdGFuY2U6IGFwaUNhY2hlIGFzIGFueSB9KTtcbiAgICB9IGNhdGNoIHsgLyogbm90IGF2YWlsYWJsZSAqLyB9XG5cbiAgICBjb25zdCBtYW5hZ2VyTmFtZXMgPSBbXG4gICAgICAnUGVyc29uYU1hbmFnZXInLCAnU2tpbGxNYW5hZ2VyJywgJ0FnZW50TWFuYWdlcicsXG4gICAgICAnTWVtb3J5TWFuYWdlcicsICdFbnNlbWJsZU1hbmFnZXInLCAnVGVtcGxhdGVNYW5hZ2VyJyxcbiAgICBdIGFzIGNvbnN0O1xuICAgIGZvciAoY29uc3QgbmFtZSBvZiBtYW5hZ2VyTmFtZXMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IG1nciA9IHRoaXMucmVzb2x2ZTxpbXBvcnQoJy4uL2VsZW1lbnRzL2Jhc2UvQmFzZUVsZW1lbnRNYW5hZ2VyLmpzJykuQmFzZUVsZW1lbnRNYW5hZ2VyPGFueT4+KG5hbWUpO1xuICAgICAgICBjYWNoZXMucHVzaCguLi5tZ3IuZ2V0TWV0cmljc0NhY2hlcygpKTtcbiAgICAgIH0gY2F0Y2ggeyAvKiBub3QgcmVnaXN0ZXJlZCAqLyB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhY2hlcztcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBkaXNwb3NlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIENsb3NlIHRoZSBIVFRQIHNlcnZlciBmaXJzdCBzbyB0aGUgcG9ydCBpcyBmcmVlZCBpbW1lZGlhdGVseSAoIzE4NTYpXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgc2h1dGRvd25XZWJTZXJ2ZXIgfSA9IGF3YWl0IGltcG9ydCgnLi4vd2ViL3NlcnZlci5qcycpO1xuICAgICAgc2h1dGRvd25XZWJTZXJ2ZXIoKTtcbiAgICB9IGNhdGNoIHsgLyogd2ViIHNlcnZlciBub3Qgc3RhcnRlZCAqLyB9XG5cbiAgICAvLyBDbG9zZSBNZXRyaWNzTWFuYWdlciBiZWZvcmUgZ2VuZXJhbCBkaXNwb3NhbCAoZmx1c2ggZmluYWwgc25hcHNob3QpXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG1ldHJpY3NNYW5hZ2VyID0gdGhpcy5yZXNvbHZlPE1ldHJpY3NNYW5hZ2VyPignTWV0cmljc01hbmFnZXInKTtcbiAgICAgIGF3YWl0IG1ldHJpY3NNYW5hZ2VyLmNsb3NlKCk7XG4gICAgfSBjYXRjaCB7IC8qIG1ldHJpY3Mgbm90IGVuYWJsZWQgb3Igbm90IHJlZ2lzdGVyZWQgKi8gfVxuXG4gICAgLy8gQ2xlYW4gdXAgbG9nIGhvb2tzIGJlZm9yZSBkaXNwb3Npbmcgc2VydmljZXNcbiAgICB0cnkge1xuICAgICAgY29uc3QgY2xlYW51cHMgPSB0aGlzLnJlc29sdmU8KCgpID0+IHZvaWQpW10+KCdfbG9nSG9va0NsZWFudXBzJyk7XG4gICAgICBjbGVhbnVwcy5mb3JFYWNoKGZuID0+IGZuKCkpO1xuICAgIH0gY2F0Y2ggeyAvKiBob29rcyBub3QgeWV0IHdpcmVkICovIH1cblxuICAgIGNvbnN0IGRpc3Bvc2FsUHJvbWlzZXMgPSB0aGlzLmJ1aWxkRGlzcG9zYWxQcm9taXNlcygpO1xuICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoZGlzcG9zYWxQcm9taXNlcy5tYXAoZCA9PiBkLnByb21pc2UpKTtcbiAgICB0aGlzLnJlcG9ydERpc3Bvc2FsRmFpbHVyZXMoZGlzcG9zYWxQcm9taXNlcywgcmVzdWx0cyk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRGlzcG9zYWxQcm9taXNlcygpOiBBcnJheTx7IG5hbWU6IHN0cmluZzsgcHJvbWlzZTogUHJvbWlzZTx2b2lkPiB9PiB7XG4gICAgY29uc3QgcHJvbWlzZXM6IEFycmF5PHsgbmFtZTogc3RyaW5nOyBwcm9taXNlOiBQcm9taXNlPHZvaWQ+IH0+ID0gW107XG4gICAgZm9yIChjb25zdCBbbmFtZSwgc2VydmljZV0gb2YgdGhpcy5zZXJ2aWNlcykge1xuICAgICAgaWYgKCFzZXJ2aWNlLmluc3RhbmNlKSBjb250aW51ZTtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gc2VydmljZS5pbnN0YW5jZSBhcyBhbnk7XG4gICAgICBpZiAodHlwZW9mIGluc3RhbmNlLmRpc3Bvc2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcHJvbWlzZXMucHVzaCh7IG5hbWUsIHByb21pc2U6IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gaW5zdGFuY2UuZGlzcG9zZSgpKSB9KTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGluc3RhbmNlLmNsZWFudXAgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcHJvbWlzZXMucHVzaCh7IG5hbWUsIHByb21pc2U6IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gaW5zdGFuY2UuY2xlYW51cCgpKSB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHByb21pc2VzO1xuICB9XG5cbiAgcHJpdmF0ZSByZXBvcnREaXNwb3NhbEZhaWx1cmVzKFxuICAgIGRpc3Bvc2FsUHJvbWlzZXM6IEFycmF5PHsgbmFtZTogc3RyaW5nOyBwcm9taXNlOiBQcm9taXNlPHZvaWQ+IH0+LFxuICAgIHJlc3VsdHM6IFByb21pc2VTZXR0bGVkUmVzdWx0PHZvaWQ+W10sXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGZhaWx1cmVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgW2luZGV4LCByZXN1bHRdIG9mIHJlc3VsdHMuZW50cmllcygpKSB7XG4gICAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gJ3JlamVjdGVkJykge1xuICAgICAgICBjb25zdCBzZXJ2aWNlTmFtZSA9IGRpc3Bvc2FsUHJvbWlzZXNbaW5kZXhdLm5hbWU7XG4gICAgICAgIGNvbnN0IGVycm9yID0gcmVzdWx0LnJlYXNvbiBpbnN0YW5jZW9mIEVycm9yID8gcmVzdWx0LnJlYXNvbiA6IG5ldyBFcnJvcihTdHJpbmcocmVzdWx0LnJlYXNvbikpO1xuICAgICAgICBmYWlsdXJlcy5wdXNoKHNlcnZpY2VOYW1lKTtcbiAgICAgICAgbG9nZ2VyLndhcm4oYEZhaWxlZCB0byBkaXNwb3NlIHNlcnZpY2UgJyR7c2VydmljZU5hbWV9J2AsIHsgZXJyb3IgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChmYWlsdXJlcy5sZW5ndGggPiAwKSB7XG4gICAgICBsb2dnZXIud2FybihgQ29udGFpbmVyIGRpc3Bvc2FsIGNvbXBsZXRlZCB3aXRoICR7ZmFpbHVyZXMubGVuZ3RofSBmYWlsdXJlKHMpIG91dCBvZiAke2Rpc3Bvc2FsUHJvbWlzZXMubGVuZ3RofSBzZXJ2aWNlc2ApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaW5pdGlhbGl6ZUNvbGxlY3Rpb25DYWNoZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY29sbGVjdGlvbkNhY2hlID0gdGhpcy5yZXNvbHZlPENvbGxlY3Rpb25DYWNoZT4oJ0NvbGxlY3Rpb25DYWNoZScpO1xuICAgICAgY29uc3QgaXNDYWNoZVZhbGlkID0gYXdhaXQgY29sbGVjdGlvbkNhY2hlLmlzQ2FjaGVWYWxpZCgpO1xuICAgICAgaWYgKCFpc0NhY2hlVmFsaWQpIHtcbiAgICAgICAgbG9nZ2VyLmluZm8oXCJJbml0aWFsaXppbmcgY29sbGVjdGlvbiBjYWNoZSB3aXRoIHNlZWQgZGF0YS4uLlwiKTtcbiAgICAgICAgY29uc3QgeyBDb2xsZWN0aW9uU2VlZGVyIH0gPSBhd2FpdCBpbXBvcnQoXCIuLi9jb2xsZWN0aW9uL0NvbGxlY3Rpb25TZWVkZXIuanNcIik7XG4gICAgICAgIGNvbnN0IHNlZWREYXRhID0gQ29sbGVjdGlvblNlZWRlci5nZXRTZWVkRGF0YSgpO1xuICAgICAgICBhd2FpdCBjb2xsZWN0aW9uQ2FjaGUuc2F2ZUNhY2hlKHNlZWREYXRhKTtcbiAgICAgICAgbG9nZ2VyLmluZm8oYENvbGxlY3Rpb24gY2FjaGUgaW5pdGlhbGl6ZWQgd2l0aCAke3NlZWREYXRhLmxlbmd0aH0gaXRlbXNgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHN0YXRzID0gYXdhaXQgY29sbGVjdGlvbkNhY2hlLmdldENhY2hlU3RhdHMoKTtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBDb2xsZWN0aW9uIGNhY2hlIGFscmVhZHkgdmFsaWQgd2l0aCAke3N0YXRzLml0ZW1Db3VudH0gaXRlbXNgKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgRXJyb3JIYW5kbGVyLmxvZ0Vycm9yKFwiRG9sbGhvdXNlQ29udGFpbmVyLmluaXRpYWxpemVDb2xsZWN0aW9uQ2FjaGVcIiwgZXJyb3IpO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
1345
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udGFpbmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RpL0NvbnRhaW5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDcEIsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUFFLGVBQWUsRUFBRSxlQUFlLElBQUksT0FBTyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRXRFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN2QyxPQUFPLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxnQ0FBZ0MsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2hKLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM3RCxPQUFPLEVBQ0wsWUFBWSxFQUNaLGlCQUFpQixFQUNqQixzQkFBc0IsRUFDdEIsZ0JBQWdCLEVBQ2hCLGNBQWMsRUFDZCxnQkFBZ0IsR0FDakIsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLE1BQU0sa0NBQWtDLENB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Z0JBQy9FLE1BQU0sUUFBUSxHQUFHLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUNoRCxNQUFNLGVBQWUsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQzFDLE1BQU0sQ0FBQyxJQUFJLENBQUMscUNBQXFDLFFBQVEsQ0FBQyxNQUFNLFFBQVEsQ0FBQyxDQUFDO1lBQzVFLENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLEtBQUssR0FBRyxNQUFNLGVBQWUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDcEQsTUFBTSxDQUFDLEtBQUssQ0FBQyx1Q0FBdUMsS0FBSyxDQUFDLFNBQVMsUUFBUSxDQUFDLENBQUM7WUFDL0UsQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsWUFBWSxDQUFDLFFBQVEsQ0FBQyw4Q0FBOEMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMvRSxDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG9zIGZyb20gXCJvc1wiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgUEFDS0FHRV9WRVJTSU9OLCBQQUNLQUdFX1ZFUlNJT04gYXMgVkVSU0lPTiB9IGZyb20gXCIuLi9nZW5lcmF0ZWQvdmVyc2lvbi5qc1wiO1xuaW1wb3J0IHsgU2VjdXJpdHlNb25pdG9yIH0gZnJvbSBcIi4uL3NlY3VyaXR5L3NlY3VyaXR5TW9uaXRvci5qc1wiO1xuaW1wb3J0IHsgVmVyYlRyaWdnZXJNYW5hZ2VyIH0gZnJvbSBcIi4uL3BvcnRmb2xpby9WZXJiVHJpZ2dlck1hbmFnZXIuanNcIjtcbmltcG9ydCB7IFJlbGF0aW9uc2hpcE1hbmFnZXIgfSBmcm9tIFwiLi4vcG9ydGZvbGlvL1JlbGF0aW9uc2hpcE1hbmFnZXIuanNcIjtcbmltcG9ydCB7IE5MUFNjb3JpbmdNYW5hZ2VyIH0gZnJvbSBcIi4uL3BvcnRmb2xpby9OTFBTY29yaW5nTWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgU2VydmVyIH0gZnJvbSBcIkBtb2RlbGNvbnRleHRwcm90b2NvbC9zZGsvc2VydmVyL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBsb2FkSW5kaWNhdG9yQ29uZmlnIH0gZnJvbSBcIi4uL2NvbmZpZy9pbmRpY2F0b3ItY29uZmlnLmpzXCI7XG5pbXBvcnQgeyBlbnYgfSBmcm9tIFwiLi4vY29uZmlnL2Vudi5qc1wiO1xuaW1wb3J0IHsgQVBJQ2FjaGUsIENvbGxlY3Rpb25DYWNoZSwgQ29sbGVjdGlvbkluZGV4Q2FjaGUsIENhY2hlTWVtb3J5QnVkZ2V0IH0gZnJvbSBcIi4uL2NhY2hlL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBnZXRWYWxpZGF0ZWRHbG9iYWxDYWNoZU1lbW9yeUJ5dGVzLCBnZXRWYWxpZGF0ZWRNYXhCYWNrdXBzUGVyRWxlbWVudCwgU1RPUkFHRV9MQVlFUl9DT05GSUcgfSBmcm9tIFwiLi4vY29uZmlnL3BlcmZvcm1hbmNlLWNvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgQmFja3VwU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9CYWNrdXBTZXJ2aWNlLmpzXCI7XG5pbXBvcnQge1xuICBHaXRIdWJDbGllbnQsXG4gIENvbGxlY3Rpb25Ccm93c2VyLFxuICBDb2xsZWN0aW9uSW5kZXhNYW5hZ2VyLFxuICBDb2xsZWN0aW9uU2VhcmNoLFxuICBQZXJzb25hRGV0YWlscyxcbiAgRWxlbWVudEluc3RhbGxlcixcbn0gZnJvbSBcIi4uL2NvbGxlY3Rpb24vaW5kZXguanNcIjtcbmltcG9ydCB7IEdpdEh1YkF1dGhNYW5hZ2VyIH0gZnJvbSBcIi4uL2F1dGgvR2l0SHViQXV0aE1hbmFnZXIuanNcIjtcbmltcG9ydCB7IFBvcnRmb2xpb01hbmFnZXIsIEVsZW1lbnRUeXBlIH0gZnJvbSBcIi4uL3BvcnRmb2xpby9Qb3J0Zm9saW9NYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBNaWdyYXRpb25NYW5hZ2VyIH0gZnJvbSBcIi4uL3BvcnRmb2xpby9NaWdyYXRpb25NYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBFbmhhbmNlZEluZGV4TWFuYWdlciB9IGZyb20gXCIuLi9wb3J0Zm9saW8vRW5oYW5jZWRJbmRleE1hbmFnZXIuanNcIjtcbmltcG9ydCB7IEVuaGFuY2VkSW5kZXhIYW5kbGVyIH0gZnJvbSBcIi4uL2hhbmRsZXJzL0VuaGFuY2VkSW5kZXhIYW5kbGVyLmpzXCI7XG5pbXBvcnQgeyBNQ1BBUUxIYW5kbGVyLCB0eXBlIEhhbmRsZXJSZWdpc3RyeSB9IGZyb20gXCIuLi9oYW5kbGVycy9tY3AtYXFsL01DUEFRTEhhbmRsZXIuanNcIjtcbmltcG9ydCB7IEdhdGVrZWVwZXIgfSBmcm9tIFwiLi4vaGFuZGxlcnMvbWNwLWFxbC9HYXRla2VlcGVyLmpzXCI7XG5pbXBvcnQgeyBTa2lsbE1hbmFnZXIgfSBmcm9tIFwiLi4vZWxlbWVudHMvc2tpbGxzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZU1hbmFnZXIgfSBmcm9tIFwiLi4vZWxlbWVudHMvdGVtcGxhdGVzL1RlbXBsYXRlTWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgVGVtcGxhdGVSZW5kZXJlciB9IGZyb20gXCIuLi91dGlscy9UZW1wbGF0ZVJlbmRlcmVyLmpzXCI7XG5pbXBvcnQgeyBBZ2VudE1hbmFnZXIgfSBmcm9tIFwiLi4vZWxlbWVudHMvYWdlbnRzL0FnZW50TWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgTWVtb3J5IH0gZnJvbSBcIi4uL2VsZW1lbnRzL21lbW9yaWVzL01lbW9yeS5qc1wiO1xuaW1wb3J0IHsgTWVtb3J5TWFuYWdlciB9IGZyb20gXCIuLi9lbGVtZW50cy9tZW1vcmllcy9NZW1vcnlNYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBXZWJTU0VMb2dTaW5rIH0gZnJvbSBcIi4uL3dlYi9zaW5rcy9XZWJTU0VMb2dTaW5rLmpzXCI7XG5pbXBvcnQgeyBXZWJTU0VNZXRyaWNzU2luayB9IGZyb20gXCIuLi93ZWIvc2lua3MvV2ViU1NFTWV0cmljc1NpbmsuanNcIjtcbmltcG9ydCB7IEVuc2VtYmxlTWFuYWdlciB9IGZyb20gXCIuLi9lbGVtZW50cy9lbnNlbWJsZXMvRW5zZW1ibGVNYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBQZXJzb25hRXhwb3J0ZXIsIFBlcnNvbmFJbXBvcnRlciB9IGZyb20gXCIuLi9wZXJzb25hL2V4cG9ydC1pbXBvcnQvaW5kZXguanNcIjtcbmltcG9ydCB7IFBlcnNvbmFNYW5hZ2VyIH0gZnJvbSBcIi4uL3BlcnNvbmEvUGVyc29uYU1hbmFnZXIuanNcIjtcbmltcG9ydCB7IFBlcnNvbmFIYW5kbGVyIH0gZnJvbSBcIi4uL2hhbmRsZXJzL1BlcnNvbmFIYW5kbGVyLmpzXCI7XG5pbXBvcnQgeyBFbGVtZW50Q1JVREhhbmRsZXIgfSBmcm9tIFwiLi4vaGFuZGxlcnMvRWxlbWVudENSVURIYW5kbGVyLmpzXCI7XG5pbXBvcnQgeyBDb2xsZWN0aW9uSGFuZGxlciB9IGZyb20gXCIuLi9oYW5kbGVycy9Db2xsZWN0aW9uSGFuZGxlci5qc1wiO1xuaW1wb3J0IHsgUG9ydGZvbGlvSGFuZGxlciB9IGZyb20gXCIuLi9oYW5kbGVycy9Qb3J0Zm9saW9IYW5kbGVyLmpzXCI7XG5pbXBvcnQgeyBQb3J0Zm9saW9QdWxsSGFuZGxlciB9IGZyb20gXCIuLi9oYW5kbGVycy9Qb3J0Zm9saW9QdWxsSGFuZGxlci5qc1wiO1xuaW1wb3J0IHsgR2l0SHViQXV0aEhhbmRsZXIgfSBmcm9tIFwiLi4vaGFuZGxlcnMvR2l0SHViQXV0aEhhbmRsZXIuanNcIjtcbmltcG9ydCB7IERpc3BsYXlDb25maWdIYW5kbGVyIH0gZnJvbSBcIi4uL2hhbmRsZXJzL0Rpc3BsYXlDb25maWdIYW5kbGVyLmpzXCI7XG5pbXBvcnQgeyBJZGVudGl0eUhhbmRsZXIgfSBmcm9tIFwiLi4vaGFuZGxlcnMvSWRlbnRpdHlIYW5kbGVyLmpzXCI7XG5pbXBvcnQgeyBDb25maWdIYW5kbGVyIH0gZnJvbSBcIi4uL2hhbmRsZXJzL0NvbmZpZ0hhbmRsZXIuanNcIjtcbmltcG9ydCB7IFN5bmNIYW5kbGVyIH0gZnJvbSBcIi4uL2hhbmRsZXJzL1N5bmNIYW5kbGVyVjIuanNcIjtcbmltcG9ydCB7IFRvb2xSZWdpc3RyeSB9IGZyb20gXCIuLi9oYW5kbGVycy9Ub29sUmVnaXN0cnkuanNcIjtcbmltcG9ydCB7IFNlcnZlclNldHVwIH0gZnJvbSBcIi4uL3NlcnZlci9pbmRleC5qc1wiO1xuaW1wb3J0IHsgU2VydmVyU3RhcnR1cCB9IGZyb20gXCIuLi9zZXJ2ZXIvc3RhcnR1cC5qc1wiO1xuaW1wb3J0IHsgUGF0aFZhbGlkYXRvciB9IGZyb20gXCIuLi9zZWN1cml0eS9wYXRoVmFsaWRhdG9yLmpzXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vdXRpbHMvbG9nZ2VyLmpzXCI7XG5pbXBvcnQgeyBFcnJvckhhbmRsZXIgfSBmcm9tIFwiLi4vdXRpbHMvRXJyb3JIYW5kbGVyLmpzXCI7XG5pbXBvcnQgeyBVbmlmaWVkSW5kZXhNYW5hZ2VyIH0gZnJvbSBcIi4uL3BvcnRmb2xpby9VbmlmaWVkSW5kZXhNYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBQb3J0Zm9saW9JbmRleE1hbmFnZXIgfSBmcm9tIFwiLi4vcG9ydGZvbGlvL1BvcnRmb2xpb0luZGV4TWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgU3VibWl0VG9Qb3J0Zm9saW9Ub29sIH0gZnJvbSBcIi4uL3Rvb2xzL3BvcnRmb2xpby9zdWJtaXRUb1BvcnRmb2xpb1Rvb2wuanNcIjtcbmltcG9ydCB7IENvbmZpZ01hbmFnZXIgfSBmcm9tIFwiLi4vY29uZmlnL0NvbmZpZ01hbmFnZXIuanNcIjtcbmltcG9ydCB7IFBvcnRmb2xpb1JlcG9NYW5hZ2VyIH0gZnJvbSBcIi4uL3BvcnRmb2xpby9Qb3J0Zm9saW9SZXBvTWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgUG9ydGZvbGlvU3luY01hbmFnZXIgfSBmcm9tIFwiLi4vcG9ydGZvbGlvL1BvcnRmb2xpb1N5bmNNYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBnZXRQb3J0Zm9saW9SZXBvc2l0b3J5TmFtZSB9IGZyb20gXCIuLi9jb25maWcvcG9ydGZvbGlvQ29uZmlnLmpzXCI7XG5pbXBvcnQgeyBHaXRIdWJQb3J0Zm9saW9JbmRleGVyIH0gZnJvbSBcIi4uL3BvcnRmb2xpby9HaXRIdWJQb3J0Zm9saW9JbmRleGVyLmpzXCI7XG5pbXBvcnQgeyBJbmRleENvbmZpZ01hbmFnZXIgfSBmcm9tIFwiLi4vcG9ydGZvbGlvL2NvbmZpZy9JbmRleENvbmZpZy5qc1wiO1xuaW1wb3J0IHsgUG9ydGZvbGlvU3luY0NvbXBhcmVyIH0gZnJvbSBcIi4uL3N5bmMvUG9ydGZvbGlvU3luY0NvbXBhcmVyLmpzXCI7XG5pbXBvcnQgeyBQb3J0Zm9saW9Eb3dubG9hZGVyIH0gZnJvbSBcIi4uL3N5bmMvUG9ydGZvbGlvRG93bmxvYWRlci5qc1wiO1xuaW1wb3J0IHsgUGVyZm9ybWFuY2VNb25pdG9yIH0gZnJvbSBcIi4uL3V0aWxzL1BlcmZvcm1hbmNlTW9uaXRvci5qc1wiO1xuaW1wb3J0IHsgQnVpbGRJbmZvU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9CdWlsZEluZm9TZXJ2aWNlLmpzXCI7XG5pbXBvcnQgeyBJbml0aWFsaXphdGlvblNlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvSW5pdGlhbGl6YXRpb25TZXJ2aWNlLmpzXCI7XG5pbXBvcnQgeyBQZXJzb25hSW5kaWNhdG9yU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9QZXJzb25hSW5kaWNhdG9yU2VydmljZS5qc1wiO1xuaW1wb3J0IHsgRmlsZUxvY2tNYW5hZ2VyIH0gZnJvbSAnLi4vc2VjdXJpdHkvZmlsZUxvY2tNYW5hZ2VyLmpzJztcbmltcG9ydCB7IFN0YXRlQ2hhbmdlTm90aWZpZXIgfSBmcm9tIFwiLi4vc2VydmljZXMvU3RhdGVDaGFuZ2VOb3RpZmllci5qc1wiO1xuaW1wb3J0IHsgU2VyaWFsaXphdGlvblNlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvU2VyaWFsaXphdGlvblNlcnZpY2UuanNcIjtcbmltcG9ydCB7IEZpbGVXYXRjaFNlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvRmlsZVdhdGNoU2VydmljZS5qc1wiO1xuaW1wb3J0IHsgTWV0YWRhdGFTZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL01ldGFkYXRhU2VydmljZS5qc1wiO1xuaW1wb3J0IHsgRmlsZU9wZXJhdGlvbnNTZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL0ZpbGVPcGVyYXRpb25zU2VydmljZS5qc1wiO1xuaW1wb3J0IHsgVmFsaWRhdGlvblJlZ2lzdHJ5IH0gZnJvbSBcIi4uL3NlcnZpY2VzL3ZhbGlkYXRpb24vVmFsaWRhdGlvblJlZ2lzdHJ5LmpzXCI7XG5pbXBvcnQgeyBUcmlnZ2VyVmFsaWRhdGlvblNlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvdmFsaWRhdGlvbi9UcmlnZ2VyVmFsaWRhdGlvblNlcnZpY2UuanNcIjtcbmltcG9ydCB7IFZhbGlkYXRpb25TZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL3ZhbGlkYXRpb24vVmFsaWRhdGlvblNlcnZpY2UuanNcIjtcbmltcG9ydCB7IEdpdEh1YlJhdGVMaW1pdGVyIH0gZnJvbSBcIi4uL3V0aWxzL0dpdEh1YlJhdGVMaW1pdGVyLmpzXCI7XG5pbXBvcnQgeyBBbnRocm9waWNUb0RvbGxob3VzZUNvbnZlcnRlciwgRG9sbGhvdXNlVG9BbnRocm9waWNDb252ZXJ0ZXIgfSBmcm9tIFwiLi4vY29udmVydGVycy9pbmRleC5qc1wiO1xuaW1wb3J0IHsgRGFuZ2VyWm9uZUVuZm9yY2VyIH0gZnJvbSBcIi4uL3NlY3VyaXR5L0RhbmdlclpvbmVFbmZvcmNlci5qc1wiO1xuaW1wb3J0IHsgQWN0aXZhdGlvblN0b3JlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL0FjdGl2YXRpb25TdG9yZS5qc1wiO1xuaW1wb3J0IHsgVmVyaWZpY2F0aW9uU3RvcmUgfSBmcm9tIFwiQGRvbGxob3VzZW1jcC9zYWZldHlcIjtcbmltcG9ydCB7IFZlcmlmaWNhdGlvbk5vdGlmaWVyIH0gZnJvbSBcIi4uL3NlcnZpY2VzL1ZlcmlmaWNhdGlvbk5vdGlmaWVyLmpzXCI7XG5pbXBvcnQgeyBQYXR0ZXJuRW5jcnlwdG9yIH0gZnJvbSBcIi4uL3NlY3VyaXR5L2VuY3J5cHRpb24vUGF0dGVybkVuY3J5cHRvci5qc1wiO1xuaW1wb3J0IHsgUGF0dGVybkRlY3J5cHRvciB9IGZyb20gXCIuLi9zZWN1cml0eS9lbmNyeXB0aW9uL1BhdHRlcm5EZWNyeXB0b3IuanNcIjtcbmltcG9ydCB7IENvbnRleHRUcmFja2VyIH0gZnJvbSBcIi4uL3NlY3VyaXR5L2VuY3J5cHRpb24vQ29udGV4dFRyYWNrZXIuanNcIjtcbmltcG9ydCB7IFBhdHRlcm5FeHRyYWN0b3IgfSBmcm9tIFwiLi4vc2VjdXJpdHkvdmFsaWRhdGlvbi9QYXR0ZXJuRXh0cmFjdG9yLmpzXCI7XG5pbXBvcnQgeyBCYWNrZ3JvdW5kVmFsaWRhdG9yIH0gZnJvbSBcIi4uL3NlY3VyaXR5L3ZhbGlkYXRpb24vQmFja2dyb3VuZFZhbGlkYXRvci5qc1wiO1xuaW1wb3J0IHsgU2VjdXJpdHlUZWxlbWV0cnkgfSBmcm9tIFwiLi4vc2VjdXJpdHkvdGVsZW1ldHJ5L1NlY3VyaXR5VGVsZW1ldHJ5LmpzXCI7XG5pbXBvcnQgeyBDb250ZW50VmFsaWRhdG9yIH0gZnJvbSBcIi4uL3NlY3VyaXR5L2NvbnRlbnRWYWxpZGF0b3IuanNcIjtcbmltcG9ydCB7IE9wZXJhdGlvbmFsVGVsZW1ldHJ5IH0gZnJvbSBcIi4uL3RlbGVtZXRyeS9PcGVyYXRpb25hbFRlbGVtZXRyeS5qc1wiO1xuaW1wb3J0IHsgU3RhcnR1cFRpbWVyIH0gZnJvbSBcIi4uL3RlbGVtZXRyeS9TdGFydHVwVGltZXIuanNcIjtcbmltcG9ydCB7IERlZmF1bHRFbmhhbmNlZEluZGV4SGVscGVycyB9IGZyb20gXCIuLi9wb3J0Zm9saW8vZW5oYW5jZWQtaW5kZXgvRW5oYW5jZWRJbmRleEhlbHBlcnMuanNcIjtcbmltcG9ydCB7IEVsZW1lbnREZWZpbml0aW9uQnVpbGRlciB9IGZyb20gXCIuLi9wb3J0Zm9saW8vZW5oYW5jZWQtaW5kZXgvRWxlbWVudERlZmluaXRpb25CdWlsZGVyLmpzXCI7XG5pbXBvcnQgeyBBY3Rpb25UcmlnZ2VyRXh0cmFjdG9yIH0gZnJvbSBcIi4uL3BvcnRmb2xpby9lbmhhbmNlZC1pbmRleC9BY3Rpb25UcmlnZ2VyRXh0cmFjdG9yLmpzXCI7XG5pbXBvcnQgeyBUcmlnZ2VyTWV0cmljc1RyYWNrZXIgfSBmcm9tIFwiLi4vcG9ydGZvbGlvL2VuaGFuY2VkLWluZGV4L1RyaWdnZXJNZXRyaWNzVHJhY2tlci5qc1wiO1xuaW1wb3J0IHsgU2VtYW50aWNSZWxhdGlvbnNoaXBTZXJ2aWNlIH0gZnJvbSBcIi4uL3BvcnRmb2xpby9lbmhhbmNlZC1pbmRleC9TZW1hbnRpY1JlbGF0aW9uc2hpcFNlcnZpY2UuanNcIjtcbmltcG9ydCB7IEVsZW1lbnRFdmVudERpc3BhdGNoZXIgfSBmcm9tICcuLi9ldmVudHMvRWxlbWVudEV2ZW50RGlzcGF0Y2hlci5qcyc7XG5pbXBvcnQgeyBUb2tlbk1hbmFnZXIgfSBmcm9tIFwiLi4vc2VjdXJpdHkvdG9rZW5NYW5hZ2VyLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFVuaWZpZWRDb25zb2xlUmVzdWx0IH0gZnJvbSBcIi4uL3dlYi9jb25zb2xlL1VuaWZpZWRDb25zb2xlLmpzXCI7XG5pbXBvcnQge1xuICBQYWdpbmF0aW9uU2VydmljZSxcbiAgRmlsdGVyU2VydmljZSxcbiAgU29ydFNlcnZpY2UsXG4gIEVsZW1lbnRRdWVyeVNlcnZpY2UsXG59IGZyb20gJy4uL3NlcnZpY2VzL3F1ZXJ5L2luZGV4LmpzJztcbmltcG9ydCB7IFJldGVudGlvblBvbGljeVNlcnZpY2UsIE1lbW9yeVJldGVudGlvblN0cmF0ZWd5IH0gZnJvbSAnLi4vc2VydmljZXMvUmV0ZW50aW9uUG9saWN5U2VydmljZS5qcyc7XG5pbXBvcnQgeyBQb2xpY3lFeHBvcnRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvUG9saWN5RXhwb3J0U2VydmljZS5qcyc7XG5pbXBvcnQgeyBMb2dNYW5hZ2VyLCBidWlsZExvZ01hbmFnZXJDb25maWcgfSBmcm9tICcuLi9sb2dnaW5nL0xvZ01hbmFnZXIuanMnO1xuaW1wb3J0IHsgRmlsZUxvZ1NpbmsgfSBmcm9tICcuLi9sb2dnaW5nL3NpbmtzL0ZpbGVMb2dTaW5rLmpzJztcbmltcG9ydCB7IE1lbW9yeUxvZ1NpbmsgfSBmcm9tICcuLi9sb2dnaW5nL3NpbmtzL01lbW9yeUxvZ1NpbmsuanMnO1xuaW1wb3J0IHsgUGxhaW5UZXh0Rm9ybWF0dGVyIH0gZnJvbSAnLi4vbG9nZ2luZy9mb3JtYXR0ZXJzL1BsYWluVGV4dEZvcm1hdHRlci5qcyc7XG5pbXBvcnQgeyBKc29ubEZvcm1hdHRlciB9IGZyb20gJy4uL2xvZ2dpbmcvZm9ybWF0dGVycy9Kc29ubEZvcm1hdHRlci5qcyc7XG5pbXBvcnQgeyB3aXJlTG9nSG9va3MsIGdldFRyaWdnZXJNZXRyaWNzTG9nTGlzdGVuZXIgfSBmcm9tICcuLi9sb2dnaW5nL0xvZ0hvb2tzLmpzJztcbmltcG9ydCB7IE1ldHJpY3NNYW5hZ2VyIH0gZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzTWFuYWdlci5qcyc7XG5pbXBvcnQgeyBNZW1vcnlNZXRyaWNzU2luayB9IGZyb20gJy4uL21ldHJpY3Mvc2lua3MvTWVtb3J5TWV0cmljc1NpbmsuanMnO1xuaW1wb3J0IHsgYnVpbGRNZXRyaWNzTWFuYWdlckNvbmZpZyB9IGZyb20gJy4uL21ldHJpY3MvdHlwZXMuanMnO1xuaW1wb3J0IHtcbiAgUGVyZm9ybWFuY2VNb25pdG9yQ29sbGVjdG9yLFxuICBMUlVDYWNoZUNvbGxlY3RvcixcbiAgU2VjdXJpdHlNb25pdG9yQ29sbGVjdG9yLFxuICBTZWN1cml0eVRlbGVtZXRyeUNvbGxlY3RvcixcbiAgRmlsZUxvY2tNYW5hZ2VyQ29sbGVjdG9yLFxuICBEZWZhdWx0RWxlbWVudFByb3ZpZGVyQ29sbGVjdG9yLFxuICBUcmlnZ2VyTWV0cmljc1RyYWNrZXJDb2xsZWN0b3IsXG4gIE9wZXJhdGlvbmFsVGVsZW1ldHJ5Q29sbGVjdG9yLFxuICBPcGVyYXRpb25NZXRyaWNzQ29sbGVjdG9yLFxuICBHYXRla2VlcGVyTWV0cmljc0NvbGxlY3Rvcixcbn0gZnJvbSAnLi4vbWV0cmljcy9jb2xsZWN0b3JzL2luZGV4LmpzJztcbmltcG9ydCB7IE9wZXJhdGlvbk1ldHJpY3NUcmFja2VyIH0gZnJvbSAnLi4vbWV0cmljcy9PcGVyYXRpb25NZXRyaWNzVHJhY2tlci5qcyc7XG5pbXBvcnQgeyBHYXRla2VlcGVyTWV0cmljc1RyYWNrZXIgfSBmcm9tICcuLi9tZXRyaWNzL0dhdGVrZWVwZXJNZXRyaWNzVHJhY2tlci5qcyc7XG5cbi8vIFN0YXRlIGlzIG93bmVkIGJ5IFBlcnNvbmFNYW5hZ2VyIGFuZCBzZXJ2aWNlc1xuXG5leHBvcnQgaW50ZXJmYWNlIEhhbmRsZXJCdW5kbGUge1xuICBwZXJzb25hSGFuZGxlcjogUGVyc29uYUhhbmRsZXI7XG4gIGVsZW1lbnRDcnVkSGFuZGxlcjogRWxlbWVudENSVURIYW5kbGVyO1xuICBjb2xsZWN0aW9uSGFuZGxlcjogQ29sbGVjdGlvbkhhbmRsZXI7XG4gIHBvcnRmb2xpb0hhbmRsZXI6IFBvcnRmb2xpb0hhbmRsZXI7XG4gIGdpdGh1YkF1dGhIYW5kbGVyOiBHaXRIdWJBdXRoSGFuZGxlcjtcbiAgZGlzcGxheUNvbmZpZ0hhbmRsZXI6IERpc3BsYXlDb25maWdIYW5kbGVyO1xuICBpZGVudGl0eUhhbmRsZXI6IElkZW50aXR5SGFuZGxlcjtcbiAgY29uZmlnSGFuZGxlcjogQ29uZmlnSGFuZGxlcjtcbiAgc3luY0hhbmRsZXI6IFN5bmNIYW5kbGVyO1xuICB0b29sUmVnaXN0cnk6IFRvb2xSZWdpc3RyeTtcbiAgZW5oYW5jZWRJbmRleEhhbmRsZXI6IEVuaGFuY2VkSW5kZXhIYW5kbGVyO1xuICBtY3BBcWxIYW5kbGVyOiBNQ1BBUUxIYW5kbGVyO1xufVxuXG4vKipcbiAqIFR5cGUtc2FmZSBzZXJ2aWNlIHJlY29yZCBmb3IgZGVwZW5kZW5jeSBpbmplY3Rpb24gY29udGFpbmVyXG4gKlxuICogRklYOiBSZXBsYWNlZCAnYW55JyB0eXBlcyB3aXRoIHByb3BlciBnZW5lcmljcyB0byBlbnN1cmUgdHlwZSBzYWZldHlcbiAqIFByZXZpb3VzbHk6IFVzZWQgJ2FueScgd2hpY2ggYWxsb3dlZCB1bnNhZmUgY2FzdHMgYW5kIHJ1bnRpbWUgZXJyb3JzXG4gKiBOb3c6IFVzZXMgZ2VuZXJpYyBUIHdpdGggJ3Vua25vd24nIGZhbGxiYWNrIGZvciBjb21waWxlLXRpbWUgdHlwZSBjaGVja2luZ1xuICpcbiAqIEB0ZW1wbGF0ZSBUIFRoZSBzZXJ2aWNlIHR5cGUgKGRlZmF1bHRzIHRvIHVua25vd24gZm9yIG1heGltdW0gc2FmZXR5KVxuICovXG5pbnRlcmZhY2UgU2VydmljZVJlY29yZDxUID0gdW5rbm93bj4ge1xuICBmYWN0b3J5OiAoKSA9PiBUO1xuICBpbnN0YW5jZTogVCB8IG51bGw7XG4gIHNpbmdsZXRvbjogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIERvbGxob3VzZUNvbnRhaW5lciB7XG4gIHByaXZhdGUgc2VydmljZXMgPSBuZXcgTWFwPHN0cmluZywgU2VydmljZVJlY29yZD4oKTtcbiAgcHJpdmF0ZSBwZXJzb25hc0Rpcjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIC8qKiBJc3N1ZSAjNzA2OiBTZXQgdG8gdHJ1ZSBvbmNlIGNvbXBsZXRlRGVmZXJyZWRTZXR1cCgpIHJlc29sdmVzLiAqL1xuICBwdWJsaWMgZGVmZXJyZWRTZXR1cENvbXBsZXRlID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLy8gRklYOiBETUNQLVNFQy0wMDYgLSBBdWRpdCBESSBjb250YWluZXIgaW5pdGlhbGl6YXRpb25cbiAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICB0eXBlOiAnUE9SVEZPTElPX0lOSVRJQUxJWkFUSU9OJyxcbiAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgIHNvdXJjZTogJ0RvbGxob3VzZUNvbnRhaW5lci5jb25zdHJ1Y3RvcicsXG4gICAgICBkZXRhaWxzOiAnRGVwZW5kZW5jeSBpbmplY3Rpb24gY29udGFpbmVyIGluaXRpYWxpemluZydcbiAgICB9KTtcbiAgICB0aGlzLnJlZ2lzdGVyU2VydmljZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhIHNlcnZpY2Ugd2l0aCB0aGUgREkgY29udGFpbmVyXG4gICAqXG4gICAqIEZJWDogQWRkZWQgZXhwbGljaXQgdHlwZSBwYXJhbWV0ZXIgZm9yIHR5cGUgc2FmZXR5XG4gICAqIFRoZSBmYWN0b3J5IGlzIHN0b3JlZCBhcyAoKSA9PiB1bmtub3duIGludGVybmFsbHkgdG8gYWxsb3cgaGV0ZXJvZ2VuZW91cyBzdG9yYWdlLFxuICAgKiBidXQgdGhlIHR5cGUgVCBpcyBwcmVzZXJ2ZWQgZm9yIHJlc29sdmUoKSBjYWxsc1xuICAgKlxuICAgKiBAdGVtcGxhdGUgVCBUaGUgc2VydmljZSB0eXBlXG4gICAqIEBwYXJhbSBuYW1lIFVuaXF1ZSBzZXJ2aWNlIGlkZW50aWZpZXJcbiAgICogQHBhcmFtIGZhY3RvcnkgRmFjdG9yeSBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgdGhlIHNlcnZpY2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIG9wdGlvbnMgQ29uZmlndXJhdGlvbiBvcHRpb25zIChzaW5nbGV0b24gYmVoYXZpb3IpXG4gICAqL1xuICBwdWJsaWMgcmVnaXN0ZXI8VD4obmFtZTogc3RyaW5nLCBmYWN0b3J5OiAoKSA9PiBULCBvcHRpb25zOiB7IHNpbmdsZXRvbj86IGJvb2xlYW4gfSA9IHsgc2luZ2xldG9uOiB0cnVlIH0pOiB2b2lkIHtcbiAgICAvLyBGSVg6IERNQ1AtU0VDLTAwNiAtIEF1ZGl0IHNlcnZpY2UgcmVnaXN0cmF0aW9uXG4gICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgdHlwZTogJ0VMRU1FTlRfQ1JFQVRFRCcsXG4gICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICBzb3VyY2U6ICdEb2xsaG91c2VDb250YWluZXIucmVnaXN0ZXInLFxuICAgICAgZGV0YWlsczogYFNlcnZpY2UgcmVnaXN0ZXJlZDogJHtuYW1lfWAsXG4gICAgICBhZGRpdGlvbmFsRGF0YTogeyBzZXJ2aWNlTmFtZTogbmFtZSwgc2luZ2xldG9uOiBvcHRpb25zLnNpbmdsZXRvbiA/PyB0cnVlIH1cbiAgICB9KTtcbiAgICB0aGlzLnNlcnZpY2VzLnNldChuYW1lLCB7XG4gICAgICBmYWN0b3J5OiBmYWN0b3J5IGFzICgpID0+IHVua25vd24sXG4gICAgICBpbnN0YW5jZTogbnVsbCxcbiAgICAgIHNpbmdsZXRvbjogb3B0aW9ucy5zaW5nbGV0b24gPz8gdHJ1ZVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgYSBzZXJ2aWNlIGZyb20gdGhlIERJIGNvbnRhaW5lclxuICAgKlxuICAgKiBGSVg6IFR5cGUgc2FmZXR5IGltcHJvdmVkIHdpdGggZXhwbGljaXQgY2FzdGluZyBhbmQgdmFsaWRhdGlvblxuICAgKiBUaGUgJ2FzIFQnIGNhc3QgaXMgc2FmZSBiZWNhdXNlOlxuICAgKiAxLiBTZXJ2aWNlcyBhcmUgcmVnaXN0ZXJlZCB3aXRoIHR5cGVkIGZhY3Rvcmllc1xuICAgKiAyLiBUaGUgc2VydmljZSBuYW1lIGFjdHMgYXMgYSB0eXBlIGRpc2NyaW1pbmF0b3JcbiAgICogMy4gSW5jb3JyZWN0IHVzYWdlIHdpbGwgYmUgY2F1Z2h0IGF0IHRoZSByZWdpc3RyYXRpb24gc2l0ZVxuICAgKlxuICAgKiBAdGVtcGxhdGUgVCBUaGUgZXhwZWN0ZWQgc2VydmljZSB0eXBlXG4gICAqIEBwYXJhbSBuYW1lIFNlcnZpY2UgaWRlbnRpZmllclxuICAgKiBAcmV0dXJucyBUaGUgc2VydmljZSBpbnN0YW5jZVxuICAgKiBAdGhyb3dzIEVycm9yIGlmIHNlcnZpY2UgaXMgbm90IHJlZ2lzdGVyZWRcbiAgICovXG4gIHB1YmxpYyByZXNvbHZlPFQ+KG5hbWU6IHN0cmluZyk6IFQge1xuICAgIGNvbnN0IHNlcnZpY2UgPSB0aGlzLnNlcnZpY2VzLmdldChuYW1lKTtcbiAgICBpZiAoIXNlcnZpY2UpIHtcbiAgICAgIC8vIEZJWDogRE1DUC1TRUMtMDA2IC0gQXVkaXQgc2VydmljZSByZXNvbHV0aW9uIGZhaWx1cmVzXG4gICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgIHR5cGU6ICdNRU1PUllfTE9BRF9GQUlMRUQnLFxuICAgICAgICBzZXZlcml0eTogJ01FRElVTScsXG4gICAgICAgIHNvdXJjZTogJ0RvbGxob3VzZUNvbnRhaW5lci5yZXNvbHZlJyxcbiAgICAgICAgZGV0YWlsczogYFNlcnZpY2Ugbm90IHJlZ2lzdGVyZWQ6ICR7bmFtZX1gLFxuICAgICAgICBhZGRpdGlvbmFsRGF0YTogeyBzZXJ2aWNlTmFtZTogbmFtZSB9XG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgU2VydmljZSBub3QgcmVnaXN0ZXJlZDogJHtuYW1lfWApO1xuICAgIH1cblxuICAgIGlmIChzZXJ2aWNlLnNpbmdsZXRvbikge1xuICAgICAgaWYgKCFzZXJ2aWNlLmluc3RhbmNlKSB7XG4gICAgICAgIHNlcnZpY2UuaW5zdGFuY2UgPSBzZXJ2aWNlLmZhY3RvcnkoKTtcbiAgICAgICAgLy8gRklYOiBETUNQLVNFQy0wMDYgLSBBdWRpdCBzaW5nbGV0b24gaW5zdGFudGlhdGlvblxuICAgICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgICAgdHlwZTogJ0VMRU1FTlRfQ1JFQVRFRCcsXG4gICAgICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgICAgIHNvdXJjZTogJ0RvbGxob3VzZUNvbnRhaW5lci5yZXNvbHZlJyxcbiAgICAgICAgICBkZXRhaWxzOiBgU2luZ2xldG9uIGluc3RhbnRpYXRlZDogJHtuYW1lfWAsXG4gICAgICAgICAgYWRkaXRpb25hbERhdGE6IHsgc2VydmljZU5hbWU6IG5hbWUgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzZXJ2aWNlLmluc3RhbmNlIGFzIFQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlcnZpY2UuZmFjdG9yeSgpIGFzIFQ7XG4gIH1cblxuICBwcml2YXRlIHJlZ2lzdGVyU2VydmljZXMoKTogdm9pZCB7XG5cblxuICAgIC8vIElzc3VlICM3MDY6IFN0YXJ0dXAgdGltaW5nIGluc3RydW1lbnRhdGlvblxuICAgIHRoaXMucmVnaXN0ZXIoJ1N0YXJ0dXBUaW1lcicsICgpID0+IG5ldyBTdGFydHVwVGltZXIoKSk7XG5cbiAgICAvLyBDT1JFICYgQ0FDSElOR1xuICAgIHRoaXMucmVnaXN0ZXIoJ0NhY2hlTWVtb3J5QnVkZ2V0JywgKCkgPT4gbmV3IENhY2hlTWVtb3J5QnVkZ2V0KHtcbiAgICAgIGdsb2JhbExpbWl0Qnl0ZXM6IGdldFZhbGlkYXRlZEdsb2JhbENhY2hlTWVtb3J5Qnl0ZXMoKSxcbiAgICB9KSk7XG4gICAgdGhpcy5yZWdpc3RlcignQVBJQ2FjaGUnLCAoKSA9PiBuZXcgQVBJQ2FjaGUoKSk7XG4gICAgdGhpcy5yZWdpc3RlcignQ29sbGVjdGlvbkNhY2hlJywgKCkgPT4gbmV3IENvbGxlY3Rpb25DYWNoZSh0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpLCB1bmRlZmluZWQpKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdSYXRlTGltaXRUcmFja2VyJywgKCkgPT4gbmV3IE1hcDxzdHJpbmcsIG51bWJlcltdPigpKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdGaWxlTG9ja01hbmFnZXInLCAoKSA9PiBuZXcgRmlsZUxvY2tNYW5hZ2VyKCkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScsICgpID0+IG5ldyBGaWxlT3BlcmF0aW9uc1NlcnZpY2UodGhpcy5yZXNvbHZlKCdGaWxlTG9ja01hbmFnZXInKSkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0NvbmZpZ01hbmFnZXInLCAoKSA9PiB7XG4gICAgICByZXR1cm4gbmV3IENvbmZpZ01hbmFnZXIodGhpcy5yZXNvbHZlKCdGaWxlT3BlcmF0aW9uc1NlcnZpY2UnKSwgb3MpO1xuICAgIH0pO1xuICAgIC8vIElzc3VlICM1MTogR2VuZXJpYyByZXRlbnRpb24gcG9saWN5IHNlcnZpY2Ugd2l0aCBzdHJhdGVneSBwYXR0ZXJuXG4gICAgdGhpcy5yZWdpc3RlcignUmV0ZW50aW9uUG9saWN5U2VydmljZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHNlcnZpY2UgPSBuZXcgUmV0ZW50aW9uUG9saWN5U2VydmljZSh0aGlzLnJlc29sdmUoJ0NvbmZpZ01hbmFnZXInKSk7XG4gICAgICAvLyBSZWdpc3RlciBtZW1vcnkgcmV0ZW50aW9uIHN0cmF0ZWd5IChmaXJzdCBvZiBwb3RlbnRpYWxseSA1MCsgZWxlbWVudCB0eXBlcylcbiAgICAgIHNlcnZpY2UucmVnaXN0ZXJTdHJhdGVneShuZXcgTWVtb3J5UmV0ZW50aW9uU3RyYXRlZ3koKSk7XG4gICAgICByZXR1cm4gc2VydmljZTtcbiAgICB9KTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdJbmRleENvbmZpZ01hbmFnZXInLCAoKSA9PiBuZXcgSW5kZXhDb25maWdNYW5hZ2VyKCkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0luZGljYXRvckNvbmZpZycsICgpID0+IGxvYWRJbmRpY2F0b3JDb25maWcoKSk7XG4gICAgdGhpcy5yZWdpc3RlcignU3RhdGVDaGFuZ2VOb3RpZmllcicsICgpID0+IG5ldyBTdGF0ZUNoYW5nZU5vdGlmaWVyKCkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0dpdEh1YlJhdGVMaW1pdGVyJywgKCkgPT4gbmV3IEdpdEh1YlJhdGVMaW1pdGVyKFxuICAgICAgdGhpcy5yZXNvbHZlKCdUb2tlbk1hbmFnZXInKVxuICAgICkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0VsZW1lbnRFdmVudERpc3BhdGNoZXInLCAoKSA9PiBFbGVtZW50RXZlbnREaXNwYXRjaGVyLmdldFNoYXJlZERpc3BhdGNoZXIoKSk7XG4gICAgdGhpcy5yZWdpc3RlcignTUNQTG9nZ2VyJywgKCkgPT4gbG9nZ2VyKTtcblxuICAgIHRoaXMucmVnaXN0ZXIoJ1BlcnNvbmFJbXBvcnRlcicsICgpID0+IHtcbiAgICAgIGNvbnN0IHBvcnRmb2xpb01hbmFnZXIgPSB0aGlzLnJlc29sdmU8UG9ydGZvbGlvTWFuYWdlcj4oJ1BvcnRmb2xpb01hbmFnZXInKTtcbiAgICAgIGNvbnN0IHBlcnNvbmFzRGlyID0gcG9ydGZvbGlvTWFuYWdlci5nZXRFbGVtZW50RGlyKEVsZW1lbnRUeXBlLlBFUlNPTkEpO1xuICAgICAgLy8gVGhpcyBpcyBhIGJpdCBvZiBhIGhhY2sgdG8gYnJlYWsgdGhlIGNpcmN1bGFyIGRlcGVuZGVuY3kuIFdlIHJlc29sdmUgUGVyc29uYU1hbmFnZXIgaW5zaWRlIHRoZSBwcm92aWRlciBmdW5jdGlvbi5cbiAgICAgIGNvbnN0IGN1cnJlbnRVc2VyUHJvdmlkZXIgPSAoKSA9PiB0aGlzLnJlc29sdmU8UGVyc29uYU1hbmFnZXI+KCdQZXJzb25hTWFuYWdlcicpLmdldEN1cnJlbnRVc2VyRm9yQXR0cmlidXRpb24oKTtcbiAgICAgIHJldHVybiBuZXcgUGVyc29uYUltcG9ydGVyKFxuICAgICAgICBwZXJzb25hc0RpcixcbiAgICAgICAgY3VycmVudFVzZXJQcm92aWRlcixcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgLy8gR0lUSFVCICYgQ09MTEVDVElPTlxuICAgIHRoaXMucmVnaXN0ZXIoJ0dpdEh1YkNsaWVudCcsICgpID0+IG5ldyBHaXRIdWJDbGllbnQoXG4gICAgICB0aGlzLnJlc29sdmUoJ0FQSUNhY2hlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1JhdGVMaW1pdFRyYWNrZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnVG9rZW5NYW5hZ2VyJylcbiAgICApKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdHaXRIdWJBdXRoTWFuYWdlcicsICgpID0+IG5ldyBHaXRIdWJBdXRoTWFuYWdlcihcbiAgICAgIHRoaXMucmVzb2x2ZSgnQVBJQ2FjaGUnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnQ29uZmlnTWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdUb2tlbk1hbmFnZXInKVxuICAgICkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0NvbGxlY3Rpb25JbmRleE1hbmFnZXInLCAoKSA9PiBuZXcgQ29sbGVjdGlvbkluZGV4TWFuYWdlcih7XG4gICAgICBmaWxlT3BlcmF0aW9uczogdGhpcy5yZXNvbHZlKCdGaWxlT3BlcmF0aW9uc1NlcnZpY2UnKVxuICAgIH0pKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdDb2xsZWN0aW9uQnJvd3NlcicsICgpID0+IG5ldyBDb2xsZWN0aW9uQnJvd3Nlcih0aGlzLnJlc29sdmUoJ0dpdEh1YkNsaWVudCcpLCB0aGlzLnJlc29sdmUoJ0NvbGxlY3Rpb25DYWNoZScpLCB0aGlzLnJlc29sdmUoJ0NvbGxlY3Rpb25JbmRleE1hbmFnZXInKSkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0NvbGxlY3Rpb25TZWFyY2gnLCAoKSA9PiBuZXcgQ29sbGVjdGlvblNlYXJjaChcbiAgICAgIHRoaXMucmVzb2x2ZSgnR2l0SHViQ2xpZW50JyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0NvbGxlY3Rpb25DYWNoZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdDb2xsZWN0aW9uSW5kZXhDYWNoZScpXG4gICAgKSk7XG4gICAgdGhpcy5yZWdpc3RlcignUGVyc29uYURldGFpbHMnLCAoKSA9PiBuZXcgUGVyc29uYURldGFpbHModGhpcy5yZXNvbHZlKCdHaXRIdWJDbGllbnQnKSkpO1xuXG4gICAgLy8gUE9SVEZPTElPICYgTUFOQUdFUlNcbiAgICB0aGlzLnJlZ2lzdGVyKCdQb3J0Zm9saW9NYW5hZ2VyJywgKCkgPT4gbmV3IFBvcnRmb2xpb01hbmFnZXIoXG4gICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpLFxuICAgICAgdW5kZWZpbmVkXG4gICAgKSk7XG4gICAgdGhpcy5yZWdpc3RlcignUGVyc29uYU1hbmFnZXInLCAoKSA9PiBuZXcgUGVyc29uYU1hbmFnZXIoXG4gICAgICB0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb01hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnSW5kaWNhdG9yQ29uZmlnJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVMb2NrTWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdGaWxlT3BlcmF0aW9uc1NlcnZpY2UnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnVmFsaWRhdGlvblJlZ2lzdHJ5JyksXG4gICAgICB0aGlzLnJlc29sdmUoJ01ldGFkYXRhU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdQZXJzb25hSW1wb3J0ZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnU3RhdGVDaGFuZ2VOb3RpZmllcicpLFxuICAgICAge1xuICAgICAgICBldmVudERpc3BhdGNoZXI6IHRoaXMucmVzb2x2ZSgnRWxlbWVudEV2ZW50RGlzcGF0Y2hlcicpLFxuICAgICAgICBlbmFibGVGaWxlV2F0Y2hlcjogdHJ1ZSxcbiAgICAgICAgYXV0b1JlbG9hZE9uRXh0ZXJuYWxDaGFuZ2U6IHRydWUsXG4gICAgICAgIGZpbGVXYXRjaFNlcnZpY2U6IHRoaXMucmVzb2x2ZSgnRmlsZVdhdGNoU2VydmljZScpLFxuICAgICAgICBtZW1vcnlCdWRnZXQ6IHRoaXMucmVzb2x2ZSgnQ2FjaGVNZW1vcnlCdWRnZXQnKSxcbiAgICAgICAgYmFja3VwU2VydmljZTogdGhpcy5yZXNvbHZlKCdCYWNrdXBTZXJ2aWNlJylcbiAgICAgIH1cbiAgICApKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdJbml0aWFsaXphdGlvblNlcnZpY2UnLCAoKSA9PiBuZXcgSW5pdGlhbGl6YXRpb25TZXJ2aWNlKFxuICAgICAgdGhpcy5yZXNvbHZlKCdQZXJzb25hTWFuYWdlcicpXG4gICAgKSk7XG4gICAgdGhpcy5yZWdpc3RlcignUGVyc29uYUluZGljYXRvclNlcnZpY2UnLCAoKSA9PiBuZXcgUGVyc29uYUluZGljYXRvclNlcnZpY2UoXG4gICAgICB0aGlzLnJlc29sdmUoJ1BlcnNvbmFNYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0luZGljYXRvckNvbmZpZycpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdTdGF0ZUNoYW5nZU5vdGlmaWVyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0VsZW1lbnRFdmVudERpc3BhdGNoZXInKVxuICAgICkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ01pZ3JhdGlvbk1hbmFnZXInLCAoKSA9PiBuZXcgTWlncmF0aW9uTWFuYWdlcih0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb01hbmFnZXInKSwgdGhpcy5yZXNvbHZlKCdGaWxlTG9ja01hbmFnZXInKSwgdGhpcy5yZXNvbHZlKCdGaWxlT3BlcmF0aW9uc1NlcnZpY2UnKSkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0VsZW1lbnRJbnN0YWxsZXInLCAoKSA9PiBuZXcgRWxlbWVudEluc3RhbGxlcih0aGlzLnJlc29sdmUoJ0dpdEh1YkNsaWVudCcpLCB7XG4gICAgICBwb3J0Zm9saW9NYW5hZ2VyOiB0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb01hbmFnZXInKSxcbiAgICAgIHVuaWZpZWRJbmRleE1hbmFnZXI6IHRoaXMucmVzb2x2ZSgnVW5pZmllZEluZGV4TWFuYWdlcicpLFxuICAgICAgZmlsZU9wZXJhdGlvbnM6IHRoaXMucmVzb2x2ZSgnRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJylcbiAgICB9KSk7XG4gICAgdGhpcy5yZWdpc3RlcignUG9ydGZvbGlvUmVwb01hbmFnZXInLCAoKSA9PiBuZXcgUG9ydGZvbGlvUmVwb01hbmFnZXIoXG4gICAgICB0aGlzLnJlc29sdmUoJ1Rva2VuTWFuYWdlcicpLFxuICAgICAgZ2V0UG9ydGZvbGlvUmVwb3NpdG9yeU5hbWUoKVxuICAgICkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0dpdEh1YlBvcnRmb2xpb0luZGV4ZXInLCAoKSA9PiBuZXcgR2l0SHViUG9ydGZvbGlvSW5kZXhlcihcbiAgICAgIHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvUmVwb01hbmFnZXInKVxuICAgICkpO1xuICAgIFxuICAgIC8vIFNFUlZJQ0VTXG4gICAgdGhpcy5yZWdpc3RlcignU2VyaWFsaXphdGlvblNlcnZpY2UnLCAoKSA9PiBuZXcgU2VyaWFsaXphdGlvblNlcnZpY2UoKSk7XG4gICAgdGhpcy5yZWdpc3RlcignTWV0YWRhdGFTZXJ2aWNlJywgKCkgPT4gbmV3IE1ldGFkYXRhU2VydmljZSgpKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdUcmlnZ2VyVmFsaWRhdGlvblNlcnZpY2UnLCAoKSA9PiBuZXcgVHJpZ2dlclZhbGlkYXRpb25TZXJ2aWNlKCkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ1ZhbGlkYXRpb25TZXJ2aWNlJywgKCkgPT4gbmV3IFZhbGlkYXRpb25TZXJ2aWNlKCkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0ZpbGVXYXRjaFNlcnZpY2UnLCAoKSA9PiBuZXcgRmlsZVdhdGNoU2VydmljZSgpKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdWYWxpZGF0aW9uUmVnaXN0cnknLCAoKSA9PiBuZXcgVmFsaWRhdGlvblJlZ2lzdHJ5KFxuICAgICAgdGhpcy5yZXNvbHZlKCdWYWxpZGF0aW9uU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdUcmlnZ2VyVmFsaWRhdGlvblNlcnZpY2UnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnTWV0YWRhdGFTZXJ2aWNlJylcbiAgICApKTtcblxuICAgIC8vIExPR0dJTkdcbiAgICB0aGlzLnJlZ2lzdGVyKCdMb2dNYW5hZ2VyJywgKCkgPT4ge1xuICAgICAgY29uc3QgY29uZmlnID0gYnVpbGRMb2dNYW5hZ2VyQ29uZmlnKGVudik7XG4gICAgICBjb25zdCBtYW5hZ2VyID0gbmV3IExvZ01hbmFnZXIoY29uZmlnKTtcblxuICAgICAgLy8gUGhhc2UgMjogRmlsZUxvZ1NpbmtcbiAgICAgIGNvbnN0IGZvcm1hdHRlciA9IGNvbmZpZy5sb2dGb3JtYXQgPT09ICdqc29ubCdcbiAgICAgICAgPyBuZXcgSnNvbmxGb3JtYXR0ZXIoKVxuICAgICAgICA6IG5ldyBQbGFpblRleHRGb3JtYXR0ZXIoKTtcbiAgICAgIGNvbnN0IGZpbGVTaW5rID0gbmV3IEZpbGVMb2dTaW5rKHtcbiAgICAgICAgbG9nRGlyOiBjb25maWcubG9nRGlyLFxuICAgICAgICBmb3JtYXR0ZXIsXG4gICAgICAgIG1heEZpbGVTaXplOiBjb25maWcuZmlsZU1heFNpemUsXG4gICAgICAgIHJldGVudGlvbkRheXM6IGNvbmZpZy5yZXRlbnRpb25EYXlzLFxuICAgICAgICBzZWN1cml0eVJldGVudGlvbkRheXM6IGNvbmZpZy5zZWN1cml0eVJldGVudGlvbkRheXMsXG4gICAgICAgIG1heERpclNpemVCeXRlczogY29uZmlnLm1heERpclNpemVCeXRlcyxcbiAgICAgICAgbWF4RmlsZXNQZXJDYXRlZ29yeTogY29uZmlnLm1heEZpbGVzUGVyQ2F0ZWdvcnksXG4gICAgICB9KTtcbiAgICAgIG1hbmFnZXIucmVnaXN0ZXJTaW5rKGZpbGVTaW5rKTtcbiAgICAgIGZpbGVTaW5rLnN0YXJ0Q2xlYW51cFRpbWVyKCk7XG5cbiAgICAgIC8vIFBoYXNlIDM6IE1lbW9yeUxvZ1NpbmtcbiAgICAgIGNvbnN0IG1lbW9yeVNpbmsgPSBuZXcgTWVtb3J5TG9nU2luayh7XG4gICAgICAgIGFwcENhcGFjaXR5OiBjb25maWcubWVtb3J5QXBwQ2FwYWNpdHksXG4gICAgICAgIHNlY3VyaXR5Q2FwYWNpdHk6IGNvbmZpZy5tZW1vcnlTZWN1cml0eUNhcGFjaXR5LFxuICAgICAgICBwZXJmQ2FwYWNpdHk6IGNvbmZpZy5tZW1vcnlQZXJmQ2FwYWNpdHksXG4gICAgICAgIHRlbGVtZXRyeUNhcGFjaXR5OiBjb25maWcubWVtb3J5VGVsZW1ldHJ5Q2FwYWNpdHksXG4gICAgICB9KTtcbiAgICAgIG1hbmFnZXIucmVnaXN0ZXJTaW5rKG1lbW9yeVNpbmspO1xuXG4gICAgICB0aGlzLnJlZ2lzdGVyKCdNZW1vcnlMb2dTaW5rJywgKCkgPT4gbWVtb3J5U2luayk7XG5cbiAgICAgIC8vIFN0YXJ0dXAgbWFya2VyIOKAlCBmaXJzdCBlbnRyeSBpbiBldmVyeSBzZXJ2ZXIgc2Vzc2lvblxuICAgICAgbWFuYWdlci5sb2coe1xuICAgICAgICBpZDogbWFuYWdlci5nZW5lcmF0ZUlkKCksXG4gICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICBjYXRlZ29yeTogJ2FwcGxpY2F0aW9uJyxcbiAgICAgICAgbGV2ZWw6ICdpbmZvJyxcbiAgICAgICAgc291cmNlOiAnRG9sbGhvdXNlTUNQJyxcbiAgICAgICAgbWVzc2FnZTogYERvbGxob3VzZU1DUCB2JHtWRVJTSU9OfSBzdGFydGluZ2AsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICB2ZXJzaW9uOiBWRVJTSU9OLFxuICAgICAgICAgIGxvZ0xldmVsOiBjb25maWcubG9nTGV2ZWwsXG4gICAgICAgICAgbG9nRm9ybWF0OiBjb25maWcubG9nRm9ybWF0LFxuICAgICAgICAgIGNvbnNvbGU6IGVudi5ET0xMSE9VU0VfV0VCX0NPTlNPTEVcbiAgICAgICAgICAgID8gYGh0dHA6Ly9kb2xsaG91c2UubG9jYWxob3N0OiR7ZW52LkRPTExIT1VTRV9XRUJfQ09OU09MRV9QT1JUfWBcbiAgICAgICAgICAgIDogJ2Rpc2FibGVkJyxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gbWFuYWdlcjtcbiAgICB9KTtcblxuICAgIC8vIE1FVFJJQ1MgQ09MTEVDVElPTlxuICAgIC8vIE1lbW9yeU1ldHJpY3NTaW5rIGlzIHJlZ2lzdGVyZWQgc2VwYXJhdGVseSAobm90IGFzIGEgc2lkZSBlZmZlY3QgaW5zaWRlXG4gICAgLy8gTWV0cmljc01hbmFnZXIncyBmYWN0b3J5KSBzbyBpdCdzIGF2YWlsYWJsZSBpbiB0aGUgY29udGFpbmVyIHJlZ2FyZGxlc3NcbiAgICAvLyBvZiBNZXRyaWNzTWFuYWdlciByZXNvbHV0aW9uIG9yZGVyLlxuICAgIGNvbnN0IG1ldHJpY3NDb25maWcgPSBidWlsZE1ldHJpY3NNYW5hZ2VyQ29uZmlnKGVudik7XG4gICAgaWYgKG1ldHJpY3NDb25maWcuZW5hYmxlZCkge1xuICAgICAgY29uc3QgbWVtb3J5TWV0cmljc1NpbmsgPSBuZXcgTWVtb3J5TWV0cmljc1NpbmsobWV0cmljc0NvbmZpZy5tZW1vcnlTbmFwc2hvdENhcGFjaXR5KTtcbiAgICAgIHRoaXMucmVnaXN0ZXIoJ01lbW9yeU1ldHJpY3NTaW5rJywgKCkgPT4gbWVtb3J5TWV0cmljc1NpbmspO1xuXG4gICAgICB0aGlzLnJlZ2lzdGVyKCdNZXRyaWNzTWFuYWdlcicsICgpID0+IHtcbiAgICAgICAgY29uc3QgbWFuYWdlciA9IG5ldyBNZXRyaWNzTWFuYWdlcihtZXRyaWNzQ29uZmlnLCBsb2dnZXIpO1xuICAgICAgICBtYW5hZ2VyLnJlZ2lzdGVyU2luayhtZW1vcnlNZXRyaWNzU2luayk7XG4gICAgICAgIHJldHVybiBtYW5hZ2VyO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gVEVMRU1FVFJZXG4gICAgdGhpcy5yZWdpc3RlcignT3BlcmF0aW9uYWxUZWxlbWV0cnknLCAoKSA9PiBuZXcgT3BlcmF0aW9uYWxUZWxlbWV0cnkoXG4gICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpXG4gICAgKSk7XG5cbiAgICAvLyBCQUNLVVAgU0VSVklDRSAoSXNzdWUgIzY1OTogVW5pdmVyc2FsIGJhY2t1cCBmb3IgYWxsIGVsZW1lbnQgdHlwZXMpXG4gICAgdGhpcy5yZWdpc3RlcignQmFja3VwU2VydmljZScsICgpID0+IG5ldyBCYWNrdXBTZXJ2aWNlKFxuICAgICAgdGhpcy5yZXNvbHZlKCdGaWxlT3BlcmF0aW9uc1NlcnZpY2UnKSxcbiAgICAgIHtcbiAgICAgICAgYmFja3VwUm9vdERpcjogcGF0aC5qb2luKHRoaXMucmVzb2x2ZTxQb3J0Zm9saW9NYW5hZ2VyPignUG9ydGZvbGlvTWFuYWdlcicpLmdldEJhc2VEaXIoKSwgJy5iYWNrdXBzJyksXG4gICAgICAgIG1heEJhY2t1cHNQZXJFbGVtZW50OiBnZXRWYWxpZGF0ZWRNYXhCYWNrdXBzUGVyRWxlbWVudCgpLFxuICAgICAgICBlbmFibGVkOiBTVE9SQUdFX0xBWUVSX0NPTkZJRy5CQUNLVVBTX0VOQUJMRUQsXG4gICAgICB9XG4gICAgKSk7XG5cbiAgICAvLyBQT0xJQ1kgRVhQT1JUIFNFUlZJQ0UgKElzc3VlICM3NjI6IEV4cG9ydCBwb2xpY2llcyB0byBicmlkZ2UpXG4gICAgdGhpcy5yZWdpc3RlcignUG9saWN5RXhwb3J0U2VydmljZScsICgpID0+IG5ldyBQb2xpY3lFeHBvcnRTZXJ2aWNlKHtcbiAgICAgIGdldEFjdGl2ZUVsZW1lbnRzRm9yUG9saWN5OiBhc3luYyAoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgaGFuZGxlciA9IHRoaXMucmVzb2x2ZTxFbGVtZW50Q1JVREhhbmRsZXI+KCdFbGVtZW50Q1JVREhhbmRsZXInKTtcbiAgICAgICAgICByZXR1cm4gaGFuZGxlci5nZXRBY3RpdmVFbGVtZW50c0ZvclBvbGljeSgpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBnZXRTZXJ2ZXJWZXJzaW9uOiAoKSA9PiBQQUNLQUdFX1ZFUlNJT04sXG4gICAgfSkpO1xuXG4gICAgLy8gRUxFTUVOVCBNQU5BR0VSU1xuICAgIHRoaXMucmVnaXN0ZXIoJ1NraWxsTWFuYWdlcicsICgpID0+IG5ldyBTa2lsbE1hbmFnZXIoXG4gICAgICB0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb01hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZUxvY2tNYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdWYWxpZGF0aW9uUmVnaXN0cnknKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnU2VyaWFsaXphdGlvblNlcnZpY2UnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnTWV0YWRhdGFTZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVXYXRjaFNlcnZpY2UnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnQ2FjaGVNZW1vcnlCdWRnZXQnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnQmFja3VwU2VydmljZScpXG4gICAgKSk7XG4gICAgdGhpcy5yZWdpc3RlcignVGVtcGxhdGVNYW5hZ2VyJywgKCkgPT4gbmV3IFRlbXBsYXRlTWFuYWdlcihcbiAgICAgIHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvTWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdGaWxlTG9ja01hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1ZhbGlkYXRpb25SZWdpc3RyeScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdTZXJpYWxpemF0aW9uU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdNZXRhZGF0YVNlcnZpY2UnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZVdhdGNoU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdDYWNoZU1lbW9yeUJ1ZGdldCcpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdCYWNrdXBTZXJ2aWNlJylcbiAgICApKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdUZW1wbGF0ZVJlbmRlcmVyJywgKCkgPT4gbmV3IFRlbXBsYXRlUmVuZGVyZXIodGhpcy5yZXNvbHZlKCdUZW1wbGF0ZU1hbmFnZXInKSkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0FnZW50TWFuYWdlcicsICgpID0+IG5ldyBBZ2VudE1hbmFnZXIoXG4gICAgICB0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb01hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZUxvY2tNYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmU8UG9ydGZvbGlvTWFuYWdlcj4oJ1BvcnRmb2xpb01hbmFnZXInKS5nZXRCYXNlRGlyKCksXG4gICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdWYWxpZGF0aW9uUmVnaXN0cnknKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnU2VyaWFsaXphdGlvblNlcnZpY2UnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnTWV0YWRhdGFTZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVXYXRjaFNlcnZpY2UnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnQ2FjaGVNZW1vcnlCdWRnZXQnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnQmFja3VwU2VydmljZScpXG4gICAgKSk7XG4gICAgdGhpcy5yZWdpc3RlcignTWVtb3J5TWFuYWdlcicsICgpID0+IG5ldyBNZW1vcnlNYW5hZ2VyKFxuICAgICAgdGhpcy5yZXNvbHZlKCdQb3J0Zm9saW9NYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVMb2NrTWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdGaWxlT3BlcmF0aW9uc1NlcnZpY2UnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnVmFsaWRhdGlvblJlZ2lzdHJ5JyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1NlcmlhbGl6YXRpb25TZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ01ldGFkYXRhU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdGaWxlV2F0Y2hTZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0NhY2hlTWVtb3J5QnVkZ2V0JyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0JhY2t1cFNlcnZpY2UnKVxuICAgICkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0Vuc2VtYmxlTWFuYWdlcicsICgpID0+IG5ldyBFbnNlbWJsZU1hbmFnZXIoXG4gICAgICB0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb01hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZUxvY2tNYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdWYWxpZGF0aW9uUmVnaXN0cnknKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnU2VyaWFsaXphdGlvblNlcnZpY2UnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnTWV0YWRhdGFTZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVXYXRjaFNlcnZpY2UnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnQ2FjaGVNZW1vcnlCdWRnZXQnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnQmFja3VwU2VydmljZScpXG4gICAgKSk7XG4gICAgTWVtb3J5LmNvbmZpZ3VyZU1lbW9yeU1hbmFnZXJSZXNvbHZlcigoKSA9PiB0aGlzLnJlc29sdmUoJ01lbW9yeU1hbmFnZXInKSk7XG4gICAgLy8gSXNzdWUgIzUxOiBDb25maWd1cmUgcmV0ZW50aW9uIHBvbGljeSByZXNvbHZlciBmb3IgTWVtb3J5IGNsYXNzXG4gICAgTWVtb3J5LmNvbmZpZ3VyZVJldGVudGlvblBvbGljeVJlc29sdmVyKCgpID0+IHRoaXMucmVzb2x2ZSgnUmV0ZW50aW9uUG9saWN5U2VydmljZScpKTtcbiAgICAvLyBJc3N1ZSAjMTExOiBDb25maWd1cmUgZWxlbWVudCBtYW5hZ2VyIHJlc29sdmVyIGZvciBBZ2VudE1hbmFnZXIgKGVsZW1lbnQtYWdub3N0aWMgYWN0aXZhdGlvbilcbiAgICBBZ2VudE1hbmFnZXIuc2V0RWxlbWVudE1hbmFnZXJSZXNvbHZlcigobWFuYWdlck5hbWU6IHN0cmluZykgPT4gdGhpcy5yZXNvbHZlKG1hbmFnZXJOYW1lKSk7XG4gICAgLy8gSXNzdWUgIzQwMjogQ29uZmlndXJlIERhbmdlclpvbmVFbmZvcmNlciByZXNvbHZlciBmb3IgQWdlbnRNYW5hZ2VyIChhdXRvbm9teSBldmFsdWF0aW9uKVxuICAgIEFnZW50TWFuYWdlci5zZXREYW5nZXJab25lRW5mb3JjZXJSZXNvbHZlcigoKSA9PiB0aGlzLnJlc29sdmUoJ0RhbmdlclpvbmVFbmZvcmNlcicpKTtcbiAgICAvLyBJc3N1ZSAjMTQyOiBDb25maWd1cmUgVmVyaWZpY2F0aW9uU3RvcmUgcmVzb2x2ZXIgZm9yIEFnZW50TWFuYWdlciAoZGFuZ2VyIHpvbmUgdmVyaWZpY2F0aW9uKVxuICAgIEFnZW50TWFuYWdlci5zZXRWZXJpZmljYXRpb25TdG9yZVJlc29sdmVyKCgpID0+IHRoaXMucmVzb2x2ZSgnVmVyaWZpY2F0aW9uU3RvcmUnKSk7XG5cbiAgICAvLyBRVUVSWSBTRVJWSUNFUyAoSXNzdWUgIzM4OiBQYWdpbmF0aW9uLCBmaWx0ZXJpbmcsIHNvcnRpbmcpXG4gICAgLy8gVGhlc2Ugc2VydmljZXMgYXJlIGVsZW1lbnQtYWdub3N0aWMgYW5kIGNhbiBiZSB1c2VkIHdpdGggYW55IGVsZW1lbnQgdHlwZVxuICAgIHRoaXMucmVnaXN0ZXIoJ1BhZ2luYXRpb25TZXJ2aWNlJywgKCkgPT4gbmV3IFBhZ2luYXRpb25TZXJ2aWNlKCkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0ZpbHRlclNlcnZpY2UnLCAoKSA9PiBuZXcgRmlsdGVyU2VydmljZSgpKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdTb3J0U2VydmljZScsICgpID0+IG5ldyBTb3J0U2VydmljZSgpKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdFbGVtZW50UXVlcnlTZXJ2aWNlJywgKCkgPT4gbmV3IEVsZW1lbnRRdWVyeVNlcnZpY2UoXG4gICAgICB0aGlzLnJlc29sdmU8UGFnaW5hdGlvblNlcnZpY2U+KCdQYWdpbmF0aW9uU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlPEZpbHRlclNlcnZpY2U+KCdGaWx0ZXJTZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmU8U29ydFNlcnZpY2U+KCdTb3J0U2VydmljZScpXG4gICAgKSk7XG5cbiAgICAvLyBDT05WRVJURVJTXG4gICAgdGhpcy5yZWdpc3RlcignQW50aHJvcGljVG9Eb2xsaG91c2VDb252ZXJ0ZXInLCAoKSA9PiBuZXcgQW50aHJvcGljVG9Eb2xsaG91c2VDb252ZXJ0ZXIoKSk7XG4gICAgdGhpcy5yZWdpc3RlcignRG9sbGhvdXNlVG9BbnRocm9waWNDb252ZXJ0ZXInLCAoKSA9PiBuZXcgRG9sbGhvdXNlVG9BbnRocm9waWNDb252ZXJ0ZXIoKSk7XG5cbiAgICAvLyBTRUNVUklUWSBTRVJWSUNFU1xuICAgIC8vIElzc3VlICM0MDI6IERhbmdlclpvbmVFbmZvcmNlciBhcyBESS1tYW5hZ2VkIHNpbmdsZXRvbiAocmVwbGFjZXMgbW9kdWxlLWxldmVsIHNpbmdsZXRvbilcbiAgICB0aGlzLnJlZ2lzdGVyKCdEYW5nZXJab25lRW5mb3JjZXInLCAoKSA9PiBuZXcgRGFuZ2VyWm9uZUVuZm9yY2VyKFxuICAgICAgdGhpcy5yZXNvbHZlKCdGaWxlT3BlcmF0aW9uc1NlcnZpY2UnKVxuICAgICkpO1xuICAgIC8vIElzc3VlICM1OTg6IEFjdGl2YXRpb25TdG9yZSBmb3IgcGVyLXNlc3Npb24gYWN0aXZhdGlvbiBwZXJzaXN0ZW5jZVxuICAgIHRoaXMucmVnaXN0ZXIoJ0FjdGl2YXRpb25TdG9yZScsICgpID0+IG5ldyBBY3RpdmF0aW9uU3RvcmUoXG4gICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpXG4gICAgKSk7XG4gICAgLy8gSXNzdWUgIzE0MjogVmVyaWZpY2F0aW9uU3RvcmUgZm9yIGRhbmdlciB6b25lIGNoYWxsZW5nZSBjb2RlcyAoc2VydmVyLXNpZGUpXG4gICAgdGhpcy5yZWdpc3RlcignVmVyaWZpY2F0aW9uU3RvcmUnLCAoKSA9PiBuZXcgVmVyaWZpY2F0aW9uU3RvcmUoKSk7XG4gICAgLy8gSXNzdWUgIzUyMjogTm9uLWJsb2NraW5nIE9TIGRpYWxvZyBub3RpZmllciBmb3IgdmVyaWZpY2F0aW9uIGNvZGVzXG4gICAgdGhpcy5yZWdpc3RlcignVmVyaWZpY2F0aW9uTm90aWZpZXInLCAoKSA9PiBuZXcgVmVyaWZpY2F0aW9uTm90aWZpZXIoKSk7XG4gICAgdGhpcy5yZWdpc3RlcignVG9rZW5NYW5hZ2VyJywgKCkgPT4gbmV3IFRva2VuTWFuYWdlcihcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJylcbiAgICApKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdQYXR0ZXJuRW5jcnlwdG9yJywgKCkgPT4gbmV3IFBhdHRlcm5FbmNyeXB0b3IoKSk7XG4gICAgdGhpcy5yZWdpc3RlcignQ29udGV4dFRyYWNrZXInLCAoKSA9PiBuZXcgQ29udGV4dFRyYWNrZXIoKSk7XG4gICAgdGhpcy5yZWdpc3RlcignUGF0dGVybkRlY3J5cHRvcicsICgpID0+IG5ldyBQYXR0ZXJuRGVjcnlwdG9yKFxuICAgICAgdGhpcy5yZXNvbHZlKCdQYXR0ZXJuRW5jcnlwdG9yJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0NvbnRleHRUcmFja2VyJylcbiAgICApKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdQYXR0ZXJuRXh0cmFjdG9yJywgKCkgPT4gbmV3IFBhdHRlcm5FeHRyYWN0b3IoXG4gICAgICB0aGlzLnJlc29sdmUoJ1BhdHRlcm5FbmNyeXB0b3InKVxuICAgICkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0JhY2tncm91bmRWYWxpZGF0b3InLCAoKSA9PiBuZXcgQmFja2dyb3VuZFZhbGlkYXRvcihcbiAgICAgIHRoaXMucmVzb2x2ZSgnUGF0dGVybkV4dHJhY3RvcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdNZW1vcnlNYW5hZ2VyJylcbiAgICApKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdTZWN1cml0eVRlbGVtZXRyeScsICgpID0+IG5ldyBTZWN1cml0eVRlbGVtZXRyeSgpKTtcbiAgICBDb250ZW50VmFsaWRhdG9yLmNvbmZpZ3VyZVRlbGVtZXRyeVJlc29sdmVyKCgpID0+IHRoaXMucmVzb2x2ZSgnU2VjdXJpdHlUZWxlbWV0cnknKSk7XG5cbiAgICAvLyBOTFAgJiBJTkRFWElOR1xuICAgIHRoaXMucmVnaXN0ZXIoJ05MUFNjb3JpbmdNYW5hZ2VyJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBpbmRleENvbmZpZ01hbmFnZXIgPSB0aGlzLnJlc29sdmU8SW5kZXhDb25maWdNYW5hZ2VyPignSW5kZXhDb25maWdNYW5hZ2VyJyk7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGluZGV4Q29uZmlnTWFuYWdlci5nZXRDb25maWcoKTtcbiAgICAgICAgcmV0dXJuIG5ldyBOTFBTY29yaW5nTWFuYWdlcih7XG4gICAgICAgICAgICBjYWNoZUV4cGlyeTogY29uZmlnLm5scC5jYWNoZUV4cGlyeU1pbnV0ZXMgKiA2MCAqIDEwMDAsXG4gICAgICAgICAgICBtaW5Ub2tlbkxlbmd0aDogY29uZmlnLm5scC5taW5Ub2tlbkxlbmd0aCxcbiAgICAgICAgICAgIGVudHJvcHlCYW5kczogY29uZmlnLm5scC5lbnRyb3B5QmFuZHMsXG4gICAgICAgICAgICBqYWNjYXJkVGhyZXNob2xkczogY29uZmlnLm5scC5qYWNjYXJkVGhyZXNob2xkc1xuICAgICAgICB9LCBpbmRleENvbmZpZ01hbmFnZXIpO1xuICAgIH0pO1xuICAgIHRoaXMucmVnaXN0ZXIoJ1ZlcmJUcmlnZ2VyTWFuYWdlcicsICgpID0+IHtcbiAgICAgICAgY29uc3QgaW5kZXhDb25maWdNYW5hZ2VyID0gdGhpcy5yZXNvbHZlPEluZGV4Q29uZmlnTWFuYWdlcj4oJ0luZGV4Q29uZmlnTWFuYWdlcicpO1xuICAgICAgICBjb25zdCBjb25maWcgPSBpbmRleENvbmZpZ01hbmFnZXIuZ2V0Q29uZmlnKCk7XG4gICAgICAgIHJldHVybiBuZXcgVmVyYlRyaWdnZXJNYW5hZ2VyKHtcbiAgICAgICAgICAgIGNvbmZpZGVuY2VUaHJlc2hvbGQ6IGNvbmZpZy52ZXJicy5jb25maWRlbmNlVGhyZXNob2xkLFxuICAgICAgICAgICAgbWF4RWxlbWVudHNQZXJWZXJiOiBjb25maWcudmVyYnMubWF4RWxlbWVudHNQZXJWZXJiLFxuICAgICAgICAgICAgaW5jbHVkZVN5bm9ueW1zOiBjb25maWcudmVyYnMuaW5jbHVkZVN5bm9ueW1zXG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIHRoaXMucmVnaXN0ZXIoJ1JlbGF0aW9uc2hpcE1hbmFnZXInLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGluZGV4Q29uZmlnTWFuYWdlciA9IHRoaXMucmVzb2x2ZTxJbmRleENvbmZpZ01hbmFnZXI+KCdJbmRleENvbmZpZ01hbmFnZXInKTtcbiAgICAgICAgY29uc3QgY29uZmlnID0gaW5kZXhDb25maWdNYW5hZ2VyLmdldENvbmZpZygpO1xuICAgICAgICByZXR1cm4gbmV3IFJlbGF0aW9uc2hpcE1hbmFnZXIoe1xuICAgICAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgICAgICAgbWluQ29uZmlkZW5jZTogY29uZmlnLnBlcmZvcm1hbmNlLnNpbWlsYXJpdHlUaHJlc2hvbGQsXG4gICAgICAgICAgICAgICAgZW5hYmxlQXV0b0Rpc2NvdmVyeTogdHJ1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGluZGV4Q29uZmlnTWFuYWdlcixcbiAgICAgICAgICAgIHZlcmJUcmlnZ2VyTWFuYWdlcjogdGhpcy5yZXNvbHZlKCdWZXJiVHJpZ2dlck1hbmFnZXInKSxcbiAgICAgICAgICAgIG5scFNjb3Jpbmc6IHRoaXMucmVzb2x2ZSgnTkxQU2NvcmluZ01hbmFnZXInKSxcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgdGhpcy5yZWdpc3RlcignUG9ydGZvbGlvSW5kZXhNYW5hZ2VyJywgKCkgPT4gbmV3IFBvcnRmb2xpb0luZGV4TWFuYWdlcih0aGlzLnJlc29sdmUoJ0luZGV4Q29uZmlnTWFuYWdlcicpLCB0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb01hbmFnZXInKSwgdGhpcy5yZXNvbHZlKCdGaWxlT3BlcmF0aW9uc1NlcnZpY2UnKSkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0VuaGFuY2VkSW5kZXhIZWxwZXJzJywgKCkgPT4gbmV3IERlZmF1bHRFbmhhbmNlZEluZGV4SGVscGVycyhcbiAgICAgIG5ldyBFbGVtZW50RGVmaW5pdGlvbkJ1aWxkZXIoKSxcbiAgICAgIG5ldyBTZW1hbnRpY1JlbGF0aW9uc2hpcFNlcnZpY2Uoe1xuICAgICAgICBubHBTY29yaW5nOiB0aGlzLnJlc29sdmUoJ05MUFNjb3JpbmdNYW5hZ2VyJyksXG4gICAgICAgIHJlbGF0aW9uc2hpcE1hbmFnZXI6IHRoaXMucmVzb2x2ZSgnUmVsYXRpb25zaGlwTWFuYWdlcicpXG4gICAgICB9KSxcbiAgICAgIChjb250ZXh0KSA9PiBuZXcgQWN0aW9uVHJpZ2dlckV4dHJhY3Rvcihjb250ZXh0KSxcbiAgICAgIChvcHRpb25zKSA9PiB7XG4gICAgICAgIGNvbnN0IHRyYWNrZXIgPSBuZXcgVHJpZ2dlck1ldHJpY3NUcmFja2VyKG9wdGlvbnMpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRyYWNrZXIuYWRkTG9nTGlzdGVuZXIoZ2V0VHJpZ2dlck1ldHJpY3NMb2dMaXN0ZW5lcihcbiAgICAgICAgICAgIHRoaXMucmVzb2x2ZSgnTG9nTWFuYWdlcicpLFxuICAgICAgICAgICAgdGhpcy5yZXNvbHZlKCdDb250ZXh0VHJhY2tlcicpXG4gICAgICAgICAgKSk7XG4gICAgICAgIH0gY2F0Y2ggeyAvKiBMb2dNYW5hZ2VyIG5vdCB5ZXQgcmVnaXN0ZXJlZCAqLyB9XG4gICAgICAgIHJldHVybiB0cmFja2VyO1xuICAgICAgfVxuICAgICkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0VuaGFuY2VkSW5kZXhNYW5hZ2VyJywgKCkgPT4gbmV3IEVuaGFuY2VkSW5kZXhNYW5hZ2VyKFxuICAgICAgICB0aGlzLnJlc29sdmUoJ0luZGV4Q29uZmlnTWFuYWdlcicpLFxuICAgICAgICB0aGlzLnJlc29sdmUoJ0NvbmZpZ01hbmFnZXInKSxcbiAgICAgICAgdGhpcy5yZXNvbHZlKCdQb3J0Zm9saW9JbmRleE1hbmFnZXInKSxcbiAgICAgICAgdGhpcy5yZXNvbHZlKCdOTFBTY29yaW5nTWFuYWdlcicpLFxuICAgICAgICB0aGlzLnJlc29sdmUoJ1ZlcmJUcmlnZ2VyTWFuYWdlcicpLFxuICAgICAgICB0aGlzLnJlc29sdmUoJ1JlbGF0aW9uc2hpcE1hbmFnZXInKSxcbiAgICAgICAgdGhpcy5yZXNvbHZlKCdFbmhhbmNlZEluZGV4SGVscGVycycpLFxuICAgICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpXG4gICAgKSk7XG4gICAgdGhpcy5yZWdpc3RlcignQ29sbGVjdGlvbkluZGV4Q2FjaGUnLCAoKSA9PiBuZXcgQ29sbGVjdGlvbkluZGV4Q2FjaGUoXG4gICAgICAgIHRoaXMucmVzb2x2ZSgnR2l0SHViQ2xpZW50JyksXG4gICAgICAgIHByb2Nlc3MuY3dkKCksXG4gICAgICAgIHRoaXMucmVzb2x2ZSgnUGVyZm9ybWFuY2VNb25pdG9yJyksXG4gICAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJylcbiAgICApKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdVbmlmaWVkSW5kZXhNYW5hZ2VyJywgKCkgPT4gbmV3IFVuaWZpZWRJbmRleE1hbmFnZXIoe1xuICAgICAgICBwb3J0Zm9saW9JbmRleE1hbmFnZXI6IHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvSW5kZXhNYW5hZ2VyJyksXG4gICAgICAgIGdpdGh1YkluZGV4ZXI6IHRoaXMucmVzb2x2ZSgnR2l0SHViUG9ydGZvbGlvSW5kZXhlcicpLFxuICAgICAgICBjb2xsZWN0aW9uSW5kZXhDYWNoZTogdGhpcy5yZXNvbHZlKCdDb2xsZWN0aW9uSW5kZXhDYWNoZScpLFxuICAgICAgICBnaXRodWJDbGllbnQ6IHRoaXMucmVzb2x2ZSgnR2l0SHViQ2xpZW50JyksXG4gICAgICAgIGFwaUNhY2hlOiB0aGlzLnJlc29sdmUoJ0FQSUNhY2hlJyksXG4gICAgICAgIHJhdGVMaW1pdFRyYWNrZXI6IHRoaXMucmVzb2x2ZSgnUmF0ZUxpbWl0VHJhY2tlcicpLFxuICAgICAgICBwZXJmb3JtYW5jZU1vbml0b3I6IHRoaXMucmVzb2x2ZSgnUGVyZm9ybWFuY2VNb25pdG9yJyksXG4gICAgICAgIGZpbGVPcGVyYXRpb25zOiB0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpXG4gICAgfSkpO1xuXG4gICAgdGhpcy5yZWdpc3RlcignUG9ydGZvbGlvU3luY0NvbXBhcmVyJywgKCkgPT4gbmV3IFBvcnRmb2xpb1N5bmNDb21wYXJlcigpKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdQb3J0Zm9saW9Eb3dubG9hZGVyJywgKCkgPT4gbmV3IFBvcnRmb2xpb0Rvd25sb2FkZXIoKSk7XG5cbiAgICAvLyBTWU5DICYgVE9PTFNcbiAgICB0aGlzLnJlZ2lzdGVyKCdQb3J0Zm9saW9QdWxsSGFuZGxlcicsICgpID0+IG5ldyBQb3J0Zm9saW9QdWxsSGFuZGxlcih7XG4gICAgICAgIHBvcnRmb2xpb01hbmFnZXI6IHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvTWFuYWdlcicpLFxuICAgICAgICBpbmRleE1hbmFnZXI6IHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvSW5kZXhNYW5hZ2VyJyksXG4gICAgICAgIGdpdGh1YkluZGV4ZXI6IHRoaXMucmVzb2x2ZSgnR2l0SHViUG9ydGZvbGlvSW5kZXhlcicpLFxuICAgICAgICBwb3J0Zm9saW9SZXBvTWFuYWdlcjogdGhpcy5yZXNvbHZlKCdQb3J0Zm9saW9SZXBvTWFuYWdlcicpLFxuICAgICAgICBzeW5jQ29tcGFyZXI6IHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvU3luY0NvbXBhcmVyJyksXG4gICAgICAgIGRvd25sb2FkZXI6IHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvRG93bmxvYWRlcicpLFxuICAgICAgICBmaWxlT3BlcmF0aW9uczogdGhpcy5yZXNvbHZlKCdGaWxlT3BlcmF0aW9uc1NlcnZpY2UnKSxcbiAgICAgICAgdG9rZW5NYW5hZ2VyOiB0aGlzLnJlc29sdmUoJ1Rva2VuTWFuYWdlcicpLFxuICAgIH0pKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdTdWJtaXRUb1BvcnRmb2xpb1Rvb2wnLCAoKSA9PiBuZXcgU3VibWl0VG9Qb3J0Zm9saW9Ub29sKHRoaXMucmVzb2x2ZSgnQVBJQ2FjaGUnKSwge1xuICAgICAgICBhdXRoTWFuYWdlcjogdGhpcy5yZXNvbHZlKCdHaXRIdWJBdXRoTWFuYWdlcicpLFxuICAgICAgICBwb3J0Zm9saW9NYW5hZ2VyOiB0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb01hbmFnZXInKSxcbiAgICAgICAgcG9ydGZvbGlvSW5kZXhNYW5hZ2VyOiB0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb0luZGV4TWFuYWdlcicpLFxuICAgICAgICBwb3J0Zm9saW9SZXBvTWFuYWdlcjogdGhpcy5yZXNvbHZlKCdQb3J0Zm9saW9SZXBvTWFuYWdlcicpLFxuICAgICAgICByYXRlTGltaXRlcjogdGhpcy5yZXNvbHZlKCdHaXRIdWJSYXRlTGltaXRlcicpLFxuICAgICAgICBmaWxlT3BlcmF0aW9uczogdGhpcy5yZXNvbHZlKCdGaWxlT3BlcmF0aW9uc1NlcnZpY2UnKSxcbiAgICAgICAgdG9rZW5NYW5hZ2VyOiB0aGlzLnJlc29sdmUoJ1Rva2VuTWFuYWdlcicpXG4gICAgfSkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ1BvcnRmb2xpb1N5bmNNYW5hZ2VyJywgKCkgPT4gbmV3IFBvcnRmb2xpb1N5bmNNYW5hZ2VyKHtcbiAgICAgICAgY29uZmlnTWFuYWdlcjogdGhpcy5yZXNvbHZlKCdDb25maWdNYW5hZ2VyJyksXG4gICAgICAgIHBvcnRmb2xpb01hbmFnZXI6IHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvTWFuYWdlcicpLFxuICAgICAgICBwb3J0Zm9saW9SZXBvTWFuYWdlcjogdGhpcy5yZXNvbHZlKCdQb3J0Zm9saW9SZXBvTWFuYWdlcicpLFxuICAgICAgICBpbmRleGVyOiB0aGlzLnJlc29sdmUoJ0dpdEh1YlBvcnRmb2xpb0luZGV4ZXInKSxcbiAgICAgICAgZmlsZU9wZXJhdGlvbnM6IHRoaXMucmVzb2x2ZSgnRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJyksXG4gICAgICAgIHRva2VuTWFuYWdlcjogdGhpcy5yZXNvbHZlKCdUb2tlbk1hbmFnZXInKVxuICAgIH0pKTtcblxuICAgIC8vIFNFUlZFUlxuICAgIHRoaXMucmVnaXN0ZXIoJ1NlcnZlclNldHVwJywgKCkgPT4gbmV3IFNlcnZlclNldHVwKFxuICAgICAgdGhpcy5yZXNvbHZlPENvbnRleHRUcmFja2VyPignQ29udGV4dFRyYWNrZXInKVxuICAgICkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ1NlcnZlclN0YXJ0dXAnLCAoKSA9PiBuZXcgU2VydmVyU3RhcnR1cChcbiAgICAgIHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvTWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdGaWxlTG9ja01hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnQ29uZmlnTWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdNaWdyYXRpb25NYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ01lbW9yeU1hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnT3BlcmF0aW9uYWxUZWxlbWV0cnknKVxuICAgICkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0J1aWxkSW5mb1NlcnZpY2UnLCAoKSA9PiB7XG4gICAgICBjb25zdCBzZXJ2aWNlID0gbmV3IEJ1aWxkSW5mb1NlcnZpY2UodGhpcy5yZXNvbHZlKCdGaWxlT3BlcmF0aW9uc1NlcnZpY2UnKSk7XG4gICAgICAvLyBJc3N1ZSAjNzA2OiBXaXJlIHN0YXJ0dXAgaW5zdHJ1bWVudGF0aW9uXG4gICAgICBzZXJ2aWNlLnNldFN0YXJ0dXBUaW1lcih0aGlzLnJlc29sdmU8U3RhcnR1cFRpbWVyPignU3RhcnR1cFRpbWVyJykpO1xuICAgICAgc2VydmljZS5zZXREZWZlcnJlZFNldHVwQ2hlY2tlcigoKSA9PiB0aGlzLmRlZmVycmVkU2V0dXBDb21wbGV0ZSk7XG4gICAgICByZXR1cm4gc2VydmljZTtcbiAgICB9KTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdQZXJmb3JtYW5jZU1vbml0b3InLCAoKSA9PiB7XG4gICAgICBjb25zdCBtb25pdG9yID0gbmV3IFBlcmZvcm1hbmNlTW9uaXRvcigpO1xuICAgICAgbW9uaXRvci5zdGFydE1vbml0b3JpbmcoKTtcbiAgICAgIHJldHVybiBtb25pdG9yO1xuICAgIH0pO1xuXG4gICAgdGhpcy5yZWdpc3RlcignT3BlcmF0aW9uTWV0cmljc1RyYWNrZXInLCAoKSA9PiBuZXcgT3BlcmF0aW9uTWV0cmljc1RyYWNrZXIoKSwgeyBzaW5nbGV0b246IHRydWUgfSk7XG4gICAgdGhpcy5yZWdpc3RlcignR2F0ZWtlZXBlck1ldHJpY3NUcmFja2VyJywgKCkgPT4gbmV3IEdhdGVrZWVwZXJNZXRyaWNzVHJhY2tlcigpLCB7IHNpbmdsZXRvbjogdHJ1ZSB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRQZXJzb25hc0RpcigpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5wZXJzb25hc0RpcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmVwYXJlIHBvcnRmb2xpbyDigJQgY3JpdGljYWwgcGF0aCBvbmx5LlxuICAgKlxuICAgKiBJc3N1ZSAjNzA2OiBTcGxpdCBmcm9tIHRoZSBvcmlnaW5hbCBtb25vbGl0aGljIHByZXBhcmVQb3J0Zm9saW8oKS5cbiAgICogT25seSB3b3JrIHJlcXVpcmVkIGJlZm9yZSBNQ1AgY29ubmVjdCgpIHJ1bnMgaGVyZS4gTm9uLWNyaXRpY2FsIHdvcmtcbiAgICogKG1lbW9yeSBhdXRvLWxvYWQsIGFjdGl2YXRpb24gcmVzdG9yZSwgbG9nIGhvb2tzLCBkYW5nZXIgem9uZSBpbml0KVxuICAgKiBpcyBkZWZlcnJlZCB0byBjb21wbGV0ZURlZmVycmVkU2V0dXAoKSB3aGljaCBydW5zIHBvc3QtY29ubmVjdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBwcmVwYXJlUG9ydGZvbGlvKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHRpbWVyID0gdGhpcy5yZXNvbHZlPFN0YXJ0dXBUaW1lcj4oJ1N0YXJ0dXBUaW1lcicpO1xuICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgY29uc3QgbWlncmF0aW9uTWFuYWdlciA9IHRoaXMucmVzb2x2ZTxNaWdyYXRpb25NYW5hZ2VyPignTWlncmF0aW9uTWFuYWdlcicpO1xuICAgIGNvbnN0IHBvcnRmb2xpb01hbmFnZXIgPSB0aGlzLnJlc29sdmU8UG9ydGZvbGlvTWFuYWdlcj4oJ1BvcnRmb2xpb01hbmFnZXInKTtcblxuICAgIC8vIC0tLSBjb25maWdfY2hlY2tzIChjcml0aWNhbCkgLS0tXG4gICAgdGltZXIuc3RhcnRQaGFzZSgnY29uZmlnX2NoZWNrcycsIHRydWUpO1xuXG4gICAgLy8gUEVSRk9STUFOQ0UgT1BUSU1JWkFUSU9OOiBSdW4gaW5kZXBlbmRlbnQgY2hlY2tzIGluIHBhcmFsbGVsICg0MC02MCUgZmFzdGVyIHN0YXJ0dXApXG4gICAgLy8gVXNlIFByb21pc2UuYWxsU2V0dGxlZCB0byBjYXB0dXJlIGFsbCBjaGVjayByZXN1bHRzLCBldmVuIGlmIG9uZSBmYWlsc1xuICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoW1xuICAgICAgbWlncmF0aW9uTWFuYWdlci5uZWVkc01pZ3JhdGlvbigpLFxuICAgICAgcG9ydGZvbGlvTWFuYWdlci5leGlzdHMoKVxuICAgIF0pO1xuXG4gICAgLy8gRXh0cmFjdCByZXN1bHRzIGFuZCBjb2xsZWN0IGFueSBlcnJvcnNcbiAgICBjb25zdCBjaGVja0Vycm9yczogQXJyYXk8eyBjaGVjazogc3RyaW5nOyBlcnJvcjogRXJyb3IgfT4gPSBbXTtcblxuICAgIGxldCBuZWVkc01pZ3JhdGlvbiA9IGZhbHNlO1xuICAgIGlmIChyZXN1bHRzWzBdLnN0YXR1cyA9PT0gJ2Z1bGZpbGxlZCcpIHtcbiAgICAgIG5lZWRzTWlncmF0aW9uID0gcmVzdWx0c1swXS52YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2hlY2tFcnJvcnMucHVzaCh7XG4gICAgICAgIGNoZWNrOiAnbWlncmF0aW9uJyxcbiAgICAgICAgZXJyb3I6IHJlc3VsdHNbMF0ucmVhc29uIGluc3RhbmNlb2YgRXJyb3IgPyByZXN1bHRzWzBdLnJlYXNvbiA6IG5ldyBFcnJvcihTdHJpbmcocmVzdWx0c1swXS5yZWFzb24pKVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgbGV0IHBvcnRmb2xpb0V4aXN0cyA9IGZhbHNlO1xuICAgIGlmIChyZXN1bHRzWzFdLnN0YXR1cyA9PT0gJ2Z1bGZpbGxlZCcpIHtcbiAgICAgIHBvcnRmb2xpb0V4aXN0cyA9IHJlc3VsdHNbMV0udmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNoZWNrRXJyb3JzLnB1c2goe1xuICAgICAgICBjaGVjazogJ3BvcnRmb2xpbycsXG4gICAgICAgIGVycm9yOiByZXN1bHRzWzFdLnJlYXNvbiBpbnN0YW5jZW9mIEVycm9yID8gcmVzdWx0c1sxXS5yZWFzb24gOiBuZXcgRXJyb3IoU3RyaW5nKHJlc3VsdHNbMV0ucmVhc29uKSlcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIElmIGJvdGggY2hlY2tzIGZhaWxlZCwgdGhyb3cgY29tcHJlaGVuc2l2ZSBlcnJvclxuICAgIGlmIChjaGVja0Vycm9ycy5sZW5ndGggPT09IDIpIHtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZXMgPSBjaGVja0Vycm9ycy5tYXAoZSA9PiBgJHtlLmNoZWNrfTogJHtlLmVycm9yLm1lc3NhZ2V9YCkuam9pbignOyAnKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUG9ydGZvbGlvIHByZXBhcmF0aW9uIGZhaWxlZCAtIGFsbCBjaGVja3MgZmFpbGVkOiAke2Vycm9yTWVzc2FnZXN9YCk7XG4gICAgfVxuXG4gICAgLy8gSWYgb25seSBvbmUgY2hlY2sgZmFpbGVkLCBsb2cgd2FybmluZyBidXQgY29udGludWVcbiAgICBpZiAoY2hlY2tFcnJvcnMubGVuZ3RoID09PSAxKSB7XG4gICAgICBsb2dnZXIud2FybihgUG9ydGZvbGlvIGNoZWNrIGZhaWxlZCBidXQgY29udGludWluZzogJHtjaGVja0Vycm9yc1swXS5jaGVja30gLSAke2NoZWNrRXJyb3JzWzBdLmVycm9yLm1lc3NhZ2V9YCk7XG4gICAgfVxuXG4gICAgdGltZXIuZW5kUGhhc2UoJ2NvbmZpZ19jaGVja3MnKTtcblxuICAgIC8vIC0tLSBtaWdyYXRpb24gKGNyaXRpY2FsLCBjb25kaXRpb25hbCkgLS0tXG4gICAgaWYgKG5lZWRzTWlncmF0aW9uKSB7XG4gICAgICB0aW1lci5zdGFydFBoYXNlKCdtaWdyYXRpb24nLCB0cnVlKTtcbiAgICAgIGxvZ2dlci5pbmZvKFwiTGVnYWN5IHBlcnNvbmFzIGRldGVjdGVkLiBTdGFydGluZyBtaWdyYXRpb24uLi5cIik7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBtaWdyYXRpb25NYW5hZ2VyLm1pZ3JhdGUoeyBiYWNrdXA6IHRydWUgfSk7XG5cbiAgICAgIGlmIChyZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICBsb2dnZXIuaW5mbyhgU3VjY2Vzc2Z1bGx5IG1pZ3JhdGVkICR7cmVzdWx0Lm1pZ3JhdGVkQ291bnR9IHBlcnNvbmFzYCk7XG4gICAgICAgIGlmIChyZXN1bHQuYmFja2VkVXAgJiYgcmVzdWx0LmJhY2t1cFBhdGgpIHtcbiAgICAgICAgICBsb2dnZXIuaW5mbyhgQmFja3VwIGNyZWF0ZWQgYXQ6ICR7cmVzdWx0LmJhY2t1cFBhdGh9YCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcihcIk1pZ3JhdGlvbiBjb21wbGV0ZWQgd2l0aCBlcnJvcnM6XCIpO1xuICAgICAgICByZXN1bHQuZXJyb3JzLmZvckVhY2goKGVycikgPT4gbG9nZ2VyLmVycm9yKGAgIC0gJHtlcnJ9YCkpO1xuICAgICAgfVxuICAgICAgdGltZXIuZW5kUGhhc2UoJ21pZ3JhdGlvbicpO1xuICAgIH1cblxuICAgIC8vIC0tLSBwb3J0Zm9saW9faW5pdCAoY3JpdGljYWwsIGNvbmRpdGlvbmFsKSAtLS1cbiAgICBpZiAoIXBvcnRmb2xpb0V4aXN0cykge1xuICAgICAgdGltZXIuc3RhcnRQaGFzZSgncG9ydGZvbGlvX2luaXQnLCB0cnVlKTtcbiAgICAgIGxvZ2dlci5pbmZvKFwiQ3JlYXRpbmcgcG9ydGZvbGlvIGRpcmVjdG9yeSBzdHJ1Y3R1cmUuLi5cIik7XG4gICAgICBhd2FpdCBwb3J0Zm9saW9NYW5hZ2VyLmluaXRpYWxpemUoKTtcbiAgICAgIHRpbWVyLmVuZFBoYXNlKCdwb3J0Zm9saW9faW5pdCcpO1xuICAgIH1cblxuICAgIC8vIFBFUkZPUk1BTkNFIE9QVElNSVpBVElPTjogSW5pdGlhbGl6ZSBjb2xsZWN0aW9uIGNhY2hlIGluIGJhY2tncm91bmQgKG5vbi1ibG9ja2luZylcbiAgICAvLyBUaGlzIGlzIHNhZmUgYmVjYXVzZSBjb2xsZWN0aW9uIGNhY2hlIGlzIG5vdCBjcml0aWNhbCBmb3Igc3RhcnR1cFxuICAgIHRoaXMuaW5pdGlhbGl6ZUNvbGxlY3Rpb25DYWNoZSgpLmNhdGNoKGVyciA9PlxuICAgICAgbG9nZ2VyLndhcm4oJ0JhY2tncm91bmQgY29sbGVjdGlvbiBjYWNoZSBpbml0aWFsaXphdGlvbiBmYWlsZWQgKHdpbGwgcmV0cnkgb24gZGVtYW5kKScsIGVycilcbiAgICApO1xuXG4gICAgdGhpcy5wZXJzb25hc0RpciA9IHBvcnRmb2xpb01hbmFnZXIuZ2V0RWxlbWVudERpcihFbGVtZW50VHlwZS5QRVJTT05BKTtcblxuICAgIC8vIC0tLSBjb25maWdfbWFuYWdlciAoY3JpdGljYWwpIC0tLVxuICAgIHRpbWVyLnN0YXJ0UGhhc2UoJ2NvbmZpZ19tYW5hZ2VyJywgdHJ1ZSk7XG4gICAgY29uc3QgY29uZmlnTWFuYWdlciA9IHRoaXMucmVzb2x2ZTxDb25maWdNYW5hZ2VyPignQ29uZmlnTWFuYWdlcicpO1xuICAgIGF3YWl0IGNvbmZpZ01hbmFnZXIuaW5pdGlhbGl6ZSgpO1xuICAgIHRpbWVyLmVuZFBoYXNlKCdjb25maWdfbWFuYWdlcicpO1xuXG4gICAgY29uc3QgZWxhcHNlZFRpbWUgPSBEYXRlLm5vdygpIC0gc3RhcnRUaW1lO1xuICAgIGxvZ2dlci5pbmZvKGBbU3RhcnR1cF0gQ3JpdGljYWwgcG9ydGZvbGlvIHBhdGggY29tcGxldGVkIGluICR7ZWxhcHNlZFRpbWV9bXMgKHBlcnNvbmFzIGRpcmVjdG9yeTogJHt0aGlzLnBlcnNvbmFzRGlyfSlgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wbGV0ZSBub24tY3JpdGljYWwgc2V0dXAgYWZ0ZXIgTUNQIGNvbm5lY3QoKS5cbiAgICpcbiAgICogSXNzdWUgIzcwNjogVGhlc2Ugb3BlcmF0aW9ucyB3ZXJlIHByZXZpb3VzbHkgaW4gcHJlcGFyZVBvcnRmb2xpbygpIGJ1dCBhcmVcbiAgICogbm9uLWZhdGFsIGFuZCBjYW4gc2FmZWx5IHJ1biBhZnRlciB0aGUgc2VydmVyIGlzIGFjY2VwdGluZyBjb25uZWN0aW9ucy5cbiAgICogVGhpcyBzaHJpbmtzIHRoZSBjcml0aWNhbCBwYXRoIGJ5IDEwMDAtMzcwMG1zLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNvbXBsZXRlRGVmZXJyZWRTZXR1cCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0aW1lciA9IHRoaXMucmVzb2x2ZTxTdGFydHVwVGltZXI+KCdTdGFydHVwVGltZXInKTtcblxuICAgIC8vIElzc3VlICM3MDY6IFRlc3QgaG9vayDigJQgaW5qZWN0IGFydGlmaWNpYWwgZGVsYXkgdG8gc2ltdWxhdGUgc2xvdyBkZWZlcnJlZCBzZXR1cC5cbiAgICAvLyBPbmx5IGFjdGl2ZSB3aGVuIERPTExIT1VTRV9URVNUX0RFRkVSUkVEX0RFTEFZX01TIGlzIHNldCAoaW50ZWdyYXRpb24gdGVzdHMpLlxuICAgIGNvbnN0IHRlc3REZWxheSA9IHBhcnNlSW50KHByb2Nlc3MuZW52LkRPTExIT1VTRV9URVNUX0RFRkVSUkVEX0RFTEFZX01TIHx8ICcwJywgMTApO1xuICAgIGlmICh0ZXN0RGVsYXkgPiAwKSB7XG4gICAgICBsb2dnZXIuaW5mbyhgW1N0YXJ0dXBdIFRlc3QgZGVsYXkgaW5qZWN0ZWQ6ICR7dGVzdERlbGF5fW1zYCk7XG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgdGVzdERlbGF5KSk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5jb21wbGV0ZVNpbmtTZXR1cCh0aW1lcik7XG4gICAgYXdhaXQgdGhpcy5jb21wbGV0ZUNvbnNvbGVTZXR1cCh0aW1lcik7XG5cbiAgICB0aGlzLmRlZmVycmVkU2V0dXBDb21wbGV0ZSA9IHRydWU7XG5cbiAgICBjb25zdCByZXBvcnQgPSB0aW1lci5nZXRSZXBvcnQoKTtcbiAgICBsb2dnZXIuaW5mbyhcbiAgICAgIGBbU3RhcnR1cF0gRGVmZXJyZWQgc2V0dXAgY29tcGxldGVkIGluICR7cmVwb3J0LmRlZmVycmVkTXN9bXMgYCArXG4gICAgICBgKHRvdGFsIHN0YXJ0dXA6ICR7cmVwb3J0LnRvdGFsTXN9bXMsIGNyaXRpY2FsOiAke3JlcG9ydC5jcml0aWNhbFBhdGhNc31tcylgXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaXJlIHNpbmtzLCBob29rcywgY29sbGVjdG9ycywgYW5kIHNlY3VyaXR5IOKAlCBldmVyeXRoaW5nIEVYQ0VQVFxuICAgKiB0aGUgd2ViIGNvbnNvbGUgbGVhZGVyIGVsZWN0aW9uIGFuZCBwZXJtaXNzaW9uIHNlcnZlci5cbiAgICpcbiAgICogQ2FsbGVkIGJ5IGNvbXBsZXRlRGVmZXJyZWRTZXR1cCgpIGluIE1DUCBzdGRpbyBtb2RlLCBhbmQgZGlyZWN0bHlcbiAgICogYnkgdGhlIC0td2ViIHN0YW5kYWxvbmUgcGF0aCB3aGljaCBJUyB0aGUgc2VydmVyICgjMTg2NikuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgY29tcGxldGVTaW5rU2V0dXAodGltZXI/OiBTdGFydHVwVGltZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmRlZmVycmVkTWVtb3J5QXV0b2xvYWQodGltZXIpO1xuICAgIGF3YWl0IHRoaXMuZGVmZXJyZWRBY3RpdmF0aW9uUmVzdG9yZSh0aW1lcik7XG4gICAgYXdhaXQgdGhpcy5kZWZlcnJlZFBvbGljeUV4cG9ydCgpO1xuICAgIGF3YWl0IHRoaXMuZGVmZXJyZWRMb2dIb29rcyh0aW1lcik7XG4gICAgYXdhaXQgdGhpcy5kZWZlcnJlZE1ldHJpY3NDb2xsZWN0b3JzKHRpbWVyKTtcbiAgICBhd2FpdCB0aGlzLmRlZmVycmVkRGFuZ2VyWm9uZUluaXQodGltZXIpO1xuICAgIGF3YWl0IHRoaXMuZGVmZXJyZWRQYXR0ZXJuRW5jcnlwdGlvbih0aW1lcik7XG4gICAgYXdhaXQgdGhpcy5kZWZlcnJlZEJhY2tncm91bmRWYWxpZGF0b3IodGltZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIExlYWRlciBlbGVjdGlvbiwgd2ViIGNvbnNvbGUgc2VydmVyLCBhbmQgcGVybWlzc2lvbiBzZXJ2ZXIuXG4gICAqIE9ubHkgY2FsbGVkIGluIE1DUCBzdGRpbyBtb2RlIOKAlCAtLXdlYiBzdGFuZGFsb25lIG1vZGUgSVMgdGhlIHNlcnZlciAoIzE4NjYpLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNvbXBsZXRlQ29uc29sZVNldHVwKHRpbWVyPzogU3RhcnR1cFRpbWVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gU3dlZXAgc3RhbGUgcG9ydCBmaWxlcyBmcm9tIHByaW9yIHNlc3Npb25zIGJlZm9yZSBhbnkgcG9ydCBvcGVyYXRpb25zICgjMTg1NikuXG4gICAgLy8gUnVucyB1bmNvbmRpdGlvbmFsbHkg4oCUIHN0YWxlIGZpbGVzIGFjY3VtdWxhdGUgcmVnYXJkbGVzcyBvZiBET0xMSE9VU0VfV0VCX0NPTlNPTEUuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgc3dlZXBTdGFsZVBvcnRGaWxlcyB9ID0gYXdhaXQgaW1wb3J0KCcuLi93ZWIvcG9ydERpc2NvdmVyeS5qcycpO1xuICAgICAgYXdhaXQgc3dlZXBTdGFsZVBvcnRGaWxlcygpO1xuICAgIH0gY2F0Y2ggeyAvKiBzd2VlcCBmYWlsdXJlIGlzIG5vbi1mYXRhbCAqLyB9XG5cbiAgICBjb25zdCBjb25zb2xlUmVzdWx0ID0gYXdhaXQgdGhpcy5kZWZlcnJlZFdlYkNvbnNvbGUodGltZXIpO1xuICAgIGF3YWl0IHRoaXMuZGVmZXJyZWRQZXJtaXNzaW9uU2VydmVyKGNvbnNvbGVSZXN1bHQsIHRpbWVyKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZGVmZXJyZWRNZW1vcnlBdXRvbG9hZCh0aW1lcj86IFN0YXJ0dXBUaW1lcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHRpbWVyPy5zdGFydFBoYXNlKCdtZW1vcnlfYXV0b2xvYWQnLCBmYWxzZSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbmZpZ01hbmFnZXIgPSB0aGlzLnJlc29sdmU8Q29uZmlnTWFuYWdlcj4oJ0NvbmZpZ01hbmFnZXInKTtcbiAgICAgIGNvbnN0IGNvbmZpZyA9IGNvbmZpZ01hbmFnZXIuZ2V0Q29uZmlnKCk7XG5cbiAgICAgIGlmIChjb25maWcuYXV0b0xvYWQuZW5hYmxlZCkge1xuICAgICAgICBjb25zdCBtZW1vcnlNYW5hZ2VyID0gdGhpcy5yZXNvbHZlPE1lbW9yeU1hbmFnZXI+KCdNZW1vcnlNYW5hZ2VyJyk7XG4gICAgICAgIGNvbnN0IGF1dG9Mb2FkUmVzdWx0ID0gYXdhaXQgbWVtb3J5TWFuYWdlci5sb2FkQW5kQWN0aXZhdGVBdXRvTG9hZE1lbW9yaWVzKCk7XG5cbiAgICAgICAgaWYgKGF1dG9Mb2FkUmVzdWx0LmVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgbG9nZ2VyLndhcm4oXG4gICAgICAgICAgICBgW0NvbnRhaW5lcl0gQXV0by1sb2FkIGNvbXBsZXRlZCB3aXRoICR7YXV0b0xvYWRSZXN1bHQuZXJyb3JzLmxlbmd0aH0gZXJyb3Iocyk6YCxcbiAgICAgICAgICAgIGF1dG9Mb2FkUmVzdWx0LmVycm9yc1xuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBsb2dnZXIuaW5mbyhcbiAgICAgICAgICBgW0NvbnRhaW5lcl0gQXV0by1sb2FkZWQgJHthdXRvTG9hZFJlc3VsdC5sb2FkZWR9IG1lbW9yaWVzIGAgK1xuICAgICAgICAgIGAofiR7YXV0b0xvYWRSZXN1bHQudG90YWxUb2tlbnN9IHRva2VucyksICR7YXV0b0xvYWRSZXN1bHQuc2tpcHBlZH0gc2tpcHBlZGBcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnW0NvbnRhaW5lcl0gQXV0by1sb2FkIG1lbW9yaWVzIGRpc2FibGVkIGluIGNvbmZpZ3VyYXRpb24nKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdbQ29udGFpbmVyXSBNZW1vcnkgYXV0by1sb2FkIGZhaWxlZDonLCBlcnJvcik7XG4gICAgfVxuICAgIHRpbWVyPy5lbmRQaGFzZSgnbWVtb3J5X2F1dG9sb2FkJyk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRlZmVycmVkQWN0aXZhdGlvblJlc3RvcmUodGltZXI/OiBTdGFydHVwVGltZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aW1lcj8uc3RhcnRQaGFzZSgnYWN0aXZhdGlvbl9yZXN0b3JlJywgZmFsc2UpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBhY3RpdmF0aW9uU3RvcmUgPSB0aGlzLnJlc29sdmU8QWN0aXZhdGlvblN0b3JlPignQWN0aXZhdGlvblN0b3JlJyk7XG4gICAgICBhd2FpdCBhY3RpdmF0aW9uU3RvcmUuaW5pdGlhbGl6ZSgpO1xuXG4gICAgICBpZiAoYWN0aXZhdGlvblN0b3JlLmlzRW5hYmxlZCgpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucmVzdG9yZUFjdGl2YXRpb25zKGFjdGl2YXRpb25TdG9yZSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci53YXJuKCdbQ29udGFpbmVyXSBBY3RpdmF0aW9uIHN0YXRlIHJlc3RvcmF0aW9uIGZhaWxlZDonLCBlcnJvcik7XG4gICAgfVxuICAgIHRpbWVyPy5lbmRQaGFzZSgnYWN0aXZhdGlvbl9yZXN0b3JlJyk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRlZmVycmVkUG9saWN5RXhwb3J0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwb2xpY3lFeHBvcnRTZXJ2aWNlID0gdGhpcy5yZXNvbHZlPFBvbGljeUV4cG9ydFNlcnZpY2U+KCdQb2xpY3lFeHBvcnRTZXJ2aWNlJyk7XG4gICAgICBhd2FpdCBwb2xpY3lFeHBvcnRTZXJ2aWNlLmV4cG9ydFBvbGljaWVzKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZygnW0NvbnRhaW5lcl0gUG9saWN5IGV4cG9ydCBza2lwcGVkOicsIGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRlZmVycmVkTG9nSG9va3ModGltZXI/OiBTdGFydHVwVGltZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aW1lcj8uc3RhcnRQaGFzZSgnbG9nX2hvb2tzJywgZmFsc2UpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBsb2dNYW5hZ2VyID0gdGhpcy5yZXNvbHZlPExvZ01hbmFnZXI+KCdMb2dNYW5hZ2VyJyk7XG4gICAgICBjb25zdCBsb2dDbGVhbnVwcyA9IHdpcmVMb2dIb29rcyhsb2dNYW5hZ2VyLCB0aGlzKTtcbiAgICAgIHRoaXMucmVnaXN0ZXIoJ19sb2dIb29rQ2xlYW51cHMnLCAoKSA9PiBsb2dDbGVhbnVwcyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci53YXJuKCdbQ29udGFpbmVyXSBGYWlsZWQgdG8gd2lyZSBsb2cgaG9va3M6JywgZXJyb3IpO1xuICAgIH1cbiAgICB0aW1lcj8uZW5kUGhhc2UoJ2xvZ19ob29rcycpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkZWZlcnJlZE1ldHJpY3NDb2xsZWN0b3JzKHRpbWVyPzogU3RhcnR1cFRpbWVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGltZXI/LnN0YXJ0UGhhc2UoJ21ldHJpY3NfY29sbGVjdG9ycycsIGZhbHNlKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbWV0cmljc01hbmFnZXIgPSB0aGlzLnJlc29sdmU8TWV0cmljc01hbmFnZXI+KCdNZXRyaWNzTWFuYWdlcicpO1xuICAgICAgdGhpcy53aXJlTWV0cmljc0NvbGxlY3RvcnMobWV0cmljc01hbmFnZXIpO1xuICAgICAgbWV0cmljc01hbmFnZXIuc3RhcnQoKTtcbiAgICAgIGxvZ2dlci5pbmZvKCdbQ29udGFpbmVyXSBNZXRyaWNzIGNvbGxlY3Rpb24gc3RhcnRlZCcpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIud2FybignW0NvbnRhaW5lcl0gTWV0cmljcyB3aXJpbmcgc2tpcHBlZDonLCBlcnJvcik7XG4gICAgfVxuICAgIHRpbWVyPy5lbmRQaGFzZSgnbWV0cmljc19jb2xsZWN0b3JzJyk7XG4gIH1cblxuICAvKiogVHJ5IHRvIHJlc29sdmUgYSBzZXJ2aWNlLCByZXR1cm5pbmcgdW5kZWZpbmVkIGlmIG5vdCByZWdpc3RlcmVkICovXG4gIHByaXZhdGUgdHJ5UmVzb2x2ZTxUPihuYW1lOiBzdHJpbmcpOiBUIHwgdW5kZWZpbmVkIHtcbiAgICB0cnkgeyByZXR1cm4gdGhpcy5yZXNvbHZlPFQ+KG5hbWUpOyB9IGNhdGNoIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICB9XG5cbiAgLyoqIFdpcmUgU1NFIGJyb2FkY2FzdCBzaW5rcyBmb3IgdGhlIHdlYiBjb25zb2xlICovXG4gIHByaXZhdGUgd2lyZVNTRUJyb2FkY2FzdHMoXG4gICAgd2ViUmVzdWx0OiBpbXBvcnQoJy4uL3dlYi9zZXJ2ZXIuanMnKS5XZWJTZXJ2ZXJSZXN1bHQsXG4gICAgbWV0cmljc1Npbms6IE1lbW9yeU1ldHJpY3NTaW5rIHwgdW5kZWZpbmVkLFxuICApOiB2b2lkIHtcbiAgICBpZiAod2ViUmVzdWx0LmxvZ0Jyb2FkY2FzdCkge1xuICAgICAgY29uc3QgbG9nTWFuYWdlciA9IHRoaXMucmVzb2x2ZTxMb2dNYW5hZ2VyPignTG9nTWFuYWdlcicpO1xuICAgICAgbG9nTWFuYWdlci5yZWdpc3RlclNpbmsobmV3IFdlYlNTRUxvZ1Npbmsod2ViUmVzdWx0LmxvZ0Jyb2FkY2FzdCkpO1xuICAgIH1cbiAgICBpZiAod2ViUmVzdWx0Lm1ldHJpY3NPblNuYXBzaG90ICYmIG1ldHJpY3NTaW5rKSB7XG4gICAgICBjb25zdCBtZXRyaWNzTWFuYWdlciA9IHRoaXMudHJ5UmVzb2x2ZTxNZXRyaWNzTWFuYWdlcj4oJ01ldHJpY3NNYW5hZ2VyJyk7XG4gICAgICBpZiAobWV0cmljc01hbmFnZXIpIHtcbiAgICAgICAgbWV0cmljc01hbmFnZXIucmVnaXN0ZXJTaW5rKG5ldyBXZWJTU0VNZXRyaWNzU2luayh3ZWJSZXN1bHQubWV0cmljc09uU25hcHNob3QpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRlZmVycmVkV2ViQ29uc29sZSh0aW1lcj86IFN0YXJ0dXBUaW1lcik6IFByb21pc2U8VW5pZmllZENvbnNvbGVSZXN1bHQgfCBudWxsPiB7XG4gICAgdGltZXI/LnN0YXJ0UGhhc2UoJ3dlYl9jb25zb2xlJywgZmFsc2UpO1xuICAgIHRyeSB7XG4gICAgICBpZiAoIWVudi5ET0xMSE9VU0VfV0VCX0NPTlNPTEUpIHJldHVybiBudWxsO1xuXG4gICAgICBjb25zdCBhY3RpdmF0aW9uU3RvcmUgPSB0aGlzLnJlc29sdmU8QWN0aXZhdGlvblN0b3JlPignQWN0aXZhdGlvblN0b3JlJyk7XG4gICAgICBjb25zdCBzZXNzaW9uSWQgPSBhY3RpdmF0aW9uU3RvcmUuZ2V0U2Vzc2lvbklkKCk7XG4gICAgICBjb25zdCBwb3J0Zm9saW9NYW5hZ2VyID0gdGhpcy5yZXNvbHZlPFBvcnRmb2xpb01hbmFnZXI+KCdQb3J0Zm9saW9NYW5hZ2VyJyk7XG4gICAgICBjb25zdCBtZW1vcnlTaW5rID0gdGhpcy5yZXNvbHZlPE1lbW9yeUxvZ1Npbms+KCdNZW1vcnlMb2dTaW5rJyk7XG4gICAgICBjb25zdCBtZXRyaWNzU2luayA9IHRoaXMudHJ5UmVzb2x2ZTxNZW1vcnlNZXRyaWNzU2luaz4oJ01lbW9yeU1ldHJpY3NTaW5rJyk7XG4gICAgICBjb25zdCBtY3BBcWxIYW5kbGVyID0gdGhpcy50cnlSZXNvbHZlPE1DUEFRTEhhbmRsZXI+KCdtY3BBcWxIYW5kbGVyJyk7XG4gICAgICBjb25zdCBsb2dNYW5hZ2VyID0gdGhpcy5yZXNvbHZlPExvZ01hbmFnZXI+KCdMb2dNYW5hZ2VyJyk7XG5cbiAgICAgIC8vIFJlc29sdmUgY29uc29sZSBwb3J0OiBjb25maWcgZmlsZSDihpIgZW52IHZhciDihpIgZGVmYXVsdCAoIzE4NDApXG4gICAgICBjb25zdCBjb25maWdNYW5hZ2VyID0gdGhpcy5yZXNvbHZlPENvbmZpZ01hbmFnZXI+KCdDb25maWdNYW5hZ2VyJyk7XG4gICAgICBjb25zdCBjb25maWdQb3J0ID0gY29uZmlnTWFuYWdlci5nZXRTZXR0aW5nPG51bWJlcj4oJ2NvbnNvbGUucG9ydCcpO1xuXG4gICAgICBjb25zdCB7IHN0YXJ0VW5pZmllZENvbnNvbGUgfSA9IGF3YWl0IGltcG9ydCgnLi4vd2ViL2NvbnNvbGUvVW5pZmllZENvbnNvbGUuanMnKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHN0YXJ0VW5pZmllZENvbnNvbGUoe1xuICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgIHBvcnRmb2xpb0RpcjogcG9ydGZvbGlvTWFuYWdlci5nZXRCYXNlRGlyKCksXG4gICAgICAgIG1lbW9yeVNpbmssXG4gICAgICAgIG1ldHJpY3NTaW5rLFxuICAgICAgICBtY3BBcWxIYW5kbGVyLFxuICAgICAgICByZWdpc3RlckxvZ1Npbms6IChzaW5rKSA9PiBsb2dNYW5hZ2VyLnJlZ2lzdGVyU2luayhzaW5rKSxcbiAgICAgICAgd2lyZVNTRUJyb2FkY2FzdHM6ICh3ZWJSZXN1bHQsIG1TaW5rKSA9PiB0aGlzLndpcmVTU0VCcm9hZGNhc3RzKHdlYlJlc3VsdCwgbVNpbmspLFxuICAgICAgICBwb3J0OiBjb25maWdQb3J0LFxuICAgICAgfSk7XG5cbiAgICAgIGxvZ2dlci5pbmZvKGBbQ29udGFpbmVyXSBXZWIgY29uc29sZSBzdGFydGVkIGFzICR7cmVzdWx0LnJvbGV9YCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIud2FybignW0NvbnRhaW5lcl0gV2ViIGNvbnNvbGUgc3RhcnR1cCBmYWlsZWQ6JywgZXJyb3IpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRpbWVyPy5lbmRQaGFzZSgnd2ViX2NvbnNvbGUnKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRlZmVycmVkUGVybWlzc2lvblNlcnZlcihjb25zb2xlUmVzdWx0OiBVbmlmaWVkQ29uc29sZVJlc3VsdCB8IG51bGwsIHRpbWVyPzogU3RhcnR1cFRpbWVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGltZXI/LnN0YXJ0UGhhc2UoJ3Blcm1pc3Npb25fc2VydmVyJywgZmFsc2UpO1xuICAgIHRyeSB7XG4gICAgICBpZiAoIWVudi5ET0xMSE9VU0VfUEVSTUlTU0lPTl9TRVJWRVIpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdbQ29udGFpbmVyXSBQZXJtaXNzaW9uIHNlcnZlciBkaXNhYmxlZCB2aWEgRE9MTEhPVVNFX1BFUk1JU1NJT05fU0VSVkVSPWZhbHNlJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFlbnYuRE9MTEhPVVNFX1dFQl9DT05TT0xFKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnW0NvbnRhaW5lcl0gUGVybWlzc2lvbiBzZXJ2ZXIgc2tpcHBlZCDigJQgd2ViIGNvbnNvbGUgaXMgZGlzYWJsZWQnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBQZXJtaXNzaW9uIHJvdXRlcyBhcmUgYWxyZWFkeSBtb3VudGVkIG9uIHRoZSB1bmlmaWVkIHdlYiBjb25zb2xlLlxuICAgICAgLy8gV2UganVzdCBuZWVkIHRvIHdyaXRlIHRoZSBhY3RpdmUgbGVhZGVyIHBvcnQgc28gdGhlIFByZVRvb2xVc2UgaG9va1xuICAgICAgLy8gc2NyaXB0IHJlYWNoZXMgdGhlIHNhbWUgY29uc29sZSBpbnN0YW5jZSB0aGF0IG93bnMgdGhlIGxpdmUgYXVkaXQgZmVlZC5cbiAgICAgIGNvbnN0IHBvcnQgPSBjb25zb2xlUmVzdWx0Py5yb2xlID09PSAnbGVhZGVyJ1xuICAgICAgICA/IGNvbnNvbGVSZXN1bHQucG9ydFxuICAgICAgICA6IGNvbnNvbGVSZXN1bHQ/LmVsZWN0aW9uLmxlYWRlckluZm8ucG9ydDtcblxuICAgICAgaWYgKCFwb3J0KSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnW0NvbnRhaW5lcl0gUGVybWlzc2lvbiBzZXJ2ZXIgc2tpcHBlZCDigJQgbm8gYWN0aXZlIHdlYiBjb25zb2xlIHBvcnQgYXZhaWxhYmxlJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3RhcnRNcyA9IERhdGUubm93KCk7XG5cbiAgICAgIGNvbnN0IHsgd3JpdGVQb3J0RmlsZSwgcmVnaXN0ZXJQb3J0Q2xlYW51cCB9ID0gYXdhaXQgaW1wb3J0KCcuLi9hdXRvLWRvbGxob3VzZS9wb3J0RGlzY292ZXJ5LmpzJyk7XG4gICAgICBsb2dnZXIuZGVidWcoYFtDb250YWluZXJdIFdyaXRpbmcgcGVybWlzc2lvbiBzZXJ2ZXIgcG9ydCBmaWxlIGZvciBwb3J0ICR7cG9ydH1gKTtcbiAgICAgIGF3YWl0IHdyaXRlUG9ydEZpbGUocG9ydCk7XG4gICAgICByZWdpc3RlclBvcnRDbGVhbnVwKCk7XG4gICAgICBsb2dnZXIuZGVidWcoYFtDb250YWluZXJdIFBvcnQgY2xlYW51cCBoYW5kbGVycyByZWdpc3RlcmVkYCk7XG5cbiAgICAgIGNvbnN0IGVsYXBzZWRNcyA9IERhdGUubm93KCkgLSBzdGFydE1zO1xuICAgICAgbG9nZ2VyLmluZm8oYFtDb250YWluZXJdIFBlcm1pc3Npb24gc2VydmVyIHBvcnQgZmlsZSB3cml0dGVuIChwb3J0ICR7cG9ydH0sICR7ZWxhcHNlZE1zfW1zKWApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIud2FybignW0NvbnRhaW5lcl0gUGVybWlzc2lvbiBzZXJ2ZXIgc3RhcnR1cCBmYWlsZWQ6JywgZXJyb3IpO1xuICAgIH1cbiAgICB0aW1lcj8uZW5kUGhhc2UoJ3Blcm1pc3Npb25fc2VydmVyJyk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRlZmVycmVkRGFuZ2VyWm9uZUluaXQodGltZXI/OiBTdGFydHVwVGltZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aW1lcj8uc3RhcnRQaGFzZSgnZGFuZ2VyX3pvbmVfaW5pdCcsIGZhbHNlKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZGFuZ2VyWm9uZUVuZm9yY2VyID0gdGhpcy5yZXNvbHZlPERhbmdlclpvbmVFbmZvcmNlcj4oJ0RhbmdlclpvbmVFbmZvcmNlcicpO1xuICAgICAgYXdhaXQgZGFuZ2VyWm9uZUVuZm9yY2VyLmluaXRpYWxpemUoKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLndhcm4oJ1tDb250YWluZXJdIERhbmdlclpvbmVFbmZvcmNlciBpbml0aWFsaXphdGlvbiBmYWlsZWQ6JywgZXJyb3IpO1xuICAgIH1cbiAgICB0aW1lcj8uZW5kUGhhc2UoJ2Rhbmdlcl96b25lX2luaXQnKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZGVmZXJyZWRQYXR0ZXJuRW5jcnlwdGlvbih0aW1lcj86IFN0YXJ0dXBUaW1lcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHRpbWVyPy5zdGFydFBoYXNlKCdwYXR0ZXJuX2VuY3J5cHRpb24nLCBmYWxzZSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhdHRlcm5FbmNyeXB0b3IgPSB0aGlzLnJlc29sdmUoJ1BhdHRlcm5FbmNyeXB0b3InKSBhcyBQYXR0ZXJuRW5jcnlwdG9yO1xuICAgICAgYXdhaXQgcGF0dGVybkVuY3J5cHRvci5pbml0aWFsaXplKCk7XG4gICAgICBsb2dnZXIuaW5mbyhcIlBhdHRlcm4gZW5jcnlwdGlvbiBpbml0aWFsaXplZFwiKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLndhcm4oJ1tDb250YWluZXJdIFBhdHRlcm4gZW5jcnlwdGlvbiBpbml0aWFsaXphdGlvbiBmYWlsZWQ6JywgZXJyb3IpO1xuICAgIH1cbiAgICB0aW1lcj8uZW5kUGhhc2UoJ3BhdHRlcm5fZW5jcnlwdGlvbicpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkZWZlcnJlZEJhY2tncm91bmRWYWxpZGF0b3IodGltZXI/OiBTdGFydHVwVGltZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aW1lcj8uc3RhcnRQaGFzZSgnYmFja2dyb3VuZF92YWxpZGF0b3InLCBmYWxzZSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJhY2tncm91bmRWYWxpZGF0b3IgPSB0aGlzLnJlc29sdmUoJ0JhY2tncm91bmRWYWxpZGF0b3InKSBhcyBhbnk7XG4gICAgICBiYWNrZ3JvdW5kVmFsaWRhdG9yLnN0YXJ0KCk7XG4gICAgICBsb2dnZXIuaW5mbyhcIkJhY2tncm91bmQgdmFsaWRhdG9yIHN0YXJ0ZWQgZm9yIG1lbW9yeSBzZWN1cml0eVwiKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLndhcm4oJ1tDb250YWluZXJdIEJhY2tncm91bmQgdmFsaWRhdG9yIHN0YXJ0IGZhaWxlZDonLCBlcnJvcik7XG4gICAgfVxuICAgIHRpbWVyPy5lbmRQaGFzZSgnYmFja2dyb3VuZF92YWxpZGF0b3InKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN0b3JlIHBlci1zZXNzaW9uIGFjdGl2YXRpb24gc3RhdGUgZnJvbSB0aGUgQWN0aXZhdGlvblN0b3JlLlxuICAgKiBDYWxsZWQgZHVyaW5nIHByZXBhcmVQb3J0Zm9saW8oKSBhZnRlciBhdXRvLWxvYWQgbWVtb3JpZXMuXG4gICAqXG4gICAqIElzc3VlICM1OTg6IEVhY2ggZWxlbWVudCB0eXBlIGlzIHJlc3RvcmVkIGluZGVwZW5kZW50bHkuXG4gICAqIE1pc3NpbmcgZWxlbWVudHMgKGRlbGV0ZWQgc2luY2UgbGFzdCBzZXNzaW9uKSBhcmUgc2tpcHBlZCBhbmQgcHJ1bmVkLlxuICAgKiBBdXRvLWxvYWRlZCBtZW1vcmllcyBhcmUgZGVkdXBsaWNhdGVkIChub3QgYWN0aXZhdGVkIHR3aWNlKS5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcmVzdG9yZUFjdGl2YXRpb25zKHN0b3JlOiBBY3RpdmF0aW9uU3RvcmUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBwZXJzb25hTWFuYWdlciA9IHRoaXMucmVzb2x2ZTxQZXJzb25hTWFuYWdlcj4oJ1BlcnNvbmFNYW5hZ2VyJyk7XG4gICAgY29uc3Qgc2tpbGxNYW5hZ2VyID0gdGhpcy5yZXNvbHZlPFNraWxsTWFuYWdlcj4oJ1NraWxsTWFuYWdlcicpO1xuICAgIGNvbnN0IGFnZW50TWFuYWdlciA9IHRoaXMucmVzb2x2ZTxBZ2VudE1hbmFnZXI+KCdBZ2VudE1hbmFnZXInKTtcbiAgICBjb25zdCBtZW1vcnlNYW5hZ2VyID0gdGhpcy5yZXNvbHZlPE1lbW9yeU1hbmFnZXI+KCdNZW1vcnlNYW5hZ2VyJyk7XG4gICAgY29uc3QgZW5zZW1ibGVNYW5hZ2VyID0gdGhpcy5yZXNvbHZlPEVuc2VtYmxlTWFuYWdlcj4oJ0Vuc2VtYmxlTWFuYWdlcicpO1xuXG4gICAgbGV0IHJlc3RvcmVkQ291bnQgPSAwO1xuICAgIGxldCBza2lwcGVkQ291bnQgPSAwO1xuXG4gICAgLy8gUmVzdG9yZSBwZXJzb25hcyAodXNlcyBmaWxlbmFtZSBpZiBhdmFpbGFibGUsIGZhbGxzIGJhY2sgdG8gbmFtZSlcbiAgICAvLyBJc3N1ZSAjODQzOiBhY3RpdmF0ZVBlcnNvbmEoKSBpcyBub3cgYXN5bmMg4oCUIHVzZXMgZGlzayBmYWxsYmFjayBmb3IgY2FjaGUgbWlzc2VzXG4gICAgZm9yIChjb25zdCBhY3RpdmF0aW9uIG9mIHN0b3JlLmdldEFjdGl2YXRpb25zKCdwZXJzb25hJykpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGlkZW50aWZpZXIgPSBhY3RpdmF0aW9uLmZpbGVuYW1lIHx8IGFjdGl2YXRpb24ubmFtZTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcGVyc29uYU1hbmFnZXIuYWN0aXZhdGVQZXJzb25hKGlkZW50aWZpZXIpO1xuICAgICAgICBpZiAocmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgICByZXN0b3JlZENvdW50Kys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbG9nZ2VyLmRlYnVnKGBbQWN0aXZhdGlvblN0b3JlXSBQcnVuaW5nIG1pc3NpbmcgcGVyc29uYSAnJHthY3RpdmF0aW9uLm5hbWV9J2ApO1xuICAgICAgICAgIHN0b3JlLnJlbW92ZVN0YWxlQWN0aXZhdGlvbigncGVyc29uYScsIGFjdGl2YXRpb24ubmFtZSk7XG4gICAgICAgICAgc2tpcHBlZENvdW50Kys7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBsb2dnZXIuZGVidWcoYFtBY3RpdmF0aW9uU3RvcmVdIFNraXBwaW5nIGZhaWxlZCBwZXJzb25hICcke2FjdGl2YXRpb24ubmFtZX0nYCk7XG4gICAgICAgIHN0b3JlLnJlbW92ZVN0YWxlQWN0aXZhdGlvbigncGVyc29uYScsIGFjdGl2YXRpb24ubmFtZSk7XG4gICAgICAgIHNraXBwZWRDb3VudCsrO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJlc3RvcmUgc2tpbGxzXG4gICAgLy8gTk9URTogYWN0aXZhdGVTa2lsbCgpIHJldHVybnMge3N1Y2Nlc3MsIG1lc3NhZ2V9IOKAlCBpdCBuZXZlciB0aHJvd3Mgb24gbm90LWZvdW5kLlxuICAgIGZvciAoY29uc3QgYWN0aXZhdGlvbiBvZiBzdG9yZS5nZXRBY3RpdmF0aW9ucygnc2tpbGwnKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2tpbGxNYW5hZ2VyLmFjdGl2YXRlU2tpbGwoYWN0aXZhdGlvbi5uYW1lKTtcbiAgICAgICAgaWYgKHJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgICAgcmVzdG9yZWRDb3VudCsrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhgW0FjdGl2YXRpb25TdG9yZV0gUHJ1bmluZyBtaXNzaW5nIHNraWxsICcke2FjdGl2YXRpb24ubmFtZX0nYCk7XG4gICAgICAgICAgc3RvcmUucmVtb3ZlU3RhbGVBY3RpdmF0aW9uKCdza2lsbCcsIGFjdGl2YXRpb24ubmFtZSk7XG4gICAgICAgICAgc2tpcHBlZENvdW50Kys7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBsb2dnZXIuZGVidWcoYFtBY3RpdmF0aW9uU3RvcmVdIFNraXBwaW5nIGZhaWxlZCBza2lsbCAnJHthY3RpdmF0aW9uLm5hbWV9J2ApO1xuICAgICAgICBzdG9yZS5yZW1vdmVTdGFsZUFjdGl2YXRpb24oJ3NraWxsJywgYWN0aXZhdGlvbi5uYW1lKTtcbiAgICAgICAgc2tpcHBlZENvdW50Kys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmVzdG9yZSBhZ2VudHNcbiAgICBmb3IgKGNvbnN0IGFjdGl2YXRpb24gb2Ygc3RvcmUuZ2V0QWN0aXZhdGlvbnMoJ2FnZW50JykpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGFnZW50TWFuYWdlci5hY3RpdmF0ZUFnZW50KGFjdGl2YXRpb24ubmFtZSk7XG4gICAgICAgIGlmIChyZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgIHJlc3RvcmVkQ291bnQrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2dnZXIuZGVidWcoYFtBY3RpdmF0aW9uU3RvcmVdIFBydW5pbmcgbWlzc2luZyBhZ2VudCAnJHthY3RpdmF0aW9uLm5hbWV9J2ApO1xuICAgICAgICAgIHN0b3JlLnJlbW92ZVN0YWxlQWN0aXZhdGlvbignYWdlbnQnLCBhY3RpdmF0aW9uLm5hbWUpO1xuICAgICAgICAgIHNraXBwZWRDb3VudCsrO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBbQWN0aXZhdGlvblN0b3JlXSBTa2lwcGluZyBmYWlsZWQgYWdlbnQgJyR7YWN0aXZhdGlvbi5uYW1lfSdgKTtcbiAgICAgICAgc3RvcmUucmVtb3ZlU3RhbGVBY3RpdmF0aW9uKCdhZ2VudCcsIGFjdGl2YXRpb24ubmFtZSk7XG4gICAgICAgIHNraXBwZWRDb3VudCsrO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJlc3RvcmUgbWVtb3JpZXMgKGRlZHVwIGFnYWluc3QgYXV0by1sb2FkZWQgb25lcylcbiAgICBjb25zdCBhY3RpdmVNZW1vcmllcyA9IGF3YWl0IG1lbW9yeU1hbmFnZXIuZ2V0QWN0aXZlTWVtb3JpZXMoKTtcbiAgICBjb25zdCBhY3RpdmVNZW1vcnlOYW1lcyA9IG5ldyBTZXQoYWN0aXZlTWVtb3JpZXMubWFwKG0gPT4gbS5tZXRhZGF0YS5uYW1lKSk7XG4gICAgZm9yIChjb25zdCBhY3RpdmF0aW9uIG9mIHN0b3JlLmdldEFjdGl2YXRpb25zKCdtZW1vcnknKSkge1xuICAgICAgaWYgKGFjdGl2ZU1lbW9yeU5hbWVzLmhhcyhhY3RpdmF0aW9uLm5hbWUpKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgW0FjdGl2YXRpb25TdG9yZV0gTWVtb3J5ICcke2FjdGl2YXRpb24ubmFtZX0nIGFscmVhZHkgYWN0aXZlIChhdXRvLWxvYWRlZCksIHNraXBwaW5nYCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgbWVtb3J5TWFuYWdlci5hY3RpdmF0ZU1lbW9yeShhY3RpdmF0aW9uLm5hbWUpO1xuICAgICAgICBpZiAocmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgICByZXN0b3JlZENvdW50Kys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbG9nZ2VyLmRlYnVnKGBbQWN0aXZhdGlvblN0b3JlXSBQcnVuaW5nIG1pc3NpbmcgbWVtb3J5ICcke2FjdGl2YXRpb24ubmFtZX0nYCk7XG4gICAgICAgICAgc3RvcmUucmVtb3ZlU3RhbGVBY3RpdmF0aW9uKCdtZW1vcnknLCBhY3RpdmF0aW9uLm5hbWUpO1xuICAgICAgICAgIHNraXBwZWRDb3VudCsrO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBbQWN0aXZhdGlvblN0b3JlXSBTa2lwcGluZyBmYWlsZWQgbWVtb3J5ICcke2FjdGl2YXRpb24ubmFtZX0nYCk7XG4gICAgICAgIHN0b3JlLnJlbW92ZVN0YWxlQWN0aXZhdGlvbignbWVtb3J5JywgYWN0aXZhdGlvbi5uYW1lKTtcbiAgICAgICAgc2tpcHBlZENvdW50Kys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmVzdG9yZSBlbnNlbWJsZXNcbiAgICBmb3IgKGNvbnN0IGFjdGl2YXRpb24gb2Ygc3RvcmUuZ2V0QWN0aXZhdGlvbnMoJ2Vuc2VtYmxlJykpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGVuc2VtYmxlTWFuYWdlci5hY3RpdmF0ZUVuc2VtYmxlKGFjdGl2YXRpb24ubmFtZSk7XG4gICAgICAgIGlmIChyZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgIHJlc3RvcmVkQ291bnQrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2dnZXIuZGVidWcoYFtBY3RpdmF0aW9uU3RvcmVdIFBydW5pbmcgbWlzc2luZyBlbnNlbWJsZSAnJHthY3RpdmF0aW9uLm5hbWV9J2ApO1xuICAgICAgICAgIHN0b3JlLnJlbW92ZVN0YWxlQWN0aXZhdGlvbignZW5zZW1ibGUnLCBhY3RpdmF0aW9uLm5hbWUpO1xuICAgICAgICAgIHNraXBwZWRDb3VudCsrO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBbQWN0aXZhdGlvblN0b3JlXSBTa2lwcGluZyBmYWlsZWQgZW5zZW1ibGUgJyR7YWN0aXZhdGlvbi5uYW1lfSdgKTtcbiAgICAgICAgc3RvcmUucmVtb3ZlU3RhbGVBY3RpdmF0aW9uKCdlbnNlbWJsZScsIGFjdGl2YXRpb24ubmFtZSk7XG4gICAgICAgIHNraXBwZWRDb3VudCsrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChyZXN0b3JlZENvdW50ID4gMCB8fCBza2lwcGVkQ291bnQgPiAwKSB7XG4gICAgICBsb2dnZXIuaW5mbyhcbiAgICAgICAgYFtBY3RpdmF0aW9uU3RvcmVdIFJlc3RvcmVkICR7cmVzdG9yZWRDb3VudH0gZWxlbWVudChzKSwgc2tpcHBlZCAke3NraXBwZWRDb3VudH0gc3RhbGUgZm9yIHNlc3Npb24gJyR7c3RvcmUuZ2V0U2Vzc2lvbklkKCl9J2BcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEJvb3RzdHJhcCBhbGwgaGFuZGxlcnMgd2l0aG91dCByZWdpc3RlcmluZyBNQ1AgdG9vbHMuXG4gICAqIFVzZWQgYnkgd2ViLW9ubHkgbW9kZSAoLS13ZWIpIHRvIGdldCBNQ1BBUUxIYW5kbGVyIHdpdGhvdXQgYW4gTUNQIFNlcnZlci5cbiAgICogSXNzdWUgIzc5NjogU3BsaXQgREkgY29udGFpbmVyIGJvb3RzdHJhcCBmcm9tIHRyYW5zcG9ydCBjb25uZWN0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGJvb3RzdHJhcEhhbmRsZXJzKCk6IFByb21pc2U8SGFuZGxlckJ1bmRsZT4ge1xuICAgIGlmICghdGhpcy5wZXJzb25hc0Rpcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGVyc29uYSBkaXJlY3Rvcnkgbm90IGluaXRpYWxpemVkLiBDYWxsIHByZXBhcmVQb3J0Zm9saW8oKSBmaXJzdC5cIik7XG4gICAgfVxuXG4gICAgUGF0aFZhbGlkYXRvci5pbml0aWFsaXplKHRoaXMucGVyc29uYXNEaXIpO1xuXG4gICAgY29uc3QgaW5kaWNhdG9yU2VydmljZSA9IHRoaXMucmVzb2x2ZTxQZXJzb25hSW5kaWNhdG9yU2VydmljZT4oJ1BlcnNvbmFJbmRpY2F0b3JTZXJ2aWNlJyk7XG4gICAgY29uc3QgcGVyc29uYU1hbmFnZXIgPSB0aGlzLnJlc29sdmU8UGVyc29uYU1hbmFnZXI+KCdQZXJzb25hTWFuYWdlcicpO1xuICAgIGNvbnN0IGluaXRTZXJ2aWNlID0gdGhpcy5yZXNvbHZlPEluaXRpYWxpemF0aW9uU2VydmljZT4oJ0luaXRpYWxpemF0aW9uU2VydmljZScpO1xuICAgIGNvbnN0IHBlcnNvbmFFeHBvcnRlciA9IG5ldyBQZXJzb25hRXhwb3J0ZXIoKCkgPT4gcGVyc29uYU1hbmFnZXIuZ2V0Q3VycmVudFVzZXJGb3JBdHRyaWJ1dGlvbigpKTtcbiAgICBjb25zdCBwZXJzb25hSW1wb3J0ZXIgPSBuZXcgUGVyc29uYUltcG9ydGVyKHRoaXMucGVyc29uYXNEaXIsICgpID0+IHBlcnNvbmFNYW5hZ2VyLmdldEN1cnJlbnRVc2VyRm9yQXR0cmlidXRpb24oKSk7XG5cbiAgICAvLyBDcmVhdGUgc3RhdGUgYWNjZXNzb3IgZm9yIFBlcnNvbmFIYW5kbGVyXG4gICAgY29uc3QgYWN0aXZlUGVyc29uYUFjY2Vzc29yID0ge1xuICAgICAgZ2V0OiAoKSA9PiBwZXJzb25hTWFuYWdlci5nZXRBY3RpdmVQZXJzb25hKCk/LmZpbGVuYW1lIHx8IG51bGwsXG4gICAgICBzZXQ6ICh2YWx1ZTogc3RyaW5nIHwgbnVsbCkgPT4ge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAvLyBJc3N1ZSAjODQzOiBhY3RpdmF0ZVBlcnNvbmEgaXMgbm93IGFzeW5jIGJ1dCB0aGlzIHNldHRlciBpcyBzeW5jaHJvbm91cy5cbiAgICAgICAgICAvLyBGaXJlLWFuZC1mb3JnZXQg4oCUIFBlcnNvbmFIYW5kbGVyIGRvZXMgaXRzIG93biBsb29rdXAgYmVmb3JlIGNhbGxpbmcgc2V0KCkuXG4gICAgICAgICAgLy8gTG9nIGF0IGVycm9yIGxldmVsIHNpbmNlIGFjdGl2YXRpb24gZmFpbHVyZXMgaGVyZSBpbmRpY2F0ZSBzdGFsZSBzdGF0ZS5cbiAgICAgICAgICBwZXJzb25hTWFuYWdlci5hY3RpdmF0ZVBlcnNvbmEodmFsdWUpLmNhdGNoKGVyciA9PlxuICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGBbQ29udGFpbmVyXSBQZXJzb25hIGFjdGl2YXRpb24gZmFpbGVkIGZvciBcIiR7dmFsdWV9XCIg4oCUIHN0YXRlIGFjY2Vzc29yIG1heSBiZSBzdGFsZTpgLCBlcnIpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZXJzb25hTWFuYWdlci5kZWFjdGl2YXRlUGVyc29uYSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IHBlcnNvbmFIYW5kbGVyID0gbmV3IFBlcnNvbmFIYW5kbGVyKFxuICAgICAgcGVyc29uYU1hbmFnZXIsXG4gICAgICBwZXJzb25hRXhwb3J0ZXIsXG4gICAgICBwZXJzb25hSW1wb3J0ZXIsXG4gICAgICBpbml0U2VydmljZSxcbiAgICAgIGluZGljYXRvclNlcnZpY2UsXG4gICAgICBhY3RpdmVQZXJzb25hQWNjZXNzb3JcbiAgICApO1xuXG4gICAgYXdhaXQgcGVyc29uYU1hbmFnZXIucmVsb2FkKCk7XG5cbiAgICBjb25zdCBlbGVtZW50Q3J1ZEhhbmRsZXIgPSBuZXcgRWxlbWVudENSVURIYW5kbGVyKFxuICAgICAgdGhpcy5yZXNvbHZlKCdTa2lsbE1hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnVGVtcGxhdGVNYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1RlbXBsYXRlUmVuZGVyZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnQWdlbnRNYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ01lbW9yeU1hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnRW5zZW1ibGVNYW5hZ2VyJyksXG4gICAgICBwZXJzb25hTWFuYWdlcixcbiAgICAgIHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvTWFuYWdlcicpLFxuICAgICAgaW5pdFNlcnZpY2UsXG4gICAgICBpbmRpY2F0b3JTZXJ2aWNlLFxuICAgICAgdGhpcy5yZXNvbHZlKCdGaWxlT3BlcmF0aW9uc1NlcnZpY2UnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnRWxlbWVudFF1ZXJ5U2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdWYWxpZGF0aW9uUmVnaXN0cnknKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnQWN0aXZhdGlvblN0b3JlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0JhY2t1cFNlcnZpY2UnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnUG9saWN5RXhwb3J0U2VydmljZScpXG4gICAgKTtcbiAgICAvLyBSZWdpc3RlciBmb3IgbGF6eSByZXNvbHV0aW9uIGJ5IFBvbGljeUV4cG9ydFNlcnZpY2VcbiAgICB0aGlzLnJlZ2lzdGVyKCdFbGVtZW50Q1JVREhhbmRsZXInLCAoKSA9PiBlbGVtZW50Q3J1ZEhhbmRsZXIpO1xuXG4gICAgLy8gTUNQQVFMSGFuZGxlciBjcmVhdGVkIGxhdGVyIGFmdGVyIGFsbCBoYW5kbGVycyBhcmUgaW5zdGFudGlhdGVkXG4gICAgLy8gU2VlIGJlbG93IGFmdGVyIGVuaGFuY2VkSW5kZXhIYW5kbGVyIGNyZWF0aW9uXG5cbiAgICBjb25zdCBjb2xsZWN0aW9uSGFuZGxlciA9IG5ldyBDb2xsZWN0aW9uSGFuZGxlcihcbiAgICAgIHRoaXMucmVzb2x2ZSgnQ29sbGVjdGlvbkJyb3dzZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnQ29sbGVjdGlvblNlYXJjaCcpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdQZXJzb25hRGV0YWlscycpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdFbGVtZW50SW5zdGFsbGVyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0NvbGxlY3Rpb25DYWNoZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdQb3J0Zm9saW9NYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0FQSUNhY2hlJyksXG4gICAgICBwZXJzb25hTWFuYWdlciwgLy8gVXNlIHRoZSByZXNvbHZlZCBQZXJzb25hTWFuYWdlclxuICAgICAgdGhpcy5yZXNvbHZlKCdTdWJtaXRUb1BvcnRmb2xpb1Rvb2wnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnVW5pZmllZEluZGV4TWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdJbml0aWFsaXphdGlvblNlcnZpY2UnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnUGVyc29uYUluZGljYXRvclNlcnZpY2UnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJylcbiAgICApO1xuXG4gICAgY29uc3QgcG9ydGZvbGlvSGFuZGxlciA9IG5ldyBQb3J0Zm9saW9IYW5kbGVyKFxuICAgICAgdGhpcy5yZXNvbHZlKCdHaXRIdWJBdXRoTWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdQb3J0Zm9saW9NYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb1B1bGxIYW5kbGVyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb0luZGV4TWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdVbmlmaWVkSW5kZXhNYW5hZ2VyJyksXG4gICAgICBpbml0U2VydmljZSxcbiAgICAgIGluZGljYXRvclNlcnZpY2UsXG4gICAgICB0aGlzLnJlc29sdmUoJ0NvbmZpZ01hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1Rva2VuTWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdQb3J0Zm9saW9SZXBvTWFuYWdlcicpXG4gICAgKTtcblxuICAgIGNvbnN0IGdpdGh1YkF1dGhIYW5kbGVyID0gbmV3IEdpdEh1YkF1dGhIYW5kbGVyKFxuICAgICAgdGhpcy5yZXNvbHZlKCdHaXRIdWJBdXRoTWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdDb25maWdNYW5hZ2VyJyksXG4gICAgICBpbml0U2VydmljZSxcbiAgICAgIGluZGljYXRvclNlcnZpY2UsXG4gICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpXG4gICAgKTtcblxuICAgIGNvbnN0IGRpc3BsYXlDb25maWdIYW5kbGVyID0gbmV3IERpc3BsYXlDb25maWdIYW5kbGVyKFxuICAgICAgcGVyc29uYU1hbmFnZXIsXG4gICAgICBpbml0U2VydmljZSxcbiAgICAgIGluZGljYXRvclNlcnZpY2VcbiAgICApO1xuXG4gICAgY29uc3QgaWRlbnRpdHlIYW5kbGVyID0gbmV3IElkZW50aXR5SGFuZGxlcihcbiAgICAgIHBlcnNvbmFNYW5hZ2VyLFxuICAgICAgaW5pdFNlcnZpY2UsXG4gICAgICBpbmRpY2F0b3JTZXJ2aWNlXG4gICAgKTtcblxuICAgIGNvbnN0IGNvbmZpZ0hhbmRsZXIgPSBuZXcgQ29uZmlnSGFuZGxlcihcbiAgICAgIHRoaXMucmVzb2x2ZSgnQ29uZmlnTWFuYWdlcicpLFxuICAgICAgaW5pdFNlcnZpY2UsXG4gICAgICBpbmRpY2F0b3JTZXJ2aWNlXG4gICAgKTtcbiAgICBjb25zdCBzeW5jSGFuZGxlciA9IG5ldyBTeW5jSGFuZGxlcihcbiAgICAgIHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvU3luY01hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnQ29uZmlnTWFuYWdlcicpLFxuICAgICAgaW5kaWNhdG9yU2VydmljZVxuICAgICk7XG5cbiAgICBjb25zdCBlbmhhbmNlZEluZGV4SGFuZGxlciA9IG5ldyBFbmhhbmNlZEluZGV4SGFuZGxlcihcbiAgICAgIHRoaXMucmVzb2x2ZSgnRW5oYW5jZWRJbmRleE1hbmFnZXInKSxcbiAgICAgIGluZGljYXRvclNlcnZpY2VcbiAgICApO1xuXG4gICAgLy8gSXNzdWUgIzQ1MjogQ3JlYXRlIEdhdGVrZWVwZXIgcG9saWN5IGVuZ2luZSBpbnN0YW5jZVxuICAgIC8vIElzc3VlICM2Nzk6IGFsbG93RWxlbWVudFBvbGljeU92ZXJyaWRlcyB3aXJlZCBmcm9tIGVudiAoRE9MTEhPVVNFX0dBVEVLRUVQRVJfRUxFTUVOVF9QT0xJQ1lfT1ZFUlJJREVTKVxuICAgIGNvbnN0IGdhdGVrZWVwZXIgPSBuZXcgR2F0ZWtlZXBlcih1bmRlZmluZWQsIHtcbiAgICAgIGVuYWJsZUF1ZGl0TG9nZ2luZzogdHJ1ZSxcbiAgICAgIHJlcXVpcmVEYW5nZXJab25lVmVyaWZpY2F0aW9uOiB0cnVlLFxuICAgICAgYWxsb3dFbGVtZW50UG9saWN5T3ZlcnJpZGVzOiBlbnYuRE9MTEhPVVNFX0dBVEVLRUVQRVJfRUxFTUVOVF9QT0xJQ1lfT1ZFUlJJREVTLFxuICAgIH0pO1xuXG4gICAgLy8gQ3JlYXRlIE1DUEFRTEhhbmRsZXIgd2l0aCBhbGwgYXZhaWxhYmxlIGhhbmRsZXJzIGZvciBmdWxsIG9wZXJhdGlvbiBjb3ZlcmFnZSAoSXNzdWUgIzI0MSlcbiAgICAvLyBJc3N1ZSAjMzAxOiBQYXNzIENvbnRleHRUcmFja2VyIGZvciByZXF1ZXN0IGNvcnJlbGF0aW9uIG1ldGFkYXRhXG4gICAgLy8gSXNzdWUgIzQwMjogUGFzcyBEYW5nZXJab25lRW5mb3JjZXIgdmlhIEhhbmRsZXJSZWdpc3RyeVxuICAgIC8vIEJ1aWxkIGhhbmRsZXIgcmVnaXN0cnksIHRoZW4gYWRkIGxhenkgbWV0cmljc1NpbmsgZ2V0dGVyLlxuICAgIC8vIE1lbW9yeU1ldHJpY3NTaW5rIGlzIHJlZ2lzdGVyZWQgZHVyaW5nIGRlZmVycmVkU2V0dXAgKGFmdGVyIE1ldHJpY3NNYW5hZ2VyLnN0YXJ0KCkpLFxuICAgIC8vIHNvIGl0IGlzbid0IGF2YWlsYWJsZSBhdCBoYW5kbGVyIGNvbnN0cnVjdGlvbiB0aW1lIOKAlCByZXNvbHZlIG9uIGZpcnN0IGFjY2VzcyBpbnN0ZWFkLlxuICAgIGNvbnN0IGhhbmRsZXJEZXBzOiBIYW5kbGVyUmVnaXN0cnkgPSB7XG4gICAgICBlbGVtZW50Q1JVRDogZWxlbWVudENydWRIYW5kbGVyLFxuICAgICAgbWVtb3J5TWFuYWdlcjogdGhpcy5yZXNvbHZlKCdNZW1vcnlNYW5hZ2VyJyksXG4gICAgICBhZ2VudE1hbmFnZXI6IHRoaXMucmVzb2x2ZSgnQWdlbnRNYW5hZ2VyJyksXG4gICAgICB0ZW1wbGF0ZVJlbmRlcmVyOiB0aGlzLnJlc29sdmUoJ1RlbXBsYXRlUmVuZGVyZXInKSxcbiAgICAgIGVsZW1lbnRRdWVyeVNlcnZpY2U6IHRoaXMucmVzb2x2ZSgnRWxlbWVudFF1ZXJ5U2VydmljZScpLFxuICAgICAgLy8gTUNQLUFRTCBleHRlbnNpb24gaGFuZGxlcnMgKElzc3VlICMyNDEpXG4gICAgICBjb2xsZWN0aW9uSGFuZGxlcixcbiAgICAgIHBvcnRmb2xpb0hhbmRsZXIsXG4gICAgICBhdXRoSGFuZGxlcjogZ2l0aHViQXV0aEhhbmRsZXIsXG4gICAgICBjb25maWdIYW5kbGVyLFxuICAgICAgZW5oYW5jZWRJbmRleEhhbmRsZXIsXG4gICAgICBwZXJzb25hSGFuZGxlcixcbiAgICAgIHN5bmNIYW5kbGVyLFxuICAgICAgYnVpbGRJbmZvU2VydmljZTogdGhpcy5yZXNvbHZlKCdCdWlsZEluZm9TZXJ2aWNlJyksXG4gICAgICBjYWNoZU1lbW9yeUJ1ZGdldDogdGhpcy5yZXNvbHZlKCdDYWNoZU1lbW9yeUJ1ZGdldCcpLFxuICAgICAgZ2F0ZWtlZXBlciwgIC8vIElzc3VlICM0NTI6IFBvbGljeSBlbmdpbmUgZm9yIGVuZm9yY2UoKVxuICAgICAgZGFuZ2VyWm9uZUVuZm9yY2VyOiB0aGlzLnJlc29sdmUoJ0RhbmdlclpvbmVFbmZvcmNlcicpLFxuICAgICAgdmVyaWZpY2F0aW9uU3RvcmU6IHRoaXMucmVzb2x2ZSgnVmVyaWZpY2F0aW9uU3RvcmUnKSwgIC8vIElzc3VlICMxNDI6IFZlcmlmaWNhdGlvbiBjb2Rlc1xuICAgICAgdmVyaWZpY2F0aW9uTm90aWZpZXI6IHRoaXMucmVzb2x2ZSgnVmVyaWZpY2F0aW9uTm90aWZpZXInKSwgIC8vIElzc3VlICM1MjI6IE9TIGRpYWxvZyBmb3IgY29kZXNcbiAgICAgIG1lbW9yeVNpbms6IHRoaXMucmVzb2x2ZTxNZW1vcnlMb2dTaW5rPignTWVtb3J5TG9nU2luaycpLCAgLy8gSXNzdWUgIzUyODogQ1JVREUtcm91dGVkIHF1ZXJ5X2xvZ3NcbiAgICAgIHBlcmZvcm1hbmNlTW9uaXRvcjogdGhpcy5yZXNvbHZlPFBlcmZvcm1hbmNlTW9uaXRvcj4oJ1BlcmZvcm1hbmNlTW9uaXRvcicpLFxuICAgICAgb3BlcmF0aW9uTWV0cmljc1RyYWNrZXI6IHRoaXMucmVzb2x2ZTxPcGVyYXRpb25NZXRyaWNzVHJhY2tlcj4oJ09wZXJhdGlvbk1ldHJpY3NUcmFja2VyJyksXG4gICAgICBnYXRla2VlcGVyTWV0cmljc1RyYWNrZXI6IHRoaXMucmVzb2x2ZTxHYXRla2VlcGVyTWV0cmljc1RyYWNrZXI+KCdHYXRla2VlcGVyTWV0cmljc1RyYWNrZXInKSxcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoYW5kbGVyRGVwcywgJ21ldHJpY3NTaW5rJywge1xuICAgICAgZ2V0OiAoKSA9PiB7IHRyeSB7IHJldHVybiB0aGlzLnJlc29sdmU8TWVtb3J5TWV0cmljc1Npbms+KCdNZW1vcnlNZXRyaWNzU2luaycpOyB9IGNhdGNoIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSB9LFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICB9KTtcbiAgICBjb25zdCBtY3BBcWxIYW5kbGVyID0gbmV3IE1DUEFRTEhhbmRsZXIoaGFuZGxlckRlcHMsIHRoaXMucmVzb2x2ZTxDb250ZXh0VHJhY2tlcj4oJ0NvbnRleHRUcmFja2VyJykpO1xuXG4gICAgLy8gUmVnaXN0ZXIgbWNwQXFsSGFuZGxlciBhcyBhIHNpbmdsZXRvbiBmb3IgdGVzdCBhY2Nlc3NcbiAgICB0aGlzLnJlZ2lzdGVyKCdtY3BBcWxIYW5kbGVyJywgKCkgPT4gbWNwQXFsSGFuZGxlciwgeyBzaW5nbGV0b246IHRydWUgfSk7XG4gICAgdGhpcy5yZWdpc3RlcignZ2F0ZWtlZXBlcicsICgpID0+IGdhdGVrZWVwZXIsIHsgc2luZ2xldG9uOiB0cnVlIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHBlcnNvbmFIYW5kbGVyLFxuICAgICAgZWxlbWVudENydWRIYW5kbGVyLFxuICAgICAgY29sbGVjdGlvbkhhbmRsZXIsXG4gICAgICBwb3J0Zm9saW9IYW5kbGVyLFxuICAgICAgZ2l0aHViQXV0aEhhbmRsZXIsXG4gICAgICBkaXNwbGF5Q29uZmlnSGFuZGxlcixcbiAgICAgIGlkZW50aXR5SGFuZGxlcixcbiAgICAgIGNvbmZpZ0hhbmRsZXIsXG4gICAgICBzeW5jSGFuZGxlcixcbiAgICAgIHRvb2xSZWdpc3RyeTogdW5kZWZpbmVkIGFzIHVua25vd24gYXMgVG9vbFJlZ2lzdHJ5LCAvLyBObyB0b29sIHJlZ2lzdHJ5IGluIGJvb3RzdHJhcC1vbmx5IG1vZGVcbiAgICAgIGVuaGFuY2VkSW5kZXhIYW5kbGVyLFxuICAgICAgbWNwQXFsSGFuZGxlcixcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbGwgaGFuZGxlcnMgd2l0aCBkZXBlbmRlbmN5IGluamVjdGlvbiBhbmQgcmVnaXN0ZXIgTUNQIHRvb2xzLlxuICAgKiBAcGFyYW0gc2VydmVyIC0gTUNQIFNlcnZlciBpbnN0YW5jZSBmb3IgdG9vbCByZWdpc3RyYXRpb25cbiAgICovXG4gIHB1YmxpYyBhc3luYyBjcmVhdGVIYW5kbGVycyhzZXJ2ZXI6IFNlcnZlcik6IFByb21pc2U8SGFuZGxlckJ1bmRsZT4ge1xuICAgIGNvbnN0IGJ1bmRsZSA9IGF3YWl0IHRoaXMuYm9vdHN0cmFwSGFuZGxlcnMoKTtcblxuICAgIGNvbnN0IHRvb2xSZWdpc3RyeSA9IG5ldyBUb29sUmVnaXN0cnkoc2VydmVyKTtcblxuICAgIC8vIFJlZ2lzdGVyIHRvb2xzIGJhc2VkIG9uIE1DUF9JTlRFUkZBQ0VfTU9ERSAoSXNzdWUgIzIzNylcbiAgICAvLyAtICdkaXNjcmV0ZSc6IFJlZ2lzdGVyIGluZGl2aWR1YWwgZGlzY3JldGUgdG9vbHMgKH40MCB0b29scylcbiAgICAvLyAtICdtY3BhcWwnOiBSZWdpc3RlciBjb25zb2xpZGF0ZWQgTUNQLUFRTCBpbnRlcmZhY2Ugb25seSAofjQgb3IgMSB0b29scylcbiAgICAvLyBUb2tlbiBjb3VudHMgYXJlIGxvZ2dlZCBkeW5hbWljYWxseSBhdCBzdGFydHVwIHZpYSBsb2dUb29sVG9rZW5TdGF0cygpXG4gICAgY29uc3QgaW50ZXJmYWNlTW9kZSA9IGVudi5NQ1BfSU5URVJGQUNFX01PREU7XG4gICAgbG9nZ2VyLmluZm8oYE1DUCBJbnRlcmZhY2UgTW9kZTogJHtpbnRlcmZhY2VNb2RlfWApO1xuXG4gICAgaWYgKGludGVyZmFjZU1vZGUgPT09ICdkaXNjcmV0ZScpIHtcbiAgICAgIC8vIERpc2NyZXRlIG1vZGU6IFJlZ2lzdGVyIGFsbCBpbmRpdmlkdWFsIHRvb2xzXG4gICAgICB0b29sUmVnaXN0cnkucmVnaXN0ZXJQZXJzb25hVG9vbHMoYnVuZGxlLnBlcnNvbmFIYW5kbGVyKTtcbiAgICAgIHRvb2xSZWdpc3RyeS5yZWdpc3RlckVsZW1lbnRUb29scyhidW5kbGUuZWxlbWVudENydWRIYW5kbGVyKTtcbiAgICAgIHRvb2xSZWdpc3RyeS5yZWdpc3RlckNvbGxlY3Rpb25Ub29scyhidW5kbGUuY29sbGVjdGlvbkhhbmRsZXIpO1xuICAgICAgdG9vbFJlZ2lzdHJ5LnJlZ2lzdGVyUG9ydGZvbGlvVG9vbHMoYnVuZGxlLnBvcnRmb2xpb0hhbmRsZXIpO1xuICAgICAgdG9vbFJlZ2lzdHJ5LnJlZ2lzdGVyQXV0aFRvb2xzKGJ1bmRsZS5naXRodWJBdXRoSGFuZGxlcik7XG4gICAgICB0b29sUmVnaXN0cnkucmVnaXN0ZXJDb25maWdUb29scyh7XG4gICAgICAgIGhhbmRsZUNvbmZpZ09wZXJhdGlvbjogKG9wdGlvbnMpID0+XG4gICAgICAgICAgYnVuZGxlLmNvbmZpZ0hhbmRsZXIuaGFuZGxlQ29uZmlnT3BlcmF0aW9uKG9wdGlvbnMpLFxuICAgICAgICBoYW5kbGVTeW5jT3BlcmF0aW9uOiAob3B0aW9ucykgPT5cbiAgICAgICAgICBidW5kbGUuc3luY0hhbmRsZXIuaGFuZGxlU3luY09wZXJhdGlvbihvcHRpb25zKSxcbiAgICAgIH0pO1xuICAgICAgdG9vbFJlZ2lzdHJ5LnJlZ2lzdGVyRW5oYW5jZWRJbmRleFRvb2xzKFxuICAgICAgICBidW5kbGUuZW5oYW5jZWRJbmRleEhhbmRsZXIsXG4gICAgICAgIHRoaXMucmVzb2x2ZTxJbmRleENvbmZpZ01hbmFnZXI+KCdJbmRleENvbmZpZ01hbmFnZXInKS5nZXRDb25maWcoKVxuICAgICAgKTtcbiAgICAgIHRvb2xSZWdpc3RyeS5yZWdpc3RlckJ1aWxkSW5mb1Rvb2xzKHRoaXMucmVzb2x2ZSgnQnVpbGRJbmZvU2VydmljZScpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTUNQLUFRTCBtb2RlOiBSZWdpc3RlciBvbmx5IE1DUC1BUUwgdG9vbHNcbiAgICAgIHRvb2xSZWdpc3RyeS5yZWdpc3Rlck1DUEFRTFRvb2xzKGJ1bmRsZS5tY3BBcWxIYW5kbGVyKTtcbiAgICB9XG5cbiAgICAvLyBMb2cgdG9rZW4gc3RhdGlzdGljcyAoSXNzdWUgIzIzNyBlbmhhbmNlbWVudClcbiAgICB0aGlzLmxvZ1Rvb2xUb2tlblN0YXRzKHRvb2xSZWdpc3RyeSwgaW50ZXJmYWNlTW9kZSwgYnVuZGxlLm1jcEFxbEhhbmRsZXIsIHtcbiAgICAgIHBlcnNvbmFIYW5kbGVyOiBidW5kbGUucGVyc29uYUhhbmRsZXIsXG4gICAgICBlbGVtZW50Q3J1ZEhhbmRsZXI6IGJ1bmRsZS5lbGVtZW50Q3J1ZEhhbmRsZXIsXG4gICAgICBjb2xsZWN0aW9uSGFuZGxlcjogYnVuZGxlLmNvbGxlY3Rpb25IYW5kbGVyLFxuICAgICAgcG9ydGZvbGlvSGFuZGxlcjogYnVuZGxlLnBvcnRmb2xpb0hhbmRsZXIsXG4gICAgICBnaXRodWJBdXRoSGFuZGxlcjogYnVuZGxlLmdpdGh1YkF1dGhIYW5kbGVyLFxuICAgICAgY29uZmlnSGFuZGxlcjogYnVuZGxlLmNvbmZpZ0hhbmRsZXIsXG4gICAgICBzeW5jSGFuZGxlcjogYnVuZGxlLnN5bmNIYW5kbGVyLFxuICAgICAgZW5oYW5jZWRJbmRleEhhbmRsZXI6IGJ1bmRsZS5lbmhhbmNlZEluZGV4SGFuZGxlcixcbiAgICB9KTtcblxuICAgIHRoaXMucmVzb2x2ZTxTZXJ2ZXJTZXR1cD4oJ1NlcnZlclNldHVwJykuc2V0dXBTZXJ2ZXIoc2VydmVyLCB0b29sUmVnaXN0cnksIGJ1bmRsZS5lbGVtZW50Q3J1ZEhhbmRsZXIpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmJ1bmRsZSxcbiAgICAgIHRvb2xSZWdpc3RyeSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIExvZyB0b29sIHRva2VuIHN0YXRpc3RpY3MgZm9yIG1vbml0b3JpbmcgYW5kIGRvY3VtZW50YXRpb24uXG4gICAqIFNob3dzIGN1cnJlbnQgbW9kZSB0b2tlbiBjb3VudCwgYWx0ZXJuYXRpdmUgbW9kZSBjb21wYXJpc29uLCBhbmQgc2F2aW5ncy5cbiAgICpcbiAgICogVGhpcyBpcyBpbXBvcnRhbnQgZm9yOlxuICAgKiAxLiBEb2N1bWVudGluZyBhY3R1YWwgdG9rZW4gc2F2aW5ncyBhY2hpZXZlZFxuICAgKiAyLiBNb25pdG9yaW5nIGNvbnRleHQgd2luZG93IHVzYWdlXG4gICAqIDMuIFN1cHBvcnRpbmcgZnV0dXJlIE1DUC1BUUwgYWRhcHRlciBkZXZlbG9wbWVudFxuICAgKlxuICAgKiBJc3N1ZSAjMjM3IGVuaGFuY2VtZW50XG4gICAqL1xuICBwcml2YXRlIGxvZ1Rvb2xUb2tlblN0YXRzKFxuICAgIHRvb2xSZWdpc3RyeTogVG9vbFJlZ2lzdHJ5LFxuICAgIGludGVyZmFjZU1vZGU6ICdkaXNjcmV0ZScgfCAnbWNwYXFsJyxcbiAgICBtY3BBcWxIYW5kbGVyOiBNQ1BBUUxIYW5kbGVyLFxuICAgIGRpc2NyZXRlSGFuZGxlcnM6IHtcbiAgICAgIHBlcnNvbmFIYW5kbGVyOiBQZXJzb25hSGFuZGxlcjtcbiAgICAgIGVsZW1lbnRDcnVkSGFuZGxlcjogRWxlbWVudENSVURIYW5kbGVyO1xuICAgICAgY29sbGVjdGlvbkhhbmRsZXI6IENvbGxlY3Rpb25IYW5kbGVyO1xuICAgICAgcG9ydGZvbGlvSGFuZGxlcjogUG9ydGZvbGlvSGFuZGxlcjtcbiAgICAgIGdpdGh1YkF1dGhIYW5kbGVyOiBHaXRIdWJBdXRoSGFuZGxlcjtcbiAgICAgIGNvbmZpZ0hhbmRsZXI6IENvbmZpZ0hhbmRsZXI7XG4gICAgICBzeW5jSGFuZGxlcjogU3luY0hhbmRsZXI7XG4gICAgICBlbmhhbmNlZEluZGV4SGFuZGxlcjogRW5oYW5jZWRJbmRleEhhbmRsZXI7XG4gICAgfVxuICApOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50VG9rZW5zID0gdG9vbFJlZ2lzdHJ5LmdldFRvb2xUb2tlbkVzdGltYXRlKCk7XG4gICAgY29uc3QgY3VycmVudFRvb2xDb3VudCA9IHRvb2xSZWdpc3RyeS5nZXRUb29sQ291bnQoKTtcblxuICAgIC8vIENhbGN1bGF0ZSBhbHRlcm5hdGl2ZSBtb2RlIHRva2VucyBmb3IgY29tcGFyaXNvblxuICAgIGxldCBhbHRlcm5hdGl2ZVRva2VuczogbnVtYmVyO1xuICAgIGxldCBhbHRlcm5hdGl2ZVRvb2xDb3VudDogbnVtYmVyO1xuXG4gICAgaWYgKGludGVyZmFjZU1vZGUgPT09ICdkaXNjcmV0ZScpIHtcbiAgICAgIC8vIEN1cnJlbnQgaXMgZGlzY3JldGUsIGNhbGN1bGF0ZSB3aGF0IG1jcGFxbCB3b3VsZCBiZVxuICAgICAgY29uc3QgdGVtcFJlZ2lzdHJ5ID0gbmV3IFRvb2xSZWdpc3RyeSh7fSBhcyBTZXJ2ZXIpO1xuICAgICAgdGVtcFJlZ2lzdHJ5LnJlZ2lzdGVyTUNQQVFMVG9vbHMobWNwQXFsSGFuZGxlcik7XG4gICAgICBhbHRlcm5hdGl2ZVRva2VucyA9IHRlbXBSZWdpc3RyeS5nZXRUb29sVG9rZW5Fc3RpbWF0ZSgpO1xuICAgICAgYWx0ZXJuYXRpdmVUb29sQ291bnQgPSB0ZW1wUmVnaXN0cnkuZ2V0VG9vbENvdW50KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEN1cnJlbnQgaXMgbWNwYXFsLCBjYWxjdWxhdGUgd2hhdCBkaXNjcmV0ZSB3b3VsZCBiZVxuICAgICAgY29uc3QgdGVtcFJlZ2lzdHJ5ID0gbmV3IFRvb2xSZWdpc3RyeSh7fSBhcyBTZXJ2ZXIpO1xuICAgICAgdGVtcFJlZ2lzdHJ5LnJlZ2lzdGVyUGVyc29uYVRvb2xzKGRpc2NyZXRlSGFuZGxlcnMucGVyc29uYUhhbmRsZXIpO1xuICAgICAgdGVtcFJlZ2lzdHJ5LnJlZ2lzdGVyRWxlbWVudFRvb2xzKGRpc2NyZXRlSGFuZGxlcnMuZWxlbWVudENydWRIYW5kbGVyKTtcbiAgICAgIHRlbXBSZWdpc3RyeS5yZWdpc3RlckNvbGxlY3Rpb25Ub29scyhkaXNjcmV0ZUhhbmRsZXJzLmNvbGxlY3Rpb25IYW5kbGVyKTtcbiAgICAgIHRlbXBSZWdpc3RyeS5yZWdpc3RlclBvcnRmb2xpb1Rvb2xzKGRpc2NyZXRlSGFuZGxlcnMucG9ydGZvbGlvSGFuZGxlcik7XG4gICAgICB0ZW1wUmVnaXN0cnkucmVnaXN0ZXJBdXRoVG9vbHMoZGlzY3JldGVIYW5kbGVycy5naXRodWJBdXRoSGFuZGxlcik7XG4gICAgICB0ZW1wUmVnaXN0cnkucmVnaXN0ZXJDb25maWdUb29scyh7XG4gICAgICAgIGhhbmRsZUNvbmZpZ09wZXJhdGlvbjogKG9wdGlvbnMpID0+XG4gICAgICAgICAgZGlzY3JldGVIYW5kbGVycy5jb25maWdIYW5kbGVyLmhhbmRsZUNvbmZpZ09wZXJhdGlvbihvcHRpb25zKSxcbiAgICAgICAgaGFuZGxlU3luY09wZXJhdGlvbjogKG9wdGlvbnMpID0+XG4gICAgICAgICAgZGlzY3JldGVIYW5kbGVycy5zeW5jSGFuZGxlci5oYW5kbGVTeW5jT3BlcmF0aW9uKG9wdGlvbnMpLFxuICAgICAgfSk7XG4gICAgICB0ZW1wUmVnaXN0cnkucmVnaXN0ZXJFbmhhbmNlZEluZGV4VG9vbHMoXG4gICAgICAgIGRpc2NyZXRlSGFuZGxlcnMuZW5oYW5jZWRJbmRleEhhbmRsZXIsXG4gICAgICAgIHRoaXMucmVzb2x2ZTxJbmRleENvbmZpZ01hbmFnZXI+KCdJbmRleENvbmZpZ01hbmFnZXInKS5nZXRDb25maWcoKVxuICAgICAgKTtcbiAgICAgIHRlbXBSZWdpc3RyeS5yZWdpc3RlckJ1aWxkSW5mb1Rvb2xzKHRoaXMucmVzb2x2ZSgnQnVpbGRJbmZvU2VydmljZScpKTtcbiAgICAgIGFsdGVybmF0aXZlVG9rZW5zID0gdGVtcFJlZ2lzdHJ5LmdldFRvb2xUb2tlbkVzdGltYXRlKCk7XG4gICAgICBhbHRlcm5hdGl2ZVRvb2xDb3VudCA9IHRlbXBSZWdpc3RyeS5nZXRUb29sQ291bnQoKTtcbiAgICB9XG5cbiAgICAvLyBDYWxjdWxhdGUgc2F2aW5ncyAocG9zaXRpdmUgPSBjdXJyZW50IG1vZGUgc2F2ZXMgdG9rZW5zKVxuICAgIGNvbnN0IHRva2VuRGlmZiA9IGFsdGVybmF0aXZlVG9rZW5zIC0gY3VycmVudFRva2VucztcbiAgICBjb25zdCBzYXZpbmdzUGVyY2VudCA9IGFsdGVybmF0aXZlVG9rZW5zID4gMFxuICAgICAgPyAoKHRva2VuRGlmZiAvIGFsdGVybmF0aXZlVG9rZW5zKSAqIDEwMCkudG9GaXhlZCgxKVxuICAgICAgOiAnMCc7XG5cbiAgICAvLyBMb2cgdGhlIGNvbXBhcmlzb25cbiAgICBsb2dnZXIuaW5mbyhcbiAgICAgIGBUb29sIFJlZ2lzdHJhdGlvbiBDb21wbGV0ZTogJHtjdXJyZW50VG9vbENvdW50fSB0b29scywgfiR7Y3VycmVudFRva2Vucy50b0xvY2FsZVN0cmluZygpfSB0b2tlbnNgXG4gICAgKTtcblxuICAgIGlmIChpbnRlcmZhY2VNb2RlID09PSAnbWNwYXFsJykge1xuICAgICAgLy8gSGlnaGxpZ2h0IHNhdmluZ3Mgd2hlbiB1c2luZyBtY3BhcWxcbiAgICAgIGxvZ2dlci5pbmZvKFxuICAgICAgICBgVG9rZW4gU2F2aW5nczogJHt0b2tlbkRpZmYudG9Mb2NhbGVTdHJpbmcoKX0gdG9rZW5zIHNhdmVkICgke3NhdmluZ3NQZXJjZW50fSUpIHZzIGRpc2NyZXRlIG1vZGUgKCR7YWx0ZXJuYXRpdmVUb29sQ291bnR9IHRvb2xzLCB+JHthbHRlcm5hdGl2ZVRva2Vucy50b0xvY2FsZVN0cmluZygpfSB0b2tlbnMpYFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSW4gZGlzY3JldGUgbW9kZSwgc2hvdyB3aGF0IG1jcGFxbCB3b3VsZCBzYXZlXG4gICAgICBsb2dnZXIuaW5mbyhcbiAgICAgICAgYEFsdGVybmF0aXZlOiBtY3BhcWwgbW9kZSB3b3VsZCB1c2UgJHthbHRlcm5hdGl2ZVRvb2xDb3VudH0gdG9vbHMsIH4ke2FsdGVybmF0aXZlVG9rZW5zLnRvTG9jYWxlU3RyaW5nKCl9IHRva2VucyAoJHtNYXRoLmFicyhOdW1iZXIoc2F2aW5nc1BlcmNlbnQpKX0lICR7dG9rZW5EaWZmIDwgMCA/ICdtb3JlJyA6ICdsZXNzJ30pYFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV2lyZSBhbGwgbWV0cmljIGNvbGxlY3RvcnMgaW50byB0aGUgTWV0cmljc01hbmFnZXIuXG4gICAqIE1pcnJvcnMgd2lyZUxvZ0hvb2tzKCkg4oCUIGtlZXBzIGNvbGxlY3RvciByZWdpc3RyYXRpb24gb3V0IG9mIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICovXG4gIHByaXZhdGUgd2lyZU1ldHJpY3NDb2xsZWN0b3JzKG1ldHJpY3NNYW5hZ2VyOiBNZXRyaWNzTWFuYWdlcik6IHZvaWQge1xuICAgIC8vIFBlcmZvcm1hbmNlTW9uaXRvciAoaW5zdGFuY2UpXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG1vbml0b3IgPSB0aGlzLnJlc29sdmU8aW1wb3J0KCcuLi91dGlscy9QZXJmb3JtYW5jZU1vbml0b3IuanMnKS5QZXJmb3JtYW5jZU1vbml0b3I+KCdQZXJmb3JtYW5jZU1vbml0b3InKTtcbiAgICAgIG1ldHJpY3NNYW5hZ2VyLnJlZ2lzdGVyQ29sbGVjdG9yKG5ldyBQZXJmb3JtYW5jZU1vbml0b3JDb2xsZWN0b3IobW9uaXRvcikpO1xuICAgIH0gY2F0Y2ggeyAvKiBub3QgcmVnaXN0ZXJlZCAqLyB9XG5cbiAgICAvLyBMUlVDYWNoZSBpbnN0YW5jZXMg4oCUIEFQSSBjYWNoZSArIGFsbCBlbGVtZW50IG1hbmFnZXIgY2FjaGVzXG4gICAgY29uc3QgY2FjaGVzID0gdGhpcy5jb2xsZWN0THJ1Q2FjaGVzRm9yTWV0cmljcygpO1xuICAgIGlmIChjYWNoZXMubGVuZ3RoID4gMCkge1xuICAgICAgbWV0cmljc01hbmFnZXIucmVnaXN0ZXJDb2xsZWN0b3IobmV3IExSVUNhY2hlQ29sbGVjdG9yKGNhY2hlcykpO1xuICAgIH1cblxuICAgIC8vIFNlY3VyaXR5TW9uaXRvciAoc3RhdGljKVxuICAgIHRyeSB7XG4gICAgICBtZXRyaWNzTWFuYWdlci5yZWdpc3RlckNvbGxlY3RvcihuZXcgU2VjdXJpdHlNb25pdG9yQ29sbGVjdG9yKCkpO1xuICAgIH0gY2F0Y2ggeyAvKiBub3QgYXZhaWxhYmxlICovIH1cblxuICAgIC8vIFNlY3VyaXR5VGVsZW1ldHJ5IChpbnN0YW5jZSlcbiAgICB0cnkge1xuICAgICAgY29uc3QgdGVsZW1ldHJ5ID0gdGhpcy5yZXNvbHZlPGltcG9ydCgnLi4vc2VjdXJpdHkvdGVsZW1ldHJ5L1NlY3VyaXR5VGVsZW1ldHJ5LmpzJykuU2VjdXJpdHlUZWxlbWV0cnk+KCdTZWN1cml0eVRlbGVtZXRyeScpO1xuICAgICAgbWV0cmljc01hbmFnZXIucmVnaXN0ZXJDb2xsZWN0b3IobmV3IFNlY3VyaXR5VGVsZW1ldHJ5Q29sbGVjdG9yKHRlbGVtZXRyeSkpO1xuICAgIH0gY2F0Y2ggeyAvKiBub3QgcmVnaXN0ZXJlZCAqLyB9XG5cbiAgICAvLyBGaWxlTG9ja01hbmFnZXIgKGluc3RhbmNlKVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBsb2NrTWFuYWdlciA9IHRoaXMucmVzb2x2ZTxpbXBvcnQoJy4uL3NlY3VyaXR5L2ZpbGVMb2NrTWFuYWdlci5qcycpLkZpbGVMb2NrTWFuYWdlcj4oJ0ZpbGVMb2NrTWFuYWdlcicpO1xuICAgICAgbWV0cmljc01hbmFnZXIucmVnaXN0ZXJDb2xsZWN0b3IobmV3IEZpbGVMb2NrTWFuYWdlckNvbGxlY3Rvcihsb2NrTWFuYWdlcikpO1xuICAgIH0gY2F0Y2ggeyAvKiBub3QgcmVnaXN0ZXJlZCAqLyB9XG5cbiAgICAvLyBEZWZhdWx0RWxlbWVudFByb3ZpZGVyIChzdGF0aWMpXG4gICAgdHJ5IHtcbiAgICAgIG1ldHJpY3NNYW5hZ2VyLnJlZ2lzdGVyQ29sbGVjdG9yKG5ldyBEZWZhdWx0RWxlbWVudFByb3ZpZGVyQ29sbGVjdG9yKCkpO1xuICAgIH0gY2F0Y2ggeyAvKiBub3QgYXZhaWxhYmxlICovIH1cblxuICAgIC8vIFRyaWdnZXJNZXRyaWNzVHJhY2tlciAoaW5zdGFuY2Ug4oCUIGNyZWF0ZWQgaW5zaWRlIEVuaGFuY2VkSW5kZXhNYW5hZ2VyIGZhY3RvcnkpXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGVuaGFuY2VkSW5kZXggPSB0aGlzLnJlc29sdmU8aW1wb3J0KCcuLi9wb3J0Zm9saW8vRW5oYW5jZWRJbmRleE1hbmFnZXIuanMnKS5FbmhhbmNlZEluZGV4TWFuYWdlcj4oJ0VuaGFuY2VkSW5kZXhNYW5hZ2VyJyk7XG4gICAgICAvLyBFbmhhbmNlZEluZGV4TWFuYWdlciBleHBvc2VzIHRyYWNrZXIgdmlhIHB1YmxpYyBnZXR0ZXIgaWYgYXZhaWxhYmxlXG4gICAgICBpZiAoJ3RyaWdnZXJNZXRyaWNzVHJhY2tlcicgaW4gZW5oYW5jZWRJbmRleCkge1xuICAgICAgICBjb25zdCB0cmFja2VyID0gKGVuaGFuY2VkSW5kZXggYXMgYW55KS50cmlnZ2VyTWV0cmljc1RyYWNrZXI7XG4gICAgICAgIGlmICh0cmFja2VyKSB7XG4gICAgICAgICAgbWV0cmljc01hbmFnZXIucmVnaXN0ZXJDb2xsZWN0b3IobmV3IFRyaWdnZXJNZXRyaWNzVHJhY2tlckNvbGxlY3Rvcih0cmFja2VyKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIHsgLyogbm90IHJlZ2lzdGVyZWQgKi8gfVxuXG4gICAgLy8gT3BlcmF0aW9uYWxUZWxlbWV0cnkgKGluc3RhbmNlKVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBvcFRlbGVtZXRyeSA9IHRoaXMucmVzb2x2ZTxpbXBvcnQoJy4uL3RlbGVtZXRyeS9PcGVyYXRpb25hbFRlbGVtZXRyeS5qcycpLk9wZXJhdGlvbmFsVGVsZW1ldHJ5PignT3BlcmF0aW9uYWxUZWxlbWV0cnknKTtcbiAgICAgIG1ldHJpY3NNYW5hZ2VyLnJlZ2lzdGVyQ29sbGVjdG9yKG5ldyBPcGVyYXRpb25hbFRlbGVtZXRyeUNvbGxlY3RvcihvcFRlbGVtZXRyeSkpO1xuICAgIH0gY2F0Y2ggeyAvKiBub3QgcmVnaXN0ZXJlZCAqLyB9XG5cbiAgICAvLyBPcGVyYXRpb25NZXRyaWNzVHJhY2tlciAoaW5zdGFuY2UpXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG9wVHJhY2tlciA9IHRoaXMucmVzb2x2ZTxPcGVyYXRpb25NZXRyaWNzVHJhY2tlcj4oJ09wZXJhdGlvbk1ldHJpY3NUcmFja2VyJyk7XG4gICAgICBtZXRyaWNzTWFuYWdlci5yZWdpc3RlckNvbGxlY3RvcihuZXcgT3BlcmF0aW9uTWV0cmljc0NvbGxlY3RvcihvcFRyYWNrZXIpKTtcbiAgICB9IGNhdGNoIHsgLyogbm90IHJlZ2lzdGVyZWQgKi8gfVxuXG4gICAgLy8gR2F0ZWtlZXBlck1ldHJpY3NUcmFja2VyIChpbnN0YW5jZSlcbiAgICB0cnkge1xuICAgICAgY29uc3QgZ2tUcmFja2VyID0gdGhpcy5yZXNvbHZlPEdhdGVrZWVwZXJNZXRyaWNzVHJhY2tlcj4oJ0dhdGVrZWVwZXJNZXRyaWNzVHJhY2tlcicpO1xuICAgICAgbWV0cmljc01hbmFnZXIucmVnaXN0ZXJDb2xsZWN0b3IobmV3IEdhdGVrZWVwZXJNZXRyaWNzQ29sbGVjdG9yKGdrVHJhY2tlcikpO1xuICAgIH0gY2F0Y2ggeyAvKiBub3QgcmVnaXN0ZXJlZCAqLyB9XG4gIH1cblxuICBwcml2YXRlIGNvbGxlY3RMcnVDYWNoZXNGb3JNZXRyaWNzKCk6IEFycmF5PHsgbmFtZTogc3RyaW5nOyBpbnN0YW5jZTogaW1wb3J0KCcuLi9jYWNoZS9MUlVDYWNoZS5qcycpLkxSVUNhY2hlPHVua25vd24+IH0+IHtcbiAgICBjb25zdCBjYWNoZXM6IEFycmF5PHsgbmFtZTogc3RyaW5nOyBpbnN0YW5jZTogaW1wb3J0KCcuLi9jYWNoZS9MUlVDYWNoZS5qcycpLkxSVUNhY2hlPHVua25vd24+IH0+ID0gW107XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGFwaUNhY2hlID0gdGhpcy5yZXNvbHZlPHsgZ2V0U3RhdHMoKTogaW1wb3J0KCcuLi9jYWNoZS9MUlVDYWNoZS5qcycpLkNhY2hlU3RhdHMgfT4oJ0FQSUNhY2hlJyk7XG4gICAgICBjYWNoZXMucHVzaCh7IG5hbWU6ICdBUElDYWNoZScsIGluc3RhbmNlOiBhcGlDYWNoZSBhcyBhbnkgfSk7XG4gICAgfSBjYXRjaCB7IC8qIG5vdCBhdmFpbGFibGUgKi8gfVxuXG4gICAgY29uc3QgbWFuYWdlck5hbWVzID0gW1xuICAgICAgJ1BlcnNvbmFNYW5hZ2VyJywgJ1NraWxsTWFuYWdlcicsICdBZ2VudE1hbmFnZXInLFxuICAgICAgJ01lbW9yeU1hbmFnZXInLCAnRW5zZW1ibGVNYW5hZ2VyJywgJ1RlbXBsYXRlTWFuYWdlcicsXG4gICAgXSBhcyBjb25zdDtcbiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgbWFuYWdlck5hbWVzKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBtZ3IgPSB0aGlzLnJlc29sdmU8aW1wb3J0KCcuLi9lbGVtZW50cy9iYXNlL0Jhc2VFbGVtZW50TWFuYWdlci5qcycpLkJhc2VFbGVtZW50TWFuYWdlcjxhbnk+PihuYW1lKTtcbiAgICAgICAgY2FjaGVzLnB1c2goLi4ubWdyLmdldE1ldHJpY3NDYWNoZXMoKSk7XG4gICAgICB9IGNhdGNoIHsgLyogbm90IHJlZ2lzdGVyZWQgKi8gfVxuICAgIH1cblxuICAgIHJldHVybiBjYWNoZXM7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZGlzcG9zZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBDbG9zZSB0aGUgSFRUUCBzZXJ2ZXIgZmlyc3Qgc28gdGhlIHBvcnQgaXMgZnJlZWQgaW1tZWRpYXRlbHkgKCMxODU2KVxuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IHNodXRkb3duV2ViU2VydmVyIH0gPSBhd2FpdCBpbXBvcnQoJy4uL3dlYi9zZXJ2ZXIuanMnKTtcbiAgICAgIHNodXRkb3duV2ViU2VydmVyKCk7XG4gICAgfSBjYXRjaCB7IC8qIHdlYiBzZXJ2ZXIgbm90IHN0YXJ0ZWQgKi8gfVxuXG4gICAgLy8gQ2xvc2UgTWV0cmljc01hbmFnZXIgYmVmb3JlIGdlbmVyYWwgZGlzcG9zYWwgKGZsdXNoIGZpbmFsIHNuYXBzaG90KVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBtZXRyaWNzTWFuYWdlciA9IHRoaXMucmVzb2x2ZTxNZXRyaWNzTWFuYWdlcj4oJ01ldHJpY3NNYW5hZ2VyJyk7XG4gICAgICBhd2FpdCBtZXRyaWNzTWFuYWdlci5jbG9zZSgpO1xuICAgIH0gY2F0Y2ggeyAvKiBtZXRyaWNzIG5vdCBlbmFibGVkIG9yIG5vdCByZWdpc3RlcmVkICovIH1cblxuICAgIC8vIENsZWFuIHVwIGxvZyBob29rcyBiZWZvcmUgZGlzcG9zaW5nIHNlcnZpY2VzXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNsZWFudXBzID0gdGhpcy5yZXNvbHZlPCgoKSA9PiB2b2lkKVtdPignX2xvZ0hvb2tDbGVhbnVwcycpO1xuICAgICAgY2xlYW51cHMuZm9yRWFjaChmbiA9PiBmbigpKTtcbiAgICB9IGNhdGNoIHsgLyogaG9va3Mgbm90IHlldCB3aXJlZCAqLyB9XG5cbiAgICBjb25zdCBkaXNwb3NhbFByb21pc2VzID0gdGhpcy5idWlsZERpc3Bvc2FsUHJvbWlzZXMoKTtcbiAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKGRpc3Bvc2FsUHJvbWlzZXMubWFwKGQgPT4gZC5wcm9taXNlKSk7XG4gICAgdGhpcy5yZXBvcnREaXNwb3NhbEZhaWx1cmVzKGRpc3Bvc2FsUHJvbWlzZXMsIHJlc3VsdHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZERpc3Bvc2FsUHJvbWlzZXMoKTogQXJyYXk8eyBuYW1lOiBzdHJpbmc7IHByb21pc2U6IFByb21pc2U8dm9pZD4gfT4ge1xuICAgIGNvbnN0IHByb21pc2VzOiBBcnJheTx7IG5hbWU6IHN0cmluZzsgcHJvbWlzZTogUHJvbWlzZTx2b2lkPiB9PiA9IFtdO1xuICAgIGZvciAoY29uc3QgW25hbWUsIHNlcnZpY2VdIG9mIHRoaXMuc2VydmljZXMpIHtcbiAgICAgIGlmICghc2VydmljZS5pbnN0YW5jZSkgY29udGludWU7XG4gICAgICBjb25zdCBpbnN0YW5jZSA9IHNlcnZpY2UuaW5zdGFuY2UgYXMgYW55O1xuICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5kaXNwb3NlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHByb21pc2VzLnB1c2goeyBuYW1lLCBwcm9taXNlOiBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IGluc3RhbmNlLmRpc3Bvc2UoKSkgfSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnN0YW5jZS5jbGVhbnVwID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHByb21pc2VzLnB1c2goeyBuYW1lLCBwcm9taXNlOiBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IGluc3RhbmNlLmNsZWFudXAoKSkgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwcm9taXNlcztcbiAgfVxuXG4gIHByaXZhdGUgcmVwb3J0RGlzcG9zYWxGYWlsdXJlcyhcbiAgICBkaXNwb3NhbFByb21pc2VzOiBBcnJheTx7IG5hbWU6IHN0cmluZzsgcHJvbWlzZTogUHJvbWlzZTx2b2lkPiB9PixcbiAgICByZXN1bHRzOiBQcm9taXNlU2V0dGxlZFJlc3VsdDx2b2lkPltdLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBmYWlsdXJlczogc3RyaW5nW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IFtpbmRleCwgcmVzdWx0XSBvZiByZXN1bHRzLmVudHJpZXMoKSkge1xuICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09ICdyZWplY3RlZCcpIHtcbiAgICAgICAgY29uc3Qgc2VydmljZU5hbWUgPSBkaXNwb3NhbFByb21pc2VzW2luZGV4XS5uYW1lO1xuICAgICAgICBjb25zdCBlcnJvciA9IHJlc3VsdC5yZWFzb24gaW5zdGFuY2VvZiBFcnJvciA/IHJlc3VsdC5yZWFzb24gOiBuZXcgRXJyb3IoU3RyaW5nKHJlc3VsdC5yZWFzb24pKTtcbiAgICAgICAgZmFpbHVyZXMucHVzaChzZXJ2aWNlTmFtZSk7XG4gICAgICAgIGxvZ2dlci53YXJuKGBGYWlsZWQgdG8gZGlzcG9zZSBzZXJ2aWNlICcke3NlcnZpY2VOYW1lfSdgLCB7IGVycm9yIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZmFpbHVyZXMubGVuZ3RoID4gMCkge1xuICAgICAgbG9nZ2VyLndhcm4oYENvbnRhaW5lciBkaXNwb3NhbCBjb21wbGV0ZWQgd2l0aCAke2ZhaWx1cmVzLmxlbmd0aH0gZmFpbHVyZShzKSBvdXQgb2YgJHtkaXNwb3NhbFByb21pc2VzLmxlbmd0aH0gc2VydmljZXNgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGluaXRpYWxpemVDb2xsZWN0aW9uQ2FjaGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbGxlY3Rpb25DYWNoZSA9IHRoaXMucmVzb2x2ZTxDb2xsZWN0aW9uQ2FjaGU+KCdDb2xsZWN0aW9uQ2FjaGUnKTtcbiAgICAgIGNvbnN0IGlzQ2FjaGVWYWxpZCA9IGF3YWl0IGNvbGxlY3Rpb25DYWNoZS5pc0NhY2hlVmFsaWQoKTtcbiAgICAgIGlmICghaXNDYWNoZVZhbGlkKSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKFwiSW5pdGlhbGl6aW5nIGNvbGxlY3Rpb24gY2FjaGUgd2l0aCBzZWVkIGRhdGEuLi5cIik7XG4gICAgICAgIGNvbnN0IHsgQ29sbGVjdGlvblNlZWRlciB9ID0gYXdhaXQgaW1wb3J0KFwiLi4vY29sbGVjdGlvbi9Db2xsZWN0aW9uU2VlZGVyLmpzXCIpO1xuICAgICAgICBjb25zdCBzZWVkRGF0YSA9IENvbGxlY3Rpb25TZWVkZXIuZ2V0U2VlZERhdGEoKTtcbiAgICAgICAgYXdhaXQgY29sbGVjdGlvbkNhY2hlLnNhdmVDYWNoZShzZWVkRGF0YSk7XG4gICAgICAgIGxvZ2dlci5pbmZvKGBDb2xsZWN0aW9uIGNhY2hlIGluaXRpYWxpemVkIHdpdGggJHtzZWVkRGF0YS5sZW5ndGh9IGl0ZW1zYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBzdGF0cyA9IGF3YWl0IGNvbGxlY3Rpb25DYWNoZS5nZXRDYWNoZVN0YXRzKCk7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgQ29sbGVjdGlvbiBjYWNoZSBhbHJlYWR5IHZhbGlkIHdpdGggJHtzdGF0cy5pdGVtQ291bnR9IGl0ZW1zYCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIEVycm9ySGFuZGxlci5sb2dFcnJvcihcIkRvbGxob3VzZUNvbnRhaW5lci5pbml0aWFsaXplQ29sbGVjdGlvbkNhY2hlXCIsIGVycm9yKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|