@local-labs-jpollock/local-cli 0.0.2 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/index.js CHANGED
@@ -91,10 +91,10 @@ function writeUpdateCache(cache) {
91
91
  async function fetchLatestVersion() {
92
92
  try {
93
93
  const response = await fetch(`https://registry.npmjs.org/${PACKAGE_NAME}/latest`, {
94
- headers: { 'Accept': 'application/json' },
94
+ headers: { Accept: 'application/json' },
95
95
  });
96
96
  if (response.ok) {
97
- const data = await response.json();
97
+ const data = (await response.json());
98
98
  return data.version;
99
99
  }
100
100
  }
@@ -124,7 +124,7 @@ async function checkForUpdates() {
124
124
  const cache = readUpdateCache();
125
125
  const now = Date.now();
126
126
  // Skip if checked recently
127
- if (cache && (now - cache.lastCheck) < UPDATE_CHECK_INTERVAL) {
127
+ if (cache && now - cache.lastCheck < UPDATE_CHECK_INTERVAL) {
128
128
  if (cache.latestVersion && isNewerVersion(cache.latestVersion, CURRENT_VERSION)) {
129
129
  console.log(`\n\x1b[33mUpdate available: ${CURRENT_VERSION} → ${cache.latestVersion}\x1b[0m`);
130
130
  console.log(`Run: \x1b[36mlwp update\x1b[0m\n`);
@@ -132,13 +132,15 @@ async function checkForUpdates() {
132
132
  return;
133
133
  }
134
134
  // Fetch latest version (non-blocking, fire and forget for cache)
135
- fetchLatestVersion().then((latestVersion) => {
135
+ fetchLatestVersion()
136
+ .then((latestVersion) => {
136
137
  writeUpdateCache({ lastCheck: now, latestVersion });
137
138
  if (latestVersion && isNewerVersion(latestVersion, CURRENT_VERSION)) {
138
139
  console.log(`\n\x1b[33mUpdate available: ${CURRENT_VERSION} → ${latestVersion}\x1b[0m`);
139
140
  console.log(`Run: \x1b[36mlwp update\x1b[0m\n`);
140
141
  }
141
- }).catch(() => {
142
+ })
143
+ .catch(() => {
142
144
  // Silently ignore update check failures
143
145
  });
144
146
  }
@@ -199,7 +201,8 @@ async function runSiteCommand(siteName, config, execute) {
199
201
  program
200
202
  .name('lwp')
201
203
  .description('Command-line interface for Local WordPress development')
202
- .version(CURRENT_VERSION);
204
+ .version(CURRENT_VERSION)
205
+ .enablePositionalOptions();
203
206
  // Global options
204
207
  program
205
208
  .option('--json', 'Output results as JSON')
@@ -341,7 +344,9 @@ sites
341
344
  .description('Start a site')
342
345
  .action(async (site) => {
343
346
  await runSiteCommand(site, { action: 'Starting', successMessage: () => `Started "${site}"` }, async (gql, siteId) => {
344
- return gql.mutate(`mutation($id: ID!) { startSite(id: $id) { id status } }`, { id: siteId });
347
+ return gql.mutate(`mutation($id: ID!) { startSite(id: $id) { id status } }`, {
348
+ id: siteId,
349
+ });
345
350
  });
346
351
  });
347
352
  sites
@@ -357,7 +362,9 @@ sites
357
362
  .description('Restart a site')
358
363
  .action(async (site) => {
359
364
  await runSiteCommand(site, { action: 'Restarting', successMessage: () => `Restarted "${site}"` }, async (gql, siteId) => {
360
- return gql.mutate(`mutation($id: ID!) { restartSite(id: $id) { id status } }`, { id: siteId });
365
+ return gql.mutate(`mutation($id: ID!) { restartSite(id: $id) { id status } }`, {
366
+ id: siteId,
367
+ });
361
368
  });
362
369
  });
363
370
  sites
@@ -440,7 +447,10 @@ sites
440
447
  .command('clone <site> <newName>')
441
448
  .description('Clone a site')
442
449
  .action(async (site, newName) => {
443
- await runSiteCommand(site, { action: `Cloning`, successMessage: (data) => `Cloned to "${data.cloneSite.newSiteName}" (${data.cloneSite.newSiteId})` }, async (gql, siteId) => {
450
+ await runSiteCommand(site, {
451
+ action: `Cloning`,
452
+ successMessage: (data) => `Cloned to "${data.cloneSite.newSiteName}" (${data.cloneSite.newSiteId})`,
453
+ }, async (gql, siteId) => {
444
454
  const data = await gql.mutate(`
445
455
  mutation($input: CloneSiteInput!) {
446
456
  cloneSite(input: $input) { success newSiteId newSiteName error }
@@ -457,7 +467,10 @@ sites
457
467
  .description('Export site to zip file')
458
468
  .option('-o, --output <path>', 'Output file path')
459
469
  .action(async (site, cmdOptions) => {
460
- await runSiteCommand(site, { action: 'Exporting', successMessage: (data) => `Exported to ${data.exportSite.outputPath}` }, async (gql, siteId) => {
470
+ await runSiteCommand(site, {
471
+ action: 'Exporting',
472
+ successMessage: (data) => `Exported to ${data.exportSite.outputPath}`,
473
+ }, async (gql, siteId) => {
461
474
  const data = await gql.mutate(`
462
475
  mutation($input: ExportSiteInput!) {
463
476
  exportSite(input: $input) { success outputPath error }
@@ -532,7 +545,10 @@ sites
532
545
  .command('php <site> <version>')
533
546
  .description('Change PHP version for a site')
534
547
  .action(async (site, version) => {
535
- await runSiteCommand(site, { action: `Changing PHP to ${version} for`, successMessage: () => `PHP version changed to ${version}` }, async (gql, siteId) => {
548
+ await runSiteCommand(site, {
549
+ action: `Changing PHP to ${version} for`,
550
+ successMessage: () => `PHP version changed to ${version}`,
551
+ }, async (gql, siteId) => {
536
552
  const data = await gql.mutate(`
537
553
  mutation($input: ChangePhpVersionInput!) {
538
554
  changePhpVersion(input: $input) { success error }
@@ -552,7 +568,10 @@ sites
552
568
  .action(async (site, cmdOptions) => {
553
569
  const enabled = cmdOptions.on ? true : cmdOptions.off ? false : undefined;
554
570
  const action = enabled === undefined ? 'Toggling' : enabled ? 'Enabling' : 'Disabling';
555
- await runSiteCommand(site, { action: `${action} Xdebug for`, successMessage: (data) => `Xdebug ${data.toggleXdebug.enabled ? 'enabled' : 'disabled'}` }, async (gql, siteId) => {
571
+ await runSiteCommand(site, {
572
+ action: `${action} Xdebug for`,
573
+ successMessage: (data) => `Xdebug ${data.toggleXdebug.enabled ? 'enabled' : 'disabled'}`,
574
+ }, async (gql, siteId) => {
556
575
  // If no flag specified, get current state and toggle
557
576
  let targetEnabled = enabled;
558
577
  if (targetEnabled === undefined) {
@@ -613,16 +632,26 @@ sites
613
632
  program
614
633
  .command('wp <site> [args...]')
615
634
  .description('Run WP-CLI commands against a site')
616
- .action(async (site, args) => {
635
+ .option('--with-plugins', 'Load plugins (default: plugins are skipped for safety)')
636
+ .option('--with-themes', 'Load themes (default: themes are skipped for safety)')
637
+ .allowUnknownOption()
638
+ .passThroughOptions()
639
+ .action(async (site, args, cmdOptions) => {
617
640
  const globalOpts = program.opts();
618
641
  try {
619
642
  const gql = await ensureConnected(globalOpts);
620
643
  const siteId = await findSiteId(gql, site);
644
+ const input = {
645
+ siteId,
646
+ args,
647
+ skipPlugins: !cmdOptions.withPlugins,
648
+ skipThemes: !cmdOptions.withThemes,
649
+ };
621
650
  const data = await gql.mutate(`
622
651
  mutation($input: WpCliInput!) {
623
652
  wpCli(input: $input) { success output error }
624
653
  }
625
- `, { input: { siteId, args } });
654
+ `, { input });
626
655
  if (!data.wpCli.success) {
627
656
  console.error((0, formatters_1.formatError)(data.wpCli.error || 'WP-CLI command failed'));
628
657
  process.exit(1);
@@ -770,12 +799,14 @@ blueprints
770
799
  // Database Commands
771
800
  // ===========================================
772
801
  const db = program.command('db').description('Database operations');
773
- db
774
- .command('export <site>')
802
+ db.command('export <site>')
775
803
  .description('Export database to SQL file')
776
804
  .option('-o, --output <path>', 'Output file path')
777
805
  .action(async (site, cmdOptions) => {
778
- await runSiteCommand(site, { action: 'Exporting database for', successMessage: (data) => `Exported to ${data.exportDatabase.outputPath}` }, async (gql, siteId) => {
806
+ await runSiteCommand(site, {
807
+ action: 'Exporting database for',
808
+ successMessage: (data) => `Exported to ${data.exportDatabase.outputPath}`,
809
+ }, async (gql, siteId) => {
779
810
  const data = await gql.mutate(`
780
811
  mutation($input: ExportDatabaseInput!) {
781
812
  exportDatabase(input: $input) { success outputPath error }
@@ -787,8 +818,7 @@ db
787
818
  return data;
788
819
  });
789
820
  });
790
- db
791
- .command('import <site> <sqlFile>')
821
+ db.command('import <site> <sqlFile>')
792
822
  .description('Import SQL file into database')
793
823
  .action(async (site, sqlFile) => {
794
824
  await runSiteCommand(site, { action: 'Importing database for', successMessage: () => 'Database imported successfully' }, async (gql, siteId) => {
@@ -803,8 +833,7 @@ db
803
833
  return data;
804
834
  });
805
835
  });
806
- db
807
- .command('adminer <site>')
836
+ db.command('adminer <site>')
808
837
  .description('Open Adminer database UI')
809
838
  .action(async (site) => {
810
839
  await runSiteCommand(site, { action: 'Opening Adminer for', successMessage: () => 'Opened Adminer' }, async (gql, siteId) => {
@@ -906,7 +935,10 @@ backups
906
935
  .option('-p, --provider <provider>', 'Backup provider (dropbox|googleDrive)', 'dropbox')
907
936
  .option('-n, --note <note>', 'Backup note')
908
937
  .action(async (site, cmdOptions) => {
909
- await runSiteCommand(site, { action: 'Creating backup for', successMessage: (data) => `Backup created: ${data.createBackup.snapshotId}` }, async (gql, siteId) => {
938
+ await runSiteCommand(site, {
939
+ action: 'Creating backup for',
940
+ successMessage: (data) => `Backup created: ${data.createBackup.snapshotId}`,
941
+ }, async (gql, siteId) => {
910
942
  const data = await gql.mutate(`
911
943
  mutation($siteId: ID!, $provider: String!, $note: String) {
912
944
  createBackup(siteId: $siteId, provider: $provider, note: $note) {
@@ -926,7 +958,10 @@ backups
926
958
  .option('-p, --provider <provider>', 'Backup provider (dropbox|googleDrive)', 'dropbox')
927
959
  .option('-y, --yes', 'Skip confirmation')
928
960
  .action(async (site, snapshotId, cmdOptions) => {
929
- await runSiteCommand(site, { action: 'Restoring backup for', successMessage: (data) => data.restoreBackup.message || 'Backup restored successfully' }, async (gql, siteId) => {
961
+ await runSiteCommand(site, {
962
+ action: 'Restoring backup for',
963
+ successMessage: (data) => data.restoreBackup.message || 'Backup restored successfully',
964
+ }, async (gql, siteId) => {
930
965
  const data = await gql.mutate(`
931
966
  mutation($siteId: ID!, $provider: String!, $snapshotId: String!, $confirm: Boolean) {
932
967
  restoreBackup(siteId: $siteId, provider: $provider, snapshotId: $snapshotId, confirm: $confirm) {
@@ -1141,7 +1176,10 @@ wpe
1141
1176
  .option('--sql', 'Include database')
1142
1177
  .option('-y, --yes', 'Skip confirmation')
1143
1178
  .action(async (site, cmdOptions) => {
1144
- await runSiteCommand(site, { action: 'Pushing to WP Engine', successMessage: (data) => data.pushToWpe.message || 'Pushed to WP Engine' }, async (gql, siteId) => {
1179
+ await runSiteCommand(site, {
1180
+ action: 'Pushing to WP Engine',
1181
+ successMessage: (data) => data.pushToWpe.message || 'Pushed to WP Engine',
1182
+ }, async (gql, siteId) => {
1145
1183
  // Get remote install ID if not provided
1146
1184
  let remoteInstallId = cmdOptions.remote;
1147
1185
  if (!remoteInstallId) {
@@ -1163,7 +1201,12 @@ wpe
1163
1201
  success message error
1164
1202
  }
1165
1203
  }
1166
- `, { localSiteId: siteId, remoteInstallId, includeSql: cmdOptions.sql || false, confirm: cmdOptions.yes || false });
1204
+ `, {
1205
+ localSiteId: siteId,
1206
+ remoteInstallId,
1207
+ includeSql: cmdOptions.sql || false,
1208
+ confirm: cmdOptions.yes || false,
1209
+ });
1167
1210
  if (!data.pushToWpe.success) {
1168
1211
  throw new Error(data.pushToWpe.error || 'Failed to push to WP Engine');
1169
1212
  }
@@ -1176,7 +1219,10 @@ wpe
1176
1219
  .option('-r, --remote <installId>', 'Remote install ID')
1177
1220
  .option('--sql', 'Include database')
1178
1221
  .action(async (site, cmdOptions) => {
1179
- await runSiteCommand(site, { action: 'Pulling from WP Engine for', successMessage: (data) => data.pullFromWpe.message || 'Pulled from WP Engine' }, async (gql, siteId) => {
1222
+ await runSiteCommand(site, {
1223
+ action: 'Pulling from WP Engine for',
1224
+ successMessage: (data) => data.pullFromWpe.message || 'Pulled from WP Engine',
1225
+ }, async (gql, siteId) => {
1180
1226
  // Get remote install ID if not provided
1181
1227
  let remoteInstallId = cmdOptions.remote;
1182
1228
  if (!remoteInstallId) {
@@ -1417,4 +1463,4 @@ if (!isUpdateCommand && !isQuiet) {
1417
1463
  }
1418
1464
  // Parse and execute
1419
1465
  program.parse();
1420
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFFQTs7Ozs7R0FLRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFSCx5Q0FBb0M7QUFDcEMsOENBQXNCO0FBQ3RCLHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFDN0IsdUNBQXlCO0FBQ3pCLGlEQUF5QztBQUN6QywyQ0FBd0Q7QUFDeEQscUNBQXlDO0FBQ3pDLDZDQVFzQjtBQUV0QixlQUFlO0FBQ2YsTUFBTSxZQUFZLEdBQUcsZ0NBQWdDLENBQUM7QUFDdEQsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUMsT0FBTyxDQUFDO0FBQzNELE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztBQUN2RSxNQUFNLHFCQUFxQixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLFdBQVc7QUFFOUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxtQkFBTyxFQUFFLENBQUM7QUFFOUIsd0NBQXdDO0FBQ3hDLElBQUksTUFBTSxHQUF5QixJQUFJLENBQUM7QUFXeEM7O0dBRUc7QUFDSCxTQUFTLGVBQWU7SUFDdEIsSUFBSSxDQUFDO1FBQ0gsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQztZQUNyQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ2pFLENBQUM7SUFDSCxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsMkJBQTJCO0lBQzdCLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRDs7R0FFRztBQUNILFNB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LENBQUMsQ0FBQyxDQUFDO1lBQ1osT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUMzQixNQUFNO1FBQ1IsQ0FBQztRQUVEO1lBQ0UsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFBLHdCQUFXLEVBQUMsbUJBQW1CLE1BQU0sb0NBQW9DLENBQUMsQ0FBQyxDQUFDO1lBQzFGLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEIsQ0FBQztBQUNILENBQUMsQ0FBQyxDQUFDO0FBRUwsb0VBQW9FO0FBQ3BFLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25DLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLENBQUM7QUFDN0MsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBRXBFLElBQUksQ0FBQyxlQUFlLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNqQyx3Q0FBd0M7SUFDeEMsZUFBZSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3BDLENBQUM7QUFFRCxvQkFBb0I7QUFDcEIsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuXG4vKipcbiAqIExvY2FsIENMSSAobHdwKVxuICpcbiAqIENvbW1hbmQtbGluZSBpbnRlcmZhY2UgZm9yIG1hbmFnaW5nIExvY2FsIFdvcmRQcmVzcyBzaXRlcy5cbiAqIENvbm5lY3RzIGRpcmVjdGx5IHRvIExvY2FsJ3MgR3JhcGhRTCBzZXJ2ZXIuXG4gKi9cblxuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQgb3JhIGZyb20gJ29yYSc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgb3MgZnJvbSAnb3MnO1xuaW1wb3J0IHsgZXhlY1N5bmMgfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IGJvb3RzdHJhcCwgQ29ubmVjdGlvbkluZm8gfSBmcm9tICcuL2Jvb3RzdHJhcCc7XG5pbXBvcnQgeyBHcmFwaFFMQ2xpZW50IH0gZnJvbSAnLi9jbGllbnQnO1xuaW1wb3J0IHtcbiAgZm9ybWF0U2l0ZUxpc3QsXG4gIGZvcm1hdFNpdGVEZXRhaWwsXG4gIGZvcm1hdFN1Y2Nlc3MsXG4gIGZvcm1hdEVycm9yLFxuICBnZXRPdXRwdXRGb3JtYXQsXG4gIEZvcm1hdHRlck9wdGlvbnMsXG4gIFNpdGVJbmZvLFxufSBmcm9tICcuL2Zvcm1hdHRlcnMnO1xuXG4vLyBQYWNrYWdlIGluZm9cbmNvbnN0IFBBQ0tBR0VfTkFNRSA9ICdAbG9jYWwtbGFicy1qcG9sbG9jay9sb2NhbC1jbGknO1xuY29uc3QgQ1VSUkVOVF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vcGFja2FnZS5qc29uJykudmVyc2lvbjtcbmNvbnN0IFVQREFURV9DSEVDS19GSUxFID0gcGF0aC5qb2luKG9zLmhvbWVkaXIoKSwgJy5sd3AtdXBkYXRlLWNoZWNrJyk7XG5jb25zdCBVUERBVEVfQ0hFQ0tfSU5URVJWQUwgPSAyNCAqIDYwICogNjAgKiAxMDAwOyAvLyAyNCBob3Vyc1xuXG5jb25zdCBwcm9ncmFtID0gbmV3IENvbW1hbmQoKTtcblxuLy8gU3RvcmUgY2xpZW50IGdsb2JhbGx5IGFmdGVyIGJvb3RzdHJhcFxubGV0IGNsaWVudDogR3JhcGhRTENsaWVudCB8IG51bGwgPSBudWxsO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBVcGRhdGUgQ2hlY2sgRnVuY3Rpb25zXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmludGVyZmFjZSBVcGRhdGVDaGVja0NhY2hlIHtcbiAgbGFzdENoZWNrOiBudW1iZXI7XG4gIGxhdGVzdFZlcnNpb246IHN0cmluZyB8IG51bGw7XG59XG5cbi8qKlxuICogUmVhZCB1cGRhdGUgY2hlY2sgY2FjaGVcbiAqL1xuZnVuY3Rpb24gcmVhZFVwZGF0ZUNhY2hlKCk6IFVwZGF0ZUNoZWNrQ2FjaGUgfCBudWxsIHtcbiAgdHJ5IHtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhVUERBVEVfQ0hFQ0tfRklMRSkpIHtcbiAgICAgIHJldHVybiBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhVUERBVEVfQ0hFQ0tfRklMRSwgJ3V0Zi04JykpO1xuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgLy8gSWdub3JlIGNhY2hlIHJlYWQgZXJyb3JzXG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogV3JpdGUgdXBkYXRlIGNoZWNrIGNhY2hlXG4gKi9cbmZ1bmN0aW9uIHdyaXRlVXBkYXRlQ2FjaGUoY2FjaGU6IFVwZGF0ZUNoZWNrQ2FjaGUpOiB2b2lkIHtcbiAgdHJ5IHtcbiAgICBmcy53cml0ZUZpbGVTeW5jKFVQREFURV9DSEVDS19GSUxFLCBKU09OLnN0cmluZ2lmeShjYWNoZSkpO1xuICB9IGNhdGNoIHtcbiAgICAvLyBJZ25vcmUgY2FjaGUgd3JpdGUgZXJyb3JzXG4gIH1cbn1cblxuLyoqXG4gKiBGZXRjaCBsYXRlc3QgdmVyc2lvbiBmcm9tIG5wbSByZWdpc3RyeVxuICovXG5hc3luYyBmdW5jdGlvbiBmZXRjaExhdGVzdFZlcnNpb24oKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvJHtQQUNLQUdFX05BTUV9L2xhdGVzdGAsIHtcbiAgICAgIGhlYWRlcnM6IHsgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgIH0pO1xuICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyB7IHZlcnNpb246IHN0cmluZyB9O1xuICAgICAgcmV0dXJuIGRhdGEudmVyc2lvbjtcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIE5ldHdvcmsgZXJyb3IsIHNpbGVudGx5IGlnbm9yZVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIENvbXBhcmUgc2VtdmVyIHZlcnNpb25zIChzaW1wbGUgY29tcGFyaXNvbilcbiAqL1xuZnVuY3Rpb24gaXNOZXdlclZlcnNpb24obGF0ZXN0OiBzdHJpbmcsIGN1cnJlbnQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBsYXRlc3RQYXJ0cyA9IGxhdGVzdC5zcGxpdCgnLicpLm1hcChOdW1iZXIpO1xuICBjb25zdCBjdXJyZW50UGFydHMgPSBjdXJyZW50LnNwbGl0KCcuJykubWFwKE51bWJlcik7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCAzOyBpKyspIHtcbiAgICBpZiAoKGxhdGVzdFBhcnRzW2ldIHx8IDApID4gKGN1cnJlbnRQYXJ0c1tpXSB8fCAwKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKChsYXRlc3RQYXJ0c1tpXSB8fCAwKSA8IChjdXJyZW50UGFydHNbaV0gfHwgMCkpIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ2hlY2sgZm9yIHVwZGF0ZXMgKHVzZXMgY2FjaGUgdG8gYXZvaWQgZnJlcXVlbnQgY2hlY2tzKVxuICovXG5hc3luYyBmdW5jdGlvbiBjaGVja0ZvclVwZGF0ZXMoKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGNhY2hlID0gcmVhZFVwZGF0ZUNhY2hlKCk7XG4gIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgLy8gU2tpcCBpZiBjaGVja2VkIHJlY2VudGx5XG4gIGlmIChjYWNoZSAmJiAobm93IC0gY2FjaGUubGFzdENoZWNrKSA8IFVQREFURV9DSEVDS19JTlRFUlZBTCkge1xuICAgIGlmIChjYWNoZS5sYXRlc3RWZXJzaW9uICYmIGlzTmV3ZXJWZXJzaW9uKGNhY2hlLmxhdGVzdFZlcnNpb24sIENVUlJFTlRfVkVSU0lPTikpIHtcbiAgICAgIGNvbnNvbGUubG9nKGBcXG5cXHgxYlszM21VcGRhdGUgYXZhaWxhYmxlOiAke0NVUlJFTlRfVkVSU0lPTn0g4oaSICR7Y2FjaGUubGF0ZXN0VmVyc2lvbn1cXHgxYlswbWApO1xuICAgICAgY29uc29sZS5sb2coYFJ1bjogXFx4MWJbMzZtbHdwIHVwZGF0ZVxceDFiWzBtXFxuYCk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIEZldGNoIGxhdGVzdCB2ZXJzaW9uIChub24tYmxvY2tpbmcsIGZpcmUgYW5kIGZvcmdldCBmb3IgY2FjaGUpXG4gIGZldGNoTGF0ZXN0VmVyc2lvbigpLnRoZW4oKGxhdGVzdFZlcnNpb24pID0+IHtcbiAgICB3cml0ZVVwZGF0ZUNhY2hlKHsgbGFzdENoZWNrOiBub3csIGxhdGVzdFZlcnNpb24gfSk7XG5cbiAgICBpZiAobGF0ZXN0VmVyc2lvbiAmJiBpc05ld2VyVmVyc2lvbihsYXRlc3RWZXJzaW9uLCBDVVJSRU5UX1ZFUlNJT04pKSB7XG4gICAgICBjb25zb2xlLmxvZyhgXFxuXFx4MWJbMzNtVXBkYXRlIGF2YWlsYWJsZTogJHtDVVJSRU5UX1ZFUlNJT059IOKGkiAke2xhdGVzdFZlcnNpb259XFx4MWJbMG1gKTtcbiAgICAgIGNvbnNvbGUubG9nKGBSdW46IFxceDFiWzM2bWx3cCB1cGRhdGVcXHgxYlswbVxcbmApO1xuICAgIH1cbiAgfSkuY2F0Y2goKCkgPT4ge1xuICAgIC8vIFNpbGVudGx5IGlnbm9yZSB1cGRhdGUgY2hlY2sgZmFpbHVyZXNcbiAgfSk7XG59XG5cbi8qKlxuICogRW5zdXJlIHdlJ3JlIGNvbm5lY3RlZCB0byBMb2NhbCdzIEdyYXBoUUwgc2VydmVyXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGVuc3VyZUNvbm5lY3RlZChvcHRpb25zOiBGb3JtYXR0ZXJPcHRpb25zKTogUHJvbWlzZTxHcmFwaFFMQ2xpZW50PiB7XG4gIGlmIChjbGllbnQpIHtcbiAgICByZXR1cm4gY2xpZW50O1xuICB9XG5cbiAgY29uc3Qgc3Bpbm5lciA9IG9wdGlvbnMucXVpZXQgPyBudWxsIDogb3JhKCdDb25uZWN0aW5nIHRvIExvY2FsLi4uJykuc3RhcnQoKTtcblxuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJvb3RzdHJhcCh7XG4gICAgICB2ZXJib3NlOiBmYWxzZSxcbiAgICAgIG9uU3RhdHVzOiAoc3RhdHVzKSA9PiB7XG4gICAgICAgIGlmIChzcGlubmVyKSBzcGlubmVyLnRleHQgPSBzdGF0dXM7XG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgaWYgKCFyZXN1bHQuc3VjY2VzcyB8fCAhcmVzdWx0LmNvbm5lY3Rpb25JbmZvKSB7XG4gICAgICBzcGlubmVyPy5mYWlsKCdGYWlsZWQgdG8gY29ubmVjdCcpO1xuICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihyZXN1bHQuZXJyb3IgfHwgJ1Vua25vd24gZXJyb3InKSk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuXG4gICAgc3Bpbm5lcj8uc3VjY2VlZCgnQ29ubmVjdGVkIHRvIExvY2FsJyk7XG4gICAgY2xpZW50ID0gbmV3IEdyYXBoUUxDbGllbnQocmVzdWx0LmNvbm5lY3Rpb25JbmZvKTtcbiAgICByZXR1cm4gY2xpZW50O1xuICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgc3Bpbm5lcj8uZmFpbCgnRmFpbGVkIHRvIGNvbm5lY3QnKTtcbiAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGVycm9yLm1lc3NhZ2UpKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cbn1cblxuLyoqXG4gKiBIZWxwZXIgdG8gcnVuIHNpdGUtc3BlY2lmaWMgY29tbWFuZHMgd2l0aCBjb21tb24gYm9pbGVycGxhdGVcbiAqXG4gKiBIYW5kbGVzOiBjb25uZWN0aW9uLCBzcGlubmVyLCBzaXRlIGxvb2t1cCwgZXJyb3IgZm9ybWF0dGluZ1xuICovXG5hc3luYyBmdW5jdGlvbiBydW5TaXRlQ29tbWFuZDxUPihcbiAgc2l0ZU5hbWU6IHN0cmluZyxcbiAgY29uZmlnOiB7XG4gICAgYWN0aW9uOiBzdHJpbmc7XG4gICAgc3VjY2Vzc01lc3NhZ2U/OiAocmVzdWx0OiBUKSA9PiBzdHJpbmc7XG4gIH0sXG4gIGV4ZWN1dGU6IChncWw6IEdyYXBoUUxDbGllbnQsIHNpdGVJZDogc3RyaW5nKSA9PiBQcm9taXNlPFQ+XG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgZ2xvYmFsT3B0cyA9IHByb2dyYW0ub3B0cygpIGFzIEZvcm1hdHRlck9wdGlvbnM7XG4gIGNvbnN0IHNwaW5uZXIgPSBnbG9iYWxPcHRzLnF1aWV0ID8gbnVsbCA6IG9yYShgJHtjb25maWcuYWN0aW9ufSBcIiR7c2l0ZU5hbWV9XCIuLi5gKS5zdGFydCgpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgZ3FsID0gYXdhaXQgZW5zdXJlQ29ubmVjdGVkKGdsb2JhbE9wdHMpO1xuICAgIGNvbnN0IHNpdGVJZCA9IGF3YWl0IGZpbmRTaXRlSWQoZ3FsLCBzaXRlTmFtZSk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZXhlY3V0ZShncWwsIHNpdGVJZCk7XG5cbiAgICBjb25zdCBtZXNzYWdlID0gY29uZmlnLnN1Y2Nlc3NNZXNzYWdlXG4gICAgICA/IGNvbmZpZy5zdWNjZXNzTWVzc2FnZShyZXN1bHQpXG4gICAgICA6IGAke2NvbmZpZy5hY3Rpb259IFwiJHtzaXRlTmFtZX1cIiBjb21wbGV0ZWRgO1xuICAgIHNwaW5uZXI/LnN1Y2NlZWQobWVzc2FnZSk7XG4gIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICBzcGlubmVyPy5mYWlsKGBGYWlsZWQgdG8gJHtjb25maWcuYWN0aW9uLnRvTG93ZXJDYXNlKCl9IFwiJHtzaXRlTmFtZX1cImApO1xuICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZXJyb3IubWVzc2FnZSkpO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxufVxuXG5wcm9ncmFtXG4gIC5uYW1lKCdsd3AnKVxuICAuZGVzY3JpcHRpb24oJ0NvbW1hbmQtbGluZSBpbnRlcmZhY2UgZm9yIExvY2FsIFdvcmRQcmVzcyBkZXZlbG9wbWVudCcpXG4gIC52ZXJzaW9uKENVUlJFTlRfVkVSU0lPTik7XG5cbi8vIEdsb2JhbCBvcHRpb25zXG5wcm9ncmFtXG4gIC5vcHRpb24oJy0tanNvbicsICdPdXRwdXQgcmVzdWx0cyBhcyBKU09OJylcbiAgLm9wdGlvbignLS1xdWlldCcsICdNaW5pbWFsIG91dHB1dCAoSURzL25hbWVzIG9ubHkpJylcbiAgLm9wdGlvbignLS1uby1jb2xvcicsICdEaXNhYmxlIGNvbG9yZWQgb3V0cHV0Jyk7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFVwZGF0ZSBDb21tYW5kXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ3VwZGF0ZScpXG4gIC5kZXNjcmlwdGlvbignVXBkYXRlIHRoZSBDTEkgdG8gdGhlIGxhdGVzdCB2ZXJzaW9uJylcbiAgLm9wdGlvbignLS1jaGVjaycsICdPbmx5IGNoZWNrIGZvciB1cGRhdGVzLCBkbyBub3QgaW5zdGFsbCcpXG4gIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICBpZiAob3B0aW9ucy5jaGVjaykge1xuICAgICAgY29uc3Qgc3Bpbm5lciA9IG9yYSgnQ2hlY2tpbmcgZm9yIHVwZGF0ZXMuLi4nKS5zdGFydCgpO1xuICAgICAgY29uc3QgbGF0ZXN0VmVyc2lvbiA9IGF3YWl0IGZldGNoTGF0ZXN0VmVyc2lvbigpO1xuXG4gICAgICBpZiAoIWxhdGVzdFZlcnNpb24pIHtcbiAgICAgICAgc3Bpbm5lci5mYWlsKCdDb3VsZCBub3QgY2hlY2sgZm9yIHVwZGF0ZXMnKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNOZXdlclZlcnNpb24obGF0ZXN0VmVyc2lvbiwgQ1VSUkVOVF9WRVJTSU9OKSkge1xuICAgICAgICBzcGlubmVyLnN1Y2NlZWQoYFVwZGF0ZSBhdmFpbGFibGU6ICR7Q1VSUkVOVF9WRVJTSU9OfSDihpIgJHtsYXRlc3RWZXJzaW9ufWApO1xuICAgICAgICBjb25zb2xlLmxvZyhgXFxuUnVuIFxceDFiWzM2bWx3cCB1cGRhdGVcXHgxYlswbSB0byBpbnN0YWxsYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzcGlubmVyLnN1Y2NlZWQoYFlvdSdyZSBvbiB0aGUgbGF0ZXN0IHZlcnNpb24gKCR7Q1VSUkVOVF9WRVJTSU9OfSlgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzcGlubmVyID0gb3JhKCdVcGRhdGluZyBDTEkuLi4nKS5zdGFydCgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFJ1biBucG0gdXBkYXRlXG4gICAgICBleGVjU3luYyhgbnBtIHVwZGF0ZSAtZyAke1BBQ0tBR0VfTkFNRX1gLCB7IHN0ZGlvOiAncGlwZScgfSk7XG4gICAgICBzcGlubmVyLnN1Y2NlZWQoJ0NMSSB1cGRhdGVkIHN1Y2Nlc3NmdWxseScpO1xuXG4gICAgICAvLyBDaGVjayBuZXcgdmVyc2lvblxuICAgICAgY29uc3QgbmV3VmVyc2lvbiA9IGF3YWl0IGZldGNoTGF0ZXN0VmVyc2lvbigpO1xuICAgICAgaWYgKG5ld1ZlcnNpb24pIHtcbiAgICAgICAgY29uc29sZS5sb2coYFxcblVwZGF0ZWQgdG8gdmVyc2lvbiAke25ld1ZlcnNpb259YCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgc3Bpbm5lci5mYWlsKCdVcGRhdGUgZmFpbGVkJyk7XG4gICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKCdUcnkgcnVubmluZzogbnBtIHVwZGF0ZSAtZyAnICsgUEFDS0FHRV9OQU1FKSk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9KTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU2l0ZXMgQ29tbWFuZHNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuY29uc3Qgc2l0ZXMgPSBwcm9ncmFtLmNvbW1hbmQoJ3NpdGVzJykuZGVzY3JpcHRpb24oJ01hbmFnZSBXb3JkUHJlc3Mgc2l0ZXMnKTtcblxuc2l0ZXNcbiAgLmNvbW1hbmQoJ2xpc3QnKVxuICAuZGVzY3JpcHRpb24oJ0xpc3QgYWxsIFdvcmRQcmVzcyBzaXRlcycpXG4gIC5vcHRpb24oJy0tc3RhdHVzIDxzdGF0dXM+JywgJ0ZpbHRlciBieSBzdGF0dXMgKHJ1bm5pbmd8c3RvcHBlZHxhbGwpJywgJ2FsbCcpXG4gIC5hY3Rpb24oYXN5bmMgKGNtZE9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBnbG9iYWxPcHRzID0gcHJvZ3JhbS5vcHRzKCkgYXMgRm9ybWF0dGVyT3B0aW9ucztcbiAgICBjb25zdCBmb3JtYXQgPSBnZXRPdXRwdXRGb3JtYXQoZ2xvYmFsT3B0cyk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZ3FsID0gYXdhaXQgZW5zdXJlQ29ubmVjdGVkKGdsb2JhbE9wdHMpO1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5xdWVyeTx7IHNpdGVzOiBBcnJheTx7IGlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZzsgZG9tYWluOiBzdHJpbmc7IHN0YXR1czogc3RyaW5nOyBwYXRoOiBzdHJpbmcgfT4gfT4oYFxuICAgICAgICBxdWVyeSB7XG4gICAgICAgICAgc2l0ZXMge1xuICAgICAgICAgICAgaWRcbiAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICAgIGRvbWFpblxuICAgICAgICAgICAgc3RhdHVzXG4gICAgICAgICAgICBwYXRoXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBgKTtcblxuICAgICAgbGV0IHNpdGVzVG9TaG93ID0gZGF0YS5zaXRlcy5tYXAoKHMpID0+ICh7XG4gICAgICAgIGlkOiBzLmlkLFxuICAgICAgICBuYW1lOiBzLm5hbWUsXG4gICAgICAgIGRvbWFpbjogcy5kb21haW4sXG4gICAgICAgIHN0YXR1czogcy5zdGF0dXMudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgcGF0aDogcy5wYXRoLFxuICAgICAgfSkpO1xuXG4gICAgICAvLyBGaWx0ZXIgYnkgc3RhdHVzIGlmIHNwZWNpZmllZFxuICAgICAgaWYgKGNtZE9wdGlvbnMuc3RhdHVzICE9PSAnYWxsJykge1xuICAgICAgICBzaXRlc1RvU2hvdyA9IHNpdGVzVG9TaG93LmZpbHRlcigocykgPT4gcy5zdGF0dXMgPT09IGNtZE9wdGlvbnMuc3RhdHVzKTtcbiAgICAgIH1cblxuICAgICAgY29uc29sZS5sb2coZm9ybWF0U2l0ZUxpc3Qoc2l0ZXNUb1Nob3csIGZvcm1hdCwgeyBub0NvbG9yOiBnbG9iYWxPcHRzLm5vQ29sb3IgfSkpO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZXJyb3IubWVzc2FnZSkpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfSk7XG5cbnNpdGVzXG4gIC5jb21tYW5kKCdnZXQgPHNpdGU+JylcbiAgLmRlc2NyaXB0aW9uKCdHZXQgZGV0YWlsZWQgaW5mbyBhYm91dCBhIHNpdGUnKVxuICAuYWN0aW9uKGFzeW5jIChzaXRlKSA9PiB7XG4gICAgY29uc3QgZ2xvYmFsT3B0cyA9IHByb2dyYW0ub3B0cygpIGFzIEZvcm1hdHRlck9wdGlvbnM7XG4gICAgY29uc3QgZm9ybWF0ID0gZ2V0T3V0cHV0Rm9ybWF0KGdsb2JhbE9wdHMpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGdxbCA9IGF3YWl0IGVuc3VyZUNvbm5lY3RlZChnbG9iYWxPcHRzKTtcblxuICAgICAgLy8gRmlyc3QgZmluZCB0aGUgc2l0ZSBieSBuYW1lIG9yIElEXG4gICAgICBjb25zdCBzaXRlc0RhdGEgPSBhd2FpdCBncWwucXVlcnk8eyBzaXRlczogQXJyYXk8eyBpZDogc3RyaW5nOyBuYW1lOiBzdHJpbmcgfT4gfT4oYFxuICAgICAgICBxdWVyeSB7IHNpdGVzIHsgaWQgbmFtZSB9IH1cbiAgICAgIGApO1xuXG4gICAgICBjb25zdCBmb3VuZFNpdGUgPSBzaXRlc0RhdGEuc2l0ZXMuZmluZChcbiAgICAgICAgKHMpID0+IHMuaWQgPT09IHNpdGUgfHwgcy5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2l0ZS50b0xvd2VyQ2FzZSgpKVxuICAgICAgKTtcblxuICAgICAgaWYgKCFmb3VuZFNpdGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihgU2l0ZSBub3QgZm91bmQ6IFwiJHtzaXRlfVwiYCkpO1xuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwucXVlcnk8eyBzaXRlOiBhbnkgfT4oYFxuICAgICAgICBxdWVyeSgkaWQ6IElEISkge1xuICAgICAgICAgIHNpdGUoaWQ6ICRpZCkge1xuICAgICAgICAgICAgaWRcbiAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICAgIGRvbWFpblxuICAgICAgICAgICAgc3RhdHVzXG4gICAgICAgICAgICBwYXRoXG4gICAgICAgICAgICB1cmxcbiAgICAgICAgICAgIGhvc3RcbiAgICAgICAgICAgIGh0dHBQb3J0XG4gICAgICAgICAgICB4ZGVidWdFbmFibGVkXG4gICAgICAgICAgICBzZXJ2aWNlcyB7XG4gICAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICAgICAgdmVyc2lvblxuICAgICAgICAgICAgICByb2xlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBob3N0Q29ubmVjdGlvbnMge1xuICAgICAgICAgICAgICBob3N0SWRcbiAgICAgICAgICAgICAgcmVtb3RlU2l0ZUlkXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBgLCB7IGlkOiBmb3VuZFNpdGUuaWQgfSk7XG5cbiAgICAgIGNvbnNvbGUubG9nKGZvcm1hdFNpdGVEZXRhaWwoZGF0YS5zaXRlLCBmb3JtYXQsIHsgbm9Db2xvcjogZ2xvYmFsT3B0cy5ub0NvbG9yIH0pKTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGVycm9yLm1lc3NhZ2UpKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gIH0pO1xuXG5zaXRlc1xuICAuY29tbWFuZCgnc3RhcnQgPHNpdGU+JylcbiAgLmRlc2NyaXB0aW9uKCdTdGFydCBhIHNpdGUnKVxuICAuYWN0aW9uKGFzeW5jIChzaXRlKSA9PiB7XG4gICAgYXdhaXQgcnVuU2l0ZUNvbW1hbmQoc2l0ZSwgeyBhY3Rpb246ICdTdGFydGluZycsIHN1Y2Nlc3NNZXNzYWdlOiAoKSA9PiBgU3RhcnRlZCBcIiR7c2l0ZX1cImAgfSwgYXN5bmMgKGdxbCwgc2l0ZUlkKSA9PiB7XG4gICAgICByZXR1cm4gZ3FsLm11dGF0ZShgbXV0YXRpb24oJGlkOiBJRCEpIHsgc3RhcnRTaXRlKGlkOiAkaWQpIHsgaWQgc3RhdHVzIH0gfWAsIHsgaWQ6IHNpdGVJZCB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbnNpdGVzXG4gIC5jb21tYW5kKCdzdG9wIDxzaXRlPicpXG4gIC5kZXNjcmlwdGlvbignU3RvcCBhIHNpdGUnKVxuICAuYWN0aW9uKGFzeW5jIChzaXRlKSA9PiB7XG4gICAgYXdhaXQgcnVuU2l0ZUNvbW1hbmQoc2l0ZSwgeyBhY3Rpb246ICdTdG9wcGluZycsIHN1Y2Nlc3NNZXNzYWdlOiAoKSA9PiBgU3RvcHBlZCBcIiR7c2l0ZX1cImAgfSwgYXN5bmMgKGdxbCwgc2l0ZUlkKSA9PiB7XG4gICAgICByZXR1cm4gZ3FsLm11dGF0ZShgbXV0YXRpb24oJGlkOiBJRCEpIHsgc3RvcFNpdGUoaWQ6ICRpZCkgeyBpZCBzdGF0dXMgfSB9YCwgeyBpZDogc2l0ZUlkIH0pO1xuICAgIH0pO1xuICB9KTtcblxuc2l0ZXNcbiAgLmNvbW1hbmQoJ3Jlc3RhcnQgPHNpdGU+JylcbiAgLmRlc2NyaXB0aW9uKCdSZXN0YXJ0IGEgc2l0ZScpXG4gIC5hY3Rpb24oYXN5bmMgKHNpdGUpID0+IHtcbiAgICBhd2FpdCBydW5TaXRlQ29tbWFuZChzaXRlLCB7IGFjdGlvbjogJ1Jlc3RhcnRpbmcnLCBzdWNjZXNzTWVzc2FnZTogKCkgPT4gYFJlc3RhcnRlZCBcIiR7c2l0ZX1cImAgfSwgYXN5bmMgKGdxbCwgc2l0ZUlkKSA9PiB7XG4gICAgICByZXR1cm4gZ3FsLm11dGF0ZShgbXV0YXRpb24oJGlkOiBJRCEpIHsgcmVzdGFydFNpdGUoaWQ6ICRpZCkgeyBpZCBzdGF0dXMgfSB9YCwgeyBpZDogc2l0ZUlkIH0pO1xuICAgIH0pO1xuICB9KTtcblxuc2l0ZXNcbiAgLmNvbW1hbmQoJ29wZW4gPHNpdGU+JylcbiAgLmRlc2NyaXB0aW9uKCdPcGVuIHNpdGUgaW4gYnJvd3NlcicpXG4gIC5vcHRpb24oJy0tYWRtaW4nLCAnT3BlbiBXUCBBZG1pbiBpbnN0ZWFkIG9mIGZyb250ZW5kJylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSwgY21kT3B0aW9ucykgPT4ge1xuICAgIGF3YWl0IHJ1blNpdGVDb21tYW5kKHNpdGUsIHsgYWN0aW9uOiAnT3BlbmluZycsIHN1Y2Nlc3NNZXNzYWdlOiAoKSA9PiBgT3BlbmVkIFwiJHtzaXRlfVwiYCB9LCBhc3luYyAoZ3FsLCBzaXRlSWQpID0+IHtcbiAgICAgIHJldHVybiBncWwubXV0YXRlKGBcbiAgICAgICAgbXV0YXRpb24oJGlucHV0OiBPcGVuU2l0ZUlucHV0ISkge1xuICAgICAgICAgIG9wZW5TaXRlKGlucHV0OiAkaW5wdXQpIHsgc3VjY2VzcyBlcnJvciB9XG4gICAgICAgIH1cbiAgICAgIGAsIHsgaW5wdXQ6IHsgc2l0ZUlkLCBvcGVuQWRtaW46IGNtZE9wdGlvbnMuYWRtaW4gfHwgZmFsc2UgfSB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbnNpdGVzXG4gIC5jb21tYW5kKCdjcmVhdGUgPG5hbWU+JylcbiAgLmRlc2NyaXB0aW9uKCdDcmVhdGUgYSBuZXcgV29yZFByZXNzIHNpdGUnKVxuICAub3B0aW9uKCctLXBocCA8dmVyc2lvbj4nLCAnUEhQIHZlcnNpb24gKGUuZy4sIDguMi4xMCknKVxuICAub3B0aW9uKCctLXdlYiA8c2VydmVyPicsICdXZWIgc2VydmVyIChuZ2lueHxhcGFjaGUpJylcbiAgLm9wdGlvbignLS1kYiA8ZGF0YWJhc2U+JywgJ0RhdGFiYXNlIChteXNxbHxtYXJpYWRiKScpXG4gIC5vcHRpb24oJy0tYmx1ZXByaW50IDxuYW1lPicsICdVc2UgYSBibHVlcHJpbnQnKVxuICAub3B0aW9uKCctLXdwLXVzZXIgPHVzZXJuYW1lPicsICdXb3JkUHJlc3MgYWRtaW4gdXNlcm5hbWUnLCAnYWRtaW4nKVxuICAub3B0aW9uKCctLXdwLWVtYWlsIDxlbWFpbD4nLCAnV29yZFByZXNzIGFkbWluIGVtYWlsJylcbiAgLmFjdGlvbihhc3luYyAobmFtZSwgY21kT3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IGdsb2JhbE9wdHMgPSBwcm9ncmFtLm9wdHMoKSBhcyBGb3JtYXR0ZXJPcHRpb25zO1xuICAgIGNvbnN0IHNwaW5uZXIgPSBnbG9iYWxPcHRzLnF1aWV0ID8gbnVsbCA6IG9yYShgQ3JlYXRpbmcgXCIke25hbWV9XCIuLi5gKS5zdGFydCgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGdxbCA9IGF3YWl0IGVuc3VyZUNvbm5lY3RlZChnbG9iYWxPcHRzKTtcblxuICAgICAgY29uc3QgaW5wdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0geyBuYW1lIH07XG4gICAgICBpZiAoY21kT3B0aW9ucy5waHApIGlucHV0LnBocFZlcnNpb24gPSBjbWRPcHRpb25zLnBocDtcbiAgICAgIGlmIChjbWRPcHRpb25zLndlYikgaW5wdXQud2ViU2VydmVyID0gY21kT3B0aW9ucy53ZWI7XG4gICAgICBpZiAoY21kT3B0aW9ucy5kYikgaW5wdXQuZGF0YWJhc2UgPSBjbWRPcHRpb25zLmRiO1xuICAgICAgaWYgKGNtZE9wdGlvbnMuYmx1ZXByaW50KSBpbnB1dC5ibHVlcHJpbnQgPSBjbWRPcHRpb25zLmJsdWVwcmludDtcbiAgICAgIGlmIChjbWRPcHRpb25zLndwVXNlcikgaW5wdXQud3BBZG1pblVzZXJuYW1lID0gY21kT3B0aW9ucy53cFVzZXI7XG4gICAgICBpZiAoY21kT3B0aW9ucy53cEVtYWlsKSBpbnB1dC53cEFkbWluRW1haWwgPSBjbWRPcHRpb25zLndwRW1haWw7XG5cbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwubXV0YXRlPHsgY3JlYXRlU2l0ZTogeyBzdWNjZXNzOiBib29sZWFuOyBzaXRlSWQ6IHN0cmluZzsgc2l0ZU5hbWU6IHN0cmluZzsgZXJyb3I6IHN0cmluZyB8IG51bGwgfSB9PihgXG4gICAgICAgIG11dGF0aW9uKCRpbnB1dDogQ3JlYXRlU2l0ZUlucHV0ISkge1xuICAgICAgICAgIGNyZWF0ZVNpdGUoaW5wdXQ6ICRpbnB1dCkgeyBzdWNjZXNzIHNpdGVJZCBzaXRlTmFtZSBlcnJvciB9XG4gICAgICAgIH1cbiAgICAgIGAsIHsgaW5wdXQgfSk7XG5cbiAgICAgIGlmICghZGF0YS5jcmVhdGVTaXRlLnN1Y2Nlc3MpIHtcbiAgICAgICAgc3Bpbm5lcj8uZmFpbCgnQ3JlYXRlIGZhaWxlZCcpO1xuICAgICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGRhdGEuY3JlYXRlU2l0ZS5lcnJvciB8fCAnRmFpbGVkIHRvIGNyZWF0ZSBzaXRlJykpO1xuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICB9XG5cbiAgICAgIHNwaW5uZXI/LnN1Y2NlZWQoYENyZWF0ZWQgXCIke2RhdGEuY3JlYXRlU2l0ZS5zaXRlTmFtZX1cIiAoJHtkYXRhLmNyZWF0ZVNpdGUuc2l0ZUlkfSlgKTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBzcGlubmVyPy5mYWlsKCdDcmVhdGUgZmFpbGVkJyk7XG4gICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGVycm9yLm1lc3NhZ2UpKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gIH0pO1xuXG5zaXRlc1xuICAuY29tbWFuZCgnZGVsZXRlIDxzaXRlPicpXG4gIC5kZXNjcmlwdGlvbignRGVsZXRlIGEgc2l0ZScpXG4gIC5vcHRpb24oJy15LCAtLXllcycsICdTa2lwIGNvbmZpcm1hdGlvbicpXG4gIC5vcHRpb24oJy0ta2VlcC1maWxlcycsICdLZWVwIHNpdGUgZmlsZXMgKG9ubHkgcmVtb3ZlIGZyb20gTG9jYWwpJylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSwgY21kT3B0aW9ucykgPT4ge1xuICAgIGF3YWl0IHJ1blNpdGVDb21tYW5kKHNpdGUsIHsgYWN0aW9uOiAnRGVsZXRpbmcnLCBzdWNjZXNzTWVzc2FnZTogKCkgPT4gYERlbGV0ZWQgXCIke3NpdGV9XCJgIH0sIGFzeW5jIChncWwsIHNpdGVJZCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5tdXRhdGU8eyBkZWxldGVTaXRlOiB7IHN1Y2Nlc3M6IGJvb2xlYW47IGVycm9yOiBzdHJpbmcgfCBudWxsIH0gfT4oYFxuICAgICAgICBtdXRhdGlvbigkaW5wdXQ6IERlbGV0ZVNpdGVJbnB1dCEpIHtcbiAgICAgICAgICBkZWxldGVTaXRlKGlucHV0OiAkaW5wdXQpIHsgc3VjY2VzcyBlcnJvciB9XG4gICAgICAgIH1cbiAgICAgIGAsIHsgaW5wdXQ6IHsgaWQ6IHNpdGVJZCwgdHJhc2hGaWxlczogIWNtZE9wdGlvbnMua2VlcEZpbGVzIH0gfSk7XG4gICAgICBpZiAoIWRhdGEuZGVsZXRlU2l0ZS5zdWNjZXNzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihkYXRhLmRlbGV0ZVNpdGUuZXJyb3IgfHwgJ0ZhaWxlZCB0byBkZWxldGUgc2l0ZScpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSk7XG4gIH0pO1xuXG5zaXRlc1xuICAuY29tbWFuZCgnY2xvbmUgPHNpdGU+IDxuZXdOYW1lPicpXG4gIC5kZXNjcmlwdGlvbignQ2xvbmUgYSBzaXRlJylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSwgbmV3TmFtZSkgPT4ge1xuICAgIGF3YWl0IHJ1blNpdGVDb21tYW5kKHNpdGUsIHsgYWN0aW9uOiBgQ2xvbmluZ2AsIHN1Y2Nlc3NNZXNzYWdlOiAoZGF0YTogeyBjbG9uZVNpdGU6IHsgbmV3U2l0ZU5hbWU6IHN0cmluZzsgbmV3U2l0ZUlkOiBzdHJpbmcgfSB9KSA9PiBgQ2xvbmVkIHRvIFwiJHtkYXRhLmNsb25lU2l0ZS5uZXdTaXRlTmFtZX1cIiAoJHtkYXRhLmNsb25lU2l0ZS5uZXdTaXRlSWR9KWAgfSwgYXN5bmMgKGdxbCwgc2l0ZUlkKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLm11dGF0ZTx7IGNsb25lU2l0ZTogeyBzdWNjZXNzOiBib29sZWFuOyBuZXdTaXRlSWQ6IHN0cmluZzsgbmV3U2l0ZU5hbWU6IHN0cmluZzsgZXJyb3I6IHN0cmluZyB8IG51bGwgfSB9PihgXG4gICAgICAgIG11dGF0aW9uKCRpbnB1dDogQ2xvbmVTaXRlSW5wdXQhKSB7XG4gICAgICAgICAgY2xvbmVTaXRlKGlucHV0OiAkaW5wdXQpIHsgc3VjY2VzcyBuZXdTaXRlSWQgbmV3U2l0ZU5hbWUgZXJyb3IgfVxuICAgICAgICB9XG4gICAgICBgLCB7IGlucHV0OiB7IHNpdGVJZCwgbmV3TmFtZSB9IH0pO1xuICAgICAgaWYgKCFkYXRhLmNsb25lU2l0ZS5zdWNjZXNzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihkYXRhLmNsb25lU2l0ZS5lcnJvciB8fCAnRmFpbGVkIHRvIGNsb25lIHNpdGUnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH0pO1xuICB9KTtcblxuc2l0ZXNcbiAgLmNvbW1hbmQoJ2V4cG9ydCA8c2l0ZT4nKVxuICAuZGVzY3JpcHRpb24oJ0V4cG9ydCBzaXRlIHRvIHppcCBmaWxlJylcbiAgLm9wdGlvbignLW8sIC0tb3V0cHV0IDxwYXRoPicsICdPdXRwdXQgZmlsZSBwYXRoJylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSwgY21kT3B0aW9ucykgPT4ge1xuICAgIGF3YWl0IHJ1blNpdGVDb21tYW5kKHNpdGUsIHsgYWN0aW9uOiAnRXhwb3J0aW5nJywgc3VjY2Vzc01lc3NhZ2U6IChkYXRhOiB7IGV4cG9ydFNpdGU6IHsgb3V0cHV0UGF0aDogc3RyaW5nIH0gfSkgPT4gYEV4cG9ydGVkIHRvICR7ZGF0YS5leHBvcnRTaXRlLm91dHB1dFBhdGh9YCB9LCBhc3luYyAoZ3FsLCBzaXRlSWQpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwubXV0YXRlPHsgZXhwb3J0U2l0ZTogeyBzdWNjZXNzOiBib29sZWFuOyBvdXRwdXRQYXRoOiBzdHJpbmc7IGVycm9yOiBzdHJpbmcgfCBudWxsIH0gfT4oYFxuICAgICAgICBtdXRhdGlvbigkaW5wdXQ6IEV4cG9ydFNpdGVJbnB1dCEpIHtcbiAgICAgICAgICBleHBvcnRTaXRlKGlucHV0OiAkaW5wdXQpIHsgc3VjY2VzcyBvdXRwdXRQYXRoIGVycm9yIH1cbiAgICAgICAgfVxuICAgICAgYCwgeyBpbnB1dDogeyBzaXRlSWQsIG91dHB1dFBhdGg6IGNtZE9wdGlvbnMub3V0cHV0IH0gfSk7XG4gICAgICBpZiAoIWRhdGEuZXhwb3J0U2l0ZS5zdWNjZXNzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihkYXRhLmV4cG9ydFNpdGUuZXJyb3IgfHwgJ0ZhaWxlZCB0byBleHBvcnQgc2l0ZScpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSk7XG4gIH0pO1xuXG5zaXRlc1xuICAuY29tbWFuZCgnaW1wb3J0IDx6aXBGaWxlPicpXG4gIC5kZXNjcmlwdGlvbignSW1wb3J0IHNpdGUgZnJvbSB6aXAgZmlsZScpXG4gIC5vcHRpb24oJy1uLCAtLW5hbWUgPG5hbWU+JywgJ1NpdGUgbmFtZSAoZGVmYXVsdHMgdG8gemlwIGZpbGVuYW1lKScpXG4gIC5hY3Rpb24oYXN5bmMgKHppcEZpbGUsIGNtZE9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBnbG9iYWxPcHRzID0gcHJvZ3JhbS5vcHRzKCkgYXMgRm9ybWF0dGVyT3B0aW9ucztcbiAgICBjb25zdCBzcGlubmVyID0gZ2xvYmFsT3B0cy5xdWlldCA/IG51bGwgOiBvcmEoYEltcG9ydGluZyBzaXRlLi4uYCkuc3RhcnQoKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBncWwgPSBhd2FpdCBlbnN1cmVDb25uZWN0ZWQoZ2xvYmFsT3B0cyk7XG5cbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwubXV0YXRlPHsgaW1wb3J0U2l0ZTogeyBzdWNjZXNzOiBib29sZWFuOyBzaXRlSWQ6IHN0cmluZzsgc2l0ZU5hbWU6IHN0cmluZzsgZXJyb3I6IHN0cmluZyB8IG51bGwgfSB9PihgXG4gICAgICAgIG11dGF0aW9uKCRpbnB1dDogSW1wb3J0U2l0ZUlucHV0ISkge1xuICAgICAgICAgIGltcG9ydFNpdGUoaW5wdXQ6ICRpbnB1dCkgeyBzdWNjZXNzIHNpdGVJZCBzaXRlTmFtZSBlcnJvciB9XG4gICAgICAgIH1cbiAgICAgIGAsIHsgaW5wdXQ6IHsgemlwUGF0aDogemlwRmlsZSwgc2l0ZU5hbWU6IGNtZE9wdGlvbnMubmFtZSB9IH0pO1xuXG4gICAgICBpZiAoIWRhdGEuaW1wb3J0U2l0ZS5zdWNjZXNzKSB7XG4gICAgICAgIHNwaW5uZXI/LmZhaWwoJ0ltcG9ydCBmYWlsZWQnKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihkYXRhLmltcG9ydFNpdGUuZXJyb3IgfHwgJ0ZhaWxlZCB0byBpbXBvcnQgc2l0ZScpKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuXG4gICAgICBzcGlubmVyPy5zdWNjZWVkKGBJbXBvcnRlZCBcIiR7ZGF0YS5pbXBvcnRTaXRlLnNpdGVOYW1lfVwiICgke2RhdGEuaW1wb3J0U2l0ZS5zaXRlSWR9KWApO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIHNwaW5uZXI/LmZhaWwoJ0ltcG9ydCBmYWlsZWQnKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZXJyb3IubWVzc2FnZSkpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfSk7XG5cbnNpdGVzXG4gIC5jb21tYW5kKCdyZW5hbWUgPHNpdGU+IDxuZXdOYW1lPicpXG4gIC5kZXNjcmlwdGlvbignUmVuYW1lIGEgc2l0ZScpXG4gIC5hY3Rpb24oYXN5bmMgKHNpdGUsIG5ld05hbWUpID0+IHtcbiAgICBhd2FpdCBydW5TaXRlQ29tbWFuZChzaXRlLCB7IGFjdGlvbjogJ1JlbmFtaW5nJywgc3VjY2Vzc01lc3NhZ2U6ICgpID0+IGBSZW5hbWVkIHRvIFwiJHtuZXdOYW1lfVwiYCB9LCBhc3luYyAoZ3FsLCBzaXRlSWQpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwubXV0YXRlPHsgbWNwUmVuYW1lU2l0ZTogeyBzdWNjZXNzOiBib29sZWFuOyBlcnJvcjogc3RyaW5nIHwgbnVsbCB9IH0+KGBcbiAgICAgICAgbXV0YXRpb24oJGlucHV0OiBNY3BSZW5hbWVTaXRlSW5wdXQhKSB7XG4gICAgICAgICAgbWNwUmVuYW1lU2l0ZShpbnB1dDogJGlucHV0KSB7IHN1Y2Nlc3MgZXJyb3IgfVxuICAgICAgICB9XG4gICAgICBgLCB7IGlucHV0OiB7IHNpdGVJZCwgbmV3TmFtZSB9IH0pO1xuICAgICAgaWYgKCFkYXRhLm1jcFJlbmFtZVNpdGUuc3VjY2Vzcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZGF0YS5tY3BSZW5hbWVTaXRlLmVycm9yIHx8ICdGYWlsZWQgdG8gcmVuYW1lIHNpdGUnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH0pO1xuICB9KTtcblxuc2l0ZXNcbiAgLmNvbW1hbmQoJ3NzbCA8c2l0ZT4nKVxuICAuZGVzY3JpcHRpb24oJ1RydXN0IFNTTCBjZXJ0aWZpY2F0ZSBmb3IgYSBzaXRlJylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSkgPT4ge1xuICAgIGF3YWl0IHJ1blNpdGVDb21tYW5kKHNpdGUsIHsgYWN0aW9uOiAnVHJ1c3RpbmcgU1NMIGZvcicsIHN1Y2Nlc3NNZXNzYWdlOiAoKSA9PiBgU1NMIGNlcnRpZmljYXRlIHRydXN0ZWQgZm9yIFwiJHtzaXRlfVwiYCB9LCBhc3luYyAoZ3FsLCBzaXRlSWQpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwubXV0YXRlPHsgdHJ1c3RTc2w6IHsgc3VjY2VzczogYm9vbGVhbjsgZXJyb3I6IHN0cmluZyB8IG51bGwgfSB9PihgXG4gICAgICAgIG11dGF0aW9uKCRpbnB1dDogVHJ1c3RTc2xJbnB1dCEpIHtcbiAgICAgICAgICB0cnVzdFNzbChpbnB1dDogJGlucHV0KSB7IHN1Y2Nlc3MgZXJyb3IgfVxuICAgICAgICB9XG4gICAgICBgLCB7IGlucHV0OiB7IHNpdGVJZCB9IH0pO1xuICAgICAgaWYgKCFkYXRhLnRydXN0U3NsLnN1Y2Nlc3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGRhdGEudHJ1c3RTc2wuZXJyb3IgfHwgJ0ZhaWxlZCB0byB0cnVzdCBTU0wnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH0pO1xuICB9KTtcblxuc2l0ZXNcbiAgLmNvbW1hbmQoJ3BocCA8c2l0ZT4gPHZlcnNpb24+JylcbiAgLmRlc2NyaXB0aW9uKCdDaGFuZ2UgUEhQIHZlcnNpb24gZm9yIGEgc2l0ZScpXG4gIC5hY3Rpb24oYXN5bmMgKHNpdGUsIHZlcnNpb24pID0+IHtcbiAgICBhd2FpdCBydW5TaXRlQ29tbWFuZChzaXRlLCB7IGFjdGlvbjogYENoYW5naW5nIFBIUCB0byAke3ZlcnNpb259IGZvcmAsIHN1Y2Nlc3NNZXNzYWdlOiAoKSA9PiBgUEhQIHZlcnNpb24gY2hhbmdlZCB0byAke3ZlcnNpb259YCB9LCBhc3luYyAoZ3FsLCBzaXRlSWQpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwubXV0YXRlPHsgY2hhbmdlUGhwVmVyc2lvbjogeyBzdWNjZXNzOiBib29sZWFuOyBlcnJvcjogc3RyaW5nIHwgbnVsbCB9IH0+KGBcbiAgICAgICAgbXV0YXRpb24oJGlucHV0OiBDaGFuZ2VQaHBWZXJzaW9uSW5wdXQhKSB7XG4gICAgICAgICAgY2hhbmdlUGhwVmVyc2lvbihpbnB1dDogJGlucHV0KSB7IHN1Y2Nlc3MgZXJyb3IgfVxuICAgICAgICB9XG4gICAgICBgLCB7IGlucHV0OiB7IHNpdGVJZCwgcGhwVmVyc2lvbjogdmVyc2lvbiB9IH0pO1xuICAgICAgaWYgKCFkYXRhLmNoYW5nZVBocFZlcnNpb24uc3VjY2Vzcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZGF0YS5jaGFuZ2VQaHBWZXJzaW9uLmVycm9yIHx8ICdGYWlsZWQgdG8gY2hhbmdlIFBIUCB2ZXJzaW9uJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9KTtcbiAgfSk7XG5cbnNpdGVzXG4gIC5jb21tYW5kKCd4ZGVidWcgPHNpdGU+JylcbiAgLmRlc2NyaXB0aW9uKCdUb2dnbGUgWGRlYnVnIGZvciBhIHNpdGUnKVxuICAub3B0aW9uKCctLW9uJywgJ0VuYWJsZSBYZGVidWcnKVxuICAub3B0aW9uKCctLW9mZicsICdEaXNhYmxlIFhkZWJ1ZycpXG4gIC5hY3Rpb24oYXN5bmMgKHNpdGUsIGNtZE9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBlbmFibGVkID0gY21kT3B0aW9ucy5vbiA/IHRydWUgOiBjbWRPcHRpb25zLm9mZiA/IGZhbHNlIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGFjdGlvbiA9IGVuYWJsZWQgPT09IHVuZGVmaW5lZCA/ICdUb2dnbGluZycgOiBlbmFibGVkID8gJ0VuYWJsaW5nJyA6ICdEaXNhYmxpbmcnO1xuICAgIGF3YWl0IHJ1blNpdGVDb21tYW5kKHNpdGUsIHsgYWN0aW9uOiBgJHthY3Rpb259IFhkZWJ1ZyBmb3JgLCBzdWNjZXNzTWVzc2FnZTogKGRhdGE6IHsgdG9nZ2xlWGRlYnVnOiB7IGVuYWJsZWQ6IGJvb2xlYW4gfSB9KSA9PiBgWGRlYnVnICR7ZGF0YS50b2dnbGVYZGVidWcuZW5hYmxlZCA/ICdlbmFibGVkJyA6ICdkaXNhYmxlZCd9YCB9LCBhc3luYyAoZ3FsLCBzaXRlSWQpID0+IHtcbiAgICAgIC8vIElmIG5vIGZsYWcgc3BlY2lmaWVkLCBnZXQgY3VycmVudCBzdGF0ZSBhbmQgdG9nZ2xlXG4gICAgICBsZXQgdGFyZ2V0RW5hYmxlZCA9IGVuYWJsZWQ7XG4gICAgICBpZiAodGFyZ2V0RW5hYmxlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IHNpdGVEYXRhID0gYXdhaXQgZ3FsLnF1ZXJ5PHsgc2l0ZTogeyB4ZGVidWdFbmFibGVkOiBib29sZWFuIH0gfT4oYFxuICAgICAgICAgIHF1ZXJ5KCRpZDogSUQhKSB7IHNpdGUoaWQ6ICRpZCkgeyB4ZGVidWdFbmFibGVkIH0gfVxuICAgICAgICBgLCB7IGlkOiBzaXRlSWQgfSk7XG4gICAgICAgIHRhcmdldEVuYWJsZWQgPSAhc2l0ZURhdGEuc2l0ZS54ZGVidWdFbmFibGVkO1xuICAgICAgfVxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5tdXRhdGU8eyB0b2dnbGVYZGVidWc6IHsgc3VjY2VzczogYm9vbGVhbjsgZW5hYmxlZDogYm9vbGVhbjsgZXJyb3I6IHN0cmluZyB8IG51bGwgfSB9PihgXG4gICAgICAgIG11dGF0aW9uKCRpbnB1dDogVG9nZ2xlWGRlYnVnSW5wdXQhKSB7XG4gICAgICAgICAgdG9nZ2xlWGRlYnVnKGlucHV0OiAkaW5wdXQpIHsgc3VjY2VzcyBlbmFibGVkIGVycm9yIH1cbiAgICAgICAgfVxuICAgICAgYCwgeyBpbnB1dDogeyBzaXRlSWQsIGVuYWJsZWQ6IHRhcmdldEVuYWJsZWQgfSB9KTtcbiAgICAgIGlmICghZGF0YS50b2dnbGVYZGVidWcuc3VjY2Vzcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZGF0YS50b2dnbGVYZGVidWcuZXJyb3IgfHwgJ0ZhaWxlZCB0byB0b2dnbGUgWGRlYnVnJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9KTtcbiAgfSk7XG5cbnNpdGVzXG4gIC5jb21tYW5kKCdsb2dzIDxzaXRlPicpXG4gIC5kZXNjcmlwdGlvbignR2V0IHNpdGUgbG9ncycpXG4gIC5vcHRpb24oJy10LCAtLXR5cGUgPHR5cGU+JywgJ0xvZyB0eXBlIChwaHB8bmdpbnh8bXlzcWwpJywgJ3BocCcpXG4gIC5vcHRpb24oJy1uLCAtLWxpbmVzIDxuPicsICdOdW1iZXIgb2YgbGluZXMnLCAnNTAnKVxuICAuYWN0aW9uKGFzeW5jIChzaXRlLCBjbWRPcHRpb25zKSA9PiB7XG4gICAgY29uc3QgZ2xvYmFsT3B0cyA9IHByb2dyYW0ub3B0cygpIGFzIEZvcm1hdHRlck9wdGlvbnM7XG4gICAgY29uc3QgZm9ybWF0ID0gZ2V0T3V0cHV0Rm9ybWF0KGdsb2JhbE9wdHMpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGdxbCA9IGF3YWl0IGVuc3VyZUNvbm5lY3RlZChnbG9iYWxPcHRzKTtcbiAgICAgIGNvbnN0IHNpdGVJZCA9IGF3YWl0IGZpbmRTaXRlSWQoZ3FsLCBzaXRlKTtcblxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5tdXRhdGU8eyBnZXRTaXRlTG9nczogeyBzdWNjZXNzOiBib29sZWFuOyBsb2dzOiBzdHJpbmdbXTsgZXJyb3I6IHN0cmluZyB8IG51bGwgfSB9PihgXG4gICAgICAgIG11dGF0aW9uKCRpbnB1dDogR2V0U2l0ZUxvZ3NJbnB1dCEpIHtcbiAgICAgICAgICBnZXRTaXRlTG9ncyhpbnB1dDogJGlucHV0KSB7IHN1Y2Nlc3MgbG9ncyBlcnJvciB9XG4gICAgICAgIH1cbiAgICAgIGAsIHsgaW5wdXQ6IHsgc2l0ZUlkLCBsb2dUeXBlOiBjbWRPcHRpb25zLnR5cGUsIGxpbmVzOiBwYXJzZUludChjbWRPcHRpb25zLmxpbmVzLCAxMCkgfSB9KTtcblxuICAgICAgaWYgKCFkYXRhLmdldFNpdGVMb2dzLnN1Y2Nlc3MpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihkYXRhLmdldFNpdGVMb2dzLmVycm9yIHx8ICdGYWlsZWQgdG8gZ2V0IGxvZ3MnKSk7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZvcm1hdCA9PT0gJ2pzb24nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGRhdGEuZ2V0U2l0ZUxvZ3MubG9ncywgbnVsbCwgMikpO1xuICAgICAgfSBlbHNlIGlmIChkYXRhLmdldFNpdGVMb2dzLmxvZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdObyBsb2dzIGZvdW5kLicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGF0YS5nZXRTaXRlTG9ncy5sb2dzLmZvckVhY2goKGxpbmUpID0+IGNvbnNvbGUubG9nKGxpbmUpKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGVycm9yLm1lc3NhZ2UpKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gIH0pO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBXUC1DTEkgQ29tbWFuZFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCd3cCA8c2l0ZT4gW2FyZ3MuLi5dJylcbiAgLmRlc2NyaXB0aW9uKCdSdW4gV1AtQ0xJIGNvbW1hbmRzIGFnYWluc3QgYSBzaXRlJylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSwgYXJncykgPT4ge1xuICAgIGNvbnN0IGdsb2JhbE9wdHMgPSBwcm9ncmFtLm9wdHMoKSBhcyBGb3JtYXR0ZXJPcHRpb25zO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGdxbCA9IGF3YWl0IGVuc3VyZUNvbm5lY3RlZChnbG9iYWxPcHRzKTtcbiAgICAgIGNvbnN0IHNpdGVJZCA9IGF3YWl0IGZpbmRTaXRlSWQoZ3FsLCBzaXRlKTtcblxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5tdXRhdGU8eyB3cENsaTogeyBzdWNjZXNzOiBib29sZWFuOyBvdXRwdXQ6IHN0cmluZzsgZXJyb3I6IHN0cmluZyB8IG51bGwgfSB9PihgXG4gICAgICAgIG11dGF0aW9uKCRpbnB1dDogV3BDbGlJbnB1dCEpIHtcbiAgICAgICAgICB3cENsaShpbnB1dDogJGlucHV0KSB7IHN1Y2Nlc3Mgb3V0cHV0IGVycm9yIH1cbiAgICAgICAgfVxuICAgICAgYCwgeyBpbnB1dDogeyBzaXRlSWQsIGFyZ3MgfSB9KTtcblxuICAgICAgaWYgKCFkYXRhLndwQ2xpLnN1Y2Nlc3MpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihkYXRhLndwQ2xpLmVycm9yIHx8ICdXUC1DTEkgY29tbWFuZCBmYWlsZWQnKSk7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cblxuICAgICAgY29uc29sZS5sb2coZGF0YS53cENsaS5vdXRwdXQpO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZXJyb3IubWVzc2FnZSkpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfSk7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEluZm8gQ29tbWFuZFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdpbmZvJylcbiAgLmRlc2NyaXB0aW9uKCdTaG93IExvY2FsIGFwcGxpY2F0aW9uIGluZm8nKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBnbG9iYWxPcHRzID0gcHJvZ3JhbS5vcHRzKCkgYXMgRm9ybWF0dGVyT3B0aW9ucztcbiAgICBjb25zdCBmb3JtYXQgPSBnZXRPdXRwdXRGb3JtYXQoZ2xvYmFsT3B0cyk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZ3FsID0gYXdhaXQgZW5zdXJlQ29ubmVjdGVkKGdsb2JhbE9wdHMpO1xuXG4gICAgICAvLyBHZXQgc2l0ZXMgY291bnQgYW5kIGJhc2ljIGluZm9cbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwucXVlcnk8eyBzaXRlczogQXJyYXk8eyBpZDogc3RyaW5nOyBzdGF0dXM6IHN0cmluZyB9PiB9PihgXG4gICAgICAgIHF1ZXJ5IHsgc2l0ZXMgeyBpZCBzdGF0dXMgfSB9XG4gICAgICBgKTtcblxuICAgICAgY29uc3QgcnVubmluZyA9IGRhdGEuc2l0ZXMuZmlsdGVyKChzKSA9PiBzLnN0YXR1cy50b0xvd2VyQ2FzZSgpID09PSAncnVubmluZycpLmxlbmd0aDtcbiAgICAgIGNvbnN0IHN0b3BwZWQgPSBkYXRhLnNpdGVzLmZpbHRlcigocykgPT4gcy5zdGF0dXMudG9Mb3dlckNhc2UoKSAhPT0gJ3J1bm5pbmcnKS5sZW5ndGg7XG5cbiAgICAgIGNvbnN0IGluZm8gPSB7XG4gICAgICAgIHRvdGFsU2l0ZXM6IGRhdGEuc2l0ZXMubGVuZ3RoLFxuICAgICAgICBydW5uaW5nU2l0ZXM6IHJ1bm5pbmcsXG4gICAgICAgIHN0b3BwZWRTaXRlczogc3RvcHBlZCxcbiAgICAgICAgZ3JhcGhxbEVuZHBvaW50OiBjbGllbnQ/LlsndXJsJ10gfHwgJ2Nvbm5lY3RlZCcsXG4gICAgICB9O1xuXG4gICAgICBjb25zb2xlLmxvZyhmb3JtYXRTaXRlRGV0YWlsKGluZm8sIGZvcm1hdCwgeyBub0NvbG9yOiBnbG9iYWxPcHRzLm5vQ29sb3IgfSkpO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZXJyb3IubWVzc2FnZSkpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfSk7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFNlcnZpY2VzIENvbW1hbmRcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxucHJvZ3JhbVxuICAuY29tbWFuZCgnc2VydmljZXMnKVxuICAuZGVzY3JpcHRpb24oJ0xpc3QgYXZhaWxhYmxlIHNlcnZpY2UgdmVyc2lvbnMnKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBnbG9iYWxPcHRzID0gcHJvZ3JhbS5vcHRzKCkgYXMgRm9ybWF0dGVyT3B0aW9ucztcbiAgICBjb25zdCBmb3JtYXQgPSBnZXRPdXRwdXRGb3JtYXQoZ2xvYmFsT3B0cyk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZ3FsID0gYXdhaXQgZW5zdXJlQ29ubmVjdGVkKGdsb2JhbE9wdHMpO1xuXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLnF1ZXJ5PHsgbGlzdFNlcnZpY2VzOiB7IHN1Y2Nlc3M6IGJvb2xlYW47IHNlcnZpY2VzOiBBcnJheTx7IHJvbGU6IHN0cmluZzsgbmFtZTogc3RyaW5nOyB2ZXJzaW9uOiBzdHJpbmcgfT47IGVycm9yOiBzdHJpbmcgfCBudWxsIH0gfT4oYFxuICAgICAgICBxdWVyeSB7XG4gICAgICAgICAgbGlzdFNlcnZpY2VzIHtcbiAgICAgICAgICAgIHN1Y2Nlc3NcbiAgICAgICAgICAgIHNlcnZpY2VzIHsgcm9sZSBuYW1lIHZlcnNpb24gfVxuICAgICAgICAgICAgZXJyb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGApO1xuXG4gICAgICBpZiAoIWRhdGEubGlzdFNlcnZpY2VzLnN1Y2Nlc3MpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihkYXRhLmxpc3RTZXJ2aWNlcy5lcnJvciB8fCAnRmFpbGVkIHRvIGxpc3Qgc2VydmljZXMnKSk7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZvcm1hdCA9PT0gJ2pzb24nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGRhdGEubGlzdFNlcnZpY2VzLnNlcnZpY2VzLCBudWxsLCAyKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBncm91cGVkOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBzdmMgb2YgZGF0YS5saXN0U2VydmljZXMuc2VydmljZXMpIHtcbiAgICAgICAgICBpZiAoIWdyb3VwZWRbc3ZjLnJvbGVdKSBncm91cGVkW3N2Yy5yb2xlXSA9IFtdO1xuICAgICAgICAgIGdyb3VwZWRbc3ZjLnJvbGVdLnB1c2goYCR7c3ZjLnZlcnNpb259ICgke3N2Yy5uYW1lfSlgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgW3JvbGUsIHZlcnNpb25zXSBvZiBPYmplY3QuZW50cmllcyhncm91cGVkKSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBcXG4ke3JvbGUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyByb2xlLnNsaWNlKDEpfSBWZXJzaW9uczpgKTtcbiAgICAgICAgICB2ZXJzaW9ucy5mb3JFYWNoKCh2KSA9PiBjb25zb2xlLmxvZyhgICAtICR7dn1gKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGVycm9yLm1lc3NhZ2UpKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gIH0pO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBCbHVlcHJpbnRzIENvbW1hbmRcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuY29uc3QgYmx1ZXByaW50cyA9IHByb2dyYW0uY29tbWFuZCgnYmx1ZXByaW50cycpLmRlc2NyaXB0aW9uKCdNYW5hZ2UgYmx1ZXByaW50cycpO1xuXG5ibHVlcHJpbnRzXG4gIC5jb21tYW5kKCdsaXN0JylcbiAgLmRlc2NyaXB0aW9uKCdMaXN0IGF2YWlsYWJsZSBibHVlcHJpbnRzJylcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZ2xvYmFsT3B0cyA9IHByb2dyYW0ub3B0cygpIGFzIEZvcm1hdHRlck9wdGlvbnM7XG4gICAgY29uc3QgZm9ybWF0ID0gZ2V0T3V0cHV0Rm9ybWF0KGdsb2JhbE9wdHMpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGdxbCA9IGF3YWl0IGVuc3VyZUNvbm5lY3RlZChnbG9iYWxPcHRzKTtcblxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5xdWVyeTx7IGJsdWVwcmludHM6IHsgc3VjY2VzczogYm9vbGVhbjsgYmx1ZXByaW50czogQXJyYXk8eyBuYW1lOiBzdHJpbmcgfT47IGVycm9yOiBzdHJpbmcgfCBudWxsIH0gfT4oYFxuICAgICAgICBxdWVyeSB7XG4gICAgICAgICAgYmx1ZXByaW50cyB7XG4gICAgICAgICAgICBzdWNjZXNzXG4gICAgICAgICAgICBibHVlcHJpbnRzIHsgbmFtZSB9XG4gICAgICAgICAgICBlcnJvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgYCk7XG5cbiAgICAgIGlmICghZGF0YS5ibHVlcHJpbnRzLnN1Y2Nlc3MpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihkYXRhLmJsdWVwcmludHMuZXJyb3IgfHwgJ0ZhaWxlZCB0byBsaXN0IGJsdWVwcmludHMnKSk7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZvcm1hdCA9PT0gJ2pzb24nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGRhdGEuYmx1ZXByaW50cy5ibHVlcHJpbnRzLCBudWxsLCAyKSk7XG4gICAgICB9IGVsc2UgaWYgKGRhdGEuYmx1ZXByaW50cy5ibHVlcHJpbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjb25zb2xlLmxvZygnTm8gYmx1ZXByaW50cyBmb3VuZC4nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdCbHVlcHJpbnRzOicpO1xuICAgICAgICBkYXRhLmJsdWVwcmludHMuYmx1ZXByaW50cy5mb3JFYWNoKChiKSA9PiBjb25zb2xlLmxvZyhgICAtICR7Yi5uYW1lfWApKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGVycm9yLm1lc3NhZ2UpKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gIH0pO1xuXG5ibHVlcHJpbnRzXG4gIC5jb21tYW5kKCdzYXZlIDxzaXRlPiA8bmFtZT4nKVxuICAuZGVzY3JpcHRpb24oJ1NhdmUgYSBzaXRlIGFzIGEgYmx1ZXByaW50JylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSwgbmFtZSkgPT4ge1xuICAgIGF3YWl0IHJ1blNpdGVDb21tYW5kKHNpdGUsIHsgYWN0aW9uOiAnU2F2aW5nIGJsdWVwcmludCBmcm9tJywgc3VjY2Vzc01lc3NhZ2U6ICgpID0+IGBTYXZlZCBibHVlcHJpbnQgXCIke25hbWV9XCJgIH0sIGFzeW5jIChncWwsIHNpdGVJZCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5tdXRhdGU8eyBzYXZlQmx1ZXByaW50OiB7IHN1Y2Nlc3M6IGJvb2xlYW47IGVycm9yOiBzdHJpbmcgfCBudWxsIH0gfT4oYFxuICAgICAgICBtdXRhdGlvbigkaW5wdXQ6IFNhdmVCbHVlcHJpbnRJbnB1dCEpIHtcbiAgICAgICAgICBzYXZlQmx1ZXByaW50KGlucHV0OiAkaW5wdXQpIHsgc3VjY2VzcyBlcnJvciB9XG4gICAgICAgIH1cbiAgICAgIGAsIHsgaW5wdXQ6IHsgc2l0ZUlkLCBuYW1lIH0gfSk7XG4gICAgICBpZiAoIWRhdGEuc2F2ZUJsdWVwcmludC5zdWNjZXNzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihkYXRhLnNhdmVCbHVlcHJpbnQuZXJyb3IgfHwgJ0ZhaWxlZCB0byBzYXZlIGJsdWVwcmludCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSk7XG4gIH0pO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBEYXRhYmFzZSBDb21tYW5kc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5jb25zdCBkYiA9IHByb2dyYW0uY29tbWFuZCgnZGInKS5kZXNjcmlwdGlvbignRGF0YWJhc2Ugb3BlcmF0aW9ucycpO1xuXG5kYlxuICAuY29tbWFuZCgnZXhwb3J0IDxzaXRlPicpXG4gIC5kZXNjcmlwdGlvbignRXhwb3J0IGRhdGFiYXNlIHRvIFNRTCBmaWxlJylcbiAgLm9wdGlvbignLW8sIC0tb3V0cHV0IDxwYXRoPicsICdPdXRwdXQgZmlsZSBwYXRoJylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSwgY21kT3B0aW9ucykgPT4ge1xuICAgIGF3YWl0IHJ1blNpdGVDb21tYW5kKHNpdGUsIHsgYWN0aW9uOiAnRXhwb3J0aW5nIGRhdGFiYXNlIGZvcicsIHN1Y2Nlc3NNZXNzYWdlOiAoZGF0YTogeyBleHBvcnREYXRhYmFzZTogeyBvdXRwdXRQYXRoOiBzdHJpbmcgfSB9KSA9PiBgRXhwb3J0ZWQgdG8gJHtkYXRhLmV4cG9ydERhdGFiYXNlLm91dHB1dFBhdGh9YCB9LCBhc3luYyAoZ3FsLCBzaXRlSWQpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwubXV0YXRlPHsgZXhwb3J0RGF0YWJhc2U6IHsgc3VjY2VzczogYm9vbGVhbjsgb3V0cHV0UGF0aDogc3RyaW5nOyBlcnJvcjogc3RyaW5nIHwgbnVsbCB9IH0+KGBcbiAgICAgICAgbXV0YXRpb24oJGlucHV0OiBFeHBvcnREYXRhYmFzZUlucHV0ISkge1xuICAgICAgICAgIGV4cG9ydERhdGFiYXNlKGlucHV0OiAkaW5wdXQpIHsgc3VjY2VzcyBvdXRwdXRQYXRoIGVycm9yIH1cbiAgICAgICAgfVxuICAgICAgYCwgeyBpbnB1dDogeyBzaXRlSWQsIG91dHB1dFBhdGg6IGNtZE9wdGlvbnMub3V0cHV0IH0gfSk7XG4gICAgICBpZiAoIWRhdGEuZXhwb3J0RGF0YWJhc2Uuc3VjY2Vzcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZGF0YS5leHBvcnREYXRhYmFzZS5lcnJvciB8fCAnRmFpbGVkIHRvIGV4cG9ydCBkYXRhYmFzZScpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSk7XG4gIH0pO1xuXG5kYlxuICAuY29tbWFuZCgnaW1wb3J0IDxzaXRlPiA8c3FsRmlsZT4nKVxuICAuZGVzY3JpcHRpb24oJ0ltcG9ydCBTUUwgZmlsZSBpbnRvIGRhdGFiYXNlJylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSwgc3FsRmlsZSkgPT4ge1xuICAgIGF3YWl0IHJ1blNpdGVDb21tYW5kKHNpdGUsIHsgYWN0aW9uOiAnSW1wb3J0aW5nIGRhdGFiYXNlIGZvcicsIHN1Y2Nlc3NNZXNzYWdlOiAoKSA9PiAnRGF0YWJhc2UgaW1wb3J0ZWQgc3VjY2Vzc2Z1bGx5JyB9LCBhc3luYyAoZ3FsLCBzaXRlSWQpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwubXV0YXRlPHsgaW1wb3J0RGF0YWJhc2U6IHsgc3VjY2VzczogYm9vbGVhbjsgZXJyb3I6IHN0cmluZyB8IG51bGwgfSB9PihgXG4gICAgICAgIG11dGF0aW9uKCRpbnB1dDogSW1wb3J0RGF0YWJhc2VJbnB1dCEpIHtcbiAgICAgICAgICBpbXBvcnREYXRhYmFzZShpbnB1dDogJGlucHV0KSB7IHN1Y2Nlc3MgZXJyb3IgfVxuICAgICAgICB9XG4gICAgICBgLCB7IGlucHV0OiB7IHNpdGVJZCwgc3FsUGF0aDogc3FsRmlsZSB9IH0pO1xuICAgICAgaWYgKCFkYXRhLmltcG9ydERhdGFiYXNlLnN1Y2Nlc3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGRhdGEuaW1wb3J0RGF0YWJhc2UuZXJyb3IgfHwgJ0ZhaWxlZCB0byBpbXBvcnQgZGF0YWJhc2UnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH0pO1xuICB9KTtcblxuZGJcbiAgLmNvbW1hbmQoJ2FkbWluZXIgPHNpdGU+JylcbiAgLmRlc2NyaXB0aW9uKCdPcGVuIEFkbWluZXIgZGF0YWJhc2UgVUknKVxuICAuYWN0aW9uKGFzeW5jIChzaXRlKSA9PiB7XG4gICAgYXdhaXQgcnVuU2l0ZUNvbW1hbmQoc2l0ZSwgeyBhY3Rpb246ICdPcGVuaW5nIEFkbWluZXIgZm9yJywgc3VjY2Vzc01lc3NhZ2U6ICgpID0+ICdPcGVuZWQgQWRtaW5lcicgfSwgYXN5bmMgKGdxbCwgc2l0ZUlkKSA9PiB7XG4gICAgICByZXR1cm4gZ3FsLm11dGF0ZShgXG4gICAgICAgIG11dGF0aW9uKCRpbnB1dDogT3BlbkFkbWluZXJJbnB1dCEpIHtcbiAgICAgICAgICBvcGVuQWRtaW5lcihpbnB1dDogJGlucHV0KSB7IHN1Y2Nlc3MgZXJyb3IgfVxuICAgICAgICB9XG4gICAgICBgLCB7IGlucHV0OiB7IHNpdGVJZCB9IH0pO1xuICAgIH0pO1xuICB9KTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQmFja3VwcyBDb21tYW5kc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5jb25zdCBiYWNrdXBzID0gcHJvZ3JhbS5jb21tYW5kKCdiYWNrdXBzJykuZGVzY3JpcHRpb24oJ0Nsb3VkIGJhY2t1cCBvcGVyYXRpb25zJyk7XG5cbmJhY2t1cHNcbiAgLmNvbW1hbmQoJ3N0YXR1cycpXG4gIC5kZXNjcmlwdGlvbignQ2hlY2sgYmFja3VwIHNlcnZpY2UgYXZhaWxhYmlsaXR5JylcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZ2xvYmFsT3B0cyA9IHByb2dyYW0ub3B0cygpIGFzIEZvcm1hdHRlck9wdGlvbnM7XG4gICAgY29uc3QgZm9ybWF0ID0gZ2V0T3V0cHV0Rm9ybWF0KGdsb2JhbE9wdHMpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGdxbCA9IGF3YWl0IGVuc3VyZUNvbm5lY3RlZChnbG9iYWxPcHRzKTtcblxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5xdWVyeTx7IGJhY2t1cFN0YXR1czogeyBhdmFpbGFibGU6IGJvb2xlYW47IGZlYXR1cmVFbmFibGVkOiBib29sZWFuOyBkcm9wYm94OiBhbnk7IGdvb2dsZURyaXZlOiBhbnkgfSB9PihgXG4gICAgICAgIHF1ZXJ5IHtcbiAgICAgICAgICBiYWNrdXBTdGF0dXMge1xuICAgICAgICAgICAgYXZhaWxhYmxlXG4gICAgICAgICAgICBmZWF0dXJlRW5hYmxlZFxuICAgICAgICAgICAgZHJvcGJveCB7IGF1dGhlbnRpY2F0ZWQgYWNjb3VudElkIGVtYWlsIH1cbiAgICAgICAgICAgIGdvb2dsZURyaXZlIHsgYXV0aGVudGljYXRlZCBhY2NvdW50SWQgZW1haWwgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgYCk7XG5cbiAgICAgIGlmIChmb3JtYXQgPT09ICdqc29uJykge1xuICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShkYXRhLmJhY2t1cFN0YXR1cywgbnVsbCwgMikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gZGF0YS5iYWNrdXBTdGF0dXM7XG4gICAgICAgIGNvbnNvbGUubG9nKGBcXG5CYWNrdXAgU3RhdHVzOmApO1xuICAgICAgICBjb25zb2xlLmxvZyhgICBBdmFpbGFibGU6ICR7c3RhdHVzLmF2YWlsYWJsZSA/ICdZZXMnIDogJ05vJ31gKTtcbiAgICAgICAgY29uc29sZS5sb2coYCAgRmVhdHVyZSBFbmFibGVkOiAke3N0YXR1cy5mZWF0dXJlRW5hYmxlZCA/ICdZZXMnIDogJ05vJ31gKTtcbiAgICAgICAgaWYgKHN0YXR1cy5kcm9wYm94KSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYFxcbiAgRHJvcGJveDogJHtzdGF0dXMuZHJvcGJveC5hdXRoZW50aWNhdGVkID8gYENvbm5lY3RlZCAoJHtzdGF0dXMuZHJvcGJveC5lbWFpbH0pYCA6ICdOb3QgY29ubmVjdGVkJ31gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhdHVzLmdvb2dsZURyaXZlKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgR29vZ2xlIERyaXZlOiAke3N0YXR1cy5nb29nbGVEcml2ZS5hdXRoZW50aWNhdGVkID8gYENvbm5lY3RlZCAoJHtzdGF0dXMuZ29vZ2xlRHJpdmUuZW1haWx9KWAgOiAnTm90IGNvbm5lY3RlZCd9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGVycm9yLm1lc3NhZ2UpKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gIH0pO1xuXG5iYWNrdXBzXG4gIC5jb21tYW5kKCdsaXN0IDxzaXRlPicpXG4gIC5kZXNjcmlwdGlvbignTGlzdCBiYWNrdXBzIGZvciBhIHNpdGUnKVxuICAub3B0aW9uKCctcCwgLS1wcm92aWRlciA8cHJvdmlkZXI+JywgJ0JhY2t1cCBwcm92aWRlciAoZHJvcGJveHxnb29nbGVEcml2ZSknLCAnZHJvcGJveCcpXG4gIC5hY3Rpb24oYXN5bmMgKHNpdGUsIGNtZE9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBnbG9iYWxPcHRzID0gcHJvZ3JhbS5vcHRzKCkgYXMgRm9ybWF0dGVyT3B0aW9ucztcbiAgICBjb25zdCBmb3JtYXQgPSBnZXRPdXRwdXRGb3JtYXQoZ2xvYmFsT3B0cyk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZ3FsID0gYXdhaXQgZW5zdXJlQ29ubmVjdGVkKGdsb2JhbE9wdHMpO1xuICAgICAgY29uc3Qgc2l0ZUlkID0gYXdhaXQgZmluZFNpdGVJZChncWwsIHNpdGUpO1xuXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLnF1ZXJ5PHsgbGlzdEJhY2t1cHM6IHsgc3VjY2VzczogYm9vbGVhbjsgYmFja3VwczogQXJyYXk8eyBzbmFwc2hvdElkOiBzdHJpbmc7IHRpbWVzdGFtcDogc3RyaW5nOyBub3RlOiBzdHJpbmcgfT47IGVycm9yOiBzdHJpbmcgfCBudWxsIH0gfT4oYFxuICAgICAgICBxdWVyeSgkc2l0ZUlkOiBJRCEsICRwcm92aWRlcjogU3RyaW5nISkge1xuICAgICAgICAgIGxpc3RCYWNrdXBzKHNpdGVJZDogJHNpdGVJZCwgcHJvdmlkZXI6ICRwcm92aWRlcikge1xuICAgICAgICAgICAgc3VjY2Vzc1xuICAgICAgICAgICAgYmFja3VwcyB7IHNuYXBzaG90SWQgdGltZXN0YW1wIG5vdGUgfVxuICAgICAgICAgICAgZXJyb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGAsIHsgc2l0ZUlkLCBwcm92aWRlcjogY21kT3B0aW9ucy5wcm92aWRlciB9KTtcblxuICAgICAgaWYgKCFkYXRhLmxpc3RCYWNrdXBzLnN1Y2Nlc3MpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihkYXRhLmxpc3RCYWNrdXBzLmVycm9yIHx8ICdGYWlsZWQgdG8gbGlzdCBiYWNrdXBzJykpO1xuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChmb3JtYXQgPT09ICdqc29uJykge1xuICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShkYXRhLmxpc3RCYWNrdXBzLmJhY2t1cHMsIG51bGwsIDIpKTtcbiAgICAgIH0gZWxzZSBpZiAoZGF0YS5saXN0QmFja3Vwcy5iYWNrdXBzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjb25zb2xlLmxvZygnTm8gYmFja3VwcyBmb3VuZC4nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBcXG5CYWNrdXBzICgke2NtZE9wdGlvbnMucHJvdmlkZXJ9KTpgKTtcbiAgICAgICAgZm9yIChjb25zdCBiYWNrdXAgb2YgZGF0YS5saXN0QmFja3Vwcy5iYWNrdXBzKSB7XG4gICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKGJhY2t1cC50aW1lc3RhbXApLnRvTG9jYWxlU3RyaW5nKCk7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgJHtiYWNrdXAuc25hcHNob3RJZH0gLSAke2RhdGV9JHtiYWNrdXAubm90ZSA/IGAgLSAke2JhY2t1cC5ub3RlfWAgOiAnJ31gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZXJyb3IubWVzc2FnZSkpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfSk7XG5cbmJhY2t1cHNcbiAgLmNvbW1hbmQoJ2NyZWF0ZSA8c2l0ZT4nKVxuICAuZGVzY3JpcHRpb24oJ0NyZWF0ZSBhIGJhY2t1cCcpXG4gIC5vcHRpb24oJy1wLCAtLXByb3ZpZGVyIDxwcm92aWRlcj4nLCAnQmFja3VwIHByb3ZpZGVyIChkcm9wYm94fGdvb2dsZURyaXZlKScsICdkcm9wYm94JylcbiAgLm9wdGlvbignLW4sIC0tbm90ZSA8bm90ZT4nLCAnQmFja3VwIG5vdGUnKVxuICAuYWN0aW9uKGFzeW5jIChzaXRlLCBjbWRPcHRpb25zKSA9PiB7XG4gICAgYXdhaXQgcnVuU2l0ZUNvbW1hbmQoc2l0ZSwgeyBhY3Rpb246ICdDcmVhdGluZyBiYWNrdXAgZm9yJywgc3VjY2Vzc01lc3NhZ2U6IChkYXRhOiB7IGNyZWF0ZUJhY2t1cDogeyBzbmFwc2hvdElkOiBzdHJpbmcgfSB9KSA9PiBgQmFja3VwIGNyZWF0ZWQ6ICR7ZGF0YS5jcmVhdGVCYWNrdXAuc25hcHNob3RJZH1gIH0sIGFzeW5jIChncWwsIHNpdGVJZCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5tdXRhdGU8eyBjcmVhdGVCYWNrdXA6IHsgc3VjY2VzczogYm9vbGVhbjsgc25hcHNob3RJZDogc3RyaW5nOyBlcnJvcjogc3RyaW5nIHwgbnVsbCB9IH0+KGBcbiAgICAgICAgbXV0YXRpb24oJHNpdGVJZDogSUQhLCAkcHJvdmlkZXI6IFN0cmluZyEsICRub3RlOiBTdHJpbmcpIHtcbiAgICAgICAgICBjcmVhdGVCYWNrdXAoc2l0ZUlkOiAkc2l0ZUlkLCBwcm92aWRlcjogJHByb3ZpZGVyLCBub3RlOiAkbm90ZSkge1xuICAgICAgICAgICAgc3VjY2VzcyBzbmFwc2hvdElkIGVycm9yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBgLCB7IHNpdGVJZCwgcHJvdmlkZXI6IGNtZE9wdGlvbnMucHJvdmlkZXIsIG5vdGU6IGNtZE9wdGlvbnMubm90ZSB9KTtcbiAgICAgIGlmICghZGF0YS5jcmVhdGVCYWNrdXAuc3VjY2Vzcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZGF0YS5jcmVhdGVCYWNrdXAuZXJyb3IgfHwgJ0ZhaWxlZCB0byBjcmVhdGUgYmFja3VwJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9KTtcbiAgfSk7XG5cbmJhY2t1cHNcbiAgLmNvbW1hbmQoJ3Jlc3RvcmUgPHNpdGU+IDxzbmFwc2hvdElkPicpXG4gIC5kZXNjcmlwdGlvbignUmVzdG9yZSBmcm9tIGJhY2t1cCcpXG4gIC5vcHRpb24oJy1wLCAtLXByb3ZpZGVyIDxwcm92aWRlcj4nLCAnQmFja3VwIHByb3ZpZGVyIChkcm9wYm94fGdvb2dsZURyaXZlKScsICdkcm9wYm94JylcbiAgLm9wdGlvbignLXksIC0teWVzJywgJ1NraXAgY29uZmlybWF0aW9uJylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSwgc25hcHNob3RJZCwgY21kT3B0aW9ucykgPT4ge1xuICAgIGF3YWl0IHJ1blNpdGVDb21tYW5kKHNpdGUsIHsgYWN0aW9uOiAnUmVzdG9yaW5nIGJhY2t1cCBmb3InLCBzdWNjZXNzTWVzc2FnZTogKGRhdGE6IHsgcmVzdG9yZUJhY2t1cDogeyBtZXNzYWdlOiBzdHJpbmcgfSB9KSA9PiBkYXRhLnJlc3RvcmVCYWNrdXAubWVzc2FnZSB8fCAnQmFja3VwIHJlc3RvcmVkIHN1Y2Nlc3NmdWxseScgfSwgYXN5bmMgKGdxbCwgc2l0ZUlkKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLm11dGF0ZTx7IHJlc3RvcmVCYWNrdXA6IHsgc3VjY2VzczogYm9vbGVhbjsgbWVzc2FnZTogc3RyaW5nOyBlcnJvcjogc3RyaW5nIHwgbnVsbCB9IH0+KGBcbiAgICAgICAgbXV0YXRpb24oJHNpdGVJZDogSUQhLCAkcHJvdmlkZXI6IFN0cmluZyEsICRzbmFwc2hvdElkOiBTdHJpbmchLCAkY29uZmlybTogQm9vbGVhbikge1xuICAgICAgICAgIHJlc3RvcmVCYWNrdXAoc2l0ZUlkOiAkc2l0ZUlkLCBwcm92aWRlcjogJHByb3ZpZGVyLCBzbmFwc2hvdElkOiAkc25hcHNob3RJZCwgY29uZmlybTogJGNvbmZpcm0pIHtcbiAgICAgICAgICAgIHN1Y2Nlc3MgbWVzc2FnZSBlcnJvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgYCwgeyBzaXRlSWQsIHByb3ZpZGVyOiBjbWRPcHRpb25zLnByb3ZpZGVyLCBzbmFwc2hvdElkLCBjb25maXJtOiBjbWRPcHRpb25zLnllcyB8fCBmYWxzZSB9KTtcbiAgICAgIGlmICghZGF0YS5yZXN0b3JlQmFja3VwLnN1Y2Nlc3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGRhdGEucmVzdG9yZUJhY2t1cC5lcnJvciB8fCAnRmFpbGVkIHRvIHJlc3RvcmUgYmFja3VwJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9KTtcbiAgfSk7XG5cbmJhY2t1cHNcbiAgLmNvbW1hbmQoJ2RlbGV0ZSA8c2l0ZT4gPHNuYXBzaG90SWQ+JylcbiAgLmRlc2NyaXB0aW9uKCdEZWxldGUgYSBiYWNrdXAnKVxuICAub3B0aW9uKCctcCwgLS1wcm92aWRlciA8cHJvdmlkZXI+JywgJ0JhY2t1cCBwcm92aWRlciAoZHJvcGJveHxnb29nbGVEcml2ZSknLCAnZHJvcGJveCcpXG4gIC5vcHRpb24oJy15LCAtLXllcycsICdTa2lwIGNvbmZpcm1hdGlvbicpXG4gIC5hY3Rpb24oYXN5bmMgKHNpdGUsIHNuYXBzaG90SWQsIGNtZE9wdGlvbnMpID0+IHtcbiAgICBhd2FpdCBydW5TaXRlQ29tbWFuZChzaXRlLCB7IGFjdGlvbjogJ0RlbGV0aW5nIGJhY2t1cCBmb3InLCBzdWNjZXNzTWVzc2FnZTogKCkgPT4gJ0JhY2t1cCBkZWxldGVkJyB9LCBhc3luYyAoZ3FsLCBzaXRlSWQpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwubXV0YXRlPHsgZGVsZXRlQmFja3VwOiB7IHN1Y2Nlc3M6IGJvb2xlYW47IGVycm9yOiBzdHJpbmcgfCBudWxsIH0gfT4oYFxuICAgICAgICBtdXRhdGlvbigkc2l0ZUlkOiBJRCEsICRwcm92aWRlcjogU3RyaW5nISwgJHNuYXBzaG90SWQ6IFN0cmluZyEsICRjb25maXJtOiBCb29sZWFuKSB7XG4gICAgICAgICAgZGVsZXRlQmFja3VwKHNpdGVJZDogJHNpdGVJZCwgcHJvdmlkZXI6ICRwcm92aWRlciwgc25hcHNob3RJZDogJHNuYXBzaG90SWQsIGNvbmZpcm06ICRjb25maXJtKSB7XG4gICAgICAgICAgICBzdWNjZXNzIGVycm9yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBgLCB7IHNpdGVJZCwgcHJvdmlkZXI6IGNtZE9wdGlvbnMucHJvdmlkZXIsIHNuYXBzaG90SWQsIGNvbmZpcm06IGNtZE9wdGlvbnMueWVzIHx8IGZhbHNlIH0pO1xuICAgICAgaWYgKCFkYXRhLmRlbGV0ZUJhY2t1cC5zdWNjZXNzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihkYXRhLmRlbGV0ZUJhY2t1cC5lcnJvciB8fCAnRmFpbGVkIHRvIGRlbGV0ZSBiYWNrdXAnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH0pO1xuICB9KTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gV1AgRW5naW5lIENvbW1hbmRzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmNvbnN0IHdwZSA9IHByb2dyYW0uY29tbWFuZCgnd3BlJykuZGVzY3JpcHRpb24oJ1dQIEVuZ2luZSBzeW5jIG9wZXJhdGlvbnMnKTtcblxud3BlXG4gIC5jb21tYW5kKCdzdGF0dXMnKVxuICAuZGVzY3JpcHRpb24oJ0NoZWNrIFdQIEVuZ2luZSBhdXRoZW50aWNhdGlvbiBzdGF0dXMnKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBnbG9iYWxPcHRzID0gcHJvZ3JhbS5vcHRzKCkgYXMgRm9ybWF0dGVyT3B0aW9ucztcbiAgICBjb25zdCBmb3JtYXQgPSBnZXRPdXRwdXRGb3JtYXQoZ2xvYmFsT3B0cyk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZ3FsID0gYXdhaXQgZW5zdXJlQ29ubmVjdGVkKGdsb2JhbE9wdHMpO1xuXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLnF1ZXJ5PHsgd3BlU3RhdHVzOiB7IGF1dGhlbnRpY2F0ZWQ6IGJvb2xlYW47IGVtYWlsOiBzdHJpbmc7IGFjY291bnRJZDogc3RyaW5nOyBhY2NvdW50TmFtZTogc3RyaW5nIH0gfT4oYFxuICAgICAgICBxdWVyeSB7XG4gICAgICAgICAgd3BlU3RhdHVzIHtcbiAgICAgICAgICAgIGF1dGhlbnRpY2F0ZWRcbiAgICAgICAgICAgIGVtYWlsXG4gICAgICAgICAgICBhY2NvdW50SWRcbiAgICAgICAgICAgIGFjY291bnROYW1lXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBgKTtcblxuICAgICAgaWYgKGZvcm1hdCA9PT0gJ2pzb24nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGRhdGEud3BlU3RhdHVzLCBudWxsLCAyKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSBkYXRhLndwZVN0YXR1cztcbiAgICAgICAgaWYgKHN0YXR1cy5hdXRoZW50aWNhdGVkKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYFxcbldQIEVuZ2luZTogQ29ubmVjdGVkYCk7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgRW1haWw6ICR7c3RhdHVzLmVtYWlsfWApO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGAgIEFjY291bnQ6ICR7c3RhdHVzLmFjY291bnROYW1lfSAoJHtzdGF0dXMuYWNjb3VudElkfSlgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgXFxuV1AgRW5naW5lOiBOb3QgY29ubmVjdGVkYCk7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgUnVuICdsd3Agd3BlIGxvZ2luJyB0byBhdXRoZW50aWNhdGVgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZXJyb3IubWVzc2FnZSkpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfSk7XG5cbndwZVxuICAuY29tbWFuZCgnbG9naW4nKVxuICAuZGVzY3JpcHRpb24oJ0F1dGhlbnRpY2F0ZSB3aXRoIFdQIEVuZ2luZScpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGdsb2JhbE9wdHMgPSBwcm9ncmFtLm9wdHMoKSBhcyBGb3JtYXR0ZXJPcHRpb25zO1xuICAgIGNvbnN0IHNwaW5uZXIgPSBnbG9iYWxPcHRzLnF1aWV0ID8gbnVsbCA6IG9yYShgT3BlbmluZyBXUCBFbmdpbmUgbG9naW4uLi5gKS5zdGFydCgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGdxbCA9IGF3YWl0IGVuc3VyZUNvbm5lY3RlZChnbG9iYWxPcHRzKTtcblxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5tdXRhdGU8eyB3cGVBdXRoZW50aWNhdGU6IHsgc3VjY2VzczogYm9vbGVhbjsgZW1haWw6IHN0cmluZzsgbWVzc2FnZTogc3RyaW5nOyBlcnJvcjogc3RyaW5nIHwgbnVsbCB9IH0+KGBcbiAgICAgICAgbXV0YXRpb24ge1xuICAgICAgICAgIHdwZUF1dGhlbnRpY2F0ZSB7IHN1Y2Nlc3MgZW1haWwgbWVzc2FnZSBlcnJvciB9XG4gICAgICAgIH1cbiAgICAgIGApO1xuXG4gICAgICBpZiAoIWRhdGEud3BlQXV0aGVudGljYXRlLnN1Y2Nlc3MpIHtcbiAgICAgICAgc3Bpbm5lcj8uZmFpbCgnQXV0aGVudGljYXRpb24gZmFpbGVkJyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZGF0YS53cGVBdXRoZW50aWNhdGUuZXJyb3IgfHwgJ0ZhaWxlZCB0byBhdXRoZW50aWNhdGUnKSk7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cblxuICAgICAgc3Bpbm5lcj8uc3VjY2VlZChgQXV0aGVudGljYXRlZCBhcyAke2RhdGEud3BlQXV0aGVudGljYXRlLmVtYWlsfWApO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIHNwaW5uZXI/LmZhaWwoJ0F1dGhlbnRpY2F0aW9uIGZhaWxlZCcpO1xuICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihlcnJvci5tZXNzYWdlKSk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9KTtcblxud3BlXG4gIC5jb21tYW5kKCdsb2dvdXQnKVxuICAuZGVzY3JpcHRpb24oJ0xvZ291dCBmcm9tIFdQIEVuZ2luZScpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGdsb2JhbE9wdHMgPSBwcm9ncmFtLm9wdHMoKSBhcyBGb3JtYXR0ZXJPcHRpb25zO1xuICAgIGNvbnN0IHNwaW5uZXIgPSBnbG9iYWxPcHRzLnF1aWV0ID8gbnVsbCA6IG9yYShgTG9nZ2luZyBvdXQuLi5gKS5zdGFydCgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGdxbCA9IGF3YWl0IGVuc3VyZUNvbm5lY3RlZChnbG9iYWxPcHRzKTtcblxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5tdXRhdGU8eyB3cGVMb2dvdXQ6IHsgc3VjY2VzczogYm9vbGVhbjsgZXJyb3I6IHN0cmluZyB8IG51bGwgfSB9PihgXG4gICAgICAgIG11dGF0aW9uIHtcbiAgICAgICAgICB3cGVMb2dvdXQgeyBzdWNjZXNzIGVycm9yIH1cbiAgICAgICAgfVxuICAgICAgYCk7XG5cbiAgICAgIGlmICghZGF0YS53cGVMb2dvdXQuc3VjY2Vzcykge1xuICAgICAgICBzcGlubmVyPy5mYWlsKCdMb2dvdXQgZmFpbGVkJyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZGF0YS53cGVMb2dvdXQuZXJyb3IgfHwgJ0ZhaWxlZCB0byBsb2dvdXQnKSk7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cblxuICAgICAgc3Bpbm5lcj8uc3VjY2VlZCgnTG9nZ2VkIG91dCBmcm9tIFdQIEVuZ2luZScpO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIHNwaW5uZXI/LmZhaWwoJ0xvZ291dCBmYWlsZWQnKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZXJyb3IubWVzc2FnZSkpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfSk7XG5cbndwZVxuICAuY29tbWFuZCgnc2l0ZXMnKVxuICAuZGVzY3JpcHRpb24oJ0xpc3QgV1AgRW5naW5lIHNpdGVzJylcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZ2xvYmFsT3B0cyA9IHByb2dyYW0ub3B0cygpIGFzIEZvcm1hdHRlck9wdGlvbnM7XG4gICAgY29uc3QgZm9ybWF0ID0gZ2V0T3V0cHV0Rm9ybWF0KGdsb2JhbE9wdHMpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGdxbCA9IGF3YWl0IGVuc3VyZUNvbm5lY3RlZChnbG9iYWxPcHRzKTtcblxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5xdWVyeTx7IGxpc3RXcGVTaXRlczogeyBzdWNjZXNzOiBib29sZWFuOyBzaXRlczogQXJyYXk8eyBpZDogc3RyaW5nOyBuYW1lOiBzdHJpbmc7IGVudmlyb25tZW50OiBzdHJpbmc7IHByaW1hcnlEb21haW46IHN0cmluZyB9PjsgZXJyb3I6IHN0cmluZyB8IG51bGwgfSB9PihgXG4gICAgICAgIHF1ZXJ5IHtcbiAgICAgICAgICBsaXN0V3BlU2l0ZXMge1xuICAgICAgICAgICAgc3VjY2Vzc1xuICAgICAgICAgICAgc2l0ZXMgeyBpZCBuYW1lIGVudmlyb25tZW50IHByaW1hcnlEb21haW4gfVxuICAgICAgICAgICAgZXJyb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGApO1xuXG4gICAgICBpZiAoIWRhdGEubGlzdFdwZVNpdGVzLnN1Y2Nlc3MpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihkYXRhLmxpc3RXcGVTaXRlcy5lcnJvciB8fCAnRmFpbGVkIHRvIGxpc3Qgc2l0ZXMnKSk7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZvcm1hdCA9PT0gJ2pzb24nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGRhdGEubGlzdFdwZVNpdGVzLnNpdGVzLCBudWxsLCAyKSk7XG4gICAgICB9IGVsc2UgaWYgKGRhdGEubGlzdFdwZVNpdGVzLnNpdGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjb25zb2xlLmxvZygnTm8gV1AgRW5naW5lIHNpdGVzIGZvdW5kLicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coJ1xcbldQIEVuZ2luZSBTaXRlczonKTtcbiAgICAgICAgZm9yIChjb25zdCBzaXRlIG9mIGRhdGEubGlzdFdwZVNpdGVzLnNpdGVzKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgJHtzaXRlLm5hbWV9ICgke3NpdGUuZW52aXJvbm1lbnR9KSAtICR7c2l0ZS5wcmltYXJ5RG9tYWlufWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihlcnJvci5tZXNzYWdlKSk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9KTtcblxud3BlXG4gIC5jb21tYW5kKCdsaW5rIDxzaXRlPicpXG4gIC5kZXNjcmlwdGlvbignU2hvdyBXUCBFbmdpbmUgY29ubmVjdGlvbiBmb3IgYSBsb2NhbCBzaXRlJylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSkgPT4ge1xuICAgIGNvbnN0IGdsb2JhbE9wdHMgPSBwcm9ncmFtLm9wdHMoKSBhcyBGb3JtYXR0ZXJPcHRpb25zO1xuICAgIGNvbnN0IGZvcm1hdCA9IGdldE91dHB1dEZvcm1hdChnbG9iYWxPcHRzKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBncWwgPSBhd2FpdCBlbnN1cmVDb25uZWN0ZWQoZ2xvYmFsT3B0cyk7XG4gICAgICBjb25zdCBzaXRlSWQgPSBhd2FpdCBmaW5kU2l0ZUlkKGdxbCwgc2l0ZSk7XG5cbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwucXVlcnk8eyBnZXRXcGVMaW5rOiB7IGxpbmtlZDogYm9vbGVhbjsgc2l0ZU5hbWU6IHN0cmluZzsgY29ubmVjdGlvbnM6IEFycmF5PHsgcmVtb3RlSW5zdGFsbElkOiBzdHJpbmc7IGluc3RhbGxOYW1lOiBzdHJpbmc7IGVudmlyb25tZW50OiBzdHJpbmc7IHByaW1hcnlEb21haW46IHN0cmluZyB9PiB9IH0+KGBcbiAgICAgICAgcXVlcnkoJHNpdGVJZDogSUQhKSB7XG4gICAgICAgICAgZ2V0V3BlTGluayhzaXRlSWQ6ICRzaXRlSWQpIHtcbiAgICAgICAgICAgIGxpbmtlZFxuICAgICAgICAgICAgc2l0ZU5hbWVcbiAgICAgICAgICAgIGNvbm5lY3Rpb25zIHsgcmVtb3RlSW5zdGFsbElkIGluc3RhbGxOYW1lIGVudmlyb25tZW50IHByaW1hcnlEb21haW4gfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgYCwgeyBzaXRlSWQgfSk7XG5cbiAgICAgIGlmIChmb3JtYXQgPT09ICdqc29uJykge1xuICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShkYXRhLmdldFdwZUxpbmssIG51bGwsIDIpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGxpbmsgPSBkYXRhLmdldFdwZUxpbms7XG4gICAgICAgIGlmICghbGluay5saW5rZWQgfHwgbGluay5jb25uZWN0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgXFxuXCIke2xpbmsuc2l0ZU5hbWV9XCIgaXMgbm90IGxpbmtlZCB0byBXUCBFbmdpbmVgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgXFxuXCIke2xpbmsuc2l0ZU5hbWV9XCIgV1AgRW5naW5lIENvbm5lY3Rpb25zOmApO1xuICAgICAgICAgIGZvciAoY29uc3QgY29ubiBvZiBsaW5rLmNvbm5lY3Rpb25zKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgICAke2Nvbm4uaW5zdGFsbE5hbWV9ICgke2Nvbm4uZW52aXJvbm1lbnR9KSAtICR7Y29ubi5wcmltYXJ5RG9tYWlufWApO1xuICAgICAgICAgICAgY29uc29sZS5sb2coYCAgICBJRDogJHtjb25uLnJlbW90ZUluc3RhbGxJZH1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGVycm9yLm1lc3NhZ2UpKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gIH0pO1xuXG53cGVcbiAgLmNvbW1hbmQoJ3B1c2ggPHNpdGU+JylcbiAgLmRlc2NyaXB0aW9uKCdQdXNoIGxvY2FsIHNpdGUgdG8gV1AgRW5naW5lJylcbiAgLm9wdGlvbignLXIsIC0tcmVtb3RlIDxpbnN0YWxsSWQ+JywgJ1JlbW90ZSBpbnN0YWxsIElEJylcbiAgLm9wdGlvbignLS1zcWwnLCAnSW5jbHVkZSBkYXRhYmFzZScpXG4gIC5vcHRpb24oJy15LCAtLXllcycsICdTa2lwIGNvbmZpcm1hdGlvbicpXG4gIC5hY3Rpb24oYXN5bmMgKHNpdGUsIGNtZE9wdGlvbnMpID0+IHtcbiAgICBhd2FpdCBydW5TaXRlQ29tbWFuZChzaXRlLCB7IGFjdGlvbjogJ1B1c2hpbmcgdG8gV1AgRW5naW5lJywgc3VjY2Vzc01lc3NhZ2U6IChkYXRhOiB7IHB1c2hUb1dwZTogeyBtZXNzYWdlOiBzdHJpbmcgfSB9KSA9PiBkYXRhLnB1c2hUb1dwZS5tZXNzYWdlIHx8ICdQdXNoZWQgdG8gV1AgRW5naW5lJyB9LCBhc3luYyAoZ3FsLCBzaXRlSWQpID0+IHtcbiAgICAgIC8vIEdldCByZW1vdGUgaW5zdGFsbCBJRCBpZiBub3QgcHJvdmlkZWRcbiAgICAgIGxldCByZW1vdGVJbnN0YWxsSWQgPSBjbWRPcHRpb25zLnJlbW90ZTtcbiAgICAgIGlmICghcmVtb3RlSW5zdGFsbElkKSB7XG4gICAgICAgIGNvbnN0IGxpbmtEYXRhID0gYXdhaXQgZ3FsLnF1ZXJ5PHsgZ2V0V3BlTGluazogeyBjb25uZWN0aW9uczogQXJyYXk8eyByZW1vdGVJbnN0YWxsSWQ6IHN0cmluZyB9PiB9IH0+KGBcbiAgICAgICAgICBxdWVyeSgkc2l0ZUlkOiBJRCEpIHtcbiAgICAgICAgICAgIGdldFdwZUxpbmsoc2l0ZUlkOiAkc2l0ZUlkKSB7XG4gICAgICAgICAgICAgIGNvbm5lY3Rpb25zIHsgcmVtb3RlSW5zdGFsbElkIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIGAsIHsgc2l0ZUlkIH0pO1xuICAgICAgICBpZiAobGlua0RhdGEuZ2V0V3BlTGluay5jb25uZWN0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NpdGUgaXMgbm90IGxpbmtlZCB0byBXUCBFbmdpbmUuIFVzZSAtLXJlbW90ZSB0byBzcGVjaWZ5IGluc3RhbGwgSUQuJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmVtb3RlSW5zdGFsbElkID0gbGlua0RhdGEuZ2V0V3BlTGluay5jb25uZWN0aW9uc1swXS5yZW1vdGVJbnN0YWxsSWQ7XG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLm11dGF0ZTx7IHB1c2hUb1dwZTogeyBzdWNjZXNzOiBib29sZWFuOyBtZXNzYWdlOiBzdHJpbmc7IGVycm9yOiBzdHJpbmcgfCBudWxsIH0gfT4oYFxuICAgICAgICBtdXRhdGlvbigkbG9jYWxTaXRlSWQ6IElEISwgJHJlbW90ZUluc3RhbGxJZDogSUQhLCAkaW5jbHVkZVNxbDogQm9vbGVhbiwgJGNvbmZpcm06IEJvb2xlYW4pIHtcbiAgICAgICAgICBwdXNoVG9XcGUobG9jYWxTaXRlSWQ6ICRsb2NhbFNpdGVJZCwgcmVtb3RlSW5zdGFsbElkOiAkcmVtb3RlSW5zdGFsbElkLCBpbmNsdWRlU3FsOiAkaW5jbHVkZVNxbCwgY29uZmlybTogJGNvbmZpcm0pIHtcbiAgICAgICAgICAgIHN1Y2Nlc3MgbWVzc2FnZSBlcnJvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgYCwgeyBsb2NhbFNpdGVJZDogc2l0ZUlkLCByZW1vdGVJbnN0YWxsSWQsIGluY2x1ZGVTcWw6IGNtZE9wdGlvbnMuc3FsIHx8IGZhbHNlLCBjb25maXJtOiBjbWRPcHRpb25zLnllcyB8fCBmYWxzZSB9KTtcbiAgICAgIGlmICghZGF0YS5wdXNoVG9XcGUuc3VjY2Vzcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZGF0YS5wdXNoVG9XcGUuZXJyb3IgfHwgJ0ZhaWxlZCB0byBwdXNoIHRvIFdQIEVuZ2luZScpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSk7XG4gIH0pO1xuXG53cGVcbiAgLmNvbW1hbmQoJ3B1bGwgPHNpdGU+JylcbiAgLmRlc2NyaXB0aW9uKCdQdWxsIGZyb20gV1AgRW5naW5lIHRvIGxvY2FsIHNpdGUnKVxuICAub3B0aW9uKCctciwgLS1yZW1vdGUgPGluc3RhbGxJZD4nLCAnUmVtb3RlIGluc3RhbGwgSUQnKVxuICAub3B0aW9uKCctLXNxbCcsICdJbmNsdWRlIGRhdGFiYXNlJylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSwgY21kT3B0aW9ucykgPT4ge1xuICAgIGF3YWl0IHJ1blNpdGVDb21tYW5kKHNpdGUsIHsgYWN0aW9uOiAnUHVsbGluZyBmcm9tIFdQIEVuZ2luZSBmb3InLCBzdWNjZXNzTWVzc2FnZTogKGRhdGE6IHsgcHVsbEZyb21XcGU6IHsgbWVzc2FnZTogc3RyaW5nIH0gfSkgPT4gZGF0YS5wdWxsRnJvbVdwZS5tZXNzYWdlIHx8ICdQdWxsZWQgZnJvbSBXUCBFbmdpbmUnIH0sIGFzeW5jIChncWwsIHNpdGVJZCkgPT4ge1xuICAgICAgLy8gR2V0IHJlbW90ZSBpbnN0YWxsIElEIGlmIG5vdCBwcm92aWRlZFxuICAgICAgbGV0IHJlbW90ZUluc3RhbGxJZCA9IGNtZE9wdGlvbnMucmVtb3RlO1xuICAgICAgaWYgKCFyZW1vdGVJbnN0YWxsSWQpIHtcbiAgICAgICAgY29uc3QgbGlua0RhdGEgPSBhd2FpdCBncWwucXVlcnk8eyBnZXRXcGVMaW5rOiB7IGNvbm5lY3Rpb25zOiBBcnJheTx7IHJlbW90ZUluc3RhbGxJZDogc3RyaW5nIH0+IH0gfT4oYFxuICAgICAgICAgIHF1ZXJ5KCRzaXRlSWQ6IElEISkge1xuICAgICAgICAgICAgZ2V0V3BlTGluayhzaXRlSWQ6ICRzaXRlSWQpIHtcbiAgICAgICAgICAgICAgY29ubmVjdGlvbnMgeyByZW1vdGVJbnN0YWxsSWQgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgYCwgeyBzaXRlSWQgfSk7XG4gICAgICAgIGlmIChsaW5rRGF0YS5nZXRXcGVMaW5rLmNvbm5lY3Rpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU2l0ZSBpcyBub3QgbGlua2VkIHRvIFdQIEVuZ2luZS4gVXNlIC0tcmVtb3RlIHRvIHNwZWNpZnkgaW5zdGFsbCBJRC4nKTtcbiAgICAgICAgfVxuICAgICAgICByZW1vdGVJbnN0YWxsSWQgPSBsaW5rRGF0YS5nZXRXcGVMaW5rLmNvbm5lY3Rpb25zWzBdLnJlbW90ZUluc3RhbGxJZDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwubXV0YXRlPHsgcHVsbEZyb21XcGU6IHsgc3VjY2VzczogYm9vbGVhbjsgbWVzc2FnZTogc3RyaW5nOyBlcnJvcjogc3RyaW5nIHwgbnVsbCB9IH0+KGBcbiAgICAgICAgbXV0YXRpb24oJGxvY2FsU2l0ZUlkOiBJRCEsICRyZW1vdGVJbnN0YWxsSWQ6IElEISwgJGluY2x1ZGVTcWw6IEJvb2xlYW4pIHtcbiAgICAgICAgICBwdWxsRnJvbVdwZShsb2NhbFNpdGVJZDogJGxvY2FsU2l0ZUlkLCByZW1vdGVJbnN0YWxsSWQ6ICRyZW1vdGVJbnN0YWxsSWQsIGluY2x1ZGVTcWw6ICRpbmNsdWRlU3FsKSB7XG4gICAgICAgICAgICBzdWNjZXNzIG1lc3NhZ2UgZXJyb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGAsIHsgbG9jYWxTaXRlSWQ6IHNpdGVJZCwgcmVtb3RlSW5zdGFsbElkLCBpbmNsdWRlU3FsOiBjbWRPcHRpb25zLnNxbCB8fCBmYWxzZSB9KTtcbiAgICAgIGlmICghZGF0YS5wdWxsRnJvbVdwZS5zdWNjZXNzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihkYXRhLnB1bGxGcm9tV3BlLmVycm9yIHx8ICdGYWlsZWQgdG8gcHVsbCBmcm9tIFdQIEVuZ2luZScpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSk7XG4gIH0pO1xuXG53cGVcbiAgLmNvbW1hbmQoJ2hpc3RvcnkgPHNpdGU+JylcbiAgLmRlc2NyaXB0aW9uKCdTaG93IHN5bmMgaGlzdG9yeSBmb3IgYSBzaXRlJylcbiAgLm9wdGlvbignLWwsIC0tbGltaXQgPG4+JywgJ051bWJlciBvZiBldmVudHMgdG8gc2hvdycsICcxMCcpXG4gIC5hY3Rpb24oYXN5bmMgKHNpdGUsIGNtZE9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBnbG9iYWxPcHRzID0gcHJvZ3JhbS5vcHRzKCkgYXMgRm9ybWF0dGVyT3B0aW9ucztcbiAgICBjb25zdCBmb3JtYXQgPSBnZXRPdXRwdXRGb3JtYXQoZ2xvYmFsT3B0cyk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZ3FsID0gYXdhaXQgZW5zdXJlQ29ubmVjdGVkKGdsb2JhbE9wdHMpO1xuICAgICAgY29uc3Qgc2l0ZUlkID0gYXdhaXQgZmluZFNpdGVJZChncWwsIHNpdGUpO1xuXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLnF1ZXJ5PHsgZ2V0U3luY0hpc3Rvcnk6IHsgc3VjY2VzczogYm9vbGVhbjsgZXZlbnRzOiBBcnJheTx7IHJlbW90ZUluc3RhbGxOYW1lOiBzdHJpbmc7IHRpbWVzdGFtcDogc3RyaW5nOyBkaXJlY3Rpb246IHN0cmluZzsgc3RhdHVzOiBzdHJpbmcgfT47IGVycm9yOiBzdHJpbmcgfCBudWxsIH0gfT4oYFxuICAgICAgICBxdWVyeSgkc2l0ZUlkOiBJRCEsICRsaW1pdDogSW50KSB7XG4gICAgICAgICAgZ2V0U3luY0hpc3Rvcnkoc2l0ZUlkOiAkc2l0ZUlkLCBsaW1pdDogJGxpbWl0KSB7XG4gICAgICAgICAgICBzdWNjZXNzXG4gICAgICAgICAgICBldmVudHMgeyByZW1vdGVJbnN0YWxsTmFtZSB0aW1lc3RhbXAgZGlyZWN0aW9uIHN0YXR1cyB9XG4gICAgICAgICAgICBlcnJvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgYCwgeyBzaXRlSWQsIGxpbWl0OiBwYXJzZUludChjbWRPcHRpb25zLmxpbWl0LCAxMCkgfSk7XG5cbiAgICAgIGlmICghZGF0YS5nZXRTeW5jSGlzdG9yeS5zdWNjZXNzKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZGF0YS5nZXRTeW5jSGlzdG9yeS5lcnJvciB8fCAnRmFpbGVkIHRvIGdldCBzeW5jIGhpc3RvcnknKSk7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZvcm1hdCA9PT0gJ2pzb24nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGRhdGEuZ2V0U3luY0hpc3RvcnkuZXZlbnRzLCBudWxsLCAyKSk7XG4gICAgICB9IGVsc2UgaWYgKGRhdGEuZ2V0U3luY0hpc3RvcnkuZXZlbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjb25zb2xlLmxvZygnTm8gc3luYyBoaXN0b3J5IGZvdW5kLicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coJ1xcblN5bmMgSGlzdG9yeTonKTtcbiAgICAgICAgZm9yIChjb25zdCBldmVudCBvZiBkYXRhLmdldFN5bmNIaXN0b3J5LmV2ZW50cykge1xuICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShldmVudC50aW1lc3RhbXApLnRvTG9jYWxlU3RyaW5nKCk7XG4gICAgICAgICAgY29uc3QgYXJyb3cgPSBldmVudC5kaXJlY3Rpb24gPT09ICdwdXNoJyA/ICfihpInIDogJ+KGkCc7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgJHtkYXRlfSAke2Fycm93fSAke2V2ZW50LnJlbW90ZUluc3RhbGxOYW1lfSAoJHtldmVudC5zdGF0dXN9KWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihlcnJvci5tZXNzYWdlKSk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9KTtcblxud3BlXG4gIC5jb21tYW5kKCdkaWZmIDxzaXRlPicpXG4gIC5kZXNjcmlwdGlvbignU2hvdyBmaWxlIGNoYW5nZXMgYmV0d2VlbiBsb2NhbCBhbmQgV1AgRW5naW5lJylcbiAgLm9wdGlvbignLWQsIC0tZGlyZWN0aW9uIDxkaXI+JywgJ0RpcmVjdGlvbiAocHVzaHxwdWxsKScsICdwdXNoJylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSwgY21kT3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IGdsb2JhbE9wdHMgPSBwcm9ncmFtLm9wdHMoKSBhcyBGb3JtYXR0ZXJPcHRpb25zO1xuICAgIGNvbnN0IGZvcm1hdCA9IGdldE91dHB1dEZvcm1hdChnbG9iYWxPcHRzKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBncWwgPSBhd2FpdCBlbnN1cmVDb25uZWN0ZWQoZ2xvYmFsT3B0cyk7XG4gICAgICBjb25zdCBzaXRlSWQgPSBhd2FpdCBmaW5kU2l0ZUlkKGdxbCwgc2l0ZSk7XG5cbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwucXVlcnk8eyBnZXRTaXRlQ2hhbmdlczogeyBzdWNjZXNzOiBib29sZWFuOyBhZGRlZDogQXJyYXk8eyBwYXRoOiBzdHJpbmcgfT47IG1vZGlmaWVkOiBBcnJheTx7IHBhdGg6IHN0cmluZyB9PjsgZGVsZXRlZDogQXJyYXk8eyBwYXRoOiBzdHJpbmcgfT47IHRvdGFsQ2hhbmdlczogbnVtYmVyOyBlcnJvcjogc3RyaW5nIHwgbnVsbCB9IH0+KGBcbiAgICAgICAgcXVlcnkoJHNpdGVJZDogSUQhLCAkZGlyZWN0aW9uOiBTdHJpbmcpIHtcbiAgICAgICAgICBnZXRTaXRlQ2hhbmdlcyhzaXRlSWQ6ICRzaXRlSWQsIGRpcmVjdGlvbjogJGRpcmVjdGlvbikge1xuICAgICAgICAgICAgc3VjY2Vzc1xuICAgICAgICAgICAgYWRkZWQgeyBwYXRoIH1cbiAgICAgICAgICAgIG1vZGlmaWVkIHsgcGF0aCB9XG4gICAgICAgICAgICBkZWxldGVkIHsgcGF0aCB9XG4gICAgICAgICAgICB0b3RhbENoYW5nZXNcbiAgICAgICAgICAgIGVycm9yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBgLCB7IHNpdGVJZCwgZGlyZWN0aW9uOiBjbWRPcHRpb25zLmRpcmVjdGlvbiB9KTtcblxuICAgICAgaWYgKCFkYXRhLmdldFNpdGVDaGFuZ2VzLnN1Y2Nlc3MpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihkYXRhLmdldFNpdGVDaGFuZ2VzLmVycm9yIHx8ICdGYWlsZWQgdG8gZ2V0IGNoYW5nZXMnKSk7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZvcm1hdCA9PT0gJ2pzb24nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGRhdGEuZ2V0U2l0ZUNoYW5nZXMsIG51bGwsIDIpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGNoYW5nZXMgPSBkYXRhLmdldFNpdGVDaGFuZ2VzO1xuICAgICAgICBjb25zb2xlLmxvZyhgXFxuQ2hhbmdlcyB0byAke2NtZE9wdGlvbnMuZGlyZWN0aW9ufSAoJHtjaGFuZ2VzLnRvdGFsQ2hhbmdlc30gdG90YWwpOmApO1xuXG4gICAgICAgIGlmIChjaGFuZ2VzLmFkZGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnXFxuICBBZGRlZDonKTtcbiAgICAgICAgICBjaGFuZ2VzLmFkZGVkLmZvckVhY2goKGYpID0+IGNvbnNvbGUubG9nKGAgICAgKyAke2YucGF0aH1gKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYW5nZXMubW9kaWZpZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdcXG4gIE1vZGlmaWVkOicpO1xuICAgICAgICAgIGNoYW5nZXMubW9kaWZpZWQuZm9yRWFjaCgoZikgPT4gY29uc29sZS5sb2coYCAgICB+ICR7Zi5wYXRofWApKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhbmdlcy5kZWxldGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnXFxuICBEZWxldGVkOicpO1xuICAgICAgICAgIGNoYW5nZXMuZGVsZXRlZC5mb3JFYWNoKChmKSA9PiBjb25zb2xlLmxvZyhgICAgIC0gJHtmLnBhdGh9YCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFuZ2VzLnRvdGFsQ2hhbmdlcyA9PT0gMCkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCcgIE5vIGNoYW5nZXMgZGV0ZWN0ZWQuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGVycm9yLm1lc3NhZ2UpKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gIH0pO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBIZWxwZXIgRnVuY3Rpb25zXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogRmluZCBzaXRlIElEIGJ5IG5hbWUgb3IgSURcbiAqXG4gKiBPcHRpbWl6YXRpb246IEZpcnN0IHRyaWVzIGRpcmVjdCBJRCBsb29rdXAgKE8oMSkpIGJlZm9yZSBmYWxsaW5nIGJhY2sgdG9cbiAqIGZldGNoaW5nIGFsbCBzaXRlcyBmb3IgbmFtZSBtYXRjaGluZyAoTyhuKSkuIFRoaXMgc2lnbmlmaWNhbnRseSBpbXByb3Zlc1xuICogcGVyZm9ybWFuY2Ugd2hlbiB1c2VycyBzcGVjaWZ5IHNpdGUgSURzIGRpcmVjdGx5LlxuICovXG5hc3luYyBmdW5jdGlvbiBmaW5kU2l0ZUlkKGdxbDogR3JhcGhRTENsaWVudCwgc2l0ZVF1ZXJ5OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAvLyBUcnkgZGlyZWN0IElEIGxvb2t1cCBmaXJzdCAtIG11Y2ggZmFzdGVyIGZvciBleGFjdCBJRCBtYXRjaGVzXG4gIHRyeSB7XG4gICAgY29uc3QgZGlyZWN0TG9va3VwID0gYXdhaXQgZ3FsLnF1ZXJ5PHsgc2l0ZTogeyBpZDogc3RyaW5nIH0gfCBudWxsIH0+KFxuICAgICAgYHF1ZXJ5IEdldFNpdGVCeUlkKCRpZDogSUQhKSB7IHNpdGUoaWQ6ICRpZCkgeyBpZCB9IH1gLFxuICAgICAgeyBpZDogc2l0ZVF1ZXJ5IH1cbiAgICApO1xuXG4gICAgaWYgKGRpcmVjdExvb2t1cC5zaXRlKSB7XG4gICAgICByZXR1cm4gZGlyZWN0TG9va3VwLnNpdGUuaWQ7XG4gICAgfVxuICB9IGNhdGNoIHtcbiAgICAvLyBJRCBsb29rdXAgZmFpbGVkLCBmYWxsIHRocm91Z2ggdG8gbmFtZSBzZWFyY2hcbiAgfVxuXG4gIC8vIEZhbGwgYmFjayB0byBmZXRjaGluZyBhbGwgc2l0ZXMgZm9yIG5hbWUgbWF0Y2hpbmdcbiAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5xdWVyeTx7IHNpdGVzOiBBcnJheTx7IGlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZyB9PiB9PihgXG4gICAgcXVlcnkgeyBzaXRlcyB7IGlkIG5hbWUgfSB9XG4gIGApO1xuXG4gIGNvbnN0IHNpdGUgPSBkYXRhLnNpdGVzLmZpbmQoXG4gICAgKHMpID0+IHMubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNpdGVRdWVyeS50b0xvd2VyQ2FzZSgpKVxuICApO1xuXG4gIGlmICghc2l0ZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgU2l0ZSBub3QgZm91bmQ6IFwiJHtzaXRlUXVlcnl9XCJgKTtcbiAgfVxuXG4gIHJldHVybiBzaXRlLmlkO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBTa2lsbCBDb21tYW5kIChmb3IgQUkgYXNzaXN0YW50cylcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxucHJvZ3JhbVxuICAuY29tbWFuZCgnc2tpbGwnKVxuICAuZGVzY3JpcHRpb24oJ0luc3RhbGwgQ2xhdWRlIENvZGUgc2tpbGwgZm9yIEFJIGFzc2lzdGFudCBpbnRlZ3JhdGlvbicpXG4gIC5hcmd1bWVudCgnW2FjdGlvbl0nLCAnQWN0aW9uOiBpbnN0YWxsLCB1bmluc3RhbGwsIG9yIHBhdGgnLCAnaW5zdGFsbCcpXG4gIC5hY3Rpb24oYXN5bmMgKGFjdGlvbjogc3RyaW5nKSA9PiB7XG4gICAgY29uc3Qgc2tpbGxOYW1lID0gJ2x3cCc7XG4gICAgY29uc3QgdXNlclNraWxsc0RpciA9IHBhdGguam9pbihvcy5ob21lZGlyKCksICcuY2xhdWRlJywgJ3NraWxscycsIHNraWxsTmFtZSk7XG4gICAgY29uc3QgYnVuZGxlZFNraWxsRGlyID0gcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJy4uJywgJ3NraWxsJyk7XG5cbiAgICBzd2l0Y2ggKGFjdGlvbikge1xuICAgICAgY2FzZSAnaW5zdGFsbCc6IHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgc2tpbGwgaXMgYnVuZGxlZFxuICAgICAgICBjb25zdCBidW5kbGVkU2tpbGxGaWxlID0gcGF0aC5qb2luKGJ1bmRsZWRTa2lsbERpciwgJ1NLSUxMLm1kJyk7XG4gICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhidW5kbGVkU2tpbGxGaWxlKSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoJ1NraWxsIG5vdCBmb3VuZCBpbiBwYWNrYWdlLiBQbGVhc2UgcmVpbnN0YWxsIHRoZSBDTEkuJykpO1xuICAgICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENyZWF0ZSB1c2VyIHNraWxscyBkaXJlY3RvcnlcbiAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHBhdGguZGlybmFtZSh1c2VyU2tpbGxzRGlyKSkpIHtcbiAgICAgICAgICBmcy5ta2RpclN5bmMocGF0aC5kaXJuYW1lKHVzZXJTa2lsbHNEaXIpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENoZWNrIGlmIGFscmVhZHkgaW5zdGFsbGVkXG4gICAgICAgIGlmIChmcy5leGlzdHNTeW5jKHVzZXJTa2lsbHNEaXIpKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coZm9ybWF0U3VjY2VzcyhgU2tpbGwgYWxyZWFkeSBpbnN0YWxsZWQgYXQgJHt1c2VyU2tpbGxzRGlyfWApKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDcmVhdGUgc3ltbGluayB0byBidW5kbGVkIHNraWxsXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZnMuc3ltbGlua1N5bmMoYnVuZGxlZFNraWxsRGlyLCB1c2VyU2tpbGxzRGlyKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhmb3JtYXRTdWNjZXNzKGBJbnN0YWxsZWQgQ2xhdWRlIENvZGUgc2tpbGwgdG8gJHt1c2VyU2tpbGxzRGlyfWApKTtcbiAgICAgICAgICBjb25zb2xlLmxvZygnXFxuQ2xhdWRlIENvZGUgd2lsbCBub3cgcmVjb2duaXplIGx3cCBjb21tYW5kcy4nKTtcbiAgICAgICAgICBjb25zb2xlLmxvZygnVHJ5IGFza2luZzogXCJMaXN0IG15IExvY2FsIHNpdGVzXCIgb3IgXCJTdGFydCB0aGUgYmxvZyBzaXRlXCInKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgIC8vIElmIHN5bWxpbmsgZmFpbHMsIGNvcHkgdGhlIGZpbGVzXG4gICAgICAgICAgZnMubWtkaXJTeW5jKHVzZXJTa2lsbHNEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICAgIGZzLmNvcHlGaWxlU3luYyhidW5kbGVkU2tpbGxGaWxlLCBwYXRoLmpvaW4odXNlclNraWxsc0RpciwgJ1NLSUxMLm1kJykpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGZvcm1hdFN1Y2Nlc3MoYEluc3RhbGxlZCBDbGF1ZGUgQ29kZSBza2lsbCB0byAke3VzZXJTa2lsbHNEaXJ9YCkpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdcXG5DbGF1ZGUgQ29kZSB3aWxsIG5vdyByZWNvZ25pemUgbHdwIGNvbW1hbmRzLicpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjYXNlICd1bmluc3RhbGwnOiB7XG4gICAgICAgIGlmICghZnMuZXhpc3RzU3luYyh1c2VyU2tpbGxzRGlyKSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdTa2lsbCBub3QgaW5zdGFsbGVkLicpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3Qgc3RhdCA9IGZzLmxzdGF0U3luYyh1c2VyU2tpbGxzRGlyKTtcbiAgICAgICAgICBpZiAoc3RhdC5pc1N5bWJvbGljTGluaygpKSB7XG4gICAgICAgICAgICBmcy51bmxpbmtTeW5jKHVzZXJTa2lsbHNEaXIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmcy5ybVN5bmModXNlclNraWxsc0RpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnNvbGUubG9nKGZvcm1hdFN1Y2Nlc3MoJ1VuaW5zdGFsbGVkIENsYXVkZSBDb2RlIHNraWxsLicpKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoYEZhaWxlZCB0byB1bmluc3RhbGw6ICR7ZXJyb3IubWVzc2FnZX1gKSk7XG4gICAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjYXNlICdwYXRoJzoge1xuICAgICAgICBjb25zb2xlLmxvZyh1c2VyU2tpbGxzRGlyKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoYFVua25vd24gYWN0aW9uOiAke2FjdGlvbn0uIFVzZSBpbnN0YWxsLCB1bmluc3RhbGwsIG9yIHBhdGguYCkpO1xuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9KTtcblxuLy8gQ2hlY2sgZm9yIHVwZGF0ZXMgKHNraXAgZm9yIHVwZGF0ZSBjb21tYW5kIGl0c2VsZiBhbmQgcXVpZXQgbW9kZSlcbmNvbnN0IGFyZ3MgPSBwcm9jZXNzLmFyZ3Yuc2xpY2UoMik7XG5jb25zdCBpc1VwZGF0ZUNvbW1hbmQgPSBhcmdzWzBdID09PSAndXBkYXRlJztcbmNvbnN0IGlzUXVpZXQgPSBhcmdzLmluY2x1ZGVzKCctLXF1aWV0JykgfHwgYXJncy5pbmNsdWRlcygnLS1qc29uJyk7XG5cbmlmICghaXNVcGRhdGVDb21tYW5kICYmICFpc1F1aWV0KSB7XG4gIC8vIEZpcmUgYW5kIGZvcmdldCAtIGRvbid0IGJsb2NrIHN0YXJ0dXBcbiAgY2hlY2tGb3JVcGRhdGVzKCkuY2F0Y2goKCkgPT4ge30pO1xufVxuXG4vLyBQYXJzZSBhbmQgZXhlY3V0ZVxucHJvZ3JhbS5wYXJzZSgpO1xuIl19
1466
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFFQTs7Ozs7R0FLRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFSCx5Q0FBb0M7QUFDcEMsOENBQXNCO0FBQ3RCLHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFDN0IsdUNBQXlCO0FBQ3pCLGlEQUF5QztBQUN6QywyQ0FBd0M7QUFDeEMscUNBQXlDO0FBQ3pDLDZDQU9zQjtBQUV0QixlQUFlO0FBQ2YsTUFBTSxZQUFZLEdBQUcsZ0NBQWdDLENBQUM7QUFDdEQsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUMsT0FBTyxDQUFDO0FBQzNELE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztBQUN2RSxNQUFNLHFCQUFxQixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLFdBQVc7QUFFOUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxtQkFBTyxFQUFFLENBQUM7QUFFOUIsd0NBQXdDO0FBQ3hDLElBQUksTUFBTSxHQUF5QixJQUFJLENBQUM7QUFXeEM7O0dBRUc7QUFDSCxTQUFTLGVBQWU7SUFDdEIsSUFBSSxDQUFDO1FBQ0gsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQztZQUNyQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ2pFLENBQUM7SUFDSCxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsMkJBQTJCO0lBQzdCLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRDs7R0FFRztBQUNILFNB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dCI6WyIjIS91c3IvYmluL2VudiBub2RlXG5cbi8qKlxuICogTG9jYWwgQ0xJIChsd3ApXG4gKlxuICogQ29tbWFuZC1saW5lIGludGVyZmFjZSBmb3IgbWFuYWdpbmcgTG9jYWwgV29yZFByZXNzIHNpdGVzLlxuICogQ29ubmVjdHMgZGlyZWN0bHkgdG8gTG9jYWwncyBHcmFwaFFMIHNlcnZlci5cbiAqL1xuXG5pbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCBvcmEgZnJvbSAnb3JhJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyBvcyBmcm9tICdvcyc7XG5pbXBvcnQgeyBleGVjU3luYyB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHsgYm9vdHN0cmFwIH0gZnJvbSAnLi9ib290c3RyYXAnO1xuaW1wb3J0IHsgR3JhcGhRTENsaWVudCB9IGZyb20gJy4vY2xpZW50JztcbmltcG9ydCB7XG4gIGZvcm1hdFNpdGVMaXN0LFxuICBmb3JtYXRTaXRlRGV0YWlsLFxuICBmb3JtYXRTdWNjZXNzLFxuICBmb3JtYXRFcnJvcixcbiAgZ2V0T3V0cHV0Rm9ybWF0LFxuICBGb3JtYXR0ZXJPcHRpb25zLFxufSBmcm9tICcuL2Zvcm1hdHRlcnMnO1xuXG4vLyBQYWNrYWdlIGluZm9cbmNvbnN0IFBBQ0tBR0VfTkFNRSA9ICdAbG9jYWwtbGFicy1qcG9sbG9jay9sb2NhbC1jbGknO1xuY29uc3QgQ1VSUkVOVF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vcGFja2FnZS5qc29uJykudmVyc2lvbjtcbmNvbnN0IFVQREFURV9DSEVDS19GSUxFID0gcGF0aC5qb2luKG9zLmhvbWVkaXIoKSwgJy5sd3AtdXBkYXRlLWNoZWNrJyk7XG5jb25zdCBVUERBVEVfQ0hFQ0tfSU5URVJWQUwgPSAyNCAqIDYwICogNjAgKiAxMDAwOyAvLyAyNCBob3Vyc1xuXG5jb25zdCBwcm9ncmFtID0gbmV3IENvbW1hbmQoKTtcblxuLy8gU3RvcmUgY2xpZW50IGdsb2JhbGx5IGFmdGVyIGJvb3RzdHJhcFxubGV0IGNsaWVudDogR3JhcGhRTENsaWVudCB8IG51bGwgPSBudWxsO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBVcGRhdGUgQ2hlY2sgRnVuY3Rpb25zXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmludGVyZmFjZSBVcGRhdGVDaGVja0NhY2hlIHtcbiAgbGFzdENoZWNrOiBudW1iZXI7XG4gIGxhdGVzdFZlcnNpb246IHN0cmluZyB8IG51bGw7XG59XG5cbi8qKlxuICogUmVhZCB1cGRhdGUgY2hlY2sgY2FjaGVcbiAqL1xuZnVuY3Rpb24gcmVhZFVwZGF0ZUNhY2hlKCk6IFVwZGF0ZUNoZWNrQ2FjaGUgfCBudWxsIHtcbiAgdHJ5IHtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhVUERBVEVfQ0hFQ0tfRklMRSkpIHtcbiAgICAgIHJldHVybiBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhVUERBVEVfQ0hFQ0tfRklMRSwgJ3V0Zi04JykpO1xuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgLy8gSWdub3JlIGNhY2hlIHJlYWQgZXJyb3JzXG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogV3JpdGUgdXBkYXRlIGNoZWNrIGNhY2hlXG4gKi9cbmZ1bmN0aW9uIHdyaXRlVXBkYXRlQ2FjaGUoY2FjaGU6IFVwZGF0ZUNoZWNrQ2FjaGUpOiB2b2lkIHtcbiAgdHJ5IHtcbiAgICBmcy53cml0ZUZpbGVTeW5jKFVQREFURV9DSEVDS19GSUxFLCBKU09OLnN0cmluZ2lmeShjYWNoZSkpO1xuICB9IGNhdGNoIHtcbiAgICAvLyBJZ25vcmUgY2FjaGUgd3JpdGUgZXJyb3JzXG4gIH1cbn1cblxuLyoqXG4gKiBGZXRjaCBsYXRlc3QgdmVyc2lvbiBmcm9tIG5wbSByZWdpc3RyeVxuICovXG5hc3luYyBmdW5jdGlvbiBmZXRjaExhdGVzdFZlcnNpb24oKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvJHtQQUNLQUdFX05BTUV9L2xhdGVzdGAsIHtcbiAgICAgIGhlYWRlcnM6IHsgQWNjZXB0OiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICB9KTtcbiAgICBpZiAocmVzcG9uc2Uub2spIHtcbiAgICAgIGNvbnN0IGRhdGEgPSAoYXdhaXQgcmVzcG9uc2UuanNvbigpKSBhcyB7IHZlcnNpb246IHN0cmluZyB9O1xuICAgICAgcmV0dXJuIGRhdGEudmVyc2lvbjtcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIE5ldHdvcmsgZXJyb3IsIHNpbGVudGx5IGlnbm9yZVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIENvbXBhcmUgc2VtdmVyIHZlcnNpb25zIChzaW1wbGUgY29tcGFyaXNvbilcbiAqL1xuZnVuY3Rpb24gaXNOZXdlclZlcnNpb24obGF0ZXN0OiBzdHJpbmcsIGN1cnJlbnQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBsYXRlc3RQYXJ0cyA9IGxhdGVzdC5zcGxpdCgnLicpLm1hcChOdW1iZXIpO1xuICBjb25zdCBjdXJyZW50UGFydHMgPSBjdXJyZW50LnNwbGl0KCcuJykubWFwKE51bWJlcik7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCAzOyBpKyspIHtcbiAgICBpZiAoKGxhdGVzdFBhcnRzW2ldIHx8IDApID4gKGN1cnJlbnRQYXJ0c1tpXSB8fCAwKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKChsYXRlc3RQYXJ0c1tpXSB8fCAwKSA8IChjdXJyZW50UGFydHNbaV0gfHwgMCkpIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ2hlY2sgZm9yIHVwZGF0ZXMgKHVzZXMgY2FjaGUgdG8gYXZvaWQgZnJlcXVlbnQgY2hlY2tzKVxuICovXG5hc3luYyBmdW5jdGlvbiBjaGVja0ZvclVwZGF0ZXMoKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGNhY2hlID0gcmVhZFVwZGF0ZUNhY2hlKCk7XG4gIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgLy8gU2tpcCBpZiBjaGVja2VkIHJlY2VudGx5XG4gIGlmIChjYWNoZSAmJiBub3cgLSBjYWNoZS5sYXN0Q2hlY2sgPCBVUERBVEVfQ0hFQ0tfSU5URVJWQUwpIHtcbiAgICBpZiAoY2FjaGUubGF0ZXN0VmVyc2lvbiAmJiBpc05ld2VyVmVyc2lvbihjYWNoZS5sYXRlc3RWZXJzaW9uLCBDVVJSRU5UX1ZFUlNJT04pKSB7XG4gICAgICBjb25zb2xlLmxvZyhgXFxuXFx4MWJbMzNtVXBkYXRlIGF2YWlsYWJsZTogJHtDVVJSRU5UX1ZFUlNJT059IOKGkiAke2NhY2hlLmxhdGVzdFZlcnNpb259XFx4MWJbMG1gKTtcbiAgICAgIGNvbnNvbGUubG9nKGBSdW46IFxceDFiWzM2bWx3cCB1cGRhdGVcXHgxYlswbVxcbmApO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBGZXRjaCBsYXRlc3QgdmVyc2lvbiAobm9uLWJsb2NraW5nLCBmaXJlIGFuZCBmb3JnZXQgZm9yIGNhY2hlKVxuICBmZXRjaExhdGVzdFZlcnNpb24oKVxuICAgIC50aGVuKChsYXRlc3RWZXJzaW9uKSA9PiB7XG4gICAgICB3cml0ZVVwZGF0ZUNhY2hlKHsgbGFzdENoZWNrOiBub3csIGxhdGVzdFZlcnNpb24gfSk7XG5cbiAgICAgIGlmIChsYXRlc3RWZXJzaW9uICYmIGlzTmV3ZXJWZXJzaW9uKGxhdGVzdFZlcnNpb24sIENVUlJFTlRfVkVSU0lPTikpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFxcblxceDFiWzMzbVVwZGF0ZSBhdmFpbGFibGU6ICR7Q1VSUkVOVF9WRVJTSU9OfSDihpIgJHtsYXRlc3RWZXJzaW9ufVxceDFiWzBtYCk7XG4gICAgICAgIGNvbnNvbGUubG9nKGBSdW46IFxceDFiWzM2bWx3cCB1cGRhdGVcXHgxYlswbVxcbmApO1xuICAgICAgfVxuICAgIH0pXG4gICAgLmNhdGNoKCgpID0+IHtcbiAgICAgIC8vIFNpbGVudGx5IGlnbm9yZSB1cGRhdGUgY2hlY2sgZmFpbHVyZXNcbiAgICB9KTtcbn1cblxuLyoqXG4gKiBFbnN1cmUgd2UncmUgY29ubmVjdGVkIHRvIExvY2FsJ3MgR3JhcGhRTCBzZXJ2ZXJcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZW5zdXJlQ29ubmVjdGVkKG9wdGlvbnM6IEZvcm1hdHRlck9wdGlvbnMpOiBQcm9taXNlPEdyYXBoUUxDbGllbnQ+IHtcbiAgaWYgKGNsaWVudCkge1xuICAgIHJldHVybiBjbGllbnQ7XG4gIH1cblxuICBjb25zdCBzcGlubmVyID0gb3B0aW9ucy5xdWlldCA/IG51bGwgOiBvcmEoJ0Nvbm5lY3RpbmcgdG8gTG9jYWwuLi4nKS5zdGFydCgpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYm9vdHN0cmFwKHtcbiAgICAgIHZlcmJvc2U6IGZhbHNlLFxuICAgICAgb25TdGF0dXM6IChzdGF0dXMpID0+IHtcbiAgICAgICAgaWYgKHNwaW5uZXIpIHNwaW5uZXIudGV4dCA9IHN0YXR1cztcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBpZiAoIXJlc3VsdC5zdWNjZXNzIHx8ICFyZXN1bHQuY29ubmVjdGlvbkluZm8pIHtcbiAgICAgIHNwaW5uZXI/LmZhaWwoJ0ZhaWxlZCB0byBjb25uZWN0Jyk7XG4gICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKHJlc3VsdC5lcnJvciB8fCAnVW5rbm93biBlcnJvcicpKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG5cbiAgICBzcGlubmVyPy5zdWNjZWVkKCdDb25uZWN0ZWQgdG8gTG9jYWwnKTtcbiAgICBjbGllbnQgPSBuZXcgR3JhcGhRTENsaWVudChyZXN1bHQuY29ubmVjdGlvbkluZm8pO1xuICAgIHJldHVybiBjbGllbnQ7XG4gIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICBzcGlubmVyPy5mYWlsKCdGYWlsZWQgdG8gY29ubmVjdCcpO1xuICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZXJyb3IubWVzc2FnZSkpO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxufVxuXG4vKipcbiAqIEhlbHBlciB0byBydW4gc2l0ZS1zcGVjaWZpYyBjb21tYW5kcyB3aXRoIGNvbW1vbiBib2lsZXJwbGF0ZVxuICpcbiAqIEhhbmRsZXM6IGNvbm5lY3Rpb24sIHNwaW5uZXIsIHNpdGUgbG9va3VwLCBlcnJvciBmb3JtYXR0aW5nXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJ1blNpdGVDb21tYW5kPFQ+KFxuICBzaXRlTmFtZTogc3RyaW5nLFxuICBjb25maWc6IHtcbiAgICBhY3Rpb246IHN0cmluZztcbiAgICBzdWNjZXNzTWVzc2FnZT86IChyZXN1bHQ6IFQpID0+IHN0cmluZztcbiAgfSxcbiAgZXhlY3V0ZTogKGdxbDogR3JhcGhRTENsaWVudCwgc2l0ZUlkOiBzdHJpbmcpID0+IFByb21pc2U8VD5cbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBnbG9iYWxPcHRzID0gcHJvZ3JhbS5vcHRzKCkgYXMgRm9ybWF0dGVyT3B0aW9ucztcbiAgY29uc3Qgc3Bpbm5lciA9IGdsb2JhbE9wdHMucXVpZXQgPyBudWxsIDogb3JhKGAke2NvbmZpZy5hY3Rpb259IFwiJHtzaXRlTmFtZX1cIi4uLmApLnN0YXJ0KCk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBncWwgPSBhd2FpdCBlbnN1cmVDb25uZWN0ZWQoZ2xvYmFsT3B0cyk7XG4gICAgY29uc3Qgc2l0ZUlkID0gYXdhaXQgZmluZFNpdGVJZChncWwsIHNpdGVOYW1lKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBleGVjdXRlKGdxbCwgc2l0ZUlkKTtcblxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjb25maWcuc3VjY2Vzc01lc3NhZ2VcbiAgICAgID8gY29uZmlnLnN1Y2Nlc3NNZXNzYWdlKHJlc3VsdClcbiAgICAgIDogYCR7Y29uZmlnLmFjdGlvbn0gXCIke3NpdGVOYW1lfVwiIGNvbXBsZXRlZGA7XG4gICAgc3Bpbm5lcj8uc3VjY2VlZChtZXNzYWdlKTtcbiAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgIHNwaW5uZXI/LmZhaWwoYEZhaWxlZCB0byAke2NvbmZpZy5hY3Rpb24udG9Mb3dlckNhc2UoKX0gXCIke3NpdGVOYW1lfVwiYCk7XG4gICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihlcnJvci5tZXNzYWdlKSk7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG59XG5cbnByb2dyYW1cbiAgLm5hbWUoJ2x3cCcpXG4gIC5kZXNjcmlwdGlvbignQ29tbWFuZC1saW5lIGludGVyZmFjZSBmb3IgTG9jYWwgV29yZFByZXNzIGRldmVsb3BtZW50JylcbiAgLnZlcnNpb24oQ1VSUkVOVF9WRVJTSU9OKVxuICAuZW5hYmxlUG9zaXRpb25hbE9wdGlvbnMoKTtcblxuLy8gR2xvYmFsIG9wdGlvbnNcbnByb2dyYW1cbiAgLm9wdGlvbignLS1qc29uJywgJ091dHB1dCByZXN1bHRzIGFzIEpTT04nKVxuICAub3B0aW9uKCctLXF1aWV0JywgJ01pbmltYWwgb3V0cHV0IChJRHMvbmFtZXMgb25seSknKVxuICAub3B0aW9uKCctLW5vLWNvbG9yJywgJ0Rpc2FibGUgY29sb3JlZCBvdXRwdXQnKTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVXBkYXRlIENvbW1hbmRcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxucHJvZ3JhbVxuICAuY29tbWFuZCgndXBkYXRlJylcbiAgLmRlc2NyaXB0aW9uKCdVcGRhdGUgdGhlIENMSSB0byB0aGUgbGF0ZXN0IHZlcnNpb24nKVxuICAub3B0aW9uKCctLWNoZWNrJywgJ09ubHkgY2hlY2sgZm9yIHVwZGF0ZXMsIGRvIG5vdCBpbnN0YWxsJylcbiAgLmFjdGlvbihhc3luYyAob3B0aW9ucykgPT4ge1xuICAgIGlmIChvcHRpb25zLmNoZWNrKSB7XG4gICAgICBjb25zdCBzcGlubmVyID0gb3JhKCdDaGVja2luZyBmb3IgdXBkYXRlcy4uLicpLnN0YXJ0KCk7XG4gICAgICBjb25zdCBsYXRlc3RWZXJzaW9uID0gYXdhaXQgZmV0Y2hMYXRlc3RWZXJzaW9uKCk7XG5cbiAgICAgIGlmICghbGF0ZXN0VmVyc2lvbikge1xuICAgICAgICBzcGlubmVyLmZhaWwoJ0NvdWxkIG5vdCBjaGVjayBmb3IgdXBkYXRlcycpO1xuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc05ld2VyVmVyc2lvbihsYXRlc3RWZXJzaW9uLCBDVVJSRU5UX1ZFUlNJT04pKSB7XG4gICAgICAgIHNwaW5uZXIuc3VjY2VlZChgVXBkYXRlIGF2YWlsYWJsZTogJHtDVVJSRU5UX1ZFUlNJT059IOKGkiAke2xhdGVzdFZlcnNpb259YCk7XG4gICAgICAgIGNvbnNvbGUubG9nKGBcXG5SdW4gXFx4MWJbMzZtbHdwIHVwZGF0ZVxceDFiWzBtIHRvIGluc3RhbGxgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNwaW5uZXIuc3VjY2VlZChgWW91J3JlIG9uIHRoZSBsYXRlc3QgdmVyc2lvbiAoJHtDVVJSRU5UX1ZFUlNJT059KWApO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHNwaW5uZXIgPSBvcmEoJ1VwZGF0aW5nIENMSS4uLicpLnN0YXJ0KCk7XG5cbiAgICB0cnkge1xuICAgICAgLy8gUnVuIG5wbSB1cGRhdGVcbiAgICAgIGV4ZWNTeW5jKGBucG0gdXBkYXRlIC1nICR7UEFDS0FHRV9OQU1FfWAsIHsgc3RkaW86ICdwaXBlJyB9KTtcbiAgICAgIHNwaW5uZXIuc3VjY2VlZCgnQ0xJIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5Jyk7XG5cbiAgICAgIC8vIENoZWNrIG5ldyB2ZXJzaW9uXG4gICAgICBjb25zdCBuZXdWZXJzaW9uID0gYXdhaXQgZmV0Y2hMYXRlc3RWZXJzaW9uKCk7XG4gICAgICBpZiAobmV3VmVyc2lvbikge1xuICAgICAgICBjb25zb2xlLmxvZyhgXFxuVXBkYXRlZCB0byB2ZXJzaW9uICR7bmV3VmVyc2lvbn1gKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBzcGlubmVyLmZhaWwoJ1VwZGF0ZSBmYWlsZWQnKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoJ1RyeSBydW5uaW5nOiBucG0gdXBkYXRlIC1nICcgKyBQQUNLQUdFX05BTUUpKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gIH0pO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBTaXRlcyBDb21tYW5kc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5jb25zdCBzaXRlcyA9IHByb2dyYW0uY29tbWFuZCgnc2l0ZXMnKS5kZXNjcmlwdGlvbignTWFuYWdlIFdvcmRQcmVzcyBzaXRlcycpO1xuXG5zaXRlc1xuICAuY29tbWFuZCgnbGlzdCcpXG4gIC5kZXNjcmlwdGlvbignTGlzdCBhbGwgV29yZFByZXNzIHNpdGVzJylcbiAgLm9wdGlvbignLS1zdGF0dXMgPHN0YXR1cz4nLCAnRmlsdGVyIGJ5IHN0YXR1cyAocnVubmluZ3xzdG9wcGVkfGFsbCknLCAnYWxsJylcbiAgLmFjdGlvbihhc3luYyAoY21kT3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IGdsb2JhbE9wdHMgPSBwcm9ncmFtLm9wdHMoKSBhcyBGb3JtYXR0ZXJPcHRpb25zO1xuICAgIGNvbnN0IGZvcm1hdCA9IGdldE91dHB1dEZvcm1hdChnbG9iYWxPcHRzKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBncWwgPSBhd2FpdCBlbnN1cmVDb25uZWN0ZWQoZ2xvYmFsT3B0cyk7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLnF1ZXJ5PHtcbiAgICAgICAgc2l0ZXM6IEFycmF5PHsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nOyBkb21haW46IHN0cmluZzsgc3RhdHVzOiBzdHJpbmc7IHBhdGg6IHN0cmluZyB9PjtcbiAgICAgIH0+KGBcbiAgICAgICAgcXVlcnkge1xuICAgICAgICAgIHNpdGVzIHtcbiAgICAgICAgICAgIGlkXG4gICAgICAgICAgICBuYW1lXG4gICAgICAgICAgICBkb21haW5cbiAgICAgICAgICAgIHN0YXR1c1xuICAgICAgICAgICAgcGF0aFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgYCk7XG5cbiAgICAgIGxldCBzaXRlc1RvU2hvdyA9IGRhdGEuc2l0ZXMubWFwKChzKSA9PiAoe1xuICAgICAgICBpZDogcy5pZCxcbiAgICAgICAgbmFtZTogcy5uYW1lLFxuICAgICAgICBkb21haW46IHMuZG9tYWluLFxuICAgICAgICBzdGF0dXM6IHMuc3RhdHVzLnRvTG93ZXJDYXNlKCksXG4gICAgICAgIHBhdGg6IHMucGF0aCxcbiAgICAgIH0pKTtcblxuICAgICAgLy8gRmlsdGVyIGJ5IHN0YXR1cyBpZiBzcGVjaWZpZWRcbiAgICAgIGlmIChjbWRPcHRpb25zLnN0YXR1cyAhPT0gJ2FsbCcpIHtcbiAgICAgICAgc2l0ZXNUb1Nob3cgPSBzaXRlc1RvU2hvdy5maWx0ZXIoKHMpID0+IHMuc3RhdHVzID09PSBjbWRPcHRpb25zLnN0YXR1cyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnNvbGUubG9nKGZvcm1hdFNpdGVMaXN0KHNpdGVzVG9TaG93LCBmb3JtYXQsIHsgbm9Db2xvcjogZ2xvYmFsT3B0cy5ub0NvbG9yIH0pKTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGVycm9yLm1lc3NhZ2UpKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gIH0pO1xuXG5zaXRlc1xuICAuY29tbWFuZCgnZ2V0IDxzaXRlPicpXG4gIC5kZXNjcmlwdGlvbignR2V0IGRldGFpbGVkIGluZm8gYWJvdXQgYSBzaXRlJylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSkgPT4ge1xuICAgIGNvbnN0IGdsb2JhbE9wdHMgPSBwcm9ncmFtLm9wdHMoKSBhcyBGb3JtYXR0ZXJPcHRpb25zO1xuICAgIGNvbnN0IGZvcm1hdCA9IGdldE91dHB1dEZvcm1hdChnbG9iYWxPcHRzKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBncWwgPSBhd2FpdCBlbnN1cmVDb25uZWN0ZWQoZ2xvYmFsT3B0cyk7XG5cbiAgICAgIC8vIEZpcnN0IGZpbmQgdGhlIHNpdGUgYnkgbmFtZSBvciBJRFxuICAgICAgY29uc3Qgc2l0ZXNEYXRhID0gYXdhaXQgZ3FsLnF1ZXJ5PHsgc2l0ZXM6IEFycmF5PHsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nIH0+IH0+KGBcbiAgICAgICAgcXVlcnkgeyBzaXRlcyB7IGlkIG5hbWUgfSB9XG4gICAgICBgKTtcblxuICAgICAgY29uc3QgZm91bmRTaXRlID0gc2l0ZXNEYXRhLnNpdGVzLmZpbmQoXG4gICAgICAgIChzKSA9PiBzLmlkID09PSBzaXRlIHx8IHMubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNpdGUudG9Mb3dlckNhc2UoKSlcbiAgICAgICk7XG5cbiAgICAgIGlmICghZm91bmRTaXRlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoYFNpdGUgbm90IGZvdW5kOiBcIiR7c2l0ZX1cImApKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLnF1ZXJ5PHsgc2l0ZTogYW55IH0+KFxuICAgICAgICBgXG4gICAgICAgIHF1ZXJ5KCRpZDogSUQhKSB7XG4gICAgICAgICAgc2l0ZShpZDogJGlkKSB7XG4gICAgICAgICAgICBpZFxuICAgICAgICAgICAgbmFtZVxuICAgICAgICAgICAgZG9tYWluXG4gICAgICAgICAgICBzdGF0dXNcbiAgICAgICAgICAgIHBhdGhcbiAgICAgICAgICAgIHVybFxuICAgICAgICAgICAgaG9zdFxuICAgICAgICAgICAgaHR0cFBvcnRcbiAgICAgICAgICAgIHhkZWJ1Z0VuYWJsZWRcbiAgICAgICAgICAgIHNlcnZpY2VzIHtcbiAgICAgICAgICAgICAgbmFtZVxuICAgICAgICAgICAgICB2ZXJzaW9uXG4gICAgICAgICAgICAgIHJvbGVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGhvc3RDb25uZWN0aW9ucyB7XG4gICAgICAgICAgICAgIGhvc3RJZFxuICAgICAgICAgICAgICByZW1vdGVTaXRlSWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGAsXG4gICAgICAgIHsgaWQ6IGZvdW5kU2l0ZS5pZCB9XG4gICAgICApO1xuXG4gICAgICBjb25zb2xlLmxvZyhmb3JtYXRTaXRlRGV0YWlsKGRhdGEuc2l0ZSwgZm9ybWF0LCB7IG5vQ29sb3I6IGdsb2JhbE9wdHMubm9Db2xvciB9KSk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihlcnJvci5tZXNzYWdlKSk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9KTtcblxuc2l0ZXNcbiAgLmNvbW1hbmQoJ3N0YXJ0IDxzaXRlPicpXG4gIC5kZXNjcmlwdGlvbignU3RhcnQgYSBzaXRlJylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSkgPT4ge1xuICAgIGF3YWl0IHJ1blNpdGVDb21tYW5kKFxuICAgICAgc2l0ZSxcbiAgICAgIHsgYWN0aW9uOiAnU3RhcnRpbmcnLCBzdWNjZXNzTWVzc2FnZTogKCkgPT4gYFN0YXJ0ZWQgXCIke3NpdGV9XCJgIH0sXG4gICAgICBhc3luYyAoZ3FsLCBzaXRlSWQpID0+IHtcbiAgICAgICAgcmV0dXJuIGdxbC5tdXRhdGUoYG11dGF0aW9uKCRpZDogSUQhKSB7IHN0YXJ0U2l0ZShpZDogJGlkKSB7IGlkIHN0YXR1cyB9IH1gLCB7XG4gICAgICAgICAgaWQ6IHNpdGVJZCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgKTtcbiAgfSk7XG5cbnNpdGVzXG4gIC5jb21tYW5kKCdzdG9wIDxzaXRlPicpXG4gIC5kZXNjcmlwdGlvbignU3RvcCBhIHNpdGUnKVxuICAuYWN0aW9uKGFzeW5jIChzaXRlKSA9PiB7XG4gICAgYXdhaXQgcnVuU2l0ZUNvbW1hbmQoXG4gICAgICBzaXRlLFxuICAgICAgeyBhY3Rpb246ICdTdG9wcGluZycsIHN1Y2Nlc3NNZXNzYWdlOiAoKSA9PiBgU3RvcHBlZCBcIiR7c2l0ZX1cImAgfSxcbiAgICAgIGFzeW5jIChncWwsIHNpdGVJZCkgPT4ge1xuICAgICAgICByZXR1cm4gZ3FsLm11dGF0ZShgbXV0YXRpb24oJGlkOiBJRCEpIHsgc3RvcFNpdGUoaWQ6ICRpZCkgeyBpZCBzdGF0dXMgfSB9YCwgeyBpZDogc2l0ZUlkIH0pO1xuICAgICAgfVxuICAgICk7XG4gIH0pO1xuXG5zaXRlc1xuICAuY29tbWFuZCgncmVzdGFydCA8c2l0ZT4nKVxuICAuZGVzY3JpcHRpb24oJ1Jlc3RhcnQgYSBzaXRlJylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSkgPT4ge1xuICAgIGF3YWl0IHJ1blNpdGVDb21tYW5kKFxuICAgICAgc2l0ZSxcbiAgICAgIHsgYWN0aW9uOiAnUmVzdGFydGluZycsIHN1Y2Nlc3NNZXNzYWdlOiAoKSA9PiBgUmVzdGFydGVkIFwiJHtzaXRlfVwiYCB9LFxuICAgICAgYXN5bmMgKGdxbCwgc2l0ZUlkKSA9PiB7XG4gICAgICAgIHJldHVybiBncWwubXV0YXRlKGBtdXRhdGlvbigkaWQ6IElEISkgeyByZXN0YXJ0U2l0ZShpZDogJGlkKSB7IGlkIHN0YXR1cyB9IH1gLCB7XG4gICAgICAgICAgaWQ6IHNpdGVJZCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgKTtcbiAgfSk7XG5cbnNpdGVzXG4gIC5jb21tYW5kKCdvcGVuIDxzaXRlPicpXG4gIC5kZXNjcmlwdGlvbignT3BlbiBzaXRlIGluIGJyb3dzZXInKVxuICAub3B0aW9uKCctLWFkbWluJywgJ09wZW4gV1AgQWRtaW4gaW5zdGVhZCBvZiBmcm9udGVuZCcpXG4gIC5hY3Rpb24oYXN5bmMgKHNpdGUsIGNtZE9wdGlvbnMpID0+IHtcbiAgICBhd2FpdCBydW5TaXRlQ29tbWFuZChcbiAgICAgIHNpdGUsXG4gICAgICB7IGFjdGlvbjogJ09wZW5pbmcnLCBzdWNjZXNzTWVzc2FnZTogKCkgPT4gYE9wZW5lZCBcIiR7c2l0ZX1cImAgfSxcbiAgICAgIGFzeW5jIChncWwsIHNpdGVJZCkgPT4ge1xuICAgICAgICByZXR1cm4gZ3FsLm11dGF0ZShcbiAgICAgICAgICBgXG4gICAgICAgIG11dGF0aW9uKCRpbnB1dDogT3BlblNpdGVJbnB1dCEpIHtcbiAgICAgICAgICBvcGVuU2l0ZShpbnB1dDogJGlucHV0KSB7IHN1Y2Nlc3MgZXJyb3IgfVxuICAgICAgICB9XG4gICAgICBgLFxuICAgICAgICAgIHsgaW5wdXQ6IHsgc2l0ZUlkLCBvcGVuQWRtaW46IGNtZE9wdGlvbnMuYWRtaW4gfHwgZmFsc2UgfSB9XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgKTtcbiAgfSk7XG5cbnNpdGVzXG4gIC5jb21tYW5kKCdjcmVhdGUgPG5hbWU+JylcbiAgLmRlc2NyaXB0aW9uKCdDcmVhdGUgYSBuZXcgV29yZFByZXNzIHNpdGUnKVxuICAub3B0aW9uKCctLXBocCA8dmVyc2lvbj4nLCAnUEhQIHZlcnNpb24gKGUuZy4sIDguMi4xMCknKVxuICAub3B0aW9uKCctLXdlYiA8c2VydmVyPicsICdXZWIgc2VydmVyIChuZ2lueHxhcGFjaGUpJylcbiAgLm9wdGlvbignLS1kYiA8ZGF0YWJhc2U+JywgJ0RhdGFiYXNlIChteXNxbHxtYXJpYWRiKScpXG4gIC5vcHRpb24oJy0tYmx1ZXByaW50IDxuYW1lPicsICdVc2UgYSBibHVlcHJpbnQnKVxuICAub3B0aW9uKCctLXdwLXVzZXIgPHVzZXJuYW1lPicsICdXb3JkUHJlc3MgYWRtaW4gdXNlcm5hbWUnLCAnYWRtaW4nKVxuICAub3B0aW9uKCctLXdwLWVtYWlsIDxlbWFpbD4nLCAnV29yZFByZXNzIGFkbWluIGVtYWlsJylcbiAgLmFjdGlvbihhc3luYyAobmFtZSwgY21kT3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IGdsb2JhbE9wdHMgPSBwcm9ncmFtLm9wdHMoKSBhcyBGb3JtYXR0ZXJPcHRpb25zO1xuICAgIGNvbnN0IHNwaW5uZXIgPSBnbG9iYWxPcHRzLnF1aWV0ID8gbnVsbCA6IG9yYShgQ3JlYXRpbmcgXCIke25hbWV9XCIuLi5gKS5zdGFydCgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGdxbCA9IGF3YWl0IGVuc3VyZUNvbm5lY3RlZChnbG9iYWxPcHRzKTtcblxuICAgICAgY29uc3QgaW5wdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0geyBuYW1lIH07XG4gICAgICBpZiAoY21kT3B0aW9ucy5waHApIGlucHV0LnBocFZlcnNpb24gPSBjbWRPcHRpb25zLnBocDtcbiAgICAgIGlmIChjbWRPcHRpb25zLndlYikgaW5wdXQud2ViU2VydmVyID0gY21kT3B0aW9ucy53ZWI7XG4gICAgICBpZiAoY21kT3B0aW9ucy5kYikgaW5wdXQuZGF0YWJhc2UgPSBjbWRPcHRpb25zLmRiO1xuICAgICAgaWYgKGNtZE9wdGlvbnMuYmx1ZXByaW50KSBpbnB1dC5ibHVlcHJpbnQgPSBjbWRPcHRpb25zLmJsdWVwcmludDtcbiAgICAgIGlmIChjbWRPcHRpb25zLndwVXNlcikgaW5wdXQud3BBZG1pblVzZXJuYW1lID0gY21kT3B0aW9ucy53cFVzZXI7XG4gICAgICBpZiAoY21kT3B0aW9ucy53cEVtYWlsKSBpbnB1dC53cEFkbWluRW1haWwgPSBjbWRPcHRpb25zLndwRW1haWw7XG5cbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwubXV0YXRlPHtcbiAgICAgICAgY3JlYXRlU2l0ZTogeyBzdWNjZXNzOiBib29sZWFuOyBzaXRlSWQ6IHN0cmluZzsgc2l0ZU5hbWU6IHN0cmluZzsgZXJyb3I6IHN0cmluZyB8IG51bGwgfTtcbiAgICAgIH0+KFxuICAgICAgICBgXG4gICAgICAgIG11dGF0aW9uKCRpbnB1dDogQ3JlYXRlU2l0ZUlucHV0ISkge1xuICAgICAgICAgIGNyZWF0ZVNpdGUoaW5wdXQ6ICRpbnB1dCkgeyBzdWNjZXNzIHNpdGVJZCBzaXRlTmFtZSBlcnJvciB9XG4gICAgICAgIH1cbiAgICAgIGAsXG4gICAgICAgIHsgaW5wdXQgfVxuICAgICAgKTtcblxuICAgICAgaWYgKCFkYXRhLmNyZWF0ZVNpdGUuc3VjY2Vzcykge1xuICAgICAgICBzcGlubmVyPy5mYWlsKCdDcmVhdGUgZmFpbGVkJyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZGF0YS5jcmVhdGVTaXRlLmVycm9yIHx8ICdGYWlsZWQgdG8gY3JlYXRlIHNpdGUnKSk7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cblxuICAgICAgc3Bpbm5lcj8uc3VjY2VlZChgQ3JlYXRlZCBcIiR7ZGF0YS5jcmVhdGVTaXRlLnNpdGVOYW1lfVwiICgke2RhdGEuY3JlYXRlU2l0ZS5zaXRlSWR9KWApO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIHNwaW5uZXI/LmZhaWwoJ0NyZWF0ZSBmYWlsZWQnKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZXJyb3IubWVzc2FnZSkpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfSk7XG5cbnNpdGVzXG4gIC5jb21tYW5kKCdkZWxldGUgPHNpdGU+JylcbiAgLmRlc2NyaXB0aW9uKCdEZWxldGUgYSBzaXRlJylcbiAgLm9wdGlvbignLXksIC0teWVzJywgJ1NraXAgY29uZmlybWF0aW9uJylcbiAgLm9wdGlvbignLS1rZWVwLWZpbGVzJywgJ0tlZXAgc2l0ZSBmaWxlcyAob25seSByZW1vdmUgZnJvbSBMb2NhbCknKVxuICAuYWN0aW9uKGFzeW5jIChzaXRlLCBjbWRPcHRpb25zKSA9PiB7XG4gICAgYXdhaXQgcnVuU2l0ZUNvbW1hbmQoXG4gICAgICBzaXRlLFxuICAgICAgeyBhY3Rpb246ICdEZWxldGluZycsIHN1Y2Nlc3NNZXNzYWdlOiAoKSA9PiBgRGVsZXRlZCBcIiR7c2l0ZX1cImAgfSxcbiAgICAgIGFzeW5jIChncWwsIHNpdGVJZCkgPT4ge1xuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLm11dGF0ZTx7IGRlbGV0ZVNpdGU6IHsgc3VjY2VzczogYm9vbGVhbjsgZXJyb3I6IHN0cmluZyB8IG51bGwgfSB9PihcbiAgICAgICAgICBgXG4gICAgICAgIG11dGF0aW9uKCRpbnB1dDogRGVsZXRlU2l0ZUlucHV0ISkge1xuICAgICAgICAgIGRlbGV0ZVNpdGUoaW5wdXQ6ICRpbnB1dCkgeyBzdWNjZXNzIGVycm9yIH1cbiAgICAgICAgfVxuICAgICAgYCxcbiAgICAgICAgICB7IGlucHV0OiB7IGlkOiBzaXRlSWQsIHRyYXNoRmlsZXM6ICFjbWRPcHRpb25zLmtlZXBGaWxlcyB9IH1cbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCFkYXRhLmRlbGV0ZVNpdGUuc3VjY2Vzcykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihkYXRhLmRlbGV0ZVNpdGUuZXJyb3IgfHwgJ0ZhaWxlZCB0byBkZWxldGUgc2l0ZScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgfVxuICAgICk7XG4gIH0pO1xuXG5zaXRlc1xuICAuY29tbWFuZCgnY2xvbmUgPHNpdGU+IDxuZXdOYW1lPicpXG4gIC5kZXNjcmlwdGlvbignQ2xvbmUgYSBzaXRlJylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSwgbmV3TmFtZSkgPT4ge1xuICAgIGF3YWl0IHJ1blNpdGVDb21tYW5kKFxuICAgICAgc2l0ZSxcbiAgICAgIHtcbiAgICAgICAgYWN0aW9uOiBgQ2xvbmluZ2AsXG4gICAgICAgIHN1Y2Nlc3NNZXNzYWdlOiAoZGF0YTogeyBjbG9uZVNpdGU6IHsgbmV3U2l0ZU5hbWU6IHN0cmluZzsgbmV3U2l0ZUlkOiBzdHJpbmcgfSB9KSA9PlxuICAgICAgICAgIGBDbG9uZWQgdG8gXCIke2RhdGEuY2xvbmVTaXRlLm5ld1NpdGVOYW1lfVwiICgke2RhdGEuY2xvbmVTaXRlLm5ld1NpdGVJZH0pYCxcbiAgICAgIH0sXG4gICAgICBhc3luYyAoZ3FsLCBzaXRlSWQpID0+IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5tdXRhdGU8e1xuICAgICAgICAgIGNsb25lU2l0ZToge1xuICAgICAgICAgICAgc3VjY2VzczogYm9vbGVhbjtcbiAgICAgICAgICAgIG5ld1NpdGVJZDogc3RyaW5nO1xuICAgICAgICAgICAgbmV3U2l0ZU5hbWU6IHN0cmluZztcbiAgICAgICAgICAgIGVycm9yOiBzdHJpbmcgfCBudWxsO1xuICAgICAgICAgIH07XG4gICAgICAgIH0+KFxuICAgICAgICAgIGBcbiAgICAgICAgbXV0YXRpb24oJGlucHV0OiBDbG9uZVNpdGVJbnB1dCEpIHtcbiAgICAgICAgICBjbG9uZVNpdGUoaW5wdXQ6ICRpbnB1dCkgeyBzdWNjZXNzIG5ld1NpdGVJZCBuZXdTaXRlTmFtZSBlcnJvciB9XG4gICAgICAgIH1cbiAgICAgIGAsXG4gICAgICAgICAgeyBpbnB1dDogeyBzaXRlSWQsIG5ld05hbWUgfSB9XG4gICAgICAgICk7XG4gICAgICAgIGlmICghZGF0YS5jbG9uZVNpdGUuc3VjY2Vzcykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihkYXRhLmNsb25lU2l0ZS5lcnJvciB8fCAnRmFpbGVkIHRvIGNsb25lIHNpdGUnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgIH1cbiAgICApO1xuICB9KTtcblxuc2l0ZXNcbiAgLmNvbW1hbmQoJ2V4cG9ydCA8c2l0ZT4nKVxuICAuZGVzY3JpcHRpb24oJ0V4cG9ydCBzaXRlIHRvIHppcCBmaWxlJylcbiAgLm9wdGlvbignLW8sIC0tb3V0cHV0IDxwYXRoPicsICdPdXRwdXQgZmlsZSBwYXRoJylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSwgY21kT3B0aW9ucykgPT4ge1xuICAgIGF3YWl0IHJ1blNpdGVDb21tYW5kKFxuICAgICAgc2l0ZSxcbiAgICAgIHtcbiAgICAgICAgYWN0aW9uOiAnRXhwb3J0aW5nJyxcbiAgICAgICAgc3VjY2Vzc01lc3NhZ2U6IChkYXRhOiB7IGV4cG9ydFNpdGU6IHsgb3V0cHV0UGF0aDogc3RyaW5nIH0gfSkgPT5cbiAgICAgICAgICBgRXhwb3J0ZWQgdG8gJHtkYXRhLmV4cG9ydFNpdGUub3V0cHV0UGF0aH1gLFxuICAgICAgfSxcbiAgICAgIGFzeW5jIChncWwsIHNpdGVJZCkgPT4ge1xuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLm11dGF0ZTx7XG4gICAgICAgICAgZXhwb3J0U2l0ZTogeyBzdWNjZXNzOiBib29sZWFuOyBvdXRwdXRQYXRoOiBzdHJpbmc7IGVycm9yOiBzdHJpbmcgfCBudWxsIH07XG4gICAgICAgIH0+KFxuICAgICAgICAgIGBcbiAgICAgICAgbXV0YXRpb24oJGlucHV0OiBFeHBvcnRTaXRlSW5wdXQhKSB7XG4gICAgICAgICAgZXhwb3J0U2l0ZShpbnB1dDogJGlucHV0KSB7IHN1Y2Nlc3Mgb3V0cHV0UGF0aCBlcnJvciB9XG4gICAgICAgIH1cbiAgICAgIGAsXG4gICAgICAgICAgeyBpbnB1dDogeyBzaXRlSWQsIG91dHB1dFBhdGg6IGNtZE9wdGlvbnMub3V0cHV0IH0gfVxuICAgICAgICApO1xuICAgICAgICBpZiAoIWRhdGEuZXhwb3J0U2l0ZS5zdWNjZXNzKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGRhdGEuZXhwb3J0U2l0ZS5lcnJvciB8fCAnRmFpbGVkIHRvIGV4cG9ydCBzaXRlJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICB9XG4gICAgKTtcbiAgfSk7XG5cbnNpdGVzXG4gIC5jb21tYW5kKCdpbXBvcnQgPHppcEZpbGU+JylcbiAgLmRlc2NyaXB0aW9uKCdJbXBvcnQgc2l0ZSBmcm9tIHppcCBmaWxlJylcbiAgLm9wdGlvbignLW4sIC0tbmFtZSA8bmFtZT4nLCAnU2l0ZSBuYW1lIChkZWZhdWx0cyB0byB6aXAgZmlsZW5hbWUpJylcbiAgLmFjdGlvbihhc3luYyAoemlwRmlsZSwgY21kT3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IGdsb2JhbE9wdHMgPSBwcm9ncmFtLm9wdHMoKSBhcyBGb3JtYXR0ZXJPcHRpb25zO1xuICAgIGNvbnN0IHNwaW5uZXIgPSBnbG9iYWxPcHRzLnF1aWV0ID8gbnVsbCA6IG9yYShgSW1wb3J0aW5nIHNpdGUuLi5gKS5zdGFydCgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGdxbCA9IGF3YWl0IGVuc3VyZUNvbm5lY3RlZChnbG9iYWxPcHRzKTtcblxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5tdXRhdGU8e1xuICAgICAgICBpbXBvcnRTaXRlOiB7IHN1Y2Nlc3M6IGJvb2xlYW47IHNpdGVJZDogc3RyaW5nOyBzaXRlTmFtZTogc3RyaW5nOyBlcnJvcjogc3RyaW5nIHwgbnVsbCB9O1xuICAgICAgfT4oXG4gICAgICAgIGBcbiAgICAgICAgbXV0YXRpb24oJGlucHV0OiBJbXBvcnRTaXRlSW5wdXQhKSB7XG4gICAgICAgICAgaW1wb3J0U2l0ZShpbnB1dDogJGlucHV0KSB7IHN1Y2Nlc3Mgc2l0ZUlkIHNpdGVOYW1lIGVycm9yIH1cbiAgICAgICAgfVxuICAgICAgYCxcbiAgICAgICAgeyBpbnB1dDogeyB6aXBQYXRoOiB6aXBGaWxlLCBzaXRlTmFtZTogY21kT3B0aW9ucy5uYW1lIH0gfVxuICAgICAgKTtcblxuICAgICAgaWYgKCFkYXRhLmltcG9ydFNpdGUuc3VjY2Vzcykge1xuICAgICAgICBzcGlubmVyPy5mYWlsKCdJbXBvcnQgZmFpbGVkJyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZGF0YS5pbXBvcnRTaXRlLmVycm9yIHx8ICdGYWlsZWQgdG8gaW1wb3J0IHNpdGUnKSk7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cblxuICAgICAgc3Bpbm5lcj8uc3VjY2VlZChgSW1wb3J0ZWQgXCIke2RhdGEuaW1wb3J0U2l0ZS5zaXRlTmFtZX1cIiAoJHtkYXRhLmltcG9ydFNpdGUuc2l0ZUlkfSlgKTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBzcGlubmVyPy5mYWlsKCdJbXBvcnQgZmFpbGVkJyk7XG4gICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGVycm9yLm1lc3NhZ2UpKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gIH0pO1xuXG5zaXRlc1xuICAuY29tbWFuZCgncmVuYW1lIDxzaXRlPiA8bmV3TmFtZT4nKVxuICAuZGVzY3JpcHRpb24oJ1JlbmFtZSBhIHNpdGUnKVxuICAuYWN0aW9uKGFzeW5jIChzaXRlLCBuZXdOYW1lKSA9PiB7XG4gICAgYXdhaXQgcnVuU2l0ZUNvbW1hbmQoXG4gICAgICBzaXRlLFxuICAgICAgeyBhY3Rpb246ICdSZW5hbWluZycsIHN1Y2Nlc3NNZXNzYWdlOiAoKSA9PiBgUmVuYW1lZCB0byBcIiR7bmV3TmFtZX1cImAgfSxcbiAgICAgIGFzeW5jIChncWwsIHNpdGVJZCkgPT4ge1xuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLm11dGF0ZTx7XG4gICAgICAgICAgbWNwUmVuYW1lU2l0ZTogeyBzdWNjZXNzOiBib29sZWFuOyBlcnJvcjogc3RyaW5nIHwgbnVsbCB9O1xuICAgICAgICB9PihcbiAgICAgICAgICBgXG4gICAgICAgIG11dGF0aW9uKCRpbnB1dDogTWNwUmVuYW1lU2l0ZUlucHV0ISkge1xuICAgICAgICAgIG1jcFJlbmFtZVNpdGUoaW5wdXQ6ICRpbnB1dCkgeyBzdWNjZXNzIGVycm9yIH1cbiAgICAgICAgfVxuICAgICAgYCxcbiAgICAgICAgICB7IGlucHV0OiB7IHNpdGVJZCwgbmV3TmFtZSB9IH1cbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCFkYXRhLm1jcFJlbmFtZVNpdGUuc3VjY2Vzcykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihkYXRhLm1jcFJlbmFtZVNpdGUuZXJyb3IgfHwgJ0ZhaWxlZCB0byByZW5hbWUgc2l0ZScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgfVxuICAgICk7XG4gIH0pO1xuXG5zaXRlc1xuICAuY29tbWFuZCgnc3NsIDxzaXRlPicpXG4gIC5kZXNjcmlwdGlvbignVHJ1c3QgU1NMIGNlcnRpZmljYXRlIGZvciBhIHNpdGUnKVxuICAuYWN0aW9uKGFzeW5jIChzaXRlKSA9PiB7XG4gICAgYXdhaXQgcnVuU2l0ZUNvbW1hbmQoXG4gICAgICBzaXRlLFxuICAgICAgeyBhY3Rpb246ICdUcnVzdGluZyBTU0wgZm9yJywgc3VjY2Vzc01lc3NhZ2U6ICgpID0+IGBTU0wgY2VydGlmaWNhdGUgdHJ1c3RlZCBmb3IgXCIke3NpdGV9XCJgIH0sXG4gICAgICBhc3luYyAoZ3FsLCBzaXRlSWQpID0+IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5tdXRhdGU8eyB0cnVzdFNzbDogeyBzdWNjZXNzOiBib29sZWFuOyBlcnJvcjogc3RyaW5nIHwgbnVsbCB9IH0+KFxuICAgICAgICAgIGBcbiAgICAgICAgbXV0YXRpb24oJGlucHV0OiBUcnVzdFNzbElucHV0ISkge1xuICAgICAgICAgIHRydXN0U3NsKGlucHV0OiAkaW5wdXQpIHsgc3VjY2VzcyBlcnJvciB9XG4gICAgICAgIH1cbiAgICAgIGAsXG4gICAgICAgICAgeyBpbnB1dDogeyBzaXRlSWQgfSB9XG4gICAgICAgICk7XG4gICAgICAgIGlmICghZGF0YS50cnVzdFNzbC5zdWNjZXNzKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGRhdGEudHJ1c3RTc2wuZXJyb3IgfHwgJ0ZhaWxlZCB0byB0cnVzdCBTU0wnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgIH1cbiAgICApO1xuICB9KTtcblxuc2l0ZXNcbiAgLmNvbW1hbmQoJ3BocCA8c2l0ZT4gPHZlcnNpb24+JylcbiAgLmRlc2NyaXB0aW9uKCdDaGFuZ2UgUEhQIHZlcnNpb24gZm9yIGEgc2l0ZScpXG4gIC5hY3Rpb24oYXN5bmMgKHNpdGUsIHZlcnNpb24pID0+IHtcbiAgICBhd2FpdCBydW5TaXRlQ29tbWFuZChcbiAgICAgIHNpdGUsXG4gICAgICB7XG4gICAgICAgIGFjdGlvbjogYENoYW5naW5nIFBIUCB0byAke3ZlcnNpb259IGZvcmAsXG4gICAgICAgIHN1Y2Nlc3NNZXNzYWdlOiAoKSA9PiBgUEhQIHZlcnNpb24gY2hhbmdlZCB0byAke3ZlcnNpb259YCxcbiAgICAgIH0sXG4gICAgICBhc3luYyAoZ3FsLCBzaXRlSWQpID0+IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5tdXRhdGU8e1xuICAgICAgICAgIGNoYW5nZVBocFZlcnNpb246IHsgc3VjY2VzczogYm9vbGVhbjsgZXJyb3I6IHN0cmluZyB8IG51bGwgfTtcbiAgICAgICAgfT4oXG4gICAgICAgICAgYFxuICAgICAgICBtdXRhdGlvbigkaW5wdXQ6IENoYW5nZVBocFZlcnNpb25JbnB1dCEpIHtcbiAgICAgICAgICBjaGFuZ2VQaHBWZXJzaW9uKGlucHV0OiAkaW5wdXQpIHsgc3VjY2VzcyBlcnJvciB9XG4gICAgICAgIH1cbiAgICAgIGAsXG4gICAgICAgICAgeyBpbnB1dDogeyBzaXRlSWQsIHBocFZlcnNpb246IHZlcnNpb24gfSB9XG4gICAgICAgICk7XG4gICAgICAgIGlmICghZGF0YS5jaGFuZ2VQaHBWZXJzaW9uLnN1Y2Nlc3MpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZGF0YS5jaGFuZ2VQaHBWZXJzaW9uLmVycm9yIHx8ICdGYWlsZWQgdG8gY2hhbmdlIFBIUCB2ZXJzaW9uJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICB9XG4gICAgKTtcbiAgfSk7XG5cbnNpdGVzXG4gIC5jb21tYW5kKCd4ZGVidWcgPHNpdGU+JylcbiAgLmRlc2NyaXB0aW9uKCdUb2dnbGUgWGRlYnVnIGZvciBhIHNpdGUnKVxuICAub3B0aW9uKCctLW9uJywgJ0VuYWJsZSBYZGVidWcnKVxuICAub3B0aW9uKCctLW9mZicsICdEaXNhYmxlIFhkZWJ1ZycpXG4gIC5hY3Rpb24oYXN5bmMgKHNpdGUsIGNtZE9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBlbmFibGVkID0gY21kT3B0aW9ucy5vbiA/IHRydWUgOiBjbWRPcHRpb25zLm9mZiA/IGZhbHNlIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGFjdGlvbiA9IGVuYWJsZWQgPT09IHVuZGVmaW5lZCA/ICdUb2dnbGluZycgOiBlbmFibGVkID8gJ0VuYWJsaW5nJyA6ICdEaXNhYmxpbmcnO1xuICAgIGF3YWl0IHJ1blNpdGVDb21tYW5kKFxuICAgICAgc2l0ZSxcbiAgICAgIHtcbiAgICAgICAgYWN0aW9uOiBgJHthY3Rpb259IFhkZWJ1ZyBmb3JgLFxuICAgICAgICBzdWNjZXNzTWVzc2FnZTogKGRhdGE6IHsgdG9nZ2xlWGRlYnVnOiB7IGVuYWJsZWQ6IGJvb2xlYW4gfSB9KSA9PlxuICAgICAgICAgIGBYZGVidWcgJHtkYXRhLnRvZ2dsZVhkZWJ1Zy5lbmFibGVkID8gJ2VuYWJsZWQnIDogJ2Rpc2FibGVkJ31gLFxuICAgICAgfSxcbiAgICAgIGFzeW5jIChncWwsIHNpdGVJZCkgPT4ge1xuICAgICAgICAvLyBJZiBubyBmbGFnIHNwZWNpZmllZCwgZ2V0IGN1cnJlbnQgc3RhdGUgYW5kIHRvZ2dsZVxuICAgICAgICBsZXQgdGFyZ2V0RW5hYmxlZCA9IGVuYWJsZWQ7XG4gICAgICAgIGlmICh0YXJnZXRFbmFibGVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb25zdCBzaXRlRGF0YSA9IGF3YWl0IGdxbC5xdWVyeTx7IHNpdGU6IHsgeGRlYnVnRW5hYmxlZDogYm9vbGVhbiB9IH0+KFxuICAgICAgICAgICAgYFxuICAgICAgICAgIHF1ZXJ5KCRpZDogSUQhKSB7IHNpdGUoaWQ6ICRpZCkgeyB4ZGVidWdFbmFibGVkIH0gfVxuICAgICAgICBgLFxuICAgICAgICAgICAgeyBpZDogc2l0ZUlkIH1cbiAgICAgICAgICApO1xuICAgICAgICAgIHRhcmdldEVuYWJsZWQgPSAhc2l0ZURhdGEuc2l0ZS54ZGVidWdFbmFibGVkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwubXV0YXRlPHtcbiAgICAgICAgICB0b2dnbGVYZGVidWc6IHsgc3VjY2VzczogYm9vbGVhbjsgZW5hYmxlZDogYm9vbGVhbjsgZXJyb3I6IHN0cmluZyB8IG51bGwgfTtcbiAgICAgICAgfT4oXG4gICAgICAgICAgYFxuICAgICAgICBtdXRhdGlvbigkaW5wdXQ6IFRvZ2dsZVhkZWJ1Z0lucHV0ISkge1xuICAgICAgICAgIHRvZ2dsZVhkZWJ1ZyhpbnB1dDogJGlucHV0KSB7IHN1Y2Nlc3MgZW5hYmxlZCBlcnJvciB9XG4gICAgICAgIH1cbiAgICAgIGAsXG4gICAgICAgICAgeyBpbnB1dDogeyBzaXRlSWQsIGVuYWJsZWQ6IHRhcmdldEVuYWJsZWQgfSB9XG4gICAgICAgICk7XG4gICAgICAgIGlmICghZGF0YS50b2dnbGVYZGVidWcuc3VjY2Vzcykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihkYXRhLnRvZ2dsZVhkZWJ1Zy5lcnJvciB8fCAnRmFpbGVkIHRvIHRvZ2dsZSBYZGVidWcnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgIH1cbiAgICApO1xuICB9KTtcblxuc2l0ZXNcbiAgLmNvbW1hbmQoJ2xvZ3MgPHNpdGU+JylcbiAgLmRlc2NyaXB0aW9uKCdHZXQgc2l0ZSBsb2dzJylcbiAgLm9wdGlvbignLXQsIC0tdHlwZSA8dHlwZT4nLCAnTG9nIHR5cGUgKHBocHxuZ2lueHxteXNxbCknLCAncGhwJylcbiAgLm9wdGlvbignLW4sIC0tbGluZXMgPG4+JywgJ051bWJlciBvZiBsaW5lcycsICc1MCcpXG4gIC5hY3Rpb24oYXN5bmMgKHNpdGUsIGNtZE9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBnbG9iYWxPcHRzID0gcHJvZ3JhbS5vcHRzKCkgYXMgRm9ybWF0dGVyT3B0aW9ucztcbiAgICBjb25zdCBmb3JtYXQgPSBnZXRPdXRwdXRGb3JtYXQoZ2xvYmFsT3B0cyk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZ3FsID0gYXdhaXQgZW5zdXJlQ29ubmVjdGVkKGdsb2JhbE9wdHMpO1xuICAgICAgY29uc3Qgc2l0ZUlkID0gYXdhaXQgZmluZFNpdGVJZChncWwsIHNpdGUpO1xuXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLm11dGF0ZTx7XG4gICAgICAgIGdldFNpdGVMb2dzOiB7IHN1Y2Nlc3M6IGJvb2xlYW47IGxvZ3M6IHN0cmluZ1tdOyBlcnJvcjogc3RyaW5nIHwgbnVsbCB9O1xuICAgICAgfT4oXG4gICAgICAgIGBcbiAgICAgICAgbXV0YXRpb24oJGlucHV0OiBHZXRTaXRlTG9nc0lucHV0ISkge1xuICAgICAgICAgIGdldFNpdGVMb2dzKGlucHV0OiAkaW5wdXQpIHsgc3VjY2VzcyBsb2dzIGVycm9yIH1cbiAgICAgICAgfVxuICAgICAgYCxcbiAgICAgICAgeyBpbnB1dDogeyBzaXRlSWQsIGxvZ1R5cGU6IGNtZE9wdGlvbnMudHlwZSwgbGluZXM6IHBhcnNlSW50KGNtZE9wdGlvbnMubGluZXMsIDEwKSB9IH1cbiAgICAgICk7XG5cbiAgICAgIGlmICghZGF0YS5nZXRTaXRlTG9ncy5zdWNjZXNzKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZGF0YS5nZXRTaXRlTG9ncy5lcnJvciB8fCAnRmFpbGVkIHRvIGdldCBsb2dzJykpO1xuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChmb3JtYXQgPT09ICdqc29uJykge1xuICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShkYXRhLmdldFNpdGVMb2dzLmxvZ3MsIG51bGwsIDIpKTtcbiAgICAgIH0gZWxzZSBpZiAoZGF0YS5nZXRTaXRlTG9ncy5sb2dzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjb25zb2xlLmxvZygnTm8gbG9ncyBmb3VuZC4nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRhdGEuZ2V0U2l0ZUxvZ3MubG9ncy5mb3JFYWNoKChsaW5lKSA9PiBjb25zb2xlLmxvZyhsaW5lKSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihlcnJvci5tZXNzYWdlKSk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9KTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gV1AtQ0xJIENvbW1hbmRcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxucHJvZ3JhbVxuICAuY29tbWFuZCgnd3AgPHNpdGU+IFthcmdzLi4uXScpXG4gIC5kZXNjcmlwdGlvbignUnVuIFdQLUNMSSBjb21tYW5kcyBhZ2FpbnN0IGEgc2l0ZScpXG4gIC5vcHRpb24oJy0td2l0aC1wbHVnaW5zJywgJ0xvYWQgcGx1Z2lucyAoZGVmYXVsdDogcGx1Z2lucyBhcmUgc2tpcHBlZCBmb3Igc2FmZXR5KScpXG4gIC5vcHRpb24oJy0td2l0aC10aGVtZXMnLCAnTG9hZCB0aGVtZXMgKGRlZmF1bHQ6IHRoZW1lcyBhcmUgc2tpcHBlZCBmb3Igc2FmZXR5KScpXG4gIC5hbGxvd1Vua25vd25PcHRpb24oKVxuICAucGFzc1Rocm91Z2hPcHRpb25zKClcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSwgYXJncywgY21kT3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IGdsb2JhbE9wdHMgPSBwcm9ncmFtLm9wdHMoKSBhcyBGb3JtYXR0ZXJPcHRpb25zO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGdxbCA9IGF3YWl0IGVuc3VyZUNvbm5lY3RlZChnbG9iYWxPcHRzKTtcbiAgICAgIGNvbnN0IHNpdGVJZCA9IGF3YWl0IGZpbmRTaXRlSWQoZ3FsLCBzaXRlKTtcblxuICAgICAgY29uc3QgaW5wdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgICAgICBzaXRlSWQsXG4gICAgICAgIGFyZ3MsXG4gICAgICAgIHNraXBQbHVnaW5zOiAhY21kT3B0aW9ucy53aXRoUGx1Z2lucyxcbiAgICAgICAgc2tpcFRoZW1lczogIWNtZE9wdGlvbnMud2l0aFRoZW1lcyxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwubXV0YXRlPHtcbiAgICAgICAgd3BDbGk6IHsgc3VjY2VzczogYm9vbGVhbjsgb3V0cHV0OiBzdHJpbmc7IGVycm9yOiBzdHJpbmcgfCBudWxsIH07XG4gICAgICB9PihcbiAgICAgICAgYFxuICAgICAgICBtdXRhdGlvbigkaW5wdXQ6IFdwQ2xpSW5wdXQhKSB7XG4gICAgICAgICAgd3BDbGkoaW5wdXQ6ICRpbnB1dCkgeyBzdWNjZXNzIG91dHB1dCBlcnJvciB9XG4gICAgICAgIH1cbiAgICAgIGAsXG4gICAgICAgIHsgaW5wdXQgfVxuICAgICAgKTtcblxuICAgICAgaWYgKCFkYXRhLndwQ2xpLnN1Y2Nlc3MpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihkYXRhLndwQ2xpLmVycm9yIHx8ICdXUC1DTEkgY29tbWFuZCBmYWlsZWQnKSk7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cblxuICAgICAgY29uc29sZS5sb2coZGF0YS53cENsaS5vdXRwdXQpO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZXJyb3IubWVzc2FnZSkpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfSk7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEluZm8gQ29tbWFuZFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdpbmZvJylcbiAgLmRlc2NyaXB0aW9uKCdTaG93IExvY2FsIGFwcGxpY2F0aW9uIGluZm8nKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBnbG9iYWxPcHRzID0gcHJvZ3JhbS5vcHRzKCkgYXMgRm9ybWF0dGVyT3B0aW9ucztcbiAgICBjb25zdCBmb3JtYXQgPSBnZXRPdXRwdXRGb3JtYXQoZ2xvYmFsT3B0cyk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZ3FsID0gYXdhaXQgZW5zdXJlQ29ubmVjdGVkKGdsb2JhbE9wdHMpO1xuXG4gICAgICAvLyBHZXQgc2l0ZXMgY291bnQgYW5kIGJhc2ljIGluZm9cbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwucXVlcnk8eyBzaXRlczogQXJyYXk8eyBpZDogc3RyaW5nOyBzdGF0dXM6IHN0cmluZyB9PiB9PihgXG4gICAgICAgIHF1ZXJ5IHsgc2l0ZXMgeyBpZCBzdGF0dXMgfSB9XG4gICAgICBgKTtcblxuICAgICAgY29uc3QgcnVubmluZyA9IGRhdGEuc2l0ZXMuZmlsdGVyKChzKSA9PiBzLnN0YXR1cy50b0xvd2VyQ2FzZSgpID09PSAncnVubmluZycpLmxlbmd0aDtcbiAgICAgIGNvbnN0IHN0b3BwZWQgPSBkYXRhLnNpdGVzLmZpbHRlcigocykgPT4gcy5zdGF0dXMudG9Mb3dlckNhc2UoKSAhPT0gJ3J1bm5pbmcnKS5sZW5ndGg7XG5cbiAgICAgIGNvbnN0IGluZm8gPSB7XG4gICAgICAgIHRvdGFsU2l0ZXM6IGRhdGEuc2l0ZXMubGVuZ3RoLFxuICAgICAgICBydW5uaW5nU2l0ZXM6IHJ1bm5pbmcsXG4gICAgICAgIHN0b3BwZWRTaXRlczogc3RvcHBlZCxcbiAgICAgICAgZ3JhcGhxbEVuZHBvaW50OiBjbGllbnQ/LlsndXJsJ10gfHwgJ2Nvbm5lY3RlZCcsXG4gICAgICB9O1xuXG4gICAgICBjb25zb2xlLmxvZyhmb3JtYXRTaXRlRGV0YWlsKGluZm8sIGZvcm1hdCwgeyBub0NvbG9yOiBnbG9iYWxPcHRzLm5vQ29sb3IgfSkpO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZXJyb3IubWVzc2FnZSkpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfSk7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFNlcnZpY2VzIENvbW1hbmRcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxucHJvZ3JhbVxuICAuY29tbWFuZCgnc2VydmljZXMnKVxuICAuZGVzY3JpcHRpb24oJ0xpc3QgYXZhaWxhYmxlIHNlcnZpY2UgdmVyc2lvbnMnKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBnbG9iYWxPcHRzID0gcHJvZ3JhbS5vcHRzKCkgYXMgRm9ybWF0dGVyT3B0aW9ucztcbiAgICBjb25zdCBmb3JtYXQgPSBnZXRPdXRwdXRGb3JtYXQoZ2xvYmFsT3B0cyk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZ3FsID0gYXdhaXQgZW5zdXJlQ29ubmVjdGVkKGdsb2JhbE9wdHMpO1xuXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLnF1ZXJ5PHtcbiAgICAgICAgbGlzdFNlcnZpY2VzOiB7XG4gICAgICAgICAgc3VjY2VzczogYm9vbGVhbjtcbiAgICAgICAgICBzZXJ2aWNlczogQXJyYXk8eyByb2xlOiBzdHJpbmc7IG5hbWU6IHN0cmluZzsgdmVyc2lvbjogc3RyaW5nIH0+O1xuICAgICAgICAgIGVycm9yOiBzdHJpbmcgfCBudWxsO1xuICAgICAgICB9O1xuICAgICAgfT4oYFxuICAgICAgICBxdWVyeSB7XG4gICAgICAgICAgbGlzdFNlcnZpY2VzIHtcbiAgICAgICAgICAgIHN1Y2Nlc3NcbiAgICAgICAgICAgIHNlcnZpY2VzIHsgcm9sZSBuYW1lIHZlcnNpb24gfVxuICAgICAgICAgICAgZXJyb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGApO1xuXG4gICAgICBpZiAoIWRhdGEubGlzdFNlcnZpY2VzLnN1Y2Nlc3MpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihkYXRhLmxpc3RTZXJ2aWNlcy5lcnJvciB8fCAnRmFpbGVkIHRvIGxpc3Qgc2VydmljZXMnKSk7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZvcm1hdCA9PT0gJ2pzb24nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGRhdGEubGlzdFNlcnZpY2VzLnNlcnZpY2VzLCBudWxsLCAyKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBncm91cGVkOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBzdmMgb2YgZGF0YS5saXN0U2VydmljZXMuc2VydmljZXMpIHtcbiAgICAgICAgICBpZiAoIWdyb3VwZWRbc3ZjLnJvbGVdKSBncm91cGVkW3N2Yy5yb2xlXSA9IFtdO1xuICAgICAgICAgIGdyb3VwZWRbc3ZjLnJvbGVdLnB1c2goYCR7c3ZjLnZlcnNpb259ICgke3N2Yy5uYW1lfSlgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgW3JvbGUsIHZlcnNpb25zXSBvZiBPYmplY3QuZW50cmllcyhncm91cGVkKSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBcXG4ke3JvbGUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyByb2xlLnNsaWNlKDEpfSBWZXJzaW9uczpgKTtcbiAgICAgICAgICB2ZXJzaW9ucy5mb3JFYWNoKCh2KSA9PiBjb25zb2xlLmxvZyhgICAtICR7dn1gKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGVycm9yLm1lc3NhZ2UpKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gIH0pO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBCbHVlcHJpbnRzIENvbW1hbmRcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuY29uc3QgYmx1ZXByaW50cyA9IHByb2dyYW0uY29tbWFuZCgnYmx1ZXByaW50cycpLmRlc2NyaXB0aW9uKCdNYW5hZ2UgYmx1ZXByaW50cycpO1xuXG5ibHVlcHJpbnRzXG4gIC5jb21tYW5kKCdsaXN0JylcbiAgLmRlc2NyaXB0aW9uKCdMaXN0IGF2YWlsYWJsZSBibHVlcHJpbnRzJylcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZ2xvYmFsT3B0cyA9IHByb2dyYW0ub3B0cygpIGFzIEZvcm1hdHRlck9wdGlvbnM7XG4gICAgY29uc3QgZm9ybWF0ID0gZ2V0T3V0cHV0Rm9ybWF0KGdsb2JhbE9wdHMpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGdxbCA9IGF3YWl0IGVuc3VyZUNvbm5lY3RlZChnbG9iYWxPcHRzKTtcblxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5xdWVyeTx7XG4gICAgICAgIGJsdWVwcmludHM6IHsgc3VjY2VzczogYm9vbGVhbjsgYmx1ZXByaW50czogQXJyYXk8eyBuYW1lOiBzdHJpbmcgfT47IGVycm9yOiBzdHJpbmcgfCBudWxsIH07XG4gICAgICB9PihgXG4gICAgICAgIHF1ZXJ5IHtcbiAgICAgICAgICBibHVlcHJpbnRzIHtcbiAgICAgICAgICAgIHN1Y2Nlc3NcbiAgICAgICAgICAgIGJsdWVwcmludHMgeyBuYW1lIH1cbiAgICAgICAgICAgIGVycm9yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBgKTtcblxuICAgICAgaWYgKCFkYXRhLmJsdWVwcmludHMuc3VjY2Vzcykge1xuICAgICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGRhdGEuYmx1ZXByaW50cy5lcnJvciB8fCAnRmFpbGVkIHRvIGxpc3QgYmx1ZXByaW50cycpKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZm9ybWF0ID09PSAnanNvbicpIHtcbiAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoZGF0YS5ibHVlcHJpbnRzLmJsdWVwcmludHMsIG51bGwsIDIpKTtcbiAgICAgIH0gZWxzZSBpZiAoZGF0YS5ibHVlcHJpbnRzLmJsdWVwcmludHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdObyBibHVlcHJpbnRzIGZvdW5kLicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coJ0JsdWVwcmludHM6Jyk7XG4gICAgICAgIGRhdGEuYmx1ZXByaW50cy5ibHVlcHJpbnRzLmZvckVhY2goKGIpID0+IGNvbnNvbGUubG9nKGAgIC0gJHtiLm5hbWV9YCkpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZXJyb3IubWVzc2FnZSkpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfSk7XG5cbmJsdWVwcmludHNcbiAgLmNvbW1hbmQoJ3NhdmUgPHNpdGU+IDxuYW1lPicpXG4gIC5kZXNjcmlwdGlvbignU2F2ZSBhIHNpdGUgYXMgYSBibHVlcHJpbnQnKVxuICAuYWN0aW9uKGFzeW5jIChzaXRlLCBuYW1lKSA9PiB7XG4gICAgYXdhaXQgcnVuU2l0ZUNvbW1hbmQoXG4gICAgICBzaXRlLFxuICAgICAgeyBhY3Rpb246ICdTYXZpbmcgYmx1ZXByaW50IGZyb20nLCBzdWNjZXNzTWVzc2FnZTogKCkgPT4gYFNhdmVkIGJsdWVwcmludCBcIiR7bmFtZX1cImAgfSxcbiAgICAgIGFzeW5jIChncWwsIHNpdGVJZCkgPT4ge1xuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLm11dGF0ZTx7XG4gICAgICAgICAgc2F2ZUJsdWVwcmludDogeyBzdWNjZXNzOiBib29sZWFuOyBlcnJvcjogc3RyaW5nIHwgbnVsbCB9O1xuICAgICAgICB9PihcbiAgICAgICAgICBgXG4gICAgICAgIG11dGF0aW9uKCRpbnB1dDogU2F2ZUJsdWVwcmludElucHV0ISkge1xuICAgICAgICAgIHNhdmVCbHVlcHJpbnQoaW5wdXQ6ICRpbnB1dCkgeyBzdWNjZXNzIGVycm9yIH1cbiAgICAgICAgfVxuICAgICAgYCxcbiAgICAgICAgICB7IGlucHV0OiB7IHNpdGVJZCwgbmFtZSB9IH1cbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCFkYXRhLnNhdmVCbHVlcHJpbnQuc3VjY2Vzcykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihkYXRhLnNhdmVCbHVlcHJpbnQuZXJyb3IgfHwgJ0ZhaWxlZCB0byBzYXZlIGJsdWVwcmludCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgfVxuICAgICk7XG4gIH0pO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBEYXRhYmFzZSBDb21tYW5kc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5jb25zdCBkYiA9IHByb2dyYW0uY29tbWFuZCgnZGInKS5kZXNjcmlwdGlvbignRGF0YWJhc2Ugb3BlcmF0aW9ucycpO1xuXG5kYi5jb21tYW5kKCdleHBvcnQgPHNpdGU+JylcbiAgLmRlc2NyaXB0aW9uKCdFeHBvcnQgZGF0YWJhc2UgdG8gU1FMIGZpbGUnKVxuICAub3B0aW9uKCctbywgLS1vdXRwdXQgPHBhdGg+JywgJ091dHB1dCBmaWxlIHBhdGgnKVxuICAuYWN0aW9uKGFzeW5jIChzaXRlLCBjbWRPcHRpb25zKSA9PiB7XG4gICAgYXdhaXQgcnVuU2l0ZUNvbW1hbmQoXG4gICAgICBzaXRlLFxuICAgICAge1xuICAgICAgICBhY3Rpb246ICdFeHBvcnRpbmcgZGF0YWJhc2UgZm9yJyxcbiAgICAgICAgc3VjY2Vzc01lc3NhZ2U6IChkYXRhOiB7IGV4cG9ydERhdGFiYXNlOiB7IG91dHB1dFBhdGg6IHN0cmluZyB9IH0pID0+XG4gICAgICAgICAgYEV4cG9ydGVkIHRvICR7ZGF0YS5leHBvcnREYXRhYmFzZS5vdXRwdXRQYXRofWAsXG4gICAgICB9LFxuICAgICAgYXN5bmMgKGdxbCwgc2l0ZUlkKSA9PiB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwubXV0YXRlPHtcbiAgICAgICAgICBleHBvcnREYXRhYmFzZTogeyBzdWNjZXNzOiBib29sZWFuOyBvdXRwdXRQYXRoOiBzdHJpbmc7IGVycm9yOiBzdHJpbmcgfCBudWxsIH07XG4gICAgICAgIH0+KFxuICAgICAgICAgIGBcbiAgICAgICAgbXV0YXRpb24oJGlucHV0OiBFeHBvcnREYXRhYmFzZUlucHV0ISkge1xuICAgICAgICAgIGV4cG9ydERhdGFiYXNlKGlucHV0OiAkaW5wdXQpIHsgc3VjY2VzcyBvdXRwdXRQYXRoIGVycm9yIH1cbiAgICAgICAgfVxuICAgICAgYCxcbiAgICAgICAgICB7IGlucHV0OiB7IHNpdGVJZCwgb3V0cHV0UGF0aDogY21kT3B0aW9ucy5vdXRwdXQgfSB9XG4gICAgICAgICk7XG4gICAgICAgIGlmICghZGF0YS5leHBvcnREYXRhYmFzZS5zdWNjZXNzKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGRhdGEuZXhwb3J0RGF0YWJhc2UuZXJyb3IgfHwgJ0ZhaWxlZCB0byBleHBvcnQgZGF0YWJhc2UnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgIH1cbiAgICApO1xuICB9KTtcblxuZGIuY29tbWFuZCgnaW1wb3J0IDxzaXRlPiA8c3FsRmlsZT4nKVxuICAuZGVzY3JpcHRpb24oJ0ltcG9ydCBTUUwgZmlsZSBpbnRvIGRhdGFiYXNlJylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSwgc3FsRmlsZSkgPT4ge1xuICAgIGF3YWl0IHJ1blNpdGVDb21tYW5kKFxuICAgICAgc2l0ZSxcbiAgICAgIHsgYWN0aW9uOiAnSW1wb3J0aW5nIGRhdGFiYXNlIGZvcicsIHN1Y2Nlc3NNZXNzYWdlOiAoKSA9PiAnRGF0YWJhc2UgaW1wb3J0ZWQgc3VjY2Vzc2Z1bGx5JyB9LFxuICAgICAgYXN5bmMgKGdxbCwgc2l0ZUlkKSA9PiB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwubXV0YXRlPHtcbiAgICAgICAgICBpbXBvcnREYXRhYmFzZTogeyBzdWNjZXNzOiBib29sZWFuOyBlcnJvcjogc3RyaW5nIHwgbnVsbCB9O1xuICAgICAgICB9PihcbiAgICAgICAgICBgXG4gICAgICAgIG11dGF0aW9uKCRpbnB1dDogSW1wb3J0RGF0YWJhc2VJbnB1dCEpIHtcbiAgICAgICAgICBpbXBvcnREYXRhYmFzZShpbnB1dDogJGlucHV0KSB7IHN1Y2Nlc3MgZXJyb3IgfVxuICAgICAgICB9XG4gICAgICBgLFxuICAgICAgICAgIHsgaW5wdXQ6IHsgc2l0ZUlkLCBzcWxQYXRoOiBzcWxGaWxlIH0gfVxuICAgICAgICApO1xuICAgICAgICBpZiAoIWRhdGEuaW1wb3J0RGF0YWJhc2Uuc3VjY2Vzcykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihkYXRhLmltcG9ydERhdGFiYXNlLmVycm9yIHx8ICdGYWlsZWQgdG8gaW1wb3J0IGRhdGFiYXNlJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICB9XG4gICAgKTtcbiAgfSk7XG5cbmRiLmNvbW1hbmQoJ2FkbWluZXIgPHNpdGU+JylcbiAgLmRlc2NyaXB0aW9uKCdPcGVuIEFkbWluZXIgZGF0YWJhc2UgVUknKVxuICAuYWN0aW9uKGFzeW5jIChzaXRlKSA9PiB7XG4gICAgYXdhaXQgcnVuU2l0ZUNvbW1hbmQoXG4gICAgICBzaXRlLFxuICAgICAgeyBhY3Rpb246ICdPcGVuaW5nIEFkbWluZXIgZm9yJywgc3VjY2Vzc01lc3NhZ2U6ICgpID0+ICdPcGVuZWQgQWRtaW5lcicgfSxcbiAgICAgIGFzeW5jIChncWwsIHNpdGVJZCkgPT4ge1xuICAgICAgICByZXR1cm4gZ3FsLm11dGF0ZShcbiAgICAgICAgICBgXG4gICAgICAgIG11dGF0aW9uKCRpbnB1dDogT3BlbkFkbWluZXJJbnB1dCEpIHtcbiAgICAgICAgICBvcGVuQWRtaW5lcihpbnB1dDogJGlucHV0KSB7IHN1Y2Nlc3MgZXJyb3IgfVxuICAgICAgICB9XG4gICAgICBgLFxuICAgICAgICAgIHsgaW5wdXQ6IHsgc2l0ZUlkIH0gfVxuICAgICAgICApO1xuICAgICAgfVxuICAgICk7XG4gIH0pO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBCYWNrdXBzIENvbW1hbmRzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmNvbnN0IGJhY2t1cHMgPSBwcm9ncmFtLmNvbW1hbmQoJ2JhY2t1cHMnKS5kZXNjcmlwdGlvbignQ2xvdWQgYmFja3VwIG9wZXJhdGlvbnMnKTtcblxuYmFja3Vwc1xuICAuY29tbWFuZCgnc3RhdHVzJylcbiAgLmRlc2NyaXB0aW9uKCdDaGVjayBiYWNrdXAgc2VydmljZSBhdmFpbGFiaWxpdHknKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBnbG9iYWxPcHRzID0gcHJvZ3JhbS5vcHRzKCkgYXMgRm9ybWF0dGVyT3B0aW9ucztcbiAgICBjb25zdCBmb3JtYXQgPSBnZXRPdXRwdXRGb3JtYXQoZ2xvYmFsT3B0cyk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZ3FsID0gYXdhaXQgZW5zdXJlQ29ubmVjdGVkKGdsb2JhbE9wdHMpO1xuXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLnF1ZXJ5PHtcbiAgICAgICAgYmFja3VwU3RhdHVzOiB7XG4gICAgICAgICAgYXZhaWxhYmxlOiBib29sZWFuO1xuICAgICAgICAgIGZlYXR1cmVFbmFibGVkOiBib29sZWFuO1xuICAgICAgICAgIGRyb3Bib3g6IGFueTtcbiAgICAgICAgICBnb29nbGVEcml2ZTogYW55O1xuICAgICAgICB9O1xuICAgICAgfT4oYFxuICAgICAgICBxdWVyeSB7XG4gICAgICAgICAgYmFja3VwU3RhdHVzIHtcbiAgICAgICAgICAgIGF2YWlsYWJsZVxuICAgICAgICAgICAgZmVhdHVyZUVuYWJsZWRcbiAgICAgICAgICAgIGRyb3Bib3ggeyBhdXRoZW50aWNhdGVkIGFjY291bnRJZCBlbWFpbCB9XG4gICAgICAgICAgICBnb29nbGVEcml2ZSB7IGF1dGhlbnRpY2F0ZWQgYWNjb3VudElkIGVtYWlsIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGApO1xuXG4gICAgICBpZiAoZm9ybWF0ID09PSAnanNvbicpIHtcbiAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoZGF0YS5iYWNrdXBTdGF0dXMsIG51bGwsIDIpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IGRhdGEuYmFja3VwU3RhdHVzO1xuICAgICAgICBjb25zb2xlLmxvZyhgXFxuQmFja3VwIFN0YXR1czpgKTtcbiAgICAgICAgY29uc29sZS5sb2coYCAgQXZhaWxhYmxlOiAke3N0YXR1cy5hdmFpbGFibGUgPyAnWWVzJyA6ICdObyd9YCk7XG4gICAgICAgIGNvbnNvbGUubG9nKGAgIEZlYXR1cmUgRW5hYmxlZDogJHtzdGF0dXMuZmVhdHVyZUVuYWJsZWQgPyAnWWVzJyA6ICdObyd9YCk7XG4gICAgICAgIGlmIChzdGF0dXMuZHJvcGJveCkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYFxcbiAgRHJvcGJveDogJHtzdGF0dXMuZHJvcGJveC5hdXRoZW50aWNhdGVkID8gYENvbm5lY3RlZCAoJHtzdGF0dXMuZHJvcGJveC5lbWFpbH0pYCA6ICdOb3QgY29ubmVjdGVkJ31gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhdHVzLmdvb2dsZURyaXZlKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBgICBHb29nbGUgRHJpdmU6ICR7c3RhdHVzLmdvb2dsZURyaXZlLmF1dGhlbnRpY2F0ZWQgPyBgQ29ubmVjdGVkICgke3N0YXR1cy5nb29nbGVEcml2ZS5lbWFpbH0pYCA6ICdOb3QgY29ubmVjdGVkJ31gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZXJyb3IubWVzc2FnZSkpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfSk7XG5cbmJhY2t1cHNcbiAgLmNvbW1hbmQoJ2xpc3QgPHNpdGU+JylcbiAgLmRlc2NyaXB0aW9uKCdMaXN0IGJhY2t1cHMgZm9yIGEgc2l0ZScpXG4gIC5vcHRpb24oJy1wLCAtLXByb3ZpZGVyIDxwcm92aWRlcj4nLCAnQmFja3VwIHByb3ZpZGVyIChkcm9wYm94fGdvb2dsZURyaXZlKScsICdkcm9wYm94JylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSwgY21kT3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IGdsb2JhbE9wdHMgPSBwcm9ncmFtLm9wdHMoKSBhcyBGb3JtYXR0ZXJPcHRpb25zO1xuICAgIGNvbnN0IGZvcm1hdCA9IGdldE91dHB1dEZvcm1hdChnbG9iYWxPcHRzKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBncWwgPSBhd2FpdCBlbnN1cmVDb25uZWN0ZWQoZ2xvYmFsT3B0cyk7XG4gICAgICBjb25zdCBzaXRlSWQgPSBhd2FpdCBmaW5kU2l0ZUlkKGdxbCwgc2l0ZSk7XG5cbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwucXVlcnk8e1xuICAgICAgICBsaXN0QmFja3Vwczoge1xuICAgICAgICAgIHN1Y2Nlc3M6IGJvb2xlYW47XG4gICAgICAgICAgYmFja3VwczogQXJyYXk8eyBzbmFwc2hvdElkOiBzdHJpbmc7IHRpbWVzdGFtcDogc3RyaW5nOyBub3RlOiBzdHJpbmcgfT47XG4gICAgICAgICAgZXJyb3I6IHN0cmluZyB8IG51bGw7XG4gICAgICAgIH07XG4gICAgICB9PihcbiAgICAgICAgYFxuICAgICAgICBxdWVyeSgkc2l0ZUlkOiBJRCEsICRwcm92aWRlcjogU3RyaW5nISkge1xuICAgICAgICAgIGxpc3RCYWNrdXBzKHNpdGVJZDogJHNpdGVJZCwgcHJvdmlkZXI6ICRwcm92aWRlcikge1xuICAgICAgICAgICAgc3VjY2Vzc1xuICAgICAgICAgICAgYmFja3VwcyB7IHNuYXBzaG90SWQgdGltZXN0YW1wIG5vdGUgfVxuICAgICAgICAgICAgZXJyb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGAsXG4gICAgICAgIHsgc2l0ZUlkLCBwcm92aWRlcjogY21kT3B0aW9ucy5wcm92aWRlciB9XG4gICAgICApO1xuXG4gICAgICBpZiAoIWRhdGEubGlzdEJhY2t1cHMuc3VjY2Vzcykge1xuICAgICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGRhdGEubGlzdEJhY2t1cHMuZXJyb3IgfHwgJ0ZhaWxlZCB0byBsaXN0IGJhY2t1cHMnKSk7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZvcm1hdCA9PT0gJ2pzb24nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGRhdGEubGlzdEJhY2t1cHMuYmFja3VwcywgbnVsbCwgMikpO1xuICAgICAgfSBlbHNlIGlmIChkYXRhLmxpc3RCYWNrdXBzLmJhY2t1cHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdObyBiYWNrdXBzIGZvdW5kLicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coYFxcbkJhY2t1cHMgKCR7Y21kT3B0aW9ucy5wcm92aWRlcn0pOmApO1xuICAgICAgICBmb3IgKGNvbnN0IGJhY2t1cCBvZiBkYXRhLmxpc3RCYWNrdXBzLmJhY2t1cHMpIHtcbiAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoYmFja3VwLnRpbWVzdGFtcCkudG9Mb2NhbGVTdHJpbmcoKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICAke2JhY2t1cC5zbmFwc2hvdElkfSAtICR7ZGF0ZX0ke2JhY2t1cC5ub3RlID8gYCAtICR7YmFja3VwLm5vdGV9YCA6ICcnfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihlcnJvci5tZXNzYWdlKSk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9KTtcblxuYmFja3Vwc1xuICAuY29tbWFuZCgnY3JlYXRlIDxzaXRlPicpXG4gIC5kZXNjcmlwdGlvbignQ3JlYXRlIGEgYmFja3VwJylcbiAgLm9wdGlvbignLXAsIC0tcHJvdmlkZXIgPHByb3ZpZGVyPicsICdCYWNrdXAgcHJvdmlkZXIgKGRyb3Bib3h8Z29vZ2xlRHJpdmUpJywgJ2Ryb3Bib3gnKVxuICAub3B0aW9uKCctbiwgLS1ub3RlIDxub3RlPicsICdCYWNrdXAgbm90ZScpXG4gIC5hY3Rpb24oYXN5bmMgKHNpdGUsIGNtZE9wdGlvbnMpID0+IHtcbiAgICBhd2FpdCBydW5TaXRlQ29tbWFuZChcbiAgICAgIHNpdGUsXG4gICAgICB7XG4gICAgICAgIGFjdGlvbjogJ0NyZWF0aW5nIGJhY2t1cCBmb3InLFxuICAgICAgICBzdWNjZXNzTWVzc2FnZTogKGRhdGE6IHsgY3JlYXRlQmFja3VwOiB7IHNuYXBzaG90SWQ6IHN0cmluZyB9IH0pID0+XG4gICAgICAgICAgYEJhY2t1cCBjcmVhdGVkOiAke2RhdGEuY3JlYXRlQmFja3VwLnNuYXBzaG90SWR9YCxcbiAgICAgIH0sXG4gICAgICBhc3luYyAoZ3FsLCBzaXRlSWQpID0+IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5tdXRhdGU8e1xuICAgICAgICAgIGNyZWF0ZUJhY2t1cDogeyBzdWNjZXNzOiBib29sZWFuOyBzbmFwc2hvdElkOiBzdHJpbmc7IGVycm9yOiBzdHJpbmcgfCBudWxsIH07XG4gICAgICAgIH0+KFxuICAgICAgICAgIGBcbiAgICAgICAgbXV0YXRpb24oJHNpdGVJZDogSUQhLCAkcHJvdmlkZXI6IFN0cmluZyEsICRub3RlOiBTdHJpbmcpIHtcbiAgICAgICAgICBjcmVhdGVCYWNrdXAoc2l0ZUlkOiAkc2l0ZUlkLCBwcm92aWRlcjogJHByb3ZpZGVyLCBub3RlOiAkbm90ZSkge1xuICAgICAgICAgICAgc3VjY2VzcyBzbmFwc2hvdElkIGVycm9yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBgLFxuICAgICAgICAgIHsgc2l0ZUlkLCBwcm92aWRlcjogY21kT3B0aW9ucy5wcm92aWRlciwgbm90ZTogY21kT3B0aW9ucy5ub3RlIH1cbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCFkYXRhLmNyZWF0ZUJhY2t1cC5zdWNjZXNzKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGRhdGEuY3JlYXRlQmFja3VwLmVycm9yIHx8ICdGYWlsZWQgdG8gY3JlYXRlIGJhY2t1cCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgfVxuICAgICk7XG4gIH0pO1xuXG5iYWNrdXBzXG4gIC5jb21tYW5kKCdyZXN0b3JlIDxzaXRlPiA8c25hcHNob3RJZD4nKVxuICAuZGVzY3JpcHRpb24oJ1Jlc3RvcmUgZnJvbSBiYWNrdXAnKVxuICAub3B0aW9uKCctcCwgLS1wcm92aWRlciA8cHJvdmlkZXI+JywgJ0JhY2t1cCBwcm92aWRlciAoZHJvcGJveHxnb29nbGVEcml2ZSknLCAnZHJvcGJveCcpXG4gIC5vcHRpb24oJy15LCAtLXllcycsICdTa2lwIGNvbmZpcm1hdGlvbicpXG4gIC5hY3Rpb24oYXN5bmMgKHNpdGUsIHNuYXBzaG90SWQsIGNtZE9wdGlvbnMpID0+IHtcbiAgICBhd2FpdCBydW5TaXRlQ29tbWFuZChcbiAgICAgIHNpdGUsXG4gICAgICB7XG4gICAgICAgIGFjdGlvbjogJ1Jlc3RvcmluZyBiYWNrdXAgZm9yJyxcbiAgICAgICAgc3VjY2Vzc01lc3NhZ2U6IChkYXRhOiB7IHJlc3RvcmVCYWNrdXA6IHsgbWVzc2FnZTogc3RyaW5nIH0gfSkgPT5cbiAgICAgICAgICBkYXRhLnJlc3RvcmVCYWNrdXAubWVzc2FnZSB8fCAnQmFja3VwIHJlc3RvcmVkIHN1Y2Nlc3NmdWxseScsXG4gICAgICB9LFxuICAgICAgYXN5bmMgKGdxbCwgc2l0ZUlkKSA9PiB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwubXV0YXRlPHtcbiAgICAgICAgICByZXN0b3JlQmFja3VwOiB7IHN1Y2Nlc3M6IGJvb2xlYW47IG1lc3NhZ2U6IHN0cmluZzsgZXJyb3I6IHN0cmluZyB8IG51bGwgfTtcbiAgICAgICAgfT4oXG4gICAgICAgICAgYFxuICAgICAgICBtdXRhdGlvbigkc2l0ZUlkOiBJRCEsICRwcm92aWRlcjogU3RyaW5nISwgJHNuYXBzaG90SWQ6IFN0cmluZyEsICRjb25maXJtOiBCb29sZWFuKSB7XG4gICAgICAgICAgcmVzdG9yZUJhY2t1cChzaXRlSWQ6ICRzaXRlSWQsIHByb3ZpZGVyOiAkcHJvdmlkZXIsIHNuYXBzaG90SWQ6ICRzbmFwc2hvdElkLCBjb25maXJtOiAkY29uZmlybSkge1xuICAgICAgICAgICAgc3VjY2VzcyBtZXNzYWdlIGVycm9yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBgLFxuICAgICAgICAgIHsgc2l0ZUlkLCBwcm92aWRlcjogY21kT3B0aW9ucy5wcm92aWRlciwgc25hcHNob3RJZCwgY29uZmlybTogY21kT3B0aW9ucy55ZXMgfHwgZmFsc2UgfVxuICAgICAgICApO1xuICAgICAgICBpZiAoIWRhdGEucmVzdG9yZUJhY2t1cC5zdWNjZXNzKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGRhdGEucmVzdG9yZUJhY2t1cC5lcnJvciB8fCAnRmFpbGVkIHRvIHJlc3RvcmUgYmFja3VwJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICB9XG4gICAgKTtcbiAgfSk7XG5cbmJhY2t1cHNcbiAgLmNvbW1hbmQoJ2RlbGV0ZSA8c2l0ZT4gPHNuYXBzaG90SWQ+JylcbiAgLmRlc2NyaXB0aW9uKCdEZWxldGUgYSBiYWNrdXAnKVxuICAub3B0aW9uKCctcCwgLS1wcm92aWRlciA8cHJvdmlkZXI+JywgJ0JhY2t1cCBwcm92aWRlciAoZHJvcGJveHxnb29nbGVEcml2ZSknLCAnZHJvcGJveCcpXG4gIC5vcHRpb24oJy15LCAtLXllcycsICdTa2lwIGNvbmZpcm1hdGlvbicpXG4gIC5hY3Rpb24oYXN5bmMgKHNpdGUsIHNuYXBzaG90SWQsIGNtZE9wdGlvbnMpID0+IHtcbiAgICBhd2FpdCBydW5TaXRlQ29tbWFuZChcbiAgICAgIHNpdGUsXG4gICAgICB7IGFjdGlvbjogJ0RlbGV0aW5nIGJhY2t1cCBmb3InLCBzdWNjZXNzTWVzc2FnZTogKCkgPT4gJ0JhY2t1cCBkZWxldGVkJyB9LFxuICAgICAgYXN5bmMgKGdxbCwgc2l0ZUlkKSA9PiB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwubXV0YXRlPHsgZGVsZXRlQmFja3VwOiB7IHN1Y2Nlc3M6IGJvb2xlYW47IGVycm9yOiBzdHJpbmcgfCBudWxsIH0gfT4oXG4gICAgICAgICAgYFxuICAgICAgICBtdXRhdGlvbigkc2l0ZUlkOiBJRCEsICRwcm92aWRlcjogU3RyaW5nISwgJHNuYXBzaG90SWQ6IFN0cmluZyEsICRjb25maXJtOiBCb29sZWFuKSB7XG4gICAgICAgICAgZGVsZXRlQmFja3VwKHNpdGVJZDogJHNpdGVJZCwgcHJvdmlkZXI6ICRwcm92aWRlciwgc25hcHNob3RJZDogJHNuYXBzaG90SWQsIGNvbmZpcm06ICRjb25maXJtKSB7XG4gICAgICAgICAgICBzdWNjZXNzIGVycm9yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBgLFxuICAgICAgICAgIHsgc2l0ZUlkLCBwcm92aWRlcjogY21kT3B0aW9ucy5wcm92aWRlciwgc25hcHNob3RJZCwgY29uZmlybTogY21kT3B0aW9ucy55ZXMgfHwgZmFsc2UgfVxuICAgICAgICApO1xuICAgICAgICBpZiAoIWRhdGEuZGVsZXRlQmFja3VwLnN1Y2Nlc3MpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZGF0YS5kZWxldGVCYWNrdXAuZXJyb3IgfHwgJ0ZhaWxlZCB0byBkZWxldGUgYmFja3VwJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICB9XG4gICAgKTtcbiAgfSk7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFdQIEVuZ2luZSBDb21tYW5kc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5jb25zdCB3cGUgPSBwcm9ncmFtLmNvbW1hbmQoJ3dwZScpLmRlc2NyaXB0aW9uKCdXUCBFbmdpbmUgc3luYyBvcGVyYXRpb25zJyk7XG5cbndwZVxuICAuY29tbWFuZCgnc3RhdHVzJylcbiAgLmRlc2NyaXB0aW9uKCdDaGVjayBXUCBFbmdpbmUgYXV0aGVudGljYXRpb24gc3RhdHVzJylcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZ2xvYmFsT3B0cyA9IHByb2dyYW0ub3B0cygpIGFzIEZvcm1hdHRlck9wdGlvbnM7XG4gICAgY29uc3QgZm9ybWF0ID0gZ2V0T3V0cHV0Rm9ybWF0KGdsb2JhbE9wdHMpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGdxbCA9IGF3YWl0IGVuc3VyZUNvbm5lY3RlZChnbG9iYWxPcHRzKTtcblxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5xdWVyeTx7XG4gICAgICAgIHdwZVN0YXR1czoge1xuICAgICAgICAgIGF1dGhlbnRpY2F0ZWQ6IGJvb2xlYW47XG4gICAgICAgICAgZW1haWw6IHN0cmluZztcbiAgICAgICAgICBhY2NvdW50SWQ6IHN0cmluZztcbiAgICAgICAgICBhY2NvdW50TmFtZTogc3RyaW5nO1xuICAgICAgICB9O1xuICAgICAgfT4oYFxuICAgICAgICBxdWVyeSB7XG4gICAgICAgICAgd3BlU3RhdHVzIHtcbiAgICAgICAgICAgIGF1dGhlbnRpY2F0ZWRcbiAgICAgICAgICAgIGVtYWlsXG4gICAgICAgICAgICBhY2NvdW50SWRcbiAgICAgICAgICAgIGFjY291bnROYW1lXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBgKTtcblxuICAgICAgaWYgKGZvcm1hdCA9PT0gJ2pzb24nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGRhdGEud3BlU3RhdHVzLCBudWxsLCAyKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSBkYXRhLndwZVN0YXR1cztcbiAgICAgICAgaWYgKHN0YXR1cy5hdXRoZW50aWNhdGVkKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYFxcbldQIEVuZ2luZTogQ29ubmVjdGVkYCk7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgRW1haWw6ICR7c3RhdHVzLmVtYWlsfWApO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGAgIEFjY291bnQ6ICR7c3RhdHVzLmFjY291bnROYW1lfSAoJHtzdGF0dXMuYWNjb3VudElkfSlgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgXFxuV1AgRW5naW5lOiBOb3QgY29ubmVjdGVkYCk7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgUnVuICdsd3Agd3BlIGxvZ2luJyB0byBhdXRoZW50aWNhdGVgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZXJyb3IubWVzc2FnZSkpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfSk7XG5cbndwZVxuICAuY29tbWFuZCgnbG9naW4nKVxuICAuZGVzY3JpcHRpb24oJ0F1dGhlbnRpY2F0ZSB3aXRoIFdQIEVuZ2luZScpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGdsb2JhbE9wdHMgPSBwcm9ncmFtLm9wdHMoKSBhcyBGb3JtYXR0ZXJPcHRpb25zO1xuICAgIGNvbnN0IHNwaW5uZXIgPSBnbG9iYWxPcHRzLnF1aWV0ID8gbnVsbCA6IG9yYShgT3BlbmluZyBXUCBFbmdpbmUgbG9naW4uLi5gKS5zdGFydCgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGdxbCA9IGF3YWl0IGVuc3VyZUNvbm5lY3RlZChnbG9iYWxPcHRzKTtcblxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5tdXRhdGU8e1xuICAgICAgICB3cGVBdXRoZW50aWNhdGU6IHsgc3VjY2VzczogYm9vbGVhbjsgZW1haWw6IHN0cmluZzsgbWVzc2FnZTogc3RyaW5nOyBlcnJvcjogc3RyaW5nIHwgbnVsbCB9O1xuICAgICAgfT4oYFxuICAgICAgICBtdXRhdGlvbiB7XG4gICAgICAgICAgd3BlQXV0aGVudGljYXRlIHsgc3VjY2VzcyBlbWFpbCBtZXNzYWdlIGVycm9yIH1cbiAgICAgICAgfVxuICAgICAgYCk7XG5cbiAgICAgIGlmICghZGF0YS53cGVBdXRoZW50aWNhdGUuc3VjY2Vzcykge1xuICAgICAgICBzcGlubmVyPy5mYWlsKCdBdXRoZW50aWNhdGlvbiBmYWlsZWQnKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihkYXRhLndwZUF1dGhlbnRpY2F0ZS5lcnJvciB8fCAnRmFpbGVkIHRvIGF1dGhlbnRpY2F0ZScpKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuXG4gICAgICBzcGlubmVyPy5zdWNjZWVkKGBBdXRoZW50aWNhdGVkIGFzICR7ZGF0YS53cGVBdXRoZW50aWNhdGUuZW1haWx9YCk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgc3Bpbm5lcj8uZmFpbCgnQXV0aGVudGljYXRpb24gZmFpbGVkJyk7XG4gICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGVycm9yLm1lc3NhZ2UpKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gIH0pO1xuXG53cGVcbiAgLmNvbW1hbmQoJ2xvZ291dCcpXG4gIC5kZXNjcmlwdGlvbignTG9nb3V0IGZyb20gV1AgRW5naW5lJylcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZ2xvYmFsT3B0cyA9IHByb2dyYW0ub3B0cygpIGFzIEZvcm1hdHRlck9wdGlvbnM7XG4gICAgY29uc3Qgc3Bpbm5lciA9IGdsb2JhbE9wdHMucXVpZXQgPyBudWxsIDogb3JhKGBMb2dnaW5nIG91dC4uLmApLnN0YXJ0KCk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZ3FsID0gYXdhaXQgZW5zdXJlQ29ubmVjdGVkKGdsb2JhbE9wdHMpO1xuXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLm11dGF0ZTx7IHdwZUxvZ291dDogeyBzdWNjZXNzOiBib29sZWFuOyBlcnJvcjogc3RyaW5nIHwgbnVsbCB9IH0+KGBcbiAgICAgICAgbXV0YXRpb24ge1xuICAgICAgICAgIHdwZUxvZ291dCB7IHN1Y2Nlc3MgZXJyb3IgfVxuICAgICAgICB9XG4gICAgICBgKTtcblxuICAgICAgaWYgKCFkYXRhLndwZUxvZ291dC5zdWNjZXNzKSB7XG4gICAgICAgIHNwaW5uZXI/LmZhaWwoJ0xvZ291dCBmYWlsZWQnKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihkYXRhLndwZUxvZ291dC5lcnJvciB8fCAnRmFpbGVkIHRvIGxvZ291dCcpKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuXG4gICAgICBzcGlubmVyPy5zdWNjZWVkKCdMb2dnZWQgb3V0IGZyb20gV1AgRW5naW5lJyk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgc3Bpbm5lcj8uZmFpbCgnTG9nb3V0IGZhaWxlZCcpO1xuICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihlcnJvci5tZXNzYWdlKSk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9KTtcblxud3BlXG4gIC5jb21tYW5kKCdzaXRlcycpXG4gIC5kZXNjcmlwdGlvbignTGlzdCBXUCBFbmdpbmUgc2l0ZXMnKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBnbG9iYWxPcHRzID0gcHJvZ3JhbS5vcHRzKCkgYXMgRm9ybWF0dGVyT3B0aW9ucztcbiAgICBjb25zdCBmb3JtYXQgPSBnZXRPdXRwdXRGb3JtYXQoZ2xvYmFsT3B0cyk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZ3FsID0gYXdhaXQgZW5zdXJlQ29ubmVjdGVkKGdsb2JhbE9wdHMpO1xuXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLnF1ZXJ5PHtcbiAgICAgICAgbGlzdFdwZVNpdGVzOiB7XG4gICAgICAgICAgc3VjY2VzczogYm9vbGVhbjtcbiAgICAgICAgICBzaXRlczogQXJyYXk8eyBpZDogc3RyaW5nOyBuYW1lOiBzdHJpbmc7IGVudmlyb25tZW50OiBzdHJpbmc7IHByaW1hcnlEb21haW46IHN0cmluZyB9PjtcbiAgICAgICAgICBlcnJvcjogc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgfTtcbiAgICAgIH0+KGBcbiAgICAgICAgcXVlcnkge1xuICAgICAgICAgIGxpc3RXcGVTaXRlcyB7XG4gICAgICAgICAgICBzdWNjZXNzXG4gICAgICAgICAgICBzaXRlcyB7IGlkIG5hbWUgZW52aXJvbm1lbnQgcHJpbWFyeURvbWFpbiB9XG4gICAgICAgICAgICBlcnJvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgYCk7XG5cbiAgICAgIGlmICghZGF0YS5saXN0V3BlU2l0ZXMuc3VjY2Vzcykge1xuICAgICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGRhdGEubGlzdFdwZVNpdGVzLmVycm9yIHx8ICdGYWlsZWQgdG8gbGlzdCBzaXRlcycpKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZm9ybWF0ID09PSAnanNvbicpIHtcbiAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoZGF0YS5saXN0V3BlU2l0ZXMuc2l0ZXMsIG51bGwsIDIpKTtcbiAgICAgIH0gZWxzZSBpZiAoZGF0YS5saXN0V3BlU2l0ZXMuc2l0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdObyBXUCBFbmdpbmUgc2l0ZXMgZm91bmQuJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZygnXFxuV1AgRW5naW5lIFNpdGVzOicpO1xuICAgICAgICBmb3IgKGNvbnN0IHNpdGUgb2YgZGF0YS5saXN0V3BlU2l0ZXMuc2l0ZXMpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICAke3NpdGUubmFtZX0gKCR7c2l0ZS5lbnZpcm9ubWVudH0pIC0gJHtzaXRlLnByaW1hcnlEb21haW59YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGVycm9yLm1lc3NhZ2UpKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gIH0pO1xuXG53cGVcbiAgLmNvbW1hbmQoJ2xpbmsgPHNpdGU+JylcbiAgLmRlc2NyaXB0aW9uKCdTaG93IFdQIEVuZ2luZSBjb25uZWN0aW9uIGZvciBhIGxvY2FsIHNpdGUnKVxuICAuYWN0aW9uKGFzeW5jIChzaXRlKSA9PiB7XG4gICAgY29uc3QgZ2xvYmFsT3B0cyA9IHByb2dyYW0ub3B0cygpIGFzIEZvcm1hdHRlck9wdGlvbnM7XG4gICAgY29uc3QgZm9ybWF0ID0gZ2V0T3V0cHV0Rm9ybWF0KGdsb2JhbE9wdHMpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGdxbCA9IGF3YWl0IGVuc3VyZUNvbm5lY3RlZChnbG9iYWxPcHRzKTtcbiAgICAgIGNvbnN0IHNpdGVJZCA9IGF3YWl0IGZpbmRTaXRlSWQoZ3FsLCBzaXRlKTtcblxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5xdWVyeTx7XG4gICAgICAgIGdldFdwZUxpbms6IHtcbiAgICAgICAgICBsaW5rZWQ6IGJvb2xlYW47XG4gICAgICAgICAgc2l0ZU5hbWU6IHN0cmluZztcbiAgICAgICAgICBjb25uZWN0aW9uczogQXJyYXk8e1xuICAgICAgICAgICAgcmVtb3RlSW5zdGFsbElkOiBzdHJpbmc7XG4gICAgICAgICAgICBpbnN0YWxsTmFtZTogc3RyaW5nO1xuICAgICAgICAgICAgZW52aXJvbm1lbnQ6IHN0cmluZztcbiAgICAgICAgICAgIHByaW1hcnlEb21haW46IHN0cmluZztcbiAgICAgICAgICB9PjtcbiAgICAgICAgfTtcbiAgICAgIH0+KFxuICAgICAgICBgXG4gICAgICAgIHF1ZXJ5KCRzaXRlSWQ6IElEISkge1xuICAgICAgICAgIGdldFdwZUxpbmsoc2l0ZUlkOiAkc2l0ZUlkKSB7XG4gICAgICAgICAgICBsaW5rZWRcbiAgICAgICAgICAgIHNpdGVOYW1lXG4gICAgICAgICAgICBjb25uZWN0aW9ucyB7IHJlbW90ZUluc3RhbGxJZCBpbnN0YWxsTmFtZSBlbnZpcm9ubWVudCBwcmltYXJ5RG9tYWluIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGAsXG4gICAgICAgIHsgc2l0ZUlkIH1cbiAgICAgICk7XG5cbiAgICAgIGlmIChmb3JtYXQgPT09ICdqc29uJykge1xuICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShkYXRhLmdldFdwZUxpbmssIG51bGwsIDIpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGxpbmsgPSBkYXRhLmdldFdwZUxpbms7XG4gICAgICAgIGlmICghbGluay5saW5rZWQgfHwgbGluay5jb25uZWN0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgXFxuXCIke2xpbmsuc2l0ZU5hbWV9XCIgaXMgbm90IGxpbmtlZCB0byBXUCBFbmdpbmVgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgXFxuXCIke2xpbmsuc2l0ZU5hbWV9XCIgV1AgRW5naW5lIENvbm5lY3Rpb25zOmApO1xuICAgICAgICAgIGZvciAoY29uc3QgY29ubiBvZiBsaW5rLmNvbm5lY3Rpb25zKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgICAke2Nvbm4uaW5zdGFsbE5hbWV9ICgke2Nvbm4uZW52aXJvbm1lbnR9KSAtICR7Y29ubi5wcmltYXJ5RG9tYWlufWApO1xuICAgICAgICAgICAgY29uc29sZS5sb2coYCAgICBJRDogJHtjb25uLnJlbW90ZUluc3RhbGxJZH1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGVycm9yLm1lc3NhZ2UpKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gIH0pO1xuXG53cGVcbiAgLmNvbW1hbmQoJ3B1c2ggPHNpdGU+JylcbiAgLmRlc2NyaXB0aW9uKCdQdXNoIGxvY2FsIHNpdGUgdG8gV1AgRW5naW5lJylcbiAgLm9wdGlvbignLXIsIC0tcmVtb3RlIDxpbnN0YWxsSWQ+JywgJ1JlbW90ZSBpbnN0YWxsIElEJylcbiAgLm9wdGlvbignLS1zcWwnLCAnSW5jbHVkZSBkYXRhYmFzZScpXG4gIC5vcHRpb24oJy15LCAtLXllcycsICdTa2lwIGNvbmZpcm1hdGlvbicpXG4gIC5hY3Rpb24oYXN5bmMgKHNpdGUsIGNtZE9wdGlvbnMpID0+IHtcbiAgICBhd2FpdCBydW5TaXRlQ29tbWFuZChcbiAgICAgIHNpdGUsXG4gICAgICB7XG4gICAgICAgIGFjdGlvbjogJ1B1c2hpbmcgdG8gV1AgRW5naW5lJyxcbiAgICAgICAgc3VjY2Vzc01lc3NhZ2U6IChkYXRhOiB7IHB1c2hUb1dwZTogeyBtZXNzYWdlOiBzdHJpbmcgfSB9KSA9PlxuICAgICAgICAgIGRhdGEucHVzaFRvV3BlLm1lc3NhZ2UgfHwgJ1B1c2hlZCB0byBXUCBFbmdpbmUnLFxuICAgICAgfSxcbiAgICAgIGFzeW5jIChncWwsIHNpdGVJZCkgPT4ge1xuICAgICAgICAvLyBHZXQgcmVtb3RlIGluc3RhbGwgSUQgaWYgbm90IHByb3ZpZGVkXG4gICAgICAgIGxldCByZW1vdGVJbnN0YWxsSWQgPSBjbWRPcHRpb25zLnJlbW90ZTtcbiAgICAgICAgaWYgKCFyZW1vdGVJbnN0YWxsSWQpIHtcbiAgICAgICAgICBjb25zdCBsaW5rRGF0YSA9IGF3YWl0IGdxbC5xdWVyeTx7XG4gICAgICAgICAgICBnZXRXcGVMaW5rOiB7IGNvbm5lY3Rpb25zOiBBcnJheTx7IHJlbW90ZUluc3RhbGxJZDogc3RyaW5nIH0+IH07XG4gICAgICAgICAgfT4oXG4gICAgICAgICAgICBgXG4gICAgICAgICAgcXVlcnkoJHNpdGVJZDogSUQhKSB7XG4gICAgICAgICAgICBnZXRXcGVMaW5rKHNpdGVJZDogJHNpdGVJZCkge1xuICAgICAgICAgICAgICBjb25uZWN0aW9ucyB7IHJlbW90ZUluc3RhbGxJZCB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBgLFxuICAgICAgICAgICAgeyBzaXRlSWQgfVxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKGxpbmtEYXRhLmdldFdwZUxpbmsuY29ubmVjdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NpdGUgaXMgbm90IGxpbmtlZCB0byBXUCBFbmdpbmUuIFVzZSAtLXJlbW90ZSB0byBzcGVjaWZ5IGluc3RhbGwgSUQuJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlbW90ZUluc3RhbGxJZCA9IGxpbmtEYXRhLmdldFdwZUxpbmsuY29ubmVjdGlvbnNbMF0ucmVtb3RlSW5zdGFsbElkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwubXV0YXRlPHtcbiAgICAgICAgICBwdXNoVG9XcGU6IHsgc3VjY2VzczogYm9vbGVhbjsgbWVzc2FnZTogc3RyaW5nOyBlcnJvcjogc3RyaW5nIHwgbnVsbCB9O1xuICAgICAgICB9PihcbiAgICAgICAgICBgXG4gICAgICAgIG11dGF0aW9uKCRsb2NhbFNpdGVJZDogSUQhLCAkcmVtb3RlSW5zdGFsbElkOiBJRCEsICRpbmNsdWRlU3FsOiBCb29sZWFuLCAkY29uZmlybTogQm9vbGVhbikge1xuICAgICAgICAgIHB1c2hUb1dwZShsb2NhbFNpdGVJZDogJGxvY2FsU2l0ZUlkLCByZW1vdGVJbnN0YWxsSWQ6ICRyZW1vdGVJbnN0YWxsSWQsIGluY2x1ZGVTcWw6ICRpbmNsdWRlU3FsLCBjb25maXJtOiAkY29uZmlybSkge1xuICAgICAgICAgICAgc3VjY2VzcyBtZXNzYWdlIGVycm9yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBgLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGxvY2FsU2l0ZUlkOiBzaXRlSWQsXG4gICAgICAgICAgICByZW1vdGVJbnN0YWxsSWQsXG4gICAgICAgICAgICBpbmNsdWRlU3FsOiBjbWRPcHRpb25zLnNxbCB8fCBmYWxzZSxcbiAgICAgICAgICAgIGNvbmZpcm06IGNtZE9wdGlvbnMueWVzIHx8IGZhbHNlLFxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCFkYXRhLnB1c2hUb1dwZS5zdWNjZXNzKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGRhdGEucHVzaFRvV3BlLmVycm9yIHx8ICdGYWlsZWQgdG8gcHVzaCB0byBXUCBFbmdpbmUnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgIH1cbiAgICApO1xuICB9KTtcblxud3BlXG4gIC5jb21tYW5kKCdwdWxsIDxzaXRlPicpXG4gIC5kZXNjcmlwdGlvbignUHVsbCBmcm9tIFdQIEVuZ2luZSB0byBsb2NhbCBzaXRlJylcbiAgLm9wdGlvbignLXIsIC0tcmVtb3RlIDxpbnN0YWxsSWQ+JywgJ1JlbW90ZSBpbnN0YWxsIElEJylcbiAgLm9wdGlvbignLS1zcWwnLCAnSW5jbHVkZSBkYXRhYmFzZScpXG4gIC5hY3Rpb24oYXN5bmMgKHNpdGUsIGNtZE9wdGlvbnMpID0+IHtcbiAgICBhd2FpdCBydW5TaXRlQ29tbWFuZChcbiAgICAgIHNpdGUsXG4gICAgICB7XG4gICAgICAgIGFjdGlvbjogJ1B1bGxpbmcgZnJvbSBXUCBFbmdpbmUgZm9yJyxcbiAgICAgICAgc3VjY2Vzc01lc3NhZ2U6IChkYXRhOiB7IHB1bGxGcm9tV3BlOiB7IG1lc3NhZ2U6IHN0cmluZyB9IH0pID0+XG4gICAgICAgICAgZGF0YS5wdWxsRnJvbVdwZS5tZXNzYWdlIHx8ICdQdWxsZWQgZnJvbSBXUCBFbmdpbmUnLFxuICAgICAgfSxcbiAgICAgIGFzeW5jIChncWwsIHNpdGVJZCkgPT4ge1xuICAgICAgICAvLyBHZXQgcmVtb3RlIGluc3RhbGwgSUQgaWYgbm90IHByb3ZpZGVkXG4gICAgICAgIGxldCByZW1vdGVJbnN0YWxsSWQgPSBjbWRPcHRpb25zLnJlbW90ZTtcbiAgICAgICAgaWYgKCFyZW1vdGVJbnN0YWxsSWQpIHtcbiAgICAgICAgICBjb25zdCBsaW5rRGF0YSA9IGF3YWl0IGdxbC5xdWVyeTx7XG4gICAgICAgICAgICBnZXRXcGVMaW5rOiB7IGNvbm5lY3Rpb25zOiBBcnJheTx7IHJlbW90ZUluc3RhbGxJZDogc3RyaW5nIH0+IH07XG4gICAgICAgICAgfT4oXG4gICAgICAgICAgICBgXG4gICAgICAgICAgcXVlcnkoJHNpdGVJZDogSUQhKSB7XG4gICAgICAgICAgICBnZXRXcGVMaW5rKHNpdGVJZDogJHNpdGVJZCkge1xuICAgICAgICAgICAgICBjb25uZWN0aW9ucyB7IHJlbW90ZUluc3RhbGxJZCB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBgLFxuICAgICAgICAgICAgeyBzaXRlSWQgfVxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKGxpbmtEYXRhLmdldFdwZUxpbmsuY29ubmVjdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NpdGUgaXMgbm90IGxpbmtlZCB0byBXUCBFbmdpbmUuIFVzZSAtLXJlbW90ZSB0byBzcGVjaWZ5IGluc3RhbGwgSUQuJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlbW90ZUluc3RhbGxJZCA9IGxpbmtEYXRhLmdldFdwZUxpbmsuY29ubmVjdGlvbnNbMF0ucmVtb3RlSW5zdGFsbElkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwubXV0YXRlPHtcbiAgICAgICAgICBwdWxsRnJvbVdwZTogeyBzdWNjZXNzOiBib29sZWFuOyBtZXNzYWdlOiBzdHJpbmc7IGVycm9yOiBzdHJpbmcgfCBudWxsIH07XG4gICAgICAgIH0+KFxuICAgICAgICAgIGBcbiAgICAgICAgbXV0YXRpb24oJGxvY2FsU2l0ZUlkOiBJRCEsICRyZW1vdGVJbnN0YWxsSWQ6IElEISwgJGluY2x1ZGVTcWw6IEJvb2xlYW4pIHtcbiAgICAgICAgICBwdWxsRnJvbVdwZShsb2NhbFNpdGVJZDogJGxvY2FsU2l0ZUlkLCByZW1vdGVJbnN0YWxsSWQ6ICRyZW1vdGVJbnN0YWxsSWQsIGluY2x1ZGVTcWw6ICRpbmNsdWRlU3FsKSB7XG4gICAgICAgICAgICBzdWNjZXNzIG1lc3NhZ2UgZXJyb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGAsXG4gICAgICAgICAgeyBsb2NhbFNpdGVJZDogc2l0ZUlkLCByZW1vdGVJbnN0YWxsSWQsIGluY2x1ZGVTcWw6IGNtZE9wdGlvbnMuc3FsIHx8IGZhbHNlIH1cbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCFkYXRhLnB1bGxGcm9tV3BlLnN1Y2Nlc3MpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZGF0YS5wdWxsRnJvbVdwZS5lcnJvciB8fCAnRmFpbGVkIHRvIHB1bGwgZnJvbSBXUCBFbmdpbmUnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgIH1cbiAgICApO1xuICB9KTtcblxud3BlXG4gIC5jb21tYW5kKCdoaXN0b3J5IDxzaXRlPicpXG4gIC5kZXNjcmlwdGlvbignU2hvdyBzeW5jIGhpc3RvcnkgZm9yIGEgc2l0ZScpXG4gIC5vcHRpb24oJy1sLCAtLWxpbWl0IDxuPicsICdOdW1iZXIgb2YgZXZlbnRzIHRvIHNob3cnLCAnMTAnKVxuICAuYWN0aW9uKGFzeW5jIChzaXRlLCBjbWRPcHRpb25zKSA9PiB7XG4gICAgY29uc3QgZ2xvYmFsT3B0cyA9IHByb2dyYW0ub3B0cygpIGFzIEZvcm1hdHRlck9wdGlvbnM7XG4gICAgY29uc3QgZm9ybWF0ID0gZ2V0T3V0cHV0Rm9ybWF0KGdsb2JhbE9wdHMpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGdxbCA9IGF3YWl0IGVuc3VyZUNvbm5lY3RlZChnbG9iYWxPcHRzKTtcbiAgICAgIGNvbnN0IHNpdGVJZCA9IGF3YWl0IGZpbmRTaXRlSWQoZ3FsLCBzaXRlKTtcblxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5xdWVyeTx7XG4gICAgICAgIGdldFN5bmNIaXN0b3J5OiB7XG4gICAgICAgICAgc3VjY2VzczogYm9vbGVhbjtcbiAgICAgICAgICBldmVudHM6IEFycmF5PHtcbiAgICAgICAgICAgIHJlbW90ZUluc3RhbGxOYW1lOiBzdHJpbmc7XG4gICAgICAgICAgICB0aW1lc3RhbXA6IHN0cmluZztcbiAgICAgICAgICAgIGRpcmVjdGlvbjogc3RyaW5nO1xuICAgICAgICAgICAgc3RhdHVzOiBzdHJpbmc7XG4gICAgICAgICAgfT47XG4gICAgICAgICAgZXJyb3I6IHN0cmluZyB8IG51bGw7XG4gICAgICAgIH07XG4gICAgICB9PihcbiAgICAgICAgYFxuICAgICAgICBxdWVyeSgkc2l0ZUlkOiBJRCEsICRsaW1pdDogSW50KSB7XG4gICAgICAgICAgZ2V0U3luY0hpc3Rvcnkoc2l0ZUlkOiAkc2l0ZUlkLCBsaW1pdDogJGxpbWl0KSB7XG4gICAgICAgICAgICBzdWNjZXNzXG4gICAgICAgICAgICBldmVudHMgeyByZW1vdGVJbnN0YWxsTmFtZSB0aW1lc3RhbXAgZGlyZWN0aW9uIHN0YXR1cyB9XG4gICAgICAgICAgICBlcnJvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgYCxcbiAgICAgICAgeyBzaXRlSWQsIGxpbWl0OiBwYXJzZUludChjbWRPcHRpb25zLmxpbWl0LCAxMCkgfVxuICAgICAgKTtcblxuICAgICAgaWYgKCFkYXRhLmdldFN5bmNIaXN0b3J5LnN1Y2Nlc3MpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihkYXRhLmdldFN5bmNIaXN0b3J5LmVycm9yIHx8ICdGYWlsZWQgdG8gZ2V0IHN5bmMgaGlzdG9yeScpKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZm9ybWF0ID09PSAnanNvbicpIHtcbiAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoZGF0YS5nZXRTeW5jSGlzdG9yeS5ldmVudHMsIG51bGwsIDIpKTtcbiAgICAgIH0gZWxzZSBpZiAoZGF0YS5nZXRTeW5jSGlzdG9yeS5ldmVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdObyBzeW5jIGhpc3RvcnkgZm91bmQuJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZygnXFxuU3luYyBIaXN0b3J5OicpO1xuICAgICAgICBmb3IgKGNvbnN0IGV2ZW50IG9mIGRhdGEuZ2V0U3luY0hpc3RvcnkuZXZlbnRzKSB7XG4gICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKGV2ZW50LnRpbWVzdGFtcCkudG9Mb2NhbGVTdHJpbmcoKTtcbiAgICAgICAgICBjb25zdCBhcnJvdyA9IGV2ZW50LmRpcmVjdGlvbiA9PT0gJ3B1c2gnID8gJ+KGkicgOiAn4oaQJztcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICAke2RhdGV9ICR7YXJyb3d9ICR7ZXZlbnQucmVtb3RlSW5zdGFsbE5hbWV9ICgke2V2ZW50LnN0YXR1c30pYCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGVycm9yLm1lc3NhZ2UpKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gIH0pO1xuXG53cGVcbiAgLmNvbW1hbmQoJ2RpZmYgPHNpdGU+JylcbiAgLmRlc2NyaXB0aW9uKCdTaG93IGZpbGUgY2hhbmdlcyBiZXR3ZWVuIGxvY2FsIGFuZCBXUCBFbmdpbmUnKVxuICAub3B0aW9uKCctZCwgLS1kaXJlY3Rpb24gPGRpcj4nLCAnRGlyZWN0aW9uIChwdXNofHB1bGwpJywgJ3B1c2gnKVxuICAuYWN0aW9uKGFzeW5jIChzaXRlLCBjbWRPcHRpb25zKSA9PiB7XG4gICAgY29uc3QgZ2xvYmFsT3B0cyA9IHByb2dyYW0ub3B0cygpIGFzIEZvcm1hdHRlck9wdGlvbnM7XG4gICAgY29uc3QgZm9ybWF0ID0gZ2V0T3V0cHV0Rm9ybWF0KGdsb2JhbE9wdHMpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGdxbCA9IGF3YWl0IGVuc3VyZUNvbm5lY3RlZChnbG9iYWxPcHRzKTtcbiAgICAgIGNvbnN0IHNpdGVJZCA9IGF3YWl0IGZpbmRTaXRlSWQoZ3FsLCBzaXRlKTtcblxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5xdWVyeTx7XG4gICAgICAgIGdldFNpdGVDaGFuZ2VzOiB7XG4gICAgICAgICAgc3VjY2VzczogYm9vbGVhbjtcbiAgICAgICAgICBhZGRlZDogQXJyYXk8eyBwYXRoOiBzdHJpbmcgfT47XG4gICAgICAgICAgbW9kaWZpZWQ6IEFycmF5PHsgcGF0aDogc3RyaW5nIH0+O1xuICAgICAgICAgIGRlbGV0ZWQ6IEFycmF5PHsgcGF0aDogc3RyaW5nIH0+O1xuICAgICAgICAgIHRvdGFsQ2hhbmdlczogbnVtYmVyO1xuICAgICAgICAgIGVycm9yOiBzdHJpbmcgfCBudWxsO1xuICAgICAgICB9O1xuICAgICAgfT4oXG4gICAgICAgIGBcbiAgICAgICAgcXVlcnkoJHNpdGVJZDogSUQhLCAkZGlyZWN0aW9uOiBTdHJpbmcpIHtcbiAgICAgICAgICBnZXRTaXRlQ2hhbmdlcyhzaXRlSWQ6ICRzaXRlSWQsIGRpcmVjdGlvbjogJGRpcmVjdGlvbikge1xuICAgICAgICAgICAgc3VjY2Vzc1xuICAgICAgICAgICAgYWRkZWQgeyBwYXRoIH1cbiAgICAgICAgICAgIG1vZGlmaWVkIHsgcGF0aCB9XG4gICAgICAgICAgICBkZWxldGVkIHsgcGF0aCB9XG4gICAgICAgICAgICB0b3RhbENoYW5nZXNcbiAgICAgICAgICAgIGVycm9yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBgLFxuICAgICAgICB7IHNpdGVJZCwgZGlyZWN0aW9uOiBjbWRPcHRpb25zLmRpcmVjdGlvbiB9XG4gICAgICApO1xuXG4gICAgICBpZiAoIWRhdGEuZ2V0U2l0ZUNoYW5nZXMuc3VjY2Vzcykge1xuICAgICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGRhdGEuZ2V0U2l0ZUNoYW5nZXMuZXJyb3IgfHwgJ0ZhaWxlZCB0byBnZXQgY2hhbmdlcycpKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZm9ybWF0ID09PSAnanNvbicpIHtcbiAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoZGF0YS5nZXRTaXRlQ2hhbmdlcywgbnVsbCwgMikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY2hhbmdlcyA9IGRhdGEuZ2V0U2l0ZUNoYW5nZXM7XG4gICAgICAgIGNvbnNvbGUubG9nKGBcXG5DaGFuZ2VzIHRvICR7Y21kT3B0aW9ucy5kaXJlY3Rpb259ICgke2NoYW5nZXMudG90YWxDaGFuZ2VzfSB0b3RhbCk6YCk7XG5cbiAgICAgICAgaWYgKGNoYW5nZXMuYWRkZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdcXG4gIEFkZGVkOicpO1xuICAgICAgICAgIGNoYW5nZXMuYWRkZWQuZm9yRWFjaCgoZikgPT4gY29uc29sZS5sb2coYCAgICArICR7Zi5wYXRofWApKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhbmdlcy5tb2RpZmllZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ1xcbiAgTW9kaWZpZWQ6Jyk7XG4gICAgICAgICAgY2hhbmdlcy5tb2RpZmllZC5mb3JFYWNoKChmKSA9PiBjb25zb2xlLmxvZyhgICAgIH4gJHtmLnBhdGh9YCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFuZ2VzLmRlbGV0ZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdcXG4gIERlbGV0ZWQ6Jyk7XG4gICAgICAgICAgY2hhbmdlcy5kZWxldGVkLmZvckVhY2goKGYpID0+IGNvbnNvbGUubG9nKGAgICAgLSAke2YucGF0aH1gKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYW5nZXMudG90YWxDaGFuZ2VzID09PSAwKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJyAgTm8gY2hhbmdlcyBkZXRlY3RlZC4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZXJyb3IubWVzc2FnZSkpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfSk7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEhlbHBlciBGdW5jdGlvbnNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBGaW5kIHNpdGUgSUQgYnkgbmFtZSBvciBJRFxuICpcbiAqIE9wdGltaXphdGlvbjogRmlyc3QgdHJpZXMgZGlyZWN0IElEIGxvb2t1cCAoTygxKSkgYmVmb3JlIGZhbGxpbmcgYmFjayB0b1xuICogZmV0Y2hpbmcgYWxsIHNpdGVzIGZvciBuYW1lIG1hdGNoaW5nIChPKG4pKS4gVGhpcyBzaWduaWZpY2FudGx5IGltcHJvdmVzXG4gKiBwZXJmb3JtYW5jZSB3aGVuIHVzZXJzIHNwZWNpZnkgc2l0ZSBJRHMgZGlyZWN0bHkuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGZpbmRTaXRlSWQoZ3FsOiBHcmFwaFFMQ2xpZW50LCBzaXRlUXVlcnk6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIC8vIFRyeSBkaXJlY3QgSUQgbG9va3VwIGZpcnN0IC0gbXVjaCBmYXN0ZXIgZm9yIGV4YWN0IElEIG1hdGNoZXNcbiAgdHJ5IHtcbiAgICBjb25zdCBkaXJlY3RMb29rdXAgPSBhd2FpdCBncWwucXVlcnk8eyBzaXRlOiB7IGlkOiBzdHJpbmcgfSB8IG51bGwgfT4oXG4gICAgICBgcXVlcnkgR2V0U2l0ZUJ5SWQoJGlkOiBJRCEpIHsgc2l0ZShpZDogJGlkKSB7IGlkIH0gfWAsXG4gICAgICB7IGlkOiBzaXRlUXVlcnkgfVxuICAgICk7XG5cbiAgICBpZiAoZGlyZWN0TG9va3VwLnNpdGUpIHtcbiAgICAgIHJldHVybiBkaXJlY3RMb29rdXAuc2l0ZS5pZDtcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIElEIGxvb2t1cCBmYWlsZWQsIGZhbGwgdGhyb3VnaCB0byBuYW1lIHNlYXJjaFxuICB9XG5cbiAgLy8gRmFsbCBiYWNrIHRvIGZldGNoaW5nIGFsbCBzaXRlcyBmb3IgbmFtZSBtYXRjaGluZ1xuICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLnF1ZXJ5PHsgc2l0ZXM6IEFycmF5PHsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nIH0+IH0+KGBcbiAgICBxdWVyeSB7IHNpdGVzIHsgaWQgbmFtZSB9IH1cbiAgYCk7XG5cbiAgY29uc3Qgc2l0ZSA9IGRhdGEuc2l0ZXMuZmluZCgocykgPT4gcy5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2l0ZVF1ZXJ5LnRvTG93ZXJDYXNlKCkpKTtcblxuICBpZiAoIXNpdGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNpdGUgbm90IGZvdW5kOiBcIiR7c2l0ZVF1ZXJ5fVwiYCk7XG4gIH1cblxuICByZXR1cm4gc2l0ZS5pZDtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU2tpbGwgQ29tbWFuZCAoZm9yIEFJIGFzc2lzdGFudHMpXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ3NraWxsJylcbiAgLmRlc2NyaXB0aW9uKCdJbnN0YWxsIENsYXVkZSBDb2RlIHNraWxsIGZvciBBSSBhc3Npc3RhbnQgaW50ZWdyYXRpb24nKVxuICAuYXJndW1lbnQoJ1thY3Rpb25dJywgJ0FjdGlvbjogaW5zdGFsbCwgdW5pbnN0YWxsLCBvciBwYXRoJywgJ2luc3RhbGwnKVxuICAuYWN0aW9uKGFzeW5jIChhY3Rpb246IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IHNraWxsTmFtZSA9ICdsd3AnO1xuICAgIGNvbnN0IHVzZXJTa2lsbHNEaXIgPSBwYXRoLmpvaW4ob3MuaG9tZWRpcigpLCAnLmNsYXVkZScsICdza2lsbHMnLCBza2lsbE5hbWUpO1xuICAgIGNvbnN0IGJ1bmRsZWRTa2lsbERpciA9IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuLicsICdza2lsbCcpO1xuXG4gICAgc3dpdGNoIChhY3Rpb24pIHtcbiAgICAgIGNhc2UgJ2luc3RhbGwnOiB7XG4gICAgICAgIC8vIENoZWNrIGlmIHNraWxsIGlzIGJ1bmRsZWRcbiAgICAgICAgY29uc3QgYnVuZGxlZFNraWxsRmlsZSA9IHBhdGguam9pbihidW5kbGVkU2tpbGxEaXIsICdTS0lMTC5tZCcpO1xuICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMoYnVuZGxlZFNraWxsRmlsZSkpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKCdTa2lsbCBub3QgZm91bmQgaW4gcGFja2FnZS4gUGxlYXNlIHJlaW5zdGFsbCB0aGUgQ0xJLicpKTtcbiAgICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDcmVhdGUgdXNlciBza2lsbHMgZGlyZWN0b3J5XG4gICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhwYXRoLmRpcm5hbWUodXNlclNraWxsc0RpcikpKSB7XG4gICAgICAgICAgZnMubWtkaXJTeW5jKHBhdGguZGlybmFtZSh1c2VyU2tpbGxzRGlyKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDaGVjayBpZiBhbHJlYWR5IGluc3RhbGxlZFxuICAgICAgICBpZiAoZnMuZXhpc3RzU3luYyh1c2VyU2tpbGxzRGlyKSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGZvcm1hdFN1Y2Nlc3MoYFNraWxsIGFscmVhZHkgaW5zdGFsbGVkIGF0ICR7dXNlclNraWxsc0Rpcn1gKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ3JlYXRlIHN5bWxpbmsgdG8gYnVuZGxlZCBza2lsbFxuICAgICAgICB0cnkge1xuICAgICAgICAgIGZzLnN5bWxpbmtTeW5jKGJ1bmRsZWRTa2lsbERpciwgdXNlclNraWxsc0Rpcik7XG4gICAgICAgICAgY29uc29sZS5sb2coZm9ybWF0U3VjY2VzcyhgSW5zdGFsbGVkIENsYXVkZSBDb2RlIHNraWxsIHRvICR7dXNlclNraWxsc0Rpcn1gKSk7XG4gICAgICAgICAgY29uc29sZS5sb2coJ1xcbkNsYXVkZSBDb2RlIHdpbGwgbm93IHJlY29nbml6ZSBsd3AgY29tbWFuZHMuJyk7XG4gICAgICAgICAgY29uc29sZS5sb2coJ1RyeSBhc2tpbmc6IFwiTGlzdCBteSBMb2NhbCBzaXRlc1wiIG9yIFwiU3RhcnQgdGhlIGJsb2cgc2l0ZVwiJyk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgICAvLyBJZiBzeW1saW5rIGZhaWxzLCBjb3B5IHRoZSBmaWxlc1xuICAgICAgICAgIGZzLm1rZGlyU3luYyh1c2VyU2tpbGxzRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgICBmcy5jb3B5RmlsZVN5bmMoYnVuZGxlZFNraWxsRmlsZSwgcGF0aC5qb2luKHVzZXJTa2lsbHNEaXIsICdTS0lMTC5tZCcpKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhmb3JtYXRTdWNjZXNzKGBJbnN0YWxsZWQgQ2xhdWRlIENvZGUgc2tpbGwgdG8gJHt1c2VyU2tpbGxzRGlyfWApKTtcbiAgICAgICAgICBjb25zb2xlLmxvZygnXFxuQ2xhdWRlIENvZGUgd2lsbCBub3cgcmVjb2duaXplIGx3cCBjb21tYW5kcy4nKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY2FzZSAndW5pbnN0YWxsJzoge1xuICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmModXNlclNraWxsc0RpcikpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnU2tpbGwgbm90IGluc3RhbGxlZC4nKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHN0YXQgPSBmcy5sc3RhdFN5bmModXNlclNraWxsc0Rpcik7XG4gICAgICAgICAgaWYgKHN0YXQuaXNTeW1ib2xpY0xpbmsoKSkge1xuICAgICAgICAgICAgZnMudW5saW5rU3luYyh1c2VyU2tpbGxzRGlyKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZnMucm1TeW5jKHVzZXJTa2lsbHNEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zb2xlLmxvZyhmb3JtYXRTdWNjZXNzKCdVbmluc3RhbGxlZCBDbGF1ZGUgQ29kZSBza2lsbC4nKSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGBGYWlsZWQgdG8gdW5pbnN0YWxsOiAke2Vycm9yLm1lc3NhZ2V9YCkpO1xuICAgICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY2FzZSAncGF0aCc6IHtcbiAgICAgICAgY29uc29sZS5sb2codXNlclNraWxsc0Rpcik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGBVbmtub3duIGFjdGlvbjogJHthY3Rpb259LiBVc2UgaW5zdGFsbCwgdW5pbnN0YWxsLCBvciBwYXRoLmApKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfSk7XG5cbi8vIENoZWNrIGZvciB1cGRhdGVzIChza2lwIGZvciB1cGRhdGUgY29tbWFuZCBpdHNlbGYgYW5kIHF1aWV0IG1vZGUpXG5jb25zdCBhcmdzID0gcHJvY2Vzcy5hcmd2LnNsaWNlKDIpO1xuY29uc3QgaXNVcGRhdGVDb21tYW5kID0gYXJnc1swXSA9PT0gJ3VwZGF0ZSc7XG5jb25zdCBpc1F1aWV0ID0gYXJncy5pbmNsdWRlcygnLS1xdWlldCcpIHx8IGFyZ3MuaW5jbHVkZXMoJy0tanNvbicpO1xuXG5pZiAoIWlzVXBkYXRlQ29tbWFuZCAmJiAhaXNRdWlldCkge1xuICAvLyBGaXJlIGFuZCBmb3JnZXQgLSBkb24ndCBibG9jayBzdGFydHVwXG4gIGNoZWNrRm9yVXBkYXRlcygpLmNhdGNoKCgpID0+IHt9KTtcbn1cblxuLy8gUGFyc2UgYW5kIGV4ZWN1dGVcbnByb2dyYW0ucGFyc2UoKTtcbiJdfQ==