@workflow/builders 5.0.0-beta.26 → 5.0.0-beta.28

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.
Files changed (53) hide show
  1. package/dist/base-builder-logging.test.js +4 -4
  2. package/dist/base-builder.d.ts +16 -3
  3. package/dist/base-builder.d.ts.map +1 -1
  4. package/dist/base-builder.js +111 -35
  5. package/dist/config-helpers.d.ts +2 -0
  6. package/dist/config-helpers.d.ts.map +1 -1
  7. package/dist/config-helpers.js +62 -1
  8. package/dist/config-helpers.test.d.ts +2 -0
  9. package/dist/config-helpers.test.d.ts.map +1 -0
  10. package/dist/config-helpers.test.js +17 -0
  11. package/dist/constants.d.ts +2 -0
  12. package/dist/constants.d.ts.map +1 -1
  13. package/dist/constants.js +10 -1
  14. package/dist/constants.test.js +3 -2
  15. package/dist/discover-entries-esbuild-plugin.d.ts +3 -1
  16. package/dist/discover-entries-esbuild-plugin.d.ts.map +1 -1
  17. package/dist/discover-entries-esbuild-plugin.js +6 -2
  18. package/dist/fast-discovery.d.ts +6 -0
  19. package/dist/fast-discovery.d.ts.map +1 -1
  20. package/dist/fast-discovery.js +116 -5
  21. package/dist/fast-discovery.test.js +36 -1
  22. package/dist/index.d.ts +6 -2
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +7 -3
  25. package/dist/node-compat-banner.d.ts +15 -0
  26. package/dist/node-compat-banner.d.ts.map +1 -0
  27. package/dist/node-compat-banner.js +15 -0
  28. package/dist/optional-pg-native-alias.d.ts +2 -0
  29. package/dist/optional-pg-native-alias.d.ts.map +1 -0
  30. package/dist/optional-pg-native-alias.js +3 -0
  31. package/dist/optional-pg-native.d.ts +3 -0
  32. package/dist/optional-pg-native.d.ts.map +1 -0
  33. package/dist/optional-pg-native.js +3 -0
  34. package/dist/optional-typescript-alias.d.ts +2 -0
  35. package/dist/optional-typescript-alias.d.ts.map +1 -0
  36. package/dist/optional-typescript-alias.js +3 -0
  37. package/dist/optional-typescript.d.ts +3 -0
  38. package/dist/optional-typescript.d.ts.map +1 -0
  39. package/dist/optional-typescript.js +9 -0
  40. package/dist/swc-esbuild-plugin.d.ts.map +1 -1
  41. package/dist/swc-esbuild-plugin.js +7 -2
  42. package/dist/types.d.ts +1 -0
  43. package/dist/types.d.ts.map +1 -1
  44. package/dist/types.js +1 -1
  45. package/dist/workflows-extractor.js +2 -2
  46. package/dist/workflows-extractor.test.js +31 -1
  47. package/dist/world-target.d.ts +20 -0
  48. package/dist/world-target.d.ts.map +1 -0
  49. package/dist/world-target.js +74 -0
  50. package/dist/world-target.test.d.ts +2 -0
  51. package/dist/world-target.test.d.ts.map +1 -0
  52. package/dist/world-target.test.js +106 -0
  53. package/package.json +6 -4
@@ -138,7 +138,7 @@ function decodeEscapedWorkflowCode(rawTemplateElement) {
138
138
  */
139
139
  function extractStepDeclarations(bundleCode) {
140
140
  const stepDeclarations = new Map();
141
- const stepPattern = /var (\w+) = globalThis\[Symbol\.for\("WORKFLOW_USE_STEP"\)\]\("([^"]+)"\)/g;
141
+ const stepPattern = /var (\w+) = globalThis\[(?:\/\*.*?\*\/\s*)?Symbol\.for\("WORKFLOW_USE_STEP"\)\]\("([^"]+)"\)/g;
142
142
  const lines = bundleCode.split('\n');
143
143
  for (const line of lines) {
144
144
  stepPattern.lastIndex = 0;
@@ -1478,4 +1478,4 @@ function analyzeTransitiveCall(funcName, stepDeclarations, context, functionMap,
1478
1478
  }
1479
1479
  return { nodes, edges, entryNodeIds, exitNodeIds };
1480
1480
  }
1481
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3dzLWV4dHJhY3Rvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy93b3JrZmxvd3MtZXh0cmFjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQWM1QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXRDLCtFQUErRTtBQUMvRSxZQUFZO0FBQ1osK0VBQStFO0FBRS9FOzs7O0dBSUc7QUFDSCxNQUFNLG1CQUFtQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDO0FBRTlFOzs7OztHQUtHO0FBQ0gsU0FBUyxtQkFBbUIsQ0FBQyxNQUFjLEVBQUUsWUFBb0I7SUFDL0QsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQyxPQUFPLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztBQUNwRCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUyxnQkFBZ0IsQ0FBQyxJQUFnQjtJQUN4QyxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNsQixLQUFLLFlBQVk7WUFDZixPQUFRLElBQW1CLENBQUMsS0FBSyxDQUFDO1FBRXBDLEtBQUssZ0JBQWdCO1lBQ25CLE9BQU8sTUFBTSxDQUFFLElBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVyQyxLQUFLLGdCQUFnQjtZQUNuQixPQUFPLE1BQU0sQ0FBRSxJQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFckMsS0FBSyxlQUFlO1lBQ2xCLE9BQU8sSUFBSyxJQUFZLENBQUMsS0FBSyxHQUFHLENBQUM7UUFFcEMsS0FBSyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7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QUFVLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQzlDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDOUMsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO1lBQVMsQ0FBQztRQUNULGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxDQUFDO0FBQ3JELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZWFkRmlsZSB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHR5cGUge1xuICBBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbixcbiAgQmxvY2tTdGF0ZW1lbnQsXG4gIENhbGxFeHByZXNzaW9uLFxuICBFeHByZXNzaW9uLFxuICBGdW5jdGlvbkRlY2xhcmF0aW9uLFxuICBGdW5jdGlvbkV4cHJlc3Npb24sXG4gIElkZW50aWZpZXIsXG4gIE1lbWJlckV4cHJlc3Npb24sXG4gIFByb2dyYW0sXG4gIFN0YXRlbWVudCxcbiAgVmFyaWFibGVEZWNsYXJhdGlvbixcbn0gZnJvbSAnQHN3Yy9jb3JlJztcbmltcG9ydCB7IHBhcnNlU3luYyB9IGZyb20gJ0Bzd2MvY29yZSc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIENvbnN0YW50c1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIFdvcmtmbG93IHByaW1pdGl2ZXMgdGhhdCBzaG91bGQgYmUgc2hvd24gYXMgbm9kZXMgaW4gdGhlIGdyYXBoLlxuICogVGhlc2UgYXJlIGJ1aWx0LWluIHdvcmtmbG93IGZ1bmN0aW9ucyB0aGF0IHJlcHJlc2VudCBtZWFuaW5nZnVsXG4gKiBwYXVzZXMgb3Igd2FpdCBwb2ludHMgaW4gdGhlIHdvcmtmbG93IGV4ZWN1dGlvbi5cbiAqL1xuY29uc3QgV09SS0ZMT1dfUFJJTUlUSVZFUyA9IG5ldyBTZXQoWydzbGVlcCcsICdjcmVhdGVIb29rJywgJ2NyZWF0ZVdlYmhvb2snXSk7XG5cbi8qKlxuICogRXh0cmFjdCB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gbmFtZSBmcm9tIGEgc3RlcElkLlxuICogc3RlcElkIGZvcm1hdDogXCJzdGVwLy9wYXRoL3RvL2ZpbGUudHMvL2Z1bmN0aW9uTmFtZVwiXG4gKiBUaGUgYnVuZGxlciBtYXkgcmVuYW1lIGZ1bmN0aW9ucyB0byBhdm9pZCBjb2xsaXNpb25zIChlLmcuIGFkZCAtPiBhZGQyKSxcbiAqIGJ1dCB0aGUgc3RlcElkIGNvbnRhaW5zIHRoZSBvcmlnaW5hbCBUeXBlU2NyaXB0IGZ1bmN0aW9uIG5hbWUuXG4gKi9cbmZ1bmN0aW9uIGdldE9yaWdpbmFsU3RlcE5hbWUoc3RlcElkOiBzdHJpbmcsIGZhbGxiYWNrTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcGFydHMgPSBzdGVwSWQuc3BsaXQoJy8vJyk7XG4gIHJldHVybiBwYXJ0cy5sZW5ndGggPiAyID8gcGFydHNbMl0gOiBmYWxsYmFja05hbWU7XG59XG5cbi8qKlxuICogRXh0cmFjdCBhIHJlYWRhYmxlIGNvbmRpdGlvbiB0ZXh0IGZyb20gYW4gRXhwcmVzc2lvbiBBU1Qgbm9kZS5cbiAqIFJlY3Vyc2l2ZWx5IGJ1aWxkcyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgY29uZGl0aW9uLlxuICovXG5mdW5jdGlvbiBnZXRDb25kaXRpb25UZXh0KGV4cHI6IEV4cHJlc3Npb24pOiBzdHJpbmcge1xuICBzd2l0Y2ggKGV4cHIudHlwZSkge1xuICAgIGNhc2UgJ0lkZW50aWZpZXInOlxuICAgICAgcmV0dXJuIChleHByIGFzIElkZW50aWZpZXIpLnZhbHVlO1xuXG4gICAgY2FzZSAnQm9vbGVhbkxpdGVyYWwnOlxuICAgICAgcmV0dXJuIFN0cmluZygoZXhwciBhcyBhbnkpLnZhbHVlKTtcblxuICAgIGNhc2UgJ051bWVyaWNMaXRlcmFsJzpcbiAgICAgIHJldHVybiBTdHJpbmcoKGV4cHIgYXMgYW55KS52YWx1ZSk7XG5cbiAgICBjYXNlICdTdHJpbmdMaXRlcmFsJzpcbiAgICAgIHJldHVybiBgXCIkeyhleHByIGFzIGFueSkudmFsdWV9XCJgO1xuXG4gICAgY2FzZSAnQmluYXJ5RXhwcmVzc2lvbic6IHtcbiAgICAgIGNvbnN0IGJpbiA9IGV4cHIgYXMgYW55O1xuICAgICAgY29uc3QgbGVmdCA9IGdldENvbmRpdGlvblRleHQoYmluLmxlZnQpO1xuICAgICAgY29uc3QgcmlnaHQgPSBnZXRDb25kaXRpb25UZXh0KGJpbi5yaWdodCk7XG4gICAgICByZXR1cm4gYCR7bGVmdH0gJHtiaW4ub3BlcmF0b3J9ICR7cmlnaHR9YDtcbiAgICB9XG5cbiAgICBjYXNlICdVbmFyeUV4cHJlc3Npb24nOiB7XG4gICAgICBjb25zdCB1bmFyeSA9IGV4cHIgYXMgYW55O1xuICAgICAgY29uc3QgYXJnID0gZ2V0Q29uZGl0aW9uVGV4dCh1bmFyeS5hcmd1bWVudCk7XG4gICAgICByZXR1cm4gYCR7dW5hcnkub3BlcmF0b3J9JHthcmd9YDtcbiAgICB9XG5cbiAgICBjYXNlICdNZW1iZXJFeHByZXNzaW9uJzoge1xuICAgICAgY29uc3QgbWVtYmVyID0gZXhwciBhcyBNZW1iZXJFeHByZXNzaW9uO1xuICAgICAgY29uc3Qgb2JqID0gZ2V0Q29uZGl0aW9uVGV4dChtZW1iZXIub2JqZWN0KTtcbiAgICAgIGlmIChtZW1iZXIucHJvcGVydHkudHlwZSA9PT0gJ0lkZW50aWZpZXInKSB7XG4gICAgICAgIHJldHVybiBgJHtvYmp9LiR7KG1lbWJlci5wcm9wZXJ0eSBhcyBJZGVudGlmaWVyKS52YWx1ZX1gO1xuICAgICAgfVxuICAgICAgaWYgKG1lbWJlci5wcm9wZXJ0eS50eXBlID09PSAnQ29tcHV0ZWQnKSB7XG4gICAgICAgIGNvbnN0IGNvbXB1dGVkID0gKG1lbWJlci5wcm9wZXJ0eSBhcyBhbnkpLmV4cHJlc3Npb247XG4gICAgICAgIHJldHVybiBgJHtvYmp9WyR7Z2V0Q29uZGl0aW9uVGV4dChjb21wdXRlZCl9XWA7XG4gICAgICB9XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH1cblxuICAgIGNhc2UgJ0NhbGxFeHByZXNzaW9uJzoge1xuICAgICAgY29uc3QgY2FsbCA9IGV4cHIgYXMgQ2FsbEV4cHJlc3Npb247XG4gICAgICBjb25zdCBjYWxsZWUgPSBjYWxsLmNhbGxlZTtcbiAgICAgIC8vIEhhbmRsZSBjYWxsZWUgd2hpY2ggY291bGQgYmUgRXhwcmVzc2lvbiwgU3VwZXIsIG9yIEltcG9ydFxuICAgICAgaWYgKGNhbGxlZS50eXBlID09PSAnU3VwZXInIHx8IGNhbGxlZS50eXBlID09PSAnSW1wb3J0Jykge1xuICAgICAgICByZXR1cm4gYCR7Y2FsbGVlLnR5cGUudG9Mb3dlckNhc2UoKX0oKWA7XG4gICAgICB9XG4gICAgICByZXR1cm4gYCR7Z2V0Q29uZGl0aW9uVGV4dChjYWxsZWUgYXMgRXhwcmVzc2lvbil9KClgO1xuICAgIH1cblxuICAgIGNhc2UgJ1BhcmVudGhlc2lzRXhwcmVzc2lvbic6IHtcbiAgICAgIGNvbnN0IHBhcmVuID0gZXhwciBhcyBhbnk7XG4gICAgICByZXR1cm4gYCgke2dldENvbmRpdGlvblRleHQocGFyZW4uZXhwcmVzc2lvbil9KWA7XG4gICAgfVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAnY29uZGl0aW9uJztcbiAgfVxufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBJbnRlcm5hbCBUeXBlcyAodXNlZCBkdXJpbmcgZXh0cmFjdGlvbiBvbmx5KVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5pbnRlcmZhY2UgRnVuY3Rpb25JbmZvIHtcbiAgbmFtZTogc3RyaW5nO1xuICBib2R5OiBCbG9ja1N0YXRlbWVudCB8IEV4cHJlc3Npb24gfCBudWxsIHwgdW5kZWZpbmVkO1xuICBpc1N0ZXA6IGJvb2xlYW47XG4gIHN0ZXBJZD86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEFuYWx5c2lzQ29udGV4dCB7XG4gIHBhcmFsbGVsQ291bnRlcjogbnVtYmVyO1xuICBsb29wQ291bnRlcjogbnVtYmVyO1xuICBjb25kaXRpb25hbENvdW50ZXI6IG51bWJlcjtcbiAgbm9kZUNvdW50ZXI6IG51bWJlcjtcbiAgaW5Mb29wOiBzdHJpbmcgfCBudWxsO1xuICBpbkNvbmRpdGlvbmFsOiBzdHJpbmcgfCBudWxsO1xuICAvKiogVHJhY2tzIHZhcmlhYmxlcyBhc3NpZ25lZCBmcm9tIGNyZWF0ZVdlYmhvb2soKSBvciBjcmVhdGVIb29rKCkgKi9cbiAgd2ViaG9va1ZhcmlhYmxlczogU2V0PHN0cmluZz47XG4gIC8qKiBUcmFja3MgYXJyYXkgdmFyaWFibGVzIHRoYXQgaGF2ZSBzdGVwIGNhbGxzIHB1c2hlZCBpbnRvIHRoZW0gKGZvciBQcm9taXNlLmFsbCBwYXR0ZXJuKSAqL1xuICBwcm9taXNlQXJyYXlzOiBNYXA8c3RyaW5nLCBNYW5pZmVzdE5vZGVbXT47IC8vIGFycmF5TmFtZSAtPiBsaXN0IG9mIG5vZGVzXG59XG5cbmludGVyZmFjZSBBbmFseXNpc1Jlc3VsdCB7XG4gIG5vZGVzOiBNYW5pZmVzdE5vZGVbXTtcbiAgZWRnZXM6IE1hbmlmZXN0RWRnZVtdO1xuICBlbnRyeU5vZGVJZHM6IHN0cmluZ1tdO1xuICBleGl0Tm9kZUlkczogc3RyaW5nW107XG59XG5cbi8qKlxuICogTm9kZSBtZXRhZGF0YSBmb3IgY29udHJvbCBmbG93IHNlbWFudGljc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIE5vZGVNZXRhZGF0YSB7XG4gIGxvb3BJZD86IHN0cmluZztcbiAgbG9vcElzQXdhaXQ/OiBib29sZWFuO1xuICBjb25kaXRpb25hbElkPzogc3RyaW5nO1xuICBjb25kaXRpb25hbEJyYW5jaD86ICdUaGVuJyB8ICdFbHNlJztcbiAgcGFyYWxsZWxHcm91cElkPzogc3RyaW5nO1xuICBwYXJhbGxlbE1ldGhvZD86IHN0cmluZztcbiAgLyoqIFN0ZXAgaXMgcGFzc2VkIGFzIGEgcmVmZXJlbmNlIChjYWxsYmFjay90b29sKSByYXRoZXIgdGhhbiBkaXJlY3RseSBjYWxsZWQgKi9cbiAgaXNTdGVwUmVmZXJlbmNlPzogYm9vbGVhbjtcbiAgLyoqIENvbnRleHQgd2hlcmUgdGhlIHN0ZXAgcmVmZXJlbmNlIHdhcyBmb3VuZCAoZS5nLiwgXCJ0b29scy5nZXRXZWF0aGVyLmV4ZWN1dGVcIikgKi9cbiAgcmVmZXJlbmNlQ29udGV4dD86IHN0cmluZztcbiAgLyoqIFRoaXMgbm9kZSBpcyBhIHRvb2wgc3RlcCBjb25uZWN0ZWQgdG8gYSBEdXJhYmxlQWdlbnQgKi9cbiAgaXNUb29sPzogYm9vbGVhbjtcbiAgLyoqIFRoZSBuYW1lIG9mIHRoZSB0b29sIChrZXkgaW4gdG9vbHMgb2JqZWN0KSAqL1xuICB0b29sTmFtZT86IHN0cmluZztcbiAgLyoqIFRoaXMgbm9kZSByZXByZXNlbnRzIGEgY29sbGVjdGlvbiBvZiB0b29scyAoaW1wb3J0ZWQgdmFyaWFibGUpICovXG4gIGlzVG9vbHNDb2xsZWN0aW9uPzogYm9vbGVhbjtcbiAgLyoqIFRoZSB2YXJpYWJsZSBuYW1lIG9mIHRoZSB0b29scyBjb2xsZWN0aW9uICovXG4gIHRvb2xzVmFyaWFibGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogR3JhcGggbm9kZSBmb3Igd29ya2Zsb3cgdmlzdWFsaXphdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1hbmlmZXN0Tm9kZSB7XG4gIGlkOiBzdHJpbmc7XG4gIHR5cGU6IHN0cmluZztcbiAgZGF0YToge1xuICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgbm9kZUtpbmQ6IHN0cmluZztcbiAgICBzdGVwSWQ/OiBzdHJpbmc7XG4gIH07XG4gIG1ldGFkYXRhPzogTm9kZU1ldGFkYXRhO1xufVxuXG4vKipcbiAqIEdyYXBoIGVkZ2UgZm9yIHdvcmtmbG93IGNvbnRyb2wgZmxvd1xuICovXG5leHBvcnQgaW50ZXJmYWNlIE1hbmlmZXN0RWRnZSB7XG4gIGlkOiBzdHJpbmc7XG4gIHNvdXJjZTogc3RyaW5nO1xuICB0YXJnZXQ6IHN0cmluZztcbiAgdHlwZTogJ2RlZmF1bHQnIHwgJ2xvb3AnIHwgJ2NvbmRpdGlvbmFsJyB8ICdwYXJhbGxlbCcgfCAndG9vbCc7XG4gIGxhYmVsPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEdyYXBoIGRhdGEgZm9yIGEgc2luZ2xlIHdvcmtmbG93XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV29ya2Zsb3dHcmFwaERhdGEge1xuICBub2RlczogTWFuaWZlc3ROb2RlW107XG4gIGVkZ2VzOiBNYW5pZmVzdEVkZ2VbXTtcbn1cblxuLyoqXG4gKiBTdGVwIGVudHJ5IGluIHRoZSBtYW5pZmVzdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1hbmlmZXN0U3RlcEVudHJ5IHtcbiAgc3RlcElkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogV29ya2Zsb3cgZW50cnkgaW4gdGhlIG1hbmlmZXN0IChpbmNsdWRlcyBncmFwaCBkYXRhKVxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1hbmlmZXN0V29ya2Zsb3dFbnRyeSB7XG4gIHdvcmtmbG93SWQ6IHN0cmluZztcbiAgZ3JhcGg6IFdvcmtmbG93R3JhcGhEYXRhO1xufVxuXG4vKipcbiAqIE1hbmlmZXN0IHN0cnVjdHVyZSAtIHNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIGFsbCB3b3JrZmxvdyBtZXRhZGF0YVxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1hbmlmZXN0IHtcbiAgdmVyc2lvbjogc3RyaW5nO1xuICBzdGVwczoge1xuICAgIFtmaWxlUGF0aDogc3RyaW5nXToge1xuICAgICAgW3N0ZXBOYW1lOiBzdHJpbmddOiBNYW5pZmVzdFN0ZXBFbnRyeTtcbiAgICB9O1xuICB9O1xuICB3b3JrZmxvd3M6IHtcbiAgICBbZmlsZVBhdGg6IHN0cmluZ106IHtcbiAgICAgIFt3b3JrZmxvd05hbWU6IHN0cmluZ106IE1hbmlmZXN0V29ya2Zsb3dFbnRyeTtcbiAgICB9O1xuICB9O1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRXh0cmFjdGlvbiBGdW5jdGlvbnNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogRXh0cmFjdHMgd29ya2Zsb3cgZ3JhcGhzIGZyb20gYSBidW5kbGVkIHdvcmtmbG93IGZpbGUuXG4gKiBSZXR1cm5zIHdvcmtmbG93IGVudHJpZXMgb3JnYW5pemVkIGJ5IGZpbGUgcGF0aCwgcmVhZHkgZm9yIG1lcmdpbmcgaW50byBNYW5pZmVzdC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4dHJhY3RXb3JrZmxvd0dyYXBocyhidW5kbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHtcbiAgW2ZpbGVQYXRoOiBzdHJpbmddOiB7XG4gICAgW3dvcmtmbG93TmFtZTogc3RyaW5nXTogTWFuaWZlc3RXb3JrZmxvd0VudHJ5O1xuICB9O1xufT4ge1xuICBjb25zdCBidW5kbGVDb2RlID0gYXdhaXQgcmVhZEZpbGUoYnVuZGxlUGF0aCwgJ3V0Zi04Jyk7XG5cbiAgdHJ5IHtcbiAgICBsZXQgYWN0dWFsV29ya2Zsb3dDb2RlID0gYnVuZGxlQ29kZTtcblxuICAgIGNvbnN0IGJ1bmRsZUFzdCA9IHBhcnNlU3luYyhidW5kbGVDb2RlLCB7XG4gICAgICBzeW50YXg6ICdlY21hc2NyaXB0JyxcbiAgICAgIHRhcmdldDogJ2VzMjAyMicsXG4gICAgfSk7XG5cbiAgICBjb25zdCB3b3JrZmxvd0NvZGVWYWx1ZSA9IGV4dHJhY3RXb3JrZmxvd0NvZGVGcm9tQnVuZGxlKGJ1bmRsZUFzdCk7XG4gICAgaWYgKHdvcmtmbG93Q29kZVZhbHVlKSB7XG4gICAgICBhY3R1YWxXb3JrZmxvd0NvZGUgPSB3b3JrZmxvd0NvZGVWYWx1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBhc3QgPSBwYXJzZVN5bmMoYWN0dWFsV29ya2Zsb3dDb2RlLCB7XG4gICAgICBzeW50YXg6ICdlY21hc2NyaXB0JyxcbiAgICAgIHRhcmdldDogJ2VzMjAyMicsXG4gICAgfSk7XG5cbiAgICBjb25zdCBzdGVwRGVjbGFyYXRpb25zID0gZXh0cmFjdFN0ZXBEZWNsYXJhdGlvbnMoYWN0dWFsV29ya2Zsb3dDb2RlKTtcbiAgICBjb25zdCBmdW5jdGlvbk1hcCA9IGJ1aWxkRnVuY3Rpb25NYXAoYXN0LCBzdGVwRGVjbGFyYXRpb25zKTtcbiAgICBjb25zdCB2YXJpYWJsZU1hcCA9IGJ1aWxkVmFyaWFibGVNYXAoYXN0KTtcblxuICAgIHJldHVybiBleHRyYWN0V29ya2Zsb3dzKGFzdCwgc3RlcERlY2xhcmF0aW9ucywgZnVuY3Rpb25NYXAsIHZhcmlhYmxlTWFwKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZXh0cmFjdCB3b3JrZmxvdyBncmFwaHMgZnJvbSBidW5kbGU6JywgZXJyb3IpO1xuICAgIHJldHVybiB7fTtcbiAgfVxufVxuXG4vKipcbiAqIEV4dHJhY3QgdGhlIHdvcmtmbG93Q29kZSBzdHJpbmcgdmFsdWUgZnJvbSBhIHBhcnNlZCBidW5kbGUgQVNUXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RXb3JrZmxvd0NvZGVGcm9tQnVuZGxlKGFzdDogUHJvZ3JhbSk6IHN0cmluZyB8IG51bGwge1xuICBmb3IgKGNvbnN0IGl0ZW0gb2YgYXN0LmJvZHkpIHtcbiAgICBpZiAoaXRlbS50eXBlID09PSAnVmFyaWFibGVEZWNsYXJhdGlvbicpIHtcbiAgICAgIGZvciAoY29uc3QgZGVjbCBvZiBpdGVtLmRlY2xhcmF0aW9ucykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZGVjbC5pZC50eXBlID09PSAnSWRlbnRpZmllcicgJiZcbiAgICAgICAgICBkZWNsLmlkLnZhbHVlID09PSAnd29ya2Zsb3dDb2RlJyAmJlxuICAgICAgICAgIGRlY2wuaW5pdFxuICAgICAgICApIHtcbiAgICAgICAgICBpZiAoZGVjbC5pbml0LnR5cGUgPT09ICdUZW1wbGF0ZUxpdGVyYWwnKSB7XG4gICAgICAgICAgICByZXR1cm4gZGVjbC5pbml0LnF1YXNpc1xuICAgICAgICAgICAgICAubWFwKChxKSA9PiBkZWNvZGVFc2NhcGVkV29ya2Zsb3dDb2RlKHEucmF3KSlcbiAgICAgICAgICAgICAgLmpvaW4oJycpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZGVjbC5pbml0LnR5cGUgPT09ICdTdHJpbmdMaXRlcmFsJykge1xuICAgICAgICAgICAgcmV0dXJuIGRlY2wuaW5pdC52YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGRlY29kZUVzY2FwZWRXb3JrZmxvd0NvZGUocmF3VGVtcGxhdGVFbGVtZW50OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcmF3VGVtcGxhdGVFbGVtZW50LnJlcGxhY2UoL1xcXFwoW1xcXFxgJF0pL2csICckMScpO1xufVxuXG4vKipcbiAqIEV4dHJhY3Qgc3RlcCBkZWNsYXJhdGlvbnMgdXNpbmcgcmVnZXggZm9yIHNwZWVkXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RTdGVwRGVjbGFyYXRpb25zKFxuICBidW5kbGVDb2RlOiBzdHJpbmdcbik6IE1hcDxzdHJpbmcsIHsgc3RlcElkOiBzdHJpbmcgfT4ge1xuICBjb25zdCBzdGVwRGVjbGFyYXRpb25zID0gbmV3IE1hcDxzdHJpbmcsIHsgc3RlcElkOiBzdHJpbmcgfT4oKTtcblxuICBjb25zdCBzdGVwUGF0dGVybiA9XG4gICAgL3ZhciAoXFx3KykgPSBnbG9iYWxUaGlzXFxbU3ltYm9sXFwuZm9yXFwoXCJXT1JLRkxPV19VU0VfU1RFUFwiXFwpXFxdXFwoXCIoW15cIl0rKVwiXFwpL2c7XG5cbiAgY29uc3QgbGluZXMgPSBidW5kbGVDb2RlLnNwbGl0KCdcXG4nKTtcbiAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgc3RlcFBhdHRlcm4ubGFzdEluZGV4ID0gMDtcbiAgICBjb25zdCBtYXRjaCA9IHN0ZXBQYXR0ZXJuLmV4ZWMobGluZSk7XG4gICAgaWYgKG1hdGNoKSB7XG4gICAgICBjb25zdCBbLCB2YXJOYW1lLCBzdGVwSWRdID0gbWF0Y2g7XG4gICAgICBzdGVwRGVjbGFyYXRpb25zLnNldCh2YXJOYW1lLCB7IHN0ZXBJZCB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RlcERlY2xhcmF0aW9ucztcbn1cblxuLyoqXG4gKiBFeHRyYWN0IGlubGluZSBzdGVwIGRlY2xhcmF0aW9ucyBmcm9tIHdpdGhpbiBhIGZ1bmN0aW9uIGJvZHkuXG4gKiBUaGVzZSBhcmUgc3RlcHMgZGVmaW5lZCBhcyB2YXJpYWJsZSBkZWNsYXJhdGlvbnMgaW5zaWRlIGEgd29ya2Zsb3cgZnVuY3Rpb24uXG4gKiBQYXR0ZXJuOiB2YXIvY29uc3QgdmFyTmFtZSA9IGdsb2JhbFRoaXNbU3ltYm9sLmZvcihcIldPUktGTE9XX1VTRV9TVEVQXCIpXShcInN0ZXBJZFwiKVxuICovXG5mdW5jdGlvbiBleHRyYWN0SW5saW5lU3RlcERlY2xhcmF0aW9ucyhcbiAgc3RtdHM6IFN0YXRlbWVudFtdXG4pOiBNYXA8c3RyaW5nLCB7IHN0ZXBJZDogc3RyaW5nIH0+IHtcbiAgY29uc3QgaW5saW5lU3RlcHMgPSBuZXcgTWFwPHN0cmluZywgeyBzdGVwSWQ6IHN0cmluZyB9PigpO1xuXG4gIGZvciAoY29uc3Qgc3RtdCBvZiBzdG10cykge1xuICAgIGlmIChzdG10LnR5cGUgPT09ICdWYXJpYWJsZURlY2xhcmF0aW9uJykge1xuICAgICAgY29uc3QgdmFyRGVjbCA9IHN0bXQgYXMgVmFyaWFibGVEZWNsYXJhdGlvbjtcbiAgICAgIGZvciAoY29uc3QgZGVjbCBvZiB2YXJEZWNsLmRlY2xhcmF0aW9ucykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZGVjbC5pZC50eXBlID09PSAnSWRlbnRpZmllcicgJiZcbiAgICAgICAgICBkZWNsLmluaXQ/LnR5cGUgPT09ICdDYWxsRXhwcmVzc2lvbidcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgY2FsbEV4cHIgPSBkZWNsLmluaXQgYXMgQ2FsbEV4cHJlc3Npb247XG4gICAgICAgICAgLy8gQ2hlY2sgZm9yIGdsb2JhbFRoaXNbU3ltYm9sLmZvcihcIldPUktGTE9XX1VTRV9TVEVQXCIpXShcInN0ZXBJZFwiKSBwYXR0ZXJuXG4gICAgICAgICAgaWYgKGNhbGxFeHByLmNhbGxlZS50eXBlID09PSAnTWVtYmVyRXhwcmVzc2lvbicpIHtcbiAgICAgICAgICAgIGNvbnN0IG1lbWJlciA9IGNhbGxFeHByLmNhbGxlZSBhcyBNZW1iZXJFeHByZXNzaW9uO1xuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgb2JqZWN0IGlzIGdsb2JhbFRoaXNcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgbWVtYmVyLm9iamVjdC50eXBlID09PSAnSWRlbnRpZmllcicgJiZcbiAgICAgICAgICAgICAgKG1lbWJlci5vYmplY3QgYXMgSWRlbnRpZmllcikudmFsdWUgPT09ICdnbG9iYWxUaGlzJyAmJlxuICAgICAgICAgICAgICBtZW1iZXIucHJvcGVydHkudHlwZSA9PT0gJ0NvbXB1dGVkJ1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIC8vIEZvciBjb21wdXRlZCBtZW1iZXIgYWNjZXNzIGdsb2JhbFRoaXNbU3ltYm9sLmZvciguLi4pXSxcbiAgICAgICAgICAgICAgLy8gdGhlIHByb3BlcnR5IGlzIGEgQ29tcHV0ZWQgdHlwZSBjb250YWluaW5nIHRoZSBleHByZXNzaW9uXG4gICAgICAgICAgICAgIGNvbnN0IGNvbXB1dGVkRXhwciA9IChtZW1iZXIucHJvcGVydHkgYXMgYW55KS5leHByZXNzaW9uO1xuICAgICAgICAgICAgICBpZiAoY29tcHV0ZWRFeHByPy50eXBlID09PSAnQ2FsbEV4cHJlc3Npb24nKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3ltYm9sQ2FsbCA9IGNvbXB1dGVkRXhwciBhcyBDYWxsRXhwcmVzc2lvbjtcbiAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiBpdCdzIFN5bWJvbC5mb3IoXCJXT1JLRkxPV19VU0VfU1RFUFwiKVxuICAgICAgICAgICAgICAgIGlmIChzeW1ib2xDYWxsLmNhbGxlZS50eXBlID09PSAnTWVtYmVyRXhwcmVzc2lvbicpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHN5bWJvbE1lbWJlciA9IHN5bWJvbENhbGwuY2FsbGVlIGFzIE1lbWJlckV4cHJlc3Npb247XG4gICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHN5bWJvbE1lbWJlci5vYmplY3QudHlwZSA9PT0gJ0lkZW50aWZpZXInICYmXG4gICAgICAgICAgICAgICAgICAgIChzeW1ib2xNZW1iZXIub2JqZWN0IGFzIElkZW50aWZpZXIpLnZhbHVlID09PSAnU3ltYm9sJyAmJlxuICAgICAgICAgICAgICAgICAgICBzeW1ib2xNZW1iZXIucHJvcGVydHkudHlwZSA9PT0gJ0lkZW50aWZpZXInICYmXG4gICAgICAgICAgICAgICAgICAgIChzeW1ib2xNZW1iZXIucHJvcGVydHkgYXMgSWRlbnRpZmllcikudmFsdWUgPT09ICdmb3InICYmXG4gICAgICAgICAgICAgICAgICAgIHN5bWJvbENhbGwuYXJndW1lbnRzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgc3ltYm9sQ2FsbC5hcmd1bWVudHNbMF0uZXhwcmVzc2lvbi50eXBlID09PVxuICAgICAgICAgICAgICAgICAgICAgICdTdHJpbmdMaXRlcmFsJyAmJlxuICAgICAgICAgICAgICAgICAgICAoc3ltYm9sQ2FsbC5hcmd1bWVudHNbMF0uZXhwcmVzc2lvbiBhcyBhbnkpLnZhbHVlID09PVxuICAgICAgICAgICAgICAgICAgICAgICdXT1JLRkxPV19VU0VfU1RFUCdcbiAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAvLyBFeHRyYWN0IHRoZSBzdGVwSWQgZnJvbSB0aGUgb3V0ZXIgY2FsbCBhcmd1bWVudHNcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgIGNhbGxFeHByLmFyZ3VtZW50cy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgICAgY2FsbEV4cHIuYXJndW1lbnRzWzBdLmV4cHJlc3Npb24udHlwZSA9PT0gJ1N0cmluZ0xpdGVyYWwnXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZXBJZCA9IChjYWxsRXhwci5hcmd1bWVudHNbMF0uZXhwcmVzc2lvbiBhcyBhbnkpXG4gICAgICAgICAgICAgICAgICAgICAgICAudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFyTmFtZSA9IChkZWNsLmlkIGFzIElkZW50aWZpZXIpLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgIGlubGluZVN0ZXBzLnNldCh2YXJOYW1lLCB7IHN0ZXBJZCB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpbmxpbmVTdGVwcztcbn1cblxuLyoqXG4gKiBCdWlsZCBhIG1hcCBvZiBhbGwgZnVuY3Rpb25zIGluIHRoZSBidW5kbGUgZm9yIHRyYW5zaXRpdmUgc3RlcCByZXNvbHV0aW9uXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkRnVuY3Rpb25NYXAoXG4gIGFzdDogUHJvZ3JhbSxcbiAgc3RlcERlY2xhcmF0aW9uczogTWFwPHN0cmluZywgeyBzdGVwSWQ6IHN0cmluZyB9PlxuKTogTWFwPHN0cmluZywgRnVuY3Rpb25JbmZvPiB7XG4gIGNvbnN0IGZ1bmN0aW9uTWFwID0gbmV3IE1hcDxzdHJpbmcsIEZ1bmN0aW9uSW5mbz4oKTtcblxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgYXN0LmJvZHkpIHtcbiAgICBpZiAoaXRlbS50eXBlID09PSAnRnVuY3Rpb25EZWNsYXJhdGlvbicpIHtcbiAgICAgIGNvbnN0IGZ1bmMgPSBpdGVtIGFzIEZ1bmN0aW9uRGVjbGFyYXRpb247XG4gICAgICBpZiAoZnVuYy5pZGVudGlmaWVyKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBmdW5jLmlkZW50aWZpZXIudmFsdWU7XG4gICAgICAgIGNvbnN0IGlzU3RlcCA9IHN0ZXBEZWNsYXJhdGlvbnMuaGFzKG5hbWUpO1xuICAgICAgICBmdW5jdGlvbk1hcC5zZXQobmFtZSwge1xuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgYm9keTogZnVuYy5ib2R5LFxuICAgICAgICAgIGlzU3RlcCxcbiAgICAgICAgICBzdGVwSWQ6IGlzU3RlcCA/IHN0ZXBEZWNsYXJhdGlvbnMuZ2V0KG5hbWUpPy5zdGVwSWQgOiB1bmRlZmluZWQsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpdGVtLnR5cGUgPT09ICdWYXJpYWJsZURlY2xhcmF0aW9uJykge1xuICAgICAgY29uc3QgdmFyRGVjbCA9IGl0ZW0gYXMgVmFyaWFibGVEZWNsYXJhdGlvbjtcbiAgICAgIGZvciAoY29uc3QgZGVjbCBvZiB2YXJEZWNsLmRlY2xhcmF0aW9ucykge1xuICAgICAgICBpZiAoZGVjbC5pZC50eXBlID09PSAnSWRlbnRpZmllcicgJiYgZGVjbC5pbml0KSB7XG4gICAgICAgICAgY29uc3QgbmFtZSA9IGRlY2wuaWQudmFsdWU7XG4gICAgICAgICAgY29uc3QgaXNTdGVwID0gc3RlcERlY2xhcmF0aW9ucy5oYXMobmFtZSk7XG5cbiAgICAgICAgICBpZiAoZGVjbC5pbml0LnR5cGUgPT09ICdGdW5jdGlvbkV4cHJlc3Npb24nKSB7XG4gICAgICAgICAgICBjb25zdCBmdW5jRXhwciA9IGRlY2wuaW5pdCBhcyBGdW5jdGlvbkV4cHJlc3Npb247XG4gICAgICAgICAgICBmdW5jdGlvbk1hcC5zZXQobmFtZSwge1xuICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICBib2R5OiBmdW5jRXhwci5ib2R5LFxuICAgICAgICAgICAgICBpc1N0ZXAsXG4gICAgICAgICAgICAgIHN0ZXBJZDogaXNTdGVwID8gc3RlcERlY2xhcmF0aW9ucy5nZXQobmFtZSk/LnN0ZXBJZCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZGVjbC5pbml0LnR5cGUgPT09ICdBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbicpIHtcbiAgICAgICAgICAgIGNvbnN0IGFycm93RnVuYyA9IGRlY2wuaW5pdCBhcyBBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbjtcbiAgICAgICAgICAgIGZ1bmN0aW9uTWFwLnNldChuYW1lLCB7XG4gICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgIGJvZHk6IGFycm93RnVuYy5ib2R5LFxuICAgICAgICAgICAgICBpc1N0ZXAsXG4gICAgICAgICAgICAgIHN0ZXBJZDogaXNTdGVwID8gc3RlcERlY2xhcmF0aW9ucy5nZXQobmFtZSk/LnN0ZXBJZCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbk1hcDtcbn1cblxuLyoqXG4gKiBCdWlsZCBhIG1hcCBvZiB2YXJpYWJsZSBkZWZpbml0aW9ucyAob2JqZWN0cykgZm9yIHRvb2wgcmVzb2x1dGlvblxuICogVGhpcyBhbGxvd3MgdXMgdG8gcmVzb2x2ZSB0b29scyBvYmplY3RzIHRvIHRoZSBhY3R1YWwgdG9vbHMgb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIGJ1aWxkVmFyaWFibGVNYXAoYXN0OiBQcm9ncmFtKTogTWFwPHN0cmluZywgYW55PiB7XG4gIGNvbnN0IHZhcmlhYmxlTWFwID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcblxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgYXN0LmJvZHkpIHtcbiAgICBpZiAoaXRlbS50eXBlID09PSAnVmFyaWFibGVEZWNsYXJhdGlvbicpIHtcbiAgICAgIGNvbnN0IHZhckRlY2wgPSBpdGVtIGFzIFZhcmlhYmxlRGVjbGFyYXRpb247XG4gICAgICBmb3IgKGNvbnN0IGRlY2wgb2YgdmFyRGVjbC5kZWNsYXJhdGlvbnMpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGRlY2wudHlwZSA9PT0gJ1ZhcmlhYmxlRGVjbGFyYXRvcicgJiZcbiAgICAgICAgICBkZWNsLmlkLnR5cGUgPT09ICdJZGVudGlmaWVyJyAmJlxuICAgICAgICAgIGRlY2wuaW5pdD8udHlwZSA9PT0gJ09iamVjdEV4cHJlc3Npb24nXG4gICAgICAgICkge1xuICAgICAgICAgIHZhcmlhYmxlTWFwLnNldChkZWNsLmlkLnZhbHVlLCBkZWNsLmluaXQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZhcmlhYmxlTWFwO1xufVxuXG4vKipcbiAqIEV4dHJhY3Qgd29ya2Zsb3dzIGZyb20gQVNUXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RXb3JrZmxvd3MoXG4gIGFzdDogUHJvZ3JhbSxcbiAgc3RlcERlY2xhcmF0aW9uczogTWFwPHN0cmluZywgeyBzdGVwSWQ6IHN0cmluZyB9PixcbiAgZnVuY3Rpb25NYXA6IE1hcDxzdHJpbmcsIEZ1bmN0aW9uSW5mbz4sXG4gIHZhcmlhYmxlTWFwOiBNYXA8c3RyaW5nLCBhbnk+XG4pOiB7XG4gIFtmaWxlUGF0aDogc3RyaW5nXToge1xuICAgIFt3b3JrZmxvd05hbWU6IHN0cmluZ106IE1hbmlmZXN0V29ya2Zsb3dFbnRyeTtcbiAgfTtcbn0ge1xuICBjb25zdCByZXN1bHQ6IHtcbiAgICBbZmlsZVBhdGg6IHN0cmluZ106IHtcbiAgICAgIFt3b3JrZmxvd05hbWU6IHN0cmluZ106IE1hbmlmZXN0V29ya2Zsb3dFbnRyeTtcbiAgICB9O1xuICB9ID0ge307XG5cbiAgZm9yIChjb25zdCBpdGVtIG9mIGFzdC5ib2R5KSB7XG4gICAgaWYgKGl0ZW0udHlwZSA9PT0gJ0Z1bmN0aW9uRGVjbGFyYXRpb24nKSB7XG4gICAgICBjb25zdCBmdW5jID0gaXRlbSBhcyBGdW5jdGlvbkRlY2xhcmF0aW9uO1xuICAgICAgaWYgKCFmdW5jLmlkZW50aWZpZXIpIGNvbnRpbnVlO1xuXG4gICAgICBjb25zdCB3b3JrZmxvd05hbWUgPSBmdW5jLmlkZW50aWZpZXIudmFsdWU7XG4gICAgICBjb25zdCB3b3JrZmxvd0lkID0gZmluZFdvcmtmbG93SWQoYXN0LCB3b3JrZmxvd05hbWUpO1xuICAgICAgaWYgKCF3b3JrZmxvd0lkKSBjb250aW51ZTtcblxuICAgICAgLy8gRXh0cmFjdCBmaWxlIHBhdGggYW5kIGFjdHVhbCB3b3JrZmxvdyBuYW1lIGZyb20gd29ya2Zsb3dJZDogXCJ3b3JrZmxvdy8vcGF0aC90by9maWxlLnRzLy9mdW5jdGlvbk5hbWVcIlxuICAgICAgLy8gVGhlIGJ1bmRsZXIgbWF5IHJlbmFtZSBmdW5jdGlvbnMgdG8gYXZvaWQgY29sbGlzaW9ucyAoZS5nLiBhZGRUZW5Xb3JrZmxvdyAtPiBhZGRUZW5Xb3JrZmxvdzIpLFxuICAgICAgLy8gYnV0IHRoZSB3b3JrZmxvd0lkIGNvbnRhaW5zIHRoZSBvcmlnaW5hbCBUeXBlU2NyaXB0IGZ1bmN0aW9uIG5hbWUuXG4gICAgICBjb25zdCBwYXJ0cyA9IHdvcmtmbG93SWQuc3BsaXQoJy8vJyk7XG4gICAgICBjb25zdCBmaWxlUGF0aCA9IHBhcnRzLmxlbmd0aCA+IDEgPyBwYXJ0c1sxXSA6ICd1bmtub3duJztcbiAgICAgIGNvbnN0IGFjdHVhbFdvcmtmbG93TmFtZSA9IHBhcnRzLmxlbmd0aCA+IDIgPyBwYXJ0c1syXSA6IHdvcmtmbG93TmFtZTtcblxuICAgICAgY29uc3QgZ3JhcGggPSBhbmFseXplV29ya2Zsb3dGdW5jdGlvbihcbiAgICAgICAgZnVuYyxcbiAgICAgICAgd29ya2Zsb3dOYW1lLFxuICAgICAgICBzdGVwRGVjbGFyYXRpb25zLFxuICAgICAgICBmdW5jdGlvbk1hcCxcbiAgICAgICAgdmFyaWFibGVNYXBcbiAgICAgICk7XG5cbiAgICAgIGlmICghcmVzdWx0W2ZpbGVQYXRoXSkge1xuICAgICAgICByZXN1bHRbZmlsZVBhdGhdID0ge307XG4gICAgICB9XG5cbiAgICAgIHJlc3VsdFtmaWxlUGF0aF1bYWN0dWFsV29ya2Zsb3dOYW1lXSA9IHtcbiAgICAgICAgd29ya2Zsb3dJZCxcbiAgICAgICAgZ3JhcGgsXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRmluZCB3b3JrZmxvd0lkIGFzc2lnbm1lbnQgZm9yIGEgZnVuY3Rpb25cbiAqL1xuZnVuY3Rpb24gZmluZFdvcmtmbG93SWQoYXN0OiBQcm9ncmFtLCBmdW5jdGlvbk5hbWU6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICBmb3IgKGNvbnN0IGl0ZW0gb2YgYXN0LmJvZHkpIHtcbiAgICBpZiAoaXRlbS50eXBlID09PSAnRXhwcmVzc2lvblN0YXRlbWVudCcpIHtcbiAgICAgIGNvbnN0IGV4cHIgPSBpdGVtLmV4cHJlc3Npb247XG4gICAgICBpZiAoZXhwci50eXBlID09PSAnQXNzaWdubWVudEV4cHJlc3Npb24nKSB7XG4gICAgICAgIGNvbnN0IGxlZnQgPSBleHByLmxlZnQ7XG4gICAgICAgIGlmIChsZWZ0LnR5cGUgPT09ICdNZW1iZXJFeHByZXNzaW9uJykge1xuICAgICAgICAgIGNvbnN0IG9iaiA9IGxlZnQub2JqZWN0O1xuICAgICAgICAgIGNvbnN0IHByb3AgPSBsZWZ0LnByb3BlcnR5O1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIG9iai50eXBlID09PSAnSWRlbnRpZmllcicgJiZcbiAgICAgICAgICAgIG9iai52YWx1ZSA9PT0gZnVuY3Rpb25OYW1lICYmXG4gICAgICAgICAgICBwcm9wLnR5cGUgPT09ICdJZGVudGlmaWVyJyAmJlxuICAgICAgICAgICAgcHJvcC52YWx1ZSA9PT0gJ3dvcmtmbG93SWQnXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCByaWdodCA9IGV4cHIucmlnaHQ7XG4gICAgICAgICAgICBpZiAocmlnaHQudHlwZSA9PT0gJ1N0cmluZ0xpdGVyYWwnKSB7XG4gICAgICAgICAgICAgIHJldHVybiByaWdodC52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogQW5hbHl6ZSBhIHdvcmtmbG93IGZ1bmN0aW9uIGFuZCBidWlsZCBpdHMgZ3JhcGhcbiAqL1xuZnVuY3Rpb24gYW5hbHl6ZVdvcmtmbG93RnVuY3Rpb24oXG4gIGZ1bmM6IEZ1bmN0aW9uRGVjbGFyYXRpb24sXG4gIHdvcmtmbG93TmFtZTogc3RyaW5nLFxuICBzdGVwRGVjbGFyYXRpb25zOiBNYXA8c3RyaW5nLCB7IHN0ZXBJZDogc3RyaW5nIH0+LFxuICBmdW5jdGlvbk1hcDogTWFwPHN0cmluZywgRnVuY3Rpb25JbmZvPixcbiAgdmFyaWFibGVNYXA6IE1hcDxzdHJpbmcsIGFueT5cbik6IFdvcmtmbG93R3JhcGhEYXRhIHtcbiAgY29uc3Qgbm9kZXM6IE1hbmlmZXN0Tm9kZVtdID0gW107XG4gIGNvbnN0IGVkZ2VzOiBNYW5pZmVzdEVkZ2VbXSA9IFtdO1xuXG4gIC8vIEFkZCBzdGFydCBub2RlXG4gIG5vZGVzLnB1c2goe1xuICAgIGlkOiAnc3RhcnQnLFxuICAgIHR5cGU6ICd3b3JrZmxvd1N0YXJ0JyxcbiAgICBkYXRhOiB7XG4gICAgICBsYWJlbDogYFN0YXJ0OiAke3dvcmtmbG93TmFtZX1gLFxuICAgICAgbm9kZUtpbmQ6ICd3b3JrZmxvd19zdGFydCcsXG4gICAgfSxcbiAgfSk7XG5cbiAgY29uc3QgY29udGV4dDogQW5hbHlzaXNDb250ZXh0ID0ge1xuICAgIHBhcmFsbGVsQ291bnRlcjogMCxcbiAgICBsb29wQ291bnRlcjogMCxcbiAgICBjb25kaXRpb25hbENvdW50ZXI6IDAsXG4gICAgbm9kZUNvdW50ZXI6IDAsXG4gICAgaW5Mb29wOiBudWxsLFxuICAgIGluQ29uZGl0aW9uYWw6IG51bGwsXG4gICAgd2ViaG9va1ZhcmlhYmxlczogbmV3IFNldCgpLFxuICAgIHByb21pc2VBcnJheXM6IG5ldyBNYXAoKSxcbiAgfTtcblxuICBsZXQgcHJldkV4aXRJZHMgPSBbJ3N0YXJ0J107XG5cbiAgaWYgKGZ1bmMuYm9keT8uc3RtdHMpIHtcbiAgICAvLyBFeHRyYWN0IGlubGluZSBzdGVwIGRlY2xhcmF0aW9ucyBmcm9tIHRoZSB3b3JrZmxvdyBib2R5XG4gICAgLy8gVGhlc2UgYXJlIHN0ZXBzIGRlZmluZWQgYXMgdmFyaWFibGVzIGluc2lkZSB0aGUgd29ya2Zsb3cgZnVuY3Rpb25cbiAgICBjb25zdCBpbmxpbmVTdGVwcyA9IGV4dHJhY3RJbmxpbmVTdGVwRGVjbGFyYXRpb25zKGZ1bmMuYm9keS5zdG10cyk7XG5cbiAgICAvLyBNZXJnZSBpbmxpbmUgc3RlcHMgd2l0aCBnbG9iYWwgc3RlcCBkZWNsYXJhdGlvbnNcbiAgICBjb25zdCBtZXJnZWRTdGVwRGVjbGFyYXRpb25zID0gbmV3IE1hcChzdGVwRGVjbGFyYXRpb25zKTtcbiAgICBmb3IgKGNvbnN0IFtuYW1lLCBpbmZvXSBvZiBpbmxpbmVTdGVwcykge1xuICAgICAgbWVyZ2VkU3RlcERlY2xhcmF0aW9ucy5zZXQobmFtZSwgaW5mbyk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBzdG10IG9mIGZ1bmMuYm9keS5zdG10cykge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYW5hbHl6ZVN0YXRlbWVudChcbiAgICAgICAgc3RtdCxcbiAgICAgICAgbWVyZ2VkU3RlcERlY2xhcmF0aW9ucyxcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgZnVuY3Rpb25NYXAsXG4gICAgICAgIHZhcmlhYmxlTWFwXG4gICAgICApO1xuXG4gICAgICBub2Rlcy5wdXNoKC4uLnJlc3VsdC5ub2Rlcyk7XG4gICAgICBlZGdlcy5wdXNoKC4uLnJlc3VsdC5lZGdlcyk7XG5cbiAgICAgIGZvciAoY29uc3QgcHJldklkIG9mIHByZXZFeGl0SWRzKSB7XG4gICAgICAgIGZvciAoY29uc3QgZW50cnlJZCBvZiByZXN1bHQuZW50cnlOb2RlSWRzKSB7XG4gICAgICAgICAgY29uc3QgZWRnZUlkID0gYGVfJHtwcmV2SWR9XyR7ZW50cnlJZH1gO1xuICAgICAgICAgIGlmICghZWRnZXMuZmluZCgoZSkgPT4gZS5pZCA9PT0gZWRnZUlkKSkge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0Tm9kZSA9IHJlc3VsdC5ub2Rlcy5maW5kKChuKSA9PiBuLmlkID09PSBlbnRyeUlkKTtcbiAgICAgICAgICAgIC8vIE9ubHkgdXNlICdwYXJhbGxlbCcgdHlwZSBmb3IgcGFyYWxsZWwgZ3JvdXAgY29ubmVjdGlvbnNcbiAgICAgICAgICAgIC8vIFNlcXVlbnRpYWwgY29ubmVjdGlvbnMgKGluY2x1ZGluZyB0by9mcm9tIGxvb3BzKSBzaG91bGQgYmUgJ2RlZmF1bHQnXG4gICAgICAgICAgICBjb25zdCBlZGdlVHlwZSA9IHRhcmdldE5vZGU/Lm1ldGFkYXRhPy5wYXJhbGxlbEdyb3VwSWRcbiAgICAgICAgICAgICAgPyAncGFyYWxsZWwnXG4gICAgICAgICAgICAgIDogJ2RlZmF1bHQnO1xuICAgICAgICAgICAgZWRnZXMucHVzaCh7XG4gICAgICAgICAgICAgIGlkOiBlZGdlSWQsXG4gICAgICAgICAgICAgIHNvdXJjZTogcHJldklkLFxuICAgICAgICAgICAgICB0YXJnZXQ6IGVudHJ5SWQsXG4gICAgICAgICAgICAgIHR5cGU6IGVkZ2VUeXBlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXN1bHQuZXhpdE5vZGVJZHMubGVuZ3RoID4gMCkge1xuICAgICAgICBwcmV2RXhpdElkcyA9IHJlc3VsdC5leGl0Tm9kZUlkcztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBBZGQgZW5kIG5vZGVcbiAgbm9kZXMucHVzaCh7XG4gICAgaWQ6ICdlbmQnLFxuICAgIHR5cGU6ICd3b3JrZmxvd0VuZCcsXG4gICAgZGF0YToge1xuICAgICAgbGFiZWw6ICdSZXR1cm4nLFxuICAgICAgbm9kZUtpbmQ6ICd3b3JrZmxvd19lbmQnLFxuICAgIH0sXG4gIH0pO1xuXG4gIGZvciAoY29uc3QgcHJldklkIG9mIHByZXZFeGl0SWRzKSB7XG4gICAgZWRnZXMucHVzaCh7XG4gICAgICBpZDogYGVfJHtwcmV2SWR9X2VuZGAsXG4gICAgICBzb3VyY2U6IHByZXZJZCxcbiAgICAgIHRhcmdldDogJ2VuZCcsXG4gICAgICB0eXBlOiAnZGVmYXVsdCcsXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4geyBub2RlcywgZWRnZXMgfTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBhIHN0YXRlbWVudCBvciBibG9jayBjb250YWlucyBhd2FpdCBleHByZXNzaW9ucyAocmVjdXJzaXZlbHkpXG4gKiBVc2VkIHRvIGRldGVybWluZSBpZiBhIGZvci93aGlsZSBsb29wIGlzIHRydWx5IGEgbG9vcGluZyBleGVjdXRpb24gcGF0dGVyblxuICogdnMganVzdCBjb2xsZWN0aW5nIHByb21pc2VzIGZvciBwYXJhbGxlbCBleGVjdXRpb25cbiAqL1xuZnVuY3Rpb24gY29udGFpbnNBd2FpdEV4cHJlc3Npb24obm9kZTogYW55KTogYm9vbGVhbiB7XG4gIGlmICghbm9kZSkgcmV0dXJuIGZhbHNlO1xuXG4gIC8vIERpcmVjdCBhd2FpdCBleHByZXNzaW9uXG4gIGlmIChub2RlLnR5cGUgPT09ICdBd2FpdEV4cHJlc3Npb24nKSByZXR1cm4gdHJ1ZTtcblxuICAvLyBDaGVjayBibG9jayBzdGF0ZW1lbnRzXG4gIGlmIChub2RlLnR5cGUgPT09ICdCbG9ja1N0YXRlbWVudCcgJiYgbm9kZS5zdG10cykge1xuICAgIHJldHVybiBub2RlLnN0bXRzLnNvbWUoKHN0bXQ6IGFueSkgPT4gY29udGFpbnNBd2FpdEV4cHJlc3Npb24oc3RtdCkpO1xuICB9XG5cbiAgLy8gQ2hlY2sgZXhwcmVzc2lvbiBzdGF0ZW1lbnRzXG4gIGlmIChub2RlLnR5cGUgPT09ICdFeHByZXNzaW9uU3RhdGVtZW50JyAmJiBub2RlLmV4cHJlc3Npb24pIHtcbiAgICByZXR1cm4gY29udGFpbnNBd2FpdEV4cHJlc3Npb24obm9kZS5leHByZXNzaW9uKTtcbiAgfVxuXG4gIC8vIENoZWNrIHZhcmlhYmxlIGRlY2xhcmF0aW9uc1xuICBpZiAobm9kZS50eXBlID09PSAnVmFyaWFibGVEZWNsYXJhdGlvbicgJiYgbm9kZS5kZWNsYXJhdGlvbnMpIHtcbiAgICByZXR1cm4gbm9kZS5kZWNsYXJhdGlvbnMuc29tZShcbiAgICAgIChkZWNsOiBhbnkpID0+IGRlY2wuaW5pdCAmJiBjb250YWluc0F3YWl0RXhwcmVzc2lvbihkZWNsLmluaXQpXG4gICAgKTtcbiAgfVxuXG4gIC8vIENoZWNrIGlmIHN0YXRlbWVudHNcbiAgaWYgKG5vZGUudHlwZSA9PT0gJ0lmU3RhdGVtZW50Jykge1xuICAgIHJldHVybiAoXG4gICAgICBjb250YWluc0F3YWl0RXhwcmVzc2lvbihub2RlLmNvbnNlcXVlbnQpIHx8XG4gICAgICBjb250YWluc0F3YWl0RXhwcmVzc2lvbihub2RlLmFsdGVybmF0ZSlcbiAgICApO1xuICB9XG5cbiAgLy8gQ2hlY2sgZm9yIHN0YXRlbWVudHNcbiAgaWYgKFxuICAgIG5vZGUudHlwZSA9PT0gJ0ZvclN0YXRlbWVudCcgfHxcbiAgICBub2RlLnR5cGUgPT09ICdXaGlsZVN0YXRlbWVudCcgfHxcbiAgICBub2RlLnR5cGUgPT09ICdGb3JPZlN0YXRlbWVudCcgfHxcbiAgICBub2RlLnR5cGUgPT09ICdGb3JJblN0YXRlbWVudCdcbiAgKSB7XG4gICAgcmV0dXJuIGNvbnRhaW5zQXdhaXRFeHByZXNzaW9uKG5vZGUuYm9keSk7XG4gIH1cblxuICAvLyBDaGVjayBhc3NpZ25tZW50IGV4cHJlc3Npb25zIChlLmcuLCByZXN1bHQgPSBhd2FpdCBkb1dvcmsoKSlcbiAgaWYgKG5vZGUudHlwZSA9PT0gJ0Fzc2lnbm1lbnRFeHByZXNzaW9uJykge1xuICAgIHJldHVybiBjb250YWluc0F3YWl0RXhwcmVzc2lvbihub2RlLnJpZ2h0KTtcbiAgfVxuXG4gIC8vIENoZWNrIGNhbGwgZXhwcmVzc2lvbnMgKGZvciBhd2FpdCBpbiBhcmd1bWVudHMpXG4gIGlmIChub2RlLnR5cGUgPT09ICdDYWxsRXhwcmVzc2lvbicpIHtcbiAgICBpZiAobm9kZS5hcmd1bWVudHMpIHtcbiAgICAgIHJldHVybiBub2RlLmFyZ3VtZW50cy5zb21lKChhcmc6IGFueSkgPT5cbiAgICAgICAgY29udGFpbnNBd2FpdEV4cHJlc3Npb24oYXJnLmV4cHJlc3Npb24gfHwgYXJnKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQW5hbHl6ZSBhIHN0YXRlbWVudCBhbmQgZXh0cmFjdCBzdGVwIGNhbGxzIHdpdGggcHJvcGVyIENGRyBzdHJ1Y3R1cmVcbiAqL1xuZnVuY3Rpb24gYW5hbHl6ZVN0YXRlbWVudChcbiAgc3RtdDogU3RhdGVtZW50LFxuICBzdGVwRGVjbGFyYXRpb25zOiBNYXA8c3RyaW5nLCB7IHN0ZXBJZDogc3RyaW5nIH0+LFxuICBjb250ZXh0OiBBbmFseXNpc0NvbnRleHQsXG4gIGZ1bmN0aW9uTWFwOiBNYXA8c3RyaW5nLCBGdW5jdGlvbkluZm8+LFxuICB2YXJpYWJsZU1hcDogTWFwPHN0cmluZywgYW55PlxuKTogQW5hbHlzaXNSZXN1bHQge1xuICBjb25zdCBub2RlczogTWFuaWZlc3ROb2RlW10gPSBbXTtcbiAgY29uc3QgZWRnZXM6IE1hbmlmZXN0RWRnZVtdID0gW107XG4gIGxldCBlbnRyeU5vZGVJZHM6IHN0cmluZ1tdID0gW107XG4gIGxldCBleGl0Tm9kZUlkczogc3RyaW5nW10gPSBbXTtcblxuICBpZiAoc3RtdC50eXBlID09PSAnVmFyaWFibGVEZWNsYXJhdGlvbicpIHtcbiAgICBjb25zdCB2YXJEZWNsID0gc3RtdCBhcyBWYXJpYWJsZURlY2xhcmF0aW9uO1xuICAgIGZvciAoY29uc3QgZGVjbCBvZiB2YXJEZWNsLmRlY2xhcmF0aW9ucykge1xuICAgICAgaWYgKGRlY2wuaW5pdCkge1xuICAgICAgICAvLyBUcmFjayB3ZWJob29rL2hvb2sgdmFyaWFibGUgYXNzaWdubWVudHM6IGNvbnN0IHdlYmhvb2sgPSBjcmVhdGVXZWJob29rKClcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGRlY2wuaWQudHlwZSA9PT0gJ0lkZW50aWZpZXInICYmXG4gICAgICAgICAgZGVjbC5pbml0LnR5cGUgPT09ICdDYWxsRXhwcmVzc2lvbicgJiZcbiAgICAgICAgICAoZGVjbC5pbml0IGFzIENhbGxFeHByZXNzaW9uKS5jYWxsZWUudHlwZSA9PT0gJ0lkZW50aWZpZXInXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IGZ1bmNOYW1lID0gKChkZWNsLmluaXQgYXMgQ2FsbEV4cHJlc3Npb24pLmNhbGxlZSBhcyBJZGVudGlmaWVyKVxuICAgICAgICAgICAgLnZhbHVlO1xuICAgICAgICAgIGlmIChmdW5jTmFtZSA9PT0gJ2NyZWF0ZVdlYmhvb2snIHx8IGZ1bmNOYW1lID09PSAnY3JlYXRlSG9vaycpIHtcbiAgICAgICAgICAgIGNvbnRleHQud2ViaG9va1ZhcmlhYmxlcy5hZGQoKGRlY2wuaWQgYXMgSWRlbnRpZmllcikudmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRyYWNrIGVtcHR5IGFycmF5IGFzc2lnbm1lbnRzIGZvciBQcm9taXNlLmFsbCBwYXR0ZXJuOiBjb25zdCBwcm9taXNlcyA9IFtdXG4gICAgICAgIGlmIChcbiAgICAgICAgICBkZWNsLmlkLnR5cGUgPT09ICdJZGVudGlmaWVyJyAmJlxuICAgICAgICAgIGRlY2wuaW5pdC50eXBlID09PSAnQXJyYXlFeHByZXNzaW9uJ1xuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBlbGVtZW50cyA9IChkZWNsLmluaXQgYXMgYW55KS5lbGVtZW50cztcbiAgICAgICAgICAvLyBFbXB0eSBhcnJheTogZWxlbWVudHMgaXMgdW5kZWZpbmVkLCBudWxsLCBvciBlbXB0eSBhcnJheVxuICAgICAgICAgIGlmICghZWxlbWVudHMgfHwgZWxlbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBjb25zdCB2YXJOYW1lID0gKGRlY2wuaWQgYXMgSWRlbnRpZmllcikudmFsdWU7XG4gICAgICAgICAgICBjb250ZXh0LnByb21pc2VBcnJheXMuc2V0KHZhck5hbWUsIFtdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhbmFseXplRXhwcmVzc2lvbihcbiAgICAgICAgICBkZWNsLmluaXQsXG4gICAgICAgICAgc3RlcERlY2xhcmF0aW9ucyxcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIGZ1bmN0aW9uTWFwLFxuICAgICAgICAgIHZhcmlhYmxlTWFwXG4gICAgICAgICk7XG4gICAgICAgIG5vZGVzLnB1c2goLi4ucmVzdWx0Lm5vZGVzKTtcbiAgICAgICAgZWRnZXMucHVzaCguLi5yZXN1bHQuZWRnZXMpO1xuICAgICAgICBpZiAoZW50cnlOb2RlSWRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGVudHJ5Tm9kZUlkcyA9IHJlc3VsdC5lbnRyeU5vZGVJZHM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9yIChjb25zdCBwcmV2SWQgb2YgZXhpdE5vZGVJZHMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZW50cnlJZCBvZiByZXN1bHQuZW50cnlOb2RlSWRzKSB7XG4gICAgICAgICAgICAgIGVkZ2VzLnB1c2goe1xuICAgICAgICAgICAgICAgIGlkOiBgZV8ke3ByZXZJZH1fJHtlbnRyeUlkfWAsXG4gICAgICAgICAgICAgICAgc291cmNlOiBwcmV2SWQsXG4gICAgICAgICAgICAgICAgdGFyZ2V0OiBlbnRyeUlkLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdkZWZhdWx0JyxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGV4aXROb2RlSWRzID0gcmVzdWx0LmV4aXROb2RlSWRzO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChzdG10LnR5cGUgPT09ICdFeHByZXNzaW9uU3RhdGVtZW50Jykge1xuICAgIGNvbnN0IHJlc3VsdCA9IGFuYWx5emVFeHByZXNzaW9uKFxuICAgICAgc3RtdC5leHByZXNzaW9uLFxuICAgICAgc3RlcERlY2xhcmF0aW9ucyxcbiAgICAgIGNvbnRleHQsXG4gICAgICBmdW5jdGlvbk1hcCxcbiAgICAgIHZhcmlhYmxlTWFwXG4gICAgKTtcbiAgICBub2Rlcy5wdXNoKC4uLnJlc3VsdC5ub2Rlcyk7XG4gICAgZWRnZXMucHVzaCguLi5yZXN1bHQuZWRnZXMpO1xuICAgIGVudHJ5Tm9kZUlkcyA9IHJlc3VsdC5lbnRyeU5vZGVJZHM7XG4gICAgZXhpdE5vZGVJZHMgPSByZXN1bHQuZXhpdE5vZGVJZHM7XG4gIH1cblxuICBpZiAoc3RtdC50eXBlID09PSAnSWZTdGF0ZW1lbnQnKSB7XG4gICAgY29uc3Qgc2F2ZWRDb25kaXRpb25hbCA9IGNvbnRleHQuaW5Db25kaXRpb25hbDtcbiAgICBjb25zdCBjb25kaXRpb25hbElkID0gYGNvbmRfJHtjb250ZXh0LmNvbmRpdGlvbmFsQ291bnRlcisrfWA7XG4gICAgY29udGV4dC5pbkNvbmRpdGlvbmFsID0gY29uZGl0aW9uYWxJZDtcblxuICAgIC8vIEFuYWx5emUgdGhlIFwidGhlblwiIGJyYW5jaCBmaXJzdCB0byBjaGVjayBpZiBpdCBoYXMgYW55IHdvcmtmbG93LXJlbGV2YW50IG5vZGVzXG4gICAgbGV0IHRoZW5SZXN1bHQ6IEFuYWx5c2lzUmVzdWx0O1xuICAgIGlmIChzdG10LmNvbnNlcXVlbnQudHlwZSA9PT0gJ0Jsb2NrU3RhdGVtZW50Jykge1xuICAgICAgdGhlblJlc3VsdCA9IGFuYWx5emVCbG9jayhcbiAgICAgICAgc3RtdC5jb25zZXF1ZW50LnN0bXRzLFxuICAgICAgICBzdGVwRGVjbGFyYXRpb25zLFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICBmdW5jdGlvbk1hcCxcbiAgICAgICAgdmFyaWFibGVNYXBcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEhhbmRsZSBzaW5nbGUtc3RhdGVtZW50IGNvbnNlcXVlbnQgKG5vIGJyYWNlcylcbiAgICAgIHRoZW5SZXN1bHQgPSBhbmFseXplU3RhdGVtZW50KFxuICAgICAgICBzdG10LmNvbnNlcXVlbnQsXG4gICAgICAgIHN0ZXBEZWNsYXJhdGlvbnMsXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIGZ1bmN0aW9uTWFwLFxuICAgICAgICB2YXJpYWJsZU1hcFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBBbmFseXplIHRoZSBcImVsc2VcIiBicmFuY2ggaWYgaXQgZXhpc3RzXG4gICAgbGV0IGVsc2VSZXN1bHQ6IEFuYWx5c2lzUmVzdWx0IHwgbnVsbCA9IG51bGw7XG4gICAgaWYgKHN0bXQuYWx0ZXJuYXRlKSB7XG4gICAgICBpZiAoc3RtdC5hbHRlcm5hdGUudHlwZSA9PT0gJ0Jsb2NrU3RhdGVtZW50Jykge1xuICAgICAgICBlbHNlUmVzdWx0ID0gYW5hbHl6ZUJsb2NrKFxuICAgICAgICAgIHN0bXQuYWx0ZXJuYXRlLnN0bXRzLFxuICAgICAgICAgIHN0ZXBEZWNsYXJhdGlvbnMsXG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBmdW5jdGlvbk1hcCxcbiAgICAgICAgICB2YXJpYWJsZU1hcFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSGFuZGxlIHNpbmdsZS1zdGF0ZW1lbnQgYWx0ZXJuYXRlIChubyBicmFjZXMpIG9yIGVsc2UtaWZcbiAgICAgICAgZWxzZVJlc3VsdCA9IGFuYWx5emVTdGF0ZW1lbnQoXG4gICAgICAgICAgc3RtdC5hbHRlcm5hdGUsXG4gICAgICAgICAgc3RlcERlY2xhcmF0aW9ucyxcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIGZ1bmN0aW9uTWFwLFxuICAgICAgICAgIHZhcmlhYmxlTWFwXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gT25seSBjcmVhdGUgY29uZGl0aW9uYWwgbm9kZSBpZiBhdCBsZWFzdCBvbmUgYnJhbmNoIGhhcyB3b3JrZmxvdy1yZWxldmFudCBub2Rlcy5cbiAgICAvLyBUaGlzIGF2b2lkcyBjcmVhdGluZyBub2RlcyBmb3IgcnVudGltZSBhc3NlcnRpb25zIGxpa2UgYGlmICghY3R4KSB7IHRocm93IC4uLiB9YFxuICAgIGNvbnN0IHRoZW5IYXNOb2RlcyA9IHRoZW5SZXN1bHQubm9kZXMubGVuZ3RoID4gMDtcbiAgICBjb25zdCBlbHNlSGFzTm9kZXMgPSBlbHNlUmVzdWx0ID8gZWxzZVJlc3VsdC5ub2Rlcy5sZW5ndGggPiAwIDogZmFsc2U7XG5cbiAgICBpZiAodGhlbkhhc05vZGVzIHx8IGVsc2VIYXNOb2Rlcykge1xuICAgICAgLy8gQ3JlYXRlIHRoZSBjb25kaXRpb25hbCBkZWNpc2lvbiBub2RlXG4gICAgICBjb25zdCBjb25kaXRpb25UZXh0ID0gZ2V0Q29uZGl0aW9uVGV4dChzdG10LnRlc3QpO1xuICAgICAgY29uc3QgY29uZE5vZGVJZCA9IGAke2NvbmRpdGlvbmFsSWR9X25vZGVgO1xuICAgICAgY29uc3QgY29uZE1ldGFkYXRhOiBOb2RlTWV0YWRhdGEgPSB7fTtcbiAgICAgIGlmIChjb250ZXh0LmluTG9vcCkge1xuICAgICAgICBjb25kTWV0YWRhdGEubG9vcElkID0gY29udGV4dC5pbkxvb3A7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbmROb2RlOiBNYW5pZmVzdE5vZGUgPSB7XG4gICAgICAgIGlkOiBjb25kTm9kZUlkLFxuICAgICAgICB0eXBlOiAnY29uZGl0aW9uYWwnLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgbGFiZWw6IGNvbmRpdGlvblRleHQsXG4gICAgICAgICAgbm9kZUtpbmQ6ICdjb25kaXRpb25hbCcsXG4gICAgICAgIH0sXG4gICAgICAgIG1ldGFkYXRhOlxuICAgICAgICAgIE9iamVjdC5rZXlzKGNvbmRNZXRhZGF0YSkubGVuZ3RoID4gMCA/IGNvbmRNZXRhZGF0YSA6IHVuZGVmaW5lZCxcbiAgICAgIH07XG4gICAgICBub2Rlcy5wdXNoKGNvbmROb2RlKTtcblxuICAgICAgLy8gVGhlIGNvbmRpdGlvbmFsIG5vZGUgaXMgdGhlIGVudHJ5IHBvaW50XG4gICAgICBlbnRyeU5vZGVJZHMucHVzaChjb25kTm9kZUlkKTtcblxuICAgICAgZm9yIChjb25zdCBub2RlIG9mIHRoZW5SZXN1bHQubm9kZXMpIHtcbiAgICAgICAgaWYgKCFub2RlLm1ldGFkYXRhKSBub2RlLm1ldGFkYXRhID0ge307XG4gICAgICAgIG5vZGUubWV0YWRhdGEuY29uZGl0aW9uYWxJZCA9IGNvbmRpdGlvbmFsSWQ7XG4gICAgICAgIG5vZGUubWV0YWRhdGEuY29uZGl0aW9uYWxCcmFuY2ggPSAnVGhlbic7XG4gICAgICB9XG5cbiAgICAgIG5vZGVzLnB1c2goLi4udGhlblJlc3VsdC5ub2Rlcyk7XG4gICAgICBlZGdlcy5wdXNoKC4uLnRoZW5SZXN1bHQuZWRnZXMpO1xuXG4gICAgICAvLyBDcmVhdGUgZWRnZSBmcm9tIGNvbmRpdGlvbmFsIG5vZGUgdG8gXCJ0aGVuXCIgYnJhbmNoIHdpdGggXCJ0cnVlXCIgbGFiZWxcbiAgICAgIGZvciAoY29uc3QgdGhlbkVudHJ5SWQgb2YgdGhlblJlc3VsdC5lbnRyeU5vZGVJZHMpIHtcbiAgICAgICAgZWRnZXMucHVzaCh7XG4gICAgICAgICAgaWQ6IGBlXyR7Y29uZE5vZGVJZH1fJHt0aGVuRW50cnlJZH1fdHJ1ZWAsXG4gICAgICAgICAgc291cmNlOiBjb25kTm9kZUlkLFxuICAgICAgICAgIHRhcmdldDogdGhlbkVudHJ5SWQsXG4gICAgICAgICAgdHlwZTogJ2NvbmRpdGlvbmFsJyxcbiAgICAgICAgICBsYWJlbDogJ3RydWUnLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGV4aXROb2RlSWRzLnB1c2goLi4udGhlblJlc3VsdC5leGl0Tm9kZUlkcyk7XG5cbiAgICAgIGlmIChlbHNlUmVzdWx0KSB7XG4gICAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBlbHNlUmVzdWx0Lm5vZGVzKSB7XG4gICAgICAgICAgaWYgKCFub2RlLm1ldGFkYXRhKSBub2RlLm1ldGFkYXRhID0ge307XG4gICAgICAgICAgbm9kZS5tZXRhZGF0YS5jb25kaXRpb25hbElkID0gY29uZGl0aW9uYWxJZDtcbiAgICAgICAgICBub2RlLm1ldGFkYXRhLmNvbmRpdGlvbmFsQnJhbmNoID0gJ0Vsc2UnO1xuICAgICAgICB9XG5cbiAgICAgICAgbm9kZXMucHVzaCguLi5lbHNlUmVzdWx0Lm5vZGVzKTtcbiAgICAgICAgZWRnZXMucHVzaCguLi5lbHNlUmVzdWx0LmVkZ2VzKTtcblxuICAgICAgICAvLyBDcmVhdGUgZWRnZSBmcm9tIGNvbmRpdGlvbmFsIG5vZGUgdG8gXCJlbHNlXCIgYnJhbmNoIHdpdGggXCJmYWxzZVwiIGxhYmVsXG4gICAgICAgIGZvciAoY29uc3QgZWxzZUVudHJ5SWQgb2YgZWxzZVJlc3VsdC5lbnRyeU5vZGVJZHMpIHtcbiAgICAgICAgICBlZGdlcy5wdXNoKHtcbiAgICAgICAgICAgIGlkOiBgZV8ke2NvbmROb2RlSWR9XyR7ZWxzZUVudHJ5SWR9X2ZhbHNlYCxcbiAgICAgICAgICAgIHNvdXJjZTogY29uZE5vZGVJZCxcbiAgICAgICAgICAgIHRhcmdldDogZWxzZUVudHJ5SWQsXG4gICAgICAgICAgICB0eXBlOiAnY29uZGl0aW9uYWwnLFxuICAgICAgICAgICAgbGFiZWw6ICdmYWxzZScsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZXhpdE5vZGVJZHMucHVzaCguLi5lbHNlUmVzdWx0LmV4aXROb2RlSWRzKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gTm90ZTogV2hlbiB0aGVyZSdzIG5vIGVsc2UgYnJhbmNoLCB3ZSBkb24ndCBhZGQgdGhlIGNvbmRpdGlvbmFsIG5vZGUgYXMgYW4gZXhpdC5cbiAgICAvLyBUaGUgdGhlbi1icmFuY2ggZXhpdHMgYXJlIHRoZSBvbmx5IGV4aXRzLiBUaGlzIG1lYW5zIHRoZSBncmFwaCBzaG93cyB0aGUgXCJ0cnVlXCIgcGF0aDtcbiAgICAvLyB0aGUgXCJmYWxzZVwiIGNhc2UgKHdoZW4gY29uZGl0aW9uIGlzIGZhbHNlIGFuZCB0aGVyZSdzIG5vIGVsc2UpIGltcGxpY2l0bHkgbWVhbnNcbiAgICAvLyBleGVjdXRpb24gY29udGludWVzIHdpdGggbm8gc3RlcHMgZnJvbSB0aGlzIGlmIHN0YXRlbWVudC5cbiAgICAvL1xuICAgIC8vIFdoZW4gYm90aCBicmFuY2hlcyBoYXZlIG5vIHdvcmtmbG93LXJlbGV2YW50IG5vZGVzIChlLmcuLCBydW50aW1lIGFzc2VydGlvbnMgbGlrZVxuICAgIC8vIGBpZiAoIWN0eCkgeyB0aHJvdyAuLi4gfWApLCB3ZSBza2lwIGNyZWF0aW5nIHRoZSBjb25kaXRpb25hbCBub2RlIGVudGlyZWx5LlxuXG4gICAgY29udGV4dC5pbkNvbmRpdGlvbmFsID0gc2F2ZWRDb25kaXRpb25hbDtcbiAgfVxuXG4gIGlmIChzdG10LnR5cGUgPT09ICdXaGlsZVN0YXRlbWVudCcgfHwgc3RtdC50eXBlID09PSAnRm9yU3RhdGVtZW50Jykge1xuICAgIGNvbnN0IGJvZHkgPVxuICAgICAgc3RtdC50eXBlID09PSAnV2hpbGVTdGF0ZW1lbnQnID8gc3RtdC5ib2R5IDogKHN0bXQgYXMgYW55KS5ib2R5O1xuXG4gICAgLy8gT25seSB0cmVhdCBhcyBhIGxvb3AgaWYgdGhlIGJvZHkgY29udGFpbnMgYXdhaXQgZXhwcmVzc2lvbnNcbiAgICAvLyBPdGhlcndpc2UgaXQncyBsaWtlbHkgYSBcImNvbGxlY3QgcHJvbWlzZXNcIiBwYXR0ZXJuIChmb3IgcGFyYWxsZWwgZXhlY3V0aW9uKVxuICAgIGNvbnN0IGhhc0F3YWl0ID0gY29udGFpbnNBd2FpdEV4cHJlc3Npb24oYm9keSk7XG5cbiAgICBjb25zdCBsb29wSWQgPSBoYXNBd2FpdCA/IGBsb29wXyR7Y29udGV4dC5sb29wQ291bnRlcisrfWAgOiB1bmRlZmluZWQ7XG4gICAgY29uc3Qgc2F2ZWRMb29wID0gY29udGV4dC5pbkxvb3A7XG4gICAgaWYgKGxvb3BJZCkge1xuICAgICAgY29udGV4dC5pbkxvb3AgPSBsb29wSWQ7XG4gICAgfVxuXG4gICAgaWYgKGJvZHkudHlwZSA9PT0gJ0Jsb2NrU3RhdGVtZW50Jykge1xuICAgICAgY29uc3QgbG9vcFJlc3VsdCA9IGFuYWx5emVCbG9jayhcbiAgICAgICAgYm9keS5zdG10cyxcbiAgICAgICAgc3RlcERlY2xhcmF0aW9ucyxcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgZnVuY3Rpb25NYXAsXG4gICAgICAgIHZhcmlhYmxlTWFwXG4gICAgICApO1xuXG4gICAgICAvLyBPbmx5IGFkZCBsb29wIG1ldGFkYXRhIGlmIHRoaXMgaXMgdHJ1bHkgYSBsb29waW5nIHBhdHRlcm5cbiAgICAgIGlmIChsb29wSWQpIHtcbiAgICAgICAgZm9yIChjb25zdCBub2RlIG9mIGxvb3BSZXN1bHQubm9kZXMpIHtcbiAgICAgICAgICBpZiAoIW5vZGUubWV0YWRhdGEpIG5vZGUubWV0YWRhdGEgPSB7fTtcbiAgICAgICAgICBub2RlLm1ldGFkYXRhLmxvb3BJZCA9IGxvb3BJZDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBub2Rlcy5wdXNoKC4uLmxvb3BSZXN1bHQubm9kZXMpO1xuICAgICAgZWRnZXMucHVzaCguLi5sb29wUmVzdWx0LmVkZ2VzKTtcbiAgICAgIGVudHJ5Tm9kZUlkcyA9IGxvb3BSZXN1bHQuZW50cnlOb2RlSWRzO1xuICAgICAgZXhpdE5vZGVJZHMgPSBsb29wUmVzdWx0LmV4aXROb2RlSWRzO1xuXG4gICAgICAvLyBPbmx5IGNyZWF0ZSBsb29wLWJhY2sgZWRnZXMgaWYgdGhpcyBpcyB0cnVseSBhIGxvb3BpbmcgcGF0dGVyblxuICAgICAgaWYgKGxvb3BJZCkge1xuICAgICAgICBmb3IgKGNvbnN0IGV4aXRJZCBvZiBsb29wUmVzdWx0LmV4aXROb2RlSWRzKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBlbnRyeUlkIG9mIGxvb3BSZXN1bHQuZW50cnlOb2RlSWRzKSB7XG4gICAgICAgICAgICBlZGdlcy5wdXNoKHtcbiAgICAgICAgICAgICAgaWQ6IGBlXyR7ZXhpdElkfV9iYWNrXyR7ZW50cnlJZH1gLFxuICAgICAgICAgICAgICBzb3VyY2U6IGV4aXRJZCxcbiAgICAgICAgICAgICAgdGFyZ2V0OiBlbnRyeUlkLFxuICAgICAgICAgICAgICB0eXBlOiAnbG9vcCcsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSGFuZGxlIHNpbmdsZS1zdGF0ZW1lbnQgYm9keSAobm8gYnJhY2VzKVxuICAgICAgY29uc3QgbG9vcFJlc3VsdCA9IGFuYWx5emVTdGF0ZW1lbnQoXG4gICAgICAgIGJvZHksXG4gICAgICAgIHN0ZXBEZWNsYXJhdGlvbnMsXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIGZ1bmN0aW9uTWFwLFxuICAgICAgICB2YXJpYWJsZU1hcFxuICAgICAgKTtcblxuICAgICAgLy8gT25seSBhZGQgbG9vcCBtZXRhZGF0YSBpZiB0aGlzIGlzIHRydWx5IGEgbG9vcGluZyBwYXR0ZXJuXG4gICAgICBpZiAobG9vcElkKSB7XG4gICAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBsb29wUmVzdWx0Lm5vZGVzKSB7XG4gICAgICAgICAgaWYgKCFub2RlLm1ldGFkYXRhKSBub2RlLm1ldGFkYXRhID0ge307XG4gICAgICAgICAgbm9kZS5tZXRhZGF0YS5sb29wSWQgPSBsb29wSWQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbm9kZXMucHVzaCguLi5sb29wUmVzdWx0Lm5vZGVzKTtcbiAgICAgIGVkZ2VzLnB1c2goLi4ubG9vcFJlc3VsdC5lZGdlcyk7XG4gICAgICBlbnRyeU5vZGVJZHMgPSBsb29wUmVzdWx0LmVudHJ5Tm9kZUlkcztcbiAgICAgIGV4aXROb2RlSWRzID0gbG9vcFJlc3VsdC5leGl0Tm9kZUlkcztcblxuICAgICAgLy8gT25seSBjcmVhdGUgbG9vcC1iYWNrIGVkZ2VzIGlmIHRoaXMgaXMgdHJ1bHkgYSBsb29waW5nIHBhdHRlcm5cbiAgICAgIGlmIChsb29wSWQpIHtcbiAgICAgICAgZm9yIChjb25zdCBleGl0SWQgb2YgbG9vcFJlc3VsdC5leGl0Tm9kZUlkcykge1xuICAgICAgICAgIGZvciAoY29uc3QgZW50cnlJZCBvZiBsb29wUmVzdWx0LmVudHJ5Tm9kZUlkcykge1xuICAgICAgICAgICAgZWRnZXMucHVzaCh7XG4gICAgICAgICAgICAgIGlkOiBgZV8ke2V4aXRJZH1fYmFja18ke2VudHJ5SWR9YCxcbiAgICAgICAgICAgICAgc291cmNlOiBleGl0SWQsXG4gICAgICAgICAgICAgIHRhcmdldDogZW50cnlJZCxcbiAgICAgICAgICAgICAgdHlwZTogJ2xvb3AnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29udGV4dC5pbkxvb3AgPSBzYXZlZExvb3A7XG4gIH1cblxuICBpZiAoc3RtdC50eXBlID09PSAnRm9yT2ZTdGF0ZW1lbnQnKSB7XG4gICAgY29uc3QgbG9vcElkID0gYGxvb3BfJHtjb250ZXh0Lmxvb3BDb3VudGVyKyt9YDtcbiAgICBjb25zdCBzYXZlZExvb3AgPSBjb250ZXh0LmluTG9vcDtcbiAgICBjb250ZXh0LmluTG9vcCA9IGxvb3BJZDtcblxuICAgIGNvbnN0IGlzQXdhaXQgPSAoc3RtdCBhcyBhbnkpLmlzQXdhaXQgfHwgKHN0bXQgYXMgYW55KS5hd2FpdDtcbiAgICBjb25zdCBib2R5ID0gKHN0bXQgYXMgYW55KS5ib2R5O1xuXG4gICAgaWYgKGJvZHkudHlwZSA9PT0gJ0Jsb2NrU3RhdGVtZW50Jykge1xuICAgICAgY29uc3QgbG9vcFJlc3VsdCA9IGFuYWx5emVCbG9jayhcbiAgICAgICAgYm9keS5zdG10cyxcbiAgICAgICAgc3RlcERlY2xhcmF0aW9ucyxcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgZnVuY3Rpb25NYXAsXG4gICAgICAgIHZhcmlhYmxlTWFwXG4gICAgICApO1xuXG4gICAgICBmb3IgKGNvbnN0IG5vZGUgb2YgbG9vcFJlc3VsdC5ub2Rlcykge1xuICAgICAgICBpZiAoIW5vZGUubWV0YWRhdGEpIG5vZGUubWV0YWRhdGEgPSB7fTtcbiAgICAgICAgbm9kZS5tZXRhZGF0YS5sb29wSWQgPSBsb29wSWQ7XG4gICAgICAgIG5vZGUubWV0YWRhdGEubG9vcElzQXdhaXQgPSBpc0F3YWl0O1xuICAgICAgfVxuXG4gICAgICBub2Rlcy5wdXNoKC4uLmxvb3BSZXN1bHQubm9kZXMpO1xuICAgICAgZWRnZXMucHVzaCguLi5sb29wUmVzdWx0LmVkZ2VzKTtcbiAgICAgIGVudHJ5Tm9kZUlkcyA9IGxvb3BSZXN1bHQuZW50cnlOb2RlSWRzO1xuICAgICAgZXhpdE5vZGVJZHMgPSBsb29wUmVzdWx0LmV4aXROb2RlSWRzO1xuXG4gICAgICBmb3IgKGNvbnN0IGV4aXRJZCBvZiBsb29wUmVzdWx0LmV4aXROb2RlSWRzKSB7XG4gICAgICAgIGZvciAoY29uc3QgZW50cnlJZCBvZiBsb29wUmVzdWx0LmVudHJ5Tm9kZUlkcykge1xuICAgICAgICAgIGVkZ2VzLnB1c2goe1xuICAgICAgICAgICAgaWQ6IGBlXyR7ZXhpdElkfV9iYWNrXyR7ZW50cnlJZH1gLFxuICAgICAgICAgICAgc291cmNlOiBleGl0SWQsXG4gICAgICAgICAgICB0YXJnZXQ6IGVudHJ5SWQsXG4gICAgICAgICAgICB0eXBlOiAnbG9vcCcsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSGFuZGxlIHNpbmdsZS1zdGF0ZW1lbnQgYm9keSAobm8gYnJhY2VzKVxuICAgICAgY29uc3QgbG9vcFJlc3VsdCA9IGFuYWx5emVTdGF0ZW1lbnQoXG4gICAgICAgIGJvZHksXG4gICAgICAgIHN0ZXBEZWNsYXJhdGlvbnMsXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIGZ1bmN0aW9uTWFwLFxuICAgICAgICB2YXJpYWJsZU1hcFxuICAgICAgKTtcblxuICAgICAgZm9yIChjb25zdCBub2RlIG9mIGxvb3BSZXN1bHQubm9kZXMpIHtcbiAgICAgICAgaWYgKCFub2RlLm1ldGFkYXRhKSBub2RlLm1ldGFkYXRhID0ge307XG4gICAgICAgIG5vZGUubWV0YWRhdGEubG9vcElkID0gbG9vcElkO1xuICAgICAgICBub2RlLm1ldGFkYXRhLmxvb3BJc0F3YWl0ID0gaXNBd2FpdDtcbiAgICAgIH1cblxuICAgICAgbm9kZXMucHVzaCguLi5sb29wUmVzdWx0Lm5vZGVzKTtcbiAgICAgIGVkZ2VzLnB1c2goLi4ubG9vcFJlc3VsdC5lZGdlcyk7XG4gICAgICBlbnRyeU5vZGVJZHMgPSBsb29wUmVzdWx0LmVudHJ5Tm9kZUlkcztcbiAgICAgIGV4aXROb2RlSWRzID0gbG9vcFJlc3VsdC5leGl0Tm9kZUlkcztcblxuICAgICAgZm9yIChjb25zdCBleGl0SWQgb2YgbG9vcFJlc3VsdC5leGl0Tm9kZUlkcykge1xuICAgICAgICBmb3IgKGNvbnN0IGVudHJ5SWQgb2YgbG9vcFJlc3VsdC5lbnRyeU5vZGVJZHMpIHtcbiAgICAgICAgICBlZGdlcy5wdXNoKHtcbiAgICAgICAgICAgIGlkOiBgZV8ke2V4aXRJZH1fYmFja18ke2VudHJ5SWR9YCxcbiAgICAgICAgICAgIHNvdXJjZTogZXhpdElkLFxuICAgICAgICAgICAgdGFyZ2V0OiBlbnRyeUlkLFxuICAgICAgICAgICAgdHlwZTogJ2xvb3AnLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29udGV4dC5pbkxvb3AgPSBzYXZlZExvb3A7XG4gIH1cblxuICAvLyBIYW5kbGUgcGxhaW4gQmxvY2tTdGF0ZW1lbnQgKGJhcmUgYmxvY2tzIGxpa2UgeyAuLi4gfSlcbiAgaWYgKHN0bXQudHlwZSA9PT0gJ0Jsb2NrU3RhdGVtZW50Jykge1xuICAgIGNvbnN0IGJsb2NrUmVzdWx0ID0gYW5hbHl6ZUJsb2NrKFxuICAgICAgKHN0bXQgYXMgQmxvY2tTdGF0ZW1lbnQpLnN0bXRzLFxuICAgICAgc3RlcERlY2xhcmF0aW9ucyxcbiAgICAgIGNvbnRleHQsXG4gICAgICBmdW5jdGlvbk1hcCxcbiAgICAgIHZhcmlhYmxlTWFwXG4gICAgKTtcbiAgICBub2Rlcy5wdXNoKC4uLmJsb2NrUmVzdWx0Lm5vZGVzKTtcbiAgICBlZGdlcy5wdXNoKC4uLmJsb2NrUmVzdWx0LmVkZ2VzKTtcbiAgICBlbnRyeU5vZGVJZHMgPSBibG9ja1Jlc3VsdC5lbnRyeU5vZGVJZHM7XG4gICAgZXhpdE5vZGVJZHMgPSBibG9ja1Jlc3VsdC5leGl0Tm9kZUlkcztcbiAgfVxuXG4gIGlmIChzdG10LnR5cGUgPT09ICdSZXR1cm5TdGF0ZW1lbnQnICYmIChzdG10IGFzIGFueSkuYXJndW1lbnQpIHtcbiAgICBjb25zdCByZXN1bHQgPSBhbmFseXplRXhwcmVzc2lvbihcbiAgICAgIChzdG10IGFzIGFueSkuYXJndW1lbnQsXG4gICAgICBzdGVwRGVjbGFyYXRpb25zLFxuICAgICAgY29udGV4dCxcbiAgICAgIGZ1bmN0aW9uTWFwLFxuICAgICAgdmFyaWFibGVNYXBcbiAgICApO1xuICAgIG5vZGVzLnB1c2goLi4ucmVzdWx0Lm5vZGVzKTtcbiAgICBlZGdlcy5wdXNoKC4uLnJlc3VsdC5lZGdlcyk7XG4gICAgZW50cnlOb2RlSWRzID0gcmVzdWx0LmVudHJ5Tm9kZUlkcztcbiAgICBleGl0Tm9kZUlkcyA9IHJlc3VsdC5leGl0Tm9kZUlkcztcbiAgfVxuXG4gIHJldHVybiB7IG5vZGVzLCBlZGdlcywgZW50cnlOb2RlSWRzLCBleGl0Tm9kZUlkcyB9O1xufVxuXG4vKipcbiAqIEFuYWx5emUgYSBibG9jayBvZiBzdGF0ZW1lbnRzIHdpdGggcHJvcGVyIHNlcXVlbnRpYWwgY2hhaW5pbmdcbiAqL1xuZnVuY3Rpb24gYW5hbHl6ZUJsb2NrKFxuICBzdG10czogU3RhdGVtZW50W10sXG4gIHN0ZXBEZWNsYXJhdGlvbnM6IE1hcDxzdHJpbmcsIHsgc3RlcElkOiBzdHJpbmcgfT4sXG4gIGNvbnRleHQ6IEFuYWx5c2lzQ29udGV4dCxcbiAgZnVuY3Rpb25NYXA6IE1hcDxzdHJpbmcsIEZ1bmN0aW9uSW5mbz4sXG4gIHZhcmlhYmxlTWFwOiBNYXA8c3RyaW5nLCBhbnk+XG4pOiBBbmFseXNpc1Jlc3VsdCB7XG4gIGNvbnN0IG5vZGVzOiBNYW5pZmVzdE5vZGVbXSA9IFtdO1xuICBjb25zdCBlZGdlczogTWFuaWZlc3RFZGdlW10gPSBbXTtcbiAgbGV0IGVudHJ5Tm9kZUlkczogc3RyaW5nW10gPSBbXTtcbiAgbGV0IGN1cnJlbnRFeGl0SWRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGZvciAoY29uc3Qgc3RtdCBvZiBzdG10cykge1xuICAgIGNvbnN0IHJlc3VsdCA9IGFuYWx5emVTdGF0ZW1lbnQoXG4gICAgICBzdG10LFxuICAgICAgc3RlcERlY2xhcmF0aW9ucyxcbiAgICAgIGNvbnRleHQsXG4gICAgICBmdW5jdGlvbk1hcCxcbiAgICAgIHZhcmlhYmxlTWFwXG4gICAgKTtcblxuICAgIGlmIChyZXN1bHQubm9kZXMubGVuZ3RoID09PSAwKSBjb250aW51ZTtcblxuICAgIG5vZGVzLnB1c2goLi4ucmVzdWx0Lm5vZGVzKTtcbiAgICBlZGdlcy5wdXNoKC4uLnJlc3VsdC5lZGdlcyk7XG5cbiAgICBpZiAoZW50cnlOb2RlSWRzLmxlbmd0aCA9PT0gMCAmJiByZXN1bHQuZW50cnlOb2RlSWRzLmxlbmd0aCA+IDApIHtcbiAgICAgIGVudHJ5Tm9kZUlkcyA9IHJlc3VsdC5lbnRyeU5vZGVJZHM7XG4gICAgfVxuXG4gICAgaWYgKGN1cnJlbnRFeGl0SWRzLmxlbmd0aCA+IDAgJiYgcmVzdWx0LmVudHJ5Tm9kZUlkcy5sZW5ndGggPiAwKSB7XG4gICAgICBmb3IgKGNvbnN0IHByZXZJZCBvZiBjdXJyZW50RXhpdElkcykge1xuICAgICAgICBmb3IgKGNvbnN0IGVudHJ5SWQgb2YgcmVzdWx0LmVudHJ5Tm9kZUlkcykge1xuICAgICAgICAgIGNvbnN0IHRhcmdldE5vZGUgPSByZXN1bHQubm9kZXMuZmluZCgobikgPT4gbi5pZCA9PT0gZW50cnlJZCk7XG4gICAgICAgICAgY29uc3QgZWRnZVR5cGUgPSB0YXJnZXROb2RlPy5tZXRhZGF0YT8ucGFyYWxsZWxHcm91cElkXG4gICAgICAgICAgICA/ICdwYXJhbGxlbCdcbiAgICAgICAgICAgIDogJ2RlZmF1bHQnO1xuICAgICAgICAgIGVkZ2VzLnB1c2goe1xuICAgICAgICAgICAgaWQ6IGBlXyR7cHJldklkfV8ke2VudHJ5SWR9YCxcbiAgICAgICAgICAgIHNvdXJjZTogcHJldklkLFxuICAgICAgICAgICAgdGFyZ2V0OiBlbnRyeUlkLFxuICAgICAgICAgICAgdHlwZTogZWRnZVR5cGUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocmVzdWx0LmV4aXROb2RlSWRzLmxlbmd0aCA+IDApIHtcbiAgICAgIGN1cnJlbnRFeGl0SWRzID0gcmVzdWx0LmV4aXROb2RlSWRzO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IG5vZGVzLCBlZGdlcywgZW50cnlOb2RlSWRzLCBleGl0Tm9kZUlkczogY3VycmVudEV4aXRJZHMgfTtcbn1cblxuLyoqXG4gKiBBbmFseXplIGFuIGV4cHJlc3Npb24gYW5kIGV4dHJhY3Qgc3RlcCBjYWxsc1xuICovXG5mdW5jdGlvbiBhbmFseXplRXhwcmVzc2lvbihcbiAgZXhwcjogRXhwcmVzc2lvbixcbiAgc3RlcERlY2xhcmF0aW9uczogTWFwPHN0cmluZywgeyBzdGVwSWQ6IHN0cmluZyB9PixcbiAgY29udGV4dDogQW5hbHlzaXNDb250ZXh0LFxuICBmdW5jdGlvbk1hcDogTWFwPHN0cmluZywgRnVuY3Rpb25JbmZvPixcbiAgdmFyaWFibGVNYXA6IE1hcDxzdHJpbmcsIGFueT4sXG4gIHZpc2l0ZWRGdW5jdGlvbnM6IFNldDxzdHJpbmc+ID0gbmV3IFNldCgpXG4pOiBBbmFseXNpc1Jlc3VsdCB7XG4gIGNvbnN0IG5vZGVzOiBNYW5pZmVzdE5vZGVbXSA9IFtdO1xuICBjb25zdCBlZGdlczogTWFuaWZlc3RFZGdlW10gPSBbXTtcbiAgY29uc3QgZW50cnlOb2RlSWRzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBleGl0Tm9kZUlkczogc3RyaW5nW10gPSBbXTtcblxuICBpZiAoZXhwci50eXBlID09PSAnQXdhaXRFeHByZXNzaW9uJykge1xuICAgIGNvbnN0IGF3YWl0ZWRFeHByID0gZXhwci5hcmd1bWVudDtcbiAgICBpZiAoYXdhaXRlZEV4cHIudHlwZSA9PT0gJ0NhbGxFeHByZXNzaW9uJykge1xuICAgICAgY29uc3QgY2FsbEV4cHIgPSBhd2FpdGVkRXhwciBhcyBDYWxsRXhwcmVzc2lvbjtcblxuICAgICAgLy8gQ2hlY2sgZm9yIFByb21pc2UuYWxsL3JhY2UvYWxsU2V0dGxlZC9hbnlcbiAgICAgIGlmIChjYWxsRXhwci5jYWxsZWUudHlwZSA9PT0gJ01lbWJlckV4cHJlc3Npb24nKSB7XG4gICAgICAgIGNvbnN0IG1lbWJlciA9IGNhbGxFeHByLmNhbGxlZSBhcyBNZW1iZXJFeHByZXNzaW9uO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgbWVtYmVyLm9iamVjdC50eXBlID09PSAnSWRlbnRpZmllcicgJiZcbiAgICAgICAgICAobWVtYmVyLm9iamVjdCBhcyBJZGVudGlmaWVyKS52YWx1ZSA9PT0gJ1Byb21pc2UnICYmXG4gICAgICAgICAgbWVtYmVyLnByb3BlcnR5LnR5cGUgPT09ICdJZGVudGlmaWVyJ1xuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBtZXRob2QgPSAobWVtYmVyLnByb3BlcnR5IGFzIElkZW50aWZpZXIpLnZhbHVlO1xuICAgICAgICAgIGlmIChbJ2FsbCcsICdyYWNlJywgJ2FsbFNldHRsZWQnLCAnYW55J10uaW5jbHVkZXMobWV0aG9kKSkge1xuICAgICAgICAgICAgY29uc3QgcGFyYWxsZWxJZCA9IGBwYXJhbGxlbF8ke2NvbnRleHQucGFyYWxsZWxDb3VudGVyKyt9YDtcblxuICAgICAgICAgICAgaWYgKGNhbGxFeHByLmFyZ3VtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGFyZyA9IGNhbGxFeHByLmFyZ3VtZW50c1swXS5leHByZXNzaW9uO1xuICAgICAgICAgICAgICBpZiAoYXJnLnR5cGUgPT09ICdBcnJheUV4cHJlc3Npb24nKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGFyZy5lbGVtZW50cykge1xuICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQ/LmV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZWxlbVJlc3VsdCA9IGFuYWx5emVFeHByZXNzaW9uKFxuICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuZXhwcmVzc2lvbixcbiAgICAgICAgICAgICAgICAgICAgICBzdGVwRGVjbGFyYXRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25NYXAsXG4gICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVNYXAsXG4gICAgICAgICAgICAgICAgICAgICAgdmlzaXRlZEZ1bmN0aW9uc1xuICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBlbGVtUmVzdWx0Lm5vZGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLm1ldGFkYXRhKSBub2RlLm1ldGFkYXRhID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgbm9kZS5tZXRhZGF0YS5wYXJhbGxlbEdyb3VwSWQgPSBwYXJhbGxlbElkO1xuICAgICAgICAgICAgICAgICAgICAgIG5vZGUubWV0YWRhdGEucGFyYWxsZWxNZXRob2QgPSBtZXRob2Q7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQuaW5Mb29wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLm1ldGFkYXRhLmxvb3BJZCA9IGNvbnRleHQuaW5Mb29wO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIG5vZGVzLnB1c2goLi4uZWxlbVJlc3VsdC5ub2Rlcyk7XG4gICAgICAgICAgICAgICAgICAgIGVkZ2VzLnB1c2goLi4uZWxlbVJlc3VsdC5lZGdlcyk7XG4gICAgICAgICAgICAgICAgICAgIGVudHJ5Tm9kZUlkcy5wdXNoKC4uLmVsZW1SZXN1bHQuZW50cnlOb2RlSWRzKTtcbiAgICAgICAgICAgICAgICAgICAgZXhpdE5vZGVJZHMucHVzaCguLi5lbGVtUmVzdWx0LmV4aXROb2RlSWRzKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgYXJnLnR5cGUgPT09ICdJZGVudGlmaWVyJyAmJlxuICAgICAgICAgICAgICAgIGNvbnRleHQucHJvbWlzZUFycmF5cy5oYXMoKGFyZyBhcyBJZGVudGlmaWVyKS52YWx1ZSlcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgLy8gSGFuZGxlIFByb21pc2UuYWxsKHZhcmlhYmxlTmFtZSkgd2hlcmUgdmFyaWFibGUgd2FzIGJ1aWx0IHZpYSBwdXNoKClcbiAgICAgICAgICAgICAgICBjb25zdCBhcnJheU5hbWUgPSAoYXJnIGFzIElkZW50aWZpZXIpLnZhbHVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRyYWNrZWROb2RlcyA9IGNvbnRleHQucHJvbWlzZUFycmF5cy5nZXQoYXJyYXlOYW1lKTtcbiAgICAgICAgICAgICAgICAvLyBBcHBseSBwYXJhbGxlbEdyb3VwSWQgdG8gYWxsIG5vZGVzIHRoYXQgd2VyZSBwdXNoZWQgdG8gdGhpcyBhcnJheVxuICAgICAgICAgICAgICAgIGlmICh0cmFja2VkTm9kZXMgJiYgdHJhY2tlZE5vZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdHJhY2tlZE5vZGUgb2YgdHJhY2tlZE5vZGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdHJhY2tlZE5vZGUubWV0YWRhdGEpIHRyYWNrZWROb2RlLm1ldGFkYXRhID0ge307XG4gICAgICAgICAgICAgICAgICAgIHRyYWNrZWROb2RlLm1ldGFkYXRhLnBhcmFsbGVsR3JvdXBJZCA9IHBhcmFsbGVsSWQ7XG4gICAgICAgICAgICAgICAgICAgIHRyYWNrZWROb2RlLm1ldGFkYXRhLnBhcmFsbGVsTWV0aG9kID0gbWV0aG9kO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5pbkxvb3ApIHtcbiAgICAgICAgICAgICAgICAgICAgICB0cmFja2VkTm9kZS5tZXRhZGF0YS5sb29wSWQgPSBjb250ZXh0LmluTG9vcDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBSZXR1cm4gdHJhY2tlZCBub2RlIElEcyBmb3IgcHJvcGVyIGVkZ2UgY29ubmVjdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgZW50cnlOb2RlSWRzLnB1c2godHJhY2tlZE5vZGUuaWQpO1xuICAgICAgICAgICAgICAgICAgICBleGl0Tm9kZUlkcy5wdXNoKHRyYWNrZWROb2RlLmlkKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gSGFuZGxlIG5vbi1hcnJheSBhcmd1bWVudHMgbGlrZSBhcnJheS5tYXAoc3RlcEZuKVxuICAgICAgICAgICAgICAgIGNvbnN0IGFyZ1Jlc3VsdCA9IGFuYWx5emVFeHByZXNzaW9uKFxuICAgICAgICAgICAgICAgICAgYXJnLFxuICAgICAgICAgICAgICAgICAgc3RlcERlY2xhcmF0aW9ucyxcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgICAgICAgICBmdW5jdGlvbk1hcCxcbiAgICAgICAgICAgICAgICAgIHZhcmlhYmxlTWFwLFxuICAgICAgICAgICAgICAgICAgdmlzaXRlZEZ1bmN0aW9uc1xuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG5vZGUgb2YgYXJnUmVzdWx0Lm5vZGVzKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoIW5vZGUubWV0YWRhdGEpIG5vZGUubWV0YWRhdGEgPSB7fTtcbiAgICAgICAgICAgICAgICAgIG5vZGUubWV0YWRhdGEucGFyYWxsZWxHcm91cElkID0gcGFyYWxsZWxJZDtcbiAgICAgICAgICAgICAgICAgIG5vZGUubWV0YWRhdGEucGFyYWxsZWxNZXRob2QgPSBtZXRob2Q7XG4gICAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5pbkxvb3ApIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5tZXRhZGF0YS5sb29wSWQgPSBjb250ZXh0LmluTG9vcDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBub2Rlcy5wdXNoKC4uLmFyZ1Jlc3VsdC5ub2Rlcyk7XG4gICAgICAgICAgICAgICAgZWRnZXMucHVzaCguLi5hcmdSZXN1bHQuZWRnZXMpO1xuICAgICAgICAgICAgICAgIGVudHJ5Tm9kZUlkcy5wdXNoKC4uLmFyZ1Jlc3VsdC5lbnRyeU5vZGVJZHMpO1xuICAgICAgICAgICAgICAgIGV4aXROb2RlSWRzLnB1c2goLi4uYXJnUmVzdWx0LmV4aXROb2RlSWRzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4geyBub2RlcywgZWRnZXMsIGVudHJ5Tm9kZUlkcywgZXhpdE5vZGVJZHMgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gUmVndWxhciBjYWxsIC0gY2hlY2sgaWYgaXQncyBhIHN0ZXAsIHdvcmtmbG93IHByaW1pdGl2ZSwgb3IgaGVscGVyIGZ1bmN0aW9uXG4gICAgICBpZiAoY2FsbEV4cHIuY2FsbGVlLnR5cGUgPT09ICdJZGVudGlmaWVyJykge1xuICAgICAgICBjb25zdCBmdW5jTmFtZSA9IChjYWxsRXhwci5jYWxsZWUgYXMgSWRlbnRpZmllcikudmFsdWU7XG4gICAgICAgIGNvbnN0IHN0ZXBJbmZvID0gc3RlcERlY2xhcmF0aW9ucy5nZXQoZnVuY05hbWUpO1xuXG4gICAgICAgIGlmIChzdGVwSW5mbykge1xuICAgICAgICAgIGNvbnN0IG5vZGVJZCA9IGBub2RlXyR7Y29udGV4dC5ub2RlQ291bnRlcisrfWA7XG4gICAgICAgICAgY29uc3QgbWV0YWRhdGE6IE5vZGVNZXRhZGF0YSA9IHt9O1xuXG4gICAgICAgICAgaWYgKGNvbnRleHQuaW5Mb29wKSB7XG4gICAgICAgICAgICBtZXRhZGF0YS5sb29wSWQgPSBjb250ZXh0LmluTG9vcDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNvbnRleHQuaW5Db25kaXRpb25hbCkge1xuICAgICAgICAgICAgbWV0YWRhdGEuY29uZGl0aW9uYWxJZCA9IGNvbnRleHQuaW5Db25kaXRpb25hbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBub2RlOiBNYW5pZmVzdE5vZGUgPSB7XG4gICAgICAgICAgICBpZDogbm9kZUlkLFxuICAgICAgICAgICAgdHlwZTogJ3N0ZXAnLFxuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICBsYWJlbDogZ2V0T3JpZ2luYWxTdGVwTmFtZShzdGVwSW5mby5zdGVwSWQsIGZ1bmNOYW1lKSxcbiAgICAgICAgICAgICAgbm9kZUtpbmQ6ICdzdGVwJyxcbiAgICAgICAgICAgICAgc3RlcElkOiBzdGVwSW5mby5zdGVwSWQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbWV0YWRhdGE6IE9iamVjdC5rZXlzKG1ldGFkYXRhKS5sZW5ndGggPiAwID8gbWV0YWRhdGEgOiB1bmRlZmluZWQsXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIG5vZGVzLnB1c2gobm9kZSk7XG4gICAgICAgICAgZW50cnlOb2RlSWRzLnB1c2gobm9kZUlkKTtcbiAgICAgICAgICBleGl0Tm9kZUlkcy5wdXNoKG5vZGVJZCk7XG4gICAgICAgIH0gZWxzZSBpZiAoV09SS0ZMT1dfUFJJTUlUSVZFUy5oYXMoZnVuY05hbWUpKSB7XG4gICAgICAgICAgLy8gSGFuZGxlIHdvcmtmbG93IHByaW1pdGl2ZXMgbGlrZSBzbGVlcFxuICAgICAgICAgIGNvbnN0IG5vZGVJZCA9IGBub2RlXyR7Y29udGV4dC5ub2RlQ291bnRlcisrfWA7XG4gICAgICAgICAgY29uc3QgbWV0YWRhdGE6IE5vZGVNZXRhZGF0YSA9IHt9O1xuXG4gICAgICAgICAgaWYgKGNvbnRleHQuaW5Mb29wKSB7XG4gICAgICAgICAgICBtZXRhZGF0YS5sb29wSWQgPSBjb250ZXh0LmluTG9vcDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNvbnRleHQuaW5Db25kaXRpb25hbCkge1xuICAgICAgICAgICAgbWV0YWRhdGEuY29uZGl0aW9uYWxJZCA9IGNvbnRleHQuaW5Db25kaXRpb25hbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBub2RlOiBNYW5pZmVzdE5vZGUgPSB7XG4gICAgICAgICAgICBpZDogbm9kZUlkLFxuICAgICAgICAgICAgdHlwZTogJ3ByaW1pdGl2ZScsXG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgIGxhYmVsOiBmdW5jTmFtZSxcbiAgICAgICAgICAgICAgbm9kZUtpbmQ6ICdwcmltaXRpdmUnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1ldGFkYXRhOiBPYmplY3Qua2V5cyhtZXRhZGF0YSkubGVuZ3RoID4gMCA/IG1ldGFkYXRhIDogdW5kZWZpbmVkLFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBub2Rlcy5wdXNoKG5vZGUpO1xuICAgICAgICAgIGVudHJ5Tm9kZUlkcy5wdXNoKG5vZGVJZCk7XG4gICAgICAgICAgZXhpdE5vZGVJZHMucHVzaChub2RlSWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHRyYW5zaXRpdmVSZXN1bHQgPSBhbmFseXplVHJhbnNpdGl2ZUNhbGwoXG4gICAgICAgICAgICBmdW5jTmFtZSxcbiAgICAgICAgICAgIHN0ZXBEZWNsYXJhdGlvbnMsXG4gICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgICAgZnVuY3Rpb25NYXAsXG4gICAgICAgICAgICB2YXJpYWJsZU1hcCxcbiAgICAgICAgICAgIHZpc2l0ZWRGdW5jdGlvbnNcbiAgICAgICAgICApO1xuICAgICAgICAgIG5vZGVzLnB1c2goLi4udHJhbnNpdGl2ZVJlc3VsdC5ub2Rlcyk7XG4gICAgICAgICAgZWRnZXMucHVzaCguLi50cmFuc2l0aXZlUmVzdWx0LmVkZ2VzKTtcbiAgICAgICAgICBlbnRyeU5vZGVJZHMucHVzaCguLi50cmFuc2l0aXZlUmVzdWx0LmVudHJ5Tm9kZUlkcyk7XG4gICAgICAgICAgZXhpdE5vZGVJZHMucHVzaCguLi50cmFuc2l0aXZlUmVzdWx0LmV4aXROb2RlSWRzKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBBbHNvIGFuYWx5emUgdGhlIGFyZ3VtZW50cyBvZiBhd2FpdGVkIGNhbGxzIGZvciBzdGVwIHJlZmVyZW5jZXMgaW4gb2JqZWN0c1xuICAgICAgZm9yIChjb25zdCBhcmcgb2YgY2FsbEV4cHIuYXJndW1lbnRzKSB7XG4gICAgICAgIGlmIChhcmcuZXhwcmVzc2lvbj8udHlwZSA9PT0gJ09iamVjdEV4cHJlc3Npb24nKSB7XG4gICAgICAgICAgY29uc3QgcmVmUmVzdWx0ID0gYW5hbHl6ZU9iamVjdEZvclN0ZXBSZWZlcmVuY2VzKFxuICAgICAgICAgICAgYXJnLmV4cHJlc3Npb24sXG4gICAgICAgICAgICBzdGVwRGVjbGFyYXRpb25zLFxuICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICAgICcnXG4gICAgICAgICAgKTtcbiAgICAgICAgICBub2Rlcy5wdXNoKC4uLnJlZlJlc3VsdC5ub2Rlcyk7XG4gICAgICAgICAgZWRnZXMucHVzaCguLi5yZWZSZXN1bHQuZWRnZXMpO1xuICAgICAgICAgIGVudHJ5Tm9kZUlkcy5wdXNoKC4uLnJlZlJlc3VsdC5lbnRyeU5vZGVJZHMpO1xuICAgICAgICAgIGV4aXROb2RlSWRzLnB1c2goLi4ucmVmUmVzdWx0LmV4aXROb2RlSWRzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEhhbmRsZSBhd2FpdCBvbiBhIHdlYmhvb2svaG9vayB2YXJpYWJsZTogYXdhaXQgd2ViaG9va1xuICAgIGlmIChhd2FpdGVkRXhwci50eXBlID09PSAnSWRlbnRpZmllcicpIHtcbiAgICAgIGNvbnN0IHZhck5hbWUgPSAoYXdhaXRlZEV4cHIgYXMgSWRlbnRpZmllcikudmFsdWU7XG4gICAgICBpZiAoY29udGV4dC53ZWJob29rVmFyaWFibGVzLmhhcyh2YXJOYW1lKSkge1xuICAgICAgICBjb25zdCBub2RlSWQgPSBgbm9kZV8ke2NvbnRleHQubm9kZUNvdW50ZXIrK31gO1xuICAgICAgICBjb25zdCBtZXRhZGF0YTogTm9kZU1ldGFkYXRhID0ge307XG5cbiAgICAgICAgaWYgKGNvbnRleHQuaW5Mb29wKSB7XG4gICAgICAgICAgbWV0YWRhdGEubG9vcElkID0gY29udGV4dC5pbkxvb3A7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbnRleHQuaW5Db25kaXRpb25hbCkge1xuICAgICAgICAgIG1ldGFkYXRhLmNvbmRpdGlvbmFsSWQgPSBjb250ZXh0LmluQ29uZGl0aW9uYWw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBub2RlOiBNYW5pZmVzdE5vZGUgPSB7XG4gICAgICAgICAgaWQ6IG5vZGVJZCxcbiAgICAgICAgICB0eXBlOiAncHJpbWl0aXZlJyxcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBsYWJlbDogJ2F3YWl0V2ViaG9vaycsXG4gICAgICAgICAgICBub2RlS2luZDogJ3ByaW1pdGl2ZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBtZXRhZGF0YTogT2JqZWN0LmtleXMobWV0YWRhdGEpLmxlbmd0aCA+IDAgPyBtZXRhZGF0YSA6IHVuZGVmaW5lZCxcbiAgICAgICAgfTtcblxuICAgICAgICBub2Rlcy5wdXNoKG5vZGUpO1xuICAgICAgICBlbnRyeU5vZGVJZHMucHVzaChub2RlSWQpO1xuICAgICAgICBleGl0Tm9kZUlkcy5wdXNoKG5vZGVJZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gTm9uLWF3YWl0ZWQgY2FsbCBleHByZXNzaW9uXG4gIGlmIChleHByLnR5cGUgPT09ICdDYWxsRXhwcmVzc2lvbicpIHtcbiAgICBjb25zdCBjYWxsRXhwciA9IGV4cHIgYXMgQ2FsbEV4cHJlc3Npb247XG4gICAgaWYgKGNhbGxFeHByLmNhbGxlZS50eXBlID09PSAnSWRlbnRpZmllcicpIHtcbiAgICAgIGNvbnN0IGZ1bmNOYW1lID0gKGNhbGxFeHByLmNhbGxlZSBhcyBJZGVudGlmaWVyKS52YWx1ZTtcbiAgICAgIGNvbnN0IHN0ZXBJbmZvID0gc3RlcERlY2xhcmF0aW9ucy5nZXQoZnVuY05hbWUpO1xuXG4gICAgICBpZiAoc3RlcEluZm8pIHtcbiAgICAgICAgY29uc3Qgbm9kZUlkID0gYG5vZGVfJHtjb250ZXh0Lm5vZGVDb3VudGVyKyt9YDtcbiAgICAgICAgY29uc3QgbWV0YWRhdGE6IE5vZGVNZXRhZGF0YSA9IHt9O1xuXG4gICAgICAgIGlmIChjb250ZXh0LmluTG9vcCkge1xuICAgICAgICAgIG1ldGFkYXRhLmxvb3BJZCA9IGNvbnRleHQuaW5Mb29wO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb250ZXh0LmluQ29uZGl0aW9uYWwpIHtcbiAgICAgICAgICBtZXRhZGF0YS5jb25kaXRpb25hbElkID0gY29udGV4dC5pbkNvbmRpdGlvbmFsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgbm9kZTogTWFuaWZlc3ROb2RlID0ge1xuICAgICAgICAgIGlkOiBub2RlSWQsXG4gICAgICAgICAgdHlwZTogJ3N0ZXAnLFxuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGxhYmVsOiBnZXRPcmlnaW5hbFN0ZXBOYW1lKHN0ZXBJbmZvLnN0ZXBJZCwgZnVuY05hbWUpLFxuICAgICAgICAgICAgbm9kZUtpbmQ6ICdzdGVwJyxcbiAgICAgICAgICAgIHN0ZXBJZDogc3RlcEluZm8uc3RlcElkLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWV0YWRhdGE6IE9iamVjdC5rZXlzKG1ldGFkYXRhKS5sZW5ndGggPiAwID8gbWV0YWRhdGEgOiB1bmRlZmluZWQsXG4gICAgICAgIH07XG5cbiAgICAgICAgbm9kZXMucHVzaChub2RlKTtcbiAgICAgICAgZW50cnlOb2RlSWRzLnB1c2gobm9kZUlkKTtcbiAgICAgICAgZXhpdE5vZGVJZHMucHVzaChub2RlSWQpO1xuICAgICAgfSBlbHNlIGlmIChXT1JLRkxPV19QUklNSVRJVkVTLmhhcyhmdW5jTmFtZSkpIHtcbiAgICAgICAgLy8gSGFuZGxlIG5vbi1hd2FpdGVkIHdvcmtmbG93IHByaW1pdGl2ZXMgbGlrZSBjcmVhdGVIb29rLCBjcmVhdGVXZWJob29rXG4gICAgICAgIGNvbnN0IG5vZGVJZCA9IGBub2RlXyR7Y29udGV4dC5ub2RlQ291bnRlcisrfWA7XG4gICAgICAgIGNvbnN0IG1ldGFkYXRhOiBOb2RlTWV0YWRhdGEgPSB7fTtcblxuICAgICAgICBpZiAoY29udGV4dC5pbkxvb3ApIHtcbiAgICAgICAgICBtZXRhZGF0YS5sb29wSWQgPSBjb250ZXh0LmluTG9vcDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29udGV4dC5pbkNvbmRpdGlvbmFsKSB7XG4gICAgICAgICAgbWV0YWRhdGEuY29uZGl0aW9uYWxJZCA9IGNvbnRleHQuaW5Db25kaXRpb25hbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5vZGU6IE1hbmlmZXN0Tm9kZSA9IHtcbiAgICAgICAgICBpZDogbm9kZUlkLFxuICAgICAgICAgIHR5cGU6ICdwcmltaXRpdmUnLFxuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGxhYmVsOiBmdW5jTmFtZSxcbiAgICAgICAgICAgIG5vZGVLaW5kOiAncHJpbWl0aXZlJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1ldGFkYXRhOiBPYmplY3Qua2V5cyhtZXRhZGF0YSkubGVuZ3RoID4gMCA/IG1ldGFkYXRhIDogdW5kZWZpbmVkLFxuICAgICAgICB9O1xuXG4gICAgICAgIG5vZGVzLnB1c2gobm9kZSk7XG4gICAgICAgIGVudHJ5Tm9kZUlkcy5wdXNoKG5vZGVJZCk7XG4gICAgICAgIGV4aXROb2RlSWRzLnB1c2gobm9kZUlkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHRyYW5zaXRpdmVSZXN1bHQgPSBhbmFseXplVHJhbnNpdGl2ZUNhbGwoXG4gICAgICAgICAgZnVuY05hbWUsXG4gICAgICAgICAgc3RlcERlY2xhcmF0aW9ucyxcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIGZ1bmN0aW9uTWFwLFxuICAgICAgICAgIHZhcmlhYmxlTWFwLFxuICAgICAgICAgIHZpc2l0ZWRGdW5jdGlvbnNcbiAgICAgICAgKTtcbiAgICAgICAgbm9kZXMucHVzaCguLi50cmFuc2l0aXZlUmVzdWx0Lm5vZGVzKTtcbiAgICAgICAgZWRnZXMucHVzaCguLi50cmFuc2l0aXZlUmVzdWx0LmVkZ2VzKTtcbiAgICAgICAgZW50cnlOb2RlSWRzLnB1c2goLi4udHJhbnNpdGl2ZVJlc3VsdC5lbnRyeU5vZGVJZHMpO1xuICAgICAgICBleGl0Tm9kZUlkcy5wdXNoKC4uLnRyYW5zaXRpdmVSZXN1bHQuZXhpdE5vZGVJZHMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIENoZWNrIGZvciBzdGVwIHJlZmVyZW5jZXMgaW4gb2JqZWN0IGxpdGVyYWxzXG4gIGlmIChleHByLnR5cGUgPT09ICdPYmplY3RFeHByZXNzaW9uJykge1xuICAgIGNvbnN0IHJlZlJlc3VsdCA9IGFuYWx5emVPYmplY3RGb3JTdGVwUmVmZXJlbmNlcyhcbiAgICAgIGV4cHIsXG4gICAgICBzdGVwRGVjbGFyYXRpb25zLFxuICAgICAgY29udGV4dCxcbiAgICAgICcnXG4gICAgKTtcbiAgICBub2Rlcy5wdXNoKC4uLnJlZlJlc3VsdC5ub2Rlcyk7XG4gICAgZWRnZXMucHVzaCguLi5yZWZSZXN1bHQuZWRnZXMpO1xuICAgIGVudHJ5Tm9kZUlkcy5wdXNoKC4uLnJlZlJlc3VsdC5lbnRyeU5vZGVJZHMpO1xuICAgIGV4aXROb2RlSWRzLnB1c2goLi4ucmVmUmVzdWx0LmV4aXROb2RlSWRzKTtcbiAgfVxuXG4gIC8vIENoZWNrIGZvciBzdGVwIHJlZmVyZW5jZXMgYW5kIHN0ZXAgY2FsbHMgaW4gZnVuY3Rpb24gY2FsbCBhcmd1bWVudHNcbiAgLy8gU2tpcCBmb3IgYXJyYXkgbWV0aG9kcyAobWFwLCBmb3JFYWNoLCBldGMuKSB3aGljaCBoYXZlIGEgc3BlY2lhbGl6ZWQgaGFuZGxlciBiZWxvd1xuICBpZiAoZXhwci50eXBlID09PSAnQ2FsbEV4cHJlc3Npb24nKSB7XG4gICAgY29uc3QgY2FsbEV4cHIgPSBleHByIGFzIENhbGxFeHByZXNzaW9uO1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhbiBhcnJheSBtZXRob2QgY2FsbCAtIGlmIHNvLCBza2lwIHRoZSBnZW5lcmljIGhhbmRsZXJcbiAgICAvLyBhbmQgbGV0IHRoZSBzcGVjaWFsaXplZCBoYW5kbGVyIGF0IHRoZSBlbmQgb2YgdGhpcyBmdW5jdGlvbiBoYW5kbGUgaXRcbiAgICBjb25zdCBpc0FycmF5TWV0aG9kQ2FsbCA9XG4gICAgICBjYWxsRXhwci5jYWxsZWUudHlwZSA9PT0gJ01lbWJlckV4cHJlc3Npb24nICYmXG4gICAgICAoY2FsbEV4cHIuY2FsbGVlIGFzIE1lbWJlckV4cHJlc3Npb24pLnByb3BlcnR5LnR5cGUgPT09ICdJZGVudGlmaWVyJyAmJlxuICAgICAgWydtYXAnLCAnZm9yRWFjaCcsICdmaWx0ZXInLCAnZmluZCcsICdzb21lJywgJ2V2ZXJ5JywgJ2ZsYXRNYXAnXS5pbmNsdWRlcyhcbiAgICAgICAgKChjYWxsRXhwci5jYWxsZWUgYXMgTWVtYmVyRXhwcmVzc2lvbikucHJvcGVydHkgYXMgSWRlbnRpZmllcikudmFsdWVcbiAgICAgICk7XG5cbiAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGEgLnB1c2goKSBjYWxsIG9uIGEgdHJhY2tlZCBwcm9taXNlIGFycmF5XG4gICAgLy8gUGF0dGVybjogcHJvbWlzZXMucHVzaChzdGVwQ2FsbCgpKVxuICAgIGxldCBwdXNoQXJyYXlOYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICBpZiAoXG4gICAgICBjYWxsRXhwci5jYWxsZWUudHlwZSA9PT0gJ01lbWJlckV4cHJlc3Npb24nICYmXG4gICAgICAoY2FsbEV4cHIuY2FsbGVlIGFzIE1lbWJlckV4cHJlc3Npb24pLm9iamVjdC50eXBlID09PSAnSWRlbnRpZmllcicgJiZcbiAgICAgIChjYWxsRXhwci5jYWxsZWUgYXMgTWVtYmVyRXhwcmVzc2lvbikucHJvcGVydHkudHlwZSA9PT0gJ0lkZW50aWZpZXInICYmXG4gICAgICAoKGNhbGxFeHByLmNhbGxlZSBhcyBNZW1iZXJFeHByZXNzaW9uKS5wcm9wZXJ0eSBhcyBJZGVudGlmaWVyKS52YWx1ZSA9PT1cbiAgICAgICAgJ3B1c2gnXG4gICAgKSB7XG4gICAgICBjb25zdCBvYmpOYW1lID0gKFxuICAgICAgICAoY2FsbEV4cHIuY2FsbGVlIGFzIE1lbWJlckV4cHJlc3Npb24pLm9iamVjdCBhcyBJZGVudGlmaWVyXG4gICAgICApLnZhbHVlO1xuICAgICAgaWYgKGNvbnRleHQucHJvbWlzZUFycmF5cy5oYXMob2JqTmFtZSkpIHtcbiAgICAgICAgcHVzaEFycmF5TmFtZSA9IG9iak5hbWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBhcmcgb2YgY2FsbEV4cHIuYXJndW1lbnRzKSB7XG4gICAgICBpZiAoYXJnLmV4cHJlc3Npb24pIHtcbiAgICAgICAgLy8gRm9yIGFycmF5IG1ldGhvZCBjYWxscywgc2tpcCBzdGVwIGlkZW50aWZpZXIgZGV0ZWN0aW9uIGhlcmVcbiAgICAgICAgLy8gc2luY2Ugd2UgaGF2ZSBhIHNwZWNpYWxpemVkIGhhbmRsZXIgZm9yIHRob3NlXG4gICAgICAgIGlmIChhcmcuZXhwcmVzc2lvbi50eXBlID09PSAnSWRlbnRpZmllcicgJiYgIWlzQXJyYXlNZXRob2RDYWxsKSB7XG4gICAgICAgICAgY29uc3QgYXJnTmFtZSA9IChhcmcuZXhwcmVzc2lvbiBhcyBJZGVudGlmaWVyKS52YWx1ZTtcbiAgICAgICAgICBjb25zdCBzdGVwSW5mbyA9IHN0ZXBEZWNsYXJhdGlvbnMuZ2V0KGFyZ05hbWUpO1xuICAgICAgICAgIGlmIChzdGVwSW5mbykge1xuICAgICAgICAgICAgY29uc3Qgbm9kZUlkID0gYG5vZGVfJHtjb250ZXh0Lm5vZGVDb3VudGVyKyt9YDtcbiAgICAgICAgICAgIGNvbnN0IG5vZGU6IE1hbmlmZXN0Tm9kZSA9IHtcbiAgICAgICAgICAgICAgaWQ6IG5vZGVJZCxcbiAgICAgICAgICAgICAgdHlwZTogJ3N0ZXAnLFxuICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgbGFiZWw6IGAke2dldE9yaWdpbmFsU3RlcE5hbWUoc3RlcEluZm8uc3RlcElkLCBhcmdOYW1lKX0gKHJlZilgLFxuICAgICAgICAgICAgICAgIG5vZGVLaW5kOiAnc3RlcCcsXG4gICAgICAgICAgICAgICAgc3RlcElkOiBzdGVwSW5mby5zdGVwSWQsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICAgICAgaXNTdGVwUmVmZXJlbmNlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHJlZmVyZW5jZUNvbnRleHQ6ICdmdW5jdGlvbiBhcmd1bWVudCcsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgbm9kZXMucHVzaChub2RlKTtcbiAgICAgICAgICAgIGVudHJ5Tm9kZUlkcy5wdXNoKG5vZGVJZCk7XG4gICAgICAgICAgICBleGl0Tm9kZUlkcy5wdXNoKG5vZGVJZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIEhhbmRsZSBzdGVwIGNhbGxzIHBhc3NlZCBhcyBhcmd1bWVudHMgKGUuZy4sIHByb21pc2VzLnB1c2goc3RlcENhbGwoKSkpXG4gICAgICAgIC8vIE5vdGU6IERvbid0IGFkZCBsb29wSWQgaGVyZSAtIHRoZXNlIGFyZSBub24tYXdhaXRlZCBjYWxscyBiZWluZyBjb2xsZWN0ZWRcbiAgICAgICAgLy8gZm9yIHBhcmFsbGVsIGV4ZWN1dGlvbiAobGlrZSBQcm9taXNlLmFsbCksIG5vdCB0cnVseSBsb29waW5nIGNhbGxzXG4gICAgICAgIGlmIChhcmcuZXhwcmVzc2lvbi50eXBlID09PSAnQ2FsbEV4cHJlc3Npb24nKSB7XG4gICAgICAgICAgY29uc3QgYXJnQ2FsbEV4cHIgPSBhcmcuZXhwcmVzc2lvbiBhcyBDYWxsRXhwcmVzc2lvbjtcbiAgICAgICAgICBpZiAoYXJnQ2FsbEV4cHIuY2FsbGVlLnR5cGUgPT09ICdJZGVudGlmaWVyJykge1xuICAgICAgICAgICAgY29uc3QgZnVuY05hbWUgPSAoYXJnQ2FsbEV4cHIuY2FsbGVlIGFzIElkZW50aWZpZXIpLnZhbHVlO1xuICAgICAgICAgICAgY29uc3Qgc3RlcEluZm8gPSBzdGVwRGVjbGFyYXRpb25zLmdldChmdW5jTmFtZSk7XG4gICAgICAgICAgICBpZiAoc3RlcEluZm8pIHtcbiAgICAgICAgICAgICAgY29uc3Qgbm9kZUlkID0gYG5vZGVfJHtjb250ZXh0Lm5vZGVDb3VudGVyKyt9YDtcbiAgICAgICAgICAgICAgY29uc3QgbWV0YWRhdGE6IE5vZGVNZXRhZGF0YSA9IHt9O1xuICAgICAgICAgICAgICAvLyBEb24ndCBhZGQgbG9vcElkIC0gdGhpcyBpcyBhIG5vbi1hd2FpdGVkIGNhbGwsIGxpa2VseSBiZWluZ1xuICAgICAgICAgICAgICAvLyBjb2xsZWN0ZWQgZm9yIHBhcmFsbGVsIGV4ZWN1dGlvbiAoUHJvbWlzZS5hbGwgcGF0dGVybilcbiAgICAgICAgICAgICAgaWYgKGNvbnRleHQuaW5Db25kaXRpb25hbCkge1xuICAgICAgICAgICAgICAgIG1ldGFkYXRhLmNvbmRpdGlvbmFsSWQgPSBjb250ZXh0LmluQ29uZGl0aW9uYWw7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3Qgbm9kZTogTWFuaWZlc3ROb2RlID0ge1xuICAgICAgICAgICAgICAgIGlkOiBub2RlSWQsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3N0ZXAnLFxuICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgIGxhYmVsOiBnZXRPcmlnaW5hbFN0ZXBOYW1lKHN0ZXBJbmZvLnN0ZXBJZCwgZnVuY05hbWUpLFxuICAgICAgICAgICAgICAgICAgbm9kZUtpbmQ6ICdzdGVwJyxcbiAgICAgICAgICAgICAgICAgIHN0ZXBJZDogc3RlcEluZm8uc3RlcElkLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbWV0YWRhdGE6XG4gICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhtZXRhZGF0YSkubGVuZ3RoID4gMCA/IG1ldGFkYXRhIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGJlaW5nIHB1c2hlZCB0byBhIHRyYWNrZWQgcHJvbWlzZSBhcnJheSwgc3RvcmUgdGhlIG5vZGVcbiAgICAgICAgICAgICAgLy8gc28gd2UgY2FuIGFwcGx5IHBhcmFsbGVsR3JvdXBJZCB3aGVuIFByb21pc2UuYWxsIGlzIHJlYWNoZWRcbiAgICAgICAgICAgICAgaWYgKHB1c2hBcnJheU5hbWUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0cmFja2VkTm9kZXMgPSBjb250ZXh0LnByb21pc2VBcnJheXMuZ2V0KHB1c2hBcnJheU5hbWUpO1xuICAgICAgICAgICAgICAgIGlmICh0cmFja2VkTm9kZXMpIHtcbiAgICAgICAgICAgICAgICAgIHRyYWNrZWROb2Rlcy5wdXNoKG5vZGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBub2Rlcy5wdXNoKG5vZGUpO1xuICAgICAgICAgICAgICBlbnRyeU5vZGVJZHMucHVzaChub2RlSWQpO1xuICAgICAgICAgICAgICBleGl0Tm9kZUlkcy5wdXNoKG5vZGVJZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChhcmcuZXhwcmVzc2lvbi50eXBlID09PSAnT2JqZWN0RXhwcmVzc2lvbicpIHtcbiAgICAgICAgICBjb25zdCByZWZSZXN1bHQgPSBhbmFseXplT2JqZWN0Rm9yU3RlcFJlZmVyZW5jZXMoXG4gICAgICAgICAgICBhcmcuZXhwcmVzc2lvbixcbiAgICAgICAgICAgIHN0ZXBEZWNsYXJhdGlvbnMsXG4gICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgICAgJydcbiAgICAgICAgICApO1xuICAgICAgICAgIG5vZGVzLnB1c2goLi4ucmVmUmVzdWx0Lm5vZGVzKTtcbiAgICAgICAgICBlZGdlcy5wdXNoKC4uLnJlZlJlc3VsdC5lZGdlcyk7XG4gICAgICAgICAgZW50cnlOb2RlSWRzLnB1c2goLi4ucmVmUmVzdWx0LmVudHJ5Tm9kZUlkcyk7XG4gICAgICAgICAgZXhpdE5vZGVJZHMucHVzaCguLi5yZWZSZXN1bHQuZXhpdE5vZGVJZHMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQ2hlY2sgZm9yIHN0ZXAgcmVmZXJlbmNlcyBpbiAnbmV3JyBleHByZXNzaW9uc1xuICBpZiAoZXhwci50eXBlID09PSAnTmV3RXhwcmVzc2lvbicpIHtcbiAgICBjb25zdCBuZXdFeHByID0gZXhwciBhcyBhbnk7XG5cbiAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGEgRHVyYWJsZUFnZW50IGluc3RhbnRpYXRpb25cbiAgICBjb25zdCBpc0R1cmFibGVBZ2VudCA9XG4gICAgICBuZXdFeHByLmNhbGxlZT8udHlwZSA9PT0gJ0lkZW50aWZpZXInICYmXG4gICAgICBuZXdFeHByLmNhbGxlZT8udmFsdWUgPT09ICdEdXJhYmxlQWdlbnQnO1xuXG4gICAgaWYgKGlzRHVyYWJsZUFnZW50ICYmIG5ld0V4cHIuYXJndW1lbnRzPy5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBDcmVhdGUgYSBub2RlIGZvciB0aGUgRHVyYWJsZUFnZW50IGl0c2VsZlxuICAgICAgY29uc3QgYWdlbnROb2RlSWQgPSBgbm9kZV8ke2NvbnRleHQubm9kZUNvdW50ZXIrK31gO1xuICAgICAgY29uc3QgYWdlbnROb2RlOiBNYW5pZmVzdE5vZGUgPSB7XG4gICAgICAgIGlkOiBhZ2VudE5vZGVJZCxcbiAgICAgICAgdHlwZTogJ2FnZW50JyxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGxhYmVsOiAnRHVyYWJsZUFnZW50JyxcbiAgICAgICAgICBub2RlS2luZDogJ2FnZW50JyxcbiAgICAgICAgfSxcbiAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICBpc1N0ZXBSZWZlcmVuY2U6IHRydWUsXG4gICAgICAgICAgcmVmZXJlbmNlQ29udGV4dDogJ0R1cmFibGVBZ2VudCcsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgbm9kZXMucHVzaChhZ2VudE5vZGUpO1xuICAgICAgZW50cnlOb2RlSWRzLnB1c2goYWdlbnROb2RlSWQpO1xuXG4gICAgICAvLyBMb29rIGZvciB0b29scyBpbiB0aGUgY29uc3RydWN0b3Igb3B0aW9uc1xuICAgICAgY29uc3Qgb3B0aW9uc0FyZyA9IG5ld0V4cHIuYXJndW1lbnRzWzBdPy5leHByZXNzaW9uO1xuICAgICAgaWYgKG9wdGlvbnNBcmc/LnR5cGUgPT09ICdPYmplY3RFeHByZXNzaW9uJykge1xuICAgICAgICBjb25zdCB0b29sc1Jlc3VsdCA9IGFuYWx5emVEdXJhYmxlQWdlbnRUb29scyhcbiAgICAgICAgICBvcHRpb25zQXJnLFxuICAgICAgICAgIHN0ZXBEZWNsYXJhdGlvbnMsXG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBhZ2VudE5vZGVJZCxcbiAgICAgICAgICB2YXJpYWJsZU1hcFxuICAgICAgICApO1xuICAgICAgICBub2Rlcy5wdXNoKC4uLnRvb2xzUmVzdWx0Lm5vZGVzKTtcbiAgICAgICAgZWRnZXMucHVzaCguLi50b29sc1Jlc3VsdC5lZGdlcyk7XG5cbiAgICAgICAgLy8gSWYgd2UgZm91bmQgdG9vbHMsIHRoZXkgYXJlIHRoZSBleGl0IG5vZGVzXG4gICAgICAgIGlmICh0b29sc1Jlc3VsdC5leGl0Tm9kZUlkcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgZXhpdE5vZGVJZHMucHVzaCguLi50b29sc1Jlc3VsdC5leGl0Tm9kZUlkcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZXhpdE5vZGVJZHMucHVzaChhZ2VudE5vZGVJZCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV4aXROb2RlSWRzLnB1c2goYWdlbnROb2RlSWQpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobmV3RXhwci5hcmd1bWVudHMpIHtcbiAgICAgIGZvciAoY29uc3QgYXJnIG9mIG5ld0V4cHIuYXJndW1lbnRzKSB7XG4gICAgICAgIGlmIChhcmcuZXhwcmVzc2lvbj8udHlwZSA9PT0gJ09iamVjdEV4cHJlc3Npb24nKSB7XG4gICAgICAgICAgY29uc3QgcmVmUmVzdWx0ID0gYW5hbHl6ZU9iamVjdEZvclN0ZXBSZWZlcmVuY2VzKFxuICAgICAgICAgICAgYXJnLmV4cHJlc3Npb24sXG4gICAgICAgICAgICBzdGVwRGVjbGFyYXRpb25zLFxuICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICAgICcnXG4gICAgICAgICAgKTtcbiAgICAgICAgICBub2Rlcy5wdXNoKC4uLnJlZlJlc3VsdC5ub2Rlcyk7XG4gICAgICAgICAgZWRnZXMucHVzaCguLi5yZWZSZXN1bHQuZWRnZXMpO1xuICAgICAgICAgIGVudHJ5Tm9kZUlkcy5wdXNoKC4uLnJlZlJlc3VsdC5lbnRyeU5vZGVJZHMpO1xuICAgICAgICAgIGV4aXROb2RlSWRzLnB1c2goLi4ucmVmUmVzdWx0LmV4aXROb2RlSWRzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEhhbmRsZSBBc3NpZ25tZW50RXhwcmVzc2lvbiAtIGFuYWx5emUgdGhlIHJpZ2h0LWhhbmQgc2lkZVxuICBpZiAoZXhwci50eXBlID09PSAnQXNzaWdubWVudEV4cHJlc3Npb24nKSB7XG4gICAgY29uc3QgYXNzaWduRXhwciA9IGV4cHIgYXMgYW55O1xuICAgIGlmIChhc3NpZ25FeHByLnJpZ2h0KSB7XG4gICAgICBjb25zdCByaWdodFJlc3VsdCA9IGFuYWx5emVFeHByZXNzaW9uKFxuICAgICAgICBhc3NpZ25FeHByLnJpZ2h0LFxuICAgICAgICBzdGVwRGVjbGFyYXRpb25zLFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICBmdW5jdGlvbk1hcCxcbiAgICAgICAgdmFyaWFibGVNYXAsXG4gICAgICAgIHZpc2l0ZWRGdW5jdGlvbnNcbiAgICAgICk7XG4gICAgICBub2Rlcy5wdXNoKC4uLnJpZ2h0UmVzdWx0Lm5vZGVzKTtcbiAgICAgIGVkZ2VzLnB1c2goLi4ucmlnaHRSZXN1bHQuZWRnZXMpO1xuICAgICAgZW50cnlOb2RlSWRzLnB1c2goLi4ucmlnaHRSZXN1bHQuZW50cnlOb2RlSWRzKTtcbiAgICAgIGV4aXROb2RlSWRzLnB1c2goLi4ucmlnaHRSZXN1bHQuZXhpdE5vZGVJZHMpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEhhbmRsZSBNZW1iZXJFeHByZXNzaW9uIGNhbGxzIGxpa2UgYXJyYXkubWFwKHN0ZXBGbikgd2hlcmUgc3RlcCBpcyBwYXNzZWQgYXMgY2FsbGJhY2tcbiAgaWYgKGV4cHIudHlwZSA9PT0gJ0NhbGxFeHByZXNzaW9uJykge1xuICAgIGNvbnN0IGNhbGxFeHByID0gZXhwciBhcyBDYWxsRXhwcmVzc2lvbjtcbiAgICBpZiAoY2FsbEV4cHIuY2FsbGVlLnR5cGUgPT09ICdNZW1iZXJFeHByZXNzaW9uJykge1xuICAgICAgY29uc3QgbWVtYmVyID0gY2FsbEV4cHIuY2FsbGVlIGFzIE1lbWJlckV4cHJlc3Npb247XG4gICAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGEgbWV0aG9kIGNhbGwgbGlrZSAubWFwKCksIC5mb3JFYWNoKCksIC5maWx0ZXIoKSBldGMuXG4gICAgICBpZiAobWVtYmVyLnByb3BlcnR5LnR5cGUgPT09ICdJZGVudGlmaWVyJykge1xuICAgICAgICBjb25zdCBtZXRob2ROYW1lID0gKG1lbWJlci5wcm9wZXJ0eSBhcyBJZGVudGlmaWVyKS52YWx1ZTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIFtcbiAgICAgICAgICAgICdtYXAnLFxuICAgICAgICAgICAgJ2ZvckVhY2gnLFxuICAgICAgICAgICAgJ2ZpbHRlcicsXG4gICAgICAgICAgICAnZmluZCcsXG4gICAgICAgICAgICAnc29tZScsXG4gICAgICAgICAgICAnZXZlcnknLFxuICAgICAgICAgICAgJ2ZsYXRNYXAnLFxuICAgICAgICAgIF0uaW5jbHVkZXMobWV0aG9kTmFtZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gQ2hlY2sgaWYgYW55IGFyZ3VtZW50IGlzIGEgc3RlcCBmdW5jdGlvbiByZWZlcmVuY2VcbiAgICAgICAgICBmb3IgKGNvbnN0IGFyZyBvZiBjYWxsRXhwci5hcmd1bWVudHMpIHtcbiAgICAgICAgICAgIGlmIChhcmcuZXhwcmVzc2lvbj8udHlwZSA9PT0gJ0lkZW50aWZpZXInKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGFyZ05hbWUgPSAoYXJnLmV4cHJlc3Npb24gYXMgSWRlbnRpZmllcikudmFsdWU7XG4gICAgICAgICAgICAgIGNvbnN0IHN0ZXBJbmZvID0gc3RlcERlY2xhcmF0aW9ucy5nZXQoYXJnTmFtZSk7XG4gICAgICAgICAgICAgIGlmIChzdGVwSW5mbykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGVJZCA9IGBub2RlXyR7Y29udGV4dC5ub2RlQ291bnRlcisrfWA7XG4gICAgICAgICAgICAgICAgY29uc3QgbWV0YWRhdGE6IE5vZGVNZXRhZGF0YSA9IHt9O1xuICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LmluTG9vcCkge1xuICAgICAgICAgICAgICAgICAgbWV0YWRhdGEubG9vcElkID0gY29udGV4dC5pbkxvb3A7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LmluQ29uZGl0aW9uYWwpIHtcbiAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLmNvbmRpdGlvbmFsSWQgPSBjb250ZXh0LmluQ29uZGl0aW9uYWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGU6IE1hbmlmZXN0Tm9kZSA9IHtcbiAgICAgICAgICAgICAgICAgIGlkOiBub2RlSWQsXG4gICAgICAgICAgICAgICAgICB0eXBlOiAnc3RlcCcsXG4gICAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBnZXRPcmlnaW5hbFN0ZXBOYW1lKHN0ZXBJbmZvLnN0ZXBJZCwgYXJnTmFtZSksXG4gICAgICAgICAgICAgICAgICAgIG5vZGVLaW5kOiAnc3RlcCcsXG4gICAgICAgICAgICAgICAgICAgIHN0ZXBJZDogc3RlcEluZm8uc3RlcElkLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIG1ldGFkYXRhOlxuICAgICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhtZXRhZGF0YSkubGVuZ3RoID4gMCA/IG1ldGFkYXRhIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgbm9kZXMucHVzaChub2RlKTtcbiAgICAgICAgICAgICAgICBlbnRyeU5vZGVJZHMucHVzaChub2RlSWQpO1xuICAgICAgICAgICAgICAgIGV4aXROb2RlSWRzLnB1c2gobm9kZUlkKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IG5vZGVzLCBlZGdlcywgZW50cnlOb2RlSWRzLCBleGl0Tm9kZUlkcyB9O1xufVxuXG4vKipcbiAqIEFuYWx5emUgRHVyYWJsZUFnZW50IHRvb2xzIHByb3BlcnR5IHRvIGV4dHJhY3QgdG9vbCBub2Rlc1xuICovXG5mdW5jdGlvbiBhbmFseXplRHVyYWJsZUFnZW50VG9vbHMoXG4gIG9wdGlvbnNPYmo6IGFueSxcbiAgc3RlcERlY2xhcmF0aW9uczogTWFwPHN0cmluZywgeyBzdGVwSWQ6IHN0cmluZyB9PixcbiAgY29udGV4dDogQW5hbHlzaXNDb250ZXh0LFxuICBhZ2VudE5vZGVJZDogc3RyaW5nLFxuICB2YXJpYWJsZU1hcDogTWFwPHN0cmluZywgYW55PlxuKTogQW5hbHlzaXNSZXN1bHQge1xuICBjb25zdCBub2RlczogTWFuaWZlc3ROb2RlW10gPSBbXTtcbiAgY29uc3QgZWRnZXM6IE1hbmlmZXN0RWRnZVtdID0gW107XG4gIGNvbnN0IGVudHJ5Tm9kZUlkczogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgZXhpdE5vZGVJZHM6IHN0cmluZ1tdID0gW107XG5cbiAgaWYgKCFvcHRpb25zT2JqLnByb3BlcnRpZXMpXG4gICAgcmV0dXJuIHsgbm9kZXMsIGVkZ2VzLCBlbnRyeU5vZGVJZHMsIGV4aXROb2RlSWRzIH07XG5cbiAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGV4dHJhY3QgdG9vbHMgZnJvbSBhbiBPYmplY3RFeHByZXNzaW9uXG4gIGZ1bmN0aW9uIGV4dHJhY3RUb29sc0Zyb21PYmplY3QodG9vbHNPYmo6IGFueSk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgdG9vbFByb3Agb2YgdG9vbHNPYmoucHJvcGVydGllcyB8fCBbXSkge1xuICAgICAgaWYgKHRvb2xQcm9wLnR5cGUgIT09ICdLZXlWYWx1ZVByb3BlcnR5JykgY29udGludWU7XG5cbiAgICAgIGxldCB0b29sTmFtZSA9ICcnO1xuICAgICAgaWYgKHRvb2xQcm9wLmtleS50eXBlID09PSAnSWRlbnRpZmllcicpIHtcbiAgICAgICAgdG9vbE5hbWUgPSB0b29sUHJvcC5rZXkudmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGlmICghdG9vbE5hbWUpIGNvbnRpbnVlO1xuXG4gICAgICAvLyBMb29rIGZvciBleGVjdXRlIHByb3BlcnR5IGluIHRoZSB0b29sIGRlZmluaXRpb25cbiAgICAgIGlmICh0b29sUHJvcC52YWx1ZS50eXBlID09PSAnT2JqZWN0RXhwcmVzc2lvbicpIHtcbiAgICAgICAgZm9yIChjb25zdCBpbm5lclByb3Agb2YgdG9vbFByb3AudmFsdWUucHJvcGVydGllcyB8fCBbXSkge1xuICAgICAgICAgIGlmIChpbm5lclByb3AudHlwZSAhPT0gJ0tleVZhbHVlUHJvcGVydHknKSBjb250aW51ZTtcblxuICAgICAgICAgIGxldCBpbm5lcktleSA9ICcnO1xuICAgICAgICAgIGlmIChpbm5lclByb3Aua2V5LnR5cGUgPT09ICdJZGVudGlmaWVyJykge1xuICAgICAgICAgICAgaW5uZXJLZXkgPSBpbm5lclByb3Aua2V5LnZhbHVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChpbm5lcktleSA9PT0gJ2V4ZWN1dGUnICYmIGlubmVyUHJvcC52YWx1ZS50eXBlID09PSAnSWRlbnRpZmllcicpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0ZXBOYW1lID0gaW5uZXJQcm9wLnZhbHVlLnZhbHVlO1xuICAgICAgICAgICAgY29uc3Qgc3RlcEluZm8gPSBzdGVwRGVjbGFyYXRpb25zLmdldChzdGVwTmFtZSk7XG5cbiAgICAgICAgICAgIGNvbnN0IG5vZGVJZCA9IGBub2RlXyR7Y29udGV4dC5ub2RlQ291bnRlcisrfWA7XG4gICAgICAgICAgICBjb25zdCBub2RlOiBNYW5pZmVzdE5vZGUgPSB7XG4gICAgICAgICAgICAgIGlkOiBub2RlSWQsXG4gICAgICAgICAgICAgIHR5cGU6ICd0b29sJyxcbiAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIGxhYmVsOiBzdGVwTmFtZSxcbiAgICAgICAgICAgICAgICBub2RlS2luZDogJ3Rvb2wnLFxuICAgICAgICAgICAgICAgIHN0ZXBJZDogc3RlcEluZm8/LnN0ZXBJZCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgICAgICBpc1Rvb2w6IHRydWUsXG4gICAgICAgICAgICAgICAgdG9vbE5hbWU6IHRvb2xOYW1lLFxuICAgICAgICAgICAgICAgIHJlZmVyZW5jZUNvbnRleHQ6IGB0b29scy4ke3Rvb2xOYW1lfS5leGVjdXRlYCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBub2Rlcy5wdXNoKG5vZGUpO1xuICAgICAgICAgICAgZXhpdE5vZGVJZHMucHVzaChub2RlSWQpO1xuXG4gICAgICAgICAgICAvLyBDb25uZWN0IGFnZW50IHRvIHRoaXMgdG9vbCB3aXRoIHRvb2wgZWRnZSB0eXBlXG4gICAgICAgICAgICBlZGdlcy5wdXNoKHtcbiAgICAgICAgICAgICAgaWQ6IGBlXyR7YWdlbnROb2RlSWR9XyR7bm9kZUlkfWAsXG4gICAgICAgICAgICAgIHNvdXJjZTogYWdlbnROb2RlSWQsXG4gICAgICAgICAgICAgIHRhcmdldDogbm9kZUlkLFxuICAgICAgICAgICAgICB0eXBlOiAndG9vbCcsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBGaW5kIHRoZSAndG9vbHMnIHByb3BlcnR5XG4gIGZvciAoY29uc3QgcHJvcCBvZiBvcHRpb25zT2JqLnByb3BlcnRpZXMpIHtcbiAgICBpZiAocHJvcC50eXBlICE9PSAnS2V5VmFsdWVQcm9wZXJ0eScpIGNvbnRpbnVlO1xuXG4gICAgbGV0IGtleU5hbWUgPSAnJztcbiAgICBpZiAocHJvcC5rZXkudHlwZSA9PT0gJ0lkZW50aWZpZXInKSB7XG4gICAgICBrZXlOYW1lID0gcHJvcC5rZXkudmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKGtleU5hbWUgIT09ICd0b29scycpIGNvbnRpbnVlO1xuXG4gICAgLy8gSGFuZGxlIGlubGluZSB0b29scyBvYmplY3RcbiAgICBpZiAocHJvcC52YWx1ZS50eXBlID09PSAnT2JqZWN0RXhwcmVzc2lvbicpIHtcbiAgICAgIGV4dHJhY3RUb29sc0Zyb21PYmplY3QocHJvcC52YWx1ZSk7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHRvb2xzIGFzIGEgdmFyaWFibGUgcmVmZXJlbmNlIC0gcmVzb2x2ZSBpdCBmcm9tIHZhcmlhYmxlTWFwXG4gICAgaWYgKHByb3AudmFsdWUudHlwZSA9PT0gJ0lkZW50aWZpZXInKSB7XG4gICAgICBjb25zdCB0b29sc1Zhck5hbWUgPSBwcm9wLnZhbHVlLnZhbHVlO1xuXG4gICAgICAvLyBUcnkgdG8gcmVzb2x2ZSB0aGUgdmFyaWFibGUgZnJvbSB0aGUgdmFyaWFibGVNYXAgKGJ1bmRsZWQgY29kZSlcbiAgICAgIGNvbnN0IHJlc29sdmVkVG9vbHNPYmogPSB2YXJpYWJsZU1hcC5nZXQodG9vbHNWYXJOYW1lKTtcblxuICAgICAgaWYgKHJlc29sdmVkVG9vbHNPYmogJiYgcmVzb2x2ZWRUb29sc09iai50eXBlID09PSAnT2JqZWN0RXhwcmVzc2lvbicpIHtcbiAgICAgICAgLy8gU3VjY2Vzc2Z1bGx5IHJlc29sdmVkIC0gZXh0cmFjdCBpbmRpdmlkdWFsIHRvb2xzXG4gICAgICAgIGV4dHJhY3RUb29sc0Zyb21PYmplY3QocmVzb2x2ZWRUb29sc09iaik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBGYWxsYmFjazogY3JlYXRlIGEgcGxhY2Vob2xkZXIgbm9kZSBpZiB3ZSBjYW4ndCByZXNvbHZlXG4gICAgICAgIGNvbnN0IG5vZGVJZCA9IGBub2RlXyR7Y29udGV4dC5ub2RlQ291bnRlcisrfWA7XG4gICAgICAgIGNvbnN0IG5vZGU6IE1hbmlmZXN0Tm9kZSA9IHtcbiAgICAgICAgICBpZDogbm9kZUlkLFxuICAgICAgICAgIHR5cGU6ICd0b29sJyxcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBsYWJlbDogYCR7dG9vbHNWYXJOYW1lfWAsXG4gICAgICAgICAgICBub2RlS2luZDogJ3Rvb2wnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgIGlzVG9vbHNDb2xsZWN0aW9uOiB0cnVlLFxuICAgICAgICAgICAgdG9vbHNWYXJpYWJsZTogdG9vbHNWYXJOYW1lLFxuICAgICAgICAgICAgcmVmZXJlbmNlQ29udGV4dDogYHRvb2xzOiR7dG9vbHNWYXJOYW1lfWAsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgbm9kZXMucHVzaChub2RlKTtcbiAgICAgICAgZXhpdE5vZGVJZHMucHVzaChub2RlSWQpO1xuXG4gICAgICAgIC8vIENvbm5lY3QgYWdlbnQgdG8gdG9vbHMgd2l0aCB0b29sIGVkZ2UgdHlwZVxuICAgICAgICBlZGdlcy5wdXNoKHtcbiAgICAgICAgICBpZDogYGVfJHthZ2VudE5vZGVJZH1fJHtub2RlSWR9YCxcbiAgICAgICAgICBzb3VyY2U6IGFnZW50Tm9kZUlkLFxuICAgICAgICAgIHRhcmdldDogbm9kZUlkLFxuICAgICAgICAgIHR5cGU6ICd0b29sJyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHsgbm9kZXMsIGVkZ2VzLCBlbnRyeU5vZGVJZHMsIGV4aXROb2RlSWRzIH07XG59XG5cbi8qKlxuICogQW5hbHl6ZSBhbiBvYmplY3QgZXhwcmVzc2lvbiBmb3Igc3RlcCByZWZlcmVuY2VzXG4gKi9cbmZ1bmN0aW9uIGFuYWx5emVPYmplY3RGb3JTdGVwUmVmZXJlbmNlcyhcbiAgb2JqOiBhbnksXG4gIHN0ZXBEZWNsYXJhdGlvbnM6IE1hcDxzdHJpbmcsIHsgc3RlcElkOiBzdHJpbmcgfT4sXG4gIGNvbnRleHQ6IEFuYWx5c2lzQ29udGV4dCxcbiAgcGF0aDogc3RyaW5nXG4pOiBBbmFseXNpc1Jlc3VsdCB7XG4gIGNvbnN0IG5vZGVzOiBNYW5pZmVzdE5vZGVbXSA9IFtdO1xuICBjb25zdCBlZGdlczogTWFuaWZlc3RFZGdlW10gPSBbXTtcbiAgY29uc3QgZW50cnlOb2RlSWRzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBleGl0Tm9kZUlkczogc3RyaW5nW10gPSBbXTtcblxuICBpZiAoIW9iai5wcm9wZXJ0aWVzKSByZXR1cm4geyBub2RlcywgZWRnZXMsIGVudHJ5Tm9kZUlkcywgZXhpdE5vZGVJZHMgfTtcblxuICBmb3IgKGNvbnN0IHByb3Agb2Ygb2JqLnByb3BlcnRpZXMpIHtcbiAgICBpZiAocHJvcC50eXBlICE9PSAnS2V5VmFsdWVQcm9wZXJ0eScpIGNvbnRpbnVlO1xuXG4gICAgbGV0IGtleU5hbWUgPSAnJztcbiAgICBpZiAocHJvcC5rZXkudHlwZSA9PT0gJ0lkZW50aWZpZXInKSB7XG4gICAgICBrZXlOYW1lID0gcHJvcC5rZXkudmFsdWU7XG4gICAgfSBlbHNlIGlmIChwcm9wLmtleS50eXBlID09PSAnU3RyaW5nTGl0ZXJhbCcpIHtcbiAgICAgIGtleU5hbWUgPSBwcm9wLmtleS52YWx1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50UGF0aCA9IHBhdGggPyBgJHtwYXRofS4ke2tleU5hbWV9YCA6IGtleU5hbWU7XG5cbiAgICBpZiAocHJvcC52YWx1ZS50eXBlID09PSAnSWRlbnRpZmllcicpIHtcbiAgICAgIGNvbnN0IHZhbHVlTmFtZSA9IHByb3AudmFsdWUudmFsdWU7XG4gICAgICBjb25zdCBzdGVwSW5mbyA9IHN0ZXBEZWNsYXJhdGlvbnMuZ2V0KHZhbHVlTmFtZSk7XG4gICAgICBpZiAoc3RlcEluZm8pIHtcbiAgICAgICAgY29uc3Qgbm9kZUlkID0gYG5vZGVfJHtjb250ZXh0Lm5vZGVDb3VudGVyKyt9YDtcbiAgICAgICAgY29uc3Qgbm9kZTogTWFuaWZlc3ROb2RlID0ge1xuICAgICAgICAgIGlkOiBub2RlSWQsXG4gICAgICAgICAgdHlwZTogJ3N0ZXAnLFxuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGxhYmVsOiBgJHtnZXRPcmlnaW5hbFN0ZXBOYW1lKHN0ZXBJbmZvLnN0ZXBJZCwgdmFsdWVOYW1lKX0gKHRvb2wpYCxcbiAgICAgICAgICAgIG5vZGVLaW5kOiAnc3RlcCcsXG4gICAgICAgICAgICBzdGVwSWQ6IHN0ZXBJbmZvLnN0ZXBJZCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICBpc1N0ZXBSZWZlcmVuY2U6IHRydWUsXG4gICAgICAgICAgICByZWZlcmVuY2VDb250ZXh0OiBjdXJyZW50UGF0aCxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICBub2Rlcy5wdXNoKG5vZGUpO1xuICAgICAgICBlbnRyeU5vZGVJZHMucHVzaChub2RlSWQpO1xuICAgICAgICBleGl0Tm9kZUlkcy5wdXNoKG5vZGVJZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHByb3AudmFsdWUudHlwZSA9PT0gJ09iamVjdEV4cHJlc3Npb24nKSB7XG4gICAgICBjb25zdCBuZXN0ZWRSZXN1bHQgPSBhbmFseXplT2JqZWN0Rm9yU3RlcFJlZmVyZW5jZXMoXG4gICAgICAgIHByb3AudmFsdWUsXG4gICAgICAgIHN0ZXBEZWNsYXJhdGlvbnMsXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIGN1cnJlbnRQYXRoXG4gICAgICApO1xuICAgICAgbm9kZXMucHVzaCguLi5uZXN0ZWRSZXN1bHQubm9kZXMpO1xuICAgICAgZWRnZXMucHVzaCguLi5uZXN0ZWRSZXN1bHQuZWRnZXMpO1xuICAgICAgZW50cnlOb2RlSWRzLnB1c2goLi4ubmVzdGVkUmVzdWx0LmVudHJ5Tm9kZUlkcyk7XG4gICAgICBleGl0Tm9kZUlkcy5wdXNoKC4uLm5lc3RlZFJlc3VsdC5leGl0Tm9kZUlkcyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHsgbm9kZXMsIGVkZ2VzLCBlbnRyeU5vZGVJZHMsIGV4aXROb2RlSWRzIH07XG59XG5cbi8qKlxuICogQW5hbHl6ZSBhIHRyYW5zaXRpdmUgZnVuY3Rpb24gY2FsbCB0byBmaW5kIHN0ZXAgY2FsbHMgd2l0aGluIGhlbHBlciBmdW5jdGlvbnNcbiAqL1xuZnVuY3Rpb24gYW5hbHl6ZVRyYW5zaXRpdmVDYWxsKFxuICBmdW5jTmFtZTogc3RyaW5nLFxuICBzdGVwRGVjbGFyYXRpb25zOiBNYXA8c3RyaW5nLCB7IHN0ZXBJZDogc3RyaW5nIH0+LFxuICBjb250ZXh0OiBBbmFseXNpc0NvbnRleHQsXG4gIGZ1bmN0aW9uTWFwOiBNYXA8c3RyaW5nLCBGdW5jdGlvbkluZm8+LFxuICB2YXJpYWJsZU1hcDogTWFwPHN0cmluZywgYW55PixcbiAgdmlzaXRlZEZ1bmN0aW9uczogU2V0PHN0cmluZz5cbik6IEFuYWx5c2lzUmVzdWx0IHtcbiAgY29uc3Qgbm9kZXM6IE1hbmlmZXN0Tm9kZVtdID0gW107XG4gIGNvbnN0IGVkZ2VzOiBNYW5pZmVzdEVkZ2VbXSA9IFtdO1xuICBjb25zdCBlbnRyeU5vZGVJZHM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IGV4aXROb2RlSWRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGlmICh2aXNpdGVkRnVuY3Rpb25zLmhhcyhmdW5jTmFtZSkpIHtcbiAgICByZXR1cm4geyBub2RlcywgZWRnZXMsIGVudHJ5Tm9kZUlkcywgZXhpdE5vZGVJZHMgfTtcbiAgfVxuXG4gIGNvbnN0IGZ1bmNJbmZvID0gZnVuY3Rpb25NYXAuZ2V0KGZ1bmNOYW1lKTtcbiAgaWYgKCFmdW5jSW5mbyB8fCBmdW5jSW5mby5pc1N0ZXApIHtcbiAgICByZXR1cm4geyBub2RlcywgZWRnZXMsIGVudHJ5Tm9kZUlkcywgZXhpdE5vZGVJZHMgfTtcbiAgfVxuXG4gIHZpc2l0ZWRGdW5jdGlvbnMuYWRkKGZ1bmNOYW1lKTtcblxuICB0cnkge1xuICAgIGlmIChmdW5jSW5mby5ib2R5KSB7XG4gICAgICBpZiAoZnVuY0luZm8uYm9keS50eXBlID09PSAnQmxvY2tTdGF0ZW1lbnQnKSB7XG4gICAgICAgIGNvbnN0IGJvZHlSZXN1bHQgPSBhbmFseXplQmxvY2soXG4gICAgICAgICAgZnVuY0luZm8uYm9keS5zdG10cyxcbiAgICAgICAgICBzdGVwRGVjbGFyYXRpb25zLFxuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgZnVuY3Rpb25NYXAsXG4gICAgICAgICAgdmFyaWFibGVNYXBcbiAgICAgICAgKTtcbiAgICAgICAgbm9kZXMucHVzaCguLi5ib2R5UmVzdWx0Lm5vZGVzKTtcbiAgICAgICAgZWRnZXMucHVzaCguLi5ib2R5UmVzdWx0LmVkZ2VzKTtcbiAgICAgICAgZW50cnlOb2RlSWRzLnB1c2goLi4uYm9keVJlc3VsdC5lbnRyeU5vZGVJZHMpO1xuICAgICAgICBleGl0Tm9kZUlkcy5wdXNoKC4uLmJvZHlSZXN1bHQuZXhpdE5vZGVJZHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZXhwclJlc3VsdCA9IGFuYWx5emVFeHByZXNzaW9uKFxuICAgICAgICAgIGZ1bmNJbmZvLmJvZHksXG4gICAgICAgICAgc3RlcERlY2xhcmF0aW9ucyxcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIGZ1bmN0aW9uTWFwLFxuICAgICAgICAgIHZhcmlhYmxlTWFwLFxuICAgICAgICAgIHZpc2l0ZWRGdW5jdGlvbnNcbiAgICAgICAgKTtcbiAgICAgICAgbm9kZXMucHVzaCguLi5leHByUmVzdWx0Lm5vZGVzKTtcbiAgICAgICAgZWRnZXMucHVzaCguLi5leHByUmVzdWx0LmVkZ2VzKTtcbiAgICAgICAgZW50cnlOb2RlSWRzLnB1c2goLi4uZXhwclJlc3VsdC5lbnRyeU5vZGVJZHMpO1xuICAgICAgICBleGl0Tm9kZUlkcy5wdXNoKC4uLmV4cHJSZXN1bHQuZXhpdE5vZGVJZHMpO1xuICAgICAgfVxuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICB2aXNpdGVkRnVuY3Rpb25zLmRlbGV0ZShmdW5jTmFtZSk7XG4gIH1cblxuICByZXR1cm4geyBub2RlcywgZWRnZXMsIGVudHJ5Tm9kZUlkcywgZXhpdE5vZGVJZHMgfTtcbn1cbiJdfQ==
1481
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3dzLWV4dHJhY3Rvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy93b3JrZmxvd3MtZXh0cmFjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQWM1QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXRDLCtFQUErRTtBQUMvRSxZQUFZO0FBQ1osK0VBQStFO0FBRS9FOzs7O0dBSUc7QUFDSCxNQUFNLG1CQUFtQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDO0FBRTlFOzs7OztHQUtHO0FBQ0gsU0FBUyxtQkFBbUIsQ0FBQyxNQUFjLEVBQUUsWUFBb0I7SUFDL0QsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQyxPQUFPLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztBQUNwRCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUyxnQkFBZ0IsQ0FBQyxJQUFnQjtJQUN4QyxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNsQixLQUFLLFlBQVk7WUFDZixPQUFRLElBQW1CLENBQUMsS0FBSyxDQUFDO1FBRXBDLEtBQUssZ0JBQWdCO1lBQ25CLE9BQU8sTUFBTSxDQUFFLElBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVyQyxLQUFLLGdCQUFnQjtZQUNuQixPQUFPLE1BQU0sQ0FBRSxJQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFckMsS0FBSyxlQUFlO1lBQ2xCLE9BQU8sSUFBSyxJQUFZLENBQUMsS0FBSyxHQUFHLENBQUM7UUFFcEMsS0FBSyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7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QUFVLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQzlDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDOUMsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO1lBQVMsQ0FBQztRQUNULGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxDQUFDO0FBQ3JELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZWFkRmlsZSB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHR5cGUge1xuICBBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbixcbiAgQmxvY2tTdGF0ZW1lbnQsXG4gIENhbGxFeHByZXNzaW9uLFxuICBFeHByZXNzaW9uLFxuICBGdW5jdGlvbkRlY2xhcmF0aW9uLFxuICBGdW5jdGlvbkV4cHJlc3Npb24sXG4gIElkZW50aWZpZXIsXG4gIE1lbWJlckV4cHJlc3Npb24sXG4gIFByb2dyYW0sXG4gIFN0YXRlbWVudCxcbiAgVmFyaWFibGVEZWNsYXJhdGlvbixcbn0gZnJvbSAnQHN3Yy9jb3JlJztcbmltcG9ydCB7IHBhcnNlU3luYyB9IGZyb20gJ0Bzd2MvY29yZSc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIENvbnN0YW50c1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIFdvcmtmbG93IHByaW1pdGl2ZXMgdGhhdCBzaG91bGQgYmUgc2hvd24gYXMgbm9kZXMgaW4gdGhlIGdyYXBoLlxuICogVGhlc2UgYXJlIGJ1aWx0LWluIHdvcmtmbG93IGZ1bmN0aW9ucyB0aGF0IHJlcHJlc2VudCBtZWFuaW5nZnVsXG4gKiBwYXVzZXMgb3Igd2FpdCBwb2ludHMgaW4gdGhlIHdvcmtmbG93IGV4ZWN1dGlvbi5cbiAqL1xuY29uc3QgV09SS0ZMT1dfUFJJTUlUSVZFUyA9IG5ldyBTZXQoWydzbGVlcCcsICdjcmVhdGVIb29rJywgJ2NyZWF0ZVdlYmhvb2snXSk7XG5cbi8qKlxuICogRXh0cmFjdCB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gbmFtZSBmcm9tIGEgc3RlcElkLlxuICogc3RlcElkIGZvcm1hdDogXCJzdGVwLy9wYXRoL3RvL2ZpbGUudHMvL2Z1bmN0aW9uTmFtZVwiXG4gKiBUaGUgYnVuZGxlciBtYXkgcmVuYW1lIGZ1bmN0aW9ucyB0byBhdm9pZCBjb2xsaXNpb25zIChlLmcuIGFkZCAtPiBhZGQyKSxcbiAqIGJ1dCB0aGUgc3RlcElkIGNvbnRhaW5zIHRoZSBvcmlnaW5hbCBUeXBlU2NyaXB0IGZ1bmN0aW9uIG5hbWUuXG4gKi9cbmZ1bmN0aW9uIGdldE9yaWdpbmFsU3RlcE5hbWUoc3RlcElkOiBzdHJpbmcsIGZhbGxiYWNrTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcGFydHMgPSBzdGVwSWQuc3BsaXQoJy8vJyk7XG4gIHJldHVybiBwYXJ0cy5sZW5ndGggPiAyID8gcGFydHNbMl0gOiBmYWxsYmFja05hbWU7XG59XG5cbi8qKlxuICogRXh0cmFjdCBhIHJlYWRhYmxlIGNvbmRpdGlvbiB0ZXh0IGZyb20gYW4gRXhwcmVzc2lvbiBBU1Qgbm9kZS5cbiAqIFJlY3Vyc2l2ZWx5IGJ1aWxkcyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgY29uZGl0aW9uLlxuICovXG5mdW5jdGlvbiBnZXRDb25kaXRpb25UZXh0KGV4cHI6IEV4cHJlc3Npb24pOiBzdHJpbmcge1xuICBzd2l0Y2ggKGV4cHIudHlwZSkge1xuICAgIGNhc2UgJ0lkZW50aWZpZXInOlxuICAgICAgcmV0dXJuIChleHByIGFzIElkZW50aWZpZXIpLnZhbHVlO1xuXG4gICAgY2FzZSAnQm9vbGVhbkxpdGVyYWwnOlxuICAgICAgcmV0dXJuIFN0cmluZygoZXhwciBhcyBhbnkpLnZhbHVlKTtcblxuICAgIGNhc2UgJ051bWVyaWNMaXRlcmFsJzpcbiAgICAgIHJldHVybiBTdHJpbmcoKGV4cHIgYXMgYW55KS52YWx1ZSk7XG5cbiAgICBjYXNlICdTdHJpbmdMaXRlcmFsJzpcbiAgICAgIHJldHVybiBgXCIkeyhleHByIGFzIGFueSkudmFsdWV9XCJgO1xuXG4gICAgY2FzZSAnQmluYXJ5RXhwcmVzc2lvbic6IHtcbiAgICAgIGNvbnN0IGJpbiA9IGV4cHIgYXMgYW55O1xuICAgICAgY29uc3QgbGVmdCA9IGdldENvbmRpdGlvblRleHQoYmluLmxlZnQpO1xuICAgICAgY29uc3QgcmlnaHQgPSBnZXRDb25kaXRpb25UZXh0KGJpbi5yaWdodCk7XG4gICAgICByZXR1cm4gYCR7bGVmdH0gJHtiaW4ub3BlcmF0b3J9ICR7cmlnaHR9YDtcbiAgICB9XG5cbiAgICBjYXNlICdVbmFyeUV4cHJlc3Npb24nOiB7XG4gICAgICBjb25zdCB1bmFyeSA9IGV4cHIgYXMgYW55O1xuICAgICAgY29uc3QgYXJnID0gZ2V0Q29uZGl0aW9uVGV4dCh1bmFyeS5hcmd1bWVudCk7XG4gICAgICByZXR1cm4gYCR7dW5hcnkub3BlcmF0b3J9JHthcmd9YDtcbiAgICB9XG5cbiAgICBjYXNlICdNZW1iZXJFeHByZXNzaW9uJzoge1xuICAgICAgY29uc3QgbWVtYmVyID0gZXhwciBhcyBNZW1iZXJFeHByZXNzaW9uO1xuICAgICAgY29uc3Qgb2JqID0gZ2V0Q29uZGl0aW9uVGV4dChtZW1iZXIub2JqZWN0KTtcbiAgICAgIGlmIChtZW1iZXIucHJvcGVydHkudHlwZSA9PT0gJ0lkZW50aWZpZXInKSB7XG4gICAgICAgIHJldHVybiBgJHtvYmp9LiR7KG1lbWJlci5wcm9wZXJ0eSBhcyBJZGVudGlmaWVyKS52YWx1ZX1gO1xuICAgICAgfVxuICAgICAgaWYgKG1lbWJlci5wcm9wZXJ0eS50eXBlID09PSAnQ29tcHV0ZWQnKSB7XG4gICAgICAgIGNvbnN0IGNvbXB1dGVkID0gKG1lbWJlci5wcm9wZXJ0eSBhcyBhbnkpLmV4cHJlc3Npb247XG4gICAgICAgIHJldHVybiBgJHtvYmp9WyR7Z2V0Q29uZGl0aW9uVGV4dChjb21wdXRlZCl9XWA7XG4gICAgICB9XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH1cblxuICAgIGNhc2UgJ0NhbGxFeHByZXNzaW9uJzoge1xuICAgICAgY29uc3QgY2FsbCA9IGV4cHIgYXMgQ2FsbEV4cHJlc3Npb247XG4gICAgICBjb25zdCBjYWxsZWUgPSBjYWxsLmNhbGxlZTtcbiAgICAgIC8vIEhhbmRsZSBjYWxsZWUgd2hpY2ggY291bGQgYmUgRXhwcmVzc2lvbiwgU3VwZXIsIG9yIEltcG9ydFxuICAgICAgaWYgKGNhbGxlZS50eXBlID09PSAnU3VwZXInIHx8IGNhbGxlZS50eXBlID09PSAnSW1wb3J0Jykge1xuICAgICAgICByZXR1cm4gYCR7Y2FsbGVlLnR5cGUudG9Mb3dlckNhc2UoKX0oKWA7XG4gICAgICB9XG4gICAgICByZXR1cm4gYCR7Z2V0Q29uZGl0aW9uVGV4dChjYWxsZWUgYXMgRXhwcmVzc2lvbil9KClgO1xuICAgIH1cblxuICAgIGNhc2UgJ1BhcmVudGhlc2lzRXhwcmVzc2lvbic6IHtcbiAgICAgIGNvbnN0IHBhcmVuID0gZXhwciBhcyBhbnk7XG4gICAgICByZXR1cm4gYCgke2dldENvbmRpdGlvblRleHQocGFyZW4uZXhwcmVzc2lvbil9KWA7XG4gICAgfVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAnY29uZGl0aW9uJztcbiAgfVxufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBJbnRlcm5hbCBUeXBlcyAodXNlZCBkdXJpbmcgZXh0cmFjdGlvbiBvbmx5KVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5pbnRlcmZhY2UgRnVuY3Rpb25JbmZvIHtcbiAgbmFtZTogc3RyaW5nO1xuICBib2R5OiBCbG9ja1N0YXRlbWVudCB8IEV4cHJlc3Npb24gfCBudWxsIHwgdW5kZWZpbmVkO1xuICBpc1N0ZXA6IGJvb2xlYW47XG4gIHN0ZXBJZD86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEFuYWx5c2lzQ29udGV4dCB7XG4gIHBhcmFsbGVsQ291bnRlcjogbnVtYmVyO1xuICBsb29wQ291bnRlcjogbnVtYmVyO1xuICBjb25kaXRpb25hbENvdW50ZXI6IG51bWJlcjtcbiAgbm9kZUNvdW50ZXI6IG51bWJlcjtcbiAgaW5Mb29wOiBzdHJpbmcgfCBudWxsO1xuICBpbkNvbmRpdGlvbmFsOiBzdHJpbmcgfCBudWxsO1xuICAvKiogVHJhY2tzIHZhcmlhYmxlcyBhc3NpZ25lZCBmcm9tIGNyZWF0ZVdlYmhvb2soKSBvciBjcmVhdGVIb29rKCkgKi9cbiAgd2ViaG9va1ZhcmlhYmxlczogU2V0PHN0cmluZz47XG4gIC8qKiBUcmFja3MgYXJyYXkgdmFyaWFibGVzIHRoYXQgaGF2ZSBzdGVwIGNhbGxzIHB1c2hlZCBpbnRvIHRoZW0gKGZvciBQcm9taXNlLmFsbCBwYXR0ZXJuKSAqL1xuICBwcm9taXNlQXJyYXlzOiBNYXA8c3RyaW5nLCBNYW5pZmVzdE5vZGVbXT47IC8vIGFycmF5TmFtZSAtPiBsaXN0IG9mIG5vZGVzXG59XG5cbmludGVyZmFjZSBBbmFseXNpc1Jlc3VsdCB7XG4gIG5vZGVzOiBNYW5pZmVzdE5vZGVbXTtcbiAgZWRnZXM6IE1hbmlmZXN0RWRnZVtdO1xuICBlbnRyeU5vZGVJZHM6IHN0cmluZ1tdO1xuICBleGl0Tm9kZUlkczogc3RyaW5nW107XG59XG5cbi8qKlxuICogTm9kZSBtZXRhZGF0YSBmb3IgY29udHJvbCBmbG93IHNlbWFudGljc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIE5vZGVNZXRhZGF0YSB7XG4gIGxvb3BJZD86IHN0cmluZztcbiAgbG9vcElzQXdhaXQ/OiBib29sZWFuO1xuICBjb25kaXRpb25hbElkPzogc3RyaW5nO1xuICBjb25kaXRpb25hbEJyYW5jaD86ICdUaGVuJyB8ICdFbHNlJztcbiAgcGFyYWxsZWxHcm91cElkPzogc3RyaW5nO1xuICBwYXJhbGxlbE1ldGhvZD86IHN0cmluZztcbiAgLyoqIFN0ZXAgaXMgcGFzc2VkIGFzIGEgcmVmZXJlbmNlIChjYWxsYmFjay90b29sKSByYXRoZXIgdGhhbiBkaXJlY3RseSBjYWxsZWQgKi9cbiAgaXNTdGVwUmVmZXJlbmNlPzogYm9vbGVhbjtcbiAgLyoqIENvbnRleHQgd2hlcmUgdGhlIHN0ZXAgcmVmZXJlbmNlIHdhcyBmb3VuZCAoZS5nLiwgXCJ0b29scy5nZXRXZWF0aGVyLmV4ZWN1dGVcIikgKi9cbiAgcmVmZXJlbmNlQ29udGV4dD86IHN0cmluZztcbiAgLyoqIFRoaXMgbm9kZSBpcyBhIHRvb2wgc3RlcCBjb25uZWN0ZWQgdG8gYSBEdXJhYmxlQWdlbnQgKi9cbiAgaXNUb29sPzogYm9vbGVhbjtcbiAgLyoqIFRoZSBuYW1lIG9mIHRoZSB0b29sIChrZXkgaW4gdG9vbHMgb2JqZWN0KSAqL1xuICB0b29sTmFtZT86IHN0cmluZztcbiAgLyoqIFRoaXMgbm9kZSByZXByZXNlbnRzIGEgY29sbGVjdGlvbiBvZiB0b29scyAoaW1wb3J0ZWQgdmFyaWFibGUpICovXG4gIGlzVG9vbHNDb2xsZWN0aW9uPzogYm9vbGVhbjtcbiAgLyoqIFRoZSB2YXJpYWJsZSBuYW1lIG9mIHRoZSB0b29scyBjb2xsZWN0aW9uICovXG4gIHRvb2xzVmFyaWFibGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogR3JhcGggbm9kZSBmb3Igd29ya2Zsb3cgdmlzdWFsaXphdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1hbmlmZXN0Tm9kZSB7XG4gIGlkOiBzdHJpbmc7XG4gIHR5cGU6IHN0cmluZztcbiAgZGF0YToge1xuICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgbm9kZUtpbmQ6IHN0cmluZztcbiAgICBzdGVwSWQ/OiBzdHJpbmc7XG4gIH07XG4gIG1ldGFkYXRhPzogTm9kZU1ldGFkYXRhO1xufVxuXG4vKipcbiAqIEdyYXBoIGVkZ2UgZm9yIHdvcmtmbG93IGNvbnRyb2wgZmxvd1xuICovXG5leHBvcnQgaW50ZXJmYWNlIE1hbmlmZXN0RWRnZSB7XG4gIGlkOiBzdHJpbmc7XG4gIHNvdXJjZTogc3RyaW5nO1xuICB0YXJnZXQ6IHN0cmluZztcbiAgdHlwZTogJ2RlZmF1bHQnIHwgJ2xvb3AnIHwgJ2NvbmRpdGlvbmFsJyB8ICdwYXJhbGxlbCcgfCAndG9vbCc7XG4gIGxhYmVsPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEdyYXBoIGRhdGEgZm9yIGEgc2luZ2xlIHdvcmtmbG93XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV29ya2Zsb3dHcmFwaERhdGEge1xuICBub2RlczogTWFuaWZlc3ROb2RlW107XG4gIGVkZ2VzOiBNYW5pZmVzdEVkZ2VbXTtcbn1cblxuLyoqXG4gKiBTdGVwIGVudHJ5IGluIHRoZSBtYW5pZmVzdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1hbmlmZXN0U3RlcEVudHJ5IHtcbiAgc3RlcElkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogV29ya2Zsb3cgZW50cnkgaW4gdGhlIG1hbmlmZXN0IChpbmNsdWRlcyBncmFwaCBkYXRhKVxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1hbmlmZXN0V29ya2Zsb3dFbnRyeSB7XG4gIHdvcmtmbG93SWQ6IHN0cmluZztcbiAgZ3JhcGg6IFdvcmtmbG93R3JhcGhEYXRhO1xufVxuXG4vKipcbiAqIE1hbmlmZXN0IHN0cnVjdHVyZSAtIHNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIGFsbCB3b3JrZmxvdyBtZXRhZGF0YVxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1hbmlmZXN0IHtcbiAgdmVyc2lvbjogc3RyaW5nO1xuICBzdGVwczoge1xuICAgIFtmaWxlUGF0aDogc3RyaW5nXToge1xuICAgICAgW3N0ZXBOYW1lOiBzdHJpbmddOiBNYW5pZmVzdFN0ZXBFbnRyeTtcbiAgICB9O1xuICB9O1xuICB3b3JrZmxvd3M6IHtcbiAgICBbZmlsZVBhdGg6IHN0cmluZ106IHtcbiAgICAgIFt3b3JrZmxvd05hbWU6IHN0cmluZ106IE1hbmlmZXN0V29ya2Zsb3dFbnRyeTtcbiAgICB9O1xuICB9O1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRXh0cmFjdGlvbiBGdW5jdGlvbnNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogRXh0cmFjdHMgd29ya2Zsb3cgZ3JhcGhzIGZyb20gYSBidW5kbGVkIHdvcmtmbG93IGZpbGUuXG4gKiBSZXR1cm5zIHdvcmtmbG93IGVudHJpZXMgb3JnYW5pemVkIGJ5IGZpbGUgcGF0aCwgcmVhZHkgZm9yIG1lcmdpbmcgaW50byBNYW5pZmVzdC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4dHJhY3RXb3JrZmxvd0dyYXBocyhidW5kbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHtcbiAgW2ZpbGVQYXRoOiBzdHJpbmddOiB7XG4gICAgW3dvcmtmbG93TmFtZTogc3RyaW5nXTogTWFuaWZlc3RXb3JrZmxvd0VudHJ5O1xuICB9O1xufT4ge1xuICBjb25zdCBidW5kbGVDb2RlID0gYXdhaXQgcmVhZEZpbGUoYnVuZGxlUGF0aCwgJ3V0Zi04Jyk7XG5cbiAgdHJ5IHtcbiAgICBsZXQgYWN0dWFsV29ya2Zsb3dDb2RlID0gYnVuZGxlQ29kZTtcblxuICAgIGNvbnN0IGJ1bmRsZUFzdCA9IHBhcnNlU3luYyhidW5kbGVDb2RlLCB7XG4gICAgICBzeW50YXg6ICdlY21hc2NyaXB0JyxcbiAgICAgIHRhcmdldDogJ2VzMjAyMicsXG4gICAgfSk7XG5cbiAgICBjb25zdCB3b3JrZmxvd0NvZGVWYWx1ZSA9IGV4dHJhY3RXb3JrZmxvd0NvZGVGcm9tQnVuZGxlKGJ1bmRsZUFzdCk7XG4gICAgaWYgKHdvcmtmbG93Q29kZVZhbHVlKSB7XG4gICAgICBhY3R1YWxXb3JrZmxvd0NvZGUgPSB3b3JrZmxvd0NvZGVWYWx1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBhc3QgPSBwYXJzZVN5bmMoYWN0dWFsV29ya2Zsb3dDb2RlLCB7XG4gICAgICBzeW50YXg6ICdlY21hc2NyaXB0JyxcbiAgICAgIHRhcmdldDogJ2VzMjAyMicsXG4gICAgfSk7XG5cbiAgICBjb25zdCBzdGVwRGVjbGFyYXRpb25zID0gZXh0cmFjdFN0ZXBEZWNsYXJhdGlvbnMoYWN0dWFsV29ya2Zsb3dDb2RlKTtcbiAgICBjb25zdCBmdW5jdGlvbk1hcCA9IGJ1aWxkRnVuY3Rpb25NYXAoYXN0LCBzdGVwRGVjbGFyYXRpb25zKTtcbiAgICBjb25zdCB2YXJpYWJsZU1hcCA9IGJ1aWxkVmFyaWFibGVNYXAoYXN0KTtcblxuICAgIHJldHVybiBleHRyYWN0V29ya2Zsb3dzKGFzdCwgc3RlcERlY2xhcmF0aW9ucywgZnVuY3Rpb25NYXAsIHZhcmlhYmxlTWFwKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZXh0cmFjdCB3b3JrZmxvdyBncmFwaHMgZnJvbSBidW5kbGU6JywgZXJyb3IpO1xuICAgIHJldHVybiB7fTtcbiAgfVxufVxuXG4vKipcbiAqIEV4dHJhY3QgdGhlIHdvcmtmbG93Q29kZSBzdHJpbmcgdmFsdWUgZnJvbSBhIHBhcnNlZCBidW5kbGUgQVNUXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RXb3JrZmxvd0NvZGVGcm9tQnVuZGxlKGFzdDogUHJvZ3JhbSk6IHN0cmluZyB8IG51bGwge1xuICBmb3IgKGNvbnN0IGl0ZW0gb2YgYXN0LmJvZHkpIHtcbiAgICBpZiAoaXRlbS50eXBlID09PSAnVmFyaWFibGVEZWNsYXJhdGlvbicpIHtcbiAgICAgIGZvciAoY29uc3QgZGVjbCBvZiBpdGVtLmRlY2xhcmF0aW9ucykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZGVjbC5pZC50eXBlID09PSAnSWRlbnRpZmllcicgJiZcbiAgICAgICAgICBkZWNsLmlkLnZhbHVlID09PSAnd29ya2Zsb3dDb2RlJyAmJlxuICAgICAgICAgIGRlY2wuaW5pdFxuICAgICAgICApIHtcbiAgICAgICAgICBpZiAoZGVjbC5pbml0LnR5cGUgPT09ICdUZW1wbGF0ZUxpdGVyYWwnKSB7XG4gICAgICAgICAgICByZXR1cm4gZGVjbC5pbml0LnF1YXNpc1xuICAgICAgICAgICAgICAubWFwKChxKSA9PiBkZWNvZGVFc2NhcGVkV29ya2Zsb3dDb2RlKHEucmF3KSlcbiAgICAgICAgICAgICAgLmpvaW4oJycpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZGVjbC5pbml0LnR5cGUgPT09ICdTdHJpbmdMaXRlcmFsJykge1xuICAgICAgICAgICAgcmV0dXJuIGRlY2wuaW5pdC52YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGRlY29kZUVzY2FwZWRXb3JrZmxvd0NvZGUocmF3VGVtcGxhdGVFbGVtZW50OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcmF3VGVtcGxhdGVFbGVtZW50LnJlcGxhY2UoL1xcXFwoW1xcXFxgJF0pL2csICckMScpO1xufVxuXG4vKipcbiAqIEV4dHJhY3Qgc3RlcCBkZWNsYXJhdGlvbnMgdXNpbmcgcmVnZXggZm9yIHNwZWVkXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RTdGVwRGVjbGFyYXRpb25zKFxuICBidW5kbGVDb2RlOiBzdHJpbmdcbik6IE1hcDxzdHJpbmcsIHsgc3RlcElkOiBzdHJpbmcgfT4ge1xuICBjb25zdCBzdGVwRGVjbGFyYXRpb25zID0gbmV3IE1hcDxzdHJpbmcsIHsgc3RlcElkOiBzdHJpbmcgfT4oKTtcblxuICBjb25zdCBzdGVwUGF0dGVybiA9XG4gICAgL3ZhciAoXFx3KykgPSBnbG9iYWxUaGlzXFxbKD86XFwvXFwqLio/XFwqXFwvXFxzKik/U3ltYm9sXFwuZm9yXFwoXCJXT1JLRkxPV19VU0VfU1RFUFwiXFwpXFxdXFwoXCIoW15cIl0rKVwiXFwpL2c7XG5cbiAgY29uc3QgbGluZXMgPSBidW5kbGVDb2RlLnNwbGl0KCdcXG4nKTtcbiAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgc3RlcFBhdHRlcm4ubGFzdEluZGV4ID0gMDtcbiAgICBjb25zdCBtYXRjaCA9IHN0ZXBQYXR0ZXJuLmV4ZWMobGluZSk7XG4gICAgaWYgKG1hdGNoKSB7XG4gICAgICBjb25zdCBbLCB2YXJOYW1lLCBzdGVwSWRdID0gbWF0Y2g7XG4gICAgICBzdGVwRGVjbGFyYXRpb25zLnNldCh2YXJOYW1lLCB7IHN0ZXBJZCB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RlcERlY2xhcmF0aW9ucztcbn1cblxuLyoqXG4gKiBFeHRyYWN0IGlubGluZSBzdGVwIGRlY2xhcmF0aW9ucyBmcm9tIHdpdGhpbiBhIGZ1bmN0aW9uIGJvZHkuXG4gKiBUaGVzZSBhcmUgc3RlcHMgZGVmaW5lZCBhcyB2YXJpYWJsZSBkZWNsYXJhdGlvbnMgaW5zaWRlIGEgd29ya2Zsb3cgZnVuY3Rpb24uXG4gKiBQYXR0ZXJuOiB2YXIvY29uc3QgdmFyTmFtZSA9IGdsb2JhbFRoaXNbU3ltYm9sLmZvcihcIldPUktGTE9XX1VTRV9TVEVQXCIpXShcInN0ZXBJZFwiKVxuICovXG5mdW5jdGlvbiBleHRyYWN0SW5saW5lU3RlcERlY2xhcmF0aW9ucyhcbiAgc3RtdHM6IFN0YXRlbWVudFtdXG4pOiBNYXA8c3RyaW5nLCB7IHN0ZXBJZDogc3RyaW5nIH0+IHtcbiAgY29uc3QgaW5saW5lU3RlcHMgPSBuZXcgTWFwPHN0cmluZywgeyBzdGVwSWQ6IHN0cmluZyB9PigpO1xuXG4gIGZvciAoY29uc3Qgc3RtdCBvZiBzdG10cykge1xuICAgIGlmIChzdG10LnR5cGUgPT09ICdWYXJpYWJsZURlY2xhcmF0aW9uJykge1xuICAgICAgY29uc3QgdmFyRGVjbCA9IHN0bXQgYXMgVmFyaWFibGVEZWNsYXJhdGlvbjtcbiAgICAgIGZvciAoY29uc3QgZGVjbCBvZiB2YXJEZWNsLmRlY2xhcmF0aW9ucykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZGVjbC5pZC50eXBlID09PSAnSWRlbnRpZmllcicgJiZcbiAgICAgICAgICBkZWNsLmluaXQ/LnR5cGUgPT09ICdDYWxsRXhwcmVzc2lvbidcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgY2FsbEV4cHIgPSBkZWNsLmluaXQgYXMgQ2FsbEV4cHJlc3Npb247XG4gICAgICAgICAgLy8gQ2hlY2sgZm9yIGdsb2JhbFRoaXNbU3ltYm9sLmZvcihcIldPUktGTE9XX1VTRV9TVEVQXCIpXShcInN0ZXBJZFwiKSBwYXR0ZXJuXG4gICAgICAgICAgaWYgKGNhbGxFeHByLmNhbGxlZS50eXBlID09PSAnTWVtYmVyRXhwcmVzc2lvbicpIHtcbiAgICAgICAgICAgIGNvbnN0IG1lbWJlciA9IGNhbGxFeHByLmNhbGxlZSBhcyBNZW1iZXJFeHByZXNzaW9uO1xuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgb2JqZWN0IGlzIGdsb2JhbFRoaXNcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgbWVtYmVyLm9iamVjdC50eXBlID09PSAnSWRlbnRpZmllcicgJiZcbiAgICAgICAgICAgICAgKG1lbWJlci5vYmplY3QgYXMgSWRlbnRpZmllcikudmFsdWUgPT09ICdnbG9iYWxUaGlzJyAmJlxuICAgICAgICAgICAgICBtZW1iZXIucHJvcGVydHkudHlwZSA9PT0gJ0NvbXB1dGVkJ1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIC8vIEZvciBjb21wdXRlZCBtZW1iZXIgYWNjZXNzIGdsb2JhbFRoaXNbU3ltYm9sLmZvciguLi4pXSxcbiAgICAgICAgICAgICAgLy8gdGhlIHByb3BlcnR5IGlzIGEgQ29tcHV0ZWQgdHlwZSBjb250YWluaW5nIHRoZSBleHByZXNzaW9uXG4gICAgICAgICAgICAgIGNvbnN0IGNvbXB1dGVkRXhwciA9IChtZW1iZXIucHJvcGVydHkgYXMgYW55KS5leHByZXNzaW9uO1xuICAgICAgICAgICAgICBpZiAoY29tcHV0ZWRFeHByPy50eXBlID09PSAnQ2FsbEV4cHJlc3Npb24nKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3ltYm9sQ2FsbCA9IGNvbXB1dGVkRXhwciBhcyBDYWxsRXhwcmVzc2lvbjtcbiAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiBpdCdzIFN5bWJvbC5mb3IoXCJXT1JLRkxPV19VU0VfU1RFUFwiKVxuICAgICAgICAgICAgICAgIGlmIChzeW1ib2xDYWxsLmNhbGxlZS50eXBlID09PSAnTWVtYmVyRXhwcmVzc2lvbicpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHN5bWJvbE1lbWJlciA9IHN5bWJvbENhbGwuY2FsbGVlIGFzIE1lbWJlckV4cHJlc3Npb247XG4gICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHN5bWJvbE1lbWJlci5vYmplY3QudHlwZSA9PT0gJ0lkZW50aWZpZXInICYmXG4gICAgICAgICAgICAgICAgICAgIChzeW1ib2xNZW1iZXIub2JqZWN0IGFzIElkZW50aWZpZXIpLnZhbHVlID09PSAnU3ltYm9sJyAmJlxuICAgICAgICAgICAgICAgICAgICBzeW1ib2xNZW1iZXIucHJvcGVydHkudHlwZSA9PT0gJ0lkZW50aWZpZXInICYmXG4gICAgICAgICAgICAgICAgICAgIChzeW1ib2xNZW1iZXIucHJvcGVydHkgYXMgSWRlbnRpZmllcikudmFsdWUgPT09ICdmb3InICYmXG4gICAgICAgICAgICAgICAgICAgIHN5bWJvbENhbGwuYXJndW1lbnRzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgc3ltYm9sQ2FsbC5hcmd1bWVudHNbMF0uZXhwcmVzc2lvbi50eXBlID09PVxuICAgICAgICAgICAgICAgICAgICAgICdTdHJpbmdMaXRlcmFsJyAmJlxuICAgICAgICAgICAgICAgICAgICAoc3ltYm9sQ2FsbC5hcmd1bWVudHNbMF0uZXhwcmVzc2lvbiBhcyBhbnkpLnZhbHVlID09PVxuICAgICAgICAgICAgICAgICAgICAgICdXT1JLRkxPV19VU0VfU1RFUCdcbiAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAvLyBFeHRyYWN0IHRoZSBzdGVwSWQgZnJvbSB0aGUgb3V0ZXIgY2FsbCBhcmd1bWVudHNcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgIGNhbGxFeHByLmFyZ3VtZW50cy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgICAgY2FsbEV4cHIuYXJndW1lbnRzWzBdLmV4cHJlc3Npb24udHlwZSA9PT0gJ1N0cmluZ0xpdGVyYWwnXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZXBJZCA9IChjYWxsRXhwci5hcmd1bWVudHNbMF0uZXhwcmVzc2lvbiBhcyBhbnkpXG4gICAgICAgICAgICAgICAgICAgICAgICAudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFyTmFtZSA9IChkZWNsLmlkIGFzIElkZW50aWZpZXIpLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgIGlubGluZVN0ZXBzLnNldCh2YXJOYW1lLCB7IHN0ZXBJZCB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpbmxpbmVTdGVwcztcbn1cblxuLyoqXG4gKiBCdWlsZCBhIG1hcCBvZiBhbGwgZnVuY3Rpb25zIGluIHRoZSBidW5kbGUgZm9yIHRyYW5zaXRpdmUgc3RlcCByZXNvbHV0aW9uXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkRnVuY3Rpb25NYXAoXG4gIGFzdDogUHJvZ3JhbSxcbiAgc3RlcERlY2xhcmF0aW9uczogTWFwPHN0cmluZywgeyBzdGVwSWQ6IHN0cmluZyB9PlxuKTogTWFwPHN0cmluZywgRnVuY3Rpb25JbmZvPiB7XG4gIGNvbnN0IGZ1bmN0aW9uTWFwID0gbmV3IE1hcDxzdHJpbmcsIEZ1bmN0aW9uSW5mbz4oKTtcblxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgYXN0LmJvZHkpIHtcbiAgICBpZiAoaXRlbS50eXBlID09PSAnRnVuY3Rpb25EZWNsYXJhdGlvbicpIHtcbiAgICAgIGNvbnN0IGZ1bmMgPSBpdGVtIGFzIEZ1bmN0aW9uRGVjbGFyYXRpb247XG4gICAgICBpZiAoZnVuYy5pZGVudGlmaWVyKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBmdW5jLmlkZW50aWZpZXIudmFsdWU7XG4gICAgICAgIGNvbnN0IGlzU3RlcCA9IHN0ZXBEZWNsYXJhdGlvbnMuaGFzKG5hbWUpO1xuICAgICAgICBmdW5jdGlvbk1hcC5zZXQobmFtZSwge1xuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgYm9keTogZnVuYy5ib2R5LFxuICAgICAgICAgIGlzU3RlcCxcbiAgICAgICAgICBzdGVwSWQ6IGlzU3RlcCA/IHN0ZXBEZWNsYXJhdGlvbnMuZ2V0KG5hbWUpPy5zdGVwSWQgOiB1bmRlZmluZWQsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpdGVtLnR5cGUgPT09ICdWYXJpYWJsZURlY2xhcmF0aW9uJykge1xuICAgICAgY29uc3QgdmFyRGVjbCA9IGl0ZW0gYXMgVmFyaWFibGVEZWNsYXJhdGlvbjtcbiAgICAgIGZvciAoY29uc3QgZGVjbCBvZiB2YXJEZWNsLmRlY2xhcmF0aW9ucykge1xuICAgICAgICBpZiAoZGVjbC5pZC50eXBlID09PSAnSWRlbnRpZmllcicgJiYgZGVjbC5pbml0KSB7XG4gICAgICAgICAgY29uc3QgbmFtZSA9IGRlY2wuaWQudmFsdWU7XG4gICAgICAgICAgY29uc3QgaXNTdGVwID0gc3RlcERlY2xhcmF0aW9ucy5oYXMobmFtZSk7XG5cbiAgICAgICAgICBpZiAoZGVjbC5pbml0LnR5cGUgPT09ICdGdW5jdGlvbkV4cHJlc3Npb24nKSB7XG4gICAgICAgICAgICBjb25zdCBmdW5jRXhwciA9IGRlY2wuaW5pdCBhcyBGdW5jdGlvbkV4cHJlc3Npb247XG4gICAgICAgICAgICBmdW5jdGlvbk1hcC5zZXQobmFtZSwge1xuICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICBib2R5OiBmdW5jRXhwci5ib2R5LFxuICAgICAgICAgICAgICBpc1N0ZXAsXG4gICAgICAgICAgICAgIHN0ZXBJZDogaXNTdGVwID8gc3RlcERlY2xhcmF0aW9ucy5nZXQobmFtZSk/LnN0ZXBJZCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZGVjbC5pbml0LnR5cGUgPT09ICdBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbicpIHtcbiAgICAgICAgICAgIGNvbnN0IGFycm93RnVuYyA9IGRlY2wuaW5pdCBhcyBBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbjtcbiAgICAgICAgICAgIGZ1bmN0aW9uTWFwLnNldChuYW1lLCB7XG4gICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgIGJvZHk6IGFycm93RnVuYy5ib2R5LFxuICAgICAgICAgICAgICBpc1N0ZXAsXG4gICAgICAgICAgICAgIHN0ZXBJZDogaXNTdGVwID8gc3RlcERlY2xhcmF0aW9ucy5nZXQobmFtZSk/LnN0ZXBJZCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbk1hcDtcbn1cblxuLyoqXG4gKiBCdWlsZCBhIG1hcCBvZiB2YXJpYWJsZSBkZWZpbml0aW9ucyAob2JqZWN0cykgZm9yIHRvb2wgcmVzb2x1dGlvblxuICogVGhpcyBhbGxvd3MgdXMgdG8gcmVzb2x2ZSB0b29scyBvYmplY3RzIHRvIHRoZSBhY3R1YWwgdG9vbHMgb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIGJ1aWxkVmFyaWFibGVNYXAoYXN0OiBQcm9ncmFtKTogTWFwPHN0cmluZywgYW55PiB7XG4gIGNvbnN0IHZhcmlhYmxlTWFwID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcblxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgYXN0LmJvZHkpIHtcbiAgICBpZiAoaXRlbS50eXBlID09PSAnVmFyaWFibGVEZWNsYXJhdGlvbicpIHtcbiAgICAgIGNvbnN0IHZhckRlY2wgPSBpdGVtIGFzIFZhcmlhYmxlRGVjbGFyYXRpb247XG4gICAgICBmb3IgKGNvbnN0IGRlY2wgb2YgdmFyRGVjbC5kZWNsYXJhdGlvbnMpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGRlY2wudHlwZSA9PT0gJ1ZhcmlhYmxlRGVjbGFyYXRvcicgJiZcbiAgICAgICAgICBkZWNsLmlkLnR5cGUgPT09ICdJZGVudGlmaWVyJyAmJlxuICAgICAgICAgIGRlY2wuaW5pdD8udHlwZSA9PT0gJ09iamVjdEV4cHJlc3Npb24nXG4gICAgICAgICkge1xuICAgICAgICAgIHZhcmlhYmxlTWFwLnNldChkZWNsLmlkLnZhbHVlLCBkZWNsLmluaXQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZhcmlhYmxlTWFwO1xufVxuXG4vKipcbiAqIEV4dHJhY3Qgd29ya2Zsb3dzIGZyb20gQVNUXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RXb3JrZmxvd3MoXG4gIGFzdDogUHJvZ3JhbSxcbiAgc3RlcERlY2xhcmF0aW9uczogTWFwPHN0cmluZywgeyBzdGVwSWQ6IHN0cmluZyB9PixcbiAgZnVuY3Rpb25NYXA6IE1hcDxzdHJpbmcsIEZ1bmN0aW9uSW5mbz4sXG4gIHZhcmlhYmxlTWFwOiBNYXA8c3RyaW5nLCBhbnk+XG4pOiB7XG4gIFtmaWxlUGF0aDogc3RyaW5nXToge1xuICAgIFt3b3JrZmxvd05hbWU6IHN0cmluZ106IE1hbmlmZXN0V29ya2Zsb3dFbnRyeTtcbiAgfTtcbn0ge1xuICBjb25zdCByZXN1bHQ6IHtcbiAgICBbZmlsZVBhdGg6IHN0cmluZ106IHtcbiAgICAgIFt3b3JrZmxvd05hbWU6IHN0cmluZ106IE1hbmlmZXN0V29ya2Zsb3dFbnRyeTtcbiAgICB9O1xuICB9ID0ge307XG5cbiAgZm9yIChjb25zdCBpdGVtIG9mIGFzdC5ib2R5KSB7XG4gICAgaWYgKGl0ZW0udHlwZSA9PT0gJ0Z1bmN0aW9uRGVjbGFyYXRpb24nKSB7XG4gICAgICBjb25zdCBmdW5jID0gaXRlbSBhcyBGdW5jdGlvbkRlY2xhcmF0aW9uO1xuICAgICAgaWYgKCFmdW5jLmlkZW50aWZpZXIpIGNvbnRpbnVlO1xuXG4gICAgICBjb25zdCB3b3JrZmxvd05hbWUgPSBmdW5jLmlkZW50aWZpZXIudmFsdWU7XG4gICAgICBjb25zdCB3b3JrZmxvd0lkID0gZmluZFdvcmtmbG93SWQoYXN0LCB3b3JrZmxvd05hbWUpO1xuICAgICAgaWYgKCF3b3JrZmxvd0lkKSBjb250aW51ZTtcblxuICAgICAgLy8gRXh0cmFjdCBmaWxlIHBhdGggYW5kIGFjdHVhbCB3b3JrZmxvdyBuYW1lIGZyb20gd29ya2Zsb3dJZDogXCJ3b3JrZmxvdy8vcGF0aC90by9maWxlLnRzLy9mdW5jdGlvbk5hbWVcIlxuICAgICAgLy8gVGhlIGJ1bmRsZXIgbWF5IHJlbmFtZSBmdW5jdGlvbnMgdG8gYXZvaWQgY29sbGlzaW9ucyAoZS5nLiBhZGRUZW5Xb3JrZmxvdyAtPiBhZGRUZW5Xb3JrZmxvdzIpLFxuICAgICAgLy8gYnV0IHRoZSB3b3JrZmxvd0lkIGNvbnRhaW5zIHRoZSBvcmlnaW5hbCBUeXBlU2NyaXB0IGZ1bmN0aW9uIG5hbWUuXG4gICAgICBjb25zdCBwYXJ0cyA9IHdvcmtmbG93SWQuc3BsaXQoJy8vJyk7XG4gICAgICBjb25zdCBmaWxlUGF0aCA9IHBhcnRzLmxlbmd0aCA+IDEgPyBwYXJ0c1sxXSA6ICd1bmtub3duJztcbiAgICAgIGNvbnN0IGFjdHVhbFdvcmtmbG93TmFtZSA9IHBhcnRzLmxlbmd0aCA+IDIgPyBwYXJ0c1syXSA6IHdvcmtmbG93TmFtZTtcblxuICAgICAgY29uc3QgZ3JhcGggPSBhbmFseXplV29ya2Zsb3dGdW5jdGlvbihcbiAgICAgICAgZnVuYyxcbiAgICAgICAgd29ya2Zsb3dOYW1lLFxuICAgICAgICBzdGVwRGVjbGFyYXRpb25zLFxuICAgICAgICBmdW5jdGlvbk1hcCxcbiAgICAgICAgdmFyaWFibGVNYXBcbiAgICAgICk7XG5cbiAgICAgIGlmICghcmVzdWx0W2ZpbGVQYXRoXSkge1xuICAgICAgICByZXN1bHRbZmlsZVBhdGhdID0ge307XG4gICAgICB9XG5cbiAgICAgIHJlc3VsdFtmaWxlUGF0aF1bYWN0dWFsV29ya2Zsb3dOYW1lXSA9IHtcbiAgICAgICAgd29ya2Zsb3dJZCxcbiAgICAgICAgZ3JhcGgsXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRmluZCB3b3JrZmxvd0lkIGFzc2lnbm1lbnQgZm9yIGEgZnVuY3Rpb25cbiAqL1xuZnVuY3Rpb24gZmluZFdvcmtmbG93SWQoYXN0OiBQcm9ncmFtLCBmdW5jdGlvbk5hbWU6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICBmb3IgKGNvbnN0IGl0ZW0gb2YgYXN0LmJvZHkpIHtcbiAgICBpZiAoaXRlbS50eXBlID09PSAnRXhwcmVzc2lvblN0YXRlbWVudCcpIHtcbiAgICAgIGNvbnN0IGV4cHIgPSBpdGVtLmV4cHJlc3Npb247XG4gICAgICBpZiAoZXhwci50eXBlID09PSAnQXNzaWdubWVudEV4cHJlc3Npb24nKSB7XG4gICAgICAgIGNvbnN0IGxlZnQgPSBleHByLmxlZnQ7XG4gICAgICAgIGlmIChsZWZ0LnR5cGUgPT09ICdNZW1iZXJFeHByZXNzaW9uJykge1xuICAgICAgICAgIGNvbnN0IG9iaiA9IGxlZnQub2JqZWN0O1xuICAgICAgICAgIGNvbnN0IHByb3AgPSBsZWZ0LnByb3BlcnR5O1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIG9iai50eXBlID09PSAnSWRlbnRpZmllcicgJiZcbiAgICAgICAgICAgIG9iai52YWx1ZSA9PT0gZnVuY3Rpb25OYW1lICYmXG4gICAgICAgICAgICBwcm9wLnR5cGUgPT09ICdJZGVudGlmaWVyJyAmJlxuICAgICAgICAgICAgcHJvcC52YWx1ZSA9PT0gJ3dvcmtmbG93SWQnXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCByaWdodCA9IGV4cHIucmlnaHQ7XG4gICAgICAgICAgICBpZiAocmlnaHQudHlwZSA9PT0gJ1N0cmluZ0xpdGVyYWwnKSB7XG4gICAgICAgICAgICAgIHJldHVybiByaWdodC52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogQW5hbHl6ZSBhIHdvcmtmbG93IGZ1bmN0aW9uIGFuZCBidWlsZCBpdHMgZ3JhcGhcbiAqL1xuZnVuY3Rpb24gYW5hbHl6ZVdvcmtmbG93RnVuY3Rpb24oXG4gIGZ1bmM6IEZ1bmN0aW9uRGVjbGFyYXRpb24sXG4gIHdvcmtmbG93TmFtZTogc3RyaW5nLFxuICBzdGVwRGVjbGFyYXRpb25zOiBNYXA8c3RyaW5nLCB7IHN0ZXBJZDogc3RyaW5nIH0+LFxuICBmdW5jdGlvbk1hcDogTWFwPHN0cmluZywgRnVuY3Rpb25JbmZvPixcbiAgdmFyaWFibGVNYXA6IE1hcDxzdHJpbmcsIGFueT5cbik6IFdvcmtmbG93R3JhcGhEYXRhIHtcbiAgY29uc3Qgbm9kZXM6IE1hbmlmZXN0Tm9kZVtdID0gW107XG4gIGNvbnN0IGVkZ2VzOiBNYW5pZmVzdEVkZ2VbXSA9IFtdO1xuXG4gIC8vIEFkZCBzdGFydCBub2RlXG4gIG5vZGVzLnB1c2goe1xuICAgIGlkOiAnc3RhcnQnLFxuICAgIHR5cGU6ICd3b3JrZmxvd1N0YXJ0JyxcbiAgICBkYXRhOiB7XG4gICAgICBsYWJlbDogYFN0YXJ0OiAke3dvcmtmbG93TmFtZX1gLFxuICAgICAgbm9kZUtpbmQ6ICd3b3JrZmxvd19zdGFydCcsXG4gICAgfSxcbiAgfSk7XG5cbiAgY29uc3QgY29udGV4dDogQW5hbHlzaXNDb250ZXh0ID0ge1xuICAgIHBhcmFsbGVsQ291bnRlcjogMCxcbiAgICBsb29wQ291bnRlcjogMCxcbiAgICBjb25kaXRpb25hbENvdW50ZXI6IDAsXG4gICAgbm9kZUNvdW50ZXI6IDAsXG4gICAgaW5Mb29wOiBudWxsLFxuICAgIGluQ29uZGl0aW9uYWw6IG51bGwsXG4gICAgd2ViaG9va1ZhcmlhYmxlczogbmV3IFNldCgpLFxuICAgIHByb21pc2VBcnJheXM6IG5ldyBNYXAoKSxcbiAgfTtcblxuICBsZXQgcHJldkV4aXRJZHMgPSBbJ3N0YXJ0J107XG5cbiAgaWYgKGZ1bmMuYm9keT8uc3RtdHMpIHtcbiAgICAvLyBFeHRyYWN0IGlubGluZSBzdGVwIGRlY2xhcmF0aW9ucyBmcm9tIHRoZSB3b3JrZmxvdyBib2R5XG4gICAgLy8gVGhlc2UgYXJlIHN0ZXBzIGRlZmluZWQgYXMgdmFyaWFibGVzIGluc2lkZSB0aGUgd29ya2Zsb3cgZnVuY3Rpb25cbiAgICBjb25zdCBpbmxpbmVTdGVwcyA9IGV4dHJhY3RJbmxpbmVTdGVwRGVjbGFyYXRpb25zKGZ1bmMuYm9keS5zdG10cyk7XG5cbiAgICAvLyBNZXJnZSBpbmxpbmUgc3RlcHMgd2l0aCBnbG9iYWwgc3RlcCBkZWNsYXJhdGlvbnNcbiAgICBjb25zdCBtZXJnZWRTdGVwRGVjbGFyYXRpb25zID0gbmV3IE1hcChzdGVwRGVjbGFyYXRpb25zKTtcbiAgICBmb3IgKGNvbnN0IFtuYW1lLCBpbmZvXSBvZiBpbmxpbmVTdGVwcykge1xuICAgICAgbWVyZ2VkU3RlcERlY2xhcmF0aW9ucy5zZXQobmFtZSwgaW5mbyk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBzdG10IG9mIGZ1bmMuYm9keS5zdG10cykge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYW5hbHl6ZVN0YXRlbWVudChcbiAgICAgICAgc3RtdCxcbiAgICAgICAgbWVyZ2VkU3RlcERlY2xhcmF0aW9ucyxcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgZnVuY3Rpb25NYXAsXG4gICAgICAgIHZhcmlhYmxlTWFwXG4gICAgICApO1xuXG4gICAgICBub2Rlcy5wdXNoKC4uLnJlc3VsdC5ub2Rlcyk7XG4gICAgICBlZGdlcy5wdXNoKC4uLnJlc3VsdC5lZGdlcyk7XG5cbiAgICAgIGZvciAoY29uc3QgcHJldklkIG9mIHByZXZFeGl0SWRzKSB7XG4gICAgICAgIGZvciAoY29uc3QgZW50cnlJZCBvZiByZXN1bHQuZW50cnlOb2RlSWRzKSB7XG4gICAgICAgICAgY29uc3QgZWRnZUlkID0gYGVfJHtwcmV2SWR9XyR7ZW50cnlJZH1gO1xuICAgICAgICAgIGlmICghZWRnZXMuZmluZCgoZSkgPT4gZS5pZCA9PT0gZWRnZUlkKSkge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0Tm9kZSA9IHJlc3VsdC5ub2Rlcy5maW5kKChuKSA9PiBuLmlkID09PSBlbnRyeUlkKTtcbiAgICAgICAgICAgIC8vIE9ubHkgdXNlICdwYXJhbGxlbCcgdHlwZSBmb3IgcGFyYWxsZWwgZ3JvdXAgY29ubmVjdGlvbnNcbiAgICAgICAgICAgIC8vIFNlcXVlbnRpYWwgY29ubmVjdGlvbnMgKGluY2x1ZGluZyB0by9mcm9tIGxvb3BzKSBzaG91bGQgYmUgJ2RlZmF1bHQnXG4gICAgICAgICAgICBjb25zdCBlZGdlVHlwZSA9IHRhcmdldE5vZGU/Lm1ldGFkYXRhPy5wYXJhbGxlbEdyb3VwSWRcbiAgICAgICAgICAgICAgPyAncGFyYWxsZWwnXG4gICAgICAgICAgICAgIDogJ2RlZmF1bHQnO1xuICAgICAgICAgICAgZWRnZXMucHVzaCh7XG4gICAgICAgICAgICAgIGlkOiBlZGdlSWQsXG4gICAgICAgICAgICAgIHNvdXJjZTogcHJldklkLFxuICAgICAgICAgICAgICB0YXJnZXQ6IGVudHJ5SWQsXG4gICAgICAgICAgICAgIHR5cGU6IGVkZ2VUeXBlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXN1bHQuZXhpdE5vZGVJZHMubGVuZ3RoID4gMCkge1xuICAgICAgICBwcmV2RXhpdElkcyA9IHJlc3VsdC5leGl0Tm9kZUlkcztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBBZGQgZW5kIG5vZGVcbiAgbm9kZXMucHVzaCh7XG4gICAgaWQ6ICdlbmQnLFxuICAgIHR5cGU6ICd3b3JrZmxvd0VuZCcsXG4gICAgZGF0YToge1xuICAgICAgbGFiZWw6ICdSZXR1cm4nLFxuICAgICAgbm9kZUtpbmQ6ICd3b3JrZmxvd19lbmQnLFxuICAgIH0sXG4gIH0pO1xuXG4gIGZvciAoY29uc3QgcHJldklkIG9mIHByZXZFeGl0SWRzKSB7XG4gICAgZWRnZXMucHVzaCh7XG4gICAgICBpZDogYGVfJHtwcmV2SWR9X2VuZGAsXG4gICAgICBzb3VyY2U6IHByZXZJZCxcbiAgICAgIHRhcmdldDogJ2VuZCcsXG4gICAgICB0eXBlOiAnZGVmYXVsdCcsXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4geyBub2RlcywgZWRnZXMgfTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBhIHN0YXRlbWVudCBvciBibG9jayBjb250YWlucyBhd2FpdCBleHByZXNzaW9ucyAocmVjdXJzaXZlbHkpXG4gKiBVc2VkIHRvIGRldGVybWluZSBpZiBhIGZvci93aGlsZSBsb29wIGlzIHRydWx5IGEgbG9vcGluZyBleGVjdXRpb24gcGF0dGVyblxuICogdnMganVzdCBjb2xsZWN0aW5nIHByb21pc2VzIGZvciBwYXJhbGxlbCBleGVjdXRpb25cbiAqL1xuZnVuY3Rpb24gY29udGFpbnNBd2FpdEV4cHJlc3Npb24obm9kZTogYW55KTogYm9vbGVhbiB7XG4gIGlmICghbm9kZSkgcmV0dXJuIGZhbHNlO1xuXG4gIC8vIERpcmVjdCBhd2FpdCBleHByZXNzaW9uXG4gIGlmIChub2RlLnR5cGUgPT09ICdBd2FpdEV4cHJlc3Npb24nKSByZXR1cm4gdHJ1ZTtcblxuICAvLyBDaGVjayBibG9jayBzdGF0ZW1lbnRzXG4gIGlmIChub2RlLnR5cGUgPT09ICdCbG9ja1N0YXRlbWVudCcgJiYgbm9kZS5zdG10cykge1xuICAgIHJldHVybiBub2RlLnN0bXRzLnNvbWUoKHN0bXQ6IGFueSkgPT4gY29udGFpbnNBd2FpdEV4cHJlc3Npb24oc3RtdCkpO1xuICB9XG5cbiAgLy8gQ2hlY2sgZXhwcmVzc2lvbiBzdGF0ZW1lbnRzXG4gIGlmIChub2RlLnR5cGUgPT09ICdFeHByZXNzaW9uU3RhdGVtZW50JyAmJiBub2RlLmV4cHJlc3Npb24pIHtcbiAgICByZXR1cm4gY29udGFpbnNBd2FpdEV4cHJlc3Npb24obm9kZS5leHByZXNzaW9uKTtcbiAgfVxuXG4gIC8vIENoZWNrIHZhcmlhYmxlIGRlY2xhcmF0aW9uc1xuICBpZiAobm9kZS50eXBlID09PSAnVmFyaWFibGVEZWNsYXJhdGlvbicgJiYgbm9kZS5kZWNsYXJhdGlvbnMpIHtcbiAgICByZXR1cm4gbm9kZS5kZWNsYXJhdGlvbnMuc29tZShcbiAgICAgIChkZWNsOiBhbnkpID0+IGRlY2wuaW5pdCAmJiBjb250YWluc0F3YWl0RXhwcmVzc2lvbihkZWNsLmluaXQpXG4gICAgKTtcbiAgfVxuXG4gIC8vIENoZWNrIGlmIHN0YXRlbWVudHNcbiAgaWYgKG5vZGUudHlwZSA9PT0gJ0lmU3RhdGVtZW50Jykge1xuICAgIHJldHVybiAoXG4gICAgICBjb250YWluc0F3YWl0RXhwcmVzc2lvbihub2RlLmNvbnNlcXVlbnQpIHx8XG4gICAgICBjb250YWluc0F3YWl0RXhwcmVzc2lvbihub2RlLmFsdGVybmF0ZSlcbiAgICApO1xuICB9XG5cbiAgLy8gQ2hlY2sgZm9yIHN0YXRlbWVudHNcbiAgaWYgKFxuICAgIG5vZGUudHlwZSA9PT0gJ0ZvclN0YXRlbWVudCcgfHxcbiAgICBub2RlLnR5cGUgPT09ICdXaGlsZVN0YXRlbWVudCcgfHxcbiAgICBub2RlLnR5cGUgPT09ICdGb3JPZlN0YXRlbWVudCcgfHxcbiAgICBub2RlLnR5cGUgPT09ICdGb3JJblN0YXRlbWVudCdcbiAgKSB7XG4gICAgcmV0dXJuIGNvbnRhaW5zQXdhaXRFeHByZXNzaW9uKG5vZGUuYm9keSk7XG4gIH1cblxuICAvLyBDaGVjayBhc3NpZ25tZW50IGV4cHJlc3Npb25zIChlLmcuLCByZXN1bHQgPSBhd2FpdCBkb1dvcmsoKSlcbiAgaWYgKG5vZGUudHlwZSA9PT0gJ0Fzc2lnbm1lbnRFeHByZXNzaW9uJykge1xuICAgIHJldHVybiBjb250YWluc0F3YWl0RXhwcmVzc2lvbihub2RlLnJpZ2h0KTtcbiAgfVxuXG4gIC8vIENoZWNrIGNhbGwgZXhwcmVzc2lvbnMgKGZvciBhd2FpdCBpbiBhcmd1bWVudHMpXG4gIGlmIChub2RlLnR5cGUgPT09ICdDYWxsRXhwcmVzc2lvbicpIHtcbiAgICBpZiAobm9kZS5hcmd1bWVudHMpIHtcbiAgICAgIHJldHVybiBub2RlLmFyZ3VtZW50cy5zb21lKChhcmc6IGFueSkgPT5cbiAgICAgICAgY29udGFpbnNBd2FpdEV4cHJlc3Npb24oYXJnLmV4cHJlc3Npb24gfHwgYXJnKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQW5hbHl6ZSBhIHN0YXRlbWVudCBhbmQgZXh0cmFjdCBzdGVwIGNhbGxzIHdpdGggcHJvcGVyIENGRyBzdHJ1Y3R1cmVcbiAqL1xuZnVuY3Rpb24gYW5hbHl6ZVN0YXRlbWVudChcbiAgc3RtdDogU3RhdGVtZW50LFxuICBzdGVwRGVjbGFyYXRpb25zOiBNYXA8c3RyaW5nLCB7IHN0ZXBJZDogc3RyaW5nIH0+LFxuICBjb250ZXh0OiBBbmFseXNpc0NvbnRleHQsXG4gIGZ1bmN0aW9uTWFwOiBNYXA8c3RyaW5nLCBGdW5jdGlvbkluZm8+LFxuICB2YXJpYWJsZU1hcDogTWFwPHN0cmluZywgYW55PlxuKTogQW5hbHlzaXNSZXN1bHQge1xuICBjb25zdCBub2RlczogTWFuaWZlc3ROb2RlW10gPSBbXTtcbiAgY29uc3QgZWRnZXM6IE1hbmlmZXN0RWRnZVtdID0gW107XG4gIGxldCBlbnRyeU5vZGVJZHM6IHN0cmluZ1tdID0gW107XG4gIGxldCBleGl0Tm9kZUlkczogc3RyaW5nW10gPSBbXTtcblxuICBpZiAoc3RtdC50eXBlID09PSAnVmFyaWFibGVEZWNsYXJhdGlvbicpIHtcbiAgICBjb25zdCB2YXJEZWNsID0gc3RtdCBhcyBWYXJpYWJsZURlY2xhcmF0aW9uO1xuICAgIGZvciAoY29uc3QgZGVjbCBvZiB2YXJEZWNsLmRlY2xhcmF0aW9ucykge1xuICAgICAgaWYgKGRlY2wuaW5pdCkge1xuICAgICAgICAvLyBUcmFjayB3ZWJob29rL2hvb2sgdmFyaWFibGUgYXNzaWdubWVudHM6IGNvbnN0IHdlYmhvb2sgPSBjcmVhdGVXZWJob29rKClcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGRlY2wuaWQudHlwZSA9PT0gJ0lkZW50aWZpZXInICYmXG4gICAgICAgICAgZGVjbC5pbml0LnR5cGUgPT09ICdDYWxsRXhwcmVzc2lvbicgJiZcbiAgICAgICAgICAoZGVjbC5pbml0IGFzIENhbGxFeHByZXNzaW9uKS5jYWxsZWUudHlwZSA9PT0gJ0lkZW50aWZpZXInXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IGZ1bmNOYW1lID0gKChkZWNsLmluaXQgYXMgQ2FsbEV4cHJlc3Npb24pLmNhbGxlZSBhcyBJZGVudGlmaWVyKVxuICAgICAgICAgICAgLnZhbHVlO1xuICAgICAgICAgIGlmIChmdW5jTmFtZSA9PT0gJ2NyZWF0ZVdlYmhvb2snIHx8IGZ1bmNOYW1lID09PSAnY3JlYXRlSG9vaycpIHtcbiAgICAgICAgICAgIGNvbnRleHQud2ViaG9va1ZhcmlhYmxlcy5hZGQoKGRlY2wuaWQgYXMgSWRlbnRpZmllcikudmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRyYWNrIGVtcHR5IGFycmF5IGFzc2lnbm1lbnRzIGZvciBQcm9taXNlLmFsbCBwYXR0ZXJuOiBjb25zdCBwcm9taXNlcyA9IFtdXG4gICAgICAgIGlmIChcbiAgICAgICAgICBkZWNsLmlkLnR5cGUgPT09ICdJZGVudGlmaWVyJyAmJlxuICAgICAgICAgIGRlY2wuaW5pdC50eXBlID09PSAnQXJyYXlFeHByZXNzaW9uJ1xuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBlbGVtZW50cyA9IChkZWNsLmluaXQgYXMgYW55KS5lbGVtZW50cztcbiAgICAgICAgICAvLyBFbXB0eSBhcnJheTogZWxlbWVudHMgaXMgdW5kZWZpbmVkLCBudWxsLCBvciBlbXB0eSBhcnJheVxuICAgICAgICAgIGlmICghZWxlbWVudHMgfHwgZWxlbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBjb25zdCB2YXJOYW1lID0gKGRlY2wuaWQgYXMgSWRlbnRpZmllcikudmFsdWU7XG4gICAgICAgICAgICBjb250ZXh0LnByb21pc2VBcnJheXMuc2V0KHZhck5hbWUsIFtdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhbmFseXplRXhwcmVzc2lvbihcbiAgICAgICAgICBkZWNsLmluaXQsXG4gICAgICAgICAgc3RlcERlY2xhcmF0aW9ucyxcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIGZ1bmN0aW9uTWFwLFxuICAgICAgICAgIHZhcmlhYmxlTWFwXG4gICAgICAgICk7XG4gICAgICAgIG5vZGVzLnB1c2goLi4ucmVzdWx0Lm5vZGVzKTtcbiAgICAgICAgZWRnZXMucHVzaCguLi5yZXN1bHQuZWRnZXMpO1xuICAgICAgICBpZiAoZW50cnlOb2RlSWRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGVudHJ5Tm9kZUlkcyA9IHJlc3VsdC5lbnRyeU5vZGVJZHM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9yIChjb25zdCBwcmV2SWQgb2YgZXhpdE5vZGVJZHMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZW50cnlJZCBvZiByZXN1bHQuZW50cnlOb2RlSWRzKSB7XG4gICAgICAgICAgICAgIGVkZ2VzLnB1c2goe1xuICAgICAgICAgICAgICAgIGlkOiBgZV8ke3ByZXZJZH1fJHtlbnRyeUlkfWAsXG4gICAgICAgICAgICAgICAgc291cmNlOiBwcmV2SWQsXG4gICAgICAgICAgICAgICAgdGFyZ2V0OiBlbnRyeUlkLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdkZWZhdWx0JyxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGV4aXROb2RlSWRzID0gcmVzdWx0LmV4aXROb2RlSWRzO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChzdG10LnR5cGUgPT09ICdFeHByZXNzaW9uU3RhdGVtZW50Jykge1xuICAgIGNvbnN0IHJlc3VsdCA9IGFuYWx5emVFeHByZXNzaW9uKFxuICAgICAgc3RtdC5leHByZXNzaW9uLFxuICAgICAgc3RlcERlY2xhcmF0aW9ucyxcbiAgICAgIGNvbnRleHQsXG4gICAgICBmdW5jdGlvbk1hcCxcbiAgICAgIHZhcmlhYmxlTWFwXG4gICAgKTtcbiAgICBub2Rlcy5wdXNoKC4uLnJlc3VsdC5ub2Rlcyk7XG4gICAgZWRnZXMucHVzaCguLi5yZXN1bHQuZWRnZXMpO1xuICAgIGVudHJ5Tm9kZUlkcyA9IHJlc3VsdC5lbnRyeU5vZGVJZHM7XG4gICAgZXhpdE5vZGVJZHMgPSByZXN1bHQuZXhpdE5vZGVJZHM7XG4gIH1cblxuICBpZiAoc3RtdC50eXBlID09PSAnSWZTdGF0ZW1lbnQnKSB7XG4gICAgY29uc3Qgc2F2ZWRDb25kaXRpb25hbCA9IGNvbnRleHQuaW5Db25kaXRpb25hbDtcbiAgICBjb25zdCBjb25kaXRpb25hbElkID0gYGNvbmRfJHtjb250ZXh0LmNvbmRpdGlvbmFsQ291bnRlcisrfWA7XG4gICAgY29udGV4dC5pbkNvbmRpdGlvbmFsID0gY29uZGl0aW9uYWxJZDtcblxuICAgIC8vIEFuYWx5emUgdGhlIFwidGhlblwiIGJyYW5jaCBmaXJzdCB0byBjaGVjayBpZiBpdCBoYXMgYW55IHdvcmtmbG93LXJlbGV2YW50IG5vZGVzXG4gICAgbGV0IHRoZW5SZXN1bHQ6IEFuYWx5c2lzUmVzdWx0O1xuICAgIGlmIChzdG10LmNvbnNlcXVlbnQudHlwZSA9PT0gJ0Jsb2NrU3RhdGVtZW50Jykge1xuICAgICAgdGhlblJlc3VsdCA9IGFuYWx5emVCbG9jayhcbiAgICAgICAgc3RtdC5jb25zZXF1ZW50LnN0bXRzLFxuICAgICAgICBzdGVwRGVjbGFyYXRpb25zLFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICBmdW5jdGlvbk1hcCxcbiAgICAgICAgdmFyaWFibGVNYXBcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEhhbmRsZSBzaW5nbGUtc3RhdGVtZW50IGNvbnNlcXVlbnQgKG5vIGJyYWNlcylcbiAgICAgIHRoZW5SZXN1bHQgPSBhbmFseXplU3RhdGVtZW50KFxuICAgICAgICBzdG10LmNvbnNlcXVlbnQsXG4gICAgICAgIHN0ZXBEZWNsYXJhdGlvbnMsXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIGZ1bmN0aW9uTWFwLFxuICAgICAgICB2YXJpYWJsZU1hcFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBBbmFseXplIHRoZSBcImVsc2VcIiBicmFuY2ggaWYgaXQgZXhpc3RzXG4gICAgbGV0IGVsc2VSZXN1bHQ6IEFuYWx5c2lzUmVzdWx0IHwgbnVsbCA9IG51bGw7XG4gICAgaWYgKHN0bXQuYWx0ZXJuYXRlKSB7XG4gICAgICBpZiAoc3RtdC5hbHRlcm5hdGUudHlwZSA9PT0gJ0Jsb2NrU3RhdGVtZW50Jykge1xuICAgICAgICBlbHNlUmVzdWx0ID0gYW5hbHl6ZUJsb2NrKFxuICAgICAgICAgIHN0bXQuYWx0ZXJuYXRlLnN0bXRzLFxuICAgICAgICAgIHN0ZXBEZWNsYXJhdGlvbnMsXG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBmdW5jdGlvbk1hcCxcbiAgICAgICAgICB2YXJpYWJsZU1hcFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSGFuZGxlIHNpbmdsZS1zdGF0ZW1lbnQgYWx0ZXJuYXRlIChubyBicmFjZXMpIG9yIGVsc2UtaWZcbiAgICAgICAgZWxzZVJlc3VsdCA9IGFuYWx5emVTdGF0ZW1lbnQoXG4gICAgICAgICAgc3RtdC5hbHRlcm5hdGUsXG4gICAgICAgICAgc3RlcERlY2xhcmF0aW9ucyxcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIGZ1bmN0aW9uTWFwLFxuICAgICAgICAgIHZhcmlhYmxlTWFwXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gT25seSBjcmVhdGUgY29uZGl0aW9uYWwgbm9kZSBpZiBhdCBsZWFzdCBvbmUgYnJhbmNoIGhhcyB3b3JrZmxvdy1yZWxldmFudCBub2Rlcy5cbiAgICAvLyBUaGlzIGF2b2lkcyBjcmVhdGluZyBub2RlcyBmb3IgcnVudGltZSBhc3NlcnRpb25zIGxpa2UgYGlmICghY3R4KSB7IHRocm93IC4uLiB9YFxuICAgIGNvbnN0IHRoZW5IYXNOb2RlcyA9IHRoZW5SZXN1bHQubm9kZXMubGVuZ3RoID4gMDtcbiAgICBjb25zdCBlbHNlSGFzTm9kZXMgPSBlbHNlUmVzdWx0ID8gZWxzZVJlc3VsdC5ub2Rlcy5sZW5ndGggPiAwIDogZmFsc2U7XG5cbiAgICBpZiAodGhlbkhhc05vZGVzIHx8IGVsc2VIYXNOb2Rlcykge1xuICAgICAgLy8gQ3JlYXRlIHRoZSBjb25kaXRpb25hbCBkZWNpc2lvbiBub2RlXG4gICAgICBjb25zdCBjb25kaXRpb25UZXh0ID0gZ2V0Q29uZGl0aW9uVGV4dChzdG10LnRlc3QpO1xuICAgICAgY29uc3QgY29uZE5vZGVJZCA9IGAke2NvbmRpdGlvbmFsSWR9X25vZGVgO1xuICAgICAgY29uc3QgY29uZE1ldGFkYXRhOiBOb2RlTWV0YWRhdGEgPSB7fTtcbiAgICAgIGlmIChjb250ZXh0LmluTG9vcCkge1xuICAgICAgICBjb25kTWV0YWRhdGEubG9vcElkID0gY29udGV4dC5pbkxvb3A7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbmROb2RlOiBNYW5pZmVzdE5vZGUgPSB7XG4gICAgICAgIGlkOiBjb25kTm9kZUlkLFxuICAgICAgICB0eXBlOiAnY29uZGl0aW9uYWwnLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgbGFiZWw6IGNvbmRpdGlvblRleHQsXG4gICAgICAgICAgbm9kZUtpbmQ6ICdjb25kaXRpb25hbCcsXG4gICAgICAgIH0sXG4gICAgICAgIG1ldGFkYXRhOlxuICAgICAgICAgIE9iamVjdC5rZXlzKGNvbmRNZXRhZGF0YSkubGVuZ3RoID4gMCA/IGNvbmRNZXRhZGF0YSA6IHVuZGVmaW5lZCxcbiAgICAgIH07XG4gICAgICBub2Rlcy5wdXNoKGNvbmROb2RlKTtcblxuICAgICAgLy8gVGhlIGNvbmRpdGlvbmFsIG5vZGUgaXMgdGhlIGVudHJ5IHBvaW50XG4gICAgICBlbnRyeU5vZGVJZHMucHVzaChjb25kTm9kZUlkKTtcblxuICAgICAgZm9yIChjb25zdCBub2RlIG9mIHRoZW5SZXN1bHQubm9kZXMpIHtcbiAgICAgICAgaWYgKCFub2RlLm1ldGFkYXRhKSBub2RlLm1ldGFkYXRhID0ge307XG4gICAgICAgIG5vZGUubWV0YWRhdGEuY29uZGl0aW9uYWxJZCA9IGNvbmRpdGlvbmFsSWQ7XG4gICAgICAgIG5vZGUubWV0YWRhdGEuY29uZGl0aW9uYWxCcmFuY2ggPSAnVGhlbic7XG4gICAgICB9XG5cbiAgICAgIG5vZGVzLnB1c2goLi4udGhlblJlc3VsdC5ub2Rlcyk7XG4gICAgICBlZGdlcy5wdXNoKC4uLnRoZW5SZXN1bHQuZWRnZXMpO1xuXG4gICAgICAvLyBDcmVhdGUgZWRnZSBmcm9tIGNvbmRpdGlvbmFsIG5vZGUgdG8gXCJ0aGVuXCIgYnJhbmNoIHdpdGggXCJ0cnVlXCIgbGFiZWxcbiAgICAgIGZvciAoY29uc3QgdGhlbkVudHJ5SWQgb2YgdGhlblJlc3VsdC5lbnRyeU5vZGVJZHMpIHtcbiAgICAgICAgZWRnZXMucHVzaCh7XG4gICAgICAgICAgaWQ6IGBlXyR7Y29uZE5vZGVJZH1fJHt0aGVuRW50cnlJZH1fdHJ1ZWAsXG4gICAgICAgICAgc291cmNlOiBjb25kTm9kZUlkLFxuICAgICAgICAgIHRhcmdldDogdGhlbkVudHJ5SWQsXG4gICAgICAgICAgdHlwZTogJ2NvbmRpdGlvbmFsJyxcbiAgICAgICAgICBsYWJlbDogJ3RydWUnLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGV4aXROb2RlSWRzLnB1c2goLi4udGhlblJlc3VsdC5leGl0Tm9kZUlkcyk7XG5cbiAgICAgIGlmIChlbHNlUmVzdWx0KSB7XG4gICAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBlbHNlUmVzdWx0Lm5vZGVzKSB7XG4gICAgICAgICAgaWYgKCFub2RlLm1ldGFkYXRhKSBub2RlLm1ldGFkYXRhID0ge307XG4gICAgICAgICAgbm9kZS5tZXRhZGF0YS5jb25kaXRpb25hbElkID0gY29uZGl0aW9uYWxJZDtcbiAgICAgICAgICBub2RlLm1ldGFkYXRhLmNvbmRpdGlvbmFsQnJhbmNoID0gJ0Vsc2UnO1xuICAgICAgICB9XG5cbiAgICAgICAgbm9kZXMucHVzaCguLi5lbHNlUmVzdWx0Lm5vZGVzKTtcbiAgICAgICAgZWRnZXMucHVzaCguLi5lbHNlUmVzdWx0LmVkZ2VzKTtcblxuICAgICAgICAvLyBDcmVhdGUgZWRnZSBmcm9tIGNvbmRpdGlvbmFsIG5vZGUgdG8gXCJlbHNlXCIgYnJhbmNoIHdpdGggXCJmYWxzZVwiIGxhYmVsXG4gICAgICAgIGZvciAoY29uc3QgZWxzZUVudHJ5SWQgb2YgZWxzZVJlc3VsdC5lbnRyeU5vZGVJZHMpIHtcbiAgICAgICAgICBlZGdlcy5wdXNoKHtcbiAgICAgICAgICAgIGlkOiBgZV8ke2NvbmROb2RlSWR9XyR7ZWxzZUVudHJ5SWR9X2ZhbHNlYCxcbiAgICAgICAgICAgIHNvdXJjZTogY29uZE5vZGVJZCxcbiAgICAgICAgICAgIHRhcmdldDogZWxzZUVudHJ5SWQsXG4gICAgICAgICAgICB0eXBlOiAnY29uZGl0aW9uYWwnLFxuICAgICAgICAgICAgbGFiZWw6ICdmYWxzZScsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZXhpdE5vZGVJZHMucHVzaCguLi5lbHNlUmVzdWx0LmV4aXROb2RlSWRzKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gTm90ZTogV2hlbiB0aGVyZSdzIG5vIGVsc2UgYnJhbmNoLCB3ZSBkb24ndCBhZGQgdGhlIGNvbmRpdGlvbmFsIG5vZGUgYXMgYW4gZXhpdC5cbiAgICAvLyBUaGUgdGhlbi1icmFuY2ggZXhpdHMgYXJlIHRoZSBvbmx5IGV4aXRzLiBUaGlzIG1lYW5zIHRoZSBncmFwaCBzaG93cyB0aGUgXCJ0cnVlXCIgcGF0aDtcbiAgICAvLyB0aGUgXCJmYWxzZVwiIGNhc2UgKHdoZW4gY29uZGl0aW9uIGlzIGZhbHNlIGFuZCB0aGVyZSdzIG5vIGVsc2UpIGltcGxpY2l0bHkgbWVhbnNcbiAgICAvLyBleGVjdXRpb24gY29udGludWVzIHdpdGggbm8gc3RlcHMgZnJvbSB0aGlzIGlmIHN0YXRlbWVudC5cbiAgICAvL1xuICAgIC8vIFdoZW4gYm90aCBicmFuY2hlcyBoYXZlIG5vIHdvcmtmbG93LXJlbGV2YW50IG5vZGVzIChlLmcuLCBydW50aW1lIGFzc2VydGlvbnMgbGlrZVxuICAgIC8vIGBpZiAoIWN0eCkgeyB0aHJvdyAuLi4gfWApLCB3ZSBza2lwIGNyZWF0aW5nIHRoZSBjb25kaXRpb25hbCBub2RlIGVudGlyZWx5LlxuXG4gICAgY29udGV4dC5pbkNvbmRpdGlvbmFsID0gc2F2ZWRDb25kaXRpb25hbDtcbiAgfVxuXG4gIGlmIChzdG10LnR5cGUgPT09ICdXaGlsZVN0YXRlbWVudCcgfHwgc3RtdC50eXBlID09PSAnRm9yU3RhdGVtZW50Jykge1xuICAgIGNvbnN0IGJvZHkgPVxuICAgICAgc3RtdC50eXBlID09PSAnV2hpbGVTdGF0ZW1lbnQnID8gc3RtdC5ib2R5IDogKHN0bXQgYXMgYW55KS5ib2R5O1xuXG4gICAgLy8gT25seSB0cmVhdCBhcyBhIGxvb3AgaWYgdGhlIGJvZHkgY29udGFpbnMgYXdhaXQgZXhwcmVzc2lvbnNcbiAgICAvLyBPdGhlcndpc2UgaXQncyBsaWtlbHkgYSBcImNvbGxlY3QgcHJvbWlzZXNcIiBwYXR0ZXJuIChmb3IgcGFyYWxsZWwgZXhlY3V0aW9uKVxuICAgIGNvbnN0IGhhc0F3YWl0ID0gY29udGFpbnNBd2FpdEV4cHJlc3Npb24oYm9keSk7XG5cbiAgICBjb25zdCBsb29wSWQgPSBoYXNBd2FpdCA/IGBsb29wXyR7Y29udGV4dC5sb29wQ291bnRlcisrfWAgOiB1bmRlZmluZWQ7XG4gICAgY29uc3Qgc2F2ZWRMb29wID0gY29udGV4dC5pbkxvb3A7XG4gICAgaWYgKGxvb3BJZCkge1xuICAgICAgY29udGV4dC5pbkxvb3AgPSBsb29wSWQ7XG4gICAgfVxuXG4gICAgaWYgKGJvZHkudHlwZSA9PT0gJ0Jsb2NrU3RhdGVtZW50Jykge1xuICAgICAgY29uc3QgbG9vcFJlc3VsdCA9IGFuYWx5emVCbG9jayhcbiAgICAgICAgYm9keS5zdG10cyxcbiAgICAgICAgc3RlcERlY2xhcmF0aW9ucyxcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgZnVuY3Rpb25NYXAsXG4gICAgICAgIHZhcmlhYmxlTWFwXG4gICAgICApO1xuXG4gICAgICAvLyBPbmx5IGFkZCBsb29wIG1ldGFkYXRhIGlmIHRoaXMgaXMgdHJ1bHkgYSBsb29waW5nIHBhdHRlcm5cbiAgICAgIGlmIChsb29wSWQpIHtcbiAgICAgICAgZm9yIChjb25zdCBub2RlIG9mIGxvb3BSZXN1bHQubm9kZXMpIHtcbiAgICAgICAgICBpZiAoIW5vZGUubWV0YWRhdGEpIG5vZGUubWV0YWRhdGEgPSB7fTtcbiAgICAgICAgICBub2RlLm1ldGFkYXRhLmxvb3BJZCA9IGxvb3BJZDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBub2Rlcy5wdXNoKC4uLmxvb3BSZXN1bHQubm9kZXMpO1xuICAgICAgZWRnZXMucHVzaCguLi5sb29wUmVzdWx0LmVkZ2VzKTtcbiAgICAgIGVudHJ5Tm9kZUlkcyA9IGxvb3BSZXN1bHQuZW50cnlOb2RlSWRzO1xuICAgICAgZXhpdE5vZGVJZHMgPSBsb29wUmVzdWx0LmV4aXROb2RlSWRzO1xuXG4gICAgICAvLyBPbmx5IGNyZWF0ZSBsb29wLWJhY2sgZWRnZXMgaWYgdGhpcyBpcyB0cnVseSBhIGxvb3BpbmcgcGF0dGVyblxuICAgICAgaWYgKGxvb3BJZCkge1xuICAgICAgICBmb3IgKGNvbnN0IGV4aXRJZCBvZiBsb29wUmVzdWx0LmV4aXROb2RlSWRzKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBlbnRyeUlkIG9mIGxvb3BSZXN1bHQuZW50cnlOb2RlSWRzKSB7XG4gICAgICAgICAgICBlZGdlcy5wdXNoKHtcbiAgICAgICAgICAgICAgaWQ6IGBlXyR7ZXhpdElkfV9iYWNrXyR7ZW50cnlJZH1gLFxuICAgICAgICAgICAgICBzb3VyY2U6IGV4aXRJZCxcbiAgICAgICAgICAgICAgdGFyZ2V0OiBlbnRyeUlkLFxuICAgICAgICAgICAgICB0eXBlOiAnbG9vcCcsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSGFuZGxlIHNpbmdsZS1zdGF0ZW1lbnQgYm9keSAobm8gYnJhY2VzKVxuICAgICAgY29uc3QgbG9vcFJlc3VsdCA9IGFuYWx5emVTdGF0ZW1lbnQoXG4gICAgICAgIGJvZHksXG4gICAgICAgIHN0ZXBEZWNsYXJhdGlvbnMsXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIGZ1bmN0aW9uTWFwLFxuICAgICAgICB2YXJpYWJsZU1hcFxuICAgICAgKTtcblxuICAgICAgLy8gT25seSBhZGQgbG9vcCBtZXRhZGF0YSBpZiB0aGlzIGlzIHRydWx5IGEgbG9vcGluZyBwYXR0ZXJuXG4gICAgICBpZiAobG9vcElkKSB7XG4gICAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBsb29wUmVzdWx0Lm5vZGVzKSB7XG4gICAgICAgICAgaWYgKCFub2RlLm1ldGFkYXRhKSBub2RlLm1ldGFkYXRhID0ge307XG4gICAgICAgICAgbm9kZS5tZXRhZGF0YS5sb29wSWQgPSBsb29wSWQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbm9kZXMucHVzaCguLi5sb29wUmVzdWx0Lm5vZGVzKTtcbiAgICAgIGVkZ2VzLnB1c2goLi4ubG9vcFJlc3VsdC5lZGdlcyk7XG4gICAgICBlbnRyeU5vZGVJZHMgPSBsb29wUmVzdWx0LmVudHJ5Tm9kZUlkcztcbiAgICAgIGV4aXROb2RlSWRzID0gbG9vcFJlc3VsdC5leGl0Tm9kZUlkcztcblxuICAgICAgLy8gT25seSBjcmVhdGUgbG9vcC1iYWNrIGVkZ2VzIGlmIHRoaXMgaXMgdHJ1bHkgYSBsb29waW5nIHBhdHRlcm5cbiAgICAgIGlmIChsb29wSWQpIHtcbiAgICAgICAgZm9yIChjb25zdCBleGl0SWQgb2YgbG9vcFJlc3VsdC5leGl0Tm9kZUlkcykge1xuICAgICAgICAgIGZvciAoY29uc3QgZW50cnlJZCBvZiBsb29wUmVzdWx0LmVudHJ5Tm9kZUlkcykge1xuICAgICAgICAgICAgZWRnZXMucHVzaCh7XG4gICAgICAgICAgICAgIGlkOiBgZV8ke2V4aXRJZH1fYmFja18ke2VudHJ5SWR9YCxcbiAgICAgICAgICAgICAgc291cmNlOiBleGl0SWQsXG4gICAgICAgICAgICAgIHRhcmdldDogZW50cnlJZCxcbiAgICAgICAgICAgICAgdHlwZTogJ2xvb3AnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29udGV4dC5pbkxvb3AgPSBzYXZlZExvb3A7XG4gIH1cblxuICBpZiAoc3RtdC50eXBlID09PSAnRm9yT2ZTdGF0ZW1lbnQnKSB7XG4gICAgY29uc3QgbG9vcElkID0gYGxvb3BfJHtjb250ZXh0Lmxvb3BDb3VudGVyKyt9YDtcbiAgICBjb25zdCBzYXZlZExvb3AgPSBjb250ZXh0LmluTG9vcDtcbiAgICBjb250ZXh0LmluTG9vcCA9IGxvb3BJZDtcblxuICAgIGNvbnN0IGlzQXdhaXQgPSAoc3RtdCBhcyBhbnkpLmlzQXdhaXQgfHwgKHN0bXQgYXMgYW55KS5hd2FpdDtcbiAgICBjb25zdCBib2R5ID0gKHN0bXQgYXMgYW55KS5ib2R5O1xuXG4gICAgaWYgKGJvZHkudHlwZSA9PT0gJ0Jsb2NrU3RhdGVtZW50Jykge1xuICAgICAgY29uc3QgbG9vcFJlc3VsdCA9IGFuYWx5emVCbG9jayhcbiAgICAgICAgYm9keS5zdG10cyxcbiAgICAgICAgc3RlcERlY2xhcmF0aW9ucyxcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgZnVuY3Rpb25NYXAsXG4gICAgICAgIHZhcmlhYmxlTWFwXG4gICAgICApO1xuXG4gICAgICBmb3IgKGNvbnN0IG5vZGUgb2YgbG9vcFJlc3VsdC5ub2Rlcykge1xuICAgICAgICBpZiAoIW5vZGUubWV0YWRhdGEpIG5vZGUubWV0YWRhdGEgPSB7fTtcbiAgICAgICAgbm9kZS5tZXRhZGF0YS5sb29wSWQgPSBsb29wSWQ7XG4gICAgICAgIG5vZGUubWV0YWRhdGEubG9vcElzQXdhaXQgPSBpc0F3YWl0O1xuICAgICAgfVxuXG4gICAgICBub2Rlcy5wdXNoKC4uLmxvb3BSZXN1bHQubm9kZXMpO1xuICAgICAgZWRnZXMucHVzaCguLi5sb29wUmVzdWx0LmVkZ2VzKTtcbiAgICAgIGVudHJ5Tm9kZUlkcyA9IGxvb3BSZXN1bHQuZW50cnlOb2RlSWRzO1xuICAgICAgZXhpdE5vZGVJZHMgPSBsb29wUmVzdWx0LmV4aXROb2RlSWRzO1xuXG4gICAgICBmb3IgKGNvbnN0IGV4aXRJZCBvZiBsb29wUmVzdWx0LmV4aXROb2RlSWRzKSB7XG4gICAgICAgIGZvciAoY29uc3QgZW50cnlJZCBvZiBsb29wUmVzdWx0LmVudHJ5Tm9kZUlkcykge1xuICAgICAgICAgIGVkZ2VzLnB1c2goe1xuICAgICAgICAgICAgaWQ6IGBlXyR7ZXhpdElkfV9iYWNrXyR7ZW50cnlJZH1gLFxuICAgICAgICAgICAgc291cmNlOiBleGl0SWQsXG4gICAgICAgICAgICB0YXJnZXQ6IGVudHJ5SWQsXG4gICAgICAgICAgICB0eXBlOiAnbG9vcCcsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSGFuZGxlIHNpbmdsZS1zdGF0ZW1lbnQgYm9keSAobm8gYnJhY2VzKVxuICAgICAgY29uc3QgbG9vcFJlc3VsdCA9IGFuYWx5emVTdGF0ZW1lbnQoXG4gICAgICAgIGJvZHksXG4gICAgICAgIHN0ZXBEZWNsYXJhdGlvbnMsXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIGZ1bmN0aW9uTWFwLFxuICAgICAgICB2YXJpYWJsZU1hcFxuICAgICAgKTtcblxuICAgICAgZm9yIChjb25zdCBub2RlIG9mIGxvb3BSZXN1bHQubm9kZXMpIHtcbiAgICAgICAgaWYgKCFub2RlLm1ldGFkYXRhKSBub2RlLm1ldGFkYXRhID0ge307XG4gICAgICAgIG5vZGUubWV0YWRhdGEubG9vcElkID0gbG9vcElkO1xuICAgICAgICBub2RlLm1ldGFkYXRhLmxvb3BJc0F3YWl0ID0gaXNBd2FpdDtcbiAgICAgIH1cblxuICAgICAgbm9kZXMucHVzaCguLi5sb29wUmVzdWx0Lm5vZGVzKTtcbiAgICAgIGVkZ2VzLnB1c2goLi4ubG9vcFJlc3VsdC5lZGdlcyk7XG4gICAgICBlbnRyeU5vZGVJZHMgPSBsb29wUmVzdWx0LmVudHJ5Tm9kZUlkcztcbiAgICAgIGV4aXROb2RlSWRzID0gbG9vcFJlc3VsdC5leGl0Tm9kZUlkcztcblxuICAgICAgZm9yIChjb25zdCBleGl0SWQgb2YgbG9vcFJlc3VsdC5leGl0Tm9kZUlkcykge1xuICAgICAgICBmb3IgKGNvbnN0IGVudHJ5SWQgb2YgbG9vcFJlc3VsdC5lbnRyeU5vZGVJZHMpIHtcbiAgICAgICAgICBlZGdlcy5wdXNoKHtcbiAgICAgICAgICAgIGlkOiBgZV8ke2V4aXRJZH1fYmFja18ke2VudHJ5SWR9YCxcbiAgICAgICAgICAgIHNvdXJjZTogZXhpdElkLFxuICAgICAgICAgICAgdGFyZ2V0OiBlbnRyeUlkLFxuICAgICAgICAgICAgdHlwZTogJ2xvb3AnLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29udGV4dC5pbkxvb3AgPSBzYXZlZExvb3A7XG4gIH1cblxuICAvLyBIYW5kbGUgcGxhaW4gQmxvY2tTdGF0ZW1lbnQgKGJhcmUgYmxvY2tzIGxpa2UgeyAuLi4gfSlcbiAgaWYgKHN0bXQudHlwZSA9PT0gJ0Jsb2NrU3RhdGVtZW50Jykge1xuICAgIGNvbnN0IGJsb2NrUmVzdWx0ID0gYW5hbHl6ZUJsb2NrKFxuICAgICAgKHN0bXQgYXMgQmxvY2tTdGF0ZW1lbnQpLnN0bXRzLFxuICAgICAgc3RlcERlY2xhcmF0aW9ucyxcbiAgICAgIGNvbnRleHQsXG4gICAgICBmdW5jdGlvbk1hcCxcbiAgICAgIHZhcmlhYmxlTWFwXG4gICAgKTtcbiAgICBub2Rlcy5wdXNoKC4uLmJsb2NrUmVzdWx0Lm5vZGVzKTtcbiAgICBlZGdlcy5wdXNoKC4uLmJsb2NrUmVzdWx0LmVkZ2VzKTtcbiAgICBlbnRyeU5vZGVJZHMgPSBibG9ja1Jlc3VsdC5lbnRyeU5vZGVJZHM7XG4gICAgZXhpdE5vZGVJZHMgPSBibG9ja1Jlc3VsdC5leGl0Tm9kZUlkcztcbiAgfVxuXG4gIGlmIChzdG10LnR5cGUgPT09ICdSZXR1cm5TdGF0ZW1lbnQnICYmIChzdG10IGFzIGFueSkuYXJndW1lbnQpIHtcbiAgICBjb25zdCByZXN1bHQgPSBhbmFseXplRXhwcmVzc2lvbihcbiAgICAgIChzdG10IGFzIGFueSkuYXJndW1lbnQsXG4gICAgICBzdGVwRGVjbGFyYXRpb25zLFxuICAgICAgY29udGV4dCxcbiAgICAgIGZ1bmN0aW9uTWFwLFxuICAgICAgdmFyaWFibGVNYXBcbiAgICApO1xuICAgIG5vZGVzLnB1c2goLi4ucmVzdWx0Lm5vZGVzKTtcbiAgICBlZGdlcy5wdXNoKC4uLnJlc3VsdC5lZGdlcyk7XG4gICAgZW50cnlOb2RlSWRzID0gcmVzdWx0LmVudHJ5Tm9kZUlkcztcbiAgICBleGl0Tm9kZUlkcyA9IHJlc3VsdC5leGl0Tm9kZUlkcztcbiAgfVxuXG4gIHJldHVybiB7IG5vZGVzLCBlZGdlcywgZW50cnlOb2RlSWRzLCBleGl0Tm9kZUlkcyB9O1xufVxuXG4vKipcbiAqIEFuYWx5emUgYSBibG9jayBvZiBzdGF0ZW1lbnRzIHdpdGggcHJvcGVyIHNlcXVlbnRpYWwgY2hhaW5pbmdcbiAqL1xuZnVuY3Rpb24gYW5hbHl6ZUJsb2NrKFxuICBzdG10czogU3RhdGVtZW50W10sXG4gIHN0ZXBEZWNsYXJhdGlvbnM6IE1hcDxzdHJpbmcsIHsgc3RlcElkOiBzdHJpbmcgfT4sXG4gIGNvbnRleHQ6IEFuYWx5c2lzQ29udGV4dCxcbiAgZnVuY3Rpb25NYXA6IE1hcDxzdHJpbmcsIEZ1bmN0aW9uSW5mbz4sXG4gIHZhcmlhYmxlTWFwOiBNYXA8c3RyaW5nLCBhbnk+XG4pOiBBbmFseXNpc1Jlc3VsdCB7XG4gIGNvbnN0IG5vZGVzOiBNYW5pZmVzdE5vZGVbXSA9IFtdO1xuICBjb25zdCBlZGdlczogTWFuaWZlc3RFZGdlW10gPSBbXTtcbiAgbGV0IGVudHJ5Tm9kZUlkczogc3RyaW5nW10gPSBbXTtcbiAgbGV0IGN1cnJlbnRFeGl0SWRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGZvciAoY29uc3Qgc3RtdCBvZiBzdG10cykge1xuICAgIGNvbnN0IHJlc3VsdCA9IGFuYWx5emVTdGF0ZW1lbnQoXG4gICAgICBzdG10LFxuICAgICAgc3RlcERlY2xhcmF0aW9ucyxcbiAgICAgIGNvbnRleHQsXG4gICAgICBmdW5jdGlvbk1hcCxcbiAgICAgIHZhcmlhYmxlTWFwXG4gICAgKTtcblxuICAgIGlmIChyZXN1bHQubm9kZXMubGVuZ3RoID09PSAwKSBjb250aW51ZTtcblxuICAgIG5vZGVzLnB1c2goLi4ucmVzdWx0Lm5vZGVzKTtcbiAgICBlZGdlcy5wdXNoKC4uLnJlc3VsdC5lZGdlcyk7XG5cbiAgICBpZiAoZW50cnlOb2RlSWRzLmxlbmd0aCA9PT0gMCAmJiByZXN1bHQuZW50cnlOb2RlSWRzLmxlbmd0aCA+IDApIHtcbiAgICAgIGVudHJ5Tm9kZUlkcyA9IHJlc3VsdC5lbnRyeU5vZGVJZHM7XG4gICAgfVxuXG4gICAgaWYgKGN1cnJlbnRFeGl0SWRzLmxlbmd0aCA+IDAgJiYgcmVzdWx0LmVudHJ5Tm9kZUlkcy5sZW5ndGggPiAwKSB7XG4gICAgICBmb3IgKGNvbnN0IHByZXZJZCBvZiBjdXJyZW50RXhpdElkcykge1xuICAgICAgICBmb3IgKGNvbnN0IGVudHJ5SWQgb2YgcmVzdWx0LmVudHJ5Tm9kZUlkcykge1xuICAgICAgICAgIGNvbnN0IHRhcmdldE5vZGUgPSByZXN1bHQubm9kZXMuZmluZCgobikgPT4gbi5pZCA9PT0gZW50cnlJZCk7XG4gICAgICAgICAgY29uc3QgZWRnZVR5cGUgPSB0YXJnZXROb2RlPy5tZXRhZGF0YT8ucGFyYWxsZWxHcm91cElkXG4gICAgICAgICAgICA/ICdwYXJhbGxlbCdcbiAgICAgICAgICAgIDogJ2RlZmF1bHQnO1xuICAgICAgICAgIGVkZ2VzLnB1c2goe1xuICAgICAgICAgICAgaWQ6IGBlXyR7cHJldklkfV8ke2VudHJ5SWR9YCxcbiAgICAgICAgICAgIHNvdXJjZTogcHJldklkLFxuICAgICAgICAgICAgdGFyZ2V0OiBlbnRyeUlkLFxuICAgICAgICAgICAgdHlwZTogZWRnZVR5cGUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocmVzdWx0LmV4aXROb2RlSWRzLmxlbmd0aCA+IDApIHtcbiAgICAgIGN1cnJlbnRFeGl0SWRzID0gcmVzdWx0LmV4aXROb2RlSWRzO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IG5vZGVzLCBlZGdlcywgZW50cnlOb2RlSWRzLCBleGl0Tm9kZUlkczogY3VycmVudEV4aXRJZHMgfTtcbn1cblxuLyoqXG4gKiBBbmFseXplIGFuIGV4cHJlc3Npb24gYW5kIGV4dHJhY3Qgc3RlcCBjYWxsc1xuICovXG5mdW5jdGlvbiBhbmFseXplRXhwcmVzc2lvbihcbiAgZXhwcjogRXhwcmVzc2lvbixcbiAgc3RlcERlY2xhcmF0aW9uczogTWFwPHN0cmluZywgeyBzdGVwSWQ6IHN0cmluZyB9PixcbiAgY29udGV4dDogQW5hbHlzaXNDb250ZXh0LFxuICBmdW5jdGlvbk1hcDogTWFwPHN0cmluZywgRnVuY3Rpb25JbmZvPixcbiAgdmFyaWFibGVNYXA6IE1hcDxzdHJpbmcsIGFueT4sXG4gIHZpc2l0ZWRGdW5jdGlvbnM6IFNldDxzdHJpbmc+ID0gbmV3IFNldCgpXG4pOiBBbmFseXNpc1Jlc3VsdCB7XG4gIGNvbnN0IG5vZGVzOiBNYW5pZmVzdE5vZGVbXSA9IFtdO1xuICBjb25zdCBlZGdlczogTWFuaWZlc3RFZGdlW10gPSBbXTtcbiAgY29uc3QgZW50cnlOb2RlSWRzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBleGl0Tm9kZUlkczogc3RyaW5nW10gPSBbXTtcblxuICBpZiAoZXhwci50eXBlID09PSAnQXdhaXRFeHByZXNzaW9uJykge1xuICAgIGNvbnN0IGF3YWl0ZWRFeHByID0gZXhwci5hcmd1bWVudDtcbiAgICBpZiAoYXdhaXRlZEV4cHIudHlwZSA9PT0gJ0NhbGxFeHByZXNzaW9uJykge1xuICAgICAgY29uc3QgY2FsbEV4cHIgPSBhd2FpdGVkRXhwciBhcyBDYWxsRXhwcmVzc2lvbjtcblxuICAgICAgLy8gQ2hlY2sgZm9yIFByb21pc2UuYWxsL3JhY2UvYWxsU2V0dGxlZC9hbnlcbiAgICAgIGlmIChjYWxsRXhwci5jYWxsZWUudHlwZSA9PT0gJ01lbWJlckV4cHJlc3Npb24nKSB7XG4gICAgICAgIGNvbnN0IG1lbWJlciA9IGNhbGxFeHByLmNhbGxlZSBhcyBNZW1iZXJFeHByZXNzaW9uO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgbWVtYmVyLm9iamVjdC50eXBlID09PSAnSWRlbnRpZmllcicgJiZcbiAgICAgICAgICAobWVtYmVyLm9iamVjdCBhcyBJZGVudGlmaWVyKS52YWx1ZSA9PT0gJ1Byb21pc2UnICYmXG4gICAgICAgICAgbWVtYmVyLnByb3BlcnR5LnR5cGUgPT09ICdJZGVudGlmaWVyJ1xuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBtZXRob2QgPSAobWVtYmVyLnByb3BlcnR5IGFzIElkZW50aWZpZXIpLnZhbHVlO1xuICAgICAgICAgIGlmIChbJ2FsbCcsICdyYWNlJywgJ2FsbFNldHRsZWQnLCAnYW55J10uaW5jbHVkZXMobWV0aG9kKSkge1xuICAgICAgICAgICAgY29uc3QgcGFyYWxsZWxJZCA9IGBwYXJhbGxlbF8ke2NvbnRleHQucGFyYWxsZWxDb3VudGVyKyt9YDtcblxuICAgICAgICAgICAgaWYgKGNhbGxFeHByLmFyZ3VtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGFyZyA9IGNhbGxFeHByLmFyZ3VtZW50c1swXS5leHByZXNzaW9uO1xuICAgICAgICAgICAgICBpZiAoYXJnLnR5cGUgPT09ICdBcnJheUV4cHJlc3Npb24nKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGFyZy5lbGVtZW50cykge1xuICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQ/LmV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZWxlbVJlc3VsdCA9IGFuYWx5emVFeHByZXNzaW9uKFxuICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuZXhwcmVzc2lvbixcbiAgICAgICAgICAgICAgICAgICAgICBzdGVwRGVjbGFyYXRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25NYXAsXG4gICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVNYXAsXG4gICAgICAgICAgICAgICAgICAgICAgdmlzaXRlZEZ1bmN0aW9uc1xuICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBlbGVtUmVzdWx0Lm5vZGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLm1ldGFkYXRhKSBub2RlLm1ldGFkYXRhID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgbm9kZS5tZXRhZGF0YS5wYXJhbGxlbEdyb3VwSWQgPSBwYXJhbGxlbElkO1xuICAgICAgICAgICAgICAgICAgICAgIG5vZGUubWV0YWRhdGEucGFyYWxsZWxNZXRob2QgPSBtZXRob2Q7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQuaW5Mb29wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLm1ldGFkYXRhLmxvb3BJZCA9IGNvbnRleHQuaW5Mb29wO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIG5vZGVzLnB1c2goLi4uZWxlbVJlc3VsdC5ub2Rlcyk7XG4gICAgICAgICAgICAgICAgICAgIGVkZ2VzLnB1c2goLi4uZWxlbVJlc3VsdC5lZGdlcyk7XG4gICAgICAgICAgICAgICAgICAgIGVudHJ5Tm9kZUlkcy5wdXNoKC4uLmVsZW1SZXN1bHQuZW50cnlOb2RlSWRzKTtcbiAgICAgICAgICAgICAgICAgICAgZXhpdE5vZGVJZHMucHVzaCguLi5lbGVtUmVzdWx0LmV4aXROb2RlSWRzKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgYXJnLnR5cGUgPT09ICdJZGVudGlmaWVyJyAmJlxuICAgICAgICAgICAgICAgIGNvbnRleHQucHJvbWlzZUFycmF5cy5oYXMoKGFyZyBhcyBJZGVudGlmaWVyKS52YWx1ZSlcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgLy8gSGFuZGxlIFByb21pc2UuYWxsKHZhcmlhYmxlTmFtZSkgd2hlcmUgdmFyaWFibGUgd2FzIGJ1aWx0IHZpYSBwdXNoKClcbiAgICAgICAgICAgICAgICBjb25zdCBhcnJheU5hbWUgPSAoYXJnIGFzIElkZW50aWZpZXIpLnZhbHVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRyYWNrZWROb2RlcyA9IGNvbnRleHQucHJvbWlzZUFycmF5cy5nZXQoYXJyYXlOYW1lKTtcbiAgICAgICAgICAgICAgICAvLyBBcHBseSBwYXJhbGxlbEdyb3VwSWQgdG8gYWxsIG5vZGVzIHRoYXQgd2VyZSBwdXNoZWQgdG8gdGhpcyBhcnJheVxuICAgICAgICAgICAgICAgIGlmICh0cmFja2VkTm9kZXMgJiYgdHJhY2tlZE5vZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdHJhY2tlZE5vZGUgb2YgdHJhY2tlZE5vZGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdHJhY2tlZE5vZGUubWV0YWRhdGEpIHRyYWNrZWROb2RlLm1ldGFkYXRhID0ge307XG4gICAgICAgICAgICAgICAgICAgIHRyYWNrZWROb2RlLm1ldGFkYXRhLnBhcmFsbGVsR3JvdXBJZCA9IHBhcmFsbGVsSWQ7XG4gICAgICAgICAgICAgICAgICAgIHRyYWNrZWROb2RlLm1ldGFkYXRhLnBhcmFsbGVsTWV0aG9kID0gbWV0aG9kO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5pbkxvb3ApIHtcbiAgICAgICAgICAgICAgICAgICAgICB0cmFja2VkTm9kZS5tZXRhZGF0YS5sb29wSWQgPSBjb250ZXh0LmluTG9vcDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBSZXR1cm4gdHJhY2tlZCBub2RlIElEcyBmb3IgcHJvcGVyIGVkZ2UgY29ubmVjdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgZW50cnlOb2RlSWRzLnB1c2godHJhY2tlZE5vZGUuaWQpO1xuICAgICAgICAgICAgICAgICAgICBleGl0Tm9kZUlkcy5wdXNoKHRyYWNrZWROb2RlLmlkKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gSGFuZGxlIG5vbi1hcnJheSBhcmd1bWVudHMgbGlrZSBhcnJheS5tYXAoc3RlcEZuKVxuICAgICAgICAgICAgICAgIGNvbnN0IGFyZ1Jlc3VsdCA9IGFuYWx5emVFeHByZXNzaW9uKFxuICAgICAgICAgICAgICAgICAgYXJnLFxuICAgICAgICAgICAgICAgICAgc3RlcERlY2xhcmF0aW9ucyxcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgICAgICAgICBmdW5jdGlvbk1hcCxcbiAgICAgICAgICAgICAgICAgIHZhcmlhYmxlTWFwLFxuICAgICAgICAgICAgICAgICAgdmlzaXRlZEZ1bmN0aW9uc1xuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG5vZGUgb2YgYXJnUmVzdWx0Lm5vZGVzKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoIW5vZGUubWV0YWRhdGEpIG5vZGUubWV0YWRhdGEgPSB7fTtcbiAgICAgICAgICAgICAgICAgIG5vZGUubWV0YWRhdGEucGFyYWxsZWxHcm91cElkID0gcGFyYWxsZWxJZDtcbiAgICAgICAgICAgICAgICAgIG5vZGUubWV0YWRhdGEucGFyYWxsZWxNZXRob2QgPSBtZXRob2Q7XG4gICAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5pbkxvb3ApIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5tZXRhZGF0YS5sb29wSWQgPSBjb250ZXh0LmluTG9vcDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBub2Rlcy5wdXNoKC4uLmFyZ1Jlc3VsdC5ub2Rlcyk7XG4gICAgICAgICAgICAgICAgZWRnZXMucHVzaCguLi5hcmdSZXN1bHQuZWRnZXMpO1xuICAgICAgICAgICAgICAgIGVudHJ5Tm9kZUlkcy5wdXNoKC4uLmFyZ1Jlc3VsdC5lbnRyeU5vZGVJZHMpO1xuICAgICAgICAgICAgICAgIGV4aXROb2RlSWRzLnB1c2goLi4uYXJnUmVzdWx0LmV4aXROb2RlSWRzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4geyBub2RlcywgZWRnZXMsIGVudHJ5Tm9kZUlkcywgZXhpdE5vZGVJZHMgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gUmVndWxhciBjYWxsIC0gY2hlY2sgaWYgaXQncyBhIHN0ZXAsIHdvcmtmbG93IHByaW1pdGl2ZSwgb3IgaGVscGVyIGZ1bmN0aW9uXG4gICAgICBpZiAoY2FsbEV4cHIuY2FsbGVlLnR5cGUgPT09ICdJZGVudGlmaWVyJykge1xuICAgICAgICBjb25zdCBmdW5jTmFtZSA9IChjYWxsRXhwci5jYWxsZWUgYXMgSWRlbnRpZmllcikudmFsdWU7XG4gICAgICAgIGNvbnN0IHN0ZXBJbmZvID0gc3RlcERlY2xhcmF0aW9ucy5nZXQoZnVuY05hbWUpO1xuXG4gICAgICAgIGlmIChzdGVwSW5mbykge1xuICAgICAgICAgIGNvbnN0IG5vZGVJZCA9IGBub2RlXyR7Y29udGV4dC5ub2RlQ291bnRlcisrfWA7XG4gICAgICAgICAgY29uc3QgbWV0YWRhdGE6IE5vZGVNZXRhZGF0YSA9IHt9O1xuXG4gICAgICAgICAgaWYgKGNvbnRleHQuaW5Mb29wKSB7XG4gICAgICAgICAgICBtZXRhZGF0YS5sb29wSWQgPSBjb250ZXh0LmluTG9vcDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNvbnRleHQuaW5Db25kaXRpb25hbCkge1xuICAgICAgICAgICAgbWV0YWRhdGEuY29uZGl0aW9uYWxJZCA9IGNvbnRleHQuaW5Db25kaXRpb25hbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBub2RlOiBNYW5pZmVzdE5vZGUgPSB7XG4gICAgICAgICAgICBpZDogbm9kZUlkLFxuICAgICAgICAgICAgdHlwZTogJ3N0ZXAnLFxuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICBsYWJlbDogZ2V0T3JpZ2luYWxTdGVwTmFtZShzdGVwSW5mby5zdGVwSWQsIGZ1bmNOYW1lKSxcbiAgICAgICAgICAgICAgbm9kZUtpbmQ6ICdzdGVwJyxcbiAgICAgICAgICAgICAgc3RlcElkOiBzdGVwSW5mby5zdGVwSWQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbWV0YWRhdGE6IE9iamVjdC5rZXlzKG1ldGFkYXRhKS5sZW5ndGggPiAwID8gbWV0YWRhdGEgOiB1bmRlZmluZWQsXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIG5vZGVzLnB1c2gobm9kZSk7XG4gICAgICAgICAgZW50cnlOb2RlSWRzLnB1c2gobm9kZUlkKTtcbiAgICAgICAgICBleGl0Tm9kZUlkcy5wdXNoKG5vZGVJZCk7XG4gICAgICAgIH0gZWxzZSBpZiAoV09SS0ZMT1dfUFJJTUlUSVZFUy5oYXMoZnVuY05hbWUpKSB7XG4gICAgICAgICAgLy8gSGFuZGxlIHdvcmtmbG93IHByaW1pdGl2ZXMgbGlrZSBzbGVlcFxuICAgICAgICAgIGNvbnN0IG5vZGVJZCA9IGBub2RlXyR7Y29udGV4dC5ub2RlQ291bnRlcisrfWA7XG4gICAgICAgICAgY29uc3QgbWV0YWRhdGE6IE5vZGVNZXRhZGF0YSA9IHt9O1xuXG4gICAgICAgICAgaWYgKGNvbnRleHQuaW5Mb29wKSB7XG4gICAgICAgICAgICBtZXRhZGF0YS5sb29wSWQgPSBjb250ZXh0LmluTG9vcDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNvbnRleHQuaW5Db25kaXRpb25hbCkge1xuICAgICAgICAgICAgbWV0YWRhdGEuY29uZGl0aW9uYWxJZCA9IGNvbnRleHQuaW5Db25kaXRpb25hbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBub2RlOiBNYW5pZmVzdE5vZGUgPSB7XG4gICAgICAgICAgICBpZDogbm9kZUlkLFxuICAgICAgICAgICAgdHlwZTogJ3ByaW1pdGl2ZScsXG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgIGxhYmVsOiBmdW5jTmFtZSxcbiAgICAgICAgICAgICAgbm9kZUtpbmQ6ICdwcmltaXRpdmUnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1ldGFkYXRhOiBPYmplY3Qua2V5cyhtZXRhZGF0YSkubGVuZ3RoID4gMCA/IG1ldGFkYXRhIDogdW5kZWZpbmVkLFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBub2Rlcy5wdXNoKG5vZGUpO1xuICAgICAgICAgIGVudHJ5Tm9kZUlkcy5wdXNoKG5vZGVJZCk7XG4gICAgICAgICAgZXhpdE5vZGVJZHMucHVzaChub2RlSWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHRyYW5zaXRpdmVSZXN1bHQgPSBhbmFseXplVHJhbnNpdGl2ZUNhbGwoXG4gICAgICAgICAgICBmdW5jTmFtZSxcbiAgICAgICAgICAgIHN0ZXBEZWNsYXJhdGlvbnMsXG4gICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgICAgZnVuY3Rpb25NYXAsXG4gICAgICAgICAgICB2YXJpYWJsZU1hcCxcbiAgICAgICAgICAgIHZpc2l0ZWRGdW5jdGlvbnNcbiAgICAgICAgICApO1xuICAgICAgICAgIG5vZGVzLnB1c2goLi4udHJhbnNpdGl2ZVJlc3VsdC5ub2Rlcyk7XG4gICAgICAgICAgZWRnZXMucHVzaCguLi50cmFuc2l0aXZlUmVzdWx0LmVkZ2VzKTtcbiAgICAgICAgICBlbnRyeU5vZGVJZHMucHVzaCguLi50cmFuc2l0aXZlUmVzdWx0LmVudHJ5Tm9kZUlkcyk7XG4gICAgICAgICAgZXhpdE5vZGVJZHMucHVzaCguLi50cmFuc2l0aXZlUmVzdWx0LmV4aXROb2RlSWRzKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBBbHNvIGFuYWx5emUgdGhlIGFyZ3VtZW50cyBvZiBhd2FpdGVkIGNhbGxzIGZvciBzdGVwIHJlZmVyZW5jZXMgaW4gb2JqZWN0c1xuICAgICAgZm9yIChjb25zdCBhcmcgb2YgY2FsbEV4cHIuYXJndW1lbnRzKSB7XG4gICAgICAgIGlmIChhcmcuZXhwcmVzc2lvbj8udHlwZSA9PT0gJ09iamVjdEV4cHJlc3Npb24nKSB7XG4gICAgICAgICAgY29uc3QgcmVmUmVzdWx0ID0gYW5hbHl6ZU9iamVjdEZvclN0ZXBSZWZlcmVuY2VzKFxuICAgICAgICAgICAgYXJnLmV4cHJlc3Npb24sXG4gICAgICAgICAgICBzdGVwRGVjbGFyYXRpb25zLFxuICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICAgICcnXG4gICAgICAgICAgKTtcbiAgICAgICAgICBub2Rlcy5wdXNoKC4uLnJlZlJlc3VsdC5ub2Rlcyk7XG4gICAgICAgICAgZWRnZXMucHVzaCguLi5yZWZSZXN1bHQuZWRnZXMpO1xuICAgICAgICAgIGVudHJ5Tm9kZUlkcy5wdXNoKC4uLnJlZlJlc3VsdC5lbnRyeU5vZGVJZHMpO1xuICAgICAgICAgIGV4aXROb2RlSWRzLnB1c2goLi4ucmVmUmVzdWx0LmV4aXROb2RlSWRzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEhhbmRsZSBhd2FpdCBvbiBhIHdlYmhvb2svaG9vayB2YXJpYWJsZTogYXdhaXQgd2ViaG9va1xuICAgIGlmIChhd2FpdGVkRXhwci50eXBlID09PSAnSWRlbnRpZmllcicpIHtcbiAgICAgIGNvbnN0IHZhck5hbWUgPSAoYXdhaXRlZEV4cHIgYXMgSWRlbnRpZmllcikudmFsdWU7XG4gICAgICBpZiAoY29udGV4dC53ZWJob29rVmFyaWFibGVzLmhhcyh2YXJOYW1lKSkge1xuICAgICAgICBjb25zdCBub2RlSWQgPSBgbm9kZV8ke2NvbnRleHQubm9kZUNvdW50ZXIrK31gO1xuICAgICAgICBjb25zdCBtZXRhZGF0YTogTm9kZU1ldGFkYXRhID0ge307XG5cbiAgICAgICAgaWYgKGNvbnRleHQuaW5Mb29wKSB7XG4gICAgICAgICAgbWV0YWRhdGEubG9vcElkID0gY29udGV4dC5pbkxvb3A7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbnRleHQuaW5Db25kaXRpb25hbCkge1xuICAgICAgICAgIG1ldGFkYXRhLmNvbmRpdGlvbmFsSWQgPSBjb250ZXh0LmluQ29uZGl0aW9uYWw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBub2RlOiBNYW5pZmVzdE5vZGUgPSB7XG4gICAgICAgICAgaWQ6IG5vZGVJZCxcbiAgICAgICAgICB0eXBlOiAncHJpbWl0aXZlJyxcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBsYWJlbDogJ2F3YWl0V2ViaG9vaycsXG4gICAgICAgICAgICBub2RlS2luZDogJ3ByaW1pdGl2ZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBtZXRhZGF0YTogT2JqZWN0LmtleXMobWV0YWRhdGEpLmxlbmd0aCA+IDAgPyBtZXRhZGF0YSA6IHVuZGVmaW5lZCxcbiAgICAgICAgfTtcblxuICAgICAgICBub2Rlcy5wdXNoKG5vZGUpO1xuICAgICAgICBlbnRyeU5vZGVJZHMucHVzaChub2RlSWQpO1xuICAgICAgICBleGl0Tm9kZUlkcy5wdXNoKG5vZGVJZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gTm9uLWF3YWl0ZWQgY2FsbCBleHByZXNzaW9uXG4gIGlmIChleHByLnR5cGUgPT09ICdDYWxsRXhwcmVzc2lvbicpIHtcbiAgICBjb25zdCBjYWxsRXhwciA9IGV4cHIgYXMgQ2FsbEV4cHJlc3Npb247XG4gICAgaWYgKGNhbGxFeHByLmNhbGxlZS50eXBlID09PSAnSWRlbnRpZmllcicpIHtcbiAgICAgIGNvbnN0IGZ1bmNOYW1lID0gKGNhbGxFeHByLmNhbGxlZSBhcyBJZGVudGlmaWVyKS52YWx1ZTtcbiAgICAgIGNvbnN0IHN0ZXBJbmZvID0gc3RlcERlY2xhcmF0aW9ucy5nZXQoZnVuY05hbWUpO1xuXG4gICAgICBpZiAoc3RlcEluZm8pIHtcbiAgICAgICAgY29uc3Qgbm9kZUlkID0gYG5vZGVfJHtjb250ZXh0Lm5vZGVDb3VudGVyKyt9YDtcbiAgICAgICAgY29uc3QgbWV0YWRhdGE6IE5vZGVNZXRhZGF0YSA9IHt9O1xuXG4gICAgICAgIGlmIChjb250ZXh0LmluTG9vcCkge1xuICAgICAgICAgIG1ldGFkYXRhLmxvb3BJZCA9IGNvbnRleHQuaW5Mb29wO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb250ZXh0LmluQ29uZGl0aW9uYWwpIHtcbiAgICAgICAgICBtZXRhZGF0YS5jb25kaXRpb25hbElkID0gY29udGV4dC5pbkNvbmRpdGlvbmFsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgbm9kZTogTWFuaWZlc3ROb2RlID0ge1xuICAgICAgICAgIGlkOiBub2RlSWQsXG4gICAgICAgICAgdHlwZTogJ3N0ZXAnLFxuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGxhYmVsOiBnZXRPcmlnaW5hbFN0ZXBOYW1lKHN0ZXBJbmZvLnN0ZXBJZCwgZnVuY05hbWUpLFxuICAgICAgICAgICAgbm9kZUtpbmQ6ICdzdGVwJyxcbiAgICAgICAgICAgIHN0ZXBJZDogc3RlcEluZm8uc3RlcElkLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWV0YWRhdGE6IE9iamVjdC5rZXlzKG1ldGFkYXRhKS5sZW5ndGggPiAwID8gbWV0YWRhdGEgOiB1bmRlZmluZWQsXG4gICAgICAgIH07XG5cbiAgICAgICAgbm9kZXMucHVzaChub2RlKTtcbiAgICAgICAgZW50cnlOb2RlSWRzLnB1c2gobm9kZUlkKTtcbiAgICAgICAgZXhpdE5vZGVJZHMucHVzaChub2RlSWQpO1xuICAgICAgfSBlbHNlIGlmIChXT1JLRkxPV19QUklNSVRJVkVTLmhhcyhmdW5jTmFtZSkpIHtcbiAgICAgICAgLy8gSGFuZGxlIG5vbi1hd2FpdGVkIHdvcmtmbG93IHByaW1pdGl2ZXMgbGlrZSBjcmVhdGVIb29rLCBjcmVhdGVXZWJob29rXG4gICAgICAgIGNvbnN0IG5vZGVJZCA9IGBub2RlXyR7Y29udGV4dC5ub2RlQ291bnRlcisrfWA7XG4gICAgICAgIGNvbnN0IG1ldGFkYXRhOiBOb2RlTWV0YWRhdGEgPSB7fTtcblxuICAgICAgICBpZiAoY29udGV4dC5pbkxvb3ApIHtcbiAgICAgICAgICBtZXRhZGF0YS5sb29wSWQgPSBjb250ZXh0LmluTG9vcDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29udGV4dC5pbkNvbmRpdGlvbmFsKSB7XG4gICAgICAgICAgbWV0YWRhdGEuY29uZGl0aW9uYWxJZCA9IGNvbnRleHQuaW5Db25kaXRpb25hbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5vZGU6IE1hbmlmZXN0Tm9kZSA9IHtcbiAgICAgICAgICBpZDogbm9kZUlkLFxuICAgICAgICAgIHR5cGU6ICdwcmltaXRpdmUnLFxuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGxhYmVsOiBmdW5jTmFtZSxcbiAgICAgICAgICAgIG5vZGVLaW5kOiAncHJpbWl0aXZlJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1ldGFkYXRhOiBPYmplY3Qua2V5cyhtZXRhZGF0YSkubGVuZ3RoID4gMCA/IG1ldGFkYXRhIDogdW5kZWZpbmVkLFxuICAgICAgICB9O1xuXG4gICAgICAgIG5vZGVzLnB1c2gobm9kZSk7XG4gICAgICAgIGVudHJ5Tm9kZUlkcy5wdXNoKG5vZGVJZCk7XG4gICAgICAgIGV4aXROb2RlSWRzLnB1c2gobm9kZUlkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHRyYW5zaXRpdmVSZXN1bHQgPSBhbmFseXplVHJhbnNpdGl2ZUNhbGwoXG4gICAgICAgICAgZnVuY05hbWUsXG4gICAgICAgICAgc3RlcERlY2xhcmF0aW9ucyxcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIGZ1bmN0aW9uTWFwLFxuICAgICAgICAgIHZhcmlhYmxlTWFwLFxuICAgICAgICAgIHZpc2l0ZWRGdW5jdGlvbnNcbiAgICAgICAgKTtcbiAgICAgICAgbm9kZXMucHVzaCguLi50cmFuc2l0aXZlUmVzdWx0Lm5vZGVzKTtcbiAgICAgICAgZWRnZXMucHVzaCguLi50cmFuc2l0aXZlUmVzdWx0LmVkZ2VzKTtcbiAgICAgICAgZW50cnlOb2RlSWRzLnB1c2goLi4udHJhbnNpdGl2ZVJlc3VsdC5lbnRyeU5vZGVJZHMpO1xuICAgICAgICBleGl0Tm9kZUlkcy5wdXNoKC4uLnRyYW5zaXRpdmVSZXN1bHQuZXhpdE5vZGVJZHMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIENoZWNrIGZvciBzdGVwIHJlZmVyZW5jZXMgaW4gb2JqZWN0IGxpdGVyYWxzXG4gIGlmIChleHByLnR5cGUgPT09ICdPYmplY3RFeHByZXNzaW9uJykge1xuICAgIGNvbnN0IHJlZlJlc3VsdCA9IGFuYWx5emVPYmplY3RGb3JTdGVwUmVmZXJlbmNlcyhcbiAgICAgIGV4cHIsXG4gICAgICBzdGVwRGVjbGFyYXRpb25zLFxuICAgICAgY29udGV4dCxcbiAgICAgICcnXG4gICAgKTtcbiAgICBub2Rlcy5wdXNoKC4uLnJlZlJlc3VsdC5ub2Rlcyk7XG4gICAgZWRnZXMucHVzaCguLi5yZWZSZXN1bHQuZWRnZXMpO1xuICAgIGVudHJ5Tm9kZUlkcy5wdXNoKC4uLnJlZlJlc3VsdC5lbnRyeU5vZGVJZHMpO1xuICAgIGV4aXROb2RlSWRzLnB1c2goLi4ucmVmUmVzdWx0LmV4aXROb2RlSWRzKTtcbiAgfVxuXG4gIC8vIENoZWNrIGZvciBzdGVwIHJlZmVyZW5jZXMgYW5kIHN0ZXAgY2FsbHMgaW4gZnVuY3Rpb24gY2FsbCBhcmd1bWVudHNcbiAgLy8gU2tpcCBmb3IgYXJyYXkgbWV0aG9kcyAobWFwLCBmb3JFYWNoLCBldGMuKSB3aGljaCBoYXZlIGEgc3BlY2lhbGl6ZWQgaGFuZGxlciBiZWxvd1xuICBpZiAoZXhwci50eXBlID09PSAnQ2FsbEV4cHJlc3Npb24nKSB7XG4gICAgY29uc3QgY2FsbEV4cHIgPSBleHByIGFzIENhbGxFeHByZXNzaW9uO1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhbiBhcnJheSBtZXRob2QgY2FsbCAtIGlmIHNvLCBza2lwIHRoZSBnZW5lcmljIGhhbmRsZXJcbiAgICAvLyBhbmQgbGV0IHRoZSBzcGVjaWFsaXplZCBoYW5kbGVyIGF0IHRoZSBlbmQgb2YgdGhpcyBmdW5jdGlvbiBoYW5kbGUgaXRcbiAgICBjb25zdCBpc0FycmF5TWV0aG9kQ2FsbCA9XG4gICAgICBjYWxsRXhwci5jYWxsZWUudHlwZSA9PT0gJ01lbWJlckV4cHJlc3Npb24nICYmXG4gICAgICAoY2FsbEV4cHIuY2FsbGVlIGFzIE1lbWJlckV4cHJlc3Npb24pLnByb3BlcnR5LnR5cGUgPT09ICdJZGVudGlmaWVyJyAmJlxuICAgICAgWydtYXAnLCAnZm9yRWFjaCcsICdmaWx0ZXInLCAnZmluZCcsICdzb21lJywgJ2V2ZXJ5JywgJ2ZsYXRNYXAnXS5pbmNsdWRlcyhcbiAgICAgICAgKChjYWxsRXhwci5jYWxsZWUgYXMgTWVtYmVyRXhwcmVzc2lvbikucHJvcGVydHkgYXMgSWRlbnRpZmllcikudmFsdWVcbiAgICAgICk7XG5cbiAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGEgLnB1c2goKSBjYWxsIG9uIGEgdHJhY2tlZCBwcm9taXNlIGFycmF5XG4gICAgLy8gUGF0dGVybjogcHJvbWlzZXMucHVzaChzdGVwQ2FsbCgpKVxuICAgIGxldCBwdXNoQXJyYXlOYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICBpZiAoXG4gICAgICBjYWxsRXhwci5jYWxsZWUudHlwZSA9PT0gJ01lbWJlckV4cHJlc3Npb24nICYmXG4gICAgICAoY2FsbEV4cHIuY2FsbGVlIGFzIE1lbWJlckV4cHJlc3Npb24pLm9iamVjdC50eXBlID09PSAnSWRlbnRpZmllcicgJiZcbiAgICAgIChjYWxsRXhwci5jYWxsZWUgYXMgTWVtYmVyRXhwcmVzc2lvbikucHJvcGVydHkudHlwZSA9PT0gJ0lkZW50aWZpZXInICYmXG4gICAgICAoKGNhbGxFeHByLmNhbGxlZSBhcyBNZW1iZXJFeHByZXNzaW9uKS5wcm9wZXJ0eSBhcyBJZGVudGlmaWVyKS52YWx1ZSA9PT1cbiAgICAgICAgJ3B1c2gnXG4gICAgKSB7XG4gICAgICBjb25zdCBvYmpOYW1lID0gKFxuICAgICAgICAoY2FsbEV4cHIuY2FsbGVlIGFzIE1lbWJlckV4cHJlc3Npb24pLm9iamVjdCBhcyBJZGVudGlmaWVyXG4gICAgICApLnZhbHVlO1xuICAgICAgaWYgKGNvbnRleHQucHJvbWlzZUFycmF5cy5oYXMob2JqTmFtZSkpIHtcbiAgICAgICAgcHVzaEFycmF5TmFtZSA9IG9iak5hbWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBhcmcgb2YgY2FsbEV4cHIuYXJndW1lbnRzKSB7XG4gICAgICBpZiAoYXJnLmV4cHJlc3Npb24pIHtcbiAgICAgICAgLy8gRm9yIGFycmF5IG1ldGhvZCBjYWxscywgc2tpcCBzdGVwIGlkZW50aWZpZXIgZGV0ZWN0aW9uIGhlcmVcbiAgICAgICAgLy8gc2luY2Ugd2UgaGF2ZSBhIHNwZWNpYWxpemVkIGhhbmRsZXIgZm9yIHRob3NlXG4gICAgICAgIGlmIChhcmcuZXhwcmVzc2lvbi50eXBlID09PSAnSWRlbnRpZmllcicgJiYgIWlzQXJyYXlNZXRob2RDYWxsKSB7XG4gICAgICAgICAgY29uc3QgYXJnTmFtZSA9IChhcmcuZXhwcmVzc2lvbiBhcyBJZGVudGlmaWVyKS52YWx1ZTtcbiAgICAgICAgICBjb25zdCBzdGVwSW5mbyA9IHN0ZXBEZWNsYXJhdGlvbnMuZ2V0KGFyZ05hbWUpO1xuICAgICAgICAgIGlmIChzdGVwSW5mbykge1xuICAgICAgICAgICAgY29uc3Qgbm9kZUlkID0gYG5vZGVfJHtjb250ZXh0Lm5vZGVDb3VudGVyKyt9YDtcbiAgICAgICAgICAgIGNvbnN0IG5vZGU6IE1hbmlmZXN0Tm9kZSA9IHtcbiAgICAgICAgICAgICAgaWQ6IG5vZGVJZCxcbiAgICAgICAgICAgICAgdHlwZTogJ3N0ZXAnLFxuICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgbGFiZWw6IGAke2dldE9yaWdpbmFsU3RlcE5hbWUoc3RlcEluZm8uc3RlcElkLCBhcmdOYW1lKX0gKHJlZilgLFxuICAgICAgICAgICAgICAgIG5vZGVLaW5kOiAnc3RlcCcsXG4gICAgICAgICAgICAgICAgc3RlcElkOiBzdGVwSW5mby5zdGVwSWQsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICAgICAgaXNTdGVwUmVmZXJlbmNlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHJlZmVyZW5jZUNvbnRleHQ6ICdmdW5jdGlvbiBhcmd1bWVudCcsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgbm9kZXMucHVzaChub2RlKTtcbiAgICAgICAgICAgIGVudHJ5Tm9kZUlkcy5wdXNoKG5vZGVJZCk7XG4gICAgICAgICAgICBleGl0Tm9kZUlkcy5wdXNoKG5vZGVJZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIEhhbmRsZSBzdGVwIGNhbGxzIHBhc3NlZCBhcyBhcmd1bWVudHMgKGUuZy4sIHByb21pc2VzLnB1c2goc3RlcENhbGwoKSkpXG4gICAgICAgIC8vIE5vdGU6IERvbid0IGFkZCBsb29wSWQgaGVyZSAtIHRoZXNlIGFyZSBub24tYXdhaXRlZCBjYWxscyBiZWluZyBjb2xsZWN0ZWRcbiAgICAgICAgLy8gZm9yIHBhcmFsbGVsIGV4ZWN1dGlvbiAobGlrZSBQcm9taXNlLmFsbCksIG5vdCB0cnVseSBsb29waW5nIGNhbGxzXG4gICAgICAgIGlmIChhcmcuZXhwcmVzc2lvbi50eXBlID09PSAnQ2FsbEV4cHJlc3Npb24nKSB7XG4gICAgICAgICAgY29uc3QgYXJnQ2FsbEV4cHIgPSBhcmcuZXhwcmVzc2lvbiBhcyBDYWxsRXhwcmVzc2lvbjtcbiAgICAgICAgICBpZiAoYXJnQ2FsbEV4cHIuY2FsbGVlLnR5cGUgPT09ICdJZGVudGlmaWVyJykge1xuICAgICAgICAgICAgY29uc3QgZnVuY05hbWUgPSAoYXJnQ2FsbEV4cHIuY2FsbGVlIGFzIElkZW50aWZpZXIpLnZhbHVlO1xuICAgICAgICAgICAgY29uc3Qgc3RlcEluZm8gPSBzdGVwRGVjbGFyYXRpb25zLmdldChmdW5jTmFtZSk7XG4gICAgICAgICAgICBpZiAoc3RlcEluZm8pIHtcbiAgICAgICAgICAgICAgY29uc3Qgbm9kZUlkID0gYG5vZGVfJHtjb250ZXh0Lm5vZGVDb3VudGVyKyt9YDtcbiAgICAgICAgICAgICAgY29uc3QgbWV0YWRhdGE6IE5vZGVNZXRhZGF0YSA9IHt9O1xuICAgICAgICAgICAgICAvLyBEb24ndCBhZGQgbG9vcElkIC0gdGhpcyBpcyBhIG5vbi1hd2FpdGVkIGNhbGwsIGxpa2VseSBiZWluZ1xuICAgICAgICAgICAgICAvLyBjb2xsZWN0ZWQgZm9yIHBhcmFsbGVsIGV4ZWN1dGlvbiAoUHJvbWlzZS5hbGwgcGF0dGVybilcbiAgICAgICAgICAgICAgaWYgKGNvbnRleHQuaW5Db25kaXRpb25hbCkge1xuICAgICAgICAgICAgICAgIG1ldGFkYXRhLmNvbmRpdGlvbmFsSWQgPSBjb250ZXh0LmluQ29uZGl0aW9uYWw7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3Qgbm9kZTogTWFuaWZlc3ROb2RlID0ge1xuICAgICAgICAgICAgICAgIGlkOiBub2RlSWQsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3N0ZXAnLFxuICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgIGxhYmVsOiBnZXRPcmlnaW5hbFN0ZXBOYW1lKHN0ZXBJbmZvLnN0ZXBJZCwgZnVuY05hbWUpLFxuICAgICAgICAgICAgICAgICAgbm9kZUtpbmQ6ICdzdGVwJyxcbiAgICAgICAgICAgICAgICAgIHN0ZXBJZDogc3RlcEluZm8uc3RlcElkLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbWV0YWRhdGE6XG4gICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhtZXRhZGF0YSkubGVuZ3RoID4gMCA/IG1ldGFkYXRhIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGJlaW5nIHB1c2hlZCB0byBhIHRyYWNrZWQgcHJvbWlzZSBhcnJheSwgc3RvcmUgdGhlIG5vZGVcbiAgICAgICAgICAgICAgLy8gc28gd2UgY2FuIGFwcGx5IHBhcmFsbGVsR3JvdXBJZCB3aGVuIFByb21pc2UuYWxsIGlzIHJlYWNoZWRcbiAgICAgICAgICAgICAgaWYgKHB1c2hBcnJheU5hbWUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0cmFja2VkTm9kZXMgPSBjb250ZXh0LnByb21pc2VBcnJheXMuZ2V0KHB1c2hBcnJheU5hbWUpO1xuICAgICAgICAgICAgICAgIGlmICh0cmFja2VkTm9kZXMpIHtcbiAgICAgICAgICAgICAgICAgIHRyYWNrZWROb2Rlcy5wdXNoKG5vZGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBub2Rlcy5wdXNoKG5vZGUpO1xuICAgICAgICAgICAgICBlbnRyeU5vZGVJZHMucHVzaChub2RlSWQpO1xuICAgICAgICAgICAgICBleGl0Tm9kZUlkcy5wdXNoKG5vZGVJZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChhcmcuZXhwcmVzc2lvbi50eXBlID09PSAnT2JqZWN0RXhwcmVzc2lvbicpIHtcbiAgICAgICAgICBjb25zdCByZWZSZXN1bHQgPSBhbmFseXplT2JqZWN0Rm9yU3RlcFJlZmVyZW5jZXMoXG4gICAgICAgICAgICBhcmcuZXhwcmVzc2lvbixcbiAgICAgICAgICAgIHN0ZXBEZWNsYXJhdGlvbnMsXG4gICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgICAgJydcbiAgICAgICAgICApO1xuICAgICAgICAgIG5vZGVzLnB1c2goLi4ucmVmUmVzdWx0Lm5vZGVzKTtcbiAgICAgICAgICBlZGdlcy5wdXNoKC4uLnJlZlJlc3VsdC5lZGdlcyk7XG4gICAgICAgICAgZW50cnlOb2RlSWRzLnB1c2goLi4ucmVmUmVzdWx0LmVudHJ5Tm9kZUlkcyk7XG4gICAgICAgICAgZXhpdE5vZGVJZHMucHVzaCguLi5yZWZSZXN1bHQuZXhpdE5vZGVJZHMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQ2hlY2sgZm9yIHN0ZXAgcmVmZXJlbmNlcyBpbiAnbmV3JyBleHByZXNzaW9uc1xuICBpZiAoZXhwci50eXBlID09PSAnTmV3RXhwcmVzc2lvbicpIHtcbiAgICBjb25zdCBuZXdFeHByID0gZXhwciBhcyBhbnk7XG5cbiAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGEgRHVyYWJsZUFnZW50IGluc3RhbnRpYXRpb25cbiAgICBjb25zdCBpc0R1cmFibGVBZ2VudCA9XG4gICAgICBuZXdFeHByLmNhbGxlZT8udHlwZSA9PT0gJ0lkZW50aWZpZXInICYmXG4gICAgICBuZXdFeHByLmNhbGxlZT8udmFsdWUgPT09ICdEdXJhYmxlQWdlbnQnO1xuXG4gICAgaWYgKGlzRHVyYWJsZUFnZW50ICYmIG5ld0V4cHIuYXJndW1lbnRzPy5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBDcmVhdGUgYSBub2RlIGZvciB0aGUgRHVyYWJsZUFnZW50IGl0c2VsZlxuICAgICAgY29uc3QgYWdlbnROb2RlSWQgPSBgbm9kZV8ke2NvbnRleHQubm9kZUNvdW50ZXIrK31gO1xuICAgICAgY29uc3QgYWdlbnROb2RlOiBNYW5pZmVzdE5vZGUgPSB7XG4gICAgICAgIGlkOiBhZ2VudE5vZGVJZCxcbiAgICAgICAgdHlwZTogJ2FnZW50JyxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGxhYmVsOiAnRHVyYWJsZUFnZW50JyxcbiAgICAgICAgICBub2RlS2luZDogJ2FnZW50JyxcbiAgICAgICAgfSxcbiAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICBpc1N0ZXBSZWZlcmVuY2U6IHRydWUsXG4gICAgICAgICAgcmVmZXJlbmNlQ29udGV4dDogJ0R1cmFibGVBZ2VudCcsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgbm9kZXMucHVzaChhZ2VudE5vZGUpO1xuICAgICAgZW50cnlOb2RlSWRzLnB1c2goYWdlbnROb2RlSWQpO1xuXG4gICAgICAvLyBMb29rIGZvciB0b29scyBpbiB0aGUgY29uc3RydWN0b3Igb3B0aW9uc1xuICAgICAgY29uc3Qgb3B0aW9uc0FyZyA9IG5ld0V4cHIuYXJndW1lbnRzWzBdPy5leHByZXNzaW9uO1xuICAgICAgaWYgKG9wdGlvbnNBcmc/LnR5cGUgPT09ICdPYmplY3RFeHByZXNzaW9uJykge1xuICAgICAgICBjb25zdCB0b29sc1Jlc3VsdCA9IGFuYWx5emVEdXJhYmxlQWdlbnRUb29scyhcbiAgICAgICAgICBvcHRpb25zQXJnLFxuICAgICAgICAgIHN0ZXBEZWNsYXJhdGlvbnMsXG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBhZ2VudE5vZGVJZCxcbiAgICAgICAgICB2YXJpYWJsZU1hcFxuICAgICAgICApO1xuICAgICAgICBub2Rlcy5wdXNoKC4uLnRvb2xzUmVzdWx0Lm5vZGVzKTtcbiAgICAgICAgZWRnZXMucHVzaCguLi50b29sc1Jlc3VsdC5lZGdlcyk7XG5cbiAgICAgICAgLy8gSWYgd2UgZm91bmQgdG9vbHMsIHRoZXkgYXJlIHRoZSBleGl0IG5vZGVzXG4gICAgICAgIGlmICh0b29sc1Jlc3VsdC5leGl0Tm9kZUlkcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgZXhpdE5vZGVJZHMucHVzaCguLi50b29sc1Jlc3VsdC5leGl0Tm9kZUlkcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZXhpdE5vZGVJZHMucHVzaChhZ2VudE5vZGVJZCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV4aXROb2RlSWRzLnB1c2goYWdlbnROb2RlSWQpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobmV3RXhwci5hcmd1bWVudHMpIHtcbiAgICAgIGZvciAoY29uc3QgYXJnIG9mIG5ld0V4cHIuYXJndW1lbnRzKSB7XG4gICAgICAgIGlmIChhcmcuZXhwcmVzc2lvbj8udHlwZSA9PT0gJ09iamVjdEV4cHJlc3Npb24nKSB7XG4gICAgICAgICAgY29uc3QgcmVmUmVzdWx0ID0gYW5hbHl6ZU9iamVjdEZvclN0ZXBSZWZlcmVuY2VzKFxuICAgICAgICAgICAgYXJnLmV4cHJlc3Npb24sXG4gICAgICAgICAgICBzdGVwRGVjbGFyYXRpb25zLFxuICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICAgICcnXG4gICAgICAgICAgKTtcbiAgICAgICAgICBub2Rlcy5wdXNoKC4uLnJlZlJlc3VsdC5ub2Rlcyk7XG4gICAgICAgICAgZWRnZXMucHVzaCguLi5yZWZSZXN1bHQuZWRnZXMpO1xuICAgICAgICAgIGVudHJ5Tm9kZUlkcy5wdXNoKC4uLnJlZlJlc3VsdC5lbnRyeU5vZGVJZHMpO1xuICAgICAgICAgIGV4aXROb2RlSWRzLnB1c2goLi4ucmVmUmVzdWx0LmV4aXROb2RlSWRzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEhhbmRsZSBBc3NpZ25tZW50RXhwcmVzc2lvbiAtIGFuYWx5emUgdGhlIHJpZ2h0LWhhbmQgc2lkZVxuICBpZiAoZXhwci50eXBlID09PSAnQXNzaWdubWVudEV4cHJlc3Npb24nKSB7XG4gICAgY29uc3QgYXNzaWduRXhwciA9IGV4cHIgYXMgYW55O1xuICAgIGlmIChhc3NpZ25FeHByLnJpZ2h0KSB7XG4gICAgICBjb25zdCByaWdodFJlc3VsdCA9IGFuYWx5emVFeHByZXNzaW9uKFxuICAgICAgICBhc3NpZ25FeHByLnJpZ2h0LFxuICAgICAgICBzdGVwRGVjbGFyYXRpb25zLFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICBmdW5jdGlvbk1hcCxcbiAgICAgICAgdmFyaWFibGVNYXAsXG4gICAgICAgIHZpc2l0ZWRGdW5jdGlvbnNcbiAgICAgICk7XG4gICAgICBub2Rlcy5wdXNoKC4uLnJpZ2h0UmVzdWx0Lm5vZGVzKTtcbiAgICAgIGVkZ2VzLnB1c2goLi4ucmlnaHRSZXN1bHQuZWRnZXMpO1xuICAgICAgZW50cnlOb2RlSWRzLnB1c2goLi4ucmlnaHRSZXN1bHQuZW50cnlOb2RlSWRzKTtcbiAgICAgIGV4aXROb2RlSWRzLnB1c2goLi4ucmlnaHRSZXN1bHQuZXhpdE5vZGVJZHMpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEhhbmRsZSBNZW1iZXJFeHByZXNzaW9uIGNhbGxzIGxpa2UgYXJyYXkubWFwKHN0ZXBGbikgd2hlcmUgc3RlcCBpcyBwYXNzZWQgYXMgY2FsbGJhY2tcbiAgaWYgKGV4cHIudHlwZSA9PT0gJ0NhbGxFeHByZXNzaW9uJykge1xuICAgIGNvbnN0IGNhbGxFeHByID0gZXhwciBhcyBDYWxsRXhwcmVzc2lvbjtcbiAgICBpZiAoY2FsbEV4cHIuY2FsbGVlLnR5cGUgPT09ICdNZW1iZXJFeHByZXNzaW9uJykge1xuICAgICAgY29uc3QgbWVtYmVyID0gY2FsbEV4cHIuY2FsbGVlIGFzIE1lbWJlckV4cHJlc3Npb247XG4gICAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGEgbWV0aG9kIGNhbGwgbGlrZSAubWFwKCksIC5mb3JFYWNoKCksIC5maWx0ZXIoKSBldGMuXG4gICAgICBpZiAobWVtYmVyLnByb3BlcnR5LnR5cGUgPT09ICdJZGVudGlmaWVyJykge1xuICAgICAgICBjb25zdCBtZXRob2ROYW1lID0gKG1lbWJlci5wcm9wZXJ0eSBhcyBJZGVudGlmaWVyKS52YWx1ZTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIFtcbiAgICAgICAgICAgICdtYXAnLFxuICAgICAgICAgICAgJ2ZvckVhY2gnLFxuICAgICAgICAgICAgJ2ZpbHRlcicsXG4gICAgICAgICAgICAnZmluZCcsXG4gICAgICAgICAgICAnc29tZScsXG4gICAgICAgICAgICAnZXZlcnknLFxuICAgICAgICAgICAgJ2ZsYXRNYXAnLFxuICAgICAgICAgIF0uaW5jbHVkZXMobWV0aG9kTmFtZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gQ2hlY2sgaWYgYW55IGFyZ3VtZW50IGlzIGEgc3RlcCBmdW5jdGlvbiByZWZlcmVuY2VcbiAgICAgICAgICBmb3IgKGNvbnN0IGFyZyBvZiBjYWxsRXhwci5hcmd1bWVudHMpIHtcbiAgICAgICAgICAgIGlmIChhcmcuZXhwcmVzc2lvbj8udHlwZSA9PT0gJ0lkZW50aWZpZXInKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGFyZ05hbWUgPSAoYXJnLmV4cHJlc3Npb24gYXMgSWRlbnRpZmllcikudmFsdWU7XG4gICAgICAgICAgICAgIGNvbnN0IHN0ZXBJbmZvID0gc3RlcERlY2xhcmF0aW9ucy5nZXQoYXJnTmFtZSk7XG4gICAgICAgICAgICAgIGlmIChzdGVwSW5mbykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGVJZCA9IGBub2RlXyR7Y29udGV4dC5ub2RlQ291bnRlcisrfWA7XG4gICAgICAgICAgICAgICAgY29uc3QgbWV0YWRhdGE6IE5vZGVNZXRhZGF0YSA9IHt9O1xuICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LmluTG9vcCkge1xuICAgICAgICAgICAgICAgICAgbWV0YWRhdGEubG9vcElkID0gY29udGV4dC5pbkxvb3A7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LmluQ29uZGl0aW9uYWwpIHtcbiAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLmNvbmRpdGlvbmFsSWQgPSBjb250ZXh0LmluQ29uZGl0aW9uYWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGU6IE1hbmlmZXN0Tm9kZSA9IHtcbiAgICAgICAgICAgICAgICAgIGlkOiBub2RlSWQsXG4gICAgICAgICAgICAgICAgICB0eXBlOiAnc3RlcCcsXG4gICAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBnZXRPcmlnaW5hbFN0ZXBOYW1lKHN0ZXBJbmZvLnN0ZXBJZCwgYXJnTmFtZSksXG4gICAgICAgICAgICAgICAgICAgIG5vZGVLaW5kOiAnc3RlcCcsXG4gICAgICAgICAgICAgICAgICAgIHN0ZXBJZDogc3RlcEluZm8uc3RlcElkLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIG1ldGFkYXRhOlxuICAgICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhtZXRhZGF0YSkubGVuZ3RoID4gMCA/IG1ldGFkYXRhIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgbm9kZXMucHVzaChub2RlKTtcbiAgICAgICAgICAgICAgICBlbnRyeU5vZGVJZHMucHVzaChub2RlSWQpO1xuICAgICAgICAgICAgICAgIGV4aXROb2RlSWRzLnB1c2gobm9kZUlkKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IG5vZGVzLCBlZGdlcywgZW50cnlOb2RlSWRzLCBleGl0Tm9kZUlkcyB9O1xufVxuXG4vKipcbiAqIEFuYWx5emUgRHVyYWJsZUFnZW50IHRvb2xzIHByb3BlcnR5IHRvIGV4dHJhY3QgdG9vbCBub2Rlc1xuICovXG5mdW5jdGlvbiBhbmFseXplRHVyYWJsZUFnZW50VG9vbHMoXG4gIG9wdGlvbnNPYmo6IGFueSxcbiAgc3RlcERlY2xhcmF0aW9uczogTWFwPHN0cmluZywgeyBzdGVwSWQ6IHN0cmluZyB9PixcbiAgY29udGV4dDogQW5hbHlzaXNDb250ZXh0LFxuICBhZ2VudE5vZGVJZDogc3RyaW5nLFxuICB2YXJpYWJsZU1hcDogTWFwPHN0cmluZywgYW55PlxuKTogQW5hbHlzaXNSZXN1bHQge1xuICBjb25zdCBub2RlczogTWFuaWZlc3ROb2RlW10gPSBbXTtcbiAgY29uc3QgZWRnZXM6IE1hbmlmZXN0RWRnZVtdID0gW107XG4gIGNvbnN0IGVudHJ5Tm9kZUlkczogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgZXhpdE5vZGVJZHM6IHN0cmluZ1tdID0gW107XG5cbiAgaWYgKCFvcHRpb25zT2JqLnByb3BlcnRpZXMpXG4gICAgcmV0dXJuIHsgbm9kZXMsIGVkZ2VzLCBlbnRyeU5vZGVJZHMsIGV4aXROb2RlSWRzIH07XG5cbiAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGV4dHJhY3QgdG9vbHMgZnJvbSBhbiBPYmplY3RFeHByZXNzaW9uXG4gIGZ1bmN0aW9uIGV4dHJhY3RUb29sc0Zyb21PYmplY3QodG9vbHNPYmo6IGFueSk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgdG9vbFByb3Agb2YgdG9vbHNPYmoucHJvcGVydGllcyB8fCBbXSkge1xuICAgICAgaWYgKHRvb2xQcm9wLnR5cGUgIT09ICdLZXlWYWx1ZVByb3BlcnR5JykgY29udGludWU7XG5cbiAgICAgIGxldCB0b29sTmFtZSA9ICcnO1xuICAgICAgaWYgKHRvb2xQcm9wLmtleS50eXBlID09PSAnSWRlbnRpZmllcicpIHtcbiAgICAgICAgdG9vbE5hbWUgPSB0b29sUHJvcC5rZXkudmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGlmICghdG9vbE5hbWUpIGNvbnRpbnVlO1xuXG4gICAgICAvLyBMb29rIGZvciBleGVjdXRlIHByb3BlcnR5IGluIHRoZSB0b29sIGRlZmluaXRpb25cbiAgICAgIGlmICh0b29sUHJvcC52YWx1ZS50eXBlID09PSAnT2JqZWN0RXhwcmVzc2lvbicpIHtcbiAgICAgICAgZm9yIChjb25zdCBpbm5lclByb3Agb2YgdG9vbFByb3AudmFsdWUucHJvcGVydGllcyB8fCBbXSkge1xuICAgICAgICAgIGlmIChpbm5lclByb3AudHlwZSAhPT0gJ0tleVZhbHVlUHJvcGVydHknKSBjb250aW51ZTtcblxuICAgICAgICAgIGxldCBpbm5lcktleSA9ICcnO1xuICAgICAgICAgIGlmIChpbm5lclByb3Aua2V5LnR5cGUgPT09ICdJZGVudGlmaWVyJykge1xuICAgICAgICAgICAgaW5uZXJLZXkgPSBpbm5lclByb3Aua2V5LnZhbHVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChpbm5lcktleSA9PT0gJ2V4ZWN1dGUnICYmIGlubmVyUHJvcC52YWx1ZS50eXBlID09PSAnSWRlbnRpZmllcicpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0ZXBOYW1lID0gaW5uZXJQcm9wLnZhbHVlLnZhbHVlO1xuICAgICAgICAgICAgY29uc3Qgc3RlcEluZm8gPSBzdGVwRGVjbGFyYXRpb25zLmdldChzdGVwTmFtZSk7XG5cbiAgICAgICAgICAgIGNvbnN0IG5vZGVJZCA9IGBub2RlXyR7Y29udGV4dC5ub2RlQ291bnRlcisrfWA7XG4gICAgICAgICAgICBjb25zdCBub2RlOiBNYW5pZmVzdE5vZGUgPSB7XG4gICAgICAgICAgICAgIGlkOiBub2RlSWQsXG4gICAgICAgICAgICAgIHR5cGU6ICd0b29sJyxcbiAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIGxhYmVsOiBzdGVwTmFtZSxcbiAgICAgICAgICAgICAgICBub2RlS2luZDogJ3Rvb2wnLFxuICAgICAgICAgICAgICAgIHN0ZXBJZDogc3RlcEluZm8/LnN0ZXBJZCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgICAgICBpc1Rvb2w6IHRydWUsXG4gICAgICAgICAgICAgICAgdG9vbE5hbWU6IHRvb2xOYW1lLFxuICAgICAgICAgICAgICAgIHJlZmVyZW5jZUNvbnRleHQ6IGB0b29scy4ke3Rvb2xOYW1lfS5leGVjdXRlYCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBub2Rlcy5wdXNoKG5vZGUpO1xuICAgICAgICAgICAgZXhpdE5vZGVJZHMucHVzaChub2RlSWQpO1xuXG4gICAgICAgICAgICAvLyBDb25uZWN0IGFnZW50IHRvIHRoaXMgdG9vbCB3aXRoIHRvb2wgZWRnZSB0eXBlXG4gICAgICAgICAgICBlZGdlcy5wdXNoKHtcbiAgICAgICAgICAgICAgaWQ6IGBlXyR7YWdlbnROb2RlSWR9XyR7bm9kZUlkfWAsXG4gICAgICAgICAgICAgIHNvdXJjZTogYWdlbnROb2RlSWQsXG4gICAgICAgICAgICAgIHRhcmdldDogbm9kZUlkLFxuICAgICAgICAgICAgICB0eXBlOiAndG9vbCcsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBGaW5kIHRoZSAndG9vbHMnIHByb3BlcnR5XG4gIGZvciAoY29uc3QgcHJvcCBvZiBvcHRpb25zT2JqLnByb3BlcnRpZXMpIHtcbiAgICBpZiAocHJvcC50eXBlICE9PSAnS2V5VmFsdWVQcm9wZXJ0eScpIGNvbnRpbnVlO1xuXG4gICAgbGV0IGtleU5hbWUgPSAnJztcbiAgICBpZiAocHJvcC5rZXkudHlwZSA9PT0gJ0lkZW50aWZpZXInKSB7XG4gICAgICBrZXlOYW1lID0gcHJvcC5rZXkudmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKGtleU5hbWUgIT09ICd0b29scycpIGNvbnRpbnVlO1xuXG4gICAgLy8gSGFuZGxlIGlubGluZSB0b29scyBvYmplY3RcbiAgICBpZiAocHJvcC52YWx1ZS50eXBlID09PSAnT2JqZWN0RXhwcmVzc2lvbicpIHtcbiAgICAgIGV4dHJhY3RUb29sc0Zyb21PYmplY3QocHJvcC52YWx1ZSk7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHRvb2xzIGFzIGEgdmFyaWFibGUgcmVmZXJlbmNlIC0gcmVzb2x2ZSBpdCBmcm9tIHZhcmlhYmxlTWFwXG4gICAgaWYgKHByb3AudmFsdWUudHlwZSA9PT0gJ0lkZW50aWZpZXInKSB7XG4gICAgICBjb25zdCB0b29sc1Zhck5hbWUgPSBwcm9wLnZhbHVlLnZhbHVlO1xuXG4gICAgICAvLyBUcnkgdG8gcmVzb2x2ZSB0aGUgdmFyaWFibGUgZnJvbSB0aGUgdmFyaWFibGVNYXAgKGJ1bmRsZWQgY29kZSlcbiAgICAgIGNvbnN0IHJlc29sdmVkVG9vbHNPYmogPSB2YXJpYWJsZU1hcC5nZXQodG9vbHNWYXJOYW1lKTtcblxuICAgICAgaWYgKHJlc29sdmVkVG9vbHNPYmogJiYgcmVzb2x2ZWRUb29sc09iai50eXBlID09PSAnT2JqZWN0RXhwcmVzc2lvbicpIHtcbiAgICAgICAgLy8gU3VjY2Vzc2Z1bGx5IHJlc29sdmVkIC0gZXh0cmFjdCBpbmRpdmlkdWFsIHRvb2xzXG4gICAgICAgIGV4dHJhY3RUb29sc0Zyb21PYmplY3QocmVzb2x2ZWRUb29sc09iaik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBGYWxsYmFjazogY3JlYXRlIGEgcGxhY2Vob2xkZXIgbm9kZSBpZiB3ZSBjYW4ndCByZXNvbHZlXG4gICAgICAgIGNvbnN0IG5vZGVJZCA9IGBub2RlXyR7Y29udGV4dC5ub2RlQ291bnRlcisrfWA7XG4gICAgICAgIGNvbnN0IG5vZGU6IE1hbmlmZXN0Tm9kZSA9IHtcbiAgICAgICAgICBpZDogbm9kZUlkLFxuICAgICAgICAgIHR5cGU6ICd0b29sJyxcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBsYWJlbDogYCR7dG9vbHNWYXJOYW1lfWAsXG4gICAgICAgICAgICBub2RlS2luZDogJ3Rvb2wnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgIGlzVG9vbHNDb2xsZWN0aW9uOiB0cnVlLFxuICAgICAgICAgICAgdG9vbHNWYXJpYWJsZTogdG9vbHNWYXJOYW1lLFxuICAgICAgICAgICAgcmVmZXJlbmNlQ29udGV4dDogYHRvb2xzOiR7dG9vbHNWYXJOYW1lfWAsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgbm9kZXMucHVzaChub2RlKTtcbiAgICAgICAgZXhpdE5vZGVJZHMucHVzaChub2RlSWQpO1xuXG4gICAgICAgIC8vIENvbm5lY3QgYWdlbnQgdG8gdG9vbHMgd2l0aCB0b29sIGVkZ2UgdHlwZVxuICAgICAgICBlZGdlcy5wdXNoKHtcbiAgICAgICAgICBpZDogYGVfJHthZ2VudE5vZGVJZH1fJHtub2RlSWR9YCxcbiAgICAgICAgICBzb3VyY2U6IGFnZW50Tm9kZUlkLFxuICAgICAgICAgIHRhcmdldDogbm9kZUlkLFxuICAgICAgICAgIHR5cGU6ICd0b29sJyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHsgbm9kZXMsIGVkZ2VzLCBlbnRyeU5vZGVJZHMsIGV4aXROb2RlSWRzIH07XG59XG5cbi8qKlxuICogQW5hbHl6ZSBhbiBvYmplY3QgZXhwcmVzc2lvbiBmb3Igc3RlcCByZWZlcmVuY2VzXG4gKi9cbmZ1bmN0aW9uIGFuYWx5emVPYmplY3RGb3JTdGVwUmVmZXJlbmNlcyhcbiAgb2JqOiBhbnksXG4gIHN0ZXBEZWNsYXJhdGlvbnM6IE1hcDxzdHJpbmcsIHsgc3RlcElkOiBzdHJpbmcgfT4sXG4gIGNvbnRleHQ6IEFuYWx5c2lzQ29udGV4dCxcbiAgcGF0aDogc3RyaW5nXG4pOiBBbmFseXNpc1Jlc3VsdCB7XG4gIGNvbnN0IG5vZGVzOiBNYW5pZmVzdE5vZGVbXSA9IFtdO1xuICBjb25zdCBlZGdlczogTWFuaWZlc3RFZGdlW10gPSBbXTtcbiAgY29uc3QgZW50cnlOb2RlSWRzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBleGl0Tm9kZUlkczogc3RyaW5nW10gPSBbXTtcblxuICBpZiAoIW9iai5wcm9wZXJ0aWVzKSByZXR1cm4geyBub2RlcywgZWRnZXMsIGVudHJ5Tm9kZUlkcywgZXhpdE5vZGVJZHMgfTtcblxuICBmb3IgKGNvbnN0IHByb3Agb2Ygb2JqLnByb3BlcnRpZXMpIHtcbiAgICBpZiAocHJvcC50eXBlICE9PSAnS2V5VmFsdWVQcm9wZXJ0eScpIGNvbnRpbnVlO1xuXG4gICAgbGV0IGtleU5hbWUgPSAnJztcbiAgICBpZiAocHJvcC5rZXkudHlwZSA9PT0gJ0lkZW50aWZpZXInKSB7XG4gICAgICBrZXlOYW1lID0gcHJvcC5rZXkudmFsdWU7XG4gICAgfSBlbHNlIGlmIChwcm9wLmtleS50eXBlID09PSAnU3RyaW5nTGl0ZXJhbCcpIHtcbiAgICAgIGtleU5hbWUgPSBwcm9wLmtleS52YWx1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50UGF0aCA9IHBhdGggPyBgJHtwYXRofS4ke2tleU5hbWV9YCA6IGtleU5hbWU7XG5cbiAgICBpZiAocHJvcC52YWx1ZS50eXBlID09PSAnSWRlbnRpZmllcicpIHtcbiAgICAgIGNvbnN0IHZhbHVlTmFtZSA9IHByb3AudmFsdWUudmFsdWU7XG4gICAgICBjb25zdCBzdGVwSW5mbyA9IHN0ZXBEZWNsYXJhdGlvbnMuZ2V0KHZhbHVlTmFtZSk7XG4gICAgICBpZiAoc3RlcEluZm8pIHtcbiAgICAgICAgY29uc3Qgbm9kZUlkID0gYG5vZGVfJHtjb250ZXh0Lm5vZGVDb3VudGVyKyt9YDtcbiAgICAgICAgY29uc3Qgbm9kZTogTWFuaWZlc3ROb2RlID0ge1xuICAgICAgICAgIGlkOiBub2RlSWQsXG4gICAgICAgICAgdHlwZTogJ3N0ZXAnLFxuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGxhYmVsOiBgJHtnZXRPcmlnaW5hbFN0ZXBOYW1lKHN0ZXBJbmZvLnN0ZXBJZCwgdmFsdWVOYW1lKX0gKHRvb2wpYCxcbiAgICAgICAgICAgIG5vZGVLaW5kOiAnc3RlcCcsXG4gICAgICAgICAgICBzdGVwSWQ6IHN0ZXBJbmZvLnN0ZXBJZCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICBpc1N0ZXBSZWZlcmVuY2U6IHRydWUsXG4gICAgICAgICAgICByZWZlcmVuY2VDb250ZXh0OiBjdXJyZW50UGF0aCxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICBub2Rlcy5wdXNoKG5vZGUpO1xuICAgICAgICBlbnRyeU5vZGVJZHMucHVzaChub2RlSWQpO1xuICAgICAgICBleGl0Tm9kZUlkcy5wdXNoKG5vZGVJZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHByb3AudmFsdWUudHlwZSA9PT0gJ09iamVjdEV4cHJlc3Npb24nKSB7XG4gICAgICBjb25zdCBuZXN0ZWRSZXN1bHQgPSBhbmFseXplT2JqZWN0Rm9yU3RlcFJlZmVyZW5jZXMoXG4gICAgICAgIHByb3AudmFsdWUsXG4gICAgICAgIHN0ZXBEZWNsYXJhdGlvbnMsXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIGN1cnJlbnRQYXRoXG4gICAgICApO1xuICAgICAgbm9kZXMucHVzaCguLi5uZXN0ZWRSZXN1bHQubm9kZXMpO1xuICAgICAgZWRnZXMucHVzaCguLi5uZXN0ZWRSZXN1bHQuZWRnZXMpO1xuICAgICAgZW50cnlOb2RlSWRzLnB1c2goLi4ubmVzdGVkUmVzdWx0LmVudHJ5Tm9kZUlkcyk7XG4gICAgICBleGl0Tm9kZUlkcy5wdXNoKC4uLm5lc3RlZFJlc3VsdC5leGl0Tm9kZUlkcyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHsgbm9kZXMsIGVkZ2VzLCBlbnRyeU5vZGVJZHMsIGV4aXROb2RlSWRzIH07XG59XG5cbi8qKlxuICogQW5hbHl6ZSBhIHRyYW5zaXRpdmUgZnVuY3Rpb24gY2FsbCB0byBmaW5kIHN0ZXAgY2FsbHMgd2l0aGluIGhlbHBlciBmdW5jdGlvbnNcbiAqL1xuZnVuY3Rpb24gYW5hbHl6ZVRyYW5zaXRpdmVDYWxsKFxuICBmdW5jTmFtZTogc3RyaW5nLFxuICBzdGVwRGVjbGFyYXRpb25zOiBNYXA8c3RyaW5nLCB7IHN0ZXBJZDogc3RyaW5nIH0+LFxuICBjb250ZXh0OiBBbmFseXNpc0NvbnRleHQsXG4gIGZ1bmN0aW9uTWFwOiBNYXA8c3RyaW5nLCBGdW5jdGlvbkluZm8+LFxuICB2YXJpYWJsZU1hcDogTWFwPHN0cmluZywgYW55PixcbiAgdmlzaXRlZEZ1bmN0aW9uczogU2V0PHN0cmluZz5cbik6IEFuYWx5c2lzUmVzdWx0IHtcbiAgY29uc3Qgbm9kZXM6IE1hbmlmZXN0Tm9kZVtdID0gW107XG4gIGNvbnN0IGVkZ2VzOiBNYW5pZmVzdEVkZ2VbXSA9IFtdO1xuICBjb25zdCBlbnRyeU5vZGVJZHM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IGV4aXROb2RlSWRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGlmICh2aXNpdGVkRnVuY3Rpb25zLmhhcyhmdW5jTmFtZSkpIHtcbiAgICByZXR1cm4geyBub2RlcywgZWRnZXMsIGVudHJ5Tm9kZUlkcywgZXhpdE5vZGVJZHMgfTtcbiAgfVxuXG4gIGNvbnN0IGZ1bmNJbmZvID0gZnVuY3Rpb25NYXAuZ2V0KGZ1bmNOYW1lKTtcbiAgaWYgKCFmdW5jSW5mbyB8fCBmdW5jSW5mby5pc1N0ZXApIHtcbiAgICByZXR1cm4geyBub2RlcywgZWRnZXMsIGVudHJ5Tm9kZUlkcywgZXhpdE5vZGVJZHMgfTtcbiAgfVxuXG4gIHZpc2l0ZWRGdW5jdGlvbnMuYWRkKGZ1bmNOYW1lKTtcblxuICB0cnkge1xuICAgIGlmIChmdW5jSW5mby5ib2R5KSB7XG4gICAgICBpZiAoZnVuY0luZm8uYm9keS50eXBlID09PSAnQmxvY2tTdGF0ZW1lbnQnKSB7XG4gICAgICAgIGNvbnN0IGJvZHlSZXN1bHQgPSBhbmFseXplQmxvY2soXG4gICAgICAgICAgZnVuY0luZm8uYm9keS5zdG10cyxcbiAgICAgICAgICBzdGVwRGVjbGFyYXRpb25zLFxuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgZnVuY3Rpb25NYXAsXG4gICAgICAgICAgdmFyaWFibGVNYXBcbiAgICAgICAgKTtcbiAgICAgICAgbm9kZXMucHVzaCguLi5ib2R5UmVzdWx0Lm5vZGVzKTtcbiAgICAgICAgZWRnZXMucHVzaCguLi5ib2R5UmVzdWx0LmVkZ2VzKTtcbiAgICAgICAgZW50cnlOb2RlSWRzLnB1c2goLi4uYm9keVJlc3VsdC5lbnRyeU5vZGVJZHMpO1xuICAgICAgICBleGl0Tm9kZUlkcy5wdXNoKC4uLmJvZHlSZXN1bHQuZXhpdE5vZGVJZHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZXhwclJlc3VsdCA9IGFuYWx5emVFeHByZXNzaW9uKFxuICAgICAgICAgIGZ1bmNJbmZvLmJvZHksXG4gICAgICAgICAgc3RlcERlY2xhcmF0aW9ucyxcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIGZ1bmN0aW9uTWFwLFxuICAgICAgICAgIHZhcmlhYmxlTWFwLFxuICAgICAgICAgIHZpc2l0ZWRGdW5jdGlvbnNcbiAgICAgICAgKTtcbiAgICAgICAgbm9kZXMucHVzaCguLi5leHByUmVzdWx0Lm5vZGVzKTtcbiAgICAgICAgZWRnZXMucHVzaCguLi5leHByUmVzdWx0LmVkZ2VzKTtcbiAgICAgICAgZW50cnlOb2RlSWRzLnB1c2goLi4uZXhwclJlc3VsdC5lbnRyeU5vZGVJZHMpO1xuICAgICAgICBleGl0Tm9kZUlkcy5wdXNoKC4uLmV4cHJSZXN1bHQuZXhpdE5vZGVJZHMpO1xuICAgICAgfVxuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICB2aXNpdGVkRnVuY3Rpb25zLmRlbGV0ZShmdW5jTmFtZSk7XG4gIH1cblxuICByZXR1cm4geyBub2RlcywgZWRnZXMsIGVudHJ5Tm9kZUlkcywgZXhpdE5vZGVJZHMgfTtcbn1cbiJdfQ==