occam-nominal 1.0.430 → 1.0.431

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.
@@ -90,9 +90,13 @@ _export(exports, {
90
90
  });
91
91
  const _type = require("../utilities/type");
92
92
  const _constants = require("../constants");
93
- function termsStringFromTerms(terms) {
93
+ function termsStringFromTerms(terms, quoted = false) {
94
94
  const termsString = terms.reduce((termsString, term)=>{
95
- const termString = term.getString();
95
+ let termString;
96
+ termString = term.getString();
97
+ if (quoted) {
98
+ termString = `'${termString}'`;
99
+ }
96
100
  termsString = termsString !== null ? `${termsString}, ${termString}` : termString;
97
101
  return termsString;
98
102
  }, null);
@@ -245,4 +249,4 @@ function statementSubstitutionStringFromStatementMetavariableAndSubstitution(sta
245
249
  return statementSubstitutionString;
246
250
  }
247
251
 
248
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvc3RyaW5nLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBiYXNlVHlwZUZyb21Ob3RoaW5nIH0gZnJvbSBcIi4uL3V0aWxpdGllcy90eXBlXCI7XG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcsIFBST1ZJU0lPTkFMLCBQUk9WSVNJT05BTExZIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gdGVybXNTdHJpbmdGcm9tVGVybXModGVybXMpIHtcbiAgY29uc3QgdGVybXNTdHJpbmcgPSB0ZXJtcy5yZWR1Y2UoKHRlcm1zU3RyaW5nLCB0ZXJtKSA9PiB7XG4gICAgY29uc3QgdGVybVN0cmluZyA9IHRlcm0uZ2V0U3RyaW5nKCk7XG5cbiAgICB0ZXJtc1N0cmluZyA9ICh0ZXJtc1N0cmluZyAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgIGAke3Rlcm1zU3RyaW5nfSwgJHt0ZXJtU3RyaW5nfWAgOlxuICAgICAgICAgICAgICAgICAgICAgIHRlcm1TdHJpbmc7XG5cbiAgICByZXR1cm4gdGVybXNTdHJpbmc7XG4gIH0sIG51bGwpO1xuXG4gIHJldHVybiB0ZXJtc1N0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsc1N0cmluZ0Zyb21MYWJlbHMobGFiZWxzKSB7XG4gIGNvbnN0IGxhYmVsc1N0cmluZyA9IGxhYmVscy5yZWR1Y2UoKGxhYmVsc1N0cmluZywgbGFiZWwpID0+IHtcbiAgICBjb25zdCBsYWJlbFN0cmluZyA9IGxhYmVsLmdldFN0cmluZygpO1xuXG4gICAgbGFiZWxzU3RyaW5nID0gKGxhYmVsc1N0cmluZyA9PT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgbGFiZWxTdHJpbmc6IC8vL1xuICAgICAgICAgICAgICAgICAgICAgIGAke2xhYmVsc1N0cmluZ30sICR7bGFiZWxTdHJpbmd9YDtcblxuICAgIHJldHVybiBsYWJlbHNTdHJpbmc7XG4gIH0sIG51bGwpO1xuXG4gIHJldHVybiBsYWJlbHNTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVtaXNlc1N0cmluZ0Zyb21QcmVtaXNlcyhwcmVtaXNlcykge1xuICBjb25zdCBwcmVtaXNlc1N0cmluZyA9IHByZW1pc2VzLnJlZHVjZSgocHJlbWlzZXNTdHJpbmcsIHByZW1pc2UpID0+IHtcbiAgICBjb25zdCBwcmVtaXNlU3RyaW5nID0gcHJlbWlzZS5nZXRTdHJpbmcoKTtcblxuICAgIHByZW1pc2VzU3RyaW5nID0gKHByZW1pc2VzU3RyaW5nICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgIGAke3ByZW1pc2VzU3RyaW5nfSwgJHtwcmVtaXNlU3RyaW5nfWAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgIHByZW1pc2VTdHJpbmc7ICAvLy9cblxuICAgIHJldHVybiBwcmVtaXNlc1N0cmluZztcbiAgfSwgbnVsbCk7XG5cbiAgcmV0dXJuIHByZW1pc2VzU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHlwb3RoZXNlc1N0cmluZ0Zyb21IeXBvdGhlc2VzKGh5cG90aGVzZXMpIHtcbiAgY29uc3QgaHlwb3RoZXNlc1N0cmluZyA9IGh5cG90aGVzZXMucmVkdWNlKChoeXBvdGhlc2VzU3RyaW5nLCBoeXBvdGhlc2lzKSA9PiB7XG4gICAgY29uc3QgaHlwb3RoZXNpc1N0cmluZyA9IGh5cG90aGVzaXMuZ2V0U3RyaW5nKCk7XG5cbiAgICBoeXBvdGhlc2VzU3RyaW5nID0gKGh5cG90aGVzZXNTdHJpbmcgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7aHlwb3RoZXNlc1N0cmluZ30sICR7aHlwb3RoZXNpc1N0cmluZ31gIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoeXBvdGhlc2lzU3RyaW5nOyAgLy8vXG5cbiAgICByZXR1cm4gaHlwb3RoZXNlc1N0cmluZztcbiAgfSwgbnVsbCk7XG5cbiAgcmV0dXJuIGh5cG90aGVzZXNTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBlclR5cGVzU3RyaW5nRnJvbVN1cGVyVHlwZXMoc3VwZXJUeXBlcykge1xuICBsZXQgc3VwZXJUeXBlc1N0cmluZztcblxuICBjb25zdCBiYXNlVHlwZSA9IGJhc2VUeXBlRnJvbU5vdGhpbmcoKTtcblxuICBzdXBlclR5cGVzU3RyaW5nID0gc3VwZXJUeXBlcy5yZWR1Y2UoKHN1cGVyVHlwZXNTdHJpbmcsIHN1cGVyVHlwZSkgPT4ge1xuICAgIGlmIChzdXBlclR5cGUgIT09IGJhc2VUeXBlKSB7XG4gICAgICBjb25zdCBzdXBlclR5cGVTdHJpbmcgPSBzdXBlclR5cGUuZ2V0U3RyaW5nKCk7XG5cbiAgICAgIHN1cGVyVHlwZXNTdHJpbmcgPSAoc3VwZXJUeXBlc1N0cmluZyA9PT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgYCcke3N1cGVyVHlwZVN0cmluZ30nYCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHtzdXBlclR5cGVzU3RyaW5nfSwgJyR7c3VwZXJUeXBlU3RyaW5nfSdgO1xuICAgIH1cblxuICAgIHJldHVybiBzdXBlclR5cGVzU3RyaW5nO1xuICB9LCBudWxsKTtcblxuICBzdXBlclR5cGVzU3RyaW5nID0gKHN1cGVyVHlwZXNTdHJpbmcgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgYDoke3N1cGVyVHlwZXNTdHJpbmd9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIEVNUFRZX1NUUklORztcblxuICByZXR1cm4gc3VwZXJUeXBlc1N0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmFtZXRlcnNTdHJpbmdGcm9tUGFyYW1ldGVycyhwYXJhbWV0ZXJzKSB7XG4gIGNvbnN0IHBhcmFtZXRlcnNTdHJpbmcgPSBwYXJhbWV0ZXJzLnJlZHVjZSgocGFyYW1ldGVyc1N0cmluZywgcGFyYW1ldGVyKSA9PiB7XG4gICAgY29uc3QgcGFyYW1ldGVyU3RyaW5nID0gcGFyYW1ldGVyLmdldFN0cmluZygpO1xuXG4gICAgcGFyYW1ldGVyc1N0cmluZyA9IChwYXJhbWV0ZXJzU3RyaW5nID09PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyU3RyaW5nIDogLy8vXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGAke3BhcmFtZXRlcnNTdHJpbmd9LCAke3BhcmFtZXRlclN0cmluZ31gO1xuXG4gICAgcmV0dXJuIHBhcmFtZXRlcnNTdHJpbmc7XG4gIH0sIG51bGwpO1xuXG4gIHJldHVybiBwYXJhbWV0ZXJzU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlzaW5hbFN0cmluZ0Zyb21Qcm92aXNpb25hbChwcm92aXNpb25hbCkge1xuICBjb25zdCBwcm92aXNpbmFsU3RyaW5nID0gcHJvdmlzaW9uYWwgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke1BST1ZJU0lPTkFMfSBgIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVNUFRZX1NUUklORztcblxuICByZXR1cm4gcHJvdmlzaW5hbFN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3Zpc2lvbmFsbHlTdHJpbmdGcm9tUHJvdmlzaW9uYWwocHJvdmlzaW9uYWwpIHtcbiAgY29uc3QgcHJvdmlzaW5hbGx5U3RyaW5nID0gcHJvdmlzaW9uYWwgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCAke1BST1ZJU0lPTkFMTFl9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTVBUWV9TVFJJTkc7XG5cbiAgcmV0dXJuIHByb3Zpc2luYWxseVN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvc2l0aW9uc1N0cmluZ0Zyb21TdXBwb3NpdGlvbnMoc3VwcG9zaXRpb25zKSB7XG4gIGNvbnN0IHN1cHBvc2l0aW9uc1N0cmluZyA9IHN1cHBvc2l0aW9ucy5yZWR1Y2UoKHN1cHBvc2l0aW9uc1N0cmluZywgc3VwcG9zaXRpb24pID0+IHtcbiAgICBjb25zdCBzdXBwb3NpdGlvblN0cmluZyA9IHN1cHBvc2l0aW9uLmdldFN0cmluZygpO1xuXG4gICAgc3VwcG9zaXRpb25zU3RyaW5nID0gKHN1cHBvc2l0aW9uc1N0cmluZyA9PT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9zaXRpb25TdHJpbmc6IC8vL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke3N1cHBvc2l0aW9uc1N0cmluZ30sICR7c3VwcG9zaXRpb25TdHJpbmd9YDtcblxuICAgIHJldHVybiBzdXBwb3NpdGlvbnNTdHJpbmc7XG4gIH0sIG51bGwpO1xuXG4gIHJldHVybiBzdXBwb3NpdGlvbnNTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVpdmFsZW5jZVN0cmluZ0Zyb21UZXJtcyh0ZXJtcykge1xuICBjb25zdCB0ZXJtc1N0cmluZyA9IHRlcm1zU3RyaW5nRnJvbVRlcm1zKHRlcm1zKSxcbiAgICAgICAgZXF1aXZhbGVuY2VTdHJpbmcgPSBgWyR7dGVybXNTdHJpbmd9XWA7XG5cbiAgcmV0dXJuIGVxdWl2YWxlbmNlU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbmF0dXJlU3RyaW5nRnJvbVNpZ25hdHVyZShzaWduYXR1cmUpIHtcbiAgY29uc3Qgc2lnbmF0dXJlU3RyaW5nID0gKHNpZ25hdHVyZSAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZS5nZXRTdHJpbmcoKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsO1xuXG4gIHJldHVybiBzaWduYXR1cmVTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlU3RyaW5nRnJvbU5vbWluYWxUeXBlTmFtZShub21pbmFsVHlwZU5hbWUpIHtcbiAgY29uc3QgdHlwZVN0cmluZyA9IG5vbWluYWxUeXBlTmFtZTsgIC8vL1xuXG4gIHJldHVybiB0eXBlU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW1wbGljaXRBc3N1bXB0aW9uU3RyaW5nRnJvbVN0YXRlbWVudChzdGFzdGVtZW50KSB7XG4gIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXN0ZW1lbnQuZ2V0U3RyaW5nKCksXG4gICAgICAgIGltcGxpY2l0QXNzdW1wdGlvblN0cmluZyA9IGAuIDo6ICR7c3RhdGVtZW50U3RyaW5nfWA7XG5cbiAgcmV0dXJuIGltcGxpY2l0QXNzdW1wdGlvblN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1TdWJzdGl0dXRpb25TdHJpbmdGcm9tVGVybUFuZFZhcmlhYmxlKHRlcm0sIHZhcmlhYmxlKSB7XG4gIGNvbnN0IHRlcm1TdHJpbmcgPSB0ZXJtLmdldFN0cmluZygpLFxuICAgICAgICB2YXJpYWJsZVN0cmluZyA9IHZhcmlhYmxlLmdldFN0cmluZygpLFxuICAgICAgICB0ZXJtU3Vic3RpdHV0aW9uU3RyaW5nID0gYFske3Rlcm1TdHJpbmd9IGZvciAke3ZhcmlhYmxlU3RyaW5nfV1gO1xuXG4gIHJldHVybiB0ZXJtU3Vic3RpdHV0aW9uU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uc3RyYWludFN0cmluZ0Zyb21SZWZlcmVuY2VBbmRTdGF0ZW1lbnQocmVmZXJlbmNlLCBzdGF0ZW1lbnQpIHtcbiAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpLFxuICAgICAgICByZWZlcm5lY2VTdHJpbmcgPSByZWZlcmVuY2UuZ2V0U3RyaW5nKCksXG4gICAgICAgIGNvbnN0cmFpbnRTdHJpbmcgPSBgJHtyZWZlcm5lY2VTdHJpbmd9IDo6ICR7c3RhdGVtZW50U3RyaW5nfWA7XG5cbiAgcmV0dXJuIGNvbnN0cmFpbnRTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBydWxzU3RyaW5nRnJvbUxhYmVsc1ByZW1pc2VzQW5kQ29uY2x1c2lvbihsYWJlbHMsIHByZW1pc2VzLCBjb25jbHVzaW9uKSB7XG4gIGxldCBydWxlU3RyaW5nID0gRU1QVFlfU1RSSU5HO1xuXG4gIGNvbnN0IGNvbmNsdXNpb25TdHJpbmcgPSBjb25jbHVzaW9uLmdldFN0cmluZygpLFxuICAgICAgICBwcmVtaXNlc1N0cmluZyA9IHByZW1pc2VzU3RyaW5nRnJvbVByZW1pc2VzKHByZW1pc2VzKSxcbiAgICAgICAgbGFiZWxzU3RyaW5nID0gbGFiZWxzU3RyaW5nRnJvbUxhYmVscyhsYWJlbHMpO1xuXG4gIHJ1bGVTdHJpbmcgPSBgJHtydWxlU3RyaW5nfSR7bGFiZWxzU3RyaW5nfSA6OiBgO1xuXG4gIHJ1bGVTdHJpbmcgPSAocHJlbWlzZXNTdHJpbmcgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgYCR7cnVsZVN0cmluZ31bJHtwcmVtaXNlc1N0cmluZ31dLi4uJHtjb25jbHVzaW9uU3RyaW5nfWAgOlxuICAgICAgICAgICAgICAgICAgIGAke3J1bGVTdHJpbmd9JHtjb25jbHVzaW9uU3RyaW5nfWA7XG5cbiAgcmV0dXJuIHJ1bGVTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzY2hlbWFTdHJpbmdGcm9tTGFiZWxTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24obGFiZWwsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uKSB7XG4gIGNvbnN0IGxhYmVsU3RyaW5nID0gbGFiZWwuZ2V0U3RyaW5nKCksXG4gICAgICAgIGRlZHVjdGlvblN0cmluZyA9IGRlZHVjdGlvbi5nZXRTdHJpbmcoKSxcbiAgICAgICAgc3VwcG9zaXRpb25zU3RyaW5nID0gc3VwcG9zaXRpb25zU3RyaW5nRnJvbVN1cHBvc2l0aW9ucyhzdXBwb3NpdGlvbnMpLFxuICAgICAgICBzY2hlbWFTdHJpbmcgPSAoc3VwcG9zaXRpb25zU3RyaW5nICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICBgJHtsYWJlbFN0cmluZ30gOjogWyR7c3VwcG9zaXRpb25zU3RyaW5nfV0uLi4ke2RlZHVjdGlvblN0cmluZ31gIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7bGFiZWxTdHJpbmd9IDo6ICR7ZGVkdWN0aW9uU3RyaW5nfWA7XG5cbiAgcmV0dXJuIHNjaGVtYVN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlY3Rpb25TdHJpbmdGcm9tSHlwb3RoZXNlc0RlY2xhcmF0aW9uQW5kQ2xhaW0oaHlwb3RoZXNlcywgZGVjbGFyYXRpb24sIGNsYWltKSB7XG4gIGxldCBzZWN0aW9uU3RyaW5nO1xuXG4gIGNvbnN0IGh5cG90aGVzZXNTdHJpbmcgPSBoeXBvdGhlc2VzU3RyaW5nRnJvbUh5cG90aGVzZXMoaHlwb3RoZXNlcyk7XG5cbiAgc2VjdGlvblN0cmluZyA9IGBbJHtoeXBvdGhlc2VzU3RyaW5nfV06OjogYDtcblxuICBpZiAoZGVjbGFyYXRpb24gIT09IG51bGwpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvblN0cmluZyA9IGRlY2xhcmF0aW9uLmdldFN0cmluZygpO1xuXG4gICAgc2VjdGlvblN0cmluZyA9IGAke3NlY3Rpb25TdHJpbmd9JHtkZWNsYXJhdGlvblN0cmluZ31gO1xuICB9XG5cbiAgaWYgKGNsYWltICE9PSBudWxsKSB7XG4gICAgY29uc3QgY2xhaW1TdHJpbmcgPSBjbGFpbS5nZXRTdHJpbmcoKTtcblxuICAgIHNlY3Rpb25TdHJpbmcgPSBgJHtzZWN0aW9uU3RyaW5nfSR7Y2xhaW1TdHJpbmd9YDtcbiAgfVxuXG4gIHJldHVybiBzZWN0aW9uU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VicHJvb2ZTdHJpbmdGcm9tU3VwcG9zaXRpb25zQW5kU3ViRGVyaXZhdGlvbihzdXBwb3NpdGlvbnMsIHN1YkRlcml2YXRpb24pIHtcbiAgY29uc3QgbGFzdFN0ZXAgPSBzdWJEZXJpdmF0aW9uLmdldExhc3RTdGVwKCksXG4gICAgICAgIHN1cHBvc2l0aW9uc1N0cmluZyA9IHN1cHBvc2l0aW9uc1N0cmluZ0Zyb21TdXBwb3NpdGlvbnMoc3VwcG9zaXRpb25zKSxcbiAgICAgICAgbGFzdFN0ZXBTdHJpbmcgPSBsYXN0U3RlcC5nZXRTdHJpbmcoKSxcbiAgICAgICAgc3VicHJvb2ZTdHJpbmcgPSBgWyR7c3VwcG9zaXRpb25zU3RyaW5nfV0uLi4ke2xhc3RTdGVwU3RyaW5nfWA7XG5cbiAgcmV0dXJuIHN1YnByb29mU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVTdWJzdGl0dXRpb25TdHJpbmdGcm9tRnJhbWVBbmRNZXRhdmFyaWFibGUoZnJhbWUsIG1ldGF2YXJpYWJsZSkge1xuICBjb25zdCBmcmFtZVN0cmluZyA9IGZyYW1lLmdldFN0cmluZygpLFxuICAgICAgICBtZXRhdmFyaWFibGVTdHJpbmcgPSBtZXRhdmFyaWFibGUuZ2V0U3RyaW5nKCksXG4gICAgICAgIHN0cmluZyA9IGBbJHtmcmFtZVN0cmluZ30gZm9yIFske21ldGF2YXJpYWJsZVN0cmluZ31dXWA7XG5cbiAgcmV0dXJuIHN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsYWltU3RyaW5nRnJvbUxhYmVsc1NpZ25hdHVyZVN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbihsYWJlbHMsIHNpZ25hdHVyZSwgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pIHtcbiAgbGV0IGNsYWltU3RyaW5nID0gRU1QVFlfU1RSSU5HO1xuXG4gIGNvbnN0IGRlZHVjdGlvblN0cmluZyA9IGRlZHVjdGlvbi5nZXRTdHJpbmcoKSxcbiAgICAgICAgbGFiZWxzU3RyaW5nID0gbGFiZWxzU3RyaW5nRnJvbUxhYmVscyhsYWJlbHMpLFxuICAgICAgICBzaWduYXR1cmVTdHJpbmcgPSBzaWduYXR1cmVTdHJpbmdGcm9tU2lnbmF0dXJlKHNpZ25hdHVyZSksXG4gICAgICAgIHN1cHBvc2l0aW9uc1N0cmluZyA9IHN1cHBvc2l0aW9uc1N0cmluZ0Zyb21TdXBwb3NpdGlvbnMoc3VwcG9zaXRpb25zKTtcblxuICBjbGFpbVN0cmluZyA9IChsYWJlbHNTdHJpbmcgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgYCR7Y2xhaW1TdHJpbmd9JHtsYWJlbHNTdHJpbmd9YCA6XG4gICAgICAgICAgICAgICAgICAgYC4uYDtcblxuICBjbGFpbVN0cmluZyA9IChzaWduYXR1cmVTdHJpbmcgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgYCR7Y2xhaW1TdHJpbmd9JHtzaWduYXR1cmVTdHJpbmd9YCA6XG4gICAgICAgICAgICAgICAgICAgYCR7Y2xhaW1TdHJpbmd9YDtcblxuXG4gIGNsYWltU3RyaW5nID0gKHN1cHBvc2l0aW9uc1N0cmluZyAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICBgJHtjbGFpbVN0cmluZ30gOjogWyR7c3VwcG9zaXRpb25zU3RyaW5nfV0uLi4ke2RlZHVjdGlvblN0cmluZ31gIDpcbiAgICAgICAgICAgICAgICAgICBgJHtjbGFpbVN0cmluZ30gOjogJHtkZWR1Y3Rpb25TdHJpbmd9YDtcblxuICByZXR1cm4gY2xhaW1TdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVDYWxsU3RyaW5nRnJvbVByb2NlZHVyZVJlZmVyZW5jZUFuZFBhcmFtZXRlcnMocHJvY2VkdXJlUmVmZXJlbmNlLCBwYXJhbWV0ZXJzKSB7XG4gIGNvbnN0IHByb2NlZHVyZVJlZmVyZW5jZU5hbWUgPSBwcm9jZWR1cmVSZWZlcmVuY2UuZ2V0TmFtZSgpLFxuICAgICAgICBwYXJhbWV0ZXJzU3RyaW5nID0gcGFyYW1ldGVyc1N0cmluZ0Zyb21QYXJhbWV0ZXJzKHBhcmFtZXRlcnMpLFxuICAgICAgICBwcm9jZWR1cmVDYWxsU3RyaW5nID0gYEAke3Byb2NlZHVyZVJlZmVyZW5jZU5hbWV9KCR7cGFyYW1ldGVyc1N0cmluZ30pYDtcblxuICByZXR1cm4gcHJvY2VkdXJlQ2FsbFN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvdHlwZURlY2xhcmF0aW9uU3RyaW5nRnJvbVR5cGVTdXBlclR5cGVzQW5kUHJvdmlzaW9uYWwodHlwZSwgc3VwZXJUeXBlcywgcHJvdmlzaW9uYWwpIHtcbiAgY29uc3QgdHlwZVN0cmluZyA9IHR5cGUuZ2V0U3RyaW5nKCksXG4gICAgICAgIHN1cGVyVHlwZXNTdHJpbmcgPSBzdXBlclR5cGVzU3RyaW5nRnJvbVN1cGVyVHlwZXMoc3VwZXJUeXBlcyksXG4gICAgICAgIHByb3Zpc2lvbmFsU3RyaW5nID0gcHJvdmlzaW5hbFN0cmluZ0Zyb21Qcm92aXNpb25hbChwcm92aXNpb25hbCksXG4gICAgICAgIGNvdHlwZURlY2xhcmF0aW9uU3RyaW5nID0gYCR7cHJvdmlzaW9uYWxTdHJpbmd9JHt0eXBlU3RyaW5nfSR7c3VwZXJUeXBlc1N0cmluZ31gO1xuXG4gIHJldHVybiBjb3R5cGVEZWNsYXJhdGlvblN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudFN1YnN0aXR1dGlvblN0cmluZ0Zyb21TdGF0ZW1lbnRBbmRNZXRhdmFyaWFibGUoc3RhdGVtZW50LCBtZXRhdmFyaWFibGUpIHtcbiAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpLFxuICAgICAgICBtZXRhdmFyaWFibGVTdHJpbmcgPSBtZXRhdmFyaWFibGUuZ2V0U3RyaW5nKCksXG4gICAgICAgIHN0YXRlbWVudFN1YnN0aXR1dGlvblN0cmluZyA9IGBbJHtzdGF0ZW1lbnRTdHJpbmd9IGZvciAke21ldGF2YXJpYWJsZVN0cmluZ31dYDtcblxuICByZXR1cm4gc3RhdGVtZW50U3Vic3RpdHV0aW9uU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlU3Vic3RpdHV0aW9uU3RyaW5nRnJvbVJlZmVyZW5jZUFuZE1ldGF2YXJpYWJsZShyZWZlcmVuY2UsIG1ldGF2YXJpYWJsZSkge1xuICBjb25zdCByZWZlcmVuY2VTdHJpbmcgPSByZWZlcmVuY2UuZ2V0U3RyaW5nKCksXG4gICAgICAgIG1ldGF2YXJpYWJsZVN0cmluZyA9IG1ldGF2YXJpYWJsZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgcmVmZXJlbmNlU3Vic3RpdHV0aW9uU3RyaW5nID0gYFske3JlZmVyZW5jZVN0cmluZ30gZm9yICR7bWV0YXZhcmlhYmxlU3RyaW5nfV1gO1xuXG4gIHJldHVybiByZWZlcmVuY2VTdWJzdGl0dXRpb25TdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRTdWJzdGl0dXRpb25TdHJpbmdGcm9tU3RhdGVtZW50TWV0YXZhcmlhYmxlQW5kU3Vic3RpdHV0aW9uKHN0YXRlbWVudCwgbWV0YXZhcmlhYmxlLCBzdWJzdGl0dXRpb24pIHtcbiAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpLFxuICAgICAgICBtZXRhdmFyaWFibGVTdHJpbmcgPSBtZXRhdmFyaWFibGUuZ2V0U3RyaW5nKCksXG4gICAgICAgIHN1YnN0aXR1dGlvblN0cmluZyA9IHN1YnN0aXR1dGlvbi5nZXRTdHJpbmcoKSxcbiAgICAgICAgc3RhdGVtZW50U3Vic3RpdHV0aW9uU3RyaW5nID0gYFske3N0YXRlbWVudFN0cmluZ30gZm9yICR7bWV0YXZhcmlhYmxlU3RyaW5nfSR7c3Vic3RpdHV0aW9uU3RyaW5nfV1gO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRTdWJzdGl0dXRpb25TdHJpbmc7XG59XG4iXSwibmFtZXMiOlsiY2xhaW1TdHJpbmdGcm9tTGFiZWxzU2lnbmF0dXJlU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uIiwiY29uc3RyYWludFN0cmluZ0Zyb21SZWZlcmVuY2VBbmRTdGF0ZW1lbnQiLCJjb3R5cGVEZWNsYXJhdGlvblN0cmluZ0Zyb21UeXBlU3VwZXJUeXBlc0FuZFByb3Zpc2lvbmFsIiwiZXF1aXZhbGVuY2VTdHJpbmdGcm9tVGVybXMiLCJmcmFtZVN1YnN0aXR1dGlvblN0cmluZ0Zyb21GcmFtZUFuZE1ldGF2YXJpYWJsZSIsImh5cG90aGVzZXNTdHJpbmdGcm9tSHlwb3RoZXNlcyIsImltcGxpY2l0QXNzdW1wdGlvblN0cmluZ0Zyb21TdGF0ZW1lbnQiLCJsYWJlbHNTdHJpbmdGcm9tTGFiZWxzIiwicGFyYW1ldGVyc1N0cmluZ0Zyb21QYXJhbWV0ZXJzIiwicHJlbWlzZXNTdHJpbmdGcm9tUHJlbWlzZXMiLCJwcm9jZWR1cmVDYWxsU3RyaW5nRnJvbVByb2NlZHVyZVJlZmVyZW5jZUFuZFBhcmFtZXRlcnMiLCJwcm92aXNpbmFsU3RyaW5nRnJvbVByb3Zpc2lvbmFsIiwicHJvdmlzaW9uYWxseVN0cmluZ0Zyb21Qcm92aXNpb25hbCIsInJlZmVyZW5jZVN1YnN0aXR1dGlvblN0cmluZ0Zyb21SZWZlcmVuY2VBbmRNZXRhdmFyaWFibGUiLCJydWxzU3RyaW5nRnJvbUxhYmVsc1ByZW1pc2VzQW5kQ29uY2x1c2lvbiIsInNjaGVtYVN0cmluZ0Zyb21MYWJlbFN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbiIsInNlY3Rpb25TdHJpbmdGcm9tSHlwb3RoZXNlc0RlY2xhcmF0aW9uQW5kQ2xhaW0iLCJzaWduYXR1cmVTdHJpbmdGcm9tU2lnbmF0dXJlIiwic3RhdGVtZW50U3Vic3RpdHV0aW9uU3RyaW5nRnJvbVN0YXRlbWVudEFuZE1ldGF2YXJpYWJsZSIsInN0YXRlbWVudFN1YnN0aXR1dGlvblN0cmluZ0Zyb21TdGF0ZW1lbnRNZXRhdmFyaWFibGVBbmRTdWJzdGl0dXRpb24iLCJzdWJwcm9vZlN0cmluZ0Zyb21TdXBwb3NpdGlvbnNBbmRTdWJEZXJpdmF0aW9uIiwic3VwZXJUeXBlc1N0cmluZ0Zyb21TdXBlclR5cGVzIiwic3VwcG9zaXRpb25zU3RyaW5nRnJvbVN1cHBvc2l0aW9ucyIsInRlcm1TdWJzdGl0dXRpb25TdHJpbmdGcm9tVGVybUFuZFZhcmlhYmxlIiwidGVybXNTdHJpbmdGcm9tVGVybXMiLCJ0eXBlU3RyaW5nRnJvbU5vbWluYWxUeXBlTmFtZSIsInRlcm1zIiwidGVybXNTdHJpbmciLCJyZWR1Y2UiLCJ0ZXJtIiwidGVybVN0cmluZyIsImdldFN0cmluZyIsImxhYmVscyIsImxhYmVsc1N0cmluZyIsImxhYmVsIiwibGFiZWxTdHJpbmciLCJwcmVtaXNlcyIsInByZW1pc2VzU3RyaW5nIiwicHJlbWlzZSIsInByZW1pc2VTdHJpbmciLCJoeXBvdGhlc2VzIiwiaHlwb3RoZXNlc1N0cmluZyIsImh5cG90aGVzaXMiLCJoeXBvdGhlc2lzU3RyaW5nIiwic3VwZXJUeXBlcyIsInN1cGVyVHlwZXNTdHJpbmciLCJiYXNlVHlwZSIsImJhc2VUeXBlRnJvbU5vdGhpbmciLCJzdXBlclR5cGUiLCJzdXBlclR5cGVTdHJpbmciLCJFTVBUWV9TVFJJTkciLCJwYXJhbWV0ZXJzIiwicGFyYW1ldGVyc1N0cmluZyIsInBhcmFtZXRlciIsInBhcmFtZXRlclN0cmluZyIsInByb3Zpc2lvbmFsIiwicHJvdmlzaW5hbFN0cmluZyIsIlBST1ZJU0lPTkFMIiwicHJvdmlzaW5hbGx5U3RyaW5nIiwiUFJPVklTSU9OQUxMWSIsInN1cHBvc2l0aW9ucyIsInN1cHBvc2l0aW9uc1N0cmluZyIsInN1cHBvc2l0aW9uIiwic3VwcG9zaXRpb25TdHJpbmciLCJlcXVpdmFsZW5jZVN0cmluZyIsInNpZ25hdHVyZSIsInNpZ25hdHVyZVN0cmluZyIsIm5vbWluYWxUeXBlTmFtZSIsInR5cGVTdHJpbmciLCJzdGFzdGVtZW50Iiwic3RhdGVtZW50U3RyaW5nIiwiaW1wbGljaXRBc3N1bXB0aW9uU3RyaW5nIiwidmFyaWFibGUiLCJ2YXJpYWJsZVN0cmluZyIsInRlcm1TdWJzdGl0dXRpb25TdHJpbmciLCJyZWZlcmVuY2UiLCJzdGF0ZW1lbnQiLCJyZWZlcm5lY2VTdHJpbmciLCJjb25zdHJhaW50U3RyaW5nIiwiY29uY2x1c2lvbiIsInJ1bGVTdHJpbmciLCJjb25jbHVzaW9uU3RyaW5nIiwiZGVkdWN0aW9uIiwiZGVkdWN0aW9uU3RyaW5nIiwic2NoZW1hU3RyaW5nIiwiZGVjbGFyYXRpb24iLCJjbGFpbSIsInNlY3Rpb25TdHJpbmciLCJkZWNsYXJhdGlvblN0cmluZyIsImNsYWltU3RyaW5nIiwic3ViRGVyaXZhdGlvbiIsImxhc3RTdGVwIiwiZ2V0TGFzdFN0ZXAiLCJsYXN0U3RlcFN0cmluZyIsInN1YnByb29mU3RyaW5nIiwiZnJhbWUiLCJtZXRhdmFyaWFibGUiLCJmcmFtZVN0cmluZyIsIm1ldGF2YXJpYWJsZVN0cmluZyIsInN0cmluZyIsInByb2NlZHVyZVJlZmVyZW5jZSIsInByb2NlZHVyZVJlZmVyZW5jZU5hbWUiLCJnZXROYW1lIiwicHJvY2VkdXJlQ2FsbFN0cmluZyIsInR5cGUiLCJwcm92aXNpb25hbFN0cmluZyIsImNvdHlwZURlY2xhcmF0aW9uU3RyaW5nIiwic3RhdGVtZW50U3Vic3RpdHV0aW9uU3RyaW5nIiwicmVmZXJlbmNlU3RyaW5nIiwicmVmZXJlbmNlU3Vic3RpdHV0aW9uU3RyaW5nIiwic3Vic3RpdHV0aW9uIiwic3Vic3RpdHV0aW9uU3RyaW5nIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7UUErT2dCQTtlQUFBQTs7UUExRUFDO2VBQUFBOztRQTBHQUM7ZUFBQUE7O1FBOUlBQztlQUFBQTs7UUFzR0FDO2VBQUFBOztRQXhMQUM7ZUFBQUE7O1FBdUdBQztlQUFBQTs7UUFuSUFDO2VBQUFBOztRQWtFQUM7ZUFBQUE7O1FBcERBQztlQUFBQTs7UUFzT0FDO2VBQUFBOztRQXBLQUM7ZUFBQUE7O1FBUUFDO2VBQUFBOztRQXFMQUM7ZUFBQUE7O1FBbkhBQztlQUFBQTs7UUFnQkFDO2VBQUFBOztRQVdBQztlQUFBQTs7UUFoRUFDO2VBQUFBOztRQWdKQUM7ZUFBQUE7O1FBZ0JBQztlQUFBQTs7UUExRUFDO2VBQUFBOztRQWpLQUM7ZUFBQUE7O1FBc0RBQztlQUFBQTs7UUEwQ0FDO2VBQUFBOztRQXhKQUM7ZUFBQUE7O1FBMklBQztlQUFBQTs7O3NCQTlJb0I7MkJBQ3FCO0FBRWxELFNBQVNELHFCQUFxQkUsS0FBSztJQUN4QyxNQUFNQyxjQUFjRCxNQUFNRSxNQUFNLENBQUMsQ0FBQ0QsYUFBYUU7UUFDN0MsTUFBTUMsYUFBYUQsS0FBS0UsU0FBUztRQUVqQ0osY0FBYyxBQUFDQSxnQkFBZ0IsT0FDaEIsR0FBR0EsWUFBWSxFQUFFLEVBQUVHLFlBQVksR0FDNUJBO1FBRWxCLE9BQU9IO0lBQ1QsR0FB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
252
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvc3RyaW5nLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBiYXNlVHlwZUZyb21Ob3RoaW5nIH0gZnJvbSBcIi4uL3V0aWxpdGllcy90eXBlXCI7XG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcsIFBST1ZJU0lPTkFMLCBQUk9WSVNJT05BTExZIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gdGVybXNTdHJpbmdGcm9tVGVybXModGVybXMsIHF1b3RlZCA9IGZhbHNlKSB7XG4gIGNvbnN0IHRlcm1zU3RyaW5nID0gdGVybXMucmVkdWNlKCh0ZXJtc1N0cmluZywgdGVybSkgPT4ge1xuICAgIGxldCB0ZXJtU3RyaW5nO1xuXG4gICAgdGVybVN0cmluZyA9IHRlcm0uZ2V0U3RyaW5nKCk7XG5cbiAgICBpZiAocXVvdGVkKSB7XG4gICAgICB0ZXJtU3RyaW5nID0gYCcke3Rlcm1TdHJpbmd9J2A7XG4gICAgfVxuXG4gICAgdGVybXNTdHJpbmcgPSAodGVybXNTdHJpbmcgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICBgJHt0ZXJtc1N0cmluZ30sICR7dGVybVN0cmluZ31gIDpcbiAgICAgICAgICAgICAgICAgICAgICB0ZXJtU3RyaW5nO1xuXG4gICAgcmV0dXJuIHRlcm1zU3RyaW5nO1xuICB9LCBudWxsKTtcblxuICByZXR1cm4gdGVybXNTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbHNTdHJpbmdGcm9tTGFiZWxzKGxhYmVscykge1xuICBjb25zdCBsYWJlbHNTdHJpbmcgPSBsYWJlbHMucmVkdWNlKChsYWJlbHNTdHJpbmcsIGxhYmVsKSA9PiB7XG4gICAgY29uc3QgbGFiZWxTdHJpbmcgPSBsYWJlbC5nZXRTdHJpbmcoKTtcblxuICAgIGxhYmVsc1N0cmluZyA9IChsYWJlbHNTdHJpbmcgPT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgIGxhYmVsU3RyaW5nOiAvLy9cbiAgICAgICAgICAgICAgICAgICAgICBgJHtsYWJlbHNTdHJpbmd9LCAke2xhYmVsU3RyaW5nfWA7XG5cbiAgICByZXR1cm4gbGFiZWxzU3RyaW5nO1xuICB9LCBudWxsKTtcblxuICByZXR1cm4gbGFiZWxzU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlbWlzZXNTdHJpbmdGcm9tUHJlbWlzZXMocHJlbWlzZXMpIHtcbiAgY29uc3QgcHJlbWlzZXNTdHJpbmcgPSBwcmVtaXNlcy5yZWR1Y2UoKHByZW1pc2VzU3RyaW5nLCBwcmVtaXNlKSA9PiB7XG4gICAgY29uc3QgcHJlbWlzZVN0cmluZyA9IHByZW1pc2UuZ2V0U3RyaW5nKCk7XG5cbiAgICBwcmVtaXNlc1N0cmluZyA9IChwcmVtaXNlc1N0cmluZyAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICBgJHtwcmVtaXNlc1N0cmluZ30sICR7cHJlbWlzZVN0cmluZ31gIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICBwcmVtaXNlU3RyaW5nOyAgLy8vXG5cbiAgICByZXR1cm4gcHJlbWlzZXNTdHJpbmc7XG4gIH0sIG51bGwpO1xuXG4gIHJldHVybiBwcmVtaXNlc1N0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh5cG90aGVzZXNTdHJpbmdGcm9tSHlwb3RoZXNlcyhoeXBvdGhlc2VzKSB7XG4gIGNvbnN0IGh5cG90aGVzZXNTdHJpbmcgPSBoeXBvdGhlc2VzLnJlZHVjZSgoaHlwb3RoZXNlc1N0cmluZywgaHlwb3RoZXNpcykgPT4ge1xuICAgIGNvbnN0IGh5cG90aGVzaXNTdHJpbmcgPSBoeXBvdGhlc2lzLmdldFN0cmluZygpO1xuXG4gICAgaHlwb3RoZXNlc1N0cmluZyA9IChoeXBvdGhlc2VzU3RyaW5nICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGAke2h5cG90aGVzZXNTdHJpbmd9LCAke2h5cG90aGVzaXNTdHJpbmd9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaHlwb3RoZXNpc1N0cmluZzsgIC8vL1xuXG4gICAgcmV0dXJuIGh5cG90aGVzZXNTdHJpbmc7XG4gIH0sIG51bGwpO1xuXG4gIHJldHVybiBoeXBvdGhlc2VzU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwZXJUeXBlc1N0cmluZ0Zyb21TdXBlclR5cGVzKHN1cGVyVHlwZXMpIHtcbiAgbGV0IHN1cGVyVHlwZXNTdHJpbmc7XG5cbiAgY29uc3QgYmFzZVR5cGUgPSBiYXNlVHlwZUZyb21Ob3RoaW5nKCk7XG5cbiAgc3VwZXJUeXBlc1N0cmluZyA9IHN1cGVyVHlwZXMucmVkdWNlKChzdXBlclR5cGVzU3RyaW5nLCBzdXBlclR5cGUpID0+IHtcbiAgICBpZiAoc3VwZXJUeXBlICE9PSBiYXNlVHlwZSkge1xuICAgICAgY29uc3Qgc3VwZXJUeXBlU3RyaW5nID0gc3VwZXJUeXBlLmdldFN0cmluZygpO1xuXG4gICAgICBzdXBlclR5cGVzU3RyaW5nID0gKHN1cGVyVHlwZXNTdHJpbmcgPT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGAnJHtzdXBlclR5cGVTdHJpbmd9J2AgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7c3VwZXJUeXBlc1N0cmluZ30sICcke3N1cGVyVHlwZVN0cmluZ30nYDtcbiAgICB9XG5cbiAgICByZXR1cm4gc3VwZXJUeXBlc1N0cmluZztcbiAgfSwgbnVsbCk7XG5cbiAgc3VwZXJUeXBlc1N0cmluZyA9IChzdXBlclR5cGVzU3RyaW5nICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgIGA6JHtzdXBlclR5cGVzU3RyaW5nfWAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICBFTVBUWV9TVFJJTkc7XG5cbiAgcmV0dXJuIHN1cGVyVHlwZXNTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJhbWV0ZXJzU3RyaW5nRnJvbVBhcmFtZXRlcnMocGFyYW1ldGVycykge1xuICBjb25zdCBwYXJhbWV0ZXJzU3RyaW5nID0gcGFyYW1ldGVycy5yZWR1Y2UoKHBhcmFtZXRlcnNTdHJpbmcsIHBhcmFtZXRlcikgPT4ge1xuICAgIGNvbnN0IHBhcmFtZXRlclN0cmluZyA9IHBhcmFtZXRlci5nZXRTdHJpbmcoKTtcblxuICAgIHBhcmFtZXRlcnNTdHJpbmcgPSAocGFyYW1ldGVyc1N0cmluZyA9PT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlclN0cmluZyA6IC8vL1xuICAgICAgICAgICAgICAgICAgICAgICAgICBgJHtwYXJhbWV0ZXJzU3RyaW5nfSwgJHtwYXJhbWV0ZXJTdHJpbmd9YDtcblxuICAgIHJldHVybiBwYXJhbWV0ZXJzU3RyaW5nO1xuICB9LCBudWxsKTtcblxuICByZXR1cm4gcGFyYW1ldGVyc1N0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3Zpc2luYWxTdHJpbmdGcm9tUHJvdmlzaW9uYWwocHJvdmlzaW9uYWwpIHtcbiAgY29uc3QgcHJvdmlzaW5hbFN0cmluZyA9IHByb3Zpc2lvbmFsID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHtQUk9WSVNJT05BTH0gYCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTVBUWV9TVFJJTkc7XG5cbiAgcmV0dXJuIHByb3Zpc2luYWxTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aXNpb25hbGx5U3RyaW5nRnJvbVByb3Zpc2lvbmFsKHByb3Zpc2lvbmFsKSB7XG4gIGNvbnN0IHByb3Zpc2luYWxseVN0cmluZyA9IHByb3Zpc2lvbmFsID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAgJHtQUk9WSVNJT05BTExZfWAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRU1QVFlfU1RSSU5HO1xuXG4gIHJldHVybiBwcm92aXNpbmFsbHlTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3NpdGlvbnNTdHJpbmdGcm9tU3VwcG9zaXRpb25zKHN1cHBvc2l0aW9ucykge1xuICBjb25zdCBzdXBwb3NpdGlvbnNTdHJpbmcgPSBzdXBwb3NpdGlvbnMucmVkdWNlKChzdXBwb3NpdGlvbnNTdHJpbmcsIHN1cHBvc2l0aW9uKSA9PiB7XG4gICAgY29uc3Qgc3VwcG9zaXRpb25TdHJpbmcgPSBzdXBwb3NpdGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIHN1cHBvc2l0aW9uc1N0cmluZyA9IChzdXBwb3NpdGlvbnNTdHJpbmcgPT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvc2l0aW9uU3RyaW5nOiAvLy9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHtzdXBwb3NpdGlvbnNTdHJpbmd9LCAke3N1cHBvc2l0aW9uU3RyaW5nfWA7XG5cbiAgICByZXR1cm4gc3VwcG9zaXRpb25zU3RyaW5nO1xuICB9LCBudWxsKTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25zU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXF1aXZhbGVuY2VTdHJpbmdGcm9tVGVybXModGVybXMpIHtcbiAgY29uc3QgdGVybXNTdHJpbmcgPSB0ZXJtc1N0cmluZ0Zyb21UZXJtcyh0ZXJtcyksXG4gICAgICAgIGVxdWl2YWxlbmNlU3RyaW5nID0gYFske3Rlcm1zU3RyaW5nfV1gO1xuXG4gIHJldHVybiBlcXVpdmFsZW5jZVN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25hdHVyZVN0cmluZ0Zyb21TaWduYXR1cmUoc2lnbmF0dXJlKSB7XG4gIGNvbnN0IHNpZ25hdHVyZVN0cmluZyA9IChzaWduYXR1cmUgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmUuZ2V0U3RyaW5nKCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbDtcblxuICByZXR1cm4gc2lnbmF0dXJlU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZVN0cmluZ0Zyb21Ob21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKSB7XG4gIGNvbnN0IHR5cGVTdHJpbmcgPSBub21pbmFsVHlwZU5hbWU7ICAvLy9cblxuICByZXR1cm4gdHlwZVN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGltcGxpY2l0QXNzdW1wdGlvblN0cmluZ0Zyb21TdGF0ZW1lbnQoc3Rhc3RlbWVudCkge1xuICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGFzdGVtZW50LmdldFN0cmluZygpLFxuICAgICAgICBpbXBsaWNpdEFzc3VtcHRpb25TdHJpbmcgPSBgLiA6OiAke3N0YXRlbWVudFN0cmluZ31gO1xuXG4gIHJldHVybiBpbXBsaWNpdEFzc3VtcHRpb25TdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtU3Vic3RpdHV0aW9uU3RyaW5nRnJvbVRlcm1BbmRWYXJpYWJsZSh0ZXJtLCB2YXJpYWJsZSkge1xuICBjb25zdCB0ZXJtU3RyaW5nID0gdGVybS5nZXRTdHJpbmcoKSxcbiAgICAgICAgdmFyaWFibGVTdHJpbmcgPSB2YXJpYWJsZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgdGVybVN1YnN0aXR1dGlvblN0cmluZyA9IGBbJHt0ZXJtU3RyaW5nfSBmb3IgJHt2YXJpYWJsZVN0cmluZ31dYDtcblxuICByZXR1cm4gdGVybVN1YnN0aXR1dGlvblN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnN0cmFpbnRTdHJpbmdGcm9tUmVmZXJlbmNlQW5kU3RhdGVtZW50KHJlZmVyZW5jZSwgc3RhdGVtZW50KSB7XG4gIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKSxcbiAgICAgICAgcmVmZXJuZWNlU3RyaW5nID0gcmVmZXJlbmNlLmdldFN0cmluZygpLFxuICAgICAgICBjb25zdHJhaW50U3RyaW5nID0gYCR7cmVmZXJuZWNlU3RyaW5nfSA6OiAke3N0YXRlbWVudFN0cmluZ31gO1xuXG4gIHJldHVybiBjb25zdHJhaW50U3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVsc1N0cmluZ0Zyb21MYWJlbHNQcmVtaXNlc0FuZENvbmNsdXNpb24obGFiZWxzLCBwcmVtaXNlcywgY29uY2x1c2lvbikge1xuICBsZXQgcnVsZVN0cmluZyA9IEVNUFRZX1NUUklORztcblxuICBjb25zdCBjb25jbHVzaW9uU3RyaW5nID0gY29uY2x1c2lvbi5nZXRTdHJpbmcoKSxcbiAgICAgICAgcHJlbWlzZXNTdHJpbmcgPSBwcmVtaXNlc1N0cmluZ0Zyb21QcmVtaXNlcyhwcmVtaXNlcyksXG4gICAgICAgIGxhYmVsc1N0cmluZyA9IGxhYmVsc1N0cmluZ0Zyb21MYWJlbHMobGFiZWxzKTtcblxuICBydWxlU3RyaW5nID0gYCR7cnVsZVN0cmluZ30ke2xhYmVsc1N0cmluZ30gOjogYDtcblxuICBydWxlU3RyaW5nID0gKHByZW1pc2VzU3RyaW5nICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgIGAke3J1bGVTdHJpbmd9WyR7cHJlbWlzZXNTdHJpbmd9XS4uLiR7Y29uY2x1c2lvblN0cmluZ31gIDpcbiAgICAgICAgICAgICAgICAgICBgJHtydWxlU3RyaW5nfSR7Y29uY2x1c2lvblN0cmluZ31gO1xuXG4gIHJldHVybiBydWxlU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2NoZW1hU3RyaW5nRnJvbUxhYmVsU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVsLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbikge1xuICBjb25zdCBsYWJlbFN0cmluZyA9IGxhYmVsLmdldFN0cmluZygpLFxuICAgICAgICBkZWR1Y3Rpb25TdHJpbmcgPSBkZWR1Y3Rpb24uZ2V0U3RyaW5nKCksXG4gICAgICAgIHN1cHBvc2l0aW9uc1N0cmluZyA9IHN1cHBvc2l0aW9uc1N0cmluZ0Zyb21TdXBwb3NpdGlvbnMoc3VwcG9zaXRpb25zKSxcbiAgICAgICAgc2NoZW1hU3RyaW5nID0gKHN1cHBvc2l0aW9uc1N0cmluZyAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgYCR7bGFiZWxTdHJpbmd9IDo6IFske3N1cHBvc2l0aW9uc1N0cmluZ31dLi4uJHtkZWR1Y3Rpb25TdHJpbmd9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGAke2xhYmVsU3RyaW5nfSA6OiAke2RlZHVjdGlvblN0cmluZ31gO1xuXG4gIHJldHVybiBzY2hlbWFTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWN0aW9uU3RyaW5nRnJvbUh5cG90aGVzZXNEZWNsYXJhdGlvbkFuZENsYWltKGh5cG90aGVzZXMsIGRlY2xhcmF0aW9uLCBjbGFpbSkge1xuICBsZXQgc2VjdGlvblN0cmluZztcblxuICBjb25zdCBoeXBvdGhlc2VzU3RyaW5nID0gaHlwb3RoZXNlc1N0cmluZ0Zyb21IeXBvdGhlc2VzKGh5cG90aGVzZXMpO1xuXG4gIHNlY3Rpb25TdHJpbmcgPSBgWyR7aHlwb3RoZXNlc1N0cmluZ31dOjo6IGA7XG5cbiAgaWYgKGRlY2xhcmF0aW9uICE9PSBudWxsKSB7XG4gICAgY29uc3QgZGVjbGFyYXRpb25TdHJpbmcgPSBkZWNsYXJhdGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIHNlY3Rpb25TdHJpbmcgPSBgJHtzZWN0aW9uU3RyaW5nfSR7ZGVjbGFyYXRpb25TdHJpbmd9YDtcbiAgfVxuXG4gIGlmIChjbGFpbSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IGNsYWltU3RyaW5nID0gY2xhaW0uZ2V0U3RyaW5nKCk7XG5cbiAgICBzZWN0aW9uU3RyaW5nID0gYCR7c2VjdGlvblN0cmluZ30ke2NsYWltU3RyaW5nfWA7XG4gIH1cblxuICByZXR1cm4gc2VjdGlvblN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnByb29mU3RyaW5nRnJvbVN1cHBvc2l0aW9uc0FuZFN1YkRlcml2YXRpb24oc3VwcG9zaXRpb25zLCBzdWJEZXJpdmF0aW9uKSB7XG4gIGNvbnN0IGxhc3RTdGVwID0gc3ViRGVyaXZhdGlvbi5nZXRMYXN0U3RlcCgpLFxuICAgICAgICBzdXBwb3NpdGlvbnNTdHJpbmcgPSBzdXBwb3NpdGlvbnNTdHJpbmdGcm9tU3VwcG9zaXRpb25zKHN1cHBvc2l0aW9ucyksXG4gICAgICAgIGxhc3RTdGVwU3RyaW5nID0gbGFzdFN0ZXAuZ2V0U3RyaW5nKCksXG4gICAgICAgIHN1YnByb29mU3RyaW5nID0gYFske3N1cHBvc2l0aW9uc1N0cmluZ31dLi4uJHtsYXN0U3RlcFN0cmluZ31gO1xuXG4gIHJldHVybiBzdWJwcm9vZlN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lU3Vic3RpdHV0aW9uU3RyaW5nRnJvbUZyYW1lQW5kTWV0YXZhcmlhYmxlKGZyYW1lLCBtZXRhdmFyaWFibGUpIHtcbiAgY29uc3QgZnJhbWVTdHJpbmcgPSBmcmFtZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gbWV0YXZhcmlhYmxlLmdldFN0cmluZygpLFxuICAgICAgICBzdHJpbmcgPSBgWyR7ZnJhbWVTdHJpbmd9IGZvciBbJHttZXRhdmFyaWFibGVTdHJpbmd9XV1gO1xuXG4gIHJldHVybiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGFpbVN0cmluZ0Zyb21MYWJlbHNTaWduYXR1cmVTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24obGFiZWxzLCBzaWduYXR1cmUsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uKSB7XG4gIGxldCBjbGFpbVN0cmluZyA9IEVNUFRZX1NUUklORztcblxuICBjb25zdCBkZWR1Y3Rpb25TdHJpbmcgPSBkZWR1Y3Rpb24uZ2V0U3RyaW5nKCksXG4gICAgICAgIGxhYmVsc1N0cmluZyA9IGxhYmVsc1N0cmluZ0Zyb21MYWJlbHMobGFiZWxzKSxcbiAgICAgICAgc2lnbmF0dXJlU3RyaW5nID0gc2lnbmF0dXJlU3RyaW5nRnJvbVNpZ25hdHVyZShzaWduYXR1cmUpLFxuICAgICAgICBzdXBwb3NpdGlvbnNTdHJpbmcgPSBzdXBwb3NpdGlvbnNTdHJpbmdGcm9tU3VwcG9zaXRpb25zKHN1cHBvc2l0aW9ucyk7XG5cbiAgY2xhaW1TdHJpbmcgPSAobGFiZWxzU3RyaW5nICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgIGAke2NsYWltU3RyaW5nfSR7bGFiZWxzU3RyaW5nfWAgOlxuICAgICAgICAgICAgICAgICAgIGAuLmA7XG5cbiAgY2xhaW1TdHJpbmcgPSAoc2lnbmF0dXJlU3RyaW5nICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgIGAke2NsYWltU3RyaW5nfSR7c2lnbmF0dXJlU3RyaW5nfWAgOlxuICAgICAgICAgICAgICAgICAgIGAke2NsYWltU3RyaW5nfWA7XG5cblxuICBjbGFpbVN0cmluZyA9IChzdXBwb3NpdGlvbnNTdHJpbmcgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgYCR7Y2xhaW1TdHJpbmd9IDo6IFske3N1cHBvc2l0aW9uc1N0cmluZ31dLi4uJHtkZWR1Y3Rpb25TdHJpbmd9YCA6XG4gICAgICAgICAgICAgICAgICAgYCR7Y2xhaW1TdHJpbmd9IDo6ICR7ZGVkdWN0aW9uU3RyaW5nfWA7XG5cbiAgcmV0dXJuIGNsYWltU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2VkdXJlQ2FsbFN0cmluZ0Zyb21Qcm9jZWR1cmVSZWZlcmVuY2VBbmRQYXJhbWV0ZXJzKHByb2NlZHVyZVJlZmVyZW5jZSwgcGFyYW1ldGVycykge1xuICBjb25zdCBwcm9jZWR1cmVSZWZlcmVuY2VOYW1lID0gcHJvY2VkdXJlUmVmZXJlbmNlLmdldE5hbWUoKSxcbiAgICAgICAgcGFyYW1ldGVyc1N0cmluZyA9IHBhcmFtZXRlcnNTdHJpbmdGcm9tUGFyYW1ldGVycyhwYXJhbWV0ZXJzKSxcbiAgICAgICAgcHJvY2VkdXJlQ2FsbFN0cmluZyA9IGBAJHtwcm9jZWR1cmVSZWZlcmVuY2VOYW1lfSgke3BhcmFtZXRlcnNTdHJpbmd9KWA7XG5cbiAgcmV0dXJuIHByb2NlZHVyZUNhbGxTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb3R5cGVEZWNsYXJhdGlvblN0cmluZ0Zyb21UeXBlU3VwZXJUeXBlc0FuZFByb3Zpc2lvbmFsKHR5cGUsIHN1cGVyVHlwZXMsIHByb3Zpc2lvbmFsKSB7XG4gIGNvbnN0IHR5cGVTdHJpbmcgPSB0eXBlLmdldFN0cmluZygpLFxuICAgICAgICBzdXBlclR5cGVzU3RyaW5nID0gc3VwZXJUeXBlc1N0cmluZ0Zyb21TdXBlclR5cGVzKHN1cGVyVHlwZXMpLFxuICAgICAgICBwcm92aXNpb25hbFN0cmluZyA9IHByb3Zpc2luYWxTdHJpbmdGcm9tUHJvdmlzaW9uYWwocHJvdmlzaW9uYWwpLFxuICAgICAgICBjb3R5cGVEZWNsYXJhdGlvblN0cmluZyA9IGAke3Byb3Zpc2lvbmFsU3RyaW5nfSR7dHlwZVN0cmluZ30ke3N1cGVyVHlwZXNTdHJpbmd9YDtcblxuICByZXR1cm4gY290eXBlRGVjbGFyYXRpb25TdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRTdWJzdGl0dXRpb25TdHJpbmdGcm9tU3RhdGVtZW50QW5kTWV0YXZhcmlhYmxlKHN0YXRlbWVudCwgbWV0YXZhcmlhYmxlKSB7XG4gIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gbWV0YXZhcmlhYmxlLmdldFN0cmluZygpLFxuICAgICAgICBzdGF0ZW1lbnRTdWJzdGl0dXRpb25TdHJpbmcgPSBgWyR7c3RhdGVtZW50U3RyaW5nfSBmb3IgJHttZXRhdmFyaWFibGVTdHJpbmd9XWA7XG5cbiAgcmV0dXJuIHN0YXRlbWVudFN1YnN0aXR1dGlvblN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZVN1YnN0aXR1dGlvblN0cmluZ0Zyb21SZWZlcmVuY2VBbmRNZXRhdmFyaWFibGUocmVmZXJlbmNlLCBtZXRhdmFyaWFibGUpIHtcbiAgY29uc3QgcmVmZXJlbmNlU3RyaW5nID0gcmVmZXJlbmNlLmdldFN0cmluZygpLFxuICAgICAgICBtZXRhdmFyaWFibGVTdHJpbmcgPSBtZXRhdmFyaWFibGUuZ2V0U3RyaW5nKCksXG4gICAgICAgIHJlZmVyZW5jZVN1YnN0aXR1dGlvblN0cmluZyA9IGBbJHtyZWZlcmVuY2VTdHJpbmd9IGZvciAke21ldGF2YXJpYWJsZVN0cmluZ31dYDtcblxuICByZXR1cm4gcmVmZXJlbmNlU3Vic3RpdHV0aW9uU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50U3Vic3RpdHV0aW9uU3RyaW5nRnJvbVN0YXRlbWVudE1ldGF2YXJpYWJsZUFuZFN1YnN0aXR1dGlvbihzdGF0ZW1lbnQsIG1ldGF2YXJpYWJsZSwgc3Vic3RpdHV0aW9uKSB7XG4gIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gbWV0YXZhcmlhYmxlLmdldFN0cmluZygpLFxuICAgICAgICBzdWJzdGl0dXRpb25TdHJpbmcgPSBzdWJzdGl0dXRpb24uZ2V0U3RyaW5nKCksXG4gICAgICAgIHN0YXRlbWVudFN1YnN0aXR1dGlvblN0cmluZyA9IGBbJHtzdGF0ZW1lbnRTdHJpbmd9IGZvciAke21ldGF2YXJpYWJsZVN0cmluZ30ke3N1YnN0aXR1dGlvblN0cmluZ31dYDtcblxuICByZXR1cm4gc3RhdGVtZW50U3Vic3RpdHV0aW9uU3RyaW5nO1xufVxuIl0sIm5hbWVzIjpbImNsYWltU3RyaW5nRnJvbUxhYmVsc1NpZ25hdHVyZVN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbiIsImNvbnN0cmFpbnRTdHJpbmdGcm9tUmVmZXJlbmNlQW5kU3RhdGVtZW50IiwiY290eXBlRGVjbGFyYXRpb25TdHJpbmdGcm9tVHlwZVN1cGVyVHlwZXNBbmRQcm92aXNpb25hbCIsImVxdWl2YWxlbmNlU3RyaW5nRnJvbVRlcm1zIiwiZnJhbWVTdWJzdGl0dXRpb25TdHJpbmdGcm9tRnJhbWVBbmRNZXRhdmFyaWFibGUiLCJoeXBvdGhlc2VzU3RyaW5nRnJvbUh5cG90aGVzZXMiLCJpbXBsaWNpdEFzc3VtcHRpb25TdHJpbmdGcm9tU3RhdGVtZW50IiwibGFiZWxzU3RyaW5nRnJvbUxhYmVscyIsInBhcmFtZXRlcnNTdHJpbmdGcm9tUGFyYW1ldGVycyIsInByZW1pc2VzU3RyaW5nRnJvbVByZW1pc2VzIiwicHJvY2VkdXJlQ2FsbFN0cmluZ0Zyb21Qcm9jZWR1cmVSZWZlcmVuY2VBbmRQYXJhbWV0ZXJzIiwicHJvdmlzaW5hbFN0cmluZ0Zyb21Qcm92aXNpb25hbCIsInByb3Zpc2lvbmFsbHlTdHJpbmdGcm9tUHJvdmlzaW9uYWwiLCJyZWZlcmVuY2VTdWJzdGl0dXRpb25TdHJpbmdGcm9tUmVmZXJlbmNlQW5kTWV0YXZhcmlhYmxlIiwicnVsc1N0cmluZ0Zyb21MYWJlbHNQcmVtaXNlc0FuZENvbmNsdXNpb24iLCJzY2hlbWFTdHJpbmdGcm9tTGFiZWxTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24iLCJzZWN0aW9uU3RyaW5nRnJvbUh5cG90aGVzZXNEZWNsYXJhdGlvbkFuZENsYWltIiwic2lnbmF0dXJlU3RyaW5nRnJvbVNpZ25hdHVyZSIsInN0YXRlbWVudFN1YnN0aXR1dGlvblN0cmluZ0Zyb21TdGF0ZW1lbnRBbmRNZXRhdmFyaWFibGUiLCJzdGF0ZW1lbnRTdWJzdGl0dXRpb25TdHJpbmdGcm9tU3RhdGVtZW50TWV0YXZhcmlhYmxlQW5kU3Vic3RpdHV0aW9uIiwic3VicHJvb2ZTdHJpbmdGcm9tU3VwcG9zaXRpb25zQW5kU3ViRGVyaXZhdGlvbiIsInN1cGVyVHlwZXNTdHJpbmdGcm9tU3VwZXJUeXBlcyIsInN1cHBvc2l0aW9uc1N0cmluZ0Zyb21TdXBwb3NpdGlvbnMiLCJ0ZXJtU3Vic3RpdHV0aW9uU3RyaW5nRnJvbVRlcm1BbmRWYXJpYWJsZSIsInRlcm1zU3RyaW5nRnJvbVRlcm1zIiwidHlwZVN0cmluZ0Zyb21Ob21pbmFsVHlwZU5hbWUiLCJ0ZXJtcyIsInF1b3RlZCIsInRlcm1zU3RyaW5nIiwicmVkdWNlIiwidGVybSIsInRlcm1TdHJpbmciLCJnZXRTdHJpbmciLCJsYWJlbHMiLCJsYWJlbHNTdHJpbmciLCJsYWJlbCIsImxhYmVsU3RyaW5nIiwicHJlbWlzZXMiLCJwcmVtaXNlc1N0cmluZyIsInByZW1pc2UiLCJwcmVtaXNlU3RyaW5nIiwiaHlwb3RoZXNlcyIsImh5cG90aGVzZXNTdHJpbmciLCJoeXBvdGhlc2lzIiwiaHlwb3RoZXNpc1N0cmluZyIsInN1cGVyVHlwZXMiLCJzdXBlclR5cGVzU3RyaW5nIiwiYmFzZVR5cGUiLCJiYXNlVHlwZUZyb21Ob3RoaW5nIiwic3VwZXJUeXBlIiwic3VwZXJUeXBlU3RyaW5nIiwiRU1QVFlfU1RSSU5HIiwicGFyYW1ldGVycyIsInBhcmFtZXRlcnNTdHJpbmciLCJwYXJhbWV0ZXIiLCJwYXJhbWV0ZXJTdHJpbmciLCJwcm92aXNpb25hbCIsInByb3Zpc2luYWxTdHJpbmciLCJQUk9WSVNJT05BTCIsInByb3Zpc2luYWxseVN0cmluZyIsIlBST1ZJU0lPTkFMTFkiLCJzdXBwb3NpdGlvbnMiLCJzdXBwb3NpdGlvbnNTdHJpbmciLCJzdXBwb3NpdGlvbiIsInN1cHBvc2l0aW9uU3RyaW5nIiwiZXF1aXZhbGVuY2VTdHJpbmciLCJzaWduYXR1cmUiLCJzaWduYXR1cmVTdHJpbmciLCJub21pbmFsVHlwZU5hbWUiLCJ0eXBlU3RyaW5nIiwic3Rhc3RlbWVudCIsInN0YXRlbWVudFN0cmluZyIsImltcGxpY2l0QXNzdW1wdGlvblN0cmluZyIsInZhcmlhYmxlIiwidmFyaWFibGVTdHJpbmciLCJ0ZXJtU3Vic3RpdHV0aW9uU3RyaW5nIiwicmVmZXJlbmNlIiwic3RhdGVtZW50IiwicmVmZXJuZWNlU3RyaW5nIiwiY29uc3RyYWludFN0cmluZyIsImNvbmNsdXNpb24iLCJydWxlU3RyaW5nIiwiY29uY2x1c2lvblN0cmluZyIsImRlZHVjdGlvbiIsImRlZHVjdGlvblN0cmluZyIsInNjaGVtYVN0cmluZyIsImRlY2xhcmF0aW9uIiwiY2xhaW0iLCJzZWN0aW9uU3RyaW5nIiwiZGVjbGFyYXRpb25TdHJpbmciLCJjbGFpbVN0cmluZyIsInN1YkRlcml2YXRpb24iLCJsYXN0U3RlcCIsImdldExhc3RTdGVwIiwibGFzdFN0ZXBTdHJpbmciLCJzdWJwcm9vZlN0cmluZyIsImZyYW1lIiwibWV0YXZhcmlhYmxlIiwiZnJhbWVTdHJpbmciLCJtZXRhdmFyaWFibGVTdHJpbmciLCJzdHJpbmciLCJwcm9jZWR1cmVSZWZlcmVuY2UiLCJwcm9jZWR1cmVSZWZlcmVuY2VOYW1lIiwiZ2V0TmFtZSIsInByb2NlZHVyZUNhbGxTdHJpbmciLCJ0eXBlIiwicHJvdmlzaW9uYWxTdHJpbmciLCJjb3R5cGVEZWNsYXJhdGlvblN0cmluZyIsInN0YXRlbWVudFN1YnN0aXR1dGlvblN0cmluZyIsInJlZmVyZW5jZVN0cmluZyIsInJlZmVyZW5jZVN1YnN0aXR1dGlvblN0cmluZyIsInN1YnN0aXR1dGlvbiIsInN1YnN0aXR1dGlvblN0cmluZyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O1FBcVBnQkE7ZUFBQUE7O1FBMUVBQztlQUFBQTs7UUEwR0FDO2VBQUFBOztRQTlJQUM7ZUFBQUE7O1FBc0dBQztlQUFBQTs7UUF4TEFDO2VBQUFBOztRQXVHQUM7ZUFBQUE7O1FBbklBQztlQUFBQTs7UUFrRUFDO2VBQUFBOztRQXBEQUM7ZUFBQUE7O1FBc09BQztlQUFBQTs7UUFwS0FDO2VBQUFBOztRQVFBQztlQUFBQTs7UUFxTEFDO2VBQUFBOztRQW5IQUM7ZUFBQUE7O1FBZ0JBQztlQUFBQTs7UUFXQUM7ZUFBQUE7O1FBaEVBQztlQUFBQTs7UUFnSkFDO2VBQUFBOztRQWdCQUM7ZUFBQUE7O1FBMUVBQztlQUFBQTs7UUFqS0FDO2VBQUFBOztRQXNEQUM7ZUFBQUE7O1FBMENBQztlQUFBQTs7UUE5SkFDO2VBQUFBOztRQWlKQUM7ZUFBQUE7OztzQkFwSm9COzJCQUNxQjtBQUVsRCxTQUFTRCxxQkFBcUJFLEtBQUssRUFBRUMsU0FBUyxLQUFLO0lBQ3hELE1BQU1DLGNBQWNGLE1BQU1HLE1BQU0sQ0FBQyxD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
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "occam-nominal",
3
3
  "author": "James Smith",
4
- "version": "1.0.430",
4
+ "version": "1.0.431",
5
5
  "license": "MIT, Anti-996",
6
6
  "homepage": "https://github.com/djalbat/occam-nominal",
7
7
  "description": "Occam's Nominal language.",
@@ -11,16 +11,16 @@
11
11
  },
12
12
  "dependencies": {
13
13
  "necessary": "^17.6.3",
14
- "occam-furtle": "^3.0.438",
14
+ "occam-furtle": "^3.0.439",
15
15
  "occam-grammar-utilities": "^8.1.22",
16
- "occam-languages": "^2.2.55",
16
+ "occam-languages": "^2.2.56",
17
17
  "occam-query": "^4.1.203"
18
18
  },
19
19
  "devDependencies": {
20
20
  "@swc/core": "1.13.20",
21
21
  "decaf-cli": "^1.0.37",
22
- "occam-model": "^1.0.572",
23
- "occam-server": "^7.0.72",
22
+ "occam-model": "^1.0.573",
23
+ "occam-server": "^7.0.73",
24
24
  "watchful-cli": "^1.7.102"
25
25
  },
26
26
  "scripts": {
@@ -632,13 +632,6 @@ export default class NominalFileContext extends FileContext {
632
632
  return labelPresent;
633
633
  }
634
634
 
635
- isAxiomPresentByReference(reference) {
636
- const axiom = this.findAxiomByReference(reference),
637
- axiomPresent = (axiom !== null);
638
-
639
- return axiomPresent;
640
- }
641
-
642
635
  isTypePresentByTypeName(typeName, includeRelease = true) {
643
636
  const type = this.findTypeByTypeName(typeName, includeRelease),
644
637
  typePresent = (type !== null);
@@ -12,13 +12,11 @@ import { termsFromJSON,
12
12
  statementsFromJSON,
13
13
  assertionsFromJSON,
14
14
  referencesFromJSON,
15
- signaturesFromJSON,
16
15
  assumptionsFromJSON,
17
16
  metavariablesFromJSON,
18
17
  substitutionsFromJSON,
19
18
  equalitiesToEqualitiesJSON,
20
19
  statementsToStatementsJSON,
21
- signaturesToSignaturesJSON,
22
20
  assertionsToAssertionsJSON,
23
21
  referencesToReferencesJSON,
24
22
  assumptionsToAssumptionsJSON,
@@ -28,7 +26,7 @@ import { termsFromJSON,
28
26
  const { push, extract } = arrayUtilities;
29
27
 
30
28
  export default class MnemicContext extends Context {
31
- constructor(context, terms, frames, equalities, assertions, statements, signatures, references, assumptions, metavariables, substitutions) {
29
+ constructor(context, terms, frames, equalities, assertions, statements, references, assumptions, metavariables, substitutions) {
32
30
  super(context);
33
31
 
34
32
  this.terms = terms;
@@ -36,7 +34,6 @@ export default class MnemicContext extends Context {
36
34
  this.equalities = equalities;
37
35
  this.assertions = assertions;
38
36
  this.statements = statements;
39
- this.signatures = signatures;
40
37
  this.references = references;
41
38
  this.assumptions = assumptions;
42
39
  this.metavariables = metavariables;
@@ -83,16 +80,6 @@ export default class MnemicContext extends Context {
83
80
  return statements;
84
81
  }
85
82
 
86
- getSignatures(signatures = []) {
87
- const context = this.getContext();
88
-
89
- push(signatures, this.signatures);
90
-
91
- context.getSignatures(signatures);
92
-
93
- return signatures;
94
- }
95
-
96
83
  getAssertions(assertions = []) {
97
84
  const context = this.getContext();
98
85
 
@@ -273,32 +260,6 @@ export default class MnemicContext extends Context {
273
260
  context.debug(`...added the '${statementString}' statement to the mnemic context.`);
274
261
  }
275
262
 
276
- addSignature(signature) {
277
- const context = this, ///
278
- signatureString = signature.getString();
279
-
280
- context.trace(`Adding the '${signatureString}' signature to the mnemic context...`);
281
-
282
- const signatureA = signature; ///
283
-
284
- extract(this.signatures, (signature) => {
285
- const signatureB = signature, ///
286
- signatureAEqualToSignatureB = signatureA.isEqualTo(signatureB);
287
-
288
- if (signatureAEqualToSignatureB) {
289
- const signatureString = signature.getString();
290
-
291
- context.trace(`Removed the existing '${signatureString}' signature from the mnemic context...`);
292
-
293
- return true;
294
- }
295
- });
296
-
297
- this.signatures.push(signature);
298
-
299
- context.debug(`...added the '${signatureString}' signature to the mnemic context.`);
300
- }
301
-
302
263
  addReference(reference) {
303
264
  const context = this, ///
304
265
  referenceString = reference.getString();
@@ -490,19 +451,6 @@ export default class MnemicContext extends Context {
490
451
  return statement;
491
452
  }
492
453
 
493
- findSignatureBySignatureNode(signatureNode) {
494
- const signatures = this.getSignatures(),
495
- signature = signatures.find((signature) => {
496
- const signatureNodeMatches = signature.matchSignatureNode(signatureNode);
497
-
498
- if (signatureNodeMatches) {
499
- return true;
500
- }
501
- }) || null;
502
-
503
- return signature;
504
- }
505
-
506
454
  findReferenceByReferenceNode(referenceNode) {
507
455
  const references = this.getReferences(),
508
456
  reference = references.find((reference) => {
@@ -603,13 +551,6 @@ export default class MnemicContext extends Context {
603
551
  return statementPresent;
604
552
  }
605
553
 
606
- isSignaturePresentBySignatureNode(signatureNode) {
607
- const signature = this.findSignatureBySignatureNode(signatureNode),
608
- signaturePresent = (signature !== null);
609
-
610
- return signaturePresent;
611
- }
612
-
613
554
  isAssumptionPresentByAssumptionNode(assumptionNode) {
614
555
  const assumption = this.findAssumptionByAssumptionNode(assumptionNode),
615
556
  assumptionPresent = (assumption !== null);
@@ -647,7 +588,6 @@ export default class MnemicContext extends Context {
647
588
  this.frames = framesFromJSON(json, context);
648
589
 
649
590
  this.assertions = assertionsFromJSON(json, context);
650
- this.signatures = signaturesFromJSON(json, context);
651
591
  this.substitutions = substitutionsFromJSON(json, context);
652
592
  }
653
593
 
@@ -663,7 +603,6 @@ export default class MnemicContext extends Context {
663
603
  equalities = this.getEqualities(),
664
604
  assertions = this.getAssertions(),
665
605
  statements = this.getStatements(),
666
- signatures = this.getSignatures(),
667
606
  references = this.getReferences(),
668
607
  assumptions = this.getAssumptions(),
669
608
  metavariables = this.getMetavariables(),
@@ -674,7 +613,6 @@ export default class MnemicContext extends Context {
674
613
  equalitiesJSON = equalitiesToEqualitiesJSON(equalities),
675
614
  assertionsJSON = assertionsToAssertionsJSON(assertions),
676
615
  statementsJSON = statementsToStatementsJSON(statements),
677
- signaturesJSON = signaturesToSignaturesJSON(signatures),
678
616
  referencesJSON = referencesToReferencesJSON(references),
679
617
  assumptionsJSON = assumptionsToAssumptionsJSON(assumptions),
680
618
  metavariablesJSON = metavariablesToMetavariablesJSON(metavariables),
@@ -685,7 +623,6 @@ export default class MnemicContext extends Context {
685
623
  equalities = equalitiesJSON; ///
686
624
  assertions = assertionsJSON; ///
687
625
  statements = statementsJSON; ///
688
- signatures = signaturesJSON; ///
689
626
  references = referencesJSON; ///
690
627
  assumptions = assumptionsJSON; ///
691
628
  metavariables = metavariablesJSON; //
@@ -697,7 +634,6 @@ export default class MnemicContext extends Context {
697
634
  equalities,
698
635
  assertions,
699
636
  statements,
700
- signatures,
701
637
  references,
702
638
  assumptions,
703
639
  metavariables,
@@ -713,12 +649,11 @@ export default class MnemicContext extends Context {
713
649
  equalities = null,
714
650
  statements = null,
715
651
  assertions = null,
716
- signatures = null,
717
652
  references = null,
718
653
  assumptions = null,
719
654
  metavariables = null,
720
655
  substitutions = null,
721
- mnemicContext = new MnemicContext(context, terms, frames, equalities, assertions, statements, signatures, references, assumptions, metavariables, substitutions);
656
+ mnemicContext = new MnemicContext(context, terms, frames, equalities, assertions, statements, references, assumptions, metavariables, substitutions);
722
657
 
723
658
  mnemicContext.initialise(json);
724
659
 
@@ -731,12 +666,11 @@ export default class MnemicContext extends Context {
731
666
  equalities = [],
732
667
  statements = [],
733
668
  assertions = [],
734
- signatures = [],
735
669
  references = [],
736
670
  assumptions = [],
737
671
  metavariables = [],
738
672
  substitutions = [],
739
- mnemicContext = new MnemicContext(context, terms, frames, equalities, assertions, statements, signatures, references, assumptions, metavariables, substitutions);
673
+ mnemicContext = new MnemicContext(context, terms, frames, equalities, assertions, statements, references, assumptions, metavariables, substitutions);
740
674
 
741
675
  return mnemicContext;
742
676
  }
package/src/context.js CHANGED
@@ -305,13 +305,6 @@ export default class Context extends ContextBase {
305
305
  return statement;
306
306
  }
307
307
 
308
- findSignatureBySignatureNode(signatureNode) {
309
- const context = this.getContext(),
310
- signature = context.findSignatureBySignatureNode(signatureNode);
311
-
312
- return signature;
313
- }
314
-
315
308
  findReferenceByReferenceNode(referenceNode) {
316
309
  const context = this.getContext(),
317
310
  reference = context.findReferenceByReferenceNode(referenceNode);
@@ -417,13 +410,6 @@ export default class Context extends ContextBase {
417
410
  return declaredMetavariable;
418
411
  }
419
412
 
420
- isAxiomPresentByReference(reference) {
421
- const context = this.getContext(),
422
- axiomPresent = context.isAxiomPresentByReference(reference);
423
-
424
- return axiomPresent;
425
- }
426
-
427
413
  isTermPresentByTermNode(termNode) {
428
414
  const context = this.getContext(),
429
415
  termPresent = context.isTermPresentByTermNode(termNode);
@@ -466,13 +452,6 @@ export default class Context extends ContextBase {
466
452
  return statementPresent;
467
453
  }
468
454
 
469
- isSignaturePresentBySignatureNode(signatureNode) {
470
- const context = this.getContext(),
471
- signaturePresent = context.isSignaturePresentBySignatureNode(signatureNode);
472
-
473
- return signaturePresent;
474
- }
475
-
476
455
  isMetavariablePresentByMetavariableNode(metavariableNode) {
477
456
  const context = this.getContext(),
478
457
  metavariablePresent = context.isMetavariablePresentByMetavariableNode(metavariableNode);
@@ -145,9 +145,17 @@ export default define(class SignatureAssertion extends Assertion {
145
145
  referenceValidates = this.reference.validate(state, context, (reference, context) => {
146
146
  let validates = false;
147
147
 
148
- const asiomPresent = context.isAxiomPresentByReference(reference);
148
+ const axiom = context.findAxiomByReference(reference);
149
149
 
150
- if (asiomPresent) {
150
+ if (axiom !== null) {
151
+ const axiomSatisfiable = axiom.isSatisfiable();
152
+
153
+ if (axiomSatisfiable) {
154
+ validates = true;
155
+ }
156
+ }
157
+
158
+ if (validates) {
151
159
  this.reference = reference;
152
160
 
153
161
  validates = continuation(state, context);
@@ -200,9 +208,7 @@ export default define(class SignatureAssertion extends Assertion {
200
208
  return continuation(stepAndFactOrSubproofsUnify);
201
209
  }
202
210
 
203
- debugger
204
-
205
- // stepAndFactOrSubproofsUnify = axiom.unifyStepAndFactOrSubproofs(step, factOrSubproofs, context);
211
+ axiom.unifyStepAndFactOrSubproofs(step, factOrSubproofs, context, continuation);
206
212
  });
207
213
  }, context);
208
214
  }
@@ -16,10 +16,6 @@ export default define(class BracketedConstructor extends Constructor {
16
16
  unifyTerm(term, state, context, continuation) {
17
17
  let termUnifiesWithBracketedConstructor;
18
18
 
19
- const termString = term.getString();
20
-
21
- context.trace(`Unifying the '${termString}' term with the bracketed constructor...`);
22
-
23
19
  termUnifiesWithBracketedConstructor = super.unifyTerm(term, context, (term, context) => {
24
20
  let termUnifies = false;
25
21
 
@@ -52,10 +48,6 @@ export default define(class BracketedConstructor extends Constructor {
52
48
  return termUnifies;
53
49
  });
54
50
 
55
- if (termUnifiesWithBracketedConstructor) {
56
- context.debug(`...unified the '${termString}' term with the bracketed constructor.`);
57
- }
58
-
59
51
  return termUnifiesWithBracketedConstructor;
60
52
  }
61
53
 
@@ -216,7 +216,7 @@ export default define(class Step extends Fact {
216
216
 
217
217
  context.trace(`Validating the '${stepString}' step's '${signatureAssertionString}' signature assertion...`);
218
218
 
219
- derive((state) => {
219
+ declare((state) => {
220
220
  signatureAssertionValidates = this.signatureAssertion.validate(state, context, (signatureAssertion, contwext) => {
221
221
  let validates;
222
222
 
@@ -1,15 +1,15 @@
1
1
  "use strict";
2
2
 
3
- import { arrayUtilities } from "necessary";
4
- import { Element, breakPointUtilities } from "occam-languages";
3
+ import { Element, breakPointUtilities, continuationUtilities } from "occam-languages";
5
4
 
6
5
  import { define } from "../elements";
7
6
  import { declare } from "../utilities/state";
8
7
  import { all, every } from "../utilities/continuation";
8
+ import { termsStringFromTerms } from "../utilities/string";
9
9
  import { instantiateSignature } from "../process/instantiate";
10
10
  import { attempt, reconcile, serialise, unserialise, instantiate } from "../utilities/context";
11
11
 
12
- const { match } = arrayUtilities,
12
+ const { asynchronousEvery } = continuationUtilities,
13
13
  { breakPointFromJSON, breakPointToBreakPointJSON } = breakPointUtilities;
14
14
 
15
15
  export default define(class Signature extends Element {
@@ -173,49 +173,50 @@ export default define(class Signature extends Element {
173
173
  }
174
174
 
175
175
  unifyTerms(terms, context, continuation) {
176
- let termsUnify;
176
+ let termsUnify = false;
177
177
 
178
- debugger
178
+ const quoted = true,
179
+ termsString = termsStringFromTerms(terms, quoted),
180
+ signatureString = this.getString();
179
181
 
180
- const generalSignature = this, ///
181
- specificSignature = signature, ///
182
- generalSignatureString = generalSignature.getString(),
183
- specificSignatureString = specificSignature.getString();
182
+ context.trace(`Unifying the ${termsString} terms with the '${signatureString}' signature...`);
184
183
 
185
- context.trace(`Unifying the '${specificSignatureString}' signature with the '${generalSignatureString}' signature...`);
184
+ const generalTerms = this.terms, ///
185
+ specificTerms = terms, //
186
+ generalTermsLength = generalTerms.length,
187
+ specificTermsLength = specificTerms.length;
186
188
 
187
- const generalSignatureTerms = generalSignature.getTerms(),
188
- specificSignatureTerms = specificSignature.getTerms(),
189
- generalSignatureContext = generalSignature.getContext(),
190
- specificSignatureContext = specificSignature.getContext(),
191
- generalTerms = generalSignatureTerms, ///
192
- specificTerms = specificSignatureTerms, ///
193
- generalContext = generalSignatureContext, ///
194
- specificContext = specificSignatureContext; ///
189
+ if (generalTermsLength !== specificTermsLength) {
190
+ return continuation(termsUnify);
191
+ }
195
192
 
196
- debugger
193
+ const specificContext = context; ///
197
194
 
198
- termsUnify = reconcile((specificContext) => {
199
- match(generalTerms, specificTerms, (generalTerm, specificTerm) => {
200
- let termUnifies;
195
+ context = this.getContext();
201
196
 
202
- termUnifies = generalTerm.unifyTerm(specificTerm, generalContext, specificContext);
197
+ const generalContext = context; ///
203
198
 
204
- if (termUnifies) {
205
- return true;
206
- }
207
- });
199
+ let index = -1;
208
200
 
209
- if (termsUnify) {
210
- specificContext.commit(context);
211
- }
212
- }, specificContext);
201
+ return reconcile((specificContext) => {
202
+ return asynchronousEvery(generalTerms, (generalTerm, continuation) => {
203
+ index++;
213
204
 
214
- if (termsUnify) {
215
- context.debug(`...unified the '${specificSignatureString}' signature with the '${generalSignatureString}' signature.`);
216
- }
205
+ const specificTerm = specificTerms[index];
217
206
 
218
- return termsUnify;
207
+ generalTerm.unifyTerm(specificTerm, generalContext, specificContext, continuation);
208
+ }, (termsUnify) => {
209
+ if (termsUnify) {
210
+ specificContext.commit();
211
+ }
212
+
213
+ if (termsUnify) {
214
+ context.debug(`...unified the ${termsString} terms with the '${signatureString}' signature.`);
215
+ }
216
+
217
+ return continuation(termsUnify);
218
+ });
219
+ }, specificContext);
219
220
  }
220
221
 
221
222
  toJSON() {
@@ -346,11 +346,9 @@ export default define(class Term extends Element {
346
346
  // return term;
347
347
  // }
348
348
 
349
- unifyTerm(term, generalContext, specificContext) {
349
+ unifyTerm(term, generalContext, specificContext, continuation) {
350
350
  let termUnifies = false;
351
351
 
352
- debugger
353
-
354
352
  const context = specificContext, ///
355
353
  generalTerm = this, ///
356
354
  specificTerm = term,
@@ -359,17 +357,17 @@ export default define(class Term extends Element {
359
357
 
360
358
  context.trace(`Unifying the '${specifixTermString}' term with the '${generalTermString}' term...`);
361
359
 
362
- const termUnifiesIntrinsically = unifyTermIntrinsically(generalTerm, specificTerm, generalContext, specificContext);
363
-
364
- if (termUnifiesIntrinsically) {
365
- termUnifies = true;
366
- }
360
+ return unifyTermIntrinsically(generalTerm, specificTerm, generalContext, specificContext, (termUnifiesIntrinsically) => {
361
+ if (termUnifiesIntrinsically) {
362
+ termUnifies = true;
363
+ }
367
364
 
368
- if (termUnifies) {
369
- context.debug(`...unified the '${specifixTermString}' term with the '${generalTermString}' term.`);
370
- }
365
+ if (termUnifies) {
366
+ context.debug(`...unified the '${specifixTermString}' term with the '${generalTermString}' term.`);
367
+ }
371
368
 
372
- return termUnifies;
369
+ return continuation(termUnifies);
370
+ });
373
371
  }
374
372
 
375
373
  toJSON() {
@@ -127,8 +127,6 @@ function unifyStepWithSignatureAssertion(step, context, continuation) {
127
127
  context.trace(`Unifying the '${stepString}' step with the '${signatureAssertionString}' signature assertion...`);
128
128
 
129
129
  return signatureAssertion.unifyStepAndFactOrSubproofs(step, factOrSubproofs, context, (stepAndFactOrSubproofsUnify) => {
130
- let stepUnifiesWithSignatureAssertion = false;
131
-
132
130
  if (stepAndFactOrSubproofsUnify) {
133
131
  stepUnifiesWithSignatureAssertion = true;
134
132
  }