@thinkhive/sdk 4.0.1 → 4.2.0
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/README.md +364 -208
- package/dist/api/claims.js +2 -3
- package/dist/api/documents.d.ts +52 -0
- package/dist/api/documents.js +58 -0
- package/dist/api/drift.d.ts +70 -0
- package/dist/api/drift.js +71 -0
- package/dist/api/eval-runs.d.ts +126 -0
- package/dist/api/eval-runs.js +126 -0
- package/dist/api/llm-costs.d.ts +104 -0
- package/dist/api/llm-costs.js +81 -0
- package/dist/api/notifications.d.ts +103 -0
- package/dist/api/notifications.js +110 -0
- package/dist/api/roi-analytics.d.ts +99 -0
- package/dist/api/roi-analytics.js +64 -1
- package/dist/api/sessions.d.ts +57 -0
- package/dist/api/sessions.js +49 -0
- package/dist/api/shadow-tests.d.ts +78 -0
- package/dist/api/shadow-tests.js +80 -0
- package/dist/api/signals.d.ts +177 -0
- package/dist/api/signals.js +172 -0
- package/dist/core/client.d.ts +2 -0
- package/dist/core/client.js +10 -4
- package/dist/core/config.d.ts +1 -1
- package/dist/core/config.js +2 -2
- package/dist/guardrails.d.ts +70 -0
- package/dist/guardrails.js +34 -0
- package/dist/index.d.ts +209 -18
- package/dist/index.js +55 -7
- package/dist/integrations/ticket-linking.d.ts +23 -17
- package/dist/integrations/ticket-linking.js +95 -12
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,20 +1,21 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
* ThinkHive SDK
|
|
3
|
+
* ThinkHive SDK v4.1.0
|
|
4
4
|
*
|
|
5
5
|
* Run-centric AI agent observability platform with:
|
|
6
6
|
* - Facts vs Inferences (claims API)
|
|
7
7
|
* - Deterministic ticket linking (7 methods)
|
|
8
8
|
* - Customer context snapshots (time-series)
|
|
9
9
|
* - Calibrated predictions (Brier scores)
|
|
10
|
+
* - Configurable ROI calculation engine
|
|
10
11
|
*
|
|
11
|
-
* @version
|
|
12
|
+
* @version 4.1.0
|
|
12
13
|
* @license MIT
|
|
13
14
|
*/
|
|
14
15
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
exports.
|
|
16
|
-
exports.
|
|
17
|
-
exports.IpWhitelistError = exports.RateLimitError = exports.AgentScopeError = exports.PermissionDeniedError = exports.ThinkHiveValidationError = exports.ThinkHiveApiError = exports.ThinkHiveError = exports.getTrendEmoji = exports.formatMetricValue = exports.getTraceProgress = void 0;
|
|
16
|
+
exports.getBestLinkMethod = exports.linkRunToZendeskTicket = exports.linkRunToTicket = exports.removeZendeskMarker = exports.hasZendeskMarker = exports.parseZendeskMarker = exports.generateZendeskMarker = exports.getCalibrationQuality = exports.isWellCalibrated = exports.calculateECE = exports.calculateBrierScore = exports.groupClaimsByCategory = exports.groupClaimsByType = exports.getHighConfidenceClaims = exports.isComputed = exports.isInference = exports.isFact = exports.fromOpenAIMessages = exports.toOpenAIMessages = exports.createRunWithContext = exports.guardrails = exports.llmCosts = exports.drift = exports.sessions = exports.shadowTests = exports.documents = exports.notifications = exports.signals = exports.evalRuns = exports.businessMetrics = exports.qualityMetrics = exports.roiAnalytics = exports.agents = exports.apiKeys = exports.transcriptPatterns = exports.conversationEval = exports.deterministicGraders = exports.evalHealth = exports.nondeterminism = exports.humanReview = exports.customerContext = exports.linking = exports.calibration = exports.claims = exports.runs = exports.DEFAULT_ENDPOINT = exports.SDK_VERSION = exports.isInitialized = exports.analyzer = exports.issues = void 0;
|
|
17
|
+
exports.passesQualityThreshold = exports.getROIQuality = exports.formatCurrency = exports.calculateAutomationSavings = exports.calculateRevenueAtRisk = exports.canAccessAgent = exports.getTimeUntilExpiry = exports.isApiKeyValid = exports.isApiKeyExpired = exports.hasPermission = exports.sortMatchesBySeverity = exports.needsAttention = exports.getRecommendations = exports.getCategoryDistribution = exports.hasEscalationRequest = exports.hasFrustrationSignals = exports.hasPiiExposure = exports.getCriticalInsights = exports.getMatchesByCategory = exports.isHighRisk = exports.analyzeConversationTrend = exports.getProblematicTurns = exports.getAggregator = exports.aggregateMajority = exports.aggregateFinalTurn = exports.aggregateWeighted = exports.aggregateAverage = exports.aggregateWorst = exports.calculateAverageScore = exports.getFailedRules = exports.allRulesPassed = exports.createJsonSchemaRule = exports.createLengthRule = exports.createContainsRule = exports.createRegexRule = exports.getSaturationRecommendation = exports.isSaturated = exports.getHealthSeverityLevel = exports.hasHealthIssue = exports.getReliabilityRecommendation = exports.isReliableEvaluation = exports.requiredPassRateForPassAtK = exports.calculatePassToK = exports.calculatePassAtK = exports.calculateHealthTrend = exports.calculateArrChange = exports.toContextSnapshot = exports.getContextAsOf = exports.captureCustomerContext = exports.LINK_METHOD_CONFIDENCE = void 0;
|
|
18
|
+
exports.IpWhitelistError = exports.RateLimitError = exports.AgentScopeError = exports.PermissionDeniedError = exports.ThinkHiveValidationError = exports.ThinkHiveApiError = exports.ThinkHiveError = exports.formatLLMCost = exports.getDriftSeverity = exports.hasDrift = exports.getTrendEmoji = exports.formatMetricValue = exports.getTraceProgress = exports.getStatusMessage = exports.isMetricStale = exports.awaitingExternalData = exports.needsMoreTraces = exports.isMetricReady = exports.getGradeColor = exports.formatQualityScore = exports.getQualityRecommendations = exports.isHallucinationRiskAcceptable = void 0;
|
|
18
19
|
exports.init = init;
|
|
19
20
|
exports.getTracer = getTracer;
|
|
20
21
|
exports.shutdown = shutdown;
|
|
@@ -110,6 +111,36 @@ Object.defineProperty(exports, "sortMatchesBySeverity", { enumerable: true, get:
|
|
|
110
111
|
// Agents Management
|
|
111
112
|
const agents_1 = require("./api/agents");
|
|
112
113
|
Object.defineProperty(exports, "agents", { enumerable: true, get: function () { return agents_1.agents; } });
|
|
114
|
+
// Eval Runs
|
|
115
|
+
const eval_runs_1 = require("./api/eval-runs");
|
|
116
|
+
Object.defineProperty(exports, "evalRuns", { enumerable: true, get: function () { return eval_runs_1.evalRuns; } });
|
|
117
|
+
// Signals
|
|
118
|
+
const signals_1 = require("./api/signals");
|
|
119
|
+
Object.defineProperty(exports, "signals", { enumerable: true, get: function () { return signals_1.signals; } });
|
|
120
|
+
// Notifications
|
|
121
|
+
const notifications_1 = require("./api/notifications");
|
|
122
|
+
Object.defineProperty(exports, "notifications", { enumerable: true, get: function () { return notifications_1.notifications; } });
|
|
123
|
+
// Documents
|
|
124
|
+
const documents_1 = require("./api/documents");
|
|
125
|
+
Object.defineProperty(exports, "documents", { enumerable: true, get: function () { return documents_1.documents; } });
|
|
126
|
+
// Shadow Tests
|
|
127
|
+
const shadow_tests_1 = require("./api/shadow-tests");
|
|
128
|
+
Object.defineProperty(exports, "shadowTests", { enumerable: true, get: function () { return shadow_tests_1.shadowTests; } });
|
|
129
|
+
// Sessions
|
|
130
|
+
const sessions_1 = require("./api/sessions");
|
|
131
|
+
Object.defineProperty(exports, "sessions", { enumerable: true, get: function () { return sessions_1.sessions; } });
|
|
132
|
+
// Drift
|
|
133
|
+
const drift_1 = require("./api/drift");
|
|
134
|
+
Object.defineProperty(exports, "drift", { enumerable: true, get: function () { return drift_1.drift; } });
|
|
135
|
+
Object.defineProperty(exports, "hasDrift", { enumerable: true, get: function () { return drift_1.hasDrift; } });
|
|
136
|
+
Object.defineProperty(exports, "getDriftSeverity", { enumerable: true, get: function () { return drift_1.getDriftSeverity; } });
|
|
137
|
+
// LLM Costs
|
|
138
|
+
const llm_costs_1 = require("./api/llm-costs");
|
|
139
|
+
Object.defineProperty(exports, "llmCosts", { enumerable: true, get: function () { return llm_costs_1.llmCosts; } });
|
|
140
|
+
Object.defineProperty(exports, "formatLLMCost", { enumerable: true, get: function () { return llm_costs_1.formatCost; } });
|
|
141
|
+
// Guardrails
|
|
142
|
+
const guardrails_1 = require("./guardrails");
|
|
143
|
+
Object.defineProperty(exports, "guardrails", { enumerable: true, get: function () { return guardrails_1.guardrails; } });
|
|
113
144
|
// API Key Management (Phase 2 Security)
|
|
114
145
|
const apiKeys_1 = require("./api/apiKeys");
|
|
115
146
|
Object.defineProperty(exports, "apiKeys", { enumerable: true, get: function () { return apiKeys_1.apiKeys; } });
|
|
@@ -200,8 +231,9 @@ function init(options = {}) {
|
|
|
200
231
|
throw new Error('OTLP tracing requires an API key. Agent ID alone is not sufficient for OTLP ingestion. ' +
|
|
201
232
|
'Provide apiKey in init() or set the THINKHIVE_API_KEY environment variable.');
|
|
202
233
|
}
|
|
234
|
+
const otlpUrl = config.endpoint.replace(/\/+$/, '') + '/v1/traces';
|
|
203
235
|
const exporter = new exporter_trace_otlp_proto_1.OTLPTraceExporter({
|
|
204
|
-
url:
|
|
236
|
+
url: otlpUrl,
|
|
205
237
|
headers: exporterHeaders,
|
|
206
238
|
});
|
|
207
239
|
// Create OpenTelemetry resource
|
|
@@ -606,6 +638,17 @@ exports.default = {
|
|
|
606
638
|
roiAnalytics: roi_analytics_1.roiAnalytics,
|
|
607
639
|
qualityMetrics: quality_metrics_1.qualityMetrics,
|
|
608
640
|
businessMetrics: business_metrics_1.businessMetrics,
|
|
641
|
+
// Eval Runs, Signals, Notifications, Documents, Shadow Tests, Sessions, Drift, LLM Costs
|
|
642
|
+
evalRuns: eval_runs_1.evalRuns,
|
|
643
|
+
signals: signals_1.signals,
|
|
644
|
+
notifications: notifications_1.notifications,
|
|
645
|
+
documents: documents_1.documents,
|
|
646
|
+
shadowTests: shadow_tests_1.shadowTests,
|
|
647
|
+
sessions: sessions_1.sessions,
|
|
648
|
+
drift: drift_1.drift,
|
|
649
|
+
llmCosts: llm_costs_1.llmCosts,
|
|
650
|
+
// Guardrails
|
|
651
|
+
guardrails: guardrails_1.guardrails,
|
|
609
652
|
// Helpers
|
|
610
653
|
generateZendeskMarker: ticket_linking_1.generateZendeskMarker,
|
|
611
654
|
parseZendeskMarker: ticket_linking_1.parseZendeskMarker,
|
|
@@ -630,5 +673,10 @@ exports.default = {
|
|
|
630
673
|
isMetricReady: business_metrics_1.isMetricReady,
|
|
631
674
|
needsMoreTraces: business_metrics_1.needsMoreTraces,
|
|
632
675
|
getStatusMessage: business_metrics_1.getStatusMessage,
|
|
676
|
+
// Drift helpers
|
|
677
|
+
hasDrift: drift_1.hasDrift,
|
|
678
|
+
getDriftSeverity: drift_1.getDriftSeverity,
|
|
679
|
+
// LLM Costs helpers
|
|
680
|
+
formatLLMCost: llm_costs_1.formatCost,
|
|
633
681
|
};
|
|
634
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7OztHQVdHOzs7OztBQXVWSCxvQkF3REM7QUFLRCw4QkFLQztBQUtELDRCQVFDO0FBU0QsNEJBdUNDO0FBS0Qsd0NBdUNDO0FBS0QsOEJBcUNDO0FBS0QsZ0NBbUNDO0FBbGxCRCw0Q0FBb0U7QUFDcEUsd0ZBQTZFO0FBQzdFLHdEQUFvRDtBQUNwRCxrRUFBbUU7QUFDbkUsa0VBQW1FO0FBRW5FLE9BQU87QUFDUCwwQ0FRdUI7QUErMEJkLDhGQXAxQlAsc0JBQWEsT0FvMUJPO0FBQUUsNEZBajFCdEIsb0JBQVcsT0FpMUJzQjtBQUFFLGlHQWgxQm5DLHlCQUFnQixPQWcxQm1DO0FBOTBCckQsMENBU3VCO0FBdThCckIsK0ZBOThCQSx1QkFBYyxPQTg4QkE7QUFDZCxrR0E5OEJBLDBCQUFpQixPQTg4QkE7QUFDakIseUdBOThCQSxpQ0FBd0IsT0E4OEJBO0FBQ3hCLHNHQTk4QkEsOEJBQXFCLE9BODhCQTtBQUNyQixnR0E5OEJBLHdCQUFlLE9BODhCQTtBQUNmLCtGQTk4QkEsdUJBQWMsT0E4OEJBO0FBQ2QsaUdBOThCQSx5QkFBZ0IsT0E4OEJBO0FBMzhCbEIsY0FBYztBQUNkLHFDQUE4RjtBQXMwQjVGLHFGQXQwQk8sV0FBSSxPQXMwQlA7QUEyQkoscUdBajJCYSwyQkFBb0IsT0FpMkJiO0FBQ3BCLGlHQWwyQm1DLHVCQUFnQixPQWsyQm5DO0FBQ2hCLG1HQW4yQnFELHlCQUFrQixPQW0yQnJEO0FBbDJCcEIseUNBUXNCO0FBOHpCcEIsdUZBcjBCQSxlQUFNLE9BcTBCQTtBQThCTix1RkFsMkJBLGVBQU0sT0FrMkJBO0FBQ04sNEZBbDJCQSxvQkFBVyxPQWsyQkE7QUFDWCwyRkFsMkJBLG1CQUFVLE9BazJCQTtBQUNWLHdHQWwyQkEsZ0NBQXVCLE9BazJCQTtBQUN2QixrR0FsMkJBLDBCQUFpQixP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ZixnQkFBZ0IsRUFBaEIsbUNBQWdCO0NBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoaW5rSGl2ZSBTREsgdjMuMC4wXG4gKlxuICogUnVuLWNlbnRyaWMgQUkgYWdlbnQgb2JzZXJ2YWJpbGl0eSBwbGF0Zm9ybSB3aXRoOlxuICogLSBGYWN0cyB2cyBJbmZlcmVuY2VzIChjbGFpbXMgQVBJKVxuICogLSBEZXRlcm1pbmlzdGljIHRpY2tldCBsaW5raW5nICg3IG1ldGhvZHMpXG4gKiAtIEN1c3RvbWVyIGNvbnRleHQgc25hcHNob3RzICh0aW1lLXNlcmllcylcbiAqIC0gQ2FsaWJyYXRlZCBwcmVkaWN0aW9ucyAoQnJpZXIgc2NvcmVzKVxuICpcbiAqIEB2ZXJzaW9uIDMuMC4wXG4gKiBAbGljZW5zZSBNSVRcbiAqL1xuXG5pbXBvcnQgeyB0cmFjZSwgY29udGV4dCwgU3BhblN0YXR1c0NvZGUgfSBmcm9tICdAb3BlbnRlbGVtZXRyeS9hcGknO1xuaW1wb3J0IHsgT1RMUFRyYWNlRXhwb3J0ZXIgfSBmcm9tICdAb3BlbnRlbGVtZXRyeS9leHBvcnRlci10cmFjZS1vdGxwLXByb3RvJztcbmltcG9ydCB7IFJlc291cmNlIH0gZnJvbSAnQG9wZW50ZWxlbWV0cnkvcmVzb3VyY2VzJztcbmltcG9ydCB7IE5vZGVUcmFjZXJQcm92aWRlciB9IGZyb20gJ0BvcGVudGVsZW1ldHJ5L3Nkay10cmFjZS1ub2RlJztcbmltcG9ydCB7IEJhdGNoU3BhblByb2Nlc3NvciB9IGZyb20gJ0BvcGVudGVsZW1ldHJ5L3Nkay10cmFjZS1iYXNlJztcblxuLy8gQ29yZVxuaW1wb3J0IHtcbiAgaW5pdENvbmZpZyxcbiAgZ2V0Q29uZmlnLFxuICBpc0luaXRpYWxpemVkLFxuICByZXNldENvbmZpZyxcbiAgZGVidWdMb2csXG4gIFNES19WRVJTSU9OLFxuICBERUZBVUxUX0VORFBPSU5ULFxufSBmcm9tICcuL2NvcmUvY29uZmlnJztcbmltcG9ydCB7XG4gIGFwaVJlcXVlc3RXaXRoRGF0YSxcbiAgVGhpbmtIaXZlRXJyb3IsXG4gIFRoaW5rSGl2ZUFwaUVycm9yLFxuICBUaGlua0hpdmVWYWxpZGF0aW9uRXJyb3IsXG4gIFBlcm1pc3Npb25EZW5pZWRFcnJvcixcbiAgQWdlbnRTY29wZUVycm9yLFxuICBSYXRlTGltaXRFcnJvcixcbiAgSXBXaGl0ZWxpc3RFcnJvcixcbn0gZnJvbSAnLi9jb3JlL2NsaWVudCc7XG5cbi8vIEFQSSBjbGllbnRzXG5pbXBvcnQgeyBydW5zLCBjcmVhdGVSdW5XaXRoQ29udGV4dCwgdG9PcGVuQUlNZXNzYWdlcywgZnJvbU9wZW5BSU1lc3NhZ2VzIH0gZnJvbSAnLi9hcGkvcnVucyc7XG5pbXBvcnQge1xuICBjbGFpbXMsXG4gIGlzRmFjdCxcbiAgaXNJbmZlcmVuY2UsXG4gIGlzQ29tcHV0ZWQsXG4gIGdldEhpZ2hDb25maWRlbmNlQ2xhaW1zLFxuICBncm91cENsYWltc0J5VHlwZSxcbiAgZ3JvdXBDbGFpbXNCeUNhdGVnb3J5LFxufSBmcm9tICcuL2FwaS9jbGFpbXMnO1xuaW1wb3J0IHtcbiAgY2FsaWJyYXRpb24sXG4gIGNhbGN1bGF0ZUJyaWVyU2NvcmUsXG4gIGNhbGN1bGF0ZUVDRSxcbiAgaXNXZWxsQ2FsaWJyYXRlZCxcbiAgZ2V0Q2FsaWJyYXRpb25RdWFsaXR5LFxufSBmcm9tICcuL2FwaS9jYWxpYnJhdGlvbic7XG5cbi8vIE5ldyBFdmFsdWF0aW9uIEFQSXNcbmltcG9ydCB7IGh1bWFuUmV2aWV3IH0gZnJvbSAnLi9hcGkvaHVtYW4tcmV2aWV3JztcbmltcG9ydCB7XG4gIG5vbmRldGVybWluaXNtLFxuICBjYWxjdWxhdGVQYXNzQXRLLFxuICBjYWxjdWxhdGVQYXNzVG9LLFxuICByZXF1aXJlZFBhc3NSYXRlRm9yUGFzc0F0SyxcbiAgaXNSZWxpYWJsZUV2YWx1YXRpb24sXG4gIGdldFJlbGlhYmlsaXR5UmVjb21tZW5kYXRpb24sXG59IGZyb20gJy4vYXBpL25vbmRldGVybWluaXNtJztcbmltcG9ydCB7XG4gIGV2YWxIZWFsdGgsXG4gIGhhc0hlYWx0aElzc3VlLFxuICBnZXRTZXZlcml0eUxldmVsIGFzIGdldEhlYWx0aFNldmVyaXR5TGV2ZWwsXG4gIGlzU2F0dXJhdGVkLFxuICBnZXRTYXR1cmF0aW9uUmVjb21tZW5kYXRpb24sXG59IGZyb20gJy4vYXBpL2V2YWwtaGVhbHRoJztcbmltcG9ydCB7XG4gIGRldGVybWluaXN0aWNHcmFkZXJzLFxuICBjcmVhdGVSZWdleFJ1bGUsXG4gIGNyZWF0ZUNvbnRhaW5zUnVsZSxcbiAgY3JlYXRlTGVuZ3RoUnVsZSxcbiAgY3JlYXRlSnNvblNjaGVtYVJ1bGUsXG4gIGFsbFJ1bGVzUGFzc2VkLFxuICBnZXRGYWlsZWRSdWxlcyxcbiAgY2FsY3VsYXRlQXZlcmFnZVNjb3JlLFxufSBmcm9tICcuL2FwaS9kZXRlcm1pbmlzdGljLWdyYWRlcnMnO1xuaW1wb3J0IHtcbiAgY29udmVyc2F0aW9uRXZhbCxcbiAgYWdncmVnYXRlV29yc3QsXG4gIGFnZ3JlZ2F0ZUF2ZXJhZ2UsXG4gIGFnZ3JlZ2F0ZVdlaWdodGVkLFxuICBhZ2dyZWdhdGVGaW5hbFR1cm4sXG4gIGFnZ3JlZ2F0ZU1ham9yaXR5LFxuICBnZXRBZ2dyZWdhdG9yLFxuICBnZXRQcm9ibGVtYXRpY1R1cm5zLFxuICBhbmFseXplQ29udmVyc2F0aW9uVHJlbmQsXG59IGZyb20gJy4vYXBpL2NvbnZlcnNhdGlvbi1ldmFsJztcbmltcG9ydCB7XG4gIHRyYW5zY3JpcHRQYXR0ZXJucyxcbiAgaXNIaWdoUmlzayxcbiAgZ2V0TWF0Y2hlc0J5Q2F0ZWdvcnksXG4gIGdldENyaXRpY2FsSW5zaWdodHMsXG4gIGhhc1BpaUV4cG9zdXJlLFxuICBoYXNGcnVzdHJhdGlvblNpZ25hbHMsXG4gIGhhc0VzY2FsYXRpb25SZXF1ZXN0LFxuICBnZXRDYXRlZ29yeURpc3RyaWJ1dGlvbixcbiAgZ2V0UmVjb21tZW5kYXRpb25zLFxuICBuZWVkc0F0dGVudGlvbixcbiAgc29ydE1hdGNoZXNCeVNldmVyaXR5LFxufSBmcm9tICcuL2FwaS90cmFuc2NyaXB0LXBhdHRlcm5zJztcblxuLy8gQWdlbnRzIE1hbmFnZW1lbnRcbmltcG9ydCB7XG4gIGFnZW50cyxcbn0gZnJvbSAnLi9hcGkvYWdlbnRzJztcblxuLy8gQVBJIEtleSBNYW5hZ2VtZW50IChQaGFzZSAyIFNlY3VyaXR5KVxuaW1wb3J0IHtcbiAgYXBpS2V5cyxcbiAgaGFzUGVybWlzc2lvbixcbiAgaXNFeHBpcmVkIGFzIGlzQXBpS2V5RXhwaXJlZCxcbiAgaXNWYWxpZCBhcyBpc0FwaUtleVZhbGlkLFxuICBnZXRUaW1lVW50aWxFeHBpcnksXG4gIGNhbkFjY2Vzc0FnZW50LFxufSBmcm9tICcuL2FwaS9hcGlLZXlzJztcblxuLy8gUk9JIEFuYWx5dGljcyBBUElcbmltcG9ydCB7XG4gIHJvaUFuYWx5dGljcyxcbiAgY2FsY3VsYXRlUmV2ZW51ZUF0UmlzayxcbiAgY2FsY3VsYXRlQXV0b21hdGlvblNhdmluZ3MsXG4gIGZvcm1hdEN1cnJlbmN5LFxuICBnZXRST0lRdWFsaXR5LFxufSBmcm9tICcuL2FwaS9yb2ktYW5hbHl0aWNzJztcblxuLy8gQnVzaW5lc3MgTWV0cmljcyBBUElcbmltcG9ydCB7XG4gIGJ1c2luZXNzTWV0cmljcyxcbiAgaXNNZXRyaWNSZWFkeSxcbiAgbmVlZHNNb3JlVHJhY2VzLFxuICBhd2FpdGluZ0V4dGVybmFsRGF0YSxcbiAgaXNNZXRyaWNTdGFsZSxcbiAgZ2V0U3RhdHVzTWVzc2FnZSxcbiAgZ2V0VHJhY2VQcm9ncmVzcyxcbiAgZm9ybWF0TWV0cmljVmFsdWUsXG4gIGdldFRyZW5kRW1vamksXG59IGZyb20gJy4vYXBpL2J1c2luZXNzLW1ldHJpY3MnO1xuXG4vLyBRdWFsaXR5IE1ldHJpY3MgQVBJXG5pbXBvcnQge1xuICBxdWFsaXR5TWV0cmljcyxcbiAgcGFzc2VzUXVhbGl0eVRocmVzaG9sZCxcbiAgaXNIYWxsdWNpbmF0aW9uUmlza0FjY2VwdGFibGUsXG4gIGdldFF1YWxpdHlSZWNvbW1lbmRhdGlvbnMsXG4gIGZvcm1hdFF1YWxpdHlTY29yZSxcbiAgZ2V0R3JhZGVDb2xvcixcbn0gZnJvbSAnLi9hcGkvcXVhbGl0eS1tZXRyaWNzJztcblxuLy8gSW50ZWdyYXRpb25zXG5pbXBvcnQge1xuICBsaW5raW5nLFxuICBnZW5lcmF0ZVplbmRlc2tNYXJrZXIsXG4gIHBhcnNlWmVuZGVza01hcmtlcixcbiAgaGFzWmVuZGVza01hcmtlcixcbiAgcmVtb3ZlWmVuZGVza01hcmtlcixcbiAgbGlua1J1blRvVGlja2V0LFxuICBsaW5rUnVuVG9aZW5kZXNrVGlja2V0LFxuICBnZXRCZXN0TGlua01ldGhvZCxcbiAgTElOS19NRVRIT0RfQ09ORklERU5DRSxcbn0gZnJvbSAnLi9pbnRlZ3JhdGlvbnMvdGlja2V0LWxpbmtpbmcnO1xuaW1wb3J0IHtcbiAgY3VzdG9tZXJDb250ZXh0LFxuICBjYXB0dXJlQ3VzdG9tZXJDb250ZXh0LFxuICBnZXRDb250ZXh0QXNPZixcbiAgdG9Db250ZXh0U25hcHNob3QsXG4gIGNhbGN1bGF0ZUFyckNoYW5nZSxcbiAgY2FsY3VsYXRlSGVhbHRoVHJlbmQsXG59IGZyb20gJy4vaW50ZWdyYXRpb25zL2N1c3RvbWVyLWNvbnRleHQnO1xuXG4vLyBSZS1leHBvcnQgdHlwZXNcbmV4cG9ydCB0eXBlIHtcbiAgSW5pdE9wdGlvbnMsXG4gIEZyYW1ld29yayxcbiAgUnVuT3B0aW9ucyxcbiAgUnVuT3V0Y29tZSxcbiAgQ29udmVyc2F0aW9uTWVzc2FnZSxcbiAgQ3VzdG9tZXJDb250ZXh0U25hcHNob3QsXG4gIFRpY2tldExpbmtpbmdPcHRpb25zLFxuICBMaW5rTWV0aG9kLFxuICBUcmFjZU9wdGlvbnMsXG4gIFRyYWNlQ3VzdG9tRmxhZyxcbiAgU3BhbkRhdGEsXG4gIEJ1c2luZXNzQ29udGV4dCxcbiAgQ2xhaW0sXG4gIENsYWltVHlwZSxcbiAgQ2xhaW1DYXRlZ29yeSxcbiAgQ29uZmlkZW5jZUNhbGlicmF0aW9uLFxuICBFdmlkZW5jZVJlZmVyZW5jZSxcbiAgQW5hbHlzaXNSZXN1bHQsXG4gIENhbGlicmF0aW9uU3RhdHVzLFxuICBDYWxpYnJhdGlvbkJ1Y2tldCxcbiAgUHJlZGljdGlvblR5cGUsXG4gIFJvaUNvbmZpZyxcbiAgUm9pU3VtbWFyeSxcbiAgRXhwbGFpbmFiaWxpdHlSZXN1bHQsXG4gIEFwaVJlc3BvbnNlLFxuICBQYWdpbmF0ZWRSZXNwb25zZSxcbiAgUnVuUmVzcG9uc2UsXG59IGZyb20gJy4vY29yZS90eXBlcyc7XG5cbi8vIFJlLWV4cG9ydCBldmFsdWF0aW9uIHR5cGVzXG5leHBvcnQgdHlwZSB7XG4gIEh1bWFuUmV2aWV3U3RhdHVzLFxuICBIdW1hblJldmlld1R5cGUsXG4gIEh1bWFuUmV2aWV3UXVldWVJdGVtLFxuICBDYWxpYnJhdGlvblNldCxcbiAgUmV2aWV3ZXJDYWxpYnJhdGlvbixcbiAgUXVldWVTdGF0cyxcbn0gZnJvbSAnLi9hcGkvaHVtYW4tcmV2aWV3JztcblxuZXhwb3J0IHR5cGUge1xuICBOb25kZXRlcm1pbmlzbVJ1blR5cGUsXG4gIE5vbmRldGVybWluaXNtUnVuU3RhdHVzLFxuICBOb25kZXRlcm1pbmlzbVJ1bixcbiAgTm9uZGV0ZXJtaW5pc21TYW1wbGUsXG4gIFRyYWNlQW5hbHlzaXMsXG4gIENyaXRlcmlvbkFuYWx5c2lzLFxuICBSdW5TdW1tYXJ5LFxufSBmcm9tICcuL2FwaS9ub25kZXRlcm1pbmlzbSc7XG5cbmV4cG9ydCB0eXBlIHtcbiAgU2F0dXJhdGlvblR5cGUsXG4gIEhlYWx0aFN0YXR1cyxcbiAgUmVncmVzc2lvblNldmVyaXR5LFxuICBFdmFsSGVhbHRoU25hcHNob3QsXG4gIEV2YWxSZWdyZXNzaW9uLFxuICBIZWFsdGhSZXBvcnQsXG59IGZyb20gJy4vYXBpL2V2YWwtaGVhbHRoJztcblxuZXhwb3J0IHR5cGUge1xuICBSdWxlVHlwZSxcbiAgRGV0ZXJtaW5pc3RpY0V2YWxSZXN1bHQsXG4gIFJ1bGVSZXN1bHQsXG4gIFJ1bGVUeXBlSW5mbyxcbiAgUnVsZVRlbXBsYXRlLFxufSBmcm9tICcuL2FwaS9kZXRlcm1pbmlzdGljLWdyYWRlcnMnO1xuXG5leHBvcnQgdHlwZSB7XG4gIEFnZ3JlZ2F0ZU1ldGhvZCxcbiAgU2Vzc2lvblRyYWNlLFxuICBUdXJuRXZhbHVhdGlvbixcbiAgQ29udmVyc2F0aW9uRXZhbFJlc3VsdCxcbiAgQWdncmVnYXRpb25NZXRob2RJbmZvLFxufSBmcm9tICcuL2FwaS9jb252ZXJzYXRpb24tZXZhbCc7XG5cbmV4cG9ydCB0eXBlIHtcbiAgUGF0dGVybkNhdGVnb3J5LFxuICBQYXR0ZXJuT3V0Y29tZSxcbiAgUGF0dGVyblNldmVyaXR5LFxuICBQYXR0ZXJuTWF0Y2gsXG4gIFBhdHRlcm5JbnNpZ2h0LFxuICBBbmFseXNpc1Jlc3VsdCBhcyBQYXR0ZXJuQW5hbHlzaXNSZXN1bHQsXG4gIFBhdHRlcm5DYXRlZ29yeUluZm8sXG4gIEJ1aWx0SW5QYXR0ZXJuLFxufSBmcm9tICcuL2FwaS90cmFuc2NyaXB0LXBhdHRlcm5zJztcblxuLy8gUmUtZXhwb3J0IEFQSSBLZXkgdHlwZXMgKFBoYXNlIDIgU2VjdXJpdHkpXG5leHBvcnQgdHlwZSB7XG4gIEFwaUtleVBlcm1pc3Npb25zLFxuICBTY29wZVR5cGUsXG4gIEVudmlyb25tZW50LFxuICBDcmVhdGVBcGlLZXlPcHRpb25zLFxuICBBcGlLZXksXG4gIENyZWF0ZUFwaUtleVJlc3VsdCxcbn0gZnJvbSAnLi9hcGkvYXBpS2V5cyc7XG5cbi8vIFJlLWV4cG9ydCBST0kgQW5hbHl0aWNzIHR5cGVzXG5leHBvcnQgdHlwZSB7XG4gIEluZHVzdHJ5Q29uZmlnLFxuICBDdXN0b21JbmR1c3RyeUNvbmZpZyxcbiAgUk9JTWV0cmljcyxcbiAgQnVzaW5lc3NJbXBhY3QsXG4gIFJPSVN1bW1hcnksXG4gIFRyZW5kRGF0YVBvaW50LFxuICBDb3JyZWxhdGlvbixcbiAgUGF0dGVybkNsdXN0ZXIsXG4gIENvcnJlbGF0aW9uQW5hbHlzaXMsXG59IGZyb20gJy4vYXBpL3JvaS1hbmFseXRpY3MnO1xuXG4vLyBSZS1leHBvcnQgUXVhbGl0eSBNZXRyaWNzIHR5cGVzXG5leHBvcnQgdHlwZSB7XG4gIFJldHJpZXZlZENvbnRleHQsXG4gIEdyb3VuZFRydXRoQ29udGV4dCxcbiAgR3JvdW5kZWRTcGFuLFxuICBVbmdyb3VuZGVkU3BhbixcbiAgQ2l0YXRpb25NYXAsXG4gIFJBR0V2YWx1YXRpb24sXG4gIFJBR0V2aWRlbmNlLFxuICBIYWxsdWNpbmF0aW9uSW5zdGFuY2UsXG4gIEhhbGx1Y2luYXRpb25SZXBvcnQsXG4gIEdyb3VuZGVkbmVzc1Jlc3VsdCxcbiAgQmF0Y2hFdmFsdWF0aW9uUmVzdWx0LFxuICBCYXRjaEV2YWx1YXRpb25TdW1tYXJ5LFxufSBmcm9tICcuL2FwaS9xdWFsaXR5LW1ldHJpY3MnO1xuXG4vLyBSZS1leHBvcnQgQnVzaW5lc3MgTWV0cmljcyB0eXBlc1xuZXhwb3J0IHR5cGUge1xuICBNZXRyaWNUcmVuZCxcbiAgTWV0cmljU3RhdHVzLFxuICBDdXJyZW50TWV0cmljUmVzcG9uc2UsXG4gIE1ldHJpY0hpc3RvcnlQb2ludCxcbiAgTWV0cmljSGlzdG9yeVN1bW1hcnksXG4gIE1ldHJpY0hpc3RvcnlSZXNwb25zZSxcbiAgUmVjb3JkTWV0cmljT3B0aW9ucyxcbiAgUmVjb3JkTWV0cmljUmVzcG9uc2UsXG59IGZyb20gJy4vYXBpL2J1c2luZXNzLW1ldHJpY3MnO1xuXG4vLyBSZS1leHBvcnQgQWdlbnQgdHlwZXNcbmV4cG9ydCB0eXBlIHtcbiAgQWdlbnQsXG4gIENyZWF0ZUFnZW50T3B0aW9ucyxcbiAgVXBkYXRlQWdlbnRPcHRpb25zLFxuICBBZ2VudENvbmZpZyxcbiAgVXBkYXRlQWdlbnRDb25maWdPcHRpb25zLFxuICBEZWxldGVBZ2VudE9wdGlvbnMsXG4gIENhc2NhZGVJbXBhY3QsXG59IGZyb20gJy4vYXBpL2FnZW50cyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEdMT0JBTCBTVEFURVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5sZXQgdHJhY2VyOiBSZXR1cm5UeXBlPHR5cGVvZiB0cmFjZS5nZXRUcmFjZXI+IHwgbnVsbCA9IG51bGw7XG5sZXQgcHJvdmlkZXI6IE5vZGVUcmFjZXJQcm92aWRlciB8IG51bGwgPSBudWxsO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBJTklUSUFMSVpBVElPTlxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIEluaXRpYWxpemUgVGhpbmtIaXZlIFNESyB2M1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBpbml0IH0gZnJvbSAnQHRoaW5raGl2ZS9zZGsnO1xuICpcbiAqIGluaXQoe1xuICogICBhcGlLZXk6ICd0aF95b3VyX2FwaV9rZXknLFxuICogICBzZXJ2aWNlTmFtZTogJ215LWFpLWFnZW50JyxcbiAqICAgYXV0b0luc3RydW1lbnQ6IHRydWUsXG4gKiAgIGZyYW1ld29ya3M6IFsnbGFuZ2NoYWluJywgJ29wZW5haSddLFxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluaXQob3B0aW9uczogaW1wb3J0KCcuL2NvcmUvdHlwZXMnKS5Jbml0T3B0aW9ucyA9IHt9KTogdm9pZCB7XG4gIGlmIChpc0luaXRpYWxpemVkKCkpIHtcbiAgICBkZWJ1Z0xvZygnVGhpbmtIaXZlIFNESyBhbHJlYWR5IGluaXRpYWxpemVkJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgY29uZmlnID0gaW5pdENvbmZpZyhvcHRpb25zKTtcblxuICAvLyBDb25maWd1cmUgT1RMUCBleHBvcnRlclxuICBjb25zdCBleHBvcnRlckhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgaWYgKGNvbmZpZy5hcGlLZXkpIHtcbiAgICBleHBvcnRlckhlYWRlcnNbJ0F1dGhvcml6YXRpb24nXSA9IGBCZWFyZXIgJHtjb25maWcuYXBpS2V5fWA7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ09UTFAgdHJhY2luZyByZXF1aXJlcyBhbiBBUEkga2V5LiBBZ2VudCBJRCBhbG9uZSBpcyBub3Qgc3VmZmljaWVudCBmb3IgT1RMUCBpbmdlc3Rpb24uICcgK1xuICAgICAgJ1Byb3ZpZGUgYXBpS2V5IGluIGluaXQoKSBvciBzZXQgdGhlIFRISU5LSElWRV9BUElfS0VZIGVudmlyb25tZW50IHZhcmlhYmxlLidcbiAgICApO1xuICB9XG5cbiAgY29uc3QgZXhwb3J0ZXIgPSBuZXcgT1RMUFRyYWNlRXhwb3J0ZXIoe1xuICAgIHVybDogY29uZmlnLmVuZHBvaW50LFxuICAgIGhlYWRlcnM6IGV4cG9ydGVySGVhZGVycyxcbiAgfSk7XG5cbiAgLy8gQ3JlYXRlIE9wZW5UZWxlbWV0cnkgcmVzb3VyY2VcbiAgY29uc3QgcmVzb3VyY2UgPSBSZXNvdXJjZS5kZWZhdWx0KCkubWVyZ2UoXG4gICAgbmV3IFJlc291cmNlKHtcbiAgICAgICdzZXJ2aWNlLm5hbWUnOiBjb25maWcuc2VydmljZU5hbWUsXG4gICAgICAndGhpbmtoaXZlLnNkay52ZXJzaW9uJzogU0RLX1ZFUlNJT04sXG4gICAgICAndGhpbmtoaXZlLnNkay5sYW5ndWFnZSc6ICd0eXBlc2NyaXB0JyxcbiAgICB9KVxuICApO1xuXG4gIC8vIENyZWF0ZSBwcm92aWRlciB3aXRoIHNwYW4gcHJvY2Vzc29yXG4gIHByb3ZpZGVyID0gbmV3IE5vZGVUcmFjZXJQcm92aWRlcih7XG4gICAgcmVzb3VyY2UsXG4gICAgc3BhblByb2Nlc3NvcnM6IFtuZXcgQmF0Y2hTcGFuUHJvY2Vzc29yKGV4cG9ydGVyKV0sXG4gIH0pO1xuXG4gIC8vIFJlZ2lzdGVyIHByb3ZpZGVyXG4gIHByb3ZpZGVyLnJlZ2lzdGVyKCk7XG5cbiAgLy8gR2V0IHRyYWNlclxuICB0cmFjZXIgPSB0cmFjZS5nZXRUcmFjZXIoJ3RoaW5raGl2ZScsIFNES19WRVJTSU9OKTtcblxuICBpZiAoY29uZmlnLmRlYnVnKSB7XG4gICAgY29uc29sZS5sb2coYOKchSBUaGlua0hpdmUgU0RLIHYke1NES19WRVJTSU9OfSBpbml0aWFsaXplZGApO1xuICAgIGNvbnNvbGUubG9nKGAgICBFbmRwb2ludDogJHtjb25maWcuZW5kcG9pbnR9YCk7XG4gICAgY29uc29sZS5sb2coYCAgIFNlcnZpY2U6ICR7Y29uZmlnLnNlcnZpY2VOYW1lfWApO1xuICAgIGNvbnNvbGUubG9nKGAgICBBdXRvLWluc3RydW1lbnQ6ICR7Y29uZmlnLmF1dG9JbnN0cnVtZW50fWApO1xuICB9XG5cbiAgLy8gU2V0dXAgYXV0by1pbnN0cnVtZW50YXRpb24gaWYgZW5hYmxlZFxuICBpZiAoY29uZmlnLmF1dG9JbnN0cnVtZW50KSB7XG4gICAgc2V0dXBBdXRvSW5zdHJ1bWVudGF0aW9uKGNvbmZpZy5mcmFtZXdvcmtzKTtcbiAgfVxufVxuXG4vKipcbiAqIEdldCB0aGUgZ2xvYmFsIHRyYWNlclxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VHJhY2VyKCkge1xuICBpZiAoIXRyYWNlcikge1xuICAgIHRocm93IG5ldyBFcnJvcignVGhpbmtIaXZlIFNESyBub3QgaW5pdGlhbGl6ZWQuIENhbGwgaW5pdCgpIGZpcnN0LicpO1xuICB9XG4gIHJldHVybiB0cmFjZXI7XG59XG5cbi8qKlxuICogU2h1dGRvd24gdGhlIFNESyBhbmQgZmx1c2ggcGVuZGluZyBzcGFuc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2h1dGRvd24oKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChwcm92aWRlcikge1xuICAgIGF3YWl0IHByb3ZpZGVyLnNodXRkb3duKCk7XG4gICAgcHJvdmlkZXIgPSBudWxsO1xuICB9XG4gIHRyYWNlciA9IG51bGw7XG4gIHJlc2V0Q29uZmlnKCk7XG4gIGRlYnVnTG9nKCdUaGlua0hpdmUgU0RLIHNodXRkb3duIGNvbXBsZXRlJyk7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFRSQUNJTkcgRlVOQ1RJT05TXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogVHJhY2UgYW4gTExNIGNhbGxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyYWNlTExNPFQ+KFxuICBvcHRpb25zOiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIG1vZGVsTmFtZT86IHN0cmluZztcbiAgICBwcm92aWRlcj86IHN0cmluZztcbiAgICBpbnB1dD86IHVua25vd247XG4gIH0sXG4gIGZuOiAoKSA9PiBQcm9taXNlPFQ+XG4pOiBQcm9taXNlPFQ+IHtcbiAgY29uc3QgdCA9IGdldFRyYWNlcigpO1xuXG4gIHJldHVybiB0LnN0YXJ0QWN0aXZlU3BhbihcbiAgICBvcHRpb25zLm5hbWUsXG4gICAge1xuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAnb3BlbmluZmVyZW5jZS5zcGFuLmtpbmQnOiAnTExNJyxcbiAgICAgICAgJ2xsbS5tb2RlbF9uYW1lJzogb3B0aW9ucy5tb2RlbE5hbWUsXG4gICAgICAgICdsbG0ucHJvdmlkZXInOiBvcHRpb25zLnByb3ZpZGVyLFxuICAgICAgICAnaW5wdXQudmFsdWUnOiBvcHRpb25zLmlucHV0ID8gSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5pbnB1dCkuc3Vic3RyaW5nKDAsIDEwMDAwKSA6IHVuZGVmaW5lZCxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBhc3luYyAoc3BhbikgPT4ge1xuICAgICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZuKCk7XG4gICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKCdvdXRwdXQudmFsdWUnLCBKU09OLnN0cmluZ2lmeShyZXN1bHQpLnN1YnN0cmluZygwLCAxMDAwMCkpO1xuICAgICAgICBzcGFuLnNldFN0YXR1cyh7IGNvZGU6IFNwYW5TdGF0dXNDb2RlLk9LIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTtcbiAgICAgICAgc3Bhbi5zZXRTdGF0dXMoeyBjb2RlOiBTcGFuU3RhdHVzQ29kZS5FUlJPUiwgbWVzc2FnZSB9KTtcbiAgICAgICAgc3Bhbi5yZWNvcmRFeGNlcHRpb24oZXJyb3IgYXMgRXJyb3IpO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKCdkdXJhdGlvbl9tcycsIERhdGUubm93KCkgLSBzdGFydFRpbWUpO1xuICAgICAgICBzcGFuLmVuZCgpO1xuICAgICAgfVxuICAgIH1cbiAgKTtcbn1cblxuLyoqXG4gKiBUcmFjZSBhIHJldHJpZXZhbCBvcGVyYXRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyYWNlUmV0cmlldmFsPFQ+KFxuICBvcHRpb25zOiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHF1ZXJ5Pzogc3RyaW5nO1xuICAgIHRvcEs/OiBudW1iZXI7XG4gIH0sXG4gIGZuOiAoKSA9PiBQcm9taXNlPFQ+XG4pOiBQcm9taXNlPFQ+IHtcbiAgY29uc3QgdCA9IGdldFRyYWNlcigpO1xuXG4gIHJldHVybiB0LnN0YXJ0QWN0aXZlU3BhbihcbiAgICBvcHRpb25zLm5hbWUsXG4gICAge1xuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAnb3BlbmluZmVyZW5jZS5zcGFuLmtpbmQnOiAnUkVUUklFVkVSJyxcbiAgICAgICAgJ3JldHJpZXZhbC5xdWVyeSc6IG9wdGlvbnMucXVlcnksXG4gICAgICAgICdyZXRyaWV2YWwudG9wX2snOiBvcHRpb25zLnRvcEssXG4gICAgICB9LFxuICAgIH0sXG4gICAgYXN5bmMgKHNwYW4pID0+IHtcbiAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBmbigpO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHQpKSB7XG4gICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoJ3JldHJpZXZhbC5kb2N1bWVudF9jb3VudCcsIHJlc3VsdC5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHNwYW4uc2V0U3RhdHVzKHsgY29kZTogU3BhblN0YXR1c0NvZGUuT0sgfSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpO1xuICAgICAgICBzcGFuLnNldFN0YXR1cyh7IGNvZGU6IFNwYW5TdGF0dXNDb2RlLkVSUk9SLCBtZXNzYWdlIH0pO1xuICAgICAgICBzcGFuLnJlY29yZEV4Y2VwdGlvbihlcnJvciBhcyBFcnJvcik7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoJ2R1cmF0aW9uX21zJywgRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSk7XG4gICAgICAgIHNwYW4uZW5kKCk7XG4gICAgICB9XG4gICAgfVxuICApO1xufVxuXG4vKipcbiAqIFRyYWNlIGEgdG9vbCBjYWxsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmFjZVRvb2w8VD4oXG4gIG9wdGlvbnM6IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdG9vbE5hbWU/OiBzdHJpbmc7XG4gICAgcGFyYW1ldGVycz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICB9LFxuICBmbjogKCkgPT4gUHJvbWlzZTxUPlxuKTogUHJvbWlzZTxUPiB7XG4gIGNvbnN0IHQgPSBnZXRUcmFjZXIoKTtcblxuICByZXR1cm4gdC5zdGFydEFjdGl2ZVNwYW4oXG4gICAgb3B0aW9ucy50b29sTmFtZSB8fCBvcHRpb25zLm5hbWUsXG4gICAge1xuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAnb3BlbmluZmVyZW5jZS5zcGFuLmtpbmQnOiAnVE9PTCcsXG4gICAgICAgICd0b29sLm5hbWUnOiBvcHRpb25zLnRvb2xOYW1lIHx8IG9wdGlvbnMubmFtZSxcbiAgICAgICAgJ3Rvb2wucGFyYW1ldGVycyc6IG9wdGlvbnMucGFyYW1ldGVycyA/IEpTT04uc3RyaW5naWZ5KG9wdGlvbnMucGFyYW1ldGVycykgOiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgIH0sXG4gICAgYXN5bmMgKHNwYW4pID0+IHtcbiAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBmbigpO1xuICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZSgndG9vbC5vdXRwdXQnLCBKU09OLnN0cmluZ2lmeShyZXN1bHQpLnN1YnN0cmluZygwLCAxMDAwMCkpO1xuICAgICAgICBzcGFuLnNldFN0YXR1cyh7IGNvZGU6IFNwYW5TdGF0dXNDb2RlLk9LIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTtcbiAgICAgICAgc3Bhbi5zZXRTdGF0dXMoeyBjb2RlOiBTcGFuU3RhdHVzQ29kZS5FUlJPUiwgbWVzc2FnZSB9KTtcbiAgICAgICAgc3Bhbi5yZWNvcmRFeGNlcHRpb24oZXJyb3IgYXMgRXJyb3IpO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKCdkdXJhdGlvbl9tcycsIERhdGUubm93KCkgLSBzdGFydFRpbWUpO1xuICAgICAgICBzcGFuLmVuZCgpO1xuICAgICAgfVxuICAgIH1cbiAgKTtcbn1cblxuLyoqXG4gKiBUcmFjZSBhIGNoYWluL3dvcmtmbG93XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmFjZUNoYWluPFQ+KFxuICBvcHRpb25zOiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGlucHV0PzogdW5rbm93bjtcbiAgfSxcbiAgZm46ICgpID0+IFByb21pc2U8VD5cbik6IFByb21pc2U8VD4ge1xuICBjb25zdCB0ID0gZ2V0VHJhY2VyKCk7XG5cbiAgcmV0dXJuIHQuc3RhcnRBY3RpdmVTcGFuKFxuICAgIG9wdGlvbnMubmFtZSxcbiAgICB7XG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICdvcGVuaW5mZXJlbmNlLnNwYW4ua2luZCc6ICdDSEFJTicsXG4gICAgICAgICdpbnB1dC52YWx1ZSc6IG9wdGlvbnMuaW5wdXQgPyBKU09OLnN0cmluZ2lmeShvcHRpb25zLmlucHV0KS5zdWJzdHJpbmcoMCwgMTAwMDApIDogdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGFzeW5jIChzcGFuKSA9PiB7XG4gICAgICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZm4oKTtcbiAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoJ291dHB1dC52YWx1ZScsIEpTT04uc3RyaW5naWZ5KHJlc3VsdCkuc3Vic3RyaW5nKDAsIDEwMDAwKSk7XG4gICAgICAgIHNwYW4uc2V0U3RhdHVzKHsgY29kZTogU3BhblN0YXR1c0NvZGUuT0sgfSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpO1xuICAgICAgICBzcGFuLnNldFN0YXR1cyh7IGNvZGU6IFNwYW5TdGF0dXNDb2RlLkVSUk9SLCBtZXNzYWdlIH0pO1xuICAgICAgICBzcGFuLnJlY29yZEV4Y2VwdGlvbihlcnJvciBhcyBFcnJvcik7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoJ2R1cmF0aW9uX21zJywgRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSk7XG4gICAgICAgIHNwYW4uZW5kKCk7XG4gICAgICB9XG4gICAgfVxuICApO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBWMiBURVJNSU5PTE9HWSAtIElTU1VFUyBBUEkgKHJlcGxhY2VzIENhc2VzKVxuLy8gUGVyIElUSUwgYmVzdCBwcmFjdGljZXMsIFwiSXNzdWVzXCIgaXMgbW9yZSBjdXN0b21lci1mcmllbmRseSB0aGFuIFwiQ2FzZXNcIlxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIElzc3VlcyBBUEkgY2xpZW50XG4gKiBUaGlzIGlzIHRoZSByZWNvbW1lbmRlZCBBUEkgZm9yIG1hbmFnaW5nIGNsdXN0ZXJlZCBmYWlsdXJlIHBhdHRlcm5zXG4gKlxuICogQHNpbmNlIDMuMS4wXG4gKi9cbmV4cG9ydCBjb25zdCBpc3N1ZXMgPSB7XG4gIC8qKlxuICAgKiBMaXN0IGlzc3VlcyBmb3IgYW4gYWdlbnRcbiAgICovXG4gIGFzeW5jIGxpc3QoYWdlbnRJZDogc3RyaW5nLCBvcHRpb25zPzoge1xuICAgIHN0YXR1cz86IHN0cmluZztcbiAgICBzdGFydERhdGU/OiBEYXRlO1xuICAgIGVuZERhdGU/OiBEYXRlO1xuICAgIGxpbWl0PzogbnVtYmVyO1xuICAgIG9mZnNldD86IG51bWJlcjtcbiAgfSk6IFByb21pc2U8YW55W10+IHtcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHsgYWdlbnRJZCB9KTtcbiAgICBpZiAob3B0aW9ucz8uc3RhdHVzKSBwYXJhbXMuc2V0KCdzdGF0dXMnLCBvcHRpb25zLnN0YXR1cyk7XG4gICAgaWYgKG9wdGlvbnM/LnN0YXJ0RGF0ZSkgcGFyYW1zLnNldCgnc3RhcnREYXRlJywgb3B0aW9ucy5zdGFydERhdGUudG9JU09TdHJpbmcoKSk7XG4gICAgaWYgKG9wdGlvbnM/LmVuZERhdGUpIHBhcmFtcy5zZXQoJ2VuZERhdGUnLCBvcHRpb25zLmVuZERhdGUudG9JU09TdHJpbmcoKSk7XG4gICAgaWYgKG9wdGlvbnM/LmxpbWl0KSBwYXJhbXMuc2V0KCdsaW1pdCcsIG9wdGlvbnMubGltaXQudG9TdHJpbmcoKSk7XG4gICAgaWYgKG9wdGlvbnM/Lm9mZnNldCkgcGFyYW1zLnNldCgnb2Zmc2V0Jywgb3B0aW9ucy5vZmZzZXQudG9TdHJpbmcoKSk7XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGFwaVJlcXVlc3RXaXRoRGF0YShgL2lzc3Vlcz8ke3BhcmFtc31gLCB7IGFwaVZlcnNpb246ICd2MicgfSk7XG4gICAgcmV0dXJuIChyZXNwb25zZSBhcyBhbnkpLmRhdGEgfHwgcmVzcG9uc2U7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEdldCBhIHNpbmdsZSBpc3N1ZSBieSBJRFxuICAgKi9cbiAgYXN5bmMgZ2V0KGlkOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXBpUmVxdWVzdFdpdGhEYXRhKGAvaXNzdWVzLyR7aWR9YCwgeyBhcGlWZXJzaW9uOiAndjInIH0pO1xuICAgIHJldHVybiAocmVzcG9uc2UgYXMgYW55KS5kYXRhIHx8IHJlc3BvbnNlO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgaXNzdWVcbiAgICovXG4gIGFzeW5jIGNyZWF0ZShkYXRhOiB7XG4gICAgYWdlbnRJZDogc3RyaW5nO1xuICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gICAgdHlwZTogc3RyaW5nO1xuICAgIHNldmVyaXR5Pzogc3RyaW5nO1xuICAgIHBhdHRlcm4/OiBzdHJpbmc7XG4gICAgZXhhbXBsZVRyYWNlSWRzPzogc3RyaW5nW107XG4gIH0pOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXBpUmVxdWVzdFdpdGhEYXRhKCcvaXNzdWVzJywge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBkYXRhLFxuICAgICAgYXBpVmVyc2lvbjogJ3YyJyxcbiAgICB9KTtcbiAgICByZXR1cm4gKHJlc3BvbnNlIGFzIGFueSkuZGF0YSB8fCByZXNwb25zZTtcbiAgfSxcblxuICAvKipcbiAgICogVXBkYXRlIGFuIGlzc3VlXG4gICAqL1xuICBhc3luYyB1cGRhdGUoaWQ6IHN0cmluZywgZGF0YToge1xuICAgIHRpdGxlPzogc3RyaW5nO1xuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAgIHN0YXR1cz86IHN0cmluZztcbiAgICBzZXZlcml0eT86IHN0cmluZztcbiAgICBhc3NpZ25lZFRvPzogc3RyaW5nO1xuICAgIHJlc29sdXRpb25Ob3Rlcz86IHN0cmluZztcbiAgfSk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBhcGlSZXF1ZXN0V2l0aERhdGEoYC9pc3N1ZXMvJHtpZH1gLCB7XG4gICAgICBtZXRob2Q6ICdQQVRDSCcsXG4gICAgICBib2R5OiBkYXRhLFxuICAgICAgYXBpVmVyc2lvbjogJ3YyJyxcbiAgICB9KTtcbiAgICByZXR1cm4gKHJlc3BvbnNlIGFzIGFueSkuZGF0YSB8fCByZXNwb25zZTtcbiAgfSxcblxuICAvKipcbiAgICogR2V0IGZpeGVzIGZvciBhbiBpc3N1ZVxuICAgKi9cbiAgYXN5bmMgZ2V0Rml4ZXMoaXNzdWVJZDogc3RyaW5nKTogUHJvbWlzZTxhbnlbXT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXBpUmVxdWVzdFdpdGhEYXRhKGAvaXNzdWVzLyR7aXNzdWVJZH0vZml4ZXNgLCB7IGFwaVZlcnNpb246ICd2MicgfSk7XG4gICAgcmV0dXJuIChyZXNwb25zZSBhcyBhbnkpLmRhdGEgfHwgcmVzcG9uc2U7XG4gIH0sXG59O1xuXG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFYyIFRFUk1JTk9MT0dZIC0gQU5BTFlaRVIgQVBJIChyZXBsYWNlcyBFeHBsYWluZXIgdXNlci1mYWNpbmcpXG4vLyBQZXIgaW5kdXN0cnkgZGlzdGluY3Rpb246IEFuYWx5emVyID0gcGF0dGVybiBkZXRlY3Rpb24vb2JzZXJ2YXRpb25cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBBbmFseXplciBBUEkgY2xpZW50XG4gKiBVc2VyLXNlbGVjdGVkIHRyYWNlIGFuYWx5c2lzIHdpdGggY29zdCBlc3RpbWF0aW9uIGFuZCBzbWFydCBzYW1wbGluZ1xuICpcbiAqIEtleSBpbXByb3ZlbWVudHMgb3ZlciB2MSBFeHBsYWluZXI6XG4gKiAtIFVzZXItc2VsZWN0ZWQgdHJhY2UgYW5hbHlzaXMgKG5vdCBhdXRvbWF0aWMpXG4gKiAtIENvc3QgZXN0aW1hdGlvbiBiZWZvcmUgZXhlY3V0aW9uXG4gKiAtIFNtYXJ0IHNhbXBsaW5nIHN0cmF0ZWdpZXNcbiAqIC0gUm9vdCBjYXVzZSBhbmFseXNpcyBieSBsYXllclxuICogLSBQYXR0ZXJuIGFnZ3JlZ2F0aW9uIGFjcm9zcyB0cmFjZXNcbiAqXG4gKiBAc2luY2UgMy4xLjBcbiAqL1xuZXhwb3J0IGNvbnN0IGFuYWx5emVyID0ge1xuICAvKipcbiAgICogQW5hbHl6ZSBzcGVjaWZpYyB0cmFjZXMgKHVzZXItc2VsZWN0ZWQpXG4gICAqL1xuICBhc3luYyBhbmFseXplKG9wdGlvbnM6IHtcbiAgICB0cmFjZUlkczogc3RyaW5nW107XG4gICAgdGllcj86ICdmYXN0JyB8ICdzdGFuZGFyZCcgfCAnZGVlcCc7XG4gICAgaW5jbHVkZVJvb3RDYXVzZT86IGJvb2xlYW47XG4gICAgaW5jbHVkZUxheWVycz86IGJvb2xlYW47XG4gIH0pOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHsgdHJhY2VJZHMsIHRpZXIsIGluY2x1ZGVSb290Q2F1c2UsIGluY2x1ZGVMYXllcnMgfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBhcGlSZXF1ZXN0V2l0aERhdGEoJy9hbmFseXplci9hbmFseXplJywge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiB7XG4gICAgICAgIHRyYWNlSWRzLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgdGllcixcbiAgICAgICAgICBpbmNsdWRlUm9vdENhdXNlLFxuICAgICAgICAgIGluY2x1ZGVMYXllcnMsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgYXBpVmVyc2lvbjogJ3YyJyxcbiAgICB9KTtcbiAgICByZXR1cm4gKHJlc3BvbnNlIGFzIGFueSkuZGF0YSB8fCByZXNwb25zZTtcbiAgfSxcblxuICAvKipcbiAgICogQW5hbHl6ZSB0cmFjZXMgYnkgdGltZSB3aW5kb3dcbiAgICovXG4gIGFzeW5jIGFuYWx5emVXaW5kb3cob3B0aW9uczoge1xuICAgIGFnZW50SWQ6IHN0cmluZztcbiAgICBzdGFydERhdGU6IERhdGU7XG4gICAgZW5kRGF0ZTogRGF0ZTtcbiAgICBmaWx0ZXJzPzoge1xuICAgICAgb3V0Y29tZXM/OiAoJ2ZhaWx1cmUnIHwgJ2Vycm9yJyB8ICdzdWNjZXNzJylbXTtcbiAgICAgIG1pblNldmVyaXR5PzogJ2xvdycgfCAnbWVkaXVtJyB8ICdoaWdoJyB8ICdjcml0aWNhbCc7XG4gICAgfTtcbiAgICBzYW1wbGluZz86IHtcbiAgICAgIHN0cmF0ZWd5OiAnYWxsJyB8ICdmYWlsdXJlc19vbmx5JyB8ICdzbWFydCcgfCAncmFuZG9tJztcbiAgICAgIHNhbXBsZVBlcmNlbnQ/OiBudW1iZXI7XG4gICAgfTtcbiAgfSk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBhcGlSZXF1ZXN0V2l0aERhdGEoJy9hbmFseXplci9hbmFseXplLXdpbmRvdycsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keToge1xuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICBzdGFydERhdGU6IG9wdGlvbnMuc3RhcnREYXRlLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIGVuZERhdGU6IG9wdGlvbnMuZW5kRGF0ZS50b0lTT1N0cmluZygpLFxuICAgICAgfSxcbiAgICAgIGFwaVZlcnNpb246ICd2MicsXG4gICAgfSk7XG4gICAgcmV0dXJuIChyZXNwb25zZSBhcyBhbnkpLmRhdGEgfHwgcmVzcG9uc2U7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEVzdGltYXRlIGNvc3QgYmVmb3JlIHJ1bm5pbmcgYW5hbHlzaXNcbiAgICovXG4gIGFzeW5jIGVzdGltYXRlQ29zdChvcHRpb25zOiB7XG4gICAgdHJhY2VJZHM/OiBzdHJpbmdbXTtcbiAgICBhZ2VudElkPzogc3RyaW5nO1xuICAgIHN0YXJ0RGF0ZT86IERhdGU7XG4gICAgZW5kRGF0ZT86IERhdGU7XG4gICAgdGllcjogJ2Zhc3QnIHwgJ3N0YW5kYXJkJyB8ICdkZWVwJztcbiAgfSk6IFByb21pc2U8e1xuICAgIGVzdGltYXRlZFRyYWNlczogbnVtYmVyO1xuICAgIGVzdGltYXRlZFRva2VuczogbnVtYmVyO1xuICAgIGVzdGltYXRlZENvc3Q6IG51bWJlcjtcbiAgICBlc3RpbWF0ZWRDcmVkaXRzOiBudW1iZXI7XG4gICAgdGllcjogc3RyaW5nO1xuICAgIG5vdGU6IHN0cmluZztcbiAgfT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXBpUmVxdWVzdFdpdGhEYXRhKCcvYW5hbHl6ZXIvZXN0aW1hdGUtY29zdCcsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keToge1xuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICBzdGFydERhdGU6IG9wdGlvbnMuc3RhcnREYXRlPy50b0lTT1N0cmluZygpLFxuICAgICAgICBlbmREYXRlOiBvcHRpb25zLmVuZERhdGU/LnRvSVNPU3RyaW5nKCksXG4gICAgICB9LFxuICAgICAgYXBpVmVyc2lvbjogJ3YyJyxcbiAgICB9KTtcbiAgICByZXR1cm4gKHJlc3BvbnNlIGFzIGFueSkuZGF0YSB8fCByZXNwb25zZTtcbiAgfSxcblxuICAvKipcbiAgICogR2V0IGFuYWx5c2lzIHJlc3VsdHMgZm9yIGEgc3BlY2lmaWMgdHJhY2VcbiAgICovXG4gIGFzeW5jIGdldCh0cmFjZUlkOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXBpUmVxdWVzdFdpdGhEYXRhKGAvYW5hbHl6ZXIvJHt0cmFjZUlkfWAsIHsgYXBpVmVyc2lvbjogJ3YyJyB9KTtcbiAgICByZXR1cm4gKHJlc3BvbnNlIGFzIGFueSkuZGF0YSB8fCByZXNwb25zZTtcbiAgfSxcblxuICAvKipcbiAgICogQWdncmVnYXRlIGluc2lnaHRzIGFjcm9zcyBtdWx0aXBsZSBhbmFseXplZCB0cmFjZXNcbiAgICovXG4gIGFzeW5jIHN1bW1hcml6ZShvcHRpb25zOiB7XG4gICAgYW5hbHlzaXNJZHM/OiBzdHJpbmdbXTtcbiAgICBhZ2VudElkPzogc3RyaW5nO1xuICAgIHN0YXJ0RGF0ZT86IERhdGU7XG4gICAgZW5kRGF0ZT86IERhdGU7XG4gIH0pOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXBpUmVxdWVzdFdpdGhEYXRhKCcvYW5hbHl6ZXIvc3VtbWFyaXplJywge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiB7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIHN0YXJ0RGF0ZTogb3B0aW9ucy5zdGFydERhdGU/LnRvSVNPU3RyaW5nKCksXG4gICAgICAgIGVuZERhdGU6IG9wdGlvbnMuZW5kRGF0ZT8udG9JU09TdHJpbmcoKSxcbiAgICAgIH0sXG4gICAgICBhcGlWZXJzaW9uOiAndjInLFxuICAgIH0pO1xuICAgIHJldHVybiAocmVzcG9uc2UgYXMgYW55KS5kYXRhIHx8IHJlc3BvbnNlO1xuICB9LFxufTtcblxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBBVVRPLUlOU1RSVU1FTlRBVElPTlxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5mdW5jdGlvbiBzZXR1cEF1dG9JbnN0cnVtZW50YXRpb24oXG4gIGZyYW1ld29ya3M6IGltcG9ydCgnLi9jb3JlL3R5cGVzJykuRnJhbWV3b3JrW11cbik6IHZvaWQge1xuICBkZWJ1Z0xvZyhgU2V0dGluZyB1cCBhdXRvLWluc3RydW1lbnRhdGlvbiBmb3I6ICR7ZnJhbWV3b3Jrcy5qb2luKCcsICcpfWApO1xuXG4gIGZvciAoY29uc3QgZnJhbWV3b3JrIG9mIGZyYW1ld29ya3MpIHtcbiAgICB0cnkge1xuICAgICAgc3dpdGNoIChmcmFtZXdvcmspIHtcbiAgICAgICAgY2FzZSAnb3BlbmFpJzpcbiAgICAgICAgY2FzZSAnb3BlbmFpLWFzc2lzdGFudHMnOlxuICAgICAgICAgIGRlYnVnTG9nKCdPcGVuQUkgaW5zdHJ1bWVudGF0aW9uIHJlYWR5ICh1c2UgaW5zdHJ1bWVudE9wZW5BSUNsaWVudCknKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbGFuZ2NoYWluJzpcbiAgICAgICAgY2FzZSAnbGFuZ2dyYXBoJzpcbiAgICAgICAgICBkZWJ1Z0xvZygnTGFuZ0NoYWluL0xhbmdHcmFwaCBpbnN0cnVtZW50YXRpb24gcmVhZHkgKHVzZSBUaGlua0hpdmVDYWxsYmFja0hhbmRsZXIpJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2FudGhyb3BpYyc6XG4gICAgICAgICAgZGVidWdMb2coJ0FudGhyb3BpYyBpbnN0cnVtZW50YXRpb24gcmVhZHknKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbGxhbWFpbmRleCc6XG4gICAgICAgICAgZGVidWdMb2coJ0xsYW1hSW5kZXggaW5zdHJ1bWVudGF0aW9uIHJlYWR5Jyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ244bic6XG4gICAgICAgICAgZGVidWdMb2coJ244biBpbnN0cnVtZW50YXRpb24gcmVhZHknKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAndm9pY2VmbG93JzpcbiAgICAgICAgICBkZWJ1Z0xvZygnVm9pY2VmbG93IGluc3RydW1lbnRhdGlvbiByZWFkeScpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBkZWJ1Z0xvZyhgRmFpbGVkIHRvIHNldHVwICR7ZnJhbWV3b3JrfSBpbnN0cnVtZW50YXRpb246YCwgZXJyb3IpO1xuICAgIH1cbiAgfVxufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBSRS1FWFBPUlRTIChub24tZHVwbGljYXRlZClcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLy8gUmUtZXhwb3J0IGZyb20gY29uZmlnIChub3QgeWV0IGV4cG9ydGVkKVxuZXhwb3J0IHsgaXNJbml0aWFsaXplZCwgU0RLX1ZFUlNJT04sIERFRkFVTFRfRU5EUE9JTlQgfTtcblxuLy8gUmUtZXhwb3J0IEFQSSBjbGllbnRzICh2MylcbmV4cG9ydCB7XG4gIHJ1bnMsXG4gIGNsYWltcyxcbiAgY2FsaWJyYXRpb24sXG4gIGxpbmtpbmcsXG4gIGN1c3RvbWVyQ29udGV4dCxcbiAgLy8gTmV3IGV2YWx1YXRpb24gQVBJc1xuICBodW1hblJldmlldyxcbiAgbm9uZGV0ZXJtaW5pc20sXG4gIGV2YWxIZWFsdGgsXG4gIGRldGVybWluaXN0aWNHcmFkZXJzLFxuICBjb252ZXJzYXRpb25FdmFsLFxuICB0cmFuc2NyaXB0UGF0dGVybnMsXG4gIC8vIEFQSSBLZXkgTWFuYWdlbWVudCAoUGhhc2UgMiBTZWN1cml0eSlcbiAgYXBpS2V5cyxcbiAgLy8gQWdlbnRzIE1hbmFnZW1lbnRcbiAgYWdlbnRzLFxuICAvLyBST0kgQW5hbHl0aWNzLCBRdWFsaXR5IE1ldHJpY3MsIGFuZCBCdXNpbmVzcyBNZXRyaWNzXG4gIHJvaUFuYWx5dGljcyxcbiAgcXVhbGl0eU1ldHJpY3MsXG4gIGJ1c2luZXNzTWV0cmljcyxcbn07XG5cbi8vIE5vdGU6IGlzc3VlcyBhbmQgYW5hbHl6ZXIgYXJlIGFscmVhZHkgZXhwb3J0ZWQgdmlhICdleHBvcnQgY29uc3QnIGFib3ZlXG5cbi8vIFJlLWV4cG9ydCBoZWxwZXIgZnVuY3Rpb25zXG5leHBvcnQge1xuICAvLyBSdW5zIGhlbHBlcnNcbiAgY3JlYXRlUnVuV2l0aENvbnRleHQsXG4gIHRvT3BlbkFJTWVzc2FnZXMsXG4gIGZyb21PcGVuQUlNZXNzYWdlcyxcbiAgLy8gQ2xhaW1zIGhlbHBlcnNcbiAgaXNGYWN0LFxuICBpc0luZmVyZW5jZSxcbiAgaXNDb21wdXRlZCxcbiAgZ2V0SGlnaENvbmZpZGVuY2VDbGFpbXMsXG4gIGdyb3VwQ2xhaW1zQnlUeXBlLFxuICBncm91cENsYWltc0J5Q2F0ZWdvcnksXG4gIC8vIENhbGlicmF0aW9uIGhlbHBlcnNcbiAgY2FsY3VsYXRlQnJpZXJTY29yZSxcbiAgY2FsY3VsYXRlRUNFLFxuICBpc1dlbGxDYWxpYnJhdGVkLFxuICBnZXRDYWxpYnJhdGlvblF1YWxpdHksXG4gIC8vIExpbmtpbmcgaGVscGVyc1xuICBnZW5lcmF0ZVplbmRlc2tNYXJrZXIsXG4gIHBhcnNlWmVuZGVza01hcmtlcixcbiAgaGFzWmVuZGVza01hcmtlcixcbiAgcmVtb3ZlWmVuZGVza01hcmtlcixcbiAgbGlua1J1blRvVGlja2V0LFxuICBsaW5rUnVuVG9aZW5kZXNrVGlja2V0LFxuICBnZXRCZXN0TGlua01ldGhvZCxcbiAgTElOS19NRVRIT0RfQ09ORklERU5DRSxcbiAgLy8gQ3VzdG9tZXIgY29udGV4dCBoZWxwZXJzXG4gIGNhcHR1cmVDdXN0b21lckNvbnRleHQsXG4gIGdldENvbnRleHRBc09mLFxuICB0b0NvbnRleHRTbmFwc2hvdCxcbiAgY2FsY3VsYXRlQXJyQ2hhbmdlLFxuICBjYWxjdWxhdGVIZWFsdGhUcmVuZCxcbiAgLy8gTm9uLWRldGVybWluaXNtIGhlbHBlcnNcbiAgY2FsY3VsYXRlUGFzc0F0SyxcbiAgY2FsY3VsYXRlUGFzc1RvSyxcbiAgcmVxdWlyZWRQYXNzUmF0ZUZvclBhc3NBdEssXG4gIGlzUmVsaWFibGVFdmFsdWF0aW9uLFxuICBnZXRSZWxpYWJpbGl0eVJlY29tbWVuZGF0aW9uLFxuICAvLyBFdmFsIGhlYWx0aCBoZWxwZXJzXG4gIGhhc0hlYWx0aElzc3VlLFxuICBnZXRIZWFsdGhTZXZlcml0eUxldmVsLFxuICBpc1NhdHVyYXRlZCxcbiAgZ2V0U2F0dXJhdGlvblJlY29tbWVuZGF0aW9uLFxuICAvLyBEZXRlcm1pbmlzdGljIGdyYWRlcnMgaGVscGVyc1xuICBjcmVhdGVSZWdleFJ1bGUsXG4gIGNyZWF0ZUNvbnRhaW5zUnVsZSxcbiAgY3JlYXRlTGVuZ3RoUnVsZSxcbiAgY3JlYXRlSnNvblNjaGVtYVJ1bGUsXG4gIGFsbFJ1bGVzUGFzc2VkLFxuICBnZXRGYWlsZWRSdWxlcyxcbiAgY2FsY3VsYXRlQXZlcmFnZVNjb3JlLFxuICAvLyBDb252ZXJzYXRpb24gZXZhbCBoZWxwZXJzXG4gIGFnZ3JlZ2F0ZVdvcnN0LFxuICBhZ2dyZWdhdGVBdmVyYWdlLFxuICBhZ2dyZWdhdGVXZWlnaHRlZCxcbiAgYWdncmVnYXRlRmluYWxUdXJuLFxuICBhZ2dyZWdhdGVNYWpvcml0eSxcbiAgZ2V0QWdncmVnYXRvcixcbiAgZ2V0UHJvYmxlbWF0aWNUdXJucyxcbiAgYW5hbHl6ZUNvbnZlcnNhdGlvblRyZW5kLFxuICAvLyBUcmFuc2NyaXB0IHBhdHRlcm5zIGhlbHBlcnNcbiAgaXNIaWdoUmlzayxcbiAgZ2V0TWF0Y2hlc0J5Q2F0ZWdvcnksXG4gIGdldENyaXRpY2FsSW5zaWdodHMsXG4gIGhhc1BpaUV4cG9zdXJlLFxuICBoYXNGcnVzdHJhdGlvblNpZ25hbHMsXG4gIGhhc0VzY2FsYXRpb25SZXF1ZXN0LFxuICBnZXRDYXRlZ29yeURpc3RyaWJ1dGlvbixcbiAgZ2V0UmVjb21tZW5kYXRpb25zLFxuICBuZWVkc0F0dGVudGlvbixcbiAgc29ydE1hdGNoZXNCeVNldmVyaXR5LFxuICAvLyBBUEkgS2V5IGhlbHBlcnNcbiAgaGFzUGVybWlzc2lvbixcbiAgaXNBcGlLZXlFeHBpcmVkLFxuICBpc0FwaUtleVZhbGlkLFxuICBnZXRUaW1lVW50aWxFeHBpcnksXG4gIGNhbkFjY2Vzc0FnZW50LFxuICAvLyBST0kgQW5hbHl0aWNzIGhlbHBlcnNcbiAgY2FsY3VsYXRlUmV2ZW51ZUF0UmlzayxcbiAgY2FsY3VsYXRlQXV0b21hdGlvblNhdmluZ3MsXG4gIGZvcm1hdEN1cnJlbmN5LFxuICBnZXRST0lRdWFsaXR5LFxuICAvLyBRdWFsaXR5IE1ldHJpY3MgaGVscGVyc1xuICBwYXNzZXNRdWFsaXR5VGhyZXNob2xkLFxuICBpc0hhbGx1Y2luYXRpb25SaXNrQWNjZXB0YWJsZSxcbiAgZ2V0UXVhbGl0eVJlY29tbWVuZGF0aW9ucyxcbiAgZm9ybWF0UXVhbGl0eVNjb3JlLFxuICBnZXRHcmFkZUNvbG9yLFxuICAvLyBCdXNpbmVzcyBNZXRyaWNzIGhlbHBlcnNcbiAgaXNNZXRyaWNSZWFkeSxcbiAgbmVlZHNNb3JlVHJhY2VzLFxuICBhd2FpdGluZ0V4dGVybmFsRGF0YSxcbiAgaXNNZXRyaWNTdGFsZSxcbiAgZ2V0U3RhdHVzTWVzc2FnZSxcbiAgZ2V0VHJhY2VQcm9ncmVzcyxcbiAgZm9ybWF0TWV0cmljVmFsdWUsXG4gIGdldFRyZW5kRW1vamksXG59O1xuXG4vLyBSZS1leHBvcnQgZXJyb3JzIChpbmNsdWRpbmcgbmV3IHNlY3VyaXR5IGVycm9ycylcbmV4cG9ydCB7XG4gIFRoaW5rSGl2ZUVycm9yLFxuICBUaGlua0hpdmVBcGlFcnJvcixcbiAgVGhpbmtIaXZlVmFsaWRhdGlvbkVycm9yLFxuICBQZXJtaXNzaW9uRGVuaWVkRXJyb3IsXG4gIEFnZW50U2NvcGVFcnJvcixcbiAgUmF0ZUxpbWl0RXJyb3IsXG4gIElwV2hpdGVsaXN0RXJyb3IsXG59O1xuXG4vLyBEZWZhdWx0IGV4cG9ydCBmb3IgY29udmVuaWVuY2VcbmV4cG9ydCBkZWZhdWx0IHtcbiAgaW5pdCxcbiAgZ2V0VHJhY2VyLFxuICBzaHV0ZG93bixcbiAgaXNJbml0aWFsaXplZCxcbiAgLy8gVHJhY2luZ1xuICB0cmFjZUxMTSxcbiAgdHJhY2VSZXRyaWV2YWwsXG4gIHRyYWNlVG9vbCxcbiAgdHJhY2VDaGFpbixcbiAgLy8gQVBJIGNsaWVudHNcbiAgcnVucyxcbiAgY2xhaW1zLFxuICBjYWxpYnJhdGlvbixcbiAgbGlua2luZyxcbiAgY3VzdG9tZXJDb250ZXh0LFxuICAvLyBFdmFsdWF0aW9uIEFQSXNcbiAgaHVtYW5SZXZpZXcsXG4gIG5vbmRldGVybWluaXNtLFxuICBldmFsSGVhbHRoLFxuICBkZXRlcm1pbmlzdGljR3JhZGVycyxcbiAgY29udmVyc2F0aW9uRXZhbCxcbiAgdHJhbnNjcmlwdFBhdHRlcm5zLFxuICAvLyBBUEkgS2V5IE1hbmFnZW1lbnQgKFBoYXNlIDIgU2VjdXJpdHkpXG4gIGFwaUtleXMsXG4gIC8vIEFnZW50cyBNYW5hZ2VtZW50XG4gIGFnZW50cyxcbiAgLy8gSXNzdWVzIGFuZCBBbmFseXplciBBUElzXG4gIGlzc3VlcyxcbiAgYW5hbHl6ZXIsXG4gIC8vIFJPSSBBbmFseXRpY3MsIFF1YWxpdHkgTWV0cmljcywgYW5kIEJ1c2luZXNzIE1ldHJpY3NcbiAgcm9pQW5hbHl0aWNzLFxuICBxdWFsaXR5TWV0cmljcyxcbiAgYnVzaW5lc3NNZXRyaWNzLFxuICAvLyBIZWxwZXJzXG4gIGdlbmVyYXRlWmVuZGVza01hcmtlcixcbiAgcGFyc2VaZW5kZXNrTWFya2VyLFxuICBsaW5rUnVuVG9UaWNrZXQsXG4gIGNyZWF0ZVJ1bldpdGhDb250ZXh0LFxuICAvLyBVdGlsaXRpZXNcbiAgaXNGYWN0LFxuICBpc0luZmVyZW5jZSxcbiAgY2FsY3VsYXRlQnJpZXJTY29yZSxcbiAgaXNXZWxsQ2FsaWJyYXRlZCxcbiAgY2FsY3VsYXRlUGFzc0F0SyxcbiAgaXNSZWxpYWJsZUV2YWx1YXRpb24sXG4gIGlzSGlnaFJpc2ssXG4gIG5lZWRzQXR0ZW50aW9uLFxuICAvLyBST0kgaGVscGVyc1xuICBjYWxjdWxhdGVSZXZlbnVlQXRSaXNrLFxuICBmb3JtYXRDdXJyZW5jeSxcbiAgLy8gUXVhbGl0eSBoZWxwZXJzXG4gIHBhc3Nlc1F1YWxpdHlUaHJlc2hvbGQsXG4gIGlzSGFsbHVjaW5hdGlvblJpc2tBY2NlcHRhYmxlLFxuICAvLyBCdXNpbmVzcyBNZXRyaWNzIGhlbHBlcnNcbiAgaXNNZXRyaWNSZWFkeSxcbiAgbmVlZHNNb3JlVHJhY2VzLFxuICBnZXRTdGF0dXNNZXNzYWdlLFxufTtcbiJdfQ==
|
|
682
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7R0FZRzs7Ozs7QUE4Ykgsb0JBeURDO0FBS0QsOEJBS0M7QUFLRCw0QkFRQztBQVNELDRCQXVDQztBQUtELHdDQXVDQztBQUtELDhCQXFDQztBQUtELGdDQW1DQztBQTFyQkQsNENBQW9FO0FBQ3BFLHdGQUE2RTtBQUM3RSx3REFBb0Q7QUFDcEQsa0VBQW1FO0FBQ25FLGtFQUFtRTtBQUVuRSxPQUFPO0FBQ1AsMENBUXVCO0FBdTdCZCw4RkE1N0JQLHNCQUFhLE9BNDdCTztBQUFFLDRGQXo3QnRCLG9CQUFXLE9BeTdCc0I7QUFBRSxpR0F4N0JuQyx5QkFBZ0IsT0F3N0JtQztBQXQ3QnJELDBDQVN1QjtBQWtrQ3JCLCtGQXprQ0EsdUJBQWMsT0F5a0NBO0FBQ2Qsa0dBemtDQSwwQkFBaUIsT0F5a0NBO0FBQ2pCLHlHQXprQ0EsaUNBQXdCLE9BeWtDQTtBQUN4QixzR0F6a0NBLDhCQUFxQixPQXlrQ0E7QUFDckIsZ0dBemtDQSx3QkFBZSxPQXlrQ0E7QUFDZiwrRkF6a0NBLHVCQUFjLE9BeWtDQTtBQUNkLGlHQXprQ0EseUJBQWdCLE9BeWtDQTtBQXRrQ2xCLGNBQWM7QUFDZCxxQ0FBOEY7QUE4NkI1RixxRkE5NkJPLFdBQUksT0E4NkJQO0FBc0NKLHFHQXA5QmEsMkJBQW9CLE9BbzlCYjtBQUNwQixpR0FyOUJtQyx1QkFBZ0IsT0FxOUJuQztBQUNoQixtR0F0OUJxRCx5QkFBa0IsT0FzOUJyRDtBQXI5QnBCLHlDQVFzQjtBQXM2QnBCLHVGQTc2QkEsZUFBTSxPQTY2QkE7QUF5Q04sdUZBcjlCQSxlQUFNLE9BcTlCQTtBQUNOLDRGQXI5QkEsb0JBQVcsT0FxOUJBO0FBQ1gsMkZBcjlCQSxtQkFBVSxPQXE5QkE7QUFDVix3R0FyOUJBLGdDQUF1QixPQXE5QkE7QUFDdkIsa0dBcjlCQSwwQkFBaUIs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QVIsZ0JBQVE7SUFDUixnQkFBZ0IsRUFBaEIsd0JBQWdCO0lBQ2hCLG9CQUFvQjtJQUNwQixhQUFhLEVBQWIsc0JBQWE7Q0FDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGlua0hpdmUgU0RLIHY0LjEuMFxuICpcbiAqIFJ1bi1jZW50cmljIEFJIGFnZW50IG9ic2VydmFiaWxpdHkgcGxhdGZvcm0gd2l0aDpcbiAqIC0gRmFjdHMgdnMgSW5mZXJlbmNlcyAoY2xhaW1zIEFQSSlcbiAqIC0gRGV0ZXJtaW5pc3RpYyB0aWNrZXQgbGlua2luZyAoNyBtZXRob2RzKVxuICogLSBDdXN0b21lciBjb250ZXh0IHNuYXBzaG90cyAodGltZS1zZXJpZXMpXG4gKiAtIENhbGlicmF0ZWQgcHJlZGljdGlvbnMgKEJyaWVyIHNjb3JlcylcbiAqIC0gQ29uZmlndXJhYmxlIFJPSSBjYWxjdWxhdGlvbiBlbmdpbmVcbiAqXG4gKiBAdmVyc2lvbiA0LjEuMFxuICogQGxpY2Vuc2UgTUlUXG4gKi9cblxuaW1wb3J0IHsgdHJhY2UsIGNvbnRleHQsIFNwYW5TdGF0dXNDb2RlIH0gZnJvbSAnQG9wZW50ZWxlbWV0cnkvYXBpJztcbmltcG9ydCB7IE9UTFBUcmFjZUV4cG9ydGVyIH0gZnJvbSAnQG9wZW50ZWxlbWV0cnkvZXhwb3J0ZXItdHJhY2Utb3RscC1wcm90byc7XG5pbXBvcnQgeyBSZXNvdXJjZSB9IGZyb20gJ0BvcGVudGVsZW1ldHJ5L3Jlc291cmNlcyc7XG5pbXBvcnQgeyBOb2RlVHJhY2VyUHJvdmlkZXIgfSBmcm9tICdAb3BlbnRlbGVtZXRyeS9zZGstdHJhY2Utbm9kZSc7XG5pbXBvcnQgeyBCYXRjaFNwYW5Qcm9jZXNzb3IgfSBmcm9tICdAb3BlbnRlbGVtZXRyeS9zZGstdHJhY2UtYmFzZSc7XG5cbi8vIENvcmVcbmltcG9ydCB7XG4gIGluaXRDb25maWcsXG4gIGdldENvbmZpZyxcbiAgaXNJbml0aWFsaXplZCxcbiAgcmVzZXRDb25maWcsXG4gIGRlYnVnTG9nLFxuICBTREtfVkVSU0lPTixcbiAgREVGQVVMVF9FTkRQT0lOVCxcbn0gZnJvbSAnLi9jb3JlL2NvbmZpZyc7XG5pbXBvcnQge1xuICBhcGlSZXF1ZXN0V2l0aERhdGEsXG4gIFRoaW5rSGl2ZUVycm9yLFxuICBUaGlua0hpdmVBcGlFcnJvcixcbiAgVGhpbmtIaXZlVmFsaWRhdGlvbkVycm9yLFxuICBQZXJtaXNzaW9uRGVuaWVkRXJyb3IsXG4gIEFnZW50U2NvcGVFcnJvcixcbiAgUmF0ZUxpbWl0RXJyb3IsXG4gIElwV2hpdGVsaXN0RXJyb3IsXG59IGZyb20gJy4vY29yZS9jbGllbnQnO1xuXG4vLyBBUEkgY2xpZW50c1xuaW1wb3J0IHsgcnVucywgY3JlYXRlUnVuV2l0aENvbnRleHQsIHRvT3BlbkFJTWVzc2FnZXMsIGZyb21PcGVuQUlNZXNzYWdlcyB9IGZyb20gJy4vYXBpL3J1bnMnO1xuaW1wb3J0IHtcbiAgY2xhaW1zLFxuICBpc0ZhY3QsXG4gIGlzSW5mZXJlbmNlLFxuICBpc0NvbXB1dGVkLFxuICBnZXRIaWdoQ29uZmlkZW5jZUNsYWltcyxcbiAgZ3JvdXBDbGFpbXNCeVR5cGUsXG4gIGdyb3VwQ2xhaW1zQnlDYXRlZ29yeSxcbn0gZnJvbSAnLi9hcGkvY2xhaW1zJztcbmltcG9ydCB7XG4gIGNhbGlicmF0aW9uLFxuICBjYWxjdWxhdGVCcmllclNjb3JlLFxuICBjYWxjdWxhdGVFQ0UsXG4gIGlzV2VsbENhbGlicmF0ZWQsXG4gIGdldENhbGlicmF0aW9uUXVhbGl0eSxcbn0gZnJvbSAnLi9hcGkvY2FsaWJyYXRpb24nO1xuXG4vLyBOZXcgRXZhbHVhdGlvbiBBUElzXG5pbXBvcnQgeyBodW1hblJldmlldyB9IGZyb20gJy4vYXBpL2h1bWFuLXJldmlldyc7XG5pbXBvcnQge1xuICBub25kZXRlcm1pbmlzbSxcbiAgY2FsY3VsYXRlUGFzc0F0SyxcbiAgY2FsY3VsYXRlUGFzc1RvSyxcbiAgcmVxdWlyZWRQYXNzUmF0ZUZvclBhc3NBdEssXG4gIGlzUmVsaWFibGVFdmFsdWF0aW9uLFxuICBnZXRSZWxpYWJpbGl0eVJlY29tbWVuZGF0aW9uLFxufSBmcm9tICcuL2FwaS9ub25kZXRlcm1pbmlzbSc7XG5pbXBvcnQge1xuICBldmFsSGVhbHRoLFxuICBoYXNIZWFsdGhJc3N1ZSxcbiAgZ2V0U2V2ZXJpdHlMZXZlbCBhcyBnZXRIZWFsdGhTZXZlcml0eUxldmVsLFxuICBpc1NhdHVyYXRlZCxcbiAgZ2V0U2F0dXJhdGlvblJlY29tbWVuZGF0aW9uLFxufSBmcm9tICcuL2FwaS9ldmFsLWhlYWx0aCc7XG5pbXBvcnQge1xuICBkZXRlcm1pbmlzdGljR3JhZGVycyxcbiAgY3JlYXRlUmVnZXhSdWxlLFxuICBjcmVhdGVDb250YWluc1J1bGUsXG4gIGNyZWF0ZUxlbmd0aFJ1bGUsXG4gIGNyZWF0ZUpzb25TY2hlbWFSdWxlLFxuICBhbGxSdWxlc1Bhc3NlZCxcbiAgZ2V0RmFpbGVkUnVsZXMsXG4gIGNhbGN1bGF0ZUF2ZXJhZ2VTY29yZSxcbn0gZnJvbSAnLi9hcGkvZGV0ZXJtaW5pc3RpYy1ncmFkZXJzJztcbmltcG9ydCB7XG4gIGNvbnZlcnNhdGlvbkV2YWwsXG4gIGFnZ3JlZ2F0ZVdvcnN0LFxuICBhZ2dyZWdhdGVBdmVyYWdlLFxuICBhZ2dyZWdhdGVXZWlnaHRlZCxcbiAgYWdncmVnYXRlRmluYWxUdXJuLFxuICBhZ2dyZWdhdGVNYWpvcml0eSxcbiAgZ2V0QWdncmVnYXRvcixcbiAgZ2V0UHJvYmxlbWF0aWNUdXJucyxcbiAgYW5hbHl6ZUNvbnZlcnNhdGlvblRyZW5kLFxufSBmcm9tICcuL2FwaS9jb252ZXJzYXRpb24tZXZhbCc7XG5pbXBvcnQge1xuICB0cmFuc2NyaXB0UGF0dGVybnMsXG4gIGlzSGlnaFJpc2ssXG4gIGdldE1hdGNoZXNCeUNhdGVnb3J5LFxuICBnZXRDcml0aWNhbEluc2lnaHRzLFxuICBoYXNQaWlFeHBvc3VyZSxcbiAgaGFzRnJ1c3RyYXRpb25TaWduYWxzLFxuICBoYXNFc2NhbGF0aW9uUmVxdWVzdCxcbiAgZ2V0Q2F0ZWdvcnlEaXN0cmlidXRpb24sXG4gIGdldFJlY29tbWVuZGF0aW9ucyxcbiAgbmVlZHNBdHRlbnRpb24sXG4gIHNvcnRNYXRjaGVzQnlTZXZlcml0eSxcbn0gZnJvbSAnLi9hcGkvdHJhbnNjcmlwdC1wYXR0ZXJucyc7XG5cbi8vIEFnZW50cyBNYW5hZ2VtZW50XG5pbXBvcnQge1xuICBhZ2VudHMsXG59IGZyb20gJy4vYXBpL2FnZW50cyc7XG5cbi8vIEV2YWwgUnVuc1xuaW1wb3J0IHsgZXZhbFJ1bnMgfSBmcm9tICcuL2FwaS9ldmFsLXJ1bnMnO1xuXG4vLyBTaWduYWxzXG5pbXBvcnQgeyBzaWduYWxzIH0gZnJvbSAnLi9hcGkvc2lnbmFscyc7XG5cbi8vIE5vdGlmaWNhdGlvbnNcbmltcG9ydCB7IG5vdGlmaWNhdGlvbnMgfSBmcm9tICcuL2FwaS9ub3RpZmljYXRpb25zJztcblxuLy8gRG9jdW1lbnRzXG5pbXBvcnQgeyBkb2N1bWVudHMgfSBmcm9tICcuL2FwaS9kb2N1bWVudHMnO1xuXG4vLyBTaGFkb3cgVGVzdHNcbmltcG9ydCB7IHNoYWRvd1Rlc3RzIH0gZnJvbSAnLi9hcGkvc2hhZG93LXRlc3RzJztcblxuLy8gU2Vzc2lvbnNcbmltcG9ydCB7IHNlc3Npb25zIH0gZnJvbSAnLi9hcGkvc2Vzc2lvbnMnO1xuXG4vLyBEcmlmdFxuaW1wb3J0IHsgZHJpZnQsIGhhc0RyaWZ0LCBnZXREcmlmdFNldmVyaXR5IH0gZnJvbSAnLi9hcGkvZHJpZnQnO1xuXG4vLyBMTE0gQ29zdHNcbmltcG9ydCB7IGxsbUNvc3RzLCBmb3JtYXRDb3N0IGFzIGZvcm1hdExMTUNvc3QgfSBmcm9tICcuL2FwaS9sbG0tY29zdHMnO1xuXG4vLyBHdWFyZHJhaWxzXG5pbXBvcnQgeyBndWFyZHJhaWxzIH0gZnJvbSAnLi9ndWFyZHJhaWxzJztcblxuLy8gQVBJIEtleSBNYW5hZ2VtZW50IChQaGFzZSAyIFNlY3VyaXR5KVxuaW1wb3J0IHtcbiAgYXBpS2V5cyxcbiAgaGFzUGVybWlzc2lvbixcbiAgaXNFeHBpcmVkIGFzIGlzQXBpS2V5RXhwaXJlZCxcbiAgaXNWYWxpZCBhcyBpc0FwaUtleVZhbGlkLFxuICBnZXRUaW1lVW50aWxFeHBpcnksXG4gIGNhbkFjY2Vzc0FnZW50LFxufSBmcm9tICcuL2FwaS9hcGlLZXlzJztcblxuLy8gUk9JIEFuYWx5dGljcyBBUElcbmltcG9ydCB7XG4gIHJvaUFuYWx5dGljcyxcbiAgY2FsY3VsYXRlUmV2ZW51ZUF0UmlzayxcbiAgY2FsY3VsYXRlQXV0b21hdGlvblNhdmluZ3MsXG4gIGZvcm1hdEN1cnJlbmN5LFxuICBnZXRST0lRdWFsaXR5LFxufSBmcm9tICcuL2FwaS9yb2ktYW5hbHl0aWNzJztcblxuLy8gQnVzaW5lc3MgTWV0cmljcyBBUElcbmltcG9ydCB7XG4gIGJ1c2luZXNzTWV0cmljcyxcbiAgaXNNZXRyaWNSZWFkeSxcbiAgbmVlZHNNb3JlVHJhY2VzLFxuICBhd2FpdGluZ0V4dGVybmFsRGF0YSxcbiAgaXNNZXRyaWNTdGFsZSxcbiAgZ2V0U3RhdHVzTWVzc2FnZSxcbiAgZ2V0VHJhY2VQcm9ncmVzcyxcbiAgZm9ybWF0TWV0cmljVmFsdWUsXG4gIGdldFRyZW5kRW1vamksXG59IGZyb20gJy4vYXBpL2J1c2luZXNzLW1ldHJpY3MnO1xuXG4vLyBRdWFsaXR5IE1ldHJpY3MgQVBJXG5pbXBvcnQge1xuICBxdWFsaXR5TWV0cmljcyxcbiAgcGFzc2VzUXVhbGl0eVRocmVzaG9sZCxcbiAgaXNIYWxsdWNpbmF0aW9uUmlza0FjY2VwdGFibGUsXG4gIGdldFF1YWxpdHlSZWNvbW1lbmRhdGlvbnMsXG4gIGZvcm1hdFF1YWxpdHlTY29yZSxcbiAgZ2V0R3JhZGVDb2xvcixcbn0gZnJvbSAnLi9hcGkvcXVhbGl0eS1tZXRyaWNzJztcblxuLy8gSW50ZWdyYXRpb25zXG5pbXBvcnQge1xuICBsaW5raW5nLFxuICBnZW5lcmF0ZVplbmRlc2tNYXJrZXIsXG4gIHBhcnNlWmVuZGVza01hcmtlcixcbiAgaGFzWmVuZGVza01hcmtlcixcbiAgcmVtb3ZlWmVuZGVza01hcmtlcixcbiAgbGlua1J1blRvVGlja2V0LFxuICBsaW5rUnVuVG9aZW5kZXNrVGlja2V0LFxuICBnZXRCZXN0TGlua01ldGhvZCxcbiAgTElOS19NRVRIT0RfQ09ORklERU5DRSxcbn0gZnJvbSAnLi9pbnRlZ3JhdGlvbnMvdGlja2V0LWxpbmtpbmcnO1xuaW1wb3J0IHtcbiAgY3VzdG9tZXJDb250ZXh0LFxuICBjYXB0dXJlQ3VzdG9tZXJDb250ZXh0LFxuICBnZXRDb250ZXh0QXNPZixcbiAgdG9Db250ZXh0U25hcHNob3QsXG4gIGNhbGN1bGF0ZUFyckNoYW5nZSxcbiAgY2FsY3VsYXRlSGVhbHRoVHJlbmQsXG59IGZyb20gJy4vaW50ZWdyYXRpb25zL2N1c3RvbWVyLWNvbnRleHQnO1xuXG4vLyBSZS1leHBvcnQgdHlwZXNcbmV4cG9ydCB0eXBlIHtcbiAgSW5pdE9wdGlvbnMsXG4gIEZyYW1ld29yayxcbiAgUnVuT3B0aW9ucyxcbiAgUnVuT3V0Y29tZSxcbiAgQ29udmVyc2F0aW9uTWVzc2FnZSxcbiAgQ3VzdG9tZXJDb250ZXh0U25hcHNob3QsXG4gIFRpY2tldExpbmtpbmdPcHRpb25zLFxuICBMaW5rTWV0aG9kLFxuICBUcmFjZU9wdGlvbnMsXG4gIFRyYWNlQ3VzdG9tRmxhZyxcbiAgU3BhbkRhdGEsXG4gIEJ1c2luZXNzQ29udGV4dCxcbiAgQ2xhaW0sXG4gIENsYWltVHlwZSxcbiAgQ2xhaW1DYXRlZ29yeSxcbiAgQ29uZmlkZW5jZUNhbGlicmF0aW9uLFxuICBFdmlkZW5jZVJlZmVyZW5jZSxcbiAgQW5hbHlzaXNSZXN1bHQsXG4gIENhbGlicmF0aW9uU3RhdHVzLFxuICBDYWxpYnJhdGlvbkJ1Y2tldCxcbiAgUHJlZGljdGlvblR5cGUsXG4gIFJvaUNvbmZpZyxcbiAgUm9pU3VtbWFyeSxcbiAgRXhwbGFpbmFiaWxpdHlSZXN1bHQsXG4gIEFwaVJlc3BvbnNlLFxuICBQYWdpbmF0ZWRSZXNwb25zZSxcbiAgUnVuUmVzcG9uc2UsXG59IGZyb20gJy4vY29yZS90eXBlcyc7XG5cbi8vIFJlLWV4cG9ydCBldmFsdWF0aW9uIHR5cGVzXG5leHBvcnQgdHlwZSB7XG4gIEh1bWFuUmV2aWV3U3RhdHVzLFxuICBIdW1hblJldmlld1R5cGUsXG4gIEh1bWFuUmV2aWV3UXVldWVJdGVtLFxuICBDYWxpYnJhdGlvblNldCxcbiAgUmV2aWV3ZXJDYWxpYnJhdGlvbixcbiAgUXVldWVTdGF0cyxcbn0gZnJvbSAnLi9hcGkvaHVtYW4tcmV2aWV3JztcblxuZXhwb3J0IHR5cGUge1xuICBOb25kZXRlcm1pbmlzbVJ1blR5cGUsXG4gIE5vbmRldGVybWluaXNtUnVuU3RhdHVzLFxuICBOb25kZXRlcm1pbmlzbVJ1bixcbiAgTm9uZGV0ZXJtaW5pc21TYW1wbGUsXG4gIFRyYWNlQW5hbHlzaXMsXG4gIENyaXRlcmlvbkFuYWx5c2lzLFxuICBSdW5TdW1tYXJ5LFxufSBmcm9tICcuL2FwaS9ub25kZXRlcm1pbmlzbSc7XG5cbmV4cG9ydCB0eXBlIHtcbiAgU2F0dXJhdGlvblR5cGUsXG4gIEhlYWx0aFN0YXR1cyxcbiAgUmVncmVzc2lvblNldmVyaXR5LFxuICBFdmFsSGVhbHRoU25hcHNob3QsXG4gIEV2YWxSZWdyZXNzaW9uLFxuICBIZWFsdGhSZXBvcnQsXG59IGZyb20gJy4vYXBpL2V2YWwtaGVhbHRoJztcblxuZXhwb3J0IHR5cGUge1xuICBSdWxlVHlwZSxcbiAgRGV0ZXJtaW5pc3RpY0V2YWxSZXN1bHQsXG4gIFJ1bGVSZXN1bHQsXG4gIFJ1bGVUeXBlSW5mbyxcbiAgUnVsZVRlbXBsYXRlLFxufSBmcm9tICcuL2FwaS9kZXRlcm1pbmlzdGljLWdyYWRlcnMnO1xuXG5leHBvcnQgdHlwZSB7XG4gIEFnZ3JlZ2F0ZU1ldGhvZCxcbiAgU2Vzc2lvblRyYWNlLFxuICBUdXJuRXZhbHVhdGlvbixcbiAgQ29udmVyc2F0aW9uRXZhbFJlc3VsdCxcbiAgQWdncmVnYXRpb25NZXRob2RJbmZvLFxufSBmcm9tICcuL2FwaS9jb252ZXJzYXRpb24tZXZhbCc7XG5cbmV4cG9ydCB0eXBlIHtcbiAgUGF0dGVybkNhdGVnb3J5LFxuICBQYXR0ZXJuT3V0Y29tZSxcbiAgUGF0dGVyblNldmVyaXR5LFxuICBQYXR0ZXJuTWF0Y2gsXG4gIFBhdHRlcm5JbnNpZ2h0LFxuICBBbmFseXNpc1Jlc3VsdCBhcyBQYXR0ZXJuQW5hbHlzaXNSZXN1bHQsXG4gIFBhdHRlcm5DYXRlZ29yeUluZm8sXG4gIEJ1aWx0SW5QYXR0ZXJuLFxufSBmcm9tICcuL2FwaS90cmFuc2NyaXB0LXBhdHRlcm5zJztcblxuLy8gUmUtZXhwb3J0IEFQSSBLZXkgdHlwZXMgKFBoYXNlIDIgU2VjdXJpdHkpXG5leHBvcnQgdHlwZSB7XG4gIEFwaUtleVBlcm1pc3Npb25zLFxuICBTY29wZVR5cGUsXG4gIEVudmlyb25tZW50LFxuICBDcmVhdGVBcGlLZXlPcHRpb25zLFxuICBBcGlLZXksXG4gIENyZWF0ZUFwaUtleVJlc3VsdCxcbn0gZnJvbSAnLi9hcGkvYXBpS2V5cyc7XG5cbi8vIFJlLWV4cG9ydCBST0kgQW5hbHl0aWNzIHR5cGVzXG5leHBvcnQgdHlwZSB7XG4gIEluZHVzdHJ5Q29uZmlnLFxuICBDdXN0b21JbmR1c3RyeUNvbmZpZyxcbiAgUk9JTWV0cmljcyxcbiAgQnVzaW5lc3NJbXBhY3QsXG4gIFJPSVN1bW1hcnksXG4gIFRyZW5kRGF0YVBvaW50LFxuICBDb3JyZWxhdGlvbixcbiAgUGF0dGVybkNsdXN0ZXIsXG4gIENvcnJlbGF0aW9uQW5hbHlzaXMsXG59IGZyb20gJy4vYXBpL3JvaS1hbmFseXRpY3MnO1xuXG4vLyBSZS1leHBvcnQgUXVhbGl0eSBNZXRyaWNzIHR5cGVzXG5leHBvcnQgdHlwZSB7XG4gIFJldHJpZXZlZENvbnRleHQsXG4gIEdyb3VuZFRydXRoQ29udGV4dCxcbiAgR3JvdW5kZWRTcGFuLFxuICBVbmdyb3VuZGVkU3BhbixcbiAgQ2l0YXRpb25NYXAsXG4gIFJBR0V2YWx1YXRpb24sXG4gIFJBR0V2aWRlbmNlLFxuICBIYWxsdWNpbmF0aW9uSW5zdGFuY2UsXG4gIEhhbGx1Y2luYXRpb25SZXBvcnQsXG4gIEdyb3VuZGVkbmVzc1Jlc3VsdCxcbiAgQmF0Y2hFdmFsdWF0aW9uUmVzdWx0LFxuICBCYXRjaEV2YWx1YXRpb25TdW1tYXJ5LFxufSBmcm9tICcuL2FwaS9xdWFsaXR5LW1ldHJpY3MnO1xuXG4vLyBSZS1leHBvcnQgQnVzaW5lc3MgTWV0cmljcyB0eXBlc1xuZXhwb3J0IHR5cGUge1xuICBNZXRyaWNUcmVuZCxcbiAgTWV0cmljU3RhdHVzLFxuICBDdXJyZW50TWV0cmljUmVzcG9uc2UsXG4gIE1ldHJpY0hpc3RvcnlQb2ludCxcbiAgTWV0cmljSGlzdG9yeVN1bW1hcnksXG4gIE1ldHJpY0hpc3RvcnlSZXNwb25zZSxcbiAgUmVjb3JkTWV0cmljT3B0aW9ucyxcbiAgUmVjb3JkTWV0cmljUmVzcG9uc2UsXG59IGZyb20gJy4vYXBpL2J1c2luZXNzLW1ldHJpY3MnO1xuXG4vLyBSZS1leHBvcnQgQWdlbnQgdHlwZXNcbmV4cG9ydCB0eXBlIHtcbiAgQWdlbnQsXG4gIENyZWF0ZUFnZW50T3B0aW9ucyxcbiAgVXBkYXRlQWdlbnRPcHRpb25zLFxuICBBZ2VudENvbmZpZyxcbiAgVXBkYXRlQWdlbnRDb25maWdPcHRpb25zLFxuICBEZWxldGVBZ2VudE9wdGlvbnMsXG4gIENhc2NhZGVJbXBhY3QsXG59IGZyb20gJy4vYXBpL2FnZW50cyc7XG5cbi8vIFJlLWV4cG9ydCBFdmFsIFJ1bnMgdHlwZXNcbmV4cG9ydCB0eXBlIHtcbiAgQ3JlYXRlRXZhbFJ1bk9wdGlvbnMsXG4gIEdldEV2YWxSdW5SZXN1bHRzT3B0aW9ucyxcbiAgTGlzdEV2YWxSdW5zT3B0aW9ucyxcbiAgRXN0aW1hdGVDb3N0T3B0aW9ucyxcbiAgR2V0VHJhY2VSZXN1bHRzT3B0aW9ucyxcbiAgRXZhbFJ1bixcbiAgRXZhbFJlc3VsdCxcbiAgRXZhbENvc3RFc3RpbWF0ZSxcbn0gZnJvbSAnLi9hcGkvZXZhbC1ydW5zJztcblxuLy8gUmUtZXhwb3J0IFNpZ25hbHMgdHlwZXNcbmV4cG9ydCB0eXBlIHtcbiAgRGV0ZWN0aW9uQ29uZmlnLFxuICBDcmVhdGVTaWduYWxPcHRpb25zLFxuICBVcGRhdGVTaWduYWxPcHRpb25zLFxuICBMaXN0U2lnbmFsc09wdGlvbnMsXG4gIFNpZ25hbFN0YXRzT3B0aW9ucyxcbiAgU2lnbmFsVHJlbmRzT3B0aW9ucyxcbiAgU2lnbmFsVHJhY2VzT3B0aW9ucyxcbiAgU2lnbmFsRXZlbnRzT3B0aW9ucyxcbiAgU2lnbmFsLFxuICBTaWduYWxTdGF0cyxcbiAgU2lnbmFsVHJlbmRQb2ludCxcbiAgU2lnbmFsRXZlbnQsXG59IGZyb20gJy4vYXBpL3NpZ25hbHMnO1xuXG4vLyBSZS1leHBvcnQgTm90aWZpY2F0aW9ucyB0eXBlc1xuZXhwb3J0IHR5cGUge1xuICBOb3RpZmljYXRpb25SdWxlLFxuICBDcmVhdGVOb3RpZmljYXRpb25SdWxlRGF0YSxcbiAgVXBkYXRlTm90aWZpY2F0aW9uUnVsZURhdGEsXG4gIE5vdGlmaWNhdGlvbixcbn0gZnJvbSAnLi9hcGkvbm90aWZpY2F0aW9ucyc7XG5cbi8vIFJlLWV4cG9ydCBEb2N1bWVudHMgdHlwZXNcbmV4cG9ydCB0eXBlIHtcbiAgRG9jdW1lbnQsXG4gIERvY3VtZW50VXBsb2FkUmVzcG9uc2UsXG59IGZyb20gJy4vYXBpL2RvY3VtZW50cyc7XG5cbi8vIFJlLWV4cG9ydCBTaGFkb3cgVGVzdHMgdHlwZXNcbmV4cG9ydCB0eXBlIHtcbiAgQ3JlYXRlU2hhZG93VGVzdERhdGEsXG4gIFVwZGF0ZVNoYWRvd1Rlc3REYXRhLFxuICBTaGFkb3dUZXN0LFxufSBmcm9tICcuL2FwaS9zaGFkb3ctdGVzdHMnO1xuXG4vLyBSZS1leHBvcnQgU2Vzc2lvbnMgdHlwZXNcbmV4cG9ydCB0eXBlIHtcbiAgTGlzdFNlc3Npb25zT3B0aW9ucyxcbiAgU2Vzc2lvbixcbiAgU2Vzc2lvblRyYWNlIGFzIFNlc3Npb25UcmFjZVJlY29yZCxcbn0gZnJvbSAnLi9hcGkvc2Vzc2lvbnMnO1xuXG4vLyBSZS1leHBvcnQgRHJpZnQgdHlwZXNcbmV4cG9ydCB0eXBlIHtcbiAgRGV0ZWN0RHJpZnRPcHRpb25zLFxuICBEcmlmdFJlcG9ydCxcbiAgRHJpZnREaW1lbnNpb24sXG4gIERldGVjdEFsbFJlc3VsdCxcbn0gZnJvbSAnLi9hcGkvZHJpZnQnO1xuXG4vLyBSZS1leHBvcnQgTExNIENvc3RzIHR5cGVzXG5leHBvcnQgdHlwZSB7XG4gIENvc3RRdWVyeU9wdGlvbnMsXG4gIENvc3RTdW1tYXJ5LFxuICBDb3N0QnJlYWtkb3duSXRlbSxcbiAgQWdlbnRDb3N0QnJlYWtkb3duLFxuICBDb3N0U2F2aW5ncyxcbiAgT3B0aW1pemF0aW9uRW50cnksXG4gIE9wdGltaXphdGlvblN0YXRzLFxuICBPcHRpbWl6YXRpb25SZWNvbW1lbmRhdGlvbixcbn0gZnJvbSAnLi9hcGkvbGxtLWNvc3RzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gR0xPQkFMIFNUQVRFXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmxldCB0cmFjZXI6IFJldHVyblR5cGU8dHlwZW9mIHRyYWNlLmdldFRyYWNlcj4gfCBudWxsID0gbnVsbDtcbmxldCBwcm92aWRlcjogTm9kZVRyYWNlclByb3ZpZGVyIHwgbnVsbCA9IG51bGw7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIElOSVRJQUxJWkFUSU9OXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogSW5pdGlhbGl6ZSBUaGlua0hpdmUgU0RLIHYzXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IGluaXQgfSBmcm9tICdAdGhpbmtoaXZlL3Nkayc7XG4gKlxuICogaW5pdCh7XG4gKiAgIGFwaUtleTogJ3RoX3lvdXJfYXBpX2tleScsXG4gKiAgIHNlcnZpY2VOYW1lOiAnbXktYWktYWdlbnQnLFxuICogICBhdXRvSW5zdHJ1bWVudDogdHJ1ZSxcbiAqICAgZnJhbWV3b3JrczogWydsYW5nY2hhaW4nLCAnb3BlbmFpJ10sXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5pdChvcHRpb25zOiBpbXBvcnQoJy4vY29yZS90eXBlcycpLkluaXRPcHRpb25zID0ge30pOiB2b2lkIHtcbiAgaWYgKGlzSW5pdGlhbGl6ZWQoKSkge1xuICAgIGRlYnVnTG9nKCdUaGlua0hpdmUgU0RLIGFscmVhZHkgaW5pdGlhbGl6ZWQnKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBjb25maWcgPSBpbml0Q29uZmlnKG9wdGlvbnMpO1xuXG4gIC8vIENvbmZpZ3VyZSBPVExQIGV4cG9ydGVyXG4gIGNvbnN0IGV4cG9ydGVySGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBpZiAoY29uZmlnLmFwaUtleSkge1xuICAgIGV4cG9ydGVySGVhZGVyc1snQXV0aG9yaXphdGlvbiddID0gYEJlYXJlciAke2NvbmZpZy5hcGlLZXl9YDtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnT1RMUCB0cmFjaW5nIHJlcXVpcmVzIGFuIEFQSSBrZXkuIEFnZW50IElEIGFsb25lIGlzIG5vdCBzdWZmaWNpZW50IGZvciBPVExQIGluZ2VzdGlvbi4gJyArXG4gICAgICAnUHJvdmlkZSBhcGlLZXkgaW4gaW5pdCgpIG9yIHNldCB0aGUgVEhJTktISVZFX0FQSV9LRVkgZW52aXJvbm1lbnQgdmFyaWFibGUuJ1xuICAgICk7XG4gIH1cblxuICBjb25zdCBvdGxwVXJsID0gY29uZmlnLmVuZHBvaW50LnJlcGxhY2UoL1xcLyskLywgJycpICsgJy92MS90cmFjZXMnO1xuICBjb25zdCBleHBvcnRlciA9IG5ldyBPVExQVHJhY2VFeHBvcnRlcih7XG4gICAgdXJsOiBvdGxwVXJsLFxuICAgIGhlYWRlcnM6IGV4cG9ydGVySGVhZGVycyxcbiAgfSk7XG5cbiAgLy8gQ3JlYXRlIE9wZW5UZWxlbWV0cnkgcmVzb3VyY2VcbiAgY29uc3QgcmVzb3VyY2UgPSBSZXNvdXJjZS5kZWZhdWx0KCkubWVyZ2UoXG4gICAgbmV3IFJlc291cmNlKHtcbiAgICAgICdzZXJ2aWNlLm5hbWUnOiBjb25maWcuc2VydmljZU5hbWUsXG4gICAgICAndGhpbmtoaXZlLnNkay52ZXJzaW9uJzogU0RLX1ZFUlNJT04sXG4gICAgICAndGhpbmtoaXZlLnNkay5sYW5ndWFnZSc6ICd0eXBlc2NyaXB0JyxcbiAgICB9KVxuICApO1xuXG4gIC8vIENyZWF0ZSBwcm92aWRlciB3aXRoIHNwYW4gcHJvY2Vzc29yXG4gIHByb3ZpZGVyID0gbmV3IE5vZGVUcmFjZXJQcm92aWRlcih7XG4gICAgcmVzb3VyY2UsXG4gICAgc3BhblByb2Nlc3NvcnM6IFtuZXcgQmF0Y2hTcGFuUHJvY2Vzc29yKGV4cG9ydGVyKV0sXG4gIH0pO1xuXG4gIC8vIFJlZ2lzdGVyIHByb3ZpZGVyXG4gIHByb3ZpZGVyLnJlZ2lzdGVyKCk7XG5cbiAgLy8gR2V0IHRyYWNlclxuICB0cmFjZXIgPSB0cmFjZS5nZXRUcmFjZXIoJ3RoaW5raGl2ZScsIFNES19WRVJTSU9OKTtcblxuICBpZiAoY29uZmlnLmRlYnVnKSB7XG4gICAgY29uc29sZS5sb2coYOKchSBUaGlua0hpdmUgU0RLIHYke1NES19WRVJTSU9OfSBpbml0aWFsaXplZGApO1xuICAgIGNvbnNvbGUubG9nKGAgICBFbmRwb2ludDogJHtjb25maWcuZW5kcG9pbnR9YCk7XG4gICAgY29uc29sZS5sb2coYCAgIFNlcnZpY2U6ICR7Y29uZmlnLnNlcnZpY2VOYW1lfWApO1xuICAgIGNvbnNvbGUubG9nKGAgICBBdXRvLWluc3RydW1lbnQ6ICR7Y29uZmlnLmF1dG9JbnN0cnVtZW50fWApO1xuICB9XG5cbiAgLy8gU2V0dXAgYXV0by1pbnN0cnVtZW50YXRpb24gaWYgZW5hYmxlZFxuICBpZiAoY29uZmlnLmF1dG9JbnN0cnVtZW50KSB7XG4gICAgc2V0dXBBdXRvSW5zdHJ1bWVudGF0aW9uKGNvbmZpZy5mcmFtZXdvcmtzKTtcbiAgfVxufVxuXG4vKipcbiAqIEdldCB0aGUgZ2xvYmFsIHRyYWNlclxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VHJhY2VyKCkge1xuICBpZiAoIXRyYWNlcikge1xuICAgIHRocm93IG5ldyBFcnJvcignVGhpbmtIaXZlIFNESyBub3QgaW5pdGlhbGl6ZWQuIENhbGwgaW5pdCgpIGZpcnN0LicpO1xuICB9XG4gIHJldHVybiB0cmFjZXI7XG59XG5cbi8qKlxuICogU2h1dGRvd24gdGhlIFNESyBhbmQgZmx1c2ggcGVuZGluZyBzcGFuc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2h1dGRvd24oKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChwcm92aWRlcikge1xuICAgIGF3YWl0IHByb3ZpZGVyLnNodXRkb3duKCk7XG4gICAgcHJvdmlkZXIgPSBudWxsO1xuICB9XG4gIHRyYWNlciA9IG51bGw7XG4gIHJlc2V0Q29uZmlnKCk7XG4gIGRlYnVnTG9nKCdUaGlua0hpdmUgU0RLIHNodXRkb3duIGNvbXBsZXRlJyk7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFRSQUNJTkcgRlVOQ1RJT05TXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogVHJhY2UgYW4gTExNIGNhbGxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyYWNlTExNPFQ+KFxuICBvcHRpb25zOiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIG1vZGVsTmFtZT86IHN0cmluZztcbiAgICBwcm92aWRlcj86IHN0cmluZztcbiAgICBpbnB1dD86IHVua25vd247XG4gIH0sXG4gIGZuOiAoKSA9PiBQcm9taXNlPFQ+XG4pOiBQcm9taXNlPFQ+IHtcbiAgY29uc3QgdCA9IGdldFRyYWNlcigpO1xuXG4gIHJldHVybiB0LnN0YXJ0QWN0aXZlU3BhbihcbiAgICBvcHRpb25zLm5hbWUsXG4gICAge1xuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAnb3BlbmluZmVyZW5jZS5zcGFuLmtpbmQnOiAnTExNJyxcbiAgICAgICAgJ2xsbS5tb2RlbF9uYW1lJzogb3B0aW9ucy5tb2RlbE5hbWUsXG4gICAgICAgICdsbG0ucHJvdmlkZXInOiBvcHRpb25zLnByb3ZpZGVyLFxuICAgICAgICAnaW5wdXQudmFsdWUnOiBvcHRpb25zLmlucHV0ID8gSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5pbnB1dCkuc3Vic3RyaW5nKDAsIDEwMDAwKSA6IHVuZGVmaW5lZCxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBhc3luYyAoc3BhbikgPT4ge1xuICAgICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZuKCk7XG4gICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKCdvdXRwdXQudmFsdWUnLCBKU09OLnN0cmluZ2lmeShyZXN1bHQpLnN1YnN0cmluZygwLCAxMDAwMCkpO1xuICAgICAgICBzcGFuLnNldFN0YXR1cyh7IGNvZGU6IFNwYW5TdGF0dXNDb2RlLk9LIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTtcbiAgICAgICAgc3Bhbi5zZXRTdGF0dXMoeyBjb2RlOiBTcGFuU3RhdHVzQ29kZS5FUlJPUiwgbWVzc2FnZSB9KTtcbiAgICAgICAgc3Bhbi5yZWNvcmRFeGNlcHRpb24oZXJyb3IgYXMgRXJyb3IpO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKCdkdXJhdGlvbl9tcycsIERhdGUubm93KCkgLSBzdGFydFRpbWUpO1xuICAgICAgICBzcGFuLmVuZCgpO1xuICAgICAgfVxuICAgIH1cbiAgKTtcbn1cblxuLyoqXG4gKiBUcmFjZSBhIHJldHJpZXZhbCBvcGVyYXRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyYWNlUmV0cmlldmFsPFQ+KFxuICBvcHRpb25zOiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHF1ZXJ5Pzogc3RyaW5nO1xuICAgIHRvcEs/OiBudW1iZXI7XG4gIH0sXG4gIGZuOiAoKSA9PiBQcm9taXNlPFQ+XG4pOiBQcm9taXNlPFQ+IHtcbiAgY29uc3QgdCA9IGdldFRyYWNlcigpO1xuXG4gIHJldHVybiB0LnN0YXJ0QWN0aXZlU3BhbihcbiAgICBvcHRpb25zLm5hbWUsXG4gICAge1xuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAnb3BlbmluZmVyZW5jZS5zcGFuLmtpbmQnOiAnUkVUUklFVkVSJyxcbiAgICAgICAgJ3JldHJpZXZhbC5xdWVyeSc6IG9wdGlvbnMucXVlcnksXG4gICAgICAgICdyZXRyaWV2YWwudG9wX2snOiBvcHRpb25zLnRvcEssXG4gICAgICB9LFxuICAgIH0sXG4gICAgYXN5bmMgKHNwYW4pID0+IHtcbiAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBmbigpO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHQpKSB7XG4gICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoJ3JldHJpZXZhbC5kb2N1bWVudF9jb3VudCcsIHJlc3VsdC5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHNwYW4uc2V0U3RhdHVzKHsgY29kZTogU3BhblN0YXR1c0NvZGUuT0sgfSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpO1xuICAgICAgICBzcGFuLnNldFN0YXR1cyh7IGNvZGU6IFNwYW5TdGF0dXNDb2RlLkVSUk9SLCBtZXNzYWdlIH0pO1xuICAgICAgICBzcGFuLnJlY29yZEV4Y2VwdGlvbihlcnJvciBhcyBFcnJvcik7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoJ2R1cmF0aW9uX21zJywgRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSk7XG4gICAgICAgIHNwYW4uZW5kKCk7XG4gICAgICB9XG4gICAgfVxuICApO1xufVxuXG4vKipcbiAqIFRyYWNlIGEgdG9vbCBjYWxsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmFjZVRvb2w8VD4oXG4gIG9wdGlvbnM6IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdG9vbE5hbWU/OiBzdHJpbmc7XG4gICAgcGFyYW1ldGVycz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICB9LFxuICBmbjogKCkgPT4gUHJvbWlzZTxUPlxuKTogUHJvbWlzZTxUPiB7XG4gIGNvbnN0IHQgPSBnZXRUcmFjZXIoKTtcblxuICByZXR1cm4gdC5zdGFydEFjdGl2ZVNwYW4oXG4gICAgb3B0aW9ucy50b29sTmFtZSB8fCBvcHRpb25zLm5hbWUsXG4gICAge1xuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAnb3BlbmluZmVyZW5jZS5zcGFuLmtpbmQnOiAnVE9PTCcsXG4gICAgICAgICd0b29sLm5hbWUnOiBvcHRpb25zLnRvb2xOYW1lIHx8IG9wdGlvbnMubmFtZSxcbiAgICAgICAgJ3Rvb2wucGFyYW1ldGVycyc6IG9wdGlvbnMucGFyYW1ldGVycyA/IEpTT04uc3RyaW5naWZ5KG9wdGlvbnMucGFyYW1ldGVycykgOiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgIH0sXG4gICAgYXN5bmMgKHNwYW4pID0+IHtcbiAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBmbigpO1xuICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZSgndG9vbC5vdXRwdXQnLCBKU09OLnN0cmluZ2lmeShyZXN1bHQpLnN1YnN0cmluZygwLCAxMDAwMCkpO1xuICAgICAgICBzcGFuLnNldFN0YXR1cyh7IGNvZGU6IFNwYW5TdGF0dXNDb2RlLk9LIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTtcbiAgICAgICAgc3Bhbi5zZXRTdGF0dXMoeyBjb2RlOiBTcGFuU3RhdHVzQ29kZS5FUlJPUiwgbWVzc2FnZSB9KTtcbiAgICAgICAgc3Bhbi5yZWNvcmRFeGNlcHRpb24oZXJyb3IgYXMgRXJyb3IpO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKCdkdXJhdGlvbl9tcycsIERhdGUubm93KCkgLSBzdGFydFRpbWUpO1xuICAgICAgICBzcGFuLmVuZCgpO1xuICAgICAgfVxuICAgIH1cbiAgKTtcbn1cblxuLyoqXG4gKiBUcmFjZSBhIGNoYWluL3dvcmtmbG93XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmFjZUNoYWluPFQ+KFxuICBvcHRpb25zOiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGlucHV0PzogdW5rbm93bjtcbiAgfSxcbiAgZm46ICgpID0+IFByb21pc2U8VD5cbik6IFByb21pc2U8VD4ge1xuICBjb25zdCB0ID0gZ2V0VHJhY2VyKCk7XG5cbiAgcmV0dXJuIHQuc3RhcnRBY3RpdmVTcGFuKFxuICAgIG9wdGlvbnMubmFtZSxcbiAgICB7XG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICdvcGVuaW5mZXJlbmNlLnNwYW4ua2luZCc6ICdDSEFJTicsXG4gICAgICAgICdpbnB1dC52YWx1ZSc6IG9wdGlvbnMuaW5wdXQgPyBKU09OLnN0cmluZ2lmeShvcHRpb25zLmlucHV0KS5zdWJzdHJpbmcoMCwgMTAwMDApIDogdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGFzeW5jIChzcGFuKSA9PiB7XG4gICAgICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZm4oKTtcbiAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoJ291dHB1dC52YWx1ZScsIEpTT04uc3RyaW5naWZ5KHJlc3VsdCkuc3Vic3RyaW5nKDAsIDEwMDAwKSk7XG4gICAgICAgIHNwYW4uc2V0U3RhdHVzKHsgY29kZTogU3BhblN0YXR1c0NvZGUuT0sgfSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpO1xuICAgICAgICBzcGFuLnNldFN0YXR1cyh7IGNvZGU6IFNwYW5TdGF0dXNDb2RlLkVSUk9SLCBtZXNzYWdlIH0pO1xuICAgICAgICBzcGFuLnJlY29yZEV4Y2VwdGlvbihlcnJvciBhcyBFcnJvcik7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoJ2R1cmF0aW9uX21zJywgRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSk7XG4gICAgICAgIHNwYW4uZW5kKCk7XG4gICAgICB9XG4gICAgfVxuICApO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBWMiBURVJNSU5PTE9HWSAtIElTU1VFUyBBUEkgKHJlcGxhY2VzIENhc2VzKVxuLy8gUGVyIElUSUwgYmVzdCBwcmFjdGljZXMsIFwiSXNzdWVzXCIgaXMgbW9yZSBjdXN0b21lci1mcmllbmRseSB0aGFuIFwiQ2FzZXNcIlxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIElzc3VlcyBBUEkgY2xpZW50XG4gKiBUaGlzIGlzIHRoZSByZWNvbW1lbmRlZCBBUEkgZm9yIG1hbmFnaW5nIGNsdXN0ZXJlZCBmYWlsdXJlIHBhdHRlcm5zXG4gKlxuICogQHNpbmNlIDMuMS4wXG4gKi9cbmV4cG9ydCBjb25zdCBpc3N1ZXMgPSB7XG4gIC8qKlxuICAgKiBMaXN0IGlzc3VlcyBmb3IgYW4gYWdlbnRcbiAgICovXG4gIGFzeW5jIGxpc3QoYWdlbnRJZDogc3RyaW5nLCBvcHRpb25zPzoge1xuICAgIHN0YXR1cz86IHN0cmluZztcbiAgICBzdGFydERhdGU/OiBEYXRlO1xuICAgIGVuZERhdGU/OiBEYXRlO1xuICAgIGxpbWl0PzogbnVtYmVyO1xuICAgIG9mZnNldD86IG51bWJlcjtcbiAgfSk6IFByb21pc2U8YW55W10+IHtcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHsgYWdlbnRJZCB9KTtcbiAgICBpZiAob3B0aW9ucz8uc3RhdHVzKSBwYXJhbXMuc2V0KCdzdGF0dXMnLCBvcHRpb25zLnN0YXR1cyk7XG4gICAgaWYgKG9wdGlvbnM/LnN0YXJ0RGF0ZSkgcGFyYW1zLnNldCgnc3RhcnREYXRlJywgb3B0aW9ucy5zdGFydERhdGUudG9JU09TdHJpbmcoKSk7XG4gICAgaWYgKG9wdGlvbnM/LmVuZERhdGUpIHBhcmFtcy5zZXQoJ2VuZERhdGUnLCBvcHRpb25zLmVuZERhdGUudG9JU09TdHJpbmcoKSk7XG4gICAgaWYgKG9wdGlvbnM/LmxpbWl0KSBwYXJhbXMuc2V0KCdsaW1pdCcsIG9wdGlvbnMubGltaXQudG9TdHJpbmcoKSk7XG4gICAgaWYgKG9wdGlvbnM/Lm9mZnNldCkgcGFyYW1zLnNldCgnb2Zmc2V0Jywgb3B0aW9ucy5vZmZzZXQudG9TdHJpbmcoKSk7XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGFwaVJlcXVlc3RXaXRoRGF0YShgL2lzc3Vlcz8ke3BhcmFtc31gLCB7IGFwaVZlcnNpb246ICd2MicgfSk7XG4gICAgcmV0dXJuIChyZXNwb25zZSBhcyBhbnkpLmRhdGEgfHwgcmVzcG9uc2U7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEdldCBhIHNpbmdsZSBpc3N1ZSBieSBJRFxuICAgKi9cbiAgYXN5bmMgZ2V0KGlkOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXBpUmVxdWVzdFdpdGhEYXRhKGAvaXNzdWVzLyR7aWR9YCwgeyBhcGlWZXJzaW9uOiAndjInIH0pO1xuICAgIHJldHVybiAocmVzcG9uc2UgYXMgYW55KS5kYXRhIHx8IHJlc3BvbnNlO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgaXNzdWVcbiAgICovXG4gIGFzeW5jIGNyZWF0ZShkYXRhOiB7XG4gICAgYWdlbnRJZDogc3RyaW5nO1xuICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gICAgdHlwZTogc3RyaW5nO1xuICAgIHNldmVyaXR5Pzogc3RyaW5nO1xuICAgIHBhdHRlcm4/OiBzdHJpbmc7XG4gICAgZXhhbXBsZVRyYWNlSWRzPzogc3RyaW5nW107XG4gIH0pOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXBpUmVxdWVzdFdpdGhEYXRhKCcvaXNzdWVzJywge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBkYXRhLFxuICAgICAgYXBpVmVyc2lvbjogJ3YyJyxcbiAgICB9KTtcbiAgICByZXR1cm4gKHJlc3BvbnNlIGFzIGFueSkuZGF0YSB8fCByZXNwb25zZTtcbiAgfSxcblxuICAvKipcbiAgICogVXBkYXRlIGFuIGlzc3VlXG4gICAqL1xuICBhc3luYyB1cGRhdGUoaWQ6IHN0cmluZywgZGF0YToge1xuICAgIHRpdGxlPzogc3RyaW5nO1xuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAgIHN0YXR1cz86IHN0cmluZztcbiAgICBzZXZlcml0eT86IHN0cmluZztcbiAgICBhc3NpZ25lZFRvPzogc3RyaW5nO1xuICAgIHJlc29sdXRpb25Ob3Rlcz86IHN0cmluZztcbiAgfSk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBhcGlSZXF1ZXN0V2l0aERhdGEoYC9pc3N1ZXMvJHtpZH1gLCB7XG4gICAgICBtZXRob2Q6ICdQQVRDSCcsXG4gICAgICBib2R5OiBkYXRhLFxuICAgICAgYXBpVmVyc2lvbjogJ3YyJyxcbiAgICB9KTtcbiAgICByZXR1cm4gKHJlc3BvbnNlIGFzIGFueSkuZGF0YSB8fCByZXNwb25zZTtcbiAgfSxcblxuICAvKipcbiAgICogR2V0IGZpeGVzIGZvciBhbiBpc3N1ZVxuICAgKi9cbiAgYXN5bmMgZ2V0Rml4ZXMoaXNzdWVJZDogc3RyaW5nKTogUHJvbWlzZTxhbnlbXT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXBpUmVxdWVzdFdpdGhEYXRhKGAvaXNzdWVzLyR7aXNzdWVJZH0vZml4ZXNgLCB7IGFwaVZlcnNpb246ICd2MicgfSk7XG4gICAgcmV0dXJuIChyZXNwb25zZSBhcyBhbnkpLmRhdGEgfHwgcmVzcG9uc2U7XG4gIH0sXG59O1xuXG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFYyIFRFUk1JTk9MT0dZIC0gQU5BTFlaRVIgQVBJIChyZXBsYWNlcyBFeHBsYWluZXIgdXNlci1mYWNpbmcpXG4vLyBQZXIgaW5kdXN0cnkgZGlzdGluY3Rpb246IEFuYWx5emVyID0gcGF0dGVybiBkZXRlY3Rpb24vb2JzZXJ2YXRpb25cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBBbmFseXplciBBUEkgY2xpZW50XG4gKiBVc2VyLXNlbGVjdGVkIHRyYWNlIGFuYWx5c2lzIHdpdGggY29zdCBlc3RpbWF0aW9uIGFuZCBzbWFydCBzYW1wbGluZ1xuICpcbiAqIEtleSBpbXByb3ZlbWVudHMgb3ZlciB2MSBFeHBsYWluZXI6XG4gKiAtIFVzZXItc2VsZWN0ZWQgdHJhY2UgYW5hbHlzaXMgKG5vdCBhdXRvbWF0aWMpXG4gKiAtIENvc3QgZXN0aW1hdGlvbiBiZWZvcmUgZXhlY3V0aW9uXG4gKiAtIFNtYXJ0IHNhbXBsaW5nIHN0cmF0ZWdpZXNcbiAqIC0gUm9vdCBjYXVzZSBhbmFseXNpcyBieSBsYXllclxuICogLSBQYXR0ZXJuIGFnZ3JlZ2F0aW9uIGFjcm9zcyB0cmFjZXNcbiAqXG4gKiBAc2luY2UgMy4xLjBcbiAqL1xuZXhwb3J0IGNvbnN0IGFuYWx5emVyID0ge1xuICAvKipcbiAgICogQW5hbHl6ZSBzcGVjaWZpYyB0cmFjZXMgKHVzZXItc2VsZWN0ZWQpXG4gICAqL1xuICBhc3luYyBhbmFseXplKG9wdGlvbnM6IHtcbiAgICB0cmFjZUlkczogc3RyaW5nW107XG4gICAgdGllcj86ICdmYXN0JyB8ICdzdGFuZGFyZCcgfCAnZGVlcCc7XG4gICAgaW5jbHVkZVJvb3RDYXVzZT86IGJvb2xlYW47XG4gICAgaW5jbHVkZUxheWVycz86IGJvb2xlYW47XG4gIH0pOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHsgdHJhY2VJZHMsIHRpZXIsIGluY2x1ZGVSb290Q2F1c2UsIGluY2x1ZGVMYXllcnMgfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBhcGlSZXF1ZXN0V2l0aERhdGEoJy9hbmFseXplci9hbmFseXplJywge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiB7XG4gICAgICAgIHRyYWNlSWRzLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgdGllcixcbiAgICAgICAgICBpbmNsdWRlUm9vdENhdXNlLFxuICAgICAgICAgIGluY2x1ZGVMYXllcnMsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgYXBpVmVyc2lvbjogJ3YyJyxcbiAgICB9KTtcbiAgICByZXR1cm4gKHJlc3BvbnNlIGFzIGFueSkuZGF0YSB8fCByZXNwb25zZTtcbiAgfSxcblxuICAvKipcbiAgICogQW5hbHl6ZSB0cmFjZXMgYnkgdGltZSB3aW5kb3dcbiAgICovXG4gIGFzeW5jIGFuYWx5emVXaW5kb3cob3B0aW9uczoge1xuICAgIGFnZW50SWQ6IHN0cmluZztcbiAgICBzdGFydERhdGU6IERhdGU7XG4gICAgZW5kRGF0ZTogRGF0ZTtcbiAgICBmaWx0ZXJzPzoge1xuICAgICAgb3V0Y29tZXM/OiAoJ2ZhaWx1cmUnIHwgJ2Vycm9yJyB8ICdzdWNjZXNzJylbXTtcbiAgICAgIG1pblNldmVyaXR5PzogJ2xvdycgfCAnbWVkaXVtJyB8ICdoaWdoJyB8ICdjcml0aWNhbCc7XG4gICAgfTtcbiAgICBzYW1wbGluZz86IHtcbiAgICAgIHN0cmF0ZWd5OiAnYWxsJyB8ICdmYWlsdXJlc19vbmx5JyB8ICdzbWFydCcgfCAncmFuZG9tJztcbiAgICAgIHNhbXBsZVBlcmNlbnQ/OiBudW1iZXI7XG4gICAgfTtcbiAgfSk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBhcGlSZXF1ZXN0V2l0aERhdGEoJy9hbmFseXplci9hbmFseXplLXdpbmRvdycsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keToge1xuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICBzdGFydERhdGU6IG9wdGlvbnMuc3RhcnREYXRlLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIGVuZERhdGU6IG9wdGlvbnMuZW5kRGF0ZS50b0lTT1N0cmluZygpLFxuICAgICAgfSxcbiAgICAgIGFwaVZlcnNpb246ICd2MicsXG4gICAgfSk7XG4gICAgcmV0dXJuIChyZXNwb25zZSBhcyBhbnkpLmRhdGEgfHwgcmVzcG9uc2U7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEVzdGltYXRlIGNvc3QgYmVmb3JlIHJ1bm5pbmcgYW5hbHlzaXNcbiAgICovXG4gIGFzeW5jIGVzdGltYXRlQ29zdChvcHRpb25zOiB7XG4gICAgdHJhY2VJZHM/OiBzdHJpbmdbXTtcbiAgICBhZ2VudElkPzogc3RyaW5nO1xuICAgIHN0YXJ0RGF0ZT86IERhdGU7XG4gICAgZW5kRGF0ZT86IERhdGU7XG4gICAgdGllcjogJ2Zhc3QnIHwgJ3N0YW5kYXJkJyB8ICdkZWVwJztcbiAgfSk6IFByb21pc2U8e1xuICAgIGVzdGltYXRlZFRyYWNlczogbnVtYmVyO1xuICAgIGVzdGltYXRlZFRva2VuczogbnVtYmVyO1xuICAgIGVzdGltYXRlZENvc3Q6IG51bWJlcjtcbiAgICBlc3RpbWF0ZWRDcmVkaXRzOiBudW1iZXI7XG4gICAgdGllcjogc3RyaW5nO1xuICAgIG5vdGU6IHN0cmluZztcbiAgfT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXBpUmVxdWVzdFdpdGhEYXRhKCcvYW5hbHl6ZXIvZXN0aW1hdGUtY29zdCcsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keToge1xuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICBzdGFydERhdGU6IG9wdGlvbnMuc3RhcnREYXRlPy50b0lTT1N0cmluZygpLFxuICAgICAgICBlbmREYXRlOiBvcHRpb25zLmVuZERhdGU/LnRvSVNPU3RyaW5nKCksXG4gICAgICB9LFxuICAgICAgYXBpVmVyc2lvbjogJ3YyJyxcbiAgICB9KTtcbiAgICByZXR1cm4gKHJlc3BvbnNlIGFzIGFueSkuZGF0YSB8fCByZXNwb25zZTtcbiAgfSxcblxuICAvKipcbiAgICogR2V0IGFuYWx5c2lzIHJlc3VsdHMgZm9yIGEgc3BlY2lmaWMgdHJhY2VcbiAgICovXG4gIGFzeW5jIGdldCh0cmFjZUlkOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXBpUmVxdWVzdFdpdGhEYXRhKGAvYW5hbHl6ZXIvJHt0cmFjZUlkfWAsIHsgYXBpVmVyc2lvbjogJ3YyJyB9KTtcbiAgICByZXR1cm4gKHJlc3BvbnNlIGFzIGFueSkuZGF0YSB8fCByZXNwb25zZTtcbiAgfSxcblxuICAvKipcbiAgICogQWdncmVnYXRlIGluc2lnaHRzIGFjcm9zcyBtdWx0aXBsZSBhbmFseXplZCB0cmFjZXNcbiAgICovXG4gIGFzeW5jIHN1bW1hcml6ZShvcHRpb25zOiB7XG4gICAgYW5hbHlzaXNJZHM/OiBzdHJpbmdbXTtcbiAgICBhZ2VudElkPzogc3RyaW5nO1xuICAgIHN0YXJ0RGF0ZT86IERhdGU7XG4gICAgZW5kRGF0ZT86IERhdGU7XG4gIH0pOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXBpUmVxdWVzdFdpdGhEYXRhKCcvYW5hbHl6ZXIvc3VtbWFyaXplJywge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiB7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIHN0YXJ0RGF0ZTogb3B0aW9ucy5zdGFydERhdGU/LnRvSVNPU3RyaW5nKCksXG4gICAgICAgIGVuZERhdGU6IG9wdGlvbnMuZW5kRGF0ZT8udG9JU09TdHJpbmcoKSxcbiAgICAgIH0sXG4gICAgICBhcGlWZXJzaW9uOiAndjInLFxuICAgIH0pO1xuICAgIHJldHVybiAocmVzcG9uc2UgYXMgYW55KS5kYXRhIHx8IHJlc3BvbnNlO1xuICB9LFxufTtcblxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBBVVRPLUlOU1RSVU1FTlRBVElPTlxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5mdW5jdGlvbiBzZXR1cEF1dG9JbnN0cnVtZW50YXRpb24oXG4gIGZyYW1ld29ya3M6IGltcG9ydCgnLi9jb3JlL3R5cGVzJykuRnJhbWV3b3JrW11cbik6IHZvaWQge1xuICBkZWJ1Z0xvZyhgU2V0dGluZyB1cCBhdXRvLWluc3RydW1lbnRhdGlvbiBmb3I6ICR7ZnJhbWV3b3Jrcy5qb2luKCcsICcpfWApO1xuXG4gIGZvciAoY29uc3QgZnJhbWV3b3JrIG9mIGZyYW1ld29ya3MpIHtcbiAgICB0cnkge1xuICAgICAgc3dpdGNoIChmcmFtZXdvcmspIHtcbiAgICAgICAgY2FzZSAnb3BlbmFpJzpcbiAgICAgICAgY2FzZSAnb3BlbmFpLWFzc2lzdGFudHMnOlxuICAgICAgICAgIGRlYnVnTG9nKCdPcGVuQUkgaW5zdHJ1bWVudGF0aW9uIHJlYWR5ICh1c2UgaW5zdHJ1bWVudE9wZW5BSUNsaWVudCknKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbGFuZ2NoYWluJzpcbiAgICAgICAgY2FzZSAnbGFuZ2dyYXBoJzpcbiAgICAgICAgICBkZWJ1Z0xvZygnTGFuZ0NoYWluL0xhbmdHcmFwaCBpbnN0cnVtZW50YXRpb24gcmVhZHkgKHVzZSBUaGlua0hpdmVDYWxsYmFja0hhbmRsZXIpJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2FudGhyb3BpYyc6XG4gICAgICAgICAgZGVidWdMb2coJ0FudGhyb3BpYyBpbnN0cnVtZW50YXRpb24gcmVhZHknKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbGxhbWFpbmRleCc6XG4gICAgICAgICAgZGVidWdMb2coJ0xsYW1hSW5kZXggaW5zdHJ1bWVudGF0aW9uIHJlYWR5Jyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ244bic6XG4gICAgICAgICAgZGVidWdMb2coJ244biBpbnN0cnVtZW50YXRpb24gcmVhZHknKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAndm9pY2VmbG93JzpcbiAgICAgICAgICBkZWJ1Z0xvZygnVm9pY2VmbG93IGluc3RydW1lbnRhdGlvbiByZWFkeScpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBkZWJ1Z0xvZyhgRmFpbGVkIHRvIHNldHVwICR7ZnJhbWV3b3JrfSBpbnN0cnVtZW50YXRpb246YCwgZXJyb3IpO1xuICAgIH1cbiAgfVxufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBSRS1FWFBPUlRTIChub24tZHVwbGljYXRlZClcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLy8gUmUtZXhwb3J0IGZyb20gY29uZmlnIChub3QgeWV0IGV4cG9ydGVkKVxuZXhwb3J0IHsgaXNJbml0aWFsaXplZCwgU0RLX1ZFUlNJT04sIERFRkFVTFRfRU5EUE9JTlQgfTtcblxuLy8gUmUtZXhwb3J0IEFQSSBjbGllbnRzICh2MylcbmV4cG9ydCB7XG4gIHJ1bnMsXG4gIGNsYWltcyxcbiAgY2FsaWJyYXRpb24sXG4gIGxpbmtpbmcsXG4gIGN1c3RvbWVyQ29udGV4dCxcbiAgLy8gTmV3IGV2YWx1YXRpb24gQVBJc1xuICBodW1hblJldmlldyxcbiAgbm9uZGV0ZXJtaW5pc20sXG4gIGV2YWxIZWFsdGgsXG4gIGRldGVybWluaXN0aWNHcmFkZXJzLFxuICBjb252ZXJzYXRpb25FdmFsLFxuICB0cmFuc2NyaXB0UGF0dGVybnMsXG4gIC8vIEFQSSBLZXkgTWFuYWdlbWVudCAoUGhhc2UgMiBTZWN1cml0eSlcbiAgYXBpS2V5cyxcbiAgLy8gQWdlbnRzIE1hbmFnZW1lbnRcbiAgYWdlbnRzLFxuICAvLyBST0kgQW5hbHl0aWNzLCBRdWFsaXR5IE1ldHJpY3MsIGFuZCBCdXNpbmVzcyBNZXRyaWNzXG4gIHJvaUFuYWx5dGljcyxcbiAgcXVhbGl0eU1ldHJpY3MsXG4gIGJ1c2luZXNzTWV0cmljcyxcbiAgLy8gRXZhbCBSdW5zLCBTaWduYWxzLCBOb3RpZmljYXRpb25zLCBEb2N1bWVudHMsIFNoYWRvdyBUZXN0cywgU2Vzc2lvbnMsIERyaWZ0LCBMTE0gQ29zdHNcbiAgZXZhbFJ1bnMsXG4gIHNpZ25hbHMsXG4gIG5vdGlmaWNhdGlvbnMsXG4gIGRvY3VtZW50cyxcbiAgc2hhZG93VGVzdHMsXG4gIHNlc3Npb25zLFxuICBkcmlmdCxcbiAgbGxtQ29zdHMsXG4gIC8vIEd1YXJkcmFpbHNcbiAgZ3VhcmRyYWlscyxcbn07XG5cbi8vIE5vdGU6IGlzc3VlcywgYW5hbHl6ZXIsIGFuZCBndWFyZHJhaWxzIGFyZSBhbHJlYWR5IGV4cG9ydGVkIHZpYSAnZXhwb3J0IGNvbnN0JyBhYm92ZVxuXG4vLyBSZS1leHBvcnQgaGVscGVyIGZ1bmN0aW9uc1xuZXhwb3J0IHtcbiAgLy8gUnVucyBoZWxwZXJzXG4gIGNyZWF0ZVJ1bldpdGhDb250ZXh0LFxuICB0b09wZW5BSU1lc3NhZ2VzLFxuICBmcm9tT3BlbkFJTWVzc2FnZXMsXG4gIC8vIENsYWltcyBoZWxwZXJzXG4gIGlzRmFjdCxcbiAgaXNJbmZlcmVuY2UsXG4gIGlzQ29tcHV0ZWQsXG4gIGdldEhpZ2hDb25maWRlbmNlQ2xhaW1zLFxuICBncm91cENsYWltc0J5VHlwZSxcbiAgZ3JvdXBDbGFpbXNCeUNhdGVnb3J5LFxuICAvLyBDYWxpYnJhdGlvbiBoZWxwZXJzXG4gIGNhbGN1bGF0ZUJyaWVyU2NvcmUsXG4gIGNhbGN1bGF0ZUVDRSxcbiAgaXNXZWxsQ2FsaWJyYXRlZCxcbiAgZ2V0Q2FsaWJyYXRpb25RdWFsaXR5LFxuICAvLyBMaW5raW5nIGhlbHBlcnNcbiAgZ2VuZXJhdGVaZW5kZXNrTWFya2VyLFxuICBwYXJzZVplbmRlc2tNYXJrZXIsXG4gIGhhc1plbmRlc2tNYXJrZXIsXG4gIHJlbW92ZVplbmRlc2tNYXJrZXIsXG4gIGxpbmtSdW5Ub1RpY2tldCxcbiAgbGlua1J1blRvWmVuZGVza1RpY2tldCxcbiAgZ2V0QmVzdExpbmtNZXRob2QsXG4gIExJTktfTUVUSE9EX0NPTkZJREVOQ0UsXG4gIC8vIEN1c3RvbWVyIGNvbnRleHQgaGVscGVyc1xuICBjYXB0dXJlQ3VzdG9tZXJDb250ZXh0LFxuICBnZXRDb250ZXh0QXNPZixcbiAgdG9Db250ZXh0U25hcHNob3QsXG4gIGNhbGN1bGF0ZUFyckNoYW5nZSxcbiAgY2FsY3VsYXRlSGVhbHRoVHJlbmQsXG4gIC8vIE5vbi1kZXRlcm1pbmlzbSBoZWxwZXJzXG4gIGNhbGN1bGF0ZVBhc3NBdEssXG4gIGNhbGN1bGF0ZVBhc3NUb0ssXG4gIHJlcXVpcmVkUGFzc1JhdGVGb3JQYXNzQXRLLFxuICBpc1JlbGlhYmxlRXZhbHVhdGlvbixcbiAgZ2V0UmVsaWFiaWxpdHlSZWNvbW1lbmRhdGlvbixcbiAgLy8gRXZhbCBoZWFsdGggaGVscGVyc1xuICBoYXNIZWFsdGhJc3N1ZSxcbiAgZ2V0SGVhbHRoU2V2ZXJpdHlMZXZlbCxcbiAgaXNTYXR1cmF0ZWQsXG4gIGdldFNhdHVyYXRpb25SZWNvbW1lbmRhdGlvbixcbiAgLy8gRGV0ZXJtaW5pc3RpYyBncmFkZXJzIGhlbHBlcnNcbiAgY3JlYXRlUmVnZXhSdWxlLFxuICBjcmVhdGVDb250YWluc1J1bGUsXG4gIGNyZWF0ZUxlbmd0aFJ1bGUsXG4gIGNyZWF0ZUpzb25TY2hlbWFSdWxlLFxuICBhbGxSdWxlc1Bhc3NlZCxcbiAgZ2V0RmFpbGVkUnVsZXMsXG4gIGNhbGN1bGF0ZUF2ZXJhZ2VTY29yZSxcbiAgLy8gQ29udmVyc2F0aW9uIGV2YWwgaGVscGVyc1xuICBhZ2dyZWdhdGVXb3JzdCxcbiAgYWdncmVnYXRlQXZlcmFnZSxcbiAgYWdncmVnYXRlV2VpZ2h0ZWQsXG4gIGFnZ3JlZ2F0ZUZpbmFsVHVybixcbiAgYWdncmVnYXRlTWFqb3JpdHksXG4gIGdldEFnZ3JlZ2F0b3IsXG4gIGdldFByb2JsZW1hdGljVHVybnMsXG4gIGFuYWx5emVDb252ZXJzYXRpb25UcmVuZCxcbiAgLy8gVHJhbnNjcmlwdCBwYXR0ZXJucyBoZWxwZXJzXG4gIGlzSGlnaFJpc2ssXG4gIGdldE1hdGNoZXNCeUNhdGVnb3J5LFxuICBnZXRDcml0aWNhbEluc2lnaHRzLFxuICBoYXNQaWlFeHBvc3VyZSxcbiAgaGFzRnJ1c3RyYXRpb25TaWduYWxzLFxuICBoYXNFc2NhbGF0aW9uUmVxdWVzdCxcbiAgZ2V0Q2F0ZWdvcnlEaXN0cmlidXRpb24sXG4gIGdldFJlY29tbWVuZGF0aW9ucyxcbiAgbmVlZHNBdHRlbnRpb24sXG4gIHNvcnRNYXRjaGVzQnlTZXZlcml0eSxcbiAgLy8gQVBJIEtleSBoZWxwZXJzXG4gIGhhc1Blcm1pc3Npb24sXG4gIGlzQXBpS2V5RXhwaXJlZCxcbiAgaXNBcGlLZXlWYWxpZCxcbiAgZ2V0VGltZVVudGlsRXhwaXJ5LFxuICBjYW5BY2Nlc3NBZ2VudCxcbiAgLy8gUk9JIEFuYWx5dGljcyBoZWxwZXJzXG4gIGNhbGN1bGF0ZVJldmVudWVBdFJpc2ssXG4gIGNhbGN1bGF0ZUF1dG9tYXRpb25TYXZpbmdzLFxuICBmb3JtYXRDdXJyZW5jeSxcbiAgZ2V0Uk9JUXVhbGl0eSxcbiAgLy8gUXVhbGl0eSBNZXRyaWNzIGhlbHBlcnNcbiAgcGFzc2VzUXVhbGl0eVRocmVzaG9sZCxcbiAgaXNIYWxsdWNpbmF0aW9uUmlza0FjY2VwdGFibGUsXG4gIGdldFF1YWxpdHlSZWNvbW1lbmRhdGlvbnMsXG4gIGZvcm1hdFF1YWxpdHlTY29yZSxcbiAgZ2V0R3JhZGVDb2xvcixcbiAgLy8gQnVzaW5lc3MgTWV0cmljcyBoZWxwZXJzXG4gIGlzTWV0cmljUmVhZHksXG4gIG5lZWRzTW9yZVRyYWNlcyxcbiAgYXdhaXRpbmdFeHRlcm5hbERhdGEsXG4gIGlzTWV0cmljU3RhbGUsXG4gIGdldFN0YXR1c01lc3NhZ2UsXG4gIGdldFRyYWNlUHJvZ3Jlc3MsXG4gIGZvcm1hdE1ldHJpY1ZhbHVlLFxuICBnZXRUcmVuZEVtb2ppLFxuICAvLyBEcmlmdCBoZWxwZXJzXG4gIGhhc0RyaWZ0LFxuICBnZXREcmlmdFNldmVyaXR5LFxuICAvLyBMTE0gQ29zdHMgaGVscGVyc1xuICBmb3JtYXRMTE1Db3N0LFxufTtcblxuLy8gUmUtZXhwb3J0IEd1YXJkcmFpbHNcbmV4cG9ydCB7IHR5cGUgU2NhblJlcXVlc3QsIHR5cGUgU2NhblJlc3BvbnNlLCB0eXBlIEZpbmRpbmcsIHR5cGUgU2Nhbm5lclJlc3VsdCB9IGZyb20gJy4vZ3VhcmRyYWlscyc7XG5cbi8vIFJlLWV4cG9ydCBlcnJvcnMgKGluY2x1ZGluZyBuZXcgc2VjdXJpdHkgZXJyb3JzKVxuZXhwb3J0IHtcbiAgVGhpbmtIaXZlRXJyb3IsXG4gIFRoaW5rSGl2ZUFwaUVycm9yLFxuICBUaGlua0hpdmVWYWxpZGF0aW9uRXJyb3IsXG4gIFBlcm1pc3Npb25EZW5pZWRFcnJvcixcbiAgQWdlbnRTY29wZUVycm9yLFxuICBSYXRlTGltaXRFcnJvcixcbiAgSXBXaGl0ZWxpc3RFcnJvcixcbn07XG5cbi8vIERlZmF1bHQgZXhwb3J0IGZvciBjb252ZW5pZW5jZVxuZXhwb3J0IGRlZmF1bHQge1xuICBpbml0LFxuICBnZXRUcmFjZXIsXG4gIHNodXRkb3duLFxuICBpc0luaXRpYWxpemVkLFxuICAvLyBUcmFjaW5nXG4gIHRyYWNlTExNLFxuICB0cmFjZVJldHJpZXZhbCxcbiAgdHJhY2VUb29sLFxuICB0cmFjZUNoYWluLFxuICAvLyBBUEkgY2xpZW50c1xuICBydW5zLFxuICBjbGFpbXMsXG4gIGNhbGlicmF0aW9uLFxuICBsaW5raW5nLFxuICBjdXN0b21lckNvbnRleHQsXG4gIC8vIEV2YWx1YXRpb24gQVBJc1xuICBodW1hblJldmlldyxcbiAgbm9uZGV0ZXJtaW5pc20sXG4gIGV2YWxIZWFsdGgsXG4gIGRldGVybWluaXN0aWNHcmFkZXJzLFxuICBjb252ZXJzYXRpb25FdmFsLFxuICB0cmFuc2NyaXB0UGF0dGVybnMsXG4gIC8vIEFQSSBLZXkgTWFuYWdlbWVudCAoUGhhc2UgMiBTZWN1cml0eSlcbiAgYXBpS2V5cyxcbiAgLy8gQWdlbnRzIE1hbmFnZW1lbnRcbiAgYWdlbnRzLFxuICAvLyBJc3N1ZXMgYW5kIEFuYWx5emVyIEFQSXNcbiAgaXNzdWVzLFxuICBhbmFseXplcixcbiAgLy8gUk9JIEFuYWx5dGljcywgUXVhbGl0eSBNZXRyaWNzLCBhbmQgQnVzaW5lc3MgTWV0cmljc1xuICByb2lBbmFseXRpY3MsXG4gIHF1YWxpdHlNZXRyaWNzLFxuICBidXNpbmVzc01ldHJpY3MsXG4gIC8vIEV2YWwgUnVucywgU2lnbmFscywgTm90aWZpY2F0aW9ucywgRG9jdW1lbnRzLCBTaGFkb3cgVGVzdHMsIFNlc3Npb25zLCBEcmlmdCwgTExNIENvc3RzXG4gIGV2YWxSdW5zLFxuICBzaWduYWxzLFxuICBub3RpZmljYXRpb25zLFxuICBkb2N1bWVudHMsXG4gIHNoYWRvd1Rlc3RzLFxuICBzZXNzaW9ucyxcbiAgZHJpZnQsXG4gIGxsbUNvc3RzLFxuICAvLyBHdWFyZHJhaWxzXG4gIGd1YXJkcmFpbHMsXG4gIC8vIEhlbHBlcnNcbiAgZ2VuZXJhdGVaZW5kZXNrTWFya2VyLFxuICBwYXJzZVplbmRlc2tNYXJrZXIsXG4gIGxpbmtSdW5Ub1RpY2tldCxcbiAgY3JlYXRlUnVuV2l0aENvbnRleHQsXG4gIC8vIFV0aWxpdGllc1xuICBpc0ZhY3QsXG4gIGlzSW5mZXJlbmNlLFxuICBjYWxjdWxhdGVCcmllclNjb3JlLFxuICBpc1dlbGxDYWxpYnJhdGVkLFxuICBjYWxjdWxhdGVQYXNzQXRLLFxuICBpc1JlbGlhYmxlRXZhbHVhdGlvbixcbiAgaXNIaWdoUmlzayxcbiAgbmVlZHNBdHRlbnRpb24sXG4gIC8vIFJPSSBoZWxwZXJzXG4gIGNhbGN1bGF0ZVJldmVudWVBdFJpc2ssXG4gIGZvcm1hdEN1cnJlbmN5LFxuICAvLyBRdWFsaXR5IGhlbHBlcnNcbiAgcGFzc2VzUXVhbGl0eVRocmVzaG9sZCxcbiAgaXNIYWxsdWNpbmF0aW9uUmlza0FjY2VwdGFibGUsXG4gIC8vIEJ1c2luZXNzIE1ldHJpY3MgaGVscGVyc1xuICBpc01ldHJpY1JlYWR5LFxuICBuZWVkc01vcmVUcmFjZXMsXG4gIGdldFN0YXR1c01lc3NhZ2UsXG4gIC8vIERyaWZ0IGhlbHBlcnNcbiAgaGFzRHJpZnQsXG4gIGdldERyaWZ0U2V2ZXJpdHksXG4gIC8vIExMTSBDb3N0cyBoZWxwZXJzXG4gIGZvcm1hdExMTUNvc3QsXG59O1xuIl19
|
|
@@ -152,11 +152,7 @@ export declare const linking: {
|
|
|
152
152
|
verify(linkId: string, options: {
|
|
153
153
|
verified: boolean;
|
|
154
154
|
notes?: string;
|
|
155
|
-
}): Promise<
|
|
156
|
-
linkId: string;
|
|
157
|
-
verified: boolean;
|
|
158
|
-
message: string;
|
|
159
|
-
}>;
|
|
155
|
+
}): Promise<LinkResponse>;
|
|
160
156
|
/**
|
|
161
157
|
* Delete a link
|
|
162
158
|
*
|
|
@@ -167,25 +163,35 @@ export declare const linking: {
|
|
|
167
163
|
*/
|
|
168
164
|
delete(linkId: string): Promise<void>;
|
|
169
165
|
/**
|
|
170
|
-
* Auto-link
|
|
166
|
+
* Auto-link a run to a ticket based on available evidence
|
|
171
167
|
*
|
|
172
168
|
* @example
|
|
173
169
|
* ```typescript
|
|
174
|
-
* const
|
|
175
|
-
*
|
|
170
|
+
* const link = await linking.autoLink('run_abc123');
|
|
171
|
+
* if (link) {
|
|
176
172
|
* console.log(`Linked to ${link.ticketId} via ${link.method}`);
|
|
177
173
|
* }
|
|
178
174
|
* ```
|
|
179
175
|
*/
|
|
180
|
-
autoLink(runId: string): Promise<
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
176
|
+
autoLink(runId: string): Promise<LinkResponse | null>;
|
|
177
|
+
stats(): Promise<{
|
|
178
|
+
totalLinks: number;
|
|
179
|
+
byMethod: Record<string, number>;
|
|
180
|
+
avgConfidence: number;
|
|
181
|
+
verifiedCount: number;
|
|
182
|
+
unverifiedCount: number;
|
|
183
|
+
}>;
|
|
184
|
+
generateMarker(options: {
|
|
185
|
+
traceId: string;
|
|
186
|
+
runId?: string;
|
|
187
|
+
format?: "html_comment" | "base64" | "custom";
|
|
188
|
+
customTemplate?: string;
|
|
189
|
+
}): Promise<{
|
|
190
|
+
marker: string;
|
|
191
|
+
format: string;
|
|
192
|
+
traceId: string;
|
|
193
|
+
runId: string | null;
|
|
194
|
+
instructions: string;
|
|
189
195
|
}>;
|
|
190
196
|
};
|
|
191
197
|
/**
|