semantifold 0.10.0 → 0.12.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 (56) hide show
  1. package/README.md +2 -2
  2. package/build/src/backends/c.d.ts +2 -1
  3. package/build/src/backends/c.d.ts.map +1 -1
  4. package/build/src/backends/c.js +26 -5
  5. package/build/src/backends/cpp.js +3 -1
  6. package/build/src/backends/kotlin.d.ts +1 -1
  7. package/build/src/backends/kotlin.js +2 -2
  8. package/build/src/backends/ordered-expressions.d.ts +19 -7
  9. package/build/src/backends/ordered-expressions.d.ts.map +1 -1
  10. package/build/src/backends/ordered-expressions.js +46 -11
  11. package/build/src/backends/shared.d.ts.map +1 -1
  12. package/build/src/backends/shared.js +30 -2
  13. package/build/src/frontends/c.d.ts +34 -1
  14. package/build/src/frontends/c.d.ts.map +1 -1
  15. package/build/src/frontends/c.js +128 -21
  16. package/build/src/frontends/java.d.ts.map +1 -1
  17. package/build/src/frontends/java.js +23 -1
  18. package/build/src/frontends/javascript-typescript.d.ts.map +1 -1
  19. package/build/src/frontends/javascript-typescript.js +45 -4
  20. package/build/src/frontends/php.d.ts.map +1 -1
  21. package/build/src/frontends/php.js +54 -3
  22. package/build/src/frontends/ruby.d.ts.map +1 -1
  23. package/build/src/frontends/ruby.js +55 -5
  24. package/build/src/language-registry.d.ts.map +1 -1
  25. package/build/src/language-registry.js +33 -6
  26. package/build/src/semantic/effects.js +3 -1
  27. package/build/src/semantic/provenance.d.ts.map +1 -1
  28. package/build/src/semantic/provenance.js +11 -1
  29. package/build/src/semantic/types.d.ts +52 -2
  30. package/build/src/semantic/types.d.ts.map +1 -1
  31. package/build/src/semantic/types.js +14 -2
  32. package/build/src/semantic/validate.js +19 -2
  33. package/build/src/toolchains.js +3 -3
  34. package/docs/adr-expression-breadth.md +186 -0
  35. package/docs/c.md +1 -1
  36. package/docs/kotlin.md +2 -2
  37. package/docs/language-support.md +14 -5
  38. package/docs/parser-qualification.md +1 -1
  39. package/docs/testing.md +5 -4
  40. package/package.json +1 -1
  41. package/src/backends/c.js +23 -4
  42. package/src/backends/cpp.js +1 -0
  43. package/src/backends/kotlin.js +1 -1
  44. package/src/backends/ordered-expressions.js +46 -10
  45. package/src/backends/shared.js +31 -1
  46. package/src/frontends/c.js +135 -19
  47. package/src/frontends/java.js +24 -0
  48. package/src/frontends/javascript-typescript.js +49 -2
  49. package/src/frontends/php.js +61 -2
  50. package/src/frontends/ruby.js +62 -2
  51. package/src/language-registry.js +32 -5
  52. package/src/semantic/effects.js +1 -0
  53. package/src/semantic/provenance.js +8 -0
  54. package/src/semantic/types.js +14 -1
  55. package/src/semantic/validate.js +27 -1
  56. package/src/toolchains.js +2 -2
@@ -195,8 +195,32 @@ function convertExpression(node, filename, source, context, expectedType, preser
195
195
  }
196
196
  if (node.kind == "encapsed") {
197
197
  const literal = /** @type {import("php-parser").Encapsed} */ (node);
198
- const detail = literal.type == "string" ? "interpolated string" : `${literal.type} string`;
199
- return unsupportedSyntax("php", detail, location);
198
+ if (literal.type != "string")
199
+ return unsupportedSyntax("php", `${literal.type} string`, location);
200
+ if (!Array.isArray(literal.value))
201
+ return unsupportedSyntax("php", "interpolated string", location);
202
+ const parts = literal.value.map((part) => {
203
+ if (part.kind != "encapsedpart")
204
+ return unsupportedSyntax("php", `interpolated string part ${part.kind}`, nodeLocation(part, filename, source));
205
+ const encapsedPart = /** @type {import("php-parser").EncapsedPart} */ (part);
206
+ if (!encapsedPart.expression)
207
+ return unsupportedSyntax("php", "interpolated string part without expression", nodeLocation(encapsedPart, filename, source));
208
+ return convertExpression(encapsedPart.expression, filename, source, context, scalarType("string"));
209
+ });
210
+ if (parts.length == 0) {
211
+ return withParserRanges({ kind: /** @type {const} */ ("StringLiteral"), location, value: "" }, { literal: location });
212
+ }
213
+ let lowered = parts[0];
214
+ for (const part of parts.slice(1)) {
215
+ const semantic = withAdaptedOperation({
216
+ kind: /** @type {const} */ ("BinaryExpression"),
217
+ left: lowered,
218
+ location,
219
+ right: part
220
+ }, /** @type {import("../semantic/operators.js").AdaptedOperation} */ ("StringConcat"));
221
+ lowered = /** @type {import("../semantic/types.js").Expression} */ ( /** @type {unknown} */(semantic));
222
+ }
223
+ return withParserRanges(lowered, { literal: location });
200
224
  }
201
225
  if (node.kind == "nowdoc")
202
226
  return unsupportedSyntax("php", "nowdoc string", location);
@@ -360,6 +384,33 @@ function convertExpression(node, filename, source, context, expectedType, preser
360
384
  }), unary.type == "!" ? "Not" : "Negate");
361
385
  return /** @type {import("../semantic/types.js").Expression} */ ( /** @type {unknown} */(semantic));
362
386
  }
387
+ if (node.kind == "retif") {
388
+ const ternary = /** @type {import("php-parser").RetIf} */ (node);
389
+ if (!ternary.test || !ternary.trueExpr || !ternary.falseExpr)
390
+ return unsupportedSyntax("php", "short ternary", location);
391
+ if (ternary.test.kind == "variable") {
392
+ const tested = /** @type {import("php-parser").Variable} */ (ternary.test);
393
+ if (typeof tested.name == "string" && context.bindings.get(tested.name)?.kind == "OptionalType") {
394
+ return unsupportedSyntax("php", "optional truthiness condition", nodeLocation(tested, filename, source));
395
+ }
396
+ }
397
+ return /** @type {import("../semantic/types.js").Expression} */ ( /** @type {unknown} */(withParserRanges({
398
+ alternate: convertExpression(ternary.falseExpr, filename, source, context),
399
+ condition: convertExpression(ternary.test, filename, source, context),
400
+ consequent: convertExpression(ternary.trueExpr, filename, source, context),
401
+ kind: /** @type {const} */ ("ConditionalExpression"),
402
+ location
403
+ }, {
404
+ alternate: tokenLocation(":", ternary.trueExpr.loc?.end.offset ?? 0, ternary.falseExpr.loc?.start.offset ?? source.length, filename, source),
405
+ colon: tokenLocation(":", ternary.trueExpr.loc?.end.offset ?? 0, ternary.falseExpr.loc?.start.offset ?? source.length, filename, source),
406
+ condition: ternary.test.loc ? nodeLocation(ternary.test, filename, source) : location,
407
+ consequent: ternary.trueExpr.loc ? nodeLocation(ternary.trueExpr, filename, source) : location,
408
+ operator: tokenLocation("?", ternary.test.loc?.end.offset ?? 0, ternary.trueExpr.loc?.start.offset ?? source.length, filename, source)
409
+ })));
410
+ }
411
+ if (node.kind == "nullsafepropertylookup" || node.kind == "nullsafemethodcall") {
412
+ return unsupportedSyntax("php", "safe navigation", location);
413
+ }
363
414
  if (node.kind == "bin") {
364
415
  const binary = /** @type {import("php-parser").Bin} */ (node);
365
416
  if (binary.type == "!==" && binary.left.kind == "variable" && binary.right.kind == "nullkeyword") {
@@ -2027,4 +2078,4 @@ function phpParserFailureLocation(error, filename, source) {
2027
2078
  const offset = Math.min(lineStart + column, boundedEnd);
2028
2079
  return locationFromOffsets(filename, source, offset, Math.min(offset + 1, source.length));
2029
2080
  }
2030
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Zyb250ZW5kcy9waHAuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sU0FBUyxNQUFNLFlBQVksQ0FBQTtBQUNsQyxPQUFPLEVBQUMsS0FBSyxJQUFJLFlBQVksRUFBQyxNQUFNLGdCQUFnQixDQUFBO0FBQ3BELE9BQU8sRUFBQyxXQUFXLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixFQUFDLE1BQU0sa0JBQWtCLENBQUE7QUFDN0UsT0FBTyxFQUFDLDZCQUE2QixFQUFDLE1BQU0sd0JBQXdCLENBQUE7QUFDcEUsT0FBTyxFQUFDLG1CQUFtQixFQUFFLGNBQWMsRUFBQyxNQUFNLHlCQUF5QixDQUFBO0FBQzNFLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLDBCQUEwQixDQUFBO0FBQzdELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDJCQUEyQixDQUFBO0FBQzFELE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLDZCQUE2QixDQUFBO0FBQ2xFLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLHdCQUF3QixDQUFBO0FBQzVELE9BQU8sRUFBQyxxQkFBcUIsRUFBRSxVQUFVLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQTtBQUN4RSxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQTtBQUMvRCxPQUFPLEVBQUMsdUJBQXVCLEVBQUUsdUJBQXVCLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxjQUFjLENBQUE7QUFDL0YsT0FBTyxFQUFDLDRCQUE0QixFQUFFLG1CQUFtQixFQUFFLDJCQUEyQixFQUFFLG9CQUFvQixFQUFFLG9CQUFvQixFQUFFLHVCQUF1QixFQUFFLG1CQUFtQixFQUFFLFlBQVksRUFBRSxxQkFBcUIsRUFBRSxpQkFBaUIsRUFBRSxnQ0FBZ0MsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBQyxNQUFNLFlB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Q0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFBRSxPQUFPLEVBQUMsVUFBVSxFQUFFLElBQUksR0FBRyxFQUFFLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBQyxDQUFBO0lBQ3BJLE1BQU0sS0FBSyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDNUMsTUFBTSxJQUFJLEdBQUcsS0FBSyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUE7SUFDOUIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxPQUFPLENBQUMsQ0FBQTtJQUM5RCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLFFBQVEsSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLFNBQVMsQ0FBQyxDQUFBO0lBQ3BGLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksVUFBVSxDQUFDLENBQUE7SUFDaEUsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFBO0lBQ3JHLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDO1FBQzFILGFBQWEs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R0FBRyxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUE7SUFFdkQsT0FBTyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7QUFDM0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgUGhwUGFyc2VyIGZyb20gXCJwaHAtcGFyc2VyXCJcbmltcG9ydCB7cGFyc2UgYXMgcGFyc2VDb21tZW50fSBmcm9tIFwiY29tbWVudC1wYXJzZXJcIlxuaW1wb3J0IHttaXNzaW5nVHlwZSwgcGFyc2VGYWlsdXJlLCB1bnN1cHBvcnRlZFN5bnRheH0gZnJvbSBcIi4uL2RpYWdub3N0aWMuanNcIlxuaW1wb3J0IHtibG9ja1JlZmVyZW5jZXNQcm90ZWN0ZWRFbnRyeX0gZnJvbSBcIi4uL3NlbWFudGljL2VmZmVjdHMuanNcIlxuaW1wb3J0IHtsb2NhdGlvbkZyb21PZmZzZXRzLCBtb2R1bGVMb2NhdGlvbn0gZnJvbSBcIi4uL3NlbWFudGljL2xvY2F0aW9uLmpzXCJcbmltcG9ydCB7d2l0aEFkYXB0ZWRPcGVyYXRpb259IGZyb20gXCIuLi9zZW1hbnRpYy9vcGVyYXRvcnMuanNcIlxuaW1wb3J0IHt3aXRoUGFyc2VyUmFuZ2VzfSBmcm9tIFwiLi4vc2VtYW50aWMvcHJvdmVuYW5jZS5qc1wiXG5pbXBvcnQge2lzVGFzazAzNFJlc291cmNlUHJvYmV9IGZyb20gXCIuLi9zZW1hbnRpYy9jYXBhYmlsaXRpZXMuanNcIlxuaW1wb3J0IHtoYXNFeGFjdEVmZmVjdFN1cHBvcnR9IGZyb20gXCIuLi9iYWNrZW5kcy9lZmZlY3RzLmpzXCJcbmltcG9ydCB7aGFzT25seVVuaWNvZGVTY2FsYXJzLCBzY2FsYXJUeXBlfSBmcm9tIFwiLi4vc2VtYW50aWMvc2NhbGFycy5qc1wiXG5pbXBvcnQge3R5cGVDb250YWluc0FueVZhcmlhYmxlfSBmcm9tIFwiLi4vc2VtYW50aWMvZ2VuZXJpY3MuanNcIlxuaW1wb3J0IHtyZXF1aXJlU291cmNlUmV0dXJuVHlwZSwgcmVxdWlyZVNvdXJjZVNjYWxhclR5cGUsIHNvdXJjZVNjYWxhclR5cGV9IGZyb20gXCIuL3NjYWxhcnMuanNcIlxuaW1wb3J0IHtjYXBhYmlsaXR5RnVuY3Rpb25TaWduYXR1cmVzLCBkb2N1bWVudGVkVmFsdWVUeXBlLCBpbnN0YW50aWF0ZWRSZWNvcmRGaWVsZFR5cGUsIGl0ZXJhdGlvbkJpbmRpbmdUeXBlLCBpdGVyYXRpb25PcGVyYW5kVHlwZSwga25vd25DYWxsUGFyYW1ldGVyVHlwZXMsIGtub3duQ2FsbFJldHVyblR5cGUsIG9wdGlvbmFsVHlwZSwgb3JkZXJlZE1hcFR5cGVGcm9tTWFwLCBvd25lZFJlc291cmNlVHlwZSwgcHJlc2VydmVzR2VuZXJpY09wdGlvbmFsRXZpZGVuY2UsIHJlY29yZFR5cGUsIHJlZmVyZW5jZVR5cGUsIHNhbWVWYWx1ZVR5cGV9IGZyb20gXCIuL3R5cGVzLmpzXCJcbmNvbnN0IHBhcnNlciA9IG5ldyBQaHBQYXJzZXIuRW5naW5lKHtcbiAgYXN0OiB7d2l0aFBvc2l0aW9uczogdHJ1ZX0sXG4gIHBhcnNlcjoge2V4dHJhY3REb2M6IHRydWUsIHN1cHByZXNzRXJyb3JzOiBmYWxzZX1cbn0pXG4vKiogQHR5cGUge3N0cmluZyB8IHVuZGVmaW5lZH0gKi9cbmxldCBjYWNoZWRUb2tlblNvdXJjZVxuLyoqIEB0eXBlIHt7ZW5kOiBudW1iZXIsIHN0YXJ0OiBudW1iZXIsIHRleHQ6IHN0cmluZ31bXX0gKi9cbmxldCBjYWNoZWRUb2tlblJhbmdlcyA9IFtdXG5jb25zdCBwaHBCaW5hcnlPcGVyYXRpb25zID0gbmV3IE1hcChbXG4gIFtcIitcIiwgXCJQaHBBZGRcIl0sXG4gIFtcIi1cIiwgXCJTdWJ0cmFjdFwiXSxcbiAgW1wiKlwiLCBcIk11bHRpcGx5XCJdLFxuICBbXCImJlwiLCBcIkFuZFwiXSxcbiAgW1wifHxcIiwgXCJPclwiXSxcbiAgW1wiPT09XCIsIFwiRXF1YWxcIl0sXG4gIFtcIiE9PVwiLCBcIk5vdEVxdWFsXCJdLFxuICBbXCI8XCIsIFwiTGVzc1RoYW5cIl0sXG4gIFtcIjw9XCIsIFwiTGVzc1RoYW5PckVxdWFsXCJdLFxuICBbXCI+XCIsIFwiR3JlYXRlclRoYW5cIl0sXG4gIFtcIj49XCIsIFwiR3JlYXRlclRoYW5PckVxdWFsXCJdLFxuICBbXCIuXCIsIFwiU3RyaW5nQ29uY2F0XCJdXG5dKVxuXG4vKipcbiAqIEB0eXBlZGVmIFBocENvbnZlcnNpb25Db250ZXh0XG4gKiBAcHJvcGVydHkge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljQmluZGluZ1R5cGU+fSBiaW5kaW5ncyAtIEV4cGxpY2l0bHkgdHlwZWQgdmlzaWJsZSBiaW5kaW5ncy5cbiAqIEBwcm9wZXJ0eSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbj59IGNsYXNzZXMgLSBSZWZlcmVuY2UgY2xhc3NlcyBieSBpZGVudGl0eS5cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbn0gW2N1cnJlbnRDbGFzc10gLSBFbmNsb3NpbmcgcmVmZXJlbmNlIGNsYXNzLlxuICogQHByb3BlcnR5IHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9uPn0gZXJyb3JOYW1lcyAtIEVycm9yIGRlY2xhcmF0aW9ucyBieSBzb3VyY2UgbmFtZS5cbiAqIEBwcm9wZXJ0eSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbj59IGVycm9ycyAtIEVycm9yIGRlY2xhcmF0aW9ucyBieSBpZGVudGl0eS5cbiAqIEBwcm9wZXJ0eSB7TWFwPHN0cmluZywgUGhwRnVuY3Rpb25TaWduYXR1cmU+fSBmdW5jdGlvbnMgLSBFeHBsaWNpdCBtb2R1bGUgZnVuY3Rpb24gc2lnbmF0dXJlcy5cbiAqIEBwcm9wZXJ0eSB7U2V0PG9iamVjdD59IFtvcmRlcmVkTWFwRGVjbGFyYXRpb25zXSAtIEV4YWN0IGxvY2FsIGRlY2xhcmF0aW9ucyBzZWxlY3RlZCBieSBwYXJzZXItb3duZWQgcGFpciBpdGVyYXRpb24uXG4gKiBAcHJvcGVydHkge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb24+fSByZWNvcmROYW1lcyAtIE5vbWluYWwgZGVjbGFyYXRpb25zIGJ5IHNvdXJjZSBuYW1lLlxuICogQHByb3BlcnR5IHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbj59IHJlY29yZHMgLSBSZWNvcmQgZGVjbGFyYXRpb25zIGJ5IGlkZW50aXR5LlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0Z1bmN0aW9uUmV0dXJuVHlwZSB8IHVuZGVmaW5lZH0gcmV0dXJuVHlwZSAtIEVuY2xvc2luZyByZXR1cm4gdHlwZS5cbiAqIEBwcm9wZXJ0eSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHlwZVBhcmFtZXRlcj59IFt0eXBlUGFyYW1ldGVyc10gLSBEZWNsYXJhdGlvbi1zY29wZWQgcGFyYW1ldGVycy5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIFBocEZ1bmN0aW9uU2lnbmF0dXJlXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSBsb2NhdGlvbiAtIENvbXBsZXRlIGRlY2xhcmF0aW9uIGxvY2F0aW9uLlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gbmFtZUxvY2F0aW9uIC0gUGFyc2VyLW93bmVkIG5hbWUgbG9jYXRpb24uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbmFtZSAtIEZ1bmN0aW9uIG5hbWUuXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlBhcmFtZXRlcltdfSBwYXJhbWV0ZXJzIC0gU2VtYW50aWMgcGFyYW1ldGVycy5cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNGdW5jdGlvblJldHVyblR5cGV9IHJldHVyblR5cGUgLSBTZW1hbnRpYyByZXR1cm4gdHlwZS5cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHlwZVBhcmFtZXRlcltdfSBbdHlwZVBhcmFtZXRlcnNdIC0gRGVjbGFyYXRpb24tc2NvcGVkIHBhcmFtZXRlcnMuXG4gKi9cblxuLyoqXG4gKiBSZXR1cm5zIGEgbm9ybWFsaXplZCBQSFAgbm9kZSBsb2NhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5Ob2RlfSBub2RlIC0gUEhQIHBhcnNlciBub2RlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gU291cmNlIGxvY2F0aW9uLlxuICovXG5mdW5jdGlvbiBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBpZiAoIW5vZGUubG9jKSB0aHJvdyBuZXcgRXJyb3IoYFBIUCBwYXJzZXIgb21pdHRlZCBzb3VyY2UgbG9jYXRpb24gZm9yICR7bm9kZS5raW5kfS5gKVxuXG4gIHJldHVybiBsb2NhdGlvbkZyb21PZmZzZXRzKGZpbGVuYW1lLCBzb3VyY2UsIG5vZGUubG9jLnN0YXJ0Lm9mZnNldCwgbm9kZS5sb2MuZW5kLm9mZnNldClcbn1cblxuLyoqXG4gKiBMb2NhdGVzIGEgY29tbWVudC1wYXJzZXIgdG9rZW4gaW5zaWRlIGEgUEhQIHBhcnNlci1vd25lZCBkb2MgY29tbWVudC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5Db21tZW50QmxvY2t9IGNvbW1lbnQgLSBQSFAgZG9jIGNvbW1lbnQuXG4gKiBAcGFyYW0ge2ltcG9ydChcImNvbW1lbnQtcGFyc2VyXCIpLlNwZWN9IHRhZyAtIFBhcnNlZCBkb2MgdGFnLlxuICogQHBhcmFtIHtcIm5hbWVcIiB8IFwidHlwZVwifSBmaWVsZCAtIFRva2VuIGZpZWxkLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gRXhhY3QgdG9rZW4gbG9jYXRpb24uXG4gKi9cbmZ1bmN0aW9uIGNvbW1lbnRUYWdMb2NhdGlvbihjb21tZW50LCB0YWcsIGZpZWxkLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGNvbnN0IGxpbmUgPSB0YWcuc291cmNlWzBdXG5cbiAgaWYgKCFjb21tZW50LmxvYyB8fCAhbGluZSkgdGhyb3cgbmV3IEVycm9yKGBDb21tZW50IHBhcnNlciBvbWl0dGVkIHRoZSBAJHt0YWcudGFnfSBzb3VyY2UgdG9rZW4uYClcblxuICBsZXQgbGluZVN0YXJ0ID0gY29tbWVudC5sb2Muc3RhcnQub2Zmc2V0XG5cbiAgZm9yIChsZXQgbGluZU51bWJlciA9IDA7IGxpbmVOdW1iZXIgPCBsaW5lLm51bWJlcjsgbGluZU51bWJlcisrKSB7XG4gICAgd2hpbGUgKGxpbmVTdGFydCA8IHNvdXJjZS5sZW5ndGggJiYgc291cmNlW2xpbmVTdGFydF0gIT0gXCJcXHJcIiAmJiBzb3VyY2VbbGluZVN0YXJ0XSAhPSBcIlxcblwiKSBsaW5lU3RhcnQrK1xuICAgIGlmIChzb3VyY2VbbGluZVN0YXJ0XSA9PSBcIlxcclwiICYmIHNvdXJjZVtsaW5lU3RhcnQgKyAxXSA9PSBcIlxcblwiKSBsaW5lU3RhcnQgKz0gMlxuICAgIGVsc2UgbGluZVN0YXJ0KytcbiAgfVxuXG4gIGNvbnN0IG9yZGVyZWRGaWVsZHMgPSBbXCJzdGFydFwiLCBcImRlbGltaXRlclwiLCBcInBvc3REZWxpbWl0ZXJcIiwgXCJ0YWdcIiwgXCJwb3N0VGFnXCIsIFwibmFtZVwiLCBcInBvc3ROYW1lXCIsIFwidHlwZVwiXVxuICBjb25zdCBmaWVsZEluZGV4ID0gb3JkZXJlZEZpZWxkcy5pbmRleE9mKGZpZWxkKVxuICBjb25zdCBzdGFydCA9IGxpbmVTdGFydCArIG9yZGVyZWRGaWVsZHMuc2xpY2UoMCwgZmllbGRJbmRleCkucmVkdWNlKChsZW5ndGgsIGtleSkgPT5cbiAgICBsZW5ndGggKyBsaW5lLnRva2Vuc1svKiogQHR5cGUge2tleW9mIHR5cGVvZiBsaW5lLnRva2Vuc30gKi8gKGtleSldLmxlbmd0aCwgMClcbiAgY29uc3QgdmFsdWUgPSBsaW5lLnRva2Vuc1tmaWVsZF1cblxuICByZXR1cm4gbG9jYXRpb25Gcm9tT2Zmc2V0cyhmaWxlbmFtZSwgc291cmNlLCBzdGFydCwgc3RhcnQgKyB2YWx1ZS5sZW5ndGgpXG59XG5cbi8qKlxuICogRmluZHMgb25lIHBhcnNlciB0b2tlbiBiZXR3ZWVuIHBhcnNlci1vd25lZCBub2RlIGJvdW5kYXJpZXMuXG4gKiBAcGFyYW0ge3N0cmluZ30gdG9rZW5UZXh0IC0gRXhhY3QgdG9rZW4gdGV4dC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydE9mZnNldCAtIEluY2x1c2l2ZSBzZWFyY2ggYm91bmRhcnkuXG4gKiBAcGFyYW0ge251bWJlcn0gZW5kT2Zmc2V0IC0gRXhjbHVzaXZlIHNlYXJjaCBib3VuZGFyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IFRva2VuIGxvY2F0aW9uLlxuICovXG5mdW5jdGlvbiB0b2tlbkxvY2F0aW9uKHRva2VuVGV4dCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBpZiAoY2FjaGVkVG9rZW5Tb3VyY2UgIT0gc291cmNlKSB7XG4gICAgbGV0IG9mZnNldCA9IDBcblxuICAgIGNhY2hlZFRva2VuUmFuZ2VzID0gcGFyc2VyLnRva2VuR2V0QWxsKHNvdXJjZSkubWFwKCh0b2tlbikgPT4ge1xuICAgICAgY29uc3QgdGV4dCA9IHR5cGVvZiB0b2tlbiA9PSBcInN0cmluZ1wiID8gdG9rZW4gOiB0b2tlblsxXVxuICAgICAgY29uc3QgcmFuZ2UgPSB7ZW5kOiBvZmZzZXQgKyB0ZXh0Lmxlbmd0aCwgc3RhcnQ6IG9mZnNldCwgdGV4dH1cblxuICAgICAgb2Zmc2V0ID0gcmFuZ2UuZW5kXG5cbiAgICAgIHJldHVybiByYW5nZVxuICAgIH0pXG4gICAgY2FjaGVkVG9rZW5Tb3VyY2UgPSBzb3VyY2VcbiAgfVxuXG4gIGNvbnN0IHRva2VuID0gY2FjaGVkVG9rZW5SYW5nZXMuZmluZCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUudGV4dCA9PSB0b2tlblRleHQgJiYgY2FuZGlkYXRlLnN0YXJ0ID49IHN0YXJ0T2Zmc2V0ICYmXG4gICAgY2FuZGlkYXRlLmVuZCA8PSBlbmRPZmZzZXQpXG5cbiAgaWYgKHRva2VuKSByZXR1cm4gbG9jYXRpb25Gcm9tT2Zmc2V0cyhmaWxlbmFtZSwgc291cmNlLCB0b2tlbi5zdGFydCwgdG9rZW4uZW5kKVxuXG4gIHRocm93IG5ldyBFcnJvcihgUEhQIHBhcnNlciBvbWl0dGVkIHRva2VuICcke3Rva2VuVGV4dH0nIGJldHdlZW4gJHtzdGFydE9mZnNldH0gYW5kICR7ZW5kT2Zmc2V0fS5gKVxufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgc3VwcG9ydGVkIFBIUCBleHByZXNzaW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLkV4cHJlc3Npb259IG5vZGUgLSBQSFAgZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge1BocENvbnZlcnNpb25Db250ZXh0fSBjb250ZXh0IC0gVHlwZWQgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1ZhbHVlVHlwZX0gW2V4cGVjdGVkVHlwZV0gLSBDb250ZXh0dWFsIHR5cGUgZm9yIGVtcHR5IFBIUCBhcnJheXMuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtwcmVzZXJ2ZU9wdGlvbmFsXSAtIFdoZXRoZXIgYW4gb3B0aW9uYWwgaWRlbnRpZmllciByZW1haW5zIHdyYXBwZWQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gU2VtYW50aWMgZXhwcmVzc2lvbi5cbiAqL1xuZnVuY3Rpb24gY29udmVydEV4cHJlc3Npb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgZXhwZWN0ZWRUeXBlLCBwcmVzZXJ2ZU9wdGlvbmFsID0gZmFsc2UpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAoZXhwZWN0ZWRUeXBlPy5raW5kID09IFwiT3B0aW9uYWxUeXBlXCIpIHtcbiAgICBpZiAobm9kZS5raW5kID09IFwibnVsbGtleXdvcmRcIikge1xuICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk9wdGlvbmFsTm9uZVwiKSwgbG9jYXRpb259LCB7YWJzZW5jZTogbG9jYXRpb259KVxuICAgIH1cbiAgICBpZiAoa25vd25FeHByZXNzaW9uVHlwZShub2RlLCBjb250ZXh0KT8ua2luZCA9PSBcIk9wdGlvbmFsVHlwZVwiKSB7XG4gICAgICByZXR1cm4gY29udmVydEV4cHJlc3Npb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgdW5kZWZpbmVkLCB0cnVlKVxuICAgIH1cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJPcHRpb25hbFNvbWVcIiksXG4gICAgICBsb2NhdGlvbixcbiAgICAgIHZhbHVlOiBjb252ZXJ0RXhwcmVzc2lvbihub2RlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LCBleHBlY3RlZFR5cGUudmFsdWVUeXBlKVxuICAgIH0sIHtzb21lOiBsb2NhdGlvbn0pXG4gIH1cblxuICBpZiAobm9kZS5raW5kID09IFwibnVsbGtleXdvcmRcIikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwibnVsbCBvdXRzaWRlIGFuIGV4cGxpY2l0IG9wdGlvbmFsIGNvbnRleHRcIiwgbG9jYXRpb24pXG5cbiAgaWYgKG5vZGUua2luZCA9PSBcInZhcmlhYmxlXCIpIHtcbiAgICBjb25zdCB2YXJpYWJsZSA9IC8qKiBAdHlwZSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5WYXJpYWJsZX0gKi8gKG5vZGUpXG5cbiAgICBpZiAodHlwZW9mIHZhcmlhYmxlLm5hbWUgIT0gXCJzdHJpbmdcIikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwiZHluYW1pYyB2YXJpYWJsZVwiLCBsb2NhdGlvbilcbiAgICBpZiAodmFyaWFibGUubmFtZSA9PSBcInRoaXNcIikge1xuICAgICAgaWYgKCFjb250ZXh0LmN1cnJlbnRDbGFzcykgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwicmVjZWl2ZXIgb3V0c2lkZSBhIHJlZmVyZW5jZSBjbGFzc1wiLCBsb2NhdGlvbilcbiAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtjbGFzc0lkOiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGNvbnRleHQuY3VycmVudENsYXNzLmlkKSxcbiAgICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUmVjZWl2ZXJFeHByZXNzaW9uXCIpLCBsb2NhdGlvbn0sIHtyZWNlaXZlcjogbG9jYXRpb259KVxuICAgIH1cblxuICAgIGNvbnN0IGlkZW50aWZpZXIgPSB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJJZGVudGlmaWVyRXhwcmVzc2lvblwiKSwgbG9jYXRpb24sIG5hbWU6IHZhcmlhYmxlLm5hbWV9LCB7bmFtZTogbG9jYXRpb259KVxuXG4gICAgaWYgKCFwcmVzZXJ2ZU9wdGlvbmFsICYmIGNvbnRleHQuYmluZGluZ3MuZ2V0KHZhcmlhYmxlLm5hbWUpPy5raW5kID09IFwiT3B0aW9uYWxUeXBlXCIpIHtcbiAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJPcHRpb25hbFVud3JhcFwiKSwgbG9jYXRpb24sIG9wZXJhbmQ6IGlkZW50aWZpZXJ9LCB7dW53cmFwOiBsb2NhdGlvbn0pXG4gICAgfVxuXG4gICAgcmV0dXJuIGlkZW50aWZpZXJcbiAgfVxuXG4gIGlmIChub2RlLmtpbmQgPT0gXCJudW1iZXJcIikge1xuICAgIGNvbnN0IGxpdGVyYWwgPSAvKiogQHR5cGUge2ltcG9ydChcInBocC1wYXJzZXJcIikuTnVtYmVyfSAqLyAobm9kZSlcbiAgICBjb25zdCB2YWx1ZSA9IE51bWJlcihsaXRlcmFsLnZhbHVlKVxuXG4gICAgaWYgKCFOdW1iZXIuaXNTYWZlSW50ZWdlcih2YWx1ZSkpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBcIm5vbi1zYWZlIGludGVnZXIgbGl0ZXJhbFwiLCBsb2NhdGlvbilcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJJbnRlZ2VyTGl0ZXJhbFwiKSwgbG9jYXRpb24sIHZhbHVlfSwge2xpdGVyYWw6IGxvY2F0aW9ufSlcbiAgfVxuXG4gIGlmIChub2RlLmtpbmQgPT0gXCJib29sZWFuXCIpIHtcbiAgICBjb25zdCBsaXRlcmFsID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLkJvb2xlYW59ICovIChub2RlKVxuXG4gICAgaWYgKHR5cGVvZiBsaXRlcmFsLnZhbHVlICE9IFwiYm9vbGVhblwiKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgXCJpbnZhbGlkIGJvb2xlYW4gbGl0ZXJhbCB2YWx1ZVwiLCBsb2NhdGlvbilcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJCb29sZWFuTGl0ZXJhbFwiKSwgbG9jYXRpb24sIHZhbHVlOiBsaXRlcmFsLnZhbHVlfSwge2xpdGVyYWw6IGxvY2F0aW9ufSlcbiAgfVxuXG4gIGlmIChub2RlLmtpbmQgPT0gXCJzdHJpbmdcIikge1xuICAgIGNvbnN0IGxpdGVyYWwgPSAvKiogQHR5cGUge2ltcG9ydChcInBocC1wYXJzZXJcIikuU3RyaW5nfSAqLyAobm9kZSlcblxuICAgIGlmICh0eXBlb2YgbGl0ZXJhbC5yYXcgPT0gXCJzdHJpbmdcIiAmJiBsaXRlcmFsLnJhdy5zdGFydHNXaXRoKFwiPDw8XCIpKSB7XG4gICAgICBjb25zdCBkZXRhaWwgPSBsaXRlcmFsLnJhdy5zdGFydHNXaXRoKFwiPDw8J1wiKSA/IFwibm93ZG9jIHN0cmluZ1wiIDogXCJoZXJlZG9jIHN0cmluZ1wiXG5cbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBkZXRhaWwsIGxvY2F0aW9uKVxuICAgIH1cbiAgICBpZiAodHlwZW9mIGxpdGVyYWwucmF3ID09IFwic3RyaW5nXCIgJiYgW1wiYlxcXCJcIiwgXCJCXFxcIlwiLCBcImInXCIsIFwiQidcIl0uc29tZSgocHJlZml4KSA9PiBsaXRlcmFsLnJhdy5zdGFydHNXaXRoKHByZWZpeCkpKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgXCJiaW5hcnkgc3RyaW5nIGxpdGVyYWxcIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIGlmICh0eXBlb2YgbGl0ZXJhbC52YWx1ZSAhPSBcInN0cmluZ1wiIHx8ICFoYXNPbmx5VW5pY29kZVNjYWxhcnMobGl0ZXJhbC52YWx1ZSkpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBcImludmFsaWQgVW5pY29kZSBzdHJpbmcgbGl0ZXJhbFwiLCBsb2NhdGlvbilcbiAgICB9XG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiU3RyaW5nTGl0ZXJhbFwiKSwgbG9jYXRpb24sIHZhbHVlOiBsaXRlcmFsLnZhbHVlfSwge2xpdGVyYWw6IGxvY2F0aW9ufSlcbiAgfVxuXG4gIGlmIChub2RlLmtpbmQgPT0gXCJlbmNhcHNlZFwiKSB7XG4gICAgY29uc3QgbGl0ZXJhbCA9IC8qKiBAdHlwZSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5FbmNhcHNlZH0gKi8gKG5vZGUpXG4gICAgY29uc3QgZGV0YWlsID0gbGl0ZXJhbC50eXBlID09IFwic3RyaW5nXCIgPyBcImludGVycG9sYXRlZCBzdHJpbmdcIiA6IGAke2xpdGVyYWwudHlwZX0gc3RyaW5nYFxuXG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIGRldGFpbCwgbG9jYXRpb24pXG4gIH1cblxuICBpZiAobm9kZS5raW5kID09IFwibm93ZG9jXCIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBcIm5vd2RvYyBzdHJpbmdcIiwgbG9jYXRpb24pXG5cbiAgaWYgKG5vZGUua2luZCA9PSBcImFycmF5XCIpIHtcbiAgICBjb25zdCBsaXRlcmFsID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLkFycmF5fSAqLyAobm9kZSlcbiAgICBjb25zdCBpbnZhbGlkRW50cnkgPSBsaXRlcmFsLml0ZW1zLmZpbmQoKGVudHJ5KSA9PiB7XG4gICAgICBpZiAoZW50cnkua2luZCAhPSBcImVudHJ5XCIpIHJldHVybiB0cnVlXG4gICAgICBjb25zdCBjYW5kaWRhdGUgPSAvKiogQHR5cGUge2ltcG9ydChcInBocC1wYXJzZXJcIikuRW50cnl9ICovIChlbnRyeSlcblxuICAgICAgcmV0dXJuIGNhbmRpZGF0ZS5ieVJlZiB8fCBjYW5kaWRhdGUudW5wYWNrXG4gICAgfSlcblxuICAgIGlmIChpbnZhbGlkRW50cnkpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBcImFycmF5IHJlZmVyZW5jZSBvciB1bnBhY2tpbmdcIiwgbm9kZUxvY2F0aW9uKGludmFsaWRFbnRyeSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgY29uc3QgZW50cmllcyA9IC8qKiBAdHlwZSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5FbnRyeVtdfSAqLyAobGl0ZXJhbC5pdGVtcylcbiAgICBjb25zdCBoYXNLZXlzID0gZW50cmllcy5zb21lKChlbnRyeSkgPT4gZW50cnkua2V5ICE9IG51bGwpXG4gICAgY29uc3QgaGFzSW1wbGljaXQgPSBlbnRyaWVzLnNvbWUoKGVudHJ5KSA9PiBlbnRyeS5rZXkgPT0gbnVsbClcbiAgICBjb25zdCBjb2xsZWN0aW9uS2luZCA9IGVudHJpZXMubGVuZ3RoID09IDAgPyBleHBlY3RlZFR5cGU/LmtpbmQgOiBoYXNLZXlzICYmICFoYXNJbXBsaWNpdFxuICAgICAgPyBleHBlY3RlZFR5cGU/LmtpbmQgPT0gXCJPcmRlcmVkTWFwVHlwZVwiID8gXCJPcmRlcmVkTWFwVHlwZVwiIDogXCJNYXBUeXBlXCJcbiAgICAgIDogIWhhc0tleXMgPyBcIkxpc3RUeXBlXCIgOiBcIm1peGVkXCJcblxuICAgIGlmIChjb2xsZWN0aW9uS2luZCA9PSBcIm1peGVkXCIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBcIm1peGVkIGxpc3QvbWFwIGFycmF5IGxpdGVyYWxcIiwgbG9jYXRpb24pXG4gICAgaWYgKGNvbGxlY3Rpb25LaW5kID09IFwiTGlzdFR5cGVcIikge1xuICAgICAgY29uc3QgZWxlbWVudFR5cGUgPSBleHBlY3RlZFR5cGU/LmtpbmQgPT0gXCJMaXN0VHlwZVwiID8gZXhwZWN0ZWRUeXBlLmVsZW1lbnRUeXBlIDogdW5kZWZpbmVkXG5cbiAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgICAgZWxlbWVudHM6IGVudHJpZXMubWFwKChlbnRyeSkgPT4gY29udmVydEV4cHJlc3Npb24oZW50cnkudmFsdWUsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIGVsZW1lbnRUeXBlKSksXG4gICAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkxpc3RMaXRlcmFsXCIpLFxuICAgICAgICBsb2NhdGlvblxuICAgICAgfSwge2xpdGVyYWw6IGxvY2F0aW9ufSlcbiAgICB9XG4gICAgaWYgKGNvbGxlY3Rpb25LaW5kID09IFwiTWFwVHlwZVwiIHx8IGNvbGxlY3Rpb25LaW5kID09IFwiT3JkZXJlZE1hcFR5cGVcIikge1xuICAgICAgY29uc3QgdmFsdWVUeXBlID0gZXhwZWN0ZWRUeXBlPy5raW5kID09IFwiTWFwVHlwZVwiIHx8IGV4cGVjdGVkVHlwZT8ua2luZCA9PSBcIk9yZGVyZWRNYXBUeXBlXCJcbiAgICAgICAgPyBleHBlY3RlZFR5cGUudmFsdWVUeXBlIDogdW5kZWZpbmVkXG4gICAgICBjb25zdCBzZW1hbnRpY0VudHJpZXMgPSBlbnRyaWVzLm1hcCgoZW50cnkpID0+IHtcbiAgICAgICAgaWYgKCFlbnRyeS5rZXkgfHwgZW50cnkua2V5LmtpbmQgIT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBcIm1hcCBrZXkgb3RoZXIgdGhhbiBhIGxpdGVyYWwgc3RyaW5nXCIsIGVudHJ5LmtleSA/IG5vZGVMb2NhdGlvbihlbnRyeS5rZXksIGZpbGVuYW1lLCBzb3VyY2UpIDogbm9kZUxvY2F0aW9uKGVudHJ5LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBrZXkgPSBjb252ZXJ0RXhwcmVzc2lvbihlbnRyeS5rZXksIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG5cbiAgICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgICAgIGtleTogLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TdHJpbmdMaXRlcmFsfSAqLyAoa2V5KSxcbiAgICAgICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJNYXBFbnRyeVwiKSxcbiAgICAgICAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKGVudHJ5LCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgICB2YWx1ZTogY29udmVydEV4cHJlc3Npb24oZW50cnkudmFsdWUsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIHZhbHVlVHlwZSlcbiAgICAgICAgfSwge29wZXJhdG9yOiB0b2tlbkxvY2F0aW9uKFwiPT5cIiwgZW50cnkua2V5LmxvYz8uZW5kLm9mZnNldCA/PyAwLCBlbnRyeS52YWx1ZS5sb2M/LnN0YXJ0Lm9mZnNldCA/PyBzb3VyY2UubGVuZ3RoLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gICAgICB9KVxuXG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICAgIGVudHJpZXM6IHNlbWFudGljRW50cmllcyxcbiAgICAgICAga2luZDogY29sbGVjdGlvbktpbmQgPT0gXCJPcmRlcmVkTWFwVHlwZVwiXG4gICAgICAgICAgPyAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJPcmRlcmVkTWFwTGl0ZXJhbFwiKVxuICAgICAgICAgIDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTWFwTGl0ZXJhbFwiKSxcbiAgICAgICAgbG9jYXRpb25cbiAgICAgIH0sIHtsaXRlcmFsOiBsb2NhdGlvbn0pXG4gICAgfVxuXG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwiZW1wdHkgYXJyYXkgd2l0aG91dCBhIGxpc3Qgb3IgbWFwIHR5cGVcIiwgbG9jYXRpb24pXG4gIH1cblxuICBpZiAobm9kZS5raW5kID09IFwibmV3XCIpIHtcbiAgICBjb25zdCBjb25zdHJ1Y3Rpb24gPSAvKiogQHR5cGUge2ltcG9ydChcInBocC1wYXJzZXJcIikuTmV3fSAqLyAobm9kZSlcbiAgICBjb25zdCBuYW1lID0gY29uc3RydWN0aW9uLndoYXQua2luZCA9PSBcIm5hbWVcIiA/IC8qKiBAdHlwZSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5OYW1lfSAqLyAoY29uc3RydWN0aW9uLndoYXQpIDogdW5kZWZpbmVkXG5cbiAgICBpZiAoIW5hbWUgfHwgbmFtZS5yZXNvbHV0aW9uICE9IFwidXFuXCIgfHwgdHlwZW9mIG5hbWUubmFtZSAhPSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgXCJkeW5hbWljIG9yIHF1YWxpZmllZCByZWNvcmQgY29uc3RydWN0aW9uXCIsIG5vZGVMb2NhdGlvbihjb25zdHJ1Y3Rpb24ud2hhdCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIGNvbnN0IGRlY2xhcmF0aW9uID0gY29udGV4dC5yZWNvcmROYW1lcy5nZXQobmFtZS5uYW1lKVxuXG4gICAgaWYgKCFkZWNsYXJhdGlvbikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwiY29uc3RydWN0aW9uIG9mIGFuIHVua25vd24gbm9taW5hbCBjbGFzc1wiLCBub2RlTG9jYXRpb24oY29uc3RydWN0aW9uLndoYXQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIGlmIChkZWNsYXJhdGlvbi5raW5kID09IFwiQ2xhc3NEZWNsYXJhdGlvblwiKSB7XG4gICAgICBjb25zdCB1bnN1cHBvcnRlZEFyZ3VtZW50ID0gY29uc3RydWN0aW9uLmFyZ3VtZW50cy5maW5kKChhcmd1bWVudCkgPT5cbiAgICAgICAgYXJndW1lbnQua2luZCA9PSBcIm5hbWVkYXJndW1lbnRcIiB8fCBhcmd1bWVudC5raW5kID09IFwidmFyaWFkaWNcIiB8fCBSZWZsZWN0LmdldChhcmd1bWVudCwgXCJieXJlZlwiKSA9PT0gdHJ1ZSlcblxuICAgICAgaWYgKHVuc3VwcG9ydGVkQXJndW1lbnQpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBcIm5vbi1wb3NpdGlvbmFsIHJlZmVyZW5jZSBjb25zdHJ1Y3RvciBhcmd1bWVudFwiLFxuICAgICAgICBub2RlTG9jYXRpb24odW5zdXBwb3J0ZWRBcmd1bWVudCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICBjb25zdCBjbGFzc0xvY2F0aW9uID0gbm9kZUxvY2F0aW9uKGNvbnN0cnVjdGlvbi53aGF0LCBmaWxlbmFtZSwgc291cmNlKVxuXG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7YXJndW1lbnRzOiBjb25zdHJ1Y3Rpb24uYXJndW1lbnRzLm1hcCgoYXJndW1lbnQsIGluZGV4KSA9PlxuICAgICAgICBjb252ZXJ0RXhwcmVzc2lvbihhcmd1bWVudCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgZGVjbGFyYXRpb24uY29uc3RydWN0b3IucGFyYW1ldGVyc1tpbmRleF0/LnR5cGUpKSxcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlJlZmVyZW5jZUNvbnN0cnVjdGlvblwiKSwgbG9jYXRpb24sXG4gICAgICByZWZlcmVuY2U6IHJlZmVyZW5jZVR5cGUoLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZWNsYXJhdGlvbi5pZCksIGNsYXNzTG9jYXRpb24pfSwge2NsYXNzOiBjbGFzc0xvY2F0aW9ufSlcbiAgICB9XG4gICAgaWYgKGRlY2xhcmF0aW9uLmtpbmQgPT0gXCJFZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uXCIpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBcIm93bmVkIHJlc291cmNlIGNvbnN0cnVjdGlvblwiLCBub2RlTG9jYXRpb24oY29uc3RydWN0aW9uLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgY29uc3QgY29udGV4dHVhbFR5cGVBcmd1bWVudHMgPSBleHBlY3RlZFR5cGU/LmtpbmQgPT0gXCJSZWNvcmRUeXBlXCIgJiYgZXhwZWN0ZWRUeXBlLmRlY2xhcmF0aW9uSWQgPT0gZGVjbGFyYXRpb24uaWRcbiAgICAgID8gZXhwZWN0ZWRUeXBlLmFyZ3VtZW50c1xuICAgICAgOiB1bmRlZmluZWRcbiAgICBjb25zdCB2aXNpYmxlVHlwZVBhcmFtZXRlcklkcyA9IG5ldyBTZXQoWy4uLmNvbnRleHQudHlwZVBhcmFtZXRlcnM/LnZhbHVlcygpID8/IFtdXVxuICAgICAgLm1hcCgocGFyYW1ldGVyKSA9PiAvKiogQHR5cGUge3N0cmluZ30gKi8gKHBhcmFtZXRlci5pZCkpKVxuICAgIGNvbnN0IHR5cGVBcmd1bWVudHMgPSBjb250ZXh0dWFsVHlwZUFyZ3VtZW50cyAmJlxuICAgICAgIWNvbnRleHR1YWxUeXBlQXJndW1lbnRzLnNvbWUoKGFyZ3VtZW50KSA9PiB0eXBlQ29udGFpbnNBbnlWYXJpYWJsZShhcmd1bWVudCwgdmlzaWJsZVR5cGVQYXJhbWV0ZXJJZHMpKVxuICAgICAgPyBjb250ZXh0dWFsVHlwZUFyZ3VtZW50c1xuICAgICAgOiB1bmRlZmluZWRcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGFyZ3VtZW50czogY29uc3RydWN0aW9uLmFyZ3VtZW50cy5tYXAoKGFyZ3VtZW50LCBpbmRleCkgPT5cbiAgICAgICAgY29udmVydEV4cHJlc3Npb24oYXJndW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsXG4gICAgICAgICAgaW5zdGFudGlhdGVkUmVjb3JkRmllbGRUeXBlKGRlY2xhcmF0aW9uLCB0eXBlQXJndW1lbnRzLCBpbmRleCkpKSxcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlJlY29yZENvbnN0cnVjdGlvblwiKSxcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgcmVjb3JkOiByZWNvcmRUeXBlKC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZGVjbGFyYXRpb24uaWQpLCBub2RlTG9jYXRpb24oY29uc3RydWN0aW9uLndoYXQsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgICB0eXBlQXJndW1lbnRzKVxuICAgIH0sIHtyZWNvcmQ6IG5vZGVMb2NhdGlvbihjb25zdHJ1Y3Rpb24ud2hhdCwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICB9XG5cbiAgaWYgKG5vZGUua2luZCA9PSBcInByb3BlcnR5bG9va3VwXCIpIHtcbiAgICBjb25zdCByZWFkID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLlByb3BlcnR5TG9va3VwfSAqLyAobm9kZSlcbiAgICBjb25zdCBvZmZzZXQgPSByZWFkLm9mZnNldC5raW5kID09IFwiaWRlbnRpZmllclwiID8gLyoqIEB0eXBlIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLklkZW50aWZpZXJ9ICovIChyZWFkLm9mZnNldCkgOiB1bmRlZmluZWRcblxuICAgIGlmICghb2Zmc2V0IHx8IHR5cGVvZiBvZmZzZXQubmFtZSAhPSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgXCJkeW5hbWljIG9yIGNvbXB1dGVkIG1lbWJlciBhY2Nlc3NcIiwgbm9kZUxvY2F0aW9uKHJlYWQub2Zmc2V0LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgaWYgKHJlYWQud2hhdC5raW5kID09IFwidmFyaWFibGVcIiAmJiAvKiogQHR5cGUge2ltcG9ydChcInBocC1wYXJzZXJcIikuVmFyaWFibGV9ICovIChyZWFkLndoYXQpLm5hbWUgPT0gXCJ0aGlzXCIgJiZcbiAgICAgIGNvbnRleHQuY3VycmVudENsYXNzKSB7XG4gICAgICBjb25zdCBmaWVsZCA9IGNvbnRleHQuY3VycmVudENsYXNzLmZpZWxkcy5maW5kKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS5uYW1lID09IG9mZnNldC5uYW1lKVxuXG4gICAgICBpZiAoIWZpZWxkKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgYHVua25vd24gcHJpdmF0ZSBmaWVsZCAnJHtvZmZzZXQubmFtZX0nYCwgbm9kZUxvY2F0aW9uKG9mZnNldCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7ZmllbGQ6IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZmllbGQuaWQpLCBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJQcml2YXRlRmllbGRSZWFkXCIpLCBsb2NhdGlvbixcbiAgICAgICAgcmVjZWl2ZXI6IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjZWl2ZXJFeHByZXNzaW9ufSAqLyAoXG4gICAgICAgICAgY29udmVydEV4cHJlc3Npb24ocmVhZC53aGF0LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSl9LCB7bWVtYmVyOiBub2RlTG9jYXRpb24ob2Zmc2V0LCBmaWxlbmFtZSwgc291cmNlKX0pXG4gICAgfVxuICAgIGNvbnN0IHJlY2VpdmVyVHlwZSA9IGtub3duRXhwcmVzc2lvblR5cGUocmVhZC53aGF0LCBjb250ZXh0KVxuICAgIGlmIChyZWNlaXZlclR5cGU/LmtpbmQgPT0gXCJSZWZlcmVuY2VUeXBlXCIpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBcInByaXZhdGUgcmVmZXJlbmNlLWNsYXNzIGZpZWxkIGFjY2Vzc1wiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgY29uc3QgcmVjZWl2ZXJSZWNvcmQgPSByZWNlaXZlclR5cGU/LmtpbmQgPT0gXCJPcHRpb25hbFR5cGVcIiA/IHJlY2VpdmVyVHlwZS52YWx1ZVR5cGUgOiByZWNlaXZlclR5cGVcbiAgICBjb25zdCBkZWNsYXJhdGlvbiA9IHJlY2VpdmVyUmVjb3JkPy5raW5kID09IFwiUmVjb3JkVHlwZVwiID8gY29udGV4dC5yZWNvcmRzLmdldChyZWNlaXZlclJlY29yZC5kZWNsYXJhdGlvbklkKSA6IHVuZGVmaW5lZFxuXG4gICAgaWYgKChkZWNsYXJhdGlvbj8udHlwZVBhcmFtZXRlcnM/Lmxlbmd0aCA/PyAwKSA+IDApIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBcImdlbmVyaWMgcmVjb3JkIHByb3BlcnR5IGFjY2Vzc1wiLCBub2RlTG9jYXRpb24ocmVhZC5vZmZzZXQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBmaWVsZDogb2Zmc2V0Lm5hbWUsXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJNZW1iZXJSZWFkXCIpLFxuICAgICAgbG9jYXRpb24sXG4gICAgICByZWNlaXZlcjogY29udmVydEV4cHJlc3Npb24ocmVhZC53aGF0LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICAgIH0sIHttZW1iZXI6IG5vZGVMb2NhdGlvbihyZWFkLm9mZnNldCwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICB9XG5cbiAgaWYgKG5vZGUua2luZCA9PSBcIm9mZnNldGxvb2t1cFwiKSB7XG4gICAgY29uc3QgbG9va3VwID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLk9mZnNldExvb2t1cH0gKi8gKG5vZGUpXG5cbiAgICBpZiAoIWxvb2t1cC5vZmZzZXQpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBcImFwcGVuZCBvciBtaXNzaW5nIGFycmF5IGluZGV4XCIsIGxvY2F0aW9uKVxuICAgIGNvbnN0IHJlY2VpdmVyID0gbG9va3VwLndoYXQua2luZCA9PSBcInZhcmlhYmxlXCIgPyAvKiogQHR5cGUge2ltcG9ydChcInBocC1wYXJzZXJcIikuVmFyaWFibGV9ICovIChsb29rdXAud2hhdCkgOiB1bmRlZmluZWRcbiAgICBjb25zdCByZWNlaXZlclR5cGUgPSByZWNlaXZlciAmJiB0eXBlb2YgcmVjZWl2ZXIubmFtZSA9PSBcInN0cmluZ1wiID8gY29udGV4dC5iaW5kaW5ncy5nZXQocmVjZWl2ZXIubmFtZSkgOiB1bmRlZmluZWRcbiAgICBjb25zdCBhY2Nlc3NLaW5kID0gcmVjZWl2ZXJUeXBlPy5raW5kID09IFwiTGlzdFR5cGVcIiA/IFwibGlzdFwiIDpcbiAgICAgIHJlY2VpdmVyVHlwZT8ua2luZCA9PSBcIk1hcFR5cGVcIiB8fCByZWNlaXZlclR5cGU/LmtpbmQgPT0gXCJPcmRlcmVkTWFwVHlwZVwiID8gXCJtYXBcIiA6XG4gICAgICBsb29rdXAub2Zmc2V0LmtpbmQgPT0gXCJudW1iZXJcIiA/IFwibGlzdFwiIDogbG9va3VwLm9mZnNldC5raW5kID09IFwic3RyaW5nXCIgPyBcIm1hcFwiIDogdW5kZWZpbmVkXG5cbiAgICBpZiAoYWNjZXNzS2luZCA9PSBcImxpc3RcIiAmJiBbXCJudW1iZXJcIiwgXCJzdHJpbmdcIiwgXCJ2YXJpYWJsZVwiXS5pbmNsdWRlcyhsb29rdXAub2Zmc2V0LmtpbmQpKSB7XG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICAgIGNvbGxlY3Rpb246IGNvbnZlcnRFeHByZXNzaW9uKGxvb2t1cC53aGF0LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSxcbiAgICAgICAgaW5kZXg6IGNvbnZlcnRFeHByZXNzaW9uKGxvb2t1cC5vZmZzZXQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJMaXN0SW5kZXhFeHByZXNzaW9uXCIpLFxuICAgICAgICBsb2NhdGlvbixcbiAgICAgICAgdG90YWxpdHk6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcInByb3ZlblwiKVxuICAgICAgfSwge29wZXJhdG9yOiB0b2tlbkxvY2F0aW9uKFwiW1wiLCBsb29rdXAud2hhdC5sb2M/LmVuZC5vZmZzZXQgPz8gMCwgbG9va3VwLm9mZnNldC5sb2M/LnN0YXJ0Lm9mZnNldCA/PyBzb3VyY2UubGVuZ3RoLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gICAgfVxuICAgIGlmIChhY2Nlc3NLaW5kID09IFwibWFwXCIgJiYgW1wibnVtYmVyXCIsIFwic3RyaW5nXCIsIFwidmFyaWFibGVcIl0uaW5jbHVkZXMobG9va3VwLm9mZnNldC5raW5kKSkge1xuICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgICBjb2xsZWN0aW9uOiBjb252ZXJ0RXhwcmVzc2lvbihsb29rdXAud2hhdCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCksXG4gICAgICAgIGtleTogY29udmVydEV4cHJlc3Npb24obG9va3VwLm9mZnNldCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCksXG4gICAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk1hcExvb2t1cEV4cHJlc3Npb25cIiksXG4gICAgICAgIGxvY2F0aW9uLFxuICAgICAgICB0b3RhbGl0eTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwicHJvdmVuXCIpXG4gICAgICB9LCB7b3BlcmF0b3I6IHRva2VuTG9jYXRpb24oXCJbXCIsIGxvb2t1cC53aGF0LmxvYz8uZW5kLm9mZnNldCA/PyAwLCBsb29rdXAub2Zmc2V0LmxvYz8uc3RhcnQub2Zmc2V0ID8/IHNvdXJjZS5sZW5ndGgsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgICB9XG5cbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgXCJub25saXRlcmFsIGFycmF5IGFjY2Vzc1wiLCBub2RlTG9jYXRpb24obG9va3VwLm9mZnNldCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cblxuICBpZiAobm9kZS5raW5kID09IFwidW5hcnlcIikge1xuICAgIGNvbnN0IHVuYXJ5ID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLlVuYXJ5fSAqLyAobm9kZSlcblxuICAgIGlmICghW1wiIVwiLCBcIi1cIl0uaW5jbHVkZXModW5hcnkudHlwZSkpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBgdW5hcnkgJHt1bmFyeS50eXBlfWAsIGxvY2F0aW9uKVxuXG4gICAgY29uc3Qgc2VtYW50aWMgPSB3aXRoQWRhcHRlZE9wZXJhdGlvbih3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGtpbmQ6IFwiVW5hcnlFeHByZXNzaW9uXCIsXG4gICAgICBsb2NhdGlvbixcbiAgICAgIG9wZXJhbmQ6IGNvbnZlcnRFeHByZXNzaW9uKHVuYXJ5LndoYXQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gICAgfSwge1xuICAgICAgb3BlcmF0b3I6IHRva2VuTG9jYXRpb24odW5hcnkudHlwZSwgdW5hcnkubG9jPy5zdGFydC5vZmZzZXQgPz8gMCwgdW5hcnkud2hhdC5sb2M/LnN0YXJ0Lm9mZnNldCA/PyB1bmFyeS5sb2M/LmVuZC5vZmZzZXQgPz8gc291cmNlLmxlbmd0aCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICB9KSwgdW5hcnkudHlwZSA9PSBcIiFcIiA/IFwiTm90XCIgOiBcIk5lZ2F0ZVwiKVxuXG4gICAgcmV0dXJuIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gKi8gKC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gKHNlbWFudGljKSlcbiAgfVxuXG4gIGlmIChub2RlLmtpbmQgPT0gXCJiaW5cIikge1xuICAgIGNvbnN0IGJpbmFyeSA9IC8qKiBAdHlwZSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5CaW59ICovIChub2RlKVxuICAgIGlmIChiaW5hcnkudHlwZSA9PSBcIiE9PVwiICYmIGJpbmFyeS5sZWZ0LmtpbmQgPT0gXCJ2YXJpYWJsZVwiICYmIGJpbmFyeS5yaWdodC5raW5kID09IFwibnVsbGtleXdvcmRcIikge1xuICAgICAgY29uc3Qgb3BlcmFuZCA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuSWRlbnRpZmllckV4cHJlc3Npb259ICovIChcbiAgICAgICAgY29udmVydEV4cHJlc3Npb24oYmluYXJ5LmxlZnQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIHVuZGVmaW5lZCwgdHJ1ZSlcbiAgICAgIClcblxuICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk9wdGlvbmFsSXNQcmVzZW50XCIpLCBsb2NhdGlvbiwgb3BlcmFuZH0sIHtcbiAgICAgICAgb3BlcmF0b3I6IHRva2VuTG9jYXRpb24oYmluYXJ5LnR5cGUsIGJpbmFyeS5sZWZ0LmxvYz8uZW5kLm9mZnNldCA/PyAwLCBiaW5hcnkucmlnaHQubG9jPy5zdGFydC5vZmZzZXQgPz8gc291cmNlLmxlbmd0aCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICAgIH0pXG4gICAgfVxuICAgIGlmIChbXCI9PVwiLCBcIiE9XCJdLmluY2x1ZGVzKGJpbmFyeS50eXBlKSkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIGBjb2VyY2l2ZSBlcXVhbGl0eSAke2JpbmFyeS50eXBlfWAsIGxvY2F0aW9uKVxuICAgIGlmIChbXCJhbmRcIiwgXCJvclwiXS5pbmNsdWRlcyhiaW5hcnkudHlwZSkpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBgcHJlY2VkZW5jZS1zZW5zaXRpdmUgYm9vbGVhbiAke2JpbmFyeS50eXBlfWAsIGxvY2F0aW9uKVxuICAgIGlmICghcGhwQmluYXJ5T3BlcmF0aW9ucy5oYXMoYmluYXJ5LnR5cGUpKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgYGJpbmFyeSAke2JpbmFyeS50eXBlfWAsIGxvY2F0aW9uKVxuXG4gICAgY29uc3Qgc2VtYW50aWMgPSB3aXRoQWRhcHRlZE9wZXJhdGlvbih7XG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJCaW5hcnlFeHByZXNzaW9uXCIpLFxuICAgICAgbGVmdDogY29udmVydEV4cHJlc3Npb24oYmluYXJ5LmxlZnQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgICAgbG9jYXRpb24sXG4gICAgICByaWdodDogY29udmVydEV4cHJlc3Npb24oYmluYXJ5LnJpZ2h0LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICAgIH0sIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvb3BlcmF0b3JzLmpzXCIpLkFkYXB0ZWRPcGVyYXRpb259ICovIChwaHBCaW5hcnlPcGVyYXRpb25zLmdldChiaW5hcnkudHlwZSkpKVxuXG4gICAgcmV0dXJuIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gKi8gKC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gKHdpdGhQYXJzZXJSYW5nZXMoc2VtYW50aWMsIHtcbiAgICAgIG9wZXJhdG9yOiB0b2tlbkxvY2F0aW9uKGJpbmFyeS50eXBlLCBiaW5hcnkubGVmdC5sb2M/LmVuZC5vZmZzZXQgPz8gMCwgYmluYXJ5LnJpZ2h0LmxvYz8uc3RhcnQub2Zmc2V0ID8/IHNvdXJjZS5sZW5ndGgsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgfSkpKVxuICB9XG5cbiAgaWYgKG5vZGUua2luZCA9PSBcImNhbGxcIikge1xuICAgIGNvbnN0IGNhbGwgPSAvKiogQHR5cGUge2ltcG9ydChcInBocC1wYXJzZXJcIikuQ2FsbH0gKi8gKG5vZGUpXG5cbiAgICBpZiAoY2FsbC53aGF0LmtpbmQgPT0gXCJwcm9wZXJ0eWxvb2t1cFwiKSB7XG4gICAgICBjb25zdCBsb29rdXAgPSAvKiogQHR5cGUge2ltcG9ydChcInBocC1wYXJzZXJcIikuUHJvcGVydHlMb29rdXB9ICovICgvKiogQHR5cGUge3Vua25vd259ICovIChjYWxsLndoYXQpKVxuICAgICAgY29uc3QgbWVtYmVyID0gbG9va3VwLm9mZnNldC5raW5kID09IFwiaWRlbnRpZmllclwiID8gLyoqIEB0eXBlIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLklkZW50aWZpZXJ9ICovIChsb29rdXAub2Zmc2V0KSA6IHVuZGVmaW5lZFxuICAgICAgY29uc3QgcmVjZWl2ZXJUeXBlID0ga25vd25FeHByZXNzaW9uVHlwZShsb29rdXAud2hhdCwgY29udGV4dClcblxuICAgICAgaWYgKG1lbWJlciAmJiB0eXBlb2YgbWVtYmVyLm5hbWUgPT0gXCJzdHJpbmdcIiAmJiByZWNlaXZlclR5cGU/LmtpbmQgPT0gXCJSZWZlcmVuY2VUeXBlXCIpIHtcbiAgICAgICAgY29uc3QgbWV0aG9kID0gY29udGV4dC5jbGFzc2VzLmdldChyZWNlaXZlclR5cGUuZGVjbGFyYXRpb25JZCk/Lm1ldGhvZHMuZmluZCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUubmFtZSA9PSBtZW1iZXIubmFtZSlcbiAgICAgICAgY29uc3QgdW5zdXBwb3J0ZWRBcmd1bWVudCA9IGNhbGwuYXJndW1lbnRzLmZpbmQoKGFyZ3VtZW50KSA9PlxuICAgICAgICAgIGFyZ3VtZW50LmtpbmQgPT0gXCJuYW1lZGFyZ3VtZW50XCIgfHwgYXJndW1lbnQua2luZCA9PSBcInZhcmlhZGljXCIgfHwgUmVmbGVjdC5nZXQoYXJndW1lbnQsIFwiYnlyZWZcIikgPT09IHRydWUpXG5cbiAgICAgICAgaWYgKHVuc3VwcG9ydGVkQXJndW1lbnQpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBcIm5vbi1wb3NpdGlvbmFsIG1ldGhvZCBhcmd1bWVudFwiLFxuICAgICAgICAgIG5vZGVMb2NhdGlvbih1bnN1cHBvcnRlZEFyZ3VtZW50LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2FyZ3VtZW50czogY2FsbC5hcmd1bWVudHMubWFwKChhcmd1bWVudCwgaW5kZXgpID0+XG4gICAgICAgICAgY29udmVydEV4cHJlc3Npb24oYXJndW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIG1ldGhvZD8ucGFyYW1ldGVyc1tpbmRleF0/LnR5cGUpKSxcbiAgICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTWV0aG9kQ2FsbEV4cHJlc3Npb25cIiksIGxvY2F0aW9uLCBtZXRob2Q6IG1ldGhvZD8uaWQgPz8gbWVtYmVyLm5hbWUsXG4gICAgICAgIHJlY2VpdmVyOiBjb252ZXJ0RXhwcmVzc2lvbihsb29rdXAud2hhdCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCl9LCB7bWVtYmVyOiBub2RlTG9jYXRpb24obWVtYmVyLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNhbGwud2hhdC5raW5kID09IFwicHJvcGVydHlsb29rdXBcIiAmJiBjYWxsLmFyZ3VtZW50cy5sZW5ndGggPT0gMCkge1xuICAgICAgY29uc3QgbG9va3VwID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLlByb3BlcnR5TG9va3VwfSAqLyAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyAoY2FsbC53aGF0KSlcbiAgICAgIGNvbnN0IHJlY2VpdmVyID0gbG9va3VwLndoYXQua2luZCA9PSBcInZhcmlhYmxlXCIgPyAvKiogQHR5cGUge2ltcG9ydChcInBocC1wYXJzZXJcIikuVmFyaWFibGV9ICovIChsb29rdXAud2hhdCkgOiB1bmRlZmluZWRcbiAgICAgIGNvbnN0IG1lbWJlciA9IGxvb2t1cC5vZmZzZXQua2luZCA9PSBcImlkZW50aWZpZXJcIiA/IC8qKiBAdHlwZSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5JZGVudGlmaWVyfSAqLyAobG9va3VwLm9mZnNldCkgOiB1bmRlZmluZWRcblxuICAgICAgaWYgKHJlY2VpdmVyICYmIHR5cGVvZiByZWNlaXZlci5uYW1lID09IFwic3RyaW5nXCIgJiYgbWVtYmVyPy5uYW1lID09IFwiZ2V0TWVzc2FnZVwiICYmIGNvbnRleHQuYmluZGluZ3MuZ2V0KHJlY2VpdmVyLm5hbWUpPy5raW5kID09IFwiRXJyb3JUeXBlXCIpIHtcbiAgICAgICAgY29uc3QgcmVjZWl2ZXJMb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihyZWNlaXZlciwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiRXJyb3JNZXNzYWdlUmVhZFwiKSxcbiAgICAgICAgICBsb2NhdGlvbixcbiAgICAgICAgICByZWNlaXZlcjogd2l0aFBhcnNlclJhbmdlcyh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiSWRlbnRpZmllckV4cHJlc3Npb25cIiksIGxvY2F0aW9uOiByZWNlaXZlckxvY2F0aW9uLCBuYW1lOiByZWNlaXZlci5uYW1lfSwge1xuICAgICAgICAgICAgbmFtZTogcmVjZWl2ZXJMb2NhdGlvblxuICAgICAgICAgIH0pXG4gICAgICAgIH0sIHttZW1iZXI6IG5vZGVMb2NhdGlvbihtZW1iZXIsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgICAgIH1cbiAgICAgIGlmIChtZW1iZXIgJiYgdHlwZW9mIG1lbWJlci5uYW1lID09IFwic3RyaW5nXCIgJiYga25vd25HZW5lcmljUmVjb3JkQWNjZXNzb3JUeXBlKGxvb2t1cCwgY29udGV4dCkpIHtcbiAgICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgICAgIGZpZWxkOiBtZW1iZXIubmFtZSxcbiAgICAgICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJNZW1iZXJSZWFkXCIpLFxuICAgICAgICAgIGxvY2F0aW9uLFxuICAgICAgICAgIHJlY2VpdmVyOiBjb252ZXJ0RXhwcmVzc2lvbihsb29rdXAud2hhdCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgICAgICAgfSwge21lbWJlcjogbm9kZUxvY2F0aW9uKG1lbWJlciwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjYWxsLndoYXQua2luZCA9PSBcIm5hbWVcIiAmJiBjYWxsLndoYXQubmFtZSA9PSBcImNvdW50XCIgJiYgY2FsbC5hcmd1bWVudHMubGVuZ3RoID09IDEpIHtcbiAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgICAgY29sbGVjdGlvbjogY29udmVydEV4cHJlc3Npb24oY2FsbC5hcmd1bWVudHNbMF0sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJDb2xsZWN0aW9uU2l6ZUV4cHJlc3Npb25cIiksXG4gICAgICAgIGxvY2F0aW9uXG4gICAgICB9LCB7b3BlcmF0b3I6IG5vZGVMb2NhdGlvbihjYWxsLndoYXQsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgICB9XG5cbiAgICBpZiAoY2FsbC53aGF0LmtpbmQgIT0gXCJuYW1lXCIpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBcImR5bmFtaWMgY2FsbFwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgY29uc3QgY2FsbGVkTmFtZSA9IC8qKiBAdHlwZSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5OYW1lfSAqLyAoY2FsbC53aGF0KVxuXG4gICAgaWYgKGNhbGxlZE5hbWUucmVzb2x1dGlvbiAhPSBcInVxblwiIHx8IGNhbGxlZE5hbWUubmFtZS5pbmNsdWRlcyhcIlxcXFxcIikpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBcInF1YWxpZmllZCBjYWxsXCIsIG5vZGVMb2NhdGlvbihjYWxsLndoYXQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cbiAgICBjb25zdCB1bnN1cHBvcnRlZEFyZ3VtZW50ID0gY2FsbC5hcmd1bWVudHMuZmluZCgoYXJndW1lbnQpID0+XG4gICAgICBhcmd1bWVudC5raW5kID09IFwibmFtZWRhcmd1bWVudFwiIHx8IGFyZ3VtZW50LmtpbmQgPT0gXCJ2YXJpYWRpY1wiIHx8IFJlZmxlY3QuZ2V0KGFyZ3VtZW50LCBcImJ5cmVmXCIpID09PSB0cnVlKVxuXG4gICAgaWYgKHVuc3VwcG9ydGVkQXJndW1lbnQpIHtcbiAgICAgIGNvbnN0IGRldGFpbCA9IHVuc3VwcG9ydGVkQXJndW1lbnQua2luZCA9PSBcIm5hbWVkYXJndW1lbnRcIiA/IFwibmFtZWQgYXJndW1lbnRcIiA6XG4gICAgICAgIHVuc3VwcG9ydGVkQXJndW1lbnQua2luZCA9PSBcInZhcmlhZGljXCIgPyBcInVucGFja2VkIGFyZ3VtZW50XCIgOiBcImJ5LXJlZmVyZW5jZSBhcmd1bWVudFwiXG5cbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBkZXRhaWwsIG5vZGVMb2NhdGlvbih1bnN1cHBvcnRlZEFyZ3VtZW50LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG5cbiAgICBjb25zdCBjYWxsZWUgPSBjYWxsZWROYW1lLm5hbWVcblxuICAgIGNvbnN0IHNpZ25hdHVyZSA9IGNvbnRleHQuZnVuY3Rpb25zLmdldChjYWxsZWUpXG4gICAgY29uc3Qga25vd25Bcmd1bWVudHMgPSBjYWxsLmFyZ3VtZW50cy5tYXAoKGFyZ3VtZW50KSA9PiBrbm93bkNhbGxBcmd1bWVudFR5cGUoYXJndW1lbnQsIGNvbnRleHQpKVxuICAgIGNvbnN0IHBhcmFtZXRlclR5cGVzID0gc2lnbmF0dXJlID8ga25vd25DYWxsUGFyYW1ldGVyVHlwZXMoc2lnbmF0dXJlLCBrbm93bkFyZ3VtZW50cykgOiB1bmRlZmluZWRcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGFyZ3VtZW50czogY2FsbC5hcmd1bWVudHMubWFwKChhcmd1bWVudCwgaW5kZXgpID0+XG4gICAgICAgIGNvbnZlcnRFeHByZXNzaW9uKGFyZ3VtZW50LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LFxuICAgICAgICAgIHBhcmFtZXRlclR5cGVzPy5baW5kZXhdID8/IHNpZ25hdHVyZT8ucGFyYW1ldGVyc1tpbmRleF0/LnR5cGUsXG4gICAgICAgICAgcHJlc2VydmVzR2VuZXJpY09wdGlvbmFsRXZpZGVuY2Uoc2lnbmF0dXJlLCBpbmRleCkpKSxcbiAgICAgIGNhbGxlZSxcbiAgICAgIGtpbmQ6IFwiQ2FsbEV4cHJlc3Npb25cIixcbiAgICAgIGxvY2F0aW9uXG4gICAgfSwge2NhbGxlZTogbm9kZUxvY2F0aW9uKGNhbGwud2hhdCwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICB9XG5cbiAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIG5vZGUua2luZCwgbG9jYXRpb24pXG59XG5cbi8qKlxuICogUmVzb2x2ZXMgb25seSByZXN1bHQgdHlwZXMgZXN0YWJsaXNoZWQgYnkgZXhwbGljaXQgc2lnbmF0dXJlcyBhbmQgYmluZGluZ3MuXG4gKiBAcGFyYW0ge2ltcG9ydChcInBocC1wYXJzZXJcIikuRXhwcmVzc2lvbn0gbm9kZSAtIFBhcnNlci1vd25lZCBleHByZXNzaW9uLlxuICogQHBhcmFtIHtQaHBDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0Z1bmN0aW9uUmV0dXJuVHlwZSB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yVHlwZSB8IHVuZGVmaW5lZH0gS25vd24gcmVzdWx0IHR5cGUuXG4gKi9cbmZ1bmN0aW9uIGtub3duRXhwcmVzc2lvblR5cGUobm9kZSwgY29udGV4dCkge1xuICBpZiAobm9kZS5raW5kID09IFwidmFyaWFibGVcIikge1xuICAgIGNvbnN0IHZhcmlhYmxlID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLlZhcmlhYmxlfSAqLyAobm9kZSlcblxuICAgIGlmICh2YXJpYWJsZS5uYW1lID09IFwidGhpc1wiICYmIGNvbnRleHQuY3VycmVudENsYXNzPy5pZCkge1xuICAgICAgcmV0dXJuIHtkZWNsYXJhdGlvbklkOiBjb250ZXh0LmN1cnJlbnRDbGFzcy5pZCwga2luZDogXCJSZWZlcmVuY2VUeXBlXCJ9XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdmFyaWFibGUubmFtZSA9PSBcInN0cmluZ1wiKSByZXR1cm4gY29udGV4dC5iaW5kaW5ncy5nZXQodmFyaWFibGUubmFtZSlcbiAgfVxuICBpZiAobm9kZS5raW5kID09IFwiY2FsbFwiKSB7XG4gICAgY29uc3QgY2FsbCA9IC8qKiBAdHlwZSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5DYWxsfSAqLyAobm9kZSlcbiAgICBjb25zdCBuYW1lID0gY2FsbC53aGF0LmtpbmQgPT0gXCJuYW1lXCIgJiYgdHlwZW9mIGNhbGwud2hhdC5uYW1lID09IFwic3RyaW5nXCIgPyBjYWxsLndoYXQubmFtZSA6IHVuZGVmaW5lZFxuXG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IGNvbnRleHQuZnVuY3Rpb25zLmdldChuYW1lKVxuXG4gICAgICBpZiAoc2lnbmF0dXJlKSByZXR1cm4ga25vd25DYWxsUmV0dXJuVHlwZShzaWduYXR1cmUsIGNhbGwuYXJndW1lbnRzLm1hcCgoYXJndW1lbnQpID0+IGtub3duRXhwcmVzc2lvblR5cGUoYXJndW1lbnQsIGNvbnRleHQpKSlcbiAgICB9XG4gICAgaWYgKGNhbGwud2hhdC5raW5kID09IFwicHJvcGVydHlsb29rdXBcIiAmJiBjYWxsLmFyZ3VtZW50cy5sZW5ndGggPT0gMCkge1xuICAgICAgcmV0dXJuIGtub3duR2VuZXJpY1JlY29yZEFjY2Vzc29yVHlwZShcbiAgICAgICAgLyoqIEB0eXBlIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLlByb3BlcnR5TG9va3VwfSAqLyAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyAoY2FsbC53aGF0KSksIGNvbnRleHQpXG4gICAgfVxuICAgIGlmIChjYWxsLndoYXQua2luZCA9PSBcInByb3BlcnR5bG9va3VwXCIpIHtcbiAgICAgIGNvbnN0IGxvb2t1cCA9IC8qKiBAdHlwZSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5Qcm9wZXJ0eUxvb2t1cH0gKi8gKC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gKGNhbGwud2hhdCkpXG4gICAgICBjb25zdCByZWNlaXZlciA9IGtub3duRXhwcmVzc2lvblR5cGUobG9va3VwLndoYXQsIGNvbnRleHQpXG4gICAgICBjb25zdCBtZW1iZXIgPSBsb29rdXAub2Zmc2V0LmtpbmQgPT0gXCJpZGVudGlmaWVyXCIgPyAvKiogQHR5cGUge2ltcG9ydChcInBocC1wYXJzZXJcIikuSWRlbnRpZmllcn0gKi8gKGxvb2t1cC5vZmZzZXQpIDogdW5kZWZpbmVkXG5cbiAgICAgIGlmIChyZWNlaXZlcj8ua2luZCA9PSBcIlJlZmVyZW5jZVR5cGVcIiAmJiBtZW1iZXIgJiYgdHlwZW9mIG1lbWJlci5uYW1lID09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIGNvbnRleHQuY2xhc3Nlcy5nZXQocmVjZWl2ZXIuZGVjbGFyYXRpb25JZCk/Lm1ldGhvZHMuZmluZCgobWV0aG9kKSA9PiBtZXRob2QubmFtZSA9PSBtZW1iZXIubmFtZSk/LnJldHVyblR5cGVcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKG5vZGUua2luZCA9PSBcIm9mZnNldGxvb2t1cFwiKSB7XG4gICAgY29uc3QgbG9va3VwID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLk9mZnNldExvb2t1cH0gKi8gKG5vZGUpXG4gICAgY29uc3QgY29sbGVjdGlvblR5cGUgPSBrbm93bkV4cHJlc3Npb25UeXBlKGxvb2t1cC53aGF0LCBjb250ZXh0KVxuXG4gICAgaWYgKGNvbGxlY3Rpb25UeXBlPy5raW5kID09IFwiTGlzdFR5cGVcIikgcmV0dXJuIGNvbGxlY3Rpb25UeXBlLmVsZW1lbnRUeXBlXG4gICAgaWYgKGNvbGxlY3Rpb25UeXBlPy5raW5kID09IFwiTWFwVHlwZVwiIHx8IGNvbGxlY3Rpb25UeXBlPy5raW5kID09IFwiT3JkZXJlZE1hcFR5cGVcIikgcmV0dXJuIGNvbGxlY3Rpb25UeXBlLnZhbHVlVHlwZVxuICB9XG4gIGlmIChub2RlLmtpbmQgPT0gXCJuZXdcIikge1xuICAgIGNvbnN0IGNvbnN0cnVjdGlvbiA9IC8qKiBAdHlwZSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5OZXd9ICovIChub2RlKVxuICAgIGNvbnN0IG5hbWUgPSBjb25zdHJ1Y3Rpb24ud2hhdC5raW5kID09IFwibmFtZVwiID8gLyoqIEB0eXBlIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLk5hbWV9ICovIChjb25zdHJ1Y3Rpb24ud2hhdCkgOiB1bmRlZmluZWRcbiAgICBjb25zdCBkZWNsYXJhdGlvbiA9IG5hbWUgJiYgdHlwZW9mIG5hbWUubmFtZSA9PSBcInN0cmluZ1wiID8gY29udGV4dC5yZWNvcmROYW1lcy5nZXQobmFtZS5uYW1lKSA6IHVuZGVmaW5lZFxuXG4gICAgaWYgKGRlY2xhcmF0aW9uPy5pZCkgcmV0dXJuIGRlY2xhcmF0aW9uLmtpbmQgPT0gXCJDbGFzc0RlY2xhcmF0aW9uXCJcbiAgICAgID8ge2RlY2xhcmF0aW9uSWQ6IGRlY2xhcmF0aW9uLmlkLCBraW5kOiBcIlJlZmVyZW5jZVR5cGVcIn1cbiAgICAgIDoge2RlY2xhcmF0aW9uSWQ6IGRlY2xhcmF0aW9uLmlkLCBraW5kOiBcIlJlY29yZFR5cGVcIn1cbiAgfVxuICBpZiAobm9kZS5raW5kID09IFwicHJvcGVydHlsb29rdXBcIikge1xuICAgIGNvbnN0IHJlYWQgPSAvKiogQHR5cGUge2ltcG9ydChcInBocC1wYXJzZXJcIikuUHJvcGVydHlMb29rdXB9ICovIChub2RlKVxuICAgIGNvbnN0IHJlY2VpdmVyID0ga25vd25FeHByZXNzaW9uVHlwZShyZWFkLndoYXQsIGNvbnRleHQpXG5cbiAgICBpZiAocmVhZC53aGF0LmtpbmQgPT0gXCJ2YXJpYWJsZVwiICYmIC8qKiBAdHlwZSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5WYXJpYWJsZX0gKi8gKHJlYWQud2hhdCkubmFtZSA9PSBcInRoaXNcIiAmJlxuICAgICAgY29udGV4dC5jdXJyZW50Q2xhc3MpIHtcbiAgICAgIGNvbnN0IG9mZnNldCA9IHJlYWQub2Zmc2V0LmtpbmQgPT0gXCJpZGVudGlmaWVyXCIgPyAvKiogQHR5cGUge2ltcG9ydChcInBocC1wYXJzZXJcIikuSWRlbnRpZmllcn0gKi8gKHJlYWQub2Zmc2V0KSA6IHVuZGVmaW5lZFxuXG4gICAgICByZXR1cm4gY29udGV4dC5jdXJyZW50Q2xhc3MuZmllbGRzLmZpbmQoKGZpZWxkKSA9PiBmaWVsZC5uYW1lID09IG9mZnNldD8ubmFtZSk/LnR5cGVcbiAgICB9XG5cbiAgICBpZiAocmVjZWl2ZXI/LmtpbmQgIT0gXCJSZWNvcmRUeXBlXCIpIHJldHVybiB1bmRlZmluZWRcbiAgICBjb25zdCBkZWNsYXJhdGlvbiA9IGNvbnRleHQucmVjb3Jkcy5nZXQocmVjZWl2ZXIuZGVjbGFyYXRpb25JZClcbiAgICBjb25zdCBvZmZzZXQgPSByZWFkLm9mZnNldC5raW5kID09IFwiaWRlbnRpZmllclwiID8gLyoqIEB0eXBlIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLklkZW50aWZpZXJ9ICovIChyZWFkLm9mZnNldCkgOiB1bmRlZmluZWRcblxuICAgIGNvbnN0IG1lbWJlck5hbWUgPSBvZmZzZXQgJiYgdHlwZW9mIG9mZnNldC5uYW1lID09IFwic3RyaW5nXCIgPyBvZmZzZXQubmFtZSA6IHVuZGVmaW5lZFxuXG4gICAgaWYgKG1lbWJlck5hbWUgJiYgZGVjbGFyYXRpb24pIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gZGVjbGFyYXRpb24uZmllbGRzLmZpbmRJbmRleCgoZmllbGQpID0+IGZpZWxkLm5hbWUgPT0gbWVtYmVyTmFtZSlcblxuICAgICAgcmV0dXJuIGluc3RhbnRpYXRlZFJlY29yZEZpZWxkVHlwZShkZWNsYXJhdGlvbiwgcmVjZWl2ZXIuYXJndW1lbnRzLCBpbmRleClcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkXG59XG5cbi8qKlxuICogUmVzb2x2ZXMgZXhhY3QgcGFyc2VyLWtub3duIGFyZ3VtZW50IGV2aWRlbmNlIHdpdGhvdXQgY2hhbmdpbmcgdGhlIGVzdGFibGlzaGVkXG4gKiBleHByZXNzaW9uLXJlc3VsdCBjbGFzc2lmaWVyIHVzZWQgZm9yIG9wdGlvbmFsIGNvbnZlcnNpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcInBocC1wYXJzZXJcIikuRXhwcmVzc2lvbn0gbm9kZSAtIFBhcnNlci1vd25lZCBjYWxsIGFyZ3VtZW50LlxuICogQHBhcmFtIHtQaHBDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0Z1bmN0aW9uUmV0dXJuVHlwZSB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yVHlwZSB8IHVuZGVmaW5lZH0gS25vd24gYXJndW1lbnQgdHlwZS5cbiAqL1xuZnVuY3Rpb24ga25vd25DYWxsQXJndW1lbnRUeXBlKG5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qga25vd24gPSBrbm93bkV4cHJlc3Npb25UeXBlKG5vZGUsIGNvbnRleHQpXG5cbiAgaWYgKGtub3duKSByZXR1cm4ga25vd25cbiAgaWYgKG5vZGUua2luZCA9PSBcIm51bWJlclwiICYmIE51bWJlci5pc1NhZmVJbnRlZ2VyKE51bWJlcigvKiogQHR5cGUge2ltcG9ydChcInBocC1wYXJzZXJcIikuTnVtYmVyfSAqLyAobm9kZSkudmFsdWUpKSkge1xuICAgIHJldHVybiBzY2FsYXJUeXBlKFwiaW50ZWdlclwiKVxuICB9XG4gIGlmIChub2RlLmtpbmQgPT0gXCJib29sZWFuXCIgJiYgdHlwZW9mIC8qKiBAdHlwZSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5Cb29sZWFufSAqLyAobm9kZSkudmFsdWUgPT0gXCJib29sZWFuXCIpIHtcbiAgICByZXR1cm4gc2NhbGFyVHlwZShcImJvb2xlYW5cIilcbiAgfVxuICBpZiAobm9kZS5raW5kID09IFwic3RyaW5nXCIgJiYgdHlwZW9mIC8qKiBAdHlwZSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5TdHJpbmd9ICovIChub2RlKS52YWx1ZSA9PSBcInN0cmluZ1wiICYmXG4gICAgaGFzT25seVVuaWNvZGVTY2FsYXJzKC8qKiBAdHlwZSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5TdHJpbmd9ICovIChub2RlKS52YWx1ZSkpIHtcbiAgICByZXR1cm4gc2NhbGFyVHlwZShcInN0cmluZ1wiKVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZFxufVxuXG4vKipcbiAqIFJlc29sdmVzIFBIUCdzIGV4YWN0IHplcm8tYXJndW1lbnQgYWNjZXNzb3IgY2FycmllciBhZ2FpbnN0IGl0cyByZWNlaXZlcidzXG4gKiBnZW5lcmljIHJlY29yZCBkZWNsYXJhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5Qcm9wZXJ0eUxvb2t1cH0gbG9va3VwIC0gUGFyc2VyLW93bmVkIG1ldGhvZCBsb29rdXAuXG4gKiBAcGFyYW0ge1BocENvbnZlcnNpb25Db250ZXh0fSBjb250ZXh0IC0gVHlwZWQgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljVmFsdWVUeXBlIHwgdW5kZWZpbmVkfSBJbnN0YW50aWF0ZWQgZmllbGQgdHlwZS5cbiAqL1xuZnVuY3Rpb24ga25vd25HZW5lcmljUmVjb3JkQWNjZXNzb3JUeXBlKGxvb2t1cCwgY29udGV4dCkge1xuICBjb25zdCByZWNlaXZlciA9IGtub3duRXhwcmVzc2lvblR5cGUobG9va3VwLndoYXQsIGNvbnRleHQpXG4gIGNvbnN0IHJlY2VpdmVyUmVjb3JkID0gcmVjZWl2ZXI/LmtpbmQgPT0gXCJPcHRpb25hbFR5cGVcIiA/IHJlY2VpdmVyLnZhbHVlVHlwZSA6IHJlY2VpdmVyXG5cbiAgaWYgKHJlY2VpdmVyUmVjb3JkPy5raW5kICE9IFwiUmVjb3JkVHlwZVwiKSByZXR1cm4gdW5kZWZpbmVkXG4gIGNvbnN0IGRlY2xhcmF0aW9uID0gY29udGV4dC5yZWNvcmRzLmdldChyZWNlaXZlclJlY29yZC5kZWNsYXJhdGlvbklkKVxuICBjb25zdCBtZW1iZXIgPSBsb29rdXAub2Zmc2V0LmtpbmQgPT0gXCJpZGVudGlmaWVyXCIgPyAvKiogQHR5cGUge2ltcG9ydChcInBocC1wYXJzZXJcIikuSWRlbnRpZmllcn0gKi8gKGxvb2t1cC5vZmZzZXQpIDogdW5kZWZpbmVkXG4gIGNvbnN0IGluZGV4ID0gbWVtYmVyICYmIHR5cGVvZiBtZW1iZXIubmFtZSA9PSBcInN0cmluZ1wiXG4gICAgPyBkZWNsYXJhdGlvbj8uZmllbGRzLmZpbmRJbmRleCgoZmllbGQpID0+IGZpZWxkLm5hbWUgPT0gbWVtYmVyLm5hbWUpID8/IC0xXG4gICAgOiAtMVxuXG4gIGlmICghZGVjbGFyYXRpb24gfHwgKGRlY2xhcmF0aW9uLnR5cGVQYXJhbWV0ZXJzPy5sZW5ndGggPz8gMCkgPT0gMCB8fCBpbmRleCA8IDApIHJldHVybiB1bmRlZmluZWRcblxuICByZXR1cm4gaW5zdGFudGlhdGVkUmVjb3JkRmllbGRUeXBlKGRlY2xhcmF0aW9uLCByZWNlaXZlclJlY29yZC5hcmd1bWVudHMsIGluZGV4KVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBleHBsaWNpdCBQSFAgcmV0dXJuLlxuICogQHBhcmFtIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLk5vZGV9IG5vZGUgLSBQSFAgbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge1BocENvbnZlcnNpb25Db250ZXh0fSBjb250ZXh0IC0gVHlwZWQgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJldHVyblN0YXRlbWVudH0gU2VtYW50aWMgcmV0dXJuLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0UmV0dXJuKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAobm9kZS5raW5kICE9IFwicmV0dXJuXCIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBub2RlLmtpbmQsIGxvY2F0aW9uKVxuXG4gIGNvbnN0IHJldHVybk5vZGUgPSAvKiogQHR5cGUge2ltcG9ydChcInBocC1wYXJzZXJcIikuUmV0dXJufSAqLyAobm9kZSlcbiAgY29uc3QgZXhwZWN0ZWRUeXBlID0gY29udGV4dC5yZXR1cm5UeXBlPy5raW5kID09IFwiVHlwZVJlZmVyZW5jZVwiICYmIGNvbnRleHQucmV0dXJuVHlwZS5uYW1lID09IFwidm9pZFwiXG4gICAgPyB1bmRlZmluZWRcbiAgICA6IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNWYWx1ZVR5cGUgfCB1bmRlZmluZWR9ICovIChjb250ZXh0LnJldHVyblR5cGUpXG5cbiAgcmV0dXJuIHtcbiAgICAuLi4ocmV0dXJuTm9kZS5leHByID8ge2V4cHJlc3Npb246IGNvbnZlcnRFeHByZXNzaW9uKHJldHVybk5vZGUuZXhwciwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgZXhwZWN0ZWRUeXBlKX0gOiB7fSksXG4gICAga2luZDogXCJSZXR1cm5TdGF0ZW1lbnRcIixcbiAgICBsb2NhdGlvblxuICB9XG59XG5cbi8qKlxuICogUmVhZHMgb25lIGV4YWN0IFBIUCBsb2NhbCBgQHZhcmAgY2FycmllciBhbmQgaW1tdXRhYmlsaXR5IG1hcmtlci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5Ob2RlfSBub2RlIC0gQXNzaWdubWVudC1vd25pbmcgc3RhdGVtZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBMb2NhbCBuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59IHJlY29yZE5hbWVzIC0gTm9taW5hbCBkZWNsYXJhdGlvbnMgYnkgc291cmNlIG5hbWUuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlR5cGVQYXJhbWV0ZXI+fSBbdHlwZVBhcmFtZXRlcnNdIC0gRGVjbGFyYXRpb24tc2NvcGVkIHBhcmFtZXRlcnMuXG4gKiBAcmV0dXJucyB7e2ltbXV0YWJsZTogYm9vbGVhbiwgdHlwZTogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNWYWx1ZVR5cGV9IHwgdW5kZWZpbmVkfSBNZXRhZGF0YSB3aGVuIHByZXNlbnQuXG4gKi9cbmZ1bmN0aW9uIGxvY2FsTWV0YWRhdGEobm9kZSwgbmFtZSwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJzID0gbmV3IE1hcCgpKSB7XG4gIGNvbnN0IGNvbW1lbnRzID0gbm9kZS5sZWFkaW5nQ29tbWVudHMgPz8gW11cbiAgY29uc3QgY29tbWVudCA9IGNvbW1lbnRzLmF0KC0xKVxuXG4gIGlmICghY29tbWVudCB8fCBjb21tZW50LmtpbmQgIT0gXCJjb21tZW50YmxvY2tcIiB8fCAhY29tbWVudC5sb2MgfHwgIW5vZGUubG9jKSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgY29uc3QgZ2FwID0gc291cmNlLnNsaWNlKGNvbW1lbnQubG9jLmVuZC5vZmZzZXQsIG5vZGUubG9jLnN0YXJ0Lm9mZnNldClcblxuICBpZiAoIS9eXFxzKiQvdS50ZXN0KGdhcCkgfHwgKGdhcC5tYXRjaCgvXFxuL2d1KT8ubGVuZ3RoID8/IDApID4gMSkgcmV0dXJuIHVuZGVmaW5lZFxuXG4gIGNvbnN0IGJsb2NrID0gcGFyc2VDb21tZW50KGNvbW1lbnQudmFsdWUpWzBdXG4gIGNvbnN0IHRhZ3MgPSBibG9jaz8udGFncyA/PyBbXVxuICBjb25zdCB2YXJpYWJsZXMgPSB0YWdzLmZpbHRlcigodGFnKSA9PiB0YWcudGFnID09IFwidmFyXCIpXG4gIGNvbnN0IGltbXV0YWJsZSA9IHRhZ3MuZmlsdGVyKCh0YWcpID0+IHRhZy50YWcgPT0gXCJzZW1hbnRpZm9sZC1pbW11dGFibGVcIilcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAodmFyaWFibGVzLmxlbmd0aCA9PSAwICYmIGltbXV0YWJsZS5sZW5ndGggPT0gMCkgcmV0dXJuIHVuZGVmaW5lZFxuXG4gIGNvbnN0IGV4YWN0VmFyaWFibGUgPSB2YXJpYWJsZXMubGVuZ3RoID09IDEgJiYgdmFyaWFibGVzWzBdLnR5cGUgPT0gXCJcIiAmJiB2YXJpYWJsZXNbMF0uZGVzY3JpcHRpb24gPT0gYCQke25hbWV9YFxuICBjb25zdCBleGFjdEltbXV0YWJsZSA9IGltbXV0YWJsZS5sZW5ndGggPD0gMSAmJiBpbW11dGFibGUuZXZlcnkoKHRhZykgPT4gdGFnLm5hbWUgPT0gXCJcIiAmJiB0YWcudHlwZSA9PSBcIlwiICYmIHRhZy5kZXNjcmlwdGlvbiA9PSBcIlwiKVxuICBjb25zdCBrbm93blRhZ3MgPSB0YWdzLmV2ZXJ5KCh0YWcpID0+IHRhZy50YWcgPT0gXCJ2YXJcIiB8fCB0YWcudGFnID09IFwic2VtYW50aWZvbGQtaW1tdXRhYmxlXCIpXG5cbiAgaWYgKCFleGFjdFZhcmlhYmxlIHx8ICFleGFjdEltbXV0YWJsZSB8fCAha25vd25UYWdzKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwibWFsZm9ybWVkIGxvY2FsIHR5cGUgbWV0YWRhdGFcIiwgbG9jYXRpb24pXG4gIH1cblxuICByZXR1cm4ge1xuICAgIGltbXV0YWJsZTogaW1tdXRhYmxlLmxlbmd0aCA9PSAxLFxuICAgIHR5cGU6IGRvY3VtZW50ZWRWYWx1ZVR5cGUoe1xuICAgICAgbGFuZ3VhZ2U6IFwicGhwXCIsXG4gICAgICBsb2NhdGlvbjogY29tbWVudFRhZ0xvY2F0aW9uKGNvbW1lbnQsIHZhcmlhYmxlc1swXSwgXCJuYW1lXCIsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgb3duZXJMb2NhdGlvbjogbG9jYXRpb24sXG4gICAgICByZWNvcmRzOiByZWNvcmROYW1lcyxcbiAgICAgIHNvdXJjZSxcbiAgICAgIHNvdXJjZVR5cGU6IHZhcmlhYmxlc1swXS5uYW1lLFxuICAgICAgc3ViamVjdDogYExvY2FsICcke25hbWV9J2AsXG4gICAgICB0eXBlUGFyYW1ldGVyc1xuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgUEhQIGxvY2FsIGRlY2xhcmF0aW9uIG9yIGFzc2lnbm1lbnQuXG4gKiBAcGFyYW0ge2ltcG9ydChcInBocC1wYXJzZXJcIikuTm9kZX0gbm9kZSAtIFBIUCBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtQaHBDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Mb2NhbFN0YXRlbWVudCB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlByaXZhdGVGaWVsZFdyaXRlU3RhdGVtZW50fSBTZW1hbnRpYyBsb2NhbCBvciBwcml2YXRlLWZpZWxkIHN0YXRlbWVudC5cbiAqL1xuZnVuY3Rpb24gY29udmVydExvY2FsU3RhdGVtZW50KG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAobm9kZS5raW5kICE9IFwiZXhwcmVzc2lvbnN0YXRlbWVudFwiKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgbm9kZS5raW5kLCBsb2NhdGlvbilcblxuICBjb25zdCBleHByZXNzaW9uID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLkV4cHJlc3Npb25TdGF0ZW1lbnR9ICovIChub2RlKS5leHByZXNzaW9uXG5cbiAgaWYgKGV4cHJlc3Npb24ua2luZCAhPSBcImFzc2lnblwiKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgZXhwcmVzc2lvbi5raW5kLCBub2RlTG9jYXRpb24oZXhwcmVzc2lvbiwgZmlsZW5hbWUsIHNvdXJjZSkpXG5cbiAgY29uc3QgYXNzaWdubWVudCA9IC8qKiBAdHlwZSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5Bc3NpZ259ICovIChleHByZXNzaW9uKVxuXG4gIGlmIChhc3NpZ25tZW50Lm9wZXJhdG9yICE9IFwiPVwiKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgYGFzc2lnbm1lbnQgJHthc3NpZ25tZW50Lm9wZXJhdG9yfWAsIGxvY2F0aW9uKVxuICBpZiAoYXNzaWdubWVudC5sZWZ0LmtpbmQgPT0gXCJwcm9wZXJ0eWxvb2t1cFwiICYmIGNvbnRleHQuY3VycmVudENsYXNzKSB7XG4gICAgY29uc3QgbG9va3VwID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLlByb3BlcnR5TG9va3VwfSAqLyAoYXNzaWdubWVudC5sZWZ0KVxuICAgIGNvbnN0IHJlY2VpdmVyID0gbG9va3VwLndoYXQua2luZCA9PSBcInZhcmlhYmxlXCIgPyAvKiogQHR5cGUge2ltcG9ydChcInBocC1wYXJzZXJcIikuVmFyaWFibGV9ICovIChsb29rdXAud2hhdCkgOiB1bmRlZmluZWRcbiAgICBjb25zdCBtZW1iZXIgPSBsb29rdXAub2Zmc2V0LmtpbmQgPT0gXCJpZGVudGlmaWVyXCIgPyAvKiogQHR5cGUge2ltcG9ydChcInBocC1wYXJzZXJcIikuSWRlbnRpZmllcn0gKi8gKGxvb2t1cC5vZmZzZXQpIDogdW5kZWZpbmVkXG4gICAgY29uc3QgZmllbGQgPSByZWNlaXZlcj8ubmFtZSA9PSBcInRoaXNcIiAmJiBtZW1iZXIgJiYgdHlwZW9mIG1lbWJlci5uYW1lID09IFwic3RyaW5nXCJcbiAgICAgID8gY29udGV4dC5jdXJyZW50Q2xhc3MuZmllbGRzLmZpbmQoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLm5hbWUgPT0gbWVtYmVyLm5hbWUpXG4gICAgICA6IHVuZGVmaW5lZFxuXG4gICAgaWYgKCFmaWVsZCkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwicHJpdmF0ZSBmaWVsZCB3cml0ZSBvdXRzaWRlIHRoZSBkZWNsYXJpbmcgcmVjZWl2ZXJcIiwgbm9kZUxvY2F0aW9uKGFzc2lnbm1lbnQubGVmdCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2V4cHJlc3Npb246IGNvbnZlcnRFeHByZXNzaW9uKGFzc2lnbm1lbnQucmlnaHQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIGZpZWxkLnR5cGUpLFxuICAgICAgZmllbGQ6IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZmllbGQuaWQpLCBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJQcml2YXRlRmllbGRXcml0ZVN0YXRlbWVudFwiKSwgbG9jYXRpb24sXG4gICAgICByZWNlaXZlcjogLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNlaXZlckV4cHJlc3Npb259ICovIChcbiAgICAgICAgY29udmVydEV4cHJlc3Npb24obG9va3VwLndoYXQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpKX0sXG4gICAge21lbWJlcjogbm9kZUxvY2F0aW9uKC8qKiBAdHlwZSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5JZGVudGlmaWVyfSAqLyAobWVtYmVyKSwgZmlsZW5hbWUsIHNvdXJjZSksIG9wZXJhdG9yOiB0b2tlbkxvY2F0aW9uKFwiPVwiLCBhc3NpZ25tZW50LmxlZnQubG9jPy5lbmQub2Zmc2V0ID8/IDAsXG4gICAgICBhc3NpZ25tZW50LnJpZ2h0LmxvYz8uc3RhcnQub2Zmc2V0ID8/IHNvdXJjZS5sZW5ndGgsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgfVxuICBpZiAoYXNzaWdubWVudC5sZWZ0LmtpbmQgIT0gXCJ2YXJpYWJsZVwiKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgYXNzaWdubWVudC5sZWZ0LmtpbmQsIG5vZGVMb2NhdGlvbihhc3NpZ25tZW50LmxlZnQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICBpZiAoYXNzaWdubWVudC5yaWdodC5raW5kID09IFwidGhyb3dcIikge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBcInRocm93IGV4cHJlc3Npb24gaW4gYSB2YWx1ZSBjb250ZXh0XCIsIG5vZGVMb2NhdGlvbihhc3NpZ25tZW50LnJpZ2h0LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuXG4gIGNvbnN0IHZhcmlhYmxlID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLlZhcmlhYmxlfSAqLyAoYXNzaWdubWVudC5sZWZ0KVxuICBjb25zdCB0YXJnZXRMb2NhdGlvbiA9IG5vZGVMb2NhdGlvbih2YXJpYWJsZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAodHlwZW9mIHZhcmlhYmxlLm5hbWUgIT0gXCJzdHJpbmdcIiB8fCB2YXJpYWJsZS5jdXJseSkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwiZHluYW1pYyB2YXJpYWJsZVwiLCB0YXJnZXRMb2NhdGlvbilcblxuICBjb25zdCBtZXRhZGF0YSA9IGxvY2FsTWV0YWRhdGEobm9kZSwgdmFyaWFibGUubmFtZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dC5yZWNvcmROYW1lcywgY29udGV4dC50eXBlUGFyYW1ldGVycylcblxuICBpZiAobWV0YWRhdGEpIHtcbiAgICBsZXQgZGVjbGFyZWRUeXBlID0gbWV0YWRhdGEudHlwZVxuICAgIGxldCBvcmRlcmVkID0gZmFsc2VcblxuICAgIGlmIChkZWNsYXJlZFR5cGUua2luZCA9PSBcIk1hcFR5cGVcIiAmJiBjb250ZXh0Lm9yZGVyZWRNYXBEZWNsYXJhdGlvbnM/Lmhhcyhhc3NpZ25tZW50KSAmJiBhc3NpZ25tZW50LnJpZ2h0LmtpbmQgPT0gXCJhcnJheVwiKSB7XG4gICAgICBkZWNsYXJlZFR5cGUgPSBvcmRlcmVkTWFwVHlwZUZyb21NYXAoZGVjbGFyZWRUeXBlLCBsb2NhdGlvbilcbiAgICAgIG9yZGVyZWQgPSB0cnVlXG4gICAgfVxuICAgIGNvbnN0IGluaXRpYWxpemVyID0gY29udmVydEV4cHJlc3Npb24oYXNzaWdubWVudC5yaWdodCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgZGVjbGFyZWRUeXBlKVxuXG4gICAgY29udGV4dC5iaW5kaW5ncy5zZXQodmFyaWFibGUubmFtZSwgZGVjbGFyZWRUeXBlKVxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGluaXRpYWxpemVyLFxuICAgICAga2luZDogXCJMb2NhbERlY2xhcmF0aW9uXCIsXG4gICAgICBsb2NhdGlvbixcbiAgICAgIG11dGFibGU6IG9yZGVyZWQgPyBmYWxzZSA6ICFtZXRhZGF0YS5pbW11dGFibGUsXG4gICAgICBuYW1lOiB2YXJpYWJsZS5uYW1lLFxuICAgICAgdHlwZTogZGVjbGFyZWRUeXBlXG4gICAgfSwge1xuICAgICAgbmFtZTogdGFyZ2V0TG9jYXRpb24sXG4gICAgICBvcGVyYXRvcjogdG9rZW5Mb2NhdGlvbihcIj1cIiwgYXNzaWdubWVudC5sZWZ0LmxvYz8uZW5kLm9mZnNldCA/PyAwLCBhc3NpZ25tZW50LnJpZ2h0LmxvYz8uc3RhcnQub2Zmc2V0ID8/IHNvdXJjZS5sZW5ndGgsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IGluZmVycmVkVHlwZSA9IGtub3duRXhwcmVzc2lvblR5cGUoYXNzaWdubWVudC5yaWdodCwgY29udGV4dClcblxuICBpZiAoaW5mZXJyZWRUeXBlPy5raW5kID09IFwiUmVjb3JkVHlwZVwiIHx8IGluZmVycmVkVHlwZT8ua2luZCA9PSBcIlJlZmVyZW5jZVR5cGVcIiB8fFxuICAgIGluZmVycmVkVHlwZT8ua2luZCA9PSBcIk93bmVkUmVzb3VyY2VUeXBlXCIpIHtcbiAgICBjb25zdCBpbml0aWFsaXplciA9IGNvbnZlcnRFeHByZXNzaW9uKGFzc2lnbm1lbnQucmlnaHQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIGluZmVycmVkVHlwZSlcblxuICAgIGNvbnRleHQuYmluZGluZ3Muc2V0KHZhcmlhYmxlLm5hbWUsIGluZmVycmVkVHlwZSlcbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBpbml0aWFsaXplcixcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkxvY2FsRGVjbGFyYXRpb25cIiksXG4gICAgICBsb2NhdGlvbixcbiAgICAgIG11dGFibGU6IGZhbHNlLFxuICAgICAgbmFtZTogdmFyaWFibGUubmFtZSxcbiAgICAgIHR5cGU6IGluZmVycmVkVHlwZVxuICAgIH0sIHtcbiAgICAgIG5hbWU6IHRhcmdldExvY2F0aW9uLFxuICAgICAgb3BlcmF0b3I6IHRva2VuTG9jYXRpb24oXCI9XCIsIGFzc2lnbm1lbnQubGVmdC5sb2M/LmVuZC5vZmZzZXQgPz8gMCwgYXNzaWdubWVudC5yaWdodC5sb2M/LnN0YXJ0Lm9mZnNldCA/PyBzb3VyY2UubGVuZ3RoLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIH0pXG4gIH1cblxuICBjb25zdCBiaW5kaW5nVHlwZSA9IGNvbnRleHQuYmluZGluZ3MuZ2V0KHZhcmlhYmxlLm5hbWUpXG5cbiAgaWYgKCFiaW5kaW5nVHlwZSkgcmV0dXJuIG1pc3NpbmdUeXBlKFwicGhwXCIsIGBMb2NhbCAnJHt2YXJpYWJsZS5uYW1lfSdgLCBsb2NhdGlvbilcblxuICBjb25zdCB0YXJnZXQgPSB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJJZGVudGlmaWVyRXhwcmVzc2lvblwiKSwgbG9jYXRpb246IHRhcmdldExvY2F0aW9uLCBuYW1lOiB2YXJpYWJsZS5uYW1lfSwge1xuICAgIG5hbWU6IHRhcmdldExvY2F0aW9uXG4gIH0pXG4gIGNvbnN0IHZhbHVlID0gY29udmVydEV4cHJlc3Npb24oYXNzaWdubWVudC5yaWdodCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCxcbiAgICBiaW5kaW5nVHlwZS5raW5kID09IFwiRXJyb3JUeXBlXCIgPyB1bmRlZmluZWQgOiBiaW5kaW5nVHlwZSlcblxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgZXhwcmVzc2lvbjogdmFsdWUsXG4gICAga2luZDogXCJBc3NpZ25tZW50U3RhdGVtZW50XCIsXG4gICAgbG9jYXRpb24sXG4gICAgdGFyZ2V0XG4gIH0sIHtcbiAgICBvcGVyYXRvcjogdG9rZW5Mb2NhdGlvbihcIj1cIiwgYXNzaWdubWVudC5sZWZ0LmxvYz8uZW5kLm9mZnNldCA/PyAwLCBhc3NpZ25tZW50LnJpZ2h0LmxvYz8uc3RhcnQub2Zmc2V0ID8/IHNvdXJjZS5sZW5ndGgsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIH0pXG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIGV4aGF1c3RpdmUgUEhQIHN0YXRlbWVudC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5Ob2RlfSBub2RlIC0gUEhQIHN0YXRlbWVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge1BocENvbnZlcnNpb25Db250ZXh0fSBjb250ZXh0IC0gVHlwZWQgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlN0YXRlbWVudH0gU2VtYW50aWMgc3RhdGVtZW50LlxuICovXG5mdW5jdGlvbiBjb252ZXJ0U3RhdGVtZW50KG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpIHtcbiAgaWYgKG5vZGUua2luZCA9PSBcInJldHVyblwiKSByZXR1cm4gY29udmVydFJldHVybihub2RlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICBpZiAobm9kZS5raW5kID09IFwiaWZcIikgcmV0dXJuIGNvbnZlcnRJZigvKiogQHR5cGUge2ltcG9ydChcInBocC1wYXJzZXJcIikuSWZ9ICovIChub2RlKSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgaWYgKG5vZGUua2luZCA9PSBcInRocm93XCIpIHJldHVybiBjb252ZXJ0UGhwUmFpc2Uobm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgaWYgKG5vZGUua2luZCA9PSBcInRyeVwiKSByZXR1cm4gY29udmVydFBocFRyeShub2RlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICBpZiAobm9kZS5raW5kID09IFwid2hpbGVcIikgcmV0dXJuIGNvbnZlcnRXaGlsZSgvKiogQHR5cGUge2ltcG9ydChcInBocC1wYXJzZXJcIikuV2hpbGV9ICovIChub2RlKSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgaWYgKG5vZGUua2luZCA9PSBcImZvcmVhY2hcIikgcmV0dXJuIGNvbnZlcnRGb3JFYWNoKC8qKiBAdHlwZSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5Gb3JlYWNofSAqLyAobm9kZSksIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gIGlmIChub2RlLmtpbmQgPT0gXCJicmVha1wiIHx8IG5vZGUua2luZCA9PSBcImNvbnRpbnVlXCIpIHtcbiAgICBjb25zdCBjb250cm9sID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLkJyZWFrIHwgaW1wb3J0KFwicGhwLXBhcnNlclwiKS5Db250aW51ZX0gKi8gKG5vZGUpXG5cbiAgICBpZiAoY29udHJvbC5sZXZlbCkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIGAke25vZGUua2luZH0gbGV2ZWxgLCBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgY29uc3QgbG9jYXRpb24gPSB0b2tlbkxvY2F0aW9uKG5vZGUua2luZCwgbm9kZS5sb2M/LnN0YXJ0Lm9mZnNldCA/PyAwLCBub2RlLmxvYz8uZW5kLm9mZnNldCA/PyBzb3VyY2UubGVuZ3RoLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAga2luZDogLyoqIEB0eXBlIHtcIkJyZWFrU3RhdGVtZW50XCIgfCBcIkNvbnRpbnVlU3RhdGVtZW50XCJ9ICovIChub2RlLmtpbmQgPT0gXCJicmVha1wiID8gXCJCcmVha1N0YXRlbWVudFwiIDogXCJDb250aW51ZVN0YXRlbWVudFwiKSxcbiAgICAgIGxvY2F0aW9uXG4gICAgfSwge2tleXdvcmQ6IGxvY2F0aW9ufSlcbiAgfVxuICBpZiAobm9kZS5raW5kID09IFwiZWNob1wiKSByZXR1cm4gY29udmVydFByaW50KC8qKiBAdHlwZSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5FY2hvfSAqLyAobm9kZSksIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gIGlmIChub2RlLmtpbmQgPT0gXCJleHByZXNzaW9uc3RhdGVtZW50XCIpIHtcbiAgICBjb25zdCBleHByZXNzaW9uID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLkV4cHJlc3Npb25TdGF0ZW1lbnR9ICovIChub2RlKS5leHByZXNzaW9uXG5cbiAgICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiY2FsbFwiKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBleHByZXNzaW9uOiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNhbGxFeHByZXNzaW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuTWV0aG9kQ2FsbEV4cHJlc3Npb259ICovIChcbiAgICAgICAgICBjb252ZXJ0RXhwcmVzc2lvbihleHByZXNzaW9uLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICAgICAgICApLFxuICAgICAgICBraW5kOiBcIkV4cHJlc3Npb25TdGF0ZW1lbnRcIixcbiAgICAgICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjb252ZXJ0TG9jYWxTdGF0ZW1lbnQobm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgfVxuXG4gIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBub2RlLmtpbmQsIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBleGFjdCBgdGhyb3cgbmV3IERlY2xhcmVkRXJyb3IobWVzc2FnZSlgLlxuICogQHBhcmFtIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLk5vZGV9IG5vZGUgLSBQSFAgdGhyb3cgbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge1BocENvbnZlcnNpb25Db250ZXh0fSBjb250ZXh0IC0gVHlwZWQgbGV4aWNhbCBjb250ZXh0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJhaXNlU3RhdGVtZW50fSBTZW1hbnRpYyByYWlzZS5cbiAqL1xuZnVuY3Rpb24gY29udmVydFBocFJhaXNlKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgY29uc3RydWN0aW9uID0gUmVmbGVjdC5nZXQobm9kZSwgXCJ3aGF0XCIpXG5cbiAgaWYgKCFjb25zdHJ1Y3Rpb24gfHwgY29uc3RydWN0aW9uLmtpbmQgIT0gXCJuZXdcIiB8fCBjb25zdHJ1Y3Rpb24ud2hhdD8ua2luZCAhPSBcIm5hbWVcIiB8fFxuICAgIGNvbnN0cnVjdGlvbi53aGF0LnJlc29sdXRpb24gIT0gXCJ1cW5cIiB8fCAhY29udGV4dC5lcnJvck5hbWVzLmhhcyhjb25zdHJ1Y3Rpb24ud2hhdC5uYW1lKSB8fFxuICAgICFBcnJheS5pc0FycmF5KGNvbnN0cnVjdGlvbi5hcmd1bWVudHMpIHx8IGNvbnN0cnVjdGlvbi5hcmd1bWVudHMubGVuZ3RoICE9IDEgfHxcbiAgICBjb25zdHJ1Y3Rpb24uYXJndW1lbnRzWzBdLmtpbmQgPT0gXCJuYW1lZGFyZ3VtZW50XCIgfHwgY29uc3RydWN0aW9uLmFyZ3VtZW50c1swXS5raW5kID09IFwidmFyaWFkaWNcIikge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBcInRocm93IG90aGVyIHRoYW4gZXhhY3QgZGVjbGFyZWQgZXJyb3IgY29uc3RydWN0aW9uXCIsIGxvY2F0aW9uKVxuICB9XG4gIGNvbnN0IGRlY2xhcmF0aW9uID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9ufSAqLyAoY29udGV4dC5lcnJvck5hbWVzLmdldChjb25zdHJ1Y3Rpb24ud2hhdC5uYW1lKSlcbiAgY29uc3QgdHlwZUxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKGNvbnN0cnVjdGlvbi53aGF0LCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICBlcnJvcjogd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBlcnJvcjogd2l0aFBhcnNlclJhbmdlcyh7ZGVjbGFyYXRpb25JZDogLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZWNsYXJhdGlvbi5pZCksIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkVycm9yVHlwZVwiKX0sIHt0eXBlOiB0eXBlTG9jYXRpb259KSxcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkVycm9yQ29uc3RydWN0aW9uXCIpLFxuICAgICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihjb25zdHJ1Y3Rpb24sIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgbWVzc2FnZTogY29udmVydEV4cHJlc3Npb24oY29uc3RydWN0aW9uLmFyZ3VtZW50c1swXSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgICB9LCB7dHlwZTogdHlwZUxvY2F0aW9ufSksXG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUmFpc2VTdGF0ZW1lbnRcIiksXG4gICAgbG9jYXRpb25cbiAgfSwge2tleXdvcmQ6IHRva2VuTG9jYXRpb24oXCJ0aHJvd1wiLCBub2RlLmxvYz8uc3RhcnQub2Zmc2V0ID8/IDAsIGNvbnN0cnVjdGlvbi5sb2M/LnN0YXJ0Lm9mZnNldCA/PyBzb3VyY2UubGVuZ3RoLCBmaWxlbmFtZSwgc291cmNlKX0pXG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIGV4YWN0IHR5cGVkIGNhdGNoIHdpdGggbm8gZmluYWxseS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5Ob2RlfSBub2RlIC0gUEhQIHRyeSBub2RlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7UGhwQ29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnRleHQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHJ5U3RhdGVtZW50fSBTZW1hbnRpYyBleGFjdCBoYW5kbGVyLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0UGhwVHJ5KG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgY2F0Y2hlcyA9IFJlZmxlY3QuZ2V0KG5vZGUsIFwiY2F0Y2hlc1wiKVxuICBjb25zdCBib2R5ID0gUmVmbGVjdC5nZXQobm9kZSwgXCJib2R5XCIpXG5cbiAgaWYgKFJlZmxlY3QuZ2V0KG5vZGUsIFwiYWx3YXlzXCIpIHx8ICFBcnJheS5pc0FycmF5KGNhdGNoZXMpIHx8IGNhdGNoZXMubGVuZ3RoICE9IDEgfHwgYm9keT8ua2luZCAhPSBcImJsb2NrXCIpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgXCJ0cnkgd2l0aG91dCBvbmUgdHlwZWQgY2F0Y2ggYW5kIG5vIGZpbmFsbHlcIiwgbG9jYXRpb24pXG4gIH1cbiAgY29uc3QgaGFuZGxlciA9IGNhdGNoZXNbMF1cbiAgY29uc3QgY2F1Z2h0ID0gaGFuZGxlci53aGF0Py5bMF1cbiAgY29uc3QgYmluZGluZyA9IGhhbmRsZXIudmFyaWFibGVcblxuICBpZiAoaGFuZGxlci53aGF0Py5sZW5ndGggIT0gMSB8fCBjYXVnaHQ/LmtpbmQgIT0gXCJuYW1lXCIgfHwgY2F1Z2h0LnJlc29sdXRpb24gIT0gXCJ1cW5cIiB8fFxuICAgICFjb250ZXh0LmVycm9yTmFtZXMuaGFzKGNhdWdodC5uYW1lKSB8fCBiaW5kaW5nPy5raW5kICE9IFwidmFyaWFibGVcIiB8fCB0eXBlb2YgYmluZGluZy5uYW1lICE9IFwic3RyaW5nXCIgfHxcbiAgICBiaW5kaW5nLmN1cmx5IHx8IGhhbmRsZXIuYm9keT8ua2luZCAhPSBcImJsb2NrXCIpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgXCJicm9hZCwgbXVsdGlwbGUsIG9yIG1hbGZvcm1lZCBjYXRjaFwiLCBub2RlTG9jYXRpb24oaGFuZGxlciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgZGVjbGFyYXRpb24gPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb259ICovIChjb250ZXh0LmVycm9yTmFtZXMuZ2V0KGNhdWdodC5uYW1lKSlcbiAgY29uc3QgY2F1Z2h0TG9jYXRpb24gPSBub2RlTG9jYXRpb24oY2F1Z2h0LCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBjYXRjaFR5cGUgPSB3aXRoUGFyc2VyUmFuZ2VzKHtkZWNsYXJhdGlvbklkOiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGRlY2xhcmF0aW9uLmlkKSwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiRXJyb3JUeXBlXCIpfSwge1xuICAgIHR5cGU6IGNhdWdodExvY2F0aW9uXG4gIH0pXG4gIGNvbnN0IGJvZHlDb250ZXh0ID0gey4uLmNvbnRleHQsIGJpbmRpbmdzOiBuZXcgTWFwKGNvbnRleHQuYmluZGluZ3MpfVxuICBjb25zdCBjYXRjaENvbnRleHQgPSB7Li4uY29udGV4dCwgYmluZGluZ3M6IG5ldyBNYXAoY29udGV4dC5iaW5kaW5ncyl9XG5cbiAgY2F0Y2hDb250ZXh0LmJpbmRpbmdzLnNldChiaW5kaW5nLm5hbWUsIGNhdGNoVHlwZSlcbiAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgIGJvZHk6IGNvbnZlcnRCbG9jayhib2R5LCBmaWxlbmFtZSwgc291cmNlLCBib2R5Q29udGV4dCksXG4gICAgY2F0Y2hCaW5kaW5nOiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkNhdGNoQmluZGluZ1wiKSxcbiAgICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24oYmluZGluZywgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICBtdXRhYmxlOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoZmFsc2UpLFxuICAgICAgbmFtZTogYmluZGluZy5uYW1lLFxuICAgICAgdHlwZTogY2F0Y2hUeXBlXG4gICAgfSwge25hbWU6IG5vZGVMb2NhdGlvbihiaW5kaW5nLCBmaWxlbmFtZSwgc291cmNlKX0pLFxuICAgIGNhdGNoQm9keTogY29udmVydEJsb2NrKGhhbmRsZXIuYm9keSwgZmlsZW5hbWUsIHNvdXJjZSwgY2F0Y2hDb250ZXh0KSxcbiAgICBjYXRjaFR5cGUsXG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiVHJ5U3RhdGVtZW50XCIpLFxuICAgIGxvY2F0aW9uXG4gIH0sIHtjYXRjaDogbm9kZUxvY2F0aW9uKGhhbmRsZXIsIGZpbGVuYW1lLCBzb3VyY2UpLCB0cnk6IHRva2VuTG9jYXRpb24oXCJ0cnlcIiwgbm9kZS5sb2M/LnN0YXJ0Lm9mZnNldCA/PyAwLCBib2R5LmxvYz8uc3RhcnQub2Zmc2V0ID8/IHNvdXJjZS5sZW5ndGgsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBleGFjdCBibG9jay1mb3JtIFBIUCBgZm9yZWFjaCAoJGxpc3QgYXMgJHZhbHVlKWAuXG4gKiBAcGFyYW0ge2ltcG9ydChcInBocC1wYXJzZXJcIikuRm9yZWFjaH0gbm9kZSAtIFBIUCBmb3JlYWNoIG5vZGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtQaHBDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Gb3JFYWNoU3RhdGVtZW50IHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRm9yRWFjaE1hcFN0YXRlbWVudH0gU2VtYW50aWMgbG9vcC5cbiAqL1xuZnVuY3Rpb24gY29udmVydEZvckVhY2gobm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmIChub2RlLnNob3J0Rm9ybSkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwiYWx0ZXJuYXRpdmUgZm9yZWFjaCBzeW50YXhcIiwgbG9jYXRpb24pXG4gIGlmIChub2RlLnZhbHVlLmtpbmQgIT0gXCJ2YXJpYWJsZVwiKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgXCJmb3JlYWNoIGRlc3RydWN0dXJpbmdcIiwgbm9kZUxvY2F0aW9uKG5vZGUudmFsdWUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICBjb25zdCB2YXJpYWJsZSA9IC8qKiBAdHlwZSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5WYXJpYWJsZX0gKi8gKG5vZGUudmFsdWUpXG5cbiAgaWYgKFJlZmxlY3QuZ2V0KHZhcmlhYmxlLCBcImJ5cmVmXCIpID09PSB0cnVlKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgXCJieS1yZWZlcmVuY2UgZm9yZWFjaFwiLCBub2RlTG9jYXRpb24odmFyaWFibGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICBpZiAodHlwZW9mIHZhcmlhYmxlLm5hbWUgIT0gXCJzdHJpbmdcIiB8fCB2YXJpYWJsZS5jdXJseSkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwiZHluYW1pYyBmb3JlYWNoIGJpbmRpbmdcIiwgbm9kZUxvY2F0aW9uKHZhcmlhYmxlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgaWYgKCFub2RlLmJvZHkgfHwgbm9kZS5ib2R5LmtpbmQgIT0gXCJibG9ja1wiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwiZm9yZWFjaCB3aXRob3V0IGJsb2NrIGJvZHlcIiwgbm9kZS5ib2R5ID8gbm9kZUxvY2F0aW9uKG5vZGUuYm9keSwgZmlsZW5hbWUsIHNvdXJjZSkgOiBsb2NhdGlvbilcbiAgfVxuICBjb25zdCBib2R5ID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLkJsb2NrfSAqLyAobm9kZS5ib2R5KVxuICBjb25zdCBjb2xsZWN0aW9uVHlwZSA9IGl0ZXJhdGlvbk9wZXJhbmRUeXBlKGtub3duRXhwcmVzc2lvblR5cGUobm9kZS5zb3VyY2UsIGNvbnRleHQpKVxuXG4gIGlmIChub2RlLmtleSkge1xuICAgIGlmIChub2RlLmtleS5raW5kICE9IFwidmFyaWFibGVcIikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwiZm9yZWFjaCBrZXkgYmluZGluZyBzaGFwZVwiLCBub2RlTG9jYXRpb24obm9kZS5rZXksIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIGNvbnN0IGtleVZhcmlhYmxlID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLlZhcmlhYmxlfSAqLyAobm9kZS5rZXkpXG5cbiAgICBpZiAoUmVmbGVjdC5nZXQoa2V5VmFyaWFibGUsIFwiYnlyZWZcIikgPT09IHRydWUgfHwgdHlwZW9mIGtleVZhcmlhYmxlLm5hbWUgIT0gXCJzdHJpbmdcIiB8fCBrZXlWYXJpYWJsZS5jdXJseSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwiaW52YWxpZCBmb3JlYWNoIGtleSBiaW5kaW5nXCIsIG5vZGVMb2NhdGlvbihrZXlWYXJpYWJsZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIGlmIChjb2xsZWN0aW9uVHlwZT8ua2luZCA9PSBcIk1hcFR5cGVcIikge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwidW5vcmRlcmVkIG1hcCBpdGVyYXRpb25cIiwgbm9kZUxvY2F0aW9uKG5vZGUuc291cmNlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgaWYgKCFjb2xsZWN0aW9uVHlwZSB8fCBjb2xsZWN0aW9uVHlwZS5raW5kICE9IFwiT3JkZXJlZE1hcFR5cGVcIikge1xuICAgICAgcmV0dXJuIG1pc3NpbmdUeXBlKFwicGhwXCIsIFwiT3JkZXJlZCBtYXAgaXRlcmF0aW9uIGNvbGxlY3Rpb25cIiwgbm9kZUxvY2F0aW9uKG5vZGUuc291cmNlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgY29uc3Qga2V5TG9jYXRpb24gPSBub2RlTG9jYXRpb24oa2V5VmFyaWFibGUsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgY29uc3QgdmFsdWVMb2NhdGlvbiA9IG5vZGVMb2NhdGlvbih2YXJpYWJsZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICBjb25zdCBrZXlUeXBlID0gaXRlcmF0aW9uQmluZGluZ1R5cGUoY29sbGVjdGlvblR5cGUua2V5VHlwZSwga2V5TG9jYXRpb24pXG4gICAgY29uc3QgdmFsdWVUeXBlID0gaXRlcmF0aW9uQmluZGluZ1R5cGUoY29sbGVjdGlvblR5cGUudmFsdWVUeXBlLCB2YWx1ZUxvY2F0aW9uKVxuICAgIGNvbnN0IGtleUJpbmRpbmcgPSB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlZhbHVlQmluZGluZ1wiKSwgbG9jYXRpb246IGtleUxvY2F0aW9uLCBtdXRhYmxlOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoZmFsc2UpLFxuICAgICAgbmFtZToga2V5VmFyaWFibGUubmFtZSwgdHlwZToga2V5VHlwZVxuICAgIH0sIHtuYW1lOiBrZXlMb2NhdGlvbn0pXG4gICAgY29uc3QgdmFsdWVCaW5kaW5nID0gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJWYWx1ZUJpbmRpbmdcIiksIGxvY2F0aW9uOiB2YWx1ZUxvY2F0aW9uLCBtdXRhYmxlOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoZmFsc2UpLFxuICAgICAgbmFtZTogdmFyaWFibGUubmFtZSwgdHlwZTogdmFsdWVUeXBlXG4gICAgfSwge25hbWU6IHZhbHVlTG9jYXRpb259KVxuICAgIGNvbnN0IGJvZHlDb250ZXh0ID0gey4uLmNvbnRleHQsIGJpbmRpbmdzOiBuZXcgTWFwKGNvbnRleHQuYmluZGluZ3MpfVxuXG4gICAgYm9keUNvbnRleHQuYmluZGluZ3Muc2V0KGtleVZhcmlhYmxlLm5hbWUsIGtleVR5cGUpXG4gICAgYm9keUNvbnRleHQuYmluZGluZ3Muc2V0KHZhcmlhYmxlLm5hbWUsIHZhbHVlVHlwZSlcbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBib2R5OiBjb252ZXJ0QmxvY2soYm9keSwgZmlsZW5hbWUsIHNvdXJjZSwgYm9keUNvbnRleHQpLFxuICAgICAga2V5QmluZGluZyxcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkZvckVhY2hNYXBTdGF0ZW1lbnRcIiksXG4gICAgICBsb2NhdGlvbixcbiAgICAgIG1hcDogY29udmVydEV4cHJlc3Npb24obm9kZS5zb3VyY2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgICAgdmFsdWVCaW5kaW5nXG4gICAgfSwge29wZXJhdG9yOiB0b2tlbkxvY2F0aW9uKFwiZm9yZWFjaFwiLCBub2RlLmxvYz8uc3RhcnQub2Zmc2V0ID8/IDAsIG5vZGUuc291cmNlLmxvYz8uc3RhcnQub2Zmc2V0ID8/IHNvdXJjZS5sZW5ndGgsXG4gICAgICBmaWxlbmFtZSwgc291cmNlKX0pXG4gIH1cblxuICBpZiAoY29sbGVjdGlvblR5cGU/LmtpbmQgPT0gXCJNYXBUeXBlXCIgfHwgY29sbGVjdGlvblR5cGU/LmtpbmQgPT0gXCJPcmRlcmVkTWFwVHlwZVwiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwibWFwIGl0ZXJhdGlvbiB3aXRob3V0IGtleS92YWx1ZSBwYWlyIGJpbmRpbmdcIiwgbm9kZUxvY2F0aW9uKG5vZGUuc291cmNlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBpZiAoIWNvbGxlY3Rpb25UeXBlIHx8IGNvbGxlY3Rpb25UeXBlLmtpbmQgIT0gXCJMaXN0VHlwZVwiKSB7XG4gICAgcmV0dXJuIG1pc3NpbmdUeXBlKFwicGhwXCIsIFwiSXRlcmF0aW9uIGNvbGxlY3Rpb25cIiwgbm9kZUxvY2F0aW9uKG5vZGUuc291cmNlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBjb25zdCBiaW5kaW5nTG9jYXRpb24gPSBub2RlTG9jYXRpb24odmFyaWFibGUsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IGluZmVycmVkVHlwZSA9IGNvbGxlY3Rpb25UeXBlLmVsZW1lbnRUeXBlXG4gIGNvbnN0IGJpbmRpbmdUeXBlID0gaXRlcmF0aW9uQmluZGluZ1R5cGUoaW5mZXJyZWRUeXBlLCBiaW5kaW5nTG9jYXRpb24pXG4gIGNvbnN0IHZhbHVlQmluZGluZyA9IHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlZhbHVlQmluZGluZ1wiKSxcbiAgICBsb2NhdGlvbjogYmluZGluZ0xvY2F0aW9uLFxuICAgIG11dGFibGU6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChmYWxzZSksXG4gICAgbmFtZTogdmFyaWFibGUubmFtZSxcbiAgICB0eXBlOiBiaW5kaW5nVHlwZVxuICB9LCB7bmFtZTogYmluZGluZ0xvY2F0aW9ufSlcbiAgY29uc3QgYm9keUNvbnRleHQgPSB7Li4uY29udGV4dCwgYmluZGluZ3M6IG5ldyBNYXAoY29udGV4dC5iaW5kaW5ncyl9XG5cbiAgYm9keUNvbnRleHQuYmluZGluZ3Muc2V0KHZhcmlhYmxlLm5hbWUsIGJpbmRpbmdUeXBlKVxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgYm9keTogY29udmVydEJsb2NrKGJvZHksIGZpbGVuYW1lLCBzb3VyY2UsIGJvZHlDb250ZXh0KSxcbiAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJGb3JFYWNoU3RhdGVtZW50XCIpLFxuICAgIGxpc3Q6IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUuc291cmNlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSxcbiAgICBsb2NhdGlvbixcbiAgICB2YWx1ZUJpbmRpbmdcbiAgfSwge29wZXJhdG9yOiB0b2tlbkxvY2F0aW9uKFwiZm9yZWFjaFwiLCBub2RlLmxvYz8uc3RhcnQub2Zmc2V0ID8/IDAsIG5vZGUuc291cmNlLmxvYz8uc3RhcnQub2Zmc2V0ID8/IHNvdXJjZS5sZW5ndGgsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvcmRlcmVkIFBIUCBibG9jayB3aXRoIGl0cyBvd24gYWRhcHRhdGlvbiBzY29wZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5CbG9ja30gbm9kZSAtIFBIUCBwYXJzZXIgYmxvY2suXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtQaHBDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CbG9ja30gU2VtYW50aWMgYmxvY2suXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRCbG9jayhub2RlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSB7XG4gIHJldHVybiB7XG4gICAga2luZDogXCJCbG9ja1wiLFxuICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgc3RhdGVtZW50czogbm9kZS5jaGlsZHJlbi5tYXAoKHN0YXRlbWVudCkgPT4gY29udmVydFN0YXRlbWVudChzdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpKVxuICB9XG59XG5cbi8qKlxuICogUmVxdWlyZXMgYW4gZXhhY3QgUEhQIHNjYWxhciBkZWNsYXJhdGlvbiB0eXBlLlxuICogQHBhcmFtIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLk5vZGUgfCBudWxsfSBzb3VyY2VUeXBlIC0gUEhQIHR5cGUgbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdWJqZWN0IC0gVHlwZWQgc3ViamVjdC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IGxvY2F0aW9uIC0gU291cmNlIGxvY2F0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59IFtyZWNvcmROYW1lc10gLSBOb21pbmFsIGRlY2xhcmF0aW9ucyBieSBzb3VyY2UgbmFtZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1ZhbHVlVHlwZX0gU2VtYW50aWMgdHlwZS5cbiAqL1xuZnVuY3Rpb24gY29udmVydFR5cGUoc291cmNlVHlwZSwgc3ViamVjdCwgbG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIHJlY29yZE5hbWVzID0gbmV3IE1hcCgpKSB7XG4gIGlmICghc291cmNlVHlwZSkgcmV0dXJuIHJlcXVpcmVTb3VyY2VTY2FsYXJUeXBlKFwicGhwXCIsIHVuZGVmaW5lZCwgc3ViamVjdCwgbG9jYXRpb24pXG4gIGlmIChzb3VyY2VUeXBlLmtpbmQgIT0gXCJ0eXBlcmVmZXJlbmNlXCIgJiYgc291cmNlVHlwZS5raW5kICE9IFwibmFtZVwiICYmIHNvdXJjZVR5cGUua2luZCAhPSBcImlkZW50aWZpZXJcIikge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBcInVuc3VwcG9ydGVkIHNjYWxhciB0eXBlXCIsIG5vZGVMb2NhdGlvbihzb3VyY2VUeXBlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuXG4gIGNvbnN0IHR5cGVOYW1lID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLlR5cGVSZWZlcmVuY2UgfCBpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLk5hbWUgfCBpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLklkZW50aWZpZXJ9ICovIChzb3VyY2VUeXBlKS5uYW1lXG5cbiAgY29uc3QgdHlwZUxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKHNvdXJjZVR5cGUsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IGRlY2xhcmF0aW9uID0gcmVjb3JkTmFtZXMuZ2V0KHR5cGVOYW1lKVxuXG4gIGlmIChkZWNsYXJhdGlvbj8uaWQpIHJldHVybiBkZWNsYXJhdGlvbi5raW5kID09IFwiQ2xhc3NEZWNsYXJhdGlvblwiXG4gICAgPyByZWZlcmVuY2VUeXBlKGRlY2xhcmF0aW9uLmlkLCB0eXBlTG9jYXRpb24pXG4gICAgOiBkZWNsYXJhdGlvbi5raW5kID09IFwiRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvblwiXG4gICAgICA/IG93bmVkUmVzb3VyY2VUeXBlKGRlY2xhcmF0aW9uLmlkLCB0eXBlTG9jYXRpb24pXG4gICAgICA6IHJlY29yZFR5cGUoZGVjbGFyYXRpb24uaWQsIHR5cGVMb2NhdGlvbilcblxuICByZXR1cm4gcmVxdWlyZVNvdXJjZVNjYWxhclR5cGUoXCJwaHBcIiwgdHlwZU5hbWUsIHN1YmplY3QsIGxvY2F0aW9uLCB0eXBlTG9jYXRpb24pXG59XG5cbi8qKlxuICogUmVhZHMgdGhlIGV4YWN0IFBIUERvYyBjb250YWluZXIgc2lnbmF0dXJlIGF0dGFjaGVkIHRvIG9uZSBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5GdW5jdGlvbn0gbm9kZSAtIEZ1bmN0aW9uIGRlY2xhcmF0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3duZXJJZF0gLSBTdGFibGUgZGVjbGFyYXRpb24gaWRlbnRpdHkuXG4gKiBAcmV0dXJucyB7e3BhcmFtZXRlcnM6IE1hcDxzdHJpbmcsIHtsb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIHNvdXJjZVR5cGU6IHN0cmluZ30+LCByZXR1cm5UeXBlOiB7bG9jYXRpb246IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCBzb3VyY2VUeXBlOiBzdHJpbmd9IHwgdW5kZWZpbmVkLCB0eXBlUGFyYW1ldGVycz86IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlR5cGVQYXJhbWV0ZXJbXX19IERvY3VtZW50ZWQgdHlwZXMuXG4gKi9cbmZ1bmN0aW9uIGZ1bmN0aW9uRG9jdW1lbnRlZFR5cGVzKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIG93bmVySWQpIHtcbiAgY29uc3QgY29tbWVudCA9IG5vZGUubGVhZGluZ0NvbW1lbnRzPy5hdCgtMSlcblxuICBpZiAoIWNvbW1lbnQgfHwgY29tbWVudC5raW5kICE9IFwiY29tbWVudGJsb2NrXCIgfHwgIWNvbW1lbnQubG9jIHx8ICFub2RlLmxvYyB8fFxuICAgICEvXlxccyokL3UudGVzdChzb3VyY2Uuc2xpY2UoY29tbWVudC5sb2MuZW5kLm9mZnNldCwgbm9kZS5sb2Muc3RhcnQub2Zmc2V0KSkpIHJldHVybiB7cGFyYW1ldGVyczogbmV3IE1hcCgpLCByZXR1cm5UeXBlOiB1bmRlZmluZWR9XG4gIGNvbnN0IGJsb2NrID0gcGFyc2VDb21tZW50KGNvbW1lbnQudmFsdWUpWzBdXG4gIGNvbnN0IHRhZ3MgPSBibG9jaz8udGFncyA/PyBbXVxuICBjb25zdCBwYXJhbWV0ZXJUYWdzID0gdGFncy5maWx0ZXIoKHRhZykgPT4gdGFnLnRhZyA9PSBcInBhcmFtXCIpXG4gIGNvbnN0IHJldHVyblRhZ3MgPSB0YWdzLmZpbHRlcigodGFnKSA9PiB0YWcudGFnID09IFwicmV0dXJuXCIgfHwgdGFnLnRhZyA9PSBcInJldHVybnNcIilcbiAgY29uc3QgdGVtcGxhdGVUYWdzID0gdGFncy5maWx0ZXIoKHRhZykgPT4gdGFnLnRhZyA9PSBcInRlbXBsYXRlXCIpXG4gIGNvbnN0IG1hbGZvcm1lZFRlbXBsYXRlID0gdGFncy5maW5kKCh0YWcpID0+IHRhZy50YWcuc3RhcnRzV2l0aChcInRlbXBsYXRlXCIpICYmIHRhZy50YWcgIT0gXCJ0ZW1wbGF0ZVwiKVxuICBjb25zdCBtYWxmb3JtZWQgPSB0YWdzLnNvbWUoKHRhZykgPT4gIVtcInBhcmFtXCIsIFwicmV0dXJuXCIsIFwicmV0dXJuc1wiLCBcInRlbXBsYXRlXCJdLmluY2x1ZGVzKHRhZy50YWcpKSB8fCByZXR1cm5UYWdzLmxlbmd0aCA+IDEgfHxcbiAgICBwYXJhbWV0ZXJUYWdzLnNvbWUoKHRhZykgPT4gdGFnLnR5cGUgIT0gXCJcIiB8fCAhL15cXCRbQS1aYS16X11bQS1aYS16MC05X10qJC91LnRlc3QodGFnLmRlc2NyaXB0aW9uKSkgfHxcbiAgICByZXR1cm5UYWdzLnNvbWUoKHRhZykgPT4gdGFnLnR5cGUgIT0gXCJcIiB8fCB0YWcuZGVzY3JpcHRpb24gIT0gXCJcIikgfHwgbWFsZm9ybWVkVGVtcGxhdGUgfHxcbiAgICB0ZW1wbGF0ZVRhZ3Muc29tZSgodGFnKSA9PiAhL15bQS1aYS16X11bQS1aYS16MC05X10qJC91LnRlc3QodGFnLm5hbWUpIHx8IHRhZy50eXBlICE9IFwiXCIgfHwgdGFnLmRlc2NyaXB0aW9uICE9IFwiXCIpIHx8XG4gICAgdGVtcGxhdGVUYWdzLmxlbmd0aCA+IDAgJiYgIW93bmVySWRcblxuICBpZiAobWFsZm9ybWVkKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgXCJtYWxmb3JtZWQgZnVuY3Rpb24gdHlwZSBhbm5vdGF0aW9uXCIsIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3QgcGFyYW1ldGVycyA9IG5ldyBNYXAocGFyYW1ldGVyVGFncy5tYXAoKHRhZykgPT4gW3RhZy5kZXNjcmlwdGlvbi5zbGljZSgxKSwge1xuICAgIGxvY2F0aW9uOiBjb21tZW50VGFnTG9jYXRpb24oY29tbWVudCwgdGFnLCBcIm5hbWVcIiwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgc291cmNlVHlwZTogdGFnLm5hbWVcbiAgfV0pKVxuXG4gIGlmIChwYXJhbWV0ZXJzLnNpemUgIT0gcGFyYW1ldGVyVGFncy5sZW5ndGgpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgXCJkdXBsaWNhdGUgcGFyYW1ldGVyIGFubm90YXRpb25cIiwgbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGNvbnN0IHJldHVyblRhZyA9IHJldHVyblRhZ3NbMF1cbiAgY29uc3QgdHlwZVBhcmFtZXRlcnMgPSB0ZW1wbGF0ZVRhZ3MubWFwKCh0YWcsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgbG9jYXRpb24gPSBjb21tZW50VGFnTG9jYXRpb24oY29tbWVudCwgdGFnLCBcIm5hbWVcIiwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtpZDogYCR7b3duZXJJZH06dHlwZToke2luZGV4fWAsIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlR5cGVQYXJhbWV0ZXJcIiksIGxvY2F0aW9uLCBuYW1lOiB0YWcubmFtZX0sIHtuYW1lOiBsb2NhdGlvbn0pXG4gIH0pXG5cbiAgcmV0dXJuIHtcbiAgICBwYXJhbWV0ZXJzLFxuICAgIHJldHVyblR5cGU6IHJldHVyblRhZyA/IHtcbiAgICAgIGxvY2F0aW9uOiBjb21tZW50VGFnTG9jYXRpb24oY29tbWVudCwgcmV0dXJuVGFnLCBcIm5hbWVcIiwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICBzb3VyY2VUeXBlOiByZXR1cm5UYWcubmFtZVxuICAgIH0gOiB1bmRlZmluZWQsXG4gICAgLi4uKHR5cGVQYXJhbWV0ZXJzLmxlbmd0aCA+IDAgPyB7dHlwZVBhcmFtZXRlcnN9IDoge30pXG4gIH1cbn1cblxuLyoqXG4gKiBSZWFkcyBhbiBvcHRpb25hbCBleGFjdCBjbGFzcy1sZXZlbCBQSFBEb2MgdGVtcGxhdGUgbGlzdC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5DbGFzc30gbm9kZSAtIENsYXNzIGRlY2xhcmF0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IG93bmVySWQgLSBTdGFibGUgcmVjb3JkIGlkZW50aXR5LlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UeXBlUGFyYW1ldGVyW10gfCB1bmRlZmluZWR9IE9yZGVyZWQgcGFyYW1ldGVycy5cbiAqL1xuZnVuY3Rpb24gY2xhc3NEb2N1bWVudGVkVHlwZVBhcmFtZXRlcnMobm9kZSwgb3duZXJJZCwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBjb25zdCBkb2N1bWVudGVkID0gZnVuY3Rpb25Eb2N1bWVudGVkVHlwZXMoXG4gICAgLyoqIEB0eXBlIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLkZ1bmN0aW9ufSAqLyAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyAobm9kZSkpLCBmaWxlbmFtZSwgc291cmNlLCBvd25lcklkKVxuXG4gIGlmIChkb2N1bWVudGVkLnBhcmFtZXRlcnMuc2l6ZSB8fCBkb2N1bWVudGVkLnJldHVyblR5cGUpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgXCJmdW5jdGlvbiB0eXBlIGFubm90YXRpb24gb24gcmVjb3JkIGRlY2xhcmF0aW9uXCIsIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuXG4gIHJldHVybiBkb2N1bWVudGVkLnR5cGVQYXJhbWV0ZXJzXG59XG5cbi8qKlxuICogUmV0dXJucyBhIG5hdGl2ZSBQSFAgdHlwZSBuYW1lIGZyb20gb25lIHN1cHBvcnRlZCBwYXJzZXIgbm9kZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5Ob2RlIHwgbnVsbH0gdHlwZSAtIE5hdGl2ZSB0eXBlIG5vZGUuXG4gKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfSBUeXBlIG5hbWUuXG4gKi9cbmZ1bmN0aW9uIHBocFR5cGVOYW1lKHR5cGUpIHtcbiAgaWYgKCF0eXBlIHx8ICFbXCJ0eXBlcmVmZXJlbmNlXCIsIFwibmFtZVwiLCBcImlkZW50aWZpZXJcIl0uaW5jbHVkZXModHlwZS5raW5kKSkgcmV0dXJuIHVuZGVmaW5lZFxuXG4gIHJldHVybiAvKiogQHR5cGUge2ltcG9ydChcInBocC1wYXJzZXJcIikuVHlwZVJlZmVyZW5jZSB8IGltcG9ydChcInBocC1wYXJzZXJcIikuTmFtZSB8IGltcG9ydChcInBocC1wYXJzZXJcIikuSWRlbnRpZmllcn0gKi8gKHR5cGUpLm5hbWVcbn1cblxuLyoqXG4gKiBXcmFwcyBvbmUgcGFyc2VyLWRlY2xhcmVkIGNhbm9uaWNhbCBQSFAgbnVsbGFibGUgdHlwZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNWYWx1ZVR5cGV9IHZhbHVlVHlwZSAtIFByZXNlbnQtdmFsdWUgc2VtYW50aWMgdHlwZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5Ob2RlfSBzb3VyY2VUeXBlIC0gTmF0aXZlIHBhcnNlciB0eXBlIG5vZGUuXG4gKiBAcGFyYW0ge251bWJlcn0gb3duZXJTdGFydCAtIEVhcmxpZXN0IG93bmluZyBwYXJzZXIgb2Zmc2V0LlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5PcHRpb25hbFR5cGV9IE9wdGlvbmFsIHNlbWFudGljIHR5cGUuXG4gKi9cbmZ1bmN0aW9uIG51bGxhYmxlVHlwZSh2YWx1ZVR5cGUsIHNvdXJjZVR5cGUsIG93bmVyU3RhcnQsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgaWYgKCFzb3VyY2VUeXBlLmxvYykgdGhyb3cgbmV3IEVycm9yKFwiUEhQIHBhcnNlciBvbWl0dGVkIG51bGxhYmxlIHR5cGUgbG9jYXRpb24uXCIpXG4gIGNvbnN0IHZhbHVlTG9jYXRpb24gPSBub2RlTG9jYXRpb24oc291cmNlVHlwZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgbWFya2VyID0gdG9rZW5Mb2NhdGlvbihcIj9cIiwgb3duZXJTdGFydCwgc291cmNlVHlwZS5sb2Muc3RhcnQub2Zmc2V0LCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmIChtYXJrZXIuZW5kLm9mZnNldCAhPSB2YWx1ZUxvY2F0aW9uLnN0YXJ0Lm9mZnNldCkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBcIm5vbmNhbm9uaWNhbCBudWxsYWJsZSB0eXBlXCIsIG1hcmtlcilcbiAgfVxuXG4gIHJldHVybiBvcHRpb25hbFR5cGUoXG4gICAgdmFsdWVUeXBlLFxuICAgIGxvY2F0aW9uRnJvbU9mZnNldHMoZmlsZW5hbWUsIHNvdXJjZSwgbWFya2VyLnN0YXJ0Lm9mZnNldCwgdmFsdWVMb2NhdGlvbi5lbmQub2Zmc2V0KSxcbiAgICB2YWx1ZUxvY2F0aW9uXG4gIClcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgZXhwbGljaXQgUEhQIGZ1bmN0aW9uIHJldHVybiB0eXBlLlxuICogQHBhcmFtIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLk5vZGUgfCBudWxsfSBzb3VyY2VUeXBlIC0gUEhQIHJldHVybiB0eXBlIG5vZGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3ViamVjdCAtIFR5cGVkIGZ1bmN0aW9uIHJldHVybi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IGxvY2F0aW9uIC0gRnVuY3Rpb24gbG9jYXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uPn0gW3JlY29yZE5hbWVzXSAtIE5vbWluYWwgZGVjbGFyYXRpb25zIGJ5IHNvdXJjZSBuYW1lLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljRnVuY3Rpb25SZXR1cm5UeXBlfSBTZW1hbnRpYyByZXR1cm4gdHlwZS5cbiAqL1xuZnVuY3Rpb24gY29udmVydFJldHVyblR5cGUoc291cmNlVHlwZSwgc3ViamVjdCwgbG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIHJlY29yZE5hbWVzID0gbmV3IE1hcCgpKSB7XG4gIGlmICghc291cmNlVHlwZSkgcmV0dXJuIHJlcXVpcmVTb3VyY2VSZXR1cm5UeXBlKFwicGhwXCIsIHVuZGVmaW5lZCwgc3ViamVjdCwgbG9jYXRpb24pXG4gIGlmIChzb3VyY2VUeXBlLmtpbmQgIT0gXCJ0eXBlcmVmZXJlbmNlXCIgJiYgc291cmNlVHlwZS5raW5kICE9IFwibmFtZVwiICYmIHNvdXJjZVR5cGUua2luZCAhPSBcImlkZW50aWZpZXJcIikge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBcInVuc3VwcG9ydGVkIHJldHVybiB0eXBlXCIsIG5vZGVMb2NhdGlvbihzb3VyY2VUeXBlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBjb25zdCB0eXBlTmFtZSA9IC8qKiBAdHlwZSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5UeXBlUmVmZXJlbmNlIHwgaW1wb3J0KFwicGhwLXBhcnNlclwiKS5OYW1lIHwgaW1wb3J0KFwicGhwLXBhcnNlclwiKS5JZGVudGlmaWVyfSAqLyAoc291cmNlVHlwZSkubmFtZVxuICBjb25zdCBkZWNsYXJhdGlvbiA9IHJlY29yZE5hbWVzLmdldCh0eXBlTmFtZSlcblxuICBpZiAoZGVjbGFyYXRpb24/LmlkKSByZXR1cm4gZGVjbGFyYXRpb24ua2luZCA9PSBcIkNsYXNzRGVjbGFyYXRpb25cIlxuICAgID8gcmVmZXJlbmNlVHlwZShkZWNsYXJhdGlvbi5pZCwgbm9kZUxvY2F0aW9uKHNvdXJjZVR5cGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIDogZGVjbGFyYXRpb24ua2luZCA9PSBcIkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb25cIlxuICAgICAgPyBvd25lZFJlc291cmNlVHlwZShkZWNsYXJhdGlvbi5pZCwgbm9kZUxvY2F0aW9uKHNvdXJjZVR5cGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgOiByZWNvcmRUeXBlKGRlY2xhcmF0aW9uLmlkLCBub2RlTG9jYXRpb24oc291cmNlVHlwZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG5cbiAgcmV0dXJuIHJlcXVpcmVTb3VyY2VSZXR1cm5UeXBlKFwicGhwXCIsIHR5cGVOYW1lLCBzdWJqZWN0LCBsb2NhdGlvbiwgbm9kZUxvY2F0aW9uKHNvdXJjZVR5cGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxufVxuXG4vKipcbiAqIENvbnZlcnRzIHRoZSBleHBsaWNpdCB0eXBlIHNpZ25hdHVyZSBvZiBvbmUgUEhQIGZ1bmN0aW9uIGJlZm9yZSBhbnkgYm9keSBleHByZXNzaW9ucy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5GdW5jdGlvbn0gbm9kZSAtIFBIUCBmdW5jdGlvbiBub2RlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59IHJlY29yZE5hbWVzIC0gTm9taW5hbCBkZWNsYXJhdGlvbnMgYnkgc291cmNlIG5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gb3duZXJJZCAtIFN0YWJsZSBmdW5jdGlvbiBpZGVudGl0eS5cbiAqIEByZXR1cm5zIHtQaHBGdW5jdGlvblNpZ25hdHVyZX0gVHlwZWQgZnVuY3Rpb24gc2lnbmF0dXJlLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0RnVuY3Rpb25TaWduYXR1cmUobm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMsIG93bmVySWQpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgbmFtZSA9IHR5cGVvZiBub2RlLm5hbWUgPT0gXCJzdHJpbmdcIiA/IG5vZGUubmFtZSA6IG5vZGUubmFtZS5uYW1lXG5cbiAgaWYgKCFub2RlLmJvZHkpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgXCJmdW5jdGlvbiBib2R5XCIsIGxvY2F0aW9uKVxuICB9XG5cbiAgY29uc3QgZG9jdW1lbnRlZCA9IGZ1bmN0aW9uRG9jdW1lbnRlZFR5cGVzKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIG93bmVySWQpXG4gIGNvbnN0IHR5cGVQYXJhbWV0ZXJOYW1lcyA9IG5ldyBNYXAoKGRvY3VtZW50ZWQudHlwZVBhcmFtZXRlcnMgPz8gW10pLm1hcCgocGFyYW1ldGVyKSA9PiBbcGFyYW1ldGVyLm5hbWUsIHBhcmFtZXRlcl0pKVxuICBjb25zdCBwYXJhbWV0ZXJzID0gbm9kZS5hcmd1bWVudHMubWFwKChwYXJhbWV0ZXIpID0+IHtcbiAgICBjb25zdCBwYXJhbWV0ZXJMb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihwYXJhbWV0ZXIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgY29uc3QgcGFyYW1ldGVyTmFtZSA9IHR5cGVvZiBwYXJhbWV0ZXIubmFtZSA9PSBcInN0cmluZ1wiID8gcGFyYW1ldGVyLm5hbWUgOiBwYXJhbWV0ZXIubmFtZS5uYW1lXG5cbiAgICBpZiAocGFyYW1ldGVyLmJ5cmVmKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgXCJieS1yZWZlcmVuY2UgcGFyYW1ldGVyXCIsIHBhcmFtZXRlckxvY2F0aW9uKVxuICAgIGlmIChwYXJhbWV0ZXIudmFyaWFkaWMpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBcInZhcmlhZGljIHBhcmFtZXRlclwiLCBwYXJhbWV0ZXJMb2NhdGlvbilcbiAgICBpZiAocGFyYW1ldGVyLnZhbHVlKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgXCJkZWZhdWx0IHBhcmFtZXRlclwiLCBwYXJhbWV0ZXJMb2NhdGlvbilcbiAgICBjb25zdCBwYXJhbWV0ZXJOb2RlID0gdHlwZW9mIHBhcmFtZXRlci5uYW1lID09IFwic3RyaW5nXCIgPyBwYXJhbWV0ZXIgOiBwYXJhbWV0ZXIubmFtZVxuICAgIGNvbnN0IGRvY3VtZW50ZWRUeXBlID0gZG9jdW1lbnRlZC5wYXJhbWV0ZXJzLmdldChwYXJhbWV0ZXJOYW1lKVxuICAgIGNvbnN0IG5hdGl2ZVR5cGUgPSBwaHBUeXBlTmFtZShwYXJhbWV0ZXIudHlwZSlcblxuICAgIGxldCBwYXJhbWV0ZXJUeXBlID0gZG9jdW1lbnRlZFR5cGVcbiAgICAgID8gZG9jdW1lbnRlZFZhbHVlVHlwZSh7bGFuZ3VhZ2U6IFwicGhwXCIsIGxvY2F0aW9uOiBkb2N1bWVudGVkVHlwZS5sb2NhdGlvbiwgb3duZXJMb2NhdGlvbjogcGFyYW1ldGVyTG9jYXRpb24sIHNvdXJjZSxcbiAgICAgICAgcmVjb3JkczogcmVjb3JkTmFtZXMsIHNvdXJjZVR5cGU6IGRvY3VtZW50ZWRUeXBlLnNvdXJjZVR5cGUsIHN1YmplY3Q6IGBQYXJhbWV0ZXIgJyR7cGFyYW1ldGVyTmFtZX0nYCwgdHlwZVBhcmFtZXRlcnM6IHR5cGVQYXJhbWV0ZXJOYW1lc30pXG4gICAgICA6IGNvbnZlcnRUeXBlKHBhcmFtZXRlci50eXBlLCBgUGFyYW1ldGVyICcke3BhcmFtZXRlck5hbWV9J2AsIHBhcmFtZXRlckxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcylcblxuICAgIGlmIChuYXRpdmVUeXBlID09IFwiYXJyYXlcIiAmJiAhZG9jdW1lbnRlZFR5cGUpIHJldHVybiBtaXNzaW5nVHlwZShcInBocFwiLCBgUGFyYW1ldGVyICcke3BhcmFtZXRlck5hbWV9J2AsIHBhcmFtZXRlckxvY2F0aW9uKVxuICAgIGlmIChkb2N1bWVudGVkVHlwZSAmJiAhcGhwRG9jdW1lbnRlZE5hdGl2ZVR5cGVNYXRjaGVzKG5hdGl2ZVR5cGUsIHBhcmFtZXRlci5udWxsYWJsZSwgcGFyYW1ldGVyVHlwZSwgcmVjb3JkTmFtZXMpKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgXCJkb2N1bWVudGVkIHBhcmFtZXRlciB0eXBlIGluY29tcGF0aWJsZSB3aXRoIG5hdGl2ZSB0eXBlXCIsIGRvY3VtZW50ZWRUeXBlLmxvY2F0aW9uKVxuICAgIH1cblxuICAgIGlmIChwYXJhbWV0ZXIubnVsbGFibGUgJiYgcGFyYW1ldGVyVHlwZS5raW5kICE9IFwiT3B0aW9uYWxUeXBlXCIpIHtcbiAgICAgIGlmICghcGFyYW1ldGVyLnR5cGUpIHJldHVybiBtaXNzaW5nVHlwZShcInBocFwiLCBgUGFyYW1ldGVyICcke3BhcmFtZXRlck5hbWV9J2AsIHBhcmFtZXRlckxvY2F0aW9uKVxuICAgICAgcGFyYW1ldGVyVHlwZSA9IG51bGxhYmxlVHlwZShwYXJhbWV0ZXJUeXBlLCBwYXJhbWV0ZXIudHlwZSwgcGFyYW1ldGVyLmxvYz8uc3RhcnQub2Zmc2V0ID8/IDAsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgfSBlbHNlIGlmICghcGFyYW1ldGVyLm51bGxhYmxlICYmIHBhcmFtZXRlclR5cGUua2luZCA9PSBcIk9wdGlvbmFsVHlwZVwiICYmXG4gICAgICBwYXJhbWV0ZXJUeXBlLnZhbHVlVHlwZS5raW5kICE9IFwiVHlwZVZhcmlhYmxlUmVmZXJlbmNlXCIpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBcIm9wdGlvbmFsIGFubm90YXRpb24gd2l0aG91dCBudWxsYWJsZSBuYXRpdmUgdHlwZVwiLCBkb2N1bWVudGVkVHlwZT8ubG9jYXRpb24gPz8gcGFyYW1ldGVyTG9jYXRpb24pXG4gICAgfVxuICAgIGNvbnN0IHNlbWFudGljUGFyYW1ldGVyID0ge1xuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUGFyYW1ldGVyXCIpLFxuICAgICAgbG9jYXRpb246IHBhcmFtZXRlckxvY2F0aW9uLFxuICAgICAgbmFtZTogcGFyYW1ldGVyTmFtZSxcbiAgICAgIHR5cGU6IHBhcmFtZXRlclR5cGVcbiAgICB9XG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyhzZW1hbnRpY1BhcmFtZXRlciwge25hbWU6IG5vZGVMb2NhdGlvbihwYXJhbWV0ZXJOb2RlLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gIH0pXG4gIGNvbnN0IGV4dHJhRG9jdW1lbnRlZFBhcmFtZXRlciA9IFsuLi5kb2N1bWVudGVkLnBhcmFtZXRlcnMua2V5cygpXS5maW5kKChuYW1lKSA9PlxuICAgICFub2RlLmFyZ3VtZW50cy5zb21lKChwYXJhbWV0ZXIpID0+ICh0eXBlb2YgcGFyYW1ldGVyLm5hbWUgPT0gXCJzdHJpbmdcIiA/IHBhcmFtZXRlci5uYW1lIDogcGFyYW1ldGVyLm5hbWUubmFtZSkgPT0gbmFtZSkpXG5cbiAgaWYgKGV4dHJhRG9jdW1lbnRlZFBhcmFtZXRlcikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIGBhbm5vdGF0aW9uIGZvciB1bmtub3duIHBhcmFtZXRlciAnJHtleHRyYURvY3VtZW50ZWRQYXJhbWV0ZXJ9J2AsIGxvY2F0aW9uKVxuICBpZiAobm9kZS5ieXJlZikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwiYnktcmVmZXJlbmNlIHJldHVyblwiLCBsb2NhdGlvbilcbiAgY29uc3QgbmFtZU5vZGUgPSB0eXBlb2Ygbm9kZS5uYW1lID09IFwic3RyaW5nXCIgPyBub2RlIDogbm9kZS5uYW1lXG4gIGNvbnN0IG5hdGl2ZVJldHVyblR5cGUgPSBwaHBUeXBlTmFtZShub2RlLnR5cGUpXG4gIGxldCByZXR1cm5UeXBlXG5cbiAgaWYgKGRvY3VtZW50ZWQucmV0dXJuVHlwZSkge1xuICAgIHJldHVyblR5cGUgPSBkb2N1bWVudGVkVmFsdWVUeXBlKHtsYW5ndWFnZTogXCJwaHBcIiwgbG9jYXRpb246IGRvY3VtZW50ZWQucmV0dXJuVHlwZS5sb2NhdGlvbiwgb3duZXJMb2NhdGlvbjogbG9jYXRpb24sIHNvdXJjZSxcbiAgICAgIHJlY29yZHM6IHJlY29yZE5hbWVzLCBzb3VyY2VUeXBlOiBkb2N1bWVudGVkLnJldHVyblR5cGUuc291cmNlVHlwZSwgc3ViamVjdDogYEZ1bmN0aW9uICcke25hbWV9JyByZXR1cm5gLCB0eXBlUGFyYW1ldGVyczogdHlwZVBhcmFtZXRlck5hbWVzfSlcbiAgICBpZiAoIXBocERvY3VtZW50ZWROYXRpdmVUeXBlTWF0Y2hlcyhuYXRpdmVSZXR1cm5UeXBlLCBub2RlLm51bGxhYmxlLCByZXR1cm5UeXBlLCByZWNvcmROYW1lcykpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBcImRvY3VtZW50ZWQgcmV0dXJuIHR5cGUgaW5jb21wYXRpYmxlIHdpdGggbmF0aXZlIHR5cGVcIiwgZG9jdW1lbnRlZC5yZXR1cm5UeXBlLmxvY2F0aW9uKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAobmF0aXZlUmV0dXJuVHlwZSA9PSBcImFycmF5XCIpIHJldHVybiBtaXNzaW5nVHlwZShcInBocFwiLCBgRnVuY3Rpb24gJyR7bmFtZX0nIHJldHVybmAsIGxvY2F0aW9uKVxuICAgIHJldHVyblR5cGUgPSBjb252ZXJ0UmV0dXJuVHlwZShub2RlLnR5cGUsIGBGdW5jdGlvbiAnJHtuYW1lfScgcmV0dXJuYCwgbG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIHJlY29yZE5hbWVzKVxuICB9XG4gIGlmIChub2RlLm51bGxhYmxlICYmIHJldHVyblR5cGUua2luZCAhPSBcIk9wdGlvbmFsVHlwZVwiKSB7XG4gICAgaWYgKCFub2RlLnR5cGUpIHJldHVybiBtaXNzaW5nVHlwZShcInBocFwiLCBgRnVuY3Rpb24gJyR7bmFtZX0nIHJldHVybmAsIGxvY2F0aW9uKVxuICAgIGNvbnN0IHR5cGVTdGFydCA9IG5vZGUudHlwZS5sb2M/LnN0YXJ0Lm9mZnNldCA/PyAwXG5cbiAgICByZXR1cm5UeXBlID0gbnVsbGFibGVUeXBlKFxuICAgICAgLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1ZhbHVlVHlwZX0gKi8gKHJldHVyblR5cGUpLFxuICAgICAgbm9kZS50eXBlLFxuICAgICAgTWF0aC5tYXgobm9kZS5sb2M/LnN0YXJ0Lm9mZnNldCA/PyAwLCB0eXBlU3RhcnQgLSAyKSxcbiAgICAgIGZpbGVuYW1lLFxuICAgICAgc291cmNlXG4gICAgKVxuICB9IGVsc2UgaWYgKCFub2RlLm51bGxhYmxlICYmIHJldHVyblR5cGUua2luZCA9PSBcIk9wdGlvbmFsVHlwZVwiICYmXG4gICAgcmV0dXJuVHlwZS52YWx1ZVR5cGUua2luZCAhPSBcIlR5cGVWYXJpYWJsZVJlZmVyZW5jZVwiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwib3B0aW9uYWwgYW5ub3RhdGlvbiB3aXRob3V0IG51bGxhYmxlIG5hdGl2ZSByZXR1cm4gdHlwZVwiLCBkb2N1bWVudGVkLnJldHVyblR5cGU/LmxvY2F0aW9uID8/IGxvY2F0aW9uKVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBsb2NhdGlvbixcbiAgICBuYW1lLFxuICAgIG5hbWVMb2NhdGlvbjogbm9kZUxvY2F0aW9uKG5hbWVOb2RlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICBwYXJhbWV0ZXJzLFxuICAgIHJldHVyblR5cGUsXG4gICAgLi4uKGRvY3VtZW50ZWQudHlwZVBhcmFtZXRlcnMgPyB7dHlwZVBhcmFtZXRlcnM6IGRvY3VtZW50ZWQudHlwZVBhcmFtZXRlcnN9IDoge30pXG4gIH1cbn1cblxuLyoqXG4gKiBDaGVja3MgdGhlIGV4YWN0IHJ1bnRpbWUgY2FycmllciBwZXJtaXR0ZWQgYmVzaWRlIGEgcHJlY2lzZSBQSFBEb2MgdHlwZS5cbiAqIEBwYXJhbSB7c3RyaW5nIHwgdW5kZWZpbmVkfSBuYXRpdmVUeXBlIC0gTmF0aXZlIFBIUCB0eXBlIG5hbWUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IG5hdGl2ZU51bGxhYmxlIC0gV2hldGhlciB0aGUgbmF0aXZlIGNhcnJpZXIgaGFzIFBIUCdzIG51bGxhYmxlIG1hcmtlci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNWYWx1ZVR5cGV9IGRvY3VtZW50ZWRUeXBlIC0gRXhhY3Qgc2VtYW50aWMgZG9jdW1lbnQgdHlwZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59IHJlY29yZHMgLSBWaXNpYmxlIG5vbWluYWwgZGVjbGFyYXRpb25zIGJ5IG5hbWUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGUgbmF0aXZlIGNhcnJpZXIgYWdyZWVzIHdpdGhvdXQgY2hhbmdpbmcgbWVhbmluZy5cbiAqL1xuZnVuY3Rpb24gcGhwRG9jdW1lbnRlZE5hdGl2ZVR5cGVNYXRjaGVzKG5hdGl2ZVR5cGUsIG5hdGl2ZU51bGxhYmxlLCBkb2N1bWVudGVkVHlwZSwgcmVjb3Jkcykge1xuICBpZiAoZG9jdW1lbnRlZFR5cGUua2luZCA9PSBcIk9wdGlvbmFsVHlwZVwiKSB7XG4gICAgaWYgKGRvY3VtZW50ZWRUeXBlLnZhbHVlVHlwZS5raW5kID09IFwiVHlwZVZhcmlhYmxlUmVmZXJlbmNlXCIpIHtcbiAgICAgIHJldHVybiBuYXRpdmVUeXBlID09PSB1bmRlZmluZWQgJiYgIW5hdGl2ZU51bGxhYmxlXG4gICAgfVxuXG4gICAgcmV0dXJuIG5hdGl2ZU51bGxhYmxlICYmIHBocERvY3VtZW50ZWROYXRpdmVUeXBlTWF0Y2hlcyhuYXRpdmVUeXBlLCBmYWxzZSwgZG9jdW1lbnRlZFR5cGUudmFsdWVUeXBlLCByZWNvcmRzKVxuICB9XG4gIGlmIChuYXRpdmVOdWxsYWJsZSkgcmV0dXJuIGZhbHNlXG4gIGlmIChkb2N1bWVudGVkVHlwZS5raW5kID09IFwiVHlwZVZhcmlhYmxlUmVmZXJlbmNlXCIpIHJldHVybiBuYXRpdmVUeXBlID09PSB1bmRlZmluZWRcbiAgaWYgKGRvY3VtZW50ZWRUeXBlLmtpbmQgPT0gXCJUeXBlUmVmZXJlbmNlXCIpIHtcbiAgICByZXR1cm4gbmF0aXZlVHlwZSAhPT0gdW5kZWZpbmVkICYmIHNvdXJjZVNjYWxhclR5cGUoXCJwaHBcIiwgbmF0aXZlVHlwZSk/Lm5hbWUgPT0gZG9jdW1lbnRlZFR5cGUubmFtZVxuICB9XG4gIGlmIChkb2N1bWVudGVkVHlwZS5raW5kID09IFwiTGlzdFR5cGVcIiB8fCBkb2N1bWVudGVkVHlwZS5raW5kID09IFwiTWFwVHlwZVwiIHx8IGRvY3VtZW50ZWRUeXBlLmtpbmQgPT0gXCJPcmRlcmVkTWFwVHlwZVwiKSB7XG4gICAgcmV0dXJuIG5hdGl2ZVR5cGUgPT0gXCJhcnJheVwiXG4gIH1cbiAgaWYgKGRvY3VtZW50ZWRUeXBlLmtpbmQgPT0gXCJSZWNvcmRUeXBlXCIpIHtcbiAgICByZXR1cm4gbmF0aXZlVHlwZSAhPT0gdW5kZWZpbmVkICYmIHJlY29yZHMuZ2V0KG5hdGl2ZVR5cGUpPy5pZCA9PSBkb2N1bWVudGVkVHlwZS5kZWNsYXJhdGlvbklkXG4gIH1cbiAgaWYgKGRvY3VtZW50ZWRUeXBlLmtpbmQgPT0gXCJSZWZlcmVuY2VUeXBlXCIpIHtcbiAgICByZXR1cm4gbmF0aXZlVHlwZSAhPT0gdW5kZWZpbmVkICYmIHJlY29yZHMuZ2V0KG5hdGl2ZVR5cGUpPy5pZCA9PSBkb2N1bWVudGVkVHlwZS5kZWNsYXJhdGlvbklkXG4gIH1cblxuICByZXR1cm4gZmFsc2Vcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIFBIUCBmdW5jdGlvbiBib2R5IHVzaW5nIHRoZSBhbHJlYWR5LXByb3ZlZCBtb2R1bGUgc2lnbmF0dXJlcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5GdW5jdGlvbn0gbm9kZSAtIFBIUCBmdW5jdGlvbiBub2RlLlxuICogQHBhcmFtIHtQaHBGdW5jdGlvblNpZ25hdHVyZX0gc2lnbmF0dXJlIC0gUHJlY29udmVydGVkIGV4cGxpY2l0IHNpZ25hdHVyZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgUGhwRnVuY3Rpb25TaWduYXR1cmU+fSBmdW5jdGlvbnMgLSBNb2R1bGUgZnVuY3Rpb24gc2lnbmF0dXJlcy5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59IHJlY29yZE5hbWVzIC0gTm9taW5hbCBkZWNsYXJhdGlvbnMgYnkgc291cmNlIG5hbWUuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uPn0gcmVjb3JkcyAtIFJlY29yZCBkZWNsYXJhdGlvbnMgYnkgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24+fSBjbGFzc2VzIC0gUmVmZXJlbmNlIGNsYXNzZXMgYnkgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb24+fSBlcnJvck5hbWVzIC0gRXJyb3IgZGVjbGFyYXRpb25zIGJ5IHNvdXJjZSBuYW1lLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9uPn0gZXJyb3JzIC0gRXJyb3IgZGVjbGFyYXRpb25zIGJ5IGlkZW50aXR5LlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5GdW5jdGlvbkRlY2xhcmF0aW9ufSBTZW1hbnRpYyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY29udmVydEZ1bmN0aW9uKG5vZGUsIHNpZ25hdHVyZSwgZnVuY3Rpb25zLCByZWNvcmROYW1lcywgcmVjb3JkcywgY2xhc3NlcywgZXJyb3JOYW1lcywgZXJyb3JzLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGlmICghbm9kZS5ib2R5KSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgXCJmdW5jdGlvbiBib2R5XCIsIHNpZ25hdHVyZS5sb2NhdGlvbilcbiAgY29uc3QgY29udGV4dCA9IHtcbiAgICBiaW5kaW5nczogbmV3IE1hcChzaWduYXR1cmUucGFyYW1ldGVycy5tYXAoKHBhcmFtZXRlcikgPT4gW3BhcmFtZXRlci5uYW1lLCBwYXJhbWV0ZXIudHlwZV0pKSxcbiAgICBjbGFzc2VzLFxuICAgIGVycm9yTmFtZXMsXG4gICAgZXJyb3JzLFxuICAgIGZ1bmN0aW9ucyxcbiAgICBvcmRlcmVkTWFwRGVjbGFyYXRpb25zOiBvcmRlcmVkTWFwRGVjbGFyYXRpb25zRm9yUGhwKG5vZGUuYm9keSksXG4gICAgcmVjb3JkTmFtZXMsXG4gICAgcmVjb3JkcyxcbiAgICByZXR1cm5UeXBlOiBzaWduYXR1cmUucmV0dXJuVHlwZSxcbiAgICB0eXBlUGFyYW1ldGVyczogbmV3IE1hcCgoc2lnbmF0dXJlLnR5cGVQYXJhbWV0ZXJzID8/IFtdKS5tYXAoKHBhcmFtZXRlcikgPT4gW3BhcmFtZXRlci5uYW1lLCBwYXJhbWV0ZXJdKSlcbiAgfVxuXG4gIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICBib2R5OiBjb252ZXJ0QmxvY2sobm9kZS5ib2R5LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSxcbiAgICBraW5kOiBcIkZ1bmN0aW9uRGVjbGFyYXRpb25cIixcbiAgICBsb2NhdGlvbjogc2lnbmF0dXJlLmxvY2F0aW9uLFxuICAgIG5hbWU6IHNpZ25hdHVyZS5uYW1lLFxuICAgIHBhcmFtZXRlcnM6IHNpZ25hdHVyZS5wYXJhbWV0ZXJzLFxuICAgIHJldHVyblR5cGU6IHNpZ25hdHVyZS5yZXR1cm5UeXBlLFxuICAgIC4uLihzaWduYXR1cmUudHlwZVBhcmFtZXRlcnMgPyB7dHlwZVBhcmFtZXRlcnM6IHNpZ25hdHVyZS50eXBlUGFyYW1ldGVyc30gOiB7fSlcbiAgfSwge25hbWU6IHNpZ25hdHVyZS5uYW1lTG9jYXRpb259KVxufVxuXG4vKipcbiAqIFJlc29sdmVzIHBhcnNlci1vd25lZCBrZXkvdmFsdWUgbG9vcHMgdG8gZXhhY3QgZGVjbGFyYXRpb25zIGluc2lkZSBvbmUgbGV4aWNhbCBvd25lci5cbiAqIEFtYmlndW91cyBzYW1lLW5hbWUgZGVjbGFyYXRpb25zIHByb2R1Y2Ugbm8gZXZpZGVuY2UgYW5kIGZhaWwgZHVyaW5nIGxvb3AgY29udmVyc2lvbi5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBGdW5jdGlvbiBib2R5IG9yIGVudHJ5LXBvaW50IHN1YnRyZWUuXG4gKiBAcmV0dXJucyB7U2V0PG9iamVjdD59IEV4YWN0IHBhaXItaXRlcmF0ZWQgcGFyc2VyIGRlY2xhcmF0aW9ucy5cbiAqL1xuZnVuY3Rpb24gb3JkZXJlZE1hcERlY2xhcmF0aW9uc0ZvclBocCh2YWx1ZSkge1xuICAvKiogQHR5cGUge3tkZWNsYXJhdGlvbjogb2JqZWN0LCBuYW1lOiBzdHJpbmcsIG9mZnNldDogbnVtYmVyfVtdfSAqL1xuICBjb25zdCBkZWNsYXJhdGlvbnMgPSBbXVxuICAvKiogQHR5cGUge3tuYW1lOiBzdHJpbmcsIG9mZnNldDogbnVtYmVyfVtdfSAqL1xuICBjb25zdCByZWNlaXZlcnMgPSBbXVxuICBjb25zdCBzZWVuID0gbmV3IFdlYWtTZXQoKVxuICAvKipcbiAgICogVmlzaXRzIG9uZSBwYXJzZXIgY2FuZGlkYXRlLlxuICAgKiBAcGFyYW0ge3Vua25vd259IGNhbmRpZGF0ZSAtIFBhcnNlciBjYW5kaWRhdGUuXG4gICAqL1xuICBjb25zdCB2aXNpdCA9IChjYW5kaWRhdGUpID0+IHtcbiAgICBpZiAoIWNhbmRpZGF0ZSB8fCB0eXBlb2YgY2FuZGlkYXRlICE9IFwib2JqZWN0XCIgfHwgc2Vlbi5oYXMoY2FuZGlkYXRlKSkgcmV0dXJuXG4gICAgc2Vlbi5hZGQoY2FuZGlkYXRlKVxuICAgIGNvbnN0IGtpbmQgPSBSZWZsZWN0LmdldChjYW5kaWRhdGUsIFwia2luZFwiKVxuXG4gICAgaWYgKGtpbmQgPT0gXCJmdW5jdGlvblwiIHx8IGtpbmQgPT0gXCJjbGFzc1wiKSByZXR1cm5cbiAgICBpZiAoa2luZCA9PSBcImFzc2lnblwiKSB7XG4gICAgICBjb25zdCB2YXJpYWJsZSA9IFJlZmxlY3QuZ2V0KGNhbmRpZGF0ZSwgXCJsZWZ0XCIpXG5cbiAgICAgIGlmIChSZWZsZWN0LmdldCh2YXJpYWJsZSwgXCJraW5kXCIpID09IFwidmFyaWFibGVcIiAmJiB0eXBlb2YgUmVmbGVjdC5nZXQodmFyaWFibGUsIFwibmFtZVwiKSA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGRlY2xhcmF0aW9ucy5wdXNoKHtcbiAgICAgICAgICBkZWNsYXJhdGlvbjogY2FuZGlkYXRlLFxuICAgICAgICAgIG5hbWU6IFJlZmxlY3QuZ2V0KHZhcmlhYmxlLCBcIm5hbWVcIiksXG4gICAgICAgICAgb2Zmc2V0OiBSZWZsZWN0LmdldCh2YXJpYWJsZSwgXCJsb2NcIik/LnN0YXJ0Lm9mZnNldFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoa2luZCA9PSBcImZvcmVhY2hcIikge1xuICAgICAgY29uc3QgcmVjZWl2ZXIgPSBSZWZsZWN0LmdldChjYW5kaWRhdGUsIFwic291cmNlXCIpXG5cbiAgICAgIGlmIChSZWZsZWN0LmdldChyZWNlaXZlciwgXCJraW5kXCIpID09IFwidmFyaWFibGVcIiAmJiB0eXBlb2YgUmVmbGVjdC5nZXQocmVjZWl2ZXIsIFwibmFtZVwiKSA9PSBcInN0cmluZ1wiICYmXG4gICAgICAgIFJlZmxlY3QuZ2V0KGNhbmRpZGF0ZSwgXCJrZXlcIikpIHJlY2VpdmVycy5wdXNoKHtcbiAgICAgICAgbmFtZTogUmVmbGVjdC5nZXQocmVjZWl2ZXIsIFwibmFtZVwiKSxcbiAgICAgICAgb2Zmc2V0OiBSZWZsZWN0LmdldChjYW5kaWRhdGUsIFwibG9jXCIpPy5zdGFydC5vZmZzZXRcbiAgICAgIH0pXG4gICAgfVxuICAgIGZvciAoY29uc3QgW2tleSwgY2hpbGRdIG9mIE9iamVjdC5lbnRyaWVzKGNhbmRpZGF0ZSkpIHtcbiAgICAgIGlmIChbXCJsb2NcIiwgXCJsZWFkaW5nQ29tbWVudHNcIiwgXCJ0cmFpbGluZ0NvbW1lbnRzXCJdLmluY2x1ZGVzKGtleSkpIGNvbnRpbnVlXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGNoaWxkKSB2aXNpdChpdGVtKVxuICAgICAgfSBlbHNlIHZpc2l0KGNoaWxkKVxuICAgIH1cbiAgfVxuXG4gIHZpc2l0KHZhbHVlKVxuICBjb25zdCBzZWxlY3RlZCA9IG5ldyBTZXQoKVxuICBmb3IgKGNvbnN0IHJlY2VpdmVyIG9mIHJlY2VpdmVycykge1xuICAgIGNvbnN0IG1hdGNoZXMgPSBkZWNsYXJhdGlvbnMuZmlsdGVyKCh7bmFtZSwgb2Zmc2V0fSkgPT4gbmFtZSA9PSByZWNlaXZlci5uYW1lICYmIG9mZnNldCA8IHJlY2VpdmVyLm9mZnNldClcblxuICAgIGlmIChtYXRjaGVzLmxlbmd0aCA9PSAxKSBzZWxlY3RlZC5hZGQobWF0Y2hlc1swXS5kZWNsYXJhdGlvbilcbiAgfVxuXG4gIHJldHVybiBzZWxlY3RlZFxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBleGFjdCBmaW5hbCBSdW50aW1lRXhjZXB0aW9uIHN1YmNsYXNzLlxuICogQHBhcmFtIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLkNsYXNzfSBub2RlIC0gUEhQIGNsYXNzIGRlY2xhcmF0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9ufSBkZWNsYXJhdGlvbiAtIFByZWRlY2xhcmVkIHNlbWFudGljIGVycm9yLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9ufSBTZW1hbnRpYyBlcnJvciBkZWNsYXJhdGlvbi5cbiAqL1xuZnVuY3Rpb24gY29udmVydFBocEVycm9yKG5vZGUsIGRlY2xhcmF0aW9uLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IHBhcmVudCA9IG5vZGUuZXh0ZW5kc1xuICBjb25zdCBwYXJlbnROYW1lID0gcGFyZW50Py5raW5kID09IFwibmFtZVwiID8gLyoqIEB0eXBlIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLk5hbWV9ICovICgvKiogQHR5cGUge3Vua25vd259ICovIChwYXJlbnQpKSA6IHVuZGVmaW5lZFxuXG4gIGlmIChub2RlLmlzQW5vbnltb3VzIHx8ICFub2RlLmlzRmluYWwgfHwgbm9kZS5pc1JlYWRvbmx5IHx8IG5vZGUuaXNBYnN0cmFjdCB8fCBub2RlLmltcGxlbWVudHM/Lmxlbmd0aCB8fFxuICAgIG5vZGUuYXR0ckdyb3Vwcy5sZW5ndGggfHwgbm9kZS5ib2R5Lmxlbmd0aCAhPSAwIHx8ICFwYXJlbnROYW1lIHx8XG4gICAgIShwYXJlbnROYW1lLm5hbWUgPT0gXCJSdW50aW1lRXhjZXB0aW9uXCIgJiYgcGFyZW50TmFtZS5yZXNvbHV0aW9uID09IFwidXFuXCIgfHxcbiAgICAgIHBhcmVudE5hbWUubmFtZSA9PSBcIlxcXFxSdW50aW1lRXhjZXB0aW9uXCIgJiYgcGFyZW50TmFtZS5yZXNvbHV0aW9uID09IFwiZnFuXCIpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwibm9uY2Fub25pY2FsIHR5cGVkIGVycm9yIGRlY2xhcmF0aW9uXCIsIGxvY2F0aW9uKVxuICB9XG4gIGNvbnN0IG5hbWVOb2RlID0gdHlwZW9mIG5vZGUubmFtZSA9PSBcInN0cmluZ1wiID8gbm9kZSA6IG5vZGUubmFtZVxuXG4gIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKGRlY2xhcmF0aW9uLCB7bmFtZTogbm9kZUxvY2F0aW9uKG5hbWVOb2RlLCBmaWxlbmFtZSwgc291cmNlKSwgdHlwZTogbm9kZUxvY2F0aW9uKHBhcmVudE5hbWUsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbn1cblxuLyoqXG4gKiBSZWFkcyBvbmUgZXhhY3QgcHVibGljIFBIUCBjb25zdHJ1Y3RvciBvciBpbnN0YW5jZS1tZXRob2Qgc2lnbmF0dXJlLlxuICogQHBhcmFtIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLk1ldGhvZH0gbm9kZSAtIFBhcnNlci1vd25lZCBtZXRob2QuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb24+fSBub21pbmFsTmFtZXMgLSBWaXNpYmxlIG5vbWluYWwgZGVjbGFyYXRpb25zLlxuICogQHBhcmFtIHtzdHJpbmd9IG93bmVySWQgLSBTdGFibGUgY2FsbGFibGUgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGNvbnN0cnVjdG9yIC0gV2hldGhlciB0aGlzIGlzIHRoZSBzb2xlIGNvbnN0cnVjdG9yLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHt7bG9jYXRpb246IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCBuYW1lOiBzdHJpbmcsIG5hbWVMb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIHBhcmFtZXRlcnM6IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlBhcmFtZXRlcltdLCByZXR1cm5UeXBlPzogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNGdW5jdGlvblJldHVyblR5cGV9fSBFeGFjdCBzaWduYXR1cmUuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRQaHBDbGFzc0NhbGxhYmxlU2lnbmF0dXJlKG5vZGUsIG5vbWluYWxOYW1lcywgb3duZXJJZCwgY29uc3RydWN0b3IsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgbmFtZSA9IHR5cGVvZiBub2RlLm5hbWUgPT0gXCJzdHJpbmdcIiA/IG5vZGUubmFtZSA6IG5vZGUubmFtZS5uYW1lXG5cbiAgaWYgKCFjb25zdHJ1Y3RvciAmJiAvXl9fL3UudGVzdChuYW1lKSkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIGByZXNlcnZlZCByZWZlcmVuY2UgbWV0aG9kICcke25hbWV9J2AsIGxvY2F0aW9uKVxuICBpZiAobm9kZS52aXNpYmlsaXR5ICE9IFwicHVibGljXCIgfHwgbm9kZS5pc1N0YXRpYyB8fCBub2RlLmlzQWJzdHJhY3QgfHwgbm9kZS5pc0ZpbmFsIHx8IFJlZmxlY3QuZ2V0KG5vZGUsIFwiaXNSZWFkb25seVwiKSB8fCBub2RlLmJ5cmVmIHx8XG4gICAgbm9kZS5hdHRyR3JvdXBzLmxlbmd0aCB8fCAhbm9kZS5ib2R5IHx8IGNvbnN0cnVjdG9yICE9IChuYW1lID09IFwiX19jb25zdHJ1Y3RcIikpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgXCJub25jYW5vbmljYWwgcmVmZXJlbmNlIGNsYXNzIGNhbGxhYmxlXCIsIGxvY2F0aW9uKVxuICB9XG4gIGNvbnN0IGRvY3VtZW50ZWQgPSBmdW5jdGlvbkRvY3VtZW50ZWRUeXBlcygvKiogQHR5cGUge2ltcG9ydChcInBocC1wYXJzZXJcIikuRnVuY3Rpb259ICovICgvKiogQHR5cGUge3Vua25vd259ICovIChub2RlKSksXG4gICAgZmlsZW5hbWUsIHNvdXJjZSwgb3duZXJJZClcbiAgaWYgKGRvY3VtZW50ZWQudHlwZVBhcmFtZXRlcnM/Lmxlbmd0aCkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwiZ2VuZXJpYyByZWZlcmVuY2UgY2xhc3MgY2FsbGFibGVcIiwgbG9jYXRpb24pXG4gIGlmIChjb25zdHJ1Y3RvciAmJiAobm9kZS50eXBlIHx8IG5vZGUubnVsbGFibGUgfHwgZG9jdW1lbnRlZC5yZXR1cm5UeXBlKSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBcImNvbnN0cnVjdG9yIHJldHVybiBhbm5vdGF0aW9uXCIsIGxvY2F0aW9uKVxuICB9XG4gIGNvbnN0IHBhcmFtZXRlcnMgPSBub2RlLmFyZ3VtZW50cy5tYXAoKHBhcmFtZXRlcikgPT4ge1xuICAgIGNvbnN0IHBhcmFtZXRlckxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKHBhcmFtZXRlciwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICBjb25zdCBwYXJhbWV0ZXJOYW1lID0gdHlwZW9mIHBhcmFtZXRlci5uYW1lID09IFwic3RyaW5nXCIgPyBwYXJhbWV0ZXIubmFtZSA6IHBhcmFtZXRlci5uYW1lLm5hbWVcblxuICAgIGlmIChwYXJhbWV0ZXIuYnlyZWYgfHwgcGFyYW1ldGVyLnZhcmlhZGljIHx8IHBhcmFtZXRlci52YWx1ZSB8fCBwYXJhbWV0ZXIuZmxhZ3MgfHwgcGFyYW1ldGVyLnJlYWRvbmx5IHx8XG4gICAgICBwYXJhbWV0ZXIuaG9va3MubGVuZ3RoIHx8IHBhcmFtZXRlci5hdHRyR3JvdXBzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwibm9uY2Fub25pY2FsIHJlZmVyZW5jZSBjbGFzcyBwYXJhbWV0ZXJcIiwgcGFyYW1ldGVyTG9jYXRpb24pXG4gICAgfVxuICAgIGNvbnN0IGRvY3VtZW50ZWRUeXBlID0gZG9jdW1lbnRlZC5wYXJhbWV0ZXJzLmdldChwYXJhbWV0ZXJOYW1lKVxuICAgIGNvbnN0IG5hdGl2ZVR5cGUgPSBwaHBUeXBlTmFtZShwYXJhbWV0ZXIudHlwZSlcbiAgICBsZXQgdHlwZSA9IGRvY3VtZW50ZWRUeXBlXG4gICAgICA/IGRvY3VtZW50ZWRWYWx1ZVR5cGUoe2xhbmd1YWdlOiBcInBocFwiLCBsb2NhdGlvbjogZG9jdW1lbnRlZFR5cGUubG9jYXRpb24sIG93bmVyTG9jYXRpb246IHBhcmFtZXRlckxvY2F0aW9uLFxuICAgICAgICByZWNvcmRzOiBub21pbmFsTmFtZXMsIHNvdXJjZSwgc291cmNlVHlwZTogZG9jdW1lbnRlZFR5cGUuc291cmNlVHlwZSwgc3ViamVjdDogYFBhcmFtZXRlciAnJHtwYXJhbWV0ZXJOYW1lfSdgfSlcbiAgICAgIDogY29udmVydFR5cGUocGFyYW1ldGVyLnR5cGUsIGBQYXJhbWV0ZXIgJyR7cGFyYW1ldGVyTmFtZX0nYCwgcGFyYW1ldGVyTG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIG5vbWluYWxOYW1lcylcblxuICAgIGlmIChuYXRpdmVUeXBlID09IFwiYXJyYXlcIiAmJiAhZG9jdW1lbnRlZFR5cGUpIHJldHVybiBtaXNzaW5nVHlwZShcInBocFwiLCBgUGFyYW1ldGVyICcke3BhcmFtZXRlck5hbWV9J2AsIHBhcmFtZXRlckxvY2F0aW9uKVxuICAgIGlmIChkb2N1bWVudGVkVHlwZSAmJiAhcGhwRG9jdW1lbnRlZE5hdGl2ZVR5cGVNYXRjaGVzKG5hdGl2ZVR5cGUsIHBhcmFtZXRlci5udWxsYWJsZSwgdHlwZSwgbm9taW5hbE5hbWVzKSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwiZG9jdW1lbnRlZCBwYXJhbWV0ZXIgdHlwZSBpbmNvbXBhdGlibGUgd2l0aCBuYXRpdmUgdHlwZVwiLCBkb2N1bWVudGVkVHlwZS5sb2NhdGlvbilcbiAgICB9XG4gICAgaWYgKHBhcmFtZXRlci5udWxsYWJsZSAmJiB0eXBlLmtpbmQgIT0gXCJPcHRpb25hbFR5cGVcIikge1xuICAgICAgaWYgKCFwYXJhbWV0ZXIudHlwZSkgcmV0dXJuIG1pc3NpbmdUeXBlKFwicGhwXCIsIGBQYXJhbWV0ZXIgJyR7cGFyYW1ldGVyTmFtZX0nYCwgcGFyYW1ldGVyTG9jYXRpb24pXG4gICAgICB0eXBlID0gbnVsbGFibGVUeXBlKHR5cGUsIHBhcmFtZXRlci50eXBlLCBwYXJhbWV0ZXIubG9jPy5zdGFydC5vZmZzZXQgPz8gMCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICB9IGVsc2UgaWYgKCFwYXJhbWV0ZXIubnVsbGFibGUgJiYgdHlwZS5raW5kID09IFwiT3B0aW9uYWxUeXBlXCIpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBcIm9wdGlvbmFsIGFubm90YXRpb24gd2l0aG91dCBudWxsYWJsZSBuYXRpdmUgdHlwZVwiLCBkb2N1bWVudGVkVHlwZT8ubG9jYXRpb24gPz8gcGFyYW1ldGVyTG9jYXRpb24pXG4gICAgfVxuICAgIGNvbnN0IG5hbWVOb2RlID0gdHlwZW9mIHBhcmFtZXRlci5uYW1lID09IFwic3RyaW5nXCIgPyBwYXJhbWV0ZXIgOiBwYXJhbWV0ZXIubmFtZVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlBhcmFtZXRlclwiKSwgbG9jYXRpb246IHBhcmFtZXRlckxvY2F0aW9uLFxuICAgICAgbmFtZTogcGFyYW1ldGVyTmFtZSwgdHlwZX0sIHtuYW1lOiBub2RlTG9jYXRpb24obmFtZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgfSlcbiAgaWYgKFsuLi5kb2N1bWVudGVkLnBhcmFtZXRlcnMua2V5cygpXS5zb21lKChwYXJhbWV0ZXJOYW1lKSA9PlxuICAgICFub2RlLmFyZ3VtZW50cy5zb21lKChwYXJhbWV0ZXIpID0+ICh0eXBlb2YgcGFyYW1ldGVyLm5hbWUgPT0gXCJzdHJpbmdcIiA/IHBhcmFtZXRlci5uYW1lIDogcGFyYW1ldGVyLm5hbWUubmFtZSkgPT0gcGFyYW1ldGVyTmFtZSkpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwibWV0aG9kIFBIUERvYyBwYXJhbWV0ZXIgbWlzbWF0Y2hcIiwgbG9jYXRpb24pXG4gIH1cbiAgY29uc3QgbmFtZU5vZGUgPSB0eXBlb2Ygbm9kZS5uYW1lID09IFwic3RyaW5nXCIgPyBub2RlIDogbm9kZS5uYW1lXG5cbiAgaWYgKGNvbnN0cnVjdG9yKSByZXR1cm4ge2xvY2F0aW9uLCBuYW1lOiBcImNvbnN0cnVjdG9yXCIsIG5hbWVMb2NhdGlvbjogbm9kZUxvY2F0aW9uKG5hbWVOb2RlLCBmaWxlbmFtZSwgc291cmNlKSwgcGFyYW1ldGVyc31cbiAgbGV0IHJldHVyblR5cGVcbiAgY29uc3QgbmF0aXZlUmV0dXJuVHlwZSA9IHBocFR5cGVOYW1lKG5vZGUudHlwZSlcblxuICBpZiAoZG9jdW1lbnRlZC5yZXR1cm5UeXBlKSB7XG4gICAgcmV0dXJuVHlwZSA9IGRvY3VtZW50ZWRWYWx1ZVR5cGUoe2xhbmd1YWdlOiBcInBocFwiLCBsb2NhdGlvbjogZG9jdW1lbnRlZC5yZXR1cm5UeXBlLmxvY2F0aW9uLCBvd25lckxvY2F0aW9uOiBsb2NhdGlvbixcbiAgICAgIHJlY29yZHM6IG5vbWluYWxOYW1lcywgc291cmNlLCBzb3VyY2VUeXBlOiBkb2N1bWVudGVkLnJldHVyblR5cGUuc291cmNlVHlwZSwgc3ViamVjdDogYE1ldGhvZCAnJHtuYW1lfScgcmV0dXJuYH0pXG4gICAgaWYgKCFwaHBEb2N1bWVudGVkTmF0aXZlVHlwZU1hdGNoZXMobmF0aXZlUmV0dXJuVHlwZSwgbm9kZS5udWxsYWJsZSwgcmV0dXJuVHlwZSwgbm9taW5hbE5hbWVzKSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwiZG9jdW1lbnRlZCBtZXRob2QgcmV0dXJuIHR5cGUgaW5jb21wYXRpYmxlIHdpdGggbmF0aXZlIHR5cGVcIiwgZG9jdW1lbnRlZC5yZXR1cm5UeXBlLmxvY2F0aW9uKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAobmF0aXZlUmV0dXJuVHlwZSA9PSBcImFycmF5XCIpIHJldHVybiBtaXNzaW5nVHlwZShcInBocFwiLCBgTWV0aG9kICcke25hbWV9JyByZXR1cm5gLCBsb2NhdGlvbilcbiAgICByZXR1cm5UeXBlID0gY29udmVydFJldHVyblR5cGUobm9kZS50eXBlLCBgTWV0aG9kICcke25hbWV9JyByZXR1cm5gLCBsb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgbm9taW5hbE5hbWVzKVxuICB9XG4gIGlmIChub2RlLm51bGxhYmxlICYmIHJldHVyblR5cGUua2luZCAhPSBcIk9wdGlvbmFsVHlwZVwiKSB7XG4gICAgaWYgKCFub2RlLnR5cGUpIHJldHVybiBtaXNzaW5nVHlwZShcInBocFwiLCBgTWV0aG9kICcke25hbWV9JyByZXR1cm5gLCBsb2NhdGlvbilcbiAgICByZXR1cm5UeXBlID0gbnVsbGFibGVUeXBlKC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNWYWx1ZVR5cGV9ICovIChyZXR1cm5UeXBlKSwgbm9kZS50eXBlLFxuICAgICAgbm9kZS50eXBlLmxvYz8uc3RhcnQub2Zmc2V0ID8/IDAsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIH0gZWxzZSBpZiAoIW5vZGUubnVsbGFibGUgJiYgcmV0dXJuVHlwZS5raW5kID09IFwiT3B0aW9uYWxUeXBlXCIpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgXCJvcHRpb25hbCBhbm5vdGF0aW9uIHdpdGhvdXQgbnVsbGFibGUgbmF0aXZlIHJldHVybiB0eXBlXCIsIGRvY3VtZW50ZWQucmV0dXJuVHlwZT8ubG9jYXRpb24gPz8gbG9jYXRpb24pXG4gIH1cblxuICByZXR1cm4ge2xvY2F0aW9uLCBuYW1lLCBuYW1lTG9jYXRpb246IG5vZGVMb2NhdGlvbihuYW1lTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksIHBhcmFtZXRlcnMsIHJldHVyblR5cGV9XG59XG5cbi8qKlxuICogQ29udmVydHMgdGhlIGJvdW5kZWQgZmluYWwvcHJpdmF0ZS1maWVsZCBQSFAgcmVmZXJlbmNlLWNsYXNzIHByb2ZpbGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcInBocC1wYXJzZXJcIikuQ2xhc3N9IG5vZGUgLSBQYXJzZXIgY2xhc3MuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb259IGRlY2xhcmF0aW9uIC0gUHJlZGVjbGFyZWQgY2xhc3MgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb24+fSBub21pbmFsTmFtZXMgLSBWaXNpYmxlIG5vbWluYWwgZGVjbGFyYXRpb25zLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbj59IHJlY29yZHMgLSBSZWNvcmRzIGJ5IGlkZW50aXR5LlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uPn0gY2xhc3NlcyAtIENsYXNzZXMgYnkgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIFBocEZ1bmN0aW9uU2lnbmF0dXJlPn0gZnVuY3Rpb25zIC0gVG9wLWxldmVsIHNpZ25hdHVyZXMuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb24+fSBlcnJvck5hbWVzIC0gRXJyb3JzIGJ5IG5hbWUuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb24+fSBlcnJvcnMgLSBFcnJvcnMgYnkgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb259IFNlbWFudGljIGNsYXNzLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0UGhwUmVmZXJlbmNlQ2xhc3Mobm9kZSwgZGVjbGFyYXRpb24sIG5vbWluYWxOYW1lcywgcmVjb3JkcywgY2xhc3NlcywgZnVuY3Rpb25zLCBlcnJvck5hbWVzLCBlcnJvcnMsXG4gIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAobm9kZS5pc0Fub255bW91cyB8fCAhbm9kZS5pc0ZpbmFsIHx8IG5vZGUuaXNSZWFkb25seSB8fCBub2RlLmlzQWJzdHJhY3QgfHwgbm9kZS5leHRlbmRzIHx8IG5vZGUuaW1wbGVtZW50cz8ubGVuZ3RoIHx8XG4gICAgbm9kZS5hdHRyR3JvdXBzLmxlbmd0aCkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwicmVmZXJlbmNlIGNsYXNzIGluaGVyaXRhbmNlIG9yIG5vbmNhbm9uaWNhbCBtb2RpZmllclwiLCBsb2NhdGlvbilcbiAgY29uc3QgZmllbGRTdGF0ZW1lbnRzID0gbm9kZS5ib2R5LmZpbHRlcigobWVtYmVyKSA9PiBtZW1iZXIua2luZCA9PSBcInByb3BlcnR5c3RhdGVtZW50XCIpXG4gIGNvbnN0IG1ldGhvZE5vZGVzID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLk1ldGhvZFtdfSAqLyAobm9kZS5ib2R5LmZpbHRlcigobWVtYmVyKSA9PiBtZW1iZXIua2luZCA9PSBcIm1ldGhvZFwiKSlcbiAgY29uc3QgY29uc3RydWN0b3JzID0gbWV0aG9kTm9kZXMuZmlsdGVyKChtZXRob2QpID0+ICh0eXBlb2YgbWV0aG9kLm5hbWUgPT0gXCJzdHJpbmdcIiA/IG1ldGhvZC5uYW1lIDogbWV0aG9kLm5hbWUubmFtZSkgPT0gXCJfX2NvbnN0cnVjdFwiKVxuICBjb25zdCBvcmRpbmFyeU1ldGhvZHMgPSBtZXRob2ROb2Rlcy5maWx0ZXIoKG1ldGhvZCkgPT4gIWNvbnN0cnVjdG9ycy5pbmNsdWRlcyhtZXRob2QpKVxuXG4gIGlmIChjb25zdHJ1Y3RvcnMubGVuZ3RoICE9IDEgfHwgZmllbGRTdGF0ZW1lbnRzLmxlbmd0aCA9PSAwIHx8IGZpZWxkU3RhdGVtZW50cy5sZW5ndGggKyBtZXRob2ROb2Rlcy5sZW5ndGggIT0gbm9kZS5ib2R5Lmxlbmd0aCkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBcInJlZmVyZW5jZSBjbGFzcyByZXF1aXJlcyBwcml2YXRlIGZpZWxkcywgb25lIGNvbnN0cnVjdG9yLCBhbmQgb3JkaW5hcnkgbWV0aG9kc1wiLCBsb2NhdGlvbilcbiAgfVxuICBkZWNsYXJhdGlvbi5maWVsZHMgPSBmaWVsZFN0YXRlbWVudHMubWFwKChzdGF0ZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgZmllbGRMb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihzdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgY29uc3QgcHJvcGVydGllcyA9IFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJwcm9wZXJ0aWVzXCIpXG4gICAgY29uc3QgcHJvcGVydHkgPSBBcnJheS5pc0FycmF5KHByb3BlcnRpZXMpICYmIHByb3BlcnRpZXMubGVuZ3RoID09IDEgPyBwcm9wZXJ0aWVzWzBdIDogdW5kZWZpbmVkXG4gICAgY29uc3QgbmFtZU5vZGUgPSBwcm9wZXJ0eT8ubmFtZVxuICAgIGNvbnN0IG5hbWUgPSB0eXBlb2YgbmFtZU5vZGUgPT0gXCJzdHJpbmdcIiA/IG5hbWVOb2RlIDogbmFtZU5vZGU/Lm5hbWVcblxuICAgIGlmIChSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwidmlzaWJpbGl0eVwiKSAhPSBcInByaXZhdGVcIiB8fCBSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwiaXNTdGF0aWNcIikgfHxcbiAgICAgIFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJpc0Fic3RyYWN0XCIpIHx8IFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJpc0ZpbmFsXCIpIHx8ICFwcm9wZXJ0eSB8fFxuICAgICAgdHlwZW9mIG5hbWUgIT0gXCJzdHJpbmdcIiB8fCBwcm9wZXJ0eS52YWx1ZSB8fCBwcm9wZXJ0eS5yZWFkb25seSB8fCBwcm9wZXJ0eS5udWxsYWJsZSB8fCBwcm9wZXJ0eS5hdHRyR3JvdXBzPy5sZW5ndGggfHxcbiAgICAgIHByb3BlcnR5Lmhvb2tzPy5sZW5ndGgpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBcIm5vbmNhbm9uaWNhbCBwcml2YXRlIGluc3RhbmNlIGZpZWxkXCIsIGZpZWxkTG9jYXRpb24pXG4gICAgY29uc3QgdHlwZSA9IGNvbnZlcnRUeXBlKHByb3BlcnR5LnR5cGUsIGBQcml2YXRlIGZpZWxkICcke25hbWV9J2AsIGZpZWxkTG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIG5vbWluYWxOYW1lcylcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtpZDogYCR7ZGVjbGFyYXRpb24uaWR9OmZpZWxkOiR7aW5kZXh9YCwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUHJpdmF0ZUZpZWxkXCIpLFxuICAgICAgbG9jYXRpb246IGZpZWxkTG9jYXRpb24sIG5hbWUsIHR5cGV9LCB7bmFtZTogbm9kZUxvY2F0aW9uKHR5cGVvZiBuYW1lTm9kZSA9PSBcInN0cmluZ1wiID8gcHJvcGVydHkgOiBuYW1lTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICB9KVxuICBjb25zdCBjb25zdHJ1Y3Rvck5vZGUgPSBjb25zdHJ1Y3RvcnNbMF1cbiAgY29uc3QgY29uc3RydWN0b3JTaWduYXR1cmUgPSBjb252ZXJ0UGhwQ2xhc3NDYWxsYWJsZVNpZ25hdHVyZShjb25zdHJ1Y3Rvck5vZGUsIG5vbWluYWxOYW1lcyxcbiAgICBgJHtkZWNsYXJhdGlvbi5pZH06Y29uc3RydWN0b3JgLCB0cnVlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGRlY2xhcmF0aW9uLmNvbnN0cnVjdG9yID0gd2l0aFBhcnNlclJhbmdlcyh7Ym9keTogLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CbG9ja30gKi8gKHt9KSxcbiAgICBpZDogYCR7ZGVjbGFyYXRpb24uaWR9OmNvbnN0cnVjdG9yYCwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiQ29uc3RydWN0b3JEZWNsYXJhdGlvblwiKSxcbiAgICBsb2NhdGlvbjogY29uc3RydWN0b3JTaWduYXR1cmUubG9jYXRpb24sIHBhcmFtZXRlcnM6IGNvbnN0cnVjdG9yU2lnbmF0dXJlLnBhcmFtZXRlcnN9LCB7Y29uc3RydWN0b3I6IGNvbnN0cnVjdG9yU2lnbmF0dXJlLm5hbWVMb2NhdGlvbn0pXG4gIGNvbnN0IG1ldGhvZFNpZ25hdHVyZXMgPSBvcmRpbmFyeU1ldGhvZHMubWFwKChtZXRob2QsIGluZGV4KSA9PiBjb252ZXJ0UGhwQ2xhc3NDYWxsYWJsZVNpZ25hdHVyZShtZXRob2QsIG5vbWluYWxOYW1lcyxcbiAgICBgJHtkZWNsYXJhdGlvbi5pZH06bWV0aG9kOiR7aW5kZXh9YCwgZmFsc2UsIGZpbGVuYW1lLCBzb3VyY2UpKVxuXG4gIGRlY2xhcmF0aW9uLm1ldGhvZHMgPSBtZXRob2RTaWduYXR1cmVzLm1hcCgoc2lnbmF0dXJlLCBpbmRleCkgPT4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgYm9keTogLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CbG9ja30gKi8gKHt9KSwgaWQ6IGAke2RlY2xhcmF0aW9uLmlkfTptZXRob2Q6JHtpbmRleH1gLFxuICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk1ldGhvZERlY2xhcmF0aW9uXCIpLCBsb2NhdGlvbjogc2lnbmF0dXJlLmxvY2F0aW9uLCBuYW1lOiBzaWduYXR1cmUubmFtZSxcbiAgICBwYXJhbWV0ZXJzOiBzaWduYXR1cmUucGFyYW1ldGVycyxcbiAgICByZXR1cm5UeXBlOiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljRnVuY3Rpb25SZXR1cm5UeXBlfSAqLyAoc2lnbmF0dXJlLnJldHVyblR5cGUpXG4gIH0sIHtuYW1lOiBzaWduYXR1cmUubmFtZUxvY2F0aW9ufSkpXG4gIGNvbnN0IGJhc2UgPSB7YmluZGluZ3M6IG5ldyBNYXAoKSwgY2xhc3NlcywgY3VycmVudENsYXNzOiBkZWNsYXJhdGlvbiwgZXJyb3JOYW1lcywgZXJyb3JzLCBmdW5jdGlvbnMsXG4gICAgcmVjb3JkTmFtZXM6IG5vbWluYWxOYW1lcywgcmVjb3Jkc31cblxuICBkZWNsYXJhdGlvbi5jb25zdHJ1Y3Rvci5ib2R5ID0gY29udmVydEJsb2NrKC8qKiBAdHlwZSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5CbG9ja30gKi8gKGNvbnN0cnVjdG9yTm9kZS5ib2R5KSwgZmlsZW5hbWUsIHNvdXJjZSxcbiAgICB7Li4uYmFzZSwgYmluZGluZ3M6IG5ldyBNYXAoZGVjbGFyYXRpb24uY29uc3RydWN0b3IucGFyYW1ldGVycy5tYXAoKHBhcmFtZXRlcikgPT4gW3BhcmFtZXRlci5uYW1lLCBwYXJhbWV0ZXIudHlwZV0pKSxcbiAgICAgIHJldHVyblR5cGU6IHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJUeXBlUmVmZXJlbmNlXCIpLCBuYW1lOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJ2b2lkXCIpfX0pXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBvcmRpbmFyeU1ldGhvZHMubGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgY29uc3QgbWV0aG9kID0gZGVjbGFyYXRpb24ubWV0aG9kc1tpbmRleF1cblxuICAgIG1ldGhvZC5ib2R5ID0gY29udmVydEJsb2NrKC8qKiBAdHlwZSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5CbG9ja30gKi8gKG9yZGluYXJ5TWV0aG9kc1tpbmRleF0uYm9keSksIGZpbGVuYW1lLCBzb3VyY2UsXG4gICAgICB7Li4uYmFzZSwgYmluZGluZ3M6IG5ldyBNYXAobWV0aG9kLnBhcmFtZXRlcnMubWFwKChwYXJhbWV0ZXIpID0+IFtwYXJhbWV0ZXIubmFtZSwgcGFyYW1ldGVyLnR5cGVdKSksIHJldHVyblR5cGU6IG1ldGhvZC5yZXR1cm5UeXBlfSlcbiAgfVxuICBjb25zdCBuYW1lTm9kZSA9IHR5cGVvZiBub2RlLm5hbWUgPT0gXCJzdHJpbmdcIiA/IG5vZGUgOiBub2RlLm5hbWVcblxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyhkZWNsYXJhdGlvbiwge25hbWU6IG5vZGVMb2NhdGlvbihuYW1lTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSl9KVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBleGFjdCBmaW5hbCByZWFkb25seSBwcm9tb3RlZC1wcm9wZXJ0eSBQSFAgcmVjb3JkLlxuICogQHBhcmFtIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLkNsYXNzfSBub2RlIC0gUEhQIGNsYXNzIGRlY2xhcmF0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbn0gZGVjbGFyYXRpb24gLSBQcmVkZWNsYXJlZCBub21pbmFsIGlkZW50aXR5LlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbj59IHJlY29yZE5hbWVzIC0gUmVjb3JkIGRlY2xhcmF0aW9ucyBieSBuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbn0gU2VtYW50aWMgcmVjb3JkLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0UGhwUmVjb3JkKG5vZGUsIGRlY2xhcmF0aW9uLCByZWNvcmROYW1lcywgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBnZW5lcmljID0gKGRlY2xhcmF0aW9uLnR5cGVQYXJhbWV0ZXJzPy5sZW5ndGggPz8gMCkgPiAwXG5cbiAgaWYgKG5vZGUuaXNBbm9ueW1vdXMgfHwgIW5vZGUuaXNGaW5hbCB8fCBub2RlLmlzUmVhZG9ubHkgPT0gZ2VuZXJpYyB8fCBub2RlLmlzQWJzdHJhY3QgfHwgbm9kZS5leHRlbmRzIHx8IG5vZGUuaW1wbGVtZW50cz8ubGVuZ3RoIHx8XG4gICAgbm9kZS5hdHRyR3JvdXBzLmxlbmd0aCkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwibm9uY2Fub25pY2FsIHJlY29yZCBjbGFzcyBtb2RpZmllcnNcIiwgbG9jYXRpb24pXG4gIGlmIChub2RlLmJvZHkubGVuZ3RoIDwgMSB8fCBub2RlLmJvZHlbMF0ua2luZCAhPSBcIm1ldGhvZFwiIHx8ICFnZW5lcmljICYmIG5vZGUuYm9keS5sZW5ndGggIT0gMSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBcInJlY29yZCBjbGFzcyBib2R5IG91dHNpZGUgb25lIGNvbnN0cnVjdG9yXCIsIG5vZGVMb2NhdGlvbihub2RlLmJvZHlbMV0gPz8gbm9kZS5ib2R5WzBdID8/IG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGNvbnN0IGNvbnN0cnVjdG9yID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLk1ldGhvZH0gKi8gKG5vZGUuYm9keVswXSlcbiAgY29uc3QgdHlwZVBhcmFtZXRlck5hbWVzID0gbmV3IE1hcCgoZGVjbGFyYXRpb24udHlwZVBhcmFtZXRlcnMgPz8gW10pLm1hcCgocGFyYW1ldGVyKSA9PiBbcGFyYW1ldGVyLm5hbWUsIHBhcmFtZXRlcl0pKVxuICBjb25zdCBjb25zdHJ1Y3Rvck5hbWUgPSB0eXBlb2YgY29uc3RydWN0b3IubmFtZSA9PSBcInN0cmluZ1wiID8gY29uc3RydWN0b3IubmFtZSA6IGNvbnN0cnVjdG9yLm5hbWUubmFtZVxuXG4gIGlmIChjb25zdHJ1Y3Rvck5hbWUgIT0gXCJfX2NvbnN0cnVjdFwiIHx8IGNvbnN0cnVjdG9yLnZpc2liaWxpdHkgIT0gXCJwdWJsaWNcIiB8fCBjb25zdHJ1Y3Rvci5pc1N0YXRpYyB8fCBjb25zdHJ1Y3Rvci5pc0Fic3RyYWN0IHx8XG4gICAgY29uc3RydWN0b3IuaXNGaW5hbCB8fCBSZWZsZWN0LmdldChjb25zdHJ1Y3RvciwgXCJpc1JlYWRvbmx5XCIpIHx8IGNvbnN0cnVjdG9yLmJ5cmVmIHx8IGNvbnN0cnVjdG9yLnR5cGUgfHwgY29uc3RydWN0b3IubnVsbGFibGUgfHxcbiAgICBjb25zdHJ1Y3Rvci5hdHRyR3JvdXBzLmxlbmd0aCB8fCAhY29uc3RydWN0b3IuYm9keSB8fCBjb25zdHJ1Y3Rvci5ib2R5LmNoaWxkcmVuLmxlbmd0aCAhPSAwKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwibm9uY2Fub25pY2FsIHJlY29yZCBjb25zdHJ1Y3RvclwiLCBub2RlTG9jYXRpb24oY29uc3RydWN0b3IsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGNvbnN0IGRvY3VtZW50ZWQgPSBmdW5jdGlvbkRvY3VtZW50ZWRUeXBlcygvKiogQHR5cGUge2ltcG9ydChcInBocC1wYXJzZXJcIikuRnVuY3Rpb259ICovICgvKiogQHR5cGUge3Vua25vd259ICovIChjb25zdHJ1Y3RvcikpLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGRlY2xhcmF0aW9uLmZpZWxkcyA9IGNvbnN0cnVjdG9yLmFyZ3VtZW50cy5tYXAoKHBhcmFtZXRlcikgPT4ge1xuICAgIGNvbnN0IGZpZWxkTG9jYXRpb24gPSBub2RlTG9jYXRpb24ocGFyYW1ldGVyLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IG5hbWUgPSB0eXBlb2YgcGFyYW1ldGVyLm5hbWUgPT0gXCJzdHJpbmdcIiA/IHBhcmFtZXRlci5uYW1lIDogcGFyYW1ldGVyLm5hbWUubmFtZVxuICAgIGNvbnN0IGRvY3VtZW50ZWRUeXBlID0gZG9jdW1lbnRlZC5wYXJhbWV0ZXJzLmdldChuYW1lKVxuICAgIGNvbnN0IG5hdGl2ZVR5cGUgPSBwaHBUeXBlTmFtZShwYXJhbWV0ZXIudHlwZSlcblxuICAgIGlmIChwYXJhbWV0ZXIuZmxhZ3MgIT0gKGdlbmVyaWMgPyA0IDogMSkgfHwgcGFyYW1ldGVyLmJ5cmVmIHx8IHBhcmFtZXRlci52YXJpYWRpYyB8fCBwYXJhbWV0ZXIudmFsdWUgfHwgcGFyYW1ldGVyLnJlYWRvbmx5IHx8XG4gICAgICBwYXJhbWV0ZXIuaG9va3MubGVuZ3RoIHx8IHBhcmFtZXRlci5hdHRyR3JvdXBzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwicmVjb3JkIGZpZWxkIG91dHNpZGUgcHVibGljIHByb21vdGVkLXByb3BlcnR5IHByb2ZpbGVcIiwgZmllbGRMb2NhdGlvbilcbiAgICB9XG4gICAgaWYgKG5hdGl2ZVR5cGUgPT0gXCJhcnJheVwiICYmICFkb2N1bWVudGVkVHlwZSkgcmV0dXJuIG1pc3NpbmdUeXBlKFwicGhwXCIsIGBSZWNvcmQgZmllbGQgJyR7bmFtZX0nYCwgZmllbGRMb2NhdGlvbilcbiAgICBsZXQgdHlwZSA9IGRvY3VtZW50ZWRUeXBlXG4gICAgICA/IGRvY3VtZW50ZWRWYWx1ZVR5cGUoe2xhbmd1YWdlOiBcInBocFwiLCBsb2NhdGlvbjogZG9jdW1lbnRlZFR5cGUubG9jYXRpb24sIG93bmVyTG9jYXRpb246IGZpZWxkTG9jYXRpb24sIHJlY29yZHM6IHJlY29yZE5hbWVzLFxuICAgICAgICBzb3VyY2UsIHNvdXJjZVR5cGU6IGRvY3VtZW50ZWRUeXBlLnNvdXJjZVR5cGUsIHN1YmplY3Q6IGBSZWNvcmQgZmllbGQgJyR7bmFtZX0nYCwgdHlwZVBhcmFtZXRlcnM6IHR5cGVQYXJhbWV0ZXJOYW1lc30pXG4gICAgICA6IGNvbnZlcnRUeXBlKHBhcmFtZXRlci50eXBlLCBgUmVjb3JkIGZpZWxkICcke25hbWV9J2AsIGZpZWxkTG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIHJlY29yZE5hbWVzKVxuXG4gICAgaWYgKGRvY3VtZW50ZWRUeXBlICYmICFwaHBEb2N1bWVudGVkTmF0aXZlVHlwZU1hdGNoZXMobmF0aXZlVHlwZSwgcGFyYW1ldGVyLm51bGxhYmxlLCB0eXBlLCByZWNvcmROYW1lcykpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBcImRvY3VtZW50ZWQgcmVjb3JkIGZpZWxkIHR5cGUgaW5jb21wYXRpYmxlIHdpdGggbmF0aXZlIHR5cGVcIiwgZG9jdW1lbnRlZFR5cGUubG9jYXRpb24pXG4gICAgfVxuXG4gICAgaWYgKHBhcmFtZXRlci5udWxsYWJsZSAmJiB0eXBlLmtpbmQgIT0gXCJPcHRpb25hbFR5cGVcIikge1xuICAgICAgaWYgKCFwYXJhbWV0ZXIudHlwZSkgcmV0dXJuIG1pc3NpbmdUeXBlKFwicGhwXCIsIGBSZWNvcmQgZmllbGQgJyR7bmFtZX0nYCwgZmllbGRMb2NhdGlvbilcbiAgICAgIHR5cGUgPSBudWxsYWJsZVR5cGUodHlwZSwgcGFyYW1ldGVyLnR5cGUsIHBhcmFtZXRlci5sb2M/LnN0YXJ0Lm9mZnNldCA/PyAwLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIH0gZWxzZSBpZiAoIXBhcmFtZXRlci5udWxsYWJsZSAmJiB0eXBlLmtpbmQgPT0gXCJPcHRpb25hbFR5cGVcIiAmJiB0eXBlLnZhbHVlVHlwZS5raW5kICE9IFwiVHlwZVZhcmlhYmxlUmVmZXJlbmNlXCIpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBcIm9wdGlvbmFsIGFubm90YXRpb24gd2l0aG91dCBudWxsYWJsZSBuYXRpdmUgcmVjb3JkIGZpZWxkXCIsIGRvY3VtZW50ZWRUeXBlPy5sb2NhdGlvbiA/PyBmaWVsZExvY2F0aW9uKVxuICAgIH1cbiAgICBjb25zdCBmaWVsZCA9IHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJSZWNvcmRGaWVsZFwiKSwgbG9jYXRpb246IGZpZWxkTG9jYXRpb24sIG5hbWUsIHR5cGV9XG4gICAgY29uc3QgbmFtZU5vZGUgPSB0eXBlb2YgcGFyYW1ldGVyLm5hbWUgPT0gXCJzdHJpbmdcIiA/IHBhcmFtZXRlciA6IHBhcmFtZXRlci5uYW1lXG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyhmaWVsZCwge25hbWU6IG5vZGVMb2NhdGlvbihuYW1lTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICB9KVxuICBjb25zdCBleHRyYURvY3VtZW50ZWQgPSBbLi4uZG9jdW1lbnRlZC5wYXJhbWV0ZXJzLmtleXMoKV0uZmluZCgobmFtZSkgPT5cbiAgICAhY29uc3RydWN0b3IuYXJndW1lbnRzLnNvbWUoKHBhcmFtZXRlcikgPT4gKHR5cGVvZiBwYXJhbWV0ZXIubmFtZSA9PSBcInN0cmluZ1wiID8gcGFyYW1ldGVyLm5hbWUgOiBwYXJhbWV0ZXIubmFtZS5uYW1lKSA9PSBuYW1lKSlcblxuICBpZiAoZXh0cmFEb2N1bWVudGVkIHx8IGRvY3VtZW50ZWQucmV0dXJuVHlwZSkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwiaW52YWxpZCByZWNvcmQgY29uc3RydWN0b3IgYW5ub3RhdGlvblwiLCBsb2NhdGlvbilcbiAgaWYgKGdlbmVyaWMpIHZhbGlkYXRlUGhwR2VuZXJpY1JlY29yZEdldHRlcnMobm9kZSwgZGVjbGFyYXRpb24sIHJlY29yZE5hbWVzLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBuYW1lTm9kZSA9IHR5cGVvZiBub2RlLm5hbWUgPT0gXCJzdHJpbmdcIiA/IG5vZGUgOiBub2RlLm5hbWVcblxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyhkZWNsYXJhdGlvbiwge25hbWU6IG5vZGVMb2NhdGlvbihuYW1lTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSl9KVxufVxuXG4vKipcbiAqIFZhbGlkYXRlcyB0aGUgZXhhY3QgYWNjZXNzb3IgaGFsZiBvZiBQSFAncyBkb2N1bWVudGVkIGdlbmVyaWMtcmVjb3JkIHByb2ZpbGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcInBocC1wYXJzZXJcIikuQ2xhc3N9IG5vZGUgLSBQSFAgY2xhc3MgZGVjbGFyYXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9ufSBkZWNsYXJhdGlvbiAtIENvbnZlcnRlZCByZWNvcmQuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uPn0gcmVjb3JkTmFtZXMgLSBWaXNpYmxlIHJlY29yZHMuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlUGhwR2VuZXJpY1JlY29yZEdldHRlcnMobm9kZSwgZGVjbGFyYXRpb24sIHJlY29yZE5hbWVzLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGNvbnN0IGdldHRlcnMgPSBub2RlLmJvZHkuc2xpY2UoMSlcbiAgY29uc3QgdHlwZVBhcmFtZXRlcnMgPSBuZXcgTWFwKChkZWNsYXJhdGlvbi50eXBlUGFyYW1ldGVycyA/PyBbXSkubWFwKChwYXJhbWV0ZXIpID0+IFtwYXJhbWV0ZXIubmFtZSwgcGFyYW1ldGVyXSkpXG5cbiAgaWYgKGdldHRlcnMubGVuZ3RoICE9IGRlY2xhcmF0aW9uLmZpZWxkcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgXCJnZW5lcmljIHJlY29yZCBnZXR0ZXIgY291bnRcIiwgbm9kZUxvY2F0aW9uKGdldHRlcnNbZGVjbGFyYXRpb24uZmllbGRzLmxlbmd0aF0gPz8gbm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgZ2V0dGVycy5mb3JFYWNoKChjYW5kaWRhdGUsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgZmllbGQgPSBkZWNsYXJhdGlvbi5maWVsZHNbaW5kZXhdXG5cbiAgICBpZiAoY2FuZGlkYXRlLmtpbmQgIT0gXCJtZXRob2RcIikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwibm9uY2Fub25pY2FsIGdlbmVyaWMgcmVjb3JkIGdldHRlclwiLCBub2RlTG9jYXRpb24oY2FuZGlkYXRlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICBjb25zdCBnZXR0ZXIgPSAvKiogQHR5cGUge2ltcG9ydChcInBocC1wYXJzZXJcIikuTWV0aG9kfSAqLyAoY2FuZGlkYXRlKVxuICAgIGNvbnN0IG5hbWUgPSB0eXBlb2YgZ2V0dGVyLm5hbWUgPT0gXCJzdHJpbmdcIiA/IGdldHRlci5uYW1lIDogZ2V0dGVyLm5hbWUubmFtZVxuICAgIGNvbnN0IHN0YXRlbWVudCA9IGdldHRlci5ib2R5Py5jaGlsZHJlblswXVxuICAgIGNvbnN0IHJldHVybmVkID0gc3RhdGVtZW50Py5raW5kID09IFwicmV0dXJuXCIgPyAvKiogQHR5cGUge2ltcG9ydChcInBocC1wYXJzZXJcIikuUmV0dXJufSAqLyAoc3RhdGVtZW50KS5leHByIDogdW5kZWZpbmVkXG4gICAgY29uc3QgbG9va3VwID0gcmV0dXJuZWQ/LmtpbmQgPT0gXCJwcm9wZXJ0eWxvb2t1cFwiID8gLyoqIEB0eXBlIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLlByb3BlcnR5TG9va3VwfSAqLyAocmV0dXJuZWQpIDogdW5kZWZpbmVkXG4gICAgY29uc3QgcmVjZWl2ZXIgPSBsb29rdXA/LndoYXQua2luZCA9PSBcInZhcmlhYmxlXCIgPyAvKiogQHR5cGUge2ltcG9ydChcInBocC1wYXJzZXJcIikuVmFyaWFibGV9ICovIChsb29rdXAud2hhdCkgOiB1bmRlZmluZWRcbiAgICBjb25zdCBtZW1iZXIgPSBsb29rdXA/Lm9mZnNldC5raW5kID09IFwiaWRlbnRpZmllclwiID8gLyoqIEB0eXBlIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLklkZW50aWZpZXJ9ICovIChsb29rdXAub2Zmc2V0KSA6IHVuZGVmaW5lZFxuXG4gICAgaWYgKG5hbWUgIT0gZmllbGQubmFtZSB8fCBnZXR0ZXIudmlzaWJpbGl0eSAhPSBcInB1YmxpY1wiIHx8IGdldHRlci5pc1N0YXRpYyB8fCBnZXR0ZXIuaXNBYnN0cmFjdCB8fCBnZXR0ZXIuaXNGaW5hbCB8fFxuICAgICAgUmVmbGVjdC5nZXQoZ2V0dGVyLCBcImlzUmVhZG9ubHlcIikgfHwgZ2V0dGVyLmJ5cmVmIHx8IGdldHRlci5hcmd1bWVudHMubGVuZ3RoIHx8IGdldHRlci5hdHRyR3JvdXBzLmxlbmd0aCB8fFxuICAgICAgIWdldHRlci5ib2R5IHx8IGdldHRlci5ib2R5LmNoaWxkcmVuLmxlbmd0aCAhPSAxIHx8IHJlY2VpdmVyPy5uYW1lICE9IFwidGhpc1wiIHx8IG1lbWJlcj8ubmFtZSAhPSBmaWVsZC5uYW1lKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgXCJub25jYW5vbmljYWwgZ2VuZXJpYyByZWNvcmQgZ2V0dGVyXCIsIG5vZGVMb2NhdGlvbihnZXR0ZXIsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cbiAgICBjb25zdCBkb2N1bWVudGVkID0gZnVuY3Rpb25Eb2N1bWVudGVkVHlwZXMoXG4gICAgICAvKiogQHR5cGUge2ltcG9ydChcInBocC1wYXJzZXJcIikuRnVuY3Rpb259ICovICgvKiogQHR5cGUge3Vua25vd259ICovIChnZXR0ZXIpKSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgIGlmIChkb2N1bWVudGVkLnBhcmFtZXRlcnMuc2l6ZSB8fCBkb2N1bWVudGVkLnR5cGVQYXJhbWV0ZXJzIHx8ICFkb2N1bWVudGVkLnJldHVyblR5cGUpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBcIm1pc3Npbmcgb3IgaW52YWxpZCBnZW5lcmljIHJlY29yZCBnZXR0ZXIgdHlwZVwiLCBub2RlTG9jYXRpb24oZ2V0dGVyLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgY29uc3QgcmV0dXJuVHlwZSA9IGRvY3VtZW50ZWRWYWx1ZVR5cGUoe2xhbmd1YWdlOiBcInBocFwiLCBsb2NhdGlvbjogZG9jdW1lbnRlZC5yZXR1cm5UeXBlLmxvY2F0aW9uLFxuICAgICAgb3duZXJMb2NhdGlvbjogbm9kZUxvY2F0aW9uKGdldHRlciwgZmlsZW5hbWUsIHNvdXJjZSksIHJlY29yZHM6IHJlY29yZE5hbWVzLCBzb3VyY2UsXG4gICAgICBzb3VyY2VUeXBlOiBkb2N1bWVudGVkLnJldHVyblR5cGUuc291cmNlVHlwZSwgc3ViamVjdDogYFJlY29yZCBnZXR0ZXIgJyR7bmFtZX0nYCwgdHlwZVBhcmFtZXRlcnN9KVxuICAgIGNvbnN0IG5hdGl2ZVR5cGUgPSBwaHBUeXBlTmFtZShnZXR0ZXIudHlwZSlcblxuICAgIGlmICghcGhwRG9jdW1lbnRlZE5hdGl2ZVR5cGVNYXRjaGVzKG5hdGl2ZVR5cGUsIGdldHRlci5udWxsYWJsZSwgcmV0dXJuVHlwZSwgcmVjb3JkTmFtZXMpIHx8XG4gICAgICAhc2FtZVZhbHVlVHlwZShyZXR1cm5UeXBlLCBmaWVsZC50eXBlKSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwiZ2VuZXJpYyByZWNvcmQgZ2V0dGVyIHR5cGUgbWlzbWF0Y2hcIiwgZG9jdW1lbnRlZC5yZXR1cm5UeXBlLmxvY2F0aW9uKVxuICAgIH1cbiAgfSlcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyB0aGUgZXhpc3RpbmcgUEhQIGlmL2Vsc2UgdGVybWluYWwgd2l0aCByZXN0cmljdGVkIGJyYW5jaCBwcmVmaXhlcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5JZn0gbm9kZSAtIFBIUCBpZiBub2RlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7UGhwQ29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBjb252ZXJzaW9uIGNvbnRleHQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuSWZTdGF0ZW1lbnR9IFNlbWFudGljIGJyYW5jaC5cbiAqL1xuZnVuY3Rpb24gY29udmVydElmKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAobm9kZS5zaG9ydEZvcm0pIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBcImFsdGVybmF0aXZlIGlmIHN5bnRheFwiLCBsb2NhdGlvbilcbiAgaWYgKG5vZGUuYm9keS5raW5kICE9IFwiYmxvY2tcIikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwiaWYgd2l0aG91dCBibG9jayBjb25zZXF1ZW50XCIsIGxvY2F0aW9uKVxuICBpZiAobm9kZS50ZXN0LmtpbmQgPT0gXCJ2YXJpYWJsZVwiKSB7XG4gICAgY29uc3QgdGVzdGVkID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLlZhcmlhYmxlfSAqLyAobm9kZS50ZXN0KVxuXG4gICAgaWYgKHR5cGVvZiB0ZXN0ZWQubmFtZSA9PSBcInN0cmluZ1wiICYmIGNvbnRleHQuYmluZGluZ3MuZ2V0KHRlc3RlZC5uYW1lKT8ua2luZCA9PSBcIk9wdGlvbmFsVHlwZVwiKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgXCJvcHRpb25hbCB0cnV0aGluZXNzIGNvbmRpdGlvblwiLCBub2RlTG9jYXRpb24odGVzdGVkLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gIH1cblxuICBjb25zdCBjb25kaXRpb24gPSBjb252ZXJ0RXhwcmVzc2lvbihub2RlLnRlc3QsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gIGNvbnN0IGNvbnNlcXVlbnRDb250ZXh0ID0gey4uLmNvbnRleHQsIGJpbmRpbmdzOiBuZXcgTWFwKGNvbnRleHQuYmluZGluZ3MpfVxuICBjb25zdCBhbHRlcm5hdGVDb250ZXh0ID0gey4uLmNvbnRleHQsIGJpbmRpbmdzOiBuZXcgTWFwKGNvbnRleHQuYmluZGluZ3MpfVxuICBsZXQgYWx0ZXJuYXRlXG5cbiAgaWYgKG5vZGUuYWx0ZXJuYXRlKSB7XG4gICAgaWYgKG5vZGUuYWx0ZXJuYXRlLmtpbmQgPT0gXCJibG9ja1wiKSB7XG4gICAgICBhbHRlcm5hdGUgPSBjb252ZXJ0QmxvY2soLyoqIEB0eXBlIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLkJsb2NrfSAqLyAobm9kZS5hbHRlcm5hdGUpLCBmaWxlbmFtZSwgc291cmNlLCBhbHRlcm5hdGVDb250ZXh0KVxuICAgIH0gZWxzZSBpZiAobm9kZS5hbHRlcm5hdGUua2luZCA9PSBcImlmXCIpIHtcbiAgICAgIGNvbnN0IG5lc3RlZCA9IC8qKiBAdHlwZSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5JZn0gKi8gKG5vZGUuYWx0ZXJuYXRlKVxuXG4gICAgICBhbHRlcm5hdGUgPSB7XG4gICAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkJsb2NrXCIpLFxuICAgICAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKG5lc3RlZCwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICAgIHN0YXRlbWVudHM6IFtjb252ZXJ0SWYobmVzdGVkLCBmaWxlbmFtZSwgc291cmNlLCBhbHRlcm5hdGVDb250ZXh0KV1cbiAgICAgIH1cbiAgICB9IGVsc2UgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIGBpZiBhbHRlcm5hdGUgJHtub2RlLmFsdGVybmF0ZS5raW5kfWAsIG5vZGVMb2NhdGlvbihub2RlLmFsdGVybmF0ZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLihhbHRlcm5hdGUgPyB7YWx0ZXJuYXRlfSA6IHt9KSxcbiAgICBjb25kaXRpb24sXG4gICAgY29uc2VxdWVudDogY29udmVydEJsb2NrKG5vZGUuYm9keSwgZmlsZW5hbWUsIHNvdXJjZSwgY29uc2VxdWVudENvbnRleHQpLFxuICAgIGtpbmQ6IFwiSWZTdGF0ZW1lbnRcIixcbiAgICBsb2NhdGlvblxuICB9XG59XG5cbi8qKlxuICogQ29udmVydHMgZXhhY3QgYnJhY2VkIFBIUCBgd2hpbGUgKCRjb25kaXRpb24pIHsgLi4uIH1gIHN5bnRheC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5XaGlsZX0gbm9kZSAtIFBIUCB3aGlsZSBub2RlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7UGhwQ29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBjb252ZXJzaW9uIGNvbnRleHQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuV2hpbGVTdGF0ZW1lbnR9IFNlbWFudGljIGxvb3AuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRXaGlsZShub2RlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKG5vZGUuc2hvcnRGb3JtKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgXCJhbHRlcm5hdGl2ZSB3aGlsZSBzeW50YXhcIiwgbG9jYXRpb24pXG4gIGlmICghbm9kZS5ib2R5IHx8IG5vZGUuYm9keS5raW5kICE9IFwiYmxvY2tcIikge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBcIndoaWxlIHdpdGhvdXQgYmxvY2sgYm9keVwiLCBub2RlLmJvZHkgPyBub2RlTG9jYXRpb24obm9kZS5ib2R5LCBmaWxlbmFtZSwgc291cmNlKSA6IGxvY2F0aW9uKVxuICB9XG4gIGNvbnN0IGJvZHlDb250ZXh0ID0gey4uLmNvbnRleHQsIGJpbmRpbmdzOiBuZXcgTWFwKGNvbnRleHQuYmluZGluZ3MpfVxuXG4gIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICBib2R5OiBjb252ZXJ0QmxvY2soLyoqIEB0eXBlIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLkJsb2NrfSAqLyAobm9kZS5ib2R5KSwgZmlsZW5hbWUsIHNvdXJjZSwgYm9keUNvbnRleHQpLFxuICAgIGNvbmRpdGlvbjogY29udmVydEV4cHJlc3Npb24obm9kZS50ZXN0LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LCB1bmRlZmluZWQsIHRydWUpLFxuICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIldoaWxlU3RhdGVtZW50XCIpLFxuICAgIGxvY2F0aW9uXG4gIH0sIHtrZXl3b3JkOiB0b2tlbkxvY2F0aW9uKFwid2hpbGVcIiwgbm9kZS5sb2M/LnN0YXJ0Lm9mZnNldCA/PyAwLCBub2RlLnRlc3QubG9jPy5zdGFydC5vZmZzZXQgPz8gc291cmNlLmxlbmd0aCwgZmlsZW5hbWUsIHNvdXJjZSl9KVxufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgUEhQIGVjaG8gZW50cnkgcG9pbnQuXG4gKiBAcGFyYW0ge2ltcG9ydChcInBocC1wYXJzZXJcIikuRWNob30gbm9kZSAtIFBIUCBlY2hvIG5vZGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtQaHBDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5QcmludFN0YXRlbWVudH0gUHJpbnQgc3RhdGVtZW50LlxuICovXG5mdW5jdGlvbiBjb252ZXJ0UHJpbnQobm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmIChub2RlLmV4cHJlc3Npb25zLmxlbmd0aCAhPSAyIHx8IG5vZGUuZXhwcmVzc2lvbnNbMV0ua2luZCAhPSBcIm5hbWVcIiB8fFxuICAgIC8qKiBAdHlwZSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5OYW1lfSAqLyAobm9kZS5leHByZXNzaW9uc1sxXSkubmFtZSAhPSBcIlBIUF9FT0xcIikge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBcImVjaG8gd2l0aG91dCBvbmUgZXhwcmVzc2lvbiBhbmQgUEhQX0VPTFwiLCBsb2NhdGlvbilcbiAgfVxuXG4gIHJldHVybiB7ZXhwcmVzc2lvbjogY29udmVydEV4cHJlc3Npb24obm9kZS5leHByZXNzaW9uc1swXSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCksIGtpbmQ6IFwiUHJpbnRTdGF0ZW1lbnRcIiwgbG9jYXRpb259XG59XG5cbi8qKlxuICogUGFyc2VzIFBIUCBpbnRvIHRoZSBzaGFyZWQgc2VtYW50aWMgbW9kdWxlLlxuICogQHBhcmFtIHtvYmplY3R9IGlucHV0IC0gUGFyc2VyIGlucHV0LlxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0LmZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0LnNvdXJjZSAtIFNvdXJjZSB0ZXh0LlxuICogQHBhcmFtIHtyZWFkb25seSBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RDYXBhYmlsaXR5RGVjbGFyYXRpb25bXX0gW2lucHV0LmNhcGFiaWxpdGllc10gLSBDb21waWxlci1hdXRob3JpemVkIGRlY2xhcmF0aW9ucy5cbiAqIEBwYXJhbSB7e2lzRW50cnk6IGJvb2xlYW4sIGZ1bmN0aW9uczogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRnVuY3Rpb25EZWNsYXJhdGlvbj4sIHJlY29yZHM6IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uPiwgZXJyb3JzPzogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbj59fSBbaW5wdXQucHJvZ3JhbV0gLSBSZXNvbHZlZCBwcm9ncmFtIGltcG9ydHMgYW5kIGVudHJ5IHJvbGUuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IFNlbWFudGljIG1vZHVsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUGhwKHtjYXBhYmlsaXRpZXMgPSBbXSwgZmlsZW5hbWUsIHNvdXJjZSwgcHJvZ3JhbTogcHJvZ3JhbUNvbnRleHR9KSB7XG4gIGNvbnN0IHByb2dyYW0gPSBwYXJzZVBocFByb2dyYW0oZmlsZW5hbWUsIHNvdXJjZSlcbiAgdmFsaWRhdGVEZWNsYXJlTm9kZXMocHJvZ3JhbS5jaGlsZHJlbiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgbGV0IGJvZHkgPSB0YXNrMDM0UGhwQm9keShwcm9ncmFtLmNoaWxkcmVuLCBjYXBhYmlsaXRpZXMsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKHByb2dyYW1Db250ZXh0KSB7XG4gICAgaW5zcGVjdFBocE1vZHVsZSh7ZmlsZW5hbWUsIHNvdXJjZX0pXG4gICAgY29uc3QgbmFtZXNwYWNlID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLk5hbWVzcGFjZX0gKi8gKGJvZHkuZmluZCgobm9kZSkgPT4gbm9kZS5raW5kID09IFwibmFtZXNwYWNlXCIpKVxuXG4gICAgYm9keSA9IG5hbWVzcGFjZS5jaGlsZHJlbi5maWx0ZXIoKG5vZGUpID0+IG5vZGUua2luZCAhPSBcInVzZWdyb3VwXCIgJiYgIWlzUGhwUmVxdWlyZU9uY2Uobm9kZSkpXG4gIH1cbiAgY29uc3QgY2xhc3NOb2RlcyA9IC8qKiBAdHlwZSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5DbGFzc1tdfSAqLyAoYm9keS5maWx0ZXIoKG5vZGUpID0+IG5vZGUua2luZCA9PSBcImNsYXNzXCIpKVxuICBjb25zdCBlcnJvck5vZGVzID0gY2xhc3NOb2Rlcy5maWx0ZXIoKG5vZGUpID0+IG5vZGUuZXh0ZW5kcz8ua2luZCA9PSBcIm5hbWVcIiAmJlxuICAgIFtcIlJ1bnRpbWVFeGNlcHRpb25cIiwgXCJcXFxcUnVudGltZUV4Y2VwdGlvblwiXS5pbmNsdWRlcyhub2RlLmV4dGVuZHMubmFtZSkpXG4gIGNvbnN0IHJlZmVyZW5jZUNsYXNzTm9kZXMgPSBjbGFzc05vZGVzLmZpbHRlcigobm9kZSkgPT4gIWVycm9yTm9kZXMuaW5jbHVkZXMobm9kZSkgJiZcbiAgICBub2RlLmJvZHkuc29tZSgobWVtYmVyKSA9PiBtZW1iZXIua2luZCA9PSBcInByb3BlcnR5c3RhdGVtZW50XCIpKVxuICBjb25zdCByZWNvcmROb2RlcyA9IGNsYXNzTm9kZXMuZmlsdGVyKChub2RlKSA9PiAhZXJyb3JOb2Rlcy5pbmNsdWRlcyhub2RlKSAmJiAhcmVmZXJlbmNlQ2xhc3NOb2Rlcy5pbmNsdWRlcyhub2RlKSlcbiAgY29uc3QgZXJyb3JEZWNsYXJhdGlvbnMgPSBlcnJvck5vZGVzLm1hcCgobm9kZSwgaW5kZXgpID0+ICh7XG4gICAgaWQ6IGBlcnJvcjoke2luZGV4fWAsXG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiRXJyb3JEZWNsYXJhdGlvblwiKSxcbiAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgIG5hbWU6IHR5cGVvZiBub2RlLm5hbWUgPT0gXCJzdHJpbmdcIiA/IG5vZGUubmFtZSA6IG5vZGUubmFtZS5uYW1lXG4gIH0pKVxuICBjb25zdCByZWNvcmREZWNsYXJhdGlvbnMgPSByZWNvcmROb2Rlcy5tYXAoKG5vZGUsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgaWQgPSBgcmVjb3JkOiR7aW5kZXh9YFxuICAgIGNvbnN0IHR5cGVQYXJhbWV0ZXJzID0gY2xhc3NEb2N1bWVudGVkVHlwZVBhcmFtZXRlcnMobm9kZSwgaWQsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICByZXR1cm4ge1xuICAgICAgZmllbGRzOiBbXSxcbiAgICAgIGlkLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUmVjb3JkRGVjbGFyYXRpb25cIiksXG4gICAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgbmFtZTogdHlwZW9mIG5vZGUubmFtZSA9PSBcInN0cmluZ1wiID8gbm9kZS5uYW1lIDogbm9kZS5uYW1lLm5hbWUsXG4gICAgICAuLi4odHlwZVBhcmFtZXRlcnMgPyB7dHlwZVBhcmFtZXRlcnN9IDoge30pXG4gICAgfVxuICB9KVxuICBjb25zdCBjbGFzc0RlY2xhcmF0aW9ucyA9IHJlZmVyZW5jZUNsYXNzTm9kZXMubWFwKChub2RlLCBpbmRleCkgPT4gKHtcbiAgICBjb25zdHJ1Y3RvcjogLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Db25zdHJ1Y3RvckRlY2xhcmF0aW9ufSAqLyAoe30pLFxuICAgIGZpZWxkczogW10sIGlkOiBgY2xhc3M6JHtpbmRleH1gLCBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJDbGFzc0RlY2xhcmF0aW9uXCIpLFxuICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksIG1ldGhvZHM6IFtdLFxuICAgIG5hbWU6IHR5cGVvZiBub2RlLm5hbWUgPT0gXCJzdHJpbmdcIiA/IG5vZGUubmFtZSA6IG5vZGUubmFtZS5uYW1lXG4gIH0pKVxuICBjb25zdCByZWNvcmROYW1lcyA9IC8qKiBAdHlwZSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59ICovIChcbiAgICBuZXcgTWFwKHByb2dyYW1Db250ZXh0Py5yZWNvcmRzID8/IFtdKSlcbiAgZm9yIChjb25zdCByZXNvdXJjZSBvZiBjYXBhYmlsaXRpZXMuZmxhdE1hcCgoe3Jlc291cmNlc30pID0+IHJlc291cmNlcykpIHJlY29yZE5hbWVzLnNldChyZXNvdXJjZS5uYW1lLCByZXNvdXJjZSlcbiAgY29uc3QgZXJyb3JOYW1lcyA9IG5ldyBNYXAocHJvZ3JhbUNvbnRleHQ/LmVycm9ycyA/PyBbXSlcbiAgZm9yIChjb25zdCBmYWlsdXJlIG9mIGNhcGFiaWxpdGllcy5mbGF0TWFwKCh7ZmFpbHVyZXN9KSA9PiBmYWlsdXJlcykpIHtcbiAgICBlcnJvck5hbWVzLnNldChmYWlsdXJlLm5hbWUsIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbn0gKi8gKC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gKGZhaWx1cmUpKSlcbiAgfVxuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIGVycm9yRGVjbGFyYXRpb25zKSBlcnJvck5hbWVzLnNldChkZWNsYXJhdGlvbi5uYW1lLCBkZWNsYXJhdGlvbilcbiAgY29uc3QgZXJyb3JzQnlJZCA9IG5ldyBNYXAoWy4uLmVycm9yTmFtZXMudmFsdWVzKCldLm1hcCgoZGVjbGFyYXRpb24pID0+IFsvKiogQHR5cGUge3N0cmluZ30gKi8gKGRlY2xhcmF0aW9uLmlkKSwgZGVjbGFyYXRpb25dKSlcbiAgY29uc3QgZXJyb3JzID0gZXJyb3JOb2Rlcy5tYXAoKG5vZGUsIGluZGV4KSA9PiBjb252ZXJ0UGhwRXJyb3Iobm9kZSwgZXJyb3JEZWNsYXJhdGlvbnNbaW5kZXhdLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiByZWNvcmREZWNsYXJhdGlvbnMpIHJlY29yZE5hbWVzLnNldChkZWNsYXJhdGlvbi5uYW1lLCBkZWNsYXJhdGlvbilcbiAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiBjbGFzc0RlY2xhcmF0aW9ucykgcmVjb3JkTmFtZXMuc2V0KGRlY2xhcmF0aW9uLm5hbWUsIGRlY2xhcmF0aW9uKVxuICBjb25zdCByZWNvcmRzQnlJZCA9IG5ldyBNYXAoWy4uLnJlY29yZE5hbWVzLnZhbHVlcygpXVxuICAgIC5maWx0ZXIoKGRlY2xhcmF0aW9uKSA9PiBkZWNsYXJhdGlvbi5raW5kID09IFwiUmVjb3JkRGVjbGFyYXRpb25cIilcbiAgICAubWFwKChkZWNsYXJhdGlvbikgPT4gWy8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZGVjbGFyYXRpb24uaWQpLCBkZWNsYXJhdGlvbl0pKVxuICBjb25zdCBjbGFzc2VzQnlJZCA9IG5ldyBNYXAoY2xhc3NEZWNsYXJhdGlvbnMubWFwKChkZWNsYXJhdGlvbikgPT4gWy8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZGVjbGFyYXRpb24uaWQpLCBkZWNsYXJhdGlvbl0pKVxuICBjb25zdCByZWNvcmRzID0gcmVjb3JkTm9kZXMubWFwKChub2RlLCBpbmRleCkgPT4gY29udmVydFBocFJlY29yZChub2RlLCByZWNvcmREZWNsYXJhdGlvbnNbaW5kZXhdLFxuICAgIC8qKiBAdHlwZSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24+fSAqLyAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyAocmVjb3JkTmFtZXMpKSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIGNvbnN0IGZ1bmN0aW9uTm9kZXMgPSAvKiogQHR5cGUge2ltcG9ydChcInBocC1wYXJzZXJcIikuRnVuY3Rpb25bXX0gKi8gKGJvZHkuZmlsdGVyKChub2RlKSA9PiBub2RlLmtpbmQgPT0gXCJmdW5jdGlvblwiKSlcbiAgY29uc3Qgc2lnbmF0dXJlcyA9IGZ1bmN0aW9uTm9kZXMubWFwKChub2RlLCBpbmRleCkgPT4gY29udmVydEZ1bmN0aW9uU2lnbmF0dXJlKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIHJlY29yZE5hbWVzLCBgZnVuY3Rpb246JHtpbmRleH1gKSlcbiAgY29uc3QgZnVuY3Rpb25TaWduYXR1cmVzID0gbmV3IE1hcChbLi4uY2FwYWJpbGl0eUZ1bmN0aW9uU2lnbmF0dXJlcyhjYXBhYmlsaXRpZXMsIG1vZHVsZUxvY2F0aW9uKGZpbGVuYW1lLCBzb3VyY2UpKSxcbiAgICAuLi4ocHJvZ3JhbUNvbnRleHQ/LmZ1bmN0aW9ucyA/PyBbXSldLm1hcCgoW2xvY2FsTmFtZSwgZGVjbGFyYXRpb25dKSA9PiBbbG9jYWxOYW1lLCB7XG4gICAgbG9jYXRpb246IGRlY2xhcmF0aW9uLmxvY2F0aW9uLFxuICAgIG5hbWU6IGxvY2FsTmFtZSxcbiAgICBuYW1lTG9jYXRpb246IGRlY2xhcmF0aW9uLmxvY2F0aW9uLFxuICAgIHBhcmFtZXRlcnM6IGRlY2xhcmF0aW9uLnBhcmFtZXRlcnMsXG4gICAgcmV0dXJuVHlwZTogZGVjbGFyYXRpb24ucmV0dXJuVHlwZSxcbiAgICAuLi4oZGVjbGFyYXRpb24udHlwZVBhcmFtZXRlcnMgPyB7dHlwZVBhcmFtZXRlcnM6IGRlY2xhcmF0aW9uLnR5cGVQYXJhbWV0ZXJzfSA6IHt9KVxuICB9XSkpXG4gIGZvciAoY29uc3Qgc2lnbmF0dXJlIG9mIHNpZ25hdHVyZXMpIGZ1bmN0aW9uU2lnbmF0dXJlcy5zZXQoc2lnbmF0dXJlLm5hbWUsIHNpZ25hdHVyZSlcbiAgY29uc3QgY2xhc3NlcyA9IHJlZmVyZW5jZUNsYXNzTm9kZXMubWFwKChub2RlLCBpbmRleCkgPT4gY29udmVydFBocFJlZmVyZW5jZUNsYXNzKG5vZGUsIGNsYXNzRGVjbGFyYXRpb25zW2luZGV4XSxcbiAgICByZWNvcmROYW1lcywgcmVjb3Jkc0J5SWQsIGNsYXNzZXNCeUlkLCBmdW5jdGlvblNpZ25hdHVyZXMsIGVycm9yTmFtZXMsIGVycm9yc0J5SWQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICBjb25zdCBmdW5jdGlvbnMgPSBmdW5jdGlvbk5vZGVzLm1hcCgobm9kZSwgaW5kZXgpID0+XG4gICAgY29udmVydEZ1bmN0aW9uKG5vZGUsIHNpZ25hdHVyZXNbaW5kZXhdLCBmdW5jdGlvblNpZ25hdHVyZXMsIHJlY29yZE5hbWVzLCByZWNvcmRzQnlJZCwgY2xhc3Nlc0J5SWQsIGVycm9yTmFtZXMsIGVycm9yc0J5SWQsXG4gICAgICBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3QgZXhlY3V0YWJsZU5vZGVzID0gYm9keS5maWx0ZXIoKG5vZGUpID0+ICFbXCJjbGFzc1wiLCBcImZ1bmN0aW9uXCIsIFwiZGVjbGFyZVwiLCBcIm5vb3BcIl0uaW5jbHVkZXMobm9kZS5raW5kKSlcbiAgY29uc3QgbG9jYXRpb24gPSBtb2R1bGVMb2NhdGlvbihmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmIChwcm9ncmFtQ29udGV4dCAmJiAhcHJvZ3JhbUNvbnRleHQuaXNFbnRyeSAmJiBleGVjdXRhYmxlTm9kZXMubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBcInRvcC1sZXZlbCBzaWRlIGVmZmVjdCBvdXRzaWRlIHRoZSBzZWxlY3RlZCBlbnRyeSBtb2R1bGVcIiwgbm9kZUxvY2F0aW9uKGV4ZWN1dGFibGVOb2Rlc1swXSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgZmlyc3QgPSBleGVjdXRhYmxlTm9kZXNbMF1cbiAgY29uc3QgbGFzdCA9IGV4ZWN1dGFibGVOb2Rlcy5hdCgtMSkgPz8gZmlyc3RcbiAgY29uc3QgZW50cnlMb2NhdGlvbiA9IGZpcnN0XG4gICAgPyBsb2NhdGlvbkZyb21PZmZzZXRzKGZpbGVuYW1lLCBzb3VyY2UsIGZpcnN0LmxvYz8uc3RhcnQub2Zmc2V0ID8/IDAsIGxhc3Q/LmxvYz8uZW5kLm9mZnNldCA/PyBzb3VyY2UubGVuZ3RoKVxuICAgIDogbG9jYXRpb25cbiAgY29uc3QgZW50cnlDb250ZXh0ID0ge1xuICAgIGJpbmRpbmdzOiBuZXcgTWFwKCksXG4gICAgY2xhc3NlczogY2xhc3Nlc0J5SWQsXG4gICAgZXJyb3JOYW1lcyxcbiAgICBlcnJvcnM6IGVycm9yc0J5SWQsXG4gICAgZnVuY3Rpb25zOiBmdW5jdGlvblNpZ25hdHVyZXMsXG4gICAgb3JkZXJlZE1hcERlY2xhcmF0aW9uczogb3JkZXJlZE1hcERlY2xhcmF0aW9uc0ZvclBocChleGVjdXRhYmxlTm9kZXMpLFxuICAgIHJlY29yZE5hbWVzLFxuICAgIHJlY29yZHM6IHJlY29yZHNCeUlkLFxuICAgIHJldHVyblR5cGU6IHVuZGVmaW5lZFxuICB9XG4gIGNvbnN0IGVudHJ5QmxvY2sgPSB7XG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiQmxvY2tcIiksXG4gICAgbG9jYXRpb246IGVudHJ5TG9jYXRpb24sXG4gICAgc3RhdGVtZW50czogZXhlY3V0YWJsZU5vZGVzLm1hcCgobm9kZSkgPT4gY29udmVydFN0YXRlbWVudChub2RlLCBmaWxlbmFtZSwgc291cmNlLCBlbnRyeUNvbnRleHQpKVxuICB9XG5cbiAgaWYgKCFwcm9ncmFtQ29udGV4dCAmJiBmdW5jdGlvbnMubGVuZ3RoID09IDAgJiYgY2FwYWJpbGl0aWVzLmxlbmd0aCA9PSAwICYmICFibG9ja1JlZmVyZW5jZXNQcm90ZWN0ZWRFbnRyeShlbnRyeUJsb2NrKSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBcIm1vZHVsZSB3aXRob3V0IGEgZnVuY3Rpb25cIiwgbG9jYXRpb24pXG4gIH1cbiAgcmV0dXJuIHtcbiAgICBlbnRyeVBvaW50OiB7XG4gICAgICBib2R5OiBlbnRyeUJsb2NrLFxuICAgICAga2luZDogXCJFbnRyeVBvaW50XCIsXG4gICAgICBsb2NhdGlvbjogZW50cnlMb2NhdGlvblxuICAgIH0sXG4gICAgZnVuY3Rpb25zLFxuICAgIGtpbmQ6IFwiTW9kdWxlXCIsXG4gICAgbG9jYXRpb24sXG4gICAgLi4uKGVycm9ycy5sZW5ndGggPiAwID8ge2Vycm9yc30gOiB7fSksXG4gICAgLi4uKGNsYXNzZXMubGVuZ3RoID4gMCA/IHtjbGFzc2VzfSA6IHt9KSxcbiAgICAuLi4ocmVjb3Jkcy5sZW5ndGggPiAwID8ge3JlY29yZHN9IDoge30pXG4gIH1cbn1cblxuLyoqXG4gKiBSZW1vdmVzIGV4YWN0IHByb3RlY3RlZCBQSFAgcHJvYmUgc3VwcG9ydCBiZWZvcmUgcG9ydGFibGUgY29udmVyc2lvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5TdGF0ZW1lbnRbXX0gYm9keSAtIFBhcnNlZCB0b3AtbGV2ZWwgc3RhdGVtZW50cy5cbiAqIEBwYXJhbSB7cmVhZG9ubHkgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0Q2FwYWJpbGl0eURlY2xhcmF0aW9uW119IGNhcGFiaWxpdGllcyAtIEF1dGhvcml6ZWQgZGVjbGFyYXRpb25zLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLlN0YXRlbWVudFtdfSBQb3J0YWJsZSBzdGF0ZW1lbnRzLlxuICovXG5mdW5jdGlvbiB0YXNrMDM0UGhwQm9keShib2R5LCBjYXBhYmlsaXRpZXMsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgaWYgKCFpc1Rhc2swMzRSZXNvdXJjZVByb2JlKGNhcGFiaWxpdGllcykpIHJldHVybiBib2R5XG4gIGNvbnN0IHN0YXJ0ID0gYm9keS5maW5kSW5kZXgoKG5vZGUpID0+IG5vZGUubGVhZGluZ0NvbW1lbnRzPy5zb21lKCh7dmFsdWV9KSA9PiB2YWx1ZSA9PSBcIi8qIHNlbWFudGlmb2xkLXRhc2swMzQtc3VwcG9ydCAqL1wiKSlcblxuICBpZiAoc3RhcnQgPCAwKSByZXR1cm4gYm9keVxuICBpZiAoIWhhc0V4YWN0RWZmZWN0U3VwcG9ydChzb3VyY2UsIFwicGhwXCIpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwibWFsZm9ybWVkIHByb3RlY3RlZCBUYXNrIDAzNCBzdXBwb3J0XCIsIG5vZGVMb2NhdGlvbihib2R5W3N0YXJ0XSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgZXhwZWN0ZWQgPSBbXG4gICAgW1wiY2xhc3NcIiwgXCJQcm9iZU9wZXJhdGlvbkZhaWx1cmVcIl0sIFtcImNsYXNzXCIsIFwiUHJvYmVBY3F1aXJlRmFpbHVyZVwiXSwgW1wiY2xhc3NcIiwgXCJQcm9iZVJlYWRGYWlsdXJlXCJdLFxuICAgIFtcImNsYXNzXCIsIFwiUHJvYmVDbG9zZUZhaWx1cmVcIl0sIFtcImNsYXNzXCIsIFwiUHJvYmVSZXNvdXJjZUNsb3NlZFwiXSwgW1wiY2xhc3NcIiwgXCJQcm9iZVJlc291cmNlXCJdLFxuICAgIFtcImV4cHJlc3Npb25zdGF0ZW1lbnRcIiwgdW5kZWZpbmVkXSwgW1wiZnVuY3Rpb25cIiwgXCJwcm9iZUVmZmVjdFwiXSwgW1wiZnVuY3Rpb25cIiwgXCJwcm9iZUFjcXVpcmVcIl0sXG4gICAgW1wiZnVuY3Rpb25cIiwgXCJwcm9iZVJlYWRcIl0sIFtcImZ1bmN0aW9uXCIsIFwicHJvYmVDbG9zZVwiXSwgW1wiZnVuY3Rpb25cIiwgXCJwcm9iZVRyYWNlXCJdXG4gIF1cbiAgY29uc3QgbWF0Y2hlcyA9IGV4cGVjdGVkLmV2ZXJ5KChba2luZCwgbmFtZV0sIGluZGV4KSA9PiB7XG4gICAgY29uc3Qgbm9kZSA9IGJvZHlbc3RhcnQgKyBpbmRleF1cbiAgICBjb25zdCByYXdOYW1lID0gbm9kZSA/IFJlZmxlY3QuZ2V0KG5vZGUsIFwibmFtZVwiKSA6IHVuZGVmaW5lZFxuICAgIGNvbnN0IGFjdHVhbE5hbWUgPSB0eXBlb2YgcmF3TmFtZSA9PSBcInN0cmluZ1wiID8gcmF3TmFtZSA6IHJhd05hbWUgJiYgdHlwZW9mIHJhd05hbWUgPT0gXCJvYmplY3RcIiA/IFJlZmxlY3QuZ2V0KHJhd05hbWUsIFwibmFtZVwiKSA6IHVuZGVmaW5lZFxuICAgIHJldHVybiBub2RlPy5raW5kID09IGtpbmQgJiYgYWN0dWFsTmFtZSA9PSBuYW1lXG4gIH0pXG4gIGNvbnN0IG5leHQgPSBib2R5W3N0YXJ0ICsgZXhwZWN0ZWQubGVuZ3RoXVxuXG4gIGlmICghbWF0Y2hlcyB8fCBuZXh0ICYmICFuZXh0LmxlYWRpbmdDb21tZW50cz8uc29tZSgoe3ZhbHVlfSkgPT4gdmFsdWUgPT0gXCIvKiBzZW1hbnRpZm9sZC10YXNrMDM0LXN1cHBvcnQtZW5kICovXCIpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwibWFsZm9ybWVkIHByb3RlY3RlZCBUYXNrIDAzNCBzdXBwb3J0XCIsIG5vZGVMb2NhdGlvbihib2R5W3N0YXJ0XSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgcmV0dXJuIFsuLi5ib2R5LnNsaWNlKDAsIHN0YXJ0KSwgLi4uYm9keS5zbGljZShzdGFydCArIGV4cGVjdGVkLmxlbmd0aCldXG59XG5cbi8qKlxuICogUmVhZHMgdGhlIGNhbm9uaWNhbCBwYXJzZXItb3duZWQgUEhQIG5hbWVzcGFjZSwgdXNlIGJpbmRpbmdzLCBhbmQgbGl0ZXJhbCByZXF1aXJlX29uY2UgZWRnZXMuXG4gKiBAcGFyYW0ge29iamVjdH0gaW5wdXQgLSBQYXJzZXIgaW5wdXQuXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXQuZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXQuc291cmNlIC0gU291cmNlIHRleHQuXG4gKiBAcmV0dXJucyB7e2JpbmRpbmdzOiB7aW1wb3J0ZWROYW1lOiBzdHJpbmcsIGxvY2FsTmFtZTogc3RyaW5nLCBsb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIG5hdGl2ZU5hbWU6IHN0cmluZywgc3ltYm9sS2luZDogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNEZWNsYXJhdGlvbktpbmQsIHR5cGVPbmx5OiBmYWxzZX1bXSwgaW1wb3J0czoge2ltcG9ydGVkTmFtZTogc3RyaW5nLCBsb2NhbE5hbWU6IHN0cmluZywgbG9jYXRpb246IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCBuYW1lc3BhY2U6IHRydWUsIHBhdGhMb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIHNwZWNpZmllcjogc3RyaW5nLCB0eXBlT25seTogZmFsc2V9W10sIGV4cG9ydHM6IHtleHBvcnRlZE5hbWU6IHN0cmluZywgbG9jYWxOYW1lOiBzdHJpbmcsIGxvY2F0aW9uOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiwgdHlwZU9ubHk6IGZhbHNlfVtdLCBuYXRpdmVOYW1lOiBzdHJpbmd9fSBQYXJzZXItb3duZWQgUEhQIG1vZHVsZSBoZWFkZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnNwZWN0UGhwTW9kdWxlKHtmaWxlbmFtZSwgc291cmNlfSkge1xuICBjb25zdCBwcm9ncmFtID0gcGFyc2VQaHBQcm9ncmFtKGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgdmFsaWRhdGVEZWNsYXJlTm9kZXMocHJvZ3JhbS5jaGlsZHJlbiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgbmFtZXNwYWNlcyA9IHByb2dyYW0uY2hpbGRyZW4uZmlsdGVyKChub2RlKSA9PiBub2RlLmtpbmQgPT0gXCJuYW1lc3BhY2VcIilcbiAgY29uc3QgaW52YWxpZE91dGVyID0gcHJvZ3JhbS5jaGlsZHJlbi5maW5kKChub2RlKSA9PiAhW1wiZGVjbGFyZVwiLCBcIm5hbWVzcGFjZVwiLCBcIm5vb3BcIl0uaW5jbHVkZXMobm9kZS5raW5kKSlcbiAgY29uc3QgbmFtZXNwYWNlID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLk5hbWVzcGFjZSB8IHVuZGVmaW5lZH0gKi8gKG5hbWVzcGFjZXNbMF0pXG5cbiAgaWYgKCFuYW1lc3BhY2UgfHwgbmFtZXNwYWNlcy5sZW5ndGggIT0gMSB8fCBuYW1lc3BhY2Uud2l0aEJyYWNrZXRzIHx8IHR5cGVvZiBuYW1lc3BhY2UubmFtZSAhPSBcInN0cmluZ1wiIHx8IGludmFsaWRPdXRlcikge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBcIm9uZSBjYW5vbmljYWwgdW5icmFja2V0ZWQgbmFtZXNwYWNlXCIsXG4gICAgICBub2RlTG9jYXRpb24oaW52YWxpZE91dGVyID8/IG5hbWVzcGFjZXNbMV0gPz8gbmFtZXNwYWNlID8/IHByb2dyYW0sIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGNvbnN0IGJpbmRpbmdzID0gW11cblxuICBmb3IgKGNvbnN0IG5vZGUgb2YgbmFtZXNwYWNlLmNoaWxkcmVuLmZpbHRlcigoY2hpbGQpID0+IGNoaWxkLmtpbmQgPT0gXCJ1c2Vncm91cFwiKSkge1xuICAgIGNvbnN0IGdyb3VwID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLlVzZUdyb3VwfSAqLyAobm9kZSlcblxuICAgIGlmIChncm91cC5uYW1lICE9PSBudWxsIHx8ICFbbnVsbCwgXCJmdW5jdGlvblwiXS5pbmNsdWRlcyhncm91cC50eXBlKSB8fCBncm91cC5pdGVtcy5sZW5ndGggPT0gMCkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwiZ3JvdXBlZCwgY29uc3RhbnQsIG9yIGVtcHR5IHVzZSBkZWNsYXJhdGlvblwiLCBub2RlTG9jYXRpb24oZ3JvdXAsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZ3JvdXAuaXRlbXMpIHtcbiAgICAgIGlmIChpdGVtLnR5cGUgIT09IG51bGwgfHwgdHlwZW9mIGl0ZW0ubmFtZSAhPSBcInN0cmluZ1wiIHx8ICFpdGVtLm5hbWUuaW5jbHVkZXMoXCJcXFxcXCIpKSB7XG4gICAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBcImdyb3VwZWQgb3IgdW5xdWFsaWZpZWQgdXNlIGl0ZW1cIiwgbm9kZUxvY2F0aW9uKGl0ZW0sIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgfVxuICAgICAgY29uc3QgaW1wb3J0ZWROYW1lID0gaXRlbS5uYW1lLnNwbGl0KFwiXFxcXFwiKS5hdCgtMSlcbiAgICAgIGNvbnN0IGFsaWFzID0gaXRlbS5hbGlhc1xuXG4gICAgICBpZiAoIWltcG9ydGVkTmFtZSB8fCBhbGlhcyAmJiBhbGlhcy5raW5kICE9IFwiaWRlbnRpZmllclwiKSB7XG4gICAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBcImludmFsaWQgdXNlIGFsaWFzXCIsIG5vZGVMb2NhdGlvbihpdGVtLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgIH1cbiAgICAgIGJpbmRpbmdzLnB1c2goe1xuICAgICAgICBpbXBvcnRlZE5hbWUsXG4gICAgICAgIGxvY2FsTmFtZTogYWxpYXMgPyBhbGlhcy5uYW1lIDogaW1wb3J0ZWROYW1lLFxuICAgICAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKGl0ZW0sIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgICBuYXRpdmVOYW1lOiBpdGVtLm5hbWUsXG4gICAgICAgIHN5bWJvbEtpbmQ6IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNEZWNsYXJhdGlvbktpbmR9ICovIChncm91cC50eXBlID09IFwiZnVuY3Rpb25cIiA/IFwiZnVuY3Rpb25cIiA6IFwicmVjb3JkXCIpLFxuICAgICAgICB0eXBlT25seTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKGZhbHNlKVxuICAgICAgfSlcbiAgICB9XG4gIH1cbiAgY29uc3QgaW1wb3J0cyA9IG5hbWVzcGFjZS5jaGlsZHJlbi5maWx0ZXIoaXNQaHBJbmNsdWRlU3RhdGVtZW50KS5tYXAoKG5vZGUpID0+IHtcbiAgICBpZiAoIWlzUGhwUmVxdWlyZU9uY2Uobm9kZSkpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBcImluY2x1ZGUvcmVxdWlyZSBvdXRzaWRlIGxpdGVyYWwgcmVxdWlyZV9vbmNlIF9fRElSX18gcHJvZmlsZVwiLCBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIGNvbnN0IHN0YXRlbWVudCA9IC8qKiBAdHlwZSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5FeHByZXNzaW9uU3RhdGVtZW50fSAqLyAobm9kZSlcbiAgICBjb25zdCBpbmNsdWRlID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLkluY2x1ZGV9ICovIChzdGF0ZW1lbnQuZXhwcmVzc2lvbilcbiAgICBjb25zdCB0YXJnZXQgPSAvKiogQHR5cGUge2ltcG9ydChcInBocC1wYXJzZXJcIikuQmlufSAqLyAoaW5jbHVkZS50YXJnZXQpXG4gICAgY29uc3QgcGF0aCA9IC8qKiBAdHlwZSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5TdHJpbmd9ICovICh0YXJnZXQucmlnaHQpXG5cbiAgICBpZiAoIXBhdGgudmFsdWUuc3RhcnRzV2l0aChcIi9cIikgfHwgcGF0aC52YWx1ZS5pbmNsdWRlcyhcIlxcMFwiKSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwidW5zYWZlIHJlcXVpcmVfb25jZSBwYXRoXCIsIG5vZGVMb2NhdGlvbihwYXRoLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgaW1wb3J0ZWROYW1lOiBcIipcIixcbiAgICAgIGxvY2FsTmFtZTogXCJcIixcbiAgICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICBuYW1lc3BhY2U6IC8qKiBAdHlwZSB7Y29uc3R9ICovICh0cnVlKSxcbiAgICAgIHBhdGhMb2NhdGlvbjogbm9kZUxvY2F0aW9uKHBhdGgsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgc3BlY2lmaWVyOiBgLiR7cGF0aC52YWx1ZX1gLFxuICAgICAgdHlwZU9ubHk6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChmYWxzZSlcbiAgICB9XG4gIH0pXG4gIGNvbnN0IGV4cG9ydHMgPSBuYW1lc3BhY2UuY2hpbGRyZW4uZmxhdE1hcCgobm9kZSkgPT4ge1xuICAgIGlmIChub2RlLmtpbmQgIT0gXCJjbGFzc1wiICYmIG5vZGUua2luZCAhPSBcImZ1bmN0aW9uXCIpIHJldHVybiBbXVxuICAgIGNvbnN0IGRlY2xhcmF0aW9uID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLkNsYXNzIHwgaW1wb3J0KFwicGhwLXBhcnNlclwiKS5GdW5jdGlvbn0gKi8gKG5vZGUpXG4gICAgY29uc3QgbmFtZSA9IHR5cGVvZiBkZWNsYXJhdGlvbi5uYW1lID09IFwic3RyaW5nXCIgPyBkZWNsYXJhdGlvbi5uYW1lIDogZGVjbGFyYXRpb24ubmFtZS5uYW1lXG5cbiAgICByZXR1cm4gW3tleHBvcnRlZE5hbWU6IG5hbWUsIGxvY2FsTmFtZTogbmFtZSwgbG9jYXRpb246IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSwgdHlwZU9ubHk6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChmYWxzZSl9XVxuICB9KVxuXG4gIHJldHVybiB7YmluZGluZ3MsIGV4cG9ydHMsIGltcG9ydHMsIG5hdGl2ZU5hbWU6IG5hbWVzcGFjZS5uYW1lfVxufVxuXG4vKipcbiAqIFJlcG9ydHMgd2hldGhlciBhIFBIUCBzdGF0ZW1lbnQgaXMgYW55IGluY2x1ZGUvcmVxdWlyZSBleHByZXNzaW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLk5vZGV9IG5vZGUgLSBDYW5kaWRhdGUgc3RhdGVtZW50LlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIG5vZGUgaXMgYW4gaW5jbHVkZSBleHByZXNzaW9uIHN0YXRlbWVudC5cbiAqL1xuZnVuY3Rpb24gaXNQaHBJbmNsdWRlU3RhdGVtZW50KG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUua2luZCA9PSBcImV4cHJlc3Npb25zdGF0ZW1lbnRcIiAmJlxuICAgIC8qKiBAdHlwZSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5FeHByZXNzaW9uU3RhdGVtZW50fSAqLyAobm9kZSkuZXhwcmVzc2lvbi5raW5kID09IFwiaW5jbHVkZVwiXG59XG5cbi8qKlxuICogUmVwb3J0cyB3aGV0aGVyIGEgUEhQIHN0YXRlbWVudCBpcyB0aGUgY2Fub25pY2FsIGxpdGVyYWwgcHJvamVjdCBsb2FkIGVkZ2UuXG4gKiBAcGFyYW0ge2ltcG9ydChcInBocC1wYXJzZXJcIikuTm9kZX0gbm9kZSAtIENhbmRpZGF0ZSBzdGF0ZW1lbnQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGUgbm9kZSBpcyBhIHN1cHBvcnRlZCByZXF1aXJlLW9uY2Ugc3RhdGVtZW50LlxuICovXG5mdW5jdGlvbiBpc1BocFJlcXVpcmVPbmNlKG5vZGUpIHtcbiAgaWYgKCFpc1BocEluY2x1ZGVTdGF0ZW1lbnQobm9kZSkpIHJldHVybiBmYWxzZVxuICBjb25zdCBzdGF0ZW1lbnQgPSAvKiogQHR5cGUge2ltcG9ydChcInBocC1wYXJzZXJcIikuRXhwcmVzc2lvblN0YXRlbWVudH0gKi8gKG5vZGUpXG4gIGNvbnN0IGluY2x1ZGUgPSAvKiogQHR5cGUge2ltcG9ydChcInBocC1wYXJzZXJcIikuSW5jbHVkZX0gKi8gKHN0YXRlbWVudC5leHByZXNzaW9uKVxuICBjb25zdCB0YXJnZXQgPSBpbmNsdWRlLnRhcmdldC5raW5kID09IFwiYmluXCIgPyAvKiogQHR5cGUge2ltcG9ydChcInBocC1wYXJzZXJcIikuQmlufSAqLyAoaW5jbHVkZS50YXJnZXQpIDogdW5kZWZpbmVkXG4gIGNvbnN0IGxlZnQgPSB0YXJnZXQ/LmxlZnQua2luZCA9PSBcIm1hZ2ljXCIgPyAvKiogQHR5cGUge2ltcG9ydChcInBocC1wYXJzZXJcIikuTWFnaWN9ICovICh0YXJnZXQubGVmdCkgOiB1bmRlZmluZWRcblxuICByZXR1cm4gaW5jbHVkZS5vbmNlICYmIGluY2x1ZGUucmVxdWlyZSAmJiB0YXJnZXQ/LnR5cGUgPT0gXCIuXCIgJiZcbiAgICBsZWZ0Py52YWx1ZSA9PSBcIl9fRElSX19cIiAmJiB0YXJnZXQucmlnaHQua2luZCA9PSBcInN0cmluZ1wiXG59XG5cbi8qKlxuICogQWNjZXB0cyBvbmx5IGFuIG9wdGlvbmFsIHNpbmdsZSBgZGVjbGFyZShzdHJpY3RfdHlwZXM9MSlgIGRpcmVjdGl2ZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5Ob2RlW119IG5vZGVzIC0gVG9wLWxldmVsIFBIUCBub2Rlcy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVEZWNsYXJlTm9kZXMobm9kZXMsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgY29uc3QgZGVjbGFyYXRpb25zID0gbm9kZXMuZmlsdGVyKChub2RlKSA9PiBub2RlLmtpbmQgPT0gXCJkZWNsYXJlXCIpXG5cbiAgaWYgKGRlY2xhcmF0aW9ucy5sZW5ndGggPiAxKSB7XG4gICAgdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgXCJtdWx0aXBsZSBkZWNsYXJlIGRpcmVjdGl2ZXNcIiwgbm9kZUxvY2F0aW9uKGRlY2xhcmF0aW9uc1sxXSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cblxuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uTm9kZSBvZiBkZWNsYXJhdGlvbnMpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbiA9IC8qKiBAdHlwZSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5EZWNsYXJlfSAqLyAoZGVjbGFyYXRpb25Ob2RlKVxuICAgIGNvbnN0IGRpcmVjdGl2ZSA9IGRlY2xhcmF0aW9uLmRpcmVjdGl2ZXNbMF1cbiAgICBjb25zdCBrZXkgPSBkaXJlY3RpdmU/LmtleVxuICAgIGNvbnN0IHZhbHVlID0gZGlyZWN0aXZlPy52YWx1ZVxuICAgIGNvbnN0IG51bWVyaWNWYWx1ZSA9IHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PSBcIm9iamVjdFwiICYmIHZhbHVlLmtpbmQgPT0gXCJudW1iZXJcIlxuICAgICAgPyAvKiogQHR5cGUge2ltcG9ydChcInBocC1wYXJzZXJcIikuTnVtYmVyfSAqLyAodmFsdWUpXG4gICAgICA6IHVuZGVmaW5lZFxuICAgIGNvbnN0IHZhbHVlSXNPbmUgPSBudW1lcmljVmFsdWU/LmxvYyAmJiBzb3VyY2Uuc2xpY2UobnVtZXJpY1ZhbHVlLmxvYy5zdGFydC5vZmZzZXQsIG51bWVyaWNWYWx1ZS5sb2MuZW5kLm9mZnNldCkgPT0gXCIxXCJcbiAgICBjb25zdCB2YWxpZCA9IGRlY2xhcmF0aW9uLm1vZGUgPT0gXCJub25lXCIgJiYgZGVjbGFyYXRpb24uY2hpbGRyZW4ubGVuZ3RoID09IDAgJiYgZGVjbGFyYXRpb24uZGlyZWN0aXZlcy5sZW5ndGggPT0gMSAmJlxuICAgICAga2V5LmtpbmQgPT0gXCJpZGVudGlmaWVyXCIgJiYga2V5Lm5hbWUgPT0gXCJzdHJpY3RfdHlwZXNcIiAmJiB2YWx1ZUlzT25lXG5cbiAgICBpZiAoIXZhbGlkKSB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBcImRlY2xhcmUgb3RoZXIgdGhhbiBzdHJpY3RfdHlwZXM9MVwiLCBub2RlTG9jYXRpb24oZGVjbGFyYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG59XG5cbi8qKlxuICogSW52b2tlcyBwaHAtcGFyc2VyIGFuZCBub3JtYWxpemVzIHN5bnRheCBmYWlsdXJlcy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBTb3VyY2UgdGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLlByb2dyYW19IFBIUCBwcm9ncmFtLlxuICovXG5mdW5jdGlvbiBwYXJzZVBocFByb2dyYW0oZmlsZW5hbWUsIHNvdXJjZSkge1xuICB0cnkge1xuICAgIHJldHVybiBwYXJzZXIucGFyc2VDb2RlKHNvdXJjZSwgZmlsZW5hbWUpXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHBhcnNlRmFpbHVyZShcInBocFwiLCBlcnJvciwgcGhwUGFyc2VyRmFpbHVyZUxvY2F0aW9uKGVycm9yLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgcGhwLXBhcnNlcidzIG9uZS1iYXNlZCBsaW5lIGFuZCB6ZXJvLWJhc2VkIGNvbHVtbiB3aGVuIHByZXNlbnQuXG4gKiBBIG1vZHVsZSByYW5nZSByZW1haW5zIHRoZSBkZXRlcm1pbmlzdGljIGZhbGxiYWNrIGZvciBvcGFxdWUgcGFyc2VyIGVycm9ycy5cbiAqIEBwYXJhbSB7dW5rbm93bn0gZXJyb3IgLSBOYXRpdmUgcGFyc2VyIGVycm9yLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gUmVxdWVzdGVkIHNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IEZhaWx1cmUgcmFuZ2UuXG4gKi9cbmZ1bmN0aW9uIHBocFBhcnNlckZhaWx1cmVMb2NhdGlvbihlcnJvciwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBpZiAoIWVycm9yIHx8IHR5cGVvZiBlcnJvciAhPSBcIm9iamVjdFwiKSByZXR1cm4gbW9kdWxlTG9jYXRpb24oZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgbGluZSA9IFJlZmxlY3QuZ2V0KGVycm9yLCBcImxpbmVOdW1iZXJcIilcbiAgY29uc3QgY29sdW1uID0gUmVmbGVjdC5nZXQoZXJyb3IsIFwiY29sdW1uTnVtYmVyXCIpXG5cbiAgaWYgKHR5cGVvZiBsaW5lICE9IFwibnVtYmVyXCIgfHwgIU51bWJlci5pc1NhZmVJbnRlZ2VyKGxpbmUpIHx8IGxpbmUgPCAxIHx8XG4gICAgdHlwZW9mIGNvbHVtbiAhPSBcIm51bWJlclwiIHx8ICFOdW1iZXIuaXNTYWZlSW50ZWdlcihjb2x1bW4pIHx8IGNvbHVtbiA8IDApIHtcbiAgICByZXR1cm4gbW9kdWxlTG9jYXRpb24oZmlsZW5hbWUsIHNvdXJjZSlcbiAgfVxuICBsZXQgbGluZVN0YXJ0ID0gMFxuXG4gIGZvciAobGV0IGN1cnJlbnQgPSAxOyBjdXJyZW50IDwgbGluZTsgY3VycmVudCsrKSB7XG4gICAgY29uc3QgbmV3bGluZSA9IHNvdXJjZS5pbmRleE9mKFwiXFxuXCIsIGxpbmVTdGFydClcblxuICAgIGlmIChuZXdsaW5lIDwgMCkgcmV0dXJuIG1vZHVsZUxvY2F0aW9uKGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgbGluZVN0YXJ0ID0gbmV3bGluZSArIDFcbiAgfVxuICBjb25zdCBsaW5lRW5kID0gc291cmNlLmluZGV4T2YoXCJcXG5cIiwgbGluZVN0YXJ0KVxuICBjb25zdCBib3VuZGVkRW5kID0gbGluZUVuZCA8IDAgPyBzb3VyY2UubGVuZ3RoIDogbGluZUVuZFxuICBjb25zdCBvZmZzZXQgPSBNYXRoLm1pbihsaW5lU3RhcnQgKyBjb2x1bW4sIGJvdW5kZWRFbmQpXG5cbiAgcmV0dXJuIGxvY2F0aW9uRnJvbU9mZnNldHMoZmlsZW5hbWUsIHNvdXJjZSwgb2Zmc2V0LCBNYXRoLm1pbihvZmZzZXQgKyAxLCBzb3VyY2UubGVuZ3RoKSlcbn1cbiJdfQ==
2081
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Zyb250ZW5kcy9waHAuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sU0FBUyxNQUFNLFlBQVksQ0FBQTtBQUNsQyxPQUFPLEVBQUMsS0FBSyxJQUFJLFlBQVksRUFBQyxNQUFNLGdCQUFnQixDQUFBO0FBQ3BELE9BQU8sRUFBQyxXQUFXLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixFQUFDLE1BQU0sa0JBQWtCLENBQUE7QUFDN0UsT0FBTyxFQUFDLDZCQUE2QixFQUFDLE1BQU0sd0JBQXdCLENBQUE7QUFDcEUsT0FBTyxFQUFDLG1CQUFtQixFQUFFLGNBQWMsRUFBQyxNQUFNLHlCQUF5QixDQUFBO0FBQzNFLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLDBCQUEwQixDQUFBO0FBQzdELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDJCQUEyQixDQUFBO0FBQzFELE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLDZCQUE2QixDQUFBO0FBQ2xFLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLHdCQUF3QixDQUFBO0FBQzVELE9BQU8sRUFBQyxxQkFBcUIsRUFBRSxVQUFVLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQTtBQUN4RSxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQTtBQUMvRCxPQUFPLEVBQUMsdUJBQXVCLEVBQUUsdUJBQXVCLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxjQUFjLENBQUE7QUFDL0YsT0FBTyxFQUFDLDRCQUE0QixFQUFFLG1CQUFtQixFQUFFLDJCQUEyQixFQUFFLG9CQUFvQixFQUFFLG9CQUFvQixFQUFFLHVCQUF1QixFQUFFLG1CQUFtQixFQUFFLFlBQVksRUFBRSxxQkFBcUIsRUFBRSxpQkFBaUIsRUFBRSxnQ0FBZ0MsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBQyxNQUFNLFlB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S0FBSyxJQUFJLE9BQU8sR0FBRyxDQUFDLEVBQUUsT0FBTyxHQUFHLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDO1FBQ2hELE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFBO1FBRS9DLElBQUksT0FBTyxHQUFHLENBQUM7WUFBRSxPQUFPLGNBQWMsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFDeEQsU0FBUyxHQUFHLE9BQU8sR0FBRyxDQUFDLENBQUE7SUFDekIsQ0FBQztJQUNELE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFBO0lBQy9DLE1BQU0sVUFBVSxHQUFHLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQTtJQUN4RCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUE7SUFFdkQsT0FBTyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7QUFDM0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgUGhwUGFyc2VyIGZyb20gXCJwaHAtcGFyc2VyXCJcbmltcG9ydCB7cGFyc2UgYXMgcGFyc2VDb21tZW50fSBmcm9tIFwiY29tbWVudC1wYXJzZXJcIlxuaW1wb3J0IHttaXNzaW5nVHlwZSwgcGFyc2VGYWlsdXJlLCB1bnN1cHBvcnRlZFN5bnRheH0gZnJvbSBcIi4uL2RpYWdub3N0aWMuanNcIlxuaW1wb3J0IHtibG9ja1JlZmVyZW5jZXNQcm90ZWN0ZWRFbnRyeX0gZnJvbSBcIi4uL3NlbWFudGljL2VmZmVjdHMuanNcIlxuaW1wb3J0IHtsb2NhdGlvbkZyb21PZmZzZXRzLCBtb2R1bGVMb2NhdGlvbn0gZnJvbSBcIi4uL3NlbWFudGljL2xvY2F0aW9uLmpzXCJcbmltcG9ydCB7d2l0aEFkYXB0ZWRPcGVyYXRpb259IGZyb20gXCIuLi9zZW1hbnRpYy9vcGVyYXRvcnMuanNcIlxuaW1wb3J0IHt3aXRoUGFyc2VyUmFuZ2VzfSBmcm9tIFwiLi4vc2VtYW50aWMvcHJvdmVuYW5jZS5qc1wiXG5pbXBvcnQge2lzVGFzazAzNFJlc291cmNlUHJvYmV9IGZyb20gXCIuLi9zZW1hbnRpYy9jYXBhYmlsaXRpZXMuanNcIlxuaW1wb3J0IHtoYXNFeGFjdEVmZmVjdFN1cHBvcnR9IGZyb20gXCIuLi9iYWNrZW5kcy9lZmZlY3RzLmpzXCJcbmltcG9ydCB7aGFzT25seVVuaWNvZGVTY2FsYXJzLCBzY2FsYXJUeXBlfSBmcm9tIFwiLi4vc2VtYW50aWMvc2NhbGFycy5qc1wiXG5pbXBvcnQge3R5cGVDb250YWluc0FueVZhcmlhYmxlfSBmcm9tIFwiLi4vc2VtYW50aWMvZ2VuZXJpY3MuanNcIlxuaW1wb3J0IHtyZXF1aXJlU291cmNlUmV0dXJuVHlwZSwgcmVxdWlyZVNvdXJjZVNjYWxhclR5cGUsIHNvdXJjZVNjYWxhclR5cGV9IGZyb20gXCIuL3NjYWxhcnMuanNcIlxuaW1wb3J0IHtjYXBhYmlsaXR5RnVuY3Rpb25TaWduYXR1cmVzLCBkb2N1bWVudGVkVmFsdWVUeXBlLCBpbnN0YW50aWF0ZWRSZWNvcmRGaWVsZFR5cGUsIGl0ZXJhdGlvbkJpbmRpbmdUeXBlLCBpdGVyYXRpb25PcGVyYW5kVHlwZSwga25vd25DYWxsUGFyYW1ldGVyVHlwZXMsIGtub3duQ2FsbFJldHVyblR5cGUsIG9wdGlvbmFsVHlwZSwgb3JkZXJlZE1hcFR5cGVGcm9tTWFwLCBvd25lZFJlc291cmNlVHlwZSwgcHJlc2VydmVzR2VuZXJpY09wdGlvbmFsRXZpZGVuY2UsIHJlY29yZFR5cGUsIHJlZmVyZW5jZVR5cGUsIHNhbWVWYWx1ZVR5cGV9IGZyb20gXCIuL3R5cGVzLmpzXCJcbmNvbnN0IHBhcnNlciA9IG5ldyBQaHBQYXJzZXIuRW5naW5lKHtcbiAgYXN0OiB7d2l0aFBvc2l0aW9uczogdHJ1ZX0sXG4gIHBhcnNlcjoge2V4dHJhY3REb2M6IHRydWUsIHN1cHByZXNzRXJyb3JzOiBmYWxzZX1cbn0pXG4vKiogQHR5cGUge3N0cmluZyB8IHVuZGVmaW5lZH0gKi9cbmxldCBjYWNoZWRUb2tlblNvdXJjZVxuLyoqIEB0eXBlIHt7ZW5kOiBudW1iZXIsIHN0YXJ0OiBudW1iZXIsIHRleHQ6IHN0cmluZ31bXX0gKi9cbmxldCBjYWNoZWRUb2tlblJhbmdlcyA9IFtdXG5jb25zdCBwaHBCaW5hcnlPcGVyYXRpb25zID0gbmV3IE1hcChbXG4gIFtcIitcIiwgXCJQaHBBZGRcIl0sXG4gIFtcIi1cIiwgXCJTdWJ0cmFjdFwiXSxcbiAgW1wiKlwiLCBcIk11bHRpcGx5XCJdLFxuICBbXCImJlwiLCBcIkFuZFwiXSxcbiAgW1wifHxcIiwgXCJPclwiXSxcbiAgW1wiPT09XCIsIFwiRXF1YWxcIl0sXG4gIFtcIiE9PVwiLCBcIk5vdEVxdWFsXCJdLFxuICBbXCI8XCIsIFwiTGVzc1RoYW5cIl0sXG4gIFtcIjw9XCIsIFwiTGVzc1RoYW5PckVxdWFsXCJdLFxuICBbXCI+XCIsIFwiR3JlYXRlclRoYW5cIl0sXG4gIFtcIj49XCIsIFwiR3JlYXRlclRoYW5PckVxdWFsXCJdLFxuICBbXCIuXCIsIFwiU3RyaW5nQ29uY2F0XCJdXG5dKVxuXG4vKipcbiAqIEB0eXBlZGVmIFBocENvbnZlcnNpb25Db250ZXh0XG4gKiBAcHJvcGVydHkge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljQmluZGluZ1R5cGU+fSBiaW5kaW5ncyAtIEV4cGxpY2l0bHkgdHlwZWQgdmlzaWJsZSBiaW5kaW5ncy5cbiAqIEBwcm9wZXJ0eSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbj59IGNsYXNzZXMgLSBSZWZlcmVuY2UgY2xhc3NlcyBieSBpZGVudGl0eS5cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbn0gW2N1cnJlbnRDbGFzc10gLSBFbmNsb3NpbmcgcmVmZXJlbmNlIGNsYXNzLlxuICogQHByb3BlcnR5IHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9uPn0gZXJyb3JOYW1lcyAtIEVycm9yIGRlY2xhcmF0aW9ucyBieSBzb3VyY2UgbmFtZS5cbiAqIEBwcm9wZXJ0eSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbj59IGVycm9ycyAtIEVycm9yIGRlY2xhcmF0aW9ucyBieSBpZGVudGl0eS5cbiAqIEBwcm9wZXJ0eSB7TWFwPHN0cmluZywgUGhwRnVuY3Rpb25TaWduYXR1cmU+fSBmdW5jdGlvbnMgLSBFeHBsaWNpdCBtb2R1bGUgZnVuY3Rpb24gc2lnbmF0dXJlcy5cbiAqIEBwcm9wZXJ0eSB7U2V0PG9iamVjdD59IFtvcmRlcmVkTWFwRGVjbGFyYXRpb25zXSAtIEV4YWN0IGxvY2FsIGRlY2xhcmF0aW9ucyBzZWxlY3RlZCBieSBwYXJzZXItb3duZWQgcGFpciBpdGVyYXRpb24uXG4gKiBAcHJvcGVydHkge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb24+fSByZWNvcmROYW1lcyAtIE5vbWluYWwgZGVjbGFyYXRpb25zIGJ5IHNvdXJjZSBuYW1lLlxuICogQHByb3BlcnR5IHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbj59IHJlY29yZHMgLSBSZWNvcmQgZGVjbGFyYXRpb25zIGJ5IGlkZW50aXR5LlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0Z1bmN0aW9uUmV0dXJuVHlwZSB8IHVuZGVmaW5lZH0gcmV0dXJuVHlwZSAtIEVuY2xvc2luZyByZXR1cm4gdHlwZS5cbiAqIEBwcm9wZXJ0eSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHlwZVBhcmFtZXRlcj59IFt0eXBlUGFyYW1ldGVyc10gLSBEZWNsYXJhdGlvbi1zY29wZWQgcGFyYW1ldGVycy5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIFBocEZ1bmN0aW9uU2lnbmF0dXJlXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSBsb2NhdGlvbiAtIENvbXBsZXRlIGRlY2xhcmF0aW9uIGxvY2F0aW9uLlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gbmFtZUxvY2F0aW9uIC0gUGFyc2VyLW93bmVkIG5hbWUgbG9jYXRpb24uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbmFtZSAtIEZ1bmN0aW9uIG5hbWUuXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlBhcmFtZXRlcltdfSBwYXJhbWV0ZXJzIC0gU2VtYW50aWMgcGFyYW1ldGVycy5cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNGdW5jdGlvblJldHVyblR5cGV9IHJldHVyblR5cGUgLSBTZW1hbnRpYyByZXR1cm4gdHlwZS5cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHlwZVBhcmFtZXRlcltdfSBbdHlwZVBhcmFtZXRlcnNdIC0gRGVjbGFyYXRpb24tc2NvcGVkIHBhcmFtZXRlcnMuXG4gKi9cblxuLyoqXG4gKiBSZXR1cm5zIGEgbm9ybWFsaXplZCBQSFAgbm9kZSBsb2NhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5Ob2RlfSBub2RlIC0gUEhQIHBhcnNlciBub2RlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gU291cmNlIGxvY2F0aW9uLlxuICovXG5mdW5jdGlvbiBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBpZiAoIW5vZGUubG9jKSB0aHJvdyBuZXcgRXJyb3IoYFBIUCBwYXJzZXIgb21pdHRlZCBzb3VyY2UgbG9jYXRpb24gZm9yICR7bm9kZS5raW5kfS5gKVxuXG4gIHJldHVybiBsb2NhdGlvbkZyb21PZmZzZXRzKGZpbGVuYW1lLCBzb3VyY2UsIG5vZGUubG9jLnN0YXJ0Lm9mZnNldCwgbm9kZS5sb2MuZW5kLm9mZnNldClcbn1cblxuLyoqXG4gKiBMb2NhdGVzIGEgY29tbWVudC1wYXJzZXIgdG9rZW4gaW5zaWRlIGEgUEhQIHBhcnNlci1vd25lZCBkb2MgY29tbWVudC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5Db21tZW50QmxvY2t9IGNvbW1lbnQgLSBQSFAgZG9jIGNvbW1lbnQuXG4gKiBAcGFyYW0ge2ltcG9ydChcImNvbW1lbnQtcGFyc2VyXCIpLlNwZWN9IHRhZyAtIFBhcnNlZCBkb2MgdGFnLlxuICogQHBhcmFtIHtcIm5hbWVcIiB8IFwidHlwZVwifSBmaWVsZCAtIFRva2VuIGZpZWxkLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gRXhhY3QgdG9rZW4gbG9jYXRpb24uXG4gKi9cbmZ1bmN0aW9uIGNvbW1lbnRUYWdMb2NhdGlvbihjb21tZW50LCB0YWcsIGZpZWxkLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGNvbnN0IGxpbmUgPSB0YWcuc291cmNlWzBdXG5cbiAgaWYgKCFjb21tZW50LmxvYyB8fCAhbGluZSkgdGhyb3cgbmV3IEVycm9yKGBDb21tZW50IHBhcnNlciBvbWl0dGVkIHRoZSBAJHt0YWcudGFnfSBzb3VyY2UgdG9rZW4uYClcblxuICBsZXQgbGluZVN0YXJ0ID0gY29tbWVudC5sb2Muc3RhcnQub2Zmc2V0XG5cbiAgZm9yIChsZXQgbGluZU51bWJlciA9IDA7IGxpbmVOdW1iZXIgPCBsaW5lLm51bWJlcjsgbGluZU51bWJlcisrKSB7XG4gICAgd2hpbGUgKGxpbmVTdGFydCA8IHNvdXJjZS5sZW5ndGggJiYgc291cmNlW2xpbmVTdGFydF0gIT0gXCJcXHJcIiAmJiBzb3VyY2VbbGluZVN0YXJ0XSAhPSBcIlxcblwiKSBsaW5lU3RhcnQrK1xuICAgIGlmIChzb3VyY2VbbGluZVN0YXJ0XSA9PSBcIlxcclwiICYmIHNvdXJjZVtsaW5lU3RhcnQgKyAxXSA9PSBcIlxcblwiKSBsaW5lU3RhcnQgKz0gMlxuICAgIGVsc2UgbGluZVN0YXJ0KytcbiAgfVxuXG4gIGNvbnN0IG9yZGVyZWRGaWVsZHMgPSBbXCJzdGFydFwiLCBcImRlbGltaXRlclwiLCBcInBvc3REZWxpbWl0ZXJcIiwgXCJ0YWdcIiwgXCJwb3N0VGFnXCIsIFwibmFtZVwiLCBcInBvc3ROYW1lXCIsIFwidHlwZVwiXVxuICBjb25zdCBmaWVsZEluZGV4ID0gb3JkZXJlZEZpZWxkcy5pbmRleE9mKGZpZWxkKVxuICBjb25zdCBzdGFydCA9IGxpbmVTdGFydCArIG9yZGVyZWRGaWVsZHMuc2xpY2UoMCwgZmllbGRJbmRleCkucmVkdWNlKChsZW5ndGgsIGtleSkgPT5cbiAgICBsZW5ndGggKyBsaW5lLnRva2Vuc1svKiogQHR5cGUge2tleW9mIHR5cGVvZiBsaW5lLnRva2Vuc30gKi8gKGtleSldLmxlbmd0aCwgMClcbiAgY29uc3QgdmFsdWUgPSBsaW5lLnRva2Vuc1tmaWVsZF1cblxuICByZXR1cm4gbG9jYXRpb25Gcm9tT2Zmc2V0cyhmaWxlbmFtZSwgc291cmNlLCBzdGFydCwgc3RhcnQgKyB2YWx1ZS5sZW5ndGgpXG59XG5cbi8qKlxuICogRmluZHMgb25lIHBhcnNlciB0b2tlbiBiZXR3ZWVuIHBhcnNlci1vd25lZCBub2RlIGJvdW5kYXJpZXMuXG4gKiBAcGFyYW0ge3N0cmluZ30gdG9rZW5UZXh0IC0gRXhhY3QgdG9rZW4gdGV4dC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydE9mZnNldCAtIEluY2x1c2l2ZSBzZWFyY2ggYm91bmRhcnkuXG4gKiBAcGFyYW0ge251bWJlcn0gZW5kT2Zmc2V0IC0gRXhjbHVzaXZlIHNlYXJjaCBib3VuZGFyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IFRva2VuIGxvY2F0aW9uLlxuICovXG5mdW5jdGlvbiB0b2tlbkxvY2F0aW9uKHRva2VuVGV4dCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBpZiAoY2FjaGVkVG9rZW5Tb3VyY2UgIT0gc291cmNlKSB7XG4gICAgbGV0IG9mZnNldCA9IDBcblxuICAgIGNhY2hlZFRva2VuUmFuZ2VzID0gcGFyc2VyLnRva2VuR2V0QWxsKHNvdXJjZSkubWFwKCh0b2tlbikgPT4ge1xuICAgICAgY29uc3QgdGV4dCA9IHR5cGVvZiB0b2tlbiA9PSBcInN0cmluZ1wiID8gdG9rZW4gOiB0b2tlblsxXVxuICAgICAgY29uc3QgcmFuZ2UgPSB7ZW5kOiBvZmZzZXQgKyB0ZXh0Lmxlbmd0aCwgc3RhcnQ6IG9mZnNldCwgdGV4dH1cblxuICAgICAgb2Zmc2V0ID0gcmFuZ2UuZW5kXG5cbiAgICAgIHJldHVybiByYW5nZVxuICAgIH0pXG4gICAgY2FjaGVkVG9rZW5Tb3VyY2UgPSBzb3VyY2VcbiAgfVxuXG4gIGNvbnN0IHRva2VuID0gY2FjaGVkVG9rZW5SYW5nZXMuZmluZCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUudGV4dCA9PSB0b2tlblRleHQgJiYgY2FuZGlkYXRlLnN0YXJ0ID49IHN0YXJ0T2Zmc2V0ICYmXG4gICAgY2FuZGlkYXRlLmVuZCA8PSBlbmRPZmZzZXQpXG5cbiAgaWYgKHRva2VuKSByZXR1cm4gbG9jYXRpb25Gcm9tT2Zmc2V0cyhmaWxlbmFtZSwgc291cmNlLCB0b2tlbi5zdGFydCwgdG9rZW4uZW5kKVxuXG4gIHRocm93IG5ldyBFcnJvcihgUEhQIHBhcnNlciBvbWl0dGVkIHRva2VuICcke3Rva2VuVGV4dH0nIGJldHdlZW4gJHtzdGFydE9mZnNldH0gYW5kICR7ZW5kT2Zmc2V0fS5gKVxufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgc3VwcG9ydGVkIFBIUCBleHByZXNzaW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLkV4cHJlc3Npb259IG5vZGUgLSBQSFAgZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge1BocENvbnZlcnNpb25Db250ZXh0fSBjb250ZXh0IC0gVHlwZWQgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1ZhbHVlVHlwZX0gW2V4cGVjdGVkVHlwZV0gLSBDb250ZXh0dWFsIHR5cGUgZm9yIGVtcHR5IFBIUCBhcnJheXMuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtwcmVzZXJ2ZU9wdGlvbmFsXSAtIFdoZXRoZXIgYW4gb3B0aW9uYWwgaWRlbnRpZmllciByZW1haW5zIHdyYXBwZWQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gU2VtYW50aWMgZXhwcmVzc2lvbi5cbiAqL1xuZnVuY3Rpb24gY29udmVydEV4cHJlc3Npb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgZXhwZWN0ZWRUeXBlLCBwcmVzZXJ2ZU9wdGlvbmFsID0gZmFsc2UpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAoZXhwZWN0ZWRUeXBlPy5raW5kID09IFwiT3B0aW9uYWxUeXBlXCIpIHtcbiAgICBpZiAobm9kZS5raW5kID09IFwibnVsbGtleXdvcmRcIikge1xuICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk9wdGlvbmFsTm9uZVwiKSwgbG9jYXRpb259LCB7YWJzZW5jZTogbG9jYXRpb259KVxuICAgIH1cbiAgICBpZiAoa25vd25FeHByZXNzaW9uVHlwZShub2RlLCBjb250ZXh0KT8ua2luZCA9PSBcIk9wdGlvbmFsVHlwZVwiKSB7XG4gICAgICByZXR1cm4gY29udmVydEV4cHJlc3Npb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgdW5kZWZpbmVkLCB0cnVlKVxuICAgIH1cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJPcHRpb25hbFNvbWVcIiksXG4gICAgICBsb2NhdGlvbixcbiAgICAgIHZhbHVlOiBjb252ZXJ0RXhwcmVzc2lvbihub2RlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LCBleHBlY3RlZFR5cGUudmFsdWVUeXBlKVxuICAgIH0sIHtzb21lOiBsb2NhdGlvbn0pXG4gIH1cblxuICBpZiAobm9kZS5raW5kID09IFwibnVsbGtleXdvcmRcIikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwibnVsbCBvdXRzaWRlIGFuIGV4cGxpY2l0IG9wdGlvbmFsIGNvbnRleHRcIiwgbG9jYXRpb24pXG5cbiAgaWYgKG5vZGUua2luZCA9PSBcInZhcmlhYmxlXCIpIHtcbiAgICBjb25zdCB2YXJpYWJsZSA9IC8qKiBAdHlwZSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5WYXJpYWJsZX0gKi8gKG5vZGUpXG5cbiAgICBpZiAodHlwZW9mIHZhcmlhYmxlLm5hbWUgIT0gXCJzdHJpbmdcIikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwiZHluYW1pYyB2YXJpYWJsZVwiLCBsb2NhdGlvbilcbiAgICBpZiAodmFyaWFibGUubmFtZSA9PSBcInRoaXNcIikge1xuICAgICAgaWYgKCFjb250ZXh0LmN1cnJlbnRDbGFzcykgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwicmVjZWl2ZXIgb3V0c2lkZSBhIHJlZmVyZW5jZSBjbGFzc1wiLCBsb2NhdGlvbilcbiAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtjbGFzc0lkOiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGNvbnRleHQuY3VycmVudENsYXNzLmlkKSxcbiAgICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUmVjZWl2ZXJFeHByZXNzaW9uXCIpLCBsb2NhdGlvbn0sIHtyZWNlaXZlcjogbG9jYXRpb259KVxuICAgIH1cblxuICAgIGNvbnN0IGlkZW50aWZpZXIgPSB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJJZGVudGlmaWVyRXhwcmVzc2lvblwiKSwgbG9jYXRpb24sIG5hbWU6IHZhcmlhYmxlLm5hbWV9LCB7bmFtZTogbG9jYXRpb259KVxuXG4gICAgaWYgKCFwcmVzZXJ2ZU9wdGlvbmFsICYmIGNvbnRleHQuYmluZGluZ3MuZ2V0KHZhcmlhYmxlLm5hbWUpPy5raW5kID09IFwiT3B0aW9uYWxUeXBlXCIpIHtcbiAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJPcHRpb25hbFVud3JhcFwiKSwgbG9jYXRpb24sIG9wZXJhbmQ6IGlkZW50aWZpZXJ9LCB7dW53cmFwOiBsb2NhdGlvbn0pXG4gICAgfVxuXG4gICAgcmV0dXJuIGlkZW50aWZpZXJcbiAgfVxuXG4gIGlmIChub2RlLmtpbmQgPT0gXCJudW1iZXJcIikge1xuICAgIGNvbnN0IGxpdGVyYWwgPSAvKiogQHR5cGUge2ltcG9ydChcInBocC1wYXJzZXJcIikuTnVtYmVyfSAqLyAobm9kZSlcbiAgICBjb25zdCB2YWx1ZSA9IE51bWJlcihsaXRlcmFsLnZhbHVlKVxuXG4gICAgaWYgKCFOdW1iZXIuaXNTYWZlSW50ZWdlcih2YWx1ZSkpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBcIm5vbi1zYWZlIGludGVnZXIgbGl0ZXJhbFwiLCBsb2NhdGlvbilcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJJbnRlZ2VyTGl0ZXJhbFwiKSwgbG9jYXRpb24sIHZhbHVlfSwge2xpdGVyYWw6IGxvY2F0aW9ufSlcbiAgfVxuXG4gIGlmIChub2RlLmtpbmQgPT0gXCJib29sZWFuXCIpIHtcbiAgICBjb25zdCBsaXRlcmFsID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLkJvb2xlYW59ICovIChub2RlKVxuXG4gICAgaWYgKHR5cGVvZiBsaXRlcmFsLnZhbHVlICE9IFwiYm9vbGVhblwiKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgXCJpbnZhbGlkIGJvb2xlYW4gbGl0ZXJhbCB2YWx1ZVwiLCBsb2NhdGlvbilcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJCb29sZWFuTGl0ZXJhbFwiKSwgbG9jYXRpb24sIHZhbHVlOiBsaXRlcmFsLnZhbHVlfSwge2xpdGVyYWw6IGxvY2F0aW9ufSlcbiAgfVxuXG4gIGlmIChub2RlLmtpbmQgPT0gXCJzdHJpbmdcIikge1xuICAgIGNvbnN0IGxpdGVyYWwgPSAvKiogQHR5cGUge2ltcG9ydChcInBocC1wYXJzZXJcIikuU3RyaW5nfSAqLyAobm9kZSlcblxuICAgIGlmICh0eXBlb2YgbGl0ZXJhbC5yYXcgPT0gXCJzdHJpbmdcIiAmJiBsaXRlcmFsLnJhdy5zdGFydHNXaXRoKFwiPDw8XCIpKSB7XG4gICAgICBjb25zdCBkZXRhaWwgPSBsaXRlcmFsLnJhdy5zdGFydHNXaXRoKFwiPDw8J1wiKSA/IFwibm93ZG9jIHN0cmluZ1wiIDogXCJoZXJlZG9jIHN0cmluZ1wiXG5cbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBkZXRhaWwsIGxvY2F0aW9uKVxuICAgIH1cbiAgICBpZiAodHlwZW9mIGxpdGVyYWwucmF3ID09IFwic3RyaW5nXCIgJiYgW1wiYlxcXCJcIiwgXCJCXFxcIlwiLCBcImInXCIsIFwiQidcIl0uc29tZSgocHJlZml4KSA9PiBsaXRlcmFsLnJhdy5zdGFydHNXaXRoKHByZWZpeCkpKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgXCJiaW5hcnkgc3RyaW5nIGxpdGVyYWxcIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIGlmICh0eXBlb2YgbGl0ZXJhbC52YWx1ZSAhPSBcInN0cmluZ1wiIHx8ICFoYXNPbmx5VW5pY29kZVNjYWxhcnMobGl0ZXJhbC52YWx1ZSkpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBcImludmFsaWQgVW5pY29kZSBzdHJpbmcgbGl0ZXJhbFwiLCBsb2NhdGlvbilcbiAgICB9XG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiU3RyaW5nTGl0ZXJhbFwiKSwgbG9jYXRpb24sIHZhbHVlOiBsaXRlcmFsLnZhbHVlfSwge2xpdGVyYWw6IGxvY2F0aW9ufSlcbiAgfVxuXG4gIGlmIChub2RlLmtpbmQgPT0gXCJlbmNhcHNlZFwiKSB7XG4gICAgY29uc3QgbGl0ZXJhbCA9IC8qKiBAdHlwZSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5FbmNhcHNlZH0gKi8gKG5vZGUpXG5cbiAgICBpZiAobGl0ZXJhbC50eXBlICE9IFwic3RyaW5nXCIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBgJHtsaXRlcmFsLnR5cGV9IHN0cmluZ2AsIGxvY2F0aW9uKVxuICAgIGlmICghQXJyYXkuaXNBcnJheShsaXRlcmFsLnZhbHVlKSkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwiaW50ZXJwb2xhdGVkIHN0cmluZ1wiLCBsb2NhdGlvbilcblxuICAgIGNvbnN0IHBhcnRzID0gbGl0ZXJhbC52YWx1ZS5tYXAoKHBhcnQpID0+IHtcbiAgICAgIGlmIChwYXJ0LmtpbmQgIT0gXCJlbmNhcHNlZHBhcnRcIikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIGBpbnRlcnBvbGF0ZWQgc3RyaW5nIHBhcnQgJHtwYXJ0LmtpbmR9YCwgbm9kZUxvY2F0aW9uKHBhcnQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgY29uc3QgZW5jYXBzZWRQYXJ0ID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLkVuY2Fwc2VkUGFydH0gKi8gKHBhcnQpXG5cbiAgICAgIGlmICghZW5jYXBzZWRQYXJ0LmV4cHJlc3Npb24pIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBcImludGVycG9sYXRlZCBzdHJpbmcgcGFydCB3aXRob3V0IGV4cHJlc3Npb25cIiwgbm9kZUxvY2F0aW9uKGVuY2Fwc2VkUGFydCwgZmlsZW5hbWUsIHNvdXJjZSkpXG5cbiAgICAgIHJldHVybiBjb252ZXJ0RXhwcmVzc2lvbihlbmNhcHNlZFBhcnQuZXhwcmVzc2lvbiwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgc2NhbGFyVHlwZShcInN0cmluZ1wiKSlcbiAgICB9KVxuXG4gICAgaWYgKHBhcnRzLmxlbmd0aCA9PSAwKSB7XG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiU3RyaW5nTGl0ZXJhbFwiKSwgbG9jYXRpb24sIHZhbHVlOiBcIlwifSwge2xpdGVyYWw6IGxvY2F0aW9ufSlcbiAgICB9XG5cbiAgICBsZXQgbG93ZXJlZCA9IHBhcnRzWzBdXG5cbiAgICBmb3IgKGNvbnN0IHBhcnQgb2YgcGFydHMuc2xpY2UoMSkpIHtcbiAgICAgIGNvbnN0IHNlbWFudGljID0gd2l0aEFkYXB0ZWRPcGVyYXRpb24oe1xuICAgICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJCaW5hcnlFeHByZXNzaW9uXCIpLFxuICAgICAgICBsZWZ0OiBsb3dlcmVkLFxuICAgICAgICBsb2NhdGlvbixcbiAgICAgICAgcmlnaHQ6IHBhcnRcbiAgICAgIH0sIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvb3BlcmF0b3JzLmpzXCIpLkFkYXB0ZWRPcGVyYXRpb259ICovIChcIlN0cmluZ0NvbmNhdFwiKSlcblxuICAgICAgbG93ZXJlZCA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gKi8gKC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gKHNlbWFudGljKSlcbiAgICB9XG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyhsb3dlcmVkLCB7bGl0ZXJhbDogbG9jYXRpb259KVxuICB9XG5cbiAgaWYgKG5vZGUua2luZCA9PSBcIm5vd2RvY1wiKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgXCJub3dkb2Mgc3RyaW5nXCIsIGxvY2F0aW9uKVxuXG4gIGlmIChub2RlLmtpbmQgPT0gXCJhcnJheVwiKSB7XG4gICAgY29uc3QgbGl0ZXJhbCA9IC8qKiBAdHlwZSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5BcnJheX0gKi8gKG5vZGUpXG4gICAgY29uc3QgaW52YWxpZEVudHJ5ID0gbGl0ZXJhbC5pdGVtcy5maW5kKChlbnRyeSkgPT4ge1xuICAgICAgaWYgKGVudHJ5LmtpbmQgIT0gXCJlbnRyeVwiKSByZXR1cm4gdHJ1ZVxuICAgICAgY29uc3QgY2FuZGlkYXRlID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLkVudHJ5fSAqLyAoZW50cnkpXG5cbiAgICAgIHJldHVybiBjYW5kaWRhdGUuYnlSZWYgfHwgY2FuZGlkYXRlLnVucGFja1xuICAgIH0pXG5cbiAgICBpZiAoaW52YWxpZEVudHJ5KSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgXCJhcnJheSByZWZlcmVuY2Ugb3IgdW5wYWNraW5nXCIsIG5vZGVMb2NhdGlvbihpbnZhbGlkRW50cnksIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIGNvbnN0IGVudHJpZXMgPSAvKiogQHR5cGUge2ltcG9ydChcInBocC1wYXJzZXJcIikuRW50cnlbXX0gKi8gKGxpdGVyYWwuaXRlbXMpXG4gICAgY29uc3QgaGFzS2V5cyA9IGVudHJpZXMuc29tZSgoZW50cnkpID0+IGVudHJ5LmtleSAhPSBudWxsKVxuICAgIGNvbnN0IGhhc0ltcGxpY2l0ID0gZW50cmllcy5zb21lKChlbnRyeSkgPT4gZW50cnkua2V5ID09IG51bGwpXG4gICAgY29uc3QgY29sbGVjdGlvbktpbmQgPSBlbnRyaWVzLmxlbmd0aCA9PSAwID8gZXhwZWN0ZWRUeXBlPy5raW5kIDogaGFzS2V5cyAmJiAhaGFzSW1wbGljaXRcbiAgICAgID8gZXhwZWN0ZWRUeXBlPy5raW5kID09IFwiT3JkZXJlZE1hcFR5cGVcIiA/IFwiT3JkZXJlZE1hcFR5cGVcIiA6IFwiTWFwVHlwZVwiXG4gICAgICA6ICFoYXNLZXlzID8gXCJMaXN0VHlwZVwiIDogXCJtaXhlZFwiXG5cbiAgICBpZiAoY29sbGVjdGlvbktpbmQgPT0gXCJtaXhlZFwiKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgXCJtaXhlZCBsaXN0L21hcCBhcnJheSBsaXRlcmFsXCIsIGxvY2F0aW9uKVxuICAgIGlmIChjb2xsZWN0aW9uS2luZCA9PSBcIkxpc3RUeXBlXCIpIHtcbiAgICAgIGNvbnN0IGVsZW1lbnRUeXBlID0gZXhwZWN0ZWRUeXBlPy5raW5kID09IFwiTGlzdFR5cGVcIiA/IGV4cGVjdGVkVHlwZS5lbGVtZW50VHlwZSA6IHVuZGVmaW5lZFxuXG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICAgIGVsZW1lbnRzOiBlbnRyaWVzLm1hcCgoZW50cnkpID0+IGNvbnZlcnRFeHByZXNzaW9uKGVudHJ5LnZhbHVlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LCBlbGVtZW50VHlwZSkpLFxuICAgICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJMaXN0TGl0ZXJhbFwiKSxcbiAgICAgICAgbG9jYXRpb25cbiAgICAgIH0sIHtsaXRlcmFsOiBsb2NhdGlvbn0pXG4gICAgfVxuICAgIGlmIChjb2xsZWN0aW9uS2luZCA9PSBcIk1hcFR5cGVcIiB8fCBjb2xsZWN0aW9uS2luZCA9PSBcIk9yZGVyZWRNYXBUeXBlXCIpIHtcbiAgICAgIGNvbnN0IHZhbHVlVHlwZSA9IGV4cGVjdGVkVHlwZT8ua2luZCA9PSBcIk1hcFR5cGVcIiB8fCBleHBlY3RlZFR5cGU/LmtpbmQgPT0gXCJPcmRlcmVkTWFwVHlwZVwiXG4gICAgICAgID8gZXhwZWN0ZWRUeXBlLnZhbHVlVHlwZSA6IHVuZGVmaW5lZFxuICAgICAgY29uc3Qgc2VtYW50aWNFbnRyaWVzID0gZW50cmllcy5tYXAoKGVudHJ5KSA9PiB7XG4gICAgICAgIGlmICghZW50cnkua2V5IHx8IGVudHJ5LmtleS5raW5kICE9IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgXCJtYXAga2V5IG90aGVyIHRoYW4gYSBsaXRlcmFsIHN0cmluZ1wiLCBlbnRyeS5rZXkgPyBub2RlTG9jYXRpb24oZW50cnkua2V5LCBmaWxlbmFtZSwgc291cmNlKSA6IG5vZGVMb2NhdGlvbihlbnRyeSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qga2V5ID0gY29udmVydEV4cHJlc3Npb24oZW50cnkua2V5LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuXG4gICAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgICAgICBrZXk6IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU3RyaW5nTGl0ZXJhbH0gKi8gKGtleSksXG4gICAgICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTWFwRW50cnlcIiksXG4gICAgICAgICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihlbnRyeSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICAgICAgdmFsdWU6IGNvbnZlcnRFeHByZXNzaW9uKGVudHJ5LnZhbHVlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LCB2YWx1ZVR5cGUpXG4gICAgICAgIH0sIHtvcGVyYXRvcjogdG9rZW5Mb2NhdGlvbihcIj0+XCIsIGVudHJ5LmtleS5sb2M/LmVuZC5vZmZzZXQgPz8gMCwgZW50cnkudmFsdWUubG9jPy5zdGFydC5vZmZzZXQgPz8gc291cmNlLmxlbmd0aCwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICAgICAgfSlcblxuICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgICBlbnRyaWVzOiBzZW1hbnRpY0VudHJpZXMsXG4gICAgICAgIGtpbmQ6IGNvbGxlY3Rpb25LaW5kID09IFwiT3JkZXJlZE1hcFR5cGVcIlxuICAgICAgICAgID8gLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiT3JkZXJlZE1hcExpdGVyYWxcIilcbiAgICAgICAgICA6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk1hcExpdGVyYWxcIiksXG4gICAgICAgIGxvY2F0aW9uXG4gICAgICB9LCB7bGl0ZXJhbDogbG9jYXRpb259KVxuICAgIH1cblxuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBcImVtcHR5IGFycmF5IHdpdGhvdXQgYSBsaXN0IG9yIG1hcCB0eXBlXCIsIGxvY2F0aW9uKVxuICB9XG5cbiAgaWYgKG5vZGUua2luZCA9PSBcIm5ld1wiKSB7XG4gICAgY29uc3QgY29uc3RydWN0aW9uID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLk5ld30gKi8gKG5vZGUpXG4gICAgY29uc3QgbmFtZSA9IGNvbnN0cnVjdGlvbi53aGF0LmtpbmQgPT0gXCJuYW1lXCIgPyAvKiogQHR5cGUge2ltcG9ydChcInBocC1wYXJzZXJcIikuTmFtZX0gKi8gKGNvbnN0cnVjdGlvbi53aGF0KSA6IHVuZGVmaW5lZFxuXG4gICAgaWYgKCFuYW1lIHx8IG5hbWUucmVzb2x1dGlvbiAhPSBcInVxblwiIHx8IHR5cGVvZiBuYW1lLm5hbWUgIT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwiZHluYW1pYyBvciBxdWFsaWZpZWQgcmVjb3JkIGNvbnN0cnVjdGlvblwiLCBub2RlTG9jYXRpb24oY29uc3RydWN0aW9uLndoYXQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cbiAgICBjb25zdCBkZWNsYXJhdGlvbiA9IGNvbnRleHQucmVjb3JkTmFtZXMuZ2V0KG5hbWUubmFtZSlcblxuICAgIGlmICghZGVjbGFyYXRpb24pIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBcImNvbnN0cnVjdGlvbiBvZiBhbiB1bmtub3duIG5vbWluYWwgY2xhc3NcIiwgbm9kZUxvY2F0aW9uKGNvbnN0cnVjdGlvbi53aGF0LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICBpZiAoZGVjbGFyYXRpb24ua2luZCA9PSBcIkNsYXNzRGVjbGFyYXRpb25cIikge1xuICAgICAgY29uc3QgdW5zdXBwb3J0ZWRBcmd1bWVudCA9IGNvbnN0cnVjdGlvbi5hcmd1bWVudHMuZmluZCgoYXJndW1lbnQpID0+XG4gICAgICAgIGFyZ3VtZW50LmtpbmQgPT0gXCJuYW1lZGFyZ3VtZW50XCIgfHwgYXJndW1lbnQua2luZCA9PSBcInZhcmlhZGljXCIgfHwgUmVmbGVjdC5nZXQoYXJndW1lbnQsIFwiYnlyZWZcIikgPT09IHRydWUpXG5cbiAgICAgIGlmICh1bnN1cHBvcnRlZEFyZ3VtZW50KSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgXCJub24tcG9zaXRpb25hbCByZWZlcmVuY2UgY29uc3RydWN0b3IgYXJndW1lbnRcIixcbiAgICAgICAgbm9kZUxvY2F0aW9uKHVuc3VwcG9ydGVkQXJndW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgY29uc3QgY2xhc3NMb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihjb25zdHJ1Y3Rpb24ud2hhdCwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2FyZ3VtZW50czogY29uc3RydWN0aW9uLmFyZ3VtZW50cy5tYXAoKGFyZ3VtZW50LCBpbmRleCkgPT5cbiAgICAgICAgY29udmVydEV4cHJlc3Npb24oYXJndW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIGRlY2xhcmF0aW9uLmNvbnN0cnVjdG9yLnBhcmFtZXRlcnNbaW5kZXhdPy50eXBlKSksXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJSZWZlcmVuY2VDb25zdHJ1Y3Rpb25cIiksIGxvY2F0aW9uLFxuICAgICAgcmVmZXJlbmNlOiByZWZlcmVuY2VUeXBlKC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZGVjbGFyYXRpb24uaWQpLCBjbGFzc0xvY2F0aW9uKX0sIHtjbGFzczogY2xhc3NMb2NhdGlvbn0pXG4gICAgfVxuICAgIGlmIChkZWNsYXJhdGlvbi5raW5kID09IFwiRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvblwiKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgXCJvd25lZCByZXNvdXJjZSBjb25zdHJ1Y3Rpb25cIiwgbm9kZUxvY2F0aW9uKGNvbnN0cnVjdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIGNvbnN0IGNvbnRleHR1YWxUeXBlQXJndW1lbnRzID0gZXhwZWN0ZWRUeXBlPy5raW5kID09IFwiUmVjb3JkVHlwZVwiICYmIGV4cGVjdGVkVHlwZS5kZWNsYXJhdGlvbklkID09IGRlY2xhcmF0aW9uLmlkXG4gICAgICA/IGV4cGVjdGVkVHlwZS5hcmd1bWVudHNcbiAgICAgIDogdW5kZWZpbmVkXG4gICAgY29uc3QgdmlzaWJsZVR5cGVQYXJhbWV0ZXJJZHMgPSBuZXcgU2V0KFsuLi5jb250ZXh0LnR5cGVQYXJhbWV0ZXJzPy52YWx1ZXMoKSA/PyBbXV1cbiAgICAgIC5tYXAoKHBhcmFtZXRlcikgPT4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChwYXJhbWV0ZXIuaWQpKSlcbiAgICBjb25zdCB0eXBlQXJndW1lbnRzID0gY29udGV4dHVhbFR5cGVBcmd1bWVudHMgJiZcbiAgICAgICFjb250ZXh0dWFsVHlwZUFyZ3VtZW50cy5zb21lKChhcmd1bWVudCkgPT4gdHlwZUNvbnRhaW5zQW55VmFyaWFibGUoYXJndW1lbnQsIHZpc2libGVUeXBlUGFyYW1ldGVySWRzKSlcbiAgICAgID8gY29udGV4dHVhbFR5cGVBcmd1bWVudHNcbiAgICAgIDogdW5kZWZpbmVkXG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBhcmd1bWVudHM6IGNvbnN0cnVjdGlvbi5hcmd1bWVudHMubWFwKChhcmd1bWVudCwgaW5kZXgpID0+XG4gICAgICAgIGNvbnZlcnRFeHByZXNzaW9uKGFyZ3VtZW50LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LFxuICAgICAgICAgIGluc3RhbnRpYXRlZFJlY29yZEZpZWxkVHlwZShkZWNsYXJhdGlvbiwgdHlwZUFyZ3VtZW50cywgaW5kZXgpKSksXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJSZWNvcmRDb25zdHJ1Y3Rpb25cIiksXG4gICAgICBsb2NhdGlvbixcbiAgICAgIHJlY29yZDogcmVjb3JkVHlwZSgvKiogQHR5cGUge3N0cmluZ30gKi8gKGRlY2xhcmF0aW9uLmlkKSwgbm9kZUxvY2F0aW9uKGNvbnN0cnVjdGlvbi53aGF0LCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgdHlwZUFyZ3VtZW50cylcbiAgICB9LCB7cmVjb3JkOiBub2RlTG9jYXRpb24oY29uc3RydWN0aW9uLndoYXQsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgfVxuXG4gIGlmIChub2RlLmtpbmQgPT0gXCJwcm9wZXJ0eWxvb2t1cFwiKSB7XG4gICAgY29uc3QgcmVhZCA9IC8qKiBAdHlwZSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5Qcm9wZXJ0eUxvb2t1cH0gKi8gKG5vZGUpXG4gICAgY29uc3Qgb2Zmc2V0ID0gcmVhZC5vZmZzZXQua2luZCA9PSBcImlkZW50aWZpZXJcIiA/IC8qKiBAdHlwZSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5JZGVudGlmaWVyfSAqLyAocmVhZC5vZmZzZXQpIDogdW5kZWZpbmVkXG5cbiAgICBpZiAoIW9mZnNldCB8fCB0eXBlb2Ygb2Zmc2V0Lm5hbWUgIT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwiZHluYW1pYyBvciBjb21wdXRlZCBtZW1iZXIgYWNjZXNzXCIsIG5vZGVMb2NhdGlvbihyZWFkLm9mZnNldCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIGlmIChyZWFkLndoYXQua2luZCA9PSBcInZhcmlhYmxlXCIgJiYgLyoqIEB0eXBlIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLlZhcmlhYmxlfSAqLyAocmVhZC53aGF0KS5uYW1lID09IFwidGhpc1wiICYmXG4gICAgICBjb250ZXh0LmN1cnJlbnRDbGFzcykge1xuICAgICAgY29uc3QgZmllbGQgPSBjb250ZXh0LmN1cnJlbnRDbGFzcy5maWVsZHMuZmluZCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUubmFtZSA9PSBvZmZzZXQubmFtZSlcblxuICAgICAgaWYgKCFmaWVsZCkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIGB1bmtub3duIHByaXZhdGUgZmllbGQgJyR7b2Zmc2V0Lm5hbWV9J2AsIG5vZGVMb2NhdGlvbihvZmZzZXQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2ZpZWxkOiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGZpZWxkLmlkKSwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUHJpdmF0ZUZpZWxkUmVhZFwiKSwgbG9jYXRpb24sXG4gICAgICAgIHJlY2VpdmVyOiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY2VpdmVyRXhwcmVzc2lvbn0gKi8gKFxuICAgICAgICAgIGNvbnZlcnRFeHByZXNzaW9uKHJlYWQud2hhdCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkpfSwge21lbWJlcjogbm9kZUxvY2F0aW9uKG9mZnNldCwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICAgIH1cbiAgICBjb25zdCByZWNlaXZlclR5cGUgPSBrbm93bkV4cHJlc3Npb25UeXBlKHJlYWQud2hhdCwgY29udGV4dClcbiAgICBpZiAocmVjZWl2ZXJUeXBlPy5raW5kID09IFwiUmVmZXJlbmNlVHlwZVwiKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgXCJwcml2YXRlIHJlZmVyZW5jZS1jbGFzcyBmaWVsZCBhY2Nlc3NcIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIGNvbnN0IHJlY2VpdmVyUmVjb3JkID0gcmVjZWl2ZXJUeXBlPy5raW5kID09IFwiT3B0aW9uYWxUeXBlXCIgPyByZWNlaXZlclR5cGUudmFsdWVUeXBlIDogcmVjZWl2ZXJUeXBlXG4gICAgY29uc3QgZGVjbGFyYXRpb24gPSByZWNlaXZlclJlY29yZD8ua2luZCA9PSBcIlJlY29yZFR5cGVcIiA/IGNvbnRleHQucmVjb3Jkcy5nZXQocmVjZWl2ZXJSZWNvcmQuZGVjbGFyYXRpb25JZCkgOiB1bmRlZmluZWRcblxuICAgIGlmICgoZGVjbGFyYXRpb24/LnR5cGVQYXJhbWV0ZXJzPy5sZW5ndGggPz8gMCkgPiAwKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgXCJnZW5lcmljIHJlY29yZCBwcm9wZXJ0eSBhY2Nlc3NcIiwgbm9kZUxvY2F0aW9uKHJlYWQub2Zmc2V0LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgZmllbGQ6IG9mZnNldC5uYW1lLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTWVtYmVyUmVhZFwiKSxcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgcmVjZWl2ZXI6IGNvbnZlcnRFeHByZXNzaW9uKHJlYWQud2hhdCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgICB9LCB7bWVtYmVyOiBub2RlTG9jYXRpb24ocmVhZC5vZmZzZXQsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgfVxuXG4gIGlmIChub2RlLmtpbmQgPT0gXCJvZmZzZXRsb29rdXBcIikge1xuICAgIGNvbnN0IGxvb2t1cCA9IC8qKiBAdHlwZSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5PZmZzZXRMb29rdXB9ICovIChub2RlKVxuXG4gICAgaWYgKCFsb29rdXAub2Zmc2V0KSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgXCJhcHBlbmQgb3IgbWlzc2luZyBhcnJheSBpbmRleFwiLCBsb2NhdGlvbilcbiAgICBjb25zdCByZWNlaXZlciA9IGxvb2t1cC53aGF0LmtpbmQgPT0gXCJ2YXJpYWJsZVwiID8gLyoqIEB0eXBlIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLlZhcmlhYmxlfSAqLyAobG9va3VwLndoYXQpIDogdW5kZWZpbmVkXG4gICAgY29uc3QgcmVjZWl2ZXJUeXBlID0gcmVjZWl2ZXIgJiYgdHlwZW9mIHJlY2VpdmVyLm5hbWUgPT0gXCJzdHJpbmdcIiA/IGNvbnRleHQuYmluZGluZ3MuZ2V0KHJlY2VpdmVyLm5hbWUpIDogdW5kZWZpbmVkXG4gICAgY29uc3QgYWNjZXNzS2luZCA9IHJlY2VpdmVyVHlwZT8ua2luZCA9PSBcIkxpc3RUeXBlXCIgPyBcImxpc3RcIiA6XG4gICAgICByZWNlaXZlclR5cGU/LmtpbmQgPT0gXCJNYXBUeXBlXCIgfHwgcmVjZWl2ZXJUeXBlPy5raW5kID09IFwiT3JkZXJlZE1hcFR5cGVcIiA/IFwibWFwXCIgOlxuICAgICAgbG9va3VwLm9mZnNldC5raW5kID09IFwibnVtYmVyXCIgPyBcImxpc3RcIiA6IGxvb2t1cC5vZmZzZXQua2luZCA9PSBcInN0cmluZ1wiID8gXCJtYXBcIiA6IHVuZGVmaW5lZFxuXG4gICAgaWYgKGFjY2Vzc0tpbmQgPT0gXCJsaXN0XCIgJiYgW1wibnVtYmVyXCIsIFwic3RyaW5nXCIsIFwidmFyaWFibGVcIl0uaW5jbHVkZXMobG9va3VwLm9mZnNldC5raW5kKSkge1xuICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgICBjb2xsZWN0aW9uOiBjb252ZXJ0RXhwcmVzc2lvbihsb29rdXAud2hhdCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCksXG4gICAgICAgIGluZGV4OiBjb252ZXJ0RXhwcmVzc2lvbihsb29rdXAub2Zmc2V0LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSxcbiAgICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTGlzdEluZGV4RXhwcmVzc2lvblwiKSxcbiAgICAgICAgbG9jYXRpb24sXG4gICAgICAgIHRvdGFsaXR5OiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJwcm92ZW5cIilcbiAgICAgIH0sIHtvcGVyYXRvcjogdG9rZW5Mb2NhdGlvbihcIltcIiwgbG9va3VwLndoYXQubG9jPy5lbmQub2Zmc2V0ID8/IDAsIGxvb2t1cC5vZmZzZXQubG9jPy5zdGFydC5vZmZzZXQgPz8gc291cmNlLmxlbmd0aCwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICAgIH1cbiAgICBpZiAoYWNjZXNzS2luZCA9PSBcIm1hcFwiICYmIFtcIm51bWJlclwiLCBcInN0cmluZ1wiLCBcInZhcmlhYmxlXCJdLmluY2x1ZGVzKGxvb2t1cC5vZmZzZXQua2luZCkpIHtcbiAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgICAgY29sbGVjdGlvbjogY29udmVydEV4cHJlc3Npb24obG9va3VwLndoYXQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgICAgICBrZXk6IGNvbnZlcnRFeHByZXNzaW9uKGxvb2t1cC5vZmZzZXQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJNYXBMb29rdXBFeHByZXNzaW9uXCIpLFxuICAgICAgICBsb2NhdGlvbixcbiAgICAgICAgdG90YWxpdHk6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcInByb3ZlblwiKVxuICAgICAgfSwge29wZXJhdG9yOiB0b2tlbkxvY2F0aW9uKFwiW1wiLCBsb29rdXAud2hhdC5sb2M/LmVuZC5vZmZzZXQgPz8gMCwgbG9va3VwLm9mZnNldC5sb2M/LnN0YXJ0Lm9mZnNldCA/PyBzb3VyY2UubGVuZ3RoLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gICAgfVxuXG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwibm9ubGl0ZXJhbCBhcnJheSBhY2Nlc3NcIiwgbm9kZUxvY2F0aW9uKGxvb2t1cC5vZmZzZXQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG5cbiAgaWYgKG5vZGUua2luZCA9PSBcInVuYXJ5XCIpIHtcbiAgICBjb25zdCB1bmFyeSA9IC8qKiBAdHlwZSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5VbmFyeX0gKi8gKG5vZGUpXG5cbiAgICBpZiAoIVtcIiFcIiwgXCItXCJdLmluY2x1ZGVzKHVuYXJ5LnR5cGUpKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgYHVuYXJ5ICR7dW5hcnkudHlwZX1gLCBsb2NhdGlvbilcblxuICAgIGNvbnN0IHNlbWFudGljID0gd2l0aEFkYXB0ZWRPcGVyYXRpb24od2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBraW5kOiBcIlVuYXJ5RXhwcmVzc2lvblwiLFxuICAgICAgbG9jYXRpb24sXG4gICAgICBvcGVyYW5kOiBjb252ZXJ0RXhwcmVzc2lvbih1bmFyeS53aGF0LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICAgIH0sIHtcbiAgICAgIG9wZXJhdG9yOiB0b2tlbkxvY2F0aW9uKHVuYXJ5LnR5cGUsIHVuYXJ5LmxvYz8uc3RhcnQub2Zmc2V0ID8/IDAsIHVuYXJ5LndoYXQubG9jPy5zdGFydC5vZmZzZXQgPz8gdW5hcnkubG9jPy5lbmQub2Zmc2V0ID8/IHNvdXJjZS5sZW5ndGgsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgfSksIHVuYXJ5LnR5cGUgPT0gXCIhXCIgPyBcIk5vdFwiIDogXCJOZWdhdGVcIilcblxuICAgIHJldHVybiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb259ICovICgvKiogQHR5cGUge3Vua25vd259ICovIChzZW1hbnRpYykpXG4gIH1cblxuICBpZiAobm9kZS5raW5kID09IFwicmV0aWZcIikge1xuICAgIGNvbnN0IHRlcm5hcnkgPSAvKiogQHR5cGUge2ltcG9ydChcInBocC1wYXJzZXJcIikuUmV0SWZ9ICovIChub2RlKVxuXG4gICAgaWYgKCF0ZXJuYXJ5LnRlc3QgfHwgIXRlcm5hcnkudHJ1ZUV4cHIgfHwgIXRlcm5hcnkuZmFsc2VFeHByKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgXCJzaG9ydCB0ZXJuYXJ5XCIsIGxvY2F0aW9uKVxuICAgIGlmICh0ZXJuYXJ5LnRlc3Qua2luZCA9PSBcInZhcmlhYmxlXCIpIHtcbiAgICAgIGNvbnN0IHRlc3RlZCA9IC8qKiBAdHlwZSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5WYXJpYWJsZX0gKi8gKHRlcm5hcnkudGVzdClcblxuICAgICAgaWYgKHR5cGVvZiB0ZXN0ZWQubmFtZSA9PSBcInN0cmluZ1wiICYmIGNvbnRleHQuYmluZGluZ3MuZ2V0KHRlc3RlZC5uYW1lKT8ua2luZCA9PSBcIk9wdGlvbmFsVHlwZVwiKSB7XG4gICAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBcIm9wdGlvbmFsIHRydXRoaW5lc3MgY29uZGl0aW9uXCIsIG5vZGVMb2NhdGlvbih0ZXN0ZWQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb259ICovICgvKiogQHR5cGUge3Vua25vd259ICovICh3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGFsdGVybmF0ZTogY29udmVydEV4cHJlc3Npb24odGVybmFyeS5mYWxzZUV4cHIsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgICAgY29uZGl0aW9uOiBjb252ZXJ0RXhwcmVzc2lvbih0ZXJuYXJ5LnRlc3QsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgICAgY29uc2VxdWVudDogY29udmVydEV4cHJlc3Npb24odGVybmFyeS50cnVlRXhwciwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCksXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJDb25kaXRpb25hbEV4cHJlc3Npb25cIiksXG4gICAgICBsb2NhdGlvblxuICAgIH0sIHtcbiAgICAgIGFsdGVybmF0ZTogdG9rZW5Mb2NhdGlvbihcIjpcIiwgdGVybmFyeS50cnVlRXhwci5sb2M/LmVuZC5vZmZzZXQgPz8gMCwgdGVybmFyeS5mYWxzZUV4cHIubG9jPy5zdGFydC5vZmZzZXQgPz8gc291cmNlLmxlbmd0aCwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICBjb2xvbjogdG9rZW5Mb2NhdGlvbihcIjpcIiwgdGVybmFyeS50cnVlRXhwci5sb2M/LmVuZC5vZmZzZXQgPz8gMCwgdGVybmFyeS5mYWxzZUV4cHIubG9jPy5zdGFydC5vZmZzZXQgPz8gc291cmNlLmxlbmd0aCwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICBjb25kaXRpb246IHRlcm5hcnkudGVzdC5sb2MgPyBub2RlTG9jYXRpb24odGVybmFyeS50ZXN0LCBmaWxlbmFtZSwgc291cmNlKSA6IGxvY2F0aW9uLFxuICAgICAgY29uc2VxdWVudDogdGVybmFyeS50cnVlRXhwci5sb2MgPyBub2RlTG9jYXRpb24odGVybmFyeS50cnVlRXhwciwgZmlsZW5hbWUsIHNvdXJjZSkgOiBsb2NhdGlvbixcbiAgICAgIG9wZXJhdG9yOiB0b2tlbkxvY2F0aW9uKFwiP1wiLCB0ZXJuYXJ5LnRlc3QubG9jPy5lbmQub2Zmc2V0ID8/IDAsIHRlcm5hcnkudHJ1ZUV4cHIubG9jPy5zdGFydC5vZmZzZXQgPz8gc291cmNlLmxlbmd0aCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICB9KSkpXG4gIH1cblxuICBpZiAobm9kZS5raW5kID09IFwibnVsbHNhZmVwcm9wZXJ0eWxvb2t1cFwiIHx8IG5vZGUua2luZCA9PSBcIm51bGxzYWZlbWV0aG9kY2FsbFwiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwic2FmZSBuYXZpZ2F0aW9uXCIsIGxvY2F0aW9uKVxuICB9XG5cbiAgaWYgKG5vZGUua2luZCA9PSBcImJpblwiKSB7XG4gICAgY29uc3QgYmluYXJ5ID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLkJpbn0gKi8gKG5vZGUpXG4gICAgaWYgKGJpbmFyeS50eXBlID09IFwiIT09XCIgJiYgYmluYXJ5LmxlZnQua2luZCA9PSBcInZhcmlhYmxlXCIgJiYgYmluYXJ5LnJpZ2h0LmtpbmQgPT0gXCJudWxsa2V5d29yZFwiKSB7XG4gICAgICBjb25zdCBvcGVyYW5kID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5JZGVudGlmaWVyRXhwcmVzc2lvbn0gKi8gKFxuICAgICAgICBjb252ZXJ0RXhwcmVzc2lvbihiaW5hcnkubGVmdCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgdW5kZWZpbmVkLCB0cnVlKVxuICAgICAgKVxuXG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiT3B0aW9uYWxJc1ByZXNlbnRcIiksIGxvY2F0aW9uLCBvcGVyYW5kfSwge1xuICAgICAgICBvcGVyYXRvcjogdG9rZW5Mb2NhdGlvbihiaW5hcnkudHlwZSwgYmluYXJ5LmxlZnQubG9jPy5lbmQub2Zmc2V0ID8/IDAsIGJpbmFyeS5yaWdodC5sb2M/LnN0YXJ0Lm9mZnNldCA/PyBzb3VyY2UubGVuZ3RoLCBmaWxlbmFtZSwgc291cmNlKVxuICAgICAgfSlcbiAgICB9XG4gICAgaWYgKFtcIj09XCIsIFwiIT1cIl0uaW5jbHVkZXMoYmluYXJ5LnR5cGUpKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgYGNvZXJjaXZlIGVxdWFsaXR5ICR7YmluYXJ5LnR5cGV9YCwgbG9jYXRpb24pXG4gICAgaWYgKFtcImFuZFwiLCBcIm9yXCJdLmluY2x1ZGVzKGJpbmFyeS50eXBlKSkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIGBwcmVjZWRlbmNlLXNlbnNpdGl2ZSBib29sZWFuICR7YmluYXJ5LnR5cGV9YCwgbG9jYXRpb24pXG4gICAgaWYgKCFwaHBCaW5hcnlPcGVyYXRpb25zLmhhcyhiaW5hcnkudHlwZSkpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBgYmluYXJ5ICR7YmluYXJ5LnR5cGV9YCwgbG9jYXRpb24pXG5cbiAgICBjb25zdCBzZW1hbnRpYyA9IHdpdGhBZGFwdGVkT3BlcmF0aW9uKHtcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkJpbmFyeUV4cHJlc3Npb25cIiksXG4gICAgICBsZWZ0OiBjb252ZXJ0RXhwcmVzc2lvbihiaW5hcnkubGVmdCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCksXG4gICAgICBsb2NhdGlvbixcbiAgICAgIHJpZ2h0OiBjb252ZXJ0RXhwcmVzc2lvbihiaW5hcnkucmlnaHQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gICAgfSwgLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy9vcGVyYXRvcnMuanNcIikuQWRhcHRlZE9wZXJhdGlvbn0gKi8gKHBocEJpbmFyeU9wZXJhdGlvbnMuZ2V0KGJpbmFyeS50eXBlKSkpXG5cbiAgICByZXR1cm4gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSAqLyAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyAod2l0aFBhcnNlclJhbmdlcyhzZW1hbnRpYywge1xuICAgICAgb3BlcmF0b3I6IHRva2VuTG9jYXRpb24oYmluYXJ5LnR5cGUsIGJpbmFyeS5sZWZ0LmxvYz8uZW5kLm9mZnNldCA/PyAwLCBiaW5hcnkucmlnaHQubG9jPy5zdGFydC5vZmZzZXQgPz8gc291cmNlLmxlbmd0aCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICB9KSkpXG4gIH1cblxuICBpZiAobm9kZS5raW5kID09IFwiY2FsbFwiKSB7XG4gICAgY29uc3QgY2FsbCA9IC8qKiBAdHlwZSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5DYWxsfSAqLyAobm9kZSlcblxuICAgIGlmIChjYWxsLndoYXQua2luZCA9PSBcInByb3BlcnR5bG9va3VwXCIpIHtcbiAgICAgIGNvbnN0IGxvb2t1cCA9IC8qKiBAdHlwZSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5Qcm9wZXJ0eUxvb2t1cH0gKi8gKC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gKGNhbGwud2hhdCkpXG4gICAgICBjb25zdCBtZW1iZXIgPSBsb29rdXAub2Zmc2V0LmtpbmQgPT0gXCJpZGVudGlmaWVyXCIgPyAvKiogQHR5cGUge2ltcG9ydChcInBocC1wYXJzZXJcIikuSWRlbnRpZmllcn0gKi8gKGxvb2t1cC5vZmZzZXQpIDogdW5kZWZpbmVkXG4gICAgICBjb25zdCByZWNlaXZlclR5cGUgPSBrbm93bkV4cHJlc3Npb25UeXBlKGxvb2t1cC53aGF0LCBjb250ZXh0KVxuXG4gICAgICBpZiAobWVtYmVyICYmIHR5cGVvZiBtZW1iZXIubmFtZSA9PSBcInN0cmluZ1wiICYmIHJlY2VpdmVyVHlwZT8ua2luZCA9PSBcIlJlZmVyZW5jZVR5cGVcIikge1xuICAgICAgICBjb25zdCBtZXRob2QgPSBjb250ZXh0LmNsYXNzZXMuZ2V0KHJlY2VpdmVyVHlwZS5kZWNsYXJhdGlvbklkKT8ubWV0aG9kcy5maW5kKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS5uYW1lID09IG1lbWJlci5uYW1lKVxuICAgICAgICBjb25zdCB1bnN1cHBvcnRlZEFyZ3VtZW50ID0gY2FsbC5hcmd1bWVudHMuZmluZCgoYXJndW1lbnQpID0+XG4gICAgICAgICAgYXJndW1lbnQua2luZCA9PSBcIm5hbWVkYXJndW1lbnRcIiB8fCBhcmd1bWVudC5raW5kID09IFwidmFyaWFkaWNcIiB8fCBSZWZsZWN0LmdldChhcmd1bWVudCwgXCJieXJlZlwiKSA9PT0gdHJ1ZSlcblxuICAgICAgICBpZiAodW5zdXBwb3J0ZWRBcmd1bWVudCkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwibm9uLXBvc2l0aW9uYWwgbWV0aG9kIGFyZ3VtZW50XCIsXG4gICAgICAgICAgbm9kZUxvY2F0aW9uKHVuc3VwcG9ydGVkQXJndW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7YXJndW1lbnRzOiBjYWxsLmFyZ3VtZW50cy5tYXAoKGFyZ3VtZW50LCBpbmRleCkgPT5cbiAgICAgICAgICBjb252ZXJ0RXhwcmVzc2lvbihhcmd1bWVudCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgbWV0aG9kPy5wYXJhbWV0ZXJzW2luZGV4XT8udHlwZSkpLFxuICAgICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJNZXRob2RDYWxsRXhwcmVzc2lvblwiKSwgbG9jYXRpb24sIG1ldGhvZDogbWV0aG9kPy5pZCA/PyBtZW1iZXIubmFtZSxcbiAgICAgICAgcmVjZWl2ZXI6IGNvbnZlcnRFeHByZXNzaW9uKGxvb2t1cC53aGF0LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KX0sIHttZW1iZXI6IG5vZGVMb2NhdGlvbihtZW1iZXIsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2FsbC53aGF0LmtpbmQgPT0gXCJwcm9wZXJ0eWxvb2t1cFwiICYmIGNhbGwuYXJndW1lbnRzLmxlbmd0aCA9PSAwKSB7XG4gICAgICBjb25zdCBsb29rdXAgPSAvKiogQHR5cGUge2ltcG9ydChcInBocC1wYXJzZXJcIikuUHJvcGVydHlMb29rdXB9ICovICgvKiogQHR5cGUge3Vua25vd259ICovIChjYWxsLndoYXQpKVxuICAgICAgY29uc3QgcmVjZWl2ZXIgPSBsb29rdXAud2hhdC5raW5kID09IFwidmFyaWFibGVcIiA/IC8qKiBAdHlwZSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5WYXJpYWJsZX0gKi8gKGxvb2t1cC53aGF0KSA6IHVuZGVmaW5lZFxuICAgICAgY29uc3QgbWVtYmVyID0gbG9va3VwLm9mZnNldC5raW5kID09IFwiaWRlbnRpZmllclwiID8gLyoqIEB0eXBlIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLklkZW50aWZpZXJ9ICovIChsb29rdXAub2Zmc2V0KSA6IHVuZGVmaW5lZFxuXG4gICAgICBpZiAocmVjZWl2ZXIgJiYgdHlwZW9mIHJlY2VpdmVyLm5hbWUgPT0gXCJzdHJpbmdcIiAmJiBtZW1iZXI/Lm5hbWUgPT0gXCJnZXRNZXNzYWdlXCIgJiYgY29udGV4dC5iaW5kaW5ncy5nZXQocmVjZWl2ZXIubmFtZSk/LmtpbmQgPT0gXCJFcnJvclR5cGVcIikge1xuICAgICAgICBjb25zdCByZWNlaXZlckxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKHJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gICAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJFcnJvck1lc3NhZ2VSZWFkXCIpLFxuICAgICAgICAgIGxvY2F0aW9uLFxuICAgICAgICAgIHJlY2VpdmVyOiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJJZGVudGlmaWVyRXhwcmVzc2lvblwiKSwgbG9jYXRpb246IHJlY2VpdmVyTG9jYXRpb24sIG5hbWU6IHJlY2VpdmVyLm5hbWV9LCB7XG4gICAgICAgICAgICBuYW1lOiByZWNlaXZlckxvY2F0aW9uXG4gICAgICAgICAgfSlcbiAgICAgICAgfSwge21lbWJlcjogbm9kZUxvY2F0aW9uKG1lbWJlciwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICAgICAgfVxuICAgICAgaWYgKG1lbWJlciAmJiB0eXBlb2YgbWVtYmVyLm5hbWUgPT0gXCJzdHJpbmdcIiAmJiBrbm93bkdlbmVyaWNSZWNvcmRBY2Nlc3NvclR5cGUobG9va3VwLCBjb250ZXh0KSkge1xuICAgICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICAgICAgZmllbGQ6IG1lbWJlci5uYW1lLFxuICAgICAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk1lbWJlclJlYWRcIiksXG4gICAgICAgICAgbG9jYXRpb24sXG4gICAgICAgICAgcmVjZWl2ZXI6IGNvbnZlcnRFeHByZXNzaW9uKGxvb2t1cC53aGF0LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICAgICAgICB9LCB7bWVtYmVyOiBub2RlTG9jYXRpb24obWVtYmVyLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNhbGwud2hhdC5raW5kID09IFwibmFtZVwiICYmIGNhbGwud2hhdC5uYW1lID09IFwiY291bnRcIiAmJiBjYWxsLmFyZ3VtZW50cy5sZW5ndGggPT0gMSkge1xuICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgICBjb2xsZWN0aW9uOiBjb252ZXJ0RXhwcmVzc2lvbihjYWxsLmFyZ3VtZW50c1swXSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCksXG4gICAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkNvbGxlY3Rpb25TaXplRXhwcmVzc2lvblwiKSxcbiAgICAgICAgbG9jYXRpb25cbiAgICAgIH0sIHtvcGVyYXRvcjogbm9kZUxvY2F0aW9uKGNhbGwud2hhdCwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICAgIH1cblxuICAgIGlmIChjYWxsLndoYXQua2luZCAhPSBcIm5hbWVcIikge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwiZHluYW1pYyBjYWxsXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICBjb25zdCBjYWxsZWROYW1lID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLk5hbWV9ICovIChjYWxsLndoYXQpXG5cbiAgICBpZiAoY2FsbGVkTmFtZS5yZXNvbHV0aW9uICE9IFwidXFuXCIgfHwgY2FsbGVkTmFtZS5uYW1lLmluY2x1ZGVzKFwiXFxcXFwiKSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwicXVhbGlmaWVkIGNhbGxcIiwgbm9kZUxvY2F0aW9uKGNhbGwud2hhdCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIGNvbnN0IHVuc3VwcG9ydGVkQXJndW1lbnQgPSBjYWxsLmFyZ3VtZW50cy5maW5kKChhcmd1bWVudCkgPT5cbiAgICAgIGFyZ3VtZW50LmtpbmQgPT0gXCJuYW1lZGFyZ3VtZW50XCIgfHwgYXJndW1lbnQua2luZCA9PSBcInZhcmlhZGljXCIgfHwgUmVmbGVjdC5nZXQoYXJndW1lbnQsIFwiYnlyZWZcIikgPT09IHRydWUpXG5cbiAgICBpZiAodW5zdXBwb3J0ZWRBcmd1bWVudCkge1xuICAgICAgY29uc3QgZGV0YWlsID0gdW5zdXBwb3J0ZWRBcmd1bWVudC5raW5kID09IFwibmFtZWRhcmd1bWVudFwiID8gXCJuYW1lZCBhcmd1bWVudFwiIDpcbiAgICAgICAgdW5zdXBwb3J0ZWRBcmd1bWVudC5raW5kID09IFwidmFyaWFkaWNcIiA/IFwidW5wYWNrZWQgYXJndW1lbnRcIiA6IFwiYnktcmVmZXJlbmNlIGFyZ3VtZW50XCJcblxuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIGRldGFpbCwgbm9kZUxvY2F0aW9uKHVuc3VwcG9ydGVkQXJndW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cblxuICAgIGNvbnN0IGNhbGxlZSA9IGNhbGxlZE5hbWUubmFtZVxuXG4gICAgY29uc3Qgc2lnbmF0dXJlID0gY29udGV4dC5mdW5jdGlvbnMuZ2V0KGNhbGxlZSlcbiAgICBjb25zdCBrbm93bkFyZ3VtZW50cyA9IGNhbGwuYXJndW1lbnRzLm1hcCgoYXJndW1lbnQpID0+IGtub3duQ2FsbEFyZ3VtZW50VHlwZShhcmd1bWVudCwgY29udGV4dCkpXG4gICAgY29uc3QgcGFyYW1ldGVyVHlwZXMgPSBzaWduYXR1cmUgPyBrbm93bkNhbGxQYXJhbWV0ZXJUeXBlcyhzaWduYXR1cmUsIGtub3duQXJndW1lbnRzKSA6IHVuZGVmaW5lZFxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgYXJndW1lbnRzOiBjYWxsLmFyZ3VtZW50cy5tYXAoKGFyZ3VtZW50LCBpbmRleCkgPT5cbiAgICAgICAgY29udmVydEV4cHJlc3Npb24oYXJndW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsXG4gICAgICAgICAgcGFyYW1ldGVyVHlwZXM/LltpbmRleF0gPz8gc2lnbmF0dXJlPy5wYXJhbWV0ZXJzW2luZGV4XT8udHlwZSxcbiAgICAgICAgICBwcmVzZXJ2ZXNHZW5lcmljT3B0aW9uYWxFdmlkZW5jZShzaWduYXR1cmUsIGluZGV4KSkpLFxuICAgICAgY2FsbGVlLFxuICAgICAga2luZDogXCJDYWxsRXhwcmVzc2lvblwiLFxuICAgICAgbG9jYXRpb25cbiAgICB9LCB7Y2FsbGVlOiBub2RlTG9jYXRpb24oY2FsbC53aGF0LCBmaWxlbmFtZSwgc291cmNlKX0pXG4gIH1cblxuICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgbm9kZS5raW5kLCBsb2NhdGlvbilcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyBvbmx5IHJlc3VsdCB0eXBlcyBlc3RhYmxpc2hlZCBieSBleHBsaWNpdCBzaWduYXR1cmVzIGFuZCBiaW5kaW5ncy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5FeHByZXNzaW9ufSBub2RlIC0gUGFyc2VyLW93bmVkIGV4cHJlc3Npb24uXG4gKiBAcGFyYW0ge1BocENvbnZlcnNpb25Db250ZXh0fSBjb250ZXh0IC0gVHlwZWQgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljRnVuY3Rpb25SZXR1cm5UeXBlIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JUeXBlIHwgdW5kZWZpbmVkfSBLbm93biByZXN1bHQgdHlwZS5cbiAqL1xuZnVuY3Rpb24ga25vd25FeHByZXNzaW9uVHlwZShub2RlLCBjb250ZXh0KSB7XG4gIGlmIChub2RlLmtpbmQgPT0gXCJ2YXJpYWJsZVwiKSB7XG4gICAgY29uc3QgdmFyaWFibGUgPSAvKiogQHR5cGUge2ltcG9ydChcInBocC1wYXJzZXJcIikuVmFyaWFibGV9ICovIChub2RlKVxuXG4gICAgaWYgKHZhcmlhYmxlLm5hbWUgPT0gXCJ0aGlzXCIgJiYgY29udGV4dC5jdXJyZW50Q2xhc3M/LmlkKSB7XG4gICAgICByZXR1cm4ge2RlY2xhcmF0aW9uSWQ6IGNvbnRleHQuY3VycmVudENsYXNzLmlkLCBraW5kOiBcIlJlZmVyZW5jZVR5cGVcIn1cbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2YXJpYWJsZS5uYW1lID09IFwic3RyaW5nXCIpIHJldHVybiBjb250ZXh0LmJpbmRpbmdzLmdldCh2YXJpYWJsZS5uYW1lKVxuICB9XG4gIGlmIChub2RlLmtpbmQgPT0gXCJjYWxsXCIpIHtcbiAgICBjb25zdCBjYWxsID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLkNhbGx9ICovIChub2RlKVxuICAgIGNvbnN0IG5hbWUgPSBjYWxsLndoYXQua2luZCA9PSBcIm5hbWVcIiAmJiB0eXBlb2YgY2FsbC53aGF0Lm5hbWUgPT0gXCJzdHJpbmdcIiA/IGNhbGwud2hhdC5uYW1lIDogdW5kZWZpbmVkXG5cbiAgICBpZiAobmFtZSkge1xuICAgICAgY29uc3Qgc2lnbmF0dXJlID0gY29udGV4dC5mdW5jdGlvbnMuZ2V0KG5hbWUpXG5cbiAgICAgIGlmIChzaWduYXR1cmUpIHJldHVybiBrbm93bkNhbGxSZXR1cm5UeXBlKHNpZ25hdHVyZSwgY2FsbC5hcmd1bWVudHMubWFwKChhcmd1bWVudCkgPT4ga25vd25FeHByZXNzaW9uVHlwZShhcmd1bWVudCwgY29udGV4dCkpKVxuICAgIH1cbiAgICBpZiAoY2FsbC53aGF0LmtpbmQgPT0gXCJwcm9wZXJ0eWxvb2t1cFwiICYmIGNhbGwuYXJndW1lbnRzLmxlbmd0aCA9PSAwKSB7XG4gICAgICByZXR1cm4ga25vd25HZW5lcmljUmVjb3JkQWNjZXNzb3JUeXBlKFxuICAgICAgICAvKiogQHR5cGUge2ltcG9ydChcInBocC1wYXJzZXJcIikuUHJvcGVydHlMb29rdXB9ICovICgvKiogQHR5cGUge3Vua25vd259ICovIChjYWxsLndoYXQpKSwgY29udGV4dClcbiAgICB9XG4gICAgaWYgKGNhbGwud2hhdC5raW5kID09IFwicHJvcGVydHlsb29rdXBcIikge1xuICAgICAgY29uc3QgbG9va3VwID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLlByb3BlcnR5TG9va3VwfSAqLyAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyAoY2FsbC53aGF0KSlcbiAgICAgIGNvbnN0IHJlY2VpdmVyID0ga25vd25FeHByZXNzaW9uVHlwZShsb29rdXAud2hhdCwgY29udGV4dClcbiAgICAgIGNvbnN0IG1lbWJlciA9IGxvb2t1cC5vZmZzZXQua2luZCA9PSBcImlkZW50aWZpZXJcIiA/IC8qKiBAdHlwZSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5JZGVudGlmaWVyfSAqLyAobG9va3VwLm9mZnNldCkgOiB1bmRlZmluZWRcblxuICAgICAgaWYgKHJlY2VpdmVyPy5raW5kID09IFwiUmVmZXJlbmNlVHlwZVwiICYmIG1lbWJlciAmJiB0eXBlb2YgbWVtYmVyLm5hbWUgPT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4gY29udGV4dC5jbGFzc2VzLmdldChyZWNlaXZlci5kZWNsYXJhdGlvbklkKT8ubWV0aG9kcy5maW5kKChtZXRob2QpID0+IG1ldGhvZC5uYW1lID09IG1lbWJlci5uYW1lKT8ucmV0dXJuVHlwZVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAobm9kZS5raW5kID09IFwib2Zmc2V0bG9va3VwXCIpIHtcbiAgICBjb25zdCBsb29rdXAgPSAvKiogQHR5cGUge2ltcG9ydChcInBocC1wYXJzZXJcIikuT2Zmc2V0TG9va3VwfSAqLyAobm9kZSlcbiAgICBjb25zdCBjb2xsZWN0aW9uVHlwZSA9IGtub3duRXhwcmVzc2lvblR5cGUobG9va3VwLndoYXQsIGNvbnRleHQpXG5cbiAgICBpZiAoY29sbGVjdGlvblR5cGU/LmtpbmQgPT0gXCJMaXN0VHlwZVwiKSByZXR1cm4gY29sbGVjdGlvblR5cGUuZWxlbWVudFR5cGVcbiAgICBpZiAoY29sbGVjdGlvblR5cGU/LmtpbmQgPT0gXCJNYXBUeXBlXCIgfHwgY29sbGVjdGlvblR5cGU/LmtpbmQgPT0gXCJPcmRlcmVkTWFwVHlwZVwiKSByZXR1cm4gY29sbGVjdGlvblR5cGUudmFsdWVUeXBlXG4gIH1cbiAgaWYgKG5vZGUua2luZCA9PSBcIm5ld1wiKSB7XG4gICAgY29uc3QgY29uc3RydWN0aW9uID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLk5ld30gKi8gKG5vZGUpXG4gICAgY29uc3QgbmFtZSA9IGNvbnN0cnVjdGlvbi53aGF0LmtpbmQgPT0gXCJuYW1lXCIgPyAvKiogQHR5cGUge2ltcG9ydChcInBocC1wYXJzZXJcIikuTmFtZX0gKi8gKGNvbnN0cnVjdGlvbi53aGF0KSA6IHVuZGVmaW5lZFxuICAgIGNvbnN0IGRlY2xhcmF0aW9uID0gbmFtZSAmJiB0eXBlb2YgbmFtZS5uYW1lID09IFwic3RyaW5nXCIgPyBjb250ZXh0LnJlY29yZE5hbWVzLmdldChuYW1lLm5hbWUpIDogdW5kZWZpbmVkXG5cbiAgICBpZiAoZGVjbGFyYXRpb24/LmlkKSByZXR1cm4gZGVjbGFyYXRpb24ua2luZCA9PSBcIkNsYXNzRGVjbGFyYXRpb25cIlxuICAgICAgPyB7ZGVjbGFyYXRpb25JZDogZGVjbGFyYXRpb24uaWQsIGtpbmQ6IFwiUmVmZXJlbmNlVHlwZVwifVxuICAgICAgOiB7ZGVjbGFyYXRpb25JZDogZGVjbGFyYXRpb24uaWQsIGtpbmQ6IFwiUmVjb3JkVHlwZVwifVxuICB9XG4gIGlmIChub2RlLmtpbmQgPT0gXCJwcm9wZXJ0eWxvb2t1cFwiKSB7XG4gICAgY29uc3QgcmVhZCA9IC8qKiBAdHlwZSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5Qcm9wZXJ0eUxvb2t1cH0gKi8gKG5vZGUpXG4gICAgY29uc3QgcmVjZWl2ZXIgPSBrbm93bkV4cHJlc3Npb25UeXBlKHJlYWQud2hhdCwgY29udGV4dClcblxuICAgIGlmIChyZWFkLndoYXQua2luZCA9PSBcInZhcmlhYmxlXCIgJiYgLyoqIEB0eXBlIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLlZhcmlhYmxlfSAqLyAocmVhZC53aGF0KS5uYW1lID09IFwidGhpc1wiICYmXG4gICAgICBjb250ZXh0LmN1cnJlbnRDbGFzcykge1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gcmVhZC5vZmZzZXQua2luZCA9PSBcImlkZW50aWZpZXJcIiA/IC8qKiBAdHlwZSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5JZGVudGlmaWVyfSAqLyAocmVhZC5vZmZzZXQpIDogdW5kZWZpbmVkXG5cbiAgICAgIHJldHVybiBjb250ZXh0LmN1cnJlbnRDbGFzcy5maWVsZHMuZmluZCgoZmllbGQpID0+IGZpZWxkLm5hbWUgPT0gb2Zmc2V0Py5uYW1lKT8udHlwZVxuICAgIH1cblxuICAgIGlmIChyZWNlaXZlcj8ua2luZCAhPSBcIlJlY29yZFR5cGVcIikgcmV0dXJuIHVuZGVmaW5lZFxuICAgIGNvbnN0IGRlY2xhcmF0aW9uID0gY29udGV4dC5yZWNvcmRzLmdldChyZWNlaXZlci5kZWNsYXJhdGlvbklkKVxuICAgIGNvbnN0IG9mZnNldCA9IHJlYWQub2Zmc2V0LmtpbmQgPT0gXCJpZGVudGlmaWVyXCIgPyAvKiogQHR5cGUge2ltcG9ydChcInBocC1wYXJzZXJcIikuSWRlbnRpZmllcn0gKi8gKHJlYWQub2Zmc2V0KSA6IHVuZGVmaW5lZFxuXG4gICAgY29uc3QgbWVtYmVyTmFtZSA9IG9mZnNldCAmJiB0eXBlb2Ygb2Zmc2V0Lm5hbWUgPT0gXCJzdHJpbmdcIiA/IG9mZnNldC5uYW1lIDogdW5kZWZpbmVkXG5cbiAgICBpZiAobWVtYmVyTmFtZSAmJiBkZWNsYXJhdGlvbikge1xuICAgICAgY29uc3QgaW5kZXggPSBkZWNsYXJhdGlvbi5maWVsZHMuZmluZEluZGV4KChmaWVsZCkgPT4gZmllbGQubmFtZSA9PSBtZW1iZXJOYW1lKVxuXG4gICAgICByZXR1cm4gaW5zdGFudGlhdGVkUmVjb3JkRmllbGRUeXBlKGRlY2xhcmF0aW9uLCByZWNlaXZlci5hcmd1bWVudHMsIGluZGV4KVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWRcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyBleGFjdCBwYXJzZXIta25vd24gYXJndW1lbnQgZXZpZGVuY2Ugd2l0aG91dCBjaGFuZ2luZyB0aGUgZXN0YWJsaXNoZWRcbiAqIGV4cHJlc3Npb24tcmVzdWx0IGNsYXNzaWZpZXIgdXNlZCBmb3Igb3B0aW9uYWwgY29udmVyc2lvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5FeHByZXNzaW9ufSBub2RlIC0gUGFyc2VyLW93bmVkIGNhbGwgYXJndW1lbnQuXG4gKiBAcGFyYW0ge1BocENvbnZlcnNpb25Db250ZXh0fSBjb250ZXh0IC0gVHlwZWQgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljRnVuY3Rpb25SZXR1cm5UeXBlIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JUeXBlIHwgdW5kZWZpbmVkfSBLbm93biBhcmd1bWVudCB0eXBlLlxuICovXG5mdW5jdGlvbiBrbm93bkNhbGxBcmd1bWVudFR5cGUobm9kZSwgY29udGV4dCkge1xuICBjb25zdCBrbm93biA9IGtub3duRXhwcmVzc2lvblR5cGUobm9kZSwgY29udGV4dClcblxuICBpZiAoa25vd24pIHJldHVybiBrbm93blxuICBpZiAobm9kZS5raW5kID09IFwibnVtYmVyXCIgJiYgTnVtYmVyLmlzU2FmZUludGVnZXIoTnVtYmVyKC8qKiBAdHlwZSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5OdW1iZXJ9ICovIChub2RlKS52YWx1ZSkpKSB7XG4gICAgcmV0dXJuIHNjYWxhclR5cGUoXCJpbnRlZ2VyXCIpXG4gIH1cbiAgaWYgKG5vZGUua2luZCA9PSBcImJvb2xlYW5cIiAmJiB0eXBlb2YgLyoqIEB0eXBlIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLkJvb2xlYW59ICovIChub2RlKS52YWx1ZSA9PSBcImJvb2xlYW5cIikge1xuICAgIHJldHVybiBzY2FsYXJUeXBlKFwiYm9vbGVhblwiKVxuICB9XG4gIGlmIChub2RlLmtpbmQgPT0gXCJzdHJpbmdcIiAmJiB0eXBlb2YgLyoqIEB0eXBlIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLlN0cmluZ30gKi8gKG5vZGUpLnZhbHVlID09IFwic3RyaW5nXCIgJiZcbiAgICBoYXNPbmx5VW5pY29kZVNjYWxhcnMoLyoqIEB0eXBlIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLlN0cmluZ30gKi8gKG5vZGUpLnZhbHVlKSkge1xuICAgIHJldHVybiBzY2FsYXJUeXBlKFwic3RyaW5nXCIpXG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkXG59XG5cbi8qKlxuICogUmVzb2x2ZXMgUEhQJ3MgZXhhY3QgemVyby1hcmd1bWVudCBhY2Nlc3NvciBjYXJyaWVyIGFnYWluc3QgaXRzIHJlY2VpdmVyJ3NcbiAqIGdlbmVyaWMgcmVjb3JkIGRlY2xhcmF0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLlByb3BlcnR5TG9va3VwfSBsb29rdXAgLSBQYXJzZXItb3duZWQgbWV0aG9kIGxvb2t1cC5cbiAqIEBwYXJhbSB7UGhwQ29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBjb252ZXJzaW9uIGNvbnRleHQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNWYWx1ZVR5cGUgfCB1bmRlZmluZWR9IEluc3RhbnRpYXRlZCBmaWVsZCB0eXBlLlxuICovXG5mdW5jdGlvbiBrbm93bkdlbmVyaWNSZWNvcmRBY2Nlc3NvclR5cGUobG9va3VwLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJlY2VpdmVyID0ga25vd25FeHByZXNzaW9uVHlwZShsb29rdXAud2hhdCwgY29udGV4dClcbiAgY29uc3QgcmVjZWl2ZXJSZWNvcmQgPSByZWNlaXZlcj8ua2luZCA9PSBcIk9wdGlvbmFsVHlwZVwiID8gcmVjZWl2ZXIudmFsdWVUeXBlIDogcmVjZWl2ZXJcblxuICBpZiAocmVjZWl2ZXJSZWNvcmQ/LmtpbmQgIT0gXCJSZWNvcmRUeXBlXCIpIHJldHVybiB1bmRlZmluZWRcbiAgY29uc3QgZGVjbGFyYXRpb24gPSBjb250ZXh0LnJlY29yZHMuZ2V0KHJlY2VpdmVyUmVjb3JkLmRlY2xhcmF0aW9uSWQpXG4gIGNvbnN0IG1lbWJlciA9IGxvb2t1cC5vZmZzZXQua2luZCA9PSBcImlkZW50aWZpZXJcIiA/IC8qKiBAdHlwZSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5JZGVudGlmaWVyfSAqLyAobG9va3VwLm9mZnNldCkgOiB1bmRlZmluZWRcbiAgY29uc3QgaW5kZXggPSBtZW1iZXIgJiYgdHlwZW9mIG1lbWJlci5uYW1lID09IFwic3RyaW5nXCJcbiAgICA/IGRlY2xhcmF0aW9uPy5maWVsZHMuZmluZEluZGV4KChmaWVsZCkgPT4gZmllbGQubmFtZSA9PSBtZW1iZXIubmFtZSkgPz8gLTFcbiAgICA6IC0xXG5cbiAgaWYgKCFkZWNsYXJhdGlvbiB8fCAoZGVjbGFyYXRpb24udHlwZVBhcmFtZXRlcnM/Lmxlbmd0aCA/PyAwKSA9PSAwIHx8IGluZGV4IDwgMCkgcmV0dXJuIHVuZGVmaW5lZFxuXG4gIHJldHVybiBpbnN0YW50aWF0ZWRSZWNvcmRGaWVsZFR5cGUoZGVjbGFyYXRpb24sIHJlY2VpdmVyUmVjb3JkLmFyZ3VtZW50cywgaW5kZXgpXG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIGV4cGxpY2l0IFBIUCByZXR1cm4uXG4gKiBAcGFyYW0ge2ltcG9ydChcInBocC1wYXJzZXJcIikuTm9kZX0gbm9kZSAtIFBIUCBub2RlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7UGhwQ29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBjb252ZXJzaW9uIGNvbnRleHQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmV0dXJuU3RhdGVtZW50fSBTZW1hbnRpYyByZXR1cm4uXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRSZXR1cm4obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmIChub2RlLmtpbmQgIT0gXCJyZXR1cm5cIikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIG5vZGUua2luZCwgbG9jYXRpb24pXG5cbiAgY29uc3QgcmV0dXJuTm9kZSA9IC8qKiBAdHlwZSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5SZXR1cm59ICovIChub2RlKVxuICBjb25zdCBleHBlY3RlZFR5cGUgPSBjb250ZXh0LnJldHVyblR5cGU/LmtpbmQgPT0gXCJUeXBlUmVmZXJlbmNlXCIgJiYgY29udGV4dC5yZXR1cm5UeXBlLm5hbWUgPT0gXCJ2b2lkXCJcbiAgICA/IHVuZGVmaW5lZFxuICAgIDogLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1ZhbHVlVHlwZSB8IHVuZGVmaW5lZH0gKi8gKGNvbnRleHQucmV0dXJuVHlwZSlcblxuICByZXR1cm4ge1xuICAgIC4uLihyZXR1cm5Ob2RlLmV4cHIgPyB7ZXhwcmVzc2lvbjogY29udmVydEV4cHJlc3Npb24ocmV0dXJuTm9kZS5leHByLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LCBleHBlY3RlZFR5cGUpfSA6IHt9KSxcbiAgICBraW5kOiBcIlJldHVyblN0YXRlbWVudFwiLFxuICAgIGxvY2F0aW9uXG4gIH1cbn1cblxuLyoqXG4gKiBSZWFkcyBvbmUgZXhhY3QgUEhQIGxvY2FsIGBAdmFyYCBjYXJyaWVyIGFuZCBpbW11dGFiaWxpdHkgbWFya2VyLlxuICogQHBhcmFtIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLk5vZGV9IG5vZGUgLSBBc3NpZ25tZW50LW93bmluZyBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIExvY2FsIG5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uPn0gcmVjb3JkTmFtZXMgLSBOb21pbmFsIGRlY2xhcmF0aW9ucyBieSBzb3VyY2UgbmFtZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHlwZVBhcmFtZXRlcj59IFt0eXBlUGFyYW1ldGVyc10gLSBEZWNsYXJhdGlvbi1zY29wZWQgcGFyYW1ldGVycy5cbiAqIEByZXR1cm5zIHt7aW1tdXRhYmxlOiBib29sZWFuLCB0eXBlOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1ZhbHVlVHlwZX0gfCB1bmRlZmluZWR9IE1ldGFkYXRhIHdoZW4gcHJlc2VudC5cbiAqL1xuZnVuY3Rpb24gbG9jYWxNZXRhZGF0YShub2RlLCBuYW1lLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcywgdHlwZVBhcmFtZXRlcnMgPSBuZXcgTWFwKCkpIHtcbiAgY29uc3QgY29tbWVudHMgPSBub2RlLmxlYWRpbmdDb21tZW50cyA/PyBbXVxuICBjb25zdCBjb21tZW50ID0gY29tbWVudHMuYXQoLTEpXG5cbiAgaWYgKCFjb21tZW50IHx8IGNvbW1lbnQua2luZCAhPSBcImNvbW1lbnRibG9ja1wiIHx8ICFjb21tZW50LmxvYyB8fCAhbm9kZS5sb2MpIHJldHVybiB1bmRlZmluZWRcblxuICBjb25zdCBnYXAgPSBzb3VyY2Uuc2xpY2UoY29tbWVudC5sb2MuZW5kLm9mZnNldCwgbm9kZS5sb2Muc3RhcnQub2Zmc2V0KVxuXG4gIGlmICghL15cXHMqJC91LnRlc3QoZ2FwKSB8fCAoZ2FwLm1hdGNoKC9cXG4vZ3UpPy5sZW5ndGggPz8gMCkgPiAxKSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgY29uc3QgYmxvY2sgPSBwYXJzZUNvbW1lbnQoY29tbWVudC52YWx1ZSlbMF1cbiAgY29uc3QgdGFncyA9IGJsb2NrPy50YWdzID8/IFtdXG4gIGNvbnN0IHZhcmlhYmxlcyA9IHRhZ3MuZmlsdGVyKCh0YWcpID0+IHRhZy50YWcgPT0gXCJ2YXJcIilcbiAgY29uc3QgaW1tdXRhYmxlID0gdGFncy5maWx0ZXIoKHRhZykgPT4gdGFnLnRhZyA9PSBcInNlbWFudGlmb2xkLWltbXV0YWJsZVwiKVxuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmICh2YXJpYWJsZXMubGVuZ3RoID09IDAgJiYgaW1tdXRhYmxlLmxlbmd0aCA9PSAwKSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgY29uc3QgZXhhY3RWYXJpYWJsZSA9IHZhcmlhYmxlcy5sZW5ndGggPT0gMSAmJiB2YXJpYWJsZXNbMF0udHlwZSA9PSBcIlwiICYmIHZhcmlhYmxlc1swXS5kZXNjcmlwdGlvbiA9PSBgJCR7bmFtZX1gXG4gIGNvbnN0IGV4YWN0SW1tdXRhYmxlID0gaW1tdXRhYmxlLmxlbmd0aCA8PSAxICYmIGltbXV0YWJsZS5ldmVyeSgodGFnKSA9PiB0YWcubmFtZSA9PSBcIlwiICYmIHRhZy50eXBlID09IFwiXCIgJiYgdGFnLmRlc2NyaXB0aW9uID09IFwiXCIpXG4gIGNvbnN0IGtub3duVGFncyA9IHRhZ3MuZXZlcnkoKHRhZykgPT4gdGFnLnRhZyA9PSBcInZhclwiIHx8IHRhZy50YWcgPT0gXCJzZW1hbnRpZm9sZC1pbW11dGFibGVcIilcblxuICBpZiAoIWV4YWN0VmFyaWFibGUgfHwgIWV4YWN0SW1tdXRhYmxlIHx8ICFrbm93blRhZ3MpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgXCJtYWxmb3JtZWQgbG9jYWwgdHlwZSBtZXRhZGF0YVwiLCBsb2NhdGlvbilcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgaW1tdXRhYmxlOiBpbW11dGFibGUubGVuZ3RoID09IDEsXG4gICAgdHlwZTogZG9jdW1lbnRlZFZhbHVlVHlwZSh7XG4gICAgICBsYW5ndWFnZTogXCJwaHBcIixcbiAgICAgIGxvY2F0aW9uOiBjb21tZW50VGFnTG9jYXRpb24oY29tbWVudCwgdmFyaWFibGVzWzBdLCBcIm5hbWVcIiwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICBvd25lckxvY2F0aW9uOiBsb2NhdGlvbixcbiAgICAgIHJlY29yZHM6IHJlY29yZE5hbWVzLFxuICAgICAgc291cmNlLFxuICAgICAgc291cmNlVHlwZTogdmFyaWFibGVzWzBdLm5hbWUsXG4gICAgICBzdWJqZWN0OiBgTG9jYWwgJyR7bmFtZX0nYCxcbiAgICAgIHR5cGVQYXJhbWV0ZXJzXG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBQSFAgbG9jYWwgZGVjbGFyYXRpb24gb3IgYXNzaWdubWVudC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5Ob2RlfSBub2RlIC0gUEhQIHN0YXRlbWVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge1BocENvbnZlcnNpb25Db250ZXh0fSBjb250ZXh0IC0gVHlwZWQgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkxvY2FsU3RhdGVtZW50IHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUHJpdmF0ZUZpZWxkV3JpdGVTdGF0ZW1lbnR9IFNlbWFudGljIGxvY2FsIG9yIHByaXZhdGUtZmllbGQgc3RhdGVtZW50LlxuICovXG5mdW5jdGlvbiBjb252ZXJ0TG9jYWxTdGF0ZW1lbnQobm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmIChub2RlLmtpbmQgIT0gXCJleHByZXNzaW9uc3RhdGVtZW50XCIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBub2RlLmtpbmQsIGxvY2F0aW9uKVxuXG4gIGNvbnN0IGV4cHJlc3Npb24gPSAvKiogQHR5cGUge2ltcG9ydChcInBocC1wYXJzZXJcIikuRXhwcmVzc2lvblN0YXRlbWVudH0gKi8gKG5vZGUpLmV4cHJlc3Npb25cblxuICBpZiAoZXhwcmVzc2lvbi5raW5kICE9IFwiYXNzaWduXCIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBleHByZXNzaW9uLmtpbmQsIG5vZGVMb2NhdGlvbihleHByZXNzaW9uLCBmaWxlbmFtZSwgc291cmNlKSlcblxuICBjb25zdCBhc3NpZ25tZW50ID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLkFzc2lnbn0gKi8gKGV4cHJlc3Npb24pXG5cbiAgaWYgKGFzc2lnbm1lbnQub3BlcmF0b3IgIT0gXCI9XCIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBgYXNzaWdubWVudCAke2Fzc2lnbm1lbnQub3BlcmF0b3J9YCwgbG9jYXRpb24pXG4gIGlmIChhc3NpZ25tZW50LmxlZnQua2luZCA9PSBcInByb3BlcnR5bG9va3VwXCIgJiYgY29udGV4dC5jdXJyZW50Q2xhc3MpIHtcbiAgICBjb25zdCBsb29rdXAgPSAvKiogQHR5cGUge2ltcG9ydChcInBocC1wYXJzZXJcIikuUHJvcGVydHlMb29rdXB9ICovIChhc3NpZ25tZW50LmxlZnQpXG4gICAgY29uc3QgcmVjZWl2ZXIgPSBsb29rdXAud2hhdC5raW5kID09IFwidmFyaWFibGVcIiA/IC8qKiBAdHlwZSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5WYXJpYWJsZX0gKi8gKGxvb2t1cC53aGF0KSA6IHVuZGVmaW5lZFxuICAgIGNvbnN0IG1lbWJlciA9IGxvb2t1cC5vZmZzZXQua2luZCA9PSBcImlkZW50aWZpZXJcIiA/IC8qKiBAdHlwZSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5JZGVudGlmaWVyfSAqLyAobG9va3VwLm9mZnNldCkgOiB1bmRlZmluZWRcbiAgICBjb25zdCBmaWVsZCA9IHJlY2VpdmVyPy5uYW1lID09IFwidGhpc1wiICYmIG1lbWJlciAmJiB0eXBlb2YgbWVtYmVyLm5hbWUgPT0gXCJzdHJpbmdcIlxuICAgICAgPyBjb250ZXh0LmN1cnJlbnRDbGFzcy5maWVsZHMuZmluZCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUubmFtZSA9PSBtZW1iZXIubmFtZSlcbiAgICAgIDogdW5kZWZpbmVkXG5cbiAgICBpZiAoIWZpZWxkKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgXCJwcml2YXRlIGZpZWxkIHdyaXRlIG91dHNpZGUgdGhlIGRlY2xhcmluZyByZWNlaXZlclwiLCBub2RlTG9jYXRpb24oYXNzaWdubWVudC5sZWZ0LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7ZXhwcmVzc2lvbjogY29udmVydEV4cHJlc3Npb24oYXNzaWdubWVudC5yaWdodCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgZmllbGQudHlwZSksXG4gICAgICBmaWVsZDogLyoqIEB0eXBlIHtzdHJpbmd9ICovIChmaWVsZC5pZCksIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlByaXZhdGVGaWVsZFdyaXRlU3RhdGVtZW50XCIpLCBsb2NhdGlvbixcbiAgICAgIHJlY2VpdmVyOiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY2VpdmVyRXhwcmVzc2lvbn0gKi8gKFxuICAgICAgICBjb252ZXJ0RXhwcmVzc2lvbihsb29rdXAud2hhdCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkpfSxcbiAgICB7bWVtYmVyOiBub2RlTG9jYXRpb24oLyoqIEB0eXBlIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLklkZW50aWZpZXJ9ICovIChtZW1iZXIpLCBmaWxlbmFtZSwgc291cmNlKSwgb3BlcmF0b3I6IHRva2VuTG9jYXRpb24oXCI9XCIsIGFzc2lnbm1lbnQubGVmdC5sb2M/LmVuZC5vZmZzZXQgPz8gMCxcbiAgICAgIGFzc2lnbm1lbnQucmlnaHQubG9jPy5zdGFydC5vZmZzZXQgPz8gc291cmNlLmxlbmd0aCwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICB9XG4gIGlmIChhc3NpZ25tZW50LmxlZnQua2luZCAhPSBcInZhcmlhYmxlXCIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBhc3NpZ25tZW50LmxlZnQua2luZCwgbm9kZUxvY2F0aW9uKGFzc2lnbm1lbnQubGVmdCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIGlmIChhc3NpZ25tZW50LnJpZ2h0LmtpbmQgPT0gXCJ0aHJvd1wiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwidGhyb3cgZXhwcmVzc2lvbiBpbiBhIHZhbHVlIGNvbnRleHRcIiwgbm9kZUxvY2F0aW9uKGFzc2lnbm1lbnQucmlnaHQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG5cbiAgY29uc3QgdmFyaWFibGUgPSAvKiogQHR5cGUge2ltcG9ydChcInBocC1wYXJzZXJcIikuVmFyaWFibGV9ICovIChhc3NpZ25tZW50LmxlZnQpXG4gIGNvbnN0IHRhcmdldExvY2F0aW9uID0gbm9kZUxvY2F0aW9uKHZhcmlhYmxlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmICh0eXBlb2YgdmFyaWFibGUubmFtZSAhPSBcInN0cmluZ1wiIHx8IHZhcmlhYmxlLmN1cmx5KSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgXCJkeW5hbWljIHZhcmlhYmxlXCIsIHRhcmdldExvY2F0aW9uKVxuXG4gIGNvbnN0IG1ldGFkYXRhID0gbG9jYWxNZXRhZGF0YShub2RlLCB2YXJpYWJsZS5uYW1lLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LnJlY29yZE5hbWVzLCBjb250ZXh0LnR5cGVQYXJhbWV0ZXJzKVxuXG4gIGlmIChtZXRhZGF0YSkge1xuICAgIGxldCBkZWNsYXJlZFR5cGUgPSBtZXRhZGF0YS50eXBlXG4gICAgbGV0IG9yZGVyZWQgPSBmYWxzZVxuXG4gICAgaWYgKGRlY2xhcmVkVHlwZS5raW5kID09IFwiTWFwVHlwZVwiICYmIGNvbnRleHQub3JkZXJlZE1hcERlY2xhcmF0aW9ucz8uaGFzKGFzc2lnbm1lbnQpICYmIGFzc2lnbm1lbnQucmlnaHQua2luZCA9PSBcImFycmF5XCIpIHtcbiAgICAgIGRlY2xhcmVkVHlwZSA9IG9yZGVyZWRNYXBUeXBlRnJvbU1hcChkZWNsYXJlZFR5cGUsIGxvY2F0aW9uKVxuICAgICAgb3JkZXJlZCA9IHRydWVcbiAgICB9XG4gICAgY29uc3QgaW5pdGlhbGl6ZXIgPSBjb252ZXJ0RXhwcmVzc2lvbihhc3NpZ25tZW50LnJpZ2h0LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LCBkZWNsYXJlZFR5cGUpXG5cbiAgICBjb250ZXh0LmJpbmRpbmdzLnNldCh2YXJpYWJsZS5uYW1lLCBkZWNsYXJlZFR5cGUpXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgaW5pdGlhbGl6ZXIsXG4gICAgICBraW5kOiBcIkxvY2FsRGVjbGFyYXRpb25cIixcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgbXV0YWJsZTogb3JkZXJlZCA/IGZhbHNlIDogIW1ldGFkYXRhLmltbXV0YWJsZSxcbiAgICAgIG5hbWU6IHZhcmlhYmxlLm5hbWUsXG4gICAgICB0eXBlOiBkZWNsYXJlZFR5cGVcbiAgICB9LCB7XG4gICAgICBuYW1lOiB0YXJnZXRMb2NhdGlvbixcbiAgICAgIG9wZXJhdG9yOiB0b2tlbkxvY2F0aW9uKFwiPVwiLCBhc3NpZ25tZW50LmxlZnQubG9jPy5lbmQub2Zmc2V0ID8/IDAsIGFzc2lnbm1lbnQucmlnaHQubG9jPy5zdGFydC5vZmZzZXQgPz8gc291cmNlLmxlbmd0aCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICB9KVxuICB9XG5cbiAgY29uc3QgaW5mZXJyZWRUeXBlID0ga25vd25FeHByZXNzaW9uVHlwZShhc3NpZ25tZW50LnJpZ2h0LCBjb250ZXh0KVxuXG4gIGlmIChpbmZlcnJlZFR5cGU/LmtpbmQgPT0gXCJSZWNvcmRUeXBlXCIgfHwgaW5mZXJyZWRUeXBlPy5raW5kID09IFwiUmVmZXJlbmNlVHlwZVwiIHx8XG4gICAgaW5mZXJyZWRUeXBlPy5raW5kID09IFwiT3duZWRSZXNvdXJjZVR5cGVcIikge1xuICAgIGNvbnN0IGluaXRpYWxpemVyID0gY29udmVydEV4cHJlc3Npb24oYXNzaWdubWVudC5yaWdodCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgaW5mZXJyZWRUeXBlKVxuXG4gICAgY29udGV4dC5iaW5kaW5ncy5zZXQodmFyaWFibGUubmFtZSwgaW5mZXJyZWRUeXBlKVxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGluaXRpYWxpemVyLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTG9jYWxEZWNsYXJhdGlvblwiKSxcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgbXV0YWJsZTogZmFsc2UsXG4gICAgICBuYW1lOiB2YXJpYWJsZS5uYW1lLFxuICAgICAgdHlwZTogaW5mZXJyZWRUeXBlXG4gICAgfSwge1xuICAgICAgbmFtZTogdGFyZ2V0TG9jYXRpb24sXG4gICAgICBvcGVyYXRvcjogdG9rZW5Mb2NhdGlvbihcIj1cIiwgYXNzaWdubWVudC5sZWZ0LmxvYz8uZW5kLm9mZnNldCA/PyAwLCBhc3NpZ25tZW50LnJpZ2h0LmxvYz8uc3RhcnQub2Zmc2V0ID8/IHNvdXJjZS5sZW5ndGgsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IGJpbmRpbmdUeXBlID0gY29udGV4dC5iaW5kaW5ncy5nZXQodmFyaWFibGUubmFtZSlcblxuICBpZiAoIWJpbmRpbmdUeXBlKSByZXR1cm4gbWlzc2luZ1R5cGUoXCJwaHBcIiwgYExvY2FsICcke3ZhcmlhYmxlLm5hbWV9J2AsIGxvY2F0aW9uKVxuXG4gIGNvbnN0IHRhcmdldCA9IHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIklkZW50aWZpZXJFeHByZXNzaW9uXCIpLCBsb2NhdGlvbjogdGFyZ2V0TG9jYXRpb24sIG5hbWU6IHZhcmlhYmxlLm5hbWV9LCB7XG4gICAgbmFtZTogdGFyZ2V0TG9jYXRpb25cbiAgfSlcbiAgY29uc3QgdmFsdWUgPSBjb252ZXJ0RXhwcmVzc2lvbihhc3NpZ25tZW50LnJpZ2h0LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LFxuICAgIGJpbmRpbmdUeXBlLmtpbmQgPT0gXCJFcnJvclR5cGVcIiA/IHVuZGVmaW5lZCA6IGJpbmRpbmdUeXBlKVxuXG4gIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICBleHByZXNzaW9uOiB2YWx1ZSxcbiAgICBraW5kOiBcIkFzc2lnbm1lbnRTdGF0ZW1lbnRcIixcbiAgICBsb2NhdGlvbixcbiAgICB0YXJnZXRcbiAgfSwge1xuICAgIG9wZXJhdG9yOiB0b2tlbkxvY2F0aW9uKFwiPVwiLCBhc3NpZ25tZW50LmxlZnQubG9jPy5lbmQub2Zmc2V0ID8/IDAsIGFzc2lnbm1lbnQucmlnaHQubG9jPy5zdGFydC5vZmZzZXQgPz8gc291cmNlLmxlbmd0aCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgfSlcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgZXhoYXVzdGl2ZSBQSFAgc3RhdGVtZW50LlxuICogQHBhcmFtIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLk5vZGV9IG5vZGUgLSBQSFAgc3RhdGVtZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7UGhwQ29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBjb252ZXJzaW9uIGNvbnRleHQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU3RhdGVtZW50fSBTZW1hbnRpYyBzdGF0ZW1lbnQuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRTdGF0ZW1lbnQobm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkge1xuICBpZiAobm9kZS5raW5kID09IFwicmV0dXJuXCIpIHJldHVybiBjb252ZXJ0UmV0dXJuKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gIGlmIChub2RlLmtpbmQgPT0gXCJpZlwiKSByZXR1cm4gY29udmVydElmKC8qKiBAdHlwZSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5JZn0gKi8gKG5vZGUpLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICBpZiAobm9kZS5raW5kID09IFwidGhyb3dcIikgcmV0dXJuIGNvbnZlcnRQaHBSYWlzZShub2RlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICBpZiAobm9kZS5raW5kID09IFwidHJ5XCIpIHJldHVybiBjb252ZXJ0UGhwVHJ5KG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gIGlmIChub2RlLmtpbmQgPT0gXCJ3aGlsZVwiKSByZXR1cm4gY29udmVydFdoaWxlKC8qKiBAdHlwZSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5XaGlsZX0gKi8gKG5vZGUpLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICBpZiAobm9kZS5raW5kID09IFwiZm9yZWFjaFwiKSByZXR1cm4gY29udmVydEZvckVhY2goLyoqIEB0eXBlIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLkZvcmVhY2h9ICovIChub2RlKSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgaWYgKG5vZGUua2luZCA9PSBcImJyZWFrXCIgfHwgbm9kZS5raW5kID09IFwiY29udGludWVcIikge1xuICAgIGNvbnN0IGNvbnRyb2wgPSAvKiogQHR5cGUge2ltcG9ydChcInBocC1wYXJzZXJcIikuQnJlYWsgfCBpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLkNvbnRpbnVlfSAqLyAobm9kZSlcblxuICAgIGlmIChjb250cm9sLmxldmVsKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgYCR7bm9kZS5raW5kfSBsZXZlbGAsIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICBjb25zdCBsb2NhdGlvbiA9IHRva2VuTG9jYXRpb24obm9kZS5raW5kLCBub2RlLmxvYz8uc3RhcnQub2Zmc2V0ID8/IDAsIG5vZGUubG9jPy5lbmQub2Zmc2V0ID8/IHNvdXJjZS5sZW5ndGgsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBraW5kOiAvKiogQHR5cGUge1wiQnJlYWtTdGF0ZW1lbnRcIiB8IFwiQ29udGludWVTdGF0ZW1lbnRcIn0gKi8gKG5vZGUua2luZCA9PSBcImJyZWFrXCIgPyBcIkJyZWFrU3RhdGVtZW50XCIgOiBcIkNvbnRpbnVlU3RhdGVtZW50XCIpLFxuICAgICAgbG9jYXRpb25cbiAgICB9LCB7a2V5d29yZDogbG9jYXRpb259KVxuICB9XG4gIGlmIChub2RlLmtpbmQgPT0gXCJlY2hvXCIpIHJldHVybiBjb252ZXJ0UHJpbnQoLyoqIEB0eXBlIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLkVjaG99ICovIChub2RlKSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgaWYgKG5vZGUua2luZCA9PSBcImV4cHJlc3Npb25zdGF0ZW1lbnRcIikge1xuICAgIGNvbnN0IGV4cHJlc3Npb24gPSAvKiogQHR5cGUge2ltcG9ydChcInBocC1wYXJzZXJcIikuRXhwcmVzc2lvblN0YXRlbWVudH0gKi8gKG5vZGUpLmV4cHJlc3Npb25cblxuICAgIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJjYWxsXCIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGV4cHJlc3Npb246IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2FsbEV4cHJlc3Npb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5NZXRob2RDYWxsRXhwcmVzc2lvbn0gKi8gKFxuICAgICAgICAgIGNvbnZlcnRFeHByZXNzaW9uKGV4cHJlc3Npb24sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gICAgICAgICksXG4gICAgICAgIGtpbmQ6IFwiRXhwcmVzc2lvblN0YXRlbWVudFwiLFxuICAgICAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnZlcnRMb2NhbFN0YXRlbWVudChub2RlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICB9XG5cbiAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIG5vZGUua2luZCwgbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxufVxuXG4vKipcbiAqIENvbnZlcnRzIGV4YWN0IGB0aHJvdyBuZXcgRGVjbGFyZWRFcnJvcihtZXNzYWdlKWAuXG4gKiBAcGFyYW0ge2ltcG9ydChcInBocC1wYXJzZXJcIikuTm9kZX0gbm9kZSAtIFBIUCB0aHJvdyBub2RlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7UGhwQ29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnRleHQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmFpc2VTdGF0ZW1lbnR9IFNlbWFudGljIHJhaXNlLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0UGhwUmFpc2Uobm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBjb25zdHJ1Y3Rpb24gPSBSZWZsZWN0LmdldChub2RlLCBcIndoYXRcIilcblxuICBpZiAoIWNvbnN0cnVjdGlvbiB8fCBjb25zdHJ1Y3Rpb24ua2luZCAhPSBcIm5ld1wiIHx8IGNvbnN0cnVjdGlvbi53aGF0Py5raW5kICE9IFwibmFtZVwiIHx8XG4gICAgY29uc3RydWN0aW9uLndoYXQucmVzb2x1dGlvbiAhPSBcInVxblwiIHx8ICFjb250ZXh0LmVycm9yTmFtZXMuaGFzKGNvbnN0cnVjdGlvbi53aGF0Lm5hbWUpIHx8XG4gICAgIUFycmF5LmlzQXJyYXkoY29uc3RydWN0aW9uLmFyZ3VtZW50cykgfHwgY29uc3RydWN0aW9uLmFyZ3VtZW50cy5sZW5ndGggIT0gMSB8fFxuICAgIGNvbnN0cnVjdGlvbi5hcmd1bWVudHNbMF0ua2luZCA9PSBcIm5hbWVkYXJndW1lbnRcIiB8fCBjb25zdHJ1Y3Rpb24uYXJndW1lbnRzWzBdLmtpbmQgPT0gXCJ2YXJpYWRpY1wiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwidGhyb3cgb3RoZXIgdGhhbiBleGFjdCBkZWNsYXJlZCBlcnJvciBjb25zdHJ1Y3Rpb25cIiwgbG9jYXRpb24pXG4gIH1cbiAgY29uc3QgZGVjbGFyYXRpb24gPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb259ICovIChjb250ZXh0LmVycm9yTmFtZXMuZ2V0KGNvbnN0cnVjdGlvbi53aGF0Lm5hbWUpKVxuICBjb25zdCB0eXBlTG9jYXRpb24gPSBub2RlTG9jYXRpb24oY29uc3RydWN0aW9uLndoYXQsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgIGVycm9yOiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGVycm9yOiB3aXRoUGFyc2VyUmFuZ2VzKHtkZWNsYXJhdGlvbklkOiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGRlY2xhcmF0aW9uLmlkKSwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiRXJyb3JUeXBlXCIpfSwge3R5cGU6IHR5cGVMb2NhdGlvbn0pLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiRXJyb3JDb25zdHJ1Y3Rpb25cIiksXG4gICAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKGNvbnN0cnVjdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICBtZXNzYWdlOiBjb252ZXJ0RXhwcmVzc2lvbihjb25zdHJ1Y3Rpb24uYXJndW1lbnRzWzBdLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICAgIH0sIHt0eXBlOiB0eXBlTG9jYXRpb259KSxcbiAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJSYWlzZVN0YXRlbWVudFwiKSxcbiAgICBsb2NhdGlvblxuICB9LCB7a2V5d29yZDogdG9rZW5Mb2NhdGlvbihcInRocm93XCIsIG5vZGUubG9jPy5zdGFydC5vZmZzZXQgPz8gMCwgY29uc3RydWN0aW9uLmxvYz8uc3RhcnQub2Zmc2V0ID8/IHNvdXJjZS5sZW5ndGgsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgZXhhY3QgdHlwZWQgY2F0Y2ggd2l0aCBubyBmaW5hbGx5LlxuICogQHBhcmFtIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLk5vZGV9IG5vZGUgLSBQSFAgdHJ5IG5vZGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtQaHBDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UcnlTdGF0ZW1lbnR9IFNlbWFudGljIGV4YWN0IGhhbmRsZXIuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRQaHBUcnkobm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBjYXRjaGVzID0gUmVmbGVjdC5nZXQobm9kZSwgXCJjYXRjaGVzXCIpXG4gIGNvbnN0IGJvZHkgPSBSZWZsZWN0LmdldChub2RlLCBcImJvZHlcIilcblxuICBpZiAoUmVmbGVjdC5nZXQobm9kZSwgXCJhbHdheXNcIikgfHwgIUFycmF5LmlzQXJyYXkoY2F0Y2hlcykgfHwgY2F0Y2hlcy5sZW5ndGggIT0gMSB8fCBib2R5Py5raW5kICE9IFwiYmxvY2tcIikge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBcInRyeSB3aXRob3V0IG9uZSB0eXBlZCBjYXRjaCBhbmQgbm8gZmluYWxseVwiLCBsb2NhdGlvbilcbiAgfVxuICBjb25zdCBoYW5kbGVyID0gY2F0Y2hlc1swXVxuICBjb25zdCBjYXVnaHQgPSBoYW5kbGVyLndoYXQ/LlswXVxuICBjb25zdCBiaW5kaW5nID0gaGFuZGxlci52YXJpYWJsZVxuXG4gIGlmIChoYW5kbGVyLndoYXQ/Lmxlbmd0aCAhPSAxIHx8IGNhdWdodD8ua2luZCAhPSBcIm5hbWVcIiB8fCBjYXVnaHQucmVzb2x1dGlvbiAhPSBcInVxblwiIHx8XG4gICAgIWNvbnRleHQuZXJyb3JOYW1lcy5oYXMoY2F1Z2h0Lm5hbWUpIHx8IGJpbmRpbmc/LmtpbmQgIT0gXCJ2YXJpYWJsZVwiIHx8IHR5cGVvZiBiaW5kaW5nLm5hbWUgIT0gXCJzdHJpbmdcIiB8fFxuICAgIGJpbmRpbmcuY3VybHkgfHwgaGFuZGxlci5ib2R5Py5raW5kICE9IFwiYmxvY2tcIikge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBcImJyb2FkLCBtdWx0aXBsZSwgb3IgbWFsZm9ybWVkIGNhdGNoXCIsIG5vZGVMb2NhdGlvbihoYW5kbGVyLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBjb25zdCBkZWNsYXJhdGlvbiA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbn0gKi8gKGNvbnRleHQuZXJyb3JOYW1lcy5nZXQoY2F1Z2h0Lm5hbWUpKVxuICBjb25zdCBjYXVnaHRMb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihjYXVnaHQsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IGNhdGNoVHlwZSA9IHdpdGhQYXJzZXJSYW5nZXMoe2RlY2xhcmF0aW9uSWQ6IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZGVjbGFyYXRpb24uaWQpLCBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJFcnJvclR5cGVcIil9LCB7XG4gICAgdHlwZTogY2F1Z2h0TG9jYXRpb25cbiAgfSlcbiAgY29uc3QgYm9keUNvbnRleHQgPSB7Li4uY29udGV4dCwgYmluZGluZ3M6IG5ldyBNYXAoY29udGV4dC5iaW5kaW5ncyl9XG4gIGNvbnN0IGNhdGNoQ29udGV4dCA9IHsuLi5jb250ZXh0LCBiaW5kaW5nczogbmV3IE1hcChjb250ZXh0LmJpbmRpbmdzKX1cblxuICBjYXRjaENvbnRleHQuYmluZGluZ3Muc2V0KGJpbmRpbmcubmFtZSwgY2F0Y2hUeXBlKVxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgYm9keTogY29udmVydEJsb2NrKGJvZHksIGZpbGVuYW1lLCBzb3VyY2UsIGJvZHlDb250ZXh0KSxcbiAgICBjYXRjaEJpbmRpbmc6IHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiQ2F0Y2hCaW5kaW5nXCIpLFxuICAgICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihiaW5kaW5nLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIG11dGFibGU6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChmYWxzZSksXG4gICAgICBuYW1lOiBiaW5kaW5nLm5hbWUsXG4gICAgICB0eXBlOiBjYXRjaFR5cGVcbiAgICB9LCB7bmFtZTogbm9kZUxvY2F0aW9uKGJpbmRpbmcsIGZpbGVuYW1lLCBzb3VyY2UpfSksXG4gICAgY2F0Y2hCb2R5OiBjb252ZXJ0QmxvY2soaGFuZGxlci5ib2R5LCBmaWxlbmFtZSwgc291cmNlLCBjYXRjaENvbnRleHQpLFxuICAgIGNhdGNoVHlwZSxcbiAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJUcnlTdGF0ZW1lbnRcIiksXG4gICAgbG9jYXRpb25cbiAgfSwge2NhdGNoOiBub2RlTG9jYXRpb24oaGFuZGxlciwgZmlsZW5hbWUsIHNvdXJjZSksIHRyeTogdG9rZW5Mb2NhdGlvbihcInRyeVwiLCBub2RlLmxvYz8uc3RhcnQub2Zmc2V0ID8/IDAsIGJvZHkubG9jPy5zdGFydC5vZmZzZXQgPz8gc291cmNlLmxlbmd0aCwgZmlsZW5hbWUsIHNvdXJjZSl9KVxufVxuXG4vKipcbiAqIENvbnZlcnRzIGV4YWN0IGJsb2NrLWZvcm0gUEhQIGBmb3JlYWNoICgkbGlzdCBhcyAkdmFsdWUpYC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5Gb3JlYWNofSBub2RlIC0gUEhQIGZvcmVhY2ggbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge1BocENvbnZlcnNpb25Db250ZXh0fSBjb250ZXh0IC0gVHlwZWQgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkZvckVhY2hTdGF0ZW1lbnQgfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Gb3JFYWNoTWFwU3RhdGVtZW50fSBTZW1hbnRpYyBsb29wLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0Rm9yRWFjaChub2RlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKG5vZGUuc2hvcnRGb3JtKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgXCJhbHRlcm5hdGl2ZSBmb3JlYWNoIHN5bnRheFwiLCBsb2NhdGlvbilcbiAgaWYgKG5vZGUudmFsdWUua2luZCAhPSBcInZhcmlhYmxlXCIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBcImZvcmVhY2ggZGVzdHJ1Y3R1cmluZ1wiLCBub2RlTG9jYXRpb24obm9kZS52YWx1ZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIGNvbnN0IHZhcmlhYmxlID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLlZhcmlhYmxlfSAqLyAobm9kZS52YWx1ZSlcblxuICBpZiAoUmVmbGVjdC5nZXQodmFyaWFibGUsIFwiYnlyZWZcIikgPT09IHRydWUpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBcImJ5LXJlZmVyZW5jZSBmb3JlYWNoXCIsIG5vZGVMb2NhdGlvbih2YXJpYWJsZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIGlmICh0eXBlb2YgdmFyaWFibGUubmFtZSAhPSBcInN0cmluZ1wiIHx8IHZhcmlhYmxlLmN1cmx5KSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgXCJkeW5hbWljIGZvcmVhY2ggYmluZGluZ1wiLCBub2RlTG9jYXRpb24odmFyaWFibGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICBpZiAoIW5vZGUuYm9keSB8fCBub2RlLmJvZHkua2luZCAhPSBcImJsb2NrXCIpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgXCJmb3JlYWNoIHdpdGhvdXQgYmxvY2sgYm9keVwiLCBub2RlLmJvZHkgPyBub2RlTG9jYXRpb24obm9kZS5ib2R5LCBmaWxlbmFtZSwgc291cmNlKSA6IGxvY2F0aW9uKVxuICB9XG4gIGNvbnN0IGJvZHkgPSAvKiogQHR5cGUge2ltcG9ydChcInBocC1wYXJzZXJcIikuQmxvY2t9ICovIChub2RlLmJvZHkpXG4gIGNvbnN0IGNvbGxlY3Rpb25UeXBlID0gaXRlcmF0aW9uT3BlcmFuZFR5cGUoa25vd25FeHByZXNzaW9uVHlwZShub2RlLnNvdXJjZSwgY29udGV4dCkpXG5cbiAgaWYgKG5vZGUua2V5KSB7XG4gICAgaWYgKG5vZGUua2V5LmtpbmQgIT0gXCJ2YXJpYWJsZVwiKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgXCJmb3JlYWNoIGtleSBiaW5kaW5nIHNoYXBlXCIsIG5vZGVMb2NhdGlvbihub2RlLmtleSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgY29uc3Qga2V5VmFyaWFibGUgPSAvKiogQHR5cGUge2ltcG9ydChcInBocC1wYXJzZXJcIikuVmFyaWFibGV9ICovIChub2RlLmtleSlcblxuICAgIGlmIChSZWZsZWN0LmdldChrZXlWYXJpYWJsZSwgXCJieXJlZlwiKSA9PT0gdHJ1ZSB8fCB0eXBlb2Yga2V5VmFyaWFibGUubmFtZSAhPSBcInN0cmluZ1wiIHx8IGtleVZhcmlhYmxlLmN1cmx5KSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgXCJpbnZhbGlkIGZvcmVhY2gga2V5IGJpbmRpbmdcIiwgbm9kZUxvY2F0aW9uKGtleVZhcmlhYmxlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgaWYgKGNvbGxlY3Rpb25UeXBlPy5raW5kID09IFwiTWFwVHlwZVwiKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgXCJ1bm9yZGVyZWQgbWFwIGl0ZXJhdGlvblwiLCBub2RlTG9jYXRpb24obm9kZS5zb3VyY2UsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cbiAgICBpZiAoIWNvbGxlY3Rpb25UeXBlIHx8IGNvbGxlY3Rpb25UeXBlLmtpbmQgIT0gXCJPcmRlcmVkTWFwVHlwZVwiKSB7XG4gICAgICByZXR1cm4gbWlzc2luZ1R5cGUoXCJwaHBcIiwgXCJPcmRlcmVkIG1hcCBpdGVyYXRpb24gY29sbGVjdGlvblwiLCBub2RlTG9jYXRpb24obm9kZS5zb3VyY2UsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cbiAgICBjb25zdCBrZXlMb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihrZXlWYXJpYWJsZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICBjb25zdCB2YWx1ZUxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKHZhcmlhYmxlLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IGtleVR5cGUgPSBpdGVyYXRpb25CaW5kaW5nVHlwZShjb2xsZWN0aW9uVHlwZS5rZXlUeXBlLCBrZXlMb2NhdGlvbilcbiAgICBjb25zdCB2YWx1ZVR5cGUgPSBpdGVyYXRpb25CaW5kaW5nVHlwZShjb2xsZWN0aW9uVHlwZS52YWx1ZVR5cGUsIHZhbHVlTG9jYXRpb24pXG4gICAgY29uc3Qga2V5QmluZGluZyA9IHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiVmFsdWVCaW5kaW5nXCIpLCBsb2NhdGlvbjoga2V5TG9jYXRpb24sIG11dGFibGU6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChmYWxzZSksXG4gICAgICBuYW1lOiBrZXlWYXJpYWJsZS5uYW1lLCB0eXBlOiBrZXlUeXBlXG4gICAgfSwge25hbWU6IGtleUxvY2F0aW9ufSlcbiAgICBjb25zdCB2YWx1ZUJpbmRpbmcgPSB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlZhbHVlQmluZGluZ1wiKSwgbG9jYXRpb246IHZhbHVlTG9jYXRpb24sIG11dGFibGU6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChmYWxzZSksXG4gICAgICBuYW1lOiB2YXJpYWJsZS5uYW1lLCB0eXBlOiB2YWx1ZVR5cGVcbiAgICB9LCB7bmFtZTogdmFsdWVMb2NhdGlvbn0pXG4gICAgY29uc3QgYm9keUNvbnRleHQgPSB7Li4uY29udGV4dCwgYmluZGluZ3M6IG5ldyBNYXAoY29udGV4dC5iaW5kaW5ncyl9XG5cbiAgICBib2R5Q29udGV4dC5iaW5kaW5ncy5zZXQoa2V5VmFyaWFibGUubmFtZSwga2V5VHlwZSlcbiAgICBib2R5Q29udGV4dC5iaW5kaW5ncy5zZXQodmFyaWFibGUubmFtZSwgdmFsdWVUeXBlKVxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGJvZHk6IGNvbnZlcnRCbG9jayhib2R5LCBmaWxlbmFtZSwgc291cmNlLCBib2R5Q29udGV4dCksXG4gICAgICBrZXlCaW5kaW5nLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiRm9yRWFjaE1hcFN0YXRlbWVudFwiKSxcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgbWFwOiBjb252ZXJ0RXhwcmVzc2lvbihub2RlLnNvdXJjZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCksXG4gICAgICB2YWx1ZUJpbmRpbmdcbiAgICB9LCB7b3BlcmF0b3I6IHRva2VuTG9jYXRpb24oXCJmb3JlYWNoXCIsIG5vZGUubG9jPy5zdGFydC5vZmZzZXQgPz8gMCwgbm9kZS5zb3VyY2UubG9jPy5zdGFydC5vZmZzZXQgPz8gc291cmNlLmxlbmd0aCxcbiAgICAgIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgfVxuXG4gIGlmIChjb2xsZWN0aW9uVHlwZT8ua2luZCA9PSBcIk1hcFR5cGVcIiB8fCBjb2xsZWN0aW9uVHlwZT8ua2luZCA9PSBcIk9yZGVyZWRNYXBUeXBlXCIpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgXCJtYXAgaXRlcmF0aW9uIHdpdGhvdXQga2V5L3ZhbHVlIHBhaXIgYmluZGluZ1wiLCBub2RlTG9jYXRpb24obm9kZS5zb3VyY2UsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGlmICghY29sbGVjdGlvblR5cGUgfHwgY29sbGVjdGlvblR5cGUua2luZCAhPSBcIkxpc3RUeXBlXCIpIHtcbiAgICByZXR1cm4gbWlzc2luZ1R5cGUoXCJwaHBcIiwgXCJJdGVyYXRpb24gY29sbGVjdGlvblwiLCBub2RlTG9jYXRpb24obm9kZS5zb3VyY2UsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGNvbnN0IGJpbmRpbmdMb2NhdGlvbiA9IG5vZGVMb2NhdGlvbih2YXJpYWJsZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgaW5mZXJyZWRUeXBlID0gY29sbGVjdGlvblR5cGUuZWxlbWVudFR5cGVcbiAgY29uc3QgYmluZGluZ1R5cGUgPSBpdGVyYXRpb25CaW5kaW5nVHlwZShpbmZlcnJlZFR5cGUsIGJpbmRpbmdMb2NhdGlvbilcbiAgY29uc3QgdmFsdWVCaW5kaW5nID0gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiVmFsdWVCaW5kaW5nXCIpLFxuICAgIGxvY2F0aW9uOiBiaW5kaW5nTG9jYXRpb24sXG4gICAgbXV0YWJsZTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKGZhbHNlKSxcbiAgICBuYW1lOiB2YXJpYWJsZS5uYW1lLFxuICAgIHR5cGU6IGJpbmRpbmdUeXBlXG4gIH0sIHtuYW1lOiBiaW5kaW5nTG9jYXRpb259KVxuICBjb25zdCBib2R5Q29udGV4dCA9IHsuLi5jb250ZXh0LCBiaW5kaW5nczogbmV3IE1hcChjb250ZXh0LmJpbmRpbmdzKX1cblxuICBib2R5Q29udGV4dC5iaW5kaW5ncy5zZXQodmFyaWFibGUubmFtZSwgYmluZGluZ1R5cGUpXG4gIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICBib2R5OiBjb252ZXJ0QmxvY2soYm9keSwgZmlsZW5hbWUsIHNvdXJjZSwgYm9keUNvbnRleHQpLFxuICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkZvckVhY2hTdGF0ZW1lbnRcIiksXG4gICAgbGlzdDogY29udmVydEV4cHJlc3Npb24obm9kZS5zb3VyY2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgIGxvY2F0aW9uLFxuICAgIHZhbHVlQmluZGluZ1xuICB9LCB7b3BlcmF0b3I6IHRva2VuTG9jYXRpb24oXCJmb3JlYWNoXCIsIG5vZGUubG9jPy5zdGFydC5vZmZzZXQgPz8gMCwgbm9kZS5zb3VyY2UubG9jPy5zdGFydC5vZmZzZXQgPz8gc291cmNlLmxlbmd0aCwgZmlsZW5hbWUsIHNvdXJjZSl9KVxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9yZGVyZWQgUEhQIGJsb2NrIHdpdGggaXRzIG93biBhZGFwdGF0aW9uIHNjb3BlLlxuICogQHBhcmFtIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLkJsb2NrfSBub2RlIC0gUEhQIHBhcnNlciBibG9jay5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge1BocENvbnZlcnNpb25Db250ZXh0fSBjb250ZXh0IC0gVHlwZWQgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJsb2NrfSBTZW1hbnRpYyBibG9jay5cbiAqL1xuZnVuY3Rpb24gY29udmVydEJsb2NrKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpIHtcbiAgcmV0dXJuIHtcbiAgICBraW5kOiBcIkJsb2NrXCIsXG4gICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICBzdGF0ZW1lbnRzOiBub2RlLmNoaWxkcmVuLm1hcCgoc3RhdGVtZW50KSA9PiBjb252ZXJ0U3RhdGVtZW50KHN0YXRlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkpXG4gIH1cbn1cblxuLyoqXG4gKiBSZXF1aXJlcyBhbiBleGFjdCBQSFAgc2NhbGFyIGRlY2xhcmF0aW9uIHR5cGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcInBocC1wYXJzZXJcIikuTm9kZSB8IG51bGx9IHNvdXJjZVR5cGUgLSBQSFAgdHlwZSBub2RlLlxuICogQHBhcmFtIHtzdHJpbmd9IHN1YmplY3QgLSBUeXBlZCBzdWJqZWN0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gbG9jYXRpb24gLSBTb3VyY2UgbG9jYXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uPn0gW3JlY29yZE5hbWVzXSAtIE5vbWluYWwgZGVjbGFyYXRpb25zIGJ5IHNvdXJjZSBuYW1lLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljVmFsdWVUeXBlfSBTZW1hbnRpYyB0eXBlLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0VHlwZShzb3VyY2VUeXBlLCBzdWJqZWN0LCBsb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMgPSBuZXcgTWFwKCkpIHtcbiAgaWYgKCFzb3VyY2VUeXBlKSByZXR1cm4gcmVxdWlyZVNvdXJjZVNjYWxhclR5cGUoXCJwaHBcIiwgdW5kZWZpbmVkLCBzdWJqZWN0LCBsb2NhdGlvbilcbiAgaWYgKHNvdXJjZVR5cGUua2luZCAhPSBcInR5cGVyZWZlcmVuY2VcIiAmJiBzb3VyY2VUeXBlLmtpbmQgIT0gXCJuYW1lXCIgJiYgc291cmNlVHlwZS5raW5kICE9IFwiaWRlbnRpZmllclwiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwidW5zdXBwb3J0ZWQgc2NhbGFyIHR5cGVcIiwgbm9kZUxvY2F0aW9uKHNvdXJjZVR5cGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG5cbiAgY29uc3QgdHlwZU5hbWUgPSAvKiogQHR5cGUge2ltcG9ydChcInBocC1wYXJzZXJcIikuVHlwZVJlZmVyZW5jZSB8IGltcG9ydChcInBocC1wYXJzZXJcIikuTmFtZSB8IGltcG9ydChcInBocC1wYXJzZXJcIikuSWRlbnRpZmllcn0gKi8gKHNvdXJjZVR5cGUpLm5hbWVcblxuICBjb25zdCB0eXBlTG9jYXRpb24gPSBub2RlTG9jYXRpb24oc291cmNlVHlwZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgZGVjbGFyYXRpb24gPSByZWNvcmROYW1lcy5nZXQodHlwZU5hbWUpXG5cbiAgaWYgKGRlY2xhcmF0aW9uPy5pZCkgcmV0dXJuIGRlY2xhcmF0aW9uLmtpbmQgPT0gXCJDbGFzc0RlY2xhcmF0aW9uXCJcbiAgICA/IHJlZmVyZW5jZVR5cGUoZGVjbGFyYXRpb24uaWQsIHR5cGVMb2NhdGlvbilcbiAgICA6IGRlY2xhcmF0aW9uLmtpbmQgPT0gXCJFZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uXCJcbiAgICAgID8gb3duZWRSZXNvdXJjZVR5cGUoZGVjbGFyYXRpb24uaWQsIHR5cGVMb2NhdGlvbilcbiAgICAgIDogcmVjb3JkVHlwZShkZWNsYXJhdGlvbi5pZCwgdHlwZUxvY2F0aW9uKVxuXG4gIHJldHVybiByZXF1aXJlU291cmNlU2NhbGFyVHlwZShcInBocFwiLCB0eXBlTmFtZSwgc3ViamVjdCwgbG9jYXRpb24sIHR5cGVMb2NhdGlvbilcbn1cblxuLyoqXG4gKiBSZWFkcyB0aGUgZXhhY3QgUEhQRG9jIGNvbnRhaW5lciBzaWduYXR1cmUgYXR0YWNoZWQgdG8gb25lIGZ1bmN0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLkZ1bmN0aW9ufSBub2RlIC0gRnVuY3Rpb24gZGVjbGFyYXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtzdHJpbmd9IFtvd25lcklkXSAtIFN0YWJsZSBkZWNsYXJhdGlvbiBpZGVudGl0eS5cbiAqIEByZXR1cm5zIHt7cGFyYW1ldGVyczogTWFwPHN0cmluZywge2xvY2F0aW9uOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiwgc291cmNlVHlwZTogc3RyaW5nfT4sIHJldHVyblR5cGU6IHtsb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIHNvdXJjZVR5cGU6IHN0cmluZ30gfCB1bmRlZmluZWQsIHR5cGVQYXJhbWV0ZXJzPzogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHlwZVBhcmFtZXRlcltdfX0gRG9jdW1lbnRlZCB0eXBlcy5cbiAqL1xuZnVuY3Rpb24gZnVuY3Rpb25Eb2N1bWVudGVkVHlwZXMobm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgb3duZXJJZCkge1xuICBjb25zdCBjb21tZW50ID0gbm9kZS5sZWFkaW5nQ29tbWVudHM/LmF0KC0xKVxuXG4gIGlmICghY29tbWVudCB8fCBjb21tZW50LmtpbmQgIT0gXCJjb21tZW50YmxvY2tcIiB8fCAhY29tbWVudC5sb2MgfHwgIW5vZGUubG9jIHx8XG4gICAgIS9eXFxzKiQvdS50ZXN0KHNvdXJjZS5zbGljZShjb21tZW50LmxvYy5lbmQub2Zmc2V0LCBub2RlLmxvYy5zdGFydC5vZmZzZXQpKSkgcmV0dXJuIHtwYXJhbWV0ZXJzOiBuZXcgTWFwKCksIHJldHVyblR5cGU6IHVuZGVmaW5lZH1cbiAgY29uc3QgYmxvY2sgPSBwYXJzZUNvbW1lbnQoY29tbWVudC52YWx1ZSlbMF1cbiAgY29uc3QgdGFncyA9IGJsb2NrPy50YWdzID8/IFtdXG4gIGNvbnN0IHBhcmFtZXRlclRhZ3MgPSB0YWdzLmZpbHRlcigodGFnKSA9PiB0YWcudGFnID09IFwicGFyYW1cIilcbiAgY29uc3QgcmV0dXJuVGFncyA9IHRhZ3MuZmlsdGVyKCh0YWcpID0+IHRhZy50YWcgPT0gXCJyZXR1cm5cIiB8fCB0YWcudGFnID09IFwicmV0dXJuc1wiKVxuICBjb25zdCB0ZW1wbGF0ZVRhZ3MgPSB0YWdzLmZpbHRlcigodGFnKSA9PiB0YWcudGFnID09IFwidGVtcGxhdGVcIilcbiAgY29uc3QgbWFsZm9ybWVkVGVtcGxhdGUgPSB0YWdzLmZpbmQoKHRhZykgPT4gdGFnLnRhZy5zdGFydHNXaXRoKFwidGVtcGxhdGVcIikgJiYgdGFnLnRhZyAhPSBcInRlbXBsYXRlXCIpXG4gIGNvbnN0IG1hbGZvcm1lZCA9IHRhZ3Muc29tZSgodGFnKSA9PiAhW1wicGFyYW1cIiwgXCJyZXR1cm5cIiwgXCJyZXR1cm5zXCIsIFwidGVtcGxhdGVcIl0uaW5jbHVkZXModGFnLnRhZykpIHx8IHJldHVyblRhZ3MubGVuZ3RoID4gMSB8fFxuICAgIHBhcmFtZXRlclRhZ3Muc29tZSgodGFnKSA9PiB0YWcudHlwZSAhPSBcIlwiIHx8ICEvXlxcJFtBLVphLXpfXVtBLVphLXowLTlfXSokL3UudGVzdCh0YWcuZGVzY3JpcHRpb24pKSB8fFxuICAgIHJldHVyblRhZ3Muc29tZSgodGFnKSA9PiB0YWcudHlwZSAhPSBcIlwiIHx8IHRhZy5kZXNjcmlwdGlvbiAhPSBcIlwiKSB8fCBtYWxmb3JtZWRUZW1wbGF0ZSB8fFxuICAgIHRlbXBsYXRlVGFncy5zb21lKCh0YWcpID0+ICEvXltBLVphLXpfXVtBLVphLXowLTlfXSokL3UudGVzdCh0YWcubmFtZSkgfHwgdGFnLnR5cGUgIT0gXCJcIiB8fCB0YWcuZGVzY3JpcHRpb24gIT0gXCJcIikgfHxcbiAgICB0ZW1wbGF0ZVRhZ3MubGVuZ3RoID4gMCAmJiAhb3duZXJJZFxuXG4gIGlmIChtYWxmb3JtZWQpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBcIm1hbGZvcm1lZCBmdW5jdGlvbiB0eXBlIGFubm90YXRpb25cIiwgbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICBjb25zdCBwYXJhbWV0ZXJzID0gbmV3IE1hcChwYXJhbWV0ZXJUYWdzLm1hcCgodGFnKSA9PiBbdGFnLmRlc2NyaXB0aW9uLnNsaWNlKDEpLCB7XG4gICAgbG9jYXRpb246IGNvbW1lbnRUYWdMb2NhdGlvbihjb21tZW50LCB0YWcsIFwibmFtZVwiLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICBzb3VyY2VUeXBlOiB0YWcubmFtZVxuICB9XSkpXG5cbiAgaWYgKHBhcmFtZXRlcnMuc2l6ZSAhPSBwYXJhbWV0ZXJUYWdzLmxlbmd0aCkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBcImR1cGxpY2F0ZSBwYXJhbWV0ZXIgYW5ub3RhdGlvblwiLCBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgcmV0dXJuVGFnID0gcmV0dXJuVGFnc1swXVxuICBjb25zdCB0eXBlUGFyYW1ldGVycyA9IHRlbXBsYXRlVGFncy5tYXAoKHRhZywgaW5kZXgpID0+IHtcbiAgICBjb25zdCBsb2NhdGlvbiA9IGNvbW1lbnRUYWdMb2NhdGlvbihjb21tZW50LCB0YWcsIFwibmFtZVwiLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2lkOiBgJHtvd25lcklkfTp0eXBlOiR7aW5kZXh9YCwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiVHlwZVBhcmFtZXRlclwiKSwgbG9jYXRpb24sIG5hbWU6IHRhZy5uYW1lfSwge25hbWU6IGxvY2F0aW9ufSlcbiAgfSlcblxuICByZXR1cm4ge1xuICAgIHBhcmFtZXRlcnMsXG4gICAgcmV0dXJuVHlwZTogcmV0dXJuVGFnID8ge1xuICAgICAgbG9jYXRpb246IGNvbW1lbnRUYWdMb2NhdGlvbihjb21tZW50LCByZXR1cm5UYWcsIFwibmFtZVwiLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIHNvdXJjZVR5cGU6IHJldHVyblRhZy5uYW1lXG4gICAgfSA6IHVuZGVmaW5lZCxcbiAgICAuLi4odHlwZVBhcmFtZXRlcnMubGVuZ3RoID4gMCA/IHt0eXBlUGFyYW1ldGVyc30gOiB7fSlcbiAgfVxufVxuXG4vKipcbiAqIFJlYWRzIGFuIG9wdGlvbmFsIGV4YWN0IGNsYXNzLWxldmVsIFBIUERvYyB0ZW1wbGF0ZSBsaXN0LlxuICogQHBhcmFtIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLkNsYXNzfSBub2RlIC0gQ2xhc3MgZGVjbGFyYXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gb3duZXJJZCAtIFN0YWJsZSByZWNvcmQgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlR5cGVQYXJhbWV0ZXJbXSB8IHVuZGVmaW5lZH0gT3JkZXJlZCBwYXJhbWV0ZXJzLlxuICovXG5mdW5jdGlvbiBjbGFzc0RvY3VtZW50ZWRUeXBlUGFyYW1ldGVycyhub2RlLCBvd25lcklkLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGNvbnN0IGRvY3VtZW50ZWQgPSBmdW5jdGlvbkRvY3VtZW50ZWRUeXBlcyhcbiAgICAvKiogQHR5cGUge2ltcG9ydChcInBocC1wYXJzZXJcIikuRnVuY3Rpb259ICovICgvKiogQHR5cGUge3Vua25vd259ICovIChub2RlKSksIGZpbGVuYW1lLCBzb3VyY2UsIG93bmVySWQpXG5cbiAgaWYgKGRvY3VtZW50ZWQucGFyYW1ldGVycy5zaXplIHx8IGRvY3VtZW50ZWQucmV0dXJuVHlwZSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBcImZ1bmN0aW9uIHR5cGUgYW5ub3RhdGlvbiBvbiByZWNvcmQgZGVjbGFyYXRpb25cIiwgbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG5cbiAgcmV0dXJuIGRvY3VtZW50ZWQudHlwZVBhcmFtZXRlcnNcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgbmF0aXZlIFBIUCB0eXBlIG5hbWUgZnJvbSBvbmUgc3VwcG9ydGVkIHBhcnNlciBub2RlLlxuICogQHBhcmFtIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLk5vZGUgfCBudWxsfSB0eXBlIC0gTmF0aXZlIHR5cGUgbm9kZS5cbiAqIEByZXR1cm5zIHtzdHJpbmcgfCB1bmRlZmluZWR9IFR5cGUgbmFtZS5cbiAqL1xuZnVuY3Rpb24gcGhwVHlwZU5hbWUodHlwZSkge1xuICBpZiAoIXR5cGUgfHwgIVtcInR5cGVyZWZlcmVuY2VcIiwgXCJuYW1lXCIsIFwiaWRlbnRpZmllclwiXS5pbmNsdWRlcyh0eXBlLmtpbmQpKSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgcmV0dXJuIC8qKiBAdHlwZSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5UeXBlUmVmZXJlbmNlIHwgaW1wb3J0KFwicGhwLXBhcnNlclwiKS5OYW1lIHwgaW1wb3J0KFwicGhwLXBhcnNlclwiKS5JZGVudGlmaWVyfSAqLyAodHlwZSkubmFtZVxufVxuXG4vKipcbiAqIFdyYXBzIG9uZSBwYXJzZXItZGVjbGFyZWQgY2Fub25pY2FsIFBIUCBudWxsYWJsZSB0eXBlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1ZhbHVlVHlwZX0gdmFsdWVUeXBlIC0gUHJlc2VudC12YWx1ZSBzZW1hbnRpYyB0eXBlLlxuICogQHBhcmFtIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLk5vZGV9IHNvdXJjZVR5cGUgLSBOYXRpdmUgcGFyc2VyIHR5cGUgbm9kZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBvd25lclN0YXJ0IC0gRWFybGllc3Qgb3duaW5nIHBhcnNlciBvZmZzZXQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLk9wdGlvbmFsVHlwZX0gT3B0aW9uYWwgc2VtYW50aWMgdHlwZS5cbiAqL1xuZnVuY3Rpb24gbnVsbGFibGVUeXBlKHZhbHVlVHlwZSwgc291cmNlVHlwZSwgb3duZXJTdGFydCwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBpZiAoIXNvdXJjZVR5cGUubG9jKSB0aHJvdyBuZXcgRXJyb3IoXCJQSFAgcGFyc2VyIG9taXR0ZWQgbnVsbGFibGUgdHlwZSBsb2NhdGlvbi5cIilcbiAgY29uc3QgdmFsdWVMb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihzb3VyY2VUeXBlLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBtYXJrZXIgPSB0b2tlbkxvY2F0aW9uKFwiP1wiLCBvd25lclN0YXJ0LCBzb3VyY2VUeXBlLmxvYy5zdGFydC5vZmZzZXQsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKG1hcmtlci5lbmQub2Zmc2V0ICE9IHZhbHVlTG9jYXRpb24uc3RhcnQub2Zmc2V0KSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwibm9uY2Fub25pY2FsIG51bGxhYmxlIHR5cGVcIiwgbWFya2VyKVxuICB9XG5cbiAgcmV0dXJuIG9wdGlvbmFsVHlwZShcbiAgICB2YWx1ZVR5cGUsXG4gICAgbG9jYXRpb25Gcm9tT2Zmc2V0cyhmaWxlbmFtZSwgc291cmNlLCBtYXJrZXIuc3RhcnQub2Zmc2V0LCB2YWx1ZUxvY2F0aW9uLmVuZC5vZmZzZXQpLFxuICAgIHZhbHVlTG9jYXRpb25cbiAgKVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBleHBsaWNpdCBQSFAgZnVuY3Rpb24gcmV0dXJuIHR5cGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcInBocC1wYXJzZXJcIikuTm9kZSB8IG51bGx9IHNvdXJjZVR5cGUgLSBQSFAgcmV0dXJuIHR5cGUgbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdWJqZWN0IC0gVHlwZWQgZnVuY3Rpb24gcmV0dXJuLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gbG9jYXRpb24gLSBGdW5jdGlvbiBsb2NhdGlvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb24+fSBbcmVjb3JkTmFtZXNdIC0gTm9taW5hbCBkZWNsYXJhdGlvbnMgYnkgc291cmNlIG5hbWUuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNGdW5jdGlvblJldHVyblR5cGV9IFNlbWFudGljIHJldHVybiB0eXBlLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0UmV0dXJuVHlwZShzb3VyY2VUeXBlLCBzdWJqZWN0LCBsb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMgPSBuZXcgTWFwKCkpIHtcbiAgaWYgKCFzb3VyY2VUeXBlKSByZXR1cm4gcmVxdWlyZVNvdXJjZVJldHVyblR5cGUoXCJwaHBcIiwgdW5kZWZpbmVkLCBzdWJqZWN0LCBsb2NhdGlvbilcbiAgaWYgKHNvdXJjZVR5cGUua2luZCAhPSBcInR5cGVyZWZlcmVuY2VcIiAmJiBzb3VyY2VUeXBlLmtpbmQgIT0gXCJuYW1lXCIgJiYgc291cmNlVHlwZS5raW5kICE9IFwiaWRlbnRpZmllclwiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwidW5zdXBwb3J0ZWQgcmV0dXJuIHR5cGVcIiwgbm9kZUxvY2F0aW9uKHNvdXJjZVR5cGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGNvbnN0IHR5cGVOYW1lID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLlR5cGVSZWZlcmVuY2UgfCBpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLk5hbWUgfCBpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLklkZW50aWZpZXJ9ICovIChzb3VyY2VUeXBlKS5uYW1lXG4gIGNvbnN0IGRlY2xhcmF0aW9uID0gcmVjb3JkTmFtZXMuZ2V0KHR5cGVOYW1lKVxuXG4gIGlmIChkZWNsYXJhdGlvbj8uaWQpIHJldHVybiBkZWNsYXJhdGlvbi5raW5kID09IFwiQ2xhc3NEZWNsYXJhdGlvblwiXG4gICAgPyByZWZlcmVuY2VUeXBlKGRlY2xhcmF0aW9uLmlkLCBub2RlTG9jYXRpb24oc291cmNlVHlwZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgOiBkZWNsYXJhdGlvbi5raW5kID09IFwiRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvblwiXG4gICAgICA/IG93bmVkUmVzb3VyY2VUeXBlKGRlY2xhcmF0aW9uLmlkLCBub2RlTG9jYXRpb24oc291cmNlVHlwZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICA6IHJlY29yZFR5cGUoZGVjbGFyYXRpb24uaWQsIG5vZGVMb2NhdGlvbihzb3VyY2VUeXBlLCBmaWxlbmFtZSwgc291cmNlKSlcblxuICByZXR1cm4gcmVxdWlyZVNvdXJjZVJldHVyblR5cGUoXCJwaHBcIiwgdHlwZU5hbWUsIHN1YmplY3QsIGxvY2F0aW9uLCBub2RlTG9jYXRpb24oc291cmNlVHlwZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG59XG5cbi8qKlxuICogQ29udmVydHMgdGhlIGV4cGxpY2l0IHR5cGUgc2lnbmF0dXJlIG9mIG9uZSBQSFAgZnVuY3Rpb24gYmVmb3JlIGFueSBib2R5IGV4cHJlc3Npb25zLlxuICogQHBhcmFtIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLkZ1bmN0aW9ufSBub2RlIC0gUEhQIGZ1bmN0aW9uIG5vZGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uPn0gcmVjb3JkTmFtZXMgLSBOb21pbmFsIGRlY2xhcmF0aW9ucyBieSBzb3VyY2UgbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBvd25lcklkIC0gU3RhYmxlIGZ1bmN0aW9uIGlkZW50aXR5LlxuICogQHJldHVybnMge1BocEZ1bmN0aW9uU2lnbmF0dXJlfSBUeXBlZCBmdW5jdGlvbiBzaWduYXR1cmUuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRGdW5jdGlvblNpZ25hdHVyZShub2RlLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcywgb3duZXJJZCkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBuYW1lID0gdHlwZW9mIG5vZGUubmFtZSA9PSBcInN0cmluZ1wiID8gbm9kZS5uYW1lIDogbm9kZS5uYW1lLm5hbWVcblxuICBpZiAoIW5vZGUuYm9keSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBcImZ1bmN0aW9uIGJvZHlcIiwgbG9jYXRpb24pXG4gIH1cblxuICBjb25zdCBkb2N1bWVudGVkID0gZnVuY3Rpb25Eb2N1bWVudGVkVHlwZXMobm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgb3duZXJJZClcbiAgY29uc3QgdHlwZVBhcmFtZXRlck5hbWVzID0gbmV3IE1hcCgoZG9jdW1lbnRlZC50eXBlUGFyYW1ldGVycyA/PyBbXSkubWFwKChwYXJhbWV0ZXIpID0+IFtwYXJhbWV0ZXIubmFtZSwgcGFyYW1ldGVyXSkpXG4gIGNvbnN0IHBhcmFtZXRlcnMgPSBub2RlLmFyZ3VtZW50cy5tYXAoKHBhcmFtZXRlcikgPT4ge1xuICAgIGNvbnN0IHBhcmFtZXRlckxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKHBhcmFtZXRlciwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICBjb25zdCBwYXJhbWV0ZXJOYW1lID0gdHlwZW9mIHBhcmFtZXRlci5uYW1lID09IFwic3RyaW5nXCIgPyBwYXJhbWV0ZXIubmFtZSA6IHBhcmFtZXRlci5uYW1lLm5hbWVcblxuICAgIGlmIChwYXJhbWV0ZXIuYnlyZWYpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBcImJ5LXJlZmVyZW5jZSBwYXJhbWV0ZXJcIiwgcGFyYW1ldGVyTG9jYXRpb24pXG4gICAgaWYgKHBhcmFtZXRlci52YXJpYWRpYykgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwidmFyaWFkaWMgcGFyYW1ldGVyXCIsIHBhcmFtZXRlckxvY2F0aW9uKVxuICAgIGlmIChwYXJhbWV0ZXIudmFsdWUpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBcImRlZmF1bHQgcGFyYW1ldGVyXCIsIHBhcmFtZXRlckxvY2F0aW9uKVxuICAgIGNvbnN0IHBhcmFtZXRlck5vZGUgPSB0eXBlb2YgcGFyYW1ldGVyLm5hbWUgPT0gXCJzdHJpbmdcIiA/IHBhcmFtZXRlciA6IHBhcmFtZXRlci5uYW1lXG4gICAgY29uc3QgZG9jdW1lbnRlZFR5cGUgPSBkb2N1bWVudGVkLnBhcmFtZXRlcnMuZ2V0KHBhcmFtZXRlck5hbWUpXG4gICAgY29uc3QgbmF0aXZlVHlwZSA9IHBocFR5cGVOYW1lKHBhcmFtZXRlci50eXBlKVxuXG4gICAgbGV0IHBhcmFtZXRlclR5cGUgPSBkb2N1bWVudGVkVHlwZVxuICAgICAgPyBkb2N1bWVudGVkVmFsdWVUeXBlKHtsYW5ndWFnZTogXCJwaHBcIiwgbG9jYXRpb246IGRvY3VtZW50ZWRUeXBlLmxvY2F0aW9uLCBvd25lckxvY2F0aW9uOiBwYXJhbWV0ZXJMb2NhdGlvbiwgc291cmNlLFxuICAgICAgICByZWNvcmRzOiByZWNvcmROYW1lcywgc291cmNlVHlwZTogZG9jdW1lbnRlZFR5cGUuc291cmNlVHlwZSwgc3ViamVjdDogYFBhcmFtZXRlciAnJHtwYXJhbWV0ZXJOYW1lfSdgLCB0eXBlUGFyYW1ldGVyczogdHlwZVBhcmFtZXRlck5hbWVzfSlcbiAgICAgIDogY29udmVydFR5cGUocGFyYW1ldGVyLnR5cGUsIGBQYXJhbWV0ZXIgJyR7cGFyYW1ldGVyTmFtZX0nYCwgcGFyYW1ldGVyTG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIHJlY29yZE5hbWVzKVxuXG4gICAgaWYgKG5hdGl2ZVR5cGUgPT0gXCJhcnJheVwiICYmICFkb2N1bWVudGVkVHlwZSkgcmV0dXJuIG1pc3NpbmdUeXBlKFwicGhwXCIsIGBQYXJhbWV0ZXIgJyR7cGFyYW1ldGVyTmFtZX0nYCwgcGFyYW1ldGVyTG9jYXRpb24pXG4gICAgaWYgKGRvY3VtZW50ZWRUeXBlICYmICFwaHBEb2N1bWVudGVkTmF0aXZlVHlwZU1hdGNoZXMobmF0aXZlVHlwZSwgcGFyYW1ldGVyLm51bGxhYmxlLCBwYXJhbWV0ZXJUeXBlLCByZWNvcmROYW1lcykpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBcImRvY3VtZW50ZWQgcGFyYW1ldGVyIHR5cGUgaW5jb21wYXRpYmxlIHdpdGggbmF0aXZlIHR5cGVcIiwgZG9jdW1lbnRlZFR5cGUubG9jYXRpb24pXG4gICAgfVxuXG4gICAgaWYgKHBhcmFtZXRlci5udWxsYWJsZSAmJiBwYXJhbWV0ZXJUeXBlLmtpbmQgIT0gXCJPcHRpb25hbFR5cGVcIikge1xuICAgICAgaWYgKCFwYXJhbWV0ZXIudHlwZSkgcmV0dXJuIG1pc3NpbmdUeXBlKFwicGhwXCIsIGBQYXJhbWV0ZXIgJyR7cGFyYW1ldGVyTmFtZX0nYCwgcGFyYW1ldGVyTG9jYXRpb24pXG4gICAgICBwYXJhbWV0ZXJUeXBlID0gbnVsbGFibGVUeXBlKHBhcmFtZXRlclR5cGUsIHBhcmFtZXRlci50eXBlLCBwYXJhbWV0ZXIubG9jPy5zdGFydC5vZmZzZXQgPz8gMCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICB9IGVsc2UgaWYgKCFwYXJhbWV0ZXIubnVsbGFibGUgJiYgcGFyYW1ldGVyVHlwZS5raW5kID09IFwiT3B0aW9uYWxUeXBlXCIgJiZcbiAgICAgIHBhcmFtZXRlclR5cGUudmFsdWVUeXBlLmtpbmQgIT0gXCJUeXBlVmFyaWFibGVSZWZlcmVuY2VcIikge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwib3B0aW9uYWwgYW5ub3RhdGlvbiB3aXRob3V0IG51bGxhYmxlIG5hdGl2ZSB0eXBlXCIsIGRvY3VtZW50ZWRUeXBlPy5sb2NhdGlvbiA/PyBwYXJhbWV0ZXJMb2NhdGlvbilcbiAgICB9XG4gICAgY29uc3Qgc2VtYW50aWNQYXJhbWV0ZXIgPSB7XG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJQYXJhbWV0ZXJcIiksXG4gICAgICBsb2NhdGlvbjogcGFyYW1ldGVyTG9jYXRpb24sXG4gICAgICBuYW1lOiBwYXJhbWV0ZXJOYW1lLFxuICAgICAgdHlwZTogcGFyYW1ldGVyVHlwZVxuICAgIH1cblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHNlbWFudGljUGFyYW1ldGVyLCB7bmFtZTogbm9kZUxvY2F0aW9uKHBhcmFtZXRlck5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgfSlcbiAgY29uc3QgZXh0cmFEb2N1bWVudGVkUGFyYW1ldGVyID0gWy4uLmRvY3VtZW50ZWQucGFyYW1ldGVycy5rZXlzKCldLmZpbmQoKG5hbWUpID0+XG4gICAgIW5vZGUuYXJndW1lbnRzLnNvbWUoKHBhcmFtZXRlcikgPT4gKHR5cGVvZiBwYXJhbWV0ZXIubmFtZSA9PSBcInN0cmluZ1wiID8gcGFyYW1ldGVyLm5hbWUgOiBwYXJhbWV0ZXIubmFtZS5uYW1lKSA9PSBuYW1lKSlcblxuICBpZiAoZXh0cmFEb2N1bWVudGVkUGFyYW1ldGVyKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgYGFubm90YXRpb24gZm9yIHVua25vd24gcGFyYW1ldGVyICcke2V4dHJhRG9jdW1lbnRlZFBhcmFtZXRlcn0nYCwgbG9jYXRpb24pXG4gIGlmIChub2RlLmJ5cmVmKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgXCJieS1yZWZlcmVuY2UgcmV0dXJuXCIsIGxvY2F0aW9uKVxuICBjb25zdCBuYW1lTm9kZSA9IHR5cGVvZiBub2RlLm5hbWUgPT0gXCJzdHJpbmdcIiA/IG5vZGUgOiBub2RlLm5hbWVcbiAgY29uc3QgbmF0aXZlUmV0dXJuVHlwZSA9IHBocFR5cGVOYW1lKG5vZGUudHlwZSlcbiAgbGV0IHJldHVyblR5cGVcblxuICBpZiAoZG9jdW1lbnRlZC5yZXR1cm5UeXBlKSB7XG4gICAgcmV0dXJuVHlwZSA9IGRvY3VtZW50ZWRWYWx1ZVR5cGUoe2xhbmd1YWdlOiBcInBocFwiLCBsb2NhdGlvbjogZG9jdW1lbnRlZC5yZXR1cm5UeXBlLmxvY2F0aW9uLCBvd25lckxvY2F0aW9uOiBsb2NhdGlvbiwgc291cmNlLFxuICAgICAgcmVjb3JkczogcmVjb3JkTmFtZXMsIHNvdXJjZVR5cGU6IGRvY3VtZW50ZWQucmV0dXJuVHlwZS5zb3VyY2VUeXBlLCBzdWJqZWN0OiBgRnVuY3Rpb24gJyR7bmFtZX0nIHJldHVybmAsIHR5cGVQYXJhbWV0ZXJzOiB0eXBlUGFyYW1ldGVyTmFtZXN9KVxuICAgIGlmICghcGhwRG9jdW1lbnRlZE5hdGl2ZVR5cGVNYXRjaGVzKG5hdGl2ZVJldHVyblR5cGUsIG5vZGUubnVsbGFibGUsIHJldHVyblR5cGUsIHJlY29yZE5hbWVzKSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwiZG9jdW1lbnRlZCByZXR1cm4gdHlwZSBpbmNvbXBhdGlibGUgd2l0aCBuYXRpdmUgdHlwZVwiLCBkb2N1bWVudGVkLnJldHVyblR5cGUubG9jYXRpb24pXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChuYXRpdmVSZXR1cm5UeXBlID09IFwiYXJyYXlcIikgcmV0dXJuIG1pc3NpbmdUeXBlKFwicGhwXCIsIGBGdW5jdGlvbiAnJHtuYW1lfScgcmV0dXJuYCwgbG9jYXRpb24pXG4gICAgcmV0dXJuVHlwZSA9IGNvbnZlcnRSZXR1cm5UeXBlKG5vZGUudHlwZSwgYEZ1bmN0aW9uICcke25hbWV9JyByZXR1cm5gLCBsb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMpXG4gIH1cbiAgaWYgKG5vZGUubnVsbGFibGUgJiYgcmV0dXJuVHlwZS5raW5kICE9IFwiT3B0aW9uYWxUeXBlXCIpIHtcbiAgICBpZiAoIW5vZGUudHlwZSkgcmV0dXJuIG1pc3NpbmdUeXBlKFwicGhwXCIsIGBGdW5jdGlvbiAnJHtuYW1lfScgcmV0dXJuYCwgbG9jYXRpb24pXG4gICAgY29uc3QgdHlwZVN0YXJ0ID0gbm9kZS50eXBlLmxvYz8uc3RhcnQub2Zmc2V0ID8/IDBcblxuICAgIHJldHVyblR5cGUgPSBudWxsYWJsZVR5cGUoXG4gICAgICAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljVmFsdWVUeXBlfSAqLyAocmV0dXJuVHlwZSksXG4gICAgICBub2RlLnR5cGUsXG4gICAgICBNYXRoLm1heChub2RlLmxvYz8uc3RhcnQub2Zmc2V0ID8/IDAsIHR5cGVTdGFydCAtIDIpLFxuICAgICAgZmlsZW5hbWUsXG4gICAgICBzb3VyY2VcbiAgICApXG4gIH0gZWxzZSBpZiAoIW5vZGUubnVsbGFibGUgJiYgcmV0dXJuVHlwZS5raW5kID09IFwiT3B0aW9uYWxUeXBlXCIgJiZcbiAgICByZXR1cm5UeXBlLnZhbHVlVHlwZS5raW5kICE9IFwiVHlwZVZhcmlhYmxlUmVmZXJlbmNlXCIpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgXCJvcHRpb25hbCBhbm5vdGF0aW9uIHdpdGhvdXQgbnVsbGFibGUgbmF0aXZlIHJldHVybiB0eXBlXCIsIGRvY3VtZW50ZWQucmV0dXJuVHlwZT8ubG9jYXRpb24gPz8gbG9jYXRpb24pXG4gIH1cblxuICByZXR1cm4ge1xuICAgIGxvY2F0aW9uLFxuICAgIG5hbWUsXG4gICAgbmFtZUxvY2F0aW9uOiBub2RlTG9jYXRpb24obmFtZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgIHBhcmFtZXRlcnMsXG4gICAgcmV0dXJuVHlwZSxcbiAgICAuLi4oZG9jdW1lbnRlZC50eXBlUGFyYW1ldGVycyA/IHt0eXBlUGFyYW1ldGVyczogZG9jdW1lbnRlZC50eXBlUGFyYW1ldGVyc30gOiB7fSlcbiAgfVxufVxuXG4vKipcbiAqIENoZWNrcyB0aGUgZXhhY3QgcnVudGltZSBjYXJyaWVyIHBlcm1pdHRlZCBiZXNpZGUgYSBwcmVjaXNlIFBIUERvYyB0eXBlLlxuICogQHBhcmFtIHtzdHJpbmcgfCB1bmRlZmluZWR9IG5hdGl2ZVR5cGUgLSBOYXRpdmUgUEhQIHR5cGUgbmFtZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gbmF0aXZlTnVsbGFibGUgLSBXaGV0aGVyIHRoZSBuYXRpdmUgY2FycmllciBoYXMgUEhQJ3MgbnVsbGFibGUgbWFya2VyLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1ZhbHVlVHlwZX0gZG9jdW1lbnRlZFR5cGUgLSBFeGFjdCBzZW1hbnRpYyBkb2N1bWVudCB0eXBlLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uPn0gcmVjb3JkcyAtIFZpc2libGUgbm9taW5hbCBkZWNsYXJhdGlvbnMgYnkgbmFtZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIHRoZSBuYXRpdmUgY2FycmllciBhZ3JlZXMgd2l0aG91dCBjaGFuZ2luZyBtZWFuaW5nLlxuICovXG5mdW5jdGlvbiBwaHBEb2N1bWVudGVkTmF0aXZlVHlwZU1hdGNoZXMobmF0aXZlVHlwZSwgbmF0aXZlTnVsbGFibGUsIGRvY3VtZW50ZWRUeXBlLCByZWNvcmRzKSB7XG4gIGlmIChkb2N1bWVudGVkVHlwZS5raW5kID09IFwiT3B0aW9uYWxUeXBlXCIpIHtcbiAgICBpZiAoZG9jdW1lbnRlZFR5cGUudmFsdWVUeXBlLmtpbmQgPT0gXCJUeXBlVmFyaWFibGVSZWZlcmVuY2VcIikge1xuICAgICAgcmV0dXJuIG5hdGl2ZVR5cGUgPT09IHVuZGVmaW5lZCAmJiAhbmF0aXZlTnVsbGFibGVcbiAgICB9XG5cbiAgICByZXR1cm4gbmF0aXZlTnVsbGFibGUgJiYgcGhwRG9jdW1lbnRlZE5hdGl2ZVR5cGVNYXRjaGVzKG5hdGl2ZVR5cGUsIGZhbHNlLCBkb2N1bWVudGVkVHlwZS52YWx1ZVR5cGUsIHJlY29yZHMpXG4gIH1cbiAgaWYgKG5hdGl2ZU51bGxhYmxlKSByZXR1cm4gZmFsc2VcbiAgaWYgKGRvY3VtZW50ZWRUeXBlLmtpbmQgPT0gXCJUeXBlVmFyaWFibGVSZWZlcmVuY2VcIikgcmV0dXJuIG5hdGl2ZVR5cGUgPT09IHVuZGVmaW5lZFxuICBpZiAoZG9jdW1lbnRlZFR5cGUua2luZCA9PSBcIlR5cGVSZWZlcmVuY2VcIikge1xuICAgIHJldHVybiBuYXRpdmVUeXBlICE9PSB1bmRlZmluZWQgJiYgc291cmNlU2NhbGFyVHlwZShcInBocFwiLCBuYXRpdmVUeXBlKT8ubmFtZSA9PSBkb2N1bWVudGVkVHlwZS5uYW1lXG4gIH1cbiAgaWYgKGRvY3VtZW50ZWRUeXBlLmtpbmQgPT0gXCJMaXN0VHlwZVwiIHx8IGRvY3VtZW50ZWRUeXBlLmtpbmQgPT0gXCJNYXBUeXBlXCIgfHwgZG9jdW1lbnRlZFR5cGUua2luZCA9PSBcIk9yZGVyZWRNYXBUeXBlXCIpIHtcbiAgICByZXR1cm4gbmF0aXZlVHlwZSA9PSBcImFycmF5XCJcbiAgfVxuICBpZiAoZG9jdW1lbnRlZFR5cGUua2luZCA9PSBcIlJlY29yZFR5cGVcIikge1xuICAgIHJldHVybiBuYXRpdmVUeXBlICE9PSB1bmRlZmluZWQgJiYgcmVjb3Jkcy5nZXQobmF0aXZlVHlwZSk/LmlkID09IGRvY3VtZW50ZWRUeXBlLmRlY2xhcmF0aW9uSWRcbiAgfVxuICBpZiAoZG9jdW1lbnRlZFR5cGUua2luZCA9PSBcIlJlZmVyZW5jZVR5cGVcIikge1xuICAgIHJldHVybiBuYXRpdmVUeXBlICE9PSB1bmRlZmluZWQgJiYgcmVjb3Jkcy5nZXQobmF0aXZlVHlwZSk/LmlkID09IGRvY3VtZW50ZWRUeXBlLmRlY2xhcmF0aW9uSWRcbiAgfVxuXG4gIHJldHVybiBmYWxzZVxufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgUEhQIGZ1bmN0aW9uIGJvZHkgdXNpbmcgdGhlIGFscmVhZHktcHJvdmVkIG1vZHVsZSBzaWduYXR1cmVzLlxuICogQHBhcmFtIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLkZ1bmN0aW9ufSBub2RlIC0gUEhQIGZ1bmN0aW9uIG5vZGUuXG4gKiBAcGFyYW0ge1BocEZ1bmN0aW9uU2lnbmF0dXJlfSBzaWduYXR1cmUgLSBQcmVjb252ZXJ0ZWQgZXhwbGljaXQgc2lnbmF0dXJlLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBQaHBGdW5jdGlvblNpZ25hdHVyZT59IGZ1bmN0aW9ucyAtIE1vZHVsZSBmdW5jdGlvbiBzaWduYXR1cmVzLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uPn0gcmVjb3JkTmFtZXMgLSBOb21pbmFsIGRlY2xhcmF0aW9ucyBieSBzb3VyY2UgbmFtZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24+fSByZWNvcmRzIC0gUmVjb3JkIGRlY2xhcmF0aW9ucyBieSBpZGVudGl0eS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbj59IGNsYXNzZXMgLSBSZWZlcmVuY2UgY2xhc3NlcyBieSBpZGVudGl0eS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbj59IGVycm9yTmFtZXMgLSBFcnJvciBkZWNsYXJhdGlvbnMgYnkgc291cmNlIG5hbWUuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb24+fSBlcnJvcnMgLSBFcnJvciBkZWNsYXJhdGlvbnMgYnkgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkZ1bmN0aW9uRGVjbGFyYXRpb259IFNlbWFudGljIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0RnVuY3Rpb24obm9kZSwgc2lnbmF0dXJlLCBmdW5jdGlvbnMsIHJlY29yZE5hbWVzLCByZWNvcmRzLCBjbGFzc2VzLCBlcnJvck5hbWVzLCBlcnJvcnMsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgaWYgKCFub2RlLmJvZHkpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBcImZ1bmN0aW9uIGJvZHlcIiwgc2lnbmF0dXJlLmxvY2F0aW9uKVxuICBjb25zdCBjb250ZXh0ID0ge1xuICAgIGJpbmRpbmdzOiBuZXcgTWFwKHNpZ25hdHVyZS5wYXJhbWV0ZXJzLm1hcCgocGFyYW1ldGVyKSA9PiBbcGFyYW1ldGVyLm5hbWUsIHBhcmFtZXRlci50eXBlXSkpLFxuICAgIGNsYXNzZXMsXG4gICAgZXJyb3JOYW1lcyxcbiAgICBlcnJvcnMsXG4gICAgZnVuY3Rpb25zLFxuICAgIG9yZGVyZWRNYXBEZWNsYXJhdGlvbnM6IG9yZGVyZWRNYXBEZWNsYXJhdGlvbnNGb3JQaHAobm9kZS5ib2R5KSxcbiAgICByZWNvcmROYW1lcyxcbiAgICByZWNvcmRzLFxuICAgIHJldHVyblR5cGU6IHNpZ25hdHVyZS5yZXR1cm5UeXBlLFxuICAgIHR5cGVQYXJhbWV0ZXJzOiBuZXcgTWFwKChzaWduYXR1cmUudHlwZVBhcmFtZXRlcnMgPz8gW10pLm1hcCgocGFyYW1ldGVyKSA9PiBbcGFyYW1ldGVyLm5hbWUsIHBhcmFtZXRlcl0pKVxuICB9XG5cbiAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgIGJvZHk6IGNvbnZlcnRCbG9jayhub2RlLmJvZHksIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgIGtpbmQ6IFwiRnVuY3Rpb25EZWNsYXJhdGlvblwiLFxuICAgIGxvY2F0aW9uOiBzaWduYXR1cmUubG9jYXRpb24sXG4gICAgbmFtZTogc2lnbmF0dXJlLm5hbWUsXG4gICAgcGFyYW1ldGVyczogc2lnbmF0dXJlLnBhcmFtZXRlcnMsXG4gICAgcmV0dXJuVHlwZTogc2lnbmF0dXJlLnJldHVyblR5cGUsXG4gICAgLi4uKHNpZ25hdHVyZS50eXBlUGFyYW1ldGVycyA/IHt0eXBlUGFyYW1ldGVyczogc2lnbmF0dXJlLnR5cGVQYXJhbWV0ZXJzfSA6IHt9KVxuICB9LCB7bmFtZTogc2lnbmF0dXJlLm5hbWVMb2NhdGlvbn0pXG59XG5cbi8qKlxuICogUmVzb2x2ZXMgcGFyc2VyLW93bmVkIGtleS92YWx1ZSBsb29wcyB0byBleGFjdCBkZWNsYXJhdGlvbnMgaW5zaWRlIG9uZSBsZXhpY2FsIG93bmVyLlxuICogQW1iaWd1b3VzIHNhbWUtbmFtZSBkZWNsYXJhdGlvbnMgcHJvZHVjZSBubyBldmlkZW5jZSBhbmQgZmFpbCBkdXJpbmcgbG9vcCBjb252ZXJzaW9uLlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIEZ1bmN0aW9uIGJvZHkgb3IgZW50cnktcG9pbnQgc3VidHJlZS5cbiAqIEByZXR1cm5zIHtTZXQ8b2JqZWN0Pn0gRXhhY3QgcGFpci1pdGVyYXRlZCBwYXJzZXIgZGVjbGFyYXRpb25zLlxuICovXG5mdW5jdGlvbiBvcmRlcmVkTWFwRGVjbGFyYXRpb25zRm9yUGhwKHZhbHVlKSB7XG4gIC8qKiBAdHlwZSB7e2RlY2xhcmF0aW9uOiBvYmplY3QsIG5hbWU6IHN0cmluZywgb2Zmc2V0OiBudW1iZXJ9W119ICovXG4gIGNvbnN0IGRlY2xhcmF0aW9ucyA9IFtdXG4gIC8qKiBAdHlwZSB7e25hbWU6IHN0cmluZywgb2Zmc2V0OiBudW1iZXJ9W119ICovXG4gIGNvbnN0IHJlY2VpdmVycyA9IFtdXG4gIGNvbnN0IHNlZW4gPSBuZXcgV2Vha1NldCgpXG4gIC8qKlxuICAgKiBWaXNpdHMgb25lIHBhcnNlciBjYW5kaWRhdGUuXG4gICAqIEBwYXJhbSB7dW5rbm93bn0gY2FuZGlkYXRlIC0gUGFyc2VyIGNhbmRpZGF0ZS5cbiAgICovXG4gIGNvbnN0IHZpc2l0ID0gKGNhbmRpZGF0ZSkgPT4ge1xuICAgIGlmICghY2FuZGlkYXRlIHx8IHR5cGVvZiBjYW5kaWRhdGUgIT0gXCJvYmplY3RcIiB8fCBzZWVuLmhhcyhjYW5kaWRhdGUpKSByZXR1cm5cbiAgICBzZWVuLmFkZChjYW5kaWRhdGUpXG4gICAgY29uc3Qga2luZCA9IFJlZmxlY3QuZ2V0KGNhbmRpZGF0ZSwgXCJraW5kXCIpXG5cbiAgICBpZiAoa2luZCA9PSBcImZ1bmN0aW9uXCIgfHwga2luZCA9PSBcImNsYXNzXCIpIHJldHVyblxuICAgIGlmIChraW5kID09IFwiYXNzaWduXCIpIHtcbiAgICAgIGNvbnN0IHZhcmlhYmxlID0gUmVmbGVjdC5nZXQoY2FuZGlkYXRlLCBcImxlZnRcIilcblxuICAgICAgaWYgKFJlZmxlY3QuZ2V0KHZhcmlhYmxlLCBcImtpbmRcIikgPT0gXCJ2YXJpYWJsZVwiICYmIHR5cGVvZiBSZWZsZWN0LmdldCh2YXJpYWJsZSwgXCJuYW1lXCIpID09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgZGVjbGFyYXRpb25zLnB1c2goe1xuICAgICAgICAgIGRlY2xhcmF0aW9uOiBjYW5kaWRhdGUsXG4gICAgICAgICAgbmFtZTogUmVmbGVjdC5nZXQodmFyaWFibGUsIFwibmFtZVwiKSxcbiAgICAgICAgICBvZmZzZXQ6IFJlZmxlY3QuZ2V0KHZhcmlhYmxlLCBcImxvY1wiKT8uc3RhcnQub2Zmc2V0XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChraW5kID09IFwiZm9yZWFjaFwiKSB7XG4gICAgICBjb25zdCByZWNlaXZlciA9IFJlZmxlY3QuZ2V0KGNhbmRpZGF0ZSwgXCJzb3VyY2VcIilcblxuICAgICAgaWYgKFJlZmxlY3QuZ2V0KHJlY2VpdmVyLCBcImtpbmRcIikgPT0gXCJ2YXJpYWJsZVwiICYmIHR5cGVvZiBSZWZsZWN0LmdldChyZWNlaXZlciwgXCJuYW1lXCIpID09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgUmVmbGVjdC5nZXQoY2FuZGlkYXRlLCBcImtleVwiKSkgcmVjZWl2ZXJzLnB1c2goe1xuICAgICAgICBuYW1lOiBSZWZsZWN0LmdldChyZWNlaXZlciwgXCJuYW1lXCIpLFxuICAgICAgICBvZmZzZXQ6IFJlZmxlY3QuZ2V0KGNhbmRpZGF0ZSwgXCJsb2NcIik/LnN0YXJ0Lm9mZnNldFxuICAgICAgfSlcbiAgICB9XG4gICAgZm9yIChjb25zdCBba2V5LCBjaGlsZF0gb2YgT2JqZWN0LmVudHJpZXMoY2FuZGlkYXRlKSkge1xuICAgICAgaWYgKFtcImxvY1wiLCBcImxlYWRpbmdDb21tZW50c1wiLCBcInRyYWlsaW5nQ29tbWVudHNcIl0uaW5jbHVkZXMoa2V5KSkgY29udGludWVcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGNoaWxkKSkge1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgY2hpbGQpIHZpc2l0KGl0ZW0pXG4gICAgICB9IGVsc2UgdmlzaXQoY2hpbGQpXG4gICAgfVxuICB9XG5cbiAgdmlzaXQodmFsdWUpXG4gIGNvbnN0IHNlbGVjdGVkID0gbmV3IFNldCgpXG4gIGZvciAoY29uc3QgcmVjZWl2ZXIgb2YgcmVjZWl2ZXJzKSB7XG4gICAgY29uc3QgbWF0Y2hlcyA9IGRlY2xhcmF0aW9ucy5maWx0ZXIoKHtuYW1lLCBvZmZzZXR9KSA9PiBuYW1lID09IHJlY2VpdmVyLm5hbWUgJiYgb2Zmc2V0IDwgcmVjZWl2ZXIub2Zmc2V0KVxuXG4gICAgaWYgKG1hdGNoZXMubGVuZ3RoID09IDEpIHNlbGVjdGVkLmFkZChtYXRjaGVzWzBdLmRlY2xhcmF0aW9uKVxuICB9XG5cbiAgcmV0dXJuIHNlbGVjdGVkXG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIGV4YWN0IGZpbmFsIFJ1bnRpbWVFeGNlcHRpb24gc3ViY2xhc3MuXG4gKiBAcGFyYW0ge2ltcG9ydChcInBocC1wYXJzZXJcIikuQ2xhc3N9IG5vZGUgLSBQSFAgY2xhc3MgZGVjbGFyYXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb259IGRlY2xhcmF0aW9uIC0gUHJlZGVjbGFyZWQgc2VtYW50aWMgZXJyb3IuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb259IFNlbWFudGljIGVycm9yIGRlY2xhcmF0aW9uLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0UGhwRXJyb3Iobm9kZSwgZGVjbGFyYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgcGFyZW50ID0gbm9kZS5leHRlbmRzXG4gIGNvbnN0IHBhcmVudE5hbWUgPSBwYXJlbnQ/LmtpbmQgPT0gXCJuYW1lXCIgPyAvKiogQHR5cGUge2ltcG9ydChcInBocC1wYXJzZXJcIikuTmFtZX0gKi8gKC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gKHBhcmVudCkpIDogdW5kZWZpbmVkXG5cbiAgaWYgKG5vZGUuaXNBbm9ueW1vdXMgfHwgIW5vZGUuaXNGaW5hbCB8fCBub2RlLmlzUmVhZG9ubHkgfHwgbm9kZS5pc0Fic3RyYWN0IHx8IG5vZGUuaW1wbGVtZW50cz8ubGVuZ3RoIHx8XG4gICAgbm9kZS5hdHRyR3JvdXBzLmxlbmd0aCB8fCBub2RlLmJvZHkubGVuZ3RoICE9IDAgfHwgIXBhcmVudE5hbWUgfHxcbiAgICAhKHBhcmVudE5hbWUubmFtZSA9PSBcIlJ1bnRpbWVFeGNlcHRpb25cIiAmJiBwYXJlbnROYW1lLnJlc29sdXRpb24gPT0gXCJ1cW5cIiB8fFxuICAgICAgcGFyZW50TmFtZS5uYW1lID09IFwiXFxcXFJ1bnRpbWVFeGNlcHRpb25cIiAmJiBwYXJlbnROYW1lLnJlc29sdXRpb24gPT0gXCJmcW5cIikpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgXCJub25jYW5vbmljYWwgdHlwZWQgZXJyb3IgZGVjbGFyYXRpb25cIiwgbG9jYXRpb24pXG4gIH1cbiAgY29uc3QgbmFtZU5vZGUgPSB0eXBlb2Ygbm9kZS5uYW1lID09IFwic3RyaW5nXCIgPyBub2RlIDogbm9kZS5uYW1lXG5cbiAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoZGVjbGFyYXRpb24sIHtuYW1lOiBub2RlTG9jYXRpb24obmFtZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpLCB0eXBlOiBub2RlTG9jYXRpb24ocGFyZW50TmFtZSwgZmlsZW5hbWUsIHNvdXJjZSl9KVxufVxuXG4vKipcbiAqIFJlYWRzIG9uZSBleGFjdCBwdWJsaWMgUEhQIGNvbnN0cnVjdG9yIG9yIGluc3RhbmNlLW1ldGhvZCBzaWduYXR1cmUuXG4gKiBAcGFyYW0ge2ltcG9ydChcInBocC1wYXJzZXJcIikuTWV0aG9kfSBub2RlIC0gUGFyc2VyLW93bmVkIG1ldGhvZC5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59IG5vbWluYWxOYW1lcyAtIFZpc2libGUgbm9taW5hbCBkZWNsYXJhdGlvbnMuXG4gKiBAcGFyYW0ge3N0cmluZ30gb3duZXJJZCAtIFN0YWJsZSBjYWxsYWJsZSBpZGVudGl0eS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gY29uc3RydWN0b3IgLSBXaGV0aGVyIHRoaXMgaXMgdGhlIHNvbGUgY29uc3RydWN0b3IuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge3tsb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIG5hbWU6IHN0cmluZywgbmFtZUxvY2F0aW9uOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiwgcGFyYW1ldGVyczogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUGFyYW1ldGVyW10sIHJldHVyblR5cGU/OiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0Z1bmN0aW9uUmV0dXJuVHlwZX19IEV4YWN0IHNpZ25hdHVyZS5cbiAqL1xuZnVuY3Rpb24gY29udmVydFBocENsYXNzQ2FsbGFibGVTaWduYXR1cmUobm9kZSwgbm9taW5hbE5hbWVzLCBvd25lcklkLCBjb25zdHJ1Y3RvciwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBuYW1lID0gdHlwZW9mIG5vZGUubmFtZSA9PSBcInN0cmluZ1wiID8gbm9kZS5uYW1lIDogbm9kZS5uYW1lLm5hbWVcblxuICBpZiAoIWNvbnN0cnVjdG9yICYmIC9eX18vdS50ZXN0KG5hbWUpKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgYHJlc2VydmVkIHJlZmVyZW5jZSBtZXRob2QgJyR7bmFtZX0nYCwgbG9jYXRpb24pXG4gIGlmIChub2RlLnZpc2liaWxpdHkgIT0gXCJwdWJsaWNcIiB8fCBub2RlLmlzU3RhdGljIHx8IG5vZGUuaXNBYnN0cmFjdCB8fCBub2RlLmlzRmluYWwgfHwgUmVmbGVjdC5nZXQobm9kZSwgXCJpc1JlYWRvbmx5XCIpIHx8IG5vZGUuYnlyZWYgfHxcbiAgICBub2RlLmF0dHJHcm91cHMubGVuZ3RoIHx8ICFub2RlLmJvZHkgfHwgY29uc3RydWN0b3IgIT0gKG5hbWUgPT0gXCJfX2NvbnN0cnVjdFwiKSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBcIm5vbmNhbm9uaWNhbCByZWZlcmVuY2UgY2xhc3MgY2FsbGFibGVcIiwgbG9jYXRpb24pXG4gIH1cbiAgY29uc3QgZG9jdW1lbnRlZCA9IGZ1bmN0aW9uRG9jdW1lbnRlZFR5cGVzKC8qKiBAdHlwZSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5GdW5jdGlvbn0gKi8gKC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gKG5vZGUpKSxcbiAgICBmaWxlbmFtZSwgc291cmNlLCBvd25lcklkKVxuICBpZiAoZG9jdW1lbnRlZC50eXBlUGFyYW1ldGVycz8ubGVuZ3RoKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgXCJnZW5lcmljIHJlZmVyZW5jZSBjbGFzcyBjYWxsYWJsZVwiLCBsb2NhdGlvbilcbiAgaWYgKGNvbnN0cnVjdG9yICYmIChub2RlLnR5cGUgfHwgbm9kZS5udWxsYWJsZSB8fCBkb2N1bWVudGVkLnJldHVyblR5cGUpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwiY29uc3RydWN0b3IgcmV0dXJuIGFubm90YXRpb25cIiwgbG9jYXRpb24pXG4gIH1cbiAgY29uc3QgcGFyYW1ldGVycyA9IG5vZGUuYXJndW1lbnRzLm1hcCgocGFyYW1ldGVyKSA9PiB7XG4gICAgY29uc3QgcGFyYW1ldGVyTG9jYXRpb24gPSBub2RlTG9jYXRpb24ocGFyYW1ldGVyLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IHBhcmFtZXRlck5hbWUgPSB0eXBlb2YgcGFyYW1ldGVyLm5hbWUgPT0gXCJzdHJpbmdcIiA/IHBhcmFtZXRlci5uYW1lIDogcGFyYW1ldGVyLm5hbWUubmFtZVxuXG4gICAgaWYgKHBhcmFtZXRlci5ieXJlZiB8fCBwYXJhbWV0ZXIudmFyaWFkaWMgfHwgcGFyYW1ldGVyLnZhbHVlIHx8IHBhcmFtZXRlci5mbGFncyB8fCBwYXJhbWV0ZXIucmVhZG9ubHkgfHxcbiAgICAgIHBhcmFtZXRlci5ob29rcy5sZW5ndGggfHwgcGFyYW1ldGVyLmF0dHJHcm91cHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgXCJub25jYW5vbmljYWwgcmVmZXJlbmNlIGNsYXNzIHBhcmFtZXRlclwiLCBwYXJhbWV0ZXJMb2NhdGlvbilcbiAgICB9XG4gICAgY29uc3QgZG9jdW1lbnRlZFR5cGUgPSBkb2N1bWVudGVkLnBhcmFtZXRlcnMuZ2V0KHBhcmFtZXRlck5hbWUpXG4gICAgY29uc3QgbmF0aXZlVHlwZSA9IHBocFR5cGVOYW1lKHBhcmFtZXRlci50eXBlKVxuICAgIGxldCB0eXBlID0gZG9jdW1lbnRlZFR5cGVcbiAgICAgID8gZG9jdW1lbnRlZFZhbHVlVHlwZSh7bGFuZ3VhZ2U6IFwicGhwXCIsIGxvY2F0aW9uOiBkb2N1bWVudGVkVHlwZS5sb2NhdGlvbiwgb3duZXJMb2NhdGlvbjogcGFyYW1ldGVyTG9jYXRpb24sXG4gICAgICAgIHJlY29yZHM6IG5vbWluYWxOYW1lcywgc291cmNlLCBzb3VyY2VUeXBlOiBkb2N1bWVudGVkVHlwZS5zb3VyY2VUeXBlLCBzdWJqZWN0OiBgUGFyYW1ldGVyICcke3BhcmFtZXRlck5hbWV9J2B9KVxuICAgICAgOiBjb252ZXJ0VHlwZShwYXJhbWV0ZXIudHlwZSwgYFBhcmFtZXRlciAnJHtwYXJhbWV0ZXJOYW1lfSdgLCBwYXJhbWV0ZXJMb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgbm9taW5hbE5hbWVzKVxuXG4gICAgaWYgKG5hdGl2ZVR5cGUgPT0gXCJhcnJheVwiICYmICFkb2N1bWVudGVkVHlwZSkgcmV0dXJuIG1pc3NpbmdUeXBlKFwicGhwXCIsIGBQYXJhbWV0ZXIgJyR7cGFyYW1ldGVyTmFtZX0nYCwgcGFyYW1ldGVyTG9jYXRpb24pXG4gICAgaWYgKGRvY3VtZW50ZWRUeXBlICYmICFwaHBEb2N1bWVudGVkTmF0aXZlVHlwZU1hdGNoZXMobmF0aXZlVHlwZSwgcGFyYW1ldGVyLm51bGxhYmxlLCB0eXBlLCBub21pbmFsTmFtZXMpKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgXCJkb2N1bWVudGVkIHBhcmFtZXRlciB0eXBlIGluY29tcGF0aWJsZSB3aXRoIG5hdGl2ZSB0eXBlXCIsIGRvY3VtZW50ZWRUeXBlLmxvY2F0aW9uKVxuICAgIH1cbiAgICBpZiAocGFyYW1ldGVyLm51bGxhYmxlICYmIHR5cGUua2luZCAhPSBcIk9wdGlvbmFsVHlwZVwiKSB7XG4gICAgICBpZiAoIXBhcmFtZXRlci50eXBlKSByZXR1cm4gbWlzc2luZ1R5cGUoXCJwaHBcIiwgYFBhcmFtZXRlciAnJHtwYXJhbWV0ZXJOYW1lfSdgLCBwYXJhbWV0ZXJMb2NhdGlvbilcbiAgICAgIHR5cGUgPSBudWxsYWJsZVR5cGUodHlwZSwgcGFyYW1ldGVyLnR5cGUsIHBhcmFtZXRlci5sb2M/LnN0YXJ0Lm9mZnNldCA/PyAwLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIH0gZWxzZSBpZiAoIXBhcmFtZXRlci5udWxsYWJsZSAmJiB0eXBlLmtpbmQgPT0gXCJPcHRpb25hbFR5cGVcIikge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwib3B0aW9uYWwgYW5ub3RhdGlvbiB3aXRob3V0IG51bGxhYmxlIG5hdGl2ZSB0eXBlXCIsIGRvY3VtZW50ZWRUeXBlPy5sb2NhdGlvbiA/PyBwYXJhbWV0ZXJMb2NhdGlvbilcbiAgICB9XG4gICAgY29uc3QgbmFtZU5vZGUgPSB0eXBlb2YgcGFyYW1ldGVyLm5hbWUgPT0gXCJzdHJpbmdcIiA/IHBhcmFtZXRlciA6IHBhcmFtZXRlci5uYW1lXG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUGFyYW1ldGVyXCIpLCBsb2NhdGlvbjogcGFyYW1ldGVyTG9jYXRpb24sXG4gICAgICBuYW1lOiBwYXJhbWV0ZXJOYW1lLCB0eXBlfSwge25hbWU6IG5vZGVMb2NhdGlvbihuYW1lTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICB9KVxuICBpZiAoWy4uLmRvY3VtZW50ZWQucGFyYW1ldGVycy5rZXlzKCldLnNvbWUoKHBhcmFtZXRlck5hbWUpID0+XG4gICAgIW5vZGUuYXJndW1lbnRzLnNvbWUoKHBhcmFtZXRlcikgPT4gKHR5cGVvZiBwYXJhbWV0ZXIubmFtZSA9PSBcInN0cmluZ1wiID8gcGFyYW1ldGVyLm5hbWUgOiBwYXJhbWV0ZXIubmFtZS5uYW1lKSA9PSBwYXJhbWV0ZXJOYW1lKSkpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgXCJtZXRob2QgUEhQRG9jIHBhcmFtZXRlciBtaXNtYXRjaFwiLCBsb2NhdGlvbilcbiAgfVxuICBjb25zdCBuYW1lTm9kZSA9IHR5cGVvZiBub2RlLm5hbWUgPT0gXCJzdHJpbmdcIiA/IG5vZGUgOiBub2RlLm5hbWVcblxuICBpZiAoY29uc3RydWN0b3IpIHJldHVybiB7bG9jYXRpb24sIG5hbWU6IFwiY29uc3RydWN0b3JcIiwgbmFtZUxvY2F0aW9uOiBub2RlTG9jYXRpb24obmFtZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpLCBwYXJhbWV0ZXJzfVxuICBsZXQgcmV0dXJuVHlwZVxuICBjb25zdCBuYXRpdmVSZXR1cm5UeXBlID0gcGhwVHlwZU5hbWUobm9kZS50eXBlKVxuXG4gIGlmIChkb2N1bWVudGVkLnJldHVyblR5cGUpIHtcbiAgICByZXR1cm5UeXBlID0gZG9jdW1lbnRlZFZhbHVlVHlwZSh7bGFuZ3VhZ2U6IFwicGhwXCIsIGxvY2F0aW9uOiBkb2N1bWVudGVkLnJldHVyblR5cGUubG9jYXRpb24sIG93bmVyTG9jYXRpb246IGxvY2F0aW9uLFxuICAgICAgcmVjb3Jkczogbm9taW5hbE5hbWVzLCBzb3VyY2UsIHNvdXJjZVR5cGU6IGRvY3VtZW50ZWQucmV0dXJuVHlwZS5zb3VyY2VUeXBlLCBzdWJqZWN0OiBgTWV0aG9kICcke25hbWV9JyByZXR1cm5gfSlcbiAgICBpZiAoIXBocERvY3VtZW50ZWROYXRpdmVUeXBlTWF0Y2hlcyhuYXRpdmVSZXR1cm5UeXBlLCBub2RlLm51bGxhYmxlLCByZXR1cm5UeXBlLCBub21pbmFsTmFtZXMpKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgXCJkb2N1bWVudGVkIG1ldGhvZCByZXR1cm4gdHlwZSBpbmNvbXBhdGlibGUgd2l0aCBuYXRpdmUgdHlwZVwiLCBkb2N1bWVudGVkLnJldHVyblR5cGUubG9jYXRpb24pXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChuYXRpdmVSZXR1cm5UeXBlID09IFwiYXJyYXlcIikgcmV0dXJuIG1pc3NpbmdUeXBlKFwicGhwXCIsIGBNZXRob2QgJyR7bmFtZX0nIHJldHVybmAsIGxvY2F0aW9uKVxuICAgIHJldHVyblR5cGUgPSBjb252ZXJ0UmV0dXJuVHlwZShub2RlLnR5cGUsIGBNZXRob2QgJyR7bmFtZX0nIHJldHVybmAsIGxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCBub21pbmFsTmFtZXMpXG4gIH1cbiAgaWYgKG5vZGUubnVsbGFibGUgJiYgcmV0dXJuVHlwZS5raW5kICE9IFwiT3B0aW9uYWxUeXBlXCIpIHtcbiAgICBpZiAoIW5vZGUudHlwZSkgcmV0dXJuIG1pc3NpbmdUeXBlKFwicGhwXCIsIGBNZXRob2QgJyR7bmFtZX0nIHJldHVybmAsIGxvY2F0aW9uKVxuICAgIHJldHVyblR5cGUgPSBudWxsYWJsZVR5cGUoLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1ZhbHVlVHlwZX0gKi8gKHJldHVyblR5cGUpLCBub2RlLnR5cGUsXG4gICAgICBub2RlLnR5cGUubG9jPy5zdGFydC5vZmZzZXQgPz8gMCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgfSBlbHNlIGlmICghbm9kZS5udWxsYWJsZSAmJiByZXR1cm5UeXBlLmtpbmQgPT0gXCJPcHRpb25hbFR5cGVcIikge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBcIm9wdGlvbmFsIGFubm90YXRpb24gd2l0aG91dCBudWxsYWJsZSBuYXRpdmUgcmV0dXJuIHR5cGVcIiwgZG9jdW1lbnRlZC5yZXR1cm5UeXBlPy5sb2NhdGlvbiA/PyBsb2NhdGlvbilcbiAgfVxuXG4gIHJldHVybiB7bG9jYXRpb24sIG5hbWUsIG5hbWVMb2NhdGlvbjogbm9kZUxvY2F0aW9uKG5hbWVOb2RlLCBmaWxlbmFtZSwgc291cmNlKSwgcGFyYW1ldGVycywgcmV0dXJuVHlwZX1cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyB0aGUgYm91bmRlZCBmaW5hbC9wcml2YXRlLWZpZWxkIFBIUCByZWZlcmVuY2UtY2xhc3MgcHJvZmlsZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5DbGFzc30gbm9kZSAtIFBhcnNlciBjbGFzcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbn0gZGVjbGFyYXRpb24gLSBQcmVkZWNsYXJlZCBjbGFzcyBpZGVudGl0eS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59IG5vbWluYWxOYW1lcyAtIFZpc2libGUgbm9taW5hbCBkZWNsYXJhdGlvbnMuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uPn0gcmVjb3JkcyAtIFJlY29yZHMgYnkgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24+fSBjbGFzc2VzIC0gQ2xhc3NlcyBieSBpZGVudGl0eS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgUGhwRnVuY3Rpb25TaWduYXR1cmU+fSBmdW5jdGlvbnMgLSBUb3AtbGV2ZWwgc2lnbmF0dXJlcy5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbj59IGVycm9yTmFtZXMgLSBFcnJvcnMgYnkgbmFtZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbj59IGVycm9ycyAtIEVycm9ycyBieSBpZGVudGl0eS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbn0gU2VtYW50aWMgY2xhc3MuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRQaHBSZWZlcmVuY2VDbGFzcyhub2RlLCBkZWNsYXJhdGlvbiwgbm9taW5hbE5hbWVzLCByZWNvcmRzLCBjbGFzc2VzLCBmdW5jdGlvbnMsIGVycm9yTmFtZXMsIGVycm9ycyxcbiAgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmIChub2RlLmlzQW5vbnltb3VzIHx8ICFub2RlLmlzRmluYWwgfHwgbm9kZS5pc1JlYWRvbmx5IHx8IG5vZGUuaXNBYnN0cmFjdCB8fCBub2RlLmV4dGVuZHMgfHwgbm9kZS5pbXBsZW1lbnRzPy5sZW5ndGggfHxcbiAgICBub2RlLmF0dHJHcm91cHMubGVuZ3RoKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgXCJyZWZlcmVuY2UgY2xhc3MgaW5oZXJpdGFuY2Ugb3Igbm9uY2Fub25pY2FsIG1vZGlmaWVyXCIsIGxvY2F0aW9uKVxuICBjb25zdCBmaWVsZFN0YXRlbWVudHMgPSBub2RlLmJvZHkuZmlsdGVyKChtZW1iZXIpID0+IG1lbWJlci5raW5kID09IFwicHJvcGVydHlzdGF0ZW1lbnRcIilcbiAgY29uc3QgbWV0aG9kTm9kZXMgPSAvKiogQHR5cGUge2ltcG9ydChcInBocC1wYXJzZXJcIikuTWV0aG9kW119ICovIChub2RlLmJvZHkuZmlsdGVyKChtZW1iZXIpID0+IG1lbWJlci5raW5kID09IFwibWV0aG9kXCIpKVxuICBjb25zdCBjb25zdHJ1Y3RvcnMgPSBtZXRob2ROb2Rlcy5maWx0ZXIoKG1ldGhvZCkgPT4gKHR5cGVvZiBtZXRob2QubmFtZSA9PSBcInN0cmluZ1wiID8gbWV0aG9kLm5hbWUgOiBtZXRob2QubmFtZS5uYW1lKSA9PSBcIl9fY29uc3RydWN0XCIpXG4gIGNvbnN0IG9yZGluYXJ5TWV0aG9kcyA9IG1ldGhvZE5vZGVzLmZpbHRlcigobWV0aG9kKSA9PiAhY29uc3RydWN0b3JzLmluY2x1ZGVzKG1ldGhvZCkpXG5cbiAgaWYgKGNvbnN0cnVjdG9ycy5sZW5ndGggIT0gMSB8fCBmaWVsZFN0YXRlbWVudHMubGVuZ3RoID09IDAgfHwgZmllbGRTdGF0ZW1lbnRzLmxlbmd0aCArIG1ldGhvZE5vZGVzLmxlbmd0aCAhPSBub2RlLmJvZHkubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwicmVmZXJlbmNlIGNsYXNzIHJlcXVpcmVzIHByaXZhdGUgZmllbGRzLCBvbmUgY29uc3RydWN0b3IsIGFuZCBvcmRpbmFyeSBtZXRob2RzXCIsIGxvY2F0aW9uKVxuICB9XG4gIGRlY2xhcmF0aW9uLmZpZWxkcyA9IGZpZWxkU3RhdGVtZW50cy5tYXAoKHN0YXRlbWVudCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBmaWVsZExvY2F0aW9uID0gbm9kZUxvY2F0aW9uKHN0YXRlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICBjb25zdCBwcm9wZXJ0aWVzID0gUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcInByb3BlcnRpZXNcIilcbiAgICBjb25zdCBwcm9wZXJ0eSA9IEFycmF5LmlzQXJyYXkocHJvcGVydGllcykgJiYgcHJvcGVydGllcy5sZW5ndGggPT0gMSA/IHByb3BlcnRpZXNbMF0gOiB1bmRlZmluZWRcbiAgICBjb25zdCBuYW1lTm9kZSA9IHByb3BlcnR5Py5uYW1lXG4gICAgY29uc3QgbmFtZSA9IHR5cGVvZiBuYW1lTm9kZSA9PSBcInN0cmluZ1wiID8gbmFtZU5vZGUgOiBuYW1lTm9kZT8ubmFtZVxuXG4gICAgaWYgKFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJ2aXNpYmlsaXR5XCIpICE9IFwicHJpdmF0ZVwiIHx8IFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJpc1N0YXRpY1wiKSB8fFxuICAgICAgUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImlzQWJzdHJhY3RcIikgfHwgUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImlzRmluYWxcIikgfHwgIXByb3BlcnR5IHx8XG4gICAgICB0eXBlb2YgbmFtZSAhPSBcInN0cmluZ1wiIHx8IHByb3BlcnR5LnZhbHVlIHx8IHByb3BlcnR5LnJlYWRvbmx5IHx8IHByb3BlcnR5Lm51bGxhYmxlIHx8IHByb3BlcnR5LmF0dHJHcm91cHM/Lmxlbmd0aCB8fFxuICAgICAgcHJvcGVydHkuaG9va3M/Lmxlbmd0aCkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwibm9uY2Fub25pY2FsIHByaXZhdGUgaW5zdGFuY2UgZmllbGRcIiwgZmllbGRMb2NhdGlvbilcbiAgICBjb25zdCB0eXBlID0gY29udmVydFR5cGUocHJvcGVydHkudHlwZSwgYFByaXZhdGUgZmllbGQgJyR7bmFtZX0nYCwgZmllbGRMb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgbm9taW5hbE5hbWVzKVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2lkOiBgJHtkZWNsYXJhdGlvbi5pZH06ZmllbGQ6JHtpbmRleH1gLCBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJQcml2YXRlRmllbGRcIiksXG4gICAgICBsb2NhdGlvbjogZmllbGRMb2NhdGlvbiwgbmFtZSwgdHlwZX0sIHtuYW1lOiBub2RlTG9jYXRpb24odHlwZW9mIG5hbWVOb2RlID09IFwic3RyaW5nXCIgPyBwcm9wZXJ0eSA6IG5hbWVOb2RlLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gIH0pXG4gIGNvbnN0IGNvbnN0cnVjdG9yTm9kZSA9IGNvbnN0cnVjdG9yc1swXVxuICBjb25zdCBjb25zdHJ1Y3RvclNpZ25hdHVyZSA9IGNvbnZlcnRQaHBDbGFzc0NhbGxhYmxlU2lnbmF0dXJlKGNvbnN0cnVjdG9yTm9kZSwgbm9taW5hbE5hbWVzLFxuICAgIGAke2RlY2xhcmF0aW9uLmlkfTpjb25zdHJ1Y3RvcmAsIHRydWUsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgZGVjbGFyYXRpb24uY29uc3RydWN0b3IgPSB3aXRoUGFyc2VyUmFuZ2VzKHtib2R5OiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJsb2NrfSAqLyAoe30pLFxuICAgIGlkOiBgJHtkZWNsYXJhdGlvbi5pZH06Y29uc3RydWN0b3JgLCBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJDb25zdHJ1Y3RvckRlY2xhcmF0aW9uXCIpLFxuICAgIGxvY2F0aW9uOiBjb25zdHJ1Y3RvclNpZ25hdHVyZS5sb2NhdGlvbiwgcGFyYW1ldGVyczogY29uc3RydWN0b3JTaWduYXR1cmUucGFyYW1ldGVyc30sIHtjb25zdHJ1Y3RvcjogY29uc3RydWN0b3JTaWduYXR1cmUubmFtZUxvY2F0aW9ufSlcbiAgY29uc3QgbWV0aG9kU2lnbmF0dXJlcyA9IG9yZGluYXJ5TWV0aG9kcy5tYXAoKG1ldGhvZCwgaW5kZXgpID0+IGNvbnZlcnRQaHBDbGFzc0NhbGxhYmxlU2lnbmF0dXJlKG1ldGhvZCwgbm9taW5hbE5hbWVzLFxuICAgIGAke2RlY2xhcmF0aW9uLmlkfTptZXRob2Q6JHtpbmRleH1gLCBmYWxzZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG5cbiAgZGVjbGFyYXRpb24ubWV0aG9kcyA9IG1ldGhvZFNpZ25hdHVyZXMubWFwKChzaWduYXR1cmUsIGluZGV4KSA9PiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICBib2R5OiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJsb2NrfSAqLyAoe30pLCBpZDogYCR7ZGVjbGFyYXRpb24uaWR9Om1ldGhvZDoke2luZGV4fWAsXG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTWV0aG9kRGVjbGFyYXRpb25cIiksIGxvY2F0aW9uOiBzaWduYXR1cmUubG9jYXRpb24sIG5hbWU6IHNpZ25hdHVyZS5uYW1lLFxuICAgIHBhcmFtZXRlcnM6IHNpZ25hdHVyZS5wYXJhbWV0ZXJzLFxuICAgIHJldHVyblR5cGU6IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNGdW5jdGlvblJldHVyblR5cGV9ICovIChzaWduYXR1cmUucmV0dXJuVHlwZSlcbiAgfSwge25hbWU6IHNpZ25hdHVyZS5uYW1lTG9jYXRpb259KSlcbiAgY29uc3QgYmFzZSA9IHtiaW5kaW5nczogbmV3IE1hcCgpLCBjbGFzc2VzLCBjdXJyZW50Q2xhc3M6IGRlY2xhcmF0aW9uLCBlcnJvck5hbWVzLCBlcnJvcnMsIGZ1bmN0aW9ucyxcbiAgICByZWNvcmROYW1lczogbm9taW5hbE5hbWVzLCByZWNvcmRzfVxuXG4gIGRlY2xhcmF0aW9uLmNvbnN0cnVjdG9yLmJvZHkgPSBjb252ZXJ0QmxvY2soLyoqIEB0eXBlIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLkJsb2NrfSAqLyAoY29uc3RydWN0b3JOb2RlLmJvZHkpLCBmaWxlbmFtZSwgc291cmNlLFxuICAgIHsuLi5iYXNlLCBiaW5kaW5nczogbmV3IE1hcChkZWNsYXJhdGlvbi5jb25zdHJ1Y3Rvci5wYXJhbWV0ZXJzLm1hcCgocGFyYW1ldGVyKSA9PiBbcGFyYW1ldGVyLm5hbWUsIHBhcmFtZXRlci50eXBlXSkpLFxuICAgICAgcmV0dXJuVHlwZToge2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlR5cGVSZWZlcmVuY2VcIiksIG5hbWU6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcInZvaWRcIil9fSlcbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IG9yZGluYXJ5TWV0aG9kcy5sZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICBjb25zdCBtZXRob2QgPSBkZWNsYXJhdGlvbi5tZXRob2RzW2luZGV4XVxuXG4gICAgbWV0aG9kLmJvZHkgPSBjb252ZXJ0QmxvY2soLyoqIEB0eXBlIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLkJsb2NrfSAqLyAob3JkaW5hcnlNZXRob2RzW2luZGV4XS5ib2R5KSwgZmlsZW5hbWUsIHNvdXJjZSxcbiAgICAgIHsuLi5iYXNlLCBiaW5kaW5nczogbmV3IE1hcChtZXRob2QucGFyYW1ldGVycy5tYXAoKHBhcmFtZXRlcikgPT4gW3BhcmFtZXRlci5uYW1lLCBwYXJhbWV0ZXIudHlwZV0pKSwgcmV0dXJuVHlwZTogbWV0aG9kLnJldHVyblR5cGV9KVxuICB9XG4gIGNvbnN0IG5hbWVOb2RlID0gdHlwZW9mIG5vZGUubmFtZSA9PSBcInN0cmluZ1wiID8gbm9kZSA6IG5vZGUubmFtZVxuXG4gIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKGRlY2xhcmF0aW9uLCB7bmFtZTogbm9kZUxvY2F0aW9uKG5hbWVOb2RlLCBmaWxlbmFtZSwgc291cmNlKX0pXG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIGV4YWN0IGZpbmFsIHJlYWRvbmx5IHByb21vdGVkLXByb3BlcnR5IFBIUCByZWNvcmQuXG4gKiBAcGFyYW0ge2ltcG9ydChcInBocC1wYXJzZXJcIikuQ2xhc3N9IG5vZGUgLSBQSFAgY2xhc3MgZGVjbGFyYXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9ufSBkZWNsYXJhdGlvbiAtIFByZWRlY2xhcmVkIG5vbWluYWwgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uPn0gcmVjb3JkTmFtZXMgLSBSZWNvcmQgZGVjbGFyYXRpb25zIGJ5IG5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9ufSBTZW1hbnRpYyByZWNvcmQuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRQaHBSZWNvcmQobm9kZSwgZGVjbGFyYXRpb24sIHJlY29yZE5hbWVzLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IGdlbmVyaWMgPSAoZGVjbGFyYXRpb24udHlwZVBhcmFtZXRlcnM/Lmxlbmd0aCA/PyAwKSA+IDBcblxuICBpZiAobm9kZS5pc0Fub255bW91cyB8fCAhbm9kZS5pc0ZpbmFsIHx8IG5vZGUuaXNSZWFkb25seSA9PSBnZW5lcmljIHx8IG5vZGUuaXNBYnN0cmFjdCB8fCBub2RlLmV4dGVuZHMgfHwgbm9kZS5pbXBsZW1lbnRzPy5sZW5ndGggfHxcbiAgICBub2RlLmF0dHJHcm91cHMubGVuZ3RoKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgXCJub25jYW5vbmljYWwgcmVjb3JkIGNsYXNzIG1vZGlmaWVyc1wiLCBsb2NhdGlvbilcbiAgaWYgKG5vZGUuYm9keS5sZW5ndGggPCAxIHx8IG5vZGUuYm9keVswXS5raW5kICE9IFwibWV0aG9kXCIgfHwgIWdlbmVyaWMgJiYgbm9kZS5ib2R5Lmxlbmd0aCAhPSAxKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwicmVjb3JkIGNsYXNzIGJvZHkgb3V0c2lkZSBvbmUgY29uc3RydWN0b3JcIiwgbm9kZUxvY2F0aW9uKG5vZGUuYm9keVsxXSA/PyBub2RlLmJvZHlbMF0gPz8gbm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgY29uc3RydWN0b3IgPSAvKiogQHR5cGUge2ltcG9ydChcInBocC1wYXJzZXJcIikuTWV0aG9kfSAqLyAobm9kZS5ib2R5WzBdKVxuICBjb25zdCB0eXBlUGFyYW1ldGVyTmFtZXMgPSBuZXcgTWFwKChkZWNsYXJhdGlvbi50eXBlUGFyYW1ldGVycyA/PyBbXSkubWFwKChwYXJhbWV0ZXIpID0+IFtwYXJhbWV0ZXIubmFtZSwgcGFyYW1ldGVyXSkpXG4gIGNvbnN0IGNvbnN0cnVjdG9yTmFtZSA9IHR5cGVvZiBjb25zdHJ1Y3Rvci5uYW1lID09IFwic3RyaW5nXCIgPyBjb25zdHJ1Y3Rvci5uYW1lIDogY29uc3RydWN0b3IubmFtZS5uYW1lXG5cbiAgaWYgKGNvbnN0cnVjdG9yTmFtZSAhPSBcIl9fY29uc3RydWN0XCIgfHwgY29uc3RydWN0b3IudmlzaWJpbGl0eSAhPSBcInB1YmxpY1wiIHx8IGNvbnN0cnVjdG9yLmlzU3RhdGljIHx8IGNvbnN0cnVjdG9yLmlzQWJzdHJhY3QgfHxcbiAgICBjb25zdHJ1Y3Rvci5pc0ZpbmFsIHx8IFJlZmxlY3QuZ2V0KGNvbnN0cnVjdG9yLCBcImlzUmVhZG9ubHlcIikgfHwgY29uc3RydWN0b3IuYnlyZWYgfHwgY29uc3RydWN0b3IudHlwZSB8fCBjb25zdHJ1Y3Rvci5udWxsYWJsZSB8fFxuICAgIGNvbnN0cnVjdG9yLmF0dHJHcm91cHMubGVuZ3RoIHx8ICFjb25zdHJ1Y3Rvci5ib2R5IHx8IGNvbnN0cnVjdG9yLmJvZHkuY2hpbGRyZW4ubGVuZ3RoICE9IDApIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgXCJub25jYW5vbmljYWwgcmVjb3JkIGNvbnN0cnVjdG9yXCIsIG5vZGVMb2NhdGlvbihjb25zdHJ1Y3RvciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgZG9jdW1lbnRlZCA9IGZ1bmN0aW9uRG9jdW1lbnRlZFR5cGVzKC8qKiBAdHlwZSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5GdW5jdGlvbn0gKi8gKC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gKGNvbnN0cnVjdG9yKSksIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgZGVjbGFyYXRpb24uZmllbGRzID0gY29uc3RydWN0b3IuYXJndW1lbnRzLm1hcCgocGFyYW1ldGVyKSA9PiB7XG4gICAgY29uc3QgZmllbGRMb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihwYXJhbWV0ZXIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgY29uc3QgbmFtZSA9IHR5cGVvZiBwYXJhbWV0ZXIubmFtZSA9PSBcInN0cmluZ1wiID8gcGFyYW1ldGVyLm5hbWUgOiBwYXJhbWV0ZXIubmFtZS5uYW1lXG4gICAgY29uc3QgZG9jdW1lbnRlZFR5cGUgPSBkb2N1bWVudGVkLnBhcmFtZXRlcnMuZ2V0KG5hbWUpXG4gICAgY29uc3QgbmF0aXZlVHlwZSA9IHBocFR5cGVOYW1lKHBhcmFtZXRlci50eXBlKVxuXG4gICAgaWYgKHBhcmFtZXRlci5mbGFncyAhPSAoZ2VuZXJpYyA/IDQgOiAxKSB8fCBwYXJhbWV0ZXIuYnlyZWYgfHwgcGFyYW1ldGVyLnZhcmlhZGljIHx8IHBhcmFtZXRlci52YWx1ZSB8fCBwYXJhbWV0ZXIucmVhZG9ubHkgfHxcbiAgICAgIHBhcmFtZXRlci5ob29rcy5sZW5ndGggfHwgcGFyYW1ldGVyLmF0dHJHcm91cHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgXCJyZWNvcmQgZmllbGQgb3V0c2lkZSBwdWJsaWMgcHJvbW90ZWQtcHJvcGVydHkgcHJvZmlsZVwiLCBmaWVsZExvY2F0aW9uKVxuICAgIH1cbiAgICBpZiAobmF0aXZlVHlwZSA9PSBcImFycmF5XCIgJiYgIWRvY3VtZW50ZWRUeXBlKSByZXR1cm4gbWlzc2luZ1R5cGUoXCJwaHBcIiwgYFJlY29yZCBmaWVsZCAnJHtuYW1lfSdgLCBmaWVsZExvY2F0aW9uKVxuICAgIGxldCB0eXBlID0gZG9jdW1lbnRlZFR5cGVcbiAgICAgID8gZG9jdW1lbnRlZFZhbHVlVHlwZSh7bGFuZ3VhZ2U6IFwicGhwXCIsIGxvY2F0aW9uOiBkb2N1bWVudGVkVHlwZS5sb2NhdGlvbiwgb3duZXJMb2NhdGlvbjogZmllbGRMb2NhdGlvbiwgcmVjb3JkczogcmVjb3JkTmFtZXMsXG4gICAgICAgIHNvdXJjZSwgc291cmNlVHlwZTogZG9jdW1lbnRlZFR5cGUuc291cmNlVHlwZSwgc3ViamVjdDogYFJlY29yZCBmaWVsZCAnJHtuYW1lfSdgLCB0eXBlUGFyYW1ldGVyczogdHlwZVBhcmFtZXRlck5hbWVzfSlcbiAgICAgIDogY29udmVydFR5cGUocGFyYW1ldGVyLnR5cGUsIGBSZWNvcmQgZmllbGQgJyR7bmFtZX0nYCwgZmllbGRMb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMpXG5cbiAgICBpZiAoZG9jdW1lbnRlZFR5cGUgJiYgIXBocERvY3VtZW50ZWROYXRpdmVUeXBlTWF0Y2hlcyhuYXRpdmVUeXBlLCBwYXJhbWV0ZXIubnVsbGFibGUsIHR5cGUsIHJlY29yZE5hbWVzKSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwiZG9jdW1lbnRlZCByZWNvcmQgZmllbGQgdHlwZSBpbmNvbXBhdGlibGUgd2l0aCBuYXRpdmUgdHlwZVwiLCBkb2N1bWVudGVkVHlwZS5sb2NhdGlvbilcbiAgICB9XG5cbiAgICBpZiAocGFyYW1ldGVyLm51bGxhYmxlICYmIHR5cGUua2luZCAhPSBcIk9wdGlvbmFsVHlwZVwiKSB7XG4gICAgICBpZiAoIXBhcmFtZXRlci50eXBlKSByZXR1cm4gbWlzc2luZ1R5cGUoXCJwaHBcIiwgYFJlY29yZCBmaWVsZCAnJHtuYW1lfSdgLCBmaWVsZExvY2F0aW9uKVxuICAgICAgdHlwZSA9IG51bGxhYmxlVHlwZSh0eXBlLCBwYXJhbWV0ZXIudHlwZSwgcGFyYW1ldGVyLmxvYz8uc3RhcnQub2Zmc2V0ID8/IDAsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgfSBlbHNlIGlmICghcGFyYW1ldGVyLm51bGxhYmxlICYmIHR5cGUua2luZCA9PSBcIk9wdGlvbmFsVHlwZVwiICYmIHR5cGUudmFsdWVUeXBlLmtpbmQgIT0gXCJUeXBlVmFyaWFibGVSZWZlcmVuY2VcIikge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwib3B0aW9uYWwgYW5ub3RhdGlvbiB3aXRob3V0IG51bGxhYmxlIG5hdGl2ZSByZWNvcmQgZmllbGRcIiwgZG9jdW1lbnRlZFR5cGU/LmxvY2F0aW9uID8/IGZpZWxkTG9jYXRpb24pXG4gICAgfVxuICAgIGNvbnN0IGZpZWxkID0ge2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlJlY29yZEZpZWxkXCIpLCBsb2NhdGlvbjogZmllbGRMb2NhdGlvbiwgbmFtZSwgdHlwZX1cbiAgICBjb25zdCBuYW1lTm9kZSA9IHR5cGVvZiBwYXJhbWV0ZXIubmFtZSA9PSBcInN0cmluZ1wiID8gcGFyYW1ldGVyIDogcGFyYW1ldGVyLm5hbWVcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKGZpZWxkLCB7bmFtZTogbm9kZUxvY2F0aW9uKG5hbWVOb2RlLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gIH0pXG4gIGNvbnN0IGV4dHJhRG9jdW1lbnRlZCA9IFsuLi5kb2N1bWVudGVkLnBhcmFtZXRlcnMua2V5cygpXS5maW5kKChuYW1lKSA9PlxuICAgICFjb25zdHJ1Y3Rvci5hcmd1bWVudHMuc29tZSgocGFyYW1ldGVyKSA9PiAodHlwZW9mIHBhcmFtZXRlci5uYW1lID09IFwic3RyaW5nXCIgPyBwYXJhbWV0ZXIubmFtZSA6IHBhcmFtZXRlci5uYW1lLm5hbWUpID09IG5hbWUpKVxuXG4gIGlmIChleHRyYURvY3VtZW50ZWQgfHwgZG9jdW1lbnRlZC5yZXR1cm5UeXBlKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgXCJpbnZhbGlkIHJlY29yZCBjb25zdHJ1Y3RvciBhbm5vdGF0aW9uXCIsIGxvY2F0aW9uKVxuICBpZiAoZ2VuZXJpYykgdmFsaWRhdGVQaHBHZW5lcmljUmVjb3JkR2V0dGVycyhub2RlLCBkZWNsYXJhdGlvbiwgcmVjb3JkTmFtZXMsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IG5hbWVOb2RlID0gdHlwZW9mIG5vZGUubmFtZSA9PSBcInN0cmluZ1wiID8gbm9kZSA6IG5vZGUubmFtZVxuXG4gIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKGRlY2xhcmF0aW9uLCB7bmFtZTogbm9kZUxvY2F0aW9uKG5hbWVOb2RlLCBmaWxlbmFtZSwgc291cmNlKX0pXG59XG5cbi8qKlxuICogVmFsaWRhdGVzIHRoZSBleGFjdCBhY2Nlc3NvciBoYWxmIG9mIFBIUCdzIGRvY3VtZW50ZWQgZ2VuZXJpYy1yZWNvcmQgcHJvZmlsZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5DbGFzc30gbm9kZSAtIFBIUCBjbGFzcyBkZWNsYXJhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb259IGRlY2xhcmF0aW9uIC0gQ29udmVydGVkIHJlY29yZC5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24+fSByZWNvcmROYW1lcyAtIFZpc2libGUgcmVjb3Jkcy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVQaHBHZW5lcmljUmVjb3JkR2V0dGVycyhub2RlLCBkZWNsYXJhdGlvbiwgcmVjb3JkTmFtZXMsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgY29uc3QgZ2V0dGVycyA9IG5vZGUuYm9keS5zbGljZSgxKVxuICBjb25zdCB0eXBlUGFyYW1ldGVycyA9IG5ldyBNYXAoKGRlY2xhcmF0aW9uLnR5cGVQYXJhbWV0ZXJzID8/IFtdKS5tYXAoKHBhcmFtZXRlcikgPT4gW3BhcmFtZXRlci5uYW1lLCBwYXJhbWV0ZXJdKSlcblxuICBpZiAoZ2V0dGVycy5sZW5ndGggIT0gZGVjbGFyYXRpb24uZmllbGRzLmxlbmd0aCkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBcImdlbmVyaWMgcmVjb3JkIGdldHRlciBjb3VudFwiLCBub2RlTG9jYXRpb24oZ2V0dGVyc1tkZWNsYXJhdGlvbi5maWVsZHMubGVuZ3RoXSA/PyBub2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBnZXR0ZXJzLmZvckVhY2goKGNhbmRpZGF0ZSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBmaWVsZCA9IGRlY2xhcmF0aW9uLmZpZWxkc1tpbmRleF1cblxuICAgIGlmIChjYW5kaWRhdGUua2luZCAhPSBcIm1ldGhvZFwiKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgXCJub25jYW5vbmljYWwgZ2VuZXJpYyByZWNvcmQgZ2V0dGVyXCIsIG5vZGVMb2NhdGlvbihjYW5kaWRhdGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIGNvbnN0IGdldHRlciA9IC8qKiBAdHlwZSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5NZXRob2R9ICovIChjYW5kaWRhdGUpXG4gICAgY29uc3QgbmFtZSA9IHR5cGVvZiBnZXR0ZXIubmFtZSA9PSBcInN0cmluZ1wiID8gZ2V0dGVyLm5hbWUgOiBnZXR0ZXIubmFtZS5uYW1lXG4gICAgY29uc3Qgc3RhdGVtZW50ID0gZ2V0dGVyLmJvZHk/LmNoaWxkcmVuWzBdXG4gICAgY29uc3QgcmV0dXJuZWQgPSBzdGF0ZW1lbnQ/LmtpbmQgPT0gXCJyZXR1cm5cIiA/IC8qKiBAdHlwZSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5SZXR1cm59ICovIChzdGF0ZW1lbnQpLmV4cHIgOiB1bmRlZmluZWRcbiAgICBjb25zdCBsb29rdXAgPSByZXR1cm5lZD8ua2luZCA9PSBcInByb3BlcnR5bG9va3VwXCIgPyAvKiogQHR5cGUge2ltcG9ydChcInBocC1wYXJzZXJcIikuUHJvcGVydHlMb29rdXB9ICovIChyZXR1cm5lZCkgOiB1bmRlZmluZWRcbiAgICBjb25zdCByZWNlaXZlciA9IGxvb2t1cD8ud2hhdC5raW5kID09IFwidmFyaWFibGVcIiA/IC8qKiBAdHlwZSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5WYXJpYWJsZX0gKi8gKGxvb2t1cC53aGF0KSA6IHVuZGVmaW5lZFxuICAgIGNvbnN0IG1lbWJlciA9IGxvb2t1cD8ub2Zmc2V0LmtpbmQgPT0gXCJpZGVudGlmaWVyXCIgPyAvKiogQHR5cGUge2ltcG9ydChcInBocC1wYXJzZXJcIikuSWRlbnRpZmllcn0gKi8gKGxvb2t1cC5vZmZzZXQpIDogdW5kZWZpbmVkXG5cbiAgICBpZiAobmFtZSAhPSBmaWVsZC5uYW1lIHx8IGdldHRlci52aXNpYmlsaXR5ICE9IFwicHVibGljXCIgfHwgZ2V0dGVyLmlzU3RhdGljIHx8IGdldHRlci5pc0Fic3RyYWN0IHx8IGdldHRlci5pc0ZpbmFsIHx8XG4gICAgICBSZWZsZWN0LmdldChnZXR0ZXIsIFwiaXNSZWFkb25seVwiKSB8fCBnZXR0ZXIuYnlyZWYgfHwgZ2V0dGVyLmFyZ3VtZW50cy5sZW5ndGggfHwgZ2V0dGVyLmF0dHJHcm91cHMubGVuZ3RoIHx8XG4gICAgICAhZ2V0dGVyLmJvZHkgfHwgZ2V0dGVyLmJvZHkuY2hpbGRyZW4ubGVuZ3RoICE9IDEgfHwgcmVjZWl2ZXI/Lm5hbWUgIT0gXCJ0aGlzXCIgfHwgbWVtYmVyPy5uYW1lICE9IGZpZWxkLm5hbWUpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBcIm5vbmNhbm9uaWNhbCBnZW5lcmljIHJlY29yZCBnZXR0ZXJcIiwgbm9kZUxvY2F0aW9uKGdldHRlciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIGNvbnN0IGRvY3VtZW50ZWQgPSBmdW5jdGlvbkRvY3VtZW50ZWRUeXBlcyhcbiAgICAgIC8qKiBAdHlwZSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5GdW5jdGlvbn0gKi8gKC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gKGdldHRlcikpLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gICAgaWYgKGRvY3VtZW50ZWQucGFyYW1ldGVycy5zaXplIHx8IGRvY3VtZW50ZWQudHlwZVBhcmFtZXRlcnMgfHwgIWRvY3VtZW50ZWQucmV0dXJuVHlwZSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwibWlzc2luZyBvciBpbnZhbGlkIGdlbmVyaWMgcmVjb3JkIGdldHRlciB0eXBlXCIsIG5vZGVMb2NhdGlvbihnZXR0ZXIsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cbiAgICBjb25zdCByZXR1cm5UeXBlID0gZG9jdW1lbnRlZFZhbHVlVHlwZSh7bGFuZ3VhZ2U6IFwicGhwXCIsIGxvY2F0aW9uOiBkb2N1bWVudGVkLnJldHVyblR5cGUubG9jYXRpb24sXG4gICAgICBvd25lckxvY2F0aW9uOiBub2RlTG9jYXRpb24oZ2V0dGVyLCBmaWxlbmFtZSwgc291cmNlKSwgcmVjb3JkczogcmVjb3JkTmFtZXMsIHNvdXJjZSxcbiAgICAgIHNvdXJjZVR5cGU6IGRvY3VtZW50ZWQucmV0dXJuVHlwZS5zb3VyY2VUeXBlLCBzdWJqZWN0OiBgUmVjb3JkIGdldHRlciAnJHtuYW1lfSdgLCB0eXBlUGFyYW1ldGVyc30pXG4gICAgY29uc3QgbmF0aXZlVHlwZSA9IHBocFR5cGVOYW1lKGdldHRlci50eXBlKVxuXG4gICAgaWYgKCFwaHBEb2N1bWVudGVkTmF0aXZlVHlwZU1hdGNoZXMobmF0aXZlVHlwZSwgZ2V0dGVyLm51bGxhYmxlLCByZXR1cm5UeXBlLCByZWNvcmROYW1lcykgfHxcbiAgICAgICFzYW1lVmFsdWVUeXBlKHJldHVyblR5cGUsIGZpZWxkLnR5cGUpKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgXCJnZW5lcmljIHJlY29yZCBnZXR0ZXIgdHlwZSBtaXNtYXRjaFwiLCBkb2N1bWVudGVkLnJldHVyblR5cGUubG9jYXRpb24pXG4gICAgfVxuICB9KVxufVxuXG4vKipcbiAqIENvbnZlcnRzIHRoZSBleGlzdGluZyBQSFAgaWYvZWxzZSB0ZXJtaW5hbCB3aXRoIHJlc3RyaWN0ZWQgYnJhbmNoIHByZWZpeGVzLlxuICogQHBhcmFtIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLklmfSBub2RlIC0gUEhQIGlmIG5vZGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtQaHBDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5JZlN0YXRlbWVudH0gU2VtYW50aWMgYnJhbmNoLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0SWYobm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmIChub2RlLnNob3J0Rm9ybSkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwiYWx0ZXJuYXRpdmUgaWYgc3ludGF4XCIsIGxvY2F0aW9uKVxuICBpZiAobm9kZS5ib2R5LmtpbmQgIT0gXCJibG9ja1wiKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgXCJpZiB3aXRob3V0IGJsb2NrIGNvbnNlcXVlbnRcIiwgbG9jYXRpb24pXG4gIGlmIChub2RlLnRlc3Qua2luZCA9PSBcInZhcmlhYmxlXCIpIHtcbiAgICBjb25zdCB0ZXN0ZWQgPSAvKiogQHR5cGUge2ltcG9ydChcInBocC1wYXJzZXJcIikuVmFyaWFibGV9ICovIChub2RlLnRlc3QpXG5cbiAgICBpZiAodHlwZW9mIHRlc3RlZC5uYW1lID09IFwic3RyaW5nXCIgJiYgY29udGV4dC5iaW5kaW5ncy5nZXQodGVzdGVkLm5hbWUpPy5raW5kID09IFwiT3B0aW9uYWxUeXBlXCIpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBcIm9wdGlvbmFsIHRydXRoaW5lc3MgY29uZGl0aW9uXCIsIG5vZGVMb2NhdGlvbih0ZXN0ZWQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGNvbmRpdGlvbiA9IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUudGVzdCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgY29uc3QgY29uc2VxdWVudENvbnRleHQgPSB7Li4uY29udGV4dCwgYmluZGluZ3M6IG5ldyBNYXAoY29udGV4dC5iaW5kaW5ncyl9XG4gIGNvbnN0IGFsdGVybmF0ZUNvbnRleHQgPSB7Li4uY29udGV4dCwgYmluZGluZ3M6IG5ldyBNYXAoY29udGV4dC5iaW5kaW5ncyl9XG4gIGxldCBhbHRlcm5hdGVcblxuICBpZiAobm9kZS5hbHRlcm5hdGUpIHtcbiAgICBpZiAobm9kZS5hbHRlcm5hdGUua2luZCA9PSBcImJsb2NrXCIpIHtcbiAgICAgIGFsdGVybmF0ZSA9IGNvbnZlcnRCbG9jaygvKiogQHR5cGUge2ltcG9ydChcInBocC1wYXJzZXJcIikuQmxvY2t9ICovIChub2RlLmFsdGVybmF0ZSksIGZpbGVuYW1lLCBzb3VyY2UsIGFsdGVybmF0ZUNvbnRleHQpXG4gICAgfSBlbHNlIGlmIChub2RlLmFsdGVybmF0ZS5raW5kID09IFwiaWZcIikge1xuICAgICAgY29uc3QgbmVzdGVkID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLklmfSAqLyAobm9kZS5hbHRlcm5hdGUpXG5cbiAgICAgIGFsdGVybmF0ZSA9IHtcbiAgICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiQmxvY2tcIiksXG4gICAgICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24obmVzdGVkLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgc3RhdGVtZW50czogW2NvbnZlcnRJZihuZXN0ZWQsIGZpbGVuYW1lLCBzb3VyY2UsIGFsdGVybmF0ZUNvbnRleHQpXVxuICAgICAgfVxuICAgIH0gZWxzZSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgYGlmIGFsdGVybmF0ZSAke25vZGUuYWx0ZXJuYXRlLmtpbmR9YCwgbm9kZUxvY2F0aW9uKG5vZGUuYWx0ZXJuYXRlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uKGFsdGVybmF0ZSA/IHthbHRlcm5hdGV9IDoge30pLFxuICAgIGNvbmRpdGlvbixcbiAgICBjb25zZXF1ZW50OiBjb252ZXJ0QmxvY2sobm9kZS5ib2R5LCBmaWxlbmFtZSwgc291cmNlLCBjb25zZXF1ZW50Q29udGV4dCksXG4gICAga2luZDogXCJJZlN0YXRlbWVudFwiLFxuICAgIGxvY2F0aW9uXG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBleGFjdCBicmFjZWQgUEhQIGB3aGlsZSAoJGNvbmRpdGlvbikgeyAuLi4gfWAgc3ludGF4LlxuICogQHBhcmFtIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLldoaWxlfSBub2RlIC0gUEhQIHdoaWxlIG5vZGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtQaHBDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5XaGlsZVN0YXRlbWVudH0gU2VtYW50aWMgbG9vcC5cbiAqL1xuZnVuY3Rpb24gY29udmVydFdoaWxlKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAobm9kZS5zaG9ydEZvcm0pIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBcImFsdGVybmF0aXZlIHdoaWxlIHN5bnRheFwiLCBsb2NhdGlvbilcbiAgaWYgKCFub2RlLmJvZHkgfHwgbm9kZS5ib2R5LmtpbmQgIT0gXCJibG9ja1wiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwid2hpbGUgd2l0aG91dCBibG9jayBib2R5XCIsIG5vZGUuYm9keSA/IG5vZGVMb2NhdGlvbihub2RlLmJvZHksIGZpbGVuYW1lLCBzb3VyY2UpIDogbG9jYXRpb24pXG4gIH1cbiAgY29uc3QgYm9keUNvbnRleHQgPSB7Li4uY29udGV4dCwgYmluZGluZ3M6IG5ldyBNYXAoY29udGV4dC5iaW5kaW5ncyl9XG5cbiAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgIGJvZHk6IGNvbnZlcnRCbG9jaygvKiogQHR5cGUge2ltcG9ydChcInBocC1wYXJzZXJcIikuQmxvY2t9ICovIChub2RlLmJvZHkpLCBmaWxlbmFtZSwgc291cmNlLCBib2R5Q29udGV4dCksXG4gICAgY29uZGl0aW9uOiBjb252ZXJ0RXhwcmVzc2lvbihub2RlLnRlc3QsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIHVuZGVmaW5lZCwgdHJ1ZSksXG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiV2hpbGVTdGF0ZW1lbnRcIiksXG4gICAgbG9jYXRpb25cbiAgfSwge2tleXdvcmQ6IHRva2VuTG9jYXRpb24oXCJ3aGlsZVwiLCBub2RlLmxvYz8uc3RhcnQub2Zmc2V0ID8/IDAsIG5vZGUudGVzdC5sb2M/LnN0YXJ0Lm9mZnNldCA/PyBzb3VyY2UubGVuZ3RoLCBmaWxlbmFtZSwgc291cmNlKX0pXG59XG5cbi8qKlxuICogQ29udmVydHMgYSBQSFAgZWNobyBlbnRyeSBwb2ludC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5FY2hvfSBub2RlIC0gUEhQIGVjaG8gbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge1BocENvbnZlcnNpb25Db250ZXh0fSBjb250ZXh0IC0gVHlwZWQgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlByaW50U3RhdGVtZW50fSBQcmludCBzdGF0ZW1lbnQuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRQcmludChub2RlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKG5vZGUuZXhwcmVzc2lvbnMubGVuZ3RoICE9IDIgfHwgbm9kZS5leHByZXNzaW9uc1sxXS5raW5kICE9IFwibmFtZVwiIHx8XG4gICAgLyoqIEB0eXBlIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLk5hbWV9ICovIChub2RlLmV4cHJlc3Npb25zWzFdKS5uYW1lICE9IFwiUEhQX0VPTFwiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwiZWNobyB3aXRob3V0IG9uZSBleHByZXNzaW9uIGFuZCBQSFBfRU9MXCIsIGxvY2F0aW9uKVxuICB9XG5cbiAgcmV0dXJuIHtleHByZXNzaW9uOiBjb252ZXJ0RXhwcmVzc2lvbihub2RlLmV4cHJlc3Npb25zWzBdLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSwga2luZDogXCJQcmludFN0YXRlbWVudFwiLCBsb2NhdGlvbn1cbn1cblxuLyoqXG4gKiBQYXJzZXMgUEhQIGludG8gdGhlIHNoYXJlZCBzZW1hbnRpYyBtb2R1bGUuXG4gKiBAcGFyYW0ge29iamVjdH0gaW5wdXQgLSBQYXJzZXIgaW5wdXQuXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXQuZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXQuc291cmNlIC0gU291cmNlIHRleHQuXG4gKiBAcGFyYW0ge3JlYWRvbmx5IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdENhcGFiaWxpdHlEZWNsYXJhdGlvbltdfSBbaW5wdXQuY2FwYWJpbGl0aWVzXSAtIENvbXBpbGVyLWF1dGhvcml6ZWQgZGVjbGFyYXRpb25zLlxuICogQHBhcmFtIHt7aXNFbnRyeTogYm9vbGVhbiwgZnVuY3Rpb25zOiBNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5GdW5jdGlvbkRlY2xhcmF0aW9uPiwgcmVjb3JkczogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24+LCBlcnJvcnM/OiBNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9uPn19IFtpbnB1dC5wcm9ncmFtXSAtIFJlc29sdmVkIHByb2dyYW0gaW1wb3J0cyBhbmQgZW50cnkgcm9sZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gU2VtYW50aWMgbW9kdWxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQaHAoe2NhcGFiaWxpdGllcyA9IFtdLCBmaWxlbmFtZSwgc291cmNlLCBwcm9ncmFtOiBwcm9ncmFtQ29udGV4dH0pIHtcbiAgY29uc3QgcHJvZ3JhbSA9IHBhcnNlUGhwUHJvZ3JhbShmaWxlbmFtZSwgc291cmNlKVxuICB2YWxpZGF0ZURlY2xhcmVOb2Rlcyhwcm9ncmFtLmNoaWxkcmVuLCBmaWxlbmFtZSwgc291cmNlKVxuICBsZXQgYm9keSA9IHRhc2swMzRQaHBCb2R5KHByb2dyYW0uY2hpbGRyZW4sIGNhcGFiaWxpdGllcywgZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAocHJvZ3JhbUNvbnRleHQpIHtcbiAgICBpbnNwZWN0UGhwTW9kdWxlKHtmaWxlbmFtZSwgc291cmNlfSlcbiAgICBjb25zdCBuYW1lc3BhY2UgPSAvKiogQHR5cGUge2ltcG9ydChcInBocC1wYXJzZXJcIikuTmFtZXNwYWNlfSAqLyAoYm9keS5maW5kKChub2RlKSA9PiBub2RlLmtpbmQgPT0gXCJuYW1lc3BhY2VcIikpXG5cbiAgICBib2R5ID0gbmFtZXNwYWNlLmNoaWxkcmVuLmZpbHRlcigobm9kZSkgPT4gbm9kZS5raW5kICE9IFwidXNlZ3JvdXBcIiAmJiAhaXNQaHBSZXF1aXJlT25jZShub2RlKSlcbiAgfVxuICBjb25zdCBjbGFzc05vZGVzID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLkNsYXNzW119ICovIChib2R5LmZpbHRlcigobm9kZSkgPT4gbm9kZS5raW5kID09IFwiY2xhc3NcIikpXG4gIGNvbnN0IGVycm9yTm9kZXMgPSBjbGFzc05vZGVzLmZpbHRlcigobm9kZSkgPT4gbm9kZS5leHRlbmRzPy5raW5kID09IFwibmFtZVwiICYmXG4gICAgW1wiUnVudGltZUV4Y2VwdGlvblwiLCBcIlxcXFxSdW50aW1lRXhjZXB0aW9uXCJdLmluY2x1ZGVzKG5vZGUuZXh0ZW5kcy5uYW1lKSlcbiAgY29uc3QgcmVmZXJlbmNlQ2xhc3NOb2RlcyA9IGNsYXNzTm9kZXMuZmlsdGVyKChub2RlKSA9PiAhZXJyb3JOb2Rlcy5pbmNsdWRlcyhub2RlKSAmJlxuICAgIG5vZGUuYm9keS5zb21lKChtZW1iZXIpID0+IG1lbWJlci5raW5kID09IFwicHJvcGVydHlzdGF0ZW1lbnRcIikpXG4gIGNvbnN0IHJlY29yZE5vZGVzID0gY2xhc3NOb2Rlcy5maWx0ZXIoKG5vZGUpID0+ICFlcnJvck5vZGVzLmluY2x1ZGVzKG5vZGUpICYmICFyZWZlcmVuY2VDbGFzc05vZGVzLmluY2x1ZGVzKG5vZGUpKVxuICBjb25zdCBlcnJvckRlY2xhcmF0aW9ucyA9IGVycm9yTm9kZXMubWFwKChub2RlLCBpbmRleCkgPT4gKHtcbiAgICBpZDogYGVycm9yOiR7aW5kZXh9YCxcbiAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJFcnJvckRlY2xhcmF0aW9uXCIpLFxuICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgbmFtZTogdHlwZW9mIG5vZGUubmFtZSA9PSBcInN0cmluZ1wiID8gbm9kZS5uYW1lIDogbm9kZS5uYW1lLm5hbWVcbiAgfSkpXG4gIGNvbnN0IHJlY29yZERlY2xhcmF0aW9ucyA9IHJlY29yZE5vZGVzLm1hcCgobm9kZSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBpZCA9IGByZWNvcmQ6JHtpbmRleH1gXG4gICAgY29uc3QgdHlwZVBhcmFtZXRlcnMgPSBjbGFzc0RvY3VtZW50ZWRUeXBlUGFyYW1ldGVycyhub2RlLCBpZCwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgIHJldHVybiB7XG4gICAgICBmaWVsZHM6IFtdLFxuICAgICAgaWQsXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJSZWNvcmREZWNsYXJhdGlvblwiKSxcbiAgICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICBuYW1lOiB0eXBlb2Ygbm9kZS5uYW1lID09IFwic3RyaW5nXCIgPyBub2RlLm5hbWUgOiBub2RlLm5hbWUubmFtZSxcbiAgICAgIC4uLih0eXBlUGFyYW1ldGVycyA/IHt0eXBlUGFyYW1ldGVyc30gOiB7fSlcbiAgICB9XG4gIH0pXG4gIGNvbnN0IGNsYXNzRGVjbGFyYXRpb25zID0gcmVmZXJlbmNlQ2xhc3NOb2Rlcy5tYXAoKG5vZGUsIGluZGV4KSA9PiAoe1xuICAgIGNvbnN0cnVjdG9yOiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNvbnN0cnVjdG9yRGVjbGFyYXRpb259ICovICh7fSksXG4gICAgZmllbGRzOiBbXSwgaWQ6IGBjbGFzczoke2luZGV4fWAsIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkNsYXNzRGVjbGFyYXRpb25cIiksXG4gICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSwgbWV0aG9kczogW10sXG4gICAgbmFtZTogdHlwZW9mIG5vZGUubmFtZSA9PSBcInN0cmluZ1wiID8gbm9kZS5uYW1lIDogbm9kZS5uYW1lLm5hbWVcbiAgfSkpXG4gIGNvbnN0IHJlY29yZE5hbWVzID0gLyoqIEB0eXBlIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uPn0gKi8gKFxuICAgIG5ldyBNYXAocHJvZ3JhbUNvbnRleHQ/LnJlY29yZHMgPz8gW10pKVxuICBmb3IgKGNvbnN0IHJlc291cmNlIG9mIGNhcGFiaWxpdGllcy5mbGF0TWFwKCh7cmVzb3VyY2VzfSkgPT4gcmVzb3VyY2VzKSkgcmVjb3JkTmFtZXMuc2V0KHJlc291cmNlLm5hbWUsIHJlc291cmNlKVxuICBjb25zdCBlcnJvck5hbWVzID0gbmV3IE1hcChwcm9ncmFtQ29udGV4dD8uZXJyb3JzID8/IFtdKVxuICBmb3IgKGNvbnN0IGZhaWx1cmUgb2YgY2FwYWJpbGl0aWVzLmZsYXRNYXAoKHtmYWlsdXJlc30pID0+IGZhaWx1cmVzKSkge1xuICAgIGVycm9yTmFtZXMuc2V0KGZhaWx1cmUubmFtZSwgLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9ufSAqLyAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyAoZmFpbHVyZSkpKVxuICB9XG4gIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2YgZXJyb3JEZWNsYXJhdGlvbnMpIGVycm9yTmFtZXMuc2V0KGRlY2xhcmF0aW9uLm5hbWUsIGRlY2xhcmF0aW9uKVxuICBjb25zdCBlcnJvcnNCeUlkID0gbmV3IE1hcChbLi4uZXJyb3JOYW1lcy52YWx1ZXMoKV0ubWFwKChkZWNsYXJhdGlvbikgPT4gWy8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZGVjbGFyYXRpb24uaWQpLCBkZWNsYXJhdGlvbl0pKVxuICBjb25zdCBlcnJvcnMgPSBlcnJvck5vZGVzLm1hcCgobm9kZSwgaW5kZXgpID0+IGNvbnZlcnRQaHBFcnJvcihub2RlLCBlcnJvckRlY2xhcmF0aW9uc1tpbmRleF0sIGZpbGVuYW1lLCBzb3VyY2UpKVxuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIHJlY29yZERlY2xhcmF0aW9ucykgcmVjb3JkTmFtZXMuc2V0KGRlY2xhcmF0aW9uLm5hbWUsIGRlY2xhcmF0aW9uKVxuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIGNsYXNzRGVjbGFyYXRpb25zKSByZWNvcmROYW1lcy5zZXQoZGVjbGFyYXRpb24ubmFtZSwgZGVjbGFyYXRpb24pXG4gIGNvbnN0IHJlY29yZHNCeUlkID0gbmV3IE1hcChbLi4ucmVjb3JkTmFtZXMudmFsdWVzKCldXG4gICAgLmZpbHRlcigoZGVjbGFyYXRpb24pID0+IGRlY2xhcmF0aW9uLmtpbmQgPT0gXCJSZWNvcmREZWNsYXJhdGlvblwiKVxuICAgIC5tYXAoKGRlY2xhcmF0aW9uKSA9PiBbLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZWNsYXJhdGlvbi5pZCksIGRlY2xhcmF0aW9uXSkpXG4gIGNvbnN0IGNsYXNzZXNCeUlkID0gbmV3IE1hcChjbGFzc0RlY2xhcmF0aW9ucy5tYXAoKGRlY2xhcmF0aW9uKSA9PiBbLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZWNsYXJhdGlvbi5pZCksIGRlY2xhcmF0aW9uXSkpXG4gIGNvbnN0IHJlY29yZHMgPSByZWNvcmROb2Rlcy5tYXAoKG5vZGUsIGluZGV4KSA9PiBjb252ZXJ0UGhwUmVjb3JkKG5vZGUsIHJlY29yZERlY2xhcmF0aW9uc1tpbmRleF0sXG4gICAgLyoqIEB0eXBlIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbj59ICovICgvKiogQHR5cGUge3Vua25vd259ICovIChyZWNvcmROYW1lcykpLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3QgZnVuY3Rpb25Ob2RlcyA9IC8qKiBAdHlwZSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5GdW5jdGlvbltdfSAqLyAoYm9keS5maWx0ZXIoKG5vZGUpID0+IG5vZGUua2luZCA9PSBcImZ1bmN0aW9uXCIpKVxuICBjb25zdCBzaWduYXR1cmVzID0gZnVuY3Rpb25Ob2Rlcy5tYXAoKG5vZGUsIGluZGV4KSA9PiBjb252ZXJ0RnVuY3Rpb25TaWduYXR1cmUobm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMsIGBmdW5jdGlvbjoke2luZGV4fWApKVxuICBjb25zdCBmdW5jdGlvblNpZ25hdHVyZXMgPSBuZXcgTWFwKFsuLi5jYXBhYmlsaXR5RnVuY3Rpb25TaWduYXR1cmVzKGNhcGFiaWxpdGllcywgbW9kdWxlTG9jYXRpb24oZmlsZW5hbWUsIHNvdXJjZSkpLFxuICAgIC4uLihwcm9ncmFtQ29udGV4dD8uZnVuY3Rpb25zID8/IFtdKV0ubWFwKChbbG9jYWxOYW1lLCBkZWNsYXJhdGlvbl0pID0+IFtsb2NhbE5hbWUsIHtcbiAgICBsb2NhdGlvbjogZGVjbGFyYXRpb24ubG9jYXRpb24sXG4gICAgbmFtZTogbG9jYWxOYW1lLFxuICAgIG5hbWVMb2NhdGlvbjogZGVjbGFyYXRpb24ubG9jYXRpb24sXG4gICAgcGFyYW1ldGVyczogZGVjbGFyYXRpb24ucGFyYW1ldGVycyxcbiAgICByZXR1cm5UeXBlOiBkZWNsYXJhdGlvbi5yZXR1cm5UeXBlLFxuICAgIC4uLihkZWNsYXJhdGlvbi50eXBlUGFyYW1ldGVycyA/IHt0eXBlUGFyYW1ldGVyczogZGVjbGFyYXRpb24udHlwZVBhcmFtZXRlcnN9IDoge30pXG4gIH1dKSlcbiAgZm9yIChjb25zdCBzaWduYXR1cmUgb2Ygc2lnbmF0dXJlcykgZnVuY3Rpb25TaWduYXR1cmVzLnNldChzaWduYXR1cmUubmFtZSwgc2lnbmF0dXJlKVxuICBjb25zdCBjbGFzc2VzID0gcmVmZXJlbmNlQ2xhc3NOb2Rlcy5tYXAoKG5vZGUsIGluZGV4KSA9PiBjb252ZXJ0UGhwUmVmZXJlbmNlQ2xhc3Mobm9kZSwgY2xhc3NEZWNsYXJhdGlvbnNbaW5kZXhdLFxuICAgIHJlY29yZE5hbWVzLCByZWNvcmRzQnlJZCwgY2xhc3Nlc0J5SWQsIGZ1bmN0aW9uU2lnbmF0dXJlcywgZXJyb3JOYW1lcywgZXJyb3JzQnlJZCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIGNvbnN0IGZ1bmN0aW9ucyA9IGZ1bmN0aW9uTm9kZXMubWFwKChub2RlLCBpbmRleCkgPT5cbiAgICBjb252ZXJ0RnVuY3Rpb24obm9kZSwgc2lnbmF0dXJlc1tpbmRleF0sIGZ1bmN0aW9uU2lnbmF0dXJlcywgcmVjb3JkTmFtZXMsIHJlY29yZHNCeUlkLCBjbGFzc2VzQnlJZCwgZXJyb3JOYW1lcywgZXJyb3JzQnlJZCxcbiAgICAgIGZpbGVuYW1lLCBzb3VyY2UpKVxuICBjb25zdCBleGVjdXRhYmxlTm9kZXMgPSBib2R5LmZpbHRlcigobm9kZSkgPT4gIVtcImNsYXNzXCIsIFwiZnVuY3Rpb25cIiwgXCJkZWNsYXJlXCIsIFwibm9vcFwiXS5pbmNsdWRlcyhub2RlLmtpbmQpKVxuICBjb25zdCBsb2NhdGlvbiA9IG1vZHVsZUxvY2F0aW9uKGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKHByb2dyYW1Db250ZXh0ICYmICFwcm9ncmFtQ29udGV4dC5pc0VudHJ5ICYmIGV4ZWN1dGFibGVOb2Rlcy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwidG9wLWxldmVsIHNpZGUgZWZmZWN0IG91dHNpZGUgdGhlIHNlbGVjdGVkIGVudHJ5IG1vZHVsZVwiLCBub2RlTG9jYXRpb24oZXhlY3V0YWJsZU5vZGVzWzBdLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBjb25zdCBmaXJzdCA9IGV4ZWN1dGFibGVOb2Rlc1swXVxuICBjb25zdCBsYXN0ID0gZXhlY3V0YWJsZU5vZGVzLmF0KC0xKSA/PyBmaXJzdFxuICBjb25zdCBlbnRyeUxvY2F0aW9uID0gZmlyc3RcbiAgICA/IGxvY2F0aW9uRnJvbU9mZnNldHMoZmlsZW5hbWUsIHNvdXJjZSwgZmlyc3QubG9jPy5zdGFydC5vZmZzZXQgPz8gMCwgbGFzdD8ubG9jPy5lbmQub2Zmc2V0ID8/IHNvdXJjZS5sZW5ndGgpXG4gICAgOiBsb2NhdGlvblxuICBjb25zdCBlbnRyeUNvbnRleHQgPSB7XG4gICAgYmluZGluZ3M6IG5ldyBNYXAoKSxcbiAgICBjbGFzc2VzOiBjbGFzc2VzQnlJZCxcbiAgICBlcnJvck5hbWVzLFxuICAgIGVycm9yczogZXJyb3JzQnlJZCxcbiAgICBmdW5jdGlvbnM6IGZ1bmN0aW9uU2lnbmF0dXJlcyxcbiAgICBvcmRlcmVkTWFwRGVjbGFyYXRpb25zOiBvcmRlcmVkTWFwRGVjbGFyYXRpb25zRm9yUGhwKGV4ZWN1dGFibGVOb2RlcyksXG4gICAgcmVjb3JkTmFtZXMsXG4gICAgcmVjb3JkczogcmVjb3Jkc0J5SWQsXG4gICAgcmV0dXJuVHlwZTogdW5kZWZpbmVkXG4gIH1cbiAgY29uc3QgZW50cnlCbG9jayA9IHtcbiAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJCbG9ja1wiKSxcbiAgICBsb2NhdGlvbjogZW50cnlMb2NhdGlvbixcbiAgICBzdGF0ZW1lbnRzOiBleGVjdXRhYmxlTm9kZXMubWFwKChub2RlKSA9PiBjb252ZXJ0U3RhdGVtZW50KG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIGVudHJ5Q29udGV4dCkpXG4gIH1cblxuICBpZiAoIXByb2dyYW1Db250ZXh0ICYmIGZ1bmN0aW9ucy5sZW5ndGggPT0gMCAmJiBjYXBhYmlsaXRpZXMubGVuZ3RoID09IDAgJiYgIWJsb2NrUmVmZXJlbmNlc1Byb3RlY3RlZEVudHJ5KGVudHJ5QmxvY2spKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwibW9kdWxlIHdpdGhvdXQgYSBmdW5jdGlvblwiLCBsb2NhdGlvbilcbiAgfVxuICByZXR1cm4ge1xuICAgIGVudHJ5UG9pbnQ6IHtcbiAgICAgIGJvZHk6IGVudHJ5QmxvY2ssXG4gICAgICBraW5kOiBcIkVudHJ5UG9pbnRcIixcbiAgICAgIGxvY2F0aW9uOiBlbnRyeUxvY2F0aW9uXG4gICAgfSxcbiAgICBmdW5jdGlvbnMsXG4gICAga2luZDogXCJNb2R1bGVcIixcbiAgICBsb2NhdGlvbixcbiAgICAuLi4oZXJyb3JzLmxlbmd0aCA+IDAgPyB7ZXJyb3JzfSA6IHt9KSxcbiAgICAuLi4oY2xhc3Nlcy5sZW5ndGggPiAwID8ge2NsYXNzZXN9IDoge30pLFxuICAgIC4uLihyZWNvcmRzLmxlbmd0aCA+IDAgPyB7cmVjb3Jkc30gOiB7fSlcbiAgfVxufVxuXG4vKipcbiAqIFJlbW92ZXMgZXhhY3QgcHJvdGVjdGVkIFBIUCBwcm9iZSBzdXBwb3J0IGJlZm9yZSBwb3J0YWJsZSBjb252ZXJzaW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLlN0YXRlbWVudFtdfSBib2R5IC0gUGFyc2VkIHRvcC1sZXZlbCBzdGF0ZW1lbnRzLlxuICogQHBhcmFtIHtyZWFkb25seSBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RDYXBhYmlsaXR5RGVjbGFyYXRpb25bXX0gY2FwYWJpbGl0aWVzIC0gQXV0aG9yaXplZCBkZWNsYXJhdGlvbnMuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcInBocC1wYXJzZXJcIikuU3RhdGVtZW50W119IFBvcnRhYmxlIHN0YXRlbWVudHMuXG4gKi9cbmZ1bmN0aW9uIHRhc2swMzRQaHBCb2R5KGJvZHksIGNhcGFiaWxpdGllcywgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBpZiAoIWlzVGFzazAzNFJlc291cmNlUHJvYmUoY2FwYWJpbGl0aWVzKSkgcmV0dXJuIGJvZHlcbiAgY29uc3Qgc3RhcnQgPSBib2R5LmZpbmRJbmRleCgobm9kZSkgPT4gbm9kZS5sZWFkaW5nQ29tbWVudHM/LnNvbWUoKHt2YWx1ZX0pID0+IHZhbHVlID09IFwiLyogc2VtYW50aWZvbGQtdGFzazAzNC1zdXBwb3J0ICovXCIpKVxuXG4gIGlmIChzdGFydCA8IDApIHJldHVybiBib2R5XG4gIGlmICghaGFzRXhhY3RFZmZlY3RTdXBwb3J0KHNvdXJjZSwgXCJwaHBcIikpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgXCJtYWxmb3JtZWQgcHJvdGVjdGVkIFRhc2sgMDM0IHN1cHBvcnRcIiwgbm9kZUxvY2F0aW9uKGJvZHlbc3RhcnRdLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBjb25zdCBleHBlY3RlZCA9IFtcbiAgICBbXCJjbGFzc1wiLCBcIlByb2JlT3BlcmF0aW9uRmFpbHVyZVwiXSwgW1wiY2xhc3NcIiwgXCJQcm9iZUFjcXVpcmVGYWlsdXJlXCJdLCBbXCJjbGFzc1wiLCBcIlByb2JlUmVhZEZhaWx1cmVcIl0sXG4gICAgW1wiY2xhc3NcIiwgXCJQcm9iZUNsb3NlRmFpbHVyZVwiXSwgW1wiY2xhc3NcIiwgXCJQcm9iZVJlc291cmNlQ2xvc2VkXCJdLCBbXCJjbGFzc1wiLCBcIlByb2JlUmVzb3VyY2VcIl0sXG4gICAgW1wiZXhwcmVzc2lvbnN0YXRlbWVudFwiLCB1bmRlZmluZWRdLCBbXCJmdW5jdGlvblwiLCBcInByb2JlRWZmZWN0XCJdLCBbXCJmdW5jdGlvblwiLCBcInByb2JlQWNxdWlyZVwiXSxcbiAgICBbXCJmdW5jdGlvblwiLCBcInByb2JlUmVhZFwiXSwgW1wiZnVuY3Rpb25cIiwgXCJwcm9iZUNsb3NlXCJdLCBbXCJmdW5jdGlvblwiLCBcInByb2JlVHJhY2VcIl1cbiAgXVxuICBjb25zdCBtYXRjaGVzID0gZXhwZWN0ZWQuZXZlcnkoKFtraW5kLCBuYW1lXSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBub2RlID0gYm9keVtzdGFydCArIGluZGV4XVxuICAgIGNvbnN0IHJhd05hbWUgPSBub2RlID8gUmVmbGVjdC5nZXQobm9kZSwgXCJuYW1lXCIpIDogdW5kZWZpbmVkXG4gICAgY29uc3QgYWN0dWFsTmFtZSA9IHR5cGVvZiByYXdOYW1lID09IFwic3RyaW5nXCIgPyByYXdOYW1lIDogcmF3TmFtZSAmJiB0eXBlb2YgcmF3TmFtZSA9PSBcIm9iamVjdFwiID8gUmVmbGVjdC5nZXQocmF3TmFtZSwgXCJuYW1lXCIpIDogdW5kZWZpbmVkXG4gICAgcmV0dXJuIG5vZGU/LmtpbmQgPT0ga2luZCAmJiBhY3R1YWxOYW1lID09IG5hbWVcbiAgfSlcbiAgY29uc3QgbmV4dCA9IGJvZHlbc3RhcnQgKyBleHBlY3RlZC5sZW5ndGhdXG5cbiAgaWYgKCFtYXRjaGVzIHx8IG5leHQgJiYgIW5leHQubGVhZGluZ0NvbW1lbnRzPy5zb21lKCh7dmFsdWV9KSA9PiB2YWx1ZSA9PSBcIi8qIHNlbWFudGlmb2xkLXRhc2swMzQtc3VwcG9ydC1lbmQgKi9cIikpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgXCJtYWxmb3JtZWQgcHJvdGVjdGVkIFRhc2sgMDM0IHN1cHBvcnRcIiwgbm9kZUxvY2F0aW9uKGJvZHlbc3RhcnRdLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICByZXR1cm4gWy4uLmJvZHkuc2xpY2UoMCwgc3RhcnQpLCAuLi5ib2R5LnNsaWNlKHN0YXJ0ICsgZXhwZWN0ZWQubGVuZ3RoKV1cbn1cblxuLyoqXG4gKiBSZWFkcyB0aGUgY2Fub25pY2FsIHBhcnNlci1vd25lZCBQSFAgbmFtZXNwYWNlLCB1c2UgYmluZGluZ3MsIGFuZCBsaXRlcmFsIHJlcXVpcmVfb25jZSBlZGdlcy5cbiAqIEBwYXJhbSB7b2JqZWN0fSBpbnB1dCAtIFBhcnNlciBpbnB1dC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dC5maWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dC5zb3VyY2UgLSBTb3VyY2UgdGV4dC5cbiAqIEByZXR1cm5zIHt7YmluZGluZ3M6IHtpbXBvcnRlZE5hbWU6IHN0cmluZywgbG9jYWxOYW1lOiBzdHJpbmcsIGxvY2F0aW9uOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiwgbmF0aXZlTmFtZTogc3RyaW5nLCBzeW1ib2xLaW5kOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0RlY2xhcmF0aW9uS2luZCwgdHlwZU9ubHk6IGZhbHNlfVtdLCBpbXBvcnRzOiB7aW1wb3J0ZWROYW1lOiBzdHJpbmcsIGxvY2FsTmFtZTogc3RyaW5nLCBsb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIG5hbWVzcGFjZTogdHJ1ZSwgcGF0aExvY2F0aW9uOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiwgc3BlY2lmaWVyOiBzdHJpbmcsIHR5cGVPbmx5OiBmYWxzZX1bXSwgZXhwb3J0czoge2V4cG9ydGVkTmFtZTogc3RyaW5nLCBsb2NhbE5hbWU6IHN0cmluZywgbG9jYXRpb246IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCB0eXBlT25seTogZmFsc2V9W10sIG5hdGl2ZU5hbWU6IHN0cmluZ319IFBhcnNlci1vd25lZCBQSFAgbW9kdWxlIGhlYWRlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluc3BlY3RQaHBNb2R1bGUoe2ZpbGVuYW1lLCBzb3VyY2V9KSB7XG4gIGNvbnN0IHByb2dyYW0gPSBwYXJzZVBocFByb2dyYW0oZmlsZW5hbWUsIHNvdXJjZSlcblxuICB2YWxpZGF0ZURlY2xhcmVOb2Rlcyhwcm9ncmFtLmNoaWxkcmVuLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBuYW1lc3BhY2VzID0gcHJvZ3JhbS5jaGlsZHJlbi5maWx0ZXIoKG5vZGUpID0+IG5vZGUua2luZCA9PSBcIm5hbWVzcGFjZVwiKVxuICBjb25zdCBpbnZhbGlkT3V0ZXIgPSBwcm9ncmFtLmNoaWxkcmVuLmZpbmQoKG5vZGUpID0+ICFbXCJkZWNsYXJlXCIsIFwibmFtZXNwYWNlXCIsIFwibm9vcFwiXS5pbmNsdWRlcyhub2RlLmtpbmQpKVxuICBjb25zdCBuYW1lc3BhY2UgPSAvKiogQHR5cGUge2ltcG9ydChcInBocC1wYXJzZXJcIikuTmFtZXNwYWNlIHwgdW5kZWZpbmVkfSAqLyAobmFtZXNwYWNlc1swXSlcblxuICBpZiAoIW5hbWVzcGFjZSB8fCBuYW1lc3BhY2VzLmxlbmd0aCAhPSAxIHx8IG5hbWVzcGFjZS53aXRoQnJhY2tldHMgfHwgdHlwZW9mIG5hbWVzcGFjZS5uYW1lICE9IFwic3RyaW5nXCIgfHwgaW52YWxpZE91dGVyKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwib25lIGNhbm9uaWNhbCB1bmJyYWNrZXRlZCBuYW1lc3BhY2VcIixcbiAgICAgIG5vZGVMb2NhdGlvbihpbnZhbGlkT3V0ZXIgPz8gbmFtZXNwYWNlc1sxXSA/PyBuYW1lc3BhY2UgPz8gcHJvZ3JhbSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgYmluZGluZ3MgPSBbXVxuXG4gIGZvciAoY29uc3Qgbm9kZSBvZiBuYW1lc3BhY2UuY2hpbGRyZW4uZmlsdGVyKChjaGlsZCkgPT4gY2hpbGQua2luZCA9PSBcInVzZWdyb3VwXCIpKSB7XG4gICAgY29uc3QgZ3JvdXAgPSAvKiogQHR5cGUge2ltcG9ydChcInBocC1wYXJzZXJcIikuVXNlR3JvdXB9ICovIChub2RlKVxuXG4gICAgaWYgKGdyb3VwLm5hbWUgIT09IG51bGwgfHwgIVtudWxsLCBcImZ1bmN0aW9uXCJdLmluY2x1ZGVzKGdyb3VwLnR5cGUpIHx8IGdyb3VwLml0ZW1zLmxlbmd0aCA9PSAwKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgXCJncm91cGVkLCBjb25zdGFudCwgb3IgZW1wdHkgdXNlIGRlY2xhcmF0aW9uXCIsIG5vZGVMb2NhdGlvbihncm91cCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBncm91cC5pdGVtcykge1xuICAgICAgaWYgKGl0ZW0udHlwZSAhPT0gbnVsbCB8fCB0eXBlb2YgaXRlbS5uYW1lICE9IFwic3RyaW5nXCIgfHwgIWl0ZW0ubmFtZS5pbmNsdWRlcyhcIlxcXFxcIikpIHtcbiAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwiZ3JvdXBlZCBvciB1bnF1YWxpZmllZCB1c2UgaXRlbVwiLCBub2RlTG9jYXRpb24oaXRlbSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICB9XG4gICAgICBjb25zdCBpbXBvcnRlZE5hbWUgPSBpdGVtLm5hbWUuc3BsaXQoXCJcXFxcXCIpLmF0KC0xKVxuICAgICAgY29uc3QgYWxpYXMgPSBpdGVtLmFsaWFzXG5cbiAgICAgIGlmICghaW1wb3J0ZWROYW1lIHx8IGFsaWFzICYmIGFsaWFzLmtpbmQgIT0gXCJpZGVudGlmaWVyXCIpIHtcbiAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwiaW52YWxpZCB1c2UgYWxpYXNcIiwgbm9kZUxvY2F0aW9uKGl0ZW0sIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgfVxuICAgICAgYmluZGluZ3MucHVzaCh7XG4gICAgICAgIGltcG9ydGVkTmFtZSxcbiAgICAgICAgbG9jYWxOYW1lOiBhbGlhcyA/IGFsaWFzLm5hbWUgOiBpbXBvcnRlZE5hbWUsXG4gICAgICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24oaXRlbSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICAgIG5hdGl2ZU5hbWU6IGl0ZW0ubmFtZSxcbiAgICAgICAgc3ltYm9sS2luZDogLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0RlY2xhcmF0aW9uS2luZH0gKi8gKGdyb3VwLnR5cGUgPT0gXCJmdW5jdGlvblwiID8gXCJmdW5jdGlvblwiIDogXCJyZWNvcmRcIiksXG4gICAgICAgIHR5cGVPbmx5OiAvKiogQHR5cGUge2NvbnN0fSAqLyAoZmFsc2UpXG4gICAgICB9KVxuICAgIH1cbiAgfVxuICBjb25zdCBpbXBvcnRzID0gbmFtZXNwYWNlLmNoaWxkcmVuLmZpbHRlcihpc1BocEluY2x1ZGVTdGF0ZW1lbnQpLm1hcCgobm9kZSkgPT4ge1xuICAgIGlmICghaXNQaHBSZXF1aXJlT25jZShub2RlKSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwiaW5jbHVkZS9yZXF1aXJlIG91dHNpZGUgbGl0ZXJhbCByZXF1aXJlX29uY2UgX19ESVJfXyBwcm9maWxlXCIsIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgY29uc3Qgc3RhdGVtZW50ID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLkV4cHJlc3Npb25TdGF0ZW1lbnR9ICovIChub2RlKVxuICAgIGNvbnN0IGluY2x1ZGUgPSAvKiogQHR5cGUge2ltcG9ydChcInBocC1wYXJzZXJcIikuSW5jbHVkZX0gKi8gKHN0YXRlbWVudC5leHByZXNzaW9uKVxuICAgIGNvbnN0IHRhcmdldCA9IC8qKiBAdHlwZSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5CaW59ICovIChpbmNsdWRlLnRhcmdldClcbiAgICBjb25zdCBwYXRoID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLlN0cmluZ30gKi8gKHRhcmdldC5yaWdodClcblxuICAgIGlmICghcGF0aC52YWx1ZS5zdGFydHNXaXRoKFwiL1wiKSB8fCBwYXRoLnZhbHVlLmluY2x1ZGVzKFwiXFwwXCIpKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJwaHBcIiwgXCJ1bnNhZmUgcmVxdWlyZV9vbmNlIHBhdGhcIiwgbm9kZUxvY2F0aW9uKHBhdGgsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpbXBvcnRlZE5hbWU6IFwiKlwiLFxuICAgICAgbG9jYWxOYW1lOiBcIlwiLFxuICAgICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIG5hbWVzcGFjZTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKHRydWUpLFxuICAgICAgcGF0aExvY2F0aW9uOiBub2RlTG9jYXRpb24ocGF0aCwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICBzcGVjaWZpZXI6IGAuJHtwYXRoLnZhbHVlfWAsXG4gICAgICB0eXBlT25seTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKGZhbHNlKVxuICAgIH1cbiAgfSlcbiAgY29uc3QgZXhwb3J0cyA9IG5hbWVzcGFjZS5jaGlsZHJlbi5mbGF0TWFwKChub2RlKSA9PiB7XG4gICAgaWYgKG5vZGUua2luZCAhPSBcImNsYXNzXCIgJiYgbm9kZS5raW5kICE9IFwiZnVuY3Rpb25cIikgcmV0dXJuIFtdXG4gICAgY29uc3QgZGVjbGFyYXRpb24gPSAvKiogQHR5cGUge2ltcG9ydChcInBocC1wYXJzZXJcIikuQ2xhc3MgfCBpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLkZ1bmN0aW9ufSAqLyAobm9kZSlcbiAgICBjb25zdCBuYW1lID0gdHlwZW9mIGRlY2xhcmF0aW9uLm5hbWUgPT0gXCJzdHJpbmdcIiA/IGRlY2xhcmF0aW9uLm5hbWUgOiBkZWNsYXJhdGlvbi5uYW1lLm5hbWVcblxuICAgIHJldHVybiBbe2V4cG9ydGVkTmFtZTogbmFtZSwgbG9jYWxOYW1lOiBuYW1lLCBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpLCB0eXBlT25seTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKGZhbHNlKX1dXG4gIH0pXG5cbiAgcmV0dXJuIHtiaW5kaW5ncywgZXhwb3J0cywgaW1wb3J0cywgbmF0aXZlTmFtZTogbmFtZXNwYWNlLm5hbWV9XG59XG5cbi8qKlxuICogUmVwb3J0cyB3aGV0aGVyIGEgUEhQIHN0YXRlbWVudCBpcyBhbnkgaW5jbHVkZS9yZXF1aXJlIGV4cHJlc3Npb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcInBocC1wYXJzZXJcIikuTm9kZX0gbm9kZSAtIENhbmRpZGF0ZSBzdGF0ZW1lbnQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGUgbm9kZSBpcyBhbiBpbmNsdWRlIGV4cHJlc3Npb24gc3RhdGVtZW50LlxuICovXG5mdW5jdGlvbiBpc1BocEluY2x1ZGVTdGF0ZW1lbnQobm9kZSkge1xuICByZXR1cm4gbm9kZS5raW5kID09IFwiZXhwcmVzc2lvbnN0YXRlbWVudFwiICYmXG4gICAgLyoqIEB0eXBlIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLkV4cHJlc3Npb25TdGF0ZW1lbnR9ICovIChub2RlKS5leHByZXNzaW9uLmtpbmQgPT0gXCJpbmNsdWRlXCJcbn1cblxuLyoqXG4gKiBSZXBvcnRzIHdoZXRoZXIgYSBQSFAgc3RhdGVtZW50IGlzIHRoZSBjYW5vbmljYWwgbGl0ZXJhbCBwcm9qZWN0IGxvYWQgZWRnZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5Ob2RlfSBub2RlIC0gQ2FuZGlkYXRlIHN0YXRlbWVudC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIHRoZSBub2RlIGlzIGEgc3VwcG9ydGVkIHJlcXVpcmUtb25jZSBzdGF0ZW1lbnQuXG4gKi9cbmZ1bmN0aW9uIGlzUGhwUmVxdWlyZU9uY2Uobm9kZSkge1xuICBpZiAoIWlzUGhwSW5jbHVkZVN0YXRlbWVudChub2RlKSkgcmV0dXJuIGZhbHNlXG4gIGNvbnN0IHN0YXRlbWVudCA9IC8qKiBAdHlwZSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5FeHByZXNzaW9uU3RhdGVtZW50fSAqLyAobm9kZSlcbiAgY29uc3QgaW5jbHVkZSA9IC8qKiBAdHlwZSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5JbmNsdWRlfSAqLyAoc3RhdGVtZW50LmV4cHJlc3Npb24pXG4gIGNvbnN0IHRhcmdldCA9IGluY2x1ZGUudGFyZ2V0LmtpbmQgPT0gXCJiaW5cIiA/IC8qKiBAdHlwZSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5CaW59ICovIChpbmNsdWRlLnRhcmdldCkgOiB1bmRlZmluZWRcbiAgY29uc3QgbGVmdCA9IHRhcmdldD8ubGVmdC5raW5kID09IFwibWFnaWNcIiA/IC8qKiBAdHlwZSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5NYWdpY30gKi8gKHRhcmdldC5sZWZ0KSA6IHVuZGVmaW5lZFxuXG4gIHJldHVybiBpbmNsdWRlLm9uY2UgJiYgaW5jbHVkZS5yZXF1aXJlICYmIHRhcmdldD8udHlwZSA9PSBcIi5cIiAmJlxuICAgIGxlZnQ/LnZhbHVlID09IFwiX19ESVJfX1wiICYmIHRhcmdldC5yaWdodC5raW5kID09IFwic3RyaW5nXCJcbn1cblxuLyoqXG4gKiBBY2NlcHRzIG9ubHkgYW4gb3B0aW9uYWwgc2luZ2xlIGBkZWNsYXJlKHN0cmljdF90eXBlcz0xKWAgZGlyZWN0aXZlLlxuICogQHBhcmFtIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLk5vZGVbXX0gbm9kZXMgLSBUb3AtbGV2ZWwgUEhQIG5vZGVzLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZURlY2xhcmVOb2Rlcyhub2RlcywgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBjb25zdCBkZWNsYXJhdGlvbnMgPSBub2Rlcy5maWx0ZXIoKG5vZGUpID0+IG5vZGUua2luZCA9PSBcImRlY2xhcmVcIilcblxuICBpZiAoZGVjbGFyYXRpb25zLmxlbmd0aCA+IDEpIHtcbiAgICB1bnN1cHBvcnRlZFN5bnRheChcInBocFwiLCBcIm11bHRpcGxlIGRlY2xhcmUgZGlyZWN0aXZlc1wiLCBub2RlTG9jYXRpb24oZGVjbGFyYXRpb25zWzFdLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuXG4gIGZvciAoY29uc3QgZGVjbGFyYXRpb25Ob2RlIG9mIGRlY2xhcmF0aW9ucykge1xuICAgIGNvbnN0IGRlY2xhcmF0aW9uID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJwaHAtcGFyc2VyXCIpLkRlY2xhcmV9ICovIChkZWNsYXJhdGlvbk5vZGUpXG4gICAgY29uc3QgZGlyZWN0aXZlID0gZGVjbGFyYXRpb24uZGlyZWN0aXZlc1swXVxuICAgIGNvbnN0IGtleSA9IGRpcmVjdGl2ZT8ua2V5XG4gICAgY29uc3QgdmFsdWUgPSBkaXJlY3RpdmU/LnZhbHVlXG4gICAgY29uc3QgbnVtZXJpY1ZhbHVlID0gdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09IFwib2JqZWN0XCIgJiYgdmFsdWUua2luZCA9PSBcIm51bWJlclwiXG4gICAgICA/IC8qKiBAdHlwZSB7aW1wb3J0KFwicGhwLXBhcnNlclwiKS5OdW1iZXJ9ICovICh2YWx1ZSlcbiAgICAgIDogdW5kZWZpbmVkXG4gICAgY29uc3QgdmFsdWVJc09uZSA9IG51bWVyaWNWYWx1ZT8ubG9jICYmIHNvdXJjZS5zbGljZShudW1lcmljVmFsdWUubG9jLnN0YXJ0Lm9mZnNldCwgbnVtZXJpY1ZhbHVlLmxvYy5lbmQub2Zmc2V0KSA9PSBcIjFcIlxuICAgIGNvbnN0IHZhbGlkID0gZGVjbGFyYXRpb24ubW9kZSA9PSBcIm5vbmVcIiAmJiBkZWNsYXJhdGlvbi5jaGlsZHJlbi5sZW5ndGggPT0gMCAmJiBkZWNsYXJhdGlvbi5kaXJlY3RpdmVzLmxlbmd0aCA9PSAxICYmXG4gICAgICBrZXkua2luZCA9PSBcImlkZW50aWZpZXJcIiAmJiBrZXkubmFtZSA9PSBcInN0cmljdF90eXBlc1wiICYmIHZhbHVlSXNPbmVcblxuICAgIGlmICghdmFsaWQpIHVuc3VwcG9ydGVkU3ludGF4KFwicGhwXCIsIFwiZGVjbGFyZSBvdGhlciB0aGFuIHN0cmljdF90eXBlcz0xXCIsIG5vZGVMb2NhdGlvbihkZWNsYXJhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbn1cblxuLyoqXG4gKiBJbnZva2VzIHBocC1wYXJzZXIgYW5kIG5vcm1hbGl6ZXMgc3ludGF4IGZhaWx1cmVzLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIFNvdXJjZSB0ZXh0LlxuICogQHJldHVybnMge2ltcG9ydChcInBocC1wYXJzZXJcIikuUHJvZ3JhbX0gUEhQIHByb2dyYW0uXG4gKi9cbmZ1bmN0aW9uIHBhcnNlUGhwUHJvZ3JhbShmaWxlbmFtZSwgc291cmNlKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHBhcnNlci5wYXJzZUNvZGUoc291cmNlLCBmaWxlbmFtZSlcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gcGFyc2VGYWlsdXJlKFwicGhwXCIsIGVycm9yLCBwaHBQYXJzZXJGYWlsdXJlTG9jYXRpb24oZXJyb3IsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG59XG5cbi8qKlxuICogTm9ybWFsaXplcyBwaHAtcGFyc2VyJ3Mgb25lLWJhc2VkIGxpbmUgYW5kIHplcm8tYmFzZWQgY29sdW1uIHdoZW4gcHJlc2VudC5cbiAqIEEgbW9kdWxlIHJhbmdlIHJlbWFpbnMgdGhlIGRldGVybWluaXN0aWMgZmFsbGJhY2sgZm9yIG9wYXF1ZSBwYXJzZXIgZXJyb3JzLlxuICogQHBhcmFtIHt1bmtub3dufSBlcnJvciAtIE5hdGl2ZSBwYXJzZXIgZXJyb3IuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBSZXF1ZXN0ZWQgc291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gRmFpbHVyZSByYW5nZS5cbiAqL1xuZnVuY3Rpb24gcGhwUGFyc2VyRmFpbHVyZUxvY2F0aW9uKGVycm9yLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGlmICghZXJyb3IgfHwgdHlwZW9mIGVycm9yICE9IFwib2JqZWN0XCIpIHJldHVybiBtb2R1bGVMb2NhdGlvbihmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBsaW5lID0gUmVmbGVjdC5nZXQoZXJyb3IsIFwibGluZU51bWJlclwiKVxuICBjb25zdCBjb2x1bW4gPSBSZWZsZWN0LmdldChlcnJvciwgXCJjb2x1bW5OdW1iZXJcIilcblxuICBpZiAodHlwZW9mIGxpbmUgIT0gXCJudW1iZXJcIiB8fCAhTnVtYmVyLmlzU2FmZUludGVnZXIobGluZSkgfHwgbGluZSA8IDEgfHxcbiAgICB0eXBlb2YgY29sdW1uICE9IFwibnVtYmVyXCIgfHwgIU51bWJlci5pc1NhZmVJbnRlZ2VyKGNvbHVtbikgfHwgY29sdW1uIDwgMCkge1xuICAgIHJldHVybiBtb2R1bGVMb2NhdGlvbihmaWxlbmFtZSwgc291cmNlKVxuICB9XG4gIGxldCBsaW5lU3RhcnQgPSAwXG5cbiAgZm9yIChsZXQgY3VycmVudCA9IDE7IGN1cnJlbnQgPCBsaW5lOyBjdXJyZW50KyspIHtcbiAgICBjb25zdCBuZXdsaW5lID0gc291cmNlLmluZGV4T2YoXCJcXG5cIiwgbGluZVN0YXJ0KVxuXG4gICAgaWYgKG5ld2xpbmUgPCAwKSByZXR1cm4gbW9kdWxlTG9jYXRpb24oZmlsZW5hbWUsIHNvdXJjZSlcbiAgICBsaW5lU3RhcnQgPSBuZXdsaW5lICsgMVxuICB9XG4gIGNvbnN0IGxpbmVFbmQgPSBzb3VyY2UuaW5kZXhPZihcIlxcblwiLCBsaW5lU3RhcnQpXG4gIGNvbnN0IGJvdW5kZWRFbmQgPSBsaW5lRW5kIDwgMCA/IHNvdXJjZS5sZW5ndGggOiBsaW5lRW5kXG4gIGNvbnN0IG9mZnNldCA9IE1hdGgubWluKGxpbmVTdGFydCArIGNvbHVtbiwgYm91bmRlZEVuZClcblxuICByZXR1cm4gbG9jYXRpb25Gcm9tT2Zmc2V0cyhmaWxlbmFtZSwgc291cmNlLCBvZmZzZXQsIE1hdGgubWluKG9mZnNldCArIDEsIHNvdXJjZS5sZW5ndGgpKVxufVxuIl19