@pipeline-builder/pipeline-manager 3.4.100 → 3.4.101

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.
@@ -1 +1 @@
1
- {"version":3,"file":"provision.d.ts","sourceRoot":"","sources":["../../src/commands/provision.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"provision.d.ts","sourceRoot":"","sources":["../../src/commands/provision.ts"],"names":[],"mappings":"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"}
@@ -487,7 +487,7 @@ export function provision(program) {
487
487
  // clone, so the questions come once you've agreed to proceed (not up front).
488
488
  // Each picked load's folder is then fetched via an additive sparse re-sync.
489
489
  // Flags / --yes / --json / non-interactive shells skip the prompts.
490
- const willPromptLoads = !options.yes && !options.json && Boolean(process.stdin.isTTY) && !anyLoadFlag;
490
+ let willPromptLoads = !options.yes && !options.json && Boolean(process.stdin.isTTY) && !anyLoadFlag;
491
491
  const postStepFlags = {
492
492
  init: options.init !== false,
493
493
  // EC2 auto-init is ON BY DEFAULT (off only with --no-auto-init). resolvePostSteps
@@ -551,6 +551,13 @@ export function provision(program) {
551
551
  if (!target)
552
552
  return;
553
553
  }
554
+ // EC2 auto-init (ON by default) loads plugins/compliance/samples ON THE BOX, so the
555
+ // local load picker — and the load-folder fetch it triggers — is pointless. Skip both
556
+ // (the instance has its own checkout). `--no-auto-init` restores the local loads/prompts.
557
+ if (options.autoInit !== false && target === 'ec2') {
558
+ willPromptLoads = false;
559
+ enabledLoadIds = [];
560
+ }
554
561
  // 4. Need a target to assemble a plan.
555
562
  if (!target) {
556
563
  printError(`No target specified. Pass --target <${TARGET_IDS.join('|')}> or describe the goal with --prompt.`);
@@ -741,4 +748,4 @@ export function provision(program) {
741
748
  }
742
749
  });
743
750
  }
744
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL3Byb3Zpc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQzlDLE9BQU8sS0FBSyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sS0FBSyxRQUFRLE1BQU0sd0JBQXdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQXNCLE1BQU0sdUJBQXVCLENBQUM7QUFDL0YsT0FBTyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDckYsT0FBTyxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN6RixPQUFPLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBbUMsTUFBTSx3QkFBd0IsQ0FBQztBQUMzRixPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSx5QkFBeUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzlHLE9BQU8sRUFDTCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFVBQVUsRUFDVixjQUFjLEVBQ2QsT0FBTyxFQUNQLFVBQVUsRUFDVixlQUFlLEdBR2hCLE1BQU0scUJB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QyxDQUFDO1lBQ3RGLElBQUksU0FBUyxFQUFFLENBQUM7Z0JBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUFDLENBQUM7UUFDckUsQ0FBQztRQUNELElBQUksT0FBTyxJQUFJLFdBQVc7WUFBRSxNQUFNO1FBRWxDLHVFQUF1RTtRQUN2RSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQyxRQUFRLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1RyxJQUFJLEdBQUcsRUFBRSxRQUFRLElBQUksTUFBTSxPQUFPLENBQUMsMkJBQTJCLEdBQUcsQ0FBQyxVQUFVLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDbkcsU0FBUyxHQUFHLEVBQUUsR0FBRyxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDckUsU0FBUztRQUNYLENBQUM7UUFDRCxtRkFBbUY7UUFDbkYsSUFBSSxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksTUFBTSxPQUFPLENBQUMscUVBQXFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3ZKLFNBQVM7UUFDWCxDQUFDO1FBQ0QsTUFBTTtJQUNSLENBQUM7SUFDRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxDQUFDO0FBQ2xDLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsS0FB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QUMsR0FBRyxNQUFNLENBQUMsR0FBRyxNQUFNLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQ3JHLENBQUM7WUFFRCxnRkFBZ0Y7WUFDaEYsK0VBQStFO1lBQy9FLGdGQUFnRjtZQUNoRixNQUFNLFlBQVksQ0FBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDdkosQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixXQUFXLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxPQUFPLEVBQUU7Z0JBQ3RDLEtBQUssRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSztnQkFDM0IsSUFBSSxFQUFFLElBQUk7Z0JBQ1YsT0FBTyxFQUFFLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUU7YUFDL0MsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyByZWFkRmlsZVN5bmMsIGV4aXN0c1N5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgKiBhcyByZWFkbGluZSBmcm9tICdub2RlOnJlYWRsaW5lL3Byb21pc2VzJztcbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IHsgZGlhZ25vc2VGYWlsdXJlLCBpc0FpQ29uZmlndXJlZCwgcGFyc2VHb2FsIH0gZnJvbSAnLi4vYWdlbnQvYWkuanMnO1xuaW1wb3J0IHsgYm9vdHN0cmFwQ29tbWFuZCwgcmVzb2x2ZUJvb3RzdHJhcCwgdHlwZSBCb290c3RyYXBTcGVjIH0gZnJvbSAnLi4vYWdlbnQvYm9vdHN0cmFwLmpzJztcbmltcG9ydCB7IGNyZWF0ZUVudkZpbGUsIGVudkZpbGVNaXNzaW5nIH0gZnJvbSAnLi4vYWdlbnQvZW52LWZpbGUuanMnO1xuaW1wb3J0IHsgZW50cnlwb2ludEV4aXN0cywgZXhlY3V0aW9uQmxvY2tlZCwgcnVuU2NyaXB0IH0gZnJvbSAnLi4vYWdlbnQvZXhlY3V0b3IuanMnO1xuaW1wb3J0IHsgZGVyaXZlSGVhbHRoVXJsLCB3YWl0SGVhbHRoeSwgZW5zdXJlTWluaWt1YmVHYXRld2F5IH0gZnJvbSAnLi4vYWdlbnQvaGVhbHRoLmpzJztcbmltcG9ydCB7IGNoZWNrSG9zdFBvcnRzLCBkaXNjb3Zlckhvc3RQb3J0cywgc3RhY2tSdW5uaW5nIH0gZnJvbSAnLi4vYWdlbnQvcG9ydHMuanMnO1xuaW1wb3J0IHsgcmVzb2x2ZVBvc3RTdGVwcywgdHlwZSBQb3N0U3RlcCwgdHlwZSBTa2lwcGVkU3RlcCB9IGZyb20gJy4uL2FnZW50L3Bvc3Qtc3RlcHMuanMnO1xuaW1wb3J0IHsgY2hlY2tQcmVyZXFzLCBnaXRBdmFpbGFibGUsIGdpdFN1cHBvcnRzU3BhcnNlQ2hlY2tvdXQsIHByZXJlcXNTYXRpc2ZpZWQgfSBmcm9tICcuLi9hZ2VudC9wcmVyZXFzLmpzJztcbmltcG9ydCB7XG4gIGFzc2VtYmxlQ29tbWFuZCxcbiAgaXNUYXJnZXRJZCxcbiAgTE9BRF9TVEVQUyxcbiAgc3BhcnNlUGF0aHNGb3IsXG4gIFRBUkdFVFMsXG4gIFRBUkdFVF9JRFMsXG4gIHRlYXJkb3duQ29tbWFuZCxcbiAgdHlwZSBUYXJnZXRJZCxcbiAgdHlwZSBUYXJnZXRTcGVjLFxufSBmcm9tICcuLi9hZ2VudC90YXJnZXRzLmpzJztcbmltcG9ydCB7IFRPT0xTX0RJUiwgZmV0Y2hUb29sLCBpc0ZldGNoYWJsZSwgd2l0aFRvb2xzT25QYXRoIH0gZnJvbSAnLi4vYWdlbnQvdG9vbHMuanMnO1xuaW1wb3J0IHsgbWF0Y2hJc3N1ZXMsIHNlc1Bvc3REZXBsb3lHdWlkYW5jZSB9IGZyb20gJy4uL2FnZW50L3Ryb3VibGVzaG9vdC5qcyc7XG5pbXBvcnQgeyBwcmludENvbW1hbmRIZWFkZXIgfSBmcm9tICcuLi91dGlscy9jb21tYW5kLXV0aWxzLmpzJztcbmltcG9ydCB7IEVSUk9SX0NPREVTLCBoYW5kbGVFcnJvciB9IGZyb20gJy4uL3V0aWxzL2Vycm9yLWhhbmRsZXIuanMnO1xuaW1wb3J0IHsgcHJpbnRTZWN0aW9uLCBwcmludEtleVZhbHVlLCBwcmludEluZm8sIHByaW50V2FybmluZywgcHJpbnRFcnJvciwgcHJpbnRTdWNjZXNzIH0gZnJvbSAnLi4vdXRpbHMvb3V0cHV0LXV0aWxzLmpzJztcblxuLyoqXG4gKiBSZWFkIG9uZSBsaW5lIG9mIHRyaW1tZWQgaW5wdXQgZnJvbSB0aGUgdGVybWluYWwsIG93bmluZyB0aGUgcmVhZGxpbmVcbiAqIGxpZmVjeWNsZS4gVXNlZCBkaXJlY3RseSBmb3IgdGhlIGRlc3RydWN0aXZlIHRlYXJkb3duIGdhdGUgKGEgeS9OIGlzIHRvbyBlYXN5XG4gKiB0byBmYXQtZmluZ2VyLCBzbyB3ZSByZXF1aXJlIHRoZSBvcGVyYXRvciB0byBUWVBFIHRoZSB0YXJnZXQgaWQgYmFjayksIGFuZCBhc1xuICogdGhlIGJhc2lzIGZvciBgY29uZmlybWAuIERlbGliZXJhdGVseSBoYXMgbm8gYXV0by1hY2NlcHQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGFzayhxdWVzdGlvbjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcmwgPSByZWFkbGluZS5jcmVhdGVJbnRlcmZhY2UoeyBpbnB1dDogcHJvY2Vzcy5zdGRpbiwgb3V0cHV0OiBwcm9jZXNzLnN0ZG91dCB9KTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gKGF3YWl0IHJsLnF1ZXN0aW9uKHF1ZXN0aW9uKSkudHJpbSgpO1xuICB9IGZpbmFsbHkge1xuICAgIHJsLmNsb3NlKCk7XG4gIH1cbn1cblxuLyoqIEludGVyYWN0aXZlIHkvTiBjb25maXJtYXRpb247IGF1dG8tdHJ1ZSB3aGVuIGBhdXRvWWVzYCAodGhlIGAtLXllc2AgZmxhZykuICovXG5hc3luYyBmdW5jdGlvbiBjb25maXJtKHF1ZXN0aW9uOiBzdHJpbmcsIGF1dG9ZZXM6IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgaWYgKGF1dG9ZZXMpIHJldHVybiB0cnVlO1xuICBjb25zdCBhbnN3ZXIgPSAoYXdhaXQgYXNrKGAke3F1ZXN0aW9ufSBbeS9OXSBgKSkudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIGFuc3dlciA9PT0gJ3knIHx8IGFuc3dlciA9PT0gJ3llcyc7XG59XG5cbi8qKiBDb21tYW5kZXIgY29sbGVjdG9yOiBhY2N1bXVsYXRlIHJlcGVhdGVkIGAtLXBvc3Qtc3RlcGAgdmFsdWVzIGluIG9yZGVyLiAqL1xuZnVuY3Rpb24gY29sbGVjdFN0ZXAodmFsdWU6IHN0cmluZywgYWNjOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIFsuLi5hY2MsIHZhbHVlXTtcbn1cblxuLyoqXG4gKiBIb3N0LXBvcnQgcHJlLWZsaWdodCAobG9jYWwvbWluaWt1YmUpLiBQb3J0cyBhcmUgREVSSVZFRCBmcm9tIHRoZSB0YXJnZXQncyBjbG9uZWRcbiAqIGRlcGxveSBzb3VyY2UgKGNvbXBvc2UgLyBzZXR1cC5zaCkgc28gdGhlIGxpc3QgY2FuJ3QgZHJpZnQg4oCUIGhlbmNlIHRoaXMgcnVucyBBRlRFUlxuICogdGhlIGNsb25lLiBBIHRha2VuIHBvcnQgbWFrZXMgYSBjb250YWluZXIvZm9yd2FyZCBmYWlsIHRvIGJpbmQgbWlkLWRlcGxveSAoZm9yIHRoZVxuICogZ2F0ZXdheSwgYSBzaWxlbnQgdW5yZWFjaGFibGUgaGFuZykuIFByaW50cyBhIOKcky/inJcgc3VtbWFyeSBhbmQgcmV0dXJucyBmYWxzZSBPTkxZXG4gKiB3aGVuIHRoZSBjYWxsZXIgbXVzdCBBQk9SVCAoYSBmYXRhbCBsb2NhbCBjb25mbGljdCkuIG1pbmlrdWJlIHBvcnRzIGFyZSBtYW5hZ2VkXG4gKiBmb3J3YXJkcyAoc2V0dXAuc2ggcGtpbGxzL3Jlc3RhcnRzIHRoZW0pLCBzbyBhIGNvbmZsaWN0IHRoZXJlIHdhcm5zIGJ1dCBwcm9jZWVkcy5cbiAqIFJlbW90ZSB0YXJnZXRzIChlYzIvZmFyZ2F0ZSkgYmluZCBub3RoaW5nIGxvY2FsbHkg4oaSIHJldHVybnMgdHJ1ZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByZWZsaWdodFBvcnRzKHNwZWM6IFRhcmdldFNwZWMsIHRhcmdldDogVGFyZ2V0SWQsIGN3ZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IHBvcnRzID0gZGlzY292ZXJIb3N0UG9ydHModGFyZ2V0LCBjd2QsIHNwZWMpO1xuICBpZiAocG9ydHMubGVuZ3RoID09PSAwKSByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgcG9ydENoZWNrcyA9IGF3YWl0IGNoZWNrSG9zdFBvcnRzKHBvcnRzKTtcbiAgY29uc3QgdGFrZW4gPSBwb3J0Q2hlY2tzLmZpbHRlcigoYykgPT4gIWMuYXZhaWxhYmxlKTtcbiAgcHJpbnRTZWN0aW9uKCdQb3J0IGF2YWlsYWJpbGl0eScpO1xuICBmb3IgKGNvbnN0IGMgb2YgcG9ydENoZWNrcykgcHJpbnRJbmZvKGAke2MuYXZhaWxhYmxlID8gJ+KckycgOiAn4pyXJ30gJHtTdHJpbmcoYy5wb3J0KS5wYWRFbmQoNSl9IOKAlCAke2Muc2VydmljZX1gKTtcbiAgaWYgKHRha2VuLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRydWU7XG4gIC8vIGxvY2FsIFBVQkxJU0hFUyB0aGVzZSBwb3J0cyBhdCBgZG9ja2VyIGNvbXBvc2UgdXBgIHRpbWUsIHNvIGEgY29uZmxpY3QgaXMgZmF0YWwuXG4gIC8vIG1pbmlrdWJlJ3MgYXJlIGt1YmVjdGwgcG9ydC1mb3J3YXJkcyBzZXR1cC5zaCBwa2lsbHMgKyByZXN0YXJ0cyAoYW5kXG4gIC8vIGVuc3VyZU1pbmlrdWJlR2F0ZXdheSByZWNvdmVycyksIHNvIGEgc3RhbGUgZm9yd2FyZCBtdXN0IE5PVCBibG9jayBhIHJlLXJ1bi5cbiAgY29uc3QgZmF0YWwgPSB0YXJnZXQgPT09ICdsb2NhbCc7XG4gIC8vIOKAplVOTEVTUyB0aGUgbG9jYWwgc3RhY2sgaXMgYWxyZWFkeSBydW5uaW5nOiB0aG9zZSBwb3J0cyBhcmUgaGVsZCBieSBZT1VSIE9XTlxuICAvLyBzdGFjaywgYW5kIGBkb2NrZXIgY29tcG9zZSB1cGAgbm8tb3BzIHRoZW0g4oCUIHRoaXMgaXMgZXhhY3RseSBob3cgeW91IHJlLXJ1biB0b1xuICAvLyBhZGQgbG9hZHMvb3B0aW9ucy4gRG9uJ3QgYmxvY2sgKHRoZSB3b3VsZC1iZSBjb25mbGljdCBpcyBhIHNlbGYtY29uZmxpY3QpLlxuICBpZiAoZmF0YWwgJiYgc3RhY2tSdW5uaW5nKHRhcmdldCwgY3dkLCBzcGVjKSkge1xuICAgIHByaW50V2FybmluZyhgXFxuJHt0YWtlbi5sZW5ndGh9IHBvcnQocykgYXJlIGhlbGQgYnkgeW91ciBhbHJlYWR5LXJ1bm5pbmcgJHtzcGVjLmxhYmVsfSBzdGFjayDigJQgcmUtcnVubmluZyBqdXN0IHJlc3VtZXMgaXQgKG5vIHJlYWwgY29uZmxpY3QpLCBzbyBjb250aW51aW5nLmApO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGNvbnN0IGxlYWQgPSBgJHt0YWtlbi5sZW5ndGh9IHJlcXVpcmVkIHBvcnQocykgYWxyZWFkeSBpbiB1c2U6ICR7dGFrZW4ubWFwKChjKSA9PiBjLnBvcnQpLmpvaW4oJywgJyl9YDtcbiAgKGZhdGFsID8gcHJpbnRFcnJvciA6IHByaW50V2FybmluZykoZmF0YWxcbiAgICA/IGBcXG4ke2xlYWR9IOKAlCB0aGUgZGVwbG95IGNhbid0IGJpbmQgdGhlbSBhbmQgd291bGQgZmFpbCBtaWQtd2F5LiBGcmVlIHRoZW0gYW5kIHJlLXJ1bjpgXG4gICAgOiBgXFxuJHtsZWFkfSDigJQgb24gbWluaWt1YmUgdGhlc2UgYXJlIHVzdWFsbHkgYSBwcmV2aW91cyBydW4ncyBwb3J0LWZvcndhcmRzIChzZXR1cC5zaCByZXN0YXJ0cyB0aGVtKS4gRnJlZSBhbnkgTk9OLW1pbmlrdWJlIGhvbGRlciBpZiB0aGUgZ2F0ZXdheSBzdGF5cyB1bnJlYWNoYWJsZTpgKTtcbiAgZm9yIChjb25zdCBjIG9mIHRha2VuKSBwcmludEluZm8oYCAg4oCiIHBvcnQgJHtjLnBvcnR9ICgke2Muc2VydmljZX0pIOKAlCBmaW5kIHRoZSBob2xkZXI6ICBsc29mIC1pIDoke2MucG9ydH1gKTtcbiAgaWYgKHRha2VuLnNvbWUoKGMpID0+IGMucG9ydCA9PT0gNTAwMCkpIHtcbiAgICBwcmludEluZm8oJyAgTm90ZTogb24gbWFjT1MsIHBvcnQgNTAwMCBpcyB1c3VhbGx5IEFpclBsYXkgUmVjZWl2ZXIg4oCUIFN5c3RlbSBTZXR0aW5ncyDihpIgR2VuZXJhbCDihpIgQWlyRHJvcCAmIEhhbmRvZmYg4oaSIEFpclBsYXkgUmVjZWl2ZXIgKG9mZikuJyk7XG4gIH1cbiAgcmV0dXJuICFmYXRhbDtcbn1cblxuLyoqXG4gKiBUZWFyZG93biBtb2RlIOKAlCB0aGUgZGVzdHJveSBjb3VudGVycGFydCBvZiBwcm92aXNpb25pbmcsIGdhdGVkIEhBUkRFUiB0aGFuIGRlcGxveTpcbiAqIEFXUyB0YXJnZXRzIGFyZSBpcnJldmVyc2libGUsIHNvIHRoZSBvcGVyYXRvciBtdXN0IFRZUEUgdGhlIHRhcmdldCBpZCAoLS1mb3JjZVxuICogYnlwYXNzZXMgZm9yIENJOyAtLXllcyBhbG9uZSBkb2VzIE5PVCkuIFRlcm1pbmFsOiBvd25zIGl0cyBvdXRwdXQgKyBleGl0Q29kZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1blRlYXJkb3duKFxuICBzcGVjOiBUYXJnZXRTcGVjLFxuICB0YXJnZXQ6IFRhcmdldElkLFxuICBjd2Q6IHN0cmluZyxcbiAgZXhlY3V0aW9uSWQ6IHN0cmluZyxcbiAgb3B0czogeyBzdGFja05hbWU/OiBzdHJpbmc7IHJlZ2lvbj86IHN0cmluZzsgZm9yY2U/OiBib29sZWFuOyB5ZXM/OiBib29sZWFuOyBqc29uPzogYm9vbGVhbiB9LFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgY29tbWFuZDogZG93bkNvbW1hbmQsIGRlc3RydWN0aXZlIH0gPSB0ZWFyZG93bkNvbW1hbmQodGFyZ2V0LCB7XG4gICAgc3RhY2tOYW1lOiBvcHRzLnN0YWNrTmFtZSxcbiAgICByZWdpb246IG9wdHMucmVnaW9uLFxuICAgIC8vIE91ciB0eXBlZCBnYXRlIElTIHRoZSBjb25maXJtYXRpb24g4oCUIGZvcndhcmQgLS15ZXMgc28gdGhlIG5hdGl2ZSBzY3JpcHRcbiAgICAvLyAoRmFyZ2F0ZSkgZG9lc24ndCBhbHNvIGJsb2NrIG9uIHN0ZGluIHdlJ3JlIGluaGVyaXRpbmcuXG4gICAgYXNzdW1lWWVzOiB0cnVlLFxuICB9KTtcbiAgaWYgKG9wdHMuanNvbikge1xuICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHsgc3VjY2VzczogdHJ1ZSwgZXhlY3V0aW9uSWQsIHRhcmdldCwgdGVhcmRvd246IHRydWUsIGRlc3RydWN0aXZlLCBkZXN0cm95czogc3BlYy5kZXN0cm95cywgY29tbWFuZDogZG93bkNvbW1hbmQgfSwgbnVsbCwgMikpO1xuICAgIHJldHVybjtcbiAgfVxuICBwcmludFNlY3Rpb24oYFRlYXJkb3duIHBsYW4g4oCUICR7c3BlYy5sYWJlbH1gKTtcbiAgcHJpbnRLZXlWYWx1ZSh7ICdUYXJnZXQnOiB0YXJnZXQsICdEZXN0cm95cyc6IHNwZWMuZGVzdHJveXMsICdTdG9wcyBjb3N0Jzogc3BlYy5jb3N0IH0pO1xuICBwcmludFNlY3Rpb24oJ0NvbW1hbmQgdG8gcnVuJyk7XG4gIHByaW50SW5mbyhkb3duQ29tbWFuZCk7XG4gIGlmIChkZXN0cnVjdGl2ZSAmJiAhb3B0cy5mb3JjZSkge1xuICAgIGNvbnN0IHRva2VuID0gYXdhaXQgYXNrKGBcXG5UaGlzIGlzIElSUkVWRVJTSUJMRS4gVHlwZSBcIiR7dGFyZ2V0fVwiIHRvIGNvbmZpcm0gdGVhcmRvd246IGApO1xuICAgIGlmICh0b2tlbiAhPT0gdGFyZ2V0KSB7XG4gICAgICBwcmludFdhcm5pbmcoJ1RoYXQgZGlkblxcJ3QgbWF0Y2gsIHNvIG5vdGhpbmcgd2FzIGRlc3Ryb3llZCDigJQgeW91IGhhdmUgdG8gdHlwZSB0aGUgZXhhY3QgdGFyZ2V0IGlkIHRvIGNvbmZpcm0uJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9IGVsc2UgaWYgKCFkZXN0cnVjdGl2ZSAmJiAhb3B0cy5mb3JjZSAmJiAhKGF3YWl0IGNvbmZpcm0oJ1xcblByb2NlZWQgd2l0aCB0ZWFyZG93biAoc3RvcHMgdGhlIHN0YWNrOyBvbi1kaXNrIGRhdGEgcGVyc2lzdHMpPycsIG9wdHMueWVzID8/IGZhbHNlKSkpIHtcbiAgICBwcmludFdhcm5pbmcoJ05vIHByb2JsZW0g4oCUIG5vdGhpbmcgd2FzIGNoYW5nZWQuJyk7XG4gICAgcmV0dXJuO1xuICB9XG4gIHByaW50U2VjdGlvbignVGVhcmluZyBkb3duJyk7XG4gIGNvbnN0IHsgY29kZTogZG93bkNvZGUgfSA9IGF3YWl0IHJ1blNjcmlwdChkb3duQ29tbWFuZCwgY3dkLCB7IGNhcHR1cmU6IGZhbHNlIH0pO1xuICBpZiAoZG93bkNvZGUgIT09IDApIHtcbiAgICBwcmludEVycm9yKGBcXG5UZWFyZG93biBmYWlsZWQgKGV4aXQgJHtkb3duQ29kZX0pLiBJbnNwZWN0IHRoZSBzdGFjay9jb250YWluZXJzIGFuZCByZXRyeS5gKTtcbiAgICBwcm9jZXNzLmV4aXRDb2RlID0gMTtcbiAgICByZXR1cm47XG4gIH1cbiAgcHJpbnRTdWNjZXNzKCdUZWFyZG93biBjb21wbGV0ZS4nKTtcbn1cblxuLyoqXG4gKiBSdW4gdGhlIGRlcGxveSBjb21tYW5kIChyZWFsLCBzZWNyZXRzIHVubWFza2VkLCBzdHJlYW1lZCArIGNhcHR1cmVkKSB3aXRoIGFcbiAqIGJvdW5kZWQgYXV0by1maXggKyByZXRyeSBsb29wIOKAlCB0aGUgZGVwbG95IHNjcmlwdHMgYXJlIGlkZW1wb3RlbnQsIHNvIGEgZml4ZWRcbiAqIHJlLXJ1biByZXN1bWVzIHJhdGhlciB0aGFuIHN0YXJ0aW5nIG92ZXIuIFJldHVybnMgd2hldGhlciBpdCBzdWNjZWVkZWQgcGx1cyB0aGVcbiAqIChwb3NzaWJseSBmaXgtYWRqdXN0ZWQpIHBhcmFtcywgd2hpY2ggdGhlIGNhbGxlciBuZWVkcyBmb3IgU0VTIGd1aWRhbmNlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuRGVwbG95V2l0aFJldHJ5KFxuICBzcGVjOiBUYXJnZXRTcGVjLFxuICB1cmw6IHN0cmluZyB8IG51bGwsXG4gIGN3ZDogc3RyaW5nLFxuICBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBhaU9wdHM6IHsgcHJvdmlkZXI/OiBzdHJpbmc7IG1vZGVsPzogc3RyaW5nIH0sXG4gIG9wdHM6IHsgcmV0cmllcz86IHN0cmluZzsgeWVzPzogYm9vbGVhbiB9LFxuKTogUHJvbWlzZTx7IHN1Y2NlZWRlZDogYm9vbGVhbjsgcnVuUGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9PiB7XG4gIGNvbnN0IG1heEF0dGVtcHRzID0gMSArIE1hdGgubWF4KDAsIHBhcnNlSW50KG9wdHMucmV0cmllcyA/PyAnJywgMTApIHx8IDApO1xuICBsZXQgcnVuUGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHBhcmFtcztcbiAgbGV0IHN1Y2NlZWRlZCA9IGZhbHNlO1xuICBmb3IgKGxldCBhdHRlbXB0ID0gMTsgYXR0ZW1wdCA8PSBtYXhBdHRlbXB0czsgYXR0ZW1wdCsrKSB7XG4gICAgY29uc3QgcmVhbENvbW1hbmQgPSBhc3NlbWJsZUNvbW1hbmQoc3BlYywgcnVuUGFyYW1zLCB7IG1hc2s6IGZhbHNlIH0pLmNvbW1hbmQ7XG4gICAgcHJpbnRTZWN0aW9uKGF0dGVtcHQgPT09IDEgPyAnRGVwbG95aW5nJyA6IGBEZXBsb3lpbmcg4oCUIHJldHJ5ICR7YXR0ZW1wdCAtIDF9YCk7XG4gICAgaWYgKGF0dGVtcHQgPT09IDEpIHtcbiAgICAgIHByaW50SW5mbyhgRGVwbG95aW5nICR7c3BlYy5sYWJlbH0g4oaSICR7dXJsfWApO1xuICAgICAgcHJpbnRJbmZvKHNwZWMuZGVwbG95cyk7XG4gICAgICBwcmludEluZm8oJ1N0cmVhbWluZyB0aGUgZGVwbG95IGJlbG93IOKAlCBmaXJzdCBydW4gaXMgdGhlIHNsb3cgb25lIChpbWFnZSBwdWxscyArIGNlcnQgZ2VuZXJhdGlvbikuJyk7XG4gICAgfVxuICAgIGNvbnN0IHsgY29kZSwgdGFpbCB9ID0gYXdhaXQgcnVuU2NyaXB0KHJlYWxDb21tYW5kLCBjd2QsIHsgY2FwdHVyZTogdHJ1ZSB9KTtcbiAgICBpZiAoY29kZSA9PT0gMCkgeyBzdWNjZWVkZWQgPSB0cnVlOyBicmVhazsgfVxuXG4gICAgcHJpbnRFcnJvcihgXFxuRGVwbG95IGZhaWxlZCAoZXhpdCAke2NvZGV9KS5gKTtcbiAgICBjb25zdCBpc3N1ZXMgPSBtYXRjaElzc3Vlcyh0YWlsKTtcbiAgICBpZiAoaXNzdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgIHByaW50U2VjdGlvbignTGlrZWx5IGNhdXNlJyk7XG4gICAgICBmb3IgKGNvbnN0IGkgb2YgaXNzdWVzKSBwcmludEluZm8oYOKAoiAke2kuY2F1c2V9XFxuICDihpIgJHtpLnN1Z2dlc3Rpb259YCk7XG4gICAgfVxuICAgIGlmIChpc0FpQ29uZmlndXJlZChhaU9wdHMpKSB7XG4gICAgICBjb25zdCBkaWFnbm9zaXMgPSBhd2FpdCBkaWFnbm9zZUZhaWx1cmUocmVkYWN0U2VjcmV0cyh0YWlsLCBzcGVjLCBydW5QYXJhbXMpLCBhaU9wdHMpO1xuICAgICAgaWYgKGRpYWdub3NpcykgeyBwcmludFNlY3Rpb24oJ0RpYWdub3NpcycpOyBwcmludEluZm8oZGlhZ25vc2lzKTsgfVxuICAgIH1cbiAgICBpZiAoYXR0ZW1wdCA+PSBtYXhBdHRlbXB0cykgYnJlYWs7XG5cbiAgICAvLyBBdXRvLWZpeDogYSByZXRyeWFibGUgaXNzdWUgd2l0aCBhIHBhcmFtIHdlIGhhdmVuJ3QgYWxyZWFkeSBhcHBsaWVkLlxuICAgIGNvbnN0IGZpeCA9IGlzc3Vlcy5maW5kKChpKSA9PiBpLnJldHJ5YWJsZSAmJiBpLnBhcmFtRml4ICYmIHJ1blBhcmFtc1tpLnBhcmFtRml4LmtleV0gIT09IGkucGFyYW1GaXgudmFsdWUpO1xuICAgIGlmIChmaXg/LnBhcmFtRml4ICYmIGF3YWl0IGNvbmZpcm0oYFxcbkFwcGx5IGZpeCBhbmQgcmV0cnkg4oCUICR7Zml4LnN1Z2dlc3Rpb259YCwgb3B0cy55ZXMgPz8gZmFsc2UpKSB7XG4gICAgICBydW5QYXJhbXMgPSB7IC4uLnJ1blBhcmFtcywgW2ZpeC5wYXJhbUZpeC5rZXldOiBmaXgucGFyYW1GaXgudmFsdWUgfTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICAvLyBSZXRyeWFibGUgYnV0IG5vIHBhcmFtIGNoYW5nZSAoZS5nLiBBQ00gRE5TIHByb3BhZ2F0aW9uKSDigJQgb2ZmZXIgYSBwbGFpbiByZS1ydW4uXG4gICAgaWYgKCFmaXggJiYgaXNzdWVzLnNvbWUoKGkpID0+IGkucmV0cnlhYmxlKSAmJiBhd2FpdCBjb25maXJtKCdcXG5SZXRyeSB0aGUgZGVwbG95IChzYWZlIHRvIHJlLXJ1biDigJQgaXQgcmVzdW1lcyB3aGVyZSBpdCBsZWZ0IG9mZik/Jywgb3B0cy55ZXMgPz8gZmFsc2UpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIHsgc3VjY2VlZGVkLCBydW5QYXJhbXMgfTtcbn1cblxuLyoqXG4gKiBFeGVjdXRlIHRoZSBwb3N0LWluc3RhbGwgc3RlcHMgKHJlZ2lzdGVyIOKGkiBsb2FkcyDihpIgc21va2Ug4oaSIGV2ZW50cyDihpIgY3VzdG9tKS4gT25cbiAqIEVDMi9GYXJnYXRlLCByZWdpc3RlciArIHRoZSBldmVudHMgYnVuZGxlIChzdG9yZS10b2tlbiDihpIgc2V0dXAtZXZlbnRzKSBuZWVkIGFcbiAqIHJlYWNoYWJsZSwgUkVHSVNURVJFRCBwbGF0Zm9ybSB0aGF0J3Mgb25seSB0cnVlIGluc2lkZSB0aGUgVlBDLCBzbyB0aG9zZSBhcmVcbiAqIFNVUkZBQ0VEIGFzIG9yZGVyZWQgbWFudWFsIG5leHQtc3RlcHMgaW5zdGVhZCBvZiBhdXRvLXJ1biAodGhleSdkIGZhaWwgbG9jYWxseSkuXG4gKiBTZXRzIGV4aXRDb2RlIG9uIGEgc3RlcCBmYWlsdXJlOyB0aGUgcGxhdGZvcm0gaXMgYWxyZWFkeSBkZXBsb3llZCBieSB0aGlzIHBvaW50LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuUG9zdFN0ZXBzKFxuICBwb3N0U3RlcHM6IFBvc3RTdGVwW10sXG4gIHNraXBwZWRTdGVwczogU2tpcHBlZFN0ZXBbXSxcbiAgdGFyZ2V0OiBUYXJnZXRJZCxcbiAgY3dkOiBzdHJpbmcsXG4gIGFkbWluRW52OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICBvcHRzOiB7IHllcz86IGJvb2xlYW47IGF1dG9SdW4/OiBib29sZWFuOyBhdXRvSW5pdD86IGJvb2xlYW4gfSxcbik6IFByb21pc2U8dm9pZD4ge1xuICAvLyBFQzIgLS1hdXRvLWluaXQ6IHRoZSBib3ggc2VsZi1ydW5zIGluaXQtcGxhdGZvcm0gb24gZmlyc3QgYm9vdCwgc28gdGhlcmUncyBub1xuICAvLyByZWdpc3Rlci9sb2FkcyBzdGVwIHRvIHN1cmZhY2UgaGVyZSDigJQgY29uZmlybSBpdCBhbmQgcG9pbnQgYXQgdGhlIGJvb3QgbG9nLlxuICBpZiAob3B0cy5hdXRvSW5pdCAmJiB0YXJnZXQgPT09ICdlYzInKSB7XG4gICAgcHJpbnRJbmZvKCdcXG7inJMgQXV0by1pbml0IGVuYWJsZWQg4oCUIHRoZSBpbnN0YW5jZSBydW5zIGluaXQtcGxhdGZvcm0gaXRzZWxmIG9uIGZpcnN0IGJvb3QnKTtcbiAgICBwcmludEluZm8oJyAgKHJlZ2lzdGVyIGFkbWluICsgYnVpbGQgYm9vdHN0cmFwIGltYWdlICsgbG9hZCBwbHVnaW5zL2NvbXBsaWFuY2Uvc2FtcGxlcykuJyk7XG4gICAgcHJpbnRJbmZvKCcgIEl0IHRha2VzIH4zMC02MCBtaW47IHdhdGNoIHByb2dyZXNzOicpO1xuICAgIHByaW50SW5mbygnICAgIGF3cyBzc20gc3RhcnQtc2Vzc2lvbiAtLXRhcmdldCA8SW5zdGFuY2VJZD4gICAjIEluc3RhbmNlSWQgc3RhY2sgb3V0cHV0Jyk7XG4gICAgcHJpbnRJbmZvKCcgICAgc3VkbyB0YWlsIC1mIC92YXIvbG9nL3VzZXItZGF0YS5sb2cnKTtcbiAgfVxuICBpZiAocG9zdFN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICBmb3IgKGNvbnN0IHMgb2Ygc2tpcHBlZFN0ZXBzKSBwcmludFdhcm5pbmcoYFNraXBwZWQgcG9zdC1zdGVwICR7cy5pZH06ICR7cy5yZWFzb259YCk7XG4gIGNvbnN0IGlzUmVtb3RlID0gKGlkOiBzdHJpbmcpOiBib29sZWFuID0+XG4gICAgKHRhcmdldCA9PT0gJ2VjMicgfHwgdGFyZ2V0ID09PSAnZmFyZ2F0ZScpICYmIChpZCA9PT0gJ3JlZ2lzdGVyJyB8fCBpZCA9PT0gJ3N0b3JlLXRva2VuJyB8fCBpZCA9PT0gJ2V2ZW50cycpO1xuICBjb25zdCBydW5uYWJsZSA9IHBvc3RTdGVwcy5maWx0ZXIoKHMpID0+ICFpc1JlbW90ZShzLmlkKSk7XG4gIGNvbnN0IHJlbW90ZSA9IHBvc3RTdGVwcy5maWx0ZXIoKHMpID0+IGlzUmVtb3RlKHMuaWQpKTtcbiAgaWYgKHJlbW90ZS5sZW5ndGggPiAwKSB7XG4gICAgaWYgKHRhcmdldCA9PT0gJ2VjMicpIHtcbiAgICAgIC8vIEVDMiBydW5zIHRoZSBwbGF0Zm9ybSBhcyBhIGRlZGljYXRlZCBgbWluaWt1YmVgIHVzZXIgaW5zaWRlIHRoZSBpbnN0YW5jZTogdGhlXG4gICAgICAvLyBjbHVzdGVyLCBpdHMga3ViZWNvbmZpZywgYW5kIHRoZSBqd3Qtc2VjcmV0IGFsbCBiZWxvbmcgdG8gdGhhdCB1c2VyLCBhbmQgdGhlXG4gICAgICAvLyByZWdpc3RlciBzdGVwIGJ1aWxkcytwdXNoZXMgaW1hZ2VzIGFnYWluc3QgaXQuIFNvIGl0IE1VU1QgcnVuIG9uIHRoZSBib3ggYXNcbiAgICAgIC8vIGBtaW5pa3ViZWAg4oCUIHByaW50IHRoZSBleGFjdCBsYW5kaW5nIHNlcXVlbmNlIHJhdGhlciB0aGFuIGEgYmFyZSBjb21tYW5kLlxuICAgICAgcHJpbnRJbmZvKCdcXG5OZXh0IOKAlCBmaW5pc2ggc2V0dXAgT04gdGhlIGluc3RhbmNlIChpdCBidWlsZHMgaW1hZ2VzICsgcmVhZHMgdGhlIGNsdXN0ZXIsIHNvIGl0Jyk7XG4gICAgICBwcmludEluZm8oJ2Nhbm5vdCBydW4gZnJvbSBoZXJlKS4gTGFuZCBvbiB0aGUgYm94LCBiZWNvbWUgdGhlIGBtaW5pa3ViZWAgdXNlciwgdGhlbiBydW4gaXQ6Jyk7XG4gICAgICBwcmludEluZm8oJyAgYXdzIHNzbSBzdGFydC1zZXNzaW9uIC0tdGFyZ2V0IDxJbnN0YW5jZUlkPiAgICAgICMgSW5zdGFuY2VJZCBzdGFjayBvdXRwdXQgKG9yIHNzaCB2aWEgdGhlIGJhc3Rpb24pJyk7XG4gICAgICBwcmludEluZm8oJyAgc3VkbyAtaXUgbWluaWt1YmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgb3ducyB0aGUgY2x1c3RlciArIGRvY2tlcicpO1xuICAgICAgcHJpbnRJbmZvKCcgIGNkIC9vcHQvcGlwZWxpbmUvcGlwZWxpbmUtYnVpbGRlciAgICAgICAgICAgICAgICAjIHRoZSBkZXBsb3llZCBjaGVja291dCcpO1xuICAgICAgZm9yIChjb25zdCBzIG9mIHJlbW90ZSkgcHJpbnRJbmZvKGAgICR7cy5jb21tYW5kfWApO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcmludEluZm8oJ1xcbk5leHQgKHJ1biBmcm9tIGluc2lkZSB0aGUgVlBDLCBpbiB0aGlzIG9yZGVyKTonKTtcbiAgICAgIGZvciAoY29uc3QgcyBvZiByZW1vdGUpIHByaW50SW5mbyhgICDigKIgJHtzLmxhYmVsfSDigJQgJHtzLmNvbW1hbmR9YCk7XG4gICAgfVxuICB9XG4gIGlmIChydW5uYWJsZS5sZW5ndGggPT09IDApIHJldHVybjtcbiAgLy8gV2hlbiB0aGUgbG9hZHMgd2VyZSBwaWNrZWQgaW50ZXJhY3RpdmVseSAoYXV0b1J1biksIHRoZSB1c2VyIGFscmVhZHkgb3B0ZWQgaW4g4oCUIHNraXBcbiAgLy8gdGhlIHJlZHVuZGFudCBzZWNvbmQgY29uZmlybS4gRmxhZy1kcml2ZW4gLyBub24taW50ZXJhY3RpdmUgcnVucyBzdGlsbCBnYXRlIGhlcmUuXG4gIGlmIChvcHRzLmF1dG9SdW4gfHwgYXdhaXQgY29uZmlybShgXFxuUnVuICR7cnVubmFibGUubGVuZ3RofSBwb3N0LWluc3RhbGwgc3RlcChzKSBub3c/YCwgb3B0cy55ZXMgPz8gZmFsc2UpKSB7XG4gICAgaWYgKG9wdHMuYXV0b1J1bikgcHJpbnRJbmZvKGBcXG5SdW5uaW5nIHRoZSAke3J1bm5hYmxlLmxlbmd0aH0gcG9zdC1pbnN0YWxsIHN0ZXAocykgeW91IHNlbGVjdGVk4oCmYCk7XG4gICAgZm9yIChjb25zdCBzIG9mIHJ1bm5hYmxlKSB7XG4gICAgICBwcmludFNlY3Rpb24oYFBvc3Qtc3RlcDogJHtzLmxhYmVsfWApO1xuICAgICAgLy8gcmVnaXN0ZXIgKGxvY2FsL21pbmlrdWJlKSBsb2dzIGludG8gdGhlIHBsYXRmb3JtLCBzbyBpdCBuZWVkcyB0aGUgYWRtaW4gY3JlZHNcbiAgICAgIC8vIChQTEFURk9STV9JREVOVElGSUVSIC8gUExBVEZPUk1fUEFTU1dPUkQpIG9uIHRvcCBvZiBpdHMgc3RlcCBlbnYuXG4gICAgICBjb25zdCBuZWVkc0NyZWRzID0gcy5pZCA9PT0gJ3JlZ2lzdGVyJyB8fCBzLmlkID09PSAnc3RvcmUtdG9rZW4nO1xuICAgICAgY29uc3QgZW52ID0gbmVlZHNDcmVkcyA/IHsgLi4ucy5lbnYsIC4uLmFkbWluRW52IH0gOiBzLmVudjtcbiAgICAgIC8vIExvYWRzL3Ntb2tlIGFyZSBub2lzeSArIG5vbi1pbnRlcmFjdGl2ZSDihpIgcnVuIFFVSUVUIChjYXB0dXJlLCBzaG93IG9ubHkgb25cbiAgICAgIC8vIGZhaWx1cmUpLiBFeGNlcHRpb246IGEgcmVnaXN0ZXIgd2l0aCBubyBhZG1pbiBjcmVkcyBwcm9tcHRzLCBzbyBpdCBtdXN0IHN0cmVhbS5cbiAgICAgIGNvbnN0IGludGVyYWN0aXZlUmVnaXN0ZXIgPSBzLmlkID09PSAncmVnaXN0ZXInICYmICFhZG1pbkVudi5QTEFURk9STV9JREVOVElGSUVSO1xuICAgICAgY29uc3QgcXVpZXQgPSAhaW50ZXJhY3RpdmVSZWdpc3RlcjtcbiAgICAgIGlmIChxdWlldCkgcHJpbnRJbmZvKGAke3MuY29tbWFuZH1cXG4gIOKApnJ1bm5pbmcgKG91dHB1dCBzaG93biBvbmx5IGlmIGl0IGZhaWxzKWApO1xuICAgICAgZWxzZSBwcmludEluZm8ocy5jb21tYW5kKTtcbiAgICAgIGNvbnN0IHsgY29kZSwgdGFpbCB9ID0gYXdhaXQgcnVuU2NyaXB0KHMuY29tbWFuZCwgY3dkLCB7IHF1aWV0LCBjYXB0dXJlOiBmYWxzZSwgZW52IH0pO1xuICAgICAgaWYgKGNvZGUgIT09IDApIHtcbiAgICAgICAgaWYgKHF1aWV0ICYmIHRhaWwpIHsgcHJpbnRFcnJvcignXFxuLS0tIGxhc3Qgb3V0cHV0IC0tLScpOyBwcmludEluZm8odGFpbCk7IH1cbiAgICAgICAgcHJpbnRFcnJvcihgXFxuUG9zdC1zdGVwICcke3MuaWR9JyBmYWlsZWQgKGV4aXQgJHtjb2RlfSkuIFRoZSBwbGF0Zm9ybSBpcyBkZXBsb3llZDsgZml4IGFuZCByZS1ydW4gdGhlIHN0ZXAgbWFudWFsbHkuYCk7XG4gICAgICAgIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHByaW50U3VjY2VzcyhgJHtzLmlkfSDinJNgKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcHJpbnRJbmZvKCdcXG5Ta2lwcGVkIHBvc3QtaW5zdGFsbCBzdGVwcy4gUnVuIHRoZSBjb21tYW5kcyBhYm92ZSBtYW51YWxseSB3aGVuIHJlYWR5LicpO1xuICB9XG59XG5cbi8qKlxuICogU3BhcnNlLWNsb25lIHRoZSBwbGF0Zm9ybSByZXBvICh3aGVuIC0tcmVwbywgb3IgYWNjZXB0ZWQgdmlhIHRoZSBpbnRlcmFjdGl2ZVxuICogb2ZmZXIpLCByZXBvaW50IGN3ZCBpbnRvIGl0LCBhbmQgdmVyaWZ5IHRoZSBkZXBsb3kgZW50cnlwb2ludCBleGlzdHMuIE93bnMgdGhlXG4gKiBjd2QvYm9vdHN0cmFwcGVkIHN0YXRlLiBTZXRzIGV4aXRDb2RlIG9uIGEgaGFyZCBmYWlsdXJlIChjbG9uZSBlcnJvciAvIG1pc3NpbmdcbiAqIGVudHJ5cG9pbnQpLCBtYXRjaGluZyB0aGUgb2xkIGlubGluZSBiZWhhdmlvcjsgYSBwbGFpbiBkZWNsaW5lIGxlYXZlcyBleGl0Q29kZVxuICogdW50b3VjaGVkLiBSZXR1cm5zIG9rOmZhbHNlIHdoZW4gdGhlIGNhbGxlciBtdXN0IGFib3J0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYm9vdHN0cmFwQW5kTG9jYXRlKFxuICBzcGVjOiBUYXJnZXRTcGVjLFxuICBib290c3RyYXA6IEJvb3RzdHJhcFNwZWMsXG4gIGJvb3RzdHJhcENtZDogc3RyaW5nIHwgbnVsbCxcbiAgc3BhcnNlUGF0aHM6IHJlYWRvbmx5IHN0cmluZ1tdLFxuICBzdGFydEN3ZDogc3RyaW5nLFxuICBvcHRzOiB7IHllcz86IGJvb2xlYW4gfSxcbik6IFByb21pc2U8eyBjd2Q6IHN0cmluZzsgYm9vdHN0cmFwcGVkOiBib29sZWFuOyBvazogYm9vbGVhbiB9PiB7XG4gIGxldCBjd2QgPSBzdGFydEN3ZDtcbiAgbGV0IGJvb3RzdHJhcHBlZCA9IGZhbHNlO1xuICAvLyBTaGFyZWQgYnkgYC0tcmVwb2AgYW5kIHRoZSBpbnRlcmFjdGl2ZSBvZmZlci4gUmVwb2ludHMgY3dkICsgc2V0cyBib290c3RyYXBwZWQ7XG4gIC8vIGBib290c3RyYXBwZWRgIHJlY29yZHMgd2hldGhlciB3ZSBjcmVhdGVkIHRoZSBjbG9uZSAodnMuIGFuIGV4aXN0aW5nIGNoZWNrb3V0KSDigJRcbiAgLy8gb25seSB0aGVuIGNhbiB0aGUgY2FsbGVyIGFkZGl0aXZlbHkgc3BhcnNlLWZldGNoIGxvYWQgZm9sZGVycy5cbiAgY29uc3QgYm9vdHN0cmFwQ2xvbmUgPSBhc3luYyAoKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gICAgY29uc3QgY21kID0gYm9vdHN0cmFwQ29tbWFuZChib290c3RyYXApO1xuICAgIHByaW50U2VjdGlvbignQm9vdHN0cmFwJyk7XG4gICAgcHJpbnRJbmZvKGNtZCk7XG4gICAgY29uc3QgeyBjb2RlIH0gPSBhd2FpdCBydW5TY3JpcHQoY21kLCBjd2QsIHsgY2FwdHVyZTogZmFsc2UgfSk7XG4gICAgaWYgKGNvZGUgIT09IDApIHtcbiAgICAgIHByaW50RXJyb3IoYFxcblRoZSBjbG9uZSBkaWRuJ3QgZmluaXNoIChleGl0ICR7Y29kZX0pLiBEb3VibGUtY2hlY2sgdGhlIHJlcG8gVVJMIC8gcmVmIChvciB5b3VyIG5ldHdvcmspIGFuZCBnaXZlIGl0IGFub3RoZXIgZ28uYCk7XG4gICAgICBwcm9jZXNzLmV4aXRDb2RlID0gMTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY3dkID0gcGF0aC5yZXNvbHZlKGN3ZCwgYm9vdHN0cmFwLndvcmtkaXIpO1xuICAgIGJvb3RzdHJhcHBlZCA9IHRydWU7XG4gICAgcHJpbnRTdWNjZXNzKGBSZXBvIGlzIHJlYWR5IOKAlCBjb250aW51aW5nIGZyb20gJHtjd2R9YCk7XG4gICAgY29uc3QgYWJzZW50ID0gc3BhcnNlUGF0aHMuZmlsdGVyKChwKSA9PiAhZXhpc3RzU3luYyhwYXRoLmpvaW4oY3dkLCBwKSkpO1xuICAgIGlmIChhYnNlbnQubGVuZ3RoID4gMCkge1xuICAgICAgcHJpbnRFcnJvcihgXFxuVGhlIHNwYXJzZSBjbG9uZSBpcyBtaXNzaW5nICR7YWJzZW50LmpvaW4oJywgJyl9IOKAlCB0aGF0IHJlZiBtYXkgbm90IGhhdmUgdGhvc2UgZm9sZGVycy4gVHJ5IGEgZGlmZmVyZW50IC0tcmVmLmApO1xuICAgICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIC8vIGAtLXJlcG9gOiBjbG9uZSB1cCBmcm9udCAobXVzdCBwcmVjZWRlIHRoZSBlbnRyeXBvaW50IGNoZWNrKS5cbiAgaWYgKGJvb3RzdHJhcENtZCkge1xuICAgIHByaW50SW5mbyhgXFxuQm9vdHN0cmFwIOKGkiBjbG9uZSAke2Jvb3RzdHJhcC5yZXBvfSBAICR7Ym9vdHN0cmFwLnJlZn0gaW50byAke2Jvb3RzdHJhcC53b3JrZGlyfSAoc3BhcnNlKS5gKTtcbiAgICBpZiAoIShhd2FpdCBjb25maXJtKCdHbyBhaGVhZCB3aXRoIHRoZSBjbG9uZT8nLCBvcHRzLnllcyA/PyBmYWxzZSkpKSB7XG4gICAgICBwcmludFdhcm5pbmcoJ05vIHByb2JsZW0g4oCUIG5vdGhpbmcgd2FzIGNoYW5nZWQuIFJlLXJ1biB3aGVuZXZlciB5b3VcXCdyZSByZWFkeS4nKTtcbiAgICAgIHJldHVybiB7IGN3ZCwgYm9vdHN0cmFwcGVkLCBvazogZmFsc2UgfTtcbiAgICB9XG4gICAgaWYgKCEoYXdhaXQgYm9vdHN0cmFwQ2xvbmUoKSkpIHJldHVybiB7IGN3ZCwgYm9vdHN0cmFwcGVkLCBvazogZmFsc2UgfTtcbiAgfVxuXG4gIC8vIFRoZSBkZXBsb3kgZW50cnlwb2ludCBtdXN0IGV4aXN0IHJlbGF0aXZlIHRvIGN3ZC4gSWYgaXQgZG9lc24ndCBhbmQgd2UgaGF2ZW4ndFxuICAvLyBib290c3RyYXBwZWQsIGdyYWNlZnVsbHkgT0ZGRVIgdG8gY2xvbmUgKGludGVyYWN0aXZlIG9ubHkpIHNvIGEgZnJlc2ggbWFjaGluZSBjYW5cbiAgLy8gcHJvY2VlZCB3aXRob3V0IHJlLXJ1bm5pbmcgd2l0aCAtLXJlcG8uXG4gIGlmICghZW50cnlwb2ludEV4aXN0cyhzcGVjLCBjd2QpKSB7XG4gICAgY29uc3QgaW50ZXJhY3RpdmUgPSBCb29sZWFuKHByb2Nlc3Muc3RkaW4uaXNUVFkpICYmICFvcHRzLnllcztcbiAgICBpZiAoIWJvb3RzdHJhcENtZCAmJiBpbnRlcmFjdGl2ZSAmJiBnaXRBdmFpbGFibGUoKSkge1xuICAgICAgcHJpbnRJbmZvKGBcXG5Mb29rcyBsaWtlIHlvdSdyZSBub3QgaW5zaWRlIGEgcGlwZWxpbmUtYnVpbGRlciBjaGVja291dCwgc28gdGhlICR7c3BlYy5sYWJlbH0gZGVwbG95IHNjcmlwdHMgYXJlbid0IGhlcmUgeWV0LmApO1xuICAgICAgaWYgKGF3YWl0IGNvbmZpcm0oYFdhbnQgbWUgdG8gc3BhcnNlLWNsb25lIHRoZW0gaW50byAke2Jvb3RzdHJhcC53b3JrZGlyfSBhbmQga2VlcCBnb2luZz9gLCBmYWxzZSkpIHtcbiAgICAgICAgaWYgKCEoYXdhaXQgYm9vdHN0cmFwQ2xvbmUoKSkpIHJldHVybiB7IGN3ZCwgYm9vdHN0cmFwcGVkLCBvazogZmFsc2UgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFlbnRyeXBvaW50RXhpc3RzKHNwZWMsIGN3ZCkpIHtcbiAgICAgIHByaW50V2FybmluZyhgXFxuSSBjb3VsZG4ndCBmaW5kICR7c3BlYy5kaXJ9LyR7c3BlYy5lbnRyeXBvaW50fSBmcm9tICR7Y3dkfS5gKTtcbiAgICAgIHByaW50SW5mbygnVHdvIGVhc3kgd2F5cyBmb3J3YXJkOicpO1xuICAgICAgcHJpbnRJbmZvKCcgIOKAoiBjZCBpbnRvIHlvdXIgcGlwZWxpbmUtYnVpbGRlciBjaGVja291dCBhbmQgcmUtcnVuLCBvcicpO1xuICAgICAgcHJpbnRJbmZvKGAgIOKAoiBhZGQgLS1yZXBvIGFuZCBJJ2xsIGJvb3RzdHJhcCBhIGZyZXNoIHNwYXJzZSBjbG9uZSBmb3IgeW91JHtnaXRBdmFpbGFibGUoKSA/ICcuJyA6ICcgKG9uY2UgZ2l0IGlzIGluc3RhbGxlZCkuJ31gKTtcbiAgICAgIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xuICAgICAgcmV0dXJuIHsgY3dkLCBib290c3RyYXBwZWQsIG9rOiBmYWxzZSB9O1xuICAgIH1cbiAgfVxuICByZXR1cm4geyBjd2QsIGJvb3RzdHJhcHBlZCwgb2s6IHRydWUgfTtcbn1cblxuLyoqXG4gKiBJbnRlcmFjdGl2ZSBvcHQtaW4gbG9hZHMsIG9mZmVyZWQgQUZURVIgdGhlIGNsb25lIChzbyB3ZSBvbmx5IGFzayBvbmNlIHRoZSBvcGVyYXRvclxuICogaGFzIGFncmVlZCB0byBwcm9jZWVkKS4gUHJvbXB0cyBwZXIgbG9hZCwgYWRkaXRpdmVseSBzcGFyc2UtZmV0Y2hlcyB0aGUgcGlja2VkXG4gKiBmb2xkZXJzIGludG8gYSBib290c3RyYXBwZWQgc3BhcnNlIGNsb25lLCB0aGVuIHJlLXJlc29sdmVzIHRoZSBwb3N0LWluc3RhbGwgc3RlcHNcbiAqIHdpdGggdGhlIHNlbGVjdGlvbnMuIFJldHVybnMgdGhlIGNob3NlbiBpZHMgKyB0aGUgcmVjb21wdXRlZCBzdGVwcy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVMb2Fkc0ludGVyYWN0aXZlbHkoXG4gIHRhcmdldDogVGFyZ2V0SWQsXG4gIHVybDogc3RyaW5nIHwgbnVsbCxcbiAgcmVnaW9uOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIGN3ZDogc3RyaW5nLFxuICBib290c3RyYXBwZWQ6IGJvb2xlYW4sXG4gIGJvb3RzdHJhcDogQm9vdHN0cmFwU3BlYyxcbiAgcG9zdFN0ZXBGbGFnczogeyBpbml0OiBib29sZWFuOyBhdXRvSW5pdDogYm9vbGVhbjsgYnVpbGRCb290c3RyYXA6IGJvb2xlYW47IHNtb2tlVGVzdDogYm9vbGVhbjsgZXZlbnRzOiBib29sZWFuOyBzdGVwczogc3RyaW5nW10gfSxcbik6IFByb21pc2U8eyBlbmFibGVkTG9hZElkczogc3RyaW5nW107IHN0ZXBzOiBQb3N0U3RlcFtdOyBza2lwcGVkOiBTa2lwcGVkU3RlcFtdIH0+IHtcbiAgY29uc3QgcHJvbXB0czogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICBwbHVnaW5zOiAnTG9hZCBwbHVnaW5zPycsXG4gICAgc2FtcGxlczogJ0xvYWQgc2FtcGxlIHBpcGVsaW5lcz8nLFxuICAgIGNvbXBsaWFuY2U6ICdMb2FkIGNvbXBsaWFuY2UgcnVsZXM/JyxcbiAgfTtcbiAgcHJpbnRTZWN0aW9uKCdPcHRpb25hbCBwb3N0LWluc3RhbGwgbG9hZHMnKTtcbiAgY29uc3QgY2hvc2VuOiBzdHJpbmdbXSA9IFtdO1xuICBmb3IgKGNvbnN0IHMgb2YgTE9BRF9TVEVQUykge1xuICAgIGlmIChhd2FpdCBjb25maXJtKHByb21wdHNbcy5pZF0gPz8gYExvYWQgJHtzLmlkfT9gLCBmYWxzZSkpIGNob3Nlbi5wdXNoKHMuaWQpO1xuICB9XG4gIC8vIEFkZGl0aXZlIHNwYXJzZSByZS1zeW5jOiBtYXRlcmlhbGl6ZSBPTkxZIHRoZSBwaWNrZWQgbG9hZHMnIGZvbGRlcnMgKHRoZSBwYXJ0aWFsXG4gIC8vIGNsb25lIGZldGNoZXMgdGhlaXIgYmxvYnMgb24gZGVtYW5kKS4gT25seSB3aGVuIHdlIGNyZWF0ZWQgYSBTUEFSU0UgY2xvbmUg4oCUIGFcbiAgLy8gbm9ybWFsIGNoZWNrb3V0IGFscmVhZHkgaGFzIGV2ZXJ5IGZvbGRlciwgYW5kIHRoZSBnaXQ8Mi4yNyBmdWxsLWNsb25lIGZhbGxiYWNrXG4gIC8vIChib290c3RyYXAuZnVsbCkgaXMgbm9uLXNwYXJzZSwgd2hlcmUgYHNwYXJzZS1jaGVja291dCBhZGRgIHdvdWxkIHN3aXRjaCBpdCB0b1xuICAvLyBjb25lIG1vZGUgYW5kIFBSVU5FIHRoZSBhbHJlYWR5LW1hdGVyaWFsaXplZCBkZXBsb3kgZm9sZGVycy5cbiAgaWYgKGJvb3RzdHJhcHBlZCAmJiAhYm9vdHN0cmFwLmZ1bGwpIHtcbiAgICBjb25zdCBhYnNlbnQgPSBzcGFyc2VQYXRoc0Zvcih0YXJnZXQsIGNob3NlbikuZmlsdGVyKChwKSA9PiAhZXhpc3RzU3luYyhwYXRoLmpvaW4oY3dkLCBwKSkpO1xuICAgIGlmIChhYnNlbnQubGVuZ3RoID4gMCkge1xuICAgICAgcHJpbnRTZWN0aW9uKCdGZXRjaGluZyBzZWxlY3RlZCBsb2FkIGZvbGRlcnMnKTtcbiAgICAgIGNvbnN0IGFkZENtZCA9IGBnaXQgc3BhcnNlLWNoZWNrb3V0IGFkZCAke2Fic2VudC5tYXAoKHApID0+IGAnJHtwfSdgKS5qb2luKCcgJyl9ICYmIGdpdCBjaGVja291dCAnJHtib290c3RyYXAucmVmfSdgO1xuICAgICAgcHJpbnRJbmZvKGFkZENtZCk7XG4gICAgICBjb25zdCB7IGNvZGUgfSA9IGF3YWl0IHJ1blNjcmlwdChhZGRDbWQsIGN3ZCwgeyBjYXB0dXJlOiBmYWxzZSB9KTtcbiAgICAgIGlmIChjb2RlICE9PSAwKSB7XG4gICAgICAgIHByaW50V2FybmluZyhgQ291bGRuJ3QgZmV0Y2ggJHthYnNlbnQuam9pbignLCAnKX0g4oCUIHRoZSBtYXRjaGluZyBsb2FkIHN0ZXAocykgbWF5IGZhaWwuIFJlLXJ1biB3aXRoIC0tcmVwbyB0byByZWZyZXNoIHRoZSBjbG9uZS5gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlUG9zdFN0ZXBzKHtcbiAgICB0YXJnZXQsXG4gICAgdXJsLFxuICAgIHJlZ2lvbixcbiAgICBlbmFibGVkTG9hZElkczogY2hvc2VuLFxuICAgIC4uLnBvc3RTdGVwRmxhZ3MsXG4gICAgYnVpbGRCb290c3RyYXA6IHBvc3RTdGVwRmxhZ3MuYnVpbGRCb290c3RyYXAgfHwgY2hvc2VuLmluY2x1ZGVzKCdwbHVnaW5zJyksXG4gIH0pO1xuICByZXR1cm4geyBlbmFibGVkTG9hZElkczogY2hvc2VuLCBzdGVwczogcmVzb2x2ZWQuc3RlcHMsIHNraXBwZWQ6IHJlc29sdmVkLnNraXBwZWQgfTtcbn1cblxuLyoqXG4gKiBSZWRhY3Qgc2VjcmV0IHBhcmFtIHZhbHVlcyAoZS5nLiB0aGUgZ2hjciB0b2tlbikgZnJvbSBjYXB0dXJlZCBkZXBsb3kgb3V0cHV0XG4gKiBiZWZvcmUgaXQgaXMgc2VudCB0byB0aGUgTExNIGZvciBkaWFnbm9zaXMuIFRoZSBkZXBsb3kgcnVucyB3aXRoIHNlY3JldHNcbiAqIHVubWFza2VkLCBzbyBhbHRob3VnaCB0aGUgY3VycmVudCBzY3JpcHRzIGRvbid0IGVjaG8gdGhlbSwgdGhpcyBrZWVwcyBhIGZ1dHVyZVxuICogc2NyaXB0J3Mgc3RyYXkgZWNobyAob3IgYSB2ZXJib3NlIHN1Yi10b29sKSBmcm9tIGNyb3NzaW5nIHRoZSB0aGlyZC1wYXJ0eS1MTE1cbiAqIGJvdW5kYXJ5LlxuICovXG5mdW5jdGlvbiByZWRhY3RTZWNyZXRzKHRleHQ6IHN0cmluZywgc3BlYzogVGFyZ2V0U3BlYywgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHN0cmluZyB7XG4gIGxldCBvdXQgPSB0ZXh0O1xuICBmb3IgKGNvbnN0IGlucHV0IG9mIFsuLi5zcGVjLnJlcXVpcmVkLCAuLi5zcGVjLm9wdGlvbmFsXSkge1xuICAgIGlmICghaW5wdXQuc2VjcmV0KSBjb250aW51ZTtcbiAgICBjb25zdCB2YWx1ZSA9IHBhcmFtc1tpbnB1dC5rZXldO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLmxlbmd0aCA+PSA0KSBvdXQgPSBvdXQuc3BsaXQodmFsdWUpLmpvaW4oJyoqKicpO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKlxuICogUmVnaXN0ZXJzIHRoZSBgcHJvdmlzaW9uYCBjb21tYW5kIOKAlCBhbiBBSS1hc3Npc3RlZCBpbnN0YWxsZXIgZm9yIHRoZSBQaXBlbGluZVxuICogQnVpbGRlciBQTEFURk9STSAobG9jYWwvbWluaWt1YmUvRUMyL0ZhcmdhdGUpLiBJdCBwcmludHMgdGhlIGFzc2VtYmxlZCBwbGFuXG4gKiAocHJlcmVxIGNoZWNrcywgTkwtZ29hbCBwYXJzaW5nLCBjb21tYW5kIGFzc2VtYmx5KSBhbmQgdGhlbiBERVBMT1lTLCBnYXRlZCBieVxuICogY29uZmlybWF0aW9uIHByb21wdHMgKGAtLXllc2AgdG8gYXV0by1hY2NlcHQ7IGAtLWpzb25gIGlzIHRoZSBvbmx5IG5vbi1leGVjdXRpbmdcbiAqIG1vZGUsIHByaW50aW5nIHRoZSBwbGFuIGZvciB0b29saW5nKS4gV2l0aCBgLS1yZXBvYCBpdCBjYW4gYm9vdHN0cmFwIGEgZnJlc2hcbiAqIG1hY2hpbmUgYnkgc3BhcnNlbHkgY2xvbmluZyBvbmx5IHRoZSBkZXBsb3kgZm9sZGVycyB0aGUgc2VsZWN0ZWQgdGFyZ2V0ICtcbiAqIG9wdGlvbnMgbmVlZCwgdGhlbiBydW5zIHBvc3QtaW5zdGFsbCBzdGVwcyAocmVnaXN0ZXIgYWRtaW4sIG9wdC1pbiBsb2FkcyxcbiAqIHNtb2tlIHRlc3QsIGN1c3RvbSBjb21tYW5kcykuIGAtLXRlYXJkb3duYCByZW1vdmVzIGEgZGVwbG95bWVudCBpbnN0ZWFkLlxuICpcbiAqIEBwYXJhbSBwcm9ncmFtIC0gVGhlIHJvb3QgQ29tbWFuZGVyIHByb2dyYW0gaW5zdGFuY2UgdG8gYXR0YWNoIHRoZSBjb21tYW5kIHRvLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlzaW9uKHByb2dyYW06IENvbW1hbmQpOiB2b2lkIHtcbiAgcHJvZ3JhbVxuICAgIC5jb21tYW5kKCdwcm92aXNpb24nKVxuICAgIC5kZXNjcmlwdGlvbignQUktYXNzaXN0ZWQgaW5zdGFsbGVyIGZvciB0aGUgcGxhdGZvcm0gKGxvY2FsL21pbmlrdWJlL0VDMi9GYXJnYXRlKTogZGVwbG95cyBpdCAoZ2F0ZWQgYnkgY29uZmlybWF0aW9uIHByb21wdHMpLCBvciAtLXRlYXJkb3duIHRvIHJlbW92ZScpXG4gICAgLm9wdGlvbignLXQsIC0tdGFyZ2V0IDx0YXJnZXQ+JywgYERlcGxveSB0YXJnZXQ6ICR7VEFSR0VUX0lEUy5qb2luKCcgfCAnKX1gKVxuICAgIC5vcHRpb24oJy1wLCAtLXByb21wdCA8dGV4dD4nLCAnTmF0dXJhbC1sYW5ndWFnZSBnb2FsIChwYXJzZWQgaW50byBwYXJhbXMgd2hlbiBhbiBBSSBrZXkgaXMgc2V0KScpXG4gICAgLm9wdGlvbignLS1yZWdpb24gPHJlZ2lvbj4nLCAnQVdTIHJlZ2lvbiAoRUMyL0ZhcmdhdGUpJylcbiAgICAub3B0aW9uKCctLWRvbWFpbiA8ZG9tYWluPicsICdGdWxseS1xdWFsaWZpZWQgZG9tYWluIG5hbWUgKEVDMi9GYXJnYXRlKScpXG4gICAgLm9wdGlvbignLS1ob3N0ZWQtem9uZS1pZCA8aWQ+JywgJ1B1YmxpYyBSb3V0ZSA1MyBob3N0ZWQgem9uZSBJRCAoRUMyL0ZhcmdhdGUpJylcbiAgICAub3B0aW9uKCctLWRlcGxveS1tb2RlIDxtb2RlPicsICdwdWJsaWMgfCBwcml2YXRlIChFQzIvRmFyZ2F0ZSknKVxuICAgIC5vcHRpb24oJy0ta2V5LXBhaXIgPG5hbWU+JywgJ0VDMiBrZXkgcGFpciAoRUMyKScpXG4gICAgLm9wdGlvbignLS1pbnN0YW5jZS10eXBlIDx0eXBlPicsICdFQzIgaW5zdGFuY2UgdHlwZSAoRUMyKScpXG4gICAgLm9wdGlvbignLS1naGNyLXRva2VuIDx0b2tlbj4nLCAnR2l0SHViIFBBVCAocmVhZDpwYWNrYWdlcykg4oCUIG1hc2tlZCBpbiBvdXRwdXQnKVxuICAgIC5vcHRpb24oJy0tZW1haWwnLCAnRW5hYmxlIFNFUyB0cmFuc2FjdGlvbmFsIGVtYWlsIChvbiBieSBkZWZhdWx0IGZvciBBV1MpJylcbiAgICAub3B0aW9uKCctLW5vLWVtYWlsJywgJ1NraXAgU0VTICh0cmFuc2FjdGlvbmFsIGVtYWlsIGlzIHByb3Zpc2lvbmVkIGJ5IGRlZmF1bHQgb24gQVdTKScpXG4gICAgLm9wdGlvbignLS1lbWFpbC1mcm9tIDxhZGRyPicsICdTRVMgRnJvbSBhZGRyZXNzJylcbiAgICAub3B0aW9uKCctLWVtYWlsLWZyb20tbmFtZSA8bmFtZT4nLCAnU0VTIEZyb20gZGlzcGxheSBuYW1lJylcbiAgICAub3B0aW9uKCctLWFsZXJ0LWVtYWlsIDxhZGRyPicsICdTdWJzY3JpYmUgYW4gYWRkcmVzcyB0byB0aGUgYm91bmNlL2NvbXBsYWludCBTTlMgdG9waWMnKVxuICAgIC5vcHRpb24oJy0tc2tpcC1zZXMtaWRlbnRpdHknLCAnU2tpcCBTRVMgaWRlbnRpdHkgY3JlYXRpb24gKGRvbWFpbiBhbHJlYWR5IHZlcmlmaWVkKScpXG4gICAgLm9wdGlvbignLS1haS1wcm92aWRlciA8cHJvdmlkZXI+JywgJ0FJIHByb3ZpZGVyIChhbnRocm9waWN8b3BlbmFpfGdvb2dsZXx4YWl8YmVkcm9jayknKVxuICAgIC5vcHRpb24oJy0tbW9kZWwgPG1vZGVsPicsICdBSSBtb2RlbCBpZCcpXG4gICAgLm9wdGlvbignLS1kaWFnbm9zZSA8ZmlsZT4nLCAnRGlhZ25vc2UgYSBDbG91ZEZvcm1hdGlvbi9kZXBsb3kgZmFpbHVyZSBmcm9tIGEgZmlsZSAobmVlZHMgYW4gQUkga2V5KScpXG4gICAgLm9wdGlvbignLXksIC0teWVzJywgJ0F1dG8tYWNjZXB0IGFsbCBjb25maXJtYXRpb24gcHJvbXB0cyAoZm9yIENJIC8gbm9uLWludGVyYWN0aXZlKScsIGZhbHNlKVxuICAgIC5vcHRpb24oJy0tcmV0cmllcyA8bj4nLCAnQXV0by1maXggKyByZXRyeSBhdHRlbXB0cyBhZnRlciBhIGZhaWx1cmUgKGRlcGxveSBzY3JpcHRzIGFyZSBpZGVtcG90ZW50KScsICcxJylcbiAgICAub3B0aW9uKCctLXRlYXJkb3duJywgJ1RlYXIgZG93biBhbiBleGlzdGluZyBkZXBsb3ltZW50IGluc3RlYWQgb2YgY3JlYXRpbmcgb25lIChnYXRlZDsgQVdTIHRhcmdldHMgcmVxdWlyZSBhIHR5cGVkIGNvbmZpcm1hdGlvbiknLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLXN0YWNrLW5hbWUgPG5hbWU+JywgJ1N0YWNrIG5hbWUgKEVDMikgLyBzdGFjayBwcmVmaXggKEZhcmdhdGUpIHRvIHRlYXIgZG93biDigJQgZGVmYXVsdHMgdG8gdGhlIGRlcGxveSBkZWZhdWx0JylcbiAgICAub3B0aW9uKCctLWZvcmNlJywgJ1NraXAgdGhlIHRlYXJkb3duIHR5cGVkLWNvbmZpcm1hdGlvbiAoREFOR0VST1VTIOKAlCBmb3IgQ0kvYXV0b21hdGlvbiBvbmx5KScsIGZhbHNlKVxuICAgIC5vcHRpb24oJy0tbm8taW5pdCcsICdTa2lwIHRoZSBwb3N0LWRlcGxveSByZWdpc3Rlci9pbml0LXBsYXRmb3JtIHN0ZXAnKVxuICAgIC5vcHRpb24oJy0tYXV0by1pbml0JywgJ0VDMjogaW5zdGFuY2Ugc2VsZi1ydW5zIGluaXQtcGxhdGZvcm0gb24gZmlyc3QgYm9vdCAocmVnaXN0ZXIgKyBhbGwgbG9hZHMpLiBUaGlzIGlzIHRoZSBERUZBVUxUIG9uIGVjMi4nKVxuICAgIC5vcHRpb24oJy0tbm8tYXV0by1pbml0JywgJ0VDMjogc2tpcCB0aGUgb24tYm9vdCBhdXRvLWluaXQgYW5kIHN1cmZhY2UgdGhlIG1hbnVhbCBvbi1ib3ggc3RlcCBpbnN0ZWFkLiBBZGRzIH4zMC02MCBtaW4gdG8gYm9vdCB3aGVuIG9uOyBhdXRvLWluaXQgcmVnaXN0ZXJzIGFkbWluIHdpdGggdGhlIGRlZmF1bHQgcGFzc3dvcmQuJylcbiAgICAvLyBCb290c3RyYXAgKHNwYXJzZSBjbG9uZSkg4oCUIHByb3Zpc2lvbiBhIGZyZXNoIG1hY2hpbmUgaW4gb25lIGNvbW1hbmQuXG4gICAgLm9wdGlvbignLS1yZXBvIFt1cmxdJywgJ0Jvb3RzdHJhcDogZ2l0LWNsb25lIHRoZSBwbGF0Zm9ybSByZXBvIGZpcnN0IChzcGFyc2Ug4oCUIG9ubHkgdGhlIG5lZWRlZCBkZXBsb3kgZm9sZGVycyksIHRoZW4gcnVuIGZyb20gaXQgKG5vIHZhbHVlID0gdGhlIHVwc3RyZWFtIGRlZmF1bHQpJylcbiAgICAub3B0aW9uKCctLXJlZiA8cmVmPicsICdHaXQgYnJhbmNoL3RhZyB0byBjaGVjayBvdXQgd2hlbiBib290c3RyYXBwaW5nIChkZWZhdWx0OiBtYWluKScpXG4gICAgLm9wdGlvbignLS13b3JrZGlyIDxkaXI+JywgJ0RpcmVjdG9yeSB0byBjbG9uZSBpbnRvIC8gcnVuIGZyb20gd2hlbiBib290c3RyYXBwaW5nIChkZWZhdWx0OiBwaXBlbGluZS1idWlsZGVyKScpXG4gICAgLy8gUG9zdC1pbnN0YWxsIGxvYWRzIOKAlCBlYWNoIG9wdC1pbiBzdGVwIGFsc28gYWRkcyBpdHMgZGVwbG95IGZvbGRlciB0byB0aGUgc3BhcnNlIGNsb25lLlxuICAgIC5vcHRpb24oJy0td2l0aC1wbHVnaW5zJywgJ1Bvc3QtaW5zdGFsbDogYnVpbGQgKyBsb2FkIHBsdWdpbnMgKGFkZHMgZGVwbG95L3BsdWdpbnMsIGRlcGxveS9jb2RlYnVpbGQpJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS13aXRoLWNvbXBsaWFuY2UnLCAnUG9zdC1pbnN0YWxsOiBsb2FkIHNhbXBsZSBjb21wbGlhbmNlIHJ1bGVzL3BvbGljaWVzIChhZGRzIGRlcGxveS9jb21wbGlhbmNlKScsIGZhbHNlKVxuICAgIC5vcHRpb24oJy0td2l0aC1zYW1wbGVzJywgJ1Bvc3QtaW5zdGFsbDogbG9hZCBzYW1wbGUgcGlwZWxpbmVzIChhZGRzIGRlcGxveS9zYW1wbGVzKScsIGZhbHNlKVxuICAgIC5vcHRpb24oJy0td2l0aC1hbGwnLCAnUG9zdC1pbnN0YWxsOiBwbHVnaW5zICsgY29tcGxpYW5jZSArIHNhbXBsZXMnLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLWJ1aWxkLWJvb3RzdHJhcCcsICdCdWlsZCArIHB1Ymxpc2ggdGhlIENvZGVCdWlsZCBib290c3RyYXAgaW1hZ2UgZHVyaW5nIHJlZ2lzdGVyIChhZGRzIGRlcGxveS9jb2RlYnVpbGQpJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS13aXRoLXNtb2tlLXRlc3QnLCAnUG9zdC1pbnN0YWxsOiByZWFkLW9ubHkgQVBJIHJlYWNoYWJpbGl0eSBjaGVjaycsIGZhbHNlKVxuICAgIC5vcHRpb24oJy0td2l0aC1ldmVudHMnLCAnUG9zdC1pbnN0YWxsIChBV1MpOiBldmVudCBpbmdlc3Rpb24gYnVuZGxlIOKAlCBzdG9yZS10b2tlbiAoSldUIOKGkiBTZWNyZXRzIE1hbmFnZXIpIHRoZW4gc2V0dXAtZXZlbnRzIChFdmVudEJyaWRnZS9MYW1iZGEpJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS1wb3N0LXN0ZXAgPGNtZD4nLCAnUnVuIGFuIGV4dHJhIGNvbW1hbmQgYWZ0ZXIgdGhlIGxvYWRzIChyZXBlYXRhYmxlLCBpbiBvcmRlciknLCBjb2xsZWN0U3RlcCwgW10pXG4gICAgLm9wdGlvbignLS1hZG1pbi1lbWFpbCA8YWRkcj4nLCAnQWRtaW4gZW1haWwgZm9yIG5vbi1pbnRlcmFjdGl2ZSByZWdpc3RlciAoc2V0cyBQTEFURk9STV9JREVOVElGSUVSKScpXG4gICAgLm9wdGlvbignLS1hZG1pbi1wYXNzd29yZCA8cHc+JywgJ0FkbWluIHBhc3N3b3JkIGZvciBub24taW50ZXJhY3RpdmUgcmVnaXN0ZXIgKHNldHMgUExBVEZPUk1fUEFTU1dPUkQpJylcbiAgICAub3B0aW9uKCctLWpzb24nLCAnUHJpbnQgdGhlIHBsYW4gYXMgSlNPTiBhbmQgZXhpdCBXSVRIT1VUIHJ1bm5pbmcgKHRoZSBvbmx5IG5vbi1leGVjdXRpbmcgbW9kZSDigJQgZm9yIHRvb2xpbmcvQ0kgaW5zcGVjdGlvbiknLCBmYWxzZSlcbiAgICAuYWN0aW9uKGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICBjb25zdCBleGVjdXRpb25JZCA9IHByaW50Q29tbWFuZEhlYWRlcignUHJvdmlzaW9uJyk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIDEuIEFzc2VtYmxlIHBhcmFtcyBmcm9tIGV4cGxpY2l0IGZsYWdzIChmbGFncyBhbHdheXMgd2luIG92ZXIgTkwgcGFyc2UpLlxuICAgICAgICBjb25zdCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgICAgICAgIHJlZ2lvbjogb3B0aW9ucy5yZWdpb24sXG4gICAgICAgICAgZG9tYWluOiBvcHRpb25zLmRvbWFpbixcbiAgICAgICAgICBob3N0ZWRab25lSWQ6IG9wdGlvbnMuaG9zdGVkWm9uZUlkLFxuICAgICAgICAgIGRlcGxveU1vZGU6IG9wdGlvbnMuZGVwbG95TW9kZSxcbiAgICAgICAgICBrZXlQYWlyOiBvcHRpb25zLmtleVBhaXIsXG4gICAgICAgICAgaW5zdGFuY2VUeXBlOiBvcHRpb25zLmluc3RhbmNlVHlwZSxcbiAgICAgICAgICBnaGNyVG9rZW46IG9wdGlvbnMuZ2hjclRva2VuLFxuICAgICAgICAgIC8vIENvbW1hbmRlciB0cmktc3RhdGVzIGBlbWFpbGA6IHVuZGVmaW5lZCAobmVpdGhlciksIHRydWUgKC0tZW1haWwpLFxuICAgICAgICAgIC8vIGZhbHNlICgtLW5vLWVtYWlsKS4gU0VTIGlzIG9uIGJ5IGRlZmF1bHQsIHNvIG9ubHkgLS1uby1lbWFpbCBpc1xuICAgICAgICAgIC8vIGxvYWQtYmVhcmluZyAoaXQgZW1pdHMgYC0tbm8tZW1haWxgIGludG8gdGhlIGRlcGxveSBjb21tYW5kKS5cbiAgICAgICAgICBlbWFpbDogb3B0aW9ucy5lbWFpbCA9PT0gdHJ1ZSxcbiAgICAgICAgICBub0VtYWlsOiBvcHRpb25zLmVtYWlsID09PSBmYWxzZSxcbiAgICAgICAgICBlbWFpbEZyb206IG9wdGlvbnMuZW1haWxGcm9tLFxuICAgICAgICAgIGVtYWlsRnJvbU5hbWU6IG9wdGlvbnMuZW1haWxGcm9tTmFtZSxcbiAgICAgICAgICBhbGVydEVtYWlsOiBvcHRpb25zLmFsZXJ0RW1haWwsXG4gICAgICAgICAgbm9DcmVhdGVTZXNJZGVudGl0eTogb3B0aW9ucy5za2lwU2VzSWRlbnRpdHksXG4gICAgICAgICAgLy8gRUMyIGF1dG8taW5pdCBpcyBPTiBCWSBERUZBVUxUIChzZXR1cC5zaC90ZW1wbGF0ZSBkZWZhdWx0IHRydWUpLiBMaWtlIGVtYWlsLFxuICAgICAgICAgIC8vIG9ubHkgdGhlIEVYUExJQ0lUIGZsYWcgaXMgZW1pdHRlZDogYC0tYXV0by1pbml0YCAocmVhZmZpcm0pIG9yIHRoZSBsb2FkLWJlYXJpbmdcbiAgICAgICAgICAvLyBgLS1uby1hdXRvLWluaXRgIChvcHQgb3V0KS4gVGhlIGVjMiB0YXJnZXQgc3BlYyBtYXBzIGJvdGguXG4gICAgICAgICAgYXV0b0luaXQ6IG9wdGlvbnMuYXV0b0luaXQgPT09IHRydWUsXG4gICAgICAgICAgbm9BdXRvSW5pdDogb3B0aW9ucy5hdXRvSW5pdCA9PT0gZmFsc2UsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGFpT3B0cyA9IHsgcHJvdmlkZXI6IG9wdGlvbnMuYWlQcm92aWRlciwgbW9kZWw6IG9wdGlvbnMubW9kZWwgfTtcblxuICAgICAgICAvLyBCb290c3RyYXAgKHNwYXJzZSBjbG9uZSkgKyBwb3N0LWluc3RhbGwgc2VsZWN0aW9ucy5cbiAgICAgICAgY29uc3Qgd2FudEJvb3RzdHJhcCA9IG9wdGlvbnMucmVwbyAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbnMucmVwbyAhPT0gZmFsc2U7XG4gICAgICAgIGNvbnN0IHdpdGhBbGwgPSBvcHRpb25zLndpdGhBbGwgPT09IHRydWU7XG4gICAgICAgIGNvbnN0IGFueUxvYWRGbGFnID0gd2l0aEFsbCB8fCBMT0FEX1NURVBTLnNvbWUoKHMpID0+IG9wdGlvbnNbcy5mbGFnXSA9PT0gdHJ1ZSk7XG4gICAgICAgIGxldCBlbmFibGVkTG9hZElkczogc3RyaW5nW10gPSBMT0FEX1NURVBTLmZpbHRlcigocykgPT4gd2l0aEFsbCB8fCBvcHRpb25zW3MuZmxhZ10gPT09IHRydWUpLm1hcCgocykgPT4gcy5pZCk7XG4gICAgICAgIC8vIFdpdGggbm8gLS13aXRoLSogZmxhZ3MsIGFuIGludGVyYWN0aXZlIHJ1biBvZmZlcnMgZWFjaCBsb2FkIOKAlCBidXQgQUZURVIgdGhlXG4gICAgICAgIC8vIGNsb25lLCBzbyB0aGUgcXVlc3Rpb25zIGNvbWUgb25jZSB5b3UndmUgYWdyZWVkIHRvIHByb2NlZWQgKG5vdCB1cCBmcm9udCkuXG4gICAgICAgIC8vIEVhY2ggcGlja2VkIGxvYWQncyBmb2xkZXIgaXMgdGhlbiBmZXRjaGVkIHZpYSBhbiBhZGRpdGl2ZSBzcGFyc2UgcmUtc3luYy5cbiAgICAgICAgLy8gRmxhZ3MgLyAtLXllcyAvIC0tanNvbiAvIG5vbi1pbnRlcmFjdGl2ZSBzaGVsbHMgc2tpcCB0aGUgcHJvbXB0cy5cbiAgICAgICAgY29uc3Qgd2lsbFByb21wdExvYWRzID0gIW9wdGlvbnMueWVzICYmICFvcHRpb25zLmpzb24gJiYgQm9vbGVhbihwcm9jZXNzLnN0ZGluLmlzVFRZKSAmJiAhYW55TG9hZEZsYWc7XG4gICAgICAgIGNvbnN0IHBvc3RTdGVwRmxhZ3MgPSB7XG4gICAgICAgICAgaW5pdDogb3B0aW9ucy5pbml0ICE9PSBmYWxzZSxcbiAgICAgICAgICAvLyBFQzIgYXV0by1pbml0IGlzIE9OIEJZIERFRkFVTFQgKG9mZiBvbmx5IHdpdGggLS1uby1hdXRvLWluaXQpLiByZXNvbHZlUG9zdFN0ZXBzXG4gICAgICAgICAgLy8gZHJvcHMgdGhlIHJlZ2lzdGVyIHN0ZXAgd2hlbiB0aGlzIGlzIHRydWUgQU5EIHRhcmdldCA9PT0gJ2VjMicsIHNvIGEgZGVmYXVsdCBlYzJcbiAgICAgICAgICAvLyBkZXBsb3kgZG9lc24ndCBhbHNvIHN1cmZhY2UgYSBtYW51YWwgcmVnaXN0ZXIgc3RlcC5cbiAgICAgICAgICBhdXRvSW5pdDogb3B0aW9ucy5hdXRvSW5pdCAhPT0gZmFsc2UsXG4gICAgICAgICAgYnVpbGRCb290c3RyYXA6IG9wdGlvbnMuYnVpbGRCb290c3RyYXAgPT09IHRydWUgfHwgZW5hYmxlZExvYWRJZHMuaW5jbHVkZXMoJ3BsdWdpbnMnKSxcbiAgICAgICAgICBzbW9rZVRlc3Q6IG9wdGlvbnMud2l0aFNtb2tlVGVzdCA9PT0gdHJ1ZSxcbiAgICAgICAgICBldmVudHM6IG9wdGlvbnMud2l0aEV2ZW50cyA9PT0gdHJ1ZSxcbiAgICAgICAgICBzdGVwczogKG9wdGlvbnMucG9zdFN0ZXAgPz8gW10pIGFzIHN0cmluZ1tdLFxuICAgICAgICB9O1xuICAgICAgICAvLyBBZG1pbiBjcmVkZW50aWFscyBmb3J3YXJkZWQgYXMgZW52IHNvIHJlZ2lzdGVyIHJ1bnMgbm9uLWludGVyYWN0aXZlbHkuXG4gICAgICAgIGNvbnN0IGFkbWluRW52OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5hZG1pbkVtYWlsID09PSAnc3RyaW5nJykgYWRtaW5FbnYuUExBVEZPUk1fSURFTlRJRklFUiA9IG9wdGlvbnMuYWRtaW5FbWFpbDtcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmFkbWluUGFzc3dvcmQgPT09ICdzdHJpbmcnKSBhZG1pbkVudi5QTEFURk9STV9QQVNTV09SRCA9IG9wdGlvbnMuYWRtaW5QYXNzd29yZDtcblxuICAgICAgICAvLyAyLiBPcHRpb25hbGx5IHBhcnNlIGEgbmF0dXJhbC1sYW5ndWFnZSBnb2FsIHRvIGZpbGwgYW55IEdBUFMgKGJlc3QtZWZmb3J0KS5cbiAgICAgICAgbGV0IHRhcmdldDogVGFyZ2V0SWQgfCB1bmRlZmluZWQgPSBpc1RhcmdldElkKG9wdGlvbnMudGFyZ2V0KSA/IG9wdGlvbnMudGFyZ2V0IDogdW5kZWZpbmVkO1xuICAgICAgICBpZiAob3B0aW9ucy5wcm9tcHQpIHtcbiAgICAgICAgICBpZiAoaXNBaUNvbmZpZ3VyZWQoYWlPcHRzKSkge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gYXdhaXQgcGFyc2VHb2FsKG9wdGlvbnMucHJvbXB0LCBhaU9wdHMpO1xuICAgICAgICAgICAgaWYgKHBhcnNlZCkge1xuICAgICAgICAgICAgICBpZiAoIXRhcmdldCAmJiBpc1RhcmdldElkKHBhcnNlZC50YXJnZXQpKSB0YXJnZXQgPSBwYXJzZWQudGFyZ2V0O1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhwYXJzZWQpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGsgIT09ICd0YXJnZXQnICYmIHBhcmFtc1trXSA9PT0gdW5kZWZpbmVkICYmIHYgIT09IHVuZGVmaW5lZCkgcGFyYW1zW2tdID0gdjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcmludFdhcm5pbmcoJ0EgLS1wcm9tcHQgd2FzIGdpdmVuIGJ1dCBubyBBSSBrZXkgaXMgc2V0IOKAlCBpZ25vcmluZyBpdCBhbmQgdXNpbmcgZmxhZ3Mgb25seS4gU2V0IEFOVEhST1BJQ19BUElfS0VZIChvciAtLWFpLXByb3ZpZGVyICsgaXRzIGtleSkuJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gMy4gT3B0aW9uYWwgZmFpbHVyZSBkaWFnbm9zaXMgKGluZGVwZW5kZW50IG9mIGEgZGVwbG95IHBsYW4pLlxuICAgICAgICBpZiAob3B0aW9ucy5kaWFnbm9zZSkge1xuICAgICAgICAgIGxldCBmYWlsdXJlVGV4dDogc3RyaW5nO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmYWlsdXJlVGV4dCA9IHJlYWRGaWxlU3luYyhvcHRpb25zLmRpYWdub3NlLCAndXRmLTgnKTtcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIHByaW50RXJyb3IoYENhbm5vdCByZWFkIC0tZGlhZ25vc2UgZmlsZTogJHtvcHRpb25zLmRpYWdub3NlfWApO1xuICAgICAgICAgICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGRpYWdub3NpcyA9IGlzQWlDb25maWd1cmVkKGFpT3B0cykgPyBhd2FpdCBkaWFnbm9zZUZhaWx1cmUoZmFpbHVyZVRleHQsIGFpT3B0cykgOiBudWxsO1xuICAgICAgICAgIC8vIFdpdGggLS1qc29uLCB0aGUgZGlhZ25vc2lzIElTIHRoZSBtYWNoaW5lLXJlYWRhYmxlIG91dHB1dCDigJQgZW1pdCBpdFxuICAgICAgICAgIC8vIGFsb25lIChkb24ndCBhbHNvIHByaW50IHRleHQsIHdoaWNoIHdvdWxkIGNvcnJ1cHQgdGhlIEpTT04gc3RyZWFtKS5cbiAgICAgICAgICBpZiAob3B0aW9ucy5qc29uKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh7IHN1Y2Nlc3M6IHRydWUsIGV4ZWN1dGlvbklkLCBkaWFnbm9zaXMgfSwgbnVsbCwgMikpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZGlhZ25vc2lzKSB7XG4gICAgICAgICAgICBwcmludFNlY3Rpb24oJ0ZhaWx1cmUgZGlhZ25vc2lzJyk7XG4gICAgICAgICAgICBwcmludEluZm8oZGlhZ25vc2lzKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcHJpbnRXYXJuaW5nKCdEaWFnbm9zaXMgdW5hdmFpbGFibGUgKG5vIEFJIGtleSBjb25maWd1cmVkIG9yIHRoZSBtb2RlbCBjb3VsZCBub3QgYmUgcmVhY2hlZCkuJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghdGFyZ2V0KSByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyA0LiBOZWVkIGEgdGFyZ2V0IHRvIGFzc2VtYmxlIGEgcGxhbi5cbiAgICAgICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgICBwcmludEVycm9yKGBObyB0YXJnZXQgc3BlY2lmaWVkLiBQYXNzIC0tdGFyZ2V0IDwke1RBUkdFVF9JRFMuam9pbignfCcpfT4gb3IgZGVzY3JpYmUgdGhlIGdvYWwgd2l0aCAtLXByb21wdC5gKTtcbiAgICAgICAgICBwcm9jZXNzLmV4aXRDb2RlID0gMTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzcGVjID0gVEFSR0VUU1t0YXJnZXRdO1xuICAgICAgICBsZXQgY3dkID0gcHJvY2Vzcy5jd2QoKTtcblxuICAgICAgICAvLyA0Yi4gVGVhcmRvd24gbW9kZSDigJQgdGhlIGRlc3Ryb3kgY291bnRlcnBhcnQgb2YgcHJvdmlzaW9uaW5nIChzZWUgcnVuVGVhcmRvd24pLlxuICAgICAgICBpZiAob3B0aW9ucy50ZWFyZG93bikge1xuICAgICAgICAgIGF3YWl0IHJ1blRlYXJkb3duKHNwZWMsIHRhcmdldCwgY3dkLCBleGVjdXRpb25JZCwgb3B0aW9ucyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTWFrZSBwcmV2aW91c2x5LWZldGNoZWQgc2luZ2xlLWJpbmFyeSB0b29scyAoZS5nLiB5cSkgdmlzaWJsZSB0byB0aGVcbiAgICAgICAgLy8gcHJlcmVxIGNoZWNrcyArIHRoZSBkZXBsb3kg4oCUIHRoZXkgbGl2ZSBpbiB0aGUgdG9vbHMgY2FjaGUsIG5vdCBvbiB0aGVcbiAgICAgICAgLy8gc3lzdGVtIFBBVEguIChCb3RoIGBoYXMoKWAgYW5kIHRoZSBkZXBsb3kncyBgYmFzaCAtbGNgIGluaGVyaXQgdGhpcy4pXG4gICAgICAgIHdpdGhUb29sc09uUGF0aCgpO1xuICAgICAgICBsZXQgcHJlcmVxcyA9IGNoZWNrUHJlcmVxcyh0YXJnZXQsIHsgYm9vdHN0cmFwOiB3YW50Qm9vdHN0cmFwLCB3aXRoUGx1Z2luczogd2lsbFByb21wdExvYWRzIHx8IGVuYWJsZWRMb2FkSWRzLmluY2x1ZGVzKCdwbHVnaW5zJykgfSk7XG4gICAgICAgIGNvbnN0IHsgY29tbWFuZCwgbWlzc2luZyB9ID0gYXNzZW1ibGVDb21tYW5kKHNwZWMsIHBhcmFtcyk7XG4gICAgICAgIGNvbnN0IHVybCA9IGRlcml2ZUhlYWx0aFVybCh0YXJnZXQsIHBhcmFtcyk7XG5cbiAgICAgICAgLy8gU3BhcnNlIGJvb3RzdHJhcCBjbG9uZSBjb21tYW5kIChjb21tb24gYmFzZSArIHRhcmdldCArIHNlbGVjdGVkIGxvYWRzKS5cbiAgICAgICAgLy8gSW50ZXJhY3RpdmUgbG9hZHMgYXJlIGNob3NlbiBBRlRFUiB0aGUgY2xvbmUsIHNvIHRoZSBjbG9uZSBzdGF5cyBtaW5pbWFsIOKAlFxuICAgICAgICAvLyBlYWNoIHBpY2tlZCBsb2FkJ3MgZm9sZGVyIGlzIGZldGNoZWQgdGhlbiB2aWEgYW4gYWRkaXRpdmUgc3BhcnNlIHJlLXN5bmMuXG4gICAgICAgIGNvbnN0IHNwYXJzZVBhdGhzID0gc3BhcnNlUGF0aHNGb3IodGFyZ2V0LCBlbmFibGVkTG9hZElkcyk7XG4gICAgICAgIGNvbnN0IGJvb3RzdHJhcCA9IHJlc29sdmVCb290c3RyYXAoXG4gICAgICAgICAgeyByZXBvOiB0eXBlb2Ygb3B0aW9ucy5yZXBvID09PSAnc3RyaW5nJyA/IG9wdGlvbnMucmVwbyA6IHVuZGVmaW5lZCwgcmVmOiBvcHRpb25zLnJlZiwgd29ya2Rpcjogb3B0aW9ucy53b3JrZGlyLCBmdWxsOiAhZ2l0U3VwcG9ydHNTcGFyc2VDaGVja291dCgpIH0sXG4gICAgICAgICAgc3BhcnNlUGF0aHMsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGJvb3RzdHJhcENtZCA9IHdhbnRCb290c3RyYXAgPyBib290c3RyYXBDb21tYW5kKGJvb3RzdHJhcCkgOiBudWxsO1xuXG4gICAgICAgIC8vIFJlc29sdmUgcG9zdC1pbnN0YWxsIHN0ZXBzIChyZWdpc3RlciDihpIgc21va2Ug4oaSIGV2ZW50cyDihpIgY3VzdG9tKS4gUmUtcmVzb2x2ZWRcbiAgICAgICAgLy8gYWZ0ZXIgdGhlIHBvc3QtY2xvbmUgbG9hZCBwcm9tcHRzIChzZWUgYmVsb3cpIHdoZW4gdGhvc2UgcnVuIGludGVyYWN0aXZlbHkuXG4gICAgICAgIGxldCB7IHN0ZXBzOiBwb3N0U3RlcHMsIHNraXBwZWQ6IHNraXBwZWRTdGVwcyB9ID0gcmVzb2x2ZVBvc3RTdGVwcyh7XG4gICAgICAgICAgdGFyZ2V0LFxuICAgICAgICAgIHVybCxcbiAgICAgICAgICByZWdpb246IHR5cGVvZiBwYXJhbXMucmVnaW9uID09PSAnc3RyaW5nJyA/IHBhcmFtcy5yZWdpb24gOiB1bmRlZmluZWQsXG4gICAgICAgICAgZW5hYmxlZExvYWRJZHMsXG4gICAgICAgICAgLi4ucG9zdFN0ZXBGbGFncyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuanNvbikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgICBleGVjdXRpb25JZCxcbiAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICAgIHByZXJlcXMsXG4gICAgICAgICAgICBwcmVyZXFzU2F0aXNmaWVkOiBwcmVyZXFzU2F0aXNmaWVkKHByZXJlcXMpLFxuICAgICAgICAgICAgbWlzc2luZ0lucHV0czogbWlzc2luZy5tYXAoKG0pID0+ICh7IGZsYWc6IG0uZmxhZywgZGVzY3JpcHRpb246IG0uZGVzY3JpcHRpb24gfSkpLFxuICAgICAgICAgICAgYm9vdHN0cmFwOiBib290c3RyYXBDbWQsXG4gICAgICAgICAgICBzcGFyc2VQYXRoczogd2FudEJvb3RzdHJhcCA/IHNwYXJzZVBhdGhzIDogbnVsbCxcbiAgICAgICAgICAgIGNvbW1hbmQsXG4gICAgICAgICAgICBwb3N0U3RlcHM6IHBvc3RTdGVwcy5tYXAoKHMpID0+ICh7IGlkOiBzLmlkLCBsYWJlbDogcy5sYWJlbCwgY29tbWFuZDogcy5jb21tYW5kIH0pKSxcbiAgICAgICAgICAgIHNraXBwZWRQb3N0U3RlcHM6IHNraXBwZWRTdGVwcyxcbiAgICAgICAgICB9LCBudWxsLCAyKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gNS4gUHJpbnQgdGhlIHBsYW4gKHNob3duIGJlZm9yZSB0aGUgZ2F0ZWQgZXhlY3V0aW9uIGJlbG93KS5cbiAgICAgICAgcHJpbnRTZWN0aW9uKGBQcm92aXNpb24gcGxhbiDigJQgJHtzcGVjLmxhYmVsfWApO1xuICAgICAgICBwcmludEtleVZhbHVlKHsgJ1RhcmdldCc6IHRhcmdldCwgJ0Jlc3QgZm9yJzogc3BlYy5iZXN0Rm9yLCAnQ29zdCc6IHNwZWMuY29zdCB9KTtcblxuICAgICAgICBwcmludFNlY3Rpb24oJ1ByZXJlcXVpc2l0ZXMnKTtcbiAgICAgICAgZm9yIChjb25zdCBjIG9mIHByZXJlcXMpIHByaW50SW5mbyhgJHtjLm9rID8gJ+KckycgOiAn4pyXJ30gJHtjLm5hbWV9IOKAlCAke2MuZGV0YWlsfWApO1xuICAgICAgICBpZiAoIXByZXJlcXNTYXRpc2ZpZWQocHJlcmVxcykpIHByaW50V2FybmluZygnUmVzb2x2ZSB0aGUgZmFpbGluZyBwcmVyZXF1aXNpdGVzIGFib3ZlIGJlZm9yZSBkZXBsb3lpbmcuJyk7XG5cbiAgICAgICAgaWYgKG1pc3NpbmcubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHByaW50U2VjdGlvbignTWlzc2luZyByZXF1aXJlZCBpbnB1dHMnKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IG0gb2YgbWlzc2luZykgcHJpbnRJbmZvKGAgIC0tJHttLmZsYWd9ICAoJHttLmRlc2NyaXB0aW9ufSlgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChib290c3RyYXBDbWQpIHtcbiAgICAgICAgICBwcmludFNlY3Rpb24oJ0Jvb3RzdHJhcCAoc3BhcnNlIGdpdCBjbG9uZSwgcnVucyBmaXJzdCknKTtcbiAgICAgICAgICBwcmludEluZm8oYENsb25lICR7Ym9vdHN0cmFwLnJlcG99IEAgJHtib290c3RyYXAucmVmfSDihpIgJHtib290c3RyYXAud29ya2Rpcn07IGZvbGRlcnM6ICR7c3BhcnNlUGF0aHMuam9pbignLCAnKX1gKTtcbiAgICAgICAgICBwcmludEluZm8oYm9vdHN0cmFwQ21kKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHByaW50U2VjdGlvbignQ29tbWFuZCB0byBydW4nKTtcbiAgICAgICAgcHJpbnRJbmZvKGNvbW1hbmQpO1xuXG4gICAgICAgIGlmIChwb3N0U3RlcHMubGVuZ3RoID4gMCB8fCBza2lwcGVkU3RlcHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHByaW50U2VjdGlvbignUG9zdC1pbnN0YWxsIHN0ZXBzJyk7XG4gICAgICAgICAgZm9yIChjb25zdCBzIG9mIHBvc3RTdGVwcykgcHJpbnRJbmZvKGDigKIgJHtzLmxhYmVsfVxcbiAgICAke3MuY29tbWFuZH1gKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IHMgb2Ygc2tpcHBlZFN0ZXBzKSBwcmludFdhcm5pbmcoYFNraXBwZWQgJHtzLmlkfTogJHtzLnJlYXNvbn1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDYuIEFueSBtaXNzaW5nIHJlcXVpcmVkIHByZXJlcSB0aGF0J3MgYSBzaW5nbGUgc3RhdGljIGJpbmFyeSAoZS5nLiB5cSlcbiAgICAgICAgLy8gY2FuIGJlIGZldGNoZWQgaW50byB0aGUgdG9vbHMgY2FjaGUgaW5zdGVhZCBvZiBhIHN5c3RlbSBpbnN0YWxsIOKAlCBub1xuICAgICAgICAvLyBicmV3L2FwdC4gT2ZmZXIgaXQsIHRoZW4gcmUtY2hlY2sgKHRoZSBjYWNoZSBkaXIgaXMgYWxyZWFkeSBvbiBQQVRIKS5cbiAgICAgICAgY29uc3QgZmV0Y2hhYmxlID0gcHJlcmVxcy5maWx0ZXIoKGMpID0+ICFjLm9rICYmIGMucmVxdWlyZWQgJiYgaXNGZXRjaGFibGUoYy5uYW1lKSk7XG4gICAgICAgIGlmIChmZXRjaGFibGUubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IG5hbWVzID0gZmV0Y2hhYmxlLm1hcCgoYykgPT4gYy5uYW1lKS5qb2luKCcsICcpO1xuICAgICAgICAgIGlmIChhd2FpdCBjb25maXJtKGBcXG4ke25hbWVzfSBub3QgaW5zdGFsbGVkIOKAlCBmZXRjaCB0aGUgb2ZmaWNpYWwgc3RhdGljIGJpbmFyeSBpbnRvICR7VE9PTFNfRElSfSAobm8gc3lzdGVtIGluc3RhbGwpP2AsIG9wdGlvbnMueWVzKSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBjIG9mIGZldGNoYWJsZSkge1xuICAgICAgICAgICAgICBwcmludEluZm8oYEZldGNoaW5nICR7Yy5uYW1lfeKApmApO1xuICAgICAgICAgICAgICBpZiAoIWZldGNoVG9vbChjLm5hbWUpKSBwcmludFdhcm5pbmcoYENvdWxkbid0IGZldGNoICR7Yy5uYW1lfSDigJQgaW5zdGFsbCBpdCBtYW51YWxseSBhbmQgcmUtcnVuLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcHJlcmVxcyA9IGNoZWNrUHJlcmVxcyh0YXJnZXQsIHsgYm9vdHN0cmFwOiB3YW50Qm9vdHN0cmFwLCB3aXRoUGx1Z2luczogd2lsbFByb21wdExvYWRzIHx8IGVuYWJsZWRMb2FkSWRzLmluY2x1ZGVzKCdwbHVnaW5zJykgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gN2IuIEdhdGVkIGV4ZWN1dGlvbi4gQ2hlY2sgcHJlcmVxcyAvIHJlcXVpcmVkIGlucHV0cyBmaXJzdCDigJQgdGhpcyBhbHNvXG4gICAgICAgIC8vIGNhdGNoZXMgYSBtaXNzaW5nIGBnaXRgIHdoZW4gYm9vdHN0cmFwcGluZy5cbiAgICAgICAgY29uc3QgYmxvY2tlZCA9IGV4ZWN1dGlvbkJsb2NrZWQocHJlcmVxcywgbWlzc2luZyk7XG4gICAgICAgIGlmIChibG9ja2VkKSB7XG4gICAgICAgICAgcHJpbnRFcnJvcihgQ2FuJ3Qgc3RhcnQganVzdCB5ZXQg4oCUICR7YmxvY2tlZH0uIFJlc29sdmUgdGhhdCBhbmQgcmUtcnVuLmApO1xuICAgICAgICAgIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENvbW1pdCBnYXRlIOKAlCBjb25maXJtIEJFRk9SRSBhbnkgc2lkZSBlZmZlY3QgKGNsb25lLCAuZW52LCBkZXBsb3kpIHNvIGEgXCJOb1wiXG4gICAgICAgIC8vIGxlYXZlcyBub3RoaW5nIGJlaGluZC4gVGhlIHBvcnQgY2hlY2sgKyBvcHRpb25hbCBsb2FkcyArIC5lbnYgYmVsb3cgYXJlIHBhcnQgb2ZcbiAgICAgICAgLy8gZXhlY3V0aW5nIHRoZSBhZ3JlZWQtdG8gcGxhbi5cbiAgICAgICAgaWYgKCEoYXdhaXQgY29uZmlybShgXFxuUHJvY2VlZCB3aXRoIHByb3Zpc2lvbmluZyAke3NwZWMubGFiZWx9P2AsIG9wdGlvbnMueWVzKSkpIHtcbiAgICAgICAgICBwcmludFdhcm5pbmcoJ05vIHByb2JsZW0g4oCUIG5vdGhpbmcgd2FzIGNoYW5nZWQuJyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gN2EvN2IuIFNwYXJzZS1jbG9uZSAoaWYgLS1yZXBvIG9yIGFjY2VwdGVkIGludGVyYWN0aXZlbHkpICsgbG9jYXRlIHRoZSBkZXBsb3lcbiAgICAgICAgLy8gZW50cnlwb2ludCwgcmVwb2ludGluZyBjd2QgaW50byB0aGUgY2xvbmUuIFNlZSBib290c3RyYXBBbmRMb2NhdGUuXG4gICAgICAgIGNvbnN0IGxvY2F0ZWQgPSBhd2FpdCBib290c3RyYXBBbmRMb2NhdGUoc3BlYywgYm9vdHN0cmFwLCBib290c3RyYXBDbWQsIHNwYXJzZVBhdGhzLCBjd2QsIG9wdGlvbnMpO1xuICAgICAgICBjd2QgPSBsb2NhdGVkLmN3ZDtcbiAgICAgICAgY29uc3QgYm9vdHN0cmFwcGVkID0gbG9jYXRlZC5ib290c3RyYXBwZWQ7XG4gICAgICAgIGlmICghbG9jYXRlZC5vaykgcmV0dXJuO1xuXG4gICAgICAgIC8vIEhvc3QtcG9ydCBwcmUtZmxpZ2h0IOKAlCBub3cgdGhhdCB0aGUgZGVwbG95IHNvdXJjZSBpcyBvbiBkaXNrIChwb3N0LWNsb25lKSxcbiAgICAgICAgLy8gZGVyaXZlIHRoZSBwb3J0cyBmcm9tIGl0IChjb21wb3NlIC8gc2V0dXAuc2gpIGFuZCBzdG9wIG9uIGEgZmF0YWwgY29uZmxpY3RcbiAgICAgICAgLy8gYmVmb3JlIGRlcGxveWluZy4gU2VlIHByZWZsaWdodFBvcnRzLlxuICAgICAgICBpZiAoIShhd2FpdCBwcmVmbGlnaHRQb3J0cyhzcGVjLCB0YXJnZXQsIGN3ZCkpKSB7XG4gICAgICAgICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT3B0LWluIGxvYWRzIOKAlCBvZmZlcmVkIEFGVEVSIHRoZSBjbG9uZSAoc2VlIHJlc29sdmVMb2Fkc0ludGVyYWN0aXZlbHkpOyBpdFxuICAgICAgICAvLyBwcm9tcHRzLCBhZGRpdGl2ZWx5IHNwYXJzZS1mZXRjaGVzIHRoZSBwaWNrZWQgZm9sZGVycywgYW5kIHJlLXJlc29sdmVzIHRoZVxuICAgICAgICAvLyBwb3N0LWluc3RhbGwgc3RlcHMgd2l0aCB0aGUgc2VsZWN0aW9ucy5cbiAgICAgICAgaWYgKHdpbGxQcm9tcHRMb2Fkcykge1xuICAgICAgICAgIGNvbnN0IGxvYWRlZCA9IGF3YWl0IHJlc29sdmVMb2Fkc0ludGVyYWN0aXZlbHkoXG4gICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICB0eXBlb2YgcGFyYW1zLnJlZ2lvbiA9PT0gJ3N0cmluZycgPyBwYXJhbXMucmVnaW9uIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgY3dkLFxuICAgICAgICAgICAgYm9vdHN0cmFwcGVkLFxuICAgICAgICAgICAgYm9vdHN0cmFwLFxuICAgICAgICAgICAgcG9zdFN0ZXBGbGFncyxcbiAgICAgICAgICApO1xuICAgICAgICAgIGVuYWJsZWRMb2FkSWRzID0gbG9hZGVkLmVuYWJsZWRMb2FkSWRzO1xuICAgICAgICAgIHBvc3RTdGVwcyA9IGxvYWRlZC5zdGVwcztcbiAgICAgICAgICBza2lwcGVkU3RlcHMgPSBsb2FkZWQuc2tpcHBlZDtcbiAgICAgICAgfVxuICAgICAgICAvLyBsb2NhbC9taW5pa3ViZSdzIHNldHVwLnNoIFJFUVVJUkVTIGEgYC5lbnZgIGFuZCBhYm9ydHMgd2l0aG91dCBpdCDigJQgY3JlYXRlXG4gICAgICAgIC8vIGl0IGZyb20gLmVudi5leGFtcGxlIHdpdGggZ2VuZXJhdGVkIHNlY3JldHMgc28gdGhlIGRlcGxveSBpcyBub24taW50ZXJhY3RpdmUuXG4gICAgICAgIC8vIGVjMi9mYXJnYXRlIGFsc28gc2hpcCBhIGAuZW52LmV4YW1wbGVgLCBidXQgdGhlaXIgc2V0dXAuc2ggbmV2ZXIgcmVhZHMgYVxuICAgICAgICAvLyBsb2NhbCBgLmVudmAgKHRoZSBpbnN0YW5jZSBoYW5kbGVzIGl0cyBvd247IEZhcmdhdGUgdXNlcyBTZWNyZXRzIE1hbmFnZXIgdmlhXG4gICAgICAgIC8vIGluaXQtc2VjcmV0cy5zaCksIHNvIHdlIG11c3QgTk9UIGdlbmVyYXRlIG9uZSBmb3IgdGhlbS5cbiAgICAgICAgaWYgKCh0YXJnZXQgPT09ICdsb2NhbCcgfHwgdGFyZ2V0ID09PSAnbWluaWt1YmUnKSAmJiBlbnZGaWxlTWlzc2luZyhjd2QsIHNwZWMuZGlyKSkge1xuICAgICAgICAgIGlmIChhd2FpdCBjb25maXJtKGBcXG4ke3NwZWMuZGlyfS8uZW52IG5vdCBmb3VuZCDigJQgY3JlYXRlIGl0IGZyb20gLmVudi5leGFtcGxlIChnZW5lcmF0ZXMgc2VjcmV0czsgZWRpdCBsYXRlciBmb3Igb3B0aW9uYWwgaW50ZWdyYXRpb25zIGxpa2UgT0F1dGgpP2AsIG9wdGlvbnMueWVzKSkge1xuICAgICAgICAgICAgY29uc3QgbiA9IGNyZWF0ZUVudkZpbGUoY3dkLCBzcGVjLmRpcik7XG4gICAgICAgICAgICBwcmludFN1Y2Nlc3MoYENyZWF0ZWQgJHtzcGVjLmRpcn0vLmVudiDigJQgJHtufSBzZWNyZXQocykgZ2VuZXJhdGVkLmApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcmludFdhcm5pbmcoJ0NvbnRpbnVpbmcgd2l0aG91dCAuZW52IOKAlCBzZXR1cC5zaCB3aWxsIGFib3J0IGlmIGl0IHN0YXlzIG1pc3NpbmcuJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIDdjLiBSdW4gdGhlIGRlcGxveSB3aXRoIGEgYm91bmRlZCBhdXRvLWZpeCArIHJldHJ5IGxvb3AgKHNlZSBydW5EZXBsb3lXaXRoUmV0cnkpLlxuICAgICAgICBjb25zdCB7IHN1Y2NlZWRlZCwgcnVuUGFyYW1zIH0gPSBhd2FpdCBydW5EZXBsb3lXaXRoUmV0cnkoc3BlYywgdXJsLCBjd2QsIHBhcmFtcywgYWlPcHRzLCBvcHRpb25zKTtcbiAgICAgICAgaWYgKCFzdWNjZWVkZWQpIHsgcHJvY2Vzcy5leGl0Q29kZSA9IDE7IHJldHVybjsgfVxuICAgICAgICBwcmludFN1Y2Nlc3MoJ0RlcGxveSBjb21tYW5kIGNvbXBsZXRlZC4nKTtcblxuICAgICAgICAvLyA3ZC4gU0VTIHBvc3QtZGVwbG95IGd1aWRhbmNlIChhc3luYyBES0lNICsgc2FuZGJveCArIGJvdW5jZSB0b3BpYykuXG4gICAgICAgIC8vIFNFUyBpcyBwcm92aXNpb25lZCBCWSBERUZBVUxUIG9uIEFXUyBkZXBsb3lzLCBzbyBzdXJmYWNlIHRoZSBndWlkYW5jZVxuICAgICAgICAvLyBmb3IgZWMyL2ZhcmdhdGUgdW5sZXNzIHRoZSBvcGVyYXRvciBvcHRlZCBvdXQgd2l0aCAtLW5vLWVtYWlsLlxuICAgICAgICBjb25zdCBzZXNQcm92aXNpb25lZCA9ICh0YXJnZXQgPT09ICdlYzInIHx8IHRhcmdldCA9PT0gJ2ZhcmdhdGUnKSAmJiBydW5QYXJhbXMubm9FbWFpbCAhPT0gdHJ1ZTtcbiAgICAgICAgaWYgKHNlc1Byb3Zpc2lvbmVkKSB7XG4gICAgICAgICAgcHJpbnRTZWN0aW9uKCdTRVMg4oCUIG5leHQgc3RlcHMnKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2Ygc2VzUG9zdERlcGxveUd1aWRhbmNlKCkpIHByaW50SW5mbyhg4oCiICR7bGluZX1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDdlLiBWZXJpZnkgaGVhbHRoIChDUkVBVEVfQ09NUExFVEUgIT0gc2VydmluZykuXG4gICAgICAgIGlmICh1cmwpIHtcbiAgICAgICAgICBwcmludFNlY3Rpb24oJ1ZlcmlmeWluZyBoZWFsdGgnKTtcbiAgICAgICAgICAvLyBNaW5pa3ViZSByZWFjaGVzIHRoZSBnYXRld2F5IHZpYSBhIGt1YmVjdGwgcG9ydC1mb3J3YXJkIHRoYXQgc2V0dXAuc2hcbiAgICAgICAgICAvLyBiYWNrZ3JvdW5kcyBhbmQgdGhhdCBjYW4gZGllL2ZhaWwgdG8gYmluZCDigJQgKHJlKXN0YXJ0IGl0IGJlZm9yZSBwb2xsaW5nXG4gICAgICAgICAgLy8gc28gd2UgZG9uJ3Qgc2l0IGF0IHRoZSBnYXRlIG9uIGEgZGVhZCBmb3J3YXJkIHdoaWxlIHRoZSBwb2RzIGFyZSBmaW5lLlxuICAgICAgICAgIGlmICh0YXJnZXQgPT09ICdtaW5pa3ViZScpIHtcbiAgICAgICAgICAgIGF3YWl0IGVuc3VyZU1pbmlrdWJlR2F0ZXdheSh1cmwsIHsgb25JbmZvOiAobSkgPT4gcHJpbnRJbmZvKG0pIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwcmludEluZm8oYFBvbGxpbmcgJHt1cmx9L2hlYWx0aCDigKZgKTtcbiAgICAgICAgICBjb25zdCBoZWFsdGggPSBhd2FpdCB3YWl0SGVhbHRoeSh1cmwsIHsgb25UaWNrOiAobSkgPT4gcHJpbnRJbmZvKG0pIH0pO1xuICAgICAgICAgIC8vIEdyZWVuIG9ubHkgd2hlbiBmdWxseSByZWFkeTsgYSBcImhlYWx0aCBPSyBidXQgL3JlYWR5IG5ldmVyIGNhbWVcIiBwcm9jZWVkLVxuICAgICAgICAgIC8vIGFueXdheSBzdGF0ZSBpcyBoZWFsdGh5OnRydWUgYnV0IGRlZ3JhZGVkIOKGkiB3YXJuIHNvIGl0IGRvZXNuJ3QgcmVhZCBhcyBkb25lLlxuICAgICAgICAgIChoZWFsdGguaGVhbHRoeSAmJiBoZWFsdGgucmVhZHkgPyBwcmludFN1Y2Nlc3MgOiBwcmludFdhcm5pbmcpKGAke2hlYWx0aC51cmx9IOKAlCAke2hlYWx0aC5kZXRhaWx9YCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyA3Zi4gUG9zdC1pbnN0YWxsIHN0ZXBzIChyZWdpc3RlciArIG9wdC1pbiBsb2Fkcywgc21va2UgdGVzdCwgZXZlbnRzLCBjdXN0b20pLlxuICAgICAgICAvLyBTZWUgcnVuUG9zdFN0ZXBzIOKAlCBpdCBzdXJmYWNlcyByZWdpc3RlciArIHRoZSBldmVudHMgYnVuZGxlIGFzIG1hbnVhbCBpbi1WUENcbiAgICAgICAgLy8gbmV4dC1zdGVwcyBvbiBFQzIvRmFyZ2F0ZSBpbnN0ZWFkIG9mIGF1dG8tcnVubmluZyAoYW5kIGZhaWxpbmcpIHRoZW0gbG9jYWxseS5cbiAgICAgICAgYXdhaXQgcnVuUG9zdFN0ZXBzKHBvc3RTdGVwcywgc2tpcHBlZFN0ZXBzLCB0YXJnZXQsIGN3ZCwgYWRtaW5FbnYsIHsgeWVzOiBvcHRpb25zLnllcywgYXV0b1J1bjogd2lsbFByb21wdExvYWRzLCBhdXRvSW5pdDogcG9zdFN0ZXBGbGFncy5hdXRvSW5pdCB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGhhbmRsZUVycm9yKGVycm9yLCBFUlJPUl9DT0RFUy5HRU5FUkFMLCB7XG4gICAgICAgICAgZGVidWc6IHByb2dyYW0ub3B0cygpLmRlYnVnLFxuICAgICAgICAgIGV4aXQ6IHRydWUsXG4gICAgICAgICAgY29udGV4dDogeyBjb21tYW5kOiAncHJvdmlzaW9uJywgZXhlY3V0aW9uSWQgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG59XG4iXX0=
751
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL3Byb3Zpc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQzlDLE9BQU8sS0FBSyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sS0FBSyxRQUFRLE1BQU0sd0JBQXdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQXNCLE1BQU0sdUJBQXVCLENBQUM7QUFDL0YsT0FBTyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDckYsT0FBTyxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN6RixPQUFPLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBbUMsTUFBTSx3QkFBd0IsQ0FBQztBQUMzRixPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSx5QkFBeUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzlHLE9BQU8sRUFDTCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFVBQVUsRUFDVixjQUFjLEVBQ2QsT0FBTyxFQUNQLFVBQVUsRUFDVixlQUFlLEdBR2hCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxXQUFXLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM5RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRTFIOzs7OztHQUtHO0FBQ0gsS0FBSyxVQUFVLEdBQUcsQ0FBQyxRQUFnQjtJQUNqQyxNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsZUFBZSxDQUFDLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3RGLElBQUksQ0FBQztRQUNILE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM5QyxDQUFDO1lBQVMsQ0FBQztRQUNULEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNiLENBQUM7QUFDSCxDQUFDO0FBRUQsaUZBQWlGO0FBQ2pGLEtBQUssVUFBVSxPQUFPLENBQUMsUUFBZ0IsRUFBRSxPQUFnQjtJQUN2RCxJQUFJLE9BQU87UUFBRSxPQUFPLElBQUksQ0FBQztJQUN6QixNQUFNLE1BQU0sR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsUUFBUSxTQUFTLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQy9ELE9BQU8sTUFBTSxLQUFLLEdBQUcsSUFBSSxNQUFNLEtBQUssS0FBSyxDQUFDO0FBQzVDLENBQUM7QUFFRCw4RUFBOEU7QUFDOUUsU0FBUyxXQUFXLENBQUMsS0FBYSxFQUFFLEdBQWE7SUFDL0MsT0FBTyxDQUFDLEdBQUcsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3pCLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsY0FBYyxDQUFDLElBQWdCLEVBQUUsTUFBZ0IsRUFBRSxHQUFXO0lBQ2xGLE1BQU0sS0FBSyxHQUFHLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbkQsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUM7UUFBRSxPQUFPLElBQUksQ0FBQztJQUNwQyxNQUFNLFVBQVUsR0FBRyxNQUFNLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQyxNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNyRCxZQUFZLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUNsQyxLQUFLLE1BQU0sQ0FBQyxJQUFJLFVBQVU7UUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUMvRyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ3BDLG1GQUFtRjtJQUNuRix1RUFBdUU7SUFDdkUsK0VBQStFO0lBQy9FLE1BQU0sS0FBSyxHQUFHLE1BQU0sS0FBSyxPQUFPLENBQUM7SUFDakMsK0VBQStFO0lBQy9FLGlGQUFpRjtJQUNqRiw2RUFBNkU7SUFDN0UsSUFBSSxLQUFLLElBQUksWUFBWSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUM3QyxZQUFZLENBQUMsS0FBSyxLQUFLLENBQUMsTUFBTSw2Q0FBNkMsSUFBSSxDQUFDLEtBQUssd0VBQXdFLENBQUMsQ0FBQztRQUMvSixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFDRCxNQUFNLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLHFDQUFxQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7SUFDdkcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsS0FBSztRQUN2QyxDQUFDLENBQUMsS0FBSyxJQUFJLDZFQUE2RTtRQUN4RixDQUFDLENBQUMsS0FBSyxJQUFJLDBKQUEwSixDQUFDLENBQUM7SUFDekssS0FBSyxNQUFNLENBQUMsSUFBSSxLQUFLO1FBQUUsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsT0FBTyxrQ0FBa0MsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDN0csSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDdkMsU0FBUyxDQUFDLG1JQUFtSSxDQUFDLENBQUM7SUFDakosQ0FBQztJQUNELE9BQU8sQ0FBQyxLQUFLLENBQUM7QUFDaEIsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLFdBQVcsQ0FDL0IsSUFBZ0IsRUFDaEIsTUFBZ0IsRUFDaEIsR0FBVyxFQUNYLFdBQW1CLEVBQ25CLElBQTZGO0lBRTdGLE1BQU0sRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUU7UUFDcEUsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO1FBQ3pCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtRQUNuQiwwRUFBMEU7UUFDMUUsMERBQTBEO1FBQzFELFNBQVMsRUFBRSxJQUFJO0tBQ2hCLENBQUMsQ0FBQztJQUNILElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6SixPQUFPO0lBQ1QsQ0FBQztJQUNELFlBQVksQ0FBQyxtQkFBbUIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDOUMsYUFBYSxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDeEYsWUFBWSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDL0IsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3ZCLElBQUksV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQy9CLE1BQU0sS0FBSyxHQUFHLE1BQU0sR0FBRyxDQUFDLGlDQUFpQyxNQUFNLHlCQUF5QixDQUFDLENBQUM7UUFDMUYsSUFBSSxLQUFLLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDckIsWUFBWSxDQUFDLGlHQUFpRyxDQUFDLENBQUM7WUFDaEgsT0FBTztRQUNULENBQUM7SUFDSCxDQUFDO1NBQU0sSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLE1BQU0sT0FBTyxDQUFDLG1FQUFtRSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ25KLFlBQVksQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO1FBQ2xELE9BQU87SUFDVCxDQUFDO0lBQ0QsWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzdCLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEdBQUcsTUFBTSxTQUFTLENBQUMsV0FBVyxFQUFFLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ2pGLElBQUksUUFBUSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ25CLFVBQVUsQ0FBQywyQkFBMkIsUUFBUSw0Q0FBNEMsQ0FBQyxDQUFDO1FBQzVGLE9BQU8sQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQ3JCLE9BQU87SUFDVCxDQUFDO0lBQ0QsWUFBWSxDQUFDLG9CQUFvQixDQUFDLENBQUM7QUFDckMsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxrQkFBa0IsQ0FDdEMsSUFBZ0IsRUFDaEIsR0FBa0IsRUFDbEIsR0FBVyxFQUNYLE1BQStCLEVBQy9CLE1BQTZDLEVBQzdDLElBQXlDO0lBRXpDLE1BQU0sV0FBVyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDM0UsSUFBSSxTQUFTLEdBQTRCLE1BQU0sQ0FBQztJQUNoRCxJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDdEIsS0FBSyxJQUFJLE9BQU8sR0FBRyxDQUFDLEVBQUUsT0FBTyxJQUFJLFdBQVcsRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDO1FBQ3hELE1BQU0sV0FBVyxHQUFHLGVBQWUsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQzlFLFlBQVksQ0FBQyxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixPQUFPLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMvRSxJQUFJLE9BQU8sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNsQixTQUFTLENBQUMsYUFBYSxJQUFJLENBQUMsS0FBSyxNQUFNLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDOUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN4QixTQUFTLENBQUMseUZBQXlGLENBQUMsQ0FBQztRQUN2RyxDQUFDO1FBQ0QsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLFNBQVMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDNUUsSUFBSSxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQUMsTUFBTTtRQUFDLENBQUM7UUFFNUMsVUFBVSxDQUFDLHlCQUF5QixJQUFJLElBQUksQ0FBQyxDQUFDO1FBQzlDLE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdEIsWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQzdCLEtBQUssTUFBTSxDQUFDLElBQUksTUFBTTtnQkFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQ3pFLENBQUM7UUFDRCxJQUFJLGNBQWMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQzNCLE1BQU0sU0FBUyxHQUFHLE1BQU0sZUFBZSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ3RGLElBQUksU0FBUyxFQUFFLENBQUM7Z0JBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUFDLENBQUM7UUFDckUsQ0FBQztRQUNELElBQUksT0FBTyxJQUFJLFdBQVc7WUFBRSxNQUFNO1FBRWxDLHVFQUF1RTtRQUN2RSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQyxRQUFRLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1RyxJQUFJLEdBQUcsRUFBRSxRQUFRLElBQUksTUFBTSxPQUFPLENBQUMsMkJBQTJCLEdBQUcsQ0FBQyxVQUFVLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDbkcsU0FBUyxHQUFHLEVBQUUsR0FBRyxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDckUsU0FBUztRQUNYLENBQUM7UUFDRCxtRkFBbUY7UUFDbkYsSUFBSSxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksTUFBTSxPQUFPLENBQUMscUVBQXFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3ZKLFNBQVM7UUFDWCxDQUFDO1FBQ0QsTUFBTTtJQUNSLENBQUM7SUFDRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxDQUFDO0FBQ2xDLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLFlBQVksQ0FDaEMsU0FBcUIsRUFDckIsWUFBMkIsRUFDM0IsTUFBZ0IsRUFDaEIsR0FBVyxFQUNYLFFBQWdDLEVBQ2hDLElBQThEO0lBRTlELGdGQUFnRjtJQUNoRiw4RUFBOEU7SUFDOUUsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLE1BQU0sS0FBSyxLQUFLLEVBQUUsQ0FBQztRQUN0QyxTQUFTLENBQUMsOEVBQThFLENBQUMsQ0FBQztRQUMxRixTQUFTLENBQUMsK0VBQStFLENBQUMsQ0FBQztRQUMzRixTQUFTLENBQUMsd0NBQXdDLENBQUMsQ0FBQztRQUNwRCxTQUFTLENBQUMsNkVBQTZFLENBQUMsQ0FBQztRQUN6RixTQUFTLENBQUMseUNBQXlDLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBQ0QsSUFBSSxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUM7UUFBRSxPQUFPO0lBQ25DLEtBQUssTUFBTSxDQUFDLElBQUksWUFBWTtRQUFFLFlBQVksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUNyRixNQUFNLFFBQVEsR0FBRyxDQUFDLEVBQVUsRUFBVyxFQUFFLENBQ3ZDLENBQUMsTUFBTSxLQUFLLEtBQUssSUFBSSxNQUFNLEtBQUssU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssVUFBVSxJQUFJLEVBQUUsS0FBSyxhQUFhLElBQUksRUFBRSxLQUFLLFFBQVEsQ0FBQyxDQUFDO0lBQy9HLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzFELE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN2RCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDdEIsSUFBSSxNQUFNLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDckIsZ0ZBQWdGO1lBQ2hGLCtFQUErRTtZQUMvRSw4RUFBOEU7WUFDOUUsNEVBQTRFO1lBQzVFLFNBQVMsQ0FBQyxvRkFBb0YsQ0FBQyxDQUFDO1lBQ2hHLFNBQVMsQ0FBQyxrRkFBa0YsQ0FBQyxDQUFDO1lBQzlGLFNBQVMsQ0FBQyx1R0FBdUcsQ0FBQyxDQUFDO1lBQ25ILFNBQVMsQ0FBQyxnRkFBZ0YsQ0FBQyxDQUFDO1lBQzVGLFNBQVMsQ0FBQyw0RUFBNEUsQ0FBQyxDQUFDO1lBQ3hGLEtBQUssTUFBTSxDQUFDLElBQUksTUFBTTtnQkFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUN0RCxDQUFDO2FBQU0sQ0FBQztZQUNOLFNBQVMsQ0FBQyxrREFBa0QsQ0FBQyxDQUFDO1lBQzlELEtBQUssTUFBTSxDQUFDLElBQUksTUFBTTtnQkFBRSxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ3JFLENBQUM7SUFDSCxDQUFDO0lBQ0QsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUM7UUFBRSxPQUFPO0lBQ2xDLHVGQUF1RjtJQUN2RixvRkFBb0Y7SUFDcEYsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLE1BQU0sT0FBTyxDQUFDLFNBQVMsUUFBUSxDQUFDLE1BQU0sNEJBQTRCLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzNHLElBQUksSUFBSSxDQUFDLE9BQU87WUFBRSxTQUFTLENBQUMsaUJBQWlCLFFBQVEsQ0FBQyxNQUFNLHFDQUFxQyxDQUFDLENBQUM7UUFDbkcsS0FBSyxNQUFNLENBQUMsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUN6QixZQUFZLENBQUMsY0FBYyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUN0QyxnRkFBZ0Y7WUFDaEYsb0VBQW9FO1lBQ3BFLE1BQU0sVUFBVSxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssVUFBVSxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssYUFBYSxDQUFDO1lBQ2pFLE1BQU0sR0FBRyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUMzRCw2RUFBNkU7WUFDN0Usa0ZBQWtGO1lBQ2xGLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxVQUFVLElBQUksQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQUM7WUFDakYsTUFBTSxLQUFLLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQztZQUNuQyxJQUFJLEtBQUs7Z0JBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sOENBQThDLENBQUMsQ0FBQzs7Z0JBQzVFLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDMUIsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDdkYsSUFBSSxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ2YsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFLENBQUM7b0JBQUMsVUFBVSxDQUFDLHVCQUF1QixDQUFDLENBQUM7b0JBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUFDLENBQUM7Z0JBQzVFLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsa0JBQWtCLElBQUksZ0VBQWdFLENBQUMsQ0FBQztnQkFDdkgsT0FBTyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7Z0JBQ3JCLE1BQU07WUFDUixDQUFDO1lBQ0QsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDNUIsQ0FBQztJQUNILENBQUM7U0FBTSxDQUFDO1FBQ04sU0FBUyxDQUFDLDJFQUEyRSxDQUFDLENBQUM7SUFDekYsQ0FBQztBQUNILENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLGtCQUFrQixDQUN0QyxJQUFnQixFQUNoQixTQUF3QixFQUN4QixZQUEyQixFQUMzQixXQUE4QixFQUM5QixRQUFnQixFQUNoQixJQUF1QjtJQUV2QixJQUFJLEdBQUcsR0FBRyxRQUFRLENBQUM7SUFDbkIsSUFBSSxZQUFZLEdBQUcsS0FBSyxDQUFDO0lBQ3pCLGtGQUFrRjtJQUNsRixtRkFBbUY7SUFDbkYsaUVBQWlFO0lBQ2pFLE1BQU0sY0FBYyxHQUFHLEtBQUssSUFBc0IsRUFBRTtRQUNsRCxNQUFNLEdBQUcsR0FBRyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN4QyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDMUIsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2YsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0sU0FBUyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUMvRCxJQUFJLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNmLFVBQVUsQ0FBQyxtQ0FBbUMsSUFBSSw4RUFBOEUsQ0FBQyxDQUFDO1lBQ2xJLE9BQU8sQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO1lBQ3JCLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0MsWUFBWSxHQUFHLElBQUksQ0FBQztRQUNwQixZQUFZLENBQUMsbUNBQW1DLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDdkQsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pFLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN0QixVQUFVLENBQUMsaUNBQWlDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdFQUFnRSxDQUFDLENBQUM7WUFDL0gsT0FBTyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7WUFDckIsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDLENBQUM7SUFFRixnRUFBZ0U7SUFDaEUsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNqQixTQUFTLENBQUMsdUJBQXVCLFNBQVMsQ0FBQyxJQUFJLE1BQU0sU0FBUyxDQUFDLEdBQUcsU0FBUyxTQUFTLENBQUMsT0FBTyxZQUFZLENBQUMsQ0FBQztRQUMxRyxJQUFJLENBQUMsQ0FBQyxNQUFNLE9BQU8sQ0FBQywwQkFBMEIsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNwRSxZQUFZLENBQUMsa0VBQWtFLENBQUMsQ0FBQztZQUNqRixPQUFPLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDMUMsQ0FBQztRQUNELElBQUksQ0FBQyxDQUFDLE1BQU0sY0FBYyxFQUFFLENBQUM7WUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDekUsQ0FBQztJQUVELGlGQUFpRjtJQUNqRixvRkFBb0Y7SUFDcEYsMENBQTBDO0lBQzFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNqQyxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7UUFDOUQsSUFBSSxDQUFDLFlBQVksSUFBSSxXQUFXLElBQUksWUFBWSxFQUFFLEVBQUUsQ0FBQztZQUNuRCxTQUFTLENBQUMsc0VBQXNFLElBQUksQ0FBQyxLQUFLLGtDQUFrQyxDQUFDLENBQUM7WUFDOUgsSUFBSSxNQUFNLE9BQU8sQ0FBQyxxQ0FBcUMsU0FBUyxDQUFDLE9BQU8sa0JBQWtCLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDbkcsSUFBSSxDQUFDLENBQUMsTUFBTSxjQUFjLEVBQUUsQ0FBQztvQkFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUM7WUFDekUsQ0FBQztRQUNILENBQUM7UUFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDakMsWUFBWSxDQUFDLHFCQUFxQixJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxVQUFVLFNBQVMsR0FBRyxHQUFHLENBQUMsQ0FBQztZQUM5RSxTQUFTLENBQUMsd0JBQXdCLENBQUMsQ0FBQztZQUNwQyxTQUFTLENBQUMsMkRBQTJELENBQUMsQ0FBQztZQUN2RSxTQUFTLENBQUMsaUVBQWlFLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLDJCQUEyQixFQUFFLENBQUMsQ0FBQztZQUNqSSxPQUFPLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztZQUNyQixPQUFPLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDMUMsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDekMsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSx5QkFBeUIsQ0FDN0MsTUFBZ0IsRUFDaEIsR0FBa0IsRUFDbEIsTUFBMEIsRUFDMUIsR0FBVyxFQUNYLFlBQXFCLEVBQ3JCLFNBQXdCLEVBQ3hCLGFBQWtJO0lBRWxJLE1BQU0sT0FBTyxHQUEyQjtRQUN0QyxPQUFPLEVBQUUsZUFBZTtRQUN4QixPQUFPLEVBQUUsd0JBQXdCO1FBQ2pDLFVBQVUsRUFBRSx3QkFBd0I7S0FDckMsQ0FBQztJQUNGLFlBQVksQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0lBQzVDLE1BQU0sTUFBTSxHQUFhLEVBQUUsQ0FBQztJQUM1QixLQUFLLE1BQU0sQ0FBQyxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQzNCLElBQUksTUFBTSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUM7WUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoRixDQUFDO0lBQ0QsbUZBQW1GO0lBQ25GLGdGQUFnRjtJQUNoRixpRkFBaUY7SUFDakYsaUZBQWlGO0lBQ2pGLCtEQUErRDtJQUMvRCxJQUFJLFlBQVksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNwQyxNQUFNLE1BQU0sR0FBRyxjQUFjLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVGLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN0QixZQUFZLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztZQUMvQyxNQUFNLE1BQU0sR0FBRywyQkFBMkIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMscUJBQXFCLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztZQUNySCxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbEIsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0sU0FBUyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUNsRSxJQUFJLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDZixZQUFZLENBQUMsa0JBQWtCLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGlGQUFpRixDQUFDLENBQUM7WUFDckksQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBQ0QsTUFBTSxRQUFRLEdBQUcsZ0JBQWdCLENBQUM7UUFDaEMsTUFBTTtRQUNOLEdBQUc7UUFDSCxNQUFNO1FBQ04sY0FBYyxFQUFFLE1BQU07UUFDdEIsR0FBRyxhQUFhO1FBQ2hCLGNBQWMsRUFBRSxhQUFhLENBQUMsY0FBYyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDO0tBQzNFLENBQUMsQ0FBQztJQUNILE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDdEYsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQVMsYUFBYSxDQUFDLElBQVksRUFBRSxJQUFnQixFQUFFLE1BQStCO0lBQ3BGLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQztJQUNmLEtBQUssTUFBTSxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUN6RCxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU07WUFBRSxTQUFTO1FBQzVCLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDO1lBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pGLENBQUM7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQUMsT0FBZ0I7SUFDeEMsT0FBTztTQUNKLE9BQU8sQ0FBQyxXQUFXLENBQUM7U0FDcEIsV0FBVyxDQUFDLDBJQUEwSSxDQUFDO1NBQ3ZKLE1BQU0sQ0FBQyx1QkFBdUIsRUFBRSxrQkFBa0IsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1NBQzNFLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxrRUFBa0UsQ0FBQztTQUNqRyxNQUFNLENBQUMsbUJBQW1CLEVBQUUsMEJBQTBCLENBQUM7U0FDdkQsTUFBTSxDQUFDLG1CQUFtQixFQUFFLDJDQUEyQyxDQUFDO1NBQ3hFLE1BQU0sQ0FBQyx1QkFBdUIsRUFBRSw4Q0FBOEMsQ0FBQztTQUMvRSxNQUFNLENBQUMsc0JBQXNCLEVBQUUsZ0NBQWdDLENBQUM7U0FDaEUsTUFBTSxDQUFDLG1CQUFtQixFQUFFLG9CQUFvQixDQUFDO1NBQ2pELE1BQU0sQ0FBQyx3QkFBd0IsRUFBRSx5QkFBeUIsQ0FBQztTQUMzRCxNQUFNLENBQUMsc0JBQXNCLEVBQUUsK0NBQStDLENBQUM7U0FDL0UsTUFBTSxDQUFDLFNBQVMsRUFBRSx3REFBd0QsQ0FBQztTQUMzRSxNQUFNLENBQUMsWUFBWSxFQUFFLGlFQUFpRSxDQUFDO1NBQ3ZGLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxrQkFBa0IsQ0FBQztTQUNqRCxNQUFNLENBQUMsMEJBQTBCLEVBQUUsdUJBQXVCLENBQUM7U0FDM0QsTUFBTSxDQUFDLHNCQUFzQixFQUFFLHdEQUF3RCxDQUFDO1NBQ3hGLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxzREFBc0QsQ0FBQztTQUNyRixNQUFNLENBQUMsMEJBQTBCLEVBQUUsbURBQW1ELENBQUM7U0FDdkYsTUFBTSxDQUFDLGlCQUFpQixFQUFFLGFBQWEsQ0FBQztTQUN4QyxNQUFNLENBQUMsbUJBQW1CLEVBQUUsd0VBQXdFLENBQUM7U0FDckcsTUFBTSxDQUFDLFdBQVcsRUFBRSxpRUFBaUUsRUFBRSxLQUFLLENBQUM7U0FDN0YsTUFBTSxDQUFDLGVBQWUsRUFBRSwyRUFBMkUsRUFBRSxHQUFHLENBQUM7U0FDekcsTUFBTSxDQUFDLFlBQVksRUFBRSw0R0FBNEcsRUFBRSxLQUFLLENBQUM7U0FDekksTUFBTSxDQUFDLHFCQUFxQixFQUFFLHlGQUF5RixDQUFDO1NBQ3hILE1BQU0sQ0FBQyxTQUFTLEVBQUUsMkVBQTJFLEVBQUUsS0FBSyxDQUFDO1NBQ3JHLE1BQU0sQ0FBQyxXQUFXLEVBQUUsa0RBQWtELENBQUM7U0FDdkUsTUFBTSxDQUFDLGFBQWEsRUFBRSx5R0FBeUcsQ0FBQztTQUNoSSxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsbUtBQW1LLENBQUM7UUFDOUwsdUVBQXVFO1NBQ3RFLE1BQU0sQ0FBQyxjQUFjLEVBQUUsNElBQTRJLENBQUM7U0FDcEssTUFBTSxDQUFDLGFBQWEsRUFBRSxnRUFBZ0UsQ0FBQztTQUN2RixNQUFNLENBQUMsaUJBQWlCLEVBQUUsbUZBQW1GLENBQUM7UUFDL0cseUZBQXlGO1NBQ3hGLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSw0RUFBNEUsRUFBRSxLQUFLLENBQUM7U0FDN0csTUFBTSxDQUFDLG1CQUFtQixFQUFFLDhFQUE4RSxFQUFFLEtBQUssQ0FBQztTQUNsSCxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsMkRBQTJELEVBQUUsS0FBSyxDQUFDO1NBQzVGLE1BQU0sQ0FBQyxZQUFZLEVBQUUsOENBQThDLEVBQUUsS0FBSyxDQUFDO1NBQzNFLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSx1RkFBdUYsRUFBRSxLQUFLLENBQUM7U0FDM0gsTUFBTSxDQUFDLG1CQUFtQixFQUFFLGdEQUFnRCxFQUFFLEtBQUssQ0FBQztTQUNwRixNQUFNLENBQUMsZUFBZSxFQUFFLHlIQUF5SCxFQUFFLEtBQUssQ0FBQztTQUN6SixNQUFNLENBQUMsbUJBQW1CLEVBQUUsNkRBQTZELEVBQUUsV0FBVyxFQUFFLEVBQUUsQ0FBQztTQUMzRyxNQUFNLENBQUMsc0JBQXNCLEVBQUUscUVBQXFFLENBQUM7U0FDckcsTUFBTSxDQUFDLHVCQUF1QixFQUFFLHNFQUFzRSxDQUFDO1NBQ3ZHLE1BQU0sQ0FBQyxRQUFRLEVBQUUsMkdBQTJHLEVBQUUsS0FBSyxDQUFDO1NBQ3BJLE1BQU0sQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7UUFDeEIsTUFBTSxXQUFXLEdBQUcsa0JBQWtCLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFcEQsSUFBSSxDQUFDO1lBQ0gsMkVBQTJFO1lBQzNFLE1BQU0sTUFBTSxHQUE0QjtnQkFDdEMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO2dCQUN0QixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07Z0JBQ3RCLFlBQVksRUFBRSxPQUFPLENBQUMsWUFBWTtnQkFDbEMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVO2dCQUM5QixPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87Z0JBQ3hCLFlBQVksRUFBRSxPQUFPLENBQUMsWUFBWTtnQkFDbEMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTO2dCQUM1QixxRUFBcUU7Z0JBQ3JFLGtFQUFrRTtnQkFDbEUsZ0VBQWdFO2dCQUNoRSxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssS0FBSyxJQUFJO2dCQUM3QixPQUFPLEVBQUUsT0FBTyxDQUFDLEtBQUssS0FBSyxLQUFLO2dCQUNoQyxTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVM7Z0JBQzVCLGFBQWEsRUFBRSxPQUFPLENBQUMsYUFBYTtnQkFDcEMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVO2dCQUM5QixtQkFBbUIsRUFBRSxPQUFPLENBQUMsZUFBZTtnQkFDNUMsK0VBQStFO2dCQUMvRSxrRkFBa0Y7Z0JBQ2xGLDZEQUE2RDtnQkFDN0QsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRLEtBQUssSUFBSTtnQkFDbkMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxRQUFRLEtBQUssS0FBSzthQUN2QyxDQUFDO1lBQ0YsTUFBTSxNQUFNLEdBQUcsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBRXRFLHNEQUFzRDtZQUN0RCxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQztZQUMzRSxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxLQUFLLElBQUksQ0FBQztZQUN6QyxNQUFNLFdBQVcsR0FBRyxPQUFPLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztZQUNoRixJQUFJLGNBQWMsR0FBYSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM5Ryw4RUFBOEU7WUFDOUUsNkVBQTZFO1lBQzdFLDRFQUE0RTtZQUM1RSxvRUFBb0U7WUFDcEUsSUFBSSxlQUFlLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUNwRyxNQUFNLGFBQWEsR0FBRztnQkFDcEIsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEtBQUssS0FBSztnQkFDNUIsa0ZBQWtGO2dCQUNsRixtRkFBbUY7Z0JBQ25GLHNEQUFzRDtnQkFDdEQsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRLEtBQUssS0FBSztnQkFDcEMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxjQUFjLEtBQUssSUFBSSxJQUFJLGNBQWMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDO2dCQUNyRixTQUFTLEVBQUUsT0FBTyxDQUFDLGFBQWEsS0FBSyxJQUFJO2dCQUN6QyxNQUFNLEVBQUUsT0FBTyxDQUFDLFVBQVUsS0FBSyxJQUFJO2dCQUNuQyxLQUFLLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBYTthQUM1QyxDQUFDO1lBQ0YseUVBQXlFO1lBQ3pFLE1BQU0sUUFBUSxHQUEyQixFQUFFLENBQUM7WUFDNUMsSUFBSSxPQUFPLE9BQU8sQ0FBQyxVQUFVLEtBQUssUUFBUTtnQkFBRSxRQUFRLENBQUMsbUJBQW1CLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQztZQUM5RixJQUFJLE9BQU8sT0FBTyxDQUFDLGFBQWEsS0FBSyxRQUFRO2dCQUFFLFFBQVEsQ0FBQyxpQkFBaUIsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDO1lBRWxHLDhFQUE4RTtZQUM5RSxJQUFJLE1BQU0sR0FBeUIsVUFBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQzNGLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNuQixJQUFJLGNBQWMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO29CQUMzQixNQUFNLE1BQU0sR0FBRyxNQUFNLFNBQVMsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO29CQUN2RCxJQUFJLE1BQU0sRUFBRSxDQUFDO3dCQUNYLElBQUksQ0FBQyxNQUFNLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7NEJBQUUsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7d0JBQ2pFLEtBQUssTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7NEJBQzVDLElBQUksQ0FBQyxLQUFLLFFBQVEsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxJQUFJLENBQUMsS0FBSyxTQUFTO2dDQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7d0JBQ2xGLENBQUM7b0JBQ0gsQ0FBQztnQkFDSCxDQUFDO3FCQUFNLENBQUM7b0JBQ04sWUFBWSxDQUFDLG1JQUFtSSxDQUFDLENBQUM7Z0JBQ3BKLENBQUM7WUFDSCxDQUFDO1lBRUQsZ0VBQWdFO1lBQ2hFLElBQUksT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNyQixJQUFJLFdBQW1CLENBQUM7Z0JBQ3hCLElBQUksQ0FBQztvQkFDSCxXQUFXLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQ3hELENBQUM7Z0JBQUMsTUFBTSxDQUFDO29CQUNQLFVBQVUsQ0FBQyxnQ0FBZ0MsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7b0JBQy9ELE9BQU8sQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO29CQUNyQixPQUFPO2dCQUNULENBQUM7Z0JBQ0QsTUFBTSxTQUFTLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLGVBQWUsQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDN0Ysc0VBQXNFO2dCQUN0RSxzRUFBc0U7Z0JBQ3RFLElBQUksT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO29CQUNqQixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDaEYsT0FBTztnQkFDVCxDQUFDO2dCQUNELElBQUksU0FBUyxFQUFFLENBQUM7b0JBQ2QsWUFBWSxDQUFDLG1CQUFtQixDQUFDLENBQUM7b0JBQ2xDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDdkIsQ0FBQztxQkFBTSxDQUFDO29CQUNOLFlBQVksQ0FBQyxpRkFBaUYsQ0FBQyxDQUFDO2dCQUNsRyxDQUFDO2dCQUNELElBQUksQ0FBQyxNQUFNO29CQUFFLE9BQU87WUFDdEIsQ0FBQztZQUVELG9GQUFvRjtZQUNwRixzRkFBc0Y7WUFDdEYsMEZBQTBGO1lBQzFGLElBQUksT0FBTyxDQUFDLFFBQVEsS0FBSyxLQUFLLElBQUksTUFBTSxLQUFLLEtBQUssRUFBRSxDQUFDO2dCQUNuRCxlQUFlLEdBQUcsS0FBSyxDQUFDO2dCQUN4QixjQUFjLEdBQUcsRUFBRSxDQUFDO1lBQ3RCLENBQUM7WUFFRCx1Q0FBdUM7WUFDdkMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNaLFVBQVUsQ0FBQyx1Q0FBdUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsdUNBQXVDLENBQUMsQ0FBQztnQkFDL0csT0FBTyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7Z0JBQ3JCLE9BQU87WUFDVCxDQUFDO1lBRUQsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzdCLElBQUksR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUV4QixpRkFBaUY7WUFDakYsSUFBSSxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ3JCLE1BQU0sV0FBVyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDM0QsT0FBTztZQUNULENBQUM7WUFFRCx1RUFBdUU7WUFDdkUsd0VBQXdFO1lBQ3hFLHdFQUF3RTtZQUN4RSxlQUFlLEVBQUUsQ0FBQztZQUNsQixJQUFJLE9BQU8sR0FBRyxZQUFZLENBQUMsTUFBTSxFQUFFLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsZUFBZSxJQUFJLGNBQWMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3JJLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsZUFBZSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztZQUMzRCxNQUFNLEdBQUcsR0FBRyxlQUFlLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBRTVDLDBFQUEwRTtZQUMxRSw2RUFBNkU7WUFDN0UsNEVBQTRFO1lBQzVFLE1BQU0sV0FBVyxHQUFHLGNBQWMsQ0FBQyxNQUFNLEVBQUUsY0FBYyxDQUFDLENBQUM7WUFDM0QsTUFBTSxTQUFTLEdBQUcsZ0JBQWdCLENBQ2hDLEVBQUUsSUFBSSxFQUFFLE9BQU8sT0FBTyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyx5QkFBeUIsRUFBRSxFQUFFLEVBQ3JKLFdBQVcsQ0FDWixDQUFDO1lBQ0YsTUFBTSxZQUFZLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBRXhFLCtFQUErRTtZQUMvRSw4RUFBOEU7WUFDOUUsSUFBSSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxHQUFHLGdCQUFnQixDQUFDO2dCQUNqRSxNQUFNO2dCQUNOLEdBQUc7Z0JBQ0gsTUFBTSxFQUFFLE9BQU8sTUFBTSxDQUFDLE1BQU0sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVM7Z0JBQ3JFLGNBQWM7Z0JBQ2QsR0FBRyxhQUFhO2FBQ2pCLENBQUMsQ0FBQztZQUVILElBQUksT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNqQixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7b0JBQ3pCLE9BQU8sRUFBRSxJQUFJO29CQUNiLFdBQVc7b0JBQ1gsTUFBTTtvQkFDTixPQUFPO29CQUNQLGdCQUFnQixFQUFFLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztvQkFDM0MsYUFBYSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7b0JBQ2pGLFNBQVMsRUFBRSxZQUFZO29CQUN2QixXQUFXLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUk7b0JBQy9DLE9BQU87b0JBQ1AsU0FBUyxFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7b0JBQ25GLGdCQUFnQixFQUFFLFlBQVk7aUJBQy9CLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2IsT0FBTztZQUNULENBQUM7WUFFRCw4REFBOEQ7WUFDOUQsWUFBWSxDQUFDLG9CQUFvQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUMvQyxhQUFhLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUVqRixZQUFZLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDOUIsS0FBSyxNQUFNLENBQUMsSUFBSSxPQUFPO2dCQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDbEYsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztnQkFBRSxZQUFZLENBQUMsMkRBQTJELENBQUMsQ0FBQztZQUUxRyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZCLFlBQVksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO2dCQUN4QyxLQUFLLE1BQU0sQ0FBQyxJQUFJLE9BQU87b0JBQUUsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztZQUMxRSxDQUFDO1lBRUQsSUFBSSxZQUFZLEVBQUUsQ0FBQztnQkFDakIsWUFBWSxDQUFDLDBDQUEwQyxDQUFDLENBQUM7Z0JBQ3pELFNBQVMsQ0FBQyxTQUFTLFNBQVMsQ0FBQyxJQUFJLE1BQU0sU0FBUyxDQUFDLEdBQUcsTUFBTSxTQUFTLENBQUMsT0FBTyxjQUFjLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNuSCxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDMUIsQ0FBQztZQUVELFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQy9CLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUVuQixJQUFJLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3BELFlBQVksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO2dCQUNuQyxLQUFLLE1BQU0sQ0FBQyxJQUFJLFNBQVM7b0JBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDdkUsS0FBSyxNQUFNLENBQUMsSUFBSSxZQUFZO29CQUFFLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDN0UsQ0FBQztZQUVELHlFQUF5RTtZQUN6RSx1RUFBdUU7WUFDdkUsd0VBQXdFO1lBQ3hFLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsUUFBUSxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNwRixJQUFJLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3pCLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3RELElBQUksTUFBTSxPQUFPLENBQUMsS0FBSyxLQUFLLDBEQUEwRCxTQUFTLHVCQUF1QixFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUNySSxLQUFLLE1BQU0sQ0FBQyxJQUFJLFNBQVMsRUFBRSxDQUFDO3dCQUMxQixTQUFTLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQzt3QkFDakMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDOzRCQUFFLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLElBQUksb0NBQW9DLENBQUMsQ0FBQztvQkFDckcsQ0FBQztvQkFDRCxPQUFPLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLGVBQWUsSUFBSSxjQUFjLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDbkksQ0FBQztZQUNILENBQUM7WUFFRCx5RUFBeUU7WUFDekUsOENBQThDO1lBQzlDLE1BQU0sT0FBTyxHQUFHLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNuRCxJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUNaLFVBQVUsQ0FBQywwQkFBMEIsT0FBTyw0QkFBNEIsQ0FBQyxDQUFDO2dCQUMxRSxPQUFPLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztnQkFDckIsT0FBTztZQUNULENBQUM7WUFFRCwrRUFBK0U7WUFDL0Usa0ZBQWtGO1lBQ2xGLGdDQUFnQztZQUNoQyxJQUFJLENBQUMsQ0FBQyxNQUFNLE9BQU8sQ0FBQywrQkFBK0IsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ2hGLFlBQVksQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO2dCQUNsRCxPQUFPO1lBQ1QsQ0FBQztZQUVELGdGQUFnRjtZQUNoRixxRUFBcUU7WUFDckUsTUFBTSxPQUFPLEdBQUcsTUFBTSxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ25HLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDO1lBQ2xCLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUM7WUFDMUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUFFLE9BQU87WUFFeEIsNkVBQTZFO1lBQzdFLDZFQUE2RTtZQUM3RSx3Q0FBd0M7WUFDeEMsSUFBSSxDQUFDLENBQUMsTUFBTSxjQUFjLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQy9DLE9BQU8sQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO2dCQUNyQixPQUFPO1lBQ1QsQ0FBQztZQUVELDZFQUE2RTtZQUM3RSw2RUFBNkU7WUFDN0UsMENBQTBDO1lBQzFDLElBQUksZUFBZSxFQUFFLENBQUM7Z0JBQ3BCLE1BQU0sTUFBTSxHQUFHLE1BQU0seUJBQXlCLENBQzVDLE1BQU0sRUFDTixHQUFHLEVBQ0gsT0FBTyxNQUFNLENBQUMsTUFBTSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUM3RCxHQUFHLEVBQ0gsWUFBWSxFQUNaLFNBQVMsRUFDVCxhQUFhLENBQ2QsQ0FBQztnQkFDRixjQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQztnQkFDdkMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7Z0JBQ3pCLFlBQVksR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDO1lBQ2hDLENBQUM7WUFDRCw2RUFBNkU7WUFDN0UsZ0ZBQWdGO1lBQ2hGLDJFQUEyRTtZQUMzRSwrRUFBK0U7WUFDL0UsMERBQTBEO1lBQzFELElBQUksQ0FBQyxNQUFNLEtBQUssT0FBTyxJQUFJLE1BQU0sS0FBSyxVQUFVLENBQUMsSUFBSSxjQUFjLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNuRixJQUFJLE1BQU0sT0FBTyxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUcscUhBQXFILEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ25LLE1BQU0sQ0FBQyxHQUFHLGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUN2QyxZQUFZLENBQUMsV0FBVyxJQUFJLENBQUMsR0FBRyxXQUFXLENBQUMsdUJBQXVCLENBQUMsQ0FBQztnQkFDdkUsQ0FBQztxQkFBTSxDQUFDO29CQUNOLFlBQVksQ0FBQyxvRUFBb0UsQ0FBQyxDQUFDO2dCQUNyRixDQUFDO1lBQ0gsQ0FBQztZQUNELG9GQUFvRjtZQUNwRixNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLE1BQU0sa0JBQWtCLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNuRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQUMsT0FBTyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7Z0JBQUMsT0FBTztZQUFDLENBQUM7WUFDakQsWUFBWSxDQUFDLDJCQUEyQixDQUFDLENBQUM7WUFFMUMsc0VBQXNFO1lBQ3RFLHdFQUF3RTtZQUN4RSxpRUFBaUU7WUFDakUsTUFBTSxjQUFjLEdBQUcsQ0FBQyxNQUFNLEtBQUssS0FBSyxJQUFJLE1BQU0sS0FBSyxTQUFTLENBQUMsSUFBSSxTQUFTLENBQUMsT0FBTyxLQUFLLElBQUksQ0FBQztZQUNoRyxJQUFJLGNBQWMsRUFBRSxDQUFDO2dCQUNuQixZQUFZLENBQUMsa0JBQWtCLENBQUMsQ0FBQztnQkFDakMsS0FBSyxNQUFNLElBQUksSUFBSSxxQkFBcUIsRUFBRTtvQkFBRSxTQUFTLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ3JFLENBQUM7WUFFRCxrREFBa0Q7WUFDbEQsSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFDUixZQUFZLENBQUMsa0JBQWtCLENBQUMsQ0FBQztnQkFDakMsd0VBQXdFO2dCQUN4RSwwRUFBMEU7Z0JBQzFFLHlFQUF5RTtnQkFDekUsSUFBSSxNQUFNLEtBQUssVUFBVSxFQUFFLENBQUM7b0JBQzFCLE1BQU0scUJBQXFCLENBQUMsR0FBRyxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNwRSxDQUFDO2dCQUNELFNBQVMsQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDLENBQUM7Z0JBQ3JDLE1BQU0sTUFBTSxHQUFHLE1BQU0sV0FBVyxDQUFDLEdBQUcsRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDdkUsNEVBQTRFO2dCQUM1RSwrRUFBK0U7Z0JBQy9FLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsTUFBTSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUNyRyxDQUFDO1lBRUQsZ0ZBQWdGO1lBQ2hGLCtFQUErRTtZQUMvRSxnRkFBZ0Y7WUFDaEYsTUFBTSxZQUFZLENBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZKLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsV0FBVyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsT0FBTyxFQUFFO2dCQUN0QyxLQUFLLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUs7Z0JBQzNCLElBQUksRUFBRSxJQUFJO2dCQUNWLE9BQU8sRUFBRSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFO2FBQy9DLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgcmVhZEZpbGVTeW5jLCBleGlzdHNTeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0ICogYXMgcmVhZGxpbmUgZnJvbSAnbm9kZTpyZWFkbGluZS9wcm9taXNlcyc7XG5pbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCB7IGRpYWdub3NlRmFpbHVyZSwgaXNBaUNvbmZpZ3VyZWQsIHBhcnNlR29hbCB9IGZyb20gJy4uL2FnZW50L2FpLmpzJztcbmltcG9ydCB7IGJvb3RzdHJhcENvbW1hbmQsIHJlc29sdmVCb290c3RyYXAsIHR5cGUgQm9vdHN0cmFwU3BlYyB9IGZyb20gJy4uL2FnZW50L2Jvb3RzdHJhcC5qcyc7XG5pbXBvcnQgeyBjcmVhdGVFbnZGaWxlLCBlbnZGaWxlTWlzc2luZyB9IGZyb20gJy4uL2FnZW50L2Vudi1maWxlLmpzJztcbmltcG9ydCB7IGVudHJ5cG9pbnRFeGlzdHMsIGV4ZWN1dGlvbkJsb2NrZWQsIHJ1blNjcmlwdCB9IGZyb20gJy4uL2FnZW50L2V4ZWN1dG9yLmpzJztcbmltcG9ydCB7IGRlcml2ZUhlYWx0aFVybCwgd2FpdEhlYWx0aHksIGVuc3VyZU1pbmlrdWJlR2F0ZXdheSB9IGZyb20gJy4uL2FnZW50L2hlYWx0aC5qcyc7XG5pbXBvcnQgeyBjaGVja0hvc3RQb3J0cywgZGlzY292ZXJIb3N0UG9ydHMsIHN0YWNrUnVubmluZyB9IGZyb20gJy4uL2FnZW50L3BvcnRzLmpzJztcbmltcG9ydCB7IHJlc29sdmVQb3N0U3RlcHMsIHR5cGUgUG9zdFN0ZXAsIHR5cGUgU2tpcHBlZFN0ZXAgfSBmcm9tICcuLi9hZ2VudC9wb3N0LXN0ZXBzLmpzJztcbmltcG9ydCB7IGNoZWNrUHJlcmVxcywgZ2l0QXZhaWxhYmxlLCBnaXRTdXBwb3J0c1NwYXJzZUNoZWNrb3V0LCBwcmVyZXFzU2F0aXNmaWVkIH0gZnJvbSAnLi4vYWdlbnQvcHJlcmVxcy5qcyc7XG5pbXBvcnQge1xuICBhc3NlbWJsZUNvbW1hbmQsXG4gIGlzVGFyZ2V0SWQsXG4gIExPQURfU1RFUFMsXG4gIHNwYXJzZVBhdGhzRm9yLFxuICBUQVJHRVRTLFxuICBUQVJHRVRfSURTLFxuICB0ZWFyZG93bkNvbW1hbmQsXG4gIHR5cGUgVGFyZ2V0SWQsXG4gIHR5cGUgVGFyZ2V0U3BlYyxcbn0gZnJvbSAnLi4vYWdlbnQvdGFyZ2V0cy5qcyc7XG5pbXBvcnQgeyBUT09MU19ESVIsIGZldGNoVG9vbCwgaXNGZXRjaGFibGUsIHdpdGhUb29sc09uUGF0aCB9IGZyb20gJy4uL2FnZW50L3Rvb2xzLmpzJztcbmltcG9ydCB7IG1hdGNoSXNzdWVzLCBzZXNQb3N0RGVwbG95R3VpZGFuY2UgfSBmcm9tICcuLi9hZ2VudC90cm91Ymxlc2hvb3QuanMnO1xuaW1wb3J0IHsgcHJpbnRDb21tYW5kSGVhZGVyIH0gZnJvbSAnLi4vdXRpbHMvY29tbWFuZC11dGlscy5qcyc7XG5pbXBvcnQgeyBFUlJPUl9DT0RFUywgaGFuZGxlRXJyb3IgfSBmcm9tICcuLi91dGlscy9lcnJvci1oYW5kbGVyLmpzJztcbmltcG9ydCB7IHByaW50U2VjdGlvbiwgcHJpbnRLZXlWYWx1ZSwgcHJpbnRJbmZvLCBwcmludFdhcm5pbmcsIHByaW50RXJyb3IsIHByaW50U3VjY2VzcyB9IGZyb20gJy4uL3V0aWxzL291dHB1dC11dGlscy5qcyc7XG5cbi8qKlxuICogUmVhZCBvbmUgbGluZSBvZiB0cmltbWVkIGlucHV0IGZyb20gdGhlIHRlcm1pbmFsLCBvd25pbmcgdGhlIHJlYWRsaW5lXG4gKiBsaWZlY3ljbGUuIFVzZWQgZGlyZWN0bHkgZm9yIHRoZSBkZXN0cnVjdGl2ZSB0ZWFyZG93biBnYXRlIChhIHkvTiBpcyB0b28gZWFzeVxuICogdG8gZmF0LWZpbmdlciwgc28gd2UgcmVxdWlyZSB0aGUgb3BlcmF0b3IgdG8gVFlQRSB0aGUgdGFyZ2V0IGlkIGJhY2spLCBhbmQgYXNcbiAqIHRoZSBiYXNpcyBmb3IgYGNvbmZpcm1gLiBEZWxpYmVyYXRlbHkgaGFzIG5vIGF1dG8tYWNjZXB0LlxuICovXG5hc3luYyBmdW5jdGlvbiBhc2socXVlc3Rpb246IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHJsID0gcmVhZGxpbmUuY3JlYXRlSW50ZXJmYWNlKHsgaW5wdXQ6IHByb2Nlc3Muc3RkaW4sIG91dHB1dDogcHJvY2Vzcy5zdGRvdXQgfSk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIChhd2FpdCBybC5xdWVzdGlvbihxdWVzdGlvbikpLnRyaW0oKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBybC5jbG9zZSgpO1xuICB9XG59XG5cbi8qKiBJbnRlcmFjdGl2ZSB5L04gY29uZmlybWF0aW9uOyBhdXRvLXRydWUgd2hlbiBgYXV0b1llc2AgKHRoZSBgLS15ZXNgIGZsYWcpLiAqL1xuYXN5bmMgZnVuY3Rpb24gY29uZmlybShxdWVzdGlvbjogc3RyaW5nLCBhdXRvWWVzOiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGlmIChhdXRvWWVzKSByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgYW5zd2VyID0gKGF3YWl0IGFzayhgJHtxdWVzdGlvbn0gW3kvTl0gYCkpLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiBhbnN3ZXIgPT09ICd5JyB8fCBhbnN3ZXIgPT09ICd5ZXMnO1xufVxuXG4vKiogQ29tbWFuZGVyIGNvbGxlY3RvcjogYWNjdW11bGF0ZSByZXBlYXRlZCBgLS1wb3N0LXN0ZXBgIHZhbHVlcyBpbiBvcmRlci4gKi9cbmZ1bmN0aW9uIGNvbGxlY3RTdGVwKHZhbHVlOiBzdHJpbmcsIGFjYzogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gIHJldHVybiBbLi4uYWNjLCB2YWx1ZV07XG59XG5cbi8qKlxuICogSG9zdC1wb3J0IHByZS1mbGlnaHQgKGxvY2FsL21pbmlrdWJlKS4gUG9ydHMgYXJlIERFUklWRUQgZnJvbSB0aGUgdGFyZ2V0J3MgY2xvbmVkXG4gKiBkZXBsb3kgc291cmNlIChjb21wb3NlIC8gc2V0dXAuc2gpIHNvIHRoZSBsaXN0IGNhbid0IGRyaWZ0IOKAlCBoZW5jZSB0aGlzIHJ1bnMgQUZURVJcbiAqIHRoZSBjbG9uZS4gQSB0YWtlbiBwb3J0IG1ha2VzIGEgY29udGFpbmVyL2ZvcndhcmQgZmFpbCB0byBiaW5kIG1pZC1kZXBsb3kgKGZvciB0aGVcbiAqIGdhdGV3YXksIGEgc2lsZW50IHVucmVhY2hhYmxlIGhhbmcpLiBQcmludHMgYSDinJMv4pyXIHN1bW1hcnkgYW5kIHJldHVybnMgZmFsc2UgT05MWVxuICogd2hlbiB0aGUgY2FsbGVyIG11c3QgQUJPUlQgKGEgZmF0YWwgbG9jYWwgY29uZmxpY3QpLiBtaW5pa3ViZSBwb3J0cyBhcmUgbWFuYWdlZFxuICogZm9yd2FyZHMgKHNldHVwLnNoIHBraWxscy9yZXN0YXJ0cyB0aGVtKSwgc28gYSBjb25mbGljdCB0aGVyZSB3YXJucyBidXQgcHJvY2VlZHMuXG4gKiBSZW1vdGUgdGFyZ2V0cyAoZWMyL2ZhcmdhdGUpIGJpbmQgbm90aGluZyBsb2NhbGx5IOKGkiByZXR1cm5zIHRydWUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcmVmbGlnaHRQb3J0cyhzcGVjOiBUYXJnZXRTcGVjLCB0YXJnZXQ6IFRhcmdldElkLCBjd2Q6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCBwb3J0cyA9IGRpc2NvdmVySG9zdFBvcnRzKHRhcmdldCwgY3dkLCBzcGVjKTtcbiAgaWYgKHBvcnRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRydWU7XG4gIGNvbnN0IHBvcnRDaGVja3MgPSBhd2FpdCBjaGVja0hvc3RQb3J0cyhwb3J0cyk7XG4gIGNvbnN0IHRha2VuID0gcG9ydENoZWNrcy5maWx0ZXIoKGMpID0+ICFjLmF2YWlsYWJsZSk7XG4gIHByaW50U2VjdGlvbignUG9ydCBhdmFpbGFiaWxpdHknKTtcbiAgZm9yIChjb25zdCBjIG9mIHBvcnRDaGVja3MpIHByaW50SW5mbyhgJHtjLmF2YWlsYWJsZSA/ICfinJMnIDogJ+Kclyd9ICR7U3RyaW5nKGMucG9ydCkucGFkRW5kKDUpfSDigJQgJHtjLnNlcnZpY2V9YCk7XG4gIGlmICh0YWtlbi5sZW5ndGggPT09IDApIHJldHVybiB0cnVlO1xuICAvLyBsb2NhbCBQVUJMSVNIRVMgdGhlc2UgcG9ydHMgYXQgYGRvY2tlciBjb21wb3NlIHVwYCB0aW1lLCBzbyBhIGNvbmZsaWN0IGlzIGZhdGFsLlxuICAvLyBtaW5pa3ViZSdzIGFyZSBrdWJlY3RsIHBvcnQtZm9yd2FyZHMgc2V0dXAuc2ggcGtpbGxzICsgcmVzdGFydHMgKGFuZFxuICAvLyBlbnN1cmVNaW5pa3ViZUdhdGV3YXkgcmVjb3ZlcnMpLCBzbyBhIHN0YWxlIGZvcndhcmQgbXVzdCBOT1QgYmxvY2sgYSByZS1ydW4uXG4gIGNvbnN0IGZhdGFsID0gdGFyZ2V0ID09PSAnbG9jYWwnO1xuICAvLyDigKZVTkxFU1MgdGhlIGxvY2FsIHN0YWNrIGlzIGFscmVhZHkgcnVubmluZzogdGhvc2UgcG9ydHMgYXJlIGhlbGQgYnkgWU9VUiBPV05cbiAgLy8gc3RhY2ssIGFuZCBgZG9ja2VyIGNvbXBvc2UgdXBgIG5vLW9wcyB0aGVtIOKAlCB0aGlzIGlzIGV4YWN0bHkgaG93IHlvdSByZS1ydW4gdG9cbiAgLy8gYWRkIGxvYWRzL29wdGlvbnMuIERvbid0IGJsb2NrICh0aGUgd291bGQtYmUgY29uZmxpY3QgaXMgYSBzZWxmLWNvbmZsaWN0KS5cbiAgaWYgKGZhdGFsICYmIHN0YWNrUnVubmluZyh0YXJnZXQsIGN3ZCwgc3BlYykpIHtcbiAgICBwcmludFdhcm5pbmcoYFxcbiR7dGFrZW4ubGVuZ3RofSBwb3J0KHMpIGFyZSBoZWxkIGJ5IHlvdXIgYWxyZWFkeS1ydW5uaW5nICR7c3BlYy5sYWJlbH0gc3RhY2sg4oCUIHJlLXJ1bm5pbmcganVzdCByZXN1bWVzIGl0IChubyByZWFsIGNvbmZsaWN0KSwgc28gY29udGludWluZy5gKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBjb25zdCBsZWFkID0gYCR7dGFrZW4ubGVuZ3RofSByZXF1aXJlZCBwb3J0KHMpIGFscmVhZHkgaW4gdXNlOiAke3Rha2VuLm1hcCgoYykgPT4gYy5wb3J0KS5qb2luKCcsICcpfWA7XG4gIChmYXRhbCA/IHByaW50RXJyb3IgOiBwcmludFdhcm5pbmcpKGZhdGFsXG4gICAgPyBgXFxuJHtsZWFkfSDigJQgdGhlIGRlcGxveSBjYW4ndCBiaW5kIHRoZW0gYW5kIHdvdWxkIGZhaWwgbWlkLXdheS4gRnJlZSB0aGVtIGFuZCByZS1ydW46YFxuICAgIDogYFxcbiR7bGVhZH0g4oCUIG9uIG1pbmlrdWJlIHRoZXNlIGFyZSB1c3VhbGx5IGEgcHJldmlvdXMgcnVuJ3MgcG9ydC1mb3J3YXJkcyAoc2V0dXAuc2ggcmVzdGFydHMgdGhlbSkuIEZyZWUgYW55IE5PTi1taW5pa3ViZSBob2xkZXIgaWYgdGhlIGdhdGV3YXkgc3RheXMgdW5yZWFjaGFibGU6YCk7XG4gIGZvciAoY29uc3QgYyBvZiB0YWtlbikgcHJpbnRJbmZvKGAgIOKAoiBwb3J0ICR7Yy5wb3J0fSAoJHtjLnNlcnZpY2V9KSDigJQgZmluZCB0aGUgaG9sZGVyOiAgbHNvZiAtaSA6JHtjLnBvcnR9YCk7XG4gIGlmICh0YWtlbi5zb21lKChjKSA9PiBjLnBvcnQgPT09IDUwMDApKSB7XG4gICAgcHJpbnRJbmZvKCcgIE5vdGU6IG9uIG1hY09TLCBwb3J0IDUwMDAgaXMgdXN1YWxseSBBaXJQbGF5IFJlY2VpdmVyIOKAlCBTeXN0ZW0gU2V0dGluZ3Mg4oaSIEdlbmVyYWwg4oaSIEFpckRyb3AgJiBIYW5kb2ZmIOKGkiBBaXJQbGF5IFJlY2VpdmVyIChvZmYpLicpO1xuICB9XG4gIHJldHVybiAhZmF0YWw7XG59XG5cbi8qKlxuICogVGVhcmRvd24gbW9kZSDigJQgdGhlIGRlc3Ryb3kgY291bnRlcnBhcnQgb2YgcHJvdmlzaW9uaW5nLCBnYXRlZCBIQVJERVIgdGhhbiBkZXBsb3k6XG4gKiBBV1MgdGFyZ2V0cyBhcmUgaXJyZXZlcnNpYmxlLCBzbyB0aGUgb3BlcmF0b3IgbXVzdCBUWVBFIHRoZSB0YXJnZXQgaWQgKC0tZm9yY2VcbiAqIGJ5cGFzc2VzIGZvciBDSTsgLS15ZXMgYWxvbmUgZG9lcyBOT1QpLiBUZXJtaW5hbDogb3ducyBpdHMgb3V0cHV0ICsgZXhpdENvZGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5UZWFyZG93bihcbiAgc3BlYzogVGFyZ2V0U3BlYyxcbiAgdGFyZ2V0OiBUYXJnZXRJZCxcbiAgY3dkOiBzdHJpbmcsXG4gIGV4ZWN1dGlvbklkOiBzdHJpbmcsXG4gIG9wdHM6IHsgc3RhY2tOYW1lPzogc3RyaW5nOyByZWdpb24/OiBzdHJpbmc7IGZvcmNlPzogYm9vbGVhbjsgeWVzPzogYm9vbGVhbjsganNvbj86IGJvb2xlYW4gfSxcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IGNvbW1hbmQ6IGRvd25Db21tYW5kLCBkZXN0cnVjdGl2ZSB9ID0gdGVhcmRvd25Db21tYW5kKHRhcmdldCwge1xuICAgIHN0YWNrTmFtZTogb3B0cy5zdGFja05hbWUsXG4gICAgcmVnaW9uOiBvcHRzLnJlZ2lvbixcbiAgICAvLyBPdXIgdHlwZWQgZ2F0ZSBJUyB0aGUgY29uZmlybWF0aW9uIOKAlCBmb3J3YXJkIC0teWVzIHNvIHRoZSBuYXRpdmUgc2NyaXB0XG4gICAgLy8gKEZhcmdhdGUpIGRvZXNuJ3QgYWxzbyBibG9jayBvbiBzdGRpbiB3ZSdyZSBpbmhlcml0aW5nLlxuICAgIGFzc3VtZVllczogdHJ1ZSxcbiAgfSk7XG4gIGlmIChvcHRzLmpzb24pIHtcbiAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh7IHN1Y2Nlc3M6IHRydWUsIGV4ZWN1dGlvbklkLCB0YXJnZXQsIHRlYXJkb3duOiB0cnVlLCBkZXN0cnVjdGl2ZSwgZGVzdHJveXM6IHNwZWMuZGVzdHJveXMsIGNvbW1hbmQ6IGRvd25Db21tYW5kIH0sIG51bGwsIDIpKTtcbiAgICByZXR1cm47XG4gIH1cbiAgcHJpbnRTZWN0aW9uKGBUZWFyZG93biBwbGFuIOKAlCAke3NwZWMubGFiZWx9YCk7XG4gIHByaW50S2V5VmFsdWUoeyAnVGFyZ2V0JzogdGFyZ2V0LCAnRGVzdHJveXMnOiBzcGVjLmRlc3Ryb3lzLCAnU3RvcHMgY29zdCc6IHNwZWMuY29zdCB9KTtcbiAgcHJpbnRTZWN0aW9uKCdDb21tYW5kIHRvIHJ1bicpO1xuICBwcmludEluZm8oZG93bkNvbW1hbmQpO1xuICBpZiAoZGVzdHJ1Y3RpdmUgJiYgIW9wdHMuZm9yY2UpIHtcbiAgICBjb25zdCB0b2tlbiA9IGF3YWl0IGFzayhgXFxuVGhpcyBpcyBJUlJFVkVSU0lCTEUuIFR5cGUgXCIke3RhcmdldH1cIiB0byBjb25maXJtIHRlYXJkb3duOiBgKTtcbiAgICBpZiAodG9rZW4gIT09IHRhcmdldCkge1xuICAgICAgcHJpbnRXYXJuaW5nKCdUaGF0IGRpZG5cXCd0IG1hdGNoLCBzbyBub3RoaW5nIHdhcyBkZXN0cm95ZWQg4oCUIHlvdSBoYXZlIHRvIHR5cGUgdGhlIGV4YWN0IHRhcmdldCBpZCB0byBjb25maXJtLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfSBlbHNlIGlmICghZGVzdHJ1Y3RpdmUgJiYgIW9wdHMuZm9yY2UgJiYgIShhd2FpdCBjb25maXJtKCdcXG5Qcm9jZWVkIHdpdGggdGVhcmRvd24gKHN0b3BzIHRoZSBzdGFjazsgb24tZGlzayBkYXRhIHBlcnNpc3RzKT8nLCBvcHRzLnllcyA/PyBmYWxzZSkpKSB7XG4gICAgcHJpbnRXYXJuaW5nKCdObyBwcm9ibGVtIOKAlCBub3RoaW5nIHdhcyBjaGFuZ2VkLicpO1xuICAgIHJldHVybjtcbiAgfVxuICBwcmludFNlY3Rpb24oJ1RlYXJpbmcgZG93bicpO1xuICBjb25zdCB7IGNvZGU6IGRvd25Db2RlIH0gPSBhd2FpdCBydW5TY3JpcHQoZG93bkNvbW1hbmQsIGN3ZCwgeyBjYXB0dXJlOiBmYWxzZSB9KTtcbiAgaWYgKGRvd25Db2RlICE9PSAwKSB7XG4gICAgcHJpbnRFcnJvcihgXFxuVGVhcmRvd24gZmFpbGVkIChleGl0ICR7ZG93bkNvZGV9KS4gSW5zcGVjdCB0aGUgc3RhY2svY29udGFpbmVycyBhbmQgcmV0cnkuYCk7XG4gICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gICAgcmV0dXJuO1xuICB9XG4gIHByaW50U3VjY2VzcygnVGVhcmRvd24gY29tcGxldGUuJyk7XG59XG5cbi8qKlxuICogUnVuIHRoZSBkZXBsb3kgY29tbWFuZCAocmVhbCwgc2VjcmV0cyB1bm1hc2tlZCwgc3RyZWFtZWQgKyBjYXB0dXJlZCkgd2l0aCBhXG4gKiBib3VuZGVkIGF1dG8tZml4ICsgcmV0cnkgbG9vcCDigJQgdGhlIGRlcGxveSBzY3JpcHRzIGFyZSBpZGVtcG90ZW50LCBzbyBhIGZpeGVkXG4gKiByZS1ydW4gcmVzdW1lcyByYXRoZXIgdGhhbiBzdGFydGluZyBvdmVyLiBSZXR1cm5zIHdoZXRoZXIgaXQgc3VjY2VlZGVkIHBsdXMgdGhlXG4gKiAocG9zc2libHkgZml4LWFkanVzdGVkKSBwYXJhbXMsIHdoaWNoIHRoZSBjYWxsZXIgbmVlZHMgZm9yIFNFUyBndWlkYW5jZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkRlcGxveVdpdGhSZXRyeShcbiAgc3BlYzogVGFyZ2V0U3BlYyxcbiAgdXJsOiBzdHJpbmcgfCBudWxsLFxuICBjd2Q6IHN0cmluZyxcbiAgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgYWlPcHRzOiB7IHByb3ZpZGVyPzogc3RyaW5nOyBtb2RlbD86IHN0cmluZyB9LFxuICBvcHRzOiB7IHJldHJpZXM/OiBzdHJpbmc7IHllcz86IGJvb2xlYW4gfSxcbik6IFByb21pc2U8eyBzdWNjZWVkZWQ6IGJvb2xlYW47IHJ1blBhcmFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfT4ge1xuICBjb25zdCBtYXhBdHRlbXB0cyA9IDEgKyBNYXRoLm1heCgwLCBwYXJzZUludChvcHRzLnJldHJpZXMgPz8gJycsIDEwKSB8fCAwKTtcbiAgbGV0IHJ1blBhcmFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBwYXJhbXM7XG4gIGxldCBzdWNjZWVkZWQgPSBmYWxzZTtcbiAgZm9yIChsZXQgYXR0ZW1wdCA9IDE7IGF0dGVtcHQgPD0gbWF4QXR0ZW1wdHM7IGF0dGVtcHQrKykge1xuICAgIGNvbnN0IHJlYWxDb21tYW5kID0gYXNzZW1ibGVDb21tYW5kKHNwZWMsIHJ1blBhcmFtcywgeyBtYXNrOiBmYWxzZSB9KS5jb21tYW5kO1xuICAgIHByaW50U2VjdGlvbihhdHRlbXB0ID09PSAxID8gJ0RlcGxveWluZycgOiBgRGVwbG95aW5nIOKAlCByZXRyeSAke2F0dGVtcHQgLSAxfWApO1xuICAgIGlmIChhdHRlbXB0ID09PSAxKSB7XG4gICAgICBwcmludEluZm8oYERlcGxveWluZyAke3NwZWMubGFiZWx9IOKGkiAke3VybH1gKTtcbiAgICAgIHByaW50SW5mbyhzcGVjLmRlcGxveXMpO1xuICAgICAgcHJpbnRJbmZvKCdTdHJlYW1pbmcgdGhlIGRlcGxveSBiZWxvdyDigJQgZmlyc3QgcnVuIGlzIHRoZSBzbG93IG9uZSAoaW1hZ2UgcHVsbHMgKyBjZXJ0IGdlbmVyYXRpb24pLicpO1xuICAgIH1cbiAgICBjb25zdCB7IGNvZGUsIHRhaWwgfSA9IGF3YWl0IHJ1blNjcmlwdChyZWFsQ29tbWFuZCwgY3dkLCB7IGNhcHR1cmU6IHRydWUgfSk7XG4gICAgaWYgKGNvZGUgPT09IDApIHsgc3VjY2VlZGVkID0gdHJ1ZTsgYnJlYWs7IH1cblxuICAgIHByaW50RXJyb3IoYFxcbkRlcGxveSBmYWlsZWQgKGV4aXQgJHtjb2RlfSkuYCk7XG4gICAgY29uc3QgaXNzdWVzID0gbWF0Y2hJc3N1ZXModGFpbCk7XG4gICAgaWYgKGlzc3Vlcy5sZW5ndGggPiAwKSB7XG4gICAgICBwcmludFNlY3Rpb24oJ0xpa2VseSBjYXVzZScpO1xuICAgICAgZm9yIChjb25zdCBpIG9mIGlzc3VlcykgcHJpbnRJbmZvKGDigKIgJHtpLmNhdXNlfVxcbiAg4oaSICR7aS5zdWdnZXN0aW9ufWApO1xuICAgIH1cbiAgICBpZiAoaXNBaUNvbmZpZ3VyZWQoYWlPcHRzKSkge1xuICAgICAgY29uc3QgZGlhZ25vc2lzID0gYXdhaXQgZGlhZ25vc2VGYWlsdXJlKHJlZGFjdFNlY3JldHModGFpbCwgc3BlYywgcnVuUGFyYW1zKSwgYWlPcHRzKTtcbiAgICAgIGlmIChkaWFnbm9zaXMpIHsgcHJpbnRTZWN0aW9uKCdEaWFnbm9zaXMnKTsgcHJpbnRJbmZvKGRpYWdub3Npcyk7IH1cbiAgICB9XG4gICAgaWYgKGF0dGVtcHQgPj0gbWF4QXR0ZW1wdHMpIGJyZWFrO1xuXG4gICAgLy8gQXV0by1maXg6IGEgcmV0cnlhYmxlIGlzc3VlIHdpdGggYSBwYXJhbSB3ZSBoYXZlbid0IGFscmVhZHkgYXBwbGllZC5cbiAgICBjb25zdCBmaXggPSBpc3N1ZXMuZmluZCgoaSkgPT4gaS5yZXRyeWFibGUgJiYgaS5wYXJhbUZpeCAmJiBydW5QYXJhbXNbaS5wYXJhbUZpeC5rZXldICE9PSBpLnBhcmFtRml4LnZhbHVlKTtcbiAgICBpZiAoZml4Py5wYXJhbUZpeCAmJiBhd2FpdCBjb25maXJtKGBcXG5BcHBseSBmaXggYW5kIHJldHJ5IOKAlCAke2ZpeC5zdWdnZXN0aW9ufWAsIG9wdHMueWVzID8/IGZhbHNlKSkge1xuICAgICAgcnVuUGFyYW1zID0geyAuLi5ydW5QYXJhbXMsIFtmaXgucGFyYW1GaXgua2V5XTogZml4LnBhcmFtRml4LnZhbHVlIH07XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgLy8gUmV0cnlhYmxlIGJ1dCBubyBwYXJhbSBjaGFuZ2UgKGUuZy4gQUNNIEROUyBwcm9wYWdhdGlvbikg4oCUIG9mZmVyIGEgcGxhaW4gcmUtcnVuLlxuICAgIGlmICghZml4ICYmIGlzc3Vlcy5zb21lKChpKSA9PiBpLnJldHJ5YWJsZSkgJiYgYXdhaXQgY29uZmlybSgnXFxuUmV0cnkgdGhlIGRlcGxveSAoc2FmZSB0byByZS1ydW4g4oCUIGl0IHJlc3VtZXMgd2hlcmUgaXQgbGVmdCBvZmYpPycsIG9wdHMueWVzID8/IGZhbHNlKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGJyZWFrO1xuICB9XG4gIHJldHVybiB7IHN1Y2NlZWRlZCwgcnVuUGFyYW1zIH07XG59XG5cbi8qKlxuICogRXhlY3V0ZSB0aGUgcG9zdC1pbnN0YWxsIHN0ZXBzIChyZWdpc3RlciDihpIgbG9hZHMg4oaSIHNtb2tlIOKGkiBldmVudHMg4oaSIGN1c3RvbSkuIE9uXG4gKiBFQzIvRmFyZ2F0ZSwgcmVnaXN0ZXIgKyB0aGUgZXZlbnRzIGJ1bmRsZSAoc3RvcmUtdG9rZW4g4oaSIHNldHVwLWV2ZW50cykgbmVlZCBhXG4gKiByZWFjaGFibGUsIFJFR0lTVEVSRUQgcGxhdGZvcm0gdGhhdCdzIG9ubHkgdHJ1ZSBpbnNpZGUgdGhlIFZQQywgc28gdGhvc2UgYXJlXG4gKiBTVVJGQUNFRCBhcyBvcmRlcmVkIG1hbnVhbCBuZXh0LXN0ZXBzIGluc3RlYWQgb2YgYXV0by1ydW4gKHRoZXknZCBmYWlsIGxvY2FsbHkpLlxuICogU2V0cyBleGl0Q29kZSBvbiBhIHN0ZXAgZmFpbHVyZTsgdGhlIHBsYXRmb3JtIGlzIGFscmVhZHkgZGVwbG95ZWQgYnkgdGhpcyBwb2ludC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1blBvc3RTdGVwcyhcbiAgcG9zdFN0ZXBzOiBQb3N0U3RlcFtdLFxuICBza2lwcGVkU3RlcHM6IFNraXBwZWRTdGVwW10sXG4gIHRhcmdldDogVGFyZ2V0SWQsXG4gIGN3ZDogc3RyaW5nLFxuICBhZG1pbkVudjogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgb3B0czogeyB5ZXM/OiBib29sZWFuOyBhdXRvUnVuPzogYm9vbGVhbjsgYXV0b0luaXQ/OiBib29sZWFuIH0sXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgLy8gRUMyIC0tYXV0by1pbml0OiB0aGUgYm94IHNlbGYtcnVucyBpbml0LXBsYXRmb3JtIG9uIGZpcnN0IGJvb3QsIHNvIHRoZXJlJ3Mgbm9cbiAgLy8gcmVnaXN0ZXIvbG9hZHMgc3RlcCB0byBzdXJmYWNlIGhlcmUg4oCUIGNvbmZpcm0gaXQgYW5kIHBvaW50IGF0IHRoZSBib290IGxvZy5cbiAgaWYgKG9wdHMuYXV0b0luaXQgJiYgdGFyZ2V0ID09PSAnZWMyJykge1xuICAgIHByaW50SW5mbygnXFxu4pyTIEF1dG8taW5pdCBlbmFibGVkIOKAlCB0aGUgaW5zdGFuY2UgcnVucyBpbml0LXBsYXRmb3JtIGl0c2VsZiBvbiBmaXJzdCBib290Jyk7XG4gICAgcHJpbnRJbmZvKCcgIChyZWdpc3RlciBhZG1pbiArIGJ1aWxkIGJvb3RzdHJhcCBpbWFnZSArIGxvYWQgcGx1Z2lucy9jb21wbGlhbmNlL3NhbXBsZXMpLicpO1xuICAgIHByaW50SW5mbygnICBJdCB0YWtlcyB+MzAtNjAgbWluOyB3YXRjaCBwcm9ncmVzczonKTtcbiAgICBwcmludEluZm8oJyAgICBhd3Mgc3NtIHN0YXJ0LXNlc3Npb24gLS10YXJnZXQgPEluc3RhbmNlSWQ+ICAgIyBJbnN0YW5jZUlkIHN0YWNrIG91dHB1dCcpO1xuICAgIHByaW50SW5mbygnICAgIHN1ZG8gdGFpbCAtZiAvdmFyL2xvZy91c2VyLWRhdGEubG9nJyk7XG4gIH1cbiAgaWYgKHBvc3RTdGVwcy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgZm9yIChjb25zdCBzIG9mIHNraXBwZWRTdGVwcykgcHJpbnRXYXJuaW5nKGBTa2lwcGVkIHBvc3Qtc3RlcCAke3MuaWR9OiAke3MucmVhc29ufWApO1xuICBjb25zdCBpc1JlbW90ZSA9IChpZDogc3RyaW5nKTogYm9vbGVhbiA9PlxuICAgICh0YXJnZXQgPT09ICdlYzInIHx8IHRhcmdldCA9PT0gJ2ZhcmdhdGUnKSAmJiAoaWQgPT09ICdyZWdpc3RlcicgfHwgaWQgPT09ICdzdG9yZS10b2tlbicgfHwgaWQgPT09ICdldmVudHMnKTtcbiAgY29uc3QgcnVubmFibGUgPSBwb3N0U3RlcHMuZmlsdGVyKChzKSA9PiAhaXNSZW1vdGUocy5pZCkpO1xuICBjb25zdCByZW1vdGUgPSBwb3N0U3RlcHMuZmlsdGVyKChzKSA9PiBpc1JlbW90ZShzLmlkKSk7XG4gIGlmIChyZW1vdGUubGVuZ3RoID4gMCkge1xuICAgIGlmICh0YXJnZXQgPT09ICdlYzInKSB7XG4gICAgICAvLyBFQzIgcnVucyB0aGUgcGxhdGZvcm0gYXMgYSBkZWRpY2F0ZWQgYG1pbmlrdWJlYCB1c2VyIGluc2lkZSB0aGUgaW5zdGFuY2U6IHRoZVxuICAgICAgLy8gY2x1c3RlciwgaXRzIGt1YmVjb25maWcsIGFuZCB0aGUgand0LXNlY3JldCBhbGwgYmVsb25nIHRvIHRoYXQgdXNlciwgYW5kIHRoZVxuICAgICAgLy8gcmVnaXN0ZXIgc3RlcCBidWlsZHMrcHVzaGVzIGltYWdlcyBhZ2FpbnN0IGl0LiBTbyBpdCBNVVNUIHJ1biBvbiB0aGUgYm94IGFzXG4gICAgICAvLyBgbWluaWt1YmVgIOKAlCBwcmludCB0aGUgZXhhY3QgbGFuZGluZyBzZXF1ZW5jZSByYXRoZXIgdGhhbiBhIGJhcmUgY29tbWFuZC5cbiAgICAgIHByaW50SW5mbygnXFxuTmV4dCDigJQgZmluaXNoIHNldHVwIE9OIHRoZSBpbnN0YW5jZSAoaXQgYnVpbGRzIGltYWdlcyArIHJlYWRzIHRoZSBjbHVzdGVyLCBzbyBpdCcpO1xuICAgICAgcHJpbnRJbmZvKCdjYW5ub3QgcnVuIGZyb20gaGVyZSkuIExhbmQgb24gdGhlIGJveCwgYmVjb21lIHRoZSBgbWluaWt1YmVgIHVzZXIsIHRoZW4gcnVuIGl0OicpO1xuICAgICAgcHJpbnRJbmZvKCcgIGF3cyBzc20gc3RhcnQtc2Vzc2lvbiAtLXRhcmdldCA8SW5zdGFuY2VJZD4gICAgICAjIEluc3RhbmNlSWQgc3RhY2sgb3V0cHV0IChvciBzc2ggdmlhIHRoZSBiYXN0aW9uKScpO1xuICAgICAgcHJpbnRJbmZvKCcgIHN1ZG8gLWl1IG1pbmlrdWJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG93bnMgdGhlIGNsdXN0ZXIgKyBkb2NrZXInKTtcbiAgICAgIHByaW50SW5mbygnICBjZCAvb3B0L3BpcGVsaW5lL3BpcGVsaW5lLWJ1aWxkZXIgICAgICAgICAgICAgICAgIyB0aGUgZGVwbG95ZWQgY2hlY2tvdXQnKTtcbiAgICAgIGZvciAoY29uc3QgcyBvZiByZW1vdGUpIHByaW50SW5mbyhgICAke3MuY29tbWFuZH1gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJpbnRJbmZvKCdcXG5OZXh0IChydW4gZnJvbSBpbnNpZGUgdGhlIFZQQywgaW4gdGhpcyBvcmRlcik6Jyk7XG4gICAgICBmb3IgKGNvbnN0IHMgb2YgcmVtb3RlKSBwcmludEluZm8oYCAg4oCiICR7cy5sYWJlbH0g4oCUICR7cy5jb21tYW5kfWApO1xuICAgIH1cbiAgfVxuICBpZiAocnVubmFibGUubGVuZ3RoID09PSAwKSByZXR1cm47XG4gIC8vIFdoZW4gdGhlIGxvYWRzIHdlcmUgcGlja2VkIGludGVyYWN0aXZlbHkgKGF1dG9SdW4pLCB0aGUgdXNlciBhbHJlYWR5IG9wdGVkIGluIOKAlCBza2lwXG4gIC8vIHRoZSByZWR1bmRhbnQgc2Vjb25kIGNvbmZpcm0uIEZsYWctZHJpdmVuIC8gbm9uLWludGVyYWN0aXZlIHJ1bnMgc3RpbGwgZ2F0ZSBoZXJlLlxuICBpZiAob3B0cy5hdXRvUnVuIHx8IGF3YWl0IGNvbmZpcm0oYFxcblJ1biAke3J1bm5hYmxlLmxlbmd0aH0gcG9zdC1pbnN0YWxsIHN0ZXAocykgbm93P2AsIG9wdHMueWVzID8/IGZhbHNlKSkge1xuICAgIGlmIChvcHRzLmF1dG9SdW4pIHByaW50SW5mbyhgXFxuUnVubmluZyB0aGUgJHtydW5uYWJsZS5sZW5ndGh9IHBvc3QtaW5zdGFsbCBzdGVwKHMpIHlvdSBzZWxlY3RlZOKApmApO1xuICAgIGZvciAoY29uc3QgcyBvZiBydW5uYWJsZSkge1xuICAgICAgcHJpbnRTZWN0aW9uKGBQb3N0LXN0ZXA6ICR7cy5sYWJlbH1gKTtcbiAgICAgIC8vIHJlZ2lzdGVyIChsb2NhbC9taW5pa3ViZSkgbG9ncyBpbnRvIHRoZSBwbGF0Zm9ybSwgc28gaXQgbmVlZHMgdGhlIGFkbWluIGNyZWRzXG4gICAgICAvLyAoUExBVEZPUk1fSURFTlRJRklFUiAvIFBMQVRGT1JNX1BBU1NXT1JEKSBvbiB0b3Agb2YgaXRzIHN0ZXAgZW52LlxuICAgICAgY29uc3QgbmVlZHNDcmVkcyA9IHMuaWQgPT09ICdyZWdpc3RlcicgfHwgcy5pZCA9PT0gJ3N0b3JlLXRva2VuJztcbiAgICAgIGNvbnN0IGVudiA9IG5lZWRzQ3JlZHMgPyB7IC4uLnMuZW52LCAuLi5hZG1pbkVudiB9IDogcy5lbnY7XG4gICAgICAvLyBMb2Fkcy9zbW9rZSBhcmUgbm9pc3kgKyBub24taW50ZXJhY3RpdmUg4oaSIHJ1biBRVUlFVCAoY2FwdHVyZSwgc2hvdyBvbmx5IG9uXG4gICAgICAvLyBmYWlsdXJlKS4gRXhjZXB0aW9uOiBhIHJlZ2lzdGVyIHdpdGggbm8gYWRtaW4gY3JlZHMgcHJvbXB0cywgc28gaXQgbXVzdCBzdHJlYW0uXG4gICAgICBjb25zdCBpbnRlcmFjdGl2ZVJlZ2lzdGVyID0gcy5pZCA9PT0gJ3JlZ2lzdGVyJyAmJiAhYWRtaW5FbnYuUExBVEZPUk1fSURFTlRJRklFUjtcbiAgICAgIGNvbnN0IHF1aWV0ID0gIWludGVyYWN0aXZlUmVnaXN0ZXI7XG4gICAgICBpZiAocXVpZXQpIHByaW50SW5mbyhgJHtzLmNvbW1hbmR9XFxuICDigKZydW5uaW5nIChvdXRwdXQgc2hvd24gb25seSBpZiBpdCBmYWlscylgKTtcbiAgICAgIGVsc2UgcHJpbnRJbmZvKHMuY29tbWFuZCk7XG4gICAgICBjb25zdCB7IGNvZGUsIHRhaWwgfSA9IGF3YWl0IHJ1blNjcmlwdChzLmNvbW1hbmQsIGN3ZCwgeyBxdWlldCwgY2FwdHVyZTogZmFsc2UsIGVudiB9KTtcbiAgICAgIGlmIChjb2RlICE9PSAwKSB7XG4gICAgICAgIGlmIChxdWlldCAmJiB0YWlsKSB7IHByaW50RXJyb3IoJ1xcbi0tLSBsYXN0IG91dHB1dCAtLS0nKTsgcHJpbnRJbmZvKHRhaWwpOyB9XG4gICAgICAgIHByaW50RXJyb3IoYFxcblBvc3Qtc3RlcCAnJHtzLmlkfScgZmFpbGVkIChleGl0ICR7Y29kZX0pLiBUaGUgcGxhdGZvcm0gaXMgZGVwbG95ZWQ7IGZpeCBhbmQgcmUtcnVuIHRoZSBzdGVwIG1hbnVhbGx5LmApO1xuICAgICAgICBwcm9jZXNzLmV4aXRDb2RlID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBwcmludFN1Y2Nlc3MoYCR7cy5pZH0g4pyTYCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHByaW50SW5mbygnXFxuU2tpcHBlZCBwb3N0LWluc3RhbGwgc3RlcHMuIFJ1biB0aGUgY29tbWFuZHMgYWJvdmUgbWFudWFsbHkgd2hlbiByZWFkeS4nKTtcbiAgfVxufVxuXG4vKipcbiAqIFNwYXJzZS1jbG9uZSB0aGUgcGxhdGZvcm0gcmVwbyAod2hlbiAtLXJlcG8sIG9yIGFjY2VwdGVkIHZpYSB0aGUgaW50ZXJhY3RpdmVcbiAqIG9mZmVyKSwgcmVwb2ludCBjd2QgaW50byBpdCwgYW5kIHZlcmlmeSB0aGUgZGVwbG95IGVudHJ5cG9pbnQgZXhpc3RzLiBPd25zIHRoZVxuICogY3dkL2Jvb3RzdHJhcHBlZCBzdGF0ZS4gU2V0cyBleGl0Q29kZSBvbiBhIGhhcmQgZmFpbHVyZSAoY2xvbmUgZXJyb3IgLyBtaXNzaW5nXG4gKiBlbnRyeXBvaW50KSwgbWF0Y2hpbmcgdGhlIG9sZCBpbmxpbmUgYmVoYXZpb3I7IGEgcGxhaW4gZGVjbGluZSBsZWF2ZXMgZXhpdENvZGVcbiAqIHVudG91Y2hlZC4gUmV0dXJucyBvazpmYWxzZSB3aGVuIHRoZSBjYWxsZXIgbXVzdCBhYm9ydC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJvb3RzdHJhcEFuZExvY2F0ZShcbiAgc3BlYzogVGFyZ2V0U3BlYyxcbiAgYm9vdHN0cmFwOiBCb290c3RyYXBTcGVjLFxuICBib290c3RyYXBDbWQ6IHN0cmluZyB8IG51bGwsXG4gIHNwYXJzZVBhdGhzOiByZWFkb25seSBzdHJpbmdbXSxcbiAgc3RhcnRDd2Q6IHN0cmluZyxcbiAgb3B0czogeyB5ZXM/OiBib29sZWFuIH0sXG4pOiBQcm9taXNlPHsgY3dkOiBzdHJpbmc7IGJvb3RzdHJhcHBlZDogYm9vbGVhbjsgb2s6IGJvb2xlYW4gfT4ge1xuICBsZXQgY3dkID0gc3RhcnRDd2Q7XG4gIGxldCBib290c3RyYXBwZWQgPSBmYWxzZTtcbiAgLy8gU2hhcmVkIGJ5IGAtLXJlcG9gIGFuZCB0aGUgaW50ZXJhY3RpdmUgb2ZmZXIuIFJlcG9pbnRzIGN3ZCArIHNldHMgYm9vdHN0cmFwcGVkO1xuICAvLyBgYm9vdHN0cmFwcGVkYCByZWNvcmRzIHdoZXRoZXIgd2UgY3JlYXRlZCB0aGUgY2xvbmUgKHZzLiBhbiBleGlzdGluZyBjaGVja291dCkg4oCUXG4gIC8vIG9ubHkgdGhlbiBjYW4gdGhlIGNhbGxlciBhZGRpdGl2ZWx5IHNwYXJzZS1mZXRjaCBsb2FkIGZvbGRlcnMuXG4gIGNvbnN0IGJvb3RzdHJhcENsb25lID0gYXN5bmMgKCk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICAgIGNvbnN0IGNtZCA9IGJvb3RzdHJhcENvbW1hbmQoYm9vdHN0cmFwKTtcbiAgICBwcmludFNlY3Rpb24oJ0Jvb3RzdHJhcCcpO1xuICAgIHByaW50SW5mbyhjbWQpO1xuICAgIGNvbnN0IHsgY29kZSB9ID0gYXdhaXQgcnVuU2NyaXB0KGNtZCwgY3dkLCB7IGNhcHR1cmU6IGZhbHNlIH0pO1xuICAgIGlmIChjb2RlICE9PSAwKSB7XG4gICAgICBwcmludEVycm9yKGBcXG5UaGUgY2xvbmUgZGlkbid0IGZpbmlzaCAoZXhpdCAke2NvZGV9KS4gRG91YmxlLWNoZWNrIHRoZSByZXBvIFVSTCAvIHJlZiAob3IgeW91ciBuZXR3b3JrKSBhbmQgZ2l2ZSBpdCBhbm90aGVyIGdvLmApO1xuICAgICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGN3ZCA9IHBhdGgucmVzb2x2ZShjd2QsIGJvb3RzdHJhcC53b3JrZGlyKTtcbiAgICBib290c3RyYXBwZWQgPSB0cnVlO1xuICAgIHByaW50U3VjY2VzcyhgUmVwbyBpcyByZWFkeSDigJQgY29udGludWluZyBmcm9tICR7Y3dkfWApO1xuICAgIGNvbnN0IGFic2VudCA9IHNwYXJzZVBhdGhzLmZpbHRlcigocCkgPT4gIWV4aXN0c1N5bmMocGF0aC5qb2luKGN3ZCwgcCkpKTtcbiAgICBpZiAoYWJzZW50Lmxlbmd0aCA+IDApIHtcbiAgICAgIHByaW50RXJyb3IoYFxcblRoZSBzcGFyc2UgY2xvbmUgaXMgbWlzc2luZyAke2Fic2VudC5qb2luKCcsICcpfSDigJQgdGhhdCByZWYgbWF5IG5vdCBoYXZlIHRob3NlIGZvbGRlcnMuIFRyeSBhIGRpZmZlcmVudCAtLXJlZi5gKTtcbiAgICAgIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICAvLyBgLS1yZXBvYDogY2xvbmUgdXAgZnJvbnQgKG11c3QgcHJlY2VkZSB0aGUgZW50cnlwb2ludCBjaGVjaykuXG4gIGlmIChib290c3RyYXBDbWQpIHtcbiAgICBwcmludEluZm8oYFxcbkJvb3RzdHJhcCDihpIgY2xvbmUgJHtib290c3RyYXAucmVwb30gQCAke2Jvb3RzdHJhcC5yZWZ9IGludG8gJHtib290c3RyYXAud29ya2Rpcn0gKHNwYXJzZSkuYCk7XG4gICAgaWYgKCEoYXdhaXQgY29uZmlybSgnR28gYWhlYWQgd2l0aCB0aGUgY2xvbmU/Jywgb3B0cy55ZXMgPz8gZmFsc2UpKSkge1xuICAgICAgcHJpbnRXYXJuaW5nKCdObyBwcm9ibGVtIOKAlCBub3RoaW5nIHdhcyBjaGFuZ2VkLiBSZS1ydW4gd2hlbmV2ZXIgeW91XFwncmUgcmVhZHkuJyk7XG4gICAgICByZXR1cm4geyBjd2QsIGJvb3RzdHJhcHBlZCwgb2s6IGZhbHNlIH07XG4gICAgfVxuICAgIGlmICghKGF3YWl0IGJvb3RzdHJhcENsb25lKCkpKSByZXR1cm4geyBjd2QsIGJvb3RzdHJhcHBlZCwgb2s6IGZhbHNlIH07XG4gIH1cblxuICAvLyBUaGUgZGVwbG95IGVudHJ5cG9pbnQgbXVzdCBleGlzdCByZWxhdGl2ZSB0byBjd2QuIElmIGl0IGRvZXNuJ3QgYW5kIHdlIGhhdmVuJ3RcbiAgLy8gYm9vdHN0cmFwcGVkLCBncmFjZWZ1bGx5IE9GRkVSIHRvIGNsb25lIChpbnRlcmFjdGl2ZSBvbmx5KSBzbyBhIGZyZXNoIG1hY2hpbmUgY2FuXG4gIC8vIHByb2NlZWQgd2l0aG91dCByZS1ydW5uaW5nIHdpdGggLS1yZXBvLlxuICBpZiAoIWVudHJ5cG9pbnRFeGlzdHMoc3BlYywgY3dkKSkge1xuICAgIGNvbnN0IGludGVyYWN0aXZlID0gQm9vbGVhbihwcm9jZXNzLnN0ZGluLmlzVFRZKSAmJiAhb3B0cy55ZXM7XG4gICAgaWYgKCFib290c3RyYXBDbWQgJiYgaW50ZXJhY3RpdmUgJiYgZ2l0QXZhaWxhYmxlKCkpIHtcbiAgICAgIHByaW50SW5mbyhgXFxuTG9va3MgbGlrZSB5b3UncmUgbm90IGluc2lkZSBhIHBpcGVsaW5lLWJ1aWxkZXIgY2hlY2tvdXQsIHNvIHRoZSAke3NwZWMubGFiZWx9IGRlcGxveSBzY3JpcHRzIGFyZW4ndCBoZXJlIHlldC5gKTtcbiAgICAgIGlmIChhd2FpdCBjb25maXJtKGBXYW50IG1lIHRvIHNwYXJzZS1jbG9uZSB0aGVtIGludG8gJHtib290c3RyYXAud29ya2Rpcn0gYW5kIGtlZXAgZ29pbmc/YCwgZmFsc2UpKSB7XG4gICAgICAgIGlmICghKGF3YWl0IGJvb3RzdHJhcENsb25lKCkpKSByZXR1cm4geyBjd2QsIGJvb3RzdHJhcHBlZCwgb2s6IGZhbHNlIH07XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghZW50cnlwb2ludEV4aXN0cyhzcGVjLCBjd2QpKSB7XG4gICAgICBwcmludFdhcm5pbmcoYFxcbkkgY291bGRuJ3QgZmluZCAke3NwZWMuZGlyfS8ke3NwZWMuZW50cnlwb2ludH0gZnJvbSAke2N3ZH0uYCk7XG4gICAgICBwcmludEluZm8oJ1R3byBlYXN5IHdheXMgZm9yd2FyZDonKTtcbiAgICAgIHByaW50SW5mbygnICDigKIgY2QgaW50byB5b3VyIHBpcGVsaW5lLWJ1aWxkZXIgY2hlY2tvdXQgYW5kIHJlLXJ1biwgb3InKTtcbiAgICAgIHByaW50SW5mbyhgICDigKIgYWRkIC0tcmVwbyBhbmQgSSdsbCBib290c3RyYXAgYSBmcmVzaCBzcGFyc2UgY2xvbmUgZm9yIHlvdSR7Z2l0QXZhaWxhYmxlKCkgPyAnLicgOiAnIChvbmNlIGdpdCBpcyBpbnN0YWxsZWQpLid9YCk7XG4gICAgICBwcm9jZXNzLmV4aXRDb2RlID0gMTtcbiAgICAgIHJldHVybiB7IGN3ZCwgYm9vdHN0cmFwcGVkLCBvazogZmFsc2UgfTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHsgY3dkLCBib290c3RyYXBwZWQsIG9rOiB0cnVlIH07XG59XG5cbi8qKlxuICogSW50ZXJhY3RpdmUgb3B0LWluIGxvYWRzLCBvZmZlcmVkIEFGVEVSIHRoZSBjbG9uZSAoc28gd2Ugb25seSBhc2sgb25jZSB0aGUgb3BlcmF0b3JcbiAqIGhhcyBhZ3JlZWQgdG8gcHJvY2VlZCkuIFByb21wdHMgcGVyIGxvYWQsIGFkZGl0aXZlbHkgc3BhcnNlLWZldGNoZXMgdGhlIHBpY2tlZFxuICogZm9sZGVycyBpbnRvIGEgYm9vdHN0cmFwcGVkIHNwYXJzZSBjbG9uZSwgdGhlbiByZS1yZXNvbHZlcyB0aGUgcG9zdC1pbnN0YWxsIHN0ZXBzXG4gKiB3aXRoIHRoZSBzZWxlY3Rpb25zLiBSZXR1cm5zIHRoZSBjaG9zZW4gaWRzICsgdGhlIHJlY29tcHV0ZWQgc3RlcHMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlTG9hZHNJbnRlcmFjdGl2ZWx5KFxuICB0YXJnZXQ6IFRhcmdldElkLFxuICB1cmw6IHN0cmluZyB8IG51bGwsXG4gIHJlZ2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBjd2Q6IHN0cmluZyxcbiAgYm9vdHN0cmFwcGVkOiBib29sZWFuLFxuICBib290c3RyYXA6IEJvb3RzdHJhcFNwZWMsXG4gIHBvc3RTdGVwRmxhZ3M6IHsgaW5pdDogYm9vbGVhbjsgYXV0b0luaXQ6IGJvb2xlYW47IGJ1aWxkQm9vdHN0cmFwOiBib29sZWFuOyBzbW9rZVRlc3Q6IGJvb2xlYW47IGV2ZW50czogYm9vbGVhbjsgc3RlcHM6IHN0cmluZ1tdIH0sXG4pOiBQcm9taXNlPHsgZW5hYmxlZExvYWRJZHM6IHN0cmluZ1tdOyBzdGVwczogUG9zdFN0ZXBbXTsgc2tpcHBlZDogU2tpcHBlZFN0ZXBbXSB9PiB7XG4gIGNvbnN0IHByb21wdHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgcGx1Z2luczogJ0xvYWQgcGx1Z2lucz8nLFxuICAgIHNhbXBsZXM6ICdMb2FkIHNhbXBsZSBwaXBlbGluZXM/JyxcbiAgICBjb21wbGlhbmNlOiAnTG9hZCBjb21wbGlhbmNlIHJ1bGVzPycsXG4gIH07XG4gIHByaW50U2VjdGlvbignT3B0aW9uYWwgcG9zdC1pbnN0YWxsIGxvYWRzJyk7XG4gIGNvbnN0IGNob3Nlbjogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCBzIG9mIExPQURfU1RFUFMpIHtcbiAgICBpZiAoYXdhaXQgY29uZmlybShwcm9tcHRzW3MuaWRdID8/IGBMb2FkICR7cy5pZH0/YCwgZmFsc2UpKSBjaG9zZW4ucHVzaChzLmlkKTtcbiAgfVxuICAvLyBBZGRpdGl2ZSBzcGFyc2UgcmUtc3luYzogbWF0ZXJpYWxpemUgT05MWSB0aGUgcGlja2VkIGxvYWRzJyBmb2xkZXJzICh0aGUgcGFydGlhbFxuICAvLyBjbG9uZSBmZXRjaGVzIHRoZWlyIGJsb2JzIG9uIGRlbWFuZCkuIE9ubHkgd2hlbiB3ZSBjcmVhdGVkIGEgU1BBUlNFIGNsb25lIOKAlCBhXG4gIC8vIG5vcm1hbCBjaGVja291dCBhbHJlYWR5IGhhcyBldmVyeSBmb2xkZXIsIGFuZCB0aGUgZ2l0PDIuMjcgZnVsbC1jbG9uZSBmYWxsYmFja1xuICAvLyAoYm9vdHN0cmFwLmZ1bGwpIGlzIG5vbi1zcGFyc2UsIHdoZXJlIGBzcGFyc2UtY2hlY2tvdXQgYWRkYCB3b3VsZCBzd2l0Y2ggaXQgdG9cbiAgLy8gY29uZSBtb2RlIGFuZCBQUlVORSB0aGUgYWxyZWFkeS1tYXRlcmlhbGl6ZWQgZGVwbG95IGZvbGRlcnMuXG4gIGlmIChib290c3RyYXBwZWQgJiYgIWJvb3RzdHJhcC5mdWxsKSB7XG4gICAgY29uc3QgYWJzZW50ID0gc3BhcnNlUGF0aHNGb3IodGFyZ2V0LCBjaG9zZW4pLmZpbHRlcigocCkgPT4gIWV4aXN0c1N5bmMocGF0aC5qb2luKGN3ZCwgcCkpKTtcbiAgICBpZiAoYWJzZW50Lmxlbmd0aCA+IDApIHtcbiAgICAgIHByaW50U2VjdGlvbignRmV0Y2hpbmcgc2VsZWN0ZWQgbG9hZCBmb2xkZXJzJyk7XG4gICAgICBjb25zdCBhZGRDbWQgPSBgZ2l0IHNwYXJzZS1jaGVja291dCBhZGQgJHthYnNlbnQubWFwKChwKSA9PiBgJyR7cH0nYCkuam9pbignICcpfSAmJiBnaXQgY2hlY2tvdXQgJyR7Ym9vdHN0cmFwLnJlZn0nYDtcbiAgICAgIHByaW50SW5mbyhhZGRDbWQpO1xuICAgICAgY29uc3QgeyBjb2RlIH0gPSBhd2FpdCBydW5TY3JpcHQoYWRkQ21kLCBjd2QsIHsgY2FwdHVyZTogZmFsc2UgfSk7XG4gICAgICBpZiAoY29kZSAhPT0gMCkge1xuICAgICAgICBwcmludFdhcm5pbmcoYENvdWxkbid0IGZldGNoICR7YWJzZW50LmpvaW4oJywgJyl9IOKAlCB0aGUgbWF0Y2hpbmcgbG9hZCBzdGVwKHMpIG1heSBmYWlsLiBSZS1ydW4gd2l0aCAtLXJlcG8gdG8gcmVmcmVzaCB0aGUgY2xvbmUuYCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZVBvc3RTdGVwcyh7XG4gICAgdGFyZ2V0LFxuICAgIHVybCxcbiAgICByZWdpb24sXG4gICAgZW5hYmxlZExvYWRJZHM6IGNob3NlbixcbiAgICAuLi5wb3N0U3RlcEZsYWdzLFxuICAgIGJ1aWxkQm9vdHN0cmFwOiBwb3N0U3RlcEZsYWdzLmJ1aWxkQm9vdHN0cmFwIHx8IGNob3Nlbi5pbmNsdWRlcygncGx1Z2lucycpLFxuICB9KTtcbiAgcmV0dXJuIHsgZW5hYmxlZExvYWRJZHM6IGNob3Nlbiwgc3RlcHM6IHJlc29sdmVkLnN0ZXBzLCBza2lwcGVkOiByZXNvbHZlZC5za2lwcGVkIH07XG59XG5cbi8qKlxuICogUmVkYWN0IHNlY3JldCBwYXJhbSB2YWx1ZXMgKGUuZy4gdGhlIGdoY3IgdG9rZW4pIGZyb20gY2FwdHVyZWQgZGVwbG95IG91dHB1dFxuICogYmVmb3JlIGl0IGlzIHNlbnQgdG8gdGhlIExMTSBmb3IgZGlhZ25vc2lzLiBUaGUgZGVwbG95IHJ1bnMgd2l0aCBzZWNyZXRzXG4gKiB1bm1hc2tlZCwgc28gYWx0aG91Z2ggdGhlIGN1cnJlbnQgc2NyaXB0cyBkb24ndCBlY2hvIHRoZW0sIHRoaXMga2VlcHMgYSBmdXR1cmVcbiAqIHNjcmlwdCdzIHN0cmF5IGVjaG8gKG9yIGEgdmVyYm9zZSBzdWItdG9vbCkgZnJvbSBjcm9zc2luZyB0aGUgdGhpcmQtcGFydHktTExNXG4gKiBib3VuZGFyeS5cbiAqL1xuZnVuY3Rpb24gcmVkYWN0U2VjcmV0cyh0ZXh0OiBzdHJpbmcsIHNwZWM6IFRhcmdldFNwZWMsIHBhcmFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBzdHJpbmcge1xuICBsZXQgb3V0ID0gdGV4dDtcbiAgZm9yIChjb25zdCBpbnB1dCBvZiBbLi4uc3BlYy5yZXF1aXJlZCwgLi4uc3BlYy5vcHRpb25hbF0pIHtcbiAgICBpZiAoIWlucHV0LnNlY3JldCkgY29udGludWU7XG4gICAgY29uc3QgdmFsdWUgPSBwYXJhbXNbaW5wdXQua2V5XTtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS5sZW5ndGggPj0gNCkgb3V0ID0gb3V0LnNwbGl0KHZhbHVlKS5qb2luKCcqKionKTtcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuXG4vKipcbiAqIFJlZ2lzdGVycyB0aGUgYHByb3Zpc2lvbmAgY29tbWFuZCDigJQgYW4gQUktYXNzaXN0ZWQgaW5zdGFsbGVyIGZvciB0aGUgUGlwZWxpbmVcbiAqIEJ1aWxkZXIgUExBVEZPUk0gKGxvY2FsL21pbmlrdWJlL0VDMi9GYXJnYXRlKS4gSXQgcHJpbnRzIHRoZSBhc3NlbWJsZWQgcGxhblxuICogKHByZXJlcSBjaGVja3MsIE5MLWdvYWwgcGFyc2luZywgY29tbWFuZCBhc3NlbWJseSkgYW5kIHRoZW4gREVQTE9ZUywgZ2F0ZWQgYnlcbiAqIGNvbmZpcm1hdGlvbiBwcm9tcHRzIChgLS15ZXNgIHRvIGF1dG8tYWNjZXB0OyBgLS1qc29uYCBpcyB0aGUgb25seSBub24tZXhlY3V0aW5nXG4gKiBtb2RlLCBwcmludGluZyB0aGUgcGxhbiBmb3IgdG9vbGluZykuIFdpdGggYC0tcmVwb2AgaXQgY2FuIGJvb3RzdHJhcCBhIGZyZXNoXG4gKiBtYWNoaW5lIGJ5IHNwYXJzZWx5IGNsb25pbmcgb25seSB0aGUgZGVwbG95IGZvbGRlcnMgdGhlIHNlbGVjdGVkIHRhcmdldCArXG4gKiBvcHRpb25zIG5lZWQsIHRoZW4gcnVucyBwb3N0LWluc3RhbGwgc3RlcHMgKHJlZ2lzdGVyIGFkbWluLCBvcHQtaW4gbG9hZHMsXG4gKiBzbW9rZSB0ZXN0LCBjdXN0b20gY29tbWFuZHMpLiBgLS10ZWFyZG93bmAgcmVtb3ZlcyBhIGRlcGxveW1lbnQgaW5zdGVhZC5cbiAqXG4gKiBAcGFyYW0gcHJvZ3JhbSAtIFRoZSByb290IENvbW1hbmRlciBwcm9ncmFtIGluc3RhbmNlIHRvIGF0dGFjaCB0aGUgY29tbWFuZCB0by5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb3Zpc2lvbihwcm9ncmFtOiBDb21tYW5kKTogdm9pZCB7XG4gIHByb2dyYW1cbiAgICAuY29tbWFuZCgncHJvdmlzaW9uJylcbiAgICAuZGVzY3JpcHRpb24oJ0FJLWFzc2lzdGVkIGluc3RhbGxlciBmb3IgdGhlIHBsYXRmb3JtIChsb2NhbC9taW5pa3ViZS9FQzIvRmFyZ2F0ZSk6IGRlcGxveXMgaXQgKGdhdGVkIGJ5IGNvbmZpcm1hdGlvbiBwcm9tcHRzKSwgb3IgLS10ZWFyZG93biB0byByZW1vdmUnKVxuICAgIC5vcHRpb24oJy10LCAtLXRhcmdldCA8dGFyZ2V0PicsIGBEZXBsb3kgdGFyZ2V0OiAke1RBUkdFVF9JRFMuam9pbignIHwgJyl9YClcbiAgICAub3B0aW9uKCctcCwgLS1wcm9tcHQgPHRleHQ+JywgJ05hdHVyYWwtbGFuZ3VhZ2UgZ29hbCAocGFyc2VkIGludG8gcGFyYW1zIHdoZW4gYW4gQUkga2V5IGlzIHNldCknKVxuICAgIC5vcHRpb24oJy0tcmVnaW9uIDxyZWdpb24+JywgJ0FXUyByZWdpb24gKEVDMi9GYXJnYXRlKScpXG4gICAgLm9wdGlvbignLS1kb21haW4gPGRvbWFpbj4nLCAnRnVsbHktcXVhbGlmaWVkIGRvbWFpbiBuYW1lIChFQzIvRmFyZ2F0ZSknKVxuICAgIC5vcHRpb24oJy0taG9zdGVkLXpvbmUtaWQgPGlkPicsICdQdWJsaWMgUm91dGUgNTMgaG9zdGVkIHpvbmUgSUQgKEVDMi9GYXJnYXRlKScpXG4gICAgLm9wdGlvbignLS1kZXBsb3ktbW9kZSA8bW9kZT4nLCAncHVibGljIHwgcHJpdmF0ZSAoRUMyL0ZhcmdhdGUpJylcbiAgICAub3B0aW9uKCctLWtleS1wYWlyIDxuYW1lPicsICdFQzIga2V5IHBhaXIgKEVDMiknKVxuICAgIC5vcHRpb24oJy0taW5zdGFuY2UtdHlwZSA8dHlwZT4nLCAnRUMyIGluc3RhbmNlIHR5cGUgKEVDMiknKVxuICAgIC5vcHRpb24oJy0tZ2hjci10b2tlbiA8dG9rZW4+JywgJ0dpdEh1YiBQQVQgKHJlYWQ6cGFja2FnZXMpIOKAlCBtYXNrZWQgaW4gb3V0cHV0JylcbiAgICAub3B0aW9uKCctLWVtYWlsJywgJ0VuYWJsZSBTRVMgdHJhbnNhY3Rpb25hbCBlbWFpbCAob24gYnkgZGVmYXVsdCBmb3IgQVdTKScpXG4gICAgLm9wdGlvbignLS1uby1lbWFpbCcsICdTa2lwIFNFUyAodHJhbnNhY3Rpb25hbCBlbWFpbCBpcyBwcm92aXNpb25lZCBieSBkZWZhdWx0IG9uIEFXUyknKVxuICAgIC5vcHRpb24oJy0tZW1haWwtZnJvbSA8YWRkcj4nLCAnU0VTIEZyb20gYWRkcmVzcycpXG4gICAgLm9wdGlvbignLS1lbWFpbC1mcm9tLW5hbWUgPG5hbWU+JywgJ1NFUyBGcm9tIGRpc3BsYXkgbmFtZScpXG4gICAgLm9wdGlvbignLS1hbGVydC1lbWFpbCA8YWRkcj4nLCAnU3Vic2NyaWJlIGFuIGFkZHJlc3MgdG8gdGhlIGJvdW5jZS9jb21wbGFpbnQgU05TIHRvcGljJylcbiAgICAub3B0aW9uKCctLXNraXAtc2VzLWlkZW50aXR5JywgJ1NraXAgU0VTIGlkZW50aXR5IGNyZWF0aW9uIChkb21haW4gYWxyZWFkeSB2ZXJpZmllZCknKVxuICAgIC5vcHRpb24oJy0tYWktcHJvdmlkZXIgPHByb3ZpZGVyPicsICdBSSBwcm92aWRlciAoYW50aHJvcGljfG9wZW5haXxnb29nbGV8eGFpfGJlZHJvY2spJylcbiAgICAub3B0aW9uKCctLW1vZGVsIDxtb2RlbD4nLCAnQUkgbW9kZWwgaWQnKVxuICAgIC5vcHRpb24oJy0tZGlhZ25vc2UgPGZpbGU+JywgJ0RpYWdub3NlIGEgQ2xvdWRGb3JtYXRpb24vZGVwbG95IGZhaWx1cmUgZnJvbSBhIGZpbGUgKG5lZWRzIGFuIEFJIGtleSknKVxuICAgIC5vcHRpb24oJy15LCAtLXllcycsICdBdXRvLWFjY2VwdCBhbGwgY29uZmlybWF0aW9uIHByb21wdHMgKGZvciBDSSAvIG5vbi1pbnRlcmFjdGl2ZSknLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLXJldHJpZXMgPG4+JywgJ0F1dG8tZml4ICsgcmV0cnkgYXR0ZW1wdHMgYWZ0ZXIgYSBmYWlsdXJlIChkZXBsb3kgc2NyaXB0cyBhcmUgaWRlbXBvdGVudCknLCAnMScpXG4gICAgLm9wdGlvbignLS10ZWFyZG93bicsICdUZWFyIGRvd24gYW4gZXhpc3RpbmcgZGVwbG95bWVudCBpbnN0ZWFkIG9mIGNyZWF0aW5nIG9uZSAoZ2F0ZWQ7IEFXUyB0YXJnZXRzIHJlcXVpcmUgYSB0eXBlZCBjb25maXJtYXRpb24pJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS1zdGFjay1uYW1lIDxuYW1lPicsICdTdGFjayBuYW1lIChFQzIpIC8gc3RhY2sgcHJlZml4IChGYXJnYXRlKSB0byB0ZWFyIGRvd24g4oCUIGRlZmF1bHRzIHRvIHRoZSBkZXBsb3kgZGVmYXVsdCcpXG4gICAgLm9wdGlvbignLS1mb3JjZScsICdTa2lwIHRoZSB0ZWFyZG93biB0eXBlZC1jb25maXJtYXRpb24gKERBTkdFUk9VUyDigJQgZm9yIENJL2F1dG9tYXRpb24gb25seSknLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLW5vLWluaXQnLCAnU2tpcCB0aGUgcG9zdC1kZXBsb3kgcmVnaXN0ZXIvaW5pdC1wbGF0Zm9ybSBzdGVwJylcbiAgICAub3B0aW9uKCctLWF1dG8taW5pdCcsICdFQzI6IGluc3RhbmNlIHNlbGYtcnVucyBpbml0LXBsYXRmb3JtIG9uIGZpcnN0IGJvb3QgKHJlZ2lzdGVyICsgYWxsIGxvYWRzKS4gVGhpcyBpcyB0aGUgREVGQVVMVCBvbiBlYzIuJylcbiAgICAub3B0aW9uKCctLW5vLWF1dG8taW5pdCcsICdFQzI6IHNraXAgdGhlIG9uLWJvb3QgYXV0by1pbml0IGFuZCBzdXJmYWNlIHRoZSBtYW51YWwgb24tYm94IHN0ZXAgaW5zdGVhZC4gQWRkcyB+MzAtNjAgbWluIHRvIGJvb3Qgd2hlbiBvbjsgYXV0by1pbml0IHJlZ2lzdGVycyBhZG1pbiB3aXRoIHRoZSBkZWZhdWx0IHBhc3N3b3JkLicpXG4gICAgLy8gQm9vdHN0cmFwIChzcGFyc2UgY2xvbmUpIOKAlCBwcm92aXNpb24gYSBmcmVzaCBtYWNoaW5lIGluIG9uZSBjb21tYW5kLlxuICAgIC5vcHRpb24oJy0tcmVwbyBbdXJsXScsICdCb290c3RyYXA6IGdpdC1jbG9uZSB0aGUgcGxhdGZvcm0gcmVwbyBmaXJzdCAoc3BhcnNlIOKAlCBvbmx5IHRoZSBuZWVkZWQgZGVwbG95IGZvbGRlcnMpLCB0aGVuIHJ1biBmcm9tIGl0IChubyB2YWx1ZSA9IHRoZSB1cHN0cmVhbSBkZWZhdWx0KScpXG4gICAgLm9wdGlvbignLS1yZWYgPHJlZj4nLCAnR2l0IGJyYW5jaC90YWcgdG8gY2hlY2sgb3V0IHdoZW4gYm9vdHN0cmFwcGluZyAoZGVmYXVsdDogbWFpbiknKVxuICAgIC5vcHRpb24oJy0td29ya2RpciA8ZGlyPicsICdEaXJlY3RvcnkgdG8gY2xvbmUgaW50byAvIHJ1biBmcm9tIHdoZW4gYm9vdHN0cmFwcGluZyAoZGVmYXVsdDogcGlwZWxpbmUtYnVpbGRlciknKVxuICAgIC8vIFBvc3QtaW5zdGFsbCBsb2FkcyDigJQgZWFjaCBvcHQtaW4gc3RlcCBhbHNvIGFkZHMgaXRzIGRlcGxveSBmb2xkZXIgdG8gdGhlIHNwYXJzZSBjbG9uZS5cbiAgICAub3B0aW9uKCctLXdpdGgtcGx1Z2lucycsICdQb3N0LWluc3RhbGw6IGJ1aWxkICsgbG9hZCBwbHVnaW5zIChhZGRzIGRlcGxveS9wbHVnaW5zLCBkZXBsb3kvY29kZWJ1aWxkKScsIGZhbHNlKVxuICAgIC5vcHRpb24oJy0td2l0aC1jb21wbGlhbmNlJywgJ1Bvc3QtaW5zdGFsbDogbG9hZCBzYW1wbGUgY29tcGxpYW5jZSBydWxlcy9wb2xpY2llcyAoYWRkcyBkZXBsb3kvY29tcGxpYW5jZSknLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLXdpdGgtc2FtcGxlcycsICdQb3N0LWluc3RhbGw6IGxvYWQgc2FtcGxlIHBpcGVsaW5lcyAoYWRkcyBkZXBsb3kvc2FtcGxlcyknLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLXdpdGgtYWxsJywgJ1Bvc3QtaW5zdGFsbDogcGx1Z2lucyArIGNvbXBsaWFuY2UgKyBzYW1wbGVzJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS1idWlsZC1ib290c3RyYXAnLCAnQnVpbGQgKyBwdWJsaXNoIHRoZSBDb2RlQnVpbGQgYm9vdHN0cmFwIGltYWdlIGR1cmluZyByZWdpc3RlciAoYWRkcyBkZXBsb3kvY29kZWJ1aWxkKScsIGZhbHNlKVxuICAgIC5vcHRpb24oJy0td2l0aC1zbW9rZS10ZXN0JywgJ1Bvc3QtaW5zdGFsbDogcmVhZC1vbmx5IEFQSSByZWFjaGFiaWxpdHkgY2hlY2snLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLXdpdGgtZXZlbnRzJywgJ1Bvc3QtaW5zdGFsbCAoQVdTKTogZXZlbnQgaW5nZXN0aW9uIGJ1bmRsZSDigJQgc3RvcmUtdG9rZW4gKEpXVCDihpIgU2VjcmV0cyBNYW5hZ2VyKSB0aGVuIHNldHVwLWV2ZW50cyAoRXZlbnRCcmlkZ2UvTGFtYmRhKScsIGZhbHNlKVxuICAgIC5vcHRpb24oJy0tcG9zdC1zdGVwIDxjbWQ+JywgJ1J1biBhbiBleHRyYSBjb21tYW5kIGFmdGVyIHRoZSBsb2FkcyAocmVwZWF0YWJsZSwgaW4gb3JkZXIpJywgY29sbGVjdFN0ZXAsIFtdKVxuICAgIC5vcHRpb24oJy0tYWRtaW4tZW1haWwgPGFkZHI+JywgJ0FkbWluIGVtYWlsIGZvciBub24taW50ZXJhY3RpdmUgcmVnaXN0ZXIgKHNldHMgUExBVEZPUk1fSURFTlRJRklFUiknKVxuICAgIC5vcHRpb24oJy0tYWRtaW4tcGFzc3dvcmQgPHB3PicsICdBZG1pbiBwYXNzd29yZCBmb3Igbm9uLWludGVyYWN0aXZlIHJlZ2lzdGVyIChzZXRzIFBMQVRGT1JNX1BBU1NXT1JEKScpXG4gICAgLm9wdGlvbignLS1qc29uJywgJ1ByaW50IHRoZSBwbGFuIGFzIEpTT04gYW5kIGV4aXQgV0lUSE9VVCBydW5uaW5nICh0aGUgb25seSBub24tZXhlY3V0aW5nIG1vZGUg4oCUIGZvciB0b29saW5nL0NJIGluc3BlY3Rpb24pJywgZmFsc2UpXG4gICAgLmFjdGlvbihhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgY29uc3QgZXhlY3V0aW9uSWQgPSBwcmludENvbW1hbmRIZWFkZXIoJ1Byb3Zpc2lvbicpO1xuXG4gICAgICB0cnkge1xuICAgICAgICAvLyAxLiBBc3NlbWJsZSBwYXJhbXMgZnJvbSBleHBsaWNpdCBmbGFncyAoZmxhZ3MgYWx3YXlzIHdpbiBvdmVyIE5MIHBhcnNlKS5cbiAgICAgICAgY29uc3QgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICAgICAgICByZWdpb246IG9wdGlvbnMucmVnaW9uLFxuICAgICAgICAgIGRvbWFpbjogb3B0aW9ucy5kb21haW4sXG4gICAgICAgICAgaG9zdGVkWm9uZUlkOiBvcHRpb25zLmhvc3RlZFpvbmVJZCxcbiAgICAgICAgICBkZXBsb3lNb2RlOiBvcHRpb25zLmRlcGxveU1vZGUsXG4gICAgICAgICAga2V5UGFpcjogb3B0aW9ucy5rZXlQYWlyLFxuICAgICAgICAgIGluc3RhbmNlVHlwZTogb3B0aW9ucy5pbnN0YW5jZVR5cGUsXG4gICAgICAgICAgZ2hjclRva2VuOiBvcHRpb25zLmdoY3JUb2tlbixcbiAgICAgICAgICAvLyBDb21tYW5kZXIgdHJpLXN0YXRlcyBgZW1haWxgOiB1bmRlZmluZWQgKG5laXRoZXIpLCB0cnVlICgtLWVtYWlsKSxcbiAgICAgICAgICAvLyBmYWxzZSAoLS1uby1lbWFpbCkuIFNFUyBpcyBvbiBieSBkZWZhdWx0LCBzbyBvbmx5IC0tbm8tZW1haWwgaXNcbiAgICAgICAgICAvLyBsb2FkLWJlYXJpbmcgKGl0IGVtaXRzIGAtLW5vLWVtYWlsYCBpbnRvIHRoZSBkZXBsb3kgY29tbWFuZCkuXG4gICAgICAgICAgZW1haWw6IG9wdGlvbnMuZW1haWwgPT09IHRydWUsXG4gICAgICAgICAgbm9FbWFpbDogb3B0aW9ucy5lbWFpbCA9PT0gZmFsc2UsXG4gICAgICAgICAgZW1haWxGcm9tOiBvcHRpb25zLmVtYWlsRnJvbSxcbiAgICAgICAgICBlbWFpbEZyb21OYW1lOiBvcHRpb25zLmVtYWlsRnJvbU5hbWUsXG4gICAgICAgICAgYWxlcnRFbWFpbDogb3B0aW9ucy5hbGVydEVtYWlsLFxuICAgICAgICAgIG5vQ3JlYXRlU2VzSWRlbnRpdHk6IG9wdGlvbnMuc2tpcFNlc0lkZW50aXR5LFxuICAgICAgICAgIC8vIEVDMiBhdXRvLWluaXQgaXMgT04gQlkgREVGQVVMVCAoc2V0dXAuc2gvdGVtcGxhdGUgZGVmYXVsdCB0cnVlKS4gTGlrZSBlbWFpbCxcbiAgICAgICAgICAvLyBvbmx5IHRoZSBFWFBMSUNJVCBmbGFnIGlzIGVtaXR0ZWQ6IGAtLWF1dG8taW5pdGAgKHJlYWZmaXJtKSBvciB0aGUgbG9hZC1iZWFyaW5nXG4gICAgICAgICAgLy8gYC0tbm8tYXV0by1pbml0YCAob3B0IG91dCkuIFRoZSBlYzIgdGFyZ2V0IHNwZWMgbWFwcyBib3RoLlxuICAgICAgICAgIGF1dG9Jbml0OiBvcHRpb25zLmF1dG9Jbml0ID09PSB0cnVlLFxuICAgICAgICAgIG5vQXV0b0luaXQ6IG9wdGlvbnMuYXV0b0luaXQgPT09IGZhbHNlLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBhaU9wdHMgPSB7IHByb3ZpZGVyOiBvcHRpb25zLmFpUHJvdmlkZXIsIG1vZGVsOiBvcHRpb25zLm1vZGVsIH07XG5cbiAgICAgICAgLy8gQm9vdHN0cmFwIChzcGFyc2UgY2xvbmUpICsgcG9zdC1pbnN0YWxsIHNlbGVjdGlvbnMuXG4gICAgICAgIGNvbnN0IHdhbnRCb290c3RyYXAgPSBvcHRpb25zLnJlcG8gIT09IHVuZGVmaW5lZCAmJiBvcHRpb25zLnJlcG8gIT09IGZhbHNlO1xuICAgICAgICBjb25zdCB3aXRoQWxsID0gb3B0aW9ucy53aXRoQWxsID09PSB0cnVlO1xuICAgICAgICBjb25zdCBhbnlMb2FkRmxhZyA9IHdpdGhBbGwgfHwgTE9BRF9TVEVQUy5zb21lKChzKSA9PiBvcHRpb25zW3MuZmxhZ10gPT09IHRydWUpO1xuICAgICAgICBsZXQgZW5hYmxlZExvYWRJZHM6IHN0cmluZ1tdID0gTE9BRF9TVEVQUy5maWx0ZXIoKHMpID0+IHdpdGhBbGwgfHwgb3B0aW9uc1tzLmZsYWddID09PSB0cnVlKS5tYXAoKHMpID0+IHMuaWQpO1xuICAgICAgICAvLyBXaXRoIG5vIC0td2l0aC0qIGZsYWdzLCBhbiBpbnRlcmFjdGl2ZSBydW4gb2ZmZXJzIGVhY2ggbG9hZCDigJQgYnV0IEFGVEVSIHRoZVxuICAgICAgICAvLyBjbG9uZSwgc28gdGhlIHF1ZXN0aW9ucyBjb21lIG9uY2UgeW91J3ZlIGFncmVlZCB0byBwcm9jZWVkIChub3QgdXAgZnJvbnQpLlxuICAgICAgICAvLyBFYWNoIHBpY2tlZCBsb2FkJ3MgZm9sZGVyIGlzIHRoZW4gZmV0Y2hlZCB2aWEgYW4gYWRkaXRpdmUgc3BhcnNlIHJlLXN5bmMuXG4gICAgICAgIC8vIEZsYWdzIC8gLS15ZXMgLyAtLWpzb24gLyBub24taW50ZXJhY3RpdmUgc2hlbGxzIHNraXAgdGhlIHByb21wdHMuXG4gICAgICAgIGxldCB3aWxsUHJvbXB0TG9hZHMgPSAhb3B0aW9ucy55ZXMgJiYgIW9wdGlvbnMuanNvbiAmJiBCb29sZWFuKHByb2Nlc3Muc3RkaW4uaXNUVFkpICYmICFhbnlMb2FkRmxhZztcbiAgICAgICAgY29uc3QgcG9zdFN0ZXBGbGFncyA9IHtcbiAgICAgICAgICBpbml0OiBvcHRpb25zLmluaXQgIT09IGZhbHNlLFxuICAgICAgICAgIC8vIEVDMiBhdXRvLWluaXQgaXMgT04gQlkgREVGQVVMVCAob2ZmIG9ubHkgd2l0aCAtLW5vLWF1dG8taW5pdCkuIHJlc29sdmVQb3N0U3RlcHNcbiAgICAgICAgICAvLyBkcm9wcyB0aGUgcmVnaXN0ZXIgc3RlcCB3aGVuIHRoaXMgaXMgdHJ1ZSBBTkQgdGFyZ2V0ID09PSAnZWMyJywgc28gYSBkZWZhdWx0IGVjMlxuICAgICAgICAgIC8vIGRlcGxveSBkb2Vzbid0IGFsc28gc3VyZmFjZSBhIG1hbnVhbCByZWdpc3RlciBzdGVwLlxuICAgICAgICAgIGF1dG9Jbml0OiBvcHRpb25zLmF1dG9Jbml0ICE9PSBmYWxzZSxcbiAgICAgICAgICBidWlsZEJvb3RzdHJhcDogb3B0aW9ucy5idWlsZEJvb3RzdHJhcCA9PT0gdHJ1ZSB8fCBlbmFibGVkTG9hZElkcy5pbmNsdWRlcygncGx1Z2lucycpLFxuICAgICAgICAgIHNtb2tlVGVzdDogb3B0aW9ucy53aXRoU21va2VUZXN0ID09PSB0cnVlLFxuICAgICAgICAgIGV2ZW50czogb3B0aW9ucy53aXRoRXZlbnRzID09PSB0cnVlLFxuICAgICAgICAgIHN0ZXBzOiAob3B0aW9ucy5wb3N0U3RlcCA/PyBbXSkgYXMgc3RyaW5nW10sXG4gICAgICAgIH07XG4gICAgICAgIC8vIEFkbWluIGNyZWRlbnRpYWxzIGZvcndhcmRlZCBhcyBlbnYgc28gcmVnaXN0ZXIgcnVucyBub24taW50ZXJhY3RpdmVseS5cbiAgICAgICAgY29uc3QgYWRtaW5FbnY6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmFkbWluRW1haWwgPT09ICdzdHJpbmcnKSBhZG1pbkVudi5QTEFURk9STV9JREVOVElGSUVSID0gb3B0aW9ucy5hZG1pbkVtYWlsO1xuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuYWRtaW5QYXNzd29yZCA9PT0gJ3N0cmluZycpIGFkbWluRW52LlBMQVRGT1JNX1BBU1NXT1JEID0gb3B0aW9ucy5hZG1pblBhc3N3b3JkO1xuXG4gICAgICAgIC8vIDIuIE9wdGlvbmFsbHkgcGFyc2UgYSBuYXR1cmFsLWxhbmd1YWdlIGdvYWwgdG8gZmlsbCBhbnkgR0FQUyAoYmVzdC1lZmZvcnQpLlxuICAgICAgICBsZXQgdGFyZ2V0OiBUYXJnZXRJZCB8IHVuZGVmaW5lZCA9IGlzVGFyZ2V0SWQob3B0aW9ucy50YXJnZXQpID8gb3B0aW9ucy50YXJnZXQgOiB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChvcHRpb25zLnByb21wdCkge1xuICAgICAgICAgIGlmIChpc0FpQ29uZmlndXJlZChhaU9wdHMpKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBhd2FpdCBwYXJzZUdvYWwob3B0aW9ucy5wcm9tcHQsIGFpT3B0cyk7XG4gICAgICAgICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgICAgICAgIGlmICghdGFyZ2V0ICYmIGlzVGFyZ2V0SWQocGFyc2VkLnRhcmdldCkpIHRhcmdldCA9IHBhcnNlZC50YXJnZXQ7XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKHBhcnNlZCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoayAhPT0gJ3RhcmdldCcgJiYgcGFyYW1zW2tdID09PSB1bmRlZmluZWQgJiYgdiAhPT0gdW5kZWZpbmVkKSBwYXJhbXNba10gPSB2O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHByaW50V2FybmluZygnQSAtLXByb21wdCB3YXMgZ2l2ZW4gYnV0IG5vIEFJIGtleSBpcyBzZXQg4oCUIGlnbm9yaW5nIGl0IGFuZCB1c2luZyBmbGFncyBvbmx5LiBTZXQgQU5USFJPUElDX0FQSV9LRVkgKG9yIC0tYWktcHJvdmlkZXIgKyBpdHMga2V5KS4nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyAzLiBPcHRpb25hbCBmYWlsdXJlIGRpYWdub3NpcyAoaW5kZXBlbmRlbnQgb2YgYSBkZXBsb3kgcGxhbikuXG4gICAgICAgIGlmIChvcHRpb25zLmRpYWdub3NlKSB7XG4gICAgICAgICAgbGV0IGZhaWx1cmVUZXh0OiBzdHJpbmc7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZhaWx1cmVUZXh0ID0gcmVhZEZpbGVTeW5jKG9wdGlvbnMuZGlhZ25vc2UsICd1dGYtOCcpO1xuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgcHJpbnRFcnJvcihgQ2Fubm90IHJlYWQgLS1kaWFnbm9zZSBmaWxlOiAke29wdGlvbnMuZGlhZ25vc2V9YCk7XG4gICAgICAgICAgICBwcm9jZXNzLmV4aXRDb2RlID0gMTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgZGlhZ25vc2lzID0gaXNBaUNvbmZpZ3VyZWQoYWlPcHRzKSA/IGF3YWl0IGRpYWdub3NlRmFpbHVyZShmYWlsdXJlVGV4dCwgYWlPcHRzKSA6IG51bGw7XG4gICAgICAgICAgLy8gV2l0aCAtLWpzb24sIHRoZSBkaWFnbm9zaXMgSVMgdGhlIG1hY2hpbmUtcmVhZGFibGUgb3V0cHV0IOKAlCBlbWl0IGl0XG4gICAgICAgICAgLy8gYWxvbmUgKGRvbid0IGFsc28gcHJpbnQgdGV4dCwgd2hpY2ggd291bGQgY29ycnVwdCB0aGUgSlNPTiBzdHJlYW0pLlxuICAgICAgICAgIGlmIChvcHRpb25zLmpzb24pIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHsgc3VjY2VzczogdHJ1ZSwgZXhlY3V0aW9uSWQsIGRpYWdub3NpcyB9LCBudWxsLCAyKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChkaWFnbm9zaXMpIHtcbiAgICAgICAgICAgIHByaW50U2VjdGlvbignRmFpbHVyZSBkaWFnbm9zaXMnKTtcbiAgICAgICAgICAgIHByaW50SW5mbyhkaWFnbm9zaXMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcmludFdhcm5pbmcoJ0RpYWdub3NpcyB1bmF2YWlsYWJsZSAobm8gQUkga2V5IGNvbmZpZ3VyZWQgb3IgdGhlIG1vZGVsIGNvdWxkIG5vdCBiZSByZWFjaGVkKS4nKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCF0YXJnZXQpIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEVDMiBhdXRvLWluaXQgKE9OIGJ5IGRlZmF1bHQpIGxvYWRzIHBsdWdpbnMvY29tcGxpYW5jZS9zYW1wbGVzIE9OIFRIRSBCT1gsIHNvIHRoZVxuICAgICAgICAvLyBsb2NhbCBsb2FkIHBpY2tlciDigJQgYW5kIHRoZSBsb2FkLWZvbGRlciBmZXRjaCBpdCB0cmlnZ2VycyDigJQgaXMgcG9pbnRsZXNzLiBTa2lwIGJvdGhcbiAgICAgICAgLy8gKHRoZSBpbnN0YW5jZSBoYXMgaXRzIG93biBjaGVja291dCkuIGAtLW5vLWF1dG8taW5pdGAgcmVzdG9yZXMgdGhlIGxvY2FsIGxvYWRzL3Byb21wdHMuXG4gICAgICAgIGlmIChvcHRpb25zLmF1dG9Jbml0ICE9PSBmYWxzZSAmJiB0YXJnZXQgPT09ICdlYzInKSB7XG4gICAgICAgICAgd2lsbFByb21wdExvYWRzID0gZmFsc2U7XG4gICAgICAgICAgZW5hYmxlZExvYWRJZHMgPSBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDQuIE5lZWQgYSB0YXJnZXQgdG8gYXNzZW1ibGUgYSBwbGFuLlxuICAgICAgICBpZiAoIXRhcmdldCkge1xuICAgICAgICAgIHByaW50RXJyb3IoYE5vIHRhcmdldCBzcGVjaWZpZWQuIFBhc3MgLS10YXJnZXQgPCR7VEFSR0VUX0lEUy5qb2luKCd8Jyl9PiBvciBkZXNjcmliZSB0aGUgZ29hbCB3aXRoIC0tcHJvbXB0LmApO1xuICAgICAgICAgIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNwZWMgPSBUQVJHRVRTW3RhcmdldF07XG4gICAgICAgIGxldCBjd2QgPSBwcm9jZXNzLmN3ZCgpO1xuXG4gICAgICAgIC8vIDRiLiBUZWFyZG93biBtb2RlIOKAlCB0aGUgZGVzdHJveSBjb3VudGVycGFydCBvZiBwcm92aXNpb25pbmcgKHNlZSBydW5UZWFyZG93bikuXG4gICAgICAgIGlmIChvcHRpb25zLnRlYXJkb3duKSB7XG4gICAgICAgICAgYXdhaXQgcnVuVGVhcmRvd24oc3BlYywgdGFyZ2V0LCBjd2QsIGV4ZWN1dGlvbklkLCBvcHRpb25zKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBNYWtlIHByZXZpb3VzbHktZmV0Y2hlZCBzaW5nbGUtYmluYXJ5IHRvb2xzIChlLmcuIHlxKSB2aXNpYmxlIHRvIHRoZVxuICAgICAgICAvLyBwcmVyZXEgY2hlY2tzICsgdGhlIGRlcGxveSDigJQgdGhleSBsaXZlIGluIHRoZSB0b29scyBjYWNoZSwgbm90IG9uIHRoZVxuICAgICAgICAvLyBzeXN0ZW0gUEFUSC4gKEJvdGggYGhhcygpYCBhbmQgdGhlIGRlcGxveSdzIGBiYXNoIC1sY2AgaW5oZXJpdCB0aGlzLilcbiAgICAgICAgd2l0aFRvb2xzT25QYXRoKCk7XG4gICAgICAgIGxldCBwcmVyZXFzID0gY2hlY2tQcmVyZXFzKHRhcmdldCwgeyBib290c3RyYXA6IHdhbnRCb290c3RyYXAsIHdpdGhQbHVnaW5zOiB3aWxsUHJvbXB0TG9hZHMgfHwgZW5hYmxlZExvYWRJZHMuaW5jbHVkZXMoJ3BsdWdpbnMnKSB9KTtcbiAgICAgICAgY29uc3QgeyBjb21tYW5kLCBtaXNzaW5nIH0gPSBhc3NlbWJsZUNvbW1hbmQoc3BlYywgcGFyYW1zKTtcbiAgICAgICAgY29uc3QgdXJsID0gZGVyaXZlSGVhbHRoVXJsKHRhcmdldCwgcGFyYW1zKTtcblxuICAgICAgICAvLyBTcGFyc2UgYm9vdHN0cmFwIGNsb25lIGNvbW1hbmQgKGNvbW1vbiBiYXNlICsgdGFyZ2V0ICsgc2VsZWN0ZWQgbG9hZHMpLlxuICAgICAgICAvLyBJbnRlcmFjdGl2ZSBsb2FkcyBhcmUgY2hvc2VuIEFGVEVSIHRoZSBjbG9uZSwgc28gdGhlIGNsb25lIHN0YXlzIG1pbmltYWwg4oCUXG4gICAgICAgIC8vIGVhY2ggcGlja2VkIGxvYWQncyBmb2xkZXIgaXMgZmV0Y2hlZCB0aGVuIHZpYSBhbiBhZGRpdGl2ZSBzcGFyc2UgcmUtc3luYy5cbiAgICAgICAgY29uc3Qgc3BhcnNlUGF0aHMgPSBzcGFyc2VQYXRoc0Zvcih0YXJnZXQsIGVuYWJsZWRMb2FkSWRzKTtcbiAgICAgICAgY29uc3QgYm9vdHN0cmFwID0gcmVzb2x2ZUJvb3RzdHJhcChcbiAgICAgICAgICB7IHJlcG86IHR5cGVvZiBvcHRpb25zLnJlcG8gPT09ICdzdHJpbmcnID8gb3B0aW9ucy5yZXBvIDogdW5kZWZpbmVkLCByZWY6IG9wdGlvbnMucmVmLCB3b3JrZGlyOiBvcHRpb25zLndvcmtkaXIsIGZ1bGw6ICFnaXRTdXBwb3J0c1NwYXJzZUNoZWNrb3V0KCkgfSxcbiAgICAgICAgICBzcGFyc2VQYXRocyxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgYm9vdHN0cmFwQ21kID0gd2FudEJvb3RzdHJhcCA/IGJvb3RzdHJhcENvbW1hbmQoYm9vdHN0cmFwKSA6IG51bGw7XG5cbiAgICAgICAgLy8gUmVzb2x2ZSBwb3N0LWluc3RhbGwgc3RlcHMgKHJlZ2lzdGVyIOKGkiBzbW9rZSDihpIgZXZlbnRzIOKGkiBjdXN0b20pLiBSZS1yZXNvbHZlZFxuICAgICAgICAvLyBhZnRlciB0aGUgcG9zdC1jbG9uZSBsb2FkIHByb21wdHMgKHNlZSBiZWxvdykgd2hlbiB0aG9zZSBydW4gaW50ZXJhY3RpdmVseS5cbiAgICAgICAgbGV0IHsgc3RlcHM6IHBvc3RTdGVwcywgc2tpcHBlZDogc2tpcHBlZFN0ZXBzIH0gPSByZXNvbHZlUG9zdFN0ZXBzKHtcbiAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIHJlZ2lvbjogdHlwZW9mIHBhcmFtcy5yZWdpb24gPT09ICdzdHJpbmcnID8gcGFyYW1zLnJlZ2lvbiA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBlbmFibGVkTG9hZElkcyxcbiAgICAgICAgICAuLi5wb3N0U3RlcEZsYWdzLFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAob3B0aW9ucy5qc29uKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgICAgIGV4ZWN1dGlvbklkLFxuICAgICAgICAgICAgdGFyZ2V0LFxuICAgICAgICAgICAgcHJlcmVxcyxcbiAgICAgICAgICAgIHByZXJlcXNTYXRpc2ZpZWQ6IHByZXJlcXNTYXRpc2ZpZWQocHJlcmVxcyksXG4gICAgICAgICAgICBtaXNzaW5nSW5wdXRzOiBtaXNzaW5nLm1hcCgobSkgPT4gKHsgZmxhZzogbS5mbGFnLCBkZXNjcmlwdGlvbjogbS5kZXNjcmlwdGlvbiB9KSksXG4gICAgICAgICAgICBib290c3RyYXA6IGJvb3RzdHJhcENtZCxcbiAgICAgICAgICAgIHNwYXJzZVBhdGhzOiB3YW50Qm9vdHN0cmFwID8gc3BhcnNlUGF0aHMgOiBudWxsLFxuICAgICAgICAgICAgY29tbWFuZCxcbiAgICAgICAgICAgIHBvc3RTdGVwczogcG9zdFN0ZXBzLm1hcCgocykgPT4gKHsgaWQ6IHMuaWQsIGxhYmVsOiBzLmxhYmVsLCBjb21tYW5kOiBzLmNvbW1hbmQgfSkpLFxuICAgICAgICAgICAgc2tpcHBlZFBvc3RTdGVwczogc2tpcHBlZFN0ZXBzLFxuICAgICAgICAgIH0sIG51bGwsIDIpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyA1LiBQcmludCB0aGUgcGxhbiAoc2hvd24gYmVmb3JlIHRoZSBnYXRlZCBleGVjdXRpb24gYmVsb3cpLlxuICAgICAgICBwcmludFNlY3Rpb24oYFByb3Zpc2lvbiBwbGFuIOKAlCAke3NwZWMubGFiZWx9YCk7XG4gICAgICAgIHByaW50S2V5VmFsdWUoeyAnVGFyZ2V0JzogdGFyZ2V0LCAnQmVzdCBmb3InOiBzcGVjLmJlc3RGb3IsICdDb3N0Jzogc3BlYy5jb3N0IH0pO1xuXG4gICAgICAgIHByaW50U2VjdGlvbignUHJlcmVxdWlzaXRlcycpO1xuICAgICAgICBmb3IgKGNvbnN0IGMgb2YgcHJlcmVxcykgcHJpbnRJbmZvKGAke2Mub2sgPyAn4pyTJyA6ICfinJcnfSAke2MubmFtZX0g4oCUICR7Yy5kZXRhaWx9YCk7XG4gICAgICAgIGlmICghcHJlcmVxc1NhdGlzZmllZChwcmVyZXFzKSkgcHJpbnRXYXJuaW5nKCdSZXNvbHZlIHRoZSBmYWlsaW5nIHByZXJlcXVpc2l0ZXMgYWJvdmUgYmVmb3JlIGRlcGxveWluZy4nKTtcblxuICAgICAgICBpZiAobWlzc2luZy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcHJpbnRTZWN0aW9uKCdNaXNzaW5nIHJlcXVpcmVkIGlucHV0cycpO1xuICAgICAgICAgIGZvciAoY29uc3QgbSBvZiBtaXNzaW5nKSBwcmludEluZm8oYCAgLS0ke20uZmxhZ30gICgke20uZGVzY3JpcHRpb259KWApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGJvb3RzdHJhcENtZCkge1xuICAgICAgICAgIHByaW50U2VjdGlvbignQm9vdHN0cmFwIChzcGFyc2UgZ2l0IGNsb25lLCBydW5zIGZpcnN0KScpO1xuICAgICAgICAgIHByaW50SW5mbyhgQ2xvbmUgJHtib290c3RyYXAucmVwb30gQCAke2Jvb3RzdHJhcC5yZWZ9IOKGkiAke2Jvb3RzdHJhcC53b3JrZGlyfTsgZm9sZGVyczogJHtzcGFyc2VQYXRocy5qb2luKCcsICcpfWApO1xuICAgICAgICAgIHByaW50SW5mbyhib290c3RyYXBDbWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJpbnRTZWN0aW9uKCdDb21tYW5kIHRvIHJ1bicpO1xuICAgICAgICBwcmludEluZm8oY29tbWFuZCk7XG5cbiAgICAgICAgaWYgKHBvc3RTdGVwcy5sZW5ndGggPiAwIHx8IHNraXBwZWRTdGVwcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcHJpbnRTZWN0aW9uKCdQb3N0LWluc3RhbGwgc3RlcHMnKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IHMgb2YgcG9zdFN0ZXBzKSBwcmludEluZm8oYOKAoiAke3MubGFiZWx9XFxuICAgICR7cy5jb21tYW5kfWApO1xuICAgICAgICAgIGZvciAoY29uc3QgcyBvZiBza2lwcGVkU3RlcHMpIHByaW50V2FybmluZyhgU2tpcHBlZCAke3MuaWR9OiAke3MucmVhc29ufWApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gNi4gQW55IG1pc3NpbmcgcmVxdWlyZWQgcHJlcmVxIHRoYXQncyBhIHNpbmdsZSBzdGF0aWMgYmluYXJ5IChlLmcuIHlxKVxuICAgICAgICAvLyBjYW4gYmUgZmV0Y2hlZCBpbnRvIHRoZSB0b29scyBjYWNoZSBpbnN0ZWFkIG9mIGEgc3lzdGVtIGluc3RhbGwg4oCUIG5vXG4gICAgICAgIC8vIGJyZXcvYXB0LiBPZmZlciBpdCwgdGhlbiByZS1jaGVjayAodGhlIGNhY2hlIGRpciBpcyBhbHJlYWR5IG9uIFBBVEgpLlxuICAgICAgICBjb25zdCBmZXRjaGFibGUgPSBwcmVyZXFzLmZpbHRlcigoYykgPT4gIWMub2sgJiYgYy5yZXF1aXJlZCAmJiBpc0ZldGNoYWJsZShjLm5hbWUpKTtcbiAgICAgICAgaWYgKGZldGNoYWJsZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgbmFtZXMgPSBmZXRjaGFibGUubWFwKChjKSA9PiBjLm5hbWUpLmpvaW4oJywgJyk7XG4gICAgICAgICAgaWYgKGF3YWl0IGNvbmZpcm0oYFxcbiR7bmFtZXN9IG5vdCBpbnN0YWxsZWQg4oCUIGZldGNoIHRoZSBvZmZpY2lhbCBzdGF0aWMgYmluYXJ5IGludG8gJHtUT09MU19ESVJ9IChubyBzeXN0ZW0gaW5zdGFsbCk/YCwgb3B0aW9ucy55ZXMpKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGMgb2YgZmV0Y2hhYmxlKSB7XG4gICAgICAgICAgICAgIHByaW50SW5mbyhgRmV0Y2hpbmcgJHtjLm5hbWV94oCmYCk7XG4gICAgICAgICAgICAgIGlmICghZmV0Y2hUb29sKGMubmFtZSkpIHByaW50V2FybmluZyhgQ291bGRuJ3QgZmV0Y2ggJHtjLm5hbWV9IOKAlCBpbnN0YWxsIGl0IG1hbnVhbGx5IGFuZCByZS1ydW4uYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwcmVyZXFzID0gY2hlY2tQcmVyZXFzKHRhcmdldCwgeyBib290c3RyYXA6IHdhbnRCb290c3RyYXAsIHdpdGhQbHVnaW5zOiB3aWxsUHJvbXB0TG9hZHMgfHwgZW5hYmxlZExvYWRJZHMuaW5jbHVkZXMoJ3BsdWdpbnMnKSB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyA3Yi4gR2F0ZWQgZXhlY3V0aW9uLiBDaGVjayBwcmVyZXFzIC8gcmVxdWlyZWQgaW5wdXRzIGZpcnN0IOKAlCB0aGlzIGFsc29cbiAgICAgICAgLy8gY2F0Y2hlcyBhIG1pc3NpbmcgYGdpdGAgd2hlbiBib290c3RyYXBwaW5nLlxuICAgICAgICBjb25zdCBibG9ja2VkID0gZXhlY3V0aW9uQmxvY2tlZChwcmVyZXFzLCBtaXNzaW5nKTtcbiAgICAgICAgaWYgKGJsb2NrZWQpIHtcbiAgICAgICAgICBwcmludEVycm9yKGBDYW4ndCBzdGFydCBqdXN0IHlldCDigJQgJHtibG9ja2VkfS4gUmVzb2x2ZSB0aGF0IGFuZCByZS1ydW4uYCk7XG4gICAgICAgICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ29tbWl0IGdhdGUg4oCUIGNvbmZpcm0gQkVGT1JFIGFueSBzaWRlIGVmZmVjdCAoY2xvbmUsIC5lbnYsIGRlcGxveSkgc28gYSBcIk5vXCJcbiAgICAgICAgLy8gbGVhdmVzIG5vdGhpbmcgYmVoaW5kLiBUaGUgcG9ydCBjaGVjayArIG9wdGlvbmFsIGxvYWRzICsgLmVudiBiZWxvdyBhcmUgcGFydCBvZlxuICAgICAgICAvLyBleGVjdXRpbmcgdGhlIGFncmVlZC10byBwbGFuLlxuICAgICAgICBpZiAoIShhd2FpdCBjb25maXJtKGBcXG5Qcm9jZWVkIHdpdGggcHJvdmlzaW9uaW5nICR7c3BlYy5sYWJlbH0/YCwgb3B0aW9ucy55ZXMpKSkge1xuICAgICAgICAgIHByaW50V2FybmluZygnTm8gcHJvYmxlbSDigJQgbm90aGluZyB3YXMgY2hhbmdlZC4nKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyA3YS83Yi4gU3BhcnNlLWNsb25lIChpZiAtLXJlcG8gb3IgYWNjZXB0ZWQgaW50ZXJhY3RpdmVseSkgKyBsb2NhdGUgdGhlIGRlcGxveVxuICAgICAgICAvLyBlbnRyeXBvaW50LCByZXBvaW50aW5nIGN3ZCBpbnRvIHRoZSBjbG9uZS4gU2VlIGJvb3RzdHJhcEFuZExvY2F0ZS5cbiAgICAgICAgY29uc3QgbG9jYXRlZCA9IGF3YWl0IGJvb3RzdHJhcEFuZExvY2F0ZShzcGVjLCBib290c3RyYXAsIGJvb3RzdHJhcENtZCwgc3BhcnNlUGF0aHMsIGN3ZCwgb3B0aW9ucyk7XG4gICAgICAgIGN3ZCA9IGxvY2F0ZWQuY3dkO1xuICAgICAgICBjb25zdCBib290c3RyYXBwZWQgPSBsb2NhdGVkLmJvb3RzdHJhcHBlZDtcbiAgICAgICAgaWYgKCFsb2NhdGVkLm9rKSByZXR1cm47XG5cbiAgICAgICAgLy8gSG9zdC1wb3J0IHByZS1mbGlnaHQg4oCUIG5vdyB0aGF0IHRoZSBkZXBsb3kgc291cmNlIGlzIG9uIGRpc2sgKHBvc3QtY2xvbmUpLFxuICAgICAgICAvLyBkZXJpdmUgdGhlIHBvcnRzIGZyb20gaXQgKGNvbXBvc2UgLyBzZXR1cC5zaCkgYW5kIHN0b3Agb24gYSBmYXRhbCBjb25mbGljdFxuICAgICAgICAvLyBiZWZvcmUgZGVwbG95aW5nLiBTZWUgcHJlZmxpZ2h0UG9ydHMuXG4gICAgICAgIGlmICghKGF3YWl0IHByZWZsaWdodFBvcnRzKHNwZWMsIHRhcmdldCwgY3dkKSkpIHtcbiAgICAgICAgICBwcm9jZXNzLmV4aXRDb2RlID0gMTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBPcHQtaW4gbG9hZHMg4oCUIG9mZmVyZWQgQUZURVIgdGhlIGNsb25lIChzZWUgcmVzb2x2ZUxvYWRzSW50ZXJhY3RpdmVseSk7IGl0XG4gICAgICAgIC8vIHByb21wdHMsIGFkZGl0aXZlbHkgc3BhcnNlLWZldGNoZXMgdGhlIHBpY2tlZCBmb2xkZXJzLCBhbmQgcmUtcmVzb2x2ZXMgdGhlXG4gICAgICAgIC8vIHBvc3QtaW5zdGFsbCBzdGVwcyB3aXRoIHRoZSBzZWxlY3Rpb25zLlxuICAgICAgICBpZiAod2lsbFByb21wdExvYWRzKSB7XG4gICAgICAgICAgY29uc3QgbG9hZGVkID0gYXdhaXQgcmVzb2x2ZUxvYWRzSW50ZXJhY3RpdmVseShcbiAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICAgIHVybCxcbiAgICAgICAgICAgIHR5cGVvZiBwYXJhbXMucmVnaW9uID09PSAnc3RyaW5nJyA/IHBhcmFtcy5yZWdpb24gOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBjd2QsXG4gICAgICAgICAgICBib290c3RyYXBwZWQsXG4gICAgICAgICAgICBib290c3RyYXAsXG4gICAgICAgICAgICBwb3N0U3RlcEZsYWdzLFxuICAgICAgICAgICk7XG4gICAgICAgICAgZW5hYmxlZExvYWRJZHMgPSBsb2FkZWQuZW5hYmxlZExvYWRJZHM7XG4gICAgICAgICAgcG9zdFN0ZXBzID0gbG9hZGVkLnN0ZXBzO1xuICAgICAgICAgIHNraXBwZWRTdGVwcyA9IGxvYWRlZC5za2lwcGVkO1xuICAgICAgICB9XG4gICAgICAgIC8vIGxvY2FsL21pbmlrdWJlJ3Mgc2V0dXAuc2ggUkVRVUlSRVMgYSBgLmVudmAgYW5kIGFib3J0cyB3aXRob3V0IGl0IOKAlCBjcmVhdGVcbiAgICAgICAgLy8gaXQgZnJvbSAuZW52LmV4YW1wbGUgd2l0aCBnZW5lcmF0ZWQgc2VjcmV0cyBzbyB0aGUgZGVwbG95IGlzIG5vbi1pbnRlcmFjdGl2ZS5cbiAgICAgICAgLy8gZWMyL2ZhcmdhdGUgYWxzbyBzaGlwIGEgYC5lbnYuZXhhbXBsZWAsIGJ1dCB0aGVpciBzZXR1cC5zaCBuZXZlciByZWFkcyBhXG4gICAgICAgIC8vIGxvY2FsIGAuZW52YCAodGhlIGluc3RhbmNlIGhhbmRsZXMgaXRzIG93bjsgRmFyZ2F0ZSB1c2VzIFNlY3JldHMgTWFuYWdlciB2aWFcbiAgICAgICAgLy8gaW5pdC1zZWNyZXRzLnNoKSwgc28gd2UgbXVzdCBOT1QgZ2VuZXJhdGUgb25lIGZvciB0aGVtLlxuICAgICAgICBpZiAoKHRhcmdldCA9PT0gJ2xvY2FsJyB8fCB0YXJnZXQgPT09ICdtaW5pa3ViZScpICYmIGVudkZpbGVNaXNzaW5nKGN3ZCwgc3BlYy5kaXIpKSB7XG4gICAgICAgICAgaWYgKGF3YWl0IGNvbmZpcm0oYFxcbiR7c3BlYy5kaXJ9Ly5lbnYgbm90IGZvdW5kIOKAlCBjcmVhdGUgaXQgZnJvbSAuZW52LmV4YW1wbGUgKGdlbmVyYXRlcyBzZWNyZXRzOyBlZGl0IGxhdGVyIGZvciBvcHRpb25hbCBpbnRlZ3JhdGlvbnMgbGlrZSBPQXV0aCk/YCwgb3B0aW9ucy55ZXMpKSB7XG4gICAgICAgICAgICBjb25zdCBuID0gY3JlYXRlRW52RmlsZShjd2QsIHNwZWMuZGlyKTtcbiAgICAgICAgICAgIHByaW50U3VjY2VzcyhgQ3JlYXRlZCAke3NwZWMuZGlyfS8uZW52IOKAlCAke259IHNlY3JldChzKSBnZW5lcmF0ZWQuYCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHByaW50V2FybmluZygnQ29udGludWluZyB3aXRob3V0IC5lbnYg4oCUIHNldHVwLnNoIHdpbGwgYWJvcnQgaWYgaXQgc3RheXMgbWlzc2luZy4nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gN2MuIFJ1biB0aGUgZGVwbG95IHdpdGggYSBib3VuZGVkIGF1dG8tZml4ICsgcmV0cnkgbG9vcCAoc2VlIHJ1bkRlcGxveVdpdGhSZXRyeSkuXG4gICAgICAgIGNvbnN0IHsgc3VjY2VlZGVkLCBydW5QYXJhbXMgfSA9IGF3YWl0IHJ1bkRlcGxveVdpdGhSZXRyeShzcGVjLCB1cmwsIGN3ZCwgcGFyYW1zLCBhaU9wdHMsIG9wdGlvbnMpO1xuICAgICAgICBpZiAoIXN1Y2NlZWRlZCkgeyBwcm9jZXNzLmV4aXRDb2RlID0gMTsgcmV0dXJuOyB9XG4gICAgICAgIHByaW50U3VjY2VzcygnRGVwbG95IGNvbW1hbmQgY29tcGxldGVkLicpO1xuXG4gICAgICAgIC8vIDdkLiBTRVMgcG9zdC1kZXBsb3kgZ3VpZGFuY2UgKGFzeW5jIERLSU0gKyBzYW5kYm94ICsgYm91bmNlIHRvcGljKS5cbiAgICAgICAgLy8gU0VTIGlzIHByb3Zpc2lvbmVkIEJZIERFRkFVTFQgb24gQVdTIGRlcGxveXMsIHNvIHN1cmZhY2UgdGhlIGd1aWRhbmNlXG4gICAgICAgIC8vIGZvciBlYzIvZmFyZ2F0ZSB1bmxlc3MgdGhlIG9wZXJhdG9yIG9wdGVkIG91dCB3aXRoIC0tbm8tZW1haWwuXG4gICAgICAgIGNvbnN0IHNlc1Byb3Zpc2lvbmVkID0gKHRhcmdldCA9PT0gJ2VjMicgfHwgdGFyZ2V0ID09PSAnZmFyZ2F0ZScpICYmIHJ1blBhcmFtcy5ub0VtYWlsICE9PSB0cnVlO1xuICAgICAgICBpZiAoc2VzUHJvdmlzaW9uZWQpIHtcbiAgICAgICAgICBwcmludFNlY3Rpb24oJ1NFUyDigJQgbmV4dCBzdGVwcycpO1xuICAgICAgICAgIGZvciAoY29uc3QgbGluZSBvZiBzZXNQb3N0RGVwbG95R3VpZGFuY2UoKSkgcHJpbnRJbmZvKGDigKIgJHtsaW5lfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gN2UuIFZlcmlmeSBoZWFsdGggKENSRUFURV9DT01QTEVURSAhPSBzZXJ2aW5nKS5cbiAgICAgICAgaWYgKHVybCkge1xuICAgICAgICAgIHByaW50U2VjdGlvbignVmVyaWZ5aW5nIGhlYWx0aCcpO1xuICAgICAgICAgIC8vIE1pbmlrdWJlIHJlYWNoZXMgdGhlIGdhdGV3YXkgdmlhIGEga3ViZWN0bCBwb3J0LWZvcndhcmQgdGhhdCBzZXR1cC5zaFxuICAgICAgICAgIC8vIGJhY2tncm91bmRzIGFuZCB0aGF0IGNhbiBkaWUvZmFpbCB0byBiaW5kIOKAlCAocmUpc3RhcnQgaXQgYmVmb3JlIHBvbGxpbmdcbiAgICAgICAgICAvLyBzbyB3ZSBkb24ndCBzaXQgYXQgdGhlIGdhdGUgb24gYSBkZWFkIGZvcndhcmQgd2hpbGUgdGhlIHBvZHMgYXJlIGZpbmUuXG4gICAgICAgICAgaWYgKHRhcmdldCA9PT0gJ21pbmlrdWJlJykge1xuICAgICAgICAgICAgYXdhaXQgZW5zdXJlTWluaWt1YmVHYXRld2F5KHVybCwgeyBvbkluZm86IChtKSA9PiBwcmludEluZm8obSkgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHByaW50SW5mbyhgUG9sbGluZyAke3VybH0vaGVhbHRoIOKApmApO1xuICAgICAgICAgIGNvbnN0IGhlYWx0aCA9IGF3YWl0IHdhaXRIZWFsdGh5KHVybCwgeyBvblRpY2s6IChtKSA9PiBwcmludEluZm8obSkgfSk7XG4gICAgICAgICAgLy8gR3JlZW4gb25seSB3aGVuIGZ1bGx5IHJlYWR5OyBhIFwiaGVhbHRoIE9LIGJ1dCAvcmVhZHkgbmV2ZXIgY2FtZVwiIHByb2NlZWQtXG4gICAgICAgICAgLy8gYW55d2F5IHN0YXRlIGlzIGhlYWx0aHk6dHJ1ZSBidXQgZGVncmFkZWQg4oaSIHdhcm4gc28gaXQgZG9lc24ndCByZWFkIGFzIGRvbmUuXG4gICAgICAgICAgKGhlYWx0aC5oZWFsdGh5ICYmIGhlYWx0aC5yZWFkeSA/IHByaW50U3VjY2VzcyA6IHByaW50V2FybmluZykoYCR7aGVhbHRoLnVybH0g4oCUICR7aGVhbHRoLmRldGFpbH1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDdmLiBQb3N0LWluc3RhbGwgc3RlcHMgKHJlZ2lzdGVyICsgb3B0LWluIGxvYWRzLCBzbW9rZSB0ZXN0LCBldmVudHMsIGN1c3RvbSkuXG4gICAgICAgIC8vIFNlZSBydW5Qb3N0U3RlcHMg4oCUIGl0IHN1cmZhY2VzIHJlZ2lzdGVyICsgdGhlIGV2ZW50cyBidW5kbGUgYXMgbWFudWFsIGluLVZQQ1xuICAgICAgICAvLyBuZXh0LXN0ZXBzIG9uIEVDMi9GYXJnYXRlIGluc3RlYWQgb2YgYXV0by1ydW5uaW5nIChhbmQgZmFpbGluZykgdGhlbSBsb2NhbGx5LlxuICAgICAgICBhd2FpdCBydW5Qb3N0U3RlcHMocG9zdFN0ZXBzLCBza2lwcGVkU3RlcHMsIHRhcmdldCwgY3dkLCBhZG1pbkVudiwgeyB5ZXM6IG9wdGlvbnMueWVzLCBhdXRvUnVuOiB3aWxsUHJvbXB0TG9hZHMsIGF1dG9Jbml0OiBwb3N0U3RlcEZsYWdzLmF1dG9Jbml0IH0pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaGFuZGxlRXJyb3IoZXJyb3IsIEVSUk9SX0NPREVTLkdFTkVSQUwsIHtcbiAgICAgICAgICBkZWJ1ZzogcHJvZ3JhbS5vcHRzKCkuZGVidWcsXG4gICAgICAgICAgZXhpdDogdHJ1ZSxcbiAgICAgICAgICBjb250ZXh0OiB7IGNvbW1hbmQ6ICdwcm92aXNpb24nLCBleGVjdXRpb25JZCB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbn1cbiJdfQ==
package/package.json CHANGED
@@ -85,7 +85,7 @@
85
85
  "access": "public",
86
86
  "registry": "https://registry.npmjs.org/"
87
87
  },
88
- "version": "3.4.100",
88
+ "version": "3.4.101",
89
89
  "bugs": {
90
90
  "url": "https://github.com/mwashburn160/pipeline-builder/issues"
91
91
  },