semantifold 0.13.0 → 0.15.0

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 (66) hide show
  1. package/README.md +2 -1
  2. package/build/src/backends/effects.js +3 -1
  3. package/build/src/backends/php.d.ts.map +1 -1
  4. package/build/src/backends/php.js +56 -3
  5. package/build/src/backends/python.js +11 -7
  6. package/build/src/backends/scalars.js +2 -2
  7. package/build/src/backends/shared.d.ts +2 -1
  8. package/build/src/backends/shared.d.ts.map +1 -1
  9. package/build/src/backends/shared.js +210 -8
  10. package/build/src/backends/writer.d.ts +18 -4
  11. package/build/src/backends/writer.d.ts.map +1 -1
  12. package/build/src/backends/writer.js +40 -4
  13. package/build/src/frontends/java.d.ts +1 -1
  14. package/build/src/frontends/java.d.ts.map +1 -1
  15. package/build/src/frontends/java.js +14 -11
  16. package/build/src/frontends/javascript-typescript.d.ts +1 -1
  17. package/build/src/frontends/javascript-typescript.d.ts.map +1 -1
  18. package/build/src/frontends/javascript-typescript.js +17 -17
  19. package/build/src/frontends/php.d.ts +5 -1
  20. package/build/src/frontends/php.d.ts.map +1 -1
  21. package/build/src/frontends/php.js +159 -31
  22. package/build/src/frontends/python.d.ts.map +1 -1
  23. package/build/src/frontends/python.js +37 -7
  24. package/build/src/frontends/ruby.d.ts +1 -1
  25. package/build/src/frontends/ruby.d.ts.map +1 -1
  26. package/build/src/frontends/ruby.js +12 -9
  27. package/build/src/frontends/types.d.ts +9 -2
  28. package/build/src/frontends/types.d.ts.map +1 -1
  29. package/build/src/frontends/types.js +26 -9
  30. package/build/src/language-registry.d.ts.map +1 -1
  31. package/build/src/language-registry.js +30 -6
  32. package/build/src/mapping.d.ts.map +1 -1
  33. package/build/src/mapping.js +4 -2
  34. package/build/src/semantic/effects.d.ts.map +1 -1
  35. package/build/src/semantic/effects.js +3 -1
  36. package/build/src/semantic/provenance.d.ts.map +1 -1
  37. package/build/src/semantic/provenance.js +37 -4
  38. package/build/src/semantic/types.d.ts +140 -9
  39. package/build/src/semantic/types.d.ts.map +1 -1
  40. package/build/src/semantic/types.js +37 -6
  41. package/build/src/semantic/validate.d.ts +31 -2
  42. package/build/src/semantic/validate.d.ts.map +1 -1
  43. package/build/src/semantic/validate.js +347 -28
  44. package/docs/adr-bounded-subtyping.md +180 -0
  45. package/docs/goals.md +1 -1
  46. package/docs/language-support.md +5 -4
  47. package/docs/testing.md +2 -2
  48. package/package.json +1 -1
  49. package/src/backends/effects.js +1 -0
  50. package/src/backends/php.js +56 -2
  51. package/src/backends/python.js +10 -4
  52. package/src/backends/scalars.js +1 -1
  53. package/src/backends/shared.js +211 -7
  54. package/src/backends/writer.js +41 -3
  55. package/src/frontends/java.js +13 -10
  56. package/src/frontends/javascript-typescript.js +16 -16
  57. package/src/frontends/php.js +175 -31
  58. package/src/frontends/python.js +39 -5
  59. package/src/frontends/ruby.js +11 -8
  60. package/src/frontends/types.js +26 -8
  61. package/src/language-registry.js +29 -5
  62. package/src/mapping.js +3 -1
  63. package/src/semantic/effects.js +1 -0
  64. package/src/semantic/provenance.js +34 -3
  65. package/src/semantic/types.js +39 -5
  66. package/src/semantic/validate.js +378 -27
@@ -1 +1 @@
1
- {"version":3,"file":"python.d.ts","sourceRoot":"","sources":["../../../src/frontends/python.js"],"names":[],"mappings":"AAoCI,YAAuH,aAAa,GAA1H;IAAC,QAAQ,EAAE,OAAO,aAAa,EAAE,UAAU,EAAE,CAAC;IAAC,oBAAoB,EAAE,GAAG,CAAC,OAAO,aAAa,EAAE,UAAU,CAAC,CAAA;CAAC,CAAe;AAqkBxI;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,EAAC,QAAQ,EAAE,MAAM,EAAC,EAHnC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAGE,GAFjC,OAAO,sBAAsB,EAAE,cAAc,CAoEzD"}
1
+ {"version":3,"file":"python.d.ts","sourceRoot":"","sources":["../../../src/frontends/python.js"],"names":[],"mappings":"AAoCI,YAAuH,aAAa,GAA1H;IAAC,QAAQ,EAAE,OAAO,aAAa,EAAE,UAAU,EAAE,CAAC;IAAC,oBAAoB,EAAE,GAAG,CAAC,OAAO,aAAa,EAAE,UAAU,CAAC,CAAA;CAAC,CAAe;AAumBxI;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,EAAC,QAAQ,EAAE,MAAM,EAAC,EAHnC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAGE,GAFjC,OAAO,sBAAsB,EAAE,cAAc,CAoEzD"}
@@ -4,8 +4,8 @@ import PythonLanguage from "tree-sitter-python";
4
4
  import { missingType, parseFailure, SemantifoldDiagnostic, unsupportedSyntax } from "../diagnostic.js";
5
5
  import { locationFromOffsets, moduleLocation, utf8ByteOffsetToUtf16Offset } from "../semantic/location.js";
6
6
  import { withAdaptedOperation } from "../semantic/operators.js";
7
- import { withParserRanges } from "../semantic/provenance.js";
8
- import { hasOnlyUnicodeScalars } from "../semantic/scalars.js";
7
+ import { setParserRanges, withParserRanges } from "../semantic/provenance.js";
8
+ import { hasOnlyUnicodeScalars, voidType } from "../semantic/scalars.js";
9
9
  import { requireSourceScalarType } from "./scalars.js";
10
10
  const parser = new Parser();
11
11
  parser.setLanguage(/** @type {import("tree-sitter").Language} */ ( /** @type {unknown} */(PythonLanguage)));
@@ -148,6 +148,27 @@ function convertType(node, subject, ownerLocation, filename, source) {
148
148
  }
149
149
  return requireSourceScalarType("python", children[0].text, subject, ownerLocation, typeLocation);
150
150
  }
151
+ /**
152
+ * Converts one exact scalar or Task 005 `None` function-return annotation.
153
+ * @param {import("tree-sitter").SyntaxNode | null} node - Return type node, if present.
154
+ * @param {string} subject - Typed function return.
155
+ * @param {import("../semantic/types.js").SourceLocation} ownerLocation - Owning function.
156
+ * @param {string} filename - Source filename.
157
+ * @param {string} source - Complete source.
158
+ * @returns {import("../semantic/types.js").SemanticFunctionReturnType} Semantic return type.
159
+ */
160
+ function convertReturnType(node, subject, ownerLocation, filename, source) {
161
+ if (!node)
162
+ return missingType("python", subject, ownerLocation);
163
+ const typeLocation = nodeLocation(node, filename, source);
164
+ const children = node.namedChildren.filter((child) => child.type != "comment");
165
+ if (node.type == "type" && children.length == 1 && children[0].type == "none" && node.text == "None") {
166
+ const type = voidType();
167
+ setParserRanges(type, { type: typeLocation });
168
+ return type;
169
+ }
170
+ return convertType(node, subject, ownerLocation, filename, source);
171
+ }
151
172
  /**
152
173
  * Finds exactly one anonymous operator token directly owned by a parser node.
153
174
  * @param {import("tree-sitter").SyntaxNode} node - Operation node.
@@ -384,8 +405,10 @@ function convertStatement(node, context, visible, filename, source) {
384
405
  const location = nodeLocation(node, filename, source);
385
406
  if (node.type == "return_statement") {
386
407
  const expressions = node.namedChildren.filter((child) => child.type != "comment");
387
- if (expressions.length != 1)
388
- return unsupportedSyntax("python", "return without one expression", location);
408
+ if (expressions.length > 1)
409
+ return unsupportedSyntax("python", "return with more than one expression", location);
410
+ if (expressions.length == 0)
411
+ return { kind: "ReturnStatement", location };
389
412
  return { expression: convertExpression(expressions[0], filename, source), kind: "ReturnStatement", location };
390
413
  }
391
414
  if (node.type == "if_statement")
@@ -396,7 +419,14 @@ function convertStatement(node, context, visible, filename, source) {
396
419
  return unsupportedSyntax("python", node.type, location);
397
420
  if (expressions[0].type == "assignment")
398
421
  return convertAssignment(expressions[0], context, visible, filename, source);
399
- return convertPrint(expressions[0], filename, source, location);
422
+ if (expressions[0].type == "call") {
423
+ const calleeNode = requiredField(expressions[0], "function", filename, source);
424
+ if (calleeNode.type == "identifier" && calleeNode.text == "print")
425
+ return convertPrint(expressions[0], filename, source, location);
426
+ const call = /** @type {import("../semantic/types.js").CallExpression} */ (convertExpression(expressions[0], filename, source));
427
+ return { expression: call, kind: /** @type {const} */ ("ExpressionStatement"), location };
428
+ }
429
+ return unsupportedSyntax("python", "expression statement other than assignment, print, or direct call", location);
400
430
  }
401
431
  return unsupportedSyntax("python", node.type, location);
402
432
  }
@@ -544,7 +574,7 @@ function convertFunction(node, context, filename, source) {
544
574
  location,
545
575
  name,
546
576
  parameters,
547
- returnType: convertType(returnNode, `Function '${name}' return`, location, filename, source)
577
+ returnType: convertReturnType(returnNode, `Function '${name}' return`, location, filename, source)
548
578
  }, { name: nodeLocation(nameNode, filename, source) });
549
579
  }
550
580
  /**
@@ -612,4 +642,4 @@ export function parsePython({ filename, source }) {
612
642
  location
613
643
  };
614
644
  }
615
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHl0aG9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Zyb250ZW5kcy9weXRob24uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sTUFBTSxNQUFNLGFBQWEsQ0FBQTtBQUNoQyxPQUFPLGNBQWMsTUFBTSxvQkFBb0IsQ0FBQTtBQUMvQyxPQUFPLEVBQUMsV0FBVyxFQUFFLFlBQVksRUFBRSxxQkFBcUIsRUFBRSxpQkFBaUIsRUFBQyxNQUFNLGtCQUFrQixDQUFBO0FBQ3BHLE9BQU8sRUFBQyxtQkFBbUIsRUFBRSxjQUFjLEVBQUUsMkJBQTJCLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQTtBQUN4RyxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQTtBQUM3RCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQTtBQUMxRCxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQTtBQUM1RCxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSxjQUFjLENBQUE7QUFFcEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxNQUFNLEVBQUUsQ0FBQTtBQUUzQixNQUFNLENBQUMsV0FBVyxDQUFDLDZDQUE2QyxDQUFDLEVBQUMsc0JBQXVCLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBRTNHLE1BQU0sZUFBZSxHQUFHLDBCQUEwQixDQUFBO0FBQ2xELE1BQU0seUJBQXlCLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDeEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxVQUFVO0lBQ3RHLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFB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QUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0tBQzFILENBQUE7SUFDRCxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLGVBQWUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQTtJQUU5SCxJQUFJLFlBQVk7UUFBRSxPQUFPLGlCQUFpQixDQUFDLFFBQVEsRUFBRSw2QkFBNkIsRUFBRSxZQUFZLENBQUMsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO0lBQ2pJLElBQUksU0FBUyxDQUFDLE1BQU0sSUFBSSxDQUFDO1FBQUUsT0FBTyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsMkJBQTJCLEVBQUUsUUFBUSxDQUFDLENBQUE7SUFFcEcsT0FBTztRQUNMLFVBQVUsRUFBRSxFQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFDO1FBQzNFLFNBQVM7UUFDVCxJQUFJLEVBQUUsUUFBUTtRQUNkLFFBQVE7S0FDVCxDQUFBO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgUGFyc2VyIGZyb20gXCJ0cmVlLXNpdHRlclwiXG5pbXBvcnQgUHl0aG9uTGFuZ3VhZ2UgZnJvbSBcInRyZWUtc2l0dGVyLXB5dGhvblwiXG5pbXBvcnQge21pc3NpbmdUeXBlLCBwYXJzZUZhaWx1cmUsIFNlbWFudGlmb2xkRGlhZ25vc3RpYywgdW5zdXBwb3J0ZWRTeW50YXh9IGZyb20gXCIuLi9kaWFnbm9zdGljLmpzXCJcbmltcG9ydCB7bG9jYXRpb25Gcm9tT2Zmc2V0cywgbW9kdWxlTG9jYXRpb24sIHV0ZjhCeXRlT2Zmc2V0VG9VdGYxNk9mZnNldH0gZnJvbSBcIi4uL3NlbWFudGljL2xvY2F0aW9uLmpzXCJcbmltcG9ydCB7d2l0aEFkYXB0ZWRPcGVyYXRpb259IGZyb20gXCIuLi9zZW1hbnRpYy9vcGVyYXRvcnMuanNcIlxuaW1wb3J0IHt3aXRoUGFyc2VyUmFuZ2VzfSBmcm9tIFwiLi4vc2VtYW50aWMvcHJvdmVuYW5jZS5qc1wiXG5pbXBvcnQge2hhc09ubHlVbmljb2RlU2NhbGFyc30gZnJvbSBcIi4uL3NlbWFudGljL3NjYWxhcnMuanNcIlxuaW1wb3J0IHtyZXF1aXJlU291cmNlU2NhbGFyVHlwZX0gZnJvbSBcIi4vc2NhbGFycy5qc1wiXG5cbmNvbnN0IHBhcnNlciA9IG5ldyBQYXJzZXIoKVxuXG5wYXJzZXIuc2V0TGFuZ3VhZ2UoLyoqIEB0eXBlIHtpbXBvcnQoXCJ0cmVlLXNpdHRlclwiKS5MYW5ndWFnZX0gKi8gKC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gKFB5dGhvbkxhbmd1YWdlKSkpXG5cbmNvbnN0IGltbXV0YWJsZU1hcmtlciA9IFwiIyBAc2VtYW50aWZvbGQtaW1tdXRhYmxlXCJcbmNvbnN0IHB5dGhvblJlc2VydmVkSWRlbnRpZmllcnMgPSBuZXcgU2V0KFtcbiAgXCJGYWxzZVwiLCBcIk5vbmVcIiwgXCJUcnVlXCIsIFwiYW5kXCIsIFwiYXNcIiwgXCJhc3NlcnRcIiwgXCJhc3luY1wiLCBcImF3YWl0XCIsIFwiYnJlYWtcIiwgXCJjYXNlXCIsIFwiY2xhc3NcIiwgXCJjb250aW51ZVwiLFxuICBcImRlZlwiLCBcImRlbFwiLCBcImVsaWZcIiwgXCJlbHNlXCIsIFwiZXhjZXB0XCIsIFwiZXhlY1wiLCBcImZpbmFsbHlcIiwgXCJmb3JcIiwgXCJmcm9tXCIsIFwiZ2xvYmFsXCIsIFwiaWZcIiwgXCJpbXBvcnRcIiwgXCJpblwiLFxuICBcImlzXCIsIFwibGFtYmRhXCIsIFwibWF0Y2hcIiwgXCJub25sb2NhbFwiLCBcIm5vdFwiLCBcIm9yXCIsIFwicGFzc1wiLCBcInByaW50XCIsIFwicmFpc2VcIiwgXCJyZXR1cm5cIiwgXCJ0cnlcIiwgXCJ0eXBlXCIsXG4gIFwid2hpbGVcIiwgXCJ3aXRoXCIsIFwieWllbGRcIiwgXCJfXCIsIFwiX19kZWJ1Z19fXCIsIFwiaW50XCIsIFwiYm9vbFwiLCBcInN0clwiXG5dKVxuY29uc3QgYmluYXJ5T3BlcmF0aW9ucyA9IG5ldyBNYXAoW1xuICBbXCIrXCIsIFwiQWRkXCJdLFxuICBbXCItXCIsIFwiU3VidHJhY3RcIl0sXG4gIFtcIipcIiwgXCJNdWx0aXBseVwiXVxuXSlcbmNvbnN0IGNvbXBhcmlzb25PcGVyYXRpb25zID0gbmV3IE1hcChbXG4gIFtcIj09XCIsIFwiRXF1YWxcIl0sXG4gIFtcIiE9XCIsIFwiTm90RXF1YWxcIl0sXG4gIFtcIjxcIiwgXCJMZXNzVGhhblwiXSxcbiAgW1wiPD1cIiwgXCJMZXNzVGhhbk9yRXF1YWxcIl0sXG4gIFtcIj5cIiwgXCJHcmVhdGVyVGhhblwiXSxcbiAgW1wiPj1cIiwgXCJHcmVhdGVyVGhhbk9yRXF1YWxcIl1cbl0pXG5cbi8qKiBAdHlwZWRlZiB7e2NvbW1lbnRzOiBpbXBvcnQoXCJ0cmVlLXNpdHRlclwiKS5TeW50YXhOb2RlW10sIHVzZWRJbW11dGFibGVNYXJrZXJzOiBTZXQ8aW1wb3J0KFwidHJlZS1zaXR0ZXJcIikuU3ludGF4Tm9kZT59fSBQeXRob25Db250ZXh0ICovXG5cbi8qKlxuICogUm91dGVzIHRoZSBiaW5kaW5nJ3MgVVRGLTE2IGluZGV4IHRocm91Z2ggdGhlIHNoYXJlZCBVVEYtOCBieXRlIGNvbnZlcnRlci5cbiAqIG5vZGUtdHJlZS1zaXR0ZXIgcGFyc2VzIEphdmFTY3JpcHQgc3RyaW5ncyBhcyBVVEYtMTZMRSBhbmQgZXhwb3NlcyBjb2RlLXVuaXRcbiAqIGluZGV4ZXMgZXZlbiB0aG91Z2ggdGhlIGdyYW1tYXIncyBuYXRpdmUgY29vcmRpbmF0ZSBjb250cmFjdCBpcyBieXRlLWJhc2VkLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCAtIEJpbmRpbmcgVVRGLTE2IGluZGV4LlxuICogQHJldHVybnMge251bWJlcn0gVmVyaWZpZWQgVVRGLTE2IG9mZnNldC5cbiAqL1xuZnVuY3Rpb24gYmluZGluZ0luZGV4VG9VdGYxNk9mZnNldChzb3VyY2UsIGluZGV4KSB7XG4gIGlmICghTnVtYmVyLmlzSW50ZWdlcihpbmRleCkgfHwgaW5kZXggPCAwIHx8IGluZGV4ID4gc291cmNlLmxlbmd0aCB8fFxuICAgIGluZGV4ID4gMCAmJiBpbmRleCA8IHNvdXJjZS5sZW5ndGggJiYgL1tcXHVEODAwLVxcdURCRkZdL3UudGVzdChzb3VyY2VbaW5kZXggLSAxXSkgJiYgL1tcXHVEQzAwLVxcdURGRkZdL3UudGVzdChzb3VyY2VbaW5kZXhdKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBJbnZhbGlkIFRyZWUtc2l0dGVyIHNvdXJjZSBpbmRleDogJHtpbmRleH1gKVxuICB9XG4gIGNvbnN0IGJ5dGVPZmZzZXQgPSBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoc291cmNlLnNsaWNlKDAsIGluZGV4KSkubGVuZ3RoXG5cbiAgcmV0dXJuIHV0ZjhCeXRlT2Zmc2V0VG9VdGYxNk9mZnNldChzb3VyY2UsIGJ5dGVPZmZzZXQpXG59XG5cbi8qKlxuICogRmluZHMgdGhlIGZpcnN0IHVucGFpcmVkIFVURi0xNiBzdXJyb2dhdGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge251bWJlcn0gSW52YWxpZCBvZmZzZXQsIG9yIC0xLlxuICovXG5mdW5jdGlvbiBmaXJzdExvbmVTdXJyb2dhdGVPZmZzZXQoc291cmNlKSB7XG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBzb3VyY2UubGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgY29uc3QgdW5pdCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KVxuXG4gICAgaWYgKHVuaXQgPj0gMHhEODAwICYmIHVuaXQgPD0gMHhEQkZGKSB7XG4gICAgICBjb25zdCBuZXh0ID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXggKyAxKVxuXG4gICAgICBpZiAobmV4dCA+PSAweERDMDAgJiYgbmV4dCA8PSAweERGRkYpIGluZGV4ICs9IDFcbiAgICAgIGVsc2UgcmV0dXJuIGluZGV4XG4gICAgfSBlbHNlIGlmICh1bml0ID49IDB4REMwMCAmJiB1bml0IDw9IDB4REZGRikgcmV0dXJuIGluZGV4XG4gIH1cblxuICByZXR1cm4gLTFcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIFRyZWUtc2l0dGVyIGJ5dGUgcmFuZ2UgaW50byBTZW1hbnRpZm9sZCdzIFVURi0xNiBjb29yZGluYXRlcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwidHJlZS1zaXR0ZXJcIikuU3ludGF4Tm9kZX0gbm9kZSAtIFBhcnNlciBub2RlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gRXhhY3QgbG9jYXRpb24uXG4gKi9cbmZ1bmN0aW9uIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIHJldHVybiBsb2NhdGlvbkZyb21PZmZzZXRzKFxuICAgIGZpbGVuYW1lLFxuICAgIHNvdXJjZSxcbiAgICBiaW5kaW5nSW5kZXhUb1V0ZjE2T2Zmc2V0KHNvdXJjZSwgbm9kZS5zdGFydEluZGV4KSxcbiAgICBiaW5kaW5nSW5kZXhUb1V0ZjE2T2Zmc2V0KHNvdXJjZSwgbm9kZS5lbmRJbmRleClcbiAgKVxufVxuXG4vKipcbiAqIFJlcXVpcmVzIG9uZSBwYXJzZXIgZmllbGQuXG4gKiBAcGFyYW0ge2ltcG9ydChcInRyZWUtc2l0dGVyXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBGaWVsZCBvd25lci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZCAtIEdyYW1tYXIgZmllbGQgbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwidHJlZS1zaXR0ZXJcIikuU3ludGF4Tm9kZX0gRmllbGQgbm9kZS5cbiAqL1xuZnVuY3Rpb24gcmVxdWlyZWRGaWVsZChub2RlLCBmaWVsZCwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBjb25zdCBjaGlsZCA9IG5vZGUuY2hpbGRGb3JGaWVsZE5hbWUoZmllbGQpXG5cbiAgaWYgKCFjaGlsZCkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicHl0aG9uXCIsIGAke25vZGUudHlwZX0gd2l0aG91dCAke2ZpZWxkfWAsIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSlcblxuICByZXR1cm4gY2hpbGRcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgZXZlcnkgbmFtZWQgYW5kIGFub255bW91cyBwYXJzZXIgY2hpbGQgYW5kIHJlamVjdHMgcmVjb3ZlcnkuXG4gKiBAcGFyYW0ge2ltcG9ydChcInRyZWUtc2l0dGVyXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBDdXJyZW50IHBhcnNlciBub2RlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVBhcnNlclRyZWUobm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBpZiAobm9kZS5pc0Vycm9yIHx8IG5vZGUuaXNNaXNzaW5nKSB7XG4gICAgdGhyb3cgbmV3IFNlbWFudGlmb2xkRGlhZ25vc3RpYyh7XG4gICAgICBjb2RlOiBcIlBBUlNFX0VSUk9SXCIsXG4gICAgICBsYW5ndWFnZTogXCJweXRob25cIixcbiAgICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICBtZXNzYWdlOiBgVHJlZS1zaXR0ZXIgZXhwb3NlZCAke25vZGUuaXNNaXNzaW5nID8gXCJhIG1pc3NpbmdcIiA6IFwiYW4gZXJyb3JcIn0gcmVjb3Zlcnkgbm9kZSAnJHtub2RlLnR5cGV9Jy5gXG4gICAgfSlcbiAgfVxuXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBub2RlLmNoaWxkQ291bnQ7IGluZGV4ICs9IDEpIHtcbiAgICBjb25zdCBjaGlsZCA9IG5vZGUuY2hpbGQoaW5kZXgpXG5cbiAgICBpZiAoIWNoaWxkKSB0aHJvdyBuZXcgRXJyb3IoYFRyZWUtc2l0dGVyIG9taXR0ZWQgY2hpbGQgJHtpbmRleH0gb2YgJHtub2RlLnR5cGV9LmApXG4gICAgdmFsaWRhdGVQYXJzZXJUcmVlKGNoaWxkLCBmaWxlbmFtZSwgc291cmNlKVxuICB9XG59XG5cbi8qKlxuICogUmVqZWN0cyBQeXRob24gaWRlbnRpZmllcnMgdGhhdCBjYW5ub3Qgc2FmZWx5IHBhcnRpY2lwYXRlIGluIHRoZSBleGFjdCBwcm9maWxlLlxuICogQHBhcmFtIHtpbXBvcnQoXCJ0cmVlLXNpdHRlclwiKS5TeW50YXhOb2RlfSBub2RlIC0gSWRlbnRpZmllciBub2RlLlxuICogQHBhcmFtIHtzdHJpbmd9IHJvbGUgLSBEaWFnbm9zdGljIHJvbGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge3N0cmluZ30gQWNjZXB0ZWQgbmFtZS5cbiAqL1xuZnVuY3Rpb24gaWRlbnRpZmllcihub2RlLCByb2xlLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGNvbnN0IG5hbWUgPSBub2RlLnRleHRcblxuICBpZiAobm9kZS50eXBlICE9IFwiaWRlbnRpZmllclwiIHx8IHB5dGhvblJlc2VydmVkSWRlbnRpZmllcnMuaGFzKG5hbWUpIHx8IG5hbWUubm9ybWFsaXplKFwiTkZLQ1wiKSAhPSBuYW1lKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicHl0aG9uXCIsIGAke3JvbGV9IGlkZW50aWZpZXIgJyR7bmFtZX0nYCwgbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG5cbiAgcmV0dXJuIG5hbWVcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgZXhhY3QgaW50L2Jvb2wvc3RyIGFubm90YXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcInRyZWUtc2l0dGVyXCIpLlN5bnRheE5vZGUgfCBudWxsfSBub2RlIC0gVHlwZSBub2RlLCBpZiBwcmVzZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IHN1YmplY3QgLSBUeXBlZCBzdWJqZWN0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gb3duZXJMb2NhdGlvbiAtIE93bmluZyBkZWNsYXJhdGlvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHlwZVJlZmVyZW5jZX0gU2VtYW50aWMgdHlwZS5cbiAqL1xuZnVuY3Rpb24gY29udmVydFR5cGUobm9kZSwgc3ViamVjdCwgb3duZXJMb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBpZiAoIW5vZGUpIHJldHVybiBtaXNzaW5nVHlwZShcInB5dGhvblwiLCBzdWJqZWN0LCBvd25lckxvY2F0aW9uKVxuICBjb25zdCB0eXBlTG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgY2hpbGRyZW4gPSBub2RlLm5hbWVkQ2hpbGRyZW4uZmlsdGVyKChjaGlsZCkgPT4gY2hpbGQudHlwZSAhPSBcImNvbW1lbnRcIilcblxuICBpZiAobm9kZS50eXBlICE9IFwidHlwZVwiIHx8IGNoaWxkcmVuLmxlbmd0aCAhPSAxIHx8IGNoaWxkcmVuWzBdLnR5cGUgIT0gXCJpZGVudGlmaWVyXCIgfHxcbiAgICAhW1wiaW50XCIsIFwiYm9vbFwiLCBcInN0clwiXS5pbmNsdWRlcyhjaGlsZHJlblswXS50ZXh0KSB8fCBub2RlLnRleHQgIT0gY2hpbGRyZW5bMF0udGV4dCkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInB5dGhvblwiLCBcInVuc3VwcG9ydGVkIHNjYWxhciBhbm5vdGF0aW9uXCIsIHR5cGVMb2NhdGlvbilcbiAgfVxuXG4gIHJldHVybiByZXF1aXJlU291cmNlU2NhbGFyVHlwZShcInB5dGhvblwiLCBjaGlsZHJlblswXS50ZXh0LCBzdWJqZWN0LCBvd25lckxvY2F0aW9uLCB0eXBlTG9jYXRpb24pXG59XG5cbi8qKlxuICogRmluZHMgZXhhY3RseSBvbmUgYW5vbnltb3VzIG9wZXJhdG9yIHRva2VuIGRpcmVjdGx5IG93bmVkIGJ5IGEgcGFyc2VyIG5vZGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcInRyZWUtc2l0dGVyXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBPcGVyYXRpb24gbm9kZS5cbiAqIEBwYXJhbSB7U2V0PHN0cmluZz59IHNwZWxsaW5ncyAtIEFjY2VwdGVkIHNwZWxsaW5ncy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwidHJlZS1zaXR0ZXJcIikuU3ludGF4Tm9kZX0gT3BlcmF0b3IgdG9rZW4uXG4gKi9cbmZ1bmN0aW9uIG9wZXJhdG9yVG9rZW4obm9kZSwgc3BlbGxpbmdzLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGNvbnN0IHRva2VucyA9IG5vZGUuY2hpbGRyZW4uZmlsdGVyKChjaGlsZCkgPT4gIWNoaWxkLmlzTmFtZWQgJiYgc3BlbGxpbmdzLmhhcyhjaGlsZC50eXBlKSlcblxuICBpZiAodG9rZW5zLmxlbmd0aCAhPSAxKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJweXRob25cIiwgYCR7bm9kZS50eXBlfSBvcGVyYXRvcmAsIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSlcblxuICByZXR1cm4gdG9rZW5zWzBdXG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIHN1cHBvcnRlZCBQeXRob24gZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwidHJlZS1zaXR0ZXJcIikuU3ludGF4Tm9kZX0gbm9kZSAtIEV4cHJlc3Npb24gbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gU2VtYW50aWMgZXhwcmVzc2lvbi5cbiAqL1xuZnVuY3Rpb24gY29udmVydEV4cHJlc3Npb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmIChub2RlLnR5cGUgPT0gXCJwYXJlbnRoZXNpemVkX2V4cHJlc3Npb25cIikge1xuICAgIGNvbnN0IGV4cHJlc3Npb25zID0gbm9kZS5uYW1lZENoaWxkcmVuLmZpbHRlcigoY2hpbGQpID0+IGNoaWxkLnR5cGUgIT0gXCJjb21tZW50XCIpXG5cbiAgICBpZiAoZXhwcmVzc2lvbnMubGVuZ3RoICE9IDEpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInB5dGhvblwiLCBub2RlLnR5cGUsIGxvY2F0aW9uKVxuXG4gICAgcmV0dXJuIGNvbnZlcnRFeHByZXNzaW9uKGV4cHJlc3Npb25zWzBdLCBmaWxlbmFtZSwgc291cmNlKVxuICB9XG4gIGlmIChub2RlLnR5cGUgPT0gXCJpZGVudGlmaWVyXCIpIHtcbiAgICBjb25zdCBuYW1lID0gaWRlbnRpZmllcihub2RlLCBcInJlZmVyZW5jZVwiLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIklkZW50aWZpZXJFeHByZXNzaW9uXCIpLCBsb2NhdGlvbiwgbmFtZX0sIHtuYW1lOiBsb2NhdGlvbn0pXG4gIH1cbiAgaWYgKG5vZGUudHlwZSA9PSBcImludGVnZXJcIikge1xuICAgIGxldCB2YWx1ZVxuXG4gICAgdHJ5IHtcbiAgICAgIHZhbHVlID0gTnVtYmVyKEJpZ0ludChub2RlLnRleHQucmVwbGFjZUFsbChcIl9cIiwgXCJcIikpKVxuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicHl0aG9uXCIsIFwiaW50ZWdlciBsaXRlcmFsXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICBpZiAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKHZhbHVlKSkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicHl0aG9uXCIsIFwibm9uLXNhZmUgaW50ZWdlciBsaXRlcmFsXCIsIGxvY2F0aW9uKVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkludGVnZXJMaXRlcmFsXCIpLCBsb2NhdGlvbiwgdmFsdWV9LCB7bGl0ZXJhbDogbG9jYXRpb259KVxuICB9XG4gIGlmIChub2RlLnR5cGUgPT0gXCJ0cnVlXCIgfHwgbm9kZS50eXBlID09IFwiZmFsc2VcIikge1xuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJCb29sZWFuTGl0ZXJhbFwiKSwgbG9jYXRpb24sIHZhbHVlOiBub2RlLnR5cGUgPT0gXCJ0cnVlXCJ9LCB7bGl0ZXJhbDogbG9jYXRpb259KVxuICB9XG4gIGlmIChub2RlLnR5cGUgPT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJTdHJpbmdMaXRlcmFsXCIpLCBsb2NhdGlvbiwgdmFsdWU6IGRlY29kZVN0cmluZyhub2RlLCBmaWxlbmFtZSwgc291cmNlKX0sIHtcbiAgICAgIGxpdGVyYWw6IGxvY2F0aW9uXG4gICAgfSlcbiAgfVxuICBpZiAobm9kZS50eXBlID09IFwiY29uY2F0ZW5hdGVkX3N0cmluZ1wiKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJweXRob25cIiwgXCJpbXBsaWNpdCBzdHJpbmcgY29uY2F0ZW5hdGlvblwiLCBsb2NhdGlvbilcbiAgaWYgKG5vZGUudHlwZSA9PSBcInVuYXJ5X29wZXJhdG9yXCIpIHtcbiAgICBjb25zdCBvcGVyYW5kTm9kZSA9IHJlcXVpcmVkRmllbGQobm9kZSwgXCJhcmd1bWVudFwiLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IG9wZXJhdG9yID0gb3BlcmF0b3JUb2tlbihub2RlLCBuZXcgU2V0KFtcIi1cIl0pLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IHNlbWFudGljID0gd2l0aEFkYXB0ZWRPcGVyYXRpb24od2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBraW5kOiBcIlVuYXJ5RXhwcmVzc2lvblwiLFxuICAgICAgbG9jYXRpb24sXG4gICAgICBvcGVyYW5kOiBjb252ZXJ0RXhwcmVzc2lvbihvcGVyYW5kTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICB9LCB7b3BlcmF0b3I6IG5vZGVMb2NhdGlvbihvcGVyYXRvciwgZmlsZW5hbWUsIHNvdXJjZSl9KSwgXCJOZWdhdGVcIilcblxuICAgIHJldHVybiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb259ICovICgvKiogQHR5cGUge3Vua25vd259ICovIChzZW1hbnRpYykpXG4gIH1cbiAgaWYgKG5vZGUudHlwZSA9PSBcIm5vdF9vcGVyYXRvclwiKSB7XG4gICAgY29uc3Qgb3BlcmFuZE5vZGUgPSByZXF1aXJlZEZpZWxkKG5vZGUsIFwiYXJndW1lbnRcIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICBjb25zdCBvcGVyYXRvciA9IG9wZXJhdG9yVG9rZW4obm9kZSwgbmV3IFNldChbXCJub3RcIl0pLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IHNlbWFudGljID0gd2l0aEFkYXB0ZWRPcGVyYXRpb24od2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBraW5kOiBcIlVuYXJ5RXhwcmVzc2lvblwiLFxuICAgICAgbG9jYXRpb24sXG4gICAgICBvcGVyYW5kOiBjb252ZXJ0RXhwcmVzc2lvbihvcGVyYW5kTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICB9LCB7b3BlcmF0b3I6IG5vZGVMb2NhdGlvbihvcGVyYXRvciwgZmlsZW5hbWUsIHNvdXJjZSl9KSwgXCJOb3RcIilcblxuICAgIHJldHVybiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb259ICovICgvKiogQHR5cGUge3Vua25vd259ICovIChzZW1hbnRpYykpXG4gIH1cbiAgaWYgKG5vZGUudHlwZSA9PSBcImJpbmFyeV9vcGVyYXRvclwiIHx8IG5vZGUudHlwZSA9PSBcImNvbXBhcmlzb25fb3BlcmF0b3JcIiB8fCBub2RlLnR5cGUgPT0gXCJib29sZWFuX29wZXJhdG9yXCIpIHtcbiAgICBjb25zdCBleHByZXNzaW9uQ2hpbGRyZW4gPSBub2RlLm5hbWVkQ2hpbGRyZW4uZmlsdGVyKChjaGlsZCkgPT4gY2hpbGQudHlwZSAhPSBcImNvbW1lbnRcIilcbiAgICBjb25zdCBsZWZ0Tm9kZSA9IG5vZGUuY2hpbGRGb3JGaWVsZE5hbWUoXCJsZWZ0XCIpID8/IGV4cHJlc3Npb25DaGlsZHJlblswXVxuICAgIGNvbnN0IHJpZ2h0Tm9kZSA9IG5vZGUuY2hpbGRGb3JGaWVsZE5hbWUoXCJyaWdodFwiKSA/PyBleHByZXNzaW9uQ2hpbGRyZW5bMV1cblxuICAgIGlmICghbGVmdE5vZGUgfHwgIXJpZ2h0Tm9kZSkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicHl0aG9uXCIsIG5vZGUudHlwZSwgbG9jYXRpb24pXG4gICAgY29uc3Qgb3BlcmF0aW9ucyA9IG5vZGUudHlwZSA9PSBcImJpbmFyeV9vcGVyYXRvclwiID8gYmluYXJ5T3BlcmF0aW9ucyA6IG5vZGUudHlwZSA9PSBcImNvbXBhcmlzb25fb3BlcmF0b3JcIlxuICAgICAgPyBjb21wYXJpc29uT3BlcmF0aW9ucyA6IG5ldyBNYXAoW1tcImFuZFwiLCBcIkFuZFwiXSwgW1wib3JcIiwgXCJPclwiXV0pXG4gICAgY29uc3Qgb3BlcmF0b3IgPSBvcGVyYXRvclRva2VuKG5vZGUsIG5ldyBTZXQob3BlcmF0aW9ucy5rZXlzKCkpLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IGFkYXB0ZWQgPSBvcGVyYXRpb25zLmdldChvcGVyYXRvci50eXBlKVxuXG4gICAgaWYgKCFhZGFwdGVkIHx8IGV4cHJlc3Npb25DaGlsZHJlbi5sZW5ndGggIT0gMikge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicHl0aG9uXCIsIG5vZGUudHlwZSwgbG9jYXRpb24pXG4gICAgfVxuICAgIGNvbnN0IHNlbWFudGljID0gd2l0aEFkYXB0ZWRPcGVyYXRpb24od2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBraW5kOiBcIkJpbmFyeUV4cHJlc3Npb25cIixcbiAgICAgIGxlZnQ6IGNvbnZlcnRFeHByZXNzaW9uKGxlZnROb2RlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgcmlnaHQ6IGNvbnZlcnRFeHByZXNzaW9uKHJpZ2h0Tm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICB9LCB7b3BlcmF0b3I6IG5vZGVMb2NhdGlvbihvcGVyYXRvciwgZmlsZW5hbWUsIHNvdXJjZSl9KSwgLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy9vcGVyYXRvcnMuanNcIikuQWRhcHRlZE9wZXJhdGlvbn0gKi8gKGFkYXB0ZWQpKVxuXG4gICAgcmV0dXJuIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gKi8gKC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gKHNlbWFudGljKSlcbiAgfVxuICBpZiAobm9kZS50eXBlID09IFwiY2FsbFwiKSB7XG4gICAgY29uc3QgY2FsbGVlTm9kZSA9IHJlcXVpcmVkRmllbGQobm9kZSwgXCJmdW5jdGlvblwiLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IGFyZ3VtZW50c05vZGUgPSByZXF1aXJlZEZpZWxkKG5vZGUsIFwiYXJndW1lbnRzXCIsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICBpZiAoY2FsbGVlTm9kZS50eXBlICE9IFwiaWRlbnRpZmllclwiIHx8IGFyZ3VtZW50c05vZGUudHlwZSAhPSBcImFyZ3VtZW50X2xpc3RcIikge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicHl0aG9uXCIsIFwiZHluYW1pYyBjYWxsXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICBjb25zdCBjYWxsZWUgPSBpZGVudGlmaWVyKGNhbGxlZU5vZGUsIFwiY2FsbGVlXCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgY29uc3QgYXJndW1lbnRzXyA9IGFyZ3VtZW50c05vZGUubmFtZWRDaGlsZHJlbi5maWx0ZXIoKGNoaWxkKSA9PiBjaGlsZC50eXBlICE9IFwiY29tbWVudFwiKVxuICAgICAgLm1hcCgoYXJndW1lbnQpID0+IGNvbnZlcnRFeHByZXNzaW9uKGFyZ3VtZW50LCBmaWxlbmFtZSwgc291cmNlKSlcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHthcmd1bWVudHM6IGFyZ3VtZW50c18sIGNhbGxlZSwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiQ2FsbEV4cHJlc3Npb25cIiksIGxvY2F0aW9ufSwge1xuICAgICAgY2FsbGVlOiBub2RlTG9jYXRpb24oY2FsbGVlTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICB9KVxuICB9XG5cbiAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicHl0aG9uXCIsIG5vZGUudHlwZSwgbG9jYXRpb24pXG59XG5cbi8qKlxuICogRGVjb2RlcyBvbmUgbm9uLXByZWZpeGVkLCBub24tdHJpcGxlIFB5dGhvbiBzdHJpbmcgd2l0aG91dCBldmFsdWF0aW5nIHNvdXJjZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwidHJlZS1zaXR0ZXJcIikuU3ludGF4Tm9kZX0gbm9kZSAtIFN0cmluZyBub2RlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFVuaWNvZGUgc2NhbGFyIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gZGVjb2RlU3RyaW5nKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgdGV4dCA9IG5vZGUudGV4dFxuICBjb25zdCBxdW90ZSA9IHRleHRbMF1cblxuICBpZiAoKHF1b3RlICE9IFwiXFxcIlwiICYmIHF1b3RlICE9IFwiJ1wiKSB8fCB0ZXh0LmF0KC0xKSAhPSBxdW90ZSB8fCB0ZXh0LnN0YXJ0c1dpdGgoYCR7cXVvdGV9JHtxdW90ZX0ke3F1b3RlfWApKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicHl0aG9uXCIsIFwicHJlZml4ZWQgb3IgdHJpcGxlLXF1b3RlZCBzdHJpbmdcIiwgbG9jYXRpb24pXG4gIH1cbiAgbGV0IGRlY29kZWQgPSBcIlwiXG5cbiAgZm9yIChsZXQgaW5kZXggPSAxOyBpbmRleCA8IHRleHQubGVuZ3RoIC0gMTsgaW5kZXggKz0gMSkge1xuICAgIGNvbnN0IGNoYXJhY3RlciA9IHRleHRbaW5kZXhdXG5cbiAgICBpZiAoY2hhcmFjdGVyICE9IFwiXFxcXFwiKSB7XG4gICAgICBkZWNvZGVkICs9IGNoYXJhY3RlclxuICAgICAgY29udGludWVcbiAgICB9XG4gICAgY29uc3QgZXNjYXBlID0gdGV4dFsrK2luZGV4XVxuXG4gICAgaWYgKGVzY2FwZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJweXRob25cIiwgXCJpbnZhbGlkIHN0cmluZyBlc2NhcGVcIiwgbG9jYXRpb24pXG4gICAgY29uc3Qgc2ltcGxlID0gbmV3IE1hcChbXG4gICAgICBbXCJcXFxcXCIsIFwiXFxcXFwiXSwgW1wiJ1wiLCBcIidcIl0sIFtcIlxcXCJcIiwgXCJcXFwiXCJdLCBbXCJhXCIsIFwiXFx1MDAwN1wiXSwgW1wiYlwiLCBcIlxcYlwiXSwgW1wiZlwiLCBcIlxcZlwiXSwgW1wiblwiLCBcIlxcblwiXSxcbiAgICAgIFtcInJcIiwgXCJcXHJcIl0sIFtcInRcIiwgXCJcXHRcIl0sIFtcInZcIiwgXCJcXHZcIl1cbiAgICBdKVxuXG4gICAgaWYgKHNpbXBsZS5oYXMoZXNjYXBlKSkge1xuICAgICAgZGVjb2RlZCArPSBzaW1wbGUuZ2V0KGVzY2FwZSlcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGlmICgvWzAtN10vdS50ZXN0KGVzY2FwZSkpIHtcbiAgICAgIGxldCBkaWdpdHMgPSBlc2NhcGVcblxuICAgICAgd2hpbGUgKGRpZ2l0cy5sZW5ndGggPCAzICYmIC9bMC03XS91LnRlc3QodGV4dFtpbmRleCArIDFdID8/IFwiXCIpKSBkaWdpdHMgKz0gdGV4dFsrK2luZGV4XVxuICAgICAgZGVjb2RlZCArPSBTdHJpbmcuZnJvbUNvZGVQb2ludChOdW1iZXIucGFyc2VJbnQoZGlnaXRzLCA4KSlcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGNvbnN0IHdpZHRocyA9IG5ldyBNYXAoW1tcInhcIiwgMl0sIFtcInVcIiwgNF0sIFtcIlVcIiwgOF1dKVxuICAgIGNvbnN0IHdpZHRoID0gd2lkdGhzLmdldChlc2NhcGUpXG5cbiAgICBpZiAoIXdpZHRoKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJweXRob25cIiwgYHVuc3VwcG9ydGVkIHN0cmluZyBlc2NhcGUgXFxcXCR7ZXNjYXBlfWAsIGxvY2F0aW9uKVxuICAgIGNvbnN0IGRpZ2l0cyA9IHRleHQuc2xpY2UoaW5kZXggKyAxLCBpbmRleCArIDEgKyB3aWR0aClcbiAgICBpZiAoZGlnaXRzLmxlbmd0aCAhPSB3aWR0aCB8fCAhL15bMC05QS1GYS1mXSskL3UudGVzdChkaWdpdHMpKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJweXRob25cIiwgXCJpbnZhbGlkIHN0cmluZyBlc2NhcGVcIiwgbG9jYXRpb24pXG4gICAgaW5kZXggKz0gd2lkdGhcbiAgICBjb25zdCBjb2RlUG9pbnQgPSBOdW1iZXIucGFyc2VJbnQoZGlnaXRzLCAxNilcblxuICAgIGlmIChjb2RlUG9pbnQgPiAweDEwRkZGRiB8fCBjb2RlUG9pbnQgPj0gMHhEODAwICYmIGNvZGVQb2ludCA8PSAweERGRkYpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInB5dGhvblwiLCBcImludmFsaWQgVW5pY29kZSBzdHJpbmcgZXNjYXBlXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICBkZWNvZGVkICs9IFN0cmluZy5mcm9tQ29kZVBvaW50KGNvZGVQb2ludClcbiAgfVxuXG4gIGlmICghaGFzT25seVVuaWNvZGVTY2FsYXJzKGRlY29kZWQpKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJweXRob25cIiwgXCJpbnZhbGlkIFVuaWNvZGUgc3RyaW5nIGxpdGVyYWxcIiwgbG9jYXRpb24pXG5cbiAgcmV0dXJuIGRlY29kZWRcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgYW5ub3RhdGVkIGFzc2lnbm1lbnQgb3IgcGxhaW4gYXNzaWdubWVudC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwidHJlZS1zaXR0ZXJcIikuU3ludGF4Tm9kZX0gbm9kZSAtIEFzc2lnbm1lbnQgbm9kZS5cbiAqIEBwYXJhbSB7UHl0aG9uQ29udGV4dH0gY29udGV4dCAtIENvbW1lbnQgYXNzb2NpYXRpb24gc3RhdGUuXG4gKiBAcGFyYW0ge1NldDxzdHJpbmc+fSB2aXNpYmxlIC0gVmlzaWJsZSBiaW5kaW5ncyBpbiB0aGlzIGxleGljYWwgc2NvcGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkxvY2FsU3RhdGVtZW50fSBTZW1hbnRpYyBsb2NhbCBzdGF0ZW1lbnQuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRBc3NpZ25tZW50KG5vZGUsIGNvbnRleHQsIHZpc2libGUsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgbGVmdCA9IHJlcXVpcmVkRmllbGQobm9kZSwgXCJsZWZ0XCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IHJpZ2h0ID0gcmVxdWlyZWRGaWVsZChub2RlLCBcInJpZ2h0XCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IHR5cGVOb2RlID0gbm9kZS5jaGlsZEZvckZpZWxkTmFtZShcInR5cGVcIilcblxuICBpZiAobGVmdC50eXBlICE9IFwiaWRlbnRpZmllclwiKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJweXRob25cIiwgXCJub24taWRlbnRpZmllciBhc3NpZ25tZW50IHRhcmdldFwiLCBub2RlTG9jYXRpb24obGVmdCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIGNvbnN0IG5hbWUgPSBpZGVudGlmaWVyKGxlZnQsIHR5cGVOb2RlID8gXCJsb2NhbFwiIDogXCJhc3NpZ25tZW50IHRhcmdldFwiLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBuYW1lTG9jYXRpb24gPSBub2RlTG9jYXRpb24obGVmdCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3Qgb3BlcmF0b3IgPSBvcGVyYXRvclRva2VuKG5vZGUsIG5ldyBTZXQoW1wiPVwiXSksIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKCF0eXBlTm9kZSkge1xuICAgIGlmICghdmlzaWJsZS5oYXMobmFtZSkpIHJldHVybiBtaXNzaW5nVHlwZShcInB5dGhvblwiLCBgTG9jYWwgJyR7bmFtZX0nYCwgbG9jYXRpb24pXG4gICAgY29uc3QgdGFyZ2V0ID0gd2l0aFBhcnNlclJhbmdlcyh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiSWRlbnRpZmllckV4cHJlc3Npb25cIiksIGxvY2F0aW9uOiBuYW1lTG9jYXRpb24sIG5hbWV9LCB7bmFtZTogbmFtZUxvY2F0aW9ufSlcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGV4cHJlc3Npb246IGNvbnZlcnRFeHByZXNzaW9uKHJpZ2h0LCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkFzc2lnbm1lbnRTdGF0ZW1lbnRcIiksXG4gICAgICBsb2NhdGlvbixcbiAgICAgIHRhcmdldFxuICAgIH0sIHtvcGVyYXRvcjogbm9kZUxvY2F0aW9uKG9wZXJhdG9yLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gIH1cblxuICBjb25zdCBkZWNsYXJhdGlvbiA9IHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgIGluaXRpYWxpemVyOiBjb252ZXJ0RXhwcmVzc2lvbihyaWdodCwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTG9jYWxEZWNsYXJhdGlvblwiKSxcbiAgICBsb2NhdGlvbixcbiAgICBtdXRhYmxlOiAhdGFrZUltbXV0YWJsZU1hcmtlcihub2RlLCBjb250ZXh0KSxcbiAgICBuYW1lLFxuICAgIHR5cGU6IGNvbnZlcnRUeXBlKHR5cGVOb2RlLCBgTG9jYWwgJyR7bmFtZX0nYCwgbG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpXG4gIH0sIHtuYW1lOiBuYW1lTG9jYXRpb24sIG9wZXJhdG9yOiBub2RlTG9jYXRpb24ob3BlcmF0b3IsIGZpbGVuYW1lLCBzb3VyY2UpfSlcblxuICB2aXNpYmxlLmFkZChuYW1lKVxuXG4gIHJldHVybiBkZWNsYXJhdGlvblxufVxuXG4vKipcbiAqIEFzc29jaWF0ZXMgdGhlIGV4YWN0IGltbWVkaWF0ZWx5IHByZWNlZGluZyBpbW11dGFibGUgbWFya2VyIHdpdGggYSBsb2NhbC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwidHJlZS1zaXR0ZXJcIikuU3ludGF4Tm9kZX0gbm9kZSAtIExvY2FsIGFzc2lnbm1lbnQuXG4gKiBAcGFyYW0ge1B5dGhvbkNvbnRleHR9IGNvbnRleHQgLSBDb21tZW50IHN0YXRlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIGxvY2FsIGlzIGltbXV0YWJsZS5cbiAqL1xuZnVuY3Rpb24gdGFrZUltbXV0YWJsZU1hcmtlcihub2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG1hcmtlciA9IGNvbnRleHQuY29tbWVudHMuZmluZCgoY29tbWVudCkgPT4gY29tbWVudC50ZXh0ID09IGltbXV0YWJsZU1hcmtlciAmJlxuICAgIGNvbW1lbnQuZW5kUG9zaXRpb24ucm93ICsgMSA9PSBub2RlLnN0YXJ0UG9zaXRpb24ucm93ICYmIGNvbW1lbnQuc3RhcnRQb3NpdGlvbi5jb2x1bW4gPT0gbm9kZS5zdGFydFBvc2l0aW9uLmNvbHVtbilcblxuICBpZiAoIW1hcmtlcikgcmV0dXJuIGZhbHNlXG4gIGNvbnRleHQudXNlZEltbXV0YWJsZU1hcmtlcnMuYWRkKG1hcmtlcilcblxuICByZXR1cm4gdHJ1ZVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge2ltcG9ydChcInRyZWUtc2l0dGVyXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBTdGF0ZW1lbnQgbm9kZS5cbiAqIEBwYXJhbSB7UHl0aG9uQ29udGV4dH0gY29udGV4dCAtIENvbW1lbnQgc3RhdGUuXG4gKiBAcGFyYW0ge1NldDxzdHJpbmc+fSB2aXNpYmxlIC0gVmlzaWJsZSBiaW5kaW5ncyBpbiB0aGlzIGxleGljYWwgc2NvcGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlN0YXRlbWVudH0gU2VtYW50aWMgc3RhdGVtZW50LlxuICovXG5mdW5jdGlvbiBjb252ZXJ0U3RhdGVtZW50KG5vZGUsIGNvbnRleHQsIHZpc2libGUsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAobm9kZS50eXBlID09IFwicmV0dXJuX3N0YXRlbWVudFwiKSB7XG4gICAgY29uc3QgZXhwcmVzc2lvbnMgPSBub2RlLm5hbWVkQ2hpbGRyZW4uZmlsdGVyKChjaGlsZCkgPT4gY2hpbGQudHlwZSAhPSBcImNvbW1lbnRcIilcblxuICAgIGlmIChleHByZXNzaW9ucy5sZW5ndGggIT0gMSkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicHl0aG9uXCIsIFwicmV0dXJuIHdpdGhvdXQgb25lIGV4cHJlc3Npb25cIiwgbG9jYXRpb24pXG5cbiAgICByZXR1cm4ge2V4cHJlc3Npb246IGNvbnZlcnRFeHByZXNzaW9uKGV4cHJlc3Npb25zWzBdLCBmaWxlbmFtZSwgc291cmNlKSwga2luZDogXCJSZXR1cm5TdGF0ZW1lbnRcIiwgbG9jYXRpb259XG4gIH1cbiAgaWYgKG5vZGUudHlwZSA9PSBcImlmX3N0YXRlbWVudFwiKSByZXR1cm4gY29udmVydElmKG5vZGUsIGNvbnRleHQsIHZpc2libGUsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGlmIChub2RlLnR5cGUgPT0gXCJleHByZXNzaW9uX3N0YXRlbWVudFwiKSB7XG4gICAgY29uc3QgZXhwcmVzc2lvbnMgPSBub2RlLm5hbWVkQ2hpbGRyZW4uZmlsdGVyKChjaGlsZCkgPT4gY2hpbGQudHlwZSAhPSBcImNvbW1lbnRcIilcblxuICAgIGlmIChleHByZXNzaW9ucy5sZW5ndGggIT0gMSkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicHl0aG9uXCIsIG5vZGUudHlwZSwgbG9jYXRpb24pXG4gICAgaWYgKGV4cHJlc3Npb25zWzBdLnR5cGUgPT0gXCJhc3NpZ25tZW50XCIpIHJldHVybiBjb252ZXJ0QXNzaWdubWVudChleHByZXNzaW9uc1swXSwgY29udGV4dCwgdmlzaWJsZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgIHJldHVybiBjb252ZXJ0UHJpbnQoZXhwcmVzc2lvbnNbMF0sIGZpbGVuYW1lLCBzb3VyY2UsIGxvY2F0aW9uKVxuICB9XG5cbiAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicHl0aG9uXCIsIG5vZGUudHlwZSwgbG9jYXRpb24pXG59XG5cbi8qKlxuICogQ29udmVydHMgdGhlIGV4YWN0IHByaW50KGV4cHJlc3Npb24pIHN0YXRlbWVudC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwidHJlZS1zaXR0ZXJcIikuU3ludGF4Tm9kZX0gbm9kZSAtIEV4cHJlc3Npb24gc3RhdGVtZW50IHZhbHVlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IGxvY2F0aW9uIC0gV2hvbGUgc3RhdGVtZW50IGxvY2F0aW9uLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlByaW50U3RhdGVtZW50fSBQcmludCBzdGF0ZW1lbnQuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRQcmludChub2RlLCBmaWxlbmFtZSwgc291cmNlLCBsb2NhdGlvbikge1xuICBpZiAobm9kZS50eXBlICE9IFwiY2FsbFwiKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJweXRob25cIiwgXCJlbnRyeSBleHByZXNzaW9uIG90aGVyIHRoYW4gcHJpbnRcIiwgbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICBjb25zdCBjYWxsZWUgPSByZXF1aXJlZEZpZWxkKG5vZGUsIFwiZnVuY3Rpb25cIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgYXJndW1lbnRzTm9kZSA9IHJlcXVpcmVkRmllbGQobm9kZSwgXCJhcmd1bWVudHNcIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgYXJndW1lbnRzXyA9IGFyZ3VtZW50c05vZGUubmFtZWRDaGlsZHJlbi5maWx0ZXIoKGNoaWxkKSA9PiBjaGlsZC50eXBlICE9IFwiY29tbWVudFwiKVxuXG4gIGlmIChjYWxsZWUudHlwZSAhPSBcImlkZW50aWZpZXJcIiB8fCBjYWxsZWUudGV4dCAhPSBcInByaW50XCIgfHwgYXJndW1lbnRzTm9kZS50eXBlICE9IFwiYXJndW1lbnRfbGlzdFwiIHx8IGFyZ3VtZW50c18ubGVuZ3RoICE9IDEpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJweXRob25cIiwgXCJwcmludCBjYWxsIHNoYXBlXCIsIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuXG4gIHJldHVybiB7ZXhwcmVzc2lvbjogY29udmVydEV4cHJlc3Npb24oYXJndW1lbnRzX1swXSwgZmlsZW5hbWUsIHNvdXJjZSksIGtpbmQ6IFwiUHJpbnRTdGF0ZW1lbnRcIiwgbG9jYXRpb259XG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIGlmL2VsaWYvZWxzZSBub2RlIGludG8gbmVzdGVkIHNlbWFudGljIGJsb2Nrcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwidHJlZS1zaXR0ZXJcIikuU3ludGF4Tm9kZX0gbm9kZSAtIElmIG9yIGVsaWYgbm9kZS5cbiAqIEBwYXJhbSB7UHl0aG9uQ29udGV4dH0gY29udGV4dCAtIENvbW1lbnQgc3RhdGUuXG4gKiBAcGFyYW0ge1NldDxzdHJpbmc+fSB2aXNpYmxlIC0gVmlzaWJsZSBiaW5kaW5ncyBpbiB0aGlzIGxleGljYWwgc2NvcGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLklmU3RhdGVtZW50fSBTZW1hbnRpYyBicmFuY2guXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRJZihub2RlLCBjb250ZXh0LCB2aXNpYmxlLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IGNvbmRpdGlvbk5vZGUgPSByZXF1aXJlZEZpZWxkKG5vZGUsIFwiY29uZGl0aW9uXCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IGNvbnNlcXVlbmNlTm9kZSA9IHJlcXVpcmVkRmllbGQobm9kZSwgXCJjb25zZXF1ZW5jZVwiLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBhbHRlcm5hdGl2ZU5vZGVzID0gbm9kZS5uYW1lZENoaWxkcmVuLmZpbHRlcigoX2NoaWxkLCBpbmRleCkgPT4gbm9kZS5maWVsZE5hbWVGb3JOYW1lZENoaWxkKGluZGV4KSA9PSBcImFsdGVybmF0aXZlXCIpXG4gIGNvbnN0IGFsdGVybmF0ZSA9IGNvbnZlcnRBbHRlcm5hdGl2ZXMoYWx0ZXJuYXRpdmVOb2RlcywgY29udGV4dCwgbmV3IFNldCh2aXNpYmxlKSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICByZXR1cm4ge1xuICAgIC4uLihhbHRlcm5hdGUgPyB7YWx0ZXJuYXRlfSA6IHt9KSxcbiAgICBjb25kaXRpb246IGNvbnZlcnRFeHByZXNzaW9uKGNvbmRpdGlvbk5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgIGNvbnNlcXVlbnQ6IGNvbnZlcnRCbG9jayhjb25zZXF1ZW5jZU5vZGUsIGNvbnRleHQsIG5ldyBTZXQodmlzaWJsZSksIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgIGtpbmQ6IFwiSWZTdGF0ZW1lbnRcIixcbiAgICBsb2NhdGlvblxuICB9XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gZWxzZSBibG9jayBvciBuZXN0cyBvbmUgZWxpZiBpbnNpZGUgaXRzIHNlbWFudGljIGFsdGVybmF0ZSBibG9jay5cbiAqIEBwYXJhbSB7aW1wb3J0KFwidHJlZS1zaXR0ZXJcIikuU3ludGF4Tm9kZVtdfSBub2RlcyAtIE9yZGVyZWQgZWxpZi9lbHNlIG5vZGVzLlxuICogQHBhcmFtIHtQeXRob25Db250ZXh0fSBjb250ZXh0IC0gQ29tbWVudCBzdGF0ZS5cbiAqIEBwYXJhbSB7U2V0PHN0cmluZz59IHZpc2libGUgLSBWaXNpYmxlIGJpbmRpbmdzIGluIHRoaXMgbGV4aWNhbCBzY29wZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmxvY2sgfCB1bmRlZmluZWR9IEFsdGVybmF0ZSBibG9jay5cbiAqL1xuZnVuY3Rpb24gY29udmVydEFsdGVybmF0aXZlcyhub2RlcywgY29udGV4dCwgdmlzaWJsZSwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJsb2NrIHwgdW5kZWZpbmVkfSAqL1xuICBsZXQgYWx0ZXJuYXRlXG5cbiAgZm9yIChsZXQgaW5kZXggPSBub2Rlcy5sZW5ndGggLSAxOyBpbmRleCA+PSAwOyBpbmRleCAtPSAxKSB7XG4gICAgY29uc3Qgbm9kZSA9IG5vZGVzW2luZGV4XVxuXG4gICAgaWYgKG5vZGUudHlwZSA9PSBcImVsc2VfY2xhdXNlXCIpIHtcbiAgICAgIGlmIChhbHRlcm5hdGUpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInB5dGhvblwiLCBcIm11bHRpcGxlIGVsc2UgY2xhdXNlc1wiLCBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICBhbHRlcm5hdGUgPSBjb252ZXJ0QmxvY2socmVxdWlyZWRGaWVsZChub2RlLCBcImJvZHlcIiwgZmlsZW5hbWUsIHNvdXJjZSksIGNvbnRleHQsIG5ldyBTZXQodmlzaWJsZSksIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBpZiAobm9kZS50eXBlICE9IFwiZWxpZl9jbGF1c2VcIikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicHl0aG9uXCIsIG5vZGUudHlwZSwgbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIGNvbnN0IG5lc3RlZCA9IGNvbnZlcnRJZihub2RlLCBjb250ZXh0LCBuZXcgU2V0KHZpc2libGUpLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gICAgaWYgKGFsdGVybmF0ZSkgbmVzdGVkLmFsdGVybmF0ZSA9IGFsdGVybmF0ZVxuICAgIGFsdGVybmF0ZSA9IHtraW5kOiBcIkJsb2NrXCIsIGxvY2F0aW9uOiBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksIHN0YXRlbWVudHM6IFtuZXN0ZWRdfVxuICB9XG5cbiAgcmV0dXJuIGFsdGVybmF0ZVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBpbmRlbnRhdGlvbiBibG9jayBhbmQgcGVybWl0cyBwYXNzIG9ubHkgYXMgaXRzIHNvbGUgZXhlY3V0YWJsZSBub2RlLlxuICogQHBhcmFtIHtpbXBvcnQoXCJ0cmVlLXNpdHRlclwiKS5TeW50YXhOb2RlfSBub2RlIC0gQmxvY2sgbm9kZS5cbiAqIEBwYXJhbSB7UHl0aG9uQ29udGV4dH0gY29udGV4dCAtIENvbW1lbnQgc3RhdGUuXG4gKiBAcGFyYW0ge1NldDxzdHJpbmc+fSB2aXNpYmxlIC0gVmlzaWJsZSBiaW5kaW5ncyBpbiB0aGlzIGxleGljYWwgc2NvcGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJsb2NrfSBTZW1hbnRpYyBibG9jay5cbiAqL1xuZnVuY3Rpb24gY29udmVydEJsb2NrKG5vZGUsIGNvbnRleHQsIHZpc2libGUsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAobm9kZS50eXBlICE9IFwiYmxvY2tcIikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicHl0aG9uXCIsIG5vZGUudHlwZSwgbG9jYXRpb24pXG4gIGNvbnN0IHN0YXRlbWVudHMgPSBub2RlLm5hbWVkQ2hpbGRyZW4uZmlsdGVyKChjaGlsZCkgPT4gY2hpbGQudHlwZSAhPSBcImNvbW1lbnRcIilcblxuICBpZiAoc3RhdGVtZW50cy5zb21lKChzdGF0ZW1lbnQpID0+IHN0YXRlbWVudC50eXBlID09IFwicGFzc19zdGF0ZW1lbnRcIikpIHtcbiAgICBpZiAoc3RhdGVtZW50cy5sZW5ndGggIT0gMSkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicHl0aG9uXCIsIFwicGFzcyB3aXRoIGV4ZWN1dGFibGUgc2libGluZ3NcIiwgbG9jYXRpb24pXG5cbiAgICByZXR1cm4ge2tpbmQ6IFwiQmxvY2tcIiwgbG9jYXRpb24sIHN0YXRlbWVudHM6IFtdfVxuICB9XG5cbiAgcmV0dXJuIHtraW5kOiBcIkJsb2NrXCIsIGxvY2F0aW9uLCBzdGF0ZW1lbnRzOiBzdGF0ZW1lbnRzLm1hcCgoc3RhdGVtZW50KSA9PiBjb252ZXJ0U3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCwgdmlzaWJsZSwgZmlsZW5hbWUsIHNvdXJjZSkpfVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBleGFjdCBzeW5jaHJvbm91cyB0b3AtbGV2ZWwgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcInRyZWUtc2l0dGVyXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBGdW5jdGlvbiBub2RlLlxuICogQHBhcmFtIHtQeXRob25Db250ZXh0fSBjb250ZXh0IC0gQ29tbWVudCBzdGF0ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRnVuY3Rpb25EZWNsYXJhdGlvbn0gU2VtYW50aWMgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRGdW5jdGlvbihub2RlLCBjb250ZXh0LCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKG5vZGUudHlwZSAhPSBcImZ1bmN0aW9uX2RlZmluaXRpb25cIiB8fCBub2RlLmNoaWxkcmVuLnNvbWUoKGNoaWxkKSA9PiAhY2hpbGQuaXNOYW1lZCAmJiBjaGlsZC50eXBlID09IFwiYXN5bmNcIikpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJweXRob25cIiwgbm9kZS50eXBlLCBsb2NhdGlvbilcbiAgfVxuICBjb25zdCB0eXBlUGFyYW1ldGVyc05vZGUgPSBub2RlLmNoaWxkRm9yRmllbGROYW1lKFwidHlwZV9wYXJhbWV0ZXJzXCIpXG5cbiAgaWYgKHR5cGVQYXJhbWV0ZXJzTm9kZSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInB5dGhvblwiLCB0eXBlUGFyYW1ldGVyc05vZGUudHlwZSwgbm9kZUxvY2F0aW9uKHR5cGVQYXJhbWV0ZXJzTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgbmFtZU5vZGUgPSByZXF1aXJlZEZpZWxkKG5vZGUsIFwibmFtZVwiLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBwYXJhbWV0ZXJzTm9kZSA9IHJlcXVpcmVkRmllbGQobm9kZSwgXCJwYXJhbWV0ZXJzXCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IHJldHVybk5vZGUgPSBub2RlLmNoaWxkRm9yRmllbGROYW1lKFwicmV0dXJuX3R5cGVcIilcbiAgY29uc3QgYm9keU5vZGUgPSByZXF1aXJlZEZpZWxkKG5vZGUsIFwiYm9keVwiLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBuYW1lID0gaWRlbnRpZmllcihuYW1lTm9kZSwgXCJmdW5jdGlvblwiLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBwYXJhbWV0ZXJOb2RlcyA9IHBhcmFtZXRlcnNOb2RlLm5hbWVkQ2hpbGRyZW4uZmlsdGVyKChjaGlsZCkgPT4gY2hpbGQudHlwZSAhPSBcImNvbW1lbnRcIilcblxuICBpZiAocGFyYW1ldGVyc05vZGUuY2hpbGRyZW4uc29tZSgoY2hpbGQpID0+ICFjaGlsZC5pc05hbWVkICYmICFbXCIoXCIsIFwiKVwiLCBcIixcIl0uaW5jbHVkZXMoY2hpbGQudHlwZSkpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicHl0aG9uXCIsIFwicGFyYW1ldGVyIHNlcGFyYXRvcnNcIiwgbm9kZUxvY2F0aW9uKHBhcmFtZXRlcnNOb2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBjb25zdCBwYXJhbWV0ZXJzID0gcGFyYW1ldGVyTm9kZXMubWFwKChwYXJhbWV0ZXJOb2RlKSA9PiB7XG4gICAgY29uc3QgcGFyYW1ldGVyTG9jYXRpb24gPSBub2RlTG9jYXRpb24ocGFyYW1ldGVyTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgIGlmIChwYXJhbWV0ZXJOb2RlLnR5cGUgIT0gXCJ0eXBlZF9wYXJhbWV0ZXJcIikge1xuICAgICAgaWYgKHBhcmFtZXRlck5vZGUudHlwZSA9PSBcImlkZW50aWZpZXJcIikgcmV0dXJuIG1pc3NpbmdUeXBlKFwicHl0aG9uXCIsIGBQYXJhbWV0ZXIgJyR7cGFyYW1ldGVyTm9kZS50ZXh0fSdgLCBwYXJhbWV0ZXJMb2NhdGlvbilcblxuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicHl0aG9uXCIsIHBhcmFtZXRlck5vZGUudHlwZSwgcGFyYW1ldGVyTG9jYXRpb24pXG4gICAgfVxuICAgIGNvbnN0IHBhcmFtZXRlck5hbWVOb2RlID0gcGFyYW1ldGVyTm9kZS5uYW1lZENoaWxkcmVuLmZpbmQoKGNoaWxkKSA9PiBjaGlsZC50eXBlID09IFwiaWRlbnRpZmllclwiKVxuICAgIGNvbnN0IHR5cGVOb2RlID0gcGFyYW1ldGVyTm9kZS5jaGlsZEZvckZpZWxkTmFtZShcInR5cGVcIilcblxuICAgIGlmICghcGFyYW1ldGVyTmFtZU5vZGUpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInB5dGhvblwiLCBcInBhcmFtZXRlciB3aXRob3V0IGlkZW50aWZpZXJcIiwgcGFyYW1ldGVyTG9jYXRpb24pXG4gICAgY29uc3QgcGFyYW1ldGVyTmFtZSA9IGlkZW50aWZpZXIocGFyYW1ldGVyTmFtZU5vZGUsIFwicGFyYW1ldGVyXCIsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJQYXJhbWV0ZXJcIiksXG4gICAgICBsb2NhdGlvbjogcGFyYW1ldGVyTG9jYXRpb24sXG4gICAgICBuYW1lOiBwYXJhbWV0ZXJOYW1lLFxuICAgICAgdHlwZTogY29udmVydFR5cGUodHlwZU5vZGUsIGBQYXJhbWV0ZXIgJyR7cGFyYW1ldGVyTmFtZX0nYCwgcGFyYW1ldGVyTG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgfSwge25hbWU6IG5vZGVMb2NhdGlvbihwYXJhbWV0ZXJOYW1lTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICB9KVxuXG4gIGNvbnN0IHZpc2libGUgPSBuZXcgU2V0KHBhcmFtZXRlcnMubWFwKChwYXJhbWV0ZXIpID0+IHBhcmFtZXRlci5uYW1lKSlcblxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgYm9keTogY29udmVydEJsb2NrKGJvZHlOb2RlLCBjb250ZXh0LCB2aXNpYmxlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICBraW5kOiBcIkZ1bmN0aW9uRGVjbGFyYXRpb25cIixcbiAgICBsb2NhdGlvbixcbiAgICBuYW1lLFxuICAgIHBhcmFtZXRlcnMsXG4gICAgcmV0dXJuVHlwZTogY29udmVydFR5cGUocmV0dXJuTm9kZSwgYEZ1bmN0aW9uICcke25hbWV9JyByZXR1cm5gLCBsb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgfSwge25hbWU6IG5vZGVMb2NhdGlvbihuYW1lTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSl9KVxufVxuXG4vKipcbiAqIFBhcnNlcyB0aGUgc3RyaWN0IFRhc2sgMDE2IFB5dGhvbiBwcm9maWxlLlxuICogQHBhcmFtIHt7ZmlsZW5hbWU6IHN0cmluZywgc291cmNlOiBzdHJpbmd9fSBpbnB1dCAtIFBhcnNlciBpbnB1dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gU2VtYW50aWMgbW9kdWxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQeXRob24oe2ZpbGVuYW1lLCBzb3VyY2V9KSB7XG4gIGlmICghaGFzT25seVVuaWNvZGVTY2FsYXJzKHNvdXJjZSkpIHtcbiAgICBjb25zdCBpbnZhbGlkT2Zmc2V0ID0gZmlyc3RMb25lU3Vycm9nYXRlT2Zmc2V0KHNvdXJjZSlcblxuICAgIHRocm93IG5ldyBTZW1hbnRpZm9sZERpYWdub3N0aWMoe1xuICAgICAgY29kZTogXCJQQVJTRV9FUlJPUlwiLFxuICAgICAgbGFuZ3VhZ2U6IFwicHl0aG9uXCIsXG4gICAgICBsb2NhdGlvbjogbG9jYXRpb25Gcm9tT2Zmc2V0cyhmaWxlbmFtZSwgc291cmNlLCBpbnZhbGlkT2Zmc2V0LCBpbnZhbGlkT2Zmc2V0ICsgMSksXG4gICAgICBtZXNzYWdlOiBcIlB5dGhvbiBzb3VyY2UgY29udGFpbnMgYW4gaW52YWxpZCBsb25lIFVURi0xNiBzdXJyb2dhdGUuXCJcbiAgICB9KVxuICB9XG4gIGxldCB0cmVlXG5cbiAgdHJ5IHtcbiAgICB0cmVlID0gcGFyc2VyLnBhcnNlKHNvdXJjZSlcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gcGFyc2VGYWlsdXJlKFwicHl0aG9uXCIsIGVycm9yKVxuICB9XG4gIGNvbnN0IHJvb3QgPSB0cmVlLnJvb3ROb2RlXG5cbiAgdmFsaWRhdGVQYXJzZXJUcmVlKHJvb3QsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGlmIChyb290LnR5cGUgIT0gXCJtb2R1bGVcIikgdGhyb3cgbmV3IEVycm9yKGBUcmVlLXNpdHRlciByZXR1cm5lZCBQeXRob24gcm9vdCAnJHtyb290LnR5cGV9Jy5gKVxuXG4gIGNvbnN0IGNvbW1lbnRzID0gcm9vdC5kZXNjZW5kYW50c09mVHlwZShcImNvbW1lbnRcIilcbiAgY29uc3QgY29udGV4dCA9IHtjb21tZW50cywgdXNlZEltbXV0YWJsZU1hcmtlcnM6IG5ldyBTZXQoKX1cbiAgY29uc3QgZnVuY3Rpb25zID0gW11cbiAgY29uc3QgZW50cnlOb2RlcyA9IFtdXG4gIGxldCBzYXdFbnRyeSA9IGZhbHNlXG5cbiAgZm9yIChjb25zdCBub2RlIG9mIHJvb3QubmFtZWRDaGlsZHJlbikge1xuICAgIGlmIChub2RlLnR5cGUgPT0gXCJjb21tZW50XCIpIGNvbnRpbnVlXG4gICAgaWYgKG5vZGUudHlwZSA9PSBcImZ1bmN0aW9uX2RlZmluaXRpb25cIiAmJiAhc2F3RW50cnkpIGZ1bmN0aW9ucy5wdXNoKGNvbnZlcnRGdW5jdGlvbihub2RlLCBjb250ZXh0LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICBlbHNlIHtcbiAgICAgIHNhd0VudHJ5ID0gdHJ1ZVxuICAgICAgZW50cnlOb2Rlcy5wdXNoKG5vZGUpXG4gICAgfVxuICB9XG4gIGNvbnN0IGxvY2F0aW9uID0gbW9kdWxlTG9jYXRpb24oZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgZW50cnlMb2NhdGlvbiA9IGVudHJ5Tm9kZXMubGVuZ3RoID09IDAgPyBsb2NhdGlvbiA6IGxvY2F0aW9uRnJvbU9mZnNldHMoXG4gICAgZmlsZW5hbWUsXG4gICAgc291cmNlLFxuICAgIGJpbmRpbmdJbmRleFRvVXRmMTZPZmZzZXQoc291cmNlLCBlbnRyeU5vZGVzWzBdLnN0YXJ0SW5kZXgpLFxuICAgIGJpbmRpbmdJbmRleFRvVXRmMTZPZmZzZXQoc291cmNlLCBlbnRyeU5vZGVzLmF0KC0xKT8uZW5kSW5kZXggPz8gcm9vdC5lbmRJbmRleClcbiAgKVxuICBjb25zdCBlbnRyeVZpc2libGUgPSBuZXcgU2V0KClcbiAgY29uc3QgZW50cnlIYXNQYXNzID0gZW50cnlOb2Rlcy5zb21lKChub2RlKSA9PiBub2RlLnR5cGUgPT0gXCJwYXNzX3N0YXRlbWVudFwiKVxuXG4gIGlmIChlbnRyeUhhc1Bhc3MgJiYgZW50cnlOb2Rlcy5sZW5ndGggIT0gMSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInB5dGhvblwiLCBcInRvcC1sZXZlbCBwYXNzIHdpdGggZXhlY3V0YWJsZSBzaWJsaW5nc1wiLCBlbnRyeUxvY2F0aW9uKVxuICB9XG4gIGNvbnN0IGVudHJ5QmxvY2sgPSB7XG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiQmxvY2tcIiksXG4gICAgbG9jYXRpb246IGVudHJ5TG9jYXRpb24sXG4gICAgc3RhdGVtZW50czogZW50cnlIYXNQYXNzID8gW10gOiBlbnRyeU5vZGVzLm1hcCgobm9kZSkgPT4gY29udmVydFN0YXRlbWVudChub2RlLCBjb250ZXh0LCBlbnRyeVZpc2libGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGNvbnN0IHVudXNlZE1hcmtlciA9IGNvbW1lbnRzLmZpbmQoKGNvbW1lbnQpID0+IGNvbW1lbnQudGV4dCA9PSBpbW11dGFibGVNYXJrZXIgJiYgIWNvbnRleHQudXNlZEltbXV0YWJsZU1hcmtlcnMuaGFzKGNvbW1lbnQpKVxuXG4gIGlmICh1bnVzZWRNYXJrZXIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInB5dGhvblwiLCBcInVuYXR0YWNoZWQgaW1tdXRhYmxlIG1hcmtlclwiLCBub2RlTG9jYXRpb24odW51c2VkTWFya2VyLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgaWYgKGZ1bmN0aW9ucy5sZW5ndGggPT0gMCkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicHl0aG9uXCIsIFwibW9kdWxlIHdpdGhvdXQgYSBmdW5jdGlvblwiLCBsb2NhdGlvbilcblxuICByZXR1cm4ge1xuICAgIGVudHJ5UG9pbnQ6IHtib2R5OiBlbnRyeUJsb2NrLCBraW5kOiBcIkVudHJ5UG9pbnRcIiwgbG9jYXRpb246IGVudHJ5TG9jYXRpb259LFxuICAgIGZ1bmN0aW9ucyxcbiAgICBraW5kOiBcIk1vZHVsZVwiLFxuICAgIGxvY2F0aW9uXG4gIH1cbn1cbiJdfQ==
645
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHl0aG9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Zyb250ZW5kcy9weXRob24uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sTUFBTSxNQUFNLGFBQWEsQ0FBQTtBQUNoQyxPQUFPLGNBQWMsTUFBTSxvQkFBb0IsQ0FBQTtBQUMvQyxPQUFPLEVBQUMsV0FBVyxFQUFFLFlBQVksRUFBRSxxQkFBcUIsRUFBRSxpQkFBaUIsRUFBQyxNQUFNLGtCQUFrQixDQUFBO0FBQ3BHLE9BQU8sRUFBQyxtQkFBbUIsRUFBRSxjQUFjLEVBQUUsMkJBQTJCLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQTtBQUN4RyxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQTtBQUM3RCxPQUFPLEVBQUMsZUFBZSxFQUFFLGdCQUFnQixFQUFDLE1BQU0sMkJBQTJCLENBQUE7QUFDM0UsT0FBTyxFQUFDLHFCQUFxQixFQUFFLFFBQVEsRUFBQyxNQUFNLHdCQUF3QixDQUFBO0FBQ3RFLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLGNBQWMsQ0FBQTtBQUVwRCxNQUFNLE1BQU0sR0FBRyxJQUFJLE1BQU0sRUFBRSxDQUFBO0FBRTNCLE1BQU0sQ0FBQyxXQUFXLENBQUMsNkNBQTZDLENBQUMsRUFBQyxzQkFBdUIsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFFM0csTUFBTSxlQUFlLEdBQUcsMEJBQTBCLENBQUE7QUFDbEQsTUFBTSx5QkFBeUIsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUN4QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFVBQVU7SUFDdEcsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFB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QUFTO1FBQ1QsSUFBSSxFQUFFLFFBQVE7UUFDZCxRQUFRO0tBQ1QsQ0FBQTtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IFBhcnNlciBmcm9tIFwidHJlZS1zaXR0ZXJcIlxuaW1wb3J0IFB5dGhvbkxhbmd1YWdlIGZyb20gXCJ0cmVlLXNpdHRlci1weXRob25cIlxuaW1wb3J0IHttaXNzaW5nVHlwZSwgcGFyc2VGYWlsdXJlLCBTZW1hbnRpZm9sZERpYWdub3N0aWMsIHVuc3VwcG9ydGVkU3ludGF4fSBmcm9tIFwiLi4vZGlhZ25vc3RpYy5qc1wiXG5pbXBvcnQge2xvY2F0aW9uRnJvbU9mZnNldHMsIG1vZHVsZUxvY2F0aW9uLCB1dGY4Qnl0ZU9mZnNldFRvVXRmMTZPZmZzZXR9IGZyb20gXCIuLi9zZW1hbnRpYy9sb2NhdGlvbi5qc1wiXG5pbXBvcnQge3dpdGhBZGFwdGVkT3BlcmF0aW9ufSBmcm9tIFwiLi4vc2VtYW50aWMvb3BlcmF0b3JzLmpzXCJcbmltcG9ydCB7c2V0UGFyc2VyUmFuZ2VzLCB3aXRoUGFyc2VyUmFuZ2VzfSBmcm9tIFwiLi4vc2VtYW50aWMvcHJvdmVuYW5jZS5qc1wiXG5pbXBvcnQge2hhc09ubHlVbmljb2RlU2NhbGFycywgdm9pZFR5cGV9IGZyb20gXCIuLi9zZW1hbnRpYy9zY2FsYXJzLmpzXCJcbmltcG9ydCB7cmVxdWlyZVNvdXJjZVNjYWxhclR5cGV9IGZyb20gXCIuL3NjYWxhcnMuanNcIlxuXG5jb25zdCBwYXJzZXIgPSBuZXcgUGFyc2VyKClcblxucGFyc2VyLnNldExhbmd1YWdlKC8qKiBAdHlwZSB7aW1wb3J0KFwidHJlZS1zaXR0ZXJcIikuTGFuZ3VhZ2V9ICovICgvKiogQHR5cGUge3Vua25vd259ICovIChQeXRob25MYW5ndWFnZSkpKVxuXG5jb25zdCBpbW11dGFibGVNYXJrZXIgPSBcIiMgQHNlbWFudGlmb2xkLWltbXV0YWJsZVwiXG5jb25zdCBweXRob25SZXNlcnZlZElkZW50aWZpZXJzID0gbmV3IFNldChbXG4gIFwiRmFsc2VcIiwgXCJOb25lXCIsIFwiVHJ1ZVwiLCBcImFuZFwiLCBcImFzXCIsIFwiYXNzZXJ0XCIsIFwiYXN5bmNcIiwgXCJhd2FpdFwiLCBcImJyZWFrXCIsIFwiY2FzZVwiLCBcImNsYXNzXCIsIFwiY29udGludWVcIixcbiAgXCJkZWZcIiwgXCJkZWxcIiwgXCJlbGlmXCIsIFwiZWxzZVwiLCBcImV4Y2VwdFwiLCBcImV4ZWNcIiwgXCJmaW5hbGx5XCIsIFwiZm9yXCIsIFwiZnJvbVwiLCBcImdsb2JhbFwiLCBcImlmXCIsIFwiaW1wb3J0XCIsIFwiaW5cIixcbiAgXCJpc1wiLCBcImxhbWJkYVwiLCBcIm1hdGNoXCIsIFwibm9ubG9jYWxcIiwgXCJub3RcIiwgXCJvclwiLCBcInBhc3NcIiwgXCJwcmludFwiLCBcInJhaXNlXCIsIFwicmV0dXJuXCIsIFwidHJ5XCIsIFwidHlwZVwiLFxuICBcIndoaWxlXCIsIFwid2l0aFwiLCBcInlpZWxkXCIsIFwiX1wiLCBcIl9fZGVidWdfX1wiLCBcImludFwiLCBcImJvb2xcIiwgXCJzdHJcIlxuXSlcbmNvbnN0IGJpbmFyeU9wZXJhdGlvbnMgPSBuZXcgTWFwKFtcbiAgW1wiK1wiLCBcIkFkZFwiXSxcbiAgW1wiLVwiLCBcIlN1YnRyYWN0XCJdLFxuICBbXCIqXCIsIFwiTXVsdGlwbHlcIl1cbl0pXG5jb25zdCBjb21wYXJpc29uT3BlcmF0aW9ucyA9IG5ldyBNYXAoW1xuICBbXCI9PVwiLCBcIkVxdWFsXCJdLFxuICBbXCIhPVwiLCBcIk5vdEVxdWFsXCJdLFxuICBbXCI8XCIsIFwiTGVzc1RoYW5cIl0sXG4gIFtcIjw9XCIsIFwiTGVzc1RoYW5PckVxdWFsXCJdLFxuICBbXCI+XCIsIFwiR3JlYXRlclRoYW5cIl0sXG4gIFtcIj49XCIsIFwiR3JlYXRlclRoYW5PckVxdWFsXCJdXG5dKVxuXG4vKiogQHR5cGVkZWYge3tjb21tZW50czogaW1wb3J0KFwidHJlZS1zaXR0ZXJcIikuU3ludGF4Tm9kZVtdLCB1c2VkSW1tdXRhYmxlTWFya2VyczogU2V0PGltcG9ydChcInRyZWUtc2l0dGVyXCIpLlN5bnRheE5vZGU+fX0gUHl0aG9uQ29udGV4dCAqL1xuXG4vKipcbiAqIFJvdXRlcyB0aGUgYmluZGluZydzIFVURi0xNiBpbmRleCB0aHJvdWdoIHRoZSBzaGFyZWQgVVRGLTggYnl0ZSBjb252ZXJ0ZXIuXG4gKiBub2RlLXRyZWUtc2l0dGVyIHBhcnNlcyBKYXZhU2NyaXB0IHN0cmluZ3MgYXMgVVRGLTE2TEUgYW5kIGV4cG9zZXMgY29kZS11bml0XG4gKiBpbmRleGVzIGV2ZW4gdGhvdWdoIHRoZSBncmFtbWFyJ3MgbmF0aXZlIGNvb3JkaW5hdGUgY29udHJhY3QgaXMgYnl0ZS1iYXNlZC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXggLSBCaW5kaW5nIFVURi0xNiBpbmRleC5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFZlcmlmaWVkIFVURi0xNiBvZmZzZXQuXG4gKi9cbmZ1bmN0aW9uIGJpbmRpbmdJbmRleFRvVXRmMTZPZmZzZXQoc291cmNlLCBpbmRleCkge1xuICBpZiAoIU51bWJlci5pc0ludGVnZXIoaW5kZXgpIHx8IGluZGV4IDwgMCB8fCBpbmRleCA+IHNvdXJjZS5sZW5ndGggfHxcbiAgICBpbmRleCA+IDAgJiYgaW5kZXggPCBzb3VyY2UubGVuZ3RoICYmIC9bXFx1RDgwMC1cXHVEQkZGXS91LnRlc3Qoc291cmNlW2luZGV4IC0gMV0pICYmIC9bXFx1REMwMC1cXHVERkZGXS91LnRlc3Qoc291cmNlW2luZGV4XSkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgSW52YWxpZCBUcmVlLXNpdHRlciBzb3VyY2UgaW5kZXg6ICR7aW5kZXh9YClcbiAgfVxuICBjb25zdCBieXRlT2Zmc2V0ID0gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHNvdXJjZS5zbGljZSgwLCBpbmRleCkpLmxlbmd0aFxuXG4gIHJldHVybiB1dGY4Qnl0ZU9mZnNldFRvVXRmMTZPZmZzZXQoc291cmNlLCBieXRlT2Zmc2V0KVxufVxuXG4vKipcbiAqIEZpbmRzIHRoZSBmaXJzdCB1bnBhaXJlZCBVVEYtMTYgc3Vycm9nYXRlLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IEludmFsaWQgb2Zmc2V0LCBvciAtMS5cbiAqL1xuZnVuY3Rpb24gZmlyc3RMb25lU3Vycm9nYXRlT2Zmc2V0KHNvdXJjZSkge1xuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgc291cmNlLmxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIGNvbnN0IHVuaXQgPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleClcblxuICAgIGlmICh1bml0ID49IDB4RDgwMCAmJiB1bml0IDw9IDB4REJGRikge1xuICAgICAgY29uc3QgbmV4dCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4ICsgMSlcblxuICAgICAgaWYgKG5leHQgPj0gMHhEQzAwICYmIG5leHQgPD0gMHhERkZGKSBpbmRleCArPSAxXG4gICAgICBlbHNlIHJldHVybiBpbmRleFxuICAgIH0gZWxzZSBpZiAodW5pdCA+PSAweERDMDAgJiYgdW5pdCA8PSAweERGRkYpIHJldHVybiBpbmRleFxuICB9XG5cbiAgcmV0dXJuIC0xXG59XG5cbi8qKlxuICogQ29udmVydHMgYSBUcmVlLXNpdHRlciBieXRlIHJhbmdlIGludG8gU2VtYW50aWZvbGQncyBVVEYtMTYgY29vcmRpbmF0ZXMuXG4gKiBAcGFyYW0ge2ltcG9ydChcInRyZWUtc2l0dGVyXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBQYXJzZXIgbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IEV4YWN0IGxvY2F0aW9uLlxuICovXG5mdW5jdGlvbiBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICByZXR1cm4gbG9jYXRpb25Gcm9tT2Zmc2V0cyhcbiAgICBmaWxlbmFtZSxcbiAgICBzb3VyY2UsXG4gICAgYmluZGluZ0luZGV4VG9VdGYxNk9mZnNldChzb3VyY2UsIG5vZGUuc3RhcnRJbmRleCksXG4gICAgYmluZGluZ0luZGV4VG9VdGYxNk9mZnNldChzb3VyY2UsIG5vZGUuZW5kSW5kZXgpXG4gIClcbn1cblxuLyoqXG4gKiBSZXF1aXJlcyBvbmUgcGFyc2VyIGZpZWxkLlxuICogQHBhcmFtIHtpbXBvcnQoXCJ0cmVlLXNpdHRlclwiKS5TeW50YXhOb2RlfSBub2RlIC0gRmllbGQgb3duZXIuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmllbGQgLSBHcmFtbWFyIGZpZWxkIG5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcInRyZWUtc2l0dGVyXCIpLlN5bnRheE5vZGV9IEZpZWxkIG5vZGUuXG4gKi9cbmZ1bmN0aW9uIHJlcXVpcmVkRmllbGQobm9kZSwgZmllbGQsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgY29uc3QgY2hpbGQgPSBub2RlLmNoaWxkRm9yRmllbGROYW1lKGZpZWxkKVxuXG4gIGlmICghY2hpbGQpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInB5dGhvblwiLCBgJHtub2RlLnR5cGV9IHdpdGhvdXQgJHtmaWVsZH1gLCBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG5cbiAgcmV0dXJuIGNoaWxkXG59XG5cbi8qKlxuICogVmFsaWRhdGVzIGV2ZXJ5IG5hbWVkIGFuZCBhbm9ueW1vdXMgcGFyc2VyIGNoaWxkIGFuZCByZWplY3RzIHJlY292ZXJ5LlxuICogQHBhcmFtIHtpbXBvcnQoXCJ0cmVlLXNpdHRlclwiKS5TeW50YXhOb2RlfSBub2RlIC0gQ3VycmVudCBwYXJzZXIgbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVQYXJzZXJUcmVlKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgaWYgKG5vZGUuaXNFcnJvciB8fCBub2RlLmlzTWlzc2luZykge1xuICAgIHRocm93IG5ldyBTZW1hbnRpZm9sZERpYWdub3N0aWMoe1xuICAgICAgY29kZTogXCJQQVJTRV9FUlJPUlwiLFxuICAgICAgbGFuZ3VhZ2U6IFwicHl0aG9uXCIsXG4gICAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgbWVzc2FnZTogYFRyZWUtc2l0dGVyIGV4cG9zZWQgJHtub2RlLmlzTWlzc2luZyA/IFwiYSBtaXNzaW5nXCIgOiBcImFuIGVycm9yXCJ9IHJlY292ZXJ5IG5vZGUgJyR7bm9kZS50eXBlfScuYFxuICAgIH0pXG4gIH1cblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbm9kZS5jaGlsZENvdW50OyBpbmRleCArPSAxKSB7XG4gICAgY29uc3QgY2hpbGQgPSBub2RlLmNoaWxkKGluZGV4KVxuXG4gICAgaWYgKCFjaGlsZCkgdGhyb3cgbmV3IEVycm9yKGBUcmVlLXNpdHRlciBvbWl0dGVkIGNoaWxkICR7aW5kZXh9IG9mICR7bm9kZS50eXBlfS5gKVxuICAgIHZhbGlkYXRlUGFyc2VyVHJlZShjaGlsZCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgfVxufVxuXG4vKipcbiAqIFJlamVjdHMgUHl0aG9uIGlkZW50aWZpZXJzIHRoYXQgY2Fubm90IHNhZmVseSBwYXJ0aWNpcGF0ZSBpbiB0aGUgZXhhY3QgcHJvZmlsZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwidHJlZS1zaXR0ZXJcIikuU3ludGF4Tm9kZX0gbm9kZSAtIElkZW50aWZpZXIgbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSByb2xlIC0gRGlhZ25vc3RpYyByb2xlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IEFjY2VwdGVkIG5hbWUuXG4gKi9cbmZ1bmN0aW9uIGlkZW50aWZpZXIobm9kZSwgcm9sZSwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBjb25zdCBuYW1lID0gbm9kZS50ZXh0XG5cbiAgaWYgKG5vZGUudHlwZSAhPSBcImlkZW50aWZpZXJcIiB8fCBweXRob25SZXNlcnZlZElkZW50aWZpZXJzLmhhcyhuYW1lKSB8fCBuYW1lLm5vcm1hbGl6ZShcIk5GS0NcIikgIT0gbmFtZSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInB5dGhvblwiLCBgJHtyb2xlfSBpZGVudGlmaWVyICcke25hbWV9J2AsIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuXG4gIHJldHVybiBuYW1lXG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIGV4YWN0IGludC9ib29sL3N0ciBhbm5vdGF0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCJ0cmVlLXNpdHRlclwiKS5TeW50YXhOb2RlIHwgbnVsbH0gbm9kZSAtIFR5cGUgbm9kZSwgaWYgcHJlc2VudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdWJqZWN0IC0gVHlwZWQgc3ViamVjdC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IG93bmVyTG9jYXRpb24gLSBPd25pbmcgZGVjbGFyYXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlR5cGVSZWZlcmVuY2V9IFNlbWFudGljIHR5cGUuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRUeXBlKG5vZGUsIHN1YmplY3QsIG93bmVyTG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgaWYgKCFub2RlKSByZXR1cm4gbWlzc2luZ1R5cGUoXCJweXRob25cIiwgc3ViamVjdCwgb3duZXJMb2NhdGlvbilcbiAgY29uc3QgdHlwZUxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IGNoaWxkcmVuID0gbm9kZS5uYW1lZENoaWxkcmVuLmZpbHRlcigoY2hpbGQpID0+IGNoaWxkLnR5cGUgIT0gXCJjb21tZW50XCIpXG5cbiAgaWYgKG5vZGUudHlwZSAhPSBcInR5cGVcIiB8fCBjaGlsZHJlbi5sZW5ndGggIT0gMSB8fCBjaGlsZHJlblswXS50eXBlICE9IFwiaWRlbnRpZmllclwiIHx8XG4gICAgIVtcImludFwiLCBcImJvb2xcIiwgXCJzdHJcIl0uaW5jbHVkZXMoY2hpbGRyZW5bMF0udGV4dCkgfHwgbm9kZS50ZXh0ICE9IGNoaWxkcmVuWzBdLnRleHQpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJweXRob25cIiwgXCJ1bnN1cHBvcnRlZCBzY2FsYXIgYW5ub3RhdGlvblwiLCB0eXBlTG9jYXRpb24pXG4gIH1cblxuICByZXR1cm4gcmVxdWlyZVNvdXJjZVNjYWxhclR5cGUoXCJweXRob25cIiwgY2hpbGRyZW5bMF0udGV4dCwgc3ViamVjdCwgb3duZXJMb2NhdGlvbiwgdHlwZUxvY2F0aW9uKVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBleGFjdCBzY2FsYXIgb3IgVGFzayAwMDUgYE5vbmVgIGZ1bmN0aW9uLXJldHVybiBhbm5vdGF0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCJ0cmVlLXNpdHRlclwiKS5TeW50YXhOb2RlIHwgbnVsbH0gbm9kZSAtIFJldHVybiB0eXBlIG5vZGUsIGlmIHByZXNlbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3ViamVjdCAtIFR5cGVkIGZ1bmN0aW9uIHJldHVybi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IG93bmVyTG9jYXRpb24gLSBPd25pbmcgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljRnVuY3Rpb25SZXR1cm5UeXBlfSBTZW1hbnRpYyByZXR1cm4gdHlwZS5cbiAqL1xuZnVuY3Rpb24gY29udmVydFJldHVyblR5cGUobm9kZSwgc3ViamVjdCwgb3duZXJMb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBpZiAoIW5vZGUpIHJldHVybiBtaXNzaW5nVHlwZShcInB5dGhvblwiLCBzdWJqZWN0LCBvd25lckxvY2F0aW9uKVxuICBjb25zdCB0eXBlTG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgY2hpbGRyZW4gPSBub2RlLm5hbWVkQ2hpbGRyZW4uZmlsdGVyKChjaGlsZCkgPT4gY2hpbGQudHlwZSAhPSBcImNvbW1lbnRcIilcblxuICBpZiAobm9kZS50eXBlID09IFwidHlwZVwiICYmIGNoaWxkcmVuLmxlbmd0aCA9PSAxICYmIGNoaWxkcmVuWzBdLnR5cGUgPT0gXCJub25lXCIgJiYgbm9kZS50ZXh0ID09IFwiTm9uZVwiKSB7XG4gICAgY29uc3QgdHlwZSA9IHZvaWRUeXBlKClcblxuICAgIHNldFBhcnNlclJhbmdlcyh0eXBlLCB7dHlwZTogdHlwZUxvY2F0aW9ufSlcblxuICAgIHJldHVybiB0eXBlXG4gIH1cblxuICByZXR1cm4gY29udmVydFR5cGUobm9kZSwgc3ViamVjdCwgb3duZXJMb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSlcbn1cblxuLyoqXG4gKiBGaW5kcyBleGFjdGx5IG9uZSBhbm9ueW1vdXMgb3BlcmF0b3IgdG9rZW4gZGlyZWN0bHkgb3duZWQgYnkgYSBwYXJzZXIgbm9kZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwidHJlZS1zaXR0ZXJcIikuU3ludGF4Tm9kZX0gbm9kZSAtIE9wZXJhdGlvbiBub2RlLlxuICogQHBhcmFtIHtTZXQ8c3RyaW5nPn0gc3BlbGxpbmdzIC0gQWNjZXB0ZWQgc3BlbGxpbmdzLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCJ0cmVlLXNpdHRlclwiKS5TeW50YXhOb2RlfSBPcGVyYXRvciB0b2tlbi5cbiAqL1xuZnVuY3Rpb24gb3BlcmF0b3JUb2tlbihub2RlLCBzcGVsbGluZ3MsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgY29uc3QgdG9rZW5zID0gbm9kZS5jaGlsZHJlbi5maWx0ZXIoKGNoaWxkKSA9PiAhY2hpbGQuaXNOYW1lZCAmJiBzcGVsbGluZ3MuaGFzKGNoaWxkLnR5cGUpKVxuXG4gIGlmICh0b2tlbnMubGVuZ3RoICE9IDEpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInB5dGhvblwiLCBgJHtub2RlLnR5cGV9IG9wZXJhdG9yYCwgbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuXG4gIHJldHVybiB0b2tlbnNbMF1cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgc3VwcG9ydGVkIFB5dGhvbiBleHByZXNzaW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCJ0cmVlLXNpdHRlclwiKS5TeW50YXhOb2RlfSBub2RlIC0gRXhwcmVzc2lvbiBub2RlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSBTZW1hbnRpYyBleHByZXNzaW9uLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0RXhwcmVzc2lvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKG5vZGUudHlwZSA9PSBcInBhcmVudGhlc2l6ZWRfZXhwcmVzc2lvblwiKSB7XG4gICAgY29uc3QgZXhwcmVzc2lvbnMgPSBub2RlLm5hbWVkQ2hpbGRyZW4uZmlsdGVyKChjaGlsZCkgPT4gY2hpbGQudHlwZSAhPSBcImNvbW1lbnRcIilcblxuICAgIGlmIChleHByZXNzaW9ucy5sZW5ndGggIT0gMSkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicHl0aG9uXCIsIG5vZGUudHlwZSwgbG9jYXRpb24pXG5cbiAgICByZXR1cm4gY29udmVydEV4cHJlc3Npb24oZXhwcmVzc2lvbnNbMF0sIGZpbGVuYW1lLCBzb3VyY2UpXG4gIH1cbiAgaWYgKG5vZGUudHlwZSA9PSBcImlkZW50aWZpZXJcIikge1xuICAgIGNvbnN0IG5hbWUgPSBpZGVudGlmaWVyKG5vZGUsIFwicmVmZXJlbmNlXCIsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiSWRlbnRpZmllckV4cHJlc3Npb25cIiksIGxvY2F0aW9uLCBuYW1lfSwge25hbWU6IGxvY2F0aW9ufSlcbiAgfVxuICBpZiAobm9kZS50eXBlID09IFwiaW50ZWdlclwiKSB7XG4gICAgbGV0IHZhbHVlXG5cbiAgICB0cnkge1xuICAgICAgdmFsdWUgPSBOdW1iZXIoQmlnSW50KG5vZGUudGV4dC5yZXBsYWNlQWxsKFwiX1wiLCBcIlwiKSkpXG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJweXRob25cIiwgXCJpbnRlZ2VyIGxpdGVyYWxcIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIGlmICghTnVtYmVyLmlzU2FmZUludGVnZXIodmFsdWUpKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJweXRob25cIiwgXCJub24tc2FmZSBpbnRlZ2VyIGxpdGVyYWxcIiwgbG9jYXRpb24pXG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiSW50ZWdlckxpdGVyYWxcIiksIGxvY2F0aW9uLCB2YWx1ZX0sIHtsaXRlcmFsOiBsb2NhdGlvbn0pXG4gIH1cbiAgaWYgKG5vZGUudHlwZSA9PSBcInRydWVcIiB8fCBub2RlLnR5cGUgPT0gXCJmYWxzZVwiKSB7XG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkJvb2xlYW5MaXRlcmFsXCIpLCBsb2NhdGlvbiwgdmFsdWU6IG5vZGUudHlwZSA9PSBcInRydWVcIn0sIHtsaXRlcmFsOiBsb2NhdGlvbn0pXG4gIH1cbiAgaWYgKG5vZGUudHlwZSA9PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlN0cmluZ0xpdGVyYWxcIiksIGxvY2F0aW9uLCB2YWx1ZTogZGVjb2RlU3RyaW5nKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpfSwge1xuICAgICAgbGl0ZXJhbDogbG9jYXRpb25cbiAgICB9KVxuICB9XG4gIGlmIChub2RlLnR5cGUgPT0gXCJjb25jYXRlbmF0ZWRfc3RyaW5nXCIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInB5dGhvblwiLCBcImltcGxpY2l0IHN0cmluZyBjb25jYXRlbmF0aW9uXCIsIGxvY2F0aW9uKVxuICBpZiAobm9kZS50eXBlID09IFwidW5hcnlfb3BlcmF0b3JcIikge1xuICAgIGNvbnN0IG9wZXJhbmROb2RlID0gcmVxdWlyZWRGaWVsZChub2RlLCBcImFyZ3VtZW50XCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgY29uc3Qgb3BlcmF0b3IgPSBvcGVyYXRvclRva2VuKG5vZGUsIG5ldyBTZXQoW1wiLVwiXSksIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgY29uc3Qgc2VtYW50aWMgPSB3aXRoQWRhcHRlZE9wZXJhdGlvbih3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGtpbmQ6IFwiVW5hcnlFeHByZXNzaW9uXCIsXG4gICAgICBsb2NhdGlvbixcbiAgICAgIG9wZXJhbmQ6IGNvbnZlcnRFeHByZXNzaW9uKG9wZXJhbmROb2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIH0sIHtvcGVyYXRvcjogbm9kZUxvY2F0aW9uKG9wZXJhdG9yLCBmaWxlbmFtZSwgc291cmNlKX0pLCBcIk5lZ2F0ZVwiKVxuXG4gICAgcmV0dXJuIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gKi8gKC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gKHNlbWFudGljKSlcbiAgfVxuICBpZiAobm9kZS50eXBlID09IFwibm90X29wZXJhdG9yXCIpIHtcbiAgICBjb25zdCBvcGVyYW5kTm9kZSA9IHJlcXVpcmVkRmllbGQobm9kZSwgXCJhcmd1bWVudFwiLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IG9wZXJhdG9yID0gb3BlcmF0b3JUb2tlbihub2RlLCBuZXcgU2V0KFtcIm5vdFwiXSksIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgY29uc3Qgc2VtYW50aWMgPSB3aXRoQWRhcHRlZE9wZXJhdGlvbih3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGtpbmQ6IFwiVW5hcnlFeHByZXNzaW9uXCIsXG4gICAgICBsb2NhdGlvbixcbiAgICAgIG9wZXJhbmQ6IGNvbnZlcnRFeHByZXNzaW9uKG9wZXJhbmROb2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIH0sIHtvcGVyYXRvcjogbm9kZUxvY2F0aW9uKG9wZXJhdG9yLCBmaWxlbmFtZSwgc291cmNlKX0pLCBcIk5vdFwiKVxuXG4gICAgcmV0dXJuIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gKi8gKC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gKHNlbWFudGljKSlcbiAgfVxuICBpZiAobm9kZS50eXBlID09IFwiYmluYXJ5X29wZXJhdG9yXCIgfHwgbm9kZS50eXBlID09IFwiY29tcGFyaXNvbl9vcGVyYXRvclwiIHx8IG5vZGUudHlwZSA9PSBcImJvb2xlYW5fb3BlcmF0b3JcIikge1xuICAgIGNvbnN0IGV4cHJlc3Npb25DaGlsZHJlbiA9IG5vZGUubmFtZWRDaGlsZHJlbi5maWx0ZXIoKGNoaWxkKSA9PiBjaGlsZC50eXBlICE9IFwiY29tbWVudFwiKVxuICAgIGNvbnN0IGxlZnROb2RlID0gbm9kZS5jaGlsZEZvckZpZWxkTmFtZShcImxlZnRcIikgPz8gZXhwcmVzc2lvbkNoaWxkcmVuWzBdXG4gICAgY29uc3QgcmlnaHROb2RlID0gbm9kZS5jaGlsZEZvckZpZWxkTmFtZShcInJpZ2h0XCIpID8/IGV4cHJlc3Npb25DaGlsZHJlblsxXVxuXG4gICAgaWYgKCFsZWZ0Tm9kZSB8fCAhcmlnaHROb2RlKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJweXRob25cIiwgbm9kZS50eXBlLCBsb2NhdGlvbilcbiAgICBjb25zdCBvcGVyYXRpb25zID0gbm9kZS50eXBlID09IFwiYmluYXJ5X29wZXJhdG9yXCIgPyBiaW5hcnlPcGVyYXRpb25zIDogbm9kZS50eXBlID09IFwiY29tcGFyaXNvbl9vcGVyYXRvclwiXG4gICAgICA/IGNvbXBhcmlzb25PcGVyYXRpb25zIDogbmV3IE1hcChbW1wiYW5kXCIsIFwiQW5kXCJdLCBbXCJvclwiLCBcIk9yXCJdXSlcbiAgICBjb25zdCBvcGVyYXRvciA9IG9wZXJhdG9yVG9rZW4obm9kZSwgbmV3IFNldChvcGVyYXRpb25zLmtleXMoKSksIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgY29uc3QgYWRhcHRlZCA9IG9wZXJhdGlvbnMuZ2V0KG9wZXJhdG9yLnR5cGUpXG5cbiAgICBpZiAoIWFkYXB0ZWQgfHwgZXhwcmVzc2lvbkNoaWxkcmVuLmxlbmd0aCAhPSAyKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJweXRob25cIiwgbm9kZS50eXBlLCBsb2NhdGlvbilcbiAgICB9XG4gICAgY29uc3Qgc2VtYW50aWMgPSB3aXRoQWRhcHRlZE9wZXJhdGlvbih3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGtpbmQ6IFwiQmluYXJ5RXhwcmVzc2lvblwiLFxuICAgICAgbGVmdDogY29udmVydEV4cHJlc3Npb24obGVmdE5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgbG9jYXRpb24sXG4gICAgICByaWdodDogY29udmVydEV4cHJlc3Npb24ocmlnaHROb2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIH0sIHtvcGVyYXRvcjogbm9kZUxvY2F0aW9uKG9wZXJhdG9yLCBmaWxlbmFtZSwgc291cmNlKX0pLCAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL29wZXJhdG9ycy5qc1wiKS5BZGFwdGVkT3BlcmF0aW9ufSAqLyAoYWRhcHRlZCkpXG5cbiAgICByZXR1cm4gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSAqLyAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyAoc2VtYW50aWMpKVxuICB9XG4gIGlmIChub2RlLnR5cGUgPT0gXCJjYWxsXCIpIHtcbiAgICBjb25zdCBjYWxsZWVOb2RlID0gcmVxdWlyZWRGaWVsZChub2RlLCBcImZ1bmN0aW9uXCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgY29uc3QgYXJndW1lbnRzTm9kZSA9IHJlcXVpcmVkRmllbGQobm9kZSwgXCJhcmd1bWVudHNcIiwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgIGlmIChjYWxsZWVOb2RlLnR5cGUgIT0gXCJpZGVudGlmaWVyXCIgfHwgYXJndW1lbnRzTm9kZS50eXBlICE9IFwiYXJndW1lbnRfbGlzdFwiKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJweXRob25cIiwgXCJkeW5hbWljIGNhbGxcIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIGNvbnN0IGNhbGxlZSA9IGlkZW50aWZpZXIoY2FsbGVlTm9kZSwgXCJjYWxsZWVcIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICBjb25zdCBhcmd1bWVudHNfID0gYXJndW1lbnRzTm9kZS5uYW1lZENoaWxkcmVuLmZpbHRlcigoY2hpbGQpID0+IGNoaWxkLnR5cGUgIT0gXCJjb21tZW50XCIpXG4gICAgICAubWFwKChhcmd1bWVudCkgPT4gY29udmVydEV4cHJlc3Npb24oYXJndW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2FyZ3VtZW50czogYXJndW1lbnRzXywgY2FsbGVlLCBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJDYWxsRXhwcmVzc2lvblwiKSwgbG9jYXRpb259LCB7XG4gICAgICBjYWxsZWU6IG5vZGVMb2NhdGlvbihjYWxsZWVOb2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIH0pXG4gIH1cblxuICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJweXRob25cIiwgbm9kZS50eXBlLCBsb2NhdGlvbilcbn1cblxuLyoqXG4gKiBEZWNvZGVzIG9uZSBub24tcHJlZml4ZWQsIG5vbi10cmlwbGUgUHl0aG9uIHN0cmluZyB3aXRob3V0IGV2YWx1YXRpbmcgc291cmNlLlxuICogQHBhcmFtIHtpbXBvcnQoXCJ0cmVlLXNpdHRlclwiKS5TeW50YXhOb2RlfSBub2RlIC0gU3RyaW5nIG5vZGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge3N0cmluZ30gVW5pY29kZSBzY2FsYXIgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBkZWNvZGVTdHJpbmcobm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCB0ZXh0ID0gbm9kZS50ZXh0XG4gIGNvbnN0IHF1b3RlID0gdGV4dFswXVxuXG4gIGlmICgocXVvdGUgIT0gXCJcXFwiXCIgJiYgcXVvdGUgIT0gXCInXCIpIHx8IHRleHQuYXQoLTEpICE9IHF1b3RlIHx8IHRleHQuc3RhcnRzV2l0aChgJHtxdW90ZX0ke3F1b3RlfSR7cXVvdGV9YCkpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJweXRob25cIiwgXCJwcmVmaXhlZCBvciB0cmlwbGUtcXVvdGVkIHN0cmluZ1wiLCBsb2NhdGlvbilcbiAgfVxuICBsZXQgZGVjb2RlZCA9IFwiXCJcblxuICBmb3IgKGxldCBpbmRleCA9IDE7IGluZGV4IDwgdGV4dC5sZW5ndGggLSAxOyBpbmRleCArPSAxKSB7XG4gICAgY29uc3QgY2hhcmFjdGVyID0gdGV4dFtpbmRleF1cblxuICAgIGlmIChjaGFyYWN0ZXIgIT0gXCJcXFxcXCIpIHtcbiAgICAgIGRlY29kZWQgKz0gY2hhcmFjdGVyXG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBjb25zdCBlc2NhcGUgPSB0ZXh0WysraW5kZXhdXG5cbiAgICBpZiAoZXNjYXBlID09PSB1bmRlZmluZWQpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInB5dGhvblwiLCBcImludmFsaWQgc3RyaW5nIGVzY2FwZVwiLCBsb2NhdGlvbilcbiAgICBjb25zdCBzaW1wbGUgPSBuZXcgTWFwKFtcbiAgICAgIFtcIlxcXFxcIiwgXCJcXFxcXCJdLCBbXCInXCIsIFwiJ1wiXSwgW1wiXFxcIlwiLCBcIlxcXCJcIl0sIFtcImFcIiwgXCJcXHUwMDA3XCJdLCBbXCJiXCIsIFwiXFxiXCJdLCBbXCJmXCIsIFwiXFxmXCJdLCBbXCJuXCIsIFwiXFxuXCJdLFxuICAgICAgW1wiclwiLCBcIlxcclwiXSwgW1widFwiLCBcIlxcdFwiXSwgW1widlwiLCBcIlxcdlwiXVxuICAgIF0pXG5cbiAgICBpZiAoc2ltcGxlLmhhcyhlc2NhcGUpKSB7XG4gICAgICBkZWNvZGVkICs9IHNpbXBsZS5nZXQoZXNjYXBlKVxuICAgICAgY29udGludWVcbiAgICB9XG4gICAgaWYgKC9bMC03XS91LnRlc3QoZXNjYXBlKSkge1xuICAgICAgbGV0IGRpZ2l0cyA9IGVzY2FwZVxuXG4gICAgICB3aGlsZSAoZGlnaXRzLmxlbmd0aCA8IDMgJiYgL1swLTddL3UudGVzdCh0ZXh0W2luZGV4ICsgMV0gPz8gXCJcIikpIGRpZ2l0cyArPSB0ZXh0WysraW5kZXhdXG4gICAgICBkZWNvZGVkICs9IFN0cmluZy5mcm9tQ29kZVBvaW50KE51bWJlci5wYXJzZUludChkaWdpdHMsIDgpKVxuICAgICAgY29udGludWVcbiAgICB9XG4gICAgY29uc3Qgd2lkdGhzID0gbmV3IE1hcChbW1wieFwiLCAyXSwgW1widVwiLCA0XSwgW1wiVVwiLCA4XV0pXG4gICAgY29uc3Qgd2lkdGggPSB3aWR0aHMuZ2V0KGVzY2FwZSlcblxuICAgIGlmICghd2lkdGgpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInB5dGhvblwiLCBgdW5zdXBwb3J0ZWQgc3RyaW5nIGVzY2FwZSBcXFxcJHtlc2NhcGV9YCwgbG9jYXRpb24pXG4gICAgY29uc3QgZGlnaXRzID0gdGV4dC5zbGljZShpbmRleCArIDEsIGluZGV4ICsgMSArIHdpZHRoKVxuICAgIGlmIChkaWdpdHMubGVuZ3RoICE9IHdpZHRoIHx8ICEvXlswLTlBLUZhLWZdKyQvdS50ZXN0KGRpZ2l0cykpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInB5dGhvblwiLCBcImludmFsaWQgc3RyaW5nIGVzY2FwZVwiLCBsb2NhdGlvbilcbiAgICBpbmRleCArPSB3aWR0aFxuICAgIGNvbnN0IGNvZGVQb2ludCA9IE51bWJlci5wYXJzZUludChkaWdpdHMsIDE2KVxuXG4gICAgaWYgKGNvZGVQb2ludCA+IDB4MTBGRkZGIHx8IGNvZGVQb2ludCA+PSAweEQ4MDAgJiYgY29kZVBvaW50IDw9IDB4REZGRikge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicHl0aG9uXCIsIFwiaW52YWxpZCBVbmljb2RlIHN0cmluZyBlc2NhcGVcIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIGRlY29kZWQgKz0gU3RyaW5nLmZyb21Db2RlUG9pbnQoY29kZVBvaW50KVxuICB9XG5cbiAgaWYgKCFoYXNPbmx5VW5pY29kZVNjYWxhcnMoZGVjb2RlZCkpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInB5dGhvblwiLCBcImludmFsaWQgVW5pY29kZSBzdHJpbmcgbGl0ZXJhbFwiLCBsb2NhdGlvbilcblxuICByZXR1cm4gZGVjb2RlZFxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBhbm5vdGF0ZWQgYXNzaWdubWVudCBvciBwbGFpbiBhc3NpZ25tZW50LlxuICogQHBhcmFtIHtpbXBvcnQoXCJ0cmVlLXNpdHRlclwiKS5TeW50YXhOb2RlfSBub2RlIC0gQXNzaWdubWVudCBub2RlLlxuICogQHBhcmFtIHtQeXRob25Db250ZXh0fSBjb250ZXh0IC0gQ29tbWVudCBhc3NvY2lhdGlvbiBzdGF0ZS5cbiAqIEBwYXJhbSB7U2V0PHN0cmluZz59IHZpc2libGUgLSBWaXNpYmxlIGJpbmRpbmdzIGluIHRoaXMgbGV4aWNhbCBzY29wZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuTG9jYWxTdGF0ZW1lbnR9IFNlbWFudGljIGxvY2FsIHN0YXRlbWVudC5cbiAqL1xuZnVuY3Rpb24gY29udmVydEFzc2lnbm1lbnQobm9kZSwgY29udGV4dCwgdmlzaWJsZSwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBsZWZ0ID0gcmVxdWlyZWRGaWVsZChub2RlLCBcImxlZnRcIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgcmlnaHQgPSByZXF1aXJlZEZpZWxkKG5vZGUsIFwicmlnaHRcIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgdHlwZU5vZGUgPSBub2RlLmNoaWxkRm9yRmllbGROYW1lKFwidHlwZVwiKVxuXG4gIGlmIChsZWZ0LnR5cGUgIT0gXCJpZGVudGlmaWVyXCIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInB5dGhvblwiLCBcIm5vbi1pZGVudGlmaWVyIGFzc2lnbm1lbnQgdGFyZ2V0XCIsIG5vZGVMb2NhdGlvbihsZWZ0LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3QgbmFtZSA9IGlkZW50aWZpZXIobGVmdCwgdHlwZU5vZGUgPyBcImxvY2FsXCIgOiBcImFzc2lnbm1lbnQgdGFyZ2V0XCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IG5hbWVMb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihsZWZ0LCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBvcGVyYXRvciA9IG9wZXJhdG9yVG9rZW4obm9kZSwgbmV3IFNldChbXCI9XCJdKSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAoIXR5cGVOb2RlKSB7XG4gICAgaWYgKCF2aXNpYmxlLmhhcyhuYW1lKSkgcmV0dXJuIG1pc3NpbmdUeXBlKFwicHl0aG9uXCIsIGBMb2NhbCAnJHtuYW1lfSdgLCBsb2NhdGlvbilcbiAgICBjb25zdCB0YXJnZXQgPSB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJJZGVudGlmaWVyRXhwcmVzc2lvblwiKSwgbG9jYXRpb246IG5hbWVMb2NhdGlvbiwgbmFtZX0sIHtuYW1lOiBuYW1lTG9jYXRpb259KVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgZXhwcmVzc2lvbjogY29udmVydEV4cHJlc3Npb24ocmlnaHQsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiQXNzaWdubWVudFN0YXRlbWVudFwiKSxcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgdGFyZ2V0XG4gICAgfSwge29wZXJhdG9yOiBub2RlTG9jYXRpb24ob3BlcmF0b3IsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgfVxuXG4gIGNvbnN0IGRlY2xhcmF0aW9uID0gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgaW5pdGlhbGl6ZXI6IGNvbnZlcnRFeHByZXNzaW9uKHJpZ2h0LCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJMb2NhbERlY2xhcmF0aW9uXCIpLFxuICAgIGxvY2F0aW9uLFxuICAgIG11dGFibGU6ICF0YWtlSW1tdXRhYmxlTWFya2VyKG5vZGUsIGNvbnRleHQpLFxuICAgIG5hbWUsXG4gICAgdHlwZTogY29udmVydFR5cGUodHlwZU5vZGUsIGBMb2NhbCAnJHtuYW1lfSdgLCBsb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgfSwge25hbWU6IG5hbWVMb2NhdGlvbiwgb3BlcmF0b3I6IG5vZGVMb2NhdGlvbihvcGVyYXRvciwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuXG4gIHZpc2libGUuYWRkKG5hbWUpXG5cbiAgcmV0dXJuIGRlY2xhcmF0aW9uXG59XG5cbi8qKlxuICogQXNzb2NpYXRlcyB0aGUgZXhhY3QgaW1tZWRpYXRlbHkgcHJlY2VkaW5nIGltbXV0YWJsZSBtYXJrZXIgd2l0aCBhIGxvY2FsLlxuICogQHBhcmFtIHtpbXBvcnQoXCJ0cmVlLXNpdHRlclwiKS5TeW50YXhOb2RlfSBub2RlIC0gTG9jYWwgYXNzaWdubWVudC5cbiAqIEBwYXJhbSB7UHl0aG9uQ29udGV4dH0gY29udGV4dCAtIENvbW1lbnQgc3RhdGUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGUgbG9jYWwgaXMgaW1tdXRhYmxlLlxuICovXG5mdW5jdGlvbiB0YWtlSW1tdXRhYmxlTWFya2VyKG5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbWFya2VyID0gY29udGV4dC5jb21tZW50cy5maW5kKChjb21tZW50KSA9PiBjb21tZW50LnRleHQgPT0gaW1tdXRhYmxlTWFya2VyICYmXG4gICAgY29tbWVudC5lbmRQb3NpdGlvbi5yb3cgKyAxID09IG5vZGUuc3RhcnRQb3NpdGlvbi5yb3cgJiYgY29tbWVudC5zdGFydFBvc2l0aW9uLmNvbHVtbiA9PSBub2RlLnN0YXJ0UG9zaXRpb24uY29sdW1uKVxuXG4gIGlmICghbWFya2VyKSByZXR1cm4gZmFsc2VcbiAgY29udGV4dC51c2VkSW1tdXRhYmxlTWFya2Vycy5hZGQobWFya2VyKVxuXG4gIHJldHVybiB0cnVlXG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIHN0YXRlbWVudC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwidHJlZS1zaXR0ZXJcIikuU3ludGF4Tm9kZX0gbm9kZSAtIFN0YXRlbWVudCBub2RlLlxuICogQHBhcmFtIHtQeXRob25Db250ZXh0fSBjb250ZXh0IC0gQ29tbWVudCBzdGF0ZS5cbiAqIEBwYXJhbSB7U2V0PHN0cmluZz59IHZpc2libGUgLSBWaXNpYmxlIGJpbmRpbmdzIGluIHRoaXMgbGV4aWNhbCBzY29wZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU3RhdGVtZW50fSBTZW1hbnRpYyBzdGF0ZW1lbnQuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRTdGF0ZW1lbnQobm9kZSwgY29udGV4dCwgdmlzaWJsZSwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmIChub2RlLnR5cGUgPT0gXCJyZXR1cm5fc3RhdGVtZW50XCIpIHtcbiAgICBjb25zdCBleHByZXNzaW9ucyA9IG5vZGUubmFtZWRDaGlsZHJlbi5maWx0ZXIoKGNoaWxkKSA9PiBjaGlsZC50eXBlICE9IFwiY29tbWVudFwiKVxuXG4gICAgaWYgKGV4cHJlc3Npb25zLmxlbmd0aCA+IDEpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInB5dGhvblwiLCBcInJldHVybiB3aXRoIG1vcmUgdGhhbiBvbmUgZXhwcmVzc2lvblwiLCBsb2NhdGlvbilcbiAgICBpZiAoZXhwcmVzc2lvbnMubGVuZ3RoID09IDApIHJldHVybiB7a2luZDogXCJSZXR1cm5TdGF0ZW1lbnRcIiwgbG9jYXRpb259XG5cbiAgICByZXR1cm4ge2V4cHJlc3Npb246IGNvbnZlcnRFeHByZXNzaW9uKGV4cHJlc3Npb25zWzBdLCBmaWxlbmFtZSwgc291cmNlKSwga2luZDogXCJSZXR1cm5TdGF0ZW1lbnRcIiwgbG9jYXRpb259XG4gIH1cbiAgaWYgKG5vZGUudHlwZSA9PSBcImlmX3N0YXRlbWVudFwiKSByZXR1cm4gY29udmVydElmKG5vZGUsIGNvbnRleHQsIHZpc2libGUsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGlmIChub2RlLnR5cGUgPT0gXCJleHByZXNzaW9uX3N0YXRlbWVudFwiKSB7XG4gICAgY29uc3QgZXhwcmVzc2lvbnMgPSBub2RlLm5hbWVkQ2hpbGRyZW4uZmlsdGVyKChjaGlsZCkgPT4gY2hpbGQudHlwZSAhPSBcImNvbW1lbnRcIilcblxuICAgIGlmIChleHByZXNzaW9ucy5sZW5ndGggIT0gMSkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicHl0aG9uXCIsIG5vZGUudHlwZSwgbG9jYXRpb24pXG4gICAgaWYgKGV4cHJlc3Npb25zWzBdLnR5cGUgPT0gXCJhc3NpZ25tZW50XCIpIHJldHVybiBjb252ZXJ0QXNzaWdubWVudChleHByZXNzaW9uc1swXSwgY29udGV4dCwgdmlzaWJsZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICBpZiAoZXhwcmVzc2lvbnNbMF0udHlwZSA9PSBcImNhbGxcIikge1xuICAgICAgY29uc3QgY2FsbGVlTm9kZSA9IHJlcXVpcmVkRmllbGQoZXhwcmVzc2lvbnNbMF0sIFwiZnVuY3Rpb25cIiwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgICAgaWYgKGNhbGxlZU5vZGUudHlwZSA9PSBcImlkZW50aWZpZXJcIiAmJiBjYWxsZWVOb2RlLnRleHQgPT0gXCJwcmludFwiKSByZXR1cm4gY29udmVydFByaW50KGV4cHJlc3Npb25zWzBdLCBmaWxlbmFtZSwgc291cmNlLCBsb2NhdGlvbilcbiAgICAgIGNvbnN0IGNhbGwgPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNhbGxFeHByZXNzaW9ufSAqLyAoY29udmVydEV4cHJlc3Npb24oZXhwcmVzc2lvbnNbMF0sIGZpbGVuYW1lLCBzb3VyY2UpKVxuXG4gICAgICByZXR1cm4ge2V4cHJlc3Npb246IGNhbGwsIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkV4cHJlc3Npb25TdGF0ZW1lbnRcIiksIGxvY2F0aW9ufVxuICAgIH1cblxuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInB5dGhvblwiLCBcImV4cHJlc3Npb24gc3RhdGVtZW50IG90aGVyIHRoYW4gYXNzaWdubWVudCwgcHJpbnQsIG9yIGRpcmVjdCBjYWxsXCIsIGxvY2F0aW9uKVxuICB9XG5cbiAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicHl0aG9uXCIsIG5vZGUudHlwZSwgbG9jYXRpb24pXG59XG5cbi8qKlxuICogQ29udmVydHMgdGhlIGV4YWN0IHByaW50KGV4cHJlc3Npb24pIHN0YXRlbWVudC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwidHJlZS1zaXR0ZXJcIikuU3ludGF4Tm9kZX0gbm9kZSAtIEV4cHJlc3Npb24gc3RhdGVtZW50IHZhbHVlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IGxvY2F0aW9uIC0gV2hvbGUgc3RhdGVtZW50IGxvY2F0aW9uLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlByaW50U3RhdGVtZW50fSBQcmludCBzdGF0ZW1lbnQuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRQcmludChub2RlLCBmaWxlbmFtZSwgc291cmNlLCBsb2NhdGlvbikge1xuICBpZiAobm9kZS50eXBlICE9IFwiY2FsbFwiKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJweXRob25cIiwgXCJlbnRyeSBleHByZXNzaW9uIG90aGVyIHRoYW4gcHJpbnRcIiwgbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICBjb25zdCBjYWxsZWUgPSByZXF1aXJlZEZpZWxkKG5vZGUsIFwiZnVuY3Rpb25cIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgYXJndW1lbnRzTm9kZSA9IHJlcXVpcmVkRmllbGQobm9kZSwgXCJhcmd1bWVudHNcIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgYXJndW1lbnRzXyA9IGFyZ3VtZW50c05vZGUubmFtZWRDaGlsZHJlbi5maWx0ZXIoKGNoaWxkKSA9PiBjaGlsZC50eXBlICE9IFwiY29tbWVudFwiKVxuXG4gIGlmIChjYWxsZWUudHlwZSAhPSBcImlkZW50aWZpZXJcIiB8fCBjYWxsZWUudGV4dCAhPSBcInByaW50XCIgfHwgYXJndW1lbnRzTm9kZS50eXBlICE9IFwiYXJndW1lbnRfbGlzdFwiIHx8IGFyZ3VtZW50c18ubGVuZ3RoICE9IDEpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJweXRob25cIiwgXCJwcmludCBjYWxsIHNoYXBlXCIsIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuXG4gIHJldHVybiB7ZXhwcmVzc2lvbjogY29udmVydEV4cHJlc3Npb24oYXJndW1lbnRzX1swXSwgZmlsZW5hbWUsIHNvdXJjZSksIGtpbmQ6IFwiUHJpbnRTdGF0ZW1lbnRcIiwgbG9jYXRpb259XG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIGlmL2VsaWYvZWxzZSBub2RlIGludG8gbmVzdGVkIHNlbWFudGljIGJsb2Nrcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwidHJlZS1zaXR0ZXJcIikuU3ludGF4Tm9kZX0gbm9kZSAtIElmIG9yIGVsaWYgbm9kZS5cbiAqIEBwYXJhbSB7UHl0aG9uQ29udGV4dH0gY29udGV4dCAtIENvbW1lbnQgc3RhdGUuXG4gKiBAcGFyYW0ge1NldDxzdHJpbmc+fSB2aXNpYmxlIC0gVmlzaWJsZSBiaW5kaW5ncyBpbiB0aGlzIGxleGljYWwgc2NvcGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLklmU3RhdGVtZW50fSBTZW1hbnRpYyBicmFuY2guXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRJZihub2RlLCBjb250ZXh0LCB2aXNpYmxlLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IGNvbmRpdGlvbk5vZGUgPSByZXF1aXJlZEZpZWxkKG5vZGUsIFwiY29uZGl0aW9uXCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IGNvbnNlcXVlbmNlTm9kZSA9IHJlcXVpcmVkRmllbGQobm9kZSwgXCJjb25zZXF1ZW5jZVwiLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBhbHRlcm5hdGl2ZU5vZGVzID0gbm9kZS5uYW1lZENoaWxkcmVuLmZpbHRlcigoX2NoaWxkLCBpbmRleCkgPT4gbm9kZS5maWVsZE5hbWVGb3JOYW1lZENoaWxkKGluZGV4KSA9PSBcImFsdGVybmF0aXZlXCIpXG4gIGNvbnN0IGFsdGVybmF0ZSA9IGNvbnZlcnRBbHRlcm5hdGl2ZXMoYWx0ZXJuYXRpdmVOb2RlcywgY29udGV4dCwgbmV3IFNldCh2aXNpYmxlKSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICByZXR1cm4ge1xuICAgIC4uLihhbHRlcm5hdGUgPyB7YWx0ZXJuYXRlfSA6IHt9KSxcbiAgICBjb25kaXRpb246IGNvbnZlcnRFeHByZXNzaW9uKGNvbmRpdGlvbk5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgIGNvbnNlcXVlbnQ6IGNvbnZlcnRCbG9jayhjb25zZXF1ZW5jZU5vZGUsIGNvbnRleHQsIG5ldyBTZXQodmlzaWJsZSksIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgIGtpbmQ6IFwiSWZTdGF0ZW1lbnRcIixcbiAgICBsb2NhdGlvblxuICB9XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gZWxzZSBibG9jayBvciBuZXN0cyBvbmUgZWxpZiBpbnNpZGUgaXRzIHNlbWFudGljIGFsdGVybmF0ZSBibG9jay5cbiAqIEBwYXJhbSB7aW1wb3J0KFwidHJlZS1zaXR0ZXJcIikuU3ludGF4Tm9kZVtdfSBub2RlcyAtIE9yZGVyZWQgZWxpZi9lbHNlIG5vZGVzLlxuICogQHBhcmFtIHtQeXRob25Db250ZXh0fSBjb250ZXh0IC0gQ29tbWVudCBzdGF0ZS5cbiAqIEBwYXJhbSB7U2V0PHN0cmluZz59IHZpc2libGUgLSBWaXNpYmxlIGJpbmRpbmdzIGluIHRoaXMgbGV4aWNhbCBzY29wZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmxvY2sgfCB1bmRlZmluZWR9IEFsdGVybmF0ZSBibG9jay5cbiAqL1xuZnVuY3Rpb24gY29udmVydEFsdGVybmF0aXZlcyhub2RlcywgY29udGV4dCwgdmlzaWJsZSwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJsb2NrIHwgdW5kZWZpbmVkfSAqL1xuICBsZXQgYWx0ZXJuYXRlXG5cbiAgZm9yIChsZXQgaW5kZXggPSBub2Rlcy5sZW5ndGggLSAxOyBpbmRleCA+PSAwOyBpbmRleCAtPSAxKSB7XG4gICAgY29uc3Qgbm9kZSA9IG5vZGVzW2luZGV4XVxuXG4gICAgaWYgKG5vZGUudHlwZSA9PSBcImVsc2VfY2xhdXNlXCIpIHtcbiAgICAgIGlmIChhbHRlcm5hdGUpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInB5dGhvblwiLCBcIm11bHRpcGxlIGVsc2UgY2xhdXNlc1wiLCBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICBhbHRlcm5hdGUgPSBjb252ZXJ0QmxvY2socmVxdWlyZWRGaWVsZChub2RlLCBcImJvZHlcIiwgZmlsZW5hbWUsIHNvdXJjZSksIGNvbnRleHQsIG5ldyBTZXQodmlzaWJsZSksIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBpZiAobm9kZS50eXBlICE9IFwiZWxpZl9jbGF1c2VcIikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicHl0aG9uXCIsIG5vZGUudHlwZSwgbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIGNvbnN0IG5lc3RlZCA9IGNvbnZlcnRJZihub2RlLCBjb250ZXh0LCBuZXcgU2V0KHZpc2libGUpLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gICAgaWYgKGFsdGVybmF0ZSkgbmVzdGVkLmFsdGVybmF0ZSA9IGFsdGVybmF0ZVxuICAgIGFsdGVybmF0ZSA9IHtraW5kOiBcIkJsb2NrXCIsIGxvY2F0aW9uOiBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksIHN0YXRlbWVudHM6IFtuZXN0ZWRdfVxuICB9XG5cbiAgcmV0dXJuIGFsdGVybmF0ZVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBpbmRlbnRhdGlvbiBibG9jayBhbmQgcGVybWl0cyBwYXNzIG9ubHkgYXMgaXRzIHNvbGUgZXhlY3V0YWJsZSBub2RlLlxuICogQHBhcmFtIHtpbXBvcnQoXCJ0cmVlLXNpdHRlclwiKS5TeW50YXhOb2RlfSBub2RlIC0gQmxvY2sgbm9kZS5cbiAqIEBwYXJhbSB7UHl0aG9uQ29udGV4dH0gY29udGV4dCAtIENvbW1lbnQgc3RhdGUuXG4gKiBAcGFyYW0ge1NldDxzdHJpbmc+fSB2aXNpYmxlIC0gVmlzaWJsZSBiaW5kaW5ncyBpbiB0aGlzIGxleGljYWwgc2NvcGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJsb2NrfSBTZW1hbnRpYyBibG9jay5cbiAqL1xuZnVuY3Rpb24gY29udmVydEJsb2NrKG5vZGUsIGNvbnRleHQsIHZpc2libGUsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAobm9kZS50eXBlICE9IFwiYmxvY2tcIikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicHl0aG9uXCIsIG5vZGUudHlwZSwgbG9jYXRpb24pXG4gIGNvbnN0IHN0YXRlbWVudHMgPSBub2RlLm5hbWVkQ2hpbGRyZW4uZmlsdGVyKChjaGlsZCkgPT4gY2hpbGQudHlwZSAhPSBcImNvbW1lbnRcIilcblxuICBpZiAoc3RhdGVtZW50cy5zb21lKChzdGF0ZW1lbnQpID0+IHN0YXRlbWVudC50eXBlID09IFwicGFzc19zdGF0ZW1lbnRcIikpIHtcbiAgICBpZiAoc3RhdGVtZW50cy5sZW5ndGggIT0gMSkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicHl0aG9uXCIsIFwicGFzcyB3aXRoIGV4ZWN1dGFibGUgc2libGluZ3NcIiwgbG9jYXRpb24pXG5cbiAgICByZXR1cm4ge2tpbmQ6IFwiQmxvY2tcIiwgbG9jYXRpb24sIHN0YXRlbWVudHM6IFtdfVxuICB9XG5cbiAgcmV0dXJuIHtraW5kOiBcIkJsb2NrXCIsIGxvY2F0aW9uLCBzdGF0ZW1lbnRzOiBzdGF0ZW1lbnRzLm1hcCgoc3RhdGVtZW50KSA9PiBjb252ZXJ0U3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCwgdmlzaWJsZSwgZmlsZW5hbWUsIHNvdXJjZSkpfVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBleGFjdCBzeW5jaHJvbm91cyB0b3AtbGV2ZWwgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcInRyZWUtc2l0dGVyXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBGdW5jdGlvbiBub2RlLlxuICogQHBhcmFtIHtQeXRob25Db250ZXh0fSBjb250ZXh0IC0gQ29tbWVudCBzdGF0ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRnVuY3Rpb25EZWNsYXJhdGlvbn0gU2VtYW50aWMgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRGdW5jdGlvbihub2RlLCBjb250ZXh0LCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKG5vZGUudHlwZSAhPSBcImZ1bmN0aW9uX2RlZmluaXRpb25cIiB8fCBub2RlLmNoaWxkcmVuLnNvbWUoKGNoaWxkKSA9PiAhY2hpbGQuaXNOYW1lZCAmJiBjaGlsZC50eXBlID09IFwiYXN5bmNcIikpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJweXRob25cIiwgbm9kZS50eXBlLCBsb2NhdGlvbilcbiAgfVxuICBjb25zdCB0eXBlUGFyYW1ldGVyc05vZGUgPSBub2RlLmNoaWxkRm9yRmllbGROYW1lKFwidHlwZV9wYXJhbWV0ZXJzXCIpXG5cbiAgaWYgKHR5cGVQYXJhbWV0ZXJzTm9kZSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInB5dGhvblwiLCB0eXBlUGFyYW1ldGVyc05vZGUudHlwZSwgbm9kZUxvY2F0aW9uKHR5cGVQYXJhbWV0ZXJzTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgbmFtZU5vZGUgPSByZXF1aXJlZEZpZWxkKG5vZGUsIFwibmFtZVwiLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBwYXJhbWV0ZXJzTm9kZSA9IHJlcXVpcmVkRmllbGQobm9kZSwgXCJwYXJhbWV0ZXJzXCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IHJldHVybk5vZGUgPSBub2RlLmNoaWxkRm9yRmllbGROYW1lKFwicmV0dXJuX3R5cGVcIilcbiAgY29uc3QgYm9keU5vZGUgPSByZXF1aXJlZEZpZWxkKG5vZGUsIFwiYm9keVwiLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBuYW1lID0gaWRlbnRpZmllcihuYW1lTm9kZSwgXCJmdW5jdGlvblwiLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBwYXJhbWV0ZXJOb2RlcyA9IHBhcmFtZXRlcnNOb2RlLm5hbWVkQ2hpbGRyZW4uZmlsdGVyKChjaGlsZCkgPT4gY2hpbGQudHlwZSAhPSBcImNvbW1lbnRcIilcblxuICBpZiAocGFyYW1ldGVyc05vZGUuY2hpbGRyZW4uc29tZSgoY2hpbGQpID0+ICFjaGlsZC5pc05hbWVkICYmICFbXCIoXCIsIFwiKVwiLCBcIixcIl0uaW5jbHVkZXMoY2hpbGQudHlwZSkpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicHl0aG9uXCIsIFwicGFyYW1ldGVyIHNlcGFyYXRvcnNcIiwgbm9kZUxvY2F0aW9uKHBhcmFtZXRlcnNOb2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBjb25zdCBwYXJhbWV0ZXJzID0gcGFyYW1ldGVyTm9kZXMubWFwKChwYXJhbWV0ZXJOb2RlKSA9PiB7XG4gICAgY29uc3QgcGFyYW1ldGVyTG9jYXRpb24gPSBub2RlTG9jYXRpb24ocGFyYW1ldGVyTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgIGlmIChwYXJhbWV0ZXJOb2RlLnR5cGUgIT0gXCJ0eXBlZF9wYXJhbWV0ZXJcIikge1xuICAgICAgaWYgKHBhcmFtZXRlck5vZGUudHlwZSA9PSBcImlkZW50aWZpZXJcIikgcmV0dXJuIG1pc3NpbmdUeXBlKFwicHl0aG9uXCIsIGBQYXJhbWV0ZXIgJyR7cGFyYW1ldGVyTm9kZS50ZXh0fSdgLCBwYXJhbWV0ZXJMb2NhdGlvbilcblxuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicHl0aG9uXCIsIHBhcmFtZXRlck5vZGUudHlwZSwgcGFyYW1ldGVyTG9jYXRpb24pXG4gICAgfVxuICAgIGNvbnN0IHBhcmFtZXRlck5hbWVOb2RlID0gcGFyYW1ldGVyTm9kZS5uYW1lZENoaWxkcmVuLmZpbmQoKGNoaWxkKSA9PiBjaGlsZC50eXBlID09IFwiaWRlbnRpZmllclwiKVxuICAgIGNvbnN0IHR5cGVOb2RlID0gcGFyYW1ldGVyTm9kZS5jaGlsZEZvckZpZWxkTmFtZShcInR5cGVcIilcblxuICAgIGlmICghcGFyYW1ldGVyTmFtZU5vZGUpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInB5dGhvblwiLCBcInBhcmFtZXRlciB3aXRob3V0IGlkZW50aWZpZXJcIiwgcGFyYW1ldGVyTG9jYXRpb24pXG4gICAgY29uc3QgcGFyYW1ldGVyTmFtZSA9IGlkZW50aWZpZXIocGFyYW1ldGVyTmFtZU5vZGUsIFwicGFyYW1ldGVyXCIsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJQYXJhbWV0ZXJcIiksXG4gICAgICBsb2NhdGlvbjogcGFyYW1ldGVyTG9jYXRpb24sXG4gICAgICBuYW1lOiBwYXJhbWV0ZXJOYW1lLFxuICAgICAgdHlwZTogY29udmVydFR5cGUodHlwZU5vZGUsIGBQYXJhbWV0ZXIgJyR7cGFyYW1ldGVyTmFtZX0nYCwgcGFyYW1ldGVyTG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgfSwge25hbWU6IG5vZGVMb2NhdGlvbihwYXJhbWV0ZXJOYW1lTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICB9KVxuXG4gIGNvbnN0IHZpc2libGUgPSBuZXcgU2V0KHBhcmFtZXRlcnMubWFwKChwYXJhbWV0ZXIpID0+IHBhcmFtZXRlci5uYW1lKSlcblxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgYm9keTogY29udmVydEJsb2NrKGJvZHlOb2RlLCBjb250ZXh0LCB2aXNpYmxlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICBraW5kOiBcIkZ1bmN0aW9uRGVjbGFyYXRpb25cIixcbiAgICBsb2NhdGlvbixcbiAgICBuYW1lLFxuICAgIHBhcmFtZXRlcnMsXG4gICAgcmV0dXJuVHlwZTogY29udmVydFJldHVyblR5cGUocmV0dXJuTm9kZSwgYEZ1bmN0aW9uICcke25hbWV9JyByZXR1cm5gLCBsb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgfSwge25hbWU6IG5vZGVMb2NhdGlvbihuYW1lTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSl9KVxufVxuXG4vKipcbiAqIFBhcnNlcyB0aGUgc3RyaWN0IFRhc2sgMDE2IFB5dGhvbiBwcm9maWxlLlxuICogQHBhcmFtIHt7ZmlsZW5hbWU6IHN0cmluZywgc291cmNlOiBzdHJpbmd9fSBpbnB1dCAtIFBhcnNlciBpbnB1dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gU2VtYW50aWMgbW9kdWxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQeXRob24oe2ZpbGVuYW1lLCBzb3VyY2V9KSB7XG4gIGlmICghaGFzT25seVVuaWNvZGVTY2FsYXJzKHNvdXJjZSkpIHtcbiAgICBjb25zdCBpbnZhbGlkT2Zmc2V0ID0gZmlyc3RMb25lU3Vycm9nYXRlT2Zmc2V0KHNvdXJjZSlcblxuICAgIHRocm93IG5ldyBTZW1hbnRpZm9sZERpYWdub3N0aWMoe1xuICAgICAgY29kZTogXCJQQVJTRV9FUlJPUlwiLFxuICAgICAgbGFuZ3VhZ2U6IFwicHl0aG9uXCIsXG4gICAgICBsb2NhdGlvbjogbG9jYXRpb25Gcm9tT2Zmc2V0cyhmaWxlbmFtZSwgc291cmNlLCBpbnZhbGlkT2Zmc2V0LCBpbnZhbGlkT2Zmc2V0ICsgMSksXG4gICAgICBtZXNzYWdlOiBcIlB5dGhvbiBzb3VyY2UgY29udGFpbnMgYW4gaW52YWxpZCBsb25lIFVURi0xNiBzdXJyb2dhdGUuXCJcbiAgICB9KVxuICB9XG4gIGxldCB0cmVlXG5cbiAgdHJ5IHtcbiAgICB0cmVlID0gcGFyc2VyLnBhcnNlKHNvdXJjZSlcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gcGFyc2VGYWlsdXJlKFwicHl0aG9uXCIsIGVycm9yKVxuICB9XG4gIGNvbnN0IHJvb3QgPSB0cmVlLnJvb3ROb2RlXG5cbiAgdmFsaWRhdGVQYXJzZXJUcmVlKHJvb3QsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGlmIChyb290LnR5cGUgIT0gXCJtb2R1bGVcIikgdGhyb3cgbmV3IEVycm9yKGBUcmVlLXNpdHRlciByZXR1cm5lZCBQeXRob24gcm9vdCAnJHtyb290LnR5cGV9Jy5gKVxuXG4gIGNvbnN0IGNvbW1lbnRzID0gcm9vdC5kZXNjZW5kYW50c09mVHlwZShcImNvbW1lbnRcIilcbiAgY29uc3QgY29udGV4dCA9IHtjb21tZW50cywgdXNlZEltbXV0YWJsZU1hcmtlcnM6IG5ldyBTZXQoKX1cbiAgY29uc3QgZnVuY3Rpb25zID0gW11cbiAgY29uc3QgZW50cnlOb2RlcyA9IFtdXG4gIGxldCBzYXdFbnRyeSA9IGZhbHNlXG5cbiAgZm9yIChjb25zdCBub2RlIG9mIHJvb3QubmFtZWRDaGlsZHJlbikge1xuICAgIGlmIChub2RlLnR5cGUgPT0gXCJjb21tZW50XCIpIGNvbnRpbnVlXG4gICAgaWYgKG5vZGUudHlwZSA9PSBcImZ1bmN0aW9uX2RlZmluaXRpb25cIiAmJiAhc2F3RW50cnkpIGZ1bmN0aW9ucy5wdXNoKGNvbnZlcnRGdW5jdGlvbihub2RlLCBjb250ZXh0LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICBlbHNlIHtcbiAgICAgIHNhd0VudHJ5ID0gdHJ1ZVxuICAgICAgZW50cnlOb2Rlcy5wdXNoKG5vZGUpXG4gICAgfVxuICB9XG4gIGNvbnN0IGxvY2F0aW9uID0gbW9kdWxlTG9jYXRpb24oZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgZW50cnlMb2NhdGlvbiA9IGVudHJ5Tm9kZXMubGVuZ3RoID09IDAgPyBsb2NhdGlvbiA6IGxvY2F0aW9uRnJvbU9mZnNldHMoXG4gICAgZmlsZW5hbWUsXG4gICAgc291cmNlLFxuICAgIGJpbmRpbmdJbmRleFRvVXRmMTZPZmZzZXQoc291cmNlLCBlbnRyeU5vZGVzWzBdLnN0YXJ0SW5kZXgpLFxuICAgIGJpbmRpbmdJbmRleFRvVXRmMTZPZmZzZXQoc291cmNlLCBlbnRyeU5vZGVzLmF0KC0xKT8uZW5kSW5kZXggPz8gcm9vdC5lbmRJbmRleClcbiAgKVxuICBjb25zdCBlbnRyeVZpc2libGUgPSBuZXcgU2V0KClcbiAgY29uc3QgZW50cnlIYXNQYXNzID0gZW50cnlOb2Rlcy5zb21lKChub2RlKSA9PiBub2RlLnR5cGUgPT0gXCJwYXNzX3N0YXRlbWVudFwiKVxuXG4gIGlmIChlbnRyeUhhc1Bhc3MgJiYgZW50cnlOb2Rlcy5sZW5ndGggIT0gMSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInB5dGhvblwiLCBcInRvcC1sZXZlbCBwYXNzIHdpdGggZXhlY3V0YWJsZSBzaWJsaW5nc1wiLCBlbnRyeUxvY2F0aW9uKVxuICB9XG4gIGNvbnN0IGVudHJ5QmxvY2sgPSB7XG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiQmxvY2tcIiksXG4gICAgbG9jYXRpb246IGVudHJ5TG9jYXRpb24sXG4gICAgc3RhdGVtZW50czogZW50cnlIYXNQYXNzID8gW10gOiBlbnRyeU5vZGVzLm1hcCgobm9kZSkgPT4gY29udmVydFN0YXRlbWVudChub2RlLCBjb250ZXh0LCBlbnRyeVZpc2libGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGNvbnN0IHVudXNlZE1hcmtlciA9IGNvbW1lbnRzLmZpbmQoKGNvbW1lbnQpID0+IGNvbW1lbnQudGV4dCA9PSBpbW11dGFibGVNYXJrZXIgJiYgIWNvbnRleHQudXNlZEltbXV0YWJsZU1hcmtlcnMuaGFzKGNvbW1lbnQpKVxuXG4gIGlmICh1bnVzZWRNYXJrZXIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInB5dGhvblwiLCBcInVuYXR0YWNoZWQgaW1tdXRhYmxlIG1hcmtlclwiLCBub2RlTG9jYXRpb24odW51c2VkTWFya2VyLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgaWYgKGZ1bmN0aW9ucy5sZW5ndGggPT0gMCkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicHl0aG9uXCIsIFwibW9kdWxlIHdpdGhvdXQgYSBmdW5jdGlvblwiLCBsb2NhdGlvbilcblxuICByZXR1cm4ge1xuICAgIGVudHJ5UG9pbnQ6IHtib2R5OiBlbnRyeUJsb2NrLCBraW5kOiBcIkVudHJ5UG9pbnRcIiwgbG9jYXRpb246IGVudHJ5TG9jYXRpb259LFxuICAgIGZ1bmN0aW9ucyxcbiAgICBraW5kOiBcIk1vZHVsZVwiLFxuICAgIGxvY2F0aW9uXG4gIH1cbn1cbiJdfQ==
@@ -18,7 +18,7 @@ export type RubyConversionContext = {
18
18
  functions: Map<string, RubyFunctionSignature>;
19
19
  orderedMapDeclarations?: Set<object>;
20
20
  records: Map<string, import("../semantic/types.js").RecordDeclaration>;
21
- recordNames: Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration>;
21
+ recordNames: Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration | import("../semantic/types.js").InterfaceDeclaration>;
22
22
  loopDepth?: number;
23
23
  returnType?: import("../semantic/types.js").SemanticFunctionReturnType;
24
24
  typeParameters?: Map<string, import("../semantic/types.js").TypeParameter>;
@@ -1 +1 @@
1
- {"version":3,"file":"ruby.d.ts","sourceRoot":"","sources":["../../../src/frontends/ruby.js"],"names":[],"mappings":"AA8DI,YAAgV,qBAAqB,GAA3V;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,OAAO,sBAAsB,EAAE,cAAc,CAAC;IAAC,UAAU,EAAE,OAAO,sBAAsB,EAAE,SAAS,EAAE,CAAC;IAAC,UAAU,EAAE,OAAO,sBAAsB,EAAE,0BAA0B,CAAC;IAAC,cAAc,CAAC,EAAE,OAAO,sBAAsB,EAAE,aAAa,EAAE,CAAC;IAAC,QAAQ,EAAE,OAAO,sBAAsB,EAAE,cAAc,CAAA;CAAC,CAAuB;AACrW,YAAkiC,qBAAqB,GAA7iC;IAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,sBAAsB,EAAE,mBAAmB,CAAC,CAAC;IAAC,iBAAiB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,sBAAsB,EAAE,gBAAgB,CAAC,CAAC;IAAC,iBAAiB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,sBAAsB,EAAE,YAAY,CAAC,CAAC;IAAC,uBAAuB,CAAC,EAAE,OAAO,sBAAsB,EAAE,YAAY,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,sBAAsB,EAAE,gBAAgB,CAAC;IAAC,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,sBAAsB,EAAE,gBAAgB,CAAC,CAAC;IAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,sBAAsB,EAAE,gBAAgB,CAAC,CAAC;IAAC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;IAAC,sBAAsB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,sBAAsB,EAAE,iBAAiB,CAAC,CAAC;IAAC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,sBAAsB,EAAE,iBAAiB,GAAG,OAAO,sBAAsB,EAAE,gBAAgB,GAAG,OAAO,sBAAsB,EAAE,yBAAyB,CAAC,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,sBAAsB,EAAE,0BAA0B,CAAC;IAAC,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,sBAAsB,EAAE,aAAa,CAAC,CAAA;CAAC,CAAuB;AAguD3jC;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,EAAC,YAAiB,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAC,EANrE;IAAsB,QAAQ,EAAtB,MAAM,CACd;IAAsB,MAAM,EAApB,MAAM,CACd;IAAsF,YAAY,AAAlG,CACA,EADQ,SAAS,OAAO,sBAAsB,EAAE,2BAA2B,EAAE,CAC7E;IAAsU,OAAO,AAA7U,CACA,EADQ;QAAC,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,sBAAsB,EAAE,gBAAgB,CAAC,CAAC;QAAC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,sBAAsB,EAAE,mBAAmB,CAAC,CAAC;QAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,sBAAsB,EAAE,iBAAiB,CAAC,CAAC;QAAC,MAAM,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,sBAAsB,EAAE,gBAAgB,CAAC,CAAA;KAAC,CAC7T;CAEqE,GAF3D,OAAO,sBAAsB,EAAE,cAAc,CAmJzD;AAsCD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,EAAC,QAAQ,EAAE,MAAM,EAAC,EAJjD;IAAsB,QAAQ,EAAtB,MAAM,CACd;IAAsB,MAAM,EAApB,MAAM,CACd;CAEiD,GAFvC;IAAC,OAAO,EAAE;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,sBAAsB,EAAE,cAAc,CAAC;QAAC,SAAS,EAAE,IAAI,CAAC;QAAC,YAAY,EAAE,OAAO,sBAAsB,EAAE,cAAc,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,eAAe,CAAC,EAAE,IAAI,CAAC;QAAC,QAAQ,EAAE,KAAK,CAAA;KAAC,EAAE,CAAC;IAAC,OAAO,EAAE;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,sBAAsB,EAAE,cAAc,CAAC;QAAC,QAAQ,EAAE,KAAK,CAAA;KAAC,EAAE,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE;QAAC,IAAI,EAAE,kBAAkB,GAAG,eAAe,GAAG,kBAAkB,CAAC;QAAC,QAAQ,EAAE,OAAO,sBAAsB,EAAE,cAAc,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAC,EAAE,CAAA;CAAC,CAyF/kB"}
1
+ {"version":3,"file":"ruby.d.ts","sourceRoot":"","sources":["../../../src/frontends/ruby.js"],"names":[],"mappings":"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"}