@pipeline-builder/pipeline-manager 3.4.69 → 3.4.71
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 +32 -2
- package/dist/agent/ai.d.ts +55 -0
- package/dist/agent/ai.d.ts.map +1 -0
- package/dist/agent/ai.js +130 -0
- package/dist/agent/executor.d.ts +24 -0
- package/dist/agent/executor.d.ts.map +1 -0
- package/dist/agent/executor.js +54 -0
- package/dist/agent/health.d.ts +22 -0
- package/dist/agent/health.d.ts.map +1 -0
- package/dist/agent/health.js +55 -0
- package/dist/agent/prereqs.d.ts +16 -0
- package/dist/agent/prereqs.d.ts.map +1 -0
- package/dist/agent/prereqs.js +73 -0
- package/dist/agent/targets.d.ts +83 -0
- package/dist/agent/targets.d.ts.map +1 -0
- package/dist/agent/targets.js +142 -0
- package/dist/agent/troubleshoot.d.ts +30 -0
- package/dist/agent/troubleshoot.d.ts.map +1 -0
- package/dist/agent/troubleshoot.js +87 -0
- package/dist/boilerplate.js +8 -13
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +114 -116
- package/dist/commands/audit-stacks.js +22 -24
- package/dist/commands/audit-tokens.js +25 -27
- package/dist/commands/bootstrap.js +29 -37
- package/dist/commands/create-pipeline.js +55 -92
- package/dist/commands/deploy.d.ts.map +1 -1
- package/dist/commands/deploy.js +58 -62
- package/dist/commands/get-pipeline.js +24 -28
- package/dist/commands/get-plugin.js +24 -28
- package/dist/commands/list-pipelines.js +30 -31
- package/dist/commands/list-plugins.js +32 -33
- package/dist/commands/login.js +44 -49
- package/dist/commands/org-export.js +22 -60
- package/dist/commands/provision.d.ts +12 -0
- package/dist/commands/provision.d.ts.map +1 -0
- package/dist/commands/provision.js +362 -0
- package/dist/commands/register.js +29 -30
- package/dist/commands/setup-events.d.ts.map +1 -1
- package/dist/commands/setup-events.js +42 -77
- package/dist/commands/status.js +20 -25
- package/dist/commands/store-token.js +44 -82
- package/dist/commands/synth.d.ts.map +1 -1
- package/dist/commands/synth.js +36 -35
- package/dist/commands/upload-plugin.js +59 -96
- package/dist/commands/validate-templates.d.ts.map +1 -1
- package/dist/commands/validate-templates.js +23 -29
- package/dist/commands/version.js +42 -47
- package/dist/config/cli.constants.d.ts.map +1 -1
- package/dist/config/cli.constants.js +24 -31
- package/dist/types/config.js +2 -3
- package/dist/types/error.js +3 -7
- package/dist/types/index.d.ts +4 -4
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +5 -21
- package/dist/types/pipeline.js +2 -3
- package/dist/types/plugin.js +2 -3
- package/dist/utils/api-client.d.ts +1 -1
- package/dist/utils/api-client.d.ts.map +1 -1
- package/dist/utils/api-client.js +23 -28
- package/dist/utils/audit-log.js +16 -22
- package/dist/utils/auth-guard.js +2 -5
- package/dist/utils/aws-secrets.js +17 -23
- package/dist/utils/banner.js +16 -23
- package/dist/utils/cdk-utils.js +14 -24
- package/dist/utils/command-utils.d.ts +1 -1
- package/dist/utils/command-utils.d.ts.map +1 -1
- package/dist/utils/command-utils.js +32 -44
- package/dist/utils/config-loader.d.ts +1 -1
- package/dist/utils/config-loader.d.ts.map +1 -1
- package/dist/utils/config-loader.js +24 -58
- package/dist/utils/error-handler.d.ts +1 -1
- package/dist/utils/error-handler.d.ts.map +1 -1
- package/dist/utils/error-handler.js +16 -24
- package/dist/utils/list-command-utils.js +15 -20
- package/dist/utils/output-utils.d.ts +1 -1
- package/dist/utils/output-utils.d.ts.map +1 -1
- package/dist/utils/output-utils.js +35 -55
- package/dist/utils/plugin-resolver.d.ts +1 -1
- package/dist/utils/plugin-resolver.d.ts.map +1 -1
- package/dist/utils/plugin-resolver.js +6 -8
- package/dist/utils/rate-limiter.js +11 -19
- package/dist/utils/registry.js +16 -22
- package/package.json +26 -17
package/dist/commands/deploy.js
CHANGED
|
@@ -1,21 +1,22 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
// Copyright 2026 Pipeline Builder Contributors
|
|
3
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
};
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
const { bold, cyan, dim } =
|
|
3
|
+
import * as fs from 'node:fs';
|
|
4
|
+
import * as path from 'node:path';
|
|
5
|
+
import { fileURLToPath } from 'node:url';
|
|
6
|
+
import { Command } from 'commander';
|
|
7
|
+
import pico from 'picocolors';
|
|
8
|
+
import { assertShellSafe } from '../config/cli.constants.js';
|
|
9
|
+
import {} from '../types/index.js';
|
|
10
|
+
import { auditLog } from '../utils/audit-log.js';
|
|
11
|
+
import { ensureCdkAvailable, executeCdkShellCommand, resolveBoilerplatePath } from '../utils/cdk-utils.js';
|
|
12
|
+
import { printCommandHeader, printSslWarning, createAuthenticatedClientAsync } from '../utils/command-utils.js';
|
|
13
|
+
import { ERROR_CODES, handleError } from '../utils/error-handler.js';
|
|
14
|
+
import { ensureOutputDirectory, extractSingleResponse, printError, printInfo, printKeyValue, printSection, printSuccess, printWarning } from '../utils/output-utils.js';
|
|
15
|
+
import { resolvePluginsForProps } from '../utils/plugin-resolver.js';
|
|
16
|
+
import { buildRegistryPayload, writePendingIntent } from '../utils/registry.js';
|
|
17
|
+
const { bold, cyan, dim } = pico;
|
|
18
|
+
// ESM has no __dirname; derive it from this module's URL.
|
|
19
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
19
20
|
/**
|
|
20
21
|
* Registers the `deploy` command with the CLI program.
|
|
21
22
|
*
|
|
@@ -28,7 +29,7 @@ const { bold, cyan, dim } = picocolors_1.default;
|
|
|
28
29
|
*
|
|
29
30
|
* @param program - The root Commander program instance to attach the command to.
|
|
30
31
|
*/
|
|
31
|
-
function deploy(program) {
|
|
32
|
+
export function deploy(program) {
|
|
32
33
|
program
|
|
33
34
|
.command('deploy')
|
|
34
35
|
.description('Deploy pipeline by ID using AWS CDK, or --local-spec to deploy a local pipeline.json without the platform')
|
|
@@ -50,10 +51,10 @@ function deploy(program) {
|
|
|
50
51
|
if (options.id && options.localSpec) {
|
|
51
52
|
throw new Error('--id and --local-spec are mutually exclusive');
|
|
52
53
|
}
|
|
53
|
-
const executionId =
|
|
54
|
+
const executionId = printCommandHeader('Pipeline Deploy');
|
|
54
55
|
try {
|
|
55
|
-
|
|
56
|
-
|
|
56
|
+
auditLog('deploy', { executionId, pipelineId: options.id, profile: options.profile });
|
|
57
|
+
printInfo('Deployment parameters', {
|
|
57
58
|
id: options.id,
|
|
58
59
|
awsProfile: options.profile,
|
|
59
60
|
outputDir: options.output,
|
|
@@ -61,13 +62,13 @@ function deploy(program) {
|
|
|
61
62
|
verifySsl: options.verifySsl,
|
|
62
63
|
});
|
|
63
64
|
// Security warning for SSL verification disabled
|
|
64
|
-
|
|
65
|
+
printSslWarning(options.verifySsl);
|
|
65
66
|
// Propagate to process.env so CDK constructs (Lambda, CodeBuild) inherit it
|
|
66
67
|
if (options.verifySsl === false) {
|
|
67
68
|
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
|
|
68
69
|
}
|
|
69
|
-
|
|
70
|
-
|
|
70
|
+
ensureCdkAvailable();
|
|
71
|
+
printSuccess('AWS CDK is available');
|
|
71
72
|
let pipeline;
|
|
72
73
|
let propsWithIds;
|
|
73
74
|
// Remote-mode registry-post handles — null in --local-spec mode.
|
|
@@ -77,16 +78,12 @@ function deploy(program) {
|
|
|
77
78
|
// --local-spec: read pipeline.json from disk; no platform contact.
|
|
78
79
|
// Compliance / quota / plugin-lookup features all require the platform —
|
|
79
80
|
// this mode is for air-gapped or simple standalone CDK deployments.
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
const pathMod = require('path');
|
|
84
|
-
const absPath = pathMod.resolve(options.localSpec);
|
|
85
|
-
(0, output_utils_1.printInfo)('Loading local pipeline spec', { path: absPath });
|
|
86
|
-
if (!fsMod.existsSync(absPath)) {
|
|
81
|
+
const absPath = path.resolve(options.localSpec);
|
|
82
|
+
printInfo('Loading local pipeline spec', { path: absPath });
|
|
83
|
+
if (!fs.existsSync(absPath)) {
|
|
87
84
|
throw new Error(`Local spec file not found: ${absPath}`);
|
|
88
85
|
}
|
|
89
|
-
const raw =
|
|
86
|
+
const raw = fs.readFileSync(absPath, 'utf-8');
|
|
90
87
|
const parsed = JSON.parse(raw);
|
|
91
88
|
if (!parsed.props) {
|
|
92
89
|
throw new Error(`Local spec file is missing required 'props' field: ${absPath}`);
|
|
@@ -100,8 +97,8 @@ function deploy(program) {
|
|
|
100
97
|
isActive: parsed.isActive ?? true,
|
|
101
98
|
props: parsed.props,
|
|
102
99
|
};
|
|
103
|
-
|
|
104
|
-
|
|
100
|
+
printSuccess('Local spec loaded');
|
|
101
|
+
printKeyValue({
|
|
105
102
|
Source: absPath,
|
|
106
103
|
Project: pipeline.project,
|
|
107
104
|
Organization: pipeline.organization,
|
|
@@ -114,13 +111,13 @@ function deploy(program) {
|
|
|
114
111
|
}
|
|
115
112
|
else {
|
|
116
113
|
// Remote path: fetch config from platform API
|
|
117
|
-
platformClient = await
|
|
114
|
+
platformClient = await createAuthenticatedClientAsync(options);
|
|
118
115
|
platformConfig = platformClient.getConfig();
|
|
119
|
-
|
|
116
|
+
printInfo('Fetching pipeline configuration', { id: options.id });
|
|
120
117
|
const response = await platformClient.get(`${platformConfig.api.pipelineUrl}/${options.id}`);
|
|
121
|
-
const fetched =
|
|
118
|
+
const fetched = extractSingleResponse(response, 'pipeline', 'props');
|
|
122
119
|
if (!fetched?.props) {
|
|
123
|
-
|
|
120
|
+
printError('Invalid pipeline response', {
|
|
124
121
|
id: options.id,
|
|
125
122
|
hasProps: !!fetched?.props,
|
|
126
123
|
responseKeys: response ? Object.keys(response) : '(null)',
|
|
@@ -128,8 +125,8 @@ function deploy(program) {
|
|
|
128
125
|
throw new Error(`Failed to retrieve valid pipeline properties for ID: ${options.id}`);
|
|
129
126
|
}
|
|
130
127
|
pipeline = fetched;
|
|
131
|
-
|
|
132
|
-
|
|
128
|
+
printSuccess('Pipeline configuration retrieved');
|
|
129
|
+
printKeyValue({
|
|
133
130
|
'ID': pipeline.id,
|
|
134
131
|
'Project': pipeline.project,
|
|
135
132
|
'Organization': pipeline.organization,
|
|
@@ -146,16 +143,15 @@ function deploy(program) {
|
|
|
146
143
|
// this, CDK falls back to standard:7.0 (the deploy-time custom
|
|
147
144
|
// resource attribute is unresolvable at synth time). Skipped in
|
|
148
145
|
// --local-spec mode where there's no platform client.
|
|
149
|
-
const resolvedPlugins = await
|
|
146
|
+
const resolvedPlugins = await resolvePluginsForProps(platformClient, propsWithIds);
|
|
150
147
|
if (Object.keys(resolvedPlugins).length > 0) {
|
|
151
148
|
propsWithIds.resolvedPlugins = resolvedPlugins;
|
|
152
|
-
|
|
149
|
+
printInfo('Pre-resolved plugins', { count: Object.keys(resolvedPlugins).length });
|
|
153
150
|
}
|
|
154
151
|
}
|
|
155
152
|
// --show-resolved: print resolved config and exit (no CDK deploy)
|
|
156
153
|
if (options.showResolved) {
|
|
157
|
-
|
|
158
|
-
const { resolveSelfReferencing } = require('@pipeline-builder/pipeline-core');
|
|
154
|
+
const { resolveSelfReferencing } = await import('@pipeline-builder/pipeline-core');
|
|
159
155
|
const propsAny = propsWithIds;
|
|
160
156
|
const scope = { metadata: propsAny.metadata ?? {}, vars: propsAny.vars ?? {} };
|
|
161
157
|
const isTpl = (f) => f === 'projectName' || f.startsWith('metadata.') || f.startsWith('vars.');
|
|
@@ -172,30 +168,30 @@ function deploy(program) {
|
|
|
172
168
|
const encoded = Buffer.from(JSON.stringify(propsWithIds), 'utf-8').toString('base64');
|
|
173
169
|
const outputPath = options.output;
|
|
174
170
|
// Ensure output directory exists
|
|
175
|
-
|
|
176
|
-
|
|
171
|
+
printInfo('Preparing output directory', { path: outputPath });
|
|
172
|
+
ensureOutputDirectory(outputPath);
|
|
177
173
|
// Build CDK command (validate inputs that flow into shell)
|
|
178
174
|
if (options.profile)
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
const scriptPath =
|
|
175
|
+
assertShellSafe(options.profile, 'profile');
|
|
176
|
+
assertShellSafe(outputPath, 'output');
|
|
177
|
+
const scriptPath = resolveBoilerplatePath(__dirname);
|
|
182
178
|
const profileArg = options.profile ? `--profile=${options.profile}` : '';
|
|
183
179
|
const outputArg = `--output=${outputPath}`;
|
|
184
180
|
const appArg = `--app="node ${scriptPath}"`;
|
|
185
181
|
const command = `cdk deploy ${profileArg} --require-approval=${options.requireApproval} ${outputArg} --notices=false ${appArg}`;
|
|
186
|
-
|
|
182
|
+
printSection('CDK Execution');
|
|
187
183
|
console.log(cyan(bold('Command:')), dim(command.split(' --')[0] + ' ...'));
|
|
188
184
|
console.log(''); // Empty line
|
|
189
185
|
// Execute CDK command
|
|
190
|
-
const result =
|
|
186
|
+
const result = executeCdkShellCommand(command, {
|
|
191
187
|
debug: program.opts().debug,
|
|
192
188
|
showOutput: true,
|
|
193
189
|
env: { PIPELINE_PROPS: encoded },
|
|
194
190
|
});
|
|
195
191
|
console.log(''); // Empty line
|
|
196
|
-
|
|
192
|
+
printSection('Deployment Complete');
|
|
197
193
|
if (result.success) {
|
|
198
|
-
|
|
194
|
+
printKeyValue({
|
|
199
195
|
'Execution ID': executionId,
|
|
200
196
|
'Duration': `${result.duration}ms`,
|
|
201
197
|
'Output Directory': outputPath,
|
|
@@ -204,7 +200,7 @@ function deploy(program) {
|
|
|
204
200
|
// Register pipeline ARN for event reporting (non-blocking).
|
|
205
201
|
// Skipped in --local-spec mode since there's no platform to register with.
|
|
206
202
|
if (!platformClient || !platformConfig) {
|
|
207
|
-
|
|
203
|
+
printInfo('Skipping pipeline registry (local-spec mode)');
|
|
208
204
|
return;
|
|
209
205
|
}
|
|
210
206
|
// Build the payload up-front so a registration POST failure can write
|
|
@@ -213,12 +209,12 @@ function deploy(program) {
|
|
|
213
209
|
// they can fail too (e.g. credential rotation) and would compound
|
|
214
210
|
// the issue.
|
|
215
211
|
if (!pipeline.orgId) {
|
|
216
|
-
|
|
212
|
+
printWarning('Pipeline has no orgId — skipping registration');
|
|
217
213
|
return;
|
|
218
214
|
}
|
|
219
215
|
let payload;
|
|
220
216
|
try {
|
|
221
|
-
payload = await
|
|
217
|
+
payload = await buildRegistryPayload({
|
|
222
218
|
id: pipeline.id,
|
|
223
219
|
orgId: pipeline.orgId,
|
|
224
220
|
pipelineName: pipeline.pipelineName,
|
|
@@ -227,29 +223,29 @@ function deploy(program) {
|
|
|
227
223
|
}, options.region);
|
|
228
224
|
}
|
|
229
225
|
catch (buildError) {
|
|
230
|
-
|
|
226
|
+
printWarning('Could not build registry payload — skipping registration', {
|
|
231
227
|
error: buildError instanceof Error ? buildError.message : String(buildError),
|
|
232
228
|
});
|
|
233
229
|
return;
|
|
234
230
|
}
|
|
235
231
|
try {
|
|
236
232
|
await platformClient.post(`${platformConfig.api.pipelineUrl}/registry`, payload);
|
|
237
|
-
|
|
233
|
+
printSuccess('Pipeline registered for event reporting', { pipelineId: payload.pipelineId });
|
|
238
234
|
}
|
|
239
235
|
catch (regError) {
|
|
240
236
|
// Persist for retry. The user can drain with `pipeline-manager
|
|
241
237
|
// register` (or just re-run that command at any time — it's
|
|
242
238
|
// idempotent). The deploy itself does NOT fail.
|
|
243
239
|
try {
|
|
244
|
-
const intentPath = await
|
|
245
|
-
|
|
240
|
+
const intentPath = await writePendingIntent(payload);
|
|
241
|
+
printWarning('Pipeline registry update failed; queued for retry', {
|
|
246
242
|
error: regError instanceof Error ? regError.message : String(regError),
|
|
247
243
|
retry: 'pipeline-manager register',
|
|
248
244
|
intent: intentPath,
|
|
249
245
|
});
|
|
250
246
|
}
|
|
251
247
|
catch (writeErr) {
|
|
252
|
-
|
|
248
|
+
printWarning('Pipeline registry update failed (retry queue also failed)', {
|
|
253
249
|
error: regError instanceof Error ? regError.message : String(regError),
|
|
254
250
|
queueError: writeErr instanceof Error ? writeErr.message : String(writeErr),
|
|
255
251
|
});
|
|
@@ -258,7 +254,7 @@ function deploy(program) {
|
|
|
258
254
|
}
|
|
259
255
|
}
|
|
260
256
|
catch (error) {
|
|
261
|
-
|
|
257
|
+
handleError(error, ERROR_CODES.API_REQUEST, {
|
|
262
258
|
debug: program.opts().debug,
|
|
263
259
|
exit: true,
|
|
264
260
|
context: {
|
|
@@ -271,4 +267,4 @@ function deploy(program) {
|
|
|
271
267
|
}
|
|
272
268
|
});
|
|
273
269
|
}
|
|
274
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL2RlcGxveS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0NBQStDO0FBQy9DLHNDQUFzQzs7Ozs7QUE0QnRDLHdCQTJRQztBQXBTRCw0REFBOEI7QUFDOUIsMkRBQTBEO0FBRTFELGtEQUE4QztBQUM5QyxrREFBd0c7QUFDeEcsMERBQTZHO0FBQzdHLDBEQUFrRTtBQUNsRSx3REFBcUs7QUFDckssOERBQWtFO0FBQ2xFLGdEQUE2RTtBQUU3RSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxvQkFBSSxDQUFDO0FBRWpDOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsU0FBZ0IsTUFBTSxDQUFDLE9BQWdCO0lBQ3JDLE9BQU87U0FDSixPQUFPLENBQUMsUUFBUSxDQUFDO1NBQ2pCLFdBQVcsQ0FBQywyR0FBMkcsQ0FBQztTQUN4SCxNQUFNLENBQUMsZUFBZSxFQUFFLGdEQUFnRCxDQUFDO1NBQ3pFLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxvSEFBb0gsQ0FBQztTQUNuSixNQUFNLENBQUMscUJBQXFCLEVBQUUsYUFBYSxFQUFFLFNBQVMsQ0FBQztTQUN2RCxNQUFNLENBQUMsK0JBQStCLEVBQUUsNkNBQTZDLEVBQUUsT0FBTyxDQUFDO1NBQy9GLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxzQkFBc0IsRUFBRSxTQUFTLENBQUM7U0FDM0QsTUFBTSxDQUFDLGdCQUFnQixFQUFFLDJGQUEyRixFQUFFLEtBQUssQ0FBQztTQUM1SCxNQUFNLENBQUMsbUJBQW1CLEVBQUUsaUNBQWlDLENBQUM7U0FDOUQsTUFBTSxDQUFDLGNBQWMsRUFBRSxxQ0FBcUMsQ0FBQztTQUM3RCxNQUFNLENBQUMsaUJBQWlCLEVBQUUsc0NBQXNDLENBQUM7U0FDakUsTUFBTSxDQUFDLGlCQUFpQixFQUFFLG1HQUFtRyxFQUFFLEtBQUssQ0FBQztTQUNySSxN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QkFDWCxVQUFVLEVBQUUsT0FBTyxDQUFDLEVBQUU7b0JBQ3RCLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUztpQkFDN0I7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IHBpY28gZnJvbSAncGljb2NvbG9ycyc7XG5pbXBvcnQgeyBhc3NlcnRTaGVsbFNhZmUgfSBmcm9tICcuLi9jb25maWcvY2xpLmNvbnN0YW50cyc7XG5pbXBvcnQgeyBQaXBlbGluZSwgUGlwZWxpbmVSZXNwb25zZSB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGF1ZGl0TG9nIH0gZnJvbSAnLi4vdXRpbHMvYXVkaXQtbG9nJztcbmltcG9ydCB7IGVuc3VyZUNka0F2YWlsYWJsZSwgZXhlY3V0ZUNka1NoZWxsQ29tbWFuZCwgcmVzb2x2ZUJvaWxlcnBsYXRlUGF0aCB9IGZyb20gJy4uL3V0aWxzL2Nkay11dGlscyc7XG5pbXBvcnQgeyBwcmludENvbW1hbmRIZWFkZXIsIHByaW50U3NsV2FybmluZywgY3JlYXRlQXV0aGVudGljYXRlZENsaWVudEFzeW5jIH0gZnJvbSAnLi4vdXRpbHMvY29tbWFuZC11dGlscyc7XG5pbXBvcnQgeyBFUlJPUl9DT0RFUywgaGFuZGxlRXJyb3IgfSBmcm9tICcuLi91dGlscy9lcnJvci1oYW5kbGVyJztcbmltcG9ydCB7IGVuc3VyZU91dHB1dERpcmVjdG9yeSwgZXh0cmFjdFNpbmdsZVJlc3BvbnNlLCBwcmludEVycm9yLCBwcmludEluZm8sIHByaW50S2V5VmFsdWUsIHByaW50U2VjdGlvbiwgcHJpbnRTdWNjZXNzLCBwcmludFdhcm5pbmcgfSBmcm9tICcuLi91dGlscy9vdXRwdXQtdXRpbHMnO1xuaW1wb3J0IHsgcmVzb2x2ZVBsdWdpbnNGb3JQcm9wcyB9IGZyb20gJy4uL3V0aWxzL3BsdWdpbi1yZXNvbHZlcic7XG5pbXBvcnQgeyBidWlsZFJlZ2lzdHJ5UGF5bG9hZCwgd3JpdGVQZW5kaW5nSW50ZW50IH0gZnJvbSAnLi4vdXRpbHMvcmVnaXN0cnknO1xuXG5jb25zdCB7IGJvbGQsIGN5YW4sIGRpbSB9ID0gcGljbztcblxuLyoqXG4gKiBSZWdpc3RlcnMgdGhlIGBkZXBsb3lgIGNvbW1hbmQgd2l0aCB0aGUgQ0xJIHByb2dyYW0uXG4gKlxuICogRmV0Y2hlcyBwaXBlbGluZSBwcm9wZXJ0aWVzIGJ5IElEIGZyb20gdGhlIHBsYXRmb3JtIEFQSSwgdGhlblxuICogcnVucyBgY2RrIGRlcGxveWAgdG8gcHJvdmlzaW9uIHRoZSBwaXBlbGluZSBpbmZyYXN0cnVjdHVyZSBpbiBBV1MuXG4gKiBGb3Igc3ludGhlc2lzIG9ubHksIHVzZSBgcGlwZWxpbmUtbWFuYWdlciBzeW50aGAuXG4gKlxuICogUmVxdWlyZXMgc2VydmljZSBjcmVkZW50aWFscyB0byBiZSBwcmUtc3RvcmVkIGluIEFXUyBTZWNyZXRzIE1hbmFnZXIuXG4gKiBDcmVhdGUgdGhlbSBmaXJzdCB3aXRoOiBgcGlwZWxpbmUtbWFuYWdlciBzdG9yZS10b2tlbmBcbiAqXG4gKiBAcGFyYW0gcHJvZ3JhbSAtIFRoZSByb290IENvbW1hbmRlciBwcm9ncmFtIGluc3RhbmNlIHRvIGF0dGFjaCB0aGUgY29tbWFuZCB0by5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlcGxveShwcm9ncmFtOiBDb21tYW5kKTogdm9pZCB7XG4gIHByb2dyYW1cbiAgICAuY29tbWFuZCgnZGVwbG95JylcbiAgICAuZGVzY3JpcHRpb24oJ0RlcGxveSBwaXBlbGluZSBieSBJRCB1c2luZyBBV1MgQ0RLLCBvciAtLWxvY2FsLXNwZWMgdG8gZGVwbG95IGEgbG9jYWwgcGlwZWxpbmUuanNvbiB3aXRob3V0IHRoZSBwbGF0Zm9ybScpXG4gICAgLm9wdGlvbignLWksIC0taWQgPGlkPicsICdQaXBlbGluZSBJRCAoZmV0Y2hlcyBjb25maWcgZnJvbSB0aGUgcGxhdGZvcm0pJylcbiAgICAub3B0aW9uKCctLWxvY2FsLXNwZWMgPHBhdGg+JywgJ1BhdGggdG8gYSBsb2NhbCBwaXBlbGluZS5qc29uIOKAlCBkZXBsb3lzIHdpdGhvdXQgY29udGFjdGluZyB0aGUgcGxhdGZvcm0gKG5vIGF1dGgsIG5vIGNvbXBsaWFuY2UsIG5vIHBsdWdpbiBsb29rdXApJylcbiAgICAub3B0aW9uKCctLXByb2ZpbGUgPHByb2ZpbGU+JywgJ0FXUyBwcm9maWxlJywgJ2RlZmF1bHQnKVxuICAgIC5vcHRpb24oJy0tcmVxdWlyZS1hcHByb3ZhbCA8YXBwcm92YWw+JywgJ0FwcHJvdmFsIGxldmVsOiBuZXZlcnxhbnktY2hhbmdlfGJyb2FkZW5pbmcnLCAnbmV2ZXInKVxuICAgIC5vcHRpb24oJy0tb3V0cHV0IDxkaXI+JywgJ0NESyBvdXRwdXQgZGlyZWN0b3J5JywgJ2Nkay5vdXQnKVxuICAgIC5vcHRpb24oJy0tc3RvcmUtdG9rZW5zJywgJ0F1dGhlbnRpY2F0ZSB1c2luZyB0b2tlbiBmcm9tIEFXUyBTZWNyZXRzIE1hbmFnZXIgKHJlcXVpcmVzIFBMQVRGT1JNX1NFQ1JFVF9OQU1FIGVudiB2YXIpJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS1yZWdpb24gPHJlZ2lvbj4nLCAnQVdTIHJlZ2lvbiAoZm9yIC0tc3RvcmUtdG9rZW5zKScpXG4gICAgLm9wdGlvbignLS12ZXJpZnktc3NsJywgJ0VuYWJsZSBTU0wgY2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uJylcbiAgICAub3B0aW9uKCctLW5vLXZlcmlmeS1zc2wnLCAnRGlzYWJsZSBTU0wgY2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uJylcbiAgICAub3B0aW9uKCctLXNob3ctcmVzb2x2ZWQnLCAnUHJpbnQgdGhlIHJlc29sdmVkIHBpcGVsaW5lIGNvbmZpZyAod2l0aCB7eyAuLi4gfX0gdGVtcGxhdGVzIGV4cGFuZGVkKSBhbmQgZXhpdCB3aXRob3V0IGRlcGxveWluZycsIGZhbHNlKVxuICAgIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgIC8vIE11dHVhbGx5IGV4Y2x1c2l2ZSBpbnB1dCBzb3VyY2VzXG4gICAgICBpZiAoIW9wdGlvbnMuaWQgJiYgIW9wdGlvbnMubG9jYWxTcGVjKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRWl0aGVyIC0taWQgPHBpcGVsaW5lLWlkPiBvciAtLWxvY2FsLXNwZWMgPHBhdGg+IGlzIHJlcXVpcmVkJyk7XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9ucy5pZCAmJiBvcHRpb25zLmxvY2FsU3BlYykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJy0taWQgYW5kIC0tbG9jYWwtc3BlYyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGV4ZWN1dGlvbklkID0gcHJpbnRDb21tYW5kSGVhZGVyKCdQaXBlbGluZSBEZXBsb3knKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgYXVkaXRMb2coJ2RlcGxveScsIHsgZXhlY3V0aW9uSWQsIHBpcGVsaW5lSWQ6IG9wdGlvbnMuaWQsIHByb2ZpbGU6IG9wdGlvbnMucHJvZmlsZSB9KTtcblxuICAgICAgICBwcmludEluZm8oJ0RlcGxveW1lbnQgcGFyYW1ldGVycycsIHtcbiAgICAgICAgICBpZDogb3B0aW9ucy5pZCxcbiAgICAgICAgICBhd3NQcm9maWxlOiBvcHRpb25zLnByb2ZpbGUsXG4gICAgICAgICAgb3V0cHV0RGlyOiBvcHRpb25zLm91dHB1dCxcbiAgICAgICAgICByZXF1aXJlQXBwcm92YWw6IG9wdGlvbnMucmVxdWlyZUFwcHJvdmFsLFxuICAgICAgICAgIHZlcmlmeVNzbDogb3B0aW9ucy52ZXJpZnlTc2wsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFNlY3VyaXR5IHdhcm5pbmcgZm9yIFNTTCB2ZXJpZmljYXRpb24gZGlzYWJsZWRcbiAgICAgICAgcHJpbnRTc2xXYXJuaW5nKG9wdGlvbnMudmVyaWZ5U3NsKTtcblxuICAgICAgICAvLyBQcm9wYWdhdGUgdG8gcHJvY2Vzcy5lbnYgc28gQ0RLIGNvbnN0cnVjdHMgKExhbWJkYSwgQ29kZUJ1aWxkKSBpbmhlcml0IGl0XG4gICAgICAgIGlmIChvcHRpb25zLnZlcmlmeVNzbCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICBwcm9jZXNzLmVudi5OT0RFX1RMU19SRUpFQ1RfVU5BVVRIT1JJWkVEID0gJzAnO1xuICAgICAgICB9XG5cbiAgICAgICAgZW5zdXJlQ2RrQXZhaWxhYmxlKCk7XG4gICAgICAgIHByaW50U3VjY2VzcygnQVdTIENESyBpcyBhdmFpbGFibGUnKTtcblxuICAgICAgICBsZXQgcGlwZWxpbmU6IFBpcGVsaW5lO1xuICAgICAgICBsZXQgcHJvcHNXaXRoSWRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgICAgLy8gUmVtb3RlLW1vZGUgcmVnaXN0cnktcG9zdCBoYW5kbGVzIOKAlCBudWxsIGluIC0tbG9jYWwtc3BlYyBtb2RlLlxuICAgICAgICBsZXQgcGxhdGZvcm1DbGllbnQ6IEF3YWl0ZWQ8UmV0dXJuVHlwZTx0eXBlb2YgY3JlYXRlQXV0aGVudGljYXRlZENsaWVudEFzeW5jPj4gfCB1bmRlZmluZWQ7XG4gICAgICAgIGxldCBwbGF0Zm9ybUNvbmZpZzogeyBhcGk6IHsgcGlwZWxpbmVVcmw6IHN0cmluZyB9IH0gfCB1bmRlZmluZWQ7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMubG9jYWxTcGVjKSB7XG4gICAgICAgICAgLy8gLS1sb2NhbC1zcGVjOiByZWFkIHBpcGVsaW5lLmpzb24gZnJvbSBkaXNrOyBubyBwbGF0Zm9ybSBjb250YWN0LlxuICAgICAgICAgIC8vIENvbXBsaWFuY2UgLyBxdW90YSAvIHBsdWdpbi1sb29rdXAgZmVhdHVyZXMgYWxsIHJlcXVpcmUgdGhlIHBsYXRmb3JtIOKAlFxuICAgICAgICAgIC8vIHRoaXMgbW9kZSBpcyBmb3IgYWlyLWdhcHBlZCBvciBzaW1wbGUgc3RhbmRhbG9uZSBDREsgZGVwbG95bWVudHMuXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbiAgICAgICAgICBjb25zdCBmc01vZCA9IHJlcXVpcmUoJ2ZzJyk7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbiAgICAgICAgICBjb25zdCBwYXRoTW9kID0gcmVxdWlyZSgncGF0aCcpO1xuICAgICAgICAgIGNvbnN0IGFic1BhdGggPSBwYXRoTW9kLnJlc29sdmUob3B0aW9ucy5sb2NhbFNwZWMpO1xuICAgICAgICAgIHByaW50SW5mbygnTG9hZGluZyBsb2NhbCBwaXBlbGluZSBzcGVjJywgeyBwYXRoOiBhYnNQYXRoIH0pO1xuICAgICAgICAgIGlmICghZnNNb2QuZXhpc3RzU3luYyhhYnNQYXRoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBMb2NhbCBzcGVjIGZpbGUgbm90IGZvdW5kOiAke2Fic1BhdGh9YCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHJhdyA9IGZzTW9kLnJlYWRGaWxlU3luYyhhYnNQYXRoLCAndXRmLTgnKTtcbiAgICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHJhdykgYXMgUGFydGlhbDxQaXBlbGluZT4gJiB7IHByb3BzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfTtcbiAgICAgICAgICBpZiAoIXBhcnNlZC5wcm9wcykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBMb2NhbCBzcGVjIGZpbGUgaXMgbWlzc2luZyByZXF1aXJlZCAncHJvcHMnIGZpZWxkOiAke2Fic1BhdGh9YCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHBpcGVsaW5lID0ge1xuICAgICAgICAgICAgaWQ6IHBhcnNlZC5pZCA/PyAnbG9jYWwnLFxuICAgICAgICAgICAgcHJvamVjdDogcGFyc2VkLnByb2plY3QgPz8gJ2xvY2FsLXByb2plY3QnLFxuICAgICAgICAgICAgb3JnYW5pemF0aW9uOiBwYXJzZWQub3JnYW5pemF0aW9uID8/ICdsb2NhbC1vcmcnLFxuICAgICAgICAgICAgb3JnSWQ6IHBhcnNlZC5vcmdJZCxcbiAgICAgICAgICAgIGlzRGVmYXVsdDogcGFyc2VkLmlzRGVmYXVsdCA/PyBmYWxzZSxcbiAgICAgICAgICAgIGlzQWN0aXZlOiBwYXJzZWQuaXNBY3RpdmUgPz8gdHJ1ZSxcbiAgICAgICAgICAgIHByb3BzOiBwYXJzZWQucHJvcHMsXG4gICAgICAgICAgfSBhcyBQaXBlbGluZTtcbiAgICAgICAgICBwcmludFN1Y2Nlc3MoJ0xvY2FsIHNwZWMgbG9hZGVkJyk7XG4gICAgICAgICAgcHJpbnRLZXlWYWx1ZSh7XG4gICAgICAgICAgICBTb3VyY2U6IGFic1BhdGgsXG4gICAgICAgICAgICBQcm9qZWN0OiBwaXBlbGluZS5wcm9qZWN0LFxuICAgICAgICAgICAgT3JnYW5pemF0aW9uOiBwaXBlbGluZS5vcmdhbml6YXRpb24sXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcHJvcHNXaXRoSWRzID0ge1xuICAgICAgICAgICAgLi4ucGlwZWxpbmUucHJvcHMsXG4gICAgICAgICAgICAuLi4ocGlwZWxpbmUub3JnSWQgJiYgeyBvcmdJZDogcGlwZWxpbmUub3JnSWQgfSksXG4gICAgICAgICAgICBwaXBlbGluZUlkOiBwaXBlbGluZS5pZCxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFJlbW90ZSBwYXRoOiBmZXRjaCBjb25maWcgZnJvbSBwbGF0Zm9ybSBBUElcbiAgICAgICAgICBwbGF0Zm9ybUNsaWVudCA9IGF3YWl0IGNyZWF0ZUF1dGhlbnRpY2F0ZWRDbGllbnRBc3luYyhvcHRpb25zKTtcbiAgICAgICAgICBwbGF0Zm9ybUNvbmZpZyA9IHBsYXRmb3JtQ2xpZW50LmdldENvbmZpZygpIGFzIHsgYXBpOiB7IHBpcGVsaW5lVXJsOiBzdHJpbmcgfSB9O1xuXG4gICAgICAgICAgcHJpbnRJbmZvKCdGZXRjaGluZyBwaXBlbGluZSBjb25maWd1cmF0aW9uJywgeyBpZDogb3B0aW9ucy5pZCB9KTtcbiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHBsYXRmb3JtQ2xpZW50LmdldDxQaXBlbGluZVJlc3BvbnNlPihcbiAgICAgICAgICAgIGAke3BsYXRmb3JtQ29uZmlnLmFwaS5waXBlbGluZVVybH0vJHtvcHRpb25zLmlkfWAsXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGNvbnN0IGZldGNoZWQgPSBleHRyYWN0U2luZ2xlUmVzcG9uc2U8UGlwZWxpbmU+KHJlc3BvbnNlLCAncGlwZWxpbmUnLCAncHJvcHMnKTtcblxuICAgICAgICAgIGlmICghZmV0Y2hlZD8ucHJvcHMpIHtcbiAgICAgICAgICAgIHByaW50RXJyb3IoJ0ludmFsaWQgcGlwZWxpbmUgcmVzcG9uc2UnLCB7XG4gICAgICAgICAgICAgIGlkOiBvcHRpb25zLmlkLFxuICAgICAgICAgICAgICBoYXNQcm9wczogISFmZXRjaGVkPy5wcm9wcyxcbiAgICAgICAgICAgICAgcmVzcG9uc2VLZXlzOiByZXNwb25zZSA/IE9iamVjdC5rZXlzKHJlc3BvbnNlKSA6ICcobnVsbCknLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byByZXRyaWV2ZSB2YWxpZCBwaXBlbGluZSBwcm9wZXJ0aWVzIGZvciBJRDogJHtvcHRpb25zLmlkfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwaXBlbGluZSA9IGZldGNoZWQ7XG5cbiAgICAgICAgICBwcmludFN1Y2Nlc3MoJ1BpcGVsaW5lIGNvbmZpZ3VyYXRpb24gcmV0cmlldmVkJyk7XG4gICAgICAgICAgcHJpbnRLZXlWYWx1ZSh7XG4gICAgICAgICAgICAnSUQnOiBwaXBlbGluZS5pZCxcbiAgICAgICAgICAgICdQcm9qZWN0JzogcGlwZWxpbmUucHJvamVjdCxcbiAgICAgICAgICAgICdPcmdhbml6YXRpb24nOiBwaXBlbGluZS5vcmdhbml6YXRpb24sXG4gICAgICAgICAgICAnSXMgRGVmYXVsdCc6IHBpcGVsaW5lLmlzRGVmYXVsdCxcbiAgICAgICAgICAgICdJcyBBY3RpdmUnOiBwaXBlbGluZS5pc0FjdGl2ZSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHByb3BzV2l0aElkcyA9IHtcbiAgICAgICAgICAgIC4uLnBpcGVsaW5lLnByb3BzLFxuICAgICAgICAgICAgLi4uKHBpcGVsaW5lLm9yZ0lkICYmIHsgb3JnSWQ6IHBpcGVsaW5lLm9yZ0lkIH0pLFxuICAgICAgICAgICAgcGlwZWxpbmVJZDogcGlwZWxpbmUuaWQsXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIC8vIFByZS1yZXNvbHZlIHBsdWdpbnMgZnJvbSB0aGUgcGxhdGZvcm0gQVBJIHNvIHRoZSBzeW50aGVzaXplZFxuICAgICAgICAgIC8vIHRlbXBsYXRlIHNoaXBzIHdpdGggcmVhbCBDb2RlQnVpbGQgaW1hZ2UgVVJJcyBiYWtlZCBpbi4gV2l0aG91dFxuICAgICAgICAgIC8vIHRoaXMsIENESyBmYWxscyBiYWNrIHRvIHN0YW5kYXJkOjcuMCAodGhlIGRlcGxveS10aW1lIGN1c3RvbVxuICAgICAgICAgIC8vIHJlc291cmNlIGF0dHJpYnV0ZSBpcyB1bnJlc29sdmFibGUgYXQgc3ludGggdGltZSkuIFNraXBwZWQgaW5cbiAgICAgICAgICAvLyAtLWxvY2FsLXNwZWMgbW9kZSB3aGVyZSB0aGVyZSdzIG5vIHBsYXRmb3JtIGNsaWVudC5cbiAgICAgICAgICBjb25zdCByZXNvbHZlZFBsdWdpbnMgPSBhd2FpdCByZXNvbHZlUGx1Z2luc0ZvclByb3BzKHBsYXRmb3JtQ2xpZW50LCBwcm9wc1dpdGhJZHMpO1xuICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhyZXNvbHZlZFBsdWdpbnMpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHByb3BzV2l0aElkcy5yZXNvbHZlZFBsdWdpbnMgPSByZXNvbHZlZFBsdWdpbnM7XG4gICAgICAgICAgICBwcmludEluZm8oJ1ByZS1yZXNvbHZlZCBwbHVnaW5zJywgeyBjb3VudDogT2JqZWN0LmtleXMocmVzb2x2ZWRQbHVnaW5zKS5sZW5ndGggfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gLS1zaG93LXJlc29sdmVkOiBwcmludCByZXNvbHZlZCBjb25maWcgYW5kIGV4aXQgKG5vIENESyBkZXBsb3kpXG4gICAgICAgIGlmICgob3B0aW9ucyBhcyB7IHNob3dSZXNvbHZlZD86IGJvb2xlYW4gfSkuc2hvd1Jlc29sdmVkKSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbiAgICAgICAgICBjb25zdCB7IHJlc29sdmVTZWxmUmVmZXJlbmNpbmcgfSA9IHJlcXVpcmUoJ0BwaXBlbGluZS1idWlsZGVyL3BpcGVsaW5lLWNvcmUnKTtcbiAgICAgICAgICBjb25zdCBwcm9wc0FueSA9IHByb3BzV2l0aElkcyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgICAgICBjb25zdCBzY29wZSA9IHsgbWV0YWRhdGE6IHByb3BzQW55Lm1ldGFkYXRhID8/IHt9LCB2YXJzOiBwcm9wc0FueS52YXJzID8/IHt9IH07XG4gICAgICAgICAgY29uc3QgaXNUcGwgPSAoZjogc3RyaW5nKSA9PiBmID09PSAncHJvamVjdE5hbWUnIHx8IGYuc3RhcnRzV2l0aCgnbWV0YWRhdGEuJykgfHwgZi5zdGFydHNXaXRoKCd2YXJzLicpO1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc29sdmVTZWxmUmVmZXJlbmNpbmcocHJvcHNBbnksIHNjb3BlLCBpc1RwbCwgKGY6IHN0cmluZykgPT4gaXNUcGwoZikgPyBmIDogbnVsbCwgJ3BpcGVsaW5lJyk7XG4gICAgICAgICAgaWYgKHJlc3VsdC5lcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdSZXNvbHV0aW9uIGVycm9yczonKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZSBvZiByZXN1bHQuZXJyb3JzKSBjb25zb2xlLmVycm9yKGAgIFske2UuZmllbGQgPz8gJz8nfV0gJHtlLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHByb3BzV2l0aElkcywgbnVsbCwgMikpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGVuY29kZWQgPSBCdWZmZXIuZnJvbShKU09OLnN0cmluZ2lmeShwcm9wc1dpdGhJZHMpLCAndXRmLTgnKS50b1N0cmluZygnYmFzZTY0Jyk7XG4gICAgICAgIGNvbnN0IG91dHB1dFBhdGggPSBvcHRpb25zLm91dHB1dDtcblxuICAgICAgICAvLyBFbnN1cmUgb3V0cHV0IGRpcmVjdG9yeSBleGlzdHNcbiAgICAgICAgcHJpbnRJbmZvKCdQcmVwYXJpbmcgb3V0cHV0IGRpcmVjdG9yeScsIHsgcGF0aDogb3V0cHV0UGF0aCB9KTtcbiAgICAgICAgZW5zdXJlT3V0cHV0RGlyZWN0b3J5KG91dHB1dFBhdGgpO1xuXG4gICAgICAgIC8vIEJ1aWxkIENESyBjb21tYW5kICh2YWxpZGF0ZSBpbnB1dHMgdGhhdCBmbG93IGludG8gc2hlbGwpXG4gICAgICAgIGlmIChvcHRpb25zLnByb2ZpbGUpIGFzc2VydFNoZWxsU2FmZShvcHRpb25zLnByb2ZpbGUsICdwcm9maWxlJyk7XG4gICAgICAgIGFzc2VydFNoZWxsU2FmZShvdXRwdXRQYXRoLCAnb3V0cHV0Jyk7XG5cbiAgICAgICAgY29uc3Qgc2NyaXB0UGF0aCA9IHJlc29sdmVCb2lsZXJwbGF0ZVBhdGgoX19kaXJuYW1lKTtcbiAgICAgICAgY29uc3QgcHJvZmlsZUFyZyA9IG9wdGlvbnMucHJvZmlsZSA/IGAtLXByb2ZpbGU9JHtvcHRpb25zLnByb2ZpbGV9YCA6ICcnO1xuICAgICAgICBjb25zdCBvdXRwdXRBcmcgPSBgLS1vdXRwdXQ9JHtvdXRwdXRQYXRofWA7XG4gICAgICAgIGNvbnN0IGFwcEFyZyA9IGAtLWFwcD1cIm5vZGUgJHtzY3JpcHRQYXRofVwiYDtcblxuICAgICAgICBjb25zdCBjb21tYW5kID0gYGNkayBkZXBsb3kgJHtwcm9maWxlQXJnfSAtLXJlcXVpcmUtYXBwcm92YWw9JHtvcHRpb25zLnJlcXVpcmVBcHByb3ZhbH0gJHtvdXRwdXRBcmd9IC0tbm90aWNlcz1mYWxzZSAke2FwcEFyZ31gO1xuXG4gICAgICAgIHByaW50U2VjdGlvbignQ0RLIEV4ZWN1dGlvbicpO1xuICAgICAgICBjb25zb2xlLmxvZyhjeWFuKGJvbGQoJ0NvbW1hbmQ6JykpLCBkaW0oY29tbWFuZC5zcGxpdCgnIC0tJylbMF0gKyAnIC4uLicpKTtcbiAgICAgICAgY29uc29sZS5sb2coJycpOyAvLyBFbXB0eSBsaW5lXG5cbiAgICAgICAgLy8gRXhlY3V0ZSBDREsgY29tbWFuZFxuICAgICAgICBjb25zdCByZXN1bHQgPSBleGVjdXRlQ2RrU2hlbGxDb21tYW5kKGNvbW1hbmQsIHtcbiAgICAgICAgICBkZWJ1ZzogcHJvZ3JhbS5vcHRzKCkuZGVidWcsXG4gICAgICAgICAgc2hvd091dHB1dDogdHJ1ZSxcbiAgICAgICAgICBlbnY6IHsgUElQRUxJTkVfUFJPUFM6IGVuY29kZWQgfSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc29sZS5sb2coJycpOyAvLyBFbXB0eSBsaW5lXG4gICAgICAgIHByaW50U2VjdGlvbignRGVwbG95bWVudCBDb21wbGV0ZScpO1xuXG4gICAgICAgIGlmIChyZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgIHByaW50S2V5VmFsdWUoe1xuICAgICAgICAgICAgJ0V4ZWN1dGlvbiBJRCc6IGV4ZWN1dGlvbklkLFxuICAgICAgICAgICAgJ0R1cmF0aW9uJzogYCR7cmVzdWx0LmR1cmF0aW9ufW1zYCxcbiAgICAgICAgICAgICdPdXRwdXQgRGlyZWN0b3J5Jzogb3V0cHV0UGF0aCxcbiAgICAgICAgICAgICdTdGF0dXMnOiAn4pyTIFN1Y2Nlc3MnLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgLy8gUmVnaXN0ZXIgcGlwZWxpbmUgQVJOIGZvciBldmVudCByZXBvcnRpbmcgKG5vbi1ibG9ja2luZykuXG4gICAgICAgICAgLy8gU2tpcHBlZCBpbiAtLWxvY2FsLXNwZWMgbW9kZSBzaW5jZSB0aGVyZSdzIG5vIHBsYXRmb3JtIHRvIHJlZ2lzdGVyIHdpdGguXG4gICAgICAgICAgaWYgKCFwbGF0Zm9ybUNsaWVudCB8fCAhcGxhdGZvcm1Db25maWcpIHtcbiAgICAgICAgICAgIHByaW50SW5mbygnU2tpcHBpbmcgcGlwZWxpbmUgcmVnaXN0cnkgKGxvY2FsLXNwZWMgbW9kZSknKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gQnVpbGQgdGhlIHBheWxvYWQgdXAtZnJvbnQgc28gYSByZWdpc3RyYXRpb24gUE9TVCBmYWlsdXJlIGNhbiB3cml0ZVxuICAgICAgICAgIC8vIHRoZSBzYW1lIHBheWxvYWQgdG8gYSBwZW5kaW5nLWludGVudCBmaWxlIGZvciBgcGlwZWxpbmUtbWFuYWdlclxuICAgICAgICAgIC8vIHJlZ2lzdGVyYCB0byBkcmFpbiBsYXRlci4gV2UgbmV2ZXIgd2FudCB0byByZXRyeSBTVFMgbG9va3VwcyDigJRcbiAgICAgICAgICAvLyB0aGV5IGNhbiBmYWlsIHRvbyAoZS5nLiBjcmVkZW50aWFsIHJvdGF0aW9uKSBhbmQgd291bGQgY29tcG91bmRcbiAgICAgICAgICAvLyB0aGUgaXNzdWUuXG4gICAgICAgICAgaWYgKCFwaXBlbGluZS5vcmdJZCkge1xuICAgICAgICAgICAgcHJpbnRXYXJuaW5nKCdQaXBlbGluZSBoYXMgbm8gb3JnSWQg4oCUIHNraXBwaW5nIHJlZ2lzdHJhdGlvbicpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZXQgcGF5bG9hZDtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcGF5bG9hZCA9IGF3YWl0IGJ1aWxkUmVnaXN0cnlQYXlsb2FkKFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWQ6IHBpcGVsaW5lLmlkLFxuICAgICAgICAgICAgICAgIG9yZ0lkOiBwaXBlbGluZS5vcmdJZCxcbiAgICAgICAgICAgICAgICBwaXBlbGluZU5hbWU6IHBpcGVsaW5lLnBpcGVsaW5lTmFtZSxcbiAgICAgICAgICAgICAgICBwcm9qZWN0OiBwaXBlbGluZS5wcm9qZWN0LFxuICAgICAgICAgICAgICAgIG9yZ2FuaXphdGlvbjogcGlwZWxpbmUub3JnYW5pemF0aW9uLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBvcHRpb25zLnJlZ2lvbixcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBjYXRjaCAoYnVpbGRFcnJvcikge1xuICAgICAgICAgICAgcHJpbnRXYXJuaW5nKCdDb3VsZCBub3QgYnVpbGQgcmVnaXN0cnkgcGF5bG9hZCDigJQgc2tpcHBpbmcgcmVnaXN0cmF0aW9uJywge1xuICAgICAgICAgICAgICBlcnJvcjogYnVpbGRFcnJvciBpbnN0YW5jZW9mIEVycm9yID8gYnVpbGRFcnJvci5tZXNzYWdlIDogU3RyaW5nKGJ1aWxkRXJyb3IpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IHBsYXRmb3JtQ2xpZW50LnBvc3QoYCR7cGxhdGZvcm1Db25maWcuYXBpLnBpcGVsaW5lVXJsfS9yZWdpc3RyeWAsIHBheWxvYWQpO1xuICAgICAgICAgICAgcHJpbnRTdWNjZXNzKCdQaXBlbGluZSByZWdpc3RlcmVkIGZvciBldmVudCByZXBvcnRpbmcnLCB7IHBpcGVsaW5lSWQ6IHBheWxvYWQucGlwZWxpbmVJZCB9KTtcbiAgICAgICAgICB9IGNhdGNoIChyZWdFcnJvcikge1xuICAgICAgICAgICAgLy8gUGVyc2lzdCBmb3IgcmV0cnkuIFRoZSB1c2VyIGNhbiBkcmFpbiB3aXRoIGBwaXBlbGluZS1tYW5hZ2VyXG4gICAgICAgICAgICAvLyByZWdpc3RlcmAgKG9yIGp1c3QgcmUtcnVuIHRoYXQgY29tbWFuZCBhdCBhbnkgdGltZSDigJQgaXQnc1xuICAgICAgICAgICAgLy8gaWRlbXBvdGVudCkuIFRoZSBkZXBsb3kgaXRzZWxmIGRvZXMgTk9UIGZhaWwuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCBpbnRlbnRQYXRoID0gYXdhaXQgd3JpdGVQZW5kaW5nSW50ZW50KHBheWxvYWQpO1xuICAgICAgICAgICAgICBwcmludFdhcm5pbmcoJ1BpcGVsaW5lIHJlZ2lzdHJ5IHVwZGF0ZSBmYWlsZWQ7IHF1ZXVlZCBmb3IgcmV0cnknLCB7XG4gICAgICAgICAgICAgICAgZXJyb3I6IHJlZ0Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyByZWdFcnJvci5tZXNzYWdlIDogU3RyaW5nKHJlZ0Vycm9yKSxcbiAgICAgICAgICAgICAgICByZXRyeTogJ3BpcGVsaW5lLW1hbmFnZXIgcmVnaXN0ZXInLFxuICAgICAgICAgICAgICAgIGludGVudDogaW50ZW50UGF0aCxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGNhdGNoICh3cml0ZUVycikge1xuICAgICAgICAgICAgICBwcmludFdhcm5pbmcoJ1BpcGVsaW5lIHJlZ2lzdHJ5IHVwZGF0ZSBmYWlsZWQgKHJldHJ5IHF1ZXVlIGFsc28gZmFpbGVkKScsIHtcbiAgICAgICAgICAgICAgICBlcnJvcjogcmVnRXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IHJlZ0Vycm9yLm1lc3NhZ2UgOiBTdHJpbmcocmVnRXJyb3IpLFxuICAgICAgICAgICAgICAgIHF1ZXVlRXJyb3I6IHdyaXRlRXJyIGluc3RhbmNlb2YgRXJyb3IgPyB3cml0ZUVyci5tZXNzYWdlIDogU3RyaW5nKHdyaXRlRXJyKSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGhhbmRsZUVycm9yKGVycm9yLCBFUlJPUl9DT0RFUy5BUElfUkVRVUVTVCwge1xuICAgICAgICAgIGRlYnVnOiBwcm9ncmFtLm9wdHMoKS5kZWJ1ZyxcbiAgICAgICAgICBleGl0OiB0cnVlLFxuICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgIGNvbW1hbmQ6ICdkZXBsb3knLFxuICAgICAgICAgICAgZXhlY3V0aW9uSWQsXG4gICAgICAgICAgICBwaXBlbGluZUlkOiBvcHRpb25zLmlkLFxuICAgICAgICAgICAgdmVyaWZ5U3NsOiBvcHRpb25zLnZlcmlmeVNzbCxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbn1cbiJdfQ==
|
|
270
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL2RlcGxveS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sS0FBSyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzlCLE9BQU8sS0FBSyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDekMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLElBQUksTUFBTSxZQUFZLENBQUM7QUFDOUIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBd0MsTUFBTSxtQkFBbUIsQ0FBQztBQUN6RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDakQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLHNCQUFzQixFQUFFLHNCQUFzQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDM0csT0FBTyxFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSw4QkFBOEIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2hILE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDckUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLHFCQUFxQixFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDeEssT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDckUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFaEYsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdB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USxDQUFDOzRCQUN0RSxVQUFVLEVBQUUsUUFBUSxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQzt5QkFDNUUsQ0FBQyxDQUFDO29CQUNMLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7UUFFSCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLFdBQVcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLFdBQVcsRUFBRTtnQkFDMUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLO2dCQUMzQixJQUFJLEVBQUUsSUFBSTtnQkFDVixPQUFPLEVBQUU7b0JBQ1AsT0FBTyxFQUFFLFFBQVE7b0JBQ2pCLFdBQVc7b0JBQ1gsVUFBVSxFQUFFLE9BQU8sQ0FBQyxFQUFFO29CQUN0QixTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVM7aUJBQzdCO2FBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgKiBhcyBmcyBmcm9tICdub2RlOmZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tICdub2RlOnVybCc7XG5pbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCBwaWNvIGZyb20gJ3BpY29jb2xvcnMnO1xuaW1wb3J0IHsgYXNzZXJ0U2hlbGxTYWZlIH0gZnJvbSAnLi4vY29uZmlnL2NsaS5jb25zdGFudHMuanMnO1xuaW1wb3J0IHsgdHlwZSBQaXBlbGluZSwgdHlwZSBQaXBlbGluZVJlc3BvbnNlIH0gZnJvbSAnLi4vdHlwZXMvaW5kZXguanMnO1xuaW1wb3J0IHsgYXVkaXRMb2cgfSBmcm9tICcuLi91dGlscy9hdWRpdC1sb2cuanMnO1xuaW1wb3J0IHsgZW5zdXJlQ2RrQXZhaWxhYmxlLCBleGVjdXRlQ2RrU2hlbGxDb21tYW5kLCByZXNvbHZlQm9pbGVycGxhdGVQYXRoIH0gZnJvbSAnLi4vdXRpbHMvY2RrLXV0aWxzLmpzJztcbmltcG9ydCB7IHByaW50Q29tbWFuZEhlYWRlciwgcHJpbnRTc2xXYXJuaW5nLCBjcmVhdGVBdXRoZW50aWNhdGVkQ2xpZW50QXN5bmMgfSBmcm9tICcuLi91dGlscy9jb21tYW5kLXV0aWxzLmpzJztcbmltcG9ydCB7IEVSUk9SX0NPREVTLCBoYW5kbGVFcnJvciB9IGZyb20gJy4uL3V0aWxzL2Vycm9yLWhhbmRsZXIuanMnO1xuaW1wb3J0IHsgZW5zdXJlT3V0cHV0RGlyZWN0b3J5LCBleHRyYWN0U2luZ2xlUmVzcG9uc2UsIHByaW50RXJyb3IsIHByaW50SW5mbywgcHJpbnRLZXlWYWx1ZSwgcHJpbnRTZWN0aW9uLCBwcmludFN1Y2Nlc3MsIHByaW50V2FybmluZyB9IGZyb20gJy4uL3V0aWxzL291dHB1dC11dGlscy5qcyc7XG5pbXBvcnQgeyByZXNvbHZlUGx1Z2luc0ZvclByb3BzIH0gZnJvbSAnLi4vdXRpbHMvcGx1Z2luLXJlc29sdmVyLmpzJztcbmltcG9ydCB7IGJ1aWxkUmVnaXN0cnlQYXlsb2FkLCB3cml0ZVBlbmRpbmdJbnRlbnQgfSBmcm9tICcuLi91dGlscy9yZWdpc3RyeS5qcyc7XG5cbmNvbnN0IHsgYm9sZCwgY3lhbiwgZGltIH0gPSBwaWNvO1xuXG4vLyBFU00gaGFzIG5vIF9fZGlybmFtZTsgZGVyaXZlIGl0IGZyb20gdGhpcyBtb2R1bGUncyBVUkwuXG5jb25zdCBfX2Rpcm5hbWUgPSBwYXRoLmRpcm5hbWUoZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpKTtcblxuLyoqXG4gKiBSZWdpc3RlcnMgdGhlIGBkZXBsb3lgIGNvbW1hbmQgd2l0aCB0aGUgQ0xJIHByb2dyYW0uXG4gKlxuICogRmV0Y2hlcyBwaXBlbGluZSBwcm9wZXJ0aWVzIGJ5IElEIGZyb20gdGhlIHBsYXRmb3JtIEFQSSwgdGhlblxuICogcnVucyBgY2RrIGRlcGxveWAgdG8gcHJvdmlzaW9uIHRoZSBwaXBlbGluZSBpbmZyYXN0cnVjdHVyZSBpbiBBV1MuXG4gKiBGb3Igc3ludGhlc2lzIG9ubHksIHVzZSBgcGlwZWxpbmUtbWFuYWdlciBzeW50aGAuXG4gKlxuICogUmVxdWlyZXMgc2VydmljZSBjcmVkZW50aWFscyB0byBiZSBwcmUtc3RvcmVkIGluIEFXUyBTZWNyZXRzIE1hbmFnZXIuXG4gKiBDcmVhdGUgdGhlbSBmaXJzdCB3aXRoOiBgcGlwZWxpbmUtbWFuYWdlciBzdG9yZS10b2tlbmBcbiAqXG4gKiBAcGFyYW0gcHJvZ3JhbSAtIFRoZSByb290IENvbW1hbmRlciBwcm9ncmFtIGluc3RhbmNlIHRvIGF0dGFjaCB0aGUgY29tbWFuZCB0by5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlcGxveShwcm9ncmFtOiBDb21tYW5kKTogdm9pZCB7XG4gIHByb2dyYW1cbiAgICAuY29tbWFuZCgnZGVwbG95JylcbiAgICAuZGVzY3JpcHRpb24oJ0RlcGxveSBwaXBlbGluZSBieSBJRCB1c2luZyBBV1MgQ0RLLCBvciAtLWxvY2FsLXNwZWMgdG8gZGVwbG95IGEgbG9jYWwgcGlwZWxpbmUuanNvbiB3aXRob3V0IHRoZSBwbGF0Zm9ybScpXG4gICAgLm9wdGlvbignLWksIC0taWQgPGlkPicsICdQaXBlbGluZSBJRCAoZmV0Y2hlcyBjb25maWcgZnJvbSB0aGUgcGxhdGZvcm0pJylcbiAgICAub3B0aW9uKCctLWxvY2FsLXNwZWMgPHBhdGg+JywgJ1BhdGggdG8gYSBsb2NhbCBwaXBlbGluZS5qc29uIOKAlCBkZXBsb3lzIHdpdGhvdXQgY29udGFjdGluZyB0aGUgcGxhdGZvcm0gKG5vIGF1dGgsIG5vIGNvbXBsaWFuY2UsIG5vIHBsdWdpbiBsb29rdXApJylcbiAgICAub3B0aW9uKCctLXByb2ZpbGUgPHByb2ZpbGU+JywgJ0FXUyBwcm9maWxlJywgJ2RlZmF1bHQnKVxuICAgIC5vcHRpb24oJy0tcmVxdWlyZS1hcHByb3ZhbCA8YXBwcm92YWw+JywgJ0FwcHJvdmFsIGxldmVsOiBuZXZlcnxhbnktY2hhbmdlfGJyb2FkZW5pbmcnLCAnbmV2ZXInKVxuICAgIC5vcHRpb24oJy0tb3V0cHV0IDxkaXI+JywgJ0NESyBvdXRwdXQgZGlyZWN0b3J5JywgJ2Nkay5vdXQnKVxuICAgIC5vcHRpb24oJy0tc3RvcmUtdG9rZW5zJywgJ0F1dGhlbnRpY2F0ZSB1c2luZyB0b2tlbiBmcm9tIEFXUyBTZWNyZXRzIE1hbmFnZXIgKHJlcXVpcmVzIFBMQVRGT1JNX1NFQ1JFVF9OQU1FIGVudiB2YXIpJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS1yZWdpb24gPHJlZ2lvbj4nLCAnQVdTIHJlZ2lvbiAoZm9yIC0tc3RvcmUtdG9rZW5zKScpXG4gICAgLm9wdGlvbignLS12ZXJpZnktc3NsJywgJ0VuYWJsZSBTU0wgY2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uJylcbiAgICAub3B0aW9uKCctLW5vLXZlcmlmeS1zc2wnLCAnRGlzYWJsZSBTU0wgY2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uJylcbiAgICAub3B0aW9uKCctLXNob3ctcmVzb2x2ZWQnLCAnUHJpbnQgdGhlIHJlc29sdmVkIHBpcGVsaW5lIGNvbmZpZyAod2l0aCB7eyAuLi4gfX0gdGVtcGxhdGVzIGV4cGFuZGVkKSBhbmQgZXhpdCB3aXRob3V0IGRlcGxveWluZycsIGZhbHNlKVxuICAgIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgIC8vIE11dHVhbGx5IGV4Y2x1c2l2ZSBpbnB1dCBzb3VyY2VzXG4gICAgICBpZiAoIW9wdGlvbnMuaWQgJiYgIW9wdGlvbnMubG9jYWxTcGVjKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRWl0aGVyIC0taWQgPHBpcGVsaW5lLWlkPiBvciAtLWxvY2FsLXNwZWMgPHBhdGg+IGlzIHJlcXVpcmVkJyk7XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9ucy5pZCAmJiBvcHRpb25zLmxvY2FsU3BlYykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJy0taWQgYW5kIC0tbG9jYWwtc3BlYyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGV4ZWN1dGlvbklkID0gcHJpbnRDb21tYW5kSGVhZGVyKCdQaXBlbGluZSBEZXBsb3knKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgYXVkaXRMb2coJ2RlcGxveScsIHsgZXhlY3V0aW9uSWQsIHBpcGVsaW5lSWQ6IG9wdGlvbnMuaWQsIHByb2ZpbGU6IG9wdGlvbnMucHJvZmlsZSB9KTtcblxuICAgICAgICBwcmludEluZm8oJ0RlcGxveW1lbnQgcGFyYW1ldGVycycsIHtcbiAgICAgICAgICBpZDogb3B0aW9ucy5pZCxcbiAgICAgICAgICBhd3NQcm9maWxlOiBvcHRpb25zLnByb2ZpbGUsXG4gICAgICAgICAgb3V0cHV0RGlyOiBvcHRpb25zLm91dHB1dCxcbiAgICAgICAgICByZXF1aXJlQXBwcm92YWw6IG9wdGlvbnMucmVxdWlyZUFwcHJvdmFsLFxuICAgICAgICAgIHZlcmlmeVNzbDogb3B0aW9ucy52ZXJpZnlTc2wsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFNlY3VyaXR5IHdhcm5pbmcgZm9yIFNTTCB2ZXJpZmljYXRpb24gZGlzYWJsZWRcbiAgICAgICAgcHJpbnRTc2xXYXJuaW5nKG9wdGlvbnMudmVyaWZ5U3NsKTtcblxuICAgICAgICAvLyBQcm9wYWdhdGUgdG8gcHJvY2Vzcy5lbnYgc28gQ0RLIGNvbnN0cnVjdHMgKExhbWJkYSwgQ29kZUJ1aWxkKSBpbmhlcml0IGl0XG4gICAgICAgIGlmIChvcHRpb25zLnZlcmlmeVNzbCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICBwcm9jZXNzLmVudi5OT0RFX1RMU19SRUpFQ1RfVU5BVVRIT1JJWkVEID0gJzAnO1xuICAgICAgICB9XG5cbiAgICAgICAgZW5zdXJlQ2RrQXZhaWxhYmxlKCk7XG4gICAgICAgIHByaW50U3VjY2VzcygnQVdTIENESyBpcyBhdmFpbGFibGUnKTtcblxuICAgICAgICBsZXQgcGlwZWxpbmU6IFBpcGVsaW5lO1xuICAgICAgICBsZXQgcHJvcHNXaXRoSWRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgICAgLy8gUmVtb3RlLW1vZGUgcmVnaXN0cnktcG9zdCBoYW5kbGVzIOKAlCBudWxsIGluIC0tbG9jYWwtc3BlYyBtb2RlLlxuICAgICAgICBsZXQgcGxhdGZvcm1DbGllbnQ6IEF3YWl0ZWQ8UmV0dXJuVHlwZTx0eXBlb2YgY3JlYXRlQXV0aGVudGljYXRlZENsaWVudEFzeW5jPj4gfCB1bmRlZmluZWQ7XG4gICAgICAgIGxldCBwbGF0Zm9ybUNvbmZpZzogeyBhcGk6IHsgcGlwZWxpbmVVcmw6IHN0cmluZyB9IH0gfCB1bmRlZmluZWQ7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMubG9jYWxTcGVjKSB7XG4gICAgICAgICAgLy8gLS1sb2NhbC1zcGVjOiByZWFkIHBpcGVsaW5lLmpzb24gZnJvbSBkaXNrOyBubyBwbGF0Zm9ybSBjb250YWN0LlxuICAgICAgICAgIC8vIENvbXBsaWFuY2UgLyBxdW90YSAvIHBsdWdpbi1sb29rdXAgZmVhdHVyZXMgYWxsIHJlcXVpcmUgdGhlIHBsYXRmb3JtIOKAlFxuICAgICAgICAgIC8vIHRoaXMgbW9kZSBpcyBmb3IgYWlyLWdhcHBlZCBvciBzaW1wbGUgc3RhbmRhbG9uZSBDREsgZGVwbG95bWVudHMuXG4gICAgICAgICAgY29uc3QgYWJzUGF0aCA9IHBhdGgucmVzb2x2ZShvcHRpb25zLmxvY2FsU3BlYyk7XG4gICAgICAgICAgcHJpbnRJbmZvKCdMb2FkaW5nIGxvY2FsIHBpcGVsaW5lIHNwZWMnLCB7IHBhdGg6IGFic1BhdGggfSk7XG4gICAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKGFic1BhdGgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYExvY2FsIHNwZWMgZmlsZSBub3QgZm91bmQ6ICR7YWJzUGF0aH1gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgcmF3ID0gZnMucmVhZEZpbGVTeW5jKGFic1BhdGgsICd1dGYtOCcpO1xuICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UocmF3KSBhcyBQYXJ0aWFsPFBpcGVsaW5lPiAmIHsgcHJvcHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9O1xuICAgICAgICAgIGlmICghcGFyc2VkLnByb3BzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYExvY2FsIHNwZWMgZmlsZSBpcyBtaXNzaW5nIHJlcXVpcmVkICdwcm9wcycgZmllbGQ6ICR7YWJzUGF0aH1gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcGlwZWxpbmUgPSB7XG4gICAgICAgICAgICBpZDogcGFyc2VkLmlkID8/ICdsb2NhbCcsXG4gICAgICAgICAgICBwcm9qZWN0OiBwYXJzZWQucHJvamVjdCA/PyAnbG9jYWwtcHJvamVjdCcsXG4gICAgICAgICAgICBvcmdhbml6YXRpb246IHBhcnNlZC5vcmdhbml6YXRpb24gPz8gJ2xvY2FsLW9yZycsXG4gICAgICAgICAgICBvcmdJZDogcGFyc2VkLm9yZ0lkLFxuICAgICAgICAgICAgaXNEZWZhdWx0OiBwYXJzZWQuaXNEZWZhdWx0ID8/IGZhbHNlLFxuICAgICAgICAgICAgaXNBY3RpdmU6IHBhcnNlZC5pc0FjdGl2ZSA/PyB0cnVlLFxuICAgICAgICAgICAgcHJvcHM6IHBhcnNlZC5wcm9wcyxcbiAgICAgICAgICB9IGFzIFBpcGVsaW5lO1xuICAgICAgICAgIHByaW50U3VjY2VzcygnTG9jYWwgc3BlYyBsb2FkZWQnKTtcbiAgICAgICAgICBwcmludEtleVZhbHVlKHtcbiAgICAgICAgICAgIFNvdXJjZTogYWJzUGF0aCxcbiAgICAgICAgICAgIFByb2plY3Q6IHBpcGVsaW5lLnByb2plY3QsXG4gICAgICAgICAgICBPcmdhbml6YXRpb246IHBpcGVsaW5lLm9yZ2FuaXphdGlvbixcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBwcm9wc1dpdGhJZHMgPSB7XG4gICAgICAgICAgICAuLi5waXBlbGluZS5wcm9wcyxcbiAgICAgICAgICAgIC4uLihwaXBlbGluZS5vcmdJZCAmJiB7IG9yZ0lkOiBwaXBlbGluZS5vcmdJZCB9KSxcbiAgICAgICAgICAgIHBpcGVsaW5lSWQ6IHBpcGVsaW5lLmlkLFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gUmVtb3RlIHBhdGg6IGZldGNoIGNvbmZpZyBmcm9tIHBsYXRmb3JtIEFQSVxuICAgICAgICAgIHBsYXRmb3JtQ2xpZW50ID0gYXdhaXQgY3JlYXRlQXV0aGVudGljYXRlZENsaWVudEFzeW5jKG9wdGlvbnMpO1xuICAgICAgICAgIHBsYXRmb3JtQ29uZmlnID0gcGxhdGZvcm1DbGllbnQuZ2V0Q29uZmlnKCkgYXMgeyBhcGk6IHsgcGlwZWxpbmVVcmw6IHN0cmluZyB9IH07XG5cbiAgICAgICAgICBwcmludEluZm8oJ0ZldGNoaW5nIHBpcGVsaW5lIGNvbmZpZ3VyYXRpb24nLCB7IGlkOiBvcHRpb25zLmlkIH0pO1xuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcGxhdGZvcm1DbGllbnQuZ2V0PFBpcGVsaW5lUmVzcG9uc2U+KFxuICAgICAgICAgICAgYCR7cGxhdGZvcm1Db25maWcuYXBpLnBpcGVsaW5lVXJsfS8ke29wdGlvbnMuaWR9YCxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgY29uc3QgZmV0Y2hlZCA9IGV4dHJhY3RTaW5nbGVSZXNwb25zZTxQaXBlbGluZT4ocmVzcG9uc2UsICdwaXBlbGluZScsICdwcm9wcycpO1xuXG4gICAgICAgICAgaWYgKCFmZXRjaGVkPy5wcm9wcykge1xuICAgICAgICAgICAgcHJpbnRFcnJvcignSW52YWxpZCBwaXBlbGluZSByZXNwb25zZScsIHtcbiAgICAgICAgICAgICAgaWQ6IG9wdGlvbnMuaWQsXG4gICAgICAgICAgICAgIGhhc1Byb3BzOiAhIWZldGNoZWQ/LnByb3BzLFxuICAgICAgICAgICAgICByZXNwb25zZUtleXM6IHJlc3BvbnNlID8gT2JqZWN0LmtleXMocmVzcG9uc2UpIDogJyhudWxsKScsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHJldHJpZXZlIHZhbGlkIHBpcGVsaW5lIHByb3BlcnRpZXMgZm9yIElEOiAke29wdGlvbnMuaWR9YCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHBpcGVsaW5lID0gZmV0Y2hlZDtcblxuICAgICAgICAgIHByaW50U3VjY2VzcygnUGlwZWxpbmUgY29uZmlndXJhdGlvbiByZXRyaWV2ZWQnKTtcbiAgICAgICAgICBwcmludEtleVZhbHVlKHtcbiAgICAgICAgICAgICdJRCc6IHBpcGVsaW5lLmlkLFxuICAgICAgICAgICAgJ1Byb2plY3QnOiBwaXBlbGluZS5wcm9qZWN0LFxuICAgICAgICAgICAgJ09yZ2FuaXphdGlvbic6IHBpcGVsaW5lLm9yZ2FuaXphdGlvbixcbiAgICAgICAgICAgICdJcyBEZWZhdWx0JzogcGlwZWxpbmUuaXNEZWZhdWx0LFxuICAgICAgICAgICAgJ0lzIEFjdGl2ZSc6IHBpcGVsaW5lLmlzQWN0aXZlLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcHJvcHNXaXRoSWRzID0ge1xuICAgICAgICAgICAgLi4ucGlwZWxpbmUucHJvcHMsXG4gICAgICAgICAgICAuLi4ocGlwZWxpbmUub3JnSWQgJiYgeyBvcmdJZDogcGlwZWxpbmUub3JnSWQgfSksXG4gICAgICAgICAgICBwaXBlbGluZUlkOiBwaXBlbGluZS5pZCxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgLy8gUHJlLXJlc29sdmUgcGx1Z2lucyBmcm9tIHRoZSBwbGF0Zm9ybSBBUEkgc28gdGhlIHN5bnRoZXNpemVkXG4gICAgICAgICAgLy8gdGVtcGxhdGUgc2hpcHMgd2l0aCByZWFsIENvZGVCdWlsZCBpbWFnZSBVUklzIGJha2VkIGluLiBXaXRob3V0XG4gICAgICAgICAgLy8gdGhpcywgQ0RLIGZhbGxzIGJhY2sgdG8gc3RhbmRhcmQ6Ny4wICh0aGUgZGVwbG95LXRpbWUgY3VzdG9tXG4gICAgICAgICAgLy8gcmVzb3VyY2UgYXR0cmlidXRlIGlzIHVucmVzb2x2YWJsZSBhdCBzeW50aCB0aW1lKS4gU2tpcHBlZCBpblxuICAgICAgICAgIC8vIC0tbG9jYWwtc3BlYyBtb2RlIHdoZXJlIHRoZXJlJ3Mgbm8gcGxhdGZvcm0gY2xpZW50LlxuICAgICAgICAgIGNvbnN0IHJlc29sdmVkUGx1Z2lucyA9IGF3YWl0IHJlc29sdmVQbHVnaW5zRm9yUHJvcHMocGxhdGZvcm1DbGllbnQsIHByb3BzV2l0aElkcyk7XG4gICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHJlc29sdmVkUGx1Z2lucykubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcHJvcHNXaXRoSWRzLnJlc29sdmVkUGx1Z2lucyA9IHJlc29sdmVkUGx1Z2lucztcbiAgICAgICAgICAgIHByaW50SW5mbygnUHJlLXJlc29sdmVkIHBsdWdpbnMnLCB7IGNvdW50OiBPYmplY3Qua2V5cyhyZXNvbHZlZFBsdWdpbnMpLmxlbmd0aCB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyAtLXNob3ctcmVzb2x2ZWQ6IHByaW50IHJlc29sdmVkIGNvbmZpZyBhbmQgZXhpdCAobm8gQ0RLIGRlcGxveSlcbiAgICAgICAgaWYgKChvcHRpb25zIGFzIHsgc2hvd1Jlc29sdmVkPzogYm9vbGVhbiB9KS5zaG93UmVzb2x2ZWQpIHtcbiAgICAgICAgICBjb25zdCB7IHJlc29sdmVTZWxmUmVmZXJlbmNpbmcgfSA9IGF3YWl0IGltcG9ydCgnQHBpcGVsaW5lLWJ1aWxkZXIvcGlwZWxpbmUtY29yZScpO1xuICAgICAgICAgIGNvbnN0IHByb3BzQW55ID0gcHJvcHNXaXRoSWRzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgICAgIGNvbnN0IHNjb3BlID0geyBtZXRhZGF0YTogcHJvcHNBbnkubWV0YWRhdGEgPz8ge30sIHZhcnM6IHByb3BzQW55LnZhcnMgPz8ge30gfTtcbiAgICAgICAgICBjb25zdCBpc1RwbCA9IChmOiBzdHJpbmcpID0+IGYgPT09ICdwcm9qZWN0TmFtZScgfHwgZi5zdGFydHNXaXRoKCdtZXRhZGF0YS4nKSB8fCBmLnN0YXJ0c1dpdGgoJ3ZhcnMuJyk7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gcmVzb2x2ZVNlbGZSZWZlcmVuY2luZyhwcm9wc0FueSwgc2NvcGUsIGlzVHBsLCAoZjogc3RyaW5nKSA9PiBpc1RwbChmKSA/IGYgOiBudWxsLCAncGlwZWxpbmUnKTtcbiAgICAgICAgICBpZiAocmVzdWx0LmVycm9ycy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1Jlc29sdXRpb24gZXJyb3JzOicpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBlIG9mIHJlc3VsdC5lcnJvcnMpIGNvbnNvbGUuZXJyb3IoYCAgWyR7ZS5maWVsZCA/PyAnPyd9XSAke2UubWVzc2FnZX1gKTtcbiAgICAgICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocHJvcHNXaXRoSWRzLCBudWxsLCAyKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZW5jb2RlZCA9IEJ1ZmZlci5mcm9tKEpTT04uc3RyaW5naWZ5KHByb3BzV2l0aElkcyksICd1dGYtOCcpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgICAgICAgY29uc3Qgb3V0cHV0UGF0aCA9IG9wdGlvbnMub3V0cHV0O1xuXG4gICAgICAgIC8vIEVuc3VyZSBvdXRwdXQgZGlyZWN0b3J5IGV4aXN0c1xuICAgICAgICBwcmludEluZm8oJ1ByZXBhcmluZyBvdXRwdXQgZGlyZWN0b3J5JywgeyBwYXRoOiBvdXRwdXRQYXRoIH0pO1xuICAgICAgICBlbnN1cmVPdXRwdXREaXJlY3Rvcnkob3V0cHV0UGF0aCk7XG5cbiAgICAgICAgLy8gQnVpbGQgQ0RLIGNvbW1hbmQgKHZhbGlkYXRlIGlucHV0cyB0aGF0IGZsb3cgaW50byBzaGVsbClcbiAgICAgICAgaWYgKG9wdGlvbnMucHJvZmlsZSkgYXNzZXJ0U2hlbGxTYWZlKG9wdGlvbnMucHJvZmlsZSwgJ3Byb2ZpbGUnKTtcbiAgICAgICAgYXNzZXJ0U2hlbGxTYWZlKG91dHB1dFBhdGgsICdvdXRwdXQnKTtcblxuICAgICAgICBjb25zdCBzY3JpcHRQYXRoID0gcmVzb2x2ZUJvaWxlcnBsYXRlUGF0aChfX2Rpcm5hbWUpO1xuICAgICAgICBjb25zdCBwcm9maWxlQXJnID0gb3B0aW9ucy5wcm9maWxlID8gYC0tcHJvZmlsZT0ke29wdGlvbnMucHJvZmlsZX1gIDogJyc7XG4gICAgICAgIGNvbnN0IG91dHB1dEFyZyA9IGAtLW91dHB1dD0ke291dHB1dFBhdGh9YDtcbiAgICAgICAgY29uc3QgYXBwQXJnID0gYC0tYXBwPVwibm9kZSAke3NjcmlwdFBhdGh9XCJgO1xuXG4gICAgICAgIGNvbnN0IGNvbW1hbmQgPSBgY2RrIGRlcGxveSAke3Byb2ZpbGVBcmd9IC0tcmVxdWlyZS1hcHByb3ZhbD0ke29wdGlvbnMucmVxdWlyZUFwcHJvdmFsfSAke291dHB1dEFyZ30gLS1ub3RpY2VzPWZhbHNlICR7YXBwQXJnfWA7XG5cbiAgICAgICAgcHJpbnRTZWN0aW9uKCdDREsgRXhlY3V0aW9uJyk7XG4gICAgICAgIGNvbnNvbGUubG9nKGN5YW4oYm9sZCgnQ29tbWFuZDonKSksIGRpbShjb21tYW5kLnNwbGl0KCcgLS0nKVswXSArICcgLi4uJykpO1xuICAgICAgICBjb25zb2xlLmxvZygnJyk7IC8vIEVtcHR5IGxpbmVcblxuICAgICAgICAvLyBFeGVjdXRlIENESyBjb21tYW5kXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGV4ZWN1dGVDZGtTaGVsbENvbW1hbmQoY29tbWFuZCwge1xuICAgICAgICAgIGRlYnVnOiBwcm9ncmFtLm9wdHMoKS5kZWJ1ZyxcbiAgICAgICAgICBzaG93T3V0cHV0OiB0cnVlLFxuICAgICAgICAgIGVudjogeyBQSVBFTElORV9QUk9QUzogZW5jb2RlZCB9LFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zb2xlLmxvZygnJyk7IC8vIEVtcHR5IGxpbmVcbiAgICAgICAgcHJpbnRTZWN0aW9uKCdEZXBsb3ltZW50IENvbXBsZXRlJyk7XG5cbiAgICAgICAgaWYgKHJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgICAgcHJpbnRLZXlWYWx1ZSh7XG4gICAgICAgICAgICAnRXhlY3V0aW9uIElEJzogZXhlY3V0aW9uSWQsXG4gICAgICAgICAgICAnRHVyYXRpb24nOiBgJHtyZXN1bHQuZHVyYXRpb259bXNgLFxuICAgICAgICAgICAgJ091dHB1dCBEaXJlY3RvcnknOiBvdXRwdXRQYXRoLFxuICAgICAgICAgICAgJ1N0YXR1cyc6ICfinJMgU3VjY2VzcycsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBSZWdpc3RlciBwaXBlbGluZSBBUk4gZm9yIGV2ZW50IHJlcG9ydGluZyAobm9uLWJsb2NraW5nKS5cbiAgICAgICAgICAvLyBTa2lwcGVkIGluIC0tbG9jYWwtc3BlYyBtb2RlIHNpbmNlIHRoZXJlJ3Mgbm8gcGxhdGZvcm0gdG8gcmVnaXN0ZXIgd2l0aC5cbiAgICAgICAgICBpZiAoIXBsYXRmb3JtQ2xpZW50IHx8ICFwbGF0Zm9ybUNvbmZpZykge1xuICAgICAgICAgICAgcHJpbnRJbmZvKCdTa2lwcGluZyBwaXBlbGluZSByZWdpc3RyeSAobG9jYWwtc3BlYyBtb2RlKScpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBCdWlsZCB0aGUgcGF5bG9hZCB1cC1mcm9udCBzbyBhIHJlZ2lzdHJhdGlvbiBQT1NUIGZhaWx1cmUgY2FuIHdyaXRlXG4gICAgICAgICAgLy8gdGhlIHNhbWUgcGF5bG9hZCB0byBhIHBlbmRpbmctaW50ZW50IGZpbGUgZm9yIGBwaXBlbGluZS1tYW5hZ2VyXG4gICAgICAgICAgLy8gcmVnaXN0ZXJgIHRvIGRyYWluIGxhdGVyLiBXZSBuZXZlciB3YW50IHRvIHJldHJ5IFNUUyBsb29rdXBzIOKAlFxuICAgICAgICAgIC8vIHRoZXkgY2FuIGZhaWwgdG9vIChlLmcuIGNyZWRlbnRpYWwgcm90YXRpb24pIGFuZCB3b3VsZCBjb21wb3VuZFxuICAgICAgICAgIC8vIHRoZSBpc3N1ZS5cbiAgICAgICAgICBpZiAoIXBpcGVsaW5lLm9yZ0lkKSB7XG4gICAgICAgICAgICBwcmludFdhcm5pbmcoJ1BpcGVsaW5lIGhhcyBubyBvcmdJZCDigJQgc2tpcHBpbmcgcmVnaXN0cmF0aW9uJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGxldCBwYXlsb2FkO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBwYXlsb2FkID0gYXdhaXQgYnVpbGRSZWdpc3RyeVBheWxvYWQoXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZDogcGlwZWxpbmUuaWQsXG4gICAgICAgICAgICAgICAgb3JnSWQ6IHBpcGVsaW5lLm9yZ0lkLFxuICAgICAgICAgICAgICAgIHBpcGVsaW5lTmFtZTogcGlwZWxpbmUucGlwZWxpbmVOYW1lLFxuICAgICAgICAgICAgICAgIHByb2plY3Q6IHBpcGVsaW5lLnByb2plY3QsXG4gICAgICAgICAgICAgICAgb3JnYW5pemF0aW9uOiBwaXBlbGluZS5vcmdhbml6YXRpb24sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG9wdGlvbnMucmVnaW9uLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGNhdGNoIChidWlsZEVycm9yKSB7XG4gICAgICAgICAgICBwcmludFdhcm5pbmcoJ0NvdWxkIG5vdCBidWlsZCByZWdpc3RyeSBwYXlsb2FkIOKAlCBza2lwcGluZyByZWdpc3RyYXRpb24nLCB7XG4gICAgICAgICAgICAgIGVycm9yOiBidWlsZEVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBidWlsZEVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoYnVpbGRFcnJvciksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgcGxhdGZvcm1DbGllbnQucG9zdChgJHtwbGF0Zm9ybUNvbmZpZy5hcGkucGlwZWxpbmVVcmx9L3JlZ2lzdHJ5YCwgcGF5bG9hZCk7XG4gICAgICAgICAgICBwcmludFN1Y2Nlc3MoJ1BpcGVsaW5lIHJlZ2lzdGVyZWQgZm9yIGV2ZW50IHJlcG9ydGluZycsIHsgcGlwZWxpbmVJZDogcGF5bG9hZC5waXBlbGluZUlkIH0pO1xuICAgICAgICAgIH0gY2F0Y2ggKHJlZ0Vycm9yKSB7XG4gICAgICAgICAgICAvLyBQZXJzaXN0IGZvciByZXRyeS4gVGhlIHVzZXIgY2FuIGRyYWluIHdpdGggYHBpcGVsaW5lLW1hbmFnZXJcbiAgICAgICAgICAgIC8vIHJlZ2lzdGVyYCAob3IganVzdCByZS1ydW4gdGhhdCBjb21tYW5kIGF0IGFueSB0aW1lIOKAlCBpdCdzXG4gICAgICAgICAgICAvLyBpZGVtcG90ZW50KS4gVGhlIGRlcGxveSBpdHNlbGYgZG9lcyBOT1QgZmFpbC5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IGludGVudFBhdGggPSBhd2FpdCB3cml0ZVBlbmRpbmdJbnRlbnQocGF5bG9hZCk7XG4gICAgICAgICAgICAgIHByaW50V2FybmluZygnUGlwZWxpbmUgcmVnaXN0cnkgdXBkYXRlIGZhaWxlZDsgcXVldWVkIGZvciByZXRyeScsIHtcbiAgICAgICAgICAgICAgICBlcnJvcjogcmVnRXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IHJlZ0Vycm9yLm1lc3NhZ2UgOiBTdHJpbmcocmVnRXJyb3IpLFxuICAgICAgICAgICAgICAgIHJldHJ5OiAncGlwZWxpbmUtbWFuYWdlciByZWdpc3RlcicsXG4gICAgICAgICAgICAgICAgaW50ZW50OiBpbnRlbnRQYXRoLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKHdyaXRlRXJyKSB7XG4gICAgICAgICAgICAgIHByaW50V2FybmluZygnUGlwZWxpbmUgcmVnaXN0cnkgdXBkYXRlIGZhaWxlZCAocmV0cnkgcXVldWUgYWxzbyBmYWlsZWQpJywge1xuICAgICAgICAgICAgICAgIGVycm9yOiByZWdFcnJvciBpbnN0YW5jZW9mIEVycm9yID8gcmVnRXJyb3IubWVzc2FnZSA6IFN0cmluZyhyZWdFcnJvciksXG4gICAgICAgICAgICAgICAgcXVldWVFcnJvcjogd3JpdGVFcnIgaW5zdGFuY2VvZiBFcnJvciA/IHdyaXRlRXJyLm1lc3NhZ2UgOiBTdHJpbmcod3JpdGVFcnIpLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaGFuZGxlRXJyb3IoZXJyb3IsIEVSUk9SX0NPREVTLkFQSV9SRVFVRVNULCB7XG4gICAgICAgICAgZGVidWc6IHByb2dyYW0ub3B0cygpLmRlYnVnLFxuICAgICAgICAgIGV4aXQ6IHRydWUsXG4gICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgY29tbWFuZDogJ2RlcGxveScsXG4gICAgICAgICAgICBleGVjdXRpb25JZCxcbiAgICAgICAgICAgIHBpcGVsaW5lSWQ6IG9wdGlvbnMuaWQsXG4gICAgICAgICAgICB2ZXJpZnlTc2w6IG9wdGlvbnMudmVyaWZ5U3NsLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xufVxuIl19
|
|
@@ -1,16 +1,12 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
// Copyright 2026 Pipeline Builder Contributors
|
|
3
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
};
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
const
|
|
11
|
-
const error_handler_1 = require("../utils/error-handler");
|
|
12
|
-
const output_utils_1 = require("../utils/output-utils");
|
|
13
|
-
const { bold, dim, green } = picocolors_1.default;
|
|
3
|
+
import { Command } from 'commander';
|
|
4
|
+
import pico from 'picocolors';
|
|
5
|
+
import {} from '../types/index.js';
|
|
6
|
+
import { createAuthenticatedClient, printCommandHeader, printExecutionSummary, printSslWarning, validateEntityId } from '../utils/command-utils.js';
|
|
7
|
+
import { ERROR_CODES, handleError } from '../utils/error-handler.js';
|
|
8
|
+
import { extractSingleResponse, outputData, printError, printInfo, printKeyValue, printSection, printSuccess } from '../utils/output-utils.js';
|
|
9
|
+
const { bold, dim, green } = pico;
|
|
14
10
|
/**
|
|
15
11
|
* Registers the `get-pipeline` command with the CLI program.
|
|
16
12
|
*
|
|
@@ -21,7 +17,7 @@ const { bold, dim, green } = picocolors_1.default;
|
|
|
21
17
|
* pipeline-manager get-pipeline --id <pipeline-id> --output pipeline.json
|
|
22
18
|
* ```
|
|
23
19
|
*/
|
|
24
|
-
function getPipeline(program) {
|
|
20
|
+
export function getPipeline(program) {
|
|
25
21
|
program
|
|
26
22
|
.command('get-pipeline')
|
|
27
23
|
.description('Get a single pipeline by ID')
|
|
@@ -32,30 +28,30 @@ function getPipeline(program) {
|
|
|
32
28
|
.option('--no-verify-ssl', 'Disable SSL certificate verification')
|
|
33
29
|
.option('--show-props', 'Show full pipeline properties in table format', false)
|
|
34
30
|
.action(async (options) => {
|
|
35
|
-
const executionId =
|
|
31
|
+
const executionId = printCommandHeader('Get Pipeline');
|
|
36
32
|
try {
|
|
37
|
-
|
|
38
|
-
|
|
33
|
+
printSslWarning(options.verifySsl);
|
|
34
|
+
printInfo('Request parameters', {
|
|
39
35
|
id: options.id,
|
|
40
36
|
format: options.format,
|
|
41
37
|
output: options.output || '(console)',
|
|
42
38
|
});
|
|
43
|
-
const pipelineId =
|
|
44
|
-
const client =
|
|
39
|
+
const pipelineId = validateEntityId(options.id, 'Pipeline');
|
|
40
|
+
const client = createAuthenticatedClient(options);
|
|
45
41
|
// Fetch pipeline
|
|
46
42
|
console.log('');
|
|
47
|
-
|
|
43
|
+
printSection('Fetching Pipeline');
|
|
48
44
|
const startTime = Date.now();
|
|
49
45
|
const response = await client.get(`${client.getConfig().api.pipelineUrl}/${pipelineId}`);
|
|
50
46
|
const duration = Date.now() - startTime;
|
|
51
|
-
const pipeline =
|
|
47
|
+
const pipeline = extractSingleResponse(response, 'pipeline', 'id');
|
|
52
48
|
if (!pipeline) {
|
|
53
|
-
|
|
49
|
+
printError('No pipeline returned from API');
|
|
54
50
|
throw new Error(`Failed to retrieve pipeline with ID: ${pipelineId}`);
|
|
55
51
|
}
|
|
56
52
|
console.log('');
|
|
57
|
-
|
|
58
|
-
|
|
53
|
+
printSection('Pipeline Retrieved Successfully');
|
|
54
|
+
printKeyValue({
|
|
59
55
|
'Pipeline ID': green(bold(pipeline.id)),
|
|
60
56
|
'Project': pipeline.project,
|
|
61
57
|
'Organization': pipeline.organization,
|
|
@@ -69,24 +65,24 @@ function getPipeline(program) {
|
|
|
69
65
|
// Show properties if requested
|
|
70
66
|
if (options.showProps && options.format === 'table' && pipeline.props && Object.keys(pipeline.props).length > 0) {
|
|
71
67
|
console.log('');
|
|
72
|
-
|
|
68
|
+
printInfo('Pipeline Properties', { keys: Object.keys(pipeline.props).length });
|
|
73
69
|
console.log(dim('─'.repeat(process.stdout.columns || 80)));
|
|
74
70
|
console.log(JSON.stringify(pipeline.props, null, 2));
|
|
75
71
|
console.log(dim('─'.repeat(process.stdout.columns || 80)));
|
|
76
72
|
}
|
|
77
|
-
|
|
78
|
-
|
|
73
|
+
printExecutionSummary(executionId, duration);
|
|
74
|
+
outputData(pipeline, {
|
|
79
75
|
format: options.format,
|
|
80
76
|
file: options.output,
|
|
81
77
|
silent: false,
|
|
82
78
|
});
|
|
83
79
|
if (options.output) {
|
|
84
80
|
console.log('');
|
|
85
|
-
|
|
81
|
+
printSuccess('Pipeline data saved', { path: options.output });
|
|
86
82
|
}
|
|
87
83
|
}
|
|
88
84
|
catch (error) {
|
|
89
|
-
|
|
85
|
+
handleError(error, ERROR_CODES.API_REQUEST, {
|
|
90
86
|
debug: program.opts().debug,
|
|
91
87
|
exit: true,
|
|
92
88
|
context: { command: 'get-pipeline', executionId, pipelineId: options.id },
|
|
@@ -94,4 +90,4 @@ function getPipeline(program) {
|
|
|
94
90
|
}
|
|
95
91
|
});
|
|
96
92
|
}
|
|
97
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LXBpcGVsaW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL2dldC1waXBlbGluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0NBQStDO0FBQy9DLHNDQUFzQzs7Ozs7QUFxQnRDLGtDQXFGQztBQXZHRCw0REFBOEI7QUFFOUIsMERBQWlKO0FBQ2pKLDBEQUFrRTtBQUNsRSx3REFBNEk7QUFFNUksTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsb0JBQUksQ0FBQztBQUVsQzs7Ozs7Ozs7O0dBU0c7QUFDSCxTQUFnQixXQUFXLENBQUMsT0FBZ0I7SUFDMUMsT0FBTztTQUNKLE9BQU8sQ0FBQyxjQUFjLENBQUM7U0FDdkIsV0FBVyxDQUFDLDZCQUE2QixDQUFDO1NBQzFDLGNBQWMsQ0FBQyxlQUFlLEVBQUUsYUFBYSxDQUFDO1NBQzlDLE1BQU0sQ0FBQyx1QkFBdUIsRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLENBQUM7U0FDNUUsTUFBTSxDQUFDLHFCQUFxQixFQUFFLHFCQUFxQixDQUFDO1NBQ3BELE1BQU0sQ0FBQyxjQUFjLEVBQUUscUNBQXFDLENBQUM7U0FDN0QsTUFBTSxDQUFDLGlCQUFpQixFQUFFLHNDQUFzQyxDQUFDO1NBQ2pFLE1BQU0sQ0FBQyxjQUFjLEVBQUUsK0NBQStDLEVBQUUsS0FBSyxDQUFDO1NBQzlFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7UUFDeEIsTUFBTSxXQUFXLEdBQUcsSUFBQSxrQ0FBa0IsRUFBQyxjQUFjLENBQUMsQ0FBQztRQUV2RCxJQUFJLENBQUM7WUFDSCxJQUFBLCtCQUFlLEVBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ25DLElBQUEsd0JBQVMsRUFBQyxvQkFBb0IsRUFBRTtnQkFDOUIsRUFBRSxFQUFFLE9BQU8sQ0FBQyxFQUFFO2dCQUNkLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtnQkFDdEIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLElBQUksV0FBVzthQUN0QyxDQUFDLENBQUM7WUFFSCxNQUFNLFVBQVUsR0FBRyxJQUFBLGdDQUFnQixFQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDNUQsTUFBTSxNQUFNLEdBQUcsSUFBQSx5Q0FBeUIsRUFBQyxPQUFPLENBQUMsQ0FBQztZQUVsRCxpQkFBaUI7WUFDakIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNoQixJQUFBLDJCQUFZLEVBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUVsQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDN0IsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsR0FBRyxDQUMvQixHQUFHLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsV0FBVyxJQUFJLFVBQVUsRUFBRSxDQUN0RCxDQUFDO1lBQ0YsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLFNBQVMsQ0FBQztZQUV4QyxNQUFNLFFBQVEsR0FBRyxJQUFBLG9DQUFxQixFQUFXLFFBQVEsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDN0UsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNkLElBQUEseUJBQVUsRUFBQywrQkFBK0IsQ0FBQyxDQUFDO2dCQUM1QyxNQUFNLElBQUksS0FBSyxDQUFDLHdDQUF3QyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1lBQ3hFLENBQUM7WUFFRCxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2hCLElBQUEsMkJBQVksRUFBQyxpQ0FBaUMsQ0FBQyxDQUFDO1lBRWhELElBQUEsNEJBQWEsRUFBQztnQkFDWixhQUFhLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3ZDLFNBQVMsRUFBRSxRQUFRLENBQUMsT0FBTztnQkFDM0IsY0FBYyxFQUFFLFFBQVEsQ0FBQyxZQUFZO2dCQUNyQyxNQUFNLEVBQUUsUUFBUSxDQUFDLFlBQVksSUFBSSxXQUFXO2dCQUM1QyxRQUFRLEVBQUUsUUFBUSxDQUFDLGNBQWMsSUFBSSxTQUFTO2dCQUM5QyxTQUFTLEVBQUUsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJO2dCQUM1QyxRQUFRLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJO2dCQUMxQyxZQUFZLEVBQUUsUUFBUSxDQUFDLFNBQVMsSUFBSSxpQkFBaUI7Z0JBQ3JELFlBQVksRUFBRSxRQUFRLENBQUMsU0FBUyxJQUFJLGlCQUFpQjthQUN0RCxDQUFDLENBQUM7WUFFSCwrQkFBK0I7WUFDL0IsSUFBSSxPQUFPLENBQUMsU0FBUyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssT0FBTyxJQUFJLFFBQVEsQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNoSCxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNoQixJQUFBLHdCQUFTLEVBQUMscUJBQXFCLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztnQkFDL0UsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzNELE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNyRCxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3RCxDQUFDO1lBRUQsSUFBQSxxQ0FBcUIsRUFBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFFN0MsSUFBQSx5QkFBVSxFQUFDLFFBQVEsRUFBRTtnQkFDbkIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO2dCQUN0QixJQUFJLEVBQUUsT0FBTyxDQUFDLE1BQU07Z0JBQ3BCLE1BQU0sRUFBRSxLQUFLO2FBQ2QsQ0FBQyxDQUFDO1lBRUgsSUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ25CLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ2hCLElBQUEsMkJBQVksRUFBQyxxQkFBcUIsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUNoRSxDQUFDO1FBRUgsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixJQUFBLDJCQUFXLEVBQUMsS0FBSyxFQUFFLDJCQUFXLENBQUMsV0FBVyxFQUFFO2dCQUMxQyxLQUFLLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUs7Z0JBQzNCLElBQUksRUFBRSxJQUFJO2dCQUNWLE9BQU8sRUFBRSxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFO2FBQzFFLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQgcGljbyBmcm9tICdwaWNvY29sb3JzJztcbmltcG9ydCB7IFBpcGVsaW5lLCBQaXBlbGluZVJlc3BvbnNlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgY3JlYXRlQXV0aGVudGljYXRlZENsaWVudCwgcHJpbnRDb21tYW5kSGVhZGVyLCBwcmludEV4ZWN1dGlvblN1bW1hcnksIHByaW50U3NsV2FybmluZywgdmFsaWRhdGVFbnRpdHlJZCB9IGZyb20gJy4uL3V0aWxzL2NvbW1hbmQtdXRpbHMnO1xuaW1wb3J0IHsgRVJST1JfQ09ERVMsIGhhbmRsZUVycm9yIH0gZnJvbSAnLi4vdXRpbHMvZXJyb3ItaGFuZGxlcic7XG5pbXBvcnQgeyBleHRyYWN0U2luZ2xlUmVzcG9uc2UsIG91dHB1dERhdGEsIHByaW50RXJyb3IsIHByaW50SW5mbywgcHJpbnRLZXlWYWx1ZSwgcHJpbnRTZWN0aW9uLCBwcmludFN1Y2Nlc3MgfSBmcm9tICcuLi91dGlscy9vdXRwdXQtdXRpbHMnO1xuXG5jb25zdCB7IGJvbGQsIGRpbSwgZ3JlZW4gfSA9IHBpY287XG5cbi8qKlxuICogUmVnaXN0ZXJzIHRoZSBgZ2V0LXBpcGVsaW5lYCBjb21tYW5kIHdpdGggdGhlIENMSSBwcm9ncmFtLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBiYXNoXG4gKiBwaXBlbGluZS1tYW5hZ2VyIGdldC1waXBlbGluZSAtLWlkIDxwaXBlbGluZS1pZD5cbiAqIHBpcGVsaW5lLW1hbmFnZXIgZ2V0LXBpcGVsaW5lIC0taWQgPHBpcGVsaW5lLWlkPiAtLWZvcm1hdCBqc29uXG4gKiBwaXBlbGluZS1tYW5hZ2VyIGdldC1waXBlbGluZSAtLWlkIDxwaXBlbGluZS1pZD4gLS1vdXRwdXQgcGlwZWxpbmUuanNvblxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQaXBlbGluZShwcm9ncmFtOiBDb21tYW5kKTogdm9pZCB7XG4gIHByb2dyYW1cbiAgICAuY29tbWFuZCgnZ2V0LXBpcGVsaW5lJylcbiAgICAuZGVzY3JpcHRpb24oJ0dldCBhIHNpbmdsZSBwaXBlbGluZSBieSBJRCcpXG4gICAgLnJlcXVpcmVkT3B0aW9uKCctaSwgLS1pZCA8aWQ+JywgJ1BpcGVsaW5lIElEJylcbiAgICAub3B0aW9uKCctZiwgLS1mb3JtYXQgPGZvcm1hdD4nLCAnT3V0cHV0IGZvcm1hdCAoanNvbiwgeWFtbCwgdGFibGUpJywgJ2pzb24nKVxuICAgIC5vcHRpb24oJy1vLCAtLW91dHB1dCA8ZmlsZT4nLCAnU2F2ZSBvdXRwdXQgdG8gZmlsZScpXG4gICAgLm9wdGlvbignLS12ZXJpZnktc3NsJywgJ0VuYWJsZSBTU0wgY2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uJylcbiAgICAub3B0aW9uKCctLW5vLXZlcmlmeS1zc2wnLCAnRGlzYWJsZSBTU0wgY2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uJylcbiAgICAub3B0aW9uKCctLXNob3ctcHJvcHMnLCAnU2hvdyBmdWxsIHBpcGVsaW5lIHByb3BlcnRpZXMgaW4gdGFibGUgZm9ybWF0JywgZmFsc2UpXG4gICAgLmFjdGlvbihhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgY29uc3QgZXhlY3V0aW9uSWQgPSBwcmludENvbW1hbmRIZWFkZXIoJ0dldCBQaXBlbGluZScpO1xuXG4gICAgICB0cnkge1xuICAgICAgICBwcmludFNzbFdhcm5pbmcob3B0aW9ucy52ZXJpZnlTc2wpO1xuICAgICAgICBwcmludEluZm8oJ1JlcXVlc3QgcGFyYW1ldGVycycsIHtcbiAgICAgICAgICBpZDogb3B0aW9ucy5pZCxcbiAgICAgICAgICBmb3JtYXQ6IG9wdGlvbnMuZm9ybWF0LFxuICAgICAgICAgIG91dHB1dDogb3B0aW9ucy5vdXRwdXQgfHwgJyhjb25zb2xlKScsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHBpcGVsaW5lSWQgPSB2YWxpZGF0ZUVudGl0eUlkKG9wdGlvbnMuaWQsICdQaXBlbGluZScpO1xuICAgICAgICBjb25zdCBjbGllbnQgPSBjcmVhdGVBdXRoZW50aWNhdGVkQ2xpZW50KG9wdGlvbnMpO1xuXG4gICAgICAgIC8vIEZldGNoIHBpcGVsaW5lXG4gICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgcHJpbnRTZWN0aW9uKCdGZXRjaGluZyBQaXBlbGluZScpO1xuXG4gICAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldDxQaXBlbGluZVJlc3BvbnNlPihcbiAgICAgICAgICBgJHtjbGllbnQuZ2V0Q29uZmlnKCkuYXBpLnBpcGVsaW5lVXJsfS8ke3BpcGVsaW5lSWR9YCxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgZHVyYXRpb24gPSBEYXRlLm5vdygpIC0gc3RhcnRUaW1lO1xuXG4gICAgICAgIGNvbnN0IHBpcGVsaW5lID0gZXh0cmFjdFNpbmdsZVJlc3BvbnNlPFBpcGVsaW5lPihyZXNwb25zZSwgJ3BpcGVsaW5lJywgJ2lkJyk7XG4gICAgICAgIGlmICghcGlwZWxpbmUpIHtcbiAgICAgICAgICBwcmludEVycm9yKCdObyBwaXBlbGluZSByZXR1cm5lZCBmcm9tIEFQSScpO1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHJldHJpZXZlIHBpcGVsaW5lIHdpdGggSUQ6ICR7cGlwZWxpbmVJZH1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgcHJpbnRTZWN0aW9uKCdQaXBlbGluZSBSZXRyaWV2ZWQgU3VjY2Vzc2Z1bGx5Jyk7XG5cbiAgICAgICAgcHJpbnRLZXlWYWx1ZSh7XG4gICAgICAgICAgJ1BpcGVsaW5lIElEJzogZ3JlZW4oYm9sZChwaXBlbGluZS5pZCkpLFxuICAgICAgICAgICdQcm9qZWN0JzogcGlwZWxpbmUucHJvamVjdCxcbiAgICAgICAgICAnT3JnYW5pemF0aW9uJzogcGlwZWxpbmUub3JnYW5pemF0aW9uLFxuICAgICAgICAgICdOYW1lJzogcGlwZWxpbmUucGlwZWxpbmVOYW1lIHx8ICcobm90IHNldCknLFxuICAgICAgICAgICdBY2Nlc3MnOiBwaXBlbGluZS5hY2Nlc3NNb2RpZmllciB8fCAncHJpdmF0ZScsXG4gICAgICAgICAgJ0RlZmF1bHQnOiBwaXBlbGluZS5pc0RlZmF1bHQgPyAnWWVzJyA6ICdObycsXG4gICAgICAgICAgJ0FjdGl2ZSc6IHBpcGVsaW5lLmlzQWN0aXZlID8gJ1llcycgOiAnTm8nLFxuICAgICAgICAgICdDcmVhdGVkIEF0JzogcGlwZWxpbmUuY3JlYXRlZEF0IHx8ICcobm90IGF2YWlsYWJsZSknLFxuICAgICAgICAgICdVcGRhdGVkIEF0JzogcGlwZWxpbmUudXBkYXRlZEF0IHx8ICcobm90IGF2YWlsYWJsZSknLFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBTaG93IHByb3BlcnRpZXMgaWYgcmVxdWVzdGVkXG4gICAgICAgIGlmIChvcHRpb25zLnNob3dQcm9wcyAmJiBvcHRpb25zLmZvcm1hdCA9PT0gJ3RhYmxlJyAmJiBwaXBlbGluZS5wcm9wcyAmJiBPYmplY3Qua2V5cyhwaXBlbGluZS5wcm9wcykubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgICBwcmludEluZm8oJ1BpcGVsaW5lIFByb3BlcnRpZXMnLCB7IGtleXM6IE9iamVjdC5rZXlzKHBpcGVsaW5lLnByb3BzKS5sZW5ndGggfSk7XG4gICAgICAgICAgY29uc29sZS5sb2coZGltKCfilIAnLnJlcGVhdChwcm9jZXNzLnN0ZG91dC5jb2x1bW5zIHx8IDgwKSkpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHBpcGVsaW5lLnByb3BzLCBudWxsLCAyKSk7XG4gICAgICAgICAgY29uc29sZS5sb2coZGltKCfilIAnLnJlcGVhdChwcm9jZXNzLnN0ZG91dC5jb2x1bW5zIHx8IDgwKSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJpbnRFeGVjdXRpb25TdW1tYXJ5KGV4ZWN1dGlvbklkLCBkdXJhdGlvbik7XG5cbiAgICAgICAgb3V0cHV0RGF0YShwaXBlbGluZSwge1xuICAgICAgICAgIGZvcm1hdDogb3B0aW9ucy5mb3JtYXQsXG4gICAgICAgICAgZmlsZTogb3B0aW9ucy5vdXRwdXQsXG4gICAgICAgICAgc2lsZW50OiBmYWxzZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMub3V0cHV0KSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgICAgIHByaW50U3VjY2VzcygnUGlwZWxpbmUgZGF0YSBzYXZlZCcsIHsgcGF0aDogb3B0aW9ucy5vdXRwdXQgfSk7XG4gICAgICAgIH1cblxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaGFuZGxlRXJyb3IoZXJyb3IsIEVSUk9SX0NPREVTLkFQSV9SRVFVRVNULCB7XG4gICAgICAgICAgZGVidWc6IHByb2dyYW0ub3B0cygpLmRlYnVnLFxuICAgICAgICAgIGV4aXQ6IHRydWUsXG4gICAgICAgICAgY29udGV4dDogeyBjb21tYW5kOiAnZ2V0LXBpcGVsaW5lJywgZXhlY3V0aW9uSWQsIHBpcGVsaW5lSWQ6IG9wdGlvbnMuaWQgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG59XG4iXX0=
|
|
93
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LXBpcGVsaW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL2dldC1waXBlbGluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxJQUFJLE1BQU0sWUFBWSxDQUFDO0FBQzlCLE9BQU8sRUFBd0MsTUFBTSxtQkFBbUIsQ0FBQztBQUN6RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsa0JBQWtCLEVBQUUscUJBQXFCLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDcEosT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUUvSSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFFbEM7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FBQyxPQUFnQjtJQUMxQyxPQUFPO1NBQ0osT0FBTyxDQUFDLGNBQWMsQ0FBQztTQUN2QixXQUFXLENBQUMsNkJBQTZCLENBQUM7U0FDMUMsY0FBYyxDQUFDLGVBQWUsRUFBRSxhQUFhLENBQUM7U0FDOUMsTUFBTSxDQUFDLHVCQUF1QixFQUFFLG1DQUFtQyxFQUFFLE1BQU0sQ0FBQztTQUM1RSxNQUFNLENBQUMscUJBQXFCLEVBQUUscUJBQXFCLENBQUM7U0FDcEQsTUFBTSxDQUFDLGNBQWMsRUFBRSxxQ0FBcUMsQ0FBQztTQUM3RCxNQUFNLENBQUMsaUJBQWlCLEVBQUUsc0NBQXNDLENBQUM7U0FDakUsTUFBTSxDQUFD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QzFFLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQgcGljbyBmcm9tICdwaWNvY29sb3JzJztcbmltcG9ydCB7IHR5cGUgUGlwZWxpbmUsIHR5cGUgUGlwZWxpbmVSZXNwb25zZSB9IGZyb20gJy4uL3R5cGVzL2luZGV4LmpzJztcbmltcG9ydCB7IGNyZWF0ZUF1dGhlbnRpY2F0ZWRDbGllbnQsIHByaW50Q29tbWFuZEhlYWRlciwgcHJpbnRFeGVjdXRpb25TdW1tYXJ5LCBwcmludFNzbFdhcm5pbmcsIHZhbGlkYXRlRW50aXR5SWQgfSBmcm9tICcuLi91dGlscy9jb21tYW5kLXV0aWxzLmpzJztcbmltcG9ydCB7IEVSUk9SX0NPREVTLCBoYW5kbGVFcnJvciB9IGZyb20gJy4uL3V0aWxzL2Vycm9yLWhhbmRsZXIuanMnO1xuaW1wb3J0IHsgZXh0cmFjdFNpbmdsZVJlc3BvbnNlLCBvdXRwdXREYXRhLCBwcmludEVycm9yLCBwcmludEluZm8sIHByaW50S2V5VmFsdWUsIHByaW50U2VjdGlvbiwgcHJpbnRTdWNjZXNzIH0gZnJvbSAnLi4vdXRpbHMvb3V0cHV0LXV0aWxzLmpzJztcblxuY29uc3QgeyBib2xkLCBkaW0sIGdyZWVuIH0gPSBwaWNvO1xuXG4vKipcbiAqIFJlZ2lzdGVycyB0aGUgYGdldC1waXBlbGluZWAgY29tbWFuZCB3aXRoIHRoZSBDTEkgcHJvZ3JhbS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgYmFzaFxuICogcGlwZWxpbmUtbWFuYWdlciBnZXQtcGlwZWxpbmUgLS1pZCA8cGlwZWxpbmUtaWQ+XG4gKiBwaXBlbGluZS1tYW5hZ2VyIGdldC1waXBlbGluZSAtLWlkIDxwaXBlbGluZS1pZD4gLS1mb3JtYXQganNvblxuICogcGlwZWxpbmUtbWFuYWdlciBnZXQtcGlwZWxpbmUgLS1pZCA8cGlwZWxpbmUtaWQ+IC0tb3V0cHV0IHBpcGVsaW5lLmpzb25cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGlwZWxpbmUocHJvZ3JhbTogQ29tbWFuZCk6IHZvaWQge1xuICBwcm9ncmFtXG4gICAgLmNvbW1hbmQoJ2dldC1waXBlbGluZScpXG4gICAgLmRlc2NyaXB0aW9uKCdHZXQgYSBzaW5nbGUgcGlwZWxpbmUgYnkgSUQnKVxuICAgIC5yZXF1aXJlZE9wdGlvbignLWksIC0taWQgPGlkPicsICdQaXBlbGluZSBJRCcpXG4gICAgLm9wdGlvbignLWYsIC0tZm9ybWF0IDxmb3JtYXQ+JywgJ091dHB1dCBmb3JtYXQgKGpzb24sIHlhbWwsIHRhYmxlKScsICdqc29uJylcbiAgICAub3B0aW9uKCctbywgLS1vdXRwdXQgPGZpbGU+JywgJ1NhdmUgb3V0cHV0IHRvIGZpbGUnKVxuICAgIC5vcHRpb24oJy0tdmVyaWZ5LXNzbCcsICdFbmFibGUgU1NMIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbicpXG4gICAgLm9wdGlvbignLS1uby12ZXJpZnktc3NsJywgJ0Rpc2FibGUgU1NMIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbicpXG4gICAgLm9wdGlvbignLS1zaG93LXByb3BzJywgJ1Nob3cgZnVsbCBwaXBlbGluZSBwcm9wZXJ0aWVzIGluIHRhYmxlIGZvcm1hdCcsIGZhbHNlKVxuICAgIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgIGNvbnN0IGV4ZWN1dGlvbklkID0gcHJpbnRDb21tYW5kSGVhZGVyKCdHZXQgUGlwZWxpbmUnKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcHJpbnRTc2xXYXJuaW5nKG9wdGlvbnMudmVyaWZ5U3NsKTtcbiAgICAgICAgcHJpbnRJbmZvKCdSZXF1ZXN0IHBhcmFtZXRlcnMnLCB7XG4gICAgICAgICAgaWQ6IG9wdGlvbnMuaWQsXG4gICAgICAgICAgZm9ybWF0OiBvcHRpb25zLmZvcm1hdCxcbiAgICAgICAgICBvdXRwdXQ6IG9wdGlvbnMub3V0cHV0IHx8ICcoY29uc29sZSknLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBwaXBlbGluZUlkID0gdmFsaWRhdGVFbnRpdHlJZChvcHRpb25zLmlkLCAnUGlwZWxpbmUnKTtcbiAgICAgICAgY29uc3QgY2xpZW50ID0gY3JlYXRlQXV0aGVudGljYXRlZENsaWVudChvcHRpb25zKTtcblxuICAgICAgICAvLyBGZXRjaCBwaXBlbGluZVxuICAgICAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgICAgIHByaW50U2VjdGlvbignRmV0Y2hpbmcgUGlwZWxpbmUnKTtcblxuICAgICAgICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXQ8UGlwZWxpbmVSZXNwb25zZT4oXG4gICAgICAgICAgYCR7Y2xpZW50LmdldENvbmZpZygpLmFwaS5waXBlbGluZVVybH0vJHtwaXBlbGluZUlkfWAsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGR1cmF0aW9uID0gRGF0ZS5ub3coKSAtIHN0YXJ0VGltZTtcblxuICAgICAgICBjb25zdCBwaXBlbGluZSA9IGV4dHJhY3RTaW5nbGVSZXNwb25zZTxQaXBlbGluZT4ocmVzcG9uc2UsICdwaXBlbGluZScsICdpZCcpO1xuICAgICAgICBpZiAoIXBpcGVsaW5lKSB7XG4gICAgICAgICAgcHJpbnRFcnJvcignTm8gcGlwZWxpbmUgcmV0dXJuZWQgZnJvbSBBUEknKTtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byByZXRyaWV2ZSBwaXBlbGluZSB3aXRoIElEOiAke3BpcGVsaW5lSWR9YCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgICAgIHByaW50U2VjdGlvbignUGlwZWxpbmUgUmV0cmlldmVkIFN1Y2Nlc3NmdWxseScpO1xuXG4gICAgICAgIHByaW50S2V5VmFsdWUoe1xuICAgICAgICAgICdQaXBlbGluZSBJRCc6IGdyZWVuKGJvbGQocGlwZWxpbmUuaWQpKSxcbiAgICAgICAgICAnUHJvamVjdCc6IHBpcGVsaW5lLnByb2plY3QsXG4gICAgICAgICAgJ09yZ2FuaXphdGlvbic6IHBpcGVsaW5lLm9yZ2FuaXphdGlvbixcbiAgICAgICAgICAnTmFtZSc6IHBpcGVsaW5lLnBpcGVsaW5lTmFtZSB8fCAnKG5vdCBzZXQpJyxcbiAgICAgICAgICAnQWNjZXNzJzogcGlwZWxpbmUuYWNjZXNzTW9kaWZpZXIgfHwgJ3ByaXZhdGUnLFxuICAgICAgICAgICdEZWZhdWx0JzogcGlwZWxpbmUuaXNEZWZhdWx0ID8gJ1llcycgOiAnTm8nLFxuICAgICAgICAgICdBY3RpdmUnOiBwaXBlbGluZS5pc0FjdGl2ZSA/ICdZZXMnIDogJ05vJyxcbiAgICAgICAgICAnQ3JlYXRlZCBBdCc6IHBpcGVsaW5lLmNyZWF0ZWRBdCB8fCAnKG5vdCBhdmFpbGFibGUpJyxcbiAgICAgICAgICAnVXBkYXRlZCBBdCc6IHBpcGVsaW5lLnVwZGF0ZWRBdCB8fCAnKG5vdCBhdmFpbGFibGUpJyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gU2hvdyBwcm9wZXJ0aWVzIGlmIHJlcXVlc3RlZFxuICAgICAgICBpZiAob3B0aW9ucy5zaG93UHJvcHMgJiYgb3B0aW9ucy5mb3JtYXQgPT09ICd0YWJsZScgJiYgcGlwZWxpbmUucHJvcHMgJiYgT2JqZWN0LmtleXMocGlwZWxpbmUucHJvcHMpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgICAgICAgcHJpbnRJbmZvKCdQaXBlbGluZSBQcm9wZXJ0aWVzJywgeyBrZXlzOiBPYmplY3Qua2V5cyhwaXBlbGluZS5wcm9wcykubGVuZ3RoIH0pO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGRpbSgn4pSAJy5yZXBlYXQocHJvY2Vzcy5zdGRvdXQuY29sdW1ucyB8fCA4MCkpKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShwaXBlbGluZS5wcm9wcywgbnVsbCwgMikpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGRpbSgn4pSAJy5yZXBlYXQocHJvY2Vzcy5zdGRvdXQuY29sdW1ucyB8fCA4MCkpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHByaW50RXhlY3V0aW9uU3VtbWFyeShleGVjdXRpb25JZCwgZHVyYXRpb24pO1xuXG4gICAgICAgIG91dHB1dERhdGEocGlwZWxpbmUsIHtcbiAgICAgICAgICBmb3JtYXQ6IG9wdGlvbnMuZm9ybWF0LFxuICAgICAgICAgIGZpbGU6IG9wdGlvbnMub3V0cHV0LFxuICAgICAgICAgIHNpbGVudDogZmFsc2UsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChvcHRpb25zLm91dHB1dCkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgICBwcmludFN1Y2Nlc3MoJ1BpcGVsaW5lIGRhdGEgc2F2ZWQnLCB7IHBhdGg6IG9wdGlvbnMub3V0cHV0IH0pO1xuICAgICAgICB9XG5cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGhhbmRsZUVycm9yKGVycm9yLCBFUlJPUl9DT0RFUy5BUElfUkVRVUVTVCwge1xuICAgICAgICAgIGRlYnVnOiBwcm9ncmFtLm9wdHMoKS5kZWJ1ZyxcbiAgICAgICAgICBleGl0OiB0cnVlLFxuICAgICAgICAgIGNvbnRleHQ6IHsgY29tbWFuZDogJ2dldC1waXBlbGluZScsIGV4ZWN1dGlvbklkLCBwaXBlbGluZUlkOiBvcHRpb25zLmlkIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xufVxuIl19
|