occam-nominal 1.0.430 → 1.0.432

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.
@@ -105,8 +105,14 @@ const _default = (0, _elements.define)(class SignatureAssertion extends _asserti
105
105
  context.trace(`Validating the '${signatureAssertionString}' signature assertion's reference...`);
106
106
  referenceValidates = this.reference.validate(state, context, (reference, context)=>{
107
107
  let validates = false;
108
- const asiomPresent = context.isAxiomPresentByReference(reference);
109
- if (asiomPresent) {
108
+ const axiom = context.findAxiomByReference(reference);
109
+ if (axiom !== null) {
110
+ const axiomSatisfiable = axiom.isSatisfiable();
111
+ if (axiomSatisfiable) {
112
+ validates = true;
113
+ }
114
+ }
115
+ if (validates) {
110
116
  this.reference = reference;
111
117
  validates = continuation(state, context);
112
118
  }
@@ -140,8 +146,7 @@ const _default = (0, _elements.define)(class SignatureAssertion extends _asserti
140
146
  if (!signatureAssertionUnifies) {
141
147
  return continuation(stepAndFactOrSubproofsUnify);
142
148
  }
143
- debugger;
144
- // stepAndFactOrSubproofsUnify = axiom.unifyStepAndFactOrSubproofs(step, factOrSubproofs, context);
149
+ axiom.unifyStepAndFactOrSubproofs(step, factOrSubproofs, context, continuation);
145
150
  });
146
151
  }, context);
147
152
  }
@@ -168,4 +173,4 @@ const _default = (0, _elements.define)(class SignatureAssertion extends _asserti
168
173
  }
169
174
  });
170
175
 
171
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2Fzc2VydGlvbi9zaWduYXR1cmUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGJyZWFrUG9pbnRVdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCBBc3NlcnRpb24gZnJvbSBcIi4uL2Fzc2VydGlvblwiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGFsbCwgZXZlcnkgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2NvbnRpbnVhdGlvblwiO1xuaW1wb3J0IHsgcmVjb25jaWxlLCBpbnN0YW50aWF0ZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvY29udGV4dFwiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGVTaWduYXR1cmVBc3NlcnRpb24gfSBmcm9tIFwiLi4vLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgdGVybXNGcm9tU2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSwgcmVmZXJlbmNlRnJvbVNpZ25hdHVyZUFzc2VydGlvbk5vZGUsIHNpZ25hdHVyZUFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9lbGVtZW50XCI7XG5cbmNvbnN0IHsgYnJlYWtQb2ludEZyb21KU09OIH0gPSBicmVha1BvaW50VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgU2lnbmF0dXJlQXNzZXJ0aW9uIGV4dGVuZHMgQXNzZXJ0aW9uIHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0ZXJtcywgcmVmZXJlbmNlKSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICAgIHRoaXMudGVybXMgPSB0ZXJtcztcbiAgICB0aGlzLnJlZmVyZW5jZSA9IHJlZmVyZW5jZTtcbiAgfVxuXG4gIGdldFRlcm1zKCkge1xuICAgIHJldHVybiB0aGlzLnRlcm1zO1xuICB9XG5cbiAgZ2V0UmVmZXJlbmNlKCkge1xuICAgIHJldHVybiB0aGlzLnJlZmVyZW5jZTtcbiAgfVxuXG4gIGdldFNpZ25hdHVyZUFzc2VydGlvbk5vZGUoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgIHNpZ25hdHVyZUFzc2VydGlvbk5vZGUgPSBub2RlOyAgLy8vXG5cbiAgICByZXR1cm4gc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZTtcbiAgfVxuXG4gIHZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBsZXQgdmFsaWRhdGVzO1xuXG4gICAgY29uc3Qgc2lnbmF0dXJlQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c2lnbmF0dXJlQXNzZXJ0aW9uU3RyaW5nfScgc2lnbmF0dXJlIGFzc2VydGlvbi4uLmApO1xuXG4gICAgbGV0IGFzc2VydGlvbjtcblxuICAgIGFzc2VydGlvbiA9IHRoaXMuZmluZEFzc2VydGlvbihjb250ZXh0KTtcblxuICAgIGlmIChhc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHNpZ25hdHVyZUFzc2VydGlvbiA9IGFzc2VydGlvbjsgLy8vXG5cbiAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHtzaWduYXR1cmVBc3NlcnRpb25TdHJpbmd9JyBzaWduYXR1cmUgYXNzZXJ0aW9uIGlzIGFscmVhZHkgcHJlc2VudC5gKTtcblxuICAgICAgdmFsaWRhdGVzID0gY29udGludWF0aW9uKHNpZ25hdHVyZUFzc2VydGlvbiwgY29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydGlvbiA9IHRoaXM7IC8vL1xuXG4gICAgICBjb25zdCB2YWxpZGF0ZVRlcm1zID0gdGhpcy52YWxpZGF0ZVRlcm1zLmJpbmQodGhpcyksXG4gICAgICAgICAgICB2YWxpZGF0ZVJlZmVyZW5jZSA9IHRoaXMudmFsaWRhdGVSZWZlcmVuY2UuYmluZCh0aGlzKTtcblxuICAgICAgdmFsaWRhdGVzID0gYWxsKFtcbiAgICAgICAgdmFsaWRhdGVUZXJtcyxcbiAgICAgICAgdmFsaWRhdGVSZWZlcmVuY2VcbiAgICAgIF0sIHN0YXRlLCBjb250ZXh0LCAoc3RhdGUsIGNvbnRleHQpID0+IHtcbiAgICAgICAgbGV0IHZhbGlkYXRlcztcblxuICAgICAgICBjb250ZXh0LmFkZEFzc2VydGlvbihhc3NlcnRpb24pO1xuXG4gICAgICAgIGNvbnN0IHNpZ25hdHVyZUFzc2VydGlvbiA9IGFzc2VydGlvbjsgLy8vXG5cbiAgICAgICAgdmFsaWRhdGVzID0gY29udGludWF0aW9uKHNpZ25hdHVyZUFzc2VydGlvbiwgY29udGV4dCk7XG5cbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlcztcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh2YWxpZGF0ZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c2lnbmF0dXJlQXNzZXJ0aW9uU3RyaW5nfScgc2lnbmF0dXJlIGFzc2VydGlvbi5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdGVzO1xuICB9XG5cbiAgdmFsaWRhdGVUZXJtKHRlcm0sIHRlcm1zLCBzdGF0ZSwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgbGV0IHRlcm1WYWxpZGF0ZXM7XG5cbiAgICBjb25zdCB0ZXJtU3RyaW5nID0gdGVybS5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzaWduYXR1cmVBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzaWduYXR1cmVBc3NlcnRpb25TdHJpbmd9JyBzaWduYXR1cmUgYXNzZXJ0aW9uJ3MgJyR7dGVybVN0cmluZ30nIHRlcm0uLi5gKTtcblxuICAgIHRlcm1WYWxpZGF0ZXMgPSB0ZXJtLnZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCAodGVybSwgY29udGV4dCkgPT4ge1xuICAgICAgbGV0IHZhbGlkYXRlcztcblxuICAgICAgdGVybXMucHVzaCh0ZXJtKTtcblxuICAgICAgdmFsaWRhdGVzID0gY29udGludWF0aW9uKHRlcm1zLCBzdGF0ZSwgY29udGV4dCk7XG5cbiAgICAgIHJldHVybiB2YWxpZGF0ZXM7XG4gICAgfSk7XG5cbiAgICBpZiAodGVybVZhbGlkYXRlcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzaWduYXR1cmVBc3NlcnRpb25TdHJpbmd9JyBzaWduYXR1cmUgYXNzZXJ0aW9uJ3MgJyR7dGVybVN0cmluZ30nIHRlcm0uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRlcm1WYWxpZGF0ZXM7XG4gIH1cblxuICB2YWxpZGF0ZVRlcm1zKHN0YXRlLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBsZXQgdGVybXNWYWxpZGF0ZTtcblxuICAgIGNvbnN0IHNpZ25hdHVyZUFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3NpZ25hdHVyZUFzc2VydGlvblN0cmluZ30nIHNpZ25hdHVyZSBhc3NlcnRpb24ncyB0ZXJtcy4uLmApO1xuXG4gICAgY29uc3QgdGVybXMgPSBbXSxcbiAgICAgICAgICB2YWxpZGF0ZVRlcm0gPSB0aGlzLnZhbGlkYXRlVGVybS5iaW5kKHRoaXMpO1xuXG4gICAgdGVybXNWYWxpZGF0ZSA9IGV2ZXJ5KHRoaXMudGVybXMsIHZhbGlkYXRlVGVybSwgdGVybXMsIHN0YXRlLCBjb250ZXh0LCAodGVybXMsIHN0YXRlLCBjb250ZXh0KSA9PiB7XG4gICAgICBsZXQgdGVybXNWYWxpZGF0ZTtcblxuICAgICAgdGVybXNWYWxpZGF0ZSA9IGNvbnRpbnVhdGlvbihzdGF0ZSwgY29udGV4dCk7XG5cbiAgICAgIGlmICh0ZXJtc1ZhbGlkYXRlKSB7XG4gICAgICAgIHRoaXMudGVybXMgPSB0ZXJtcztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRlcm1zVmFsaWRhdGU7XG4gICAgfSk7XG5cbiAgICBpZiAodGVybXNWYWxpZGF0ZSl7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3NpZ25hdHVyZUFzc2VydGlvblN0cmluZ30nIHNpZ25hdHVyZSBhc3NlcnRpb24ncyB0ZXJtcy5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGVybXNWYWxpZGF0ZVxuICB9XG5cbiAgdmFsaWRhdGVSZWZlcmVuY2Uoc3RhdGUsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGxldCByZWZlcmVuY2VWYWxpZGF0ZXM7XG5cbiAgICBjb25zdCBzaWduYXR1cmVBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzaWduYXR1cmVBc3NlcnRpb25TdHJpbmd9JyBzaWduYXR1cmUgYXNzZXJ0aW9uJ3MgcmVmZXJlbmNlLi4uYCk7XG5cbiAgICByZWZlcmVuY2VWYWxpZGF0ZXMgPSB0aGlzLnJlZmVyZW5jZS52YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgKHJlZmVyZW5jZSwgY29udGV4dCkgPT4ge1xuICAgICAgbGV0IHZhbGlkYXRlcyA9IGZhbHNlO1xuXG4gICAgICBjb25zdCBhc2lvbVByZXNlbnQgPSBjb250ZXh0LmlzQXhpb21QcmVzZW50QnlSZWZlcmVuY2UocmVmZXJlbmNlKTtcblxuICAgICAgaWYgKGFzaW9tUHJlc2VudCkge1xuICAgICAgICB0aGlzLnJlZmVyZW5jZSA9IHJlZmVyZW5jZTtcblxuICAgICAgICB2YWxpZGF0ZXMgPSBjb250aW51YXRpb24oc3RhdGUsIGNvbnRleHQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdmFsaWRhdGVzO1xuICAgIH0pO1xuXG4gICAgaWYgKHJlZmVyZW5jZVZhbGlkYXRlcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzaWduYXR1cmVBc3NlcnRpb25TdHJpbmd9JyBzaWduYXR1cmUgYXNzZXJ0aW9uJ3MgcmVmZXJlbmNlLmApO1xuICAgIH1cblxuICAgIHJldHVybiByZWZlcmVuY2VWYWxpZGF0ZXM7XG4gIH1cblxuICB1bmlmeUNsYWltKGNsYWltLCBjb250ZXh0KSB7XG4gICAgZGVidWdnZXJcblxuICAgIGxldCBjbGFpbVVuaWZpZXM7XG5cbiAgICBjb25zdCBjbGFpbVN0cmluZyA9IGNsYWltLmdldFN0cmluZygpLFxuICAgICAgICAgIHNpZ25hdHVyZUFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbSB3aXRoIHRoZSAnJHtzaWduYXR1cmVBc3NlcnRpb25TdHJpbmd9JyBzaWduYXR1cmUgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICByZWNvbmNpbGUoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IGF4aW9tID0gY29udGV4dC5maW5kQXhpb21CeVJlZmVyZW5jZSh0aGlzLnJlZmVyZW5jZSk7XG5cbiAgICAgIGF4aW9tLnVuaWZ5U2lnbmF0dXJlKHRoaXMuc2lnbmF0dXJlLCBjb250ZXh0KTtcblxuICAgICAgY2xhaW1VbmlmaWVzID0gYXhpb20udW5pZnlDbGFpbShjbGFpbSwgY29udGV4dCk7XG4gICAgfSwgY29udGV4dCk7XG5cbiAgICBpZiAoY2xhaW1VbmlmaWVzKSB7XG4gICAgICBjb250ZXh0LnRyYWNlKGAuLi51bmlmaWVkIHRoZSAnJHtjbGFpbVN0cmluZ30nIGNsYWltIHdpdGggdGhlICcke3NpZ25hdHVyZUFzc2VydGlvblN0cmluZ30nIHNpZ25hdHVyZSBhc3NlcnRpb24uLi5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2xhaW1VbmlmaWVzO1xuICB9XG5cbiAgdW5pZnlTdGVwQW5kRmFjdE9yU3VicHJvb2ZzKHN0ZXAsIGZhY3RPclN1YnByb29mcywgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgbGV0IHN0ZXBBbmRGYWN0T3JTdWJwcm9vZnNVbmlmeSA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIHJlY29uY2lsZSgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgYXhpb20gPSBjb250ZXh0LmZpbmRBeGlvbUJ5UmVmZXJlbmNlKHRoaXMucmVmZXJlbmNlKSxcbiAgICAgICAgICAgIHNpZ25hdHVyZUFzc2VydGlvbiA9IHRoaXM7ICAvLy9cblxuICAgICAgcmV0dXJuIGF4aW9tLnVuaWZ5U2lnbmF0dXJlQXNzZXJ0aW9uKHNpZ25hdHVyZUFzc2VydGlvbiwgY29udGV4dCwgKHNpZ25hdHVyZUFzc2VydGlvblVuaWZpZXMpID0+IHtcbiAgICAgICAgaWYgKCFzaWduYXR1cmVBc3NlcnRpb25VbmlmaWVzKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdGVwQW5kRmFjdE9yU3VicHJvb2ZzVW5pZnkpO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVidWdnZXJcblxuICAgICAgICAvLyBzdGVwQW5kRmFjdE9yU3VicHJvb2ZzVW5pZnkgPSBheGlvbS51bmlmeVN0ZXBBbmRGYWN0T3JTdWJwcm9vZnMoc3RlcCwgZmFjdE9yU3VicHJvb2ZzLCBjb250ZXh0KTtcbiAgICAgIH0pO1xuICAgIH0sIGNvbnRleHQpO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIlNpZ25hdHVyZUFzc2VydGlvblwiO1xuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gICAgbGV0IHNpZ25hdHVyZUFzc2VydGlvbiA9IG51bGw7XG5cbiAgICBjb25zdCB7IG5hbWUgfSA9IGpzb247XG5cbiAgICBpZiAodGhpcy5uYW1lID09PSBuYW1lKSB7XG4gICAgICBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCB7IHN0cmluZyB9ID0ganNvbixcbiAgICAgICAgICAgICAgZGVmaW5lZEFzc2VydGlvbk5vZGUgPSBpbnN0YW50aWF0ZVNpZ25hdHVyZUFzc2VydGlvbihzdHJpbmcsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBub2RlID0gZGVmaW5lZEFzc2VydGlvbk5vZGUsICAvLy9cbiAgICAgICAgICAgICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRGcm9tSlNPTihqc29uKSxcbiAgICAgICAgICAgICAgdGVybXMgPSB0ZXJtc0Zyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbVNpZ25hdHVyZUFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgIGNvbnRleHQgPSBudWxsO1xuXG4gICAgICAgIHNpZ25hdHVyZUFzc2VydGlvbiA9IG5ldyBTaWduYXR1cmVBc3NlcnRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0ZXJtcywgcmVmZXJlbmNlKTtcbiAgICAgIH0sIGNvbnRleHQpO1xuICAgIH1cblxuICAgIHJldHVybiBzaWduYXR1cmVBc3NlcnRpb247XG4gIH1cblxuICBzdGF0aWMgZnJvbVN0ZXAoc3RlcCwgY29udGV4dCkge1xuICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGVwLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgICBzaWduYXR1cmVBc3NlcnRpb24gPSBzaWduYXR1cmVBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBzaWduYXR1cmVBc3NlcnRpb247XG4gIH1cblxuICBzdGF0aWMgZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50LmdldE5vZGUoKSxcbiAgICAgICAgICBzaWduYXR1cmVBc3NlcnRpb24gPSBzaWduYXR1cmVBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBzaWduYXR1cmVBc3NlcnRpb247XG4gIH1cbn0pO1xuIl0sIm5hbWVzIjpbImJyZWFrUG9pbnRGcm9tSlNPTiIsImJyZWFrUG9pbnRVdGlsaXRpZXMiLCJkZWZpbmUiLCJTaWduYXR1cmVBc3NlcnRpb24iLCJBc3NlcnRpb24iLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJ0ZXJtcyIsInJlZmVyZW5jZSIsImdldFRlcm1zIiwiZ2V0UmVmZXJlbmNlIiwiZ2V0U2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSIsImdldE5vZGUiLCJzaWduYXR1cmVBc3NlcnRpb25Ob2RlIiwidmFsaWRhdGUiLCJzdGF0ZSIsImNvbnRpbnVhdGlvbiIsInZhbGlkYXRlcyIsInNpZ25hdHVyZUFzc2VydGlvblN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwiYXNzZXJ0aW9uIiwiZmluZEFzc2VydGlvbiIsInNpZ25hdHVyZUFzc2VydGlvbiIsImRlYnVnIiwidmFsaWRhdGVUZXJtcyIsImJpbmQiLCJ2YWxpZGF0ZVJlZmVyZW5jZSIsImFsbCIsImFkZEFzc2VydGlvbiIsInZhbGlkYXRlVGVybSIsInRlcm0iLCJ0ZXJtVmFsaWRhdGVzIiwidGVybVN0cmluZyIsInB1c2giLCJ0ZXJtc1ZhbGlkYXRlIiwiZXZlcnkiLCJyZWZlcmVuY2VWYWxpZGF0ZXMiLCJhc2lvbVByZXNlbnQiLCJpc0F4aW9tUHJlc2VudEJ5UmVmZXJlbmNlIiwidW5pZnlDbGFpbSIsImNsYWltIiwiY2xhaW1VbmlmaWVzIiwiY2xhaW1TdHJpbmciLCJyZWNvbmNpbGUiLCJheGlvbSIsImZpbmRBeGlvbUJ5UmVmZXJlbmNlIiwidW5pZnlTaWduYXR1cmUiLCJzaWduYXR1cmUiLCJ1bmlmeVN0ZXBBbmRGYWN0T3JTdWJwcm9vZnMiLCJzdGVwIiwiZmFjdE9yU3VicHJvb2ZzIiwic3RlcEFuZEZhY3RPclN1YnByb29mc1VuaWZ5IiwidW5pZnlTaWduYXR1cmVBc3NlcnRpb24iLCJzaWduYXR1cmVBc3NlcnRpb25VbmlmaWVzIiwibmFtZSIsImZyb21KU09OIiwianNvbiIsImluc3RhbnRpYXRlIiwiZGVmaW5lZEFzc2VydGlvbk5vZGUiLCJpbnN0YW50aWF0ZVNpZ25hdHVyZUFzc2VydGlvbiIsInRlcm1zRnJvbVNpZ25hdHVyZUFzc2VydGlvbk5vZGUiLCJyZWZlcmVuY2VGcm9tU2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSIsImZyb21TdGVwIiwic3RhdGVtZW50Tm9kZSIsImdldFN0YXRlbWVudE5vZGUiLCJzaWduYXR1cmVBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsImZyb21TdGF0ZW1lbnQiLCJzdGF0ZW1lbnQiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWNBOzs7ZUFBQTs7O2dDQVpvQztrRUFFZDswQkFFQzs4QkFDSTt5QkFDWTs2QkFDTzt5QkFDNEU7Ozs7OztBQUUxSCxNQUFNLEVBQUVBLGtCQUFrQixFQUFFLEdBQUdDLG1DQUFtQjtNQUVsRCxXQUFlQyxJQUFBQSxnQkFBTSxFQUFDLE1BQU1DLDJCQUEyQkMsa0JBQVM7SUFDOUQsWUFBWUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsVUFBVSxFQUFFQyxLQUFLLEVBQUVDLFNBQVMsQ0FBRTtRQUMvRCxLQUFLLENBQUNMLFNBQVNDLFFBQVFDLE1BQU1DO1FBRTdCLElBQUksQ0FBQ0MsS0FBSyxHQUFHQTtRQUNiLElBQUksQ0FBQ0MsU0FBUyxHQUFHQTtJQUNuQjtJQUVBQyxXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUNGLEtBQUs7SUFDbkI7SUFFQUcsZUFBZTtRQUNiLE9BQU8sSUFBSSxDQUFDRixTQUFTO0lBQ3ZCO0lBRUFHLDRCQUE0QjtRQUMxQixNQUFNTixPQUFPLElBQUksQ0FBQ08sT0FBTyxJQUNuQkMs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
176
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2Fzc2VydGlvbi9zaWduYXR1cmUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGJyZWFrUG9pbnRVdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCBBc3NlcnRpb24gZnJvbSBcIi4uL2Fzc2VydGlvblwiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGFsbCwgZXZlcnkgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2NvbnRpbnVhdGlvblwiO1xuaW1wb3J0IHsgcmVjb25jaWxlLCBpbnN0YW50aWF0ZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvY29udGV4dFwiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGVTaWduYXR1cmVBc3NlcnRpb24gfSBmcm9tIFwiLi4vLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgdGVybXNGcm9tU2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSwgcmVmZXJlbmNlRnJvbVNpZ25hdHVyZUFzc2VydGlvbk5vZGUsIHNpZ25hdHVyZUFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9lbGVtZW50XCI7XG5cbmNvbnN0IHsgYnJlYWtQb2ludEZyb21KU09OIH0gPSBicmVha1BvaW50VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgU2lnbmF0dXJlQXNzZXJ0aW9uIGV4dGVuZHMgQXNzZXJ0aW9uIHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0ZXJtcywgcmVmZXJlbmNlKSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICAgIHRoaXMudGVybXMgPSB0ZXJtcztcbiAgICB0aGlzLnJlZmVyZW5jZSA9IHJlZmVyZW5jZTtcbiAgfVxuXG4gIGdldFRlcm1zKCkge1xuICAgIHJldHVybiB0aGlzLnRlcm1zO1xuICB9XG5cbiAgZ2V0UmVmZXJlbmNlKCkge1xuICAgIHJldHVybiB0aGlzLnJlZmVyZW5jZTtcbiAgfVxuXG4gIGdldFNpZ25hdHVyZUFzc2VydGlvbk5vZGUoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgIHNpZ25hdHVyZUFzc2VydGlvbk5vZGUgPSBub2RlOyAgLy8vXG5cbiAgICByZXR1cm4gc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZTtcbiAgfVxuXG4gIHZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBsZXQgdmFsaWRhdGVzO1xuXG4gICAgY29uc3Qgc2lnbmF0dXJlQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c2lnbmF0dXJlQXNzZXJ0aW9uU3RyaW5nfScgc2lnbmF0dXJlIGFzc2VydGlvbi4uLmApO1xuXG4gICAgbGV0IGFzc2VydGlvbjtcblxuICAgIGFzc2VydGlvbiA9IHRoaXMuZmluZEFzc2VydGlvbihjb250ZXh0KTtcblxuICAgIGlmIChhc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHNpZ25hdHVyZUFzc2VydGlvbiA9IGFzc2VydGlvbjsgLy8vXG5cbiAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHtzaWduYXR1cmVBc3NlcnRpb25TdHJpbmd9JyBzaWduYXR1cmUgYXNzZXJ0aW9uIGlzIGFscmVhZHkgcHJlc2VudC5gKTtcblxuICAgICAgdmFsaWRhdGVzID0gY29udGludWF0aW9uKHNpZ25hdHVyZUFzc2VydGlvbiwgY29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydGlvbiA9IHRoaXM7IC8vL1xuXG4gICAgICBjb25zdCB2YWxpZGF0ZVRlcm1zID0gdGhpcy52YWxpZGF0ZVRlcm1zLmJpbmQodGhpcyksXG4gICAgICAgICAgICB2YWxpZGF0ZVJlZmVyZW5jZSA9IHRoaXMudmFsaWRhdGVSZWZlcmVuY2UuYmluZCh0aGlzKTtcblxuICAgICAgdmFsaWRhdGVzID0gYWxsKFtcbiAgICAgICAgdmFsaWRhdGVUZXJtcyxcbiAgICAgICAgdmFsaWRhdGVSZWZlcmVuY2VcbiAgICAgIF0sIHN0YXRlLCBjb250ZXh0LCAoc3RhdGUsIGNvbnRleHQpID0+IHtcbiAgICAgICAgbGV0IHZhbGlkYXRlcztcblxuICAgICAgICBjb250ZXh0LmFkZEFzc2VydGlvbihhc3NlcnRpb24pO1xuXG4gICAgICAgIGNvbnN0IHNpZ25hdHVyZUFzc2VydGlvbiA9IGFzc2VydGlvbjsgLy8vXG5cbiAgICAgICAgdmFsaWRhdGVzID0gY29udGludWF0aW9uKHNpZ25hdHVyZUFzc2VydGlvbiwgY29udGV4dCk7XG5cbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlcztcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh2YWxpZGF0ZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c2lnbmF0dXJlQXNzZXJ0aW9uU3RyaW5nfScgc2lnbmF0dXJlIGFzc2VydGlvbi5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdGVzO1xuICB9XG5cbiAgdmFsaWRhdGVUZXJtKHRlcm0sIHRlcm1zLCBzdGF0ZSwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgbGV0IHRlcm1WYWxpZGF0ZXM7XG5cbiAgICBjb25zdCB0ZXJtU3RyaW5nID0gdGVybS5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzaWduYXR1cmVBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzaWduYXR1cmVBc3NlcnRpb25TdHJpbmd9JyBzaWduYXR1cmUgYXNzZXJ0aW9uJ3MgJyR7dGVybVN0cmluZ30nIHRlcm0uLi5gKTtcblxuICAgIHRlcm1WYWxpZGF0ZXMgPSB0ZXJtLnZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCAodGVybSwgY29udGV4dCkgPT4ge1xuICAgICAgbGV0IHZhbGlkYXRlcztcblxuICAgICAgdGVybXMucHVzaCh0ZXJtKTtcblxuICAgICAgdmFsaWRhdGVzID0gY29udGludWF0aW9uKHRlcm1zLCBzdGF0ZSwgY29udGV4dCk7XG5cbiAgICAgIHJldHVybiB2YWxpZGF0ZXM7XG4gICAgfSk7XG5cbiAgICBpZiAodGVybVZhbGlkYXRlcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzaWduYXR1cmVBc3NlcnRpb25TdHJpbmd9JyBzaWduYXR1cmUgYXNzZXJ0aW9uJ3MgJyR7dGVybVN0cmluZ30nIHRlcm0uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRlcm1WYWxpZGF0ZXM7XG4gIH1cblxuICB2YWxpZGF0ZVRlcm1zKHN0YXRlLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBsZXQgdGVybXNWYWxpZGF0ZTtcblxuICAgIGNvbnN0IHNpZ25hdHVyZUFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3NpZ25hdHVyZUFzc2VydGlvblN0cmluZ30nIHNpZ25hdHVyZSBhc3NlcnRpb24ncyB0ZXJtcy4uLmApO1xuXG4gICAgY29uc3QgdGVybXMgPSBbXSxcbiAgICAgICAgICB2YWxpZGF0ZVRlcm0gPSB0aGlzLnZhbGlkYXRlVGVybS5iaW5kKHRoaXMpO1xuXG4gICAgdGVybXNWYWxpZGF0ZSA9IGV2ZXJ5KHRoaXMudGVybXMsIHZhbGlkYXRlVGVybSwgdGVybXMsIHN0YXRlLCBjb250ZXh0LCAodGVybXMsIHN0YXRlLCBjb250ZXh0KSA9PiB7XG4gICAgICBsZXQgdGVybXNWYWxpZGF0ZTtcblxuICAgICAgdGVybXNWYWxpZGF0ZSA9IGNvbnRpbnVhdGlvbihzdGF0ZSwgY29udGV4dCk7XG5cbiAgICAgIGlmICh0ZXJtc1ZhbGlkYXRlKSB7XG4gICAgICAgIHRoaXMudGVybXMgPSB0ZXJtcztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRlcm1zVmFsaWRhdGU7XG4gICAgfSk7XG5cbiAgICBpZiAodGVybXNWYWxpZGF0ZSl7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3NpZ25hdHVyZUFzc2VydGlvblN0cmluZ30nIHNpZ25hdHVyZSBhc3NlcnRpb24ncyB0ZXJtcy5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGVybXNWYWxpZGF0ZVxuICB9XG5cbiAgdmFsaWRhdGVSZWZlcmVuY2Uoc3RhdGUsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGxldCByZWZlcmVuY2VWYWxpZGF0ZXM7XG5cbiAgICBjb25zdCBzaWduYXR1cmVBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzaWduYXR1cmVBc3NlcnRpb25TdHJpbmd9JyBzaWduYXR1cmUgYXNzZXJ0aW9uJ3MgcmVmZXJlbmNlLi4uYCk7XG5cbiAgICByZWZlcmVuY2VWYWxpZGF0ZXMgPSB0aGlzLnJlZmVyZW5jZS52YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgKHJlZmVyZW5jZSwgY29udGV4dCkgPT4ge1xuICAgICAgbGV0IHZhbGlkYXRlcyA9IGZhbHNlO1xuXG4gICAgICBjb25zdCBheGlvbSA9IGNvbnRleHQuZmluZEF4aW9tQnlSZWZlcmVuY2UocmVmZXJlbmNlKTtcblxuICAgICAgaWYgKGF4aW9tICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IGF4aW9tU2F0aXNmaWFibGUgPSBheGlvbS5pc1NhdGlzZmlhYmxlKCk7XG5cbiAgICAgICAgaWYgKGF4aW9tU2F0aXNmaWFibGUpIHtcbiAgICAgICAgICB2YWxpZGF0ZXMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh2YWxpZGF0ZXMpIHtcbiAgICAgICAgdGhpcy5yZWZlcmVuY2UgPSByZWZlcmVuY2U7XG5cbiAgICAgICAgdmFsaWRhdGVzID0gY29udGludWF0aW9uKHN0YXRlLCBjb250ZXh0KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZhbGlkYXRlcztcbiAgICB9KTtcblxuICAgIGlmIChyZWZlcmVuY2VWYWxpZGF0ZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c2lnbmF0dXJlQXNzZXJ0aW9uU3RyaW5nfScgc2lnbmF0dXJlIGFzc2VydGlvbidzIHJlZmVyZW5jZS5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVmZXJlbmNlVmFsaWRhdGVzO1xuICB9XG5cbiAgdW5pZnlDbGFpbShjbGFpbSwgY29udGV4dCkge1xuICAgIGRlYnVnZ2VyXG5cbiAgICBsZXQgY2xhaW1VbmlmaWVzO1xuXG4gICAgY29uc3QgY2xhaW1TdHJpbmcgPSBjbGFpbS5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzaWduYXR1cmVBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke2NsYWltU3RyaW5nfScgY2xhaW0gd2l0aCB0aGUgJyR7c2lnbmF0dXJlQXNzZXJ0aW9uU3RyaW5nfScgc2lnbmF0dXJlIGFzc2VydGlvbi4uLmApO1xuXG4gICAgcmVjb25jaWxlKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCBheGlvbSA9IGNvbnRleHQuZmluZEF4aW9tQnlSZWZlcmVuY2UodGhpcy5yZWZlcmVuY2UpO1xuXG4gICAgICBheGlvbS51bmlmeVNpZ25hdHVyZSh0aGlzLnNpZ25hdHVyZSwgY29udGV4dCk7XG5cbiAgICAgIGNsYWltVW5pZmllcyA9IGF4aW9tLnVuaWZ5Q2xhaW0oY2xhaW0sIGNvbnRleHQpO1xuICAgIH0sIGNvbnRleHQpO1xuXG4gICAgaWYgKGNsYWltVW5pZmllcykge1xuICAgICAgY29udGV4dC50cmFjZShgLi4udW5pZmllZCB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbSB3aXRoIHRoZSAnJHtzaWduYXR1cmVBc3NlcnRpb25TdHJpbmd9JyBzaWduYXR1cmUgYXNzZXJ0aW9uLi4uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsYWltVW5pZmllcztcbiAgfVxuXG4gIHVuaWZ5U3RlcEFuZEZhY3RPclN1YnByb29mcyhzdGVwLCBmYWN0T3JTdWJwcm9vZnMsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGxldCBzdGVwQW5kRmFjdE9yU3VicHJvb2ZzVW5pZnkgPSBmYWxzZTtcblxuICAgIHJldHVybiByZWNvbmNpbGUoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IGF4aW9tID0gY29udGV4dC5maW5kQXhpb21CeVJlZmVyZW5jZSh0aGlzLnJlZmVyZW5jZSksXG4gICAgICAgICAgICBzaWduYXR1cmVBc3NlcnRpb24gPSB0aGlzOyAgLy8vXG5cbiAgICAgIHJldHVybiBheGlvbS51bmlmeVNpZ25hdHVyZUFzc2VydGlvbihzaWduYXR1cmVBc3NlcnRpb24sIGNvbnRleHQsIChzaWduYXR1cmVBc3NlcnRpb25VbmlmaWVzKSA9PiB7XG4gICAgICAgIGlmICghc2lnbmF0dXJlQXNzZXJ0aW9uVW5pZmllcykge1xuICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oc3RlcEFuZEZhY3RPclN1YnByb29mc1VuaWZ5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGF4aW9tLnVuaWZ5U3RlcEFuZEZhY3RPclN1YnByb29mcyhzdGVwLCBmYWN0T3JTdWJwcm9vZnMsIGNvbnRleHQsIGNvbnRpbnVhdGlvbik7XG4gICAgICB9KTtcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJTaWduYXR1cmVBc3NlcnRpb25cIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIGxldCBzaWduYXR1cmVBc3NlcnRpb24gPSBudWxsO1xuXG4gICAgY29uc3QgeyBuYW1lIH0gPSBqc29uO1xuXG4gICAgaWYgKHRoaXMubmFtZSA9PT0gbmFtZSkge1xuICAgICAgaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgICAgIGRlZmluZWRBc3NlcnRpb25Ob2RlID0gaW5zdGFudGlhdGVTaWduYXR1cmVBc3NlcnRpb24oc3RyaW5nLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgbm9kZSA9IGRlZmluZWRBc3NlcnRpb25Ob2RlLCAgLy8vXG4gICAgICAgICAgICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50RnJvbUpTT04oanNvbiksXG4gICAgICAgICAgICAgIHRlcm1zID0gdGVybXNGcm9tU2lnbmF0dXJlQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcblxuICAgICAgICBjb250ZXh0ID0gbnVsbDtcblxuICAgICAgICBzaWduYXR1cmVBc3NlcnRpb24gPSBuZXcgU2lnbmF0dXJlQXNzZXJ0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybXMsIHJlZmVyZW5jZSk7XG4gICAgICB9LCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2lnbmF0dXJlQXNzZXJ0aW9uO1xuICB9XG5cbiAgc3RhdGljIGZyb21TdGVwKHN0ZXAsIGNvbnRleHQpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RlcC5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgICAgc2lnbmF0dXJlQXNzZXJ0aW9uID0gc2lnbmF0dXJlQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gc2lnbmF0dXJlQXNzZXJ0aW9uO1xuICB9XG5cbiAgc3RhdGljIGZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KSB7XG4gICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudC5nZXROb2RlKCksXG4gICAgICAgICAgc2lnbmF0dXJlQXNzZXJ0aW9uID0gc2lnbmF0dXJlQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gc2lnbmF0dXJlQXNzZXJ0aW9uO1xuICB9XG59KTtcbiJdLCJuYW1lcyI6WyJicmVha1BvaW50RnJvbUpTT04iLCJicmVha1BvaW50VXRpbGl0aWVzIiwiZGVmaW5lIiwiU2lnbmF0dXJlQXNzZXJ0aW9uIiwiQXNzZXJ0aW9uIiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50IiwidGVybXMiLCJyZWZlcmVuY2UiLCJnZXRUZXJtcyIsImdldFJlZmVyZW5jZSIsImdldFNpZ25hdHVyZUFzc2VydGlvbk5vZGUiLCJnZXROb2RlIiwic2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSIsInZhbGlkYXRlIiwic3RhdGUiLCJjb250aW51YXRpb24iLCJ2YWxpZGF0ZXMiLCJzaWduYXR1cmVBc3NlcnRpb25TdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsImFzc2VydGlvbiIsImZpbmRBc3NlcnRpb24iLCJzaWduYXR1cmVBc3NlcnRpb24iLCJkZWJ1ZyIsInZhbGlkYXRlVGVybXMiLCJiaW5kIiwidmFsaWRhdGVSZWZlcmVuY2UiLCJhbGwiLCJhZGRBc3NlcnRpb24iLCJ2YWxpZGF0ZVRlcm0iLCJ0ZXJtIiwidGVybVZhbGlkYXRlcyIsInRlcm1TdHJpbmciLCJwdXNoIiwidGVybXNWYWxpZGF0ZSIsImV2ZXJ5IiwicmVmZXJlbmNlVmFsaWRhdGVzIiwiYXhpb20iLCJmaW5kQXhpb21CeVJlZmVyZW5jZSIsImF4aW9tU2F0aXNmaWFibGUiLCJpc1NhdGlzZmlhYmxlIiwidW5pZnlDbGFpbSIsImNsYWltIiwiY2xhaW1VbmlmaWVzIiwiY2xhaW1TdHJpbmciLCJyZWNvbmNpbGUiLCJ1bmlmeVNpZ25hdHVyZSIsInNpZ25hdHVyZSIsInVuaWZ5U3RlcEFuZEZhY3RPclN1YnByb29mcyIsInN0ZXAiLCJmYWN0T3JTdWJwcm9vZnMiLCJzdGVwQW5kRmFjdE9yU3VicHJvb2ZzVW5pZnkiLCJ1bmlmeVNpZ25hdHVyZUFzc2VydGlvbiIsInNpZ25hdHVyZUFzc2VydGlvblVuaWZpZXMiLCJuYW1lIiwiZnJvbUpTT04iLCJqc29uIiwiaW5zdGFudGlhdGUiLCJkZWZpbmVkQXNzZXJ0aW9uTm9kZSIsImluc3RhbnRpYXRlU2lnbmF0dXJlQXNzZXJ0aW9uIiwidGVybXNGcm9tU2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSIsInJlZmVyZW5jZUZyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlIiwiZnJvbVN0ZXAiLCJzdGF0ZW1lbnROb2RlIiwiZ2V0U3RhdGVtZW50Tm9kZSIsInNpZ25hdHVyZUFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwiZnJvbVN0YXRlbWVudCIsInN0YXRlbWVudCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBY0E7OztlQUFBOzs7Z0NBWm9DO2tFQUVkOzBCQUVDOzhCQUNJO3lCQUNZOzZCQUNPO3lCQUM0RTs7Ozs7O0FBRTFILE1BQU0sRUFBRUEsa0JBQWtCLEVBQUUsR0FBR0MsbUNBQW1CO01BRWxELFdBQWVDLElBQUFBLGdCQUFNLEVBQUMsTUFBTUMsMkJBQTJCQyxrQkFBUztJQUM5RCxZQUFZQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxVQUFVLEVBQUVDLEtBQUssRUFBRUMsU0FBUyxDQUFFO1FBQy9ELEtBQUssQ0FBQ0wsU0FBU0MsUUFBUUMsTUFBTUM7UUFFN0IsSUFBSSxDQUFDQyxLQUFLLEdBQUdBO1FBQ2IsSUFBSSxDQUFDQyxTQUFTLEdBQUdBO0lBQ25CO0lBRUFDLFdBQVc7UUFDVCxPQUFPLElBQUksQ0FB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
@@ -23,8 +23,6 @@ const _default = (0, _elements.define)(class BracketedConstructor extends _const
23
23
  }
24
24
  unifyTerm(term, state, context, continuation) {
25
25
  let termUnifiesWithBracketedConstructor;
26
- const termString = term.getString();
27
- context.trace(`Unifying the '${termString}' term with the bracketed constructor...`);
28
26
  termUnifiesWithBracketedConstructor = super.unifyTerm(term, context, (term, context)=>{
29
27
  let termUnifies = false;
30
28
  const termNode = term.getNode(), singularTermNode = termNode.getSingularTermNode();
@@ -43,12 +41,9 @@ const _default = (0, _elements.define)(class BracketedConstructor extends _const
43
41
  }
44
42
  return termUnifies;
45
43
  });
46
- if (termUnifiesWithBracketedConstructor) {
47
- context.debug(`...unified the '${termString}' term with the bracketed constructor.`);
48
- }
49
44
  return termUnifiesWithBracketedConstructor;
50
45
  }
51
46
  static name = "BracketedConstructor";
52
47
  });
53
48
 
54
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2NvbnN0cnVjdG9yL2JyYWNrZXRlZC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IENvbnN0cnVjdG9yIGZyb20gXCIuLi9jb25zdHJ1Y3RvclwiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IHRlcm1Gcm9tVGVybU5vZGUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2VsZW1lbnRcIjtcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIEJyYWNrZXRlZENvbnN0cnVjdG9yIGV4dGVuZHMgQ29uc3RydWN0b3Ige1xuICBnZXRCcmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgIGJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZSA9IG5vZGU7ICAvLy9cblxuICAgIHJldHVybiBicmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGU7XG4gIH1cblxuICB1bmlmeVRlcm0odGVybSwgc3RhdGUsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGxldCB0ZXJtVW5pZmllc1dpdGhCcmFja2V0ZWRDb25zdHJ1Y3RvcjtcblxuICAgIGNvbnN0IHRlcm1TdHJpbmcgPSB0ZXJtLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIHdpdGggdGhlIGJyYWNrZXRlZCBjb25zdHJ1Y3Rvci4uLmApO1xuXG4gICAgdGVybVVuaWZpZXNXaXRoQnJhY2tldGVkQ29uc3RydWN0b3IgPSBzdXBlci51bmlmeVRlcm0odGVybSwgY29udGV4dCwgKHRlcm0sIGNvbnRleHQpID0+IHtcbiAgICAgIGxldCB0ZXJtVW5pZmllcyA9IGZhbHNlO1xuXG4gICAgICBjb25zdCB0ZXJtTm9kZSA9IHRlcm0uZ2V0Tm9kZSgpLFxuICAgICAgICAgICAgc2luZ3VsYXJUZXJtTm9kZSA9IHRlcm1Ob2RlLmdldFNpbmd1bGFyVGVybU5vZGUoKTtcblxuICAgICAgaWYgKHNpbmd1bGFyVGVybU5vZGUgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgYnJhY2tldGxlc3NUZXJtTm9kZSA9IHNpbmd1bGFyVGVybU5vZGUsIC8vL1xuICAgICAgICAgICAgICBicmFja2V0bGVzc1Rlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKGJyYWNrZXRsZXNzVGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBicmFja2V0bGVzc1Rlcm1WYWxpZGF0ZXMgPSBicmFja2V0bGVzc1Rlcm0udmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIChicmFja2V0bGVzc1Rlcm0sIGNvbnRleHQpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgdmFsaWRhdGVzO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgdHlwZSA9IGJyYWNrZXRsZXNzVGVybS5nZXRUeXBlKCksXG4gICAgICAgICAgICAgICAgICAgICAgcHJvdmlzaW9uYWwgPSBicmFja2V0bGVzc1Rlcm0uaXNQcm92aXNpb25hbCgpO1xuXG4gICAgICAgICAgICAgICAgdGVybS5zZXRUeXBlKHR5cGUpO1xuXG4gICAgICAgICAgICAgICAgdGVybS5zZXRQcm92aXNpb25hbChwcm92aXNpb25hbCk7XG5cbiAgICAgICAgICAgICAgICB2YWxpZGF0ZXMgPSBjb250aW51YXRpb24odGVybSwgY29udGV4dCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsaWRhdGVzO1xuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICBpZiAoYnJhY2tldGxlc3NUZXJtVmFsaWRhdGVzKSB7XG4gICAgICAgICAgdGVybVVuaWZpZXMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0ZXJtVW5pZmllcztcbiAgICB9KTtcblxuICAgIGlmICh0ZXJtVW5pZmllc1dpdGhCcmFja2V0ZWRDb25zdHJ1Y3Rvcikge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gd2l0aCB0aGUgYnJhY2tldGVkIGNvbnN0cnVjdG9yLmApO1xuICAgIH1cblxuICAgIHJldHVybiB0ZXJtVW5pZmllc1dpdGhCcmFja2V0ZWRDb25zdHJ1Y3RvcjtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJCcmFja2V0ZWRDb25zdHJ1Y3RvclwiO1xufSk7XG4iXSwibmFtZXMiOlsiZGVmaW5lIiwiQnJhY2tldGVkQ29uc3RydWN0b3IiLCJDb25zdHJ1Y3RvciIsImdldEJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZSIsIm5vZGUiLCJnZXROb2RlIiwiYnJhY2tldGVkQ29uc3RydWN0b3JOb2RlIiwidW5pZnlUZXJtIiwidGVybSIsInN0YXRlIiwiY29udGV4dCIsImNvbnRpbnVhdGlvbiIsInRlcm1VbmlmaWVzV2l0aEJyYWNrZXRlZENvbnN0cnVjdG9yIiwidGVybVN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwidGVybVVuaWZpZXMiLCJ0ZXJtTm9kZSIsInNpbmd1bGFyVGVybU5vZGUiLCJnZXRTaW5ndWxhclRlcm1Ob2RlIiwiYnJhY2tldGxlc3NUZXJtTm9kZSIsImJyYWNrZXRsZXNzVGVybSIsInRlcm1Gcm9tVGVybU5vZGUiLCJicmFja2V0bGVzc1Rlcm1WYWxpZGF0ZXMiLCJ2YWxpZGF0ZSIsInZhbGlkYXRlcyIsInR5cGUiLCJnZXRUeXBlIiwicHJvdmlzaW9uYWwiLCJpc1Byb3Zpc2lvbmFsIiwic2V0VHlwZSIsInNldFByb3Zpc2lvbmFsIiwiZGVidWciLCJuYW1lIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFPQTs7O2VBQUE7OztvRUFMd0I7MEJBRUQ7eUJBQ1U7Ozs7OztNQUVqQyxXQUFlQSxJQUFBQSxnQkFBTSxFQUFDLE1BQU1DLDZCQUE2QkMsb0JBQVc7SUFDbEVDLDhCQUE4QjtRQUM1QixNQUFNQyxPQUFPLElBQUksQ0FBQ0MsT0FBTyxJQUNuQkMsMkJBQTJCRixNQUFPLEdBQUc7UUFFM0MsT0FBT0U7SUFDVDtJQUVBQyxVQUFVQyxJQUFJLEVBQUVDLEtBQUssRUFBRUMsT0FBTyxFQUFFQyxZQUFZLEVBQUU7UUFDNUMsSUFBSUM7UUFFSixNQUFNQyxhQUFhTCxLQUFLTSxTQUFTO1FBRWpDSixRQUFRSyxLQUFLLENBQUMsQ0FBQyxjQUFjLEVBQUVGLFdBQVcsd0NBQXdDLENBQUM7UUFFbkZELHNDQUFzQyxLQUFLLENBQUNMLFVBQVVDLE1BQU1FLFNBQVMsQ0FBQ0YsTUFBTUU7WUFDMUUsSUFBSU0sY0FBYztZQUVsQixNQUFNQyxXQUFXVCxLQUFLSCxPQUFPLElBQ3ZCYSxtQkFBbUJELFNBQVNFLG1CQUFtQjtZQUVyRCxJQUFJRCxxQkFBcUIsTUFBTTtnQkFDN0IsTUFBTUUsc0JBQXNCRixrQkFDdEJHLGtCQUFrQkMsSUFBQUEseUJBQWdCLEVBQUNGLHFCQUFxQlYsVUFDeERhLDJCQUEyQkYsZ0JBQWdCRyxRQUFRLENBQUNmLE9BQU9DLFNBQVMsQ0FBQ1csaUJBQWlCWDtvQkFDcEYsSUFBSWU7b0JBRUosTUFBTUMsT0FBT0wsZ0JBQWdCTSxPQUFPLElBQzlCQyxjQUFjUCxnQkFBZ0JRLGFBQWE7b0JBRWpEckIsS0FBS3NCLE9BQU8sQ0FBQ0o7b0JBRWJsQixLQUFLdUIsY0FBYyxDQUFDSDtvQkFFcEJILFlBQVlkLGFBQWFILE1BQU1FO29CQUUvQixPQUFPZTtnQkFDVDtnQkFFTixJQUFJRiwwQkFBMEI7b0JBQzVCUCxjQUFjO2dCQUNoQjtZQUNGO1lBRUEsT0FBT0E7UUFDVDtRQUVBLElBQUlKLHFDQUFxQztZQUN2Q0YsUUFBUXNCLEtBQUssQ0FBQyxDQUFDLGdCQUFnQixFQUFFbkIsV0FBVyxzQ0FBc0MsQ0FBQztRQUNyRjtRQUVBLE9BQU9EO0lBQ1Q7SUFFQSxPQUFPcUIsT0FBTyx1QkFBdUI7QUFDdkMifQ==
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2NvbnN0cnVjdG9yL2JyYWNrZXRlZC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IENvbnN0cnVjdG9yIGZyb20gXCIuLi9jb25zdHJ1Y3RvclwiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IHRlcm1Gcm9tVGVybU5vZGUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2VsZW1lbnRcIjtcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIEJyYWNrZXRlZENvbnN0cnVjdG9yIGV4dGVuZHMgQ29uc3RydWN0b3Ige1xuICBnZXRCcmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgIGJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZSA9IG5vZGU7ICAvLy9cblxuICAgIHJldHVybiBicmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGU7XG4gIH1cblxuICB1bmlmeVRlcm0odGVybSwgc3RhdGUsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGxldCB0ZXJtVW5pZmllc1dpdGhCcmFja2V0ZWRDb25zdHJ1Y3RvcjtcblxuICAgIHRlcm1VbmlmaWVzV2l0aEJyYWNrZXRlZENvbnN0cnVjdG9yID0gc3VwZXIudW5pZnlUZXJtKHRlcm0sIGNvbnRleHQsICh0ZXJtLCBjb250ZXh0KSA9PiB7XG4gICAgICBsZXQgdGVybVVuaWZpZXMgPSBmYWxzZTtcblxuICAgICAgY29uc3QgdGVybU5vZGUgPSB0ZXJtLmdldE5vZGUoKSxcbiAgICAgICAgICAgIHNpbmd1bGFyVGVybU5vZGUgPSB0ZXJtTm9kZS5nZXRTaW5ndWxhclRlcm1Ob2RlKCk7XG5cbiAgICAgIGlmIChzaW5ndWxhclRlcm1Ob2RlICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IGJyYWNrZXRsZXNzVGVybU5vZGUgPSBzaW5ndWxhclRlcm1Ob2RlLCAvLy9cbiAgICAgICAgICAgICAgYnJhY2tldGxlc3NUZXJtID0gdGVybUZyb21UZXJtTm9kZShicmFja2V0bGVzc1Rlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgYnJhY2tldGxlc3NUZXJtVmFsaWRhdGVzID0gYnJhY2tldGxlc3NUZXJtLnZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCAoYnJhY2tldGxlc3NUZXJtLCBjb250ZXh0KSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IHZhbGlkYXRlcztcblxuICAgICAgICAgICAgICAgIGNvbnN0IHR5cGUgPSBicmFja2V0bGVzc1Rlcm0uZ2V0VHlwZSgpLFxuICAgICAgICAgICAgICAgICAgICAgIHByb3Zpc2lvbmFsID0gYnJhY2tldGxlc3NUZXJtLmlzUHJvdmlzaW9uYWwoKTtcblxuICAgICAgICAgICAgICAgIHRlcm0uc2V0VHlwZSh0eXBlKTtcblxuICAgICAgICAgICAgICAgIHRlcm0uc2V0UHJvdmlzaW9uYWwocHJvdmlzaW9uYWwpO1xuXG4gICAgICAgICAgICAgICAgdmFsaWRhdGVzID0gY29udGludWF0aW9uKHRlcm0sIGNvbnRleHQpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRlcztcbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGJyYWNrZXRsZXNzVGVybVZhbGlkYXRlcykge1xuICAgICAgICAgIHRlcm1VbmlmaWVzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGVybVVuaWZpZXM7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGVybVVuaWZpZXNXaXRoQnJhY2tldGVkQ29uc3RydWN0b3I7XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiQnJhY2tldGVkQ29uc3RydWN0b3JcIjtcbn0pO1xuIl0sIm5hbWVzIjpbImRlZmluZSIsIkJyYWNrZXRlZENvbnN0cnVjdG9yIiwiQ29uc3RydWN0b3IiLCJnZXRCcmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUiLCJub2RlIiwiZ2V0Tm9kZSIsImJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZSIsInVuaWZ5VGVybSIsInRlcm0iLCJzdGF0ZSIsImNvbnRleHQiLCJjb250aW51YXRpb24iLCJ0ZXJtVW5pZmllc1dpdGhCcmFja2V0ZWRDb25zdHJ1Y3RvciIsInRlcm1VbmlmaWVzIiwidGVybU5vZGUiLCJzaW5ndWxhclRlcm1Ob2RlIiwiZ2V0U2luZ3VsYXJUZXJtTm9kZSIsImJyYWNrZXRsZXNzVGVybU5vZGUiLCJicmFja2V0bGVzc1Rlcm0iLCJ0ZXJtRnJvbVRlcm1Ob2RlIiwiYnJhY2tldGxlc3NUZXJtVmFsaWRhdGVzIiwidmFsaWRhdGUiLCJ2YWxpZGF0ZXMiLCJ0eXBlIiwiZ2V0VHlwZSIsInByb3Zpc2lvbmFsIiwiaXNQcm92aXNpb25hbCIsInNldFR5cGUiLCJzZXRQcm92aXNpb25hbCIsIm5hbWUiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQU9BOzs7ZUFBQTs7O29FQUx3QjswQkFFRDt5QkFDVTs7Ozs7O01BRWpDLFdBQWVBLElBQUFBLGdCQUFNLEVBQUMsTUFBTUMsNkJBQTZCQyxvQkFBVztJQUNsRUMsOEJBQThCO1FBQzVCLE1BQU1DLE9BQU8sSUFBSSxDQUFDQyxPQUFPLElBQ25CQywyQkFBMkJGLE1BQU8sR0FBRztRQUUzQyxPQUFPRTtJQUNUO0lBRUFDLFVBQVVDLElBQUksRUFBRUMsS0FBSyxFQUFFQyxPQUFPLEVBQUVDLFlBQVksRUFBRTtRQUM1QyxJQUFJQztRQUVKQSxzQ0FBc0MsS0FBSyxDQUFDTCxVQUFVQyxNQUFNRSxTQUFTLENBQUNGLE1BQU1FO1lBQzFFLElBQUlHLGNBQWM7WUFFbEIsTUFBTUMsV0FBV04sS0FBS0gsT0FBTyxJQUN2QlUsbUJBQW1CRCxTQUFTRSxtQkFBbUI7WUFFckQsSUFBSUQscUJBQXFCLE1BQU07Z0JBQzdCLE1BQU1FLHNCQUFzQkYsa0JBQ3RCRyxrQkFBa0JDLElBQUFBLHlCQUFnQixFQUFDRixxQkFBcUJQLFVBQ3hEVSwyQkFBMkJGLGdCQUFnQkcsUUFBUSxDQUFDWixPQUFPQyxTQUFTLENBQUNRLGlCQUFpQlI7b0JBQ3BGLElBQUlZO29CQUVKLE1BQU1DLE9BQU9MLGdCQUFnQk0sT0FBTyxJQUM5QkMsY0FBY1AsZ0JBQWdCUSxhQUFhO29CQUVqRGxCLEtBQUttQixPQUFPLENBQUNKO29CQUViZixLQUFLb0IsY0FBYyxDQUFDSDtvQkFFcEJILFlBQVlYLGFBQWFILE1BQU1FO29CQUUvQixPQUFPWTtnQkFDVDtnQkFFTixJQUFJRiwwQkFBMEI7b0JBQzVCUCxjQUFjO2dCQUNoQjtZQUNGO1lBRUEsT0FBT0E7UUFDVDtRQUVBLE9BQU9EO0lBQ1Q7SUFFQSxPQUFPaUIsT0FBTyx1QkFBdUI7QUFDdkMifQ==
@@ -61,16 +61,6 @@ const _default = (0, _elements.define)(class Equality extends _occamlanguages.El
61
61
  const equalityNode = equality.getNode(), equalityNodeMatches = this.matchEqualityNode(equalityNode), equalTo = equalityNodeMatches; ///
62
62
  return equalTo;
63
63
  }
64
- isReflexive() {
65
- let reflexive = false;
66
- if (!this.negated) {
67
- const leftTermEqualToRightTerm = this.leftTerm.isEqualTo(this.rightTerm);
68
- if (leftTermEqualToRightTerm) {
69
- reflexive = true;
70
- }
71
- }
72
- return reflexive;
73
- }
74
64
  findEquality(context) {
75
65
  const equalityNode = this.getEqualityNode(), equality = context.findEqualityByEqualityNode(equalityNode);
76
66
  return equality;
@@ -171,10 +161,11 @@ const _default = (0, _elements.define)(class Equality extends _occamlanguages.El
171
161
  if (transient) {
172
162
  return;
173
163
  }
174
- const equality = this, negated = this.isNegated(), reflexive = this.isReflexive();
175
- if (negated || reflexive) {
164
+ const negated = this.isNegated();
165
+ if (negated) {
176
166
  return;
177
167
  }
168
+ const equality = this; ///
178
169
  const equalityAssignment = (0, _assign.equalityAssignmentFromEquality)(equality, context);
179
170
  context.addAssignment(equalityAssignment);
180
171
  const derived = (0, _state.isDerived)(state);
@@ -225,4 +216,4 @@ function rightTermFromEqualityNode(equalityNode, context) {
225
216
  return rightTerm;
226
217
  }
227
218
 
228
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2VxdWFsaXR5LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFbGVtZW50LCBicmVha1BvaW50VXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGVxdWF0ZVRlcm1zIH0gZnJvbSBcIi4uL3Byb2Nlc3MvZXF1YXRlXCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGV4dFwiO1xuaW1wb3J0IHsgYWxsLCBleGlzdHMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRpbnVhdGlvblwiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGVFcXVhbGl0eSB9IGZyb20gXCIuLi9wcm9jZXNzL2luc3RhbnRpYXRlXCI7XG5pbXBvcnQgeyBlcXVhbGl0eUZyb21TdGF0ZW1lbnROb2RlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9lbGVtZW50XCI7XG5pbXBvcnQgeyBpc0Rlcml2ZWQsIGlzRGVjbGFyZWQsIGlzVHJhbnNpZW50IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9zdGF0ZVwiO1xuaW1wb3J0IHsgZXF1YWxpdHlBc3NpZ25tZW50RnJvbUVxdWFsaXR5LCBsZWZ0VmFyaWFibGVBc3NpZ25tZW50RnJvbUVxdWFsaXR5LCByaWdodFZhcmlhYmxlQXNzaWdubWVudEZyb21FcXVhbGl0eSB9IGZyb20gXCIuLi9wcm9jZXNzL2Fzc2lnblwiO1xuXG5jb25zdCB7IGJyZWFrUG9pbnRGcm9tSlNPTiwgYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04gfSA9IGJyZWFrUG9pbnRVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBFcXVhbGl0eSBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5lZ2F0ZWQsIGxlZnRUZXJtLCByaWdodFRlcm0pIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy5uZWdhdGVkID0gbmVnYXRlZDtcbiAgICB0aGlzLmxlZnRUZXJtID0gbGVmdFRlcm07XG4gICAgdGhpcy5yaWdodFRlcm0gPSByaWdodFRlcm07XG4gIH1cblxuICBpc05lZ2F0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMubmVnYXRlZDtcbiAgfVxuXG4gIGdldExlZnRUZXJtKCkge1xuICAgIHJldHVybiB0aGlzLmxlZnRUZXJtO1xuICB9XG5cbiAgZ2V0UmlnaHRUZXJtKCkge1xuICAgIHJldHVybiB0aGlzLnJpZ2h0VGVybTtcbiAgfVxuXG4gIGdldEVxdWFsaXR5Tm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgZXF1YWxpdHlOZGUgPSBub2RlOyAvLy9cblxuICAgIHJldHVybiBlcXVhbGl0eU5kZTtcbiAgfVxuXG4gIGdldExlZnRUZXJtTm9kZSgpIHtcbiAgICBjb25zdCBsZWZ0VGVybU5vZGUgPSB0aGlzLmxlZnRUZXJtLmdldE5vZGUoKTtcblxuICAgIHJldHVybiBsZWZ0VGVybU5vZGU7XG4gIH1cblxuICBnZXRSaWdodFRlcm1Ob2RlKCkge1xuICAgIGNvbnN0IHJpZ2h0VGVybU5vZGUgPSB0aGlzLnJpZ2h0VGVybS5nZXROb2RlKCk7XG5cbiAgICByZXR1cm4gcmlnaHRUZXJtTm9kZTtcbiAgfVxuXG4gIGdldFRlcm1zKCkge1xuICAgIGNvbnN0IHRlcm1zID0gW1xuICAgICAgdGhpcy5sZWZ0VGVybSxcbiAgICAgIHRoaXMucmlnaHRUZXJtXG4gICAgXTtcblxuICAgIHJldHVybiB0ZXJtcztcbiAgfVxuXG4gIG1hdGNoRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSkge1xuICAgIGNvbnN0IG5vZGUgPSBlcXVhbGl0eU5vZGUsIC8vL1xuICAgICAgICAgIG5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaE5vZGUobm9kZSksXG4gICAgICAgICAgZXF1YWxpdHlOb2RlTWF0Y2hlcyA9IG5vZGVNYXRjaGVzOyAvLy9cblxuICAgIHJldHVybiBlcXVhbGl0eU5vZGVNYXRjaGVzO1xuICB9XG5cbiAgaXNFcXVhbFRvKGVxdWFsaXR5KSB7XG4gICAgY29uc3QgZXF1YWxpdHlOb2RlID0gZXF1YWxpdHkuZ2V0Tm9kZSgpLFxuICAgICAgICAgIGVxdWFsaXR5Tm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSksXG4gICAgICAgICAgZXF1YWxUbyA9IGVxdWFsaXR5Tm9kZU1hdGNoZXM7ICAvLy9cblxuICAgIHJldHVybiBlcXVhbFRvO1xuICB9XG5cbiAgaXNSZWZsZXhpdmUoKSB7XG4gICAgbGV0IHJlZmxleGl2ZSA9IGZhbHNlO1xuXG4gICAgaWYgKCF0aGlzLm5lZ2F0ZWQpIHtcbiAgICAgIGNvbnN0IGxlZnRUZXJtRXF1YWxUb1JpZ2h0VGVybSA9IHRoaXMubGVmdFRlcm0uaXNFcXVhbFRvKHRoaXMucmlnaHRUZXJtKTtcblxuICAgICAgaWYgKGxlZnRUZXJtRXF1YWxUb1JpZ2h0VGVybSkge1xuICAgICAgICByZWZsZXhpdmUgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZWZsZXhpdmU7XG4gIH1cblxuICBmaW5kRXF1YWxpdHkoY29udGV4dCkge1xuICAgIGNvbnN0IGVxdWFsaXR5Tm9kZSA9IHRoaXMuZ2V0RXF1YWxpdHlOb2RlKCksXG4gICAgICAgICAgZXF1YWxpdHkgPSBjb250ZXh0LmZpbmRFcXVhbGl0eUJ5RXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSk7XG5cbiAgICByZXR1cm4gZXF1YWxpdHk7XG4gIH1cblxuICB2YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgbGV0IHZhbGlkYXRlcztcblxuICAgIGNvbnN0IGVxdWFsaXR5U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7ZXF1YWxpdHlTdHJpbmd9JyBlcXVhbGl0eS4uLmApO1xuXG4gICAgbGV0IGVxdWFsaXR5O1xuXG4gICAgZXF1YWxpdHkgPSB0aGlzLmZpbmRFcXVhbGl0eShjb250ZXh0KTtcblxuICAgIGlmIChlcXVhbGl0eSAhPT0gbnVsbCkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgVGhlICcke2VxdWFsaXR5U3RyaW5nfScgZXF1YWxpdHkgaXMgYWxyZWFkeSBwcmVzZW50LmApO1xuXG4gICAgICB2YWxpZGF0ZXMgPSBjb250aW51YXRpb24oZXF1YWxpdHksIGNvbnRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlcXVhbGl0eSA9IHRoaXM7ICAvLy9cblxuICAgICAgY29uc3QgdmFsaWRhdGVUZXJtcyA9IHRoaXMudmFsaWRhdGVUZXJtcy5iaW5kKHRoaXMpO1xuXG4gICAgICB2YWxpZGF0ZXMgPSBhbGwoW1xuICAgICAgICB2YWxpZGF0ZVRlcm1zXG4gICAgICBdLCBzdGF0ZSwgY29udGV4dCwgKHN0YXRlLCBjb250ZXh0KSA9PiB7XG4gICAgICAgIGxldCB2YWxpZGF0ZXM7XG5cbiAgICAgICAgY29uc3QgdmFsaWRhdGVXaGVuRGVjbGFyZWQgPSB0aGlzLnZhbGlkYXRlV2hlbkRlY2xhcmVkLmJpbmQodGhpcyksXG4gICAgICAgICAgICAgIHZhbGlkYXRlV2hlbkRlcml2ZWQgPSB0aGlzLnZhbGlkYXRlV2hlbkRlcml2ZWQuYmluZCh0aGlzKTtcblxuICAgICAgICB2YWxpZGF0ZXMgPSBleGlzdHMoW1xuICAgICAgICAgIHZhbGlkYXRlV2hlbkRlY2xhcmVkLFxuICAgICAgICAgIHZhbGlkYXRlV2hlbkRlcml2ZWRcbiAgICAgICAgXSwgc3RhdGUsIGNvbnRleHQsIChzdGF0ZSwgY29udGV4dCkgPT4ge1xuICAgICAgICAgIGxldCB2YWxpZGF0ZXM7XG5cbiAgICAgICAgICBjb250ZXh0LmFkZEVxdWFsaXR5KGVxdWFsaXR5KTtcblxuICAgICAgICAgIHZhbGlkYXRlcyA9IGNvbnRpbnVhdGlvbihlcXVhbGl0eSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gdmFsaWRhdGVzO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdmFsaWRhdGVzO1xuICAgICAgfSk7XG5cbiAgICAgIGlmICh2YWxpZGF0ZXMpIHtcbiAgICAgICAgdGhpcy5hc3NpZ24oc3RhdGUsIGNvbnRleHQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2YWxpZGF0ZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7ZXF1YWxpdHlTdHJpbmd9JyBlcXVhbGl0eS5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdGVzO1xuICB9XG5cbiAgdmFsaWRhdGVUZXJtcyhzdGF0ZSwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgbGV0IHRlcm1zVmFsaWRhdGUgPSBmYWxzZTtcblxuICAgIGNvbnN0IGVxdWFsaXR5U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtlcXVhbGl0eVN0cmluZ30nIGVxdWFsaXR5J3MgdGVybXMuLi5gKTtcblxuICAgIGNvbnN0IGxlZnRUZXJtVmFsaWRhdGVzID0gdGhpcy5sZWZ0VGVybS52YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgKGxlZnRUZXJtLCBjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCByaWdodFRlcm1WYWxpZHRlcyA9IHRoaXMucmlnaHRUZXJtLnZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCAocmlnaHRUZXJtLCBjb250ZXh0KSA9PiB7XG4gICAgICAgIGxldCB2YWxpZGF0ZXMgPSBmYWxzZTtcblxuICAgICAgICBjb25zdCBsZWZ0VGVybVR5cGUgPSBsZWZ0VGVybS5nZXRUeXBlKCksXG4gICAgICAgICAgICAgIHJpZ2h0VGVybVR5cGUgPSByaWdodFRlcm0uZ2V0VHlwZSgpLFxuICAgICAgICAgICAgICBsZWZ0VGVybVR5cGVCYXNlVHlwZSA9IGxlZnRUZXJtVHlwZS5pc0Jhc2VUeXBlKCksXG4gICAgICAgICAgICAgIHJpZ2h0VGVybVR5cGVCYXNlVHlwZSA9IHJpZ2h0VGVybVR5cGUuaXNCYXNlVHlwZSgpLFxuICAgICAgICAgICAgICBsZWZ0VGVybVR5cGVKb2luZWRUb1JpZ2h0VGVybVR5cGUgPSBsZWZ0VGVybVR5cGUuaXNKb2luZWRUbyhyaWdodFRlcm1UeXBlKTtcblxuICAgICAgICBpZiAobGVmdFRlcm1UeXBlQmFzZVR5cGUgfHwgcmlnaHRUZXJtVHlwZUJhc2VUeXBlIHx8IGxlZnRUZXJtVHlwZUpvaW5lZFRvUmlnaHRUZXJtVHlwZSkge1xuICAgICAgICAgIHRoaXMubGVmdFRlcm0gPSBsZWZ0VGVybTtcblxuICAgICAgICAgIHRoaXMucmlnaHRUZXJtID0gcmlnaHRUZXJtO1xuXG4gICAgICAgICAgdmFsaWRhdGVzID0gY29udGludWF0aW9uKHN0YXRlLCBjb250ZXh0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2YWxpZGF0ZXM7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHJpZ2h0VGVybVZhbGlkdGVzO1xuICAgIH0pO1xuXG4gICAgaWYgKGxlZnRUZXJtVmFsaWRhdGVzKSB7XG4gICAgICB0ZXJtc1ZhbGlkYXRlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodGVybXNWYWxpZGF0ZSkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtlcXVhbGl0eVN0cmluZ30nIGVxdWFsaXR5J3MgdGVybXMuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRlcm1zVmFsaWRhdGU7XG4gIH1cblxuICB2YWxpZGF0ZVdoZW5EZWNsYXJlZChzdGF0ZSwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgbGV0IHZhbGlkYXRlc1doZW5EZWNsYXJlZCA9IGZhbHNlO1xuXG4gICAgY29uc3QgZGVjbGFyZWQgPSBpc0RlY2xhcmVkKHN0YXRlKTtcblxuICAgIGlmIChkZWNsYXJlZCkge1xuICAgICAgY29uc3QgZXF1YWxpdHlTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7ZXF1YWxpdHlTdHJpbmd9JyBkZWNsYXJlZCBlcXVhbGl0eS4uLmApO1xuXG4gICAgICB2YWxpZGF0ZXNXaGVuRGVjbGFyZWQgPSBjb250aW51YXRpb24oc3RhdGUsIGNvbnRleHQpO1xuXG4gICAgICBpZiAodmFsaWRhdGVzV2hlbkRlY2xhcmVkKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7ZXF1YWxpdHlTdHJpbmd9JyBkZWNsYXJlZCBlcXVhbGl0eS5gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdGVzV2hlbkRlY2xhcmVkO1xuICB9XG5cbiAgdmFsaWRhdGVXaGVuRGVyaXZlZChzdGF0ZSwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgbGV0IHZhbGlkYXRlc1doZW5EZXJpdmVkID0gZmFsc2U7XG5cbiAgICBjb25zdCBkZXJpdmVkID0gaXNEZXJpdmVkKHN0YXRlKTtcblxuICAgIGlmIChkZXJpdmVkKSB7XG4gICAgICBjb25zdCBlcXVhbGl0eVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtlcXVhbGl0eVN0cmluZ30nIGRlcml2ZWQgZXF1YWxpdHkuLi5gKTtcblxuICAgICAgY29uc3QgdGVybXNFcXVhdGUgPSBlcXVhdGVUZXJtcyh0aGlzLmxlZnRUZXJtLCB0aGlzLnJpZ2h0VGVybSwgY29udGV4dCk7XG5cbiAgICAgIGlmICgodGhpcy5uZWdhdGVkICYmICF0ZXJtc0VxdWF0ZSkgfHwgKCF0aGlzLm5lZ2F0ZWQgJiYgdGVybXNFcXVhdGUpKSB7XG4gICAgICAgIHZhbGlkYXRlc1doZW5EZXJpdmVkID0gY29udGludWF0aW9uKHN0YXRlLCBjb250ZXh0KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHZhbGlkYXRlc1doZW5EZXJpdmVkKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7ZXF1YWxpdHlTdHJpbmd9JyBkZXJpdmVkIGVxdWFsaXR5LmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0ZXNXaGVuRGVyaXZlZDtcbiAgfVxuXG4gIGFzc2lnbihzdGF0ZSwgY29udGV4dCkge1xuICAgIGNvbnN0IHRyYW5zaWVudCA9IGlzVHJhbnNpZW50KHN0YXRlKTtcblxuICAgIGlmICh0cmFuc2llbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBlcXVhbGl0eSA9IHRoaXMsICAvLy9cbiAgICAgICAgICBuZWdhdGVkID0gdGhpcy5pc05lZ2F0ZWQoKSxcbiAgICAgICAgICByZWZsZXhpdmUgPSB0aGlzLmlzUmVmbGV4aXZlKCk7XG5cbiAgICBpZiAobmVnYXRlZCB8fCByZWZsZXhpdmUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBlcXVhbGl0eUFzc2lnbm1lbnQgPSBlcXVhbGl0eUFzc2lnbm1lbnRGcm9tRXF1YWxpdHkoZXF1YWxpdHksIGNvbnRleHQpO1xuXG4gICAgY29udGV4dC5hZGRBc3NpZ25tZW50KGVxdWFsaXR5QXNzaWdubWVudCk7XG5cbiAgICBjb25zdCBkZXJpdmVkID0gaXNEZXJpdmVkKHN0YXRlKTtcblxuICAgIGlmIChkZXJpdmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbGVmdFZhcmlhYmxlQXNzaWdubWVudCA9IGxlZnRWYXJpYWJsZUFzc2lnbm1lbnRGcm9tRXF1YWxpdHkoZXF1YWxpdHksIGNvbnRleHQpLFxuICAgICAgICAgIHJpZ2h0VmFyaWFibGVBc3NpZ25tZW50ID0gcmlnaHRWYXJpYWJsZUFzc2lnbm1lbnRGcm9tRXF1YWxpdHkoZXF1YWxpdHksIGNvbnRleHQpO1xuXG4gICAgY29udGV4dC5hZGRBc3NpZ25tZW50KGxlZnRWYXJpYWJsZUFzc2lnbm1lbnQpO1xuXG4gICAgY29udGV4dC5hZGRBc3NpZ25tZW50KHJpZ2h0VmFyaWFibGVBc3NpZ25tZW50KTtcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICBjb25zdCBzdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgbGV0IGJyZWFrUG9pbnQ7XG5cbiAgICBicmVha1BvaW50ID0gdGhpcy5nZXRCcmVha1BvaW50KCk7XG5cbiAgICBjb25zdCBicmVha1BvaW50SlNPTiA9IGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OKGJyZWFrUG9pbnQpO1xuXG4gICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRKU09OOyAgLy8vXG5cbiAgICBjb25zdCBqc29uID0ge1xuICAgICAgc3RyaW5nLFxuICAgICAgYnJlYWtQb2ludFxuICAgIH07XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJFcXVhbGl0eVwiO1xuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gICAgbGV0IGVxdWFsaXR5O1xuXG4gICAgaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHsgc3RyaW5nIH0gPSBqc29uLFxuICAgICAgICAgICAgZXF1YWxpdHlOb2RlID0gaW5zdGFudGlhdGVFcXVhbGl0eShzdHJpbmcsIGNvbnRleHQpLFxuICAgICAgICAgICAgbm9kZSA9IGVxdWFsaXR5Tm9kZSwgIC8vL1xuICAgICAgICAgICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRGcm9tSlNPTihqc29uKSxcbiAgICAgICAgICAgIG5lZ2F0ZWQgPSBuZWdhdGVkRnJvbUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgbGVmdFRlcm0gPSBsZWZ0VGVybUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgIHJpZ2h0VGVybSA9IHJpZ2h0VGVybUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KTtcblxuICAgICAgY29udGV4dCA9IG51bGw7XG5cbiAgICAgIGVxdWFsaXR5ID0gbmV3IEVxdWFsaXR5KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbmVnYXRlZCwgbGVmdFRlcm0sIHJpZ2h0VGVybSk7XG4gICAgfSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gZXF1YWxpdHk7XG4gIH1cblxuICBzdGF0aWMgZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50LmdldE5vZGUoKSxcbiAgICAgICAgICBlcXVhbGl0eSA9IGVxdWFsaXR5RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gZXF1YWxpdHk7XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiBuZWdhdGVkRnJvbUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmVnYXRlZCA9IGVxdWFsaXR5Tm9kZS5pc05lZ2F0ZWQoKTtcblxuICByZXR1cm4gbmVnYXRlZDtcbn1cblxuZnVuY3Rpb24gbGVmdFRlcm1Gcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBsZWZ0VGVybU5vZGUgPSBlcXVhbGl0eU5vZGUuZ2V0TGVmdFRlcm1Ob2RlKCksXG4gICAgICAgIGxlZnRUZXJtID0gY29udGV4dC5maW5kVGVybUJ5VGVybU5vZGUobGVmdFRlcm1Ob2RlKTtcblxuICByZXR1cm4gbGVmdFRlcm07XG59XG5cbmZ1bmN0aW9uIHJpZ2h0VGVybUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJpZ2h0VGVybU5vZGUgPSBlcXVhbGl0eU5vZGUuZ2V0TGVmdFRlcm1Ob2RlKCksXG4gICAgICAgIHJpZ2h0VGVybSA9IGNvbnRleHQuZmluZFRlcm1CeVRlcm1Ob2RlKHJpZ2h0VGVybU5vZGUpO1xuXG4gIHJldHVybiByaWdodFRlcm07XG59XG4iXSwibmFtZXMiOlsiYnJlYWtQb2ludEZyb21KU09OIiwiYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04iLCJicmVha1BvaW50VXRpbGl0aWVzIiwiZGVmaW5lIiwiRXF1YWxpdHkiLCJFbGVtZW50IiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50IiwibmVnYXRlZCIsImxlZnRUZXJtIiwicmlnaHRUZXJtIiwiaXNOZWdhdGVkIiwiZ2V0TGVmdFRlcm0iLCJnZXRSaWdodFRlcm0iLCJnZXRFcXVhbGl0eU5vZGUiLCJnZXROb2RlIiwiZXF1YWxpdHlOZGUiLCJnZXRMZWZ0VGVybU5vZGUiLCJsZWZ0VGVybU5vZGUiLCJnZXRSaWdodFRlcm1Ob2RlIiwicmlnaHRUZXJtTm9kZSIsImdldFRlcm1zIiwidGVybXMiLCJtYXRjaEVxdWFsaXR5Tm9kZSIsImVxdWFsaXR5Tm9kZSIsIm5vZGVNYXRjaGVzIiwibWF0Y2hOb2RlIiwiZXF1YWxpdHlOb2RlTWF0Y2hlcyIsImlzRXF1YWxUbyIsImVxdWFsaXR5IiwiZXF1YWxUbyIsImlzUmVmbGV4aXZlIiwicmVmbGV4aXZlIiwibGVmdFRlcm1FcXVhbFRvUmlnaHRUZXJtIiwiZmluZEVxdWFsaXR5IiwiZmluZEVxdWFsaXR5QnlFcXVhbGl0eU5vZGUiLCJ2YWxpZGF0ZSIsInN0YXRlIiwiY29udGludWF0aW9uIiwidmFsaWRhdGVzIiwiZXF1YWxpdHlTdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsImRlYnVnIiwidmFsaWRhdGVUZXJtcyIsImJpbmQiLCJhbGwiLCJ2YWxpZGF0ZVdoZW5EZWNsYXJlZCIsInZhbGlkYXRlV2hlbkRlcml2ZWQiLCJleGlzdHMiLCJhZGRFcXVhbGl0eSIsImFzc2lnbiIsInRlcm1zVmFsaWRhdGUiLCJsZWZ0VGVybVZhbGlkYXRlcyIsInJpZ2h0VGVybVZhbGlkdGVzIiwibGVmdFRlcm1UeXBlIiwiZ2V0VHlwZSIsInJpZ2h0VGVybVR5cGUiLCJsZWZ0VGVybVR5cGVCYXNlVHlwZSIsImlzQmFzZVR5cGUiLCJyaWdodFRlcm1UeXBlQmFzZVR5cGUiLCJsZWZ0VGVybVR5cGVKb2luZWRUb1JpZ2h0VGVybVR5cGUiLCJpc0pvaW5lZFRvIiwidmFsaWRhdGVzV2hlbkRlY2xhcmVkIiwiZGVjbGFyZWQiLCJpc0RlY2xhcmVkIiwidmFsaWRhdGVzV2hlbkRlcml2ZWQiLCJkZXJpdmVkIiwiaXNEZXJpdmVkIiwidGVybXNFcXVhdGUiLCJlcXVhdGVUZXJtcyIsInRyYW5zaWVudCIsImlzVHJhbnNpZW50IiwiZXF1YWxpdHlBc3NpZ25tZW50IiwiZXF1YWxpdHlBc3NpZ25tZW50RnJvbUVxdWFsaXR5IiwiYWRkQXNzaWdubWVudCIsImxlZnRWYXJpYWJsZUFzc2lnbm1lbnQiLCJsZWZ0VmFyaWFibGVBc3NpZ25tZW50RnJvbUVxdWFsaXR5IiwicmlnaHRWYXJpYWJsZUFzc2lnbm1lbnQiLCJyaWdodFZhcmlhYmxlQXNzaWdubWVudEZyb21FcXVhbGl0eSIsInRvSlNPTiIsImdldEJyZWFrUG9pbnQiLCJicmVha1BvaW50SlNPTiIsImpzb24iLCJuYW1lIiwiZnJvbUpTT04iLCJpbnN0YW50aWF0ZSIsImluc3RhbnRpYXRlRXF1YWxpdHkiLCJuZWdhdGVkRnJvbUVxdWFsaXR5Tm9kZSIsImxlZnRUZXJtRnJvbUVxdWFsaXR5Tm9kZSIsInJpZ2h0VGVybUZyb21FcXVhbGl0eU5vZGUiLCJmcm9tU3RhdGVtZW50Iiwic3RhdGVtZW50Iiwic3RhdGVtZW50Tm9kZSIsImVxdWFsaXR5RnJvbVN0YXRlbWVudE5vZGUiLCJmaW5kVGVybUJ5VGVybU5vZGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWVBOzs7ZUFBQTs7O2dDQWI2QzswQkFFdEI7d0JBQ0s7eUJBQ0E7OEJBQ0E7NkJBQ1E7eUJBQ007dUJBQ1M7d0JBQ3FF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
219
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2VxdWFsaXR5LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFbGVtZW50LCBicmVha1BvaW50VXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGVxdWF0ZVRlcm1zIH0gZnJvbSBcIi4uL3Byb2Nlc3MvZXF1YXRlXCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGV4dFwiO1xuaW1wb3J0IHsgYWxsLCBleGlzdHMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRpbnVhdGlvblwiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGVFcXVhbGl0eSB9IGZyb20gXCIuLi9wcm9jZXNzL2luc3RhbnRpYXRlXCI7XG5pbXBvcnQgeyBlcXVhbGl0eUZyb21TdGF0ZW1lbnROb2RlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9lbGVtZW50XCI7XG5pbXBvcnQgeyBpc0Rlcml2ZWQsIGlzRGVjbGFyZWQsIGlzVHJhbnNpZW50IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9zdGF0ZVwiO1xuaW1wb3J0IHsgZXF1YWxpdHlBc3NpZ25tZW50RnJvbUVxdWFsaXR5LCBsZWZ0VmFyaWFibGVBc3NpZ25tZW50RnJvbUVxdWFsaXR5LCByaWdodFZhcmlhYmxlQXNzaWdubWVudEZyb21FcXVhbGl0eSB9IGZyb20gXCIuLi9wcm9jZXNzL2Fzc2lnblwiO1xuXG5jb25zdCB7IGJyZWFrUG9pbnRGcm9tSlNPTiwgYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04gfSA9IGJyZWFrUG9pbnRVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBFcXVhbGl0eSBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5lZ2F0ZWQsIGxlZnRUZXJtLCByaWdodFRlcm0pIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy5uZWdhdGVkID0gbmVnYXRlZDtcbiAgICB0aGlzLmxlZnRUZXJtID0gbGVmdFRlcm07XG4gICAgdGhpcy5yaWdodFRlcm0gPSByaWdodFRlcm07XG4gIH1cblxuICBpc05lZ2F0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMubmVnYXRlZDtcbiAgfVxuXG4gIGdldExlZnRUZXJtKCkge1xuICAgIHJldHVybiB0aGlzLmxlZnRUZXJtO1xuICB9XG5cbiAgZ2V0UmlnaHRUZXJtKCkge1xuICAgIHJldHVybiB0aGlzLnJpZ2h0VGVybTtcbiAgfVxuXG4gIGdldEVxdWFsaXR5Tm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgZXF1YWxpdHlOZGUgPSBub2RlOyAvLy9cblxuICAgIHJldHVybiBlcXVhbGl0eU5kZTtcbiAgfVxuXG4gIGdldExlZnRUZXJtTm9kZSgpIHtcbiAgICBjb25zdCBsZWZ0VGVybU5vZGUgPSB0aGlzLmxlZnRUZXJtLmdldE5vZGUoKTtcblxuICAgIHJldHVybiBsZWZ0VGVybU5vZGU7XG4gIH1cblxuICBnZXRSaWdodFRlcm1Ob2RlKCkge1xuICAgIGNvbnN0IHJpZ2h0VGVybU5vZGUgPSB0aGlzLnJpZ2h0VGVybS5nZXROb2RlKCk7XG5cbiAgICByZXR1cm4gcmlnaHRUZXJtTm9kZTtcbiAgfVxuXG4gIGdldFRlcm1zKCkge1xuICAgIGNvbnN0IHRlcm1zID0gW1xuICAgICAgdGhpcy5sZWZ0VGVybSxcbiAgICAgIHRoaXMucmlnaHRUZXJtXG4gICAgXTtcblxuICAgIHJldHVybiB0ZXJtcztcbiAgfVxuXG4gIG1hdGNoRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSkge1xuICAgIGNvbnN0IG5vZGUgPSBlcXVhbGl0eU5vZGUsIC8vL1xuICAgICAgICAgIG5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaE5vZGUobm9kZSksXG4gICAgICAgICAgZXF1YWxpdHlOb2RlTWF0Y2hlcyA9IG5vZGVNYXRjaGVzOyAvLy9cblxuICAgIHJldHVybiBlcXVhbGl0eU5vZGVNYXRjaGVzO1xuICB9XG5cbiAgaXNFcXVhbFRvKGVxdWFsaXR5KSB7XG4gICAgY29uc3QgZXF1YWxpdHlOb2RlID0gZXF1YWxpdHkuZ2V0Tm9kZSgpLFxuICAgICAgICAgIGVxdWFsaXR5Tm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSksXG4gICAgICAgICAgZXF1YWxUbyA9IGVxdWFsaXR5Tm9kZU1hdGNoZXM7ICAvLy9cblxuICAgIHJldHVybiBlcXVhbFRvO1xuICB9XG5cbiAgZmluZEVxdWFsaXR5KGNvbnRleHQpIHtcbiAgICBjb25zdCBlcXVhbGl0eU5vZGUgPSB0aGlzLmdldEVxdWFsaXR5Tm9kZSgpLFxuICAgICAgICAgIGVxdWFsaXR5ID0gY29udGV4dC5maW5kRXF1YWxpdHlCeUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUpO1xuXG4gICAgcmV0dXJuIGVxdWFsaXR5O1xuICB9XG5cbiAgdmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGxldCB2YWxpZGF0ZXM7XG5cbiAgICBjb25zdCBlcXVhbGl0eVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2VxdWFsaXR5U3RyaW5nfScgZXF1YWxpdHkuLi5gKTtcblxuICAgIGxldCBlcXVhbGl0eTtcblxuICAgIGVxdWFsaXR5ID0gdGhpcy5maW5kRXF1YWxpdHkoY29udGV4dCk7XG5cbiAgICBpZiAoZXF1YWxpdHkgIT09IG51bGwpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHtlcXVhbGl0eVN0cmluZ30nIGVxdWFsaXR5IGlzIGFscmVhZHkgcHJlc2VudC5gKTtcblxuICAgICAgdmFsaWRhdGVzID0gY29udGludWF0aW9uKGVxdWFsaXR5LCBjb250ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXF1YWxpdHkgPSB0aGlzOyAgLy8vXG5cbiAgICAgIGNvbnN0IHZhbGlkYXRlVGVybXMgPSB0aGlzLnZhbGlkYXRlVGVybXMuYmluZCh0aGlzKTtcblxuICAgICAgdmFsaWRhdGVzID0gYWxsKFtcbiAgICAgICAgdmFsaWRhdGVUZXJtc1xuICAgICAgXSwgc3RhdGUsIGNvbnRleHQsIChzdGF0ZSwgY29udGV4dCkgPT4ge1xuICAgICAgICBsZXQgdmFsaWRhdGVzO1xuXG4gICAgICAgIGNvbnN0IHZhbGlkYXRlV2hlbkRlY2xhcmVkID0gdGhpcy52YWxpZGF0ZVdoZW5EZWNsYXJlZC5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgICB2YWxpZGF0ZVdoZW5EZXJpdmVkID0gdGhpcy52YWxpZGF0ZVdoZW5EZXJpdmVkLmJpbmQodGhpcyk7XG5cbiAgICAgICAgdmFsaWRhdGVzID0gZXhpc3RzKFtcbiAgICAgICAgICB2YWxpZGF0ZVdoZW5EZWNsYXJlZCxcbiAgICAgICAgICB2YWxpZGF0ZVdoZW5EZXJpdmVkXG4gICAgICAgIF0sIHN0YXRlLCBjb250ZXh0LCAoc3RhdGUsIGNvbnRleHQpID0+IHtcbiAgICAgICAgICBsZXQgdmFsaWRhdGVzO1xuXG4gICAgICAgICAgY29udGV4dC5hZGRFcXVhbGl0eShlcXVhbGl0eSk7XG5cbiAgICAgICAgICB2YWxpZGF0ZXMgPSBjb250aW51YXRpb24oZXF1YWxpdHksIGNvbnRleHQpO1xuXG4gICAgICAgICAgcmV0dXJuIHZhbGlkYXRlcztcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlcztcbiAgICAgIH0pO1xuXG4gICAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICAgIHRoaXMuYXNzaWduKHN0YXRlLCBjb250ZXh0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2VxdWFsaXR5U3RyaW5nfScgZXF1YWxpdHkuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRlcztcbiAgfVxuXG4gIHZhbGlkYXRlVGVybXMoc3RhdGUsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGxldCB0ZXJtc1ZhbGlkYXRlID0gZmFsc2U7XG5cbiAgICBjb25zdCBlcXVhbGl0eVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7ZXF1YWxpdHlTdHJpbmd9JyBlcXVhbGl0eSdzIHRlcm1zLi4uYCk7XG5cbiAgICBjb25zdCBsZWZ0VGVybVZhbGlkYXRlcyA9IHRoaXMubGVmdFRlcm0udmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIChsZWZ0VGVybSwgY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgcmlnaHRUZXJtVmFsaWR0ZXMgPSB0aGlzLnJpZ2h0VGVybS52YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgKHJpZ2h0VGVybSwgY29udGV4dCkgPT4ge1xuICAgICAgICBsZXQgdmFsaWRhdGVzID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgbGVmdFRlcm1UeXBlID0gbGVmdFRlcm0uZ2V0VHlwZSgpLFxuICAgICAgICAgICAgICByaWdodFRlcm1UeXBlID0gcmlnaHRUZXJtLmdldFR5cGUoKSxcbiAgICAgICAgICAgICAgbGVmdFRlcm1UeXBlQmFzZVR5cGUgPSBsZWZ0VGVybVR5cGUuaXNCYXNlVHlwZSgpLFxuICAgICAgICAgICAgICByaWdodFRlcm1UeXBlQmFzZVR5cGUgPSByaWdodFRlcm1UeXBlLmlzQmFzZVR5cGUoKSxcbiAgICAgICAgICAgICAgbGVmdFRlcm1UeXBlSm9pbmVkVG9SaWdodFRlcm1UeXBlID0gbGVmdFRlcm1UeXBlLmlzSm9pbmVkVG8ocmlnaHRUZXJtVHlwZSk7XG5cbiAgICAgICAgaWYgKGxlZnRUZXJtVHlwZUJhc2VUeXBlIHx8IHJpZ2h0VGVybVR5cGVCYXNlVHlwZSB8fCBsZWZ0VGVybVR5cGVKb2luZWRUb1JpZ2h0VGVybVR5cGUpIHtcbiAgICAgICAgICB0aGlzLmxlZnRUZXJtID0gbGVmdFRlcm07XG5cbiAgICAgICAgICB0aGlzLnJpZ2h0VGVybSA9IHJpZ2h0VGVybTtcblxuICAgICAgICAgIHZhbGlkYXRlcyA9IGNvbnRpbnVhdGlvbihzdGF0ZSwgY29udGV4dCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmFsaWRhdGVzO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiByaWdodFRlcm1WYWxpZHRlcztcbiAgICB9KTtcblxuICAgIGlmIChsZWZ0VGVybVZhbGlkYXRlcykge1xuICAgICAgdGVybXNWYWxpZGF0ZSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHRlcm1zVmFsaWRhdGUpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7ZXF1YWxpdHlTdHJpbmd9JyBlcXVhbGl0eSdzIHRlcm1zLmApO1xuICAgIH1cblxuICAgIHJldHVybiB0ZXJtc1ZhbGlkYXRlO1xuICB9XG5cbiAgdmFsaWRhdGVXaGVuRGVjbGFyZWQoc3RhdGUsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGxldCB2YWxpZGF0ZXNXaGVuRGVjbGFyZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0IGRlY2xhcmVkID0gaXNEZWNsYXJlZChzdGF0ZSk7XG5cbiAgICBpZiAoZGVjbGFyZWQpIHtcbiAgICAgIGNvbnN0IGVxdWFsaXR5U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2VxdWFsaXR5U3RyaW5nfScgZGVjbGFyZWQgZXF1YWxpdHkuLi5gKTtcblxuICAgICAgdmFsaWRhdGVzV2hlbkRlY2xhcmVkID0gY29udGludWF0aW9uKHN0YXRlLCBjb250ZXh0KTtcblxuICAgICAgaWYgKHZhbGlkYXRlc1doZW5EZWNsYXJlZCkge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2VxdWFsaXR5U3RyaW5nfScgZGVjbGFyZWQgZXF1YWxpdHkuYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRlc1doZW5EZWNsYXJlZDtcbiAgfVxuXG4gIHZhbGlkYXRlV2hlbkRlcml2ZWQoc3RhdGUsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGxldCB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IGZhbHNlO1xuXG4gICAgY29uc3QgZGVyaXZlZCA9IGlzRGVyaXZlZChzdGF0ZSk7XG5cbiAgICBpZiAoZGVyaXZlZCkge1xuICAgICAgY29uc3QgZXF1YWxpdHlTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7ZXF1YWxpdHlTdHJpbmd9JyBkZXJpdmVkIGVxdWFsaXR5Li4uYCk7XG5cbiAgICAgIGNvbnN0IHRlcm1zRXF1YXRlID0gZXF1YXRlVGVybXModGhpcy5sZWZ0VGVybSwgdGhpcy5yaWdodFRlcm0sIGNvbnRleHQpO1xuXG4gICAgICBpZiAoKHRoaXMubmVnYXRlZCAmJiAhdGVybXNFcXVhdGUpIHx8ICghdGhpcy5uZWdhdGVkICYmIHRlcm1zRXF1YXRlKSkge1xuICAgICAgICB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IGNvbnRpbnVhdGlvbihzdGF0ZSwgY29udGV4dCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh2YWxpZGF0ZXNXaGVuRGVyaXZlZCkge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2VxdWFsaXR5U3RyaW5nfScgZGVyaXZlZCBlcXVhbGl0eS5gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdGVzV2hlbkRlcml2ZWQ7XG4gIH1cblxuICBhc3NpZ24oc3RhdGUsIGNvbnRleHQpIHtcbiAgICBjb25zdCB0cmFuc2llbnQgPSBpc1RyYW5zaWVudChzdGF0ZSk7XG5cbiAgICBpZiAodHJhbnNpZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbmVnYXRlZCA9IHRoaXMuaXNOZWdhdGVkKCk7XG5cbiAgICBpZiAobmVnYXRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGVxdWFsaXR5ID0gdGhpczsgIC8vL1xuXG4gICAgY29uc3QgZXF1YWxpdHlBc3NpZ25tZW50ID0gZXF1YWxpdHlBc3NpZ25tZW50RnJvbUVxdWFsaXR5KGVxdWFsaXR5LCBjb250ZXh0KTtcblxuICAgIGNvbnRleHQuYWRkQXNzaWdubWVudChlcXVhbGl0eUFzc2lnbm1lbnQpO1xuXG4gICAgY29uc3QgZGVyaXZlZCA9IGlzRGVyaXZlZChzdGF0ZSk7XG5cbiAgICBpZiAoZGVyaXZlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGxlZnRWYXJpYWJsZUFzc2lnbm1lbnQgPSBsZWZ0VmFyaWFibGVBc3NpZ25tZW50RnJvbUVxdWFsaXR5KGVxdWFsaXR5LCBjb250ZXh0KSxcbiAgICAgICAgICByaWdodFZhcmlhYmxlQXNzaWdubWVudCA9IHJpZ2h0VmFyaWFibGVBc3NpZ25tZW50RnJvbUVxdWFsaXR5KGVxdWFsaXR5LCBjb250ZXh0KTtcblxuICAgIGNvbnRleHQuYWRkQXNzaWdubWVudChsZWZ0VmFyaWFibGVBc3NpZ25tZW50KTtcblxuICAgIGNvbnRleHQuYWRkQXNzaWdubWVudChyaWdodFZhcmlhYmxlQXNzaWdubWVudCk7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgIGxldCBicmVha1BvaW50O1xuXG4gICAgYnJlYWtQb2ludCA9IHRoaXMuZ2V0QnJlYWtQb2ludCgpO1xuXG4gICAgY29uc3QgYnJlYWtQb2ludEpTT04gPSBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTihicmVha1BvaW50KTtcblxuICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50SlNPTjsgIC8vL1xuXG4gICAgY29uc3QganNvbiA9IHtcbiAgICAgIHN0cmluZyxcbiAgICAgIGJyZWFrUG9pbnRcbiAgICB9O1xuXG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiRXF1YWxpdHlcIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIGxldCBlcXVhbGl0eTtcblxuICAgIGluc3RhbnRpYXRlKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCB7IHN0cmluZyB9ID0ganNvbixcbiAgICAgICAgICAgIGVxdWFsaXR5Tm9kZSA9IGluc3RhbnRpYXRlRXF1YWxpdHkoc3RyaW5nLCBjb250ZXh0KSxcbiAgICAgICAgICAgIG5vZGUgPSBlcXVhbGl0eU5vZGUsICAvLy9cbiAgICAgICAgICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50RnJvbUpTT04oanNvbiksXG4gICAgICAgICAgICBuZWdhdGVkID0gbmVnYXRlZEZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgIGxlZnRUZXJtID0gbGVmdFRlcm1Gcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICByaWdodFRlcm0gPSByaWdodFRlcm1Gcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCk7XG5cbiAgICAgIGNvbnRleHQgPSBudWxsO1xuXG4gICAgICBlcXVhbGl0eSA9IG5ldyBFcXVhbGl0eShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5lZ2F0ZWQsIGxlZnRUZXJtLCByaWdodFRlcm0pO1xuICAgIH0sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGVxdWFsaXR5O1xuICB9XG5cbiAgc3RhdGljIGZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KSB7XG4gICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudC5nZXROb2RlKCksXG4gICAgICAgICAgZXF1YWxpdHkgPSBlcXVhbGl0eUZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGVxdWFsaXR5O1xuICB9XG59KTtcblxuZnVuY3Rpb24gbmVnYXRlZEZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5lZ2F0ZWQgPSBlcXVhbGl0eU5vZGUuaXNOZWdhdGVkKCk7XG5cbiAgcmV0dXJuIG5lZ2F0ZWQ7XG59XG5cbmZ1bmN0aW9uIGxlZnRUZXJtRnJvbUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGVmdFRlcm1Ob2RlID0gZXF1YWxpdHlOb2RlLmdldExlZnRUZXJtTm9kZSgpLFxuICAgICAgICBsZWZ0VGVybSA9IGNvbnRleHQuZmluZFRlcm1CeVRlcm1Ob2RlKGxlZnRUZXJtTm9kZSk7XG5cbiAgcmV0dXJuIGxlZnRUZXJtO1xufVxuXG5mdW5jdGlvbiByaWdodFRlcm1Gcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCByaWdodFRlcm1Ob2RlID0gZXF1YWxpdHlOb2RlLmdldExlZnRUZXJtTm9kZSgpLFxuICAgICAgICByaWdodFRlcm0gPSBjb250ZXh0LmZpbmRUZXJtQnlUZXJtTm9kZShyaWdodFRlcm1Ob2RlKTtcblxuICByZXR1cm4gcmlnaHRUZXJtO1xufVxuIl0sIm5hbWVzIjpbImJyZWFrUG9pbnRGcm9tSlNPTiIsImJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIiwiYnJlYWtQb2ludFV0aWxpdGllcyIsImRlZmluZSIsIkVxdWFsaXR5IiwiRWxlbWVudCIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsIm5lZ2F0ZWQiLCJsZWZ0VGVybSIsInJpZ2h0VGVybSIsImlzTmVnYXRlZCIsImdldExlZnRUZXJtIiwiZ2V0UmlnaHRUZXJtIiwiZ2V0RXF1YWxpdHlOb2RlIiwiZ2V0Tm9kZSIsImVxdWFsaXR5TmRlIiwiZ2V0TGVmdFRlcm1Ob2RlIiwibGVmdFRlcm1Ob2RlIiwiZ2V0UmlnaHRUZXJtTm9kZSIsInJpZ2h0VGVybU5vZGUiLCJnZXRUZXJtcyIsInRlcm1zIiwibWF0Y2hFcXVhbGl0eU5vZGUiLCJlcXVhbGl0eU5vZGUiLCJub2RlTWF0Y2hlcyIsIm1hdGNoTm9kZSIsImVxdWFsaXR5Tm9kZU1hdGNoZXMiLCJpc0VxdWFsVG8iLCJlcXVhbGl0eSIsImVxdWFsVG8iLCJmaW5kRXF1YWxpdHkiLCJmaW5kRXF1YWxpdHlCeUVxdWFsaXR5Tm9kZSIsInZhbGlkYXRlIiwic3RhdGUiLCJjb250aW51YXRpb24iLCJ2YWxpZGF0ZXMiLCJlcXVhbGl0eVN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwiZGVidWciLCJ2YWxpZGF0ZVRlcm1zIiwiYmluZCIsImFsbCIsInZhbGlkYXRlV2hlbkRlY2xhcmVkIiwidmFsaWRhdGVXaGVuRGVyaXZlZCIsImV4aXN0cyIsImFkZEVxdWFsaXR5IiwiYXNzaWduIiwidGVybXNWYWxpZGF0ZSIsImxlZnRUZXJtVmFsaWRhdGVzIiwicmlnaHRUZXJtVmFsaWR0ZXMiLCJsZWZ0VGVybVR5cGUiLCJnZXRUeXBlIiwicmlnaHRUZXJtVHlwZSIsImxlZnRUZXJtVHlwZUJhc2VUeXBlIiwiaXNCYXNlVHlwZSIsInJpZ2h0VGVybVR5cGVCYXNlVHlwZSIsImxlZnRUZXJtVHlwZUpvaW5lZFRvUmlnaHRUZXJtVHlwZSIsImlzSm9pbmVkVG8iLCJ2YWxpZGF0ZXNXaGVuRGVjbGFyZWQiLCJkZWNsYXJlZCIsImlzRGVjbGFyZWQiLCJ2YWxpZGF0ZXNXaGVuRGVyaXZlZCIsImRlcml2ZWQiLCJpc0Rlcml2ZWQiLCJ0ZXJtc0VxdWF0ZSIsImVxdWF0ZVRlcm1zIiwidHJhbnNpZW50IiwiaXNUcmFuc2llbnQiLCJlcXVhbGl0eUFzc2lnbm1lbnQiLCJlcXVhbGl0eUFzc2lnbm1lbnRGcm9tRXF1YWxpdHkiLCJhZGRBc3NpZ25tZW50IiwibGVmdFZhcmlhYmxlQXNzaWdubWVudCIsImxlZnRWYXJpYWJsZUFzc2lnbm1lbnRGcm9tRXF1YWxpdHkiLCJyaWdodFZhcmlhYmxlQXNzaWdubWVudCIsInJpZ2h0VmFyaWFibGVBc3NpZ25tZW50RnJvbUVxdWFsaXR5IiwidG9KU09OIiwiZ2V0QnJlYWtQb2ludCIsImJyZWFrUG9pbnRKU09OIiwianNvbiIsIm5hbWUiLCJmcm9tSlNPTiIsImluc3RhbnRpYXRlIiwiaW5zdGFudGlhdGVFcXVhbGl0eSIsIm5lZ2F0ZWRGcm9tRXF1YWxpdHlOb2RlIiwibGVmdFRlcm1Gcm9tRXF1YWxpdHlOb2RlIiwicmlnaHRUZXJtRnJvbUVxdWFsaXR5Tm9kZSIsImZyb21TdGF0ZW1lbnQiLCJzdGF0ZW1lbnQiLCJzdGF0ZW1lbnROb2RlIiwiZXF1YWxpdHlGcm9tU3RhdGVtZW50Tm9kZSIsImZpbmRUZXJtQnlUZXJtTm9kZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBZUE7OztlQUFBOzs7Z0NBYjZDOzBCQUV0Qjt3QkFDSzt5QkFDQTs4QkFDQTs2QkFDUTt5QkFDTTt1QkFDUzt3QkFDcUU7QUFFeEgsTUFBTSxFQUFFQSxrQkFBa0IsRUFBRUMsMEJBQTBCLEVBQUUsR0FBR0MsbUNBQW1CO01BRTlFLFdBQWVDLElBQUFBLGdCQUFNLEVBQUMsTUFBTUMsaUJBQWlCQyx1QkFBTztJQUNsRCxZQUFZQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxVQUFVLEVBQUVDLE9BQU8sRUFBRUMsUUFBUSxFQUFFQyxTQUFTLENBQUU7UUFDM0UsS0FBSyxDQUFDTixTQUFTQyxRQUFRQyxNQUFNQztRQUU3QixJQUFJLENBQUNDLE9BQU8sR0FBR0E7UUFDZixJQUFJLENBQUNDLFFBQVEsR0FBR0E7UUFDaEIsSUFBSSxDQUFDQyxTQUFTLEdBQUdBO0lBQ25CO0lBRUFDLFlBQVk7UUFDVixPQUFPLElBQUksQ0FBQ0gsT0FBTztJQUNyQjtJQUVBSSxjQUFjO1FBQ1osT0FB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
@@ -12,11 +12,11 @@ const _occamlanguages = require("occam-languages");
12
12
  const _necessary = require("necessary");
13
13
  const _elements = require("../elements");
14
14
  const _context = require("../utilities/context");
15
- const _instantiate = require("../process/instantiate");
16
15
  const _brackets = require("../utilities/brackets");
16
+ const _instantiate = require("../process/instantiate");
17
17
  const _string = require("../utilities/string");
18
18
  const _element = require("../utilities/element");
19
- const { compress } = _necessary.arrayUtilities;
19
+ const { first, second, compress } = _necessary.arrayUtilities;
20
20
  const _default = (0, _elements.define)(class Equivalence extends _occamlanguages.Element {
21
21
  constructor(context, string, node, breakPoint, terms){
22
22
  super(context, string, node, breakPoint);
@@ -70,8 +70,8 @@ const _default = (0, _elements.define)(class Equivalence extends _occamlanguages
70
70
  }
71
71
  isDisjointFrom(equivalence) {
72
72
  const disjointFrom = equivalence.everyTerm((term)=>{
73
- const comparesToTerm = this.compareTerm(term);
74
- if (!comparesToTerm) {
73
+ const termEquates = this.equateTerm(term);
74
+ if (!termEquates) {
75
75
  return true;
76
76
  }
77
77
  });
@@ -85,48 +85,32 @@ const _default = (0, _elements.define)(class Equivalence extends _occamlanguages
85
85
  const implicitlyGroundedTerms = this.getImplicitlyGroundedTerms(definedVariables, context), implicitlyGroundedTermsLength = implicitlyGroundedTerms.length, implicitlyGrounded = implicitlyGroundedTermsLength > 0;
86
86
  return implicitlyGrounded;
87
87
  }
88
- matchTermNode(termNode) {
89
- termNode = (0, _brackets.stripBracketsFromTermNode)(termNode); ///
90
- const termNodeMatches = this.someTerm((term)=>{
91
- const termNodeMatches = term.matchTermNode(termNode);
92
- if (termNodeMatches) {
88
+ equateTerm(term) {
89
+ const termA = term, termEquates = this.someTerm((term)=>{
90
+ const termB = term, termAEqualToTermB = termA.isEqualTo(termB);
91
+ if (termAEqualToTermB) {
93
92
  return true;
94
93
  }
95
94
  });
96
- return termNodeMatches;
95
+ return termEquates;
97
96
  }
98
- matchTermNodes(termNodes) {
99
- const termNodesMatch = termNodes.every((termNode)=>{
100
- const termNodeMatches = this.matchTermNode(termNode);
101
- if (termNodeMatches) {
97
+ equateTerms(terms) {
98
+ const termsEquate = terms.every((term)=>{
99
+ const termEquates = this.equateTerm(term);
100
+ if (termEquates) {
102
101
  return true;
103
102
  }
104
103
  });
105
- return termNodesMatch;
106
- }
107
- someTerm(callback) {
108
- return this.terms.some(callback);
104
+ return termsEquate;
109
105
  }
110
- everyTerm(callback) {
111
- return this.terms.every(callback);
112
- }
113
- compareTerm(term) {
114
- const termA = term, comparesToTerm = this.someTerm((term)=>{
115
- const termB = term, termAEqualToTermB = termA.isEqualTo(termB);
116
- if (termAEqualToTermB) {
106
+ matchTermNode(termNode) {
107
+ const termNodeMatches = this.terms.some((term)=>{
108
+ const termNodeMatches = term.matchTermNode(termNode);
109
+ if (termNodeMatches) {
117
110
  return true;
118
111
  }
119
112
  });
120
- return comparesToTerm;
121
- }
122
- someOtherTerm(term, callback) {
123
- const termA = term, terms = this.terms.filter((term)=>{
124
- const termB = term, termAEqualToTermB = termA.isEqualTo(termB);
125
- if (!termAEqualToTermB) {
126
- return true;
127
- }
128
- }), result = terms.some(callback);
129
- return result;
113
+ return termNodeMatches;
130
114
  }
131
115
  combineTerms(terms) {
132
116
  const combinedTerms = [
@@ -152,15 +136,43 @@ const _default = (0, _elements.define)(class Equivalence extends _occamlanguages
152
136
  }, context);
153
137
  return equivalence;
154
138
  }
139
+ someOtherTerm(term, callback) {
140
+ const termA = term, terms = this.terms.filter((term)=>{
141
+ const termB = term, termAEqualToTermB = termA.isEqualTo(termB);
142
+ if (!termAEqualToTermB) {
143
+ return true;
144
+ }
145
+ }), result = terms.some(callback);
146
+ return result;
147
+ }
148
+ someTerm(callback) {
149
+ return this.terms.some(callback);
150
+ }
151
+ everyTerm(callback) {
152
+ return this.terms.every(callback);
153
+ }
155
154
  static name = "Equivalence";
156
155
  static fromEquality(equality, context) {
157
156
  let equivalence;
157
+ let terms;
158
+ terms = equality.getTerms();
159
+ terms = terms.map((term)=>{
160
+ term = (0, _brackets.stripBracketsFromTerm)(term, context);
161
+ return term;
162
+ });
163
+ const firstTerm = first(terms), secondTerm = second(terms), firstTermEqualToSecondTerm = firstTerm.isEqualTo(secondTerm);
164
+ if (firstTermEqualToSecondTerm) {
165
+ const term = firstTerm; ///
166
+ terms = [
167
+ term
168
+ ];
169
+ }
158
170
  (0, _context.instantiate)((context)=>{
159
- const terms = equality.getTerms(), equivalenceString = (0, _string.equivalenceStringFromTerms)(terms), string = equivalenceString, equivalenceNode = (0, _instantiate.instantiateEquivalence)(string, context);
171
+ const equivalenceString = (0, _string.equivalenceStringFromTerms)(terms), string = equivalenceString, equivalenceNode = (0, _instantiate.instantiateEquivalence)(string, context);
160
172
  equivalence = (0, _element.equivalenceFromEquivalenceNode)(equivalenceNode, context);
161
173
  }, context);
162
174
  return equivalence;
163
175
  }
164
176
  });
165
177
 
166
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2VxdWl2YWxlbmNlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCB7IGRlZmluZSB9IGZyb20gXCIuLi9lbGVtZW50c1wiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlRXF1aXZhbGVuY2UgfSBmcm9tIFwiLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgc3RyaXBCcmFja2V0c0Zyb21UZXJtTm9kZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvYnJhY2tldHNcIjtcbmltcG9ydCB7IGVxdWl2YWxlbmNlU3RyaW5nRnJvbVRlcm1zIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9zdHJpbmdcIjtcbmltcG9ydCB7IGVxdWl2YWxlbmNlRnJvbUVxdWl2YWxlbmNlTm9kZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvZWxlbWVudFwiO1xuXG5jb25zdCB7IGNvbXByZXNzIH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIEVxdWl2YWxlbmNlIGV4dGVuZHMgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybXMpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy50ZXJtcyA9IHRlcm1zO1xuICB9XG5cbiAgZ2V0VGVybXMoKSB7XG4gICAgcmV0dXJuIHRoaXMudGVybXM7XG4gIH1cblxuICBnZXRFcXVpdmFsZW5jZU5vZGUoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgIGVxdWl2YWxlbmNlTm9kZSA9IG5vZGU7IC8vL1xuXG4gICAgcmV0dXJuIGVxdWl2YWxlbmNlTm9kZTtcbiAgfVxuXG4gIGdldEdyb3VuZGVkVGVybXMoZGVmaW5lZFZhcmlhYmxlcywgZ3JvdW5kZWRUZXJtcywgY29udGV4dCkge1xuICAgIHRoaXMudGVybXMuZm9yRWFjaCgodGVybSkgPT4ge1xuICAgICAgY29uc3QgdGVybUdyb3VuZGVkID0gdGVybS5pc0dyb3VuZGVkKGRlZmluZWRWYXJpYWJsZXMsIGNvbnRleHQpO1xuXG4gICAgICBpZiAodGVybUdyb3VuZGVkKSB7XG4gICAgICAgIGNvbnN0IHRlcm1NYXRjaGVzR3JvdW5kZWRUZXJtID0gZ3JvdW5kZWRUZXJtcy5zb21lKChncm91bmRlZFRlcm0pID0+IHtcbiAgICAgICAgICBjb25zdCBncm91bmRlZFRlcm1Ob2RlID0gZ3JvdW5kZWRUZXJtLmdldE5vZGUoKSxcbiAgICAgICAgICAgICAgICBncm91bmRlZFRlcm1Ob2RlTWF0Y2hlcyA9IHRlcm0ubWF0Y2hUZXJtTm9kZShncm91bmRlZFRlcm1Ob2RlKTtcblxuICAgICAgICAgIGlmIChncm91bmRlZFRlcm1Ob2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgICAgIGlmICghdGVybU1hdGNoZXNHcm91bmRlZFRlcm0pIHtcbiAgICAgICAgICBjb25zdCBncm91bmRlZFRlcm0gPSB0ZXJtO1xuXG4gICAgICAgICAgZ3JvdW5kZWRUZXJtcy5wdXNoKGdyb3VuZGVkVGVybSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdldEluaXRpYWxseUdyb3VuZGVkVGVybXMoY29udGV4dCkge1xuICAgIGNvbnN0IGluaXRpYWxseUdyb3VuZGVkVGVybXMgPSB0aGlzLnRlcm1zLnJlZHVjZSgoaW5pdGlhbGx5R3JvdW5kZWRUZXJtcywgdGVybSkgPT4ge1xuICAgICAgY29uc3QgdGVybUluaXRpYWxseUdyb3VuZGVkID0gdGVybS5pc0luaXRpYWxseUdyb3VuZGVkKGNvbnRleHQpO1xuXG4gICAgICBpZiAodGVybUluaXRpYWxseUdyb3VuZGVkKSB7XG4gICAgICAgIGNvbnN0IGluaXRpYWxseUdyb3VuZGVkVGVybSA9IHRlcm07IC8vL1xuXG4gICAgICAgIGluaXRpYWxseUdyb3VuZGVkVGVybXMucHVzaChpbml0aWFsbHlHcm91bmRlZFRlcm0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaW5pdGlhbGx5R3JvdW5kZWRUZXJtcztcbiAgICB9LCBbXSk7XG5cbiAgICByZXR1cm4gaW5pdGlhbGx5R3JvdW5kZWRUZXJtcztcbiAgfVxuXG4gIGdldEltcGxpY2l0bHlHcm91bmRlZFRlcm1zKGRlZmluZWRWYXJpYWJsZXMsIGNvbnRleHQpIHtcbiAgICBjb25zdCBpbXBsaWNpdGx5R3JvdW5kZWRUZXJtcyA9IHRoaXMudGVybXMucmVkdWNlKChpbXBsaWNpdGx5R3JvdW5kZWRUZXJtcywgdGVybSkgPT4ge1xuICAgICAgY29uc3QgdGVybUltcGxpY2l0bHlHcm91bmRlZCA9IHRlcm0uaXNJbXBsaWNpdGx5R3JvdW5kZWQoZGVmaW5lZFZhcmlhYmxlcywgY29udGV4dCk7XG5cbiAgICAgIGlmICh0ZXJtSW1wbGljaXRseUdyb3VuZGVkKSB7XG4gICAgICAgIGNvbnN0IGltcGxpY2l0bHlHcm91bmRlZFRlcm0gPSB0ZXJtOyAvLy9cblxuICAgICAgICBpbXBsaWNpdGx5R3JvdW5kZWRUZXJtcy5wdXNoKGltcGxpY2l0bHlHcm91bmRlZFRlcm0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaW1wbGljaXRseUdyb3VuZGVkVGVybXM7XG4gICAgfSwgW10pO1xuXG4gICAgcmV0dXJuIGltcGxpY2l0bHlHcm91bmRlZFRlcm1zO1xuICB9XG5cbiAgaXNEaXNqb2ludEZyb20oZXF1aXZhbGVuY2UpIHtcbiAgICBjb25zdCBkaXNqb2ludEZyb20gPSBlcXVpdmFsZW5jZS5ldmVyeVRlcm0oKHRlcm0pID0+IHtcbiAgICAgIGNvbnN0IGNvbXBhcmVzVG9UZXJtID0gdGhpcy5jb21wYXJlVGVybSh0ZXJtKTtcblxuICAgICAgaWYgKCFjb21wYXJlc1RvVGVybSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBkaXNqb2ludEZyb207XG4gIH1cblxuICBpc0luaXRpYWxseUdyb3VuZGVkKGNvbnRleHQpIHtcbiAgICBjb25zdCBpbml0aWFsbHlHcm91bmRlZFRlcm1zID0gdGhpcy5nZXRJbml0aWFsbHlHcm91bmRlZFRlcm1zKGNvbnRleHQpLFxuICAgICAgICAgIGluaXRpYWxseUdyb3VuZGVkVGVybXNMZW5ndGggPSBpbml0aWFsbHlHcm91bmRlZFRlcm1zLmxlbmd0aCxcbiAgICAgICAgICBpbml0aWFsbHlHcm91bmRlZCA9IChpbml0aWFsbHlHcm91bmRlZFRlcm1zTGVuZ3RoID4gMCk7XG5cbiAgICByZXR1cm4gaW5pdGlhbGx5R3JvdW5kZWQ7XG4gIH1cblxuICBpc0ltcGxpY2l0bHlHcm91bmRlZChkZWZpbmVkVmFyaWFibGVzLCBjb250ZXh0KSB7XG4gICAgY29uc3QgaW1wbGljaXRseUdyb3VuZGVkVGVybXMgPSB0aGlzLmdldEltcGxpY2l0bHlHcm91bmRlZFRlcm1zKGRlZmluZWRWYXJpYWJsZXMsIGNvbnRleHQpLFxuICAgICAgICAgIGltcGxpY2l0bHlHcm91bmRlZFRlcm1zTGVuZ3RoID0gaW1wbGljaXRseUdyb3VuZGVkVGVybXMubGVuZ3RoLFxuICAgICAgICAgIGltcGxpY2l0bHlHcm91bmRlZCA9IChpbXBsaWNpdGx5R3JvdW5kZWRUZXJtc0xlbmd0aCA+IDApO1xuXG4gICAgcmV0dXJuIGltcGxpY2l0bHlHcm91bmRlZDtcbiAgfVxuXG4gIG1hdGNoVGVybU5vZGUodGVybU5vZGUpIHtcbiAgICB0ZXJtTm9kZSA9IHN0cmlwQnJhY2tldHNGcm9tVGVybU5vZGUodGVybU5vZGUpOyAvLy9cblxuICAgIGNvbnN0IHRlcm1Ob2RlTWF0Y2hlcyA9IHRoaXMuc29tZVRlcm0oKHRlcm0pID0+IHtcbiAgICAgIGNvbnN0IHRlcm1Ob2RlTWF0Y2hlcyA9IHRlcm0ubWF0Y2hUZXJtTm9kZSh0ZXJtTm9kZSk7XG5cbiAgICAgIGlmICh0ZXJtTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGVybU5vZGVNYXRjaGVzO1xuICB9XG5cbiAgbWF0Y2hUZXJtTm9kZXModGVybU5vZGVzKSB7XG4gICAgY29uc3QgdGVybU5vZGVzTWF0Y2ggPSB0ZXJtTm9kZXMuZXZlcnkoKHRlcm1Ob2RlKSA9PiB7XG4gICAgICBjb25zdCB0ZXJtTm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoVGVybU5vZGUodGVybU5vZGUpO1xuXG4gICAgICBpZiAodGVybU5vZGVNYXRjaGVzKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRlcm1Ob2Rlc01hdGNoO1xuICB9XG5cbiAgc29tZVRlcm0oY2FsbGJhY2spIHsgcmV0dXJuIHRoaXMudGVybXMuc29tZShjYWxsYmFjayk7IH1cblxuICBldmVyeVRlcm0oY2FsbGJhY2spIHsgcmV0dXJuIHRoaXMudGVybXMuZXZlcnkoY2FsbGJhY2spOyB9XG5cbiAgY29tcGFyZVRlcm0odGVybSkge1xuICAgIGNvbnN0IHRlcm1BID0gdGVybSwgLy8vXG4gICAgICAgICAgY29tcGFyZXNUb1Rlcm0gPSB0aGlzLnNvbWVUZXJtKCh0ZXJtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0ZXJtQiA9IHRlcm0sIC8vL1xuICAgICAgICAgICAgICAgICAgdGVybUFFcXVhbFRvVGVybUIgPSB0ZXJtQS5pc0VxdWFsVG8odGVybUIpO1xuXG4gICAgICAgICAgICBpZiAodGVybUFFcXVhbFRvVGVybUIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICByZXR1cm4gY29tcGFyZXNUb1Rlcm07XG4gIH1cblxuICBzb21lT3RoZXJUZXJtKHRlcm0sIGNhbGxiYWNrKSB7XG4gICAgY29uc3QgdGVybUEgPSB0ZXJtLCAvLy9cbiAgICAgICAgICB0ZXJtcyA9IHRoaXMudGVybXMuZmlsdGVyKCh0ZXJtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0ZXJtQiA9IHRlcm0sIC8vL1xuICAgICAgICAgICAgICAgICAgdGVybUFFcXVhbFRvVGVybUIgPSB0ZXJtQS5pc0VxdWFsVG8odGVybUIpO1xuXG4gICAgICAgICAgICBpZiAoIXRlcm1BRXF1YWxUb1Rlcm1CKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHJlc3VsdCA9IHRlcm1zLnNvbWUoY2FsbGJhY2spO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGNvbWJpbmVUZXJtcyh0ZXJtcykge1xuICAgIGNvbnN0IGNvbWJpbmVkVGVybXMgPSBbXG4gICAgICAuLi50aGlzLnRlcm1zLFxuICAgICAgLi4udGVybXNcbiAgICBdO1xuXG4gICAgY29tcHJlc3MoY29tYmluZWRUZXJtcywgKGNvbWJpbmVkVGVybUEsIGNvbWJpbmVkVGVybUIpID0+IHtcbiAgICAgIGNvbnN0IGNvbWJpbmVkVGVybUVxdWFsVG9Db21iaW5lZFRlcm1CID0gY29tYmluZWRUZXJtQS5pc0VxdWFsVG8oY29tYmluZWRUZXJtQik7XG5cbiAgICAgIGlmICghY29tYmluZWRUZXJtRXF1YWxUb0NvbWJpbmVkVGVybUIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gY29tYmluZWRUZXJtcztcbiAgfVxuXG4gIG1lcmdlZFdpdGgoZXF1aXZhbGVuY2UsIGNvbnRleHQpIHtcbiAgICBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgbGV0IHRlcm1zO1xuXG4gICAgICB0ZXJtcyA9IGVxdWl2YWxlbmNlLmdldFRlcm1zKCk7XG5cbiAgICAgIGNvbnN0IGNvbWJpbmVkVGVybXMgPSB0aGlzLmNvbWJpbmVUZXJtcyh0ZXJtcyk7XG5cbiAgICAgIHRlcm1zID0gY29tYmluZWRUZXJtczsgIC8vL1xuXG4gICAgICBjb25zdCBlcXVpdmFsZW5jZVN0cmluZyA9IGVxdWl2YWxlbmNlU3RyaW5nRnJvbVRlcm1zKHRlcm1zKSxcbiAgICAgICAgICAgIHN0cmluZyA9IGVxdWl2YWxlbmNlU3RyaW5nLCAgLy8vXG4gICAgICAgICAgICBlcXVpdmFsZW5jZU5vZGUgPSBpbnN0YW50aWF0ZUVxdWl2YWxlbmNlKHN0cmluZywgY29udGV4dCk7XG5cbiAgICAgIGVxdWl2YWxlbmNlID0gZXF1aXZhbGVuY2VGcm9tRXF1aXZhbGVuY2VOb2RlKGVxdWl2YWxlbmNlTm9kZSwgY29udGV4dCk7XG4gICAgfSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gZXF1aXZhbGVuY2U7XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiRXF1aXZhbGVuY2VcIjtcblxuICBzdGF0aWMgZnJvbUVxdWFsaXR5KGVxdWFsaXR5LCBjb250ZXh0KSB7XG4gICAgbGV0IGVxdWl2YWxlbmNlO1xuXG4gICAgaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHRlcm1zID0gZXF1YWxpdHkuZ2V0VGVybXMoKSxcbiAgICAgICAgICAgIGVxdWl2YWxlbmNlU3RyaW5nID0gZXF1aXZhbGVuY2VTdHJpbmdGcm9tVGVybXModGVybXMpLFxuICAgICAgICAgICAgc3RyaW5nID0gZXF1aXZhbGVuY2VTdHJpbmcsICAvLy9cbiAgICAgICAgICAgIGVxdWl2YWxlbmNlTm9kZSA9IGluc3RhbnRpYXRlRXF1aXZhbGVuY2Uoc3RyaW5nLCBjb250ZXh0KTtcblxuICAgICAgZXF1aXZhbGVuY2UgPSBlcXVpdmFsZW5jZUZyb21FcXVpdmFsZW5jZU5vZGUoZXF1aXZhbGVuY2VOb2RlLCBjb250ZXh0KTtcbiAgICB9LCBjb250ZXh0KTtcblxuICAgIHJldHVybiBlcXVpdmFsZW5jZTtcbiAgfVxufSk7XG4iXSwibmFtZXMiOlsiY29tcHJlc3MiLCJhcnJheVV0aWxpdGllcyIsImRlZmluZSIsIkVxdWl2YWxlbmNlIiwiRWxlbWVudCIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsInRlcm1zIiwiZ2V0VGVybXMiLCJnZXRFcXVpdmFsZW5jZU5vZGUiLCJnZXROb2RlIiwiZXF1aXZhbGVuY2VOb2RlIiwiZ2V0R3JvdW5kZWRUZXJtcyIsImRlZmluZWRWYXJpYWJsZXMiLCJncm91bmRlZFRlcm1zIiwiZm9yRWFjaCIsInRlcm0iLCJ0ZXJtR3JvdW5kZWQiLCJpc0dyb3VuZGVkIiwidGVybU1hdGNoZXNHcm91bmRlZFRlcm0iLCJzb21lIiwiZ3JvdW5kZWRUZXJtIiwiZ3JvdW5kZWRUZXJtTm9kZSIsImdyb3VuZGVkVGVybU5vZGVNYXRjaGVzIiwibWF0Y2hUZXJtTm9kZSIsInB1c2giLCJnZXRJbml0aWFsbHlHcm91bmRlZFRlcm1zIiwiaW5pdGlhbGx5R3JvdW5kZWRUZXJtcyIsInJlZHVjZSIsInRlcm1Jbml0aWFsbHlHcm91bmRlZCIsImlzSW5pdGlhbGx5R3JvdW5kZWQiLCJpbml0aWFsbHlHcm91bmRlZFRlcm0iLCJnZXRJbXBsaWNpdGx5R3JvdW5kZWRUZXJtcyIsImltcGxpY2l0bHlHcm91bmRlZFRlcm1zIiwidGVybUltcGxpY2l0bHlHcm91bmRlZCIsImlzSW1wbGljaXRseUdyb3VuZGVkIiwiaW1wbGljaXRseUdyb3VuZGVkVGVybSIsImlzRGlzam9pbnRGcm9tIiwiZXF1aXZhbGVuY2UiLCJkaXNqb2ludEZyb20iLCJldmVyeVRlcm0iLCJjb21wYXJlc1RvVGVybSIsImNvbXBhcmVUZXJtIiwiaW5pdGlhbGx5R3JvdW5kZWRUZXJtc0xlbmd0aCIsImxlbmd0aCIsImluaXRpYWxseUdyb3VuZGVkIiwiaW1wbGljaXRseUdyb3VuZGVkVGVybXNMZW5ndGgiLCJpbXBsaWNpdGx5R3JvdW5kZWQiLCJ0ZXJtTm9kZSIsInN0cmlwQnJhY2tldHNGcm9tVGVybU5vZGUiLCJ0ZXJtTm9kZU1hdGNoZXMiLCJzb21lVGVybSIsIm1hdGNoVGVybU5vZGVzIiwidGVybU5vZGVzIiwidGVybU5vZGVzTWF0Y2giLCJldmVyeSIsImNhbGxiYWNrIiwidGVybUEiLCJ0ZXJtQiIsInRlcm1BRXF1YWxUb1Rlcm1CIiwiaXNFcXVhbFRvIiwic29tZU90aGVyVGVybSIsImZpbHRlciIsInJlc3VsdCIsImNvbWJpbmVUZXJtcyIsImNvbWJpbmVkVGVybXMiLCJjb21iaW5lZFRlcm1BIiwiY29tYmluZWRUZXJtQiIsImNvbWJpbmVkVGVybUVxdWFsVG9Db21iaW5lZFRlcm1CIiwibWVyZ2VkV2l0aCIsImluc3RhbnRpYXRlIiwiZXF1aXZhbGVuY2VTdHJpbmciLCJlcXVpdmFsZW5jZVN0cmluZ0Zyb21UZXJtcyIsImluc3RhbnRpYXRlRXF1aXZhbGVuY2UiLCJlcXVpdmFsZW5jZUZyb21FcXVpdmFsZW5jZU5vZGUiLCJuYW1lIiwiZnJvbUVxdWFsaXR5IiwiZXF1YWxpdHkiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWNBOzs7ZUFBQTs7O2dDQVp3QjsyQkFDTzswQkFFUjt5QkFDSzs2QkFDVzswQkFDRzt3QkFDQzt5QkFDSTtBQUUvQyxNQUFNLEVBQUVBLFFBQVEsRUFBRSxHQUFHQyx5QkFBYztNQUVuQyxXQUFlQyxJQUFBQSxnQkFBTSxFQUFDLE1BQU1DLG9CQUFvQkMsdUJBQU87SUFDckQsWUFBWUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsVUFBVSxFQUFFQyxLQUFLLENBQUU7UUFDcEQsS0FBSyxDQUFDSixTQUFTQyxRQUFRQyxNQUFNQztRQUU3QixJQUFJLENBQUNDLEtBQUssR0FBR0E7SUFDZjtJQUVBQyxXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUNELEtBQUs7SUFDbkI7SUFFQUUscUJBQXFCO1FBQ25CLE1BQU1KLE9BQU8sSUFBSSxDQUFDSyxP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
178
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2VxdWl2YWxlbmNlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCB7IGRlZmluZSB9IGZyb20gXCIuLi9lbGVtZW50c1wiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcbmltcG9ydCB7IHN0cmlwQnJhY2tldHNGcm9tVGVybSB9IGZyb20gXCIuLi91dGlsaXRpZXMvYnJhY2tldHNcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlRXF1aXZhbGVuY2UgfSBmcm9tIFwiLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgZXF1aXZhbGVuY2VTdHJpbmdGcm9tVGVybXMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N0cmluZ1wiO1xuaW1wb3J0IHsgZXF1aXZhbGVuY2VGcm9tRXF1aXZhbGVuY2VOb2RlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9lbGVtZW50XCI7XG5cbmNvbnN0IHsgZmlyc3QsIHNlY29uZCwgY29tcHJlc3MgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgRXF1aXZhbGVuY2UgZXh0ZW5kcyBFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0ZXJtcykge1xuICAgIHN1cGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCk7XG5cbiAgICB0aGlzLnRlcm1zID0gdGVybXM7XG4gIH1cblxuICBnZXRUZXJtcygpIHtcbiAgICByZXR1cm4gdGhpcy50ZXJtcztcbiAgfVxuXG4gIGdldEVxdWl2YWxlbmNlTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgZXF1aXZhbGVuY2VOb2RlID0gbm9kZTsgLy8vXG5cbiAgICByZXR1cm4gZXF1aXZhbGVuY2VOb2RlO1xuICB9XG5cbiAgZ2V0R3JvdW5kZWRUZXJtcyhkZWZpbmVkVmFyaWFibGVzLCBncm91bmRlZFRlcm1zLCBjb250ZXh0KSB7XG4gICAgdGhpcy50ZXJtcy5mb3JFYWNoKCh0ZXJtKSA9PiB7XG4gICAgICBjb25zdCB0ZXJtR3JvdW5kZWQgPSB0ZXJtLmlzR3JvdW5kZWQoZGVmaW5lZFZhcmlhYmxlcywgY29udGV4dCk7XG5cbiAgICAgIGlmICh0ZXJtR3JvdW5kZWQpIHtcbiAgICAgICAgY29uc3QgdGVybU1hdGNoZXNHcm91bmRlZFRlcm0gPSBncm91bmRlZFRlcm1zLnNvbWUoKGdyb3VuZGVkVGVybSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGdyb3VuZGVkVGVybU5vZGUgPSBncm91bmRlZFRlcm0uZ2V0Tm9kZSgpLFxuICAgICAgICAgICAgICAgIGdyb3VuZGVkVGVybU5vZGVNYXRjaGVzID0gdGVybS5tYXRjaFRlcm1Ob2RlKGdyb3VuZGVkVGVybU5vZGUpO1xuXG4gICAgICAgICAgaWYgKGdyb3VuZGVkVGVybU5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKCF0ZXJtTWF0Y2hlc0dyb3VuZGVkVGVybSkge1xuICAgICAgICAgIGNvbnN0IGdyb3VuZGVkVGVybSA9IHRlcm07XG5cbiAgICAgICAgICBncm91bmRlZFRlcm1zLnB1c2goZ3JvdW5kZWRUZXJtKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0SW5pdGlhbGx5R3JvdW5kZWRUZXJtcyhjb250ZXh0KSB7XG4gICAgY29uc3QgaW5pdGlhbGx5R3JvdW5kZWRUZXJtcyA9IHRoaXMudGVybXMucmVkdWNlKChpbml0aWFsbHlHcm91bmRlZFRlcm1zLCB0ZXJtKSA9PiB7XG4gICAgICBjb25zdCB0ZXJtSW5pdGlhbGx5R3JvdW5kZWQgPSB0ZXJtLmlzSW5pdGlhbGx5R3JvdW5kZWQoY29udGV4dCk7XG5cbiAgICAgIGlmICh0ZXJtSW5pdGlhbGx5R3JvdW5kZWQpIHtcbiAgICAgICAgY29uc3QgaW5pdGlhbGx5R3JvdW5kZWRUZXJtID0gdGVybTsgLy8vXG5cbiAgICAgICAgaW5pdGlhbGx5R3JvdW5kZWRUZXJtcy5wdXNoKGluaXRpYWxseUdyb3VuZGVkVGVybSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpbml0aWFsbHlHcm91bmRlZFRlcm1zO1xuICAgIH0sIFtdKTtcblxuICAgIHJldHVybiBpbml0aWFsbHlHcm91bmRlZFRlcm1zO1xuICB9XG5cbiAgZ2V0SW1wbGljaXRseUdyb3VuZGVkVGVybXMoZGVmaW5lZFZhcmlhYmxlcywgY29udGV4dCkge1xuICAgIGNvbnN0IGltcGxpY2l0bHlHcm91bmRlZFRlcm1zID0gdGhpcy50ZXJtcy5yZWR1Y2UoKGltcGxpY2l0bHlHcm91bmRlZFRlcm1zLCB0ZXJtKSA9PiB7XG4gICAgICBjb25zdCB0ZXJtSW1wbGljaXRseUdyb3VuZGVkID0gdGVybS5pc0ltcGxpY2l0bHlHcm91bmRlZChkZWZpbmVkVmFyaWFibGVzLCBjb250ZXh0KTtcblxuICAgICAgaWYgKHRlcm1JbXBsaWNpdGx5R3JvdW5kZWQpIHtcbiAgICAgICAgY29uc3QgaW1wbGljaXRseUdyb3VuZGVkVGVybSA9IHRlcm07IC8vL1xuXG4gICAgICAgIGltcGxpY2l0bHlHcm91bmRlZFRlcm1zLnB1c2goaW1wbGljaXRseUdyb3VuZGVkVGVybSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpbXBsaWNpdGx5R3JvdW5kZWRUZXJtcztcbiAgICB9LCBbXSk7XG5cbiAgICByZXR1cm4gaW1wbGljaXRseUdyb3VuZGVkVGVybXM7XG4gIH1cblxuICBpc0Rpc2pvaW50RnJvbShlcXVpdmFsZW5jZSkge1xuICAgIGNvbnN0IGRpc2pvaW50RnJvbSA9IGVxdWl2YWxlbmNlLmV2ZXJ5VGVybSgodGVybSkgPT4ge1xuICAgICAgY29uc3QgdGVybUVxdWF0ZXMgPSB0aGlzLmVxdWF0ZVRlcm0odGVybSk7XG5cbiAgICAgIGlmICghdGVybUVxdWF0ZXMpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZGlzam9pbnRGcm9tO1xuICB9XG5cbiAgaXNJbml0aWFsbHlHcm91bmRlZChjb250ZXh0KSB7XG4gICAgY29uc3QgaW5pdGlhbGx5R3JvdW5kZWRUZXJtcyA9IHRoaXMuZ2V0SW5pdGlhbGx5R3JvdW5kZWRUZXJtcyhjb250ZXh0KSxcbiAgICAgICAgICBpbml0aWFsbHlHcm91bmRlZFRlcm1zTGVuZ3RoID0gaW5pdGlhbGx5R3JvdW5kZWRUZXJtcy5sZW5ndGgsXG4gICAgICAgICAgaW5pdGlhbGx5R3JvdW5kZWQgPSAoaW5pdGlhbGx5R3JvdW5kZWRUZXJtc0xlbmd0aCA+IDApO1xuXG4gICAgcmV0dXJuIGluaXRpYWxseUdyb3VuZGVkO1xuICB9XG5cbiAgaXNJbXBsaWNpdGx5R3JvdW5kZWQoZGVmaW5lZFZhcmlhYmxlcywgY29udGV4dCkge1xuICAgIGNvbnN0IGltcGxpY2l0bHlHcm91bmRlZFRlcm1zID0gdGhpcy5nZXRJbXBsaWNpdGx5R3JvdW5kZWRUZXJtcyhkZWZpbmVkVmFyaWFibGVzLCBjb250ZXh0KSxcbiAgICAgICAgICBpbXBsaWNpdGx5R3JvdW5kZWRUZXJtc0xlbmd0aCA9IGltcGxpY2l0bHlHcm91bmRlZFRlcm1zLmxlbmd0aCxcbiAgICAgICAgICBpbXBsaWNpdGx5R3JvdW5kZWQgPSAoaW1wbGljaXRseUdyb3VuZGVkVGVybXNMZW5ndGggPiAwKTtcblxuICAgIHJldHVybiBpbXBsaWNpdGx5R3JvdW5kZWQ7XG4gIH1cblxuICBlcXVhdGVUZXJtKHRlcm0pIHtcbiAgICBjb25zdCB0ZXJtQSA9IHRlcm0sIC8vL1xuICAgICAgICAgIHRlcm1FcXVhdGVzID0gdGhpcy5zb21lVGVybSgodGVybSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGVybUIgPSB0ZXJtLCAvLy9cbiAgICAgICAgICAgICAgICAgIHRlcm1BRXF1YWxUb1Rlcm1CID0gdGVybUEuaXNFcXVhbFRvKHRlcm1CKTtcblxuICAgICAgICAgICAgaWYgKHRlcm1BRXF1YWxUb1Rlcm1CKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgcmV0dXJuIHRlcm1FcXVhdGVzO1xuICB9XG5cbiAgZXF1YXRlVGVybXModGVybXMpIHtcbiAgICBjb25zdCB0ZXJtc0VxdWF0ZSA9IHRlcm1zLmV2ZXJ5KCh0ZXJtKSA9PiB7XG4gICAgICBjb25zdCB0ZXJtRXF1YXRlcyA9IHRoaXMuZXF1YXRlVGVybSh0ZXJtKTtcblxuICAgICAgaWYgKHRlcm1FcXVhdGVzKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRlcm1zRXF1YXRlO1xuICB9XG5cbiAgbWF0Y2hUZXJtTm9kZSh0ZXJtTm9kZSkge1xuICAgIGNvbnN0IHRlcm1Ob2RlTWF0Y2hlcyA9IHRoaXMudGVybXMuc29tZSgodGVybSkgPT4ge1xuICAgICAgY29uc3QgdGVybU5vZGVNYXRjaGVzID0gdGVybS5tYXRjaFRlcm1Ob2RlKHRlcm1Ob2RlKTtcblxuICAgICAgaWYgKHRlcm1Ob2RlTWF0Y2hlcykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB0ZXJtTm9kZU1hdGNoZXM7XG4gIH1cblxuICBjb21iaW5lVGVybXModGVybXMpIHtcbiAgICBjb25zdCBjb21iaW5lZFRlcm1zID0gW1xuICAgICAgLi4udGhpcy50ZXJtcyxcbiAgICAgIC4uLnRlcm1zXG4gICAgXTtcblxuICAgIGNvbXByZXNzKGNvbWJpbmVkVGVybXMsIChjb21iaW5lZFRlcm1BLCBjb21iaW5lZFRlcm1CKSA9PiB7XG4gICAgICBjb25zdCBjb21iaW5lZFRlcm1FcXVhbFRvQ29tYmluZWRUZXJtQiA9IGNvbWJpbmVkVGVybUEuaXNFcXVhbFRvKGNvbWJpbmVkVGVybUIpO1xuXG4gICAgICBpZiAoIWNvbWJpbmVkVGVybUVxdWFsVG9Db21iaW5lZFRlcm1CKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNvbWJpbmVkVGVybXM7XG4gIH1cblxuICBtZXJnZWRXaXRoKGVxdWl2YWxlbmNlLCBjb250ZXh0KSB7XG4gICAgaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgIGxldCB0ZXJtcztcblxuICAgICAgdGVybXMgPSBlcXVpdmFsZW5jZS5nZXRUZXJtcygpO1xuXG4gICAgICBjb25zdCBjb21iaW5lZFRlcm1zID0gdGhpcy5jb21iaW5lVGVybXModGVybXMpO1xuXG4gICAgICB0ZXJtcyA9IGNvbWJpbmVkVGVybXM7ICAvLy9cblxuICAgICAgY29uc3QgZXF1aXZhbGVuY2VTdHJpbmcgPSBlcXVpdmFsZW5jZVN0cmluZ0Zyb21UZXJtcyh0ZXJtcyksXG4gICAgICAgICAgICBzdHJpbmcgPSBlcXVpdmFsZW5jZVN0cmluZywgIC8vL1xuICAgICAgICAgICAgZXF1aXZhbGVuY2VOb2RlID0gaW5zdGFudGlhdGVFcXVpdmFsZW5jZShzdHJpbmcsIGNvbnRleHQpO1xuXG4gICAgICBlcXVpdmFsZW5jZSA9IGVxdWl2YWxlbmNlRnJvbUVxdWl2YWxlbmNlTm9kZShlcXVpdmFsZW5jZU5vZGUsIGNvbnRleHQpO1xuICAgIH0sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGVxdWl2YWxlbmNlO1xuICB9XG5cbiAgc29tZU90aGVyVGVybSh0ZXJtLCBjYWxsYmFjaykge1xuICAgIGNvbnN0IHRlcm1BID0gdGVybSwgLy8vXG4gICAgICAgICAgdGVybXMgPSB0aGlzLnRlcm1zLmZpbHRlcigodGVybSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGVybUIgPSB0ZXJtLCAvLy9cbiAgICAgICAgICAgICAgICAgIHRlcm1BRXF1YWxUb1Rlcm1CID0gdGVybUEuaXNFcXVhbFRvKHRlcm1CKTtcblxuICAgICAgICAgICAgaWYgKCF0ZXJtQUVxdWFsVG9UZXJtQikge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICByZXN1bHQgPSB0ZXJtcy5zb21lKGNhbGxiYWNrKTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBzb21lVGVybShjYWxsYmFjaykgeyByZXR1cm4gdGhpcy50ZXJtcy5zb21lKGNhbGxiYWNrKTsgfVxuXG4gIGV2ZXJ5VGVybShjYWxsYmFjaykgeyByZXR1cm4gdGhpcy50ZXJtcy5ldmVyeShjYWxsYmFjayk7IH1cblxuICBzdGF0aWMgbmFtZSA9IFwiRXF1aXZhbGVuY2VcIjtcblxuICBzdGF0aWMgZnJvbUVxdWFsaXR5KGVxdWFsaXR5LCBjb250ZXh0KSB7XG4gICAgbGV0IGVxdWl2YWxlbmNlO1xuXG4gICAgbGV0IHRlcm1zO1xuXG4gICAgdGVybXMgPSBlcXVhbGl0eS5nZXRUZXJtcygpO1xuXG4gICAgdGVybXMgPSB0ZXJtcy5tYXAoKHRlcm0pID0+IHsgLy8vXG4gICAgICB0ZXJtID0gc3RyaXBCcmFja2V0c0Zyb21UZXJtKHRlcm0sIGNvbnRleHQpO1xuXG4gICAgICByZXR1cm4gdGVybTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGZpcnN0VGVybSA9IGZpcnN0KHRlcm1zKSxcbiAgICAgICAgICBzZWNvbmRUZXJtID0gc2Vjb25kKHRlcm1zKSxcbiAgICAgICAgICBmaXJzdFRlcm1FcXVhbFRvU2Vjb25kVGVybSA9IGZpcnN0VGVybS5pc0VxdWFsVG8oc2Vjb25kVGVybSk7XG5cbiAgICBpZiAoZmlyc3RUZXJtRXF1YWxUb1NlY29uZFRlcm0pIHtcbiAgICAgIGNvbnN0IHRlcm0gPSBmaXJzdFRlcm07IC8vL1xuXG4gICAgICB0ZXJtcyA9IFtcbiAgICAgICAgdGVybVxuICAgICAgXTtcbiAgICB9XG5cbiAgICBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgZXF1aXZhbGVuY2VTdHJpbmcgPSBlcXVpdmFsZW5jZVN0cmluZ0Zyb21UZXJtcyh0ZXJtcyksXG4gICAgICAgICAgICBzdHJpbmcgPSBlcXVpdmFsZW5jZVN0cmluZywgIC8vL1xuICAgICAgICAgICAgZXF1aXZhbGVuY2VOb2RlID0gaW5zdGFudGlhdGVFcXVpdmFsZW5jZShzdHJpbmcsIGNvbnRleHQpO1xuXG4gICAgICBlcXVpdmFsZW5jZSA9IGVxdWl2YWxlbmNlRnJvbUVxdWl2YWxlbmNlTm9kZShlcXVpdmFsZW5jZU5vZGUsIGNvbnRleHQpO1xuICAgIH0sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGVxdWl2YWxlbmNlO1xuICB9XG59KTtcbiJdLCJuYW1lcyI6WyJmaXJzdCIsInNlY29uZCIsImNvbXByZXNzIiwiYXJyYXlVdGlsaXRpZXMiLCJkZWZpbmUiLCJFcXVpdmFsZW5jZSIsIkVsZW1lbnQiLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJ0ZXJtcyIsImdldFRlcm1zIiwiZ2V0RXF1aXZhbGVuY2VOb2RlIiwiZ2V0Tm9kZSIsImVxdWl2YWxlbmNlTm9kZSIsImdldEdyb3VuZGVkVGVybXMiLCJkZWZpbmVkVmFyaWFibGVzIiwiZ3JvdW5kZWRUZXJtcyIsImZvckVhY2giLCJ0ZXJtIiwidGVybUdyb3VuZGVkIiwiaXNHcm91bmRlZCIsInRlcm1NYXRjaGVzR3JvdW5kZWRUZXJtIiwic29tZSIsImdyb3VuZGVkVGVybSIsImdyb3VuZGVkVGVybU5vZGUiLCJncm91bmRlZFRlcm1Ob2RlTWF0Y2hlcyIsIm1hdGNoVGVybU5vZGUiLCJwdXNoIiwiZ2V0SW5pdGlhbGx5R3JvdW5kZWRUZXJtcyIsImluaXRpYWxseUdyb3VuZGVkVGVybXMiLCJyZWR1Y2UiLCJ0ZXJtSW5pdGlhbGx5R3JvdW5kZWQiLCJpc0luaXRpYWxseUdyb3VuZGVkIiwiaW5pdGlhbGx5R3JvdW5kZWRUZXJtIiwiZ2V0SW1wbGljaXRseUdyb3VuZGVkVGVybXMiLCJpbXBsaWNpdGx5R3JvdW5kZWRUZXJtcyIsInRlcm1JbXBsaWNpdGx5R3JvdW5kZWQiLCJpc0ltcGxpY2l0bHlHcm91bmRlZCIsImltcGxpY2l0bHlHcm91bmRlZFRlcm0iLCJpc0Rpc2pvaW50RnJvbSIsImVxdWl2YWxlbmNlIiwiZGlzam9pbnRGcm9tIiwiZXZlcnlUZXJtIiwidGVybUVxdWF0ZXMiLCJlcXVhdGVUZXJtIiwiaW5pdGlhbGx5R3JvdW5kZWRUZXJtc0xlbmd0aCIsImxlbmd0aCIsImluaXRpYWxseUdyb3VuZGVkIiwiaW1wbGljaXRseUdyb3VuZGVkVGVybXNMZW5ndGgiLCJpbXBsaWNpdGx5R3JvdW5kZWQiLCJ0ZXJtQSIsInNvbWVUZXJtIiwidGVybUIiLCJ0ZXJtQUVxdWFsVG9UZXJtQiIsImlzRXF1YWxUbyIsImVxdWF0ZVRlcm1zIiwidGVybXNFcXVhdGUiLCJldmVyeSIsInRlcm1Ob2RlIiwidGVybU5vZGVNYXRjaGVzIiwiY29tYmluZVRlcm1zIiwiY29tYmluZWRUZXJtcyIsImNvbWJpbmVkVGVybUEiLCJjb21iaW5lZFRlcm1CIiwiY29tYmluZWRUZXJtRXF1YWxUb0NvbWJpbmVkVGVybUIiLCJtZXJnZWRXaXRoIiwiaW5zdGFudGlhdGUiLCJlcXVpdmFsZW5jZVN0cmluZyIsImVxdWl2YWxlbmNlU3RyaW5nRnJvbVRlcm1zIiwiaW5zdGFudGlhdGVFcXVpdmFsZW5jZSIsImVxdWl2YWxlbmNlRnJvbUVxdWl2YWxlbmNlTm9kZSIsInNvbWVPdGhlclRlcm0iLCJjYWxsYmFjayIsImZpbHRlciIsInJlc3VsdCIsIm5hbWUiLCJmcm9tRXF1YWxpdHkiLCJlcXVhbGl0eSIsIm1hcCIsInN0cmlwQnJhY2tldHNGcm9tVGVybSIsImZpcnN0VGVybSIsInNlY29uZFRlcm0iLCJmaXJzdFRlcm1FcXVhbFRvU2Vjb25kVGVybSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JB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
@@ -152,7 +152,7 @@ const _default = (0, _elements.define)(class Step extends _fact.default {
152
152
  if (this.signatureAssertion !== null) {
153
153
  const stepString = this.getString(), signatureAssertionString = this.signatureAssertion.getString();
154
154
  context.trace(`Validating the '${stepString}' step's '${signatureAssertionString}' signature assertion...`);
155
- (0, _state.derive)((state)=>{
155
+ (0, _state.declare)((state)=>{
156
156
  signatureAssertionValidates = this.signatureAssertion.validate(state, context, (signatureAssertion, contwext)=>{
157
157
  let validates;
158
158
  this.signatureAssertion = signatureAssertion;
@@ -184,4 +184,4 @@ const _default = (0, _elements.define)(class Step extends _fact.default {
184
184
  static name = "Step";
185
185
  });
186
186
 
187
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2ZhY3Qvc3RlcC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5pbXBvcnQgeyBicmVha1BvaW50VXRpbGl0aWVzLCBjb250aW51YXRpb25VdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCBGYWN0IGZyb20gXCIuLi9mYWN0XCI7XG5cbmltcG9ydCB7IGFsbCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvY29udGludWF0aW9uXCI7XG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGF0dGVtcHQgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcbmltcG9ydCB7IHVuaWZ5U3RlcHMgfSBmcm9tIFwiLi4vLi4vcHJvY2Vzcy91bmlmaWNhdGlvblwiO1xuaW1wb3J0IHsgZGVyaXZlLCBkZWNsYXJlIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9zdGF0ZVwiO1xuXG5jb25zdCB7IGJyZWFrYWJsZSB9ID0gYnJlYWtQb2ludFV0aWxpdGllcyxcbiAgICAgIHsgYmFja3dhcmRzU29tZSB9ID0gYXJyYXlVdGlsaXRpZXMsXG4gICAgICB7IGFzeW5jaHJvbm91c1NvbWUgfSA9IGNvbnRpbnVhdGlvblV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIFN0ZXAgZXh0ZW5kcyBGYWN0IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnQsIHJlZmVyZW5jZSwgcHJvY2VkdXJlQ2FsbCwgc2NoZW1hQXNzZXJ0aW9uLCBzaWduYXR1cmVBc3NlcnRpb24pIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudCwgcmVmZXJlbmNlLCBwcm9jZWR1cmVDYWxsKTtcblxuICAgIHRoaXMuc2NoZW1hQXNzZXJ0aW9uID0gc2NoZW1hQXNzZXJ0aW9uO1xuICAgIHRoaXMuc2lnbmF0dXJlQXNzZXJ0aW9uID0gc2lnbmF0dXJlQXNzZXJ0aW9uO1xuICB9XG5cbiAgZ2V0U2NoZW1hQXNzZXJ0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnNjaGVtYUFzc2VydGlvbjtcbiAgfVxuXG4gIGdldFNpZ25hdHVyZUFzc2VydGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5zaWduYXR1cmVBc3NlcnRpb247XG4gIH1cblxuICBnZXRTdGVwTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgc3RlcE5vZGUgPSBub2RlOyAgLy8vXG5cbiAgICByZXR1cm4gc3RlcE5vZGU7XG4gIH1cblxuICBnZXRTdGF0ZW1lbnROb2RlKCkge1xuICAgIGNvbnN0IHN0YXRlbWVudCA9IHRoaXMuZ2V0U3RhdGVtZW50KCksXG4gICAgICAgICAgc3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudC5nZXROb2RlKCk7XG5cbiAgICByZXR1cm4gc3RhdGVtZW50Tm9kZTtcbiAgfVxuXG4gIGlzU3RlcCgpIHtcbiAgICBjb25zdCBzdGVwID0gdHJ1ZTtcblxuICAgIHJldHVybiBzdGVwO1xuICB9XG5cbiAgaWREZWNsYXJlZCgpIHtcbiAgICBjb25zdCBxdWFsaWZpZWQgPSB0aGlzLmlzUXVhbGlmaWVkKCksXG4gICAgICAgICAgZGVjbGFyZWQgPSBxdWFsaWZpZWQ7IC8vL1xuXG4gICAgcmV0dXJuIGRlY2xhcmVkO1xuICB9XG5cbiAgaXNRdWFsaWZpZWQoKSB7XG4gICAgY29uc3QgcXVhbGlmaWVkID0gKCh0aGlzLnJlZmVyZW5jZSAhPT0gbnVsbCkgfHwgKHRoaXMuc2NoZW1hQXNzZXJ0aW9uICE9PSBudWxsKSB8fCAodGhpcy5zaWduYXR1cmVBc3NlcnRpb24gIT09IG51bGwpKTtcblxuICAgIHJldHVybiBxdWFsaWZpZWQ7XG4gIH1cblxuICBpc1VucXVhbGlmaWVkKCkge1xuICAgIGNvbnN0IHF1YWxpZmllZCA9IHRoaXMuaXNRdWFsaWZpZWQoKSxcbiAgICAgICAgICB1bnF1YWxpZmllZCA9ICFxdWFsaWZpZWQ7XG5cbiAgICByZXR1cm4gdW5xdWFsaWZpZWQ7XG4gIH1cblxuICBpc05vbnNlbnNpY2FsKCkge1xuICAgIGNvbnN0IG5vbnNlbnNpY2FsID0gKHRoaXMuc3RhdGVtZW50ID09PSBudWxsKTtcblxuICAgIHJldHVybiBub25zZW5zaWNhbDtcbiAgfVxuXG4gIGNvbXBhcmVGYWN0T3JTdWJwcm9vZnMoZmFjdE9yU3VicHJvb2YsIGNvbnRleHQpIHtcbiAgICBsZXQgY29tcGFyZXNUb0ZhY3RPclN1YnByb29mcztcblxuICAgIGNvbnN0IHN0ZXAgPSB0aGlzOyAvLy9cblxuICAgIGNvbXBhcmVzVG9GYWN0T3JTdWJwcm9vZnMgPSBiYWNrd2FyZHNTb21lKGZhY3RPclN1YnByb29mLCAoZmFjdE9yU3VicHJvb2YpID0+IHtcbiAgICAgIGNvbnN0IGZhY3RPclN1YnByb29mQ29tcGFyZXNUb1N0YXRlbWVudCA9IGZhY3RPclN1YnByb29mLmNvbXBhcmVTdGVwKHN0ZXAsIGNvbnRleHQpO1xuXG4gICAgICBpZiAoZmFjdE9yU3VicHJvb2ZDb21wYXJlc1RvU3RhdGVtZW50KSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNvbXBhcmVzVG9GYWN0T3JTdWJwcm9vZnM7XG4gIH1cblxuICB2ZXJpZnkgPSBicmVha2FibGUoZnVuY3Rpb24gKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGxldCB2ZXJpZmllcyA9IGZhbHNlO1xuXG4gICAgY29uc3Qgc3RlcFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcC4uLmApO1xuXG4gICAgY29uc3Qgbm9uc2Vuc2ljYWwgPSB0aGlzLmlzTm9uc2Vuc2ljYWwoKTtcblxuICAgIGlmIChub25zZW5zaWNhbCkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgVW5hYmxlIHRvIHZlcmlmeSB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgYmVjYXVzZSBpdCBpcyBub25zZW5zZS5gKTtcblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2ZXJpZmllcywgY29udGV4dCk7XG4gICAgfVxuXG4gICAgbGV0IHZhbGlkYXRlcztcblxuICAgIGNvbnN0IGRlY2xhcmVkID0gdGhpcy5pZERlY2xhcmVkKCk7XG5cbiAgICAoZGVjbGFyZWQgPyBkZWNsYXJlIDogZGVyaXZlKSgoc3RhdGUpID0+IHtcbiAgICAgIHZhbGlkYXRlcyA9IHRoaXMudmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIChzdGVwLCBjb250ZXh0KSA9PiB0cnVlKTtcbiAgICB9KTtcblxuICAgIGlmICghdmFsaWRhdGVzKSB7XG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHZlcmlmaWVzLCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy51bmlmeSgodW5pZmllcykgPT4ge1xuICAgICAgaWYgKHVuaWZpZXMpIHtcbiAgICAgICAgdmVyaWZpZXMgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodmVyaWZpZXMpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHZlcmlmaWVzLCBjb250ZXh0KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgdmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGxldCB2YWxpZGF0ZXM7XG5cbiAgICBjb25zdCBzdGVwU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKSwgIC8vL1xuICAgICAgICAgIHNwZWNpZmljQ29udGV4dCA9IGNvbnRleHQ7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwLi4uYCk7XG5cbiAgICBjb25zdCBzdGVwID0gdGhpczsgIC8vL1xuXG4gICAgYXR0ZW1wdCgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgdmFsaWRhdGVTdGF0ZW1lbnQgPSB0aGlzLnZhbGlkYXRlU3RhdGVtZW50LmJpbmQodGhpcyksXG4gICAgICAgICAgICB2YWxpZGF0ZVJlZmVyZW5jZSA9IHRoaXMudmFsaWRhdGVSZWZlcmVuY2UuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIHZhbGlkYXRlU2NoZW1hQXNzZXJ0aW9uID0gdGhpcy52YWxpZGF0ZVNjaGVtYUFzc2VydGlvbi5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgdmFsaWRhdGVTaWduYXR1cmVBc3NlcnRpb24gPSB0aGlzLnZhbGlkYXRlU2lnbmF0dXJlQXNzZXJ0aW9uLmJpbmQodGhpcyk7XG5cbiAgICAgIHZhbGlkYXRlcyA9IGFsbChbXG4gICAgICAgIHZhbGlkYXRlU3RhdGVtZW50LFxuICAgICAgICB2YWxpZGF0ZVJlZmVyZW5jZSxcbiAgICAgICAgdmFsaWRhdGVTY2hlbWFBc3NlcnRpb24sXG4gICAgICAgIHZhbGlkYXRlU2lnbmF0dXJlQXNzZXJ0aW9uXG4gICAgICBdLCBzdGF0ZSwgY29udGV4dCwgKHN0YXRlLCBjb250ZXh0KSA9PiB7XG4gICAgICAgIGxldCB2YWxpZGF0ZXM7XG5cbiAgICAgICAgdGhpcy5jb21taXQoY29udGV4dCk7XG5cbiAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dDsgIC8vL1xuXG4gICAgICAgIHZhbGlkYXRlcyA9IGNvbnRpbnVhdGlvbihzdGVwLCBjb250ZXh0KTtcblxuICAgICAgICByZXR1cm4gdmFsaWRhdGVzO1xuICAgICAgfSk7XG4gICAgfSwgY29udGV4dCk7XG5cbiAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0OyAgLy8vXG5cbiAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwLmApO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0ZXM7XG4gIH1cblxuICB2YWxpZGF0ZVNjaGVtYUFzc2VydGlvbihzdGF0ZSwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgbGV0IHNjaGVtYUFzc2VydGlvblZhbGlkYXRlcztcblxuICAgIGlmICh0aGlzLnNjaGVtYUFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc3RlcFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksICAvLy9cbiAgICAgICAgICAgIHNjaGVtYUFzc2VydGlvblN0cmluZyA9IHRoaXMuc2NoZW1hQXNzZXJ0aW9uLmdldFN0cmluZygpO1xuXG4gICAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCdzICcke3NjaGVtYUFzc2VydGlvblN0cmluZ30nIHNjaGVtYSBhc3NlcnRpb24uLi5gKTtcblxuICAgICAgZGVyaXZlKChzdGF0ZSkgPT4ge1xuICAgICAgICBzY2hlbWFBc3NlcnRpb25WYWxpZGF0ZXMgPSB0aGlzLnNjaGVtYUFzc2VydGlvbi52YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgKHNjaGVtYUFzc2VydGlvbiwgY29udGV4dCkgPT4ge1xuICAgICAgICAgIGxldCB2YWxpZGF0ZXM7XG5cbiAgICAgICAgICB0aGlzLnNjaGVtYUFzc2VydGlvbiA9IHNjaGVtYUFzc2VydGlvbjtcblxuICAgICAgICAgIHZhbGlkYXRlcyA9IGNvbnRpbnVhdGlvbihzdGF0ZSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gdmFsaWRhdGVzO1xuICAgICAgICB9KTtcbiAgICAgIH0sIHN0YXRlKTtcblxuICAgICAgaWYgKHNjaGVtYUFzc2VydGlvblZhbGlkYXRlcykge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwJ3MgJyR7c2NoZW1hQXNzZXJ0aW9uU3RyaW5nfScgc2NoZW1hIGFzc2VydGlvbi5gKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc2NoZW1hQXNzZXJ0aW9uVmFsaWRhdGVzID0gY29udGludWF0aW9uKHN0YXRlLCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2NoZW1hQXNzZXJ0aW9uVmFsaWRhdGVzO1xuICB9XG5cbiAgdmFsaWRhdGVTaWduYXR1cmVBc3NlcnRpb24oc3RhdGUsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGxldCBzaWduYXR1cmVBc3NlcnRpb25WYWxpZGF0ZXM7XG5cbiAgICBpZiAodGhpcy5zaWduYXR1cmVBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHN0ZXBTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLCAgLy8vXG4gICAgICAgICAgICBzaWduYXR1cmVBc3NlcnRpb25TdHJpbmcgPSB0aGlzLnNpZ25hdHVyZUFzc2VydGlvbi5nZXRTdHJpbmcoKTtcblxuICAgICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAncyAnJHtzaWduYXR1cmVBc3NlcnRpb25TdHJpbmd9JyBzaWduYXR1cmUgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICAgIGRlcml2ZSgoc3RhdGUpID0+IHtcbiAgICAgICAgc2lnbmF0dXJlQXNzZXJ0aW9uVmFsaWRhdGVzID0gdGhpcy5zaWduYXR1cmVBc3NlcnRpb24udmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIChzaWduYXR1cmVBc3NlcnRpb24sIGNvbnR3ZXh0KSA9PiB7XG4gICAgICAgICAgbGV0IHZhbGlkYXRlcztcblxuICAgICAgICAgIHRoaXMuc2lnbmF0dXJlQXNzZXJ0aW9uID0gc2lnbmF0dXJlQXNzZXJ0aW9uO1xuXG4gICAgICAgICAgdmFsaWRhdGVzID0gY29udGludWF0aW9uKHN0YXRlLCBjb250ZXh0KTtcblxuICAgICAgICAgIHJldHVybiB2YWxpZGF0ZXM7XG4gICAgICAgIH0pO1xuICAgICAgfSwgc3RhdGUpO1xuXG4gICAgICBpZiAoc2lnbmF0dXJlQXNzZXJ0aW9uVmFsaWRhdGVzKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAncyAnJHtzaWduYXR1cmVBc3NlcnRpb25TdHJpbmd9JyBzaWduYXR1cmUgYXNzZXJ0aW9uLmApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzaWduYXR1cmVBc3NlcnRpb25WYWxpZGF0ZXMgPSBjb250aW51YXRpb24oc3RhdGUsIGNvbnRleHQpO1xuICAgIH1cblxuICAgIHJldHVybiBzaWduYXR1cmVBc3NlcnRpb25WYWxpZGF0ZXM7XG4gIH1cblxuICB1bmlmeShjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgc3RlcFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwLi4uYCk7XG5cbiAgICBjb25zdCBzdGVwID0gdGhpczsgIC8vL1xuXG4gICAgcmV0dXJuIGFzeW5jaHJvbm91c1NvbWUodW5pZnlTdGVwcywgKHVuaWZ5U3RlcCwgY29udGludWF0aW9uKSA9PiB7XG4gICAgICByZXR1cm4gdW5pZnlTdGVwKHN0ZXAsIGNvbnRleHQsIGNvbnRpbnVhdGlvbik7XG4gICAgfSwgKHVuaWZpZXMpID0+IHtcbiAgICAgIGlmICh1bmlmaWVzKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHVuaWZpZXMpO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIlN0ZXBcIjtcbn0pO1xuIl0sIm5hbWVzIjpbImJyZWFrYWJsZSIsImJyZWFrUG9pbnRVdGlsaXRpZXMiLCJiYWNrd2FyZHNTb21lIiwiYXJyYXlVdGlsaXRpZXMiLCJhc3luY2hyb25vdXNTb21lIiwiY29udGludWF0aW9uVXRpbGl0aWVzIiwiZGVmaW5lIiwiU3RlcCIsIkZhY3QiLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJzdGF0ZW1lbnQiLCJyZWZlcmVuY2UiLCJwcm9jZWR1cmVDYWxsIiwic2NoZW1hQXNzZXJ0aW9uIiwic2lnbmF0dXJlQXNzZXJ0aW9uIiwiZ2V0U2NoZW1hQXNzZXJ0aW9uIiwiZ2V0U2lnbmF0dXJlQXNzZXJ0aW9uIiwiZ2V0U3RlcE5vZGUiLCJnZXROb2RlIiwic3RlcE5vZGUiLCJnZXRTdGF0ZW1lbnROb2RlIiwiZ2V0U3RhdGVtZW50Iiwic3RhdGVtZW50Tm9kZSIsImlzU3RlcCIsInN0ZXAiLCJpZERlY2xhcmVkIiwicXVhbGlmaWVkIiwiaXNRdWFsaWZpZWQiLCJkZWNsYXJlZCIsImlzVW5xdWFsaWZpZWQiLCJ1bnF1YWxpZmllZCIsImlzTm9uc2Vuc2ljYWwiLCJub25zZW5zaWNhbCIsImNvbXBhcmVGYWN0T3JTdWJwcm9vZnMiLCJmYWN0T3JTdWJwcm9vZiIsImNvbXBhcmVzVG9GYWN0T3JTdWJwcm9vZnMiLCJmYWN0T3JTdWJwcm9vZkNvbXBhcmVzVG9TdGF0ZW1lbnQiLCJjb21wYXJlU3RlcCIsInZlcmlmeSIsImNvbnRpbnVhdGlvbiIsInZlcmlmaWVzIiwic3RlcFN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwiZGVidWciLCJ2YWxpZGF0ZXMiLCJkZWNsYXJlIiwiZGVyaXZlIiwic3RhdGUiLCJ2YWxpZGF0ZSIsInVuaWZ5IiwidW5pZmllcyIsInNwZWNpZmljQ29udGV4dCIsImF0dGVtcHQiLCJ2YWxpZGF0ZVN0YXRlbWVudCIsImJpbmQiLCJ2YWxpZGF0ZVJlZmVyZW5jZSIsInZhbGlkYXRlU2NoZW1hQXNzZXJ0aW9uIiwidmFsaWRhdGVTaWduYXR1cmVBc3NlcnRpb24iLCJhbGwiLCJjb21taXQiLCJzY2hlbWFBc3NlcnRpb25WYWxpZGF0ZXMiLCJzY2hlbWFBc3NlcnRpb25TdHJpbmciLCJzaWduYXR1cmVBc3NlcnRpb25WYWxpZGF0ZXMiLCJzaWduYXR1cmVBc3NlcnRpb25TdHJpbmciLCJjb250d2V4dCIsImdldENvbnRleHQiLCJ1bmlmeVN0ZXBzIiwidW5pZnlTdGVwIiwibmFtZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBaUJBOzs7ZUFBQTs7OzJCQWYrQjtnQ0FDNEI7NkRBRTFDOzhCQUVHOzBCQUNHO3lCQUNDOzZCQUNHO3VCQUNLOzs7Ozs7QUFFaEMsTUFBTSxFQUFFQSxTQUFTLEVBQUUsR0FBR0MsbUNBQW1CLEVBQ25DLEVBQUVDLGFBQWEsRUFBRSxHQUFHQyx5QkFBYyxFQUNsQyxFQUFFQyxnQkFBZ0IsRUFBRSxHQUFHQyxxQ0FBcUI7TUFFbEQsV0FBZUMsSUFBQUEsZ0JBQU0sRUFBQyxNQUFNQyxhQUFhQyxhQUFJO0lBQzNDLFlBQVlDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLFVBQVUsRUFBRUMsU0FBUyxFQUFFQyxTQUFTLEVBQUVDLGFBQWEsRUFBRUMsZUFBZSxFQUFFQyxrQkFBa0IsQ0FBRTtRQUN2SCxLQUFLLENBQUNSLFNBQVNDLFFBQVFDLE1BQU1DLFlBQVlDLFdBQVdDLFdBQVdDO1FBRS9ELElBQUksQ0FBQ0MsZUFBZSxHQUFHQTtRQUN2QixJQUFJLENBQUNDLGtCQUFrQixHQUFHQTtJQUM1QjtJQUVBQyxxQkFBcUI7UUFDbkIsT0FBTyxJQUFJLENBQUNGLGVBQWU7SUFDN0I7SUFFQUcsd0JBQXdCO1FBQ3RCLE9BQU8sSUFBSSxDQUFDRixrQkFBa0I7SUFDaEM7SUFFQUcsY0FBYztRQUNaLE1BQU1ULE9BQU8sSUFBSSxDQUFDVSxPQUFPLElBQ25CQyxXQUFXWCxNQUFPLEdBQUc7UUFFM0IsT0FBT1c7SUFDVDtJQUVBQyxtQkFBbUI7UUFDakIsTUFBTVYsWUFBWSxJQUFJLENBQUNX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
187
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2ZhY3Qvc3RlcC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5pbXBvcnQgeyBicmVha1BvaW50VXRpbGl0aWVzLCBjb250aW51YXRpb25VdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCBGYWN0IGZyb20gXCIuLi9mYWN0XCI7XG5cbmltcG9ydCB7IGFsbCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvY29udGludWF0aW9uXCI7XG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGF0dGVtcHQgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcbmltcG9ydCB7IHVuaWZ5U3RlcHMgfSBmcm9tIFwiLi4vLi4vcHJvY2Vzcy91bmlmaWNhdGlvblwiO1xuaW1wb3J0IHsgZGVyaXZlLCBkZWNsYXJlIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9zdGF0ZVwiO1xuXG5jb25zdCB7IGJyZWFrYWJsZSB9ID0gYnJlYWtQb2ludFV0aWxpdGllcyxcbiAgICAgIHsgYmFja3dhcmRzU29tZSB9ID0gYXJyYXlVdGlsaXRpZXMsXG4gICAgICB7IGFzeW5jaHJvbm91c1NvbWUgfSA9IGNvbnRpbnVhdGlvblV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIFN0ZXAgZXh0ZW5kcyBGYWN0IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnQsIHJlZmVyZW5jZSwgcHJvY2VkdXJlQ2FsbCwgc2NoZW1hQXNzZXJ0aW9uLCBzaWduYXR1cmVBc3NlcnRpb24pIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudCwgcmVmZXJlbmNlLCBwcm9jZWR1cmVDYWxsKTtcblxuICAgIHRoaXMuc2NoZW1hQXNzZXJ0aW9uID0gc2NoZW1hQXNzZXJ0aW9uO1xuICAgIHRoaXMuc2lnbmF0dXJlQXNzZXJ0aW9uID0gc2lnbmF0dXJlQXNzZXJ0aW9uO1xuICB9XG5cbiAgZ2V0U2NoZW1hQXNzZXJ0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnNjaGVtYUFzc2VydGlvbjtcbiAgfVxuXG4gIGdldFNpZ25hdHVyZUFzc2VydGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5zaWduYXR1cmVBc3NlcnRpb247XG4gIH1cblxuICBnZXRTdGVwTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgc3RlcE5vZGUgPSBub2RlOyAgLy8vXG5cbiAgICByZXR1cm4gc3RlcE5vZGU7XG4gIH1cblxuICBnZXRTdGF0ZW1lbnROb2RlKCkge1xuICAgIGNvbnN0IHN0YXRlbWVudCA9IHRoaXMuZ2V0U3RhdGVtZW50KCksXG4gICAgICAgICAgc3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudC5nZXROb2RlKCk7XG5cbiAgICByZXR1cm4gc3RhdGVtZW50Tm9kZTtcbiAgfVxuXG4gIGlzU3RlcCgpIHtcbiAgICBjb25zdCBzdGVwID0gdHJ1ZTtcblxuICAgIHJldHVybiBzdGVwO1xuICB9XG5cbiAgaWREZWNsYXJlZCgpIHtcbiAgICBjb25zdCBxdWFsaWZpZWQgPSB0aGlzLmlzUXVhbGlmaWVkKCksXG4gICAgICAgICAgZGVjbGFyZWQgPSBxdWFsaWZpZWQ7IC8vL1xuXG4gICAgcmV0dXJuIGRlY2xhcmVkO1xuICB9XG5cbiAgaXNRdWFsaWZpZWQoKSB7XG4gICAgY29uc3QgcXVhbGlmaWVkID0gKCh0aGlzLnJlZmVyZW5jZSAhPT0gbnVsbCkgfHwgKHRoaXMuc2NoZW1hQXNzZXJ0aW9uICE9PSBudWxsKSB8fCAodGhpcy5zaWduYXR1cmVBc3NlcnRpb24gIT09IG51bGwpKTtcblxuICAgIHJldHVybiBxdWFsaWZpZWQ7XG4gIH1cblxuICBpc1VucXVhbGlmaWVkKCkge1xuICAgIGNvbnN0IHF1YWxpZmllZCA9IHRoaXMuaXNRdWFsaWZpZWQoKSxcbiAgICAgICAgICB1bnF1YWxpZmllZCA9ICFxdWFsaWZpZWQ7XG5cbiAgICByZXR1cm4gdW5xdWFsaWZpZWQ7XG4gIH1cblxuICBpc05vbnNlbnNpY2FsKCkge1xuICAgIGNvbnN0IG5vbnNlbnNpY2FsID0gKHRoaXMuc3RhdGVtZW50ID09PSBudWxsKTtcblxuICAgIHJldHVybiBub25zZW5zaWNhbDtcbiAgfVxuXG4gIGNvbXBhcmVGYWN0T3JTdWJwcm9vZnMoZmFjdE9yU3VicHJvb2YsIGNvbnRleHQpIHtcbiAgICBsZXQgY29tcGFyZXNUb0ZhY3RPclN1YnByb29mcztcblxuICAgIGNvbnN0IHN0ZXAgPSB0aGlzOyAvLy9cblxuICAgIGNvbXBhcmVzVG9GYWN0T3JTdWJwcm9vZnMgPSBiYWNrd2FyZHNTb21lKGZhY3RPclN1YnByb29mLCAoZmFjdE9yU3VicHJvb2YpID0+IHtcbiAgICAgIGNvbnN0IGZhY3RPclN1YnByb29mQ29tcGFyZXNUb1N0YXRlbWVudCA9IGZhY3RPclN1YnByb29mLmNvbXBhcmVTdGVwKHN0ZXAsIGNvbnRleHQpO1xuXG4gICAgICBpZiAoZmFjdE9yU3VicHJvb2ZDb21wYXJlc1RvU3RhdGVtZW50KSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNvbXBhcmVzVG9GYWN0T3JTdWJwcm9vZnM7XG4gIH1cblxuICB2ZXJpZnkgPSBicmVha2FibGUoZnVuY3Rpb24gKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGxldCB2ZXJpZmllcyA9IGZhbHNlO1xuXG4gICAgY29uc3Qgc3RlcFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcC4uLmApO1xuXG4gICAgY29uc3Qgbm9uc2Vuc2ljYWwgPSB0aGlzLmlzTm9uc2Vuc2ljYWwoKTtcblxuICAgIGlmIChub25zZW5zaWNhbCkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgVW5hYmxlIHRvIHZlcmlmeSB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgYmVjYXVzZSBpdCBpcyBub25zZW5zZS5gKTtcblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2ZXJpZmllcywgY29udGV4dCk7XG4gICAgfVxuXG4gICAgbGV0IHZhbGlkYXRlcztcblxuICAgIGNvbnN0IGRlY2xhcmVkID0gdGhpcy5pZERlY2xhcmVkKCk7XG5cbiAgICAoZGVjbGFyZWQgPyBkZWNsYXJlIDogZGVyaXZlKSgoc3RhdGUpID0+IHtcbiAgICAgIHZhbGlkYXRlcyA9IHRoaXMudmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIChzdGVwLCBjb250ZXh0KSA9PiB0cnVlKTtcbiAgICB9KTtcblxuICAgIGlmICghdmFsaWRhdGVzKSB7XG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHZlcmlmaWVzLCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy51bmlmeSgodW5pZmllcykgPT4ge1xuICAgICAgaWYgKHVuaWZpZXMpIHtcbiAgICAgICAgdmVyaWZpZXMgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodmVyaWZpZXMpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHZlcmlmaWVzLCBjb250ZXh0KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgdmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGxldCB2YWxpZGF0ZXM7XG5cbiAgICBjb25zdCBzdGVwU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKSwgIC8vL1xuICAgICAgICAgIHNwZWNpZmljQ29udGV4dCA9IGNvbnRleHQ7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwLi4uYCk7XG5cbiAgICBjb25zdCBzdGVwID0gdGhpczsgIC8vL1xuXG4gICAgYXR0ZW1wdCgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgdmFsaWRhdGVTdGF0ZW1lbnQgPSB0aGlzLnZhbGlkYXRlU3RhdGVtZW50LmJpbmQodGhpcyksXG4gICAgICAgICAgICB2YWxpZGF0ZVJlZmVyZW5jZSA9IHRoaXMudmFsaWRhdGVSZWZlcmVuY2UuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIHZhbGlkYXRlU2NoZW1hQXNzZXJ0aW9uID0gdGhpcy52YWxpZGF0ZVNjaGVtYUFzc2VydGlvbi5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgdmFsaWRhdGVTaWduYXR1cmVBc3NlcnRpb24gPSB0aGlzLnZhbGlkYXRlU2lnbmF0dXJlQXNzZXJ0aW9uLmJpbmQodGhpcyk7XG5cbiAgICAgIHZhbGlkYXRlcyA9IGFsbChbXG4gICAgICAgIHZhbGlkYXRlU3RhdGVtZW50LFxuICAgICAgICB2YWxpZGF0ZVJlZmVyZW5jZSxcbiAgICAgICAgdmFsaWRhdGVTY2hlbWFBc3NlcnRpb24sXG4gICAgICAgIHZhbGlkYXRlU2lnbmF0dXJlQXNzZXJ0aW9uXG4gICAgICBdLCBzdGF0ZSwgY29udGV4dCwgKHN0YXRlLCBjb250ZXh0KSA9PiB7XG4gICAgICAgIGxldCB2YWxpZGF0ZXM7XG5cbiAgICAgICAgdGhpcy5jb21taXQoY29udGV4dCk7XG5cbiAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dDsgIC8vL1xuXG4gICAgICAgIHZhbGlkYXRlcyA9IGNvbnRpbnVhdGlvbihzdGVwLCBjb250ZXh0KTtcblxuICAgICAgICByZXR1cm4gdmFsaWRhdGVzO1xuICAgICAgfSk7XG4gICAgfSwgY29udGV4dCk7XG5cbiAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0OyAgLy8vXG5cbiAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwLmApO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0ZXM7XG4gIH1cblxuICB2YWxpZGF0ZVNjaGVtYUFzc2VydGlvbihzdGF0ZSwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgbGV0IHNjaGVtYUFzc2VydGlvblZhbGlkYXRlcztcblxuICAgIGlmICh0aGlzLnNjaGVtYUFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc3RlcFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksICAvLy9cbiAgICAgICAgICAgIHNjaGVtYUFzc2VydGlvblN0cmluZyA9IHRoaXMuc2NoZW1hQXNzZXJ0aW9uLmdldFN0cmluZygpO1xuXG4gICAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCdzICcke3NjaGVtYUFzc2VydGlvblN0cmluZ30nIHNjaGVtYSBhc3NlcnRpb24uLi5gKTtcblxuICAgICAgZGVyaXZlKChzdGF0ZSkgPT4ge1xuICAgICAgICBzY2hlbWFBc3NlcnRpb25WYWxpZGF0ZXMgPSB0aGlzLnNjaGVtYUFzc2VydGlvbi52YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgKHNjaGVtYUFzc2VydGlvbiwgY29udGV4dCkgPT4ge1xuICAgICAgICAgIGxldCB2YWxpZGF0ZXM7XG5cbiAgICAgICAgICB0aGlzLnNjaGVtYUFzc2VydGlvbiA9IHNjaGVtYUFzc2VydGlvbjtcblxuICAgICAgICAgIHZhbGlkYXRlcyA9IGNvbnRpbnVhdGlvbihzdGF0ZSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gdmFsaWRhdGVzO1xuICAgICAgICB9KTtcbiAgICAgIH0sIHN0YXRlKTtcblxuICAgICAgaWYgKHNjaGVtYUFzc2VydGlvblZhbGlkYXRlcykge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwJ3MgJyR7c2NoZW1hQXNzZXJ0aW9uU3RyaW5nfScgc2NoZW1hIGFzc2VydGlvbi5gKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc2NoZW1hQXNzZXJ0aW9uVmFsaWRhdGVzID0gY29udGludWF0aW9uKHN0YXRlLCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2NoZW1hQXNzZXJ0aW9uVmFsaWRhdGVzO1xuICB9XG5cbiAgdmFsaWRhdGVTaWduYXR1cmVBc3NlcnRpb24oc3RhdGUsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGxldCBzaWduYXR1cmVBc3NlcnRpb25WYWxpZGF0ZXM7XG5cbiAgICBpZiAodGhpcy5zaWduYXR1cmVBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHN0ZXBTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLCAgLy8vXG4gICAgICAgICAgICBzaWduYXR1cmVBc3NlcnRpb25TdHJpbmcgPSB0aGlzLnNpZ25hdHVyZUFzc2VydGlvbi5nZXRTdHJpbmcoKTtcblxuICAgICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAncyAnJHtzaWduYXR1cmVBc3NlcnRpb25TdHJpbmd9JyBzaWduYXR1cmUgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICAgIGRlY2xhcmUoKHN0YXRlKSA9PiB7XG4gICAgICAgIHNpZ25hdHVyZUFzc2VydGlvblZhbGlkYXRlcyA9IHRoaXMuc2lnbmF0dXJlQXNzZXJ0aW9uLnZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCAoc2lnbmF0dXJlQXNzZXJ0aW9uLCBjb250d2V4dCkgPT4ge1xuICAgICAgICAgIGxldCB2YWxpZGF0ZXM7XG5cbiAgICAgICAgICB0aGlzLnNpZ25hdHVyZUFzc2VydGlvbiA9IHNpZ25hdHVyZUFzc2VydGlvbjtcblxuICAgICAgICAgIHZhbGlkYXRlcyA9IGNvbnRpbnVhdGlvbihzdGF0ZSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gdmFsaWRhdGVzO1xuICAgICAgICB9KTtcbiAgICAgIH0sIHN0YXRlKTtcblxuICAgICAgaWYgKHNpZ25hdHVyZUFzc2VydGlvblZhbGlkYXRlcykge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwJ3MgJyR7c2lnbmF0dXJlQXNzZXJ0aW9uU3RyaW5nfScgc2lnbmF0dXJlIGFzc2VydGlvbi5gKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc2lnbmF0dXJlQXNzZXJ0aW9uVmFsaWRhdGVzID0gY29udGludWF0aW9uKHN0YXRlLCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2lnbmF0dXJlQXNzZXJ0aW9uVmFsaWRhdGVzO1xuICB9XG5cbiAgdW5pZnkoY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHN0ZXBTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcC4uLmApO1xuXG4gICAgY29uc3Qgc3RlcCA9IHRoaXM7ICAvLy9cblxuICAgIHJldHVybiBhc3luY2hyb25vdXNTb21lKHVuaWZ5U3RlcHMsICh1bmlmeVN0ZXAsIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgICAgcmV0dXJuIHVuaWZ5U3RlcChzdGVwLCBjb250ZXh0LCBjb250aW51YXRpb24pO1xuICAgIH0sICh1bmlmaWVzKSA9PiB7XG4gICAgICBpZiAodW5pZmllcykge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcC5gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih1bmlmaWVzKTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJTdGVwXCI7XG59KTtcbiJdLCJuYW1lcyI6WyJicmVha2FibGUiLCJicmVha1BvaW50VXRpbGl0aWVzIiwiYmFja3dhcmRzU29tZSIsImFycmF5VXRpbGl0aWVzIiwiYXN5bmNocm9ub3VzU29tZSIsImNvbnRpbnVhdGlvblV0aWxpdGllcyIsImRlZmluZSIsIlN0ZXAiLCJGYWN0IiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50Iiwic3RhdGVtZW50IiwicmVmZXJlbmNlIiwicHJvY2VkdXJlQ2FsbCIsInNjaGVtYUFzc2VydGlvbiIsInNpZ25hdHVyZUFzc2VydGlvbiIsImdldFNjaGVtYUFzc2VydGlvbiIsImdldFNpZ25hdHVyZUFzc2VydGlvbiIsImdldFN0ZXBOb2RlIiwiZ2V0Tm9kZSIsInN0ZXBOb2RlIiwiZ2V0U3RhdGVtZW50Tm9kZSIsImdldFN0YXRlbWVudCIsInN0YXRlbWVudE5vZGUiLCJpc1N0ZXAiLCJzdGVwIiwiaWREZWNsYXJlZCIsInF1YWxpZmllZCIsImlzUXVhbGlmaWVkIiwiZGVjbGFyZWQiLCJpc1VucXVhbGlmaWVkIiwidW5xdWFsaWZpZWQiLCJpc05vbnNlbnNpY2FsIiwibm9uc2Vuc2ljYWwiLCJjb21wYXJlRmFjdE9yU3VicHJvb2ZzIiwiZmFjdE9yU3VicHJvb2YiLCJjb21wYXJlc1RvRmFjdE9yU3VicHJvb2ZzIiwiZmFjdE9yU3VicHJvb2ZDb21wYXJlc1RvU3RhdGVtZW50IiwiY29tcGFyZVN0ZXAiLCJ2ZXJpZnkiLCJjb250aW51YXRpb24iLCJ2ZXJpZmllcyIsInN0ZXBTdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsImRlYnVnIiwidmFsaWRhdGVzIiwiZGVjbGFyZSIsImRlcml2ZSIsInN0YXRlIiwidmFsaWRhdGUiLCJ1bmlmeSIsInVuaWZpZXMiLCJzcGVjaWZpY0NvbnRleHQiLCJhdHRlbXB0IiwidmFsaWRhdGVTdGF0ZW1lbnQiLCJiaW5kIiwidmFsaWRhdGVSZWZlcmVuY2UiLCJ2YWxpZGF0ZVNjaGVtYUFzc2VydGlvbiIsInZhbGlkYXRlU2lnbmF0dXJlQXNzZXJ0aW9uIiwiYWxsIiwiY29tbWl0Iiwic2NoZW1hQXNzZXJ0aW9uVmFsaWRhdGVzIiwic2NoZW1hQXNzZXJ0aW9uU3RyaW5nIiwic2lnbmF0dXJlQXNzZXJ0aW9uVmFsaWRhdGVzIiwic2lnbmF0dXJlQXNzZXJ0aW9uU3RyaW5nIiwiY29udHdleHQiLCJnZXRDb250ZXh0IiwidW5pZnlTdGVwcyIsInVuaWZ5U3RlcCIsIm5hbWUiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWlCQTs7O2VBQUE7OzsyQkFmK0I7Z0NBQzRCOzZEQUUxQzs4QkFFRzswQkFDRzt5QkFDQzs2QkFDRzt1QkFDSzs7Ozs7O0FBRWhDLE1BQU0sRUFBRUEsU0FBUyxFQUFFLEdBQUdDLG1DQUFtQixFQUNuQyxFQUFFQyxhQUFhLEVBQUUsR0FBR0MseUJBQWMsRUFDbEMsRUFBRUMsZ0JBQWdCLEVBQUUsR0FBR0MscUNBQXFCO01BRWxELFdBQWVDLElBQUFBLGdCQUFNLEVBQUMsTUFBTUMsYUFBYUMsYUFBSTtJQUMzQyxZQUFZQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxVQUFVLEVBQUVDLFNBQVMsRUFBRUMsU0FBUyxFQUFFQyxhQUFhLEVBQUVDLGVBQWUsRUFBRUMsa0JBQWtCLENBQUU7UUFDdkgsS0FBSyxDQUFDUixTQUFTQyxRQUFRQyxNQUFNQyxZQUFZQyxXQUFXQyxXQUFXQztRQUUvRCxJQUFJLENBQUNDLGVBQWUsR0FBR0E7UUFDdkIsSUFBSSxDQUFDQyxrQkFBa0IsR0FBR0E7SUFDNUI7SUFFQUMscUJBQXFCO1FBQ25CLE9BQU8sSUFBSSxDQUFDRixlQUFlO0lBQzdCO0lBRUFHLHdCQUF3QjtRQUN0QixPQUFPLElBQUksQ0FBQ0Ysa0JBQWtCO0lBQ2hDO0lBRUFHLGNBQWM7UUFDWixNQUFNVCxPQUFPLElBQUksQ0FBQ1UsT0FBTyxJQUNuQkMsV0FBV1gsTUFBTyxHQUFHO1FBRTNCLE9BQU9XO0lBQ1Q7SUFFQUMsbUJBQW1CO1FBQ2pCLE1BQU1WLFlBQVksSUFBSSxDQUFD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