@dollhousemcp/mcp-server 2.0.0-rc.6 → 2.0.1
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 +52 -61
- package/README.github.md +2 -2
- package/README.md +284 -224
- package/README.md.backup +284 -224
- package/README.npm.md +284 -224
- package/dist/cache/LRUCache.d.ts +3 -0
- package/dist/cache/LRUCache.d.ts.map +1 -1
- package/dist/cache/LRUCache.js +36 -26
- package/dist/config/env.d.ts +14 -4
- package/dist/config/env.d.ts.map +1 -1
- package/dist/config/env.js +20 -6
- package/dist/di/Container.d.ts +21 -0
- package/dist/di/Container.d.ts.map +1 -1
- package/dist/di/Container.js +250 -53
- package/dist/elements/BaseElement.d.ts.map +1 -1
- package/dist/elements/BaseElement.js +5 -10
- package/dist/elements/base/BaseElementManager.d.ts +22 -0
- package/dist/elements/base/BaseElementManager.d.ts.map +1 -1
- package/dist/elements/base/BaseElementManager.js +47 -7
- package/dist/elements/memories/Memory.d.ts +1 -0
- package/dist/elements/memories/Memory.d.ts.map +1 -1
- package/dist/elements/memories/Memory.js +12 -8
- package/dist/elements/memories/MemoryManager.d.ts.map +1 -1
- package/dist/elements/memories/MemoryManager.js +23 -42
- package/dist/elements/memories/MemorySearchIndex.js +2 -2
- 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/EnhancedIndexHandler.js +6 -6
- package/dist/handlers/element-crud/listElements.d.ts +2 -0
- package/dist/handlers/element-crud/listElements.d.ts.map +1 -1
- package/dist/handlers/element-crud/listElements.js +3 -1
- package/dist/handlers/mcp-aql/Gatekeeper.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/Gatekeeper.js +23 -17
- package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts +14 -0
- package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/MCPAQLHandler.js +110 -14
- package/dist/handlers/mcp-aql/OperationRouter.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/OperationRouter.js +13 -1
- package/dist/handlers/mcp-aql/OperationSchema.d.ts +7 -0
- package/dist/handlers/mcp-aql/OperationSchema.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/OperationSchema.js +52 -1
- package/dist/handlers/mcp-aql/evaluatePermission.d.ts +53 -0
- package/dist/handlers/mcp-aql/evaluatePermission.d.ts.map +1 -0
- package/dist/handlers/mcp-aql/evaluatePermission.js +132 -0
- package/dist/handlers/mcp-aql/policies/ToolClassification.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/policies/ToolClassification.js +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/logging/LogHooks.js +11 -11
- package/dist/logging/LogManager.d.ts +0 -2
- package/dist/logging/LogManager.d.ts.map +1 -1
- package/dist/logging/LogManager.js +1 -3
- package/dist/logging/sinks/MemoryLogSink.d.ts +2 -0
- package/dist/logging/sinks/MemoryLogSink.d.ts.map +1 -1
- package/dist/logging/sinks/MemoryLogSink.js +12 -3
- package/dist/logging/types.d.ts +0 -2
- package/dist/logging/types.d.ts.map +1 -1
- package/dist/logging/types.js +1 -1
- package/dist/metrics/GatekeeperMetricsTracker.d.ts +32 -0
- package/dist/metrics/GatekeeperMetricsTracker.d.ts.map +1 -0
- package/dist/metrics/GatekeeperMetricsTracker.js +42 -0
- package/dist/metrics/MetricsManager.d.ts +47 -0
- package/dist/metrics/MetricsManager.d.ts.map +1 -0
- package/dist/metrics/MetricsManager.js +232 -0
- package/dist/metrics/OperationMetricsTracker.d.ts +32 -0
- package/dist/metrics/OperationMetricsTracker.d.ts.map +1 -0
- package/dist/metrics/OperationMetricsTracker.js +53 -0
- package/dist/metrics/collectors/DefaultElementProviderCollector.d.ts +27 -0
- package/dist/metrics/collectors/DefaultElementProviderCollector.d.ts.map +1 -0
- package/dist/metrics/collectors/DefaultElementProviderCollector.js +69 -0
- package/dist/metrics/collectors/FileLockManagerCollector.d.ts +16 -0
- package/dist/metrics/collectors/FileLockManagerCollector.d.ts.map +1 -0
- package/dist/metrics/collectors/FileLockManagerCollector.js +51 -0
- package/dist/metrics/collectors/GatekeeperMetricsCollector.d.ts +16 -0
- package/dist/metrics/collectors/GatekeeperMetricsCollector.d.ts.map +1 -0
- package/dist/metrics/collectors/GatekeeperMetricsCollector.js +76 -0
- package/dist/metrics/collectors/LRUCacheCollector.d.ts +18 -0
- package/dist/metrics/collectors/LRUCacheCollector.d.ts.map +1 -0
- package/dist/metrics/collectors/LRUCacheCollector.js +95 -0
- package/dist/metrics/collectors/OperationMetricsCollector.d.ts +16 -0
- package/dist/metrics/collectors/OperationMetricsCollector.d.ts.map +1 -0
- package/dist/metrics/collectors/OperationMetricsCollector.js +80 -0
- package/dist/metrics/collectors/OperationalTelemetryCollector.d.ts +17 -0
- package/dist/metrics/collectors/OperationalTelemetryCollector.d.ts.map +1 -0
- package/dist/metrics/collectors/OperationalTelemetryCollector.js +26 -0
- package/dist/metrics/collectors/PerformanceMonitorCollector.d.ts +14 -0
- package/dist/metrics/collectors/PerformanceMonitorCollector.d.ts.map +1 -0
- package/dist/metrics/collectors/PerformanceMonitorCollector.js +141 -0
- package/dist/metrics/collectors/SecurityMonitorCollector.d.ts +21 -0
- package/dist/metrics/collectors/SecurityMonitorCollector.d.ts.map +1 -0
- package/dist/metrics/collectors/SecurityMonitorCollector.js +56 -0
- package/dist/metrics/collectors/SecurityTelemetryCollector.d.ts +15 -0
- package/dist/metrics/collectors/SecurityTelemetryCollector.d.ts.map +1 -0
- package/dist/metrics/collectors/SecurityTelemetryCollector.js +112 -0
- package/dist/metrics/collectors/TriggerMetricsTrackerCollector.d.ts +16 -0
- package/dist/metrics/collectors/TriggerMetricsTrackerCollector.d.ts.map +1 -0
- package/dist/metrics/collectors/TriggerMetricsTrackerCollector.js +26 -0
- package/dist/metrics/collectors/index.d.ts +11 -0
- package/dist/metrics/collectors/index.d.ts.map +1 -0
- package/dist/metrics/collectors/index.js +11 -0
- package/dist/metrics/sinks/MemoryMetricsSink.d.ts +22 -0
- package/dist/metrics/sinks/MemoryMetricsSink.d.ts.map +1 -0
- package/dist/metrics/sinks/MemoryMetricsSink.js +121 -0
- package/dist/metrics/types.d.ts +98 -0
- package/dist/metrics/types.d.ts.map +1 -0
- package/dist/metrics/types.js +24 -0
- package/dist/portfolio/DefaultElementProvider.d.ts.map +1 -1
- package/dist/portfolio/DefaultElementProvider.js +1 -7
- package/dist/portfolio/EnhancedIndexManager.d.ts.map +1 -1
- package/dist/portfolio/EnhancedIndexManager.js +18 -18
- package/dist/portfolio/NLPScoringManager.d.ts.map +1 -1
- package/dist/portfolio/NLPScoringManager.js +5 -9
- package/dist/portfolio/PortfolioIndexManager.js +2 -2
- package/dist/portfolio/RelationshipManager.js +2 -2
- package/dist/portfolio/VerbTriggerManager.d.ts.map +1 -1
- package/dist/portfolio/VerbTriggerManager.js +5 -19
- package/dist/portfolio/config/IndexConfig.d.ts.map +1 -1
- package/dist/portfolio/config/IndexConfig.js +1 -12
- package/dist/portfolio/enhanced-index/ElementDefinitionBuilder.d.ts.map +1 -1
- package/dist/portfolio/enhanced-index/ElementDefinitionBuilder.js +3 -15
- package/dist/portfolio/enhanced-index/SemanticRelationshipService.d.ts.map +1 -1
- package/dist/portfolio/enhanced-index/SemanticRelationshipService.js +2 -16
- package/dist/portfolio/types/RelationshipTypes.d.ts.map +1 -1
- package/dist/portfolio/types/RelationshipTypes.js +3 -17
- package/dist/security/audit/config/suppressions.d.ts.map +1 -1
- package/dist/security/audit/config/suppressions.js +36 -8
- package/dist/security/constants.d.ts.map +1 -1
- package/dist/security/constants.js +10 -6
- package/dist/security/fileLockManager.d.ts.map +1 -1
- package/dist/security/fileLockManager.js +8 -6
- package/dist/security/secureYamlParser.d.ts.map +1 -1
- package/dist/security/secureYamlParser.js +1 -13
- package/dist/security/securityMonitor.d.ts +2 -1
- package/dist/security/securityMonitor.d.ts.map +1 -1
- package/dist/security/securityMonitor.js +14 -3
- package/dist/security/telemetry/SecurityTelemetry.d.ts +16 -0
- package/dist/security/telemetry/SecurityTelemetry.d.ts.map +1 -1
- package/dist/security/telemetry/SecurityTelemetry.js +30 -2
- package/dist/security/tokenManager.d.ts +3 -0
- package/dist/security/tokenManager.d.ts.map +1 -1
- package/dist/security/tokenManager.js +13 -5
- package/dist/security/validation/BackgroundValidator.d.ts.map +1 -1
- package/dist/security/validation/BackgroundValidator.js +7 -7
- package/dist/server/startup.d.ts.map +1 -1
- package/dist/server/startup.js +8 -24
- package/dist/server/tools/MCPAQLTools.js +4 -1
- package/dist/services/ActivationStore.d.ts.map +1 -1
- package/dist/services/ActivationStore.js +9 -3
- package/dist/services/FileWatchService.d.ts +1 -0
- package/dist/services/FileWatchService.d.ts.map +1 -1
- package/dist/services/FileWatchService.js +83 -48
- package/dist/services/MetadataService.d.ts.map +1 -1
- package/dist/services/MetadataService.js +7 -2
- package/dist/services/query/ElementQueryService.d.ts.map +1 -1
- package/dist/services/query/ElementQueryService.js +1 -41
- package/dist/services/query/PaginationService.d.ts.map +1 -1
- package/dist/services/query/PaginationService.js +1 -14
- package/dist/services/query/SortService.d.ts.map +1 -1
- package/dist/services/query/SortService.js +1 -6
- package/dist/services/validation/ValidationService.d.ts.map +1 -1
- package/dist/services/validation/ValidationService.js +3 -8
- package/dist/storage/ElementStorageLayer.d.ts.map +1 -1
- package/dist/storage/ElementStorageLayer.js +5 -2
- package/dist/storage/MemoryStorageLayer.d.ts.map +1 -1
- package/dist/storage/MemoryStorageLayer.js +5 -2
- package/dist/telemetry/OperationalTelemetry.js +2 -2
- package/dist/utils/EventDeduplicator.d.ts +44 -0
- package/dist/utils/EventDeduplicator.d.ts.map +1 -0
- package/dist/utils/EventDeduplicator.js +93 -0
- package/dist/utils/FileLock.d.ts.map +1 -1
- package/dist/utils/FileLock.js +1 -9
- package/dist/utils/PerformanceMonitor.d.ts.map +1 -1
- package/dist/utils/PerformanceMonitor.js +5 -5
- package/dist/utils/SlidingWindowRateLimiter.d.ts +13 -0
- package/dist/utils/SlidingWindowRateLimiter.d.ts.map +1 -0
- package/dist/utils/SlidingWindowRateLimiter.js +23 -0
- package/dist/web/console/IngestRoutes.d.ts +84 -0
- package/dist/web/console/IngestRoutes.d.ts.map +1 -0
- package/dist/web/console/IngestRoutes.js +252 -0
- package/dist/web/console/LeaderElection.d.ts +89 -0
- package/dist/web/console/LeaderElection.d.ts.map +1 -0
- package/dist/web/console/LeaderElection.js +205 -0
- package/dist/web/console/LeaderForwardingSink.d.ts +61 -0
- package/dist/web/console/LeaderForwardingSink.d.ts.map +1 -0
- package/dist/web/console/LeaderForwardingSink.js +197 -0
- package/dist/web/console/SessionNames.d.ts +46 -0
- package/dist/web/console/SessionNames.d.ts.map +1 -0
- package/dist/web/console/SessionNames.js +257 -0
- package/dist/web/console/UnifiedConsole.d.ts +64 -0
- package/dist/web/console/UnifiedConsole.d.ts.map +1 -0
- package/dist/web/console/UnifiedConsole.js +119 -0
- package/dist/web/contentPipeline.d.ts +58 -0
- package/dist/web/contentPipeline.d.ts.map +1 -0
- package/dist/web/contentPipeline.js +112 -0
- package/dist/web/portDiscovery.d.ts +58 -0
- package/dist/web/portDiscovery.d.ts.map +1 -0
- package/dist/web/portDiscovery.js +143 -0
- package/dist/web/public/app.js +148 -60
- package/dist/web/public/logs.js +638 -0
- package/dist/web/public/metrics.js +682 -0
- package/dist/web/public/permissions.js +394 -0
- package/dist/web/public/sessions.js +369 -0
- package/dist/web/routes/healthRoutes.d.ts +16 -0
- package/dist/web/routes/healthRoutes.d.ts.map +1 -0
- package/dist/web/routes/healthRoutes.js +29 -0
- package/dist/web/routes/logRoutes.d.ts +18 -0
- package/dist/web/routes/logRoutes.d.ts.map +1 -0
- package/dist/web/routes/logRoutes.js +126 -0
- package/dist/web/routes/metricsRoutes.d.ts +17 -0
- package/dist/web/routes/metricsRoutes.d.ts.map +1 -0
- package/dist/web/routes/metricsRoutes.js +90 -0
- package/dist/web/routes/permissionRoutes.d.ts +16 -0
- package/dist/web/routes/permissionRoutes.d.ts.map +1 -0
- package/dist/web/routes/permissionRoutes.js +133 -0
- package/dist/web/routes.d.ts.map +1 -1
- package/dist/web/routes.js +309 -339
- package/dist/web/server.d.ts +21 -1
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +42 -4
- package/dist/web/sinks/WebSSELogSink.d.ts +15 -0
- package/dist/web/sinks/WebSSELogSink.d.ts.map +1 -0
- package/dist/web/sinks/WebSSELogSink.js +22 -0
- package/dist/web/sinks/WebSSEMetricsSink.d.ts +16 -0
- package/dist/web/sinks/WebSSEMetricsSink.d.ts.map +1 -0
- package/dist/web/sinks/WebSSEMetricsSink.js +23 -0
- package/package.json +2 -2
- package/server.json +2 -2
- package/dist/web/public/public/app.js +0 -1878
package/dist/index.js
CHANGED
|
@@ -575,8 +575,8 @@ export class DollhouseMCPServer {
|
|
|
575
575
|
// Issue #706 Phase 4: Wire deferred promise into ServerSetup for request buffering
|
|
576
576
|
const serverSetup = this.container.resolve('ServerSetup');
|
|
577
577
|
serverSetup.setDeferredSetupPromise(deferredPromise);
|
|
578
|
-
// Log startup
|
|
579
|
-
deferredPromise.then(() => {
|
|
578
|
+
// Log startup timing after deferred setup completes
|
|
579
|
+
deferredPromise.then(async () => {
|
|
580
580
|
const report = timer.getReport();
|
|
581
581
|
logger.info(`[Startup] Full report: connect at ${report.connectAtMs}ms, ` +
|
|
582
582
|
`critical ${report.criticalPathMs}ms, deferred ${report.deferredMs}ms, ` +
|
|
@@ -664,4 +664,4 @@ if ((isDirectExecution || isNpxExecution || isCliExecution) && (!isTest || isTes
|
|
|
664
664
|
});
|
|
665
665
|
}
|
|
666
666
|
}
|
|
667
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUVBLGtFQUFrRTtBQUNsRSw4REFBOEQ7QUFDOUQsT0FBTyxpQkFBaUIsQ0FBQztBQUV6QixPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDbkUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDakYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFlOUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzFELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNoRSxPQUFPLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQztBQUd6QixpREFBaUQ7QUFDakQsT0FBTyxDQUFDLEVBQUUsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO0lBQ3hDLE1BQU0sQ0FBQyxLQUFLLENBQUMsOEJBQThCLEVBQUU7UUFDM0MsS0FBSyxFQUFFLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDN0QsS0FBSyxFQUFFLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVM7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Q0FBQztRQUNOLElBQUkscUJBQXFCLEVBQUUsQ0FBQztZQUMxQixPQUFPLENBQUMsS0FBSyxDQUFDLG9FQUFvRSxDQUFDLENBQUM7UUFDdEYsQ0FBQztRQUNELG9CQUFvQixFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRTtZQUNoQyxvRkFBb0Y7WUFDcEYsT0FBTyxDQUFDLEtBQUssQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO1lBQ3RELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIiMhL3Vzci9iaW4vZW52IG5vZGVcblxuLy8gTG9hZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZnJvbSAuZW52IGZpbGVzIEJFRk9SRSBhbnl0aGluZyBlbHNlXG4vLyBUaGlzIGVuc3VyZXMgLmVudi5sb2NhbCBhbmQgLmVudiBhcmUgbG9hZGVkIGZvciBhbGwgbW9kdWxlc1xuaW1wb3J0ICcuL2NvbmZpZy9lbnYuanMnO1xuXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgU2VydmVyIH0gZnJvbSBcIkBtb2RlbGNvbnRleHRwcm90b2NvbC9zZGsvc2VydmVyL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBTdGRpb1NlcnZlclRyYW5zcG9ydCB9IGZyb20gXCJAbW9kZWxjb250ZXh0cHJvdG9jb2wvc2RrL3NlcnZlci9zdGRpby5qc1wiO1xuaW1wb3J0IHsgRXJyb3JIYW5kbGVyIH0gZnJvbSBcIi4vdXRpbHMvRXJyb3JIYW5kbGVyLmpzXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi91dGlscy9sb2dnZXIuanNcIjtcbmltcG9ydCB7IERvbGxob3VzZUNvbnRhaW5lciB9IGZyb20gXCIuL2RpL0NvbnRhaW5lci5qc1wiO1xuaW1wb3J0IHsgRWxlbWVudFR5cGUgfSBmcm9tIFwiLi9wb3J0Zm9saW8vUG9ydGZvbGlvTWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgT3BlcmF0aW9uYWxUZWxlbWV0cnksIFN0YXJ0dXBUaW1lciB9IGZyb20gXCIuL3RlbGVtZXRyeS9pbmRleC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBJbmRpY2F0b3JDb25maWcgfSBmcm9tIFwiLi9jb25maWcvaW5kaWNhdG9yLWNvbmZpZy5qc1wiO1xuaW1wb3J0IHR5cGUgeyBJVG9vbEhhbmRsZXIgfSBmcm9tIFwiLi9zZXJ2ZXIvaW5kZXguanNcIjtcbmltcG9ydCB0eXBlIHsgVG9vbFJlZ2lzdHJ5IH0gZnJvbSBcIi4vaGFuZGxlcnMvVG9vbFJlZ2lzdHJ5LmpzXCI7XG5pbXBvcnQgdHlwZSB7IFBlcnNvbmFIYW5kbGVyIH0gZnJvbSBcIi4vaGFuZGxlcnMvUGVyc29uYUhhbmRsZXIuanNcIjtcbmltcG9ydCB0eXBlIHsgRWxlbWVudENSVURIYW5kbGVyIH0gZnJvbSBcIi4vaGFuZGxlcnMvRWxlbWVudENSVURIYW5kbGVyLmpzXCI7XG5pbXBvcnQgdHlwZSB7IENvbGxlY3Rpb25IYW5kbGVyIH0gZnJvbSBcIi4vaGFuZGxlcnMvQ29sbGVjdGlvbkhhbmRsZXIuanNcIjtcbmltcG9ydCB0eXBlIHsgUG9ydGZvbGlvSGFuZGxlciB9IGZyb20gXCIuL2hhbmRsZXJzL1BvcnRmb2xpb0hhbmRsZXIuanNcIjtcbmltcG9ydCB0eXBlIHsgR2l0SHViQXV0aEhhbmRsZXIgfSBmcm9tIFwiLi9oYW5kbGVycy9HaXRIdWJBdXRoSGFuZGxlci5qc1wiO1xuaW1wb3J0IHR5cGUgeyBEaXNwbGF5Q29uZmlnSGFuZGxlciB9IGZyb20gXCIuL2hhbmRsZXJzL0Rpc3BsYXlDb25maWdIYW5kbGVyLmpzXCI7XG5pbXBvcnQgdHlwZSB7IElkZW50aXR5SGFuZGxlciB9IGZyb20gXCIuL2hhbmRsZXJzL0lkZW50aXR5SGFuZGxlci5qc1wiO1xuaW1wb3J0IHR5cGUgeyBDb25maWdIYW5kbGVyIH0gZnJvbSBcIi4vaGFuZGxlcnMvQ29uZmlnSGFuZGxlci5qc1wiO1xuaW1wb3J0IHR5cGUgeyBTeW5jSGFuZGxlciB9IGZyb20gXCIuL2hhbmRsZXJzL1N5bmNIYW5kbGVyVjIuanNcIjtcbmltcG9ydCB0eXBlIHsgRW5oYW5jZWRJbmRleEhhbmRsZXIgfSBmcm9tIFwiLi9oYW5kbGVycy9FbmhhbmNlZEluZGV4SGFuZGxlci5qc1wiO1xuaW1wb3J0IHsgQ29uZmlnTWFuYWdlciB9IGZyb20gXCIuL2NvbmZpZy9Db25maWdNYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBGaWxlT3BlcmF0aW9uc1NlcnZpY2UgfSBmcm9tIFwiLi9zZXJ2aWNlcy9GaWxlT3BlcmF0aW9uc1NlcnZpY2UuanNcIjtcbmltcG9ydCB7IEZpbGVMb2NrTWFuYWdlciB9IGZyb20gXCIuL3NlY3VyaXR5L2ZpbGVMb2NrTWFuYWdlci5qc1wiO1xuaW1wb3J0ICogYXMgb3MgZnJvbSBcIm9zXCI7XG5pbXBvcnQgdHlwZSB7IEVuc2VtYmxlRWxlbWVudCB9IGZyb20gXCIuL2VsZW1lbnRzL2Vuc2VtYmxlcy90eXBlcy5qc1wiO1xuXG4vLyBEZWZlbnNpdmUgZXJyb3IgaGFuZGxpbmcgZm9yIG5weC9DTEkgZXhlY3V0aW9uXG5wcm9jZXNzLm9uKCd1bmNhdWdodEV4Y2VwdGlvbicsIChlcnJvcikgPT4ge1xuICBsb2dnZXIuZXJyb3IoJ1VuaGFuZGxlZCBleGNlcHRpb24gZGV0ZWN0ZWQnLCB7XG4gICAgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSxcbiAgICBzdGFjazogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLnN0YWNrIDogdW5kZWZpbmVkXG4gIH0pO1xuICBjb25zb2xlLmVycm9yKCdbRG9sbGhvdXNlTUNQXSBTZXJ2ZXIgc3RhcnR1cCBmYWlsZWQnKTtcbiAgcHJvY2Vzcy5leGl0KDEpO1xufSk7XG5cbnByb2Nlc3Mub24oJ3VuaGFuZGxlZFJlamVjdGlvbicsIChyZWFzb24sIHByb21pc2UpID0+IHtcbiAgbG9nZ2VyLmVycm9yKCdVbmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb24gZGV0ZWN0ZWQnLCB7XG4gICAgcmVhc29uOiByZWFzb24gaW5zdGFuY2VvZiBFcnJvciA/IHJlYXNvbi5tZXNzYWdlIDogU3RyaW5nKHJlYXNvbiksXG4gICAgc3RhY2s6IHJlYXNvbiBpbnN0YW5jZW9mIEVycm9yID8gcmVhc29uLnN0YWNrIDogdW5kZWZpbmVkLFxuICAgIHByb21pc2VcbiAgfSk7XG4gIGNvbnNvbGUuZXJyb3IoJ1tEb2xsaG91c2VNQ1BdIFNlcnZlciBzdGFydHVwIGZhaWxlZCcpO1xuICBwcm9jZXNzLmV4aXQoMSk7XG59KTtcblxuLy8gT25seSBsb2cgZXhlY3V0aW9uIGVudmlyb25tZW50IGluIGRlYnVnIG1vZGVcbmlmIChwcm9jZXNzLmVudi5ET0xMSE9VU0VfREVCVUcpIHtcbiAgY29uc29sZS5lcnJvcignW0RvbGxob3VzZU1DUF0gRGVidWcgbW9kZSBlbmFibGVkJyk7XG59XG5cbmV4cG9ydCBjbGFzcyBEb2xsaG91c2VNQ1BTZXJ2ZXIgaW1wbGVtZW50cyBJVG9vbEhhbmRsZXIge1xuICBwcml2YXRlIHNlcnZlcjogU2VydmVyO1xuICBwdWJsaWMgcGVyc29uYXNEaXI6IHN0cmluZyB8IG51bGw7XG4gIHByaXZhdGUgY3VycmVudFVzZXI6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGlzSW5pdGlhbGl6ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBpbml0aWFsaXphdGlvblByb21pc2U6IFByb21pc2U8dm9pZD4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBjb250YWluZXI6IERvbGxob3VzZUNvbnRhaW5lcjtcbiAgcHJpdmF0ZSB0b29sUmVnaXN0cnk/OiBUb29sUmVnaXN0cnk7XG4gIHByaXZhdGUgZW5oYW5jZWRJbmRleEhhbmRsZXI/OiBFbmhhbmNlZEluZGV4SGFuZGxlcjtcbiAgcHJpdmF0ZSBwZXJzb25hSGFuZGxlcj86IFBlcnNvbmFIYW5kbGVyO1xuICBwcml2YXRlIGVsZW1lbnRDUlVESGFuZGxlcj86IEVsZW1lbnRDUlVESGFuZGxlcjtcbiAgcHJpdmF0ZSBjb2xsZWN0aW9uSGFuZGxlcj86IENvbGxlY3Rpb25IYW5kbGVyO1xuICBwcml2YXRlIHBvcnRmb2xpb0hhbmRsZXI/OiBQb3J0Zm9saW9IYW5kbGVyO1xuICBwcml2YXRlIGdpdGh1YkF1dGhIYW5kbGVyPzogR2l0SHViQXV0aEhhbmRsZXI7XG4gIHByaXZhdGUgZGlzcGxheUNvbmZpZ0hhbmRsZXI/OiBEaXNwbGF5Q29uZmlnSGFuZGxlcjtcbiAgcHJpdmF0ZSBpZGVudGl0eUhhbmRsZXI/OiBJZGVudGl0eUhhbmRsZXI7XG4gIHByaXZhdGUgY29uZmlnSGFuZGxlcj86IENvbmZpZ0hhbmRsZXI7XG4gIHByaXZhdGUgc3luY0hhbmRsZXI/OiBTeW5jSGFuZGxlcjtcbiAgcHJpdmF0ZSByZXNvdXJjZUhhbmRsZXI/OiBpbXBvcnQoJy4vaGFuZGxlcnMvUmVzb3VyY2VIYW5kbGVyLmpzJykuUmVzb3VyY2VIYW5kbGVyO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgRG9sbGhvdXNlTUNQU2VydmVyIGluc3RhbmNlXG4gICAqXG4gICAqIEBwYXJhbSBjb250YWluZXIgRG9sbGhvdXNlQ29udGFpbmVyIGluc3RhbmNlIGZvciBkZXBlbmRlbmN5IGluamVjdGlvbi5cbiAgICogICAgICAgICAgICAgICAgICBVc2UgYG5ldyBEb2xsaG91c2VDb250YWluZXIoKWAgZm9yIHByb2R1Y3Rpb24gb3JcbiAgICogICAgICAgICAgICAgICAgICBgY3JlYXRlSW50ZWdyYXRpb25Db250YWluZXIoKS5jb250YWluZXJgIGZvciB0ZXN0cy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGNvbnRhaW5lcjogRG9sbGhvdXNlQ29udGFpbmVyKSB7XG4gICAgLy8gQnVpbGQgY2FwYWJpbGl0aWVzIG9iamVjdCBjb25kaXRpb25hbGx5IGJhc2VkIG9uIGNvbmZpZ3VyYXRpb25cbiAgICAvLyBSZXNvdXJjZXMgYXJlIGRpc2FibGVkIGJ5IGRlZmF1bHQgKGFkdmVydGlzZV9yZXNvdXJjZXM6IGZhbHNlKVxuICAgIGNvbnN0IGNhcGFiaWxpdGllczogYW55ID0ge1xuICAgICAgdG9vbHM6IHt9LFxuICAgIH07XG5cbiAgICAvLyBDaGVjayBpZiByZXNvdXJjZXMgc2hvdWxkIGJlIGFkdmVydGlzZWRcbiAgICAvLyBUaGlzIGlzIGEgZnV0dXJlLXByb29mIGltcGxlbWVudGF0aW9uIC0gcmVzb3VyY2VzIGFyZSBvcHQtaW5cbiAgICB0cnkge1xuICAgICAgLy8gSW5pdGlhbGl6ZSBDb25maWdNYW5hZ2VyIHRvIGNoZWNrIHJlc291cmNlIHNldHRpbmdzXG4gICAgICAvLyBOb3RlOiBDb25maWcgbWF5IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZCB5ZXQsIHNvIHdlIGNoZWNrIHN5bmNocm9ub3VzbHlcbiAgICAgIC8vIElmIGNvbmZpZyBpcyBub3QgaW5pdGlhbGl6ZWQsIGRlZmF1bHRzIChhZHZlcnRpc2VfcmVzb3VyY2VzOiBmYWxzZSkgYXBwbHlcbiAgICAgIGNvbnN0IGZpbGVMb2NrTWFuYWdlciA9IG5ldyBGaWxlTG9ja01hbmFnZXIoKTtcbiAgICAgIGNvbnN0IGZpbGVPcGVyYXRpb25zID0gbmV3IEZpbGVPcGVyYXRpb25zU2VydmljZShmaWxlTG9ja01hbmFnZXIpO1xuICAgICAgY29uc3QgY29uZmlnTWFuYWdlciA9IG5ldyBDb25maWdNYW5hZ2VyKGZpbGVPcGVyYXRpb25zLCBvcyk7XG4gICAgICBjb25zdCByZXNvdXJjZXNDb25maWcgPSBjb25maWdNYW5hZ2VyLmdldFNldHRpbmc8YW55PignZWxlbWVudHMuZW5oYW5jZWRfaW5kZXgucmVzb3VyY2VzJyk7XG5cbiAgICAgIGlmIChyZXNvdXJjZXNDb25maWc/LmFkdmVydGlzZV9yZXNvdXJjZXMgPT09IHRydWUpIHtcbiAgICAgICAgY2FwYWJpbGl0aWVzLnJlc291cmNlcyA9IHt9O1xuICAgICAgICBsb2dnZXIuaW5mbygnW0RvbGxob3VzZU1DUF0gTUNQIFJlc291cmNlcyBjYXBhYmlsaXR5IGFkdmVydGlzZWQgKGVuYWJsZWQgdmlhIGNvbmZpZyknKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKCdbRG9sbGhvdXNlTUNQXSBNQ1AgUmVzb3VyY2VzIGNhcGFiaWxpdHkgTk9UIGFkdmVydGlzZWQgKGRpc2FibGVkIGJ5IGRlZmF1bHQpJyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIENvbmZpZyBub3QgaW5pdGlhbGl6ZWQgeWV0IC0gdXNlIHNhZmUgZGVmYXVsdCAobm8gcmVzb3VyY2VzKVxuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpO1xuICAgICAgbG9nZ2VyLmRlYnVnKGBbRG9sbGhvdXNlTUNQXSBDb25maWcgbm90IGluaXRpYWxpemVkIHlldCwgcmVzb3VyY2VzIGNhcGFiaWxpdHkgZGlzYWJsZWQgYnkgZGVmYXVsdDogJHtlcnJvck1lc3NhZ2V9YCk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXJ2ZXIgPSBuZXcgU2VydmVyKFxuICAgICAge1xuICAgICAgICBuYW1lOiBcImRvbGxob3VzZW1jcFwiLFxuICAgICAgICB2ZXJzaW9uOiBcIjEuMC4wLWJ1aWxkLTIwMjUwODE3LTE2MzAtcHI2MDZcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNhcGFiaWxpdGllcyxcbiAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5wZXJzb25hc0RpciA9IG51bGw7XG4gICAgdGhpcy5jdXJyZW50VXNlciA9IHByb2Nlc3MuZW52LkRPTExIT1VTRV9VU0VSIHx8IG51bGw7XG4gICAgdGhpcy5jb250YWluZXIgPSBjb250YWluZXI7XG4gIH1cbiAgXG4gIHByaXZhdGUgYXN5bmMgaW5pdGlhbGl6ZVBvcnRmb2xpbygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmNvbnRhaW5lci5wcmVwYXJlUG9ydGZvbGlvKCk7XG4gICAgdGhpcy5wZXJzb25hc0RpciA9IHRoaXMuY29udGFpbmVyLmdldFBlcnNvbmFzRGlyKCk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDb21wbGV0ZSBpbml0aWFsaXphdGlvbiBhZnRlciBwb3J0Zm9saW8gaXMgcmVhZHlcbiAgICogRklYICM2MTA6IFRoaXMgd2FzIHByZXZpb3VzbHkgaW4gYSAudGhlbigpIGNhbGxiYWNrIGluIHRoZSBjb25zdHJ1Y3RvclxuICAgKiBOb3cgY2FsbGVkIHN5bmNocm9ub3VzbHkgZnJvbSBydW4oKSB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9uXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGNvbXBsZXRlSW5pdGlhbGl6YXRpb24oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gQ3JlYXRlIGhhbmRsZXJzIHdpdGggc2VydmVyIGluc3RhbmNlIC0gYWxsIHN0YXRlIG1hbmFnZWQgYnkgc2VydmljZXNcbiAgICBjb25zdCBoYW5kbGVycyA9IGF3YWl0IHRoaXMuY29udGFpbmVyLmNyZWF0ZUhhbmRsZXJzKHRoaXMuc2VydmVyKTtcblxuICAgIHRoaXMucGVyc29uYUhhbmRsZXIgPSBoYW5kbGVycy5wZXJzb25hSGFuZGxlcjtcbiAgICB0aGlzLmVsZW1lbnRDUlVESGFuZGxlciA9IGhhbmRsZXJzLmVsZW1lbnRDcnVkSGFuZGxlcjtcbiAgICB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyID0gaGFuZGxlcnMuY29sbGVjdGlvbkhhbmRsZXI7XG4gICAgdGhpcy5wb3J0Zm9saW9IYW5kbGVyID0gaGFuZGxlcnMucG9ydGZvbGlvSGFuZGxlcjtcbiAgICB0aGlzLmdpdGh1YkF1dGhIYW5kbGVyID0gaGFuZGxlcnMuZ2l0aHViQXV0aEhhbmRsZXI7XG4gICAgdGhpcy5kaXNwbGF5Q29uZmlnSGFuZGxlciA9IGhhbmRsZXJzLmRpc3BsYXlDb25maWdIYW5kbGVyO1xuICAgIHRoaXMuaWRlbnRpdHlIYW5kbGVyID0gaGFuZGxlcnMuaWRlbnRpdHlIYW5kbGVyO1xuICAgIHRoaXMuY29uZmlnSGFuZGxlciA9IGhhbmRsZXJzLmNvbmZpZ0hhbmRsZXI7XG4gICAgdGhpcy5zeW5jSGFuZGxlciA9IGhhbmRsZXJzLnN5bmNIYW5kbGVyO1xuICAgIHRoaXMudG9vbFJlZ2lzdHJ5ID0gaGFuZGxlcnMudG9vbFJlZ2lzdHJ5O1xuICAgIHRoaXMuZW5oYW5jZWRJbmRleEhhbmRsZXIgPSBoYW5kbGVycy5lbmhhbmNlZEluZGV4SGFuZGxlcjtcblxuICAgIC8vIEluaXRpYWxpemUgYW5kIHJlZ2lzdGVyIHJlc291cmNlIGhhbmRsZXJzXG4gICAgLy8gUmVzb3VyY2VzIGFyZSBkaXNhYmxlZCBieSBkZWZhdWx0IGFuZCByZXF1aXJlIGV4cGxpY2l0IGNvbmZpZ3VyYXRpb25cbiAgICBhd2FpdCB0aGlzLmluaXRpYWxpemVSZXNvdXJjZUhhbmRsZXJzKCk7XG5cbiAgICB0aGlzLmlzSW5pdGlhbGl6ZWQgPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgTUNQIFJlc291cmNlcyBoYW5kbGVycyBpZiBlbmFibGVkIGluIGNvbmZpZ3VyYXRpb25cbiAgICogVGhpcyBpcyBzZXBhcmF0ZSBmcm9tIG90aGVyIGhhbmRsZXJzIGJlY2F1c2UgaXQgcmVxdWlyZXMgZHluYW1pYyBpbXBvcnRcbiAgICogYW5kIGNvbmRpdGlvbmFsIHJlZ2lzdHJhdGlvbiBiYXNlZCBvbiBjb25maWd1cmF0aW9uXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGluaXRpYWxpemVSZXNvdXJjZUhhbmRsZXJzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IFJlc291cmNlSGFuZGxlciB9ID0gYXdhaXQgaW1wb3J0KCcuL2hhbmRsZXJzL1Jlc291cmNlSGFuZGxlci5qcycpO1xuICAgICAgY29uc3QgY29uZmlnTWFuYWdlciA9IHRoaXMuY29udGFpbmVyLnJlc29sdmU8Q29uZmlnTWFuYWdlcj4oJ0NvbmZpZ01hbmFnZXInKTtcblxuICAgICAgdGhpcy5yZXNvdXJjZUhhbmRsZXIgPSBuZXcgUmVzb3VyY2VIYW5kbGVyKGNvbmZpZ01hbmFnZXIpO1xuICAgICAgYXdhaXQgdGhpcy5yZXNvdXJjZUhhbmRsZXIuaW5pdGlhbGl6ZSh0aGlzLnNlcnZlcik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIFJlc291cmNlcyBhcmUgb3B0aW9uYWwgLSBkb24ndCBmYWlsIHNlcnZlciBzdGFydHVwIGlmIHRoZXkgY2FuJ3QgYmUgaW5pdGlhbGl6ZWRcbiAgICAgIGxvZ2dlci53YXJuKCdbRG9sbGhvdXNlTUNQXSBGYWlsZWQgdG8gaW5pdGlhbGl6ZSByZXNvdXJjZSBoYW5kbGVycywgY29udGludWluZyB3aXRob3V0IHJlc291cmNlcycpO1xuICAgICAgbG9nZ2VyLmRlYnVnKGBSZXNvdXJjZSBpbml0aWFsaXphdGlvbiBlcnJvcjogJHtlcnJvcn1gKTtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBFbnN1cmUgc2VydmVyIGlzIGluaXRpYWxpemVkIGJlZm9yZSBhbnkgb3BlcmF0aW9uXG4gICAqIEZJWCAjNjEwOiBBZGRlZCBmb3IgdGVzdCBjb21wYXRpYmlsaXR5IC0gdGVzdHMgZG9uJ3QgY2FsbCBydW4oKVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBlbnN1cmVJbml0aWFsaXplZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5pc0luaXRpYWxpemVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIC8vIElmIGluaXRpYWxpemF0aW9uIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MsIHdhaXQgZm9yIGl0XG4gICAgaWYgKHRoaXMuaW5pdGlhbGl6YXRpb25Qcm9taXNlKSB7XG4gICAgICBhd2FpdCB0aGlzLmluaXRpYWxpemF0aW9uUHJvbWlzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgLy8gU3RhcnQgaW5pdGlhbGl6YXRpb25cbiAgICB0aGlzLmluaXRpYWxpemF0aW9uUHJvbWlzZSA9IChhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLmluaXRpYWxpemVQb3J0Zm9saW8oKTtcbiAgICAgICAgYXdhaXQgdGhpcy5jb21wbGV0ZUluaXRpYWxpemF0aW9uKCk7XG4gICAgICAgIGxvZ2dlci5pbmZvKFwiUG9ydGZvbGlvIGFuZCBwZXJzb25hcyBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkgKGxhenkpXCIpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgRXJyb3JIYW5kbGVyLmxvZ0Vycm9yKCdEb2xsaG91c2VNQ1BTZXJ2ZXIuZW5zdXJlSW5pdGlhbGl6ZWQnLCBlcnJvcik7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH0pKCk7XG4gICAgXG4gICAgYXdhaXQgdGhpcy5pbml0aWFsaXphdGlvblByb21pc2U7XG4gIH1cbiAgXG4gIC8vIFRvb2wgaGFuZGxlciBtZXRob2RzIC0gbm93IHB1YmxpYyBmb3IgYWNjZXNzIGZyb20gdG9vbCBtb2R1bGVzXG4gIFxuICBhc3luYyBsaXN0UGVyc29uYXMoKSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLnBlcnNvbmFIYW5kbGVyIS5saXN0UGVyc29uYXMoKTtcbiAgfVxuXG4gIC8vID09PT09IFJFTU9WRUQ6IExlZ2FjeSBwZXJzb25hLXNwZWNpZmljIG1ldGhvZHMgKElzc3VlICMyODEpID09PT09XG4gIC8vIFVzZSBhY3RpdmF0ZUVsZW1lbnQobmFtZSwgJ3BlcnNvbmEnKSwgZGVhY3RpdmF0ZUVsZW1lbnQobmFtZSwgJ3BlcnNvbmEnKSxcbiAgLy8gZ2V0QWN0aXZlRWxlbWVudHMoJ3BlcnNvbmEnKSwgYW5kIGdldEVsZW1lbnREZXRhaWxzKG5hbWUsICdwZXJzb25hJykgaW5zdGVhZC5cbiAgLy8gVGhlc2Ugd2VyZSByZW1vdmVkIHRvIG5vcm1hbGl6ZSBwZXJzb25hIGhhbmRsaW5nIHRocm91Z2ggdGhlIGdlbmVyaWMgZWxlbWVudCBBUEkuXG5cbiAgYXN5bmMgcmVsb2FkUGVyc29uYXMoKSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLnBlcnNvbmFIYW5kbGVyIS5yZWxvYWRQZXJzb25hcygpO1xuICB9XG5cbiAgLy8gPT09PT0gRWxlbWVudCBNZXRob2RzIChHZW5lcmljIGZvciBhbGwgZWxlbWVudCB0eXBlcykgPT09PT1cbiAgXG4gIGFzeW5jIGxpc3RFbGVtZW50cyh0eXBlOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgbm9ybWFsaXplZFR5cGUgPSB0aGlzLmVsZW1lbnRDUlVESGFuZGxlciEubm9ybWFsaXplRWxlbWVudFR5cGUodHlwZSk7XG4gICAgICBpZiAobm9ybWFsaXplZFR5cGUgPT09IEVsZW1lbnRUeXBlLlBFUlNPTkEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGlzdFBlcnNvbmFzKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5lbGVtZW50Q1JVREhhbmRsZXIhLmxpc3RFbGVtZW50cyhub3JtYWxpemVkVHlwZSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIEVycm9ySGFuZGxlci5sb2dFcnJvcignRG9sbGhvdXNlTUNQU2VydmVyLmxpc3RFbGVtZW50cycsIGVycm9yLCB7IHR5cGUgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGDinYwgRmFpbGVkIHRvIGxpc3QgJHt0eXBlfTogJHtFcnJvckhhbmRsZXIuZ2V0VXNlck1lc3NhZ2UoZXJyb3IpfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG4gIFxuICBhc3luYyBhY3RpdmF0ZUVsZW1lbnQobmFtZTogc3RyaW5nLCB0eXBlOiBzdHJpbmcsIGNvbnRleHQ/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEZJWDogSXNzdWUgIzI4MSAtIFJvdXRlIGFsbCBlbGVtZW50IHR5cGVzIHRocm91Z2ggZWxlbWVudENSVURIYW5kbGVyXG4gICAgICAvLyBQZXJzb25hSGFuZGxlci5hY3RpdmF0ZVBlcnNvbmEgaXMgZGVwcmVjYXRlZDsgUGVyc29uYUFjdGl2YXRpb25TdHJhdGVneSBoYW5kbGVzIHBlcnNvbmFzXG4gICAgICBjb25zdCBub3JtYWxpemVkVHlwZSA9IHRoaXMuZWxlbWVudENSVURIYW5kbGVyIS5ub3JtYWxpemVFbGVtZW50VHlwZSh0eXBlKTtcbiAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRDUlVESGFuZGxlciEuYWN0aXZhdGVFbGVtZW50KG5hbWUsIG5vcm1hbGl6ZWRUeXBlLCBjb250ZXh0KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgRXJyb3JIYW5kbGVyLmxvZ0Vycm9yKCdEb2xsaG91c2VNQ1BTZXJ2ZXIuYWN0aXZhdGVFbGVtZW50JywgZXJyb3IsIHsgdHlwZSwgbmFtZSB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYOKdjCBGYWlsZWQgdG8gYWN0aXZhdGUgJHt0eXBlfSAnJHtuYW1lfSc6ICR7RXJyb3JIYW5kbGVyLmdldFVzZXJNZXNzYWdlKGVycm9yKX1gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBcbiAgYXN5bmMgZ2V0QWN0aXZlRWxlbWVudHModHlwZTogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEZJWDogSXNzdWUgIzI4MSAtIFJvdXRlIGFsbCBlbGVtZW50IHR5cGVzIHRocm91Z2ggZWxlbWVudENSVURIYW5kbGVyXG4gICAgICAvLyBQZXJzb25hSGFuZGxlci5nZXRBY3RpdmVQZXJzb25hIGlzIGRlcHJlY2F0ZWQ7IFBlcnNvbmFBY3RpdmF0aW9uU3RyYXRlZ3kgaGFuZGxlcyBwZXJzb25hc1xuICAgICAgY29uc3Qgbm9ybWFsaXplZFR5cGUgPSB0aGlzLmVsZW1lbnRDUlVESGFuZGxlciEubm9ybWFsaXplRWxlbWVudFR5cGUodHlwZSk7XG4gICAgICByZXR1cm4gdGhpcy5lbGVtZW50Q1JVREhhbmRsZXIhLmdldEFjdGl2ZUVsZW1lbnRzKG5vcm1hbGl6ZWRUeXBlKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgRXJyb3JIYW5kbGVyLmxvZ0Vycm9yKCdEb2xsaG91c2VNQ1BTZXJ2ZXIuZ2V0QWN0aXZlRWxlbWVudHMnLCBlcnJvciwgeyB0eXBlIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBg4p2MIEZhaWxlZCB0byBnZXQgYWN0aXZlICR7dHlwZX06ICR7RXJyb3JIYW5kbGVyLmdldFVzZXJNZXNzYWdlKGVycm9yKX1gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBcbiAgYXN5bmMgZGVhY3RpdmF0ZUVsZW1lbnQobmFtZTogc3RyaW5nLCB0eXBlOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgLy8gRklYOiBJc3N1ZSAjMjgxIC0gUm91dGUgYWxsIGVsZW1lbnQgdHlwZXMgdGhyb3VnaCBlbGVtZW50Q1JVREhhbmRsZXJcbiAgICAgIC8vIFBlcnNvbmFIYW5kbGVyLmRlYWN0aXZhdGVQZXJzb25hIGlzIGRlcHJlY2F0ZWQ7IFBlcnNvbmFBY3RpdmF0aW9uU3RyYXRlZ3kgaGFuZGxlcyBwZXJzb25hc1xuICAgICAgY29uc3Qgbm9ybWFsaXplZFR5cGUgPSB0aGlzLmVsZW1lbnRDUlVESGFuZGxlciEubm9ybWFsaXplRWxlbWVudFR5cGUodHlwZSk7XG4gICAgICByZXR1cm4gdGhpcy5lbGVtZW50Q1JVREhhbmRsZXIhLmRlYWN0aXZhdGVFbGVtZW50KG5hbWUsIG5vcm1hbGl6ZWRUeXBlKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgRXJyb3JIYW5kbGVyLmxvZ0Vycm9yKCdEb2xsaG91c2VNQ1BTZXJ2ZXIuZGVhY3RpdmF0ZUVsZW1lbnQnLCBlcnJvciwgeyB0eXBlLCBuYW1lIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBg4p2MIEZhaWxlZCB0byBkZWFjdGl2YXRlICR7dHlwZX0gJyR7bmFtZX0nOiAke0Vycm9ySGFuZGxlci5nZXRVc2VyTWVzc2FnZShlcnJvcil9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgXG4gIGFzeW5jIGdldEVsZW1lbnREZXRhaWxzKG5hbWU6IHN0cmluZywgdHlwZTogc3RyaW5nKSB7XG4gICAgLy8gRklYOiBJc3N1ZSAjMjc2IC0gUm91dGUgYWxsIGVsZW1lbnQgdHlwZXMgdGhyb3VnaCBlbGVtZW50Q1JVREhhbmRsZXIgZm9yIGNvbnNpc3RlbnQgZXJyb3IgaGFuZGxpbmdcbiAgICAvLyBQZXJzb25hSGFuZGxlci5nZXRQZXJzb25hRGV0YWlscyBpcyBkZXByZWNhdGVkOyBQZXJzb25hQWN0aXZhdGlvblN0cmF0ZWd5IGhhbmRsZXMgcGVyc29uYXNcbiAgICBjb25zdCBub3JtYWxpemVkVHlwZSA9IHRoaXMuZWxlbWVudENSVURIYW5kbGVyIS5ub3JtYWxpemVFbGVtZW50VHlwZSh0eXBlKTtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50Q1JVREhhbmRsZXIhLmdldEVsZW1lbnREZXRhaWxzKG5hbWUsIG5vcm1hbGl6ZWRUeXBlKTtcbiAgfVxuICBcbiAgYXN5bmMgcmVsb2FkRWxlbWVudHModHlwZTogc3RyaW5nKSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnRDUlVESGFuZGxlciEucmVsb2FkRWxlbWVudHModHlwZSk7XG4gIH1cblxuICAvLyBFbGVtZW50LXNwZWNpZmljIG1ldGhvZHNcbiAgYXN5bmMgcmVuZGVyVGVtcGxhdGUobmFtZTogc3RyaW5nLCB2YXJpYWJsZXM6IFJlY29yZDxzdHJpbmcsIGFueT4pIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudENSVURIYW5kbGVyIS5yZW5kZXJUZW1wbGF0ZShuYW1lLCB2YXJpYWJsZXMpO1xuICB9XG5cbiAgYXN5bmMgZXhlY3V0ZUFnZW50KG5hbWU6IHN0cmluZywgcGFyYW1ldGVyczogUmVjb3JkPHN0cmluZywgYW55Pikge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50Q1JVREhhbmRsZXIhLmV4ZWN1dGVBZ2VudChuYW1lLCBwYXJhbWV0ZXJzKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBlbGVtZW50IGluIHRoZSBwb3J0Zm9saW8uXG4gICAqIEBwYXJhbSBhcmdzLmVsZW1lbnRzIC0gRm9yIGVuc2VtYmxlczogYXJyYXkgb2YgZWxlbWVudCByZWZlcmVuY2VzIChJc3N1ZSAjMjc4KVxuICAgKi9cbiAgYXN5bmMgY3JlYXRlRWxlbWVudChhcmdzOiB7bmFtZTogc3RyaW5nOyB0eXBlOiBzdHJpbmc7IGRlc2NyaXB0aW9uOiBzdHJpbmc7IGNvbnRlbnQ/OiBzdHJpbmc7IGluc3RydWN0aW9ucz86IHN0cmluZzsgbWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjsgZWxlbWVudHM/OiBFbnNlbWJsZUVsZW1lbnRbXX0pIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgLy8gRklYOiBJc3N1ZSAjMjAgLSBSZW1vdmUgcGVyc29uYSBzcGVjaWFsIGNhc2UsIHJvdXRlIGFsbCBlbGVtZW50IGNyZWF0aW9uIHRocm91Z2ggRWxlbWVudENSVURIYW5kbGVyXG4gICAgLy8gVGhpcyBlbnN1cmVzIGNvbnNpc3RlbnQgZHVwbGljYXRlIGNoZWNraW5nIGFuZCBlcnJvciBoYW5kbGluZyBmb3IgYWxsIGVsZW1lbnQgdHlwZXNcbiAgICAvLyBGSVg6IElzc3VlICMyNzggLSBTdXBwb3J0IGVsZW1lbnRzIHBhcmFtZXRlciBmb3IgZW5zZW1ibGVzXG4gICAgY29uc3Qgbm9ybWFsaXplZFR5cGUgPSB0aGlzLmVsZW1lbnRDUlVESGFuZGxlciEubm9ybWFsaXplRWxlbWVudFR5cGUoYXJncy50eXBlKTtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50Q1JVREhhbmRsZXIhLmNyZWF0ZUVsZW1lbnQoey4uLmFyZ3MsIHR5cGU6IG5vcm1hbGl6ZWRUeXBlfSk7XG4gIH1cblxuICBhc3luYyBlZGl0RWxlbWVudChhcmdzOiB7bmFtZTogc3RyaW5nOyB0eXBlOiBzdHJpbmc7IGlucHV0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0pIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgLy8gRklYOiBJc3N1ZSAjMjc2IC0gUm91dGUgYWxsIGVsZW1lbnQgdHlwZXMgdGhyb3VnaCBlbGVtZW50Q1JVREhhbmRsZXIgZm9yIGNvbnNpc3RlbnQgZXJyb3IgaGFuZGxpbmdcbiAgICAvLyBQZXJzb25hSGFuZGxlci5lZGl0UGVyc29uYSBpcyBkZXByZWNhdGVkOyBlbGVtZW50Q1JVREhhbmRsZXIgaGFuZGxlcyBwZXJzb25hcyB2aWEgUGVyc29uYUFjdGl2YXRpb25TdHJhdGVneVxuICAgIGNvbnN0IG5vcm1hbGl6ZWRUeXBlID0gdGhpcy5lbGVtZW50Q1JVREhhbmRsZXIhLm5vcm1hbGl6ZUVsZW1lbnRUeXBlKGFyZ3MudHlwZSk7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudENSVURIYW5kbGVyIS5lZGl0RWxlbWVudCh7Li4uYXJncywgdHlwZTogbm9ybWFsaXplZFR5cGV9KTtcbiAgfVxuXG4gIGFzeW5jIHZhbGlkYXRlRWxlbWVudChhcmdzOiB7bmFtZTogc3RyaW5nOyB0eXBlOiBzdHJpbmc7IHN0cmljdD86IGJvb2xlYW59KSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIC8vIEZJWDogSXNzdWUgIzI3NiAtIFJvdXRlIGFsbCBlbGVtZW50IHR5cGVzIHRocm91Z2ggZWxlbWVudENSVURIYW5kbGVyIGZvciBjb25zaXN0ZW50IGVycm9yIGhhbmRsaW5nXG4gICAgLy8gUGVyc29uYUhhbmRsZXIudmFsaWRhdGVQZXJzb25hIGlzIGRlcHJlY2F0ZWQ7IGVsZW1lbnRDUlVESGFuZGxlciBoYW5kbGVzIHBlcnNvbmFzXG4gICAgY29uc3Qgbm9ybWFsaXplZFR5cGUgPSB0aGlzLmVsZW1lbnRDUlVESGFuZGxlciEubm9ybWFsaXplRWxlbWVudFR5cGUoYXJncy50eXBlKTtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50Q1JVREhhbmRsZXIhLnZhbGlkYXRlRWxlbWVudCh7Li4uYXJncywgdHlwZTogbm9ybWFsaXplZFR5cGV9KTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUVsZW1lbnQoYXJnczoge25hbWU6IHN0cmluZzsgdHlwZTogc3RyaW5nOyBkZWxldGVEYXRhPzogYm9vbGVhbn0pIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgLy8gRklYOiBJc3N1ZSAjMjc2IC0gUm91dGUgYWxsIGVsZW1lbnQgdHlwZXMgdGhyb3VnaCBlbGVtZW50Q1JVREhhbmRsZXIgZm9yIGNvbnNpc3RlbnQgZXJyb3IgaGFuZGxpbmdcbiAgICAvLyBQZXJzb25hSGFuZGxlci5kZWxldGVQZXJzb25hIGlzIGRlcHJlY2F0ZWQ7IGVsZW1lbnRDUlVESGFuZGxlciBoYW5kbGVzIHBlcnNvbmFzIHZpYSBkZWRpY2F0ZWQgZGVsZXRlIHBhdGhcbiAgICBjb25zdCBub3JtYWxpemVkVHlwZSA9IHRoaXMuZWxlbWVudENSVURIYW5kbGVyIS5ub3JtYWxpemVFbGVtZW50VHlwZShhcmdzLnR5cGUpO1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnRDUlVESGFuZGxlciEuZGVsZXRlRWxlbWVudCh7Li4uYXJncywgdHlwZTogbm9ybWFsaXplZFR5cGV9KTtcbiAgfVxuXG4gIGFzeW5jIGJyb3dzZUNvbGxlY3Rpb24oc2VjdGlvbj86IHN0cmluZywgdHlwZT86IHN0cmluZykge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlciEuYnJvd3NlQ29sbGVjdGlvbihzZWN0aW9uLCB0eXBlKTtcbiAgfVxuXG4gIGFzeW5jIHNlYXJjaENvbGxlY3Rpb24ocXVlcnk6IHN0cmluZykge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlciEuc2VhcmNoQ29sbGVjdGlvbihxdWVyeSk7XG4gIH1cblxuICBhc3luYyBzZWFyY2hDb2xsZWN0aW9uRW5oYW5jZWQocXVlcnk6IHN0cmluZywgb3B0aW9uczogYW55ID0ge30pIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIhLnNlYXJjaENvbGxlY3Rpb25FbmhhbmNlZChxdWVyeSwgb3B0aW9ucyk7XG4gIH1cblxuICBhc3luYyBnZXRDb2xsZWN0aW9uQ29udGVudChwYXRoOiBzdHJpbmcpIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIhLmdldENvbGxlY3Rpb25Db250ZW50KHBhdGgpO1xuICB9XG5cbiAgYXN5bmMgaW5zdGFsbENvbnRlbnQoaW5wdXRQYXRoOiBzdHJpbmcpIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIhLmluc3RhbGxDb250ZW50KGlucHV0UGF0aCk7XG4gIH1cblxuICBhc3luYyBzdWJtaXRDb250ZW50KGNvbnRlbnRJZGVudGlmaWVyOiBzdHJpbmcpIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIhLnN1Ym1pdENvbnRlbnQoY29udGVudElkZW50aWZpZXIpO1xuICB9XG5cbiAgYXN5bmMgZ2V0Q29sbGVjdGlvbkNhY2hlSGVhbHRoKCkge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlciEuZ2V0Q29sbGVjdGlvbkNhY2hlSGVhbHRoKCk7XG4gIH1cblxuICAvLyBVc2VyIGlkZW50aXR5IG1hbmFnZW1lbnQgLSBkZWxlZ2F0ZWQgdG8gSWRlbnRpdHlIYW5kbGVyXG4gIGFzeW5jIHNldFVzZXJJZGVudGl0eSh1c2VybmFtZTogc3RyaW5nLCBlbWFpbD86IHN0cmluZykge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5pZGVudGl0eUhhbmRsZXIhLnNldFVzZXJJZGVudGl0eSh1c2VybmFtZSwgZW1haWwpO1xuICB9XG5cbiAgYXN5bmMgZ2V0VXNlcklkZW50aXR5KCkge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5pZGVudGl0eUhhbmRsZXIhLmdldFVzZXJJZGVudGl0eSgpO1xuICB9XG5cbiAgYXN5bmMgY2xlYXJVc2VySWRlbnRpdHkoKSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLmlkZW50aXR5SGFuZGxlciEuY2xlYXJVc2VySWRlbnRpdHkoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q3VycmVudFVzZXJGb3JBdHRyaWJ1dGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmlkZW50aXR5SGFuZGxlciEuZ2V0Q3VycmVudFVzZXJGb3JBdHRyaWJ1dGlvbigpO1xuICB9XG5cbiAgLy8gR2l0SHViIGF1dGhlbnRpY2F0aW9uIG1hbmFnZW1lbnRcbiAgYXN5bmMgc2V0dXBHaXRIdWJBdXRoKCkge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5naXRodWJBdXRoSGFuZGxlciEuc2V0dXBHaXRIdWJBdXRoKCk7XG4gIH1cbiAgXG4gIGFzeW5jIGNoZWNrR2l0SHViQXV0aCgpIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMuZ2l0aHViQXV0aEhhbmRsZXIhLmNoZWNrR2l0SHViQXV0aCgpO1xuICB9XG4gIFxuICBhc3luYyBnZXRPQXV0aEhlbHBlclN0YXR1cyh2ZXJib3NlOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMuZ2l0aHViQXV0aEhhbmRsZXIhLmdldE9BdXRoSGVscGVyU3RhdHVzKHZlcmJvc2UpO1xuICB9XG4gIFxuXG4gIFxuICBhc3luYyBjbGVhckdpdEh1YkF1dGgoKSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLmdpdGh1YkF1dGhIYW5kbGVyIS5jbGVhckdpdEh1YkF1dGgoKTtcbiAgfVxuXG4gIC8vIE9BdXRoIGNvbmZpZ3VyYXRpb24gbWFuYWdlbWVudFxuICBhc3luYyBjb25maWd1cmVPQXV0aChjbGllbnRfaWQ/OiBzdHJpbmcpIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMuZ2l0aHViQXV0aEhhbmRsZXIhLmNvbmZpZ3VyZU9BdXRoKGNsaWVudF9pZCk7XG4gIH1cblxuICAvLyBSRU1PVkVEOiBjcmVhdGVQZXJzb25hKCkgLSB1c2UgY3JlYXRlRWxlbWVudCgpIHdpdGggdHlwZT0ncGVyc29uYScgaW5zdGVhZCAodjIgYnJlYWtpbmcgY2hhbmdlKVxuXG4gIC8vIHJldHJ5TmV0d29ya09wZXJhdGlvbiBoYXMgYmVlbiByZW1vdmVkIHdpdGggVXBkYXRlVG9vbHNcblxuXG5cblxuXG5cblxuXG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyZSBpbmRpY2F0b3Igc2V0dGluZ3MgKGRlbGVnYXRlZCB0byBEaXNwbGF5Q29uZmlnSGFuZGxlcilcbiAgICovXG4gIGFzeW5jIGNvbmZpZ3VyZUluZGljYXRvcihjb25maWc6IFBhcnRpYWw8SW5kaWNhdG9yQ29uZmlnPikge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5Q29uZmlnSGFuZGxlciEuY29uZmlndXJlSW5kaWNhdG9yKGNvbmZpZyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGN1cnJlbnQgaW5kaWNhdG9yIGNvbmZpZ3VyYXRpb24gKGRlbGVnYXRlZCB0byBEaXNwbGF5Q29uZmlnSGFuZGxlcilcbiAgICovXG4gIGFzeW5jIGdldEluZGljYXRvckNvbmZpZygpIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMuZGlzcGxheUNvbmZpZ0hhbmRsZXIhLmdldEluZGljYXRvckNvbmZpZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyZSBjb2xsZWN0aW9uIHN1Ym1pc3Npb24gc2V0dGluZ3MgKGRlbGVnYXRlZCB0byBDb2xsZWN0aW9uSGFuZGxlcilcbiAgICovXG4gIGFzeW5jIGNvbmZpZ3VyZUNvbGxlY3Rpb25TdWJtaXNzaW9uKGF1dG9TdWJtaXQ6IGJvb2xlYW4pIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIhLmNvbmZpZ3VyZUNvbGxlY3Rpb25TdWJtaXNzaW9uKGF1dG9TdWJtaXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjb2xsZWN0aW9uIHN1Ym1pc3Npb24gY29uZmlndXJhdGlvbiAoZGVsZWdhdGVkIHRvIENvbGxlY3Rpb25IYW5kbGVyKVxuICAgKi9cbiAgYXN5bmMgZ2V0Q29sbGVjdGlvblN1Ym1pc3Npb25Db25maWcoKSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyIS5nZXRDb2xsZWN0aW9uU3VibWlzc2lvbkNvbmZpZygpO1xuICB9XG5cblxuICAvKipcbiAgICogRXhwb3J0IGEgc2luZ2xlIHBlcnNvbmFcbiAgICovXG4gIGFzeW5jIGV4cG9ydFBlcnNvbmEocGVyc29uYU5hbWU6IHN0cmluZykge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5wZXJzb25hSGFuZGxlciEuZXhwb3J0UGVyc29uYShwZXJzb25hTmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogRXhwb3J0IGFsbCBwZXJzb25hc1xuICAgKi9cbiAgYXN5bmMgZXhwb3J0QWxsUGVyc29uYXMoaW5jbHVkZURlZmF1bHRzID0gdHJ1ZSkge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5wZXJzb25hSGFuZGxlciEuZXhwb3J0QWxsUGVyc29uYXMoaW5jbHVkZURlZmF1bHRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgYSBwZXJzb25hXG4gICAqL1xuICBhc3luYyBpbXBvcnRQZXJzb25hKHNvdXJjZTogc3RyaW5nLCBvdmVyd3JpdGUgPSBmYWxzZSkge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5wZXJzb25hSGFuZGxlciEuaW1wb3J0UGVyc29uYShzb3VyY2UsIG92ZXJ3cml0ZSk7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBQb3J0Zm9saW8gbWFuYWdlbWVudCBtZXRob2RzXG4gICAqL1xuXG4gIC8qKlxuICAgKiBDaGVjayBwb3J0Zm9saW8gc3RhdHVzIGluY2x1ZGluZyByZXBvc2l0b3J5IGV4aXN0ZW5jZSBhbmQgc3luYyBpbmZvcm1hdGlvblxuICAgKi9cbiAgYXN5bmMgcG9ydGZvbGlvU3RhdHVzKHVzZXJuYW1lPzogc3RyaW5nKSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLnBvcnRmb2xpb0hhbmRsZXIhLnBvcnRmb2xpb1N0YXR1cyh1c2VybmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSBhIG5ldyBHaXRIdWIgcG9ydGZvbGlvIHJlcG9zaXRvcnlcbiAgICovXG4gIGFzeW5jIGluaXRQb3J0Zm9saW8ob3B0aW9uczoge3JlcG9zaXRvcnlOYW1lPzogc3RyaW5nOyBwcml2YXRlPzogYm9vbGVhbjsgZGVzY3JpcHRpb24/OiBzdHJpbmd9KSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLnBvcnRmb2xpb0hhbmRsZXIhLmluaXRQb3J0Zm9saW8ob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogQ29uZmlndXJlIHBvcnRmb2xpbyBzZXR0aW5nc1xuICAgKi9cbiAgYXN5bmMgcG9ydGZvbGlvQ29uZmlnKG9wdGlvbnM6IHthdXRvU3luYz86IGJvb2xlYW47IGRlZmF1bHRWaXNpYmlsaXR5Pzogc3RyaW5nOyBhdXRvU3VibWl0PzogYm9vbGVhbjsgcmVwb3NpdG9yeU5hbWU/OiBzdHJpbmd9KSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLnBvcnRmb2xpb0hhbmRsZXIhLnBvcnRmb2xpb0NvbmZpZyhvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTeW5jIHBvcnRmb2xpbyB3aXRoIEdpdEh1YlxuICAgKi9cbiAgYXN5bmMgc3luY1BvcnRmb2xpbyhvcHRpb25zOiB7XG4gICAgZGlyZWN0aW9uOiBzdHJpbmc7XG4gICAgbW9kZT86IHN0cmluZztcbiAgICBmb3JjZTogYm9vbGVhbjtcbiAgICBkcnlSdW46IGJvb2xlYW47XG4gICAgY29uZmlybURlbGV0aW9ucz86IGJvb2xlYW47XG4gIH0pIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMucG9ydGZvbGlvSGFuZGxlciEuc3luY1BvcnRmb2xpbyhvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgY29uZmlndXJhdGlvbiBvcGVyYXRpb25zIC0gZGVsZWdhdGVzIHRvIENvbmZpZ0hhbmRsZXJcbiAgKi9cbiAgYXN5bmMgaGFuZGxlQ29uZmlnT3BlcmF0aW9uKG9wdGlvbnM6IGFueSkge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5jb25maWdIYW5kbGVyIS5oYW5kbGVDb25maWdPcGVyYXRpb24ob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIHN5bmMgb3BlcmF0aW9ucyAtIGRlbGVnYXRlcyB0byBTeW5jSGFuZGxlclxuICAgKi9cbiAgYXN5bmMgaGFuZGxlU3luY09wZXJhdGlvbihvcHRpb25zOiBhbnkpIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMuc3luY0hhbmRsZXIhLmhhbmRsZVN5bmNPcGVyYXRpb24ob3B0aW9ucyk7XG4gIH1cblxuICBhc3luYyBkaXNwb3NlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuY29udGFpbmVyLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2ggbG9jYWwgcG9ydGZvbGlvIHVzaW5nIHRoZSBtZXRhZGF0YSBpbmRleCBzeXN0ZW1cbiAgICogVGhpcyBwcm92aWRlcyBmYXN0LCBjb21wcmVoZW5zaXZlIHNlYXJjaCBhY3Jvc3MgYWxsIGVsZW1lbnQgdHlwZXNcbiAgICovXG4gIGFzeW5jIHNlYXJjaFBvcnRmb2xpbyhvcHRpb25zOiB7XG4gICAgcXVlcnk6IHN0cmluZzsgXG4gICAgZWxlbWVudFR5cGU/OiBzdHJpbmc7IFxuICAgIGZ1enp5TWF0Y2g/OiBib29sZWFuOyBcbiAgICBtYXhSZXN1bHRzPzogbnVtYmVyOyBcbiAgICBpbmNsdWRlS2V5d29yZHM/OiBib29sZWFuOyBcbiAgICBpbmNsdWRlVGFncz86IGJvb2xlYW47IFxuICAgIGluY2x1ZGVUcmlnZ2Vycz86IGJvb2xlYW47IFxuICAgIGluY2x1ZGVEZXNjcmlwdGlvbnM/OiBib29sZWFuO1xuICB9KSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLnBvcnRmb2xpb0hhbmRsZXIhLnNlYXJjaFBvcnRmb2xpbyhvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2ggYWNyb3NzIGFsbCBzb3VyY2VzIChsb2NhbCwgR2l0SHViLCBjb2xsZWN0aW9uKSB1c2luZyBVbmlmaWVkSW5kZXhNYW5hZ2VyXG4gICAqIFRoaXMgcHJvdmlkZXMgY29tcHJlaGVuc2l2ZSBzZWFyY2ggd2l0aCBkdXBsaWNhdGUgZGV0ZWN0aW9uIGFuZCB2ZXJzaW9uIGNvbXBhcmlzb25cbiAgICovXG4gIGFzeW5jIHNlYXJjaEFsbChvcHRpb25zOiB7XG4gICAgcXVlcnk6IHN0cmluZztcbiAgICBzb3VyY2VzPzogc3RyaW5nW107XG4gICAgZWxlbWVudFR5cGU/OiBzdHJpbmc7XG4gICAgcGFnZT86IG51bWJlcjtcbiAgICBwYWdlU2l6ZT86IG51bWJlcjtcbiAgICBzb3J0Qnk/OiBzdHJpbmc7XG4gIH0pIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMucG9ydGZvbGlvSGFuZGxlciEuc2VhcmNoQWxsKG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgc2VtYW50aWNhbGx5IHNpbWlsYXIgZWxlbWVudHMgdXNpbmcgRW5oYW5jZWQgSW5kZXhcbiAgICovXG4gIGFzeW5jIGZpbmRTaW1pbGFyRWxlbWVudHMob3B0aW9uczoge1xuICAgIGVsZW1lbnROYW1lOiBzdHJpbmc7XG4gICAgZWxlbWVudFR5cGU/OiBzdHJpbmc7XG4gICAgbGltaXQ6IG51bWJlcjtcbiAgICB0aHJlc2hvbGQ6IG51bWJlcjtcbiAgfSkge1xuICAgIHJldHVybiB0aGlzLmVuaGFuY2VkSW5kZXhIYW5kbGVyIS5maW5kU2ltaWxhckVsZW1lbnRzKG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbGwgcmVsYXRpb25zaGlwcyBmb3IgYSBzcGVjaWZpYyBlbGVtZW50XG4gICAqL1xuICBhc3luYyBnZXRFbGVtZW50UmVsYXRpb25zaGlwcyhvcHRpb25zOiB7XG4gICAgZWxlbWVudE5hbWU6IHN0cmluZztcbiAgICBlbGVtZW50VHlwZT86IHN0cmluZztcbiAgICByZWxhdGlvbnNoaXBUeXBlcz86IHN0cmluZ1tdO1xuICB9KSB7XG4gICAgcmV0dXJuIHRoaXMuZW5oYW5jZWRJbmRleEhhbmRsZXIhLmdldEVsZW1lbnRSZWxhdGlvbnNoaXBzKG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlYXJjaCBmb3IgZWxlbWVudHMgYnkgYWN0aW9uIHZlcmJcbiAgICovXG4gIGFzeW5jIHNlYXJjaEJ5VmVyYihvcHRpb25zOiB7XG4gICAgdmVyYjogc3RyaW5nO1xuICAgIGxpbWl0OiBudW1iZXI7XG4gIH0pIHtcbiAgICByZXR1cm4gdGhpcy5lbmhhbmNlZEluZGV4SGFuZGxlciEuc2VhcmNoQnlWZXJiKG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBzdGF0aXN0aWNzIGFib3V0IEVuaGFuY2VkIEluZGV4IHJlbGF0aW9uc2hpcHNcbiAgICovXG4gIGFzeW5jIGdldFJlbGF0aW9uc2hpcFN0YXRzKCkge1xuICAgIHJldHVybiB0aGlzLmVuaGFuY2VkSW5kZXhIYW5kbGVyIS5nZXRSZWxhdGlvbnNoaXBTdGF0cygpO1xuICB9XG5cbiAgYXN5bmMgcnVuKCkge1xuICAgIGxvZ2dlci5kZWJ1ZyhcIkRvbGxob3VzZU1DUFNlcnZlci5ydW4oKSBzdGFydGVkXCIpO1xuICAgIGxvZ2dlci5pbmZvKFwiU3RhcnRpbmcgRG9sbGhvdXNlTUNQIHNlcnZlci4uLlwiKTtcblxuICAgIGNvbnN0IHRpbWVyID0gdGhpcy5jb250YWluZXIucmVzb2x2ZTxTdGFydHVwVGltZXI+KCdTdGFydHVwVGltZXInKTtcblxuICAgIC8vIElzc3VlICM3MDY6IENyaXRpY2FsIHBhdGggb25seSDigJQgZ2V0IHRvIGNvbm5lY3QoKSBhcyBmYXN0IGFzIHBvc3NpYmxlXG4gICAgLy8gTm9uLWNyaXRpY2FsIHdvcmsgKG1lbW9yeSBhdXRvLWxvYWQsIGFjdGl2YXRpb24gcmVzdG9yZSwgZXRjLikgaXNcbiAgICAvLyBkZWZlcnJlZCB0byBjb21wbGV0ZURlZmVycmVkU2V0dXAoKSB3aGljaCBydW5zIHBvc3QtY29ubmVjdC5cbiAgICB0cnkge1xuICAgICAgdGltZXIuc3RhcnRQaGFzZSgncG9ydGZvbGlvX3ByZXBhcmUnLCB0cnVlKTtcbiAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVBvcnRmb2xpbygpO1xuICAgICAgdGltZXIuZW5kUGhhc2UoJ3BvcnRmb2xpb19wcmVwYXJlJyk7XG5cbiAgICAgIHRpbWVyLnN0YXJ0UGhhc2UoJ2hhbmRsZXJfY3JlYXRpb24nLCB0cnVlKTtcbiAgICAgIGF3YWl0IHRoaXMuY29tcGxldGVJbml0aWFsaXphdGlvbigpO1xuICAgICAgdGltZXIuZW5kUGhhc2UoJ2hhbmRsZXJfY3JlYXRpb24nKTtcblxuICAgICAgLy8gSW5pdGlhbGl6ZSBvcGVyYXRpb25hbCB0ZWxlbWV0cnkgKGFzeW5jLCBub24tYmxvY2tpbmcsIG5ldmVyIHRocm93cylcbiAgICAgIGNvbnN0IG9wZXJhdGlvbmFsVGVsZW1ldHJ5ID0gdGhpcy5jb250YWluZXIucmVzb2x2ZTxPcGVyYXRpb25hbFRlbGVtZXRyeT4oJ09wZXJhdGlvbmFsVGVsZW1ldHJ5Jyk7XG4gICAgICBvcGVyYXRpb25hbFRlbGVtZXRyeS5pbml0aWFsaXplKCkuY2F0Y2goKCkgPT4ge1xuICAgICAgICAvLyBUZWxlbWV0cnkgZXJyb3JzIGFyZSBsb2dnZWQgaW50ZXJuYWxseSwgc2FmZSB0byBpZ25vcmUgaGVyZVxuICAgICAgfSk7XG5cbiAgICAgIGxvZ2dlci5pbmZvKFwiUG9ydGZvbGlvIGFuZCBwZXJzb25hcyBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHlcIik7XG4gICAgICBsb2dnZXIuaW5mbyhcIkRvbGxob3VzZU1DUCBzZXJ2ZXIgcmVhZHkgLSB3YWl0aW5nIGZvciBNQ1AgY29ubmVjdGlvbiBvbiBzdGRpb1wiKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcIkRvbGxob3VzZU1DUFNlcnZlci5ydW4oKSBjb21wbGV0ZWQgaW5pdGlhbGl6YXRpb25cIik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIEVycm9ySGFuZGxlci5sb2dFcnJvcignRG9sbGhvdXNlTUNQU2VydmVyLnJ1bi5pbml0aWFsaXphdGlvbicsIGVycm9yKTtcbiAgICAgIHRocm93IGVycm9yOyAvLyBSZS10aHJvdyB0byBwcmV2ZW50IHNlcnZlciBmcm9tIHN0YXJ0aW5nIHdpdGggaW5jb21wbGV0ZSBpbml0aWFsaXphdGlvblxuICAgIH1cblxuICAgIGNvbnN0IHRyYW5zcG9ydCA9IG5ldyBTdGRpb1NlcnZlclRyYW5zcG9ydCgpO1xuXG4gICAgLy8gU2V0IHVwIGdyYWNlZnVsIHNodXRkb3duIGhhbmRsZXJzXG4gICAgY29uc3QgY2xlYW51cCA9IGFzeW5jICgpID0+IHtcbiAgICAgIGxvZ2dlci5pbmZvKFwiU2h1dHRpbmcgZG93biBEb2xsaG91c2VNQ1Agc2VydmVyLi4uXCIpO1xuXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLmNvbnRhaW5lci5kaXNwb3NlKCk7XG4gICAgICAgIGxvZ2dlci5pbmZvKFwiQ2xlYW51cCBjb21wbGV0ZWRcIik7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsb2dnZXIuZXJyb3IoXCJFcnJvciBkdXJpbmcgY2xlYW51cFwiLCB7IGVycm9yIH0pO1xuICAgICAgfVxuXG4gICAgICBwcm9jZXNzLmV4aXQoMCk7XG4gICAgfTtcblxuICAgIC8vIFJlZ2lzdGVyIHNodXRkb3duIGhhbmRsZXJzXG4gICAgcHJvY2Vzcy5vbignU0lHSU5UJywgY2xlYW51cCk7XG4gICAgcHJvY2Vzcy5vbignU0lHVEVSTScsIGNsZWFudXApO1xuICAgIHByb2Nlc3Mub24oJ1NJR0hVUCcsIGNsZWFudXApO1xuXG4gICAgLy8gQ29ubmVjdCBBU0FQIOKAlCB0b29scyBhcmUgcmVnaXN0ZXJlZCwgc2VydmVyIGNhbiBhY2NlcHQgcmVxdWVzdHNcbiAgICB0aW1lci5zdGFydFBoYXNlKCdtY3BfY29ubmVjdCcsIHRydWUpO1xuICAgIGF3YWl0IHRoaXMuc2VydmVyLmNvbm5lY3QodHJhbnNwb3J0KTtcbiAgICB0aW1lci5lbmRQaGFzZSgnbWNwX2Nvbm5lY3QnKTtcbiAgICB0aW1lci5tYXJrQ29ubmVjdCgpO1xuXG4gICAgLy8gTWFyayB0aGF0IE1DUCBpcyBub3cgY29ubmVjdGVkIC0gbm8gbW9yZSBjb25zb2xlIG91dHB1dCBhbGxvd2VkXG4gICAgbG9nZ2VyLnNldE1DUENvbm5lY3RlZCgpO1xuXG4gICAgLy8gSXNzdWUgIzcwNiBQaGFzZSAzOiBFbWl0IFJFQURZIHNlbnRpbmVsIGZvciBicmlkZ2UgY2xpZW50c1xuICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKCdET0xMSE9VU0VNQ1BfUkVBRFlcXG4nKTtcblxuICAgIGxvZ2dlci5pbmZvKFwiRG9sbGhvdXNlTUNQIHNlcnZlciBydW5uaW5nIG9uIHN0ZGlvXCIpO1xuXG4gICAgLy8gSXNzdWUgIzcwNiBQaGFzZSAyOiBEZWZlcnJlZCBzZXR1cCDigJQgcnVucyBwb3N0LWNvbm5lY3QsIG5vbi1ibG9ja2luZ1xuICAgIC8vIFBhdHRlcm4gZW5jcnlwdGlvbiwgYmFja2dyb3VuZCB2YWxpZGF0b3IsIG1lbW9yeSBhdXRvLWxvYWQsIGFjdGl2YXRpb25cbiAgICAvLyByZXN0b3JlLCBsb2cgaG9va3MsIGRhbmdlciB6b25lIGluaXQgYWxsIG1vdmUgaGVyZS5cbiAgICBjb25zdCBkZWZlcnJlZFByb21pc2UgPSB0aGlzLmNvbnRhaW5lci5jb21wbGV0ZURlZmVycmVkU2V0dXAoKTtcbiAgICBkZWZlcnJlZFByb21pc2UuY2F0Y2goZXJyID0+IGxvZ2dlci53YXJuKCdbU3RhcnR1cF0gRGVmZXJyZWQgc2V0dXAgZXJyb3I6JywgZXJyKSk7XG5cbiAgICAvLyBJc3N1ZSAjNzA2IFBoYXNlIDQ6IFdpcmUgZGVmZXJyZWQgcHJvbWlzZSBpbnRvIFNlcnZlclNldHVwIGZvciByZXF1ZXN0IGJ1ZmZlcmluZ1xuICAgIGNvbnN0IHNlcnZlclNldHVwID0gdGhpcy5jb250YWluZXIucmVzb2x2ZTxpbXBvcnQoJy4vc2VydmVyL1NlcnZlclNldHVwLmpzJykuU2VydmVyU2V0dXA+KCdTZXJ2ZXJTZXR1cCcpO1xuICAgIHNlcnZlclNldHVwLnNldERlZmVycmVkU2V0dXBQcm9taXNlKGRlZmVycmVkUHJvbWlzZSk7XG5cbiAgICAvLyBMb2cgc3RhcnR1cCByZXBvcnQgYWZ0ZXIgZGVmZXJyZWQgc2V0dXAgY29tcGxldGVzXG4gICAgZGVmZXJyZWRQcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgY29uc3QgcmVwb3J0ID0gdGltZXIuZ2V0UmVwb3J0KCk7XG4gICAgICBsb2dnZXIuaW5mbyhgW1N0YXJ0dXBdIEZ1bGwgcmVwb3J0OiBjb25uZWN0IGF0ICR7cmVwb3J0LmNvbm5lY3RBdE1zfW1zLCBgICtcbiAgICAgICAgYGNyaXRpY2FsICR7cmVwb3J0LmNyaXRpY2FsUGF0aE1zfW1zLCBkZWZlcnJlZCAke3JlcG9ydC5kZWZlcnJlZE1zfW1zLCBgICtcbiAgICAgICAgYHRvdGFsICR7cmVwb3J0LnRvdGFsTXN9bXNgKTtcbiAgICB9KS5jYXRjaCgoKSA9PiB7IC8qIGFscmVhZHkgbG9nZ2VkICovIH0pO1xuICB9XG59XG5cbi8vIEV4cG9ydCBpcyBhbHJlYWR5IGF0IGNsYXNzIGRlY2xhcmF0aW9uXG5cbi8vIE9ubHkgc3RhcnQgdGhlIHNlcnZlciBpZiB0aGlzIGZpbGUgaXMgYmVpbmcgcnVuIGRpcmVjdGx5IChub3QgaW1wb3J0ZWQgYnkgdGVzdHMpXG4vLyBIYW5kbGUgZGlmZmVyZW50IGV4ZWN1dGlvbiBtZXRob2RzIChkaXJlY3QsIG5weCwgQ0xJKVxuY29uc3Qgc2NyaXB0UGF0aCA9IHByb2Nlc3MuYXJndj8uWzFdID8gcGF0aC5ub3JtYWxpemUocHJvY2Vzcy5hcmd2WzFdKSA6ICcnO1xuY29uc3QgaXNEaXJlY3RFeGVjdXRpb24gPVxuICBzY3JpcHRQYXRoLmVuZHNXaXRoKGAke3BhdGguc2VwfWRpc3Qke3BhdGguc2VwfWluZGV4LmpzYCkgfHxcbiAgc2NyaXB0UGF0aC5lbmRzV2l0aChgJHtwYXRoLnNlcH1zcmMke3BhdGguc2VwfWluZGV4LnRzYCk7XG5jb25zdCBpc05weEV4ZWN1dGlvbiA9IHByb2Nlc3MuZW52Lm5wbV9leGVjcGF0aD8uaW5jbHVkZXMoJ25weCcpO1xuY29uc3QgaXNDbGlFeGVjdXRpb24gPSBwcm9jZXNzLmFyZ3ZbMV0/LmVuZHNXaXRoKCcvZG9sbGhvdXNlbWNwJykgfHwgcHJvY2Vzcy5hcmd2WzFdPy5lbmRzV2l0aCgnXFxcXGRvbGxob3VzZW1jcCcpO1xuY29uc3QgaXNUZXN0ID0gcHJvY2Vzcy5lbnYuSkVTVF9XT1JLRVJfSUQ7IC8vIFRoaXMgaXMgc2V0IHdoZW4gSmVzdCBydW5zIHRlc3RzXG5jb25zdCBpc1Rlc3RNb2RlID0gcHJvY2Vzcy5lbnYuVEVTVF9NT0RFID09PSAndHJ1ZSc7IC8vIENoZWNrIGZvciBURVNUX01PREUgZW52aXJvbm1lbnQgdmFyaWFibGVcbmNvbnN0IGRvbGxob3VzZURlYnVnRmxhZyA9IHByb2Nlc3MuZW52LkRPTExIT1VTRV9ERUJVRz8udG9Mb3dlckNhc2UoKTtcbmNvbnN0IGlzRGVidWdTdGFydHVwTG9nZ2luZyA9IGRvbGxob3VzZURlYnVnRmxhZyA9PT0gJ3RydWUnIHx8IGRvbGxob3VzZURlYnVnRmxhZyA9PT0gJzEnO1xuXG4vLyBQcm9ncmVzc2l2ZSBzdGFydHVwIHdpdGggcmV0cmllcyBmb3IgbnB4L0NMSSBleGVjdXRpb25cbmNvbnN0IFNUQVJUVVBfREVMQVlTID0gWzEwLCA1MCwgMTAwLCAyMDBdOyAvLyBQcm9ncmVzc2l2ZSBkZWxheXMgaW4gbXNcblxuYXN5bmMgZnVuY3Rpb24gc3RhcnRTZXJ2ZXJXaXRoUmV0cnkocmV0cmllc0xlZnQgPSBTVEFSVFVQX0RFTEFZUy5sZW5ndGgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKGlzRGVidWdTdGFydHVwTG9nZ2luZykge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJERUJVRzogc3RhcnRTZXJ2ZXJXaXRoUmV0cnkgY2FsbGVkLlwiKTtcbiAgfVxuICB0cnkge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IG5ldyBEb2xsaG91c2VDb250YWluZXIoKTtcbiAgICBjb25zdCBzZXJ2ZXIgPSBuZXcgRG9sbGhvdXNlTUNQU2VydmVyKGNvbnRhaW5lcik7XG4gICAgYXdhaXQgc2VydmVyLnJ1bigpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChyZXRyaWVzTGVmdCA+IDAgJiYgKGlzTnB4RXhlY3V0aW9uIHx8IGlzQ2xpRXhlY3V0aW9uKSkge1xuICAgICAgLy8gVHJ5IGFnYWluIHdpdGggYSBsb25nZXIgZGVsYXlcbiAgICAgIGNvbnN0IGRlbGF5SW5kZXggPSBTVEFSVFVQX0RFTEFZUy5sZW5ndGggLSByZXRyaWVzTGVmdDtcbiAgICAgIGNvbnN0IGRlbGF5ID0gU1RBUlRVUF9ERUxBWVNbZGVsYXlJbmRleF07XG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgZGVsYXkpKTtcbiAgICAgIHJldHVybiBzdGFydFNlcnZlcldpdGhSZXRyeShyZXRyaWVzTGVmdCAtIDEpO1xuICAgIH1cbiAgICAvLyBGaW5hbCBmYWlsdXJlIC0gbWluaW1hbCBlcnJvciBtZXNzYWdlIGZvciBzZWN1cml0eVxuICAgIC8vIE5vdGU6IFVzaW5nIGNvbnNvbGUuZXJyb3IgaGVyZSBpcyBpbnRlbnRpb25hbCBhcyBpdCdzIHRoZSBmaW5hbCBlcnJvciBiZWZvcmUgZXhpdFxuICAgIGNvbnNvbGUuZXJyb3IoXCJbRG9sbGhvdXNlTUNQXSBTZXJ2ZXIgc3RhcnR1cCBmYWlsZWRcIiwgZXJyb3IpOyAvLyBBZGRlZCBlcnJvciBvYmplY3RcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cbn1cblxuaWYgKChpc0RpcmVjdEV4ZWN1dGlvbiB8fCBpc05weEV4ZWN1dGlvbiB8fCBpc0NsaUV4ZWN1dGlvbikgJiYgKCFpc1Rlc3QgfHwgaXNUZXN0TW9kZSkpIHtcbiAgLy8gSXNzdWUgIzcwNDogLS13ZWIgZmxhZyBzdGFydHMgdGhlIHBvcnRmb2xpbyB3ZWIgVUkgaW5zdGVhZCBvZiBNQ1Agc2VydmVyXG4gIGNvbnN0IGlzV2ViTW9kZSA9IHByb2Nlc3MuYXJndi5pbmNsdWRlcygnLS13ZWInKTtcbiAgaWYgKGlzV2ViTW9kZSkge1xuICAgIC8vIElzc3VlICM3OTY6IEJvb3RzdHJhcCBESSBjb250YWluZXIgZm9yIHdlYi1vbmx5IG1vZGUgc28gQVBJIHJvdXRlc1xuICAgIC8vIGdvIHRocm91Z2ggTUNQQVFMSGFuZGxlciAodmFsaWRhdGVkLCBjYWNoZWQsIGdhdGVrZWVwZXItY2hlY2tlZClcbiAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcG9ydGZvbGlvRGlyID0gcGF0aC5qb2luKG9zLmhvbWVkaXIoKSwgJy5kb2xsaG91c2UnLCAncG9ydGZvbGlvJyk7XG4gICAgICBjb25zdCBwb3J0QXJnID0gcHJvY2Vzcy5hcmd2LmZpbmQoYSA9PiBhLnN0YXJ0c1dpdGgoJy0tcG9ydD0nKSk7XG4gICAgICBjb25zdCBwb3J0ID0gcG9ydEFyZyA/IHBhcnNlSW50KHBvcnRBcmcuc3BsaXQoJz0nKVsxXSwgMTApIDogdW5kZWZpbmVkO1xuICAgICAgY29uc3Qgbm9Ccm93c2VyID0gcHJvY2Vzcy5hcmd2LmluY2x1ZGVzKCctLW5vLW9wZW4nKTtcblxuICAgICAgbGV0IG1jcEFxbEhhbmRsZXI7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBjb250YWluZXIgPSBuZXcgRG9sbGhvdXNlQ29udGFpbmVyKCk7XG4gICAgICAgIGF3YWl0IGNvbnRhaW5lci5wcmVwYXJlUG9ydGZvbGlvKCk7XG4gICAgICAgIGNvbnN0IGJ1bmRsZSA9IGF3YWl0IGNvbnRhaW5lci5ib290c3RyYXBIYW5kbGVycygpO1xuICAgICAgICBhd2FpdCBjb250YWluZXIuY29tcGxldGVEZWZlcnJlZFNldHVwKCk7XG4gICAgICAgIG1jcEFxbEhhbmRsZXIgPSBidW5kbGUubWNwQXFsSGFuZGxlcjtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIltEb2xsaG91c2VNQ1BdIENvbnRhaW5lciBib290c3RyYXBwZWQg4oCUIHdlYiByb3V0ZXMgdXNpbmcgTUNQLUFRTCBHYXRld2F5XCIpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJbRG9sbGhvdXNlTUNQXSBDb250YWluZXIgYm9vdHN0cmFwIGZhaWxlZCDigJQgd2ViIHJvdXRlcyB3aWxsIHVzZSBkaXJlY3QgZmlsZXN5c3RlbSBhY2Nlc3MuXCIpO1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiW0RvbGxob3VzZU1DUF0gUmVhc29uOlwiLCAoZXJyIGFzIEVycm9yKS5tZXNzYWdlIHx8IGVycik7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJbRG9sbGhvdXNlTUNQXSBUaGlzIG1heSBpbmRpY2F0ZSBhIGNvcnJ1cHQgcG9ydGZvbGlvIG9yIG1pc3NpbmcgZGVwZW5kZW5jaWVzLlwiKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBzdGFydFdlYlNlcnZlciB9ID0gYXdhaXQgaW1wb3J0KCcuL3dlYi9zZXJ2ZXIuanMnKTtcbiAgICAgIGF3YWl0IHN0YXJ0V2ViU2VydmVyKHsgcG9ydGZvbGlvRGlyLCBwb3J0LCBvcGVuQnJvd3NlcjogIW5vQnJvd3NlciwgbWNwQXFsSGFuZGxlciB9KTtcbiAgICB9KSgpLmNhdGNoKGVyciA9PiB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiW0RvbGxob3VzZU1DUF0gV2ViIFVJIGZhaWxlZCB0byBzdGFydDpcIiwgZXJyKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoaXNEZWJ1Z1N0YXJ0dXBMb2dnaW5nKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiREVCVUc6IFNlcnZlciBzdGFydHVwIGNvbmRpdGlvbiBtZXQuIENhbGxpbmcgc3RhcnRTZXJ2ZXJXaXRoUmV0cnkuXCIpO1xuICAgIH1cbiAgICBzdGFydFNlcnZlcldpdGhSZXRyeSgpLmNhdGNoKCgpID0+IHtcbiAgICAgIC8vIE5vdGU6IFVzaW5nIGNvbnNvbGUuZXJyb3IgaGVyZSBpcyBpbnRlbnRpb25hbCBhcyBpdCdzIHRoZSBmaW5hbCBlcnJvciBiZWZvcmUgZXhpdFxuICAgICAgY29uc29sZS5lcnJvcihcIltEb2xsaG91c2VNQ1BdIFNlcnZlciBzdGFydHVwIGZhaWxlZFwiKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
667
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUVBLGtFQUFrRTtBQUNsRSw4REFBOEQ7QUFDOUQsT0FBTyxpQkFBaUIsQ0FBQztBQUV6QixPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDbkUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDakYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFlOUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzFELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNoRSxPQUFPLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQztBQUd6QixpREFBaUQ7QUFDakQsT0FBTyxDQUFDLEVBQUUsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO0lBQ3hDLE1BQU0sQ0FBQyxLQUFLLENBQUMsOEJBQThCLEVBQUU7UUFDM0MsS0FBSyxFQUFFLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDN0QsS0FBSyxFQUFFLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVM7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U0FBTSxDQUFDO1FBQ04sSUFBSSxxQkFBcUIsRUFBRSxDQUFDO1lBQzFCLE9BQU8sQ0FBQyxLQUFLLENBQUMsb0VBQW9FLENBQUMsQ0FBQztRQUN0RixDQUFDO1FBQ0Qsb0JBQW9CLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFO1lBQ2hDLG9GQUFvRjtZQUNwRixPQUFPLENBQUMsS0FBSyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7WUFDdEQsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuXG4vLyBMb2FkIGVudmlyb25tZW50IHZhcmlhYmxlcyBmcm9tIC5lbnYgZmlsZXMgQkVGT1JFIGFueXRoaW5nIGVsc2Vcbi8vIFRoaXMgZW5zdXJlcyAuZW52LmxvY2FsIGFuZCAuZW52IGFyZSBsb2FkZWQgZm9yIGFsbCBtb2R1bGVzXG5pbXBvcnQgJy4vY29uZmlnL2Vudi5qcyc7XG5cbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBTZXJ2ZXIgfSBmcm9tIFwiQG1vZGVsY29udGV4dHByb3RvY29sL3Nkay9zZXJ2ZXIvaW5kZXguanNcIjtcbmltcG9ydCB7IFN0ZGlvU2VydmVyVHJhbnNwb3J0IH0gZnJvbSBcIkBtb2RlbGNvbnRleHRwcm90b2NvbC9zZGsvc2VydmVyL3N0ZGlvLmpzXCI7XG5pbXBvcnQgeyBFcnJvckhhbmRsZXIgfSBmcm9tIFwiLi91dGlscy9FcnJvckhhbmRsZXIuanNcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL3V0aWxzL2xvZ2dlci5qc1wiO1xuaW1wb3J0IHsgRG9sbGhvdXNlQ29udGFpbmVyIH0gZnJvbSBcIi4vZGkvQ29udGFpbmVyLmpzXCI7XG5pbXBvcnQgeyBFbGVtZW50VHlwZSB9IGZyb20gXCIuL3BvcnRmb2xpby9Qb3J0Zm9saW9NYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBPcGVyYXRpb25hbFRlbGVtZXRyeSwgU3RhcnR1cFRpbWVyIH0gZnJvbSBcIi4vdGVsZW1ldHJ5L2luZGV4LmpzXCI7XG5pbXBvcnQgdHlwZSB7IEluZGljYXRvckNvbmZpZyB9IGZyb20gXCIuL2NvbmZpZy9pbmRpY2F0b3ItY29uZmlnLmpzXCI7XG5pbXBvcnQgdHlwZSB7IElUb29sSGFuZGxlciB9IGZyb20gXCIuL3NlcnZlci9pbmRleC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBUb29sUmVnaXN0cnkgfSBmcm9tIFwiLi9oYW5kbGVycy9Ub29sUmVnaXN0cnkuanNcIjtcbmltcG9ydCB0eXBlIHsgUGVyc29uYUhhbmRsZXIgfSBmcm9tIFwiLi9oYW5kbGVycy9QZXJzb25hSGFuZGxlci5qc1wiO1xuaW1wb3J0IHR5cGUgeyBFbGVtZW50Q1JVREhhbmRsZXIgfSBmcm9tIFwiLi9oYW5kbGVycy9FbGVtZW50Q1JVREhhbmRsZXIuanNcIjtcbmltcG9ydCB0eXBlIHsgQ29sbGVjdGlvbkhhbmRsZXIgfSBmcm9tIFwiLi9oYW5kbGVycy9Db2xsZWN0aW9uSGFuZGxlci5qc1wiO1xuaW1wb3J0IHR5cGUgeyBQb3J0Zm9saW9IYW5kbGVyIH0gZnJvbSBcIi4vaGFuZGxlcnMvUG9ydGZvbGlvSGFuZGxlci5qc1wiO1xuaW1wb3J0IHR5cGUgeyBHaXRIdWJBdXRoSGFuZGxlciB9IGZyb20gXCIuL2hhbmRsZXJzL0dpdEh1YkF1dGhIYW5kbGVyLmpzXCI7XG5pbXBvcnQgdHlwZSB7IERpc3BsYXlDb25maWdIYW5kbGVyIH0gZnJvbSBcIi4vaGFuZGxlcnMvRGlzcGxheUNvbmZpZ0hhbmRsZXIuanNcIjtcbmltcG9ydCB0eXBlIHsgSWRlbnRpdHlIYW5kbGVyIH0gZnJvbSBcIi4vaGFuZGxlcnMvSWRlbnRpdHlIYW5kbGVyLmpzXCI7XG5pbXBvcnQgdHlwZSB7IENvbmZpZ0hhbmRsZXIgfSBmcm9tIFwiLi9oYW5kbGVycy9Db25maWdIYW5kbGVyLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFN5bmNIYW5kbGVyIH0gZnJvbSBcIi4vaGFuZGxlcnMvU3luY0hhbmRsZXJWMi5qc1wiO1xuaW1wb3J0IHR5cGUgeyBFbmhhbmNlZEluZGV4SGFuZGxlciB9IGZyb20gXCIuL2hhbmRsZXJzL0VuaGFuY2VkSW5kZXhIYW5kbGVyLmpzXCI7XG5pbXBvcnQgeyBDb25maWdNYW5hZ2VyIH0gZnJvbSBcIi4vY29uZmlnL0NvbmZpZ01hbmFnZXIuanNcIjtcbmltcG9ydCB7IEZpbGVPcGVyYXRpb25zU2VydmljZSB9IGZyb20gXCIuL3NlcnZpY2VzL0ZpbGVPcGVyYXRpb25zU2VydmljZS5qc1wiO1xuaW1wb3J0IHsgRmlsZUxvY2tNYW5hZ2VyIH0gZnJvbSBcIi4vc2VjdXJpdHkvZmlsZUxvY2tNYW5hZ2VyLmpzXCI7XG5pbXBvcnQgKiBhcyBvcyBmcm9tIFwib3NcIjtcbmltcG9ydCB0eXBlIHsgRW5zZW1ibGVFbGVtZW50IH0gZnJvbSBcIi4vZWxlbWVudHMvZW5zZW1ibGVzL3R5cGVzLmpzXCI7XG5cbi8vIERlZmVuc2l2ZSBlcnJvciBoYW5kbGluZyBmb3IgbnB4L0NMSSBleGVjdXRpb25cbnByb2Nlc3Mub24oJ3VuY2F1Z2h0RXhjZXB0aW9uJywgKGVycm9yKSA9PiB7XG4gIGxvZ2dlci5lcnJvcignVW5oYW5kbGVkIGV4Y2VwdGlvbiBkZXRlY3RlZCcsIHtcbiAgICBlcnJvcjogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpLFxuICAgIHN0YWNrOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3Iuc3RhY2sgOiB1bmRlZmluZWRcbiAgfSk7XG4gIGNvbnNvbGUuZXJyb3IoJ1tEb2xsaG91c2VNQ1BdIFNlcnZlciBzdGFydHVwIGZhaWxlZCcpO1xuICBwcm9jZXNzLmV4aXQoMSk7XG59KTtcblxucHJvY2Vzcy5vbigndW5oYW5kbGVkUmVqZWN0aW9uJywgKHJlYXNvbiwgcHJvbWlzZSkgPT4ge1xuICBsb2dnZXIuZXJyb3IoJ1VuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbiBkZXRlY3RlZCcsIHtcbiAgICByZWFzb246IHJlYXNvbiBpbnN0YW5jZW9mIEVycm9yID8gcmVhc29uLm1lc3NhZ2UgOiBTdHJpbmcocmVhc29uKSxcbiAgICBzdGFjazogcmVhc29uIGluc3RhbmNlb2YgRXJyb3IgPyByZWFzb24uc3RhY2sgOiB1bmRlZmluZWQsXG4gICAgcHJvbWlzZVxuICB9KTtcbiAgY29uc29sZS5lcnJvcignW0RvbGxob3VzZU1DUF0gU2VydmVyIHN0YXJ0dXAgZmFpbGVkJyk7XG4gIHByb2Nlc3MuZXhpdCgxKTtcbn0pO1xuXG4vLyBPbmx5IGxvZyBleGVjdXRpb24gZW52aXJvbm1lbnQgaW4gZGVidWcgbW9kZVxuaWYgKHByb2Nlc3MuZW52LkRPTExIT1VTRV9ERUJVRykge1xuICBjb25zb2xlLmVycm9yKCdbRG9sbGhvdXNlTUNQXSBEZWJ1ZyBtb2RlIGVuYWJsZWQnKTtcbn1cblxuZXhwb3J0IGNsYXNzIERvbGxob3VzZU1DUFNlcnZlciBpbXBsZW1lbnRzIElUb29sSGFuZGxlciB7XG4gIHByaXZhdGUgc2VydmVyOiBTZXJ2ZXI7XG4gIHB1YmxpYyBwZXJzb25hc0Rpcjogc3RyaW5nIHwgbnVsbDtcbiAgcHJpdmF0ZSBjdXJyZW50VXNlcjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgaXNJbml0aWFsaXplZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIGluaXRpYWxpemF0aW9uUHJvbWlzZTogUHJvbWlzZTx2b2lkPiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGNvbnRhaW5lcjogRG9sbGhvdXNlQ29udGFpbmVyO1xuICBwcml2YXRlIHRvb2xSZWdpc3RyeT86IFRvb2xSZWdpc3RyeTtcbiAgcHJpdmF0ZSBlbmhhbmNlZEluZGV4SGFuZGxlcj86IEVuaGFuY2VkSW5kZXhIYW5kbGVyO1xuICBwcml2YXRlIHBlcnNvbmFIYW5kbGVyPzogUGVyc29uYUhhbmRsZXI7XG4gIHByaXZhdGUgZWxlbWVudENSVURIYW5kbGVyPzogRWxlbWVudENSVURIYW5kbGVyO1xuICBwcml2YXRlIGNvbGxlY3Rpb25IYW5kbGVyPzogQ29sbGVjdGlvbkhhbmRsZXI7XG4gIHByaXZhdGUgcG9ydGZvbGlvSGFuZGxlcj86IFBvcnRmb2xpb0hhbmRsZXI7XG4gIHByaXZhdGUgZ2l0aHViQXV0aEhhbmRsZXI/OiBHaXRIdWJBdXRoSGFuZGxlcjtcbiAgcHJpdmF0ZSBkaXNwbGF5Q29uZmlnSGFuZGxlcj86IERpc3BsYXlDb25maWdIYW5kbGVyO1xuICBwcml2YXRlIGlkZW50aXR5SGFuZGxlcj86IElkZW50aXR5SGFuZGxlcjtcbiAgcHJpdmF0ZSBjb25maWdIYW5kbGVyPzogQ29uZmlnSGFuZGxlcjtcbiAgcHJpdmF0ZSBzeW5jSGFuZGxlcj86IFN5bmNIYW5kbGVyO1xuICBwcml2YXRlIHJlc291cmNlSGFuZGxlcj86IGltcG9ydCgnLi9oYW5kbGVycy9SZXNvdXJjZUhhbmRsZXIuanMnKS5SZXNvdXJjZUhhbmRsZXI7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBEb2xsaG91c2VNQ1BTZXJ2ZXIgaW5zdGFuY2VcbiAgICpcbiAgICogQHBhcmFtIGNvbnRhaW5lciBEb2xsaG91c2VDb250YWluZXIgaW5zdGFuY2UgZm9yIGRlcGVuZGVuY3kgaW5qZWN0aW9uLlxuICAgKiAgICAgICAgICAgICAgICAgIFVzZSBgbmV3IERvbGxob3VzZUNvbnRhaW5lcigpYCBmb3IgcHJvZHVjdGlvbiBvclxuICAgKiAgICAgICAgICAgICAgICAgIGBjcmVhdGVJbnRlZ3JhdGlvbkNvbnRhaW5lcigpLmNvbnRhaW5lcmAgZm9yIHRlc3RzLlxuICAgKi9cbiAgY29uc3RydWN0b3IoY29udGFpbmVyOiBEb2xsaG91c2VDb250YWluZXIpIHtcbiAgICAvLyBCdWlsZCBjYXBhYmlsaXRpZXMgb2JqZWN0IGNvbmRpdGlvbmFsbHkgYmFzZWQgb24gY29uZmlndXJhdGlvblxuICAgIC8vIFJlc291cmNlcyBhcmUgZGlzYWJsZWQgYnkgZGVmYXVsdCAoYWR2ZXJ0aXNlX3Jlc291cmNlczogZmFsc2UpXG4gICAgY29uc3QgY2FwYWJpbGl0aWVzOiBhbnkgPSB7XG4gICAgICB0b29sczoge30sXG4gICAgfTtcblxuICAgIC8vIENoZWNrIGlmIHJlc291cmNlcyBzaG91bGQgYmUgYWR2ZXJ0aXNlZFxuICAgIC8vIFRoaXMgaXMgYSBmdXR1cmUtcHJvb2YgaW1wbGVtZW50YXRpb24gLSByZXNvdXJjZXMgYXJlIG9wdC1pblxuICAgIHRyeSB7XG4gICAgICAvLyBJbml0aWFsaXplIENvbmZpZ01hbmFnZXIgdG8gY2hlY2sgcmVzb3VyY2Ugc2V0dGluZ3NcbiAgICAgIC8vIE5vdGU6IENvbmZpZyBtYXkgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkIHlldCwgc28gd2UgY2hlY2sgc3luY2hyb25vdXNseVxuICAgICAgLy8gSWYgY29uZmlnIGlzIG5vdCBpbml0aWFsaXplZCwgZGVmYXVsdHMgKGFkdmVydGlzZV9yZXNvdXJjZXM6IGZhbHNlKSBhcHBseVxuICAgICAgY29uc3QgZmlsZUxvY2tNYW5hZ2VyID0gbmV3IEZpbGVMb2NrTWFuYWdlcigpO1xuICAgICAgY29uc3QgZmlsZU9wZXJhdGlvbnMgPSBuZXcgRmlsZU9wZXJhdGlvbnNTZXJ2aWNlKGZpbGVMb2NrTWFuYWdlcik7XG4gICAgICBjb25zdCBjb25maWdNYW5hZ2VyID0gbmV3IENvbmZpZ01hbmFnZXIoZmlsZU9wZXJhdGlvbnMsIG9zKTtcbiAgICAgIGNvbnN0IHJlc291cmNlc0NvbmZpZyA9IGNvbmZpZ01hbmFnZXIuZ2V0U2V0dGluZzxhbnk+KCdlbGVtZW50cy5lbmhhbmNlZF9pbmRleC5yZXNvdXJjZXMnKTtcblxuICAgICAgaWYgKHJlc291cmNlc0NvbmZpZz8uYWR2ZXJ0aXNlX3Jlc291cmNlcyA9PT0gdHJ1ZSkge1xuICAgICAgICBjYXBhYmlsaXRpZXMucmVzb3VyY2VzID0ge307XG4gICAgICAgIGxvZ2dlci5pbmZvKCdbRG9sbGhvdXNlTUNQXSBNQ1AgUmVzb3VyY2VzIGNhcGFiaWxpdHkgYWR2ZXJ0aXNlZCAoZW5hYmxlZCB2aWEgY29uZmlnKScpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nZ2VyLmluZm8oJ1tEb2xsaG91c2VNQ1BdIE1DUCBSZXNvdXJjZXMgY2FwYWJpbGl0eSBOT1QgYWR2ZXJ0aXNlZCAoZGlzYWJsZWQgYnkgZGVmYXVsdCknKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gQ29uZmlnIG5vdCBpbml0aWFsaXplZCB5ZXQgLSB1c2Ugc2FmZSBkZWZhdWx0IChubyByZXNvdXJjZXMpXG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG4gICAgICBsb2dnZXIuZGVidWcoYFtEb2xsaG91c2VNQ1BdIENvbmZpZyBub3QgaW5pdGlhbGl6ZWQgeWV0LCByZXNvdXJjZXMgY2FwYWJpbGl0eSBkaXNhYmxlZCBieSBkZWZhdWx0OiAke2Vycm9yTWVzc2FnZX1gKTtcbiAgICB9XG5cbiAgICB0aGlzLnNlcnZlciA9IG5ldyBTZXJ2ZXIoXG4gICAgICB7XG4gICAgICAgIG5hbWU6IFwiZG9sbGhvdXNlbWNwXCIsXG4gICAgICAgIHZlcnNpb246IFwiMS4wLjAtYnVpbGQtMjAyNTA4MTctMTYzMC1wcjYwNlwiLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2FwYWJpbGl0aWVzLFxuICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLnBlcnNvbmFzRGlyID0gbnVsbDtcbiAgICB0aGlzLmN1cnJlbnRVc2VyID0gcHJvY2Vzcy5lbnYuRE9MTEhPVVNFX1VTRVIgfHwgbnVsbDtcbiAgICB0aGlzLmNvbnRhaW5lciA9IGNvbnRhaW5lcjtcbiAgfVxuICBcbiAgcHJpdmF0ZSBhc3luYyBpbml0aWFsaXplUG9ydGZvbGlvKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuY29udGFpbmVyLnByZXBhcmVQb3J0Zm9saW8oKTtcbiAgICB0aGlzLnBlcnNvbmFzRGlyID0gdGhpcy5jb250YWluZXIuZ2V0UGVyc29uYXNEaXIoKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIENvbXBsZXRlIGluaXRpYWxpemF0aW9uIGFmdGVyIHBvcnRmb2xpbyBpcyByZWFkeVxuICAgKiBGSVggIzYxMDogVGhpcyB3YXMgcHJldmlvdXNseSBpbiBhIC50aGVuKCkgY2FsbGJhY2sgaW4gdGhlIGNvbnN0cnVjdG9yXG4gICAqIE5vdyBjYWxsZWQgc3luY2hyb25vdXNseSBmcm9tIHJ1bigpIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgY29tcGxldGVJbml0aWFsaXphdGlvbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBDcmVhdGUgaGFuZGxlcnMgd2l0aCBzZXJ2ZXIgaW5zdGFuY2UgLSBhbGwgc3RhdGUgbWFuYWdlZCBieSBzZXJ2aWNlc1xuICAgIGNvbnN0IGhhbmRsZXJzID0gYXdhaXQgdGhpcy5jb250YWluZXIuY3JlYXRlSGFuZGxlcnModGhpcy5zZXJ2ZXIpO1xuXG4gICAgdGhpcy5wZXJzb25hSGFuZGxlciA9IGhhbmRsZXJzLnBlcnNvbmFIYW5kbGVyO1xuICAgIHRoaXMuZWxlbWVudENSVURIYW5kbGVyID0gaGFuZGxlcnMuZWxlbWVudENydWRIYW5kbGVyO1xuICAgIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIgPSBoYW5kbGVycy5jb2xsZWN0aW9uSGFuZGxlcjtcbiAgICB0aGlzLnBvcnRmb2xpb0hhbmRsZXIgPSBoYW5kbGVycy5wb3J0Zm9saW9IYW5kbGVyO1xuICAgIHRoaXMuZ2l0aHViQXV0aEhhbmRsZXIgPSBoYW5kbGVycy5naXRodWJBdXRoSGFuZGxlcjtcbiAgICB0aGlzLmRpc3BsYXlDb25maWdIYW5kbGVyID0gaGFuZGxlcnMuZGlzcGxheUNvbmZpZ0hhbmRsZXI7XG4gICAgdGhpcy5pZGVudGl0eUhhbmRsZXIgPSBoYW5kbGVycy5pZGVudGl0eUhhbmRsZXI7XG4gICAgdGhpcy5jb25maWdIYW5kbGVyID0gaGFuZGxlcnMuY29uZmlnSGFuZGxlcjtcbiAgICB0aGlzLnN5bmNIYW5kbGVyID0gaGFuZGxlcnMuc3luY0hhbmRsZXI7XG4gICAgdGhpcy50b29sUmVnaXN0cnkgPSBoYW5kbGVycy50b29sUmVnaXN0cnk7XG4gICAgdGhpcy5lbmhhbmNlZEluZGV4SGFuZGxlciA9IGhhbmRsZXJzLmVuaGFuY2VkSW5kZXhIYW5kbGVyO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSBhbmQgcmVnaXN0ZXIgcmVzb3VyY2UgaGFuZGxlcnNcbiAgICAvLyBSZXNvdXJjZXMgYXJlIGRpc2FibGVkIGJ5IGRlZmF1bHQgYW5kIHJlcXVpcmUgZXhwbGljaXQgY29uZmlndXJhdGlvblxuICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVJlc291cmNlSGFuZGxlcnMoKTtcblxuICAgIHRoaXMuaXNJbml0aWFsaXplZCA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSBNQ1AgUmVzb3VyY2VzIGhhbmRsZXJzIGlmIGVuYWJsZWQgaW4gY29uZmlndXJhdGlvblxuICAgKiBUaGlzIGlzIHNlcGFyYXRlIGZyb20gb3RoZXIgaGFuZGxlcnMgYmVjYXVzZSBpdCByZXF1aXJlcyBkeW5hbWljIGltcG9ydFxuICAgKiBhbmQgY29uZGl0aW9uYWwgcmVnaXN0cmF0aW9uIGJhc2VkIG9uIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgaW5pdGlhbGl6ZVJlc291cmNlSGFuZGxlcnMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgUmVzb3VyY2VIYW5kbGVyIH0gPSBhd2FpdCBpbXBvcnQoJy4vaGFuZGxlcnMvUmVzb3VyY2VIYW5kbGVyLmpzJyk7XG4gICAgICBjb25zdCBjb25maWdNYW5hZ2VyID0gdGhpcy5jb250YWluZXIucmVzb2x2ZTxDb25maWdNYW5hZ2VyPignQ29uZmlnTWFuYWdlcicpO1xuXG4gICAgICB0aGlzLnJlc291cmNlSGFuZGxlciA9IG5ldyBSZXNvdXJjZUhhbmRsZXIoY29uZmlnTWFuYWdlcik7XG4gICAgICBhd2FpdCB0aGlzLnJlc291cmNlSGFuZGxlci5pbml0aWFsaXplKHRoaXMuc2VydmVyKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gUmVzb3VyY2VzIGFyZSBvcHRpb25hbCAtIGRvbid0IGZhaWwgc2VydmVyIHN0YXJ0dXAgaWYgdGhleSBjYW4ndCBiZSBpbml0aWFsaXplZFxuICAgICAgbG9nZ2VyLndhcm4oJ1tEb2xsaG91c2VNQ1BdIEZhaWxlZCB0byBpbml0aWFsaXplIHJlc291cmNlIGhhbmRsZXJzLCBjb250aW51aW5nIHdpdGhvdXQgcmVzb3VyY2VzJyk7XG4gICAgICBsb2dnZXIuZGVidWcoYFJlc291cmNlIGluaXRpYWxpemF0aW9uIGVycm9yOiAke2Vycm9yfWApO1xuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIEVuc3VyZSBzZXJ2ZXIgaXMgaW5pdGlhbGl6ZWQgYmVmb3JlIGFueSBvcGVyYXRpb25cbiAgICogRklYICM2MTA6IEFkZGVkIGZvciB0ZXN0IGNvbXBhdGliaWxpdHkgLSB0ZXN0cyBkb24ndCBjYWxsIHJ1bigpXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGVuc3VyZUluaXRpYWxpemVkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmlzSW5pdGlhbGl6ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgLy8gSWYgaW5pdGlhbGl6YXRpb24gaXMgYWxyZWFkeSBpbiBwcm9ncmVzcywgd2FpdCBmb3IgaXRcbiAgICBpZiAodGhpcy5pbml0aWFsaXphdGlvblByb21pc2UpIHtcbiAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6YXRpb25Qcm9taXNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICAvLyBTdGFydCBpbml0aWFsaXphdGlvblxuICAgIHRoaXMuaW5pdGlhbGl6YXRpb25Qcm9taXNlID0gKGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVBvcnRmb2xpbygpO1xuICAgICAgICBhd2FpdCB0aGlzLmNvbXBsZXRlSW5pdGlhbGl6YXRpb24oKTtcbiAgICAgICAgbG9nZ2VyLmluZm8oXCJQb3J0Zm9saW8gYW5kIHBlcnNvbmFzIGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseSAobGF6eSlcIik7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBFcnJvckhhbmRsZXIubG9nRXJyb3IoJ0RvbGxob3VzZU1DUFNlcnZlci5lbnN1cmVJbml0aWFsaXplZCcsIGVycm9yKTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfSkoKTtcbiAgICBcbiAgICBhd2FpdCB0aGlzLmluaXRpYWxpemF0aW9uUHJvbWlzZTtcbiAgfVxuICBcbiAgLy8gVG9vbCBoYW5kbGVyIG1ldGhvZHMgLSBub3cgcHVibGljIGZvciBhY2Nlc3MgZnJvbSB0b29sIG1vZHVsZXNcbiAgXG4gIGFzeW5jIGxpc3RQZXJzb25hcygpIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMucGVyc29uYUhhbmRsZXIhLmxpc3RQZXJzb25hcygpO1xuICB9XG5cbiAgLy8gPT09PT0gUkVNT1ZFRDogTGVnYWN5IHBlcnNvbmEtc3BlY2lmaWMgbWV0aG9kcyAoSXNzdWUgIzI4MSkgPT09PT1cbiAgLy8gVXNlIGFjdGl2YXRlRWxlbWVudChuYW1lLCAncGVyc29uYScpLCBkZWFjdGl2YXRlRWxlbWVudChuYW1lLCAncGVyc29uYScpLFxuICAvLyBnZXRBY3RpdmVFbGVtZW50cygncGVyc29uYScpLCBhbmQgZ2V0RWxlbWVudERldGFpbHMobmFtZSwgJ3BlcnNvbmEnKSBpbnN0ZWFkLlxuICAvLyBUaGVzZSB3ZXJlIHJlbW92ZWQgdG8gbm9ybWFsaXplIHBlcnNvbmEgaGFuZGxpbmcgdGhyb3VnaCB0aGUgZ2VuZXJpYyBlbGVtZW50IEFQSS5cblxuICBhc3luYyByZWxvYWRQZXJzb25hcygpIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMucGVyc29uYUhhbmRsZXIhLnJlbG9hZFBlcnNvbmFzKCk7XG4gIH1cblxuICAvLyA9PT09PSBFbGVtZW50IE1ldGhvZHMgKEdlbmVyaWMgZm9yIGFsbCBlbGVtZW50IHR5cGVzKSA9PT09PVxuICBcbiAgYXN5bmMgbGlzdEVsZW1lbnRzKHR5cGU6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBub3JtYWxpemVkVHlwZSA9IHRoaXMuZWxlbWVudENSVURIYW5kbGVyIS5ub3JtYWxpemVFbGVtZW50VHlwZSh0eXBlKTtcbiAgICAgIGlmIChub3JtYWxpemVkVHlwZSA9PT0gRWxlbWVudFR5cGUuUEVSU09OQSkge1xuICAgICAgICByZXR1cm4gdGhpcy5saXN0UGVyc29uYXMoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRDUlVESGFuZGxlciEubGlzdEVsZW1lbnRzKG5vcm1hbGl6ZWRUeXBlKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgRXJyb3JIYW5kbGVyLmxvZ0Vycm9yKCdEb2xsaG91c2VNQ1BTZXJ2ZXIubGlzdEVsZW1lbnRzJywgZXJyb3IsIHsgdHlwZSB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYOKdjCBGYWlsZWQgdG8gbGlzdCAke3R5cGV9OiAke0Vycm9ySGFuZGxlci5nZXRVc2VyTWVzc2FnZShlcnJvcil9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgXG4gIGFzeW5jIGFjdGl2YXRlRWxlbWVudChuYW1lOiBzdHJpbmcsIHR5cGU6IHN0cmluZywgY29udGV4dD86IFJlY29yZDxzdHJpbmcsIGFueT4pIHtcbiAgICB0cnkge1xuICAgICAgLy8gRklYOiBJc3N1ZSAjMjgxIC0gUm91dGUgYWxsIGVsZW1lbnQgdHlwZXMgdGhyb3VnaCBlbGVtZW50Q1JVREhhbmRsZXJcbiAgICAgIC8vIFBlcnNvbmFIYW5kbGVyLmFjdGl2YXRlUGVyc29uYSBpcyBkZXByZWNhdGVkOyBQZXJzb25hQWN0aXZhdGlvblN0cmF0ZWd5IGhhbmRsZXMgcGVyc29uYXNcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRUeXBlID0gdGhpcy5lbGVtZW50Q1JVREhhbmRsZXIhLm5vcm1hbGl6ZUVsZW1lbnRUeXBlKHR5cGUpO1xuICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudENSVURIYW5kbGVyIS5hY3RpdmF0ZUVsZW1lbnQobmFtZSwgbm9ybWFsaXplZFR5cGUsIGNvbnRleHQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBFcnJvckhhbmRsZXIubG9nRXJyb3IoJ0RvbGxob3VzZU1DUFNlcnZlci5hY3RpdmF0ZUVsZW1lbnQnLCBlcnJvciwgeyB0eXBlLCBuYW1lIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBg4p2MIEZhaWxlZCB0byBhY3RpdmF0ZSAke3R5cGV9ICcke25hbWV9JzogJHtFcnJvckhhbmRsZXIuZ2V0VXNlck1lc3NhZ2UoZXJyb3IpfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG4gIFxuICBhc3luYyBnZXRBY3RpdmVFbGVtZW50cyh0eXBlOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgLy8gRklYOiBJc3N1ZSAjMjgxIC0gUm91dGUgYWxsIGVsZW1lbnQgdHlwZXMgdGhyb3VnaCBlbGVtZW50Q1JVREhhbmRsZXJcbiAgICAgIC8vIFBlcnNvbmFIYW5kbGVyLmdldEFjdGl2ZVBlcnNvbmEgaXMgZGVwcmVjYXRlZDsgUGVyc29uYUFjdGl2YXRpb25TdHJhdGVneSBoYW5kbGVzIHBlcnNvbmFzXG4gICAgICBjb25zdCBub3JtYWxpemVkVHlwZSA9IHRoaXMuZWxlbWVudENSVURIYW5kbGVyIS5ub3JtYWxpemVFbGVtZW50VHlwZSh0eXBlKTtcbiAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRDUlVESGFuZGxlciEuZ2V0QWN0aXZlRWxlbWVudHMobm9ybWFsaXplZFR5cGUpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBFcnJvckhhbmRsZXIubG9nRXJyb3IoJ0RvbGxob3VzZU1DUFNlcnZlci5nZXRBY3RpdmVFbGVtZW50cycsIGVycm9yLCB7IHR5cGUgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGDinYwgRmFpbGVkIHRvIGdldCBhY3RpdmUgJHt0eXBlfTogJHtFcnJvckhhbmRsZXIuZ2V0VXNlck1lc3NhZ2UoZXJyb3IpfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG4gIFxuICBhc3luYyBkZWFjdGl2YXRlRWxlbWVudChuYW1lOiBzdHJpbmcsIHR5cGU6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICAvLyBGSVg6IElzc3VlICMyODEgLSBSb3V0ZSBhbGwgZWxlbWVudCB0eXBlcyB0aHJvdWdoIGVsZW1lbnRDUlVESGFuZGxlclxuICAgICAgLy8gUGVyc29uYUhhbmRsZXIuZGVhY3RpdmF0ZVBlcnNvbmEgaXMgZGVwcmVjYXRlZDsgUGVyc29uYUFjdGl2YXRpb25TdHJhdGVneSBoYW5kbGVzIHBlcnNvbmFzXG4gICAgICBjb25zdCBub3JtYWxpemVkVHlwZSA9IHRoaXMuZWxlbWVudENSVURIYW5kbGVyIS5ub3JtYWxpemVFbGVtZW50VHlwZSh0eXBlKTtcbiAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRDUlVESGFuZGxlciEuZGVhY3RpdmF0ZUVsZW1lbnQobmFtZSwgbm9ybWFsaXplZFR5cGUpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBFcnJvckhhbmRsZXIubG9nRXJyb3IoJ0RvbGxob3VzZU1DUFNlcnZlci5kZWFjdGl2YXRlRWxlbWVudCcsIGVycm9yLCB7IHR5cGUsIG5hbWUgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGDinYwgRmFpbGVkIHRvIGRlYWN0aXZhdGUgJHt0eXBlfSAnJHtuYW1lfSc6ICR7RXJyb3JIYW5kbGVyLmdldFVzZXJNZXNzYWdlKGVycm9yKX1gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBcbiAgYXN5bmMgZ2V0RWxlbWVudERldGFpbHMobmFtZTogc3RyaW5nLCB0eXBlOiBzdHJpbmcpIHtcbiAgICAvLyBGSVg6IElzc3VlICMyNzYgLSBSb3V0ZSBhbGwgZWxlbWVudCB0eXBlcyB0aHJvdWdoIGVsZW1lbnRDUlVESGFuZGxlciBmb3IgY29uc2lzdGVudCBlcnJvciBoYW5kbGluZ1xuICAgIC8vIFBlcnNvbmFIYW5kbGVyLmdldFBlcnNvbmFEZXRhaWxzIGlzIGRlcHJlY2F0ZWQ7IFBlcnNvbmFBY3RpdmF0aW9uU3RyYXRlZ3kgaGFuZGxlcyBwZXJzb25hc1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRUeXBlID0gdGhpcy5lbGVtZW50Q1JVREhhbmRsZXIhLm5vcm1hbGl6ZUVsZW1lbnRUeXBlKHR5cGUpO1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnRDUlVESGFuZGxlciEuZ2V0RWxlbWVudERldGFpbHMobmFtZSwgbm9ybWFsaXplZFR5cGUpO1xuICB9XG4gIFxuICBhc3luYyByZWxvYWRFbGVtZW50cyh0eXBlOiBzdHJpbmcpIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudENSVURIYW5kbGVyIS5yZWxvYWRFbGVtZW50cyh0eXBlKTtcbiAgfVxuXG4gIC8vIEVsZW1lbnQtc3BlY2lmaWMgbWV0aG9kc1xuICBhc3luYyByZW5kZXJUZW1wbGF0ZShuYW1lOiBzdHJpbmcsIHZhcmlhYmxlczogUmVjb3JkPHN0cmluZywgYW55Pikge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50Q1JVREhhbmRsZXIhLnJlbmRlclRlbXBsYXRlKG5hbWUsIHZhcmlhYmxlcyk7XG4gIH1cblxuICBhc3luYyBleGVjdXRlQWdlbnQobmFtZTogc3RyaW5nLCBwYXJhbWV0ZXJzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnRDUlVESGFuZGxlciEuZXhlY3V0ZUFnZW50KG5hbWUsIHBhcmFtZXRlcnMpO1xuICB9XG4gIFxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IGVsZW1lbnQgaW4gdGhlIHBvcnRmb2xpby5cbiAgICogQHBhcmFtIGFyZ3MuZWxlbWVudHMgLSBGb3IgZW5zZW1ibGVzOiBhcnJheSBvZiBlbGVtZW50IHJlZmVyZW5jZXMgKElzc3VlICMyNzgpXG4gICAqL1xuICBhc3luYyBjcmVhdGVFbGVtZW50KGFyZ3M6IHtuYW1lOiBzdHJpbmc7IHR5cGU6IHN0cmluZzsgZGVzY3JpcHRpb246IHN0cmluZzsgY29udGVudD86IHN0cmluZzsgaW5zdHJ1Y3Rpb25zPzogc3RyaW5nOyBtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+OyBlbGVtZW50cz86IEVuc2VtYmxlRWxlbWVudFtdfSkge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICAvLyBGSVg6IElzc3VlICMyMCAtIFJlbW92ZSBwZXJzb25hIHNwZWNpYWwgY2FzZSwgcm91dGUgYWxsIGVsZW1lbnQgY3JlYXRpb24gdGhyb3VnaCBFbGVtZW50Q1JVREhhbmRsZXJcbiAgICAvLyBUaGlzIGVuc3VyZXMgY29uc2lzdGVudCBkdXBsaWNhdGUgY2hlY2tpbmcgYW5kIGVycm9yIGhhbmRsaW5nIGZvciBhbGwgZWxlbWVudCB0eXBlc1xuICAgIC8vIEZJWDogSXNzdWUgIzI3OCAtIFN1cHBvcnQgZWxlbWVudHMgcGFyYW1ldGVyIGZvciBlbnNlbWJsZXNcbiAgICBjb25zdCBub3JtYWxpemVkVHlwZSA9IHRoaXMuZWxlbWVudENSVURIYW5kbGVyIS5ub3JtYWxpemVFbGVtZW50VHlwZShhcmdzLnR5cGUpO1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnRDUlVESGFuZGxlciEuY3JlYXRlRWxlbWVudCh7Li4uYXJncywgdHlwZTogbm9ybWFsaXplZFR5cGV9KTtcbiAgfVxuXG4gIGFzeW5jIGVkaXRFbGVtZW50KGFyZ3M6IHtuYW1lOiBzdHJpbmc7IHR5cGU6IHN0cmluZzsgaW5wdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+fSkge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICAvLyBGSVg6IElzc3VlICMyNzYgLSBSb3V0ZSBhbGwgZWxlbWVudCB0eXBlcyB0aHJvdWdoIGVsZW1lbnRDUlVESGFuZGxlciBmb3IgY29uc2lzdGVudCBlcnJvciBoYW5kbGluZ1xuICAgIC8vIFBlcnNvbmFIYW5kbGVyLmVkaXRQZXJzb25hIGlzIGRlcHJlY2F0ZWQ7IGVsZW1lbnRDUlVESGFuZGxlciBoYW5kbGVzIHBlcnNvbmFzIHZpYSBQZXJzb25hQWN0aXZhdGlvblN0cmF0ZWd5XG4gICAgY29uc3Qgbm9ybWFsaXplZFR5cGUgPSB0aGlzLmVsZW1lbnRDUlVESGFuZGxlciEubm9ybWFsaXplRWxlbWVudFR5cGUoYXJncy50eXBlKTtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50Q1JVREhhbmRsZXIhLmVkaXRFbGVtZW50KHsuLi5hcmdzLCB0eXBlOiBub3JtYWxpemVkVHlwZX0pO1xuICB9XG5cbiAgYXN5bmMgdmFsaWRhdGVFbGVtZW50KGFyZ3M6IHtuYW1lOiBzdHJpbmc7IHR5cGU6IHN0cmluZzsgc3RyaWN0PzogYm9vbGVhbn0pIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgLy8gRklYOiBJc3N1ZSAjMjc2IC0gUm91dGUgYWxsIGVsZW1lbnQgdHlwZXMgdGhyb3VnaCBlbGVtZW50Q1JVREhhbmRsZXIgZm9yIGNvbnNpc3RlbnQgZXJyb3IgaGFuZGxpbmdcbiAgICAvLyBQZXJzb25hSGFuZGxlci52YWxpZGF0ZVBlcnNvbmEgaXMgZGVwcmVjYXRlZDsgZWxlbWVudENSVURIYW5kbGVyIGhhbmRsZXMgcGVyc29uYXNcbiAgICBjb25zdCBub3JtYWxpemVkVHlwZSA9IHRoaXMuZWxlbWVudENSVURIYW5kbGVyIS5ub3JtYWxpemVFbGVtZW50VHlwZShhcmdzLnR5cGUpO1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnRDUlVESGFuZGxlciEudmFsaWRhdGVFbGVtZW50KHsuLi5hcmdzLCB0eXBlOiBub3JtYWxpemVkVHlwZX0pO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlRWxlbWVudChhcmdzOiB7bmFtZTogc3RyaW5nOyB0eXBlOiBzdHJpbmc7IGRlbGV0ZURhdGE/OiBib29sZWFufSkge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICAvLyBGSVg6IElzc3VlICMyNzYgLSBSb3V0ZSBhbGwgZWxlbWVudCB0eXBlcyB0aHJvdWdoIGVsZW1lbnRDUlVESGFuZGxlciBmb3IgY29uc2lzdGVudCBlcnJvciBoYW5kbGluZ1xuICAgIC8vIFBlcnNvbmFIYW5kbGVyLmRlbGV0ZVBlcnNvbmEgaXMgZGVwcmVjYXRlZDsgZWxlbWVudENSVURIYW5kbGVyIGhhbmRsZXMgcGVyc29uYXMgdmlhIGRlZGljYXRlZCBkZWxldGUgcGF0aFxuICAgIGNvbnN0IG5vcm1hbGl6ZWRUeXBlID0gdGhpcy5lbGVtZW50Q1JVREhhbmRsZXIhLm5vcm1hbGl6ZUVsZW1lbnRUeXBlKGFyZ3MudHlwZSk7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudENSVURIYW5kbGVyIS5kZWxldGVFbGVtZW50KHsuLi5hcmdzLCB0eXBlOiBub3JtYWxpemVkVHlwZX0pO1xuICB9XG5cbiAgYXN5bmMgYnJvd3NlQ29sbGVjdGlvbihzZWN0aW9uPzogc3RyaW5nLCB0eXBlPzogc3RyaW5nKSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyIS5icm93c2VDb2xsZWN0aW9uKHNlY3Rpb24sIHR5cGUpO1xuICB9XG5cbiAgYXN5bmMgc2VhcmNoQ29sbGVjdGlvbihxdWVyeTogc3RyaW5nKSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyIS5zZWFyY2hDb2xsZWN0aW9uKHF1ZXJ5KTtcbiAgfVxuXG4gIGFzeW5jIHNlYXJjaENvbGxlY3Rpb25FbmhhbmNlZChxdWVyeTogc3RyaW5nLCBvcHRpb25zOiBhbnkgPSB7fSkge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlciEuc2VhcmNoQ29sbGVjdGlvbkVuaGFuY2VkKHF1ZXJ5LCBvcHRpb25zKTtcbiAgfVxuXG4gIGFzeW5jIGdldENvbGxlY3Rpb25Db250ZW50KHBhdGg6IHN0cmluZykge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlciEuZ2V0Q29sbGVjdGlvbkNvbnRlbnQocGF0aCk7XG4gIH1cblxuICBhc3luYyBpbnN0YWxsQ29udGVudChpbnB1dFBhdGg6IHN0cmluZykge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlciEuaW5zdGFsbENvbnRlbnQoaW5wdXRQYXRoKTtcbiAgfVxuXG4gIGFzeW5jIHN1Ym1pdENvbnRlbnQoY29udGVudElkZW50aWZpZXI6IHN0cmluZykge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlciEuc3VibWl0Q29udGVudChjb250ZW50SWRlbnRpZmllcik7XG4gIH1cblxuICBhc3luYyBnZXRDb2xsZWN0aW9uQ2FjaGVIZWFsdGgoKSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyIS5nZXRDb2xsZWN0aW9uQ2FjaGVIZWFsdGgoKTtcbiAgfVxuXG4gIC8vIFVzZXIgaWRlbnRpdHkgbWFuYWdlbWVudCAtIGRlbGVnYXRlZCB0byBJZGVudGl0eUhhbmRsZXJcbiAgYXN5bmMgc2V0VXNlcklkZW50aXR5KHVzZXJuYW1lOiBzdHJpbmcsIGVtYWlsPzogc3RyaW5nKSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLmlkZW50aXR5SGFuZGxlciEuc2V0VXNlcklkZW50aXR5KHVzZXJuYW1lLCBlbWFpbCk7XG4gIH1cblxuICBhc3luYyBnZXRVc2VySWRlbnRpdHkoKSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLmlkZW50aXR5SGFuZGxlciEuZ2V0VXNlcklkZW50aXR5KCk7XG4gIH1cblxuICBhc3luYyBjbGVhclVzZXJJZGVudGl0eSgpIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMuaWRlbnRpdHlIYW5kbGVyIS5jbGVhclVzZXJJZGVudGl0eSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDdXJyZW50VXNlckZvckF0dHJpYnV0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaWRlbnRpdHlIYW5kbGVyIS5nZXRDdXJyZW50VXNlckZvckF0dHJpYnV0aW9uKCk7XG4gIH1cblxuICAvLyBHaXRIdWIgYXV0aGVudGljYXRpb24gbWFuYWdlbWVudFxuICBhc3luYyBzZXR1cEdpdEh1YkF1dGgoKSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLmdpdGh1YkF1dGhIYW5kbGVyIS5zZXR1cEdpdEh1YkF1dGgoKTtcbiAgfVxuICBcbiAgYXN5bmMgY2hlY2tHaXRIdWJBdXRoKCkge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5naXRodWJBdXRoSGFuZGxlciEuY2hlY2tHaXRIdWJBdXRoKCk7XG4gIH1cbiAgXG4gIGFzeW5jIGdldE9BdXRoSGVscGVyU3RhdHVzKHZlcmJvc2U6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5naXRodWJBdXRoSGFuZGxlciEuZ2V0T0F1dGhIZWxwZXJTdGF0dXModmVyYm9zZSk7XG4gIH1cbiAgXG5cbiAgXG4gIGFzeW5jIGNsZWFyR2l0SHViQXV0aCgpIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMuZ2l0aHViQXV0aEhhbmRsZXIhLmNsZWFyR2l0SHViQXV0aCgpO1xuICB9XG5cbiAgLy8gT0F1dGggY29uZmlndXJhdGlvbiBtYW5hZ2VtZW50XG4gIGFzeW5jIGNvbmZpZ3VyZU9BdXRoKGNsaWVudF9pZD86IHN0cmluZykge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5naXRodWJBdXRoSGFuZGxlciEuY29uZmlndXJlT0F1dGgoY2xpZW50X2lkKTtcbiAgfVxuXG4gIC8vIFJFTU9WRUQ6IGNyZWF0ZVBlcnNvbmEoKSAtIHVzZSBjcmVhdGVFbGVtZW50KCkgd2l0aCB0eXBlPSdwZXJzb25hJyBpbnN0ZWFkICh2MiBicmVha2luZyBjaGFuZ2UpXG5cbiAgLy8gcmV0cnlOZXR3b3JrT3BlcmF0aW9uIGhhcyBiZWVuIHJlbW92ZWQgd2l0aCBVcGRhdGVUb29sc1xuXG5cblxuXG5cblxuXG5cblxuICAvKipcbiAgICogQ29uZmlndXJlIGluZGljYXRvciBzZXR0aW5ncyAoZGVsZWdhdGVkIHRvIERpc3BsYXlDb25maWdIYW5kbGVyKVxuICAgKi9cbiAgYXN5bmMgY29uZmlndXJlSW5kaWNhdG9yKGNvbmZpZzogUGFydGlhbDxJbmRpY2F0b3JDb25maWc+KSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLmRpc3BsYXlDb25maWdIYW5kbGVyIS5jb25maWd1cmVJbmRpY2F0b3IoY29uZmlnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY3VycmVudCBpbmRpY2F0b3IgY29uZmlndXJhdGlvbiAoZGVsZWdhdGVkIHRvIERpc3BsYXlDb25maWdIYW5kbGVyKVxuICAgKi9cbiAgYXN5bmMgZ2V0SW5kaWNhdG9yQ29uZmlnKCkge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5Q29uZmlnSGFuZGxlciEuZ2V0SW5kaWNhdG9yQ29uZmlnKCk7XG4gIH1cblxuICAvKipcbiAgICogQ29uZmlndXJlIGNvbGxlY3Rpb24gc3VibWlzc2lvbiBzZXR0aW5ncyAoZGVsZWdhdGVkIHRvIENvbGxlY3Rpb25IYW5kbGVyKVxuICAgKi9cbiAgYXN5bmMgY29uZmlndXJlQ29sbGVjdGlvblN1Ym1pc3Npb24oYXV0b1N1Ym1pdDogYm9vbGVhbikge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlciEuY29uZmlndXJlQ29sbGVjdGlvblN1Ym1pc3Npb24oYXV0b1N1Ym1pdCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGNvbGxlY3Rpb24gc3VibWlzc2lvbiBjb25maWd1cmF0aW9uIChkZWxlZ2F0ZWQgdG8gQ29sbGVjdGlvbkhhbmRsZXIpXG4gICAqL1xuICBhc3luYyBnZXRDb2xsZWN0aW9uU3VibWlzc2lvbkNvbmZpZygpIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIhLmdldENvbGxlY3Rpb25TdWJtaXNzaW9uQ29uZmlnKCk7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBFeHBvcnQgYSBzaW5nbGUgcGVyc29uYVxuICAgKi9cbiAgYXN5bmMgZXhwb3J0UGVyc29uYShwZXJzb25hTmFtZTogc3RyaW5nKSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLnBlcnNvbmFIYW5kbGVyIS5leHBvcnRQZXJzb25hKHBlcnNvbmFOYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBvcnQgYWxsIHBlcnNvbmFzXG4gICAqL1xuICBhc3luYyBleHBvcnRBbGxQZXJzb25hcyhpbmNsdWRlRGVmYXVsdHMgPSB0cnVlKSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLnBlcnNvbmFIYW5kbGVyIS5leHBvcnRBbGxQZXJzb25hcyhpbmNsdWRlRGVmYXVsdHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhIHBlcnNvbmFcbiAgICovXG4gIGFzeW5jIGltcG9ydFBlcnNvbmEoc291cmNlOiBzdHJpbmcsIG92ZXJ3cml0ZSA9IGZhbHNlKSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLnBlcnNvbmFIYW5kbGVyIS5pbXBvcnRQZXJzb25hKHNvdXJjZSwgb3ZlcndyaXRlKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIFBvcnRmb2xpbyBtYW5hZ2VtZW50IG1ldGhvZHNcbiAgICovXG5cbiAgLyoqXG4gICAqIENoZWNrIHBvcnRmb2xpbyBzdGF0dXMgaW5jbHVkaW5nIHJlcG9zaXRvcnkgZXhpc3RlbmNlIGFuZCBzeW5jIGluZm9ybWF0aW9uXG4gICAqL1xuICBhc3luYyBwb3J0Zm9saW9TdGF0dXModXNlcm5hbWU/OiBzdHJpbmcpIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMucG9ydGZvbGlvSGFuZGxlciEucG9ydGZvbGlvU3RhdHVzKHVzZXJuYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIGEgbmV3IEdpdEh1YiBwb3J0Zm9saW8gcmVwb3NpdG9yeVxuICAgKi9cbiAgYXN5bmMgaW5pdFBvcnRmb2xpbyhvcHRpb25zOiB7cmVwb3NpdG9yeU5hbWU/OiBzdHJpbmc7IHByaXZhdGU/OiBib29sZWFuOyBkZXNjcmlwdGlvbj86IHN0cmluZ30pIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMucG9ydGZvbGlvSGFuZGxlciEuaW5pdFBvcnRmb2xpbyhvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25maWd1cmUgcG9ydGZvbGlvIHNldHRpbmdzXG4gICAqL1xuICBhc3luYyBwb3J0Zm9saW9Db25maWcob3B0aW9uczoge2F1dG9TeW5jPzogYm9vbGVhbjsgZGVmYXVsdFZpc2liaWxpdHk/OiBzdHJpbmc7IGF1dG9TdWJtaXQ/OiBib29sZWFuOyByZXBvc2l0b3J5TmFtZT86IHN0cmluZ30pIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMucG9ydGZvbGlvSGFuZGxlciEucG9ydGZvbGlvQ29uZmlnKG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN5bmMgcG9ydGZvbGlvIHdpdGggR2l0SHViXG4gICAqL1xuICBhc3luYyBzeW5jUG9ydGZvbGlvKG9wdGlvbnM6IHtcbiAgICBkaXJlY3Rpb246IHN0cmluZztcbiAgICBtb2RlPzogc3RyaW5nO1xuICAgIGZvcmNlOiBib29sZWFuO1xuICAgIGRyeVJ1bjogYm9vbGVhbjtcbiAgICBjb25maXJtRGVsZXRpb25zPzogYm9vbGVhbjtcbiAgfSkge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5wb3J0Zm9saW9IYW5kbGVyIS5zeW5jUG9ydGZvbGlvKG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBjb25maWd1cmF0aW9uIG9wZXJhdGlvbnMgLSBkZWxlZ2F0ZXMgdG8gQ29uZmlnSGFuZGxlclxuICAqL1xuICBhc3luYyBoYW5kbGVDb25maWdPcGVyYXRpb24ob3B0aW9uczogYW55KSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLmNvbmZpZ0hhbmRsZXIhLmhhbmRsZUNvbmZpZ09wZXJhdGlvbihvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgc3luYyBvcGVyYXRpb25zIC0gZGVsZWdhdGVzIHRvIFN5bmNIYW5kbGVyXG4gICAqL1xuICBhc3luYyBoYW5kbGVTeW5jT3BlcmF0aW9uKG9wdGlvbnM6IGFueSkge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5zeW5jSGFuZGxlciEuaGFuZGxlU3luY09wZXJhdGlvbihvcHRpb25zKTtcbiAgfVxuXG4gIGFzeW5jIGRpc3Bvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5jb250YWluZXIuZGlzcG9zZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlYXJjaCBsb2NhbCBwb3J0Zm9saW8gdXNpbmcgdGhlIG1ldGFkYXRhIGluZGV4IHN5c3RlbVxuICAgKiBUaGlzIHByb3ZpZGVzIGZhc3QsIGNvbXByZWhlbnNpdmUgc2VhcmNoIGFjcm9zcyBhbGwgZWxlbWVudCB0eXBlc1xuICAgKi9cbiAgYXN5bmMgc2VhcmNoUG9ydGZvbGlvKG9wdGlvbnM6IHtcbiAgICBxdWVyeTogc3RyaW5nOyBcbiAgICBlbGVtZW50VHlwZT86IHN0cmluZzsgXG4gICAgZnV6enlNYXRjaD86IGJvb2xlYW47IFxuICAgIG1heFJlc3VsdHM/OiBudW1iZXI7IFxuICAgIGluY2x1ZGVLZXl3b3Jkcz86IGJvb2xlYW47IFxuICAgIGluY2x1ZGVUYWdzPzogYm9vbGVhbjsgXG4gICAgaW5jbHVkZVRyaWdnZXJzPzogYm9vbGVhbjsgXG4gICAgaW5jbHVkZURlc2NyaXB0aW9ucz86IGJvb2xlYW47XG4gIH0pIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMucG9ydGZvbGlvSGFuZGxlciEuc2VhcmNoUG9ydGZvbGlvKG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlYXJjaCBhY3Jvc3MgYWxsIHNvdXJjZXMgKGxvY2FsLCBHaXRIdWIsIGNvbGxlY3Rpb24pIHVzaW5nIFVuaWZpZWRJbmRleE1hbmFnZXJcbiAgICogVGhpcyBwcm92aWRlcyBjb21wcmVoZW5zaXZlIHNlYXJjaCB3aXRoIGR1cGxpY2F0ZSBkZXRlY3Rpb24gYW5kIHZlcnNpb24gY29tcGFyaXNvblxuICAgKi9cbiAgYXN5bmMgc2VhcmNoQWxsKG9wdGlvbnM6IHtcbiAgICBxdWVyeTogc3RyaW5nO1xuICAgIHNvdXJjZXM/OiBzdHJpbmdbXTtcbiAgICBlbGVtZW50VHlwZT86IHN0cmluZztcbiAgICBwYWdlPzogbnVtYmVyO1xuICAgIHBhZ2VTaXplPzogbnVtYmVyO1xuICAgIHNvcnRCeT86IHN0cmluZztcbiAgfSkge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5wb3J0Zm9saW9IYW5kbGVyIS5zZWFyY2hBbGwob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogRmluZCBzZW1hbnRpY2FsbHkgc2ltaWxhciBlbGVtZW50cyB1c2luZyBFbmhhbmNlZCBJbmRleFxuICAgKi9cbiAgYXN5bmMgZmluZFNpbWlsYXJFbGVtZW50cyhvcHRpb25zOiB7XG4gICAgZWxlbWVudE5hbWU6IHN0cmluZztcbiAgICBlbGVtZW50VHlwZT86IHN0cmluZztcbiAgICBsaW1pdDogbnVtYmVyO1xuICAgIHRocmVzaG9sZDogbnVtYmVyO1xuICB9KSB7XG4gICAgcmV0dXJuIHRoaXMuZW5oYW5jZWRJbmRleEhhbmRsZXIhLmZpbmRTaW1pbGFyRWxlbWVudHMob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFsbCByZWxhdGlvbnNoaXBzIGZvciBhIHNwZWNpZmljIGVsZW1lbnRcbiAgICovXG4gIGFzeW5jIGdldEVsZW1lbnRSZWxhdGlvbnNoaXBzKG9wdGlvbnM6IHtcbiAgICBlbGVtZW50TmFtZTogc3RyaW5nO1xuICAgIGVsZW1lbnRUeXBlPzogc3RyaW5nO1xuICAgIHJlbGF0aW9uc2hpcFR5cGVzPzogc3RyaW5nW107XG4gIH0pIHtcbiAgICByZXR1cm4gdGhpcy5lbmhhbmNlZEluZGV4SGFuZGxlciEuZ2V0RWxlbWVudFJlbGF0aW9uc2hpcHMob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoIGZvciBlbGVtZW50cyBieSBhY3Rpb24gdmVyYlxuICAgKi9cbiAgYXN5bmMgc2VhcmNoQnlWZXJiKG9wdGlvbnM6IHtcbiAgICB2ZXJiOiBzdHJpbmc7XG4gICAgbGltaXQ6IG51bWJlcjtcbiAgfSkge1xuICAgIHJldHVybiB0aGlzLmVuaGFuY2VkSW5kZXhIYW5kbGVyIS5zZWFyY2hCeVZlcmIob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHN0YXRpc3RpY3MgYWJvdXQgRW5oYW5jZWQgSW5kZXggcmVsYXRpb25zaGlwc1xuICAgKi9cbiAgYXN5bmMgZ2V0UmVsYXRpb25zaGlwU3RhdHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZW5oYW5jZWRJbmRleEhhbmRsZXIhLmdldFJlbGF0aW9uc2hpcFN0YXRzKCk7XG4gIH1cblxuICBhc3luYyBydW4oKSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwiRG9sbGhvdXNlTUNQU2VydmVyLnJ1bigpIHN0YXJ0ZWRcIik7XG4gICAgbG9nZ2VyLmluZm8oXCJTdGFydGluZyBEb2xsaG91c2VNQ1Agc2VydmVyLi4uXCIpO1xuXG4gICAgY29uc3QgdGltZXIgPSB0aGlzLmNvbnRhaW5lci5yZXNvbHZlPFN0YXJ0dXBUaW1lcj4oJ1N0YXJ0dXBUaW1lcicpO1xuXG4gICAgLy8gSXNzdWUgIzcwNjogQ3JpdGljYWwgcGF0aCBvbmx5IOKAlCBnZXQgdG8gY29ubmVjdCgpIGFzIGZhc3QgYXMgcG9zc2libGVcbiAgICAvLyBOb24tY3JpdGljYWwgd29yayAobWVtb3J5IGF1dG8tbG9hZCwgYWN0aXZhdGlvbiByZXN0b3JlLCBldGMuKSBpc1xuICAgIC8vIGRlZmVycmVkIHRvIGNvbXBsZXRlRGVmZXJyZWRTZXR1cCgpIHdoaWNoIHJ1bnMgcG9zdC1jb25uZWN0LlxuICAgIHRyeSB7XG4gICAgICB0aW1lci5zdGFydFBoYXNlKCdwb3J0Zm9saW9fcHJlcGFyZScsIHRydWUpO1xuICAgICAgYXdhaXQgdGhpcy5pbml0aWFsaXplUG9ydGZvbGlvKCk7XG4gICAgICB0aW1lci5lbmRQaGFzZSgncG9ydGZvbGlvX3ByZXBhcmUnKTtcblxuICAgICAgdGltZXIuc3RhcnRQaGFzZSgnaGFuZGxlcl9jcmVhdGlvbicsIHRydWUpO1xuICAgICAgYXdhaXQgdGhpcy5jb21wbGV0ZUluaXRpYWxpemF0aW9uKCk7XG4gICAgICB0aW1lci5lbmRQaGFzZSgnaGFuZGxlcl9jcmVhdGlvbicpO1xuXG4gICAgICAvLyBJbml0aWFsaXplIG9wZXJhdGlvbmFsIHRlbGVtZXRyeSAoYXN5bmMsIG5vbi1ibG9ja2luZywgbmV2ZXIgdGhyb3dzKVxuICAgICAgY29uc3Qgb3BlcmF0aW9uYWxUZWxlbWV0cnkgPSB0aGlzLmNvbnRhaW5lci5yZXNvbHZlPE9wZXJhdGlvbmFsVGVsZW1ldHJ5PignT3BlcmF0aW9uYWxUZWxlbWV0cnknKTtcbiAgICAgIG9wZXJhdGlvbmFsVGVsZW1ldHJ5LmluaXRpYWxpemUoKS5jYXRjaCgoKSA9PiB7XG4gICAgICAgIC8vIFRlbGVtZXRyeSBlcnJvcnMgYXJlIGxvZ2dlZCBpbnRlcm5hbGx5LCBzYWZlIHRvIGlnbm9yZSBoZXJlXG4gICAgICB9KTtcblxuICAgICAgbG9nZ2VyLmluZm8oXCJQb3J0Zm9saW8gYW5kIHBlcnNvbmFzIGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseVwiKTtcbiAgICAgIGxvZ2dlci5pbmZvKFwiRG9sbGhvdXNlTUNQIHNlcnZlciByZWFkeSAtIHdhaXRpbmcgZm9yIE1DUCBjb25uZWN0aW9uIG9uIHN0ZGlvXCIpO1xuICAgICAgbG9nZ2VyLmRlYnVnKFwiRG9sbGhvdXNlTUNQU2VydmVyLnJ1bigpIGNvbXBsZXRlZCBpbml0aWFsaXphdGlvblwiKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgRXJyb3JIYW5kbGVyLmxvZ0Vycm9yKCdEb2xsaG91c2VNQ1BTZXJ2ZXIucnVuLmluaXRpYWxpemF0aW9uJywgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7IC8vIFJlLXRocm93IHRvIHByZXZlbnQgc2VydmVyIGZyb20gc3RhcnRpbmcgd2l0aCBpbmNvbXBsZXRlIGluaXRpYWxpemF0aW9uXG4gICAgfVxuXG4gICAgY29uc3QgdHJhbnNwb3J0ID0gbmV3IFN0ZGlvU2VydmVyVHJhbnNwb3J0KCk7XG5cbiAgICAvLyBTZXQgdXAgZ3JhY2VmdWwgc2h1dGRvd24gaGFuZGxlcnNcbiAgICBjb25zdCBjbGVhbnVwID0gYXN5bmMgKCkgPT4ge1xuICAgICAgbG9nZ2VyLmluZm8oXCJTaHV0dGluZyBkb3duIERvbGxob3VzZU1DUCBzZXJ2ZXIuLi5cIik7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuY29udGFpbmVyLmRpc3Bvc2UoKTtcbiAgICAgICAgbG9nZ2VyLmluZm8oXCJDbGVhbnVwIGNvbXBsZXRlZFwiKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcihcIkVycm9yIGR1cmluZyBjbGVhbnVwXCIsIHsgZXJyb3IgfSk7XG4gICAgICB9XG5cbiAgICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgICB9O1xuXG4gICAgLy8gUmVnaXN0ZXIgc2h1dGRvd24gaGFuZGxlcnNcbiAgICBwcm9jZXNzLm9uKCdTSUdJTlQnLCBjbGVhbnVwKTtcbiAgICBwcm9jZXNzLm9uKCdTSUdURVJNJywgY2xlYW51cCk7XG4gICAgcHJvY2Vzcy5vbignU0lHSFVQJywgY2xlYW51cCk7XG5cbiAgICAvLyBDb25uZWN0IEFTQVAg4oCUIHRvb2xzIGFyZSByZWdpc3RlcmVkLCBzZXJ2ZXIgY2FuIGFjY2VwdCByZXF1ZXN0c1xuICAgIHRpbWVyLnN0YXJ0UGhhc2UoJ21jcF9jb25uZWN0JywgdHJ1ZSk7XG4gICAgYXdhaXQgdGhpcy5zZXJ2ZXIuY29ubmVjdCh0cmFuc3BvcnQpO1xuICAgIHRpbWVyLmVuZFBoYXNlKCdtY3BfY29ubmVjdCcpO1xuICAgIHRpbWVyLm1hcmtDb25uZWN0KCk7XG5cbiAgICAvLyBNYXJrIHRoYXQgTUNQIGlzIG5vdyBjb25uZWN0ZWQgLSBubyBtb3JlIGNvbnNvbGUgb3V0cHV0IGFsbG93ZWRcbiAgICBsb2dnZXIuc2V0TUNQQ29ubmVjdGVkKCk7XG5cbiAgICAvLyBJc3N1ZSAjNzA2IFBoYXNlIDM6IEVtaXQgUkVBRFkgc2VudGluZWwgZm9yIGJyaWRnZSBjbGllbnRzXG4gICAgcHJvY2Vzcy5zdGRlcnIud3JpdGUoJ0RPTExIT1VTRU1DUF9SRUFEWVxcbicpO1xuXG4gICAgbG9nZ2VyLmluZm8oXCJEb2xsaG91c2VNQ1Agc2VydmVyIHJ1bm5pbmcgb24gc3RkaW9cIik7XG5cbiAgICAvLyBJc3N1ZSAjNzA2IFBoYXNlIDI6IERlZmVycmVkIHNldHVwIOKAlCBydW5zIHBvc3QtY29ubmVjdCwgbm9uLWJsb2NraW5nXG4gICAgLy8gUGF0dGVybiBlbmNyeXB0aW9uLCBiYWNrZ3JvdW5kIHZhbGlkYXRvciwgbWVtb3J5IGF1dG8tbG9hZCwgYWN0aXZhdGlvblxuICAgIC8vIHJlc3RvcmUsIGxvZyBob29rcywgZGFuZ2VyIHpvbmUgaW5pdCBhbGwgbW92ZSBoZXJlLlxuICAgIGNvbnN0IGRlZmVycmVkUHJvbWlzZSA9IHRoaXMuY29udGFpbmVyLmNvbXBsZXRlRGVmZXJyZWRTZXR1cCgpO1xuICAgIGRlZmVycmVkUHJvbWlzZS5jYXRjaChlcnIgPT4gbG9nZ2VyLndhcm4oJ1tTdGFydHVwXSBEZWZlcnJlZCBzZXR1cCBlcnJvcjonLCBlcnIpKTtcblxuICAgIC8vIElzc3VlICM3MDYgUGhhc2UgNDogV2lyZSBkZWZlcnJlZCBwcm9taXNlIGludG8gU2VydmVyU2V0dXAgZm9yIHJlcXVlc3QgYnVmZmVyaW5nXG4gICAgY29uc3Qgc2VydmVyU2V0dXAgPSB0aGlzLmNvbnRhaW5lci5yZXNvbHZlPGltcG9ydCgnLi9zZXJ2ZXIvU2VydmVyU2V0dXAuanMnKS5TZXJ2ZXJTZXR1cD4oJ1NlcnZlclNldHVwJyk7XG4gICAgc2VydmVyU2V0dXAuc2V0RGVmZXJyZWRTZXR1cFByb21pc2UoZGVmZXJyZWRQcm9taXNlKTtcblxuICAgIC8vIExvZyBzdGFydHVwIHRpbWluZyBhZnRlciBkZWZlcnJlZCBzZXR1cCBjb21wbGV0ZXNcbiAgICBkZWZlcnJlZFByb21pc2UudGhlbihhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZXBvcnQgPSB0aW1lci5nZXRSZXBvcnQoKTtcbiAgICAgIGxvZ2dlci5pbmZvKGBbU3RhcnR1cF0gRnVsbCByZXBvcnQ6IGNvbm5lY3QgYXQgJHtyZXBvcnQuY29ubmVjdEF0TXN9bXMsIGAgK1xuICAgICAgICBgY3JpdGljYWwgJHtyZXBvcnQuY3JpdGljYWxQYXRoTXN9bXMsIGRlZmVycmVkICR7cmVwb3J0LmRlZmVycmVkTXN9bXMsIGAgK1xuICAgICAgICBgdG90YWwgJHtyZXBvcnQudG90YWxNc31tc2ApO1xuICAgIH0pLmNhdGNoKCgpID0+IHsgLyogYWxyZWFkeSBsb2dnZWQgKi8gfSk7XG5cbiAgfVxufVxuXG4vLyBFeHBvcnQgaXMgYWxyZWFkeSBhdCBjbGFzcyBkZWNsYXJhdGlvblxuXG4vLyBPbmx5IHN0YXJ0IHRoZSBzZXJ2ZXIgaWYgdGhpcyBmaWxlIGlzIGJlaW5nIHJ1biBkaXJlY3RseSAobm90IGltcG9ydGVkIGJ5IHRlc3RzKVxuLy8gSGFuZGxlIGRpZmZlcmVudCBleGVjdXRpb24gbWV0aG9kcyAoZGlyZWN0LCBucHgsIENMSSlcbmNvbnN0IHNjcmlwdFBhdGggPSBwcm9jZXNzLmFyZ3Y/LlsxXSA/IHBhdGgubm9ybWFsaXplKHByb2Nlc3MuYXJndlsxXSkgOiAnJztcbmNvbnN0IGlzRGlyZWN0RXhlY3V0aW9uID1cbiAgc2NyaXB0UGF0aC5lbmRzV2l0aChgJHtwYXRoLnNlcH1kaXN0JHtwYXRoLnNlcH1pbmRleC5qc2ApIHx8XG4gIHNjcmlwdFBhdGguZW5kc1dpdGgoYCR7cGF0aC5zZXB9c3JjJHtwYXRoLnNlcH1pbmRleC50c2ApO1xuY29uc3QgaXNOcHhFeGVjdXRpb24gPSBwcm9jZXNzLmVudi5ucG1fZXhlY3BhdGg/LmluY2x1ZGVzKCducHgnKTtcbmNvbnN0IGlzQ2xpRXhlY3V0aW9uID0gcHJvY2Vzcy5hcmd2WzFdPy5lbmRzV2l0aCgnL2RvbGxob3VzZW1jcCcpIHx8IHByb2Nlc3MuYXJndlsxXT8uZW5kc1dpdGgoJ1xcXFxkb2xsaG91c2VtY3AnKTtcbmNvbnN0IGlzVGVzdCA9IHByb2Nlc3MuZW52LkpFU1RfV09SS0VSX0lEOyAvLyBUaGlzIGlzIHNldCB3aGVuIEplc3QgcnVucyB0ZXN0c1xuY29uc3QgaXNUZXN0TW9kZSA9IHByb2Nlc3MuZW52LlRFU1RfTU9ERSA9PT0gJ3RydWUnOyAvLyBDaGVjayBmb3IgVEVTVF9NT0RFIGVudmlyb25tZW50IHZhcmlhYmxlXG5jb25zdCBkb2xsaG91c2VEZWJ1Z0ZsYWcgPSBwcm9jZXNzLmVudi5ET0xMSE9VU0VfREVCVUc/LnRvTG93ZXJDYXNlKCk7XG5jb25zdCBpc0RlYnVnU3RhcnR1cExvZ2dpbmcgPSBkb2xsaG91c2VEZWJ1Z0ZsYWcgPT09ICd0cnVlJyB8fCBkb2xsaG91c2VEZWJ1Z0ZsYWcgPT09ICcxJztcblxuLy8gUHJvZ3Jlc3NpdmUgc3RhcnR1cCB3aXRoIHJldHJpZXMgZm9yIG5weC9DTEkgZXhlY3V0aW9uXG5jb25zdCBTVEFSVFVQX0RFTEFZUyA9IFsxMCwgNTAsIDEwMCwgMjAwXTsgLy8gUHJvZ3Jlc3NpdmUgZGVsYXlzIGluIG1zXG5cbmFzeW5jIGZ1bmN0aW9uIHN0YXJ0U2VydmVyV2l0aFJldHJ5KHJldHJpZXNMZWZ0ID0gU1RBUlRVUF9ERUxBWVMubGVuZ3RoKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChpc0RlYnVnU3RhcnR1cExvZ2dpbmcpIHtcbiAgICBjb25zb2xlLmVycm9yKFwiREVCVUc6IHN0YXJ0U2VydmVyV2l0aFJldHJ5IGNhbGxlZC5cIik7XG4gIH1cbiAgdHJ5IHtcbiAgICBjb25zdCBjb250YWluZXIgPSBuZXcgRG9sbGhvdXNlQ29udGFpbmVyKCk7XG4gICAgY29uc3Qgc2VydmVyID0gbmV3IERvbGxob3VzZU1DUFNlcnZlcihjb250YWluZXIpO1xuICAgIGF3YWl0IHNlcnZlci5ydW4oKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAocmV0cmllc0xlZnQgPiAwICYmIChpc05weEV4ZWN1dGlvbiB8fCBpc0NsaUV4ZWN1dGlvbikpIHtcbiAgICAgIC8vIFRyeSBhZ2FpbiB3aXRoIGEgbG9uZ2VyIGRlbGF5XG4gICAgICBjb25zdCBkZWxheUluZGV4ID0gU1RBUlRVUF9ERUxBWVMubGVuZ3RoIC0gcmV0cmllc0xlZnQ7XG4gICAgICBjb25zdCBkZWxheSA9IFNUQVJUVVBfREVMQVlTW2RlbGF5SW5kZXhdO1xuICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIGRlbGF5KSk7XG4gICAgICByZXR1cm4gc3RhcnRTZXJ2ZXJXaXRoUmV0cnkocmV0cmllc0xlZnQgLSAxKTtcbiAgICB9XG4gICAgLy8gRmluYWwgZmFpbHVyZSAtIG1pbmltYWwgZXJyb3IgbWVzc2FnZSBmb3Igc2VjdXJpdHlcbiAgICAvLyBOb3RlOiBVc2luZyBjb25zb2xlLmVycm9yIGhlcmUgaXMgaW50ZW50aW9uYWwgYXMgaXQncyB0aGUgZmluYWwgZXJyb3IgYmVmb3JlIGV4aXRcbiAgICBjb25zb2xlLmVycm9yKFwiW0RvbGxob3VzZU1DUF0gU2VydmVyIHN0YXJ0dXAgZmFpbGVkXCIsIGVycm9yKTsgLy8gQWRkZWQgZXJyb3Igb2JqZWN0XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG59XG5cbmlmICgoaXNEaXJlY3RFeGVjdXRpb24gfHwgaXNOcHhFeGVjdXRpb24gfHwgaXNDbGlFeGVjdXRpb24pICYmICghaXNUZXN0IHx8IGlzVGVzdE1vZGUpKSB7XG4gIC8vIElzc3VlICM3MDQ6IC0td2ViIGZsYWcgc3RhcnRzIHRoZSBwb3J0Zm9saW8gd2ViIFVJIGluc3RlYWQgb2YgTUNQIHNlcnZlclxuICBjb25zdCBpc1dlYk1vZGUgPSBwcm9jZXNzLmFyZ3YuaW5jbHVkZXMoJy0td2ViJyk7XG4gIGlmIChpc1dlYk1vZGUpIHtcbiAgICAvLyBJc3N1ZSAjNzk2OiBCb290c3RyYXAgREkgY29udGFpbmVyIGZvciB3ZWItb25seSBtb2RlIHNvIEFQSSByb3V0ZXNcbiAgICAvLyBnbyB0aHJvdWdoIE1DUEFRTEhhbmRsZXIgKHZhbGlkYXRlZCwgY2FjaGVkLCBnYXRla2VlcGVyLWNoZWNrZWQpXG4gICAgKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHBvcnRmb2xpb0RpciA9IHBhdGguam9pbihvcy5ob21lZGlyKCksICcuZG9sbGhvdXNlJywgJ3BvcnRmb2xpbycpO1xuICAgICAgY29uc3QgcG9ydEFyZyA9IHByb2Nlc3MuYXJndi5maW5kKGEgPT4gYS5zdGFydHNXaXRoKCctLXBvcnQ9JykpO1xuICAgICAgY29uc3QgcG9ydCA9IHBvcnRBcmcgPyBwYXJzZUludChwb3J0QXJnLnNwbGl0KCc9JylbMV0sIDEwKSA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IG5vQnJvd3NlciA9IHByb2Nlc3MuYXJndi5pbmNsdWRlcygnLS1uby1vcGVuJyk7XG5cbiAgICAgIGxldCBtY3BBcWxIYW5kbGVyO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gbmV3IERvbGxob3VzZUNvbnRhaW5lcigpO1xuICAgICAgICBhd2FpdCBjb250YWluZXIucHJlcGFyZVBvcnRmb2xpbygpO1xuICAgICAgICBjb25zdCBidW5kbGUgPSBhd2FpdCBjb250YWluZXIuYm9vdHN0cmFwSGFuZGxlcnMoKTtcbiAgICAgICAgYXdhaXQgY29udGFpbmVyLmNvbXBsZXRlRGVmZXJyZWRTZXR1cCgpO1xuICAgICAgICBtY3BBcWxIYW5kbGVyID0gYnVuZGxlLm1jcEFxbEhhbmRsZXI7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJbRG9sbGhvdXNlTUNQXSBDb250YWluZXIgYm9vdHN0cmFwcGVkIOKAlCB3ZWIgcm91dGVzIHVzaW5nIE1DUC1BUUwgR2F0ZXdheVwiKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiW0RvbGxob3VzZU1DUF0gQ29udGFpbmVyIGJvb3RzdHJhcCBmYWlsZWQg4oCUIHdlYiByb3V0ZXMgd2lsbCB1c2UgZGlyZWN0IGZpbGVzeXN0ZW0gYWNjZXNzLlwiKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIltEb2xsaG91c2VNQ1BdIFJlYXNvbjpcIiwgKGVyciBhcyBFcnJvcikubWVzc2FnZSB8fCBlcnIpO1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiW0RvbGxob3VzZU1DUF0gVGhpcyBtYXkgaW5kaWNhdGUgYSBjb3JydXB0IHBvcnRmb2xpbyBvciBtaXNzaW5nIGRlcGVuZGVuY2llcy5cIik7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgc3RhcnRXZWJTZXJ2ZXIgfSA9IGF3YWl0IGltcG9ydCgnLi93ZWIvc2VydmVyLmpzJyk7XG4gICAgICBhd2FpdCBzdGFydFdlYlNlcnZlcih7IHBvcnRmb2xpb0RpciwgcG9ydCwgb3BlbkJyb3dzZXI6ICFub0Jyb3dzZXIsIG1jcEFxbEhhbmRsZXIgfSk7XG4gICAgfSkoKS5jYXRjaChlcnIgPT4ge1xuICAgICAgY29uc29sZS5lcnJvcihcIltEb2xsaG91c2VNQ1BdIFdlYiBVSSBmYWlsZWQgdG8gc3RhcnQ6XCIsIGVycik7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKGlzRGVidWdTdGFydHVwTG9nZ2luZykge1xuICAgICAgY29uc29sZS5lcnJvcihcIkRFQlVHOiBTZXJ2ZXIgc3RhcnR1cCBjb25kaXRpb24gbWV0LiBDYWxsaW5nIHN0YXJ0U2VydmVyV2l0aFJldHJ5LlwiKTtcbiAgICB9XG4gICAgc3RhcnRTZXJ2ZXJXaXRoUmV0cnkoKS5jYXRjaCgoKSA9PiB7XG4gICAgICAvLyBOb3RlOiBVc2luZyBjb25zb2xlLmVycm9yIGhlcmUgaXMgaW50ZW50aW9uYWwgYXMgaXQncyB0aGUgZmluYWwgZXJyb3IgYmVmb3JlIGV4aXRcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJbRG9sbGhvdXNlTUNQXSBTZXJ2ZXIgc3RhcnR1cCBmYWlsZWRcIik7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
package/dist/logging/LogHooks.js
CHANGED
|
@@ -175,28 +175,28 @@ export function wireLogHooks(logManager, container) {
|
|
|
175
175
|
'element:save:success': 'info',
|
|
176
176
|
'element:delete:success': 'info',
|
|
177
177
|
};
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
'element:cache:refresh', 'element:cache:evict',
|
|
184
|
-
'element:external-change', 'element:lock-timeout',
|
|
185
|
-
];
|
|
186
|
-
for (const eventName of allEvents) {
|
|
178
|
+
// Only log events that have a mapped level (errors, warnings, success, activate/deactivate).
|
|
179
|
+
// Skip start/cache/external-change events — they fire per-element and create noise
|
|
180
|
+
// without adding value beyond the completion/error logs.
|
|
181
|
+
const loggedEvents = Object.keys(eventLevelMap);
|
|
182
|
+
for (const eventName of loggedEvents) {
|
|
187
183
|
const unsub = dispatcher.on(eventName, (payload) => {
|
|
188
184
|
const level = eventLevelMap[eventName] ?? 'debug';
|
|
189
185
|
const requestCorrelationId = contextTracker?.getCorrelationId();
|
|
186
|
+
// Use elementId if available, fall back to filename from filePath
|
|
187
|
+
const elementName = payload.elementId
|
|
188
|
+
|| (payload.filePath ? payload.filePath.replace(/\.[^.]+$/, '') : '');
|
|
190
189
|
const entry = {
|
|
191
190
|
id: logManager.generateId(),
|
|
192
191
|
timestamp: new Date().toISOString(),
|
|
193
192
|
category: 'application',
|
|
194
193
|
level,
|
|
195
194
|
source: 'ElementEventDispatcher',
|
|
196
|
-
message: `${eventName} [${payload.elementType ?? 'unknown'}:${
|
|
195
|
+
message: `${eventName} [${payload.elementType ?? 'unknown'}:${elementName}]`,
|
|
197
196
|
data: {
|
|
198
197
|
...payload.extra,
|
|
199
198
|
...(payload.correlationId ? { operationId: payload.correlationId } : {}),
|
|
199
|
+
...(payload.filePath ? { filePath: payload.filePath } : {}),
|
|
200
200
|
},
|
|
201
201
|
correlationId: requestCorrelationId ?? payload.correlationId,
|
|
202
202
|
};
|
|
@@ -300,4 +300,4 @@ export function wireLogHooks(logManager, container) {
|
|
|
300
300
|
catch { /* StateChangeNotifier not registered */ }
|
|
301
301
|
return cleanups;
|
|
302
302
|
}
|
|
303
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTG9nSG9va3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbG9nZ2luZy9Mb2dIb29rcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7O0dBWUc7QUFJSCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDaEYsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRWhELDhFQUE4RTtBQUM5RSw0RUFBNEU7QUFDNUUsbUJBQW1CO0FBQ25CLDhFQUE4RTtBQUU5RSxNQUFNLGlCQUFpQixHQUE2QjtJQUNsRCxRQUFRLEVBQUUsT0FBTztJQUNqQixJQUFJLEVBQUUsT0FBTztJQUNiLE1BQU0sRUFBRSxNQUFNO0lBQ2QsR0FBRyxFQUFFLE1BQU07SUFDWCxRQUFRLEVBQUUsT0FBTztJQUNqQixJQUFJLEVBQUUsT0FBTztJQUNiLE1BQU0sRUFBRSxNQUFNO0lBQ2QsR0FBRyxFQUFFLE1BQU07Q0FDWixDQUFDO0FBUUYsOEVBQThFO0FBQzlFLDRFQUE0RTtBQUM1RSw4RUFBOEU7QUFFOUUsTUFBTSxVQUFVLDRCQUE0QixDQUMxQyxVQUFzQixFQUN0QixjQUFzQztJQUV0QyxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsRUFBRTtRQUM5QixNQUFNLEtBQUssR0FBb0I7WUFDN0IsRUFBRSxFQUFFLFVBQVUsQ0FBQyxVQUFVLEVBQUU7WUFDM0IsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO1lBQ25DLFFBQVEsRUFBRSxXQUFXO1lBQ3JCLEtBQUs7WUFDTCxNQUFNLEVBQUUsdUJBQXVCO1lBQy9CLE9BQU87WUFDUCxJQUFJO1lBQ0osYUFBYSxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRTtTQUNsRCxDQUFDO1FBQ0YsVUFBVSxDQUFDLEdBQUcs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QUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QixDQUFDLENBQUM7UUFDRixRQUFRLENBQUMsRUFBRSxDQUFDLGNBQWMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNyQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUFDLE1BQU0sQ0FBQyxDQUFDLHdDQUF3QyxDQUFDLENBQUM7SUFFcEQsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUGhhc2UgNDogSW50ZWdyYXRpb24gSG9va3MgZm9yIFVuaWZpZWQgTG9nZ2luZyBTeXN0ZW0uXG4gKlxuICogTWFwcyBuYXRpdmUgZXZlbnRzIGZyb20gMTAgbW9uaXRvcmluZy9sb2dnaW5nIHN5c3RlbXMgaW50byBVbmlmaWVkTG9nRW50cnlcbiAqIG9iamVjdHMgYW5kIHJvdXRlcyB0aGVtIHRocm91Z2ggTG9nTWFuYWdlci4gIEVhY2ggc291cmNlIHN5c3RlbSBleHBvc2VzIGFcbiAqIGxpZ2h0d2VpZ2h0IGBhZGRMb2dMaXN0ZW5lcmAgY2FsbGJhY2s7IHRoZSB0cmFuc2xhdGlvbiBsb2dpYyBsaXZlcyBoZXJlIHNvXG4gKiBzb3VyY2UgZmlsZXMgc3RheSBtaW5pbWFsIGFuZCBuZXZlciBpbXBvcnQgVW5pZmllZExvZ0VudHJ5LlxuICpcbiAqIFVzYWdlOlxuICogICBjb25zdCBjbGVhbnVwcyA9IHdpcmVMb2dIb29rcyhsb2dNYW5hZ2VyLCBjb250YWluZXIpO1xuICogICAvLyBsYXRlciDigKZcbiAqICAgY2xlYW51cHMuZm9yRWFjaChmbiA9PiBmbigpKTtcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IExvZ01hbmFnZXIgfSBmcm9tICcuL0xvZ01hbmFnZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBMb2dMZXZlbCwgVW5pZmllZExvZ0VudHJ5IH0gZnJvbSAnLi90eXBlcy5qcyc7XG5pbXBvcnQgeyBTZWN1cml0eU1vbml0b3IgfSBmcm9tICcuLi9zZWN1cml0eS9zZWN1cml0eU1vbml0b3IuanMnO1xuaW1wb3J0IHsgRGVmYXVsdEVsZW1lbnRQcm92aWRlciB9IGZyb20gJy4uL3BvcnRmb2xpby9EZWZhdWx0RWxlbWVudFByb3ZpZGVyLmpzJztcbmltcG9ydCB7IExSVUNhY2hlIH0gZnJvbSAnLi4vY2FjaGUvTFJVQ2FjaGUuanMnO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFNldmVyaXR5IOKGkiBMb2dMZXZlbCBoZWxwZXIgKHNoYXJlZCBieSBTZWN1cml0eU1vbml0b3IsIFNlY3VyaXR5VGVsZW1ldHJ5LFxuLy8gU2VjdXJpdHlBdWRpdG9yKVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmNvbnN0IFNFVkVSSVRZX1RPX0xFVkVMOiBSZWNvcmQ8c3RyaW5nLCBMb2dMZXZlbD4gPSB7XG4gIENSSVRJQ0FMOiAnZXJyb3InLFxuICBISUdIOiAnZXJyb3InLFxuICBNRURJVU06ICd3YXJuJyxcbiAgTE9XOiAnaW5mbycsXG4gIGNyaXRpY2FsOiAnZXJyb3InLFxuICBoaWdoOiAnZXJyb3InLFxuICBtZWRpdW06ICd3YXJuJyxcbiAgbG93OiAnaW5mbycsXG59O1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIENvcnJlbGF0aW9uSWQgcHJvdmlkZXIgaW50ZXJmYWNlIChzdWJzZXQgb2YgQ29udGV4dFRyYWNrZXIpXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudHlwZSBDb3JyZWxhdGlvbklkUHJvdmlkZXIgPSB7IGdldENvcnJlbGF0aW9uSWQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIH07XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRXhwb3J0ZWQgZmFjdG9yeSBmb3IgVHJpZ2dlck1ldHJpY3NUcmFja2VyIChjcmVhdGVkIG91dHNpZGUgREkgY29udGFpbmVyKVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUcmlnZ2VyTWV0cmljc0xvZ0xpc3RlbmVyKFxuICBsb2dNYW5hZ2VyOiBMb2dNYW5hZ2VyLFxuICBjb250ZXh0VHJhY2tlcj86IENvcnJlbGF0aW9uSWRQcm92aWRlcixcbik6IChsZXZlbDogJ2RlYnVnJyB8ICdpbmZvJyB8ICd3YXJuJyB8ICdlcnJvcicsIG1lc3NhZ2U6IHN0cmluZywgZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB2b2lkIHtcbiAgcmV0dXJuIChsZXZlbCwgbWVzc2FnZSwgZGF0YSkgPT4ge1xuICAgIGNvbnN0IGVudHJ5OiBVbmlmaWVkTG9nRW50cnkgPSB7XG4gICAgICBpZDogbG9nTWFuYWdlci5nZW5lcmF0ZUlkKCksXG4gICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIGNhdGVnb3J5OiAndGVsZW1ldHJ5JyxcbiAgICAgIGxldmVsLFxuICAgICAgc291cmNlOiAnVHJpZ2dlck1ldHJpY3NUcmFja2VyJyxcbiAgICAgIG1lc3NhZ2UsXG4gICAgICBkYXRhLFxuICAgICAgY29ycmVsYXRpb25JZDogY29udGV4dFRyYWNrZXI/LmdldENvcnJlbGF0aW9uSWQoKSxcbiAgICB9O1xuICAgIGxvZ01hbmFnZXIubG9nKGVudHJ5KTtcbiAgfTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBFeHBvcnRlZCBmYWN0b3J5IGZvciBTZWN1cml0eUF1ZGl0b3IgKGNyZWF0ZWQgb3V0c2lkZSBESSBjb250YWluZXIpXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlY3VyaXR5QXVkaXRvckxvZ0xpc3RlbmVyKFxuICBsb2dNYW5hZ2VyOiBMb2dNYW5hZ2VyLFxuICBjb250ZXh0VHJhY2tlcj86IENvcnJlbGF0aW9uSWRQcm92aWRlcixcbik6IChsZXZlbDogJ2RlYnVnJyB8ICdpbmZvJyB8ICd3YXJuJyB8ICdlcnJvcicsIG1lc3NhZ2U6IHN0cmluZywgZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB2b2lkIHtcbiAgcmV0dXJuIChsZXZlbCwgbWVzc2FnZSwgZGF0YSkgPT4ge1xuICAgIGNvbnN0IGVudHJ5OiBVbmlmaWVkTG9nRW50cnkgPSB7XG4gICAgICBpZDogbG9nTWFuYWdlci5nZW5lcmF0ZUlkKCksXG4gICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIGNhdGVnb3J5OiAnc2VjdXJpdHknLFxuICAgICAgbGV2ZWwsXG4gICAgICBzb3VyY2U6ICdTZWN1cml0eUF1ZGl0b3InLFxuICAgICAgbWVzc2FnZSxcbiAgICAgIGRhdGEsXG4gICAgICBjb3JyZWxhdGlvbklkOiBjb250ZXh0VHJhY2tlcj8uZ2V0Q29ycmVsYXRpb25JZCgpLFxuICAgIH07XG4gICAgbG9nTWFuYWdlci5sb2coZW50cnkpO1xuICB9O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIE1haW4gd2lyaW5nIGZ1bmN0aW9uXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBXaXJlIGFsbCBtb25pdG9yaW5nIHN5c3RlbXMgaW50byB0aGUgdW5pZmllZCBsb2dnaW5nIHBpcGVsaW5lLlxuICpcbiAqIEBwYXJhbSBsb2dNYW5hZ2VyICBUaGUgTG9nTWFuYWdlciBzaW5nbGV0b24gZnJvbSB0aGUgREkgY29udGFpbmVyLlxuICogQHBhcmFtIGNvbnRhaW5lciAgIFRoZSBESSBjb250YWluZXIgKHVzZWQgdG8gcmVzb2x2ZSBzb3VyY2Ugc2VydmljZXMpLlxuICogQHJldHVybnMgQXJyYXkgb2YgdW5zdWJzY3JpYmUgZnVuY3Rpb25zIOKAlCBjYWxsIHRoZW0gZHVyaW5nIHNodXRkb3duLlxuICovXG5leHBvcnQgZnVuY3Rpb24gd2lyZUxvZ0hvb2tzKFxuICBsb2dNYW5hZ2VyOiBMb2dNYW5hZ2VyLFxuICBjb250YWluZXI6IHsgcmVzb2x2ZTxUPihuYW1lOiBzdHJpbmcpOiBUIH0sXG4pOiAoKCkgPT4gdm9pZClbXSB7XG4gIGNvbnN0IGNsZWFudXBzOiAoKCkgPT4gdm9pZClbXSA9IFtdO1xuXG4gIC8vIFJlc29sdmUgQ29udGV4dFRyYWNrZXIgZm9yIGNvcnJlbGF0aW9uSWQgaW5qZWN0aW9uXG4gIGxldCBjb250ZXh0VHJhY2tlcjogQ29ycmVsYXRpb25JZFByb3ZpZGVyIHwgbnVsbCA9IG51bGw7XG4gIHRyeSB7XG4gICAgY29udGV4dFRyYWNrZXIgPSBjb250YWluZXIucmVzb2x2ZTxDb3JyZWxhdGlvbklkUHJvdmlkZXI+KCdDb250ZXh0VHJhY2tlcicpO1xuICB9IGNhdGNoIHsgLyogQ29udGV4dFRyYWNrZXIgbm90IHJlZ2lzdGVyZWQgKi8gfVxuXG4gIC8vIC0tLSBNQ1BMb2dnZXIgKGFwcGxpY2F0aW9uKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIHRyeSB7XG4gICAgY29uc3QgbWNwTG9nZ2VyID0gY29udGFpbmVyLnJlc29sdmU8e1xuICAgICAgYWRkTG9nTGlzdGVuZXIoZm46IChlbnRyeTogeyB0aW1lc3RhbXA6IERhdGU7IGxldmVsOiBzdHJpbmc7IG1lc3NhZ2U6IHN0cmluZzsgZGF0YT86IGFueSB9KSA9PiB2b2lkKTogKCkgPT4gdm9pZDtcbiAgICB9PignTUNQTG9nZ2VyJyk7XG4gICAgY29uc3QgdW5zdWIgPSBtY3BMb2dnZXIuYWRkTG9nTGlzdGVuZXIoKGxvZ0VudHJ5KSA9PiB7XG4gICAgICBjb25zdCBlbnRyeTogVW5pZmllZExvZ0VudHJ5ID0ge1xuICAgICAgICBpZDogbG9nTWFuYWdlci5nZW5lcmF0ZUlkKCksXG4gICAgICAgIHRpbWVzdGFtcDogbG9nRW50cnkudGltZXN0YW1wLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIGNhdGVnb3J5OiAnYXBwbGljYXRpb24nLFxuICAgICAgICBsZXZlbDogbG9nRW50cnkubGV2ZWwgYXMgTG9nTGV2ZWwsXG4gICAgICAgIHNvdXJjZTogJ01DUExvZ2dlcicsXG4gICAgICAgIG1lc3NhZ2U6IGxvZ0VudHJ5Lm1lc3NhZ2UsXG4gICAgICAgIGRhdGE6IGxvZ0VudHJ5LmRhdGEgIT0gbnVsbCA/IGxvZ0VudHJ5LmRhdGEgOiB1bmRlZmluZWQsXG4gICAgICAgIGNvcnJlbGF0aW9uSWQ6IGNvbnRleHRUcmFja2VyPy5nZXRDb3JyZWxhdGlvbklkKCksXG4gICAgICB9O1xuICAgICAgbG9nTWFuYWdlci5sb2coZW50cnkpO1xuICAgIH0pO1xuICAgIGNsZWFudXBzLnB1c2godW5zdWIpO1xuICB9IGNhdGNoIHsgLyogTUNQTG9nZ2VyIG5vdCByZWdpc3RlcmVkICovIH1cblxuICAvLyAtLS0gU2VjdXJpdHlNb25pdG9yIChzZWN1cml0eSwgc3RhdGljKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAge1xuICAgIGNvbnN0IHVuc3ViID0gU2VjdXJpdHlNb25pdG9yLmFkZExvZ0xpc3RlbmVyKChsb2dFbnRyeSkgPT4ge1xuICAgICAgY29uc3QgZW50cnk6IFVuaWZpZWRMb2dFbnRyeSA9IHtcbiAgICAgICAgaWQ6IGxvZ01hbmFnZXIuZ2VuZXJhdGVJZCgpLFxuICAgICAgICB0aW1lc3RhbXA6IGxvZ0VudHJ5LnRpbWVzdGFtcCxcbiAgICAgICAgY2F0ZWdvcnk6ICdzZWN1cml0eScsXG4gICAgICAgIGxldmVsOiBTRVZFUklUWV9UT19MRVZFTFtsb2dFbnRyeS5zZXZlcml0eV0gPz8gJ2luZm8nLFxuICAgICAgICBzb3VyY2U6ICdTZWN1cml0eU1vbml0b3InLFxuICAgICAgICBtZXNzYWdlOiBgWyR7bG9nRW50cnkudHlwZX1dICR7bG9nRW50cnkuZGV0YWlsc31gLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgLi4ubG9nRW50cnkuYWRkaXRpb25hbERhdGEsXG4gICAgICAgICAgZXZlbnRUeXBlOiBsb2dFbnRyeS50eXBlLFxuICAgICAgICAgIHNldmVyaXR5OiBsb2dFbnRyeS5zZXZlcml0eSxcbiAgICAgICAgICBzb3VyY2VDb21wb25lbnQ6IGxvZ0VudHJ5LnNvdXJjZSxcbiAgICAgICAgfSxcbiAgICAgICAgY29ycmVsYXRpb25JZDogY29udGV4dFRyYWNrZXI/LmdldENvcnJlbGF0aW9uSWQoKSxcbiAgICAgIH07XG4gICAgICBsb2dNYW5hZ2VyLmxvZyhlbnRyeSk7XG4gICAgfSk7XG4gICAgY2xlYW51cHMucHVzaCh1bnN1Yik7XG4gIH1cblxuICAvLyAtLS0gU2VjdXJpdHlUZWxlbWV0cnkgKHNlY3VyaXR5KSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgdHJ5IHtcbiAgICBjb25zdCBzZWNUZWxlbWV0cnkgPSBjb250YWluZXIucmVzb2x2ZTx7XG4gICAgICBhZGRMb2dMaXN0ZW5lcihmbjogKGVudHJ5OiB7XG4gICAgICAgIHRpbWVzdGFtcDogc3RyaW5nOyBhdHRhY2tUeXBlOiBzdHJpbmc7IHBhdHRlcm46IHN0cmluZztcbiAgICAgICAgc2V2ZXJpdHk6IHN0cmluZzsgc291cmNlOiBzdHJpbmc7IG1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICAgIH0pID0+IHZvaWQpOiAoKSA9PiB2b2lkO1xuICAgIH0+KCdTZWN1cml0eVRlbGVtZXRyeScpO1xuICAgIGNvbnN0IHVuc3ViID0gc2VjVGVsZW1ldHJ5LmFkZExvZ0xpc3RlbmVyKCh0ZWxFbnRyeSkgPT4ge1xuICAgICAgY29uc3QgZW50cnk6IFVuaWZpZWRMb2dFbnRyeSA9IHtcbiAgICAgICAgaWQ6IGxvZ01hbmFnZXIuZ2VuZXJhdGVJZCgpLFxuICAgICAgICB0aW1lc3RhbXA6IHRlbEVudHJ5LnRpbWVzdGFtcCxcbiAgICAgICAgY2F0ZWdvcnk6ICdzZWN1cml0eScsXG4gICAgICAgIGxldmVsOiBTRVZFUklUWV9UT19MRVZFTFt0ZWxFbnRyeS5zZXZlcml0eV0gPz8gJ2luZm8nLFxuICAgICAgICBzb3VyY2U6ICdTZWN1cml0eVRlbGVtZXRyeScsXG4gICAgICAgIG1lc3NhZ2U6IGBCbG9ja2VkICR7dGVsRW50cnkuYXR0YWNrVHlwZX06ICR7dGVsRW50cnkucGF0dGVybn1gLFxuICAgICAgICBkYXRhOiB0ZWxFbnRyeS5tZXRhZGF0YSxcbiAgICAgICAgY29ycmVsYXRpb25JZDogY29udGV4dFRyYWNrZXI/LmdldENvcnJlbGF0aW9uSWQoKSxcbiAgICAgIH07XG4gICAgICBsb2dNYW5hZ2VyLmxvZyhlbnRyeSk7XG4gICAgfSk7XG4gICAgY2xlYW51cHMucHVzaCh1bnN1Yik7XG4gIH0gY2F0Y2ggeyAvKiBTZWN1cml0eVRlbGVtZXRyeSBub3QgcmVnaXN0ZXJlZCAqLyB9XG5cbiAgLy8gLS0tIFBlcmZvcm1hbmNlTW9uaXRvciAocGVyZm9ybWFuY2UpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIHRyeSB7XG4gICAgY29uc3QgcGVyZk1vbml0b3IgPSBjb250YWluZXIucmVzb2x2ZTx7XG4gICAgICBhZGRMb2dMaXN0ZW5lcihmbjogKGxldmVsOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZywgZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB2b2lkKTogKCkgPT4gdm9pZDtcbiAgICB9PignUGVyZm9ybWFuY2VNb25pdG9yJyk7XG4gICAgY29uc3QgdW5zdWIgPSBwZXJmTW9uaXRvci5hZGRMb2dMaXN0ZW5lcigobGV2ZWwsIG1lc3NhZ2UsIGRhdGEpID0+IHtcbiAgICAgIGNvbnN0IGVudHJ5OiBVbmlmaWVkTG9nRW50cnkgPSB7XG4gICAgICAgIGlkOiBsb2dNYW5hZ2VyLmdlbmVyYXRlSWQoKSxcbiAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIGNhdGVnb3J5OiAncGVyZm9ybWFuY2UnLFxuICAgICAgICBsZXZlbDogbGV2ZWwgYXMgTG9nTGV2ZWwsXG4gICAgICAgIHNvdXJjZTogJ1BlcmZvcm1hbmNlTW9uaXRvcicsXG4gICAgICAgIG1lc3NhZ2UsXG4gICAgICAgIGRhdGEsXG4gICAgICAgIGNvcnJlbGF0aW9uSWQ6IGNvbnRleHRUcmFja2VyPy5nZXRDb3JyZWxhdGlvbklkKCksXG4gICAgICB9O1xuICAgICAgbG9nTWFuYWdlci5sb2coZW50cnkpO1xuICAgIH0pO1xuICAgIGNsZWFudXBzLnB1c2godW5zdWIpO1xuICB9IGNhdGNoIHsgLyogUGVyZm9ybWFuY2VNb25pdG9yIG5vdCByZWdpc3RlcmVkICovIH1cblxuICAvLyAtLS0gRWxlbWVudEV2ZW50RGlzcGF0Y2hlciAoYXBwbGljYXRpb24pIOKAlCBhbHJlYWR5IGhhcyBvbigpIC0tLS0tLS0tLS0tXG4gIHRyeSB7XG4gICAgY29uc3QgZGlzcGF0Y2hlciA9IGNvbnRhaW5lci5yZXNvbHZlPHtcbiAgICAgIG9uKGV2ZW50OiBzdHJpbmcsIGhhbmRsZXI6IChwYXlsb2FkOiBhbnkpID0+IHZvaWQpOiAoKSA9PiB2b2lkO1xuICAgIH0+KCdFbGVtZW50RXZlbnREaXNwYXRjaGVyJyk7XG5cbiAgICBjb25zdCBldmVudExldmVsTWFwOiBSZWNvcmQ8c3RyaW5nLCBMb2dMZXZlbD4gPSB7XG4gICAgICAnZWxlbWVudDpsb2FkOmVycm9yJzogJ2Vycm9yJyxcbiAgICAgICdlbGVtZW50OnNhdmU6ZXJyb3InOiAnZXJyb3InLFxuICAgICAgJ2VsZW1lbnQ6ZGVsZXRlOmVycm9yJzogJ2Vycm9yJyxcbiAgICAgICdlbGVtZW50OmxvY2stdGltZW91dCc6ICd3YXJuJyxcbiAgICAgICdlbGVtZW50OmFjdGl2YXRlJzogJ2luZm8nLFxuICAgICAgJ2VsZW1lbnQ6ZGVhY3RpdmF0ZSc6ICdpbmZvJyxcbiAgICAgICdlbGVtZW50OmxvYWQ6c3VjY2Vzcyc6ICdpbmZvJyxcbiAgICAgICdlbGVtZW50OnNhdmU6c3VjY2Vzcyc6ICdpbmZvJyxcbiAgICAgICdlbGVtZW50OmRlbGV0ZTpzdWNjZXNzJzogJ2luZm8nLFxuICAgIH07XG5cbiAgICBjb25zdCBhbGxFdmVudHMgPSBbXG4gICAgICAnZWxlbWVudDpsb2FkOnN0YXJ0JywgJ2VsZW1lbnQ6bG9hZDpzdWNjZXNzJywgJ2VsZW1lbnQ6bG9hZDplcnJvcicsXG4gICAgICAnZWxlbWVudDpzYXZlOnN0YXJ0JywgJ2VsZW1lbnQ6c2F2ZTpzdWNjZXNzJywgJ2VsZW1lbnQ6c2F2ZTplcnJvcicsXG4gICAgICAnZWxlbWVudDpkZWxldGU6c3RhcnQnLCAnZWxlbWVudDpkZWxldGU6c3VjY2VzcycsICdlbGVtZW50OmRlbGV0ZTplcnJvcicsXG4gICAgICAnZWxlbWVudDphY3RpdmF0ZScsICdlbGVtZW50OmRlYWN0aXZhdGUnLFxuICAgICAgJ2VsZW1lbnQ6Y2FjaGU6cmVmcmVzaCcsICdlbGVtZW50OmNhY2hlOmV2aWN0JyxcbiAgICAgICdlbGVtZW50OmV4dGVybmFsLWNoYW5nZScsICdlbGVtZW50OmxvY2stdGltZW91dCcsXG4gICAgXTtcblxuICAgIGZvciAoY29uc3QgZXZlbnROYW1lIG9mIGFsbEV2ZW50cykge1xuICAgICAgY29uc3QgdW5zdWIgPSBkaXNwYXRjaGVyLm9uKGV2ZW50TmFtZSwgKHBheWxvYWQ6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBsZXZlbCA9IGV2ZW50TGV2ZWxNYXBbZXZlbnROYW1lXSA/PyAnZGVidWcnO1xuICAgICAgICBjb25zdCByZXF1ZXN0Q29ycmVsYXRpb25JZCA9IGNvbnRleHRUcmFja2VyPy5nZXRDb3JyZWxhdGlvbklkKCk7XG4gICAgICAgIGNvbnN0IGVudHJ5OiBVbmlmaWVkTG9nRW50cnkgPSB7XG4gICAgICAgICAgaWQ6IGxvZ01hbmFnZXIuZ2VuZXJhdGVJZCgpLFxuICAgICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgIGNhdGVnb3J5OiAnYXBwbGljYXRpb24nLFxuICAgICAgICAgIGxldmVsLFxuICAgICAgICAgIHNvdXJjZTogJ0VsZW1lbnRFdmVudERpc3BhdGNoZXInLFxuICAgICAgICAgIG1lc3NhZ2U6IGAke2V2ZW50TmFtZX0gWyR7cGF5bG9hZC5lbGVtZW50VHlwZSA/PyAndW5rbm93bid9OiR7cGF5bG9hZC5lbGVtZW50SWQgPz8gJyd9XWAsXG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgLi4ucGF5bG9hZC5leHRyYSxcbiAgICAgICAgICAgIC4uLihwYXlsb2FkLmNvcnJlbGF0aW9uSWQgPyB7IG9wZXJhdGlvbklkOiBwYXlsb2FkLmNvcnJlbGF0aW9uSWQgfSA6IHt9KSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNvcnJlbGF0aW9uSWQ6IHJlcXVlc3RDb3JyZWxhdGlvbklkID8/IHBheWxvYWQuY29ycmVsYXRpb25JZCxcbiAgICAgICAgfTtcbiAgICAgICAgbG9nTWFuYWdlci5sb2coZW50cnkpO1xuICAgICAgfSk7XG4gICAgICBjbGVhbnVwcy5wdXNoKHVuc3ViKTtcbiAgICB9XG4gIH0gY2F0Y2ggeyAvKiBFbGVtZW50RXZlbnREaXNwYXRjaGVyIG5vdCByZWdpc3RlcmVkICovIH1cblxuICAvLyAtLS0gT3BlcmF0aW9uYWxUZWxlbWV0cnkgKHRlbGVtZXRyeSkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgdHJ5IHtcbiAgICBjb25zdCBvcHNUZWxlbWV0cnkgPSBjb250YWluZXIucmVzb2x2ZTx7XG4gICAgICBhZGRMb2dMaXN0ZW5lcihmbjogKGxldmVsOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZywgZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB2b2lkKTogKCkgPT4gdm9pZDtcbiAgICB9PignT3BlcmF0aW9uYWxUZWxlbWV0cnknKTtcbiAgICBjb25zdCB1bnN1YiA9IG9wc1RlbGVtZXRyeS5hZGRMb2dMaXN0ZW5lcigobGV2ZWwsIG1lc3NhZ2UsIGRhdGEpID0+IHtcbiAgICAgIGNvbnN0IGVudHJ5OiBVbmlmaWVkTG9nRW50cnkgPSB7XG4gICAgICAgIGlkOiBsb2dNYW5hZ2VyLmdlbmVyYXRlSWQoKSxcbiAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIGNhdGVnb3J5OiAndGVsZW1ldHJ5JyxcbiAgICAgICAgbGV2ZWw6IGxldmVsIGFzIExvZ0xldmVsLFxuICAgICAgICBzb3VyY2U6ICdPcGVyYXRpb25hbFRlbGVtZXRyeScsXG4gICAgICAgIG1lc3NhZ2UsXG4gICAgICAgIGRhdGEsXG4gICAgICAgIGNvcnJlbGF0aW9uSWQ6IGNvbnRleHRUcmFja2VyPy5nZXRDb3JyZWxhdGlvbklkKCksXG4gICAgICB9O1xuICAgICAgbG9nTWFuYWdlci5sb2coZW50cnkpO1xuICAgIH0pO1xuICAgIGNsZWFudXBzLnB1c2godW5zdWIpO1xuICB9IGNhdGNoIHsgLyogT3BlcmF0aW9uYWxUZWxlbWV0cnkgbm90IHJlZ2lzdGVyZWQgKi8gfVxuXG4gIC8vIC0tLSBGaWxlTG9ja01hbmFnZXIgKHBlcmZvcm1hbmNlKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICB0cnkge1xuICAgIGNvbnN0IGxvY2tNYW5hZ2VyID0gY29udGFpbmVyLnJlc29sdmU8e1xuICAgICAgYWRkTG9nTGlzdGVuZXIoZm46IChsZXZlbDogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcsIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gdm9pZCk6ICgpID0+IHZvaWQ7XG4gICAgfT4oJ0ZpbGVMb2NrTWFuYWdlcicpO1xuICAgIGNvbnN0IHVuc3ViID0gbG9ja01hbmFnZXIuYWRkTG9nTGlzdGVuZXIoKGxldmVsLCBtZXNzYWdlLCBkYXRhKSA9PiB7XG4gICAgICBjb25zdCBlbnRyeTogVW5pZmllZExvZ0VudHJ5ID0ge1xuICAgICAgICBpZDogbG9nTWFuYWdlci5nZW5lcmF0ZUlkKCksXG4gICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICBjYXRlZ29yeTogJ3BlcmZvcm1hbmNlJyxcbiAgICAgICAgbGV2ZWw6IGxldmVsIGFzIExvZ0xldmVsLFxuICAgICAgICBzb3VyY2U6ICdGaWxlTG9ja01hbmFnZXInLFxuICAgICAgICBtZXNzYWdlLFxuICAgICAgICBkYXRhLFxuICAgICAgICBjb3JyZWxhdGlvbklkOiBjb250ZXh0VHJhY2tlcj8uZ2V0Q29ycmVsYXRpb25JZCgpLFxuICAgICAgfTtcbiAgICAgIGxvZ01hbmFnZXIubG9nKGVudHJ5KTtcbiAgICB9KTtcbiAgICBjbGVhbnVwcy5wdXNoKHVuc3ViKTtcbiAgfSBjYXRjaCB7IC8qIEZpbGVMb2NrTWFuYWdlciBub3QgcmVnaXN0ZXJlZCAqLyB9XG5cbiAgLy8gLS0tIERlZmF1bHRFbGVtZW50UHJvdmlkZXIgKHBlcmZvcm1hbmNlLCBzdGF0aWMpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIHtcbiAgICBjb25zdCB1bnN1YiA9IERlZmF1bHRFbGVtZW50UHJvdmlkZXIuYWRkTG9nTGlzdGVuZXIoKGxldmVsLCBtZXNzYWdlLCBkYXRhKSA9PiB7XG4gICAgICBjb25zdCBlbnRyeTogVW5pZmllZExvZ0VudHJ5ID0ge1xuICAgICAgICBpZDogbG9nTWFuYWdlci5nZW5lcmF0ZUlkKCksXG4gICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICBjYXRlZ29yeTogJ3BlcmZvcm1hbmNlJyxcbiAgICAgICAgbGV2ZWw6IGxldmVsIGFzIExvZ0xldmVsLFxuICAgICAgICBzb3VyY2U6ICdEZWZhdWx0RWxlbWVudFByb3ZpZGVyJyxcbiAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgZGF0YSxcbiAgICAgICAgY29ycmVsYXRpb25JZDogY29udGV4dFRyYWNrZXI/LmdldENvcnJlbGF0aW9uSWQoKSxcbiAgICAgIH07XG4gICAgICBsb2dNYW5hZ2VyLmxvZyhlbnRyeSk7XG4gICAgfSk7XG4gICAgY2xlYW51cHMucHVzaCh1bnN1Yik7XG4gIH1cblxuICAvLyAtLS0gTFJVQ2FjaGUgKHBlcmZvcm1hbmNlLCBzdGF0aWMpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICB7XG4gICAgY29uc3QgdW5zdWIgPSBMUlVDYWNoZS5hZGRMb2dMaXN0ZW5lcigobGV2ZWwsIG1lc3NhZ2UsIGRhdGEpID0+IHtcbiAgICAgIGNvbnN0IGVudHJ5OiBVbmlmaWVkTG9nRW50cnkgPSB7XG4gICAgICAgIGlkOiBsb2dNYW5hZ2VyLmdlbmVyYXRlSWQoKSxcbiAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIGNhdGVnb3J5OiAncGVyZm9ybWFuY2UnLFxuICAgICAgICBsZXZlbDogbGV2ZWwgYXMgTG9nTGV2ZWwsXG4gICAgICAgIHNvdXJjZTogJ0xSVUNhY2hlJyxcbiAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgZGF0YSxcbiAgICAgICAgY29ycmVsYXRpb25JZDogY29udGV4dFRyYWNrZXI/LmdldENvcnJlbGF0aW9uSWQoKSxcbiAgICAgIH07XG4gICAgICBsb2dNYW5hZ2VyLmxvZyhlbnRyeSk7XG4gICAgfSk7XG4gICAgY2xlYW51cHMucHVzaCh1bnN1Yik7XG4gIH1cblxuICAvLyAtLS0gU3RhdGVDaGFuZ2VOb3RpZmllciAoYXBwbGljYXRpb24pIOKAlCBleHRlbmRzIEV2ZW50RW1pdHRlciAtLS0tLS0tLS0tXG4gIHRyeSB7XG4gICAgY29uc3Qgbm90aWZpZXIgPSBjb250YWluZXIucmVzb2x2ZTx7XG4gICAgICBvbihldmVudDogc3RyaW5nLCBoYW5kbGVyOiAoLi4uYXJnczogYW55W10pID0+IHZvaWQpOiBhbnk7XG4gICAgICByZW1vdmVMaXN0ZW5lcihldmVudDogc3RyaW5nLCBoYW5kbGVyOiAoLi4uYXJnczogYW55W10pID0+IHZvaWQpOiBhbnk7XG4gICAgfT4oJ1N0YXRlQ2hhbmdlTm90aWZpZXInKTtcbiAgICBjb25zdCBoYW5kbGVyID0gKGV2ZW50OiB7IHR5cGU6IHN0cmluZzsgcHJldmlvdXNWYWx1ZTogc3RyaW5nIHwgbnVsbDsgbmV3VmFsdWU6IHN0cmluZyB8IG51bGwgfSkgPT4ge1xuICAgICAgY29uc3QgZW50cnk6IFVuaWZpZWRMb2dFbnRyeSA9IHtcbiAgICAgICAgaWQ6IGxvZ01hbmFnZXIuZ2VuZXJhdGVJZCgpLFxuICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgY2F0ZWdvcnk6ICdhcHBsaWNhdGlvbicsXG4gICAgICAgIGxldmVsOiAnaW5mbycsXG4gICAgICAgIHNvdXJjZTogJ1N0YXRlQ2hhbmdlTm90aWZpZXInLFxuICAgICAgICBtZXNzYWdlOiBgU3RhdGUgY2hhbmdlOiAke2V2ZW50LnR5cGV9YCxcbiAgICAgICAgZGF0YTogeyBwcmV2aW91c1ZhbHVlOiBldmVudC5wcmV2aW91c1ZhbHVlLCBuZXdWYWx1ZTogZXZlbnQubmV3VmFsdWUgfSxcbiAgICAgICAgY29ycmVsYXRpb25JZDogY29udGV4dFRyYWNrZXI/LmdldENvcnJlbGF0aW9uSWQoKSxcbiAgICAgIH07XG4gICAgICBsb2dNYW5hZ2VyLmxvZyhlbnRyeSk7XG4gICAgfTtcbiAgICBub3RpZmllci5vbignc3RhdGUtY2hhbmdlJywgaGFuZGxlcik7XG4gICAgY2xlYW51cHMucHVzaCgoKSA9PiBub3RpZmllci5yZW1vdmVMaXN0ZW5lcignc3RhdGUtY2hhbmdlJywgaGFuZGxlcikpO1xuICB9IGNhdGNoIHsgLyogU3RhdGVDaGFuZ2VOb3RpZmllciBub3QgcmVnaXN0ZXJlZCAqLyB9XG5cbiAgcmV0dXJuIGNsZWFudXBzO1xufVxuIl19
|
|
303
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTG9nSG9va3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbG9nZ2luZy9Mb2dIb29rcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7O0dBWUc7QUFJSCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDaEYsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRWhELDhFQUE4RTtBQUM5RSw0RUFBNEU7QUFDNUUsbUJBQW1CO0FBQ25CLDhFQUE4RTtBQUU5RSxNQUFNLGlCQUFpQixHQUE2QjtJQUNsRCxRQUFRLEVBQUUsT0FBTztJQUNqQixJQUFJLEVBQUUsT0FBTztJQUNiLE1BQU0sRUFBRSxNQUFNO0lBQ2QsR0FBRyxFQUFFLE1BQU07SUFDWCxRQUFRLEVBQUUsT0FBTztJQUNqQixJQUFJLEVBQUUsT0FBTztJQUNiLE1BQU0sRUFBRSxNQUFNO0lBQ2QsR0FBRyxFQUFFLE1BQU07Q0FDWixDQUFDO0FBUUYsOEVBQThFO0FBQzlFLDRFQUE0RTtBQUM1RSw4RUFBOEU7QUFFOUUsTUFBTSxVQUFVLDRCQUE0QixDQUMxQyxVQUFzQixFQUN0QixjQUFzQztJQUV0QyxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsRUFBRTtRQUM5QixNQUFNLEtBQUssR0FBb0I7WUFDN0IsRUFBRSxFQUFFLFVBQVUsQ0FBQyxVQUFVLEVBQUU7WUFDM0IsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO1lBQ25DLFFBQVEsRUFBRSxXQUFXO1lBQ3JCLEtBQUs7WUFDTCxNQUFNLEVBQUUsdUJBQXVCO1lBQy9CLE9BQU87WUFDUCxJQUFJO1lBQ0osYUFBYSxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRTtTQUNsRCxDQUFDO1FBQ0YsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QixDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQsOEVBQThFO0FBQzlFLHNFQUFzRTtBQUN0RSw4RUFBOEU7QUFFOUUsTUFBTSxVQUFVLDZCQUE2QixDQUMzQyxVQUFzQixFQUN0QixjQUFzQztJQUV0QyxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsRUFBRTtRQUM5QixNQUFNLEtBQUssR0FBb0I7WUFDN0IsRUFBRSxFQUFFLFVBQVUsQ0FBQyxVQUFVLEVBQUU7WUFDM0IsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO1lBQ25DLFFBQVEsRUFBRSxVQUFVO1lBQ3BCLEtBQUs7WUFDTCxNQUFNLEVBQUUsaUJBQWlCO1lBQ3pCLE9BQU87WUFDUCxJQUFJO1lBQ0osYUFBYSxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRTtTQUNsRCxDQUFDO1FBQ0YsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QixDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQsOEVBQThFO0FBQzlFLHVCQUF1QjtBQUN2Qiw4RUFBOEU7QUFFOUU7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FDMUIsVUFBc0IsRUFDdEIsU0FBMEM7SUFFMUMsTUFBTSxRQUFRLEdBQW1CLEVBQUUsQ0FBQztJQUVwQyxxREFBcUQ7SUFDckQsSUFBSSxjQUFjLEdBQWlDLElBQUksQ0FBQztJQUN4RCxJQUFJLENBQUM7UUFDSCxjQUFjLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBd0IsZ0JBQWdCLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBQUMsTUFBTSxDQUFDLENBQUMsbUNBQW1DLENBQUMsQ0FBQztJQUUvQywwRUFBMEU7SUFDMUUsSUFBSSxDQUFDO1FBQ0gsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FFaEMsV0FBVyxDQUFDLENBQUM7UUFDaEIsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLGNBQWMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ2xELE1BQU0sS0FBSyxHQUFvQjtnQkFDN0IsRUFBRSxFQUFFLFVBQVUsQ0FBQyxVQUFVLEVBQUU7Z0JBQzNCLFNBQVMsRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRTtnQkFDM0MsUUFBUSxFQUFFLGFBQWE7Z0JBQ3ZCLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBaUI7Z0JBQ2pDLE1BQU0sRUFBRSxXQUFXO2dCQUNuQixPQUFPLEVBQUUsUUFBUSxDQUFDLE9BQU87Z0JBQ3pCLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUztnQkFDdkQsYUFBYSxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRTthQUNsRCxDQUFDO1lBQ0YsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QixDQUFDLENBQUMsQ0FBQztRQUNILFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUFDLE1BQU0sQ0FBQyxDQUFDLDhCQUE4QixDQUFDLENBQUM7SUFFMUMsMkVBQTJFO0lBQzNFLENBQUM7UUFDQyxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsY0FBYyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDeEQsTUFBTSxLQUFLLEdBQW9CO2dCQUM3QixFQUFFLEVBQUUsVUFBVSxDQUFDLFVBQVUsRUFBRTtnQkFDM0IsU0FBUyxFQUFFLFFBQVEsQ0FBQyxTQUFTO2dCQUM3QixRQUFRLEVBQUUsVUFBVTtnQkFDcEIsS0FBSyxFQUFFLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxNQUFNO2dCQUNyRCxNQUFNLEVBQUUsaUJBQWlCO2dCQUN6QixPQUFPLEVBQUUsSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxPQUFPLEVBQUU7Z0JBQ2pELElBQUksRUFBRTtvQkFDSixHQUFHLFFBQVEsQ0FBQyxjQUFjO29CQUMxQixTQUFTLEVBQUUsUUFBUSxDQUFDLElBQUk7b0JBQ3hCLFFBQVEsRUFBRSxRQUFRLENBQUMsUUFBUTtvQkFDM0IsZUFBZSxFQUFFLFFBQVEsQ0FBQyxNQUFNO2lCQUNqQztnQkFDRCxhQUFhLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFO2FBQ2xELENBQUM7WUFDRixVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBRUQsMkVBQTJFO0lBQzNFLElBQUksQ0FBQztRQUNILE1BQU0sWUFBWSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBS25DLG1CQUFtQixDQUFDLENBQUM7UUFDeEIsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ3JELE1BQU0sS0FBSyxHQUFvQjtnQkFDN0IsRUFBRSxFQUFFLFVBQVUsQ0FBQyxVQUFVLEVBQUU7Z0JBQzNCLFNBQVMsRUFBRSxRQUFRLENBQUMsU0FBUztnQkFDN0IsUUFBUSxFQUFFLFVBQVU7Z0JBQ3BCLEtBQUssRUFBRSxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksTUFBTTtnQkFDckQsTUFBTSxFQUFFLG1CQUFtQjtnQkFDM0IsT0FBTyxFQUFFLFdBQVcsUUFBUSxDQUFDLFVBQVUsS0FBSyxRQUFRLENBQUMsT0FBTyxFQUFFO2dCQUM5RCxJQUFJLEVBQUUsUUFBUSxDQUFDLFFBQVE7Z0JBQ3ZCLGFBQWEsRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUU7YUFDbEQsQ0FBQztZQUNGLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEIsQ0FBQyxDQUFDLENBQUM7UUFDSCxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFBQyxNQUFNLENBQUMsQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO0lBRWxELDJFQUEyRTtJQUMzRSxJQUFJLENBQUM7UUFDSCxNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUVsQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3pCLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxFQUFFO1lBQ2hFLE1BQU0sS0FBSyxHQUFvQjtnQkFDN0IsRUFBRSxFQUFFLFVBQVUsQ0FBQyxVQUFVLEVBQUU7Z0JBQzNCLFNBQVMsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTtnQkFDbkMsUUFBUSxFQUFFLGFBQWE7Z0JBQ3ZCLEtBQUssRUFBRSxLQUFpQjtnQkFDeEIsTUFBTSxFQUFFLG9CQUFvQjtnQkFDNUIsT0FBTztnQkFDUCxJQUFJO2dCQUNKLGFBQWEsRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUU7YUFDbEQsQ0FBQztZQUNGLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEIsQ0FBQyxDQUFDLENBQUM7UUFDSCxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFBQyxNQUFNLENBQUMsQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO0lBRW5ELDBFQUEwRTtJQUMxRSxJQUFJLENBQUM7UUFDSCxNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUVqQyx3QkFBd0IsQ0FBQyxDQUFDO1FBRTdCLE1BQU0sYUFBYSxHQUE2QjtZQUM5QyxvQkFBb0IsRUFBRSxPQUFPO1lBQzdCLG9CQUFvQixFQUFFLE9BQU87WUFDN0Isc0JBQXNCLEVBQUUsT0FBTztZQUMvQixzQkFBc0IsRUFBRSxNQUFNO1lBQzlCLGtCQUFrQixFQUFFLE1BQU07WUFDMUIsb0JBQW9CLEVBQUUsTUFBTTtZQUM1QixzQkFBc0IsRUFBRSxNQUFNO1lBQzlCLHNCQUFzQixFQUFFLE1BQU07WUFDOUIsd0JBQXdCLEVBQUUsTUFBTTtTQUNqQyxDQUFDO1FBRUYsNkZBQTZGO1FBQzdGLG1GQUFtRjtRQUNuRix5REFBeUQ7UUFDekQsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUVoRCxLQUFLLE1BQU0sU0FBUyxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ3JDLE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUMsT0FBWSxFQUFFLEVBQUU7Z0JBQ3RELE1BQU0sS0FBSyxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxPQUFPLENBQUM7Z0JBQ2xELE1BQU0sb0JBQW9CLEdBQUcsY0FBYyxFQUFFLGdCQUFnQixFQUFFLENBQUM7Z0JBQ2hFLGtFQUFrRTtnQkFDbEUsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLFNBQVM7dUJBQ2hDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDeEUsTUFBTSxLQUFLLEdBQW9CO29CQUM3QixFQUFFLEVBQUUsVUFBVSxDQUFDLFVBQVUsRUFBRTtvQkFDM0IsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO29CQUNuQyxRQUFRLEVBQUUsYUFBYTtvQkFDdkIsS0FBSztvQkFDTCxNQUFNLEVBQUUsd0JBQXdCO29CQUNoQyxPQUFPLEVBQUUsR0FBRyxTQUFTLEtBQUssT0FBTyxDQUFDLFdBQVcsSUFBSSxTQUFTLElBQUksV0FBVyxHQUFHO29CQUM1RSxJQUFJLEVBQUU7d0JBQ0osR0FBRyxPQUFPLENBQUMsS0FBSzt3QkFDaEIsR0FBRyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO3dCQUN4RSxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7cUJBQzVEO29CQUNELGFBQWEsRUFBRSxvQkFBb0IsSUFBSSxPQUFPLENBQUMsYUFBYTtpQkFDN0QsQ0FBQztnQkFDRixVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3hCLENBQUMsQ0FBQyxDQUFDO1lBQ0gsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2QixDQUFDO0lBQ0gsQ0FBQztJQUFDLE1BQU0sQ0FBQyxDQUFDLDJDQUEyQyxDQUFDLENBQUM7SUFFdkQsMkVBQTJFO0lBQzNFLElBQUksQ0FBQztRQUNILE1BQU0sWUFBWSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBRW5DLHNCQUFzQixDQUFDLENBQUM7UUFDM0IsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUU7WUFDakUsTUFBTSxLQUFLLEdBQW9CO2dCQUM3QixFQUFFLEVBQUUsVUFBVSxDQUFDLFVBQVUsRUFBRTtnQkFDM0IsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO2dCQUNuQyxRQUFRLEVBQUUsV0FBVztnQkFDckIsS0FBSyxFQUFFLEtBQWlCO2dCQUN4QixNQUFNLEVBQUUsc0JBQXNCO2dCQUM5QixPQUFPO2dCQUNQLElBQUk7Z0JBQ0osYUFBYSxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRTthQUNsRCxDQUFDO1lBQ0YsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QixDQUFDLENBQUMsQ0FBQztRQUNILFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUFDLE1BQU0sQ0FBQyxDQUFDLHlDQUF5QyxDQUFDLENBQUM7SUFFckQsMkVBQTJFO0lBQzNFLElBQUksQ0FBQztRQUNILE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBRWxDLGlCQUFpQixDQUFDLENBQUM7UUFDdEIsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUU7WUFDaEUsTUFBTSxLQUFLLEdBQW9CO2dCQUM3QixFQUFFLEVBQUUsVUFBVSxDQUFDLFVBQVUsRUFBRTtnQkFDM0IsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO2dCQUNuQyxRQUFRLEVBQUUsYUFBYTtnQkFDdkIsS0FBSyxFQUFFLEtBQWlCO2dCQUN4QixNQUFNLEVBQUUsaUJBQWlCO2dCQUN6QixPQUFPO2dCQUNQLElBQUk7Z0JBQ0osYUFBYSxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRTthQUNsRCxDQUFDO1lBQ0YsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QixDQUFDLENBQUMsQ0FBQztRQUNILFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUFDLE1BQU0sQ0FBQyxDQUFDLG9DQUFvQyxDQUFDLENBQUM7SUFFaEQsMkVBQTJFO0lBQzNFLENBQUM7UUFDQyxNQUFNLEtBQUssR0FBRyxzQkFBc0IsQ0FBQyxjQUFjLENBQUMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxFQUFFO1lBQzNFLE1BQU0sS0FBSyxHQUFvQjtnQkFDN0IsRUFBRSxFQUFFLFVBQVUsQ0FBQyxVQUFVLEVBQUU7Z0JBQzNCLFNBQVMsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTtnQkFDbkMsUUFBUSxFQUFFLGFBQWE7Z0JBQ3ZCLEtBQUssRUFBRSxLQUFpQjtnQkFDeEIsTUFBTSxFQUFFLHdCQUF3QjtnQkFDaEMsT0FBTztnQkFDUCxJQUFJO2dCQUNKLGFBQWEsRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUU7YUFDbEQsQ0FBQztZQUNGLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEIsQ0FBQyxDQUFDLENBQUM7UUFDSCxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFFRCwwRUFBMEU7SUFDMUUsQ0FBQztRQUNDLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxFQUFFO1lBQzdELE1BQU0sS0FBSyxHQUFvQjtnQkFDN0IsRUFBRSxFQUFFLFVBQVUsQ0FBQyxVQUFVLEVBQUU7Z0JBQzNCLFNBQVMsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTtnQkFDbkMsUUFBUSxFQUFFLGFBQWE7Z0JBQ3ZCLEtBQUssRUFBRSxLQUFpQjtnQkFDeEIsTUFBTSxFQUFFLFVBQVU7Z0JBQ2xCLE9BQU87Z0JBQ1AsSUFBSTtnQkFDSixhQUFhLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFO2FBQ2xELENBQUM7WUFDRixVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBRUQsMEVBQTBFO0lBQzFFLElBQUksQ0FBQztRQUNILE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBRy9CLHFCQUFxQixDQUFDLENBQUM7UUFDMUIsTUFBTSxPQUFPLEdBQUcsQ0FBQyxLQUE4RSxFQUFFLEVBQUU7WUFDakcsTUFBTSxLQUFLLEdBQW9CO2dCQUM3QixFQUFFLEVBQUUsVUFBVSxDQUFDLFVBQVUsRUFBRTtnQkFDM0IsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO2dCQUNuQyxRQUFRLEVBQUUsYUFBYTtnQkFDdkIsS0FBSyxFQUFFLE1BQU07Z0JBQ2IsTUFBTSxFQUFFLHFCQUFxQjtnQkFDN0IsT0FBTyxFQUFFLGlCQUFpQixLQUFLLENBQUMsSUFBSSxFQUFFO2dCQUN0QyxJQUFJLEVBQUUsRUFBRSxhQUFhLEVBQUUsS0FBSyxDQUFDLGFBQWEsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRTtnQkFDdEUsYUFBYSxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRTthQUNsRCxDQUFDO1lBQ0YsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QixDQUFDLENBQUM7UUFDRixRQUFRLENBQUMsRUFBRSxDQUFDLGNBQWMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNyQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUFDLE1BQU0sQ0FBQyxDQUFDLHdDQUF3QyxDQUFDLENBQUM7SUFFcEQsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUGhhc2UgNDogSW50ZWdyYXRpb24gSG9va3MgZm9yIFVuaWZpZWQgTG9nZ2luZyBTeXN0ZW0uXG4gKlxuICogTWFwcyBuYXRpdmUgZXZlbnRzIGZyb20gMTAgbW9uaXRvcmluZy9sb2dnaW5nIHN5c3RlbXMgaW50byBVbmlmaWVkTG9nRW50cnlcbiAqIG9iamVjdHMgYW5kIHJvdXRlcyB0aGVtIHRocm91Z2ggTG9nTWFuYWdlci4gIEVhY2ggc291cmNlIHN5c3RlbSBleHBvc2VzIGFcbiAqIGxpZ2h0d2VpZ2h0IGBhZGRMb2dMaXN0ZW5lcmAgY2FsbGJhY2s7IHRoZSB0cmFuc2xhdGlvbiBsb2dpYyBsaXZlcyBoZXJlIHNvXG4gKiBzb3VyY2UgZmlsZXMgc3RheSBtaW5pbWFsIGFuZCBuZXZlciBpbXBvcnQgVW5pZmllZExvZ0VudHJ5LlxuICpcbiAqIFVzYWdlOlxuICogICBjb25zdCBjbGVhbnVwcyA9IHdpcmVMb2dIb29rcyhsb2dNYW5hZ2VyLCBjb250YWluZXIpO1xuICogICAvLyBsYXRlciDigKZcbiAqICAgY2xlYW51cHMuZm9yRWFjaChmbiA9PiBmbigpKTtcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IExvZ01hbmFnZXIgfSBmcm9tICcuL0xvZ01hbmFnZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBMb2dMZXZlbCwgVW5pZmllZExvZ0VudHJ5IH0gZnJvbSAnLi90eXBlcy5qcyc7XG5pbXBvcnQgeyBTZWN1cml0eU1vbml0b3IgfSBmcm9tICcuLi9zZWN1cml0eS9zZWN1cml0eU1vbml0b3IuanMnO1xuaW1wb3J0IHsgRGVmYXVsdEVsZW1lbnRQcm92aWRlciB9IGZyb20gJy4uL3BvcnRmb2xpby9EZWZhdWx0RWxlbWVudFByb3ZpZGVyLmpzJztcbmltcG9ydCB7IExSVUNhY2hlIH0gZnJvbSAnLi4vY2FjaGUvTFJVQ2FjaGUuanMnO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFNldmVyaXR5IOKGkiBMb2dMZXZlbCBoZWxwZXIgKHNoYXJlZCBieSBTZWN1cml0eU1vbml0b3IsIFNlY3VyaXR5VGVsZW1ldHJ5LFxuLy8gU2VjdXJpdHlBdWRpdG9yKVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmNvbnN0IFNFVkVSSVRZX1RPX0xFVkVMOiBSZWNvcmQ8c3RyaW5nLCBMb2dMZXZlbD4gPSB7XG4gIENSSVRJQ0FMOiAnZXJyb3InLFxuICBISUdIOiAnZXJyb3InLFxuICBNRURJVU06ICd3YXJuJyxcbiAgTE9XOiAnaW5mbycsXG4gIGNyaXRpY2FsOiAnZXJyb3InLFxuICBoaWdoOiAnZXJyb3InLFxuICBtZWRpdW06ICd3YXJuJyxcbiAgbG93OiAnaW5mbycsXG59O1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIENvcnJlbGF0aW9uSWQgcHJvdmlkZXIgaW50ZXJmYWNlIChzdWJzZXQgb2YgQ29udGV4dFRyYWNrZXIpXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudHlwZSBDb3JyZWxhdGlvbklkUHJvdmlkZXIgPSB7IGdldENvcnJlbGF0aW9uSWQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIH07XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRXhwb3J0ZWQgZmFjdG9yeSBmb3IgVHJpZ2dlck1ldHJpY3NUcmFja2VyIChjcmVhdGVkIG91dHNpZGUgREkgY29udGFpbmVyKVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUcmlnZ2VyTWV0cmljc0xvZ0xpc3RlbmVyKFxuICBsb2dNYW5hZ2VyOiBMb2dNYW5hZ2VyLFxuICBjb250ZXh0VHJhY2tlcj86IENvcnJlbGF0aW9uSWRQcm92aWRlcixcbik6IChsZXZlbDogJ2RlYnVnJyB8ICdpbmZvJyB8ICd3YXJuJyB8ICdlcnJvcicsIG1lc3NhZ2U6IHN0cmluZywgZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB2b2lkIHtcbiAgcmV0dXJuIChsZXZlbCwgbWVzc2FnZSwgZGF0YSkgPT4ge1xuICAgIGNvbnN0IGVudHJ5OiBVbmlmaWVkTG9nRW50cnkgPSB7XG4gICAgICBpZDogbG9nTWFuYWdlci5nZW5lcmF0ZUlkKCksXG4gICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIGNhdGVnb3J5OiAndGVsZW1ldHJ5JyxcbiAgICAgIGxldmVsLFxuICAgICAgc291cmNlOiAnVHJpZ2dlck1ldHJpY3NUcmFja2VyJyxcbiAgICAgIG1lc3NhZ2UsXG4gICAgICBkYXRhLFxuICAgICAgY29ycmVsYXRpb25JZDogY29udGV4dFRyYWNrZXI/LmdldENvcnJlbGF0aW9uSWQoKSxcbiAgICB9O1xuICAgIGxvZ01hbmFnZXIubG9nKGVudHJ5KTtcbiAgfTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBFeHBvcnRlZCBmYWN0b3J5IGZvciBTZWN1cml0eUF1ZGl0b3IgKGNyZWF0ZWQgb3V0c2lkZSBESSBjb250YWluZXIpXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlY3VyaXR5QXVkaXRvckxvZ0xpc3RlbmVyKFxuICBsb2dNYW5hZ2VyOiBMb2dNYW5hZ2VyLFxuICBjb250ZXh0VHJhY2tlcj86IENvcnJlbGF0aW9uSWRQcm92aWRlcixcbik6IChsZXZlbDogJ2RlYnVnJyB8ICdpbmZvJyB8ICd3YXJuJyB8ICdlcnJvcicsIG1lc3NhZ2U6IHN0cmluZywgZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB2b2lkIHtcbiAgcmV0dXJuIChsZXZlbCwgbWVzc2FnZSwgZGF0YSkgPT4ge1xuICAgIGNvbnN0IGVudHJ5OiBVbmlmaWVkTG9nRW50cnkgPSB7XG4gICAgICBpZDogbG9nTWFuYWdlci5nZW5lcmF0ZUlkKCksXG4gICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIGNhdGVnb3J5OiAnc2VjdXJpdHknLFxuICAgICAgbGV2ZWwsXG4gICAgICBzb3VyY2U6ICdTZWN1cml0eUF1ZGl0b3InLFxuICAgICAgbWVzc2FnZSxcbiAgICAgIGRhdGEsXG4gICAgICBjb3JyZWxhdGlvbklkOiBjb250ZXh0VHJhY2tlcj8uZ2V0Q29ycmVsYXRpb25JZCgpLFxuICAgIH07XG4gICAgbG9nTWFuYWdlci5sb2coZW50cnkpO1xuICB9O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIE1haW4gd2lyaW5nIGZ1bmN0aW9uXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBXaXJlIGFsbCBtb25pdG9yaW5nIHN5c3RlbXMgaW50byB0aGUgdW5pZmllZCBsb2dnaW5nIHBpcGVsaW5lLlxuICpcbiAqIEBwYXJhbSBsb2dNYW5hZ2VyICBUaGUgTG9nTWFuYWdlciBzaW5nbGV0b24gZnJvbSB0aGUgREkgY29udGFpbmVyLlxuICogQHBhcmFtIGNvbnRhaW5lciAgIFRoZSBESSBjb250YWluZXIgKHVzZWQgdG8gcmVzb2x2ZSBzb3VyY2Ugc2VydmljZXMpLlxuICogQHJldHVybnMgQXJyYXkgb2YgdW5zdWJzY3JpYmUgZnVuY3Rpb25zIOKAlCBjYWxsIHRoZW0gZHVyaW5nIHNodXRkb3duLlxuICovXG5leHBvcnQgZnVuY3Rpb24gd2lyZUxvZ0hvb2tzKFxuICBsb2dNYW5hZ2VyOiBMb2dNYW5hZ2VyLFxuICBjb250YWluZXI6IHsgcmVzb2x2ZTxUPihuYW1lOiBzdHJpbmcpOiBUIH0sXG4pOiAoKCkgPT4gdm9pZClbXSB7XG4gIGNvbnN0IGNsZWFudXBzOiAoKCkgPT4gdm9pZClbXSA9IFtdO1xuXG4gIC8vIFJlc29sdmUgQ29udGV4dFRyYWNrZXIgZm9yIGNvcnJlbGF0aW9uSWQgaW5qZWN0aW9uXG4gIGxldCBjb250ZXh0VHJhY2tlcjogQ29ycmVsYXRpb25JZFByb3ZpZGVyIHwgbnVsbCA9IG51bGw7XG4gIHRyeSB7XG4gICAgY29udGV4dFRyYWNrZXIgPSBjb250YWluZXIucmVzb2x2ZTxDb3JyZWxhdGlvbklkUHJvdmlkZXI+KCdDb250ZXh0VHJhY2tlcicpO1xuICB9IGNhdGNoIHsgLyogQ29udGV4dFRyYWNrZXIgbm90IHJlZ2lzdGVyZWQgKi8gfVxuXG4gIC8vIC0tLSBNQ1BMb2dnZXIgKGFwcGxpY2F0aW9uKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIHRyeSB7XG4gICAgY29uc3QgbWNwTG9nZ2VyID0gY29udGFpbmVyLnJlc29sdmU8e1xuICAgICAgYWRkTG9nTGlzdGVuZXIoZm46IChlbnRyeTogeyB0aW1lc3RhbXA6IERhdGU7IGxldmVsOiBzdHJpbmc7IG1lc3NhZ2U6IHN0cmluZzsgZGF0YT86IGFueSB9KSA9PiB2b2lkKTogKCkgPT4gdm9pZDtcbiAgICB9PignTUNQTG9nZ2VyJyk7XG4gICAgY29uc3QgdW5zdWIgPSBtY3BMb2dnZXIuYWRkTG9nTGlzdGVuZXIoKGxvZ0VudHJ5KSA9PiB7XG4gICAgICBjb25zdCBlbnRyeTogVW5pZmllZExvZ0VudHJ5ID0ge1xuICAgICAgICBpZDogbG9nTWFuYWdlci5nZW5lcmF0ZUlkKCksXG4gICAgICAgIHRpbWVzdGFtcDogbG9nRW50cnkudGltZXN0YW1wLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIGNhdGVnb3J5OiAnYXBwbGljYXRpb24nLFxuICAgICAgICBsZXZlbDogbG9nRW50cnkubGV2ZWwgYXMgTG9nTGV2ZWwsXG4gICAgICAgIHNvdXJjZTogJ01DUExvZ2dlcicsXG4gICAgICAgIG1lc3NhZ2U6IGxvZ0VudHJ5Lm1lc3NhZ2UsXG4gICAgICAgIGRhdGE6IGxvZ0VudHJ5LmRhdGEgIT0gbnVsbCA/IGxvZ0VudHJ5LmRhdGEgOiB1bmRlZmluZWQsXG4gICAgICAgIGNvcnJlbGF0aW9uSWQ6IGNvbnRleHRUcmFja2VyPy5nZXRDb3JyZWxhdGlvbklkKCksXG4gICAgICB9O1xuICAgICAgbG9nTWFuYWdlci5sb2coZW50cnkpO1xuICAgIH0pO1xuICAgIGNsZWFudXBzLnB1c2godW5zdWIpO1xuICB9IGNhdGNoIHsgLyogTUNQTG9nZ2VyIG5vdCByZWdpc3RlcmVkICovIH1cblxuICAvLyAtLS0gU2VjdXJpdHlNb25pdG9yIChzZWN1cml0eSwgc3RhdGljKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAge1xuICAgIGNvbnN0IHVuc3ViID0gU2VjdXJpdHlNb25pdG9yLmFkZExvZ0xpc3RlbmVyKChsb2dFbnRyeSkgPT4ge1xuICAgICAgY29uc3QgZW50cnk6IFVuaWZpZWRMb2dFbnRyeSA9IHtcbiAgICAgICAgaWQ6IGxvZ01hbmFnZXIuZ2VuZXJhdGVJZCgpLFxuICAgICAgICB0aW1lc3RhbXA6IGxvZ0VudHJ5LnRpbWVzdGFtcCxcbiAgICAgICAgY2F0ZWdvcnk6ICdzZWN1cml0eScsXG4gICAgICAgIGxldmVsOiBTRVZFUklUWV9UT19MRVZFTFtsb2dFbnRyeS5zZXZlcml0eV0gPz8gJ2luZm8nLFxuICAgICAgICBzb3VyY2U6ICdTZWN1cml0eU1vbml0b3InLFxuICAgICAgICBtZXNzYWdlOiBgWyR7bG9nRW50cnkudHlwZX1dICR7bG9nRW50cnkuZGV0YWlsc31gLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgLi4ubG9nRW50cnkuYWRkaXRpb25hbERhdGEsXG4gICAgICAgICAgZXZlbnRUeXBlOiBsb2dFbnRyeS50eXBlLFxuICAgICAgICAgIHNldmVyaXR5OiBsb2dFbnRyeS5zZXZlcml0eSxcbiAgICAgICAgICBzb3VyY2VDb21wb25lbnQ6IGxvZ0VudHJ5LnNvdXJjZSxcbiAgICAgICAgfSxcbiAgICAgICAgY29ycmVsYXRpb25JZDogY29udGV4dFRyYWNrZXI/LmdldENvcnJlbGF0aW9uSWQoKSxcbiAgICAgIH07XG4gICAgICBsb2dNYW5hZ2VyLmxvZyhlbnRyeSk7XG4gICAgfSk7XG4gICAgY2xlYW51cHMucHVzaCh1bnN1Yik7XG4gIH1cblxuICAvLyAtLS0gU2VjdXJpdHlUZWxlbWV0cnkgKHNlY3VyaXR5KSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgdHJ5IHtcbiAgICBjb25zdCBzZWNUZWxlbWV0cnkgPSBjb250YWluZXIucmVzb2x2ZTx7XG4gICAgICBhZGRMb2dMaXN0ZW5lcihmbjogKGVudHJ5OiB7XG4gICAgICAgIHRpbWVzdGFtcDogc3RyaW5nOyBhdHRhY2tUeXBlOiBzdHJpbmc7IHBhdHRlcm46IHN0cmluZztcbiAgICAgICAgc2V2ZXJpdHk6IHN0cmluZzsgc291cmNlOiBzdHJpbmc7IG1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICAgIH0pID0+IHZvaWQpOiAoKSA9PiB2b2lkO1xuICAgIH0+KCdTZWN1cml0eVRlbGVtZXRyeScpO1xuICAgIGNvbnN0IHVuc3ViID0gc2VjVGVsZW1ldHJ5LmFkZExvZ0xpc3RlbmVyKCh0ZWxFbnRyeSkgPT4ge1xuICAgICAgY29uc3QgZW50cnk6IFVuaWZpZWRMb2dFbnRyeSA9IHtcbiAgICAgICAgaWQ6IGxvZ01hbmFnZXIuZ2VuZXJhdGVJZCgpLFxuICAgICAgICB0aW1lc3RhbXA6IHRlbEVudHJ5LnRpbWVzdGFtcCxcbiAgICAgICAgY2F0ZWdvcnk6ICdzZWN1cml0eScsXG4gICAgICAgIGxldmVsOiBTRVZFUklUWV9UT19MRVZFTFt0ZWxFbnRyeS5zZXZlcml0eV0gPz8gJ2luZm8nLFxuICAgICAgICBzb3VyY2U6ICdTZWN1cml0eVRlbGVtZXRyeScsXG4gICAgICAgIG1lc3NhZ2U6IGBCbG9ja2VkICR7dGVsRW50cnkuYXR0YWNrVHlwZX06ICR7dGVsRW50cnkucGF0dGVybn1gLFxuICAgICAgICBkYXRhOiB0ZWxFbnRyeS5tZXRhZGF0YSxcbiAgICAgICAgY29ycmVsYXRpb25JZDogY29udGV4dFRyYWNrZXI/LmdldENvcnJlbGF0aW9uSWQoKSxcbiAgICAgIH07XG4gICAgICBsb2dNYW5hZ2VyLmxvZyhlbnRyeSk7XG4gICAgfSk7XG4gICAgY2xlYW51cHMucHVzaCh1bnN1Yik7XG4gIH0gY2F0Y2ggeyAvKiBTZWN1cml0eVRlbGVtZXRyeSBub3QgcmVnaXN0ZXJlZCAqLyB9XG5cbiAgLy8gLS0tIFBlcmZvcm1hbmNlTW9uaXRvciAocGVyZm9ybWFuY2UpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIHRyeSB7XG4gICAgY29uc3QgcGVyZk1vbml0b3IgPSBjb250YWluZXIucmVzb2x2ZTx7XG4gICAgICBhZGRMb2dMaXN0ZW5lcihmbjogKGxldmVsOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZywgZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB2b2lkKTogKCkgPT4gdm9pZDtcbiAgICB9PignUGVyZm9ybWFuY2VNb25pdG9yJyk7XG4gICAgY29uc3QgdW5zdWIgPSBwZXJmTW9uaXRvci5hZGRMb2dMaXN0ZW5lcigobGV2ZWwsIG1lc3NhZ2UsIGRhdGEpID0+IHtcbiAgICAgIGNvbnN0IGVudHJ5OiBVbmlmaWVkTG9nRW50cnkgPSB7XG4gICAgICAgIGlkOiBsb2dNYW5hZ2VyLmdlbmVyYXRlSWQoKSxcbiAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIGNhdGVnb3J5OiAncGVyZm9ybWFuY2UnLFxuICAgICAgICBsZXZlbDogbGV2ZWwgYXMgTG9nTGV2ZWwsXG4gICAgICAgIHNvdXJjZTogJ1BlcmZvcm1hbmNlTW9uaXRvcicsXG4gICAgICAgIG1lc3NhZ2UsXG4gICAgICAgIGRhdGEsXG4gICAgICAgIGNvcnJlbGF0aW9uSWQ6IGNvbnRleHRUcmFja2VyPy5nZXRDb3JyZWxhdGlvbklkKCksXG4gICAgICB9O1xuICAgICAgbG9nTWFuYWdlci5sb2coZW50cnkpO1xuICAgIH0pO1xuICAgIGNsZWFudXBzLnB1c2godW5zdWIpO1xuICB9IGNhdGNoIHsgLyogUGVyZm9ybWFuY2VNb25pdG9yIG5vdCByZWdpc3RlcmVkICovIH1cblxuICAvLyAtLS0gRWxlbWVudEV2ZW50RGlzcGF0Y2hlciAoYXBwbGljYXRpb24pIOKAlCBhbHJlYWR5IGhhcyBvbigpIC0tLS0tLS0tLS0tXG4gIHRyeSB7XG4gICAgY29uc3QgZGlzcGF0Y2hlciA9IGNvbnRhaW5lci5yZXNvbHZlPHtcbiAgICAgIG9uKGV2ZW50OiBzdHJpbmcsIGhhbmRsZXI6IChwYXlsb2FkOiBhbnkpID0+IHZvaWQpOiAoKSA9PiB2b2lkO1xuICAgIH0+KCdFbGVtZW50RXZlbnREaXNwYXRjaGVyJyk7XG5cbiAgICBjb25zdCBldmVudExldmVsTWFwOiBSZWNvcmQ8c3RyaW5nLCBMb2dMZXZlbD4gPSB7XG4gICAgICAnZWxlbWVudDpsb2FkOmVycm9yJzogJ2Vycm9yJyxcbiAgICAgICdlbGVtZW50OnNhdmU6ZXJyb3InOiAnZXJyb3InLFxuICAgICAgJ2VsZW1lbnQ6ZGVsZXRlOmVycm9yJzogJ2Vycm9yJyxcbiAgICAgICdlbGVtZW50OmxvY2stdGltZW91dCc6ICd3YXJuJyxcbiAgICAgICdlbGVtZW50OmFjdGl2YXRlJzogJ2luZm8nLFxuICAgICAgJ2VsZW1lbnQ6ZGVhY3RpdmF0ZSc6ICdpbmZvJyxcbiAgICAgICdlbGVtZW50OmxvYWQ6c3VjY2Vzcyc6ICdpbmZvJyxcbiAgICAgICdlbGVtZW50OnNhdmU6c3VjY2Vzcyc6ICdpbmZvJyxcbiAgICAgICdlbGVtZW50OmRlbGV0ZTpzdWNjZXNzJzogJ2luZm8nLFxuICAgIH07XG5cbiAgICAvLyBPbmx5IGxvZyBldmVudHMgdGhhdCBoYXZlIGEgbWFwcGVkIGxldmVsIChlcnJvcnMsIHdhcm5pbmdzLCBzdWNjZXNzLCBhY3RpdmF0ZS9kZWFjdGl2YXRlKS5cbiAgICAvLyBTa2lwIHN0YXJ0L2NhY2hlL2V4dGVybmFsLWNoYW5nZSBldmVudHMg4oCUIHRoZXkgZmlyZSBwZXItZWxlbWVudCBhbmQgY3JlYXRlIG5vaXNlXG4gICAgLy8gd2l0aG91dCBhZGRpbmcgdmFsdWUgYmV5b25kIHRoZSBjb21wbGV0aW9uL2Vycm9yIGxvZ3MuXG4gICAgY29uc3QgbG9nZ2VkRXZlbnRzID0gT2JqZWN0LmtleXMoZXZlbnRMZXZlbE1hcCk7XG5cbiAgICBmb3IgKGNvbnN0IGV2ZW50TmFtZSBvZiBsb2dnZWRFdmVudHMpIHtcbiAgICAgIGNvbnN0IHVuc3ViID0gZGlzcGF0Y2hlci5vbihldmVudE5hbWUsIChwYXlsb2FkOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgbGV2ZWwgPSBldmVudExldmVsTWFwW2V2ZW50TmFtZV0gPz8gJ2RlYnVnJztcbiAgICAgICAgY29uc3QgcmVxdWVzdENvcnJlbGF0aW9uSWQgPSBjb250ZXh0VHJhY2tlcj8uZ2V0Q29ycmVsYXRpb25JZCgpO1xuICAgICAgICAvLyBVc2UgZWxlbWVudElkIGlmIGF2YWlsYWJsZSwgZmFsbCBiYWNrIHRvIGZpbGVuYW1lIGZyb20gZmlsZVBhdGhcbiAgICAgICAgY29uc3QgZWxlbWVudE5hbWUgPSBwYXlsb2FkLmVsZW1lbnRJZFxuICAgICAgICAgIHx8IChwYXlsb2FkLmZpbGVQYXRoID8gcGF5bG9hZC5maWxlUGF0aC5yZXBsYWNlKC9cXC5bXi5dKyQvLCAnJykgOiAnJyk7XG4gICAgICAgIGNvbnN0IGVudHJ5OiBVbmlmaWVkTG9nRW50cnkgPSB7XG4gICAgICAgICAgaWQ6IGxvZ01hbmFnZXIuZ2VuZXJhdGVJZCgpLFxuICAgICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgIGNhdGVnb3J5OiAnYXBwbGljYXRpb24nLFxuICAgICAgICAgIGxldmVsLFxuICAgICAgICAgIHNvdXJjZTogJ0VsZW1lbnRFdmVudERpc3BhdGNoZXInLFxuICAgICAgICAgIG1lc3NhZ2U6IGAke2V2ZW50TmFtZX0gWyR7cGF5bG9hZC5lbGVtZW50VHlwZSA/PyAndW5rbm93bid9OiR7ZWxlbWVudE5hbWV9XWAsXG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgLi4ucGF5bG9hZC5leHRyYSxcbiAgICAgICAgICAgIC4uLihwYXlsb2FkLmNvcnJlbGF0aW9uSWQgPyB7IG9wZXJhdGlvbklkOiBwYXlsb2FkLmNvcnJlbGF0aW9uSWQgfSA6IHt9KSxcbiAgICAgICAgICAgIC4uLihwYXlsb2FkLmZpbGVQYXRoID8geyBmaWxlUGF0aDogcGF5bG9hZC5maWxlUGF0aCB9IDoge30pLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgY29ycmVsYXRpb25JZDogcmVxdWVzdENvcnJlbGF0aW9uSWQgPz8gcGF5bG9hZC5jb3JyZWxhdGlvbklkLFxuICAgICAgICB9O1xuICAgICAgICBsb2dNYW5hZ2VyLmxvZyhlbnRyeSk7XG4gICAgICB9KTtcbiAgICAgIGNsZWFudXBzLnB1c2godW5zdWIpO1xuICAgIH1cbiAgfSBjYXRjaCB7IC8qIEVsZW1lbnRFdmVudERpc3BhdGNoZXIgbm90IHJlZ2lzdGVyZWQgKi8gfVxuXG4gIC8vIC0tLSBPcGVyYXRpb25hbFRlbGVtZXRyeSAodGVsZW1ldHJ5KSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICB0cnkge1xuICAgIGNvbnN0IG9wc1RlbGVtZXRyeSA9IGNvbnRhaW5lci5yZXNvbHZlPHtcbiAgICAgIGFkZExvZ0xpc3RlbmVyKGZuOiAobGV2ZWw6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nLCBkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IHZvaWQpOiAoKSA9PiB2b2lkO1xuICAgIH0+KCdPcGVyYXRpb25hbFRlbGVtZXRyeScpO1xuICAgIGNvbnN0IHVuc3ViID0gb3BzVGVsZW1ldHJ5LmFkZExvZ0xpc3RlbmVyKChsZXZlbCwgbWVzc2FnZSwgZGF0YSkgPT4ge1xuICAgICAgY29uc3QgZW50cnk6IFVuaWZpZWRMb2dFbnRyeSA9IHtcbiAgICAgICAgaWQ6IGxvZ01hbmFnZXIuZ2VuZXJhdGVJZCgpLFxuICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgY2F0ZWdvcnk6ICd0ZWxlbWV0cnknLFxuICAgICAgICBsZXZlbDogbGV2ZWwgYXMgTG9nTGV2ZWwsXG4gICAgICAgIHNvdXJjZTogJ09wZXJhdGlvbmFsVGVsZW1ldHJ5JyxcbiAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgZGF0YSxcbiAgICAgICAgY29ycmVsYXRpb25JZDogY29udGV4dFRyYWNrZXI/LmdldENvcnJlbGF0aW9uSWQoKSxcbiAgICAgIH07XG4gICAgICBsb2dNYW5hZ2VyLmxvZyhlbnRyeSk7XG4gICAgfSk7XG4gICAgY2xlYW51cHMucHVzaCh1bnN1Yik7XG4gIH0gY2F0Y2ggeyAvKiBPcGVyYXRpb25hbFRlbGVtZXRyeSBub3QgcmVnaXN0ZXJlZCAqLyB9XG5cbiAgLy8gLS0tIEZpbGVMb2NrTWFuYWdlciAocGVyZm9ybWFuY2UpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIHRyeSB7XG4gICAgY29uc3QgbG9ja01hbmFnZXIgPSBjb250YWluZXIucmVzb2x2ZTx7XG4gICAgICBhZGRMb2dMaXN0ZW5lcihmbjogKGxldmVsOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZywgZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB2b2lkKTogKCkgPT4gdm9pZDtcbiAgICB9PignRmlsZUxvY2tNYW5hZ2VyJyk7XG4gICAgY29uc3QgdW5zdWIgPSBsb2NrTWFuYWdlci5hZGRMb2dMaXN0ZW5lcigobGV2ZWwsIG1lc3NhZ2UsIGRhdGEpID0+IHtcbiAgICAgIGNvbnN0IGVudHJ5OiBVbmlmaWVkTG9nRW50cnkgPSB7XG4gICAgICAgIGlkOiBsb2dNYW5hZ2VyLmdlbmVyYXRlSWQoKSxcbiAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIGNhdGVnb3J5OiAncGVyZm9ybWFuY2UnLFxuICAgICAgICBsZXZlbDogbGV2ZWwgYXMgTG9nTGV2ZWwsXG4gICAgICAgIHNvdXJjZTogJ0ZpbGVMb2NrTWFuYWdlcicsXG4gICAgICAgIG1lc3NhZ2UsXG4gICAgICAgIGRhdGEsXG4gICAgICAgIGNvcnJlbGF0aW9uSWQ6IGNvbnRleHRUcmFja2VyPy5nZXRDb3JyZWxhdGlvbklkKCksXG4gICAgICB9O1xuICAgICAgbG9nTWFuYWdlci5sb2coZW50cnkpO1xuICAgIH0pO1xuICAgIGNsZWFudXBzLnB1c2godW5zdWIpO1xuICB9IGNhdGNoIHsgLyogRmlsZUxvY2tNYW5hZ2VyIG5vdCByZWdpc3RlcmVkICovIH1cblxuICAvLyAtLS0gRGVmYXVsdEVsZW1lbnRQcm92aWRlciAocGVyZm9ybWFuY2UsIHN0YXRpYykgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAge1xuICAgIGNvbnN0IHVuc3ViID0gRGVmYXVsdEVsZW1lbnRQcm92aWRlci5hZGRMb2dMaXN0ZW5lcigobGV2ZWwsIG1lc3NhZ2UsIGRhdGEpID0+IHtcbiAgICAgIGNvbnN0IGVudHJ5OiBVbmlmaWVkTG9nRW50cnkgPSB7XG4gICAgICAgIGlkOiBsb2dNYW5hZ2VyLmdlbmVyYXRlSWQoKSxcbiAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIGNhdGVnb3J5OiAncGVyZm9ybWFuY2UnLFxuICAgICAgICBsZXZlbDogbGV2ZWwgYXMgTG9nTGV2ZWwsXG4gICAgICAgIHNvdXJjZTogJ0RlZmF1bHRFbGVtZW50UHJvdmlkZXInLFxuICAgICAgICBtZXNzYWdlLFxuICAgICAgICBkYXRhLFxuICAgICAgICBjb3JyZWxhdGlvbklkOiBjb250ZXh0VHJhY2tlcj8uZ2V0Q29ycmVsYXRpb25JZCgpLFxuICAgICAgfTtcbiAgICAgIGxvZ01hbmFnZXIubG9nKGVudHJ5KTtcbiAgICB9KTtcbiAgICBjbGVhbnVwcy5wdXNoKHVuc3ViKTtcbiAgfVxuXG4gIC8vIC0tLSBMUlVDYWNoZSAocGVyZm9ybWFuY2UsIHN0YXRpYykgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIHtcbiAgICBjb25zdCB1bnN1YiA9IExSVUNhY2hlLmFkZExvZ0xpc3RlbmVyKChsZXZlbCwgbWVzc2FnZSwgZGF0YSkgPT4ge1xuICAgICAgY29uc3QgZW50cnk6IFVuaWZpZWRMb2dFbnRyeSA9IHtcbiAgICAgICAgaWQ6IGxvZ01hbmFnZXIuZ2VuZXJhdGVJZCgpLFxuICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgY2F0ZWdvcnk6ICdwZXJmb3JtYW5jZScsXG4gICAgICAgIGxldmVsOiBsZXZlbCBhcyBMb2dMZXZlbCxcbiAgICAgICAgc291cmNlOiAnTFJVQ2FjaGUnLFxuICAgICAgICBtZXNzYWdlLFxuICAgICAgICBkYXRhLFxuICAgICAgICBjb3JyZWxhdGlvbklkOiBjb250ZXh0VHJhY2tlcj8uZ2V0Q29ycmVsYXRpb25JZCgpLFxuICAgICAgfTtcbiAgICAgIGxvZ01hbmFnZXIubG9nKGVudHJ5KTtcbiAgICB9KTtcbiAgICBjbGVhbnVwcy5wdXNoKHVuc3ViKTtcbiAgfVxuXG4gIC8vIC0tLSBTdGF0ZUNoYW5nZU5vdGlmaWVyIChhcHBsaWNhdGlvbikg4oCUIGV4dGVuZHMgRXZlbnRFbWl0dGVyIC0tLS0tLS0tLS1cbiAgdHJ5IHtcbiAgICBjb25zdCBub3RpZmllciA9IGNvbnRhaW5lci5yZXNvbHZlPHtcbiAgICAgIG9uKGV2ZW50OiBzdHJpbmcsIGhhbmRsZXI6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCk6IGFueTtcbiAgICAgIHJlbW92ZUxpc3RlbmVyKGV2ZW50OiBzdHJpbmcsIGhhbmRsZXI6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCk6IGFueTtcbiAgICB9PignU3RhdGVDaGFuZ2VOb3RpZmllcicpO1xuICAgIGNvbnN0IGhhbmRsZXIgPSAoZXZlbnQ6IHsgdHlwZTogc3RyaW5nOyBwcmV2aW91c1ZhbHVlOiBzdHJpbmcgfCBudWxsOyBuZXdWYWx1ZTogc3RyaW5nIHwgbnVsbCB9KSA9PiB7XG4gICAgICBjb25zdCBlbnRyeTogVW5pZmllZExvZ0VudHJ5ID0ge1xuICAgICAgICBpZDogbG9nTWFuYWdlci5nZW5lcmF0ZUlkKCksXG4gICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICBjYXRlZ29yeTogJ2FwcGxpY2F0aW9uJyxcbiAgICAgICAgbGV2ZWw6ICdpbmZvJyxcbiAgICAgICAgc291cmNlOiAnU3RhdGVDaGFuZ2VOb3RpZmllcicsXG4gICAgICAgIG1lc3NhZ2U6IGBTdGF0ZSBjaGFuZ2U6ICR7ZXZlbnQudHlwZX1gLFxuICAgICAgICBkYXRhOiB7IHByZXZpb3VzVmFsdWU6IGV2ZW50LnByZXZpb3VzVmFsdWUsIG5ld1ZhbHVlOiBldmVudC5uZXdWYWx1ZSB9LFxuICAgICAgICBjb3JyZWxhdGlvbklkOiBjb250ZXh0VHJhY2tlcj8uZ2V0Q29ycmVsYXRpb25JZCgpLFxuICAgICAgfTtcbiAgICAgIGxvZ01hbmFnZXIubG9nKGVudHJ5KTtcbiAgICB9O1xuICAgIG5vdGlmaWVyLm9uKCdzdGF0ZS1jaGFuZ2UnLCBoYW5kbGVyKTtcbiAgICBjbGVhbnVwcy5wdXNoKCgpID0+IG5vdGlmaWVyLnJlbW92ZUxpc3RlbmVyKCdzdGF0ZS1jaGFuZ2UnLCBoYW5kbGVyKSk7XG4gIH0gY2F0Y2ggeyAvKiBTdGF0ZUNoYW5nZU5vdGlmaWVyIG5vdCByZWdpc3RlcmVkICovIH1cblxuICByZXR1cm4gY2xlYW51cHM7XG59XG4iXX0=
|
|
@@ -77,8 +77,6 @@ export declare function buildLogManagerConfig(envVars: {
|
|
|
77
77
|
DOLLHOUSE_LOG_FILE_MAX_SIZE: number;
|
|
78
78
|
DOLLHOUSE_LOG_MAX_DIR_SIZE_BYTES: number;
|
|
79
79
|
DOLLHOUSE_LOG_MAX_FILES_PER_CATEGORY: number;
|
|
80
|
-
DOLLHOUSE_LOG_VIEWER: boolean;
|
|
81
|
-
DOLLHOUSE_LOG_VIEWER_PORT: number;
|
|
82
80
|
LOG_LEVEL: 'debug' | 'info' | 'warn' | 'error';
|
|
83
81
|
}): LogManagerConfig;
|
|
84
82
|
//# sourceMappingURL=LogManager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LogManager.d.ts","sourceRoot":"","sources":["../../src/logging/LogManager.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,QAAQ,EAEb,KAAK,gBAAgB,EAEtB,MAAM,YAAY,CAAC;AAEpB,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAkB;IACxC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiC;IACxD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmB;IAC1C,OAAO,CAAC,UAAU,CAA+C;IACjE,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,kBAAkB,CAAK;IAG/B,OAAO,CAAC,yBAAyB,CAAK;IACtC,OAAO,CAAC,mBAAmB,CAAK;gBAEpB,MAAM,EAAE,gBAAgB;IAUpC;;;;;;;OAOG;IACH,GAAG,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI;IAwCjC,+BAA+B;IAC/B,YAAY,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI;IAIlC,mEAAmE;IAC7D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAqB5B,mEAAmE;IAC7D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAO5B;;;OAGG;IACH,UAAU,IAAI,MAAM;IAQpB,OAAO,CAAC,eAAe;IAavB,OAAO,CAAC,cAAc;IAOtB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAoBzB;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IAyBxB,iEAAiE;IACjE,OAAO,CAAC,eAAe;CAexB;AAMD;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE;IAC7C,iBAAiB,EAAE,MAAM,CAAC;IAC1B,oBAAoB,EAAE,MAAM,GAAG,OAAO,CAAC;IACvC,4BAA4B,EAAE,MAAM,CAAC;IACrC,qCAAqC,EAAE,MAAM,CAAC;IAC9C,+BAA+B,EAAE,MAAM,CAAC;IACxC,yBAAyB,EAAE,MAAM,CAAC;IAClC,6BAA6B,EAAE,MAAM,CAAC;IACtC,iCAAiC,EAAE,MAAM,CAAC;IAC1C,sCAAsC,EAAE,MAAM,CAAC;IAC/C,kCAAkC,EAAE,MAAM,CAAC;IAC3C,uCAAuC,EAAE,MAAM,CAAC;IAChD,4BAA4B,EAAE,MAAM,CAAC;IACrC,kCAAkC,EAAE,MAAM,CAAC;IAC3C,2BAA2B,EAAE,MAAM,CAAC;IACpC,gCAAgC,EAAE,MAAM,CAAC;IACzC,oCAAoC,EAAE,MAAM,CAAC;IAC7C,
|
|
1
|
+
{"version":3,"file":"LogManager.d.ts","sourceRoot":"","sources":["../../src/logging/LogManager.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,QAAQ,EAEb,KAAK,gBAAgB,EAEtB,MAAM,YAAY,CAAC;AAEpB,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAkB;IACxC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiC;IACxD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmB;IAC1C,OAAO,CAAC,UAAU,CAA+C;IACjE,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,kBAAkB,CAAK;IAG/B,OAAO,CAAC,yBAAyB,CAAK;IACtC,OAAO,CAAC,mBAAmB,CAAK;gBAEpB,MAAM,EAAE,gBAAgB;IAUpC;;;;;;;OAOG;IACH,GAAG,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI;IAwCjC,+BAA+B;IAC/B,YAAY,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI;IAIlC,mEAAmE;IAC7D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAqB5B,mEAAmE;IAC7D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAO5B;;;OAGG;IACH,UAAU,IAAI,MAAM;IAQpB,OAAO,CAAC,eAAe;IAavB,OAAO,CAAC,cAAc;IAOtB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAoBzB;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IAyBxB,iEAAiE;IACjE,OAAO,CAAC,eAAe;CAexB;AAMD;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE;IAC7C,iBAAiB,EAAE,MAAM,CAAC;IAC1B,oBAAoB,EAAE,MAAM,GAAG,OAAO,CAAC;IACvC,4BAA4B,EAAE,MAAM,CAAC;IACrC,qCAAqC,EAAE,MAAM,CAAC;IAC9C,+BAA+B,EAAE,MAAM,CAAC;IACxC,yBAAyB,EAAE,MAAM,CAAC;IAClC,6BAA6B,EAAE,MAAM,CAAC;IACtC,iCAAiC,EAAE,MAAM,CAAC;IAC1C,sCAAsC,EAAE,MAAM,CAAC;IAC/C,kCAAkC,EAAE,MAAM,CAAC;IAC3C,uCAAuC,EAAE,MAAM,CAAC;IAChD,4BAA4B,EAAE,MAAM,CAAC;IACrC,kCAAkC,EAAE,MAAM,CAAC;IAC3C,2BAA2B,EAAE,MAAM,CAAC;IACpC,gCAAgC,EAAE,MAAM,CAAC;IACzC,oCAAoC,EAAE,MAAM,CAAC;IAC7C,SAAS,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;CAChD,GAAG,gBAAgB,CAoBnB"}
|