occam-nominal 1.0.367 → 1.0.372

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 (63) hide show
  1. package/lib/element/assertion/contained.js +114 -106
  2. package/lib/element/assertion/defined.js +91 -94
  3. package/lib/element/assertion/type.js +13 -8
  4. package/lib/element/assumption/implicit.js +7 -7
  5. package/lib/element/assumption.js +6 -7
  6. package/lib/element/claim.js +5 -5
  7. package/lib/element/combinator.js +36 -24
  8. package/lib/element/constraint.js +6 -7
  9. package/lib/element/constructor.js +5 -5
  10. package/lib/element/declaration/combinator.js +9 -8
  11. package/lib/element/declaration/metavariable.js +18 -18
  12. package/lib/element/declaration/variable.js +4 -4
  13. package/lib/element/equality.js +62 -70
  14. package/lib/element/fact/premise.js +1 -1
  15. package/lib/element/frame.js +86 -107
  16. package/lib/element/goal.js +108 -114
  17. package/lib/element/judgement.js +51 -57
  18. package/lib/element/metavariable.js +32 -29
  19. package/lib/element/property.js +3 -3
  20. package/lib/element/rule.js +30 -27
  21. package/lib/element/signature.js +15 -17
  22. package/lib/element/substitution/frame.js +52 -52
  23. package/lib/element/substitution/reference.js +55 -50
  24. package/lib/element/substitution/term.js +52 -52
  25. package/lib/element/variable.js +16 -16
  26. package/lib/pass/continuation.js +30 -17
  27. package/lib/pass/continuationZip.js +36 -25
  28. package/lib/pass/zip.js +7 -5
  29. package/lib/process/equate.js +7 -7
  30. package/lib/process/validation.js +12 -18
  31. package/lib/utilities/continuation.js +1 -16
  32. package/package.json +9 -9
  33. package/src/element/assertion/contained.js +126 -124
  34. package/src/element/assertion/defined.js +100 -112
  35. package/src/element/assertion/type.js +15 -7
  36. package/src/element/assumption/implicit.js +6 -7
  37. package/src/element/assumption.js +5 -8
  38. package/src/element/claim.js +4 -4
  39. package/src/element/combinator.js +46 -25
  40. package/src/element/constraint.js +5 -8
  41. package/src/element/constructor.js +4 -4
  42. package/src/element/declaration/combinator.js +10 -9
  43. package/src/element/declaration/metavariable.js +20 -21
  44. package/src/element/declaration/variable.js +4 -4
  45. package/src/element/equality.js +74 -87
  46. package/src/element/fact/premise.js +1 -1
  47. package/src/element/frame.js +100 -131
  48. package/src/element/goal.js +127 -134
  49. package/src/element/judgement.js +60 -67
  50. package/src/element/metavariable.js +38 -30
  51. package/src/element/property.js +2 -2
  52. package/src/element/rule.js +39 -32
  53. package/src/element/signature.js +14 -19
  54. package/src/element/substitution/frame.js +64 -61
  55. package/src/element/substitution/reference.js +67 -55
  56. package/src/element/substitution/term.js +64 -61
  57. package/src/element/variable.js +19 -17
  58. package/src/pass/continuation.js +45 -22
  59. package/src/pass/continuationZip.js +51 -33
  60. package/src/pass/zip.js +7 -4
  61. package/src/process/equate.js +10 -10
  62. package/src/process/validation.js +11 -21
  63. package/src/utilities/continuation.js +0 -23
@@ -94,16 +94,15 @@ const _default = (0, _elements.define)(class Assumption extends _occamlanguages.
94
94
  }
95
95
  return subproofAssertion;
96
96
  }
97
- findValidAssumption(context) {
98
- const assumptionNode = this.getAssumptionNode(), assumption = context.findAssumptionByAssumptionNode(assumptionNode), validAssumption = assumption; ///
99
- return validAssumption;
97
+ findAssumption(context) {
98
+ const assumptionNode = this.getAssumptionNode(), assumption = context.findAssumptionByAssumptionNode(assumptionNode);
99
+ return assumption;
100
100
  }
101
101
  validate(context, continuation) {
102
102
  const assumptionString = this.getString(); ///
103
103
  context.trace(`Validating the '${assumptionString}' assumption...`);
104
- const validAssumption = this.findValidAssumption(context);
105
- if (validAssumption !== null) {
106
- const assumption = validAssumption; ///
104
+ const assumption = this.findAssumption(context);
105
+ if (assumption !== null) {
107
106
  context.debug(`...the '${assumptionString}' assumption is already presenet.`);
108
107
  return continuation(assumption);
109
108
  }
@@ -317,4 +316,4 @@ function subproofAssertionFromStatement(statement, context) {
317
316
  return subproofAssertion;
318
317
  }
319
318
 
320
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2Fzc3VtcHRpb24uanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuaW1wb3J0IHsgRWxlbWVudCwgYnJlYWtQb2ludFV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlQXNzdW1wdGlvbiB9IGZyb20gXCIuLi9wcm9jZXNzL2luc3RhbnRpYXRlXCI7XG5pbXBvcnQgeyByZWNvbmNpbGUsIGluc3RhbnRpYXRlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5pbXBvcnQgeyBhbGwsIGVhY2gsIGV4aXN0cywgZmlsdGVyIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250aW51YXRpb25cIjtcblxuY29uc3QgeyBjbG9uZSB9ID0gYXJyYXlVdGlsaXRpZXMsXG4gICAgICB7IGJyZWFrUG9pbnRGcm9tSlNPTiwgYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04gfSA9IGJyZWFrUG9pbnRVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBBc3N1bXB0aW9uIGV4dGVuZHMgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgcmVmZXJlbmNlLCBzdGF0ZW1lbnQpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy5yZWZlcmVuY2UgPSByZWZlcmVuY2U7XG4gICAgdGhpcy5zdGF0ZW1lbnQgPSBzdGF0ZW1lbnQ7XG4gIH1cblxuICBnZXRSZWZlcmVuY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVmZXJlbmNlO1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlbWVudDtcbiAgfVxuXG4gIGdldEFzc3VtcHRpb25Ob2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICBhc3N1bXB0aW9uTm9kZSA9IG5vZGU7ICAvLy9cblxuICAgIHJldHVybiBhc3N1bXB0aW9uTm9kZTtcbiAgfVxuXG4gIGdldFN0YXRlbWVudE5vZGUoKSB7IHJldHVybiB0aGlzLnN0YXRlbWVudC5nZXRTdGF0ZW1lbnROb2RlKCk7IH1cblxuICBnZXRNZXRhdmFyaWFibGUoKSB7IHJldHVybiB0aGlzLnJlZmVyZW5jZS5nZXRNZXRhdmFyaWFibGUoKTsgfVxuXG4gIGlzRXF1YWxUbyhhc3N1bXB0aW9uKSB7XG4gICAgY29uc3QgYXNzdW1wdGlvbk5vZGUgPSBhc3N1bXB0aW9uLmdldE5vZGUoKSxcbiAgICAgICAgICBhc3N1bXB0aW9uTm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUpLFxuICAgICAgICAgIGVxdWFsVG8gPSBhc3N1bXB0aW9uTm9kZU1hdGNoZXM7ICAvLy9cblxuICAgIHJldHVybiBlcXVhbFRvO1xuICB9XG5cbiAgbWF0Y2hBc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSkge1xuICAgIGNvbnN0IG5vZGUgPSBhc3N1bXB0aW9uTm9kZSwgLy8vXG4gICAgICAgICAgbm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoTm9kZShub2RlKSxcbiAgICAgICAgICBhc3N1bXB0aW9uTm9kZU1hdGNoZXMgPSBub2RlTWF0Y2hlczsgLy8vXG5cbiAgICByZXR1cm4gYXNzdW1wdGlvbk5vZGVNYXRjaGVzO1xuICB9XG5cbiAgZmluZFN1YnByb29mQXNzZXJ0aW9uKGNvbnRleHQpIHtcbiAgICBsZXQgc3VicHJvb2ZBc3NlcnRpb24gPSBudWxsO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHRoaXMuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICAgIHN1YnByb29mQXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0U3VicHJvb2ZBc3NlcnRpb25Ob2RlKCk7XG5cbiAgICBpZiAoc3VicHJvb2ZBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgICBzdWJwcm9vZkFzc2VydGlvbiA9IGNvbnRleHQuZmluZEFzc2VydGlvbkJ5QXNzZXJ0aW9uTm9kZShzdWJwcm9vZkFzc2VydGlvbk5vZGUpO1xuICAgIH1cblxuICAgIHJldHVybiBzdWJwcm9vZkFzc2VydGlvbjtcbiAgfVxuXG4gIGZpbmRWYWxpZEFzc3VtcHRpb24oY29udGV4dCkge1xuICAgIGNvbnN0IGFzc3VtcHRpb25Ob2RlID0gdGhpcy5nZXRBc3N1bXB0aW9uTm9kZSgpLFxuICAgICAgICAgIGFzc3VtcHRpb24gPSBjb250ZXh0LmZpbmRBc3N1bXB0aW9uQnlBc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSksXG4gICAgICAgICAgdmFsaWRBc3N1bXB0aW9uID0gYXNzdW1wdGlvbjsgIC8vL1xuXG4gICAgcmV0dXJuIHZhbGlkQXNzdW1wdGlvbjtcbiAgfVxuXG4gIHZhbGlkYXRlKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IGFzc3VtcHRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHthc3N1bXB0aW9uU3RyaW5nfScgYXNzdW1wdGlvbi4uLmApO1xuXG4gICAgY29uc3QgdmFsaWRBc3N1bXB0aW9uID0gdGhpcy5maW5kVmFsaWRBc3N1bXB0aW9uKGNvbnRleHQpO1xuXG4gICAgaWYgKHZhbGlkQXNzdW1wdGlvbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgYXNzdW1wdGlvbiA9IHZhbGlkQXNzdW1wdGlvbjsgLy8vXG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnRoZSAnJHthc3N1bXB0aW9uU3RyaW5nfScgYXNzdW1wdGlvbiBpcyBhbHJlYWR5IHByZXNlbmV0LmApO1xuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKGFzc3VtcHRpb24pO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbGlkYXRlU3RhdGVtZW50ID0gdGhpcy52YWxpZGF0ZVN0YXRlbWVudC5iaW5kKHRoaXMpLFxuICAgICAgICAgIHZhbGlkYXRlUmVmZXJlbmNlID0gdGhpcy52YWxpZGF0ZVJlZmVyZW5jZS5iaW5kKHRoaXMpO1xuXG4gICAgcmV0dXJuIGFsbChbXG4gICAgICB2YWxpZGF0ZVN0YXRlbWVudCxcbiAgICAgIHZhbGlkYXRlUmVmZXJlbmNlXG4gICAgXSwgY29udGV4dCwgKHZhbGlkYXRlcykgPT4ge1xuICAgICAgaWYgKCF2YWxpZGF0ZXMpIHtcbiAgICAgICAgY29uc3QgYXNzdW1wdGlvbiA9IG51bGw7XG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihhc3N1bXB0aW9uKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdmFsaWRhdGVXaGVuU3RhdGVkID0gdGhpcy52YWxpZGF0ZVdoZW5TdGF0ZWQuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIHZhbGlkYXRlV2hlbkRlcml2ZWQgPSB0aGlzLnZhbGlkYXRlV2hlbkRlcml2ZWQuYmluZCh0aGlzKTtcblxuICAgICAgcmV0dXJuIGV4aXN0cyhbXG4gICAgICAgIHZhbGlkYXRlV2hlblN0YXRlZCxcbiAgICAgICAgdmFsaWRhdGVXaGVuRGVyaXZlZFxuICAgICAgXSwgY29udGV4dCwgKHZhbGlkYXRlcykgPT4ge1xuICAgICAgICBsZXQgYXNzdW1wdGlvbiA9IG51bGw7XG5cbiAgICAgICAgaWYgKHZhbGlkYXRlcykge1xuICAgICAgICAgIGFzc3VtcHRpb24gPSB0aGlzOyAgLy8vXG5cbiAgICAgICAgICBjb250ZXh0LmFkZEFzc3VtcHRpb24oYXNzdW1wdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHthc3N1bXB0aW9uU3RyaW5nfScgYXNzdW1wdGlvbi5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24oYXNzdW1wdGlvbik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhbGlkYXRlUmVmZXJlbmNlKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IGFzc3VtcHRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHthc3N1bXB0aW9uU3RyaW5nfScgYXNzdW1wdGlvbidzIHJlZmVyZW5jZS4uLmApO1xuXG4gICAgdGhpcy5yZWZlcmVuY2UudmFsaWRhdGUoY29udGV4dCwgKHJlZmVyZW5jZSkgPT4ge1xuICAgICAgbGV0IHJlZmVyZW5jZVZhbGlkYXRlcyA9IGZhbHNlO1xuXG4gICAgICBpZiAocmVmZXJlbmNlICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMucmVmZXJlbmNlID0gcmVmZXJlbmNlO1xuXG4gICAgICAgIHJlZmVyZW5jZVZhbGlkYXRlcyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZWZlcmVuY2VWYWxpZGF0ZXMpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHthc3N1bXB0aW9uU3RyaW5nfScgYXNzdW1wdGlvbidzIHJlZmVyZW5jZS5gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihyZWZlcmVuY2VWYWxpZGF0ZXMpO1xuICAgIH0pO1xuICB9XG5cbiAgdmFsaWRhdGVTdGF0ZW1lbnQoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgYXNzdW1wdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uJ3Mgc3RhdGVtZW50Li4uYCk7XG5cbiAgICB0aGlzLnN0YXRlbWVudC52YWxpZGF0ZShjb250ZXh0LCAoc3RhdGVtZW50KSA9PiB7XG4gICAgICBsZXQgc3RhdGVtZW50VmFsaWRhdGVzID0gZmFsc2U7XG5cbiAgICAgIGlmIChzdGF0ZW1lbnQgIT09IG51bGwpIHtcbiAgICAgICAgc3RhdGVtZW50VmFsaWRhdGVzID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRlbWVudFZhbGlkYXRlcykge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uJ3Mgc3RhdGVtZW50LmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHN0YXRlbWVudFZhbGlkYXRlcyk7XG4gICAgfSk7XG4gIH1cblxuICB2YWxpZGF0ZVdoZW5TdGF0ZWQoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3Qgc3RhdGVkID0gY29udGV4dC5pc1N0YXRlZCgpO1xuXG4gICAgaWYgKCFzdGF0ZWQpIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRlc1doZW5TdGF0ZWQgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXNXaGVuU3RhdGVkKTtcbiAgICB9XG5cbiAgICBsZXQgdmFsaWRhdGVzV2hlblN0YXRlZDtcblxuICAgIGNvbnN0IGFzc3VtcHRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHthc3N1bXB0aW9uU3RyaW5nfScgc3RhdGVkIGFzc3VtcHRpb24uLi5gKTtcblxuICAgIHZhbGlkYXRlc1doZW5TdGF0ZWQgPSB0cnVlXG5cbiAgICBpZiAodmFsaWRhdGVzV2hlblN0YXRlZCkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHthc3N1bXB0aW9uU3RyaW5nfScgc3RhdGVkIGFzc3VtcHRpb24uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXNXaGVuU3RhdGVkKTtcbiAgfVxuXG4gIHZhbGlkYXRlV2hlbkRlcml2ZWQoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3Qgc3RhdGVkID0gY29udGV4dC5pc1N0YXRlZCgpO1xuXG4gICAgaWYgKHN0YXRlZCkge1xuICAgICAgY29uc3QgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXNXaGVuRGVyaXZlZCk7XG4gICAgfVxuXG4gICAgbGV0IHZhbGlkYXRlc1doZW5EZXJpdmVkID0gZmFsc2U7XG5cbiAgICBjb25zdCBhc3N1bXB0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7YXNzdW1wdGlvblN0cmluZ30nIGRlcml2ZWQgYXNzdW1wdGlvbi4uLmApO1xuXG4gICAgbGV0IHNjaGVtYXM7XG5cbiAgICBzY2hlbWFzID0gY29udGV4dC5nZXRTY2hlbWFzKCk7XG5cbiAgICBzY2hlbWFzID0gY2xvbmUoc2NoZW1hcyk7IC8vL1xuXG4gICAgcmV0dXJuIGZpbHRlcihzY2hlbWFzLCAoc2NoZW1hLCBjb250aW51YXRpb24pID0+IHtcbiAgICAgIGNvbnN0IGxhYmVsID0gc2NoZW1hLmdldExhYmVsKCk7XG5cbiAgICAgIHJldHVybiB0aGlzLnVuaWZ5TGFiZWwobGFiZWwsIGNvbnRleHQsIGNvbnRpbnVhdGlvbik7XG4gICAgfSwgKCkgPT4ge1xuICAgICAgcmV0dXJuIGVhY2goc2NoZW1hcywgKHNjaGVtYSwgY29udGludWF0aW9uKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnVuaWZ5U2NoZW1hKHNjaGVtYSwgY29udGV4dCwgY29udGludWF0aW9uKTtcbiAgICAgIH0sIChzY2hlbWFzVW5pZml5KSA9PiB7XG4gICAgICAgIGlmIChzY2hlbWFzVW5pZml5KSB7XG4gICAgICAgICAgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbGlkYXRlc1doZW5EZXJpdmVkKSB7XG4gICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHthc3N1bXB0aW9uU3RyaW5nfScgZGVyaXZlZCBhc3N1bXB0aW9uLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXNXaGVuRGVyaXZlZCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHVuaWZ5TGFiZWwobGFiZWwsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IGxhYmVsU3RyaW5nID0gbGFiZWwuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgYXNzdW1wdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtsYWJlbFN0cmluZ30nIGxhYmVsIHdpdGggdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uJ3MgcmVmZXJlbmNlLi4uYCk7XG5cbiAgICByZXR1cm4gcmVjb25jaWxlKChjb250ZXh0KSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5yZWZlcmVuY2UudW5pZnlMYWJlbChsYWJlbCwgY29udGV4dCwgKGxhYmVsVW5pZmllcykgPT4ge1xuICAgICAgICBpZiAobGFiZWxVbmlmaWVzKSB7XG4gICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7bGFiZWxTdHJpbmd9JyBsYWJlbCB3aXRoIHRoZSAnJHthc3N1bXB0aW9uU3RyaW5nfScgYXNzdW1wdGlvbidzIHJlZmVyZW5jZS5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24obGFiZWxVbmlmaWVzKTtcbiAgICAgIH0pO1xuICAgIH0sIGNvbnRleHQpO1xuICB9XG5cbiAgdW5pZnlTY2hlbWEoc2NoZW1hLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBzY2hlbWFTdHJpbmcgPSBzY2hlbWEuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgYXNzdW1wdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c2NoZW1hU3RyaW5nfScgc2NoZW1hIHdpdGggdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uLi4uYCk7XG5cbiAgICBjb25zdCBnZW5lcmFsQ29udGV4dCA9IGNvbnRleHQ7ICAvLy9cblxuICAgIHJldHVybiByZWNvbmNpbGUoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IGxhYmVsID0gc2NoZW1hLmdldExhYmVsKCk7XG5cbiAgICAgIHJldHVybiB0aGlzLnJlZmVyZW5jZS51bmlmeUxhYmVsKGxhYmVsLCBjb250ZXh0LCAobGFiZWxVbmlmaWVzKSA9PiB7XG4gICAgICAgIGlmICghbGFiZWxVbmlmaWVzKSB7XG4gICAgICAgICAgY29uc3Qgc2NoZW1hVW5pZmllcyA9IGZhbHNlO1xuXG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzY2hlbWFVbmlmaWVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNwZWNpZmljQ29udGV4dCA9IGNvbnRleHQsICAvLy9cbiAgICAgICAgICAgICAgc2NoZW1hQ29uZGl0aW9uYWwgPSBzY2hlbWEuaXNDb25kaXRpb25hbCgpLFxuICAgICAgICAgICAgICBzdWJwcm9vZkFzc2VydGlvbiA9IHN1YnByb29mQXNzZXJ0aW9uRnJvbVN0YXRlbWVudCh0aGlzLnN0YXRlbWVudCwgY29udGV4dClcblxuICAgICAgICBpZiAoc2NoZW1hQ29uZGl0aW9uYWwpIHtcbiAgICAgICAgICBpZiAoc3VicHJvb2ZBc3NlcnRpb24gPT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IHNjaGVtYVVuaWZpZXMgPSBmYWxzZTtcblxuICAgICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzY2hlbWFVbmlmaWVzKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHN1YnByb29mQXNzZXJ0aW9uLnVuaWZ5U2NoZW1hKHNjaGVtYSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKHNjaGVtYVVuaWZpZXMpID0+IHtcbiAgICAgICAgICAgIGlmIChzY2hlbWFVbmlmaWVzKSB7XG4gICAgICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3NjaGVtYVN0cmluZ30nIHNjaGVtYSB3aXRoIHRoZSAnJHthc3N1bXB0aW9uU3RyaW5nfScgYXNzdW1wdGlvbi5gKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzY2hlbWFVbmlmaWVzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdWJwcm9vZkFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnN0IHNjaGVtYVVuaWZpZXMgPSBmYWxzZTtcblxuICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oc2NoZW1hVW5pZmllcyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkZWR1Y3Rpb24gPSBzY2hlbWEuZ2V0RGVkdWN0aW9uKCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMudW5pZnlEZWR1Y3Rpb24oZGVkdWN0aW9uLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoZGVkdWN0aW9uVW5pZmllcykgPT4ge1xuICAgICAgICAgIGxldCBzY2hlbWFVbmlmaWVzID0gZmFsc2U7XG5cbiAgICAgICAgICBpZiAoZGVkdWN0aW9uVW5pZmllcykge1xuICAgICAgICAgICAgc2NoZW1hVW5pZmllcyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNjaGVtYVVuaWZpZXMpIHtcbiAgICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3NjaGVtYVN0cmluZ30nIHNjaGVtYSB3aXRoIHRoZSAnJHthc3N1bXB0aW9uU3RyaW5nfScgYXNzdW1wdGlvbi5gKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHNjaGVtYVVuaWZpZXMpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0sIGNvbnRleHQpO1xuICB9XG5cbiAgdW5pZnlEZWR1Y3Rpb24oZGVkdWN0aW9uLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgZGVkdWN0aW9uU3RyaW5nID0gZGVkdWN0aW9uLmdldFN0cmluZygpLFxuICAgICAgICAgIGFzc3VtcHRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke2RlZHVjdGlvblN0cmluZ30nIGRlZHVjdGlvbidzIHN0YXRlbWVudCB3aXRoIHRoZSAnJHthc3N1bXB0aW9uU3RyaW5nfScgYXNzdW1wdGlvbidzICcke2Fzc3VtcHRpb25TdHJpbmd9JyBzdGF0ZW1lbnQuLi5gKTtcblxuICAgIGNvbnN0IHN0YXRlbWVudCA9IGRlZHVjdGlvbi5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgICAgICBkZWR1Y3Rpb25Db250ZXh0ID0gZGVkdWN0aW9uLmdldENvbnRleHQoKTsgLy8vXG5cbiAgICBzcGVjaWZpY0NvbnRleHQgPSBkZWR1Y3Rpb25Db250ZXh0OyAvLy9cblxuICAgIHJldHVybiByZWNvbmNpbGUoKHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgdGhpcy5zdGF0ZW1lbnQudW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoc3RhdGVtZW50VW5pZmllcykgPT4ge1xuICAgICAgICBsZXQgZGVkdWN0aW9uVW5pZmllcyA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVzKSB7XG4gICAgICAgICAgZGVkdWN0aW9uVW5pZmllcyA9IHRydWU7XG5cbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHQuY29tbWl0KGNvbnRleHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRlZHVjdGlvblVuaWZpZXMpIHtcbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtkZWR1Y3Rpb25TdHJpbmd9JyBkZWR1Y3Rpb24ncyBzdGF0ZW1lbnQgd2l0aCB0aGUgJyR7YXNzdW1wdGlvblN0cmluZ30nIGFzc3VtcHRpb24ncyAnJHthc3N1bXB0aW9uU3RyaW5nfScgc3RhdGVtZW50LmApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihkZWR1Y3Rpb25VbmlmaWVzKTtcbiAgICAgIH0pO1xuICAgIH0sIHNwZWNpZmljQ29udGV4dCk7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgIGxldCBicmVha1BvaW50O1xuXG4gICAgYnJlYWtQb2ludCA9IHRoaXMuZ2V0QnJlYWtQb2ludCgpO1xuXG4gICAgY29uc3QgYnJlYWtQb2ludEpTT04gPSBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTihicmVha1BvaW50KTtcblxuICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50SlNPTjsgIC8vL1xuXG4gICAgY29uc3QganNvbiA9IHtcbiAgICAgIHN0cmluZyxcbiAgICAgIGJyZWFrUG9pbnRcbiAgICB9O1xuXG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiQXNzdW1wdGlvblwiO1xuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIGluc3RhbnRpYXRlKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCB7IHN0cmluZyB9ID0ganNvbixcbiAgICAgICAgICAgIGFzc3VtcHRpb25Ob2RlID0gaW5zdGFudGlhdGVBc3N1bXB0aW9uKHN0cmluZywgY29udGV4dCksXG4gICAgICAgICAgICBub2RlID0gYXNzdW1wdGlvbk5vZGUsICAvLy9cbiAgICAgICAgICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50RnJvbUpTT04oanNvbiksXG4gICAgICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgIGFzc3VtcHRpb24gPSBuZXcgQXNzdW1wdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHJlZmVyZW5jZSwgc3RhdGVtZW50KTtcblxuICAgICAgcmV0dXJuIGFzc3VtcHRpb247XG4gICAgfSwgY29udGV4dCk7XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiByZWZlcmVuY2VGcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IGFzc3VtcHRpb25Ob2RlLmdldE1ldGF2YXJpYWJsZU5vZGUoY29udGV4dCksXG4gICAgICAgIHJlZmVyZW5jZSA9IGNvbnRleHQuZmluZFJlZmVyZW5jZUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5mdW5jdGlvbiBzdGF0ZW1lbnRGcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IGFzc3VtcHRpb25Ob2RlLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgc3RhdGVtZW50ID0gY29udGV4dC5maW5kU3RhdGVtZW50QnlTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIHN1YnByb29mQXNzZXJ0aW9uRnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpIHtcbiAgbGV0IHN1YnByb29mQXNzZXJ0aW9uO1xuXG4gIGNvbnN0IHsgU3VicHJvb2ZBc3NlcnRpb24gfSA9IGVsZW1lbnRzO1xuXG4gIHN1YnByb29mQXNzZXJ0aW9uID0gU3VicHJvb2ZBc3NlcnRpb24uZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChzdWJwcm9vZkFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgIHN1YnByb29mQXNzZXJ0aW9uID0gc3VicHJvb2ZBc3NlcnRpb24udmFsaWRhdGUoY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3VicHJvb2ZBc3NlcnRpb247XG5cbn1cblxuIl0sIm5hbWVzIjpbImNsb25lIiwiYXJyYXlVdGlsaXRpZXMiLCJicmVha1BvaW50RnJvbUpTT04iLCJicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiIsImJyZWFrUG9pbnRVdGlsaXRpZXMiLCJkZWZpbmUiLCJBc3N1bXB0aW9uIiwiRWxlbWVudCIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsInJlZmVyZW5jZSIsInN0YXRlbWVudCIsImdldFJlZmVyZW5jZSIsImdldFN0YXRlbWVudCIsImdldEFzc3VtcHRpb25Ob2RlIiwiZ2V0Tm9kZSIsImFzc3VtcHRpb25Ob2RlIiwiZ2V0U3RhdGVtZW50Tm9kZSIsImdldE1ldGF2YXJpYWJsZSIsImlzRXF1YWxUbyIsImFzc3VtcHRpb24iLCJhc3N1bXB0aW9uTm9kZU1hdGNoZXMiLCJtYXRjaEFzc3VtcHRpb25Ob2RlIiwiZXF1YWxUbyIsIm5vZGVNYXRjaGVzIiwibWF0Y2hOb2RlIiwiZmluZFN1YnByb29mQXNzZXJ0aW9uIiwic3VicHJvb2ZBc3NlcnRpb24iLCJzdGF0ZW1lbnROb2RlIiwic3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwiZ2V0U3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwiZmluZEFzc2VydGlvbkJ5QXNzZXJ0aW9uTm9kZSIsImZpbmRWYWxpZEFzc3VtcHRpb24iLCJmaW5kQXNzdW1wdGlvbkJ5QXNzdW1wdGlvbk5vZGUiLCJ2YWxpZEFzc3VtcHRpb24iLCJ2YWxpZGF0ZSIsImNvbnRpbnVhdGlvbiIsImFzc3VtcHRpb25TdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsImRlYnVnIiwidmFsaWRhdGVTdGF0ZW1lbnQiLCJiaW5kIiwidmFsaWRhdGVSZWZlcmVuY2UiLCJhbGwiLCJ2YWxpZGF0ZXMiLCJ2YWxpZGF0ZVdoZW5TdGF0ZWQiLCJ2YWxpZGF0ZVdoZW5EZXJpdmVkIiwiZXhpc3RzIiwiYWRkQXNzdW1wdGlvbiIsInJlZmVyZW5jZVZhbGlkYXRlcyIsInN0YXRlbWVudFZhbGlkYXRlcyIsInN0YXRlZCIsImlzU3RhdGVkIiwidmFsaWRhdGVzV2hlblN0YXRlZCIsInZhbGlkYXRlc1doZW5EZXJpdmVkIiwic2NoZW1hcyIsImdldFNjaGVtYXMiLCJmaWx0ZXIiLCJzY2hlbWEiLCJsYWJlbCIsImdldExhYmVsIiwidW5pZnlMYWJlbCIsImVhY2giLCJ1bmlmeVNjaGVtYSIsInNjaGVtYXNVbmlmaXkiLCJsYWJlbFN0cmluZyIsInJlY29uY2lsZSIsImxhYmVsVW5pZmllcyIsInNjaGVtYVN0cmluZyIsImdlbmVyYWxDb250ZXh0Iiwic2NoZW1hVW5pZmllcyIsInNwZWNpZmljQ29udGV4dCIsInNjaGVtYUNvbmRpdGlvbmFsIiwiaXNDb25kaXRpb25hbCIsInN1YnByb29mQXNzZXJ0aW9uRnJvbVN0YXRlbWVudCIsImRlZHVjdGlvbiIsImdldERlZHVjdGlvbiIsInVuaWZ5RGVkdWN0aW9uIiwiZGVkdWN0aW9uVW5pZmllcyIsImRlZHVjdGlvblN0cmluZyIsImRlZHVjdGlvbkNvbnRleHQiLCJnZXRDb250ZXh0IiwidW5pZnlTdGF0ZW1lbnQiLCJzdGF0ZW1lbnRVbmlmaWVzIiwiY29tbWl0IiwidG9KU09OIiwiZ2V0QnJlYWtQb2ludCIsImJyZWFrUG9pbnRKU09OIiwianNvbiIsIm5hbWUiLCJmcm9tSlNPTiIsImluc3RhbnRpYXRlIiwiaW5zdGFudGlhdGVBc3N1bXB0aW9uIiwicmVmZXJlbmNlRnJvbUFzc3VtcHRpb25Ob2RlIiwic3RhdGVtZW50RnJvbUFzc3VtcHRpb25Ob2RlIiwibWV0YXZhcmlhYmxlTm9kZSIsImdldE1ldGF2YXJpYWJsZU5vZGUiLCJmaW5kUmVmZXJlbmNlQnlNZXRhdmFyaWFibGVOb2RlIiwiZmluZFN0YXRlbWVudEJ5U3RhdGVtZW50Tm9kZSIsIlN1YnByb29mQXNzZXJ0aW9uIiwiZWxlbWVudHMiLCJmcm9tU3RhdGVtZW50Il0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFlQTs7O2VBQUE7OzsyQkFiK0I7Z0NBQ2M7a0VBRXhCOzZCQUdpQjt5QkFDQzs4QkFDRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRTFDLE1BQU0sRUFBRUEsS0FBSyxFQUFFLEdBQUdDLHlCQUFjLEVBQzFCLEVBQUVDLGtCQUFrQixFQUFFQywwQkFBMEIsRUFBRSxHQUFHQyxtQ0FBbUI7TUFFOUUsV0FBZUMsSUFBQUEsZ0JBQU0sRUFBQyxNQUFNQyxtQkFBbUJDLHVCQUFPO0lBQ3BELFlBQVlDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLFVBQVUsRUFBRUMsU0FBUyxFQUFFQyxTQUFTLENBQUU7UUFDbkUsS0FBSyxDQUFDTCxTQUFTQyxRQUFRQyxNQUFNQztRQUU3QixJQUFJLENBQUNDLFNBQVMsR0FBR0E7UUFDakIsSUFBSSxDQUFDQyxTQUFTLEdBQUdBO0lBQ25CO0lBRUFDLGVBQWU7UUFDYixPQUFPLElBQUksQ0FBQ0YsU0FBUztJQUN2QjtJQUVBRyxlQUFlO1FBQ2IsT0FBTyxJQUFJLENB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
319
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2Fzc3VtcHRpb24uanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuaW1wb3J0IHsgRWxlbWVudCwgYnJlYWtQb2ludFV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlQXNzdW1wdGlvbiB9IGZyb20gXCIuLi9wcm9jZXNzL2luc3RhbnRpYXRlXCI7XG5pbXBvcnQgeyByZWNvbmNpbGUsIGluc3RhbnRpYXRlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5pbXBvcnQgeyBhbGwsIGVhY2gsIGV4aXN0cywgZmlsdGVyIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250aW51YXRpb25cIjtcblxuY29uc3QgeyBjbG9uZSB9ID0gYXJyYXlVdGlsaXRpZXMsXG4gICAgICB7IGJyZWFrUG9pbnRGcm9tSlNPTiwgYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04gfSA9IGJyZWFrUG9pbnRVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBBc3N1bXB0aW9uIGV4dGVuZHMgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgcmVmZXJlbmNlLCBzdGF0ZW1lbnQpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy5yZWZlcmVuY2UgPSByZWZlcmVuY2U7XG4gICAgdGhpcy5zdGF0ZW1lbnQgPSBzdGF0ZW1lbnQ7XG4gIH1cblxuICBnZXRSZWZlcmVuY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVmZXJlbmNlO1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlbWVudDtcbiAgfVxuXG4gIGdldEFzc3VtcHRpb25Ob2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICBhc3N1bXB0aW9uTm9kZSA9IG5vZGU7ICAvLy9cblxuICAgIHJldHVybiBhc3N1bXB0aW9uTm9kZTtcbiAgfVxuXG4gIGdldFN0YXRlbWVudE5vZGUoKSB7IHJldHVybiB0aGlzLnN0YXRlbWVudC5nZXRTdGF0ZW1lbnROb2RlKCk7IH1cblxuICBnZXRNZXRhdmFyaWFibGUoKSB7IHJldHVybiB0aGlzLnJlZmVyZW5jZS5nZXRNZXRhdmFyaWFibGUoKTsgfVxuXG4gIGlzRXF1YWxUbyhhc3N1bXB0aW9uKSB7XG4gICAgY29uc3QgYXNzdW1wdGlvbk5vZGUgPSBhc3N1bXB0aW9uLmdldE5vZGUoKSxcbiAgICAgICAgICBhc3N1bXB0aW9uTm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUpLFxuICAgICAgICAgIGVxdWFsVG8gPSBhc3N1bXB0aW9uTm9kZU1hdGNoZXM7ICAvLy9cblxuICAgIHJldHVybiBlcXVhbFRvO1xuICB9XG5cbiAgbWF0Y2hBc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSkge1xuICAgIGNvbnN0IG5vZGUgPSBhc3N1bXB0aW9uTm9kZSwgLy8vXG4gICAgICAgICAgbm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoTm9kZShub2RlKSxcbiAgICAgICAgICBhc3N1bXB0aW9uTm9kZU1hdGNoZXMgPSBub2RlTWF0Y2hlczsgLy8vXG5cbiAgICByZXR1cm4gYXNzdW1wdGlvbk5vZGVNYXRjaGVzO1xuICB9XG5cbiAgZmluZFN1YnByb29mQXNzZXJ0aW9uKGNvbnRleHQpIHtcbiAgICBsZXQgc3VicHJvb2ZBc3NlcnRpb24gPSBudWxsO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHRoaXMuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICAgIHN1YnByb29mQXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0U3VicHJvb2ZBc3NlcnRpb25Ob2RlKCk7XG5cbiAgICBpZiAoc3VicHJvb2ZBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgICBzdWJwcm9vZkFzc2VydGlvbiA9IGNvbnRleHQuZmluZEFzc2VydGlvbkJ5QXNzZXJ0aW9uTm9kZShzdWJwcm9vZkFzc2VydGlvbk5vZGUpO1xuICAgIH1cblxuICAgIHJldHVybiBzdWJwcm9vZkFzc2VydGlvbjtcbiAgfVxuXG4gIGZpbmRBc3N1bXB0aW9uKGNvbnRleHQpIHtcbiAgICBjb25zdCBhc3N1bXB0aW9uTm9kZSA9IHRoaXMuZ2V0QXNzdW1wdGlvbk5vZGUoKSxcbiAgICAgICAgICBhc3N1bXB0aW9uID0gY29udGV4dC5maW5kQXNzdW1wdGlvbkJ5QXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUpO1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb247XG4gIH1cblxuICB2YWxpZGF0ZShjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBhc3N1bXB0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7YXNzdW1wdGlvblN0cmluZ30nIGFzc3VtcHRpb24uLi5gKTtcblxuICAgIGNvbnN0IGFzc3VtcHRpb24gPSB0aGlzLmZpbmRBc3N1bXB0aW9uKGNvbnRleHQpO1xuXG4gICAgaWYgKGFzc3VtcHRpb24gIT09IG51bGwpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnRoZSAnJHthc3N1bXB0aW9uU3RyaW5nfScgYXNzdW1wdGlvbiBpcyBhbHJlYWR5IHByZXNlbmV0LmApO1xuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKGFzc3VtcHRpb24pO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbGlkYXRlU3RhdGVtZW50ID0gdGhpcy52YWxpZGF0ZVN0YXRlbWVudC5iaW5kKHRoaXMpLFxuICAgICAgICAgIHZhbGlkYXRlUmVmZXJlbmNlID0gdGhpcy52YWxpZGF0ZVJlZmVyZW5jZS5iaW5kKHRoaXMpO1xuXG4gICAgcmV0dXJuIGFsbChbXG4gICAgICB2YWxpZGF0ZVN0YXRlbWVudCxcbiAgICAgIHZhbGlkYXRlUmVmZXJlbmNlXG4gICAgXSwgY29udGV4dCwgKHZhbGlkYXRlcykgPT4ge1xuICAgICAgaWYgKCF2YWxpZGF0ZXMpIHtcbiAgICAgICAgY29uc3QgYXNzdW1wdGlvbiA9IG51bGw7XG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihhc3N1bXB0aW9uKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdmFsaWRhdGVXaGVuU3RhdGVkID0gdGhpcy52YWxpZGF0ZVdoZW5TdGF0ZWQuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIHZhbGlkYXRlV2hlbkRlcml2ZWQgPSB0aGlzLnZhbGlkYXRlV2hlbkRlcml2ZWQuYmluZCh0aGlzKTtcblxuICAgICAgcmV0dXJuIGV4aXN0cyhbXG4gICAgICAgIHZhbGlkYXRlV2hlblN0YXRlZCxcbiAgICAgICAgdmFsaWRhdGVXaGVuRGVyaXZlZFxuICAgICAgXSwgY29udGV4dCwgKHZhbGlkYXRlcykgPT4ge1xuICAgICAgICBsZXQgYXNzdW1wdGlvbiA9IG51bGw7XG5cbiAgICAgICAgaWYgKHZhbGlkYXRlcykge1xuICAgICAgICAgIGFzc3VtcHRpb24gPSB0aGlzOyAgLy8vXG5cbiAgICAgICAgICBjb250ZXh0LmFkZEFzc3VtcHRpb24oYXNzdW1wdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHthc3N1bXB0aW9uU3RyaW5nfScgYXNzdW1wdGlvbi5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24oYXNzdW1wdGlvbik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhbGlkYXRlUmVmZXJlbmNlKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IGFzc3VtcHRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHthc3N1bXB0aW9uU3RyaW5nfScgYXNzdW1wdGlvbidzIHJlZmVyZW5jZS4uLmApO1xuXG4gICAgdGhpcy5yZWZlcmVuY2UudmFsaWRhdGUoY29udGV4dCwgKHJlZmVyZW5jZSkgPT4ge1xuICAgICAgbGV0IHJlZmVyZW5jZVZhbGlkYXRlcyA9IGZhbHNlO1xuXG4gICAgICBpZiAocmVmZXJlbmNlICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMucmVmZXJlbmNlID0gcmVmZXJlbmNlO1xuXG4gICAgICAgIHJlZmVyZW5jZVZhbGlkYXRlcyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZWZlcmVuY2VWYWxpZGF0ZXMpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHthc3N1bXB0aW9uU3RyaW5nfScgYXNzdW1wdGlvbidzIHJlZmVyZW5jZS5gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihyZWZlcmVuY2VWYWxpZGF0ZXMpO1xuICAgIH0pO1xuICB9XG5cbiAgdmFsaWRhdGVTdGF0ZW1lbnQoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgYXNzdW1wdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uJ3Mgc3RhdGVtZW50Li4uYCk7XG5cbiAgICB0aGlzLnN0YXRlbWVudC52YWxpZGF0ZShjb250ZXh0LCAoc3RhdGVtZW50KSA9PiB7XG4gICAgICBsZXQgc3RhdGVtZW50VmFsaWRhdGVzID0gZmFsc2U7XG5cbiAgICAgIGlmIChzdGF0ZW1lbnQgIT09IG51bGwpIHtcbiAgICAgICAgc3RhdGVtZW50VmFsaWRhdGVzID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRlbWVudFZhbGlkYXRlcykge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uJ3Mgc3RhdGVtZW50LmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHN0YXRlbWVudFZhbGlkYXRlcyk7XG4gICAgfSk7XG4gIH1cblxuICB2YWxpZGF0ZVdoZW5TdGF0ZWQoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3Qgc3RhdGVkID0gY29udGV4dC5pc1N0YXRlZCgpO1xuXG4gICAgaWYgKCFzdGF0ZWQpIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRlc1doZW5TdGF0ZWQgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXNXaGVuU3RhdGVkKTtcbiAgICB9XG5cbiAgICBsZXQgdmFsaWRhdGVzV2hlblN0YXRlZDtcblxuICAgIGNvbnN0IGFzc3VtcHRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHthc3N1bXB0aW9uU3RyaW5nfScgc3RhdGVkIGFzc3VtcHRpb24uLi5gKTtcblxuICAgIHZhbGlkYXRlc1doZW5TdGF0ZWQgPSB0cnVlXG5cbiAgICBpZiAodmFsaWRhdGVzV2hlblN0YXRlZCkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHthc3N1bXB0aW9uU3RyaW5nfScgc3RhdGVkIGFzc3VtcHRpb24uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXNXaGVuU3RhdGVkKTtcbiAgfVxuXG4gIHZhbGlkYXRlV2hlbkRlcml2ZWQoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3Qgc3RhdGVkID0gY29udGV4dC5pc1N0YXRlZCgpO1xuXG4gICAgaWYgKHN0YXRlZCkge1xuICAgICAgY29uc3QgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXNXaGVuRGVyaXZlZCk7XG4gICAgfVxuXG4gICAgbGV0IHZhbGlkYXRlc1doZW5EZXJpdmVkID0gZmFsc2U7XG5cbiAgICBjb25zdCBhc3N1bXB0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7YXNzdW1wdGlvblN0cmluZ30nIGRlcml2ZWQgYXNzdW1wdGlvbi4uLmApO1xuXG4gICAgbGV0IHNjaGVtYXM7XG5cbiAgICBzY2hlbWFzID0gY29udGV4dC5nZXRTY2hlbWFzKCk7XG5cbiAgICBzY2hlbWFzID0gY2xvbmUoc2NoZW1hcyk7IC8vL1xuXG4gICAgcmV0dXJuIGZpbHRlcihzY2hlbWFzLCAoc2NoZW1hLCBjb250aW51YXRpb24pID0+IHtcbiAgICAgIGNvbnN0IGxhYmVsID0gc2NoZW1hLmdldExhYmVsKCk7XG5cbiAgICAgIHJldHVybiB0aGlzLnVuaWZ5TGFiZWwobGFiZWwsIGNvbnRleHQsIGNvbnRpbnVhdGlvbik7XG4gICAgfSwgKCkgPT4ge1xuICAgICAgcmV0dXJuIGVhY2goc2NoZW1hcywgKHNjaGVtYSwgY29udGludWF0aW9uKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnVuaWZ5U2NoZW1hKHNjaGVtYSwgY29udGV4dCwgY29udGludWF0aW9uKTtcbiAgICAgIH0sIChzY2hlbWFzVW5pZml5KSA9PiB7XG4gICAgICAgIGlmIChzY2hlbWFzVW5pZml5KSB7XG4gICAgICAgICAgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbGlkYXRlc1doZW5EZXJpdmVkKSB7XG4gICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHthc3N1bXB0aW9uU3RyaW5nfScgZGVyaXZlZCBhc3N1bXB0aW9uLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXNXaGVuRGVyaXZlZCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHVuaWZ5TGFiZWwobGFiZWwsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IGxhYmVsU3RyaW5nID0gbGFiZWwuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgYXNzdW1wdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtsYWJlbFN0cmluZ30nIGxhYmVsIHdpdGggdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uJ3MgcmVmZXJlbmNlLi4uYCk7XG5cbiAgICByZXR1cm4gcmVjb25jaWxlKChjb250ZXh0KSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5yZWZlcmVuY2UudW5pZnlMYWJlbChsYWJlbCwgY29udGV4dCwgKGxhYmVsVW5pZmllcykgPT4ge1xuICAgICAgICBpZiAobGFiZWxVbmlmaWVzKSB7XG4gICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7bGFiZWxTdHJpbmd9JyBsYWJlbCB3aXRoIHRoZSAnJHthc3N1bXB0aW9uU3RyaW5nfScgYXNzdW1wdGlvbidzIHJlZmVyZW5jZS5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24obGFiZWxVbmlmaWVzKTtcbiAgICAgIH0pO1xuICAgIH0sIGNvbnRleHQpO1xuICB9XG5cbiAgdW5pZnlTY2hlbWEoc2NoZW1hLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBzY2hlbWFTdHJpbmcgPSBzY2hlbWEuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgYXNzdW1wdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c2NoZW1hU3RyaW5nfScgc2NoZW1hIHdpdGggdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uLi4uYCk7XG5cbiAgICBjb25zdCBnZW5lcmFsQ29udGV4dCA9IGNvbnRleHQ7ICAvLy9cblxuICAgIHJldHVybiByZWNvbmNpbGUoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IGxhYmVsID0gc2NoZW1hLmdldExhYmVsKCk7XG5cbiAgICAgIHJldHVybiB0aGlzLnJlZmVyZW5jZS51bmlmeUxhYmVsKGxhYmVsLCBjb250ZXh0LCAobGFiZWxVbmlmaWVzKSA9PiB7XG4gICAgICAgIGlmICghbGFiZWxVbmlmaWVzKSB7XG4gICAgICAgICAgY29uc3Qgc2NoZW1hVW5pZmllcyA9IGZhbHNlO1xuXG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzY2hlbWFVbmlmaWVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNwZWNpZmljQ29udGV4dCA9IGNvbnRleHQsICAvLy9cbiAgICAgICAgICAgICAgc2NoZW1hQ29uZGl0aW9uYWwgPSBzY2hlbWEuaXNDb25kaXRpb25hbCgpLFxuICAgICAgICAgICAgICBzdWJwcm9vZkFzc2VydGlvbiA9IHN1YnByb29mQXNzZXJ0aW9uRnJvbVN0YXRlbWVudCh0aGlzLnN0YXRlbWVudCwgY29udGV4dClcblxuICAgICAgICBpZiAoc2NoZW1hQ29uZGl0aW9uYWwpIHtcbiAgICAgICAgICBpZiAoc3VicHJvb2ZBc3NlcnRpb24gPT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IHNjaGVtYVVuaWZpZXMgPSBmYWxzZTtcblxuICAgICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzY2hlbWFVbmlmaWVzKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHN1YnByb29mQXNzZXJ0aW9uLnVuaWZ5U2NoZW1hKHNjaGVtYSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKHNjaGVtYVVuaWZpZXMpID0+IHtcbiAgICAgICAgICAgIGlmIChzY2hlbWFVbmlmaWVzKSB7XG4gICAgICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3NjaGVtYVN0cmluZ30nIHNjaGVtYSB3aXRoIHRoZSAnJHthc3N1bXB0aW9uU3RyaW5nfScgYXNzdW1wdGlvbi5gKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzY2hlbWFVbmlmaWVzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdWJwcm9vZkFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnN0IHNjaGVtYVVuaWZpZXMgPSBmYWxzZTtcblxuICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oc2NoZW1hVW5pZmllcyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkZWR1Y3Rpb24gPSBzY2hlbWEuZ2V0RGVkdWN0aW9uKCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMudW5pZnlEZWR1Y3Rpb24oZGVkdWN0aW9uLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoZGVkdWN0aW9uVW5pZmllcykgPT4ge1xuICAgICAgICAgIGxldCBzY2hlbWFVbmlmaWVzID0gZmFsc2U7XG5cbiAgICAgICAgICBpZiAoZGVkdWN0aW9uVW5pZmllcykge1xuICAgICAgICAgICAgc2NoZW1hVW5pZmllcyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNjaGVtYVVuaWZpZXMpIHtcbiAgICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3NjaGVtYVN0cmluZ30nIHNjaGVtYSB3aXRoIHRoZSAnJHthc3N1bXB0aW9uU3RyaW5nfScgYXNzdW1wdGlvbi5gKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHNjaGVtYVVuaWZpZXMpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0sIGNvbnRleHQpO1xuICB9XG5cbiAgdW5pZnlEZWR1Y3Rpb24oZGVkdWN0aW9uLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgZGVkdWN0aW9uU3RyaW5nID0gZGVkdWN0aW9uLmdldFN0cmluZygpLFxuICAgICAgICAgIGFzc3VtcHRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke2RlZHVjdGlvblN0cmluZ30nIGRlZHVjdGlvbidzIHN0YXRlbWVudCB3aXRoIHRoZSAnJHthc3N1bXB0aW9uU3RyaW5nfScgYXNzdW1wdGlvbidzICcke2Fzc3VtcHRpb25TdHJpbmd9JyBzdGF0ZW1lbnQuLi5gKTtcblxuICAgIGNvbnN0IHN0YXRlbWVudCA9IGRlZHVjdGlvbi5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgICAgICBkZWR1Y3Rpb25Db250ZXh0ID0gZGVkdWN0aW9uLmdldENvbnRleHQoKTsgLy8vXG5cbiAgICBzcGVjaWZpY0NvbnRleHQgPSBkZWR1Y3Rpb25Db250ZXh0OyAvLy9cblxuICAgIHJldHVybiByZWNvbmNpbGUoKHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgdGhpcy5zdGF0ZW1lbnQudW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoc3RhdGVtZW50VW5pZmllcykgPT4ge1xuICAgICAgICBsZXQgZGVkdWN0aW9uVW5pZmllcyA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVzKSB7XG4gICAgICAgICAgZGVkdWN0aW9uVW5pZmllcyA9IHRydWU7XG5cbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHQuY29tbWl0KGNvbnRleHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRlZHVjdGlvblVuaWZpZXMpIHtcbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtkZWR1Y3Rpb25TdHJpbmd9JyBkZWR1Y3Rpb24ncyBzdGF0ZW1lbnQgd2l0aCB0aGUgJyR7YXNzdW1wdGlvblN0cmluZ30nIGFzc3VtcHRpb24ncyAnJHthc3N1bXB0aW9uU3RyaW5nfScgc3RhdGVtZW50LmApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihkZWR1Y3Rpb25VbmlmaWVzKTtcbiAgICAgIH0pO1xuICAgIH0sIHNwZWNpZmljQ29udGV4dCk7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgIGxldCBicmVha1BvaW50O1xuXG4gICAgYnJlYWtQb2ludCA9IHRoaXMuZ2V0QnJlYWtQb2ludCgpO1xuXG4gICAgY29uc3QgYnJlYWtQb2ludEpTT04gPSBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTihicmVha1BvaW50KTtcblxuICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50SlNPTjsgIC8vL1xuXG4gICAgY29uc3QganNvbiA9IHtcbiAgICAgIHN0cmluZyxcbiAgICAgIGJyZWFrUG9pbnRcbiAgICB9O1xuXG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiQXNzdW1wdGlvblwiO1xuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIGluc3RhbnRpYXRlKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCB7IHN0cmluZyB9ID0ganNvbixcbiAgICAgICAgICAgIGFzc3VtcHRpb25Ob2RlID0gaW5zdGFudGlhdGVBc3N1bXB0aW9uKHN0cmluZywgY29udGV4dCksXG4gICAgICAgICAgICBub2RlID0gYXNzdW1wdGlvbk5vZGUsICAvLy9cbiAgICAgICAgICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50RnJvbUpTT04oanNvbiksXG4gICAgICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgIGFzc3VtcHRpb24gPSBuZXcgQXNzdW1wdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHJlZmVyZW5jZSwgc3RhdGVtZW50KTtcblxuICAgICAgcmV0dXJuIGFzc3VtcHRpb247XG4gICAgfSwgY29udGV4dCk7XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiByZWZlcmVuY2VGcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IGFzc3VtcHRpb25Ob2RlLmdldE1ldGF2YXJpYWJsZU5vZGUoY29udGV4dCksXG4gICAgICAgIHJlZmVyZW5jZSA9IGNvbnRleHQuZmluZFJlZmVyZW5jZUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5mdW5jdGlvbiBzdGF0ZW1lbnRGcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IGFzc3VtcHRpb25Ob2RlLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgc3RhdGVtZW50ID0gY29udGV4dC5maW5kU3RhdGVtZW50QnlTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIHN1YnByb29mQXNzZXJ0aW9uRnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpIHtcbiAgbGV0IHN1YnByb29mQXNzZXJ0aW9uO1xuXG4gIGNvbnN0IHsgU3VicHJvb2ZBc3NlcnRpb24gfSA9IGVsZW1lbnRzO1xuXG4gIHN1YnByb29mQXNzZXJ0aW9uID0gU3VicHJvb2ZBc3NlcnRpb24uZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChzdWJwcm9vZkFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgIHN1YnByb29mQXNzZXJ0aW9uID0gc3VicHJvb2ZBc3NlcnRpb24udmFsaWRhdGUoY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3VicHJvb2ZBc3NlcnRpb247XG5cbn1cblxuIl0sIm5hbWVzIjpbImNsb25lIiwiYXJyYXlVdGlsaXRpZXMiLCJicmVha1BvaW50RnJvbUpTT04iLCJicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiIsImJyZWFrUG9pbnRVdGlsaXRpZXMiLCJkZWZpbmUiLCJBc3N1bXB0aW9uIiwiRWxlbWVudCIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsInJlZmVyZW5jZSIsInN0YXRlbWVudCIsImdldFJlZmVyZW5jZSIsImdldFN0YXRlbWVudCIsImdldEFzc3VtcHRpb25Ob2RlIiwiZ2V0Tm9kZSIsImFzc3VtcHRpb25Ob2RlIiwiZ2V0U3RhdGVtZW50Tm9kZSIsImdldE1ldGF2YXJpYWJsZSIsImlzRXF1YWxUbyIsImFzc3VtcHRpb24iLCJhc3N1bXB0aW9uTm9kZU1hdGNoZXMiLCJtYXRjaEFzc3VtcHRpb25Ob2RlIiwiZXF1YWxUbyIsIm5vZGVNYXRjaGVzIiwibWF0Y2hOb2RlIiwiZmluZFN1YnByb29mQXNzZXJ0aW9uIiwic3VicHJvb2ZBc3NlcnRpb24iLCJzdGF0ZW1lbnROb2RlIiwic3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwiZ2V0U3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwiZmluZEFzc2VydGlvbkJ5QXNzZXJ0aW9uTm9kZSIsImZpbmRBc3N1bXB0aW9uIiwiZmluZEFzc3VtcHRpb25CeUFzc3VtcHRpb25Ob2RlIiwidmFsaWRhdGUiLCJjb250aW51YXRpb24iLCJhc3N1bXB0aW9uU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJkZWJ1ZyIsInZhbGlkYXRlU3RhdGVtZW50IiwiYmluZCIsInZhbGlkYXRlUmVmZXJlbmNlIiwiYWxsIiwidmFsaWRhdGVzIiwidmFsaWRhdGVXaGVuU3RhdGVkIiwidmFsaWRhdGVXaGVuRGVyaXZlZCIsImV4aXN0cyIsImFkZEFzc3VtcHRpb24iLCJyZWZlcmVuY2VWYWxpZGF0ZXMiLCJzdGF0ZW1lbnRWYWxpZGF0ZXMiLCJzdGF0ZWQiLCJpc1N0YXRlZCIsInZhbGlkYXRlc1doZW5TdGF0ZWQiLCJ2YWxpZGF0ZXNXaGVuRGVyaXZlZCIsInNjaGVtYXMiLCJnZXRTY2hlbWFzIiwiZmlsdGVyIiwic2NoZW1hIiwibGFiZWwiLCJnZXRMYWJlbCIsInVuaWZ5TGFiZWwiLCJlYWNoIiwidW5pZnlTY2hlbWEiLCJzY2hlbWFzVW5pZml5IiwibGFiZWxTdHJpbmciLCJyZWNvbmNpbGUiLCJsYWJlbFVuaWZpZXMiLCJzY2hlbWFTdHJpbmciLCJnZW5lcmFsQ29udGV4dCIsInNjaGVtYVVuaWZpZXMiLCJzcGVjaWZpY0NvbnRleHQiLCJzY2hlbWFDb25kaXRpb25hbCIsImlzQ29uZGl0aW9uYWwiLCJzdWJwcm9vZkFzc2VydGlvbkZyb21TdGF0ZW1lbnQiLCJkZWR1Y3Rpb24iLCJnZXREZWR1Y3Rpb24iLCJ1bmlmeURlZHVjdGlvbiIsImRlZHVjdGlvblVuaWZpZXMiLCJkZWR1Y3Rpb25TdHJpbmciLCJkZWR1Y3Rpb25Db250ZXh0IiwiZ2V0Q29udGV4dCIsInVuaWZ5U3RhdGVtZW50Iiwic3RhdGVtZW50VW5pZmllcyIsImNvbW1pdCIsInRvSlNPTiIsImdldEJyZWFrUG9pbnQiLCJicmVha1BvaW50SlNPTiIsImpzb24iLCJuYW1lIiwiZnJvbUpTT04iLCJpbnN0YW50aWF0ZSIsImluc3RhbnRpYXRlQXNzdW1wdGlvbiIsInJlZmVyZW5jZUZyb21Bc3N1bXB0aW9uTm9kZSIsInN0YXRlbWVudEZyb21Bc3N1bXB0aW9uTm9kZSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJnZXRNZXRhdmFyaWFibGVOb2RlIiwiZmluZFJlZmVyZW5jZUJ5TWV0YXZhcmlhYmxlTm9kZSIsImZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUiLCJTdWJwcm9vZkFzc2VydGlvbiIsImVsZW1lbnRzIiwiZnJvbVN0YXRlbWVudCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBZUE7OztlQUFBOzs7MkJBYitCO2dDQUNjO2tFQUV4Qjs2QkFHaUI7eUJBQ0M7OEJBQ0c7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUUxQyxNQUFNLEVBQUVBLEtBQUssRUFBRSxHQUFHQyx5QkFBYyxFQUMxQixFQUFFQyxrQkFBa0IsRUFBRUMsMEJBQTBCLEVBQUUsR0FBR0MsbUNBQW1CO01BRTlFLFdBQWVDLElBQUFBLGdCQUFNLEVBQUMsTUFBTUMsbUJBQW1CQyx1QkFBTztJQUNwRCxZQUFZQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxVQUFVLEVBQUVDLFNBQVMsRUFBRUMsU0FBUyxDQUFFO1FBQ25FLEtBQUssQ0FBQ0wsU0FBU0MsUUFBUUMsTUFBTUM7UUFFN0IsSUFBSSxDQUFDQyxTQUFTLEdBQUdBO1FBQ2pCLElBQUksQ0FBQ0MsU0FBUyxHQUFHQTtJQUNuQjtJQUVBQyxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUNGLFNBQVM7SUFDdkI7SUFFQUcsZUFBZTtRQUNiLE9BQU8sSUFBSSxDQUFDRixTQUFTO0lBQ3ZCO0lBRUFHLG9CQUFvQjtRQUNsQixNQUFNTixPQUFPLElBQUksQ0FBQ08sT0FBTyxJQUNuQkMsaUJBQWlCUixNQUFPLEdBQUc7UUFFakMsT0FBT1E7SUFDVDtJQUVBQyxtQkFBbUI7UUFBRSxPQUFPLElBQUksQ0FBQ04sU0FBUyxD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
@@ -76,11 +76,11 @@ class Claim extends _occamlanguages.Element {
76
76
  verifySuppositions,
77
77
  verifyDeduction,
78
78
  verifyProof
79
- ], context, (verifies, context)=>{
79
+ ], context, (verifies)=>{
80
80
  if (verifies) {
81
81
  context.debug(`...verified the '${claimString}' claim.`);
82
82
  }
83
- return continuation(verifies);
83
+ return continuation(verifies, context);
84
84
  });
85
85
  }, context);
86
86
  }
@@ -102,13 +102,13 @@ class Claim extends _occamlanguages.Element {
102
102
  if (labelVerifies) {
103
103
  context.debug(`...verified the '${claimString}' claim's '${labelString}' label.`);
104
104
  }
105
- return continuation(labelVerifies);
105
+ return continuation(labelVerifies, context);
106
106
  });
107
107
  }
108
108
  verifyProof(context, continuation) {
109
109
  if (this.proof === null) {
110
110
  const proofVerifies = true; ///
111
- return continuation(proofVerifies);
111
+ return continuation(proofVerifies, context);
112
112
  }
113
113
  const claimString = this.getString(); ///
114
114
  context.trace(`Verifying the '${claimString}' claim's proof...`);
@@ -255,4 +255,4 @@ class Claim extends _occamlanguages.Element {
255
255
  }
256
256
  }
257
257
 
258
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2NsYWltLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcbmltcG9ydCB7IEVsZW1lbnQsIGJyZWFrUG9pbnRVdGlsaXRpZXMsIGNvbnRpbnVhdGlvblV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IHsgZW5jbG9zZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGV4dFwiO1xuaW1wb3J0IHsgY2xhaW1TdHJpbmdGcm9tTGFiZWxzU2lnbmF0dXJlU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9zdHJpbmdcIjtcbmltcG9ydCB7IGxhYmVsc0Zyb21KU09OLFxuICAgICAgICAgZGVkdWN0aW9uRnJvbUpTT04sXG4gICAgICAgICBzaWduYXR1cmVGcm9tSlNPTixcbiAgICAgICAgIGxhYmVsc1RvTGFiZWxzSlNPTixcbiAgICAgICAgIGh5cG90aGVzZXNGcm9tSlNPTixcbiAgICAgICAgIHN1cHBvc2l0aW9uc0Zyb21KU09OLFxuICAgICAgICAgZGVkdWN0aW9uVG9EZWR1Y3Rpb25KU09OLFxuICAgICAgICAgc2lnbmF0dXJlVG9TaWduYXR1cmVKU09OLFxuICAgICAgICAgaHlwb3RoZXNlc1RvSHlwb3RoZXNlc0pTT04sXG4gICAgICAgICBzdXBwb3NpdGlvbnNUb1N1cHBvc2l0aW9uc0pTT04gfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2pzb25cIjtcblxuY29uc3QgeyByZXZlcnNlIH0gPSBhcnJheVV0aWxpdGllcyxcbiAgICAgIHsgYnJlYWtQb2ludEZyb21KU09OLCBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiB9ID0gYnJlYWtQb2ludFV0aWxpdGllcyxcbiAgICAgIHsgYWxsLCBldmVyeSwgZXh0cmFjdCwgZm9yd2FyZHNFdmVyeSwgYmFja3dhcmRzRXZlcnkgfSA9IGNvbnRpbnVhdGlvblV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2xhaW0gZXh0ZW5kcyBFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBsYWJlbHMsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uLCBwcm9vZiwgc2lnbmF0dXJlLCBoeXBvdGhlc2VzKSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICAgIHRoaXMubGFiZWxzID0gbGFiZWxzO1xuICAgIHRoaXMuc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zO1xuICAgIHRoaXMuZGVkdWN0aW9uID0gZGVkdWN0aW9uO1xuICAgIHRoaXMucHJvb2YgPSBwcm9vZjtcbiAgICB0aGlzLnNpZ25hdHVyZSA9IHNpZ25hdHVyZTtcbiAgICB0aGlzLmh5cG90aGVzZXMgPSBoeXBvdGhlc2VzO1xuICB9XG5cbiAgZ2V0TGFiZWxzKCkge1xuICAgIHJldHVybiB0aGlzLmxhYmVscztcbiAgfVxuXG4gIGdldFN1cHBvc2l0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5zdXBwb3NpdGlvbnM7XG4gIH1cblxuICBnZXREZWR1Y3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZGVkdWN0aW9uO1xuICB9XG5cbiAgZ2V0UHJvb2YoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvb2Y7XG4gIH1cblxuICBnZXRTaWduYXR1cmUoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2lnbmF0dXJlO1xuICB9XG5cbiAgZ2V0SHlwb3RoZXNlcygpIHtcbiAgICByZXR1cm4gdGhpcy5oeXBvdGhlc2VzO1xuICB9XG5cbiAgc2V0SHlwb3RoZXNlcyhoeXBvdGhlc2VzKSB7XG4gICAgdGhpcy5oeXBvdGhlc2VzID0gaHlwb3RoZXNlcztcbiAgfVxuXG4gIGdldFN1cHBvc2l0aW9uKGluZGV4KSB7XG4gICAgY29uc3Qgc3VwcG9zaXRpb24gPSB0aGlzLnN1cHBvc2l0aW9uc1tpbmRleF0gfHwgbnVsbDtcblxuICAgIHJldHVybiBzdXBwb3NpdGlvbjtcbiAgfVxuXG4gIGlzU2F0aXNmaWFibGUoKSB7XG4gICAgY29uc3Qgc2F0aXNmaWFibGUgPSBmYWxzZTtcblxuICAgIHJldHVybiBzYXRpc2ZpYWJsZTtcbiAgfVxuXG4gIGlzSHlwb3RoZXRpY2FsKCkge1xuICAgIGNvbnN0IGh5cG90aGVzZXNMZW5ndGggPSB0aGlzLmh5cG90aGVzZXMubGVuZ3RoLFxuICAgICAgICAgIGh5cG90aGV0aWNhbCA9IChoeXBvdGhlc2VzTGVuZ3RoID4gMCk7XG5cbiAgICByZXR1cm4gaHlwb3RoZXRpY2FsO1xuICB9XG5cbiAgbWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyA9IHRoaXMubGFiZWxzLnNvbWUoKGxhYmVsKSA9PiB7XG4gICAgICBjb25zdCBtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyA9IGxhYmVsLm1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICAgICAgaWYgKG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzO1xuICB9XG5cbiAgdmVyaWZ5RXgoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgY2xhaW1TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbS4uLmApO1xuXG4gICAgcmV0dXJuIGVuY2xvc2UoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHZlcmlmeVByb29mID0gdGhpcy52ZXJpZnlQcm9vZi5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgdmVyaWZ5TGFiZWxzID0gdGhpcy52ZXJpZnlMYWJlbHMuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIHZlcmlmeURlZHVjdGlvbiA9IHRoaXMudmVyaWZ5RGVkdWN0aW9uLmJpbmQodGhpcyksXG4gICAgICAgICAgICB2ZXJpZnlTdXBwb3NpdGlvbnMgPSB0aGlzLnZlcmlmeVN1cHBvc2l0aW9ucy5iaW5kKHRoaXMpO1xuXG4gICAgICByZXR1cm4gYWxsKFtcbiAgICAgICAgdmVyaWZ5TGFiZWxzLFxuICAgICAgICB2ZXJpZnlTdXBwb3NpdGlvbnMsXG4gICAgICAgIHZlcmlmeURlZHVjdGlvbixcbiAgICAgICAgdmVyaWZ5UHJvb2ZcbiAgICAgIF0sIGNvbnRleHQsICh2ZXJpZmllcywgY29udGV4dCkgPT4ge1xuICAgICAgICBpZiAodmVyaWZpZXMpIHtcbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbS5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24odmVyaWZpZXMpO1xuICAgICAgfSk7XG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICB2ZXJpZnlMYWJlbHMoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgY2xhaW1TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke2NsYWltU3RyaW5nfScgY2xhaW0ncyBsYWJlbHMuLi5gKTtcblxuICAgIGNvbnN0IHZlcmlmeUxhYmVsID0gdGhpcy52ZXJpZnlMYWJlbC5iaW5kKHRoaXMpO1xuXG4gICAgcmV0dXJuIGV2ZXJ5KHRoaXMubGFiZWxzLCB2ZXJpZnlMYWJlbCwgY29udGV4dCwgKGxhYmVsc1ZlcmlmeSkgPT4ge1xuICAgICAgaWYgKGxhYmVsc1ZlcmlmeSkge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbSdzIGxhYmVscy5gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihsYWJlbHNWZXJpZnksIGNvbnRleHQpO1xuICAgIH0pO1xuICB9XG5cbiAgdmVyaWZ5TGFiZWwobGFiZWwsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IGxhYmVsU3RyaW5nID0gbGFiZWwuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgY2xhaW1TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbSdzICcke2xhYmVsU3RyaW5nfScgbGFiZWwuLi5gKTtcblxuICAgIHJldHVybiBsYWJlbC52ZXJpZnkoKGxhYmVsVmVyaWZpZXMpID0+IHtcbiAgICAgIGlmIChsYWJlbFZlcmlmaWVzKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtjbGFpbVN0cmluZ30nIGNsYWltJ3MgJyR7bGFiZWxTdHJpbmd9JyBsYWJlbC5gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihsYWJlbFZlcmlmaWVzKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZlcmlmeVByb29mKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGlmICh0aGlzLnByb29mID09PSBudWxsKSB7XG4gICAgICBjb25zdCBwcm9vZlZlcmlmaWVzID0gdHJ1ZTsgLy8vXG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24ocHJvb2ZWZXJpZmllcyk7XG4gICAgfVxuXG4gICAgY29uc3QgY2xhaW1TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke2NsYWltU3RyaW5nfScgY2xhaW0ncyBwcm9vZi4uLmApO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50ID0gdGhpcy5kZWR1Y3Rpb24uZ2V0U3RhdGVtZW50KCk7XG5cbiAgICByZXR1cm4gdGhpcy5wcm9vZi52ZXJpZnkoc3RhdGVtZW50LCBjb250ZXh0LCAocHJvb2ZWZXJpZmllcykgPT4ge1xuICAgICAgaWYgKHByb29mVmVyaWZpZXMpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke2NsYWltU3RyaW5nfScgY2xhaW0ncyBwcm9vZi5gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihwcm9vZlZlcmlmaWVzLCBjb250ZXh0KTtcbiAgICB9KTtcbiAgfVxuXG4gIHZlcmlmeURlZHVjdGlvbihjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBjbGFpbVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksIC8vL1xuICAgICAgICAgIGRlZHVjdGlvblN0cmluZyA9IHRoaXMuZGVkdWN0aW9uLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtjbGFpbVN0cmluZ30nIGNsYWltJ3MgJyR7ZGVkdWN0aW9uU3RyaW5nfScgZGVkdWN0aW9uLi4uYCk7XG5cbiAgICByZXR1cm4gdGhpcy5kZWR1Y3Rpb24udmVyaWZ5KGNvbnRleHQsIChkZWR1Y3Rpb25WZXJpZmllcykgPT4ge1xuICAgICAgaWYgKGRlZHVjdGlvblZlcmlmaWVzKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtjbGFpbVN0cmluZ30nIGNsYWltJ3MgJyR7ZGVkdWN0aW9uU3RyaW5nfScgZGVkdWN0aW9uLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKGRlZHVjdGlvblZlcmlmaWVzLCBjb250ZXh0KTtcbiAgICB9KTtcbiAgfVxuXG4gIHZlcmlmeVN1cHBvc2l0aW9uKHN1cHBvc2l0aW9uLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBjbGFpbVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksIC8vL1xuICAgICAgICAgIHN1cHBvc2l0aW9uU3RyaW5nID0gc3VwcG9zaXRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke2NsYWltU3RyaW5nfScgY2xhaW0ncyAnJHtzdXBwb3NpdGlvblN0cmluZ30nIHN1cHBvc2l0aW9uLi4uYCk7XG5cbiAgICByZXR1cm4gc3VwcG9zaXRpb24udmVyaWZ5KGNvbnRleHQsIChzdXBwb3NpdGlvblZlcmlmaWVzKSA9PiB7XG4gICAgICBpZiAoc3VwcG9zaXRpb25WZXJpZmllcykge1xuICAgICAgICBjb25zdCBmYWN0T3JTdWJwcm9vZiA9IHN1cHBvc2l0aW9uOyAgLy8vL1xuXG4gICAgICAgIGNvbnRleHQuYXNzaWduQXNzaWdubWVudHMoKTtcblxuICAgICAgICBjb250ZXh0LmFkZEZhY3RPclN1YnByb29mKGZhY3RPclN1YnByb29mKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN1cHBvc2l0aW9uVmVyaWZpZXMpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke2NsYWltU3RyaW5nfScgY2xhaW0ncyAnJHtzdXBwb3NpdGlvblN0cmluZ30nIHN1cHBvc2l0aW9uLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHN1cHBvc2l0aW9uVmVyaWZpZXMsIGNvbnRleHQpO1xuICAgIH0pO1xuICB9XG5cbiAgdmVyaWZ5U3VwcG9zaXRpb25zKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IHN1cHBvc2l0aW9uc0xlbmd0aCA9IHRoaXMuc3VwcG9zaXRpb25zLmxlbmd0aDtcblxuICAgIGlmIChzdXBwb3NpdGlvbnNMZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnN0IHN1cHBvc2l0aW9uc1ZlcmlmeSA9IHRydWU7ICAvLy9cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdXBwb3NpdGlvbnNWZXJpZnksIGNvbnRleHQpO1xuICAgIH1cblxuICAgIGNvbnN0IGNsYWltU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtjbGFpbVN0cmluZ30nIGNsYWltJ3Mgc3VwcG9zaXRpb25zLi4uYCk7XG5cbiAgICBjb25zdCB2ZXJpZnlTdXBwb3NpdGlvbiA9IHRoaXMudmVyaWZ5U3VwcG9zaXRpb24uYmluZCh0aGlzKTtcblxuICAgIHJldHVybiBmb3J3YXJkc0V2ZXJ5KHRoaXMuc3VwcG9zaXRpb25zLCB2ZXJpZnlTdXBwb3NpdGlvbiwgY29udGV4dCwgKHN1cHBvc2l0aW9uc1ZlcmlmeSkgPT4ge1xuICAgICAgaWYgKHN1cHBvc2l0aW9uc1ZlcmlmeSkge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbSdzIHN1cHBvc2l0aW9ucy5gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdXBwb3NpdGlvbnNWZXJpZnksIGNvbnRleHQpO1xuICAgIH0pO1xuICB9XG5cbiAgZGlzY2hhcmdlSHlwb3RoZXNpcyhoeXBvdGhlc2lzLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBjbGFpbVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksIC8vL1xuICAgICAgICAgIGh5cG90aGVzaXNTdHJpbmcgPSBoeXBvdGhlc2lzLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgRGlzY2hhcmRpbmcgdGhlICcke2NsYWltU3RyaW5nfScgY2xhaW0ncyAnJHtoeXBvdGhlc2lzU3RyaW5nfScgaHlwb3RoZXNpcy4uLmApO1xuXG4gICAgaHlwb3RoZXNpcy5kaXNjaGFyZ2UoY29udGV4dCwgKGh5cG90aGVzaXNEaXNjaGFyZ2VzKSA9PiB7XG4gICAgICBpZiAoaHlwb3RoZXNpc0Rpc2NoYXJnZXMpIHtcbiAgICAgICAgY29udGV4dC50cmFjZShgLi4uZGlzY2hhcmdlcyB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbSdzICcke2h5cG90aGVzaXNTdHJpbmd9JyBoeXBvdGhlc2lzLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKGh5cG90aGVzaXNEaXNjaGFyZ2VzKTtcbiAgICB9KTtcbiAgfVxuXG4gIGRpc2NoYXJnZUh5cG90aGVzZXMoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgaHlwb3RoZXNlcyA9IHRoaXMuZ2V0SHlwb3RoZXNlcygpLFxuICAgICAgICAgIGRpc2NoYXJnZUh5cG90aGVzaXMgPSB0aGlzLmRpc2NoYXJnZUh5cG90aGVzaXMuYmluZCh0aGlzKTtcblxuICAgIHJldHVybiBldmVyeShoeXBvdGhlc2VzLCBkaXNjaGFyZ2VIeXBvdGhlc2lzLCBjb250ZXh0LCBjb250aW51YXRpb24pO1xuICB9XG5cbiAgdW5pZnlTdGVwV2l0aERlZHVjdGlvbihzdGVwLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBydWxlU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzdGVwU3RyaW5nID0gc3RlcC5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBkZWR1Y3Rpb25TdHJpbmcgPSB0aGlzLmRlZHVjdGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCB3aXRoIHRoZSAnJHtydWxlU3RyaW5nfScgcnVsZSdzICcke2RlZHVjdGlvblN0cmluZ30nIGRlZHVjdGlvbi4uLmApO1xuXG4gICAgcmV0dXJuIHRoaXMuZGVkdWN0aW9uLnVuaWZ5U3RlcChzdGVwLCBjb250ZXh0LCAoc3RlcFVuaWZpZXMpID0+IHtcbiAgICAgIGxldCBzdGVwVW5pZmllc1dpdGhEZWR1Y3Rpb24gPSBmYWxzZTtcblxuICAgICAgaWYgKHN0ZXBVbmlmaWVzKSB7XG4gICAgICAgIHN0ZXBVbmlmaWVzV2l0aERlZHVjdGlvbiA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGVwVW5pZmllc1dpdGhEZWR1Y3Rpb24pIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgd2l0aCB0aGUgJyR7cnVsZVN0cmluZ30nIHJ1bGUncyAnJHtkZWR1Y3Rpb25TdHJpbmd9JyBkZWR1Y3Rpb24uYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oc3RlcFVuaWZpZXNXaXRoRGVkdWN0aW9uKTtcbiAgICB9KTtcbiAgfVxuXG4gIHVuaWZ5U3RlcEFuZEZhY3RPclN1YnByb29mcyhzdGVwLCBmYWN0b3JTdWJwcm9vZnMsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIHJldHVybiB0aGlzLnVuaWZ5U3RlcFdpdGhEZWR1Y3Rpb24oc3RlcCwgY29udGV4dCwgKHN0YXRlbWVudFVuaWZpZXNXaXRoRGVkdWN0aW9uKSA9PiB7XG4gICAgICBpZiAoIXN0YXRlbWVudFVuaWZpZXNXaXRoRGVkdWN0aW9uKSB7XG4gICAgICAgIGNvbnN0IHN0ZXBBbmRGYWN0T3JTdWJwcm9vZnNVbmlmeSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24oc3RlcEFuZEZhY3RPclN1YnByb29mc1VuaWZ5KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuZGlzY2hhcmdlSHlwb3RoZXNlcyhjb250ZXh0LCAoaHlwb3RoZXNlc0Rpc2NoYXJnZSkgPT4ge1xuICAgICAgICBpZiAoIWh5cG90aGVzZXNEaXNjaGFyZ2UpIHtcbiAgICAgICAgICBjb25zdCBzdGVwQW5kRmFjdE9yU3VicHJvb2ZzVW5pZnkgPSBmYWxzZTtcblxuICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oc3RlcEFuZEZhY3RPclN1YnByb29mc1VuaWZ5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnVuaWZ5RmFjdE9yU3VicHJvb2ZzV2l0aFN1cHBvc2l0aW9ucyhmYWN0b3JTdWJwcm9vZnMsIGNvbnRleHQsIChmYWN0b3JTdWJwcm9vZnNVbmlmaWVzV2l0aFN1cHBvc2l0aW9ucykgPT4ge1xuICAgICAgICAgIGxldCBzdGVwQW5kRmFjdE9yU3VicHJvb2ZzVW5pZnkgPSBmYWxzZTtcblxuICAgICAgICAgIGlmIChmYWN0b3JTdWJwcm9vZnNVbmlmaWVzV2l0aFN1cHBvc2l0aW9ucykge1xuICAgICAgICAgICAgY29uc3QgZGVyaXZlZFN1YnN0aXR1dGlvbnNSZXNvbHZlZCA9IGNvbnRleHQuYXJlRGVyaXZlZFN1YnN0aXR1dGlvbnNSZXNvbHZlZCgpO1xuXG4gICAgICAgICAgICBpZiAoZGVyaXZlZFN1YnN0aXR1dGlvbnNSZXNvbHZlZCkge1xuICAgICAgICAgICAgICBzdGVwQW5kRmFjdE9yU3VicHJvb2ZzVW5pZnkgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oc3RlcEFuZEZhY3RPclN1YnByb29mc1VuaWZ5KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHVuaWZ5RmFjdE9yU3VicHJvb2ZzV2l0aFN1cHBvc2l0aW9uKGZhY3RvclN1YnByb29mcywgc3VwcG9zaXRpb24sIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIHJldHVybiBleHRyYWN0KGZhY3RvclN1YnByb29mcywgKGZhY3RPclN1YnByb29mLCBjb250aW51YXRpb24pID0+IHtcbiAgICAgIHJldHVybiBzdXBwb3NpdGlvbi51bmlmeUZhY3RPclN1YnByb29mKGZhY3RPclN1YnByb29mLCBjb250ZXh0LCBjb250aW51YXRpb24pO1xuICAgIH0sIChmYWN0T3JTdWJwcm9vZiA9IG51bGwpID0+IHtcbiAgICAgIGlmIChmYWN0T3JTdWJwcm9vZiAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBmYWN0b3JTdWJwcm9vZnNVbmlmaWVzV2l0aFN1cHBvc2l0aW9uID0gdHJ1ZTtcblxuICAgICAgICByZXR1cm4gY29udGV4dC5yZXNvbHZlRGVyaXZlZFN1YnN0aXR1dGlvbnMoKCkgPT4ge1xuICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oZmFjdG9yU3VicHJvb2ZzVW5pZmllc1dpdGhTdXBwb3NpdGlvbik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3VwcG9zaXRpb24udW5pZnlJbmRlcGVuZGVudGx5KGNvbnRleHQsIGNvbnRpbnVhdGlvbik7XG4gICAgfSk7XG4gIH1cblxuICB1bmlmeUZhY3RPclN1YnByb29mc1dpdGhTdXBwb3NpdGlvbnMoZmFjdG9yU3VicHJvb2ZzLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBmYWN0b3JTdWJwcm9vZnMgPSByZXZlcnNlKGZhY3RvclN1YnByb29mcyk7IC8vL1xuXG4gICAgcmV0dXJuIGJhY2t3YXJkc0V2ZXJ5KHRoaXMuc3VwcG9zaXRpb25zLCAoc3VwcG9zaXRpb24sIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMudW5pZnlGYWN0T3JTdWJwcm9vZnNXaXRoU3VwcG9zaXRpb24oZmFjdG9yU3VicHJvb2ZzLCBzdXBwb3NpdGlvbiwgY29udGV4dCwgY29udGludWF0aW9uKTtcbiAgICB9LCBjb250aW51YXRpb24pO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIGNvbnN0IGxhYmVsc0pTT04gPSBsYWJlbHNUb0xhYmVsc0pTT04odGhpcy5sYWJlbHMpLFxuICAgICAgICAgIGRlZHVjdGlvbkpTT04gPSBkZWR1Y3Rpb25Ub0RlZHVjdGlvbkpTT04odGhpcy5kZWR1Y3Rpb24pLFxuICAgICAgICAgIHN1cHBvc2l0aW9uc0pTT04gPSBzdXBwb3NpdGlvbnNUb1N1cHBvc2l0aW9uc0pTT04odGhpcy5zdXBwb3NpdGlvbnMpLFxuICAgICAgICAgIHNpZ25hdHVyZUpTT04gPSBzaWduYXR1cmVUb1NpZ25hdHVyZUpTT04odGhpcy5zaWduYXR1cmUpLFxuICAgICAgICAgIGh5cG90aGVzZXNKU09OID0gaHlwb3RoZXNlc1RvSHlwb3RoZXNlc0pTT04odGhpcy5oeXBvdGhlc2VzKSxcbiAgICAgICAgICBzdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgbGV0IGJyZWFrUG9pbnQ7XG5cbiAgICBicmVha1BvaW50ID0gdGhpcy5nZXRCcmVha1BvaW50KCk7XG5cbiAgICBjb25zdCBicmVha1BvaW50SlNPTiA9IGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OKGJyZWFrUG9pbnQpO1xuXG4gICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRKU09OOyAgLy8vXG5cbiAgICBjb25zdCBsYWJlbHMgPSBsYWJlbHNKU09OLCAgLy8vXG4gICAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uSlNPTiwgIC8vL1xuICAgICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0pTT04sICAvLy9cbiAgICAgICAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVKU09OLCAgLy8vXG4gICAgICAgICAgaHlwb3RoZXNlcyA9IGh5cG90aGVzZXNKU09OLCAgLy8vXG4gICAgICAgICAganNvbiA9IHtcbiAgICAgICAgICAgIHN0cmluZyxcbiAgICAgICAgICAgIGJyZWFrUG9pbnQsXG4gICAgICAgICAgICBsYWJlbHMsXG4gICAgICAgICAgICBkZWR1Y3Rpb24sXG4gICAgICAgICAgICBzdXBwb3NpdGlvbnMsXG4gICAgICAgICAgICBzaWduYXR1cmUsXG4gICAgICAgICAgICBoeXBvdGhlc2VzXG4gICAgICAgICAgfTtcblxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgc3RhdGljIGZyb21KU09OKENsYXNzLCBqc29uLCBjb250ZXh0KSB7XG4gICAgY29uc3QgbGFiZWxzID0gbGFiZWxzRnJvbUpTT04oanNvbiwgY29udGV4dCksXG4gICAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbUpTT04oanNvbiwgY29udGV4dCksXG4gICAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbUpTT04oanNvbiwgY29udGV4dCksXG4gICAgICAgICAgc2lnbmF0dXJlID0gc2lnbmF0dXJlRnJvbUpTT04oanNvbiwgY29udGV4dCksXG4gICAgICAgICAgaHlwb3RoZXNlcyA9IGh5cG90aGVzZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KSxcbiAgICAgICAgICBjbGFpbVN0cmluZyA9IGNsYWltU3RyaW5nRnJvbUxhYmVsc1NpZ25hdHVyZVN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbihsYWJlbHMsIHNpZ25hdHVyZSwgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICAgIHN0cmluZyA9IGNsYWltU3RyaW5nLCAvLy9cbiAgICAgICAgICBub2RlID0gbnVsbCxcbiAgICAgICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEZyb21KU09OKGpzb24pLFxuICAgICAgICAgIHByb29mID0gbnVsbCxcbiAgICAgICAgICBjbGFpbSA9IG5ldyBDbGFzcyhjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24sIHByb29mLCBzaWduYXR1cmUsIGh5cG90aGVzZXMpO1xuXG4gICAgcmV0dXJuIGNsYWltO1xuICB9XG59XG4iXSwibmFtZXMiOlsiQ2xhaW0iLCJyZXZlcnNlIiwiYXJyYXlVdGlsaXRpZXMiLCJicmVha1BvaW50RnJvbUpTT04iLCJicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiIsImJyZWFrUG9pbnRVdGlsaXRpZXMiLCJhbGwiLCJldmVyeSIsImV4dHJhY3QiLCJmb3J3YXJkc0V2ZXJ5IiwiYmFja3dhcmRzRXZlcnkiLCJjb250aW51YXRpb25VdGlsaXRpZXMiLCJFbGVtZW50IiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50IiwibGFiZWxzIiwic3VwcG9zaXRpb25zIiwiZGVkdWN0aW9uIiwicHJvb2YiLCJzaWduYXR1cmUiLCJoeXBvdGhlc2VzIiwiZ2V0TGFiZWxzIiwiZ2V0U3VwcG9zaXRpb25zIiwiZ2V0RGVkdWN0aW9uIiwiZ2V0UHJvb2YiLCJnZXRTaWduYXR1cmUiLCJnZXRIeXBvdGhlc2VzIiwic2V0SHlwb3RoZXNlcyIsImdldFN1cHBvc2l0aW9uIiwiaW5kZXgiLCJzdXBwb3NpdGlvbiIsImlzU2F0aXNmaWFibGUiLCJzYXRpc2ZpYWJsZSIsImlzSHlwb3RoZXRpY2FsIiwiaHlwb3RoZXNlc0xlbmd0aCIsImxlbmd0aCIsImh5cG90aGV0aWNhbCIsIm1hdGNoTWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyIsInNvbWUiLCJsYWJlbCIsInZlcmlmeUV4IiwiY29udGludWF0aW9uIiwiY2xhaW1TdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsImVuY2xvc2UiLCJ2ZXJpZnlQcm9vZiIsImJpbmQiLCJ2ZXJpZnlMYWJlbHMiLCJ2ZXJpZnlEZWR1Y3Rpb24iLCJ2ZXJpZnlTdXBwb3NpdGlvbnMiLCJ2ZXJpZmllcyIsImRlYnVnIiwidmVyaWZ5TGFiZWwiLCJsYWJlbHNWZXJpZnkiLCJsYWJlbFN0cmluZyIsInZlcmlmeSIsImxhYmVsVmVyaWZpZXMiLCJwcm9vZlZlcmlmaWVzIiwic3RhdGVtZW50IiwiZ2V0U3RhdGVtZW50IiwiZGVkdWN0aW9uU3RyaW5nIiwiZGVkdWN0aW9uVmVyaWZpZXMiLCJ2ZXJpZnlTdXBwb3NpdGlvbiIsInN1cHBvc2l0aW9uU3RyaW5nIiwic3VwcG9zaXRpb25WZXJpZmllcyIsImZhY3RPclN1YnByb29mIiwiYXNzaWduQXNzaWdubWVudHMiLCJhZGRGYWN0T3JTdWJwcm9vZiIsInN1cHBvc2l0aW9uc0xlbmd0aCIsInN1cHBvc2l0aW9uc1ZlcmlmeSIsImRpc2NoYXJnZUh5cG90aGVzaXMiLCJoeXBvdGhlc2lzIiwiaHlwb3RoZXNpc1N0cmluZyIsImRpc2NoYXJnZSIsImh5cG90aGVzaXNEaXNjaGFyZ2VzIiwiZGlzY2hhcmdlSHlwb3RoZXNlcyIsInVuaWZ5U3RlcFdpdGhEZWR1Y3Rpb24iLCJzdGVwIiwicnVsZVN0cmluZyIsInN0ZXBTdHJpbmciLCJ1bmlmeVN0ZXAiLCJzdGVwVW5pZmllcyIsInN0ZXBVbmlmaWVzV2l0aERlZHVjdGlvbiIsInVuaWZ5U3RlcEFuZEZhY3RPclN1YnByb29mcyIsImZhY3RvclN1YnByb29mcyIsInN0YXRlbWVudFVuaWZpZXNXaXRoRGVkdWN0aW9uIiwic3RlcEFuZEZhY3RPclN1YnByb29mc1VuaWZ5IiwiaHlwb3RoZXNlc0Rpc2NoYXJnZSIsInVuaWZ5RmFjdE9yU3VicHJvb2ZzV2l0aFN1cHBvc2l0aW9ucyIsImZhY3RvclN1YnByb29mc1VuaWZpZXNXaXRoU3VwcG9zaXRpb25zIiwiZGVyaXZlZFN1YnN0aXR1dGlvbnNSZXNvbHZlZCIsImFyZURlcml2ZWRTdWJzdGl0dXRpb25zUmVzb2x2ZWQiLCJ1bmlmeUZhY3RPclN1YnByb29mc1dpdGhTdXBwb3NpdGlvbiIsInVuaWZ5RmFjdE9yU3VicHJvb2YiLCJmYWN0b3JTdWJwcm9vZnNVbmlmaWVzV2l0aFN1cHBvc2l0aW9uIiwicmVzb2x2ZURlcml2ZWRTdWJzdGl0dXRpb25zIiwidW5pZnlJbmRlcGVuZGVudGx5IiwidG9KU09OIiwibGFiZWxzSlNPTiIsImxhYmVsc1RvTGFiZWxzSlNPTiIsImRlZHVjdGlvbkpTT04iLCJkZWR1Y3Rpb25Ub0RlZHVjdGlvbkpTT04iLCJzdXBwb3NpdGlvbnNKU09OIiwic3VwcG9zaXRpb25zVG9TdXBwb3NpdGlvbnNKU09OIiwic2lnbmF0dXJlSlNPTiIsInNpZ25hdHVyZVRvU2lnbmF0dXJlSlNPTiIsImh5cG90aGVzZXNKU09OIiwiaHlwb3RoZXNlc1RvSHlwb3RoZXNlc0pTT04iLCJnZXRCcmVha1BvaW50IiwiYnJlYWtQb2ludEpTT04iLCJqc29uIiwiZnJvbUpTT04iLCJDbGFzcyIsImxhYmVsc0Zyb21KU09OIiwiZGVkdWN0aW9uRnJvbUpTT04iLCJzdXBwb3NpdGlvbnNGcm9tSlNPTiIsInNpZ25hdHVyZUZyb21KU09OIiwiaHlwb3RoZXNlc0Zyb21KU09OIiwiY2xhaW1TdHJpbmdGcm9tTGFiZWxzU2lnbmF0dXJlU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uIiwiY2xhaW0iXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQXNCQTs7O2VBQXFCQTs7OzJCQXBCVTtnQ0FDcUM7eUJBRTVDO3dCQUMrQztzQkFVeEI7QUFFL0MsTUFBTSxFQUFFQyxPQUFPLEVBQUUsR0FBR0MseUJBQWMsRUFDNUIsRUFBRUMsa0JBQWtCLEVBQUVDLDBCQUEwQixFQUFFLEdBQUdDLG1DQUFtQixFQUN4RSxFQUFFQyxHQUFHLEVBQUVDLEtBQUssRUFBRUMsT0FBTyxFQUFFQyxhQUFhLEVBQUVDLGNBQWMsRUFBRSxHQUFHQyxxQ0FBcUI7QUFFckUsTUFBTVgsY0FBY1ksdUJBQU87SUFDeEMsWUFBWUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsVUFBVSxFQUFFQyxNQUFNLEVBQUVDLFlBQVksRUFBRUMsU0FBUyxFQUFFQyxLQUFLLEVBQUVDLFNBQVMsRUFBRUMsVUFBVSxDQUFFO1FBQzVHLEtBQUssQ0FBQ1QsU0FBU0MsUUFBUUMsTUFBTUM7UUFFN0IsSUFBSSxDQUFDQyxNQUFNLEdBQUdBO1FBQ2QsSUFBSSxDQUFDQyxZQUFZLEdBQUdBO1FBQ3BCLElBQUksQ0FBQ0MsU0FBUyxHQUFHQTtRQUNqQixJQUFJLENBQUNDLEtBQUssR0FBR0E7UUFDYixJQUFJLENBQUNDLFNBQVMsR0FBR0E7UUFDakIsSUFBSSxDQUFDQyxVQUFVLEdBQUdBO0lBQ3BCO0lBRUFDLFlBQVk7UUFDVixPQUFPLElBQUksQ0FBQ04sTUFBTTtJQUNwQjtJQUVBTyxrQkFBa0I7UUFDaEIsT0FBTyxJQUFJLENBQUNOLFlBQVk7SUFDMUI7SUFFQU8sZUFBZTtRQUNiLE9BQU8sSUFBSSxDQUFDTixTQUFTO0lBQ3ZCO0lBRUFPLFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQ04sS0FBSztJQUNuQjtJQUVBTyxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUNOLFNBQVM7SUFDdkI7SUFFQU8sZ0JBQWdCO1FBQ2Qs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
258
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2NsYWltLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcbmltcG9ydCB7IEVsZW1lbnQsIGJyZWFrUG9pbnRVdGlsaXRpZXMsIGNvbnRpbnVhdGlvblV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IHsgZW5jbG9zZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGV4dFwiO1xuaW1wb3J0IHsgY2xhaW1TdHJpbmdGcm9tTGFiZWxzU2lnbmF0dXJlU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9zdHJpbmdcIjtcbmltcG9ydCB7IGxhYmVsc0Zyb21KU09OLFxuICAgICAgICAgZGVkdWN0aW9uRnJvbUpTT04sXG4gICAgICAgICBzaWduYXR1cmVGcm9tSlNPTixcbiAgICAgICAgIGxhYmVsc1RvTGFiZWxzSlNPTixcbiAgICAgICAgIGh5cG90aGVzZXNGcm9tSlNPTixcbiAgICAgICAgIHN1cHBvc2l0aW9uc0Zyb21KU09OLFxuICAgICAgICAgZGVkdWN0aW9uVG9EZWR1Y3Rpb25KU09OLFxuICAgICAgICAgc2lnbmF0dXJlVG9TaWduYXR1cmVKU09OLFxuICAgICAgICAgaHlwb3RoZXNlc1RvSHlwb3RoZXNlc0pTT04sXG4gICAgICAgICBzdXBwb3NpdGlvbnNUb1N1cHBvc2l0aW9uc0pTT04gfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2pzb25cIjtcblxuY29uc3QgeyByZXZlcnNlIH0gPSBhcnJheVV0aWxpdGllcyxcbiAgICAgIHsgYnJlYWtQb2ludEZyb21KU09OLCBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiB9ID0gYnJlYWtQb2ludFV0aWxpdGllcyxcbiAgICAgIHsgYWxsLCBldmVyeSwgZXh0cmFjdCwgZm9yd2FyZHNFdmVyeSwgYmFja3dhcmRzRXZlcnkgfSA9IGNvbnRpbnVhdGlvblV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2xhaW0gZXh0ZW5kcyBFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBsYWJlbHMsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uLCBwcm9vZiwgc2lnbmF0dXJlLCBoeXBvdGhlc2VzKSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICAgIHRoaXMubGFiZWxzID0gbGFiZWxzO1xuICAgIHRoaXMuc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zO1xuICAgIHRoaXMuZGVkdWN0aW9uID0gZGVkdWN0aW9uO1xuICAgIHRoaXMucHJvb2YgPSBwcm9vZjtcbiAgICB0aGlzLnNpZ25hdHVyZSA9IHNpZ25hdHVyZTtcbiAgICB0aGlzLmh5cG90aGVzZXMgPSBoeXBvdGhlc2VzO1xuICB9XG5cbiAgZ2V0TGFiZWxzKCkge1xuICAgIHJldHVybiB0aGlzLmxhYmVscztcbiAgfVxuXG4gIGdldFN1cHBvc2l0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5zdXBwb3NpdGlvbnM7XG4gIH1cblxuICBnZXREZWR1Y3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZGVkdWN0aW9uO1xuICB9XG5cbiAgZ2V0UHJvb2YoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvb2Y7XG4gIH1cblxuICBnZXRTaWduYXR1cmUoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2lnbmF0dXJlO1xuICB9XG5cbiAgZ2V0SHlwb3RoZXNlcygpIHtcbiAgICByZXR1cm4gdGhpcy5oeXBvdGhlc2VzO1xuICB9XG5cbiAgc2V0SHlwb3RoZXNlcyhoeXBvdGhlc2VzKSB7XG4gICAgdGhpcy5oeXBvdGhlc2VzID0gaHlwb3RoZXNlcztcbiAgfVxuXG4gIGdldFN1cHBvc2l0aW9uKGluZGV4KSB7XG4gICAgY29uc3Qgc3VwcG9zaXRpb24gPSB0aGlzLnN1cHBvc2l0aW9uc1tpbmRleF0gfHwgbnVsbDtcblxuICAgIHJldHVybiBzdXBwb3NpdGlvbjtcbiAgfVxuXG4gIGlzU2F0aXNmaWFibGUoKSB7XG4gICAgY29uc3Qgc2F0aXNmaWFibGUgPSBmYWxzZTtcblxuICAgIHJldHVybiBzYXRpc2ZpYWJsZTtcbiAgfVxuXG4gIGlzSHlwb3RoZXRpY2FsKCkge1xuICAgIGNvbnN0IGh5cG90aGVzZXNMZW5ndGggPSB0aGlzLmh5cG90aGVzZXMubGVuZ3RoLFxuICAgICAgICAgIGh5cG90aGV0aWNhbCA9IChoeXBvdGhlc2VzTGVuZ3RoID4gMCk7XG5cbiAgICByZXR1cm4gaHlwb3RoZXRpY2FsO1xuICB9XG5cbiAgbWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyA9IHRoaXMubGFiZWxzLnNvbWUoKGxhYmVsKSA9PiB7XG4gICAgICBjb25zdCBtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyA9IGxhYmVsLm1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICAgICAgaWYgKG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzO1xuICB9XG5cbiAgdmVyaWZ5RXgoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgY2xhaW1TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbS4uLmApO1xuXG4gICAgcmV0dXJuIGVuY2xvc2UoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHZlcmlmeVByb29mID0gdGhpcy52ZXJpZnlQcm9vZi5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgdmVyaWZ5TGFiZWxzID0gdGhpcy52ZXJpZnlMYWJlbHMuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIHZlcmlmeURlZHVjdGlvbiA9IHRoaXMudmVyaWZ5RGVkdWN0aW9uLmJpbmQodGhpcyksXG4gICAgICAgICAgICB2ZXJpZnlTdXBwb3NpdGlvbnMgPSB0aGlzLnZlcmlmeVN1cHBvc2l0aW9ucy5iaW5kKHRoaXMpO1xuXG4gICAgICByZXR1cm4gYWxsKFtcbiAgICAgICAgdmVyaWZ5TGFiZWxzLFxuICAgICAgICB2ZXJpZnlTdXBwb3NpdGlvbnMsXG4gICAgICAgIHZlcmlmeURlZHVjdGlvbixcbiAgICAgICAgdmVyaWZ5UHJvb2ZcbiAgICAgIF0sIGNvbnRleHQsICh2ZXJpZmllcykgPT4ge1xuICAgICAgICBpZiAodmVyaWZpZXMpIHtcbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbS5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24odmVyaWZpZXMsIGNvbnRleHQpO1xuICAgICAgfSk7XG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICB2ZXJpZnlMYWJlbHMoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgY2xhaW1TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke2NsYWltU3RyaW5nfScgY2xhaW0ncyBsYWJlbHMuLi5gKTtcblxuICAgIGNvbnN0IHZlcmlmeUxhYmVsID0gdGhpcy52ZXJpZnlMYWJlbC5iaW5kKHRoaXMpO1xuXG4gICAgcmV0dXJuIGV2ZXJ5KHRoaXMubGFiZWxzLCB2ZXJpZnlMYWJlbCwgY29udGV4dCwgKGxhYmVsc1ZlcmlmeSkgPT4ge1xuICAgICAgaWYgKGxhYmVsc1ZlcmlmeSkge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbSdzIGxhYmVscy5gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihsYWJlbHNWZXJpZnksIGNvbnRleHQpO1xuICAgIH0pO1xuICB9XG5cbiAgdmVyaWZ5TGFiZWwobGFiZWwsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IGxhYmVsU3RyaW5nID0gbGFiZWwuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgY2xhaW1TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbSdzICcke2xhYmVsU3RyaW5nfScgbGFiZWwuLi5gKTtcblxuICAgIHJldHVybiBsYWJlbC52ZXJpZnkoKGxhYmVsVmVyaWZpZXMpID0+IHtcbiAgICAgIGlmIChsYWJlbFZlcmlmaWVzKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtjbGFpbVN0cmluZ30nIGNsYWltJ3MgJyR7bGFiZWxTdHJpbmd9JyBsYWJlbC5gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihsYWJlbFZlcmlmaWVzLCBjb250ZXh0KTtcbiAgICB9KTtcbiAgfVxuXG4gIHZlcmlmeVByb29mKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGlmICh0aGlzLnByb29mID09PSBudWxsKSB7XG4gICAgICBjb25zdCBwcm9vZlZlcmlmaWVzID0gdHJ1ZTsgLy8vXG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24ocHJvb2ZWZXJpZmllcywgY29udGV4dCk7XG4gICAgfVxuXG4gICAgY29uc3QgY2xhaW1TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke2NsYWltU3RyaW5nfScgY2xhaW0ncyBwcm9vZi4uLmApO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50ID0gdGhpcy5kZWR1Y3Rpb24uZ2V0U3RhdGVtZW50KCk7XG5cbiAgICByZXR1cm4gdGhpcy5wcm9vZi52ZXJpZnkoc3RhdGVtZW50LCBjb250ZXh0LCAocHJvb2ZWZXJpZmllcykgPT4ge1xuICAgICAgaWYgKHByb29mVmVyaWZpZXMpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke2NsYWltU3RyaW5nfScgY2xhaW0ncyBwcm9vZi5gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihwcm9vZlZlcmlmaWVzLCBjb250ZXh0KTtcbiAgICB9KTtcbiAgfVxuXG4gIHZlcmlmeURlZHVjdGlvbihjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBjbGFpbVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksIC8vL1xuICAgICAgICAgIGRlZHVjdGlvblN0cmluZyA9IHRoaXMuZGVkdWN0aW9uLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtjbGFpbVN0cmluZ30nIGNsYWltJ3MgJyR7ZGVkdWN0aW9uU3RyaW5nfScgZGVkdWN0aW9uLi4uYCk7XG5cbiAgICByZXR1cm4gdGhpcy5kZWR1Y3Rpb24udmVyaWZ5KGNvbnRleHQsIChkZWR1Y3Rpb25WZXJpZmllcykgPT4ge1xuICAgICAgaWYgKGRlZHVjdGlvblZlcmlmaWVzKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtjbGFpbVN0cmluZ30nIGNsYWltJ3MgJyR7ZGVkdWN0aW9uU3RyaW5nfScgZGVkdWN0aW9uLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKGRlZHVjdGlvblZlcmlmaWVzLCBjb250ZXh0KTtcbiAgICB9KTtcbiAgfVxuXG4gIHZlcmlmeVN1cHBvc2l0aW9uKHN1cHBvc2l0aW9uLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBjbGFpbVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksIC8vL1xuICAgICAgICAgIHN1cHBvc2l0aW9uU3RyaW5nID0gc3VwcG9zaXRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke2NsYWltU3RyaW5nfScgY2xhaW0ncyAnJHtzdXBwb3NpdGlvblN0cmluZ30nIHN1cHBvc2l0aW9uLi4uYCk7XG5cbiAgICByZXR1cm4gc3VwcG9zaXRpb24udmVyaWZ5KGNvbnRleHQsIChzdXBwb3NpdGlvblZlcmlmaWVzKSA9PiB7XG4gICAgICBpZiAoc3VwcG9zaXRpb25WZXJpZmllcykge1xuICAgICAgICBjb25zdCBmYWN0T3JTdWJwcm9vZiA9IHN1cHBvc2l0aW9uOyAgLy8vL1xuXG4gICAgICAgIGNvbnRleHQuYXNzaWduQXNzaWdubWVudHMoKTtcblxuICAgICAgICBjb250ZXh0LmFkZEZhY3RPclN1YnByb29mKGZhY3RPclN1YnByb29mKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN1cHBvc2l0aW9uVmVyaWZpZXMpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke2NsYWltU3RyaW5nfScgY2xhaW0ncyAnJHtzdXBwb3NpdGlvblN0cmluZ30nIHN1cHBvc2l0aW9uLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHN1cHBvc2l0aW9uVmVyaWZpZXMsIGNvbnRleHQpO1xuICAgIH0pO1xuICB9XG5cbiAgdmVyaWZ5U3VwcG9zaXRpb25zKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IHN1cHBvc2l0aW9uc0xlbmd0aCA9IHRoaXMuc3VwcG9zaXRpb25zLmxlbmd0aDtcblxuICAgIGlmIChzdXBwb3NpdGlvbnNMZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnN0IHN1cHBvc2l0aW9uc1ZlcmlmeSA9IHRydWU7ICAvLy9cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdXBwb3NpdGlvbnNWZXJpZnksIGNvbnRleHQpO1xuICAgIH1cblxuICAgIGNvbnN0IGNsYWltU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtjbGFpbVN0cmluZ30nIGNsYWltJ3Mgc3VwcG9zaXRpb25zLi4uYCk7XG5cbiAgICBjb25zdCB2ZXJpZnlTdXBwb3NpdGlvbiA9IHRoaXMudmVyaWZ5U3VwcG9zaXRpb24uYmluZCh0aGlzKTtcblxuICAgIHJldHVybiBmb3J3YXJkc0V2ZXJ5KHRoaXMuc3VwcG9zaXRpb25zLCB2ZXJpZnlTdXBwb3NpdGlvbiwgY29udGV4dCwgKHN1cHBvc2l0aW9uc1ZlcmlmeSkgPT4ge1xuICAgICAgaWYgKHN1cHBvc2l0aW9uc1ZlcmlmeSkge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbSdzIHN1cHBvc2l0aW9ucy5gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdXBwb3NpdGlvbnNWZXJpZnksIGNvbnRleHQpO1xuICAgIH0pO1xuICB9XG5cbiAgZGlzY2hhcmdlSHlwb3RoZXNpcyhoeXBvdGhlc2lzLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBjbGFpbVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksIC8vL1xuICAgICAgICAgIGh5cG90aGVzaXNTdHJpbmcgPSBoeXBvdGhlc2lzLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgRGlzY2hhcmRpbmcgdGhlICcke2NsYWltU3RyaW5nfScgY2xhaW0ncyAnJHtoeXBvdGhlc2lzU3RyaW5nfScgaHlwb3RoZXNpcy4uLmApO1xuXG4gICAgaHlwb3RoZXNpcy5kaXNjaGFyZ2UoY29udGV4dCwgKGh5cG90aGVzaXNEaXNjaGFyZ2VzKSA9PiB7XG4gICAgICBpZiAoaHlwb3RoZXNpc0Rpc2NoYXJnZXMpIHtcbiAgICAgICAgY29udGV4dC50cmFjZShgLi4uZGlzY2hhcmdlcyB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbSdzICcke2h5cG90aGVzaXNTdHJpbmd9JyBoeXBvdGhlc2lzLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKGh5cG90aGVzaXNEaXNjaGFyZ2VzKTtcbiAgICB9KTtcbiAgfVxuXG4gIGRpc2NoYXJnZUh5cG90aGVzZXMoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgaHlwb3RoZXNlcyA9IHRoaXMuZ2V0SHlwb3RoZXNlcygpLFxuICAgICAgICAgIGRpc2NoYXJnZUh5cG90aGVzaXMgPSB0aGlzLmRpc2NoYXJnZUh5cG90aGVzaXMuYmluZCh0aGlzKTtcblxuICAgIHJldHVybiBldmVyeShoeXBvdGhlc2VzLCBkaXNjaGFyZ2VIeXBvdGhlc2lzLCBjb250ZXh0LCBjb250aW51YXRpb24pO1xuICB9XG5cbiAgdW5pZnlTdGVwV2l0aERlZHVjdGlvbihzdGVwLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBydWxlU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzdGVwU3RyaW5nID0gc3RlcC5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBkZWR1Y3Rpb25TdHJpbmcgPSB0aGlzLmRlZHVjdGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCB3aXRoIHRoZSAnJHtydWxlU3RyaW5nfScgcnVsZSdzICcke2RlZHVjdGlvblN0cmluZ30nIGRlZHVjdGlvbi4uLmApO1xuXG4gICAgcmV0dXJuIHRoaXMuZGVkdWN0aW9uLnVuaWZ5U3RlcChzdGVwLCBjb250ZXh0LCAoc3RlcFVuaWZpZXMpID0+IHtcbiAgICAgIGxldCBzdGVwVW5pZmllc1dpdGhEZWR1Y3Rpb24gPSBmYWxzZTtcblxuICAgICAgaWYgKHN0ZXBVbmlmaWVzKSB7XG4gICAgICAgIHN0ZXBVbmlmaWVzV2l0aERlZHVjdGlvbiA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGVwVW5pZmllc1dpdGhEZWR1Y3Rpb24pIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgd2l0aCB0aGUgJyR7cnVsZVN0cmluZ30nIHJ1bGUncyAnJHtkZWR1Y3Rpb25TdHJpbmd9JyBkZWR1Y3Rpb24uYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oc3RlcFVuaWZpZXNXaXRoRGVkdWN0aW9uKTtcbiAgICB9KTtcbiAgfVxuXG4gIHVuaWZ5U3RlcEFuZEZhY3RPclN1YnByb29mcyhzdGVwLCBmYWN0b3JTdWJwcm9vZnMsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIHJldHVybiB0aGlzLnVuaWZ5U3RlcFdpdGhEZWR1Y3Rpb24oc3RlcCwgY29udGV4dCwgKHN0YXRlbWVudFVuaWZpZXNXaXRoRGVkdWN0aW9uKSA9PiB7XG4gICAgICBpZiAoIXN0YXRlbWVudFVuaWZpZXNXaXRoRGVkdWN0aW9uKSB7XG4gICAgICAgIGNvbnN0IHN0ZXBBbmRGYWN0T3JTdWJwcm9vZnNVbmlmeSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24oc3RlcEFuZEZhY3RPclN1YnByb29mc1VuaWZ5KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuZGlzY2hhcmdlSHlwb3RoZXNlcyhjb250ZXh0LCAoaHlwb3RoZXNlc0Rpc2NoYXJnZSkgPT4ge1xuICAgICAgICBpZiAoIWh5cG90aGVzZXNEaXNjaGFyZ2UpIHtcbiAgICAgICAgICBjb25zdCBzdGVwQW5kRmFjdE9yU3VicHJvb2ZzVW5pZnkgPSBmYWxzZTtcblxuICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oc3RlcEFuZEZhY3RPclN1YnByb29mc1VuaWZ5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnVuaWZ5RmFjdE9yU3VicHJvb2ZzV2l0aFN1cHBvc2l0aW9ucyhmYWN0b3JTdWJwcm9vZnMsIGNvbnRleHQsIChmYWN0b3JTdWJwcm9vZnNVbmlmaWVzV2l0aFN1cHBvc2l0aW9ucykgPT4ge1xuICAgICAgICAgIGxldCBzdGVwQW5kRmFjdE9yU3VicHJvb2ZzVW5pZnkgPSBmYWxzZTtcblxuICAgICAgICAgIGlmIChmYWN0b3JTdWJwcm9vZnNVbmlmaWVzV2l0aFN1cHBvc2l0aW9ucykge1xuICAgICAgICAgICAgY29uc3QgZGVyaXZlZFN1YnN0aXR1dGlvbnNSZXNvbHZlZCA9IGNvbnRleHQuYXJlRGVyaXZlZFN1YnN0aXR1dGlvbnNSZXNvbHZlZCgpO1xuXG4gICAgICAgICAgICBpZiAoZGVyaXZlZFN1YnN0aXR1dGlvbnNSZXNvbHZlZCkge1xuICAgICAgICAgICAgICBzdGVwQW5kRmFjdE9yU3VicHJvb2ZzVW5pZnkgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oc3RlcEFuZEZhY3RPclN1YnByb29mc1VuaWZ5KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHVuaWZ5RmFjdE9yU3VicHJvb2ZzV2l0aFN1cHBvc2l0aW9uKGZhY3RvclN1YnByb29mcywgc3VwcG9zaXRpb24sIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIHJldHVybiBleHRyYWN0KGZhY3RvclN1YnByb29mcywgKGZhY3RPclN1YnByb29mLCBjb250aW51YXRpb24pID0+IHtcbiAgICAgIHJldHVybiBzdXBwb3NpdGlvbi51bmlmeUZhY3RPclN1YnByb29mKGZhY3RPclN1YnByb29mLCBjb250ZXh0LCBjb250aW51YXRpb24pO1xuICAgIH0sIChmYWN0T3JTdWJwcm9vZiA9IG51bGwpID0+IHtcbiAgICAgIGlmIChmYWN0T3JTdWJwcm9vZiAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBmYWN0b3JTdWJwcm9vZnNVbmlmaWVzV2l0aFN1cHBvc2l0aW9uID0gdHJ1ZTtcblxuICAgICAgICByZXR1cm4gY29udGV4dC5yZXNvbHZlRGVyaXZlZFN1YnN0aXR1dGlvbnMoKCkgPT4ge1xuICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oZmFjdG9yU3VicHJvb2ZzVW5pZmllc1dpdGhTdXBwb3NpdGlvbik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3VwcG9zaXRpb24udW5pZnlJbmRlcGVuZGVudGx5KGNvbnRleHQsIGNvbnRpbnVhdGlvbik7XG4gICAgfSk7XG4gIH1cblxuICB1bmlmeUZhY3RPclN1YnByb29mc1dpdGhTdXBwb3NpdGlvbnMoZmFjdG9yU3VicHJvb2ZzLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBmYWN0b3JTdWJwcm9vZnMgPSByZXZlcnNlKGZhY3RvclN1YnByb29mcyk7IC8vL1xuXG4gICAgcmV0dXJuIGJhY2t3YXJkc0V2ZXJ5KHRoaXMuc3VwcG9zaXRpb25zLCAoc3VwcG9zaXRpb24sIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMudW5pZnlGYWN0T3JTdWJwcm9vZnNXaXRoU3VwcG9zaXRpb24oZmFjdG9yU3VicHJvb2ZzLCBzdXBwb3NpdGlvbiwgY29udGV4dCwgY29udGludWF0aW9uKTtcbiAgICB9LCBjb250aW51YXRpb24pO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIGNvbnN0IGxhYmVsc0pTT04gPSBsYWJlbHNUb0xhYmVsc0pTT04odGhpcy5sYWJlbHMpLFxuICAgICAgICAgIGRlZHVjdGlvbkpTT04gPSBkZWR1Y3Rpb25Ub0RlZHVjdGlvbkpTT04odGhpcy5kZWR1Y3Rpb24pLFxuICAgICAgICAgIHN1cHBvc2l0aW9uc0pTT04gPSBzdXBwb3NpdGlvbnNUb1N1cHBvc2l0aW9uc0pTT04odGhpcy5zdXBwb3NpdGlvbnMpLFxuICAgICAgICAgIHNpZ25hdHVyZUpTT04gPSBzaWduYXR1cmVUb1NpZ25hdHVyZUpTT04odGhpcy5zaWduYXR1cmUpLFxuICAgICAgICAgIGh5cG90aGVzZXNKU09OID0gaHlwb3RoZXNlc1RvSHlwb3RoZXNlc0pTT04odGhpcy5oeXBvdGhlc2VzKSxcbiAgICAgICAgICBzdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgbGV0IGJyZWFrUG9pbnQ7XG5cbiAgICBicmVha1BvaW50ID0gdGhpcy5nZXRCcmVha1BvaW50KCk7XG5cbiAgICBjb25zdCBicmVha1BvaW50SlNPTiA9IGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OKGJyZWFrUG9pbnQpO1xuXG4gICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRKU09OOyAgLy8vXG5cbiAgICBjb25zdCBsYWJlbHMgPSBsYWJlbHNKU09OLCAgLy8vXG4gICAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uSlNPTiwgIC8vL1xuICAgICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0pTT04sICAvLy9cbiAgICAgICAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVKU09OLCAgLy8vXG4gICAgICAgICAgaHlwb3RoZXNlcyA9IGh5cG90aGVzZXNKU09OLCAgLy8vXG4gICAgICAgICAganNvbiA9IHtcbiAgICAgICAgICAgIHN0cmluZyxcbiAgICAgICAgICAgIGJyZWFrUG9pbnQsXG4gICAgICAgICAgICBsYWJlbHMsXG4gICAgICAgICAgICBkZWR1Y3Rpb24sXG4gICAgICAgICAgICBzdXBwb3NpdGlvbnMsXG4gICAgICAgICAgICBzaWduYXR1cmUsXG4gICAgICAgICAgICBoeXBvdGhlc2VzXG4gICAgICAgICAgfTtcblxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgc3RhdGljIGZyb21KU09OKENsYXNzLCBqc29uLCBjb250ZXh0KSB7XG4gICAgY29uc3QgbGFiZWxzID0gbGFiZWxzRnJvbUpTT04oanNvbiwgY29udGV4dCksXG4gICAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbUpTT04oanNvbiwgY29udGV4dCksXG4gICAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbUpTT04oanNvbiwgY29udGV4dCksXG4gICAgICAgICAgc2lnbmF0dXJlID0gc2lnbmF0dXJlRnJvbUpTT04oanNvbiwgY29udGV4dCksXG4gICAgICAgICAgaHlwb3RoZXNlcyA9IGh5cG90aGVzZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KSxcbiAgICAgICAgICBjbGFpbVN0cmluZyA9IGNsYWltU3RyaW5nRnJvbUxhYmVsc1NpZ25hdHVyZVN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbihsYWJlbHMsIHNpZ25hdHVyZSwgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICAgIHN0cmluZyA9IGNsYWltU3RyaW5nLCAvLy9cbiAgICAgICAgICBub2RlID0gbnVsbCxcbiAgICAgICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEZyb21KU09OKGpzb24pLFxuICAgICAgICAgIHByb29mID0gbnVsbCxcbiAgICAgICAgICBjbGFpbSA9IG5ldyBDbGFzcyhjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24sIHByb29mLCBzaWduYXR1cmUsIGh5cG90aGVzZXMpO1xuXG4gICAgcmV0dXJuIGNsYWltO1xuICB9XG59XG4iXSwibmFtZXMiOlsiQ2xhaW0iLCJyZXZlcnNlIiwiYXJyYXlVdGlsaXRpZXMiLCJicmVha1BvaW50RnJvbUpTT04iLCJicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiIsImJyZWFrUG9pbnRVdGlsaXRpZXMiLCJhbGwiLCJldmVyeSIsImV4dHJhY3QiLCJmb3J3YXJkc0V2ZXJ5IiwiYmFja3dhcmRzRXZlcnkiLCJjb250aW51YXRpb25VdGlsaXRpZXMiLCJFbGVtZW50IiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50IiwibGFiZWxzIiwic3VwcG9zaXRpb25zIiwiZGVkdWN0aW9uIiwicHJvb2YiLCJzaWduYXR1cmUiLCJoeXBvdGhlc2VzIiwiZ2V0TGFiZWxzIiwiZ2V0U3VwcG9zaXRpb25zIiwiZ2V0RGVkdWN0aW9uIiwiZ2V0UHJvb2YiLCJnZXRTaWduYXR1cmUiLCJnZXRIeXBvdGhlc2VzIiwic2V0SHlwb3RoZXNlcyIsImdldFN1cHBvc2l0aW9uIiwiaW5kZXgiLCJzdXBwb3NpdGlvbiIsImlzU2F0aXNmaWFibGUiLCJzYXRpc2ZpYWJsZSIsImlzSHlwb3RoZXRpY2FsIiwiaHlwb3RoZXNlc0xlbmd0aCIsImxlbmd0aCIsImh5cG90aGV0aWNhbCIsIm1hdGNoTWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyIsInNvbWUiLCJsYWJlbCIsInZlcmlmeUV4IiwiY29udGludWF0aW9uIiwiY2xhaW1TdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsImVuY2xvc2UiLCJ2ZXJpZnlQcm9vZiIsImJpbmQiLCJ2ZXJpZnlMYWJlbHMiLCJ2ZXJpZnlEZWR1Y3Rpb24iLCJ2ZXJpZnlTdXBwb3NpdGlvbnMiLCJ2ZXJpZmllcyIsImRlYnVnIiwidmVyaWZ5TGFiZWwiLCJsYWJlbHNWZXJpZnkiLCJsYWJlbFN0cmluZyIsInZlcmlmeSIsImxhYmVsVmVyaWZpZXMiLCJwcm9vZlZlcmlmaWVzIiwic3RhdGVtZW50IiwiZ2V0U3RhdGVtZW50IiwiZGVkdWN0aW9uU3RyaW5nIiwiZGVkdWN0aW9uVmVyaWZpZXMiLCJ2ZXJpZnlTdXBwb3NpdGlvbiIsInN1cHBvc2l0aW9uU3RyaW5nIiwic3VwcG9zaXRpb25WZXJpZmllcyIsImZhY3RPclN1YnByb29mIiwiYXNzaWduQXNzaWdubWVudHMiLCJhZGRGYWN0T3JTdWJwcm9vZiIsInN1cHBvc2l0aW9uc0xlbmd0aCIsInN1cHBvc2l0aW9uc1ZlcmlmeSIsImRpc2NoYXJnZUh5cG90aGVzaXMiLCJoeXBvdGhlc2lzIiwiaHlwb3RoZXNpc1N0cmluZyIsImRpc2NoYXJnZSIsImh5cG90aGVzaXNEaXNjaGFyZ2VzIiwiZGlzY2hhcmdlSHlwb3RoZXNlcyIsInVuaWZ5U3RlcFdpdGhEZWR1Y3Rpb24iLCJzdGVwIiwicnVsZVN0cmluZyIsInN0ZXBTdHJpbmciLCJ1bmlmeVN0ZXAiLCJzdGVwVW5pZmllcyIsInN0ZXBVbmlmaWVzV2l0aERlZHVjdGlvbiIsInVuaWZ5U3RlcEFuZEZhY3RPclN1YnByb29mcyIsImZhY3RvclN1YnByb29mcyIsInN0YXRlbWVudFVuaWZpZXNXaXRoRGVkdWN0aW9uIiwic3RlcEFuZEZhY3RPclN1YnByb29mc1VuaWZ5IiwiaHlwb3RoZXNlc0Rpc2NoYXJnZSIsInVuaWZ5RmFjdE9yU3VicHJvb2ZzV2l0aFN1cHBvc2l0aW9ucyIsImZhY3RvclN1YnByb29mc1VuaWZpZXNXaXRoU3VwcG9zaXRpb25zIiwiZGVyaXZlZFN1YnN0aXR1dGlvbnNSZXNvbHZlZCIsImFyZURlcml2ZWRTdWJzdGl0dXRpb25zUmVzb2x2ZWQiLCJ1bmlmeUZhY3RPclN1YnByb29mc1dpdGhTdXBwb3NpdGlvbiIsInVuaWZ5RmFjdE9yU3VicHJvb2YiLCJmYWN0b3JTdWJwcm9vZnNVbmlmaWVzV2l0aFN1cHBvc2l0aW9uIiwicmVzb2x2ZURlcml2ZWRTdWJzdGl0dXRpb25zIiwidW5pZnlJbmRlcGVuZGVudGx5IiwidG9KU09OIiwibGFiZWxzSlNPTiIsImxhYmVsc1RvTGFiZWxzSlNPTiIsImRlZHVjdGlvbkpTT04iLCJkZWR1Y3Rpb25Ub0RlZHVjdGlvbkpTT04iLCJzdXBwb3NpdGlvbnNKU09OIiwic3VwcG9zaXRpb25zVG9TdXBwb3NpdGlvbnNKU09OIiwic2lnbmF0dXJlSlNPTiIsInNpZ25hdHVyZVRvU2lnbmF0dXJlSlNPTiIsImh5cG90aGVzZXNKU09OIiwiaHlwb3RoZXNlc1RvSHlwb3RoZXNlc0pTT04iLCJnZXRCcmVha1BvaW50IiwiYnJlYWtQb2ludEpTT04iLCJqc29uIiwiZnJvbUpTT04iLCJDbGFzcyIsImxhYmVsc0Zyb21KU09OIiwiZGVkdWN0aW9uRnJvbUpTT04iLCJzdXBwb3NpdGlvbnNGcm9tSlNPTiIsInNpZ25hdHVyZUZyb21KU09OIiwiaHlwb3RoZXNlc0Zyb21KU09OIiwiY2xhaW1TdHJpbmdGcm9tTGFiZWxzU2lnbmF0dXJlU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uIiwiY2xhaW0iXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQXNCQTs7O2VBQXFCQTs7OzJCQXBCVTtnQ0FDcUM7eUJBRTVDO3dCQUMrQztzQkFVeEI7QUFFL0MsTUFBTSxFQUFFQyxPQUFPLEVBQUUsR0FBR0MseUJBQWMsRUFDNUIsRUFBRUMsa0JBQWtCLEVBQUVDLDBCQUEwQixFQUFFLEdBQUdDLG1DQUFtQixFQUN4RSxFQUFFQyxHQUFHLEVBQUVDLEtBQUssRUFBRUMsT0FBTyxFQUFFQyxhQUFhLEVBQUVDLGNBQWMsRUFBRSxHQUFHQyxxQ0FBcUI7QUFFckUsTUFBTVgsY0FBY1ksdUJBQU87SUFDeEMsWUFBWUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsVUFBVSxFQUFFQyxNQUFNLEVBQUVDLFlBQVksRUFBRUMsU0FBUyxFQUFFQyxLQUFLLEVBQUVDLFNBQVMsRUFBRUMsVUFBVSxDQUFFO1FBQzVHLEtBQUssQ0FBQ1QsU0FBU0MsUUFBUUMsTUFBTUM7UUFFN0IsSUFBSSxDQUFDQyxNQUFNLEdBQUdBO1FBQ2QsSUFBSSxDQUFDQyxZQUFZLEdBQUdBO1FBQ3BCLElBQUksQ0FBQ0MsU0FBUyxHQUFHQTtRQUNqQixJQUFJLENBQUNDLEtBQUssR0FBR0E7UUFDYixJQUFJLENBQUNDLFNBQVMsR0FBR0E7UUFDakIsSUFBSSxDQUFDQyxVQUFVLEdBQUdBO0lBQ3BCO0lBRUFDLFlBQVk7UUFDVixPQUFPLElBQUksQ0FBQ04sTUFBTTtJQUNwQjtJQUVBTyxrQkFBa0I7UUFDaEIsT0FBTyxJQUFJLENBQUNOLFlBQVk7SUFDMUI7SUFFQU8sZUFBZTtRQUNiLE9BQU8sSUFBSSxDQUFDTixTQUFTO0lBQ3ZCO0lBRUFPLFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQ04sS0FBSztJQUNuQjtJQUVBTyxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUNOLFNBQVM7SUFDdkI7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
@@ -10,6 +10,7 @@ Object.defineProperty(exports, "default", {
10
10
  });
11
11
  const _occamlanguages = require("occam-languages");
12
12
  const _elements = require("../elements");
13
+ const _continuation = require("../utilities/continuation");
13
14
  const _instantiate = require("../process/instantiate");
14
15
  const _element = require("../utilities/element");
15
16
  const _unify = require("../process/unify");
@@ -29,35 +30,46 @@ const _default = (0, _elements.define)(class Combinator extends _occamlanguages.
29
30
  return combinatorNode;
30
31
  }
31
32
  verify(context, continuation) {
33
+ let verifies = false;
32
34
  const combinatorString = this.getString(); ///
33
35
  context.trace(`Verifying the '${combinatorString}' combinator...`);
34
- return (0, _context.attempt)((context)=>{
35
- return this.validateStatement(context, (statementValidates, context)=>{
36
- let verifies = false;
37
- if (statementValidates) {
38
- verifies = true;
39
- }
40
- if (verifies) {
41
- this.commit(context);
42
- context.debug(`...verified the '${combinatorString}' combinator.`);
43
- }
44
- return continuation(verifies, context);
45
- });
36
+ (0, _context.attempt)((context)=>{
37
+ const validates = this.validate(context, (combinator, context)=>true);
38
+ if (validates) {
39
+ this.commit(context);
40
+ verifies = true;
41
+ }
46
42
  }, context);
43
+ if (verifies) {
44
+ context.debug(`...verified the '${combinatorString}' combinator.`);
45
+ }
46
+ return continuation(verifies, context);
47
47
  }
48
- validateStatement(context, continuation) {
48
+ validate(context, continuation) {
49
+ let validates;
49
50
  const combinatorString = this.getString(); ///
50
- context.trace(`Validating the '${combinatorString}' combinator's statement...`);
51
- return (0, _validate.validateStatementAsCombinator)(this.statement, context, (statementValidatesAsCombinator, context)=>{
52
- let statementValidates = false;
53
- if (statementValidatesAsCombinator) {
54
- statementValidates = true;
55
- }
56
- if (statementValidates) {
57
- context.debug(`...validated the '${combinatorString}' combinator's statement.`);
58
- }
59
- return continuation(statementValidates, context);
51
+ context.trace(`Validating the '${combinatorString}' combinator...`);
52
+ const validateStatementAsCombinator = this.validateStatementAsCombinator.bind(this);
53
+ validates = (0, _continuation.exists)([
54
+ validateStatementAsCombinator
55
+ ], context, (context)=>{
56
+ const combinator = this;
57
+ return continuation(combinator, context);
60
58
  });
59
+ if (validates) {
60
+ context.debug(`...validated the '${combinatorString}' combinator.`);
61
+ }
62
+ return validates;
63
+ }
64
+ validateStatementAsCombinator(context, continuation) {
65
+ let statementValidatesAsCombinator;
66
+ const combinatorString = this.getString();
67
+ context.trace(`Validating the '${combinatorString}' combinator's statement...`);
68
+ statementValidatesAsCombinator = (0, _validate.validateStatementAsCombinator)(this.statement, context, continuation);
69
+ if (statementValidatesAsCombinator) {
70
+ context.debug(`...validated the '${combinatorString}' combinator's statement.`);
71
+ }
72
+ return statementValidatesAsCombinator;
61
73
  }
62
74
  unifyStatement(statement, context, continuation) {
63
75
  let statementUnifies;
@@ -100,4 +112,4 @@ const _default = (0, _elements.define)(class Combinator extends _occamlanguages.
100
112
  }
101
113
  });
102
114
 
103
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2NvbWJpbmF0b3IuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVsZW1lbnQsIGJyZWFrUG9pbnRVdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCB7IGRlZmluZSB9IGZyb20gXCIuLi9lbGVtZW50c1wiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGVDb21iaW5hdG9yIH0gZnJvbSBcIi4uL3Byb2Nlc3MvaW5zdGFudGlhdGVcIjtcbmltcG9ydCB7IHN0YXRlbWVudEZyb21Db21iaW5hdG9yTm9kZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvZWxlbWVudFwiO1xuaW1wb3J0IHsgdW5pZnlTdGF0ZW1lbnRXaXRoQ29tYmluYXRvciB9IGZyb20gXCIuLi9wcm9jZXNzL3VuaWZ5XCI7XG5pbXBvcnQgeyB2YWxpZGF0ZVN0YXRlbWVudEFzQ29tYmluYXRvciB9IGZyb20gXCIuLi9wcm9jZXNzL3ZhbGlkYXRlXCI7XG5pbXBvcnQgeyBhdHRlbXB0LCBzZXJpYWxpc2UsIHVuc2VyaWFsaXNlLCBpbnN0YW50aWF0ZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGV4dFwiO1xuXG5jb25zdCB7IGJyZWFrUG9pbnRGcm9tSlNPTiwgYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04gfSA9IGJyZWFrUG9pbnRVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBDb21iaW5hdG9yIGV4dGVuZHMgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50KSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICAgIHRoaXMuc3RhdGVtZW50ID0gc3RhdGVtZW50O1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlbWVudDtcbiAgfVxuXG4gIGdldENvbWJpbmF0b3J5Tm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgY29tYmluYXRvck5vZGUgPSBub2RlOyAgLy8vXG5cbiAgICByZXR1cm4gY29tYmluYXRvck5vZGU7XG4gIH1cblxuICB2ZXJpZnkoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgY29tYmluYXRvclN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7Y29tYmluYXRvclN0cmluZ30nIGNvbWJpbmF0b3IuLi5gKTtcblxuICAgIHJldHVybiBhdHRlbXB0KChjb250ZXh0KSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZVN0YXRlbWVudChjb250ZXh0LCAoc3RhdGVtZW50VmFsaWRhdGVzLCBjb250ZXh0KSA9PiB7XG4gICAgICAgIGxldCB2ZXJpZmllcyA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChzdGF0ZW1lbnRWYWxpZGF0ZXMpIHtcbiAgICAgICAgICB2ZXJpZmllcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmVyaWZpZXMpIHtcbiAgICAgICAgICB0aGlzLmNvbW1pdChjb250ZXh0KTtcblxuICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtjb21iaW5hdG9yU3RyaW5nfScgY29tYmluYXRvci5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24odmVyaWZpZXMsIGNvbnRleHQpO1xuICAgICAgfSk7XG4gICAgfSwgY29udGV4dClcbiAgfVxuXG4gIHZhbGlkYXRlU3RhdGVtZW50KGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IGNvbWJpbmF0b3JTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtjb21iaW5hdG9yU3RyaW5nfScgY29tYmluYXRvcidzIHN0YXRlbWVudC4uLmApO1xuXG4gICAgcmV0dXJuIHZhbGlkYXRlU3RhdGVtZW50QXNDb21iaW5hdG9yKHRoaXMuc3RhdGVtZW50LCBjb250ZXh0LCAoc3RhdGVtZW50VmFsaWRhdGVzQXNDb21iaW5hdG9yLCBjb250ZXh0KSA9PiB7XG4gICAgICBsZXQgc3RhdGVtZW50VmFsaWRhdGVzID0gZmFsc2U7XG5cbiAgICAgIGlmIChzdGF0ZW1lbnRWYWxpZGF0ZXNBc0NvbWJpbmF0b3IpIHtcbiAgICAgICAgc3RhdGVtZW50VmFsaWRhdGVzID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRlbWVudFZhbGlkYXRlcykge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2NvbWJpbmF0b3JTdHJpbmd9JyBjb21iaW5hdG9yJ3Mgc3RhdGVtZW50LmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHN0YXRlbWVudFZhbGlkYXRlcywgY29udGV4dCk7XG4gICAgfSk7XG4gIH1cblxuICB1bmlmeVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGxldCBzdGF0ZW1lbnRVbmlmaWVzO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpLFxuICAgICAgICAgIGNvbWJpbmF0b3JTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHdpdGggdGhlICcke2NvbWJpbmF0b3JTdHJpbmd9JyBjb21iaW5hdG9yLi4uYCk7XG5cbiAgICBjb25zdCBjb21iaW5hdG9yID0gdGhpcywgLy8vXG4gICAgICAgICAgY29tYmluYXRvckNvbnRleHQgPSBjb21iaW5hdG9yLmdldENvbnRleHQoKSxcbiAgICAgICAgICBnZW5lcmFsQ29udGV4dCA9IGNvbWJpbmF0b3JDb250ZXh0LCAvLy9cbiAgICAgICAgICBzcGVjaWZpQ29udGV4dCA9IGNvbnRleHQ7IC8vL1xuXG4gICAgc3RhdGVtZW50VW5pZmllcyA9IHVuaWZ5U3RhdGVtZW50V2l0aENvbWJpbmF0b3Ioc3RhdGVtZW50LCBjb21iaW5hdG9yLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaUNvbnRleHQsIChnZW5lcmFsQ29udGV4dCwgc3BlY2lmaUNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpQ29udGV4dDsgLy8vXG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oc3RhdGVtZW50LCBjb250ZXh0KTtcbiAgICB9KTtcblxuICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgd2l0aCB0aGUgJyR7Y29tYmluYXRvclN0cmluZ30nIGNvbWJpbmF0b3IuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXRlbWVudFVuaWZpZXM7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgcmV0dXJuIHNlcmlhbGlzZSgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3Qgc3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgICAgbGV0IGJyZWFrUG9pbnQ7XG5cbiAgICAgIGJyZWFrUG9pbnQgPSB0aGlzLmdldEJyZWFrUG9pbnQoKTtcblxuICAgICAgY29uc3QgYnJlYWtQb2ludEpTT04gPSBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTihicmVha1BvaW50KTtcblxuICAgICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRKU09OOyAgLy8vXG5cbiAgICAgIGNvbnN0IGpzb24gPSB7XG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIHN0cmluZyxcbiAgICAgICAgYnJlYWtQb2ludFxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIGpzb247XG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiQ29tYmluYXRvclwiO1xuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIGluc3RhbnRpYXRlKChjb250ZXh0KSA9PiB7XG4gICAgICByZXR1cm4gdW5zZXJpYWxpc2UoKGpzb24sIGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgICAgIGNvbWJpbmF0b3JOb2RlID0gaW5zdGFudGlhdGVDb21iaW5hdG9yKHN0cmluZywgY29udGV4dCksXG4gICAgICAgICAgICAgIG5vZGUgPSBjb21iaW5hdG9yTm9kZSwgIC8vL1xuICAgICAgICAgICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEZyb21KU09OKGpzb24pLFxuICAgICAgICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tQ29tYmluYXRvck5vZGUoY29tYmluYXRvck5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBjb21iaW5hdG9yID0gbmV3IENvbWJpbmF0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnQpO1xuXG4gICAgICAgIHJldHVybiBjb21iaW5hdG9yO1xuICAgICAgfSwganNvbiwgY29udGV4dCk7XG4gICAgfSwgY29udGV4dCk7XG4gIH1cbn0pO1xuIl0sIm5hbWVzIjpbImJyZWFrUG9pbnRGcm9tSlNPTiIsImJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIiwiYnJlYWtQb2ludFV0aWxpdGllcyIsImRlZmluZSIsIkNvbWJpbmF0b3IiLCJFbGVtZW50IiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50Iiwic3RhdGVtZW50IiwiZ2V0U3RhdGVtZW50IiwiZ2V0Q29tYmluYXRvcnlOb2RlIiwiZ2V0Tm9kZSIsImNvbWJpbmF0b3JOb2RlIiwidmVyaWZ5IiwiY29udGludWF0aW9uIiwiY29tYmluYXRvclN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwiYXR0ZW1wdCIsInZhbGlkYXRlU3RhdGVtZW50Iiwic3RhdGVtZW50VmFsaWRhdGVzIiwidmVyaWZpZXMiLCJjb21taXQiLCJkZWJ1ZyIsInZhbGlkYXRlU3RhdGVtZW50QXNDb21iaW5hdG9yIiwic3RhdGVtZW50VmFsaWRhdGVzQXNDb21iaW5hdG9yIiwidW5pZnlTdGF0ZW1lbnQiLCJzdGF0ZW1lbnRVbmlmaWVzIiwic3RhdGVtZW50U3RyaW5nIiwiY29tYmluYXRvciIsImNvbWJpbmF0b3JDb250ZXh0IiwiZ2V0Q29udGV4dCIsImdlbmVyYWxDb250ZXh0Iiwic3BlY2lmaUNvbnRleHQiLCJ1bmlmeVN0YXRlbWVudFdpdGhDb21iaW5hdG9yIiwidG9KU09OIiwic2VyaWFsaXNlIiwiZ2V0QnJlYWtQb2ludCIsImJyZWFrUG9pbnRKU09OIiwianNvbiIsIm5hbWUiLCJmcm9tSlNPTiIsImluc3RhbnRpYXRlIiwidW5zZXJpYWxpc2UiLCJpbnN0YW50aWF0ZUNvbWJpbmF0b3IiLCJzdGF0ZW1lbnRGcm9tQ29tYmluYXRvck5vZGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWFBOzs7ZUFBQTs7O2dDQVg2QzswQkFFdEI7NkJBQ2U7eUJBQ007dUJBQ0M7MEJBQ0M7eUJBQ2U7QUFFN0QsTUFBTSxFQUFFQSxrQkFBa0IsRUFBRUMsMEJBQTBCLEVBQUUsR0FBR0MsbUNBQW1CO01BRTlFLFdBQWVDLElBQUFBLGdCQUFNLEVBQUMsTUFBTUMsbUJBQW1CQyx1QkFBTztJQUNwRCxZQUFZQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxVQUFVLEVBQUVDLFNBQVMsQ0FBRTtRQUN4RCxLQUFLLENBQUNKLFNBQVNDLFFBQVFDLE1BQU1DO1FBRTdCLElBQUksQ0FBQ0MsU0FBUyxHQUFHQTtJ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
115
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2NvbWJpbmF0b3IuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVsZW1lbnQsIGJyZWFrUG9pbnRVdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCB7IGRlZmluZSB9IGZyb20gXCIuLi9lbGVtZW50c1wiO1xuaW1wb3J0IHsgZXhpc3RzIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250aW51YXRpb25cIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlQ29tYmluYXRvciB9IGZyb20gXCIuLi9wcm9jZXNzL2luc3RhbnRpYXRlXCI7XG5pbXBvcnQgeyBzdGF0ZW1lbnRGcm9tQ29tYmluYXRvck5vZGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2VsZW1lbnRcIjtcbmltcG9ydCB7IHVuaWZ5U3RhdGVtZW50V2l0aENvbWJpbmF0b3IgfSBmcm9tIFwiLi4vcHJvY2Vzcy91bmlmeVwiO1xuaW1wb3J0IHsgdmFsaWRhdGVTdGF0ZW1lbnRBc0NvbWJpbmF0b3IgfSBmcm9tIFwiLi4vcHJvY2Vzcy92YWxpZGF0ZVwiO1xuaW1wb3J0IHsgYXR0ZW1wdCwgc2VyaWFsaXNlLCB1bnNlcmlhbGlzZSwgaW5zdGFudGlhdGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcblxuY29uc3QgeyBicmVha1BvaW50RnJvbUpTT04sIGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIH0gPSBicmVha1BvaW50VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgQ29tYmluYXRvciBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudCkge1xuICAgIHN1cGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCk7XG5cbiAgICB0aGlzLnN0YXRlbWVudCA9IHN0YXRlbWVudDtcbiAgfVxuXG4gIGdldFN0YXRlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZW1lbnQ7XG4gIH1cblxuICBnZXRDb21iaW5hdG9yeU5vZGUoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgIGNvbWJpbmF0b3JOb2RlID0gbm9kZTsgIC8vL1xuXG4gICAgcmV0dXJuIGNvbWJpbmF0b3JOb2RlO1xuICB9XG5cbiAgdmVyaWZ5KGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGxldCB2ZXJpZmllcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgY29tYmluYXRvclN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7Y29tYmluYXRvclN0cmluZ30nIGNvbWJpbmF0b3IuLi5gKTtcblxuICAgIGF0dGVtcHQoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHZhbGlkYXRlcyA9IHRoaXMudmFsaWRhdGUoY29udGV4dCwgKGNvbWJpbmF0b3IsIGNvbnRleHQpID0+IHRydWUpO1xuXG4gICAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICAgIHRoaXMuY29tbWl0KGNvbnRleHQpO1xuXG4gICAgICAgIHZlcmlmaWVzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9LCBjb250ZXh0KTtcblxuICAgIGlmICh2ZXJpZmllcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke2NvbWJpbmF0b3JTdHJpbmd9JyBjb21iaW5hdG9yLmApO1xuICAgIH1cblxuICAgIHJldHVybiBjb250aW51YXRpb24odmVyaWZpZXMsIGNvbnRleHQpO1xuICB9XG5cbiAgdmFsaWRhdGUoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgbGV0IHZhbGlkYXRlcztcblxuICAgIGNvbnN0IGNvbWJpbmF0b3JTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtjb21iaW5hdG9yU3RyaW5nfScgY29tYmluYXRvci4uLmApO1xuXG4gICAgY29uc3QgdmFsaWRhdGVTdGF0ZW1lbnRBc0NvbWJpbmF0b3IgPSB0aGlzLnZhbGlkYXRlU3RhdGVtZW50QXNDb21iaW5hdG9yLmJpbmQodGhpcyk7XG5cbiAgICB2YWxpZGF0ZXMgPSBleGlzdHMoW1xuICAgICAgdmFsaWRhdGVTdGF0ZW1lbnRBc0NvbWJpbmF0b3JcbiAgICBdLCBjb250ZXh0LCAoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgY29tYmluYXRvciA9IHRoaXM7XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oY29tYmluYXRvciwgY29udGV4dCk7XG4gICAgfSk7XG5cbiAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2NvbWJpbmF0b3JTdHJpbmd9JyBjb21iaW5hdG9yLmApO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0ZXM7XG4gIH1cblxuICB2YWxpZGF0ZVN0YXRlbWVudEFzQ29tYmluYXRvcihjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBsZXQgc3RhdGVtZW50VmFsaWRhdGVzQXNDb21iaW5hdG9yO1xuXG4gICAgY29uc3QgY29tYmluYXRvclN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtjb21iaW5hdG9yU3RyaW5nfScgY29tYmluYXRvcidzIHN0YXRlbWVudC4uLmApO1xuXG4gICAgc3RhdGVtZW50VmFsaWRhdGVzQXNDb21iaW5hdG9yID0gdmFsaWRhdGVTdGF0ZW1lbnRBc0NvbWJpbmF0b3IodGhpcy5zdGF0ZW1lbnQsIGNvbnRleHQsIGNvbnRpbnVhdGlvbik7XG5cbiAgICBpZiAoc3RhdGVtZW50VmFsaWRhdGVzQXNDb21iaW5hdG9yKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2NvbWJpbmF0b3JTdHJpbmd9JyBjb21iaW5hdG9yJ3Mgc3RhdGVtZW50LmApO1xuICAgIH1cblxuICAgIHJldHVybiBzdGF0ZW1lbnRWYWxpZGF0ZXNBc0NvbWJpbmF0b3I7XG4gIH1cblxuICB1bmlmeVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGxldCBzdGF0ZW1lbnRVbmlmaWVzO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpLFxuICAgICAgICAgIGNvbWJpbmF0b3JTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHdpdGggdGhlICcke2NvbWJpbmF0b3JTdHJpbmd9JyBjb21iaW5hdG9yLi4uYCk7XG5cbiAgICBjb25zdCBjb21iaW5hdG9yID0gdGhpcywgLy8vXG4gICAgICAgICAgY29tYmluYXRvckNvbnRleHQgPSBjb21iaW5hdG9yLmdldENvbnRleHQoKSxcbiAgICAgICAgICBnZW5lcmFsQ29udGV4dCA9IGNvbWJpbmF0b3JDb250ZXh0LCAvLy9cbiAgICAgICAgICBzcGVjaWZpQ29udGV4dCA9IGNvbnRleHQ7IC8vL1xuXG4gICAgc3RhdGVtZW50VW5pZmllcyA9IHVuaWZ5U3RhdGVtZW50V2l0aENvbWJpbmF0b3Ioc3RhdGVtZW50LCBjb21iaW5hdG9yLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaUNvbnRleHQsIChnZW5lcmFsQ29udGV4dCwgc3BlY2lmaUNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpQ29udGV4dDsgLy8vXG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oc3RhdGVtZW50LCBjb250ZXh0KTtcbiAgICB9KTtcblxuICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgd2l0aCB0aGUgJyR7Y29tYmluYXRvclN0cmluZ30nIGNvbWJpbmF0b3IuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXRlbWVudFVuaWZpZXM7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgcmV0dXJuIHNlcmlhbGlzZSgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3Qgc3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgICAgbGV0IGJyZWFrUG9pbnQ7XG5cbiAgICAgIGJyZWFrUG9pbnQgPSB0aGlzLmdldEJyZWFrUG9pbnQoKTtcblxuICAgICAgY29uc3QgYnJlYWtQb2ludEpTT04gPSBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTihicmVha1BvaW50KTtcblxuICAgICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRKU09OOyAgLy8vXG5cbiAgICAgIGNvbnN0IGpzb24gPSB7XG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIHN0cmluZyxcbiAgICAgICAgYnJlYWtQb2ludFxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIGpzb247XG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiQ29tYmluYXRvclwiO1xuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIGluc3RhbnRpYXRlKChjb250ZXh0KSA9PiB7XG4gICAgICByZXR1cm4gdW5zZXJpYWxpc2UoKGpzb24sIGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgICAgIGNvbWJpbmF0b3JOb2RlID0gaW5zdGFudGlhdGVDb21iaW5hdG9yKHN0cmluZywgY29udGV4dCksXG4gICAgICAgICAgICAgIG5vZGUgPSBjb21iaW5hdG9yTm9kZSwgIC8vL1xuICAgICAgICAgICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEZyb21KU09OKGpzb24pLFxuICAgICAgICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tQ29tYmluYXRvck5vZGUoY29tYmluYXRvck5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBjb21iaW5hdG9yID0gbmV3IENvbWJpbmF0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnQpO1xuXG4gICAgICAgIHJldHVybiBjb21iaW5hdG9yO1xuICAgICAgfSwganNvbiwgY29udGV4dCk7XG4gICAgfSwgY29udGV4dCk7XG4gIH1cbn0pO1xuIl0sIm5hbWVzIjpbImJyZWFrUG9pbnRGcm9tSlNPTiIsImJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIiwiYnJlYWtQb2ludFV0aWxpdGllcyIsImRlZmluZSIsIkNvbWJpbmF0b3IiLCJFbGVtZW50IiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50Iiwic3RhdGVtZW50IiwiZ2V0U3RhdGVtZW50IiwiZ2V0Q29tYmluYXRvcnlOb2RlIiwiZ2V0Tm9kZSIsImNvbWJpbmF0b3JOb2RlIiwidmVyaWZ5IiwiY29udGludWF0aW9uIiwidmVyaWZpZXMiLCJjb21iaW5hdG9yU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJhdHRlbXB0IiwidmFsaWRhdGVzIiwidmFsaWRhdGUiLCJjb21iaW5hdG9yIiwiY29tbWl0IiwiZGVidWciLCJ2YWxpZGF0ZVN0YXRlbWVudEFzQ29tYmluYXRvciIsImJpbmQiLCJleGlzdHMiLCJzdGF0ZW1lbnRWYWxpZGF0ZXNBc0NvbWJpbmF0b3IiLCJ1bmlmeVN0YXRlbWVudCIsInN0YXRlbWVudFVuaWZpZXMiLCJzdGF0ZW1lbnRTdHJpbmciLCJjb21iaW5hdG9yQ29udGV4dCIsImdldENvbnRleHQiLCJnZW5lcmFsQ29udGV4dCIsInNwZWNpZmlDb250ZXh0IiwidW5pZnlTdGF0ZW1lbnRXaXRoQ29tYmluYXRvciIsInRvSlNPTiIsInNlcmlhbGlzZSIsImdldEJyZWFrUG9pbnQiLCJicmVha1BvaW50SlNPTiIsImpzb24iLCJuYW1lIiwiZnJvbUpTT04iLCJpbnN0YW50aWF0ZSIsInVuc2VyaWFsaXNlIiwiaW5zdGFudGlhdGVDb21iaW5hdG9yIiwic3RhdGVtZW50RnJvbUNvbWJpbmF0b3JOb2RlIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFjQTs7O2VBQUE7OztnQ0FaNkM7MEJBRXRCOzhCQUNBOzZCQUNlO3lCQUNNO3VCQUNDOzBCQUNDO3lCQUNlO0FBRTdELE1BQU0sRUFBRUEsa0JBQWtCLEVBQUVDLDBCQUEwQixFQUFFLEdBQUdDLG1DQUFtQjtNQUU5RSxXQUFlQyxJQUFBQSxnQkFBTSxFQUFDLE1BQU1DLG1CQUFtQkMsdUJBQU87SUFDcEQsWUFBWUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsVUFBVSxFQUFFQyxTQUFTLENBQUU7UUFDeEQsS0FBSyxDQUFDSixTQUFTQyxRQUFRQyxNQUFNQztRQUU3QixJQUFJLENBQUNDLFNBQVMsR0FBR0E7SUFDbkI7SUFFQUMsZUFBZTtRQUNiLE9BQU8sSUFBSSxDQUFDRCxTQUFTO0lBQ3ZCO0lBRUFFLHFCQUFxQjtRQUNuQixNQUFNSixPQUFPLElBQUksQ0FBQ0ssT0FBTyxJQUNuQkMsaUJBQWlCTixNQUFPLEdBQUc7UUFFakMsT0FBT007SUFDVDtJQUVBQyxPQUFPVCxPQUFPLEVBQUVVLFlBQVksRUFBRTtRQUM1QixJQUFJQyxXQUFXO1FBRWYsTUFBTUMsbUJBQW1CLElBQUksQ0FBQ0MsU0FBUyxJQUFLLEdBQUc7UUFFL0NiLFFBQVFjLEtBQUssQ0FBQyxDQUFDLGVBQWUsRUFBRUYsaUJBQWlCLGVBQWUsQ0FBQztRQUVqRUcsSUFBQUEsZ0JBQU8sRUFBQyxDQUFDZjtZQUNQLE1BQU1nQixZQUFZLElBQUksQ0FBQ0MsUUFBUSxDQUFDakIsU0FBUyxDQUFDa0IsWUFBWWxCLFVBQVk7WUFFbEUsSUFB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