occam-nominal 1.0.556 → 1.0.565

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 (45) hide show
  1. package/lib/element/assertion/subproof.js +3 -3
  2. package/lib/element/assumption.js +65 -78
  3. package/lib/element/claim/axiom.js +1 -2
  4. package/lib/element/link.js +11 -15
  5. package/lib/element/metavariable.js +1 -59
  6. package/lib/element/schema.js +17 -21
  7. package/lib/element/signature.js +10 -3
  8. package/lib/element/statement.js +1 -17
  9. package/lib/element/subproof.js +2 -3
  10. package/lib/example/nominal/bnf.js +1 -9
  11. package/lib/nonTerminalNodeMap.js +1 -7
  12. package/lib/preamble.js +1 -2
  13. package/lib/process/instantiate.js +2 -8
  14. package/lib/process/unify.js +2 -17
  15. package/lib/ruleNames.js +1 -13
  16. package/lib/utilities/element.js +1 -32
  17. package/lib/utilities/json.js +2 -2
  18. package/lib/utilities/string.js +1 -8
  19. package/package.json +5 -5
  20. package/src/element/assertion/subproof.js +2 -2
  21. package/src/element/assumption.js +85 -100
  22. package/src/element/claim/axiom.js +0 -2
  23. package/src/element/link.js +14 -19
  24. package/src/element/metavariable.js +0 -102
  25. package/src/element/schema.js +23 -31
  26. package/src/element/signature.js +19 -3
  27. package/src/element/statement.js +0 -26
  28. package/src/element/subproof.js +1 -3
  29. package/src/example/nominal/bnf.js +0 -8
  30. package/src/nonTerminalNodeMap.js +0 -9
  31. package/src/preamble.js +0 -1
  32. package/src/process/instantiate.js +0 -4
  33. package/src/process/unify.js +0 -23
  34. package/src/ruleNames.js +0 -3
  35. package/src/utilities/element.js +0 -40
  36. package/src/utilities/json.js +2 -2
  37. package/src/utilities/string.js +0 -8
  38. package/lib/element/substitution/frame.js +0 -187
  39. package/lib/node/equivalence.js +0 -23
  40. package/lib/node/equivalences.js +0 -18
  41. package/lib/node/substitution/frame.js +0 -40
  42. package/src/element/substitution/frame.js +0 -261
  43. package/src/node/equivalence.js +0 -16
  44. package/src/node/equivalences.js +0 -7
  45. package/src/node/substitution/frame.js +0 -37
@@ -132,9 +132,9 @@ const _default = (0, _elements.define)(class SubproofAssertion extends _assertio
132
132
  if (suppositionsLength !== supposedStatementsLength) {
133
133
  return back();
134
134
  }
135
- return backwardsEvery(suppositions, (supposition, forward, back, index)=>{
135
+ return backwardsEvery(suppositions, (supposition, generalContext, specificContext, forward, back, index)=>{
136
136
  return this.unifySupposition(supposition, generalContext, specificContext, forward, back, index);
137
- }, forward, back);
137
+ }, generalContext, specificContext, forward, back);
138
138
  }
139
139
  toJSON() {
140
140
  let json;
@@ -171,4 +171,4 @@ function statementsFromSubproofAssertionNode(subproofAssertionNode, context) {
171
171
  return statements;
172
172
  }
173
173
 
174
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2Fzc2VydGlvbi9zdWJwcm9vZi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5pbXBvcnQgeyBjb250aW51YXRpb25VdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCBBc3NlcnRpb24gZnJvbSBcIi4uL2Fzc2VydGlvblwiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGRlY2xhcmUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL3N0YXRlXCI7XG5pbXBvcnQgeyBqb2luLCByZWNvbmNpbGUsIGluc3RhbnRpYXRlIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZVN1YnByb29mQXNzZXJ0aW9uIH0gZnJvbSBcIi4uLy4uL3Byb2Nlc3MvaW5zdGFudGlhdGVcIjtcbmltcG9ydCB7IHN1YnByb29mQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2VsZW1lbnRcIjtcblxuY29uc3QgeyBsYXN0LCBmcm9udCB9ID0gYXJyYXlVdGlsaXRpZXMsXG4gICAgICB7IGFsbCwgZXZlcnksIGJhY2t3YXJkc0V2ZXJ5IH0gPSBjb250aW51YXRpb25VdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBTdWJwcm9vZkFzc2VydGlvbiBleHRlbmRzIEFzc2VydGlvbiB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50cykge1xuICAgIHN1cGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCk7XG5cbiAgICB0aGlzLnN0YXRlbWVudHMgPSBzdGF0ZW1lbnRzO1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50cygpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZW1lbnRzO1xuICB9XG5cbiAgZ2V0RGVkdWNlZFN0YXRlbWVudCgpIHtcbiAgICBjb25zdCBsYXN0U3RhdGVtZW50ID0gbGFzdCh0aGlzLnN0YXRlbWVudHMpLFxuICAgICAgICAgIGRlZHVjZWRTdGF0ZW1lbnQgPSBsYXN0U3RhdGVtZW50OyAvLy9cblxuICAgIHJldHVybiBkZWR1Y2VkU3RhdGVtZW50O1xuICB9XG5cbiAgZ2V0U3VwcG9zZWRTdGF0ZW1lbnRzKCkge1xuICAgIGNvbnN0IGZyb250U3RhdGVtZW50cyA9IGZyb250KHRoaXMuc3RhdGVtZW50cyksXG4gICAgICAgICAgc3VwcG9zZWRTdGF0ZW1lbnRzID0gZnJvbnRTdGF0ZW1lbnRzOyAgLy8vXG5cbiAgICByZXR1cm4gc3VwcG9zZWRTdGF0ZW1lbnRzO1xuICB9XG5cbiAgZ2V0U3VwcG9zZWRTdGF0ZW1lbnQoaW5kZXgpIHtcbiAgICBjb25zdCBzdXBwb3NlZFN0YXRlbWVudHMgPSB0aGlzLmdldFN1cHBvc2VkU3RhdGVtZW50cygpLFxuICAgICAgICAgIHN1cHBvc2VkU3RhdGVtZW50ID0gc3VwcG9zZWRTdGF0ZW1lbnRzW2luZGV4XTtcblxuICAgIHJldHVybiBzdXBwb3NlZFN0YXRlbWVudDtcbiAgfVxuXG4gIGdldFN1YnByb29mQXNzZXJ0aW9uTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgc3VicHJvb2ZBc3NlcnRpb25Ob2RlID0gbm9kZTsgLy8vXG5cbiAgICByZXR1cm4gc3VicHJvb2ZBc3NlcnRpb25Ob2RlO1xuICB9XG5cbiAgdmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBsZXQgYXNzZXJ0aW9uO1xuXG4gICAgY29uc3Qgc3VicHJvb2ZBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdWJwcm9vZkFzc2VydGlvblN0cmluZ30nIHN1YnByb29mIGFzc2VydGlvbi4uLmApO1xuXG4gICAgYXNzZXJ0aW9uID0gdGhpcy5maW5kQXNzZXJ0aW9uKGNvbnRleHQpO1xuXG4gICAgaWYgKGFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc3VicHJvb2ZBc3NlcnRpb24gPSBhc3NlcnRpb247IC8vL1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7c3VicHJvb2ZBc3NlcnRpb25TdHJpbmd9JyBzdWJwcm9vZiBhc3NlcnRpb24gaXMgYWxyZWFkeSBwcmVzZW50LmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZCAoc3VicHJvb2ZBc3NlcnRpb24sIGNvbnRleHQpO1xuICAgIH1cblxuICAgIGFzc2VydGlvbiA9IHRoaXM7IC8vL1xuXG4gICAgY29uc3QgdmFsaWRhdGVTdGF0ZW1lbnRzID0gdGhpcy52YWxpZGF0ZVN0YXRlbWVudHMuYmluZCh0aGlzKTtcblxuICAgIHJldHVybiBhbGwoW1xuICAgICAgdmFsaWRhdGVTdGF0ZW1lbnRzXG4gICAgXSwgc3RhdGUsIGNvbnRleHQsIChzdGF0ZSwgY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgY29udGV4dC5hZGRBc3NlcnRpb24oYXNzZXJ0aW9uKTtcblxuICAgICAgY29uc3Qgc3VicHJvb2ZBc3NlcnRpb24gPSBhc3NlcnRpb247IC8vL1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N1YnByb29mQXNzZXJ0aW9uU3RyaW5nfScgc3VicHJvb2YgYXNzZXJ0aW9uLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChzdWJwcm9vZkFzc2VydGlvbiwgY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB2YWxpZGF0ZVN0YXRlbWVudHMoc3RhdGUsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBzdWJwcm9vZkFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N1YnByb29mQXNzZXJ0aW9uU3RyaW5nfScgc3VicHJvb2YgYXNzZXJ0aW9uJ3Mgc3RhdGVtZW50cy4uLmApO1xuXG4gICAgcmV0dXJuIGV2ZXJ5KHRoaXMuc3RhdGVtZW50cywgKHN0YXRlbWVudCwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykgPT4ge1xuICAgICAgcmV0dXJuIGRlY2xhcmUoKHN0YXRlKSA9PiB7XG4gICAgICAgIHJldHVybiBzdGF0ZW1lbnQudmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIChzdGF0ZW1lbnQsIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgICAgICByZXR1cm4gZm9yd2FyZChjb250ZXh0LCBiYWNrKTtcbiAgICAgICAgfSwgYmFjayk7XG4gICAgICB9KTtcbiAgICB9LCBjb250ZXh0LCAoY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdWJwcm9vZkFzc2VydGlvblN0cmluZ30nIHN1YnByb29mIGFzc2VydGlvbidzIHN0YXRlbWVudHMuYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKHN0YXRlLCBjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHVuaWZ5U3VicHJvb2Yoc3VicHJvb2YsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgc3VicHJvb2ZTdHJpbmcgPSBzdWJwcm9vZi5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzdWJwcm9vZkFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N1YnByb29mU3RyaW5nfScgc3VicHJvb2Ygd2l0aCB0aGUgJyR7c3VicHJvb2ZBc3NlcnRpb25TdHJpbmd9JyBzdWJwcm9vZiBhc3NlcnRpb24uLi5gKTtcblxuICAgIGNvbnN0IGxhc3RTdGVwID0gc3VicHJvb2YuZ2V0TGFzdFN0ZXAoKTtcblxuICAgIHJldHVybiB0aGlzLnVuaWZ5TGFzdFN0ZXAobGFzdFN0ZXAsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICBjb25zdCBzdXBwb3NpdGlvbnMgPSBzdWJwcm9vZi5nZXRTdXBwb3NpdGlvbnMoKTtcblxuICAgICAgcmV0dXJuIHRoaXMudW5pZnlTdXBwb3NpdGlvbnMoc3VwcG9zaXRpb25zLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdWJwcm9vZlN0cmluZ30nIHN1YnByb29mIHdpdGggdGhlICcke3N1YnByb29mQXNzZXJ0aW9uU3RyaW5nfScgc3VicHJvb2YgYXNzZXJ0aW9uLmApO1xuXG4gICAgICAgIHJldHVybiBmb3J3YXJkKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spO1xuICAgICAgfSwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB1bmlmeUxhc3RTdGVwKGxhc3RTdGVwLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgIGxhc3RTdGVwU3RyaW5nID0gbGFzdFN0ZXAuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgZGVkdWNlZFN0YXRlbWVudCA9IHRoaXMuZ2V0RGVkdWNlZFN0YXRlbWVudCgpLFxuICAgICAgICAgIGRlZHVjZWRTdGF0ZW1lbnRTdHJpbmcgPSBkZWR1Y2VkU3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke2xhc3RTdGVwU3RyaW5nfScgbGFzdCBzdGVwIHdpdGggdGhlICcke2RlZHVjZWRTdGF0ZW1lbnRTdHJpbmd9JyBkZWR1Y2VkIHN0YXRlbWVudC4uLmApXG5cbiAgICBjb25zdCBsYXN0U3RlcENvbnRleHQgPSBsYXN0U3RlcC5nZXRDb250ZXh0KCk7XG5cbiAgICBzcGVjaWZpY0NvbnRleHQgPSBsYXN0U3RlcENvbnRleHQ7ICAvLy9cblxuICAgIHJldHVybiBqb2luKChzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgIHJldHVybiByZWNvbmNpbGUoKHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCBsYXN0U3RlcFN0YXRlbWVudCA9IGxhc3RTdGVwLmdldFN0YXRlbWVudCgpO1xuXG4gICAgICAgIHJldHVybiBkZWR1Y2VkU3RhdGVtZW50LnVuaWZ5U3RhdGVtZW50KGxhc3RTdGVwU3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgICAgIHNwZWNpZmljQ29udGV4dC5jb21taXQoY29udGV4dCk7XG5cbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHQgPSBjb250ZXh0OyAgLy8vXG5cbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtsYXN0U3RlcFN0cmluZ30nIGxhc3Qgc3RlcCB3aXRoIHRoZSAnJHtkZWR1Y2VkU3RhdGVtZW50U3RyaW5nfScgZGVkdWNlZCBzdGF0ZW1lbnQuYCk7XG5cbiAgICAgICAgICByZXR1cm4gZm9yd2FyZChnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBiYWNrKTtcbiAgICAgICAgfSwgYmFjayk7XG4gICAgICB9LCBzcGVjaWZpY0NvbnRleHQpO1xuICAgIH0sIHNwZWNpZmljQ29udGV4dCwgY29udGV4dCk7XG4gfVxuXG4gIHVuaWZ5U3VwcG9zaXRpb24oc3VwcG9zaXRpb24sIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGZvcndhcmQsIGJhY2ssIGluZGV4KSB7XG4gICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgIHN1cHBvc2l0aW9uU3RyaW5nID0gc3VwcG9zaXRpb24uZ2V0U3RyaW5nKCksXG4gICAgICAgICAgc3VwcG9zZWRTdGF0ZW1lbnQgPSB0aGlzLmdldFN1cHBvc2VkU3RhdGVtZW50KGluZGV4KSxcbiAgICAgICAgICBzdXBwb3NlZFN0YXRlbWVudFN0cmluZyA9IHN1cHBvc2VkU3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N1cHBvc2l0aW9uU3RyaW5nfScgc3VwcG9zaXRpb24gd2l0aCB0aGUgJyR7c3VwcG9zZWRTdGF0ZW1lbnRTdHJpbmd9JyBzdXBwb3NlZCBzdGF0ZW1lbnQuLi5gKVxuXG4gICAgY29uc3Qgc3VwcG9zaXRpb25Db250ZXh0ID0gc3VwcG9zaXRpb24uZ2V0Q29udGV4dCgpO1xuXG4gICAgc3BlY2lmaWNDb250ZXh0ID0gc3VwcG9zaXRpb25Db250ZXh0OyAgLy8vXG5cbiAgICByZXR1cm4gam9pbigoc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICByZXR1cm4gcmVjb25jaWxlKChzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3Qgc3VwcG9zaXRpb25TdGF0ZW1lbnQgPSBzdXBwb3NpdGlvbi5nZXRTdGF0ZW1lbnQoKTtcblxuICAgICAgICByZXR1cm4gc3VwcG9zZWRTdGF0ZW1lbnQudW5pZnlTdGF0ZW1lbnQoc3VwcG9zaXRpb25TdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0LmNvbW1pdChjb250ZXh0KTtcblxuICAgICAgICAgIHNwZWNpZmljQ29udGV4dCA9IGNvbnRleHQ7ICAvLy9cblxuICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N1cHBvc2l0aW9uU3RyaW5nfScgc3VwcG9zaXRpb24gd2l0aCB0aGUgJyR7c3VwcG9zZWRTdGF0ZW1lbnRTdHJpbmd9JyBzdXBwb3NlZCBzdGF0ZW1lbnQuYClcblxuICAgICAgICAgIHJldHVybiBmb3J3YXJkKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spO1xuICAgICAgICB9LCBiYWNrKTtcbiAgICAgIH0sIHNwZWNpZmljQ29udGV4dCk7XG4gICAgfSwgc3BlY2lmaWNDb250ZXh0LCBjb250ZXh0KTtcbiAgfVxuXG4gIHVuaWZ5U3VwcG9zaXRpb25zKHN1cHBvc2l0aW9ucywgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IHN1cHBvc2VkU3RhdGVtZW50cyA9IHRoaXMuZ2V0U3VwcG9zZWRTdGF0ZW1lbnRzKCksXG4gICAgICAgICAgc3VwcG9zaXRpb25zTGVuZ3RoID0gc3VwcG9zaXRpb25zLmxlbmd0aCxcbiAgICAgICAgICBzdXBwb3NlZFN0YXRlbWVudHNMZW5ndGggPSBzdXBwb3NlZFN0YXRlbWVudHMubGVuZ3RoO1xuXG4gICAgaWYgKHN1cHBvc2l0aW9uc0xlbmd0aCAhPT0gc3VwcG9zZWRTdGF0ZW1lbnRzTGVuZ3RoKSB7XG4gICAgICByZXR1cm4gYmFjaygpO1xuICAgIH1cblxuICAgIHJldHVybiBiYWNrd2FyZHNFdmVyeShzdXBwb3NpdGlvbnMsIChzdXBwb3NpdGlvbiwgZm9yd2FyZCwgYmFjaywgaW5kZXgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnVuaWZ5U3VwcG9zaXRpb24oc3VwcG9zaXRpb24sIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGZvcndhcmQsIGJhY2ssIGluZGV4KTtcbiAgICB9LCBmb3J3YXJkLCBiYWNrKTtcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICBsZXQganNvbjtcblxuICAgIGNvbnN0IG5hbWUgPSB0aGlzLmdldE5hbWUoKSxcbiAgICAgICAgICBzdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAganNvbiA9IHtcbiAgICAgIG5hbWUsXG4gICAgICBzdHJpbmdcbiAgICB9O1xuXG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiU3VicHJvb2ZBc3NlcnRpb25cIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIGxldCBzdWJwcm9vckFzc2VydGlvbiA9IG51bGw7XG5cbiAgICBjb25zdCB7IG5hbWUgfSA9IGpzb247XG5cbiAgICBpZiAodGhpcy5uYW1lID09PSBuYW1lKSB7XG4gICAgICBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCB7IHN0cmluZyB9ID0ganNvbixcbiAgICAgICAgICAgICAgc3VicHJvb2ZBc3NlcnRpb25Ob2RlID0gaW5zdGFudGlhdGVTdWJwcm9vZkFzc2VydGlvbihzdHJpbmcsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBub2RlID0gc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCAgLy8vXG4gICAgICAgICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICAgICAgICBzdGF0ZW1lbnRzID0gc3RhdGVtZW50c0Zyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcblxuICAgICAgICBjb250ZXh0ID0gbnVsbDtcblxuICAgICAgICBzdWJwcm9vckFzc2VydGlvbiA9IG5ldyBTdWJwcm9vZkFzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudHMpO1xuICAgICAgfSwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1YnByb29yQXNzZXJ0aW9uO1xuICB9XG5cbiAgc3RhdGljIGZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KSB7XG4gICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudC5nZXROb2RlKCksXG4gICAgICAgICAgc3VicHJvb2ZBc3NlcnRpb24gPSBzdWJwcm9vZkFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHN1YnByb29mQXNzZXJ0aW9uO1xuICB9XG59KTtcblxuZnVuY3Rpb24gc3RhdGVtZW50c0Zyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGVzID0gc3VicHJvb2ZBc3NlcnRpb25Ob2RlLmdldFN0YXRlbWVudE5vZGVzKCksXG4gICAgICAgIHN0YXRlbWVudHMgPSBzdGF0ZW1lbnROb2Rlcy5tYXAoKHN0YXRlbWV0Tm9kZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHN0YXRlbWVudCA9IGNvbnRleHQuZmluZFN0YXRlbWVudEJ5U3RhdGVtZW50Tm9kZShzdGF0ZW1ldE5vZGUpO1xuXG4gICAgICAgICAgcmV0dXJuIHN0YXRlbWVudDtcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudHM7XG59XG4iXSwibmFtZXMiOlsibGFzdCIsImZyb250IiwiYXJyYXlVdGlsaXRpZXMiLCJhbGwiLCJldmVyeSIsImJhY2t3YXJkc0V2ZXJ5IiwiY29udGludWF0aW9uVXRpbGl0aWVzIiwiZGVmaW5lIiwiU3VicHJvb2ZBc3NlcnRpb24iLCJBc3NlcnRpb24iLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJzdGF0ZW1lbnRzIiwiZ2V0U3RhdGVtZW50cyIsImdldERlZHVjZWRTdGF0ZW1lbnQiLCJsYXN0U3RhdGVtZW50IiwiZGVkdWNlZFN0YXRlbWVudCIsImdldFN1cHBvc2VkU3RhdGVtZW50cyIsImZyb250U3RhdGVtZW50cyIsInN1cHBvc2VkU3RhdGVtZW50cyIsImdldFN1cHBvc2VkU3RhdGVtZW50IiwiaW5kZXgiLCJzdXBwb3NlZFN0YXRlbWVudCIsImdldFN1YnByb29mQXNzZXJ0aW9uTm9kZSIsImdldE5vZGUiLCJzdWJwcm9vZkFzc2VydGlvbk5vZGUiLCJ2YWxpZGF0ZSIsInN0YXRlIiwiZm9yd2FyZCIsImJhY2siLCJhc3NlcnRpb24iLCJzdWJwcm9vZkFzc2VydGlvblN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwiZmluZEFzc2VydGlvbiIsInN1YnByb29mQXNzZXJ0aW9uIiwiZGVidWciLCJ2YWxpZGF0ZVN0YXRlbWVudHMiLCJiaW5kIiwiYWRkQXNzZXJ0aW9uIiwic3RhdGVtZW50IiwiZGVjbGFyZSIsInVuaWZ5U3VicHJvb2YiLCJzdWJwcm9vZiIsImdlbmVyYWxDb250ZXh0Iiwic3BlY2lmaWNDb250ZXh0Iiwic3VicHJvb2ZTdHJpbmciLCJsYXN0U3RlcCIsImdldExhc3RTdGVwIiwidW5pZnlMYXN0U3RlcCIsInN1cHBvc2l0aW9ucyIsImdldFN1cHBvc2l0aW9ucyIsInVuaWZ5U3VwcG9zaXRpb25zIiwibGFzdFN0ZXBTdHJpbmciLCJkZWR1Y2VkU3RhdGVtZW50U3RyaW5nIiwibGFzdFN0ZXBDb250ZXh0IiwiZ2V0Q29udGV4dCIsImpvaW4iLCJyZWNvbmNpbGUiLCJsYXN0U3RlcFN0YXRlbWVudCIsImdldFN0YXRlbWVudCIsInVuaWZ5U3RhdGVtZW50IiwiY29tbWl0IiwidW5pZnlTdXBwb3NpdGlvbiIsInN1cHBvc2l0aW9uIiwic3VwcG9zaXRpb25TdHJpbmciLCJzdXBwb3NlZFN0YXRlbWVudFN0cmluZyIsInN1cHBvc2l0aW9uQ29udGV4dCIsInN1cHBvc2l0aW9uU3RhdGVtZW50Iiwic3VwcG9zaXRpb25zTGVuZ3RoIiwibGVuZ3RoIiwic3VwcG9zZWRTdGF0ZW1lbnRzTGVuZ3RoIiwidG9KU09OIiwianNvbiIsIm5hbWUiLCJnZXROYW1lIiwiZnJvbUpTT04iLCJzdWJwcm9vckFzc2VydGlvbiIsImluc3RhbnRpYXRlIiwiaW5zdGFudGlhdGVTdWJwcm9vZkFzc2VydGlvbiIsInN0YXRlbWVudHNGcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwiZnJvbVN0YXRlbWVudCIsInN0YXRlbWVudE5vZGUiLCJzdWJwcm9vZkFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50Tm9kZXMiLCJnZXRTdGF0ZW1lbnROb2RlcyIsIm1hcCIsInN0YXRlbWV0Tm9kZSIsImZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWdCQTs7O2VBQUE7OzsyQkFkK0I7Z0NBQ087a0VBRWhCOzBCQUVDO3VCQUNDO3lCQUNxQjs2QkFDQTt5QkFDTTs7Ozs7O0FBRW5ELE1BQU0sRUFBRUEsSUFBSSxFQUFFQyxLQUFLLEVBQUUsR0FBR0MseUJBQWMsRUFDaEMsRUFBRUMsR0FBRyxFQUFFQyxLQUFLLEVBQUVDLGNBQWMsRUFBRSxHQUFHQyxxQ0FBcUI7TUFFNUQsV0FBZUMsSUFBQUEsZ0JBQU0sRUFBQyxNQUFNQywwQkFBMEJDLGtCQUFTO0lBQzdELFlBQVlDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLFVBQVUsRUFBRUMsVUFBVSxDQUFFO1FBQ3pELEtBQUssQ0FBQ0osU0FBU0MsUUFBUUMsTUFBTUM7UUFFN0IsSUFBSSxDQUFDQyxVQUFVLEdBQUdBO0lBQ3BCO0lBRUFDLGdCQUFnQjtRQUNkLE9BQU8sSUFBSSxDQUFDRCxVQUFVO0lBQ3hCO0lBRUFFLHNCQUFzQjtRQUNwQixNQUFNQyxnQkFBZ0JqQixLQUFLLElBQUksQ0FBQ2MsVUFBVSxHQUNwQ0ksbUJBQW1CRCxlQUFlLEdBQUc7UUFFM0MsT0FBT0M7SUFDVDtJQUVBQyx3QkFBd0I7UUFDdEIsTUFBTUMsa0JBQWtCbkIsTUFBTSxJ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
174
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2Fzc2VydGlvbi9zdWJwcm9vZi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5pbXBvcnQgeyBjb250aW51YXRpb25VdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCBBc3NlcnRpb24gZnJvbSBcIi4uL2Fzc2VydGlvblwiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGRlY2xhcmUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL3N0YXRlXCI7XG5pbXBvcnQgeyBqb2luLCByZWNvbmNpbGUsIGluc3RhbnRpYXRlIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZVN1YnByb29mQXNzZXJ0aW9uIH0gZnJvbSBcIi4uLy4uL3Byb2Nlc3MvaW5zdGFudGlhdGVcIjtcbmltcG9ydCB7IHN1YnByb29mQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2VsZW1lbnRcIjtcblxuY29uc3QgeyBsYXN0LCBmcm9udCB9ID0gYXJyYXlVdGlsaXRpZXMsXG4gICAgICB7IGFsbCwgZXZlcnksIGJhY2t3YXJkc0V2ZXJ5IH0gPSBjb250aW51YXRpb25VdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBTdWJwcm9vZkFzc2VydGlvbiBleHRlbmRzIEFzc2VydGlvbiB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50cykge1xuICAgIHN1cGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCk7XG5cbiAgICB0aGlzLnN0YXRlbWVudHMgPSBzdGF0ZW1lbnRzO1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50cygpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZW1lbnRzO1xuICB9XG5cbiAgZ2V0RGVkdWNlZFN0YXRlbWVudCgpIHtcbiAgICBjb25zdCBsYXN0U3RhdGVtZW50ID0gbGFzdCh0aGlzLnN0YXRlbWVudHMpLFxuICAgICAgICAgIGRlZHVjZWRTdGF0ZW1lbnQgPSBsYXN0U3RhdGVtZW50OyAvLy9cblxuICAgIHJldHVybiBkZWR1Y2VkU3RhdGVtZW50O1xuICB9XG5cbiAgZ2V0U3VwcG9zZWRTdGF0ZW1lbnRzKCkge1xuICAgIGNvbnN0IGZyb250U3RhdGVtZW50cyA9IGZyb250KHRoaXMuc3RhdGVtZW50cyksXG4gICAgICAgICAgc3VwcG9zZWRTdGF0ZW1lbnRzID0gZnJvbnRTdGF0ZW1lbnRzOyAgLy8vXG5cbiAgICByZXR1cm4gc3VwcG9zZWRTdGF0ZW1lbnRzO1xuICB9XG5cbiAgZ2V0U3VwcG9zZWRTdGF0ZW1lbnQoaW5kZXgpIHtcbiAgICBjb25zdCBzdXBwb3NlZFN0YXRlbWVudHMgPSB0aGlzLmdldFN1cHBvc2VkU3RhdGVtZW50cygpLFxuICAgICAgICAgIHN1cHBvc2VkU3RhdGVtZW50ID0gc3VwcG9zZWRTdGF0ZW1lbnRzW2luZGV4XTtcblxuICAgIHJldHVybiBzdXBwb3NlZFN0YXRlbWVudDtcbiAgfVxuXG4gIGdldFN1YnByb29mQXNzZXJ0aW9uTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgc3VicHJvb2ZBc3NlcnRpb25Ob2RlID0gbm9kZTsgLy8vXG5cbiAgICByZXR1cm4gc3VicHJvb2ZBc3NlcnRpb25Ob2RlO1xuICB9XG5cbiAgdmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBsZXQgYXNzZXJ0aW9uO1xuXG4gICAgY29uc3Qgc3VicHJvb2ZBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdWJwcm9vZkFzc2VydGlvblN0cmluZ30nIHN1YnByb29mIGFzc2VydGlvbi4uLmApO1xuXG4gICAgYXNzZXJ0aW9uID0gdGhpcy5maW5kQXNzZXJ0aW9uKGNvbnRleHQpO1xuXG4gICAgaWYgKGFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc3VicHJvb2ZBc3NlcnRpb24gPSBhc3NlcnRpb247IC8vL1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7c3VicHJvb2ZBc3NlcnRpb25TdHJpbmd9JyBzdWJwcm9vZiBhc3NlcnRpb24gaXMgYWxyZWFkeSBwcmVzZW50LmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZCAoc3VicHJvb2ZBc3NlcnRpb24sIGNvbnRleHQpO1xuICAgIH1cblxuICAgIGFzc2VydGlvbiA9IHRoaXM7IC8vL1xuXG4gICAgY29uc3QgdmFsaWRhdGVTdGF0ZW1lbnRzID0gdGhpcy52YWxpZGF0ZVN0YXRlbWVudHMuYmluZCh0aGlzKTtcblxuICAgIHJldHVybiBhbGwoW1xuICAgICAgdmFsaWRhdGVTdGF0ZW1lbnRzXG4gICAgXSwgc3RhdGUsIGNvbnRleHQsIChzdGF0ZSwgY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgY29udGV4dC5hZGRBc3NlcnRpb24oYXNzZXJ0aW9uKTtcblxuICAgICAgY29uc3Qgc3VicHJvb2ZBc3NlcnRpb24gPSBhc3NlcnRpb247IC8vL1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N1YnByb29mQXNzZXJ0aW9uU3RyaW5nfScgc3VicHJvb2YgYXNzZXJ0aW9uLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChzdWJwcm9vZkFzc2VydGlvbiwgY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB2YWxpZGF0ZVN0YXRlbWVudHMoc3RhdGUsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBzdWJwcm9vZkFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N1YnByb29mQXNzZXJ0aW9uU3RyaW5nfScgc3VicHJvb2YgYXNzZXJ0aW9uJ3Mgc3RhdGVtZW50cy4uLmApO1xuXG4gICAgcmV0dXJuIGV2ZXJ5KHRoaXMuc3RhdGVtZW50cywgKHN0YXRlbWVudCwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykgPT4ge1xuICAgICAgcmV0dXJuIGRlY2xhcmUoKHN0YXRlKSA9PiB7XG4gICAgICAgIHJldHVybiBzdGF0ZW1lbnQudmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIChzdGF0ZW1lbnQsIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgICAgICByZXR1cm4gZm9yd2FyZChjb250ZXh0LCBiYWNrKTtcbiAgICAgICAgfSwgYmFjayk7XG4gICAgICB9KTtcbiAgICB9LCBjb250ZXh0LCAoY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdWJwcm9vZkFzc2VydGlvblN0cmluZ30nIHN1YnByb29mIGFzc2VydGlvbidzIHN0YXRlbWVudHMuYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKHN0YXRlLCBjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHVuaWZ5U3VicHJvb2Yoc3VicHJvb2YsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgc3VicHJvb2ZTdHJpbmcgPSBzdWJwcm9vZi5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzdWJwcm9vZkFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N1YnByb29mU3RyaW5nfScgc3VicHJvb2Ygd2l0aCB0aGUgJyR7c3VicHJvb2ZBc3NlcnRpb25TdHJpbmd9JyBzdWJwcm9vZiBhc3NlcnRpb24uLi5gKTtcblxuICAgIGNvbnN0IGxhc3RTdGVwID0gc3VicHJvb2YuZ2V0TGFzdFN0ZXAoKTtcblxuICAgIHJldHVybiB0aGlzLnVuaWZ5TGFzdFN0ZXAobGFzdFN0ZXAsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICBjb25zdCBzdXBwb3NpdGlvbnMgPSBzdWJwcm9vZi5nZXRTdXBwb3NpdGlvbnMoKTtcblxuICAgICAgcmV0dXJuIHRoaXMudW5pZnlTdXBwb3NpdGlvbnMoc3VwcG9zaXRpb25zLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdWJwcm9vZlN0cmluZ30nIHN1YnByb29mIHdpdGggdGhlICcke3N1YnByb29mQXNzZXJ0aW9uU3RyaW5nfScgc3VicHJvb2YgYXNzZXJ0aW9uLmApO1xuXG4gICAgICAgIHJldHVybiBmb3J3YXJkKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spO1xuICAgICAgfSwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB1bmlmeUxhc3RTdGVwKGxhc3RTdGVwLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgIGxhc3RTdGVwU3RyaW5nID0gbGFzdFN0ZXAuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgZGVkdWNlZFN0YXRlbWVudCA9IHRoaXMuZ2V0RGVkdWNlZFN0YXRlbWVudCgpLFxuICAgICAgICAgIGRlZHVjZWRTdGF0ZW1lbnRTdHJpbmcgPSBkZWR1Y2VkU3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke2xhc3RTdGVwU3RyaW5nfScgbGFzdCBzdGVwIHdpdGggdGhlICcke2RlZHVjZWRTdGF0ZW1lbnRTdHJpbmd9JyBkZWR1Y2VkIHN0YXRlbWVudC4uLmApXG5cbiAgICBjb25zdCBsYXN0U3RlcENvbnRleHQgPSBsYXN0U3RlcC5nZXRDb250ZXh0KCk7XG5cbiAgICBzcGVjaWZpY0NvbnRleHQgPSBsYXN0U3RlcENvbnRleHQ7ICAvLy9cblxuICAgIHJldHVybiBqb2luKChzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgIHJldHVybiByZWNvbmNpbGUoKHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCBsYXN0U3RlcFN0YXRlbWVudCA9IGxhc3RTdGVwLmdldFN0YXRlbWVudCgpO1xuXG4gICAgICAgIHJldHVybiBkZWR1Y2VkU3RhdGVtZW50LnVuaWZ5U3RhdGVtZW50KGxhc3RTdGVwU3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgICAgIHNwZWNpZmljQ29udGV4dC5jb21taXQoY29udGV4dCk7XG5cbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHQgPSBjb250ZXh0OyAgLy8vXG5cbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtsYXN0U3RlcFN0cmluZ30nIGxhc3Qgc3RlcCB3aXRoIHRoZSAnJHtkZWR1Y2VkU3RhdGVtZW50U3RyaW5nfScgZGVkdWNlZCBzdGF0ZW1lbnQuYCk7XG5cbiAgICAgICAgICByZXR1cm4gZm9yd2FyZChnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBiYWNrKTtcbiAgICAgICAgfSwgYmFjayk7XG4gICAgICB9LCBzcGVjaWZpY0NvbnRleHQpO1xuICAgIH0sIHNwZWNpZmljQ29udGV4dCwgY29udGV4dCk7XG4gfVxuXG4gIHVuaWZ5U3VwcG9zaXRpb24oc3VwcG9zaXRpb24sIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGZvcndhcmQsIGJhY2ssIGluZGV4KSB7XG4gICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgIHN1cHBvc2l0aW9uU3RyaW5nID0gc3VwcG9zaXRpb24uZ2V0U3RyaW5nKCksXG4gICAgICAgICAgc3VwcG9zZWRTdGF0ZW1lbnQgPSB0aGlzLmdldFN1cHBvc2VkU3RhdGVtZW50KGluZGV4KSxcbiAgICAgICAgICBzdXBwb3NlZFN0YXRlbWVudFN0cmluZyA9IHN1cHBvc2VkU3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N1cHBvc2l0aW9uU3RyaW5nfScgc3VwcG9zaXRpb24gd2l0aCB0aGUgJyR7c3VwcG9zZWRTdGF0ZW1lbnRTdHJpbmd9JyBzdXBwb3NlZCBzdGF0ZW1lbnQuLi5gKVxuXG4gICAgY29uc3Qgc3VwcG9zaXRpb25Db250ZXh0ID0gc3VwcG9zaXRpb24uZ2V0Q29udGV4dCgpO1xuXG4gICAgc3BlY2lmaWNDb250ZXh0ID0gc3VwcG9zaXRpb25Db250ZXh0OyAgLy8vXG5cbiAgICByZXR1cm4gam9pbigoc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICByZXR1cm4gcmVjb25jaWxlKChzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3Qgc3VwcG9zaXRpb25TdGF0ZW1lbnQgPSBzdXBwb3NpdGlvbi5nZXRTdGF0ZW1lbnQoKTtcblxuICAgICAgICByZXR1cm4gc3VwcG9zZWRTdGF0ZW1lbnQudW5pZnlTdGF0ZW1lbnQoc3VwcG9zaXRpb25TdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0LmNvbW1pdChjb250ZXh0KTtcblxuICAgICAgICAgIHNwZWNpZmljQ29udGV4dCA9IGNvbnRleHQ7ICAvLy9cblxuICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N1cHBvc2l0aW9uU3RyaW5nfScgc3VwcG9zaXRpb24gd2l0aCB0aGUgJyR7c3VwcG9zZWRTdGF0ZW1lbnRTdHJpbmd9JyBzdXBwb3NlZCBzdGF0ZW1lbnQuYClcblxuICAgICAgICAgIHJldHVybiBmb3J3YXJkKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spO1xuICAgICAgICB9LCBiYWNrKTtcbiAgICAgIH0sIHNwZWNpZmljQ29udGV4dCk7XG4gICAgfSwgc3BlY2lmaWNDb250ZXh0LCBjb250ZXh0KTtcbiAgfVxuXG4gIHVuaWZ5U3VwcG9zaXRpb25zKHN1cHBvc2l0aW9ucywgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IHN1cHBvc2VkU3RhdGVtZW50cyA9IHRoaXMuZ2V0U3VwcG9zZWRTdGF0ZW1lbnRzKCksXG4gICAgICAgICAgc3VwcG9zaXRpb25zTGVuZ3RoID0gc3VwcG9zaXRpb25zLmxlbmd0aCxcbiAgICAgICAgICBzdXBwb3NlZFN0YXRlbWVudHNMZW5ndGggPSBzdXBwb3NlZFN0YXRlbWVudHMubGVuZ3RoO1xuXG4gICAgaWYgKHN1cHBvc2l0aW9uc0xlbmd0aCAhPT0gc3VwcG9zZWRTdGF0ZW1lbnRzTGVuZ3RoKSB7XG4gICAgICByZXR1cm4gYmFjaygpO1xuICAgIH1cblxuICAgIHJldHVybiBiYWNrd2FyZHNFdmVyeShzdXBwb3NpdGlvbnMsIChzdXBwb3NpdGlvbiwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgZm9yd2FyZCwgYmFjaywgaW5kZXgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnVuaWZ5U3VwcG9zaXRpb24oc3VwcG9zaXRpb24sIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGZvcndhcmQsIGJhY2ssIGluZGV4KTtcbiAgICB9LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBmb3J3YXJkLCBiYWNrKTtcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICBsZXQganNvbjtcblxuICAgIGNvbnN0IG5hbWUgPSB0aGlzLmdldE5hbWUoKSxcbiAgICAgICAgICBzdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAganNvbiA9IHtcbiAgICAgIG5hbWUsXG4gICAgICBzdHJpbmdcbiAgICB9O1xuXG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiU3VicHJvb2ZBc3NlcnRpb25cIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIGxldCBzdWJwcm9vckFzc2VydGlvbiA9IG51bGw7XG5cbiAgICBjb25zdCB7IG5hbWUgfSA9IGpzb247XG5cbiAgICBpZiAodGhpcy5uYW1lID09PSBuYW1lKSB7XG4gICAgICBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCB7IHN0cmluZyB9ID0ganNvbixcbiAgICAgICAgICAgICAgc3VicHJvb2ZBc3NlcnRpb25Ob2RlID0gaW5zdGFudGlhdGVTdWJwcm9vZkFzc2VydGlvbihzdHJpbmcsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBub2RlID0gc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCAgLy8vXG4gICAgICAgICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICAgICAgICBzdGF0ZW1lbnRzID0gc3RhdGVtZW50c0Zyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcblxuICAgICAgICBjb250ZXh0ID0gbnVsbDtcblxuICAgICAgICBzdWJwcm9vckFzc2VydGlvbiA9IG5ldyBTdWJwcm9vZkFzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudHMpO1xuICAgICAgfSwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1YnByb29yQXNzZXJ0aW9uO1xuICB9XG5cbiAgc3RhdGljIGZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KSB7XG4gICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudC5nZXROb2RlKCksXG4gICAgICAgICAgc3VicHJvb2ZBc3NlcnRpb24gPSBzdWJwcm9vZkFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHN1YnByb29mQXNzZXJ0aW9uO1xuICB9XG59KTtcblxuZnVuY3Rpb24gc3RhdGVtZW50c0Zyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGVzID0gc3VicHJvb2ZBc3NlcnRpb25Ob2RlLmdldFN0YXRlbWVudE5vZGVzKCksXG4gICAgICAgIHN0YXRlbWVudHMgPSBzdGF0ZW1lbnROb2Rlcy5tYXAoKHN0YXRlbWV0Tm9kZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHN0YXRlbWVudCA9IGNvbnRleHQuZmluZFN0YXRlbWVudEJ5U3RhdGVtZW50Tm9kZShzdGF0ZW1ldE5vZGUpO1xuXG4gICAgICAgICAgcmV0dXJuIHN0YXRlbWVudDtcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudHM7XG59XG4iXSwibmFtZXMiOlsibGFzdCIsImZyb250IiwiYXJyYXlVdGlsaXRpZXMiLCJhbGwiLCJldmVyeSIsImJhY2t3YXJkc0V2ZXJ5IiwiY29udGludWF0aW9uVXRpbGl0aWVzIiwiZGVmaW5lIiwiU3VicHJvb2ZBc3NlcnRpb24iLCJBc3NlcnRpb24iLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJzdGF0ZW1lbnRzIiwiZ2V0U3RhdGVtZW50cyIsImdldERlZHVjZWRTdGF0ZW1lbnQiLCJsYXN0U3RhdGVtZW50IiwiZGVkdWNlZFN0YXRlbWVudCIsImdldFN1cHBvc2VkU3RhdGVtZW50cyIsImZyb250U3RhdGVtZW50cyIsInN1cHBvc2VkU3RhdGVtZW50cyIsImdldFN1cHBvc2VkU3RhdGVtZW50IiwiaW5kZXgiLCJzdXBwb3NlZFN0YXRlbWVudCIsImdldFN1YnByb29mQXNzZXJ0aW9uTm9kZSIsImdldE5vZGUiLCJzdWJwcm9vZkFzc2VydGlvbk5vZGUiLCJ2YWxpZGF0ZSIsInN0YXRlIiwiZm9yd2FyZCIsImJhY2siLCJhc3NlcnRpb24iLCJzdWJwcm9vZkFzc2VydGlvblN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwiZmluZEFzc2VydGlvbiIsInN1YnByb29mQXNzZXJ0aW9uIiwiZGVidWciLCJ2YWxpZGF0ZVN0YXRlbWVudHMiLCJiaW5kIiwiYWRkQXNzZXJ0aW9uIiwic3RhdGVtZW50IiwiZGVjbGFyZSIsInVuaWZ5U3VicHJvb2YiLCJzdWJwcm9vZiIsImdlbmVyYWxDb250ZXh0Iiwic3BlY2lmaWNDb250ZXh0Iiwic3VicHJvb2ZTdHJpbmciLCJsYXN0U3RlcCIsImdldExhc3RTdGVwIiwidW5pZnlMYXN0U3RlcCIsInN1cHBvc2l0aW9ucyIsImdldFN1cHBvc2l0aW9ucyIsInVuaWZ5U3VwcG9zaXRpb25zIiwibGFzdFN0ZXBTdHJpbmciLCJkZWR1Y2VkU3RhdGVtZW50U3RyaW5nIiwibGFzdFN0ZXBDb250ZXh0IiwiZ2V0Q29udGV4dCIsImpvaW4iLCJyZWNvbmNpbGUiLCJsYXN0U3RlcFN0YXRlbWVudCIsImdldFN0YXRlbWVudCIsInVuaWZ5U3RhdGVtZW50IiwiY29tbWl0IiwidW5pZnlTdXBwb3NpdGlvbiIsInN1cHBvc2l0aW9uIiwic3VwcG9zaXRpb25TdHJpbmciLCJzdXBwb3NlZFN0YXRlbWVudFN0cmluZyIsInN1cHBvc2l0aW9uQ29udGV4dCIsInN1cHBvc2l0aW9uU3RhdGVtZW50Iiwic3VwcG9zaXRpb25zTGVuZ3RoIiwibGVuZ3RoIiwic3VwcG9zZWRTdGF0ZW1lbnRzTGVuZ3RoIiwidG9KU09OIiwianNvbiIsIm5hbWUiLCJnZXROYW1lIiwiZnJvbUpTT04iLCJzdWJwcm9vckFzc2VydGlvbiIsImluc3RhbnRpYXRlIiwiaW5zdGFudGlhdGVTdWJwcm9vZkFzc2VydGlvbiIsInN0YXRlbWVudHNGcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwiZnJvbVN0YXRlbWVudCIsInN0YXRlbWVudE5vZGUiLCJzdWJwcm9vZkFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50Tm9kZXMiLCJnZXRTdGF0ZW1lbnROb2RlcyIsIm1hcCIsInN0YXRlbWV0Tm9kZSIsImZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWdCQTs7O2VBQUE7OzsyQkFkK0I7Z0NBQ087a0VBRWhCOzBCQUVDO3VCQUNDO3lCQUNxQjs2QkFDQTt5QkFDTTs7Ozs7O0FBRW5ELE1BQU0sRUFBRUEsSUFBSSxFQUFFQyxLQUFLLEVBQUUsR0FBR0MseUJBQWMsRUFDaEMsRUFBRUMsR0FBRyxFQUFFQyxLQUFLLEVBQUVDLGNBQWMsRUFBRSxHQUFHQyxxQ0FBcUI7TUFFNUQsV0FBZUMsSUFBQUEsZ0JBQU0sRUFBQyxNQUFNQywwQkFBMEJDLGtCQUFTO0lBQzdELFlBQVlDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLFVBQVUsRUFBRUMsVUFBVSxDQUFFO1FBQ3pELEtBQUssQ0FBQ0osU0FBU0MsUUFBUUMsTUFBTUM7UUFFN0IsSUFBSSxDQUFDQyxVQUFVLEdBQUdBO0lBQ3BCO0lBRUFDLGdCQUFnQjtRQUNkLE9BQU8sSUFBSSxDQUFDRCxVQUFVO0lBQ3hCO0lBRUFFLHNCQUFzQjtRQUNwQixNQUFNQyxnQkFBZ0JqQixLQUFLLElBQUksQ0FBQ2MsVUFBVSxHQUNwQ0ksbUJBQW1CRCxl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
@@ -10,10 +10,10 @@ Object.defineProperty(exports, "default", {
10
10
  });
11
11
  const _occamlanguages = require("occam-languages");
12
12
  const _elements = require("../elements");
13
- const _context = require("../utilities/context");
14
13
  const _state = require("../utilities/state");
15
14
  const _instantiate = require("../process/instantiate");
16
- const { all, exists, backwardsEvery } = _occamlanguages.continuationUtilities, { breakPointFromJSON, breakPointToBreakPointJSON } = _occamlanguages.breakPointUtilities;
15
+ const _context = require("../utilities/context");
16
+ const { all, some, exists, backwardsEvery } = _occamlanguages.continuationUtilities, { breakPointFromJSON, breakPointToBreakPointJSON } = _occamlanguages.breakPointUtilities;
17
17
  const _default = (0, _elements.define)(class Assumption extends _occamlanguages.Element {
18
18
  constructor(context, string, node, breakPoint, link, statement){
19
19
  super(context, string, node, breakPoint);
@@ -54,6 +54,10 @@ const _default = (0, _elements.define)(class Assumption extends _occamlanguages.
54
54
  findDeducedStatement(context) {
55
55
  return this.statement.findDeducedStatement(context);
56
56
  }
57
+ findSupposedStatement(index, context) {
58
+ const suppostedStatements = this.findDeducedStatement(context), supposedStatement = suppostedStatements[index] || null;
59
+ return supposedStatement;
60
+ }
57
61
  findSupposedStatements(context) {
58
62
  return this.statement.findSupposedStatements(context);
59
63
  }
@@ -93,35 +97,24 @@ const _default = (0, _elements.define)(class Assumption extends _occamlanguages.
93
97
  }
94
98
  const assumptionString = this.getString(); ///
95
99
  context.trace(`Validating the '${assumptionString}' declared assumption...`);
96
- ///
97
- context.debug(`...validated the '${assumptionString}' declared assumption.`);
98
- return forward(state, context, back);
100
+ const schemas = context.getSchemas();
101
+ return some(schemas, (schema, context, forward, back)=>{
102
+ return this.unifySchema(schema, context, forward, back);
103
+ }, context, (context, back)=>{
104
+ context.debug(`...validated the '${assumptionString}' declared assumption.`);
105
+ return forward(state, context, back);
106
+ }, back);
99
107
  }
100
108
  validateWhenDerived(state, context, forward, back) {
101
- let validatesWhenDerived = false;
102
109
  const derived = (0, _state.isDerived)(state);
103
110
  if (!derived) {
104
111
  return back();
105
112
  }
106
113
  const assumptionString = this.getString(); ///
107
114
  context.trace(`Validating the '${assumptionString}' derived assumption...`);
108
- const schemas = context.getSchemas();
109
- validatesWhenDerived = some(schemas, (schema, context)=>{
110
- let success = false;
111
- this.unifySchema(schema, context, (schemaUnifies)=>{
112
- if (schemaUnifies) {
113
- success = true;
114
- }
115
- });
116
- return success;
117
- }, context, (context)=>true); ///
118
- if (validatesWhenDerived) {
119
- validatesWhenDerived = continuation(state, context);
120
- }
121
- if (validatesWhenDerived) {
122
- context.debug(`...validated the '${assumptionString}' derived assumption.`);
123
- }
124
- return validatesWhenDerived;
115
+ ///
116
+ context.debug(`...validated the '${assumptionString}' derived assumption.`);
117
+ return forward(state, context, back);
125
118
  }
126
119
  validateLink(state, context, forward, back) {
127
120
  const assumptionString = this.getString(); ///
@@ -142,59 +135,65 @@ const _default = (0, _elements.define)(class Assumption extends _occamlanguages.
142
135
  }, back);
143
136
  }
144
137
  unifySchema(schema, context, forward, back) {
145
- const assumptionString = this.getString(), schemaString = schema.getString();
138
+ const schemaString = schema.getString(), assumptionString = this.getString(); ///
146
139
  context.trace(`Unifying the '${schemaString}' schema with the '${assumptionString}' assumption...`);
147
- const generalContext = context; ///
148
- return (0, _context.reconcile)((context)=>{
149
- const label = schema.getLabel();
150
- return this.link.unifyLabel(label, context, (labelUnifies)=>{
140
+ return (0, _context.isolate)((schema, context, forward, back)=>{
141
+ const generalContext = context; ///
142
+ return (0, _context.reconcile)((context)=>{
151
143
  const specificContext = context; ///
152
- if (!labelUnifies) {
153
- const schemaUnifies = false;
154
- return continuation(schemaUnifies);
155
- }
156
- const deduction = schema.getDeduction(), deducedStatement = this.findDeducedStatement(context);
157
- return this.unifyDeduction(deduction, deducedStatement, generalContext, specificContext, (deductionUnifies)=>{
158
- let schemaUnifies = false;
159
- if (!deductionUnifies) {
160
- return continuation(schemaUnifies);
161
- }
162
- const conditional = this.isConditional(), schemaConditional = schema.isConditional();
163
- if (conditional !== schemaConditional) {
164
- context.trace(`Either the '${schemaString}' schema is unconditional whilst the '${assumptionString}' assumption is conditional or vice verse.`);
165
- return continuation(schemaUnifies);
166
- }
167
- const suppositions = schema.getSuppositions(), supposedStatements = this.findSupposedStatements(context);
168
- return this.unifySuppositions(suppositions, supposedStatements, generalContext, specificContext, (suppositionsUnify)=>{
169
- if (suppositionsUnify) {
170
- schemaUnifies = true;
171
- }
172
- if (schemaUnifies) {
173
- context.debug(`...unified the '${schemaString}' schema with the '${assumptionString}' assumption.`);
174
- }
175
- return continuation(schemaUnifies);
176
- });
177
- });
178
- });
179
- }, context);
144
+ const unifySchemaLabel = this.unifySchemaLabel.bind(this), unifySchemaDeduction = this.unifySchemaDeduction.bind(this), unifySchemaSuppostions = this.unifySchemaSuppostions.bind(this);
145
+ return all([
146
+ unifySchemaLabel,
147
+ unifySchemaDeduction,
148
+ unifySchemaSuppostions
149
+ ], schema, generalContext, specificContext, (schema, generalContext, specificContext, back)=>{
150
+ return forward(back);
151
+ }, back);
152
+ }, context);
153
+ }, schema, context, (schema, context, back)=>{
154
+ context.debug(`...unified the '${schemaString}' schema with the '${assumptionString}' assumption.`);
155
+ return forward(context, back);
156
+ }, back);
157
+ }
158
+ unifySchemaLabel(schema, generalContext, specificContext, forward, back) {
159
+ const context = specificContext, schemaString = schema.getString(), assumptionString = this.getString(); ///
160
+ context.trace(`Unifying the '${schemaString}' schema's label with the '${assumptionString}' assumption's link...`);
161
+ const label = schema.getLabel();
162
+ return this.link.unifyLabel(label, generalContext, specificContext, (generalContext, specificContext, back)=>{
163
+ context.debug(`...unified the '${schemaString}' schema's label with the '${assumptionString}' assumption's link.`);
164
+ return forward(schema, generalContext, specificContext, back);
165
+ }, back);
180
166
  }
181
- unifyDeduction(deduction, deducedStatement, generalContext, specificContext, forward, back) {
182
- const context = specificContext, assumptionString = this.getString(), deductionString = deduction.getString();
183
- context.trace(`Unifying the '${deductionString}' deduction's statement with the '${assumptionString}' assumption's '${assumptionString}' statement...`);
184
- const statement = deduction.getStatement(), deductionContext = deduction.getContext();
167
+ unifySchemaDeduction(schema, generalContext, specificContext, forward, back) {
168
+ const context = specificContext, deduction = schema.getDeduction(), deductionString = deduction.getString(), assumptionString = this.getString(); ///
169
+ context.trace(`Unifying the '${deductionString}' deduction's statement with the '${assumptionString}' assumption's deduced statement...`);
170
+ const statement = deduction.getStatement(), deductionContext = deduction.getContext(), deducedStatement = this.findDeducedStatement(context);
185
171
  specificContext = deductionContext; ///
186
172
  return (0, _context.join)((specificContext)=>{
187
173
  return (0, _context.reconcile)((specificContext)=>{
188
174
  return deducedStatement.unifyStatement(statement, generalContext, specificContext, (generalContext, specificContext, back)=>{
189
175
  specificContext.commit(context);
190
- context.debug(`...unified the '${deductionString}' deduction's statement with the '${assumptionString}' assumption's '${assumptionString}' statement.`);
191
- return forward(generalContext, specificContext, back);
176
+ specificContext = context; ///
177
+ context.debug(`...unified the '${deductionString}' deduction's statement with the '${assumptionString}' assumption's deduced statement.`);
178
+ return forward(schema, generalContext, specificContext, back);
192
179
  }, back);
193
180
  }, specificContext);
194
181
  }, specificContext, context);
195
182
  }
196
- unifySupposition(supposition, supposedStatement, generalContext, specificContext, forward, back) {
197
- const context = specificContext, suppositionString = supposition.getString(), supposedStatementString = supposedStatement.getString();
183
+ unifySchemaSuppostions(schema, generalContext, specificContext, forward, back) {
184
+ const context = specificContext, suppositions = schema.getSuppositions(), supposedStatements = this.findSupposedStatements(context), suppositionsLength = suppositions.length, supposedStatementsLength = supposedStatements.length;
185
+ if (suppositionsLength !== supposedStatementsLength) {
186
+ context.trace(`The number of the schema's suppositions does not match the number of the assumption's supposed statements.`);
187
+ return back();
188
+ }
189
+ return backwardsEvery(suppositions, (supposition, generalContext, specificContext, forward, back, index)=>{
190
+ return this.unifySupposition(supposition, generalContext, specificContext, forward, back, index);
191
+ }, generalContext, specificContext, (generalContext, specificContext, back)=>{
192
+ return forward(schema, generalContext, specificContext, back);
193
+ }, back);
194
+ }
195
+ unifySupposition(supposition, generalContext, specificContext, forward, back, index) {
196
+ const context = specificContext, suppositionString = supposition.getString(), supposedStatement = this.findSupposedStatement(index, context), supposedStatementString = supposedStatement.getString();
198
197
  context.trace(`Unifying the '${suppositionString}' supposition's statement with the '${supposedStatementString}' supposed statement...`);
199
198
  const statement = supposition.getStatement(), suppositionContext = supposition.getContext();
200
199
  specificContext = suppositionContext; ///
@@ -202,25 +201,13 @@ const _default = (0, _elements.define)(class Assumption extends _occamlanguages.
202
201
  return (0, _context.reconcile)((specificContext)=>{
203
202
  return supposedStatement.unifyStatement(statement, generalContext, specificContext, (generalContext, specificContext, back)=>{
204
203
  specificContext.commit(context);
204
+ specificContext = context; ///
205
205
  context.debug(`...unified the '${suppositionString}' supposition's statement with the '${supposedStatementString}' supposed statement.`);
206
206
  return forward(generalContext, specificContext, back);
207
207
  }, back);
208
208
  }, specificContext);
209
209
  }, specificContext, context);
210
210
  }
211
- unifySuppositions(suppositions, supposedStatements, generalContext, specificContext, forward, back) {
212
- const suppositionsLength = suppositions.length, supposedStatementsLength = supposedStatements.length;
213
- if (suppositionsLength !== supposedStatementsLength) {
214
- const suppositionsUnify = false;
215
- return continuation(suppositionsUnify);
216
- }
217
- let index = suppositionsLength; ///
218
- return backwardsEvery(suppositions, (supposition, forward, back)=>{
219
- index--;
220
- const supposedStatement = supposedStatements[index];
221
- return this.unifySupposition(supposition, supposedStatement, generalContext, specificContext, forward, back);
222
- }, forward, back);
223
- }
224
211
  toJSON() {
225
212
  let json;
226
213
  const string = this.getString();
@@ -253,4 +240,4 @@ function statementFromAssumptionNode(assumptionNode, context) {
253
240
  return statement;
254
241
  }
255
242
 
256
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2Fzc3VtcHRpb24uanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVsZW1lbnQsIGJyZWFrUG9pbnRVdGlsaXRpZXMsIGNvbnRpbnVhdGlvblV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGV4dFwiO1xuaW1wb3J0IHsgam9pbiwgcmVjb25jaWxlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5pbXBvcnQgeyBpc0Rlcml2ZWQsIGlzRGVjbGFyZWQgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N0YXRlXCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZUFzc3VtcHRpb24gfSBmcm9tIFwiLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuXG5jb25zdCB7IGFsbCwgZXhpc3RzLCBiYWNrd2FyZHNFdmVyeSB9ID0gY29udGludWF0aW9uVXRpbGl0aWVzLFxuICAgICAgeyBicmVha1BvaW50RnJvbUpTT04sIGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIH0gPSBicmVha1BvaW50VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgQXNzdW1wdGlvbiBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxpbmssIHN0YXRlbWVudCkge1xuICAgIHN1cGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCk7XG5cbiAgICB0aGlzLmxpbmsgPSBsaW5rO1xuICAgIHRoaXMuc3RhdGVtZW50ID0gc3RhdGVtZW50O1xuICB9XG5cbiAgZ2V0TGluaygpIHtcbiAgICByZXR1cm4gdGhpcy5saW5rO1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlbWVudDtcbiAgfVxuXG4gIGdldE1ldGF2YXJpYWJsZSgpIHsgcmV0dXJuIHRoaXMubGluay5nZXRNZXRhdmFyaWFibGUoKTsgfVxuXG4gIGdldFN0YXRlbWVudE5vZGUoKSB7IHJldHVybiB0aGlzLnN0YXRlbWVudC5nZXRTdGF0ZW1lbnROb2RlKCk7IH1cblxuICBpc0NvbmRpdGlvbmFsKCkgeyByZXR1cm4gdGhpcy5zdGF0ZW1lbnQuaXNDb25kaXRpb25hbCgpIH1cblxuICBnZXRBc3N1bXB0aW9uTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgYXNzdW1wdGlvbk5vZGUgPSBub2RlOyAgLy8vXG5cbiAgICByZXR1cm4gYXNzdW1wdGlvbk5vZGU7XG4gIH1cblxuICBpc0VxdWFsVG8oYXNzdW1wdGlvbikge1xuICAgIGNvbnN0IGFzc3VtcHRpb25Ob2RlID0gYXNzdW1wdGlvbi5nZXROb2RlKCksXG4gICAgICAgICAgYXNzdW1wdGlvbk5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaEFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlKSxcbiAgICAgICAgICBlcXVhbFRvID0gYXNzdW1wdGlvbk5vZGVNYXRjaGVzOyAgLy8vXG5cbiAgICByZXR1cm4gZXF1YWxUbztcbiAgfVxuXG4gIG1hdGNoQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUpIHtcbiAgICBjb25zdCBub2RlID0gYXNzdW1wdGlvbk5vZGUsIC8vL1xuICAgICAgICAgIG5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaE5vZGUobm9kZSksXG4gICAgICAgICAgYXNzdW1wdGlvbk5vZGVNYXRjaGVzID0gbm9kZU1hdGNoZXM7IC8vL1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb25Ob2RlTWF0Y2hlcztcbiAgfVxuXG4gIGZpbmRBc3N1bXB0aW9uKGNvbnRleHQpIHtcbiAgICBjb25zdCBhc3N1bXB0aW9uTm9kZSA9IHRoaXMuZ2V0QXNzdW1wdGlvbk5vZGUoKSxcbiAgICAgICAgICBhc3N1bXB0aW9uID0gY29udGV4dC5maW5kQXNzdW1wdGlvbkJ5QXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUpO1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb247XG4gIH1cblxuICBmaW5kRGVkdWNlZFN0YXRlbWVudChjb250ZXh0KSB7IHJldHVybiB0aGlzLnN0YXRlbWVudC5maW5kRGVkdWNlZFN0YXRlbWVudChjb250ZXh0KTsgfVxuXG4gIGZpbmRTdXBwb3NlZFN0YXRlbWVudHMoY29udGV4dCkgeyByZXR1cm4gdGhpcy5zdGF0ZW1lbnQuZmluZFN1cHBvc2VkU3RhdGVtZW50cyhjb250ZXh0KTsgfVxuXG4gIGZpbmRTdWJwcm9vZkFzc2VydGlvbihjb250ZXh0KSB7IHJldHVybiB0aGlzLnN0YXRlbWVudC5maW5kU3VicHJvb2ZBc3NlcnRpb24oY29udGV4dCk7IH1cblxuICB2YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGxldCBhc3N1bXB0aW9uO1xuXG4gICAgY29uc3QgYXNzdW1wdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uLi4uYCk7XG5cbiAgICBhc3N1bXB0aW9uID0gdGhpcy5maW5kQXNzdW1wdGlvbihjb250ZXh0KTtcblxuICAgIGlmIChhc3N1bXB0aW9uICE9PSBudWxsKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7YXNzdW1wdGlvblN0cmluZ30nIGFzc3VtcHRpb24gaXMgYWxyZWFkeSBwcmVzZW50LmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChhc3N1bXB0aW9uLCBjb250ZXh0LCBiYWNrKTtcbiAgICB9XG5cbiAgICBhc3N1bXB0aW9uID0gdGhpczsgIC8vL1xuXG4gICAgY29uc3QgdmFsaWRhdGVMaW5rID0gdGhpcy52YWxpZGF0ZUxpbmsuYmluZCh0aGlzKSxcbiAgICAgICAgICB2YWxpZGF0ZVN0YXRlbWVudCA9IHRoaXMudmFsaWRhdGVTdGF0ZW1lbnQuYmluZCh0aGlzKTtcblxuICAgIHJldHVybiBhbGwoW1xuICAgICAgdmFsaWRhdGVMaW5rLFxuICAgICAgdmFsaWRhdGVTdGF0ZW1lbnRcbiAgICBdLCBzdGF0ZSwgY29udGV4dCwgKHN0YXRlLCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICBjb25zdCB2YWxpZGF0ZVdoZW5EZWNsYXJlZCA9IHRoaXMudmFsaWRhdGVXaGVuRGVjbGFyZWQuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIHZhbGlkYXRlV2hlbkRlcml2ZWQgPSB0aGlzLnZhbGlkYXRlV2hlbkRlcml2ZWQuYmluZCh0aGlzKTtcblxuICAgICAgcmV0dXJuIGV4aXN0cyhbXG4gICAgICAgIHZhbGlkYXRlV2hlbkRlY2xhcmVkLFxuICAgICAgICB2YWxpZGF0ZVdoZW5EZXJpdmVkXG4gICAgICBdLCBzdGF0ZSwgY29udGV4dCwgKHN0YXRlLCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICAgIGNvbnRleHQuYWRkQXNzdW1wdGlvbihhc3N1bXB0aW9uKTtcblxuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uLmApO1xuXG4gICAgICAgIHJldHVybiBmb3J3YXJkKGFzc3VtcHRpb24sIGNvbnRleHQsIGJhY2spO1xuICAgICAgfSwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB2YWxpZGF0ZVdoZW5EZWNsYXJlZChzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IGRlY2xhcmVkID0gaXNEZWNsYXJlZChzdGF0ZSk7XG5cbiAgICBpZiAoIWRlY2xhcmVkKSB7XG4gICAgICByZXR1cm4gYmFjaygpO1xuICAgIH1cblxuICAgIGNvbnN0IGFzc3VtcHRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBkZWNsYXJlZCBhc3N1bXB0aW9uLi4uYCk7XG5cbiAgICAvLy9cblxuICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7YXNzdW1wdGlvblN0cmluZ30nIGRlY2xhcmVkIGFzc3VtcHRpb24uYCk7XG5cbiAgICByZXR1cm4gZm9yd2FyZChzdGF0ZSwgY29udGV4dCwgYmFjayk7XG4gIH1cblxuICB2YWxpZGF0ZVdoZW5EZXJpdmVkKHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgbGV0IHZhbGlkYXRlc1doZW5EZXJpdmVkID0gZmFsc2U7XG5cbiAgICBjb25zdCBkZXJpdmVkID0gaXNEZXJpdmVkKHN0YXRlKTtcblxuICAgIGlmICghZGVyaXZlZCkge1xuICAgICAgcmV0dXJuIGJhY2soKTtcbiAgICB9XG5cbiAgICBjb25zdCBhc3N1bXB0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHthc3N1bXB0aW9uU3RyaW5nfScgZGVyaXZlZCBhc3N1bXB0aW9uLi4uYCk7XG5cbiAgICBjb25zdCBzY2hlbWFzID0gY29udGV4dC5nZXRTY2hlbWFzKCk7XG5cbiAgICB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IHNvbWUoc2NoZW1hcywgKHNjaGVtYSwgY29udGV4dCkgPT4ge1xuICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgdGhpcy51bmlmeVNjaGVtYShzY2hlbWEsIGNvbnRleHQsIChzY2hlbWFVbmlmaWVzKSA9PiB7XG4gICAgICAgIGlmIChzY2hlbWFVbmlmaWVzKSB7XG4gICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gc3VjY2VzcztcbiAgICB9LCBjb250ZXh0LCAoY29udGV4dCkgPT4gdHJ1ZSk7IC8vL1xuXG4gICAgaWYgKHZhbGlkYXRlc1doZW5EZXJpdmVkKSB7XG4gICAgICB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IGNvbnRpbnVhdGlvbihzdGF0ZSwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgaWYgKHZhbGlkYXRlc1doZW5EZXJpdmVkKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBkZXJpdmVkIGFzc3VtcHRpb24uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRlc1doZW5EZXJpdmVkO1xuICB9XG5cbiAgdmFsaWRhdGVMaW5rKHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgYXNzdW1wdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uJ3MgbGluay4uLmApO1xuXG4gICAgcmV0dXJuIHRoaXMubGluay52YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgKGxpbmssIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIHRoaXMubGluayA9IGxpbms7XG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlcyB0aGUgJyR7YXNzdW1wdGlvblN0cmluZ30nIGFzc3VtcHRpb24ncyBsaW5rLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChzdGF0ZSwgY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB2YWxpZGF0ZVN0YXRlbWVudChzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IGFzc3VtcHRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHthc3N1bXB0aW9uU3RyaW5nfScgYXNzdW1wdGlvbidzIHN0YXRlbWVudC4uLmApO1xuXG4gICAgcmV0dXJuIHRoaXMuc3RhdGVtZW50LnZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCAoc3RhdGVtZW50LCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICB0aGlzLnN0YXRlbWVudCA9IHN0YXRlbWVudDtcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVzIHRoZSAnJHthc3N1bXB0aW9uU3RyaW5nfScgYXNzdW1wdGlvbidzIHN0YXRlbWVudC5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoc3RhdGUsIGNvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9XG5cbiAgdW5pZnlTY2hlbWEoc2NoZW1hLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgYXNzdW1wdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgc2NoZW1hU3RyaW5nID0gc2NoZW1hLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3NjaGVtYVN0cmluZ30nIHNjaGVtYSB3aXRoIHRoZSAnJHthc3N1bXB0aW9uU3RyaW5nfScgYXNzdW1wdGlvbi4uLmApO1xuXG4gICAgY29uc3QgZ2VuZXJhbENvbnRleHQgPSBjb250ZXh0OyAgLy8vXG5cbiAgICByZXR1cm4gcmVjb25jaWxlKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCBsYWJlbCA9IHNjaGVtYS5nZXRMYWJlbCgpO1xuXG4gICAgICByZXR1cm4gdGhpcy5saW5rLnVuaWZ5TGFiZWwobGFiZWwsIGNvbnRleHQsIChsYWJlbFVuaWZpZXMpID0+IHtcbiAgICAgICAgY29uc3Qgc3BlY2lmaWNDb250ZXh0ID0gY29udGV4dDsgIC8vL1xuXG4gICAgICAgIGlmICghbGFiZWxVbmlmaWVzKSB7XG4gICAgICAgICAgY29uc3Qgc2NoZW1hVW5pZmllcyA9IGZhbHNlO1xuXG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzY2hlbWFVbmlmaWVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRlZHVjdGlvbiA9IHNjaGVtYS5nZXREZWR1Y3Rpb24oKSxcbiAgICAgICAgICAgICAgZGVkdWNlZFN0YXRlbWVudCA9IHRoaXMuZmluZERlZHVjZWRTdGF0ZW1lbnQoY29udGV4dCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMudW5pZnlEZWR1Y3Rpb24oZGVkdWN0aW9uLCBkZWR1Y2VkU3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoZGVkdWN0aW9uVW5pZmllcykgPT4ge1xuICAgICAgICAgIGxldCBzY2hlbWFVbmlmaWVzID0gZmFsc2U7XG5cbiAgICAgICAgICBpZiAoIWRlZHVjdGlvblVuaWZpZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oc2NoZW1hVW5pZmllcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgY29uZGl0aW9uYWwgPSB0aGlzLmlzQ29uZGl0aW9uYWwoKSxcbiAgICAgICAgICAgICAgICBzY2hlbWFDb25kaXRpb25hbCA9IHNjaGVtYS5pc0NvbmRpdGlvbmFsKCk7XG5cbiAgICAgICAgICBpZiAoY29uZGl0aW9uYWwgIT09IHNjaGVtYUNvbmRpdGlvbmFsKSB7XG4gICAgICAgICAgICBjb250ZXh0LnRyYWNlKGBFaXRoZXIgdGhlICcke3NjaGVtYVN0cmluZ30nIHNjaGVtYSBpcyB1bmNvbmRpdGlvbmFsIHdoaWxzdCB0aGUgJyR7YXNzdW1wdGlvblN0cmluZ30nIGFzc3VtcHRpb24gaXMgY29uZGl0aW9uYWwgb3IgdmljZSB2ZXJzZS5gKTtcblxuICAgICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzY2hlbWFVbmlmaWVzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBzdXBwb3NpdGlvbnMgPSBzY2hlbWEuZ2V0U3VwcG9zaXRpb25zKCksXG4gICAgICAgICAgICAgICAgc3VwcG9zZWRTdGF0ZW1lbnRzID0gdGhpcy5maW5kU3VwcG9zZWRTdGF0ZW1lbnRzKGNvbnRleHQpO1xuXG4gICAgICAgICAgcmV0dXJuIHRoaXMudW5pZnlTdXBwb3NpdGlvbnMoc3VwcG9zaXRpb25zLCBzdXBwb3NlZFN0YXRlbWVudHMsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChzdXBwb3NpdGlvbnNVbmlmeSkgPT4ge1xuICAgICAgICAgICAgaWYgKHN1cHBvc2l0aW9uc1VuaWZ5KSB7XG4gICAgICAgICAgICAgIHNjaGVtYVVuaWZpZXMgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2NoZW1hVW5pZmllcykge1xuICAgICAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzY2hlbWFTdHJpbmd9JyBzY2hlbWEgd2l0aCB0aGUgJyR7YXNzdW1wdGlvblN0cmluZ30nIGFzc3VtcHRpb24uYCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oc2NoZW1hVW5pZmllcyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICB1bmlmeURlZHVjdGlvbihkZWR1Y3Rpb24sIGRlZHVjZWRTdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgYXNzdW1wdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksICAvLy9cbiAgICAgICAgICBkZWR1Y3Rpb25TdHJpbmcgPSBkZWR1Y3Rpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7ZGVkdWN0aW9uU3RyaW5nfScgZGVkdWN0aW9uJ3Mgc3RhdGVtZW50ICB3aXRoIHRoZSAnJHthc3N1bXB0aW9uU3RyaW5nfScgYXNzdW1wdGlvbidzICcke2Fzc3VtcHRpb25TdHJpbmd9JyBzdGF0ZW1lbnQuLi5gKTtcblxuICAgIGNvbnN0IHN0YXRlbWVudCA9IGRlZHVjdGlvbi5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgICAgICBkZWR1Y3Rpb25Db250ZXh0ID0gZGVkdWN0aW9uLmdldENvbnRleHQoKTtcblxuICAgIHNwZWNpZmljQ29udGV4dCA9IGRlZHVjdGlvbkNvbnRleHQ7IC8vL1xuXG4gICAgcmV0dXJuIGpvaW4oKHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgcmV0dXJuIHJlY29uY2lsZSgoc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICAgIHJldHVybiBkZWR1Y2VkU3RhdGVtZW50LnVuaWZ5U3RhdGVtZW50KHN0YXRlbWVudCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spID0+IHtcbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHQuY29tbWl0KGNvbnRleHQpO1xuXG4gICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7ZGVkdWN0aW9uU3RyaW5nfScgZGVkdWN0aW9uJ3Mgc3RhdGVtZW50IHdpdGggdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uJ3MgJyR7YXNzdW1wdGlvblN0cmluZ30nIHN0YXRlbWVudC5gKTtcblxuICAgICAgICAgIHJldHVybiBmb3J3YXJkKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spO1xuICAgICAgICB9LCBiYWNrKTtcbiAgICAgIH0sIHNwZWNpZmljQ29udGV4dCk7XG4gICAgfSwgc3BlY2lmaWNDb250ZXh0LCBjb250ZXh0KTtcbiAgfVxuXG4gIHVuaWZ5U3VwcG9zaXRpb24oc3VwcG9zaXRpb24sIHN1cHBvc2VkU3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgIHN1cHBvc2l0aW9uU3RyaW5nID0gc3VwcG9zaXRpb24uZ2V0U3RyaW5nKCksXG4gICAgICAgICAgc3VwcG9zZWRTdGF0ZW1lbnRTdHJpbmcgPSBzdXBwb3NlZFN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdXBwb3NpdGlvblN0cmluZ30nIHN1cHBvc2l0aW9uJ3Mgc3RhdGVtZW50ICB3aXRoIHRoZSAnJHtzdXBwb3NlZFN0YXRlbWVudFN0cmluZ30nIHN1cHBvc2VkIHN0YXRlbWVudC4uLmApO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50ID0gc3VwcG9zaXRpb24uZ2V0U3RhdGVtZW50KCksXG4gICAgICAgICAgc3VwcG9zaXRpb25Db250ZXh0ID0gc3VwcG9zaXRpb24uZ2V0Q29udGV4dCgpO1xuXG4gICAgc3BlY2lmaWNDb250ZXh0ID0gc3VwcG9zaXRpb25Db250ZXh0OyAvLy9cblxuICAgIHJldHVybiBqb2luKChzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgIHJldHVybiByZWNvbmNpbGUoKHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgICByZXR1cm4gc3VwcG9zZWRTdGF0ZW1lbnQudW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgICAgIHNwZWNpZmljQ29udGV4dC5jb21taXQoY29udGV4dCk7XG5cbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdXBwb3NpdGlvblN0cmluZ30nIHN1cHBvc2l0aW9uJ3Mgc3RhdGVtZW50ICB3aXRoIHRoZSAnJHtzdXBwb3NlZFN0YXRlbWVudFN0cmluZ30nIHN1cHBvc2VkIHN0YXRlbWVudC5gKTtcblxuICAgICAgICAgIHJldHVybiBmb3J3YXJkKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spO1xuICAgICAgICB9LCBiYWNrKTtcbiAgICAgIH0sIHNwZWNpZmljQ29udGV4dCk7XG4gICAgfSwgc3BlY2lmaWNDb250ZXh0LCBjb250ZXh0KTtcbiAgfVxuXG4gIHVuaWZ5U3VwcG9zaXRpb25zKHN1cHBvc2l0aW9ucywgc3VwcG9zZWRTdGF0ZW1lbnRzLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3Qgc3VwcG9zaXRpb25zTGVuZ3RoID0gc3VwcG9zaXRpb25zLmxlbmd0aCxcbiAgICAgICAgICBzdXBwb3NlZFN0YXRlbWVudHNMZW5ndGggPSBzdXBwb3NlZFN0YXRlbWVudHMubGVuZ3RoO1xuXG4gICAgaWYgKHN1cHBvc2l0aW9uc0xlbmd0aCAhPT0gc3VwcG9zZWRTdGF0ZW1lbnRzTGVuZ3RoKSB7XG4gICAgICBjb25zdCBzdXBwb3NpdGlvbnNVbmlmeSA9IGZhbHNlO1xuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHN1cHBvc2l0aW9uc1VuaWZ5KTtcbiAgICB9XG5cbiAgICBsZXQgaW5kZXggPSBzdXBwb3NpdGlvbnNMZW5ndGg7IC8vL1xuXG4gICAgcmV0dXJuIGJhY2t3YXJkc0V2ZXJ5KHN1cHBvc2l0aW9ucywgKHN1cHBvc2l0aW9uLCBmb3J3YXJkLCBiYWNrKSA9PiB7XG4gICAgICBpbmRleC0tO1xuXG4gICAgICBjb25zdCBzdXBwb3NlZFN0YXRlbWVudCA9IHN1cHBvc2VkU3RhdGVtZW50c1tpbmRleF07XG5cbiAgICAgIHJldHVybiB0aGlzLnVuaWZ5U3VwcG9zaXRpb24oc3VwcG9zaXRpb24sIHN1cHBvc2VkU3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBmb3J3YXJkLCBiYWNrKTtcbiAgICB9LCBmb3J3YXJkLCBiYWNrKTtcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICBsZXQganNvbjtcblxuICAgIGNvbnN0IHN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7XG5cbiAgICBsZXQgYnJlYWtQb2ludDtcblxuICAgIGJyZWFrUG9pbnQgPSB0aGlzLmdldEJyZWFrUG9pbnQoKTtcblxuICAgIGNvbnN0IGJyZWFrUG9pbnRKU09OID0gYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04oYnJlYWtQb2ludCk7XG5cbiAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEpTT047ICAvLy9cblxuICAgIGpzb24gPSB7XG4gICAgICBzdHJpbmcsXG4gICAgICBicmVha1BvaW50XG4gICAgfTtcblxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIkFzc3VtcHRpb25cIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIGxldCBhc3N1bXB0aW9uO1xuXG4gICAgaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHsgc3RyaW5nIH0gPSBqc29uLFxuICAgICAgICAgICAgYXNzdW1wdGlvbk5vZGUgPSBpbnN0YW50aWF0ZUFzc3VtcHRpb24oc3RyaW5nLCBjb250ZXh0KSxcbiAgICAgICAgICAgIG5vZGUgPSBhc3N1bXB0aW9uTm9kZSwgIC8vL1xuICAgICAgICAgICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRGcm9tSlNPTihqc29uKSxcbiAgICAgICAgICAgIGxpbmsgPSBsaW5rRnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21Bc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgICAgIGFzc3VtcHRpb24gPSBuZXcgQXNzdW1wdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxpbmssIHN0YXRlbWVudCk7XG4gICAgfSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gYXNzdW1wdGlvbjtcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIGxpbmtGcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGlua05vZGUgPSBhc3N1bXB0aW9uTm9kZS5nZXRMaW5rTm9kZShjb250ZXh0KSxcbiAgICAgICAgbGluayA9IGNvbnRleHQuZmluZExpbmtCeUxpbmtOb2RlKGxpbmtOb2RlKTtcblxuICByZXR1cm4gbGluaztcbn1cblxuZnVuY3Rpb24gc3RhdGVtZW50RnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBhc3N1bXB0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHN0YXRlbWVudCA9IGNvbnRleHQuZmluZFN0YXRlbWVudEJ5U3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlKTtcblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuIl0sIm5hbWVzIjpbImFsbCIsImV4aXN0cyIsImJhY2t3YXJkc0V2ZXJ5IiwiY29udGludWF0aW9uVXRpbGl0aWVzIiwiYnJlYWtQb2ludEZyb21KU09OIiwiYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04iLCJicmVha1BvaW50VXRpbGl0aWVzIiwiZGVmaW5lIiwiQXNzdW1wdGlvbiIsIkVsZW1lbnQiLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJsaW5rIiwic3RhdGVtZW50IiwiZ2V0TGluayIsImdldFN0YXRlbWVudCIsImdldE1ldGF2YXJpYWJsZSIsImdldFN0YXRlbWVudE5vZGUiLCJpc0NvbmRpdGlvbmFsIiwiZ2V0QXNzdW1wdGlvbk5vZGUiLCJnZXROb2RlIiwiYXNzdW1wdGlvbk5vZGUiLCJpc0VxdWFsVG8iLCJhc3N1bXB0aW9uIiwiYXNzdW1wdGlvbk5vZGVNYXRjaGVzIiwibWF0Y2hBc3N1bXB0aW9uTm9kZSIsImVxdWFsVG8iLCJub2RlTWF0Y2hlcyIsIm1hdGNoTm9kZSIsImZpbmRBc3N1bXB0aW9uIiwiZmluZEFzc3VtcHRpb25CeUFzc3VtcHRpb25Ob2RlIiwiZmluZERlZHVjZWRTdGF0ZW1lbnQiLCJmaW5kU3VwcG9zZWRTdGF0ZW1lbnRzIiwiZmluZFN1YnByb29mQXNzZXJ0aW9uIiwidmFsaWRhdGUiLCJzdGF0ZSIsImZvcndhcmQiLCJiYWNrIiwiYXNzdW1wdGlvblN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwiZGVidWciLCJ2YWxpZGF0ZUxpbmsiLCJiaW5kIiwidmFsaWRhdGVTdGF0ZW1lbnQiLCJ2YWxpZGF0ZVdoZW5EZWNsYXJlZCIsInZhbGlkYXRlV2hlbkRlcml2ZWQiLCJhZGRBc3N1bXB0aW9uIiwiZGVjbGFyZWQiLCJpc0RlY2xhcmVkIiwidmFsaWRhdGVzV2hlbkRlcml2ZWQiLCJkZXJpdmVkIiwiaXNEZXJpdmVkIiwic2NoZW1hcyIsImdldFNjaGVtYXMiLCJzb21lIiwic2NoZW1hIiwic3VjY2VzcyIsInVuaWZ5U2NoZW1hIiwic2NoZW1hVW5pZmllcyIsImNvbnRpbnVhdGlvbiIsInNjaGVtYVN0cmluZyIsImdlbmVyYWxDb250ZXh0IiwicmVjb25jaWxlIiwibGFiZWwiLCJnZXRMYWJlbCIsInVuaWZ5TGFiZWwiLCJsYWJlbFVuaWZpZXMiLCJzcGVjaWZpY0NvbnRleHQiLCJkZWR1Y3Rpb24iLCJnZXREZWR1Y3Rpb24iLCJkZWR1Y2VkU3RhdGVtZW50IiwidW5pZnlEZWR1Y3Rpb24iLCJkZWR1Y3Rpb25VbmlmaWVzIiwiY29uZGl0aW9uYWwiLCJzY2hlbWFDb25kaXRpb25hbCIsInN1cHBvc2l0aW9ucyIsImdldFN1cHBvc2l0aW9ucyIsInN1cHBvc2VkU3RhdGVtZW50cyIsInVuaWZ5U3VwcG9zaXRpb25zIiwic3VwcG9zaXRpb25zVW5pZnkiLCJkZWR1Y3Rpb25TdHJpbmciLCJkZWR1Y3Rpb25Db250ZXh0IiwiZ2V0Q29udGV4dCIsImpvaW4iLCJ1bmlmeVN0YXRlbWVudCIsImNvbW1pdCIsInVuaWZ5U3VwcG9zaXRpb24iLCJzdXBwb3NpdGlvbiIsInN1cHBvc2VkU3RhdGVtZW50Iiwic3VwcG9zaXRpb25TdHJpbmciLCJzdXBwb3NlZFN0YXRlbWVudFN0cmluZyIsInN1cHBvc2l0aW9uQ29udGV4dCIsInN1cHBvc2l0aW9uc0xlbmd0aCIsImxlbmd0aCIsInN1cHBvc2VkU3RhdGVtZW50c0xlbmd0aCIsImluZGV4IiwidG9KU09OIiwianNvbiIsImdldEJyZWFrUG9pbnQiLCJicmVha1BvaW50SlNPTiIsIm5hbWUiLCJmcm9tSlNPTiIsImluc3RhbnRpYXRlIiwiaW5zdGFudGlhdGVBc3N1bXB0aW9uIiwibGlua0Zyb21Bc3N1bXB0aW9uTm9kZSIsInN0YXRlbWVudEZyb21Bc3N1bXB0aW9uTm9kZSIsImxpbmtOb2RlIiwiZ2V0TGlua05vZGUiLCJmaW5kTGlua0J5TGlua05vZGUiLCJzdGF0ZW1lbnROb2RlIiwiZmluZFN0YXRlbWVudEJ5U3RhdGVtZW50Tm9kZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBYUE7OztlQUFBOzs7Z0NBWG9FOzBCQUU3Qzt5QkFDSzt1QkFFVTs2QkFDQTtBQUV0QyxNQUFNLEVBQUVBLEdBQUcsRUFBRUMsTUFBTSxFQUFFQyxjQUFjLEVBQUUsR0FBR0MscUNBQXFCLEVBQ3ZELEVBQUVDLGtCQUFrQixFQUFFQywwQkFBMEIsRUFBRSxHQUFHQyxtQ0FBbUI7TUFFOUUsV0FBZUMsSUFBQUEsZ0JBQU0sRUFBQyxNQUFNQyxtQkFBbUJDLHVCQUFPO0lBQ3BELFlBQVlDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLFVBQVUsRUFBRUMsSUFBSSxFQUFFQyxTQUFTLENBQUU7UUFDOUQsS0FBSyxDQUFDTCxTQUFTQyxRQUFRQyxNQUFNQztRQUU3QixJQUFJLENBQUNDLElBQUksR0FBR0E7UUFDWixJQUFJLENBQUNDLFNBQVMsR0FBR0E7SUFDbkI7SUFFQUMsVUFBVTtRQUNSLE9BQU8sSUFBSSxDQUFDRixJQUFJO0lBQ2xCO0lBRUFHLGVBQWU7UUFDYixP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
243
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2Fzc3VtcHRpb24uanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVsZW1lbnQsIGJyZWFrUG9pbnRVdGlsaXRpZXMsIGNvbnRpbnVhdGlvblV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBpc0Rlcml2ZWQsIGlzRGVjbGFyZWQgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N0YXRlXCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZUFzc3VtcHRpb24gfSBmcm9tIFwiLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgam9pbiwgaXNvbGF0ZSwgcmVjb25jaWxlLCBpbnN0YW50aWF0ZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGV4dFwiO1xuXG5jb25zdCB7IGFsbCwgc29tZSwgZXhpc3RzLCBiYWNrd2FyZHNFdmVyeSB9ID0gY29udGludWF0aW9uVXRpbGl0aWVzLFxuICAgICAgeyBicmVha1BvaW50RnJvbUpTT04sIGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIH0gPSBicmVha1BvaW50VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgQXNzdW1wdGlvbiBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxpbmssIHN0YXRlbWVudCkge1xuICAgIHN1cGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCk7XG5cbiAgICB0aGlzLmxpbmsgPSBsaW5rO1xuICAgIHRoaXMuc3RhdGVtZW50ID0gc3RhdGVtZW50O1xuICB9XG5cbiAgZ2V0TGluaygpIHtcbiAgICByZXR1cm4gdGhpcy5saW5rO1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlbWVudDtcbiAgfVxuXG4gIGdldE1ldGF2YXJpYWJsZSgpIHsgcmV0dXJuIHRoaXMubGluay5nZXRNZXRhdmFyaWFibGUoKTsgfVxuXG4gIGdldFN0YXRlbWVudE5vZGUoKSB7IHJldHVybiB0aGlzLnN0YXRlbWVudC5nZXRTdGF0ZW1lbnROb2RlKCk7IH1cblxuICBpc0NvbmRpdGlvbmFsKCkgeyByZXR1cm4gdGhpcy5zdGF0ZW1lbnQuaXNDb25kaXRpb25hbCgpIH1cblxuICBnZXRBc3N1bXB0aW9uTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgYXNzdW1wdGlvbk5vZGUgPSBub2RlOyAgLy8vXG5cbiAgICByZXR1cm4gYXNzdW1wdGlvbk5vZGU7XG4gIH1cblxuICBpc0VxdWFsVG8oYXNzdW1wdGlvbikge1xuICAgIGNvbnN0IGFzc3VtcHRpb25Ob2RlID0gYXNzdW1wdGlvbi5nZXROb2RlKCksXG4gICAgICAgICAgYXNzdW1wdGlvbk5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaEFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlKSxcbiAgICAgICAgICBlcXVhbFRvID0gYXNzdW1wdGlvbk5vZGVNYXRjaGVzOyAgLy8vXG5cbiAgICByZXR1cm4gZXF1YWxUbztcbiAgfVxuXG4gIG1hdGNoQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUpIHtcbiAgICBjb25zdCBub2RlID0gYXNzdW1wdGlvbk5vZGUsIC8vL1xuICAgICAgICAgIG5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaE5vZGUobm9kZSksXG4gICAgICAgICAgYXNzdW1wdGlvbk5vZGVNYXRjaGVzID0gbm9kZU1hdGNoZXM7IC8vL1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb25Ob2RlTWF0Y2hlcztcbiAgfVxuXG4gIGZpbmRBc3N1bXB0aW9uKGNvbnRleHQpIHtcbiAgICBjb25zdCBhc3N1bXB0aW9uTm9kZSA9IHRoaXMuZ2V0QXNzdW1wdGlvbk5vZGUoKSxcbiAgICAgICAgICBhc3N1bXB0aW9uID0gY29udGV4dC5maW5kQXNzdW1wdGlvbkJ5QXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUpO1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb247XG4gIH1cblxuICBmaW5kRGVkdWNlZFN0YXRlbWVudChjb250ZXh0KSB7IHJldHVybiB0aGlzLnN0YXRlbWVudC5maW5kRGVkdWNlZFN0YXRlbWVudChjb250ZXh0KTsgfVxuXG4gIGZpbmRTdXBwb3NlZFN0YXRlbWVudChpbmRleCwgY29udGV4dCkge1xuICAgIGNvbnN0IHN1cHBvc3RlZFN0YXRlbWVudHMgPSB0aGlzLmZpbmREZWR1Y2VkU3RhdGVtZW50KGNvbnRleHQpLFxuICAgICAgICAgIHN1cHBvc2VkU3RhdGVtZW50ID0gc3VwcG9zdGVkU3RhdGVtZW50c1tpbmRleF0gfHwgbnVsbDtcblxuICAgIHJldHVybiBzdXBwb3NlZFN0YXRlbWVudDtcbiAgfVxuXG4gIGZpbmRTdXBwb3NlZFN0YXRlbWVudHMoY29udGV4dCkgeyByZXR1cm4gdGhpcy5zdGF0ZW1lbnQuZmluZFN1cHBvc2VkU3RhdGVtZW50cyhjb250ZXh0KTsgfVxuXG4gIGZpbmRTdWJwcm9vZkFzc2VydGlvbihjb250ZXh0KSB7IHJldHVybiB0aGlzLnN0YXRlbWVudC5maW5kU3VicHJvb2ZBc3NlcnRpb24oY29udGV4dCk7IH1cblxuICB2YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGxldCBhc3N1bXB0aW9uO1xuXG4gICAgY29uc3QgYXNzdW1wdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uLi4uYCk7XG5cbiAgICBhc3N1bXB0aW9uID0gdGhpcy5maW5kQXNzdW1wdGlvbihjb250ZXh0KTtcblxuICAgIGlmIChhc3N1bXB0aW9uICE9PSBudWxsKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7YXNzdW1wdGlvblN0cmluZ30nIGFzc3VtcHRpb24gaXMgYWxyZWFkeSBwcmVzZW50LmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChhc3N1bXB0aW9uLCBjb250ZXh0LCBiYWNrKTtcbiAgICB9XG5cbiAgICBhc3N1bXB0aW9uID0gdGhpczsgIC8vL1xuXG4gICAgY29uc3QgdmFsaWRhdGVMaW5rID0gdGhpcy52YWxpZGF0ZUxpbmsuYmluZCh0aGlzKSxcbiAgICAgICAgICB2YWxpZGF0ZVN0YXRlbWVudCA9IHRoaXMudmFsaWRhdGVTdGF0ZW1lbnQuYmluZCh0aGlzKTtcblxuICAgIHJldHVybiBhbGwoW1xuICAgICAgdmFsaWRhdGVMaW5rLFxuICAgICAgdmFsaWRhdGVTdGF0ZW1lbnRcbiAgICBdLCBzdGF0ZSwgY29udGV4dCwgKHN0YXRlLCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICBjb25zdCB2YWxpZGF0ZVdoZW5EZWNsYXJlZCA9IHRoaXMudmFsaWRhdGVXaGVuRGVjbGFyZWQuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIHZhbGlkYXRlV2hlbkRlcml2ZWQgPSB0aGlzLnZhbGlkYXRlV2hlbkRlcml2ZWQuYmluZCh0aGlzKTtcblxuICAgICAgcmV0dXJuIGV4aXN0cyhbXG4gICAgICAgIHZhbGlkYXRlV2hlbkRlY2xhcmVkLFxuICAgICAgICB2YWxpZGF0ZVdoZW5EZXJpdmVkXG4gICAgICBdLCBzdGF0ZSwgY29udGV4dCwgKHN0YXRlLCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICAgIGNvbnRleHQuYWRkQXNzdW1wdGlvbihhc3N1bXB0aW9uKTtcblxuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uLmApO1xuXG4gICAgICAgIHJldHVybiBmb3J3YXJkKGFzc3VtcHRpb24sIGNvbnRleHQsIGJhY2spO1xuICAgICAgfSwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB2YWxpZGF0ZVdoZW5EZWNsYXJlZChzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IGRlY2xhcmVkID0gaXNEZWNsYXJlZChzdGF0ZSk7XG5cbiAgICBpZiAoIWRlY2xhcmVkKSB7XG4gICAgICByZXR1cm4gYmFjaygpO1xuICAgIH1cblxuICAgIGNvbnN0IGFzc3VtcHRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBkZWNsYXJlZCBhc3N1bXB0aW9uLi4uYCk7XG5cbiAgICBjb25zdCBzY2hlbWFzID0gY29udGV4dC5nZXRTY2hlbWFzKCk7XG5cbiAgICByZXR1cm4gc29tZShzY2hlbWFzLCAoc2NoZW1hLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy51bmlmeVNjaGVtYShzY2hlbWEsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spO1xuICAgIH0sIGNvbnRleHQsIChjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBkZWNsYXJlZCBhc3N1bXB0aW9uLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChzdGF0ZSwgY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB2YWxpZGF0ZVdoZW5EZXJpdmVkKHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgZGVyaXZlZCA9IGlzRGVyaXZlZChzdGF0ZSk7XG5cbiAgICBpZiAoIWRlcml2ZWQpIHtcbiAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgfVxuXG4gICAgY29uc3QgYXNzdW1wdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7YXNzdW1wdGlvblN0cmluZ30nIGRlcml2ZWQgYXNzdW1wdGlvbi4uLmApO1xuXG4gICAgLy8vXG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBkZXJpdmVkIGFzc3VtcHRpb24uYCk7XG5cbiAgICByZXR1cm4gZm9yd2FyZChzdGF0ZSwgY29udGV4dCwgYmFjayk7XG4gIH1cblxuICB2YWxpZGF0ZUxpbmsoc3RhdGUsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBhc3N1bXB0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7YXNzdW1wdGlvblN0cmluZ30nIGFzc3VtcHRpb24ncyBsaW5rLi4uYCk7XG5cbiAgICByZXR1cm4gdGhpcy5saW5rLnZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCAobGluaywgY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgdGhpcy5saW5rID0gbGluaztcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVzIHRoZSAnJHthc3N1bXB0aW9uU3RyaW5nfScgYXNzdW1wdGlvbidzIGxpbmsuYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKHN0YXRlLCBjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHZhbGlkYXRlU3RhdGVtZW50KHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgYXNzdW1wdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uJ3Mgc3RhdGVtZW50Li4uYCk7XG5cbiAgICByZXR1cm4gdGhpcy5zdGF0ZW1lbnQudmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIChzdGF0ZW1lbnQsIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIHRoaXMuc3RhdGVtZW50ID0gc3RhdGVtZW50O1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZXMgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uJ3Mgc3RhdGVtZW50LmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChzdGF0ZSwgY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB1bmlmeVNjaGVtYShzY2hlbWEsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBzY2hlbWFTdHJpbmcgPSBzY2hlbWEuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgYXNzdW1wdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzY2hlbWFTdHJpbmd9JyBzY2hlbWEgd2l0aCB0aGUgJyR7YXNzdW1wdGlvblN0cmluZ30nIGFzc3VtcHRpb24uLi5gKTtcblxuICAgIHJldHVybiBpc29sYXRlKChzY2hlbWEsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spID0+IHtcbiAgICAgIGNvbnN0IGdlbmVyYWxDb250ZXh0ID0gY29udGV4dDsgIC8vL1xuXG4gICAgICByZXR1cm4gcmVjb25jaWxlKChjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IHNwZWNpZmljQ29udGV4dCA9IGNvbnRleHQ7ICAvLy9cblxuICAgICAgICBjb25zdCB1bmlmeVNjaGVtYUxhYmVsID0gdGhpcy51bmlmeVNjaGVtYUxhYmVsLmJpbmQodGhpcyksXG4gICAgICAgICAgICAgIHVuaWZ5U2NoZW1hRGVkdWN0aW9uID0gdGhpcy51bmlmeVNjaGVtYURlZHVjdGlvbi5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgICB1bmlmeVNjaGVtYVN1cHBvc3Rpb25zID0gdGhpcy51bmlmeVNjaGVtYVN1cHBvc3Rpb25zLmJpbmQodGhpcyk7XG5cbiAgICAgICAgcmV0dXJuIGFsbChbXG4gICAgICAgICAgdW5pZnlTY2hlbWFMYWJlbCxcbiAgICAgICAgICB1bmlmeVNjaGVtYURlZHVjdGlvbixcbiAgICAgICAgICB1bmlmeVNjaGVtYVN1cHBvc3Rpb25zXG4gICAgICAgIF0sIHNjaGVtYSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKHNjaGVtYSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgICAgIHJldHVybiBmb3J3YXJkKGJhY2spO1xuICAgICAgICB9LCBiYWNrKTtcbiAgICAgIH0sIGNvbnRleHQpO1xuICAgIH0sIHNjaGVtYSwgY29udGV4dCwgKHNjaGVtYSwgY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c2NoZW1hU3RyaW5nfScgc2NoZW1hIHdpdGggdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHVuaWZ5U2NoZW1hTGFiZWwoc2NoZW1hLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgIHNjaGVtYVN0cmluZyA9IHNjaGVtYS5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBhc3N1bXB0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3NjaGVtYVN0cmluZ30nIHNjaGVtYSdzIGxhYmVsIHdpdGggdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uJ3MgbGluay4uLmApO1xuXG4gICAgY29uc3QgbGFiZWwgPSBzY2hlbWEuZ2V0TGFiZWwoKTtcblxuICAgIHJldHVybiB0aGlzLmxpbmsudW5pZnlMYWJlbChsYWJlbCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3NjaGVtYVN0cmluZ30nIHNjaGVtYSdzIGxhYmVsIHdpdGggdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uJ3MgbGluay5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoc2NoZW1hLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHVuaWZ5U2NoZW1hRGVkdWN0aW9uKHNjaGVtYSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgICBkZWR1Y3Rpb24gPSBzY2hlbWEuZ2V0RGVkdWN0aW9uKCksXG4gICAgICAgICAgZGVkdWN0aW9uU3RyaW5nID0gZGVkdWN0aW9uLmdldFN0cmluZygpLFxuICAgICAgICAgIGFzc3VtcHRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7ZGVkdWN0aW9uU3RyaW5nfScgZGVkdWN0aW9uJ3Mgc3RhdGVtZW50IHdpdGggdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uJ3MgZGVkdWNlZCBzdGF0ZW1lbnQuLi5gKTtcblxuICAgIGNvbnN0IHN0YXRlbWVudCA9IGRlZHVjdGlvbi5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgICAgICBkZWR1Y3Rpb25Db250ZXh0ID0gZGVkdWN0aW9uLmdldENvbnRleHQoKSxcbiAgICAgICAgICBkZWR1Y2VkU3RhdGVtZW50ID0gdGhpcy5maW5kRGVkdWNlZFN0YXRlbWVudChjb250ZXh0KVxuXG4gICAgc3BlY2lmaWNDb250ZXh0ID0gZGVkdWN0aW9uQ29udGV4dDsgLy8vXG5cbiAgICByZXR1cm4gam9pbigoc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICByZXR1cm4gcmVjb25jaWxlKChzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgICAgcmV0dXJuIGRlZHVjZWRTdGF0ZW1lbnQudW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgICAgIHNwZWNpZmljQ29udGV4dC5jb21taXQoY29udGV4dCk7XG5cbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHQgPSBjb250ZXh0OyAgLy8vXG5cbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtkZWR1Y3Rpb25TdHJpbmd9JyBkZWR1Y3Rpb24ncyBzdGF0ZW1lbnQgd2l0aCB0aGUgJyR7YXNzdW1wdGlvblN0cmluZ30nIGFzc3VtcHRpb24ncyBkZWR1Y2VkIHN0YXRlbWVudC5gKTtcblxuICAgICAgICAgIHJldHVybiBmb3J3YXJkKHNjaGVtYSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgYmFjayk7XG4gICAgICAgIH0sIGJhY2spO1xuICAgICAgfSwgc3BlY2lmaWNDb250ZXh0KTtcbiAgICB9LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRleHQpO1xuICB9XG5cbiAgdW5pZnlTY2hlbWFTdXBwb3N0aW9ucyhzY2hlbWEsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgc3VwcG9zaXRpb25zID0gc2NoZW1hLmdldFN1cHBvc2l0aW9ucygpLFxuICAgICAgICAgIHN1cHBvc2VkU3RhdGVtZW50cyA9IHRoaXMuZmluZFN1cHBvc2VkU3RhdGVtZW50cyhjb250ZXh0KSxcbiAgICAgICAgICBzdXBwb3NpdGlvbnNMZW5ndGggPSBzdXBwb3NpdGlvbnMubGVuZ3RoLFxuICAgICAgICAgIHN1cHBvc2VkU3RhdGVtZW50c0xlbmd0aCA9IHN1cHBvc2VkU3RhdGVtZW50cy5sZW5ndGg7XG5cbiAgICBpZiAoc3VwcG9zaXRpb25zTGVuZ3RoICE9PSBzdXBwb3NlZFN0YXRlbWVudHNMZW5ndGgpIHtcbiAgICAgIGNvbnRleHQudHJhY2UoYFRoZSBudW1iZXIgb2YgdGhlIHNjaGVtYSdzIHN1cHBvc2l0aW9ucyBkb2VzIG5vdCBtYXRjaCB0aGUgbnVtYmVyIG9mIHRoZSBhc3N1bXB0aW9uJ3Mgc3VwcG9zZWQgc3RhdGVtZW50cy5gKTtcblxuICAgICAgcmV0dXJuIGJhY2soKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFja3dhcmRzRXZlcnkoc3VwcG9zaXRpb25zLCAoc3VwcG9zaXRpb24sIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGZvcndhcmQsIGJhY2ssIGluZGV4KSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy51bmlmeVN1cHBvc2l0aW9uKHN1cHBvc2l0aW9uLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBmb3J3YXJkLCBiYWNrLCBpbmRleCk7XG4gICAgfSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIHJldHVybiBmb3J3YXJkKHNjaGVtYSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB1bmlmeVN1cHBvc2l0aW9uKHN1cHBvc2l0aW9uLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBmb3J3YXJkLCBiYWNrLCBpbmRleCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgICBzdXBwb3NpdGlvblN0cmluZyA9IHN1cHBvc2l0aW9uLmdldFN0cmluZygpLFxuICAgICAgICAgIHN1cHBvc2VkU3RhdGVtZW50ID0gdGhpcy5maW5kU3VwcG9zZWRTdGF0ZW1lbnQoaW5kZXgsIGNvbnRleHQpLFxuICAgICAgICAgIHN1cHBvc2VkU3RhdGVtZW50U3RyaW5nID0gc3VwcG9zZWRTdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3VwcG9zaXRpb25TdHJpbmd9JyBzdXBwb3NpdGlvbidzIHN0YXRlbWVudCAgd2l0aCB0aGUgJyR7c3VwcG9zZWRTdGF0ZW1lbnRTdHJpbmd9JyBzdXBwb3NlZCBzdGF0ZW1lbnQuLi5gKTtcblxuICAgIGNvbnN0IHN0YXRlbWVudCA9IHN1cHBvc2l0aW9uLmdldFN0YXRlbWVudCgpLFxuICAgICAgICAgIHN1cHBvc2l0aW9uQ29udGV4dCA9IHN1cHBvc2l0aW9uLmdldENvbnRleHQoKTtcblxuICAgIHNwZWNpZmljQ29udGV4dCA9IHN1cHBvc2l0aW9uQ29udGV4dDsgLy8vXG5cbiAgICByZXR1cm4gam9pbigoc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICByZXR1cm4gcmVjb25jaWxlKChzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgICAgcmV0dXJuIHN1cHBvc2VkU3RhdGVtZW50LnVuaWZ5U3RhdGVtZW50KHN0YXRlbWVudCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spID0+IHtcbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHQuY29tbWl0KGNvbnRleHQpO1xuXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0ID0gY29udGV4dDsgIC8vL1xuXG4gICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3VwcG9zaXRpb25TdHJpbmd9JyBzdXBwb3NpdGlvbidzIHN0YXRlbWVudCAgd2l0aCB0aGUgJyR7c3VwcG9zZWRTdGF0ZW1lbnRTdHJpbmd9JyBzdXBwb3NlZCBzdGF0ZW1lbnQuYCk7XG5cbiAgICAgICAgICByZXR1cm4gZm9yd2FyZChnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBiYWNrKTtcbiAgICAgICAgfSwgYmFjayk7XG4gICAgICB9LCBzcGVjaWZpY0NvbnRleHQpO1xuICAgIH0sIHNwZWNpZmljQ29udGV4dCwgY29udGV4dCk7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgbGV0IGpzb247XG5cbiAgICBjb25zdCBzdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgbGV0IGJyZWFrUG9pbnQ7XG5cbiAgICBicmVha1BvaW50ID0gdGhpcy5nZXRCcmVha1BvaW50KCk7XG5cbiAgICBjb25zdCBicmVha1BvaW50SlNPTiA9IGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OKGJyZWFrUG9pbnQpO1xuXG4gICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRKU09OOyAgLy8vXG5cbiAgICBqc29uID0ge1xuICAgICAgc3RyaW5nLFxuICAgICAgYnJlYWtQb2ludFxuICAgIH07XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJBc3N1bXB0aW9uXCI7XG5cbiAgc3RhdGljIGZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgICBsZXQgYXNzdW1wdGlvbjtcblxuICAgIGluc3RhbnRpYXRlKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCB7IHN0cmluZyB9ID0ganNvbixcbiAgICAgICAgICAgIGFzc3VtcHRpb25Ob2RlID0gaW5zdGFudGlhdGVBc3N1bXB0aW9uKHN0cmluZywgY29udGV4dCksXG4gICAgICAgICAgICBub2RlID0gYXNzdW1wdGlvbk5vZGUsICAvLy9cbiAgICAgICAgICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50RnJvbUpTT04oanNvbiksXG4gICAgICAgICAgICBsaW5rID0gbGlua0Zyb21Bc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gICAgICBhc3N1bXB0aW9uID0gbmV3IEFzc3VtcHRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBsaW5rLCBzdGF0ZW1lbnQpO1xuICAgIH0sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb247XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiBsaW5rRnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxpbmtOb2RlID0gYXNzdW1wdGlvbk5vZGUuZ2V0TGlua05vZGUoY29udGV4dCksXG4gICAgICAgIGxpbmsgPSBjb250ZXh0LmZpbmRMaW5rQnlMaW5rTm9kZShsaW5rTm9kZSk7XG5cbiAgcmV0dXJuIGxpbms7XG59XG5cbmZ1bmN0aW9uIHN0YXRlbWVudEZyb21Bc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gYXNzdW1wdGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBjb250ZXh0LmZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cbiJdLCJuYW1lcyI6WyJhbGwiLCJzb21lIiwiZXhpc3RzIiwiYmFja3dhcmRzRXZlcnkiLCJjb250aW51YXRpb25VdGlsaXRpZXMiLCJicmVha1BvaW50RnJvbUpTT04iLCJicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiIsImJyZWFrUG9pbnRVdGlsaXRpZXMiLCJkZWZpbmUiLCJBc3N1bXB0aW9uIiwiRWxlbWVudCIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsImxpbmsiLCJzdGF0ZW1lbnQiLCJnZXRMaW5rIiwiZ2V0U3RhdGVtZW50IiwiZ2V0TWV0YXZhcmlhYmxlIiwiZ2V0U3RhdGVtZW50Tm9kZSIsImlzQ29uZGl0aW9uYWwiLCJnZXRBc3N1bXB0aW9uTm9kZSIsImdldE5vZGUiLCJhc3N1bXB0aW9uTm9kZSIsImlzRXF1YWxUbyIsImFzc3VtcHRpb24iLCJhc3N1bXB0aW9uTm9kZU1hdGNoZXMiLCJtYXRjaEFzc3VtcHRpb25Ob2RlIiwiZXF1YWxUbyIsIm5vZGVNYXRjaGVzIiwibWF0Y2hOb2RlIiwiZmluZEFzc3VtcHRpb24iLCJmaW5kQXNzdW1wdGlvbkJ5QXNzdW1wdGlvbk5vZGUiLCJmaW5kRGVkdWNlZFN0YXRlbWVudCIsImZpbmRTdXBwb3NlZFN0YXRlbWVudCIsImluZGV4Iiwic3VwcG9zdGVkU3RhdGVtZW50cyIsInN1cHBvc2VkU3RhdGVtZW50IiwiZmluZFN1cHBvc2VkU3RhdGVtZW50cyIsImZpbmRTdWJwcm9vZkFzc2VydGlvbiIsInZhbGlkYXRlIiwic3RhdGUiLCJmb3J3YXJkIiwiYmFjayIsImFzc3VtcHRpb25TdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsImRlYnVnIiwidmFsaWRhdGVMaW5rIiwiYmluZCIsInZhbGlkYXRlU3RhdGVtZW50IiwidmFsaWRhdGVXaGVuRGVjbGFyZWQiLCJ2YWxpZGF0ZVdoZW5EZXJpdmVkIiwiYWRkQXNzdW1wdGlvbiIsImRlY2xhcmVkIiwiaXNEZWNsYXJlZCIsInNjaGVtYXMiLCJnZXRTY2hlbWFzIiwic2NoZW1hIiwidW5pZnlTY2hlbWEiLCJkZXJpdmVkIiwiaXNEZXJpdmVkIiwic2NoZW1hU3RyaW5nIiwiaXNvbGF0ZSIsImdlbmVyYWxDb250ZXh0IiwicmVjb25jaWxlIiwic3BlY2lmaWNDb250ZXh0IiwidW5pZnlTY2hlbWFMYWJlbCIsInVuaWZ5U2NoZW1hRGVkdWN0aW9uIiwidW5pZnlTY2hlbWFTdXBwb3N0aW9ucyIsImxhYmVsIiwiZ2V0TGFiZWwiLCJ1bmlmeUxhYmVsIiwiZGVkdWN0aW9uIiwiZ2V0RGVkdWN0aW9uIiwiZGVkdWN0aW9uU3RyaW5nIiwiZGVkdWN0aW9uQ29udGV4dCIsImdldENvbnRleHQiLCJkZWR1Y2VkU3RhdGVtZW50Iiwiam9pbiIsInVuaWZ5U3RhdGVtZW50IiwiY29tbWl0Iiwic3VwcG9zaXRpb25zIiwiZ2V0U3VwcG9zaXRpb25zIiwic3VwcG9zZWRTdGF0ZW1lbnRzIiwic3VwcG9zaXRpb25zTGVuZ3RoIiwibGVuZ3RoIiwic3VwcG9zZWRTdGF0ZW1lbnRzTGVuZ3RoIiwic3VwcG9zaXRpb24iLCJ1bmlmeVN1cHBvc2l0aW9uIiwic3VwcG9zaXRpb25TdHJpbmciLCJzdXBwb3NlZFN0YXRlbWVudFN0cmluZyIsInN1cHBvc2l0aW9uQ29udGV4dCIsInRvSlNPTiIsImpzb24iLCJnZXRCcmVha1BvaW50IiwiYnJlYWtQb2ludEpTT04iLCJuYW1lIiwiZnJvbUpTT04iLCJpbnN0YW50aWF0ZSIsImluc3RhbnRpYXRlQXNzdW1wdGlvbiIsImxpbmtGcm9tQXNzdW1wdGlvbk5vZGUiLCJzdGF0ZW1lbnRGcm9tQXNzdW1wdGlvbk5vZGUiLCJsaW5rTm9kZSIsImdldExpbmtOb2RlIiwiZmluZExpbmtCeUxpbmtOb2RlIiwic3RhdGVtZW50Tm9kZSIsImZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQVlBOzs7ZUFBQTs7O2dDQVZvRTswQkFFN0M7dUJBQ2U7NkJBQ0E7eUJBQ2dCO0FBRXRELE1BQU0sRUFBRUEsR0FBRyxFQUFFQyxJQUFJLEVBQUVDLE1BQU0sRUFBRUMsY0FBYyxFQUFFLEdBQUdDLHFDQUFxQixFQUM3RCxFQUFFQyxrQkFBa0IsRUFBRUMsMEJBQTBCLEVBQUUsR0FBR0MsbUNBQW1CO01BRTlFLFdBQWVDLElBQUFBLGdCQUFNLEVBQUMsTUFBTUMsbUJBQW1CQyx1QkFBTztJQUNwRCxZQUFZQyxPQUFPLEVBQUVDLE1BQU0s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
@@ -111,7 +111,6 @@ const _default = (0, _elements.define)(class Axiom extends _claim.default {
111
111
  }, back);
112
112
  }
113
113
  unifyClaim(claim, context, forward, back) {
114
- forward = cut(forward, back); ///
115
114
  const axiomString = this.getString(), claimString = claim.getString();
116
115
  context.trace(`Unifying the '${claimString}' claim with the '${axiomString}' axiom...`);
117
116
  return (0, _context.isolate)((claim, context, forward, back)=>{
@@ -195,4 +194,4 @@ const _default = (0, _elements.define)(class Axiom extends _claim.default {
195
194
  }
196
195
  });
197
196
 
198
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2NsYWltL2F4aW9tLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBicmVha1BvaW50VXRpbGl0aWVzLCBjb250aW51YXRpb25VdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCBDbGFpbSBmcm9tIFwiLi4vY2xhaW1cIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyB0ZXJtc1N0cmluZ0Zyb21UZXJtcyB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvc3RyaW5nXCI7XG5pbXBvcnQgeyBqb2luLCBpc29sYXRlLCBlbmNsb3NlLCByZWNvbmNpbGUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcblxuY29uc3QgeyBicmVha2FibGUgfSA9IGJyZWFrUG9pbnRVdGlsaXRpZXMsXG4gICAgICB7IGN1dCwgYWxsLCBiYWNrd2FyZHNFdmVyeSB9ID0gY29udGludWF0aW9uVXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgQXhpb20gZXh0ZW5kcyBDbGFpbSB7XG4gIGdldEF4aW9tTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgYXhpb21Ob2RlID0gbm9kZTsgLy8vXG5cbiAgICByZXR1cm4gYXhpb21Ob2RlO1xuICB9XG5cbiAgaXNTYXRpc2ZpYWJsZSgpIHtcbiAgICBjb25zdCBzaWduYXR1cmUgPSB0aGlzLmdldFNpZ25hdHVyZSgpLFxuICAgICAgICAgIHNhdGlzZmlhYmxlID0gKHNpZ25hdHVyZSAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gc2F0aXNmaWFibGU7XG4gIH1cblxuICB2ZXJpZnkgPSBicmVha2FibGUoZnVuY3Rpb24gKGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBmb3J3YXJkID0gY3V0KGZvcndhcmQsIGJhY2spOyAvLy9cblxuICAgIGNvbnN0IGF4aW9tU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtheGlvbVN0cmluZ30nIGF4aW9tLi4uYCk7XG5cbiAgICByZXR1cm4gaXNvbGF0ZSgoY29udGV4dCwgZm9yd2FyZCwgYmFjaykgPT4ge1xuICAgICAgcmV0dXJuIGVuY2xvc2UoKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgdmVyaWZ5UHJvb2YgPSB0aGlzLnZlcmlmeVByb29mLmJpbmQodGhpcyksXG4gICAgICAgICAgICAgIHZlcmlmeUxhYmVscyA9IHRoaXMudmVyaWZ5TGFiZWxzLmJpbmQodGhpcyksXG4gICAgICAgICAgICAgIHZlcmlmeVNpZ25hdHVyZSA9IHRoaXMudmVyaWZ5U2lnbmF0dXJlLmJpbmQodGhpcyksXG4gICAgICAgICAgICAgIHZlcmlmeURlZHVjdGlvbiA9IHRoaXMudmVyaWZ5RGVkdWN0aW9uLmJpbmQodGhpcyksXG4gICAgICAgICAgICAgIHZlcmlmeVN1cHBvc2l0aW9ucyA9IHRoaXMudmVyaWZ5U3VwcG9zaXRpb25zLmJpbmQodGhpcyk7XG5cbiAgICAgICAgcmV0dXJuIGFsbChbXG4gICAgICAgICAgdmVyaWZ5TGFiZWxzLFxuICAgICAgICAgIHZlcmlmeVNpZ25hdHVyZSxcbiAgICAgICAgICB2ZXJpZnlTdXBwb3NpdGlvbnMsXG4gICAgICAgICAgdmVyaWZ5RGVkdWN0aW9uLFxuICAgICAgICAgIHZlcmlmeVByb29mXG4gICAgICAgIF0sIGNvbnRleHQsIChjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGZvcndhcmQoYmFjayk7XG4gICAgICAgIH0sIGJhY2spO1xuICAgICAgfSwgY29udGV4dCk7XG4gICAgfSwgY29udGV4dCwgKGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnN0IGF4aW9tID0gdGhpczsgLy8vXG5cbiAgICAgIGNvbnRleHQuYWRkQXhpb20oYXhpb20pO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7YXhpb21TdHJpbmd9JyBheGlvbS5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoY29udGV4dCwgYmFjayk7XG4gICAgfSwgKGV4Y2VwdGlvbikgPT4ge1xuICAgICAgaWYgKGV4Y2VwdGlvbikge1xuICAgICAgICByZXR1cm4gYmFjayhleGNlcHRpb24pO1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0LnRyYWNlKGBVbmFibGUgdG8gdmVyaWZ5IHRoZSAnJHtheGlvbVN0cmluZ30nIGF4aW9tLmApO1xuXG4gICAgICByZXR1cm4gYmFjaygpO1xuICAgIH0pO1xuICB9KTtcblxuICBhcHBseSA9IGJyZWFrYWJsZShmdW5jdGlvbiAoc3RlcCwgZmFjdE9yU3VicHJvb2ZzLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgZm9yd2FyZCA9IGN1dChmb3J3YXJkLCBiYWNrKTsgLy8vXG5cbiAgICBjb25zdCBheGlvbVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYEFwcGx5aW5nIHRoZSAnJHtheGlvbVN0cmluZ30nIGF4aW9tLi4uYCk7XG5cbiAgICByZXR1cm4gaXNvbGF0ZSgoc3RlcCwgZmFjdE9yU3VicHJvb2ZzLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSA9PiB7XG4gICAgICBjb25zdCBhcHBseURlZHVjdGlvbiA9IHRoaXMuYXBwbHlEZWR1Y3Rpb24uYmluZCh0aGlzKSxcbiAgICAgICAgICAgIGFwcGx5U3VwcG9zaXRpb25zID0gdGhpcy5hcHBseVN1cHBvc2l0aW9ucy5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgZGlzY2hhcmdlSHlwb3RoZXNlcyA9IHRoaXMuZGlzY2hhcmdlSHlwb3RoZXNlcy5iaW5kKHRoaXMpO1xuXG4gICAgICByZXR1cm4gcmVjb25jaWxlKChjb250ZXh0KSA9PiB7XG4gICAgICAgIHJldHVybiBhbGwoW1xuICAgICAgICAgIGFwcGx5RGVkdWN0aW9uLFxuICAgICAgICAgIGRpc2NoYXJnZUh5cG90aGVzZXMsXG4gICAgICAgICAgYXBwbHlTdXBwb3NpdGlvbnNcbiAgICAgICAgXSwgc3RlcCwgZmFjdE9yU3VicHJvb2ZzLCBjb250ZXh0LCAoc3RlcCwgZmFjdE9yU3VicHJvb2ZzLCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICAgICAgY29uc3QgY29tcGxleFN1YnN0aXR1dGlvbnNVbnNvbHZlZCA9IGNvbnRleHQuYXJlQ29tcGxleFN1YnN0aXR1dGlvbnNVbnNvbHZlZCgpO1xuXG4gICAgICAgICAgaWYgKGNvbXBsZXhTdWJzdGl0dXRpb25zVW5zb2x2ZWQpIHtcbiAgICAgICAgICAgIGNvbnRleHQuZGVidWcoYFRoZXJlIGFyZSB1bnNvbHZlZCBjb21wbGV4IHN1YnN0aXR1dGlvbnMuYCk7XG5cbiAgICAgICAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGZvcndhcmQoYmFjayk7XG4gICAgICAgIH0sIGJhY2spO1xuICAgICAgfSwgY29udGV4dClcbiAgICB9LCBzdGVwLCBmYWN0T3JTdWJwcm9vZnMsIGNvbnRleHQsIChzdGVwLCBmYWN0T3JTdWJwcm9vZnMsIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLmFwcGxpZWQgdGhlICcke2F4aW9tU3RyaW5nfScgYXhpb20uYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKGNvbnRleHQsIGJhY2spO1xuICAgIH0sIChleGNlcHRpb24pID0+IHtcbiAgICAgIGlmIChleGNlcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIGJhY2soZXhjZXB0aW9uKTtcbiAgICAgIH1cblxuICAgICAgY29udGV4dC50cmFjZShgVW5hYmxlIHRvIGFwcGx5IHRoZSAnJHtheGlvbVN0cmluZ30nIGF4aW9tLmApO1xuXG4gICAgICByZXR1cm4gYmFjaygpO1xuICAgIH0pO1xuICB9KTtcblxuICB2ZXJpZnlTaWduYXR1cmUoY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IHNhdGlzZmlhYmxlID0gdGhpcy5pc1NhdGlzZmlhYmxlKCk7XG5cbiAgICBpZiAoIXNhdGlzZmlhYmxlKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZChjb250ZXh0LCBiYWNrKTtcbiAgICB9XG5cbiAgICBjb25zdCBzaWduYXR1cmUgPSB0aGlzLmdldFNpZ25hdHVyZSgpLFxuICAgICAgICAgIGF4aW9tU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke2F4aW9tU3RyaW5nfScgYXhpb20ncyBzaWduYXR1cmUuLi5gKTtcblxuICAgIHJldHVybiBzaWduYXR1cmUudmVyaWZ5KGNvbnRleHQsIChjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICBjb250ZXh0LnRyYWNlKGAuLi52ZXJpZmllZCB0aGUgJyR7YXhpb21TdHJpbmd9JyBheGlvbSdzIHNpZ25hdHVyZS5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB1bmlmeVRlcm1zKHRlcm1zLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgcXVvdGVkID0gdHJ1ZSxcbiAgICAgICAgICB0ZXJtc1N0cmluZyA9IHRlcm1zU3RyaW5nRnJvbVRlcm1zKHRlcm1zLCBxdW90ZWQpLFxuICAgICAgICAgIGF4aW9tU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJHt0ZXJtc1N0cmluZ30gdGVybXMgd2l0aCB0aGUgJyR7YXhpb21TdHJpbmd9JyBheGlvbS4uLmApO1xuXG4gICAgY29uc3Qgc2lnbmF0dXJlID0gdGhpcy5nZXRTaWduYXR1cmUoKTtcblxuICAgIHJldHVybiBzaWduYXR1cmUudW5pZnlUZXJtcyh0ZXJtcywgY29udGV4dCwgKGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICR7dGVybXNTdHJpbmd9IHRlcm1zIHdpdGggdGhlICcke2F4aW9tU3RyaW5nfScgYXhpb20uLi5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB1bmlmeUNsYWltKGNsYWltLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgZm9yd2FyZCA9IGN1dChmb3J3YXJkLCBiYWNrKTsgLy8vXG5cbiAgICBjb25zdCBheGlvbVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksIC8vL1xuICAgICAgICAgIGNsYWltU3RyaW5nID0gY2xhaW0uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbSB3aXRoIHRoZSAnJHtheGlvbVN0cmluZ30nIGF4aW9tLi4uYCk7XG5cbiAgICByZXR1cm4gaXNvbGF0ZSgoY2xhaW0sIGNvbnRleHQsIGZvcndhcmQsIGJhY2spID0+IHtcbiAgICAgIHJldHVybiByZWNvbmNpbGUoKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgZGVkdWN0aW9uID0gY2xhaW0uZ2V0RGVkdWN0aW9uKCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMudW5pZnlEZWR1Y3Rpb24oZGVkdWN0aW9uLCBjb250ZXh0LCAoY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgICAgIGNvbnN0IHN1cHBvc2l0aW9ucyA9IGNsYWltLmdldFN1cHBvc2l0aW9ucygpO1xuXG4gICAgICAgICAgcmV0dXJuIHRoaXMudW5pZnlTdXBwb3NpdGlvbnMoc3VwcG9zaXRpb25zLCBjb250ZXh0LCAoY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgICAgICAgY29udGV4dC5jb21taXQoKTtcblxuICAgICAgICAgICAgcmV0dXJuIGZvcndhcmQoYmFjayk7XG4gICAgICAgICAgfSwgYmFjayk7XG4gICAgICAgIH0sIGJhY2spO1xuICAgICAgfSwgY29udGV4dCk7XG4gICAgfSwgY2xhaW0sIGNvbnRleHQsIChjbGFpbSwgY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbSB3aXRoIHRoZSAnJHtheGlvbVN0cmluZ30nIGF4aW9tLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChjb250ZXh0LCBiYWNrKTtcbiAgICB9LCAoZXhjZXB0aW9uKSA9PiB7XG4gICAgICBpZiAoZXhjZXB0aW9uKSB7XG4gICAgICAgIHJldHVybiBiYWNrKGV4Y2VwdGlvbik7XG4gICAgICB9XG5cbiAgICAgIGNvbnRleHQudHJhY2UoYFVuYWJsZSB0byB1bmlmeSB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbSB3aXRoIHRoZSAnJHtheGlvbVN0cmluZ30nIGF4aW9tLmApO1xuXG4gICAgICByZXR1cm4gYmFjaygpO1xuICAgIH0pO1xuICB9XG5cbiAgdW5pZnlEZWR1Y3Rpb24oZGVkdWN0aW9uLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgZ2VuZXJhbERlZHVjdGlvbiA9IHRoaXMuZ2V0RGVkdWN0aW9uKCksIC8vL1xuICAgICAgICAgIHNwZWNpZmljRGVkdWN0aW9uID0gZGVkdWN0aW9uLCAgLy8vXG4gICAgICAgICAgZ2VuZXJhbERlZHVjdGlvblN0cmluZyA9IGdlbmVyYWxEZWR1Y3Rpb24uZ2V0U3RyaW5nKCksXG4gICAgICAgICAgc3BlY2lmaWNEZWR1Y3Rpb25TdHJpbmcgPSBzcGVjaWZpY0RlZHVjdGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzcGVjaWZpY0RlZHVjdGlvblN0cmluZ30nIGRlZHVjdGlvbiB3aXRoIHRoZSAnJHtnZW5lcmFsRGVkdWN0aW9uU3RyaW5nfScgZGVkdWN0aW9uLi4uYCk7XG5cbiAgICBjb25zdCBzcGVjaWZpY0RlZHVjdGlvbkNvbnRleHQgPSBzcGVjaWZpY0RlZHVjdGlvbi5nZXRDb250ZXh0KCksXG4gICAgICAgICAgZ2VuZXJhbERlZHVjdGlvbkNvbnRleHQgPSBnZW5lcmFsRGVkdWN0aW9uLmdldENvbnRleHQoKSxcbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHQgPSBzcGVjaWZpY0RlZHVjdGlvbkNvbnRleHQsICAvLy9cbiAgICAgICAgICBnZW5lcmFsQ29udGV4dCA9IGdlbmVyYWxEZWR1Y3Rpb25Db250ZXh0OyAvLy9cblxuICAgIHJldHVybiBqb2luKChzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgIHJldHVybiByZWNvbmNpbGUoKHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCBzdGF0ZW1lbnQgPSBzcGVjaWZpY0RlZHVjdGlvbi5nZXRTdGF0ZW1lbnQoKTtcblxuICAgICAgICBkZWR1Y3Rpb24gPSBnZW5lcmFsRGVkdWN0aW9uOyAvLy9cblxuICAgICAgICByZXR1cm4gZGVkdWN0aW9uLnVuaWZ5U3RhdGVtZW50KHN0YXRlbWVudCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spID0+IHtcbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHQuY29tbWl0KGNvbnRleHQpO1xuXG4gICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3BlY2lmaWNEZWR1Y3Rpb25TdHJpbmd9JyBkZWR1Y3Rpb24gd2l0aCB0aGUgJyR7Z2VuZXJhbERlZHVjdGlvblN0cmluZ30nIGRlZHVjdGlvbi5gKTtcblxuICAgICAgICAgIHJldHVybiBmb3J3YXJkKGNvbnRleHQsIGJhY2spO1xuICAgICAgICB9LCBiYWNrKTtcbiAgICAgIH0sIHNwZWNpZmljQ29udGV4dCk7XG4gICAgfSwgc3BlY2lmaWNDb250ZXh0LCBjb250ZXh0KTtcbiAgfVxuXG4gIHVuaWZ5U3VwcG9zaXRpb24oc3VwcG9zaXRpb24sIGNvbnRleHQsIGZvcndhcmQsIGJhY2ssIGluZGV4KSB7XG4gICAgY29uc3Qgc3BlY2lmaWNTdXBwb3NpdGlvbiA9IHN1cHBvc2l0aW9uOyAgLy8vXG5cbiAgICBzdXBwb3NpdGlvbiA9IHRoaXMuZ2V0U3VwcG9zaXRpb24oaW5kZXgpO1xuXG4gICAgY29uc3QgZ2VuZXJhbFN1cHBvc2l0aW9uID0gc3VwcG9zaXRpb24sIC8vL1xuICAgICAgICAgIGdlbmVyYWxTdXBwb3NpdGlvblN0cmluZyA9IGdlbmVyYWxTdXBwb3NpdGlvbi5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzcGVjaWZpY1N1cHBvc2l0aW9uU3RyaW5nID0gc3BlY2lmaWNTdXBwb3NpdGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzcGVjaWZpY1N1cHBvc2l0aW9uU3RyaW5nfScgc3VwcG9zaXRpb24gd2l0aCB0aGUgJyR7Z2VuZXJhbFN1cHBvc2l0aW9uU3RyaW5nfScgc3VwcG9zaXRpb24uLi5gKTtcblxuICAgIGNvbnN0IHNwZWNpZmljU3VwcG9zaXRpb25Db250ZXh0ID0gc3BlY2lmaWNTdXBwb3NpdGlvbi5nZXRDb250ZXh0KCksXG4gICAgICAgICAgZ2VuZXJhbFN1cHBvc2l0aW9uQ29udGV4dCA9IGdlbmVyYWxTdXBwb3NpdGlvbi5nZXRDb250ZXh0KCksXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0ID0gc3BlY2lmaWNTdXBwb3NpdGlvbkNvbnRleHQsICAvLy9cbiAgICAgICAgICBnZW5lcmFsQ29udGV4dCA9IGdlbmVyYWxTdXBwb3NpdGlvbkNvbnRleHQ7IC8vL1xuXG4gICAgcmV0dXJuIGpvaW4oKHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgcmV0dXJuIHJlY29uY2lsZSgoc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IHN0YXRlbWVudCA9IHNwZWNpZmljU3VwcG9zaXRpb24uZ2V0U3RhdGVtZW50KCksXG4gICAgICAgICAgICAgIHN1cHBvc2l0aW9uID0gZ2VuZXJhbFN1cHBvc2l0aW9uOyAvLy9cblxuICAgICAgICByZXR1cm4gc3VwcG9zaXRpb24udW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgICAgIHNwZWNpZmljQ29udGV4dC5jb21taXQoY29udGV4dCk7XG5cbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzcGVjaWZpY1N1cHBvc2l0aW9uU3RyaW5nfScgc3VwcG9zaXRpb24gd2l0aCB0aGUgJyR7Z2VuZXJhbFN1cHBvc2l0aW9uU3RyaW5nfScgc3VwcG9zaXRpb24uYCk7XG5cbiAgICAgICAgICByZXR1cm4gZm9yd2FyZChjb250ZXh0LCBiYWNrKTtcbiAgICAgICAgfSwgYmFjayk7XG4gICAgICB9LCBzcGVjaWZpY0NvbnRleHQpO1xuICAgIH0sIHNwZWNpZmljQ29udGV4dCwgY29udGV4dCk7XG4gIH1cblxuICB1bmlmeVN1cHBvc2l0aW9ucyhzdXBwb3NpdGlvbnMsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBzcGVjaWZpY1N1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9ucywgIC8vL1xuICAgICAgICAgIHNwZWNpZmljU3VwcG9zaXRpb25zTGVuZ3RoID0gc3BlY2lmaWNTdXBwb3NpdGlvbnMubGVuZ3RoO1xuXG4gICAgc3VwcG9zaXRpb25zID0gdGhpcy5nZXRTdXBwb3NpdGlvbnMoKTtcblxuICAgIGNvbnN0IGdlbmVyYWxTdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnMsIC8vL1xuICAgICAgICAgIGdlbmVyYWxTdXBwb3NpdGlvbnNMZW5ndGggPSBnZW5lcmFsU3VwcG9zaXRpb25zLmxlbmd0aDtcblxuICAgIGlmIChnZW5lcmFsU3VwcG9zaXRpb25zTGVuZ3RoICE9PSBzcGVjaWZpY1N1cHBvc2l0aW9uc0xlbmd0aCkge1xuICAgICAgcmV0dXJuIGJhY2soKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFja3dhcmRzRXZlcnkoc3VwcG9zaXRpb25zLCAoc3VwcG9zaXRpb24sIGNvbnRleHQsIGZvcndhcmQsIGJhY2ssIGluZGV4KSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy51bmlmeVN1cHBvc2l0aW9uKHN1cHBvc2l0aW9uLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrLCBpbmRleCk7XG4gICAgfSwgY29udGV4dCwgZm9yd2FyZCwgYmFjayk7XG4gIH1cblxuICB1bmlmeVNpZ25hdHVyZUFzc2VydGlvbihzaWduYXR1cmVBc3NlcnRpb24sIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBheGlvbVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksIC8vL1xuICAgICAgICAgIHNpZ25hdHVyZUFzc2VydGlvblN0cmluZyA9IHNpZ25hdHVyZUFzc2VydGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzaWduYXR1cmVBc3NlcnRpb25TdHJpbmd9JyBzaWduYXR1cmUgYXNzZXJ0aW9uIHdpdGggdGhlICcke2F4aW9tU3RyaW5nfScgYXhpb20uLi5gKTtcblxuICAgIGNvbnN0IHRlcm1zID0gc2lnbmF0dXJlQXNzZXJ0aW9uLmdldFRlcm1zKCksXG4gICAgICAgICAgc2lnbmF0dXJlID0gdGhpcy5nZXRTaWduYXR1cmUoKTtcblxuICAgIHJldHVybiBzaWduYXR1cmUudW5pZnlUZXJtcyh0ZXJtcywgY29udGV4dCwgKGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3NpZ25hdHVyZUFzc2VydGlvblN0cmluZ30nIHNpZ25hdHVyZSBhc3NlcnRpb24gd2l0aCB0aGUgJyR7YXhpb21TdHJpbmd9JyBheGlvbS5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiQXhpb21cIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkgeyByZXR1cm4gQ2xhaW0uZnJvbUpTT04oQXhpb20sIGpzb24sIGNvbnRleHQpOyB9XG59KTtcbiJdLCJuYW1lcyI6WyJicmVha2FibGUiLCJicmVha1BvaW50VXRpbGl0aWVzIiwiY3V0IiwiYWxsIiwiYmFja3dhcmRzRXZlcnkiLCJjb250aW51YXRpb25VdGlsaXRpZXMiLCJkZWZpbmUiLCJBeGlvbSIsIkNsYWltIiwiZ2V0QXhpb21Ob2RlIiwibm9kZSIsImdldE5vZGUiLCJheGlvbU5vZGUiLCJpc1NhdGlzZmlhYmxlIiwic2lnbmF0dXJlIiwiZ2V0U2lnbmF0dXJlIiwic2F0aXNmaWFibGUiLCJ2ZXJpZnkiLCJjb250ZXh0IiwiZm9yd2FyZCIsImJhY2siLCJheGlvbVN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwiaXNvbGF0ZSIsImVuY2xvc2UiLCJ2ZXJpZnlQcm9vZiIsImJpbmQiLCJ2ZXJpZnlMYWJlbHMiLCJ2ZXJpZnlTaWduYXR1cmUiLCJ2ZXJpZnlEZWR1Y3Rpb24iLCJ2ZXJpZnlTdXBwb3NpdGlvbnMiLCJheGlvbSIsImFkZEF4aW9tIiwiZGVidWciLCJleGNlcHRpb24iLCJhcHBseSIsInN0ZXAiLCJmYWN0T3JTdWJwcm9vZnMiLCJhcHBseURlZHVjdGlvbiIsImFwcGx5U3VwcG9zaXRpb25zIiwiZGlzY2hhcmdlSHlwb3RoZXNlcyIsInJlY29uY2lsZSIsImNvbXBsZXhTdWJzdGl0dXRpb25zVW5zb2x2ZWQiLCJhcmVDb21wbGV4U3Vic3RpdHV0aW9uc1Vuc29sdmVkIiwidW5pZnlUZXJtcyIsInRlcm1zIiwicXVvdGVkIiwidGVybXNTdHJpbmciLCJ0ZXJtc1N0cmluZ0Zyb21UZXJtcyIsInVuaWZ5Q2xhaW0iLCJjbGFpbSIsImNsYWltU3RyaW5nIiwiZGVkdWN0aW9uIiwiZ2V0RGVkdWN0aW9uIiwidW5pZnlEZWR1Y3Rpb24iLCJzdXBwb3NpdGlvbnMiLCJnZXRTdXBwb3NpdGlvbnMiLCJ1bmlmeVN1cHBvc2l0aW9ucyIsImNvbW1pdCIsImdlbmVyYWxEZWR1Y3Rpb24iLCJzcGVjaWZpY0RlZHVjdGlvbiIsImdlbmVyYWxEZWR1Y3Rpb25TdHJpbmciLCJzcGVjaWZpY0RlZHVjdGlvblN0cmluZyIsInNwZWNpZmljRGVkdWN0aW9uQ29udGV4dCIsImdldENvbnRleHQiLCJnZW5lcmFsRGVkdWN0aW9uQ29udGV4dCIsInNwZWNpZmljQ29udGV4dCIsImdlbmVyYWxDb250ZXh0Iiwiam9pbiIsInN0YXRlbWVudCIsImdldFN0YXRlbWVudCIsInVuaWZ5U3RhdGVtZW50IiwidW5pZnlTdXBwb3NpdGlvbiIsInN1cHBvc2l0aW9uIiwiaW5kZXgiLCJzcGVjaWZpY1N1cHBvc2l0aW9uIiwiZ2V0U3VwcG9zaXRpb24iLCJnZW5lcmFsU3VwcG9zaXRpb24iLCJnZW5lcmFsU3VwcG9zaXRpb25TdHJpbmciLCJzcGVjaWZpY1N1cHBvc2l0aW9uU3RyaW5nIiwic3BlY2lmaWNTdXBwb3NpdGlvbkNvbnRleHQiLCJnZW5lcmFsU3VwcG9zaXRpb25Db250ZXh0Iiwic3BlY2lmaWNTdXBwb3NpdGlvbnMiLCJzcGVjaWZpY1N1cHBvc2l0aW9uc0xlbmd0aCIsImxlbmd0aCIsImdlbmVyYWxTdXBwb3NpdGlvbnMiLCJnZW5lcmFsU3VwcG9zaXRpb25zTGVuZ3RoIiwidW5pZnlTaWduYXR1cmVBc3NlcnRpb24iLCJzaWduYXR1cmVBc3NlcnRpb24iLCJzaWduYXR1cmVBc3NlcnRpb25TdHJpbmciLCJnZXRUZXJtcyIsIm5hbWUiLCJmcm9tSlNPTiIsImpzb24iXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWFBOzs7ZUFBQTs7O2dDQVgyRDs4REFFekM7MEJBRUs7d0JBQ2M7eUJBQ2E7Ozs7OztBQUVsRCxNQUFNLEVBQUVBLFNBQVMsRUFBRSxHQUFHQyxtQ0FBbUIsRUFDbkMsRUFBRUMsR0FBRyxFQUFFQyxHQUFHLEVBQUVDLGNBQWMsRUFBRSxHQUFHQyxxQ0FBcUI7TUFFMUQsV0FBZUMsSUFBQUEsZ0JBQU0sRUFBQyxNQUFNQyxjQUFjQyxjQUFLO0lBQzdDQyxlQUFlO1FBQ2IsTUFBTUMsT0FBTyxJQUFJLENBQUNDLE9BQU8sSUFDbkJDLFlBQVlGLE1BQU0sR0FBRztRQUUzQixPQUFPRTtJQUNUO0lBRUFDLGdCQUFnQjtRQUNkLE1BQU1DLFlBQVksSUFBSSxDQUFDQyxZQUFZLElBQzdCQyxjQUFlRixjQUFjO1FBRW5DLE9BQU9FO0lBQ1Q7SUFFQUMsU0FBU2pCLFVBQVUsU0FBVWtCLE9BQU8sRUFBRUMsT0FBTyxFQUFFQyxJQUFJO1FBQ2pERCxVQUFVakIsSUFBSWlCLFNBQVNDLE9BQU8sR0FBRztRQUVqQyxNQUFNQyxjQUFjLElBQUksQ0FBQ0MsU0FBUyxJQUFLLEdBQUc7UUFFMUNKLFFBQVFLLEtBQUssQ0FBQyxDQUFDLGVBQWUsRUFBRUYsWUFBWSxVQUFVLENBQUM7UUFFdkQsT0FBT0csSUFBQUEsZ0JBQU8sRUFBQyxDQUFDTixTQUFTQyxTQUFTQztZQUNoQyxPQUFPSyxJQUFBQSxnQkFBTyxFQUFDLENBQUNQO2dCQUNkLE1BQU1RLGNBQWMsSUFBSSxDQUFDQSxXQUFXLENBQUNDLElBQUksQ0FBQyxJQUFJLEdBQ3hDQyxlQUFlLElBQUksQ0FBQ0EsWUFBWSxDQUFDRCxJQUFJLENBQUMsSUFBSSxHQUMxQ0Usa0JBQWtCLElBQUksQ0FBQ0EsZUFBZSxDQUFDRixJQUFJLENBQUMsSUFBSSxHQUNoREcsa0JBQWtCLElBQUksQ0FBQ0EsZUFBZSxDQUFDSCxJQUFJLENBQUMsSUFBSSxHQUNoREkscUJBQXFCLElBQUksQ0FBQ0Esa0JBQWtCLENBQUNKLElBQUksQ0FBQyxJQUFJO2dCQUU1RCxPQUFPeEIsSUFBSTtvQkFDVHlCO29CQUNBQztvQkFDQUU7b0JBQ0FEO29CQUNBSjtpQkFDRCxFQUFFUixTQUFTLENBQUNBLFNBQVNFO29CQUNwQixPQUFPRCxRQUFRQztnQkFDakIsR0FBR0E7WUFDTCxHQUFHRjtRQUNMLEdBQUdBLFNBQVMsQ0FBQ0EsU0FBU0U7WUFDcEIsTUFBTVksUUFBUSxJQUFJLEVBQUUsR0FBRztZQUV2QmQsUUFBUWUsUUFBUSxDQUFDRDtZQUVqQmQsUUFBUWdCLEtBQUssQ0FBQyxDQUFDLGlCQUFpQixFQUFFYixZQUFZLFFBQVEsQ0FBQztZQUV2RCxPQUFPRixRQUFRRCxTQUFTRTtRQUMxQixHQUFHLENBQUNlO1lBQ0YsSUFBSUEsV0FBVztnQkFDYixPQUFPZixLQUFLZTtZQUNkO1lBRUFqQixRQUFRSyxLQUFLLENBQUMsQ0FBQyxzQkFBc0IsRUFBRUYsWUFBWSxRQUFRLENBQUM7WUFFNUQsT0FBT0Q7UUFDVDtJQUNGLEdBQUc7SUFFSGdCLFFBQVFwQyxVQUFVLFNBQVVxQyxJQUFJLEVBQUVDLGVBQWUsRUFBRXBCLE9BQU8sRUFBRUMsT0FBTyxFQUFFQyxJQUFJO1FBQ3ZFRCxVQUFVakIsSUFBSWlCLFNBQVNDLE9BQU8sR0FBRztRQUVqQyxNQUFNQyxjQUFjLElBQUksQ0FBQ0MsU0FBUyxJQUFLLEdBQUc7UUFFMUNKLFFBQVFLLEtBQUssQ0FBQyxDQUFDLGNBQWMsRUFBRUYsWUFBWSxVQUFVLENBQUM7UUFFdEQsT0FBT0csSUFBQUEsZ0JBQU8sRUFBQyxDQUFDYSxNQUFNQyxpQkFBaUJwQixTQUFTQyxTQUFTQztZQUN2RCxNQUFNbUIsaUJBQWlCLElBQUksQ0FBQ0EsY0FBYyxDQUFDWixJQUFJLENBQUMsSUFBSSxHQUM5Q2Esb0JBQW9CLElBQUksQ0FBQ0EsaUJBQWlCLENBQUNiLElBQUksQ0FBQyxJQUFJLEdBQ3BEYyxzQkFBc0IsSUFBSSxDQUFDQSxtQkFBbUIsQ0FBQ2QsSUFBSSxDQUFDLElBQUk7WUFFOUQsT0FBT2UsSUFBQUEsa0JBQVMsRUFBQyxDQUFDeEI7Z0JBQ2hCLE9BQU9mLElBQUk7b0JBQ1RvQztvQkFDQUU7b0JBQ0FEO2lCQUNELEVBQUVILE1BQU1DLGlCQUFpQnBCLFNBQVMsQ0FBQ21CLE1BQU1DLGlCQUFpQnBCLFNBQVNFO29CQUNsRSxNQUFNdUIsK0JBQStCekIsUUFBUTBCLCtCQUErQjtvQkFFNUUsSUFBSUQsOEJBQThCO3dCQUNoQ3pCLFFBQVFnQixLQUFLLENBQUMsQ0FBQyx5Q0FBeUMsQ0FBQzt3QkFFekQsT0FBT2Q7b0JBQ1Q7b0JBRUEsT0FBT0QsUUFBUUM7Z0JBQ2pCLEdBQUdBO1lBQ0wsR0FBR0Y7UUFDTCxHQUFHbUIsTUFBTUMsaUJBQWlCcEIsU0FBUyxDQUFDbUIsTUFBTUMsaUJBQWlCcEIsU0FBU0U7WUFDbEVGLFFBQVFnQixLQUFLLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRWIsWUFBWSxRQUFRLENBQUM7WUFFdEQsT0FBT0YsUUFBUUQsU0FBU0U7UUFDMUIsR0FBRyxDQUFDZTtZQUNGLElBQUlBLFdBQVc7Z0JBQ2IsT0FBT2YsS0FBS2U7WUFDZDtZQUVBakIsUUFBUUssS0FBSyxDQUFDLENBQUMscUJBQXFCLEVBQUVGLFlBQVksUUFBUSxDQUFDO1lBRTNELE9BQU9EO1FBQ1Q7SUFDRixHQUFHO0lBRUhTLGdCQUFnQlgsT0FBTyxFQUFFQyxPQUFPLEVBQUVDLElBQUksRUFBRTtRQUN0QyxNQUFNSixjQUFjLElBQUksQ0FBQ0gsYUFBYTtRQUV0QyxJQUFJLENBQUNHLGFBQWE7WUFDaEIsT0FBT0csUUFBUUQsU0FBU0U7UUFDMUI7UUFFQSxNQUFNTixZQUFZLElBQUksQ0FBQ0MsWUFBWSxJQUM3Qk0sY0FBYyxJQUFJLENBQUNDLFNBQVMsSUFBSSxHQUFHO1FBRXpDSixRQUFRSyxLQUFLLENBQUMsQ0FBQyxlQUFlLEVBQUVGLFlBQVksc0JBQXNCLENBQUM7UUFFbkUsT0FBT1AsVUFBVUcsTUFBTSxDQUFDQyxTQUFTLENBQUNBLFNBQVNFO1lBQ3pDRixRQUFRSyxLQUFLLENBQUMsQ0FBQyxpQkFBaUIsRUFBRUYsWUFBWSxvQkFBb0IsQ0FBQztZQUVuRSxPQUFPRixRQUFRRCxTQUFTRTtRQUMxQixHQUFHQTtJQUNMO0lBRUF5QixXQUFXQyxLQUFLLEVBQUU1QixPQUFPLEVBQUVDLE9BQU8sRUFBRUMsSUFBSSxFQUFFO1FBQ3hDLE1BQU0yQixTQUFTLE1BQ1RDLGNBQWNDLElBQUFBLDRCQUFvQixFQUFDSCxPQUFPQyxTQUMxQzFCLGNBQWMsSUFBSSxDQUFDQyxTQUFTLElBQUksR0FBRztRQUV6Q0osUUFBUUssS0FBSyxDQUFDLENBQUMsYUFBYSxFQUFFeUIsWUFBWSxpQkFBaUIsRUFBRTNCLFlBQVksVUFBVSxDQUFDO1FBRXBGLE1BQU1QLFlBQVksSUFBSSxDQUFDQyxZQUFZO1FBRW5DLE9BQU9ELFVBQVUrQixVQUFVLENBQUNDLE9BQU81QixTQUFTLENBQUNBLFNBQVNFO1lBQ3BERixRQUFRZ0IsS0FBSyxDQUFDLENBQUMsZUFBZSxFQUFFYyxZQUFZLGlCQUFpQixFQUFFM0IsWUFBWSxVQUFVLENBQUM7WUFFdEYsT0FBT0YsUUFBUUQsU0FBU0U7UUFDMUIsR0FBR0E7SUFDTDtJQUVBOEIsV0FBV0MsS0FBSyxFQUFFakMsT0FBTyxFQUFFQyxPQUFPLEVBQUVDLElBQUksRUFBRTtRQUN4Q0QsVUFBVWpCLElBQUlpQixTQUFTQyxPQUFPLEdBQUc7UUFFakMsTUFBTUMsY0FBYyxJQUFJLENBQUNDLFNBQVMsSUFDNUI4QixjQUFjRCxNQUFNN0IsU0FBUztRQUVuQ0osUUFBUUssS0FBSyxDQUFDLENBQUMsY0FBYyxFQUFFNkIsWUFBWSxrQkFBa0IsRUFBRS9CLFlBQVksVUFBVSxDQUFDO1FBRXRGLE9BQU9HLElBQUFBLGdCQUFPLEVBQUMsQ0FBQzJCLE9BQU9qQyxTQUFTQyxTQUFTQztZQUN2QyxPQUFPc0IsSUFBQUEsa0JBQVMsRUFBQyxDQUFDeEI7Z0JBQ2hCLE1BQU1tQyxZQUFZRixNQUFNRyxZQUFZO2dCQUVwQyxPQUFPLElBQUksQ0FBQ0MsY0FBYyxDQUFDRixXQUFXbkMsU0FBUyxDQUFDQSxTQUFTRTtvQkFDdkQsTUFBTW9DLGVBQWVMLE1BQU1NLGVBQWU7b0JBRTFDLE9BQU8sSUFBSSxDQUFDQyxpQkFBaUIsQ0FBQ0YsY0FBY3RDLFNBQVMsQ0FBQ0EsU0FBU0U7d0JBQzdERixRQUFReUMsTUFBTTt3QkFFZCxPQUFPeEMsUUFBUUM7b0JBQ2pCLEdBQUdBO2dCQUNMLEdBQUdBO1lBQ0wsR0FBR0Y7UUFDTCxHQUFHaUMsT0FBT2pDLFNBQVMsQ0FBQ2lDLE9BQU9qQyxTQUFTRTtZQUNsQ0YsUUFBUWdCLEtBQUssQ0FBQyxDQUFDLGdCQUFnQixFQUFFa0IsWUFBWSxrQkFBa0IsRUFBRS9CLFlBQVksUUFBUSxDQUFDO1lBRXRGLE9BQU9GLFFBQVFELFNBQVNFO1FBQzFCLEdBQUcsQ0FBQ2U7WUFDRixJQUFJQSxXQUFXO2dCQUNiLE9BQU9mLEtBQUtlO1lBQ2Q7WUFFQWpCLFFBQVFLLEtBQUssQ0FBQyxDQUFDLHFCQUFxQixFQUFFNkIsWUFBWSxrQkFBa0IsRUFBRS9CLFlBQVksUUFBUSxDQUFDO1lBRTNGLE9BQU9EO1FBQ1Q7SUFDRjtJQUVBbUMsZUFBZUYsU0FBUyxFQUFFbkMsT0FBTyxFQUFFQyxPQUFPLEVBQUVDLElBQUksRUFBRTtRQUNoRCxNQUFNd0MsbUJBQW1CLElBQUksQ0FBQ04sWUFBWSxJQUNwQ08sb0JBQW9CUixXQUNwQlMseUJBQXlCRixpQkFBaUJ0QyxTQUFTLElBQ25EeUMsMEJBQTBCRixrQkFBa0J2QyxTQUFTO1FBRTNESixRQUFRSyxLQUFLLENBQUMsQ0FBQyxjQUFjLEVBQUV3Qyx3QkFBd0Isc0JBQXNCLEVBQUVELHVCQUF1QixjQUFjLENBQUM7UUFFckgsTUFBTUUsMkJBQTJCSCxrQkFBa0JJLFVBQVUsSUFDdkRDLDBCQUEwQk4saUJBQWlCSyxVQUFVLElBQ3JERSxrQkFBa0JILDBCQUNsQkksaUJBQWlCRix5QkFBeUIsR0FBRztRQUVuRCxPQUFPRyxJQUFBQSxhQUFJLEVBQUMsQ0FBQ0Y7WUFDWCxPQUFPekIsSUFBQUEsa0JBQVMsRUFBQyxDQUFDeUI7Z0JBQ2hCLE1BQU1HLFlBQVlULGtCQUFrQlUsWUFBWTtnQkFFaERsQixZQUFZTyxrQkFBa0IsR0FBRztnQkFFakMsT0FBT1AsVUFBVW1CLGNBQWMsQ0FBQ0YsV0FBV0YsZ0JBQWdCRCxpQkFBaUIsQ0FBQ0MsZ0JBQWdCRCxpQkFBaUIvQztvQkFDNUcrQyxnQkFBZ0JSLE1BQU0sQ0FBQ3pDO29CQUV2QkEsUUFBUWdCLEtBQUssQ0FBQyxDQUFDLGdCQUFnQixFQUFFNkIsd0JBQXdCLHNCQUFzQixFQUFFRCx1QkFBdUIsWUFBWSxDQUFDO29CQUVySCxPQUFPM0MsUUFBUUQsU0FBU0U7Z0JBQzFCLEdBQUdBO1lBQ0wsR0FBRytDO1FBQ0wsR0FBR0EsaUJBQWlCakQ7SUFDdEI7SUFFQXVELGlCQUFpQkMsV0FBVyxFQUFFeEQsT0FBTyxFQUFFQyxPQUFPLEVBQUVDLElBQUksRUFBRXVELEtBQUssRUFBRTtRQUMzRCxNQUFNQyxzQkFBc0JGLGFBQWMsR0FBRztRQUU3Q0EsY0FBYyxJQUFJLENBQUNHLGNBQWMsQ0FBQ0Y7UUFFbEMsTUFBTUcscUJBQXFCSixhQUNyQkssMkJBQTJCRCxtQkFBbUJ4RCxTQUFTLElBQ3ZEMEQsNEJBQTRCSixvQkFBb0J0RCxTQUFTO1FBRS9ESixRQUFRSyxLQUFLLENBQUMsQ0FBQyxjQUFjLEVBQUV5RCwwQkFBMEIsd0JBQXdCLEVBQUVELHlCQUF5QixnQkFBZ0IsQ0FBQztRQUU3SCxNQUFNRSw2QkFBNkJMLG9CQUFvQlgsVUFBVSxJQUMzRGlCLDRCQUE0QkosbUJBQW1CYixVQUFVLElBQ3pERSxrQkFBa0JjLDRCQUNsQmIsaUJBQWlCYywyQkFBMkIsR0FBRztRQUVyRCxPQUFPYixJQUFBQSxhQUFJLEVBQUMsQ0FBQ0Y7WUFDWCxPQUFPekIsSUFBQUEsa0JBQVMsRUFBQyxDQUFDeUI7Z0JBQ2hCLE1BQU1HLFlBQVlNLG9CQUFvQkwsWUFBWSxJQUM1Q0csY0FBY0ksb0JBQW9CLEdBQUc7Z0JBRTNDLE9BQU9KLFlBQVlGLGNBQWMsQ0FBQ0YsV0FBV0YsZ0JBQWdCRCxpQkFBaUIsQ0FBQ0MsZ0JBQWdCRCxpQkFBaUIvQztvQkFDOUcrQyxnQkFBZ0JSLE1BQU0sQ0FBQ3pDO29CQUV2QkEsUUFBUWdCLEtBQUssQ0FBQyxDQUFDLGdCQUFnQixFQUFFOEMsMEJBQTBCLHdCQUF3QixFQUFFRCx5QkFBeUIsY0FBYyxDQUFDO29CQUU3SCxPQUFPNUQsUUFBUUQsU0FBU0U7Z0JBQzFCLEdBQUdBO1lBQ0wsR0FBRytDO1FBQ0wsR0FBR0EsaUJBQWlCakQ7SUFDdEI7SUFFQXdDLGtCQUFrQkYsWUFBWSxFQUFFdEMsT0FBTyxFQUFFQyxPQUFPLEVBQUVDLElBQUksRUFBRTtRQUN0RCxNQUFNK0QsdUJBQXVCM0IsY0FDdkI0Qiw2QkFBNkJELHFCQUFxQkUsTUFBTTtRQUU5RDdCLGVBQWUsSUFBSSxDQUFDQyxlQUFlO1FBRW5DLE1BQU02QixzQkFBc0I5QixjQUN0QitCLDRCQUE0QkQsb0JBQW9CRCxNQUFNO1FBRTVELElBQUlFLDhCQUE4QkgsNEJBQTRCO1lBQzVELE9BQU9oRTtRQUNUO1FBRUEsT0FBT2hCLGVBQWVvRCxjQUFjLENBQUNrQixhQUFheEQsU0FBU0MsU0FBU0MsTUFBTXVEO1lBQ3hFLE9BQU8sSUFBSSxDQUFDRixnQkFBZ0IsQ0FBQ0MsYUFBYXhELFNBQVNDLFNBQVNDLE1BQU11RDtRQUNwRSxHQUFHekQsU0FBU0MsU0FBU0M7SUFDdkI7SUFFQW9FLHdCQUF3QkMsa0JBQWtCLEVBQUV2RSxPQUFPLEVBQUVDLE9BQU8sRUFBRUMsSUFBSSxFQUFFO1FBQ2xFLE1BQU1DLGNBQWMsSUFBSSxDQUFDQyxTQUFTLElBQzVCb0UsMkJBQTJCRCxtQkFBbUJuRSxTQUFTO1FBRTdESixRQUFRSyxLQUFLLENBQUMsQ0FBQyxjQUFjLEVBQUVtRSx5QkFBeUIsZ0NBQWdDLEVBQUVyRSxZQUFZLFVBQVUsQ0FBQztRQUVqSCxNQUFNeUIsUUFBUTJDLG1CQUFtQkUsUUFBUSxJQUNuQzdFLFlBQVksSUFBSSxDQUFDQyxZQUFZO1FBRW5DLE9BQU9ELFVBQVUrQixVQUFVLENBQUNDLE9BQU81QixTQUFTLENBQUNBLFNBQVNFO1lBQ3BERixRQUFRZ0IsS0FBSyxDQUFDLENBQUMsZ0JBQWdCLEVBQUV3RCx5QkFBeUIsZ0NBQWdDLEVBQUVyRSxZQUFZLFFBQVEsQ0FBQztZQUVqSCxPQUFPRixRQUFRRCxTQUFTRTtRQUMxQixHQUFHQTtJQUNMO0lBRUEsT0FBT3dFLE9BQU8sUUFBUTtJQUV0QixPQUFPQyxTQUFTQyxJQUFJLEVBQUU1RSxPQUFPLEVBQUU7UUFBRSxPQUFPVixjQUFLLENBQUNxRixRQUFRLENBQUN0RixPQUFPdUYsTUFBTTVFO0lBQVU7QUFDaEYifQ==
197
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2NsYWltL2F4aW9tLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBicmVha1BvaW50VXRpbGl0aWVzLCBjb250aW51YXRpb25VdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCBDbGFpbSBmcm9tIFwiLi4vY2xhaW1cIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyB0ZXJtc1N0cmluZ0Zyb21UZXJtcyB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvc3RyaW5nXCI7XG5pbXBvcnQgeyBqb2luLCBpc29sYXRlLCBlbmNsb3NlLCByZWNvbmNpbGUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcblxuY29uc3QgeyBicmVha2FibGUgfSA9IGJyZWFrUG9pbnRVdGlsaXRpZXMsXG4gICAgICB7IGN1dCwgYWxsLCBiYWNrd2FyZHNFdmVyeSB9ID0gY29udGludWF0aW9uVXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgQXhpb20gZXh0ZW5kcyBDbGFpbSB7XG4gIGdldEF4aW9tTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgYXhpb21Ob2RlID0gbm9kZTsgLy8vXG5cbiAgICByZXR1cm4gYXhpb21Ob2RlO1xuICB9XG5cbiAgaXNTYXRpc2ZpYWJsZSgpIHtcbiAgICBjb25zdCBzaWduYXR1cmUgPSB0aGlzLmdldFNpZ25hdHVyZSgpLFxuICAgICAgICAgIHNhdGlzZmlhYmxlID0gKHNpZ25hdHVyZSAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gc2F0aXNmaWFibGU7XG4gIH1cblxuICB2ZXJpZnkgPSBicmVha2FibGUoZnVuY3Rpb24gKGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBmb3J3YXJkID0gY3V0KGZvcndhcmQsIGJhY2spOyAvLy9cblxuICAgIGNvbnN0IGF4aW9tU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtheGlvbVN0cmluZ30nIGF4aW9tLi4uYCk7XG5cbiAgICByZXR1cm4gaXNvbGF0ZSgoY29udGV4dCwgZm9yd2FyZCwgYmFjaykgPT4ge1xuICAgICAgcmV0dXJuIGVuY2xvc2UoKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgdmVyaWZ5UHJvb2YgPSB0aGlzLnZlcmlmeVByb29mLmJpbmQodGhpcyksXG4gICAgICAgICAgICAgIHZlcmlmeUxhYmVscyA9IHRoaXMudmVyaWZ5TGFiZWxzLmJpbmQodGhpcyksXG4gICAgICAgICAgICAgIHZlcmlmeVNpZ25hdHVyZSA9IHRoaXMudmVyaWZ5U2lnbmF0dXJlLmJpbmQodGhpcyksXG4gICAgICAgICAgICAgIHZlcmlmeURlZHVjdGlvbiA9IHRoaXMudmVyaWZ5RGVkdWN0aW9uLmJpbmQodGhpcyksXG4gICAgICAgICAgICAgIHZlcmlmeVN1cHBvc2l0aW9ucyA9IHRoaXMudmVyaWZ5U3VwcG9zaXRpb25zLmJpbmQodGhpcyk7XG5cbiAgICAgICAgcmV0dXJuIGFsbChbXG4gICAgICAgICAgdmVyaWZ5TGFiZWxzLFxuICAgICAgICAgIHZlcmlmeVNpZ25hdHVyZSxcbiAgICAgICAgICB2ZXJpZnlTdXBwb3NpdGlvbnMsXG4gICAgICAgICAgdmVyaWZ5RGVkdWN0aW9uLFxuICAgICAgICAgIHZlcmlmeVByb29mXG4gICAgICAgIF0sIGNvbnRleHQsIChjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGZvcndhcmQoYmFjayk7XG4gICAgICAgIH0sIGJhY2spO1xuICAgICAgfSwgY29udGV4dCk7XG4gICAgfSwgY29udGV4dCwgKGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnN0IGF4aW9tID0gdGhpczsgLy8vXG5cbiAgICAgIGNvbnRleHQuYWRkQXhpb20oYXhpb20pO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7YXhpb21TdHJpbmd9JyBheGlvbS5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoY29udGV4dCwgYmFjayk7XG4gICAgfSwgKGV4Y2VwdGlvbikgPT4ge1xuICAgICAgaWYgKGV4Y2VwdGlvbikge1xuICAgICAgICByZXR1cm4gYmFjayhleGNlcHRpb24pO1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0LnRyYWNlKGBVbmFibGUgdG8gdmVyaWZ5IHRoZSAnJHtheGlvbVN0cmluZ30nIGF4aW9tLmApO1xuXG4gICAgICByZXR1cm4gYmFjaygpO1xuICAgIH0pO1xuICB9KTtcblxuICBhcHBseSA9IGJyZWFrYWJsZShmdW5jdGlvbiAoc3RlcCwgZmFjdE9yU3VicHJvb2ZzLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgZm9yd2FyZCA9IGN1dChmb3J3YXJkLCBiYWNrKTsgLy8vXG5cbiAgICBjb25zdCBheGlvbVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYEFwcGx5aW5nIHRoZSAnJHtheGlvbVN0cmluZ30nIGF4aW9tLi4uYCk7XG5cbiAgICByZXR1cm4gaXNvbGF0ZSgoc3RlcCwgZmFjdE9yU3VicHJvb2ZzLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSA9PiB7XG4gICAgICBjb25zdCBhcHBseURlZHVjdGlvbiA9IHRoaXMuYXBwbHlEZWR1Y3Rpb24uYmluZCh0aGlzKSxcbiAgICAgICAgICAgIGFwcGx5U3VwcG9zaXRpb25zID0gdGhpcy5hcHBseVN1cHBvc2l0aW9ucy5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgZGlzY2hhcmdlSHlwb3RoZXNlcyA9IHRoaXMuZGlzY2hhcmdlSHlwb3RoZXNlcy5iaW5kKHRoaXMpO1xuXG4gICAgICByZXR1cm4gcmVjb25jaWxlKChjb250ZXh0KSA9PiB7XG4gICAgICAgIHJldHVybiBhbGwoW1xuICAgICAgICAgIGFwcGx5RGVkdWN0aW9uLFxuICAgICAgICAgIGRpc2NoYXJnZUh5cG90aGVzZXMsXG4gICAgICAgICAgYXBwbHlTdXBwb3NpdGlvbnNcbiAgICAgICAgXSwgc3RlcCwgZmFjdE9yU3VicHJvb2ZzLCBjb250ZXh0LCAoc3RlcCwgZmFjdE9yU3VicHJvb2ZzLCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICAgICAgY29uc3QgY29tcGxleFN1YnN0aXR1dGlvbnNVbnNvbHZlZCA9IGNvbnRleHQuYXJlQ29tcGxleFN1YnN0aXR1dGlvbnNVbnNvbHZlZCgpO1xuXG4gICAgICAgICAgaWYgKGNvbXBsZXhTdWJzdGl0dXRpb25zVW5zb2x2ZWQpIHtcbiAgICAgICAgICAgIGNvbnRleHQuZGVidWcoYFRoZXJlIGFyZSB1bnNvbHZlZCBjb21wbGV4IHN1YnN0aXR1dGlvbnMuYCk7XG5cbiAgICAgICAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGZvcndhcmQoYmFjayk7XG4gICAgICAgIH0sIGJhY2spO1xuICAgICAgfSwgY29udGV4dClcbiAgICB9LCBzdGVwLCBmYWN0T3JTdWJwcm9vZnMsIGNvbnRleHQsIChzdGVwLCBmYWN0T3JTdWJwcm9vZnMsIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLmFwcGxpZWQgdGhlICcke2F4aW9tU3RyaW5nfScgYXhpb20uYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKGNvbnRleHQsIGJhY2spO1xuICAgIH0sIChleGNlcHRpb24pID0+IHtcbiAgICAgIGlmIChleGNlcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIGJhY2soZXhjZXB0aW9uKTtcbiAgICAgIH1cblxuICAgICAgY29udGV4dC50cmFjZShgVW5hYmxlIHRvIGFwcGx5IHRoZSAnJHtheGlvbVN0cmluZ30nIGF4aW9tLmApO1xuXG4gICAgICByZXR1cm4gYmFjaygpO1xuICAgIH0pO1xuICB9KTtcblxuICB2ZXJpZnlTaWduYXR1cmUoY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IHNhdGlzZmlhYmxlID0gdGhpcy5pc1NhdGlzZmlhYmxlKCk7XG5cbiAgICBpZiAoIXNhdGlzZmlhYmxlKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZChjb250ZXh0LCBiYWNrKTtcbiAgICB9XG5cbiAgICBjb25zdCBzaWduYXR1cmUgPSB0aGlzLmdldFNpZ25hdHVyZSgpLFxuICAgICAgICAgIGF4aW9tU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke2F4aW9tU3RyaW5nfScgYXhpb20ncyBzaWduYXR1cmUuLi5gKTtcblxuICAgIHJldHVybiBzaWduYXR1cmUudmVyaWZ5KGNvbnRleHQsIChjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICBjb250ZXh0LnRyYWNlKGAuLi52ZXJpZmllZCB0aGUgJyR7YXhpb21TdHJpbmd9JyBheGlvbSdzIHNpZ25hdHVyZS5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB1bmlmeVRlcm1zKHRlcm1zLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgcXVvdGVkID0gdHJ1ZSxcbiAgICAgICAgICB0ZXJtc1N0cmluZyA9IHRlcm1zU3RyaW5nRnJvbVRlcm1zKHRlcm1zLCBxdW90ZWQpLFxuICAgICAgICAgIGF4aW9tU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJHt0ZXJtc1N0cmluZ30gdGVybXMgd2l0aCB0aGUgJyR7YXhpb21TdHJpbmd9JyBheGlvbS4uLmApO1xuXG4gICAgY29uc3Qgc2lnbmF0dXJlID0gdGhpcy5nZXRTaWduYXR1cmUoKTtcblxuICAgIHJldHVybiBzaWduYXR1cmUudW5pZnlUZXJtcyh0ZXJtcywgY29udGV4dCwgKGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICR7dGVybXNTdHJpbmd9IHRlcm1zIHdpdGggdGhlICcke2F4aW9tU3RyaW5nfScgYXhpb20uLi5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB1bmlmeUNsYWltKGNsYWltLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgYXhpb21TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLCAvLy9cbiAgICAgICAgICBjbGFpbVN0cmluZyA9IGNsYWltLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke2NsYWltU3RyaW5nfScgY2xhaW0gd2l0aCB0aGUgJyR7YXhpb21TdHJpbmd9JyBheGlvbS4uLmApO1xuXG4gICAgcmV0dXJuIGlzb2xhdGUoKGNsYWltLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSA9PiB7XG4gICAgICByZXR1cm4gcmVjb25jaWxlKChjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IGRlZHVjdGlvbiA9IGNsYWltLmdldERlZHVjdGlvbigpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLnVuaWZ5RGVkdWN0aW9uKGRlZHVjdGlvbiwgY29udGV4dCwgKGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgICAgICBjb25zdCBzdXBwb3NpdGlvbnMgPSBjbGFpbS5nZXRTdXBwb3NpdGlvbnMoKTtcblxuICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZ5U3VwcG9zaXRpb25zKHN1cHBvc2l0aW9ucywgY29udGV4dCwgKGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgICAgICAgIGNvbnRleHQuY29tbWl0KCk7XG5cbiAgICAgICAgICAgIHJldHVybiBmb3J3YXJkKGJhY2spO1xuICAgICAgICAgIH0sIGJhY2spO1xuICAgICAgICB9LCBiYWNrKTtcbiAgICAgIH0sIGNvbnRleHQpO1xuICAgIH0sIGNsYWltLCBjb250ZXh0LCAoY2xhaW0sIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke2NsYWltU3RyaW5nfScgY2xhaW0gd2l0aCB0aGUgJyR7YXhpb21TdHJpbmd9JyBheGlvbS5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoY29udGV4dCwgYmFjayk7XG4gICAgfSwgKGV4Y2VwdGlvbikgPT4ge1xuICAgICAgaWYgKGV4Y2VwdGlvbikge1xuICAgICAgICByZXR1cm4gYmFjayhleGNlcHRpb24pO1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0LnRyYWNlKGBVbmFibGUgdG8gdW5pZnkgdGhlICcke2NsYWltU3RyaW5nfScgY2xhaW0gd2l0aCB0aGUgJyR7YXhpb21TdHJpbmd9JyBheGlvbS5gKTtcblxuICAgICAgcmV0dXJuIGJhY2soKTtcbiAgICB9KTtcbiAgfVxuXG4gIHVuaWZ5RGVkdWN0aW9uKGRlZHVjdGlvbiwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IGdlbmVyYWxEZWR1Y3Rpb24gPSB0aGlzLmdldERlZHVjdGlvbigpLCAvLy9cbiAgICAgICAgICBzcGVjaWZpY0RlZHVjdGlvbiA9IGRlZHVjdGlvbiwgIC8vL1xuICAgICAgICAgIGdlbmVyYWxEZWR1Y3Rpb25TdHJpbmcgPSBnZW5lcmFsRGVkdWN0aW9uLmdldFN0cmluZygpLFxuICAgICAgICAgIHNwZWNpZmljRGVkdWN0aW9uU3RyaW5nID0gc3BlY2lmaWNEZWR1Y3Rpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3BlY2lmaWNEZWR1Y3Rpb25TdHJpbmd9JyBkZWR1Y3Rpb24gd2l0aCB0aGUgJyR7Z2VuZXJhbERlZHVjdGlvblN0cmluZ30nIGRlZHVjdGlvbi4uLmApO1xuXG4gICAgY29uc3Qgc3BlY2lmaWNEZWR1Y3Rpb25Db250ZXh0ID0gc3BlY2lmaWNEZWR1Y3Rpb24uZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGdlbmVyYWxEZWR1Y3Rpb25Db250ZXh0ID0gZ2VuZXJhbERlZHVjdGlvbi5nZXRDb250ZXh0KCksXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0ID0gc3BlY2lmaWNEZWR1Y3Rpb25Db250ZXh0LCAgLy8vXG4gICAgICAgICAgZ2VuZXJhbENvbnRleHQgPSBnZW5lcmFsRGVkdWN0aW9uQ29udGV4dDsgLy8vXG5cbiAgICByZXR1cm4gam9pbigoc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICByZXR1cm4gcmVjb25jaWxlKChzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3Qgc3RhdGVtZW50ID0gc3BlY2lmaWNEZWR1Y3Rpb24uZ2V0U3RhdGVtZW50KCk7XG5cbiAgICAgICAgZGVkdWN0aW9uID0gZ2VuZXJhbERlZHVjdGlvbjsgLy8vXG5cbiAgICAgICAgcmV0dXJuIGRlZHVjdGlvbi51bmlmeVN0YXRlbWVudChzdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0LmNvbW1pdChjb250ZXh0KTtcblxuICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3NwZWNpZmljRGVkdWN0aW9uU3RyaW5nfScgZGVkdWN0aW9uIHdpdGggdGhlICcke2dlbmVyYWxEZWR1Y3Rpb25TdHJpbmd9JyBkZWR1Y3Rpb24uYCk7XG5cbiAgICAgICAgICByZXR1cm4gZm9yd2FyZChjb250ZXh0LCBiYWNrKTtcbiAgICAgICAgfSwgYmFjayk7XG4gICAgICB9LCBzcGVjaWZpY0NvbnRleHQpO1xuICAgIH0sIHNwZWNpZmljQ29udGV4dCwgY29udGV4dCk7XG4gIH1cblxuICB1bmlmeVN1cHBvc2l0aW9uKHN1cHBvc2l0aW9uLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrLCBpbmRleCkge1xuICAgIGNvbnN0IHNwZWNpZmljU3VwcG9zaXRpb24gPSBzdXBwb3NpdGlvbjsgIC8vL1xuXG4gICAgc3VwcG9zaXRpb24gPSB0aGlzLmdldFN1cHBvc2l0aW9uKGluZGV4KTtcblxuICAgIGNvbnN0IGdlbmVyYWxTdXBwb3NpdGlvbiA9IHN1cHBvc2l0aW9uLCAvLy9cbiAgICAgICAgICBnZW5lcmFsU3VwcG9zaXRpb25TdHJpbmcgPSBnZW5lcmFsU3VwcG9zaXRpb24uZ2V0U3RyaW5nKCksXG4gICAgICAgICAgc3BlY2lmaWNTdXBwb3NpdGlvblN0cmluZyA9IHNwZWNpZmljU3VwcG9zaXRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3BlY2lmaWNTdXBwb3NpdGlvblN0cmluZ30nIHN1cHBvc2l0aW9uIHdpdGggdGhlICcke2dlbmVyYWxTdXBwb3NpdGlvblN0cmluZ30nIHN1cHBvc2l0aW9uLi4uYCk7XG5cbiAgICBjb25zdCBzcGVjaWZpY1N1cHBvc2l0aW9uQ29udGV4dCA9IHNwZWNpZmljU3VwcG9zaXRpb24uZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGdlbmVyYWxTdXBwb3NpdGlvbkNvbnRleHQgPSBnZW5lcmFsU3VwcG9zaXRpb24uZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHNwZWNpZmljQ29udGV4dCA9IHNwZWNpZmljU3VwcG9zaXRpb25Db250ZXh0LCAgLy8vXG4gICAgICAgICAgZ2VuZXJhbENvbnRleHQgPSBnZW5lcmFsU3VwcG9zaXRpb25Db250ZXh0OyAvLy9cblxuICAgIHJldHVybiBqb2luKChzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgIHJldHVybiByZWNvbmNpbGUoKHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCBzdGF0ZW1lbnQgPSBzcGVjaWZpY1N1cHBvc2l0aW9uLmdldFN0YXRlbWVudCgpLFxuICAgICAgICAgICAgICBzdXBwb3NpdGlvbiA9IGdlbmVyYWxTdXBwb3NpdGlvbjsgLy8vXG5cbiAgICAgICAgcmV0dXJuIHN1cHBvc2l0aW9uLnVuaWZ5U3RhdGVtZW50KHN0YXRlbWVudCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spID0+IHtcbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHQuY29tbWl0KGNvbnRleHQpO1xuXG4gICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3BlY2lmaWNTdXBwb3NpdGlvblN0cmluZ30nIHN1cHBvc2l0aW9uIHdpdGggdGhlICcke2dlbmVyYWxTdXBwb3NpdGlvblN0cmluZ30nIHN1cHBvc2l0aW9uLmApO1xuXG4gICAgICAgICAgcmV0dXJuIGZvcndhcmQoY29udGV4dCwgYmFjayk7XG4gICAgICAgIH0sIGJhY2spO1xuICAgICAgfSwgc3BlY2lmaWNDb250ZXh0KTtcbiAgICB9LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRleHQpO1xuICB9XG5cbiAgdW5pZnlTdXBwb3NpdGlvbnMoc3VwcG9zaXRpb25zLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3Qgc3BlY2lmaWNTdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnMsICAvLy9cbiAgICAgICAgICBzcGVjaWZpY1N1cHBvc2l0aW9uc0xlbmd0aCA9IHNwZWNpZmljU3VwcG9zaXRpb25zLmxlbmd0aDtcblxuICAgIHN1cHBvc2l0aW9ucyA9IHRoaXMuZ2V0U3VwcG9zaXRpb25zKCk7XG5cbiAgICBjb25zdCBnZW5lcmFsU3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zLCAvLy9cbiAgICAgICAgICBnZW5lcmFsU3VwcG9zaXRpb25zTGVuZ3RoID0gZ2VuZXJhbFN1cHBvc2l0aW9ucy5sZW5ndGg7XG5cbiAgICBpZiAoZ2VuZXJhbFN1cHBvc2l0aW9uc0xlbmd0aCAhPT0gc3BlY2lmaWNTdXBwb3NpdGlvbnNMZW5ndGgpIHtcbiAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhY2t3YXJkc0V2ZXJ5KHN1cHBvc2l0aW9ucywgKHN1cHBvc2l0aW9uLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrLCBpbmRleCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMudW5pZnlTdXBwb3NpdGlvbihzdXBwb3NpdGlvbiwgY29udGV4dCwgZm9yd2FyZCwgYmFjaywgaW5kZXgpO1xuICAgIH0sIGNvbnRleHQsIGZvcndhcmQsIGJhY2spO1xuICB9XG5cbiAgdW5pZnlTaWduYXR1cmVBc3NlcnRpb24oc2lnbmF0dXJlQXNzZXJ0aW9uLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgYXhpb21TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLCAvLy9cbiAgICAgICAgICBzaWduYXR1cmVBc3NlcnRpb25TdHJpbmcgPSBzaWduYXR1cmVBc3NlcnRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c2lnbmF0dXJlQXNzZXJ0aW9uU3RyaW5nfScgc2lnbmF0dXJlIGFzc2VydGlvbiB3aXRoIHRoZSAnJHtheGlvbVN0cmluZ30nIGF4aW9tLi4uYCk7XG5cbiAgICBjb25zdCB0ZXJtcyA9IHNpZ25hdHVyZUFzc2VydGlvbi5nZXRUZXJtcygpLFxuICAgICAgICAgIHNpZ25hdHVyZSA9IHRoaXMuZ2V0U2lnbmF0dXJlKCk7XG5cbiAgICByZXR1cm4gc2lnbmF0dXJlLnVuaWZ5VGVybXModGVybXMsIGNvbnRleHQsIChjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzaWduYXR1cmVBc3NlcnRpb25TdHJpbmd9JyBzaWduYXR1cmUgYXNzZXJ0aW9uIHdpdGggdGhlICcke2F4aW9tU3RyaW5nfScgYXhpb20uYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKGNvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIkF4aW9tXCI7XG5cbiAgc3RhdGljIGZyb21KU09OKGpzb24sIGNvbnRleHQpIHsgcmV0dXJuIENsYWltLmZyb21KU09OKEF4aW9tLCBqc29uLCBjb250ZXh0KTsgfVxufSk7XG4iXSwibmFtZXMiOlsiYnJlYWthYmxlIiwiYnJlYWtQb2ludFV0aWxpdGllcyIsImN1dCIsImFsbCIsImJhY2t3YXJkc0V2ZXJ5IiwiY29udGludWF0aW9uVXRpbGl0aWVzIiwiZGVmaW5lIiwiQXhpb20iLCJDbGFpbSIsImdldEF4aW9tTm9kZSIsIm5vZGUiLCJnZXROb2RlIiwiYXhpb21Ob2RlIiwiaXNTYXRpc2ZpYWJsZSIsInNpZ25hdHVyZSIsImdldFNpZ25hdHVyZSIsInNhdGlzZmlhYmxlIiwidmVyaWZ5IiwiY29udGV4dCIsImZvcndhcmQiLCJiYWNrIiwiYXhpb21TdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsImlzb2xhdGUiLCJlbmNsb3NlIiwidmVyaWZ5UHJvb2YiLCJiaW5kIiwidmVyaWZ5TGFiZWxzIiwidmVyaWZ5U2lnbmF0dXJlIiwidmVyaWZ5RGVkdWN0aW9uIiwidmVyaWZ5U3VwcG9zaXRpb25zIiwiYXhpb20iLCJhZGRBeGlvbSIsImRlYnVnIiwiZXhjZXB0aW9uIiwiYXBwbHkiLCJzdGVwIiwiZmFjdE9yU3VicHJvb2ZzIiwiYXBwbHlEZWR1Y3Rpb24iLCJhcHBseVN1cHBvc2l0aW9ucyIsImRpc2NoYXJnZUh5cG90aGVzZXMiLCJyZWNvbmNpbGUiLCJjb21wbGV4U3Vic3RpdHV0aW9uc1Vuc29sdmVkIiwiYXJlQ29tcGxleFN1YnN0aXR1dGlvbnNVbnNvbHZlZCIsInVuaWZ5VGVybXMiLCJ0ZXJtcyIsInF1b3RlZCIsInRlcm1zU3RyaW5nIiwidGVybXNTdHJpbmdGcm9tVGVybXMiLCJ1bmlmeUNsYWltIiwiY2xhaW0iLCJjbGFpbVN0cmluZyIsImRlZHVjdGlvbiIsImdldERlZHVjdGlvbiIsInVuaWZ5RGVkdWN0aW9uIiwic3VwcG9zaXRpb25zIiwiZ2V0U3VwcG9zaXRpb25zIiwidW5pZnlTdXBwb3NpdGlvbnMiLCJjb21taXQiLCJnZW5lcmFsRGVkdWN0aW9uIiwic3BlY2lmaWNEZWR1Y3Rpb24iLCJnZW5lcmFsRGVkdWN0aW9uU3RyaW5nIiwic3BlY2lmaWNEZWR1Y3Rpb25TdHJpbmciLCJzcGVjaWZpY0RlZHVjdGlvbkNvbnRleHQiLCJnZXRDb250ZXh0IiwiZ2VuZXJhbERlZHVjdGlvbkNvbnRleHQiLCJzcGVjaWZpY0NvbnRleHQiLCJnZW5lcmFsQ29udGV4dCIsImpvaW4iLCJzdGF0ZW1lbnQiLCJnZXRTdGF0ZW1lbnQiLCJ1bmlmeVN0YXRlbWVudCIsInVuaWZ5U3VwcG9zaXRpb24iLCJzdXBwb3NpdGlvbiIsImluZGV4Iiwic3BlY2lmaWNTdXBwb3NpdGlvbiIsImdldFN1cHBvc2l0aW9uIiwiZ2VuZXJhbFN1cHBvc2l0aW9uIiwiZ2VuZXJhbFN1cHBvc2l0aW9uU3RyaW5nIiwic3BlY2lmaWNTdXBwb3NpdGlvblN0cmluZyIsInNwZWNpZmljU3VwcG9zaXRpb25Db250ZXh0IiwiZ2VuZXJhbFN1cHBvc2l0aW9uQ29udGV4dCIsInNwZWNpZmljU3VwcG9zaXRpb25zIiwic3BlY2lmaWNTdXBwb3NpdGlvbnNMZW5ndGgiLCJsZW5ndGgiLCJnZW5lcmFsU3VwcG9zaXRpb25zIiwiZ2VuZXJhbFN1cHBvc2l0aW9uc0xlbmd0aCIsInVuaWZ5U2lnbmF0dXJlQXNzZXJ0aW9uIiwic2lnbmF0dXJlQXNzZXJ0aW9uIiwic2lnbmF0dXJlQXNzZXJ0aW9uU3RyaW5nIiwiZ2V0VGVybXMiLCJuYW1lIiwiZnJvbUpTT04iLCJqc29uIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFhQTs7O2VBQUE7OztnQ0FYMkQ7OERBRXpDOzBCQUVLO3dCQUNjO3lCQUNhOzs7Ozs7QUFFbEQsTUFBTSxFQUFFQSxTQUFTLEVBQUUsR0FBR0MsbUNBQW1CLEVBQ25DLEVBQUVDLEdBQUcsRUFBRUMsR0FBRyxFQUFFQyxjQUFjLEVBQUUsR0FBR0MscUNB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