@workflow/builders 5.0.0-beta.36 → 5.0.0-beta.37

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.
@@ -23,7 +23,7 @@ function writeFile(path, contents) {
23
23
  mkdirSync(dirname(path), { recursive: true });
24
24
  writeFileSync(path, contents, 'utf-8');
25
25
  }
26
- function createBuilder(workingDir) {
26
+ function createBuilder(workingDir, overrides) {
27
27
  const config = {
28
28
  buildTarget: 'standalone',
29
29
  workingDir,
@@ -31,6 +31,7 @@ function createBuilder(workingDir) {
31
31
  stepsBundlePath: join(workingDir, 'steps.js'),
32
32
  workflowsBundlePath: join(workingDir, 'workflows.js'),
33
33
  webhookBundlePath: join(workingDir, 'webhook.js'),
34
+ ...overrides,
34
35
  };
35
36
  return new TestBuilder(config);
36
37
  }
@@ -96,6 +97,83 @@ describe('fast workflow discovery', () => {
96
97
  expect(discovered.discoveredWorkflows).toEqual(new Set([normalize(packageWorkflow)]));
97
98
  expect(parentHasChild(normalize(packageIndex), normalize(packageWorkflow))).toBe(true);
98
99
  });
100
+ it('does not descend into node_modules when discoverWorkflowsInNodeModules is false', async () => {
101
+ const entryFile = join(testRoot, 'src', 'entry.ts');
102
+ const localWorkflow = join(testRoot, 'src', 'local-workflow.ts');
103
+ const packageRoot = join(testRoot, 'node_modules', 'workflow-pkg');
104
+ const packageIndex = join(packageRoot, 'index.js');
105
+ const packageWorkflow = join(packageRoot, 'workflow.js');
106
+ const packageStep = join(packageRoot, 'step.js');
107
+ writeFile(entryFile, `import './local-workflow';\nimport { run } from 'workflow-pkg';\nvoid run;\n`);
108
+ writeFile(localWorkflow, `export async function localRun() {
109
+ 'use workflow';
110
+ return 'ok';
111
+ }
112
+ `);
113
+ writeFile(join(packageRoot, 'package.json'), JSON.stringify({
114
+ name: 'workflow-pkg',
115
+ version: '1.0.0',
116
+ main: 'index.js',
117
+ dependencies: {
118
+ workflow: '^1.0.0',
119
+ },
120
+ }));
121
+ writeFile(packageIndex, `export { run } from './workflow.js';\nexport { doWork } from './step.js';\n`);
122
+ writeFile(packageWorkflow, `export async function run() {
123
+ "use workflow";
124
+ return "ok";
125
+ }
126
+ `);
127
+ writeFile(packageStep, `export async function doWork() {
128
+ "use step";
129
+ return "done";
130
+ }
131
+ `);
132
+ const discovered = await createBuilder(testRoot, {
133
+ discoverWorkflowsInNodeModules: false,
134
+ }).discoverEntriesPublic([entryFile], join(testRoot, 'out'));
135
+ // Local (non-node_modules) workflow is still discovered.
136
+ expect(discovered.discoveredWorkflows).toEqual(new Set([normalize(localWorkflow)]));
137
+ // The node_modules workflow and step are not registered.
138
+ expect(discovered.discoveredWorkflows.has(normalize(packageWorkflow))).toBe(false);
139
+ expect(discovered.discoveredSteps.has(normalize(packageStep))).toBe(false);
140
+ // The dependency's files are never read/scanned: the import graph is not
141
+ // descended into at all, so none of them show up as discovered files and
142
+ // the parent edge into the package is not recorded.
143
+ for (const file of [packageIndex, packageWorkflow, packageStep]) {
144
+ expect(discovered.discoveredFiles?.has(normalize(file))).toBe(false);
145
+ }
146
+ expect(parentHasChild(normalize(entryFile), normalize(packageIndex))).toBe(false);
147
+ });
148
+ it('still follows imports within node_modules so seeded package entries resolve their subtree', async () => {
149
+ // Mirrors how the SDK seeds `@workflow/core/runtime/run` (a node_modules
150
+ // file) as an entry point: descent is blocked from application code, but a
151
+ // node_modules file may still reach its own transitive files.
152
+ const entryFile = join(testRoot, 'src', 'entry.ts');
153
+ const packageRoot = join(testRoot, 'node_modules', 'seeded-pkg');
154
+ const packageIndex = join(packageRoot, 'index.js');
155
+ const packageWorkflow = join(packageRoot, 'workflow.js');
156
+ writeFile(entryFile, `export const noop = 1;\n`);
157
+ writeFile(join(packageRoot, 'package.json'), JSON.stringify({
158
+ name: 'seeded-pkg',
159
+ version: '1.0.0',
160
+ main: 'index.js',
161
+ dependencies: { workflow: '^1.0.0' },
162
+ }));
163
+ writeFile(packageIndex, `export { run } from './workflow.js';\n`);
164
+ writeFile(packageWorkflow, `export async function run() {
165
+ "use workflow";
166
+ return "ok";
167
+ }
168
+ `);
169
+ // Seed the node_modules index directly as an entry point (as the builder
170
+ // does for the SDK runtime serde entry).
171
+ const discovered = await createBuilder(testRoot, {
172
+ discoverWorkflowsInNodeModules: false,
173
+ }).discoverEntriesPublic([entryFile, packageIndex], join(testRoot, 'out'));
174
+ expect(discovered.discoveredWorkflows.has(normalize(packageWorkflow))).toBe(true);
175
+ expect(parentHasChild(normalize(packageIndex), normalize(packageWorkflow))).toBe(true);
176
+ });
99
177
  it('discovers files reached through tsconfig path aliases', async () => {
100
178
  const entryFile = join(testRoot, 'src', 'entry.ts');
101
179
  const registryFile = join(testRoot, 'src', '_workflows.ts');
@@ -372,4 +450,4 @@ export const WORKFLOW_SERIALIZE = Symbol.for('workflow-serialize');
372
450
  expect(builder.createRouteImportSpecifierPublic(nestedPackageFile, routeDir)).toBe('../../../../node_modules/parent-pkg/node_modules/nested-pkg/step.js');
373
451
  });
374
452
  });
375
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFzdC1kaXNjb3ZlcnkudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9mYXN0LWRpc2NvdmVyeS50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsV0FBVyxFQUNYLFlBQVksRUFDWixNQUFNLEVBQ04sYUFBYSxHQUNkLE1BQU0sU0FBUyxDQUFDO0FBQ2pCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDakMsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDMUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDckUsT0FBTyxFQUFFLFdBQVcsRUFBMEIsTUFBTSxtQkFBbUIsQ0FBQztBQUN4RSxPQUFPLEVBQ0wsYUFBYSxFQUNiLGNBQWMsR0FDZixNQUFNLHNDQUFzQyxDQUFDO0FBRzlDLE1BQU0sV0FBWSxTQUFRLFdBQVc7SUFDbkMsS0FBSyxDQUFDLEtBQUs7UUFDVCxRQUFRO0lBQ1YsQ0FBQztJQUVNLHFCQUFxQixDQUMxQixNQUFnQixFQUNoQixNQUFjLEVBQ2QsWUFBcUI7UUFFckIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVNLGdDQUFnQyxDQUNyQyxJQUFZLEVBQ1osUUFBZ0I7UUFFaEIsT0FBTyxJQUFJLENBQUMsMEJBQTBCLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3pELENBQUM7Q0FDRjtBQUVELE1BQU0sVUFBVSxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBRTFDLFNBQVMsU0FBUyxDQUFDLElBQVk7SUFDN0IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENB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UUFBUSxFQUNSLGNBQWMsRUFDZCxZQUFZLEVBQ1osY0FBYyxFQUNkLFlBQVksRUFDWixjQUFjLENBQ2YsRUFDRCxJQUFJLENBQUMsU0FBUyxDQUFDO1lBQ2IsSUFBSSxFQUFFLFlBQVk7WUFDbEIsT0FBTyxFQUFFLE9BQU87WUFDaEIsT0FBTyxFQUFFO2dCQUNQLFFBQVEsRUFBRSxXQUFXO2FBQ3RCO1NBQ0YsQ0FBQyxDQUNILENBQUM7UUFDRixTQUFTLENBQUMsaUJBQWlCLEVBQUUsNkJBQTZCLENBQUMsQ0FBQztRQUU1RCxNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDeEMsTUFBTSxDQUNKLE9BQU8sQ0FBQyxnQ0FBZ0MsQ0FBQyxpQkFBaUIsRUFBRSxRQUFRLENBQUMsQ0FDdEUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUMxQixNQUFNLENBQ0osT0FBTyxDQUFDLGdDQUFnQyxDQUFDLGlCQUFpQixFQUFFLFFBQVEsQ0FBQyxDQUN0RSxDQUFDLElBQUksQ0FDSixxRUFBcUUsQ0FDdEUsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBta2RpclN5bmMsXG4gIG1rZHRlbXBTeW5jLFxuICByZWFscGF0aFN5bmMsXG4gIHJtU3luYyxcbiAgd3JpdGVGaWxlU3luYyxcbn0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyB0bXBkaXIgfSBmcm9tICdub2RlOm9zJztcbmltcG9ydCB7IGRpcm5hbWUsIGpvaW4gfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgYWZ0ZXJFYWNoLCBiZWZvcmVFYWNoLCBkZXNjcmliZSwgZXhwZWN0LCBpdCB9IGZyb20gJ3ZpdGVzdCc7XG5pbXBvcnQgeyBCYXNlQnVpbGRlciwgdHlwZSBEaXNjb3ZlcmVkRW50cmllcyB9IGZyb20gJy4vYmFzZS1idWlsZGVyLmpzJztcbmltcG9ydCB7XG4gIGltcG9ydFBhcmVudHMsXG4gIHBhcmVudEhhc0NoaWxkLFxufSBmcm9tICcuL2Rpc2NvdmVyLWVudHJpZXMtZXNidWlsZC1wbHVnaW4uanMnO1xuaW1wb3J0IHR5cGUgeyBTdGFuZGFsb25lQ29uZmlnIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbmNsYXNzIFRlc3RCdWlsZGVyIGV4dGVuZHMgQmFzZUJ1aWxkZXIge1xuICBhc3luYyBidWlsZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBuby1vcFxuICB9XG5cbiAgcHVibGljIGRpc2NvdmVyRW50cmllc1B1YmxpYyhcbiAgICBpbnB1dHM6IHN0cmluZ1tdLFxuICAgIG91dGRpcjogc3RyaW5nLFxuICAgIHRzY29uZmlnUGF0aD86IHN0cmluZ1xuICApOiBQcm9taXNlPERpc2NvdmVyZWRFbnRyaWVzPiB7XG4gICAgcmV0dXJuIHRoaXMuZGlzY292ZXJFbnRyaWVzKGlucHV0cywgb3V0ZGlyLCB0c2NvbmZpZ1BhdGgpO1xuICB9XG5cbiAgcHVibGljIGNyZWF0ZVJvdXRlSW1wb3J0U3BlY2lmaWVyUHVibGljKFxuICAgIGZpbGU6IHN0cmluZyxcbiAgICByb3V0ZURpcjogc3RyaW5nXG4gICk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlUm91dGVJbXBvcnRTcGVjaWZpZXIoZmlsZSwgcm91dGVEaXIpO1xuICB9XG59XG5cbmNvbnN0IHJlYWxUbXBkaXIgPSByZWFscGF0aFN5bmModG1wZGlyKCkpO1xuXG5mdW5jdGlvbiBub3JtYWxpemUocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHBhdGgucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xufVxuXG5mdW5jdGlvbiB3cml0ZUZpbGUocGF0aDogc3RyaW5nLCBjb250ZW50czogc3RyaW5nKTogdm9pZCB7XG4gIG1rZGlyU3luYyhkaXJuYW1lKHBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgd3JpdGVGaWxlU3luYyhwYXRoLCBjb250ZW50cywgJ3V0Zi04Jyk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJ1aWxkZXIod29ya2luZ0Rpcjogc3RyaW5nKTogVGVzdEJ1aWxkZXIge1xuICBjb25zdCBjb25maWc6IFN0YW5kYWxvbmVDb25maWcgPSB7XG4gICAgYnVpbGRUYXJnZXQ6ICdzdGFuZGFsb25lJyxcbiAgICB3b3JraW5nRGlyLFxuICAgIGRpcnM6IFsnLiddLFxuICAgIHN0ZXBzQnVuZGxlUGF0aDogam9pbih3b3JraW5nRGlyLCAnc3RlcHMuanMnKSxcbiAgICB3b3JrZmxvd3NCdW5kbGVQYXRoOiBqb2luKHdvcmtpbmdEaXIsICd3b3JrZmxvd3MuanMnKSxcbiAgICB3ZWJob29rQnVuZGxlUGF0aDogam9pbih3b3JraW5nRGlyLCAnd2ViaG9vay5qcycpLFxuICB9O1xuICByZXR1cm4gbmV3IFRlc3RCdWlsZGVyKGNvbmZpZyk7XG59XG5cbmRlc2NyaWJlKCdmYXN0IHdvcmtmbG93IGRpc2NvdmVyeScsICgpID0+IHtcbiAgbGV0IHRlc3RSb290OiBzdHJpbmc7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgdGVzdFJvb3QgPSBta2R0ZW1wU3luYyhqb2luKHJlYWxUbXBkaXIsICd3b3JrZmxvdy1mYXN0LWRpc2NvdmVyeS0nKSk7XG4gICAgaW1wb3J0UGFyZW50cy5jbGVhcigpO1xuICB9KTtcblxuICBhZnRlckVhY2goKCkgPT4ge1xuICAgIGltcG9ydFBhcmVudHMuY2xlYXIoKTtcbiAgICBybVN5bmModGVzdFJvb3QsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcbiAgfSk7XG5cbiAgaXQoJ2Rpc2NvdmVycyB0cmFuc2l0aXZlIHJlbGF0aXZlIHN0ZXAgaW1wb3J0cyBhbmQgdHJhY2tzIHRoZSBwYXJlbnQgY2hhaW4nLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZW50cnlGaWxlID0gam9pbih0ZXN0Um9vdCwgJ3NyYycsICdlbnRyeS50cycpO1xuICAgIGNvbnN0IHdvcmtmbG93RmlsZSA9IGpvaW4odGVzdFJvb3QsICdzcmMnLCAnd29ya2Zsb3cudHMnKTtcbiAgICBjb25zdCBzdGVwRmlsZSA9IGpvaW4odGVzdFJvb3QsICdzcmMnLCAnc3RlcC50cycpO1xuXG4gICAgd3JpdGVGaWxlKGVudHJ5RmlsZSwgYGltcG9ydCAnLi93b3JrZmxvdyc7XFxuYCk7XG4gICAgd3JpdGVGaWxlKHdvcmtmbG93RmlsZSwgYGltcG9ydCB7IGRvU3RlcCB9IGZyb20gJy4vc3RlcCc7XFxudm9pZCBkb1N0ZXA7XFxuYCk7XG4gICAgd3JpdGVGaWxlKFxuICAgICAgc3RlcEZpbGUsXG4gICAgICBgZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRvU3RlcCgpIHtcbiAgJ3VzZSBzdGVwJztcbiAgcmV0dXJuIDE7XG59XG5gXG4gICAgKTtcblxuICAgIGNvbnN0IGRpc2NvdmVyZWQgPSBhd2FpdCBjcmVhdGVCdWlsZGVyKHRlc3RSb290KS5kaXNjb3ZlckVudHJpZXNQdWJsaWMoXG4gICAgICBbZW50cnlGaWxlXSxcbiAgICAgIGpvaW4odGVzdFJvb3QsICdvdXQnKVxuICAgICk7XG5cbiAgICBleHBlY3QoZGlzY292ZXJlZC5kaXNjb3ZlcmVkU3RlcHMpLnRvRXF1YWwobmV3IFNldChbbm9ybWFsaXplKHN0ZXBGaWxlKV0pKTtcbiAgICBleHBlY3QocGFyZW50SGFzQ2hpbGQobm9ybWFsaXplKGVudHJ5RmlsZSksIG5vcm1hbGl6ZShzdGVwRmlsZSkpKS50b0JlKFxuICAgICAgdHJ1ZVxuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdkaXNjb3ZlcnMgcmVsYXRpdmUgSlMgaW1wb3J0cyB3aG9zZSBiYXNlbmFtZSBpbmNsdWRlcyAuc3RlcCcsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBlbnRyeUZpbGUgPSBqb2luKHRlc3RSb290LCAnc3JjJywgJ2VudHJ5LnRzJyk7XG4gICAgY29uc3Qgd29ya2Zsb3dGaWxlID0gam9pbih0ZXN0Um9vdCwgJ3NyYycsICdoZWxsby5zdGVwLmpzJyk7XG5cbiAgICB3cml0ZUZpbGUoZW50cnlGaWxlLCBgaW1wb3J0ICcuL2hlbGxvLnN0ZXAnO1xcbmApO1xuICAgIHdyaXRlRmlsZShcbiAgICAgIHdvcmtmbG93RmlsZSxcbiAgICAgIGBleHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuKCkge1xuICAndXNlIHdvcmtmbG93JztcbiAgcmV0dXJuICdvayc7XG59XG5gXG4gICAgKTtcblxuICAgIGNvbnN0IGRpc2NvdmVyZWQgPSBhd2FpdCBjcmVhdGVCdWlsZGVyKHRlc3RSb290KS5kaXNjb3ZlckVudHJpZXNQdWJsaWMoXG4gICAgICBbZW50cnlGaWxlXSxcbiAgICAgIGpvaW4odGVzdFJvb3QsICdvdXQnKVxuICAgICk7XG5cbiAgICBleHBlY3QoZGlzY292ZXJlZC5kaXNjb3ZlcmVkV29ya2Zsb3dzKS50b0VxdWFsKFxuICAgICAgbmV3IFNldChbbm9ybWFsaXplKHdvcmtmbG93RmlsZSldKVxuICAgICk7XG4gICAgZXhwZWN0KHBhcmVudEhhc0NoaWxkKG5vcm1hbGl6ZShlbnRyeUZpbGUpLCBub3JtYWxpemUod29ya2Zsb3dGaWxlKSkpLnRvQmUoXG4gICAgICB0cnVlXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ2Rpc2NvdmVycyB3b3JrZmxvdyBmaWxlcyByZWFjaGVkIHRocm91Z2ggYW4gaW1wb3J0ZWQgcGFja2FnZSByZS1leHBvcnQnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZW50cnlGaWxlID0gam9pbih0ZXN0Um9vdCwgJ3NyYycsICdlbnRyeS50cycpO1xuICAgIGNvbnN0IHBhY2thZ2VSb290ID0gam9pbih0ZXN0Um9vdCwgJ25vZGVfbW9kdWxlcycsICd3b3JrZmxvdy1wa2cnKTtcbiAgICBjb25zdCBwYWNrYWdlSW5kZXggPSBqb2luKHBhY2thZ2VSb290LCAnaW5kZXguanMnKTtcbiAgICBjb25zdCBwYWNrYWdlV29ya2Zsb3cgPSBqb2luKHBhY2thZ2VSb290LCAnd29ya2Zsb3cuanMnKTtcblxuICAgIHdyaXRlRmlsZShlbnRyeUZpbGUsIGBpbXBvcnQgeyBydW4gfSBmcm9tICd3b3JrZmxvdy1wa2cnO1xcbnZvaWQgcnVuO1xcbmApO1xuICAgIHdyaXRlRmlsZShcbiAgICAgIGpvaW4ocGFja2FnZVJvb3QsICdwYWNrYWdlLmpzb24nKSxcbiAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgbmFtZTogJ3dvcmtmbG93LXBrZycsXG4gICAgICAgIHZlcnNpb246ICcxLjAuMCcsXG4gICAgICAgIG1haW46ICdpbmRleC5qcycsXG4gICAgICAgIGRlcGVuZGVuY2llczoge1xuICAgICAgICAgIHdvcmtmbG93OiAnXjEuMC4wJyxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgKTtcbiAgICB3cml0ZUZpbGUocGFja2FnZUluZGV4LCBgZXhwb3J0IHsgcnVuIH0gZnJvbSAnLi93b3JrZmxvdy5qcyc7XFxuYCk7XG4gICAgd3JpdGVGaWxlKFxuICAgICAgcGFja2FnZVdvcmtmbG93LFxuICAgICAgYGV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW4oKSB7XG4gIFwidXNlIHdvcmtmbG93XCI7XG4gIHJldHVybiBcIm9rXCI7XG59XG5gXG4gICAgKTtcblxuICAgIGNvbnN0IGRpc2NvdmVyZWQgPSBhd2FpdCBjcmVhdGVCdWlsZGVyKHRlc3RSb290KS5kaXNjb3ZlckVudHJpZXNQdWJsaWMoXG4gICAgICBbZW50cnlGaWxlXSxcbiAgICAgIGpvaW4odGVzdFJvb3QsICdvdXQnKVxuICAgICk7XG5cbiAgICBleHBlY3QoZGlzY292ZXJlZC5kaXNjb3ZlcmVkV29ya2Zsb3dzKS50b0VxdWFsKFxuICAgICAgbmV3IFNldChbbm9ybWFsaXplKHBhY2thZ2VXb3JrZmxvdyldKVxuICAgICk7XG4gICAgZXhwZWN0KFxuICAgICAgcGFyZW50SGFzQ2hpbGQobm9ybWFsaXplKHBhY2thZ2VJbmRleCksIG5vcm1hbGl6ZShwYWNrYWdlV29ya2Zsb3cpKVxuICAgICkudG9CZSh0cnVlKTtcbiAgfSk7XG5cbiAgaXQoJ2Rpc2NvdmVycyBmaWxlcyByZWFjaGVkIHRocm91Z2ggdHNjb25maWcgcGF0aCBhbGlhc2VzJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGVudHJ5RmlsZSA9IGpvaW4odGVzdFJvb3QsICdzcmMnLCAnZW50cnkudHMnKTtcbiAgICBjb25zdCByZWdpc3RyeUZpbGUgPSBqb2luKHRlc3RSb290LCAnc3JjJywgJ193b3JrZmxvd3MudHMnKTtcbiAgICBjb25zdCB3b3JrZmxvd0ZpbGUgPSBqb2luKHRlc3RSb290LCAnc3JjJywgJ3dvcmtmbG93cycsICd3b3JrZmxvdy50cycpO1xuICAgIGNvbnN0IHRzY29uZmlnRmlsZSA9IGpvaW4odGVzdFJvb3QsICd0c2NvbmZpZy5qc29uJyk7XG5cbiAgICB3cml0ZUZpbGUoXG4gICAgICB0c2NvbmZpZ0ZpbGUsXG4gICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGNvbXBpbGVyT3B0aW9uczoge1xuICAgICAgICAgIHBhdGhzOiB7XG4gICAgICAgICAgICAnQC8qJzogWycuL3NyYy8qJ10sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgKTtcbiAgICB3cml0ZUZpbGUoZW50cnlGaWxlLCBgaW1wb3J0IHsgYWxsV29ya2Zsb3dzIH0gZnJvbSAnQC9fd29ya2Zsb3dzJztcXG5gKTtcbiAgICB3cml0ZUZpbGUoXG4gICAgICByZWdpc3RyeUZpbGUsXG4gICAgICBgaW1wb3J0ICogYXMgd29ya2Zsb3cgZnJvbSAnLi93b3JrZmxvd3Mvd29ya2Zsb3cnO1xuZXhwb3J0IGNvbnN0IGFsbFdvcmtmbG93cyA9IHsgd29ya2Zsb3cgfTtcbmBcbiAgICApO1xuICAgIHdyaXRlRmlsZShcbiAgICAgIHdvcmtmbG93RmlsZSxcbiAgICAgIGBleHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuKCkge1xuICAndXNlIHdvcmtmbG93JztcbiAgcmV0dXJuICdvayc7XG59XG5gXG4gICAgKTtcblxuICAgIGNvbnN0IGRpc2NvdmVyZWQgPSBhd2FpdCBjcmVhdGVCdWlsZGVyKHRlc3RSb290KS5kaXNjb3ZlckVudHJpZXNQdWJsaWMoXG4gICAgICBbZW50cnlGaWxlXSxcbiAgICAgIGpvaW4odGVzdFJvb3QsICdvdXQnKSxcbiAgICAgIHRzY29uZmlnRmlsZVxuICAgICk7XG5cbiAgICBleHBlY3QoZGlzY292ZXJlZC5kaXNjb3ZlcmVkV29ya2Zsb3dzKS50b0VxdWFsKFxuICAgICAgbmV3IFNldChbbm9ybWFsaXplKHdvcmtmbG93RmlsZSldKVxuICAgICk7XG4gICAgZXhwZWN0KHBhcmVudEhhc0NoaWxkKG5vcm1hbGl6ZShlbnRyeUZpbGUpLCBub3JtYWxpemUod29ya2Zsb3dGaWxlKSkpLnRvQmUoXG4gICAgICB0cnVlXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ2Rpc2NvdmVycyBkb3R0ZWQgZmlsZXMgcmVhY2hlZCB0aHJvdWdoIHRzY29uZmlnIHBhdGggYWxpYXNlcycsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBlbnRyeUZpbGUgPSBqb2luKHRlc3RSb290LCAnc3JjJywgJ2VudHJ5LnRzJyk7XG4gICAgY29uc3QgcmVnaXN0cnlGaWxlID0gam9pbih0ZXN0Um9vdCwgJ3NyYycsICd3b3JrZmxvd3MnLCAnaGVsbG8uaW5kZXgudHMnKTtcbiAgICBjb25zdCB3b3JrZmxvd0ZpbGUgPSBqb2luKHRlc3RSb290LCAnc3JjJywgJ3dvcmtmbG93cycsICdoZWxsby50cycpO1xuICAgIGNvbnN0IHRzY29uZmlnRmlsZSA9IGpvaW4odGVzdFJvb3QsICd0c2NvbmZpZy5qc29uJyk7XG5cbiAgICB3cml0ZUZpbGUoXG4gICAgICB0c2NvbmZpZ0ZpbGUsXG4gICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGNvbXBpbGVyT3B0aW9uczoge1xuICAgICAgICAgIHBhdGhzOiB7XG4gICAgICAgICAgICAnQC8qJzogWycuL3NyYy8qJ10sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgKTtcbiAgICB3cml0ZUZpbGUoXG4gICAgICBlbnRyeUZpbGUsXG4gICAgICBgaW1wb3J0IHsgaGVsbG9Xb3JrZmxvdyB9IGZyb20gJ0Avd29ya2Zsb3dzL2hlbGxvLmluZGV4JztcXG5gXG4gICAgKTtcbiAgICB3cml0ZUZpbGUocmVnaXN0cnlGaWxlLCBgZXhwb3J0IHsgaGVsbG9Xb3JrZmxvdyB9IGZyb20gJy4vaGVsbG8nO1xcbmApO1xuICAgIHdyaXRlRmlsZShcbiAgICAgIHdvcmtmbG93RmlsZSxcbiAgICAgIGBleHBvcnQgYXN5bmMgZnVuY3Rpb24gaGVsbG9Xb3JrZmxvdygpIHtcbiAgJ3VzZSB3b3JrZmxvdyc7XG4gIHJldHVybiAnb2snO1xufVxuYFxuICAgICk7XG5cbiAgICBjb25zdCBkaXNjb3ZlcmVkID0gYXdhaXQgY3JlYXRlQnVpbGRlcih0ZXN0Um9vdCkuZGlzY292ZXJFbnRyaWVzUHVibGljKFxuICAgICAgW2VudHJ5RmlsZV0sXG4gICAgICBqb2luKHRlc3RSb290LCAnb3V0JyksXG4gICAgICB0c2NvbmZpZ0ZpbGVcbiAgICApO1xuXG4gICAgZXhwZWN0KGRpc2NvdmVyZWQuZGlzY292ZXJlZFdvcmtmbG93cykudG9FcXVhbChcbiAgICAgIG5ldyBTZXQoW25vcm1hbGl6ZSh3b3JrZmxvd0ZpbGUpXSlcbiAgICApO1xuICB9KTtcblxuICBpdCgnaWdub3JlcyBub24tc291cmNlIGZpbGVzIHJlYWNoZWQgdGhyb3VnaCB0c2NvbmZpZyBwYXRoIGFsaWFzZXMnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZW50cnlGaWxlID0gam9pbih0ZXN0Um9vdCwgJ3NyYycsICdlbnRyeS50cycpO1xuICAgIGNvbnN0IGFzc2V0RmlsZSA9IGpvaW4odGVzdFJvb3QsICdzcmMnLCAnc3R5bGVzJywgJ2FwcC5jc3MnKTtcbiAgICBjb25zdCB0c2NvbmZpZ0ZpbGUgPSBqb2luKHRlc3RSb290LCAndHNjb25maWcuanNvbicpO1xuXG4gICAgd3JpdGVGaWxlKFxuICAgICAgdHNjb25maWdGaWxlLFxuICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBjb21waWxlck9wdGlvbnM6IHtcbiAgICAgICAgICBwYXRoczoge1xuICAgICAgICAgICAgJ0AvKic6IFsnLi9zcmMvKiddLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICk7XG4gICAgd3JpdGVGaWxlKGVudHJ5RmlsZSwgYGltcG9ydCAnQC9zdHlsZXMvYXBwLmNzcyc7XFxuYCk7XG4gICAgd3JpdGVGaWxlKGFzc2V0RmlsZSwgYCd1c2Ugd29ya2Zsb3cnO1xcbmApO1xuXG4gICAgY29uc3QgZGlzY292ZXJlZCA9IGF3YWl0IGNyZWF0ZUJ1aWxkZXIodGVzdFJvb3QpLmRpc2NvdmVyRW50cmllc1B1YmxpYyhcbiAgICAgIFtlbnRyeUZpbGVdLFxuICAgICAgam9pbih0ZXN0Um9vdCwgJ291dCcpLFxuICAgICAgdHNjb25maWdGaWxlXG4gICAgKTtcblxuICAgIGV4cGVjdChkaXNjb3ZlcmVkLmRpc2NvdmVyZWRXb3JrZmxvd3MpLnRvRXF1YWwobmV3IFNldCgpKTtcbiAgICBleHBlY3QoZGlzY292ZXJlZC5kaXNjb3ZlcmVkRmlsZXMpLnRvRXF1YWwobmV3IFNldChbbm9ybWFsaXplKGVudHJ5RmlsZSldKSk7XG4gIH0pO1xuXG4gIGl0KCdkaXNjb3ZlcnMgcGF0aCBhbGlhc2VzIGluaGVyaXRlZCB0aHJvdWdoIHRzY29uZmlnIGV4dGVuZHMnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZW50cnlGaWxlID0gam9pbih0ZXN0Um9vdCwgJ3NyYycsICdlbnRyeS50cycpO1xuICAgIGNvbnN0IHdvcmtmbG93RmlsZSA9IGpvaW4odGVzdFJvb3QsICdzcmMnLCAnd29ya2Zsb3dzJywgJ3dvcmtmbG93LnRzJyk7XG4gICAgY29uc3QgYmFzZVRzY29uZmlnRmlsZSA9IGpvaW4odGVzdFJvb3QsICd0c2NvbmZpZy5iYXNlLmpzb24nKTtcbiAgICBjb25zdCB0c2NvbmZpZ0ZpbGUgPSBqb2luKHRlc3RSb290LCAndHNjb25maWcuanNvbicpO1xuXG4gICAgd3JpdGVGaWxlKFxuICAgICAgYmFzZVRzY29uZmlnRmlsZSxcbiAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgY29tcGlsZXJPcHRpb25zOiB7XG4gICAgICAgICAgYmFzZVVybDogJy4nLFxuICAgICAgICAgIHBhdGhzOiB7XG4gICAgICAgICAgICAnQGJhc2UvKic6IFsnLi9zcmMvKiddLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICk7XG4gICAgd3JpdGVGaWxlKFxuICAgICAgdHNjb25maWdGaWxlLFxuICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBleHRlbmRzOiAnLi90c2NvbmZpZy5iYXNlLmpzb24nLFxuICAgICAgfSlcbiAgICApO1xuICAgIHdyaXRlRmlsZShlbnRyeUZpbGUsIGBpbXBvcnQgeyBydW4gfSBmcm9tICdAYmFzZS93b3JrZmxvd3Mvd29ya2Zsb3cnO1xcbmApO1xuICAgIHdyaXRlRmlsZShcbiAgICAgIHdvcmtmbG93RmlsZSxcbiAgICAgIGBleHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuKCkge1xuICAndXNlIHdvcmtmbG93JztcbiAgcmV0dXJuICdvayc7XG59XG5gXG4gICAgKTtcblxuICAgIGNvbnN0IGRpc2NvdmVyZWQgPSBhd2FpdCBjcmVhdGVCdWlsZGVyKHRlc3RSb290KS5kaXNjb3ZlckVudHJpZXNQdWJsaWMoXG4gICAgICBbZW50cnlGaWxlXSxcbiAgICAgIGpvaW4odGVzdFJvb3QsICdvdXQnKSxcbiAgICAgIHRzY29uZmlnRmlsZVxuICAgICk7XG5cbiAgICBleHBlY3QoZGlzY292ZXJlZC5kaXNjb3ZlcmVkV29ya2Zsb3dzKS50b0VxdWFsKFxuICAgICAgbmV3IFNldChbbm9ybWFsaXplKHdvcmtmbG93RmlsZSldKVxuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdkaXNjb3ZlcnMgcGF0aCBhbGlhc2VzIHdpdGggbXVsdGlwbGUgd2lsZGNhcmRzJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGVudHJ5RmlsZSA9IGpvaW4odGVzdFJvb3QsICdzcmMnLCAnZW50cnkudHMnKTtcbiAgICBjb25zdCB3b3JrZmxvd0ZpbGUgPSBqb2luKFxuICAgICAgdGVzdFJvb3QsXG4gICAgICAnc3JjJyxcbiAgICAgICdmZWF0dXJlcycsXG4gICAgICAnYmlsbGluZycsXG4gICAgICAnZmxvd3MnLFxuICAgICAgJ2NoYXJnZS50cydcbiAgICApO1xuICAgIGNvbnN0IHRzY29uZmlnRmlsZSA9IGpvaW4odGVzdFJvb3QsICd0c2NvbmZpZy5qc29uJyk7XG5cbiAgICB3cml0ZUZpbGUoXG4gICAgICB0c2NvbmZpZ0ZpbGUsXG4gICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGNvbXBpbGVyT3B0aW9uczoge1xuICAgICAgICAgIHBhdGhzOiB7XG4gICAgICAgICAgICAnQGZlYXR1cmUvKi93b3JrZmxvdy8qJzogWycuL3NyYy9mZWF0dXJlcy8qL2Zsb3dzLyonXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICApO1xuICAgIHdyaXRlRmlsZShcbiAgICAgIGVudHJ5RmlsZSxcbiAgICAgIGBpbXBvcnQgeyBjaGFyZ2UgfSBmcm9tICdAZmVhdHVyZS9iaWxsaW5nL3dvcmtmbG93L2NoYXJnZSc7XFxuYFxuICAgICk7XG4gICAgd3JpdGVGaWxlKFxuICAgICAgd29ya2Zsb3dGaWxlLFxuICAgICAgYGV4cG9ydCBhc3luYyBmdW5jdGlvbiBjaGFyZ2UoKSB7XG4gICd1c2Ugd29ya2Zsb3cnO1xuICByZXR1cm4gJ29rJztcbn1cbmBcbiAgICApO1xuXG4gICAgY29uc3QgZGlzY292ZXJlZCA9IGF3YWl0IGNyZWF0ZUJ1aWxkZXIodGVzdFJvb3QpLmRpc2NvdmVyRW50cmllc1B1YmxpYyhcbiAgICAgIFtlbnRyeUZpbGVdLFxuICAgICAgam9pbih0ZXN0Um9vdCwgJ291dCcpLFxuICAgICAgdHNjb25maWdGaWxlXG4gICAgKTtcblxuICAgIGV4cGVjdChkaXNjb3ZlcmVkLmRpc2NvdmVyZWRXb3JrZmxvd3MpLnRvRXF1YWwoXG4gICAgICBuZXcgU2V0KFtub3JtYWxpemUod29ya2Zsb3dGaWxlKV0pXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ2lnbm9yZXMgaW1wb3J0cyB0aGF0IG9ubHkgYXBwZWFyIGluc2lkZSBjb21tZW50cycsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBlbnRyeUZpbGUgPSBqb2luKHRlc3RSb290LCAnc3JjJywgJ2VudHJ5LnRzJyk7XG4gICAgY29uc3QgcmVnaXN0cnlGaWxlID0gam9pbih0ZXN0Um9vdCwgJ3NyYycsICdfd29ya2Zsb3dzLnRzJyk7XG4gICAgY29uc3Qgd29ya2Zsb3dGaWxlID0gam9pbih0ZXN0Um9vdCwgJ3NyYycsICd3b3JrZmxvd3MnLCAnc2ltcGxlLnRzJyk7XG5cbiAgICB3cml0ZUZpbGUoZW50cnlGaWxlLCBgaW1wb3J0ICcuL193b3JrZmxvd3MnO1xcbmApO1xuICAgIHdyaXRlRmlsZShcbiAgICAgIHJlZ2lzdHJ5RmlsZSxcbiAgICAgIGAvLyBpbXBvcnQgKiBhcyBzaW1wbGUgZnJvbSAnLi93b3JrZmxvd3Mvc2ltcGxlJztcblxuZXhwb3J0IGNvbnN0IGFsbFdvcmtmbG93cyA9IHtcbiAgJ3dvcmtmbG93cy9zaW1wbGUudHMnOiBzaW1wbGUsXG59IGFzIGNvbnN0O1xuYFxuICAgICk7XG4gICAgd3JpdGVGaWxlKFxuICAgICAgd29ya2Zsb3dGaWxlLFxuICAgICAgYGV4cG9ydCBhc3luYyBmdW5jdGlvbiBzaW1wbGUoKSB7XG4gICd1c2Ugd29ya2Zsb3cnO1xufVxuYFxuICAgICk7XG5cbiAgICBjb25zdCBkaXNjb3ZlcmVkID0gYXdhaXQgY3JlYXRlQnVpbGRlcih0ZXN0Um9vdCkuZGlzY292ZXJFbnRyaWVzUHVibGljKFxuICAgICAgW2VudHJ5RmlsZV0sXG4gICAgICBqb2luKHRlc3RSb290LCAnb3V0JylcbiAgICApO1xuXG4gICAgZXhwZWN0KGRpc2NvdmVyZWQuZGlzY292ZXJlZFdvcmtmbG93cykudG9FcXVhbChuZXcgU2V0KCkpO1xuICAgIGV4cGVjdChkaXNjb3ZlcmVkLmRpc2NvdmVyZWRGaWxlcykudG9FcXVhbChcbiAgICAgIG5ldyBTZXQoW25vcm1hbGl6ZShlbnRyeUZpbGUpLCBub3JtYWxpemUocmVnaXN0cnlGaWxlKV0pXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ2RvZXMgbm90IHRyZWF0IHJlZ2V4IGxpdGVyYWxzIGFzIGNvbW1lbnRzJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGVudHJ5RmlsZSA9IGpvaW4odGVzdFJvb3QsICdzcmMnLCAnZW50cnkudHMnKTtcbiAgICBjb25zdCByZWdpc3RyeUZpbGUgPSBqb2luKHRlc3RSb290LCAnc3JjJywgJ193b3JrZmxvd3MudHMnKTtcbiAgICBjb25zdCB3b3JrZmxvd0ZpbGUgPSBqb2luKHRlc3RSb290LCAnc3JjJywgJ3dvcmtmbG93cycsICdzaW1wbGUudHMnKTtcblxuICAgIHdyaXRlRmlsZShlbnRyeUZpbGUsIGBpbXBvcnQgJy4vX3dvcmtmbG93cyc7XFxuYCk7XG4gICAgd3JpdGVGaWxlKFxuICAgICAgcmVnaXN0cnlGaWxlLFxuICAgICAgYGNvbnN0IGNvbW1lbnRTdGFydENoYXJzID0gL1svKl0vO1xuY29uc3QgcHJvdG9jb2wgPSAvaHR0cHM/OlxcXFwvXFxcXC8vO1xuaW1wb3J0ICcuL3dvcmtmbG93cy9zaW1wbGUnO1xuYFxuICAgICk7XG4gICAgd3JpdGVGaWxlKFxuICAgICAgd29ya2Zsb3dGaWxlLFxuICAgICAgYGV4cG9ydCBhc3luYyBmdW5jdGlvbiBzaW1wbGUoKSB7XG4gICd1c2Ugd29ya2Zsb3cnO1xufVxuYFxuICAgICk7XG5cbiAgICBjb25zdCBkaXNjb3ZlcmVkID0gYXdhaXQgY3JlYXRlQnVpbGRlcih0ZXN0Um9vdCkuZGlzY292ZXJFbnRyaWVzUHVibGljKFxuICAgICAgW2VudHJ5RmlsZV0sXG4gICAgICBqb2luKHRlc3RSb290LCAnb3V0JylcbiAgICApO1xuXG4gICAgZXhwZWN0KGRpc2NvdmVyZWQuZGlzY292ZXJlZFdvcmtmbG93cykudG9FcXVhbChcbiAgICAgIG5ldyBTZXQoW25vcm1hbGl6ZSh3b3JrZmxvd0ZpbGUpXSlcbiAgICApO1xuICB9KTtcblxuICBpdCgndXNlcyBuZWFyZXN0IG5lc3RlZCBqc2NvbmZpZyBhbGlhc2VzIGluIG1vbm9yZXBvIHBhY2thZ2VzJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHJvb3RUc2NvbmZpZ0ZpbGUgPSBqb2luKHRlc3RSb290LCAndHNjb25maWcuanNvbicpO1xuICAgIGNvbnN0IHBhY2thZ2VSb290ID0gam9pbih0ZXN0Um9vdCwgJ3BhY2thZ2VzJywgJ2FwcCcpO1xuICAgIGNvbnN0IGVudHJ5RmlsZSA9IGpvaW4ocGFja2FnZVJvb3QsICdzcmMnLCAnZW50cnkuanMnKTtcbiAgICBjb25zdCB3b3JrZmxvd0ZpbGUgPSBqb2luKHBhY2thZ2VSb290LCAnc3JjJywgJ3dvcmtmbG93LmpzJyk7XG5cbiAgICB3cml0ZUZpbGUoXG4gICAgICByb290VHNjb25maWdGaWxlLFxuICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBjb21waWxlck9wdGlvbnM6IHtcbiAgICAgICAgICBwYXRoczoge1xuICAgICAgICAgICAgJ0Byb290LyonOiBbJy4vcm9vdC8qJ10sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgKTtcbiAgICB3cml0ZUZpbGUoXG4gICAgICBqb2luKHBhY2thZ2VSb290LCAnanNjb25maWcuanNvbicpLFxuICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBjb21waWxlck9wdGlvbnM6IHtcbiAgICAgICAgICBwYXRoczoge1xuICAgICAgICAgICAgJyMvKic6IFsnLi9zcmMvKiddLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICk7XG4gICAgd3JpdGVGaWxlKGVudHJ5RmlsZSwgYGltcG9ydCB7IHJ1biB9IGZyb20gJyMvd29ya2Zsb3cnO1xcbmApO1xuICAgIHdyaXRlRmlsZShcbiAgICAgIHdvcmtmbG93RmlsZSxcbiAgICAgIGBleHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuKCkge1xuICBcInVzZSB3b3JrZmxvd1wiO1xuICByZXR1cm4gXCJva1wiO1xufVxuYFxuICAgICk7XG5cbiAgICBjb25zdCBkaXNjb3ZlcmVkID0gYXdhaXQgY3JlYXRlQnVpbGRlcih0ZXN0Um9vdCkuZGlzY292ZXJFbnRyaWVzUHVibGljKFxuICAgICAgW2VudHJ5RmlsZV0sXG4gICAgICBqb2luKHRlc3RSb290LCAnb3V0JylcbiAgICApO1xuXG4gICAgZXhwZWN0KGRpc2NvdmVyZWQuZGlzY292ZXJlZFdvcmtmbG93cykudG9FcXVhbChcbiAgICAgIG5ldyBTZXQoW25vcm1hbGl6ZSh3b3JrZmxvd0ZpbGUpXSlcbiAgICApO1xuICB9KTtcblxuICBpdCgnb25seSB0cmVhdHMgc2VyZGUgZmlsZXMgYXMgcmVnaXN0cmF0aW9uIGNhbmRpZGF0ZXMgd2hlbiB0aGV5IGRlZmluZSBzdGF0aWMgc2VyZGUgbWV0aG9kcycsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBlbnRyeUZpbGUgPSBqb2luKHRlc3RSb290LCAnc3JjJywgJ2VudHJ5LnRzJyk7XG4gICAgY29uc3QgcmVkdWNlckZpbGUgPSBqb2luKHRlc3RSb290LCAnc3JjJywgJ3JlZHVjZXIudHMnKTtcbiAgICBjb25zdCBzZXJkZUZpbGUgPSBqb2luKHRlc3RSb290LCAnc3JjJywgJ3NlcmRlLnRzJyk7XG5cbiAgICB3cml0ZUZpbGUoXG4gICAgICBlbnRyeUZpbGUsXG4gICAgICBgaW1wb3J0ICcuL3JlZHVjZXInO1xuaW1wb3J0ICcuL3NlcmRlJztcbmBcbiAgICApO1xuICAgIHdyaXRlRmlsZShcbiAgICAgIHJlZHVjZXJGaWxlLFxuICAgICAgYGltcG9ydCB7IFdPUktGTE9XX1NFUklBTElaRSB9IGZyb20gJ0B3b3JrZmxvdy9zZXJkZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiByZWR1Y2VyKHZhbHVlOiB1bmtub3duKSB7XG4gIHJldHVybiB2YWx1ZT8uY29uc3RydWN0b3I/LltXT1JLRkxPV19TRVJJQUxJWkVdO1xufVxuYFxuICAgICk7XG4gICAgd3JpdGVGaWxlKFxuICAgICAgc2VyZGVGaWxlLFxuICAgICAgYGltcG9ydCB7IFdPUktGTE9XX1NFUklBTElaRSBhcyBXUyB9IGZyb20gJ0B3b3JrZmxvdy9zZXJkZSc7XG5cbmV4cG9ydCBjbGFzcyBWYWx1ZSB7XG4gIHN0YXRpYyBjbGFzc0lkID0gJ1ZhbHVlJztcbiAgc3RhdGljIFtXU10odmFsdWU6IFZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59XG5gXG4gICAgKTtcblxuICAgIGNvbnN0IGRpc2NvdmVyZWQgPSBhd2FpdCBjcmVhdGVCdWlsZGVyKHRlc3RSb290KS5kaXNjb3ZlckVudHJpZXNQdWJsaWMoXG4gICAgICBbZW50cnlGaWxlXSxcbiAgICAgIGpvaW4odGVzdFJvb3QsICdvdXQnKVxuICAgICk7XG5cbiAgICBleHBlY3QoZGlzY292ZXJlZC5kaXNjb3ZlcmVkU2VyZGVGaWxlcykudG9FcXVhbChcbiAgICAgIG5ldyBTZXQoW25vcm1hbGl6ZShzZXJkZUZpbGUpXSlcbiAgICApO1xuICB9KTtcblxuICBpdCgnY2F0ZWdvcml6ZXMgc3RlcCwgd29ya2Zsb3csIGFuZCBzZXJkZSB1c2FnZSBpbmRlcGVuZGVudGx5JywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGVudHJ5RmlsZSA9IGpvaW4odGVzdFJvb3QsICdzcmMnLCAnZW50cnkudHMnKTtcbiAgICBjb25zdCBzdGVwRmlsZSA9IGpvaW4odGVzdFJvb3QsICdzcmMnLCAnc3RlcC50cycpO1xuICAgIGNvbnN0IHdvcmtmbG93RmlsZSA9IGpvaW4odGVzdFJvb3QsICdzcmMnLCAnd29ya2Zsb3cudHMnKTtcbiAgICBjb25zdCBzZXJkZUZpbGUgPSBqb2luKHRlc3RSb290LCAnc3JjJywgJ3NlcmRlLnRzJyk7XG5cbiAgICB3cml0ZUZpbGUoXG4gICAgICBlbnRyeUZpbGUsXG4gICAgICBgaW1wb3J0ICcuL3N0ZXAnO1xuaW1wb3J0ICcuL3dvcmtmbG93JztcbmltcG9ydCAnLi9zZXJkZSc7XG5gXG4gICAgKTtcbiAgICB3cml0ZUZpbGUoXG4gICAgICBzdGVwRmlsZSxcbiAgICAgIGBleHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuU3RlcCgpIHtcbiAgJ3VzZSBzdGVwJztcbiAgcmV0dXJuICdvayc7XG59XG5gXG4gICAgKTtcbiAgICB3cml0ZUZpbGUoXG4gICAgICB3b3JrZmxvd0ZpbGUsXG4gICAgICBgZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bldvcmtmbG93KCkge1xuICAndXNlIHdvcmtmbG93JztcbiAgcmV0dXJuICdvayc7XG59XG5gXG4gICAgKTtcbiAgICB3cml0ZUZpbGUoXG4gICAgICBzZXJkZUZpbGUsXG4gICAgICBgZXhwb3J0IGNsYXNzIFZhbHVlIHtcbiAgc3RhdGljIGNsYXNzSWQgPSAnVmFsdWUnO1xuICBzdGF0aWMgW1N5bWJvbC5mb3IoJ3dvcmtmbG93LXNlcmlhbGl6ZScpXSh2YWx1ZTogVmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cbmBcbiAgICApO1xuXG4gICAgY29uc3QgZGlzY292ZXJlZCA9IGF3YWl0IGNyZWF0ZUJ1aWxkZXIodGVzdFJvb3QpLmRpc2NvdmVyRW50cmllc1B1YmxpYyhcbiAgICAgIFtlbnRyeUZpbGVdLFxuICAgICAgam9pbih0ZXN0Um9vdCwgJ291dCcpXG4gICAgKTtcblxuICAgIGV4cGVjdChkaXNjb3ZlcmVkLmRpc2NvdmVyZWRTdGVwcykudG9FcXVhbChuZXcgU2V0KFtub3JtYWxpemUoc3RlcEZpbGUpXSkpO1xuICAgIGV4cGVjdChkaXNjb3ZlcmVkLmRpc2NvdmVyZWRXb3JrZmxvd3MpLnRvRXF1YWwoXG4gICAgICBuZXcgU2V0KFtub3JtYWxpemUod29ya2Zsb3dGaWxlKV0pXG4gICAgKTtcbiAgICBleHBlY3QoZGlzY292ZXJlZC5kaXNjb3ZlcmVkU2VyZGVGaWxlcykudG9FcXVhbChcbiAgICAgIG5ldyBTZXQoW25vcm1hbGl6ZShzZXJkZUZpbGUpXSlcbiAgICApO1xuICB9KTtcblxuICBpdCgnaWdub3JlcyBzZXJkZSBleGFtcGxlcyB0aGF0IG9ubHkgYXBwZWFyIGluc2lkZSBjb21tZW50cycsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBlbnRyeUZpbGUgPSBqb2luKHRlc3RSb290LCAnc3JjJywgJ2VudHJ5LnRzJyk7XG4gICAgY29uc3QgZG9jc0ZpbGUgPSBqb2luKHRlc3RSb290LCAnc3JjJywgJ2RvY3MudHMnKTtcblxuICAgIHdyaXRlRmlsZShlbnRyeUZpbGUsIGBpbXBvcnQgJy4vZG9jcyc7XFxuYCk7XG4gICAgd3JpdGVGaWxlKFxuICAgICAgZG9jc0ZpbGUsXG4gICAgICBgLyoqXG4gKiBpbXBvcnQgeyBXT1JLRkxPV19TRVJJQUxJWkUgfSBmcm9tICdAd29ya2Zsb3cvc2VyZGUnO1xuICpcbiAqIGNsYXNzIEV4YW1wbGUge1xuICogICBzdGF0aWMgW1dPUktGTE9XX1NFUklBTElaRV0odmFsdWUpIHtcbiAqICAgICByZXR1cm4gdmFsdWU7XG4gKiAgIH1cbiAqIH1cbiAqL1xuZXhwb3J0IGNvbnN0IFdPUktGTE9XX1NFUklBTElaRSA9IFN5bWJvbC5mb3IoJ3dvcmtmbG93LXNlcmlhbGl6ZScpO1xuYFxuICAgICk7XG5cbiAgICBjb25zdCBkaXNjb3ZlcmVkID0gYXdhaXQgY3JlYXRlQnVpbGRlcih0ZXN0Um9vdCkuZGlzY292ZXJFbnRyaWVzUHVibGljKFxuICAgICAgW2VudHJ5RmlsZV0sXG4gICAgICBqb2luKHRlc3RSb290LCAnb3V0JylcbiAgICApO1xuXG4gICAgZXhwZWN0KGRpc2NvdmVyZWQuZGlzY292ZXJlZFNlcmRlRmlsZXMpLnRvRXF1YWwobmV3IFNldCgpKTtcbiAgfSk7XG5cbiAgaXQoJ3JlbGF0aXZpemVzIG5lc3RlZCBwYWNrYWdlIHN0ZXAgcmVnaXN0cmF0aW9uIGltcG9ydHMnLCAoKSA9PiB7XG4gICAgY29uc3Qgcm91dGVEaXIgPSBqb2luKHRlc3RSb290LCAnYXBwJywgJy53ZWxsLWtub3duJywgJ3dvcmtmbG93JywgJ3YxJyk7XG4gICAgY29uc3QgZGlyZWN0UGFja2FnZUZpbGUgPSBqb2luKFxuICAgICAgdGVzdFJvb3QsXG4gICAgICAnbm9kZV9tb2R1bGVzJyxcbiAgICAgICdkaXJlY3QtcGtnJyxcbiAgICAgICdzdGVwLmpzJ1xuICAgICk7XG4gICAgY29uc3QgbmVzdGVkUGFja2FnZUZpbGUgPSBqb2luKFxuICAgICAgdGVzdFJvb3QsXG4gICAgICAnbm9kZV9tb2R1bGVzJyxcbiAgICAgICdwYXJlbnQtcGtnJyxcbiAgICAgICdub2RlX21vZHVsZXMnLFxuICAgICAgJ25lc3RlZC1wa2cnLFxuICAgICAgJ3N0ZXAuanMnXG4gICAgKTtcblxuICAgIHdyaXRlRmlsZShcbiAgICAgIGpvaW4odGVzdFJvb3QsICdwYWNrYWdlLmpzb24nKSxcbiAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgZGVwZW5kZW5jaWVzOiB7XG4gICAgICAgICAgJ2RpcmVjdC1wa2cnOiAnMS4wLjAnLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICApO1xuICAgIHdyaXRlRmlsZShcbiAgICAgIGpvaW4odGVzdFJvb3QsICdub2RlX21vZHVsZXMnLCAnZGlyZWN0LXBrZycsICdwYWNrYWdlLmpzb24nKSxcbiAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgbmFtZTogJ2RpcmVjdC1wa2cnLFxuICAgICAgICB2ZXJzaW9uOiAnMS4wLjAnLFxuICAgICAgICBleHBvcnRzOiB7XG4gICAgICAgICAgJy4vc3RlcCc6ICcuL3N0ZXAuanMnLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICApO1xuICAgIHdyaXRlRmlsZShkaXJlY3RQYWNrYWdlRmlsZSwgYGV4cG9ydCBjb25zdCBzdGVwID0gdHJ1ZTtcXG5gKTtcbiAgICB3cml0ZUZpbGUoXG4gICAgICBqb2luKFxuICAgICAgICB0ZXN0Um9vdCxcbiAgICAgICAgJ25vZGVfbW9kdWxlcycsXG4gICAgICAgICdwYXJlbnQtcGtnJyxcbiAgICAgICAgJ25vZGVfbW9kdWxlcycsXG4gICAgICAgICduZXN0ZWQtcGtnJyxcbiAgICAgICAgJ3BhY2thZ2UuanNvbidcbiAgICAgICksXG4gICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIG5hbWU6ICduZXN0ZWQtcGtnJyxcbiAgICAgICAgdmVyc2lvbjogJzEuMC4wJyxcbiAgICAgICAgZXhwb3J0czoge1xuICAgICAgICAgICcuL3N0ZXAnOiAnLi9zdGVwLmpzJyxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgKTtcbiAgICB3cml0ZUZpbGUobmVzdGVkUGFja2FnZUZpbGUsIGBleHBvcnQgY29uc3Qgc3RlcCA9IHRydWU7XFxuYCk7XG5cbiAgICBjb25zdCBidWlsZGVyID0gY3JlYXRlQnVpbGRlcih0ZXN0Um9vdCk7XG4gICAgZXhwZWN0KFxuICAgICAgYnVpbGRlci5jcmVhdGVSb3V0ZUltcG9ydFNwZWNpZmllclB1YmxpYyhkaXJlY3RQYWNrYWdlRmlsZSwgcm91dGVEaXIpXG4gICAgKS50b0JlKCdkaXJlY3QtcGtnL3N0ZXAnKTtcbiAgICBleHBlY3QoXG4gICAgICBidWlsZGVyLmNyZWF0ZVJvdXRlSW1wb3J0U3BlY2lmaWVyUHVibGljKG5lc3RlZFBhY2thZ2VGaWxlLCByb3V0ZURpcilcbiAgICApLnRvQmUoXG4gICAgICAnLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3BhcmVudC1wa2cvbm9kZV9tb2R1bGVzL25lc3RlZC1wa2cvc3RlcC5qcydcbiAgICApO1xuICB9KTtcbn0pO1xuIl19
453
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFzdC1kaXNjb3ZlcnkudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9mYXN0LWRpc2NvdmVyeS50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsV0FBVyxFQUNYLFlBQVksRUFDWixNQUFNLEVBQ04sYUFBYSxHQUNkLE1BQU0sU0FBUyxDQUFDO0FBQ2pCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDakMsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDMUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDckUsT0FBTyxFQUFFLFdBQVcsRUFBMEIsTUFBTSxtQkFBbUIsQ0FBQztBQUN4RSxPQUFPLEVBQ0wsYUFBYSxFQUNiLGNBQWMsR0FDZixNQUFNLHNDQUFzQyxDQUFDO0FBRzlDLE1BQU0sV0FBWSxTQUFRLFdBQVc7SUFDbkMsS0FBSyxDQUFDLEtBQUs7UUFDVCxRQUFRO0lBQ1YsQ0FBQztJQUVNLHFCQUFxQixDQUMxQixNQUFnQixFQUNoQixNQUFjLEVBQ2QsWUFBcUI7UUFFckIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVNLGdDQUFnQyxDQUNyQyxJQUFZLEVBQ1osUUFBZ0I7UUFFaEIsT0FBTyxJQUFJLENBQUMsMEJBQTBCLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3pELENBQUM7Q0FDRjtBQUVELE1BQU0sVUFBVSxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBRTFDLFNBQVMsU0FBUyxDQUFDLElBQVk7SUFDN0IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENB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QUFXO2FBQ3RCO1NBQ0YsQ0FBQyxDQUNILENBQUM7UUFDRixTQUFTLENBQUMsaUJBQWlCLEVBQUUsNkJBQTZCLENBQUMsQ0FBQztRQUM1RCxTQUFTLENBQ1AsSUFBSSxDQUNGLFFBQVEsRUFDUixjQUFjLEVBQ2QsWUFBWSxFQUNaLGNBQWMsRUFDZCxZQUFZLEVBQ1osY0FBYyxDQUNmLEVBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUNiLElBQUksRUFBRSxZQUFZO1lBQ2xCLE9BQU8sRUFBRSxPQUFPO1lBQ2hCLE9BQU8sRUFBRTtnQkFDUCxRQUFRLEVBQUUsV0FBVzthQUN0QjtTQUNGLENBQUMsQ0FDSCxDQUFDO1FBQ0YsU0FBUyxDQUFDLGlCQUFpQixFQUFFLDZCQUE2QixDQUFDLENBQUM7UUFFNUQsTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sQ0FDSixPQUFPLENBQUMsZ0NBQWdDLENBQUMsaUJBQWlCLEVBQUUsUUFBUSxDQUFDLENBQ3RFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDMUIsTUFBTSxDQUNKLE9BQU8sQ0FBQyxnQ0FBZ0MsQ0FBQyxpQkFBaUIsRUFBRSxRQUFRLENBQUMsQ0FDdEUsQ0FBQyxJQUFJLENBQ0oscUVBQXFFLENBQ3RFLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgbWtkaXJTeW5jLFxuICBta2R0ZW1wU3luYyxcbiAgcmVhbHBhdGhTeW5jLFxuICBybVN5bmMsXG4gIHdyaXRlRmlsZVN5bmMsXG59IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgdG1wZGlyIH0gZnJvbSAnbm9kZTpvcyc7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IGFmdGVyRWFjaCwgYmVmb3JlRWFjaCwgZGVzY3JpYmUsIGV4cGVjdCwgaXQgfSBmcm9tICd2aXRlc3QnO1xuaW1wb3J0IHsgQmFzZUJ1aWxkZXIsIHR5cGUgRGlzY292ZXJlZEVudHJpZXMgfSBmcm9tICcuL2Jhc2UtYnVpbGRlci5qcyc7XG5pbXBvcnQge1xuICBpbXBvcnRQYXJlbnRzLFxuICBwYXJlbnRIYXNDaGlsZCxcbn0gZnJvbSAnLi9kaXNjb3Zlci1lbnRyaWVzLWVzYnVpbGQtcGx1Z2luLmpzJztcbmltcG9ydCB0eXBlIHsgU3RhbmRhbG9uZUNvbmZpZyB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG5jbGFzcyBUZXN0QnVpbGRlciBleHRlbmRzIEJhc2VCdWlsZGVyIHtcbiAgYXN5bmMgYnVpbGQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gbm8tb3BcbiAgfVxuXG4gIHB1YmxpYyBkaXNjb3ZlckVudHJpZXNQdWJsaWMoXG4gICAgaW5wdXRzOiBzdHJpbmdbXSxcbiAgICBvdXRkaXI6IHN0cmluZyxcbiAgICB0c2NvbmZpZ1BhdGg/OiBzdHJpbmdcbiAgKTogUHJvbWlzZTxEaXNjb3ZlcmVkRW50cmllcz4ge1xuICAgIHJldHVybiB0aGlzLmRpc2NvdmVyRW50cmllcyhpbnB1dHMsIG91dGRpciwgdHNjb25maWdQYXRoKTtcbiAgfVxuXG4gIHB1YmxpYyBjcmVhdGVSb3V0ZUltcG9ydFNwZWNpZmllclB1YmxpYyhcbiAgICBmaWxlOiBzdHJpbmcsXG4gICAgcm91dGVEaXI6IHN0cmluZ1xuICApOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZVJvdXRlSW1wb3J0U3BlY2lmaWVyKGZpbGUsIHJvdXRlRGlyKTtcbiAgfVxufVxuXG5jb25zdCByZWFsVG1wZGlyID0gcmVhbHBhdGhTeW5jKHRtcGRpcigpKTtcblxuZnVuY3Rpb24gbm9ybWFsaXplKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBwYXRoLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbn1cblxuZnVuY3Rpb24gd3JpdGVGaWxlKHBhdGg6IHN0cmluZywgY29udGVudHM6IHN0cmluZyk6IHZvaWQge1xuICBta2RpclN5bmMoZGlybmFtZShwYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIHdyaXRlRmlsZVN5bmMocGF0aCwgY29udGVudHMsICd1dGYtOCcpO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVCdWlsZGVyKFxuICB3b3JraW5nRGlyOiBzdHJpbmcsXG4gIG92ZXJyaWRlcz86IFBhcnRpYWw8U3RhbmRhbG9uZUNvbmZpZz5cbik6IFRlc3RCdWlsZGVyIHtcbiAgY29uc3QgY29uZmlnOiBTdGFuZGFsb25lQ29uZmlnID0ge1xuICAgIGJ1aWxkVGFyZ2V0OiAnc3RhbmRhbG9uZScsXG4gICAgd29ya2luZ0RpcixcbiAgICBkaXJzOiBbJy4nXSxcbiAgICBzdGVwc0J1bmRsZVBhdGg6IGpvaW4od29ya2luZ0RpciwgJ3N0ZXBzLmpzJyksXG4gICAgd29ya2Zsb3dzQnVuZGxlUGF0aDogam9pbih3b3JraW5nRGlyLCAnd29ya2Zsb3dzLmpzJyksXG4gICAgd2ViaG9va0J1bmRsZVBhdGg6IGpvaW4od29ya2luZ0RpciwgJ3dlYmhvb2suanMnKSxcbiAgICAuLi5vdmVycmlkZXMsXG4gIH07XG4gIHJldHVybiBuZXcgVGVzdEJ1aWxkZXIoY29uZmlnKTtcbn1cblxuZGVzY3JpYmUoJ2Zhc3Qgd29ya2Zsb3cgZGlzY292ZXJ5JywgKCkgPT4ge1xuICBsZXQgdGVzdFJvb3Q6IHN0cmluZztcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICB0ZXN0Um9vdCA9IG1rZHRlbXBTeW5jKGpvaW4ocmVhbFRtcGRpciwgJ3dvcmtmbG93LWZhc3QtZGlzY292ZXJ5LScpKTtcbiAgICBpbXBvcnRQYXJlbnRzLmNsZWFyKCk7XG4gIH0pO1xuXG4gIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgaW1wb3J0UGFyZW50cy5jbGVhcigpO1xuICAgIHJtU3luYyh0ZXN0Um9vdCwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pO1xuICB9KTtcblxuICBpdCgnZGlzY292ZXJzIHRyYW5zaXRpdmUgcmVsYXRpdmUgc3RlcCBpbXBvcnRzIGFuZCB0cmFja3MgdGhlIHBhcmVudCBjaGFpbicsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBlbnRyeUZpbGUgPSBqb2luKHRlc3RSb290LCAnc3JjJywgJ2VudHJ5LnRzJyk7XG4gICAgY29uc3Qgd29ya2Zsb3dGaWxlID0gam9pbih0ZXN0Um9vdCwgJ3NyYycsICd3b3JrZmxvdy50cycpO1xuICAgIGNvbnN0IHN0ZXBGaWxlID0gam9pbih0ZXN0Um9vdCwgJ3NyYycsICdzdGVwLnRzJyk7XG5cbiAgICB3cml0ZUZpbGUoZW50cnlGaWxlLCBgaW1wb3J0ICcuL3dvcmtmbG93JztcXG5gKTtcbiAgICB3cml0ZUZpbGUod29ya2Zsb3dGaWxlLCBgaW1wb3J0IHsgZG9TdGVwIH0gZnJvbSAnLi9zdGVwJztcXG52b2lkIGRvU3RlcDtcXG5gKTtcbiAgICB3cml0ZUZpbGUoXG4gICAgICBzdGVwRmlsZSxcbiAgICAgIGBleHBvcnQgYXN5bmMgZnVuY3Rpb24gZG9TdGVwKCkge1xuICAndXNlIHN0ZXAnO1xuICByZXR1cm4gMTtcbn1cbmBcbiAgICApO1xuXG4gICAgY29uc3QgZGlzY292ZXJlZCA9IGF3YWl0IGNyZWF0ZUJ1aWxkZXIodGVzdFJvb3QpLmRpc2NvdmVyRW50cmllc1B1YmxpYyhcbiAgICAgIFtlbnRyeUZpbGVdLFxuICAgICAgam9pbih0ZXN0Um9vdCwgJ291dCcpXG4gICAgKTtcblxuICAgIGV4cGVjdChkaXNjb3ZlcmVkLmRpc2NvdmVyZWRTdGVwcykudG9FcXVhbChuZXcgU2V0KFtub3JtYWxpemUoc3RlcEZpbGUpXSkpO1xuICAgIGV4cGVjdChwYXJlbnRIYXNDaGlsZChub3JtYWxpemUoZW50cnlGaWxlKSwgbm9ybWFsaXplKHN0ZXBGaWxlKSkpLnRvQmUoXG4gICAgICB0cnVlXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ2Rpc2NvdmVycyByZWxhdGl2ZSBKUyBpbXBvcnRzIHdob3NlIGJhc2VuYW1lIGluY2x1ZGVzIC5zdGVwJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGVudHJ5RmlsZSA9IGpvaW4odGVzdFJvb3QsICdzcmMnLCAnZW50cnkudHMnKTtcbiAgICBjb25zdCB3b3JrZmxvd0ZpbGUgPSBqb2luKHRlc3RSb290LCAnc3JjJywgJ2hlbGxvLnN0ZXAuanMnKTtcblxuICAgIHdyaXRlRmlsZShlbnRyeUZpbGUsIGBpbXBvcnQgJy4vaGVsbG8uc3RlcCc7XFxuYCk7XG4gICAgd3JpdGVGaWxlKFxuICAgICAgd29ya2Zsb3dGaWxlLFxuICAgICAgYGV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW4oKSB7XG4gICd1c2Ugd29ya2Zsb3cnO1xuICByZXR1cm4gJ29rJztcbn1cbmBcbiAgICApO1xuXG4gICAgY29uc3QgZGlzY292ZXJlZCA9IGF3YWl0IGNyZWF0ZUJ1aWxkZXIodGVzdFJvb3QpLmRpc2NvdmVyRW50cmllc1B1YmxpYyhcbiAgICAgIFtlbnRyeUZpbGVdLFxuICAgICAgam9pbih0ZXN0Um9vdCwgJ291dCcpXG4gICAgKTtcblxuICAgIGV4cGVjdChkaXNjb3ZlcmVkLmRpc2NvdmVyZWRXb3JrZmxvd3MpLnRvRXF1YWwoXG4gICAgICBuZXcgU2V0KFtub3JtYWxpemUod29ya2Zsb3dGaWxlKV0pXG4gICAgKTtcbiAgICBleHBlY3QocGFyZW50SGFzQ2hpbGQobm9ybWFsaXplKGVudHJ5RmlsZSksIG5vcm1hbGl6ZSh3b3JrZmxvd0ZpbGUpKSkudG9CZShcbiAgICAgIHRydWVcbiAgICApO1xuICB9KTtcblxuICBpdCgnZGlzY292ZXJzIHdvcmtmbG93IGZpbGVzIHJlYWNoZWQgdGhyb3VnaCBhbiBpbXBvcnRlZCBwYWNrYWdlIHJlLWV4cG9ydCcsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBlbnRyeUZpbGUgPSBqb2luKHRlc3RSb290LCAnc3JjJywgJ2VudHJ5LnRzJyk7XG4gICAgY29uc3QgcGFja2FnZVJvb3QgPSBqb2luKHRlc3RSb290LCAnbm9kZV9tb2R1bGVzJywgJ3dvcmtmbG93LXBrZycpO1xuICAgIGNvbnN0IHBhY2thZ2VJbmRleCA9IGpvaW4ocGFja2FnZVJvb3QsICdpbmRleC5qcycpO1xuICAgIGNvbnN0IHBhY2thZ2VXb3JrZmxvdyA9IGpvaW4ocGFja2FnZVJvb3QsICd3b3JrZmxvdy5qcycpO1xuXG4gICAgd3JpdGVGaWxlKGVudHJ5RmlsZSwgYGltcG9ydCB7IHJ1biB9IGZyb20gJ3dvcmtmbG93LXBrZyc7XFxudm9pZCBydW47XFxuYCk7XG4gICAgd3JpdGVGaWxlKFxuICAgICAgam9pbihwYWNrYWdlUm9vdCwgJ3BhY2thZ2UuanNvbicpLFxuICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBuYW1lOiAnd29ya2Zsb3ctcGtnJyxcbiAgICAgICAgdmVyc2lvbjogJzEuMC4wJyxcbiAgICAgICAgbWFpbjogJ2luZGV4LmpzJyxcbiAgICAgICAgZGVwZW5kZW5jaWVzOiB7XG4gICAgICAgICAgd29ya2Zsb3c6ICdeMS4wLjAnLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICApO1xuICAgIHdyaXRlRmlsZShwYWNrYWdlSW5kZXgsIGBleHBvcnQgeyBydW4gfSBmcm9tICcuL3dvcmtmbG93LmpzJztcXG5gKTtcbiAgICB3cml0ZUZpbGUoXG4gICAgICBwYWNrYWdlV29ya2Zsb3csXG4gICAgICBgZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bigpIHtcbiAgXCJ1c2Ugd29ya2Zsb3dcIjtcbiAgcmV0dXJuIFwib2tcIjtcbn1cbmBcbiAgICApO1xuXG4gICAgY29uc3QgZGlzY292ZXJlZCA9IGF3YWl0IGNyZWF0ZUJ1aWxkZXIodGVzdFJvb3QpLmRpc2NvdmVyRW50cmllc1B1YmxpYyhcbiAgICAgIFtlbnRyeUZpbGVdLFxuICAgICAgam9pbih0ZXN0Um9vdCwgJ291dCcpXG4gICAgKTtcblxuICAgIGV4cGVjdChkaXNjb3ZlcmVkLmRpc2NvdmVyZWRXb3JrZmxvd3MpLnRvRXF1YWwoXG4gICAgICBuZXcgU2V0KFtub3JtYWxpemUocGFja2FnZVdvcmtmbG93KV0pXG4gICAgKTtcbiAgICBleHBlY3QoXG4gICAgICBwYXJlbnRIYXNDaGlsZChub3JtYWxpemUocGFja2FnZUluZGV4KSwgbm9ybWFsaXplKHBhY2thZ2VXb3JrZmxvdykpXG4gICAgKS50b0JlKHRydWUpO1xuICB9KTtcblxuICBpdCgnZG9lcyBub3QgZGVzY2VuZCBpbnRvIG5vZGVfbW9kdWxlcyB3aGVuIGRpc2NvdmVyV29ya2Zsb3dzSW5Ob2RlTW9kdWxlcyBpcyBmYWxzZScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBlbnRyeUZpbGUgPSBqb2luKHRlc3RSb290LCAnc3JjJywgJ2VudHJ5LnRzJyk7XG4gICAgY29uc3QgbG9jYWxXb3JrZmxvdyA9IGpvaW4odGVzdFJvb3QsICdzcmMnLCAnbG9jYWwtd29ya2Zsb3cudHMnKTtcbiAgICBjb25zdCBwYWNrYWdlUm9vdCA9IGpvaW4odGVzdFJvb3QsICdub2RlX21vZHVsZXMnLCAnd29ya2Zsb3ctcGtnJyk7XG4gICAgY29uc3QgcGFja2FnZUluZGV4ID0gam9pbihwYWNrYWdlUm9vdCwgJ2luZGV4LmpzJyk7XG4gICAgY29uc3QgcGFja2FnZVdvcmtmbG93ID0gam9pbihwYWNrYWdlUm9vdCwgJ3dvcmtmbG93LmpzJyk7XG4gICAgY29uc3QgcGFja2FnZVN0ZXAgPSBqb2luKHBhY2thZ2VSb290LCAnc3RlcC5qcycpO1xuXG4gICAgd3JpdGVGaWxlKFxuICAgICAgZW50cnlGaWxlLFxuICAgICAgYGltcG9ydCAnLi9sb2NhbC13b3JrZmxvdyc7XFxuaW1wb3J0IHsgcnVuIH0gZnJvbSAnd29ya2Zsb3ctcGtnJztcXG52b2lkIHJ1bjtcXG5gXG4gICAgKTtcbiAgICB3cml0ZUZpbGUoXG4gICAgICBsb2NhbFdvcmtmbG93LFxuICAgICAgYGV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2NhbFJ1bigpIHtcbiAgJ3VzZSB3b3JrZmxvdyc7XG4gIHJldHVybiAnb2snO1xufVxuYFxuICAgICk7XG4gICAgd3JpdGVGaWxlKFxuICAgICAgam9pbihwYWNrYWdlUm9vdCwgJ3BhY2thZ2UuanNvbicpLFxuICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBuYW1lOiAnd29ya2Zsb3ctcGtnJyxcbiAgICAgICAgdmVyc2lvbjogJzEuMC4wJyxcbiAgICAgICAgbWFpbjogJ2luZGV4LmpzJyxcbiAgICAgICAgZGVwZW5kZW5jaWVzOiB7XG4gICAgICAgICAgd29ya2Zsb3c6ICdeMS4wLjAnLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICApO1xuICAgIHdyaXRlRmlsZShcbiAgICAgIHBhY2thZ2VJbmRleCxcbiAgICAgIGBleHBvcnQgeyBydW4gfSBmcm9tICcuL3dvcmtmbG93LmpzJztcXG5leHBvcnQgeyBkb1dvcmsgfSBmcm9tICcuL3N0ZXAuanMnO1xcbmBcbiAgICApO1xuICAgIHdyaXRlRmlsZShcbiAgICAgIHBhY2thZ2VXb3JrZmxvdyxcbiAgICAgIGBleHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuKCkge1xuICBcInVzZSB3b3JrZmxvd1wiO1xuICByZXR1cm4gXCJva1wiO1xufVxuYFxuICAgICk7XG4gICAgd3JpdGVGaWxlKFxuICAgICAgcGFja2FnZVN0ZXAsXG4gICAgICBgZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRvV29yaygpIHtcbiAgXCJ1c2Ugc3RlcFwiO1xuICByZXR1cm4gXCJkb25lXCI7XG59XG5gXG4gICAgKTtcblxuICAgIGNvbnN0IGRpc2NvdmVyZWQgPSBhd2FpdCBjcmVhdGVCdWlsZGVyKHRlc3RSb290LCB7XG4gICAgICBkaXNjb3ZlcldvcmtmbG93c0luTm9kZU1vZHVsZXM6IGZhbHNlLFxuICAgIH0pLmRpc2NvdmVyRW50cmllc1B1YmxpYyhbZW50cnlGaWxlXSwgam9pbih0ZXN0Um9vdCwgJ291dCcpKTtcblxuICAgIC8vIExvY2FsIChub24tbm9kZV9tb2R1bGVzKSB3b3JrZmxvdyBpcyBzdGlsbCBkaXNjb3ZlcmVkLlxuICAgIGV4cGVjdChkaXNjb3ZlcmVkLmRpc2NvdmVyZWRXb3JrZmxvd3MpLnRvRXF1YWwoXG4gICAgICBuZXcgU2V0KFtub3JtYWxpemUobG9jYWxXb3JrZmxvdyldKVxuICAgICk7XG4gICAgLy8gVGhlIG5vZGVfbW9kdWxlcyB3b3JrZmxvdyBhbmQgc3RlcCBhcmUgbm90IHJlZ2lzdGVyZWQuXG4gICAgZXhwZWN0KGRpc2NvdmVyZWQuZGlzY292ZXJlZFdvcmtmbG93cy5oYXMobm9ybWFsaXplKHBhY2thZ2VXb3JrZmxvdykpKS50b0JlKFxuICAgICAgZmFsc2VcbiAgICApO1xuICAgIGV4cGVjdChkaXNjb3ZlcmVkLmRpc2NvdmVyZWRTdGVwcy5oYXMobm9ybWFsaXplKHBhY2thZ2VTdGVwKSkpLnRvQmUoZmFsc2UpO1xuICAgIC8vIFRoZSBkZXBlbmRlbmN5J3MgZmlsZXMgYXJlIG5ldmVyIHJlYWQvc2Nhbm5lZDogdGhlIGltcG9ydCBncmFwaCBpcyBub3RcbiAgICAvLyBkZXNjZW5kZWQgaW50byBhdCBhbGwsIHNvIG5vbmUgb2YgdGhlbSBzaG93IHVwIGFzIGRpc2NvdmVyZWQgZmlsZXMgYW5kXG4gICAgLy8gdGhlIHBhcmVudCBlZGdlIGludG8gdGhlIHBhY2thZ2UgaXMgbm90IHJlY29yZGVkLlxuICAgIGZvciAoY29uc3QgZmlsZSBvZiBbcGFja2FnZUluZGV4LCBwYWNrYWdlV29ya2Zsb3csIHBhY2thZ2VTdGVwXSkge1xuICAgICAgZXhwZWN0KGRpc2NvdmVyZWQuZGlzY292ZXJlZEZpbGVzPy5oYXMobm9ybWFsaXplKGZpbGUpKSkudG9CZShmYWxzZSk7XG4gICAgfVxuICAgIGV4cGVjdChwYXJlbnRIYXNDaGlsZChub3JtYWxpemUoZW50cnlGaWxlKSwgbm9ybWFsaXplKHBhY2thZ2VJbmRleCkpKS50b0JlKFxuICAgICAgZmFsc2VcbiAgICApO1xuICB9KTtcblxuICBpdCgnc3RpbGwgZm9sbG93cyBpbXBvcnRzIHdpdGhpbiBub2RlX21vZHVsZXMgc28gc2VlZGVkIHBhY2thZ2UgZW50cmllcyByZXNvbHZlIHRoZWlyIHN1YnRyZWUnLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gTWlycm9ycyBob3cgdGhlIFNESyBzZWVkcyBgQHdvcmtmbG93L2NvcmUvcnVudGltZS9ydW5gIChhIG5vZGVfbW9kdWxlc1xuICAgIC8vIGZpbGUpIGFzIGFuIGVudHJ5IHBvaW50OiBkZXNjZW50IGlzIGJsb2NrZWQgZnJvbSBhcHBsaWNhdGlvbiBjb2RlLCBidXQgYVxuICAgIC8vIG5vZGVfbW9kdWxlcyBmaWxlIG1heSBzdGlsbCByZWFjaCBpdHMgb3duIHRyYW5zaXRpdmUgZmlsZXMuXG4gICAgY29uc3QgZW50cnlGaWxlID0gam9pbih0ZXN0Um9vdCwgJ3NyYycsICdlbnRyeS50cycpO1xuICAgIGNvbnN0IHBhY2thZ2VSb290ID0gam9pbih0ZXN0Um9vdCwgJ25vZGVfbW9kdWxlcycsICdzZWVkZWQtcGtnJyk7XG4gICAgY29uc3QgcGFja2FnZUluZGV4ID0gam9pbihwYWNrYWdlUm9vdCwgJ2luZGV4LmpzJyk7XG4gICAgY29uc3QgcGFja2FnZVdvcmtmbG93ID0gam9pbihwYWNrYWdlUm9vdCwgJ3dvcmtmbG93LmpzJyk7XG5cbiAgICB3cml0ZUZpbGUoZW50cnlGaWxlLCBgZXhwb3J0IGNvbnN0IG5vb3AgPSAxO1xcbmApO1xuICAgIHdyaXRlRmlsZShcbiAgICAgIGpvaW4ocGFja2FnZVJvb3QsICdwYWNrYWdlLmpzb24nKSxcbiAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgbmFtZTogJ3NlZWRlZC1wa2cnLFxuICAgICAgICB2ZXJzaW9uOiAnMS4wLjAnLFxuICAgICAgICBtYWluOiAnaW5kZXguanMnLFxuICAgICAgICBkZXBlbmRlbmNpZXM6IHsgd29ya2Zsb3c6ICdeMS4wLjAnIH0sXG4gICAgICB9KVxuICAgICk7XG4gICAgd3JpdGVGaWxlKHBhY2thZ2VJbmRleCwgYGV4cG9ydCB7IHJ1biB9IGZyb20gJy4vd29ya2Zsb3cuanMnO1xcbmApO1xuICAgIHdyaXRlRmlsZShcbiAgICAgIHBhY2thZ2VXb3JrZmxvdyxcbiAgICAgIGBleHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuKCkge1xuICBcInVzZSB3b3JrZmxvd1wiO1xuICByZXR1cm4gXCJva1wiO1xufVxuYFxuICAgICk7XG5cbiAgICAvLyBTZWVkIHRoZSBub2RlX21vZHVsZXMgaW5kZXggZGlyZWN0bHkgYXMgYW4gZW50cnkgcG9pbnQgKGFzIHRoZSBidWlsZGVyXG4gICAgLy8gZG9lcyBmb3IgdGhlIFNESyBydW50aW1lIHNlcmRlIGVudHJ5KS5cbiAgICBjb25zdCBkaXNjb3ZlcmVkID0gYXdhaXQgY3JlYXRlQnVpbGRlcih0ZXN0Um9vdCwge1xuICAgICAgZGlzY292ZXJXb3JrZmxvd3NJbk5vZGVNb2R1bGVzOiBmYWxzZSxcbiAgICB9KS5kaXNjb3ZlckVudHJpZXNQdWJsaWMoW2VudHJ5RmlsZSwgcGFja2FnZUluZGV4XSwgam9pbih0ZXN0Um9vdCwgJ291dCcpKTtcblxuICAgIGV4cGVjdChkaXNjb3ZlcmVkLmRpc2NvdmVyZWRXb3JrZmxvd3MuaGFzKG5vcm1hbGl6ZShwYWNrYWdlV29ya2Zsb3cpKSkudG9CZShcbiAgICAgIHRydWVcbiAgICApO1xuICAgIGV4cGVjdChcbiAgICAgIHBhcmVudEhhc0NoaWxkKG5vcm1hbGl6ZShwYWNrYWdlSW5kZXgpLCBub3JtYWxpemUocGFja2FnZVdvcmtmbG93KSlcbiAgICApLnRvQmUodHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KCdkaXNjb3ZlcnMgZmlsZXMgcmVhY2hlZCB0aHJvdWdoIHRzY29uZmlnIHBhdGggYWxpYXNlcycsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBlbnRyeUZpbGUgPSBqb2luKHRlc3RSb290LCAnc3JjJywgJ2VudHJ5LnRzJyk7XG4gICAgY29uc3QgcmVnaXN0cnlGaWxlID0gam9pbih0ZXN0Um9vdCwgJ3NyYycsICdfd29ya2Zsb3dzLnRzJyk7XG4gICAgY29uc3Qgd29ya2Zsb3dGaWxlID0gam9pbih0ZXN0Um9vdCwgJ3NyYycsICd3b3JrZmxvd3MnLCAnd29ya2Zsb3cudHMnKTtcbiAgICBjb25zdCB0c2NvbmZpZ0ZpbGUgPSBqb2luKHRlc3RSb290LCAndHNjb25maWcuanNvbicpO1xuXG4gICAgd3JpdGVGaWxlKFxuICAgICAgdHNjb25maWdGaWxlLFxuICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBjb21waWxlck9wdGlvbnM6IHtcbiAgICAgICAgICBwYXRoczoge1xuICAgICAgICAgICAgJ0AvKic6IFsnLi9zcmMvKiddLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICk7XG4gICAgd3JpdGVGaWxlKGVudHJ5RmlsZSwgYGltcG9ydCB7IGFsbFdvcmtmbG93cyB9IGZyb20gJ0AvX3dvcmtmbG93cyc7XFxuYCk7XG4gICAgd3JpdGVGaWxlKFxuICAgICAgcmVnaXN0cnlGaWxlLFxuICAgICAgYGltcG9ydCAqIGFzIHdvcmtmbG93IGZyb20gJy4vd29ya2Zsb3dzL3dvcmtmbG93JztcbmV4cG9ydCBjb25zdCBhbGxXb3JrZmxvd3MgPSB7IHdvcmtmbG93IH07XG5gXG4gICAgKTtcbiAgICB3cml0ZUZpbGUoXG4gICAgICB3b3JrZmxvd0ZpbGUsXG4gICAgICBgZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bigpIHtcbiAgJ3VzZSB3b3JrZmxvdyc7XG4gIHJldHVybiAnb2snO1xufVxuYFxuICAgICk7XG5cbiAgICBjb25zdCBkaXNjb3ZlcmVkID0gYXdhaXQgY3JlYXRlQnVpbGRlcih0ZXN0Um9vdCkuZGlzY292ZXJFbnRyaWVzUHVibGljKFxuICAgICAgW2VudHJ5RmlsZV0sXG4gICAgICBqb2luKHRlc3RSb290LCAnb3V0JyksXG4gICAgICB0c2NvbmZpZ0ZpbGVcbiAgICApO1xuXG4gICAgZXhwZWN0KGRpc2NvdmVyZWQuZGlzY292ZXJlZFdvcmtmbG93cykudG9FcXVhbChcbiAgICAgIG5ldyBTZXQoW25vcm1hbGl6ZSh3b3JrZmxvd0ZpbGUpXSlcbiAgICApO1xuICAgIGV4cGVjdChwYXJlbnRIYXNDaGlsZChub3JtYWxpemUoZW50cnlGaWxlKSwgbm9ybWFsaXplKHdvcmtmbG93RmlsZSkpKS50b0JlKFxuICAgICAgdHJ1ZVxuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdkaXNjb3ZlcnMgZG90dGVkIGZpbGVzIHJlYWNoZWQgdGhyb3VnaCB0c2NvbmZpZyBwYXRoIGFsaWFzZXMnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZW50cnlGaWxlID0gam9pbih0ZXN0Um9vdCwgJ3NyYycsICdlbnRyeS50cycpO1xuICAgIGNvbnN0IHJlZ2lzdHJ5RmlsZSA9IGpvaW4odGVzdFJvb3QsICdzcmMnLCAnd29ya2Zsb3dzJywgJ2hlbGxvLmluZGV4LnRzJyk7XG4gICAgY29uc3Qgd29ya2Zsb3dGaWxlID0gam9pbih0ZXN0Um9vdCwgJ3NyYycsICd3b3JrZmxvd3MnLCAnaGVsbG8udHMnKTtcbiAgICBjb25zdCB0c2NvbmZpZ0ZpbGUgPSBqb2luKHRlc3RSb290LCAndHNjb25maWcuanNvbicpO1xuXG4gICAgd3JpdGVGaWxlKFxuICAgICAgdHNjb25maWdGaWxlLFxuICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBjb21waWxlck9wdGlvbnM6IHtcbiAgICAgICAgICBwYXRoczoge1xuICAgICAgICAgICAgJ0AvKic6IFsnLi9zcmMvKiddLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICk7XG4gICAgd3JpdGVGaWxlKFxuICAgICAgZW50cnlGaWxlLFxuICAgICAgYGltcG9ydCB7IGhlbGxvV29ya2Zsb3cgfSBmcm9tICdAL3dvcmtmbG93cy9oZWxsby5pbmRleCc7XFxuYFxuICAgICk7XG4gICAgd3JpdGVGaWxlKHJlZ2lzdHJ5RmlsZSwgYGV4cG9ydCB7IGhlbGxvV29ya2Zsb3cgfSBmcm9tICcuL2hlbGxvJztcXG5gKTtcbiAgICB3cml0ZUZpbGUoXG4gICAgICB3b3JrZmxvd0ZpbGUsXG4gICAgICBgZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGhlbGxvV29ya2Zsb3coKSB7XG4gICd1c2Ugd29ya2Zsb3cnO1xuICByZXR1cm4gJ29rJztcbn1cbmBcbiAgICApO1xuXG4gICAgY29uc3QgZGlzY292ZXJlZCA9IGF3YWl0IGNyZWF0ZUJ1aWxkZXIodGVzdFJvb3QpLmRpc2NvdmVyRW50cmllc1B1YmxpYyhcbiAgICAgIFtlbnRyeUZpbGVdLFxuICAgICAgam9pbih0ZXN0Um9vdCwgJ291dCcpLFxuICAgICAgdHNjb25maWdGaWxlXG4gICAgKTtcblxuICAgIGV4cGVjdChkaXNjb3ZlcmVkLmRpc2NvdmVyZWRXb3JrZmxvd3MpLnRvRXF1YWwoXG4gICAgICBuZXcgU2V0KFtub3JtYWxpemUod29ya2Zsb3dGaWxlKV0pXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ2lnbm9yZXMgbm9uLXNvdXJjZSBmaWxlcyByZWFjaGVkIHRocm91Z2ggdHNjb25maWcgcGF0aCBhbGlhc2VzJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGVudHJ5RmlsZSA9IGpvaW4odGVzdFJvb3QsICdzcmMnLCAnZW50cnkudHMnKTtcbiAgICBjb25zdCBhc3NldEZpbGUgPSBqb2luKHRlc3RSb290LCAnc3JjJywgJ3N0eWxlcycsICdhcHAuY3NzJyk7XG4gICAgY29uc3QgdHNjb25maWdGaWxlID0gam9pbih0ZXN0Um9vdCwgJ3RzY29uZmlnLmpzb24nKTtcblxuICAgIHdyaXRlRmlsZShcbiAgICAgIHRzY29uZmlnRmlsZSxcbiAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgY29tcGlsZXJPcHRpb25zOiB7XG4gICAgICAgICAgcGF0aHM6IHtcbiAgICAgICAgICAgICdALyonOiBbJy4vc3JjLyonXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICApO1xuICAgIHdyaXRlRmlsZShlbnRyeUZpbGUsIGBpbXBvcnQgJ0Avc3R5bGVzL2FwcC5jc3MnO1xcbmApO1xuICAgIHdyaXRlRmlsZShhc3NldEZpbGUsIGAndXNlIHdvcmtmbG93JztcXG5gKTtcblxuICAgIGNvbnN0IGRpc2NvdmVyZWQgPSBhd2FpdCBjcmVhdGVCdWlsZGVyKHRlc3RSb290KS5kaXNjb3ZlckVudHJpZXNQdWJsaWMoXG4gICAgICBbZW50cnlGaWxlXSxcbiAgICAgIGpvaW4odGVzdFJvb3QsICdvdXQnKSxcbiAgICAgIHRzY29uZmlnRmlsZVxuICAgICk7XG5cbiAgICBleHBlY3QoZGlzY292ZXJlZC5kaXNjb3ZlcmVkV29ya2Zsb3dzKS50b0VxdWFsKG5ldyBTZXQoKSk7XG4gICAgZXhwZWN0KGRpc2NvdmVyZWQuZGlzY292ZXJlZEZpbGVzKS50b0VxdWFsKG5ldyBTZXQoW25vcm1hbGl6ZShlbnRyeUZpbGUpXSkpO1xuICB9KTtcblxuICBpdCgnZGlzY292ZXJzIHBhdGggYWxpYXNlcyBpbmhlcml0ZWQgdGhyb3VnaCB0c2NvbmZpZyBleHRlbmRzJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGVudHJ5RmlsZSA9IGpvaW4odGVzdFJvb3QsICdzcmMnLCAnZW50cnkudHMnKTtcbiAgICBjb25zdCB3b3JrZmxvd0ZpbGUgPSBqb2luKHRlc3RSb290LCAnc3JjJywgJ3dvcmtmbG93cycsICd3b3JrZmxvdy50cycpO1xuICAgIGNvbnN0IGJhc2VUc2NvbmZpZ0ZpbGUgPSBqb2luKHRlc3RSb290LCAndHNjb25maWcuYmFzZS5qc29uJyk7XG4gICAgY29uc3QgdHNjb25maWdGaWxlID0gam9pbih0ZXN0Um9vdCwgJ3RzY29uZmlnLmpzb24nKTtcblxuICAgIHdyaXRlRmlsZShcbiAgICAgIGJhc2VUc2NvbmZpZ0ZpbGUsXG4gICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGNvbXBpbGVyT3B0aW9uczoge1xuICAgICAgICAgIGJhc2VVcmw6ICcuJyxcbiAgICAgICAgICBwYXRoczoge1xuICAgICAgICAgICAgJ0BiYXNlLyonOiBbJy4vc3JjLyonXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICApO1xuICAgIHdyaXRlRmlsZShcbiAgICAgIHRzY29uZmlnRmlsZSxcbiAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgZXh0ZW5kczogJy4vdHNjb25maWcuYmFzZS5qc29uJyxcbiAgICAgIH0pXG4gICAgKTtcbiAgICB3cml0ZUZpbGUoZW50cnlGaWxlLCBgaW1wb3J0IHsgcnVuIH0gZnJvbSAnQGJhc2Uvd29ya2Zsb3dzL3dvcmtmbG93JztcXG5gKTtcbiAgICB3cml0ZUZpbGUoXG4gICAgICB3b3JrZmxvd0ZpbGUsXG4gICAgICBgZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bigpIHtcbiAgJ3VzZSB3b3JrZmxvdyc7XG4gIHJldHVybiAnb2snO1xufVxuYFxuICAgICk7XG5cbiAgICBjb25zdCBkaXNjb3ZlcmVkID0gYXdhaXQgY3JlYXRlQnVpbGRlcih0ZXN0Um9vdCkuZGlzY292ZXJFbnRyaWVzUHVibGljKFxuICAgICAgW2VudHJ5RmlsZV0sXG4gICAgICBqb2luKHRlc3RSb290LCAnb3V0JyksXG4gICAgICB0c2NvbmZpZ0ZpbGVcbiAgICApO1xuXG4gICAgZXhwZWN0KGRpc2NvdmVyZWQuZGlzY292ZXJlZFdvcmtmbG93cykudG9FcXVhbChcbiAgICAgIG5ldyBTZXQoW25vcm1hbGl6ZSh3b3JrZmxvd0ZpbGUpXSlcbiAgICApO1xuICB9KTtcblxuICBpdCgnZGlzY292ZXJzIHBhdGggYWxpYXNlcyB3aXRoIG11bHRpcGxlIHdpbGRjYXJkcycsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBlbnRyeUZpbGUgPSBqb2luKHRlc3RSb290LCAnc3JjJywgJ2VudHJ5LnRzJyk7XG4gICAgY29uc3Qgd29ya2Zsb3dGaWxlID0gam9pbihcbiAgICAgIHRlc3RSb290LFxuICAgICAgJ3NyYycsXG4gICAgICAnZmVhdHVyZXMnLFxuICAgICAgJ2JpbGxpbmcnLFxuICAgICAgJ2Zsb3dzJyxcbiAgICAgICdjaGFyZ2UudHMnXG4gICAgKTtcbiAgICBjb25zdCB0c2NvbmZpZ0ZpbGUgPSBqb2luKHRlc3RSb290LCAndHNjb25maWcuanNvbicpO1xuXG4gICAgd3JpdGVGaWxlKFxuICAgICAgdHNjb25maWdGaWxlLFxuICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBjb21waWxlck9wdGlvbnM6IHtcbiAgICAgICAgICBwYXRoczoge1xuICAgICAgICAgICAgJ0BmZWF0dXJlLyovd29ya2Zsb3cvKic6IFsnLi9zcmMvZmVhdHVyZXMvKi9mbG93cy8qJ10sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgKTtcbiAgICB3cml0ZUZpbGUoXG4gICAgICBlbnRyeUZpbGUsXG4gICAgICBgaW1wb3J0IHsgY2hhcmdlIH0gZnJvbSAnQGZlYXR1cmUvYmlsbGluZy93b3JrZmxvdy9jaGFyZ2UnO1xcbmBcbiAgICApO1xuICAgIHdyaXRlRmlsZShcbiAgICAgIHdvcmtmbG93RmlsZSxcbiAgICAgIGBleHBvcnQgYXN5bmMgZnVuY3Rpb24gY2hhcmdlKCkge1xuICAndXNlIHdvcmtmbG93JztcbiAgcmV0dXJuICdvayc7XG59XG5gXG4gICAgKTtcblxuICAgIGNvbnN0IGRpc2NvdmVyZWQgPSBhd2FpdCBjcmVhdGVCdWlsZGVyKHRlc3RSb290KS5kaXNjb3ZlckVudHJpZXNQdWJsaWMoXG4gICAgICBbZW50cnlGaWxlXSxcbiAgICAgIGpvaW4odGVzdFJvb3QsICdvdXQnKSxcbiAgICAgIHRzY29uZmlnRmlsZVxuICAgICk7XG5cbiAgICBleHBlY3QoZGlzY292ZXJlZC5kaXNjb3ZlcmVkV29ya2Zsb3dzKS50b0VxdWFsKFxuICAgICAgbmV3IFNldChbbm9ybWFsaXplKHdvcmtmbG93RmlsZSldKVxuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdpZ25vcmVzIGltcG9ydHMgdGhhdCBvbmx5IGFwcGVhciBpbnNpZGUgY29tbWVudHMnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZW50cnlGaWxlID0gam9pbih0ZXN0Um9vdCwgJ3NyYycsICdlbnRyeS50cycpO1xuICAgIGNvbnN0IHJlZ2lzdHJ5RmlsZSA9IGpvaW4odGVzdFJvb3QsICdzcmMnLCAnX3dvcmtmbG93cy50cycpO1xuICAgIGNvbnN0IHdvcmtmbG93RmlsZSA9IGpvaW4odGVzdFJvb3QsICdzcmMnLCAnd29ya2Zsb3dzJywgJ3NpbXBsZS50cycpO1xuXG4gICAgd3JpdGVGaWxlKGVudHJ5RmlsZSwgYGltcG9ydCAnLi9fd29ya2Zsb3dzJztcXG5gKTtcbiAgICB3cml0ZUZpbGUoXG4gICAgICByZWdpc3RyeUZpbGUsXG4gICAgICBgLy8gaW1wb3J0ICogYXMgc2ltcGxlIGZyb20gJy4vd29ya2Zsb3dzL3NpbXBsZSc7XG5cbmV4cG9ydCBjb25zdCBhbGxXb3JrZmxvd3MgPSB7XG4gICd3b3JrZmxvd3Mvc2ltcGxlLnRzJzogc2ltcGxlLFxufSBhcyBjb25zdDtcbmBcbiAgICApO1xuICAgIHdyaXRlRmlsZShcbiAgICAgIHdvcmtmbG93RmlsZSxcbiAgICAgIGBleHBvcnQgYXN5bmMgZnVuY3Rpb24gc2ltcGxlKCkge1xuICAndXNlIHdvcmtmbG93Jztcbn1cbmBcbiAgICApO1xuXG4gICAgY29uc3QgZGlzY292ZXJlZCA9IGF3YWl0IGNyZWF0ZUJ1aWxkZXIodGVzdFJvb3QpLmRpc2NvdmVyRW50cmllc1B1YmxpYyhcbiAgICAgIFtlbnRyeUZpbGVdLFxuICAgICAgam9pbih0ZXN0Um9vdCwgJ291dCcpXG4gICAgKTtcblxuICAgIGV4cGVjdChkaXNjb3ZlcmVkLmRpc2NvdmVyZWRXb3JrZmxvd3MpLnRvRXF1YWwobmV3IFNldCgpKTtcbiAgICBleHBlY3QoZGlzY292ZXJlZC5kaXNjb3ZlcmVkRmlsZXMpLnRvRXF1YWwoXG4gICAgICBuZXcgU2V0KFtub3JtYWxpemUoZW50cnlGaWxlKSwgbm9ybWFsaXplKHJlZ2lzdHJ5RmlsZSldKVxuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdkb2VzIG5vdCB0cmVhdCByZWdleCBsaXRlcmFscyBhcyBjb21tZW50cycsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBlbnRyeUZpbGUgPSBqb2luKHRlc3RSb290LCAnc3JjJywgJ2VudHJ5LnRzJyk7XG4gICAgY29uc3QgcmVnaXN0cnlGaWxlID0gam9pbih0ZXN0Um9vdCwgJ3NyYycsICdfd29ya2Zsb3dzLnRzJyk7XG4gICAgY29uc3Qgd29ya2Zsb3dGaWxlID0gam9pbih0ZXN0Um9vdCwgJ3NyYycsICd3b3JrZmxvd3MnLCAnc2ltcGxlLnRzJyk7XG5cbiAgICB3cml0ZUZpbGUoZW50cnlGaWxlLCBgaW1wb3J0ICcuL193b3JrZmxvd3MnO1xcbmApO1xuICAgIHdyaXRlRmlsZShcbiAgICAgIHJlZ2lzdHJ5RmlsZSxcbiAgICAgIGBjb25zdCBjb21tZW50U3RhcnRDaGFycyA9IC9bLypdLztcbmNvbnN0IHByb3RvY29sID0gL2h0dHBzPzpcXFxcL1xcXFwvLztcbmltcG9ydCAnLi93b3JrZmxvd3Mvc2ltcGxlJztcbmBcbiAgICApO1xuICAgIHdyaXRlRmlsZShcbiAgICAgIHdvcmtmbG93RmlsZSxcbiAgICAgIGBleHBvcnQgYXN5bmMgZnVuY3Rpb24gc2ltcGxlKCkge1xuICAndXNlIHdvcmtmbG93Jztcbn1cbmBcbiAgICApO1xuXG4gICAgY29uc3QgZGlzY292ZXJlZCA9IGF3YWl0IGNyZWF0ZUJ1aWxkZXIodGVzdFJvb3QpLmRpc2NvdmVyRW50cmllc1B1YmxpYyhcbiAgICAgIFtlbnRyeUZpbGVdLFxuICAgICAgam9pbih0ZXN0Um9vdCwgJ291dCcpXG4gICAgKTtcblxuICAgIGV4cGVjdChkaXNjb3ZlcmVkLmRpc2NvdmVyZWRXb3JrZmxvd3MpLnRvRXF1YWwoXG4gICAgICBuZXcgU2V0KFtub3JtYWxpemUod29ya2Zsb3dGaWxlKV0pXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ3VzZXMgbmVhcmVzdCBuZXN0ZWQganNjb25maWcgYWxpYXNlcyBpbiBtb25vcmVwbyBwYWNrYWdlcycsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCByb290VHNjb25maWdGaWxlID0gam9pbih0ZXN0Um9vdCwgJ3RzY29uZmlnLmpzb24nKTtcbiAgICBjb25zdCBwYWNrYWdlUm9vdCA9IGpvaW4odGVzdFJvb3QsICdwYWNrYWdlcycsICdhcHAnKTtcbiAgICBjb25zdCBlbnRyeUZpbGUgPSBqb2luKHBhY2thZ2VSb290LCAnc3JjJywgJ2VudHJ5LmpzJyk7XG4gICAgY29uc3Qgd29ya2Zsb3dGaWxlID0gam9pbihwYWNrYWdlUm9vdCwgJ3NyYycsICd3b3JrZmxvdy5qcycpO1xuXG4gICAgd3JpdGVGaWxlKFxuICAgICAgcm9vdFRzY29uZmlnRmlsZSxcbiAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgY29tcGlsZXJPcHRpb25zOiB7XG4gICAgICAgICAgcGF0aHM6IHtcbiAgICAgICAgICAgICdAcm9vdC8qJzogWycuL3Jvb3QvKiddLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICk7XG4gICAgd3JpdGVGaWxlKFxuICAgICAgam9pbihwYWNrYWdlUm9vdCwgJ2pzY29uZmlnLmpzb24nKSxcbiAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgY29tcGlsZXJPcHRpb25zOiB7XG4gICAgICAgICAgcGF0aHM6IHtcbiAgICAgICAgICAgICcjLyonOiBbJy4vc3JjLyonXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICApO1xuICAgIHdyaXRlRmlsZShlbnRyeUZpbGUsIGBpbXBvcnQgeyBydW4gfSBmcm9tICcjL3dvcmtmbG93JztcXG5gKTtcbiAgICB3cml0ZUZpbGUoXG4gICAgICB3b3JrZmxvd0ZpbGUsXG4gICAgICBgZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bigpIHtcbiAgXCJ1c2Ugd29ya2Zsb3dcIjtcbiAgcmV0dXJuIFwib2tcIjtcbn1cbmBcbiAgICApO1xuXG4gICAgY29uc3QgZGlzY292ZXJlZCA9IGF3YWl0IGNyZWF0ZUJ1aWxkZXIodGVzdFJvb3QpLmRpc2NvdmVyRW50cmllc1B1YmxpYyhcbiAgICAgIFtlbnRyeUZpbGVdLFxuICAgICAgam9pbih0ZXN0Um9vdCwgJ291dCcpXG4gICAgKTtcblxuICAgIGV4cGVjdChkaXNjb3ZlcmVkLmRpc2NvdmVyZWRXb3JrZmxvd3MpLnRvRXF1YWwoXG4gICAgICBuZXcgU2V0KFtub3JtYWxpemUod29ya2Zsb3dGaWxlKV0pXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ29ubHkgdHJlYXRzIHNlcmRlIGZpbGVzIGFzIHJlZ2lzdHJhdGlvbiBjYW5kaWRhdGVzIHdoZW4gdGhleSBkZWZpbmUgc3RhdGljIHNlcmRlIG1ldGhvZHMnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZW50cnlGaWxlID0gam9pbih0ZXN0Um9vdCwgJ3NyYycsICdlbnRyeS50cycpO1xuICAgIGNvbnN0IHJlZHVjZXJGaWxlID0gam9pbih0ZXN0Um9vdCwgJ3NyYycsICdyZWR1Y2VyLnRzJyk7XG4gICAgY29uc3Qgc2VyZGVGaWxlID0gam9pbih0ZXN0Um9vdCwgJ3NyYycsICdzZXJkZS50cycpO1xuXG4gICAgd3JpdGVGaWxlKFxuICAgICAgZW50cnlGaWxlLFxuICAgICAgYGltcG9ydCAnLi9yZWR1Y2VyJztcbmltcG9ydCAnLi9zZXJkZSc7XG5gXG4gICAgKTtcbiAgICB3cml0ZUZpbGUoXG4gICAgICByZWR1Y2VyRmlsZSxcbiAgICAgIGBpbXBvcnQgeyBXT1JLRkxPV19TRVJJQUxJWkUgfSBmcm9tICdAd29ya2Zsb3cvc2VyZGUnO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVkdWNlcih2YWx1ZTogdW5rbm93bikge1xuICByZXR1cm4gdmFsdWU/LmNvbnN0cnVjdG9yPy5bV09SS0ZMT1dfU0VSSUFMSVpFXTtcbn1cbmBcbiAgICApO1xuICAgIHdyaXRlRmlsZShcbiAgICAgIHNlcmRlRmlsZSxcbiAgICAgIGBpbXBvcnQgeyBXT1JLRkxPV19TRVJJQUxJWkUgYXMgV1MgfSBmcm9tICdAd29ya2Zsb3cvc2VyZGUnO1xuXG5leHBvcnQgY2xhc3MgVmFsdWUge1xuICBzdGF0aWMgY2xhc3NJZCA9ICdWYWx1ZSc7XG4gIHN0YXRpYyBbV1NdKHZhbHVlOiBWYWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufVxuYFxuICAgICk7XG5cbiAgICBjb25zdCBkaXNjb3ZlcmVkID0gYXdhaXQgY3JlYXRlQnVpbGRlcih0ZXN0Um9vdCkuZGlzY292ZXJFbnRyaWVzUHVibGljKFxuICAgICAgW2VudHJ5RmlsZV0sXG4gICAgICBqb2luKHRlc3RSb290LCAnb3V0JylcbiAgICApO1xuXG4gICAgZXhwZWN0KGRpc2NvdmVyZWQuZGlzY292ZXJlZFNlcmRlRmlsZXMpLnRvRXF1YWwoXG4gICAgICBuZXcgU2V0KFtub3JtYWxpemUoc2VyZGVGaWxlKV0pXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ2NhdGVnb3JpemVzIHN0ZXAsIHdvcmtmbG93LCBhbmQgc2VyZGUgdXNhZ2UgaW5kZXBlbmRlbnRseScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBlbnRyeUZpbGUgPSBqb2luKHRlc3RSb290LCAnc3JjJywgJ2VudHJ5LnRzJyk7XG4gICAgY29uc3Qgc3RlcEZpbGUgPSBqb2luKHRlc3RSb290LCAnc3JjJywgJ3N0ZXAudHMnKTtcbiAgICBjb25zdCB3b3JrZmxvd0ZpbGUgPSBqb2luKHRlc3RSb290LCAnc3JjJywgJ3dvcmtmbG93LnRzJyk7XG4gICAgY29uc3Qgc2VyZGVGaWxlID0gam9pbih0ZXN0Um9vdCwgJ3NyYycsICdzZXJkZS50cycpO1xuXG4gICAgd3JpdGVGaWxlKFxuICAgICAgZW50cnlGaWxlLFxuICAgICAgYGltcG9ydCAnLi9zdGVwJztcbmltcG9ydCAnLi93b3JrZmxvdyc7XG5pbXBvcnQgJy4vc2VyZGUnO1xuYFxuICAgICk7XG4gICAgd3JpdGVGaWxlKFxuICAgICAgc3RlcEZpbGUsXG4gICAgICBgZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1blN0ZXAoKSB7XG4gICd1c2Ugc3RlcCc7XG4gIHJldHVybiAnb2snO1xufVxuYFxuICAgICk7XG4gICAgd3JpdGVGaWxlKFxuICAgICAgd29ya2Zsb3dGaWxlLFxuICAgICAgYGV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5Xb3JrZmxvdygpIHtcbiAgJ3VzZSB3b3JrZmxvdyc7XG4gIHJldHVybiAnb2snO1xufVxuYFxuICAgICk7XG4gICAgd3JpdGVGaWxlKFxuICAgICAgc2VyZGVGaWxlLFxuICAgICAgYGV4cG9ydCBjbGFzcyBWYWx1ZSB7XG4gIHN0YXRpYyBjbGFzc0lkID0gJ1ZhbHVlJztcbiAgc3RhdGljIFtTeW1ib2wuZm9yKCd3b3JrZmxvdy1zZXJpYWxpemUnKV0odmFsdWU6IFZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59XG5gXG4gICAgKTtcblxuICAgIGNvbnN0IGRpc2NvdmVyZWQgPSBhd2FpdCBjcmVhdGVCdWlsZGVyKHRlc3RSb290KS5kaXNjb3ZlckVudHJpZXNQdWJsaWMoXG4gICAgICBbZW50cnlGaWxlXSxcbiAgICAgIGpvaW4odGVzdFJvb3QsICdvdXQnKVxuICAgICk7XG5cbiAgICBleHBlY3QoZGlzY292ZXJlZC5kaXNjb3ZlcmVkU3RlcHMpLnRvRXF1YWwobmV3IFNldChbbm9ybWFsaXplKHN0ZXBGaWxlKV0pKTtcbiAgICBleHBlY3QoZGlzY292ZXJlZC5kaXNjb3ZlcmVkV29ya2Zsb3dzKS50b0VxdWFsKFxuICAgICAgbmV3IFNldChbbm9ybWFsaXplKHdvcmtmbG93RmlsZSldKVxuICAgICk7XG4gICAgZXhwZWN0KGRpc2NvdmVyZWQuZGlzY292ZXJlZFNlcmRlRmlsZXMpLnRvRXF1YWwoXG4gICAgICBuZXcgU2V0KFtub3JtYWxpemUoc2VyZGVGaWxlKV0pXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ2lnbm9yZXMgc2VyZGUgZXhhbXBsZXMgdGhhdCBvbmx5IGFwcGVhciBpbnNpZGUgY29tbWVudHMnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZW50cnlGaWxlID0gam9pbih0ZXN0Um9vdCwgJ3NyYycsICdlbnRyeS50cycpO1xuICAgIGNvbnN0IGRvY3NGaWxlID0gam9pbih0ZXN0Um9vdCwgJ3NyYycsICdkb2NzLnRzJyk7XG5cbiAgICB3cml0ZUZpbGUoZW50cnlGaWxlLCBgaW1wb3J0ICcuL2RvY3MnO1xcbmApO1xuICAgIHdyaXRlRmlsZShcbiAgICAgIGRvY3NGaWxlLFxuICAgICAgYC8qKlxuICogaW1wb3J0IHsgV09SS0ZMT1dfU0VSSUFMSVpFIH0gZnJvbSAnQHdvcmtmbG93L3NlcmRlJztcbiAqXG4gKiBjbGFzcyBFeGFtcGxlIHtcbiAqICAgc3RhdGljIFtXT1JLRkxPV19TRVJJQUxJWkVdKHZhbHVlKSB7XG4gKiAgICAgcmV0dXJuIHZhbHVlO1xuICogICB9XG4gKiB9XG4gKi9cbmV4cG9ydCBjb25zdCBXT1JLRkxPV19TRVJJQUxJWkUgPSBTeW1ib2wuZm9yKCd3b3JrZmxvdy1zZXJpYWxpemUnKTtcbmBcbiAgICApO1xuXG4gICAgY29uc3QgZGlzY292ZXJlZCA9IGF3YWl0IGNyZWF0ZUJ1aWxkZXIodGVzdFJvb3QpLmRpc2NvdmVyRW50cmllc1B1YmxpYyhcbiAgICAgIFtlbnRyeUZpbGVdLFxuICAgICAgam9pbih0ZXN0Um9vdCwgJ291dCcpXG4gICAgKTtcblxuICAgIGV4cGVjdChkaXNjb3ZlcmVkLmRpc2NvdmVyZWRTZXJkZUZpbGVzKS50b0VxdWFsKG5ldyBTZXQoKSk7XG4gIH0pO1xuXG4gIGl0KCdyZWxhdGl2aXplcyBuZXN0ZWQgcGFja2FnZSBzdGVwIHJlZ2lzdHJhdGlvbiBpbXBvcnRzJywgKCkgPT4ge1xuICAgIGNvbnN0IHJvdXRlRGlyID0gam9pbih0ZXN0Um9vdCwgJ2FwcCcsICcud2VsbC1rbm93bicsICd3b3JrZmxvdycsICd2MScpO1xuICAgIGNvbnN0IGRpcmVjdFBhY2thZ2VGaWxlID0gam9pbihcbiAgICAgIHRlc3RSb290LFxuICAgICAgJ25vZGVfbW9kdWxlcycsXG4gICAgICAnZGlyZWN0LXBrZycsXG4gICAgICAnc3RlcC5qcydcbiAgICApO1xuICAgIGNvbnN0IG5lc3RlZFBhY2thZ2VGaWxlID0gam9pbihcbiAgICAgIHRlc3RSb290LFxuICAgICAgJ25vZGVfbW9kdWxlcycsXG4gICAgICAncGFyZW50LXBrZycsXG4gICAgICAnbm9kZV9tb2R1bGVzJyxcbiAgICAgICduZXN0ZWQtcGtnJyxcbiAgICAgICdzdGVwLmpzJ1xuICAgICk7XG5cbiAgICB3cml0ZUZpbGUoXG4gICAgICBqb2luKHRlc3RSb290LCAncGFja2FnZS5qc29uJyksXG4gICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGRlcGVuZGVuY2llczoge1xuICAgICAgICAgICdkaXJlY3QtcGtnJzogJzEuMC4wJyxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgKTtcbiAgICB3cml0ZUZpbGUoXG4gICAgICBqb2luKHRlc3RSb290LCAnbm9kZV9tb2R1bGVzJywgJ2RpcmVjdC1wa2cnLCAncGFja2FnZS5qc29uJyksXG4gICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIG5hbWU6ICdkaXJlY3QtcGtnJyxcbiAgICAgICAgdmVyc2lvbjogJzEuMC4wJyxcbiAgICAgICAgZXhwb3J0czoge1xuICAgICAgICAgICcuL3N0ZXAnOiAnLi9zdGVwLmpzJyxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgKTtcbiAgICB3cml0ZUZpbGUoZGlyZWN0UGFja2FnZUZpbGUsIGBleHBvcnQgY29uc3Qgc3RlcCA9IHRydWU7XFxuYCk7XG4gICAgd3JpdGVGaWxlKFxuICAgICAgam9pbihcbiAgICAgICAgdGVzdFJvb3QsXG4gICAgICAgICdub2RlX21vZHVsZXMnLFxuICAgICAgICAncGFyZW50LXBrZycsXG4gICAgICAgICdub2RlX21vZHVsZXMnLFxuICAgICAgICAnbmVzdGVkLXBrZycsXG4gICAgICAgICdwYWNrYWdlLmpzb24nXG4gICAgICApLFxuICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBuYW1lOiAnbmVzdGVkLXBrZycsXG4gICAgICAgIHZlcnNpb246ICcxLjAuMCcsXG4gICAgICAgIGV4cG9ydHM6IHtcbiAgICAgICAgICAnLi9zdGVwJzogJy4vc3RlcC5qcycsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICk7XG4gICAgd3JpdGVGaWxlKG5lc3RlZFBhY2thZ2VGaWxlLCBgZXhwb3J0IGNvbnN0IHN0ZXAgPSB0cnVlO1xcbmApO1xuXG4gICAgY29uc3QgYnVpbGRlciA9IGNyZWF0ZUJ1aWxkZXIodGVzdFJvb3QpO1xuICAgIGV4cGVjdChcbiAgICAgIGJ1aWxkZXIuY3JlYXRlUm91dGVJbXBvcnRTcGVjaWZpZXJQdWJsaWMoZGlyZWN0UGFja2FnZUZpbGUsIHJvdXRlRGlyKVxuICAgICkudG9CZSgnZGlyZWN0LXBrZy9zdGVwJyk7XG4gICAgZXhwZWN0KFxuICAgICAgYnVpbGRlci5jcmVhdGVSb3V0ZUltcG9ydFNwZWNpZmllclB1YmxpYyhuZXN0ZWRQYWNrYWdlRmlsZSwgcm91dGVEaXIpXG4gICAgKS50b0JlKFxuICAgICAgJy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9wYXJlbnQtcGtnL25vZGVfbW9kdWxlcy9uZXN0ZWQtcGtnL3N0ZXAuanMnXG4gICAgKTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"standalone.d.ts","sourceRoot":"","sources":["../src/standalone.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,qBAAa,iBAAkB,SAAQ,WAAW;gBACpC,MAAM,EAAE,cAAc;IAO5B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAiCd,oBAAoB;CAanC"}
1
+ {"version":3,"file":"standalone.d.ts","sourceRoot":"","sources":["../src/standalone.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,qBAAa,iBAAkB,SAAQ,WAAW;gBACpC,MAAM,EAAE,cAAc;IAO5B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAsCd,oBAAoB;CAanC"}
@@ -1,3 +1,4 @@
1
+ import { rm } from 'node:fs/promises';
1
2
  import { BaseBuilder } from './base-builder.js';
2
3
  export class StandaloneBuilder extends BaseBuilder {
3
4
  constructor(config) {
@@ -7,6 +8,10 @@ export class StandaloneBuilder extends BaseBuilder {
7
8
  });
8
9
  }
9
10
  async build() {
11
+ // Existing standalone output may still contain the retired step route.
12
+ await rm(this.resolvePath('.well-known/workflow/v1/step.mjs'), {
13
+ force: true,
14
+ });
10
15
  const inputFiles = await this.getInputFiles();
11
16
  const tsconfigPath = await this.findTsConfigPath();
12
17
  const stepsBundlePath = this.resolvePath(this.config.stepsBundlePath);
@@ -39,4 +44,4 @@ export class StandaloneBuilder extends BaseBuilder {
39
44
  });
40
45
  }
41
46
  }
42
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhbmRhbG9uZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9zdGFuZGFsb25lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUdoRCxNQUFNLE9BQU8saUJBQWtCLFNBQVEsV0FBVztJQUNoRCxZQUFZLE1BQXNCO1FBQ2hDLEtBQUssQ0FBQztZQUNKLEdBQUcsTUFBTTtZQUNULElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQztTQUNaLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsS0FBSztRQUNULE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzlDLE1BQU0sWUFBWSxHQUFHLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFFbkQsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3RFLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FDekMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FDaEMsQ0FBQztRQUNGLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUM1QyxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUUvQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsMEJBQTBCLENBQUMsQ0FBQztRQUVwRCxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsb0JBQW9CLENBQUM7WUFDbkQsVUFBVTtZQUNWLFlBQVksRUFBRSxlQUFlO1lBQzdCLFdBQVcsRUFBRSxrQkFBa0I7WUFDL0IsWUFBWTtZQUNaLGlCQUFpQixFQUFFLElBQUk7U0FDeEIsQ0FBQyxDQUFDO1FBRUgsTUFBTSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUVsQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLHlCQUF5QixDQUFDLENBQUM7UUFDaEUsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDO1lBQ3hCLGtCQUFrQjtZQUNsQixXQUFXO1lBQ1gsUUFBUTtTQUNULENBQUMsQ0FBQztRQUVILE1BQU0sSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVPLEtBQUssQ0FBQyxvQkFBb0I7UUFDaEMsSUFBSSxDQUFDLGtCQUFrQixDQUNyQiw0QkFBNEIsRUFDNUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FDOUIsQ0FBQztRQUVGLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDMUUsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFFOUMsTUFBTSxJQUFJLENBQUMsbUJBQW1CLENBQUM7WUFDN0IsT0FBTyxFQUFFLGlCQUFpQjtTQUMzQixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlQnVpbGRlciB9IGZyb20gJy4vYmFzZS1idWlsZGVyLmpzJztcbmltcG9ydCB0eXBlIHsgV29ya2Zsb3dDb25maWcgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuZXhwb3J0IGNsYXNzIFN0YW5kYWxvbmVCdWlsZGVyIGV4dGVuZHMgQmFzZUJ1aWxkZXIge1xuICBjb25zdHJ1Y3Rvcihjb25maWc6IFdvcmtmbG93Q29uZmlnKSB7XG4gICAgc3VwZXIoe1xuICAgICAgLi4uY29uZmlnLFxuICAgICAgZGlyczogWycuJ10sXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBidWlsZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBpbnB1dEZpbGVzID0gYXdhaXQgdGhpcy5nZXRJbnB1dEZpbGVzKCk7XG4gICAgY29uc3QgdHNjb25maWdQYXRoID0gYXdhaXQgdGhpcy5maW5kVHNDb25maWdQYXRoKCk7XG5cbiAgICBjb25zdCBzdGVwc0J1bmRsZVBhdGggPSB0aGlzLnJlc29sdmVQYXRoKHRoaXMuY29uZmlnLnN0ZXBzQnVuZGxlUGF0aCk7XG4gICAgY29uc3Qgd29ya2Zsb3dCdW5kbGVQYXRoID0gdGhpcy5yZXNvbHZlUGF0aChcbiAgICAgIHRoaXMuY29uZmlnLndvcmtmbG93c0J1bmRsZVBhdGhcbiAgICApO1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlRGlyZWN0b3J5KHN0ZXBzQnVuZGxlUGF0aCk7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVEaXJlY3Rvcnkod29ya2Zsb3dCdW5kbGVQYXRoKTtcblxuICAgIHRoaXMubG9nQmFzZUJ1aWxkZXJJbmZvKCdDcmVhdGluZyBjb21iaW5lZCBidW5kbGUnKTtcblxuICAgIGNvbnN0IHsgbWFuaWZlc3QgfSA9IGF3YWl0IHRoaXMuY3JlYXRlQ29tYmluZWRCdW5kbGUoe1xuICAgICAgaW5wdXRGaWxlcyxcbiAgICAgIHN0ZXBzT3V0ZmlsZTogc3RlcHNCdW5kbGVQYXRoLFxuICAgICAgZmxvd091dGZpbGU6IHdvcmtmbG93QnVuZGxlUGF0aCxcbiAgICAgIHRzY29uZmlnUGF0aCxcbiAgICAgIGJ1bmRsZUZpbmFsT3V0cHV0OiB0cnVlLFxuICAgIH0pO1xuXG4gICAgYXdhaXQgdGhpcy5idWlsZFdlYmhvb2tGdW5jdGlvbigpO1xuXG4gICAgY29uc3QgbWFuaWZlc3REaXIgPSB0aGlzLnJlc29sdmVQYXRoKCcud2VsbC1rbm93bi93b3JrZmxvdy92MScpO1xuICAgIGF3YWl0IHRoaXMuY3JlYXRlTWFuaWZlc3Qoe1xuICAgICAgd29ya2Zsb3dCdW5kbGVQYXRoLFxuICAgICAgbWFuaWZlc3REaXIsXG4gICAgICBtYW5pZmVzdCxcbiAgICB9KTtcblxuICAgIGF3YWl0IHRoaXMuY3JlYXRlQ2xpZW50TGlicmFyeSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBidWlsZFdlYmhvb2tGdW5jdGlvbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmxvZ0Jhc2VCdWlsZGVySW5mbyhcbiAgICAgICdDcmVhdGluZyB3ZWJob29rIGJ1bmRsZSBhdCcsXG4gICAgICB0aGlzLmNvbmZpZy53ZWJob29rQnVuZGxlUGF0aFxuICAgICk7XG5cbiAgICBjb25zdCB3ZWJob29rQnVuZGxlUGF0aCA9IHRoaXMucmVzb2x2ZVBhdGgodGhpcy5jb25maWcud2ViaG9va0J1bmRsZVBhdGgpO1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlRGlyZWN0b3J5KHdlYmhvb2tCdW5kbGVQYXRoKTtcblxuICAgIGF3YWl0IHRoaXMuY3JlYXRlV2ViaG9va0J1bmRsZSh7XG4gICAgICBvdXRmaWxlOiB3ZWJob29rQnVuZGxlUGF0aCxcbiAgICB9KTtcbiAgfVxufVxuIl19
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhbmRhbG9uZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9zdGFuZGFsb25lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN0QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFHaEQsTUFBTSxPQUFPLGlCQUFrQixTQUFRLFdBQVc7SUFDaEQsWUFBWSxNQUFzQjtRQUNoQyxLQUFLLENBQUM7WUFDSixHQUFHLE1BQU07WUFDVCxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUM7U0FDWixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLEtBQUs7UUFDVCx1RUFBdUU7UUFDdkUsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxrQ0FBa0MsQ0FBQyxFQUFFO1lBQzdELEtBQUssRUFBRSxJQUFJO1NBQ1osQ0FBQyxDQUFDO1FBRUgsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDOUMsTUFBTSxZQUFZLEdBQUcsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUVuRCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDdEUsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUN6QyxJQUFJLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUNoQyxDQUFDO1FBQ0YsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzVDLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBRS9DLElBQUksQ0FBQyxrQkFBa0IsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBRXBELE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztZQUNuRCxVQUFVO1lBQ1YsWUFBWSxFQUFFLGVBQWU7WUFDN0IsV0FBVyxFQUFFLGtCQUFrQjtZQUMvQixZQUFZO1lBQ1osaUJBQWlCLEVBQUUsSUFBSTtTQUN4QixDQUFDLENBQUM7UUFFSCxNQUFNLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBRWxDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUNoRSxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUM7WUFDeEIsa0JBQWtCO1lBQ2xCLFdBQVc7WUFDWCxRQUFRO1NBQ1QsQ0FBQyxDQUFDO1FBRUgsTUFBTSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRU8sS0FBSyxDQUFDLG9CQUFvQjtRQUNoQyxJQUFJLENBQUMsa0JBQWtCLENBQ3JCLDRCQUE0QixFQUM1QixJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUM5QixDQUFDO1FBRUYsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUMxRSxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUU5QyxNQUFNLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztZQUM3QixPQUFPLEVBQUUsaUJBQWlCO1NBQzNCLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJtIH0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgeyBCYXNlQnVpbGRlciB9IGZyb20gJy4vYmFzZS1idWlsZGVyLmpzJztcbmltcG9ydCB0eXBlIHsgV29ya2Zsb3dDb25maWcgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuZXhwb3J0IGNsYXNzIFN0YW5kYWxvbmVCdWlsZGVyIGV4dGVuZHMgQmFzZUJ1aWxkZXIge1xuICBjb25zdHJ1Y3Rvcihjb25maWc6IFdvcmtmbG93Q29uZmlnKSB7XG4gICAgc3VwZXIoe1xuICAgICAgLi4uY29uZmlnLFxuICAgICAgZGlyczogWycuJ10sXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBidWlsZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBFeGlzdGluZyBzdGFuZGFsb25lIG91dHB1dCBtYXkgc3RpbGwgY29udGFpbiB0aGUgcmV0aXJlZCBzdGVwIHJvdXRlLlxuICAgIGF3YWl0IHJtKHRoaXMucmVzb2x2ZVBhdGgoJy53ZWxsLWtub3duL3dvcmtmbG93L3YxL3N0ZXAubWpzJyksIHtcbiAgICAgIGZvcmNlOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgY29uc3QgaW5wdXRGaWxlcyA9IGF3YWl0IHRoaXMuZ2V0SW5wdXRGaWxlcygpO1xuICAgIGNvbnN0IHRzY29uZmlnUGF0aCA9IGF3YWl0IHRoaXMuZmluZFRzQ29uZmlnUGF0aCgpO1xuXG4gICAgY29uc3Qgc3RlcHNCdW5kbGVQYXRoID0gdGhpcy5yZXNvbHZlUGF0aCh0aGlzLmNvbmZpZy5zdGVwc0J1bmRsZVBhdGgpO1xuICAgIGNvbnN0IHdvcmtmbG93QnVuZGxlUGF0aCA9IHRoaXMucmVzb2x2ZVBhdGgoXG4gICAgICB0aGlzLmNvbmZpZy53b3JrZmxvd3NCdW5kbGVQYXRoXG4gICAgKTtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZURpcmVjdG9yeShzdGVwc0J1bmRsZVBhdGgpO1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlRGlyZWN0b3J5KHdvcmtmbG93QnVuZGxlUGF0aCk7XG5cbiAgICB0aGlzLmxvZ0Jhc2VCdWlsZGVySW5mbygnQ3JlYXRpbmcgY29tYmluZWQgYnVuZGxlJyk7XG5cbiAgICBjb25zdCB7IG1hbmlmZXN0IH0gPSBhd2FpdCB0aGlzLmNyZWF0ZUNvbWJpbmVkQnVuZGxlKHtcbiAgICAgIGlucHV0RmlsZXMsXG4gICAgICBzdGVwc091dGZpbGU6IHN0ZXBzQnVuZGxlUGF0aCxcbiAgICAgIGZsb3dPdXRmaWxlOiB3b3JrZmxvd0J1bmRsZVBhdGgsXG4gICAgICB0c2NvbmZpZ1BhdGgsXG4gICAgICBidW5kbGVGaW5hbE91dHB1dDogdHJ1ZSxcbiAgICB9KTtcblxuICAgIGF3YWl0IHRoaXMuYnVpbGRXZWJob29rRnVuY3Rpb24oKTtcblxuICAgIGNvbnN0IG1hbmlmZXN0RGlyID0gdGhpcy5yZXNvbHZlUGF0aCgnLndlbGwta25vd24vd29ya2Zsb3cvdjEnKTtcbiAgICBhd2FpdCB0aGlzLmNyZWF0ZU1hbmlmZXN0KHtcbiAgICAgIHdvcmtmbG93QnVuZGxlUGF0aCxcbiAgICAgIG1hbmlmZXN0RGlyLFxuICAgICAgbWFuaWZlc3QsXG4gICAgfSk7XG5cbiAgICBhd2FpdCB0aGlzLmNyZWF0ZUNsaWVudExpYnJhcnkoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYnVpbGRXZWJob29rRnVuY3Rpb24oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5sb2dCYXNlQnVpbGRlckluZm8oXG4gICAgICAnQ3JlYXRpbmcgd2ViaG9vayBidW5kbGUgYXQnLFxuICAgICAgdGhpcy5jb25maWcud2ViaG9va0J1bmRsZVBhdGhcbiAgICApO1xuXG4gICAgY29uc3Qgd2ViaG9va0J1bmRsZVBhdGggPSB0aGlzLnJlc29sdmVQYXRoKHRoaXMuY29uZmlnLndlYmhvb2tCdW5kbGVQYXRoKTtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZURpcmVjdG9yeSh3ZWJob29rQnVuZGxlUGF0aCk7XG5cbiAgICBhd2FpdCB0aGlzLmNyZWF0ZVdlYmhvb2tCdW5kbGUoe1xuICAgICAgb3V0ZmlsZTogd2ViaG9va0J1bmRsZVBhdGgsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
package/dist/types.d.ts CHANGED
@@ -59,6 +59,29 @@ interface BaseWorkflowConfig {
59
59
  * config wins over env var, env var wins over the default.
60
60
  */
61
61
  sourcemap?: SourcemapMode;
62
+ /**
63
+ * Whether workflow discovery descends into `node_modules`. Defaults to
64
+ * `true`: workflow/step/serde files shipped by dependencies that declare a
65
+ * `workflow`/`@workflow/*` dependency are discovered and compiled into the
66
+ * app's bundles.
67
+ *
68
+ * Set to `false` to opt out — imports from your application code that resolve
69
+ * into `node_modules` are not followed, so the build never reads, scans, or
70
+ * descends into dependency file graphs. This skips the cost of scanning
71
+ * `node_modules` and stops third-party workflow/step/serde code from being
72
+ * discovered. Useful when a dependency ships workflow code you don't want
73
+ * compiled into your app, or trips discovery with `"use workflow"`/`"use
74
+ * step"` strings you don't intend to run.
75
+ *
76
+ * The SDK's own runtime serde classes (e.g. `Run`) stay registered: they are
77
+ * reached through a seeded entry point that lives under `node_modules`, and
78
+ * imports *within* `node_modules` are still followed.
79
+ *
80
+ * Can also be set via the `WORKFLOW_DISCOVER_NODE_MODULES` environment
81
+ * variable (`0`/`false` to disable); config wins over env var, env var wins
82
+ * over the default.
83
+ */
84
+ discoverWorkflowsInNodeModules?: boolean;
62
85
  }
63
86
  /**
64
87
  * Configuration for standalone (CLI-based) builds.
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,0FAOpB,CAAC;AACX,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE7D;;;;;;;;;GASG;AACH,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,MAAM,CAAC;AAEhF;;GAEG;AACH,UAAU,kBAAkB;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAK7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAE5B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAG9B,eAAe,CAAC,EAAE,MAAM,CAAC;IAIzB,cAAc,CAAC,EAAE,MAAM,CAAC;IAIxB,OAAO,CAAC,EAAE,MAAM,CAAC;IAGjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAIlB,iCAAiC,CAAC,EAAE,OAAO,CAAC;IAG5C,qCAAqC,CAAC,EAAE,OAAO,CAAC;IAGhD,+BAA+B,CAAC,EAAE,OAAO,CAAC;IAG1C,0BAA0B,CAAC,EAAE,OAAO,CAAC;IAGrC,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;;;;;;;;;;;;;;OAgBG;IACH,SAAS,CAAC,EAAE,aAAa,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAiB,SAAQ,kBAAkB;IAC1D,WAAW,EAAE,YAAY,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,uBAAwB,SAAQ,kBAAkB;IACjE,WAAW,EAAE,yBAAyB,CAAC;IACvC,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,UAAW,SAAQ,kBAAkB;IACpD,WAAW,EAAE,MAAM,CAAC;IAEpB,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,eAAgB,SAAQ,kBAAkB;IACzD,WAAW,EAAE,WAAW,CAAC;IAEzB,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,WAAY,SAAQ,kBAAkB;IACrD,WAAW,EAAE,OAAO,CAAC;IAErB,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,UAAW,SAAQ,kBAAkB;IACpD,WAAW,EAAE,MAAM,CAAC;IAEpB,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GACtB,gBAAgB,GAChB,uBAAuB,GACvB,UAAU,GACV,UAAU,GACV,eAAe,GACf,WAAW,CAAC;AAEhB,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,GAAG,SAAS,GACzB,MAAM,IAAI,WAAW,CAEvB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js CHANGED
@@ -9,4 +9,4 @@ export const validBuildTargets = [
9
9
  export function isValidBuildTarget(target) {
10
10
  return !!target && validBuildTargets.includes(target);
11
11
  }
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUc7SUFDL0IsWUFBWTtJQUNaLHlCQUF5QjtJQUN6QixNQUFNO0lBQ04sTUFBTTtJQUNOLFdBQVc7SUFDWCxPQUFPO0NBQ0MsQ0FBQztBQXlLWCxNQUFNLFVBQVUsa0JBQWtCLENBQ2hDLE1BQTBCO0lBRTFCLE9BQU8sQ0FBQyxDQUFDLE1BQU0sSUFBSSxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsTUFBcUIsQ0FBQyxDQUFDO0FBQ3ZFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgdmFsaWRCdWlsZFRhcmdldHMgPSBbXG4gICdzdGFuZGFsb25lJyxcbiAgJ3ZlcmNlbC1idWlsZC1vdXRwdXQtYXBpJyxcbiAgJ25leHQnLFxuICAnbmVzdCcsXG4gICdzdmVsdGVraXQnLFxuICAnYXN0cm8nLFxuXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIEJ1aWxkVGFyZ2V0ID0gKHR5cGVvZiB2YWxpZEJ1aWxkVGFyZ2V0cylbbnVtYmVyXTtcblxuLyoqXG4gKiBTb3VyY2UgbWFwIGVtaXNzaW9uIG1vZGUgZm9yIGdlbmVyYXRlZCB3b3JrZmxvdyBidW5kbGVzLiBNYXRjaGVzIGVzYnVpbGQnc1xuICogYHNvdXJjZW1hcGAgb3B0aW9uIHZvY2FidWxhcnk6XG4gKlxuICogLSBgdHJ1ZWAgLyBgJ2xpbmtlZCdgOiB3cml0ZSBhIHNlcGFyYXRlIGAubWFwYCBmaWxlIGFuZCBhZGQgYSBgc291cmNlTWFwcGluZ1VSTGAgY29tbWVudFxuICogLSBgJ2lubGluZSdgOiBlbWl0IGEgYmFzZTY0LWVuY29kZWQgc291cmNlIG1hcCBhdCB0aGUgZW5kIG9mIHRoZSBidW5kbGVcbiAqIC0gYCdleHRlcm5hbCdgOiB3cml0ZSBhIHNlcGFyYXRlIGAubWFwYCBmaWxlIHdpdGhvdXQgdGhlIGNvbW1lbnRcbiAqIC0gYCdib3RoJ2A6IGVtaXQgYm90aCBpbmxpbmUgYW5kIGV4dGVybmFsIHNvdXJjZSBtYXBzXG4gKiAtIGBmYWxzZWA6IG9taXQgc291cmNlIG1hcHMgZW50aXJlbHlcbiAqL1xuZXhwb3J0IHR5cGUgU291cmNlbWFwTW9kZSA9IGJvb2xlYW4gfCAnaW5saW5lJyB8ICdsaW5rZWQnIHwgJ2V4dGVybmFsJyB8ICdib3RoJztcblxuLyoqXG4gKiBDb21tb24gY29uZmlndXJhdGlvbiBvcHRpb25zIHNoYXJlZCBhY3Jvc3MgYWxsIGJ1aWxkZXIgdHlwZXMuXG4gKi9cbmludGVyZmFjZSBCYXNlV29ya2Zsb3dDb25maWcge1xuICB3YXRjaD86IGJvb2xlYW47XG4gIGRpcnM6IHN0cmluZ1tdO1xuICB3b3JraW5nRGlyOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBQcm9qZWN0IHJvb3QgdXNlZCBmb3IgdHJhY2luZywgZGlzY292ZXJ5LCBhbmQgdHNjb25maWcgbG9va3VwIGR1cmluZyBTV0NcbiAgICogdHJhbnNmb3Jtcy4gRGVmYXVsdHMgdG8gYHdvcmtpbmdEaXJgLlxuICAgKi9cbiAgcHJvamVjdFJvb3Q/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFByb2plY3Qgcm9vdCB1c2VkIGZvciBwYWNrYWdlIGFuZCB3b3Jrc3BhY2UgbW9kdWxlLXNwZWNpZmllciByZXNvbHV0aW9uXG4gICAqIGR1cmluZyBTV0MgdHJhbnNmb3Jtcy4gRGVmYXVsdHMgdG8gYHByb2plY3RSb290YCB3aGVuIHNldCwgb3RoZXJ3aXNlXG4gICAqIGB3b3JraW5nRGlyYC5cbiAgICovXG4gIG1vZHVsZVNwZWNpZmllclJvb3Q/OiBzdHJpbmc7XG5cbiAgLy8gT3B0aW9uYWxseSBnZW5lcmF0ZSBhIGNsaWVudCBsaWJyYXJ5IGZvciB3b3JrZmxvdyBleGVjdXRpb24uIFRoZSBwcmVmZXJyZWRcbiAgLy8gbWV0aG9kIG9mIHVzaW5nIHdvcmtmbG93IGlzIHRvIHVzZSBhIGxvYWRlciB3aXRoaW4gYSBmcmFtZXdvcmsgKGxpa2VcbiAgLy8gTmV4dEpTKSB0aGF0IHJlc29sdmVzIGNsaWVudCBiaW5kaW5ncyBvbiB0aGUgZmx5LlxuICBjbGllbnRCdW5kbGVQYXRoPzogc3RyaW5nO1xuXG4gIGV4dGVybmFsUGFja2FnZXM/OiBzdHJpbmdbXTtcblxuICB3b3JrZmxvd01hbmlmZXN0UGF0aD86IHN0cmluZztcblxuICAvLyBPcHRpb25hbCBwcmVmaXggZm9yIGRlYnVnIGZpbGVzIChlLmcuLCBcIl9cIiBmb3IgQXN0cm8gdG8gaWdub3JlIHRoZW0pXG4gIGRlYnVnRmlsZVByZWZpeD86IHN0cmluZztcblxuICAvLyBPcHRpb25hbCBkaXJlY3Rvcnkgd2hlcmUgZGlhZ25vc3RpY3MgYXJ0aWZhY3RzIHNob3VsZCBiZSB3cml0dGVuLlxuICAvLyBUaGUgd29ya2Zsb3cgbWFuaWZlc3QgaXMgd3JpdHRlbiB0byB3b3JrZmxvd3MtbWFuaWZlc3QuanNvbiBpbnNpZGUgdGhpcyBkaXIuXG4gIGRpYWdub3N0aWNzRGlyPzogc3RyaW5nO1xuXG4gIC8vIE9wdGlvbmFsIGZyYW1ld29yayBvdXRwdXQgZGlyZWN0b3J5LCB1c2VkIGJ5IGJ1aWxkZXJzIHRoYXQgbWlycm9yIGZyYW1ld29ya1xuICAvLyBhcnRpZmFjdCBsb2NhdGlvbnMuXG4gIGRpc3REaXI/OiBzdHJpbmc7XG5cbiAgLy8gT3B0aW9uYWwgcm91dGUgcHJlZml4IGZvciBhcHBzIGRlcGxveWVkIGJlbG93IHRoZSBvcmlnaW4gcm9vdC5cbiAgYmFzZVBhdGg/OiBzdHJpbmc7XG5cbiAgLy8gU3VwcHJlc3MgaW5mb3JtYXRpb25hbCBsb2dzIGVtaXR0ZWQgYnkgY3JlYXRlV29ya2Zsb3dzQnVuZGxlKClcbiAgLy8gKGUuZy4gaW50ZXJtZWRpYXRlL2ZpbmFsIHdvcmtmbG93IGJ1bmRsZSB0aW1pbmcgbG9ncykuXG4gIHN1cHByZXNzQ3JlYXRlV29ya2Zsb3dzQnVuZGxlTG9ncz86IGJvb2xlYW47XG5cbiAgLy8gU3VwcHJlc3MgZXNidWlsZCB3YXJuaW5ncyBlbWl0dGVkIGJ5IGNyZWF0ZVdvcmtmbG93c0J1bmRsZSgpLlxuICBzdXBwcmVzc0NyZWF0ZVdvcmtmbG93c0J1bmRsZVdhcm5pbmdzPzogYm9vbGVhbjtcblxuICAvLyBTdXBwcmVzcyBpbmZvcm1hdGlvbmFsIGxvZ3MgZW1pdHRlZCBieSBjcmVhdGVXZWJob29rQnVuZGxlKCkuXG4gIHN1cHByZXNzQ3JlYXRlV2ViaG9va0J1bmRsZUxvZ3M/OiBib29sZWFuO1xuXG4gIC8vIFN1cHByZXNzIGluZm9ybWF0aW9uYWwgbG9ncyBlbWl0dGVkIGJ5IGNyZWF0ZU1hbmlmZXN0KCkuXG4gIHN1cHByZXNzQ3JlYXRlTWFuaWZlc3RMb2dzPzogYm9vbGVhbjtcblxuICAvLyBOb2RlLmpzIHJ1bnRpbWUgdmVyc2lvbiBmb3IgVmVyY2VsIEZ1bmN0aW9ucyAoZS5nLiwgXCJub2RlanMyMi54XCIsIFwibm9kZWpzMjQueFwiKVxuICBydW50aW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDb250cm9scyBob3cgc291cmNlIG1hcHMgYXJlIGVtaXR0ZWQgZm9yIHdvcmtmbG93IGJ1bmRsZXMuIEFjY2VwdHMgdGhlXG4gICAqIHNhbWUgdmFsdWVzIGFzIGVzYnVpbGQncyBgc291cmNlbWFwYCBvcHRpb24uXG4gICAqXG4gICAqIERlZmF1bHQgaXMgYCdpbmxpbmUnYCBmb3IgdGhlIHN0ZXAgYnVuZGxlIGFuZCBpbnRlcm1lZGlhdGUgd29ya2Zsb3dcbiAgICogYnVuZGxlIChnaXZlcyByZWFkYWJsZSBzdGFjayB0cmFjZXMgZm9yIHN0ZXAgZXJyb3JzIGFuZCB3b3JrZmxvdyBWTVxuICAgKiBlcnJvcnMpLiBTZXR0aW5nIGBmYWxzZWAgb21pdHMgc291cmNlIG1hcHMgZW50aXJlbHksIHdoaWNoIHByb2R1Y2VzXG4gICAqIHNtYWxsZXIgYnVuZGxlcyDigJQgdXNlZnVsIGZvciBzdGF5aW5nIHVuZGVyIHRoZSBWZXJjZWwgMjUwTUIgZnVuY3Rpb25cbiAgICogbGltaXQg4oCUIGF0IHRoZSBjb3N0IG9mIHN0YWNrIHRyYWNlcyB0aGF0IHJlZmVyZW5jZSBnZW5lcmF0ZWQgY29kZS5cbiAgICpcbiAgICogYCdleHRlcm5hbCdgIGFuZCBgJ2xpbmtlZCdgIHdyaXRlIGEgc2VwYXJhdGUgYC5tYXBgIGZpbGU7IHVzZSB0aGVzZVxuICAgKiB3aGVuIHlvdSB3YW50IHRvIHNoaXAgc291cmNlIG1hcHMgdG8gb2JzZXJ2YWJpbGl0eSB0b29saW5nIGJ1dCBrZWVwXG4gICAqIHRoZW0gb3V0IG9mIHRoZSBmdW5jdGlvbiBidW5kbGUuXG4gICAqXG4gICAqIENhbiBhbHNvIGJlIHNldCB2aWEgdGhlIGBXT1JLRkxPV19TT1VSQ0VNQVBgIGVudmlyb25tZW50IHZhcmlhYmxlO1xuICAgKiBjb25maWcgd2lucyBvdmVyIGVudiB2YXIsIGVudiB2YXIgd2lucyBvdmVyIHRoZSBkZWZhdWx0LlxuICAgKi9cbiAgc291cmNlbWFwPzogU291cmNlbWFwTW9kZTtcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciBzdGFuZGFsb25lIChDTEktYmFzZWQpIGJ1aWxkcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdGFuZGFsb25lQ29uZmlnIGV4dGVuZHMgQmFzZVdvcmtmbG93Q29uZmlnIHtcbiAgYnVpbGRUYXJnZXQ6ICdzdGFuZGFsb25lJztcbiAgc3RlcHNCdW5kbGVQYXRoOiBzdHJpbmc7XG4gIHdvcmtmbG93c0J1bmRsZVBhdGg6IHN0cmluZztcbiAgd2ViaG9va0J1bmRsZVBhdGg6IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciBWZXJjZWwgQnVpbGQgT3V0cHV0IEFQSSBidWlsZHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmVyY2VsQnVpbGRPdXRwdXRDb25maWcgZXh0ZW5kcyBCYXNlV29ya2Zsb3dDb25maWcge1xuICBidWlsZFRhcmdldDogJ3ZlcmNlbC1idWlsZC1vdXRwdXQtYXBpJztcbiAgc3RlcHNCdW5kbGVQYXRoOiBzdHJpbmc7XG4gIHdvcmtmbG93c0J1bmRsZVBhdGg6IHN0cmluZztcbiAgd2ViaG9va0J1bmRsZVBhdGg6IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciBOZXh0LmpzIGJ1aWxkcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZXh0Q29uZmlnIGV4dGVuZHMgQmFzZVdvcmtmbG93Q29uZmlnIHtcbiAgYnVpbGRUYXJnZXQ6ICduZXh0JztcbiAgLy8gTmV4dC5qcyBidWlsZGVyIGNvbXB1dGVzIHBhdGhzIGR5bmFtaWNhbGx5LCBzbyB0aGVzZSBhcmUgbm90IHVzZWRcbiAgc3RlcHNCdW5kbGVQYXRoOiBzdHJpbmc7XG4gIHdvcmtmbG93c0J1bmRsZVBhdGg6IHN0cmluZztcbiAgd2ViaG9va0J1bmRsZVBhdGg6IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciBTdmVsdGVLaXQgYnVpbGRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN2ZWx0ZUtpdENvbmZpZyBleHRlbmRzIEJhc2VXb3JrZmxvd0NvbmZpZyB7XG4gIGJ1aWxkVGFyZ2V0OiAnc3ZlbHRla2l0JztcbiAgLy8gU3ZlbHRlS2l0IGJ1aWxkZXIgY29tcHV0ZXMgcGF0aHMgZHluYW1pY2FsbHksIHNvIHRoZXNlIGFyZSBub3QgdXNlZFxuICBzdGVwc0J1bmRsZVBhdGg6IHN0cmluZztcbiAgd29ya2Zsb3dzQnVuZGxlUGF0aDogc3RyaW5nO1xuICB3ZWJob29rQnVuZGxlUGF0aDogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIEFzdHJvIGJ1aWxkcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBc3Ryb0NvbmZpZyBleHRlbmRzIEJhc2VXb3JrZmxvd0NvbmZpZyB7XG4gIGJ1aWxkVGFyZ2V0OiAnYXN0cm8nO1xuICAvLyBBc3RybyBidWlsZGVyIGNvbXB1dGVzIHBhdGhzIGR5bmFtaWNhbGx5LCBzbyB0aGVzZSBhcmUgbm90IHVzZWRcbiAgc3RlcHNCdW5kbGVQYXRoOiBzdHJpbmc7XG4gIHdvcmtmbG93c0J1bmRsZVBhdGg6IHN0cmluZztcbiAgd2ViaG9va0J1bmRsZVBhdGg6IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciBOZXN0SlMgYnVpbGRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5lc3RDb25maWcgZXh0ZW5kcyBCYXNlV29ya2Zsb3dDb25maWcge1xuICBidWlsZFRhcmdldDogJ25lc3QnO1xuICAvLyBOZXN0SlMgYnVpbGRlciBjb21wdXRlcyBwYXRocyBkeW5hbWljYWxseSwgc28gdGhlc2UgYXJlIG5vdCB1c2VkXG4gIHN0ZXBzQnVuZGxlUGF0aDogc3RyaW5nO1xuICB3b3JrZmxvd3NCdW5kbGVQYXRoOiBzdHJpbmc7XG4gIHdlYmhvb2tCdW5kbGVQYXRoOiBzdHJpbmc7XG59XG5cbi8qKlxuICogRGlzY3JpbWluYXRlZCB1bmlvbiBvZiBhbGwgYnVpbGRlciBjb25maWd1cmF0aW9uIHR5cGVzLlxuICovXG5leHBvcnQgdHlwZSBXb3JrZmxvd0NvbmZpZyA9XG4gIHwgU3RhbmRhbG9uZUNvbmZpZ1xuICB8IFZlcmNlbEJ1aWxkT3V0cHV0Q29uZmlnXG4gIHwgTmV4dENvbmZpZ1xuICB8IE5lc3RDb25maWdcbiAgfCBTdmVsdGVLaXRDb25maWdcbiAgfCBBc3Ryb0NvbmZpZztcblxuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRCdWlsZFRhcmdldChcbiAgdGFyZ2V0OiBzdHJpbmcgfCB1bmRlZmluZWRcbik6IHRhcmdldCBpcyBCdWlsZFRhcmdldCB7XG4gIHJldHVybiAhIXRhcmdldCAmJiB2YWxpZEJ1aWxkVGFyZ2V0cy5pbmNsdWRlcyh0YXJnZXQgYXMgQnVpbGRUYXJnZXQpO1xufVxuIl19
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUc7SUFDL0IsWUFBWTtJQUNaLHlCQUF5QjtJQUN6QixNQUFNO0lBQ04sTUFBTTtJQUNOLFdBQVc7SUFDWCxPQUFPO0NBQ0MsQ0FBQztBQWlNWCxNQUFNLFVBQVUsa0JBQWtCLENBQ2hDLE1BQTBCO0lBRTFCLE9BQU8sQ0FBQyxDQUFDLE1BQU0sSUFBSSxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsTUFBcUIsQ0FBQyxDQUFDO0FBQ3ZFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgdmFsaWRCdWlsZFRhcmdldHMgPSBbXG4gICdzdGFuZGFsb25lJyxcbiAgJ3ZlcmNlbC1idWlsZC1vdXRwdXQtYXBpJyxcbiAgJ25leHQnLFxuICAnbmVzdCcsXG4gICdzdmVsdGVraXQnLFxuICAnYXN0cm8nLFxuXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIEJ1aWxkVGFyZ2V0ID0gKHR5cGVvZiB2YWxpZEJ1aWxkVGFyZ2V0cylbbnVtYmVyXTtcblxuLyoqXG4gKiBTb3VyY2UgbWFwIGVtaXNzaW9uIG1vZGUgZm9yIGdlbmVyYXRlZCB3b3JrZmxvdyBidW5kbGVzLiBNYXRjaGVzIGVzYnVpbGQnc1xuICogYHNvdXJjZW1hcGAgb3B0aW9uIHZvY2FidWxhcnk6XG4gKlxuICogLSBgdHJ1ZWAgLyBgJ2xpbmtlZCdgOiB3cml0ZSBhIHNlcGFyYXRlIGAubWFwYCBmaWxlIGFuZCBhZGQgYSBgc291cmNlTWFwcGluZ1VSTGAgY29tbWVudFxuICogLSBgJ2lubGluZSdgOiBlbWl0IGEgYmFzZTY0LWVuY29kZWQgc291cmNlIG1hcCBhdCB0aGUgZW5kIG9mIHRoZSBidW5kbGVcbiAqIC0gYCdleHRlcm5hbCdgOiB3cml0ZSBhIHNlcGFyYXRlIGAubWFwYCBmaWxlIHdpdGhvdXQgdGhlIGNvbW1lbnRcbiAqIC0gYCdib3RoJ2A6IGVtaXQgYm90aCBpbmxpbmUgYW5kIGV4dGVybmFsIHNvdXJjZSBtYXBzXG4gKiAtIGBmYWxzZWA6IG9taXQgc291cmNlIG1hcHMgZW50aXJlbHlcbiAqL1xuZXhwb3J0IHR5cGUgU291cmNlbWFwTW9kZSA9IGJvb2xlYW4gfCAnaW5saW5lJyB8ICdsaW5rZWQnIHwgJ2V4dGVybmFsJyB8ICdib3RoJztcblxuLyoqXG4gKiBDb21tb24gY29uZmlndXJhdGlvbiBvcHRpb25zIHNoYXJlZCBhY3Jvc3MgYWxsIGJ1aWxkZXIgdHlwZXMuXG4gKi9cbmludGVyZmFjZSBCYXNlV29ya2Zsb3dDb25maWcge1xuICB3YXRjaD86IGJvb2xlYW47XG4gIGRpcnM6IHN0cmluZ1tdO1xuICB3b3JraW5nRGlyOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBQcm9qZWN0IHJvb3QgdXNlZCBmb3IgdHJhY2luZywgZGlzY292ZXJ5LCBhbmQgdHNjb25maWcgbG9va3VwIGR1cmluZyBTV0NcbiAgICogdHJhbnNmb3Jtcy4gRGVmYXVsdHMgdG8gYHdvcmtpbmdEaXJgLlxuICAgKi9cbiAgcHJvamVjdFJvb3Q/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFByb2plY3Qgcm9vdCB1c2VkIGZvciBwYWNrYWdlIGFuZCB3b3Jrc3BhY2UgbW9kdWxlLXNwZWNpZmllciByZXNvbHV0aW9uXG4gICAqIGR1cmluZyBTV0MgdHJhbnNmb3Jtcy4gRGVmYXVsdHMgdG8gYHByb2plY3RSb290YCB3aGVuIHNldCwgb3RoZXJ3aXNlXG4gICAqIGB3b3JraW5nRGlyYC5cbiAgICovXG4gIG1vZHVsZVNwZWNpZmllclJvb3Q/OiBzdHJpbmc7XG5cbiAgLy8gT3B0aW9uYWxseSBnZW5lcmF0ZSBhIGNsaWVudCBsaWJyYXJ5IGZvciB3b3JrZmxvdyBleGVjdXRpb24uIFRoZSBwcmVmZXJyZWRcbiAgLy8gbWV0aG9kIG9mIHVzaW5nIHdvcmtmbG93IGlzIHRvIHVzZSBhIGxvYWRlciB3aXRoaW4gYSBmcmFtZXdvcmsgKGxpa2VcbiAgLy8gTmV4dEpTKSB0aGF0IHJlc29sdmVzIGNsaWVudCBiaW5kaW5ncyBvbiB0aGUgZmx5LlxuICBjbGllbnRCdW5kbGVQYXRoPzogc3RyaW5nO1xuXG4gIGV4dGVybmFsUGFja2FnZXM/OiBzdHJpbmdbXTtcblxuICB3b3JrZmxvd01hbmlmZXN0UGF0aD86IHN0cmluZztcblxuICAvLyBPcHRpb25hbCBwcmVmaXggZm9yIGRlYnVnIGZpbGVzIChlLmcuLCBcIl9cIiBmb3IgQXN0cm8gdG8gaWdub3JlIHRoZW0pXG4gIGRlYnVnRmlsZVByZWZpeD86IHN0cmluZztcblxuICAvLyBPcHRpb25hbCBkaXJlY3Rvcnkgd2hlcmUgZGlhZ25vc3RpY3MgYXJ0aWZhY3RzIHNob3VsZCBiZSB3cml0dGVuLlxuICAvLyBUaGUgd29ya2Zsb3cgbWFuaWZlc3QgaXMgd3JpdHRlbiB0byB3b3JrZmxvd3MtbWFuaWZlc3QuanNvbiBpbnNpZGUgdGhpcyBkaXIuXG4gIGRpYWdub3N0aWNzRGlyPzogc3RyaW5nO1xuXG4gIC8vIE9wdGlvbmFsIGZyYW1ld29yayBvdXRwdXQgZGlyZWN0b3J5LCB1c2VkIGJ5IGJ1aWxkZXJzIHRoYXQgbWlycm9yIGZyYW1ld29ya1xuICAvLyBhcnRpZmFjdCBsb2NhdGlvbnMuXG4gIGRpc3REaXI/OiBzdHJpbmc7XG5cbiAgLy8gT3B0aW9uYWwgcm91dGUgcHJlZml4IGZvciBhcHBzIGRlcGxveWVkIGJlbG93IHRoZSBvcmlnaW4gcm9vdC5cbiAgYmFzZVBhdGg/OiBzdHJpbmc7XG5cbiAgLy8gU3VwcHJlc3MgaW5mb3JtYXRpb25hbCBsb2dzIGVtaXR0ZWQgYnkgY3JlYXRlV29ya2Zsb3dzQnVuZGxlKClcbiAgLy8gKGUuZy4gaW50ZXJtZWRpYXRlL2ZpbmFsIHdvcmtmbG93IGJ1bmRsZSB0aW1pbmcgbG9ncykuXG4gIHN1cHByZXNzQ3JlYXRlV29ya2Zsb3dzQnVuZGxlTG9ncz86IGJvb2xlYW47XG5cbiAgLy8gU3VwcHJlc3MgZXNidWlsZCB3YXJuaW5ncyBlbWl0dGVkIGJ5IGNyZWF0ZVdvcmtmbG93c0J1bmRsZSgpLlxuICBzdXBwcmVzc0NyZWF0ZVdvcmtmbG93c0J1bmRsZVdhcm5pbmdzPzogYm9vbGVhbjtcblxuICAvLyBTdXBwcmVzcyBpbmZvcm1hdGlvbmFsIGxvZ3MgZW1pdHRlZCBieSBjcmVhdGVXZWJob29rQnVuZGxlKCkuXG4gIHN1cHByZXNzQ3JlYXRlV2ViaG9va0J1bmRsZUxvZ3M/OiBib29sZWFuO1xuXG4gIC8vIFN1cHByZXNzIGluZm9ybWF0aW9uYWwgbG9ncyBlbWl0dGVkIGJ5IGNyZWF0ZU1hbmlmZXN0KCkuXG4gIHN1cHByZXNzQ3JlYXRlTWFuaWZlc3RMb2dzPzogYm9vbGVhbjtcblxuICAvLyBOb2RlLmpzIHJ1bnRpbWUgdmVyc2lvbiBmb3IgVmVyY2VsIEZ1bmN0aW9ucyAoZS5nLiwgXCJub2RlanMyMi54XCIsIFwibm9kZWpzMjQueFwiKVxuICBydW50aW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDb250cm9scyBob3cgc291cmNlIG1hcHMgYXJlIGVtaXR0ZWQgZm9yIHdvcmtmbG93IGJ1bmRsZXMuIEFjY2VwdHMgdGhlXG4gICAqIHNhbWUgdmFsdWVzIGFzIGVzYnVpbGQncyBgc291cmNlbWFwYCBvcHRpb24uXG4gICAqXG4gICAqIERlZmF1bHQgaXMgYCdpbmxpbmUnYCBmb3IgdGhlIHN0ZXAgYnVuZGxlIGFuZCBpbnRlcm1lZGlhdGUgd29ya2Zsb3dcbiAgICogYnVuZGxlIChnaXZlcyByZWFkYWJsZSBzdGFjayB0cmFjZXMgZm9yIHN0ZXAgZXJyb3JzIGFuZCB3b3JrZmxvdyBWTVxuICAgKiBlcnJvcnMpLiBTZXR0aW5nIGBmYWxzZWAgb21pdHMgc291cmNlIG1hcHMgZW50aXJlbHksIHdoaWNoIHByb2R1Y2VzXG4gICAqIHNtYWxsZXIgYnVuZGxlcyDigJQgdXNlZnVsIGZvciBzdGF5aW5nIHVuZGVyIHRoZSBWZXJjZWwgMjUwTUIgZnVuY3Rpb25cbiAgICogbGltaXQg4oCUIGF0IHRoZSBjb3N0IG9mIHN0YWNrIHRyYWNlcyB0aGF0IHJlZmVyZW5jZSBnZW5lcmF0ZWQgY29kZS5cbiAgICpcbiAgICogYCdleHRlcm5hbCdgIGFuZCBgJ2xpbmtlZCdgIHdyaXRlIGEgc2VwYXJhdGUgYC5tYXBgIGZpbGU7IHVzZSB0aGVzZVxuICAgKiB3aGVuIHlvdSB3YW50IHRvIHNoaXAgc291cmNlIG1hcHMgdG8gb2JzZXJ2YWJpbGl0eSB0b29saW5nIGJ1dCBrZWVwXG4gICAqIHRoZW0gb3V0IG9mIHRoZSBmdW5jdGlvbiBidW5kbGUuXG4gICAqXG4gICAqIENhbiBhbHNvIGJlIHNldCB2aWEgdGhlIGBXT1JLRkxPV19TT1VSQ0VNQVBgIGVudmlyb25tZW50IHZhcmlhYmxlO1xuICAgKiBjb25maWcgd2lucyBvdmVyIGVudiB2YXIsIGVudiB2YXIgd2lucyBvdmVyIHRoZSBkZWZhdWx0LlxuICAgKi9cbiAgc291cmNlbWFwPzogU291cmNlbWFwTW9kZTtcblxuICAvKipcbiAgICogV2hldGhlciB3b3JrZmxvdyBkaXNjb3ZlcnkgZGVzY2VuZHMgaW50byBgbm9kZV9tb2R1bGVzYC4gRGVmYXVsdHMgdG9cbiAgICogYHRydWVgOiB3b3JrZmxvdy9zdGVwL3NlcmRlIGZpbGVzIHNoaXBwZWQgYnkgZGVwZW5kZW5jaWVzIHRoYXQgZGVjbGFyZSBhXG4gICAqIGB3b3JrZmxvd2AvYEB3b3JrZmxvdy8qYCBkZXBlbmRlbmN5IGFyZSBkaXNjb3ZlcmVkIGFuZCBjb21waWxlZCBpbnRvIHRoZVxuICAgKiBhcHAncyBidW5kbGVzLlxuICAgKlxuICAgKiBTZXQgdG8gYGZhbHNlYCB0byBvcHQgb3V0IOKAlCBpbXBvcnRzIGZyb20geW91ciBhcHBsaWNhdGlvbiBjb2RlIHRoYXQgcmVzb2x2ZVxuICAgKiBpbnRvIGBub2RlX21vZHVsZXNgIGFyZSBub3QgZm9sbG93ZWQsIHNvIHRoZSBidWlsZCBuZXZlciByZWFkcywgc2NhbnMsIG9yXG4gICAqIGRlc2NlbmRzIGludG8gZGVwZW5kZW5jeSBmaWxlIGdyYXBocy4gVGhpcyBza2lwcyB0aGUgY29zdCBvZiBzY2FubmluZ1xuICAgKiBgbm9kZV9tb2R1bGVzYCBhbmQgc3RvcHMgdGhpcmQtcGFydHkgd29ya2Zsb3cvc3RlcC9zZXJkZSBjb2RlIGZyb20gYmVpbmdcbiAgICogZGlzY292ZXJlZC4gVXNlZnVsIHdoZW4gYSBkZXBlbmRlbmN5IHNoaXBzIHdvcmtmbG93IGNvZGUgeW91IGRvbid0IHdhbnRcbiAgICogY29tcGlsZWQgaW50byB5b3VyIGFwcCwgb3IgdHJpcHMgZGlzY292ZXJ5IHdpdGggYFwidXNlIHdvcmtmbG93XCJgL2BcInVzZVxuICAgKiBzdGVwXCJgIHN0cmluZ3MgeW91IGRvbid0IGludGVuZCB0byBydW4uXG4gICAqXG4gICAqIFRoZSBTREsncyBvd24gcnVudGltZSBzZXJkZSBjbGFzc2VzIChlLmcuIGBSdW5gKSBzdGF5IHJlZ2lzdGVyZWQ6IHRoZXkgYXJlXG4gICAqIHJlYWNoZWQgdGhyb3VnaCBhIHNlZWRlZCBlbnRyeSBwb2ludCB0aGF0IGxpdmVzIHVuZGVyIGBub2RlX21vZHVsZXNgLCBhbmRcbiAgICogaW1wb3J0cyAqd2l0aGluKiBgbm9kZV9tb2R1bGVzYCBhcmUgc3RpbGwgZm9sbG93ZWQuXG4gICAqXG4gICAqIENhbiBhbHNvIGJlIHNldCB2aWEgdGhlIGBXT1JLRkxPV19ESVNDT1ZFUl9OT0RFX01PRFVMRVNgIGVudmlyb25tZW50XG4gICAqIHZhcmlhYmxlIChgMGAvYGZhbHNlYCB0byBkaXNhYmxlKTsgY29uZmlnIHdpbnMgb3ZlciBlbnYgdmFyLCBlbnYgdmFyIHdpbnNcbiAgICogb3ZlciB0aGUgZGVmYXVsdC5cbiAgICovXG4gIGRpc2NvdmVyV29ya2Zsb3dzSW5Ob2RlTW9kdWxlcz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3Igc3RhbmRhbG9uZSAoQ0xJLWJhc2VkKSBidWlsZHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RhbmRhbG9uZUNvbmZpZyBleHRlbmRzIEJhc2VXb3JrZmxvd0NvbmZpZyB7XG4gIGJ1aWxkVGFyZ2V0OiAnc3RhbmRhbG9uZSc7XG4gIHN0ZXBzQnVuZGxlUGF0aDogc3RyaW5nO1xuICB3b3JrZmxvd3NCdW5kbGVQYXRoOiBzdHJpbmc7XG4gIHdlYmhvb2tCdW5kbGVQYXRoOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgVmVyY2VsIEJ1aWxkIE91dHB1dCBBUEkgYnVpbGRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZlcmNlbEJ1aWxkT3V0cHV0Q29uZmlnIGV4dGVuZHMgQmFzZVdvcmtmbG93Q29uZmlnIHtcbiAgYnVpbGRUYXJnZXQ6ICd2ZXJjZWwtYnVpbGQtb3V0cHV0LWFwaSc7XG4gIHN0ZXBzQnVuZGxlUGF0aDogc3RyaW5nO1xuICB3b3JrZmxvd3NCdW5kbGVQYXRoOiBzdHJpbmc7XG4gIHdlYmhvb2tCdW5kbGVQYXRoOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgTmV4dC5qcyBidWlsZHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmV4dENvbmZpZyBleHRlbmRzIEJhc2VXb3JrZmxvd0NvbmZpZyB7XG4gIGJ1aWxkVGFyZ2V0OiAnbmV4dCc7XG4gIC8vIE5leHQuanMgYnVpbGRlciBjb21wdXRlcyBwYXRocyBkeW5hbWljYWxseSwgc28gdGhlc2UgYXJlIG5vdCB1c2VkXG4gIHN0ZXBzQnVuZGxlUGF0aDogc3RyaW5nO1xuICB3b3JrZmxvd3NCdW5kbGVQYXRoOiBzdHJpbmc7XG4gIHdlYmhvb2tCdW5kbGVQYXRoOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgU3ZlbHRlS2l0IGJ1aWxkcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdmVsdGVLaXRDb25maWcgZXh0ZW5kcyBCYXNlV29ya2Zsb3dDb25maWcge1xuICBidWlsZFRhcmdldDogJ3N2ZWx0ZWtpdCc7XG4gIC8vIFN2ZWx0ZUtpdCBidWlsZGVyIGNvbXB1dGVzIHBhdGhzIGR5bmFtaWNhbGx5LCBzbyB0aGVzZSBhcmUgbm90IHVzZWRcbiAgc3RlcHNCdW5kbGVQYXRoOiBzdHJpbmc7XG4gIHdvcmtmbG93c0J1bmRsZVBhdGg6IHN0cmluZztcbiAgd2ViaG9va0J1bmRsZVBhdGg6IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciBBc3RybyBidWlsZHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXN0cm9Db25maWcgZXh0ZW5kcyBCYXNlV29ya2Zsb3dDb25maWcge1xuICBidWlsZFRhcmdldDogJ2FzdHJvJztcbiAgLy8gQXN0cm8gYnVpbGRlciBjb21wdXRlcyBwYXRocyBkeW5hbWljYWxseSwgc28gdGhlc2UgYXJlIG5vdCB1c2VkXG4gIHN0ZXBzQnVuZGxlUGF0aDogc3RyaW5nO1xuICB3b3JrZmxvd3NCdW5kbGVQYXRoOiBzdHJpbmc7XG4gIHdlYmhvb2tCdW5kbGVQYXRoOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgTmVzdEpTIGJ1aWxkcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZXN0Q29uZmlnIGV4dGVuZHMgQmFzZVdvcmtmbG93Q29uZmlnIHtcbiAgYnVpbGRUYXJnZXQ6ICduZXN0JztcbiAgLy8gTmVzdEpTIGJ1aWxkZXIgY29tcHV0ZXMgcGF0aHMgZHluYW1pY2FsbHksIHNvIHRoZXNlIGFyZSBub3QgdXNlZFxuICBzdGVwc0J1bmRsZVBhdGg6IHN0cmluZztcbiAgd29ya2Zsb3dzQnVuZGxlUGF0aDogc3RyaW5nO1xuICB3ZWJob29rQnVuZGxlUGF0aDogc3RyaW5nO1xufVxuXG4vKipcbiAqIERpc2NyaW1pbmF0ZWQgdW5pb24gb2YgYWxsIGJ1aWxkZXIgY29uZmlndXJhdGlvbiB0eXBlcy5cbiAqL1xuZXhwb3J0IHR5cGUgV29ya2Zsb3dDb25maWcgPVxuICB8IFN0YW5kYWxvbmVDb25maWdcbiAgfCBWZXJjZWxCdWlsZE91dHB1dENvbmZpZ1xuICB8IE5leHRDb25maWdcbiAgfCBOZXN0Q29uZmlnXG4gIHwgU3ZlbHRlS2l0Q29uZmlnXG4gIHwgQXN0cm9Db25maWc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkQnVpbGRUYXJnZXQoXG4gIHRhcmdldDogc3RyaW5nIHwgdW5kZWZpbmVkXG4pOiB0YXJnZXQgaXMgQnVpbGRUYXJnZXQge1xuICByZXR1cm4gISF0YXJnZXQgJiYgdmFsaWRCdWlsZFRhcmdldHMuaW5jbHVkZXModGFyZ2V0IGFzIEJ1aWxkVGFyZ2V0KTtcbn1cbiJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"vercel-build-output-api.d.ts","sourceRoot":"","sources":["../src/vercel-build-output-api.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,qBAAa,2BAA4B,SAAQ,WAAW;IACpD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAwEd,oBAAoB;YA2BpB,uBAAuB;CAyBtC"}
1
+ {"version":3,"file":"vercel-build-output-api.d.ts","sourceRoot":"","sources":["../src/vercel-build-output-api.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,qBAAa,2BAA4B,SAAQ,WAAW;IACpD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YA6Ed,oBAAoB;YA2BpB,uBAAuB;CAyBtC"}
@@ -1,4 +1,4 @@
1
- import { copyFile, mkdir, writeFile } from 'node:fs/promises';
1
+ import { copyFile, mkdir, rm, writeFile } from 'node:fs/promises';
2
2
  import { join, resolve } from 'node:path';
3
3
  import { BaseBuilder } from './base-builder.js';
4
4
  import { getWorkflowQueueTrigger } from './constants.js';
@@ -9,6 +9,11 @@ export class VercelBuildOutputAPIBuilder extends BaseBuilder {
9
9
  const workflowGeneratedDir = join(functionsDir, '.well-known/workflow/v1');
10
10
  // Ensure output directories exist
11
11
  await mkdir(workflowGeneratedDir, { recursive: true });
12
+ // Build caches may still contain the retired standalone step function.
13
+ await rm(join(workflowGeneratedDir, 'step.func'), {
14
+ recursive: true,
15
+ force: true,
16
+ });
12
17
  const inputFiles = await this.getInputFiles();
13
18
  const tsconfigPath = await this.findTsConfigPath();
14
19
  // Create combined bundle in flow.func/
@@ -88,4 +93,4 @@ export class VercelBuildOutputAPIBuilder extends BaseBuilder {
88
93
  this.logBaseBuilderInfo('Webhook function available at /.well-known/workflow/v1/webhook/[token]');
89
94
  }
90
95
  }
91
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyY2VsLWJ1aWxkLW91dHB1dC1hcGkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdmVyY2VsLWJ1aWxkLW91dHB1dC1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDOUQsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDMUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2hELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXpELE1BQU0sT0FBTywyQkFBNEIsU0FBUSxXQUFXO0lBQzFELEtBQUssQ0FBQyxLQUFLO1FBQ1QsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDcEUsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNsRCxNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUseUJBQXlCLENBQUMsQ0FBQztRQUUzRSxrQ0FBa0M7UUFDbEMsTUFBTSxLQUFLLENBQUMsb0JBQW9CLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUV2RCxNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUM5QyxNQUFNLFlBQVksR0FBRyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ25ELHVDQUF1QztRQUN2QyxJQUFJLENBQUMsa0JBQWtCLENBQ3JCLG9EQUFvRCxDQUNyRCxDQUFDO1FBQ0YsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDakUsTUFBTSxL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QWMsRUFBRTtZQUN4QyxPQUFPLEVBQUUsV0FBVztZQUNwQixnQkFBZ0IsRUFBRSxLQUFLO1lBQ3ZCLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU87U0FDN0IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxTQUFpQjtRQUNyRCwwQ0FBMEM7UUFDMUMsTUFBTSxpQkFBaUIsR0FBRztZQUN4QixPQUFPLEVBQUUsQ0FBQztZQUNWLE1BQU0sRUFBRTtnQkFDTjtvQkFDRSxHQUFHLEVBQUUsMERBQTBEO29CQUMvRCxJQUFJLEVBQUUsMENBQTBDO2lCQUNqRDthQUNGO1NBQ0YsQ0FBQztRQUVGLE1BQU0sU0FBUyxDQUNiLElBQUksQ0FBQyxTQUFTLEVBQUUsYUFBYSxDQUFDLEVBQzlCLElBQUksQ0FBQyxTQUFTLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUMzQyxDQUFDO1FBRUYsSUFBSSxDQUFDLGtCQUFrQixDQUFDLCtCQUErQixTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxrQkFBa0IsQ0FDckIsOERBQThELENBQy9ELENBQUM7UUFDRixJQUFJLENBQUMsa0JBQWtCLENBQ3JCLHdFQUF3RSxDQUN6RSxDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29weUZpbGUsIG1rZGlyLCB3cml0ZUZpbGUgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCB7IGpvaW4sIHJlc29sdmUgfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgQmFzZUJ1aWxkZXIgfSBmcm9tICcuL2Jhc2UtYnVpbGRlci5qcyc7XG5pbXBvcnQgeyBnZXRXb3JrZmxvd1F1ZXVlVHJpZ2dlciB9IGZyb20gJy4vY29uc3RhbnRzLmpzJztcblxuZXhwb3J0IGNsYXNzIFZlcmNlbEJ1aWxkT3V0cHV0QVBJQnVpbGRlciBleHRlbmRzIEJhc2VCdWlsZGVyIHtcbiAgYXN5bmMgYnVpbGQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgb3V0cHV0RGlyID0gcmVzb2x2ZSh0aGlzLmNvbmZpZy53b3JraW5nRGlyLCAnLnZlcmNlbC9vdXRwdXQnKTtcbiAgICBjb25zdCBmdW5jdGlvbnNEaXIgPSBqb2luKG91dHB1dERpciwgJ2Z1bmN0aW9ucycpO1xuICAgIGNvbnN0IHdvcmtmbG93R2VuZXJhdGVkRGlyID0gam9pbihmdW5jdGlvbnNEaXIsICcud2VsbC1rbm93bi93b3JrZmxvdy92MScpO1xuXG4gICAgLy8gRW5zdXJlIG91dHB1dCBkaXJlY3RvcmllcyBleGlzdFxuICAgIGF3YWl0IG1rZGlyKHdvcmtmbG93R2VuZXJhdGVkRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICAgIGNvbnN0IGlucHV0RmlsZXMgPSBhd2FpdCB0aGlzLmdldElucHV0RmlsZXMoKTtcbiAgICBjb25zdCB0c2NvbmZpZ1BhdGggPSBhd2FpdCB0aGlzLmZpbmRUc0NvbmZpZ1BhdGgoKTtcbiAgICAvLyBDcmVhdGUgY29tYmluZWQgYnVuZGxlIGluIGZsb3cuZnVuYy9cbiAgICB0aGlzLmxvZ0Jhc2VCdWlsZGVySW5mbyhcbiAgICAgICdDcmVhdGluZyBWZXJjZWwgQnVpbGQgT3V0cHV0IEFQSSBjb21iaW5lZCBmdW5jdGlvbidcbiAgICApO1xuICAgIGNvbnN0IHdvcmtmbG93c0Z1bmNEaXIgPSBqb2luKHdvcmtmbG93R2VuZXJhdGVkRGlyLCAnZmxvdy5mdW5jJyk7XG4gICAgYXdhaXQgbWtkaXIod29ya2Zsb3dzRnVuY0RpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgICBjb25zdCB7IG1hbmlmZXN0IH0gPSBhd2FpdCB0aGlzLmNyZWF0ZUNvbWJpbmVkQnVuZGxlKHtcbiAgICAgIGlucHV0RmlsZXMsXG4gICAgICBzdGVwc091dGZpbGU6IGpvaW4od29ya2Zsb3dzRnVuY0RpciwgJ19fc3RlcF9yZWdpc3RyYXRpb25zLm1qcycpLFxuICAgICAgZmxvd091dGZpbGU6IGpvaW4od29ya2Zsb3dzRnVuY0RpciwgJ2luZGV4Lm1qcycpLFxuICAgICAgdHNjb25maWdQYXRoLFxuICAgICAgYnVuZGxlRmluYWxPdXRwdXQ6IHRydWUsXG4gICAgfSk7XG5cbiAgICAvLyBDcmVhdGUgcGFja2FnZS5qc29uIGFuZCAudmMtY29uZmlnLmpzb24gZm9yIGNvbWJpbmVkIGZ1bmN0aW9uXG4gICAgYXdhaXQgdGhpcy5jcmVhdGVQYWNrYWdlSnNvbih3b3JrZmxvd3NGdW5jRGlyLCAnbW9kdWxlJyk7XG4gICAgYXdhaXQgdGhpcy5jcmVhdGVWY0NvbmZpZyh3b3JrZmxvd3NGdW5jRGlyLCB7XG4gICAgICBoYW5kbGVyOiAnaW5kZXgubWpzJyxcbiAgICAgIC8vIFNraXAgdGhlIHNvdXJjZS1tYXAtc3VwcG9ydCBydW50aW1lIHNoaW0gd2hlbiBzb3VyY2VtYXBzIGFyZVxuICAgICAgLy8gZGlzYWJsZWQg4oCUIGl0J3MgYSBtZWFuaW5nZnVsIGNodW5rIG9mIHRoZSBmdW5jdGlvbiBidW5kbGUgYW5kXG4gICAgICAvLyBzZXJ2ZXMgbm8gcHVycG9zZSB3aXRob3V0IG1hcHMuXG4gICAgICBzaG91bGRBZGRTb3VyY2VtYXBTdXBwb3J0OiB0aGlzLnNvdXJjZW1hcHNFbmFibGVkLFxuICAgICAgbWF4RHVyYXRpb246ICdtYXgnLFxuICAgICAgZXhwZXJpbWVudGFsVHJpZ2dlcnM6IFtnZXRXb3JrZmxvd1F1ZXVlVHJpZ2dlcigpXSxcbiAgICAgIHJ1bnRpbWU6IHRoaXMuY29uZmlnLnJ1bnRpbWUsXG4gICAgfSk7XG5cbiAgICBhd2FpdCB0aGlzLmJ1aWxkV2ViaG9va0Z1bmN0aW9uKHsgd29ya2Zsb3dHZW5lcmF0ZWREaXIgfSk7XG4gICAgYXdhaXQgdGhpcy5jcmVhdGVCdWlsZE91dHB1dENvbmZpZyhvdXRwdXREaXIpO1xuXG4gICAgLy8gR2VuZXJhdGUgdW5pZmllZCBtYW5pZmVzdFxuICAgIGNvbnN0IHdvcmtmbG93QnVuZGxlUGF0aCA9IGpvaW4oXG4gICAgICB3b3JrZmxvd0dlbmVyYXRlZERpcixcbiAgICAgICdmbG93LmZ1bmMvaW5kZXgubWpzJ1xuICAgICk7XG4gICAgY29uc3QgbWFuaWZlc3RKc29uID0gYXdhaXQgdGhpcy5jcmVhdGVNYW5pZmVzdCh7XG4gICAgICB3b3JrZmxvd0J1bmRsZVBhdGgsXG4gICAgICBtYW5pZmVzdERpcjogd29ya2Zsb3dHZW5lcmF0ZWREaXIsXG4gICAgICBtYW5pZmVzdCxcbiAgICB9KTtcblxuICAgIC8vIEV4cG9zZSBtYW5pZmVzdCBhcyBhIHN0YXRpYyBmaWxlIHdoZW4gV09SS0ZMT1dfUFVCTElDX01BTklGRVNUPTEuXG4gICAgLy8gVmVyY2VsIEJ1aWxkIE91dHB1dCBBUEkgc2VydmVzIHN0YXRpYyBmaWxlcyBmcm9tIC52ZXJjZWwvb3V0cHV0L3N0YXRpYy9cbiAgICBpZiAodGhpcy5zaG91bGRFeHBvc2VQdWJsaWNNYW5pZmVzdCAmJiBtYW5pZmVzdEpzb24pIHtcbiAgICAgIGNvbnN0IHN0YXRpY01hbmlmZXN0RGlyID0gam9pbihcbiAgICAgICAgb3V0cHV0RGlyLFxuICAgICAgICAnc3RhdGljLy53ZWxsLWtub3duL3dvcmtmbG93L3YxJ1xuICAgICAgKTtcbiAgICAgIGF3YWl0IG1rZGlyKHN0YXRpY01hbmlmZXN0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5WRVJDRUxfREVQTE9ZTUVOVF9JRCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGF3YWl0IHdyaXRlRmlsZShqb2luKHN0YXRpY01hbmlmZXN0RGlyLCAnLmdpdGlnbm9yZScpLCAnKicpO1xuICAgICAgfVxuICAgICAgYXdhaXQgY29weUZpbGUoXG4gICAgICAgIGpvaW4od29ya2Zsb3dHZW5lcmF0ZWREaXIsICdtYW5pZmVzdC5qc29uJyksXG4gICAgICAgIGpvaW4oc3RhdGljTWFuaWZlc3REaXIsICdtYW5pZmVzdC5qc29uJylcbiAgICAgICk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5jcmVhdGVDbGllbnRMaWJyYXJ5KCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGJ1aWxkV2ViaG9va0Z1bmN0aW9uKHtcbiAgICB3b3JrZmxvd0dlbmVyYXRlZERpcixcbiAgICBidW5kbGUgPSB0cnVlLFxuICB9OiB7XG4gICAgd29ya2Zsb3dHZW5lcmF0ZWREaXI6IHN0cmluZztcbiAgICBidW5kbGU/OiBib29sZWFuO1xuICB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5sb2dCYXNlQnVpbGRlckluZm8oXG4gICAgICAnQ3JlYXRpbmcgVmVyY2VsIEJ1aWxkIE91dHB1dCBBUEkgd2ViaG9vayBmdW5jdGlvbidcbiAgICApO1xuICAgIGNvbnN0IHdlYmhvb2tGdW5jRGlyID0gam9pbih3b3JrZmxvd0dlbmVyYXRlZERpciwgJ3dlYmhvb2svW3Rva2VuXS5mdW5jJyk7XG5cbiAgICAvLyBCdW5kbGUgdGhlIHdlYmhvb2sgcm91dGUgd2l0aCBkZXBlbmRlbmNpZXMgcmVzb2x2ZWRcbiAgICBhd2FpdCB0aGlzLmNyZWF0ZVdlYmhvb2tCdW5kbGUoe1xuICAgICAgb3V0ZmlsZTogam9pbih3ZWJob29rRnVuY0RpciwgJ2luZGV4Lm1qcycpLFxuICAgICAgYnVuZGxlLCAvLyBCdWlsZCBPdXRwdXQgQVBJIG5lZWRzIGJ1bmRsaW5nIChleGNlcHQgaW4gdGVzdHMpXG4gICAgfSk7XG5cbiAgICAvLyBDcmVhdGUgcGFja2FnZS5qc29uIGFuZCAudmMtY29uZmlnLmpzb24gZm9yIHdlYmhvb2sgZnVuY3Rpb25cbiAgICBhd2FpdCB0aGlzLmNyZWF0ZVBhY2thZ2VKc29uKHdlYmhvb2tGdW5jRGlyLCAnbW9kdWxlJyk7XG4gICAgYXdhaXQgdGhpcy5jcmVhdGVWY0NvbmZpZyh3ZWJob29rRnVuY0Rpciwge1xuICAgICAgaGFuZGxlcjogJ2luZGV4Lm1qcycsXG4gICAgICBzaG91bGRBZGRIZWxwZXJzOiBmYWxzZSxcbiAgICAgIHJ1bnRpbWU6IHRoaXMuY29uZmlnLnJ1bnRpbWUsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNyZWF0ZUJ1aWxkT3V0cHV0Q29uZmlnKG91dHB1dERpcjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gQ3JlYXRlIGNvbmZpZy5qc29uIGZvciBCdWlsZCBPdXRwdXQgQVBJXG4gICAgY29uc3QgYnVpbGRPdXRwdXRDb25maWcgPSB7XG4gICAgICB2ZXJzaW9uOiAzLFxuICAgICAgcm91dGVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBzcmM6ICdeXFxcXC9cXFxcLndlbGwta25vd25cXFxcL3dvcmtmbG93XFxcXC92MVxcXFwvd2ViaG9va1xcXFwvKFteXFxcXC9dKykkJyxcbiAgICAgICAgICBkZXN0OiAnLy53ZWxsLWtub3duL3dvcmtmbG93L3YxL3dlYmhvb2svW3Rva2VuXScsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG5cbiAgICBhd2FpdCB3cml0ZUZpbGUoXG4gICAgICBqb2luKG91dHB1dERpciwgJ2NvbmZpZy5qc29uJyksXG4gICAgICBKU09OLnN0cmluZ2lmeShidWlsZE91dHB1dENvbmZpZywgbnVsbCwgMilcbiAgICApO1xuXG4gICAgdGhpcy5sb2dCYXNlQnVpbGRlckluZm8oYEJ1aWxkIE91dHB1dCBBUEkgY3JlYXRlZCBhdCAke291dHB1dERpcn1gKTtcbiAgICB0aGlzLmxvZ0Jhc2VCdWlsZGVySW5mbyhcbiAgICAgICdDb21iaW5lZCBmdW5jdGlvbiBhdmFpbGFibGUgYXQgLy53ZWxsLWtub3duL3dvcmtmbG93L3YxL2Zsb3cnXG4gICAgKTtcbiAgICB0aGlzLmxvZ0Jhc2VCdWlsZGVySW5mbyhcbiAgICAgICdXZWJob29rIGZ1bmN0aW9uIGF2YWlsYWJsZSBhdCAvLndlbGwta25vd24vd29ya2Zsb3cvdjEvd2ViaG9vay9bdG9rZW5dJ1xuICAgICk7XG4gIH1cbn1cbiJdfQ==
96
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyY2VsLWJ1aWxkLW91dHB1dC1hcGkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdmVyY2VsLWJ1aWxkLW91dHB1dC1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV6RCxNQUFNLE9BQU8sMkJBQTRCLFNBQVEsV0FBVztJQUMxRCxLQUFLLENBQUMsS0FBSztRQUNULE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDbEQsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLHlCQUF5QixDQUFDLENBQUM7UUFFM0Usa0NBQWtDO1FBQ2xDLE1BQU0sS0FBSyxDQUFDLG9CQUFvQixFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDdkQsdUVBQXVFO1FBQ3ZFLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxXQUFXLENBQUMsRUFBRTtZQUNoRCxTQUFTLEVBQUUsSUFBSTtZQUNmLEtBQUssRUFBRSxJQUFJO1NBQ1osQ0FBQyxDQUFDO1FBRUgsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDOUMsTUFBTSxZQUFZLEdBQUcsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUs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TUFBTSxFQUFFLG9EQUFvRDtTQUM3RCxDQUFDLENBQUM7UUFFSCwrREFBK0Q7UUFDL0QsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsY0FBYyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLEVBQUU7WUFDeEMsT0FBTyxFQUFFLFdBQVc7WUFDcEIsZ0JBQWdCLEVBQUUsS0FBSztZQUN2QixPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPO1NBQzdCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxLQUFLLENBQUMsdUJBQXVCLENBQUMsU0FBaUI7UUFDckQsMENBQTBDO1FBQzFDLE1BQU0saUJBQWlCLEdBQUc7WUFDeEIsT0FBTyxFQUFFLENBQUM7WUFDVixNQUFNLEVBQUU7Z0JBQ047b0JBQ0UsR0FBRyxFQUFFLDBEQUEwRDtvQkFDL0QsSUFBSSxFQUFFLDBDQUEwQztpQkFDakQ7YUFDRjtTQUNGLENBQUM7UUFFRixNQUFNLFNBQVMsQ0FDYixJQUFJLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQyxFQUM5QixJQUFJLENBQUMsU0FBUyxDQUFDLGlCQUFpQixFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FDM0MsQ0FBQztRQUVGLElBQUksQ0FBQyxrQkFBa0IsQ0FBQywrQkFBK0IsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsa0JBQWtCLENBQ3JCLDhEQUE4RCxDQUMvRCxDQUFDO1FBQ0YsSUFBSSxDQUFDLGtCQUFrQixDQUNyQix3RUFBd0UsQ0FDekUsQ0FBQztJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvcHlGaWxlLCBta2Rpciwgcm0sIHdyaXRlRmlsZSB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgam9pbiwgcmVzb2x2ZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyBCYXNlQnVpbGRlciB9IGZyb20gJy4vYmFzZS1idWlsZGVyLmpzJztcbmltcG9ydCB7IGdldFdvcmtmbG93UXVldWVUcmlnZ2VyIH0gZnJvbSAnLi9jb25zdGFudHMuanMnO1xuXG5leHBvcnQgY2xhc3MgVmVyY2VsQnVpbGRPdXRwdXRBUElCdWlsZGVyIGV4dGVuZHMgQmFzZUJ1aWxkZXIge1xuICBhc3luYyBidWlsZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBvdXRwdXREaXIgPSByZXNvbHZlKHRoaXMuY29uZmlnLndvcmtpbmdEaXIsICcudmVyY2VsL291dHB1dCcpO1xuICAgIGNvbnN0IGZ1bmN0aW9uc0RpciA9IGpvaW4ob3V0cHV0RGlyLCAnZnVuY3Rpb25zJyk7XG4gICAgY29uc3Qgd29ya2Zsb3dHZW5lcmF0ZWREaXIgPSBqb2luKGZ1bmN0aW9uc0RpciwgJy53ZWxsLWtub3duL3dvcmtmbG93L3YxJyk7XG5cbiAgICAvLyBFbnN1cmUgb3V0cHV0IGRpcmVjdG9yaWVzIGV4aXN0XG4gICAgYXdhaXQgbWtkaXIod29ya2Zsb3dHZW5lcmF0ZWREaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIC8vIEJ1aWxkIGNhY2hlcyBtYXkgc3RpbGwgY29udGFpbiB0aGUgcmV0aXJlZCBzdGFuZGFsb25lIHN0ZXAgZnVuY3Rpb24uXG4gICAgYXdhaXQgcm0oam9pbih3b3JrZmxvd0dlbmVyYXRlZERpciwgJ3N0ZXAuZnVuYycpLCB7XG4gICAgICByZWN1cnNpdmU6IHRydWUsXG4gICAgICBmb3JjZTogdHJ1ZSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGlucHV0RmlsZXMgPSBhd2FpdCB0aGlzLmdldElucHV0RmlsZXMoKTtcbiAgICBjb25zdCB0c2NvbmZpZ1BhdGggPSBhd2FpdCB0aGlzLmZpbmRUc0NvbmZpZ1BhdGgoKTtcbiAgICAvLyBDcmVhdGUgY29tYmluZWQgYnVuZGxlIGluIGZsb3cuZnVuYy9cbiAgICB0aGlzLmxvZ0Jhc2VCdWlsZGVySW5mbyhcbiAgICAgICdDcmVhdGluZyBWZXJjZWwgQnVpbGQgT3V0cHV0IEFQSSBjb21iaW5lZCBmdW5jdGlvbidcbiAgICApO1xuICAgIGNvbnN0IHdvcmtmbG93c0Z1bmNEaXIgPSBqb2luKHdvcmtmbG93R2VuZXJhdGVkRGlyLCAnZmxvdy5mdW5jJyk7XG4gICAgYXdhaXQgbWtkaXIod29ya2Zsb3dzRnVuY0RpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgICBjb25zdCB7IG1hbmlmZXN0IH0gPSBhd2FpdCB0aGlzLmNyZWF0ZUNvbWJpbmVkQnVuZGxlKHtcbiAgICAgIGlucHV0RmlsZXMsXG4gICAgICBzdGVwc091dGZpbGU6IGpvaW4od29ya2Zsb3dzRnVuY0RpciwgJ19fc3RlcF9yZWdpc3RyYXRpb25zLm1qcycpLFxuICAgICAgZmxvd091dGZpbGU6IGpvaW4od29ya2Zsb3dzRnVuY0RpciwgJ2luZGV4Lm1qcycpLFxuICAgICAgdHNjb25maWdQYXRoLFxuICAgICAgYnVuZGxlRmluYWxPdXRwdXQ6IHRydWUsXG4gICAgfSk7XG5cbiAgICAvLyBDcmVhdGUgcGFja2FnZS5qc29uIGFuZCAudmMtY29uZmlnLmpzb24gZm9yIGNvbWJpbmVkIGZ1bmN0aW9uXG4gICAgYXdhaXQgdGhpcy5jcmVhdGVQYWNrYWdlSnNvbih3b3JrZmxvd3NGdW5jRGlyLCAnbW9kdWxlJyk7XG4gICAgYXdhaXQgdGhpcy5jcmVhdGVWY0NvbmZpZyh3b3JrZmxvd3NGdW5jRGlyLCB7XG4gICAgICBoYW5kbGVyOiAnaW5kZXgubWpzJyxcbiAgICAgIC8vIFNraXAgdGhlIHNvdXJjZS1tYXAtc3VwcG9ydCBydW50aW1lIHNoaW0gd2hlbiBzb3VyY2VtYXBzIGFyZVxuICAgICAgLy8gZGlzYWJsZWQg4oCUIGl0J3MgYSBtZWFuaW5nZnVsIGNodW5rIG9mIHRoZSBmdW5jdGlvbiBidW5kbGUgYW5kXG4gICAgICAvLyBzZXJ2ZXMgbm8gcHVycG9zZSB3aXRob3V0IG1hcHMuXG4gICAgICBzaG91bGRBZGRTb3VyY2VtYXBTdXBwb3J0OiB0aGlzLnNvdXJjZW1hcHNFbmFibGVkLFxuICAgICAgbWF4RHVyYXRpb246ICdtYXgnLFxuICAgICAgZXhwZXJpbWVudGFsVHJpZ2dlcnM6IFtnZXRXb3JrZmxvd1F1ZXVlVHJpZ2dlcigpXSxcbiAgICAgIHJ1bnRpbWU6IHRoaXMuY29uZmlnLnJ1bnRpbWUsXG4gICAgfSk7XG5cbiAgICBhd2FpdCB0aGlzLmJ1aWxkV2ViaG9va0Z1bmN0aW9uKHsgd29ya2Zsb3dHZW5lcmF0ZWREaXIgfSk7XG4gICAgYXdhaXQgdGhpcy5jcmVhdGVCdWlsZE91dHB1dENvbmZpZyhvdXRwdXREaXIpO1xuXG4gICAgLy8gR2VuZXJhdGUgdW5pZmllZCBtYW5pZmVzdFxuICAgIGNvbnN0IHdvcmtmbG93QnVuZGxlUGF0aCA9IGpvaW4oXG4gICAgICB3b3JrZmxvd0dlbmVyYXRlZERpcixcbiAgICAgICdmbG93LmZ1bmMvaW5kZXgubWpzJ1xuICAgICk7XG4gICAgY29uc3QgbWFuaWZlc3RKc29uID0gYXdhaXQgdGhpcy5jcmVhdGVNYW5pZmVzdCh7XG4gICAgICB3b3JrZmxvd0J1bmRsZVBhdGgsXG4gICAgICBtYW5pZmVzdERpcjogd29ya2Zsb3dHZW5lcmF0ZWREaXIsXG4gICAgICBtYW5pZmVzdCxcbiAgICB9KTtcblxuICAgIC8vIEV4cG9zZSBtYW5pZmVzdCBhcyBhIHN0YXRpYyBmaWxlIHdoZW4gV09SS0ZMT1dfUFVCTElDX01BTklGRVNUPTEuXG4gICAgLy8gVmVyY2VsIEJ1aWxkIE91dHB1dCBBUEkgc2VydmVzIHN0YXRpYyBmaWxlcyBmcm9tIC52ZXJjZWwvb3V0cHV0L3N0YXRpYy9cbiAgICBpZiAodGhpcy5zaG91bGRFeHBvc2VQdWJsaWNNYW5pZmVzdCAmJiBtYW5pZmVzdEpzb24pIHtcbiAgICAgIGNvbnN0IHN0YXRpY01hbmlmZXN0RGlyID0gam9pbihcbiAgICAgICAgb3V0cHV0RGlyLFxuICAgICAgICAnc3RhdGljLy53ZWxsLWtub3duL3dvcmtmbG93L3YxJ1xuICAgICAgKTtcbiAgICAgIGF3YWl0IG1rZGlyKHN0YXRpY01hbmlmZXN0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5WRVJDRUxfREVQTE9ZTUVOVF9JRCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGF3YWl0IHdyaXRlRmlsZShqb2luKHN0YXRpY01hbmlmZXN0RGlyLCAnLmdpdGlnbm9yZScpLCAnKicpO1xuICAgICAgfVxuICAgICAgYXdhaXQgY29weUZpbGUoXG4gICAgICAgIGpvaW4od29ya2Zsb3dHZW5lcmF0ZWREaXIsICdtYW5pZmVzdC5qc29uJyksXG4gICAgICAgIGpvaW4oc3RhdGljTWFuaWZlc3REaXIsICdtYW5pZmVzdC5qc29uJylcbiAgICAgICk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5jcmVhdGVDbGllbnRMaWJyYXJ5KCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGJ1aWxkV2ViaG9va0Z1bmN0aW9uKHtcbiAgICB3b3JrZmxvd0dlbmVyYXRlZERpcixcbiAgICBidW5kbGUgPSB0cnVlLFxuICB9OiB7XG4gICAgd29ya2Zsb3dHZW5lcmF0ZWREaXI6IHN0cmluZztcbiAgICBidW5kbGU/OiBib29sZWFuO1xuICB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5sb2dCYXNlQnVpbGRlckluZm8oXG4gICAgICAnQ3JlYXRpbmcgVmVyY2VsIEJ1aWxkIE91dHB1dCBBUEkgd2ViaG9vayBmdW5jdGlvbidcbiAgICApO1xuICAgIGNvbnN0IHdlYmhvb2tGdW5jRGlyID0gam9pbih3b3JrZmxvd0dlbmVyYXRlZERpciwgJ3dlYmhvb2svW3Rva2VuXS5mdW5jJyk7XG5cbiAgICAvLyBCdW5kbGUgdGhlIHdlYmhvb2sgcm91dGUgd2l0aCBkZXBlbmRlbmNpZXMgcmVzb2x2ZWRcbiAgICBhd2FpdCB0aGlzLmNyZWF0ZVdlYmhvb2tCdW5kbGUoe1xuICAgICAgb3V0ZmlsZTogam9pbih3ZWJob29rRnVuY0RpciwgJ2luZGV4Lm1qcycpLFxuICAgICAgYnVuZGxlLCAvLyBCdWlsZCBPdXRwdXQgQVBJIG5lZWRzIGJ1bmRsaW5nIChleGNlcHQgaW4gdGVzdHMpXG4gICAgfSk7XG5cbiAgICAvLyBDcmVhdGUgcGFja2FnZS5qc29uIGFuZCAudmMtY29uZmlnLmpzb24gZm9yIHdlYmhvb2sgZnVuY3Rpb25cbiAgICBhd2FpdCB0aGlzLmNyZWF0ZVBhY2thZ2VKc29uKHdlYmhvb2tGdW5jRGlyLCAnbW9kdWxlJyk7XG4gICAgYXdhaXQgdGhpcy5jcmVhdGVWY0NvbmZpZyh3ZWJob29rRnVuY0Rpciwge1xuICAgICAgaGFuZGxlcjogJ2luZGV4Lm1qcycsXG4gICAgICBzaG91bGRBZGRIZWxwZXJzOiBmYWxzZSxcbiAgICAgIHJ1bnRpbWU6IHRoaXMuY29uZmlnLnJ1bnRpbWUsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNyZWF0ZUJ1aWxkT3V0cHV0Q29uZmlnKG91dHB1dERpcjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gQ3JlYXRlIGNvbmZpZy5qc29uIGZvciBCdWlsZCBPdXRwdXQgQVBJXG4gICAgY29uc3QgYnVpbGRPdXRwdXRDb25maWcgPSB7XG4gICAgICB2ZXJzaW9uOiAzLFxuICAgICAgcm91dGVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBzcmM6ICdeXFxcXC9cXFxcLndlbGwta25vd25cXFxcL3dvcmtmbG93XFxcXC92MVxcXFwvd2ViaG9va1xcXFwvKFteXFxcXC9dKykkJyxcbiAgICAgICAgICBkZXN0OiAnLy53ZWxsLWtub3duL3dvcmtmbG93L3YxL3dlYmhvb2svW3Rva2VuXScsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG5cbiAgICBhd2FpdCB3cml0ZUZpbGUoXG4gICAgICBqb2luKG91dHB1dERpciwgJ2NvbmZpZy5qc29uJyksXG4gICAgICBKU09OLnN0cmluZ2lmeShidWlsZE91dHB1dENvbmZpZywgbnVsbCwgMilcbiAgICApO1xuXG4gICAgdGhpcy5sb2dCYXNlQnVpbGRlckluZm8oYEJ1aWxkIE91dHB1dCBBUEkgY3JlYXRlZCBhdCAke291dHB1dERpcn1gKTtcbiAgICB0aGlzLmxvZ0Jhc2VCdWlsZGVySW5mbyhcbiAgICAgICdDb21iaW5lZCBmdW5jdGlvbiBhdmFpbGFibGUgYXQgLy53ZWxsLWtub3duL3dvcmtmbG93L3YxL2Zsb3cnXG4gICAgKTtcbiAgICB0aGlzLmxvZ0Jhc2VCdWlsZGVySW5mbyhcbiAgICAgICdXZWJob29rIGZ1bmN0aW9uIGF2YWlsYWJsZSBhdCAvLndlbGwta25vd24vd29ya2Zsb3cvdjEvd2ViaG9vay9bdG9rZW5dJ1xuICAgICk7XG4gIH1cbn1cbiJdfQ==