occam-verify-cli 0.0.1068 → 0.0.1069

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/bin/action/verify.js +3 -2
  2. package/lib/assertion/subproof.js +3 -3
  3. package/lib/axiom.js +11 -6
  4. package/lib/combinator.js +9 -9
  5. package/lib/conclusion.js +10 -7
  6. package/lib/conjecture.js +11 -6
  7. package/lib/consequent.js +10 -7
  8. package/lib/constructor.js +9 -9
  9. package/lib/context/file.js +34 -126
  10. package/lib/context/local.js +16 -5
  11. package/lib/context/release.js +2 -3
  12. package/lib/declaration.js +50 -43
  13. package/lib/equivalence.js +2 -2
  14. package/lib/frame.js +100 -80
  15. package/lib/index.js +22 -6
  16. package/lib/judgement.js +3 -3
  17. package/lib/label.js +12 -8
  18. package/lib/lemma.js +12 -12
  19. package/lib/metaLemma.js +120 -8
  20. package/lib/metatheorem.js +145 -9
  21. package/lib/metavariable.js +39 -22
  22. package/lib/mixins/statement/qualified/unify.js +6 -10
  23. package/lib/mixins/statement/unify.js +3 -3
  24. package/lib/mixins/term/unify.js +2 -2
  25. package/lib/premise.js +12 -8
  26. package/lib/reference.js +7 -9
  27. package/lib/rule.js +24 -39
  28. package/lib/ruleNames.js +1 -5
  29. package/lib/statement/unqualified.js +9 -8
  30. package/lib/statement.js +4 -4
  31. package/lib/substitution/frameForMetavariable.js +30 -26
  32. package/lib/substitution/statementForMetavariable.js +44 -26
  33. package/lib/substitution/termForVariable.js +33 -37
  34. package/lib/substitution.js +24 -21
  35. package/lib/substitutions.js +7 -1
  36. package/lib/supposition.js +12 -8
  37. package/lib/term.js +6 -11
  38. package/lib/theorem.js +11 -6
  39. package/lib/topLevelAssertion.js +24 -42
  40. package/lib/type.js +5 -12
  41. package/lib/unifier/metaLevel.js +3 -3
  42. package/lib/unifier/metavariable.js +6 -6
  43. package/lib/unifier/statementWithCombinator.js +16 -16
  44. package/lib/unifier/termWithConstructor.js +7 -7
  45. package/lib/utilities/brackets.js +10 -10
  46. package/lib/utilities/json.js +493 -0
  47. package/lib/utilities/node.js +15 -22
  48. package/lib/utilities/release.js +53 -0
  49. package/lib/utilities/releaseContext.js +4 -15
  50. package/lib/utilities/tokens.js +7 -7
  51. package/lib/variable.js +6 -11
  52. package/lib/verifier/topLevel.js +5 -5
  53. package/package.json +1 -1
  54. package/src/assertion/subproof.js +2 -3
  55. package/src/axiom.js +14 -6
  56. package/src/combinator.js +12 -13
  57. package/src/conclusion.js +12 -9
  58. package/src/conjecture.js +14 -6
  59. package/src/consequent.js +12 -9
  60. package/src/constructor.js +11 -13
  61. package/src/context/file.js +94 -202
  62. package/src/context/local.js +8 -6
  63. package/src/context/release.js +2 -3
  64. package/src/declaration.js +72 -44
  65. package/src/equivalence.js +2 -2
  66. package/src/frame.js +111 -86
  67. package/src/index.js +17 -1
  68. package/src/judgement.js +2 -2
  69. package/src/label.js +15 -10
  70. package/src/lemma.js +17 -10
  71. package/src/metaLemma.js +102 -1
  72. package/src/metatheorem.js +143 -2
  73. package/src/metavariable.js +50 -30
  74. package/src/mixins/statement/qualified/unify.js +7 -19
  75. package/src/mixins/statement/unify.js +2 -2
  76. package/src/mixins/term/unify.js +1 -1
  77. package/src/premise.js +18 -10
  78. package/src/reference.js +7 -11
  79. package/src/rule.js +33 -57
  80. package/src/ruleNames.js +0 -1
  81. package/src/statement/unqualified.js +10 -10
  82. package/src/statement.js +3 -2
  83. package/src/substitution/frameForMetavariable.js +39 -33
  84. package/src/substitution/statementForMetavariable.js +64 -31
  85. package/src/substitution/termForVariable.js +47 -37
  86. package/src/substitution.js +18 -16
  87. package/src/substitutions.js +2 -0
  88. package/src/supposition.js +18 -10
  89. package/src/term.js +5 -15
  90. package/src/theorem.js +14 -6
  91. package/src/topLevelAssertion.js +38 -64
  92. package/src/type.js +5 -20
  93. package/src/unifier/metaLevel.js +2 -2
  94. package/src/unifier/metavariable.js +5 -5
  95. package/src/unifier/statementWithCombinator.js +18 -18
  96. package/src/unifier/termWithConstructor.js +7 -7
  97. package/src/utilities/brackets.js +5 -5
  98. package/src/utilities/json.js +551 -0
  99. package/src/utilities/node.js +15 -26
  100. package/src/{verify → utilities}/release.js +5 -1
  101. package/src/utilities/releaseContext.js +2 -2
  102. package/src/utilities/tokens.js +10 -7
  103. package/src/variable.js +4 -14
  104. package/src/verifier/topLevel.js +6 -4
  105. package/lib/argument.js +0 -106
  106. package/lib/metaTypes.js +0 -19
  107. package/lib/unify/statementWithSttaemetnGivenEquivalences.js +0 -45
  108. package/lib/verify/metaLemma.js +0 -49
  109. package/lib/verify/metatheorem.js +0 -48
  110. package/lib/verify/release.js +0 -50
  111. package/src/argument.js +0 -79
  112. package/src/metaTypes.js +0 -11
  113. package/src/unify/statementWithSttaemetnGivenEquivalences.js +0 -51
  114. package/src/verify/metaLemma.js +0 -72
  115. package/src/verify/metatheorem.js +0 -67
@@ -9,14 +9,14 @@ Object.defineProperty(exports, "default", {
9
9
  }
10
10
  });
11
11
  var _shim = /*#__PURE__*/ _interop_require_default(require("./shim"));
12
- var _argument = /*#__PURE__*/ _interop_require_default(require("./argument"));
13
12
  var _local = /*#__PURE__*/ _interop_require_default(require("./context/local"));
14
13
  var _metavariable = /*#__PURE__*/ _interop_require_default(require("./unifier/metavariable"));
15
14
  var _frameForMetavariable = /*#__PURE__*/ _interop_require_default(require("./substitution/frameForMetavariable"));
16
15
  var _statementForMetavariable = /*#__PURE__*/ _interop_require_default(require("./substitution/statementForMetavariable"));
17
16
  var _query = require("./utilities/query");
18
- var _name = require("./utilities/name");
19
17
  var _node = require("./utilities/node");
18
+ var _json = require("./utilities/json");
19
+ var _name = require("./utilities/name");
20
20
  function _class_call_check(instance, Constructor) {
21
21
  if (!(instance instanceof Constructor)) {
22
22
  throw new TypeError("Cannot call a class as a function");
@@ -41,7 +41,7 @@ function _interop_require_default(obj) {
41
41
  default: obj
42
42
  };
43
43
  }
44
- var argumentNodeQuery = (0, _query.nodeQuery)("/metavariable/argument"), metaTypeNodeQuery = (0, _query.nodeQuery)("/metavariableDeclaration/metaType"), metavariableNodeQuery = (0, _query.nodeQuery)("/metavariableDeclaration/metavariable"), frameMetavariableNodeQuery = (0, _query.nodeQuery)("/frame/metavariable!"), statementMetavariableNodeQuery = (0, _query.nodeQuery)("/statement/metavariable!");
44
+ var termNodeQuery = (0, _query.nodeQuery)("/metavariable/argument/term"), typeNodeQuery = (0, _query.nodeQuery)("/metavariable/argument/type"), metaTypeNodeQuery = (0, _query.nodeQuery)("/metavariableDeclaration/metaType"), metavariableNodeQuery = (0, _query.nodeQuery)("/metavariableDeclaration/metavariable"), frameMetavariableNodeQuery = (0, _query.nodeQuery)("/frame/metavariable!"), statementMetavariableNodeQuery = (0, _query.nodeQuery)("/statement/metavariable!");
45
45
  var Metavariable = /*#__PURE__*/ function() {
46
46
  function Metavariable(fileContext, string, node, name, metaType) {
47
47
  _class_call_check(this, Metavariable);
@@ -167,6 +167,23 @@ var Metavariable = /*#__PURE__*/ function() {
167
167
  return statementUnified;
168
168
  }
169
169
  },
170
+ {
171
+ key: "unifySubstitution",
172
+ value: function unifySubstitution(substitution, localContext) {
173
+ var substitutionUnified = false;
174
+ var metavariableString = this.string, substitutionString = substitution.getString();
175
+ localContext.trace("Unifying the '".concat(substitutionString, "' substitution with the '").concat(metavariableString, "' metavariable..."));
176
+ var metavariableName = this.name, judgement = localContext.findJudgementByMetavariableName(metavariableName);
177
+ if (judgement !== null) {
178
+ var declaration = judgement.getDeclaration();
179
+ substitutionUnified = declaration.unifySubstitution(substitution, localContext);
180
+ }
181
+ if (substitutionUnified) {
182
+ localContext.debug("...unified the '".concat(substitutionString, "' substitution with the '").concat(metavariableString, "' metavariable."));
183
+ }
184
+ return substitutionUnified;
185
+ }
186
+ },
170
187
  {
171
188
  key: "verify",
172
189
  value: function verify(localContext) {
@@ -194,12 +211,20 @@ var Metavariable = /*#__PURE__*/ function() {
194
211
  if (metavariablePresent) {
195
212
  fileContext.debug("The metavariable '".concat(metavariableString, "' is already present."));
196
213
  } else {
197
- var argumentNode = argumentNodeQuery(metavariableNode), argument = _argument.default.fromArgumentNode(argumentNode, fileContext);
198
- if (argument === null) {
199
- verifiedAtTopLevel = true;
214
+ var termNode = termNodeQuery(this.node);
215
+ if (termNode !== null) {
216
+ var termString = this.fileContext.nodeAsString(termNode);
217
+ this.fileContext.debug("The '".concat(termString, "' term was found when a type should have been present."));
200
218
  } else {
201
- var argumentVerified = argument.verify(fileContext);
202
- if (argumentVerified) {
219
+ var typeNode = typeNodeQuery(this.node);
220
+ if (typeNode !== null) {
221
+ var typeName = (0, _name.typeNameFromTypeNode)(typeNode), typePresent = this.fileContext.isTypePresentByTypeName(typeName);
222
+ if (typePresent) {
223
+ verifiedAtTopLevel = true;
224
+ } else {
225
+ this.fileContext.debug("The '".concat(typeName, "' type is not present."));
226
+ }
227
+ } else {
203
228
  verifiedAtTopLevel = true;
204
229
  }
205
230
  }
@@ -230,7 +255,7 @@ var Metavariable = /*#__PURE__*/ function() {
230
255
  {
231
256
  key: "toJSON",
232
257
  value: function toJSON() {
233
- var metaTypeJSON = this.metaType !== null ? this.metaType.toJSON() : null, string = this.string, metaType = metaTypeJSON, json = {
258
+ var metaTypeJSON = (0, _json.metaTypeToMetaTypeJSON)(this.metaType), metaType = metaTypeJSON, string = this.string, json = {
234
259
  string: string,
235
260
  metaType: metaType
236
261
  };
@@ -241,17 +266,17 @@ var Metavariable = /*#__PURE__*/ function() {
241
266
  {
242
267
  key: "fromJSON",
243
268
  value: function fromJSON(json, fileContext) {
244
- var string = json.string, lexer = fileContext.getLexer(), parser = fileContext.getParser(), metavariableString = string, metavariableNode = (0, _node.metavariableNodeFromMetavariableString)(metavariableString, lexer, parser), metavariableName = (0, _name.metavariableNameFromMetavariableNode)(metavariableNode), node = metavariableNode, name = metavariableName, metaType = metaTypeFromJSON(json, fileContext), metavariable = new Metavariable(fileContext, string, node, name, metaType);
269
+ var string = json.string, lexer = fileContext.getLexer(), parser = fileContext.getParser(), metavariableString = string, metavariableNode = (0, _node.metavariableNodeFromMetavariableString)(metavariableString, lexer, parser), metavariableName = (0, _name.metavariableNameFromMetavariableNode)(metavariableNode), node = metavariableNode, name = metavariableName, metaType = (0, _json.metaTypeFromJSON)(json, fileContext), metavariable = new Metavariable(fileContext, string, node, name, metaType);
245
270
  return metavariable;
246
271
  }
247
272
  },
248
273
  {
249
274
  key: "fromMetavariableNode",
250
- value: function fromMetavariableNode(metavariableNode, fileContext) {
275
+ value: function fromMetavariableNode(metavariableNode, localContext) {
251
276
  var metavariable = null;
252
277
  if (metavariableNode !== null) {
253
- var metavariableName = (0, _name.metavariableNameFromMetavariableNode)(metavariableNode), node = metavariableNode, name = metavariableName, string = fileContext.nodeAsString(node), metaType = null;
254
- metavariable = new Metavariable(fileContext, string, node, name, metaType);
278
+ var metavariableName = (0, _name.metavariableNameFromMetavariableNode)(metavariableNode), node = metavariableNode, name = metavariableName, string = localContext.nodeAsString(node), metaType = null;
279
+ metavariable = new Metavariable(localContext, string, node, name, metaType);
255
280
  }
256
281
  return metavariable;
257
282
  }
@@ -270,14 +295,6 @@ Object.assign(_shim.default, {
270
295
  Metavariable: Metavariable
271
296
  });
272
297
  var _default = Metavariable;
273
- function metaTypeFromJSON(json, fileContext) {
274
- var metaType = json.metaType;
275
- if (metaType !== null) {
276
- var name = metaType.name, metaTypeName = name; ///
277
- metaType = fileContext.findMetaTypeByMetaTypeName(metaTypeName);
278
- }
279
- return metaType;
280
- }
281
298
  function metavariableFromMetavariableNode(metavariableNode, localContext) {
282
299
  var metavariableName = (0, _name.metavariableNameFromMetavariableNode)(metavariableNode), metavariable = localContext.findMetavariableByMetavariableName(metavariableName);
283
300
  return metavariable;
@@ -301,4 +318,4 @@ function statementMetavariableFromStatementNode(statementNode, localContext) {
301
318
  return statementMetavariable;
302
319
  }
303
320
 
304
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9tZXRhdmFyaWFibGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBzaGltIGZyb20gXCIuL3NoaW1cIjtcbmltcG9ydCBBcmd1bWVudCBmcm9tIFwiLi9hcmd1bWVudFwiO1xuaW1wb3J0IExvY2FsQ29udGV4dCBmcm9tIFwiLi9jb250ZXh0L2xvY2FsXCI7XG5pbXBvcnQgbWV0YXZhcmlhYmxlVW5pZmllciBmcm9tIFwiLi91bmlmaWVyL21ldGF2YXJpYWJsZVwiO1xuaW1wb3J0IEZyYW1lRm9yTWV0YXZhcmlhYmxlU3Vic3RpdHV0aW9uIGZyb20gXCIuL3N1YnN0aXR1dGlvbi9mcmFtZUZvck1ldGF2YXJpYWJsZVwiO1xuaW1wb3J0IFN0YXRlbWVudEZvck1ldGF2YXJpYWJsZVN1YnN0aXR1dGlvbiBmcm9tIFwiLi9zdWJzdGl0dXRpb24vc3RhdGVtZW50Rm9yTWV0YXZhcmlhYmxlXCI7XG5cbmltcG9ydCB7IG5vZGVRdWVyeSB9IGZyb20gXCIuL3V0aWxpdGllcy9xdWVyeVwiO1xuaW1wb3J0IHsgbWV0YXZhcmlhYmxlTmFtZUZyb21NZXRhdmFyaWFibGVOb2RlIH0gZnJvbSBcIi4vdXRpbGl0aWVzL25hbWVcIjtcbmltcG9ydCB7IG1ldGF2YXJpYWJsZU5vZGVGcm9tTWV0YXZhcmlhYmxlU3RyaW5nIH0gZnJvbSBcIi4vdXRpbGl0aWVzL25vZGVcIjtcblxuY29uc3QgYXJndW1lbnROb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvbWV0YXZhcmlhYmxlL2FyZ3VtZW50XCIpLFxuICAgICAgbWV0YVR5cGVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvbWV0YXZhcmlhYmxlRGVjbGFyYXRpb24vbWV0YVR5cGVcIiksXG4gICAgICBtZXRhdmFyaWFibGVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvbWV0YXZhcmlhYmxlRGVjbGFyYXRpb24vbWV0YXZhcmlhYmxlXCIpLFxuICAgICAgZnJhbWVNZXRhdmFyaWFibGVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvZnJhbWUvbWV0YXZhcmlhYmxlIVwiKSxcbiAgICAgIHN0YXRlbWVudE1ldGF2YXJpYWJsZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9zdGF0ZW1lbnQvbWV0YXZhcmlhYmxlIVwiKTtcblxuY2xhc3MgTWV0YXZhcmlhYmxlIHtcbiAgY29uc3RydWN0b3IoZmlsZUNvbnRleHQsIHN0cmluZywgbm9kZSwgbmFtZSwgbWV0YVR5cGUpIHtcbiAgICB0aGlzLmZpbGVDb250ZXh0ID0gZmlsZUNvbnRleHQ7XG4gICAgdGhpcy5zdHJpbmcgPSBzdHJpbmc7XG4gICAgdGhpcy5ub2RlID0gbm9kZTtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIHRoaXMubWV0YVR5cGUgPSBtZXRhVHlwZTtcbiAgfVxuXG4gIGdldEZpbGVDb250ZXh0KCkge1xuICAgIHJldHVybiB0aGlzLmZpbGVDb250ZXh0O1xuICB9XG5cbiAgZ2V0U3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLnN0cmluZztcbiAgfVxuXG4gIGdldE5vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMubm9kZTtcbiAgfVxuXG4gIGdldE5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgfVxuXG4gIGdldE1ldGFUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLm1ldGFUeXBlO1xuICB9XG5cbiAgZ2V0TWV0YVR5cGVOYW1lKCkge1xuICAgIGNvbnN0IG1ldGFUeXBlTmFtZSA9IHRoaXMubWV0YVR5cGUuZ2V0TmFtZSgpO1xuXG4gICAgcmV0dXJuIG1ldGFUeXBlTmFtZTtcbiAgfVxuXG4gIG1hdGNoTWV0YVR5cGUobWV0YVR5cGUpIHtcbiAgICBjb25zdCBtZXRhVHlwZU1hdGNoZXMgPSAodGhpcy5tZXRhVHlwZSA9PT0gbWV0YVR5cGUpO1xuXG4gICAgcmV0dXJuIG1ldGFUeXBlTWF0Y2hlcztcbiAgfVxuXG4gIG1hdGNoTWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKSB7XG4gICAgY29uc3QgbWV0YXZhcmlhYmxlTmFtZU1hdGNoZXMgPSAodGhpcy5uYW1lID09PSBtZXRhdmFyaWFibGVOYW1lKTtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGVOYW1lTWF0Y2hlcztcbiAgfVxuXG4gIG1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgPSB0aGlzLm5vZGUubWF0Y2gobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXM7XG4gIH1cblxuICB1bmlmeUZyYW1lKGZyYW1lLCBzdWJzdGl0dXRpb25zLCBsb2NhbENvbnRleHQpIHtcbiAgICBsZXQgZnJhbWVVbmlmaWVkID0gZmFsc2U7XG5cbiAgICBjb25zdCBmcmFtZU5vZGUgPSBmcmFtZS5nZXROb2RlKCksXG4gICAgICAgICAgZnJhbWVTdHJpbmcgPSBmcmFtZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVTdHJpbmcgPSB0aGlzLnN0cmluZzsgLy8vXG5cbiAgICBsb2NhbENvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtmcmFtZVN0cmluZ30nIGZyYW1lIHdpdGggdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZS4uLmApO1xuXG4gICAgY29uc3QgbWV0YXZhcmlhYmxlTmFtZSA9IHRoaXMubmFtZSwgLy8vXG4gICAgICAgICAgc2ltcGxlU3Vic3RpdHV0aW9uUHJlc2VudCA9IHN1YnN0aXR1dGlvbnMuaXNTaW1wbGVTdWJzdGl0dXRpb25QcmVzZW50QnlNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpO1xuXG4gICAgaWYgKHNpbXBsZVN1YnN0aXR1dGlvblByZXNlbnQpIHtcbiAgICAgIGNvbnN0IHNpbXBsZVN1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbnMuZmluZFNpbXBsZVN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKSxcbiAgICAgICAgICAgIHN1YnN0aXR1dGlvbiA9IHNpbXBsZVN1YnN0aXR1dGlvbiwgIC8vL1xuICAgICAgICAgICAgZnJhbWVOb2RlTWF0Y2hlcyA9IHN1YnN0aXR1dGlvbi5tYXRjaEZyYW1lTm9kZShmcmFtZU5vZGUpO1xuXG4gICAgICBpZiAoZnJhbWVOb2RlTWF0Y2hlcykge1xuICAgICAgICBmcmFtZVVuaWZpZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gdGhpcy5ub2RlLCAgLy8vXG4gICAgICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBsb2NhbENvbnRleHQpLFxuICAgICAgICAgICAgZnJhbWVNZXRhdmFyaWFibGUgID0gZnJhbWVNZXRhdmFyaWFibGVGcm9tU3RhdGVtZW50Tm9kZShmcmFtZU5vZGUsIGxvY2FsQ29udGV4dCk7XG5cbiAgICAgIGlmIChtZXRhdmFyaWFibGUgPT09IGZyYW1lTWV0YXZhcmlhYmxlKSB7XG4gICAgICAgIGZyYW1lVW5pZmllZCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBtZXRhdmFyaWFibGUgPSB0aGlzLCAgLy8vXG4gICAgICAgICAgICAgIGZyYW1lRm9yTWV0YXZhcmlhYmxlU3Vic3RpdHV0aW9uID0gRnJhbWVGb3JNZXRhdmFyaWFibGVTdWJzdGl0dXRpb24uZnJvbUZyYW1lQW5kTWV0YXZhcmlhYmxlKGZyYW1lLCBtZXRhdmFyaWFibGUsIGxvY2FsQ29udGV4dCksXG4gICAgICAgICAgICAgIHN1YnN0aXR1dGlvbiA9IGZyYW1lRm9yTWV0YXZhcmlhYmxlU3Vic3RpdHV0aW9uOyAgLy8vXG5cbiAgICAgICAgc3Vic3RpdHV0aW9ucy5hZGRTdWJzdGl0dXRpb24oc3Vic3RpdHV0aW9uLCBsb2NhbENvbnRleHQpO1xuXG4gICAgICAgIGZyYW1lVW5pZmllZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGZyYW1lVW5pZmllZCkge1xuICAgICAgbG9jYWxDb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtmcmFtZVN0cmluZ30nIGZyYW1lIHdpdGggdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZS5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZnJhbWVVbmlmaWVkO1xuICB9XG5cbiAgdW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBzdWJzdGl0dXRpb24sIHN1YnN0aXR1dGlvbnMsIGxvY2FsQ29udGV4dCkge1xuICAgIGxldCBzdGF0ZW1lbnRVbmlmaWVkID0gZmFsc2U7XG5cbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gdGhpcy5zdHJpbmcsIC8vL1xuICAgICAgICAgIHN1YnN0aXR1dGlvblN0cmluZyA9IChzdWJzdGl0dXRpb24gIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzdGl0dXRpb24uZ2V0U3RyaW5nKCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbDtcblxuICAgIChzdWJzdGl0dXRpb25TdHJpbmcgIT09IG51bGwpID9cbiAgICAgIGxvY2FsQ29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCB3aXRoIHRoZSAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUgZ2l2ZW4gdGhlICR7c3Vic3RpdHV0aW9uU3RyaW5nfSBzdWJzdGl0dXRpb24uLi5gKSA6XG4gICAgICAgIGxvY2FsQ29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCB3aXRoIHRoZSAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUuLi5gKTtcblxuICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnQuZ2V0Tm9kZSgpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZU5vZGUgPSB0aGlzLm5vZGUsIC8vL1xuICAgICAgICAgIG1ldGF2YXJpYWJsZU5hbWUgPSBtZXRhdmFyaWFibGVOYW1lRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSksXG4gICAgICAgICAgc3Vic3RpdHV0aW9uTm9kZSA9IChzdWJzdGl0dXRpb24gIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vic3RpdHV0aW9uLmdldFN1YnN0aXR1dGlvbk5vZGUoKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICBzdWJzdGl0dXRpb25QcmVzZW50ID0gc3Vic3RpdHV0aW9ucy5pc1N1YnN0aXR1dGlvblByZXNlbnRCeU1ldGF2YXJpYWJsZU5hbWVBbmRTdWJzdGl0dXRpb25Ob2RlKG1ldGF2YXJpYWJsZU5hbWUsIHN1YnN0aXR1dGlvbk5vZGUpO1xuXG4gICAgaWYgKHN1YnN0aXR1dGlvblByZXNlbnQpIHtcbiAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbnMuZmluZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTmFtZUFuZFN1YnN0aXR1dGlvbk5vZGUobWV0YXZhcmlhYmxlTmFtZSwgc3Vic3RpdHV0aW9uTm9kZSksXG4gICAgICAgICAgICBzdGF0ZW1lbnROb2RlTWF0Y2hlcyA9IHN1YnN0aXR1dGlvbi5tYXRjaFN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSk7XG5cbiAgICAgIGlmIChzdGF0ZW1lbnROb2RlTWF0Y2hlcykge1xuICAgICAgICBzdGF0ZW1lbnRVbmlmaWVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IHRoaXMubm9kZSwgIC8vL1xuICAgICAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgbG9jYWxDb250ZXh0KSxcbiAgICAgICAgICAgIHN0YXRlbWVudE1ldGF2YXJpYWJsZSA9IHN0YXRlbWVudE1ldGF2YXJpYWJsZUZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGxvY2FsQ29udGV4dCk7XG5cbiAgICAgIGlmIChtZXRhdmFyaWFibGUgPT09IHN0YXRlbWVudE1ldGF2YXJpYWJsZSkge1xuICAgICAgICBzdGF0ZW1lbnRVbmlmaWVkID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZSA9IHRoaXMsICAvLy9cbiAgICAgICAgICAgICAgc3RhdGVtZW50Rm9yTWV0YXZhcmlhYmxlU3Vic3RpdHV0aW9uID0gU3RhdGVtZW50Rm9yTWV0YXZhcmlhYmxlU3Vic3RpdHV0aW9uLmZyb21TdGF0ZW1lbnRNZXRhdmFyaWFibGVBbmRTdWJzdGl0dXRpb24oc3RhdGVtZW50LCBtZXRhdmFyaWFibGUsIHN1YnN0aXR1dGlvbiwgbG9jYWxDb250ZXh0KTtcblxuICAgICAgICBzdWJzdGl0dXRpb24gPSBzdGF0ZW1lbnRGb3JNZXRhdmFyaWFibGVTdWJzdGl0dXRpb247ICAvLy9cblxuICAgICAgICBzdWJzdGl0dXRpb25zLmFkZFN1YnN0aXR1dGlvbihzdWJzdGl0dXRpb24sIGxvY2FsQ29udGV4dCk7XG5cbiAgICAgICAgc3RhdGVtZW50VW5pZmllZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlbWVudFVuaWZpZWQpIHtcbiAgICAgIChzdWJzdGl0dXRpb25TdHJpbmcgIT09IG51bGwpID9cbiAgICAgICAgbG9jYWxDb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgd2l0aCB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlIGdpdmVuIHRoZSAke3N1YnN0aXR1dGlvblN0cmluZ30gc3Vic3RpdHV0aW9uLmApIDpcbiAgICAgICAgICBsb2NhbENvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCB3aXRoIHRoZSAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXRlbWVudFVuaWZpZWQ7XG4gIH1cblxuICB2ZXJpZnkobG9jYWxDb250ZXh0KSB7XG4gICAgbGV0IHZlcmlmaWVkO1xuXG4gICAgY29uc3QgbWV0YXZhcmlhYmxlU3RyaW5nID0gdGhpcy5zdHJpbmc7IC8vL1xuXG4gICAgbG9jYWxDb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZS4uLmApO1xuXG4gICAgY29uc3QgbWV0YXZhcmlhYmxlTmFtZSA9IHRoaXMubmFtZSxcbiAgICAgICAgICBtZXRhdmFyaWFibGUgPSBsb2NhbENvbnRleHQuZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKTtcblxuICAgIGlmIChtZXRhdmFyaWFibGUgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZUEgPSBtZXRhdmFyaWFibGUsIC8vL1xuICAgICAgICAgICAgbWV0YXZhcmlhYmxlQiA9IHRoaXMsXG4gICAgICAgICAgICBtZXRhdmFyaWFibGVOb2RlQSA9IG1ldGF2YXJpYWJsZUEuZ2V0Tm9kZSgpLCAvLy9cbiAgICAgICAgICAgIG1ldGF2YXJpYWJsZU5vZGVCID0gbWV0YXZhcmlhYmxlQi5nZXROb2RlKCksXG4gICAgICAgICAgICBtZXRhdmFyaWFibGVVbmlmaWVkID0gbWV0YXZhcmlhYmxlVW5pZmllci51bmlmeShtZXRhdmFyaWFibGVOb2RlQSwgbWV0YXZhcmlhYmxlTm9kZUIsIGxvY2FsQ29udGV4dCk7XG5cbiAgICAgIHZlcmlmaWVkID0gbWV0YXZhcmlhYmxlVW5pZmllZDsgLy8vXG4gICAgfVxuXG4gICAgaWYgKHZlcmlmaWVkKSB7XG4gICAgICBsb2NhbENvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZlcmlmaWVkO1xuICB9XG5cbiAgdmVyaWZ5QXRUb3BMZXZlbChmaWxlQ29udGV4dCkge1xuICAgIGxldCB2ZXJpZmllZEF0VG9wTGV2ZWwgPSBmYWxzZTtcblxuICAgIGNvbnN0IG1ldGF2YXJpYWJsZVN0cmluZyA9IHRoaXMuc3RyaW5nOyAvLy9cblxuICAgIGZpbGVDb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZSBhdCB0b3AgbGV2ZWwuLi5gKTtcblxuICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSB0aGlzLm5vZGUsIC8vL1xuICAgICAgICAgIG1ldGF2YXJpYWJsZU5hbWUgPSBtZXRhdmFyaWFibGVOYW1lRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlUHJlc2VudCA9IGZpbGVDb250ZXh0LmlzTWV0YXZhcmlhYmxlUHJlc2VudEJ5TWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKTtcblxuICAgIGlmIChtZXRhdmFyaWFibGVQcmVzZW50KSB7XG4gICAgICBmaWxlQ29udGV4dC5kZWJ1ZyhgVGhlIG1ldGF2YXJpYWJsZSAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBpcyBhbHJlYWR5IHByZXNlbnQuYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGFyZ3VtZW50Tm9kZSA9IGFyZ3VtZW50Tm9kZVF1ZXJ5KG1ldGF2YXJpYWJsZU5vZGUpLFxuICAgICAgICAgICAgYXJndW1lbnQgPSBBcmd1bWVudC5mcm9tQXJndW1lbnROb2RlKGFyZ3VtZW50Tm9kZSwgZmlsZUNvbnRleHQpO1xuXG4gICAgICBpZiAoYXJndW1lbnQgPT09IG51bGwpIHtcbiAgICAgICAgdmVyaWZpZWRBdFRvcExldmVsID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGFyZ3VtZW50VmVyaWZpZWQgPSBhcmd1bWVudC52ZXJpZnkoZmlsZUNvbnRleHQpO1xuXG4gICAgICAgIGlmIChhcmd1bWVudFZlcmlmaWVkKSB7XG4gICAgICAgICAgdmVyaWZpZWRBdFRvcExldmVsID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2ZXJpZmllZEF0VG9wTGV2ZWwpIHtcbiAgICAgIGZpbGVDb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlIGF0IHRvcCBsZXZlbC5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmVyaWZpZWRBdFRvcExldmVsO1xuICB9XG5cbiAgdmVyaWZ5R2l2ZW5NZXRhVHlwZShtZXRhVHlwZSwgbG9jYWxDb250ZXh0KSB7XG4gICAgbGV0IHZlcmlmaWVkR2l2ZW5NZXRhVHlwZSA9IGZhbHNlO1xuXG4gICAgY29uc3QgbWV0YXZhcmlhYmxlU3RyaW5nID0gdGhpcy5zdHJpbmcsICAvLy9cbiAgICAgICAgICBtZXRhVHlwZVN0cmluZyA9IG1ldGFUeXBlLmdldFN0cmluZygpO1xuXG4gICAgbG9jYWxDb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZSBnaXZlbiB0aGUgJyR7bWV0YVR5cGVTdHJpbmd9JyBtZXRhLXR5cGUuLi5gKTtcblxuICAgIGNvbnN0IG5hbWUgPSB0aGlzLmdldE5hbWUoKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVOYW1lID0gbmFtZSwgIC8vL1xuICAgICAgICAgIG1ldGF2YXJpYWJsZSA9IGxvY2FsQ29udGV4dC5maW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpO1xuXG4gICAgaWYgKG1ldGF2YXJpYWJsZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgbWV0YVR5cGVNYXRjaGVzID0gbWV0YXZhcmlhYmxlLm1hdGNoTWV0YVR5cGUobWV0YVR5cGUpO1xuXG4gICAgICB2ZXJpZmllZEdpdmVuTWV0YVR5cGUgPSBtZXRhVHlwZU1hdGNoZXM7ICAvLy9cbiAgICB9XG5cbiAgICBpZiAodmVyaWZpZWRHaXZlbk1ldGFUeXBlKSB7XG4gICAgICBsb2NhbENvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUgZ2l2ZW4gdGhlICcke21ldGFUeXBlU3RyaW5nfScgbWV0YS10eXBlLmApO1xuICAgIH1cblxuICAgIHJldHVybiB2ZXJpZmllZEdpdmVuTWV0YVR5cGU7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgY29uc3QgbWV0YVR5cGVKU09OID0gKHRoaXMubWV0YVR5cGUgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1ldGFUeXBlLnRvSlNPTigpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgc3RyaW5nID0gdGhpcy5zdHJpbmcsXG4gICAgICAgICAgbWV0YVR5cGUgPSBtZXRhVHlwZUpTT04sICAvLy9cbiAgICAgICAgICBqc29uID0ge1xuICAgICAgICAgICAgc3RyaW5nLFxuICAgICAgICAgICAgbWV0YVR5cGVcbiAgICAgICAgICB9O1xuXG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgZmlsZUNvbnRleHQpIHtcbiAgICBjb25zdCB7IHN0cmluZyB9ID0ganNvbixcbiAgICAgICAgICBsZXhlciAgPSBmaWxlQ29udGV4dC5nZXRMZXhlcigpLFxuICAgICAgICAgIHBhcnNlciA9IGZpbGVDb250ZXh0LmdldFBhcnNlcigpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZVN0cmluZyA9IHN0cmluZywgIC8vL1xuICAgICAgICAgIG1ldGF2YXJpYWJsZU5vZGUgPSBtZXRhdmFyaWFibGVOb2RlRnJvbU1ldGF2YXJpYWJsZVN0cmluZyhtZXRhdmFyaWFibGVTdHJpbmcsIGxleGVyLCBwYXJzZXIpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZU5hbWUgPSBtZXRhdmFyaWFibGVOYW1lRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSksXG4gICAgICAgICAgbm9kZSA9IG1ldGF2YXJpYWJsZU5vZGUsICAvLy9cbiAgICAgICAgICBuYW1lID0gbWV0YXZhcmlhYmxlTmFtZSwgIC8vL1xuICAgICAgICAgIG1ldGFUeXBlID0gbWV0YVR5cGVGcm9tSlNPTihqc29uLCBmaWxlQ29udGV4dCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlID0gbmV3IE1ldGF2YXJpYWJsZShmaWxlQ29udGV4dCwgc3RyaW5nLCBub2RlLCBuYW1lLCBtZXRhVHlwZSk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlO1xuICB9XG5cbiAgc3RhdGljIGZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGZpbGVDb250ZXh0KSB7XG4gICAgbGV0IG1ldGF2YXJpYWJsZSA9IG51bGw7XG5cbiAgICBpZiAobWV0YXZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgbWV0YXZhcmlhYmxlTmFtZSA9IG1ldGF2YXJpYWJsZU5hbWVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgICAgIG5vZGUgPSBtZXRhdmFyaWFibGVOb2RlLCAgLy8vXG4gICAgICAgICAgICBuYW1lID0gbWV0YXZhcmlhYmxlTmFtZSwgIC8vL1xuICAgICAgICAgICAgc3RyaW5nID0gZmlsZUNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICAgICAgbWV0YVR5cGUgPSBudWxsO1xuXG4gICAgICBtZXRhdmFyaWFibGUgPSBuZXcgTWV0YXZhcmlhYmxlKGZpbGVDb250ZXh0LCBzdHJpbmcsIG5vZGUsIG5hbWUsIG1ldGFUeXBlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlO1xuICB9XG5cbiAgc3RhdGljIGZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUobWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBmaWxlQ29udGV4dCkge1xuICAgIGNvbnN0IHsgTWV0YVR5cGUgfSA9IHNoaW0sXG4gICAgICAgICAgbWV0YVR5cGVOb2RlID0gbWV0YVR5cGVOb2RlUXVlcnkobWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVOb2RlID0gbWV0YXZhcmlhYmxlTm9kZVF1ZXJ5KG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlTmFtZSA9IG1ldGF2YXJpYWJsZU5hbWVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgICBsb2NhbENvbnRleHQgPSBMb2NhbENvbnRleHQuZnJvbUZpbGVDb250ZXh0KGZpbGVDb250ZXh0KSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVTdHJpbmcgPSBmaWxlQ29udGV4dC5ub2RlQXNTdHJpbmcobWV0YXZhcmlhYmxlTm9kZSksXG4gICAgICAgICAgc3RyaW5nID0gbWV0YXZhcmlhYmxlU3RyaW5nLCAgLy8vXG4gICAgICAgICAgbm9kZSA9IG1ldGF2YXJpYWJsZU5vZGUsICAvLy9cbiAgICAgICAgICBuYW1lID0gbWV0YXZhcmlhYmxlTmFtZSwgIC8vL1xuICAgICAgICAgIG1ldGFUeXBlID0gTWV0YVR5cGUuZnJvbU1ldGFUeXBlTm9kZShtZXRhVHlwZU5vZGUsIGxvY2FsQ29udGV4dCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlID0gbmV3IE1ldGF2YXJpYWJsZShmaWxlQ29udGV4dCwgc3RyaW5nLCBub2RlLCBuYW1lLCBtZXRhVHlwZSk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlO1xuICB9XG59XG5cbk9iamVjdC5hc3NpZ24oc2hpbSwge1xuICBNZXRhdmFyaWFibGVcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBNZXRhdmFyaWFibGU7XG5cbmZ1bmN0aW9uIG1ldGFUeXBlRnJvbUpTT04oanNvbiwgZmlsZUNvbnRleHQpIHtcbiAgbGV0IHsgbWV0YVR5cGUgfSA9IGpzb247XG5cbiAgaWYgKG1ldGFUeXBlICE9PSBudWxsKSB7XG4gICAgY29uc3QgeyBuYW1lIH0gPSBtZXRhVHlwZSxcbiAgICAgICAgICBtZXRhVHlwZU5hbWUgPSBuYW1lOyAgLy8vXG5cbiAgICBtZXRhVHlwZSA9IGZpbGVDb250ZXh0LmZpbmRNZXRhVHlwZUJ5TWV0YVR5cGVOYW1lKG1ldGFUeXBlTmFtZSk7XG4gIH1cblxuICByZXR1cm4gbWV0YVR5cGU7XG59XG5cbmZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGxvY2FsQ29udGV4dCkge1xuICBjb25zdCBtZXRhdmFyaWFibGVOYW1lID0gbWV0YXZhcmlhYmxlTmFtZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBsb2NhbENvbnRleHQuZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5mdW5jdGlvbiBmcmFtZU1ldGF2YXJpYWJsZUZyb21TdGF0ZW1lbnROb2RlKGZyYW1lTm9kZSwgbG9jYWxDb250ZXh0KSB7XG4gIGxldCBmcmFtZU1ldGF2YXJpYWJsZSA9IG51bGw7XG5cbiAgY29uc3QgZnJhbWVNZXRhdmFyaWFibGVOb2RlID0gZnJhbWVNZXRhdmFyaWFibGVOb2RlUXVlcnkoZnJhbWVOb2RlKTtcblxuICBpZiAoZnJhbWVNZXRhdmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgY29uc3QgZnJhbWVNZXRhdmFyaWFibGVOYW1lID0gbWV0YXZhcmlhYmxlTmFtZUZyb21NZXRhdmFyaWFibGVOb2RlKGZyYW1lTWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICBmcmFtZU1ldGF2YXJpYWJsZSA9IGxvY2FsQ29udGV4dC5maW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOYW1lKGZyYW1lTWV0YXZhcmlhYmxlTmFtZSk7XG4gIH1cblxuICByZXR1cm4gZnJhbWVNZXRhdmFyaWFibGU7XG59XG5cbmZ1bmN0aW9uIHN0YXRlbWVudE1ldGF2YXJpYWJsZUZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGxvY2FsQ29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50TWV0YXZhcmlhYmxlID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnRNZXRhdmFyaWFibGVOb2RlID0gc3RhdGVtZW50TWV0YXZhcmlhYmxlTm9kZVF1ZXJ5KHN0YXRlbWVudE5vZGUpO1xuXG4gIGlmIChzdGF0ZW1lbnRNZXRhdmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50TWV0YXZhcmlhYmxlTmFtZSA9IG1ldGF2YXJpYWJsZU5hbWVGcm9tTWV0YXZhcmlhYmxlTm9kZShzdGF0ZW1lbnRNZXRhdmFyaWFibGVOb2RlKTtcblxuICAgIHN0YXRlbWVudE1ldGF2YXJpYWJsZSA9IGxvY2FsQ29udGV4dC5maW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOYW1lKHN0YXRlbWVudE1ldGF2YXJpYWJsZU5hbWUpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudE1ldGF2YXJpYWJsZTtcbn1cbiJdLCJuYW1lcyI6WyJhcmd1bWVudE5vZGVRdWVyeSIsIm5vZGVRdWVyeSIsIm1ldGFUeXBlTm9kZVF1ZXJ5IiwibWV0YXZhcmlhYmxlTm9kZVF1ZXJ5IiwiZnJhbWVNZXRhdmFyaWFibGVOb2RlUXVlcnkiLCJzdGF0ZW1lbnRNZXRhdmFyaWFibGVOb2RlUXVlcnkiLCJNZXRhdmFyaWFibGUiLCJmaWxlQ29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJuYW1lIiwibWV0YVR5cGUiLCJnZXRGaWxlQ29udGV4dCIsImdldFN0cmluZyIsImdldE5vZGUiLCJnZXROYW1lIiwiZ2V0TWV0YVR5cGUiLCJnZXRNZXRhVHlwZU5hbWUiLCJtZXRhVHlwZU5hbWUiLCJtYXRjaE1ldGFUeXBlIiwibWV0YVR5cGVNYXRjaGVzIiwibWF0Y2hNZXRhdmFyaWFibGVOYW1lIiwibWV0YXZhcmlhYmxlTmFtZSIsIm1ldGF2YXJpYWJsZU5hbWVNYXRjaGVzIiwibWF0Y2hNZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzIiwibWF0Y2giLCJ1bmlmeUZyYW1lIiwiZnJhbWUiLCJzdWJzdGl0dXRpb25zIiwibG9jYWxDb250ZXh0IiwiZnJhbWVVbmlmaWVkIiwiZnJhbWVOb2RlIiwiZnJhbWVTdHJpbmciLCJtZXRhdmFyaWFibGVTdHJpbmciLCJ0cmFjZSIsInNpbXBsZVN1YnN0aXR1dGlvblByZXNlbnQiLCJpc1NpbXBsZVN1YnN0aXR1dGlvblByZXNlbnRCeU1ldGF2YXJpYWJsZU5hbWUiLCJzaW1wbGVTdWJzdGl0dXRpb24iLCJmaW5kU2ltcGxlU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOYW1lIiwic3Vic3RpdHV0aW9uIiwiZnJhbWVOb2RlTWF0Y2hlcyIsIm1hdGNoRnJhbWVOb2RlIiwibWV0YXZhcmlhYmxlIiwibWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUiLCJmcmFtZU1ldGF2YXJpYWJsZSIsImZyYW1lTWV0YXZhcmlhYmxlRnJvbVN0YXRlbWVudE5vZGUiLCJmcmFtZUZvck1ldGF2YXJpYWJsZVN1YnN0aXR1dGlvbiIsIkZyYW1lRm9yTWV0YXZhcmlhYmxlU3Vic3RpdHV0aW9uIiwiZnJvbUZyYW1lQW5kTWV0YXZhcmlhYmxlIiwiYWRkU3Vic3RpdHV0aW9uIiwiZGVidWciLCJ1bmlmeVN0YXRlbWVudCIsInN0YXRlbWVudCIsInN0YXRlbWVudFVuaWZpZWQiLCJzdGF0ZW1lbnRTdHJpbmciLCJzdWJzdGl0dXRpb25TdHJpbmciLCJzdGF0ZW1lbnROb2RlIiwibWV0YXZhcmlhYmxlTmFtZUZyb21NZXRhdmFyaWFibGVOb2RlIiwic3Vic3RpdHV0aW9uTm9kZSIsImdldFN1YnN0aXR1dGlvbk5vZGUiLCJzdWJzdGl0dXRpb25QcmVzZW50IiwiaXNTdWJzdGl0dXRpb25QcmVzZW50QnlNZXRhdmFyaWFibGVOYW1lQW5kU3Vic3RpdHV0aW9uTm9kZSIsImZpbmRTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5hbWVBbmRTdWJzdGl0dXRpb25Ob2RlIiwic3RhdGVtZW50Tm9kZU1hdGNoZXMiLCJtYXRjaFN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnRNZXRhdmFyaWFibGUiLCJzdGF0ZW1lbnRNZXRhdmFyaWFibGVGcm9tU3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudEZvck1ldGF2YXJpYWJsZVN1YnN0aXR1dGlvbiIsIlN0YXRlbWVudEZvck1ldGF2YXJpYWJsZVN1YnN0aXR1dGlvbiIsImZyb21TdGF0ZW1lbnRNZXRhdmFyaWFibGVBbmRTdWJzdGl0dXRpb24iLCJ2ZXJpZnkiLCJ2ZXJpZmllZCIsImZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5hbWUiLCJtZXRhdmFyaWFibGVBIiwibWV0YXZhcmlhYmxlQiIsIm1ldGF2YXJpYWJsZU5vZGVBIiwibWV0YXZhcmlhYmxlTm9kZUIiLCJtZXRhdmFyaWFibGVVbmlmaWVkIiwibWV0YXZhcmlhYmxlVW5pZmllciIsInVuaWZ5IiwidmVyaWZ5QXRUb3BMZXZlbCIsInZlcmlmaWVkQXRUb3BMZXZlbCIsIm1ldGF2YXJpYWJsZVByZXNlbnQiLCJpc01ldGF2YXJpYWJsZVByZXNlbnRCeU1ldGF2YXJpYWJsZU5hbWUiLCJhcmd1bWVudE5vZGUiLCJhcmd1bWVudCIsIkFyZ3VtZW50IiwiZnJvbUFyZ3VtZW50Tm9kZSIsImFyZ3VtZW50VmVyaWZpZWQiLCJ2ZXJpZnlHaXZlbk1ldGFUeXBlIiwidmVyaWZpZWRHaXZlbk1ldGFUeXBlIiwibWV0YVR5cGVTdHJpbmciLCJ0b0pTT04iLCJtZXRhVHlwZUpTT04iLCJqc29uIiwiZnJvbUpTT04iLCJsZXhlciIsImdldExleGVyIiwicGFyc2VyIiwiZ2V0UGFyc2VyIiwibWV0YXZhcmlhYmxlTm9kZUZyb21NZXRhdmFyaWFibGVTdHJpbmciLCJtZXRhVHlwZUZyb21KU09OIiwiZnJvbU1ldGF2YXJpYWJsZU5vZGUiLCJub2RlQXNTdHJpbmciLCJmcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwibWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwiTWV0YVR5cGUiLCJzaGltIiwibWV0YVR5cGVOb2RlIiwiTG9jYWxDb250ZXh0IiwiZnJvbUZpbGVDb250ZXh0IiwiZnJvbU1ldGFUeXBlTm9kZSIsIk9iamVjdCIsImFzc2lnbiIsImZpbmRNZXRhVHlwZUJ5TWV0YVR5cGVOYW1lIiwiZnJhbWVNZXRhdmFyaWFibGVOb2RlIiwiZnJhbWVNZXRhdmFyaWFibGVOYW1lIiwic3RhdGVtZW50TWV0YXZhcmlhYmxlTm9kZSIsInN0YXRlbWVudE1ldGF2YXJpYWJsZU5hbWUiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQXNVQTs7O2VBQUE7OzsyREFwVWlCOytEQUNJOzREQUNJO21FQUNPOzJFQUNhOytFQUNJO3FCQUV2QjtvQkFDMkI7b0JBQ0U7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFdkQsSUFBTUEsb0JBQW9CQyxJQUFBQSxnQkFBUyxFQUFDLDJCQUM5QkMsb0JBQW9CRCxJQUFBQSxnQkFBUyxFQUFDLHNDQUM5QkUsd0JBQXdCRixJQUFBQSxnQkFBUyxFQUFDLDBDQUNsQ0csNkJBQTZCSCxJQUFBQSxnQkFBUyxFQUFDLHlCQUN2Q0ksaUNBQWlDSixJQUFBQSxnQkFBUyxFQUFDO0FBRWpELElBQUEsQUFBTUssNkJBQU47YUFBTUEs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
321
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9tZXRhdmFyaWFibGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBzaGltIGZyb20gXCIuL3NoaW1cIjtcbmltcG9ydCBMb2NhbENvbnRleHQgZnJvbSBcIi4vY29udGV4dC9sb2NhbFwiO1xuaW1wb3J0IG1ldGF2YXJpYWJsZVVuaWZpZXIgZnJvbSBcIi4vdW5pZmllci9tZXRhdmFyaWFibGVcIjtcbmltcG9ydCBGcmFtZUZvck1ldGF2YXJpYWJsZVN1YnN0aXR1dGlvbiBmcm9tIFwiLi9zdWJzdGl0dXRpb24vZnJhbWVGb3JNZXRhdmFyaWFibGVcIjtcbmltcG9ydCBTdGF0ZW1lbnRGb3JNZXRhdmFyaWFibGVTdWJzdGl0dXRpb24gZnJvbSBcIi4vc3Vic3RpdHV0aW9uL3N0YXRlbWVudEZvck1ldGF2YXJpYWJsZVwiO1xuXG5pbXBvcnQgeyBub2RlUXVlcnkgfSBmcm9tIFwiLi91dGlsaXRpZXMvcXVlcnlcIjtcbmltcG9ydCB7IG1ldGF2YXJpYWJsZU5vZGVGcm9tTWV0YXZhcmlhYmxlU3RyaW5nIH0gZnJvbSBcIi4vdXRpbGl0aWVzL25vZGVcIjtcbmltcG9ydCB7IG1ldGFUeXBlRnJvbUpTT04sIG1ldGFUeXBlVG9NZXRhVHlwZUpTT04gfSBmcm9tIFwiLi91dGlsaXRpZXMvanNvblwiO1xuaW1wb3J0IHsgdHlwZU5hbWVGcm9tVHlwZU5vZGUsIG1ldGF2YXJpYWJsZU5hbWVGcm9tTWV0YXZhcmlhYmxlTm9kZSB9IGZyb20gXCIuL3V0aWxpdGllcy9uYW1lXCI7XG5cbmNvbnN0IHRlcm1Ob2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvbWV0YXZhcmlhYmxlL2FyZ3VtZW50L3Rlcm1cIiksXG4gICAgICB0eXBlTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL21ldGF2YXJpYWJsZS9hcmd1bWVudC90eXBlXCIpLFxuICAgICAgbWV0YVR5cGVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvbWV0YXZhcmlhYmxlRGVjbGFyYXRpb24vbWV0YVR5cGVcIiksXG4gICAgICBtZXRhdmFyaWFibGVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvbWV0YXZhcmlhYmxlRGVjbGFyYXRpb24vbWV0YXZhcmlhYmxlXCIpLFxuICAgICAgZnJhbWVNZXRhdmFyaWFibGVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvZnJhbWUvbWV0YXZhcmlhYmxlIVwiKSxcbiAgICAgIHN0YXRlbWVudE1ldGF2YXJpYWJsZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9zdGF0ZW1lbnQvbWV0YXZhcmlhYmxlIVwiKTtcblxuY2xhc3MgTWV0YXZhcmlhYmxlIHtcbiAgY29uc3RydWN0b3IoZmlsZUNvbnRleHQsIHN0cmluZywgbm9kZSwgbmFtZSwgbWV0YVR5cGUpIHtcbiAgICB0aGlzLmZpbGVDb250ZXh0ID0gZmlsZUNvbnRleHQ7XG4gICAgdGhpcy5zdHJpbmcgPSBzdHJpbmc7XG4gICAgdGhpcy5ub2RlID0gbm9kZTtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIHRoaXMubWV0YVR5cGUgPSBtZXRhVHlwZTtcbiAgfVxuXG4gIGdldEZpbGVDb250ZXh0KCkge1xuICAgIHJldHVybiB0aGlzLmZpbGVDb250ZXh0O1xuICB9XG5cbiAgZ2V0U3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLnN0cmluZztcbiAgfVxuXG4gIGdldE5vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMubm9kZTtcbiAgfVxuXG4gIGdldE5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgfVxuXG4gIGdldE1ldGFUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLm1ldGFUeXBlO1xuICB9XG5cbiAgZ2V0TWV0YVR5cGVOYW1lKCkge1xuICAgIGNvbnN0IG1ldGFUeXBlTmFtZSA9IHRoaXMubWV0YVR5cGUuZ2V0TmFtZSgpO1xuXG4gICAgcmV0dXJuIG1ldGFUeXBlTmFtZTtcbiAgfVxuXG4gIG1hdGNoTWV0YVR5cGUobWV0YVR5cGUpIHtcbiAgICBjb25zdCBtZXRhVHlwZU1hdGNoZXMgPSAodGhpcy5tZXRhVHlwZSA9PT0gbWV0YVR5cGUpO1xuXG4gICAgcmV0dXJuIG1ldGFUeXBlTWF0Y2hlcztcbiAgfVxuXG4gIG1hdGNoTWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKSB7XG4gICAgY29uc3QgbWV0YXZhcmlhYmxlTmFtZU1hdGNoZXMgPSAodGhpcy5uYW1lID09PSBtZXRhdmFyaWFibGVOYW1lKTtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGVOYW1lTWF0Y2hlcztcbiAgfVxuXG4gIG1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgPSB0aGlzLm5vZGUubWF0Y2gobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXM7XG4gIH1cblxuICB1bmlmeUZyYW1lKGZyYW1lLCBzdWJzdGl0dXRpb25zLCBsb2NhbENvbnRleHQpIHtcbiAgICBsZXQgZnJhbWVVbmlmaWVkID0gZmFsc2U7XG5cbiAgICBjb25zdCBmcmFtZU5vZGUgPSBmcmFtZS5nZXROb2RlKCksXG4gICAgICAgICAgZnJhbWVTdHJpbmcgPSBmcmFtZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVTdHJpbmcgPSB0aGlzLnN0cmluZzsgLy8vXG5cbiAgICBsb2NhbENvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtmcmFtZVN0cmluZ30nIGZyYW1lIHdpdGggdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZS4uLmApO1xuXG4gICAgY29uc3QgbWV0YXZhcmlhYmxlTmFtZSA9IHRoaXMubmFtZSwgLy8vXG4gICAgICAgICAgc2ltcGxlU3Vic3RpdHV0aW9uUHJlc2VudCA9IHN1YnN0aXR1dGlvbnMuaXNTaW1wbGVTdWJzdGl0dXRpb25QcmVzZW50QnlNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpO1xuXG4gICAgaWYgKHNpbXBsZVN1YnN0aXR1dGlvblByZXNlbnQpIHtcbiAgICAgIGNvbnN0IHNpbXBsZVN1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbnMuZmluZFNpbXBsZVN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKSxcbiAgICAgICAgICAgIHN1YnN0aXR1dGlvbiA9IHNpbXBsZVN1YnN0aXR1dGlvbiwgIC8vL1xuICAgICAgICAgICAgZnJhbWVOb2RlTWF0Y2hlcyA9IHN1YnN0aXR1dGlvbi5tYXRjaEZyYW1lTm9kZShmcmFtZU5vZGUpO1xuXG4gICAgICBpZiAoZnJhbWVOb2RlTWF0Y2hlcykge1xuICAgICAgICBmcmFtZVVuaWZpZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gdGhpcy5ub2RlLCAgLy8vXG4gICAgICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBsb2NhbENvbnRleHQpLFxuICAgICAgICAgICAgZnJhbWVNZXRhdmFyaWFibGUgID0gZnJhbWVNZXRhdmFyaWFibGVGcm9tU3RhdGVtZW50Tm9kZShmcmFtZU5vZGUsIGxvY2FsQ29udGV4dCk7XG5cbiAgICAgIGlmIChtZXRhdmFyaWFibGUgPT09IGZyYW1lTWV0YXZhcmlhYmxlKSB7XG4gICAgICAgIGZyYW1lVW5pZmllZCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBtZXRhdmFyaWFibGUgPSB0aGlzLCAgLy8vXG4gICAgICAgICAgICAgIGZyYW1lRm9yTWV0YXZhcmlhYmxlU3Vic3RpdHV0aW9uID0gRnJhbWVGb3JNZXRhdmFyaWFibGVTdWJzdGl0dXRpb24uZnJvbUZyYW1lQW5kTWV0YXZhcmlhYmxlKGZyYW1lLCBtZXRhdmFyaWFibGUsIGxvY2FsQ29udGV4dCksXG4gICAgICAgICAgICAgIHN1YnN0aXR1dGlvbiA9IGZyYW1lRm9yTWV0YXZhcmlhYmxlU3Vic3RpdHV0aW9uOyAgLy8vXG5cbiAgICAgICAgc3Vic3RpdHV0aW9ucy5hZGRTdWJzdGl0dXRpb24oc3Vic3RpdHV0aW9uLCBsb2NhbENvbnRleHQpO1xuXG4gICAgICAgIGZyYW1lVW5pZmllZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGZyYW1lVW5pZmllZCkge1xuICAgICAgbG9jYWxDb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtmcmFtZVN0cmluZ30nIGZyYW1lIHdpdGggdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZS5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZnJhbWVVbmlmaWVkO1xuICB9XG5cbiAgdW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBzdWJzdGl0dXRpb24sIHN1YnN0aXR1dGlvbnMsIGxvY2FsQ29udGV4dCkge1xuICAgIGxldCBzdGF0ZW1lbnRVbmlmaWVkID0gZmFsc2U7XG5cbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gdGhpcy5zdHJpbmcsIC8vL1xuICAgICAgICAgIHN1YnN0aXR1dGlvblN0cmluZyA9IChzdWJzdGl0dXRpb24gIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzdGl0dXRpb24uZ2V0U3RyaW5nKCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbDtcblxuICAgIChzdWJzdGl0dXRpb25TdHJpbmcgIT09IG51bGwpID9cbiAgICAgIGxvY2FsQ29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCB3aXRoIHRoZSAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUgZ2l2ZW4gdGhlICR7c3Vic3RpdHV0aW9uU3RyaW5nfSBzdWJzdGl0dXRpb24uLi5gKSA6XG4gICAgICAgIGxvY2FsQ29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCB3aXRoIHRoZSAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUuLi5gKTtcblxuICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnQuZ2V0Tm9kZSgpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZU5vZGUgPSB0aGlzLm5vZGUsIC8vL1xuICAgICAgICAgIG1ldGF2YXJpYWJsZU5hbWUgPSBtZXRhdmFyaWFibGVOYW1lRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSksXG4gICAgICAgICAgc3Vic3RpdHV0aW9uTm9kZSA9IChzdWJzdGl0dXRpb24gIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vic3RpdHV0aW9uLmdldFN1YnN0aXR1dGlvbk5vZGUoKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICBzdWJzdGl0dXRpb25QcmVzZW50ID0gc3Vic3RpdHV0aW9ucy5pc1N1YnN0aXR1dGlvblByZXNlbnRCeU1ldGF2YXJpYWJsZU5hbWVBbmRTdWJzdGl0dXRpb25Ob2RlKG1ldGF2YXJpYWJsZU5hbWUsIHN1YnN0aXR1dGlvbk5vZGUpO1xuXG4gICAgaWYgKHN1YnN0aXR1dGlvblByZXNlbnQpIHtcbiAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbnMuZmluZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTmFtZUFuZFN1YnN0aXR1dGlvbk5vZGUobWV0YXZhcmlhYmxlTmFtZSwgc3Vic3RpdHV0aW9uTm9kZSksXG4gICAgICAgICAgICBzdGF0ZW1lbnROb2RlTWF0Y2hlcyA9IHN1YnN0aXR1dGlvbi5tYXRjaFN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSk7XG5cbiAgICAgIGlmIChzdGF0ZW1lbnROb2RlTWF0Y2hlcykge1xuICAgICAgICBzdGF0ZW1lbnRVbmlmaWVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IHRoaXMubm9kZSwgIC8vL1xuICAgICAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgbG9jYWxDb250ZXh0KSxcbiAgICAgICAgICAgIHN0YXRlbWVudE1ldGF2YXJpYWJsZSA9IHN0YXRlbWVudE1ldGF2YXJpYWJsZUZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGxvY2FsQ29udGV4dCk7XG5cbiAgICAgIGlmIChtZXRhdmFyaWFibGUgPT09IHN0YXRlbWVudE1ldGF2YXJpYWJsZSkge1xuICAgICAgICBzdGF0ZW1lbnRVbmlmaWVkID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZSA9IHRoaXMsICAvLy9cbiAgICAgICAgICAgICAgc3RhdGVtZW50Rm9yTWV0YXZhcmlhYmxlU3Vic3RpdHV0aW9uID0gU3RhdGVtZW50Rm9yTWV0YXZhcmlhYmxlU3Vic3RpdHV0aW9uLmZyb21TdGF0ZW1lbnRNZXRhdmFyaWFibGVBbmRTdWJzdGl0dXRpb24oc3RhdGVtZW50LCBtZXRhdmFyaWFibGUsIHN1YnN0aXR1dGlvbiwgbG9jYWxDb250ZXh0KTtcblxuICAgICAgICBzdWJzdGl0dXRpb24gPSBzdGF0ZW1lbnRGb3JNZXRhdmFyaWFibGVTdWJzdGl0dXRpb247ICAvLy9cblxuICAgICAgICBzdWJzdGl0dXRpb25zLmFkZFN1YnN0aXR1dGlvbihzdWJzdGl0dXRpb24sIGxvY2FsQ29udGV4dCk7XG5cbiAgICAgICAgc3RhdGVtZW50VW5pZmllZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlbWVudFVuaWZpZWQpIHtcbiAgICAgIChzdWJzdGl0dXRpb25TdHJpbmcgIT09IG51bGwpID9cbiAgICAgICAgbG9jYWxDb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgd2l0aCB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlIGdpdmVuIHRoZSAke3N1YnN0aXR1dGlvblN0cmluZ30gc3Vic3RpdHV0aW9uLmApIDpcbiAgICAgICAgICBsb2NhbENvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCB3aXRoIHRoZSAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXRlbWVudFVuaWZpZWQ7XG4gIH1cblxuICB1bmlmeVN1YnN0aXR1dGlvbihzdWJzdGl0dXRpb24sIGxvY2FsQ29udGV4dCkge1xuICAgIGxldCBzdWJzdGl0dXRpb25VbmlmaWVkID0gZmFsc2U7XG5cbiAgICBjb25zdCBtZXRhdmFyaWFibGVTdHJpbmcgPSB0aGlzLnN0cmluZywgIC8vL1xuICAgICAgICAgIHN1YnN0aXR1dGlvblN0cmluZyA9IHN1YnN0aXR1dGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGxvY2FsQ29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N1YnN0aXR1dGlvblN0cmluZ30nIHN1YnN0aXR1dGlvbiB3aXRoIHRoZSAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUuLi5gKTtcblxuICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5hbWUgPSB0aGlzLm5hbWUsIC8vL1xuICAgICAgICAgIGp1ZGdlbWVudCA9IGxvY2FsQ29udGV4dC5maW5kSnVkZ2VtZW50QnlNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpO1xuXG4gICAgaWYgKGp1ZGdlbWVudCAhPT0gbnVsbCl7XG4gICAgICBjb25zdCBkZWNsYXJhdGlvbiA9IGp1ZGdlbWVudC5nZXREZWNsYXJhdGlvbigpO1xuXG4gICAgICBzdWJzdGl0dXRpb25VbmlmaWVkID0gZGVjbGFyYXRpb24udW5pZnlTdWJzdGl0dXRpb24oc3Vic3RpdHV0aW9uLCBsb2NhbENvbnRleHQpO1xuICAgIH1cblxuICAgIGlmIChzdWJzdGl0dXRpb25VbmlmaWVkKSB7XG4gICAgICBsb2NhbENvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N1YnN0aXR1dGlvblN0cmluZ30nIHN1YnN0aXR1dGlvbiB3aXRoIHRoZSAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1YnN0aXR1dGlvblVuaWZpZWQ7XG4gIH1cblxuICB2ZXJpZnkobG9jYWxDb250ZXh0KSB7XG4gICAgbGV0IHZlcmlmaWVkO1xuXG4gICAgY29uc3QgbWV0YXZhcmlhYmxlU3RyaW5nID0gdGhpcy5zdHJpbmc7IC8vL1xuXG4gICAgbG9jYWxDb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZS4uLmApO1xuXG4gICAgY29uc3QgbWV0YXZhcmlhYmxlTmFtZSA9IHRoaXMubmFtZSxcbiAgICAgICAgICBtZXRhdmFyaWFibGUgPSBsb2NhbENvbnRleHQuZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKTtcblxuICAgIGlmIChtZXRhdmFyaWFibGUgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZUEgPSBtZXRhdmFyaWFibGUsIC8vL1xuICAgICAgICAgICAgbWV0YXZhcmlhYmxlQiA9IHRoaXMsXG4gICAgICAgICAgICBtZXRhdmFyaWFibGVOb2RlQSA9IG1ldGF2YXJpYWJsZUEuZ2V0Tm9kZSgpLCAvLy9cbiAgICAgICAgICAgIG1ldGF2YXJpYWJsZU5vZGVCID0gbWV0YXZhcmlhYmxlQi5nZXROb2RlKCksXG4gICAgICAgICAgICBtZXRhdmFyaWFibGVVbmlmaWVkID0gbWV0YXZhcmlhYmxlVW5pZmllci51bmlmeShtZXRhdmFyaWFibGVOb2RlQSwgbWV0YXZhcmlhYmxlTm9kZUIsIGxvY2FsQ29udGV4dCk7XG5cbiAgICAgIHZlcmlmaWVkID0gbWV0YXZhcmlhYmxlVW5pZmllZDsgLy8vXG4gICAgfVxuXG4gICAgaWYgKHZlcmlmaWVkKSB7XG4gICAgICBsb2NhbENvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZlcmlmaWVkO1xuICB9XG5cbiAgdmVyaWZ5QXRUb3BMZXZlbChmaWxlQ29udGV4dCkge1xuICAgIGxldCB2ZXJpZmllZEF0VG9wTGV2ZWwgPSBmYWxzZTtcblxuICAgIGNvbnN0IG1ldGF2YXJpYWJsZVN0cmluZyA9IHRoaXMuc3RyaW5nOyAvLy9cblxuICAgIGZpbGVDb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZSBhdCB0b3AgbGV2ZWwuLi5gKTtcblxuICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSB0aGlzLm5vZGUsIC8vL1xuICAgICAgICAgIG1ldGF2YXJpYWJsZU5hbWUgPSBtZXRhdmFyaWFibGVOYW1lRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlUHJlc2VudCA9IGZpbGVDb250ZXh0LmlzTWV0YXZhcmlhYmxlUHJlc2VudEJ5TWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKTtcblxuICAgIGlmIChtZXRhdmFyaWFibGVQcmVzZW50KSB7XG4gICAgICBmaWxlQ29udGV4dC5kZWJ1ZyhgVGhlIG1ldGF2YXJpYWJsZSAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBpcyBhbHJlYWR5IHByZXNlbnQuYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHRlcm1Ob2RlID0gdGVybU5vZGVRdWVyeSh0aGlzLm5vZGUpO1xuXG4gICAgICBpZiAodGVybU5vZGUgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgdGVybVN0cmluZyA9IHRoaXMuZmlsZUNvbnRleHQubm9kZUFzU3RyaW5nKHRlcm1Ob2RlKTtcblxuICAgICAgICB0aGlzLmZpbGVDb250ZXh0LmRlYnVnKGBUaGUgJyR7dGVybVN0cmluZ30nIHRlcm0gd2FzIGZvdW5kIHdoZW4gYSB0eXBlIHNob3VsZCBoYXZlIGJlZW4gcHJlc2VudC5gKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHR5cGVOb2RlID0gdHlwZU5vZGVRdWVyeSh0aGlzLm5vZGUpO1xuXG4gICAgICAgIGlmICh0eXBlTm9kZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnN0IHR5cGVOYW1lID0gdHlwZU5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUpLFxuICAgICAgICAgICAgICAgIHR5cGVQcmVzZW50ID0gdGhpcy5maWxlQ29udGV4dC5pc1R5cGVQcmVzZW50QnlUeXBlTmFtZSh0eXBlTmFtZSk7XG5cbiAgICAgICAgICBpZiAodHlwZVByZXNlbnQpIHtcbiAgICAgICAgICAgIHZlcmlmaWVkQXRUb3BMZXZlbCA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZmlsZUNvbnRleHQuZGVidWcoYFRoZSAnJHt0eXBlTmFtZX0nIHR5cGUgaXMgbm90IHByZXNlbnQuYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZlcmlmaWVkQXRUb3BMZXZlbCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodmVyaWZpZWRBdFRvcExldmVsKSB7XG4gICAgICBmaWxlQ29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZSBhdCB0b3AgbGV2ZWwuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZlcmlmaWVkQXRUb3BMZXZlbDtcbiAgfVxuXG4gIHZlcmlmeUdpdmVuTWV0YVR5cGUobWV0YVR5cGUsIGxvY2FsQ29udGV4dCkge1xuICAgIGxldCB2ZXJpZmllZEdpdmVuTWV0YVR5cGUgPSBmYWxzZTtcblxuICAgIGNvbnN0IG1ldGF2YXJpYWJsZVN0cmluZyA9IHRoaXMuc3RyaW5nLCAgLy8vXG4gICAgICAgICAgbWV0YVR5cGVTdHJpbmcgPSBtZXRhVHlwZS5nZXRTdHJpbmcoKTtcblxuICAgIGxvY2FsQ29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUgZ2l2ZW4gdGhlICcke21ldGFUeXBlU3RyaW5nfScgbWV0YS10eXBlLi4uYCk7XG5cbiAgICBjb25zdCBuYW1lID0gdGhpcy5nZXROYW1lKCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlTmFtZSA9IG5hbWUsICAvLy9cbiAgICAgICAgICBtZXRhdmFyaWFibGUgPSBsb2NhbENvbnRleHQuZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKTtcblxuICAgIGlmIChtZXRhdmFyaWFibGUgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IG1ldGFUeXBlTWF0Y2hlcyA9IG1ldGF2YXJpYWJsZS5tYXRjaE1ldGFUeXBlKG1ldGFUeXBlKTtcblxuICAgICAgdmVyaWZpZWRHaXZlbk1ldGFUeXBlID0gbWV0YVR5cGVNYXRjaGVzOyAgLy8vXG4gICAgfVxuXG4gICAgaWYgKHZlcmlmaWVkR2l2ZW5NZXRhVHlwZSkge1xuICAgICAgbG9jYWxDb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlIGdpdmVuIHRoZSAnJHttZXRhVHlwZVN0cmluZ30nIG1ldGEtdHlwZS5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmVyaWZpZWRHaXZlbk1ldGFUeXBlO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIGNvbnN0IG1ldGFUeXBlSlNPTiA9IG1ldGFUeXBlVG9NZXRhVHlwZUpTT04odGhpcy5tZXRhVHlwZSksXG4gICAgICAgICAgbWV0YVR5cGUgPSBtZXRhVHlwZUpTT04sICAvLy9cbiAgICAgICAgICBzdHJpbmcgPSB0aGlzLnN0cmluZyxcbiAgICAgICAgICBqc29uID0ge1xuICAgICAgICAgICAgc3RyaW5nLFxuICAgICAgICAgICAgbWV0YVR5cGVcbiAgICAgICAgICB9O1xuXG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgZmlsZUNvbnRleHQpIHtcbiAgICBjb25zdCB7IHN0cmluZyB9ID0ganNvbixcbiAgICAgICAgICBsZXhlciAgPSBmaWxlQ29udGV4dC5nZXRMZXhlcigpLFxuICAgICAgICAgIHBhcnNlciA9IGZpbGVDb250ZXh0LmdldFBhcnNlcigpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZVN0cmluZyA9IHN0cmluZywgIC8vL1xuICAgICAgICAgIG1ldGF2YXJpYWJsZU5vZGUgPSBtZXRhdmFyaWFibGVOb2RlRnJvbU1ldGF2YXJpYWJsZVN0cmluZyhtZXRhdmFyaWFibGVTdHJpbmcsIGxleGVyLCBwYXJzZXIpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZU5hbWUgPSBtZXRhdmFyaWFibGVOYW1lRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSksXG4gICAgICAgICAgbm9kZSA9IG1ldGF2YXJpYWJsZU5vZGUsICAvLy9cbiAgICAgICAgICBuYW1lID0gbWV0YXZhcmlhYmxlTmFtZSwgIC8vL1xuICAgICAgICAgIG1ldGFUeXBlID0gbWV0YVR5cGVGcm9tSlNPTihqc29uLCBmaWxlQ29udGV4dCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlID0gbmV3IE1ldGF2YXJpYWJsZShmaWxlQ29udGV4dCwgc3RyaW5nLCBub2RlLCBuYW1lLCBtZXRhVHlwZSk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlO1xuICB9XG5cbiAgc3RhdGljIGZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGxvY2FsQ29udGV4dCkge1xuICAgIGxldCBtZXRhdmFyaWFibGUgPSBudWxsO1xuXG4gICAgaWYgKG1ldGF2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5hbWUgPSBtZXRhdmFyaWFibGVOYW1lRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSksXG4gICAgICAgICAgICBub2RlID0gbWV0YXZhcmlhYmxlTm9kZSwgIC8vL1xuICAgICAgICAgICAgbmFtZSA9IG1ldGF2YXJpYWJsZU5hbWUsICAvLy9cbiAgICAgICAgICAgIHN0cmluZyA9IGxvY2FsQ29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgICAgICBtZXRhVHlwZSA9IG51bGw7XG5cbiAgICAgIG1ldGF2YXJpYWJsZSA9IG5ldyBNZXRhdmFyaWFibGUobG9jYWxDb250ZXh0LCBzdHJpbmcsIG5vZGUsIG5hbWUsIG1ldGFUeXBlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlO1xuICB9XG5cbiAgc3RhdGljIGZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUobWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBmaWxlQ29udGV4dCkge1xuICAgIGNvbnN0IHsgTWV0YVR5cGUgfSA9IHNoaW0sXG4gICAgICAgICAgbWV0YVR5cGVOb2RlID0gbWV0YVR5cGVOb2RlUXVlcnkobWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVOb2RlID0gbWV0YXZhcmlhYmxlTm9kZVF1ZXJ5KG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlTmFtZSA9IG1ldGF2YXJpYWJsZU5hbWVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgICBsb2NhbENvbnRleHQgPSBMb2NhbENvbnRleHQuZnJvbUZpbGVDb250ZXh0KGZpbGVDb250ZXh0KSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVTdHJpbmcgPSBmaWxlQ29udGV4dC5ub2RlQXNTdHJpbmcobWV0YXZhcmlhYmxlTm9kZSksXG4gICAgICAgICAgc3RyaW5nID0gbWV0YXZhcmlhYmxlU3RyaW5nLCAgLy8vXG4gICAgICAgICAgbm9kZSA9IG1ldGF2YXJpYWJsZU5vZGUsICAvLy9cbiAgICAgICAgICBuYW1lID0gbWV0YXZhcmlhYmxlTmFtZSwgIC8vL1xuICAgICAgICAgIG1ldGFUeXBlID0gTWV0YVR5cGUuZnJvbU1ldGFUeXBlTm9kZShtZXRhVHlwZU5vZGUsIGxvY2FsQ29udGV4dCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlID0gbmV3IE1ldGF2YXJpYWJsZShmaWxlQ29udGV4dCwgc3RyaW5nLCBub2RlLCBuYW1lLCBtZXRhVHlwZSk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlO1xuICB9XG59XG5cbk9iamVjdC5hc3NpZ24oc2hpbSwge1xuICBNZXRhdmFyaWFibGVcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBNZXRhdmFyaWFibGU7XG5cbmZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGxvY2FsQ29udGV4dCkge1xuICBjb25zdCBtZXRhdmFyaWFibGVOYW1lID0gbWV0YXZhcmlhYmxlTmFtZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBsb2NhbENvbnRleHQuZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5mdW5jdGlvbiBmcmFtZU1ldGF2YXJpYWJsZUZyb21TdGF0ZW1lbnROb2RlKGZyYW1lTm9kZSwgbG9jYWxDb250ZXh0KSB7XG4gIGxldCBmcmFtZU1ldGF2YXJpYWJsZSA9IG51bGw7XG5cbiAgY29uc3QgZnJhbWVNZXRhdmFyaWFibGVOb2RlID0gZnJhbWVNZXRhdmFyaWFibGVOb2RlUXVlcnkoZnJhbWVOb2RlKTtcblxuICBpZiAoZnJhbWVNZXRhdmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgY29uc3QgZnJhbWVNZXRhdmFyaWFibGVOYW1lID0gbWV0YXZhcmlhYmxlTmFtZUZyb21NZXRhdmFyaWFibGVOb2RlKGZyYW1lTWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICBmcmFtZU1ldGF2YXJpYWJsZSA9IGxvY2FsQ29udGV4dC5maW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOYW1lKGZyYW1lTWV0YXZhcmlhYmxlTmFtZSk7XG4gIH1cblxuICByZXR1cm4gZnJhbWVNZXRhdmFyaWFibGU7XG59XG5cbmZ1bmN0aW9uIHN0YXRlbWVudE1ldGF2YXJpYWJsZUZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGxvY2FsQ29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50TWV0YXZhcmlhYmxlID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnRNZXRhdmFyaWFibGVOb2RlID0gc3RhdGVtZW50TWV0YXZhcmlhYmxlTm9kZVF1ZXJ5KHN0YXRlbWVudE5vZGUpO1xuXG4gIGlmIChzdGF0ZW1lbnRNZXRhdmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50TWV0YXZhcmlhYmxlTmFtZSA9IG1ldGF2YXJpYWJsZU5hbWVGcm9tTWV0YXZhcmlhYmxlTm9kZShzdGF0ZW1lbnRNZXRhdmFyaWFibGVOb2RlKTtcblxuICAgIHN0YXRlbWVudE1ldGF2YXJpYWJsZSA9IGxvY2FsQ29udGV4dC5maW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOYW1lKHN0YXRlbWVudE1ldGF2YXJpYWJsZU5hbWUpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudE1ldGF2YXJpYWJsZTtcbn1cbiJdLCJuYW1lcyI6WyJ0ZXJtTm9kZVF1ZXJ5Iiwibm9kZVF1ZXJ5IiwidHlwZU5vZGVRdWVyeSIsIm1ldGFUeXBlTm9kZVF1ZXJ5IiwibWV0YXZhcmlhYmxlTm9kZVF1ZXJ5IiwiZnJhbWVNZXRhdmFyaWFibGVOb2RlUXVlcnkiLCJzdGF0ZW1lbnRNZXRhdmFyaWFibGVOb2RlUXVlcnkiLCJNZXRhdmFyaWFibGUiLCJmaWxlQ29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJuYW1lIiwibWV0YVR5cGUiLCJnZXRGaWxlQ29udGV4dCIsImdldFN0cmluZyIsImdldE5vZGUiLCJnZXROYW1lIiwiZ2V0TWV0YVR5cGUiLCJnZXRNZXRhVHlwZU5hbWUiLCJtZXRhVHlwZU5hbWUiLCJtYXRjaE1ldGFUeXBlIiwibWV0YVR5cGVNYXRjaGVzIiwibWF0Y2hNZXRhdmFyaWFibGVOYW1lIiwibWV0YXZhcmlhYmxlTmFtZSIsIm1ldGF2YXJpYWJsZU5hbWVNYXRjaGVzIiwibWF0Y2hNZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzIiwibWF0Y2giLCJ1bmlmeUZyYW1lIiwiZnJhbWUiLCJzdWJzdGl0dXRpb25zIiwibG9jYWxDb250ZXh0IiwiZnJhbWVVbmlmaWVkIiwiZnJhbWVOb2RlIiwiZnJhbWVTdHJpbmciLCJtZXRhdmFyaWFibGVTdHJpbmciLCJ0cmFjZSIsInNpbXBsZVN1YnN0aXR1dGlvblByZXNlbnQiLCJpc1NpbXBsZVN1YnN0aXR1dGlvblByZXNlbnRCeU1ldGF2YXJpYWJsZU5hbWUiLCJzaW1wbGVTdWJzdGl0dXRpb24iLCJmaW5kU2ltcGxlU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOYW1lIiwic3Vic3RpdHV0aW9uIiwiZnJhbWVOb2RlTWF0Y2hlcyIsIm1hdGNoRnJhbWVOb2RlIiwibWV0YXZhcmlhYmxlIiwibWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUiLCJmcmFtZU1ldGF2YXJpYWJsZSIsImZyYW1lTWV0YXZhcmlhYmxlRnJvbVN0YXRlbWVudE5vZGUiLCJmcmFtZUZvck1ldGF2YXJpYWJsZVN1YnN0aXR1dGlvbiIsIkZyYW1lRm9yTWV0YXZhcmlhYmxlU3Vic3RpdHV0aW9uIiwiZnJvbUZyYW1lQW5kTWV0YXZhcmlhYmxlIiwiYWRkU3Vic3RpdHV0aW9uIiwiZGVidWciLCJ1bmlmeVN0YXRlbWVudCIsInN0YXRlbWVudCIsInN0YXRlbWVudFVuaWZpZWQiLCJzdGF0ZW1lbnRTdHJpbmciLCJzdWJzdGl0dXRpb25TdHJpbmciLCJzdGF0ZW1lbnROb2RlIiwibWV0YXZhcmlhYmxlTmFtZUZyb21NZXRhdmFyaWFibGVOb2RlIiwic3Vic3RpdHV0aW9uTm9kZSIsImdldFN1YnN0aXR1dGlvbk5vZGUiLCJzdWJzdGl0dXRpb25QcmVzZW50IiwiaXNTdWJzdGl0dXRpb25QcmVzZW50QnlNZXRhdmFyaWFibGVOYW1lQW5kU3Vic3RpdHV0aW9uTm9kZSIsImZpbmRTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5hbWVBbmRTdWJzdGl0dXRpb25Ob2RlIiwic3RhdGVtZW50Tm9kZU1hdGNoZXMiLCJtYXRjaFN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnRNZXRhdmFyaWFibGUiLCJzdGF0ZW1lbnRNZXRhdmFyaWFibGVGcm9tU3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudEZvck1ldGF2YXJpYWJsZVN1YnN0aXR1dGlvbiIsIlN0YXRlbWVudEZvck1ldGF2YXJpYWJsZVN1YnN0aXR1dGlvbiIsImZyb21TdGF0ZW1lbnRNZXRhdmFyaWFibGVBbmRTdWJzdGl0dXRpb24iLCJ1bmlmeVN1YnN0aXR1dGlvbiIsInN1YnN0aXR1dGlvblVuaWZpZWQiLCJqdWRnZW1lbnQiLCJmaW5kSnVkZ2VtZW50QnlNZXRhdmFyaWFibGVOYW1lIiwiZGVjbGFyYXRpb24iLCJnZXREZWNsYXJhdGlvbiIsInZlcmlmeSIsInZlcmlmaWVkIiwiZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTmFtZSIsIm1ldGF2YXJpYWJsZUEiLCJtZXRhdmFyaWFibGVCIiwibWV0YXZhcmlhYmxlTm9kZUEiLCJtZXRhdmFyaWFibGVOb2RlQiIsIm1ldGF2YXJpYWJsZVVuaWZpZWQiLCJtZXRhdmFyaWFibGVVbmlmaWVyIiwidW5pZnkiLCJ2ZXJpZnlBdFRvcExldmVsIiwidmVyaWZpZWRBdFRvcExldmVsIiwibWV0YXZhcmlhYmxlUHJlc2VudCIsImlzTWV0YXZhcmlhYmxlUHJlc2VudEJ5TWV0YXZhcmlhYmxlTmFtZSIsInRlcm1Ob2RlIiwidGVybVN0cmluZyIsIm5vZGVBc1N0cmluZyIsInR5cGVOb2RlIiwidHlwZU5hbWUiLCJ0eXBlTmFtZUZyb21UeXBlTm9kZSIsInR5cGVQcmVzZW50IiwiaXNUeXBlUHJlc2VudEJ5VHlwZU5hbWUiLCJ2ZXJpZnlHaXZlbk1ldGFUeXBlIiwidmVyaWZpZWRHaXZlbk1ldGFUeXBlIiwibWV0YVR5cGVTdHJpbmciLCJ0b0pTT04iLCJtZXRhVHlwZUpTT04iLCJtZXRhVHlwZVRvTWV0YVR5cGVKU09OIiwianNvbiIsImZyb21KU09OIiwibGV4ZXIiLCJnZXRMZXhlciIsInBhcnNlciIsImdldFBhcnNlciIsIm1ldGF2YXJpYWJsZU5vZGVGcm9tTWV0YXZhcmlhYmxlU3RyaW5nIiwibWV0YVR5cGVGcm9tSlNPTiIsImZyb21NZXRhdmFyaWFibGVOb2RlIiwiZnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsIm1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsIk1ldGFUeXBlIiwic2hpbSIsIm1ldGFUeXBlTm9kZSIsIkxvY2FsQ29udGV4dCIsImZyb21GaWxlQ29udGV4dCIsImZyb21NZXRhVHlwZU5vZGUiLCJPYmplY3QiLCJhc3NpZ24iLCJmcmFtZU1ldGF2YXJpYWJsZU5vZGUiLCJmcmFtZU1ldGF2YXJpYWJsZU5hbWUiLCJzdGF0ZW1lbnRNZXRhdmFyaWFibGVOb2RlIiwic3RhdGVtZW50TWV0YXZhcmlhYmxlTmFtZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBdVdBOzs7ZUFBQTs7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
@@ -8,7 +8,6 @@ Object.defineProperty(exports, "default", {
8
8
  return _default;
9
9
  }
10
10
  });
11
- var _metavariable = /*#__PURE__*/ _interop_require_default(require("../../../unifier/metavariable"));
12
11
  var _statementForMetavariable = /*#__PURE__*/ _interop_require_default(require("../../../substitution/statementForMetavariable"));
13
12
  var _string = require("../../../utilities/string");
14
13
  var _name = require("../../../utilities/name");
@@ -89,16 +88,13 @@ function unifyAWithConjecture(qualifiedStatement, substitutions, localContext) {
89
88
  }
90
89
  function unifyAWithReference(qualifiedStatement, substitutions, localContext) {
91
90
  var unifiedWithReference = false;
92
- var reference = qualifiedStatement.getReference(), metavariableNode = reference.getMetavariableNode(), metavariableName = (0, _name.metavariableNameFromMetavariableNode)(metavariableNode), metavariable = localContext.findMetavariableByMetavariableName(metavariableName);
93
- if (metavariable !== null) {
91
+ var reference = qualifiedStatement.getReference(), metavariableNode = reference.getMetavariableNode(), metavariableName = (0, _name.metavariableNameFromMetavariableNode)(metavariableNode), metavariablePresent = localContext.isMetavariablePresentByMetavariableName(metavariableName);
92
+ if (metavariablePresent) {
94
93
  var statement = qualifiedStatement.getStatement(), statementString = statement.getString(), referenceString = reference.getString();
95
94
  localContext.trace("Unifying the '".concat(statementString, "' qualified statement with the '").concat(referenceString, "' reference..."));
96
- var metavariableNode1 = metavariable.getNode(), referenceMetavariableNode = reference.getMetavariableNode(), metavariableNodeA = referenceMetavariableNode, metavariableNodeB = metavariableNode1, metavariableUnified = _metavariable.default.unify(metavariableNodeA, metavariableNodeB, localContext);
97
- if (metavariableUnified) {
98
- var statementNode = statement.getNode(), metavariableNode2 = metavariableNodeA, statementForMetavariableSubstitution = _statementForMetavariable.default.fromStatementNodeAndMetavariableNode(statementNode, metavariableNode2, localContextA, localContextB), substitution = statementForMetavariableSubstitution, localContextA = localContext, localContextB = localContext; ///
99
- substitutions.addSubstitution(substitution, localContextA, localContextB);
100
- unifiedWithReference = true;
101
- }
95
+ var metavariable = reference.getMetavariable(), statementForMetavariableSubstitution = _statementForMetavariable.default.fromStatementAndMetavariable(statement, metavariable, localContext), substitution = statementForMetavariableSubstitution; ///
96
+ substitutions.addSubstitution(substitution, localContext);
97
+ unifiedWithReference = true;
102
98
  if (unifiedWithReference) {
103
99
  localContext.debug("...unified the '".concat(statementString, "' qualified statement with the '").concat(referenceString, "' reference."));
104
100
  }
@@ -115,4 +111,4 @@ var unifyMixins = [
115
111
  ];
116
112
  var _default = unifyMixins;
117
113
 
118
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9taXhpbnMvc3RhdGVtZW50L3F1YWxpZmllZC91bmlmeS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IG1ldGF2YXJpYWJsZVVuaWZpZXIgZnJvbSBcIi4uLy4uLy4uL3VuaWZpZXIvbWV0YXZhcmlhYmxlXCI7XG5pbXBvcnQgU3RhdGVtZW50Rm9yTWV0YXZhcmlhYmxlU3Vic3RpdHV0aW9uIGZyb20gXCIuLi8uLi8uLi9zdWJzdGl0dXRpb24vc3RhdGVtZW50Rm9yTWV0YXZhcmlhYmxlXCI7XG5cbmltcG9ydCB7IHRyaW0gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbGl0aWVzL3N0cmluZ1wiO1xuaW1wb3J0IHsgbWV0YXZhcmlhYmxlTmFtZUZyb21NZXRhdmFyaWFibGVOb2RlIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxpdGllcy9uYW1lXCI7XG5cbmZ1bmN0aW9uIHVuaWZ5QVdpdGhSdWxlKHF1YWxpZmllZFN0YXRlbWVudCwgc3Vic3RpdHV0aW9ucywgbG9jYWxDb250ZXh0KSB7XG4gIGxldCB1bmlmaWVkV2l0aFJ1bGUgPSBmYWxzZTtcblxuICBjb25zdCByZWZlcmVuY2UgPSBxdWFsaWZpZWRTdGF0ZW1lbnQuZ2V0UmVmZXJlbmNlKCksXG4gICAgICAgIHJ1bGUgPSBsb2NhbENvbnRleHQuZmluZFJ1bGVCeVJlZmVyZW5jZShyZWZlcmVuY2UpO1xuXG4gIGlmIChydWxlICE9PSBudWxsKSB7XG4gICAgY29uc3QgcmVmZXJlbmNlU3RyaW5nID0gcmVmZXJlbmNlLmdldFN0cmluZygpLFxuICAgICAgICAgIHF1YWxpZmllZFN0YXRlbWVudFN0cmluZyA9IHRyaW0ocXVhbGlmaWVkU3RhdGVtZW50LmdldFN0cmluZygpKTsgIC8vL1xuXG4gICAgbG9jYWxDb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7cXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nfScgcXVhbGlmaWVkIHN0YXRlbWVudCB3aXRoIHRoZSAnJHtyZWZlcmVuY2VTdHJpbmd9JyBydWxlLi4uYCk7XG5cbiAgICBjb25zdCBzdGF0ZW1lbnQgPSBxdWFsaWZpZWRTdGF0ZW1lbnQuZ2V0U3RhdGVtZW50KCksXG4gICAgICAgICAgc3RhdGVtZW50VW5pZmllZCA9IHJ1bGUudW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBsb2NhbENvbnRleHQpO1xuXG4gICAgdW5pZmllZFdpdGhSdWxlID0gc3RhdGVtZW50VW5pZmllZDsgIC8vL1xuXG4gICAgaWYgKHVuaWZpZWRXaXRoUnVsZSkge1xuICAgICAgbG9jYWxDb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtxdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmd9JyBxdWFsaWZpZWQgc3RhdGVtZW50IHdpdGggdGhlICcke3JlZmVyZW5jZVN0cmluZ30nIHJ1bGUuYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuaWZpZWRXaXRoUnVsZTtcbn1cblxuZnVuY3Rpb24gdW5pZnlBV2l0aEF4aW9tKHF1YWxpZmllZFN0YXRlbWVudCwgc3Vic3RpdHV0aW9ucywgbG9jYWxDb250ZXh0KSB7XG4gIGxldCB1bmlmaWVkV2l0aEF4aW9tID0gZmFsc2U7XG5cbiAgY29uc3QgcmVmZXJlbmNlID0gcXVhbGlmaWVkU3RhdGVtZW50LmdldFJlZmVyZW5jZSgpLFxuICAgICAgICBheGlvbSA9IGxvY2FsQ29udGV4dC5maW5kQXhpb21CeVJlZmVyZW5jZShyZWZlcmVuY2UpO1xuXG4gIGlmIChheGlvbSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHJlZmVyZW5jZVN0cmluZyA9IHJlZmVyZW5jZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBxdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmcgPSB0cmltKHF1YWxpZmllZFN0YXRlbWVudC5nZXRTdHJpbmcoKSk7ICAvLy9cblxuICAgIGxvY2FsQ29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3F1YWxpZmllZFN0YXRlbWVudFN0cmluZ30nIHF1YWxpZmllZCBzdGF0ZW1lbnQgd2l0aCB0aGUgJyR7cmVmZXJlbmNlU3RyaW5nfScgYXhpb20uLi5gKTtcblxuICAgIGNvbnN0IHN0YXRlbWVudCA9IHF1YWxpZmllZFN0YXRlbWVudC5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgICAgICBzdGF0ZW1lbnRVbmlmaWVkID0gYXhpb20udW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBsb2NhbENvbnRleHQpO1xuXG4gICAgdW5pZmllZFdpdGhBeGlvbSA9IHN0YXRlbWVudFVuaWZpZWQ7IC8vL1xuXG4gICAgaWYgKHVuaWZpZWRXaXRoQXhpb20pIHtcbiAgICAgIGxvY2FsQ29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7cXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nfScgcXVhbGlmaWVkIHN0YXRlbWVudCB3aXRoIHRoZSAnJHtyZWZlcmVuY2VTdHJpbmd9JyBheGlvbS5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5pZmllZFdpdGhBeGlvbTtcbn1cblxuZnVuY3Rpb24gdW5pZnlBV2l0aExlbW1hKHF1YWxpZmllZFN0YXRlbWVudCwgc3Vic3RpdHV0aW9ucywgbG9jYWxDb250ZXh0KSB7XG4gIGxldCB1bmlmaWVkV2l0aExlbW1hID0gZmFsc2U7XG5cbiAgY29uc3QgcmVmZXJlbmNlID0gcXVhbGlmaWVkU3RhdGVtZW50LmdldFJlZmVyZW5jZSgpLFxuICAgICAgICBsZW1tYSA9IGxvY2FsQ29udGV4dC5maW5kTGVtbWFCeVJlZmVyZW5jZShyZWZlcmVuY2UpO1xuXG4gIGlmIChsZW1tYSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHJlZmVyZW5jZVN0cmluZyA9IHJlZmVyZW5jZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBxdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmcgPSB0cmltKHF1YWxpZmllZFN0YXRlbWVudC5nZXRTdHJpbmcoKSk7ICAvLy9cblxuICAgIGxvY2FsQ29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3F1YWxpZmllZFN0YXRlbWVudFN0cmluZ30nIHF1YWxpZmllZCBzdGF0ZW1lbnQgd2l0aCB0aGUgJyR7cmVmZXJlbmNlU3RyaW5nfScgbGVtbWEuLi5gKTtcblxuICAgIGNvbnN0IHN0YXRlbWVudCA9IHF1YWxpZmllZFN0YXRlbWVudC5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgICAgICBzdGF0ZW1lbnRVbmlmaWVkID0gbGVtbWEudW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBsb2NhbENvbnRleHQpO1xuXG4gICAgdW5pZmllZFdpdGhMZW1tYSA9IHN0YXRlbWVudFVuaWZpZWQ7IC8vL1xuXG4gICAgaWYgKHVuaWZpZWRXaXRoTGVtbWEpIHtcbiAgICAgIGxvY2FsQ29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7cXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nfScgcXVhbGlmaWVkIHN0YXRlbWVudCB3aXRoIHRoZSAnJHtyZWZlcmVuY2VTdHJpbmd9JyBsZW1tYS5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5pZmllZFdpdGhMZW1tYTtcbn1cblxuZnVuY3Rpb24gdW5pZnlBV2l0aFRoZW9yZW0ocXVhbGlmaWVkU3RhdGVtZW50LCBzdWJzdGl0dXRpb25zLCBsb2NhbENvbnRleHQpIHtcbiAgbGV0IHVuaWZpZWRXaXRoVGhlb3JlbSA9IGZhbHNlO1xuXG4gIGNvbnN0IHJlZmVyZW5jZSA9IHF1YWxpZmllZFN0YXRlbWVudC5nZXRSZWZlcmVuY2UoKSxcbiAgICAgICAgdGhlb3JlbSA9IGxvY2FsQ29udGV4dC5maW5kVGhlb3JlbUJ5UmVmZXJlbmNlKHJlZmVyZW5jZSk7XG5cbiAgaWYgKHRoZW9yZW0gIT09IG51bGwpIHtcbiAgICBjb25zdCByZWZlcmVuY2VTdHJpbmcgPSByZWZlcmVuY2UuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgcXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nID0gdHJpbShxdWFsaWZpZWRTdGF0ZW1lbnQuZ2V0U3RyaW5nKCkpOyAgLy8vXG5cbiAgICBsb2NhbENvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtxdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmd9JyBxdWFsaWZpZWQgc3RhdGVtZW50IHdpdGggdGhlICcke3JlZmVyZW5jZVN0cmluZ30nIHRoZW9yZW0uLi5gKTtcblxuICAgIGNvbnN0IHN0YXRlbWVudCA9IHF1YWxpZmllZFN0YXRlbWVudC5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgICAgICBzdGF0ZW1lbnRVbmlmaWVkID0gdGhlb3JlbS51bmlmeVN0YXRlbWVudChzdGF0ZW1lbnQsIGxvY2FsQ29udGV4dCk7XG5cbiAgICB1bmlmaWVkV2l0aFRoZW9yZW0gPSBzdGF0ZW1lbnRVbmlmaWVkOyAvLy9cblxuICAgIGlmICh1bmlmaWVkV2l0aFRoZW9yZW0pIHtcbiAgICAgIGxvY2FsQ29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7cXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nfScgcXVhbGlmaWVkIHN0YXRlbWVudCB3aXRoIHRoZSAnJHtyZWZlcmVuY2VTdHJpbmd9JyB0aGVvcmVtLmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmlmaWVkV2l0aFRoZW9yZW07XG59XG5cbmZ1bmN0aW9uIHVuaWZ5QVdpdGhDb25qZWN0dXJlKHF1YWxpZmllZFN0YXRlbWVudCwgc3Vic3RpdHV0aW9ucywgbG9jYWxDb250ZXh0KSB7XG4gIGxldCB1bmlmaWVkV2l0aENvbmplY3R1cmUgPSBmYWxzZTtcblxuICBjb25zdCByZWZlcmVuY2UgPSBxdWFsaWZpZWRTdGF0ZW1lbnQuZ2V0UmVmZXJlbmNlKCksXG4gICAgICAgIGNvbmplY3R1cmUgPSBsb2NhbENvbnRleHQuZmluZENvbmplY3R1cmVCeVJlZmVyZW5jZShyZWZlcmVuY2UpO1xuXG4gIGlmIChjb25qZWN0dXJlICE9PSBudWxsKSB7XG4gICAgY29uc3QgcmVmZXJlbmNlU3RyaW5nID0gcmVmZXJlbmNlLmdldFN0cmluZygpLFxuICAgICAgICAgIHF1YWxpZmllZFN0YXRlbWVudFN0cmluZyA9IHRyaW0ocXVhbGlmaWVkU3RhdGVtZW50LmdldFN0cmluZygpKTsgIC8vL1xuXG4gICAgbG9jYWxDb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7cXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nfScgcXVhbGlmaWVkIHN0YXRlbWVudCB3aXRoIHRoZSAnJHtyZWZlcmVuY2VTdHJpbmd9JyBjb25qZWN0dXJlLi4uYCk7XG5cbiAgICBjb25zdCBzdGF0ZW1lbnQgPSBxdWFsaWZpZWRTdGF0ZW1lbnQuZ2V0U3RhdGVtZW50KCksXG4gICAgICAgICAgc3RhdGVtZW50VW5pZmllZCA9IGNvbmplY3R1cmUudW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBsb2NhbENvbnRleHQpO1xuXG4gICAgdW5pZmllZFdpdGhDb25qZWN0dXJlID0gc3RhdGVtZW50VW5pZmllZDsgLy8vXG5cbiAgICBpZiAodW5pZmllZFdpdGhDb25qZWN0dXJlKSB7XG4gICAgICBsb2NhbENvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3F1YWxpZmllZFN0YXRlbWVudFN0cmluZ30nIHF1YWxpZmllZCBzdGF0ZW1lbnQgd2l0aCB0aGUgJyR7cmVmZXJlbmNlU3RyaW5nfScgY29uamVjdHVyZS5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5pZmllZFdpdGhDb25qZWN0dXJlO1xufVxuXG5mdW5jdGlvbiB1bmlmeUFXaXRoUmVmZXJlbmNlKHF1YWxpZmllZFN0YXRlbWVudCwgc3Vic3RpdHV0aW9ucywgbG9jYWxDb250ZXh0KSB7XG4gIGxldCB1bmlmaWVkV2l0aFJlZmVyZW5jZSA9IGZhbHNlO1xuXG4gIGNvbnN0IHJlZmVyZW5jZSA9IHF1YWxpZmllZFN0YXRlbWVudC5nZXRSZWZlcmVuY2UoKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlTm9kZSA9IHJlZmVyZW5jZS5nZXRNZXRhdmFyaWFibGVOb2RlKCksXG4gICAgICAgIG1ldGF2YXJpYWJsZU5hbWUgPSBtZXRhdmFyaWFibGVOYW1lRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSksXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IGxvY2FsQ29udGV4dC5maW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpO1xuXG4gIGlmIChtZXRhdmFyaWFibGUgIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnQgPSBxdWFsaWZpZWRTdGF0ZW1lbnQuZ2V0U3RhdGVtZW50KCksXG4gICAgICAgICAgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpLFxuICAgICAgICAgIHJlZmVyZW5jZVN0cmluZyA9IHJlZmVyZW5jZS5nZXRTdHJpbmcoKTtcblxuICAgIGxvY2FsQ29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHF1YWxpZmllZCBzdGF0ZW1lbnQgd2l0aCB0aGUgJyR7cmVmZXJlbmNlU3RyaW5nfScgcmVmZXJlbmNlLi4uYCk7XG5cbiAgICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gbWV0YXZhcmlhYmxlLmdldE5vZGUoKSxcbiAgICAgICAgICByZWZlcmVuY2VNZXRhdmFyaWFibGVOb2RlID0gcmVmZXJlbmNlLmdldE1ldGF2YXJpYWJsZU5vZGUoKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVOb2RlQSA9IHJlZmVyZW5jZU1ldGF2YXJpYWJsZU5vZGUsIC8vL1xuICAgICAgICAgIG1ldGF2YXJpYWJsZU5vZGVCID0gbWV0YXZhcmlhYmxlTm9kZSwgLy8vXG4gICAgICAgICAgbWV0YXZhcmlhYmxlVW5pZmllZCA9IG1ldGF2YXJpYWJsZVVuaWZpZXIudW5pZnkobWV0YXZhcmlhYmxlTm9kZUEsIG1ldGF2YXJpYWJsZU5vZGVCLCBsb2NhbENvbnRleHQpO1xuXG4gICAgaWYgKG1ldGF2YXJpYWJsZVVuaWZpZWQpIHtcbiAgICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnQuZ2V0Tm9kZSgpLFxuICAgICAgICAgICAgbWV0YXZhcmlhYmxlTm9kZSA9IG1ldGF2YXJpYWJsZU5vZGVBLCAvLy9cbiAgICAgICAgICAgIHN0YXRlbWVudEZvck1ldGF2YXJpYWJsZVN1YnN0aXR1dGlvbiA9IFN0YXRlbWVudEZvck1ldGF2YXJpYWJsZVN1YnN0aXR1dGlvbi5mcm9tU3RhdGVtZW50Tm9kZUFuZE1ldGF2YXJpYWJsZU5vZGUoc3RhdGVtZW50Tm9kZSwgbWV0YXZhcmlhYmxlTm9kZSwgbG9jYWxDb250ZXh0QSwgbG9jYWxDb250ZXh0QiksXG4gICAgICAgICAgICBzdWJzdGl0dXRpb24gPSBzdGF0ZW1lbnRGb3JNZXRhdmFyaWFibGVTdWJzdGl0dXRpb24sIC8vL1xuICAgICAgICAgICAgbG9jYWxDb250ZXh0QSA9IGxvY2FsQ29udGV4dCwgLy8vXG4gICAgICAgICAgICBsb2NhbENvbnRleHRCID0gbG9jYWxDb250ZXh0OyAvLy9cblxuICAgICAgc3Vic3RpdHV0aW9ucy5hZGRTdWJzdGl0dXRpb24oc3Vic3RpdHV0aW9uLCBsb2NhbENvbnRleHRBLCBsb2NhbENvbnRleHRCKTtcblxuICAgICAgdW5pZmllZFdpdGhSZWZlcmVuY2UgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICh1bmlmaWVkV2l0aFJlZmVyZW5jZSkge1xuICAgICAgbG9jYWxDb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBxdWFsaWZpZWQgc3RhdGVtZW50IHdpdGggdGhlICcke3JlZmVyZW5jZVN0cmluZ30nIHJlZmVyZW5jZS5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5pZmllZFdpdGhSZWZlcmVuY2U7XG59XG5cbmNvbnN0IHVuaWZ5TWl4aW5zID0gW1xuICB1bmlmeUFXaXRoUnVsZSxcbiAgdW5pZnlBV2l0aEF4aW9tLFxuICB1bmlmeUFXaXRoTGVtbWEsXG4gIHVuaWZ5QVdpdGhUaGVvcmVtLFxuICB1bmlmeUFXaXRoQ29uamVjdHVyZSxcbiAgdW5pZnlBV2l0aFJlZmVyZW5jZVxuXTtcblxuZXhwb3J0IGRlZmF1bHQgdW5pZnlNaXhpbnM7XG5cbiJdLCJuYW1lcyI6WyJ1bmlmeUFXaXRoUnVsZSIsInF1YWxpZmllZFN0YXRlbWVudCIsInN1YnN0aXR1dGlvbnMiLCJsb2NhbENvbnRleHQiLCJ1bmlmaWVkV2l0aFJ1bGUiLCJyZWZlcmVuY2UiLCJnZXRSZWZlcmVuY2UiLCJydWxlIiwiZmluZFJ1bGVCeVJlZmVyZW5jZSIsInJlZmVyZW5jZVN0cmluZyIsImdldFN0cmluZyIsInF1YWxpZmllZFN0YXRlbWVudFN0cmluZyIsInRyaW0iLCJ0cmFjZSIsInN0YXRlbWVudCIsImdldFN0YXRlbWVudCIsInN0YXRlbWVudFVuaWZpZWQiLCJ1bmlmeVN0YXRlbWVudCIsImRlYnVnIiwidW5pZnlBV2l0aEF4aW9tIiwidW5pZmllZFdpdGhBeGlvbSIsImF4aW9tIiwiZmluZEF4aW9tQnlSZWZlcmVuY2UiLCJ1bmlmeUFXaXRoTGVtbWEiLCJ1bmlmaWVkV2l0aExlbW1hIiwibGVtbWEiLCJmaW5kTGVtbWFCeVJlZmVyZW5jZSIsInVuaWZ5QVdpdGhUaGVvcmVtIiwidW5pZmllZFdpdGhUaGVvcmVtIiwidGhlb3JlbSIsImZpbmRUaGVvcmVtQnlSZWZlcmVuY2UiLCJ1bmlmeUFXaXRoQ29uamVjdHVyZSIsInVuaWZpZWRXaXRoQ29uamVjdHVyZSIsImNvbmplY3R1cmUiLCJmaW5kQ29uamVjdHVyZUJ5UmVmZXJlbmNlIiwidW5pZnlBV2l0aFJlZmVyZW5jZSIsInVuaWZpZWRXaXRoUmVmZXJlbmNlIiwibWV0YXZhcmlhYmxlTm9kZSIsImdldE1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGVOYW1lIiwibWV0YXZhcmlhYmxlTmFtZUZyb21NZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlIiwiZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTmFtZSIsInN0YXRlbWVudFN0cmluZyIsImdldE5vZGUiLCJyZWZlcmVuY2VNZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlTm9kZUEiLCJtZXRhdmFyaWFibGVOb2RlQiIsIm1ldGF2YXJpYWJsZVVuaWZpZWQiLCJtZXRhdmFyaWFibGVVbmlmaWVyIiwidW5pZnkiLCJzdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50Rm9yTWV0YXZhcmlhYmxlU3Vic3RpdHV0aW9uIiwiU3RhdGVtZW50Rm9yTWV0YXZhcmlhYmxlU3Vic3RpdHV0aW9uIiwiZnJvbVN0YXRlbWVudE5vZGVBbmRNZXRhdmFyaWFibGVOb2RlIiwibG9jYWxDb250ZXh0QSIsImxvY2FsQ29udGV4dEIiLCJzdWJzdGl0dXRpb24iLCJhZGRTdWJzdGl0dXRpb24iLCJ1bmlmeU1peGlucyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBd0xBOzs7ZUFBQTs7O21FQXRMZ0M7K0VBQ2lCO3NCQUU1QjtvQkFDZ0M7Ozs7OztBQUVyRCxTQUFTQSxlQUFlQyxrQkFBa0IsRUFBRUMsYUFBYSxFQUFFQyxZQUFZO0lBQ3JFLElBQUlDLGtCQUFrQjtJQUV0QixJQUFNQyxZQUFZSixtQkFBbUJLLFlBQVksSUFDM0NDLE9BQU9KLGFBQWFLLG1CQUFtQixDQUFDSDtJQUU5QyxJQUFJRSxTQUFTLE1BQU07UUFDakIsSUFBTUUsa0JBQWtCSixVQUFVSyxTQUFTLElBQ3JDQywyQkFBMkJDLElBQUFBLFlBQUksRUFBQ1gsbUJBQW1CUyxTQUFTLEtBQU0sR0FBRztRQUUzRVAsYUFBYVUsS0FBSyxDQUFDLEFBQUMsaUJBQTJFSixPQUEzREUsMEJBQXlCLG9DQUFrRCxPQUFoQkYsaUJBQWdCO1FBRS9HLElBQU1LLFlBQVliLG1CQUFtQmMsWUFBWSxJQUMzQ0MsbUJBQW1CVCxLQUFLVSxjQUFjLENBQUNILFdBQVdYO1FBRXhEQyxrQkFBa0JZLGtCQUFtQixHQUFHO1FBRXhDLElBQUlaLGlCQUFpQjtZQUNuQkQsYUFBYWUsS0FBSyxDQUFDLEFBQUMsbUJBQTZFVCxPQUEzREUsMEJBQXlCLG9DQUFrRCxPQUFoQkYsaUJBQWdCO1FBQ25IO0lBQ0Y7SUFFQSxPQUFPTDtBQUNUO0FBRUEsU0FBU2UsZ0JBQWdCbEIsa0JBQWtCLEVBQUVDLGFBQWEsRUFBRUMsWUFBWTtJQUN0RSxJ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
114
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9taXhpbnMvc3RhdGVtZW50L3F1YWxpZmllZC91bmlmeS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFN0YXRlbWVudEZvck1ldGF2YXJpYWJsZVN1YnN0aXR1dGlvbiBmcm9tIFwiLi4vLi4vLi4vc3Vic3RpdHV0aW9uL3N0YXRlbWVudEZvck1ldGF2YXJpYWJsZVwiO1xuXG5pbXBvcnQgeyB0cmltIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxpdGllcy9zdHJpbmdcIjtcbmltcG9ydCB7IG1ldGF2YXJpYWJsZU5hbWVGcm9tTWV0YXZhcmlhYmxlTm9kZSB9IGZyb20gXCIuLi8uLi8uLi91dGlsaXRpZXMvbmFtZVwiO1xuXG5mdW5jdGlvbiB1bmlmeUFXaXRoUnVsZShxdWFsaWZpZWRTdGF0ZW1lbnQsIHN1YnN0aXR1dGlvbnMsIGxvY2FsQ29udGV4dCkge1xuICBsZXQgdW5pZmllZFdpdGhSdWxlID0gZmFsc2U7XG5cbiAgY29uc3QgcmVmZXJlbmNlID0gcXVhbGlmaWVkU3RhdGVtZW50LmdldFJlZmVyZW5jZSgpLFxuICAgICAgICBydWxlID0gbG9jYWxDb250ZXh0LmZpbmRSdWxlQnlSZWZlcmVuY2UocmVmZXJlbmNlKTtcblxuICBpZiAocnVsZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHJlZmVyZW5jZVN0cmluZyA9IHJlZmVyZW5jZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBxdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmcgPSB0cmltKHF1YWxpZmllZFN0YXRlbWVudC5nZXRTdHJpbmcoKSk7ICAvLy9cblxuICAgIGxvY2FsQ29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3F1YWxpZmllZFN0YXRlbWVudFN0cmluZ30nIHF1YWxpZmllZCBzdGF0ZW1lbnQgd2l0aCB0aGUgJyR7cmVmZXJlbmNlU3RyaW5nfScgcnVsZS4uLmApO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50ID0gcXVhbGlmaWVkU3RhdGVtZW50LmdldFN0YXRlbWVudCgpLFxuICAgICAgICAgIHN0YXRlbWVudFVuaWZpZWQgPSBydWxlLnVuaWZ5U3RhdGVtZW50KHN0YXRlbWVudCwgbG9jYWxDb250ZXh0KTtcblxuICAgIHVuaWZpZWRXaXRoUnVsZSA9IHN0YXRlbWVudFVuaWZpZWQ7ICAvLy9cblxuICAgIGlmICh1bmlmaWVkV2l0aFJ1bGUpIHtcbiAgICAgIGxvY2FsQ29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7cXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nfScgcXVhbGlmaWVkIHN0YXRlbWVudCB3aXRoIHRoZSAnJHtyZWZlcmVuY2VTdHJpbmd9JyBydWxlLmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmlmaWVkV2l0aFJ1bGU7XG59XG5cbmZ1bmN0aW9uIHVuaWZ5QVdpdGhBeGlvbShxdWFsaWZpZWRTdGF0ZW1lbnQsIHN1YnN0aXR1dGlvbnMsIGxvY2FsQ29udGV4dCkge1xuICBsZXQgdW5pZmllZFdpdGhBeGlvbSA9IGZhbHNlO1xuXG4gIGNvbnN0IHJlZmVyZW5jZSA9IHF1YWxpZmllZFN0YXRlbWVudC5nZXRSZWZlcmVuY2UoKSxcbiAgICAgICAgYXhpb20gPSBsb2NhbENvbnRleHQuZmluZEF4aW9tQnlSZWZlcmVuY2UocmVmZXJlbmNlKTtcblxuICBpZiAoYXhpb20gIT09IG51bGwpIHtcbiAgICBjb25zdCByZWZlcmVuY2VTdHJpbmcgPSByZWZlcmVuY2UuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgcXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nID0gdHJpbShxdWFsaWZpZWRTdGF0ZW1lbnQuZ2V0U3RyaW5nKCkpOyAgLy8vXG5cbiAgICBsb2NhbENvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtxdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmd9JyBxdWFsaWZpZWQgc3RhdGVtZW50IHdpdGggdGhlICcke3JlZmVyZW5jZVN0cmluZ30nIGF4aW9tLi4uYCk7XG5cbiAgICBjb25zdCBzdGF0ZW1lbnQgPSBxdWFsaWZpZWRTdGF0ZW1lbnQuZ2V0U3RhdGVtZW50KCksXG4gICAgICAgICAgc3RhdGVtZW50VW5pZmllZCA9IGF4aW9tLnVuaWZ5U3RhdGVtZW50KHN0YXRlbWVudCwgbG9jYWxDb250ZXh0KTtcblxuICAgIHVuaWZpZWRXaXRoQXhpb20gPSBzdGF0ZW1lbnRVbmlmaWVkOyAvLy9cblxuICAgIGlmICh1bmlmaWVkV2l0aEF4aW9tKSB7XG4gICAgICBsb2NhbENvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3F1YWxpZmllZFN0YXRlbWVudFN0cmluZ30nIHF1YWxpZmllZCBzdGF0ZW1lbnQgd2l0aCB0aGUgJyR7cmVmZXJlbmNlU3RyaW5nfScgYXhpb20uYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuaWZpZWRXaXRoQXhpb207XG59XG5cbmZ1bmN0aW9uIHVuaWZ5QVdpdGhMZW1tYShxdWFsaWZpZWRTdGF0ZW1lbnQsIHN1YnN0aXR1dGlvbnMsIGxvY2FsQ29udGV4dCkge1xuICBsZXQgdW5pZmllZFdpdGhMZW1tYSA9IGZhbHNlO1xuXG4gIGNvbnN0IHJlZmVyZW5jZSA9IHF1YWxpZmllZFN0YXRlbWVudC5nZXRSZWZlcmVuY2UoKSxcbiAgICAgICAgbGVtbWEgPSBsb2NhbENvbnRleHQuZmluZExlbW1hQnlSZWZlcmVuY2UocmVmZXJlbmNlKTtcblxuICBpZiAobGVtbWEgIT09IG51bGwpIHtcbiAgICBjb25zdCByZWZlcmVuY2VTdHJpbmcgPSByZWZlcmVuY2UuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgcXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nID0gdHJpbShxdWFsaWZpZWRTdGF0ZW1lbnQuZ2V0U3RyaW5nKCkpOyAgLy8vXG5cbiAgICBsb2NhbENvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtxdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmd9JyBxdWFsaWZpZWQgc3RhdGVtZW50IHdpdGggdGhlICcke3JlZmVyZW5jZVN0cmluZ30nIGxlbW1hLi4uYCk7XG5cbiAgICBjb25zdCBzdGF0ZW1lbnQgPSBxdWFsaWZpZWRTdGF0ZW1lbnQuZ2V0U3RhdGVtZW50KCksXG4gICAgICAgICAgc3RhdGVtZW50VW5pZmllZCA9IGxlbW1hLnVuaWZ5U3RhdGVtZW50KHN0YXRlbWVudCwgbG9jYWxDb250ZXh0KTtcblxuICAgIHVuaWZpZWRXaXRoTGVtbWEgPSBzdGF0ZW1lbnRVbmlmaWVkOyAvLy9cblxuICAgIGlmICh1bmlmaWVkV2l0aExlbW1hKSB7XG4gICAgICBsb2NhbENvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3F1YWxpZmllZFN0YXRlbWVudFN0cmluZ30nIHF1YWxpZmllZCBzdGF0ZW1lbnQgd2l0aCB0aGUgJyR7cmVmZXJlbmNlU3RyaW5nfScgbGVtbWEuYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuaWZpZWRXaXRoTGVtbWE7XG59XG5cbmZ1bmN0aW9uIHVuaWZ5QVdpdGhUaGVvcmVtKHF1YWxpZmllZFN0YXRlbWVudCwgc3Vic3RpdHV0aW9ucywgbG9jYWxDb250ZXh0KSB7XG4gIGxldCB1bmlmaWVkV2l0aFRoZW9yZW0gPSBmYWxzZTtcblxuICBjb25zdCByZWZlcmVuY2UgPSBxdWFsaWZpZWRTdGF0ZW1lbnQuZ2V0UmVmZXJlbmNlKCksXG4gICAgICAgIHRoZW9yZW0gPSBsb2NhbENvbnRleHQuZmluZFRoZW9yZW1CeVJlZmVyZW5jZShyZWZlcmVuY2UpO1xuXG4gIGlmICh0aGVvcmVtICE9PSBudWxsKSB7XG4gICAgY29uc3QgcmVmZXJlbmNlU3RyaW5nID0gcmVmZXJlbmNlLmdldFN0cmluZygpLFxuICAgICAgICAgIHF1YWxpZmllZFN0YXRlbWVudFN0cmluZyA9IHRyaW0ocXVhbGlmaWVkU3RhdGVtZW50LmdldFN0cmluZygpKTsgIC8vL1xuXG4gICAgbG9jYWxDb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7cXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nfScgcXVhbGlmaWVkIHN0YXRlbWVudCB3aXRoIHRoZSAnJHtyZWZlcmVuY2VTdHJpbmd9JyB0aGVvcmVtLi4uYCk7XG5cbiAgICBjb25zdCBzdGF0ZW1lbnQgPSBxdWFsaWZpZWRTdGF0ZW1lbnQuZ2V0U3RhdGVtZW50KCksXG4gICAgICAgICAgc3RhdGVtZW50VW5pZmllZCA9IHRoZW9yZW0udW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBsb2NhbENvbnRleHQpO1xuXG4gICAgdW5pZmllZFdpdGhUaGVvcmVtID0gc3RhdGVtZW50VW5pZmllZDsgLy8vXG5cbiAgICBpZiAodW5pZmllZFdpdGhUaGVvcmVtKSB7XG4gICAgICBsb2NhbENvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3F1YWxpZmllZFN0YXRlbWVudFN0cmluZ30nIHF1YWxpZmllZCBzdGF0ZW1lbnQgd2l0aCB0aGUgJyR7cmVmZXJlbmNlU3RyaW5nfScgdGhlb3JlbS5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5pZmllZFdpdGhUaGVvcmVtO1xufVxuXG5mdW5jdGlvbiB1bmlmeUFXaXRoQ29uamVjdHVyZShxdWFsaWZpZWRTdGF0ZW1lbnQsIHN1YnN0aXR1dGlvbnMsIGxvY2FsQ29udGV4dCkge1xuICBsZXQgdW5pZmllZFdpdGhDb25qZWN0dXJlID0gZmFsc2U7XG5cbiAgY29uc3QgcmVmZXJlbmNlID0gcXVhbGlmaWVkU3RhdGVtZW50LmdldFJlZmVyZW5jZSgpLFxuICAgICAgICBjb25qZWN0dXJlID0gbG9jYWxDb250ZXh0LmZpbmRDb25qZWN0dXJlQnlSZWZlcmVuY2UocmVmZXJlbmNlKTtcblxuICBpZiAoY29uamVjdHVyZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHJlZmVyZW5jZVN0cmluZyA9IHJlZmVyZW5jZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBxdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmcgPSB0cmltKHF1YWxpZmllZFN0YXRlbWVudC5nZXRTdHJpbmcoKSk7ICAvLy9cblxuICAgIGxvY2FsQ29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3F1YWxpZmllZFN0YXRlbWVudFN0cmluZ30nIHF1YWxpZmllZCBzdGF0ZW1lbnQgd2l0aCB0aGUgJyR7cmVmZXJlbmNlU3RyaW5nfScgY29uamVjdHVyZS4uLmApO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50ID0gcXVhbGlmaWVkU3RhdGVtZW50LmdldFN0YXRlbWVudCgpLFxuICAgICAgICAgIHN0YXRlbWVudFVuaWZpZWQgPSBjb25qZWN0dXJlLnVuaWZ5U3RhdGVtZW50KHN0YXRlbWVudCwgbG9jYWxDb250ZXh0KTtcblxuICAgIHVuaWZpZWRXaXRoQ29uamVjdHVyZSA9IHN0YXRlbWVudFVuaWZpZWQ7IC8vL1xuXG4gICAgaWYgKHVuaWZpZWRXaXRoQ29uamVjdHVyZSkge1xuICAgICAgbG9jYWxDb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtxdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmd9JyBxdWFsaWZpZWQgc3RhdGVtZW50IHdpdGggdGhlICcke3JlZmVyZW5jZVN0cmluZ30nIGNvbmplY3R1cmUuYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuaWZpZWRXaXRoQ29uamVjdHVyZTtcbn1cblxuZnVuY3Rpb24gdW5pZnlBV2l0aFJlZmVyZW5jZShxdWFsaWZpZWRTdGF0ZW1lbnQsIHN1YnN0aXR1dGlvbnMsIGxvY2FsQ29udGV4dCkge1xuICBsZXQgdW5pZmllZFdpdGhSZWZlcmVuY2UgPSBmYWxzZTtcblxuICBjb25zdCByZWZlcmVuY2UgPSBxdWFsaWZpZWRTdGF0ZW1lbnQuZ2V0UmVmZXJlbmNlKCksXG4gICAgICAgIG1ldGF2YXJpYWJsZU5vZGUgPSByZWZlcmVuY2UuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpLFxuICAgICAgICBtZXRhdmFyaWFibGVOYW1lID0gbWV0YXZhcmlhYmxlTmFtZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpLFxuICAgICAgICBtZXRhdmFyaWFibGVQcmVzZW50ID0gbG9jYWxDb250ZXh0LmlzTWV0YXZhcmlhYmxlUHJlc2VudEJ5TWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKTtcblxuICBpZiAobWV0YXZhcmlhYmxlUHJlc2VudCkge1xuICAgIGNvbnN0IHN0YXRlbWVudCA9IHF1YWxpZmllZFN0YXRlbWVudC5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgICAgICBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgcmVmZXJlbmNlU3RyaW5nID0gcmVmZXJlbmNlLmdldFN0cmluZygpO1xuXG4gICAgbG9jYWxDb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgcXVhbGlmaWVkIHN0YXRlbWVudCB3aXRoIHRoZSAnJHtyZWZlcmVuY2VTdHJpbmd9JyByZWZlcmVuY2UuLi5gKTtcblxuICAgIGNvbnN0IG1ldGF2YXJpYWJsZSA9IHJlZmVyZW5jZS5nZXRNZXRhdmFyaWFibGUoKSxcbiAgICAgICAgICBzdGF0ZW1lbnRGb3JNZXRhdmFyaWFibGVTdWJzdGl0dXRpb24gPSBTdGF0ZW1lbnRGb3JNZXRhdmFyaWFibGVTdWJzdGl0dXRpb24uZnJvbVN0YXRlbWVudEFuZE1ldGF2YXJpYWJsZShzdGF0ZW1lbnQsIG1ldGF2YXJpYWJsZSwgbG9jYWxDb250ZXh0KSxcbiAgICAgICAgICBzdWJzdGl0dXRpb24gPSBzdGF0ZW1lbnRGb3JNZXRhdmFyaWFibGVTdWJzdGl0dXRpb247IC8vL1xuXG4gICAgc3Vic3RpdHV0aW9ucy5hZGRTdWJzdGl0dXRpb24oc3Vic3RpdHV0aW9uLCBsb2NhbENvbnRleHQpO1xuXG4gICAgdW5pZmllZFdpdGhSZWZlcmVuY2UgPSB0cnVlO1xuXG4gICAgaWYgKHVuaWZpZWRXaXRoUmVmZXJlbmNlKSB7XG4gICAgICBsb2NhbENvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHF1YWxpZmllZCBzdGF0ZW1lbnQgd2l0aCB0aGUgJyR7cmVmZXJlbmNlU3RyaW5nfScgcmVmZXJlbmNlLmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmlmaWVkV2l0aFJlZmVyZW5jZTtcbn1cblxuY29uc3QgdW5pZnlNaXhpbnMgPSBbXG4gIHVuaWZ5QVdpdGhSdWxlLFxuICB1bmlmeUFXaXRoQXhpb20sXG4gIHVuaWZ5QVdpdGhMZW1tYSxcbiAgdW5pZnlBV2l0aFRoZW9yZW0sXG4gIHVuaWZ5QVdpdGhDb25qZWN0dXJlLFxuICB1bmlmeUFXaXRoUmVmZXJlbmNlXG5dO1xuXG5leHBvcnQgZGVmYXVsdCB1bmlmeU1peGlucztcblxuIl0sIm5hbWVzIjpbInVuaWZ5QVdpdGhSdWxlIiwicXVhbGlmaWVkU3RhdGVtZW50Iiwic3Vic3RpdHV0aW9ucyIsImxvY2FsQ29udGV4dCIsInVuaWZpZWRXaXRoUnVsZSIsInJlZmVyZW5jZSIsImdldFJlZmVyZW5jZSIsInJ1bGUiLCJmaW5kUnVsZUJ5UmVmZXJlbmNlIiwicmVmZXJlbmNlU3RyaW5nIiwiZ2V0U3RyaW5nIiwicXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nIiwidHJpbSIsInRyYWNlIiwic3RhdGVtZW50IiwiZ2V0U3RhdGVtZW50Iiwic3RhdGVtZW50VW5pZmllZCIsInVuaWZ5U3RhdGVtZW50IiwiZGVidWciLCJ1bmlmeUFXaXRoQXhpb20iLCJ1bmlmaWVkV2l0aEF4aW9tIiwiYXhpb20iLCJmaW5kQXhpb21CeVJlZmVyZW5jZSIsInVuaWZ5QVdpdGhMZW1tYSIsInVuaWZpZWRXaXRoTGVtbWEiLCJsZW1tYSIsImZpbmRMZW1tYUJ5UmVmZXJlbmNlIiwidW5pZnlBV2l0aFRoZW9yZW0iLCJ1bmlmaWVkV2l0aFRoZW9yZW0iLCJ0aGVvcmVtIiwiZmluZFRoZW9yZW1CeVJlZmVyZW5jZSIsInVuaWZ5QVdpdGhDb25qZWN0dXJlIiwidW5pZmllZFdpdGhDb25qZWN0dXJlIiwiY29uamVjdHVyZSIsImZpbmRDb25qZWN0dXJlQnlSZWZlcmVuY2UiLCJ1bmlmeUFXaXRoUmVmZXJlbmNlIiwidW5pZmllZFdpdGhSZWZlcmVuY2UiLCJtZXRhdmFyaWFibGVOb2RlIiwiZ2V0TWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZU5hbWUiLCJtZXRhdmFyaWFibGVOYW1lRnJvbU1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGVQcmVzZW50IiwiaXNNZXRhdmFyaWFibGVQcmVzZW50QnlNZXRhdmFyaWFibGVOYW1lIiwic3RhdGVtZW50U3RyaW5nIiwibWV0YXZhcmlhYmxlIiwiZ2V0TWV0YXZhcmlhYmxlIiwic3RhdGVtZW50Rm9yTWV0YXZhcmlhYmxlU3Vic3RpdHV0aW9uIiwiU3RhdGVtZW50Rm9yTWV0YXZhcmlhYmxlU3Vic3RpdHV0aW9uIiwiZnJvbVN0YXRlbWVudEFuZE1ldGF2YXJpYWJsZSIsInN1YnN0aXR1dGlvbiIsImFkZFN1YnN0aXR1dGlvbiIsInVuaWZ5TWl4aW5zIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkE0S0E7OztlQUFBOzs7K0VBMUtpRDtzQkFFNUI7b0JBQ2dDOzs7Ozs7QUFFckQsU0FBU0EsZUFBZUMsa0JBQWtCLEVBQUVDLGFBQWEsRUFBRUMsWUFBWTtJQUNyRSxJQUFJQyxrQkFBa0I7SUFFdEIsSUFBTUMsWUFBWUosbUJBQW1CSyxZQUFZLElBQzNDQyxPQUFPSixhQUFhSyxtQkFBbUIsQ0FBQ0g7SUFFOUMsSUFBSUUsU0FBUyxNQUFNO1FBQ2pCLElBQU1FLGtCQUFrQkosVUFBVUssU0FBUyxJQUNyQ0MsMkJBQTJCQyxJQUFBQSxZQUFJLEVBQUNYLG1CQUFtQlMsU0FBUyxLQUFNLEdBQUc7UUFFM0VQLGFBQWFVLEtBQUssQ0FBQyxBQUFDLGlCQUEyRUosT0FBM0RFLDBCQUF5QixvQ0FBa0QsT0FBaEJGLGlCQUFnQjtRQUUvRyxJQUFNSyxZQUFZYixtQkFBbUJjLFlBQVksSUFDM0NDLG1CQUFtQlQsS0FBS1UsY0FBYyxDQUFDSCxXQUFXWDtRQUV4REMsa0JBQWtCWSxrQkFBbUIsR0FBRztRQUV4QyxJQUFJWixpQkFBaUI7WUFDbkJELGFBQWFlLEtBQUssQ0FBQyxBQUFDLG1CQUE2RVQsT0FBM0RFLDBCQUF5QixvQ0FBa0QsT0FBaEJGLGlCQUFnQjtRQUNuSDtJQUNGO0lBRUEsT0FBT0w7QUFDVDtBQUVBLFNBQVNlLGdCQUFnQmxCLGtCQUFrQixFQUFFQyxhQUFhLEVBQUVDLFlBQVk7SUFDdEUsSUFBSWlCLG1CQUFtQjtJQUV2QixJQUFNZixZQUFZSixtQkFBbUJLLFlBQVksSUFDM0NlLFFBQVFsQixhQUFhbUIsb0JBQW9CLENBQUNqQjtJQUVoRCxJQUFJZ0IsVUFBVSxNQUFNO1FBQ2xCLElBQU1aLGtCQUFrQkosVUFBVUssU0FBUyxJQUNyQ0MsMkJBQTJCQyxJQUFBQSxZQUFJLEVBQUNYLG1CQUFtQlMsU0FBUyxLQUFNLEdBQUc7UUFFM0VQLGFBQWFVLEtBQUssQ0FBQyxBQUFDLGlCQUEyRUosT0FBM0RFLDBCQUF5QixvQ0FBa0QsT0FBaEJGLGlCQUFnQjtRQUUvRyxJQUFNSyxZQUFZYixtQkFBbUJjLFlBQVksSUFDM0NDLG1CQUFtQkssTUFBTUosY0FBYyxDQUFDSCxXQUFXWDtRQUV6RGlCLG1CQUFtQkosa0JBQWtCLEdBQUc7UUFFeEMsSUFBSUksa0JBQWtCO1lBQ3BCakIsYUFBYWUsS0FBSyxDQUFDLEFBQUMsbUJBQTZFVCxPQUEzREUsMEJBQXlCLG9DQUFrRCxPQUFoQkYsaUJBQWdCO1FBQ25IO0lBQ0Y7SUFFQSxPQUFPVztBQUNUO0FBRUEsU0FBU0csZ0JBQWdCdEIsa0JBQWtCLEVBQUVDLGFBQWEsRUFBRUMsWUFBWTtJQUN0RSxJQUFJcUIsbUJBQW1CO0lBRXZCLElBQU1uQixZQUFZSixtQkFBbUJLLFlBQVksSUFDM0NtQixRQUFRdEIsYUFBYXVCLG9CQUFvQixDQUFDckI7SUFFaEQsSUFBSW9CLFVBQVUsTUFBTTtRQUNsQixJQUFNaEIsa0JBQWtCSixVQUFVSyxTQUFTLElBQ3JDQywyQkFBMkJDLElBQUFBLFlBQUksRUFBQ1gsbUJBQW1CUyxTQUFTLEtBQU0sR0FBRztRQUUzRVAsYUFBYVUsS0FBSyxDQUFDLEFBQUMsaUJBQTJFSixPQUEzREUsMEJBQXlCLG9DQUFrRCxPQUFoQkYsaUJBQWdCO1FBRS9HLElBQU1LLFlBQVliLG1CQUFtQmMsWUFBWSxJQUMzQ0MsbUJBQW1CUyxNQUFNUixjQUFjLENBQUNILFdBQVdYO1FBRXpEcUIsbUJBQW1CUixrQkFBa0IsR0FBRztRQUV4QyxJQUFJUSxrQkFBa0I7WUFDcEJyQixhQUFhZSxLQUFLLENBQUMsQUFBQyxtQkFBNkVULE9BQTNERSwwQkFBeUIsb0NBQWtELE9BQWhCRixpQkFBZ0I7UUFDbkg7SUFDRjtJQUVBLE9BQU9lO0FBQ1Q7QUFFQSxTQUFTRyxrQkFBa0IxQixrQkFBa0IsRUFBRUMsYUFBYSxFQUFFQyxZQUFZO0lBQ3hFLElBQUl5QixxQkFBcUI7SUFFekIsSUFBTXZCLFlBQVlKLG1CQUFtQkssWUFBWSxJQUMzQ3VCLFVBQVUxQixhQUFhMkIsc0JBQXNCLENBQUN6QjtJQUVwRCxJQUFJd0IsWUFBWSxNQUFNO1FBQ3BCLElBQU1wQixrQkFBa0JKLFVBQVVLLFNBQVMsSUFDckNDLDJCQUEyQkMsSUFBQUEsWUFBSSxFQUFDWCxtQkFBbUJTLFNBQVMsS0FBTSxHQUFHO1FBRTNFUCxhQUFhVSxLQUFLLENBQUMsQUFBQyxpQkFBMkVKLE9BQTNERSwwQkFBeUIsb0NBQWtELE9BQWhCRixpQkFBZ0I7UUFFL0csSUFBTUssWUFBWWIsbUJBQW1CYyxZQUFZLElBQzNDQyxtQkFBbUJhLFFBQVFaLGNBQWMsQ0FBQ0gsV0FBV1g7UUFFM0R5QixxQkFBcUJaLGtCQUFrQixHQUFHO1FBRTFDLElBQUlZLG9CQUFvQjtZQUN0QnpCLGFBQWFlLEtBQUssQ0FBQyxBQUFDLG1CQUE2RVQsT0FBM0RFLDBCQUF5QixvQ0FBa0QsT0FBaEJGLGlCQUFnQjtRQUNuSDtJQUNGO0lBRUEsT0FBT21CO0FBQ1Q7QUFFQSxTQUFTRyxxQkFBcUI5QixrQkFBa0IsRUFBRUMsYUFBYSxFQUFFQyxZQUFZO0lBQzNFLElBQUk2Qix3QkFBd0I7SUFFNUIsSUFBTTNCLFlBQVlKLG1CQUFtQkssWUFBWSxJQUMzQzJCLGFBQWE5QixhQUFhK0IseUJBQXlCLENBQUM3QjtJQUUxRCxJQUFJNEIsZUFBZSxNQUFNO1FBQ3ZCLElBQU14QixrQkFBa0JKLFVBQVVLLFNBQVMsSUFDckNDLDJCQUEyQkMsSUFBQUEsWUFBSSxFQUFDWCxtQkFBbUJTLFNBQVMsS0FBTSxHQUFHO1FBRTNFUCxhQUFhVSxLQUFLLENBQUMsQUFBQyxpQkFBMkVKLE9BQTNERSwwQkFBeUIsb0NBQWtELE9BQWhCRixpQkFBZ0I7UUFFL0csSUFBTUssWUFBWWIsbUJBQW1CYyxZQUFZLElBQzNDQyxtQkFBbUJpQixXQUFXaEIsY0FBYyxDQUFDSCxXQUFXWDtRQUU5RDZCLHdCQUF3QmhCLGtCQUFrQixHQUFHO1FBRTdDLElBQUlnQix1QkFBdUI7WUFDekI3QixhQUFhZSxLQUFLLENBQUMsQUFBQyxtQkFBNkVULE9BQTNERSwwQkFBeUIsb0NBQWtELE9BQWhCRixpQkFBZ0I7UUFDbkg7SUFDRjtJQUVBLE9BQU91QjtBQUNUO0FBRUEsU0FBU0csb0JBQW9CbEMsa0JBQWtCLEVBQUVDLGFBQWEsRUFBRUMsWUFBWTtJQUMxRSxJQUFJaUMsdUJBQXVCO0lBRTNCLElBQU0vQixZQUFZSixtQkFBbUJLLFlBQVksSUFDM0MrQixtQkFBbUJoQyxVQUFVaUMsbUJBQW1CLElBQ2hEQyxtQkFBbUJDLElBQUFBLDBDQUFvQyxFQUFDSCxtQkFDeERJLHNCQUFzQnRDLGFBQWF1Qyx1Q0FBdUMsQ0FBQ0g7SUFFakYsSUFBSUUscUJBQXFCO1FBQ3ZCLElBQU0zQixZQUFZYixtQkFBbUJjLFlBQVksSUFDM0M0QixrQkFBa0I3QixVQUFVSixTQUFTLElBQ3JDRCxrQkFBa0JKLFVBQVVLLFNBQVM7UUFFM0NQLGFBQWFVLEtBQUssQ0FBQyxBQUFDLGlCQUFrRUosT0FBbERrQyxpQkFBZ0Isb0NBQWtELE9BQWhCbEMsaUJBQWdCO1FBRXRHLElBQU1tQyxlQUFldkMsVUFBVXdDLGVBQWUsSUFDeENDLHVDQUF1Q0MsaUNBQW9DLENBQUNDLDRCQUE0QixDQUFDbEMsV0FBVzhCLGNBQWN6QyxlQUNsSThDLGVBQWVILHNDQUFzQyxHQUFHO1FBRTlENUMsY0FBY2dELGVBQWUsQ0FBQ0QsY0FBYzlDO1FBRTVDaUMsdUJBQXVCO1FBRXZCLElBQUlBLHNCQUFzQjtZQUN4QmpDLGFBQWFlLEtBQUssQ0FBQyxBQUFDLG1CQUFvRVQsT0FBbERrQyxpQkFBZ0Isb0NBQWtELE9BQWhCbEMsaUJBQWdCO1FBQzFHO0lBQ0Y7SUFFQSxPQUFPMkI7QUFDVDtBQUVBLElBQU1lLGNBQWM7SUFDbEJuRDtJQUNBbUI7SUFDQUk7SUFDQUk7SUFDQUk7SUFDQUk7Q0FDRDtJQUVELFdBQWVnQiJ9
@@ -19,7 +19,7 @@ function unifyWithBracketedCombinator(statement, assignments, stated, localConte
19
19
  var unifiedWithBracketedCombinator;
20
20
  var statementNode = statement.getNode(), statementString = statement.getString(), bracketedCombinator = _bracketed.default.fromNothing(), bracketedCombinatorStatementNode = bracketedCombinator.getStatementNode(), combinatorStatementNode = bracketedCombinatorStatementNode; ///
21
21
  localContext.trace("Unifying the '".concat(statementString, "' statement with the bracketed combinator..."));
22
- unifiedWithBracketedCombinator = _statementWithCombinator.default.unify(statementNode, combinatorStatementNode, assignments, stated, localContext);
22
+ unifiedWithBracketedCombinator = _statementWithCombinator.default.unify(combinatorStatementNode, statementNode, assignments, stated, localContext);
23
23
  if (unifiedWithBracketedCombinator) {
24
24
  localContext.debug("...unified the '".concat(statementString, "' statement with the bracketed combinator."));
25
25
  }
@@ -47,11 +47,11 @@ function unifyStatementWithCombinator(statement, combinator, assignments, stated
47
47
  var unifiedWithCombinator;
48
48
  var statementNode = statement.getNode(), statementString = statement.getString(), combinatorString = combinator.getString(), combinatorStatementNode = combinator.getStatementNode();
49
49
  localContext.trace("Unifying the '".concat(statementString, "' statement with the '").concat(combinatorString, "' combinator..."));
50
- unifiedWithCombinator = _statementWithCombinator.default.unify(statementNode, combinatorStatementNode, assignments, stated, localContext);
50
+ unifiedWithCombinator = _statementWithCombinator.default.unify(combinatorStatementNode, statementNode, assignments, stated, localContext);
51
51
  if (unifiedWithCombinator) {
52
52
  localContext.debug("...unified the '".concat(statementString, "' statement with the '").concat(combinatorString, "' combinator."));
53
53
  }
54
54
  return unifiedWithCombinator;
55
55
  }
56
56
 
57
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9taXhpbnMvc3RhdGVtZW50L3VuaWZ5LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgQnJhY2tldGVkQ29tYmluYXRvciBmcm9tIFwiLi4vLi4vY29tYmluYXRvci9icmFja2V0ZWRcIjtcbmltcG9ydCBzdGF0ZW1lbnRXaXRoQ29tYmluYXRvclVuaWZpZXIgZnJvbSBcIi4uLy4uL3VuaWZpZXIvc3RhdGVtZW50V2l0aENvbWJpbmF0b3JcIjtcblxuZnVuY3Rpb24gdW5pZnlXaXRoQnJhY2tldGVkQ29tYmluYXRvcihzdGF0ZW1lbnQsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGxvY2FsQ29udGV4dCkge1xuICBsZXQgdW5pZmllZFdpdGhCcmFja2V0ZWRDb21iaW5hdG9yO1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnQuZ2V0Tm9kZSgpLFxuICAgICAgICBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCksXG4gICAgICAgIGJyYWNrZXRlZENvbWJpbmF0b3IgPSBCcmFja2V0ZWRDb21iaW5hdG9yLmZyb21Ob3RoaW5nKCksXG4gICAgICAgIGJyYWNrZXRlZENvbWJpbmF0b3JTdGF0ZW1lbnROb2RlID0gYnJhY2tldGVkQ29tYmluYXRvci5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIGNvbWJpbmF0b3JTdGF0ZW1lbnROb2RlID0gYnJhY2tldGVkQ29tYmluYXRvclN0YXRlbWVudE5vZGU7IC8vL1xuXG4gIGxvY2FsQ29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCB3aXRoIHRoZSBicmFja2V0ZWQgY29tYmluYXRvci4uLmApO1xuXG4gIHVuaWZpZWRXaXRoQnJhY2tldGVkQ29tYmluYXRvciA9IHN0YXRlbWVudFdpdGhDb21iaW5hdG9yVW5pZmllci51bmlmeShzdGF0ZW1lbnROb2RlLCBjb21iaW5hdG9yU3RhdGVtZW50Tm9kZSwgYXNzaWdubWVudHMsIHN0YXRlZCwgbG9jYWxDb250ZXh0KTtcblxuICBpZiAodW5pZmllZFdpdGhCcmFja2V0ZWRDb21iaW5hdG9yKSB7XG4gICAgbG9jYWxDb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgd2l0aCB0aGUgYnJhY2tldGVkIGNvbWJpbmF0b3IuYCk7XG4gIH1cblxuICByZXR1cm4gdW5pZmllZFdpdGhCcmFja2V0ZWRDb21iaW5hdG9yO1xufVxuXG5mdW5jdGlvbiB1bmlmeVdpdGhDb21iaW5hdG9ycyhzdGF0ZW1lbnQsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGxvY2FsQ29udGV4dCkge1xuICBsZXQgdW5pZmllZFdpdGhDb21iaW5hdG9ycztcblxuICBjb25zdCBjb21iaW5hdG9ycyA9IGxvY2FsQ29udGV4dC5nZXRDb21iaW5hdG9ycygpO1xuXG4gIGFzc2lnbm1lbnRzID0gbnVsbDsgLy8vXG5cbiAgc3RhdGVkID0gdHJ1ZTsgIC8vL1xuXG4gIHVuaWZpZWRXaXRoQ29tYmluYXRvcnMgPSBjb21iaW5hdG9ycy5zb21lKChjb21iaW5hdG9yKSA9PiB7XG4gICAgY29uc3QgdW5pZmllZFdpdGhDb21iaW5hdG9yID0gdW5pZnlTdGF0ZW1lbnRXaXRoQ29tYmluYXRvcihzdGF0ZW1lbnQsIGNvbWJpbmF0b3IsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGxvY2FsQ29udGV4dCk7XG5cbiAgICBpZiAodW5pZmllZFdpdGhDb21iaW5hdG9yKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB1bmlmaWVkV2l0aENvbWJpbmF0b3JzO1xufVxuXG5cbmNvbnN0IHVuaWZ5TWl4aW5zID0gW1xuICB1bmlmeVdpdGhCcmFja2V0ZWRDb21iaW5hdG9yLFxuICB1bmlmeVdpdGhDb21iaW5hdG9yc1xuXTtcblxuZXhwb3J0IGRlZmF1bHQgdW5pZnlNaXhpbnM7XG5cbmZ1bmN0aW9uIHVuaWZ5U3RhdGVtZW50V2l0aENvbWJpbmF0b3Ioc3RhdGVtZW50LCBjb21iaW5hdG9yLCBhc3NpZ25tZW50cywgc3RhdGVkLCBsb2NhbENvbnRleHQpIHtcbiAgbGV0IHVuaWZpZWRXaXRoQ29tYmluYXRvcjtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50LmdldE5vZGUoKSxcbiAgICAgICAgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpLFxuICAgICAgICBjb21iaW5hdG9yU3RyaW5nID0gY29tYmluYXRvci5nZXRTdHJpbmcoKSxcbiAgICAgICAgY29tYmluYXRvclN0YXRlbWVudE5vZGUgPSBjb21iaW5hdG9yLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBsb2NhbENvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgd2l0aCB0aGUgJyR7Y29tYmluYXRvclN0cmluZ30nIGNvbWJpbmF0b3IuLi5gKTtcblxuICB1bmlmaWVkV2l0aENvbWJpbmF0b3IgPSBzdGF0ZW1lbnRXaXRoQ29tYmluYXRvclVuaWZpZXIudW5pZnkoc3RhdGVtZW50Tm9kZSwgY29tYmluYXRvclN0YXRlbWVudE5vZGUsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGxvY2FsQ29udGV4dCk7XG5cbiAgaWYgKHVuaWZpZWRXaXRoQ29tYmluYXRvcikge1xuICAgIGxvY2FsQ29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHdpdGggdGhlICcke2NvbWJpbmF0b3JTdHJpbmd9JyBjb21iaW5hdG9yLmApO1xuICB9XG5cbiAgcmV0dXJuIHVuaWZpZWRXaXRoQ29tYmluYXRvcjtcbn1cbiJdLCJuYW1lcyI6WyJ1bmlmeVdpdGhCcmFja2V0ZWRDb21iaW5hdG9yIiwic3RhdGVtZW50IiwiYXNzaWdubWVudHMiLCJzdGF0ZWQiLCJsb2NhbENvbnRleHQiLCJ1bmlmaWVkV2l0aEJyYWNrZXRlZENvbWJpbmF0b3IiLCJzdGF0ZW1lbnROb2RlIiwiZ2V0Tm9kZSIsInN0YXRlbWVudFN0cmluZyIsImdldFN0cmluZyIsImJyYWNrZXRlZENvbWJpbmF0b3IiLCJCcmFja2V0ZWRDb21iaW5hdG9yIiwiZnJvbU5vdGhpbmciLCJicmFja2V0ZWRDb21iaW5hdG9yU3RhdGVtZW50Tm9kZSIsImdldFN0YXRlbWVudE5vZGUiLCJjb21iaW5hdG9yU3RhdGVtZW50Tm9kZSIsInRyYWNlIiwic3RhdGVtZW50V2l0aENvbWJpbmF0b3JVbmlmaWVyIiwidW5pZnkiLCJkZWJ1ZyIsInVuaWZ5V2l0aENvbWJpbmF0b3JzIiwidW5pZmllZFdpdGhDb21iaW5hdG9ycyIsImNvbWJpbmF0b3JzIiwiZ2V0Q29tYmluYXRvcnMiLCJzb21lIiwiY29tYmluYXRvciIsInVuaWZpZWRXaXRoQ29tYmluYXRvciIsInVuaWZ5U3RhdGVtZW50V2l0aENvbWJpbmF0b3IiLCJ1bmlmeU1peGlucyIsImNvbWJpbmF0b3JTdHJpbmciXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQW1EQTs7O2VBQUE7OztnRUFqRGdDOzhFQUNXOzs7Ozs7QUFFM0MsU0FBU0EsNkJBQTZCQyxTQUFTLEVBQUVDLFdBQVcsRUFBRUMsTUFBTSxFQUFFQyxZQUFZO0lBQ2hGLElBQUlDO0lBRUosSUFBTUMsZ0JBQWdCTCxVQUFVTSxPQUFPLElBQ2pDQyxrQkFBa0JQLFVBQVVRLFNBQVMsSUFDckNDLHNCQUFzQkMsa0JBQW1CLENBQUNDLFdBQVcsSUFDckRDLG1DQUFtQ0gsb0JBQW9CSSxnQkFBZ0IsSUFDdkVDLDBCQUEwQkYsa0NBQWtDLEdBQUc7SUFFckVULGFBQWFZLEtBQUssQ0FBQyxBQUFDLGlCQUFnQyxPQUFoQlIsaUJBQWdCO0lBRXBESCxpQ0FBaUNZLGdDQUE4QixDQUFDQyxLQUFLLENBQUNaLGVBQWVTLHlCQUF5QmIsYUFBYUMsUUFBUUM7SUFFbkksSUFBSUMsZ0NBQWdDO1FBQ2xDRCxhQUFhZSxLQUFLLENBQUMsQUFBQyxtQkFBa0MsT0FBaEJYLGlCQUFnQjtJQUN4RDtJQUVBLE9BQU9IO0FBQ1Q7QUFFQSxTQUFTZSxxQkFBcUJuQixTQUFTLEVBQUVDLFdBQVcsRUFBRUMsTUFBTSxFQUFFQyxZQUFZO0lBQ3hFLElBQUlpQjtJQUVKLElBQU1DLGNBQWNsQixhQUFhbUIsY0FBYztJQUUvQ3JCLGNBQWMsTUFBTSxHQUFHO0lBRXZCQyxTQUFTLE1BQU8sR0FBRztJQUVuQmtCLHlCQUF5QkMsWUFBWUUsSUFBSSxDQUFDLFNBQUNDO1FBQ3pDLElBQU1DLHdCQUF3QkMsNkJBQTZCMUIsV0FBV3dCLFlBQVl2QixhQUFhQyxRQUFRQztRQUV2RyxJQUFJc0IsdUJBQXVCO1lBQ3pCLE9BQU87UUFDVDtJQUNGO0lBRUEsT0FBT0w7QUFDVDtBQUdBLElBQU1PLGNBQWM7SUFDbEI1QjtJQUNBb0I7Q0FDRDtJQUVELFdBQWVRO0FBRWYsU0FBU0QsNkJBQTZCMUIsU0FBUyxFQUFFd0IsVUFBVSxFQUFFdkIsV0FBVyxFQUFFQyxNQUFNLEVBQUVDLFlBQVk7SUFDNUYsSUFBSXNCO0lBRUosSUFBTXBCLGdCQUFnQkwsVUFBVU0sT0FBTyxJQUNqQ0Msa0JBQWtCUCxVQUFVUSxTQUFTLElBQ3JDb0IsbUJBQW1CSixXQUFXaEIsU0FBUyxJQUN2Q00sMEJBQTBCVSxXQUFXWCxnQkFBZ0I7SUFFM0RWLGFBQWFZLEtBQUssQ0FBQyxBQUFDLGlCQUF3RGEsT0FBeENyQixpQkFBZ0IsMEJBQXlDLE9BQWpCcUIsa0JBQWlCO0lBRTdGSCx3QkFBd0JULGdDQUE4QixDQUFDQyxLQUFLLENBQUNaLGVBQWVTLHlCQUF5QmIsYUFBYUMsUUFBUUM7SUFFMUgsSUFBSXNCLHVCQUF1QjtRQUN6QnRCLGFBQWFlLEtBQUssQ0FBQyxBQUFDLG1CQUEwRFUsT0FBeENyQixpQkFBZ0IsMEJBQXlDLE9BQWpCcUIsa0JBQWlCO0lBQ2pHO0lBRUEsT0FBT0g7QUFDVCJ9
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9taXhpbnMvc3RhdGVtZW50L3VuaWZ5LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgQnJhY2tldGVkQ29tYmluYXRvciBmcm9tIFwiLi4vLi4vY29tYmluYXRvci9icmFja2V0ZWRcIjtcbmltcG9ydCBzdGF0ZW1lbnRXaXRoQ29tYmluYXRvclVuaWZpZXIgZnJvbSBcIi4uLy4uL3VuaWZpZXIvc3RhdGVtZW50V2l0aENvbWJpbmF0b3JcIjtcblxuZnVuY3Rpb24gdW5pZnlXaXRoQnJhY2tldGVkQ29tYmluYXRvcihzdGF0ZW1lbnQsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGxvY2FsQ29udGV4dCkge1xuICBsZXQgdW5pZmllZFdpdGhCcmFja2V0ZWRDb21iaW5hdG9yO1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnQuZ2V0Tm9kZSgpLFxuICAgICAgICBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCksXG4gICAgICAgIGJyYWNrZXRlZENvbWJpbmF0b3IgPSBCcmFja2V0ZWRDb21iaW5hdG9yLmZyb21Ob3RoaW5nKCksXG4gICAgICAgIGJyYWNrZXRlZENvbWJpbmF0b3JTdGF0ZW1lbnROb2RlID0gYnJhY2tldGVkQ29tYmluYXRvci5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIGNvbWJpbmF0b3JTdGF0ZW1lbnROb2RlID0gYnJhY2tldGVkQ29tYmluYXRvclN0YXRlbWVudE5vZGU7IC8vL1xuXG4gIGxvY2FsQ29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCB3aXRoIHRoZSBicmFja2V0ZWQgY29tYmluYXRvci4uLmApO1xuXG4gIHVuaWZpZWRXaXRoQnJhY2tldGVkQ29tYmluYXRvciA9IHN0YXRlbWVudFdpdGhDb21iaW5hdG9yVW5pZmllci51bmlmeShjb21iaW5hdG9yU3RhdGVtZW50Tm9kZSwgc3RhdGVtZW50Tm9kZSwgYXNzaWdubWVudHMsIHN0YXRlZCwgbG9jYWxDb250ZXh0KTtcblxuICBpZiAodW5pZmllZFdpdGhCcmFja2V0ZWRDb21iaW5hdG9yKSB7XG4gICAgbG9jYWxDb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgd2l0aCB0aGUgYnJhY2tldGVkIGNvbWJpbmF0b3IuYCk7XG4gIH1cblxuICByZXR1cm4gdW5pZmllZFdpdGhCcmFja2V0ZWRDb21iaW5hdG9yO1xufVxuXG5mdW5jdGlvbiB1bmlmeVdpdGhDb21iaW5hdG9ycyhzdGF0ZW1lbnQsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGxvY2FsQ29udGV4dCkge1xuICBsZXQgdW5pZmllZFdpdGhDb21iaW5hdG9ycztcblxuICBjb25zdCBjb21iaW5hdG9ycyA9IGxvY2FsQ29udGV4dC5nZXRDb21iaW5hdG9ycygpO1xuXG4gIGFzc2lnbm1lbnRzID0gbnVsbDsgLy8vXG5cbiAgc3RhdGVkID0gdHJ1ZTsgIC8vL1xuXG4gIHVuaWZpZWRXaXRoQ29tYmluYXRvcnMgPSBjb21iaW5hdG9ycy5zb21lKChjb21iaW5hdG9yKSA9PiB7XG4gICAgY29uc3QgdW5pZmllZFdpdGhDb21iaW5hdG9yID0gdW5pZnlTdGF0ZW1lbnRXaXRoQ29tYmluYXRvcihzdGF0ZW1lbnQsIGNvbWJpbmF0b3IsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGxvY2FsQ29udGV4dCk7XG5cbiAgICBpZiAodW5pZmllZFdpdGhDb21iaW5hdG9yKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB1bmlmaWVkV2l0aENvbWJpbmF0b3JzO1xufVxuXG5cbmNvbnN0IHVuaWZ5TWl4aW5zID0gW1xuICB1bmlmeVdpdGhCcmFja2V0ZWRDb21iaW5hdG9yLFxuICB1bmlmeVdpdGhDb21iaW5hdG9yc1xuXTtcblxuZXhwb3J0IGRlZmF1bHQgdW5pZnlNaXhpbnM7XG5cbmZ1bmN0aW9uIHVuaWZ5U3RhdGVtZW50V2l0aENvbWJpbmF0b3Ioc3RhdGVtZW50LCBjb21iaW5hdG9yLCBhc3NpZ25tZW50cywgc3RhdGVkLCBsb2NhbENvbnRleHQpIHtcbiAgbGV0IHVuaWZpZWRXaXRoQ29tYmluYXRvcjtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50LmdldE5vZGUoKSxcbiAgICAgICAgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpLFxuICAgICAgICBjb21iaW5hdG9yU3RyaW5nID0gY29tYmluYXRvci5nZXRTdHJpbmcoKSxcbiAgICAgICAgY29tYmluYXRvclN0YXRlbWVudE5vZGUgPSBjb21iaW5hdG9yLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBsb2NhbENvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgd2l0aCB0aGUgJyR7Y29tYmluYXRvclN0cmluZ30nIGNvbWJpbmF0b3IuLi5gKTtcblxuICB1bmlmaWVkV2l0aENvbWJpbmF0b3IgPSBzdGF0ZW1lbnRXaXRoQ29tYmluYXRvclVuaWZpZXIudW5pZnkoY29tYmluYXRvclN0YXRlbWVudE5vZGUsIHN0YXRlbWVudE5vZGUsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGxvY2FsQ29udGV4dCk7XG5cbiAgaWYgKHVuaWZpZWRXaXRoQ29tYmluYXRvcikge1xuICAgIGxvY2FsQ29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHdpdGggdGhlICcke2NvbWJpbmF0b3JTdHJpbmd9JyBjb21iaW5hdG9yLmApO1xuICB9XG5cbiAgcmV0dXJuIHVuaWZpZWRXaXRoQ29tYmluYXRvcjtcbn1cbiJdLCJuYW1lcyI6WyJ1bmlmeVdpdGhCcmFja2V0ZWRDb21iaW5hdG9yIiwic3RhdGVtZW50IiwiYXNzaWdubWVudHMiLCJzdGF0ZWQiLCJsb2NhbENvbnRleHQiLCJ1bmlmaWVkV2l0aEJyYWNrZXRlZENvbWJpbmF0b3IiLCJzdGF0ZW1lbnROb2RlIiwiZ2V0Tm9kZSIsInN0YXRlbWVudFN0cmluZyIsImdldFN0cmluZyIsImJyYWNrZXRlZENvbWJpbmF0b3IiLCJCcmFja2V0ZWRDb21iaW5hdG9yIiwiZnJvbU5vdGhpbmciLCJicmFja2V0ZWRDb21iaW5hdG9yU3RhdGVtZW50Tm9kZSIsImdldFN0YXRlbWVudE5vZGUiLCJjb21iaW5hdG9yU3RhdGVtZW50Tm9kZSIsInRyYWNlIiwic3RhdGVtZW50V2l0aENvbWJpbmF0b3JVbmlmaWVyIiwidW5pZnkiLCJkZWJ1ZyIsInVuaWZ5V2l0aENvbWJpbmF0b3JzIiwidW5pZmllZFdpdGhDb21iaW5hdG9ycyIsImNvbWJpbmF0b3JzIiwiZ2V0Q29tYmluYXRvcnMiLCJzb21lIiwiY29tYmluYXRvciIsInVuaWZpZWRXaXRoQ29tYmluYXRvciIsInVuaWZ5U3RhdGVtZW50V2l0aENvbWJpbmF0b3IiLCJ1bmlmeU1peGlucyIsImNvbWJpbmF0b3JTdHJpbmciXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQW1EQTs7O2VBQUE7OztnRUFqRGdDOzhFQUNXOzs7Ozs7QUFFM0MsU0FBU0EsNkJBQTZCQyxTQUFTLEVBQUVDLFdBQVcsRUFBRUMsTUFBTSxFQUFFQyxZQUFZO0lBQ2hGLElBQUlDO0lBRUosSUFBTUMsZ0JBQWdCTCxVQUFVTSxPQUFPLElBQ2pDQyxrQkFBa0JQLFVBQVVRLFNBQVMsSUFDckNDLHNCQUFzQkMsa0JBQW1CLENBQUNDLFdBQVcsSUFDckRDLG1DQUFtQ0gsb0JBQW9CSSxnQkFBZ0IsSUFDdkVDLDBCQUEwQkYsa0NBQWtDLEdBQUc7SUFFckVULGFBQWFZLEtBQUssQ0FBQyxBQUFDLGlCQUFnQyxPQUFoQlIsaUJBQWdCO0lBRXBESCxpQ0FBaUNZLGdDQUE4QixDQUFDQyxLQUFLLENBQUNILHlCQUF5QlQsZUFBZUosYUFBYUMsUUFBUUM7SUFFbkksSUFBSUMsZ0NBQWdDO1FBQ2xDRCxhQUFhZSxLQUFLLENBQUMsQUFBQyxtQkFBa0MsT0FBaEJYLGlCQUFnQjtJQUN4RDtJQUVBLE9BQU9IO0FBQ1Q7QUFFQSxTQUFTZSxxQkFBcUJuQixTQUFTLEVBQUVDLFdBQVcsRUFBRUMsTUFBTSxFQUFFQyxZQUFZO0lBQ3hFLElBQUlpQjtJQUVKLElBQU1DLGNBQWNsQixhQUFhbUIsY0FBYztJQUUvQ3JCLGNBQWMsTUFBTSxHQUFHO0lBRXZCQyxTQUFTLE1BQU8sR0FBRztJQUVuQmtCLHlCQUF5QkMsWUFBWUUsSUFBSSxDQUFDLFNBQUNDO1FBQ3pDLElBQU1DLHdCQUF3QkMsNkJBQTZCMUIsV0FBV3dCLFlBQVl2QixhQUFhQyxRQUFRQztRQUV2RyxJQUFJc0IsdUJBQXVCO1lBQ3pCLE9BQU87UUFDVDtJQUNGO0lBRUEsT0FBT0w7QUFDVDtBQUdBLElBQU1PLGNBQWM7SUFDbEI1QjtJQUNBb0I7Q0FDRDtJQUVELFdBQWVRO0FBRWYsU0FBU0QsNkJBQTZCMUIsU0FBUyxFQUFFd0IsVUFBVSxFQUFFdkIsV0FBVyxFQUFFQyxNQUFNLEVBQUVDLFlBQVk7SUFDNUYsSUFBSXNCO0lBRUosSUFBTXBCLGdCQUFnQkwsVUFBVU0sT0FBTyxJQUNqQ0Msa0JBQWtCUCxVQUFVUSxTQUFTLElBQ3JDb0IsbUJBQW1CSixXQUFXaEIsU0FBUyxJQUN2Q00sMEJBQTBCVSxXQUFXWCxnQkFBZ0I7SUFFM0RWLGFBQWFZLEtBQUssQ0FBQyxBQUFDLGlCQUF3RGEsT0FBeENyQixpQkFBZ0IsMEJBQXlDLE9BQWpCcUIsa0JBQWlCO0lBRTdGSCx3QkFBd0JULGdDQUE4QixDQUFDQyxLQUFLLENBQUNILHlCQUF5QlQsZUFBZUosYUFBYUMsUUFBUUM7SUFFMUgsSUFBSXNCLHVCQUF1QjtRQUN6QnRCLGFBQWFlLEtBQUssQ0FBQyxBQUFDLG1CQUEwRFUsT0FBeENyQixpQkFBZ0IsMEJBQXlDLE9BQWpCcUIsa0JBQWlCO0lBQ2pHO0lBRUEsT0FBT0g7QUFDVCJ9
@@ -64,7 +64,7 @@ function unifyTermWithConstructor(term, constructor, localContext, verifyAhead)
64
64
  var termUnifiedWithConstructor = false;
65
65
  var termString = term.getString(), constructorString = constructor.getString();
66
66
  localContext.trace("Unifying the '".concat(termString, "' term with the '").concat(constructorString, "' constructor..."), term);
67
- var termNode = term.getNode(), constructorTerm = constructor.getTerm(), constructorTermNode = constructorTerm.getNode(), unified = _termWithConstructor.default.unify(termNode, constructorTermNode, localContext);
67
+ var termNode = term.getNode(), constructorTerm = constructor.getTerm(), constructorTermNode = constructorTerm.getNode(), unified = _termWithConstructor.default.unify(constructorTermNode, termNode, localContext);
68
68
  if (unified) {
69
69
  var verifiedAhead;
70
70
  var type = constructor.getType();
@@ -78,4 +78,4 @@ function unifyTermWithConstructor(term, constructor, localContext, verifyAhead)
78
78
  return termUnifiedWithConstructor;
79
79
  }
80
80
 
81
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9taXhpbnMvdGVybS91bmlmeS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHNoaW0gZnJvbSBcIi4uLy4uL3NoaW1cIjtcbmltcG9ydCBCcmFja2V0ZWRDb25zdHJ1Y3RvciBmcm9tIFwiLi4vLi4vY29uc3RydWN0b3IvYnJhY2tldGVkXCI7XG5pbXBvcnQgdGVybVdpdGhDb25zdHJ1Y3RvclVuaWZpZXIgZnJvbSBcIi4uLy4uL3VuaWZpZXIvdGVybVdpdGhDb25zdHJ1Y3RvclwiO1xuXG5pbXBvcnQgeyBub2RlUXVlcnkgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL3F1ZXJ5XCI7XG5cbmNvbnN0IHRlcm1Ob2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvdGVybS9hcmd1bWVudC90ZXJtXCIpO1xuXG5mdW5jdGlvbiB1bmlmeVRlcm1XaXRoQnJhY2tldGVkQ29uc3RydWN0b3IodGVybSwgbG9jYWxDb250ZXh0LCB2ZXJpZnlBaGVhZCkge1xuICBsZXQgdGVybVVuaWZpZWRXaXRoQnJhY2tldGVkQ29uc3RydWN0b3I7XG5cbiAgY29uc3QgdGVybVN0cmluZyA9IHRlcm0uZ2V0U3RyaW5nKCk7XG5cbiAgbG9jYWxDb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gd2l0aCB0aGUgYnJhY2tldGVkIGNvbnN0cnVjdG9yLi4uYCwgdGVybSk7XG5cbiAgY29uc3QgYnJhY2tldGVkQ29uc3RydWN0b3IgPSBCcmFja2V0ZWRDb25zdHJ1Y3Rvci5mcm9tTm90aGluZygpO1xuXG4gIHRlcm1VbmlmaWVkV2l0aEJyYWNrZXRlZENvbnN0cnVjdG9yID0gdW5pZnlUZXJtV2l0aENvbnN0cnVjdG9yKHRlcm0sIGJyYWNrZXRlZENvbnN0cnVjdG9yLCBsb2NhbENvbnRleHQsICgpID0+IHtcbiAgICBsZXQgdmVyaWZpZWRBaGVhZCA9IGZhbHNlO1xuXG4gICAgY29uc3QgeyBUZXJtIH0gPSBzaGltLFxuICAgICAgICAgIGJyYWNrZXRlZFRlcm0gPSB0ZXJtLCAvLy9cbiAgICAgICAgICBicmFja2V0ZWRUZXJtTm9kZSA9IGJyYWNrZXRlZFRlcm0uZ2V0Tm9kZSgpLFxuICAgICAgICAgIHRlcm1Ob2RlID0gdGVybU5vZGVRdWVyeShicmFja2V0ZWRUZXJtTm9kZSk7IC8vL1xuXG4gICAgdGVybSA9IFRlcm0uZnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBsb2NhbENvbnRleHQpO1xuXG4gICAgaWYgKHRlcm0gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHRlcm1WVmVyaWZpZWQgPSB0ZXJtLnZlcmlmeShsb2NhbENvbnRleHQsICgpID0+IHtcbiAgICAgICAgbGV0IHZlcmlmaWVkQWhlYWQ7XG5cbiAgICAgICAgY29uc3QgdHlwZSA9IHRlcm0uZ2V0VHlwZSgpO1xuXG4gICAgICAgIGJyYWNrZXRlZFRlcm0uc2V0VHlwZSh0eXBlKTtcblxuICAgICAgICB2ZXJpZmllZEFoZWFkID0gdmVyaWZ5QWhlYWQoKTtcblxuICAgICAgICByZXR1cm4gdmVyaWZpZWRBaGVhZDtcbiAgICAgIH0pO1xuXG4gICAgICB2ZXJpZmllZEFoZWFkID0gdGVybVZWZXJpZmllZDsgIC8vL1xuICAgIH1cblxuICAgIHJldHVybiB2ZXJpZmllZEFoZWFkO1xuICB9KTtcblxuICBpZiAodGVybVVuaWZpZWRXaXRoQnJhY2tldGVkQ29uc3RydWN0b3IpIHtcbiAgICBsb2NhbENvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIHdpdGggdGhlIGJyYWNrZXRlZCBjb25zdHJ1Y3Rvci5gLCB0ZXJtKTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtVW5pZmllZFdpdGhCcmFja2V0ZWRDb25zdHJ1Y3Rvcjtcbn1cblxuZnVuY3Rpb24gdW5pZnlUZXJtV2l0aENvbnN0cnVjdG9ycyh0ZXJtLCBsb2NhbENvbnRleHQsIHZlcmlmeUFoZWFkKSB7XG4gIGxldCB0ZXJtVW5pZmllZFdpdGhDb25zdHJ1Y3RvcnMgPSBmYWxzZTtcblxuICBjb25zdCBjb25zdHJ1Y3RvcnMgPSBsb2NhbENvbnRleHQuZ2V0Q29uc3RydWN0b3JzKCk7XG5cbiAgdGVybVVuaWZpZWRXaXRoQ29uc3RydWN0b3JzID0gY29uc3RydWN0b3JzLnNvbWUoKGNvbnN0cnVjdG9yKSA9PiB7XG4gICAgY29uc3QgdGVybVVuaWZpZWRXaXRoQ29uc3RydWN0b3IgPSB1bmlmeVRlcm1XaXRoQ29uc3RydWN0b3IodGVybSwgY29uc3RydWN0b3IsIGxvY2FsQ29udGV4dCwgdmVyaWZ5QWhlYWQpO1xuXG4gICAgaWYgKHRlcm1VbmlmaWVkV2l0aENvbnN0cnVjdG9yKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB0ZXJtVW5pZmllZFdpdGhDb25zdHJ1Y3RvcnM7XG59XG5cbmNvbnN0IHVuaWZ5TWl4aW5zID0gW1xuICB1bmlmeVRlcm1XaXRoQnJhY2tldGVkQ29uc3RydWN0b3IsXG4gIHVuaWZ5VGVybVdpdGhDb25zdHJ1Y3RvcnNcbl07XG5cbmV4cG9ydCBkZWZhdWx0IHVuaWZ5TWl4aW5zO1xuXG5mdW5jdGlvbiB1bmlmeVRlcm1XaXRoQ29uc3RydWN0b3IodGVybSwgY29uc3RydWN0b3IsIGxvY2FsQ29udGV4dCwgdmVyaWZ5QWhlYWQpIHtcbiAgbGV0IHRlcm1VbmlmaWVkV2l0aENvbnN0cnVjdG9yID0gZmFsc2U7XG5cbiAgY29uc3QgdGVybVN0cmluZyA9IHRlcm0uZ2V0U3RyaW5nKCksXG4gICAgICAgIGNvbnN0cnVjdG9yU3RyaW5nID0gY29uc3RydWN0b3IuZ2V0U3RyaW5nKCk7XG5cbiAgbG9jYWxDb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gd2l0aCB0aGUgJyR7Y29uc3RydWN0b3JTdHJpbmd9JyBjb25zdHJ1Y3Rvci4uLmAsIHRlcm0pO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gdGVybS5nZXROb2RlKCksXG4gICAgICAgIGNvbnN0cnVjdG9yVGVybSA9IGNvbnN0cnVjdG9yLmdldFRlcm0oKSxcbiAgICAgICAgY29uc3RydWN0b3JUZXJtTm9kZSA9IGNvbnN0cnVjdG9yVGVybS5nZXROb2RlKCksXG4gICAgICAgIHVuaWZpZWQgPSB0ZXJtV2l0aENvbnN0cnVjdG9yVW5pZmllci51bmlmeSh0ZXJtTm9kZSwgY29uc3RydWN0b3JUZXJtTm9kZSwgbG9jYWxDb250ZXh0KTtcblxuICBpZiAodW5pZmllZCkge1xuICAgIGxldCB2ZXJpZmllZEFoZWFkO1xuXG4gICAgY29uc3QgdHlwZSA9IGNvbnN0cnVjdG9yLmdldFR5cGUoKTtcblxuICAgIHRlcm0uc2V0VHlwZSh0eXBlKTtcblxuICAgIHZlcmlmaWVkQWhlYWQgPSB2ZXJpZnlBaGVhZCgpO1xuXG4gICAgdGVybVVuaWZpZWRXaXRoQ29uc3RydWN0b3IgPSB2ZXJpZmllZEFoZWFkOyAgLy8vXG4gIH1cblxuICBpZiAodGVybVVuaWZpZWRXaXRoQ29uc3RydWN0b3IpIHtcbiAgICBsb2NhbENvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIHdpdGggdGhlICcke2NvbnN0cnVjdG9yU3RyaW5nfScgY29uc3RydWN0b3IuYCwgdGVybSk7XG4gIH1cblxuICByZXR1cm4gdGVybVVuaWZpZWRXaXRoQ29uc3RydWN0b3I7XG59XG4iXSwibmFtZXMiOlsidGVybU5vZGVRdWVyeSIsIm5vZGVRdWVyeSIsInVuaWZ5VGVybVdpdGhCcmFja2V0ZWRDb25zdHJ1Y3RvciIsInRlcm0iLCJsb2NhbENvbnRleHQiLCJ2ZXJpZnlBaGVhZCIsInRlcm1VbmlmaWVkV2l0aEJyYWNrZXRlZENvbnN0cnVjdG9yIiwidGVybVN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwiYnJhY2tldGVkQ29uc3RydWN0b3IiLCJCcmFja2V0ZWRDb25zdHJ1Y3RvciIsImZyb21Ob3RoaW5nIiwidW5pZnlUZXJtV2l0aENvbnN0cnVjdG9yIiwidmVyaWZpZWRBaGVhZCIsIlRlcm0iLCJzaGltIiwiYnJhY2tldGVkVGVybSIsImJyYWNrZXRlZFRlcm1Ob2RlIiwiZ2V0Tm9kZSIsInRlcm1Ob2RlIiwiZnJvbVRlcm1Ob2RlIiwidGVybVZWZXJpZmllZCIsInZlcmlmeSIsInR5cGUiLCJnZXRUeXBlIiwic2V0VHlwZSIsImRlYnVnIiwidW5pZnlUZXJtV2l0aENvbnN0cnVjdG9ycyIsInRlcm1VbmlmaWVkV2l0aENvbnN0cnVjdG9ycyIsImNvbnN0cnVjdG9ycyIsImdldENvbnN0cnVjdG9ycyIsInNvbWUiLCJjb25zdHJ1Y3RvciIsInRlcm1VbmlmaWVkV2l0aENvbnN0cnVjdG9yIiwidW5pZnlNaXhpbnMiLCJjb25zdHJ1Y3RvclN0cmluZyIsImNvbnN0cnVjdG9yVGVybSIsImdldFRlcm0iLCJjb25zdHJ1Y3RvclRlcm1Ob2RlIiwidW5pZmllZCIsInRlcm1XaXRoQ29uc3RydWN0b3JVbmlmaWVyIiwidW5pZnkiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQTRFQTs7O2VBQUE7OzsyREExRWlCO2dFQUNnQjswRUFDTTtxQkFFYjs7Ozs7O0FBRTFCLElBQU1BLGdCQUFnQkMsSUFBQUEsZ0JBQVMsRUFBQztBQUVoQyxTQUFTQyxrQ0FBa0NDLElBQUksRUFBRUMsWUFBWSxFQUFFQyxXQUFXO0lBQ3hFLElBQUlDO0lBRUosSUFBTUMsYUFBYUosS0FBS0ssU0FBUztJQUVqQ0osYUFBYUssS0FBSyxDQUFDLEFBQUMsaUJBQTJCLE9BQVhGLFlBQVcsNkNBQTJDSjtJQUUxRixJQUFNTyx1QkFBdUJDLGtCQUFvQixDQUFDQyxXQUFXO0lBRTdETixzQ0FBc0NPLHlCQUF5QlYsTUFBTU8sc0JBQXNCTixjQUFjO1FBQ3ZHLElBQUlVLGdCQUFnQjtRQUVwQixJQUFNLEFBQUVDLE9BQVNDLGFBQUksQ0FBYkQsTUFDRkUsZ0JBQWdCZCxNQUNoQmUsb0JBQW9CRCxjQUFjRSxPQUFPLElBQ3pDQyxXQUFXcEIsY0FBY2tCLG9CQUFvQixHQUFHO1FBRXREZixPQUFPWSxLQUFLTSxZQUFZLENBQUNELFVBQVVoQjtRQUVuQyxJQUFJRCxTQUFTLE1BQU07WUFDakIsSUFBTW1CLGdCQUFnQm5CLEtBQUtvQixNQUFNLENBQUNuQixjQUFjO2dCQUM5QyxJQUFJVTtnQkFFSixJQUFNVSxPQUFPckIsS0FBS3NCLE9BQU87Z0JBRXpCUixjQUFjUyxPQUFPLENBQUNGO2dCQUV0QlYsZ0JBQWdCVDtnQkFFaEIsT0FBT1M7WUFDVDtZQUVBQSxnQkFBZ0JRLGVBQWdCLEdBQUc7UUFDckM7UUFFQSxPQUFPUjtJQUNUO0lBRUEsSUFBSVIscUNBQXFDO1FBQ3ZDRixhQUFhdUIsS0FBSyxDQUFDLEFBQUMsbUJBQTZCLE9BQVhwQixZQUFXLDJDQUF5Q0o7SUFDNUY7SUFFQSxPQUFPRztBQUNUO0FBRUEsU0FBU3NCLDBCQUEwQnpCLElBQUksRUFBRUMsWUFBWSxFQUFFQyxXQUFXO0lBQ2hFLElBQUl3Qiw4QkFBOEI7SUFFbEMsSUFBTUMsZUFBZTFCLGFBQWEyQixlQUFlO0lBRWpERiw4QkFBOEJDLGFBQWFFLElBQUksQ0FBQyxTQUFDQztRQUMvQyxJQUFNQyw2QkFBNkJyQix5QkFBeUJWLE1BQU04QixhQUFhN0IsY0FBY0M7UUFFN0YsSUFBSTZCLDRCQUE0QjtZQUM5QixPQUFPO1FBQ1Q7SUFDRjtJQUVBLE9BQU9MO0FBQ1Q7QUFFQSxJQUFNTSxjQUFjO0lBQ2xCakM7SUFDQTBCO0NBQ0Q7SUFFRCxXQUFlTztBQUVmLFNBQVN0Qix5QkFBeUJWLElBQUksRUFBRThCLFdBQVcsRUFBRTdCLFlBQVksRUFBRUMsV0FBVztJQUM1RSxJQUFJNkIsNkJBQTZCO0lBRWpDLElBQU0zQixhQUFhSixLQUFLSyxTQUFTLElBQzNCNEIsb0JBQW9CSCxZQUFZekIsU0FBUztJQUUvQ0osYUFBYUssS0FBSyxDQUFDLEFBQUMsaUJBQThDMkIsT0FBOUI3QixZQUFXLHFCQUFxQyxPQUFsQjZCLG1CQUFrQixxQkFBbUJqQztJQUV2RyxJQUFNaUIsV0FBV2pCLEtBQUtnQixPQUFPLElBQ3ZCa0Isa0JBQWtCSixZQUFZSyxPQUFPLElBQ3JDQyxzQkFBc0JGLGdCQUFnQmxCLE9BQU8sSUFDN0NxQixVQUFVQyw0QkFBMEIsQ0FBQ0MsS0FBSyxDQUFDdEIsVUFBVW1CLHFCQUFxQm5DO0lBRWhGLElBQUlvQyxTQUFTO1FBQ1gsSUFBSTFCO1FBRUosSUFBTVUsT0FBT1MsWUFBWVIsT0FBTztRQUVoQ3RCLEtBQUt1QixPQUFPLENBQUNGO1FBRWJWLGdCQUFnQlQ7UUFFaEI2Qiw2QkFBNkJwQixlQUFnQixHQUFHO0lBQ2xEO0lBRUEsSUFBSW9CLDRCQUE0QjtRQUM5QjlCLGFBQWF1QixLQUFLLENBQUMsQUFBQyxtQkFBZ0RTLE9BQTlCN0IsWUFBVyxxQkFBcUMsT0FBbEI2QixtQkFBa0IsbUJBQWlCakM7SUFDekc7SUFFQSxPQUFPK0I7QUFDVCJ9
81
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9taXhpbnMvdGVybS91bmlmeS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHNoaW0gZnJvbSBcIi4uLy4uL3NoaW1cIjtcbmltcG9ydCBCcmFja2V0ZWRDb25zdHJ1Y3RvciBmcm9tIFwiLi4vLi4vY29uc3RydWN0b3IvYnJhY2tldGVkXCI7XG5pbXBvcnQgdGVybVdpdGhDb25zdHJ1Y3RvclVuaWZpZXIgZnJvbSBcIi4uLy4uL3VuaWZpZXIvdGVybVdpdGhDb25zdHJ1Y3RvclwiO1xuXG5pbXBvcnQgeyBub2RlUXVlcnkgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL3F1ZXJ5XCI7XG5cbmNvbnN0IHRlcm1Ob2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvdGVybS9hcmd1bWVudC90ZXJtXCIpO1xuXG5mdW5jdGlvbiB1bmlmeVRlcm1XaXRoQnJhY2tldGVkQ29uc3RydWN0b3IodGVybSwgbG9jYWxDb250ZXh0LCB2ZXJpZnlBaGVhZCkge1xuICBsZXQgdGVybVVuaWZpZWRXaXRoQnJhY2tldGVkQ29uc3RydWN0b3I7XG5cbiAgY29uc3QgdGVybVN0cmluZyA9IHRlcm0uZ2V0U3RyaW5nKCk7XG5cbiAgbG9jYWxDb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gd2l0aCB0aGUgYnJhY2tldGVkIGNvbnN0cnVjdG9yLi4uYCwgdGVybSk7XG5cbiAgY29uc3QgYnJhY2tldGVkQ29uc3RydWN0b3IgPSBCcmFja2V0ZWRDb25zdHJ1Y3Rvci5mcm9tTm90aGluZygpO1xuXG4gIHRlcm1VbmlmaWVkV2l0aEJyYWNrZXRlZENvbnN0cnVjdG9yID0gdW5pZnlUZXJtV2l0aENvbnN0cnVjdG9yKHRlcm0sIGJyYWNrZXRlZENvbnN0cnVjdG9yLCBsb2NhbENvbnRleHQsICgpID0+IHtcbiAgICBsZXQgdmVyaWZpZWRBaGVhZCA9IGZhbHNlO1xuXG4gICAgY29uc3QgeyBUZXJtIH0gPSBzaGltLFxuICAgICAgICAgIGJyYWNrZXRlZFRlcm0gPSB0ZXJtLCAvLy9cbiAgICAgICAgICBicmFja2V0ZWRUZXJtTm9kZSA9IGJyYWNrZXRlZFRlcm0uZ2V0Tm9kZSgpLFxuICAgICAgICAgIHRlcm1Ob2RlID0gdGVybU5vZGVRdWVyeShicmFja2V0ZWRUZXJtTm9kZSk7IC8vL1xuXG4gICAgdGVybSA9IFRlcm0uZnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBsb2NhbENvbnRleHQpO1xuXG4gICAgaWYgKHRlcm0gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHRlcm1WVmVyaWZpZWQgPSB0ZXJtLnZlcmlmeShsb2NhbENvbnRleHQsICgpID0+IHtcbiAgICAgICAgbGV0IHZlcmlmaWVkQWhlYWQ7XG5cbiAgICAgICAgY29uc3QgdHlwZSA9IHRlcm0uZ2V0VHlwZSgpO1xuXG4gICAgICAgIGJyYWNrZXRlZFRlcm0uc2V0VHlwZSh0eXBlKTtcblxuICAgICAgICB2ZXJpZmllZEFoZWFkID0gdmVyaWZ5QWhlYWQoKTtcblxuICAgICAgICByZXR1cm4gdmVyaWZpZWRBaGVhZDtcbiAgICAgIH0pO1xuXG4gICAgICB2ZXJpZmllZEFoZWFkID0gdGVybVZWZXJpZmllZDsgIC8vL1xuICAgIH1cblxuICAgIHJldHVybiB2ZXJpZmllZEFoZWFkO1xuICB9KTtcblxuICBpZiAodGVybVVuaWZpZWRXaXRoQnJhY2tldGVkQ29uc3RydWN0b3IpIHtcbiAgICBsb2NhbENvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIHdpdGggdGhlIGJyYWNrZXRlZCBjb25zdHJ1Y3Rvci5gLCB0ZXJtKTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtVW5pZmllZFdpdGhCcmFja2V0ZWRDb25zdHJ1Y3Rvcjtcbn1cblxuZnVuY3Rpb24gdW5pZnlUZXJtV2l0aENvbnN0cnVjdG9ycyh0ZXJtLCBsb2NhbENvbnRleHQsIHZlcmlmeUFoZWFkKSB7XG4gIGxldCB0ZXJtVW5pZmllZFdpdGhDb25zdHJ1Y3RvcnMgPSBmYWxzZTtcblxuICBjb25zdCBjb25zdHJ1Y3RvcnMgPSBsb2NhbENvbnRleHQuZ2V0Q29uc3RydWN0b3JzKCk7XG5cbiAgdGVybVVuaWZpZWRXaXRoQ29uc3RydWN0b3JzID0gY29uc3RydWN0b3JzLnNvbWUoKGNvbnN0cnVjdG9yKSA9PiB7XG4gICAgY29uc3QgdGVybVVuaWZpZWRXaXRoQ29uc3RydWN0b3IgPSB1bmlmeVRlcm1XaXRoQ29uc3RydWN0b3IodGVybSwgY29uc3RydWN0b3IsIGxvY2FsQ29udGV4dCwgdmVyaWZ5QWhlYWQpO1xuXG4gICAgaWYgKHRlcm1VbmlmaWVkV2l0aENvbnN0cnVjdG9yKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB0ZXJtVW5pZmllZFdpdGhDb25zdHJ1Y3RvcnM7XG59XG5cbmNvbnN0IHVuaWZ5TWl4aW5zID0gW1xuICB1bmlmeVRlcm1XaXRoQnJhY2tldGVkQ29uc3RydWN0b3IsXG4gIHVuaWZ5VGVybVdpdGhDb25zdHJ1Y3RvcnNcbl07XG5cbmV4cG9ydCBkZWZhdWx0IHVuaWZ5TWl4aW5zO1xuXG5mdW5jdGlvbiB1bmlmeVRlcm1XaXRoQ29uc3RydWN0b3IodGVybSwgY29uc3RydWN0b3IsIGxvY2FsQ29udGV4dCwgdmVyaWZ5QWhlYWQpIHtcbiAgbGV0IHRlcm1VbmlmaWVkV2l0aENvbnN0cnVjdG9yID0gZmFsc2U7XG5cbiAgY29uc3QgdGVybVN0cmluZyA9IHRlcm0uZ2V0U3RyaW5nKCksXG4gICAgICAgIGNvbnN0cnVjdG9yU3RyaW5nID0gY29uc3RydWN0b3IuZ2V0U3RyaW5nKCk7XG5cbiAgbG9jYWxDb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gd2l0aCB0aGUgJyR7Y29uc3RydWN0b3JTdHJpbmd9JyBjb25zdHJ1Y3Rvci4uLmAsIHRlcm0pO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gdGVybS5nZXROb2RlKCksXG4gICAgICAgIGNvbnN0cnVjdG9yVGVybSA9IGNvbnN0cnVjdG9yLmdldFRlcm0oKSxcbiAgICAgICAgY29uc3RydWN0b3JUZXJtTm9kZSA9IGNvbnN0cnVjdG9yVGVybS5nZXROb2RlKCksXG4gICAgICAgIHVuaWZpZWQgPSB0ZXJtV2l0aENvbnN0cnVjdG9yVW5pZmllci51bmlmeShjb25zdHJ1Y3RvclRlcm1Ob2RlLCB0ZXJtTm9kZSwgbG9jYWxDb250ZXh0KTtcblxuICBpZiAodW5pZmllZCkge1xuICAgIGxldCB2ZXJpZmllZEFoZWFkO1xuXG4gICAgY29uc3QgdHlwZSA9IGNvbnN0cnVjdG9yLmdldFR5cGUoKTtcblxuICAgIHRlcm0uc2V0VHlwZSh0eXBlKTtcblxuICAgIHZlcmlmaWVkQWhlYWQgPSB2ZXJpZnlBaGVhZCgpO1xuXG4gICAgdGVybVVuaWZpZWRXaXRoQ29uc3RydWN0b3IgPSB2ZXJpZmllZEFoZWFkOyAgLy8vXG4gIH1cblxuICBpZiAodGVybVVuaWZpZWRXaXRoQ29uc3RydWN0b3IpIHtcbiAgICBsb2NhbENvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIHdpdGggdGhlICcke2NvbnN0cnVjdG9yU3RyaW5nfScgY29uc3RydWN0b3IuYCwgdGVybSk7XG4gIH1cblxuICByZXR1cm4gdGVybVVuaWZpZWRXaXRoQ29uc3RydWN0b3I7XG59XG4iXSwibmFtZXMiOlsidGVybU5vZGVRdWVyeSIsIm5vZGVRdWVyeSIsInVuaWZ5VGVybVdpdGhCcmFja2V0ZWRDb25zdHJ1Y3RvciIsInRlcm0iLCJsb2NhbENvbnRleHQiLCJ2ZXJpZnlBaGVhZCIsInRlcm1VbmlmaWVkV2l0aEJyYWNrZXRlZENvbnN0cnVjdG9yIiwidGVybVN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwiYnJhY2tldGVkQ29uc3RydWN0b3IiLCJCcmFja2V0ZWRDb25zdHJ1Y3RvciIsImZyb21Ob3RoaW5nIiwidW5pZnlUZXJtV2l0aENvbnN0cnVjdG9yIiwidmVyaWZpZWRBaGVhZCIsIlRlcm0iLCJzaGltIiwiYnJhY2tldGVkVGVybSIsImJyYWNrZXRlZFRlcm1Ob2RlIiwiZ2V0Tm9kZSIsInRlcm1Ob2RlIiwiZnJvbVRlcm1Ob2RlIiwidGVybVZWZXJpZmllZCIsInZlcmlmeSIsInR5cGUiLCJnZXRUeXBlIiwic2V0VHlwZSIsImRlYnVnIiwidW5pZnlUZXJtV2l0aENvbnN0cnVjdG9ycyIsInRlcm1VbmlmaWVkV2l0aENvbnN0cnVjdG9ycyIsImNvbnN0cnVjdG9ycyIsImdldENvbnN0cnVjdG9ycyIsInNvbWUiLCJjb25zdHJ1Y3RvciIsInRlcm1VbmlmaWVkV2l0aENvbnN0cnVjdG9yIiwidW5pZnlNaXhpbnMiLCJjb25zdHJ1Y3RvclN0cmluZyIsImNvbnN0cnVjdG9yVGVybSIsImdldFRlcm0iLCJjb25zdHJ1Y3RvclRlcm1Ob2RlIiwidW5pZmllZCIsInRlcm1XaXRoQ29uc3RydWN0b3JVbmlmaWVyIiwidW5pZnkiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQTRFQTs7O2VBQUE7OzsyREExRWlCO2dFQUNnQjswRUFDTTtxQkFFYjs7Ozs7O0FBRTFCLElBQU1BLGdCQUFnQkMsSUFBQUEsZ0JBQVMsRUFBQztBQUVoQyxTQUFTQyxrQ0FBa0NDLElBQUksRUFBRUMsWUFBWSxFQUFFQyxXQUFXO0lBQ3hFLElBQUlDO0lBRUosSUFBTUMsYUFBYUosS0FBS0ssU0FBUztJQUVqQ0osYUFBYUssS0FBSyxDQUFDLEFBQUMsaUJBQTJCLE9BQVhGLFlBQVcsNkNBQTJDSjtJQUUxRixJQUFNTyx1QkFBdUJDLGtCQUFvQixDQUFDQyxXQUFXO0lBRTdETixzQ0FBc0NPLHlCQUF5QlYsTUFBTU8sc0JBQXNCTixjQUFjO1FBQ3ZHLElBQUlVLGdCQUFnQjtRQUVwQixJQUFNLEFBQUVDLE9BQVNDLGFBQUksQ0FBYkQsTUFDRkUsZ0JBQWdCZCxNQUNoQmUsb0JBQW9CRCxjQUFjRSxPQUFPLElBQ3pDQyxXQUFXcEIsY0FBY2tCLG9CQUFvQixHQUFHO1FBRXREZixPQUFPWSxLQUFLTSxZQUFZLENBQUNELFVBQVVoQjtRQUVuQyxJQUFJRCxTQUFTLE1BQU07WUFDakIsSUFBTW1CLGdCQUFnQm5CLEtBQUtvQixNQUFNLENBQUNuQixjQUFjO2dCQUM5QyxJQUFJVTtnQkFFSixJQUFNVSxPQUFPckIsS0FBS3NCLE9BQU87Z0JBRXpCUixjQUFjUyxPQUFPLENBQUNGO2dCQUV0QlYsZ0JBQWdCVDtnQkFFaEIsT0FBT1M7WUFDVDtZQUVBQSxnQkFBZ0JRLGVBQWdCLEdBQUc7UUFDckM7UUFFQSxPQUFPUjtJQUNUO0lBRUEsSUFBSVIscUNBQXFDO1FBQ3ZDRixhQUFhdUIsS0FBSyxDQUFDLEFBQUMsbUJBQTZCLE9BQVhwQixZQUFXLDJDQUF5Q0o7SUFDNUY7SUFFQSxPQUFPRztBQUNUO0FBRUEsU0FBU3NCLDBCQUEwQnpCLElBQUksRUFBRUMsWUFBWSxFQUFFQyxXQUFXO0lBQ2hFLElBQUl3Qiw4QkFBOEI7SUFFbEMsSUFBTUMsZUFBZTFCLGFBQWEyQixlQUFlO0lBRWpERiw4QkFBOEJDLGFBQWFFLElBQUksQ0FBQyxTQUFDQztRQUMvQyxJQUFNQyw2QkFBNkJyQix5QkFBeUJWLE1BQU04QixhQUFhN0IsY0FBY0M7UUFFN0YsSUFBSTZCLDRCQUE0QjtZQUM5QixPQUFPO1FBQ1Q7SUFDRjtJQUVBLE9BQU9MO0FBQ1Q7QUFFQSxJQUFNTSxjQUFjO0lBQ2xCakM7SUFDQTBCO0NBQ0Q7SUFFRCxXQUFlTztBQUVmLFNBQVN0Qix5QkFBeUJWLElBQUksRUFBRThCLFdBQVcsRUFBRTdCLFlBQVksRUFBRUMsV0FBVztJQUM1RSxJQUFJNkIsNkJBQTZCO0lBRWpDLElBQU0zQixhQUFhSixLQUFLSyxTQUFTLElBQzNCNEIsb0JBQW9CSCxZQUFZekIsU0FBUztJQUUvQ0osYUFBYUssS0FBSyxDQUFDLEFBQUMsaUJBQThDMkIsT0FBOUI3QixZQUFXLHFCQUFxQyxPQUFsQjZCLG1CQUFrQixxQkFBbUJqQztJQUV2RyxJQUFNaUIsV0FBV2pCLEtBQUtnQixPQUFPLElBQ3ZCa0Isa0JBQWtCSixZQUFZSyxPQUFPLElBQ3JDQyxzQkFBc0JGLGdCQUFnQmxCLE9BQU8sSUFDN0NxQixVQUFVQyw0QkFBMEIsQ0FBQ0MsS0FBSyxDQUFDSCxxQkFBcUJuQixVQUFVaEI7SUFFaEYsSUFBSW9DLFNBQVM7UUFDWCxJQUFJMUI7UUFFSixJQUFNVSxPQUFPUyxZQUFZUixPQUFPO1FBRWhDdEIsS0FBS3VCLE9BQU8sQ0FBQ0Y7UUFFYlYsZ0JBQWdCVDtRQUVoQjZCLDZCQUE2QnBCLGVBQWdCLEdBQUc7SUFDbEQ7SUFFQSxJQUFJb0IsNEJBQTRCO1FBQzlCOUIsYUFBYXVCLEtBQUssQ0FBQyxBQUFDLG1CQUFnRFMsT0FBOUI3QixZQUFXLHFCQUFxQyxPQUFsQjZCLG1CQUFrQixtQkFBaUJqQztJQUN6RztJQUVBLE9BQU8rQjtBQUNUIn0=
package/lib/premise.js CHANGED
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  Object.defineProperty(exports, "default", {
6
6
  enumerable: true,
7
7
  get: function() {
8
- return Premise;
8
+ return _default;
9
9
  }
10
10
  });
11
11
  var _shim = /*#__PURE__*/ _interop_require_default(require("./shim"));
@@ -14,6 +14,7 @@ var _subproof = /*#__PURE__*/ _interop_require_default(require("./assertion/subp
14
14
  var _unqualified = /*#__PURE__*/ _interop_require_default(require("./statement/unqualified"));
15
15
  var _query = require("./utilities/query");
16
16
  var _assignments = require("./utilities/assignments");
17
+ var _json = require("./utilities/json");
17
18
  function _class_call_check(instance, Constructor) {
18
19
  if (!(instance instanceof Constructor)) {
19
20
  throw new TypeError("Cannot call a class as a function");
@@ -76,7 +77,9 @@ var Premise = /*#__PURE__*/ function() {
76
77
  var subproofUnified = false;
77
78
  var premise = this, subproofString = subproof.getString(), premiseStatement = premise.getStatement(), premiseStatementString = premiseStatement.getString();
78
79
  localContext.trace("Unifying the '".concat(subproofString, "' subproof with the premise's '").concat(premiseStatementString, "' statement..."));
79
- var statement = this.unqualifiedStatement.getStatement(), statementNode = statement.getNode(), subproofAssertion = _subproof.default.fromStatementNode(statementNode, this.fileContext);
80
+ var statement = this.unqualifiedStatement.getStatement(), statementNode = statement.getNode(), statementTokens = statement.getTokens(), context = this.fileContext, tokens = statementTokens; ///
81
+ localContext = _local.default.fromContextAndTokens(context, tokens); ///
82
+ var subproofAssertion = _subproof.default.fromStatementNode(statementNode, localContext);
80
83
  if (subproofAssertion !== null) {
81
84
  subproofUnified = subproofAssertion.unifySubproof(subproof, substitutions, this.fileContext, localContext);
82
85
  }
@@ -147,7 +150,7 @@ var Premise = /*#__PURE__*/ function() {
147
150
  {
148
151
  key: "toJSON",
149
152
  value: function toJSON() {
150
- var unqualifiedStatementJSON = this.unqualifiedStatement.toJSON(), unqualifiedStatement = unqualifiedStatementJSON, json = {
153
+ var unqualifiedStatementJSON = (0, _json.unqualifiedStatementToUnqualifiedStatementJSON)(this.unqualifiedStatement), unqualifiedStatement = unqualifiedStatementJSON, json = {
151
154
  unqualifiedStatement: unqualifiedStatement
152
155
  };
153
156
  return json;
@@ -157,10 +160,7 @@ var Premise = /*#__PURE__*/ function() {
157
160
  {
158
161
  key: "fromJSON",
159
162
  value: function fromJSON(json, fileContext) {
160
- var unqualifiedStatement = json.unqualifiedStatement;
161
- json = unqualifiedStatement; ///
162
- unqualifiedStatement = _unqualified.default.fromJSON(json, fileContext);
163
- var premise = new Premise(fileContext, unqualifiedStatement);
163
+ var unqualifiedStatement = (0, _json.unqualifiedStatementFromJSON)(json, fileContext), premise = new Premise(fileContext, unqualifiedStatement);
164
164
  return premise;
165
165
  }
166
166
  },
@@ -174,5 +174,9 @@ var Premise = /*#__PURE__*/ function() {
174
174
  ]);
175
175
  return Premise;
176
176
  }();
177
+ Object.assign(_shim.default, {
178
+ Premise: Premise
179
+ });
180
+ var _default = Premise;
177
181
 
178
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9wcmVtaXNlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgc2hpbSBmcm9tIFwiLi9zaGltXCI7XG5pbXBvcnQgTG9jYWxDb250ZXh0IGZyb20gXCIuL2NvbnRleHQvbG9jYWxcIjtcbmltcG9ydCBTdWJwcm9vZkFzc2VydGlvbiBmcm9tIFwiLi9hc3NlcnRpb24vc3VicHJvb2ZcIjtcbmltcG9ydCBVbnF1YWxpZmllZFN0YXRlbWVudCBmcm9tIFwiLi9zdGF0ZW1lbnQvdW5xdWFsaWZpZWRcIjtcblxuaW1wb3J0IHsgbm9kZVF1ZXJ5IH0gZnJvbSBcIi4vdXRpbGl0aWVzL3F1ZXJ5XCI7XG5pbXBvcnQgeyBhc3NpZ25Bc3NpZ25tZW50cyB9IGZyb20gXCIuL3V0aWxpdGllcy9hc3NpZ25tZW50c1wiO1xuXG5jb25zdCB1bnF1YWxpZmllZFN0YXRlbWVudE5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9wcmVtaXNlL3VucXVhbGlmaWVkU3RhdGVtZW50XCIpO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQcmVtaXNlIHtcbiAgY29uc3RydWN0b3IoZmlsZUNvbnRleHQsIHVucXVhbGlmaWVkU3RhdGVtZW50KSB7XG4gICAgdGhpcy5maWxlQ29udGV4dCA9IGZpbGVDb250ZXh0O1xuICAgIHRoaXMudW5xdWFsaWZpZWRTdGF0ZW1lbnQgPSB1bnF1YWxpZmllZFN0YXRlbWVudDtcbiAgfVxuXG4gIGdldEZpbGVDb250ZXh0KCkge1xuICAgIHJldHVybiB0aGlzLmZpbGVDb250ZXh0O1xuICB9XG5cbiAgZ2V0VW5xdWFsaWZpZWRTdGF0ZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMudW5xdWFsaWZpZWRTdGF0ZW1lbnQ7XG4gIH1cblxuICBnZXRTdHJpbmcoKSB7IHJldHVybiB0aGlzLnVucXVhbGlmaWVkU3RhdGVtZW50LmdldFN0cmluZygpOyB9XG5cbiAgZ2V0U3RhdGVtZW50KCkgeyByZXR1cm4gdGhpcy51bnF1YWxpZmllZFN0YXRlbWVudC5nZXRTdGF0ZW1lbnQoKTsgfVxuXG4gIHVuaWZ5U3VicHJvb2Yoc3VicHJvb2YsIHN1YnN0aXR1dGlvbnMsIGxvY2FsQ29udGV4dCkge1xuICAgIGxldCBzdWJwcm9vZlVuaWZpZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0IHByZW1pc2UgPSB0aGlzLCAvLy9cbiAgICAgICAgICBzdWJwcm9vZlN0cmluZyA9IHN1YnByb29mLmdldFN0cmluZygpLFxuICAgICAgICAgIHByZW1pc2VTdGF0ZW1lbnQgPSBwcmVtaXNlLmdldFN0YXRlbWVudCgpLFxuICAgICAgICAgIHByZW1pc2VTdGF0ZW1lbnRTdHJpbmcgPSBwcmVtaXNlU3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgbG9jYWxDb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3VicHJvb2ZTdHJpbmd9JyBzdWJwcm9vZiB3aXRoIHRoZSBwcmVtaXNlJ3MgJyR7cHJlbWlzZVN0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudC4uLmApO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50ID0gdGhpcy51bnF1YWxpZmllZFN0YXRlbWVudC5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgICAgICBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50LmdldE5vZGUoKSxcbiAgICAgICAgICBzdWJwcm9vZkFzc2VydGlvbiA9IFN1YnByb29mQXNzZXJ0aW9uLmZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIHRoaXMuZmlsZUNvbnRleHQpO1xuXG4gICAgaWYgKHN1YnByb29mQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICBzdWJwcm9vZlVuaWZpZWQgPSBzdWJwcm9vZkFzc2VydGlvbi51bmlmeVN1YnByb29mKHN1YnByb29mLCBzdWJzdGl0dXRpb25zLCB0aGlzLmZpbGVDb250ZXh0LCBsb2NhbENvbnRleHQpO1xuICAgIH1cblxuICAgIGlmIChzdWJwcm9vZlVuaWZpZWQpIHtcbiAgICAgIGxvY2FsQ29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3VicHJvb2ZTdHJpbmd9JyBzdWJwcm9vZiB3aXRoIHRoZSBwcmVtaXNlJ3MgJyR7cHJlbWlzZVN0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudC5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3VicHJvb2ZVbmlmaWVkO1xuICB9XG5cbiAgdW5pZnlQcm9vZlN0ZXAocHJvb2ZTdGVwLCBzdWJzdGl0dXRpb25zLCBsb2NhbENvbnRleHQpIHtcbiAgICBsZXQgcHJvb2ZTdGVwVW5pZmllZCA9IGZhbHNlO1xuXG4gICAgY29uc3Qgc3VicHJvb2YgPSBwcm9vZlN0ZXAuZ2V0U3VicHJvb2YoKSxcbiAgICAgICAgICBzdGF0ZW1lbnQgPSBwcm9vZlN0ZXAuZ2V0U3RhdGVtZW50KCk7XG5cbiAgICBzdWJzdGl0dXRpb25zLnNuYXBzaG90KCk7XG5cbiAgICBsZXQgc3VicHJvb2ZVbmlmaWVkID0gZmFsc2UsXG4gICAgICAgIHN0YXRlbWVudFVuaWZpZWQgPSBmYWxzZTtcblxuICAgIGlmIChmYWxzZSkge1xuICAgICAgLy8vXG4gICAgfSBlbHNlIGlmIChzdWJwcm9vZiAhPT0gbnVsbCkge1xuICAgICAgc3VicHJvb2ZVbmlmaWVkID0gdGhpcy51bmlmeVN1YnByb29mKHN1YnByb29mLCBzdWJzdGl0dXRpb25zLCBsb2NhbENvbnRleHQpO1xuICAgIH0gZWxzZSBpZiAoc3RhdGVtZW50ICE9PSBudWxsKSB7XG4gICAgICBzdGF0ZW1lbnRVbmlmaWVkID0gdGhpcy51bmlmeVN0YXRlbWVudChzdGF0ZW1lbnQsIHN1YnN0aXR1dGlvbnMsIGxvY2FsQ29udGV4dCk7XG4gICAgfVxuXG4gICAgaWYgKHN1YnByb29mVW5pZmllZCB8fCBzdGF0ZW1lbnRVbmlmaWVkKSB7XG4gICAgICBwcm9vZlN0ZXBVbmlmaWVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcm9vZlN0ZXBVbmlmaWVkID9cbiAgICAgIHN1YnN0aXR1dGlvbnMuY29udGludWUoKSA6XG4gICAgICAgIHN1YnN0aXR1dGlvbnMucm9sbGJhY2sobG9jYWxDb250ZXh0KTtcblxuICAgIHJldHVybiBwcm9vZlN0ZXBVbmlmaWVkO1xuICB9XG5cbiAgdW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBzdWJzdGl0dXRpb25zLCBsb2NhbENvbnRleHQpIHtcbiAgICBsZXQgc3RhdGVtZW50VW5pZmllZDtcblxuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBwcmVtaXNlU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnN0IGxvY2FsQ29udGV4dEIgPSBsb2NhbENvbnRleHQ7IC8vL1xuXG4gICAgbG9jYWxDb250ZXh0ID0gTG9jYWxDb250ZXh0LmZyb21GaWxlQ29udGV4dCh0aGlzLmZpbGVDb250ZXh0KTtcblxuICAgIGNvbnN0IGxvY2FsQ29udGV4dEEgPSBsb2NhbENvbnRleHQ7IC8vL1xuXG4gICAgbG9jYWxDb250ZXh0Qi50cmFjZShgVW5pZnlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCB3aXRoIHRoZSAnJHtwcmVtaXNlU3RyaW5nfScgcHJlbWlzZS4uLmApO1xuXG4gICAgc3RhdGVtZW50VW5pZmllZCA9IHRoaXMudW5xdWFsaWZpZWRTdGF0ZW1lbnQudW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBzdWJzdGl0dXRpb25zLCBsb2NhbENvbnRleHRBLCBsb2NhbENvbnRleHRCKTtcblxuICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVkKSB7XG4gICAgICBsb2NhbENvbnRleHRCLmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgd2l0aCB0aGUgJyR7cHJlbWlzZVN0cmluZ30nIHByZW1pc2UuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXRlbWVudFVuaWZpZWQ7XG4gIH1cblxuICB2ZXJpZnkobG9jYWxDb250ZXh0KSB7XG4gICAgbGV0IHZlcmlmaWVkID0gZmFsc2U7XG5cbiAgICBjb25zdCBwcmVtaXNlU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBsb2NhbENvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7cHJlbWlzZVN0cmluZ30nIHByZW1pc2UuLi5gKTtcblxuICAgIGNvbnN0IHN0YXRlZCA9IHRydWUsXG4gICAgICAgICAgYXNzaWdubWVudHMgPSBbXSxcbiAgICAgICAgICB1bnF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkID0gdGhpcy51bnF1YWxpZmllZFN0YXRlbWVudC52ZXJpZnkoYXNzaWdubWVudHMsIHN0YXRlZCwgbG9jYWxDb250ZXh0KTtcblxuICAgIGlmICh1bnF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkKSB7XG4gICAgICBjb25zdCBhc3NpZ25tZW50c0Fzc2lnbmVkID0gYXNzaWduQXNzaWdubWVudHMoYXNzaWdubWVudHMsIGxvY2FsQ29udGV4dCk7XG5cbiAgICAgIGlmIChhc3NpZ25tZW50c0Fzc2lnbmVkKSB7XG4gICAgICAgIGNvbnN0IHsgUHJvb2ZTdGVwIH0gPSBzaGltLFxuICAgICAgICAgICAgICBwcm9vZlN0ZXAgPSBQcm9vZlN0ZXAuZnJvbVVucXVhbGlmaWVkU3RhdGVtZW50KHRoaXMudW5xdWFsaWZpZWRTdGF0ZW1lbnQpO1xuXG4gICAgICAgIGxvY2FsQ29udGV4dC5hZGRQcm9vZlN0ZXAocHJvb2ZTdGVwKTtcblxuICAgICAgICB2ZXJpZmllZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHZlcmlmaWVkKSB7XG4gICAgICBsb2NhbENvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtwcmVtaXNlU3RyaW5nfScgcHJlbWlzZS5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmVyaWZpZWQ7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgY29uc3QgdW5xdWFsaWZpZWRTdGF0ZW1lbnRKU09OID0gdGhpcy51bnF1YWxpZmllZFN0YXRlbWVudC50b0pTT04oKSxcbiAgICAgICAgICB1bnF1YWxpZmllZFN0YXRlbWVudCA9IHVucXVhbGlmaWVkU3RhdGVtZW50SlNPTiwgIC8vL1xuICAgICAgICAgIGpzb24gPSB7XG4gICAgICAgICAgICB1bnF1YWxpZmllZFN0YXRlbWVudFxuICAgICAgICAgIH07XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBmaWxlQ29udGV4dCkge1xuICAgIGxldCB7IHVucXVhbGlmaWVkU3RhdGVtZW50IH0gPSBqc29uO1xuXG4gICAganNvbiA9IHVucXVhbGlmaWVkU3RhdGVtZW50OyAgLy8vXG5cbiAgICB1bnF1YWxpZmllZFN0YXRlbWVudCA9IFVucXVhbGlmaWVkU3RhdGVtZW50LmZyb21KU09OKGpzb24sIGZpbGVDb250ZXh0KTtcblxuICAgIGNvbnN0IHByZW1pc2UgPSBuZXcgUHJlbWlzZShmaWxlQ29udGV4dCwgdW5xdWFsaWZpZWRTdGF0ZW1lbnQpO1xuXG4gICAgcmV0dXJuIHByZW1pc2U7XG4gIH1cblxuICBzdGF0aWMgZnJvbVByZW1pc2VOb2RlKHN1cHBvc2l0aW9uTm9kZSwgZmlsZUNvbnRleHQpIHtcbiAgICBjb25zdCB1bnF1YWxpZmllZFN0YXRlbWVudE5vZGUgPSB1bnF1YWxpZmllZFN0YXRlbWVudE5vZGVRdWVyeShzdXBwb3NpdGlvbk5vZGUpLFxuICAgICAgICAgIHVucXVhbGlmaWVkU3RhdGVtZW50ID0gVW5xdWFsaWZpZWRTdGF0ZW1lbnQuZnJvbVVucXVhbGlmaWVkU3RhdGVtZW50Tm9kZSh1bnF1YWxpZmllZFN0YXRlbWVudE5vZGUsIGZpbGVDb250ZXh0KSxcbiAgICAgICAgICBwcmVtaXNlID0gbmV3IFByZW1pc2UoZmlsZUNvbnRleHQsIHVucXVhbGlmaWVkU3RhdGVtZW50KTtcblxuICAgIHJldHVybiBwcmVtaXNlXG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJQcmVtaXNlIiwidW5xdWFsaWZpZWRTdGF0ZW1lbnROb2RlUXVlcnkiLCJub2RlUXVlcnkiLCJmaWxlQ29udGV4dCIsInVucXVhbGlmaWVkU3RhdGVtZW50IiwiZ2V0RmlsZUNvbnRleHQiLCJnZXRVbnF1YWxpZmllZFN0YXRlbWVudCIsImdldFN0cmluZyIsImdldFN0YXRlbWVudCIsInVuaWZ5U3VicHJvb2YiLCJzdWJwcm9vZiIsInN1YnN0aXR1dGlvbnMiLCJsb2NhbENvbnRleHQiLCJzdWJwcm9vZlVuaWZpZWQiLCJwcmVtaXNlIiwic3VicHJvb2ZTdHJpbmciLCJwcmVtaXNlU3RhdGVtZW50IiwicHJlbWlzZVN0YXRlbWVudFN0cmluZyIsInRyYWNlIiwic3RhdGVtZW50Iiwic3RhdGVtZW50Tm9kZSIsImdldE5vZGUiLCJzdWJwcm9vZkFzc2VydGlvbiIsIlN1YnByb29mQXNzZXJ0aW9uIiwiZnJvbVN0YXRlbWVudE5vZGUiLCJkZWJ1ZyIsInVuaWZ5UHJvb2ZTdGVwIiwicHJvb2ZTdGVwIiwicHJvb2ZTdGVwVW5pZmllZCIsImdldFN1YnByb29mIiwic25hcHNob3QiLCJzdGF0ZW1lbnRVbmlmaWVkIiwidW5pZnlTdGF0ZW1lbnQiLCJjb250aW51ZSIsInJvbGxiYWNrIiwic3RhdGVtZW50U3RyaW5nIiwicHJlbWlzZVN0cmluZyIsImxvY2FsQ29udGV4dEIiLCJMb2NhbENvbnRleHQiLCJmcm9tRmlsZUNvbnRleHQiLCJsb2NhbENvbnRleHRBIiwidmVyaWZ5IiwidmVyaWZpZWQiLCJzdGF0ZWQiLCJhc3NpZ25tZW50cyIsInVucXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWQiLCJhc3NpZ25tZW50c0Fzc2lnbmVkIiwiYXNzaWduQXNzaWdubWVudHMiLCJQcm9vZlN0ZXAiLCJzaGltIiwiZnJvbVVucXVhbGlmaWVkU3RhdGVtZW50IiwiYWRkUHJvb2ZTdGVwIiwidG9KU09OIiwidW5xdWFsaWZpZWRTdGF0ZW1lbnRKU09OIiwianNvbiIsImZyb21KU09OIiwiVW5xdWFsaWZpZWRTdGF0ZW1lbnQiLCJmcm9tUHJlbWlzZU5vZGUiLCJzdXBwb3NpdGlvbk5vZGUiLCJ1bnF1YWxpZmllZFN0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
182
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9wcmVtaXNlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgc2hpbSBmcm9tIFwiLi9zaGltXCI7XG5pbXBvcnQgTG9jYWxDb250ZXh0IGZyb20gXCIuL2NvbnRleHQvbG9jYWxcIjtcbmltcG9ydCBTdWJwcm9vZkFzc2VydGlvbiBmcm9tIFwiLi9hc3NlcnRpb24vc3VicHJvb2ZcIjtcbmltcG9ydCBVbnF1YWxpZmllZFN0YXRlbWVudCBmcm9tIFwiLi9zdGF0ZW1lbnQvdW5xdWFsaWZpZWRcIjtcblxuaW1wb3J0IHsgbm9kZVF1ZXJ5IH0gZnJvbSBcIi4vdXRpbGl0aWVzL3F1ZXJ5XCI7XG5pbXBvcnQgeyBhc3NpZ25Bc3NpZ25tZW50cyB9IGZyb20gXCIuL3V0aWxpdGllcy9hc3NpZ25tZW50c1wiO1xuaW1wb3J0IHsgdW5xdWFsaWZpZWRTdGF0ZW1lbnRGcm9tSlNPTiwgdW5xdWFsaWZpZWRTdGF0ZW1lbnRUb1VucXVhbGlmaWVkU3RhdGVtZW50SlNPTiB9IGZyb20gXCIuL3V0aWxpdGllcy9qc29uXCI7XG5cbmNvbnN0IHVucXVhbGlmaWVkU3RhdGVtZW50Tm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3ByZW1pc2UvdW5xdWFsaWZpZWRTdGF0ZW1lbnRcIik7XG5cbmNsYXNzIFByZW1pc2Uge1xuICBjb25zdHJ1Y3RvcihmaWxlQ29udGV4dCwgdW5xdWFsaWZpZWRTdGF0ZW1lbnQpIHtcbiAgICB0aGlzLmZpbGVDb250ZXh0ID0gZmlsZUNvbnRleHQ7XG4gICAgdGhpcy51bnF1YWxpZmllZFN0YXRlbWVudCA9IHVucXVhbGlmaWVkU3RhdGVtZW50O1xuICB9XG5cbiAgZ2V0RmlsZUNvbnRleHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZmlsZUNvbnRleHQ7XG4gIH1cblxuICBnZXRVbnF1YWxpZmllZFN0YXRlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy51bnF1YWxpZmllZFN0YXRlbWVudDtcbiAgfVxuXG4gIGdldFN0cmluZygpIHsgcmV0dXJuIHRoaXMudW5xdWFsaWZpZWRTdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7IH1cblxuICBnZXRTdGF0ZW1lbnQoKSB7IHJldHVybiB0aGlzLnVucXVhbGlmaWVkU3RhdGVtZW50LmdldFN0YXRlbWVudCgpOyB9XG5cbiAgdW5pZnlTdWJwcm9vZihzdWJwcm9vZiwgc3Vic3RpdHV0aW9ucywgbG9jYWxDb250ZXh0KSB7XG4gICAgbGV0IHN1YnByb29mVW5pZmllZCA9IGZhbHNlO1xuXG4gICAgY29uc3QgcHJlbWlzZSA9IHRoaXMsIC8vL1xuICAgICAgICAgIHN1YnByb29mU3RyaW5nID0gc3VicHJvb2YuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgcHJlbWlzZVN0YXRlbWVudCA9IHByZW1pc2UuZ2V0U3RhdGVtZW50KCksXG4gICAgICAgICAgcHJlbWlzZVN0YXRlbWVudFN0cmluZyA9IHByZW1pc2VTdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBsb2NhbENvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdWJwcm9vZlN0cmluZ30nIHN1YnByb29mIHdpdGggdGhlIHByZW1pc2UncyAnJHtwcmVtaXNlU3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50Li4uYCk7XG5cbiAgICBjb25zdCBzdGF0ZW1lbnQgPSB0aGlzLnVucXVhbGlmaWVkU3RhdGVtZW50LmdldFN0YXRlbWVudCgpLFxuICAgICAgICAgIHN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnQuZ2V0Tm9kZSgpLFxuICAgICAgICAgIHN0YXRlbWVudFRva2VucyA9IHN0YXRlbWVudC5nZXRUb2tlbnMoKSxcbiAgICAgICAgICBjb250ZXh0ID0gdGhpcy5maWxlQ29udGV4dCwgLy8vXG4gICAgICAgICAgdG9rZW5zID0gc3RhdGVtZW50VG9rZW5zOyAvLy9cblxuICAgIGxvY2FsQ29udGV4dCA9IExvY2FsQ29udGV4dC5mcm9tQ29udGV4dEFuZFRva2Vucyhjb250ZXh0LCB0b2tlbnMpOyAgLy8vXG5cbiAgICBjb25zdCBzdWJwcm9vZkFzc2VydGlvbiA9IFN1YnByb29mQXNzZXJ0aW9uLmZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGxvY2FsQ29udGV4dCk7XG5cbiAgICBpZiAoc3VicHJvb2ZBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgIHN1YnByb29mVW5pZmllZCA9IHN1YnByb29mQXNzZXJ0aW9uLnVuaWZ5U3VicHJvb2Yoc3VicHJvb2YsIHN1YnN0aXR1dGlvbnMsIHRoaXMuZmlsZUNvbnRleHQsIGxvY2FsQ29udGV4dCk7XG4gICAgfVxuXG4gICAgaWYgKHN1YnByb29mVW5pZmllZCkge1xuICAgICAgbG9jYWxDb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdWJwcm9vZlN0cmluZ30nIHN1YnByb29mIHdpdGggdGhlIHByZW1pc2UncyAnJHtwcmVtaXNlU3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50LmApO1xuICAgIH1cblxuICAgIHJldHVybiBzdWJwcm9vZlVuaWZpZWQ7XG4gIH1cblxuICB1bmlmeVByb29mU3RlcChwcm9vZlN0ZXAsIHN1YnN0aXR1dGlvbnMsIGxvY2FsQ29udGV4dCkge1xuICAgIGxldCBwcm9vZlN0ZXBVbmlmaWVkID0gZmFsc2U7XG5cbiAgICBjb25zdCBzdWJwcm9vZiA9IHByb29mU3RlcC5nZXRTdWJwcm9vZigpLFxuICAgICAgICAgIHN0YXRlbWVudCA9IHByb29mU3RlcC5nZXRTdGF0ZW1lbnQoKTtcblxuICAgIHN1YnN0aXR1dGlvbnMuc25hcHNob3QoKTtcblxuICAgIGxldCBzdWJwcm9vZlVuaWZpZWQgPSBmYWxzZSxcbiAgICAgICAgc3RhdGVtZW50VW5pZmllZCA9IGZhbHNlO1xuXG4gICAgaWYgKGZhbHNlKSB7XG4gICAgICAvLy9cbiAgICB9IGVsc2UgaWYgKHN1YnByb29mICE9PSBudWxsKSB7XG4gICAgICBzdWJwcm9vZlVuaWZpZWQgPSB0aGlzLnVuaWZ5U3VicHJvb2Yoc3VicHJvb2YsIHN1YnN0aXR1dGlvbnMsIGxvY2FsQ29udGV4dCk7XG4gICAgfSBlbHNlIGlmIChzdGF0ZW1lbnQgIT09IG51bGwpIHtcbiAgICAgIHN0YXRlbWVudFVuaWZpZWQgPSB0aGlzLnVuaWZ5U3RhdGVtZW50KHN0YXRlbWVudCwgc3Vic3RpdHV0aW9ucywgbG9jYWxDb250ZXh0KTtcbiAgICB9XG5cbiAgICBpZiAoc3VicHJvb2ZVbmlmaWVkIHx8IHN0YXRlbWVudFVuaWZpZWQpIHtcbiAgICAgIHByb29mU3RlcFVuaWZpZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHByb29mU3RlcFVuaWZpZWQgP1xuICAgICAgc3Vic3RpdHV0aW9ucy5jb250aW51ZSgpIDpcbiAgICAgICAgc3Vic3RpdHV0aW9ucy5yb2xsYmFjayhsb2NhbENvbnRleHQpO1xuXG4gICAgcmV0dXJuIHByb29mU3RlcFVuaWZpZWQ7XG4gIH1cblxuICB1bmlmeVN0YXRlbWVudChzdGF0ZW1lbnQsIHN1YnN0aXR1dGlvbnMsIGxvY2FsQ29udGV4dCkge1xuICAgIGxldCBzdGF0ZW1lbnRVbmlmaWVkO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpLFxuICAgICAgICAgIHByZW1pc2VTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgY29uc3QgbG9jYWxDb250ZXh0QiA9IGxvY2FsQ29udGV4dDsgLy8vXG5cbiAgICBsb2NhbENvbnRleHQgPSBMb2NhbENvbnRleHQuZnJvbUZpbGVDb250ZXh0KHRoaXMuZmlsZUNvbnRleHQpO1xuXG4gICAgY29uc3QgbG9jYWxDb250ZXh0QSA9IGxvY2FsQ29udGV4dDsgLy8vXG5cbiAgICBsb2NhbENvbnRleHRCLnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHdpdGggdGhlICcke3ByZW1pc2VTdHJpbmd9JyBwcmVtaXNlLi4uYCk7XG5cbiAgICBzdGF0ZW1lbnRVbmlmaWVkID0gdGhpcy51bnF1YWxpZmllZFN0YXRlbWVudC51bmlmeVN0YXRlbWVudChzdGF0ZW1lbnQsIHN1YnN0aXR1dGlvbnMsIGxvY2FsQ29udGV4dEEsIGxvY2FsQ29udGV4dEIpO1xuXG4gICAgaWYgKHN0YXRlbWVudFVuaWZpZWQpIHtcbiAgICAgIGxvY2FsQ29udGV4dEIuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCB3aXRoIHRoZSAnJHtwcmVtaXNlU3RyaW5nfScgcHJlbWlzZS5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdGVtZW50VW5pZmllZDtcbiAgfVxuXG4gIHZlcmlmeShsb2NhbENvbnRleHQpIHtcbiAgICBsZXQgdmVyaWZpZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0IHByZW1pc2VTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGxvY2FsQ29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtwcmVtaXNlU3RyaW5nfScgcHJlbWlzZS4uLmApO1xuXG4gICAgY29uc3Qgc3RhdGVkID0gdHJ1ZSxcbiAgICAgICAgICBhc3NpZ25tZW50cyA9IFtdLFxuICAgICAgICAgIHVucXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWQgPSB0aGlzLnVucXVhbGlmaWVkU3RhdGVtZW50LnZlcmlmeShhc3NpZ25tZW50cywgc3RhdGVkLCBsb2NhbENvbnRleHQpO1xuXG4gICAgaWYgKHVucXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWQpIHtcbiAgICAgIGNvbnN0IGFzc2lnbm1lbnRzQXNzaWduZWQgPSBhc3NpZ25Bc3NpZ25tZW50cyhhc3NpZ25tZW50cywgbG9jYWxDb250ZXh0KTtcblxuICAgICAgaWYgKGFzc2lnbm1lbnRzQXNzaWduZWQpIHtcbiAgICAgICAgY29uc3QgeyBQcm9vZlN0ZXAgfSA9IHNoaW0sXG4gICAgICAgICAgICAgIHByb29mU3RlcCA9IFByb29mU3RlcC5mcm9tVW5xdWFsaWZpZWRTdGF0ZW1lbnQodGhpcy51bnF1YWxpZmllZFN0YXRlbWVudCk7XG5cbiAgICAgICAgbG9jYWxDb250ZXh0LmFkZFByb29mU3RlcChwcm9vZlN0ZXApO1xuXG4gICAgICAgIHZlcmlmaWVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodmVyaWZpZWQpIHtcbiAgICAgIGxvY2FsQ29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3ByZW1pc2VTdHJpbmd9JyBwcmVtaXNlLmApO1xuICAgIH1cblxuICAgIHJldHVybiB2ZXJpZmllZDtcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICBjb25zdCB1bnF1YWxpZmllZFN0YXRlbWVudEpTT04gPSB1bnF1YWxpZmllZFN0YXRlbWVudFRvVW5xdWFsaWZpZWRTdGF0ZW1lbnRKU09OKHRoaXMudW5xdWFsaWZpZWRTdGF0ZW1lbnQpLFxuICAgICAgICAgIHVucXVhbGlmaWVkU3RhdGVtZW50ID0gdW5xdWFsaWZpZWRTdGF0ZW1lbnRKU09OLCAgLy8vXG4gICAgICAgICAganNvbiA9IHtcbiAgICAgICAgICAgIHVucXVhbGlmaWVkU3RhdGVtZW50XG4gICAgICAgICAgfTtcblxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgc3RhdGljIGZyb21KU09OKGpzb24sIGZpbGVDb250ZXh0KSB7XG4gICAgY29uc3QgdW5xdWFsaWZpZWRTdGF0ZW1lbnQgPSB1bnF1YWxpZmllZFN0YXRlbWVudEZyb21KU09OKGpzb24sIGZpbGVDb250ZXh0KSxcbiAgICAgICAgICBwcmVtaXNlID0gbmV3IFByZW1pc2UoZmlsZUNvbnRleHQsIHVucXVhbGlmaWVkU3RhdGVtZW50KTtcblxuICAgIHJldHVybiBwcmVtaXNlO1xuICB9XG5cbiAgc3RhdGljIGZyb21QcmVtaXNlTm9kZShzdXBwb3NpdGlvbk5vZGUsIGZpbGVDb250ZXh0KSB7XG4gICAgY29uc3QgdW5xdWFsaWZpZWRTdGF0ZW1lbnROb2RlID0gdW5xdWFsaWZpZWRTdGF0ZW1lbnROb2RlUXVlcnkoc3VwcG9zaXRpb25Ob2RlKSxcbiAgICAgICAgICB1bnF1YWxpZmllZFN0YXRlbWVudCA9IFVucXVhbGlmaWVkU3RhdGVtZW50LmZyb21VbnF1YWxpZmllZFN0YXRlbWVudE5vZGUodW5xdWFsaWZpZWRTdGF0ZW1lbnROb2RlLCBmaWxlQ29udGV4dCksXG4gICAgICAgICAgcHJlbWlzZSA9IG5ldyBQcmVtaXNlKGZpbGVDb250ZXh0LCB1bnF1YWxpZmllZFN0YXRlbWVudCk7XG5cbiAgICByZXR1cm4gcHJlbWlzZVxuICB9XG59XG5cbk9iamVjdC5hc3NpZ24oc2hpbSwge1xuICBQcmVtaXNlXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgUHJlbWlzZTtcbiJdLCJuYW1lcyI6WyJ1bnF1YWxpZmllZFN0YXRlbWVudE5vZGVRdWVyeSIsIm5vZGVRdWVyeSIsIlByZW1pc2UiLCJmaWxlQ29udGV4dCIsInVucXVhbGlmaWVkU3RhdGVtZW50IiwiZ2V0RmlsZUNvbnRleHQiLCJnZXRVbnF1YWxpZmllZFN0YXRlbWVudCIsImdldFN0cmluZyIsImdldFN0YXRlbWVudCIsInVuaWZ5U3VicHJvb2YiLCJzdWJwcm9vZiIsInN1YnN0aXR1dGlvbnMiLCJsb2NhbENvbnRleHQiLCJzdWJwcm9vZlVuaWZpZWQiLCJwcmVtaXNlIiwic3VicHJvb2ZTdHJpbmciLCJwcmVtaXNlU3RhdGVtZW50IiwicHJlbWlzZVN0YXRlbWVudFN0cmluZyIsInRyYWNlIiwic3RhdGVtZW50Iiwic3RhdGVtZW50Tm9kZSIsImdldE5vZGUiLCJzdGF0ZW1lbnRUb2tlbnMiLCJnZXRUb2tlbnMiLCJjb250ZXh0IiwidG9rZW5zIiwiTG9jYWxDb250ZXh0IiwiZnJvbUNvbnRleHRBbmRUb2tlbnMiLCJzdWJwcm9vZkFzc2VydGlvbiIsIlN1YnByb29mQXNzZXJ0aW9uIiwiZnJvbVN0YXRlbWVudE5vZGUiLCJkZWJ1ZyIsInVuaWZ5UHJvb2ZTdGVwIiwicHJvb2ZTdGVwIiwicHJvb2ZTdGVwVW5pZmllZCIsImdldFN1YnByb29mIiwic25hcHNob3QiLCJzdGF0ZW1lbnRVbmlmaWVkIiwidW5pZnlTdGF0ZW1lbnQiLCJjb250aW51ZSIsInJvbGxiYWNrIiwic3RhdGVtZW50U3RyaW5nIiwicHJlbWlzZVN0cmluZyIsImxvY2FsQ29udGV4dEIiLCJmcm9tRmlsZUNvbnRleHQiLCJsb2NhbENvbnRleHRBIiwidmVyaWZ5IiwidmVyaWZpZWQiLCJzdGF0ZWQiLCJhc3NpZ25tZW50cyIsInVucXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWQiLCJhc3NpZ25tZW50c0Fzc2lnbmVkIiwiYXNzaWduQXNzaWdubWVudHMiLCJQcm9vZlN0ZXAiLCJzaGltIiwiZnJvbVVucXVhbGlmaWVkU3RhdGVtZW50IiwiYWRkUHJvb2ZTdGVwIiwidG9KU09OIiwidW5xdWFsaWZpZWRTdGF0ZW1lbnRKU09OIiwidW5xdWFsaWZpZWRTdGF0ZW1lbnRUb1VucXVhbGlmaWVkU3RhdGVtZW50SlNPTiIsImpzb24iLCJmcm9tSlNPTiIsInVucXVhbGlmaWVkU3RhdGVtZW50RnJvbUpTT04iLCJmcm9tUHJlbWlzZU5vZGUiLCJzdXBwb3NpdGlvbk5vZGUiLCJ1bnF1YWxpZmllZFN0YXRlbWVudE5vZGUiLCJVbnF1YWxpZmllZFN0YXRlbWVudCIsImZyb21VbnF1YWxpZmllZFN0YXRlbWVudE5vZGUiLCJPYmplY3QiLCJhc3NpZ24iXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWdMQTs7O2VBQUE7OzsyREE5S2lCOzREQUNROytEQUNLO2tFQUNHO3FCQUVQOzJCQUNRO29CQUMyRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUU3RixJQUFNQSxnQ0FBZ0NDLElBQUFBLGdCQUFTLEVBQUM7QUFFaEQsSUFBQSxBQUFNQyx3QkFBTjthQUFNQSxRQUNRQyxXQUFXLEVBQUVDLG9CQUFvQjtnQ0FEekNGO1FBRUYsSUFBSSxDQUFDQyxXQUFXLEdBQUdBO1FBQ25CLElBQUksQ0FBQ0Msb0JBQW9CLEdBQUdBOztrQkFIMUJGOztZQU1KRyxLQUFBQTttQkFBQUEsU0FBQUE7Z0JBQ0UsT0FBTyxJQUFJLENBQUNGLFdBQVc7WUFDekI7OztZQUVBRyxLQUFBQTttQkFB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