@workflow/builders 5.0.0-beta.13 → 5.0.0-beta.15

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.
@@ -219,10 +219,10 @@ describe('getImportPath', () => {
219
219
  moduleSpecifier: undefined,
220
220
  });
221
221
  });
222
- it('uses the consuming app root to resolve workspace package workflow ids', () => {
222
+ it('uses package specifiers for workspace package root entrypoint ids', () => {
223
223
  const projectRoot = join(testRoot, 'apps/chat');
224
224
  const packageDir = join(testRoot, 'packages/vade');
225
- const filePath = join(packageDir, 'src/internal/message/workflow/handle-message.ts');
225
+ const filePath = join(packageDir, 'src/index.ts');
226
226
  writeJson(join(projectRoot, 'package.json'), {
227
227
  name: 'chat',
228
228
  dependencies: { vade: 'workspace:*' },
@@ -230,12 +230,34 @@ describe('getImportPath', () => {
230
230
  writeJson(join(packageDir, 'package.json'), {
231
231
  name: 'vade',
232
232
  version: '0.0.0',
233
+ main: './src/index.ts',
233
234
  });
234
235
  writeFile(filePath, `'use workflow';\n`);
235
236
  expect(resolveModuleSpecifier(filePath, projectRoot)).toEqual({
236
237
  moduleSpecifier: 'vade@0.0.0',
237
238
  });
238
239
  });
240
+ it('returns undefined for non-exported workspace package files', () => {
241
+ const projectRoot = join(testRoot, 'apps/chat');
242
+ const packageDir = join(testRoot, 'packages/vade');
243
+ const filePath = join(packageDir, 'src/internal/message/workflow/handle-message.ts');
244
+ writeJson(join(projectRoot, 'package.json'), {
245
+ name: 'chat',
246
+ dependencies: { vade: 'workspace:*' },
247
+ });
248
+ writeJson(join(packageDir, 'package.json'), {
249
+ name: 'vade',
250
+ version: '0.0.0',
251
+ });
252
+ writeFile(filePath, `'use workflow';\n`);
253
+ // Non-exported package files fall back to the relative-file-path ID
254
+ // (the SWC plugin uses "./{file}" when moduleSpecifier is undefined).
255
+ // This keeps IDs unique per file across the build instead of collapsing
256
+ // every non-exported file in `vade` to the same "vade@0.0.0" specifier.
257
+ expect(resolveModuleSpecifier(filePath, projectRoot)).toEqual({
258
+ moduleSpecifier: undefined,
259
+ });
260
+ });
239
261
  it('preserves package export subpaths when source files back dist exports', () => {
240
262
  const projectRoot = join(testRoot, 'apps/chat');
241
263
  const workspacePkgDir = join(testRoot, 'packages/agent');
@@ -257,4 +279,4 @@ describe('getImportPath', () => {
257
279
  });
258
280
  });
259
281
  });
260
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlLXNwZWNpZmllci50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL21vZHVsZS1zcGVjaWZpZXIudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDakMsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDMUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDckUsT0FBTyxFQUNMLHlCQUF5QixFQUN6QixhQUFhLEVBQ2Isc0JBQXNCLEdBQ3ZCLE1BQU0sdUJBQXVCLENBQUM7QUFFL0IsU0FBUyxTQUFTLENBQUMsSUFBWSxFQUFFLEtBQWM7SUFDN0MsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzlDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQy9ELENBQUM7QUFFRCxTQUFTLFNBQVMsQ0FBQyxJQUFZLEVBQUUsUUFBUSxHQUFHLEVBQUU7SUFDNUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzlDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3pDLENBQUM7QUFFRCxRQUFRLENBQUMsZUFBZSxFQUFFLEdBQUcsRUFBRTtJQUM3QixJQUFJLFFBQWdCLENB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Q0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG1rZGlyU3luYywgbWtkdGVtcFN5bmMsIHJtU3luYywgd3JpdGVGaWxlU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgdG1wZGlyIH0gZnJvbSAnbm9kZTpvcyc7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IGFmdGVyRWFjaCwgYmVmb3JlRWFjaCwgZGVzY3JpYmUsIGV4cGVjdCwgaXQgfSBmcm9tICd2aXRlc3QnO1xuaW1wb3J0IHtcbiAgY2xlYXJNb2R1bGVTcGVjaWZpZXJDYWNoZSxcbiAgZ2V0SW1wb3J0UGF0aCxcbiAgcmVzb2x2ZU1vZHVsZVNwZWNpZmllcixcbn0gZnJvbSAnLi9tb2R1bGUtc3BlY2lmaWVyLmpzJztcblxuZnVuY3Rpb24gd3JpdGVKc29uKHBhdGg6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiB2b2lkIHtcbiAgbWtkaXJTeW5jKGRpcm5hbWUocGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICB3cml0ZUZpbGVTeW5jKHBhdGgsIEpTT04uc3RyaW5naWZ5KHZhbHVlLCBudWxsLCAyKSwgJ3V0Zi04Jyk7XG59XG5cbmZ1bmN0aW9uIHdyaXRlRmlsZShwYXRoOiBzdHJpbmcsIGNvbnRlbnRzID0gJycpOiB2b2lkIHtcbiAgbWtkaXJTeW5jKGRpcm5hbWUocGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICB3cml0ZUZpbGVTeW5jKHBhdGgsIGNvbnRlbnRzLCAndXRmLTgnKTtcbn1cblxuZGVzY3JpYmUoJ2dldEltcG9ydFBhdGgnLCAoKSA9PiB7XG4gIGxldCB0ZXN0Um9vdDogc3RyaW5nO1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIGNsZWFyTW9kdWxlU3BlY2lmaWVyQ2FjaGUoKTtcbiAgICB0ZXN0Um9vdCA9IG1rZHRlbXBTeW5jKGpvaW4odG1wZGlyKCksICd3b3JrZmxvdy1tb2R1bGUtc3BlY2lmaWVyLScpKTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICBjbGVhck1vZHVsZVNwZWNpZmllckNhY2hlKCk7XG4gICAgcm1TeW5jKHRlc3RSb290LCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gIH0pO1xuXG4gIGl0KCd1c2VzIHBhY2thZ2Ugc3VicGF0aCBpbXBvcnQgd2hlbiBmaWxlIG1hdGNoZXMgYW4gZXhwb3J0IHN1YnBhdGgnLCAoKSA9PiB7XG4gICAgY29uc3QgcHJvamVjdFJvb3QgPSBqb2luKHRlc3RSb290LCAnYXBwcy9jaGF0Jyk7XG4gICAgY29uc3Qgd29ya3NwYWNlUGtnRGlyID0gam9pbih0ZXN0Um9vdCwgJ3BhY2thZ2VzL2FnZW50Jyk7XG4gICAgY29uc3QgZmlsZVBhdGggPSBqb2luKHdvcmtzcGFjZVBrZ0RpciwgJ3NyYy9zZXJ2ZXIudHMnKTtcblxuICAgIHdyaXRlSnNvbihqb2luKHByb2plY3RSb290LCAncGFja2FnZS5qc29uJyksIHtcbiAgICAgIG5hbWU6ICdjaGF0JyxcbiAgICAgIGRlcGVuZGVuY2llczogeyAnQGludGVybmFsL2FnZW50JzogJ3dvcmtzcGFjZToqJyB9LFxuICAgIH0pO1xuXG4gICAgd3JpdGVKc29uKGpvaW4od29ya3NwYWNlUGtnRGlyLCAncGFja2FnZS5qc29uJyksIHtcbiAgICAgIG5hbWU6ICdAaW50ZXJuYWwvYWdlbnQnLFxuICAgICAgdmVyc2lvbjogJzEuMC4wJyxcbiAgICAgIGV4cG9ydHM6IHtcbiAgICAgICAgJy4vc2VydmVyJzogJy4vc3JjL3NlcnZlci50cycsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgd3JpdGVGaWxlKGZpbGVQYXRoLCBgJ3VzZSBzdGVwJztcXG5gKTtcblxuICAgIGV4cGVjdChnZXRJbXBvcnRQYXRoKGZpbGVQYXRoLCBwcm9qZWN0Um9vdCkpLnRvRXF1YWwoe1xuICAgICAgaW1wb3J0UGF0aDogJ0BpbnRlcm5hbC9hZ2VudC9zZXJ2ZXInLFxuICAgICAgaXNQYWNrYWdlOiB0cnVlLFxuICAgIH0pO1xuICB9KTtcblxuICBpdCgnZmFsbHMgYmFjayB0byByZWxhdGl2ZSBpbXBvcnQgd2hlbiBwYWNrYWdlIGhhcyBubyByb290IGV4cG9ydCcsICgpID0+IHtcbiAgICBjb25zdCBwcm9qZWN0Um9vdCA9IGpvaW4odGVzdFJvb3QsICdhcHBzL2NoYXQnKTtcbiAgICBjb25zdCB3b3Jrc3BhY2VQa2dEaXIgPSBqb2luKHRlc3RSb290LCAncGFja2FnZXMvYWdlbnQnKTtcbiAgICBjb25zdCBmaWxlUGF0aCA9IGpvaW4od29ya3NwYWNlUGtnRGlyLCAnc3JjL3NlcnZlci50cycpO1xuXG4gICAgd3JpdGVKc29uKGpvaW4ocHJvamVjdFJvb3QsICdwYWNrYWdlLmpzb24nKSwge1xuICAgICAgbmFtZTogJ2NoYXQnLFxuICAgICAgZGVwZW5kZW5jaWVzOiB7ICdAaW50ZXJuYWwvYWdlbnQnOiAnd29ya3NwYWNlOionIH0sXG4gICAgfSk7XG5cbiAgICB3cml0ZUpzb24oam9pbih3b3Jrc3BhY2VQa2dEaXIsICdwYWNrYWdlLmpzb24nKSwge1xuICAgICAgbmFtZTogJ0BpbnRlcm5hbC9hZ2VudCcsXG4gICAgICB2ZXJzaW9uOiAnMS4wLjAnLFxuICAgICAgZXhwb3J0czoge1xuICAgICAgICAnLi9zZXJ2ZXInOiAnLi9kaXN0L3NlcnZlci5qcycsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgd3JpdGVGaWxlKGZpbGVQYXRoLCBgJ3VzZSBzdGVwJztcXG5gKTtcblxuICAgIGV4cGVjdChnZXRJbXBvcnRQYXRoKGZpbGVQYXRoLCBwcm9qZWN0Um9vdCkpLnRvRXF1YWwoe1xuICAgICAgaW1wb3J0UGF0aDogJy4uLy4uL3BhY2thZ2VzL2FnZW50L3NyYy9zZXJ2ZXIudHMnLFxuICAgICAgaXNQYWNrYWdlOiBmYWxzZSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3VzZXMgcGFja2FnZSByb290IGltcG9ydCBmb3Igcm9vdCBleHBvcnRzJywgKCkgPT4ge1xuICAgIGNvbnN0IHByb2plY3RSb290ID0gam9pbih0ZXN0Um9vdCwgJ2FwcHMvY2hhdCcpO1xuICAgIGNvbnN0IHdvcmtzcGFjZVBrZ0RpciA9IGpvaW4odGVzdFJvb3QsICdwYWNrYWdlcy9hZ2VudCcpO1xuICAgIGNvbnN0IGZpbGVQYXRoID0gam9pbih3b3Jrc3BhY2VQa2dEaXIsICdzcmMvaW5kZXgudHMnKTtcblxuICAgIHdyaXRlSnNvbihqb2luKHByb2plY3RSb290LCAncGFja2FnZS5qc29uJyksIHtcbiAgICAgIG5hbWU6ICdjaGF0JyxcbiAgICAgIGRlcGVuZGVuY2llczogeyAnQGludGVybmFsL2FnZW50JzogJ3dvcmtzcGFjZToqJyB9LFxuICAgIH0pO1xuXG4gICAgd3JpdGVKc29uKGpvaW4od29ya3NwYWNlUGtnRGlyLCAncGFja2FnZS5qc29uJyksIHtcbiAgICAgIG5hbWU6ICdAaW50ZXJuYWwvYWdlbnQnLFxuICAgICAgdmVyc2lvbjogJzEuMC4wJyxcbiAgICAgIGV4cG9ydHM6IHtcbiAgICAgICAgJy4nOiAnLi9zcmMvaW5kZXgudHMnLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHdyaXRlRmlsZShmaWxlUGF0aCwgYCd1c2Ugd29ya2Zsb3cnO1xcbmApO1xuXG4gICAgZXhwZWN0KGdldEltcG9ydFBhdGgoZmlsZVBhdGgsIHByb2plY3RSb290KSkudG9FcXVhbCh7XG4gICAgICBpbXBvcnRQYXRoOiAnQGludGVybmFsL2FnZW50JyxcbiAgICAgIGlzUGFja2FnZTogdHJ1ZSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3VzZXMgcGFja2FnZSByb290IGltcG9ydCB3aGVuIHBhY2thZ2UgbW9kdWxlIHBvaW50cyB0byBmaWxlJywgKCkgPT4ge1xuICAgIGNvbnN0IHByb2plY3RSb290ID0gam9pbih0ZXN0Um9vdCwgJ2FwcHMvY2hhdCcpO1xuICAgIGNvbnN0IHdvcmtzcGFjZVBrZ0RpciA9IGpvaW4odGVzdFJvb3QsICdwYWNrYWdlcy9hZ2VudCcpO1xuICAgIGNvbnN0IGZpbGVQYXRoID0gam9pbih3b3Jrc3BhY2VQa2dEaXIsICdzcmMvaW5kZXgubWpzJyk7XG5cbiAgICB3cml0ZUpzb24oam9pbihwcm9qZWN0Um9vdCwgJ3BhY2thZ2UuanNvbicpLCB7XG4gICAgICBuYW1lOiAnY2hhdCcsXG4gICAgICBkZXBlbmRlbmNpZXM6IHsgJ0BpbnRlcm5hbC9hZ2VudCc6ICd3b3Jrc3BhY2U6KicgfSxcbiAgICB9KTtcblxuICAgIHdyaXRlSnNvbihqb2luKHdvcmtzcGFjZVBrZ0RpciwgJ3BhY2thZ2UuanNvbicpLCB7XG4gICAgICBuYW1lOiAnQGludGVybmFsL2FnZW50JyxcbiAgICAgIHZlcnNpb246ICcxLjAuMCcsXG4gICAgICBtb2R1bGU6ICcuL3NyYy9pbmRleC5tanMnLFxuICAgICAgbWFpbjogJy4vZGlzdC9pbmRleC5janMnLFxuICAgIH0pO1xuXG4gICAgd3JpdGVGaWxlKGZpbGVQYXRoLCBgJ3VzZSB3b3JrZmxvdyc7XFxuYCk7XG5cbiAgICBleHBlY3QoZ2V0SW1wb3J0UGF0aChmaWxlUGF0aCwgcHJvamVjdFJvb3QpKS50b0VxdWFsKHtcbiAgICAgIGltcG9ydFBhdGg6ICdAaW50ZXJuYWwvYWdlbnQnLFxuICAgICAgaXNQYWNrYWdlOiB0cnVlLFxuICAgIH0pO1xuICB9KTtcblxuICBpdCgndXNlcyBwYWNrYWdlIHJvb3QgaW1wb3J0IGZvciBjb25kaXRpb25hbCByb290IGV4cG9ydHMnLCAoKSA9PiB7XG4gICAgY29uc3QgcHJvamVjdFJvb3QgPSBqb2luKHRlc3RSb290LCAnYXBwcy9jaGF0Jyk7XG4gICAgY29uc3Qgd29ya3NwYWNlUGtnRGlyID0gam9pbih0ZXN0Um9vdCwgJ3BhY2thZ2VzL2FnZW50Jyk7XG4gICAgY29uc3QgZmlsZVBhdGggPSBqb2luKHdvcmtzcGFjZVBrZ0RpciwgJ3NyYy9pbmRleC5qcycpO1xuXG4gICAgd3JpdGVKc29uKGpvaW4ocHJvamVjdFJvb3QsICdwYWNrYWdlLmpzb24nKSwge1xuICAgICAgbmFtZTogJ2NoYXQnLFxuICAgICAgZGVwZW5kZW5jaWVzOiB7ICdAaW50ZXJuYWwvYWdlbnQnOiAnd29ya3NwYWNlOionIH0sXG4gICAgfSk7XG5cbiAgICB3cml0ZUpzb24oam9pbih3b3Jrc3BhY2VQa2dEaXIsICdwYWNrYWdlLmpzb24nKSwge1xuICAgICAgbmFtZTogJ0BpbnRlcm5hbC9hZ2VudCcsXG4gICAgICB2ZXJzaW9uOiAnMS4wLjAnLFxuICAgICAgZXhwb3J0czoge1xuICAgICAgICAnLic6IHtcbiAgICAgICAgICBpbXBvcnQ6ICcuL3NyYy9pbmRleC5tanMnLFxuICAgICAgICAgIGRlZmF1bHQ6ICcuL3NyYy9pbmRleC5qcycsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgd3JpdGVGaWxlKGZpbGVQYXRoLCBgJ3VzZSB3b3JrZmxvdyc7XFxuYCk7XG5cbiAgICBleHBlY3QoZ2V0SW1wb3J0UGF0aChmaWxlUGF0aCwgcHJvamVjdFJvb3QpKS50b0VxdWFsKHtcbiAgICAgIGltcG9ydFBhdGg6ICdAaW50ZXJuYWwvYWdlbnQnLFxuICAgICAgaXNQYWNrYWdlOiB0cnVlLFxuICAgIH0pO1xuICB9KTtcblxuICBpdCgnZmFsbHMgYmFjayB0byByZWxhdGl2ZSBpbXBvcnQgZm9yIGRlZXAgZmlsZXMgaW4gcGFja2FnZXMgd2l0aG91dCBleHBvcnRzJywgKCkgPT4ge1xuICAgIGNvbnN0IHByb2plY3RSb290ID0gam9pbih0ZXN0Um9vdCwgJ2FwcHMvY2hhdCcpO1xuICAgIGNvbnN0IHdvcmtzcGFjZVBrZ0RpciA9IGpvaW4odGVzdFJvb3QsICdwYWNrYWdlcy9hZ2VudCcpO1xuICAgIGNvbnN0IGZpbGVQYXRoID0gam9pbih3b3Jrc3BhY2VQa2dEaXIsICdsaWIvdG9vbHMvZHluYW1pYy93b3JrZmxvdy50cycpO1xuXG4gICAgd3JpdGVKc29uKGpvaW4ocHJvamVjdFJvb3QsICdwYWNrYWdlLmpzb24nKSwge1xuICAgICAgbmFtZTogJ2NoYXQnLFxuICAgICAgZGVwZW5kZW5jaWVzOiB7ICdAaW50ZXJuYWwvYWdlbnQnOiAnd29ya3NwYWNlOionIH0sXG4gICAgfSk7XG5cbiAgICB3cml0ZUpzb24oam9pbih3b3Jrc3BhY2VQa2dEaXIsICdwYWNrYWdlLmpzb24nKSwge1xuICAgICAgbmFtZTogJ0BpbnRlcm5hbC9hZ2VudCcsXG4gICAgICB2ZXJzaW9uOiAnMS4wLjAnLFxuICAgIH0pO1xuXG4gICAgd3JpdGVGaWxlKGZpbGVQYXRoLCBgJ3VzZSB3b3JrZmxvdyc7XFxuYCk7XG5cbiAgICBleHBlY3QoZ2V0SW1wb3J0UGF0aChmaWxlUGF0aCwgcHJvamVjdFJvb3QpKS50b0VxdWFsKHtcbiAgICAgIGltcG9ydFBhdGg6ICcuLi8uLi9wYWNrYWdlcy9hZ2VudC9saWIvdG9vbHMvZHluYW1pYy93b3JrZmxvdy50cycsXG4gICAgICBpc1BhY2thZ2U6IGZhbHNlLFxuICAgIH0pO1xuICB9KTtcblxuICBpdCgndXNlcyBwYWNrYWdlIHJvb3QgaW1wb3J0IHdoZW4gcGFja2FnZSBtYWluIHBvaW50cyB0byBmaWxlJywgKCkgPT4ge1xuICAgIGNvbnN0IHByb2plY3RSb290ID0gam9pbih0ZXN0Um9vdCwgJ2FwcHMvY2hhdCcpO1xuICAgIGNvbnN0IHdvcmtzcGFjZVBrZ0RpciA9IGpvaW4odGVzdFJvb3QsICdwYWNrYWdlcy9hZ2VudCcpO1xuICAgIGNvbnN0IGZpbGVQYXRoID0gam9pbih3b3Jrc3BhY2VQa2dEaXIsICdzcmMvaW5kZXgudHMnKTtcblxuICAgIHdyaXRlSnNvbihqb2luKHByb2plY3RSb290LCAncGFja2FnZS5qc29uJyksIHtcbiAgICAgIG5hbWU6ICdjaGF0JyxcbiAgICAgIGRlcGVuZGVuY2llczogeyAnQGludGVybmFsL2FnZW50JzogJ3dvcmtzcGFjZToqJyB9LFxuICAgIH0pO1xuXG4gICAgd3JpdGVKc29uKGpvaW4od29ya3NwYWNlUGtnRGlyLCAncGFja2FnZS5qc29uJyksIHtcbiAgICAgIG5hbWU6ICdAaW50ZXJuYWwvYWdlbnQnLFxuICAgICAgdmVyc2lvbjogJzEuMC4wJyxcbiAgICAgIG1haW46ICcuL3NyYy9pbmRleC50cycsXG4gICAgfSk7XG5cbiAgICB3cml0ZUZpbGUoZmlsZVBhdGgsIGAndXNlIHN0ZXAnO1xcbmApO1xuXG4gICAgZXhwZWN0KGdldEltcG9ydFBhdGgoZmlsZVBhdGgsIHByb2plY3RSb290KSkudG9FcXVhbCh7XG4gICAgICBpbXBvcnRQYXRoOiAnQGludGVybmFsL2FnZW50JyxcbiAgICAgIGlzUGFja2FnZTogdHJ1ZSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3VzZXMgcGFja2FnZSBzdWJwYXRoIGltcG9ydCBmb3IgZGlyZWN0IG5vZGVfbW9kdWxlcyBkZXBlbmRlbmNpZXMnLCAoKSA9PiB7XG4gICAgY29uc3QgcHJvamVjdFJvb3QgPSBqb2luKHRlc3RSb290LCAnYXBwcy9jaGF0Jyk7XG4gICAgY29uc3QgcGFja2FnZURpciA9IGpvaW4odGVzdFJvb3QsICdhcHBzL2NoYXQvbm9kZV9tb2R1bGVzL0B3b3JrZmxvdy9jb3JlJyk7XG4gICAgY29uc3QgZmlsZVBhdGggPSBqb2luKHBhY2thZ2VEaXIsICdkaXN0L3NlcmlhbGl6YXRpb24uanMnKTtcblxuICAgIHdyaXRlSnNvbihqb2luKHByb2plY3RSb290LCAncGFja2FnZS5qc29uJyksIHtcbiAgICAgIG5hbWU6ICdjaGF0JyxcbiAgICAgIGRlcGVuZGVuY2llczogeyAnQHdvcmtmbG93L2NvcmUnOiAnMS4wLjAnIH0sXG4gICAgfSk7XG5cbiAgICB3cml0ZUpzb24oam9pbihwYWNrYWdlRGlyLCAncGFja2FnZS5qc29uJyksIHtcbiAgICAgIG5hbWU6ICdAd29ya2Zsb3cvY29yZScsXG4gICAgICB2ZXJzaW9uOiAnMS4wLjAnLFxuICAgICAgZXhwb3J0czoge1xuICAgICAgICAnLi9zZXJpYWxpemF0aW9uJzogJy4vZGlzdC9zZXJpYWxpemF0aW9uLmpzJyxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICB3cml0ZUZpbGUoZmlsZVBhdGgsIGAndXNlIHdvcmtmbG93JztcXG5gKTtcblxuICAgIGV4cGVjdChnZXRJbXBvcnRQYXRoKGZpbGVQYXRoLCBwcm9qZWN0Um9vdCkpLnRvRXF1YWwoe1xuICAgICAgaW1wb3J0UGF0aDogJ0B3b3JrZmxvdy9jb3JlL3NlcmlhbGl6YXRpb24nLFxuICAgICAgaXNQYWNrYWdlOiB0cnVlLFxuICAgIH0pO1xuICB9KTtcblxuICBpdCgnZmFsbHMgYmFjayB0byByZWxhdGl2ZSBpbXBvcnQgZm9yIHRyYW5zaXRpdmUgbm9kZV9tb2R1bGVzIGRlcGVuZGVuY2llcycsICgpID0+IHtcbiAgICBjb25zdCBwcm9qZWN0Um9vdCA9IGpvaW4odGVzdFJvb3QsICdhcHBzL2NoYXQnKTtcbiAgICBjb25zdCBwYWNrYWdlRGlyID0gam9pbih0ZXN0Um9vdCwgJ2FwcHMvY2hhdC9ub2RlX21vZHVsZXMvQHdvcmtmbG93L2NvcmUnKTtcbiAgICBjb25zdCBmaWxlUGF0aCA9IGpvaW4ocGFja2FnZURpciwgJ2Rpc3Qvc2VyaWFsaXphdGlvbi5qcycpO1xuXG4gICAgd3JpdGVKc29uKGpvaW4ocHJvamVjdFJvb3QsICdwYWNrYWdlLmpzb24nKSwge1xuICAgICAgbmFtZTogJ2NoYXQnLFxuICAgICAgZGVwZW5kZW5jaWVzOiB7IHdvcmtmbG93OiAnMS4wLjAnIH0sXG4gICAgfSk7XG5cbiAgICB3cml0ZUpzb24oam9pbihwYWNrYWdlRGlyLCAncGFja2FnZS5qc29uJyksIHtcbiAgICAgIG5hbWU6ICdAd29ya2Zsb3cvY29yZScsXG4gICAgICB2ZXJzaW9uOiAnMS4wLjAnLFxuICAgICAgZXhwb3J0czoge1xuICAgICAgICAnLi9zZXJpYWxpemF0aW9uJzogJy4vZGlzdC9zZXJpYWxpemF0aW9uLmpzJyxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICB3cml0ZUZpbGUoZmlsZVBhdGgsIGAndXNlIHdvcmtmbG93JztcXG5gKTtcblxuICAgIGV4cGVjdChnZXRJbXBvcnRQYXRoKGZpbGVQYXRoLCBwcm9qZWN0Um9vdCkpLnRvRXF1YWwoe1xuICAgICAgaW1wb3J0UGF0aDogJy4vbm9kZV9tb2R1bGVzL0B3b3JrZmxvdy9jb3JlL2Rpc3Qvc2VyaWFsaXphdGlvbi5qcycsXG4gICAgICBpc1BhY2thZ2U6IGZhbHNlLFxuICAgIH0pO1xuICB9KTtcblxuICBpdCgndHJlYXRzIGEgd29ya3NwYWNlIHBhY2thZ2UgZmlsZSBhcyBsb2NhbCB3aGVuIHByb2plY3RSb290IGlzIHRoZSBwYWNrYWdlIGl0c2VsZicsICgpID0+IHtcbiAgICBjb25zdCBwcm9qZWN0Um9vdCA9IGpvaW4odGVzdFJvb3QsICdwYWNrYWdlcy92YWRlJyk7XG4gICAgY29uc3QgZmlsZVBhdGggPSBqb2luKFxuICAgICAgcHJvamVjdFJvb3QsXG4gICAgICAnc3JjL2ludGVybmFsL21lc3NhZ2Uvd29ya2Zsb3cvaGFuZGxlLW1lc3NhZ2UudHMnXG4gICAgKTtcblxuICAgIHdyaXRlSnNvbihqb2luKHByb2plY3RSb290LCAncGFja2FnZS5qc29uJyksIHtcbiAgICAgIG5hbWU6ICd2YWRlJyxcbiAgICAgIHZlcnNpb246ICcwLjAuMCcsXG4gICAgfSk7XG5cbiAgICB3cml0ZUZpbGUoZmlsZVBhdGgsIGAndXNlIHdvcmtmbG93JztcXG5gKTtcblxuICAgIGV4cGVjdChyZXNvbHZlTW9kdWxlU3BlY2lmaWVyKGZpbGVQYXRoLCBwcm9qZWN0Um9vdCkpLnRvRXF1YWwoe1xuICAgICAgbW9kdWxlU3BlY2lmaWVyOiB1bmRlZmluZWQsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCd1c2VzIHRoZSBjb25zdW1pbmcgYXBwIHJvb3QgdG8gcmVzb2x2ZSB3b3Jrc3BhY2UgcGFja2FnZSB3b3JrZmxvdyBpZHMnLCAoKSA9PiB7XG4gICAgY29uc3QgcHJvamVjdFJvb3QgPSBqb2luKHRlc3RSb290LCAnYXBwcy9jaGF0Jyk7XG4gICAgY29uc3QgcGFja2FnZURpciA9IGpvaW4odGVzdFJvb3QsICdwYWNrYWdlcy92YWRlJyk7XG4gICAgY29uc3QgZmlsZVBhdGggPSBqb2luKFxuICAgICAgcGFja2FnZURpcixcbiAgICAgICdzcmMvaW50ZXJuYWwvbWVzc2FnZS93b3JrZmxvdy9oYW5kbGUtbWVzc2FnZS50cydcbiAgICApO1xuXG4gICAgd3JpdGVKc29uKGpvaW4ocHJvamVjdFJvb3QsICdwYWNrYWdlLmpzb24nKSwge1xuICAgICAgbmFtZTogJ2NoYXQnLFxuICAgICAgZGVwZW5kZW5jaWVzOiB7IHZhZGU6ICd3b3Jrc3BhY2U6KicgfSxcbiAgICB9KTtcblxuICAgIHdyaXRlSnNvbihqb2luKHBhY2thZ2VEaXIsICdwYWNrYWdlLmpzb24nKSwge1xuICAgICAgbmFtZTogJ3ZhZGUnLFxuICAgICAgdmVyc2lvbjogJzAuMC4wJyxcbiAgICB9KTtcblxuICAgIHdyaXRlRmlsZShmaWxlUGF0aCwgYCd1c2Ugd29ya2Zsb3cnO1xcbmApO1xuXG4gICAgZXhwZWN0KHJlc29sdmVNb2R1bGVTcGVjaWZpZXIoZmlsZVBhdGgsIHByb2plY3RSb290KSkudG9FcXVhbCh7XG4gICAgICBtb2R1bGVTcGVjaWZpZXI6ICd2YWRlQDAuMC4wJyxcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3ByZXNlcnZlcyBwYWNrYWdlIGV4cG9ydCBzdWJwYXRocyB3aGVuIHNvdXJjZSBmaWxlcyBiYWNrIGRpc3QgZXhwb3J0cycsICgpID0+IHtcbiAgICBjb25zdCBwcm9qZWN0Um9vdCA9IGpvaW4odGVzdFJvb3QsICdhcHBzL2NoYXQnKTtcbiAgICBjb25zdCB3b3Jrc3BhY2VQa2dEaXIgPSBqb2luKHRlc3RSb290LCAncGFja2FnZXMvYWdlbnQnKTtcbiAgICBjb25zdCBmaWxlUGF0aCA9IGpvaW4od29ya3NwYWNlUGtnRGlyLCAnc3JjL3NlcnZlci50cycpO1xuXG4gICAgd3JpdGVKc29uKGpvaW4ocHJvamVjdFJvb3QsICdwYWNrYWdlLmpzb24nKSwge1xuICAgICAgbmFtZTogJ2NoYXQnLFxuICAgICAgZGVwZW5kZW5jaWVzOiB7ICdAaW50ZXJuYWwvYWdlbnQnOiAnd29ya3NwYWNlOionIH0sXG4gICAgfSk7XG5cbiAgICB3cml0ZUpzb24oam9pbih3b3Jrc3BhY2VQa2dEaXIsICdwYWNrYWdlLmpzb24nKSwge1xuICAgICAgbmFtZTogJ0BpbnRlcm5hbC9hZ2VudCcsXG4gICAgICB2ZXJzaW9uOiAnMS4wLjAnLFxuICAgICAgZXhwb3J0czoge1xuICAgICAgICAnLi9zZXJ2ZXInOiAnLi9kaXN0L3NlcnZlci5qcycsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgd3JpdGVGaWxlKGZpbGVQYXRoLCBgJ3VzZSBzdGVwJztcXG5gKTtcblxuICAgIGV4cGVjdChyZXNvbHZlTW9kdWxlU3BlY2lmaWVyKGZpbGVQYXRoLCBwcm9qZWN0Um9vdCkpLnRvRXF1YWwoe1xuICAgICAgbW9kdWxlU3BlY2lmaWVyOiAnQGludGVybmFsL2FnZW50L3NlcnZlckAxLjAuMCcsXG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
282
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlLXNwZWNpZmllci50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL21vZHVsZS1zcGVjaWZpZXIudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDakMsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDMUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDckUsT0FBTyxFQUNMLHlCQUF5QixFQUN6QixhQUFhLEVBQ2Isc0JBQXNCLEdBQ3ZCLE1BQU0sdUJBQXVCLENBQUM7QUFFL0IsU0FBUyxTQUFTLENBQUMsSUFBWSxFQUFFLEtBQWM7SUFDN0MsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzlDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQy9ELENBQUM7QUFFRCxTQUFTLFNBQVMsQ0FBQyxJQUFZLEVBQUUsUUFBUSxHQUFHLEVBQUU7SUFDNUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzlDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3pDLENBQUM7QUFFRCxRQUFRLENBQUMsZUFBZSxFQUFFLEdBQUcsRUFBRTtJQUM3QixJQUFJLFFBQWdCLENB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QUFDLENBQUM7SUFFSCxFQUFFLENBQUMsdUVBQXVFLEVBQUUsR0FBRyxFQUFFO1FBQy9FLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDaEQsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFFeEQsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsY0FBYyxDQUFDLEVBQUU7WUFDM0MsSUFBSSxFQUFFLE1BQU07WUFDWixZQUFZLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxhQUFhLEVBQUU7U0FDbkQsQ0FBQyxDQUFDO1FBRUgsU0FBUyxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsY0FBYyxDQUFDLEVBQUU7WUFDL0MsSUFBSSxFQUFFLGlCQUFpQjtZQUN2QixPQUFPLEVBQUUsT0FBTztZQUNoQixPQUFPLEVBQUU7Z0JBQ1AsVUFBVSxFQUFFLGtCQUFrQjthQUMvQjtTQUNGLENBQUMsQ0FBQztRQUVILFNBQVMsQ0FBQyxRQUFRLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFFckMsTUFBTSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUM1RCxlQUFlLEVBQUUsOEJBQThCO1NBQ2hELENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBta2RpclN5bmMsIG1rZHRlbXBTeW5jLCBybVN5bmMsIHdyaXRlRmlsZVN5bmMgfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gJ25vZGU6b3MnO1xuaW1wb3J0IHsgZGlybmFtZSwgam9pbiB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyBhZnRlckVhY2gsIGJlZm9yZUVhY2gsIGRlc2NyaWJlLCBleHBlY3QsIGl0IH0gZnJvbSAndml0ZXN0JztcbmltcG9ydCB7XG4gIGNsZWFyTW9kdWxlU3BlY2lmaWVyQ2FjaGUsXG4gIGdldEltcG9ydFBhdGgsXG4gIHJlc29sdmVNb2R1bGVTcGVjaWZpZXIsXG59IGZyb20gJy4vbW9kdWxlLXNwZWNpZmllci5qcyc7XG5cbmZ1bmN0aW9uIHdyaXRlSnNvbihwYXRoOiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogdm9pZCB7XG4gIG1rZGlyU3luYyhkaXJuYW1lKHBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgd3JpdGVGaWxlU3luYyhwYXRoLCBKU09OLnN0cmluZ2lmeSh2YWx1ZSwgbnVsbCwgMiksICd1dGYtOCcpO1xufVxuXG5mdW5jdGlvbiB3cml0ZUZpbGUocGF0aDogc3RyaW5nLCBjb250ZW50cyA9ICcnKTogdm9pZCB7XG4gIG1rZGlyU3luYyhkaXJuYW1lKHBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgd3JpdGVGaWxlU3luYyhwYXRoLCBjb250ZW50cywgJ3V0Zi04Jyk7XG59XG5cbmRlc2NyaWJlKCdnZXRJbXBvcnRQYXRoJywgKCkgPT4ge1xuICBsZXQgdGVzdFJvb3Q6IHN0cmluZztcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBjbGVhck1vZHVsZVNwZWNpZmllckNhY2hlKCk7XG4gICAgdGVzdFJvb3QgPSBta2R0ZW1wU3luYyhqb2luKHRtcGRpcigpLCAnd29ya2Zsb3ctbW9kdWxlLXNwZWNpZmllci0nKSk7XG4gIH0pO1xuXG4gIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgY2xlYXJNb2R1bGVTcGVjaWZpZXJDYWNoZSgpO1xuICAgIHJtU3luYyh0ZXN0Um9vdCwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pO1xuICB9KTtcblxuICBpdCgndXNlcyBwYWNrYWdlIHN1YnBhdGggaW1wb3J0IHdoZW4gZmlsZSBtYXRjaGVzIGFuIGV4cG9ydCBzdWJwYXRoJywgKCkgPT4ge1xuICAgIGNvbnN0IHByb2plY3RSb290ID0gam9pbih0ZXN0Um9vdCwgJ2FwcHMvY2hhdCcpO1xuICAgIGNvbnN0IHdvcmtzcGFjZVBrZ0RpciA9IGpvaW4odGVzdFJvb3QsICdwYWNrYWdlcy9hZ2VudCcpO1xuICAgIGNvbnN0IGZpbGVQYXRoID0gam9pbih3b3Jrc3BhY2VQa2dEaXIsICdzcmMvc2VydmVyLnRzJyk7XG5cbiAgICB3cml0ZUpzb24oam9pbihwcm9qZWN0Um9vdCwgJ3BhY2thZ2UuanNvbicpLCB7XG4gICAgICBuYW1lOiAnY2hhdCcsXG4gICAgICBkZXBlbmRlbmNpZXM6IHsgJ0BpbnRlcm5hbC9hZ2VudCc6ICd3b3Jrc3BhY2U6KicgfSxcbiAgICB9KTtcblxuICAgIHdyaXRlSnNvbihqb2luKHdvcmtzcGFjZVBrZ0RpciwgJ3BhY2thZ2UuanNvbicpLCB7XG4gICAgICBuYW1lOiAnQGludGVybmFsL2FnZW50JyxcbiAgICAgIHZlcnNpb246ICcxLjAuMCcsXG4gICAgICBleHBvcnRzOiB7XG4gICAgICAgICcuL3NlcnZlcic6ICcuL3NyYy9zZXJ2ZXIudHMnLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHdyaXRlRmlsZShmaWxlUGF0aCwgYCd1c2Ugc3RlcCc7XFxuYCk7XG5cbiAgICBleHBlY3QoZ2V0SW1wb3J0UGF0aChmaWxlUGF0aCwgcHJvamVjdFJvb3QpKS50b0VxdWFsKHtcbiAgICAgIGltcG9ydFBhdGg6ICdAaW50ZXJuYWwvYWdlbnQvc2VydmVyJyxcbiAgICAgIGlzUGFja2FnZTogdHJ1ZSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ2ZhbGxzIGJhY2sgdG8gcmVsYXRpdmUgaW1wb3J0IHdoZW4gcGFja2FnZSBoYXMgbm8gcm9vdCBleHBvcnQnLCAoKSA9PiB7XG4gICAgY29uc3QgcHJvamVjdFJvb3QgPSBqb2luKHRlc3RSb290LCAnYXBwcy9jaGF0Jyk7XG4gICAgY29uc3Qgd29ya3NwYWNlUGtnRGlyID0gam9pbih0ZXN0Um9vdCwgJ3BhY2thZ2VzL2FnZW50Jyk7XG4gICAgY29uc3QgZmlsZVBhdGggPSBqb2luKHdvcmtzcGFjZVBrZ0RpciwgJ3NyYy9zZXJ2ZXIudHMnKTtcblxuICAgIHdyaXRlSnNvbihqb2luKHByb2plY3RSb290LCAncGFja2FnZS5qc29uJyksIHtcbiAgICAgIG5hbWU6ICdjaGF0JyxcbiAgICAgIGRlcGVuZGVuY2llczogeyAnQGludGVybmFsL2FnZW50JzogJ3dvcmtzcGFjZToqJyB9LFxuICAgIH0pO1xuXG4gICAgd3JpdGVKc29uKGpvaW4od29ya3NwYWNlUGtnRGlyLCAncGFja2FnZS5qc29uJyksIHtcbiAgICAgIG5hbWU6ICdAaW50ZXJuYWwvYWdlbnQnLFxuICAgICAgdmVyc2lvbjogJzEuMC4wJyxcbiAgICAgIGV4cG9ydHM6IHtcbiAgICAgICAgJy4vc2VydmVyJzogJy4vZGlzdC9zZXJ2ZXIuanMnLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHdyaXRlRmlsZShmaWxlUGF0aCwgYCd1c2Ugc3RlcCc7XFxuYCk7XG5cbiAgICBleHBlY3QoZ2V0SW1wb3J0UGF0aChmaWxlUGF0aCwgcHJvamVjdFJvb3QpKS50b0VxdWFsKHtcbiAgICAgIGltcG9ydFBhdGg6ICcuLi8uLi9wYWNrYWdlcy9hZ2VudC9zcmMvc2VydmVyLnRzJyxcbiAgICAgIGlzUGFja2FnZTogZmFsc2UsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCd1c2VzIHBhY2thZ2Ugcm9vdCBpbXBvcnQgZm9yIHJvb3QgZXhwb3J0cycsICgpID0+IHtcbiAgICBjb25zdCBwcm9qZWN0Um9vdCA9IGpvaW4odGVzdFJvb3QsICdhcHBzL2NoYXQnKTtcbiAgICBjb25zdCB3b3Jrc3BhY2VQa2dEaXIgPSBqb2luKHRlc3RSb290LCAncGFja2FnZXMvYWdlbnQnKTtcbiAgICBjb25zdCBmaWxlUGF0aCA9IGpvaW4od29ya3NwYWNlUGtnRGlyLCAnc3JjL2luZGV4LnRzJyk7XG5cbiAgICB3cml0ZUpzb24oam9pbihwcm9qZWN0Um9vdCwgJ3BhY2thZ2UuanNvbicpLCB7XG4gICAgICBuYW1lOiAnY2hhdCcsXG4gICAgICBkZXBlbmRlbmNpZXM6IHsgJ0BpbnRlcm5hbC9hZ2VudCc6ICd3b3Jrc3BhY2U6KicgfSxcbiAgICB9KTtcblxuICAgIHdyaXRlSnNvbihqb2luKHdvcmtzcGFjZVBrZ0RpciwgJ3BhY2thZ2UuanNvbicpLCB7XG4gICAgICBuYW1lOiAnQGludGVybmFsL2FnZW50JyxcbiAgICAgIHZlcnNpb246ICcxLjAuMCcsXG4gICAgICBleHBvcnRzOiB7XG4gICAgICAgICcuJzogJy4vc3JjL2luZGV4LnRzJyxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICB3cml0ZUZpbGUoZmlsZVBhdGgsIGAndXNlIHdvcmtmbG93JztcXG5gKTtcblxuICAgIGV4cGVjdChnZXRJbXBvcnRQYXRoKGZpbGVQYXRoLCBwcm9qZWN0Um9vdCkpLnRvRXF1YWwoe1xuICAgICAgaW1wb3J0UGF0aDogJ0BpbnRlcm5hbC9hZ2VudCcsXG4gICAgICBpc1BhY2thZ2U6IHRydWUsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCd1c2VzIHBhY2thZ2Ugcm9vdCBpbXBvcnQgd2hlbiBwYWNrYWdlIG1vZHVsZSBwb2ludHMgdG8gZmlsZScsICgpID0+IHtcbiAgICBjb25zdCBwcm9qZWN0Um9vdCA9IGpvaW4odGVzdFJvb3QsICdhcHBzL2NoYXQnKTtcbiAgICBjb25zdCB3b3Jrc3BhY2VQa2dEaXIgPSBqb2luKHRlc3RSb290LCAncGFja2FnZXMvYWdlbnQnKTtcbiAgICBjb25zdCBmaWxlUGF0aCA9IGpvaW4od29ya3NwYWNlUGtnRGlyLCAnc3JjL2luZGV4Lm1qcycpO1xuXG4gICAgd3JpdGVKc29uKGpvaW4ocHJvamVjdFJvb3QsICdwYWNrYWdlLmpzb24nKSwge1xuICAgICAgbmFtZTogJ2NoYXQnLFxuICAgICAgZGVwZW5kZW5jaWVzOiB7ICdAaW50ZXJuYWwvYWdlbnQnOiAnd29ya3NwYWNlOionIH0sXG4gICAgfSk7XG5cbiAgICB3cml0ZUpzb24oam9pbih3b3Jrc3BhY2VQa2dEaXIsICdwYWNrYWdlLmpzb24nKSwge1xuICAgICAgbmFtZTogJ0BpbnRlcm5hbC9hZ2VudCcsXG4gICAgICB2ZXJzaW9uOiAnMS4wLjAnLFxuICAgICAgbW9kdWxlOiAnLi9zcmMvaW5kZXgubWpzJyxcbiAgICAgIG1haW46ICcuL2Rpc3QvaW5kZXguY2pzJyxcbiAgICB9KTtcblxuICAgIHdyaXRlRmlsZShmaWxlUGF0aCwgYCd1c2Ugd29ya2Zsb3cnO1xcbmApO1xuXG4gICAgZXhwZWN0KGdldEltcG9ydFBhdGgoZmlsZVBhdGgsIHByb2plY3RSb290KSkudG9FcXVhbCh7XG4gICAgICBpbXBvcnRQYXRoOiAnQGludGVybmFsL2FnZW50JyxcbiAgICAgIGlzUGFja2FnZTogdHJ1ZSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3VzZXMgcGFja2FnZSByb290IGltcG9ydCBmb3IgY29uZGl0aW9uYWwgcm9vdCBleHBvcnRzJywgKCkgPT4ge1xuICAgIGNvbnN0IHByb2plY3RSb290ID0gam9pbih0ZXN0Um9vdCwgJ2FwcHMvY2hhdCcpO1xuICAgIGNvbnN0IHdvcmtzcGFjZVBrZ0RpciA9IGpvaW4odGVzdFJvb3QsICdwYWNrYWdlcy9hZ2VudCcpO1xuICAgIGNvbnN0IGZpbGVQYXRoID0gam9pbih3b3Jrc3BhY2VQa2dEaXIsICdzcmMvaW5kZXguanMnKTtcblxuICAgIHdyaXRlSnNvbihqb2luKHByb2plY3RSb290LCAncGFja2FnZS5qc29uJyksIHtcbiAgICAgIG5hbWU6ICdjaGF0JyxcbiAgICAgIGRlcGVuZGVuY2llczogeyAnQGludGVybmFsL2FnZW50JzogJ3dvcmtzcGFjZToqJyB9LFxuICAgIH0pO1xuXG4gICAgd3JpdGVKc29uKGpvaW4od29ya3NwYWNlUGtnRGlyLCAncGFja2FnZS5qc29uJyksIHtcbiAgICAgIG5hbWU6ICdAaW50ZXJuYWwvYWdlbnQnLFxuICAgICAgdmVyc2lvbjogJzEuMC4wJyxcbiAgICAgIGV4cG9ydHM6IHtcbiAgICAgICAgJy4nOiB7XG4gICAgICAgICAgaW1wb3J0OiAnLi9zcmMvaW5kZXgubWpzJyxcbiAgICAgICAgICBkZWZhdWx0OiAnLi9zcmMvaW5kZXguanMnLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHdyaXRlRmlsZShmaWxlUGF0aCwgYCd1c2Ugd29ya2Zsb3cnO1xcbmApO1xuXG4gICAgZXhwZWN0KGdldEltcG9ydFBhdGgoZmlsZVBhdGgsIHByb2plY3RSb290KSkudG9FcXVhbCh7XG4gICAgICBpbXBvcnRQYXRoOiAnQGludGVybmFsL2FnZW50JyxcbiAgICAgIGlzUGFja2FnZTogdHJ1ZSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ2ZhbGxzIGJhY2sgdG8gcmVsYXRpdmUgaW1wb3J0IGZvciBkZWVwIGZpbGVzIGluIHBhY2thZ2VzIHdpdGhvdXQgZXhwb3J0cycsICgpID0+IHtcbiAgICBjb25zdCBwcm9qZWN0Um9vdCA9IGpvaW4odGVzdFJvb3QsICdhcHBzL2NoYXQnKTtcbiAgICBjb25zdCB3b3Jrc3BhY2VQa2dEaXIgPSBqb2luKHRlc3RSb290LCAncGFja2FnZXMvYWdlbnQnKTtcbiAgICBjb25zdCBmaWxlUGF0aCA9IGpvaW4od29ya3NwYWNlUGtnRGlyLCAnbGliL3Rvb2xzL2R5bmFtaWMvd29ya2Zsb3cudHMnKTtcblxuICAgIHdyaXRlSnNvbihqb2luKHByb2plY3RSb290LCAncGFja2FnZS5qc29uJyksIHtcbiAgICAgIG5hbWU6ICdjaGF0JyxcbiAgICAgIGRlcGVuZGVuY2llczogeyAnQGludGVybmFsL2FnZW50JzogJ3dvcmtzcGFjZToqJyB9LFxuICAgIH0pO1xuXG4gICAgd3JpdGVKc29uKGpvaW4od29ya3NwYWNlUGtnRGlyLCAncGFja2FnZS5qc29uJyksIHtcbiAgICAgIG5hbWU6ICdAaW50ZXJuYWwvYWdlbnQnLFxuICAgICAgdmVyc2lvbjogJzEuMC4wJyxcbiAgICB9KTtcblxuICAgIHdyaXRlRmlsZShmaWxlUGF0aCwgYCd1c2Ugd29ya2Zsb3cnO1xcbmApO1xuXG4gICAgZXhwZWN0KGdldEltcG9ydFBhdGgoZmlsZVBhdGgsIHByb2plY3RSb290KSkudG9FcXVhbCh7XG4gICAgICBpbXBvcnRQYXRoOiAnLi4vLi4vcGFja2FnZXMvYWdlbnQvbGliL3Rvb2xzL2R5bmFtaWMvd29ya2Zsb3cudHMnLFxuICAgICAgaXNQYWNrYWdlOiBmYWxzZSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3VzZXMgcGFja2FnZSByb290IGltcG9ydCB3aGVuIHBhY2thZ2UgbWFpbiBwb2ludHMgdG8gZmlsZScsICgpID0+IHtcbiAgICBjb25zdCBwcm9qZWN0Um9vdCA9IGpvaW4odGVzdFJvb3QsICdhcHBzL2NoYXQnKTtcbiAgICBjb25zdCB3b3Jrc3BhY2VQa2dEaXIgPSBqb2luKHRlc3RSb290LCAncGFja2FnZXMvYWdlbnQnKTtcbiAgICBjb25zdCBmaWxlUGF0aCA9IGpvaW4od29ya3NwYWNlUGtnRGlyLCAnc3JjL2luZGV4LnRzJyk7XG5cbiAgICB3cml0ZUpzb24oam9pbihwcm9qZWN0Um9vdCwgJ3BhY2thZ2UuanNvbicpLCB7XG4gICAgICBuYW1lOiAnY2hhdCcsXG4gICAgICBkZXBlbmRlbmNpZXM6IHsgJ0BpbnRlcm5hbC9hZ2VudCc6ICd3b3Jrc3BhY2U6KicgfSxcbiAgICB9KTtcblxuICAgIHdyaXRlSnNvbihqb2luKHdvcmtzcGFjZVBrZ0RpciwgJ3BhY2thZ2UuanNvbicpLCB7XG4gICAgICBuYW1lOiAnQGludGVybmFsL2FnZW50JyxcbiAgICAgIHZlcnNpb246ICcxLjAuMCcsXG4gICAgICBtYWluOiAnLi9zcmMvaW5kZXgudHMnLFxuICAgIH0pO1xuXG4gICAgd3JpdGVGaWxlKGZpbGVQYXRoLCBgJ3VzZSBzdGVwJztcXG5gKTtcblxuICAgIGV4cGVjdChnZXRJbXBvcnRQYXRoKGZpbGVQYXRoLCBwcm9qZWN0Um9vdCkpLnRvRXF1YWwoe1xuICAgICAgaW1wb3J0UGF0aDogJ0BpbnRlcm5hbC9hZ2VudCcsXG4gICAgICBpc1BhY2thZ2U6IHRydWUsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCd1c2VzIHBhY2thZ2Ugc3VicGF0aCBpbXBvcnQgZm9yIGRpcmVjdCBub2RlX21vZHVsZXMgZGVwZW5kZW5jaWVzJywgKCkgPT4ge1xuICAgIGNvbnN0IHByb2plY3RSb290ID0gam9pbih0ZXN0Um9vdCwgJ2FwcHMvY2hhdCcpO1xuICAgIGNvbnN0IHBhY2thZ2VEaXIgPSBqb2luKHRlc3RSb290LCAnYXBwcy9jaGF0L25vZGVfbW9kdWxlcy9Ad29ya2Zsb3cvY29yZScpO1xuICAgIGNvbnN0IGZpbGVQYXRoID0gam9pbihwYWNrYWdlRGlyLCAnZGlzdC9zZXJpYWxpemF0aW9uLmpzJyk7XG5cbiAgICB3cml0ZUpzb24oam9pbihwcm9qZWN0Um9vdCwgJ3BhY2thZ2UuanNvbicpLCB7XG4gICAgICBuYW1lOiAnY2hhdCcsXG4gICAgICBkZXBlbmRlbmNpZXM6IHsgJ0B3b3JrZmxvdy9jb3JlJzogJzEuMC4wJyB9LFxuICAgIH0pO1xuXG4gICAgd3JpdGVKc29uKGpvaW4ocGFja2FnZURpciwgJ3BhY2thZ2UuanNvbicpLCB7XG4gICAgICBuYW1lOiAnQHdvcmtmbG93L2NvcmUnLFxuICAgICAgdmVyc2lvbjogJzEuMC4wJyxcbiAgICAgIGV4cG9ydHM6IHtcbiAgICAgICAgJy4vc2VyaWFsaXphdGlvbic6ICcuL2Rpc3Qvc2VyaWFsaXphdGlvbi5qcycsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgd3JpdGVGaWxlKGZpbGVQYXRoLCBgJ3VzZSB3b3JrZmxvdyc7XFxuYCk7XG5cbiAgICBleHBlY3QoZ2V0SW1wb3J0UGF0aChmaWxlUGF0aCwgcHJvamVjdFJvb3QpKS50b0VxdWFsKHtcbiAgICAgIGltcG9ydFBhdGg6ICdAd29ya2Zsb3cvY29yZS9zZXJpYWxpemF0aW9uJyxcbiAgICAgIGlzUGFja2FnZTogdHJ1ZSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ2ZhbGxzIGJhY2sgdG8gcmVsYXRpdmUgaW1wb3J0IGZvciB0cmFuc2l0aXZlIG5vZGVfbW9kdWxlcyBkZXBlbmRlbmNpZXMnLCAoKSA9PiB7XG4gICAgY29uc3QgcHJvamVjdFJvb3QgPSBqb2luKHRlc3RSb290LCAnYXBwcy9jaGF0Jyk7XG4gICAgY29uc3QgcGFja2FnZURpciA9IGpvaW4odGVzdFJvb3QsICdhcHBzL2NoYXQvbm9kZV9tb2R1bGVzL0B3b3JrZmxvdy9jb3JlJyk7XG4gICAgY29uc3QgZmlsZVBhdGggPSBqb2luKHBhY2thZ2VEaXIsICdkaXN0L3NlcmlhbGl6YXRpb24uanMnKTtcblxuICAgIHdyaXRlSnNvbihqb2luKHByb2plY3RSb290LCAncGFja2FnZS5qc29uJyksIHtcbiAgICAgIG5hbWU6ICdjaGF0JyxcbiAgICAgIGRlcGVuZGVuY2llczogeyB3b3JrZmxvdzogJzEuMC4wJyB9LFxuICAgIH0pO1xuXG4gICAgd3JpdGVKc29uKGpvaW4ocGFja2FnZURpciwgJ3BhY2thZ2UuanNvbicpLCB7XG4gICAgICBuYW1lOiAnQHdvcmtmbG93L2NvcmUnLFxuICAgICAgdmVyc2lvbjogJzEuMC4wJyxcbiAgICAgIGV4cG9ydHM6IHtcbiAgICAgICAgJy4vc2VyaWFsaXphdGlvbic6ICcuL2Rpc3Qvc2VyaWFsaXphdGlvbi5qcycsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgd3JpdGVGaWxlKGZpbGVQYXRoLCBgJ3VzZSB3b3JrZmxvdyc7XFxuYCk7XG5cbiAgICBleHBlY3QoZ2V0SW1wb3J0UGF0aChmaWxlUGF0aCwgcHJvamVjdFJvb3QpKS50b0VxdWFsKHtcbiAgICAgIGltcG9ydFBhdGg6ICcuL25vZGVfbW9kdWxlcy9Ad29ya2Zsb3cvY29yZS9kaXN0L3NlcmlhbGl6YXRpb24uanMnLFxuICAgICAgaXNQYWNrYWdlOiBmYWxzZSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3RyZWF0cyBhIHdvcmtzcGFjZSBwYWNrYWdlIGZpbGUgYXMgbG9jYWwgd2hlbiBwcm9qZWN0Um9vdCBpcyB0aGUgcGFja2FnZSBpdHNlbGYnLCAoKSA9PiB7XG4gICAgY29uc3QgcHJvamVjdFJvb3QgPSBqb2luKHRlc3RSb290LCAncGFja2FnZXMvdmFkZScpO1xuICAgIGNvbnN0IGZpbGVQYXRoID0gam9pbihcbiAgICAgIHByb2plY3RSb290LFxuICAgICAgJ3NyYy9pbnRlcm5hbC9tZXNzYWdlL3dvcmtmbG93L2hhbmRsZS1tZXNzYWdlLnRzJ1xuICAgICk7XG5cbiAgICB3cml0ZUpzb24oam9pbihwcm9qZWN0Um9vdCwgJ3BhY2thZ2UuanNvbicpLCB7XG4gICAgICBuYW1lOiAndmFkZScsXG4gICAgICB2ZXJzaW9uOiAnMC4wLjAnLFxuICAgIH0pO1xuXG4gICAgd3JpdGVGaWxlKGZpbGVQYXRoLCBgJ3VzZSB3b3JrZmxvdyc7XFxuYCk7XG5cbiAgICBleHBlY3QocmVzb2x2ZU1vZHVsZVNwZWNpZmllcihmaWxlUGF0aCwgcHJvamVjdFJvb3QpKS50b0VxdWFsKHtcbiAgICAgIG1vZHVsZVNwZWNpZmllcjogdW5kZWZpbmVkLFxuICAgIH0pO1xuICB9KTtcblxuICBpdCgndXNlcyBwYWNrYWdlIHNwZWNpZmllcnMgZm9yIHdvcmtzcGFjZSBwYWNrYWdlIHJvb3QgZW50cnlwb2ludCBpZHMnLCAoKSA9PiB7XG4gICAgY29uc3QgcHJvamVjdFJvb3QgPSBqb2luKHRlc3RSb290LCAnYXBwcy9jaGF0Jyk7XG4gICAgY29uc3QgcGFja2FnZURpciA9IGpvaW4odGVzdFJvb3QsICdwYWNrYWdlcy92YWRlJyk7XG4gICAgY29uc3QgZmlsZVBhdGggPSBqb2luKHBhY2thZ2VEaXIsICdzcmMvaW5kZXgudHMnKTtcblxuICAgIHdyaXRlSnNvbihqb2luKHByb2plY3RSb290LCAncGFja2FnZS5qc29uJyksIHtcbiAgICAgIG5hbWU6ICdjaGF0JyxcbiAgICAgIGRlcGVuZGVuY2llczogeyB2YWRlOiAnd29ya3NwYWNlOionIH0sXG4gICAgfSk7XG5cbiAgICB3cml0ZUpzb24oam9pbihwYWNrYWdlRGlyLCAncGFja2FnZS5qc29uJyksIHtcbiAgICAgIG5hbWU6ICd2YWRlJyxcbiAgICAgIHZlcnNpb246ICcwLjAuMCcsXG4gICAgICBtYWluOiAnLi9zcmMvaW5kZXgudHMnLFxuICAgIH0pO1xuXG4gICAgd3JpdGVGaWxlKGZpbGVQYXRoLCBgJ3VzZSB3b3JrZmxvdyc7XFxuYCk7XG5cbiAgICBleHBlY3QocmVzb2x2ZU1vZHVsZVNwZWNpZmllcihmaWxlUGF0aCwgcHJvamVjdFJvb3QpKS50b0VxdWFsKHtcbiAgICAgIG1vZHVsZVNwZWNpZmllcjogJ3ZhZGVAMC4wLjAnLFxuICAgIH0pO1xuICB9KTtcblxuICBpdCgncmV0dXJucyB1bmRlZmluZWQgZm9yIG5vbi1leHBvcnRlZCB3b3Jrc3BhY2UgcGFja2FnZSBmaWxlcycsICgpID0+IHtcbiAgICBjb25zdCBwcm9qZWN0Um9vdCA9IGpvaW4odGVzdFJvb3QsICdhcHBzL2NoYXQnKTtcbiAgICBjb25zdCBwYWNrYWdlRGlyID0gam9pbih0ZXN0Um9vdCwgJ3BhY2thZ2VzL3ZhZGUnKTtcbiAgICBjb25zdCBmaWxlUGF0aCA9IGpvaW4oXG4gICAgICBwYWNrYWdlRGlyLFxuICAgICAgJ3NyYy9pbnRlcm5hbC9tZXNzYWdlL3dvcmtmbG93L2hhbmRsZS1tZXNzYWdlLnRzJ1xuICAgICk7XG5cbiAgICB3cml0ZUpzb24oam9pbihwcm9qZWN0Um9vdCwgJ3BhY2thZ2UuanNvbicpLCB7XG4gICAgICBuYW1lOiAnY2hhdCcsXG4gICAgICBkZXBlbmRlbmNpZXM6IHsgdmFkZTogJ3dvcmtzcGFjZToqJyB9LFxuICAgIH0pO1xuXG4gICAgd3JpdGVKc29uKGpvaW4ocGFja2FnZURpciwgJ3BhY2thZ2UuanNvbicpLCB7XG4gICAgICBuYW1lOiAndmFkZScsXG4gICAgICB2ZXJzaW9uOiAnMC4wLjAnLFxuICAgIH0pO1xuXG4gICAgd3JpdGVGaWxlKGZpbGVQYXRoLCBgJ3VzZSB3b3JrZmxvdyc7XFxuYCk7XG5cbiAgICAvLyBOb24tZXhwb3J0ZWQgcGFja2FnZSBmaWxlcyBmYWxsIGJhY2sgdG8gdGhlIHJlbGF0aXZlLWZpbGUtcGF0aCBJRFxuICAgIC8vICh0aGUgU1dDIHBsdWdpbiB1c2VzIFwiLi97ZmlsZX1cIiB3aGVuIG1vZHVsZVNwZWNpZmllciBpcyB1bmRlZmluZWQpLlxuICAgIC8vIFRoaXMga2VlcHMgSURzIHVuaXF1ZSBwZXIgZmlsZSBhY3Jvc3MgdGhlIGJ1aWxkIGluc3RlYWQgb2YgY29sbGFwc2luZ1xuICAgIC8vIGV2ZXJ5IG5vbi1leHBvcnRlZCBmaWxlIGluIGB2YWRlYCB0byB0aGUgc2FtZSBcInZhZGVAMC4wLjBcIiBzcGVjaWZpZXIuXG4gICAgZXhwZWN0KHJlc29sdmVNb2R1bGVTcGVjaWZpZXIoZmlsZVBhdGgsIHByb2plY3RSb290KSkudG9FcXVhbCh7XG4gICAgICBtb2R1bGVTcGVjaWZpZXI6IHVuZGVmaW5lZCxcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3ByZXNlcnZlcyBwYWNrYWdlIGV4cG9ydCBzdWJwYXRocyB3aGVuIHNvdXJjZSBmaWxlcyBiYWNrIGRpc3QgZXhwb3J0cycsICgpID0+IHtcbiAgICBjb25zdCBwcm9qZWN0Um9vdCA9IGpvaW4odGVzdFJvb3QsICdhcHBzL2NoYXQnKTtcbiAgICBjb25zdCB3b3Jrc3BhY2VQa2dEaXIgPSBqb2luKHRlc3RSb290LCAncGFja2FnZXMvYWdlbnQnKTtcbiAgICBjb25zdCBmaWxlUGF0aCA9IGpvaW4od29ya3NwYWNlUGtnRGlyLCAnc3JjL3NlcnZlci50cycpO1xuXG4gICAgd3JpdGVKc29uKGpvaW4ocHJvamVjdFJvb3QsICdwYWNrYWdlLmpzb24nKSwge1xuICAgICAgbmFtZTogJ2NoYXQnLFxuICAgICAgZGVwZW5kZW5jaWVzOiB7ICdAaW50ZXJuYWwvYWdlbnQnOiAnd29ya3NwYWNlOionIH0sXG4gICAgfSk7XG5cbiAgICB3cml0ZUpzb24oam9pbih3b3Jrc3BhY2VQa2dEaXIsICdwYWNrYWdlLmpzb24nKSwge1xuICAgICAgbmFtZTogJ0BpbnRlcm5hbC9hZ2VudCcsXG4gICAgICB2ZXJzaW9uOiAnMS4wLjAnLFxuICAgICAgZXhwb3J0czoge1xuICAgICAgICAnLi9zZXJ2ZXInOiAnLi9kaXN0L3NlcnZlci5qcycsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgd3JpdGVGaWxlKGZpbGVQYXRoLCBgJ3VzZSBzdGVwJztcXG5gKTtcblxuICAgIGV4cGVjdChyZXNvbHZlTW9kdWxlU3BlY2lmaWVyKGZpbGVQYXRoLCBwcm9qZWN0Um9vdCkpLnRvRXF1YWwoe1xuICAgICAgbW9kdWxlU3BlY2lmaWVyOiAnQGludGVybmFsL2FnZW50L3NlcnZlckAxLjAuMCcsXG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"swc-esbuild-plugin.d.ts","sourceRoot":"","sources":["../src/swc-esbuild-plugin.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAEL,KAAK,gBAAgB,EACtB,MAAM,0BAA0B,CAAC;AAQlC,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC;;;;;;;;;;OAUG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;;;;;OAOG;IACH,qCAAqC,CAAC,EAAE,OAAO,CAAC;IAChD;;;;;;;;OAQG;IACH,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B;AA0CD,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAqWjE"}
1
+ {"version":3,"file":"swc-esbuild-plugin.d.ts","sourceRoot":"","sources":["../src/swc-esbuild-plugin.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAEL,KAAK,gBAAgB,EACtB,MAAM,0BAA0B,CAAC;AAQlC,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC;;;;;;;;;;OAUG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;;;;;OAOG;IACH,qCAAqC,CAAC,EAAE,OAAO,CAAC;IAChD;;;;;;;;OAQG;IACH,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B;AAkHD,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAuWjE"}
@@ -1,6 +1,7 @@
1
1
  import { readFile } from 'node:fs/promises';
2
2
  import { relative } from 'node:path';
3
3
  import { promisify } from 'node:util';
4
+ import { WorkflowBuildError } from '@workflow/errors';
4
5
  import enhancedResolveOrig from 'enhanced-resolve';
5
6
  import { applySwcTransform, } from './apply-swc-transform.js';
6
7
  import { jsTsRegex, parentHasChild, } from './discover-entries-esbuild-plugin.js';
@@ -43,10 +44,51 @@ const NODE_ESM_RESOLVE_OPTIONS = {
43
44
  function normalizePath(path) {
44
45
  return path.replace(/\\/g, '/');
45
46
  }
47
+ function formatIdLocation(location) {
48
+ return `${location.filePath}#${location.name}`;
49
+ }
50
+ function assertUniqueManifestIds(entriesByFile, ids, getId, label) {
51
+ const entriesByFileList = Object.entries(entriesByFile || {});
52
+ for (const [filePath, entries] of entriesByFileList) {
53
+ for (const [name, data] of Object.entries(entries)) {
54
+ const id = getId(data);
55
+ const existing = ids.get(id);
56
+ const current = { filePath, name };
57
+ if (existing &&
58
+ (existing.filePath !== current.filePath ||
59
+ existing.name !== current.name)) {
60
+ const idName = label === 'step' ? 'workflow step ID' : 'workflow ID';
61
+ const functionName = `${label} function`;
62
+ const capitalizedLabel = label === 'step' ? 'Step' : 'Workflow';
63
+ throw new WorkflowBuildError(`Duplicate ${idName} "${id}" generated for ${formatIdLocation(existing)} and ${formatIdLocation(current)}.`, {
64
+ hint: `${capitalizedLabel} IDs must be unique across a build. ` +
65
+ `If you own one of the colliding files, rename the ${functionName} or export ` +
66
+ `the package file through a unique package subpath. If the collision is in a ` +
67
+ `transitive dependency you don't control, file an issue with the upstream ` +
68
+ `package or pin to a non-colliding version.`,
69
+ });
70
+ }
71
+ ids.set(id, current);
72
+ }
73
+ }
74
+ }
75
+ function mergeWorkflowManifest(target, incoming, stepIds, workflowIds) {
76
+ assertUniqueManifestIds(incoming.steps, stepIds, (data) => data.stepId, 'step');
77
+ assertUniqueManifestIds(incoming.workflows, workflowIds, (data) => data.workflowId, 'workflow');
78
+ target.workflows = Object.assign(target.workflows || {}, incoming.workflows);
79
+ target.steps = Object.assign(target.steps || {}, incoming.steps);
80
+ target.classes = Object.assign(target.classes || {}, incoming.classes);
81
+ }
46
82
  export function createSwcPlugin(options) {
47
83
  return {
48
84
  name: 'swc-workflow-plugin',
49
85
  setup(build) {
86
+ let stepIdsForCurrentBuild = new Map();
87
+ let workflowIdsForCurrentBuild = new Map();
88
+ build.onStart(() => {
89
+ stepIdsForCurrentBuild = new Map();
90
+ workflowIdsForCurrentBuild = new Map();
91
+ });
50
92
  // everything is external unless explicitly configured
51
93
  // to be bundled
52
94
  const cjsResolver = promisify(enhancedResolveOrig.create(NODE_RESOLVE_OPTIONS));
@@ -300,9 +342,7 @@ export function createSwcPlugin(options) {
300
342
  if (!options.workflowManifest) {
301
343
  options.workflowManifest = {};
302
344
  }
303
- options.workflowManifest.workflows = Object.assign(options.workflowManifest.workflows || {}, workflowManifest.workflows);
304
- options.workflowManifest.steps = Object.assign(options.workflowManifest.steps || {}, workflowManifest.steps);
305
- options.workflowManifest.classes = Object.assign(options.workflowManifest.classes || {}, workflowManifest.classes);
345
+ mergeWorkflowManifest(options.workflowManifest, workflowManifest, stepIdsForCurrentBuild, workflowIdsForCurrentBuild);
306
346
  return {
307
347
  contents: transformedCode,
308
348
  loader,
@@ -330,4 +370,4 @@ function isProjectLocalFile(filePath, projectRoot) {
330
370
  }
331
371
  return (resolveModuleSpecifier(filePath, projectRoot).moduleSpecifier === undefined);
332
372
  }
333
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3djLWVzYnVpbGQtcGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3N3Yy1lc2J1aWxkLXBsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNyQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3RDLE9BQU8sbUJBQW1CLE1BQU0sa0JBQWtCLENBQUM7QUFFbkQsT0FBTyxFQUNMLGlCQUFpQixHQUVsQixNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sRUFDTCxTQUFTLEVBQ1QsY0FBYyxHQUNmLE1BQU0sc0NBQXNDLENBQUM7QUFDOUMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUF5Q3ZFLE1BQU0sb0JBQW9CLEdBQUc7SUFDM0IsY0FBYyxFQUFFLFVBQVU7SUFDMUIsT0FBTyxFQUFFLENBQUMsY0FBYyxDQUFDO0lBQ3pCLGFBQWEsRUFBRSxDQUFDLFNBQVMsQ0FBQztJQUMxQixhQUFhLEVBQUUsQ0FBQyxTQUFTLENBQUM7SUFDMUIsY0FBYyxFQUFFLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQztJQUNuQyxnQkFBZ0IsRUFBRSxDQUFDLGNBQWMsQ0FBQztJQUNsQyxVQUFVLEVBQUU7UUFDVixLQUFLO1FBQ0wsTUFBTTtRQUNOLE1BQU07UUFDTixNQUFNO1FBQ04sTUFBTTtRQUNOLE1BQU07UUFDTixLQUFLO1FBQ0wsTUFBTTtRQUNOLE9BQU87UUFDUCxPQUFPO0tBQ1I7SUFDRCxpQkFBaUIsRUFBRSxLQUFLO0lBQ3hCLFFBQVEsRUFBRSxJQUFJO0lBQ2QsVUFBVSxFQUFFLENBQUMsTUFBTSxDQUFDO0lBQ3BCLFNBQVMsRUFBRSxDQUFD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LE9BQU87d0JBQ0wsUUFBUSxFQUFFLGVBQWU7d0JBQ3pCLE1BQU07cUJBQ1AsQ0FBQztnQkFDSixDQUFDO2dCQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7b0JBQ2YsTUFBTSxZQUFZLEdBQ2hCLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDekQsT0FBTyxDQUFDLEtBQUssQ0FDWCw0QkFBNEIsSUFBSSxDQUFDLElBQUksR0FBRyxFQUN4QyxZQUFZLENBQ2IsQ0FBQztvQkFDRixPQUFPO3dCQUNMLE1BQU0sRUFBRTs0QkFDTjtnQ0FDRSxJQUFJLEVBQUUseUJBQXlCLFlBQVksRUFBRTtnQ0FDN0MsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFOzZCQUNsRDt5QkFDRjtxQkFDRixDQUFDO2dCQUNKLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsa0JBQWtCLENBQUMsUUFBZ0IsRUFBRSxXQUFtQjtJQUMvRCxJQUFJLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO1FBQ3ZELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELE9BQU8sQ0FDTCxzQkFBc0IsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUMsZUFBZSxLQUFLLFNBQVMsQ0FDNUUsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZWFkRmlsZSB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgcmVsYXRpdmUgfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgcHJvbWlzaWZ5IH0gZnJvbSAnbm9kZTp1dGlsJztcbmltcG9ydCBlbmhhbmNlZFJlc29sdmVPcmlnIGZyb20gJ2VuaGFuY2VkLXJlc29sdmUnO1xuaW1wb3J0IHR5cGUgeyBQbHVnaW4gfSBmcm9tICdlc2J1aWxkJztcbmltcG9ydCB7XG4gIGFwcGx5U3djVHJhbnNmb3JtLFxuICB0eXBlIFdvcmtmbG93TWFuaWZlc3QsXG59IGZyb20gJy4vYXBwbHktc3djLXRyYW5zZm9ybS5qcyc7XG5pbXBvcnQge1xuICBqc1RzUmVnZXgsXG4gIHBhcmVudEhhc0NoaWxkLFxufSBmcm9tICcuL2Rpc2NvdmVyLWVudHJpZXMtZXNidWlsZC1wbHVnaW4uanMnO1xuaW1wb3J0IHsgcmVzb2x2ZU1vZHVsZVNwZWNpZmllciB9IGZyb20gJy4vbW9kdWxlLXNwZWNpZmllci5qcyc7XG5pbXBvcnQgeyByZXNvbHZlV29ya2Zsb3dBbGlhc1JlbGF0aXZlUGF0aCB9IGZyb20gJy4vd29ya2Zsb3ctYWxpYXMuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFN3Y1BsdWdpbk9wdGlvbnMge1xuICBtb2RlOiAnc3RlcCcgfCAnd29ya2Zsb3cnO1xuICBlbnRyaWVzVG9CdW5kbGU/OiBzdHJpbmdbXTtcbiAgb3V0ZGlyPzogc3RyaW5nO1xuICBwcm9qZWN0Um9vdD86IHN0cmluZztcbiAgd29ya2Zsb3dNYW5pZmVzdD86IFdvcmtmbG93TWFuaWZlc3Q7XG4gIC8qKlxuICAgKiBSZXdyaXRlIFR5cGVTY3JpcHQgZXh0ZW5zaW9ucyAoLnRzLCAudHN4LCAubXRzLCAuY3RzKSB0byB0aGVpciBKU1xuICAgKiBlcXVpdmFsZW50cyAoLmpzLCAubWpzLCAuY2pzKSBpbiBleHRlcm5hbGl6ZWQgaW1wb3J0IHBhdGhzLlxuICAgKlxuICAgKiBFbmFibGUgdGhpcyB3aGVuIHRoZSBvdXRwdXQgYnVuZGxlIGlzIGNvbnN1bWVkIGRpcmVjdGx5IGJ5IE5vZGUncyBuYXRpdmVcbiAgICogRVNNIGxvYWRlciAoZS5nLiB2aXRlc3QpLCB3aGljaCBjYW5ub3QgcmVzb2x2ZSAudHMgZXh0ZW5zaW9ucy5cbiAgICpcbiAgICogTGVhdmUgZGlzYWJsZWQgKGRlZmF1bHQpIHdoZW4gYSBkb3duc3RyZWFtIGJ1bmRsZXIgKHdlYnBhY2ssIFZpdGUsIGV0Yy4pXG4gICAqIGhhbmRsZXMgcmVzb2x1dGlvbiDigJQgdGhvc2UgdG9vbHMgcmVzb2x2ZSAudHMgbmF0aXZlbHkgYW5kIHJld3JpdGluZ1xuICAgKiBicmVha3MgdGhlbSBiZWNhdXNlIHRoZSAuanMgZmlsZSBkb2Vzbid0IGV4aXN0IG9uIGRpc2suXG4gICAqL1xuICByZXdyaXRlVHNFeHRlbnNpb25zPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEJ1bmRsZSBwcm9qZWN0LWxvY2FsIGZpbGVzIHRoYXQgYXJlIHRyYW5zaXRpdmVseSBpbXBvcnRlZCBieSBzdGVwIGVudHJpZXMuXG4gICAqXG4gICAqIEtlZXAgdGhpcyBkaXNhYmxlZCB3aGVuIGEgZG93bnN0cmVhbSBidW5kbGVyIGNvbnN1bWVzIHRoZSBnZW5lcmF0ZWQgc3RlcFxuICAgKiBidW5kbGUgYmVjYXVzZSB0aGF0IGJ1bmRsZXIgY2FuIHJlc29sdmUgdGhlIGV4dGVybmFsaXplZCBsb2NhbCBpbXBvcnRzLlxuICAgKiBFbmFibGUgaXQgZm9yIGRpcmVjdCBydW50aW1lIGxvYWRpbmcsIHdoZXJlIE5vZGUgaW1wb3J0cyB0aGUgZ2VuZXJhdGVkIHN0ZXBcbiAgICogYnVuZGxlIGZyb20gZGlzayB3aXRob3V0IGEgbGF0ZXIgYnVuZGxpbmcgcGFzcy5cbiAgICovXG4gIGJ1bmRsZVRyYW5zaXRpdmVMb2NhbFN0ZXBEZXBlbmRlbmNpZXM/OiBib29sZWFuO1xuICAvKipcbiAgICogQWJzb2x1dGUgZmlsZSBwYXRocyBvZiBkaXNjb3ZlcmVkIHdvcmtmbG93L3N0ZXAvc2VyZGUgZW50cmllcyB3aG9zZVxuICAgKiBpbXBvcnRzIG11c3QgYmUgdHJlYXRlZCBhcyBzaWRlLWVmZmVjdGZ1bC5cbiAgICpcbiAgICogVGhlIFNXQyBjb21waWxlciB0cmFuc2Zvcm0gaW5qZWN0cyByZWdpc3RyYXRpb24gY2FsbHMgKHdvcmtmbG93IElEcyxcbiAgICogc3RlcCBJRHMsIGNsYXNzIHNlcmlhbGl6YXRpb24sIGV0Yy4pIGludG8gdGhlc2UgZmlsZXMuIFdpdGhvdXQgdGhpc1xuICAgKiBvdmVycmlkZSwgZXNidWlsZCBob25vdXJzIGBcInNpZGVFZmZlY3RzXCI6IGZhbHNlYCBmcm9tIHRoZSBwYWNrYWdlJ3NcbiAgICogYHBhY2thZ2UuanNvbmAgYW5kIHNpbGVudGx5IGRyb3BzIGJhcmUgaW1wb3J0cyBvZiB0aGVzZSBtb2R1bGVzLlxuICAgKi9cbiAgc2lkZUVmZmVjdEVudHJpZXM/OiBzdHJpbmdbXTtcbn1cblxuY29uc3QgTk9ERV9SRVNPTFZFX09QVElPTlMgPSB7XG4gIGRlcGVuZGVuY3lUeXBlOiAnY29tbW9uanMnLFxuICBtb2R1bGVzOiBbJ25vZGVfbW9kdWxlcyddLFxuICBleHBvcnRzRmllbGRzOiBbJ2V4cG9ydHMnXSxcbiAgaW1wb3J0c0ZpZWxkczogWydpbXBvcnRzJ10sXG4gIGNvbmRpdGlvbk5hbWVzOiBbJ25vZGUnLCAncmVxdWlyZSddLFxuICBkZXNjcmlwdGlvbkZpbGVzOiBbJ3BhY2thZ2UuanNvbiddLFxuICBleHRlbnNpb25zOiBbXG4gICAgJy50cycsXG4gICAgJy50c3gnLFxuICAgICcubXRzJyxcbiAgICAnLmN0cycsXG4gICAgJy5janMnLFxuICAgICcubWpzJyxcbiAgICAnLmpzJyxcbiAgICAnLmpzeCcsXG4gICAgJy5qc29uJyxcbiAgICAnLm5vZGUnLFxuICBdLFxuICBlbmZvcmNlRXh0ZW5zaW9uczogZmFsc2UsXG4gIHN5bWxpbmtzOiB0cnVlLFxuICBtYWluRmllbGRzOiBbJ21haW4nXSxcbiAgbWFpbkZpbGVzOiBbJ2luZGV4J10sXG4gIHJvb3RzOiBbXSxcbiAgZnVsbHlTcGVjaWZpZWQ6IGZhbHNlLFxuICBwcmVmZXJSZWxhdGl2ZTogZmFsc2UsXG4gIHByZWZlckFic29sdXRlOiBmYWxzZSxcbiAgcmVzdHJpY3Rpb25zOiBbXSxcbn07XG5cbmNvbnN0IE5PREVfRVNNX1JFU09MVkVfT1BUSU9OUyA9IHtcbiAgLi4uTk9ERV9SRVNPTFZFX09QVElPTlMsXG4gIGRlcGVuZGVuY3lUeXBlOiAnZXNtJyxcbiAgY29uZGl0aW9uTmFtZXM6IFsnbm9kZScsICdpbXBvcnQnXSxcbn07XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVBhdGgocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHBhdGgucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3djUGx1Z2luKG9wdGlvbnM6IFN3Y1BsdWdpbk9wdGlvbnMpOiBQbHVnaW4ge1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICdzd2Mtd29ya2Zsb3ctcGx1Z2luJyxcbiAgICBzZXR1cChidWlsZCkge1xuICAgICAgLy8gZXZlcnl0aGluZyBpcyBleHRlcm5hbCB1bmxlc3MgZXhwbGljaXRseSBjb25maWd1cmVkXG4gICAgICAvLyB0byBiZSBidW5kbGVkXG4gICAgICBjb25zdCBjanNSZXNvbHZlciA9IHByb21pc2lmeShcbiAgICAgICAgZW5oYW5jZWRSZXNvbHZlT3JpZy5jcmVhdGUoTk9ERV9SRVNPTFZFX09QVElPTlMpXG4gICAgICApO1xuICAgICAgY29uc3QgZXNtUmVzb2x2ZXIgPSBwcm9taXNpZnkoXG4gICAgICAgIGVuaGFuY2VkUmVzb2x2ZU9yaWcuY3JlYXRlKE5PREVfRVNNX1JFU09MVkVfT1BUSU9OUylcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IGVuaGFuY2VkUmVzb2x2ZSA9IGFzeW5jIChjb250ZXh0OiBzdHJpbmcsIHBhdGg6IHN0cmluZykgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBhd2FpdCBlc21SZXNvbHZlcihjb250ZXh0LCBwYXRoKTtcbiAgICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICAgIHJldHVybiBjanNSZXNvbHZlcihjb250ZXh0LCBwYXRoKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgLy8gUHJlLWNvbXB1dGUgdGhlIG5vcm1hbGl6ZWQgc2lkZS1lZmZlY3QgZW50cmllcyBzZXQgZm9yIE8oMSkgbG9va3Vwcy5cbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRTaWRlRWZmZWN0RW50cmllcyA9IG5ldyBTZXQoXG4gICAgICAgIG9wdGlvbnMuc2lkZUVmZmVjdEVudHJpZXM/Lm1hcCgoZSkgPT4gZS5yZXBsYWNlKC9cXFxcL2csICcvJykpXG4gICAgICApO1xuXG4gICAgICBidWlsZC5vblJlc29sdmUoeyBmaWx0ZXI6IC8uKi8gfSwgYXN5bmMgKGFyZ3MpID0+IHtcbiAgICAgICAgaWYgKGFyZ3MucGx1Z2luRGF0YT8uc2tpcFN3Y1BsdWdpbikgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICFvcHRpb25zLmVudHJpZXNUb0J1bmRsZSAmJlxuICAgICAgICAgIG5vcm1hbGl6ZWRTaWRlRWZmZWN0RW50cmllcy5zaXplID09PSAwXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gV2hlbiBvbmx5IHNpZGVFZmZlY3RFbnRyaWVzIGlzIHNldCAobm8gZW50cmllc1RvQnVuZGxlKSwgd2Ugb25seVxuICAgICAgICAvLyBuZWVkIHRvIG92ZXJyaWRlIHNpZGVFZmZlY3RzIGZvciB0b3AtbGV2ZWwgYmFyZSBpbXBvcnRzIOKAlCB0eXBpY2FsbHlcbiAgICAgICAgLy8gZnJvbSB0aGUgdmlydHVhbCBlbnRyeS4gU2tpcCByZXNvbHV0aW9uIGZvciB0cmFuc2l0aXZlIGltcG9ydHNcbiAgICAgICAgLy8gKGR5bmFtaWMgaW1wb3J0cywgcmVxdWlyZXMsIGV0Yy4pIHRvIGF2b2lkIHVubmVjZXNzYXJ5IG92ZXJoZWFkLlxuICAgICAgICBpZiAoIW9wdGlvbnMuZW50cmllc1RvQnVuZGxlICYmIGFyZ3Mua2luZCAhPT0gJ2ltcG9ydC1zdGF0ZW1lbnQnKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHNwZWNpZmllciA9IGFyZ3MucGF0aDtcbiAgICAgICAgICBjb25zdCBzcGVjaWZpZXJJc1BhdGggPVxuICAgICAgICAgICAgc3BlY2lmaWVyLnN0YXJ0c1dpdGgoJy4nKSB8fCBzcGVjaWZpZXIuc3RhcnRzV2l0aCgnLycpO1xuXG4gICAgICAgICAgbGV0IHJlc29sdmVkUGF0aDogc3RyaW5nIHwgZmFsc2UgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgLy8gUGF0aC1zdHlsZSBzcGVjaWZpZXJzICguL2ZvbywgLi4vZm9vLCAvYWJzL3BhdGgpIGV4dGVybmFsaXplIGFzXG4gICAgICAgICAgLy8gcmVsYXRpdmUgcGF0aHMgZnJvbSBgb3V0ZGlyYC4gQmFyZSBzcGVjaWZpZXJzIChucG0gcGFja2FnZXMpXG4gICAgICAgICAgLy8gZXh0ZXJuYWxpemUgYXMtaXMgc28gTm9kZSBjYW4gcmVzb2x2ZSB0aGVtIGF0IHJ1bnRpbWUuXG4gICAgICAgICAgY29uc3Qgc2hvdWxkTWFrZVJlbGF0aXZlID0gc3BlY2lmaWVySXNQYXRoO1xuXG4gICAgICAgICAgaWYgKHNwZWNpZmllcklzUGF0aCkge1xuICAgICAgICAgICAgcmVzb2x2ZWRQYXRoID0gYXdhaXQgZW5oYW5jZWRSZXNvbHZlKGFyZ3MucmVzb2x2ZURpciwgc3BlY2lmaWVyKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gUmVzb2x2ZSBmcm9tIHByb2plY3Qgcm9vdCBzbyBuZXN0ZWQgZGVwcyBhcmVuJ3QgZXh0ZXJuYWxpemVkXG4gICAgICAgICAgICByZXNvbHZlZFBhdGggPSBhd2FpdCBlbmhhbmNlZFJlc29sdmUoXG4gICAgICAgICAgICAgIGJ1aWxkLmluaXRpYWxPcHRpb25zLmFic1dvcmtpbmdEaXIgfHwgcHJvY2Vzcy5jd2QoKSxcbiAgICAgICAgICAgICAgc3BlY2lmaWVyXG4gICAgICAgICAgICApLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7IC8vIHN3YWxsb3cgc28gZXNidWlsZCBmYWxsYmFjayBiZWxvdyBjYW4gdHJ5XG5cbiAgICAgICAgICAgIC8vIEZhbGwgYmFjayB0byBlc2J1aWxkIGZvciBhbGlhc2VzL3RzY29uZmlnIHBhdGhzLlxuICAgICAgICAgICAgLy9cbiAgICAgICAgICAgIC8vIElmIHRoZSBzcGVjaWZpZXIgcmVzb2x2ZXMgdG8gYSBwcm9qZWN0LWxvY2FsIGZpbGUgdmlhIGFuXG4gICAgICAgICAgICAvLyBhbGlhcy9wYXRoIG1hcHBpbmcgKGUuZy4gdHNjb25maWcgYHBhdGhzYCwgZXNidWlsZCBgYWxpYXNgLFxuICAgICAgICAgICAgLy8gc2VsZi1yZWZlcmVuY2luZyBwYWNrYWdlIG5hbWVzIGxpa2UgYEBteS1wa2cvbGliL2Zvb2ApLCB3ZVxuICAgICAgICAgICAgLy8gYnVuZGxlIGl0IGlubGluZSByYXRoZXIgdGhhbiBleHRlcm5hbGl6aW5nLlxuICAgICAgICAgICAgLy9cbiAgICAgICAgICAgIC8vIEV4dGVybmFsaXppbmcgc3VjaCBmaWxlcyBpcyB1bnNhZmU6IHdlJ2QgZW1pdCBhIHJlbGF0aXZlXG4gICAgICAgICAgICAvLyBpbXBvcnQgdG8gdGhlIG9yaWdpbmFsIHNvdXJjZSBvbiBkaXNrLCBidXQgdGhhdCBzb3VyY2UgY2FuXG4gICAgICAgICAgICAvLyBjb250YWluIGZ1cnRoZXIgYWxpYXMgaW1wb3J0cy4gQXQgcnVudGltZSwgTm9kZSdzIEVTTSBsb2FkZXJcbiAgICAgICAgICAgIC8vIGRvZXNuJ3Qga25vdyBhYm91dCB0c2NvbmZpZyBwYXRocyBvciBidWlsZC10aW1lIGFsaWFzZXMsIHNvXG4gICAgICAgICAgICAvLyB0aG9zZSB0cmFuc2l0aXZlIGltcG9ydHMgdGhyb3cgYEVSUl9NT0RVTEVfTk9UX0ZPVU5EYCAvXG4gICAgICAgICAgICAvLyBgUGFja2FnZSBzdWJwYXRoIC4uLiBpcyBub3QgZGVmaW5lZCBieSBcImV4cG9ydHNcImAuXG4gICAgICAgICAgICAvL1xuICAgICAgICAgICAgLy8gQnVuZGxpbmcgaW5saW5lIGVuc3VyZXMgYWxpYXMtYmFzZWQgaW1wb3J0cyBhcmUgcmVzb2x2ZWQgYXRcbiAgICAgICAgICAgIC8vIGJ1aWxkIHRpbWUgKHdoZXJlIHRoZSBhbGlhcyBtYXAgaXMga25vd24pIGFuZCB0aGUgcnVudGltZVxuICAgICAgICAgICAgLy8gbmV2ZXIgc2VlcyBhbiB1bnJlc29sdmFibGUgc3BlY2lmaWVyLlxuICAgICAgICAgICAgaWYgKCFyZXNvbHZlZFBhdGgpIHtcbiAgICAgICAgICAgICAgY29uc3QgZXNidWlsZFJlc3VsdCA9IGF3YWl0IGJ1aWxkLnJlc29sdmUoc3BlY2lmaWVyLCB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZURpcjogYXJncy5yZXNvbHZlRGlyLFxuICAgICAgICAgICAgICAgIGtpbmQ6IGFyZ3Mua2luZCxcbiAgICAgICAgICAgICAgICBwbHVnaW5EYXRhOiB7IHNraXBTd2NQbHVnaW46IHRydWUgfSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGNvbnN0IGRpZFJlc29sdmUgPVxuICAgICAgICAgICAgICAgICEhZXNidWlsZFJlc3VsdC5wYXRoICYmICFlc2J1aWxkUmVzdWx0LmVycm9ycy5sZW5ndGg7XG4gICAgICAgICAgICAgIGNvbnN0IGlzUHJvamVjdExvY2FsRmlsZSA9XG4gICAgICAgICAgICAgICAgZGlkUmVzb2x2ZSAmJlxuICAgICAgICAgICAgICAgICFlc2J1aWxkUmVzdWx0LmV4dGVybmFsICYmXG4gICAgICAgICAgICAgICAgIWVzYnVpbGRSZXN1bHQucGF0aFxuICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcXFwvZywgJy8nKVxuICAgICAgICAgICAgICAgICAgLmluY2x1ZGVzKCcvbm9kZV9tb2R1bGVzLycpO1xuICAgICAgICAgICAgICBpZiAoaXNQcm9qZWN0TG9jYWxGaWxlKSB7XG4gICAgICAgICAgICAgICAgLy8gTGV0IGVzYnVpbGQgYnVuZGxlIHRoaXMgYWxpYXNlZCBwcm9qZWN0LWxvY2FsIGZpbGUgaW5saW5lXG4gICAgICAgICAgICAgICAgLy8gKHJldHVybiBudWxsIHRvIGRlZmVyIHRvIGVzYnVpbGQncyBub3JtYWwgcGlwZWxpbmUpLiBUaGVcbiAgICAgICAgICAgICAgICAvLyBTV0MgYG9uTG9hZGAgaGFuZGxlciB3aWxsIHN0aWxsIHByb2Nlc3MgaXQuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5lbnRyaWVzVG9CdW5kbGUgJiZcbiAgICAgICAgICAgICAgICBlc2J1aWxkUmVzdWx0LnBhdGg/LmVuZHNXaXRoKCcubm9kZScpXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICBleHRlcm5hbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIHBhdGg6IHNwZWNpZmllcixcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFyZXNvbHZlZFBhdGgpIHJldHVybiBudWxsO1xuXG4gICAgICAgICAgLy8gTm9ybWFsaXplIHRvIGZvcndhcmQgc2xhc2hlcyBmb3IgY3Jvc3MtcGxhdGZvcm0gY29tcGFyaXNvblxuICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRSZXNvbHZlZFBhdGggPSBub3JtYWxpemVQYXRoKHJlc29sdmVkUGF0aCk7XG4gICAgICAgICAgY29uc3Qgd29ya2luZ0RpciA9XG4gICAgICAgICAgICBidWlsZC5pbml0aWFsT3B0aW9ucy5hYnNXb3JraW5nRGlyIHx8IHByb2Nlc3MuY3dkKCk7XG4gICAgICAgICAgY29uc3QgcHJvamVjdFJvb3QgPSBvcHRpb25zLnByb2plY3RSb290IHx8IHdvcmtpbmdEaXI7XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBvcHRpb25zLmVudHJpZXNUb0J1bmRsZSAmJlxuICAgICAgICAgICAgbm9ybWFsaXplZFJlc29sdmVkUGF0aC5lbmRzV2l0aCgnLm5vZGUnKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgZXh0ZXJuYWw6IHRydWUsXG4gICAgICAgICAgICAgIHBhdGg6IHNwZWNpZmllcixcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBtb2R1bGUgaXMgYSBkaXNjb3ZlcmVkIGVudHJ5IHdob3NlIFNXQy10cmFuc2Zvcm1lZFxuICAgICAgICAgIC8vIGNvZGUgY29udGFpbnMgc2lkZSBlZmZlY3RzICh3b3JrZmxvdy9zdGVwL2NsYXNzIHJlZ2lzdHJhdGlvbikuXG4gICAgICAgICAgLy8gT3ZlcnJpZGUgdGhlIHBhY2thZ2UuanNvbiBcInNpZGVFZmZlY3RzXCI6IGZhbHNlIHNvIGVzYnVpbGQgZG9lcyBub3RcbiAgICAgICAgICAvLyBkcm9wIGJhcmUgaW1wb3J0cyBvZiB0aGVzZSBtb2R1bGVzLlxuICAgICAgICAgIGNvbnN0IGhhc1NpZGVFZmZlY3RzID0gbm9ybWFsaXplZFNpZGVFZmZlY3RFbnRyaWVzLmhhcyhcbiAgICAgICAgICAgIG5vcm1hbGl6ZWRSZXNvbHZlZFBhdGhcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKG9wdGlvbnMuZW50cmllc1RvQnVuZGxlKSB7XG4gICAgICAgICAgICBsZXQgc2hvdWxkQnVuZGxlID0gZmFsc2U7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGVudHJ5VG9CdW5kbGUgb2Ygb3B0aW9ucy5lbnRyaWVzVG9CdW5kbGUpIHtcbiAgICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZEVudHJ5ID0gZW50cnlUb0J1bmRsZS5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG5cbiAgICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWRSZXNvbHZlZFBhdGggPT09IG5vcm1hbGl6ZWRFbnRyeSkge1xuICAgICAgICAgICAgICAgIHNob3VsZEJ1bmRsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAvLyBpZiB0aGUgY3VycmVudCBlbnRyeSBpbXBvcnRzIGEgY2hpbGQgdGhhdCBuZWVkc1xuICAgICAgICAgICAgICAvLyB0byBiZSBidW5kbGVkIHRoZW4gaXQgbmVlZHMgdG8gYWxzbyBiZSBidW5kbGVkIHNvXG4gICAgICAgICAgICAgIC8vIHRoYXQgdGhlIGNoaWxkIGNhbiBoYXZlIG91ciB0cmFuc2Zvcm0gYXBwbGllZFxuICAgICAgICAgICAgICBpZiAocGFyZW50SGFzQ2hpbGQobm9ybWFsaXplZFJlc29sdmVkUGF0aCwgbm9ybWFsaXplZEVudHJ5KSkge1xuICAgICAgICAgICAgICAgIHNob3VsZEJ1bmRsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAvLyBCdW5kbGUgcHJvamVjdC1sb2NhbCBzb3VyY2UgZmlsZXMgdGhhdCBhcmUgaW1wb3J0ZWQgYnkgYVxuICAgICAgICAgICAgICAvLyBzdGVwL3NlcmRlIGVudHJ5IHNvIGRpcmVjdCBydW50aW1lIGxvYWRlcnMgZG8gbm90IHNlZSByYXcgVFNcbiAgICAgICAgICAgICAgLy8gZXh0ZW5zaW9ubGVzcyBpbXBvcnRzLiBLZWVwIHBhY2thZ2UgZGVwZW5kZW5jaWVzIGV4dGVybmFsXG4gICAgICAgICAgICAgIC8vIHVubGVzcyB0aGV5IGFyZSB0aGVtc2VsdmVzIGluIGVudHJpZXNUb0J1bmRsZSBvciBhcmUgcGFyZW50c1xuICAgICAgICAgICAgICAvLyBvZiBhIGRpc2NvdmVyZWQgd29ya2Zsb3cvc3RlcC9zZXJkZSBmaWxlIHZpYSB0aGUgY2hlY2sgYWJvdmUuXG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBvcHRpb25zLmJ1bmRsZVRyYW5zaXRpdmVMb2NhbFN0ZXBEZXBlbmRlbmNpZXMgJiZcbiAgICAgICAgICAgICAgICBpc1Byb2plY3RMb2NhbEZpbGUobm9ybWFsaXplZFJlc29sdmVkUGF0aCwgcHJvamVjdFJvb3QpICYmXG4gICAgICAgICAgICAgICAgcGFyZW50SGFzQ2hpbGQobm9ybWFsaXplZEVudHJ5LCBub3JtYWxpemVkUmVzb2x2ZWRQYXRoKVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBzaG91bGRCdW5kbGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzaG91bGRCdW5kbGUpIHtcbiAgICAgICAgICAgICAgLy8gTGV0IGVzYnVpbGQgYnVuZGxlIHRoaXMgZW50cnksIGJ1dCBvdmVycmlkZSBzaWRlRWZmZWN0cyBpZiBuZWVkZWQuXG4gICAgICAgICAgICAgIC8vIFdlIG11c3QgcmV0dXJuIHRoZSByZXNvbHZlZCBgcGF0aGAgYWxvbmdzaWRlIGBzaWRlRWZmZWN0c2AgYmVjYXVzZVxuICAgICAgICAgICAgICAvLyByZXR1cm5pbmcgb25seSBgeyBzaWRlRWZmZWN0czogdHJ1ZSB9YCB3aXRob3V0IGEgcGF0aCBjYXVzZXMgZXNidWlsZFxuICAgICAgICAgICAgICAvLyB0byBmYWxsIHRocm91Z2ggdG8gaXRzIG93biByZXNvbHZlciwgd2hpY2ggcmUtcmVhZHMgdGhlIHBhY2thZ2UuanNvblxuICAgICAgICAgICAgICAvLyBhbmQgYXBwbGllcyBgXCJzaWRlRWZmZWN0c1wiOiBmYWxzZWAgZnJvbSB0aGVyZS5cbiAgICAgICAgICAgICAgcmV0dXJuIGhhc1NpZGVFZmZlY3RzXG4gICAgICAgICAgICAgICAgPyB7IHBhdGg6IHJlc29sdmVkUGF0aCwgc2lkZUVmZmVjdHM6IHRydWUgfVxuICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGV4dGVybmFsUGF0aDogc3RyaW5nO1xuICAgICAgICAgICAgaWYgKHNob3VsZE1ha2VSZWxhdGl2ZSkge1xuICAgICAgICAgICAgICAvLyBXaGVuIHRoZSByZXNvbHZlZCBmaWxlIGxpdmVzIGluc2lkZSBub2RlX21vZHVsZXMsIGxldFxuICAgICAgICAgICAgICAvLyBlc2J1aWxkIGJ1bmRsZSBpdCByYXRoZXIgdGhhbiBleHRlcm5hbGl6aW5nIHdpdGggYSBkZWVwbHlcbiAgICAgICAgICAgICAgLy8gbmVzdGVkIHJlbGF0aXZlIHBhdGguIERvd25zdHJlYW0gYnVuZGxlcnMgKFJvbGx1cC9WaXRlKVxuICAgICAgICAgICAgICAvLyBjYW4ndCByZXdyaXRlIG9wYXF1ZSBgX19yZXF1aXJlKClgIGNhbGxzIGluIENKUyBzaGltcywgc29cbiAgICAgICAgICAgICAgLy8gcmVsYXRpdmUgcGF0aHMgY29tcHV0ZWQgZm9yIGBvdXRkaXJgIGJyZWFrIG9uY2UgdGhlIG91dHB1dFxuICAgICAgICAgICAgICAvLyBpcyByZWJ1bmRsZWQgdG8gYSBkaWZmZXJlbnQgZGlyZWN0b3J5LlxuICAgICAgICAgICAgICBpZiAobm9ybWFsaXplZFJlc29sdmVkUGF0aC5pbmNsdWRlcygnL25vZGVfbW9kdWxlcy8nKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsOyAvLyBsZXQgZXNidWlsZCBidW5kbGUgaXRcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGV4dGVybmFsUGF0aCA9IHJlbGF0aXZlKFxuICAgICAgICAgICAgICAgIG9wdGlvbnMub3V0ZGlyIHx8IHByb2Nlc3MuY3dkKCksXG4gICAgICAgICAgICAgICAgcmVzb2x2ZWRQYXRoXG4gICAgICAgICAgICAgICkucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnJld3JpdGVUc0V4dGVuc2lvbnMpIHtcbiAgICAgICAgICAgICAgICAvLyBSZXdyaXRlIFR5cGVTY3JpcHQgZXh0ZW5zaW9ucyB0byB0aGVpciBKUyBlcXVpdmFsZW50cyBzbyB0aGVcbiAgICAgICAgICAgICAgICAvLyBleHRlcm5hbGl6ZWQgaW1wb3J0IGlzIGxvYWRhYmxlIGJ5IE5vZGUncyBuYXRpdmUgRVNNIGxvYWRlci5cbiAgICAgICAgICAgICAgICBleHRlcm5hbFBhdGggPSBleHRlcm5hbFBhdGhcbiAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXC50c3g/JC8sICcuanMnKVxuICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcLm10cyQvLCAnLm1qcycpXG4gICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFwuY3RzJC8sICcuY2pzJyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGV4dGVybmFsUGF0aCA9IHNwZWNpZmllcjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgZXh0ZXJuYWw6IHRydWUsXG4gICAgICAgICAgICAgIHBhdGg6IGV4dGVybmFsUGF0aCxcbiAgICAgICAgICAgICAgc2lkZUVmZmVjdHM6IGhhc1NpZGVFZmZlY3RzIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gTm8gZW50cmllc1RvQnVuZGxlIOKAlCBvbmx5IG92ZXJyaWRlIHNpZGVFZmZlY3RzIHdoZW4gbmVlZGVkLlxuICAgICAgICAgIC8vIFdlIG11c3QgcmV0dXJuIHRoZSByZXNvbHZlZCBgcGF0aGAgYWxvbmdzaWRlIGBzaWRlRWZmZWN0c2AgYmVjYXVzZVxuICAgICAgICAgIC8vIHJldHVybmluZyBvbmx5IGB7IHNpZGVFZmZlY3RzOiB0cnVlIH1gIHdpdGhvdXQgYSBwYXRoIGNhdXNlcyBlc2J1aWxkXG4gICAgICAgICAgLy8gdG8gZmFsbCB0aHJvdWdoIHRvIGl0cyBvd24gcmVzb2x2ZXIsIHdoaWNoIHJlLXJlYWRzIHRoZSBwYWNrYWdlLmpzb25cbiAgICAgICAgICAvLyBhbmQgYXBwbGllcyBgXCJzaWRlRWZmZWN0c1wiOiBmYWxzZWAgZnJvbSB0aGVyZS5cbiAgICAgICAgICByZXR1cm4gaGFzU2lkZUVmZmVjdHNcbiAgICAgICAgICAgID8geyBwYXRoOiByZXNvbHZlZFBhdGgsIHNpZGVFZmZlY3RzOiB0cnVlIH1cbiAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgfSBjYXRjaCAoXykge31cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9KTtcblxuICAgICAgLy8gSGFuZGxlIFR5cGVTY3JpcHQgYW5kIEphdmFTY3JpcHQgZmlsZXNcbiAgICAgIGJ1aWxkLm9uTG9hZCh7IGZpbHRlcjoganNUc1JlZ2V4IH0sIGFzeW5jIChhcmdzKSA9PiB7XG4gICAgICAgIC8vIERldGVybWluZSBpZiB0aGlzIGlzIGEgVHlwZVNjcmlwdCBmaWxlXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBsb2FkZXIgYmFzZWQgb24gdGhlIG91dHB1dFxuICAgICAgICAgIGxldCBsb2FkZXI6ICdqcycgfCAnanN4JyB8ICd0c3gnID0gJ2pzJztcbiAgICAgICAgICBpZiAoYXJncy5wYXRoLmVuZHNXaXRoKCcuanN4JykpIHtcbiAgICAgICAgICAgIGxvYWRlciA9ICdqc3gnO1xuICAgICAgICAgIH0gZWxzZSBpZiAoYXJncy5wYXRoLmVuZHNXaXRoKCcudHN4JykpIHtcbiAgICAgICAgICAgIGxvYWRlciA9ICd0c3gnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBzb3VyY2UgPSBhd2FpdCByZWFkRmlsZShhcmdzLnBhdGgsICd1dGY4Jyk7XG4gICAgICAgICAgY29uc3Qgbm9ybWFsaXplZFNvdXJjZSA9IHNvdXJjZVxuICAgICAgICAgICAgLnJlcGxhY2UoL3JlcXVpcmVcXChcXHMqKFsnXCJdKXNlcnZlci1vbmx5XFwxXFxzKlxcKS9nLCAndm9pZCAwJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC9yZXF1aXJlXFwoXFxzKihbJ1wiXSljbGllbnQtb25seVxcMVxccypcXCkvZywgJ3ZvaWQgMCcpO1xuXG4gICAgICAgICAgLy8gQ2FsY3VsYXRlIHJlbGF0aXZlIHBhdGggZm9yIFNXQyBwbHVnaW5cbiAgICAgICAgICAvLyBUaGUgZmlsZW5hbWUgcGFyYW1ldGVyIGlzIHVzZWQgdG8gZ2VuZXJhdGUgd29ya2Zsb3dJZC9zdGVwSWQsIHNvIGl0IG11c3QgYmUgcmVsYXRpdmVcbiAgICAgICAgICBjb25zdCB3b3JraW5nRGlyID1cbiAgICAgICAgICAgIGJ1aWxkLmluaXRpYWxPcHRpb25zLmFic1dvcmtpbmdEaXIgfHwgcHJvY2Vzcy5jd2QoKTtcbiAgICAgICAgICBjb25zdCBwcm9qZWN0Um9vdCA9IG9wdGlvbnMucHJvamVjdFJvb3QgfHwgd29ya2luZ0RpcjtcbiAgICAgICAgICAvLyBOb3JtYWxpemUgcGF0aHM6IGNvbnZlcnQgYmFja3NsYXNoZXMgdG8gZm9yd2FyZCBzbGFzaGVzIGFuZCByZW1vdmUgdHJhaWxpbmcgc2xhc2hlc1xuICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRXb3JraW5nRGlyID0gd29ya2luZ0RpclxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcXFwvZywgJy8nKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcLyQvLCAnJyk7XG4gICAgICAgICAgY29uc3Qgbm9ybWFsaXplZFBhdGggPSBhcmdzLnBhdGgucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuXG4gICAgICAgICAgLy8gV2luZG93cyBmaXg6IEFsd2F5cyBkbyBjYXNlLWluc2Vuc2l0aXZlIHBhdGggY29tcGFyaXNvbiBhcyB0aGUgUFJJTUFSWSBsb2dpY1xuICAgICAgICAgIC8vIHRvIHdvcmsgYXJvdW5kIG5vZGU6cGF0aC5yZWxhdGl2ZSgpIG5vdCByZWNvZ25pemluZyBwYXRocyB3aXRoIGRpZmZlcmVudCBkcml2ZVxuICAgICAgICAgIC8vIGxldHRlciBjYXNpbmcgKGUuZy4sIEQ6IHZzIGQ6KSBhcyBiZWluZyBpbiB0aGUgc2FtZSB0cmVlXG4gICAgICAgICAgY29uc3QgbG93ZXJXZCA9IG5vcm1hbGl6ZWRXb3JraW5nRGlyLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgY29uc3QgbG93ZXJQYXRoID0gbm9ybWFsaXplZFBhdGgudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICAgIGxldCByZWxhdGl2ZUZpbGVwYXRoOiBzdHJpbmc7XG4gICAgICAgICAgaWYgKGxvd2VyUGF0aC5zdGFydHNXaXRoKGxvd2VyV2QgKyAnLycpKSB7XG4gICAgICAgICAgICAvLyBGaWxlIGlzIHVuZGVyIHdvcmtpbmcgZGlyZWN0b3J5IC0gbWFudWFsbHkgY2FsY3VsYXRlIHJlbGF0aXZlIHBhdGhcbiAgICAgICAgICAgIC8vIFRoaXMgZW5zdXJlcyB3ZSBnZXQgYSByZWxhdGl2ZSBwYXRoIGV2ZW4gd2l0aCBkcml2ZSBsZXR0ZXIgY2FzaW5nIGlzc3Vlc1xuICAgICAgICAgICAgcmVsYXRpdmVGaWxlcGF0aCA9IG5vcm1hbGl6ZWRQYXRoLnN1YnN0cmluZyhcbiAgICAgICAgICAgICAgbm9ybWFsaXplZFdvcmtpbmdEaXIubGVuZ3RoICsgMVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGxvd2VyUGF0aCA9PT0gbG93ZXJXZCkge1xuICAgICAgICAgICAgLy8gRmlsZSBJUyB0aGUgd29ya2luZyBkaXJlY3RvcnlcbiAgICAgICAgICAgIHJlbGF0aXZlRmlsZXBhdGggPSAnLic7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEZpbGUgaXMgb3V0c2lkZSB3b3JraW5nIGRpcmVjdG9yeSAtIHVzZSByZWxhdGl2ZSgpIGFuZCBzdHJpcCAuLi8gcHJlZml4ZXMgaWYgbmVlZGVkXG4gICAgICAgICAgICByZWxhdGl2ZUZpbGVwYXRoID0gcmVsYXRpdmUoXG4gICAgICAgICAgICAgIG5vcm1hbGl6ZWRXb3JraW5nRGlyLFxuICAgICAgICAgICAgICBub3JtYWxpemVkUGF0aFxuICAgICAgICAgICAgKS5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG5cbiAgICAgICAgICAgIC8vIEhhbmRsZSBmaWxlcyBkaXNjb3ZlcmVkIG91dHNpZGUgdGhlIHdvcmtpbmcgZGlyZWN0b3J5XG4gICAgICAgICAgICAvLyBUaGVzZSBjb21lIGJhY2sgYXMgLi4vcGF0aC90by9maWxlLCBidXQgd2Ugd2FudCBqdXN0IHBhdGgvdG8vZmlsZVxuICAgICAgICAgICAgaWYgKHJlbGF0aXZlRmlsZXBhdGguc3RhcnRzV2l0aCgnLi4vJykpIHtcbiAgICAgICAgICAgICAgY29uc3QgYWxpYXNlZFJlbGF0aXZlUGF0aCA9XG4gICAgICAgICAgICAgICAgYXdhaXQgcmVzb2x2ZVdvcmtmbG93QWxpYXNSZWxhdGl2ZVBhdGgoYXJncy5wYXRoLCB3b3JraW5nRGlyKTtcbiAgICAgICAgICAgICAgaWYgKGFsaWFzZWRSZWxhdGl2ZVBhdGgpIHtcbiAgICAgICAgICAgICAgICByZWxhdGl2ZUZpbGVwYXRoID0gYWxpYXNlZFJlbGF0aXZlUGF0aDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZWxhdGl2ZUZpbGVwYXRoID0gcmVsYXRpdmVGaWxlcGF0aFxuICAgICAgICAgICAgICAgICAgLnNwbGl0KCcvJylcbiAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKHBhcnQpID0+IHBhcnQgIT09ICcuLicpXG4gICAgICAgICAgICAgICAgICAuam9pbignLycpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gRmluYWwgc2FmZXR5IGNoZWNrIC0gZW5zdXJlIHdlIG5ldmVyIHBhc3MgYW4gYWJzb2x1dGUgcGF0aCB0byBTV0NcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICByZWxhdGl2ZUZpbGVwYXRoLmluY2x1ZGVzKCc6JykgfHxcbiAgICAgICAgICAgIHJlbGF0aXZlRmlsZXBhdGguc3RhcnRzV2l0aCgnLycpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4sIGJ1dCBpZiBpdCBkb2VzLCB1c2UganVzdCB0aGUgZmlsZW5hbWUgYXMgbGFzdCByZXNvcnRcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIGBbRVJST1JdIHJlbGF0aXZlRmlsZXBhdGggaXMgc3RpbGwgYWJzb2x1dGU6ICR7cmVsYXRpdmVGaWxlcGF0aH1gXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmVsYXRpdmVGaWxlcGF0aCA9IG5vcm1hbGl6ZWRQYXRoLnNwbGl0KCcvJykucG9wKCkgfHwgJ3Vua25vd24udHMnO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHsgY29kZTogdHJhbnNmb3JtZWRDb2RlLCB3b3JrZmxvd01hbmlmZXN0IH0gPVxuICAgICAgICAgICAgYXdhaXQgYXBwbHlTd2NUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgIHJlbGF0aXZlRmlsZXBhdGgsXG4gICAgICAgICAgICAgIG5vcm1hbGl6ZWRTb3VyY2UsXG4gICAgICAgICAgICAgIG9wdGlvbnMubW9kZSxcbiAgICAgICAgICAgICAgYXJncy5wYXRoLCAvLyBQYXNzIGFic29sdXRlIHBhdGggZm9yIG1vZHVsZSBzcGVjaWZpZXIgcmVzb2x1dGlvblxuICAgICAgICAgICAgICBwcm9qZWN0Um9vdFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIGlmICghb3B0aW9ucy53b3JrZmxvd01hbmlmZXN0KSB7XG4gICAgICAgICAgICBvcHRpb25zLndvcmtmbG93TWFuaWZlc3QgPSB7fTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBvcHRpb25zLndvcmtmbG93TWFuaWZlc3Qud29ya2Zsb3dzID0gT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICAgIG9wdGlvbnMud29ya2Zsb3dNYW5pZmVzdC53b3JrZmxvd3MgfHwge30sXG4gICAgICAgICAgICB3b3JrZmxvd01hbmlmZXN0LndvcmtmbG93c1xuICAgICAgICAgICk7XG4gICAgICAgICAgb3B0aW9ucy53b3JrZmxvd01hbmlmZXN0LnN0ZXBzID0gT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICAgIG9wdGlvbnMud29ya2Zsb3dNYW5pZmVzdC5zdGVwcyB8fCB7fSxcbiAgICAgICAgICAgIHdvcmtmbG93TWFuaWZlc3Quc3RlcHNcbiAgICAgICAgICApO1xuICAgICAgICAgIG9wdGlvbnMud29ya2Zsb3dNYW5pZmVzdC5jbGFzc2VzID0gT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICAgIG9wdGlvbnMud29ya2Zsb3dNYW5pZmVzdC5jbGFzc2VzIHx8IHt9LFxuICAgICAgICAgICAgd29ya2Zsb3dNYW5pZmVzdC5jbGFzc2VzXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50czogdHJhbnNmb3JtZWRDb2RlLFxuICAgICAgICAgICAgbG9hZGVyLFxuICAgICAgICAgIH07XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID1cbiAgICAgICAgICAgIGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgYOKdjCBTV0MgdHJhbnNmb3JtIGVycm9yIGluICR7YXJncy5wYXRofTpgLFxuICAgICAgICAgICAgZXJyb3JNZXNzYWdlXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZXJyb3JzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0ZXh0OiBgU1dDIHRyYW5zZm9ybSBmYWlsZWQ6ICR7ZXJyb3JNZXNzYWdlfWAsXG4gICAgICAgICAgICAgICAgbG9jYXRpb246IHsgZmlsZTogYXJncy5wYXRoLCBsaW5lOiAwLCBjb2x1bW46IDAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gaXNQcm9qZWN0TG9jYWxGaWxlKGZpbGVQYXRoOiBzdHJpbmcsIHByb2plY3RSb290OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKG5vcm1hbGl6ZVBhdGgoZmlsZVBhdGgpLmluY2x1ZGVzKCcvbm9kZV9tb2R1bGVzLycpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICByZXNvbHZlTW9kdWxlU3BlY2lmaWVyKGZpbGVQYXRoLCBwcm9qZWN0Um9vdCkubW9kdWxlU3BlY2lmaWVyID09PSB1bmRlZmluZWRcbiAgKTtcbn1cbiJdfQ==
373
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3djLWVzYnVpbGQtcGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3N3Yy1lc2J1aWxkLXBsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNyQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3RELE9BQU8sbUJBQW1CLE1BQU0sa0JBQWtCLENBQUM7QUFFbkQsT0FBTyxFQUNMLGlCQUFpQixHQUVsQixNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sRUFDTCxTQUFTLEVBQ1QsY0FBYyxHQUNmLE1BQU0sc0NBQXNDLENBQUM7QUFDOUMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUF5Q3ZFLE1BQU0sb0JBQW9CLEdBQUc7SUFDM0IsY0FBYyxFQUFFLFVBQVU7SUFDMUIsT0FBTyxFQUFFLENBQUMsY0FBYyxDQUFDO0lBQ3pCLGFBQWEsRUFBRSxDQUFDLFNBQVMsQ0FBQztJQUMxQixhQUFhLEVBQUUsQ0FBQyxTQUFTLENBQUM7SUFDMUIsY0FBYyxFQUFFLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQztJQUNuQyxnQkFBZ0IsRUFBRSxDQUFDLGNBQWMsQ0FBQztJQUNsQyxVQUFVLEVBQUU7UUFDVixLQUFLO1FBQ0wsTUFBTTtRQUNOLE1BQU07UUFDTixNQUFNO1FBQ04sTUFBTTtRQUNOLE1BQU07UUFDTixLQUFLO1FBQ0wsTUFBTTtRQUNOLE9BQU87UUFDUCxPQUFPO0tBQ1I7SUFDRCxpQkFBaUIsRUFBRSxLQUFLO0lBQ3hCLFFBQVEsRUFBRSxJQUFJO0lBQ2Qs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QUM7Z0JBQ0osQ0FBQztnQkFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO29CQUNmLE1BQU0sWUFBWSxHQUNoQixLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ3pELE9BQU8sQ0FBQyxLQUFLLENBQ1gsNEJBQTRCLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFDeEMsWUFBWSxDQUNiLENBQUM7b0JBQ0YsT0FBTzt3QkFDTCxNQUFNLEVBQUU7NEJBQ047Z0NBQ0UsSUFBSSxFQUFFLHlCQUF5QixZQUFZLEVBQUU7Z0NBQzdDLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRTs2QkFDbEQ7eUJBQ0Y7cUJBQ0YsQ0FBQztnQkFDSixDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLGtCQUFrQixDQUFDLFFBQWdCLEVBQUUsV0FBbUI7SUFDL0QsSUFBSSxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQztRQUN2RCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxPQUFPLENBQ0wsc0JBQXNCLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDLGVBQWUsS0FBSyxTQUFTLENBQzVFLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVhZEZpbGUgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCB7IHJlbGF0aXZlIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IHByb21pc2lmeSB9IGZyb20gJ25vZGU6dXRpbCc7XG5pbXBvcnQgeyBXb3JrZmxvd0J1aWxkRXJyb3IgfSBmcm9tICdAd29ya2Zsb3cvZXJyb3JzJztcbmltcG9ydCBlbmhhbmNlZFJlc29sdmVPcmlnIGZyb20gJ2VuaGFuY2VkLXJlc29sdmUnO1xuaW1wb3J0IHR5cGUgeyBQbHVnaW4gfSBmcm9tICdlc2J1aWxkJztcbmltcG9ydCB7XG4gIGFwcGx5U3djVHJhbnNmb3JtLFxuICB0eXBlIFdvcmtmbG93TWFuaWZlc3QsXG59IGZyb20gJy4vYXBwbHktc3djLXRyYW5zZm9ybS5qcyc7XG5pbXBvcnQge1xuICBqc1RzUmVnZXgsXG4gIHBhcmVudEhhc0NoaWxkLFxufSBmcm9tICcuL2Rpc2NvdmVyLWVudHJpZXMtZXNidWlsZC1wbHVnaW4uanMnO1xuaW1wb3J0IHsgcmVzb2x2ZU1vZHVsZVNwZWNpZmllciB9IGZyb20gJy4vbW9kdWxlLXNwZWNpZmllci5qcyc7XG5pbXBvcnQgeyByZXNvbHZlV29ya2Zsb3dBbGlhc1JlbGF0aXZlUGF0aCB9IGZyb20gJy4vd29ya2Zsb3ctYWxpYXMuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFN3Y1BsdWdpbk9wdGlvbnMge1xuICBtb2RlOiAnc3RlcCcgfCAnd29ya2Zsb3cnO1xuICBlbnRyaWVzVG9CdW5kbGU/OiBzdHJpbmdbXTtcbiAgb3V0ZGlyPzogc3RyaW5nO1xuICBwcm9qZWN0Um9vdD86IHN0cmluZztcbiAgd29ya2Zsb3dNYW5pZmVzdD86IFdvcmtmbG93TWFuaWZlc3Q7XG4gIC8qKlxuICAgKiBSZXdyaXRlIFR5cGVTY3JpcHQgZXh0ZW5zaW9ucyAoLnRzLCAudHN4LCAubXRzLCAuY3RzKSB0byB0aGVpciBKU1xuICAgKiBlcXVpdmFsZW50cyAoLmpzLCAubWpzLCAuY2pzKSBpbiBleHRlcm5hbGl6ZWQgaW1wb3J0IHBhdGhzLlxuICAgKlxuICAgKiBFbmFibGUgdGhpcyB3aGVuIHRoZSBvdXRwdXQgYnVuZGxlIGlzIGNvbnN1bWVkIGRpcmVjdGx5IGJ5IE5vZGUncyBuYXRpdmVcbiAgICogRVNNIGxvYWRlciAoZS5nLiB2aXRlc3QpLCB3aGljaCBjYW5ub3QgcmVzb2x2ZSAudHMgZXh0ZW5zaW9ucy5cbiAgICpcbiAgICogTGVhdmUgZGlzYWJsZWQgKGRlZmF1bHQpIHdoZW4gYSBkb3duc3RyZWFtIGJ1bmRsZXIgKHdlYnBhY2ssIFZpdGUsIGV0Yy4pXG4gICAqIGhhbmRsZXMgcmVzb2x1dGlvbiDigJQgdGhvc2UgdG9vbHMgcmVzb2x2ZSAudHMgbmF0aXZlbHkgYW5kIHJld3JpdGluZ1xuICAgKiBicmVha3MgdGhlbSBiZWNhdXNlIHRoZSAuanMgZmlsZSBkb2Vzbid0IGV4aXN0IG9uIGRpc2suXG4gICAqL1xuICByZXdyaXRlVHNFeHRlbnNpb25zPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEJ1bmRsZSBwcm9qZWN0LWxvY2FsIGZpbGVzIHRoYXQgYXJlIHRyYW5zaXRpdmVseSBpbXBvcnRlZCBieSBzdGVwIGVudHJpZXMuXG4gICAqXG4gICAqIEtlZXAgdGhpcyBkaXNhYmxlZCB3aGVuIGEgZG93bnN0cmVhbSBidW5kbGVyIGNvbnN1bWVzIHRoZSBnZW5lcmF0ZWQgc3RlcFxuICAgKiBidW5kbGUgYmVjYXVzZSB0aGF0IGJ1bmRsZXIgY2FuIHJlc29sdmUgdGhlIGV4dGVybmFsaXplZCBsb2NhbCBpbXBvcnRzLlxuICAgKiBFbmFibGUgaXQgZm9yIGRpcmVjdCBydW50aW1lIGxvYWRpbmcsIHdoZXJlIE5vZGUgaW1wb3J0cyB0aGUgZ2VuZXJhdGVkIHN0ZXBcbiAgICogYnVuZGxlIGZyb20gZGlzayB3aXRob3V0IGEgbGF0ZXIgYnVuZGxpbmcgcGFzcy5cbiAgICovXG4gIGJ1bmRsZVRyYW5zaXRpdmVMb2NhbFN0ZXBEZXBlbmRlbmNpZXM/OiBib29sZWFuO1xuICAvKipcbiAgICogQWJzb2x1dGUgZmlsZSBwYXRocyBvZiBkaXNjb3ZlcmVkIHdvcmtmbG93L3N0ZXAvc2VyZGUgZW50cmllcyB3aG9zZVxuICAgKiBpbXBvcnRzIG11c3QgYmUgdHJlYXRlZCBhcyBzaWRlLWVmZmVjdGZ1bC5cbiAgICpcbiAgICogVGhlIFNXQyBjb21waWxlciB0cmFuc2Zvcm0gaW5qZWN0cyByZWdpc3RyYXRpb24gY2FsbHMgKHdvcmtmbG93IElEcyxcbiAgICogc3RlcCBJRHMsIGNsYXNzIHNlcmlhbGl6YXRpb24sIGV0Yy4pIGludG8gdGhlc2UgZmlsZXMuIFdpdGhvdXQgdGhpc1xuICAgKiBvdmVycmlkZSwgZXNidWlsZCBob25vdXJzIGBcInNpZGVFZmZlY3RzXCI6IGZhbHNlYCBmcm9tIHRoZSBwYWNrYWdlJ3NcbiAgICogYHBhY2thZ2UuanNvbmAgYW5kIHNpbGVudGx5IGRyb3BzIGJhcmUgaW1wb3J0cyBvZiB0aGVzZSBtb2R1bGVzLlxuICAgKi9cbiAgc2lkZUVmZmVjdEVudHJpZXM/OiBzdHJpbmdbXTtcbn1cblxuY29uc3QgTk9ERV9SRVNPTFZFX09QVElPTlMgPSB7XG4gIGRlcGVuZGVuY3lUeXBlOiAnY29tbW9uanMnLFxuICBtb2R1bGVzOiBbJ25vZGVfbW9kdWxlcyddLFxuICBleHBvcnRzRmllbGRzOiBbJ2V4cG9ydHMnXSxcbiAgaW1wb3J0c0ZpZWxkczogWydpbXBvcnRzJ10sXG4gIGNvbmRpdGlvbk5hbWVzOiBbJ25vZGUnLCAncmVxdWlyZSddLFxuICBkZXNjcmlwdGlvbkZpbGVzOiBbJ3BhY2thZ2UuanNvbiddLFxuICBleHRlbnNpb25zOiBbXG4gICAgJy50cycsXG4gICAgJy50c3gnLFxuICAgICcubXRzJyxcbiAgICAnLmN0cycsXG4gICAgJy5janMnLFxuICAgICcubWpzJyxcbiAgICAnLmpzJyxcbiAgICAnLmpzeCcsXG4gICAgJy5qc29uJyxcbiAgICAnLm5vZGUnLFxuICBdLFxuICBlbmZvcmNlRXh0ZW5zaW9uczogZmFsc2UsXG4gIHN5bWxpbmtzOiB0cnVlLFxuICBtYWluRmllbGRzOiBbJ21haW4nXSxcbiAgbWFpbkZpbGVzOiBbJ2luZGV4J10sXG4gIHJvb3RzOiBbXSxcbiAgZnVsbHlTcGVjaWZpZWQ6IGZhbHNlLFxuICBwcmVmZXJSZWxhdGl2ZTogZmFsc2UsXG4gIHByZWZlckFic29sdXRlOiBmYWxzZSxcbiAgcmVzdHJpY3Rpb25zOiBbXSxcbn07XG5cbmNvbnN0IE5PREVfRVNNX1JFU09MVkVfT1BUSU9OUyA9IHtcbiAgLi4uTk9ERV9SRVNPTFZFX09QVElPTlMsXG4gIGRlcGVuZGVuY3lUeXBlOiAnZXNtJyxcbiAgY29uZGl0aW9uTmFtZXM6IFsnbm9kZScsICdpbXBvcnQnXSxcbn07XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVBhdGgocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHBhdGgucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xufVxuXG50eXBlIElkTG9jYXRpb24gPSB7XG4gIGZpbGVQYXRoOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIGZvcm1hdElkTG9jYXRpb24obG9jYXRpb246IElkTG9jYXRpb24pOiBzdHJpbmcge1xuICByZXR1cm4gYCR7bG9jYXRpb24uZmlsZVBhdGh9IyR7bG9jYXRpb24ubmFtZX1gO1xufVxuXG5mdW5jdGlvbiBhc3NlcnRVbmlxdWVNYW5pZmVzdElkcyhcbiAgZW50cmllc0J5RmlsZTogV29ya2Zsb3dNYW5pZmVzdFsnc3RlcHMnXSB8IFdvcmtmbG93TWFuaWZlc3RbJ3dvcmtmbG93cyddLFxuICBpZHM6IE1hcDxzdHJpbmcsIElkTG9jYXRpb24+LFxuICBnZXRJZDogKGRhdGE6IHsgc3RlcElkOiBzdHJpbmcgfSB8IHsgd29ya2Zsb3dJZDogc3RyaW5nIH0pID0+IHN0cmluZyxcbiAgbGFiZWw6ICdzdGVwJyB8ICd3b3JrZmxvdydcbik6IHZvaWQge1xuICBjb25zdCBlbnRyaWVzQnlGaWxlTGlzdCA9IE9iamVjdC5lbnRyaWVzKGVudHJpZXNCeUZpbGUgfHwge30pIGFzIEFycmF5PFxuICAgIFtzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHsgc3RlcElkOiBzdHJpbmcgfSB8IHsgd29ya2Zsb3dJZDogc3RyaW5nIH0+XVxuICA+O1xuICBmb3IgKGNvbnN0IFtmaWxlUGF0aCwgZW50cmllc10gb2YgZW50cmllc0J5RmlsZUxpc3QpIHtcbiAgICBmb3IgKGNvbnN0IFtuYW1lLCBkYXRhXSBvZiBPYmplY3QuZW50cmllcyhlbnRyaWVzKSkge1xuICAgICAgY29uc3QgaWQgPSBnZXRJZChkYXRhKTtcbiAgICAgIGNvbnN0IGV4aXN0aW5nID0gaWRzLmdldChpZCk7XG4gICAgICBjb25zdCBjdXJyZW50ID0geyBmaWxlUGF0aCwgbmFtZSB9O1xuICAgICAgaWYgKFxuICAgICAgICBleGlzdGluZyAmJlxuICAgICAgICAoZXhpc3RpbmcuZmlsZVBhdGggIT09IGN1cnJlbnQuZmlsZVBhdGggfHxcbiAgICAgICAgICBleGlzdGluZy5uYW1lICE9PSBjdXJyZW50Lm5hbWUpXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgaWROYW1lID0gbGFiZWwgPT09ICdzdGVwJyA/ICd3b3JrZmxvdyBzdGVwIElEJyA6ICd3b3JrZmxvdyBJRCc7XG4gICAgICAgIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IGAke2xhYmVsfSBmdW5jdGlvbmA7XG4gICAgICAgIGNvbnN0IGNhcGl0YWxpemVkTGFiZWwgPSBsYWJlbCA9PT0gJ3N0ZXAnID8gJ1N0ZXAnIDogJ1dvcmtmbG93JztcbiAgICAgICAgdGhyb3cgbmV3IFdvcmtmbG93QnVpbGRFcnJvcihcbiAgICAgICAgICBgRHVwbGljYXRlICR7aWROYW1lfSBcIiR7aWR9XCIgZ2VuZXJhdGVkIGZvciAke2Zvcm1hdElkTG9jYXRpb24oZXhpc3RpbmcpfSBhbmQgJHtmb3JtYXRJZExvY2F0aW9uKGN1cnJlbnQpfS5gLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGhpbnQ6XG4gICAgICAgICAgICAgIGAke2NhcGl0YWxpemVkTGFiZWx9IElEcyBtdXN0IGJlIHVuaXF1ZSBhY3Jvc3MgYSBidWlsZC4gYCArXG4gICAgICAgICAgICAgIGBJZiB5b3Ugb3duIG9uZSBvZiB0aGUgY29sbGlkaW5nIGZpbGVzLCByZW5hbWUgdGhlICR7ZnVuY3Rpb25OYW1lfSBvciBleHBvcnQgYCArXG4gICAgICAgICAgICAgIGB0aGUgcGFja2FnZSBmaWxlIHRocm91Z2ggYSB1bmlxdWUgcGFja2FnZSBzdWJwYXRoLiBJZiB0aGUgY29sbGlzaW9uIGlzIGluIGEgYCArXG4gICAgICAgICAgICAgIGB0cmFuc2l0aXZlIGRlcGVuZGVuY3kgeW91IGRvbid0IGNvbnRyb2wsIGZpbGUgYW4gaXNzdWUgd2l0aCB0aGUgdXBzdHJlYW0gYCArXG4gICAgICAgICAgICAgIGBwYWNrYWdlIG9yIHBpbiB0byBhIG5vbi1jb2xsaWRpbmcgdmVyc2lvbi5gLFxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlkcy5zZXQoaWQsIGN1cnJlbnQpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBtZXJnZVdvcmtmbG93TWFuaWZlc3QoXG4gIHRhcmdldDogV29ya2Zsb3dNYW5pZmVzdCxcbiAgaW5jb21pbmc6IFdvcmtmbG93TWFuaWZlc3QsXG4gIHN0ZXBJZHM6IE1hcDxzdHJpbmcsIElkTG9jYXRpb24+LFxuICB3b3JrZmxvd0lkczogTWFwPHN0cmluZywgSWRMb2NhdGlvbj5cbik6IHZvaWQge1xuICBhc3NlcnRVbmlxdWVNYW5pZmVzdElkcyhcbiAgICBpbmNvbWluZy5zdGVwcyxcbiAgICBzdGVwSWRzLFxuICAgIChkYXRhKSA9PiAoZGF0YSBhcyB7IHN0ZXBJZDogc3RyaW5nIH0pLnN0ZXBJZCxcbiAgICAnc3RlcCdcbiAgKTtcbiAgYXNzZXJ0VW5pcXVlTWFuaWZlc3RJZHMoXG4gICAgaW5jb21pbmcud29ya2Zsb3dzLFxuICAgIHdvcmtmbG93SWRzLFxuICAgIChkYXRhKSA9PiAoZGF0YSBhcyB7IHdvcmtmbG93SWQ6IHN0cmluZyB9KS53b3JrZmxvd0lkLFxuICAgICd3b3JrZmxvdydcbiAgKTtcblxuICB0YXJnZXQud29ya2Zsb3dzID0gT2JqZWN0LmFzc2lnbih0YXJnZXQud29ya2Zsb3dzIHx8IHt9LCBpbmNvbWluZy53b3JrZmxvd3MpO1xuICB0YXJnZXQuc3RlcHMgPSBPYmplY3QuYXNzaWduKHRhcmdldC5zdGVwcyB8fCB7fSwgaW5jb21pbmcuc3RlcHMpO1xuICB0YXJnZXQuY2xhc3NlcyA9IE9iamVjdC5hc3NpZ24odGFyZ2V0LmNsYXNzZXMgfHwge30sIGluY29taW5nLmNsYXNzZXMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3djUGx1Z2luKG9wdGlvbnM6IFN3Y1BsdWdpbk9wdGlvbnMpOiBQbHVnaW4ge1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICdzd2Mtd29ya2Zsb3ctcGx1Z2luJyxcbiAgICBzZXR1cChidWlsZCkge1xuICAgICAgbGV0IHN0ZXBJZHNGb3JDdXJyZW50QnVpbGQgPSBuZXcgTWFwPHN0cmluZywgSWRMb2NhdGlvbj4oKTtcbiAgICAgIGxldCB3b3JrZmxvd0lkc0ZvckN1cnJlbnRCdWlsZCA9IG5ldyBNYXA8c3RyaW5nLCBJZExvY2F0aW9uPigpO1xuXG4gICAgICBidWlsZC5vblN0YXJ0KCgpID0+IHtcbiAgICAgICAgc3RlcElkc0ZvckN1cnJlbnRCdWlsZCA9IG5ldyBNYXAoKTtcbiAgICAgICAgd29ya2Zsb3dJZHNGb3JDdXJyZW50QnVpbGQgPSBuZXcgTWFwKCk7XG4gICAgICB9KTtcblxuICAgICAgLy8gZXZlcnl0aGluZyBpcyBleHRlcm5hbCB1bmxlc3MgZXhwbGljaXRseSBjb25maWd1cmVkXG4gICAgICAvLyB0byBiZSBidW5kbGVkXG4gICAgICBjb25zdCBjanNSZXNvbHZlciA9IHByb21pc2lmeShcbiAgICAgICAgZW5oYW5jZWRSZXNvbHZlT3JpZy5jcmVhdGUoTk9ERV9SRVNPTFZFX09QVElPTlMpXG4gICAgICApO1xuICAgICAgY29uc3QgZXNtUmVzb2x2ZXIgPSBwcm9taXNpZnkoXG4gICAgICAgIGVuaGFuY2VkUmVzb2x2ZU9yaWcuY3JlYXRlKE5PREVfRVNNX1JFU09MVkVfT1BUSU9OUylcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IGVuaGFuY2VkUmVzb2x2ZSA9IGFzeW5jIChjb250ZXh0OiBzdHJpbmcsIHBhdGg6IHN0cmluZykgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBhd2FpdCBlc21SZXNvbHZlcihjb250ZXh0LCBwYXRoKTtcbiAgICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICAgIHJldHVybiBjanNSZXNvbHZlcihjb250ZXh0LCBwYXRoKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgLy8gUHJlLWNvbXB1dGUgdGhlIG5vcm1hbGl6ZWQgc2lkZS1lZmZlY3QgZW50cmllcyBzZXQgZm9yIE8oMSkgbG9va3Vwcy5cbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRTaWRlRWZmZWN0RW50cmllcyA9IG5ldyBTZXQoXG4gICAgICAgIG9wdGlvbnMuc2lkZUVmZmVjdEVudHJpZXM/Lm1hcCgoZSkgPT4gZS5yZXBsYWNlKC9cXFxcL2csICcvJykpXG4gICAgICApO1xuXG4gICAgICBidWlsZC5vblJlc29sdmUoeyBmaWx0ZXI6IC8uKi8gfSwgYXN5bmMgKGFyZ3MpID0+IHtcbiAgICAgICAgaWYgKGFyZ3MucGx1Z2luRGF0YT8uc2tpcFN3Y1BsdWdpbikgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICFvcHRpb25zLmVudHJpZXNUb0J1bmRsZSAmJlxuICAgICAgICAgIG5vcm1hbGl6ZWRTaWRlRWZmZWN0RW50cmllcy5zaXplID09PSAwXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gV2hlbiBvbmx5IHNpZGVFZmZlY3RFbnRyaWVzIGlzIHNldCAobm8gZW50cmllc1RvQnVuZGxlKSwgd2Ugb25seVxuICAgICAgICAvLyBuZWVkIHRvIG92ZXJyaWRlIHNpZGVFZmZlY3RzIGZvciB0b3AtbGV2ZWwgYmFyZSBpbXBvcnRzIOKAlCB0eXBpY2FsbHlcbiAgICAgICAgLy8gZnJvbSB0aGUgdmlydHVhbCBlbnRyeS4gU2tpcCByZXNvbHV0aW9uIGZvciB0cmFuc2l0aXZlIGltcG9ydHNcbiAgICAgICAgLy8gKGR5bmFtaWMgaW1wb3J0cywgcmVxdWlyZXMsIGV0Yy4pIHRvIGF2b2lkIHVubmVjZXNzYXJ5IG92ZXJoZWFkLlxuICAgICAgICBpZiAoIW9wdGlvbnMuZW50cmllc1RvQnVuZGxlICYmIGFyZ3Mua2luZCAhPT0gJ2ltcG9ydC1zdGF0ZW1lbnQnKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHNwZWNpZmllciA9IGFyZ3MucGF0aDtcbiAgICAgICAgICBjb25zdCBzcGVjaWZpZXJJc1BhdGggPVxuICAgICAgICAgICAgc3BlY2lmaWVyLnN0YXJ0c1dpdGgoJy4nKSB8fCBzcGVjaWZpZXIuc3RhcnRzV2l0aCgnLycpO1xuXG4gICAgICAgICAgbGV0IHJlc29sdmVkUGF0aDogc3RyaW5nIHwgZmFsc2UgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgLy8gUGF0aC1zdHlsZSBzcGVjaWZpZXJzICguL2ZvbywgLi4vZm9vLCAvYWJzL3BhdGgpIGV4dGVybmFsaXplIGFzXG4gICAgICAgICAgLy8gcmVsYXRpdmUgcGF0aHMgZnJvbSBgb3V0ZGlyYC4gQmFyZSBzcGVjaWZpZXJzIChucG0gcGFja2FnZXMpXG4gICAgICAgICAgLy8gZXh0ZXJuYWxpemUgYXMtaXMgc28gTm9kZSBjYW4gcmVzb2x2ZSB0aGVtIGF0IHJ1bnRpbWUuXG4gICAgICAgICAgY29uc3Qgc2hvdWxkTWFrZVJlbGF0aXZlID0gc3BlY2lmaWVySXNQYXRoO1xuXG4gICAgICAgICAgaWYgKHNwZWNpZmllcklzUGF0aCkge1xuICAgICAgICAgICAgcmVzb2x2ZWRQYXRoID0gYXdhaXQgZW5oYW5jZWRSZXNvbHZlKGFyZ3MucmVzb2x2ZURpciwgc3BlY2lmaWVyKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gUmVzb2x2ZSBmcm9tIHByb2plY3Qgcm9vdCBzbyBuZXN0ZWQgZGVwcyBhcmVuJ3QgZXh0ZXJuYWxpemVkXG4gICAgICAgICAgICByZXNvbHZlZFBhdGggPSBhd2FpdCBlbmhhbmNlZFJlc29sdmUoXG4gICAgICAgICAgICAgIGJ1aWxkLmluaXRpYWxPcHRpb25zLmFic1dvcmtpbmdEaXIgfHwgcHJvY2Vzcy5jd2QoKSxcbiAgICAgICAgICAgICAgc3BlY2lmaWVyXG4gICAgICAgICAgICApLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7IC8vIHN3YWxsb3cgc28gZXNidWlsZCBmYWxsYmFjayBiZWxvdyBjYW4gdHJ5XG5cbiAgICAgICAgICAgIC8vIEZhbGwgYmFjayB0byBlc2J1aWxkIGZvciBhbGlhc2VzL3RzY29uZmlnIHBhdGhzLlxuICAgICAgICAgICAgLy9cbiAgICAgICAgICAgIC8vIElmIHRoZSBzcGVjaWZpZXIgcmVzb2x2ZXMgdG8gYSBwcm9qZWN0LWxvY2FsIGZpbGUgdmlhIGFuXG4gICAgICAgICAgICAvLyBhbGlhcy9wYXRoIG1hcHBpbmcgKGUuZy4gdHNjb25maWcgYHBhdGhzYCwgZXNidWlsZCBgYWxpYXNgLFxuICAgICAgICAgICAgLy8gc2VsZi1yZWZlcmVuY2luZyBwYWNrYWdlIG5hbWVzIGxpa2UgYEBteS1wa2cvbGliL2Zvb2ApLCB3ZVxuICAgICAgICAgICAgLy8gYnVuZGxlIGl0IGlubGluZSByYXRoZXIgdGhhbiBleHRlcm5hbGl6aW5nLlxuICAgICAgICAgICAgLy9cbiAgICAgICAgICAgIC8vIEV4dGVybmFsaXppbmcgc3VjaCBmaWxlcyBpcyB1bnNhZmU6IHdlJ2QgZW1pdCBhIHJlbGF0aXZlXG4gICAgICAgICAgICAvLyBpbXBvcnQgdG8gdGhlIG9yaWdpbmFsIHNvdXJjZSBvbiBkaXNrLCBidXQgdGhhdCBzb3VyY2UgY2FuXG4gICAgICAgICAgICAvLyBjb250YWluIGZ1cnRoZXIgYWxpYXMgaW1wb3J0cy4gQXQgcnVudGltZSwgTm9kZSdzIEVTTSBsb2FkZXJcbiAgICAgICAgICAgIC8vIGRvZXNuJ3Qga25vdyBhYm91dCB0c2NvbmZpZyBwYXRocyBvciBidWlsZC10aW1lIGFsaWFzZXMsIHNvXG4gICAgICAgICAgICAvLyB0aG9zZSB0cmFuc2l0aXZlIGltcG9ydHMgdGhyb3cgYEVSUl9NT0RVTEVfTk9UX0ZPVU5EYCAvXG4gICAgICAgICAgICAvLyBgUGFja2FnZSBzdWJwYXRoIC4uLiBpcyBub3QgZGVmaW5lZCBieSBcImV4cG9ydHNcImAuXG4gICAgICAgICAgICAvL1xuICAgICAgICAgICAgLy8gQnVuZGxpbmcgaW5saW5lIGVuc3VyZXMgYWxpYXMtYmFzZWQgaW1wb3J0cyBhcmUgcmVzb2x2ZWQgYXRcbiAgICAgICAgICAgIC8vIGJ1aWxkIHRpbWUgKHdoZXJlIHRoZSBhbGlhcyBtYXAgaXMga25vd24pIGFuZCB0aGUgcnVudGltZVxuICAgICAgICAgICAgLy8gbmV2ZXIgc2VlcyBhbiB1bnJlc29sdmFibGUgc3BlY2lmaWVyLlxuICAgICAgICAgICAgaWYgKCFyZXNvbHZlZFBhdGgpIHtcbiAgICAgICAgICAgICAgY29uc3QgZXNidWlsZFJlc3VsdCA9IGF3YWl0IGJ1aWxkLnJlc29sdmUoc3BlY2lmaWVyLCB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZURpcjogYXJncy5yZXNvbHZlRGlyLFxuICAgICAgICAgICAgICAgIGtpbmQ6IGFyZ3Mua2luZCxcbiAgICAgICAgICAgICAgICBwbHVnaW5EYXRhOiB7IHNraXBTd2NQbHVnaW46IHRydWUgfSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGNvbnN0IGRpZFJlc29sdmUgPVxuICAgICAgICAgICAgICAgICEhZXNidWlsZFJlc3VsdC5wYXRoICYmICFlc2J1aWxkUmVzdWx0LmVycm9ycy5sZW5ndGg7XG4gICAgICAgICAgICAgIGNvbnN0IGlzUHJvamVjdExvY2FsRmlsZSA9XG4gICAgICAgICAgICAgICAgZGlkUmVzb2x2ZSAmJlxuICAgICAgICAgICAgICAgICFlc2J1aWxkUmVzdWx0LmV4dGVybmFsICYmXG4gICAgICAgICAgICAgICAgIWVzYnVpbGRSZXN1bHQucGF0aFxuICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcXFwvZywgJy8nKVxuICAgICAgICAgICAgICAgICAgLmluY2x1ZGVzKCcvbm9kZV9tb2R1bGVzLycpO1xuICAgICAgICAgICAgICBpZiAoaXNQcm9qZWN0TG9jYWxGaWxlKSB7XG4gICAgICAgICAgICAgICAgLy8gTGV0IGVzYnVpbGQgYnVuZGxlIHRoaXMgYWxpYXNlZCBwcm9qZWN0LWxvY2FsIGZpbGUgaW5saW5lXG4gICAgICAgICAgICAgICAgLy8gKHJldHVybiBudWxsIHRvIGRlZmVyIHRvIGVzYnVpbGQncyBub3JtYWwgcGlwZWxpbmUpLiBUaGVcbiAgICAgICAgICAgICAgICAvLyBTV0MgYG9uTG9hZGAgaGFuZGxlciB3aWxsIHN0aWxsIHByb2Nlc3MgaXQuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5lbnRyaWVzVG9CdW5kbGUgJiZcbiAgICAgICAgICAgICAgICBlc2J1aWxkUmVzdWx0LnBhdGg/LmVuZHNXaXRoKCcubm9kZScpXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICBleHRlcm5hbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIHBhdGg6IHNwZWNpZmllcixcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFyZXNvbHZlZFBhdGgpIHJldHVybiBudWxsO1xuXG4gICAgICAgICAgLy8gTm9ybWFsaXplIHRvIGZvcndhcmQgc2xhc2hlcyBmb3IgY3Jvc3MtcGxhdGZvcm0gY29tcGFyaXNvblxuICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRSZXNvbHZlZFBhdGggPSBub3JtYWxpemVQYXRoKHJlc29sdmVkUGF0aCk7XG4gICAgICAgICAgY29uc3Qgd29ya2luZ0RpciA9XG4gICAgICAgICAgICBidWlsZC5pbml0aWFsT3B0aW9ucy5hYnNXb3JraW5nRGlyIHx8IHByb2Nlc3MuY3dkKCk7XG4gICAgICAgICAgY29uc3QgcHJvamVjdFJvb3QgPSBvcHRpb25zLnByb2plY3RSb290IHx8IHdvcmtpbmdEaXI7XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBvcHRpb25zLmVudHJpZXNUb0J1bmRsZSAmJlxuICAgICAgICAgICAgbm9ybWFsaXplZFJlc29sdmVkUGF0aC5lbmRzV2l0aCgnLm5vZGUnKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgZXh0ZXJuYWw6IHRydWUsXG4gICAgICAgICAgICAgIHBhdGg6IHNwZWNpZmllcixcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBtb2R1bGUgaXMgYSBkaXNjb3ZlcmVkIGVudHJ5IHdob3NlIFNXQy10cmFuc2Zvcm1lZFxuICAgICAgICAgIC8vIGNvZGUgY29udGFpbnMgc2lkZSBlZmZlY3RzICh3b3JrZmxvdy9zdGVwL2NsYXNzIHJlZ2lzdHJhdGlvbikuXG4gICAgICAgICAgLy8gT3ZlcnJpZGUgdGhlIHBhY2thZ2UuanNvbiBcInNpZGVFZmZlY3RzXCI6IGZhbHNlIHNvIGVzYnVpbGQgZG9lcyBub3RcbiAgICAgICAgICAvLyBkcm9wIGJhcmUgaW1wb3J0cyBvZiB0aGVzZSBtb2R1bGVzLlxuICAgICAgICAgIGNvbnN0IGhhc1NpZGVFZmZlY3RzID0gbm9ybWFsaXplZFNpZGVFZmZlY3RFbnRyaWVzLmhhcyhcbiAgICAgICAgICAgIG5vcm1hbGl6ZWRSZXNvbHZlZFBhdGhcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKG9wdGlvbnMuZW50cmllc1RvQnVuZGxlKSB7XG4gICAgICAgICAgICBsZXQgc2hvdWxkQnVuZGxlID0gZmFsc2U7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGVudHJ5VG9CdW5kbGUgb2Ygb3B0aW9ucy5lbnRyaWVzVG9CdW5kbGUpIHtcbiAgICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZEVudHJ5ID0gZW50cnlUb0J1bmRsZS5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG5cbiAgICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWRSZXNvbHZlZFBhdGggPT09IG5vcm1hbGl6ZWRFbnRyeSkge1xuICAgICAgICAgICAgICAgIHNob3VsZEJ1bmRsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAvLyBpZiB0aGUgY3VycmVudCBlbnRyeSBpbXBvcnRzIGEgY2hpbGQgdGhhdCBuZWVkc1xuICAgICAgICAgICAgICAvLyB0byBiZSBidW5kbGVkIHRoZW4gaXQgbmVlZHMgdG8gYWxzbyBiZSBidW5kbGVkIHNvXG4gICAgICAgICAgICAgIC8vIHRoYXQgdGhlIGNoaWxkIGNhbiBoYXZlIG91ciB0cmFuc2Zvcm0gYXBwbGllZFxuICAgICAgICAgICAgICBpZiAocGFyZW50SGFzQ2hpbGQobm9ybWFsaXplZFJlc29sdmVkUGF0aCwgbm9ybWFsaXplZEVudHJ5KSkge1xuICAgICAgICAgICAgICAgIHNob3VsZEJ1bmRsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAvLyBCdW5kbGUgcHJvamVjdC1sb2NhbCBzb3VyY2UgZmlsZXMgdGhhdCBhcmUgaW1wb3J0ZWQgYnkgYVxuICAgICAgICAgICAgICAvLyBzdGVwL3NlcmRlIGVudHJ5IHNvIGRpcmVjdCBydW50aW1lIGxvYWRlcnMgZG8gbm90IHNlZSByYXcgVFNcbiAgICAgICAgICAgICAgLy8gZXh0ZW5zaW9ubGVzcyBpbXBvcnRzLiBLZWVwIHBhY2thZ2UgZGVwZW5kZW5jaWVzIGV4dGVybmFsXG4gICAgICAgICAgICAgIC8vIHVubGVzcyB0aGV5IGFyZSB0aGVtc2VsdmVzIGluIGVudHJpZXNUb0J1bmRsZSBvciBhcmUgcGFyZW50c1xuICAgICAgICAgICAgICAvLyBvZiBhIGRpc2NvdmVyZWQgd29ya2Zsb3cvc3RlcC9zZXJkZSBmaWxlIHZpYSB0aGUgY2hlY2sgYWJvdmUuXG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBvcHRpb25zLmJ1bmRsZVRyYW5zaXRpdmVMb2NhbFN0ZXBEZXBlbmRlbmNpZXMgJiZcbiAgICAgICAgICAgICAgICBpc1Byb2plY3RMb2NhbEZpbGUobm9ybWFsaXplZFJlc29sdmVkUGF0aCwgcHJvamVjdFJvb3QpICYmXG4gICAgICAgICAgICAgICAgcGFyZW50SGFzQ2hpbGQobm9ybWFsaXplZEVudHJ5LCBub3JtYWxpemVkUmVzb2x2ZWRQYXRoKVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBzaG91bGRCdW5kbGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzaG91bGRCdW5kbGUpIHtcbiAgICAgICAgICAgICAgLy8gTGV0IGVzYnVpbGQgYnVuZGxlIHRoaXMgZW50cnksIGJ1dCBvdmVycmlkZSBzaWRlRWZmZWN0cyBpZiBuZWVkZWQuXG4gICAgICAgICAgICAgIC8vIFdlIG11c3QgcmV0dXJuIHRoZSByZXNvbHZlZCBgcGF0aGAgYWxvbmdzaWRlIGBzaWRlRWZmZWN0c2AgYmVjYXVzZVxuICAgICAgICAgICAgICAvLyByZXR1cm5pbmcgb25seSBgeyBzaWRlRWZmZWN0czogdHJ1ZSB9YCB3aXRob3V0IGEgcGF0aCBjYXVzZXMgZXNidWlsZFxuICAgICAgICAgICAgICAvLyB0byBmYWxsIHRocm91Z2ggdG8gaXRzIG93biByZXNvbHZlciwgd2hpY2ggcmUtcmVhZHMgdGhlIHBhY2thZ2UuanNvblxuICAgICAgICAgICAgICAvLyBhbmQgYXBwbGllcyBgXCJzaWRlRWZmZWN0c1wiOiBmYWxzZWAgZnJvbSB0aGVyZS5cbiAgICAgICAgICAgICAgcmV0dXJuIGhhc1NpZGVFZmZlY3RzXG4gICAgICAgICAgICAgICAgPyB7IHBhdGg6IHJlc29sdmVkUGF0aCwgc2lkZUVmZmVjdHM6IHRydWUgfVxuICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGV4dGVybmFsUGF0aDogc3RyaW5nO1xuICAgICAgICAgICAgaWYgKHNob3VsZE1ha2VSZWxhdGl2ZSkge1xuICAgICAgICAgICAgICAvLyBXaGVuIHRoZSByZXNvbHZlZCBmaWxlIGxpdmVzIGluc2lkZSBub2RlX21vZHVsZXMsIGxldFxuICAgICAgICAgICAgICAvLyBlc2J1aWxkIGJ1bmRsZSBpdCByYXRoZXIgdGhhbiBleHRlcm5hbGl6aW5nIHdpdGggYSBkZWVwbHlcbiAgICAgICAgICAgICAgLy8gbmVzdGVkIHJlbGF0aXZlIHBhdGguIERvd25zdHJlYW0gYnVuZGxlcnMgKFJvbGx1cC9WaXRlKVxuICAgICAgICAgICAgICAvLyBjYW4ndCByZXdyaXRlIG9wYXF1ZSBgX19yZXF1aXJlKClgIGNhbGxzIGluIENKUyBzaGltcywgc29cbiAgICAgICAgICAgICAgLy8gcmVsYXRpdmUgcGF0aHMgY29tcHV0ZWQgZm9yIGBvdXRkaXJgIGJyZWFrIG9uY2UgdGhlIG91dHB1dFxuICAgICAgICAgICAgICAvLyBpcyByZWJ1bmRsZWQgdG8gYSBkaWZmZXJlbnQgZGlyZWN0b3J5LlxuICAgICAgICAgICAgICBpZiAobm9ybWFsaXplZFJlc29sdmVkUGF0aC5pbmNsdWRlcygnL25vZGVfbW9kdWxlcy8nKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsOyAvLyBsZXQgZXNidWlsZCBidW5kbGUgaXRcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGV4dGVybmFsUGF0aCA9IHJlbGF0aXZlKFxuICAgICAgICAgICAgICAgIG9wdGlvbnMub3V0ZGlyIHx8IHByb2Nlc3MuY3dkKCksXG4gICAgICAgICAgICAgICAgcmVzb2x2ZWRQYXRoXG4gICAgICAgICAgICAgICkucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnJld3JpdGVUc0V4dGVuc2lvbnMpIHtcbiAgICAgICAgICAgICAgICAvLyBSZXdyaXRlIFR5cGVTY3JpcHQgZXh0ZW5zaW9ucyB0byB0aGVpciBKUyBlcXVpdmFsZW50cyBzbyB0aGVcbiAgICAgICAgICAgICAgICAvLyBleHRlcm5hbGl6ZWQgaW1wb3J0IGlzIGxvYWRhYmxlIGJ5IE5vZGUncyBuYXRpdmUgRVNNIGxvYWRlci5cbiAgICAgICAgICAgICAgICBleHRlcm5hbFBhdGggPSBleHRlcm5hbFBhdGhcbiAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXC50c3g/JC8sICcuanMnKVxuICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcLm10cyQvLCAnLm1qcycpXG4gICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFwuY3RzJC8sICcuY2pzJyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGV4dGVybmFsUGF0aCA9IHNwZWNpZmllcjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgZXh0ZXJuYWw6IHRydWUsXG4gICAgICAgICAgICAgIHBhdGg6IGV4dGVybmFsUGF0aCxcbiAgICAgICAgICAgICAgc2lkZUVmZmVjdHM6IGhhc1NpZGVFZmZlY3RzIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gTm8gZW50cmllc1RvQnVuZGxlIOKAlCBvbmx5IG92ZXJyaWRlIHNpZGVFZmZlY3RzIHdoZW4gbmVlZGVkLlxuICAgICAgICAgIC8vIFdlIG11c3QgcmV0dXJuIHRoZSByZXNvbHZlZCBgcGF0aGAgYWxvbmdzaWRlIGBzaWRlRWZmZWN0c2AgYmVjYXVzZVxuICAgICAgICAgIC8vIHJldHVybmluZyBvbmx5IGB7IHNpZGVFZmZlY3RzOiB0cnVlIH1gIHdpdGhvdXQgYSBwYXRoIGNhdXNlcyBlc2J1aWxkXG4gICAgICAgICAgLy8gdG8gZmFsbCB0aHJvdWdoIHRvIGl0cyBvd24gcmVzb2x2ZXIsIHdoaWNoIHJlLXJlYWRzIHRoZSBwYWNrYWdlLmpzb25cbiAgICAgICAgICAvLyBhbmQgYXBwbGllcyBgXCJzaWRlRWZmZWN0c1wiOiBmYWxzZWAgZnJvbSB0aGVyZS5cbiAgICAgICAgICByZXR1cm4gaGFzU2lkZUVmZmVjdHNcbiAgICAgICAgICAgID8geyBwYXRoOiByZXNvbHZlZFBhdGgsIHNpZGVFZmZlY3RzOiB0cnVlIH1cbiAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgfSBjYXRjaCAoXykge31cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9KTtcblxuICAgICAgLy8gSGFuZGxlIFR5cGVTY3JpcHQgYW5kIEphdmFTY3JpcHQgZmlsZXNcbiAgICAgIGJ1aWxkLm9uTG9hZCh7IGZpbHRlcjoganNUc1JlZ2V4IH0sIGFzeW5jIChhcmdzKSA9PiB7XG4gICAgICAgIC8vIERldGVybWluZSBpZiB0aGlzIGlzIGEgVHlwZVNjcmlwdCBmaWxlXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBsb2FkZXIgYmFzZWQgb24gdGhlIG91dHB1dFxuICAgICAgICAgIGxldCBsb2FkZXI6ICdqcycgfCAnanN4JyB8ICd0c3gnID0gJ2pzJztcbiAgICAgICAgICBpZiAoYXJncy5wYXRoLmVuZHNXaXRoKCcuanN4JykpIHtcbiAgICAgICAgICAgIGxvYWRlciA9ICdqc3gnO1xuICAgICAgICAgIH0gZWxzZSBpZiAoYXJncy5wYXRoLmVuZHNXaXRoKCcudHN4JykpIHtcbiAgICAgICAgICAgIGxvYWRlciA9ICd0c3gnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBzb3VyY2UgPSBhd2FpdCByZWFkRmlsZShhcmdzLnBhdGgsICd1dGY4Jyk7XG4gICAgICAgICAgY29uc3Qgbm9ybWFsaXplZFNvdXJjZSA9IHNvdXJjZVxuICAgICAgICAgICAgLnJlcGxhY2UoL3JlcXVpcmVcXChcXHMqKFsnXCJdKXNlcnZlci1vbmx5XFwxXFxzKlxcKS9nLCAndm9pZCAwJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC9yZXF1aXJlXFwoXFxzKihbJ1wiXSljbGllbnQtb25seVxcMVxccypcXCkvZywgJ3ZvaWQgMCcpO1xuXG4gICAgICAgICAgLy8gQ2FsY3VsYXRlIHJlbGF0aXZlIHBhdGggZm9yIFNXQyBwbHVnaW5cbiAgICAgICAgICAvLyBUaGUgZmlsZW5hbWUgcGFyYW1ldGVyIGlzIHVzZWQgdG8gZ2VuZXJhdGUgd29ya2Zsb3dJZC9zdGVwSWQsIHNvIGl0IG11c3QgYmUgcmVsYXRpdmVcbiAgICAgICAgICBjb25zdCB3b3JraW5nRGlyID1cbiAgICAgICAgICAgIGJ1aWxkLmluaXRpYWxPcHRpb25zLmFic1dvcmtpbmdEaXIgfHwgcHJvY2Vzcy5jd2QoKTtcbiAgICAgICAgICBjb25zdCBwcm9qZWN0Um9vdCA9IG9wdGlvbnMucHJvamVjdFJvb3QgfHwgd29ya2luZ0RpcjtcbiAgICAgICAgICAvLyBOb3JtYWxpemUgcGF0aHM6IGNvbnZlcnQgYmFja3NsYXNoZXMgdG8gZm9yd2FyZCBzbGFzaGVzIGFuZCByZW1vdmUgdHJhaWxpbmcgc2xhc2hlc1xuICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRXb3JraW5nRGlyID0gd29ya2luZ0RpclxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcXFwvZywgJy8nKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcLyQvLCAnJyk7XG4gICAgICAgICAgY29uc3Qgbm9ybWFsaXplZFBhdGggPSBhcmdzLnBhdGgucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuXG4gICAgICAgICAgLy8gV2luZG93cyBmaXg6IEFsd2F5cyBkbyBjYXNlLWluc2Vuc2l0aXZlIHBhdGggY29tcGFyaXNvbiBhcyB0aGUgUFJJTUFSWSBsb2dpY1xuICAgICAgICAgIC8vIHRvIHdvcmsgYXJvdW5kIG5vZGU6cGF0aC5yZWxhdGl2ZSgpIG5vdCByZWNvZ25pemluZyBwYXRocyB3aXRoIGRpZmZlcmVudCBkcml2ZVxuICAgICAgICAgIC8vIGxldHRlciBjYXNpbmcgKGUuZy4sIEQ6IHZzIGQ6KSBhcyBiZWluZyBpbiB0aGUgc2FtZSB0cmVlXG4gICAgICAgICAgY29uc3QgbG93ZXJXZCA9IG5vcm1hbGl6ZWRXb3JraW5nRGlyLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgY29uc3QgbG93ZXJQYXRoID0gbm9ybWFsaXplZFBhdGgudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICAgIGxldCByZWxhdGl2ZUZpbGVwYXRoOiBzdHJpbmc7XG4gICAgICAgICAgaWYgKGxvd2VyUGF0aC5zdGFydHNXaXRoKGxvd2VyV2QgKyAnLycpKSB7XG4gICAgICAgICAgICAvLyBGaWxlIGlzIHVuZGVyIHdvcmtpbmcgZGlyZWN0b3J5IC0gbWFudWFsbHkgY2FsY3VsYXRlIHJlbGF0aXZlIHBhdGhcbiAgICAgICAgICAgIC8vIFRoaXMgZW5zdXJlcyB3ZSBnZXQgYSByZWxhdGl2ZSBwYXRoIGV2ZW4gd2l0aCBkcml2ZSBsZXR0ZXIgY2FzaW5nIGlzc3Vlc1xuICAgICAgICAgICAgcmVsYXRpdmVGaWxlcGF0aCA9IG5vcm1hbGl6ZWRQYXRoLnN1YnN0cmluZyhcbiAgICAgICAgICAgICAgbm9ybWFsaXplZFdvcmtpbmdEaXIubGVuZ3RoICsgMVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGxvd2VyUGF0aCA9PT0gbG93ZXJXZCkge1xuICAgICAgICAgICAgLy8gRmlsZSBJUyB0aGUgd29ya2luZyBkaXJlY3RvcnlcbiAgICAgICAgICAgIHJlbGF0aXZlRmlsZXBhdGggPSAnLic7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEZpbGUgaXMgb3V0c2lkZSB3b3JraW5nIGRpcmVjdG9yeSAtIHVzZSByZWxhdGl2ZSgpIGFuZCBzdHJpcCAuLi8gcHJlZml4ZXMgaWYgbmVlZGVkXG4gICAgICAgICAgICByZWxhdGl2ZUZpbGVwYXRoID0gcmVsYXRpdmUoXG4gICAgICAgICAgICAgIG5vcm1hbGl6ZWRXb3JraW5nRGlyLFxuICAgICAgICAgICAgICBub3JtYWxpemVkUGF0aFxuICAgICAgICAgICAgKS5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG5cbiAgICAgICAgICAgIC8vIEhhbmRsZSBmaWxlcyBkaXNjb3ZlcmVkIG91dHNpZGUgdGhlIHdvcmtpbmcgZGlyZWN0b3J5XG4gICAgICAgICAgICAvLyBUaGVzZSBjb21lIGJhY2sgYXMgLi4vcGF0aC90by9maWxlLCBidXQgd2Ugd2FudCBqdXN0IHBhdGgvdG8vZmlsZVxuICAgICAgICAgICAgaWYgKHJlbGF0aXZlRmlsZXBhdGguc3RhcnRzV2l0aCgnLi4vJykpIHtcbiAgICAgICAgICAgICAgY29uc3QgYWxpYXNlZFJlbGF0aXZlUGF0aCA9XG4gICAgICAgICAgICAgICAgYXdhaXQgcmVzb2x2ZVdvcmtmbG93QWxpYXNSZWxhdGl2ZVBhdGgoYXJncy5wYXRoLCB3b3JraW5nRGlyKTtcbiAgICAgICAgICAgICAgaWYgKGFsaWFzZWRSZWxhdGl2ZVBhdGgpIHtcbiAgICAgICAgICAgICAgICByZWxhdGl2ZUZpbGVwYXRoID0gYWxpYXNlZFJlbGF0aXZlUGF0aDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZWxhdGl2ZUZpbGVwYXRoID0gcmVsYXRpdmVGaWxlcGF0aFxuICAgICAgICAgICAgICAgICAgLnNwbGl0KCcvJylcbiAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKHBhcnQpID0+IHBhcnQgIT09ICcuLicpXG4gICAgICAgICAgICAgICAgICAuam9pbignLycpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gRmluYWwgc2FmZXR5IGNoZWNrIC0gZW5zdXJlIHdlIG5ldmVyIHBhc3MgYW4gYWJzb2x1dGUgcGF0aCB0byBTV0NcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICByZWxhdGl2ZUZpbGVwYXRoLmluY2x1ZGVzKCc6JykgfHxcbiAgICAgICAgICAgIHJlbGF0aXZlRmlsZXBhdGguc3RhcnRzV2l0aCgnLycpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4sIGJ1dCBpZiBpdCBkb2VzLCB1c2UganVzdCB0aGUgZmlsZW5hbWUgYXMgbGFzdCByZXNvcnRcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIGBbRVJST1JdIHJlbGF0aXZlRmlsZXBhdGggaXMgc3RpbGwgYWJzb2x1dGU6ICR7cmVsYXRpdmVGaWxlcGF0aH1gXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmVsYXRpdmVGaWxlcGF0aCA9IG5vcm1hbGl6ZWRQYXRoLnNwbGl0KCcvJykucG9wKCkgfHwgJ3Vua25vd24udHMnO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHsgY29kZTogdHJhbnNmb3JtZWRDb2RlLCB3b3JrZmxvd01hbmlmZXN0IH0gPVxuICAgICAgICAgICAgYXdhaXQgYXBwbHlTd2NUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgIHJlbGF0aXZlRmlsZXBhdGgsXG4gICAgICAgICAgICAgIG5vcm1hbGl6ZWRTb3VyY2UsXG4gICAgICAgICAgICAgIG9wdGlvbnMubW9kZSxcbiAgICAgICAgICAgICAgYXJncy5wYXRoLCAvLyBQYXNzIGFic29sdXRlIHBhdGggZm9yIG1vZHVsZSBzcGVjaWZpZXIgcmVzb2x1dGlvblxuICAgICAgICAgICAgICBwcm9qZWN0Um9vdFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIGlmICghb3B0aW9ucy53b3JrZmxvd01hbmlmZXN0KSB7XG4gICAgICAgICAgICBvcHRpb25zLndvcmtmbG93TWFuaWZlc3QgPSB7fTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXJnZVdvcmtmbG93TWFuaWZlc3QoXG4gICAgICAgICAgICBvcHRpb25zLndvcmtmbG93TWFuaWZlc3QsXG4gICAgICAgICAgICB3b3JrZmxvd01hbmlmZXN0LFxuICAgICAgICAgICAgc3RlcElkc0ZvckN1cnJlbnRCdWlsZCxcbiAgICAgICAgICAgIHdvcmtmbG93SWRzRm9yQ3VycmVudEJ1aWxkXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50czogdHJhbnNmb3JtZWRDb2RlLFxuICAgICAgICAgICAgbG9hZGVyLFxuICAgICAgICAgIH07XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID1cbiAgICAgICAgICAgIGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgYOKdjCBTV0MgdHJhbnNmb3JtIGVycm9yIGluICR7YXJncy5wYXRofTpgLFxuICAgICAgICAgICAgZXJyb3JNZXNzYWdlXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZXJyb3JzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0ZXh0OiBgU1dDIHRyYW5zZm9ybSBmYWlsZWQ6ICR7ZXJyb3JNZXNzYWdlfWAsXG4gICAgICAgICAgICAgICAgbG9jYXRpb246IHsgZmlsZTogYXJncy5wYXRoLCBsaW5lOiAwLCBjb2x1bW46IDAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gaXNQcm9qZWN0TG9jYWxGaWxlKGZpbGVQYXRoOiBzdHJpbmcsIHByb2plY3RSb290OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKG5vcm1hbGl6ZVBhdGgoZmlsZVBhdGgpLmluY2x1ZGVzKCcvbm9kZV9tb2R1bGVzLycpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICByZXNvbHZlTW9kdWxlU3BlY2lmaWVyKGZpbGVQYXRoLCBwcm9qZWN0Um9vdCkubW9kdWxlU3BlY2lmaWVyID09PSB1bmRlZmluZWRcbiAgKTtcbn1cbiJdfQ==