@dollhousemcp/mcp-server 2.0.12-rc.9 → 2.0.13
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 +66 -0
- package/README.md +4 -4
- package/README.md.backup +5 -5
- package/README.npm.md +4 -4
- package/dist/di/Container.d.ts +14 -0
- package/dist/di/Container.d.ts.map +1 -1
- package/dist/di/Container.js +43 -26
- package/dist/elements/agents/AgentManager.d.ts +11 -4
- package/dist/elements/agents/AgentManager.d.ts.map +1 -1
- package/dist/elements/agents/AgentManager.js +38 -11
- package/dist/elements/base/BaseElementManager.d.ts +10 -0
- package/dist/elements/base/BaseElementManager.d.ts.map +1 -1
- package/dist/elements/base/BaseElementManager.js +26 -1
- package/dist/elements/ensembles/EnsembleManager.d.ts +1 -0
- package/dist/elements/ensembles/EnsembleManager.d.ts.map +1 -1
- package/dist/elements/ensembles/EnsembleManager.js +13 -2
- package/dist/elements/templates/Template.d.ts +33 -1
- package/dist/elements/templates/Template.d.ts.map +1 -1
- package/dist/elements/templates/Template.js +74 -15
- package/dist/elements/templates/TemplateManager.d.ts.map +1 -1
- package/dist/elements/templates/TemplateManager.js +8 -1
- package/dist/generated/version.d.ts +2 -2
- package/dist/generated/version.d.ts.map +1 -1
- package/dist/generated/version.js +3 -3
- package/dist/handlers/element-crud/createElement.js +2 -2
- package/dist/handlers/mcp-aql/SchemaDispatcher.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/SchemaDispatcher.js +8 -1
- package/dist/handlers/strategies/EnsembleActivationStrategy.d.ts +3 -0
- package/dist/handlers/strategies/EnsembleActivationStrategy.d.ts.map +1 -1
- package/dist/handlers/strategies/EnsembleActivationStrategy.js +48 -9
- package/dist/index.js +19 -13
- package/dist/portfolio/DefaultElementProvider.d.ts +8 -0
- package/dist/portfolio/DefaultElementProvider.d.ts.map +1 -1
- package/dist/portfolio/DefaultElementProvider.js +43 -1
- package/dist/security/contentValidator.d.ts +15 -0
- package/dist/security/contentValidator.d.ts.map +1 -1
- package/dist/security/contentValidator.js +40 -2
- package/dist/utils/TemplateRenderer.d.ts +9 -0
- package/dist/utils/TemplateRenderer.d.ts.map +1 -1
- package/dist/utils/TemplateRenderer.js +21 -1
- package/dist/web/console/IngestRoutes.d.ts.map +1 -1
- package/dist/web/console/IngestRoutes.js +193 -59
- package/dist/web/console/SessionNames.d.ts +18 -5
- package/dist/web/console/SessionNames.d.ts.map +1 -1
- package/dist/web/console/SessionNames.js +63 -8
- package/dist/web/console/StaleProcessRecovery.d.ts.map +1 -1
- package/dist/web/console/StaleProcessRecovery.js +5 -4
- package/dist/web/console/UnifiedConsole.js +3 -3
- package/dist/web/console/consoleToken.js +3 -3
- package/dist/web/portDiscovery.d.ts +1 -1
- package/dist/web/portDiscovery.d.ts.map +1 -1
- package/dist/web/portDiscovery.js +2 -2
- package/dist/web/public/app.js +65 -11
- package/dist/web/public/index.html +2 -0
- package/dist/web/public/logs.js +24 -2
- package/dist/web/public/metrics.js +22 -4
- package/dist/web/public/sessions.js +55 -8
- package/dist/web/public/setup.js +11 -2
- package/dist/web/public/styles.css +12 -0
- package/dist/web/routes/permissionRoutes.js +2 -2
- package/dist/web/routes/setupRoutes.d.ts +67 -1
- package/dist/web/routes/setupRoutes.d.ts.map +1 -1
- package/dist/web/routes/setupRoutes.js +298 -6
- package/dist/web/routes.d.ts.map +1 -1
- package/dist/web/routes.js +4 -2
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +14 -5
- package/package.json +5 -3
- package/server.json +2 -2
package/dist/di/Container.js
CHANGED
|
@@ -599,11 +599,35 @@ export class DollhouseContainer {
|
|
|
599
599
|
logger.info(`[Startup] Test delay injected: ${testDelay}ms`);
|
|
600
600
|
await new Promise(resolve => setTimeout(resolve, testDelay));
|
|
601
601
|
}
|
|
602
|
+
await this.completeSinkSetup(timer);
|
|
603
|
+
await this.completeConsoleSetup(timer);
|
|
604
|
+
this.deferredSetupComplete = true;
|
|
605
|
+
const report = timer.getReport();
|
|
606
|
+
logger.info(`[Startup] Deferred setup completed in ${report.deferredMs}ms ` +
|
|
607
|
+
`(total startup: ${report.totalMs}ms, critical: ${report.criticalPathMs}ms)`);
|
|
608
|
+
}
|
|
609
|
+
/**
|
|
610
|
+
* Wire sinks, hooks, collectors, and security — everything EXCEPT
|
|
611
|
+
* the web console leader election and permission server.
|
|
612
|
+
*
|
|
613
|
+
* Called by completeDeferredSetup() in MCP stdio mode, and directly
|
|
614
|
+
* by the --web standalone path which IS the server (#1866).
|
|
615
|
+
*/
|
|
616
|
+
async completeSinkSetup(timer) {
|
|
602
617
|
await this.deferredMemoryAutoload(timer);
|
|
603
618
|
await this.deferredActivationRestore(timer);
|
|
604
619
|
await this.deferredPolicyExport();
|
|
605
620
|
await this.deferredLogHooks(timer);
|
|
606
621
|
await this.deferredMetricsCollectors(timer);
|
|
622
|
+
await this.deferredDangerZoneInit(timer);
|
|
623
|
+
await this.deferredPatternEncryption(timer);
|
|
624
|
+
await this.deferredBackgroundValidator(timer);
|
|
625
|
+
}
|
|
626
|
+
/**
|
|
627
|
+
* Leader election, web console server, and permission server.
|
|
628
|
+
* Only called in MCP stdio mode — --web standalone mode IS the server (#1866).
|
|
629
|
+
*/
|
|
630
|
+
async completeConsoleSetup(timer) {
|
|
607
631
|
// Sweep stale port files from prior sessions before any port operations (#1856).
|
|
608
632
|
// Runs unconditionally — stale files accumulate regardless of DOLLHOUSE_WEB_CONSOLE.
|
|
609
633
|
try {
|
|
@@ -613,16 +637,9 @@ export class DollhouseContainer {
|
|
|
613
637
|
catch { /* sweep failure is non-fatal */ }
|
|
614
638
|
await this.deferredWebConsole(timer);
|
|
615
639
|
await this.deferredPermissionServer(timer);
|
|
616
|
-
await this.deferredDangerZoneInit(timer);
|
|
617
|
-
await this.deferredPatternEncryption(timer);
|
|
618
|
-
await this.deferredBackgroundValidator(timer);
|
|
619
|
-
this.deferredSetupComplete = true;
|
|
620
|
-
const report = timer.getReport();
|
|
621
|
-
logger.info(`[Startup] Deferred setup completed in ${report.deferredMs}ms ` +
|
|
622
|
-
`(total startup: ${report.totalMs}ms, critical: ${report.criticalPathMs}ms)`);
|
|
623
640
|
}
|
|
624
641
|
async deferredMemoryAutoload(timer) {
|
|
625
|
-
timer
|
|
642
|
+
timer?.startPhase('memory_autoload', false);
|
|
626
643
|
try {
|
|
627
644
|
const configManager = this.resolve('ConfigManager');
|
|
628
645
|
const config = configManager.getConfig();
|
|
@@ -642,10 +659,10 @@ export class DollhouseContainer {
|
|
|
642
659
|
catch (error) {
|
|
643
660
|
logger.error('[Container] Memory auto-load failed:', error);
|
|
644
661
|
}
|
|
645
|
-
timer
|
|
662
|
+
timer?.endPhase('memory_autoload');
|
|
646
663
|
}
|
|
647
664
|
async deferredActivationRestore(timer) {
|
|
648
|
-
timer
|
|
665
|
+
timer?.startPhase('activation_restore', false);
|
|
649
666
|
try {
|
|
650
667
|
const activationStore = this.resolve('ActivationStore');
|
|
651
668
|
await activationStore.initialize();
|
|
@@ -656,7 +673,7 @@ export class DollhouseContainer {
|
|
|
656
673
|
catch (error) {
|
|
657
674
|
logger.warn('[Container] Activation state restoration failed:', error);
|
|
658
675
|
}
|
|
659
|
-
timer
|
|
676
|
+
timer?.endPhase('activation_restore');
|
|
660
677
|
}
|
|
661
678
|
async deferredPolicyExport() {
|
|
662
679
|
try {
|
|
@@ -668,7 +685,7 @@ export class DollhouseContainer {
|
|
|
668
685
|
}
|
|
669
686
|
}
|
|
670
687
|
async deferredLogHooks(timer) {
|
|
671
|
-
timer
|
|
688
|
+
timer?.startPhase('log_hooks', false);
|
|
672
689
|
try {
|
|
673
690
|
const logManager = this.resolve('LogManager');
|
|
674
691
|
const logCleanups = wireLogHooks(logManager, this);
|
|
@@ -677,10 +694,10 @@ export class DollhouseContainer {
|
|
|
677
694
|
catch (error) {
|
|
678
695
|
logger.warn('[Container] Failed to wire log hooks:', error);
|
|
679
696
|
}
|
|
680
|
-
timer
|
|
697
|
+
timer?.endPhase('log_hooks');
|
|
681
698
|
}
|
|
682
699
|
async deferredMetricsCollectors(timer) {
|
|
683
|
-
timer
|
|
700
|
+
timer?.startPhase('metrics_collectors', false);
|
|
684
701
|
try {
|
|
685
702
|
const metricsManager = this.resolve('MetricsManager');
|
|
686
703
|
this.wireMetricsCollectors(metricsManager);
|
|
@@ -690,7 +707,7 @@ export class DollhouseContainer {
|
|
|
690
707
|
catch (error) {
|
|
691
708
|
logger.warn('[Container] Metrics wiring skipped:', error);
|
|
692
709
|
}
|
|
693
|
-
timer
|
|
710
|
+
timer?.endPhase('metrics_collectors');
|
|
694
711
|
}
|
|
695
712
|
/** Try to resolve a service, returning undefined if not registered */
|
|
696
713
|
tryResolve(name) {
|
|
@@ -715,7 +732,7 @@ export class DollhouseContainer {
|
|
|
715
732
|
}
|
|
716
733
|
}
|
|
717
734
|
async deferredWebConsole(timer) {
|
|
718
|
-
timer
|
|
735
|
+
timer?.startPhase('web_console', false);
|
|
719
736
|
try {
|
|
720
737
|
if (!env.DOLLHOUSE_WEB_CONSOLE)
|
|
721
738
|
return;
|
|
@@ -745,10 +762,10 @@ export class DollhouseContainer {
|
|
|
745
762
|
catch (error) {
|
|
746
763
|
logger.warn('[Container] Web console startup failed:', error);
|
|
747
764
|
}
|
|
748
|
-
timer
|
|
765
|
+
timer?.endPhase('web_console');
|
|
749
766
|
}
|
|
750
767
|
async deferredPermissionServer(timer) {
|
|
751
|
-
timer
|
|
768
|
+
timer?.startPhase('permission_server', false);
|
|
752
769
|
try {
|
|
753
770
|
if (!env.DOLLHOUSE_PERMISSION_SERVER) {
|
|
754
771
|
logger.debug('[Container] Permission server disabled via DOLLHOUSE_PERMISSION_SERVER=false');
|
|
@@ -774,10 +791,10 @@ export class DollhouseContainer {
|
|
|
774
791
|
catch (error) {
|
|
775
792
|
logger.warn('[Container] Permission server startup failed:', error);
|
|
776
793
|
}
|
|
777
|
-
timer
|
|
794
|
+
timer?.endPhase('permission_server');
|
|
778
795
|
}
|
|
779
796
|
async deferredDangerZoneInit(timer) {
|
|
780
|
-
timer
|
|
797
|
+
timer?.startPhase('danger_zone_init', false);
|
|
781
798
|
try {
|
|
782
799
|
const dangerZoneEnforcer = this.resolve('DangerZoneEnforcer');
|
|
783
800
|
await dangerZoneEnforcer.initialize();
|
|
@@ -785,10 +802,10 @@ export class DollhouseContainer {
|
|
|
785
802
|
catch (error) {
|
|
786
803
|
logger.warn('[Container] DangerZoneEnforcer initialization failed:', error);
|
|
787
804
|
}
|
|
788
|
-
timer
|
|
805
|
+
timer?.endPhase('danger_zone_init');
|
|
789
806
|
}
|
|
790
807
|
async deferredPatternEncryption(timer) {
|
|
791
|
-
timer
|
|
808
|
+
timer?.startPhase('pattern_encryption', false);
|
|
792
809
|
try {
|
|
793
810
|
const patternEncryptor = this.resolve('PatternEncryptor');
|
|
794
811
|
await patternEncryptor.initialize();
|
|
@@ -797,10 +814,10 @@ export class DollhouseContainer {
|
|
|
797
814
|
catch (error) {
|
|
798
815
|
logger.warn('[Container] Pattern encryption initialization failed:', error);
|
|
799
816
|
}
|
|
800
|
-
timer
|
|
817
|
+
timer?.endPhase('pattern_encryption');
|
|
801
818
|
}
|
|
802
819
|
async deferredBackgroundValidator(timer) {
|
|
803
|
-
timer
|
|
820
|
+
timer?.startPhase('background_validator', false);
|
|
804
821
|
try {
|
|
805
822
|
const backgroundValidator = this.resolve('BackgroundValidator');
|
|
806
823
|
backgroundValidator.start();
|
|
@@ -809,7 +826,7 @@ export class DollhouseContainer {
|
|
|
809
826
|
catch (error) {
|
|
810
827
|
logger.warn('[Container] Background validator start failed:', error);
|
|
811
828
|
}
|
|
812
|
-
timer
|
|
829
|
+
timer?.endPhase('background_validator');
|
|
813
830
|
}
|
|
814
831
|
/**
|
|
815
832
|
* Restore per-session activation state from the ActivationStore.
|
|
@@ -1315,4 +1332,4 @@ export class DollhouseContainer {
|
|
|
1315
1332
|
}
|
|
1316
1333
|
}
|
|
1317
1334
|
}
|
|
1318
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udGFpbmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RpL0NvbnRhaW5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDcEIsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUFFLGVBQWUsRUFBRSxlQUFlLElBQUksT0FBTyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRXRFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN2QyxPQUFPLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxnQ0FBZ0MsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2hKLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM3RCxPQUFPLEVBQ0wsWUFBWSxFQUNaLGlCQUFpQixFQUNqQixzQkFBc0IsRUFDdEIsZ0JBQWdCLEVBQ2hCLGNBQWMsRUFDZCxnQkFBZ0IsR0FDakIsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLE1BQU0sa0NBQWtDLENB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Q3hCLE1BQU0sQ0FBQyxJQUFJLENBQUMscUNBQXFDLFFBQVEsQ0FBQyxNQUFNLHNCQUFzQixnQkFBZ0IsQ0FBQyxNQUFNLFdBQVcsQ0FBQyxDQUFDO1FBQzVILENBQUM7SUFDSCxDQUFDO0lBRU8sS0FBSyxDQUFDLHlCQUF5QjtRQUNyQyxJQUFJLENBQUM7WUFDSCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFrQixpQkFBaUIsQ0FBQyxDQUFDO1lBQ3pFLE1BQU0sWUFBWSxHQUFHLE1BQU0sZUFBZSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQzFELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDbEIsTUFBTSxDQUFDLElBQUksQ0FBQyxpREFBaUQsQ0FBQyxDQUFDO2dCQUMvRCxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO2dCQUMvRSxNQUFNLFFBQVEsR0FBRyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDaEQsTUFBTSxlQUFlLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUMxQyxNQUFNLENBQUMsSUFBSSxDQUFDLHFDQUFxQyxRQUFRLENBQUMsTUFBTSxRQUFRLENBQUMsQ0FBQztZQUM1RSxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sTUFBTSxLQUFLLEdBQUcsTUFBTSxlQUFlLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ3BELE1BQU0sQ0FBQyxLQUFLLENBQUMsdUNBQXVDLEtBQUssQ0FBQyxTQUFTLFFBQVEsQ0FBQyxDQUFDO1lBQy9FLENBQUM7UUFDSCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLFlBQVksQ0FBQyxRQUFRLENBQUMsOENBQThDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDL0UsQ0FBQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBvcyBmcm9tIFwib3NcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IFBBQ0tBR0VfVkVSU0lPTiwgUEFDS0FHRV9WRVJTSU9OIGFzIFZFUlNJT04gfSBmcm9tIFwiLi4vZ2VuZXJhdGVkL3ZlcnNpb24uanNcIjtcbmltcG9ydCB7IFNlY3VyaXR5TW9uaXRvciB9IGZyb20gXCIuLi9zZWN1cml0eS9zZWN1cml0eU1vbml0b3IuanNcIjtcbmltcG9ydCB7IFZlcmJUcmlnZ2VyTWFuYWdlciB9IGZyb20gXCIuLi9wb3J0Zm9saW8vVmVyYlRyaWdnZXJNYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBSZWxhdGlvbnNoaXBNYW5hZ2VyIH0gZnJvbSBcIi4uL3BvcnRmb2xpby9SZWxhdGlvbnNoaXBNYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBOTFBTY29yaW5nTWFuYWdlciB9IGZyb20gXCIuLi9wb3J0Zm9saW8vTkxQU2NvcmluZ01hbmFnZXIuanNcIjtcbmltcG9ydCB7IFNlcnZlciB9IGZyb20gXCJAbW9kZWxjb250ZXh0cHJvdG9jb2wvc2RrL3NlcnZlci9pbmRleC5qc1wiO1xuaW1wb3J0IHsgbG9hZEluZGljYXRvckNvbmZpZyB9IGZyb20gXCIuLi9jb25maWcvaW5kaWNhdG9yLWNvbmZpZy5qc1wiO1xuaW1wb3J0IHsgZW52IH0gZnJvbSBcIi4uL2NvbmZpZy9lbnYuanNcIjtcbmltcG9ydCB7IEFQSUNhY2hlLCBDb2xsZWN0aW9uQ2FjaGUsIENvbGxlY3Rpb25JbmRleENhY2hlLCBDYWNoZU1lbW9yeUJ1ZGdldCB9IGZyb20gXCIuLi9jYWNoZS9pbmRleC5qc1wiO1xuaW1wb3J0IHsgZ2V0VmFsaWRhdGVkR2xvYmFsQ2FjaGVNZW1vcnlCeXRlcywgZ2V0VmFsaWRhdGVkTWF4QmFja3Vwc1BlckVsZW1lbnQsIFNUT1JBR0VfTEFZRVJfQ09ORklHIH0gZnJvbSBcIi4uL2NvbmZpZy9wZXJmb3JtYW5jZS1jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IEJhY2t1cFNlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvQmFja3VwU2VydmljZS5qc1wiO1xuaW1wb3J0IHtcbiAgR2l0SHViQ2xpZW50LFxuICBDb2xsZWN0aW9uQnJvd3NlcixcbiAgQ29sbGVjdGlvbkluZGV4TWFuYWdlcixcbiAgQ29sbGVjdGlvblNlYXJjaCxcbiAgUGVyc29uYURldGFpbHMsXG4gIEVsZW1lbnRJbnN0YWxsZXIsXG59IGZyb20gXCIuLi9jb2xsZWN0aW9uL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBHaXRIdWJBdXRoTWFuYWdlciB9IGZyb20gXCIuLi9hdXRoL0dpdEh1YkF1dGhNYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBQb3J0Zm9saW9NYW5hZ2VyLCBFbGVtZW50VHlwZSB9IGZyb20gXCIuLi9wb3J0Zm9saW8vUG9ydGZvbGlvTWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgTWlncmF0aW9uTWFuYWdlciB9IGZyb20gXCIuLi9wb3J0Zm9saW8vTWlncmF0aW9uTWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgRW5oYW5jZWRJbmRleE1hbmFnZXIgfSBmcm9tIFwiLi4vcG9ydGZvbGlvL0VuaGFuY2VkSW5kZXhNYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBFbmhhbmNlZEluZGV4SGFuZGxlciB9IGZyb20gXCIuLi9oYW5kbGVycy9FbmhhbmNlZEluZGV4SGFuZGxlci5qc1wiO1xuaW1wb3J0IHsgTUNQQVFMSGFuZGxlciwgdHlwZSBIYW5kbGVyUmVnaXN0cnkgfSBmcm9tIFwiLi4vaGFuZGxlcnMvbWNwLWFxbC9NQ1BBUUxIYW5kbGVyLmpzXCI7XG5pbXBvcnQgeyBHYXRla2VlcGVyIH0gZnJvbSBcIi4uL2hhbmRsZXJzL21jcC1hcWwvR2F0ZWtlZXBlci5qc1wiO1xuaW1wb3J0IHsgU2tpbGxNYW5hZ2VyIH0gZnJvbSBcIi4uL2VsZW1lbnRzL3NraWxscy9pbmRleC5qc1wiO1xuaW1wb3J0IHsgVGVtcGxhdGVNYW5hZ2VyIH0gZnJvbSBcIi4uL2VsZW1lbnRzL3RlbXBsYXRlcy9UZW1wbGF0ZU1hbmFnZXIuanNcIjtcbmltcG9ydCB7IFRlbXBsYXRlUmVuZGVyZXIgfSBmcm9tIFwiLi4vdXRpbHMvVGVtcGxhdGVSZW5kZXJlci5qc1wiO1xuaW1wb3J0IHsgQWdlbnRNYW5hZ2VyIH0gZnJvbSBcIi4uL2VsZW1lbnRzL2FnZW50cy9BZ2VudE1hbmFnZXIuanNcIjtcbmltcG9ydCB7IE1lbW9yeSB9IGZyb20gXCIuLi9lbGVtZW50cy9tZW1vcmllcy9NZW1vcnkuanNcIjtcbmltcG9ydCB7IE1lbW9yeU1hbmFnZXIgfSBmcm9tIFwiLi4vZWxlbWVudHMvbWVtb3JpZXMvTWVtb3J5TWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgV2ViU1NFTG9nU2luayB9IGZyb20gXCIuLi93ZWIvc2lua3MvV2ViU1NFTG9nU2luay5qc1wiO1xuaW1wb3J0IHsgV2ViU1NFTWV0cmljc1NpbmsgfSBmcm9tIFwiLi4vd2ViL3NpbmtzL1dlYlNTRU1ldHJpY3NTaW5rLmpzXCI7XG5pbXBvcnQgeyBFbnNlbWJsZU1hbmFnZXIgfSBmcm9tIFwiLi4vZWxlbWVudHMvZW5zZW1ibGVzL0Vuc2VtYmxlTWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgUGVyc29uYUV4cG9ydGVyLCBQZXJzb25hSW1wb3J0ZXIgfSBmcm9tIFwiLi4vcGVyc29uYS9leHBvcnQtaW1wb3J0L2luZGV4LmpzXCI7XG5pbXBvcnQgeyBQZXJzb25hTWFuYWdlciB9IGZyb20gXCIuLi9wZXJzb25hL1BlcnNvbmFNYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBQZXJzb25hSGFuZGxlciB9IGZyb20gXCIuLi9oYW5kbGVycy9QZXJzb25hSGFuZGxlci5qc1wiO1xuaW1wb3J0IHsgRWxlbWVudENSVURIYW5kbGVyIH0gZnJvbSBcIi4uL2hhbmRsZXJzL0VsZW1lbnRDUlVESGFuZGxlci5qc1wiO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkhhbmRsZXIgfSBmcm9tIFwiLi4vaGFuZGxlcnMvQ29sbGVjdGlvbkhhbmRsZXIuanNcIjtcbmltcG9ydCB7IFBvcnRmb2xpb0hhbmRsZXIgfSBmcm9tIFwiLi4vaGFuZGxlcnMvUG9ydGZvbGlvSGFuZGxlci5qc1wiO1xuaW1wb3J0IHsgUG9ydGZvbGlvUHVsbEhhbmRsZXIgfSBmcm9tIFwiLi4vaGFuZGxlcnMvUG9ydGZvbGlvUHVsbEhhbmRsZXIuanNcIjtcbmltcG9ydCB7IEdpdEh1YkF1dGhIYW5kbGVyIH0gZnJvbSBcIi4uL2hhbmRsZXJzL0dpdEh1YkF1dGhIYW5kbGVyLmpzXCI7XG5pbXBvcnQgeyBEaXNwbGF5Q29uZmlnSGFuZGxlciB9IGZyb20gXCIuLi9oYW5kbGVycy9EaXNwbGF5Q29uZmlnSGFuZGxlci5qc1wiO1xuaW1wb3J0IHsgSWRlbnRpdHlIYW5kbGVyIH0gZnJvbSBcIi4uL2hhbmRsZXJzL0lkZW50aXR5SGFuZGxlci5qc1wiO1xuaW1wb3J0IHsgQ29uZmlnSGFuZGxlciB9IGZyb20gXCIuLi9oYW5kbGVycy9Db25maWdIYW5kbGVyLmpzXCI7XG5pbXBvcnQgeyBTeW5jSGFuZGxlciB9IGZyb20gXCIuLi9oYW5kbGVycy9TeW5jSGFuZGxlclYyLmpzXCI7XG5pbXBvcnQgeyBUb29sUmVnaXN0cnkgfSBmcm9tIFwiLi4vaGFuZGxlcnMvVG9vbFJlZ2lzdHJ5LmpzXCI7XG5pbXBvcnQgeyBTZXJ2ZXJTZXR1cCB9IGZyb20gXCIuLi9zZXJ2ZXIvaW5kZXguanNcIjtcbmltcG9ydCB7IFNlcnZlclN0YXJ0dXAgfSBmcm9tIFwiLi4vc2VydmVyL3N0YXJ0dXAuanNcIjtcbmltcG9ydCB7IFBhdGhWYWxpZGF0b3IgfSBmcm9tIFwiLi4vc2VjdXJpdHkvcGF0aFZhbGlkYXRvci5qc1wiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uL3V0aWxzL2xvZ2dlci5qc1wiO1xuaW1wb3J0IHsgRXJyb3JIYW5kbGVyIH0gZnJvbSBcIi4uL3V0aWxzL0Vycm9ySGFuZGxlci5qc1wiO1xuaW1wb3J0IHsgVW5pZmllZEluZGV4TWFuYWdlciB9IGZyb20gXCIuLi9wb3J0Zm9saW8vVW5pZmllZEluZGV4TWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgUG9ydGZvbGlvSW5kZXhNYW5hZ2VyIH0gZnJvbSBcIi4uL3BvcnRmb2xpby9Qb3J0Zm9saW9JbmRleE1hbmFnZXIuanNcIjtcbmltcG9ydCB7IFN1Ym1pdFRvUG9ydGZvbGlvVG9vbCB9IGZyb20gXCIuLi90b29scy9wb3J0Zm9saW8vc3VibWl0VG9Qb3J0Zm9saW9Ub29sLmpzXCI7XG5pbXBvcnQgeyBDb25maWdNYW5hZ2VyIH0gZnJvbSBcIi4uL2NvbmZpZy9Db25maWdNYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBQb3J0Zm9saW9SZXBvTWFuYWdlciB9IGZyb20gXCIuLi9wb3J0Zm9saW8vUG9ydGZvbGlvUmVwb01hbmFnZXIuanNcIjtcbmltcG9ydCB7IFBvcnRmb2xpb1N5bmNNYW5hZ2VyIH0gZnJvbSBcIi4uL3BvcnRmb2xpby9Qb3J0Zm9saW9TeW5jTWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgZ2V0UG9ydGZvbGlvUmVwb3NpdG9yeU5hbWUgfSBmcm9tIFwiLi4vY29uZmlnL3BvcnRmb2xpb0NvbmZpZy5qc1wiO1xuaW1wb3J0IHsgR2l0SHViUG9ydGZvbGlvSW5kZXhlciB9IGZyb20gXCIuLi9wb3J0Zm9saW8vR2l0SHViUG9ydGZvbGlvSW5kZXhlci5qc1wiO1xuaW1wb3J0IHsgSW5kZXhDb25maWdNYW5hZ2VyIH0gZnJvbSBcIi4uL3BvcnRmb2xpby9jb25maWcvSW5kZXhDb25maWcuanNcIjtcbmltcG9ydCB7IFBvcnRmb2xpb1N5bmNDb21wYXJlciB9IGZyb20gXCIuLi9zeW5jL1BvcnRmb2xpb1N5bmNDb21wYXJlci5qc1wiO1xuaW1wb3J0IHsgUG9ydGZvbGlvRG93bmxvYWRlciB9IGZyb20gXCIuLi9zeW5jL1BvcnRmb2xpb0Rvd25sb2FkZXIuanNcIjtcbmltcG9ydCB7IFBlcmZvcm1hbmNlTW9uaXRvciB9IGZyb20gXCIuLi91dGlscy9QZXJmb3JtYW5jZU1vbml0b3IuanNcIjtcbmltcG9ydCB7IEJ1aWxkSW5mb1NlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvQnVpbGRJbmZvU2VydmljZS5qc1wiO1xuaW1wb3J0IHsgSW5pdGlhbGl6YXRpb25TZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL0luaXRpYWxpemF0aW9uU2VydmljZS5qc1wiO1xuaW1wb3J0IHsgUGVyc29uYUluZGljYXRvclNlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvUGVyc29uYUluZGljYXRvclNlcnZpY2UuanNcIjtcbmltcG9ydCB7IEZpbGVMb2NrTWFuYWdlciB9IGZyb20gJy4uL3NlY3VyaXR5L2ZpbGVMb2NrTWFuYWdlci5qcyc7XG5pbXBvcnQgeyBTdGF0ZUNoYW5nZU5vdGlmaWVyIH0gZnJvbSBcIi4uL3NlcnZpY2VzL1N0YXRlQ2hhbmdlTm90aWZpZXIuanNcIjtcbmltcG9ydCB7IFNlcmlhbGl6YXRpb25TZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL1NlcmlhbGl6YXRpb25TZXJ2aWNlLmpzXCI7XG5pbXBvcnQgeyBGaWxlV2F0Y2hTZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL0ZpbGVXYXRjaFNlcnZpY2UuanNcIjtcbmltcG9ydCB7IE1ldGFkYXRhU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9NZXRhZGF0YVNlcnZpY2UuanNcIjtcbmltcG9ydCB7IEZpbGVPcGVyYXRpb25zU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9GaWxlT3BlcmF0aW9uc1NlcnZpY2UuanNcIjtcbmltcG9ydCB7IFZhbGlkYXRpb25SZWdpc3RyeSB9IGZyb20gXCIuLi9zZXJ2aWNlcy92YWxpZGF0aW9uL1ZhbGlkYXRpb25SZWdpc3RyeS5qc1wiO1xuaW1wb3J0IHsgVHJpZ2dlclZhbGlkYXRpb25TZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL3ZhbGlkYXRpb24vVHJpZ2dlclZhbGlkYXRpb25TZXJ2aWNlLmpzXCI7XG5pbXBvcnQgeyBWYWxpZGF0aW9uU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy92YWxpZGF0aW9uL1ZhbGlkYXRpb25TZXJ2aWNlLmpzXCI7XG5pbXBvcnQgeyBHaXRIdWJSYXRlTGltaXRlciB9IGZyb20gXCIuLi91dGlscy9HaXRIdWJSYXRlTGltaXRlci5qc1wiO1xuaW1wb3J0IHsgQW50aHJvcGljVG9Eb2xsaG91c2VDb252ZXJ0ZXIsIERvbGxob3VzZVRvQW50aHJvcGljQ29udmVydGVyIH0gZnJvbSBcIi4uL2NvbnZlcnRlcnMvaW5kZXguanNcIjtcbmltcG9ydCB7IERhbmdlclpvbmVFbmZvcmNlciB9IGZyb20gXCIuLi9zZWN1cml0eS9EYW5nZXJab25lRW5mb3JjZXIuanNcIjtcbmltcG9ydCB7IEFjdGl2YXRpb25TdG9yZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9BY3RpdmF0aW9uU3RvcmUuanNcIjtcbmltcG9ydCB7IFZlcmlmaWNhdGlvblN0b3JlIH0gZnJvbSBcIkBkb2xsaG91c2VtY3Avc2FmZXR5XCI7XG5pbXBvcnQgeyBWZXJpZmljYXRpb25Ob3RpZmllciB9IGZyb20gXCIuLi9zZXJ2aWNlcy9WZXJpZmljYXRpb25Ob3RpZmllci5qc1wiO1xuaW1wb3J0IHsgUGF0dGVybkVuY3J5cHRvciB9IGZyb20gXCIuLi9zZWN1cml0eS9lbmNyeXB0aW9uL1BhdHRlcm5FbmNyeXB0b3IuanNcIjtcbmltcG9ydCB7IFBhdHRlcm5EZWNyeXB0b3IgfSBmcm9tIFwiLi4vc2VjdXJpdHkvZW5jcnlwdGlvbi9QYXR0ZXJuRGVjcnlwdG9yLmpzXCI7XG5pbXBvcnQgeyBDb250ZXh0VHJhY2tlciB9IGZyb20gXCIuLi9zZWN1cml0eS9lbmNyeXB0aW9uL0NvbnRleHRUcmFja2VyLmpzXCI7XG5pbXBvcnQgeyBQYXR0ZXJuRXh0cmFjdG9yIH0gZnJvbSBcIi4uL3NlY3VyaXR5L3ZhbGlkYXRpb24vUGF0dGVybkV4dHJhY3Rvci5qc1wiO1xuaW1wb3J0IHsgQmFja2dyb3VuZFZhbGlkYXRvciB9IGZyb20gXCIuLi9zZWN1cml0eS92YWxpZGF0aW9uL0JhY2tncm91bmRWYWxpZGF0b3IuanNcIjtcbmltcG9ydCB7IFNlY3VyaXR5VGVsZW1ldHJ5IH0gZnJvbSBcIi4uL3NlY3VyaXR5L3RlbGVtZXRyeS9TZWN1cml0eVRlbGVtZXRyeS5qc1wiO1xuaW1wb3J0IHsgQ29udGVudFZhbGlkYXRvciB9IGZyb20gXCIuLi9zZWN1cml0eS9jb250ZW50VmFsaWRhdG9yLmpzXCI7XG5pbXBvcnQgeyBPcGVyYXRpb25hbFRlbGVtZXRyeSB9IGZyb20gXCIuLi90ZWxlbWV0cnkvT3BlcmF0aW9uYWxUZWxlbWV0cnkuanNcIjtcbmltcG9ydCB7IFN0YXJ0dXBUaW1lciB9IGZyb20gXCIuLi90ZWxlbWV0cnkvU3RhcnR1cFRpbWVyLmpzXCI7XG5pbXBvcnQgeyBEZWZhdWx0RW5oYW5jZWRJbmRleEhlbHBlcnMgfSBmcm9tIFwiLi4vcG9ydGZvbGlvL2VuaGFuY2VkLWluZGV4L0VuaGFuY2VkSW5kZXhIZWxwZXJzLmpzXCI7XG5pbXBvcnQgeyBFbGVtZW50RGVmaW5pdGlvbkJ1aWxkZXIgfSBmcm9tIFwiLi4vcG9ydGZvbGlvL2VuaGFuY2VkLWluZGV4L0VsZW1lbnREZWZpbml0aW9uQnVpbGRlci5qc1wiO1xuaW1wb3J0IHsgQWN0aW9uVHJpZ2dlckV4dHJhY3RvciB9IGZyb20gXCIuLi9wb3J0Zm9saW8vZW5oYW5jZWQtaW5kZXgvQWN0aW9uVHJpZ2dlckV4dHJhY3Rvci5qc1wiO1xuaW1wb3J0IHsgVHJpZ2dlck1ldHJpY3NUcmFja2VyIH0gZnJvbSBcIi4uL3BvcnRmb2xpby9lbmhhbmNlZC1pbmRleC9UcmlnZ2VyTWV0cmljc1RyYWNrZXIuanNcIjtcbmltcG9ydCB7IFNlbWFudGljUmVsYXRpb25zaGlwU2VydmljZSB9IGZyb20gXCIuLi9wb3J0Zm9saW8vZW5oYW5jZWQtaW5kZXgvU2VtYW50aWNSZWxhdGlvbnNoaXBTZXJ2aWNlLmpzXCI7XG5pbXBvcnQgeyBFbGVtZW50RXZlbnREaXNwYXRjaGVyIH0gZnJvbSAnLi4vZXZlbnRzL0VsZW1lbnRFdmVudERpc3BhdGNoZXIuanMnO1xuaW1wb3J0IHsgVG9rZW5NYW5hZ2VyIH0gZnJvbSBcIi4uL3NlY3VyaXR5L3Rva2VuTWFuYWdlci5qc1wiO1xuaW1wb3J0IHtcbiAgUGFnaW5hdGlvblNlcnZpY2UsXG4gIEZpbHRlclNlcnZpY2UsXG4gIFNvcnRTZXJ2aWNlLFxuICBFbGVtZW50UXVlcnlTZXJ2aWNlLFxufSBmcm9tICcuLi9zZXJ2aWNlcy9xdWVyeS9pbmRleC5qcyc7XG5pbXBvcnQgeyBSZXRlbnRpb25Qb2xpY3lTZXJ2aWNlLCBNZW1vcnlSZXRlbnRpb25TdHJhdGVneSB9IGZyb20gJy4uL3NlcnZpY2VzL1JldGVudGlvblBvbGljeVNlcnZpY2UuanMnO1xuaW1wb3J0IHsgUG9saWN5RXhwb3J0U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL1BvbGljeUV4cG9ydFNlcnZpY2UuanMnO1xuaW1wb3J0IHsgTG9nTWFuYWdlciwgYnVpbGRMb2dNYW5hZ2VyQ29uZmlnIH0gZnJvbSAnLi4vbG9nZ2luZy9Mb2dNYW5hZ2VyLmpzJztcbmltcG9ydCB7IEZpbGVMb2dTaW5rIH0gZnJvbSAnLi4vbG9nZ2luZy9zaW5rcy9GaWxlTG9nU2luay5qcyc7XG5pbXBvcnQgeyBNZW1vcnlMb2dTaW5rIH0gZnJvbSAnLi4vbG9nZ2luZy9zaW5rcy9NZW1vcnlMb2dTaW5rLmpzJztcbmltcG9ydCB7IFBsYWluVGV4dEZvcm1hdHRlciB9IGZyb20gJy4uL2xvZ2dpbmcvZm9ybWF0dGVycy9QbGFpblRleHRGb3JtYXR0ZXIuanMnO1xuaW1wb3J0IHsgSnNvbmxGb3JtYXR0ZXIgfSBmcm9tICcuLi9sb2dnaW5nL2Zvcm1hdHRlcnMvSnNvbmxGb3JtYXR0ZXIuanMnO1xuaW1wb3J0IHsgd2lyZUxvZ0hvb2tzLCBnZXRUcmlnZ2VyTWV0cmljc0xvZ0xpc3RlbmVyIH0gZnJvbSAnLi4vbG9nZ2luZy9Mb2dIb29rcy5qcyc7XG5pbXBvcnQgeyBNZXRyaWNzTWFuYWdlciB9IGZyb20gJy4uL21ldHJpY3MvTWV0cmljc01hbmFnZXIuanMnO1xuaW1wb3J0IHsgTWVtb3J5TWV0cmljc1NpbmsgfSBmcm9tICcuLi9tZXRyaWNzL3NpbmtzL01lbW9yeU1ldHJpY3NTaW5rLmpzJztcbmltcG9ydCB7IGJ1aWxkTWV0cmljc01hbmFnZXJDb25maWcgfSBmcm9tICcuLi9tZXRyaWNzL3R5cGVzLmpzJztcbmltcG9ydCB7XG4gIFBlcmZvcm1hbmNlTW9uaXRvckNvbGxlY3RvcixcbiAgTFJVQ2FjaGVDb2xsZWN0b3IsXG4gIFNlY3VyaXR5TW9uaXRvckNvbGxlY3RvcixcbiAgU2VjdXJpdHlUZWxlbWV0cnlDb2xsZWN0b3IsXG4gIEZpbGVMb2NrTWFuYWdlckNvbGxlY3RvcixcbiAgRGVmYXVsdEVsZW1lbnRQcm92aWRlckNvbGxlY3RvcixcbiAgVHJpZ2dlck1ldHJpY3NUcmFja2VyQ29sbGVjdG9yLFxuICBPcGVyYXRpb25hbFRlbGVtZXRyeUNvbGxlY3RvcixcbiAgT3BlcmF0aW9uTWV0cmljc0NvbGxlY3RvcixcbiAgR2F0ZWtlZXBlck1ldHJpY3NDb2xsZWN0b3IsXG59IGZyb20gJy4uL21ldHJpY3MvY29sbGVjdG9ycy9pbmRleC5qcyc7XG5pbXBvcnQgeyBPcGVyYXRpb25NZXRyaWNzVHJhY2tlciB9IGZyb20gJy4uL21ldHJpY3MvT3BlcmF0aW9uTWV0cmljc1RyYWNrZXIuanMnO1xuaW1wb3J0IHsgR2F0ZWtlZXBlck1ldHJpY3NUcmFja2VyIH0gZnJvbSAnLi4vbWV0cmljcy9HYXRla2VlcGVyTWV0cmljc1RyYWNrZXIuanMnO1xuXG4vLyBTdGF0ZSBpcyBvd25lZCBieSBQZXJzb25hTWFuYWdlciBhbmQgc2VydmljZXNcblxuZXhwb3J0IGludGVyZmFjZSBIYW5kbGVyQnVuZGxlIHtcbiAgcGVyc29uYUhhbmRsZXI6IFBlcnNvbmFIYW5kbGVyO1xuICBlbGVtZW50Q3J1ZEhhbmRsZXI6IEVsZW1lbnRDUlVESGFuZGxlcjtcbiAgY29sbGVjdGlvbkhhbmRsZXI6IENvbGxlY3Rpb25IYW5kbGVyO1xuICBwb3J0Zm9saW9IYW5kbGVyOiBQb3J0Zm9saW9IYW5kbGVyO1xuICBnaXRodWJBdXRoSGFuZGxlcjogR2l0SHViQXV0aEhhbmRsZXI7XG4gIGRpc3BsYXlDb25maWdIYW5kbGVyOiBEaXNwbGF5Q29uZmlnSGFuZGxlcjtcbiAgaWRlbnRpdHlIYW5kbGVyOiBJZGVudGl0eUhhbmRsZXI7XG4gIGNvbmZpZ0hhbmRsZXI6IENvbmZpZ0hhbmRsZXI7XG4gIHN5bmNIYW5kbGVyOiBTeW5jSGFuZGxlcjtcbiAgdG9vbFJlZ2lzdHJ5OiBUb29sUmVnaXN0cnk7XG4gIGVuaGFuY2VkSW5kZXhIYW5kbGVyOiBFbmhhbmNlZEluZGV4SGFuZGxlcjtcbiAgbWNwQXFsSGFuZGxlcjogTUNQQVFMSGFuZGxlcjtcbn1cblxuLyoqXG4gKiBUeXBlLXNhZmUgc2VydmljZSByZWNvcmQgZm9yIGRlcGVuZGVuY3kgaW5qZWN0aW9uIGNvbnRhaW5lclxuICpcbiAqIEZJWDogUmVwbGFjZWQgJ2FueScgdHlwZXMgd2l0aCBwcm9wZXIgZ2VuZXJpY3MgdG8gZW5zdXJlIHR5cGUgc2FmZXR5XG4gKiBQcmV2aW91c2x5OiBVc2VkICdhbnknIHdoaWNoIGFsbG93ZWQgdW5zYWZlIGNhc3RzIGFuZCBydW50aW1lIGVycm9yc1xuICogTm93OiBVc2VzIGdlbmVyaWMgVCB3aXRoICd1bmtub3duJyBmYWxsYmFjayBmb3IgY29tcGlsZS10aW1lIHR5cGUgY2hlY2tpbmdcbiAqXG4gKiBAdGVtcGxhdGUgVCBUaGUgc2VydmljZSB0eXBlIChkZWZhdWx0cyB0byB1bmtub3duIGZvciBtYXhpbXVtIHNhZmV0eSlcbiAqL1xuaW50ZXJmYWNlIFNlcnZpY2VSZWNvcmQ8VCA9IHVua25vd24+IHtcbiAgZmFjdG9yeTogKCkgPT4gVDtcbiAgaW5zdGFuY2U6IFQgfCBudWxsO1xuICBzaW5nbGV0b246IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBEb2xsaG91c2VDb250YWluZXIge1xuICBwcml2YXRlIHNlcnZpY2VzID0gbmV3IE1hcDxzdHJpbmcsIFNlcnZpY2VSZWNvcmQ+KCk7XG4gIHByaXZhdGUgcGVyc29uYXNEaXI6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAvKiogSXNzdWUgIzcwNjogU2V0IHRvIHRydWUgb25jZSBjb21wbGV0ZURlZmVycmVkU2V0dXAoKSByZXNvbHZlcy4gKi9cbiAgcHVibGljIGRlZmVycmVkU2V0dXBDb21wbGV0ZSA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8vIEZJWDogRE1DUC1TRUMtMDA2IC0gQXVkaXQgREkgY29udGFpbmVyIGluaXRpYWxpemF0aW9uXG4gICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgdHlwZTogJ1BPUlRGT0xJT19JTklUSUFMSVpBVElPTicsXG4gICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICBzb3VyY2U6ICdEb2xsaG91c2VDb250YWluZXIuY29uc3RydWN0b3InLFxuICAgICAgZGV0YWlsczogJ0RlcGVuZGVuY3kgaW5qZWN0aW9uIGNvbnRhaW5lciBpbml0aWFsaXppbmcnXG4gICAgfSk7XG4gICAgdGhpcy5yZWdpc3RlclNlcnZpY2VzKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgYSBzZXJ2aWNlIHdpdGggdGhlIERJIGNvbnRhaW5lclxuICAgKlxuICAgKiBGSVg6IEFkZGVkIGV4cGxpY2l0IHR5cGUgcGFyYW1ldGVyIGZvciB0eXBlIHNhZmV0eVxuICAgKiBUaGUgZmFjdG9yeSBpcyBzdG9yZWQgYXMgKCkgPT4gdW5rbm93biBpbnRlcm5hbGx5IHRvIGFsbG93IGhldGVyb2dlbmVvdXMgc3RvcmFnZSxcbiAgICogYnV0IHRoZSB0eXBlIFQgaXMgcHJlc2VydmVkIGZvciByZXNvbHZlKCkgY2FsbHNcbiAgICpcbiAgICogQHRlbXBsYXRlIFQgVGhlIHNlcnZpY2UgdHlwZVxuICAgKiBAcGFyYW0gbmFtZSBVbmlxdWUgc2VydmljZSBpZGVudGlmaWVyXG4gICAqIEBwYXJhbSBmYWN0b3J5IEZhY3RvcnkgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIHRoZSBzZXJ2aWNlIGluc3RhbmNlXG4gICAqIEBwYXJhbSBvcHRpb25zIENvbmZpZ3VyYXRpb24gb3B0aW9ucyAoc2luZ2xldG9uIGJlaGF2aW9yKVxuICAgKi9cbiAgcHVibGljIHJlZ2lzdGVyPFQ+KG5hbWU6IHN0cmluZywgZmFjdG9yeTogKCkgPT4gVCwgb3B0aW9uczogeyBzaW5nbGV0b24/OiBib29sZWFuIH0gPSB7IHNpbmdsZXRvbjogdHJ1ZSB9KTogdm9pZCB7XG4gICAgLy8gRklYOiBETUNQLVNFQy0wMDYgLSBBdWRpdCBzZXJ2aWNlIHJlZ2lzdHJhdGlvblxuICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgIHR5cGU6ICdFTEVNRU5UX0NSRUFURUQnLFxuICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgc291cmNlOiAnRG9sbGhvdXNlQ29udGFpbmVyLnJlZ2lzdGVyJyxcbiAgICAgIGRldGFpbHM6IGBTZXJ2aWNlIHJlZ2lzdGVyZWQ6ICR7bmFtZX1gLFxuICAgICAgYWRkaXRpb25hbERhdGE6IHsgc2VydmljZU5hbWU6IG5hbWUsIHNpbmdsZXRvbjogb3B0aW9ucy5zaW5nbGV0b24gPz8gdHJ1ZSB9XG4gICAgfSk7XG4gICAgdGhpcy5zZXJ2aWNlcy5zZXQobmFtZSwge1xuICAgICAgZmFjdG9yeTogZmFjdG9yeSBhcyAoKSA9PiB1bmtub3duLFxuICAgICAgaW5zdGFuY2U6IG51bGwsXG4gICAgICBzaW5nbGV0b246IG9wdGlvbnMuc2luZ2xldG9uID8/IHRydWVcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlIGEgc2VydmljZSBmcm9tIHRoZSBESSBjb250YWluZXJcbiAgICpcbiAgICogRklYOiBUeXBlIHNhZmV0eSBpbXByb3ZlZCB3aXRoIGV4cGxpY2l0IGNhc3RpbmcgYW5kIHZhbGlkYXRpb25cbiAgICogVGhlICdhcyBUJyBjYXN0IGlzIHNhZmUgYmVjYXVzZTpcbiAgICogMS4gU2VydmljZXMgYXJlIHJlZ2lzdGVyZWQgd2l0aCB0eXBlZCBmYWN0b3JpZXNcbiAgICogMi4gVGhlIHNlcnZpY2UgbmFtZSBhY3RzIGFzIGEgdHlwZSBkaXNjcmltaW5hdG9yXG4gICAqIDMuIEluY29ycmVjdCB1c2FnZSB3aWxsIGJlIGNhdWdodCBhdCB0aGUgcmVnaXN0cmF0aW9uIHNpdGVcbiAgICpcbiAgICogQHRlbXBsYXRlIFQgVGhlIGV4cGVjdGVkIHNlcnZpY2UgdHlwZVxuICAgKiBAcGFyYW0gbmFtZSBTZXJ2aWNlIGlkZW50aWZpZXJcbiAgICogQHJldHVybnMgVGhlIHNlcnZpY2UgaW5zdGFuY2VcbiAgICogQHRocm93cyBFcnJvciBpZiBzZXJ2aWNlIGlzIG5vdCByZWdpc3RlcmVkXG4gICAqL1xuICBwdWJsaWMgcmVzb2x2ZTxUPihuYW1lOiBzdHJpbmcpOiBUIHtcbiAgICBjb25zdCBzZXJ2aWNlID0gdGhpcy5zZXJ2aWNlcy5nZXQobmFtZSk7XG4gICAgaWYgKCFzZXJ2aWNlKSB7XG4gICAgICAvLyBGSVg6IERNQ1AtU0VDLTAwNiAtIEF1ZGl0IHNlcnZpY2UgcmVzb2x1dGlvbiBmYWlsdXJlc1xuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiAnTUVNT1JZX0xPQURfRkFJTEVEJyxcbiAgICAgICAgc2V2ZXJpdHk6ICdNRURJVU0nLFxuICAgICAgICBzb3VyY2U6ICdEb2xsaG91c2VDb250YWluZXIucmVzb2x2ZScsXG4gICAgICAgIGRldGFpbHM6IGBTZXJ2aWNlIG5vdCByZWdpc3RlcmVkOiAke25hbWV9YCxcbiAgICAgICAgYWRkaXRpb25hbERhdGE6IHsgc2VydmljZU5hbWU6IG5hbWUgfVxuICAgICAgfSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFNlcnZpY2Ugbm90IHJlZ2lzdGVyZWQ6ICR7bmFtZX1gKTtcbiAgICB9XG5cbiAgICBpZiAoc2VydmljZS5zaW5nbGV0b24pIHtcbiAgICAgIGlmICghc2VydmljZS5pbnN0YW5jZSkge1xuICAgICAgICBzZXJ2aWNlLmluc3RhbmNlID0gc2VydmljZS5mYWN0b3J5KCk7XG4gICAgICAgIC8vIEZJWDogRE1DUC1TRUMtMDA2IC0gQXVkaXQgc2luZ2xldG9uIGluc3RhbnRpYXRpb25cbiAgICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICAgIHR5cGU6ICdFTEVNRU5UX0NSRUFURUQnLFxuICAgICAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgICAgICBzb3VyY2U6ICdEb2xsaG91c2VDb250YWluZXIucmVzb2x2ZScsXG4gICAgICAgICAgZGV0YWlsczogYFNpbmdsZXRvbiBpbnN0YW50aWF0ZWQ6ICR7bmFtZX1gLFxuICAgICAgICAgIGFkZGl0aW9uYWxEYXRhOiB7IHNlcnZpY2VOYW1lOiBuYW1lIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2VydmljZS5pbnN0YW5jZSBhcyBUO1xuICAgIH1cblxuICAgIHJldHVybiBzZXJ2aWNlLmZhY3RvcnkoKSBhcyBUO1xuICB9XG5cbiAgcHJpdmF0ZSByZWdpc3RlclNlcnZpY2VzKCk6IHZvaWQge1xuXG5cbiAgICAvLyBJc3N1ZSAjNzA2OiBTdGFydHVwIHRpbWluZyBpbnN0cnVtZW50YXRpb25cbiAgICB0aGlzLnJlZ2lzdGVyKCdTdGFydHVwVGltZXInLCAoKSA9PiBuZXcgU3RhcnR1cFRpbWVyKCkpO1xuXG4gICAgLy8gQ09SRSAmIENBQ0hJTkdcbiAgICB0aGlzLnJlZ2lzdGVyKCdDYWNoZU1lbW9yeUJ1ZGdldCcsICgpID0+IG5ldyBDYWNoZU1lbW9yeUJ1ZGdldCh7XG4gICAgICBnbG9iYWxMaW1pdEJ5dGVzOiBnZXRWYWxpZGF0ZWRHbG9iYWxDYWNoZU1lbW9yeUJ5dGVzKCksXG4gICAgfSkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0FQSUNhY2hlJywgKCkgPT4gbmV3IEFQSUNhY2hlKCkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0NvbGxlY3Rpb25DYWNoZScsICgpID0+IG5ldyBDb2xsZWN0aW9uQ2FjaGUodGhpcy5yZXNvbHZlKCdGaWxlT3BlcmF0aW9uc1NlcnZpY2UnKSwgdW5kZWZpbmVkKSk7XG4gICAgdGhpcy5yZWdpc3RlcignUmF0ZUxpbWl0VHJhY2tlcicsICgpID0+IG5ldyBNYXA8c3RyaW5nLCBudW1iZXJbXT4oKSk7XG4gICAgdGhpcy5yZWdpc3RlcignRmlsZUxvY2tNYW5hZ2VyJywgKCkgPT4gbmV3IEZpbGVMb2NrTWFuYWdlcigpKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdGaWxlT3BlcmF0aW9uc1NlcnZpY2UnLCAoKSA9PiBuZXcgRmlsZU9wZXJhdGlvbnNTZXJ2aWNlKHRoaXMucmVzb2x2ZSgnRmlsZUxvY2tNYW5hZ2VyJykpKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdDb25maWdNYW5hZ2VyJywgKCkgPT4ge1xuICAgICAgcmV0dXJuIG5ldyBDb25maWdNYW5hZ2VyKHRoaXMucmVzb2x2ZSgnRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJyksIG9zKTtcbiAgICB9KTtcbiAgICAvLyBJc3N1ZSAjNTE6IEdlbmVyaWMgcmV0ZW50aW9uIHBvbGljeSBzZXJ2aWNlIHdpdGggc3RyYXRlZ3kgcGF0dGVyblxuICAgIHRoaXMucmVnaXN0ZXIoJ1JldGVudGlvblBvbGljeVNlcnZpY2UnLCAoKSA9PiB7XG4gICAgICBjb25zdCBzZXJ2aWNlID0gbmV3IFJldGVudGlvblBvbGljeVNlcnZpY2UodGhpcy5yZXNvbHZlKCdDb25maWdNYW5hZ2VyJykpO1xuICAgICAgLy8gUmVnaXN0ZXIgbWVtb3J5IHJldGVudGlvbiBzdHJhdGVneSAoZmlyc3Qgb2YgcG90ZW50aWFsbHkgNTArIGVsZW1lbnQgdHlwZXMpXG4gICAgICBzZXJ2aWNlLnJlZ2lzdGVyU3RyYXRlZ3kobmV3IE1lbW9yeVJldGVudGlvblN0cmF0ZWd5KCkpO1xuICAgICAgcmV0dXJuIHNlcnZpY2U7XG4gICAgfSk7XG4gICAgdGhpcy5yZWdpc3RlcignSW5kZXhDb25maWdNYW5hZ2VyJywgKCkgPT4gbmV3IEluZGV4Q29uZmlnTWFuYWdlcigpKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdJbmRpY2F0b3JDb25maWcnLCAoKSA9PiBsb2FkSW5kaWNhdG9yQ29uZmlnKCkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ1N0YXRlQ2hhbmdlTm90aWZpZXInLCAoKSA9PiBuZXcgU3RhdGVDaGFuZ2VOb3RpZmllcigpKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdHaXRIdWJSYXRlTGltaXRlcicsICgpID0+IG5ldyBHaXRIdWJSYXRlTGltaXRlcihcbiAgICAgIHRoaXMucmVzb2x2ZSgnVG9rZW5NYW5hZ2VyJylcbiAgICApKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdFbGVtZW50RXZlbnREaXNwYXRjaGVyJywgKCkgPT4gRWxlbWVudEV2ZW50RGlzcGF0Y2hlci5nZXRTaGFyZWREaXNwYXRjaGVyKCkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ01DUExvZ2dlcicsICgpID0+IGxvZ2dlcik7XG5cbiAgICB0aGlzLnJlZ2lzdGVyKCdQZXJzb25hSW1wb3J0ZXInLCAoKSA9PiB7XG4gICAgICBjb25zdCBwb3J0Zm9saW9NYW5hZ2VyID0gdGhpcy5yZXNvbHZlPFBvcnRmb2xpb01hbmFnZXI+KCdQb3J0Zm9saW9NYW5hZ2VyJyk7XG4gICAgICBjb25zdCBwZXJzb25hc0RpciA9IHBvcnRmb2xpb01hbmFnZXIuZ2V0RWxlbWVudERpcihFbGVtZW50VHlwZS5QRVJTT05BKTtcbiAgICAgIC8vIFRoaXMgaXMgYSBiaXQgb2YgYSBoYWNrIHRvIGJyZWFrIHRoZSBjaXJjdWxhciBkZXBlbmRlbmN5LiBXZSByZXNvbHZlIFBlcnNvbmFNYW5hZ2VyIGluc2lkZSB0aGUgcHJvdmlkZXIgZnVuY3Rpb24uXG4gICAgICBjb25zdCBjdXJyZW50VXNlclByb3ZpZGVyID0gKCkgPT4gdGhpcy5yZXNvbHZlPFBlcnNvbmFNYW5hZ2VyPignUGVyc29uYU1hbmFnZXInKS5nZXRDdXJyZW50VXNlckZvckF0dHJpYnV0aW9uKCk7XG4gICAgICByZXR1cm4gbmV3IFBlcnNvbmFJbXBvcnRlcihcbiAgICAgICAgcGVyc29uYXNEaXIsXG4gICAgICAgIGN1cnJlbnRVc2VyUHJvdmlkZXIsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgdGhpcy5yZXNvbHZlKCdGaWxlT3BlcmF0aW9uc1NlcnZpY2UnKVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIC8vIEdJVEhVQiAmIENPTExFQ1RJT05cbiAgICB0aGlzLnJlZ2lzdGVyKCdHaXRIdWJDbGllbnQnLCAoKSA9PiBuZXcgR2l0SHViQ2xpZW50KFxuICAgICAgdGhpcy5yZXNvbHZlKCdBUElDYWNoZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdSYXRlTGltaXRUcmFja2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1Rva2VuTWFuYWdlcicpXG4gICAgKSk7XG4gICAgdGhpcy5yZWdpc3RlcignR2l0SHViQXV0aE1hbmFnZXInLCAoKSA9PiBuZXcgR2l0SHViQXV0aE1hbmFnZXIoXG4gICAgICB0aGlzLnJlc29sdmUoJ0FQSUNhY2hlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0NvbmZpZ01hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnVG9rZW5NYW5hZ2VyJylcbiAgICApKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdDb2xsZWN0aW9uSW5kZXhNYW5hZ2VyJywgKCkgPT4gbmV3IENvbGxlY3Rpb25JbmRleE1hbmFnZXIoe1xuICAgICAgZmlsZU9wZXJhdGlvbnM6IHRoaXMucmVzb2x2ZSgnRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJylcbiAgICB9KSk7XG4gICAgdGhpcy5yZWdpc3RlcignQ29sbGVjdGlvbkJyb3dzZXInLCAoKSA9PiBuZXcgQ29sbGVjdGlvbkJyb3dzZXIodGhpcy5yZXNvbHZlKCdHaXRIdWJDbGllbnQnKSwgdGhpcy5yZXNvbHZlKCdDb2xsZWN0aW9uQ2FjaGUnKSwgdGhpcy5yZXNvbHZlKCdDb2xsZWN0aW9uSW5kZXhNYW5hZ2VyJykpKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdDb2xsZWN0aW9uU2VhcmNoJywgKCkgPT4gbmV3IENvbGxlY3Rpb25TZWFyY2goXG4gICAgICB0aGlzLnJlc29sdmUoJ0dpdEh1YkNsaWVudCcpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdDb2xsZWN0aW9uQ2FjaGUnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnQ29sbGVjdGlvbkluZGV4Q2FjaGUnKVxuICAgICkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ1BlcnNvbmFEZXRhaWxzJywgKCkgPT4gbmV3IFBlcnNvbmFEZXRhaWxzKHRoaXMucmVzb2x2ZSgnR2l0SHViQ2xpZW50JykpKTtcblxuICAgIC8vIFBPUlRGT0xJTyAmIE1BTkFHRVJTXG4gICAgdGhpcy5yZWdpc3RlcignUG9ydGZvbGlvTWFuYWdlcicsICgpID0+IG5ldyBQb3J0Zm9saW9NYW5hZ2VyKFxuICAgICAgdGhpcy5yZXNvbHZlKCdGaWxlT3BlcmF0aW9uc1NlcnZpY2UnKSxcbiAgICAgIHVuZGVmaW5lZFxuICAgICkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ1BlcnNvbmFNYW5hZ2VyJywgKCkgPT4gbmV3IFBlcnNvbmFNYW5hZ2VyKFxuICAgICAgdGhpcy5yZXNvbHZlKCdQb3J0Zm9saW9NYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0luZGljYXRvckNvbmZpZycpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdGaWxlTG9ja01hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1ZhbGlkYXRpb25SZWdpc3RyeScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdNZXRhZGF0YVNlcnZpY2UnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnUGVyc29uYUltcG9ydGVyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1N0YXRlQ2hhbmdlTm90aWZpZXInKSxcbiAgICAgIHtcbiAgICAgICAgZXZlbnREaXNwYXRjaGVyOiB0aGlzLnJlc29sdmUoJ0VsZW1lbnRFdmVudERpc3BhdGNoZXInKSxcbiAgICAgICAgZW5hYmxlRmlsZVdhdGNoZXI6IHRydWUsXG4gICAgICAgIGF1dG9SZWxvYWRPbkV4dGVybmFsQ2hhbmdlOiB0cnVlLFxuICAgICAgICBmaWxlV2F0Y2hTZXJ2aWNlOiB0aGlzLnJlc29sdmUoJ0ZpbGVXYXRjaFNlcnZpY2UnKSxcbiAgICAgICAgbWVtb3J5QnVkZ2V0OiB0aGlzLnJlc29sdmUoJ0NhY2hlTWVtb3J5QnVkZ2V0JyksXG4gICAgICAgIGJhY2t1cFNlcnZpY2U6IHRoaXMucmVzb2x2ZSgnQmFja3VwU2VydmljZScpXG4gICAgICB9XG4gICAgKSk7XG4gICAgdGhpcy5yZWdpc3RlcignSW5pdGlhbGl6YXRpb25TZXJ2aWNlJywgKCkgPT4gbmV3IEluaXRpYWxpemF0aW9uU2VydmljZShcbiAgICAgIHRoaXMucmVzb2x2ZSgnUGVyc29uYU1hbmFnZXInKVxuICAgICkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ1BlcnNvbmFJbmRpY2F0b3JTZXJ2aWNlJywgKCkgPT4gbmV3IFBlcnNvbmFJbmRpY2F0b3JTZXJ2aWNlKFxuICAgICAgdGhpcy5yZXNvbHZlKCdQZXJzb25hTWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdJbmRpY2F0b3JDb25maWcnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnU3RhdGVDaGFuZ2VOb3RpZmllcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdFbGVtZW50RXZlbnREaXNwYXRjaGVyJylcbiAgICApKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdNaWdyYXRpb25NYW5hZ2VyJywgKCkgPT4gbmV3IE1pZ3JhdGlvbk1hbmFnZXIodGhpcy5yZXNvbHZlKCdQb3J0Zm9saW9NYW5hZ2VyJyksIHRoaXMucmVzb2x2ZSgnRmlsZUxvY2tNYW5hZ2VyJyksIHRoaXMucmVzb2x2ZSgnRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJykpKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdFbGVtZW50SW5zdGFsbGVyJywgKCkgPT4gbmV3IEVsZW1lbnRJbnN0YWxsZXIodGhpcy5yZXNvbHZlKCdHaXRIdWJDbGllbnQnKSwge1xuICAgICAgcG9ydGZvbGlvTWFuYWdlcjogdGhpcy5yZXNvbHZlKCdQb3J0Zm9saW9NYW5hZ2VyJyksXG4gICAgICB1bmlmaWVkSW5kZXhNYW5hZ2VyOiB0aGlzLnJlc29sdmUoJ1VuaWZpZWRJbmRleE1hbmFnZXInKSxcbiAgICAgIGZpbGVPcGVyYXRpb25zOiB0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpXG4gICAgfSkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ1BvcnRmb2xpb1JlcG9NYW5hZ2VyJywgKCkgPT4gbmV3IFBvcnRmb2xpb1JlcG9NYW5hZ2VyKFxuICAgICAgdGhpcy5yZXNvbHZlKCdUb2tlbk1hbmFnZXInKSxcbiAgICAgIGdldFBvcnRmb2xpb1JlcG9zaXRvcnlOYW1lKClcbiAgICApKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdHaXRIdWJQb3J0Zm9saW9JbmRleGVyJywgKCkgPT4gbmV3IEdpdEh1YlBvcnRmb2xpb0luZGV4ZXIoXG4gICAgICB0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb1JlcG9NYW5hZ2VyJylcbiAgICApKTtcbiAgICBcbiAgICAvLyBTRVJWSUNFU1xuICAgIHRoaXMucmVnaXN0ZXIoJ1NlcmlhbGl6YXRpb25TZXJ2aWNlJywgKCkgPT4gbmV3IFNlcmlhbGl6YXRpb25TZXJ2aWNlKCkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ01ldGFkYXRhU2VydmljZScsICgpID0+IG5ldyBNZXRhZGF0YVNlcnZpY2UoKSk7XG4gICAgdGhpcy5yZWdpc3RlcignVHJpZ2dlclZhbGlkYXRpb25TZXJ2aWNlJywgKCkgPT4gbmV3IFRyaWdnZXJWYWxpZGF0aW9uU2VydmljZSgpKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdWYWxpZGF0aW9uU2VydmljZScsICgpID0+IG5ldyBWYWxpZGF0aW9uU2VydmljZSgpKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdGaWxlV2F0Y2hTZXJ2aWNlJywgKCkgPT4gbmV3IEZpbGVXYXRjaFNlcnZpY2UoKSk7XG4gICAgdGhpcy5yZWdpc3RlcignVmFsaWRhdGlvblJlZ2lzdHJ5JywgKCkgPT4gbmV3IFZhbGlkYXRpb25SZWdpc3RyeShcbiAgICAgIHRoaXMucmVzb2x2ZSgnVmFsaWRhdGlvblNlcnZpY2UnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnVHJpZ2dlclZhbGlkYXRpb25TZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ01ldGFkYXRhU2VydmljZScpXG4gICAgKSk7XG5cbiAgICAvLyBMT0dHSU5HXG4gICAgdGhpcy5yZWdpc3RlcignTG9nTWFuYWdlcicsICgpID0+IHtcbiAgICAgIGNvbnN0IGNvbmZpZyA9IGJ1aWxkTG9nTWFuYWdlckNvbmZpZyhlbnYpO1xuICAgICAgY29uc3QgbWFuYWdlciA9IG5ldyBMb2dNYW5hZ2VyKGNvbmZpZyk7XG5cbiAgICAgIC8vIFBoYXNlIDI6IEZpbGVMb2dTaW5rXG4gICAgICBjb25zdCBmb3JtYXR0ZXIgPSBjb25maWcubG9nRm9ybWF0ID09PSAnanNvbmwnXG4gICAgICAgID8gbmV3IEpzb25sRm9ybWF0dGVyKClcbiAgICAgICAgOiBuZXcgUGxhaW5UZXh0Rm9ybWF0dGVyKCk7XG4gICAgICBjb25zdCBmaWxlU2luayA9IG5ldyBGaWxlTG9nU2luayh7XG4gICAgICAgIGxvZ0RpcjogY29uZmlnLmxvZ0RpcixcbiAgICAgICAgZm9ybWF0dGVyLFxuICAgICAgICBtYXhGaWxlU2l6ZTogY29uZmlnLmZpbGVNYXhTaXplLFxuICAgICAgICByZXRlbnRpb25EYXlzOiBjb25maWcucmV0ZW50aW9uRGF5cyxcbiAgICAgICAgc2VjdXJpdHlSZXRlbnRpb25EYXlzOiBjb25maWcuc2VjdXJpdHlSZXRlbnRpb25EYXlzLFxuICAgICAgICBtYXhEaXJTaXplQnl0ZXM6IGNvbmZpZy5tYXhEaXJTaXplQnl0ZXMsXG4gICAgICAgIG1heEZpbGVzUGVyQ2F0ZWdvcnk6IGNvbmZpZy5tYXhGaWxlc1BlckNhdGVnb3J5LFxuICAgICAgfSk7XG4gICAgICBtYW5hZ2VyLnJlZ2lzdGVyU2luayhmaWxlU2luayk7XG4gICAgICBmaWxlU2luay5zdGFydENsZWFudXBUaW1lcigpO1xuXG4gICAgICAvLyBQaGFzZSAzOiBNZW1vcnlMb2dTaW5rXG4gICAgICBjb25zdCBtZW1vcnlTaW5rID0gbmV3IE1lbW9yeUxvZ1Npbmsoe1xuICAgICAgICBhcHBDYXBhY2l0eTogY29uZmlnLm1lbW9yeUFwcENhcGFjaXR5LFxuICAgICAgICBzZWN1cml0eUNhcGFjaXR5OiBjb25maWcubWVtb3J5U2VjdXJpdHlDYXBhY2l0eSxcbiAgICAgICAgcGVyZkNhcGFjaXR5OiBjb25maWcubWVtb3J5UGVyZkNhcGFjaXR5LFxuICAgICAgICB0ZWxlbWV0cnlDYXBhY2l0eTogY29uZmlnLm1lbW9yeVRlbGVtZXRyeUNhcGFjaXR5LFxuICAgICAgfSk7XG4gICAgICBtYW5hZ2VyLnJlZ2lzdGVyU2luayhtZW1vcnlTaW5rKTtcblxuICAgICAgdGhpcy5yZWdpc3RlcignTWVtb3J5TG9nU2luaycsICgpID0+IG1lbW9yeVNpbmspO1xuXG4gICAgICAvLyBTdGFydHVwIG1hcmtlciDigJQgZmlyc3QgZW50cnkgaW4gZXZlcnkgc2VydmVyIHNlc3Npb25cbiAgICAgIG1hbmFnZXIubG9nKHtcbiAgICAgICAgaWQ6IG1hbmFnZXIuZ2VuZXJhdGVJZCgpLFxuICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgY2F0ZWdvcnk6ICdhcHBsaWNhdGlvbicsXG4gICAgICAgIGxldmVsOiAnaW5mbycsXG4gICAgICAgIHNvdXJjZTogJ0RvbGxob3VzZU1DUCcsXG4gICAgICAgIG1lc3NhZ2U6IGBEb2xsaG91c2VNQ1AgdiR7VkVSU0lPTn0gc3RhcnRpbmdgLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgdmVyc2lvbjogVkVSU0lPTixcbiAgICAgICAgICBsb2dMZXZlbDogY29uZmlnLmxvZ0xldmVsLFxuICAgICAgICAgIGxvZ0Zvcm1hdDogY29uZmlnLmxvZ0Zvcm1hdCxcbiAgICAgICAgICBjb25zb2xlOiBlbnYuRE9MTEhPVVNFX1dFQl9DT05TT0xFXG4gICAgICAgICAgICA/IGBodHRwOi8vZG9sbGhvdXNlLmxvY2FsaG9zdDoke2Vudi5ET0xMSE9VU0VfV0VCX0NPTlNPTEVfUE9SVH1gXG4gICAgICAgICAgICA6ICdkaXNhYmxlZCcsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIG1hbmFnZXI7XG4gICAgfSk7XG5cbiAgICAvLyBNRVRSSUNTIENPTExFQ1RJT05cbiAgICAvLyBNZW1vcnlNZXRyaWNzU2luayBpcyByZWdpc3RlcmVkIHNlcGFyYXRlbHkgKG5vdCBhcyBhIHNpZGUgZWZmZWN0IGluc2lkZVxuICAgIC8vIE1ldHJpY3NNYW5hZ2VyJ3MgZmFjdG9yeSkgc28gaXQncyBhdmFpbGFibGUgaW4gdGhlIGNvbnRhaW5lciByZWdhcmRsZXNzXG4gICAgLy8gb2YgTWV0cmljc01hbmFnZXIgcmVzb2x1dGlvbiBvcmRlci5cbiAgICBjb25zdCBtZXRyaWNzQ29uZmlnID0gYnVpbGRNZXRyaWNzTWFuYWdlckNvbmZpZyhlbnYpO1xuICAgIGlmIChtZXRyaWNzQ29uZmlnLmVuYWJsZWQpIHtcbiAgICAgIGNvbnN0IG1lbW9yeU1ldHJpY3NTaW5rID0gbmV3IE1lbW9yeU1ldHJpY3NTaW5rKG1ldHJpY3NDb25maWcubWVtb3J5U25hcHNob3RDYXBhY2l0eSk7XG4gICAgICB0aGlzLnJlZ2lzdGVyKCdNZW1vcnlNZXRyaWNzU2luaycsICgpID0+IG1lbW9yeU1ldHJpY3NTaW5rKTtcblxuICAgICAgdGhpcy5yZWdpc3RlcignTWV0cmljc01hbmFnZXInLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG1hbmFnZXIgPSBuZXcgTWV0cmljc01hbmFnZXIobWV0cmljc0NvbmZpZywgbG9nZ2VyKTtcbiAgICAgICAgbWFuYWdlci5yZWdpc3RlclNpbmsobWVtb3J5TWV0cmljc1NpbmspO1xuICAgICAgICByZXR1cm4gbWFuYWdlcjtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFRFTEVNRVRSWVxuICAgIHRoaXMucmVnaXN0ZXIoJ09wZXJhdGlvbmFsVGVsZW1ldHJ5JywgKCkgPT4gbmV3IE9wZXJhdGlvbmFsVGVsZW1ldHJ5KFxuICAgICAgdGhpcy5yZXNvbHZlKCdGaWxlT3BlcmF0aW9uc1NlcnZpY2UnKVxuICAgICkpO1xuXG4gICAgLy8gQkFDS1VQIFNFUlZJQ0UgKElzc3VlICM2NTk6IFVuaXZlcnNhbCBiYWNrdXAgZm9yIGFsbCBlbGVtZW50IHR5cGVzKVxuICAgIHRoaXMucmVnaXN0ZXIoJ0JhY2t1cFNlcnZpY2UnLCAoKSA9PiBuZXcgQmFja3VwU2VydmljZShcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJyksXG4gICAgICB7XG4gICAgICAgIGJhY2t1cFJvb3REaXI6IHBhdGguam9pbih0aGlzLnJlc29sdmU8UG9ydGZvbGlvTWFuYWdlcj4oJ1BvcnRmb2xpb01hbmFnZXInKS5nZXRCYXNlRGlyKCksICcuYmFja3VwcycpLFxuICAgICAgICBtYXhCYWNrdXBzUGVyRWxlbWVudDogZ2V0VmFsaWRhdGVkTWF4QmFja3Vwc1BlckVsZW1lbnQoKSxcbiAgICAgICAgZW5hYmxlZDogU1RPUkFHRV9MQVlFUl9DT05GSUcuQkFDS1VQU19FTkFCTEVELFxuICAgICAgfVxuICAgICkpO1xuXG4gICAgLy8gUE9MSUNZIEVYUE9SVCBTRVJWSUNFIChJc3N1ZSAjNzYyOiBFeHBvcnQgcG9saWNpZXMgdG8gYnJpZGdlKVxuICAgIHRoaXMucmVnaXN0ZXIoJ1BvbGljeUV4cG9ydFNlcnZpY2UnLCAoKSA9PiBuZXcgUG9saWN5RXhwb3J0U2VydmljZSh7XG4gICAgICBnZXRBY3RpdmVFbGVtZW50c0ZvclBvbGljeTogYXN5bmMgKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGhhbmRsZXIgPSB0aGlzLnJlc29sdmU8RWxlbWVudENSVURIYW5kbGVyPignRWxlbWVudENSVURIYW5kbGVyJyk7XG4gICAgICAgICAgcmV0dXJuIGhhbmRsZXIuZ2V0QWN0aXZlRWxlbWVudHNGb3JQb2xpY3koKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZ2V0U2VydmVyVmVyc2lvbjogKCkgPT4gUEFDS0FHRV9WRVJTSU9OLFxuICAgIH0pKTtcblxuICAgIC8vIEVMRU1FTlQgTUFOQUdFUlNcbiAgICB0aGlzLnJlZ2lzdGVyKCdTa2lsbE1hbmFnZXInLCAoKSA9PiBuZXcgU2tpbGxNYW5hZ2VyKFxuICAgICAgdGhpcy5yZXNvbHZlKCdQb3J0Zm9saW9NYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVMb2NrTWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdGaWxlT3BlcmF0aW9uc1NlcnZpY2UnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnVmFsaWRhdGlvblJlZ2lzdHJ5JyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1NlcmlhbGl6YXRpb25TZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ01ldGFkYXRhU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdGaWxlV2F0Y2hTZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0NhY2hlTWVtb3J5QnVkZ2V0JyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0JhY2t1cFNlcnZpY2UnKVxuICAgICkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ1RlbXBsYXRlTWFuYWdlcicsICgpID0+IG5ldyBUZW1wbGF0ZU1hbmFnZXIoXG4gICAgICB0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb01hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZUxvY2tNYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdWYWxpZGF0aW9uUmVnaXN0cnknKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnU2VyaWFsaXphdGlvblNlcnZpY2UnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnTWV0YWRhdGFTZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVXYXRjaFNlcnZpY2UnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnQ2FjaGVNZW1vcnlCdWRnZXQnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnQmFja3VwU2VydmljZScpXG4gICAgKSk7XG4gICAgdGhpcy5yZWdpc3RlcignVGVtcGxhdGVSZW5kZXJlcicsICgpID0+IG5ldyBUZW1wbGF0ZVJlbmRlcmVyKHRoaXMucmVzb2x2ZSgnVGVtcGxhdGVNYW5hZ2VyJykpKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdBZ2VudE1hbmFnZXInLCAoKSA9PiBuZXcgQWdlbnRNYW5hZ2VyKFxuICAgICAgdGhpcy5yZXNvbHZlKCdQb3J0Zm9saW9NYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVMb2NrTWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlPFBvcnRmb2xpb01hbmFnZXI+KCdQb3J0Zm9saW9NYW5hZ2VyJykuZ2V0QmFzZURpcigpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdGaWxlT3BlcmF0aW9uc1NlcnZpY2UnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnVmFsaWRhdGlvblJlZ2lzdHJ5JyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1NlcmlhbGl6YXRpb25TZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ01ldGFkYXRhU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdGaWxlV2F0Y2hTZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0NhY2hlTWVtb3J5QnVkZ2V0JyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0JhY2t1cFNlcnZpY2UnKVxuICAgICkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ01lbW9yeU1hbmFnZXInLCAoKSA9PiBuZXcgTWVtb3J5TWFuYWdlcihcbiAgICAgIHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvTWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdGaWxlTG9ja01hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1ZhbGlkYXRpb25SZWdpc3RyeScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdTZXJpYWxpemF0aW9uU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdNZXRhZGF0YVNlcnZpY2UnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZVdhdGNoU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdDYWNoZU1lbW9yeUJ1ZGdldCcpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdCYWNrdXBTZXJ2aWNlJylcbiAgICApKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdFbnNlbWJsZU1hbmFnZXInLCAoKSA9PiBuZXcgRW5zZW1ibGVNYW5hZ2VyKFxuICAgICAgdGhpcy5yZXNvbHZlKCdQb3J0Zm9saW9NYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVMb2NrTWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdGaWxlT3BlcmF0aW9uc1NlcnZpY2UnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnVmFsaWRhdGlvblJlZ2lzdHJ5JyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1NlcmlhbGl6YXRpb25TZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ01ldGFkYXRhU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdGaWxlV2F0Y2hTZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0NhY2hlTWVtb3J5QnVkZ2V0JyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0JhY2t1cFNlcnZpY2UnKVxuICAgICkpO1xuICAgIE1lbW9yeS5jb25maWd1cmVNZW1vcnlNYW5hZ2VyUmVzb2x2ZXIoKCkgPT4gdGhpcy5yZXNvbHZlKCdNZW1vcnlNYW5hZ2VyJykpO1xuICAgIC8vIElzc3VlICM1MTogQ29uZmlndXJlIHJldGVudGlvbiBwb2xpY3kgcmVzb2x2ZXIgZm9yIE1lbW9yeSBjbGFzc1xuICAgIE1lbW9yeS5jb25maWd1cmVSZXRlbnRpb25Qb2xpY3lSZXNvbHZlcigoKSA9PiB0aGlzLnJlc29sdmUoJ1JldGVudGlvblBvbGljeVNlcnZpY2UnKSk7XG4gICAgLy8gSXNzdWUgIzExMTogQ29uZmlndXJlIGVsZW1lbnQgbWFuYWdlciByZXNvbHZlciBmb3IgQWdlbnRNYW5hZ2VyIChlbGVtZW50LWFnbm9zdGljIGFjdGl2YXRpb24pXG4gICAgQWdlbnRNYW5hZ2VyLnNldEVsZW1lbnRNYW5hZ2VyUmVzb2x2ZXIoKG1hbmFnZXJOYW1lOiBzdHJpbmcpID0+IHRoaXMucmVzb2x2ZShtYW5hZ2VyTmFtZSkpO1xuICAgIC8vIElzc3VlICM0MDI6IENvbmZpZ3VyZSBEYW5nZXJab25lRW5mb3JjZXIgcmVzb2x2ZXIgZm9yIEFnZW50TWFuYWdlciAoYXV0b25vbXkgZXZhbHVhdGlvbilcbiAgICBBZ2VudE1hbmFnZXIuc2V0RGFuZ2VyWm9uZUVuZm9yY2VyUmVzb2x2ZXIoKCkgPT4gdGhpcy5yZXNvbHZlKCdEYW5nZXJab25lRW5mb3JjZXInKSk7XG4gICAgLy8gSXNzdWUgIzE0MjogQ29uZmlndXJlIFZlcmlmaWNhdGlvblN0b3JlIHJlc29sdmVyIGZvciBBZ2VudE1hbmFnZXIgKGRhbmdlciB6b25lIHZlcmlmaWNhdGlvbilcbiAgICBBZ2VudE1hbmFnZXIuc2V0VmVyaWZpY2F0aW9uU3RvcmVSZXNvbHZlcigoKSA9PiB0aGlzLnJlc29sdmUoJ1ZlcmlmaWNhdGlvblN0b3JlJykpO1xuXG4gICAgLy8gUVVFUlkgU0VSVklDRVMgKElzc3VlICMzODogUGFnaW5hdGlvbiwgZmlsdGVyaW5nLCBzb3J0aW5nKVxuICAgIC8vIFRoZXNlIHNlcnZpY2VzIGFyZSBlbGVtZW50LWFnbm9zdGljIGFuZCBjYW4gYmUgdXNlZCB3aXRoIGFueSBlbGVtZW50IHR5cGVcbiAgICB0aGlzLnJlZ2lzdGVyKCdQYWdpbmF0aW9uU2VydmljZScsICgpID0+IG5ldyBQYWdpbmF0aW9uU2VydmljZSgpKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdGaWx0ZXJTZXJ2aWNlJywgKCkgPT4gbmV3IEZpbHRlclNlcnZpY2UoKSk7XG4gICAgdGhpcy5yZWdpc3RlcignU29ydFNlcnZpY2UnLCAoKSA9PiBuZXcgU29ydFNlcnZpY2UoKSk7XG4gICAgdGhpcy5yZWdpc3RlcignRWxlbWVudFF1ZXJ5U2VydmljZScsICgpID0+IG5ldyBFbGVtZW50UXVlcnlTZXJ2aWNlKFxuICAgICAgdGhpcy5yZXNvbHZlPFBhZ2luYXRpb25TZXJ2aWNlPignUGFnaW5hdGlvblNlcnZpY2UnKSxcbiAgICAgIHRoaXMucmVzb2x2ZTxGaWx0ZXJTZXJ2aWNlPignRmlsdGVyU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlPFNvcnRTZXJ2aWNlPignU29ydFNlcnZpY2UnKVxuICAgICkpO1xuXG4gICAgLy8gQ09OVkVSVEVSU1xuICAgIHRoaXMucmVnaXN0ZXIoJ0FudGhyb3BpY1RvRG9sbGhvdXNlQ29udmVydGVyJywgKCkgPT4gbmV3IEFudGhyb3BpY1RvRG9sbGhvdXNlQ29udmVydGVyKCkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0RvbGxob3VzZVRvQW50aHJvcGljQ29udmVydGVyJywgKCkgPT4gbmV3IERvbGxob3VzZVRvQW50aHJvcGljQ29udmVydGVyKCkpO1xuXG4gICAgLy8gU0VDVVJJVFkgU0VSVklDRVNcbiAgICAvLyBJc3N1ZSAjNDAyOiBEYW5nZXJab25lRW5mb3JjZXIgYXMgREktbWFuYWdlZCBzaW5nbGV0b24gKHJlcGxhY2VzIG1vZHVsZS1sZXZlbCBzaW5nbGV0b24pXG4gICAgdGhpcy5yZWdpc3RlcignRGFuZ2VyWm9uZUVuZm9yY2VyJywgKCkgPT4gbmV3IERhbmdlclpvbmVFbmZvcmNlcihcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJylcbiAgICApKTtcbiAgICAvLyBJc3N1ZSAjNTk4OiBBY3RpdmF0aW9uU3RvcmUgZm9yIHBlci1zZXNzaW9uIGFjdGl2YXRpb24gcGVyc2lzdGVuY2VcbiAgICB0aGlzLnJlZ2lzdGVyKCdBY3RpdmF0aW9uU3RvcmUnLCAoKSA9PiBuZXcgQWN0aXZhdGlvblN0b3JlKFxuICAgICAgdGhpcy5yZXNvbHZlKCdGaWxlT3BlcmF0aW9uc1NlcnZpY2UnKVxuICAgICkpO1xuICAgIC8vIElzc3VlICMxNDI6IFZlcmlmaWNhdGlvblN0b3JlIGZvciBkYW5nZXIgem9uZSBjaGFsbGVuZ2UgY29kZXMgKHNlcnZlci1zaWRlKVxuICAgIHRoaXMucmVnaXN0ZXIoJ1ZlcmlmaWNhdGlvblN0b3JlJywgKCkgPT4gbmV3IFZlcmlmaWNhdGlvblN0b3JlKCkpO1xuICAgIC8vIElzc3VlICM1MjI6IE5vbi1ibG9ja2luZyBPUyBkaWFsb2cgbm90aWZpZXIgZm9yIHZlcmlmaWNhdGlvbiBjb2Rlc1xuICAgIHRoaXMucmVnaXN0ZXIoJ1ZlcmlmaWNhdGlvbk5vdGlmaWVyJywgKCkgPT4gbmV3IFZlcmlmaWNhdGlvbk5vdGlmaWVyKCkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ1Rva2VuTWFuYWdlcicsICgpID0+IG5ldyBUb2tlbk1hbmFnZXIoXG4gICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpXG4gICAgKSk7XG4gICAgdGhpcy5yZWdpc3RlcignUGF0dGVybkVuY3J5cHRvcicsICgpID0+IG5ldyBQYXR0ZXJuRW5jcnlwdG9yKCkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0NvbnRleHRUcmFja2VyJywgKCkgPT4gbmV3IENvbnRleHRUcmFja2VyKCkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ1BhdHRlcm5EZWNyeXB0b3InLCAoKSA9PiBuZXcgUGF0dGVybkRlY3J5cHRvcihcbiAgICAgIHRoaXMucmVzb2x2ZSgnUGF0dGVybkVuY3J5cHRvcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdDb250ZXh0VHJhY2tlcicpXG4gICAgKSk7XG4gICAgdGhpcy5yZWdpc3RlcignUGF0dGVybkV4dHJhY3RvcicsICgpID0+IG5ldyBQYXR0ZXJuRXh0cmFjdG9yKFxuICAgICAgdGhpcy5yZXNvbHZlKCdQYXR0ZXJuRW5jcnlwdG9yJylcbiAgICApKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdCYWNrZ3JvdW5kVmFsaWRhdG9yJywgKCkgPT4gbmV3IEJhY2tncm91bmRWYWxpZGF0b3IoXG4gICAgICB0aGlzLnJlc29sdmUoJ1BhdHRlcm5FeHRyYWN0b3InKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnTWVtb3J5TWFuYWdlcicpXG4gICAgKSk7XG4gICAgdGhpcy5yZWdpc3RlcignU2VjdXJpdHlUZWxlbWV0cnknLCAoKSA9PiBuZXcgU2VjdXJpdHlUZWxlbWV0cnkoKSk7XG4gICAgQ29udGVudFZhbGlkYXRvci5jb25maWd1cmVUZWxlbWV0cnlSZXNvbHZlcigoKSA9PiB0aGlzLnJlc29sdmUoJ1NlY3VyaXR5VGVsZW1ldHJ5JykpO1xuXG4gICAgLy8gTkxQICYgSU5ERVhJTkdcbiAgICB0aGlzLnJlZ2lzdGVyKCdOTFBTY29yaW5nTWFuYWdlcicsICgpID0+IHtcbiAgICAgICAgY29uc3QgaW5kZXhDb25maWdNYW5hZ2VyID0gdGhpcy5yZXNvbHZlPEluZGV4Q29uZmlnTWFuYWdlcj4oJ0luZGV4Q29uZmlnTWFuYWdlcicpO1xuICAgICAgICBjb25zdCBjb25maWcgPSBpbmRleENvbmZpZ01hbmFnZXIuZ2V0Q29uZmlnKCk7XG4gICAgICAgIHJldHVybiBuZXcgTkxQU2NvcmluZ01hbmFnZXIoe1xuICAgICAgICAgICAgY2FjaGVFeHBpcnk6IGNvbmZpZy5ubHAuY2FjaGVFeHBpcnlNaW51dGVzICogNjAgKiAxMDAwLFxuICAgICAgICAgICAgbWluVG9rZW5MZW5ndGg6IGNvbmZpZy5ubHAubWluVG9rZW5MZW5ndGgsXG4gICAgICAgICAgICBlbnRyb3B5QmFuZHM6IGNvbmZpZy5ubHAuZW50cm9weUJhbmRzLFxuICAgICAgICAgICAgamFjY2FyZFRocmVzaG9sZHM6IGNvbmZpZy5ubHAuamFjY2FyZFRocmVzaG9sZHNcbiAgICAgICAgfSwgaW5kZXhDb25maWdNYW5hZ2VyKTtcbiAgICB9KTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdWZXJiVHJpZ2dlck1hbmFnZXInLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGluZGV4Q29uZmlnTWFuYWdlciA9IHRoaXMucmVzb2x2ZTxJbmRleENvbmZpZ01hbmFnZXI+KCdJbmRleENvbmZpZ01hbmFnZXInKTtcbiAgICAgICAgY29uc3QgY29uZmlnID0gaW5kZXhDb25maWdNYW5hZ2VyLmdldENvbmZpZygpO1xuICAgICAgICByZXR1cm4gbmV3IFZlcmJUcmlnZ2VyTWFuYWdlcih7XG4gICAgICAgICAgICBjb25maWRlbmNlVGhyZXNob2xkOiBjb25maWcudmVyYnMuY29uZmlkZW5jZVRocmVzaG9sZCxcbiAgICAgICAgICAgIG1heEVsZW1lbnRzUGVyVmVyYjogY29uZmlnLnZlcmJzLm1heEVsZW1lbnRzUGVyVmVyYixcbiAgICAgICAgICAgIGluY2x1ZGVTeW5vbnltczogY29uZmlnLnZlcmJzLmluY2x1ZGVTeW5vbnltc1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdSZWxhdGlvbnNoaXBNYW5hZ2VyJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBpbmRleENvbmZpZ01hbmFnZXIgPSB0aGlzLnJlc29sdmU8SW5kZXhDb25maWdNYW5hZ2VyPignSW5kZXhDb25maWdNYW5hZ2VyJyk7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGluZGV4Q29uZmlnTWFuYWdlci5nZXRDb25maWcoKTtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWxhdGlvbnNoaXBNYW5hZ2VyKHtcbiAgICAgICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgICAgICAgIG1pbkNvbmZpZGVuY2U6IGNvbmZpZy5wZXJmb3JtYW5jZS5zaW1pbGFyaXR5VGhyZXNob2xkLFxuICAgICAgICAgICAgICAgIGVuYWJsZUF1dG9EaXNjb3Zlcnk6IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpbmRleENvbmZpZ01hbmFnZXIsXG4gICAgICAgICAgICB2ZXJiVHJpZ2dlck1hbmFnZXI6IHRoaXMucmVzb2x2ZSgnVmVyYlRyaWdnZXJNYW5hZ2VyJyksXG4gICAgICAgICAgICBubHBTY29yaW5nOiB0aGlzLnJlc29sdmUoJ05MUFNjb3JpbmdNYW5hZ2VyJyksXG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIHRoaXMucmVnaXN0ZXIoJ1BvcnRmb2xpb0luZGV4TWFuYWdlcicsICgpID0+IG5ldyBQb3J0Zm9saW9JbmRleE1hbmFnZXIodGhpcy5yZXNvbHZlKCdJbmRleENvbmZpZ01hbmFnZXInKSwgdGhpcy5yZXNvbHZlKCdQb3J0Zm9saW9NYW5hZ2VyJyksIHRoaXMucmVzb2x2ZSgnRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJykpKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdFbmhhbmNlZEluZGV4SGVscGVycycsICgpID0+IG5ldyBEZWZhdWx0RW5oYW5jZWRJbmRleEhlbHBlcnMoXG4gICAgICBuZXcgRWxlbWVudERlZmluaXRpb25CdWlsZGVyKCksXG4gICAgICBuZXcgU2VtYW50aWNSZWxhdGlvbnNoaXBTZXJ2aWNlKHtcbiAgICAgICAgbmxwU2NvcmluZzogdGhpcy5yZXNvbHZlKCdOTFBTY29yaW5nTWFuYWdlcicpLFxuICAgICAgICByZWxhdGlvbnNoaXBNYW5hZ2VyOiB0aGlzLnJlc29sdmUoJ1JlbGF0aW9uc2hpcE1hbmFnZXInKVxuICAgICAgfSksXG4gICAgICAoY29udGV4dCkgPT4gbmV3IEFjdGlvblRyaWdnZXJFeHRyYWN0b3IoY29udGV4dCksXG4gICAgICAob3B0aW9ucykgPT4ge1xuICAgICAgICBjb25zdCB0cmFja2VyID0gbmV3IFRyaWdnZXJNZXRyaWNzVHJhY2tlcihvcHRpb25zKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0cmFja2VyLmFkZExvZ0xpc3RlbmVyKGdldFRyaWdnZXJNZXRyaWNzTG9nTGlzdGVuZXIoXG4gICAgICAgICAgICB0aGlzLnJlc29sdmUoJ0xvZ01hbmFnZXInKSxcbiAgICAgICAgICAgIHRoaXMucmVzb2x2ZSgnQ29udGV4dFRyYWNrZXInKVxuICAgICAgICAgICkpO1xuICAgICAgICB9IGNhdGNoIHsgLyogTG9nTWFuYWdlciBub3QgeWV0IHJlZ2lzdGVyZWQgKi8gfVxuICAgICAgICByZXR1cm4gdHJhY2tlcjtcbiAgICAgIH1cbiAgICApKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdFbmhhbmNlZEluZGV4TWFuYWdlcicsICgpID0+IG5ldyBFbmhhbmNlZEluZGV4TWFuYWdlcihcbiAgICAgICAgdGhpcy5yZXNvbHZlKCdJbmRleENvbmZpZ01hbmFnZXInKSxcbiAgICAgICAgdGhpcy5yZXNvbHZlKCdDb25maWdNYW5hZ2VyJyksXG4gICAgICAgIHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvSW5kZXhNYW5hZ2VyJyksXG4gICAgICAgIHRoaXMucmVzb2x2ZSgnTkxQU2NvcmluZ01hbmFnZXInKSxcbiAgICAgICAgdGhpcy5yZXNvbHZlKCdWZXJiVHJpZ2dlck1hbmFnZXInKSxcbiAgICAgICAgdGhpcy5yZXNvbHZlKCdSZWxhdGlvbnNoaXBNYW5hZ2VyJyksXG4gICAgICAgIHRoaXMucmVzb2x2ZSgnRW5oYW5jZWRJbmRleEhlbHBlcnMnKSxcbiAgICAgICAgdGhpcy5yZXNvbHZlKCdGaWxlT3BlcmF0aW9uc1NlcnZpY2UnKVxuICAgICkpO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0NvbGxlY3Rpb25JbmRleENhY2hlJywgKCkgPT4gbmV3IENvbGxlY3Rpb25JbmRleENhY2hlKFxuICAgICAgICB0aGlzLnJlc29sdmUoJ0dpdEh1YkNsaWVudCcpLFxuICAgICAgICBwcm9jZXNzLmN3ZCgpLFxuICAgICAgICB0aGlzLnJlc29sdmUoJ1BlcmZvcm1hbmNlTW9uaXRvcicpLFxuICAgICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpXG4gICAgKSk7XG4gICAgdGhpcy5yZWdpc3RlcignVW5pZmllZEluZGV4TWFuYWdlcicsICgpID0+IG5ldyBVbmlmaWVkSW5kZXhNYW5hZ2VyKHtcbiAgICAgICAgcG9ydGZvbGlvSW5kZXhNYW5hZ2VyOiB0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb0luZGV4TWFuYWdlcicpLFxuICAgICAgICBnaXRodWJJbmRleGVyOiB0aGlzLnJlc29sdmUoJ0dpdEh1YlBvcnRmb2xpb0luZGV4ZXInKSxcbiAgICAgICAgY29sbGVjdGlvbkluZGV4Q2FjaGU6IHRoaXMucmVzb2x2ZSgnQ29sbGVjdGlvbkluZGV4Q2FjaGUnKSxcbiAgICAgICAgZ2l0aHViQ2xpZW50OiB0aGlzLnJlc29sdmUoJ0dpdEh1YkNsaWVudCcpLFxuICAgICAgICBhcGlDYWNoZTogdGhpcy5yZXNvbHZlKCdBUElDYWNoZScpLFxuICAgICAgICByYXRlTGltaXRUcmFja2VyOiB0aGlzLnJlc29sdmUoJ1JhdGVMaW1pdFRyYWNrZXInKSxcbiAgICAgICAgcGVyZm9ybWFuY2VNb25pdG9yOiB0aGlzLnJlc29sdmUoJ1BlcmZvcm1hbmNlTW9uaXRvcicpLFxuICAgICAgICBmaWxlT3BlcmF0aW9uczogdGhpcy5yZXNvbHZlKCdGaWxlT3BlcmF0aW9uc1NlcnZpY2UnKVxuICAgIH0pKTtcblxuICAgIHRoaXMucmVnaXN0ZXIoJ1BvcnRmb2xpb1N5bmNDb21wYXJlcicsICgpID0+IG5ldyBQb3J0Zm9saW9TeW5jQ29tcGFyZXIoKSk7XG4gICAgdGhpcy5yZWdpc3RlcignUG9ydGZvbGlvRG93bmxvYWRlcicsICgpID0+IG5ldyBQb3J0Zm9saW9Eb3dubG9hZGVyKCkpO1xuXG4gICAgLy8gU1lOQyAmIFRPT0xTXG4gICAgdGhpcy5yZWdpc3RlcignUG9ydGZvbGlvUHVsbEhhbmRsZXInLCAoKSA9PiBuZXcgUG9ydGZvbGlvUHVsbEhhbmRsZXIoe1xuICAgICAgICBwb3J0Zm9saW9NYW5hZ2VyOiB0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb01hbmFnZXInKSxcbiAgICAgICAgaW5kZXhNYW5hZ2VyOiB0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb0luZGV4TWFuYWdlcicpLFxuICAgICAgICBnaXRodWJJbmRleGVyOiB0aGlzLnJlc29sdmUoJ0dpdEh1YlBvcnRmb2xpb0luZGV4ZXInKSxcbiAgICAgICAgcG9ydGZvbGlvUmVwb01hbmFnZXI6IHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvUmVwb01hbmFnZXInKSxcbiAgICAgICAgc3luY0NvbXBhcmVyOiB0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb1N5bmNDb21wYXJlcicpLFxuICAgICAgICBkb3dubG9hZGVyOiB0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb0Rvd25sb2FkZXInKSxcbiAgICAgICAgZmlsZU9wZXJhdGlvbnM6IHRoaXMucmVzb2x2ZSgnRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJyksXG4gICAgICAgIHRva2VuTWFuYWdlcjogdGhpcy5yZXNvbHZlKCdUb2tlbk1hbmFnZXInKSxcbiAgICB9KSk7XG4gICAgdGhpcy5yZWdpc3RlcignU3VibWl0VG9Qb3J0Zm9saW9Ub29sJywgKCkgPT4gbmV3IFN1Ym1pdFRvUG9ydGZvbGlvVG9vbCh0aGlzLnJlc29sdmUoJ0FQSUNhY2hlJyksIHtcbiAgICAgICAgYXV0aE1hbmFnZXI6IHRoaXMucmVzb2x2ZSgnR2l0SHViQXV0aE1hbmFnZXInKSxcbiAgICAgICAgcG9ydGZvbGlvTWFuYWdlcjogdGhpcy5yZXNvbHZlKCdQb3J0Zm9saW9NYW5hZ2VyJyksXG4gICAgICAgIHBvcnRmb2xpb0luZGV4TWFuYWdlcjogdGhpcy5yZXNvbHZlKCdQb3J0Zm9saW9JbmRleE1hbmFnZXInKSxcbiAgICAgICAgcG9ydGZvbGlvUmVwb01hbmFnZXI6IHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvUmVwb01hbmFnZXInKSxcbiAgICAgICAgcmF0ZUxpbWl0ZXI6IHRoaXMucmVzb2x2ZSgnR2l0SHViUmF0ZUxpbWl0ZXInKSxcbiAgICAgICAgZmlsZU9wZXJhdGlvbnM6IHRoaXMucmVzb2x2ZSgnRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJyksXG4gICAgICAgIHRva2VuTWFuYWdlcjogdGhpcy5yZXNvbHZlKCdUb2tlbk1hbmFnZXInKVxuICAgIH0pKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdQb3J0Zm9saW9TeW5jTWFuYWdlcicsICgpID0+IG5ldyBQb3J0Zm9saW9TeW5jTWFuYWdlcih7XG4gICAgICAgIGNvbmZpZ01hbmFnZXI6IHRoaXMucmVzb2x2ZSgnQ29uZmlnTWFuYWdlcicpLFxuICAgICAgICBwb3J0Zm9saW9NYW5hZ2VyOiB0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb01hbmFnZXInKSxcbiAgICAgICAgcG9ydGZvbGlvUmVwb01hbmFnZXI6IHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvUmVwb01hbmFnZXInKSxcbiAgICAgICAgaW5kZXhlcjogdGhpcy5yZXNvbHZlKCdHaXRIdWJQb3J0Zm9saW9JbmRleGVyJyksXG4gICAgICAgIGZpbGVPcGVyYXRpb25zOiB0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpLFxuICAgICAgICB0b2tlbk1hbmFnZXI6IHRoaXMucmVzb2x2ZSgnVG9rZW5NYW5hZ2VyJylcbiAgICB9KSk7XG5cbiAgICAvLyBTRVJWRVJcbiAgICB0aGlzLnJlZ2lzdGVyKCdTZXJ2ZXJTZXR1cCcsICgpID0+IG5ldyBTZXJ2ZXJTZXR1cChcbiAgICAgIHRoaXMucmVzb2x2ZTxDb250ZXh0VHJhY2tlcj4oJ0NvbnRleHRUcmFja2VyJylcbiAgICApKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdTZXJ2ZXJTdGFydHVwJywgKCkgPT4gbmV3IFNlcnZlclN0YXJ0dXAoXG4gICAgICB0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb01hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZUxvY2tNYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0NvbmZpZ01hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnTWlncmF0aW9uTWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdNZW1vcnlNYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ09wZXJhdGlvbmFsVGVsZW1ldHJ5JylcbiAgICApKTtcbiAgICB0aGlzLnJlZ2lzdGVyKCdCdWlsZEluZm9TZXJ2aWNlJywgKCkgPT4ge1xuICAgICAgY29uc3Qgc2VydmljZSA9IG5ldyBCdWlsZEluZm9TZXJ2aWNlKHRoaXMucmVzb2x2ZSgnRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJykpO1xuICAgICAgLy8gSXNzdWUgIzcwNjogV2lyZSBzdGFydHVwIGluc3RydW1lbnRhdGlvblxuICAgICAgc2VydmljZS5zZXRTdGFydHVwVGltZXIodGhpcy5yZXNvbHZlPFN0YXJ0dXBUaW1lcj4oJ1N0YXJ0dXBUaW1lcicpKTtcbiAgICAgIHNlcnZpY2Uuc2V0RGVmZXJyZWRTZXR1cENoZWNrZXIoKCkgPT4gdGhpcy5kZWZlcnJlZFNldHVwQ29tcGxldGUpO1xuICAgICAgcmV0dXJuIHNlcnZpY2U7XG4gICAgfSk7XG4gICAgdGhpcy5yZWdpc3RlcignUGVyZm9ybWFuY2VNb25pdG9yJywgKCkgPT4ge1xuICAgICAgY29uc3QgbW9uaXRvciA9IG5ldyBQZXJmb3JtYW5jZU1vbml0b3IoKTtcbiAgICAgIG1vbml0b3Iuc3RhcnRNb25pdG9yaW5nKCk7XG4gICAgICByZXR1cm4gbW9uaXRvcjtcbiAgICB9KTtcblxuICAgIHRoaXMucmVnaXN0ZXIoJ09wZXJhdGlvbk1ldHJpY3NUcmFja2VyJywgKCkgPT4gbmV3IE9wZXJhdGlvbk1ldHJpY3NUcmFja2VyKCksIHsgc2luZ2xldG9uOiB0cnVlIH0pO1xuICAgIHRoaXMucmVnaXN0ZXIoJ0dhdGVrZWVwZXJNZXRyaWNzVHJhY2tlcicsICgpID0+IG5ldyBHYXRla2VlcGVyTWV0cmljc1RyYWNrZXIoKSwgeyBzaW5nbGV0b246IHRydWUgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0UGVyc29uYXNEaXIoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMucGVyc29uYXNEaXI7XG4gIH1cblxuICAvKipcbiAgICogUHJlcGFyZSBwb3J0Zm9saW8g4oCUIGNyaXRpY2FsIHBhdGggb25seS5cbiAgICpcbiAgICogSXNzdWUgIzcwNjogU3BsaXQgZnJvbSB0aGUgb3JpZ2luYWwgbW9ub2xpdGhpYyBwcmVwYXJlUG9ydGZvbGlvKCkuXG4gICAqIE9ubHkgd29yayByZXF1aXJlZCBiZWZvcmUgTUNQIGNvbm5lY3QoKSBydW5zIGhlcmUuIE5vbi1jcml0aWNhbCB3b3JrXG4gICAqIChtZW1vcnkgYXV0by1sb2FkLCBhY3RpdmF0aW9uIHJlc3RvcmUsIGxvZyBob29rcywgZGFuZ2VyIHpvbmUgaW5pdClcbiAgICogaXMgZGVmZXJyZWQgdG8gY29tcGxldGVEZWZlcnJlZFNldHVwKCkgd2hpY2ggcnVucyBwb3N0LWNvbm5lY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcHJlcGFyZVBvcnRmb2xpbygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0aW1lciA9IHRoaXMucmVzb2x2ZTxTdGFydHVwVGltZXI+KCdTdGFydHVwVGltZXInKTtcbiAgICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IG1pZ3JhdGlvbk1hbmFnZXIgPSB0aGlzLnJlc29sdmU8TWlncmF0aW9uTWFuYWdlcj4oJ01pZ3JhdGlvbk1hbmFnZXInKTtcbiAgICBjb25zdCBwb3J0Zm9saW9NYW5hZ2VyID0gdGhpcy5yZXNvbHZlPFBvcnRmb2xpb01hbmFnZXI+KCdQb3J0Zm9saW9NYW5hZ2VyJyk7XG5cbiAgICAvLyAtLS0gY29uZmlnX2NoZWNrcyAoY3JpdGljYWwpIC0tLVxuICAgIHRpbWVyLnN0YXJ0UGhhc2UoJ2NvbmZpZ19jaGVja3MnLCB0cnVlKTtcblxuICAgIC8vIFBFUkZPUk1BTkNFIE9QVElNSVpBVElPTjogUnVuIGluZGVwZW5kZW50IGNoZWNrcyBpbiBwYXJhbGxlbCAoNDAtNjAlIGZhc3RlciBzdGFydHVwKVxuICAgIC8vIFVzZSBQcm9taXNlLmFsbFNldHRsZWQgdG8gY2FwdHVyZSBhbGwgY2hlY2sgcmVzdWx0cywgZXZlbiBpZiBvbmUgZmFpbHNcbiAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFtcbiAgICAgIG1pZ3JhdGlvbk1hbmFnZXIubmVlZHNNaWdyYXRpb24oKSxcbiAgICAgIHBvcnRmb2xpb01hbmFnZXIuZXhpc3RzKClcbiAgICBdKTtcblxuICAgIC8vIEV4dHJhY3QgcmVzdWx0cyBhbmQgY29sbGVjdCBhbnkgZXJyb3JzXG4gICAgY29uc3QgY2hlY2tFcnJvcnM6IEFycmF5PHsgY2hlY2s6IHN0cmluZzsgZXJyb3I6IEVycm9yIH0+ID0gW107XG5cbiAgICBsZXQgbmVlZHNNaWdyYXRpb24gPSBmYWxzZTtcbiAgICBpZiAocmVzdWx0c1swXS5zdGF0dXMgPT09ICdmdWxmaWxsZWQnKSB7XG4gICAgICBuZWVkc01pZ3JhdGlvbiA9IHJlc3VsdHNbMF0udmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNoZWNrRXJyb3JzLnB1c2goe1xuICAgICAgICBjaGVjazogJ21pZ3JhdGlvbicsXG4gICAgICAgIGVycm9yOiByZXN1bHRzWzBdLnJlYXNvbiBpbnN0YW5jZW9mIEVycm9yID8gcmVzdWx0c1swXS5yZWFzb24gOiBuZXcgRXJyb3IoU3RyaW5nKHJlc3VsdHNbMF0ucmVhc29uKSlcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGxldCBwb3J0Zm9saW9FeGlzdHMgPSBmYWxzZTtcbiAgICBpZiAocmVzdWx0c1sxXS5zdGF0dXMgPT09ICdmdWxmaWxsZWQnKSB7XG4gICAgICBwb3J0Zm9saW9FeGlzdHMgPSByZXN1bHRzWzFdLnZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjaGVja0Vycm9ycy5wdXNoKHtcbiAgICAgICAgY2hlY2s6ICdwb3J0Zm9saW8nLFxuICAgICAgICBlcnJvcjogcmVzdWx0c1sxXS5yZWFzb24gaW5zdGFuY2VvZiBFcnJvciA/IHJlc3VsdHNbMV0ucmVhc29uIDogbmV3IEVycm9yKFN0cmluZyhyZXN1bHRzWzFdLnJlYXNvbikpXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBJZiBib3RoIGNoZWNrcyBmYWlsZWQsIHRocm93IGNvbXByZWhlbnNpdmUgZXJyb3JcbiAgICBpZiAoY2hlY2tFcnJvcnMubGVuZ3RoID09PSAyKSB7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2VzID0gY2hlY2tFcnJvcnMubWFwKGUgPT4gYCR7ZS5jaGVja306ICR7ZS5lcnJvci5tZXNzYWdlfWApLmpvaW4oJzsgJyk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFBvcnRmb2xpbyBwcmVwYXJhdGlvbiBmYWlsZWQgLSBhbGwgY2hlY2tzIGZhaWxlZDogJHtlcnJvck1lc3NhZ2VzfWApO1xuICAgIH1cblxuICAgIC8vIElmIG9ubHkgb25lIGNoZWNrIGZhaWxlZCwgbG9nIHdhcm5pbmcgYnV0IGNvbnRpbnVlXG4gICAgaWYgKGNoZWNrRXJyb3JzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgbG9nZ2VyLndhcm4oYFBvcnRmb2xpbyBjaGVjayBmYWlsZWQgYnV0IGNvbnRpbnVpbmc6ICR7Y2hlY2tFcnJvcnNbMF0uY2hlY2t9IC0gJHtjaGVja0Vycm9yc1swXS5lcnJvci5tZXNzYWdlfWApO1xuICAgIH1cblxuICAgIHRpbWVyLmVuZFBoYXNlKCdjb25maWdfY2hlY2tzJyk7XG5cbiAgICAvLyAtLS0gbWlncmF0aW9uIChjcml0aWNhbCwgY29uZGl0aW9uYWwpIC0tLVxuICAgIGlmIChuZWVkc01pZ3JhdGlvbikge1xuICAgICAgdGltZXIuc3RhcnRQaGFzZSgnbWlncmF0aW9uJywgdHJ1ZSk7XG4gICAgICBsb2dnZXIuaW5mbyhcIkxlZ2FjeSBwZXJzb25hcyBkZXRlY3RlZC4gU3RhcnRpbmcgbWlncmF0aW9uLi4uXCIpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgbWlncmF0aW9uTWFuYWdlci5taWdyYXRlKHsgYmFja3VwOiB0cnVlIH0pO1xuXG4gICAgICBpZiAocmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgbG9nZ2VyLmluZm8oYFN1Y2Nlc3NmdWxseSBtaWdyYXRlZCAke3Jlc3VsdC5taWdyYXRlZENvdW50fSBwZXJzb25hc2ApO1xuICAgICAgICBpZiAocmVzdWx0LmJhY2tlZFVwICYmIHJlc3VsdC5iYWNrdXBQYXRoKSB7XG4gICAgICAgICAgbG9nZ2VyLmluZm8oYEJhY2t1cCBjcmVhdGVkIGF0OiAke3Jlc3VsdC5iYWNrdXBQYXRofWApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dnZXIuZXJyb3IoXCJNaWdyYXRpb24gY29tcGxldGVkIHdpdGggZXJyb3JzOlwiKTtcbiAgICAgICAgcmVzdWx0LmVycm9ycy5mb3JFYWNoKChlcnIpID0+IGxvZ2dlci5lcnJvcihgICAtICR7ZXJyfWApKTtcbiAgICAgIH1cbiAgICAgIHRpbWVyLmVuZFBoYXNlKCdtaWdyYXRpb24nKTtcbiAgICB9XG5cbiAgICAvLyAtLS0gcG9ydGZvbGlvX2luaXQgKGNyaXRpY2FsLCBjb25kaXRpb25hbCkgLS0tXG4gICAgaWYgKCFwb3J0Zm9saW9FeGlzdHMpIHtcbiAgICAgIHRpbWVyLnN0YXJ0UGhhc2UoJ3BvcnRmb2xpb19pbml0JywgdHJ1ZSk7XG4gICAgICBsb2dnZXIuaW5mbyhcIkNyZWF0aW5nIHBvcnRmb2xpbyBkaXJlY3Rvcnkgc3RydWN0dXJlLi4uXCIpO1xuICAgICAgYXdhaXQgcG9ydGZvbGlvTWFuYWdlci5pbml0aWFsaXplKCk7XG4gICAgICB0aW1lci5lbmRQaGFzZSgncG9ydGZvbGlvX2luaXQnKTtcbiAgICB9XG5cbiAgICAvLyBQRVJGT1JNQU5DRSBPUFRJTUlaQVRJT046IEluaXRpYWxpemUgY29sbGVjdGlvbiBjYWNoZSBpbiBiYWNrZ3JvdW5kIChub24tYmxvY2tpbmcpXG4gICAgLy8gVGhpcyBpcyBzYWZlIGJlY2F1c2UgY29sbGVjdGlvbiBjYWNoZSBpcyBub3QgY3JpdGljYWwgZm9yIHN0YXJ0dXBcbiAgICB0aGlzLmluaXRpYWxpemVDb2xsZWN0aW9uQ2FjaGUoKS5jYXRjaChlcnIgPT5cbiAgICAgIGxvZ2dlci53YXJuKCdCYWNrZ3JvdW5kIGNvbGxlY3Rpb24gY2FjaGUgaW5pdGlhbGl6YXRpb24gZmFpbGVkICh3aWxsIHJldHJ5IG9uIGRlbWFuZCknLCBlcnIpXG4gICAgKTtcblxuICAgIHRoaXMucGVyc29uYXNEaXIgPSBwb3J0Zm9saW9NYW5hZ2VyLmdldEVsZW1lbnREaXIoRWxlbWVudFR5cGUuUEVSU09OQSk7XG5cbiAgICAvLyAtLS0gY29uZmlnX21hbmFnZXIgKGNyaXRpY2FsKSAtLS1cbiAgICB0aW1lci5zdGFydFBoYXNlKCdjb25maWdfbWFuYWdlcicsIHRydWUpO1xuICAgIGNvbnN0IGNvbmZpZ01hbmFnZXIgPSB0aGlzLnJlc29sdmU8Q29uZmlnTWFuYWdlcj4oJ0NvbmZpZ01hbmFnZXInKTtcbiAgICBhd2FpdCBjb25maWdNYW5hZ2VyLmluaXRpYWxpemUoKTtcbiAgICB0aW1lci5lbmRQaGFzZSgnY29uZmlnX21hbmFnZXInKTtcblxuICAgIGNvbnN0IGVsYXBzZWRUaW1lID0gRGF0ZS5ub3coKSAtIHN0YXJ0VGltZTtcbiAgICBsb2dnZXIuaW5mbyhgW1N0YXJ0dXBdIENyaXRpY2FsIHBvcnRmb2xpbyBwYXRoIGNvbXBsZXRlZCBpbiAke2VsYXBzZWRUaW1lfW1zIChwZXJzb25hcyBkaXJlY3Rvcnk6ICR7dGhpcy5wZXJzb25hc0Rpcn0pYCk7XG4gIH1cblxuICAvKipcbiAgICogQ29tcGxldGUgbm9uLWNyaXRpY2FsIHNldHVwIGFmdGVyIE1DUCBjb25uZWN0KCkuXG4gICAqXG4gICAqIElzc3VlICM3MDY6IFRoZXNlIG9wZXJhdGlvbnMgd2VyZSBwcmV2aW91c2x5IGluIHByZXBhcmVQb3J0Zm9saW8oKSBidXQgYXJlXG4gICAqIG5vbi1mYXRhbCBhbmQgY2FuIHNhZmVseSBydW4gYWZ0ZXIgdGhlIHNlcnZlciBpcyBhY2NlcHRpbmcgY29ubmVjdGlvbnMuXG4gICAqIFRoaXMgc2hyaW5rcyB0aGUgY3JpdGljYWwgcGF0aCBieSAxMDAwLTM3MDBtcy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBjb21wbGV0ZURlZmVycmVkU2V0dXAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdGltZXIgPSB0aGlzLnJlc29sdmU8U3RhcnR1cFRpbWVyPignU3RhcnR1cFRpbWVyJyk7XG5cbiAgICAvLyBJc3N1ZSAjNzA2OiBUZXN0IGhvb2sg4oCUIGluamVjdCBhcnRpZmljaWFsIGRlbGF5IHRvIHNpbXVsYXRlIHNsb3cgZGVmZXJyZWQgc2V0dXAuXG4gICAgLy8gT25seSBhY3RpdmUgd2hlbiBET0xMSE9VU0VfVEVTVF9ERUZFUlJFRF9ERUxBWV9NUyBpcyBzZXQgKGludGVncmF0aW9uIHRlc3RzKS5cbiAgICBjb25zdCB0ZXN0RGVsYXkgPSBwYXJzZUludChwcm9jZXNzLmVudi5ET0xMSE9VU0VfVEVTVF9ERUZFUlJFRF9ERUxBWV9NUyB8fCAnMCcsIDEwKTtcbiAgICBpZiAodGVzdERlbGF5ID4gMCkge1xuICAgICAgbG9nZ2VyLmluZm8oYFtTdGFydHVwXSBUZXN0IGRlbGF5IGluamVjdGVkOiAke3Rlc3REZWxheX1tc2ApO1xuICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIHRlc3REZWxheSkpO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuZGVmZXJyZWRNZW1vcnlBdXRvbG9hZCh0aW1lcik7XG4gICAgYXdhaXQgdGhpcy5kZWZlcnJlZEFjdGl2YXRpb25SZXN0b3JlKHRpbWVyKTtcbiAgICBhd2FpdCB0aGlzLmRlZmVycmVkUG9saWN5RXhwb3J0KCk7XG4gICAgYXdhaXQgdGhpcy5kZWZlcnJlZExvZ0hvb2tzKHRpbWVyKTtcbiAgICBhd2FpdCB0aGlzLmRlZmVycmVkTWV0cmljc0NvbGxlY3RvcnModGltZXIpO1xuXG4gICAgLy8gU3dlZXAgc3RhbGUgcG9ydCBmaWxlcyBmcm9tIHByaW9yIHNlc3Npb25zIGJlZm9yZSBhbnkgcG9ydCBvcGVyYXRpb25zICgjMTg1NikuXG4gICAgLy8gUnVucyB1bmNvbmRpdGlvbmFsbHkg4oCUIHN0YWxlIGZpbGVzIGFjY3VtdWxhdGUgcmVnYXJkbGVzcyBvZiBET0xMSE9VU0VfV0VCX0NPTlNPTEUuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgc3dlZXBTdGFsZVBvcnRGaWxlcyB9ID0gYXdhaXQgaW1wb3J0KCcuLi93ZWIvcG9ydERpc2NvdmVyeS5qcycpO1xuICAgICAgYXdhaXQgc3dlZXBTdGFsZVBvcnRGaWxlcygpO1xuICAgIH0gY2F0Y2ggeyAvKiBzd2VlcCBmYWlsdXJlIGlzIG5vbi1mYXRhbCAqLyB9XG5cbiAgICBhd2FpdCB0aGlzLmRlZmVycmVkV2ViQ29uc29sZSh0aW1lcik7XG4gICAgYXdhaXQgdGhpcy5kZWZlcnJlZFBlcm1pc3Npb25TZXJ2ZXIodGltZXIpO1xuICAgIGF3YWl0IHRoaXMuZGVmZXJyZWREYW5nZXJab25lSW5pdCh0aW1lcik7XG4gICAgYXdhaXQgdGhpcy5kZWZlcnJlZFBhdHRlcm5FbmNyeXB0aW9uKHRpbWVyKTtcbiAgICBhd2FpdCB0aGlzLmRlZmVycmVkQmFja2dyb3VuZFZhbGlkYXRvcih0aW1lcik7XG5cbiAgICB0aGlzLmRlZmVycmVkU2V0dXBDb21wbGV0ZSA9IHRydWU7XG5cbiAgICBjb25zdCByZXBvcnQgPSB0aW1lci5nZXRSZXBvcnQoKTtcbiAgICBsb2dnZXIuaW5mbyhcbiAgICAgIGBbU3RhcnR1cF0gRGVmZXJyZWQgc2V0dXAgY29tcGxldGVkIGluICR7cmVwb3J0LmRlZmVycmVkTXN9bXMgYCArXG4gICAgICBgKHRvdGFsIHN0YXJ0dXA6ICR7cmVwb3J0LnRvdGFsTXN9bXMsIGNyaXRpY2FsOiAke3JlcG9ydC5jcml0aWNhbFBhdGhNc31tcylgXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZGVmZXJyZWRNZW1vcnlBdXRvbG9hZCh0aW1lcjogU3RhcnR1cFRpbWVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGltZXIuc3RhcnRQaGFzZSgnbWVtb3J5X2F1dG9sb2FkJywgZmFsc2UpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb25maWdNYW5hZ2VyID0gdGhpcy5yZXNvbHZlPENvbmZpZ01hbmFnZXI+KCdDb25maWdNYW5hZ2VyJyk7XG4gICAgICBjb25zdCBjb25maWcgPSBjb25maWdNYW5hZ2VyLmdldENvbmZpZygpO1xuXG4gICAgICBpZiAoY29uZmlnLmF1dG9Mb2FkLmVuYWJsZWQpIHtcbiAgICAgICAgY29uc3QgbWVtb3J5TWFuYWdlciA9IHRoaXMucmVzb2x2ZTxNZW1vcnlNYW5hZ2VyPignTWVtb3J5TWFuYWdlcicpO1xuICAgICAgICBjb25zdCBhdXRvTG9hZFJlc3VsdCA9IGF3YWl0IG1lbW9yeU1hbmFnZXIubG9hZEFuZEFjdGl2YXRlQXV0b0xvYWRNZW1vcmllcygpO1xuXG4gICAgICAgIGlmIChhdXRvTG9hZFJlc3VsdC5lcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGxvZ2dlci53YXJuKFxuICAgICAgICAgICAgYFtDb250YWluZXJdIEF1dG8tbG9hZCBjb21wbGV0ZWQgd2l0aCAke2F1dG9Mb2FkUmVzdWx0LmVycm9ycy5sZW5ndGh9IGVycm9yKHMpOmAsXG4gICAgICAgICAgICBhdXRvTG9hZFJlc3VsdC5lcnJvcnNcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgbG9nZ2VyLmluZm8oXG4gICAgICAgICAgYFtDb250YWluZXJdIEF1dG8tbG9hZGVkICR7YXV0b0xvYWRSZXN1bHQubG9hZGVkfSBtZW1vcmllcyBgICtcbiAgICAgICAgICBgKH4ke2F1dG9Mb2FkUmVzdWx0LnRvdGFsVG9rZW5zfSB0b2tlbnMpLCAke2F1dG9Mb2FkUmVzdWx0LnNraXBwZWR9IHNraXBwZWRgXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dnZXIuZGVidWcoJ1tDb250YWluZXJdIEF1dG8tbG9hZCBtZW1vcmllcyBkaXNhYmxlZCBpbiBjb25maWd1cmF0aW9uJyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignW0NvbnRhaW5lcl0gTWVtb3J5IGF1dG8tbG9hZCBmYWlsZWQ6JywgZXJyb3IpO1xuICAgIH1cbiAgICB0aW1lci5lbmRQaGFzZSgnbWVtb3J5X2F1dG9sb2FkJyk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRlZmVycmVkQWN0aXZhdGlvblJlc3RvcmUodGltZXI6IFN0YXJ0dXBUaW1lcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHRpbWVyLnN0YXJ0UGhhc2UoJ2FjdGl2YXRpb25fcmVzdG9yZScsIGZhbHNlKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYWN0aXZhdGlvblN0b3JlID0gdGhpcy5yZXNvbHZlPEFjdGl2YXRpb25TdG9yZT4oJ0FjdGl2YXRpb25TdG9yZScpO1xuICAgICAgYXdhaXQgYWN0aXZhdGlvblN0b3JlLmluaXRpYWxpemUoKTtcblxuICAgICAgaWYgKGFjdGl2YXRpb25TdG9yZS5pc0VuYWJsZWQoKSkge1xuICAgICAgICBhd2FpdCB0aGlzLnJlc3RvcmVBY3RpdmF0aW9ucyhhY3RpdmF0aW9uU3RvcmUpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIud2FybignW0NvbnRhaW5lcl0gQWN0aXZhdGlvbiBzdGF0ZSByZXN0b3JhdGlvbiBmYWlsZWQ6JywgZXJyb3IpO1xuICAgIH1cbiAgICB0aW1lci5lbmRQaGFzZSgnYWN0aXZhdGlvbl9yZXN0b3JlJyk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRlZmVycmVkUG9saWN5RXhwb3J0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwb2xpY3lFeHBvcnRTZXJ2aWNlID0gdGhpcy5yZXNvbHZlPFBvbGljeUV4cG9ydFNlcnZpY2U+KCdQb2xpY3lFeHBvcnRTZXJ2aWNlJyk7XG4gICAgICBhd2FpdCBwb2xpY3lFeHBvcnRTZXJ2aWNlLmV4cG9ydFBvbGljaWVzKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZygnW0NvbnRhaW5lcl0gUG9saWN5IGV4cG9ydCBza2lwcGVkOicsIGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRlZmVycmVkTG9nSG9va3ModGltZXI6IFN0YXJ0dXBUaW1lcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHRpbWVyLnN0YXJ0UGhhc2UoJ2xvZ19ob29rcycsIGZhbHNlKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbG9nTWFuYWdlciA9IHRoaXMucmVzb2x2ZTxMb2dNYW5hZ2VyPignTG9nTWFuYWdlcicpO1xuICAgICAgY29uc3QgbG9nQ2xlYW51cHMgPSB3aXJlTG9nSG9va3MobG9nTWFuYWdlciwgdGhpcyk7XG4gICAgICB0aGlzLnJlZ2lzdGVyKCdfbG9nSG9va0NsZWFudXBzJywgKCkgPT4gbG9nQ2xlYW51cHMpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIud2FybignW0NvbnRhaW5lcl0gRmFpbGVkIHRvIHdpcmUgbG9nIGhvb2tzOicsIGVycm9yKTtcbiAgICB9XG4gICAgdGltZXIuZW5kUGhhc2UoJ2xvZ19ob29rcycpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkZWZlcnJlZE1ldHJpY3NDb2xsZWN0b3JzKHRpbWVyOiBTdGFydHVwVGltZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aW1lci5zdGFydFBoYXNlKCdtZXRyaWNzX2NvbGxlY3RvcnMnLCBmYWxzZSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG1ldHJpY3NNYW5hZ2VyID0gdGhpcy5yZXNvbHZlPE1ldHJpY3NNYW5hZ2VyPignTWV0cmljc01hbmFnZXInKTtcbiAgICAgIHRoaXMud2lyZU1ldHJpY3NDb2xsZWN0b3JzKG1ldHJpY3NNYW5hZ2VyKTtcbiAgICAgIG1ldHJpY3NNYW5hZ2VyLnN0YXJ0KCk7XG4gICAgICBsb2dnZXIuaW5mbygnW0NvbnRhaW5lcl0gTWV0cmljcyBjb2xsZWN0aW9uIHN0YXJ0ZWQnKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLndhcm4oJ1tDb250YWluZXJdIE1ldHJpY3Mgd2lyaW5nIHNraXBwZWQ6JywgZXJyb3IpO1xuICAgIH1cbiAgICB0aW1lci5lbmRQaGFzZSgnbWV0cmljc19jb2xsZWN0b3JzJyk7XG4gIH1cblxuICAvKiogVHJ5IHRvIHJlc29sdmUgYSBzZXJ2aWNlLCByZXR1cm5pbmcgdW5kZWZpbmVkIGlmIG5vdCByZWdpc3RlcmVkICovXG4gIHByaXZhdGUgdHJ5UmVzb2x2ZTxUPihuYW1lOiBzdHJpbmcpOiBUIHwgdW5kZWZpbmVkIHtcbiAgICB0cnkgeyByZXR1cm4gdGhpcy5yZXNvbHZlPFQ+KG5hbWUpOyB9IGNhdGNoIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICB9XG5cbiAgLyoqIFdpcmUgU1NFIGJyb2FkY2FzdCBzaW5rcyBmb3IgdGhlIHdlYiBjb25zb2xlICovXG4gIHByaXZhdGUgd2lyZVNTRUJyb2FkY2FzdHMoXG4gICAgd2ViUmVzdWx0OiBpbXBvcnQoJy4uL3dlYi9zZXJ2ZXIuanMnKS5XZWJTZXJ2ZXJSZXN1bHQsXG4gICAgbWV0cmljc1Npbms6IE1lbW9yeU1ldHJpY3NTaW5rIHwgdW5kZWZpbmVkLFxuICApOiB2b2lkIHtcbiAgICBpZiAod2ViUmVzdWx0LmxvZ0Jyb2FkY2FzdCkge1xuICAgICAgY29uc3QgbG9nTWFuYWdlciA9IHRoaXMucmVzb2x2ZTxMb2dNYW5hZ2VyPignTG9nTWFuYWdlcicpO1xuICAgICAgbG9nTWFuYWdlci5yZWdpc3RlclNpbmsobmV3IFdlYlNTRUxvZ1Npbmsod2ViUmVzdWx0LmxvZ0Jyb2FkY2FzdCkpO1xuICAgIH1cbiAgICBpZiAod2ViUmVzdWx0Lm1ldHJpY3NPblNuYXBzaG90ICYmIG1ldHJpY3NTaW5rKSB7XG4gICAgICBjb25zdCBtZXRyaWNzTWFuYWdlciA9IHRoaXMudHJ5UmVzb2x2ZTxNZXRyaWNzTWFuYWdlcj4oJ01ldHJpY3NNYW5hZ2VyJyk7XG4gICAgICBpZiAobWV0cmljc01hbmFnZXIpIHtcbiAgICAgICAgbWV0cmljc01hbmFnZXIucmVnaXN0ZXJTaW5rKG5ldyBXZWJTU0VNZXRyaWNzU2luayh3ZWJSZXN1bHQubWV0cmljc09uU25hcHNob3QpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRlZmVycmVkV2ViQ29uc29sZSh0aW1lcjogU3RhcnR1cFRpbWVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGltZXIuc3RhcnRQaGFzZSgnd2ViX2NvbnNvbGUnLCBmYWxzZSk7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghZW52LkRPTExIT1VTRV9XRUJfQ09OU09MRSkgcmV0dXJuO1xuXG4gICAgICBjb25zdCBhY3RpdmF0aW9uU3RvcmUgPSB0aGlzLnJlc29sdmU8QWN0aXZhdGlvblN0b3JlPignQWN0aXZhdGlvblN0b3JlJyk7XG4gICAgICBjb25zdCBzZXNzaW9uSWQgPSBhY3RpdmF0aW9uU3RvcmUuZ2V0U2Vzc2lvbklkKCk7XG4gICAgICBjb25zdCBwb3J0Zm9saW9NYW5hZ2VyID0gdGhpcy5yZXNvbHZlPFBvcnRmb2xpb01hbmFnZXI+KCdQb3J0Zm9saW9NYW5hZ2VyJyk7XG4gICAgICBjb25zdCBtZW1vcnlTaW5rID0gdGhpcy5yZXNvbHZlPE1lbW9yeUxvZ1Npbms+KCdNZW1vcnlMb2dTaW5rJyk7XG4gICAgICBjb25zdCBtZXRyaWNzU2luayA9IHRoaXMudHJ5UmVzb2x2ZTxNZW1vcnlNZXRyaWNzU2luaz4oJ01lbW9yeU1ldHJpY3NTaW5rJyk7XG4gICAgICBjb25zdCBtY3BBcWxIYW5kbGVyID0gdGhpcy50cnlSZXNvbHZlPE1DUEFRTEhhbmRsZXI+KCdtY3BBcWxIYW5kbGVyJyk7XG4gICAgICBjb25zdCBsb2dNYW5hZ2VyID0gdGhpcy5yZXNvbHZlPExvZ01hbmFnZXI+KCdMb2dNYW5hZ2VyJyk7XG5cbiAgICAgIC8vIFJlc29sdmUgY29uc29sZSBwb3J0OiBjb25maWcgZmlsZSDihpIgZW52IHZhciDihpIgZGVmYXVsdCAoIzE4NDApXG4gICAgICBjb25zdCBjb25maWdNYW5hZ2VyID0gdGhpcy5yZXNvbHZlPENvbmZpZ01hbmFnZXI+KCdDb25maWdNYW5hZ2VyJyk7XG4gICAgICBjb25zdCBjb25maWdQb3J0ID0gY29uZmlnTWFuYWdlci5nZXRTZXR0aW5nPG51bWJlcj4oJ2NvbnNvbGUucG9ydCcpO1xuXG4gICAgICBjb25zdCB7IHN0YXJ0VW5pZmllZENvbnNvbGUgfSA9IGF3YWl0IGltcG9ydCgnLi4vd2ViL2NvbnNvbGUvVW5pZmllZENvbnNvbGUuanMnKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHN0YXJ0VW5pZmllZENvbnNvbGUoe1xuICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgIHBvcnRmb2xpb0RpcjogcG9ydGZvbGlvTWFuYWdlci5nZXRCYXNlRGlyKCksXG4gICAgICAgIG1lbW9yeVNpbmssXG4gICAgICAgIG1ldHJpY3NTaW5rLFxuICAgICAgICBtY3BBcWxIYW5kbGVyLFxuICAgICAgICByZWdpc3RlckxvZ1Npbms6IChzaW5rKSA9PiBsb2dNYW5hZ2VyLnJlZ2lzdGVyU2luayhzaW5rKSxcbiAgICAgICAgd2lyZVNTRUJyb2FkY2FzdHM6ICh3ZWJSZXN1bHQsIG1TaW5rKSA9PiB0aGlzLndpcmVTU0VCcm9hZGNhc3RzKHdlYlJlc3VsdCwgbVNpbmspLFxuICAgICAgICBwb3J0OiBjb25maWdQb3J0LFxuICAgICAgfSk7XG5cbiAgICAgIGxvZ2dlci5pbmZvKGBbQ29udGFpbmVyXSBXZWIgY29uc29sZSBzdGFydGVkIGFzICR7cmVzdWx0LnJvbGV9YCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci53YXJuKCdbQ29udGFpbmVyXSBXZWIgY29uc29sZSBzdGFydHVwIGZhaWxlZDonLCBlcnJvcik7XG4gICAgfVxuICAgIHRpbWVyLmVuZFBoYXNlKCd3ZWJfY29uc29sZScpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkZWZlcnJlZFBlcm1pc3Npb25TZXJ2ZXIodGltZXI6IFN0YXJ0dXBUaW1lcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHRpbWVyLnN0YXJ0UGhhc2UoJ3Blcm1pc3Npb25fc2VydmVyJywgZmFsc2UpO1xuICAgIHRyeSB7XG4gICAgICBpZiAoIWVudi5ET0xMSE9VU0VfUEVSTUlTU0lPTl9TRVJWRVIpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdbQ29udGFpbmVyXSBQZXJtaXNzaW9uIHNlcnZlciBkaXNhYmxlZCB2aWEgRE9MTEhPVVNFX1BFUk1JU1NJT05fU0VSVkVSPWZhbHNlJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFlbnYuRE9MTEhPVVNFX1dFQl9DT05TT0xFKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnW0NvbnRhaW5lcl0gUGVybWlzc2lvbiBzZXJ2ZXIgc2tpcHBlZCDigJQgd2ViIGNvbnNvbGUgaXMgZGlzYWJsZWQnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBQZXJtaXNzaW9uIHJvdXRlcyBhcmUgYWxyZWFkeSBtb3VudGVkIG9uIHRoZSB1bmlmaWVkIHdlYiBjb25zb2xlLlxuICAgICAgLy8gV2UganVzdCBuZWVkIHRvIHdyaXRlIHRoZSBwb3J0IGZpbGUgc28gdGhlIFByZVRvb2xVc2UgaG9vayBzY3JpcHRcbiAgICAgIC8vIGNhbiBkaXNjb3ZlciBpdC4gTm8gc2VwYXJhdGUgc2VydmVyIOKAlCB1c2UgdGhlIGV4aXN0aW5nIGNvbnNvbGUgcG9ydC5cbiAgICAgIGNvbnN0IHBvcnQgPSBlbnYuRE9MTEhPVVNFX1dFQl9DT05TT0xFX1BPUlQ7XG4gICAgICBjb25zdCBzdGFydE1zID0gRGF0ZS5ub3coKTtcblxuICAgICAgY29uc3QgeyB3cml0ZVBvcnRGaWxlLCByZWdpc3RlclBvcnRDbGVhbnVwIH0gPSBhd2FpdCBpbXBvcnQoJy4uL2F1dG8tZG9sbGhvdXNlL3BvcnREaXNjb3ZlcnkuanMnKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgW0NvbnRhaW5lcl0gV3JpdGluZyBwZXJtaXNzaW9uIHNlcnZlciBwb3J0IGZpbGUgZm9yIHBvcnQgJHtwb3J0fWApO1xuICAgICAgYXdhaXQgd3JpdGVQb3J0RmlsZShwb3J0KTtcbiAgICAgIHJlZ2lzdGVyUG9ydENsZWFudXAoKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgW0NvbnRhaW5lcl0gUG9ydCBjbGVhbnVwIGhhbmRsZXJzIHJlZ2lzdGVyZWRgKTtcblxuICAgICAgY29uc3QgZWxhcHNlZE1zID0gRGF0ZS5ub3coKSAtIHN0YXJ0TXM7XG4gICAgICBsb2dnZXIuaW5mbyhgW0NvbnRhaW5lcl0gUGVybWlzc2lvbiBzZXJ2ZXIgcG9ydCBmaWxlIHdyaXR0ZW4gKHBvcnQgJHtwb3J0fSwgJHtlbGFwc2VkTXN9bXMpYCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci53YXJuKCdbQ29udGFpbmVyXSBQZXJtaXNzaW9uIHNlcnZlciBzdGFydHVwIGZhaWxlZDonLCBlcnJvcik7XG4gICAgfVxuICAgIHRpbWVyLmVuZFBoYXNlKCdwZXJtaXNzaW9uX3NlcnZlcicpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkZWZlcnJlZERhbmdlclpvbmVJbml0KHRpbWVyOiBTdGFydHVwVGltZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aW1lci5zdGFydFBoYXNlKCdkYW5nZXJfem9uZV9pbml0JywgZmFsc2UpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBkYW5nZXJab25lRW5mb3JjZXIgPSB0aGlzLnJlc29sdmU8RGFuZ2VyWm9uZUVuZm9yY2VyPignRGFuZ2VyWm9uZUVuZm9yY2VyJyk7XG4gICAgICBhd2FpdCBkYW5nZXJab25lRW5mb3JjZXIuaW5pdGlhbGl6ZSgpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIud2FybignW0NvbnRhaW5lcl0gRGFuZ2VyWm9uZUVuZm9yY2VyIGluaXRpYWxpemF0aW9uIGZhaWxlZDonLCBlcnJvcik7XG4gICAgfVxuICAgIHRpbWVyLmVuZFBoYXNlKCdkYW5nZXJfem9uZV9pbml0Jyk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRlZmVycmVkUGF0dGVybkVuY3J5cHRpb24odGltZXI6IFN0YXJ0dXBUaW1lcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHRpbWVyLnN0YXJ0UGhhc2UoJ3BhdHRlcm5fZW5jcnlwdGlvbicsIGZhbHNlKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGF0dGVybkVuY3J5cHRvciA9IHRoaXMucmVzb2x2ZSgnUGF0dGVybkVuY3J5cHRvcicpIGFzIFBhdHRlcm5FbmNyeXB0b3I7XG4gICAgICBhd2FpdCBwYXR0ZXJuRW5jcnlwdG9yLmluaXRpYWxpemUoKTtcbiAgICAgIGxvZ2dlci5pbmZvKFwiUGF0dGVybiBlbmNyeXB0aW9uIGluaXRpYWxpemVkXCIpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIud2FybignW0NvbnRhaW5lcl0gUGF0dGVybiBlbmNyeXB0aW9uIGluaXRpYWxpemF0aW9uIGZhaWxlZDonLCBlcnJvcik7XG4gICAgfVxuICAgIHRpbWVyLmVuZFBoYXNlKCdwYXR0ZXJuX2VuY3J5cHRpb24nKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZGVmZXJyZWRCYWNrZ3JvdW5kVmFsaWRhdG9yKHRpbWVyOiBTdGFydHVwVGltZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aW1lci5zdGFydFBoYXNlKCdiYWNrZ3JvdW5kX3ZhbGlkYXRvcicsIGZhbHNlKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYmFja2dyb3VuZFZhbGlkYXRvciA9IHRoaXMucmVzb2x2ZSgnQmFja2dyb3VuZFZhbGlkYXRvcicpIGFzIGFueTtcbiAgICAgIGJhY2tncm91bmRWYWxpZGF0b3Iuc3RhcnQoKTtcbiAgICAgIGxvZ2dlci5pbmZvKFwiQmFja2dyb3VuZCB2YWxpZGF0b3Igc3RhcnRlZCBmb3IgbWVtb3J5IHNlY3VyaXR5XCIpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIud2FybignW0NvbnRhaW5lcl0gQmFja2dyb3VuZCB2YWxpZGF0b3Igc3RhcnQgZmFpbGVkOicsIGVycm9yKTtcbiAgICB9XG4gICAgdGltZXIuZW5kUGhhc2UoJ2JhY2tncm91bmRfdmFsaWRhdG9yJyk7XG4gIH1cblxuICAvKipcbiAgICogUmVzdG9yZSBwZXItc2Vzc2lvbiBhY3RpdmF0aW9uIHN0YXRlIGZyb20gdGhlIEFjdGl2YXRpb25TdG9yZS5cbiAgICogQ2FsbGVkIGR1cmluZyBwcmVwYXJlUG9ydGZvbGlvKCkgYWZ0ZXIgYXV0by1sb2FkIG1lbW9yaWVzLlxuICAgKlxuICAgKiBJc3N1ZSAjNTk4OiBFYWNoIGVsZW1lbnQgdHlwZSBpcyByZXN0b3JlZCBpbmRlcGVuZGVudGx5LlxuICAgKiBNaXNzaW5nIGVsZW1lbnRzIChkZWxldGVkIHNpbmNlIGxhc3Qgc2Vzc2lvbikgYXJlIHNraXBwZWQgYW5kIHBydW5lZC5cbiAgICogQXV0by1sb2FkZWQgbWVtb3JpZXMgYXJlIGRlZHVwbGljYXRlZCAobm90IGFjdGl2YXRlZCB0d2ljZSkuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHJlc3RvcmVBY3RpdmF0aW9ucyhzdG9yZTogQWN0aXZhdGlvblN0b3JlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcGVyc29uYU1hbmFnZXIgPSB0aGlzLnJlc29sdmU8UGVyc29uYU1hbmFnZXI+KCdQZXJzb25hTWFuYWdlcicpO1xuICAgIGNvbnN0IHNraWxsTWFuYWdlciA9IHRoaXMucmVzb2x2ZTxTa2lsbE1hbmFnZXI+KCdTa2lsbE1hbmFnZXInKTtcbiAgICBjb25zdCBhZ2VudE1hbmFnZXIgPSB0aGlzLnJlc29sdmU8QWdlbnRNYW5hZ2VyPignQWdlbnRNYW5hZ2VyJyk7XG4gICAgY29uc3QgbWVtb3J5TWFuYWdlciA9IHRoaXMucmVzb2x2ZTxNZW1vcnlNYW5hZ2VyPignTWVtb3J5TWFuYWdlcicpO1xuICAgIGNvbnN0IGVuc2VtYmxlTWFuYWdlciA9IHRoaXMucmVzb2x2ZTxFbnNlbWJsZU1hbmFnZXI+KCdFbnNlbWJsZU1hbmFnZXInKTtcblxuICAgIGxldCByZXN0b3JlZENvdW50ID0gMDtcbiAgICBsZXQgc2tpcHBlZENvdW50ID0gMDtcblxuICAgIC8vIFJlc3RvcmUgcGVyc29uYXMgKHVzZXMgZmlsZW5hbWUgaWYgYXZhaWxhYmxlLCBmYWxscyBiYWNrIHRvIG5hbWUpXG4gICAgLy8gSXNzdWUgIzg0MzogYWN0aXZhdGVQZXJzb25hKCkgaXMgbm93IGFzeW5jIOKAlCB1c2VzIGRpc2sgZmFsbGJhY2sgZm9yIGNhY2hlIG1pc3Nlc1xuICAgIGZvciAoY29uc3QgYWN0aXZhdGlvbiBvZiBzdG9yZS5nZXRBY3RpdmF0aW9ucygncGVyc29uYScpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBpZGVudGlmaWVyID0gYWN0aXZhdGlvbi5maWxlbmFtZSB8fCBhY3RpdmF0aW9uLm5hbWU7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBlcnNvbmFNYW5hZ2VyLmFjdGl2YXRlUGVyc29uYShpZGVudGlmaWVyKTtcbiAgICAgICAgaWYgKHJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgICAgcmVzdG9yZWRDb3VudCsrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhgW0FjdGl2YXRpb25TdG9yZV0gUHJ1bmluZyBtaXNzaW5nIHBlcnNvbmEgJyR7YWN0aXZhdGlvbi5uYW1lfSdgKTtcbiAgICAgICAgICBzdG9yZS5yZW1vdmVTdGFsZUFjdGl2YXRpb24oJ3BlcnNvbmEnLCBhY3RpdmF0aW9uLm5hbWUpO1xuICAgICAgICAgIHNraXBwZWRDb3VudCsrO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBbQWN0aXZhdGlvblN0b3JlXSBTa2lwcGluZyBmYWlsZWQgcGVyc29uYSAnJHthY3RpdmF0aW9uLm5hbWV9J2ApO1xuICAgICAgICBzdG9yZS5yZW1vdmVTdGFsZUFjdGl2YXRpb24oJ3BlcnNvbmEnLCBhY3RpdmF0aW9uLm5hbWUpO1xuICAgICAgICBza2lwcGVkQ291bnQrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZXN0b3JlIHNraWxsc1xuICAgIC8vIE5PVEU6IGFjdGl2YXRlU2tpbGwoKSByZXR1cm5zIHtzdWNjZXNzLCBtZXNzYWdlfSDigJQgaXQgbmV2ZXIgdGhyb3dzIG9uIG5vdC1mb3VuZC5cbiAgICBmb3IgKGNvbnN0IGFjdGl2YXRpb24gb2Ygc3RvcmUuZ2V0QWN0aXZhdGlvbnMoJ3NraWxsJykpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNraWxsTWFuYWdlci5hY3RpdmF0ZVNraWxsKGFjdGl2YXRpb24ubmFtZSk7XG4gICAgICAgIGlmIChyZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgIHJlc3RvcmVkQ291bnQrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2dnZXIuZGVidWcoYFtBY3RpdmF0aW9uU3RvcmVdIFBydW5pbmcgbWlzc2luZyBza2lsbCAnJHthY3RpdmF0aW9uLm5hbWV9J2ApO1xuICAgICAgICAgIHN0b3JlLnJlbW92ZVN0YWxlQWN0aXZhdGlvbignc2tpbGwnLCBhY3RpdmF0aW9uLm5hbWUpO1xuICAgICAgICAgIHNraXBwZWRDb3VudCsrO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBbQWN0aXZhdGlvblN0b3JlXSBTa2lwcGluZyBmYWlsZWQgc2tpbGwgJyR7YWN0aXZhdGlvbi5uYW1lfSdgKTtcbiAgICAgICAgc3RvcmUucmVtb3ZlU3RhbGVBY3RpdmF0aW9uKCdza2lsbCcsIGFjdGl2YXRpb24ubmFtZSk7XG4gICAgICAgIHNraXBwZWRDb3VudCsrO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJlc3RvcmUgYWdlbnRzXG4gICAgZm9yIChjb25zdCBhY3RpdmF0aW9uIG9mIHN0b3JlLmdldEFjdGl2YXRpb25zKCdhZ2VudCcpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBhZ2VudE1hbmFnZXIuYWN0aXZhdGVBZ2VudChhY3RpdmF0aW9uLm5hbWUpO1xuICAgICAgICBpZiAocmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgICByZXN0b3JlZENvdW50Kys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbG9nZ2VyLmRlYnVnKGBbQWN0aXZhdGlvblN0b3JlXSBQcnVuaW5nIG1pc3NpbmcgYWdlbnQgJyR7YWN0aXZhdGlvbi5uYW1lfSdgKTtcbiAgICAgICAgICBzdG9yZS5yZW1vdmVTdGFsZUFjdGl2YXRpb24oJ2FnZW50JywgYWN0aXZhdGlvbi5uYW1lKTtcbiAgICAgICAgICBza2lwcGVkQ291bnQrKztcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgW0FjdGl2YXRpb25TdG9yZV0gU2tpcHBpbmcgZmFpbGVkIGFnZW50ICcke2FjdGl2YXRpb24ubmFtZX0nYCk7XG4gICAgICAgIHN0b3JlLnJlbW92ZVN0YWxlQWN0aXZhdGlvbignYWdlbnQnLCBhY3RpdmF0aW9uLm5hbWUpO1xuICAgICAgICBza2lwcGVkQ291bnQrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZXN0b3JlIG1lbW9yaWVzIChkZWR1cCBhZ2FpbnN0IGF1dG8tbG9hZGVkIG9uZXMpXG4gICAgY29uc3QgYWN0aXZlTWVtb3JpZXMgPSBhd2FpdCBtZW1vcnlNYW5hZ2VyLmdldEFjdGl2ZU1lbW9yaWVzKCk7XG4gICAgY29uc3QgYWN0aXZlTWVtb3J5TmFtZXMgPSBuZXcgU2V0KGFjdGl2ZU1lbW9yaWVzLm1hcChtID0+IG0ubWV0YWRhdGEubmFtZSkpO1xuICAgIGZvciAoY29uc3QgYWN0aXZhdGlvbiBvZiBzdG9yZS5nZXRBY3RpdmF0aW9ucygnbWVtb3J5JykpIHtcbiAgICAgIGlmIChhY3RpdmVNZW1vcnlOYW1lcy5oYXMoYWN0aXZhdGlvbi5uYW1lKSkge1xuICAgICAgICBsb2dnZXIuZGVidWcoYFtBY3RpdmF0aW9uU3RvcmVdIE1lbW9yeSAnJHthY3RpdmF0aW9uLm5hbWV9JyBhbHJlYWR5IGFjdGl2ZSAoYXV0by1sb2FkZWQpLCBza2lwcGluZ2ApO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG1lbW9yeU1hbmFnZXIuYWN0aXZhdGVNZW1vcnkoYWN0aXZhdGlvbi5uYW1lKTtcbiAgICAgICAgaWYgKHJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgICAgcmVzdG9yZWRDb3VudCsrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhgW0FjdGl2YXRpb25TdG9yZV0gUHJ1bmluZyBtaXNzaW5nIG1lbW9yeSAnJHthY3RpdmF0aW9uLm5hbWV9J2ApO1xuICAgICAgICAgIHN0b3JlLnJlbW92ZVN0YWxlQWN0aXZhdGlvbignbWVtb3J5JywgYWN0aXZhdGlvbi5uYW1lKTtcbiAgICAgICAgICBza2lwcGVkQ291bnQrKztcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgW0FjdGl2YXRpb25TdG9yZV0gU2tpcHBpbmcgZmFpbGVkIG1lbW9yeSAnJHthY3RpdmF0aW9uLm5hbWV9J2ApO1xuICAgICAgICBzdG9yZS5yZW1vdmVTdGFsZUFjdGl2YXRpb24oJ21lbW9yeScsIGFjdGl2YXRpb24ubmFtZSk7XG4gICAgICAgIHNraXBwZWRDb3VudCsrO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJlc3RvcmUgZW5zZW1ibGVzXG4gICAgZm9yIChjb25zdCBhY3RpdmF0aW9uIG9mIHN0b3JlLmdldEFjdGl2YXRpb25zKCdlbnNlbWJsZScpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBlbnNlbWJsZU1hbmFnZXIuYWN0aXZhdGVFbnNlbWJsZShhY3RpdmF0aW9uLm5hbWUpO1xuICAgICAgICBpZiAocmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgICByZXN0b3JlZENvdW50Kys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbG9nZ2VyLmRlYnVnKGBbQWN0aXZhdGlvblN0b3JlXSBQcnVuaW5nIG1pc3NpbmcgZW5zZW1ibGUgJyR7YWN0aXZhdGlvbi5uYW1lfSdgKTtcbiAgICAgICAgICBzdG9yZS5yZW1vdmVTdGFsZUFjdGl2YXRpb24oJ2Vuc2VtYmxlJywgYWN0aXZhdGlvbi5uYW1lKTtcbiAgICAgICAgICBza2lwcGVkQ291bnQrKztcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgW0FjdGl2YXRpb25TdG9yZV0gU2tpcHBpbmcgZmFpbGVkIGVuc2VtYmxlICcke2FjdGl2YXRpb24ubmFtZX0nYCk7XG4gICAgICAgIHN0b3JlLnJlbW92ZVN0YWxlQWN0aXZhdGlvbignZW5zZW1ibGUnLCBhY3RpdmF0aW9uLm5hbWUpO1xuICAgICAgICBza2lwcGVkQ291bnQrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocmVzdG9yZWRDb3VudCA+IDAgfHwgc2tpcHBlZENvdW50ID4gMCkge1xuICAgICAgbG9nZ2VyLmluZm8oXG4gICAgICAgIGBbQWN0aXZhdGlvblN0b3JlXSBSZXN0b3JlZCAke3Jlc3RvcmVkQ291bnR9IGVsZW1lbnQocyksIHNraXBwZWQgJHtza2lwcGVkQ291bnR9IHN0YWxlIGZvciBzZXNzaW9uICcke3N0b3JlLmdldFNlc3Npb25JZCgpfSdgXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBCb290c3RyYXAgYWxsIGhhbmRsZXJzIHdpdGhvdXQgcmVnaXN0ZXJpbmcgTUNQIHRvb2xzLlxuICAgKiBVc2VkIGJ5IHdlYi1vbmx5IG1vZGUgKC0td2ViKSB0byBnZXQgTUNQQVFMSGFuZGxlciB3aXRob3V0IGFuIE1DUCBTZXJ2ZXIuXG4gICAqIElzc3VlICM3OTY6IFNwbGl0IERJIGNvbnRhaW5lciBib290c3RyYXAgZnJvbSB0cmFuc3BvcnQgY29ubmVjdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBib290c3RyYXBIYW5kbGVycygpOiBQcm9taXNlPEhhbmRsZXJCdW5kbGU+IHtcbiAgICBpZiAoIXRoaXMucGVyc29uYXNEaXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlBlcnNvbmEgZGlyZWN0b3J5IG5vdCBpbml0aWFsaXplZC4gQ2FsbCBwcmVwYXJlUG9ydGZvbGlvKCkgZmlyc3QuXCIpO1xuICAgIH1cblxuICAgIFBhdGhWYWxpZGF0b3IuaW5pdGlhbGl6ZSh0aGlzLnBlcnNvbmFzRGlyKTtcblxuICAgIGNvbnN0IGluZGljYXRvclNlcnZpY2UgPSB0aGlzLnJlc29sdmU8UGVyc29uYUluZGljYXRvclNlcnZpY2U+KCdQZXJzb25hSW5kaWNhdG9yU2VydmljZScpO1xuICAgIGNvbnN0IHBlcnNvbmFNYW5hZ2VyID0gdGhpcy5yZXNvbHZlPFBlcnNvbmFNYW5hZ2VyPignUGVyc29uYU1hbmFnZXInKTtcbiAgICBjb25zdCBpbml0U2VydmljZSA9IHRoaXMucmVzb2x2ZTxJbml0aWFsaXphdGlvblNlcnZpY2U+KCdJbml0aWFsaXphdGlvblNlcnZpY2UnKTtcbiAgICBjb25zdCBwZXJzb25hRXhwb3J0ZXIgPSBuZXcgUGVyc29uYUV4cG9ydGVyKCgpID0+IHBlcnNvbmFNYW5hZ2VyLmdldEN1cnJlbnRVc2VyRm9yQXR0cmlidXRpb24oKSk7XG4gICAgY29uc3QgcGVyc29uYUltcG9ydGVyID0gbmV3IFBlcnNvbmFJbXBvcnRlcih0aGlzLnBlcnNvbmFzRGlyLCAoKSA9PiBwZXJzb25hTWFuYWdlci5nZXRDdXJyZW50VXNlckZvckF0dHJpYnV0aW9uKCkpO1xuXG4gICAgLy8gQ3JlYXRlIHN0YXRlIGFjY2Vzc29yIGZvciBQZXJzb25hSGFuZGxlclxuICAgIGNvbnN0IGFjdGl2ZVBlcnNvbmFBY2Nlc3NvciA9IHtcbiAgICAgIGdldDogKCkgPT4gcGVyc29uYU1hbmFnZXIuZ2V0QWN0aXZlUGVyc29uYSgpPy5maWxlbmFtZSB8fCBudWxsLFxuICAgICAgc2V0OiAodmFsdWU6IHN0cmluZyB8IG51bGwpID0+IHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgLy8gSXNzdWUgIzg0MzogYWN0aXZhdGVQZXJzb25hIGlzIG5vdyBhc3luYyBidXQgdGhpcyBzZXR0ZXIgaXMgc3luY2hyb25vdXMuXG4gICAgICAgICAgLy8gRmlyZS1hbmQtZm9yZ2V0IOKAlCBQZXJzb25hSGFuZGxlciBkb2VzIGl0cyBvd24gbG9va3VwIGJlZm9yZSBjYWxsaW5nIHNldCgpLlxuICAgICAgICAgIC8vIExvZyBhdCBlcnJvciBsZXZlbCBzaW5jZSBhY3RpdmF0aW9uIGZhaWx1cmVzIGhlcmUgaW5kaWNhdGUgc3RhbGUgc3RhdGUuXG4gICAgICAgICAgcGVyc29uYU1hbmFnZXIuYWN0aXZhdGVQZXJzb25hKHZhbHVlKS5jYXRjaChlcnIgPT5cbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcihgW0NvbnRhaW5lcl0gUGVyc29uYSBhY3RpdmF0aW9uIGZhaWxlZCBmb3IgXCIke3ZhbHVlfVwiIOKAlCBzdGF0ZSBhY2Nlc3NvciBtYXkgYmUgc3RhbGU6YCwgZXJyKVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVyc29uYU1hbmFnZXIuZGVhY3RpdmF0ZVBlcnNvbmEoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBwZXJzb25hSGFuZGxlciA9IG5ldyBQZXJzb25hSGFuZGxlcihcbiAgICAgIHBlcnNvbmFNYW5hZ2VyLFxuICAgICAgcGVyc29uYUV4cG9ydGVyLFxuICAgICAgcGVyc29uYUltcG9ydGVyLFxuICAgICAgaW5pdFNlcnZpY2UsXG4gICAgICBpbmRpY2F0b3JTZXJ2aWNlLFxuICAgICAgYWN0aXZlUGVyc29uYUFjY2Vzc29yXG4gICAgKTtcblxuICAgIGF3YWl0IHBlcnNvbmFNYW5hZ2VyLnJlbG9hZCgpO1xuXG4gICAgY29uc3QgZWxlbWVudENydWRIYW5kbGVyID0gbmV3IEVsZW1lbnRDUlVESGFuZGxlcihcbiAgICAgIHRoaXMucmVzb2x2ZSgnU2tpbGxNYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1RlbXBsYXRlTWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdUZW1wbGF0ZVJlbmRlcmVyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0FnZW50TWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdNZW1vcnlNYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0Vuc2VtYmxlTWFuYWdlcicpLFxuICAgICAgcGVyc29uYU1hbmFnZXIsXG4gICAgICB0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb01hbmFnZXInKSxcbiAgICAgIGluaXRTZXJ2aWNlLFxuICAgICAgaW5kaWNhdG9yU2VydmljZSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnRmlsZU9wZXJhdGlvbnNTZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0VsZW1lbnRRdWVyeVNlcnZpY2UnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnVmFsaWRhdGlvblJlZ2lzdHJ5JyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0FjdGl2YXRpb25TdG9yZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdCYWNrdXBTZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1BvbGljeUV4cG9ydFNlcnZpY2UnKVxuICAgICk7XG4gICAgLy8gUmVnaXN0ZXIgZm9yIGxhenkgcmVzb2x1dGlvbiBieSBQb2xpY3lFeHBvcnRTZXJ2aWNlXG4gICAgdGhpcy5yZWdpc3RlcignRWxlbWVudENSVURIYW5kbGVyJywgKCkgPT4gZWxlbWVudENydWRIYW5kbGVyKTtcblxuICAgIC8vIE1DUEFRTEhhbmRsZXIgY3JlYXRlZCBsYXRlciBhZnRlciBhbGwgaGFuZGxlcnMgYXJlIGluc3RhbnRpYXRlZFxuICAgIC8vIFNlZSBiZWxvdyBhZnRlciBlbmhhbmNlZEluZGV4SGFuZGxlciBjcmVhdGlvblxuXG4gICAgY29uc3QgY29sbGVjdGlvbkhhbmRsZXIgPSBuZXcgQ29sbGVjdGlvbkhhbmRsZXIoXG4gICAgICB0aGlzLnJlc29sdmUoJ0NvbGxlY3Rpb25Ccm93c2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0NvbGxlY3Rpb25TZWFyY2gnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnUGVyc29uYURldGFpbHMnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnRWxlbWVudEluc3RhbGxlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdDb2xsZWN0aW9uQ2FjaGUnKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvTWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdBUElDYWNoZScpLFxuICAgICAgcGVyc29uYU1hbmFnZXIsIC8vIFVzZSB0aGUgcmVzb2x2ZWQgUGVyc29uYU1hbmFnZXJcbiAgICAgIHRoaXMucmVzb2x2ZSgnU3VibWl0VG9Qb3J0Zm9saW9Ub29sJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1VuaWZpZWRJbmRleE1hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnSW5pdGlhbGl6YXRpb25TZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ1BlcnNvbmFJbmRpY2F0b3JTZXJ2aWNlJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpXG4gICAgKTtcblxuICAgIGNvbnN0IHBvcnRmb2xpb0hhbmRsZXIgPSBuZXcgUG9ydGZvbGlvSGFuZGxlcihcbiAgICAgIHRoaXMucmVzb2x2ZSgnR2l0SHViQXV0aE1hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvTWFuYWdlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdQb3J0Zm9saW9QdWxsSGFuZGxlcicpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdQb3J0Zm9saW9JbmRleE1hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnVW5pZmllZEluZGV4TWFuYWdlcicpLFxuICAgICAgaW5pdFNlcnZpY2UsXG4gICAgICBpbmRpY2F0b3JTZXJ2aWNlLFxuICAgICAgdGhpcy5yZXNvbHZlKCdDb25maWdNYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0ZpbGVPcGVyYXRpb25zU2VydmljZScpLFxuICAgICAgdGhpcy5yZXNvbHZlKCdUb2tlbk1hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnUG9ydGZvbGlvUmVwb01hbmFnZXInKVxuICAgICk7XG5cbiAgICBjb25zdCBnaXRodWJBdXRoSGFuZGxlciA9IG5ldyBHaXRIdWJBdXRoSGFuZGxlcihcbiAgICAgIHRoaXMucmVzb2x2ZSgnR2l0SHViQXV0aE1hbmFnZXInKSxcbiAgICAgIHRoaXMucmVzb2x2ZSgnQ29uZmlnTWFuYWdlcicpLFxuICAgICAgaW5pdFNlcnZpY2UsXG4gICAgICBpbmRpY2F0b3JTZXJ2aWNlLFxuICAgICAgdGhpcy5yZXNvbHZlKCdGaWxlT3BlcmF0aW9uc1NlcnZpY2UnKVxuICAgICk7XG5cbiAgICBjb25zdCBkaXNwbGF5Q29uZmlnSGFuZGxlciA9IG5ldyBEaXNwbGF5Q29uZmlnSGFuZGxlcihcbiAgICAgIHBlcnNvbmFNYW5hZ2VyLFxuICAgICAgaW5pdFNlcnZpY2UsXG4gICAgICBpbmRpY2F0b3JTZXJ2aWNlXG4gICAgKTtcblxuICAgIGNvbnN0IGlkZW50aXR5SGFuZGxlciA9IG5ldyBJZGVudGl0eUhhbmRsZXIoXG4gICAgICBwZXJzb25hTWFuYWdlcixcbiAgICAgIGluaXRTZXJ2aWNlLFxuICAgICAgaW5kaWNhdG9yU2VydmljZVxuICAgICk7XG5cbiAgICBjb25zdCBjb25maWdIYW5kbGVyID0gbmV3IENvbmZpZ0hhbmRsZXIoXG4gICAgICB0aGlzLnJlc29sdmUoJ0NvbmZpZ01hbmFnZXInKSxcbiAgICAgIGluaXRTZXJ2aWNlLFxuICAgICAgaW5kaWNhdG9yU2VydmljZVxuICAgICk7XG4gICAgY29uc3Qgc3luY0hhbmRsZXIgPSBuZXcgU3luY0hhbmRsZXIoXG4gICAgICB0aGlzLnJlc29sdmUoJ1BvcnRmb2xpb1N5bmNNYW5hZ2VyJyksXG4gICAgICB0aGlzLnJlc29sdmUoJ0NvbmZpZ01hbmFnZXInKSxcbiAgICAgIGluZGljYXRvclNlcnZpY2VcbiAgICApO1xuXG4gICAgY29uc3QgZW5oYW5jZWRJbmRleEhhbmRsZXIgPSBuZXcgRW5oYW5jZWRJbmRleEhhbmRsZXIoXG4gICAgICB0aGlzLnJlc29sdmUoJ0VuaGFuY2VkSW5kZXhNYW5hZ2VyJyksXG4gICAgICBpbmRpY2F0b3JTZXJ2aWNlXG4gICAgKTtcblxuICAgIC8vIElzc3VlICM0NTI6IENyZWF0ZSBHYXRla2VlcGVyIHBvbGljeSBlbmdpbmUgaW5zdGFuY2VcbiAgICAvLyBJc3N1ZSAjNjc5OiBhbGxvd0VsZW1lbnRQb2xpY3lPdmVycmlkZXMgd2lyZWQgZnJvbSBlbnYgKERPTExIT1VTRV9HQVRFS0VFUEVSX0VMRU1FTlRfUE9MSUNZX09WRVJSSURFUylcbiAgICBjb25zdCBnYXRla2VlcGVyID0gbmV3IEdhdGVrZWVwZXIodW5kZWZpbmVkLCB7XG4gICAgICBlbmFibGVBdWRpdExvZ2dpbmc6IHRydWUsXG4gICAgICByZXF1aXJlRGFuZ2VyWm9uZVZlcmlmaWNhdGlvbjogdHJ1ZSxcbiAgICAgIGFsbG93RWxlbWVudFBvbGljeU92ZXJyaWRlczogZW52LkRPTExIT1VTRV9HQVRFS0VFUEVSX0VMRU1FTlRfUE9MSUNZX09WRVJSSURFUyxcbiAgICB9KTtcblxuICAgIC8vIENyZWF0ZSBNQ1BBUUxIYW5kbGVyIHdpdGggYWxsIGF2YWlsYWJsZSBoYW5kbGVycyBmb3IgZnVsbCBvcGVyYXRpb24gY292ZXJhZ2UgKElzc3VlICMyNDEpXG4gICAgLy8gSXNzdWUgIzMwMTogUGFzcyBDb250ZXh0VHJhY2tlciBmb3IgcmVxdWVzdCBjb3JyZWxhdGlvbiBtZXRhZGF0YVxuICAgIC8vIElzc3VlICM0MDI6IFBhc3MgRGFuZ2VyWm9uZUVuZm9yY2VyIHZpYSBIYW5kbGVyUmVnaXN0cnlcbiAgICAvLyBCdWlsZCBoYW5kbGVyIHJlZ2lzdHJ5LCB0aGVuIGFkZCBsYXp5IG1ldHJpY3NTaW5rIGdldHRlci5cbiAgICAvLyBNZW1vcnlNZXRyaWNzU2luayBpcyByZWdpc3RlcmVkIGR1cmluZyBkZWZlcnJlZFNldHVwIChhZnRlciBNZXRyaWNzTWFuYWdlci5zdGFydCgpKSxcbiAgICAvLyBzbyBpdCBpc24ndCBhdmFpbGFibGUgYXQgaGFuZGxlciBjb25zdHJ1Y3Rpb24gdGltZSDigJQgcmVzb2x2ZSBvbiBmaXJzdCBhY2Nlc3MgaW5zdGVhZC5cbiAgICBjb25zdCBoYW5kbGVyRGVwczogSGFuZGxlclJlZ2lzdHJ5ID0ge1xuICAgICAgZWxlbWVudENSVUQ6IGVsZW1lbnRDcnVkSGFuZGxlcixcbiAgICAgIG1lbW9yeU1hbmFnZXI6IHRoaXMucmVzb2x2ZSgnTWVtb3J5TWFuYWdlcicpLFxuICAgICAgYWdlbnRNYW5hZ2VyOiB0aGlzLnJlc29sdmUoJ0FnZW50TWFuYWdlcicpLFxuICAgICAgdGVtcGxhdGVSZW5kZXJlcjogdGhpcy5yZXNvbHZlKCdUZW1wbGF0ZVJlbmRlcmVyJyksXG4gICAgICBlbGVtZW50UXVlcnlTZXJ2aWNlOiB0aGlzLnJlc29sdmUoJ0VsZW1lbnRRdWVyeVNlcnZpY2UnKSxcbiAgICAgIC8vIE1DUC1BUUwgZXh0ZW5zaW9uIGhhbmRsZXJzIChJc3N1ZSAjMjQxKVxuICAgICAgY29sbGVjdGlvbkhhbmRsZXIsXG4gICAgICBwb3J0Zm9saW9IYW5kbGVyLFxuICAgICAgYXV0aEhhbmRsZXI6IGdpdGh1YkF1dGhIYW5kbGVyLFxuICAgICAgY29uZmlnSGFuZGxlcixcbiAgICAgIGVuaGFuY2VkSW5kZXhIYW5kbGVyLFxuICAgICAgcGVyc29uYUhhbmRsZXIsXG4gICAgICBzeW5jSGFuZGxlcixcbiAgICAgIGJ1aWxkSW5mb1NlcnZpY2U6IHRoaXMucmVzb2x2ZSgnQnVpbGRJbmZvU2VydmljZScpLFxuICAgICAgY2FjaGVNZW1vcnlCdWRnZXQ6IHRoaXMucmVzb2x2ZSgnQ2FjaGVNZW1vcnlCdWRnZXQnKSxcbiAgICAgIGdhdGVrZWVwZXIsICAvLyBJc3N1ZSAjNDUyOiBQb2xpY3kgZW5naW5lIGZvciBlbmZvcmNlKClcbiAgICAgIGRhbmdlclpvbmVFbmZvcmNlcjogdGhpcy5yZXNvbHZlKCdEYW5nZXJab25lRW5mb3JjZXInKSxcbiAgICAgIHZlcmlmaWNhdGlvblN0b3JlOiB0aGlzLnJlc29sdmUoJ1ZlcmlmaWNhdGlvblN0b3JlJyksICAvLyBJc3N1ZSAjMTQyOiBWZXJpZmljYXRpb24gY29kZXNcbiAgICAgIHZlcmlmaWNhdGlvbk5vdGlmaWVyOiB0aGlzLnJlc29sdmUoJ1ZlcmlmaWNhdGlvbk5vdGlmaWVyJyksICAvLyBJc3N1ZSAjNTIyOiBPUyBkaWFsb2cgZm9yIGNvZGVzXG4gICAgICBtZW1vcnlTaW5rOiB0aGlzLnJlc29sdmU8TWVtb3J5TG9nU2luaz4oJ01lbW9yeUxvZ1NpbmsnKSwgIC8vIElzc3VlICM1Mjg6IENSVURFLXJvdXRlZCBxdWVyeV9sb2dzXG4gICAgICBwZXJmb3JtYW5jZU1vbml0b3I6IHRoaXMucmVzb2x2ZTxQZXJmb3JtYW5jZU1vbml0b3I+KCdQZXJmb3JtYW5jZU1vbml0b3InKSxcbiAgICAgIG9wZXJhdGlvbk1ldHJpY3NUcmFja2VyOiB0aGlzLnJlc29sdmU8T3BlcmF0aW9uTWV0cmljc1RyYWNrZXI+KCdPcGVyYXRpb25NZXRyaWNzVHJhY2tlcicpLFxuICAgICAgZ2F0ZWtlZXBlck1ldHJpY3NUcmFja2VyOiB0aGlzLnJlc29sdmU8R2F0ZWtlZXBlck1ldHJpY3NUcmFja2VyPignR2F0ZWtlZXBlck1ldHJpY3NUcmFja2VyJyksXG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoaGFuZGxlckRlcHMsICdtZXRyaWNzU2luaycsIHtcbiAgICAgIGdldDogKCkgPT4geyB0cnkgeyByZXR1cm4gdGhpcy5yZXNvbHZlPE1lbW9yeU1ldHJpY3NTaW5rPignTWVtb3J5TWV0cmljc1NpbmsnKTsgfSBjYXRjaCB7IHJldHVybiB1bmRlZmluZWQ7IH0gfSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgfSk7XG4gICAgY29uc3QgbWNwQXFsSGFuZGxlciA9IG5ldyBNQ1BBUUxIYW5kbGVyKGhhbmRsZXJEZXBzLCB0aGlzLnJlc29sdmU8Q29udGV4dFRyYWNrZXI+KCdDb250ZXh0VHJhY2tlcicpKTtcblxuICAgIC8vIFJlZ2lzdGVyIG1jcEFxbEhhbmRsZXIgYXMgYSBzaW5nbGV0b24gZm9yIHRlc3QgYWNjZXNzXG4gICAgdGhpcy5yZWdpc3RlcignbWNwQXFsSGFuZGxlcicsICgpID0+IG1jcEFxbEhhbmRsZXIsIHsgc2luZ2xldG9uOiB0cnVlIH0pO1xuICAgIHRoaXMucmVnaXN0ZXIoJ2dhdGVrZWVwZXInLCAoKSA9PiBnYXRla2VlcGVyLCB7IHNpbmdsZXRvbjogdHJ1ZSB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICBwZXJzb25hSGFuZGxlcixcbiAgICAgIGVsZW1lbnRDcnVkSGFuZGxlcixcbiAgICAgIGNvbGxlY3Rpb25IYW5kbGVyLFxuICAgICAgcG9ydGZvbGlvSGFuZGxlcixcbiAgICAgIGdpdGh1YkF1dGhIYW5kbGVyLFxuICAgICAgZGlzcGxheUNvbmZpZ0hhbmRsZXIsXG4gICAgICBpZGVudGl0eUhhbmRsZXIsXG4gICAgICBjb25maWdIYW5kbGVyLFxuICAgICAgc3luY0hhbmRsZXIsXG4gICAgICB0b29sUmVnaXN0cnk6IHVuZGVmaW5lZCBhcyB1bmtub3duIGFzIFRvb2xSZWdpc3RyeSwgLy8gTm8gdG9vbCByZWdpc3RyeSBpbiBib290c3RyYXAtb25seSBtb2RlXG4gICAgICBlbmhhbmNlZEluZGV4SGFuZGxlcixcbiAgICAgIG1jcEFxbEhhbmRsZXIsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYWxsIGhhbmRsZXJzIHdpdGggZGVwZW5kZW5jeSBpbmplY3Rpb24gYW5kIHJlZ2lzdGVyIE1DUCB0b29scy5cbiAgICogQHBhcmFtIHNlcnZlciAtIE1DUCBTZXJ2ZXIgaW5zdGFuY2UgZm9yIHRvb2wgcmVnaXN0cmF0aW9uXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgY3JlYXRlSGFuZGxlcnMoc2VydmVyOiBTZXJ2ZXIpOiBQcm9taXNlPEhhbmRsZXJCdW5kbGU+IHtcbiAgICBjb25zdCBidW5kbGUgPSBhd2FpdCB0aGlzLmJvb3RzdHJhcEhhbmRsZXJzKCk7XG5cbiAgICBjb25zdCB0b29sUmVnaXN0cnkgPSBuZXcgVG9vbFJlZ2lzdHJ5KHNlcnZlcik7XG5cbiAgICAvLyBSZWdpc3RlciB0b29scyBiYXNlZCBvbiBNQ1BfSU5URVJGQUNFX01PREUgKElzc3VlICMyMzcpXG4gICAgLy8gLSAnZGlzY3JldGUnOiBSZWdpc3RlciBpbmRpdmlkdWFsIGRpc2NyZXRlIHRvb2xzICh+NDAgdG9vbHMpXG4gICAgLy8gLSAnbWNwYXFsJzogUmVnaXN0ZXIgY29uc29saWRhdGVkIE1DUC1BUUwgaW50ZXJmYWNlIG9ubHkgKH40IG9yIDEgdG9vbHMpXG4gICAgLy8gVG9rZW4gY291bnRzIGFyZSBsb2dnZWQgZHluYW1pY2FsbHkgYXQgc3RhcnR1cCB2aWEgbG9nVG9vbFRva2VuU3RhdHMoKVxuICAgIGNvbnN0IGludGVyZmFjZU1vZGUgPSBlbnYuTUNQX0lOVEVSRkFDRV9NT0RFO1xuICAgIGxvZ2dlci5pbmZvKGBNQ1AgSW50ZXJmYWNlIE1vZGU6ICR7aW50ZXJmYWNlTW9kZX1gKTtcblxuICAgIGlmIChpbnRlcmZhY2VNb2RlID09PSAnZGlzY3JldGUnKSB7XG4gICAgICAvLyBEaXNjcmV0ZSBtb2RlOiBSZWdpc3RlciBhbGwgaW5kaXZpZHVhbCB0b29sc1xuICAgICAgdG9vbFJlZ2lzdHJ5LnJlZ2lzdGVyUGVyc29uYVRvb2xzKGJ1bmRsZS5wZXJzb25hSGFuZGxlcik7XG4gICAgICB0b29sUmVnaXN0cnkucmVnaXN0ZXJFbGVtZW50VG9vbHMoYnVuZGxlLmVsZW1lbnRDcnVkSGFuZGxlcik7XG4gICAgICB0b29sUmVnaXN0cnkucmVnaXN0ZXJDb2xsZWN0aW9uVG9vbHMoYnVuZGxlLmNvbGxlY3Rpb25IYW5kbGVyKTtcbiAgICAgIHRvb2xSZWdpc3RyeS5yZWdpc3RlclBvcnRmb2xpb1Rvb2xzKGJ1bmRsZS5wb3J0Zm9saW9IYW5kbGVyKTtcbiAgICAgIHRvb2xSZWdpc3RyeS5yZWdpc3RlckF1dGhUb29scyhidW5kbGUuZ2l0aHViQXV0aEhhbmRsZXIpO1xuICAgICAgdG9vbFJlZ2lzdHJ5LnJlZ2lzdGVyQ29uZmlnVG9vbHMoe1xuICAgICAgICBoYW5kbGVDb25maWdPcGVyYXRpb246IChvcHRpb25zKSA9PlxuICAgICAgICAgIGJ1bmRsZS5jb25maWdIYW5kbGVyLmhhbmRsZUNvbmZpZ09wZXJhdGlvbihvcHRpb25zKSxcbiAgICAgICAgaGFuZGxlU3luY09wZXJhdGlvbjogKG9wdGlvbnMpID0+XG4gICAgICAgICAgYnVuZGxlLnN5bmNIYW5kbGVyLmhhbmRsZVN5bmNPcGVyYXRpb24ob3B0aW9ucyksXG4gICAgICB9KTtcbiAgICAgIHRvb2xSZWdpc3RyeS5yZWdpc3RlckVuaGFuY2VkSW5kZXhUb29scyhcbiAgICAgICAgYnVuZGxlLmVuaGFuY2VkSW5kZXhIYW5kbGVyLFxuICAgICAgICB0aGlzLnJlc29sdmU8SW5kZXhDb25maWdNYW5hZ2VyPignSW5kZXhDb25maWdNYW5hZ2VyJykuZ2V0Q29uZmlnKClcbiAgICAgICk7XG4gICAgICB0b29sUmVnaXN0cnkucmVnaXN0ZXJCdWlsZEluZm9Ub29scyh0aGlzLnJlc29sdmUoJ0J1aWxkSW5mb1NlcnZpY2UnKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE1DUC1BUUwgbW9kZTogUmVnaXN0ZXIgb25seSBNQ1AtQVFMIHRvb2xzXG4gICAgICB0b29sUmVnaXN0cnkucmVnaXN0ZXJNQ1BBUUxUb29scyhidW5kbGUubWNwQXFsSGFuZGxlcik7XG4gICAgfVxuXG4gICAgLy8gTG9nIHRva2VuIHN0YXRpc3RpY3MgKElzc3VlICMyMzcgZW5oYW5jZW1lbnQpXG4gICAgdGhpcy5sb2dUb29sVG9rZW5TdGF0cyh0b29sUmVnaXN0cnksIGludGVyZmFjZU1vZGUsIGJ1bmRsZS5tY3BBcWxIYW5kbGVyLCB7XG4gICAgICBwZXJzb25hSGFuZGxlcjogYnVuZGxlLnBlcnNvbmFIYW5kbGVyLFxuICAgICAgZWxlbWVudENydWRIYW5kbGVyOiBidW5kbGUuZWxlbWVudENydWRIYW5kbGVyLFxuICAgICAgY29sbGVjdGlvbkhhbmRsZXI6IGJ1bmRsZS5jb2xsZWN0aW9uSGFuZGxlcixcbiAgICAgIHBvcnRmb2xpb0hhbmRsZXI6IGJ1bmRsZS5wb3J0Zm9saW9IYW5kbGVyLFxuICAgICAgZ2l0aHViQXV0aEhhbmRsZXI6IGJ1bmRsZS5naXRodWJBdXRoSGFuZGxlcixcbiAgICAgIGNvbmZpZ0hhbmRsZXI6IGJ1bmRsZS5jb25maWdIYW5kbGVyLFxuICAgICAgc3luY0hhbmRsZXI6IGJ1bmRsZS5zeW5jSGFuZGxlcixcbiAgICAgIGVuaGFuY2VkSW5kZXhIYW5kbGVyOiBidW5kbGUuZW5oYW5jZWRJbmRleEhhbmRsZXIsXG4gICAgfSk7XG5cbiAgICB0aGlzLnJlc29sdmU8U2VydmVyU2V0dXA+KCdTZXJ2ZXJTZXR1cCcpLnNldHVwU2VydmVyKHNlcnZlciwgdG9vbFJlZ2lzdHJ5LCBidW5kbGUuZWxlbWVudENydWRIYW5kbGVyKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5idW5kbGUsXG4gICAgICB0b29sUmVnaXN0cnksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2cgdG9vbCB0b2tlbiBzdGF0aXN0aWNzIGZvciBtb25pdG9yaW5nIGFuZCBkb2N1bWVudGF0aW9uLlxuICAgKiBTaG93cyBjdXJyZW50IG1vZGUgdG9rZW4gY291bnQsIGFsdGVybmF0aXZlIG1vZGUgY29tcGFyaXNvbiwgYW5kIHNhdmluZ3MuXG4gICAqXG4gICAqIFRoaXMgaXMgaW1wb3J0YW50IGZvcjpcbiAgICogMS4gRG9jdW1lbnRpbmcgYWN0dWFsIHRva2VuIHNhdmluZ3MgYWNoaWV2ZWRcbiAgICogMi4gTW9uaXRvcmluZyBjb250ZXh0IHdpbmRvdyB1c2FnZVxuICAgKiAzLiBTdXBwb3J0aW5nIGZ1dHVyZSBNQ1AtQVFMIGFkYXB0ZXIgZGV2ZWxvcG1lbnRcbiAgICpcbiAgICogSXNzdWUgIzIzNyBlbmhhbmNlbWVudFxuICAgKi9cbiAgcHJpdmF0ZSBsb2dUb29sVG9rZW5TdGF0cyhcbiAgICB0b29sUmVnaXN0cnk6IFRvb2xSZWdpc3RyeSxcbiAgICBpbnRlcmZhY2VNb2RlOiAnZGlzY3JldGUnIHwgJ21jcGFxbCcsXG4gICAgbWNwQXFsSGFuZGxlcjogTUNQQVFMSGFuZGxlcixcbiAgICBkaXNjcmV0ZUhhbmRsZXJzOiB7XG4gICAgICBwZXJzb25hSGFuZGxlcjogUGVyc29uYUhhbmRsZXI7XG4gICAgICBlbGVtZW50Q3J1ZEhhbmRsZXI6IEVsZW1lbnRDUlVESGFuZGxlcjtcbiAgICAgIGNvbGxlY3Rpb25IYW5kbGVyOiBDb2xsZWN0aW9uSGFuZGxlcjtcbiAgICAgIHBvcnRmb2xpb0hhbmRsZXI6IFBvcnRmb2xpb0hhbmRsZXI7XG4gICAgICBnaXRodWJBdXRoSGFuZGxlcjogR2l0SHViQXV0aEhhbmRsZXI7XG4gICAgICBjb25maWdIYW5kbGVyOiBDb25maWdIYW5kbGVyO1xuICAgICAgc3luY0hhbmRsZXI6IFN5bmNIYW5kbGVyO1xuICAgICAgZW5oYW5jZWRJbmRleEhhbmRsZXI6IEVuaGFuY2VkSW5kZXhIYW5kbGVyO1xuICAgIH1cbiAgKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudFRva2VucyA9IHRvb2xSZWdpc3RyeS5nZXRUb29sVG9rZW5Fc3RpbWF0ZSgpO1xuICAgIGNvbnN0IGN1cnJlbnRUb29sQ291bnQgPSB0b29sUmVnaXN0cnkuZ2V0VG9vbENvdW50KCk7XG5cbiAgICAvLyBDYWxjdWxhdGUgYWx0ZXJuYXRpdmUgbW9kZSB0b2tlbnMgZm9yIGNvbXBhcmlzb25cbiAgICBsZXQgYWx0ZXJuYXRpdmVUb2tlbnM6IG51bWJlcjtcbiAgICBsZXQgYWx0ZXJuYXRpdmVUb29sQ291bnQ6IG51bWJlcjtcblxuICAgIGlmIChpbnRlcmZhY2VNb2RlID09PSAnZGlzY3JldGUnKSB7XG4gICAgICAvLyBDdXJyZW50IGlzIGRpc2NyZXRlLCBjYWxjdWxhdGUgd2hhdCBtY3BhcWwgd291bGQgYmVcbiAgICAgIGNvbnN0IHRlbXBSZWdpc3RyeSA9IG5ldyBUb29sUmVnaXN0cnkoe30gYXMgU2VydmVyKTtcbiAgICAgIHRlbXBSZWdpc3RyeS5yZWdpc3Rlck1DUEFRTFRvb2xzKG1jcEFxbEhhbmRsZXIpO1xuICAgICAgYWx0ZXJuYXRpdmVUb2tlbnMgPSB0ZW1wUmVnaXN0cnkuZ2V0VG9vbFRva2VuRXN0aW1hdGUoKTtcbiAgICAgIGFsdGVybmF0aXZlVG9vbENvdW50ID0gdGVtcFJlZ2lzdHJ5LmdldFRvb2xDb3VudCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDdXJyZW50IGlzIG1jcGFxbCwgY2FsY3VsYXRlIHdoYXQgZGlzY3JldGUgd291bGQgYmVcbiAgICAgIGNvbnN0IHRlbXBSZWdpc3RyeSA9IG5ldyBUb29sUmVnaXN0cnkoe30gYXMgU2VydmVyKTtcbiAgICAgIHRlbXBSZWdpc3RyeS5yZWdpc3RlclBlcnNvbmFUb29scyhkaXNjcmV0ZUhhbmRsZXJzLnBlcnNvbmFIYW5kbGVyKTtcbiAgICAgIHRlbXBSZWdpc3RyeS5yZWdpc3RlckVsZW1lbnRUb29scyhkaXNjcmV0ZUhhbmRsZXJzLmVsZW1lbnRDcnVkSGFuZGxlcik7XG4gICAgICB0ZW1wUmVnaXN0cnkucmVnaXN0ZXJDb2xsZWN0aW9uVG9vbHMoZGlzY3JldGVIYW5kbGVycy5jb2xsZWN0aW9uSGFuZGxlcik7XG4gICAgICB0ZW1wUmVnaXN0cnkucmVnaXN0ZXJQb3J0Zm9saW9Ub29scyhkaXNjcmV0ZUhhbmRsZXJzLnBvcnRmb2xpb0hhbmRsZXIpO1xuICAgICAgdGVtcFJlZ2lzdHJ5LnJlZ2lzdGVyQXV0aFRvb2xzKGRpc2NyZXRlSGFuZGxlcnMuZ2l0aHViQXV0aEhhbmRsZXIpO1xuICAgICAgdGVtcFJlZ2lzdHJ5LnJlZ2lzdGVyQ29uZmlnVG9vbHMoe1xuICAgICAgICBoYW5kbGVDb25maWdPcGVyYXRpb246IChvcHRpb25zKSA9PlxuICAgICAgICAgIGRpc2NyZXRlSGFuZGxlcnMuY29uZmlnSGFuZGxlci5oYW5kbGVDb25maWdPcGVyYXRpb24ob3B0aW9ucyksXG4gICAgICAgIGhhbmRsZVN5bmNPcGVyYXRpb246IChvcHRpb25zKSA9PlxuICAgICAgICAgIGRpc2NyZXRlSGFuZGxlcnMuc3luY0hhbmRsZXIuaGFuZGxlU3luY09wZXJhdGlvbihvcHRpb25zKSxcbiAgICAgIH0pO1xuICAgICAgdGVtcFJlZ2lzdHJ5LnJlZ2lzdGVyRW5oYW5jZWRJbmRleFRvb2xzKFxuICAgICAgICBkaXNjcmV0ZUhhbmRsZXJzLmVuaGFuY2VkSW5kZXhIYW5kbGVyLFxuICAgICAgICB0aGlzLnJlc29sdmU8SW5kZXhDb25maWdNYW5hZ2VyPignSW5kZXhDb25maWdNYW5hZ2VyJykuZ2V0Q29uZmlnKClcbiAgICAgICk7XG4gICAgICB0ZW1wUmVnaXN0cnkucmVnaXN0ZXJCdWlsZEluZm9Ub29scyh0aGlzLnJlc29sdmUoJ0J1aWxkSW5mb1NlcnZpY2UnKSk7XG4gICAgICBhbHRlcm5hdGl2ZVRva2VucyA9IHRlbXBSZWdpc3RyeS5nZXRUb29sVG9rZW5Fc3RpbWF0ZSgpO1xuICAgICAgYWx0ZXJuYXRpdmVUb29sQ291bnQgPSB0ZW1wUmVnaXN0cnkuZ2V0VG9vbENvdW50KCk7XG4gICAgfVxuXG4gICAgLy8gQ2FsY3VsYXRlIHNhdmluZ3MgKHBvc2l0aXZlID0gY3VycmVudCBtb2RlIHNhdmVzIHRva2VucylcbiAgICBjb25zdCB0b2tlbkRpZmYgPSBhbHRlcm5hdGl2ZVRva2VucyAtIGN1cnJlbnRUb2tlbnM7XG4gICAgY29uc3Qgc2F2aW5nc1BlcmNlbnQgPSBhbHRlcm5hdGl2ZVRva2VucyA+IDBcbiAgICAgID8gKCh0b2tlbkRpZmYgLyBhbHRlcm5hdGl2ZVRva2VucykgKiAxMDApLnRvRml4ZWQoMSlcbiAgICAgIDogJzAnO1xuXG4gICAgLy8gTG9nIHRoZSBjb21wYXJpc29uXG4gICAgbG9nZ2VyLmluZm8oXG4gICAgICBgVG9vbCBSZWdpc3RyYXRpb24gQ29tcGxldGU6ICR7Y3VycmVudFRvb2xDb3VudH0gdG9vbHMsIH4ke2N1cnJlbnRUb2tlbnMudG9Mb2NhbGVTdHJpbmcoKX0gdG9rZW5zYFxuICAgICk7XG5cbiAgICBpZiAoaW50ZXJmYWNlTW9kZSA9PT0gJ21jcGFxbCcpIHtcbiAgICAgIC8vIEhpZ2hsaWdodCBzYXZpbmdzIHdoZW4gdXNpbmcgbWNwYXFsXG4gICAgICBsb2dnZXIuaW5mbyhcbiAgICAgICAgYFRva2VuIFNhdmluZ3M6ICR7dG9rZW5EaWZmLnRvTG9jYWxlU3RyaW5nKCl9IHRva2VucyBzYXZlZCAoJHtzYXZpbmdzUGVyY2VudH0lKSB2cyBkaXNjcmV0ZSBtb2RlICgke2FsdGVybmF0aXZlVG9vbENvdW50fSB0b29scywgfiR7YWx0ZXJuYXRpdmVUb2tlbnMudG9Mb2NhbGVTdHJpbmcoKX0gdG9rZW5zKWBcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEluIGRpc2NyZXRlIG1vZGUsIHNob3cgd2hhdCBtY3BhcWwgd291bGQgc2F2ZVxuICAgICAgbG9nZ2VyLmluZm8oXG4gICAgICAgIGBBbHRlcm5hdGl2ZTogbWNwYXFsIG1vZGUgd291bGQgdXNlICR7YWx0ZXJuYXRpdmVUb29sQ291bnR9IHRvb2xzLCB+JHthbHRlcm5hdGl2ZVRva2Vucy50b0xvY2FsZVN0cmluZygpfSB0b2tlbnMgKCR7TWF0aC5hYnMoTnVtYmVyKHNhdmluZ3NQZXJjZW50KSl9JSAke3Rva2VuRGlmZiA8IDAgPyAnbW9yZScgOiAnbGVzcyd9KWBcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdpcmUgYWxsIG1ldHJpYyBjb2xsZWN0b3JzIGludG8gdGhlIE1ldHJpY3NNYW5hZ2VyLlxuICAgKiBNaXJyb3JzIHdpcmVMb2dIb29rcygpIOKAlCBrZWVwcyBjb2xsZWN0b3IgcmVnaXN0cmF0aW9uIG91dCBvZiB0aGUgY29uc3RydWN0b3IuXG4gICAqL1xuICBwcml2YXRlIHdpcmVNZXRyaWNzQ29sbGVjdG9ycyhtZXRyaWNzTWFuYWdlcjogTWV0cmljc01hbmFnZXIpOiB2b2lkIHtcbiAgICAvLyBQZXJmb3JtYW5jZU1vbml0b3IgKGluc3RhbmNlKVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBtb25pdG9yID0gdGhpcy5yZXNvbHZlPGltcG9ydCgnLi4vdXRpbHMvUGVyZm9ybWFuY2VNb25pdG9yLmpzJykuUGVyZm9ybWFuY2VNb25pdG9yPignUGVyZm9ybWFuY2VNb25pdG9yJyk7XG4gICAgICBtZXRyaWNzTWFuYWdlci5yZWdpc3RlckNvbGxlY3RvcihuZXcgUGVyZm9ybWFuY2VNb25pdG9yQ29sbGVjdG9yKG1vbml0b3IpKTtcbiAgICB9IGNhdGNoIHsgLyogbm90IHJlZ2lzdGVyZWQgKi8gfVxuXG4gICAgLy8gTFJVQ2FjaGUgaW5zdGFuY2VzIOKAlCBBUEkgY2FjaGUgKyBhbGwgZWxlbWVudCBtYW5hZ2VyIGNhY2hlc1xuICAgIGNvbnN0IGNhY2hlcyA9IHRoaXMuY29sbGVjdExydUNhY2hlc0Zvck1ldHJpY3MoKTtcbiAgICBpZiAoY2FjaGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIG1ldHJpY3NNYW5hZ2VyLnJlZ2lzdGVyQ29sbGVjdG9yKG5ldyBMUlVDYWNoZUNvbGxlY3RvcihjYWNoZXMpKTtcbiAgICB9XG5cbiAgICAvLyBTZWN1cml0eU1vbml0b3IgKHN0YXRpYylcbiAgICB0cnkge1xuICAgICAgbWV0cmljc01hbmFnZXIucmVnaXN0ZXJDb2xsZWN0b3IobmV3IFNlY3VyaXR5TW9uaXRvckNvbGxlY3RvcigpKTtcbiAgICB9IGNhdGNoIHsgLyogbm90IGF2YWlsYWJsZSAqLyB9XG5cbiAgICAvLyBTZWN1cml0eVRlbGVtZXRyeSAoaW5zdGFuY2UpXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRlbGVtZXRyeSA9IHRoaXMucmVzb2x2ZTxpbXBvcnQoJy4uL3NlY3VyaXR5L3RlbGVtZXRyeS9TZWN1cml0eVRlbGVtZXRyeS5qcycpLlNlY3VyaXR5VGVsZW1ldHJ5PignU2VjdXJpdHlUZWxlbWV0cnknKTtcbiAgICAgIG1ldHJpY3NNYW5hZ2VyLnJlZ2lzdGVyQ29sbGVjdG9yKG5ldyBTZWN1cml0eVRlbGVtZXRyeUNvbGxlY3Rvcih0ZWxlbWV0cnkpKTtcbiAgICB9IGNhdGNoIHsgLyogbm90IHJlZ2lzdGVyZWQgKi8gfVxuXG4gICAgLy8gRmlsZUxvY2tNYW5hZ2VyIChpbnN0YW5jZSlcbiAgICB0cnkge1xuICAgICAgY29uc3QgbG9ja01hbmFnZXIgPSB0aGlzLnJlc29sdmU8aW1wb3J0KCcuLi9zZWN1cml0eS9maWxlTG9ja01hbmFnZXIuanMnKS5GaWxlTG9ja01hbmFnZXI+KCdGaWxlTG9ja01hbmFnZXInKTtcbiAgICAgIG1ldHJpY3NNYW5hZ2VyLnJlZ2lzdGVyQ29sbGVjdG9yKG5ldyBGaWxlTG9ja01hbmFnZXJDb2xsZWN0b3IobG9ja01hbmFnZXIpKTtcbiAgICB9IGNhdGNoIHsgLyogbm90IHJlZ2lzdGVyZWQgKi8gfVxuXG4gICAgLy8gRGVmYXVsdEVsZW1lbnRQcm92aWRlciAoc3RhdGljKVxuICAgIHRyeSB7XG4gICAgICBtZXRyaWNzTWFuYWdlci5yZWdpc3RlckNvbGxlY3RvcihuZXcgRGVmYXVsdEVsZW1lbnRQcm92aWRlckNvbGxlY3RvcigpKTtcbiAgICB9IGNhdGNoIHsgLyogbm90IGF2YWlsYWJsZSAqLyB9XG5cbiAgICAvLyBUcmlnZ2VyTWV0cmljc1RyYWNrZXIgKGluc3RhbmNlIOKAlCBjcmVhdGVkIGluc2lkZSBFbmhhbmNlZEluZGV4TWFuYWdlciBmYWN0b3J5KVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBlbmhhbmNlZEluZGV4ID0gdGhpcy5yZXNvbHZlPGltcG9ydCgnLi4vcG9ydGZvbGlvL0VuaGFuY2VkSW5kZXhNYW5hZ2VyLmpzJykuRW5oYW5jZWRJbmRleE1hbmFnZXI+KCdFbmhhbmNlZEluZGV4TWFuYWdlcicpO1xuICAgICAgLy8gRW5oYW5jZWRJbmRleE1hbmFnZXIgZXhwb3NlcyB0cmFja2VyIHZpYSBwdWJsaWMgZ2V0dGVyIGlmIGF2YWlsYWJsZVxuICAgICAgaWYgKCd0cmlnZ2VyTWV0cmljc1RyYWNrZXInIGluIGVuaGFuY2VkSW5kZXgpIHtcbiAgICAgICAgY29uc3QgdHJhY2tlciA9IChlbmhhbmNlZEluZGV4IGFzIGFueSkudHJpZ2dlck1ldHJpY3NUcmFja2VyO1xuICAgICAgICBpZiAodHJhY2tlcikge1xuICAgICAgICAgIG1ldHJpY3NNYW5hZ2VyLnJlZ2lzdGVyQ29sbGVjdG9yKG5ldyBUcmlnZ2VyTWV0cmljc1RyYWNrZXJDb2xsZWN0b3IodHJhY2tlcikpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCB7IC8qIG5vdCByZWdpc3RlcmVkICovIH1cblxuICAgIC8vIE9wZXJhdGlvbmFsVGVsZW1ldHJ5IChpbnN0YW5jZSlcbiAgICB0cnkge1xuICAgICAgY29uc3Qgb3BUZWxlbWV0cnkgPSB0aGlzLnJlc29sdmU8aW1wb3J0KCcuLi90ZWxlbWV0cnkvT3BlcmF0aW9uYWxUZWxlbWV0cnkuanMnKS5PcGVyYXRpb25hbFRlbGVtZXRyeT4oJ09wZXJhdGlvbmFsVGVsZW1ldHJ5Jyk7XG4gICAgICBtZXRyaWNzTWFuYWdlci5yZWdpc3RlckNvbGxlY3RvcihuZXcgT3BlcmF0aW9uYWxUZWxlbWV0cnlDb2xsZWN0b3Iob3BUZWxlbWV0cnkpKTtcbiAgICB9IGNhdGNoIHsgLyogbm90IHJlZ2lzdGVyZWQgKi8gfVxuXG4gICAgLy8gT3BlcmF0aW9uTWV0cmljc1RyYWNrZXIgKGluc3RhbmNlKVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBvcFRyYWNrZXIgPSB0aGlzLnJlc29sdmU8T3BlcmF0aW9uTWV0cmljc1RyYWNrZXI+KCdPcGVyYXRpb25NZXRyaWNzVHJhY2tlcicpO1xuICAgICAgbWV0cmljc01hbmFnZXIucmVnaXN0ZXJDb2xsZWN0b3IobmV3IE9wZXJhdGlvbk1ldHJpY3NDb2xsZWN0b3Iob3BUcmFja2VyKSk7XG4gICAgfSBjYXRjaCB7IC8qIG5vdCByZWdpc3RlcmVkICovIH1cblxuICAgIC8vIEdhdGVrZWVwZXJNZXRyaWNzVHJhY2tlciAoaW5zdGFuY2UpXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGdrVHJhY2tlciA9IHRoaXMucmVzb2x2ZTxHYXRla2VlcGVyTWV0cmljc1RyYWNrZXI+KCdHYXRla2VlcGVyTWV0cmljc1RyYWNrZXInKTtcbiAgICAgIG1ldHJpY3NNYW5hZ2VyLnJlZ2lzdGVyQ29sbGVjdG9yKG5ldyBHYXRla2VlcGVyTWV0cmljc0NvbGxlY3Rvcihna1RyYWNrZXIpKTtcbiAgICB9IGNhdGNoIHsgLyogbm90IHJlZ2lzdGVyZWQgKi8gfVxuICB9XG5cbiAgcHJpdmF0ZSBjb2xsZWN0THJ1Q2FjaGVzRm9yTWV0cmljcygpOiBBcnJheTx7IG5hbWU6IHN0cmluZzsgaW5zdGFuY2U6IGltcG9ydCgnLi4vY2FjaGUvTFJVQ2FjaGUuanMnKS5MUlVDYWNoZTx1bmtub3duPiB9PiB7XG4gICAgY29uc3QgY2FjaGVzOiBBcnJheTx7IG5hbWU6IHN0cmluZzsgaW5zdGFuY2U6IGltcG9ydCgnLi4vY2FjaGUvTFJVQ2FjaGUuanMnKS5MUlVDYWNoZTx1bmtub3duPiB9PiA9IFtdO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBhcGlDYWNoZSA9IHRoaXMucmVzb2x2ZTx7IGdldFN0YXRzKCk6IGltcG9ydCgnLi4vY2FjaGUvTFJVQ2FjaGUuanMnKS5DYWNoZVN0YXRzIH0+KCdBUElDYWNoZScpO1xuICAgICAgY2FjaGVzLnB1c2goeyBuYW1lOiAnQVBJQ2FjaGUnLCBpbnN0YW5jZTogYXBpQ2FjaGUgYXMgYW55IH0pO1xuICAgIH0gY2F0Y2ggeyAvKiBub3QgYXZhaWxhYmxlICovIH1cblxuICAgIGNvbnN0IG1hbmFnZXJOYW1lcyA9IFtcbiAgICAgICdQZXJzb25hTWFuYWdlcicsICdTa2lsbE1hbmFnZXInLCAnQWdlbnRNYW5hZ2VyJyxcbiAgICAgICdNZW1vcnlNYW5hZ2VyJywgJ0Vuc2VtYmxlTWFuYWdlcicsICdUZW1wbGF0ZU1hbmFnZXInLFxuICAgIF0gYXMgY29uc3Q7XG4gICAgZm9yIChjb25zdCBuYW1lIG9mIG1hbmFnZXJOYW1lcykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbWdyID0gdGhpcy5yZXNvbHZlPGltcG9ydCgnLi4vZWxlbWVudHMvYmFzZS9CYXNlRWxlbWVudE1hbmFnZXIuanMnKS5CYXNlRWxlbWVudE1hbmFnZXI8YW55Pj4obmFtZSk7XG4gICAgICAgIGNhY2hlcy5wdXNoKC4uLm1nci5nZXRNZXRyaWNzQ2FjaGVzKCkpO1xuICAgICAgfSBjYXRjaCB7IC8qIG5vdCByZWdpc3RlcmVkICovIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY2FjaGVzO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGRpc3Bvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gQ2xvc2UgdGhlIEhUVFAgc2VydmVyIGZpcnN0IHNvIHRoZSBwb3J0IGlzIGZyZWVkIGltbWVkaWF0ZWx5ICgjMTg1NilcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBzaHV0ZG93bldlYlNlcnZlciB9ID0gYXdhaXQgaW1wb3J0KCcuLi93ZWIvc2VydmVyLmpzJyk7XG4gICAgICBzaHV0ZG93bldlYlNlcnZlcigpO1xuICAgIH0gY2F0Y2ggeyAvKiB3ZWIgc2VydmVyIG5vdCBzdGFydGVkICovIH1cblxuICAgIC8vIENsb3NlIE1ldHJpY3NNYW5hZ2VyIGJlZm9yZSBnZW5lcmFsIGRpc3Bvc2FsIChmbHVzaCBmaW5hbCBzbmFwc2hvdClcbiAgICB0cnkge1xuICAgICAgY29uc3QgbWV0cmljc01hbmFnZXIgPSB0aGlzLnJlc29sdmU8TWV0cmljc01hbmFnZXI+KCdNZXRyaWNzTWFuYWdlcicpO1xuICAgICAgYXdhaXQgbWV0cmljc01hbmFnZXIuY2xvc2UoKTtcbiAgICB9IGNhdGNoIHsgLyogbWV0cmljcyBub3QgZW5hYmxlZCBvciBub3QgcmVnaXN0ZXJlZCAqLyB9XG5cbiAgICAvLyBDbGVhbiB1cCBsb2cgaG9va3MgYmVmb3JlIGRpc3Bvc2luZyBzZXJ2aWNlc1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjbGVhbnVwcyA9IHRoaXMucmVzb2x2ZTwoKCkgPT4gdm9pZClbXT4oJ19sb2dIb29rQ2xlYW51cHMnKTtcbiAgICAgIGNsZWFudXBzLmZvckVhY2goZm4gPT4gZm4oKSk7XG4gICAgfSBjYXRjaCB7IC8qIGhvb2tzIG5vdCB5ZXQgd2lyZWQgKi8gfVxuXG4gICAgY29uc3QgZGlzcG9zYWxQcm9taXNlcyA9IHRoaXMuYnVpbGREaXNwb3NhbFByb21pc2VzKCk7XG4gICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChkaXNwb3NhbFByb21pc2VzLm1hcChkID0+IGQucHJvbWlzZSkpO1xuICAgIHRoaXMucmVwb3J0RGlzcG9zYWxGYWlsdXJlcyhkaXNwb3NhbFByb21pc2VzLCByZXN1bHRzKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGREaXNwb3NhbFByb21pc2VzKCk6IEFycmF5PHsgbmFtZTogc3RyaW5nOyBwcm9taXNlOiBQcm9taXNlPHZvaWQ+IH0+IHtcbiAgICBjb25zdCBwcm9taXNlczogQXJyYXk8eyBuYW1lOiBzdHJpbmc7IHByb21pc2U6IFByb21pc2U8dm9pZD4gfT4gPSBbXTtcbiAgICBmb3IgKGNvbnN0IFtuYW1lLCBzZXJ2aWNlXSBvZiB0aGlzLnNlcnZpY2VzKSB7XG4gICAgICBpZiAoIXNlcnZpY2UuaW5zdGFuY2UpIGNvbnRpbnVlO1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSBzZXJ2aWNlLmluc3RhbmNlIGFzIGFueTtcbiAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuZGlzcG9zZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBwcm9taXNlcy5wdXNoKHsgbmFtZSwgcHJvbWlzZTogUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiBpbnN0YW5jZS5kaXNwb3NlKCkpIH0pO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaW5zdGFuY2UuY2xlYW51cCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBwcm9taXNlcy5wdXNoKHsgbmFtZSwgcHJvbWlzZTogUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiBpbnN0YW5jZS5jbGVhbnVwKCkpIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcHJvbWlzZXM7XG4gIH1cblxuICBwcml2YXRlIHJlcG9ydERpc3Bvc2FsRmFpbHVyZXMoXG4gICAgZGlzcG9zYWxQcm9taXNlczogQXJyYXk8eyBuYW1lOiBzdHJpbmc7IHByb21pc2U6IFByb21pc2U8dm9pZD4gfT4sXG4gICAgcmVzdWx0czogUHJvbWlzZVNldHRsZWRSZXN1bHQ8dm9pZD5bXSxcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgZmFpbHVyZXM6IHN0cmluZ1tdID0gW107XG4gICAgZm9yIChjb25zdCBbaW5kZXgsIHJlc3VsdF0gb2YgcmVzdWx0cy5lbnRyaWVzKCkpIHtcbiAgICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSAncmVqZWN0ZWQnKSB7XG4gICAgICAgIGNvbnN0IHNlcnZpY2VOYW1lID0gZGlzcG9zYWxQcm9taXNlc1tpbmRleF0ubmFtZTtcbiAgICAgICAgY29uc3QgZXJyb3IgPSByZXN1bHQucmVhc29uIGluc3RhbmNlb2YgRXJyb3IgPyByZXN1bHQucmVhc29uIDogbmV3IEVycm9yKFN0cmluZyhyZXN1bHQucmVhc29uKSk7XG4gICAgICAgIGZhaWx1cmVzLnB1c2goc2VydmljZU5hbWUpO1xuICAgICAgICBsb2dnZXIud2FybihgRmFpbGVkIHRvIGRpc3Bvc2Ugc2VydmljZSAnJHtzZXJ2aWNlTmFtZX0nYCwgeyBlcnJvciB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGZhaWx1cmVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGxvZ2dlci53YXJuKGBDb250YWluZXIgZGlzcG9zYWwgY29tcGxldGVkIHdpdGggJHtmYWlsdXJlcy5sZW5ndGh9IGZhaWx1cmUocykgb3V0IG9mICR7ZGlzcG9zYWxQcm9taXNlcy5sZW5ndGh9IHNlcnZpY2VzYCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBpbml0aWFsaXplQ29sbGVjdGlvbkNhY2hlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb2xsZWN0aW9uQ2FjaGUgPSB0aGlzLnJlc29sdmU8Q29sbGVjdGlvbkNhY2hlPignQ29sbGVjdGlvbkNhY2hlJyk7XG4gICAgICBjb25zdCBpc0NhY2hlVmFsaWQgPSBhd2FpdCBjb2xsZWN0aW9uQ2FjaGUuaXNDYWNoZVZhbGlkKCk7XG4gICAgICBpZiAoIWlzQ2FjaGVWYWxpZCkge1xuICAgICAgICBsb2dnZXIuaW5mbyhcIkluaXRpYWxpemluZyBjb2xsZWN0aW9uIGNhY2hlIHdpdGggc2VlZCBkYXRhLi4uXCIpO1xuICAgICAgICBjb25zdCB7IENvbGxlY3Rpb25TZWVkZXIgfSA9IGF3YWl0IGltcG9ydChcIi4uL2NvbGxlY3Rpb24vQ29sbGVjdGlvblNlZWRlci5qc1wiKTtcbiAgICAgICAgY29uc3Qgc2VlZERhdGEgPSBDb2xsZWN0aW9uU2VlZGVyLmdldFNlZWREYXRhKCk7XG4gICAgICAgIGF3YWl0IGNvbGxlY3Rpb25DYWNoZS5zYXZlQ2FjaGUoc2VlZERhdGEpO1xuICAgICAgICBsb2dnZXIuaW5mbyhgQ29sbGVjdGlvbiBjYWNoZSBpbml0aWFsaXplZCB3aXRoICR7c2VlZERhdGEubGVuZ3RofSBpdGVtc2ApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgc3RhdHMgPSBhd2FpdCBjb2xsZWN0aW9uQ2FjaGUuZ2V0Q2FjaGVTdGF0cygpO1xuICAgICAgICBsb2dnZXIuZGVidWcoYENvbGxlY3Rpb24gY2FjaGUgYWxyZWFkeSB2YWxpZCB3aXRoICR7c3RhdHMuaXRlbUNvdW50fSBpdGVtc2ApO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBFcnJvckhhbmRsZXIubG9nRXJyb3IoXCJEb2xsaG91c2VDb250YWluZXIuaW5pdGlhbGl6ZUNvbGxlY3Rpb25DYWNoZVwiLCBlcnJvcik7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
1335
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udGFpbmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RpL0NvbnRhaW5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDcEIsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUFFLGVBQWUsRUFBRSxlQUFlLElBQUksT0FBTyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRXRFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN2QyxPQUFPLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxnQ0FBZ0MsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2hKLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM3RCxPQUFPLEVBQ0wsWUFBWSxFQUNaLGlCQUFpQixFQUNqQixzQkFBc0IsRUFDdEIsZ0JBQWdCLEVBQ2hCLGNBQWMsRUFDZCxnQkFBZ0IsR0FDakIsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDakYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDcEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDNUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGFBQWEsRUFBd0IsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDL0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDbEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDdEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDckYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzlELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzdELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDN0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUNwRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDM0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDNUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDNUUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDMUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDaEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDeEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDekUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDckUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbkUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDN0UsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDakYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUM3RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUNsRixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUM5RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUNoRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDOUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDOUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQUNsRyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQUNuRyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUMvRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUM3RixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUN6RyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixhQUFhLEVBQ2IsV0FBVyxFQUNYLG1CQUFtQixHQUNwQixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3hHLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxVQUFVLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM3RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDOUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsWUFBWSxFQUFFLDRCQUE0QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDcEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzlELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzFFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2hFLE9BQU8sRUFDTCwyQkFBMkIsRUFDM0IsaUJBQWlCLEVBQ2pCLHdCQUF3QixFQUN4QiwwQkFBMEIsRUFDMUIsd0JBQXdCLEVBQ3hCLCtCQUErQixFQUMvQiw4QkFBOEIsRUFDOUIsNkJBQTZCLEVBQzdCLHlCQUF5QixFQUN6QiwwQkFBMEIsR0FDM0IsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNoRixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQWtDbEYsTUFBTSxPQUFPLGtCQUFrQjtJQUNyQixRQUFRLEdBQUcsSUFBSSxHQUFHLEVBQXlCLENBQUM7SUFDNUMsV0FBVyxHQUFrQixJQUFJLENBQUM7SUFDMUMscUVBQXFFO0lBQzlELHFCQUFxQixHQUFHLEtBQUssQ0FBQztJQUVyQztRQUNFLHdEQUF3RDtRQUN4RCxlQUFlLENBQUMsZ0JBQWdCLENBQUM7WUFDL0IsSUFBSSxFQUFFLDBCQUEwQjtZQUNoQyxRQUFRLEVBQUUsS0FBSztZQUNmLE1BQU0sRUFBRSxnQ0FBZ0M7WUFDeEMsT0FBTyxFQUFFLDZDQUE2QztTQUN2RCxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7O09BV0c7SUFDSSxRQUFRLENBQUksSUFBWSxFQUFFLE9BQWdCLEVBQUUsVUFBbUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFO1FBQ3ZHLGlEQUFpRDtRQUNqRCxlQUFlLENBQUMsZ0JBQWdCLENBQUM7WUFDL0IsSUFBSSxFQUFFLGlCQUFpQjtZQUN2QixRQUFRLEVBQUUsS0FBSztZQUNmLE1BQU0sRUFBRSw2QkFBNkI7WUFDckMsT0FBTyxFQUFFLHVCQUF1QixJQUFJLEVBQUU7WUFDdEMsY0FBYyxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVMsSUFBSSxJQUFJLEVBQUU7U0FDNUUsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFO1lBQ3RCLE9BQU8sRUFBRSxPQUF3QjtZQUNqQyxRQUFRLEVBQUUsSUFBSTtZQUNkLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUyxJQUFJLElBQUk7U0FDckMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7O09BYUc7SUFDSSxPQUFPLENBQUksSUFBWTtRQUM1QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDYix3REFBd0Q7WUFDeEQsZUFBZSxDQUFDLGdCQUFnQixDQUFDO2dCQUMvQixJQUFJLEVBQUUsb0JBQW9CO2dCQUMxQixRQUFRLEVBQUUsUUFBUTtnQkFDbEIsTUFBTSxFQUFFLDRCQUE0QjtnQkFDcEMsT0FBTyxFQUFFLDJCQUEyQixJQUFJLEVBQUU7Z0JBQzFDLGNBQWMsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUU7YUFDdEMsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNyRCxDQUFDO1FBRUQsSUFBSSxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDdEIsT0FBTyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ3JDLG9EQUFvRDtnQkFDcEQsZUFBZSxDQUFDLGdCQUFnQixDQUFDO29CQUMvQixJQUFJLEVBQUUsaUJBQWlCO29CQUN2QixRQUFRLEVBQUUsS0FBSztvQkFDZixNQUFNLEVBQUUsNEJBQTRCO29CQUNwQyxPQUFPLEVBQUUsMkJBQTJCLElBQUksRUFBRTtvQkFDMUMsY0FBYyxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTtpQkFDdEMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUNELE9BQU8sT0FBTyxDQUFDLFFBQWEsQ0FBQztRQUMvQixDQUFDO1FBRUQsT0FBTyxPQUFPLENBQUMsT0FBTyxFQUFPLENBQUM7SUFDaEMsQ0FBQztJQUVPLGdCQUFnQjtRQUd0Qiw2Q0FBNkM7UUFDN0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBRXhELGlCQUFpQjtRQUNqQixJQUFJLENBQUMsUUFBUSxDQUFDLG1CQUFtQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksaUJBQWlCLENBQUM7WUFDN0QsZ0JBQWdCLEVBQUUsa0NBQWtDLEVBQUU7U0FDdkQsQ0FBQyxDQUFDLENBQUM7UUFDSixJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUM5RyxJQUFJLENBQUMsUUFBUSxDQUFDLGtCQUFrQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksR0FBRyxFQUFvQixDQUFDLENBQUM7UUFDckUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLGVBQWUsRUFBRSxDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyx1QkFBdUIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLHFCQUFxQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQUUsR0FBRyxFQUFFO1lBQ2xDLE9BQU8sSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3RFLENBQUMsQ0FBQyxDQUFDO1FBQ0gsb0VBQW9FO1FBQ3BFLElBQUksQ0FBQyxRQUFRLENBQUMsd0JBQXdCLEVBQUUsR0FBRyxFQUFFO1lBQzNDLE1BQU0sT0FBTyxHQUFHLElBQUksc0JBQXNCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO1lBQzFFLDhFQUE4RTtZQUM5RSxPQUFPLENBQUMsZ0JBQWdCLENBQUMsSUFBSSx1QkFBdUIsRUFBRSxDQUFDLENBQUM7WUFDeEQsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxFQUFFLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyxRQUFRLENBQUMscUJBQXFCLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxtQkFBbUIsRUFBRSxDQUFDLENBQUM7UUFDdEUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLGlCQUFpQixDQUM1RCxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUM3QixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLHdCQUF3QixFQUFFLEdBQUcsRUFBRSxDQUFDLHNCQUFzQixDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQztRQUM1RixJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUV6QyxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixFQUFFLEdBQUcsRUFBRTtZQUNwQyxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQW1CLGtCQUFrQixDQUFDLENBQUM7WUFDNUUsTUFBTSxXQUFXLEdBQUcsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN4RSxvSEFBb0g7WUFDcEgsTUFBTSxtQkFBbUIsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFpQixnQkFBZ0IsQ0FBQyxDQUFDLDRCQUE0QixFQUFFLENBQUM7WUFDaEgsT0FBTyxJQUFJLGVBQWUsQ0FDeEIsV0FBVyxFQUNYLG1CQUFtQixFQUNuQixTQUFTLEVBQ1QsSUFBSSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxDQUN0QyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCxzQkFBc0I7UUFDdEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxZQUFZLENBQ2xELElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQ3hCLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsRUFDaEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FDN0IsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLGlCQUFpQixDQUM1RCxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUN4QixJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxFQUM3QixJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUM3QixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLHdCQUF3QixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksc0JBQXNCLENBQUM7WUFDdkUsY0FBYyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUM7U0FDdEQsQ0FBQyxDQUFDLENBQUM7UUFDSixJQUFJLENBQUMsUUFBUSxDQUFDLG1CQUFtQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksaUJBQWlCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2SyxJQUFJLENBQUMsUUFBUSxDQUFDLGtCQUFrQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksZ0JBQWdCLENBQzFELElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLEVBQzVCLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsRUFDL0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxDQUNyQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXhGLHVCQUF1QjtRQUN2QixJQUFJLENBQUMsUUFBUSxDQUFDLGtCQUFrQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksZ0JBQWdCLENBQzFELElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUMsRUFDckMsU0FBUyxDQUNWLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxjQUFjLENBQ3RELElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsRUFDaEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxFQUMvQixJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEVBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUMsRUFDckMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxFQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEVBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsRUFDL0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxFQUNuQztZQUNFLGVBQWUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLHdCQUF3QixDQUFDO1lBQ3ZELGlCQUFpQixFQUFFLElBQUk7WUFDdkIsMEJBQTBCLEVBQUUsSUFBSTtZQUNoQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDO1lBQ2xELFlBQVksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDO1lBQy9DLGFBQWEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQztTQUM3QyxDQUNGLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxRQUFRLENBQUMsdUJBQXVCLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxxQkFBcUIsQ0FDcEUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUMvQixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLHlCQUF5QixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksdUJBQXVCLENBQ3hFLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsRUFDOUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxFQUMvQixJQUFJLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDLEVBQ25DLElBQUksQ0FBQyxPQUFPLENBQUMsd0JBQXdCLENBQUMsQ0FDdkMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4SyxJQUFJLENBQUMsUUFBUSxDQUFDLGtCQUFrQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsRUFBRTtZQUN6RixnQkFBZ0IsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDO1lBQ2xELG1CQUFtQixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMscUJBQXFCLENBQUM7WUFDeEQsY0FBYyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUM7U0FDdEQsQ0FBQyxDQUFDLENBQUM7UUFDSixJQUFJLENBQUMsUUFBUSxDQUFDLHNCQUFzQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksb0JBQW9CLENBQ2xFLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLEVBQzVCLDBCQUEwQixFQUFFLENBQzdCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxRQUFRLENBQUMsd0JBQXdCLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxzQkFBc0IsQ0FDdEUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxDQUNyQyxDQUFDLENBQUM7UUFFSCxXQUFXO1FBQ1gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxzQkFBc0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLG9CQUFvQixFQUFFLENBQUMsQ0FBQztRQUN4RSxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksZUFBZSxFQUFFLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsUUFBUSxDQUFDLDBCQUEwQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksd0JBQXdCLEVBQUUsQ0FBQyxDQUFDO1FBQ2hGLElBQUksQ0FBQyxRQUFRLENBQUMsbUJBQW1CLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxpQkFBaUIsRUFBRSxDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLGdCQUFnQixFQUFFLENBQUMsQ0FBQztRQUNoRSxJQUFJLENBQUMsUUFBUSxDQUFDLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksa0JBQWtCLENBQzlELElBQUksQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsRUFDakMsSUFBSSxDQUFDLE9BQU8sQ0FBQywwQkFBMEIsQ0FBQyxFQUN4QyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQ2hDLENBQUMsQ0FBQztRQUVILFVBQVU7UUFDVixJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxHQUFHLEVBQUU7WUFDL0IsTUFBTSxNQUFNLEdBQUcscUJBQXFCLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDMUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFdkMsdUJBQXVCO1lBQ3ZCLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLEtBQUssT0FBTztnQkFDNUMsQ0FBQyxDQUFDLElBQUksY0FBYyxFQUFFO2dCQUN0QixDQUFDLENBQUMsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1lBQzdCLE1BQU0sUUFBUSxHQUFHLElBQUksV0FBVyxDQUFDO2dCQUMvQixNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU07Z0JBQ3JCLFNBQVM7Z0JBQ1QsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXO2dCQUMvQixhQUFhLEVBQUUsTUFBTSxDQUFDLGFBQWE7Z0JBQ25DLHFCQUFxQixFQUFFLE1BQU0sQ0FBQyxxQkFBcUI7Z0JBQ25ELGVBQWUsRUFBRSxNQUFNLENBQUMsZUFBZTtnQkFDdkMsbUJBQW1CLEVBQUUsTUFBTSxDQUFDLG1CQUFtQjthQUNoRCxDQUFDLENBQUM7WUFDSCxPQUFPLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQy9CLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBRTdCLHlCQUF5QjtZQUN6QixNQUFNLFVBQVUsR0FBRyxJQUFJLGFBQWEsQ0FBQztnQkFDbkMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxpQkFBaUI7Z0JBQ3JDLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxzQkFBc0I7Z0JBQy9DLFlBQVksRUFBRSxNQUFNLENBQUMsa0JBQWtCO2dCQUN2QyxpQkFBaUIsRUFBRSxNQUFNLENBQUMsdUJBQXVCO2FBQ2xELENBQUMsQ0FBQztZQUNILE9BQU8sQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7WUFFakMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQUUsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUM7WUFFakQsdURBQXVEO1lBQ3ZELE9BQU8sQ0FBQyxHQUFHLENBQUM7Z0JBQ1YsRUFBRSxFQUFFLE9BQU8sQ0FBQyxVQUFVLEVBQUU7Z0JBQ3hCLFNBQVMsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTtnQkFDbkMsUUFBUSxFQUFFLGFBQWE7Z0JBQ3ZCLEtBQUssRUFBRSxNQUFNO2dCQUNiLE1BQU0sRUFBRSxjQUFjO2dCQUN0QixPQUFPLEVBQUUsaUJBQWlCLE9BQU8sV0FBVztnQkFDNUMsSUFBSSxFQUFFO29CQUNKLE9BQU8sRUFBRSxPQUFPO29CQUNoQixRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7b0JBQ3pCLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUztvQkFDM0IsT0FBTyxFQUFFLEdBQUcsQ0FBQyxxQkFBcUI7d0JBQ2hDLENBQUMsQ0FBQyw4QkFBOEIsR0FBRyxDQUFDLDBCQUEwQixFQUFFO3dCQUNoRSxDQUFDLENBQUMsVUFBVTtpQkFDZjthQUNGLENBQUMsQ0FBQztZQUVILE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxDQUFDO1FBRUgscUJBQXFCO1FBQ3JCLDBFQUEwRTtRQUMxRSwwRUFBMEU7UUFDMUUsc0NBQXNDO1FBQ3RDLE1BQU0sYUFBYSxHQUFHLHlCQUF5QixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JELElBQUksYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzFCLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsc0JBQXNCLENBQUMsQ0FBQztZQUN0RixJQUFJLENBQUMsUUFBUSxDQUFDLG1CQUFtQixFQUFFLEdBQUcsRUFBRSxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFFNUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUU7Z0JBQ25DLE1BQU0sT0FBTyxHQUFHLElBQUksY0FBYyxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDMUQsT0FBTyxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO2dCQUN4QyxPQUFPLE9BQU8sQ0FBQztZQUNqQixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxZQUFZO1FBQ1osSUFBSSxDQUFDLFFBQVEsQ0FBQyxzQkFBc0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLG9CQUFvQixDQUNsRSxJQUFJLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLENBQ3RDLENBQUMsQ0FBQztRQUVILHNFQUFzRTtRQUN0RSxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLGFBQWEsQ0FDcEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxFQUNyQztZQUNFLGFBQWEsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQW1CLGtCQUFrQixDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUUsVUFBVSxDQUFDO1lBQ3JHLG9CQUFvQixFQUFFLGdDQUFnQyxFQUFFO1lBQ3hELE9BQU8sRUFBRSxvQkFBb0IsQ0FBQyxlQUFlO1NBQzlDLENBQ0YsQ0FBQyxDQUFDO1FBRUgsZ0VBQWdFO1FBQ2hFLElBQUksQ0FBQyxRQUFRLENBQUMscUJBQXFCLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxtQkFBbUIsQ0FBQztZQUNqRSwwQkFBMEIsRUFBRSxLQUFLLElBQUksRUFBRTtnQkFDckMsSUFBSSxDQUFDO29CQUNILE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQXFCLG9CQUFvQixDQUFDLENBQUM7b0JBQ3ZFLE9BQU8sT0FBTyxDQUFDLDBCQUEwQixFQUFFLENBQUM7Z0JBQzlDLENBQUM7Z0JBQUMsTUFBTSxDQUFDO29CQUNQLE9BQU8sRUFBRSxDQUFDO2dCQUNaLENBQUM7WUFDSCxDQUFDO1lBQ0QsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFLENBQUMsZUFBZTtTQUN4QyxDQUFDLENBQUMsQ0FBQztRQUVKLG1CQUFtQjtRQUNuQixJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLFlBQVksQ0FDbEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxFQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEVBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUMsRUFDckMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxFQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLEVBQ3BDLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsRUFDL0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxFQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEVBQ2pDLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQzlCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxlQUFlLENBQ3hELElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsRUFDaEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxFQUMvQixJQUFJLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLEVBQ3JDLElBQUksQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsRUFDbEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxFQUNwQyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEVBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsRUFDaEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxFQUNqQyxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUM5QixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLGtCQUFrQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvRixJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLFlBQVksQ0FDbEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxFQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEVBQy9CLElBQUksQ0FBQyxPQUFPLENBQW1CLGtCQUFrQixDQUFDLENBQUMsVUFBVSxFQUFFLEVBQy9ELElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUMsRUFDckMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxFQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLEVBQ3BDLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsRUFDL0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxFQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEVBQ2pDLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQzlCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksYUFBYSxDQUNwRCxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLEVBQ2hDLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsRUFDL0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxFQUNyQyxJQUFJLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLEVBQ2xDLElBQUksQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsRUFDcEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxFQUMvQixJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLEVBQ2hDLElBQUksQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsRUFDakMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FDOUIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLGVBQWUsQ0FDeEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxFQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEVBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUMsRUFDckMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxFQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLEVBQ3BDLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsRUFDL0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxFQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEVBQ2pDLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQzlCLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyw4QkFBOEIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7UUFDM0Usa0VBQWtFO1FBQ2xFLE1BQU0sQ0FBQyxnQ0FBZ0MsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQztRQUN0RixnR0FBZ0c7UUFDaEcsWUFBWSxDQUFDLHlCQUF5QixDQUFDLENBQUMsV0FBbUIsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQzNGLDJGQUEyRjtRQUMzRixZQUFZLENBQUMsNkJBQTZCLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7UUFDckYsK0ZBQStGO1FBQy9GLFlBQVksQ0FBQyw0QkFBNEIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQztRQUVuRiw2REFBNkQ7UUFDN0QsNEVBQTRFO1FBQzVFLElBQUksQ0FBQyxRQUFRLENBQUMsbUJBQW1CLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxpQkFBaUIsRUFBRSxDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxhQUFhLEVBQUUsQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksV0FBVyxFQUFFLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsUUFBUSxDQUFDLHFCQUFxQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksbUJBQW1CLENBQ2hFLElBQUksQ0FBQyxPQUFPLENBQW9CLG1CQUFtQixDQUFDLEVBQ3BELElBQUksQ0FBQyxPQUFPLENBQWdCLGVBQWUsQ0FBQyxFQUM1QyxJQUFJLENBQUMsT0FBTyxDQUFjLGFBQWEsQ0FBQyxDQUN6QyxDQUFDLENBQUM7UUFFSCxhQUFhO1FBQ2IsSUFBSSxDQUFDLFFBQVEsQ0FBQywrQkFBK0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLDZCQUE2QixFQUFFLENBQUMsQ0FBQztRQUMxRixJQUFJLENBQUMsUUFBUSxDQUFDLCtCQUErQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksNkJBQTZCLEVBQUUsQ0FBQyxDQUFDO1FBRTFGLG9CQUFvQjtRQUNwQiwyRkFBMkY7UUFDM0YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLGtCQUFrQixDQUM5RCxJQUFJLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLENBQ3RDLENBQUMsQ0FBQztRQUNILHFFQUFxRTtRQUNyRSxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksZUFBZSxDQUN4RCxJQUFJLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLENBQ3RDLENBQUMsQ0FBQztRQUNILDhFQUE4RTtRQUM5RSxJQUFJLENBQUMsUUFBUSxDQUFDLG1CQUFtQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO1FBQ2xFLHFFQUFxRTtRQUNyRSxJQUFJLENBQUMsUUFBUSxDQUFDLHNCQUFzQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO1FBQ3hFLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksWUFBWSxDQUNsRCxJQUFJLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLENBQ3RDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxRQUFRLENBQUMsa0JBQWtCLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLGNBQWMsRUFBRSxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLGdCQUFnQixDQUMxRCxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLEVBQ2hDLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FDL0IsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLGdCQUFnQixDQUMxRCxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQ2pDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxRQUFRLENBQUMscUJBQXFCLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxtQkFBbUIsQ0FDaEUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxFQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUM5QixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLG1CQUFtQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO1FBQ2xFLGdCQUFnQixDQUFDLDBCQUEwQixDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO1FBRXJGLGlCQUFpQjtRQUNqQixJQUFJLENBQUMsUUFBUSxDQUFDLG1CQUFtQixFQUFFLEdBQUcsRUFBRTtZQUNwQyxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQXFCLG9CQUFvQixDQUFDLENBQUM7WUFDbEYsTUFBTSxNQUFNLEdBQUcsa0JBQWtCLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDOUMsT0FBTyxJQUFJLGlCQUFpQixDQUFDO2dCQUN6QixXQUFXLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLEdBQUcsSUFBSTtnQkFDdEQsY0FBYyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsY0FBYztnQkFDekMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsWUFBWTtnQkFDckMsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUI7YUFDbEQsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsRUFBRSxHQUFHLEVBQUU7WUFDckMsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFxQixvQkFBb0IsQ0FBQyxDQUFDO1lBQ2xGLE1BQU0sTUFBTSxHQUFHLGtCQUFrQixDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzlDLE9BQU8sSUFBSSxrQkFBa0IsQ0FBQztnQkFDMUIsbUJBQW1CLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxtQkFBbUI7Z0JBQ3JELGtCQUFrQixFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsa0JBQWtCO2dCQUNuRCxlQUFlLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxlQUFlO2FBQ2hELENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsRUFBRSxHQUFHLEVBQUU7WUFDdEMsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFxQixvQkFBb0IsQ0FBQyxDQUFDO1lBQ2xGLE1BQU0sTUFBTSxHQUFHLGtCQUFrQixDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzlDLE9BQU8sSUFBSSxtQkFBbUIsQ0FBQztnQkFDM0IsTUFBTSxFQUFFO29CQUNKLGFBQWEsRUFBRSxNQUFNLENBQUMsV0FBVyxDQUFDLG1CQUFtQjtvQkFDckQsbUJBQW1CLEVBQUUsSUFBSTtpQkFDNUI7Z0JBQ0Qsa0JBQWtCO2dCQUNsQixrQkFBa0IsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDO2dCQUN0RCxVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQzthQUNoRCxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxRQUFRLENBQUMsdUJBQXVCLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckwsSUFBSSxDQUFDLFFBQVEsQ0FBQyxzQkFBc0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLDJCQUEyQixDQUN6RSxJQUFJLHdCQUF3QixFQUFFLEVBQzlCLElBQUksMkJBQTJCLENBQUM7WUFDOUIsVUFBVSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUM7WUFDN0MsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQztTQUN6RCxDQUFDLEVBQ0YsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLElBQUksc0JBQXNCLENBQUMsT0FBTyxDQUFDLEVBQ2hELENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDVixNQUFNLE9BQU8sR0FBRyxJQUFJLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ25ELElBQUksQ0FBQztnQkFDSCxPQUFPLENBQUMsY0FBYyxDQUFDLDRCQUE0QixDQUNqRCxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUMxQixJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQy9CLENBQUMsQ0FBQztZQUNMLENBQUM7WUFBQyxNQUFNLENBQUMsQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO1lBQy9DLE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUMsQ0FDRixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLHNCQUFzQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksb0JBQW9CLENBQ2hFLElBQUksQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsRUFDbEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsRUFDN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxFQUNyQyxJQUFJLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEVBQ2pDLElBQUksQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsRUFDbEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxFQUNuQyxJQUFJLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLEVBQ3BDLElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUMsQ0FDeEMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxzQkFBc0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLG9CQUFvQixDQUNoRSxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxFQUM1QixPQUFPLENBQUMsR0FBRyxFQUFFLEVBQ2IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxFQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLENBQ3hDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxRQUFRLENBQUMscUJBQXFCLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxtQkFBbUIsQ0FBQztZQUMvRCxxQkFBcUIsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDO1lBQzVELGFBQWEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLHdCQUF3QixDQUFDO1lBQ3JELG9CQUFvQixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUM7WUFDMUQsWUFBWSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDO1lBQzFDLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQztZQUNsQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDO1lBQ2xELGtCQUFrQixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUM7WUFDdEQsY0FBYyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUM7U0FDeEQsQ0FBQyxDQUFDLENBQUM7UUFFSixJQUFJLENBQUMsUUFBUSxDQUFDLHVCQUF1QixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUkscUJBQXFCLEVBQUUsQ0FBQyxDQUFDO1FBQzFFLElBQUksQ0FBQyxRQUFRLENBQUMscUJBQXFCLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxtQkFBbUIsRUFBRSxDQUFDLENBQUM7UUFFdEUsZUFBZTtRQUNmLElBQUksQ0FBQyxRQUFRLENBQUMsc0JBQXNCLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxvQkFBb0IsQ0FBQztZQUNqRSxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDO1lBQ2xELFlBQVksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDO1lBQ25ELGFBQWEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLHdCQUF3QixDQUFDO1lBQ3JELG9CQUFvQixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUM7WUFDMUQsWUFBWSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUM7WUFDbkQsVUFBVSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMscUJBQXFCLENBQUM7WUFDL0MsY0FBYyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUM7WUFDckQsWUFBWSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDO1NBQzdDLENBQUMsQ0FBQyxDQUFDO1FBQ0osSUFBSSxDQUFDLFFBQVEsQ0FBQyx1QkFBdUIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLHFCQUFxQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDN0YsV0FBVyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUM7WUFDOUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQztZQUNsRCxxQkFBcUIsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDO1lBQzVELG9CQUFvQixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUM7WUFDMUQsV0FBVyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUM7WUFDOUMsY0FBYyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUM7WUFDckQsWUFBWSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDO1NBQzdDLENBQUMsQ0FBQyxDQUFDO1FBQ0osSUFBSSxDQUFDLFFBQVEsQ0FBQyxzQkFBc0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLG9CQUFvQixDQUFDO1lBQ2pFLGFBQWEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQztZQUM1QyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDO1lBQ2xELG9CQUFvQixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUM7WUFDMUQsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsd0JBQXdCLENBQUM7WUFDL0MsY0FBYyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUM7WUFDckQsWUFBWSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDO1NBQzdDLENBQUMsQ0FBQyxDQUFDO1FBRUosU0FBUztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksV0FBVyxDQUNoRCxJQUFJLENBQUMsT0FBTyxDQUFpQixnQkFBZ0IsQ0FBQyxDQUMvQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLGFBQWEsQ0FDcEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxFQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEVBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLEVBQzdCLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsRUFDaEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsRUFDN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxDQUNyQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLGtCQUFrQixFQUFFLEdBQUcsRUFBRTtZQUNyQyxNQUFNLE9BQU8sR0FBRyxJQUFJLGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDO1lBQzVFLDJDQUEyQztZQUMzQyxPQUFPLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQWUsY0FBYyxDQUFDLENBQUMsQ0FBQztZQUNwRSxPQUFPLENBQUMsdUJBQXVCLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDbEUsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLG9CQUFvQixFQUFFLEdBQUcsRUFBRTtZQUN2QyxNQUFNLE9BQU8sR0FBRyxJQUFJLGtCQUFrQixFQUFFLENBQUM7WUFDekMsT0FBTyxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQzFCLE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFFBQVEsQ0FBQyx5QkFBeUIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLHVCQUF1QixFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNuRyxJQUFJLENBQUMsUUFBUSxDQUFDLDBCQUEwQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksd0JBQXdCLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZHLENBQUM7SUFFTSxjQUFjO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNJLEtBQUssQ0FBQyxnQkFBZ0I7UUFDM0IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBZSxjQUFjLENBQUMsQ0FBQztRQUN6RCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDN0IsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFtQixrQkFBa0IsQ0FBQyxDQUFDO1FBQzVFLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBbUIsa0JBQWtCLENBQUMsQ0FBQztRQUU1RSxtQ0FBbUM7UUFDbkMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFeEMsdUZBQXVGO1FBQ3ZGLHlFQUF5RTtRQUN6RSxNQUFNLE9BQU8sR0FBRyxNQUFNLE9BQU8sQ0FBQyxVQUFVLENBQUM7WUFDdkMsZ0JBQWdCLENBQUMsY0FBYyxFQUFFO1lBQ2pDLGdCQUFnQixDQUFDLE1BQU0sRUFBRTtTQUMxQixDQUFDLENBQUM7UUFFSCx5Q0FBeUM7UUFDekMsTUFBTSxXQUFXLEdBQTJDLEVBQUUsQ0FBQztRQUUvRCxJQUFJLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDM0IsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLFdBQVcsRUFBRSxDQUFDO1lBQ3RDLGNBQWMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ3BDLENBQUM7YUFBTSxDQUFDO1lBQ04sV0FBVyxDQUFDLElBQUksQ0FBQztnQkFDZixLQUFLLEVBQUUsV0FBVztnQkFDbEIsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ3JHLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUM7UUFDNUIsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLFdBQVcsRUFBRSxDQUFDO1lBQ3RDLGVBQWUsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ3JDLENBQUM7YUFBTSxDQUFDO1lBQ04sV0FBVyxDQUFDLElBQUksQ0FBQztnQkFDZixLQUFLLEVBQUUsV0FBVztnQkFDbEIsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ3JHLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxtREFBbUQ7UUFDbkQsSUFBSSxXQUFXLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzdCLE1BQU0sYUFBYSxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN4RixNQUFNLElBQUksS0FBSyxDQUFDLHFEQUFxRCxhQUFhLEVBQUUsQ0FBQyxDQUFDO1FBQ3hGLENBQUM7UUFFRCxxREFBcUQ7UUFDckQsSUFBSSxXQUFXLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzdCLE1BQU0sQ0FBQyxJQUFJLENBQUMsMENBQTBDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLE1BQU0sV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ2xILENBQUM7UUFFRCxLQUFLLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBRWhDLDRDQUE0QztRQUM1QyxJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQ25CLEtBQUssQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3BDLE1BQU0sQ0FBQyxJQUFJLENBQUMsaURBQWlELENBQUMsQ0FBQztZQUMvRCxNQUFNLE1BQU0sR0FBRyxNQUFNLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBRWhFLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNuQixNQUFNLENBQUMsSUFBSSxDQUFDLHlCQUF5QixNQUFNLENBQUMsYUFBYSxXQUFXLENBQUMsQ0FBQztnQkFDdEUsSUFBSSxNQUFNLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztvQkFDekMsTUFBTSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7Z0JBQ3pELENBQUM7WUFDSCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sTUFBTSxDQUFDLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO2dCQUNqRCxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM3RCxDQUFDO1lBQ0QsS0FBSyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM5QixDQUFDO1FBRUQsaURBQWlEO1FBQ2pELElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUNyQixLQUFLLENBQUMsVUFBVSxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3pDLE1BQU0sQ0FBQyxJQUFJLENBQUMsMkNBQTJDLENBQUMsQ0FBQztZQUN6RCxNQUFNLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3BDLEtBQUssQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNuQyxDQUFDO1FBRUQscUZBQXFGO1FBQ3JGLG9FQUFvRTtRQUNwRSxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FDM0MsTUFBTSxDQUFDLElBQUksQ0FBQywwRUFBMEUsRUFBRSxHQUFHLENBQUMsQ0FDN0YsQ0FBQztRQUVGLElBQUksQ0FBQyxXQUFXLEdBQUcsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUV2RSxvQ0FBb0M7UUFDcEMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN6QyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFnQixlQUFlLENBQUMsQ0FBQztRQUNuRSxNQUFNLGFBQWEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNqQyxLQUFLLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFFakMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLFNBQVMsQ0FBQztRQUMzQyxNQUFNLENBQUMsSUFBSSxDQUFDLGtEQUFrRCxXQUFXLDJCQUEyQixJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztJQUMzSCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksS0FBSyxDQUFDLHFCQUFxQjtRQUNoQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFlLGNBQWMsQ0FBQyxDQUFDO1FBRXpELG1GQUFtRjtRQUNuRixnRkFBZ0Y7UUFDaEYsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0NBQWdDLElBQUksR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3BGLElBQUksU0FBUyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2xCLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0NBQWtDLFNBQVMsSUFBSSxDQUFDLENBQUM7WUFDN0QsTUFBTSxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUMvRCxDQUFDO1FBRUQsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEMsTUFBTSxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFdkMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQztRQUVsQyxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDakMsTUFBTSxDQUFDLElBQUksQ0FDVCx5Q0FBeUMsTUFBTSxDQUFDLFVBQVUsS0FBSztZQUMvRCxtQkFBbUIsTUFBTSxDQUFDLE9BQU8saUJBQWlCLE1BQU0sQ0FBQyxjQUFjLEtBQUssQ0FDN0UsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxLQUFLLENBQUMsaUJBQWlCLENBQUMsS0FBb0I7UUFDakQsTUFBTSxJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekMsTUFBTSxJQUFJLENBQUMseUJBQXlCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUMsTUFBTSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUNsQyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuQyxNQUFNLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QyxNQUFNLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QyxNQUFNLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QyxNQUFNLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksS0FBSyxDQUFDLG9CQUFvQixDQUFDLEtBQW9CO1FBQ3BELGlGQUFpRjtRQUNqRixxRkFBcUY7UUFDckYsSUFBSSxDQUFDO1lBQ0gsTUFBTSxFQUFFLG1CQUFtQixFQUFFLEdBQUcsTUFBTSxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQztZQUN4RSxNQUFNLG1CQUFtQixFQUFFLENBQUM7UUFDOUIsQ0FBQztRQUFDLE1BQU0sQ0FBQyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7UUFFNUMsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckMsTUFBTSxJQUFJLENBQUMsd0JBQXdCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVPLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxLQUFvQjtRQUN2RCxLQUFLLEVBQUUsVUFBVSxDQUFDLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQztZQUNILE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQWdCLGVBQWUsQ0FBQyxDQUFDO1lBQ25FLE1BQU0sTUFBTSxHQUFHLGFBQWEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUV6QyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQzVCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQWdCLGVBQWUsQ0FBQyxDQUFDO2dCQUNuRSxNQUFNLGNBQWMsR0FBRyxNQUFNLGFBQWEsQ0FBQywrQkFBK0IsRUFBRSxDQUFDO2dCQUU3RSxJQUFJLGNBQWMsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUNyQyxNQUFNLENBQUMsSUFBSSxDQUNULHdDQUF3QyxjQUFjLENBQUMsTUFBTSxDQUFDLE1BQU0sWUFBWSxFQUNoRixjQUFjLENBQUMsTUFBTSxDQUN0QixDQUFDO2dCQUNKLENBQUM7Z0JBRUQsTUFBTSxDQUFDLElBQUksQ0FDVCwyQkFBMkIsY0FBYyxDQUFDLE1BQU0sWUFBWTtvQkFDNUQsS0FBSyxjQUFjLENBQUMsV0FBVyxhQUFhLGNBQWMsQ0FBQyxPQUFPLFVBQVUsQ0FDN0UsQ0FBQztZQUNKLENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLENBQUMsS0FBSyxDQUFDLDBEQUEwRCxDQUFDLENBQUM7WUFDM0UsQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxDQUFDLEtBQUssQ0FBQyxzQ0FBc0MsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM5RCxDQUFDO1FBQ0QsS0FBSyxFQUFFLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFTyxLQUFLLENBQUMseUJBQXlCLENBQUMsS0FBb0I7UUFDMUQsS0FBSyxFQUFFLFVBQVUsQ0FBQyxvQkFBb0IsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUM7WUFDSCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFrQixpQkFBaUIsQ0FBQyxDQUFDO1lBQ3pFLE1BQU0sZUFBZSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBRW5DLElBQUksZUFBZSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUM7Z0JBQ2hDLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ2pELENBQUM7UUFDSCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0RBQWtELEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDekUsQ0FBQztRQUNELEtBQUssRUFBRSxRQUFRLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRU8sS0FBSyxDQUFDLG9CQUFvQjtRQUNoQyxJQUFJLENBQUM7WUFDSCxNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQXNCLHFCQUFxQixDQUFDLENBQUM7WUFDckYsTUFBTSxtQkFBbUIsQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUM3QyxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sQ0FBQyxLQUFLLENBQUMsb0NBQW9DLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUQsQ0FBQztJQUNILENBQUM7SUFFTyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsS0FBb0I7UUFDakQsS0FBSyxFQUFFLFVBQVUsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDO1lBQ0gsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBYSxZQUFZLENBQUMsQ0FBQztZQUMxRCxNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ25ELElBQUksQ0FBQyxRQUFRLENBQUMsa0JBQWtCLEVBQUUsR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDdkQsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixNQUFNLENBQUMsSUFBSSxDQUFDLHVDQUF1QyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzlELENBQUM7UUFDRCxLQUFLLEVBQUUsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFTyxLQUFLLENBQUMseUJBQXlCLENBQUMsS0FBb0I7UUFDMUQsS0FBSyxFQUFFLFVBQVUsQ0FBQyxvQkFBb0IsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUM7WUFDSCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFpQixnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3RFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUMzQyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdkIsTUFBTSxDQUFDLElBQUksQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO1FBQ3hELENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxDQUFDLElBQUksQ0FBQyxxQ0FBcUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1RCxDQUFDO1FBQ0QsS0FBSyxFQUFFLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxzRUFBc0U7SUFDOUQsVUFBVSxDQUFJLElBQVk7UUFDaEMsSUFBSSxDQUFDO1lBQUMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFJLElBQUksQ0FBQyxDQUFDO1FBQUMsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUFDLE9BQU8sU0FBUyxDQUFDO1FBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQsbURBQW1EO0lBQzNDLGlCQUFpQixDQUN2QixTQUFxRCxFQUNyRCxXQUEwQztRQUUxQyxJQUFJLFNBQVMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUMzQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFhLFlBQVksQ0FBQyxDQUFDO1lBQzFELFVBQVUsQ0FBQyxZQUFZLENBQUMsSUFBSSxhQUFhLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7UUFDckUsQ0FBQztRQUNELElBQUksU0FBUyxDQUFDLGlCQUFpQixJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQy9DLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQWlCLGdCQUFnQixDQUFDLENBQUM7WUFDekUsSUFBSSxjQUFjLEVBQUUsQ0FBQztnQkFDbkIsY0FBYyxDQUFDLFlBQVksQ0FBQyxJQUFJLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7WUFDbEYsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRU8sS0FBSyxDQUFDLGtCQUFrQixDQUFDLEtBQW9CO1FBQ25ELEtBQUssRUFBRSxVQUFVLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQztZQUNILElBQUksQ0FBQyxHQUFHLENBQUMscUJBQXFCO2dCQUFFLE9BQU87WUFFdkMsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBa0IsaUJBQWlCLENBQUMsQ0FBQztZQUN6RSxNQUFNLFNBQVMsR0FBRyxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDakQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFtQixrQkFBa0IsQ0FBQyxDQUFDO1lBQzVFLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQWdCLGVBQWUsQ0FBQyxDQUFDO1lBQ2hFLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQW9CLG1CQUFtQixDQUFDLENBQUM7WUFDNUUsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBZ0IsZUFBZSxDQUFDLENBQUM7WUFDdEUsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBYSxZQUFZLENBQUMsQ0FBQztZQUUxRCxnRUFBZ0U7WUFDaEUsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBZ0IsZUFBZSxDQUFDLENBQUM7WUFDbkUsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLFVBQVUsQ0FBUyxjQUFjLENBQUMsQ0FBQztZQUVwRSxNQUFNLEVBQUUsbUJBQW1CLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO1lBQ2pGLE1BQU0sTUFBTSxHQUFHLE1BQU0sbUJBQW1CLENBQUM7Z0JBQ3ZDLFNBQVM7Z0JBQ1QsWUFBWSxFQUFFLGdCQUFnQixDQUFDLFVBQVUsRUFBRTtnQkFDM0MsVUFBVTtnQkFDVixXQUFXO2dCQUNYLGFBQWE7Z0JBQ2IsZUFBZSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztnQkFDeEQsaUJBQWlCLEVBQUUsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQztnQkFDakYsSUFBSSxFQUFFLFVBQVU7YUFDakIsQ0FBQyxDQUFDO1lBRUgsTUFBTSxDQUFDLElBQUksQ0FBQyxzQ0FBc0MsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDbkUsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixNQUFNLENBQUMsSUFBSSxDQUFDLHlDQUF5QyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2hFLENBQUM7UUFDRCxLQUFLLEVBQUUsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFTyxLQUFLLENBQUMsd0JBQXdCLENBQUMsS0FBb0I7UUFDekQsS0FBSyxFQUFFLFVBQVUsQ0FBQyxtQkFBbUIsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUM7WUFDSCxJQUFJLENBQUMsR0FBRyxDQUFDLDJCQUEyQixFQUFFLENBQUM7Z0JBQ3JDLE1BQU0sQ0FBQyxLQUFLLENBQUMsOEVBQThFLENBQUMsQ0FBQztnQkFDN0YsT0FBTztZQUNULENBQUM7WUFFRCxJQUFJLENBQUMsR0FBRyxDQUFDLHFCQUFxQixFQUFFLENBQUM7Z0JBQy9CLE1BQU0sQ0FBQyxLQUFLLENBQUMsaUVBQWlFLENBQUMsQ0FBQztnQkFDaEYsT0FBTztZQUNULENBQUM7WUFFRCxvRUFBb0U7WUFDcEUsb0VBQW9FO1lBQ3BFLHVFQUF1RTtZQUN2RSxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsMEJBQTBCLENBQUM7WUFDNUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBRTNCLE1BQU0sRUFBRSxhQUFhLEVBQUUsbUJBQW1CLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO1lBQ2xHLE1BQU0sQ0FBQyxLQUFLLENBQUMsNERBQTRELElBQUksRUFBRSxDQUFDLENBQUM7WUFDakYsTUFBTSxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDMUIsbUJBQW1CLEVBQUUsQ0FBQztZQUN0QixNQUFNLENBQUMsS0FBSyxDQUFDLDhDQUE4QyxDQUFDLENBQUM7WUFFN0QsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLE9BQU8sQ0FBQztZQUN2QyxNQUFNLENBQUMsSUFBSSxDQUFDLHlEQUF5RCxJQUFJLEtBQUssU0FBUyxLQUFLLENBQUMsQ0FBQztRQUNoRyxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sQ0FBQyxJQUFJLENBQUMsK0NBQStDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDdEUsQ0FBQztRQUNELEtBQUssRUFBRSxRQUFRLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRU8sS0FBSyxDQUFDLHNCQUFzQixDQUFDLEtBQW9CO1FBQ3ZELEtBQUssRUFBRSxVQUFVLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDO1lBQ0gsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFxQixvQkFBb0IsQ0FBQyxDQUFDO1lBQ2xGLE1BQU0sa0JBQWtCLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDeEMsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixNQUFNLENBQUMsSUFBSSxDQUFDLHVEQUF1RCxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzlFLENBQUM7UUFDRCxLQUFLLEVBQUUsUUFBUSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVPLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxLQUFvQjtRQUMxRCxLQUFLLEVBQUUsVUFBVSxDQUFDLG9CQUFvQixFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQztZQUNILE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBcUIsQ0FBQztZQUM5RSxNQUFNLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3BDLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztRQUNoRCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sQ0FBQyxJQUFJLENBQUMsdURBQXVELEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDOUUsQ0FBQztRQUNELEtBQUssRUFBRSxRQUFRLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRU8sS0FBSyxDQUFDLDJCQUEyQixDQUFDLEtBQW9CO1FBQzVELEtBQUssRUFBRSxVQUFVLENBQUMsc0JBQXNCLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDO1lBQ0gsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFRLENBQUM7WUFDdkUsbUJBQW1CLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDNUIsTUFBTSxDQUFDLElBQUksQ0FBQyxrREFBa0QsQ0FBQyxDQUFDO1FBQ2xFLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxDQUFDLElBQUksQ0FBQyxnREFBZ0QsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN2RSxDQUFDO1FBQ0QsS0FBSyxFQUFFLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ssS0FBSyxDQUFDLGtCQUFrQixDQUFDLEtBQXNCO1FBQ3JELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQWlCLGdCQUFnQixDQUFDLENBQUM7UUFDdEUsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBZSxjQUFjLENBQUMsQ0FBQztRQUNoRSxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFlLGNBQWMsQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQWdCLGVBQWUsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQWtCLGlCQUFpQixDQUFDLENBQUM7UUFFekUsSUFBSSxhQUFhLEdBQUcsQ0FBQyxDQUFDO1FBQ3RCLElBQUksWUFBWSxHQUFHLENBQUMsQ0FBQztRQUVyQixvRUFBb0U7UUFDcEUsbUZBQW1GO1FBQ25GLEtBQUssTUFBTSxVQUFVLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQ3pELElBQUksQ0FBQztnQkFDSCxNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsUUFBUSxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUM7Z0JBQzFELE1BQU0sTUFBTSxHQUFHLE1BQU0sY0FBYyxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDaEUsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQ25CLGFBQWEsRUFBRSxDQUFDO2dCQUNsQixDQUFDO3FCQUFNLENBQUM7b0JBQ04sTUFBTSxDQUFDLEtBQUssQ0FBQyw4Q0FBOEMsVUFBVSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7b0JBQy9FLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUN4RCxZQUFZLEVBQUUsQ0FBQztnQkFDakIsQ0FBQztZQUNILENBQUM7WUFBQyxNQUFNLENBQUM7Z0JBQ1AsTUFBTSxDQUFDLEtBQUssQ0FBQyw4Q0FBOEMsVUFBVSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7Z0JBQy9FLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN4RCxZQUFZLEVBQUUsQ0FBQztZQUNqQixDQUFDO1FBQ0gsQ0FBQztRQUVELGlCQUFpQjtRQUNqQixtRkFBbUY7UUFDbkYsS0FBSyxNQUFNLFVBQVUsSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDdkQsSUFBSSxDQUFDO2dCQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sWUFBWSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2pFLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUNuQixhQUFhLEVBQUUsQ0FBQztnQkFDbEIsQ0FBQztxQkFBTSxDQUFDO29CQUNOLE1BQU0sQ0FBQyxLQUFLLENBQUMsNENBQTRDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO29CQUM3RSxLQUFLLENBQUMscUJBQXFCLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDdEQsWUFBWSxFQUFFLENBQUM7Z0JBQ2pCLENBQUM7WUFDSCxDQUFDO1lBQUMsTUFBTSxDQUFDO2dCQUNQLE1BQU0sQ0FBQyxLQUFLLENBQUMsNENBQTRDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO2dCQUM3RSxLQUFLLENBQUMscUJBQXFCLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDdEQsWUFBWSxFQUFFLENBQUM7WUFDakIsQ0FBQztRQUNILENBQUM7UUFFRCxpQkFBaUI7UUFDakIsS0FBSyxNQUFNLFVBQVUsSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDdkQsSUFBSSxDQUFDO2dCQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sWUFBWSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2pFLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUNuQixhQUFhLEVBQUUsQ0FBQztnQkFDbEIsQ0FBQztxQkFBTSxDQUFDO29CQUNOLE1BQU0sQ0FBQyxLQUFLLENBQUMsNENBQTRDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO29CQUM3RSxLQUFLLENBQUMscUJBQXFCLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDdEQsWUFBWSxFQUFFLENBQUM7Z0JBQ2pCLENBQUM7WUFDSCxDQUFDO1lBQUMsTUFBTSxDQUFDO2dCQUNQLE1BQU0sQ0FBQyxLQUFLLENBQUMsNENBQTRDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO2dCQUM3RSxLQUFLLENBQUMscUJBQXFCLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDdEQsWUFBWSxFQUFFLENBQUM7WUFDakIsQ0FBQztRQUNILENBQUM7UUFFRCxvREFBb0Q7UUFDcEQsTUFBTSxjQUFjLEdBQUcsTUFBTSxhQUFhLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUMvRCxNQUFNLGlCQUFpQixHQUFHLElBQUksR0FBRyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDNUUsS0FBSyxNQUFNLFVBQVUsSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDeEQsSUFBSSxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQzNDLE1BQU0sQ0FBQyxLQUFLLENBQUMsNkJBQTZCLFVBQVUsQ0FBQyxJQUFJLDBDQUEwQyxDQUFDLENBQUM7Z0JBQ3JHLFNBQVM7WUFDWCxDQUFDO1lBQ0QsSUFBSSxDQUFDO2dCQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sYUFBYSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ25FLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUNuQixhQUFhLEVBQUUsQ0FBQztnQkFDbEIsQ0FBQztxQkFBTSxDQUFDO29CQUNOLE1BQU0sQ0FBQyxLQUFLLENBQUMsNkNBQTZDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO29CQUM5RSxLQUFLLENBQUMscUJBQXFCLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDdkQsWUFBWSxFQUFFLENBQUM7Z0JBQ2pCLENBQUM7WUFDSCxDQUFDO1lBQUMsTUFBTSxDQUFDO2dCQUNQLE1BQU0sQ0FBQyxLQUFLLENBQUMsNkNBQTZDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO2dCQUM5RSxLQUFLLENBQUMscUJBQXFCLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDdkQsWUFBWSxFQUFFLENBQUM7WUFDakIsQ0FBQztRQUNILENBQUM7UUFFRCxvQkFBb0I7UUFDcEIsS0FBSyxNQUFNLFVBQVUsSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDMUQsSUFBSSxDQUFDO2dCQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sZUFBZSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDdkUsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQ25CLGFBQWEsRUFBRSxDQUFDO2dCQUNsQixDQUFDO3FCQUFNLENBQUM7b0JBQ04sTUFBTSxDQUFDLEtBQUssQ0FBQywrQ0FBK0MsVUFBVSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7b0JBQ2hGLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUN6RCxZQUFZLEVBQUUsQ0FBQztnQkFDakIsQ0FBQztZQUNILENBQUM7WUFBQyxNQUFNLENBQUM7Z0JBQ1AsTUFBTSxDQUFDLEtBQUssQ0FBQywrQ0FBK0MsVUFBVSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7Z0JBQ2hGLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN6RCxZQUFZLEVBQUUsQ0FBQztZQUNqQixDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksYUFBYSxHQUFHLENBQUMsSUFBSSxZQUFZLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDMUMsTUFBTSxDQUFDLElBQUksQ0FDVCw4QkFBOEIsYUFBYSx3QkFBd0IsWUFBWSx1QkFBdUIsS0FBSyxDQUFDLFlBQVksRUFBRSxHQUFHLENBQzlILENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxLQUFLLENBQUMsaUJBQWlCO1FBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDdEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxtRUFBbUUsQ0FBQyxDQUFDO1FBQ3ZGLENBQUM7UUFFRCxhQUFhLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUUzQyxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQTBCLHlCQUF5QixDQUFDLENBQUM7UUFDMUYsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBaUIsZ0JBQWdCLENBQUMsQ0FBQztRQUN0RSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUF3Qix1QkFBdUIsQ0FBQyxDQUFDO1FBQ2pGLE1BQU0sZUFBZSxHQUFHLElBQUksZUFBZSxDQUFDLEdBQUcsRUFBRSxDQUFDLGNBQWMsQ0FBQyw0QkFBNEIsRUFBRSxDQUFDLENBQUM7UUFDakcsTUFBTSxlQUFlLEdBQUcsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUMsNEJBQTRCLEVBQUUsQ0FBQyxDQUFDO1FBRW5ILDJDQUEyQztRQUMzQyxNQUFNLHFCQUFxQixHQUFHO1lBQzVCLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxRQUFRLElBQUksSUFBSTtZQUM5RCxHQUFHLEVBQUUsQ0FBQyxLQUFvQixFQUFFLEVBQUU7Z0JBQzVCLElBQUksS0FBSyxFQUFFLENBQUM7b0JBQ1YsMkVBQTJFO29CQUMzRSw2RUFBNkU7b0JBQzdFLDBFQUEwRTtvQkFDMUUsY0FBYyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FDaEQsTUFBTSxDQUFDLEtBQUssQ0FBQyw4Q0FBOEMsS0FBSyxrQ0FBa0MsRUFBRSxHQUFHLENBQUMsQ0FDekcsQ0FBQztnQkFDSixDQUFDO3FCQUFNLENBQUM7b0JBQ04sY0FBYyxDQUFDLGlCQUFpQixFQUFFLENBQUM7Z0JBQ3JDLENBQUM7WUFDSCxDQUFDO1NBQ0YsQ0FBQztRQUVGLE1BQU0sY0FBYyxHQUFHLElBQUksY0FBYyxDQUN2QyxjQUFjLEVBQ2QsZUFBZSxFQUNmLGVBQWUsRUFDZixXQUFXLEVBQ1gsZ0JBQWdCLEVBQ2hCLHFCQUFxQixDQUN0QixDQUFDO1FBRUYsTUFBTSxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUM7UUFFOUIsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLGtCQUFrQixDQUMvQyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxFQUM1QixJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEVBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsRUFDaEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsRUFDNUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsRUFDN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxFQUMvQixjQUFjLEVBQ2QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxFQUNoQyxXQUFXLEVBQ1gsZ0JBQWdCLEVBQ2hCLElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUMsRUFDckMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxFQUNuQyxJQUFJLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLEVBQ2xDLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsRUFDL0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsRUFDN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxDQUNwQyxDQUFDO1FBQ0Ysc0RBQXNEO1FBQ3RELElBQUksQ0FBQyxRQUFRLENBQUMsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUU5RCxrRUFBa0U7UUFDbEUsZ0RBQWdEO1FBRWhELE1BQU0saUJBQWlCLEdBQUcsSUFBSSxpQkFBaUIsQ0FDN0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxFQUNqQyxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLEVBQ2hDLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsRUFDOUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxFQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEVBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsRUFDaEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFDeEIsY0FBYyxFQUFFLGtDQUFrQztRQUNsRCxJQUFJLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLEVBQ3JDLElBQUksQ0FBQyxPQUFPLENBQUMscUJBQXFCLENBQUMsRUFDbkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxFQUNyQyxJQUFJLENBQUMsT0FBTyxDQUFDLHlCQUF5QixDQUFDLEVBQ3ZDLElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUMsQ0FDdEMsQ0FBQztRQUVGLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxnQkFBZ0IsQ0FDM0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxFQUNqQyxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLEVBQ2hDLElBQUksQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsRUFDcEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxFQUNyQyxJQUFJLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDLEVBQ25DLFdBQVcsRUFDWCxnQkFBZ0IsRUFDaEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsRUFDN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxFQUNyQyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxFQUM1QixJQUFJLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLENBQ3JDLENBQUM7UUFFRixNQUFNLGlCQUFpQixHQUFHLElBQUksaUJBQWlCLENBQzdDLElBQUksQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsRUFDakMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsRUFDN0IsV0FBVyxFQUNYLGdCQUFnQixFQUNoQixJQUFJLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLENBQ3RDLENBQUM7UUFFRixNQUFNLG9CQUFvQixHQUFHLElBQUksb0JBQW9CLENBQ25ELGNBQWMsRUFDZCxXQUFXLEVBQ1gsZ0JBQWdCLENBQ2pCLENBQUM7UUFFRixNQUFNLGVBQWUsR0FBRyxJQUFJLGVBQWUsQ0FDekMsY0FBYyxFQUNkLFdBQVcsRUFDWCxnQkFBZ0IsQ0FDakIsQ0FBQztRQUVGLE1BQU0sYUFBYSxHQUFHLElBQUksYUFBYSxDQUNyQyxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxFQUM3QixXQUFXLEVBQ1gsZ0JBQWdCLENBQ2pCLENBQUM7UUFDRixNQUFNLFdBQVcsR0FBRyxJQUFJLFdBQVcsQ0FDakMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxFQUNwQyxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxFQUM3QixnQkFBZ0IsQ0FDakIsQ0FBQztRQUVGLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxvQkFBb0IsQ0FDbkQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxFQUNwQyxnQkFBZ0IsQ0FDakIsQ0FBQztRQUVGLHVEQUF1RDtRQUN2RCx5R0FBeUc7UUFDekcsTUFBTSxVQUFVLEdBQUcsSUFBSSxVQUFVLENBQUMsU0FBUyxFQUFFO1lBQzNDLGtCQUFrQixFQUFFLElBQUk7WUFDeEIsNkJBQTZCLEVBQUUsSUFBSTtZQUNuQywyQkFBMkIsRUFBRSxHQUFHLENBQUMsNkNBQTZDO1NBQy9FLENBQUMsQ0FBQztRQUVILDRGQUE0RjtRQUM1RixtRUFBbUU7UUFDbkUsMERBQTBEO1FBQzFELDREQUE0RDtRQUM1RCx1RkFBdUY7UUFDdkYsd0ZBQXdGO1FBQ3hGLE1BQU0sV0FBVyxHQUFvQjtZQUNuQyxXQUFXLEVBQUUsa0JBQWtCO1lBQy9CLGFBQWEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQztZQUM1QyxZQUFZLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUM7WUFDMUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQztZQUNsRCxtQkFBbUIsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDO1lBQ3hELDBDQUEwQztZQUMxQyxpQkFBaUI7WUFDakIsZ0JBQWdCO1lBQ2hCLFdBQVcsRUFBRSxpQkFBaUI7WUFDOUIsYUFBYTtZQUNiLG9CQUFvQjtZQUNwQixjQUFjO1lBQ2QsV0FBVztZQUNYLGdCQUFnQixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUM7WUFDbEQsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQztZQUNwRCxVQUFVLEVBQUcsMENBQTBDO1lBQ3ZELGtCQUFrQixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUM7WUFDdEQsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxFQUFHLGlDQUFpQztZQUN4RixvQkFBb0IsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLEVBQUcsa0NBQWtDO1lBQy9GLFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFnQixlQUFlLENBQUMsRUFBRyxzQ0FBc0M7WUFDakcsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBcUIsb0JBQW9CLENBQUM7WUFDMUUsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBMEIseUJBQXlCLENBQUM7WUFDekYsd0JBQXdCLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBMkIsMEJBQTBCLENBQUM7U0FDN0YsQ0FBQztRQUNGLE1BQU0sQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLGFBQWEsRUFBRTtZQUNoRCxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO2dCQUFDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBb0IsbUJBQW1CLENBQUMsQ0FBQztZQUFDLENBQUM7WUFBQyxNQUFNLENBQUM7Z0JBQUMsT0FBTyxTQUFTLENBQUM7WUFBQyxDQUFDLENBQUMsQ0FBQztZQUMvRyxZQUFZLEVBQUUsSUFBSTtZQUNsQixVQUFVLEVBQUUsSUFBSTtTQUNqQixDQUFDLENBQUM7UUFDSCxNQUFNLGFBQWEsR0FBRyxJQUFJLGFBQWEsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBaUIsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO1FBRXJHLHdEQUF3RDtRQUN4RCxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxhQUFhLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN6RSxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxHQUFHLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUVuRSxPQUFPO1lBQ0wsY0FBYztZQUNkLGtCQUFrQjtZQUNsQixpQkFBaUI7WUFDakIsZ0JBQWdCO1lBQ2hCLGlCQUFpQjtZQUNqQixvQkFBb0I7WUFDcEIsZUFBZTtZQUNmLGFBQWE7WUFDYixXQUFXO1lBQ1gsWUFBWSxFQUFFLFNBQW9DLEVBQUUsMENBQTBDO1lBQzlGLG9CQUFvQjtZQUNwQixhQUFhO1NBQ2QsQ0FBQztJQUNKLENBQUM7SUFFRDs7O09BR0c7SUFDSSxLQUFLLENBQUMsY0FBYyxDQUFDLE1BQWM7UUFDeEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUU5QyxNQUFNLFlBQVksR0FBRyxJQUFJLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUU5QywwREFBMEQ7UUFDMUQsK0RBQStEO1FBQy9ELDJFQUEyRTtRQUMzRSx5RUFBeUU7UUFDekUsTUFBTSxhQUFhLEdBQUcsR0FBRyxDQUFDLGtCQUFrQixDQUFDO1FBQzdDLE1BQU0sQ0FBQyxJQUFJLENBQUMsdUJBQXVCLGFBQWEsRUFBRSxDQUFDLENBQUM7UUFFcEQsSUFBSSxhQUFhLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDakMsK0NBQStDO1lBQy9DLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDekQsWUFBWSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQzdELFlBQVksQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUMvRCxZQUFZLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDN0QsWUFBWSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ3pELFlBQVksQ0FBQyxtQkFBbUIsQ0FBQztnQkFDL0IscUJBQXFCLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUNqQyxNQUFNLENBQUMsYUFBYSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQztnQkFDckQsbUJBQW1CLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUMvQixNQUFNLENBQUMsV0FBVyxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQzthQUNsRCxDQUFDLENBQUM7WUFDSCxZQUFZLENBQUMsMEJBQTBCLENBQ3JDLE1BQU0sQ0FBQyxvQkFBb0IsRUFDM0IsSUFBSSxDQUFDLE9BQU8sQ0FBcUIsb0JBQW9CLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FDbkUsQ0FBQztZQUNGLFlBQVksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQztRQUN4RSxDQUFDO2FBQU0sQ0FBQztZQUNOLDRDQUE0QztZQUM1QyxZQUFZLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3pELENBQUM7UUFFRCxnREFBZ0Q7UUFDaEQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRSxhQUFhLEVBQUUsTUFBTSxDQUFDLGFBQWEsRUFBRTtZQUN4RSxjQUFjLEVBQUUsTUFBTSxDQUFDLGNBQWM7WUFDckMsa0JBQWtCLEVBQUUsTUFBTSxDQUFDLGtCQUFrQjtZQUM3QyxpQkFBaUIsRUFBRSxNQUFNLENBQUMsaUJBQWlCO1lBQzNDLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxnQkFBZ0I7WUFDekMsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLGlCQUFpQjtZQUMzQyxhQUFhLEVBQUUsTUFBTSxDQUFDLGFBQWE7WUFDbkMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXO1lBQy9CLG9CQUFvQixFQUFFLE1BQU0sQ0FBQyxvQkFBb0I7U0FDbEQsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLE9BQU8sQ0FBYyxhQUFhLENBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUV0RyxPQUFPO1lBQ0wsR0FBRyxNQUFNO1lBQ1QsWUFBWTtTQUNiLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNLLGlCQUFpQixDQUN2QixZQUEwQixFQUMxQixhQUFvQyxFQUNwQyxhQUE0QixFQUM1QixnQkFTQztRQUVELE1BQU0sYUFBYSxHQUFHLFlBQVksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzFELE1BQU0sZ0JBQWdCLEdBQUcsWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRXJELG1EQUFtRDtRQUNuRCxJQUFJLGlCQUF5QixDQUFDO1FBQzlCLElBQUksb0JBQTRCLENBQUM7UUFFakMsSUFBSSxhQUFhLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDakMsc0RBQXNEO1lBQ3RELE1BQU0sWUFBWSxHQUFHLElBQUksWUFBWSxDQUFDLEVBQVksQ0FBQyxDQUFDO1lBQ3BELFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNoRCxpQkFBaUIsR0FBRyxZQUFZLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUN4RCxvQkFBb0IsR0FBRyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDckQsQ0FBQzthQUFNLENBQUM7WUFDTixzREFBc0Q7WUFDdEQsTUFBTSxZQUFZLEdBQUcsSUFBSSxZQUFZLENBQUMsRUFBWSxDQUFDLENBQUM7WUFDcEQsWUFBWSxDQUFDLG9CQUFvQixDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ25FLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQ3ZFLFlBQVksQ0FBQyx1QkFBdUIsQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ3pFLFlBQVksQ0FBQyxzQkFBc0IsQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3ZFLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ25FLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQztnQkFDL0IscUJBQXFCLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUNqQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDO2dCQUMvRCxtQkFBbUIsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQy9CLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUM7YUFDNUQsQ0FBQyxDQUFDO1lBQ0gsWUFBWSxDQUFDLDBCQUEwQixDQUNyQyxnQkFBZ0IsQ0FBQyxvQkFBb0IsRUFDckMsSUFBSSxDQUFDLE9BQU8sQ0FBcUIsb0JBQW9CLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FDbkUsQ0FBQztZQUNGLFlBQVksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQztZQUN0RSxpQkFBaUIsR0FBRyxZQUFZLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUN4RCxvQkFBb0IsR0FBRyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDckQsQ0FBQztRQUVELDJEQUEyRDtRQUMzRCxNQUFNLFNBQVMsR0FBRyxpQkFBaUIsR0FBRyxhQUFhLENBQUM7UUFDcEQsTUFBTSxjQUFjLEdBQUcsaUJBQWlCLEdBQUcsQ0FBQztZQUMxQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxpQkFBaUIsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDcEQsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUVSLHFCQUFxQjtRQUNyQixNQUFNLENBQUMsSUFBSSxDQUNULCtCQUErQixnQkFBZ0IsWUFBWSxhQUFhLENBQUMsY0FBYyxFQUFFLFNBQVMsQ0FDbkcsQ0FBQztRQUVGLElBQUksYUFBYSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQy9CLHNDQUFzQztZQUN0QyxNQUFNLENBQUMsSUFBSSxDQUNULGtCQUFrQixTQUFTLENBQUMsY0FBYyxFQUFFLGtCQUFrQixjQUFjLHdCQUF3QixvQkFBb0IsWUFBWSxpQkFBaUIsQ0FBQyxjQUFjLEVBQUUsVUFBVSxDQUNqTCxDQUFDO1FBQ0osQ0FBQzthQUFNLENBQUM7WUFDTixnREFBZ0Q7WUFDaEQsTUFBTSxDQUFDLElBQUksQ0FDVCxzQ0FBc0Msb0JBQW9CLFlBQVksaUJBQWlCLENBQUMsY0FBYyxFQUFFLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUM1TCxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSyxxQkFBcUIsQ0FBQyxjQUE4QjtRQUMxRCxnQ0FBZ0M7UUFDaEMsSUFBSSxDQUFDO1lBQ0gsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBOEQsb0JBQW9CLENBQUMsQ0FBQztZQUNoSCxjQUFjLENBQUMsaUJBQWlCLENBQUMsSUFBSSwyQkFBMkIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQzdFLENBQUM7UUFBQyxNQUFNLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBRWhDLDhEQUE4RDtRQUM5RCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztRQUNqRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdEIsY0FBYyxDQUFDLGlCQUFpQixDQUFDLElBQUksaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNsRSxDQUFDO1FBRUQsMkJBQTJCO1FBQzNCLElBQUksQ0FBQztZQUNILGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLHdCQUF3QixFQUFFLENBQUMsQ0FBQztRQUNuRSxDQUFDO1FBQUMsTUFBTSxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUUvQiwrQkFBK0I7UUFDL0IsSUFBSSxDQUFDO1lBQ0gsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBeUUsbUJBQW1CLENBQUMsQ0FBQztZQUM1SCxjQUFjLENBQUMsaUJBQWlCLENBQUMsSUFBSSwwQkFBMEIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQzlFLENBQUM7UUFBQyxNQUFNLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBRWhDLDZCQUE2QjtRQUM3QixJQUFJLENBQUM7WUFDSCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUEyRCxpQkFBaUIsQ0FBQyxDQUFDO1lBQzlHLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLHdCQUF3QixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDOUUsQ0FBQztRQUFDLE1BQU0sQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFFaEMsa0NBQWtDO1FBQ2xDLElBQUksQ0FBQztZQUNILGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLCtCQUErQixFQUFFLENBQUMsQ0FBQztRQUMxRSxDQUFDO1FBQUMsTUFBTSxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUUvQixpRkFBaUY7UUFDakYsSUFBSSxDQUFDO1lBQ0gsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBc0Usc0JBQXNCLENBQUMsQ0FBQztZQUNoSSxzRUFBc0U7WUFDdEUsSUFBSSx1QkFBdUIsSUFBSSxhQUFhLEVBQUUsQ0FBQztnQkFDN0MsTUFBTSxPQUFPLEdBQUksYUFBcUIsQ0FBQyxxQkFBcUIsQ0FBQztnQkFDN0QsSUFBSSxPQUFPLEVBQUUsQ0FBQztvQkFDWixjQUFjLENBQUMsaUJBQWlCLENBQUMsSUFBSSw4QkFBOEIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2dCQUNoRixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFBQyxNQUFNLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBRWhDLGtDQUFrQztRQUNsQyxJQUFJLENBQUM7WUFDSCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFzRSxzQkFBc0IsQ0FBQyxDQUFDO1lBQzlILGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLDZCQUE2QixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDbkYsQ0FBQztRQUFDLE1BQU0sQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFFaEMscUNBQXFDO1FBQ3JDLElBQUksQ0FBQztZQUNILE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQTBCLHlCQUF5QixDQUFDLENBQUM7WUFDbkYsY0FBYyxDQUFDLGlCQUFpQixDQUFDLElBQUkseUJBQXlCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUM3RSxDQUFDO1FBQUMsTUFBTSxDQUFDLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUVoQyxzQ0FBc0M7UUFDdEMsSUFBSSxDQUFDO1lBQ0gsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBMkIsMEJBQTBCLENBQUMsQ0FBQztZQUNyRixjQUFjLENBQUMsaUJBQWlCLENBQUMsSUFBSSwwQkFBMEIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQzlFLENBQUM7UUFBQyxNQUFNLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFTywwQkFBMEI7UUFDaEMsTUFBTSxNQUFNLEdBQXdGLEVBQUUsQ0FBQztRQUN2RyxJQUFJLENBQUM7WUFDSCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUE0RCxVQUFVLENBQUMsQ0FBQztZQUNyRyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBZSxFQUFFLENBQUMsQ0FBQztRQUMvRCxDQUFDO1FBQUMsTUFBTSxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUUvQixNQUFNLFlBQVksR0FBRztZQUNuQixnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsY0FBYztZQUNoRCxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCO1NBQzdDLENBQUM7UUFDWCxLQUFLLE1BQU0sSUFBSSxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQztnQkFDSCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUEyRSxJQUFJLENBQUMsQ0FBQztnQkFDekcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7WUFDekMsQ0FBQztZQUFDLE1BQU0sQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDbEMsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxLQUFLLENBQUMsT0FBTztRQUNsQix1RUFBdUU7UUFDdkUsSUFBSSxDQUFDO1lBQ0gsTUFBTSxFQUFFLGlCQUFpQixFQUFFLEdBQUcsTUFBTSxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUMvRCxpQkFBaUIsRUFBRSxDQUFDO1FBQ3RCLENBQUM7UUFBQyxNQUFNLENBQUMsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBRXhDLHNFQUFzRTtRQUN0RSxJQUFJLENBQUM7WUFDSCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFpQixnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3RFLE1BQU0sY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQy9CLENBQUM7UUFBQyxNQUFNLENBQUMsQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO1FBRXZELCtDQUErQztRQUMvQyxJQUFJLENBQUM7WUFDSCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFpQixrQkFBa0IsQ0FBQyxDQUFDO1lBQ2xFLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQy9CLENBQUM7UUFBQyxNQUFNLENBQUMsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBRXJDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDdEQsTUFBTSxPQUFPLEdBQUcsTUFBTSxPQUFPLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQy9FLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRU8scUJBQXFCO1FBQzNCLE1BQU0sUUFBUSxHQUFvRCxFQUFFLENBQUM7UUFDckUsS0FBSyxNQUFNLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUM1QyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVE7Z0JBQUUsU0FBUztZQUNoQyxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBZSxDQUFDO1lBQ3pDLElBQUksT0FBTyxRQUFRLENBQUMsT0FBTyxLQUFLLFVBQVUsRUFBRSxDQUFDO2dCQUMzQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNyRixDQUFDO2lCQUFNLElBQUksT0FBTyxRQUFRLENBQUMsT0FBTyxLQUFLLFVBQVUsRUFBRSxDQUFDO2dCQUNsRCxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNyRixDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFTyxzQkFBc0IsQ0FDNUIsZ0JBQWlFLEVBQ2pFLE9BQXFDO1FBRXJDLE1BQU0sUUFBUSxHQUFhLEVBQUUsQ0FBQztRQUM5QixLQUFLLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7WUFDaEQsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLFVBQVUsRUFBRSxDQUFDO2dCQUNqQyxNQUFNLFdBQVcsR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQ2pELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQ2hHLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQzNCLE1BQU0sQ0FBQyxJQUFJLENBQUMsOEJBQThCLFdBQVcsR0FBRyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUN2RSxDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN4QixNQUFNLENBQUMsSUFBSSxDQUFDLHFDQUFxQyxRQUFRLENBQUMsTUFBTSxzQkFBc0IsZ0JBQWdCLENBQUMsTUFBTSxXQUFXLENBQUMsQ0FBQztRQUM1SCxDQUFDO0lBQ0gsQ0FBQztJQUVPLEtBQUssQ0FBQyx5QkFBeUI7UUFDckMsSUFBSSxDQUFDO1lBQ0gsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBa0IsaUJBQWlCLENBQUMsQ0FBQztZQUN6RSxNQUFNLFlBQVksR0FBRyxNQUFNLGVBQWUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUMxRCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ2xCLE1BQU0sQ0FBQyxJQUFJLENBQUMsaURBQWlELENBQUMsQ0FBQztnQkFDL0QsTUFBTSxFQUFFLGdCQUFnQixFQUFFLEdBQUcsTUFBTSxNQUFNLENBQUMsbUNBQW1DLENBQUMsQ0FBQztnQkFDL0UsTUFBTSxRQUFRLEdBQUcsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ2hELE1BQU0sZUFBZSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDMUMsTUFBTSxDQUFDLElBQUksQ0FBQyxxQ0FBcUMsUUFBUSxDQUFDLE1BQU0sUUFBUSxDQUFDLENBQUM7WUFDNUUsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE1BQU0sS0FBSyxHQUFHLE1BQU0sZUFBZSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUNwRCxNQUFNLENBQUMsS0FBSyxDQUFDLHVDQUF1QyxLQUFLLENBQUMsU0FBUyxRQUFRLENBQUMsQ0FBQztZQUMvRSxDQUFDO1FBQ0gsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixZQUFZLENBQUMsUUFBUSxDQUFDLDhDQUE4QyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQy9FLENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgb3MgZnJvbSBcIm9zXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBQQUNLQUdFX1ZFUlNJT04sIFBBQ0tBR0VfVkVSU0lPTiBhcyBWRVJTSU9OIH0gZnJvbSBcIi4uL2dlbmVyYXRlZC92ZXJzaW9uLmpzXCI7XG5pbXBvcnQgeyBTZWN1cml0eU1vbml0b3IgfSBmcm9tIFwiLi4vc2VjdXJpdHkvc2VjdXJpdHlNb25pdG9yLmpzXCI7XG5pbXBvcnQgeyBWZXJiVHJpZ2dlck1hbmFnZXIgfSBmcm9tIFwiLi4vcG9ydGZvbGlvL1ZlcmJUcmlnZ2VyTWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgUmVsYXRpb25zaGlwTWFuYWdlciB9IGZyb20gXCIuLi9wb3J0Zm9saW8vUmVsYXRpb25zaGlwTWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgTkxQU2NvcmluZ01hbmFnZXIgfSBmcm9tIFwiLi4vcG9ydGZvbGlvL05MUFNjb3JpbmdNYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBTZXJ2ZXIgfSBmcm9tIFwiQG1vZGVsY29udGV4dHByb3RvY29sL3Nkay9zZXJ2ZXIvaW5kZXguanNcIjtcbmltcG9ydCB7IGxvYWRJbmRpY2F0b3JDb25maWcgfSBmcm9tIFwiLi4vY29uZmlnL2luZGljYXRvci1jb25maWcuanNcIjtcbmltcG9ydCB7IGVudiB9IGZyb20gXCIuLi9jb25maWcvZW52LmpzXCI7XG5pbXBvcnQgeyBBUElDYWNoZSwgQ29sbGVjdGlvbkNhY2hlLCBDb2xsZWN0aW9uSW5kZXhDYWNoZSwgQ2FjaGVNZW1vcnlCdWRnZXQgfSBmcm9tIFwiLi4vY2FjaGUvaW5kZXguanNcIjtcbmltcG9ydCB7IGdldFZhbGlkYXRlZEdsb2JhbENhY2hlTWVtb3J5Qnl0ZXMsIGdldFZhbGlkYXRlZE1heEJhY2t1cHNQZXJFbGVtZW50LCBTVE9SQUdFX0xBWUVSX0NPTkZJRyB9IGZyb20gXCIuLi9jb25maWcvcGVyZm9ybWFuY2UtY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBCYWNrdXBTZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL0JhY2t1cFNlcnZpY2UuanNcIjtcbmltcG9ydCB7XG4gIEdpdEh1YkNsaWVudCxcbiAgQ29sbGVjdGlvbkJyb3dzZXIsXG4gIENvbGxlY3Rpb25JbmRleE1hbmFnZXIsXG4gIENvbGxlY3Rpb25TZWFyY2gsXG4gIFBlcnNvbmFEZXRhaWxzLFxuICBFbGVtZW50SW5zdGFsbGVyLFxufSBmcm9tIFwiLi4vY29sbGVjdGlvbi9pbmRleC5qc1wiO1xuaW1wb3J0IHsgR2l0SHViQXV0aE1hbmFnZXIgfSBmcm9tIFwiLi4vYXV0aC9HaXRIdWJBdXRoTWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgUG9ydGZvbGlvTWFuYWdlciwgRWxlbWVudFR5cGUgfSBmcm9tIFwiLi4vcG9ydGZvbGlvL1BvcnRmb2xpb01hbmFnZXIuanNcIjtcbmltcG9ydCB7IE1pZ3JhdGlvbk1hbmFnZXIgfSBmcm9tIFwiLi4vcG9ydGZvbGlvL01pZ3JhdGlvbk1hbmFnZXIuanNcIjtcbmltcG9ydCB7IEVuaGFuY2VkSW5kZXhNYW5hZ2VyIH0gZnJvbSBcIi4uL3BvcnRmb2xpby9FbmhhbmNlZEluZGV4TWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgRW5oYW5jZWRJbmRleEhhbmRsZXIgfSBmcm9tIFwiLi4vaGFuZGxlcnMvRW5oYW5jZWRJbmRleEhhbmRsZXIuanNcIjtcbmltcG9ydCB7IE1DUEFRTEhhbmRsZXIsIHR5cGUgSGFuZGxlclJlZ2lzdHJ5IH0gZnJvbSBcIi4uL2hhbmRsZXJzL21jcC1hcWwvTUNQQVFMSGFuZGxlci5qc1wiO1xuaW1wb3J0IHsgR2F0ZWtlZXBlciB9IGZyb20gXCIuLi9oYW5kbGVycy9tY3AtYXFsL0dhdGVrZWVwZXIuanNcIjtcbmltcG9ydCB7IFNraWxsTWFuYWdlciB9IGZyb20gXCIuLi9lbGVtZW50cy9za2lsbHMvaW5kZXguanNcIjtcbmltcG9ydCB7IFRlbXBsYXRlTWFuYWdlciB9IGZyb20gXCIuLi9lbGVtZW50cy90ZW1wbGF0ZXMvVGVtcGxhdGVNYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZVJlbmRlcmVyIH0gZnJvbSBcIi4uL3V0aWxzL1RlbXBsYXRlUmVuZGVyZXIuanNcIjtcbmltcG9ydCB7IEFnZW50TWFuYWdlciB9IGZyb20gXCIuLi9lbGVtZW50cy9hZ2VudHMvQWdlbnRNYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBNZW1vcnkgfSBmcm9tIFwiLi4vZWxlbWVudHMvbWVtb3JpZXMvTWVtb3J5LmpzXCI7XG5pbXBvcnQgeyBNZW1vcnlNYW5hZ2VyIH0gZnJvbSBcIi4uL2VsZW1lbnRzL21lbW9yaWVzL01lbW9yeU1hbmFnZXIuanNcIjtcbmltcG9ydCB7IFdlYlNTRUxvZ1NpbmsgfSBmcm9tIFwiLi4vd2ViL3NpbmtzL1dlYlNTRUxvZ1NpbmsuanNcIjtcbmltcG9ydCB7IFdlYlNTRU1ldHJpY3NTaW5rIH0gZnJvbSBcIi4uL3dlYi9zaW5rcy9XZWJTU0VNZXRyaWNzU2luay5qc1wiO1xuaW1wb3J0IHsgRW5zZW1ibGVNYW5hZ2VyIH0gZnJvbSBcIi4uL2VsZW1lbnRzL2Vuc2VtYmxlcy9FbnNlbWJsZU1hbmFnZXIuanNcIjtcbmltcG9ydCB7IFBlcnNvbmFFeHBvcnRlciwgUGVyc29uYUltcG9ydGVyIH0gZnJvbSBcIi4uL3BlcnNvbmEvZXhwb3J0LWltcG9ydC9pbmRleC5qc1wiO1xuaW1wb3J0IHsgUGVyc29uYU1hbmFnZXIgfSBmcm9tIFwiLi4vcGVyc29uYS9QZXJzb25hTWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgUGVyc29uYUhhbmRsZXIgfSBmcm9tIFwiLi4vaGFuZGxlcnMvUGVyc29uYUhhbmRsZXIuanNcIjtcbmltcG9ydCB7IEVsZW1lbnRDUlVESGFuZGxlciB9IGZyb20gXCIuLi9oYW5kbGVycy9FbGVtZW50Q1JVREhhbmRsZXIuanNcIjtcbmltcG9ydCB7IENvbGxlY3Rpb25IYW5kbGVyIH0gZnJvbSBcIi4uL2hhbmRsZXJzL0NvbGxlY3Rpb25IYW5kbGVyLmpzXCI7XG5pbXBvcnQgeyBQb3J0Zm9saW9IYW5kbGVyIH0gZnJvbSBcIi4uL2hhbmRsZXJzL1BvcnRmb2xpb0hhbmRsZXIuanNcIjtcbmltcG9ydCB7IFBvcnRmb2xpb1B1bGxIYW5kbGVyIH0gZnJvbSBcIi4uL2hhbmRsZXJzL1BvcnRmb2xpb1B1bGxIYW5kbGVyLmpzXCI7XG5pbXBvcnQgeyBHaXRIdWJBdXRoSGFuZGxlciB9IGZyb20gXCIuLi9oYW5kbGVycy9HaXRIdWJBdXRoSGFuZGxlci5qc1wiO1xuaW1wb3J0IHsgRGlzcGxheUNvbmZpZ0hhbmRsZXIgfSBmcm9tIFwiLi4vaGFuZGxlcnMvRGlzcGxheUNvbmZpZ0hhbmRsZXIuanNcIjtcbmltcG9ydCB7IElkZW50aXR5SGFuZGxlciB9IGZyb20gXCIuLi9oYW5kbGVycy9JZGVudGl0eUhhbmRsZXIuanNcIjtcbmltcG9ydCB7IENvbmZpZ0hhbmRsZXIgfSBmcm9tIFwiLi4vaGFuZGxlcnMvQ29uZmlnSGFuZGxlci5qc1wiO1xuaW1wb3J0IHsgU3luY0hhbmRsZXIgfSBmcm9tIFwiLi4vaGFuZGxlcnMvU3luY0hhbmRsZXJWMi5qc1wiO1xuaW1wb3J0IHsgVG9vbFJlZ2lzdHJ5IH0gZnJvbSBcIi4uL2hhbmRsZXJzL1Rvb2xSZWdpc3RyeS5qc1wiO1xuaW1wb3J0IHsgU2VydmVyU2V0dXAgfSBmcm9tIFwiLi4vc2VydmVyL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBTZXJ2ZXJTdGFydHVwIH0gZnJvbSBcIi4uL3NlcnZlci9zdGFydHVwLmpzXCI7XG5pbXBvcnQgeyBQYXRoVmFsaWRhdG9yIH0gZnJvbSBcIi4uL3NlY3VyaXR5L3BhdGhWYWxpZGF0b3IuanNcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi91dGlscy9sb2dnZXIuanNcIjtcbmltcG9ydCB7IEVycm9ySGFuZGxlciB9IGZyb20gXCIuLi91dGlscy9FcnJvckhhbmRsZXIuanNcIjtcbmltcG9ydCB7IFVuaWZpZWRJbmRleE1hbmFnZXIgfSBmcm9tIFwiLi4vcG9ydGZvbGlvL1VuaWZpZWRJbmRleE1hbmFnZXIuanNcIjtcbmltcG9ydCB7IFBvcnRmb2xpb0luZGV4TWFuYWdlciB9IGZyb20gXCIuLi9wb3J0Zm9saW8vUG9ydGZvbGlvSW5kZXhNYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBTdWJtaXRUb1BvcnRmb2xpb1Rvb2wgfSBmcm9tIFwiLi4vdG9vbHMvcG9ydGZvbGlvL3N1Ym1pdFRvUG9ydGZvbGlvVG9vbC5qc1wiO1xuaW1wb3J0IHsgQ29uZmlnTWFuYWdlciB9IGZyb20gXCIuLi9jb25maWcvQ29uZmlnTWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgUG9ydGZvbGlvUmVwb01hbmFnZXIgfSBmcm9tIFwiLi4vcG9ydGZvbGlvL1BvcnRmb2xpb1JlcG9NYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBQb3J0Zm9saW9TeW5jTWFuYWdlciB9IGZyb20gXCIuLi9wb3J0Zm9saW8vUG9ydGZvbGlvU3luY01hbmFnZXIuanNcIjtcbmltcG9ydCB7IGdldFBvcnRmb2xpb1JlcG9zaXRvcnlOYW1lIH0gZnJvbSBcIi4uL2NvbmZpZy9wb3J0Zm9saW9Db25maWcuanNcIjtcbmltcG9ydCB7IEdpdEh1YlBvcnRmb2xpb0luZGV4ZXIgfSBmcm9tIFwiLi4vcG9ydGZvbGlvL0dpdEh1YlBvcnRmb2xpb0luZGV4ZXIuanNcIjtcbmltcG9ydCB7IEluZGV4Q29uZmlnTWFuYWdlciB9IGZyb20gXCIuLi9wb3J0Zm9saW8vY29uZmlnL0luZGV4Q29uZmlnLmpzXCI7XG5pbXBvcnQgeyBQb3J0Zm9saW9TeW5jQ29tcGFyZXIgfSBmcm9tIFwiLi4vc3luYy9Qb3J0Zm9saW9TeW5jQ29tcGFyZXIuanNcIjtcbmltcG9ydCB7IFBvcnRmb2xpb0Rvd25sb2FkZXIgfSBmcm9tIFwiLi4vc3luYy9Qb3J0Zm9saW9Eb3dubG9hZGVyLmpzXCI7XG5pbXBvcnQgeyBQZXJmb3JtYW5jZU1vbml0b3IgfSBmcm9tIFwiLi4vdXRpbHMvUGVyZm9ybWFuY2VNb25pdG9yLmpzXCI7XG5pbXBvcnQgeyBCdWlsZEluZm9TZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL0J1aWxkSW5mb1NlcnZpY2UuanNcIjtcbmltcG9ydCB7IEluaXRpYWxpemF0aW9uU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9Jbml0aWFsaXphdGlvblNlcnZpY2UuanNcIjtcbmltcG9ydCB7IFBlcnNvbmFJbmRpY2F0b3JTZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL1BlcnNvbmFJbmRpY2F0b3JTZXJ2aWNlLmpzXCI7XG5pbXBvcnQgeyBGaWxlTG9ja01hbmFnZXIgfSBmcm9tICcuLi9zZWN1cml0eS9maWxlTG9ja01hbmFnZXIuanMnO1xuaW1wb3J0IHsgU3RhdGVDaGFuZ2VOb3RpZmllciB9IGZyb20gXCIuLi9zZXJ2aWNlcy9TdGF0ZUNoYW5nZU5vdGlmaWVyLmpzXCI7XG5pbXBvcnQgeyBTZXJpYWxpemF0aW9uU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9TZXJpYWxpemF0aW9uU2VydmljZS5qc1wiO1xuaW1wb3J0IHsgRmlsZVdhdGNoU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9GaWxlV2F0Y2hTZXJ2aWNlLmpzXCI7XG5pbXBvcnQgeyBNZXRhZGF0YVNlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvTWV0YWRhdGFTZXJ2aWNlLmpzXCI7XG5pbXBvcnQgeyBGaWxlT3BlcmF0aW9uc1NlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvRmlsZU9wZXJhdGlvbnNTZXJ2aWNlLmpzXCI7XG5pbXBvcnQgeyBWYWxpZGF0aW9uUmVnaXN0cnkgfSBmcm9tIFwiLi4vc2VydmljZXMvdmFsaWRhdGlvbi9WYWxpZGF0aW9uUmVnaXN0cnkuanNcIjtcbmltcG9ydCB7IFRyaWdnZXJWYWxpZGF0aW9uU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy92YWxpZGF0aW9uL1RyaWdnZXJWYWxpZGF0aW9uU2VydmljZS5qc1wiO1xuaW1wb3J0IHsgVmFsaWRhdGlvblNlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvdmFsaWRhdGlvbi9WYWxpZGF0aW9uU2VydmljZS5qc1wiO1xuaW1wb3J0IHsgR2l0SHViUmF0ZUxpbWl0ZXIgfSBmcm9tIFwiLi4vdXRpbHMvR2l0SHViUmF0ZUxpbWl0ZXIuanNcIjtcbmltcG9ydCB7IEFudGhyb3BpY1RvRG9sbGhvdXNlQ29udmVydGVyLCBEb2xsaG91c2VUb0FudGhyb3BpY0NvbnZlcnRlciB9IGZyb20gXCIuLi9jb252ZXJ0ZXJzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBEYW5nZXJab25lRW5mb3JjZXIgfSBmcm9tIFwiLi4vc2VjdXJpdHkvRGFuZ2VyWm9uZUVuZm9yY2VyLmpzXCI7XG5pbXBvcnQgeyBBY3RpdmF0aW9uU3RvcmUgfSBmcm9tIFwiLi4vc2VydmljZXMvQWN0aXZhdGlvblN0b3JlLmpzXCI7XG5pbXBvcnQgeyBWZXJpZmljYXRpb25TdG9yZSB9IGZyb20gXCJAZG9sbGhvdXNlbWNwL3NhZmV0eVwiO1xuaW1wb3J0IHsgVmVyaWZpY2F0aW9uTm90aWZpZXIgfSBmcm9tIFwiLi4vc2VydmljZXMvVmVyaWZpY2F0aW9uTm90aWZpZXIuanNcIjtcbmltcG9ydCB7IFBhdHRlcm5FbmNyeXB0b3IgfSBmcm9tIFwiLi4vc2VjdXJpdHkvZW5jcnlwdGlvbi9QYXR0ZXJuRW5jcnlwdG9yLmpzXCI7XG5pbXBvcnQgeyBQYXR0ZXJuRGVjcnlwdG9yIH0gZnJvbSBcIi4uL3NlY3VyaXR5L2VuY3J5cHRpb24vUGF0dGVybkRlY3J5cHRvci5qc1wiO1xuaW1wb3J0IHsgQ29udGV4dFRyYWNrZXIgfSBmcm9tIFwiLi4vc2VjdXJpdHkvZW5jcnlwdGlvbi9Db250ZXh0VHJhY2tlci5qc1wiO1xuaW1wb3J0IHsgUGF0dGVybkV4dHJhY3RvciB9IGZyb20gXCIuLi9zZWN1cml0eS92YWxpZGF0aW9uL1BhdHRlcm5FeHRyYWN0b3IuanNcIjtcbmltcG9ydCB7IEJhY2tncm91bmRWYWxpZGF0b3IgfSBmcm9tIFwiLi4vc2VjdXJpdHkvdmFsaWRhdGlvbi9CYWNrZ3JvdW5kVmFsaWRhdG9yLmpzXCI7XG5pbXBvcnQgeyBTZWN1cml0eVRlbGVtZXRyeSB9IGZyb20gXCIuLi9zZWN1cml0eS90ZWxlbWV0cnkvU2VjdXJpdHlUZWxlbWV0cnkuanNcIjtcbmltcG9ydCB7IENvbnRlbnRWYWxpZGF0b3IgfSBmcm9tIFwiLi4vc2VjdXJpdHkvY29udGVudFZhbGlkYXRvci5qc1wiO1xuaW1wb3J0IHsgT3BlcmF0aW9uYWxUZWxlbWV0cnkgfSBmcm9tIFwiLi4vdGVsZW1ldHJ5L09wZXJhdGlvbmFsVGVsZW1ldHJ5LmpzXCI7XG5pbXBvcnQgeyBTdGFydHVwVGltZXIgfSBmcm9tIFwiLi4vdGVsZW1ldHJ5L1N0YXJ0dXBUaW1lci5qc1wiO1xuaW1wb3J0IHsgRGVmYXVsdEVuaGFuY2VkSW5kZXhIZWxwZXJzIH0gZnJvbSBcIi4uL3BvcnRmb2xpby9lbmhhbmNlZC1pbmRleC9FbmhhbmNlZEluZGV4SGVscGVycy5qc1wiO1xuaW1wb3J0IHsgRWxlbWVudERlZmluaXRpb25CdWlsZGVyIH0gZnJvbSBcIi4uL3BvcnRmb2xpby9lbmhhbmNlZC1pbmRleC9FbGVtZW50RGVmaW5pdGlvbkJ1aWxkZXIuanNcIjtcbmltcG9ydCB7IEFjdGlvblRyaWdnZXJFeHRyYWN0b3IgfSBmcm9tIFwiLi4vcG9ydGZvbGlvL2VuaGFuY2VkLWluZGV4L0FjdGlvblRyaWdnZXJFeHRyYWN0b3IuanNcIjtcbmltcG9ydCB7IFRyaWdnZXJNZXRyaWNzVHJhY2tlciB9IGZyb20gXCIuLi9wb3J0Zm9saW8vZW5oYW5jZWQtaW5kZXgvVHJpZ2dlck1ldHJpY3NUcmFja2VyLmpzXCI7XG5pbXBvcnQgeyBTZW1hbnRpY1JlbGF0aW9uc2hpcFNlcnZpY2UgfSBmcm9tIFwiLi4vcG9ydGZvbGlvL2VuaGFuY2VkLWluZGV4L1NlbWFudGljUmVsYXRpb25zaGlwU2VydmljZS5qc1wiO1xuaW1wb3J0IHsgRWxlbWVudEV2ZW50RGlzcGF0Y2hlciB9IGZyb20gJy4uL2V2ZW50cy9FbGVtZW50RXZlbnREaXNwYXRjaGVyLmpzJztcbmltcG9ydCB7IFRva2VuTWFuYWdlciB9IGZyb20gXCIuLi9zZWN1cml0eS90b2tlbk1hbmFnZXIuanNcIjtcbmltcG9ydCB7XG4gIFBhZ2luYXRpb25TZXJ2aWNlLFxuICBGaWx0ZXJTZXJ2aWNlLFxuICBTb3J0U2VydmljZSxcbiAgRWxlbWVudFF1ZXJ5U2VydmljZSxcbn0gZnJvbSAnLi4vc2VydmljZXMvcXVlcnkvaW5kZXguanMnO1xuaW1wb3J0IHsgUmV0ZW50aW9uUG9saWN5U2VydmljZSwgTWVtb3J5UmV0ZW50aW9uU3RyYXRlZ3kgfSBmcm9tICcuLi9zZXJ2aWNlcy9SZXRlbnRpb25Qb2xpY3lTZXJ2aWNlLmpzJztcbmltcG9ydCB7IFBvbGljeUV4cG9ydFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9Qb2xpY3lFeHBvcnRTZXJ2aWNlLmpzJztcbmltcG9ydCB7IExvZ01hbmFnZXIsIGJ1aWxkTG9nTWFuYWdlckNvbmZpZyB9IGZyb20gJy4uL2xvZ2dpbmcvTG9nTWFuYWdlci5qcyc7XG5pbXBvcnQgeyBGaWxlTG9nU2luayB9IGZyb20gJy4uL2xvZ2dpbmcvc2lua3MvRmlsZUxvZ1NpbmsuanMnO1xuaW1wb3J0IHsgTWVtb3J5TG9nU2luayB9IGZyb20gJy4uL2xvZ2dpbmcvc2lua3MvTWVtb3J5TG9nU2luay5qcyc7XG5pbXBvcnQgeyBQbGFpblRleHRGb3JtYXR0ZXIgfSBmcm9tICcuLi9sb2dnaW5nL2Zvcm1hdHRlcnMvUGxhaW5UZXh0Rm9ybWF0dGVyLmpzJztcbmltcG9ydCB7IEpzb25sRm9ybWF0dGVyIH0gZnJvbSAnLi4vbG9nZ2luZy9mb3JtYXR0ZXJzL0pzb25sRm9ybWF0dGVyLmpzJztcbmltcG9ydCB7IHdpcmVMb2dIb29rcywgZ2V0VHJpZ2dlck1ldHJpY3NMb2dMaXN0ZW5lciB9IGZyb20gJy4uL2xvZ2dpbmcvTG9nSG9va3MuanMnO1xuaW1wb3J0IHsgTWV0cmljc01hbmFnZXIgfSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NNYW5hZ2VyLmpzJztcbmltcG9ydCB7IE1lbW9yeU1ldHJpY3NTaW5rIH0gZnJvbSAnLi4vbWV0cmljcy9zaW5rcy9NZW1vcnlNZXRyaWNzU2luay5qcyc7XG5pbXBvcnQgeyBidWlsZE1ldHJpY3NNYW5hZ2VyQ29uZmlnIH0gZnJvbSAnLi4vbWV0cmljcy90eXBlcy5qcyc7XG5pbXBvcnQge1xuICBQZXJmb3JtYW5jZU1vbml0b3JDb2xsZWN0b3IsXG4gIExSVUNhY2hlQ29sbGVjdG9yLFxuICBTZWN1cml0eU1vbml0b3JDb2xsZWN0b3IsXG4gIFNlY3VyaXR5VGVsZW1ldHJ5Q29sbGVjdG9yLFxuICBGaWxlTG9ja01hbmFnZXJDb2xsZWN0b3IsXG4gIERlZmF1bHRFbGVtZW50UHJvdmlkZXJDb2xsZWN0b3IsXG4gIFRyaWdnZXJNZXRyaWNzVHJhY2tlckNvbGxlY3RvcixcbiAgT3BlcmF0aW9uYWxUZWxlbWV0cnlDb2xsZWN0b3IsXG4gIE9wZXJhdGlvbk1ldHJpY3NDb2xsZWN0b3IsXG4gIEdhdGVrZWVwZXJNZXRyaWNzQ29sbGVjdG9yLFxufSBmcm9tICcuLi9tZXRyaWNzL2NvbGxlY3RvcnMvaW5kZXguanMnO1xuaW1wb3J0IHsgT3BlcmF0aW9uTWV0cmljc1RyYWNrZXIgfSBmcm9tICcuLi9tZXRyaWNzL09wZXJhdGlvbk1ldHJpY3NUcmFja2VyLmpzJztcbmltcG9ydCB7IEdhdGVrZWVwZXJNZXRyaWNzVHJhY2tlciB9IGZyb20gJy4uL21ldHJpY3MvR2F0ZWtlZXBlck1ldHJpY3NUcmFja2VyLmpzJztcblxuLy8gU3RhdGUgaXMgb3duZWQgYnkgUGVyc29uYU1hbmFnZXIgYW5kIHNlcnZpY2VzXG5cbmV4cG9ydCBpbnRlcmZhY2UgSGFuZGxlckJ1bmRsZSB7XG4gIHBlcnNvbmFIYW5kbGVyOiBQZXJzb25hSGFuZGxlcjtcbiAgZWxlbWVudENydWRIYW5kbGVyOiBFbGVtZW50Q1JVREhhbmRsZXI7XG4gIGNvbGxlY3Rpb25IYW5kbGVyOiBDb2xsZWN0aW9uSGFuZGxlcjtcbiAgcG9ydGZvbGlvSGFuZGxlcjogUG9ydGZvbGlvSGFuZGxlcjtcbiAgZ2l0aHViQXV0aEhhbmRsZXI6IEdpdEh1YkF1dGhIYW5kbGVyO1xuICBkaXNwbGF5Q29uZmlnSGFuZGxlcjogRGlzcGxheUNvbmZpZ0hhbmRsZXI7XG4gIGlkZW50aXR5SGFuZGxlcjogSWRlbnRpdHlIYW5kbGVyO1xuICBjb25maWdIYW5kbGVyOiBDb25maWdIYW5kbGVyO1xuICBzeW5jSGFuZGxlcjogU3luY0hhbmRsZXI7XG4gIHRvb2xSZWdpc3RyeTogVG9vbFJlZ2lzdHJ5O1xuICBlbmhhbmNlZEluZGV4SGFuZGxlcjogRW5oYW5jZWRJbmRleEhhbmRsZXI7XG4gIG1jcEFxbEhhbmRsZXI6IE1DUEFRTEhhbmRsZXI7XG59XG5cbi8qKlxuICogVHlwZS1zYWZlIHNlcnZpY2UgcmVjb3JkIGZvciBkZXBlbmRlbmN5IGluamVjdGlvbiBjb250YWluZXJcbiAqXG4gKiBGSVg6IFJlcGxhY2VkICdhbnknIHR5cGVzIHdpdGggcHJvcGVyIGdlbmVyaWNzIHRvIGVuc3VyZSB0eXBlIHNhZmV0eVxuICogUHJldmlvdXNseTogVXNlZCAnYW55JyB3aGljaCBhbGxvd2VkIHVuc2FmZSBjYXN0cyBhbmQgcnVudGltZSBlcnJvcnNcbiAqIE5vdzogVXNlcyBnZW5lcmljIFQgd2l0aCAndW5rbm93bicgZmFsbGJhY2sgZm9yIGNvbXBpbGUtdGltZSB0eXBlIGNoZWNraW5nXG4gKlxuICogQHRlbXBsYXRlIFQgVGhlIHNlcnZpY2UgdHlwZSAoZGVmYXVsdHMgdG8gdW5rbm93biBmb3IgbWF4aW11bSBzYWZldHkpXG4gKi9cbmludGVyZmFjZSBTZXJ2aWNlUmVjb3JkPFQgPSB1bmtub3duPiB7XG4gIGZhY3Rvcnk6ICgpID0+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
|