@workflow/nitro 5.0.0-beta.27 → 5.0.0-beta.29
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/dist/index.d.ts.map +1 -1
- package/dist/index.js +143 -62
- package/dist/vite.d.ts.map +1 -1
- package/dist/vite.js +34 -4
- package/package.json +8 -8
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,KAAK,EAA6B,MAAM,aAAa,CAAC;AAGpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C,YAAY,EAAE,aAAa,EAAE,CAAC;;;iBAiKT,KAAK;;AAF1B,wBAyOwB"}
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
3
|
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
4
|
-
import { WORKFLOW_QUEUE_TRIGGER } from '@workflow/builders';
|
|
4
|
+
import { ensureWorkflowTargetWorldEnv, resolveWorkflowCoreRuntimeAlias, WORKFLOW_NODE_COMPAT_BANNER, WORKFLOW_OPTIONAL_PG_NATIVE_ALIAS, WORKFLOW_QUEUE_TRIGGER, WORKFLOW_WORLD_TARGET_MODULE, } from '@workflow/builders';
|
|
5
5
|
import { workflowTransformPlugin } from '@workflow/rollup';
|
|
6
6
|
import { join } from 'pathe';
|
|
7
7
|
import { LocalBuilder, VercelBuilder } from './builders.js';
|
|
@@ -41,7 +41,7 @@ function isNitroV2(nitro) {
|
|
|
41
41
|
* support.
|
|
42
42
|
*/
|
|
43
43
|
function addNodeRequireBanner(config) {
|
|
44
|
-
const banner =
|
|
44
|
+
const banner = WORKFLOW_NODE_COMPAT_BANNER;
|
|
45
45
|
const output = config.output;
|
|
46
46
|
if (output == null) {
|
|
47
47
|
config.output = { banner };
|
|
@@ -58,12 +58,99 @@ function addNodeRequireBanner(config) {
|
|
|
58
58
|
: `${banner}\n${existing}`;
|
|
59
59
|
}
|
|
60
60
|
}
|
|
61
|
+
const WORKFLOW_INLINE_PACKAGES = new Set([
|
|
62
|
+
'workflow',
|
|
63
|
+
'core',
|
|
64
|
+
'serde',
|
|
65
|
+
'errors',
|
|
66
|
+
'utils',
|
|
67
|
+
'builders',
|
|
68
|
+
'rollup',
|
|
69
|
+
'ai',
|
|
70
|
+
'world',
|
|
71
|
+
]);
|
|
72
|
+
function getWorkflowPackageName(source) {
|
|
73
|
+
const packageSpecifier = source.match(/^@workflow\/([^/]+)/);
|
|
74
|
+
if (packageSpecifier) {
|
|
75
|
+
return packageSpecifier[1] ?? null;
|
|
76
|
+
}
|
|
77
|
+
if (source === 'workflow' || source.startsWith('workflow/')) {
|
|
78
|
+
return 'workflow';
|
|
79
|
+
}
|
|
80
|
+
const packagePath = source.match(/[\\/]packages[\\/]([^\\/]+)/);
|
|
81
|
+
return packagePath?.[1] ?? null;
|
|
82
|
+
}
|
|
83
|
+
function createWorkflowForceInlinePlugin(workflowTargetWorld, workflowTargetWorldAlias) {
|
|
84
|
+
const targetWorldPackage = getWorkflowPackageName(workflowTargetWorld);
|
|
85
|
+
return {
|
|
86
|
+
name: 'workflow:force-inline',
|
|
87
|
+
// `order: 'pre'` is required: Nitro's `nitro:externals` plugin
|
|
88
|
+
// uses `order: 'pre'` for its resolveId hook and spreads our
|
|
89
|
+
// resolution result while forcing `external: true`. Without
|
|
90
|
+
// `pre` here, our `external: false` decision gets overwritten
|
|
91
|
+
// and `@workflow/*` imports end up externalized in the bundle.
|
|
92
|
+
resolveId: {
|
|
93
|
+
order: 'pre',
|
|
94
|
+
async handler(source, importer, options) {
|
|
95
|
+
if (source === WORKFLOW_WORLD_TARGET_MODULE) {
|
|
96
|
+
return { id: workflowTargetWorldAlias, external: false };
|
|
97
|
+
}
|
|
98
|
+
if (!importer)
|
|
99
|
+
return null;
|
|
100
|
+
// Match workflow package specifiers OR direct paths into
|
|
101
|
+
// packages/<name>/. Bail out early on non-workflow imports
|
|
102
|
+
// so we don't intercept the rest of the resolution chain.
|
|
103
|
+
const packageName = getWorkflowPackageName(source);
|
|
104
|
+
const isWorkflowPkg = packageName != null &&
|
|
105
|
+
(WORKFLOW_INLINE_PACKAGES.has(packageName) ||
|
|
106
|
+
packageName === targetWorldPackage);
|
|
107
|
+
if (!isWorkflowPkg)
|
|
108
|
+
return null;
|
|
109
|
+
// Resolve via other resolvers, skipping ourselves so we
|
|
110
|
+
// get a path. We don't gate on `resolved.external` because
|
|
111
|
+
// `nitro:externals` spreads our result and overrides
|
|
112
|
+
// `external: true` regardless of what we return — we want
|
|
113
|
+
// to win that race by returning first under `order: 'pre'`.
|
|
114
|
+
const resolved = await this.resolve(source, importer, {
|
|
115
|
+
...options,
|
|
116
|
+
skipSelf: true,
|
|
117
|
+
});
|
|
118
|
+
if (!resolved)
|
|
119
|
+
return null;
|
|
120
|
+
let resolvedId = resolved.id;
|
|
121
|
+
// Strip file:// protocol if present — Rollup needs a plain
|
|
122
|
+
// filesystem path to load the module. `fileURLToPath`
|
|
123
|
+
// correctly handles Windows paths (e.g., file:///C:/...
|
|
124
|
+
// -> C:\...) and percent-decoding.
|
|
125
|
+
if (resolvedId.startsWith('file://')) {
|
|
126
|
+
resolvedId = fileURLToPath(resolvedId);
|
|
127
|
+
}
|
|
128
|
+
return { id: resolvedId, external: false };
|
|
129
|
+
},
|
|
130
|
+
},
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
function createResolverRequire(nitro) {
|
|
134
|
+
return createRequire(join(nitro.options.rootDir, 'package.json'));
|
|
135
|
+
}
|
|
136
|
+
function resolveWorkflowTargetWorldAlias(nitro, targetWorld) {
|
|
137
|
+
try {
|
|
138
|
+
return createResolverRequire(nitro).resolve(targetWorld);
|
|
139
|
+
}
|
|
140
|
+
catch {
|
|
141
|
+
return targetWorld;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
61
144
|
export default {
|
|
62
145
|
name: 'workflow/nitro',
|
|
63
146
|
async setup(nitro) {
|
|
64
147
|
const isVercelDeploy = !nitro.options.dev && nitro.options.preset === 'vercel';
|
|
148
|
+
const workflowTargetWorld = ensureWorkflowTargetWorldEnv();
|
|
65
149
|
// Pre-built workflow bundles directory - must be excluded from re-transformation
|
|
66
150
|
const workflowBuildDir = join(nitro.options.buildDir, 'workflow');
|
|
151
|
+
nitro.options.alias[WORKFLOW_WORLD_TARGET_MODULE] =
|
|
152
|
+
resolveWorkflowTargetWorldAlias(nitro, workflowTargetWorld);
|
|
153
|
+
nitro.options.alias['pg-native'] ??= WORKFLOW_OPTIONAL_PG_NATIVE_ALIAS;
|
|
67
154
|
// Add transform plugin at the BEGINNING to run before other transforms
|
|
68
155
|
// (especially before class property transforms that rename classes like _ClassName)
|
|
69
156
|
nitro.hooks.hook('rollup:before', (_nitro, config) => {
|
|
@@ -88,7 +175,7 @@ export default {
|
|
|
88
175
|
});
|
|
89
176
|
// NOTE: Temporary workaround for debug unenv mock
|
|
90
177
|
if (!nitro.options.workflow?._vite) {
|
|
91
|
-
nitro.options.alias
|
|
178
|
+
nitro.options.alias.debug ??= 'debug';
|
|
92
179
|
}
|
|
93
180
|
if (nitro.options.dev) {
|
|
94
181
|
const workflowBuildGlob = `${join(nitro.options.buildDir, 'workflow')}/**`;
|
|
@@ -110,70 +197,24 @@ export default {
|
|
|
110
197
|
];
|
|
111
198
|
}
|
|
112
199
|
}
|
|
113
|
-
//
|
|
114
|
-
//
|
|
115
|
-
//
|
|
116
|
-
//
|
|
117
|
-
//
|
|
118
|
-
//
|
|
119
|
-
//
|
|
120
|
-
//
|
|
200
|
+
// Force workflow SDK packages to be bundled by Nitro's Rollup rather than
|
|
201
|
+
// externalized. This lets the static world-target alias resolve inside the
|
|
202
|
+
// host server bundle instead of falling through to the unaliased core stub.
|
|
203
|
+
// It also ensures the SWC transform plugin processes files containing
|
|
204
|
+
// workflow patterns (like @workflow/core/dist/runtime/run.js) and adds the
|
|
205
|
+
// classId registration IIFEs needed for serialization. Without this, serde
|
|
206
|
+
// classes from npm packages (like `Run`) would be externalized, the SWC
|
|
207
|
+
// transform would never fire on them, and serialization would fail with
|
|
208
|
+
// "must have a static classId property".
|
|
121
209
|
//
|
|
122
210
|
// We use a Rollup resolveId hook (added BEFORE the externalization
|
|
123
211
|
// plugin) that intercepts workflow package imports and marks them
|
|
124
212
|
// as non-external. This is more targeted than `noExternals = true`
|
|
125
213
|
// which would bundle ALL dependencies and cause TDZ errors from
|
|
126
214
|
// circular imports in packages like vue-bundle-renderer/h3.
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
name: 'workflow:force-inline',
|
|
131
|
-
// `order: 'pre'` is required: Nitro's `nitro:externals` plugin
|
|
132
|
-
// uses `order: 'pre'` for its resolveId hook and spreads our
|
|
133
|
-
// resolution result while forcing `external: true`. Without
|
|
134
|
-
// `pre` here, our `external: false` decision gets overwritten
|
|
135
|
-
// and `@workflow/*` imports end up externalized in the dev
|
|
136
|
-
// bundle — which means the SWC-injected `static classId` IIFE
|
|
137
|
-
// in (e.g.) `@workflow/core/dist/runtime/run.js` is never
|
|
138
|
-
// applied, and step return values that include `Run`
|
|
139
|
-
// instances fail to serialize at runtime.
|
|
140
|
-
resolveId: {
|
|
141
|
-
order: 'pre',
|
|
142
|
-
async handler(source, importer, options) {
|
|
143
|
-
if (!importer)
|
|
144
|
-
return null;
|
|
145
|
-
// Match workflow package specifiers OR direct paths into
|
|
146
|
-
// packages/<name>/. Bail out early on non-workflow imports
|
|
147
|
-
// so we don't intercept the rest of the resolution chain.
|
|
148
|
-
const isWorkflowPkg = /^@?workflow(\/|$)/.test(source) ||
|
|
149
|
-
/[\\/]packages[\\/](workflow|core|serde|errors|utils|builders|rollup|ai|world|world-local|world-vercel|world-postgres|world-testing|cli|next|nitro|nuxt|vite|vitest|astro|sveltekit|nest)[\\/]/.test(source);
|
|
150
|
-
if (!isWorkflowPkg)
|
|
151
|
-
return null;
|
|
152
|
-
// Resolve via other resolvers, skipping ourselves so we
|
|
153
|
-
// get a path. We don't gate on `resolved.external` because
|
|
154
|
-
// `nitro:externals` spreads our result and overrides
|
|
155
|
-
// `external: true` regardless of what we return — we want
|
|
156
|
-
// to win that race by returning first under `order: 'pre'`.
|
|
157
|
-
const resolved = await this.resolve(source, importer, {
|
|
158
|
-
...options,
|
|
159
|
-
skipSelf: true,
|
|
160
|
-
});
|
|
161
|
-
if (!resolved)
|
|
162
|
-
return null;
|
|
163
|
-
let resolvedId = resolved.id;
|
|
164
|
-
// Strip file:// protocol if present — Rollup needs a plain
|
|
165
|
-
// filesystem path to load the module. `fileURLToPath`
|
|
166
|
-
// correctly handles Windows paths (e.g., file:///C:/...
|
|
167
|
-
// -> C:\...) and percent-decoding.
|
|
168
|
-
if (resolvedId.startsWith('file://')) {
|
|
169
|
-
resolvedId = fileURLToPath(resolvedId);
|
|
170
|
-
}
|
|
171
|
-
return { id: resolvedId, external: false };
|
|
172
|
-
},
|
|
173
|
-
},
|
|
174
|
-
});
|
|
175
|
-
});
|
|
176
|
-
}
|
|
215
|
+
nitro.hooks.hook('rollup:before', (_nitro, config) => {
|
|
216
|
+
config.plugins.unshift(createWorkflowForceInlinePlugin(workflowTargetWorld, nitro.options.alias[WORKFLOW_WORLD_TARGET_MODULE]));
|
|
217
|
+
});
|
|
177
218
|
// Add tsConfig plugin
|
|
178
219
|
if (nitro.options.workflow?.typescriptPlugin) {
|
|
179
220
|
nitro.options.typescript.tsConfig ||= {};
|
|
@@ -358,6 +399,41 @@ function addDashboardHandler(nitro) {
|
|
|
358
399
|
`;
|
|
359
400
|
}
|
|
360
401
|
}
|
|
402
|
+
function getStaticImportSpecifier(id) {
|
|
403
|
+
if (id.startsWith('file://')) {
|
|
404
|
+
return id;
|
|
405
|
+
}
|
|
406
|
+
if (id.startsWith('/') || /^[A-Za-z]:[\\/]/.test(id)) {
|
|
407
|
+
return pathToFileURL(id).href;
|
|
408
|
+
}
|
|
409
|
+
return id;
|
|
410
|
+
}
|
|
411
|
+
function createDevWorldTargetSource(nitro) {
|
|
412
|
+
const workflowTargetWorldAlias = nitro.options.alias[WORKFLOW_WORLD_TARGET_MODULE];
|
|
413
|
+
if (typeof workflowTargetWorldAlias !== 'string') {
|
|
414
|
+
throw new Error(`Missing ${WORKFLOW_WORLD_TARGET_MODULE} alias for Nitro dev workflow handler`);
|
|
415
|
+
}
|
|
416
|
+
const workflowTargetWorldImport = JSON.stringify(getStaticImportSpecifier(workflowTargetWorldAlias));
|
|
417
|
+
const workflowCoreRuntimeImport = JSON.stringify(getStaticImportSpecifier(resolveWorkflowCoreRuntimeAlias({ workingDir: nitro.options.rootDir })));
|
|
418
|
+
return /* js */ `
|
|
419
|
+
import {
|
|
420
|
+
createWorldFromModule as __workflowCreateWorldFromModule,
|
|
421
|
+
setWorld as __workflowSetWorld,
|
|
422
|
+
} from ${workflowCoreRuntimeImport};
|
|
423
|
+
import * as __workflowTargetWorld from ${workflowTargetWorldImport};
|
|
424
|
+
|
|
425
|
+
let __workflowWorldPromise = null;
|
|
426
|
+
|
|
427
|
+
async function ensureWorkflowWorld() {
|
|
428
|
+
if (!__workflowWorldPromise) {
|
|
429
|
+
__workflowWorldPromise = Promise.resolve(
|
|
430
|
+
__workflowCreateWorldFromModule(__workflowTargetWorld)
|
|
431
|
+
).then(__workflowSetWorld);
|
|
432
|
+
}
|
|
433
|
+
await __workflowWorldPromise;
|
|
434
|
+
}
|
|
435
|
+
`;
|
|
436
|
+
}
|
|
361
437
|
function addVirtualHandler(nitro, route, buildPath) {
|
|
362
438
|
nitro.options.handlers.push({
|
|
363
439
|
route,
|
|
@@ -370,6 +446,7 @@ function addVirtualHandler(nitro, route, buildPath) {
|
|
|
370
446
|
'workflow/workflows.mjs': `await import(/* @vite-ignore */ pathToFileURL(${stepsImportPath}).href + "?t=" + version);`,
|
|
371
447
|
};
|
|
372
448
|
if (nitro.options.dev) {
|
|
449
|
+
const devWorldTargetSource = createDevWorldTargetSource(nitro);
|
|
373
450
|
// Dev mode: load generated workflow bundles from disk at request time.
|
|
374
451
|
// This keeps `.nitro/workflow/*.mjs` out of Nitro's own bundle graph,
|
|
375
452
|
// which avoids rebuild loops and stale dependency graphs during HMR.
|
|
@@ -379,12 +456,14 @@ function addVirtualHandler(nitro, route, buildPath) {
|
|
|
379
456
|
import { fromWebHandler } from "h3";
|
|
380
457
|
import { statSync } from "node:fs";
|
|
381
458
|
import { pathToFileURL } from "node:url";
|
|
459
|
+
${devWorldTargetSource}
|
|
382
460
|
|
|
383
461
|
const handlerPath = ${handlerImportPath};
|
|
384
462
|
let currentVersion = "";
|
|
385
463
|
let currentImportPath = "";
|
|
386
464
|
|
|
387
465
|
async function loadPOST() {
|
|
466
|
+
await ensureWorkflowWorld();
|
|
388
467
|
const version = String(statSync(handlerPath).mtimeMs);
|
|
389
468
|
if (version !== currentVersion) {
|
|
390
469
|
currentVersion = version;
|
|
@@ -404,12 +483,14 @@ function addVirtualHandler(nitro, route, buildPath) {
|
|
|
404
483
|
nitro.options.virtual[`#${buildPath}`] = /* js */ `
|
|
405
484
|
import { statSync } from "node:fs";
|
|
406
485
|
import { pathToFileURL } from "node:url";
|
|
486
|
+
${devWorldTargetSource}
|
|
407
487
|
|
|
408
488
|
const handlerPath = ${handlerImportPath};
|
|
409
489
|
let currentVersion = "";
|
|
410
490
|
let currentImportPath = "";
|
|
411
491
|
|
|
412
492
|
async function loadPOST() {
|
|
493
|
+
await ensureWorkflowWorld();
|
|
413
494
|
const version = String(statSync(handlerPath).mtimeMs);
|
|
414
495
|
if (version !== currentVersion) {
|
|
415
496
|
currentVersion = version;
|
|
@@ -545,4 +626,4 @@ export default fromWebHandler(() => new Response("Manifest not found", { status:
|
|
|
545
626
|
writeFileSync(handlerPath, fallback);
|
|
546
627
|
}
|
|
547
628
|
}
|
|
548
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDeEQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDNUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFM0QsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUM3QixPQUFPLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUs1RDs7Ozs7O0dBTUc7QUFDSCxTQUFTLFNBQVMsQ0FBQyxLQUFZO0lBQzdCLE1BQU0sWUFBWSxHQUFJLEtBQThDLENBQUMsSUFBSTtRQUN2RSxFQUFFLFlBQVksQ0FBQztJQUNqQixJQUFJLFlBQVksSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN6QixPQUFPLFlBQVksS0FBSyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUNELE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO0FBQ3hCLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUNILFNBQVMsb0JBQW9CLENBQUMsTUFBb0I7SUFDaEQsTUFBTSxNQUFNLEdBQ1Ysc0tBQXNLLENBQUM7SUFDekssTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUM3QixJQUFJLE1BQU0sSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNuQixNQUFNLENBQUMsTUFBTSxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUM7UUFDM0IsT0FBTztJQUNULENBQUM7SUFDRCxNQUFN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QUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNyRCxTQUFTLENBQUMsR0FBRyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFFcEMsSUFBSSxDQUFDO1FBQ0gsTUFBTSxlQUFlLEdBQUcsWUFBWSxDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsV0FBVztRQUV4QyxNQUFNLFdBQVcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPO1lBQ2hDLENBQUMsQ0FBQzttQkFDVyxJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQzs7OztDQUlqRDtZQUNLLENBQUMsQ0FBQyxvQkFBb0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUM7Ozs7Q0FJMUQsQ0FBQztRQUNFLGFBQWEsQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLCtCQUErQjtRQUMvQixNQUFNLFFBQVEsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPO1lBQzdCLENBQUMsQ0FBQzs7Q0FFUDtZQUNLLENBQUMsQ0FBQztDQUNQLENBQUM7UUFDRSxhQUFhLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbWtkaXJTeW5jLCByZWFkRmlsZVN5bmMsIHdyaXRlRmlsZVN5bmMgfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7IGNyZWF0ZVJlcXVpcmUgfSBmcm9tICdub2RlOm1vZHVsZSc7XG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoLCBwYXRoVG9GaWxlVVJMIH0gZnJvbSAnbm9kZTp1cmwnO1xuaW1wb3J0IHsgV09SS0ZMT1dfUVVFVUVfVFJJR0dFUiB9IGZyb20gJ0B3b3JrZmxvdy9idWlsZGVycyc7XG5pbXBvcnQgeyB3b3JrZmxvd1RyYW5zZm9ybVBsdWdpbiB9IGZyb20gJ0B3b3JrZmxvdy9yb2xsdXAnO1xuaW1wb3J0IHR5cGUgeyBOaXRybywgTml0cm9Nb2R1bGUsIFJvbGx1cENvbmZpZyB9IGZyb20gJ25pdHJvL3R5cGVzJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoZSc7XG5pbXBvcnQgeyBMb2NhbEJ1aWxkZXIsIFZlcmNlbEJ1aWxkZXIgfSBmcm9tICcuL2J1aWxkZXJzLmpzJztcbmltcG9ydCB0eXBlIHsgTW9kdWxlT3B0aW9ucyB9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgdHlwZSB7IE1vZHVsZU9wdGlvbnMgfTtcblxuLyoqXG4gKiBEZXRlY3Qgd2hldGhlciB0aGUgTml0cm8gaW5zdGFuY2UgaXMgdjIuXG4gKiBOZXdlciBOaXRybyByZWxlYXNlcyAoYm90aCB2MiBhbmQgdjMpIGV4cG9zZSBgbml0cm8ubWV0YS5tYWpvclZlcnNpb25gLlxuICogRmFsbCBiYWNrIHRvIGAhbml0cm8ucm91dGluZ2AgKG9ubHkgcHJlc2VudCBpbiB2MyspIGZvciBvbGRlciBOaXRybyB2MlxuICogdmVyc2lvbnMgdGhhdCBkb24ndCBoYXZlIGBtYWpvclZlcnNpb25gIHlldCAoZS5nLiBOdXh0IHVzZXJzIG9uIGFuIG9sZGVyXG4gKiBuaXRyb3BhY2spLlxuICovXG5mdW5jdGlvbiBpc05pdHJvVjIobml0cm86IE5pdHJvKTogYm9vbGVhbiB7XG4gIGNvbnN0IG1ham9yVmVyc2lvbiA9IChuaXRybyBhcyB7IG1ldGE/OiB7IG1ham9yVmVyc2lvbj86IG51bWJlciB9IH0pLm1ldGFcbiAgICA/Lm1ham9yVmVyc2lvbjtcbiAgaWYgKG1ham9yVmVyc2lvbiAhPSBudWxsKSB7XG4gICAgcmV0dXJuIG1ham9yVmVyc2lvbiA9PT0gMjtcbiAgfVxuICByZXR1cm4gIW5pdHJvLnJvdXRpbmc7XG59XG5cbi8qKlxuICogUHJlcGVuZCBhIGBjcmVhdGVSZXF1aXJlYC1iYWNrZWQgZ2xvYmFsIGByZXF1aXJlYCB0byBldmVyeSBzZXJ2ZXIgY2h1bmsgc29cbiAqIHVuZGljaSdzIGJ1bmRsZWQgYHJlcXVpcmUoJ25vZGU6aHR0cDInKWAgcmVzb2x2ZXMgdGhlIHJlYWwgYnVpbHRpbiBpbnN0ZWFkIG9mXG4gKiB0aHJvd2luZyAod2hpY2ggd291bGQgbWFrZSB1bmRpY2kgZmFsbCBiYWNrIHRvIGEgc3R1YiB3aXRob3V0XG4gKiBgaHR0cDIuY29ubmVjdGAsIGJyZWFraW5nIEhUVFAvMikuIFRoZSBndWFyZCBrZWVwcyBpdCBpZGVtcG90ZW50IGFjcm9zc1xuICogY2h1bmtzLCBhbmQgYG5vZGU6bW9kdWxlYCBpcyBhbHdheXMgYXZhaWxhYmxlIGluIHRoZSBOb2RlIHNlcnZlciBydW50aW1lLlxuICpcbiAqIFRoaXMgaXMgYSBOb2RlLXNlcnZlci1ydW50aW1lLW9ubHkgc2hpbSAoY2FsbGVycyBnYXRlIGl0IHRvIHRoZSBwcm9kdWN0aW9uXG4gKiBzZXJ2ZXIgYnVpbGQpLiBOb3RlIHRoZSBkZWxpYmVyYXRlIGdsb2JhbCBzaWRlIGVmZmVjdDogZGVmaW5pbmdcbiAqIGBnbG9iYWxUaGlzLnJlcXVpcmVgIG1ha2VzIGB0eXBlb2YgcmVxdWlyZWAgdHJ1dGh5IGZvciAqZXZlcnkqIGJ1bmRsZWRcbiAqIGRlcGVuZGVuY3kgaW4gdGhpcyBFU00gc2VydmVyIG91dHB1dCwgc28gYW55IGxpYnJhcnkgdGhhdCBmZWF0dXJlLWRldGVjdHNcbiAqIGByZXF1aXJlYCB3aWxsIHRha2UgaXRzIENKUyBwYXRoIGhlcmUuIFRoYXQgaXMgc2FmZSBiZWNhdXNlIChhKSBpdCBuZXZlclxuICogdG91Y2hlcyB0aGUgY2xpZW50IGJ1bmRsZSwgKGIpIHRoZSBgdHlwZW9mIHJlcXVpcmUgPT09ICd1bmRlZmluZWQnYCBndWFyZFxuICogbWFrZXMgaXQgYSBuby1vcCBpbiBDSlMgY2h1bmtzIHdoZXJlIGEgcmVhbCBgcmVxdWlyZWAgYWxyZWFkeSBleGlzdHMsIGFuZFxuICogKGMpIHRoZSBgcmVxdWlyZWAgd2UgaW5zdGFsbCBpcyBhIHdvcmtpbmcgYGNyZWF0ZVJlcXVpcmVgLCBzbyBhIGxpYnJhcnkgdGhhdFxuICogc3dpdGNoZXMgdG8gdGhlIHJlcXVpcmUgcGF0aCBnZXRzIGEgZnVuY3Rpb25hbCBgcmVxdWlyZWAsIG5vdCBhIGJyb2tlbiBzdHViLlxuICogVGhlIGJlaGF2aW9yIHRvIHdhdGNoIGZvciBpcyBhIGJ1bmRsZWQgbGliIHRoYXQsIG9uIHNlZWluZyBgcmVxdWlyZWAsIGRvZXNcbiAqIGByZXF1aXJlKClgIG9mIGFuIEVTTS1vbmx5IGRlcGVuZGVuY3kgb24gYSBOb2RlIHZlcnNpb24gd2l0aG91dCBgcmVxdWlyZShFU00pYFxuICogc3VwcG9ydC5cbiAqL1xuZnVuY3Rpb24gYWRkTm9kZVJlcXVpcmVCYW5uZXIoY29uZmlnOiBSb2xsdXBDb25maWcpOiB2b2lkIHtcbiAgY29uc3QgYmFubmVyID1cbiAgICBcImltcG9ydCB7IGNyZWF0ZVJlcXVpcmUgYXMgX193a2ZDcmVhdGVSZXF1aXJlIH0gZnJvbSAnbm9kZTptb2R1bGUnOyBpZiAodHlwZW9mIHJlcXVpcmUgPT09ICd1bmRlZmluZWQnKSB7IGdsb2JhbFRoaXMucmVxdWlyZSA9IF9fd2tmQ3JlYXRlUmVxdWlyZShpbXBvcnQubWV0YS51cmwpOyB9XCI7XG4gIGNvbnN0IG91dHB1dCA9IGNvbmZpZy5vdXRwdXQ7XG4gIGlmIChvdXRwdXQgPT0gbnVsbCkge1xuICAgIGNvbmZpZy5vdXRwdXQgPSB7IGJhbm5lciB9O1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBvdXRwdXRzID0gQXJyYXkuaXNBcnJheShvdXRwdXQpID8gb3V0cHV0IDogW291dHB1dF07XG4gIGZvciAoY29uc3QgbyBvZiBvdXRwdXRzKSB7XG4gICAgY29uc3QgZXhpc3RpbmcgPSBvLmJhbm5lcjtcbiAgICBvLmJhbm5lciA9XG4gICAgICBleGlzdGluZyA9PSBudWxsXG4gICAgICAgID8gYmFubmVyXG4gICAgICAgIDogdHlwZW9mIGV4aXN0aW5nID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgPyBhc3luYyAoY2h1bms6IHVua25vd24pID0+IGAke2Jhbm5lcn1cXG4ke2F3YWl0IGV4aXN0aW5nKGNodW5rKX1gXG4gICAgICAgICAgOiBgJHtiYW5uZXJ9XFxuJHtleGlzdGluZ31gO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ3dvcmtmbG93L25pdHJvJyxcbiAgYXN5bmMgc2V0dXAobml0cm86IE5pdHJvKSB7XG4gICAgY29uc3QgaXNWZXJjZWxEZXBsb3kgPVxuICAgICAgIW5pdHJvLm9wdGlvbnMuZGV2ICYmIG5pdHJvLm9wdGlvbnMucHJlc2V0ID09PSAndmVyY2VsJztcblxuICAgIC8vIFByZS1idWlsdCB3b3JrZmxvdyBidW5kbGVzIGRpcmVjdG9yeSAtIG11c3QgYmUgZXhjbHVkZWQgZnJvbSByZS10cmFuc2Zvcm1hdGlvblxuICAgIGNvbnN0IHdvcmtmbG93QnVpbGREaXIgPSBqb2luKG5pdHJvLm9wdGlvbnMuYnVpbGREaXIsICd3b3JrZmxvdycpO1xuXG4gICAgLy8gQWRkIHRyYW5zZm9ybSBwbHVnaW4gYXQgdGhlIEJFR0lOTklORyB0byBydW4gYmVmb3JlIG90aGVyIHRyYW5zZm9ybXNcbiAgICAvLyAoZXNwZWNpYWxseSBiZWZvcmUgY2xhc3MgcHJvcGVydHkgdHJhbnNmb3JtcyB0aGF0IHJlbmFtZSBjbGFzc2VzIGxpa2UgX0NsYXNzTmFtZSlcbiAgICBuaXRyby5ob29rcy5ob29rKCdyb2xsdXA6YmVmb3JlJywgKF9uaXRybzogTml0cm8sIGNvbmZpZzogUm9sbHVwQ29uZmlnKSA9PiB7XG4gICAgICAoY29uZmlnLnBsdWdpbnMgYXMgQXJyYXk8dW5rbm93bj4pLnVuc2hpZnQoXG4gICAgICAgIHdvcmtmbG93VHJhbnNmb3JtUGx1Z2luKHtcbiAgICAgICAgICAvLyBFeGNsdWRlIHByZS1idWlsdCB3b3JrZmxvdyBidW5kbGVzIGZyb20gcmUtdHJhbnNmb3JtYXRpb25cbiAgICAgICAgICAvLyBUaGVzZSBhcmUgYWxyZWFkeSBwcm9jZXNzZWQgYW5kIHJlLXByb2Nlc3NpbmcgY2F1c2VzIGlzc3VlcyBsaWtlXG4gICAgICAgICAgLy8gdW5kZWZpbmVkIGNsYXNzIHJlZmVyZW5jZXMgd2hlbiBOaXRybydzIGJ1bmRsZXIgcmVuYW1lcyB2YXJpYWJsZXNcbiAgICAgICAgICBleGNsdWRlOiBbd29ya2Zsb3dCdWlsZERpcl0sXG4gICAgICAgIH0pXG4gICAgICApO1xuXG4gICAgICAvLyBOaXRybyBidW5kbGVzIHVuZGljaSAodmlhIHRoZSB3b3JsZCBhZGFwdGVyKSBpbnRvIHRoZSBFU00gc2VydmVyXG4gICAgICAvLyBvdXRwdXQuIHVuZGljaSBsb2FkcyBtb3N0IG5vZGU6IGJ1aWx0aW5zIGFzIEVTTSBpbXBvcnRzLCBidXQgcHVsbHMgaW5cbiAgICAgIC8vIGBub2RlOmh0dHAyYCBsYXppbHkgdmlhIGEgYmFyZSBgcmVxdWlyZSgnbm9kZTpodHRwMicpYCBpbnNpZGUgYVxuICAgICAgLy8gdHJ5L2NhdGNoIOKAlCB3aGljaCB0aGUgYnVuZGxlciBsZWF2ZXMgdW4td2lyZWQsIHNvIGluIHRoZSBFU00gYnVuZGxlIHRoZVxuICAgICAgLy8gcmVxdWlyZSB0aHJvd3MgYW5kIHVuZGljaSBzaWxlbnRseSBmYWxscyBiYWNrIHRvIGEgc3R1YiB3aG9zZVxuICAgICAgLy8gYGh0dHAyLmNvbm5lY3RgIGlzIHVuZGVmaW5lZC4gVGhhdCBicmVha3MgYW55IEhUVFAvMiByZXF1ZXN0ICh0aGVcbiAgICAgIC8vIHdvcmtmbG93IGZsb3ctcm91dGUgY2FsbGJhY2sgZmFpbHMgd2l0aCBcImZldGNoIGZhaWxlZFwiLCBzbyBydW5zIG5ldmVyXG4gICAgICAvLyBzdGFydCkuIFByZXBlbmQgYSB3b3JraW5nIENKUyBgcmVxdWlyZWAgdG8gdGhlIHNlcnZlciBjaHVua3Mgc28gdGhlXG4gICAgICAvLyByZWFsIGBub2RlOmh0dHAyYCByZXNvbHZlcy4gU2tpcHBlZCBpbiBkZXYgKFZpdGUgU1NSIHByb3ZpZGVzIHJlcXVpcmUpLlxuICAgICAgaWYgKCFuaXRyby5vcHRpb25zLmRldikge1xuICAgICAgICBhZGROb2RlUmVxdWlyZUJhbm5lcihjb25maWcpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gTk9URTogVGVtcG9yYXJ5IHdvcmthcm91bmQgZm9yIGRlYnVnIHVuZW52IG1vY2tcbiAgICBpZiAoIW5pdHJvLm9wdGlvbnMud29ya2Zsb3c/Ll92aXRlKSB7XG4gICAgICBuaXRyby5vcHRpb25zLmFsaWFzWydkZWJ1ZyddID8/PSAnZGVidWcnO1xuICAgIH1cblxuICAgIGlmIChuaXRyby5vcHRpb25zLmRldikge1xuICAgICAgY29uc3Qgd29ya2Zsb3dCdWlsZEdsb2IgPSBgJHtqb2luKG5pdHJvLm9wdGlvbnMuYnVpbGREaXIsICd3b3JrZmxvdycpfS8qKmA7XG4gICAgICBuaXRyby5vcHRpb25zLndhdGNoT3B0aW9ucyB8fD0ge307XG4gICAgICBjb25zdCBleGlzdGluZ0lnbm9yZWQgPSBuaXRyby5vcHRpb25zLndhdGNoT3B0aW9ucy5pZ25vcmVkO1xuICAgICAgaWYgKCFleGlzdGluZ0lnbm9yZWQpIHtcbiAgICAgICAgbml0cm8ub3B0aW9ucy53YXRjaE9wdGlvbnMuaWdub3JlZCA9IFt3b3JrZmxvd0J1aWxkR2xvYl07XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZXhpc3RpbmdJZ25vcmVkKSkge1xuICAgICAgICBuaXRyby5vcHRpb25zLndhdGNoT3B0aW9ucy5pZ25vcmVkID0gW1xuICAgICAgICAgIC4uLmV4aXN0aW5nSWdub3JlZCxcbiAgICAgICAgICB3b3JrZmxvd0J1aWxkR2xvYixcbiAgICAgICAgXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5pdHJvLm9wdGlvbnMud2F0Y2hPcHRpb25zLmlnbm9yZWQgPSBbXG4gICAgICAgICAgZXhpc3RpbmdJZ25vcmVkLFxuICAgICAgICAgIHdvcmtmbG93QnVpbGRHbG9iLFxuICAgICAgICBdO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEluIGRldiBtb2RlLCBmb3JjZSB3b3JrZmxvdyBTREsgcGFja2FnZXMgdG8gYmUgYnVuZGxlZCBieSBOaXRybydzXG4gICAgLy8gUm9sbHVwIHJhdGhlciB0aGFuIGV4dGVybmFsaXplZC4gVGhpcyBlbnN1cmVzIHRoZSBTV0MgdHJhbnNmb3JtXG4gICAgLy8gcGx1Z2luIHByb2Nlc3NlcyBmaWxlcyBjb250YWluaW5nIHdvcmtmbG93IHBhdHRlcm5zIChsaWtlXG4gICAgLy8gQHdvcmtmbG93L2NvcmUvZGlzdC9ydW50aW1lL3J1bi5qcykgYW5kIGFkZHMgdGhlIGNsYXNzSWRcbiAgICAvLyByZWdpc3RyYXRpb24gSUlGRXMgbmVlZGVkIGZvciBzZXJpYWxpemF0aW9uLiBXaXRob3V0IHRoaXMsIHNlcmRlXG4gICAgLy8gY2xhc3NlcyBmcm9tIG5wbSBwYWNrYWdlcyAobGlrZSBgUnVuYCkgd291bGQgYmUgZXh0ZXJuYWxpemVkLCB0aGVcbiAgICAvLyBTV0MgdHJhbnNmb3JtIHdvdWxkIG5ldmVyIGZpcmUgb24gdGhlbSwgYW5kIHNlcmlhbGl6YXRpb24gd291bGRcbiAgICAvLyBmYWlsIHdpdGggXCJtdXN0IGhhdmUgYSBzdGF0aWMgY2xhc3NJZCBwcm9wZXJ0eVwiLlxuICAgIC8vXG4gICAgLy8gV2UgdXNlIGEgUm9sbHVwIHJlc29sdmVJZCBob29rIChhZGRlZCBCRUZPUkUgdGhlIGV4dGVybmFsaXphdGlvblxuICAgIC8vIHBsdWdpbikgdGhhdCBpbnRlcmNlcHRzIHdvcmtmbG93IHBhY2thZ2UgaW1wb3J0cyBhbmQgbWFya3MgdGhlbVxuICAgIC8vIGFzIG5vbi1leHRlcm5hbC4gVGhpcyBpcyBtb3JlIHRhcmdldGVkIHRoYW4gYG5vRXh0ZXJuYWxzID0gdHJ1ZWBcbiAgICAvLyB3aGljaCB3b3VsZCBidW5kbGUgQUxMIGRlcGVuZGVuY2llcyBhbmQgY2F1c2UgVERaIGVycm9ycyBmcm9tXG4gICAgLy8gY2lyY3VsYXIgaW1wb3J0cyBpbiBwYWNrYWdlcyBsaWtlIHZ1ZS1idW5kbGUtcmVuZGVyZXIvaDMuXG4gICAgaWYgKG5pdHJvLm9wdGlvbnMuZGV2KSB7XG4gICAgICBuaXRyby5ob29rcy5ob29rKFxuICAgICAgICAncm9sbHVwOmJlZm9yZScsXG4gICAgICAgIChfbml0cm86IE5pdHJvLCBjb25maWc6IFJvbGx1cENvbmZpZykgPT4ge1xuICAgICAgICAgIChjb25maWcucGx1Z2lucyBhcyBBcnJheTx1bmtub3duPikudW5zaGlmdCh7XG4gICAgICAgICAgICBuYW1lOiAnd29ya2Zsb3c6Zm9yY2UtaW5saW5lJyxcbiAgICAgICAgICAgIC8vIGBvcmRlcjogJ3ByZSdgIGlzIHJlcXVpcmVkOiBOaXRybydzIGBuaXRybzpleHRlcm5hbHNgIHBsdWdpblxuICAgICAgICAgICAgLy8gdXNlcyBgb3JkZXI6ICdwcmUnYCBmb3IgaXRzIHJlc29sdmVJZCBob29rIGFuZCBzcHJlYWRzIG91clxuICAgICAgICAgICAgLy8gcmVzb2x1dGlvbiByZXN1bHQgd2hpbGUgZm9yY2luZyBgZXh0ZXJuYWw6IHRydWVgLiBXaXRob3V0XG4gICAgICAgICAgICAvLyBgcHJlYCBoZXJlLCBvdXIgYGV4dGVybmFsOiBmYWxzZWAgZGVjaXNpb24gZ2V0cyBvdmVyd3JpdHRlblxuICAgICAgICAgICAgLy8gYW5kIGBAd29ya2Zsb3cvKmAgaW1wb3J0cyBlbmQgdXAgZXh0ZXJuYWxpemVkIGluIHRoZSBkZXZcbiAgICAgICAgICAgIC8vIGJ1bmRsZSDigJQgd2hpY2ggbWVhbnMgdGhlIFNXQy1pbmplY3RlZCBgc3RhdGljIGNsYXNzSWRgIElJRkVcbiAgICAgICAgICAgIC8vIGluIChlLmcuKSBgQHdvcmtmbG93L2NvcmUvZGlzdC9ydW50aW1lL3J1bi5qc2AgaXMgbmV2ZXJcbiAgICAgICAgICAgIC8vIGFwcGxpZWQsIGFuZCBzdGVwIHJldHVybiB2YWx1ZXMgdGhhdCBpbmNsdWRlIGBSdW5gXG4gICAgICAgICAgICAvLyBpbnN0YW5jZXMgZmFpbCB0byBzZXJpYWxpemUgYXQgcnVudGltZS5cbiAgICAgICAgICAgIHJlc29sdmVJZDoge1xuICAgICAgICAgICAgICBvcmRlcjogJ3ByZScsXG4gICAgICAgICAgICAgIGFzeW5jIGhhbmRsZXIoXG4gICAgICAgICAgICAgICAgdGhpczogeyByZXNvbHZlOiBGdW5jdGlvbiB9LFxuICAgICAgICAgICAgICAgIHNvdXJjZTogc3RyaW5nLFxuICAgICAgICAgICAgICAgIGltcG9ydGVyOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgb3B0aW9uczogeyBza2lwU2VsZj86IGJvb2xlYW4gfVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBpZiAoIWltcG9ydGVyKSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAvLyBNYXRjaCB3b3JrZmxvdyBwYWNrYWdlIHNwZWNpZmllcnMgT1IgZGlyZWN0IHBhdGhzIGludG9cbiAgICAgICAgICAgICAgICAvLyBwYWNrYWdlcy88bmFtZT4vLiBCYWlsIG91dCBlYXJseSBvbiBub24td29ya2Zsb3cgaW1wb3J0c1xuICAgICAgICAgICAgICAgIC8vIHNvIHdlIGRvbid0IGludGVyY2VwdCB0aGUgcmVzdCBvZiB0aGUgcmVzb2x1dGlvbiBjaGFpbi5cbiAgICAgICAgICAgICAgICBjb25zdCBpc1dvcmtmbG93UGtnID1cbiAgICAgICAgICAgICAgICAgIC9eQD93b3JrZmxvdyhcXC98JCkvLnRlc3Qoc291cmNlKSB8fFxuICAgICAgICAgICAgICAgICAgL1tcXFxcL11wYWNrYWdlc1tcXFxcL10od29ya2Zsb3d8Y29yZXxzZXJkZXxlcnJvcnN8dXRpbHN8YnVpbGRlcnN8cm9sbHVwfGFpfHdvcmxkfHdvcmxkLWxvY2FsfHdvcmxkLXZlcmNlbHx3b3JsZC1wb3N0Z3Jlc3x3b3JsZC10ZXN0aW5nfGNsaXxuZXh0fG5pdHJvfG51eHR8dml0ZXx2aXRlc3R8YXN0cm98c3ZlbHRla2l0fG5lc3QpW1xcXFwvXS8udGVzdChcbiAgICAgICAgICAgICAgICAgICAgc291cmNlXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlmICghaXNXb3JrZmxvd1BrZykgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgLy8gUmVzb2x2ZSB2aWEgb3RoZXIgcmVzb2x2ZXJzLCBza2lwcGluZyBvdXJzZWx2ZXMgc28gd2VcbiAgICAgICAgICAgICAgICAvLyBnZXQgYSBwYXRoLiBXZSBkb24ndCBnYXRlIG9uIGByZXNvbHZlZC5leHRlcm5hbGAgYmVjYXVzZVxuICAgICAgICAgICAgICAgIC8vIGBuaXRybzpleHRlcm5hbHNgIHNwcmVhZHMgb3VyIHJlc3VsdCBhbmQgb3ZlcnJpZGVzXG4gICAgICAgICAgICAgICAgLy8gYGV4dGVybmFsOiB0cnVlYCByZWdhcmRsZXNzIG9mIHdoYXQgd2UgcmV0dXJuIOKAlCB3ZSB3YW50XG4gICAgICAgICAgICAgICAgLy8gdG8gd2luIHRoYXQgcmFjZSBieSByZXR1cm5pbmcgZmlyc3QgdW5kZXIgYG9yZGVyOiAncHJlJ2AuXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzb2x2ZWQgPSBhd2FpdCB0aGlzLnJlc29sdmUoc291cmNlLCBpbXBvcnRlciwge1xuICAgICAgICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgIHNraXBTZWxmOiB0cnVlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmICghcmVzb2x2ZWQpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIGxldCByZXNvbHZlZElkID0gcmVzb2x2ZWQuaWQ7XG4gICAgICAgICAgICAgICAgLy8gU3RyaXAgZmlsZTovLyBwcm90b2NvbCBpZiBwcmVzZW50IOKAlCBSb2xsdXAgbmVlZHMgYSBwbGFpblxuICAgICAgICAgICAgICAgIC8vIGZpbGVzeXN0ZW0gcGF0aCB0byBsb2FkIHRoZSBtb2R1bGUuIGBmaWxlVVJMVG9QYXRoYFxuICAgICAgICAgICAgICAgIC8vIGNvcnJlY3RseSBoYW5kbGVzIFdpbmRvd3MgcGF0aHMgKGUuZy4sIGZpbGU6Ly8vQzovLi4uXG4gICAgICAgICAgICAgICAgLy8gLT4gQzpcXC4uLikgYW5kIHBlcmNlbnQtZGVjb2RpbmcuXG4gICAgICAgICAgICAgICAgaWYgKHJlc29sdmVkSWQuc3RhcnRzV2l0aCgnZmlsZTovLycpKSB7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlZElkID0gZmlsZVVSTFRvUGF0aChyZXNvbHZlZElkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgaWQ6IHJlc29sdmVkSWQsIGV4dGVybmFsOiBmYWxzZSB9O1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBBZGQgdHNDb25maWcgcGx1Z2luXG4gICAgaWYgKG5pdHJvLm9wdGlvbnMud29ya2Zsb3c/LnR5cGVzY3JpcHRQbHVnaW4pIHtcbiAgICAgIG5pdHJvLm9wdGlvbnMudHlwZXNjcmlwdC50c0NvbmZpZyB8fD0ge307XG4gICAgICBuaXRyby5vcHRpb25zLnR5cGVzY3JpcHQudHNDb25maWcuY29tcGlsZXJPcHRpb25zIHx8PSB7fTtcbiAgICAgIG5pdHJvLm9wdGlvbnMudHlwZXNjcmlwdC50c0NvbmZpZy5jb21waWxlck9wdGlvbnMucGx1Z2lucyB8fD0gW107XG4gICAgICBuaXRyby5vcHRpb25zLnR5cGVzY3JpcHQudHNDb25maWcuY29tcGlsZXJPcHRpb25zLnBsdWdpbnMucHVzaCh7XG4gICAgICAgIG5hbWU6ICd3b3JrZmxvdycsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBOaXRybyB2MiBWZXJjZWwgZGVwbG95OiBrZWVwIHRoZSBsZWdhY3kgQnVpbGQgT3V0cHV0IEFQSSBwYXRoIHRoYXRcbiAgICAvLyBidWlsZHMgdGhlIHdvcmtmbG93IGZ1bmN0aW9ucyBzdGFuZGFsb25lIGFuZCBzdGl0Y2hlcyB0aGUgcm91dGVzIGludG9cbiAgICAvLyBgLnZlcmNlbC9vdXRwdXQvY29uZmlnLmpzb25gLiBUaGlzIHBhdGggaXMgaW5kZXBlbmRlbnQgb2Ygbml0cm8ncyBvd25cbiAgICAvLyBidW5kbGUgYW5kIGlzIG9ubHkgdXNlZCBmb3Igbml0cm9wYWNrIHYyIChlLmcuIE51eHQgNCBzdGlsbCB1c2VzIGl0KS5cbiAgICBjb25zdCB1c2VMZWdhY3lWZXJjZWxCdWlsZCA9IGlzVmVyY2VsRGVwbG95ICYmIGlzTml0cm9WMihuaXRybyk7XG5cbiAgICBpZiAodXNlTGVnYWN5VmVyY2VsQnVpbGQpIHtcbiAgICAgIG5pdHJvLmhvb2tzLmhvb2soJ2NvbXBpbGVkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCBuZXcgVmVyY2VsQnVpbGRlcihuaXRybykuYnVpbGQoKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIExvY2FsIGRldi9wcm9kIGFuZCBOaXRybyB2MyBWZXJjZWwgZGVwbG95IHNoYXJlIHRoZSBzYW1lIHBhdGg6XG4gICAgLy8gYnVuZGxlIHRoZSB3b3JrZmxvdyByb3V0ZXMgaW50byBuaXRybyBpdHNlbGYgdmlhIHZpcnR1YWwgaGFuZGxlcnMuXG4gICAgLy8gRm9yIFZlcmNlbCB2MyB3ZSBhZGRpdGlvbmFsbHkgY29uZmlndXJlIGBmdW5jdGlvblJ1bGVzYCBzbyB0aGVcbiAgICAvLyByb3V0ZXMgZ2V0IHF1ZXVlIHRyaWdnZXJzICsgZXh0ZW5kZWQgbWF4RHVyYXRpb24gdmlhIHRoZSBuaXRyb1xuICAgIC8vIHZlcmNlbCBwcmVzZXQuIFRoaXMgbGV0cyB3b3JrZmxvdyBoYW5kbGVycyB1c2Ugbml0cm8gZmVhdHVyZXNcbiAgICAvLyAoc3RvcmFnZSwgZGF0YWJhc2UsIHJ1bnRpbWUgY29uZmlnLCB2aXJ0dWFsIGltcG9ydHMsIGV0Yy4pLlxuICAgIGlmICghdXNlTGVnYWN5VmVyY2VsQnVpbGQpIHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgTG9jYWxCdWlsZGVyKG5pdHJvKTtcbiAgICAgIGxldCBpc0luaXRpYWxCdWlsZCA9IHRydWU7XG5cbiAgICAgIG5pdHJvLmhvb2tzLmhvb2soJ2J1aWxkOmJlZm9yZScsIGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuXG4gICAgICAgIC8vIEZvciBwcm9kOiB3cml0ZSB0aGUgbWFuaWZlc3QgaGFuZGxlciBmaWxlIHdpdGggaW5saW5lZCBjb250ZW50XG4gICAgICAgIC8vIG5vdyB0aGF0IHRoZSBidWlsZGVyIGhhcyBnZW5lcmF0ZWQgdGhlIG1hbmlmZXN0LiBSb2xsdXAgd2lsbFxuICAgICAgICAvLyBidW5kbGUgdGhpcyBmaWxlIGludG8gdGhlIGNvbXBpbGVkIG91dHB1dC5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICFuaXRyby5vcHRpb25zLmRldiAmJlxuICAgICAgICAgIHByb2Nlc3MuZW52LldPUktGTE9XX1BVQkxJQ19NQU5JRkVTVCA9PT0gJzEnXG4gICAgICAgICkge1xuICAgICAgICAgIHdyaXRlTWFuaWZlc3RIYW5kbGVyKG5pdHJvKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIEFsbG93cyBmb3IgSE1SIC0gYnV0IHNraXAgdGhlIGZpcnN0IGRldjpyZWxvYWQgc2luY2UgYnVpbGQ6YmVmb3JlIGFscmVhZHkgcmFuXG4gICAgICBpZiAobml0cm8ub3B0aW9ucy5kZXYpIHtcbiAgICAgICAgbml0cm8uaG9va3MuaG9vaygnZGV2OnJlbG9hZCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICBpZiAoaXNJbml0aWFsQnVpbGQpIHtcbiAgICAgICAgICAgIGlzSW5pdGlhbEJ1aWxkID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIC8vIER1cmluZyBkZXYsIGZpbGVzIG1heSBiZSBhZGRlZC9yZW1vdmVkIHdoaWxlIHRoZSBidWlsZGVyXG4gICAgICAgICAgICAvLyBpcyByZWJ1aWxkaW5nIChlLmcuLCBkdXJpbmcgdGVzdCBjbGVhbnVwKS4gTG9nIHRoZSBlcnJvclxuICAgICAgICAgICAgLy8gYnV0IGRvbid0IGNyYXNoIOKAlCB0aGUgbmV4dCBmaWxlIGNoYW5nZSB3aWxsIHRyaWdnZXJcbiAgICAgICAgICAgIC8vIGFub3RoZXIgcmVidWlsZCB3aXRoIHRoZSBjb3JyZWN0IGZpbGUgbGlzdC5cbiAgICAgICAgICAgIGNvbnNvbGUud2FybignV2FybmluZzogV29ya2Zsb3cgcmVidWlsZCBmYWlsZWQ6JywgZXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChuaXRyby5vcHRpb25zLmRldikge1xuICAgICAgICBhZGREYXNoYm9hcmRIYW5kbGVyKG5pdHJvKTtcbiAgICAgIH1cblxuICAgICAgYWRkVmlydHVhbEhhbmRsZXIoXG4gICAgICAgIG5pdHJvLFxuICAgICAgICAnLy53ZWxsLWtub3duL3dvcmtmbG93L3YxL3dlYmhvb2svOnRva2VuJyxcbiAgICAgICAgJ3dvcmtmbG93L3dlYmhvb2subWpzJ1xuICAgICAgKTtcblxuICAgICAgLy8gVjI6IHNpbmdsZSBjb21iaW5lZCBoYW5kbGVyIGZvciBib3RoIHdvcmtmbG93IGFuZCBzdGVwIGV4ZWN1dGlvbi5cbiAgICAgIC8vIFRoZSBzdGVwIHJlZ2lzdHJhdGlvbnMgYXJlIGltcG9ydGVkIGFzIHNpZGUgZWZmZWN0cyBieSB0aGUgY29tYmluZWRcbiAgICAgIC8vIGhhbmRsZXIg4oCUIG5vIHNlcGFyYXRlIHN0ZXAgcm91dGUgbmVlZGVkLlxuICAgICAgYWRkVmlydHVhbEhhbmRsZXIoXG4gICAgICAgIG5pdHJvLFxuICAgICAgICAnLy53ZWxsLWtub3duL3dvcmtmbG93L3YxL2Zsb3cnLFxuICAgICAgICAnd29ya2Zsb3cvd29ya2Zsb3dzLm1qcydcbiAgICAgICk7XG5cbiAgICAgIC8vIE5pdHJvIHYzKyBWZXJjZWwgZGVwbG95OiBjb25maWd1cmUgZnVuY3Rpb24gcnVsZXMgZm9yIHRoZSBjb21iaW5lZFxuICAgICAgLy8gZmxvdyBoYW5kbGVyIHNvIGl0IGdldHMgdGhlIHF1ZXVlIHRyaWdnZXJzICsgbWF4IGR1cmF0aW9uIHRoYXQgdGhlXG4gICAgICAvLyB3b3JrZmxvdyBydW50aW1lIG5lZWRzLiBXb3JrZmxvdy1yZXF1aXJlZCBmaWVsZHMgKGBtYXhEdXJhdGlvbmAsXG4gICAgICAvLyBgZXhwZXJpbWVudGFsVHJpZ2dlcnNgLCBgcnVudGltZWAgd2hlbiBzZXQpIHRha2UgcHJlY2VkZW5jZSBvdmVyXG4gICAgICAvLyB1c2VyLXByb3ZpZGVkIHZhbHVlcyBmb3IgdGhlc2Ugcm91dGVzOyB1bnJlbGF0ZWQgZmllbGRzIHRoZSB1c2VyXG4gICAgICAvLyBzZXRzIChlLmcuIGBtZW1vcnlgKSBwYXNzIHRocm91Z2ggdW50b3VjaGVkLlxuICAgICAgLy9cbiAgICAgIC8vIFBhdHRlcm4ga2V5cyBtdXN0IG1hdGNoIHRoZSByb3V0ZSBwYXR0ZXJucyB0aGUgaGFuZGxlcnMgYXJlXG4gICAgICAvLyByZWdpc3RlcmVkIHdpdGggc28gbml0cm8gcmV1c2VzIHRoZSBzYW1lIGZ1bmN0aW9uIGRpcmVjdG9yeS5cbiAgICAgIC8vIFVzaW5nIGEgYHdlYmhvb2svKipgIGNhdGNoLWFsbCBoZXJlIHdvdWxkIGNyZWF0ZSBhIHNlY29uZFxuICAgICAgLy8gYHdlYmhvb2svWy4uLl0uZnVuY2AgbmV4dCB0byB0aGUgYHdlYmhvb2svW3Rva2VuXS5mdW5jYCB0aGF0XG4gICAgICAvLyBgYWRkVmlydHVhbEhhbmRsZXJgIHByb2R1Y2VzLlxuICAgICAgaWYgKGlzVmVyY2VsRGVwbG95KSB7XG4gICAgICAgIG5pdHJvLm9wdGlvbnMudmVyY2VsID8/PSB7fTtcbiAgICAgICAgbml0cm8ub3B0aW9ucy52ZXJjZWwuZnVuY3Rpb25SdWxlcyA/Pz0ge307XG5cbiAgICAgICAgY29uc3QgcnVudGltZSA9IG5pdHJvLm9wdGlvbnMud29ya2Zsb3c/LnJ1bnRpbWU7XG4gICAgICAgIGNvbnN0IHJ1bGVzID0gbml0cm8ub3B0aW9ucy52ZXJjZWwuZnVuY3Rpb25SdWxlcztcblxuICAgICAgICBjb25zdCBmbG93UGF0aCA9ICcvLndlbGwta25vd24vd29ya2Zsb3cvdjEvZmxvdyc7XG4gICAgICAgIHJ1bGVzW2Zsb3dQYXRoXSA9IHtcbiAgICAgICAgICAuLi5ydWxlc1tmbG93UGF0aF0sXG4gICAgICAgICAgLi4uKHJ1bnRpbWUgJiYgeyBydW50aW1lIH0pLFxuICAgICAgICAgIG1heER1cmF0aW9uOiAnbWF4JyxcbiAgICAgICAgICAvLyBWMiBjb21iaW5lZDogYSBzaW5nbGUgdHJpZ2dlciBjb3ZlcnMgYm90aCBgX193a2Zfd29ya2Zsb3dfKmBcbiAgICAgICAgICAvLyAod29ya2Zsb3cgb3JjaGVzdHJhdGlvbikgYW5kIGBfX3drZl9zdGVwXypgIChzdGVwIGV4ZWN1dGlvbiksXG4gICAgICAgICAgLy8gc2luY2UgdGhlIHNhbWUgaGFuZGxlciBkaXNwYXRjaGVzIGJvdGguXG4gICAgICAgICAgZXhwZXJpbWVudGFsVHJpZ2dlcnM6IFtXT1JLRkxPV19RVUVVRV9UUklHR0VSXSxcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAocnVudGltZSkge1xuICAgICAgICAgIGNvbnN0IHdlYmhvb2tQYXRoID0gJy8ud2VsbC1rbm93bi93b3JrZmxvdy92MS93ZWJob29rLzp0b2tlbic7XG4gICAgICAgICAgcnVsZXNbd2ViaG9va1BhdGhdID0geyAuLi5ydWxlc1t3ZWJob29rUGF0aF0sIHJ1bnRpbWUgfTtcblxuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5XT1JLRkxPV19QVUJMSUNfTUFOSUZFU1QgPT09ICcxJykge1xuICAgICAgICAgICAgY29uc3QgbWFuaWZlc3RQYXRoID0gJy8ud2VsbC1rbm93bi93b3JrZmxvdy92MS9tYW5pZmVzdC5qc29uJztcbiAgICAgICAgICAgIHJ1bGVzW21hbmlmZXN0UGF0aF0gPSB7IC4uLnJ1bGVzW21hbmlmZXN0UGF0aF0sIHJ1bnRpbWUgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gRXhwb3NlIG1hbmlmZXN0IGFzIGEgcHVibGljIEhUVFAgcm91dGUgd2hlbiBXT1JLRkxPV19QVUJMSUNfTUFOSUZFU1Q9MVxuICAgICAgaWYgKHByb2Nlc3MuZW52LldPUktGTE9XX1BVQkxJQ19NQU5JRkVTVCA9PT0gJzEnKSB7XG4gICAgICAgIC8vIFdyaXRlIGEgcGxhY2Vob2xkZXIgbWFuaWZlc3QtZGF0YS5tanMgc28gcm9sbHVwIGNhbiByZXNvbHZlIHRoZVxuICAgICAgICAvLyBpbXBvcnQuIEl0IHdpbGwgYmUgb3ZlcndyaXR0ZW4gd2l0aCB0aGUgcmVhbCBtYW5pZmVzdCBpbiBidWlsZDpiZWZvcmUuXG4gICAgICAgIC8vIFdyaXRlIGEgcGxhY2Vob2xkZXIgaGFuZGxlciBmaWxlIHNvIHJvbGx1cCBjYW4gcmVzb2x2ZSB0aGUgcGF0aFxuICAgICAgICAvLyBkdXJpbmcgcHJvZCBjb21waWxhdGlvbi4gSXQgd2lsbCBiZSBvdmVyd3JpdHRlbiB3aXRoIHRoZSByZWFsXG4gICAgICAgIC8vIG1hbmlmZXN0IGNvbnRlbnQgYnkgd3JpdGVNYW5pZmVzdEhhbmRsZXIoKSBpbiBidWlsZDpiZWZvcmUuXG4gICAgICAgIGlmICghbml0cm8ub3B0aW9ucy5kZXYpIHtcbiAgICAgICAgICBjb25zdCBkaXIgPSBqb2luKG5pdHJvLm9wdGlvbnMuYnVpbGREaXIsICd3b3JrZmxvdycpO1xuICAgICAgICAgIG1rZGlyU3luYyhkaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICAgIGNvbnN0IGhhbmRsZXJQYXRoID0gam9pbihkaXIsICdtYW5pZmVzdC1oYW5kbGVyLm1qcycpO1xuICAgICAgICAgIHdyaXRlRmlsZVN5bmMoXG4gICAgICAgICAgICBoYW5kbGVyUGF0aCxcbiAgICAgICAgICAgICdleHBvcnQgZGVmYXVsdCBhc3luYyAoKSA9PiBuZXcgUmVzcG9uc2UoXCJNYW5pZmVzdCBub3QgZm91bmRcIiwgeyBzdGF0dXM6IDQwNCB9KTtcXG4nXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRNYW5pZmVzdEhhbmRsZXIobml0cm8pO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbn0gc2F0aXNmaWVzIE5pdHJvTW9kdWxlO1xuXG5jb25zdCBEQVNIQk9BUkRfVklSVFVBTF9JRCA9ICcjd29ya2Zsb3cvZGFzaGJvYXJkLWhhbmRsZXInO1xuXG5mdW5jdGlvbiBhZGREYXNoYm9hcmRIYW5kbGVyKG5pdHJvOiBOaXRybykge1xuICBjb25zdCByb3V0ZSA9ICcvX3dvcmtmbG93JztcbiAgbml0cm8ub3B0aW9ucy5oYW5kbGVycy5wdXNoKHsgcm91dGUsIGhhbmRsZXI6IERBU0hCT0FSRF9WSVJUVUFMX0lEIH0pO1xuXG4gIC8vIFJlc29sdmUgYEB3b3JrZmxvdy93ZWIvc2VydmVyYCByZWxhdGl2ZSB0byB0aGlzIG1vZHVsZSBzbyBjb25zdW1lcnMgZG9uJ3RcbiAgLy8gbmVlZCBhIGRpcmVjdCBkZXBlbmRlbmN5IG9uIGBAd29ya2Zsb3cvd2ViYC4gVGhlIHBhdGggaXMgaW5saW5lZCBpbnRvIHRoZVxuICAvLyB2aXJ0dWFsIGhhbmRsZXIgYXMgYSBmaWxlOi8vIFVSTCBzbyBOb2RlIGNhbiBgaW1wb3J0KClgIGl0IGF0IHJ1bnRpbWVcbiAgLy8gcmVnYXJkbGVzcyBvZiB3aGVyZSB0aGUgZ2VuZXJhdGVkIE5pdHJvIGJ1bmRsZSBlbmRzIHVwLlxuICBjb25zdCByZXF1aXJlXyA9IGNyZWF0ZVJlcXVpcmUoaW1wb3J0Lm1ldGEudXJsKTtcbiAgbGV0IHdlYlNlcnZlclVybDogc3RyaW5nO1xuICB0cnkge1xuICAgIHdlYlNlcnZlclVybCA9IHBhdGhUb0ZpbGVVUkwocmVxdWlyZV8ucmVzb2x2ZSgnQHdvcmtmbG93L3dlYi9zZXJ2ZXInKSkuaHJlZjtcbiAgfSBjYXRjaCB7XG4gICAgd2ViU2VydmVyVXJsID0gJ0B3b3JrZmxvdy93ZWIvc2VydmVyJztcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZXJTb3VyY2UgPSAvKiBqcyAqLyBgXG4gICAgY29uc3QgX193b3JrZmxvd1dlYlNlcnZlclVybCA9ICR7SlNPTi5zdHJpbmdpZnkod2ViU2VydmVyVXJsKX07XG4gICAgbGV0IHNlcnZlclByb21pc2UgPSBudWxsO1xuICAgIGFzeW5jIGZ1bmN0aW9uIGdldERhc2hib2FyZFVybCgpIHtcbiAgICAgIGlmICghc2VydmVyUHJvbWlzZSkge1xuICAgICAgICBzZXJ2ZXJQcm9taXNlID0gKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCB7IHN0YXJ0U2VydmVyIH0gPSBhd2FpdCBpbXBvcnQoLyogQHZpdGUtaWdub3JlICovIC8qIHdlYnBhY2tJZ25vcmU6IHRydWUgKi8gX193b3JrZmxvd1dlYlNlcnZlclVybCk7XG4gICAgICAgICAgY29uc3Qgc2VydmVyID0gYXdhaXQgc3RhcnRTZXJ2ZXIoMCk7XG4gICAgICAgICAgY29uc3QgYWRkcmVzcyA9IHNlcnZlci5hZGRyZXNzKCk7XG4gICAgICAgICAgY29uc3QgcG9ydCA9IHR5cGVvZiBhZGRyZXNzID09PSAnb2JqZWN0JyAmJiBhZGRyZXNzID8gYWRkcmVzcy5wb3J0IDogMzQ1NjtcbiAgICAgICAgICByZXR1cm4gJ2h0dHA6Ly9sb2NhbGhvc3Q6JyArIHBvcnQ7XG4gICAgICAgIH0pKCkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgc2VydmVyUHJvbWlzZSA9IG51bGw7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNlcnZlclByb21pc2U7XG4gICAgfVxuICBgO1xuXG4gIGlmICghbml0cm8ucm91dGluZykge1xuICAgIG5pdHJvLm9wdGlvbnMudmlydHVhbFtEQVNIQk9BUkRfVklSVFVBTF9JRF0gPSAvKiBqcyAqLyBgXG4gICAgICBpbXBvcnQgeyBmcm9tV2ViSGFuZGxlciB9IGZyb20gXCJoM1wiO1xuICAgICAgJHtoYW5kbGVyU291cmNlfVxuICAgICAgZXhwb3J0IGRlZmF1bHQgZnJvbVdlYkhhbmRsZXIoYXN5bmMgKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHVybCA9IGF3YWl0IGdldERhc2hib2FyZFVybCgpO1xuICAgICAgICAgIHJldHVybiBSZXNwb25zZS5yZWRpcmVjdCh1cmwsIDMwMik7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIHN0YXJ0IHdvcmtmbG93IGRhc2hib2FyZDonLCBlcnJvcik7XG4gICAgICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZSgnRmFpbGVkIHRvIHN0YXJ0IHdvcmtmbG93IGRhc2hib2FyZDogJyArIGVycm9yLm1lc3NhZ2UsIHsgc3RhdHVzOiA1MDAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIGA7XG4gIH0gZWxzZSB7XG4gICAgbml0cm8ub3B0aW9ucy52aXJ0dWFsW0RBU0hCT0FSRF9WSVJUVUFMX0lEXSA9IC8qIGpzICovIGBcbiAgICAgICR7aGFuZGxlclNvdXJjZX1cbiAgICAgIGV4cG9ydCBkZWZhdWx0IGFzeW5jICgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB1cmwgPSBhd2FpdCBnZXREYXNoYm9hcmRVcmwoKTtcbiAgICAgICAgICByZXR1cm4gUmVzcG9uc2UucmVkaXJlY3QodXJsLCAzMDIpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBzdGFydCB3b3JrZmxvdyBkYXNoYm9hcmQ6JywgZXJyb3IpO1xuICAgICAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UoJ0ZhaWxlZCB0byBzdGFydCB3b3JrZmxvdyBkYXNoYm9hcmQ6ICcgKyBlcnJvci5tZXNzYWdlLCB7IHN0YXR1czogNTAwIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIGA7XG4gIH1cbn1cblxudHlwZSBWaXJ0dWFsSGFuZGxlclBhdGggPSAnd29ya2Zsb3cvd2ViaG9vay5tanMnIHwgJ3dvcmtmbG93L3dvcmtmbG93cy5tanMnO1xuXG5mdW5jdGlvbiBhZGRWaXJ0dWFsSGFuZGxlcihcbiAgbml0cm86IE5pdHJvLFxuICByb3V0ZTogc3RyaW5nLFxuICBidWlsZFBhdGg6IFZpcnR1YWxIYW5kbGVyUGF0aFxuKSB7XG4gIG5pdHJvLm9wdGlvbnMuaGFuZGxlcnMucHVzaCh7XG4gICAgcm91dGUsXG4gICAgaGFuZGxlcjogYCMke2J1aWxkUGF0aH1gLFxuICB9KTtcbiAgY29uc3QgaGFuZGxlckltcG9ydFBhdGggPSBKU09OLnN0cmluZ2lmeShcbiAgICBqb2luKG5pdHJvLm9wdGlvbnMuYnVpbGREaXIsIGJ1aWxkUGF0aClcbiAgKTtcbiAgY29uc3Qgc3RlcHNJbXBvcnRQYXRoID0gSlNPTi5zdHJpbmdpZnkoXG4gICAgam9pbihuaXRyby5vcHRpb25zLmJ1aWxkRGlyLCAnd29ya2Zsb3cvc3RlcHMubWpzJylcbiAgKTtcbiAgY29uc3QgcHJlbG9hZFN0ZXBzOiBSZWNvcmQ8VmlydHVhbEhhbmRsZXJQYXRoLCBzdHJpbmc+ID0ge1xuICAgICd3b3JrZmxvdy93ZWJob29rLm1qcyc6ICcnLFxuICAgICd3b3JrZmxvdy93b3JrZmxvd3MubWpzJzogYGF3YWl0IGltcG9ydCgvKiBAdml0ZS1pZ25vcmUgKi8gcGF0aFRvRmlsZVVSTCgke3N0ZXBzSW1wb3J0UGF0aH0pLmhyZWYgKyBcIj90PVwiICsgdmVyc2lvbik7YCxcbiAgfTtcblxuICBpZiAobml0cm8ub3B0aW9ucy5kZXYpIHtcbiAgICAvLyBEZXYgbW9kZTogbG9hZCBnZW5lcmF0ZWQgd29ya2Zsb3cgYnVuZGxlcyBmcm9tIGRpc2sgYXQgcmVxdWVzdCB0aW1lLlxuICAgIC8vIFRoaXMga2VlcHMgYC5uaXRyby93b3JrZmxvdy8qLm1qc2Agb3V0IG9mIE5pdHJvJ3Mgb3duIGJ1bmRsZSBncmFwaCxcbiAgICAvLyB3aGljaCBhdm9pZHMgcmVidWlsZCBsb29wcyBhbmQgc3RhbGUgZGVwZW5kZW5jeSBncmFwaHMgZHVyaW5nIEhNUi5cbiAgICAvLyBDYWNoZS1idXN0IGJ5IGZpbGUgbXRpbWUgc28gZWFjaCBzdWNjZXNzZnVsIHJlYnVpbGQgbG9hZHMgZnJlc2ggY29kZS5cbiAgICBpZiAoIW5pdHJvLnJvdXRpbmcpIHtcbiAgICAgIG5pdHJvLm9wdGlvbnMudmlydHVhbFtgIyR7YnVpbGRQYXRofWBdID0gLyoganMgKi8gYFxuICAgICAgaW1wb3J0IHsgZnJvbVdlYkhhbmRsZXIgfSBmcm9tIFwiaDNcIjtcbiAgICAgIGltcG9ydCB7IHN0YXRTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcbiAgICAgIGltcG9ydCB7IHBhdGhUb0ZpbGVVUkwgfSBmcm9tIFwibm9kZTp1cmxcIjtcblxuICAgICAgY29uc3QgaGFuZGxlclBhdGggPSAke2hhbmRsZXJJbXBvcnRQYXRofTtcbiAgICAgIGxldCBjdXJyZW50VmVyc2lvbiA9IFwiXCI7XG4gICAgICBsZXQgY3VycmVudEltcG9ydFBhdGggPSBcIlwiO1xuXG4gICAgICBhc3luYyBmdW5jdGlvbiBsb2FkUE9TVCgpIHtcbiAgICAgICAgY29uc3QgdmVyc2lvbiA9IFN0cmluZyhzdGF0U3luYyhoYW5kbGVyUGF0aCkubXRpbWVNcyk7XG4gICAgICAgIGlmICh2ZXJzaW9uICE9PSBjdXJyZW50VmVyc2lvbikge1xuICAgICAgICAgIGN1cnJlbnRWZXJzaW9uID0gdmVyc2lvbjtcbiAgICAgICAgICBjdXJyZW50SW1wb3J0UGF0aCA9IHBhdGhUb0ZpbGVVUkwoaGFuZGxlclBhdGgpLmhyZWYgKyBcIj90PVwiICsgdmVyc2lvbjtcbiAgICAgICAgICAke3ByZWxvYWRTdGVwc1tidWlsZFBhdGhdfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoYXdhaXQgaW1wb3J0KGN1cnJlbnRJbXBvcnRQYXRoKSkuUE9TVDtcbiAgICAgIH1cblxuICAgICAgZXhwb3J0IGRlZmF1bHQgZnJvbVdlYkhhbmRsZXIoYXN5bmMgKHJlcXVlc3QsIGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgUE9TVCA9IGF3YWl0IGxvYWRQT1NUKCk7XG4gICAgICAgIHJldHVybiBQT1NUKHJlcXVlc3QsIGNvbnRleHQpO1xuICAgICAgfSk7XG4gICAgYDtcbiAgICB9IGVsc2Uge1xuICAgICAgbml0cm8ub3B0aW9ucy52aXJ0dWFsW2AjJHtidWlsZFBhdGh9YF0gPSAvKiBqcyAqLyBgXG4gICAgICBpbXBvcnQgeyBzdGF0U3luYyB9IGZyb20gXCJub2RlOmZzXCI7XG4gICAgICBpbXBvcnQgeyBwYXRoVG9GaWxlVVJMIH0gZnJvbSBcIm5vZGU6dXJsXCI7XG5cbiAgICAgIGNvbnN0IGhhbmRsZXJQYXRoID0gJHtoYW5kbGVySW1wb3J0UGF0aH07XG4gICAgICBsZXQgY3VycmVudFZlcnNpb24gPSBcIlwiO1xuICAgICAgbGV0IGN1cnJlbnRJbXBvcnRQYXRoID0gXCJcIjtcblxuICAgICAgYXN5bmMgZnVuY3Rpb24gbG9hZFBPU1QoKSB7XG4gICAgICAgIGNvbnN0IHZlcnNpb24gPSBTdHJpbmcoc3RhdFN5bmMoaGFuZGxlclBhdGgpLm10aW1lTXMpO1xuICAgICAgICBpZiAodmVyc2lvbiAhPT0gY3VycmVudFZlcnNpb24pIHtcbiAgICAgICAgICBjdXJyZW50VmVyc2lvbiA9IHZlcnNpb247XG4gICAgICAgICAgY3VycmVudEltcG9ydFBhdGggPSBwYXRoVG9GaWxlVVJMKGhhbmRsZXJQYXRoKS5ocmVmICsgXCI/dD1cIiArIHZlcnNpb247XG4gICAgICAgICAgJHtwcmVsb2FkU3RlcHNbYnVpbGRQYXRoXX1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKGF3YWl0IGltcG9ydChjdXJyZW50SW1wb3J0UGF0aCkpLlBPU1Q7XG4gICAgICB9XG5cbiAgICAgIGV4cG9ydCBkZWZhdWx0IGFzeW5jICh7IHJlcSB9KSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgUE9TVCA9IGF3YWl0IGxvYWRQT1NUKCk7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IFBPU1QocmVxKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdIYW5kbGVyIGVycm9yOicsIGVycm9yKTtcbiAgICAgICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKCdJbnRlcm5hbCBTZXJ2ZXIgRXJyb3InLCB7IHN0YXR1czogNTAwIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIGA7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIEtlZXAgYSBiYXJlIGltcG9ydCBhbG9uZ3NpZGUgYFBPU1RgOiBpbiBOdXh0ICsgTml0cm8gcHJvZHVjdGlvbiBidWlsZHNcbiAgLy8gdXNpbmcgYEB3b3JrZmxvdy9udXh0YCwgaW1wb3J0aW5nIG9ubHkgYFBPU1RgIGNvdWxkIGRyb3AgdGhlIGdlbmVyYXRlZFxuICAvLyBzdGVwIGJ1bmRsZSdzIHRvcC1sZXZlbCByZWdpc3RyYXRpb25zLCBzbyB0aGUgaGFuZGxlciBsb2FkZWQgYnV0IHN0ZXBzXG4gIC8vIHdlcmUgbWlzc2luZyBhdCBydW50aW1lLlxuXG4gIGlmICghbml0cm8ucm91dGluZykge1xuICAgIC8vIE5pdHJvIHYyIChsZWdhY3kpXG4gICAgbml0cm8ub3B0aW9ucy52aXJ0dWFsW2AjJHtidWlsZFBhdGh9YF0gPSAvKiBqcyAqLyBgXG4gICAgaW1wb3J0ICR7aGFuZGxlckltcG9ydFBhdGh9O1xuICAgIGltcG9ydCB7IGZyb21XZWJIYW5kbGVyIH0gZnJvbSBcImgzXCI7XG4gICAgaW1wb3J0IHsgUE9TVCB9IGZyb20gJHtoYW5kbGVySW1wb3J0UGF0aH07XG4gICAgZXhwb3J0IGRlZmF1bHQgZnJvbVdlYkhhbmRsZXIoUE9TVCk7XG4gIGA7XG4gIH0gZWxzZSB7XG4gICAgLy8gTml0cm8gdjMrIChuYXRpdmUgd2ViIGhhbmRsZXJzKVxuICAgIG5pdHJvLm9wdGlvbnMudmlydHVhbFtgIyR7YnVpbGRQYXRofWBdID0gLyoganMgKi8gYFxuICAgIGltcG9ydCAke2hhbmRsZXJJbXBvcnRQYXRofTtcbiAgICBpbXBvcnQgeyBQT1NUIH0gZnJvbSAke2hhbmRsZXJJbXBvcnRQYXRofTtcbiAgICBleHBvcnQgZGVmYXVsdCBhc3luYyAoeyByZXEgfSkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IFBPU1QocmVxKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0hhbmRsZXIgZXJyb3I6JywgZXJyb3IpO1xuICAgICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKCdJbnRlcm5hbCBTZXJ2ZXIgRXJyb3InLCB7IHN0YXR1czogNTAwIH0pO1xuICAgICAgfVxuICAgIH07XG4gIGA7XG4gIH1cbn1cblxuY29uc3QgTUFOSUZFU1RfVklSVFVBTF9JRCA9ICcjd29ya2Zsb3cvbWFuaWZlc3QtaGFuZGxlcic7XG5cbmZ1bmN0aW9uIGFkZE1hbmlmZXN0SGFuZGxlcihuaXRybzogTml0cm8pIHtcbiAgY29uc3Qgcm91dGUgPSAnLy53ZWxsLWtub3duL3dvcmtmbG93L3YxL21hbmlmZXN0Lmpzb24nO1xuICBjb25zdCBtYW5pZmVzdFBhdGggPSBqb2luKG5pdHJvLm9wdGlvbnMuYnVpbGREaXIsICd3b3JrZmxvdy9tYW5pZmVzdC5qc29uJyk7XG4gIGNvbnN0IGhhbmRsZXJQYXRoID0gam9pbihcbiAgICBuaXRyby5vcHRpb25zLmJ1aWxkRGlyLFxuICAgICd3b3JrZmxvdy9tYW5pZmVzdC1oYW5kbGVyLm1qcydcbiAgKTtcblxuICBpZiAobml0cm8ub3B0aW9ucy5kZXYpIHtcbiAgICAvLyBEZXYgbW9kZTogdXNlIGEgdmlydHVhbCBoYW5kbGVyIHRoYXQgcmVhZHMgdGhlIG1hbmlmZXN0IGZyb20gZGlzayBhdFxuICAgIC8vIHJlcXVlc3QgdGltZS4gVGhlIGFic29sdXRlIHBhdGggaXMgdmFsaWQgYmVjYXVzZSB3ZSdyZSBvbiB0aGUgYnVpbGQgbWFjaGluZS5cbiAgICBuaXRyby5vcHRpb25zLmhhbmRsZXJzLnB1c2goeyByb3V0ZSwgaGFuZGxlcjogTUFOSUZFU1RfVklSVFVBTF9JRCB9KTtcbiAgICBuaXRyby5vcHRpb25zLnZpcnR1YWxbTUFOSUZFU1RfVklSVFVBTF9JRF0gPSAhbml0cm8ucm91dGluZ1xuICAgICAgPyAvKiBqcyAqLyBgXG4gICAgICBpbXBvcnQgeyBmcm9tV2ViSGFuZGxlciB9IGZyb20gXCJoM1wiO1xuICAgICAgaW1wb3J0IHsgcmVhZEZpbGVTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcbiAgICAgIGZ1bmN0aW9uIEdFVCgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBtYW5pZmVzdCA9IHJlYWRGaWxlU3luYygke0pTT04uc3RyaW5naWZ5KG1hbmlmZXN0UGF0aCl9LCBcInV0Zi04XCIpO1xuICAgICAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UobWFuaWZlc3QsIHtcbiAgICAgICAgICAgIGhlYWRlcnM6IHsgXCJjb250ZW50LXR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZShcIk1hbmlmZXN0IG5vdCBmb3VuZFwiLCB7IHN0YXR1czogNDA0IH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBleHBvcnQgZGVmYXVsdCBmcm9tV2ViSGFuZGxlcihHRVQpO1xuICAgIGBcbiAgICAgIDogLyoganMgKi8gYFxuICAgICAgaW1wb3J0IHsgcmVhZEZpbGVTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcbiAgICAgIGV4cG9ydCBkZWZhdWx0IGFzeW5jICgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBtYW5pZmVzdCA9IHJlYWRGaWxlU3luYygke0pTT04uc3RyaW5naWZ5KG1hbmlmZXN0UGF0aCl9LCBcInV0Zi04XCIpO1xuICAgICAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UobWFuaWZlc3QsIHtcbiAgICAgICAgICAgIGhlYWRlcnM6IHsgXCJjb250ZW50LXR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZShcIk1hbmlmZXN0IG5vdCBmb3VuZFwiLCB7IHN0YXR1czogNDA0IH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIGA7XG4gIH0gZWxzZSB7XG4gICAgLy8gUHJvZCBtb2RlOiByZWdpc3RlciBhIHBoeXNpY2FsIGhhbmRsZXIgZmlsZSB0aGF0IHdpbGwgYmUgd3JpdHRlbiBieVxuICAgIC8vIHdyaXRlTWFuaWZlc3RIYW5kbGVyKCkgYWZ0ZXIgdGhlIGJ1aWxkZXIgZ2VuZXJhdGVzIHRoZSBtYW5pZmVzdC5cbiAgICAvLyBUaGlzIGZpbGUgaXMgYnVuZGxlZCBieSByb2xsdXAgaW50byB0aGUgY29tcGlsZWQgb3V0cHV0LlxuICAgIG5pdHJvLm9wdGlvbnMuaGFuZGxlcnMucHVzaCh7IHJvdXRlLCBoYW5kbGVyOiBoYW5kbGVyUGF0aCB9KTtcbiAgfVxufVxuXG4vKipcbiAqIFdyaXRlcyBhIHBoeXNpY2FsIG1hbmlmZXN0IGhhbmRsZXIgZmlsZSB3aXRoIHRoZSBtYW5pZmVzdCBjb250ZW50IGlubGluZWQuXG4gKiBNdXN0IGJlIGNhbGxlZCBhZnRlciB0aGUgYnVpbGRlciBnZW5lcmF0ZXMgdGhlIG1hbmlmZXN0IChkdXJpbmcgYnVpbGQ6YmVmb3JlKVxuICogYW5kIGJlZm9yZSBOaXRybyBjb21waWxlcyB0aGUgYnVuZGxlIHdpdGggcm9sbHVwLlxuICovXG5mdW5jdGlvbiB3cml0ZU1hbmlmZXN0SGFuZGxlcihuaXRybzogTml0cm8pIHtcbiAgY29uc3QgbWFuaWZlc3RQYXRoID0gam9pbihuaXRyby5vcHRpb25zLmJ1aWxkRGlyLCAnd29ya2Zsb3cvbWFuaWZlc3QuanNvbicpO1xuICBjb25zdCBoYW5kbGVyUGF0aCA9IGpvaW4oXG4gICAgbml0cm8ub3B0aW9ucy5idWlsZERpcixcbiAgICAnd29ya2Zsb3cvbWFuaWZlc3QtaGFuZGxlci5tanMnXG4gICk7XG4gIGNvbnN0IGRpciA9IGpvaW4obml0cm8ub3B0aW9ucy5idWlsZERpciwgJ3dvcmtmbG93Jyk7XG4gIG1rZGlyU3luYyhkaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgbWFuaWZlc3RDb250ZW50ID0gcmVhZEZpbGVTeW5jKG1hbmlmZXN0UGF0aCwgJ3V0Zi04Jyk7XG4gICAgSlNPTi5wYXJzZShtYW5pZmVzdENvbnRlbnQpOyAvLyB2YWxpZGF0ZVxuXG4gICAgY29uc3QgaGFuZGxlckNvZGUgPSAhbml0cm8ucm91dGluZ1xuICAgICAgPyBgaW1wb3J0IHsgZnJvbVdlYkhhbmRsZXIgfSBmcm9tIFwiaDNcIjtcbmNvbnN0IG1hbmlmZXN0ID0gJHtKU09OLnN0cmluZ2lmeShtYW5pZmVzdENvbnRlbnQpfTtcbmV4cG9ydCBkZWZhdWx0IGZyb21XZWJIYW5kbGVyKCgpID0+IG5ldyBSZXNwb25zZShtYW5pZmVzdCwge1xuICBoZWFkZXJzOiB7IFwiY29udGVudC10eXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiIH0sXG59KSk7XG5gXG4gICAgICA6IGBjb25zdCBtYW5pZmVzdCA9ICR7SlNPTi5zdHJpbmdpZnkobWFuaWZlc3RDb250ZW50KX07XG5leHBvcnQgZGVmYXVsdCBhc3luYyAoKSA9PiBuZXcgUmVzcG9uc2UobWFuaWZlc3QsIHtcbiAgaGVhZGVyczogeyBcImNvbnRlbnQtdHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9LFxufSk7XG5gO1xuICAgIHdyaXRlRmlsZVN5bmMoaGFuZGxlclBhdGgsIGhhbmRsZXJDb2RlKTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gV3JpdGUgYSA0MDQgZmFsbGJhY2sgaGFuZGxlclxuICAgIGNvbnN0IGZhbGxiYWNrID0gIW5pdHJvLnJvdXRpbmdcbiAgICAgID8gYGltcG9ydCB7IGZyb21XZWJIYW5kbGVyIH0gZnJvbSBcImgzXCI7XG5leHBvcnQgZGVmYXVsdCBmcm9tV2ViSGFuZGxlcigoKSA9PiBuZXcgUmVzcG9uc2UoXCJNYW5pZmVzdCBub3QgZm91bmRcIiwgeyBzdGF0dXM6IDQwNCB9KSk7XG5gXG4gICAgICA6IGBleHBvcnQgZGVmYXVsdCBhc3luYyAoKSA9PiBuZXcgUmVzcG9uc2UoXCJNYW5pZmVzdCBub3QgZm91bmRcIiwgeyBzdGF0dXM6IDQwNCB9KTtcbmA7XG4gICAgd3JpdGVGaWxlU3luYyhoYW5kbGVyUGF0aCwgZmFsbGJhY2spO1xuICB9XG59XG4iXX0=
|
|
629
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDeEQsT0FBTyxFQUNMLDRCQUE0QixFQUM1QiwrQkFBK0IsRUFDL0IsMkJBQTJCLEVBQzNCLGlDQUFpQyxFQUNqQyxzQkFBc0IsRUFDdEIsNEJBQTRCLEdBQzdCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFM0QsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUM3QixPQUFPLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUs1RDs7Ozs7O0dBTUc7QUFDSCxTQUFTLFNBQVMsQ0FBQyxLQUFZO0lBQzdCLE1BQU0sWUFBWSxHQUFJLEtBQThDLENBQUMsSUFBSTtRQUN2RSxFQUFFLFlBQVksQ0FBQztJQUNqQixJQUFJLFlBQVksSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN6QixPQUFPLFlBQVksS0FBSyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUNELE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO0FBQ3hCLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUNILFNBQVMsb0JBQW9CLENBQUMsTUFBb0I7SUFDaEQsTUFBTSxNQUFNLEdBQUcsMkJBQTJCLENBQUM7SUFDM0MsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUM3QixJQUFJLE1BQU0sSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNuQixNQUFN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QUFNLFFBQVEsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPO1lBQzdCLENBQUMsQ0FBQzs7Q0FFUDtZQUNLLENBQUMsQ0FBQztDQUNQLENBQUM7UUFDRSxhQUFhLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbWtkaXJTeW5jLCByZWFkRmlsZVN5bmMsIHdyaXRlRmlsZVN5bmMgfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7IGNyZWF0ZVJlcXVpcmUgfSBmcm9tICdub2RlOm1vZHVsZSc7XG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoLCBwYXRoVG9GaWxlVVJMIH0gZnJvbSAnbm9kZTp1cmwnO1xuaW1wb3J0IHtcbiAgZW5zdXJlV29ya2Zsb3dUYXJnZXRXb3JsZEVudixcbiAgcmVzb2x2ZVdvcmtmbG93Q29yZVJ1bnRpbWVBbGlhcyxcbiAgV09SS0ZMT1dfTk9ERV9DT01QQVRfQkFOTkVSLFxuICBXT1JLRkxPV19PUFRJT05BTF9QR19OQVRJVkVfQUxJQVMsXG4gIFdPUktGTE9XX1FVRVVFX1RSSUdHRVIsXG4gIFdPUktGTE9XX1dPUkxEX1RBUkdFVF9NT0RVTEUsXG59IGZyb20gJ0B3b3JrZmxvdy9idWlsZGVycyc7XG5pbXBvcnQgeyB3b3JrZmxvd1RyYW5zZm9ybVBsdWdpbiB9IGZyb20gJ0B3b3JrZmxvdy9yb2xsdXAnO1xuaW1wb3J0IHR5cGUgeyBOaXRybywgTml0cm9Nb2R1bGUsIFJvbGx1cENvbmZpZyB9IGZyb20gJ25pdHJvL3R5cGVzJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoZSc7XG5pbXBvcnQgeyBMb2NhbEJ1aWxkZXIsIFZlcmNlbEJ1aWxkZXIgfSBmcm9tICcuL2J1aWxkZXJzLmpzJztcbmltcG9ydCB0eXBlIHsgTW9kdWxlT3B0aW9ucyB9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgdHlwZSB7IE1vZHVsZU9wdGlvbnMgfTtcblxuLyoqXG4gKiBEZXRlY3Qgd2hldGhlciB0aGUgTml0cm8gaW5zdGFuY2UgaXMgdjIuXG4gKiBOZXdlciBOaXRybyByZWxlYXNlcyAoYm90aCB2MiBhbmQgdjMpIGV4cG9zZSBgbml0cm8ubWV0YS5tYWpvclZlcnNpb25gLlxuICogRmFsbCBiYWNrIHRvIGAhbml0cm8ucm91dGluZ2AgKG9ubHkgcHJlc2VudCBpbiB2MyspIGZvciBvbGRlciBOaXRybyB2MlxuICogdmVyc2lvbnMgdGhhdCBkb24ndCBoYXZlIGBtYWpvclZlcnNpb25gIHlldCAoZS5nLiBOdXh0IHVzZXJzIG9uIGFuIG9sZGVyXG4gKiBuaXRyb3BhY2spLlxuICovXG5mdW5jdGlvbiBpc05pdHJvVjIobml0cm86IE5pdHJvKTogYm9vbGVhbiB7XG4gIGNvbnN0IG1ham9yVmVyc2lvbiA9IChuaXRybyBhcyB7IG1ldGE/OiB7IG1ham9yVmVyc2lvbj86IG51bWJlciB9IH0pLm1ldGFcbiAgICA/Lm1ham9yVmVyc2lvbjtcbiAgaWYgKG1ham9yVmVyc2lvbiAhPSBudWxsKSB7XG4gICAgcmV0dXJuIG1ham9yVmVyc2lvbiA9PT0gMjtcbiAgfVxuICByZXR1cm4gIW5pdHJvLnJvdXRpbmc7XG59XG5cbi8qKlxuICogUHJlcGVuZCBhIGBjcmVhdGVSZXF1aXJlYC1iYWNrZWQgZ2xvYmFsIGByZXF1aXJlYCB0byBldmVyeSBzZXJ2ZXIgY2h1bmsgc29cbiAqIHVuZGljaSdzIGJ1bmRsZWQgYHJlcXVpcmUoJ25vZGU6aHR0cDInKWAgcmVzb2x2ZXMgdGhlIHJlYWwgYnVpbHRpbiBpbnN0ZWFkIG9mXG4gKiB0aHJvd2luZyAod2hpY2ggd291bGQgbWFrZSB1bmRpY2kgZmFsbCBiYWNrIHRvIGEgc3R1YiB3aXRob3V0XG4gKiBgaHR0cDIuY29ubmVjdGAsIGJyZWFraW5nIEhUVFAvMikuIFRoZSBndWFyZCBrZWVwcyBpdCBpZGVtcG90ZW50IGFjcm9zc1xuICogY2h1bmtzLCBhbmQgYG5vZGU6bW9kdWxlYCBpcyBhbHdheXMgYXZhaWxhYmxlIGluIHRoZSBOb2RlIHNlcnZlciBydW50aW1lLlxuICpcbiAqIFRoaXMgaXMgYSBOb2RlLXNlcnZlci1ydW50aW1lLW9ubHkgc2hpbSAoY2FsbGVycyBnYXRlIGl0IHRvIHRoZSBwcm9kdWN0aW9uXG4gKiBzZXJ2ZXIgYnVpbGQpLiBOb3RlIHRoZSBkZWxpYmVyYXRlIGdsb2JhbCBzaWRlIGVmZmVjdDogZGVmaW5pbmdcbiAqIGBnbG9iYWxUaGlzLnJlcXVpcmVgIG1ha2VzIGB0eXBlb2YgcmVxdWlyZWAgdHJ1dGh5IGZvciAqZXZlcnkqIGJ1bmRsZWRcbiAqIGRlcGVuZGVuY3kgaW4gdGhpcyBFU00gc2VydmVyIG91dHB1dCwgc28gYW55IGxpYnJhcnkgdGhhdCBmZWF0dXJlLWRldGVjdHNcbiAqIGByZXF1aXJlYCB3aWxsIHRha2UgaXRzIENKUyBwYXRoIGhlcmUuIFRoYXQgaXMgc2FmZSBiZWNhdXNlIChhKSBpdCBuZXZlclxuICogdG91Y2hlcyB0aGUgY2xpZW50IGJ1bmRsZSwgKGIpIHRoZSBgdHlwZW9mIHJlcXVpcmUgPT09ICd1bmRlZmluZWQnYCBndWFyZFxuICogbWFrZXMgaXQgYSBuby1vcCBpbiBDSlMgY2h1bmtzIHdoZXJlIGEgcmVhbCBgcmVxdWlyZWAgYWxyZWFkeSBleGlzdHMsIGFuZFxuICogKGMpIHRoZSBgcmVxdWlyZWAgd2UgaW5zdGFsbCBpcyBhIHdvcmtpbmcgYGNyZWF0ZVJlcXVpcmVgLCBzbyBhIGxpYnJhcnkgdGhhdFxuICogc3dpdGNoZXMgdG8gdGhlIHJlcXVpcmUgcGF0aCBnZXRzIGEgZnVuY3Rpb25hbCBgcmVxdWlyZWAsIG5vdCBhIGJyb2tlbiBzdHViLlxuICogVGhlIGJlaGF2aW9yIHRvIHdhdGNoIGZvciBpcyBhIGJ1bmRsZWQgbGliIHRoYXQsIG9uIHNlZWluZyBgcmVxdWlyZWAsIGRvZXNcbiAqIGByZXF1aXJlKClgIG9mIGFuIEVTTS1vbmx5IGRlcGVuZGVuY3kgb24gYSBOb2RlIHZlcnNpb24gd2l0aG91dCBgcmVxdWlyZShFU00pYFxuICogc3VwcG9ydC5cbiAqL1xuZnVuY3Rpb24gYWRkTm9kZVJlcXVpcmVCYW5uZXIoY29uZmlnOiBSb2xsdXBDb25maWcpOiB2b2lkIHtcbiAgY29uc3QgYmFubmVyID0gV09SS0ZMT1dfTk9ERV9DT01QQVRfQkFOTkVSO1xuICBjb25zdCBvdXRwdXQgPSBjb25maWcub3V0cHV0O1xuICBpZiAob3V0cHV0ID09IG51bGwpIHtcbiAgICBjb25maWcub3V0cHV0ID0geyBiYW5uZXIgfTtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3Qgb3V0cHV0cyA9IEFycmF5LmlzQXJyYXkob3V0cHV0KSA/IG91dHB1dCA6IFtvdXRwdXRdO1xuICBmb3IgKGNvbnN0IG8gb2Ygb3V0cHV0cykge1xuICAgIGNvbnN0IGV4aXN0aW5nID0gby5iYW5uZXI7XG4gICAgby5iYW5uZXIgPVxuICAgICAgZXhpc3RpbmcgPT0gbnVsbFxuICAgICAgICA/IGJhbm5lclxuICAgICAgICA6IHR5cGVvZiBleGlzdGluZyA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgID8gYXN5bmMgKGNodW5rOiB1bmtub3duKSA9PiBgJHtiYW5uZXJ9XFxuJHthd2FpdCBleGlzdGluZyhjaHVuayl9YFxuICAgICAgICAgIDogYCR7YmFubmVyfVxcbiR7ZXhpc3Rpbmd9YDtcbiAgfVxufVxuXG5jb25zdCBXT1JLRkxPV19JTkxJTkVfUEFDS0FHRVMgPSBuZXcgU2V0KFtcbiAgJ3dvcmtmbG93JyxcbiAgJ2NvcmUnLFxuICAnc2VyZGUnLFxuICAnZXJyb3JzJyxcbiAgJ3V0aWxzJyxcbiAgJ2J1aWxkZXJzJyxcbiAgJ3JvbGx1cCcsXG4gICdhaScsXG4gICd3b3JsZCcsXG5dKTtcblxuZnVuY3Rpb24gZ2V0V29ya2Zsb3dQYWNrYWdlTmFtZShzb3VyY2U6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCBwYWNrYWdlU3BlY2lmaWVyID0gc291cmNlLm1hdGNoKC9eQHdvcmtmbG93XFwvKFteL10rKS8pO1xuICBpZiAocGFja2FnZVNwZWNpZmllcikge1xuICAgIHJldHVybiBwYWNrYWdlU3BlY2lmaWVyWzFdID8/IG51bGw7XG4gIH1cbiAgaWYgKHNvdXJjZSA9PT0gJ3dvcmtmbG93JyB8fCBzb3VyY2Uuc3RhcnRzV2l0aCgnd29ya2Zsb3cvJykpIHtcbiAgICByZXR1cm4gJ3dvcmtmbG93JztcbiAgfVxuICBjb25zdCBwYWNrYWdlUGF0aCA9IHNvdXJjZS5tYXRjaCgvW1xcXFwvXXBhY2thZ2VzW1xcXFwvXShbXlxcXFwvXSspLyk7XG4gIHJldHVybiBwYWNrYWdlUGF0aD8uWzFdID8/IG51bGw7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVdvcmtmbG93Rm9yY2VJbmxpbmVQbHVnaW4oXG4gIHdvcmtmbG93VGFyZ2V0V29ybGQ6IHN0cmluZyxcbiAgd29ya2Zsb3dUYXJnZXRXb3JsZEFsaWFzOiBzdHJpbmdcbikge1xuICBjb25zdCB0YXJnZXRXb3JsZFBhY2thZ2UgPSBnZXRXb3JrZmxvd1BhY2thZ2VOYW1lKHdvcmtmbG93VGFyZ2V0V29ybGQpO1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICd3b3JrZmxvdzpmb3JjZS1pbmxpbmUnLFxuICAgIC8vIGBvcmRlcjogJ3ByZSdgIGlzIHJlcXVpcmVkOiBOaXRybydzIGBuaXRybzpleHRlcm5hbHNgIHBsdWdpblxuICAgIC8vIHVzZXMgYG9yZGVyOiAncHJlJ2AgZm9yIGl0cyByZXNvbHZlSWQgaG9vayBhbmQgc3ByZWFkcyBvdXJcbiAgICAvLyByZXNvbHV0aW9uIHJlc3VsdCB3aGlsZSBmb3JjaW5nIGBleHRlcm5hbDogdHJ1ZWAuIFdpdGhvdXRcbiAgICAvLyBgcHJlYCBoZXJlLCBvdXIgYGV4dGVybmFsOiBmYWxzZWAgZGVjaXNpb24gZ2V0cyBvdmVyd3JpdHRlblxuICAgIC8vIGFuZCBgQHdvcmtmbG93LypgIGltcG9ydHMgZW5kIHVwIGV4dGVybmFsaXplZCBpbiB0aGUgYnVuZGxlLlxuICAgIHJlc29sdmVJZDoge1xuICAgICAgb3JkZXI6ICdwcmUnIGFzIGNvbnN0LFxuICAgICAgYXN5bmMgaGFuZGxlcihcbiAgICAgICAgdGhpczoge1xuICAgICAgICAgIHJlc29sdmU6IChcbiAgICAgICAgICAgIHNvdXJjZTogc3RyaW5nLFxuICAgICAgICAgICAgaW1wb3J0ZXI6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIG9wdGlvbnM6IHsgc2tpcFNlbGY/OiBib29sZWFuIH1cbiAgICAgICAgICApID0+IFByb21pc2U8eyBpZDogc3RyaW5nIH0gfCBudWxsPjtcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlOiBzdHJpbmcsXG4gICAgICAgIGltcG9ydGVyOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgICAgIG9wdGlvbnM6IHsgc2tpcFNlbGY/OiBib29sZWFuIH1cbiAgICAgICkge1xuICAgICAgICBpZiAoc291cmNlID09PSBXT1JLRkxPV19XT1JMRF9UQVJHRVRfTU9EVUxFKSB7XG4gICAgICAgICAgcmV0dXJuIHsgaWQ6IHdvcmtmbG93VGFyZ2V0V29ybGRBbGlhcywgZXh0ZXJuYWw6IGZhbHNlIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpbXBvcnRlcikgcmV0dXJuIG51bGw7XG4gICAgICAgIC8vIE1hdGNoIHdvcmtmbG93IHBhY2thZ2Ugc3BlY2lmaWVycyBPUiBkaXJlY3QgcGF0aHMgaW50b1xuICAgICAgICAvLyBwYWNrYWdlcy88bmFtZT4vLiBCYWlsIG91dCBlYXJseSBvbiBub24td29ya2Zsb3cgaW1wb3J0c1xuICAgICAgICAvLyBzbyB3ZSBkb24ndCBpbnRlcmNlcHQgdGhlIHJlc3Qgb2YgdGhlIHJlc29sdXRpb24gY2hhaW4uXG4gICAgICAgIGNvbnN0IHBhY2thZ2VOYW1lID0gZ2V0V29ya2Zsb3dQYWNrYWdlTmFtZShzb3VyY2UpO1xuICAgICAgICBjb25zdCBpc1dvcmtmbG93UGtnID1cbiAgICAgICAgICBwYWNrYWdlTmFtZSAhPSBudWxsICYmXG4gICAgICAgICAgKFdPUktGTE9XX0lOTElORV9QQUNLQUdFUy5oYXMocGFja2FnZU5hbWUpIHx8XG4gICAgICAgICAgICBwYWNrYWdlTmFtZSA9PT0gdGFyZ2V0V29ybGRQYWNrYWdlKTtcbiAgICAgICAgaWYgKCFpc1dvcmtmbG93UGtnKSByZXR1cm4gbnVsbDtcbiAgICAgICAgLy8gUmVzb2x2ZSB2aWEgb3RoZXIgcmVzb2x2ZXJzLCBza2lwcGluZyBvdXJzZWx2ZXMgc28gd2VcbiAgICAgICAgLy8gZ2V0IGEgcGF0aC4gV2UgZG9uJ3QgZ2F0ZSBvbiBgcmVzb2x2ZWQuZXh0ZXJuYWxgIGJlY2F1c2VcbiAgICAgICAgLy8gYG5pdHJvOmV4dGVybmFsc2Agc3ByZWFkcyBvdXIgcmVzdWx0IGFuZCBvdmVycmlkZXNcbiAgICAgICAgLy8gYGV4dGVybmFsOiB0cnVlYCByZWdhcmRsZXNzIG9mIHdoYXQgd2UgcmV0dXJuIOKAlCB3ZSB3YW50XG4gICAgICAgIC8vIHRvIHdpbiB0aGF0IHJhY2UgYnkgcmV0dXJuaW5nIGZpcnN0IHVuZGVyIGBvcmRlcjogJ3ByZSdgLlxuICAgICAgICBjb25zdCByZXNvbHZlZCA9IGF3YWl0IHRoaXMucmVzb2x2ZShzb3VyY2UsIGltcG9ydGVyLCB7XG4gICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICBza2lwU2VsZjogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghcmVzb2x2ZWQpIHJldHVybiBudWxsO1xuICAgICAgICBsZXQgcmVzb2x2ZWRJZCA9IHJlc29sdmVkLmlkO1xuICAgICAgICAvLyBTdHJpcCBmaWxlOi8vIHByb3RvY29sIGlmIHByZXNlbnQg4oCUIFJvbGx1cCBuZWVkcyBhIHBsYWluXG4gICAgICAgIC8vIGZpbGVzeXN0ZW0gcGF0aCB0byBsb2FkIHRoZSBtb2R1bGUuIGBmaWxlVVJMVG9QYXRoYFxuICAgICAgICAvLyBjb3JyZWN0bHkgaGFuZGxlcyBXaW5kb3dzIHBhdGhzIChlLmcuLCBmaWxlOi8vL0M6Ly4uLlxuICAgICAgICAvLyAtPiBDOlxcLi4uKSBhbmQgcGVyY2VudC1kZWNvZGluZy5cbiAgICAgICAgaWYgKHJlc29sdmVkSWQuc3RhcnRzV2l0aCgnZmlsZTovLycpKSB7XG4gICAgICAgICAgcmVzb2x2ZWRJZCA9IGZpbGVVUkxUb1BhdGgocmVzb2x2ZWRJZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgaWQ6IHJlc29sdmVkSWQsIGV4dGVybmFsOiBmYWxzZSB9O1xuICAgICAgfSxcbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVSZXNvbHZlclJlcXVpcmUobml0cm86IE5pdHJvKSB7XG4gIHJldHVybiBjcmVhdGVSZXF1aXJlKGpvaW4obml0cm8ub3B0aW9ucy5yb290RGlyLCAncGFja2FnZS5qc29uJykpO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlV29ya2Zsb3dUYXJnZXRXb3JsZEFsaWFzKFxuICBuaXRybzogTml0cm8sXG4gIHRhcmdldFdvcmxkOiBzdHJpbmdcbik6IHN0cmluZyB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGNyZWF0ZVJlc29sdmVyUmVxdWlyZShuaXRybykucmVzb2x2ZSh0YXJnZXRXb3JsZCk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB0YXJnZXRXb3JsZDtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICd3b3JrZmxvdy9uaXRybycsXG4gIGFzeW5jIHNldHVwKG5pdHJvOiBOaXRybykge1xuICAgIGNvbnN0IGlzVmVyY2VsRGVwbG95ID1cbiAgICAgICFuaXRyby5vcHRpb25zLmRldiAmJiBuaXRyby5vcHRpb25zLnByZXNldCA9PT0gJ3ZlcmNlbCc7XG4gICAgY29uc3Qgd29ya2Zsb3dUYXJnZXRXb3JsZCA9IGVuc3VyZVdvcmtmbG93VGFyZ2V0V29ybGRFbnYoKTtcblxuICAgIC8vIFByZS1idWlsdCB3b3JrZmxvdyBidW5kbGVzIGRpcmVjdG9yeSAtIG11c3QgYmUgZXhjbHVkZWQgZnJvbSByZS10cmFuc2Zvcm1hdGlvblxuICAgIGNvbnN0IHdvcmtmbG93QnVpbGREaXIgPSBqb2luKG5pdHJvLm9wdGlvbnMuYnVpbGREaXIsICd3b3JrZmxvdycpO1xuXG4gICAgbml0cm8ub3B0aW9ucy5hbGlhc1tXT1JLRkxPV19XT1JMRF9UQVJHRVRfTU9EVUxFXSA9XG4gICAgICByZXNvbHZlV29ya2Zsb3dUYXJnZXRXb3JsZEFsaWFzKG5pdHJvLCB3b3JrZmxvd1RhcmdldFdvcmxkKTtcbiAgICBuaXRyby5vcHRpb25zLmFsaWFzWydwZy1uYXRpdmUnXSA/Pz0gV09SS0ZMT1dfT1BUSU9OQUxfUEdfTkFUSVZFX0FMSUFTO1xuXG4gICAgLy8gQWRkIHRyYW5zZm9ybSBwbHVnaW4gYXQgdGhlIEJFR0lOTklORyB0byBydW4gYmVmb3JlIG90aGVyIHRyYW5zZm9ybXNcbiAgICAvLyAoZXNwZWNpYWxseSBiZWZvcmUgY2xhc3MgcHJvcGVydHkgdHJhbnNmb3JtcyB0aGF0IHJlbmFtZSBjbGFzc2VzIGxpa2UgX0NsYXNzTmFtZSlcbiAgICBuaXRyby5ob29rcy5ob29rKCdyb2xsdXA6YmVmb3JlJywgKF9uaXRybzogTml0cm8sIGNvbmZpZzogUm9sbHVwQ29uZmlnKSA9PiB7XG4gICAgICAoY29uZmlnLnBsdWdpbnMgYXMgQXJyYXk8dW5rbm93bj4pLnVuc2hpZnQoXG4gICAgICAgIHdvcmtmbG93VHJhbnNmb3JtUGx1Z2luKHtcbiAgICAgICAgICAvLyBFeGNsdWRlIHByZS1idWlsdCB3b3JrZmxvdyBidW5kbGVzIGZyb20gcmUtdHJhbnNmb3JtYXRpb25cbiAgICAgICAgICAvLyBUaGVzZSBhcmUgYWxyZWFkeSBwcm9jZXNzZWQgYW5kIHJlLXByb2Nlc3NpbmcgY2F1c2VzIGlzc3VlcyBsaWtlXG4gICAgICAgICAgLy8gdW5kZWZpbmVkIGNsYXNzIHJlZmVyZW5jZXMgd2hlbiBOaXRybydzIGJ1bmRsZXIgcmVuYW1lcyB2YXJpYWJsZXNcbiAgICAgICAgICBleGNsdWRlOiBbd29ya2Zsb3dCdWlsZERpcl0sXG4gICAgICAgIH0pXG4gICAgICApO1xuXG4gICAgICAvLyBOaXRybyBidW5kbGVzIHVuZGljaSAodmlhIHRoZSB3b3JsZCBhZGFwdGVyKSBpbnRvIHRoZSBFU00gc2VydmVyXG4gICAgICAvLyBvdXRwdXQuIHVuZGljaSBsb2FkcyBtb3N0IG5vZGU6IGJ1aWx0aW5zIGFzIEVTTSBpbXBvcnRzLCBidXQgcHVsbHMgaW5cbiAgICAgIC8vIGBub2RlOmh0dHAyYCBsYXppbHkgdmlhIGEgYmFyZSBgcmVxdWlyZSgnbm9kZTpodHRwMicpYCBpbnNpZGUgYVxuICAgICAgLy8gdHJ5L2NhdGNoIOKAlCB3aGljaCB0aGUgYnVuZGxlciBsZWF2ZXMgdW4td2lyZWQsIHNvIGluIHRoZSBFU00gYnVuZGxlIHRoZVxuICAgICAgLy8gcmVxdWlyZSB0aHJvd3MgYW5kIHVuZGljaSBzaWxlbnRseSBmYWxscyBiYWNrIHRvIGEgc3R1YiB3aG9zZVxuICAgICAgLy8gYGh0dHAyLmNvbm5lY3RgIGlzIHVuZGVmaW5lZC4gVGhhdCBicmVha3MgYW55IEhUVFAvMiByZXF1ZXN0ICh0aGVcbiAgICAgIC8vIHdvcmtmbG93IGZsb3ctcm91dGUgY2FsbGJhY2sgZmFpbHMgd2l0aCBcImZldGNoIGZhaWxlZFwiLCBzbyBydW5zIG5ldmVyXG4gICAgICAvLyBzdGFydCkuIFByZXBlbmQgYSB3b3JraW5nIENKUyBgcmVxdWlyZWAgdG8gdGhlIHNlcnZlciBjaHVua3Mgc28gdGhlXG4gICAgICAvLyByZWFsIGBub2RlOmh0dHAyYCByZXNvbHZlcy4gU2tpcHBlZCBpbiBkZXYgKFZpdGUgU1NSIHByb3ZpZGVzIHJlcXVpcmUpLlxuICAgICAgaWYgKCFuaXRyby5vcHRpb25zLmRldikge1xuICAgICAgICBhZGROb2RlUmVxdWlyZUJhbm5lcihjb25maWcpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gTk9URTogVGVtcG9yYXJ5IHdvcmthcm91bmQgZm9yIGRlYnVnIHVuZW52IG1vY2tcbiAgICBpZiAoIW5pdHJvLm9wdGlvbnMud29ya2Zsb3c/Ll92aXRlKSB7XG4gICAgICBuaXRyby5vcHRpb25zLmFsaWFzLmRlYnVnID8/PSAnZGVidWcnO1xuICAgIH1cblxuICAgIGlmIChuaXRyby5vcHRpb25zLmRldikge1xuICAgICAgY29uc3Qgd29ya2Zsb3dCdWlsZEdsb2IgPSBgJHtqb2luKG5pdHJvLm9wdGlvbnMuYnVpbGREaXIsICd3b3JrZmxvdycpfS8qKmA7XG4gICAgICBuaXRyby5vcHRpb25zLndhdGNoT3B0aW9ucyB8fD0ge307XG4gICAgICBjb25zdCBleGlzdGluZ0lnbm9yZWQgPSBuaXRyby5vcHRpb25zLndhdGNoT3B0aW9ucy5pZ25vcmVkO1xuICAgICAgaWYgKCFleGlzdGluZ0lnbm9yZWQpIHtcbiAgICAgICAgbml0cm8ub3B0aW9ucy53YXRjaE9wdGlvbnMuaWdub3JlZCA9IFt3b3JrZmxvd0J1aWxkR2xvYl07XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZXhpc3RpbmdJZ25vcmVkKSkge1xuICAgICAgICBuaXRyby5vcHRpb25zLndhdGNoT3B0aW9ucy5pZ25vcmVkID0gW1xuICAgICAgICAgIC4uLmV4aXN0aW5nSWdub3JlZCxcbiAgICAgICAgICB3b3JrZmxvd0J1aWxkR2xvYixcbiAgICAgICAgXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5pdHJvLm9wdGlvbnMud2F0Y2hPcHRpb25zLmlnbm9yZWQgPSBbXG4gICAgICAgICAgZXhpc3RpbmdJZ25vcmVkLFxuICAgICAgICAgIHdvcmtmbG93QnVpbGRHbG9iLFxuICAgICAgICBdO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEZvcmNlIHdvcmtmbG93IFNESyBwYWNrYWdlcyB0byBiZSBidW5kbGVkIGJ5IE5pdHJvJ3MgUm9sbHVwIHJhdGhlciB0aGFuXG4gICAgLy8gZXh0ZXJuYWxpemVkLiBUaGlzIGxldHMgdGhlIHN0YXRpYyB3b3JsZC10YXJnZXQgYWxpYXMgcmVzb2x2ZSBpbnNpZGUgdGhlXG4gICAgLy8gaG9zdCBzZXJ2ZXIgYnVuZGxlIGluc3RlYWQgb2YgZmFsbGluZyB0aHJvdWdoIHRvIHRoZSB1bmFsaWFzZWQgY29yZSBzdHViLlxuICAgIC8vIEl0IGFsc28gZW5zdXJlcyB0aGUgU1dDIHRyYW5zZm9ybSBwbHVnaW4gcHJvY2Vzc2VzIGZpbGVzIGNvbnRhaW5pbmdcbiAgICAvLyB3b3JrZmxvdyBwYXR0ZXJucyAobGlrZSBAd29ya2Zsb3cvY29yZS9kaXN0L3J1bnRpbWUvcnVuLmpzKSBhbmQgYWRkcyB0aGVcbiAgICAvLyBjbGFzc0lkIHJlZ2lzdHJhdGlvbiBJSUZFcyBuZWVkZWQgZm9yIHNlcmlhbGl6YXRpb24uIFdpdGhvdXQgdGhpcywgc2VyZGVcbiAgICAvLyBjbGFzc2VzIGZyb20gbnBtIHBhY2thZ2VzIChsaWtlIGBSdW5gKSB3b3VsZCBiZSBleHRlcm5hbGl6ZWQsIHRoZSBTV0NcbiAgICAvLyB0cmFuc2Zvcm0gd291bGQgbmV2ZXIgZmlyZSBvbiB0aGVtLCBhbmQgc2VyaWFsaXphdGlvbiB3b3VsZCBmYWlsIHdpdGhcbiAgICAvLyBcIm11c3QgaGF2ZSBhIHN0YXRpYyBjbGFzc0lkIHByb3BlcnR5XCIuXG4gICAgLy9cbiAgICAvLyBXZSB1c2UgYSBSb2xsdXAgcmVzb2x2ZUlkIGhvb2sgKGFkZGVkIEJFRk9SRSB0aGUgZXh0ZXJuYWxpemF0aW9uXG4gICAgLy8gcGx1Z2luKSB0aGF0IGludGVyY2VwdHMgd29ya2Zsb3cgcGFja2FnZSBpbXBvcnRzIGFuZCBtYXJrcyB0aGVtXG4gICAgLy8gYXMgbm9uLWV4dGVybmFsLiBUaGlzIGlzIG1vcmUgdGFyZ2V0ZWQgdGhhbiBgbm9FeHRlcm5hbHMgPSB0cnVlYFxuICAgIC8vIHdoaWNoIHdvdWxkIGJ1bmRsZSBBTEwgZGVwZW5kZW5jaWVzIGFuZCBjYXVzZSBURFogZXJyb3JzIGZyb21cbiAgICAvLyBjaXJjdWxhciBpbXBvcnRzIGluIHBhY2thZ2VzIGxpa2UgdnVlLWJ1bmRsZS1yZW5kZXJlci9oMy5cbiAgICBuaXRyby5ob29rcy5ob29rKCdyb2xsdXA6YmVmb3JlJywgKF9uaXRybzogTml0cm8sIGNvbmZpZzogUm9sbHVwQ29uZmlnKSA9PiB7XG4gICAgICAoY29uZmlnLnBsdWdpbnMgYXMgQXJyYXk8dW5rbm93bj4pLnVuc2hpZnQoXG4gICAgICAgIGNyZWF0ZVdvcmtmbG93Rm9yY2VJbmxpbmVQbHVnaW4oXG4gICAgICAgICAgd29ya2Zsb3dUYXJnZXRXb3JsZCxcbiAgICAgICAgICBuaXRyby5vcHRpb25zLmFsaWFzW1dPUktGTE9XX1dPUkxEX1RBUkdFVF9NT0RVTEVdXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICAvLyBBZGQgdHNDb25maWcgcGx1Z2luXG4gICAgaWYgKG5pdHJvLm9wdGlvbnMud29ya2Zsb3c/LnR5cGVzY3JpcHRQbHVnaW4pIHtcbiAgICAgIG5pdHJvLm9wdGlvbnMudHlwZXNjcmlwdC50c0NvbmZpZyB8fD0ge307XG4gICAgICBuaXRyby5vcHRpb25zLnR5cGVzY3JpcHQudHNDb25maWcuY29tcGlsZXJPcHRpb25zIHx8PSB7fTtcbiAgICAgIG5pdHJvLm9wdGlvbnMudHlwZXNjcmlwdC50c0NvbmZpZy5jb21waWxlck9wdGlvbnMucGx1Z2lucyB8fD0gW107XG4gICAgICBuaXRyby5vcHRpb25zLnR5cGVzY3JpcHQudHNDb25maWcuY29tcGlsZXJPcHRpb25zLnBsdWdpbnMucHVzaCh7XG4gICAgICAgIG5hbWU6ICd3b3JrZmxvdycsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBOaXRybyB2MiBWZXJjZWwgZGVwbG95OiBrZWVwIHRoZSBsZWdhY3kgQnVpbGQgT3V0cHV0IEFQSSBwYXRoIHRoYXRcbiAgICAvLyBidWlsZHMgdGhlIHdvcmtmbG93IGZ1bmN0aW9ucyBzdGFuZGFsb25lIGFuZCBzdGl0Y2hlcyB0aGUgcm91dGVzIGludG9cbiAgICAvLyBgLnZlcmNlbC9vdXRwdXQvY29uZmlnLmpzb25gLiBUaGlzIHBhdGggaXMgaW5kZXBlbmRlbnQgb2Ygbml0cm8ncyBvd25cbiAgICAvLyBidW5kbGUgYW5kIGlzIG9ubHkgdXNlZCBmb3Igbml0cm9wYWNrIHYyIChlLmcuIE51eHQgNCBzdGlsbCB1c2VzIGl0KS5cbiAgICBjb25zdCB1c2VMZWdhY3lWZXJjZWxCdWlsZCA9IGlzVmVyY2VsRGVwbG95ICYmIGlzTml0cm9WMihuaXRybyk7XG5cbiAgICBpZiAodXNlTGVnYWN5VmVyY2VsQnVpbGQpIHtcbiAgICAgIG5pdHJvLmhvb2tzLmhvb2soJ2NvbXBpbGVkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCBuZXcgVmVyY2VsQnVpbGRlcihuaXRybykuYnVpbGQoKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIExvY2FsIGRldi9wcm9kIGFuZCBOaXRybyB2MyBWZXJjZWwgZGVwbG95IHNoYXJlIHRoZSBzYW1lIHBhdGg6XG4gICAgLy8gYnVuZGxlIHRoZSB3b3JrZmxvdyByb3V0ZXMgaW50byBuaXRybyBpdHNlbGYgdmlhIHZpcnR1YWwgaGFuZGxlcnMuXG4gICAgLy8gRm9yIFZlcmNlbCB2MyB3ZSBhZGRpdGlvbmFsbHkgY29uZmlndXJlIGBmdW5jdGlvblJ1bGVzYCBzbyB0aGVcbiAgICAvLyByb3V0ZXMgZ2V0IHF1ZXVlIHRyaWdnZXJzICsgZXh0ZW5kZWQgbWF4RHVyYXRpb24gdmlhIHRoZSBuaXRyb1xuICAgIC8vIHZlcmNlbCBwcmVzZXQuIFRoaXMgbGV0cyB3b3JrZmxvdyBoYW5kbGVycyB1c2Ugbml0cm8gZmVhdHVyZXNcbiAgICAvLyAoc3RvcmFnZSwgZGF0YWJhc2UsIHJ1bnRpbWUgY29uZmlnLCB2aXJ0dWFsIGltcG9ydHMsIGV0Yy4pLlxuICAgIGlmICghdXNlTGVnYWN5VmVyY2VsQnVpbGQpIHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgTG9jYWxCdWlsZGVyKG5pdHJvKTtcbiAgICAgIGxldCBpc0luaXRpYWxCdWlsZCA9IHRydWU7XG5cbiAgICAgIG5pdHJvLmhvb2tzLmhvb2soJ2J1aWxkOmJlZm9yZScsIGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuXG4gICAgICAgIC8vIEZvciBwcm9kOiB3cml0ZSB0aGUgbWFuaWZlc3QgaGFuZGxlciBmaWxlIHdpdGggaW5saW5lZCBjb250ZW50XG4gICAgICAgIC8vIG5vdyB0aGF0IHRoZSBidWlsZGVyIGhhcyBnZW5lcmF0ZWQgdGhlIG1hbmlmZXN0LiBSb2xsdXAgd2lsbFxuICAgICAgICAvLyBidW5kbGUgdGhpcyBmaWxlIGludG8gdGhlIGNvbXBpbGVkIG91dHB1dC5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICFuaXRyby5vcHRpb25zLmRldiAmJlxuICAgICAgICAgIHByb2Nlc3MuZW52LldPUktGTE9XX1BVQkxJQ19NQU5JRkVTVCA9PT0gJzEnXG4gICAgICAgICkge1xuICAgICAgICAgIHdyaXRlTWFuaWZlc3RIYW5kbGVyKG5pdHJvKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIEFsbG93cyBmb3IgSE1SIC0gYnV0IHNraXAgdGhlIGZpcnN0IGRldjpyZWxvYWQgc2luY2UgYnVpbGQ6YmVmb3JlIGFscmVhZHkgcmFuXG4gICAgICBpZiAobml0cm8ub3B0aW9ucy5kZXYpIHtcbiAgICAgICAgbml0cm8uaG9va3MuaG9vaygnZGV2OnJlbG9hZCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICBpZiAoaXNJbml0aWFsQnVpbGQpIHtcbiAgICAgICAgICAgIGlzSW5pdGlhbEJ1aWxkID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIC8vIER1cmluZyBkZXYsIGZpbGVzIG1heSBiZSBhZGRlZC9yZW1vdmVkIHdoaWxlIHRoZSBidWlsZGVyXG4gICAgICAgICAgICAvLyBpcyByZWJ1aWxkaW5nIChlLmcuLCBkdXJpbmcgdGVzdCBjbGVhbnVwKS4gTG9nIHRoZSBlcnJvclxuICAgICAgICAgICAgLy8gYnV0IGRvbid0IGNyYXNoIOKAlCB0aGUgbmV4dCBmaWxlIGNoYW5nZSB3aWxsIHRyaWdnZXJcbiAgICAgICAgICAgIC8vIGFub3RoZXIgcmVidWlsZCB3aXRoIHRoZSBjb3JyZWN0IGZpbGUgbGlzdC5cbiAgICAgICAgICAgIGNvbnNvbGUud2FybignV2FybmluZzogV29ya2Zsb3cgcmVidWlsZCBmYWlsZWQ6JywgZXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChuaXRyby5vcHRpb25zLmRldikge1xuICAgICAgICBhZGREYXNoYm9hcmRIYW5kbGVyKG5pdHJvKTtcbiAgICAgIH1cblxuICAgICAgYWRkVmlydHVhbEhhbmRsZXIoXG4gICAgICAgIG5pdHJvLFxuICAgICAgICAnLy53ZWxsLWtub3duL3dvcmtmbG93L3YxL3dlYmhvb2svOnRva2VuJyxcbiAgICAgICAgJ3dvcmtmbG93L3dlYmhvb2subWpzJ1xuICAgICAgKTtcblxuICAgICAgLy8gVjI6IHNpbmdsZSBjb21iaW5lZCBoYW5kbGVyIGZvciBib3RoIHdvcmtmbG93IGFuZCBzdGVwIGV4ZWN1dGlvbi5cbiAgICAgIC8vIFRoZSBzdGVwIHJlZ2lzdHJhdGlvbnMgYXJlIGltcG9ydGVkIGFzIHNpZGUgZWZmZWN0cyBieSB0aGUgY29tYmluZWRcbiAgICAgIC8vIGhhbmRsZXIg4oCUIG5vIHNlcGFyYXRlIHN0ZXAgcm91dGUgbmVlZGVkLlxuICAgICAgYWRkVmlydHVhbEhhbmRsZXIoXG4gICAgICAgIG5pdHJvLFxuICAgICAgICAnLy53ZWxsLWtub3duL3dvcmtmbG93L3YxL2Zsb3cnLFxuICAgICAgICAnd29ya2Zsb3cvd29ya2Zsb3dzLm1qcydcbiAgICAgICk7XG5cbiAgICAgIC8vIE5pdHJvIHYzKyBWZXJjZWwgZGVwbG95OiBjb25maWd1cmUgZnVuY3Rpb24gcnVsZXMgZm9yIHRoZSBjb21iaW5lZFxuICAgICAgLy8gZmxvdyBoYW5kbGVyIHNvIGl0IGdldHMgdGhlIHF1ZXVlIHRyaWdnZXJzICsgbWF4IGR1cmF0aW9uIHRoYXQgdGhlXG4gICAgICAvLyB3b3JrZmxvdyBydW50aW1lIG5lZWRzLiBXb3JrZmxvdy1yZXF1aXJlZCBmaWVsZHMgKGBtYXhEdXJhdGlvbmAsXG4gICAgICAvLyBgZXhwZXJpbWVudGFsVHJpZ2dlcnNgLCBgcnVudGltZWAgd2hlbiBzZXQpIHRha2UgcHJlY2VkZW5jZSBvdmVyXG4gICAgICAvLyB1c2VyLXByb3ZpZGVkIHZhbHVlcyBmb3IgdGhlc2Ugcm91dGVzOyB1bnJlbGF0ZWQgZmllbGRzIHRoZSB1c2VyXG4gICAgICAvLyBzZXRzIChlLmcuIGBtZW1vcnlgKSBwYXNzIHRocm91Z2ggdW50b3VjaGVkLlxuICAgICAgLy9cbiAgICAgIC8vIFBhdHRlcm4ga2V5cyBtdXN0IG1hdGNoIHRoZSByb3V0ZSBwYXR0ZXJucyB0aGUgaGFuZGxlcnMgYXJlXG4gICAgICAvLyByZWdpc3RlcmVkIHdpdGggc28gbml0cm8gcmV1c2VzIHRoZSBzYW1lIGZ1bmN0aW9uIGRpcmVjdG9yeS5cbiAgICAgIC8vIFVzaW5nIGEgYHdlYmhvb2svKipgIGNhdGNoLWFsbCBoZXJlIHdvdWxkIGNyZWF0ZSBhIHNlY29uZFxuICAgICAgLy8gYHdlYmhvb2svWy4uLl0uZnVuY2AgbmV4dCB0byB0aGUgYHdlYmhvb2svW3Rva2VuXS5mdW5jYCB0aGF0XG4gICAgICAvLyBgYWRkVmlydHVhbEhhbmRsZXJgIHByb2R1Y2VzLlxuICAgICAgaWYgKGlzVmVyY2VsRGVwbG95KSB7XG4gICAgICAgIG5pdHJvLm9wdGlvbnMudmVyY2VsID8/PSB7fTtcbiAgICAgICAgbml0cm8ub3B0aW9ucy52ZXJjZWwuZnVuY3Rpb25SdWxlcyA/Pz0ge307XG5cbiAgICAgICAgY29uc3QgcnVudGltZSA9IG5pdHJvLm9wdGlvbnMud29ya2Zsb3c/LnJ1bnRpbWU7XG4gICAgICAgIGNvbnN0IHJ1bGVzID0gbml0cm8ub3B0aW9ucy52ZXJjZWwuZnVuY3Rpb25SdWxlcztcblxuICAgICAgICBjb25zdCBmbG93UGF0aCA9ICcvLndlbGwta25vd24vd29ya2Zsb3cvdjEvZmxvdyc7XG4gICAgICAgIHJ1bGVzW2Zsb3dQYXRoXSA9IHtcbiAgICAgICAgICAuLi5ydWxlc1tmbG93UGF0aF0sXG4gICAgICAgICAgLi4uKHJ1bnRpbWUgJiYgeyBydW50aW1lIH0pLFxuICAgICAgICAgIG1heER1cmF0aW9uOiAnbWF4JyxcbiAgICAgICAgICAvLyBWMiBjb21iaW5lZDogYSBzaW5nbGUgdHJpZ2dlciBjb3ZlcnMgYm90aCBgX193a2Zfd29ya2Zsb3dfKmBcbiAgICAgICAgICAvLyAod29ya2Zsb3cgb3JjaGVzdHJhdGlvbikgYW5kIGBfX3drZl9zdGVwXypgIChzdGVwIGV4ZWN1dGlvbiksXG4gICAgICAgICAgLy8gc2luY2UgdGhlIHNhbWUgaGFuZGxlciBkaXNwYXRjaGVzIGJvdGguXG4gICAgICAgICAgZXhwZXJpbWVudGFsVHJpZ2dlcnM6IFtXT1JLRkxPV19RVUVVRV9UUklHR0VSXSxcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAocnVudGltZSkge1xuICAgICAgICAgIGNvbnN0IHdlYmhvb2tQYXRoID0gJy8ud2VsbC1rbm93bi93b3JrZmxvdy92MS93ZWJob29rLzp0b2tlbic7XG4gICAgICAgICAgcnVsZXNbd2ViaG9va1BhdGhdID0geyAuLi5ydWxlc1t3ZWJob29rUGF0aF0sIHJ1bnRpbWUgfTtcblxuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5XT1JLRkxPV19QVUJMSUNfTUFOSUZFU1QgPT09ICcxJykge1xuICAgICAgICAgICAgY29uc3QgbWFuaWZlc3RQYXRoID0gJy8ud2VsbC1rbm93bi93b3JrZmxvdy92MS9tYW5pZmVzdC5qc29uJztcbiAgICAgICAgICAgIHJ1bGVzW21hbmlmZXN0UGF0aF0gPSB7IC4uLnJ1bGVzW21hbmlmZXN0UGF0aF0sIHJ1bnRpbWUgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gRXhwb3NlIG1hbmlmZXN0IGFzIGEgcHVibGljIEhUVFAgcm91dGUgd2hlbiBXT1JLRkxPV19QVUJMSUNfTUFOSUZFU1Q9MVxuICAgICAgaWYgKHByb2Nlc3MuZW52LldPUktGTE9XX1BVQkxJQ19NQU5JRkVTVCA9PT0gJzEnKSB7XG4gICAgICAgIC8vIFdyaXRlIGEgcGxhY2Vob2xkZXIgbWFuaWZlc3QtZGF0YS5tanMgc28gcm9sbHVwIGNhbiByZXNvbHZlIHRoZVxuICAgICAgICAvLyBpbXBvcnQuIEl0IHdpbGwgYmUgb3ZlcndyaXR0ZW4gd2l0aCB0aGUgcmVhbCBtYW5pZmVzdCBpbiBidWlsZDpiZWZvcmUuXG4gICAgICAgIC8vIFdyaXRlIGEgcGxhY2Vob2xkZXIgaGFuZGxlciBmaWxlIHNvIHJvbGx1cCBjYW4gcmVzb2x2ZSB0aGUgcGF0aFxuICAgICAgICAvLyBkdXJpbmcgcHJvZCBjb21waWxhdGlvbi4gSXQgd2lsbCBiZSBvdmVyd3JpdHRlbiB3aXRoIHRoZSByZWFsXG4gICAgICAgIC8vIG1hbmlmZXN0IGNvbnRlbnQgYnkgd3JpdGVNYW5pZmVzdEhhbmRsZXIoKSBpbiBidWlsZDpiZWZvcmUuXG4gICAgICAgIGlmICghbml0cm8ub3B0aW9ucy5kZXYpIHtcbiAgICAgICAgICBjb25zdCBkaXIgPSBqb2luKG5pdHJvLm9wdGlvbnMuYnVpbGREaXIsICd3b3JrZmxvdycpO1xuICAgICAgICAgIG1rZGlyU3luYyhkaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICAgIGNvbnN0IGhhbmRsZXJQYXRoID0gam9pbihkaXIsICdtYW5pZmVzdC1oYW5kbGVyLm1qcycpO1xuICAgICAgICAgIHdyaXRlRmlsZVN5bmMoXG4gICAgICAgICAgICBoYW5kbGVyUGF0aCxcbiAgICAgICAgICAgICdleHBvcnQgZGVmYXVsdCBhc3luYyAoKSA9PiBuZXcgUmVzcG9uc2UoXCJNYW5pZmVzdCBub3QgZm91bmRcIiwgeyBzdGF0dXM6IDQwNCB9KTtcXG4nXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRNYW5pZmVzdEhhbmRsZXIobml0cm8pO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbn0gc2F0aXNmaWVzIE5pdHJvTW9kdWxlO1xuXG5jb25zdCBEQVNIQk9BUkRfVklSVFVBTF9JRCA9ICcjd29ya2Zsb3cvZGFzaGJvYXJkLWhhbmRsZXInO1xuXG5mdW5jdGlvbiBhZGREYXNoYm9hcmRIYW5kbGVyKG5pdHJvOiBOaXRybykge1xuICBjb25zdCByb3V0ZSA9ICcvX3dvcmtmbG93JztcbiAgbml0cm8ub3B0aW9ucy5oYW5kbGVycy5wdXNoKHsgcm91dGUsIGhhbmRsZXI6IERBU0hCT0FSRF9WSVJUVUFMX0lEIH0pO1xuXG4gIC8vIFJlc29sdmUgYEB3b3JrZmxvdy93ZWIvc2VydmVyYCByZWxhdGl2ZSB0byB0aGlzIG1vZHVsZSBzbyBjb25zdW1lcnMgZG9uJ3RcbiAgLy8gbmVlZCBhIGRpcmVjdCBkZXBlbmRlbmN5IG9uIGBAd29ya2Zsb3cvd2ViYC4gVGhlIHBhdGggaXMgaW5saW5lZCBpbnRvIHRoZVxuICAvLyB2aXJ0dWFsIGhhbmRsZXIgYXMgYSBmaWxlOi8vIFVSTCBzbyBOb2RlIGNhbiBgaW1wb3J0KClgIGl0IGF0IHJ1bnRpbWVcbiAgLy8gcmVnYXJkbGVzcyBvZiB3aGVyZSB0aGUgZ2VuZXJhdGVkIE5pdHJvIGJ1bmRsZSBlbmRzIHVwLlxuICBjb25zdCByZXF1aXJlXyA9IGNyZWF0ZVJlcXVpcmUoaW1wb3J0Lm1ldGEudXJsKTtcbiAgbGV0IHdlYlNlcnZlclVybDogc3RyaW5nO1xuICB0cnkge1xuICAgIHdlYlNlcnZlclVybCA9IHBhdGhUb0ZpbGVVUkwocmVxdWlyZV8ucmVzb2x2ZSgnQHdvcmtmbG93L3dlYi9zZXJ2ZXInKSkuaHJlZjtcbiAgfSBjYXRjaCB7XG4gICAgd2ViU2VydmVyVXJsID0gJ0B3b3JrZmxvdy93ZWIvc2VydmVyJztcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZXJTb3VyY2UgPSAvKiBqcyAqLyBgXG4gICAgY29uc3QgX193b3JrZmxvd1dlYlNlcnZlclVybCA9ICR7SlNPTi5zdHJpbmdpZnkod2ViU2VydmVyVXJsKX07XG4gICAgbGV0IHNlcnZlclByb21pc2UgPSBudWxsO1xuICAgIGFzeW5jIGZ1bmN0aW9uIGdldERhc2hib2FyZFVybCgpIHtcbiAgICAgIGlmICghc2VydmVyUHJvbWlzZSkge1xuICAgICAgICBzZXJ2ZXJQcm9taXNlID0gKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCB7IHN0YXJ0U2VydmVyIH0gPSBhd2FpdCBpbXBvcnQoLyogQHZpdGUtaWdub3JlICovIC8qIHdlYnBhY2tJZ25vcmU6IHRydWUgKi8gX193b3JrZmxvd1dlYlNlcnZlclVybCk7XG4gICAgICAgICAgY29uc3Qgc2VydmVyID0gYXdhaXQgc3RhcnRTZXJ2ZXIoMCk7XG4gICAgICAgICAgY29uc3QgYWRkcmVzcyA9IHNlcnZlci5hZGRyZXNzKCk7XG4gICAgICAgICAgY29uc3QgcG9ydCA9IHR5cGVvZiBhZGRyZXNzID09PSAnb2JqZWN0JyAmJiBhZGRyZXNzID8gYWRkcmVzcy5wb3J0IDogMzQ1NjtcbiAgICAgICAgICByZXR1cm4gJ2h0dHA6Ly9sb2NhbGhvc3Q6JyArIHBvcnQ7XG4gICAgICAgIH0pKCkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgc2VydmVyUHJvbWlzZSA9IG51bGw7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNlcnZlclByb21pc2U7XG4gICAgfVxuICBgO1xuXG4gIGlmICghbml0cm8ucm91dGluZykge1xuICAgIG5pdHJvLm9wdGlvbnMudmlydHVhbFtEQVNIQk9BUkRfVklSVFVBTF9JRF0gPSAvKiBqcyAqLyBgXG4gICAgICBpbXBvcnQgeyBmcm9tV2ViSGFuZGxlciB9IGZyb20gXCJoM1wiO1xuICAgICAgJHtoYW5kbGVyU291cmNlfVxuICAgICAgZXhwb3J0IGRlZmF1bHQgZnJvbVdlYkhhbmRsZXIoYXN5bmMgKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHVybCA9IGF3YWl0IGdldERhc2hib2FyZFVybCgpO1xuICAgICAgICAgIHJldHVybiBSZXNwb25zZS5yZWRpcmVjdCh1cmwsIDMwMik7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIHN0YXJ0IHdvcmtmbG93IGRhc2hib2FyZDonLCBlcnJvcik7XG4gICAgICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZSgnRmFpbGVkIHRvIHN0YXJ0IHdvcmtmbG93IGRhc2hib2FyZDogJyArIGVycm9yLm1lc3NhZ2UsIHsgc3RhdHVzOiA1MDAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIGA7XG4gIH0gZWxzZSB7XG4gICAgbml0cm8ub3B0aW9ucy52aXJ0dWFsW0RBU0hCT0FSRF9WSVJUVUFMX0lEXSA9IC8qIGpzICovIGBcbiAgICAgICR7aGFuZGxlclNvdXJjZX1cbiAgICAgIGV4cG9ydCBkZWZhdWx0IGFzeW5jICgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB1cmwgPSBhd2FpdCBnZXREYXNoYm9hcmRVcmwoKTtcbiAgICAgICAgICByZXR1cm4gUmVzcG9uc2UucmVkaXJlY3QodXJsLCAzMDIpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBzdGFydCB3b3JrZmxvdyBkYXNoYm9hcmQ6JywgZXJyb3IpO1xuICAgICAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UoJ0ZhaWxlZCB0byBzdGFydCB3b3JrZmxvdyBkYXNoYm9hcmQ6ICcgKyBlcnJvci5tZXNzYWdlLCB7IHN0YXR1czogNTAwIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIGA7XG4gIH1cbn1cblxudHlwZSBWaXJ0dWFsSGFuZGxlclBhdGggPSAnd29ya2Zsb3cvd2ViaG9vay5tanMnIHwgJ3dvcmtmbG93L3dvcmtmbG93cy5tanMnO1xuXG5mdW5jdGlvbiBnZXRTdGF0aWNJbXBvcnRTcGVjaWZpZXIoaWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmIChpZC5zdGFydHNXaXRoKCdmaWxlOi8vJykpIHtcbiAgICByZXR1cm4gaWQ7XG4gIH1cbiAgaWYgKGlkLnN0YXJ0c1dpdGgoJy8nKSB8fCAvXltBLVphLXpdOltcXFxcL10vLnRlc3QoaWQpKSB7XG4gICAgcmV0dXJuIHBhdGhUb0ZpbGVVUkwoaWQpLmhyZWY7XG4gIH1cbiAgcmV0dXJuIGlkO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVEZXZXb3JsZFRhcmdldFNvdXJjZShuaXRybzogTml0cm8pOiBzdHJpbmcge1xuICBjb25zdCB3b3JrZmxvd1RhcmdldFdvcmxkQWxpYXMgPVxuICAgIG5pdHJvLm9wdGlvbnMuYWxpYXNbV09SS0ZMT1dfV09STERfVEFSR0VUX01PRFVMRV07XG4gIGlmICh0eXBlb2Ygd29ya2Zsb3dUYXJnZXRXb3JsZEFsaWFzICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBNaXNzaW5nICR7V09SS0ZMT1dfV09STERfVEFSR0VUX01PRFVMRX0gYWxpYXMgZm9yIE5pdHJvIGRldiB3b3JrZmxvdyBoYW5kbGVyYFxuICAgICk7XG4gIH1cblxuICBjb25zdCB3b3JrZmxvd1RhcmdldFdvcmxkSW1wb3J0ID0gSlNPTi5zdHJpbmdpZnkoXG4gICAgZ2V0U3RhdGljSW1wb3J0U3BlY2lmaWVyKHdvcmtmbG93VGFyZ2V0V29ybGRBbGlhcylcbiAgKTtcbiAgY29uc3Qgd29ya2Zsb3dDb3JlUnVudGltZUltcG9ydCA9IEpTT04uc3RyaW5naWZ5KFxuICAgIGdldFN0YXRpY0ltcG9ydFNwZWNpZmllcihcbiAgICAgIHJlc29sdmVXb3JrZmxvd0NvcmVSdW50aW1lQWxpYXMoeyB3b3JraW5nRGlyOiBuaXRyby5vcHRpb25zLnJvb3REaXIgfSlcbiAgICApXG4gICk7XG5cbiAgcmV0dXJuIC8qIGpzICovIGBcbiAgICAgIGltcG9ydCB7XG4gICAgICAgIGNyZWF0ZVdvcmxkRnJvbU1vZHVsZSBhcyBfX3dvcmtmbG93Q3JlYXRlV29ybGRGcm9tTW9kdWxlLFxuICAgICAgICBzZXRXb3JsZCBhcyBfX3dvcmtmbG93U2V0V29ybGQsXG4gICAgICB9IGZyb20gJHt3b3JrZmxvd0NvcmVSdW50aW1lSW1wb3J0fTtcbiAgICAgIGltcG9ydCAqIGFzIF9fd29ya2Zsb3dUYXJnZXRXb3JsZCBmcm9tICR7d29ya2Zsb3dUYXJnZXRXb3JsZEltcG9ydH07XG5cbiAgICAgIGxldCBfX3dvcmtmbG93V29ybGRQcm9taXNlID0gbnVsbDtcblxuICAgICAgYXN5bmMgZnVuY3Rpb24gZW5zdXJlV29ya2Zsb3dXb3JsZCgpIHtcbiAgICAgICAgaWYgKCFfX3dvcmtmbG93V29ybGRQcm9taXNlKSB7XG4gICAgICAgICAgX193b3JrZmxvd1dvcmxkUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShcbiAgICAgICAgICAgIF9fd29ya2Zsb3dDcmVhdGVXb3JsZEZyb21Nb2R1bGUoX193b3JrZmxvd1RhcmdldFdvcmxkKVxuICAgICAgICAgICkudGhlbihfX3dvcmtmbG93U2V0V29ybGQpO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IF9fd29ya2Zsb3dXb3JsZFByb21pc2U7XG4gICAgICB9XG4gIGA7XG59XG5cbmZ1bmN0aW9uIGFkZFZpcnR1YWxIYW5kbGVyKFxuICBuaXRybzogTml0cm8sXG4gIHJvdXRlOiBzdHJpbmcsXG4gIGJ1aWxkUGF0aDogVmlydHVhbEhhbmRsZXJQYXRoXG4pIHtcbiAgbml0cm8ub3B0aW9ucy5oYW5kbGVycy5wdXNoKHtcbiAgICByb3V0ZSxcbiAgICBoYW5kbGVyOiBgIyR7YnVpbGRQYXRofWAsXG4gIH0pO1xuICBjb25zdCBoYW5kbGVySW1wb3J0UGF0aCA9IEpTT04uc3RyaW5naWZ5KFxuICAgIGpvaW4obml0cm8ub3B0aW9ucy5idWlsZERpciwgYnVpbGRQYXRoKVxuICApO1xuICBjb25zdCBzdGVwc0ltcG9ydFBhdGggPSBKU09OLnN0cmluZ2lmeShcbiAgICBqb2luKG5pdHJvLm9wdGlvbnMuYnVpbGREaXIsICd3b3JrZmxvdy9zdGVwcy5tanMnKVxuICApO1xuICBjb25zdCBwcmVsb2FkU3RlcHM6IFJlY29yZDxWaXJ0dWFsSGFuZGxlclBhdGgsIHN0cmluZz4gPSB7XG4gICAgJ3dvcmtmbG93L3dlYmhvb2subWpzJzogJycsXG4gICAgJ3dvcmtmbG93L3dvcmtmbG93cy5tanMnOiBgYXdhaXQgaW1wb3J0KC8qIEB2aXRlLWlnbm9yZSAqLyBwYXRoVG9GaWxlVVJMKCR7c3RlcHNJbXBvcnRQYXRofSkuaHJlZiArIFwiP3Q9XCIgKyB2ZXJzaW9uKTtgLFxuICB9O1xuXG4gIGlmIChuaXRyby5vcHRpb25zLmRldikge1xuICAgIGNvbnN0IGRldldvcmxkVGFyZ2V0U291cmNlID0gY3JlYXRlRGV2V29ybGRUYXJnZXRTb3VyY2Uobml0cm8pO1xuICAgIC8vIERldiBtb2RlOiBsb2FkIGdlbmVyYXRlZCB3b3JrZmxvdyBidW5kbGVzIGZyb20gZGlzayBhdCByZXF1ZXN0IHRpbWUuXG4gICAgLy8gVGhpcyBrZWVwcyBgLm5pdHJvL3dvcmtmbG93LyoubWpzYCBvdXQgb2YgTml0cm8ncyBvd24gYnVuZGxlIGdyYXBoLFxuICAgIC8vIHdoaWNoIGF2b2lkcyByZWJ1aWxkIGxvb3BzIGFuZCBzdGFsZSBkZXBlbmRlbmN5IGdyYXBocyBkdXJpbmcgSE1SLlxuICAgIC8vIENhY2hlLWJ1c3QgYnkgZmlsZSBtdGltZSBzbyBlYWNoIHN1Y2Nlc3NmdWwgcmVidWlsZCBsb2FkcyBmcmVzaCBjb2RlLlxuICAgIGlmICghbml0cm8ucm91dGluZykge1xuICAgICAgbml0cm8ub3B0aW9ucy52aXJ0dWFsW2AjJHtidWlsZFBhdGh9YF0gPSAvKiBqcyAqLyBgXG4gICAgICBpbXBvcnQgeyBmcm9tV2ViSGFuZGxlciB9IGZyb20gXCJoM1wiO1xuICAgICAgaW1wb3J0IHsgc3RhdFN5bmMgfSBmcm9tIFwibm9kZTpmc1wiO1xuICAgICAgaW1wb3J0IHsgcGF0aFRvRmlsZVVSTCB9IGZyb20gXCJub2RlOnVybFwiO1xuICAgICAgJHtkZXZXb3JsZFRhcmdldFNvdXJjZX1cblxuICAgICAgY29uc3QgaGFuZGxlclBhdGggPSAke2hhbmRsZXJJbXBvcnRQYXRofTtcbiAgICAgIGxldCBjdXJyZW50VmVyc2lvbiA9IFwiXCI7XG4gICAgICBsZXQgY3VycmVudEltcG9ydFBhdGggPSBcIlwiO1xuXG4gICAgICBhc3luYyBmdW5jdGlvbiBsb2FkUE9TVCgpIHtcbiAgICAgICAgYXdhaXQgZW5zdXJlV29ya2Zsb3dXb3JsZCgpO1xuICAgICAgICBjb25zdCB2ZXJzaW9uID0gU3RyaW5nKHN0YXRTeW5jKGhhbmRsZXJQYXRoKS5tdGltZU1zKTtcbiAgICAgICAgaWYgKHZlcnNpb24gIT09IGN1cnJlbnRWZXJzaW9uKSB7XG4gICAgICAgICAgY3VycmVudFZlcnNpb24gPSB2ZXJzaW9uO1xuICAgICAgICAgIGN1cnJlbnRJbXBvcnRQYXRoID0gcGF0aFRvRmlsZVVSTChoYW5kbGVyUGF0aCkuaHJlZiArIFwiP3Q9XCIgKyB2ZXJzaW9uO1xuICAgICAgICAgICR7cHJlbG9hZFN0ZXBzW2J1aWxkUGF0aF19XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChhd2FpdCBpbXBvcnQoY3VycmVudEltcG9ydFBhdGgpKS5QT1NUO1xuICAgICAgfVxuXG4gICAgICBleHBvcnQgZGVmYXVsdCBmcm9tV2ViSGFuZGxlcihhc3luYyAocmVxdWVzdCwgY29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCBQT1NUID0gYXdhaXQgbG9hZFBPU1QoKTtcbiAgICAgICAgcmV0dXJuIFBPU1QocmVxdWVzdCwgY29udGV4dCk7XG4gICAgICB9KTtcbiAgICBgO1xuICAgIH0gZWxzZSB7XG4gICAgICBuaXRyby5vcHRpb25zLnZpcnR1YWxbYCMke2J1aWxkUGF0aH1gXSA9IC8qIGpzICovIGBcbiAgICAgIGltcG9ydCB7IHN0YXRTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcbiAgICAgIGltcG9ydCB7IHBhdGhUb0ZpbGVVUkwgfSBmcm9tIFwibm9kZTp1cmxcIjtcbiAgICAgICR7ZGV2V29ybGRUYXJnZXRTb3VyY2V9XG5cbiAgICAgIGNvbnN0IGhhbmRsZXJQYXRoID0gJHtoYW5kbGVySW1wb3J0UGF0aH07XG4gICAgICBsZXQgY3VycmVudFZlcnNpb24gPSBcIlwiO1xuICAgICAgbGV0IGN1cnJlbnRJbXBvcnRQYXRoID0gXCJcIjtcblxuICAgICAgYXN5bmMgZnVuY3Rpb24gbG9hZFBPU1QoKSB7XG4gICAgICAgIGF3YWl0IGVuc3VyZVdvcmtmbG93V29ybGQoKTtcbiAgICAgICAgY29uc3QgdmVyc2lvbiA9IFN0cmluZyhzdGF0U3luYyhoYW5kbGVyUGF0aCkubXRpbWVNcyk7XG4gICAgICAgIGlmICh2ZXJzaW9uICE9PSBjdXJyZW50VmVyc2lvbikge1xuICAgICAgICAgIGN1cnJlbnRWZXJzaW9uID0gdmVyc2lvbjtcbiAgICAgICAgICBjdXJyZW50SW1wb3J0UGF0aCA9IHBhdGhUb0ZpbGVVUkwoaGFuZGxlclBhdGgpLmhyZWYgKyBcIj90PVwiICsgdmVyc2lvbjtcbiAgICAgICAgICAke3ByZWxvYWRTdGVwc1tidWlsZFBhdGhdfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoYXdhaXQgaW1wb3J0KGN1cnJlbnRJbXBvcnRQYXRoKSkuUE9TVDtcbiAgICAgIH1cblxuICAgICAgZXhwb3J0IGRlZmF1bHQgYXN5bmMgKHsgcmVxIH0pID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBQT1NUID0gYXdhaXQgbG9hZFBPU1QoKTtcbiAgICAgICAgICByZXR1cm4gYXdhaXQgUE9TVChyZXEpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0hhbmRsZXIgZXJyb3I6JywgZXJyb3IpO1xuICAgICAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UoJ0ludGVybmFsIFNlcnZlciBFcnJvcicsIHsgc3RhdHVzOiA1MDAgfSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgYDtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gS2VlcCBhIGJhcmUgaW1wb3J0IGFsb25nc2lkZSBgUE9TVGA6IGluIE51eHQgKyBOaXRybyBwcm9kdWN0aW9uIGJ1aWxkc1xuICAvLyB1c2luZyBgQHdvcmtmbG93L251eHRgLCBpbXBvcnRpbmcgb25seSBgUE9TVGAgY291bGQgZHJvcCB0aGUgZ2VuZXJhdGVkXG4gIC8vIHN0ZXAgYnVuZGxlJ3MgdG9wLWxldmVsIHJlZ2lzdHJhdGlvbnMsIHNvIHRoZSBoYW5kbGVyIGxvYWRlZCBidXQgc3RlcHNcbiAgLy8gd2VyZSBtaXNzaW5nIGF0IHJ1bnRpbWUuXG5cbiAgaWYgKCFuaXRyby5yb3V0aW5nKSB7XG4gICAgLy8gTml0cm8gdjIgKGxlZ2FjeSlcbiAgICBuaXRyby5vcHRpb25zLnZpcnR1YWxbYCMke2J1aWxkUGF0aH1gXSA9IC8qIGpzICovIGBcbiAgICBpbXBvcnQgJHtoYW5kbGVySW1wb3J0UGF0aH07XG4gICAgaW1wb3J0IHsgZnJvbVdlYkhhbmRsZXIgfSBmcm9tIFwiaDNcIjtcbiAgICBpbXBvcnQgeyBQT1NUIH0gZnJvbSAke2hhbmRsZXJJbXBvcnRQYXRofTtcbiAgICBleHBvcnQgZGVmYXVsdCBmcm9tV2ViSGFuZGxlcihQT1NUKTtcbiAgYDtcbiAgfSBlbHNlIHtcbiAgICAvLyBOaXRybyB2MysgKG5hdGl2ZSB3ZWIgaGFuZGxlcnMpXG4gICAgbml0cm8ub3B0aW9ucy52aXJ0dWFsW2AjJHtidWlsZFBhdGh9YF0gPSAvKiBqcyAqLyBgXG4gICAgaW1wb3J0ICR7aGFuZGxlckltcG9ydFBhdGh9O1xuICAgIGltcG9ydCB7IFBPU1QgfSBmcm9tICR7aGFuZGxlckltcG9ydFBhdGh9O1xuICAgIGV4cG9ydCBkZWZhdWx0IGFzeW5jICh7IHJlcSB9KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gYXdhaXQgUE9TVChyZXEpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignSGFuZGxlciBlcnJvcjonLCBlcnJvcik7XG4gICAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UoJ0ludGVybmFsIFNlcnZlciBFcnJvcicsIHsgc3RhdHVzOiA1MDAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgYDtcbiAgfVxufVxuXG5jb25zdCBNQU5JRkVTVF9WSVJUVUFMX0lEID0gJyN3b3JrZmxvdy9tYW5pZmVzdC1oYW5kbGVyJztcblxuZnVuY3Rpb24gYWRkTWFuaWZlc3RIYW5kbGVyKG5pdHJvOiBOaXRybykge1xuICBjb25zdCByb3V0ZSA9ICcvLndlbGwta25vd24vd29ya2Zsb3cvdjEvbWFuaWZlc3QuanNvbic7XG4gIGNvbnN0IG1hbmlmZXN0UGF0aCA9IGpvaW4obml0cm8ub3B0aW9ucy5idWlsZERpciwgJ3dvcmtmbG93L21hbmlmZXN0Lmpzb24nKTtcbiAgY29uc3QgaGFuZGxlclBhdGggPSBqb2luKFxuICAgIG5pdHJvLm9wdGlvbnMuYnVpbGREaXIsXG4gICAgJ3dvcmtmbG93L21hbmlmZXN0LWhhbmRsZXIubWpzJ1xuICApO1xuXG4gIGlmIChuaXRyby5vcHRpb25zLmRldikge1xuICAgIC8vIERldiBtb2RlOiB1c2UgYSB2aXJ0dWFsIGhhbmRsZXIgdGhhdCByZWFkcyB0aGUgbWFuaWZlc3QgZnJvbSBkaXNrIGF0XG4gICAgLy8gcmVxdWVzdCB0aW1lLiBUaGUgYWJzb2x1dGUgcGF0aCBpcyB2YWxpZCBiZWNhdXNlIHdlJ3JlIG9uIHRoZSBidWlsZCBtYWNoaW5lLlxuICAgIG5pdHJvLm9wdGlvbnMuaGFuZGxlcnMucHVzaCh7IHJvdXRlLCBoYW5kbGVyOiBNQU5JRkVTVF9WSVJUVUFMX0lEIH0pO1xuICAgIG5pdHJvLm9wdGlvbnMudmlydHVhbFtNQU5JRkVTVF9WSVJUVUFMX0lEXSA9ICFuaXRyby5yb3V0aW5nXG4gICAgICA/IC8qIGpzICovIGBcbiAgICAgIGltcG9ydCB7IGZyb21XZWJIYW5kbGVyIH0gZnJvbSBcImgzXCI7XG4gICAgICBpbXBvcnQgeyByZWFkRmlsZVN5bmMgfSBmcm9tIFwibm9kZTpmc1wiO1xuICAgICAgZnVuY3Rpb24gR0VUKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IG1hbmlmZXN0ID0gcmVhZEZpbGVTeW5jKCR7SlNPTi5zdHJpbmdpZnkobWFuaWZlc3RQYXRoKX0sIFwidXRmLThcIik7XG4gICAgICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZShtYW5pZmVzdCwge1xuICAgICAgICAgICAgaGVhZGVyczogeyBcImNvbnRlbnQtdHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKFwiTWFuaWZlc3Qgbm90IGZvdW5kXCIsIHsgc3RhdHVzOiA0MDQgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGV4cG9ydCBkZWZhdWx0IGZyb21XZWJIYW5kbGVyKEdFVCk7XG4gICAgYFxuICAgICAgOiAvKiBqcyAqLyBgXG4gICAgICBpbXBvcnQgeyByZWFkRmlsZVN5bmMgfSBmcm9tIFwibm9kZTpmc1wiO1xuICAgICAgZXhwb3J0IGRlZmF1bHQgYXN5bmMgKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IG1hbmlmZXN0ID0gcmVhZEZpbGVTeW5jKCR7SlNPTi5zdHJpbmdpZnkobWFuaWZlc3RQYXRoKX0sIFwidXRmLThcIik7XG4gICAgICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZShtYW5pZmVzdCwge1xuICAgICAgICAgICAgaGVhZGVyczogeyBcImNvbnRlbnQtdHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKFwiTWFuaWZlc3Qgbm90IGZvdW5kXCIsIHsgc3RhdHVzOiA0MDQgfSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgYDtcbiAgfSBlbHNlIHtcbiAgICAvLyBQcm9kIG1vZGU6IHJlZ2lzdGVyIGEgcGh5c2ljYWwgaGFuZGxlciBmaWxlIHRoYXQgd2lsbCBiZSB3cml0dGVuIGJ5XG4gICAgLy8gd3JpdGVNYW5pZmVzdEhhbmRsZXIoKSBhZnRlciB0aGUgYnVpbGRlciBnZW5lcmF0ZXMgdGhlIG1hbmlmZXN0LlxuICAgIC8vIFRoaXMgZmlsZSBpcyBidW5kbGVkIGJ5IHJvbGx1cCBpbnRvIHRoZSBjb21waWxlZCBvdXRwdXQuXG4gICAgbml0cm8ub3B0aW9ucy5oYW5kbGVycy5wdXNoKHsgcm91dGUsIGhhbmRsZXI6IGhhbmRsZXJQYXRoIH0pO1xuICB9XG59XG5cbi8qKlxuICogV3JpdGVzIGEgcGh5c2ljYWwgbWFuaWZlc3QgaGFuZGxlciBmaWxlIHdpdGggdGhlIG1hbmlmZXN0IGNvbnRlbnQgaW5saW5lZC5cbiAqIE11c3QgYmUgY2FsbGVkIGFmdGVyIHRoZSBidWlsZGVyIGdlbmVyYXRlcyB0aGUgbWFuaWZlc3QgKGR1cmluZyBidWlsZDpiZWZvcmUpXG4gKiBhbmQgYmVmb3JlIE5pdHJvIGNvbXBpbGVzIHRoZSBidW5kbGUgd2l0aCByb2xsdXAuXG4gKi9cbmZ1bmN0aW9uIHdyaXRlTWFuaWZlc3RIYW5kbGVyKG5pdHJvOiBOaXRybykge1xuICBjb25zdCBtYW5pZmVzdFBhdGggPSBqb2luKG5pdHJvLm9wdGlvbnMuYnVpbGREaXIsICd3b3JrZmxvdy9tYW5pZmVzdC5qc29uJyk7XG4gIGNvbnN0IGhhbmRsZXJQYXRoID0gam9pbihcbiAgICBuaXRyby5vcHRpb25zLmJ1aWxkRGlyLFxuICAgICd3b3JrZmxvdy9tYW5pZmVzdC1oYW5kbGVyLm1qcydcbiAgKTtcbiAgY29uc3QgZGlyID0gam9pbihuaXRyby5vcHRpb25zLmJ1aWxkRGlyLCAnd29ya2Zsb3cnKTtcbiAgbWtkaXJTeW5jKGRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBtYW5pZmVzdENvbnRlbnQgPSByZWFkRmlsZVN5bmMobWFuaWZlc3RQYXRoLCAndXRmLTgnKTtcbiAgICBKU09OLnBhcnNlKG1hbmlmZXN0Q29udGVudCk7IC8vIHZhbGlkYXRlXG5cbiAgICBjb25zdCBoYW5kbGVyQ29kZSA9ICFuaXRyby5yb3V0aW5nXG4gICAgICA/IGBpbXBvcnQgeyBmcm9tV2ViSGFuZGxlciB9IGZyb20gXCJoM1wiO1xuY29uc3QgbWFuaWZlc3QgPSAke0pTT04uc3RyaW5naWZ5KG1hbmlmZXN0Q29udGVudCl9O1xuZXhwb3J0IGRlZmF1bHQgZnJvbVdlYkhhbmRsZXIoKCkgPT4gbmV3IFJlc3BvbnNlKG1hbmlmZXN0LCB7XG4gIGhlYWRlcnM6IHsgXCJjb250ZW50LXR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIgfSxcbn0pKTtcbmBcbiAgICAgIDogYGNvbnN0IG1hbmlmZXN0ID0gJHtKU09OLnN0cmluZ2lmeShtYW5pZmVzdENvbnRlbnQpfTtcbmV4cG9ydCBkZWZhdWx0IGFzeW5jICgpID0+IG5ldyBSZXNwb25zZShtYW5pZmVzdCwge1xuICBoZWFkZXJzOiB7IFwiY29udGVudC10eXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiIH0sXG59KTtcbmA7XG4gICAgd3JpdGVGaWxlU3luYyhoYW5kbGVyUGF0aCwgaGFuZGxlckNvZGUpO1xuICB9IGNhdGNoIHtcbiAgICAvLyBXcml0ZSBhIDQwNCBmYWxsYmFjayBoYW5kbGVyXG4gICAgY29uc3QgZmFsbGJhY2sgPSAhbml0cm8ucm91dGluZ1xuICAgICAgPyBgaW1wb3J0IHsgZnJvbVdlYkhhbmRsZXIgfSBmcm9tIFwiaDNcIjtcbmV4cG9ydCBkZWZhdWx0IGZyb21XZWJIYW5kbGVyKCgpID0+IG5ldyBSZXNwb25zZShcIk1hbmlmZXN0IG5vdCBmb3VuZFwiLCB7IHN0YXR1czogNDA0IH0pKTtcbmBcbiAgICAgIDogYGV4cG9ydCBkZWZhdWx0IGFzeW5jICgpID0+IG5ldyBSZXNwb25zZShcIk1hbmlmZXN0IG5vdCBmb3VuZFwiLCB7IHN0YXR1czogNDA0IH0pO1xuYDtcbiAgICB3cml0ZUZpbGVTeW5jKGhhbmRsZXJQYXRoLCBmYWxsYmFjayk7XG4gIH1cbn1cbiJdfQ==
|
package/dist/vite.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vite.d.ts","sourceRoot":"","sources":["../src/vite.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"vite.d.ts","sourceRoot":"","sources":["../src/vite.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,MAAM,EAAmB,MAAM,MAAM,CAAC;AAEpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGhD,wBAAgB,QAAQ,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,MAAM,EAAE,CAkH1D"}
|
package/dist/vite.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createBuildQueue } from '@workflow/builders';
|
|
1
|
+
import { createBuildQueue, ensureWorkflowTargetWorldEnv, resolveWorkflowTargetWorldAlias, WORKFLOW_OPTIONAL_PG_NATIVE_ALIAS, WORKFLOW_WORLD_TARGET_MODULE, } from '@workflow/builders';
|
|
2
2
|
import { workflowTransformPlugin } from '@workflow/rollup';
|
|
3
3
|
import { workflowHotUpdatePlugin } from '@workflow/vite';
|
|
4
4
|
import { join } from 'pathe';
|
|
@@ -12,13 +12,43 @@ export function workflow(options) {
|
|
|
12
12
|
// The exclusion path is set during nitro setup, so we need to defer plugin creation
|
|
13
13
|
const lazyTransformPlugin = {
|
|
14
14
|
name: 'workflow:transform',
|
|
15
|
-
|
|
15
|
+
config() {
|
|
16
|
+
const workflowTargetWorld = ensureWorkflowTargetWorldEnv();
|
|
17
|
+
const workflowTargetWorldAlias = resolveWorkflowTargetWorldAlias({
|
|
18
|
+
workingDir: process.cwd(),
|
|
19
|
+
targetWorld: workflowTargetWorld,
|
|
20
|
+
});
|
|
21
|
+
return {
|
|
22
|
+
define: {
|
|
23
|
+
'process.env.WORKFLOW_TARGET_WORLD': JSON.stringify(workflowTargetWorld),
|
|
24
|
+
},
|
|
25
|
+
resolve: {
|
|
26
|
+
alias: {
|
|
27
|
+
[WORKFLOW_WORLD_TARGET_MODULE]: workflowTargetWorldAlias,
|
|
28
|
+
'pg-native': WORKFLOW_OPTIONAL_PG_NATIVE_ALIAS,
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
},
|
|
33
|
+
async resolveId(source, importer, options) {
|
|
34
|
+
if (source !== WORKFLOW_WORLD_TARGET_MODULE) {
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
const workflowTargetWorld = ensureWorkflowTargetWorldEnv();
|
|
38
|
+
const resolved = await this.resolve(workflowTargetWorld, importer, {
|
|
39
|
+
...options,
|
|
40
|
+
skipSelf: true,
|
|
41
|
+
});
|
|
42
|
+
return resolved ?? { id: workflowTargetWorld, external: true };
|
|
43
|
+
},
|
|
44
|
+
transform(code, id, options) {
|
|
16
45
|
// Delegate to the actual transform plugin with exclusion
|
|
17
46
|
// workflowBuildDir is set during nitro setup before transforms run
|
|
18
47
|
const plugin = workflowTransformPlugin({
|
|
19
48
|
exclude: workflowBuildDir ? [workflowBuildDir] : [],
|
|
20
49
|
});
|
|
21
|
-
|
|
50
|
+
const transform = plugin.transform;
|
|
51
|
+
return transform?.call(this, code, id, options);
|
|
22
52
|
},
|
|
23
53
|
};
|
|
24
54
|
return [
|
|
@@ -75,4 +105,4 @@ export function workflow(options) {
|
|
|
75
105
|
}),
|
|
76
106
|
];
|
|
77
107
|
}
|
|
78
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidml0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy92aXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3RELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzNELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3pELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFFN0IsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU3QyxPQUFPLFdBQVcsTUFBTSxZQUFZLENBQUM7QUFFckMsTUFBTSxVQUFVLFFBQVEsQ0FBQyxPQUF1QjtJQUM5QyxJQUFJLE9BQXFCLENBQUM7SUFDMUIsSUFBSSxnQkFBd0IsQ0FBQztJQUM3QixNQUFNLE9BQU8sR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO0lBRW5DLDRFQUE0RTtJQUM1RSxvRkFBb0Y7SUFDcEYsTUFBTSxtQkFBbUIsR0FBVztRQUNsQyxJQUFJLEVBQUUsb0JBQW9CO1FBQzFCLFNBQVMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNoQix5REFBeUQ7WUFDekQsbUVBQW1FO1lBQ25FLE1BQU0sTUFBTSxHQUFHLHVCQUF1QixDQUFDO2dCQUNyQyxPQUFPLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTthQUNwRCxDQUFDLENBQUM7WUFDSCxPQUFRLE1BQU0sQ0FBQyxTQUFzQixFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzlELENBQUM7S0FDRixDQUFDO0lBRUYsT0FBTztRQUNMLG1CQUFtQjtRQUNuQjtZQUNFLElBQUksRUFBRSxnQkFBZ0I7WUFDdEIsS0FBSyxFQUFFO2dCQUNMLEtBQUssRUFBRSxDQUFDLEtBQVksRUFBRSxFQUFFO29CQUN0QixxREFBcUQ7b0JBQ3JELGdCQUFnQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztvQkFDNUQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEdBQUc7d0JBQ3ZCLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRO3dCQUN6QixHQUFHLE9BQU87d0JBQ1YsS0FBSyxFQUFFLElBQUk7cUJBQ1osQ0FBQztvQkFDRixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7d0JBQ3RCLE9BQU8sR0FBRyxJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDcEMsQ0FBQztvQkFDRCxPQUFPLFdBQVcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2xDLENBQUM7YUFDRjtZQUNELGdHQUFnRztZQUNoRyw4RkFBOEY7WUFDOUYsZUFBZSxDQUFDLE1BQU07Z0JBQ3BCLGlGQUFpRjtnQkFDakYsT0FBTyxHQUFHLEVBQUU7b0JBQ1YsTUFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFO3dCQUN4QyxzQ0FBc0M7d0JBQ3RDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQywyQkFBMkIsQ0FBQyxFQUFFLENBQUM7NEJBQ3RELE9BQU8sSUFBSSxFQUFFLENBQUM7d0JBQ2hCLENBQUM7d0JBRUQsdURBQXVEO3dCQUN2RCxNQUFNLGlCQUFpQixHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUM7d0JBQ3hDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsVUFBNEIsR0FBRyxJQUFXOzRCQUN4RCxNQUFNLFVBQVUsR0FBRyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDOzRCQUUvRCw0RUFBNEU7NEJBQzVFLDBEQUEwRDs0QkFDMUQsc0VBQXNFOzRCQUN0RSxJQUFJLFVBQVUsS0FBSyxHQUFHLEVBQUUsQ0FBQztnQ0FDdkIsMERBQTBEO2dDQUMxRCxHQUFHLENBQUMsU0FBUyxDQUFDLGdCQUFnQixFQUFFLEdBQUcsQ0FBQyxDQUFDOzRCQUN2QyxDQUFDOzRCQUVELGdEQUFnRDs0QkFDaEQsT0FBTyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO3dCQUM3QyxDQUFRLENBQUM7d0JBRVQsSUFBSSxFQUFFLENBQUM7b0JBQ1QsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDO1lBQ0osQ0FBQztTQUNGO1FBQ0QsdUJBQXVCLENBQUM7WUFDdEIsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU87WUFDdEIsT0FBTztTQUNSLENBQUM7S0FDSCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUJ1aWxkUXVldWUgfSBmcm9tICdAd29ya2Zsb3cvYnVpbGRlcnMnO1xuaW1wb3J0IHsgd29ya2Zsb3dUcmFuc2Zvcm1QbHVnaW4gfSBmcm9tICdAd29ya2Zsb3cvcm9sbHVwJztcbmltcG9ydCB7IHdvcmtmbG93SG90VXBkYXRlUGx1Z2luIH0gZnJvbSAnQHdvcmtmbG93L3ZpdGUnO1xuaW1wb3J0IHR5cGUgeyBOaXRybyB9IGZyb20gJ25pdHJvL3R5cGVzJztcbmltcG9ydCB0eXBlIHt9IGZyb20gJ25pdHJvL3ZpdGUnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGhlJztcbmltcG9ydCB0eXBlIHsgUGx1Z2luIH0gZnJvbSAndml0ZSc7XG5pbXBvcnQgeyBMb2NhbEJ1aWxkZXIgfSBmcm9tICcuL2J1aWxkZXJzLmpzJztcbmltcG9ydCB0eXBlIHsgTW9kdWxlT3B0aW9ucyB9IGZyb20gJy4vaW5kZXguanMnO1xuaW1wb3J0IG5pdHJvTW9kdWxlIGZyb20gJy4vaW5kZXguanMnO1xuXG5leHBvcnQgZnVuY3Rpb24gd29ya2Zsb3cob3B0aW9ucz86IE1vZHVsZU9wdGlvbnMpOiBQbHVnaW5bXSB7XG4gIGxldCBidWlsZGVyOiBMb2NhbEJ1aWxkZXI7XG4gIGxldCB3b3JrZmxvd0J1aWxkRGlyOiBzdHJpbmc7XG4gIGNvbnN0IGVucXVldWUgPSBjcmVhdGVCdWlsZFF1ZXVlKCk7XG5cbiAgLy8gQ3JlYXRlIGEgbGF6eSB0cmFuc2Zvcm0gcGx1Z2luIHRoYXQgZXhjbHVkZXMgdGhlIHdvcmtmbG93IGJ1aWxkIGRpcmVjdG9yeVxuICAvLyBUaGUgZXhjbHVzaW9uIHBhdGggaXMgc2V0IGR1cmluZyBuaXRybyBzZXR1cCwgc28gd2UgbmVlZCB0byBkZWZlciBwbHVnaW4gY3JlYXRpb25cbiAgY29uc3QgbGF6eVRyYW5zZm9ybVBsdWdpbjogUGx1Z2luID0ge1xuICAgIG5hbWU6ICd3b3JrZmxvdzp0cmFuc2Zvcm0nLFxuICAgIHRyYW5zZm9ybShjb2RlLCBpZCkge1xuICAgICAgLy8gRGVsZWdhdGUgdG8gdGhlIGFjdHVhbCB0cmFuc2Zvcm0gcGx1Z2luIHdpdGggZXhjbHVzaW9uXG4gICAgICAvLyB3b3JrZmxvd0J1aWxkRGlyIGlzIHNldCBkdXJpbmcgbml0cm8gc2V0dXAgYmVmb3JlIHRyYW5zZm9ybXMgcnVuXG4gICAgICBjb25zdCBwbHVnaW4gPSB3b3JrZmxvd1RyYW5zZm9ybVBsdWdpbih7XG4gICAgICAgIGV4Y2x1ZGU6IHdvcmtmbG93QnVpbGREaXIgPyBbd29ya2Zsb3dCdWlsZERpcl0gOiBbXSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIChwbHVnaW4udHJhbnNmb3JtIGFzIEZ1bmN0aW9uKT8uY2FsbCh0aGlzLCBjb2RlLCBpZCk7XG4gICAgfSxcbiAgfTtcblxuICByZXR1cm4gW1xuICAgIGxhenlUcmFuc2Zvcm1QbHVnaW4sXG4gICAge1xuICAgICAgbmFtZTogJ3dvcmtmbG93Om5pdHJvJyxcbiAgICAgIG5pdHJvOiB7XG4gICAgICAgIHNldHVwOiAobml0cm86IE5pdHJvKSA9PiB7XG4gICAgICAgICAgLy8gQ2FwdHVyZSB0aGUgd29ya2Zsb3cgYnVpbGQgZGlyZWN0b3J5IGZvciBleGNsdXNpb25cbiAgICAgICAgICB3b3JrZmxvd0J1aWxkRGlyID0gam9pbihuaXRyby5vcHRpb25zLmJ1aWxkRGlyLCAnd29ya2Zsb3cnKTtcbiAgICAgICAgICBuaXRyby5vcHRpb25zLndvcmtmbG93ID0ge1xuICAgICAgICAgICAgLi4ubml0cm8ub3B0aW9ucy53b3JrZmxvdyxcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBfdml0ZTogdHJ1ZSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGlmIChuaXRyby5vcHRpb25zLmRldikge1xuICAgICAgICAgICAgYnVpbGRlciA9IG5ldyBMb2NhbEJ1aWxkZXIobml0cm8pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbml0cm9Nb2R1bGUuc2V0dXAobml0cm8pO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIC8vIE5PVEU6IFRoaXMgaXMgYSB3b3JrYXJvdW5kIGJlY2F1c2UgTml0cm8gcGFzc2VzIHRoZSA0MDQgcmVxdWVzdHMgdG8gdGhlIGRldiBzZXJ2ZXIgdG8gaGFuZGxlLlxuICAgICAgLy8gRm9yIHdvcmtmbG93IHJvdXRlcywgd2Ugb3ZlcnJpZGUgdG8gc2VuZCBhbiBlbXB0eSBib2R5IHRvIHByZXZlbnQgSG9uby9WaXRlJ3MgU1BBIGZhbGxiYWNrLlxuICAgICAgY29uZmlndXJlU2VydmVyKHNlcnZlcikge1xuICAgICAgICAvLyBBZGQgbWlkZGxld2FyZSB0byBpbnRlcmNlcHQgNDA0cyBvbiB3b3JrZmxvdyByb3V0ZXMgYmVmb3JlIFZpdGUncyBTUEEgZmFsbGJhY2tcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICBzZXJ2ZXIubWlkZGxld2FyZXMudXNlKChyZXEsIHJlcywgbmV4dCkgPT4ge1xuICAgICAgICAgICAgLy8gT25seSBoYW5kbGUgd29ya2Zsb3cgd2ViaG9vayByb3V0ZXNcbiAgICAgICAgICAgIGlmICghcmVxLnVybD8uc3RhcnRzV2l0aCgnLy53ZWxsLWtub3duL3dvcmtmbG93L3YxLycpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFdyYXAgd3JpdGVIZWFkIHRvIGVuc3VyZSB3ZSBzZW5kIGVtcHR5IGJvZHkgZm9yIDQwNHNcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsV3JpdGVIZWFkID0gcmVzLndyaXRlSGVhZDtcbiAgICAgICAgICAgIHJlcy53cml0ZUhlYWQgPSBmdW5jdGlvbiAodGhpczogdHlwZW9mIHJlcywgLi4uYXJnczogYW55W10pIHtcbiAgICAgICAgICAgICAgY29uc3Qgc3RhdHVzQ29kZSA9IHR5cGVvZiBhcmdzWzBdID09PSAnbnVtYmVyJyA/IGFyZ3NbMF0gOiAyMDA7XG5cbiAgICAgICAgICAgICAgLy8gTk9URTogV29ya2Fyb3VuZCBiZWNhdXNlIE5pdHJvIHBhc3NlcyA0MDQgcmVxdWVzdHMgdG8gdGhlIHZpdGUgdG8gaGFuZGxlLlxuICAgICAgICAgICAgICAvLyBDYXVzZXMgYHdlYmhvb2sgcm91dGUgd2l0aCBpbnZhbGlkIHRva2VuYCB0ZXN0IHRvIGZhaWwuXG4gICAgICAgICAgICAgIC8vIEZvciA0MDRzIG9uIHdvcmtmbG93IHJvdXRlcywgZW5zdXJlIHdlJ3JlIHNlbmRpbmcgdGhlIHJpZ2h0IGhlYWRlcnNcbiAgICAgICAgICAgICAgaWYgKHN0YXR1c0NvZGUgPT09IDQwNCkge1xuICAgICAgICAgICAgICAgIC8vIFNldCBjb250ZW50LWxlbmd0aCB0byAwIHRvIHByZXZlbnQgVml0ZSBmcm9tIG92ZXJyaWRpbmdcbiAgICAgICAgICAgICAgICByZXMuc2V0SGVhZGVyKCdDb250ZW50LUxlbmd0aCcsICcwJyk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gQ29tcGxleCBvdmVybG9hZCBzaWduYXR1cmVcbiAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsV3JpdGVIZWFkLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgfSBhcyBhbnk7XG5cbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgfSxcbiAgICB3b3JrZmxvd0hvdFVwZGF0ZVBsdWdpbih7XG4gICAgICBidWlsZGVyOiAoKSA9PiBidWlsZGVyLFxuICAgICAgZW5xdWV1ZSxcbiAgICB9KSxcbiAgXTtcbn1cbiJdfQ==
|
|
108
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidml0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy92aXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsNEJBQTRCLEVBQzVCLCtCQUErQixFQUMvQixpQ0FBaUMsRUFDakMsNEJBQTRCLEdBQzdCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDM0QsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHekQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUU3QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTdDLE9BQU8sV0FBVyxNQUFNLFlBQVksQ0FBQztBQUVyQyxNQUFNLFVBQVUsUUFBUSxDQUFDLE9BQXVCO0lBQzlDLElBQUksT0FBcUIsQ0FBQztJQUMxQixJQUFJLGdCQUF3QixDQUFDO0lBQzdCLE1BQU0sT0FBTyxHQUFHLGdCQUFnQixFQUFFLENBQUM7SUFFbkMsNEVBQTRFO0lBQzVFLG9GQUFvRjtJQUNwRixNQUFNLG1CQUFtQixHQUFXO1FBQ2xDLElBQUksRUFBRSxvQkFBb0I7UUFDMUIsTUFBTTtZQUNKLE1BQU0sbUJBQW1CLEdBQUcsNEJBQTRCLEVBQUUsQ0FBQztZQUMzRCxNQUFNLHdCQUF3QixHQUFHLCtCQUErQixDQUFDO2dCQUMvRCxVQUFVLEVBQUUsT0FBTyxDQUFDLEdBQUcsRUFBRTtnQkFDekIsV0FBVyxFQUFFLG1CQUFtQjthQUNqQyxDQUFDLENBQUM7WUFDSCxPQUFPO2dCQUNMLE1BQU0sRUFBRTtvQkFDTixtQ0FBbUMsRUFDakMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQztpQkFDdEM7Z0JBQ0QsT0FBTyxFQUFFO29CQUNQLEtBQUssRUFBRTt3QkFDTCxDQUFDLDRCQUE0QixDQUFDLEVBQUUsd0JBQXdCO3dC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QztnQ0FDdkIsMERBQTBEO2dDQUMxRCxHQUFHLENBQUMsU0FBUyxDQUFDLGdCQUFnQixFQUFFLEdBQUcsQ0FBQyxDQUFDOzRCQUN2QyxDQUFDOzRCQUVELGdEQUFnRDs0QkFDaEQsT0FBTyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO3dCQUM3QyxDQUFRLENBQUM7d0JBRVQsSUFBSSxFQUFFLENBQUM7b0JBQ1QsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDO1lBQ0osQ0FBQztTQUNGO1FBQ0QsdUJBQXVCLENBQUM7WUFDdEIsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU87WUFDdEIsT0FBTztTQUNSLENBQUM7S0FDSCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGNyZWF0ZUJ1aWxkUXVldWUsXG4gIGVuc3VyZVdvcmtmbG93VGFyZ2V0V29ybGRFbnYsXG4gIHJlc29sdmVXb3JrZmxvd1RhcmdldFdvcmxkQWxpYXMsXG4gIFdPUktGTE9XX09QVElPTkFMX1BHX05BVElWRV9BTElBUyxcbiAgV09SS0ZMT1dfV09STERfVEFSR0VUX01PRFVMRSxcbn0gZnJvbSAnQHdvcmtmbG93L2J1aWxkZXJzJztcbmltcG9ydCB7IHdvcmtmbG93VHJhbnNmb3JtUGx1Z2luIH0gZnJvbSAnQHdvcmtmbG93L3JvbGx1cCc7XG5pbXBvcnQgeyB3b3JrZmxvd0hvdFVwZGF0ZVBsdWdpbiB9IGZyb20gJ0B3b3JrZmxvdy92aXRlJztcbmltcG9ydCB0eXBlIHsgTml0cm8gfSBmcm9tICduaXRyby90eXBlcyc7XG5pbXBvcnQgdHlwZSB7fSBmcm9tICduaXRyby92aXRlJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoZSc7XG5pbXBvcnQgdHlwZSB7IFBsdWdpbiwgVHJhbnNmb3JtUmVzdWx0IH0gZnJvbSAndml0ZSc7XG5pbXBvcnQgeyBMb2NhbEJ1aWxkZXIgfSBmcm9tICcuL2J1aWxkZXJzLmpzJztcbmltcG9ydCB0eXBlIHsgTW9kdWxlT3B0aW9ucyB9IGZyb20gJy4vaW5kZXguanMnO1xuaW1wb3J0IG5pdHJvTW9kdWxlIGZyb20gJy4vaW5kZXguanMnO1xuXG5leHBvcnQgZnVuY3Rpb24gd29ya2Zsb3cob3B0aW9ucz86IE1vZHVsZU9wdGlvbnMpOiBQbHVnaW5bXSB7XG4gIGxldCBidWlsZGVyOiBMb2NhbEJ1aWxkZXI7XG4gIGxldCB3b3JrZmxvd0J1aWxkRGlyOiBzdHJpbmc7XG4gIGNvbnN0IGVucXVldWUgPSBjcmVhdGVCdWlsZFF1ZXVlKCk7XG5cbiAgLy8gQ3JlYXRlIGEgbGF6eSB0cmFuc2Zvcm0gcGx1Z2luIHRoYXQgZXhjbHVkZXMgdGhlIHdvcmtmbG93IGJ1aWxkIGRpcmVjdG9yeVxuICAvLyBUaGUgZXhjbHVzaW9uIHBhdGggaXMgc2V0IGR1cmluZyBuaXRybyBzZXR1cCwgc28gd2UgbmVlZCB0byBkZWZlciBwbHVnaW4gY3JlYXRpb25cbiAgY29uc3QgbGF6eVRyYW5zZm9ybVBsdWdpbjogUGx1Z2luID0ge1xuICAgIG5hbWU6ICd3b3JrZmxvdzp0cmFuc2Zvcm0nLFxuICAgIGNvbmZpZygpIHtcbiAgICAgIGNvbnN0IHdvcmtmbG93VGFyZ2V0V29ybGQgPSBlbnN1cmVXb3JrZmxvd1RhcmdldFdvcmxkRW52KCk7XG4gICAgICBjb25zdCB3b3JrZmxvd1RhcmdldFdvcmxkQWxpYXMgPSByZXNvbHZlV29ya2Zsb3dUYXJnZXRXb3JsZEFsaWFzKHtcbiAgICAgICAgd29ya2luZ0RpcjogcHJvY2Vzcy5jd2QoKSxcbiAgICAgICAgdGFyZ2V0V29ybGQ6IHdvcmtmbG93VGFyZ2V0V29ybGQsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRlZmluZToge1xuICAgICAgICAgICdwcm9jZXNzLmVudi5XT1JLRkxPV19UQVJHRVRfV09STEQnOlxuICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkod29ya2Zsb3dUYXJnZXRXb3JsZCksXG4gICAgICAgIH0sXG4gICAgICAgIHJlc29sdmU6IHtcbiAgICAgICAgICBhbGlhczoge1xuICAgICAgICAgICAgW1dPUktGTE9XX1dPUkxEX1RBUkdFVF9NT0RVTEVdOiB3b3JrZmxvd1RhcmdldFdvcmxkQWxpYXMsXG4gICAgICAgICAgICAncGctbmF0aXZlJzogV09SS0ZMT1dfT1BUSU9OQUxfUEdfTkFUSVZFX0FMSUFTLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH0sXG4gICAgYXN5bmMgcmVzb2x2ZUlkKHNvdXJjZSwgaW1wb3J0ZXIsIG9wdGlvbnMpIHtcbiAgICAgIGlmIChzb3VyY2UgIT09IFdPUktGTE9XX1dPUkxEX1RBUkdFVF9NT0RVTEUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjb25zdCB3b3JrZmxvd1RhcmdldFdvcmxkID0gZW5zdXJlV29ya2Zsb3dUYXJnZXRXb3JsZEVudigpO1xuICAgICAgY29uc3QgcmVzb2x2ZWQgPSBhd2FpdCB0aGlzLnJlc29sdmUod29ya2Zsb3dUYXJnZXRXb3JsZCwgaW1wb3J0ZXIsIHtcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgc2tpcFNlbGY6IHRydWUsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXNvbHZlZCA/PyB7IGlkOiB3b3JrZmxvd1RhcmdldFdvcmxkLCBleHRlcm5hbDogdHJ1ZSB9O1xuICAgIH0sXG4gICAgdHJhbnNmb3JtKGNvZGUsIGlkLCBvcHRpb25zKSB7XG4gICAgICAvLyBEZWxlZ2F0ZSB0byB0aGUgYWN0dWFsIHRyYW5zZm9ybSBwbHVnaW4gd2l0aCBleGNsdXNpb25cbiAgICAgIC8vIHdvcmtmbG93QnVpbGREaXIgaXMgc2V0IGR1cmluZyBuaXRybyBzZXR1cCBiZWZvcmUgdHJhbnNmb3JtcyBydW5cbiAgICAgIGNvbnN0IHBsdWdpbiA9IHdvcmtmbG93VHJhbnNmb3JtUGx1Z2luKHtcbiAgICAgICAgZXhjbHVkZTogd29ya2Zsb3dCdWlsZERpciA/IFt3b3JrZmxvd0J1aWxkRGlyXSA6IFtdLFxuICAgICAgfSk7XG4gICAgICBjb25zdCB0cmFuc2Zvcm0gPSBwbHVnaW4udHJhbnNmb3JtIGFzXG4gICAgICAgIHwgKChcbiAgICAgICAgICAgIHRoaXM6IHVua25vd24sXG4gICAgICAgICAgICBjb2RlOiBzdHJpbmcsXG4gICAgICAgICAgICBpZDogc3RyaW5nLFxuICAgICAgICAgICAgb3B0aW9ucz86IHsgc3NyPzogYm9vbGVhbiB9XG4gICAgICAgICAgKSA9PiBUcmFuc2Zvcm1SZXN1bHQgfCBQcm9taXNlPFRyYW5zZm9ybVJlc3VsdD4pXG4gICAgICAgIHwgdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIHRyYW5zZm9ybT8uY2FsbCh0aGlzLCBjb2RlLCBpZCwgb3B0aW9ucyk7XG4gICAgfSxcbiAgfTtcblxuICByZXR1cm4gW1xuICAgIGxhenlUcmFuc2Zvcm1QbHVnaW4sXG4gICAge1xuICAgICAgbmFtZTogJ3dvcmtmbG93Om5pdHJvJyxcbiAgICAgIG5pdHJvOiB7XG4gICAgICAgIHNldHVwOiAobml0cm86IE5pdHJvKSA9PiB7XG4gICAgICAgICAgLy8gQ2FwdHVyZSB0aGUgd29ya2Zsb3cgYnVpbGQgZGlyZWN0b3J5IGZvciBleGNsdXNpb25cbiAgICAgICAgICB3b3JrZmxvd0J1aWxkRGlyID0gam9pbihuaXRyby5vcHRpb25zLmJ1aWxkRGlyLCAnd29ya2Zsb3cnKTtcbiAgICAgICAgICBuaXRyby5vcHRpb25zLndvcmtmbG93ID0ge1xuICAgICAgICAgICAgLi4ubml0cm8ub3B0aW9ucy53b3JrZmxvdyxcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBfdml0ZTogdHJ1ZSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGlmIChuaXRyby5vcHRpb25zLmRldikge1xuICAgICAgICAgICAgYnVpbGRlciA9IG5ldyBMb2NhbEJ1aWxkZXIobml0cm8pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbml0cm9Nb2R1bGUuc2V0dXAobml0cm8pO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIC8vIE5PVEU6IFRoaXMgaXMgYSB3b3JrYXJvdW5kIGJlY2F1c2UgTml0cm8gcGFzc2VzIHRoZSA0MDQgcmVxdWVzdHMgdG8gdGhlIGRldiBzZXJ2ZXIgdG8gaGFuZGxlLlxuICAgICAgLy8gRm9yIHdvcmtmbG93IHJvdXRlcywgd2Ugb3ZlcnJpZGUgdG8gc2VuZCBhbiBlbXB0eSBib2R5IHRvIHByZXZlbnQgSG9uby9WaXRlJ3MgU1BBIGZhbGxiYWNrLlxuICAgICAgY29uZmlndXJlU2VydmVyKHNlcnZlcikge1xuICAgICAgICAvLyBBZGQgbWlkZGxld2FyZSB0byBpbnRlcmNlcHQgNDA0cyBvbiB3b3JrZmxvdyByb3V0ZXMgYmVmb3JlIFZpdGUncyBTUEEgZmFsbGJhY2tcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICBzZXJ2ZXIubWlkZGxld2FyZXMudXNlKChyZXEsIHJlcywgbmV4dCkgPT4ge1xuICAgICAgICAgICAgLy8gT25seSBoYW5kbGUgd29ya2Zsb3cgd2ViaG9vayByb3V0ZXNcbiAgICAgICAgICAgIGlmICghcmVxLnVybD8uc3RhcnRzV2l0aCgnLy53ZWxsLWtub3duL3dvcmtmbG93L3YxLycpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFdyYXAgd3JpdGVIZWFkIHRvIGVuc3VyZSB3ZSBzZW5kIGVtcHR5IGJvZHkgZm9yIDQwNHNcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsV3JpdGVIZWFkID0gcmVzLndyaXRlSGVhZDtcbiAgICAgICAgICAgIHJlcy53cml0ZUhlYWQgPSBmdW5jdGlvbiAodGhpczogdHlwZW9mIHJlcywgLi4uYXJnczogYW55W10pIHtcbiAgICAgICAgICAgICAgY29uc3Qgc3RhdHVzQ29kZSA9IHR5cGVvZiBhcmdzWzBdID09PSAnbnVtYmVyJyA/IGFyZ3NbMF0gOiAyMDA7XG5cbiAgICAgICAgICAgICAgLy8gTk9URTogV29ya2Fyb3VuZCBiZWNhdXNlIE5pdHJvIHBhc3NlcyA0MDQgcmVxdWVzdHMgdG8gdGhlIHZpdGUgdG8gaGFuZGxlLlxuICAgICAgICAgICAgICAvLyBDYXVzZXMgYHdlYmhvb2sgcm91dGUgd2l0aCBpbnZhbGlkIHRva2VuYCB0ZXN0IHRvIGZhaWwuXG4gICAgICAgICAgICAgIC8vIEZvciA0MDRzIG9uIHdvcmtmbG93IHJvdXRlcywgZW5zdXJlIHdlJ3JlIHNlbmRpbmcgdGhlIHJpZ2h0IGhlYWRlcnNcbiAgICAgICAgICAgICAgaWYgKHN0YXR1c0NvZGUgPT09IDQwNCkge1xuICAgICAgICAgICAgICAgIC8vIFNldCBjb250ZW50LWxlbmd0aCB0byAwIHRvIHByZXZlbnQgVml0ZSBmcm9tIG92ZXJyaWRpbmdcbiAgICAgICAgICAgICAgICByZXMuc2V0SGVhZGVyKCdDb250ZW50LUxlbmd0aCcsICcwJyk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gQ29tcGxleCBvdmVybG9hZCBzaWduYXR1cmVcbiAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsV3JpdGVIZWFkLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgfSBhcyBhbnk7XG5cbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgfSxcbiAgICB3b3JrZmxvd0hvdFVwZGF0ZVBsdWdpbih7XG4gICAgICBidWlsZGVyOiAoKSA9PiBidWlsZGVyLFxuICAgICAgZW5xdWV1ZSxcbiAgICB9KSxcbiAgXTtcbn1cbiJdfQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@workflow/nitro",
|
|
3
|
-
"version": "5.0.0-beta.
|
|
3
|
+
"version": "5.0.0-beta.29",
|
|
4
4
|
"description": "Nitro integration for Workflow SDK",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -24,17 +24,17 @@
|
|
|
24
24
|
"@swc/core": "1.15.3",
|
|
25
25
|
"exsolve": "1.0.8",
|
|
26
26
|
"pathe": "2.0.3",
|
|
27
|
-
"@workflow/builders": "5.0.0-beta.
|
|
28
|
-
"@workflow/core": "5.0.0-beta.
|
|
29
|
-
"@workflow/rollup": "5.0.0-beta.
|
|
27
|
+
"@workflow/builders": "5.0.0-beta.29",
|
|
28
|
+
"@workflow/core": "5.0.0-beta.29",
|
|
29
|
+
"@workflow/rollup": "5.0.0-beta.29",
|
|
30
30
|
"@workflow/swc-plugin": "5.0.0-beta.5",
|
|
31
|
-
"@workflow/vite": "5.0.0-beta.
|
|
32
|
-
"@workflow/web": "5.0.0-beta.
|
|
31
|
+
"@workflow/vite": "5.0.0-beta.29",
|
|
32
|
+
"@workflow/web": "5.0.0-beta.29"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
35
|
"@types/node": "22.19.0",
|
|
36
|
-
"nitro": "^3.0.
|
|
37
|
-
"vite": "7.3.
|
|
36
|
+
"nitro": "^3.0.260610-beta",
|
|
37
|
+
"vite": "7.3.6",
|
|
38
38
|
"@workflow/tsconfig": "5.0.0-beta.0"
|
|
39
39
|
},
|
|
40
40
|
"scripts": {
|