occam-verify-cli 1.0.956 → 1.0.973

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 (81) hide show
  1. package/lib/context/bounded.js +11 -7
  2. package/lib/context.js +17 -5
  3. package/lib/element/assertion/signature.js +17 -19
  4. package/lib/element/assertion/subproof.js +36 -39
  5. package/lib/element/assertion/type.js +20 -1
  6. package/lib/element/assumption/metaLevel.js +18 -17
  7. package/lib/element/assumption.js +52 -3
  8. package/lib/element/combinator.js +10 -12
  9. package/lib/element/conclusion.js +33 -33
  10. package/lib/element/constructor.js +7 -11
  11. package/lib/element/deduction.js +33 -33
  12. package/lib/element/equivalence.js +11 -7
  13. package/lib/element/hypothesis.js +45 -19
  14. package/lib/element/judgement.js +1 -1
  15. package/lib/element/label.js +9 -11
  16. package/lib/element/proofAssertion/premise.js +98 -87
  17. package/lib/element/proofAssertion/step.js +27 -27
  18. package/lib/element/proofAssertion/supposition.js +99 -88
  19. package/lib/element/proofAssertion.js +3 -3
  20. package/lib/element/reference.js +30 -38
  21. package/lib/element/signature.js +38 -47
  22. package/lib/element/statement.js +18 -58
  23. package/lib/element/substitution/frame.js +34 -42
  24. package/lib/element/substitution/reference.js +12 -13
  25. package/lib/element/substitution/statement.js +26 -31
  26. package/lib/element/substitution/term.js +32 -37
  27. package/lib/element/term.js +2 -2
  28. package/lib/element/topLevelAssertion/axiom.js +33 -34
  29. package/lib/element/topLevelAssertion.js +30 -7
  30. package/lib/element/topLevelMetaAssertion.js +2 -2
  31. package/lib/process/discharge.js +38 -0
  32. package/lib/process/unification.js +228 -0
  33. package/lib/process/unify.js +9 -5
  34. package/lib/process/validation.js +291 -0
  35. package/lib/utilities/context.js +69 -105
  36. package/lib/utilities/element.js +2 -4
  37. package/lib/utilities/string.js +4 -4
  38. package/package.json +1 -1
  39. package/src/context/bounded.js +19 -7
  40. package/src/context.js +26 -6
  41. package/src/element/assertion/signature.js +21 -26
  42. package/src/element/assertion/subproof.js +43 -45
  43. package/src/element/assertion/type.js +30 -1
  44. package/src/element/assumption/metaLevel.js +26 -22
  45. package/src/element/assumption.js +80 -2
  46. package/src/element/combinator.js +11 -14
  47. package/src/element/conclusion.js +38 -37
  48. package/src/element/constructor.js +8 -13
  49. package/src/element/deduction.js +38 -37
  50. package/src/element/equivalence.js +17 -13
  51. package/src/element/hypothesis.js +59 -19
  52. package/src/element/judgement.js +1 -1
  53. package/src/element/label.js +10 -12
  54. package/src/element/proofAssertion/premise.js +123 -107
  55. package/src/element/proofAssertion/step.js +29 -29
  56. package/src/element/proofAssertion/supposition.js +124 -108
  57. package/src/element/proofAssertion.js +2 -2
  58. package/src/element/reference.js +36 -47
  59. package/src/element/signature.js +42 -53
  60. package/src/element/statement.js +18 -89
  61. package/src/element/substitution/frame.js +45 -58
  62. package/src/element/substitution/reference.js +13 -16
  63. package/src/element/substitution/statement.js +27 -34
  64. package/src/element/substitution/term.js +37 -46
  65. package/src/element/term.js +1 -1
  66. package/src/element/topLevelAssertion/axiom.js +43 -45
  67. package/src/element/topLevelAssertion.js +42 -6
  68. package/src/element/topLevelMetaAssertion.js +2 -2
  69. package/src/process/discharge.js +33 -0
  70. package/src/{utilities → process}/unification.js +21 -27
  71. package/src/process/unify.js +9 -5
  72. package/src/{utilities → process}/validation.js +2 -2
  73. package/src/utilities/context.js +77 -128
  74. package/src/utilities/element.js +2 -5
  75. package/src/utilities/string.js +6 -6
  76. package/lib/context/ephemeral.js +0 -28
  77. package/lib/context/synoptic.js +0 -255
  78. package/lib/utilities/unification.js +0 -233
  79. package/lib/utilities/validation.js +0 -291
  80. package/src/context/ephemeral.js +0 -17
  81. package/src/context/synoptic.js +0 -361
@@ -14,7 +14,7 @@ const _context = require("../utilities/context");
14
14
  const _breakPoint = require("../utilities/breakPoint");
15
15
  const _string = require("../utilities/string");
16
16
  const _json = require("../utilities/json");
17
- const { reverse } = _necessary.arrayUtilities, { asyncExtract, asyncForwardsEvery, asyncBackwardsEvery } = _occamlanguages.asynchronousUtilities;
17
+ const { reverse } = _necessary.arrayUtilities, { asyncEvery, asyncExtract, asyncForwardsEvery, asyncBackwardsEvery } = _occamlanguages.asynchronousUtilities;
18
18
  class TopLevelAssertion extends _occamlanguages.Element {
19
19
  constructor(context, string, node, breakPoint, labels, suppositions, deduction, proof, signature, hypotheses){
20
20
  super(context, string, node, breakPoint);
@@ -175,6 +175,26 @@ class TopLevelAssertion extends _occamlanguages.Element {
175
175
  }
176
176
  return suppositionsVerify;
177
177
  }
178
+ async dischargeHypothesis(hypothesis, context) {
179
+ let hypothesisDischarged;
180
+ await this.break(context);
181
+ const hypothesisString = hypothesis.getString(), topLevelAssertionString = this.getString(); ///
182
+ context.trace(`Discharding the '${topLevelAssertionString}' top level assertion's '${hypothesisString}' hypothesis... `);
183
+ hypothesisDischarged = hypothesis.discharge(context);
184
+ if (hypothesisDischarged) {
185
+ context.trace(`...discharged the '${topLevelAssertionString}' top level assertion's '${hypothesisString}' hypothesis. `);
186
+ }
187
+ return hypothesisDischarged;
188
+ }
189
+ async dischargeHypotheses(context) {
190
+ const hypotheses = this.getHypotheses(), hypothesesDischarged = await asyncEvery(hypotheses, async (hypothesis)=>{
191
+ const hypothesisDischarged = await this.dischargeHypothesis(hypothesis, context);
192
+ if (hypothesisDischarged) {
193
+ return true;
194
+ }
195
+ });
196
+ return hypothesesDischarged;
197
+ }
178
198
  async unifyStepWithDeduction(step, context) {
179
199
  let stepUnifiesWithDeduction = false;
180
200
  await this.break(context);
@@ -193,11 +213,14 @@ class TopLevelAssertion extends _occamlanguages.Element {
193
213
  let stepAndSubproofOrProofAssertionsUnify = false;
194
214
  const stepUnifiesWithDeduction = await this.unifyStepWithDeduction(step, context);
195
215
  if (stepUnifiesWithDeduction) {
196
- const subproofOrProofAssertionsUnifiesWithSuppositions = await this.unifySubproofOrProofAssertionsWithSuppositions(subproofOrProofAssertions, context);
197
- if (subproofOrProofAssertionsUnifiesWithSuppositions) {
198
- const derivedSubstitutionsResolved = context.areDerivedSubstitutionsResolved();
199
- if (derivedSubstitutionsResolved) {
200
- stepAndSubproofOrProofAssertionsUnify = true;
216
+ const hypothesesDischarged = await this.dischargeHypotheses(context);
217
+ if (hypothesesDischarged) {
218
+ const subproofOrProofAssertionsUnifiesWithSuppositions = await this.unifySubproofOrProofAssertionsWithSuppositions(subproofOrProofAssertions, context);
219
+ if (subproofOrProofAssertionsUnifiesWithSuppositions) {
220
+ const derivedSubstitutionsResolved = context.areDerivedSubstitutionsResolved();
221
+ if (derivedSubstitutionsResolved) {
222
+ stepAndSubproofOrProofAssertionsUnify = true;
223
+ }
201
224
  }
202
225
  }
203
226
  }
@@ -260,4 +283,4 @@ class TopLevelAssertion extends _occamlanguages.Element {
260
283
  }
261
284
  }
262
285
 
263
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L3RvcExldmVsQXNzZXJ0aW9uLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcbmltcG9ydCB7IEVsZW1lbnQsIGFzeW5jaHJvbm91c1V0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IHsgZW5jbG9zZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGV4dFwiO1xuaW1wb3J0IHsgYnJlYWtQb2ludEZyb21KU09OLCBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiB9IGZyb20gXCIuLi91dGlsaXRpZXMvYnJlYWtQb2ludFwiO1xuaW1wb3J0IHsgdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxzU2lnbmF0dXJlU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9zdHJpbmdcIjtcbmltcG9ydCB7IGxhYmVsc0Zyb21KU09OLFxuICAgICAgICAgZGVkdWN0aW9uRnJvbUpTT04sXG4gICAgICAgICBzaWduYXR1cmVGcm9tSlNPTixcbiAgICAgICAgIGxhYmVsc1RvTGFiZWxzSlNPTixcbiAgICAgICAgIGh5cG90aGVzZXNGcm9tSlNPTixcbiAgICAgICAgIHN1cHBvc2l0aW9uc0Zyb21KU09OLFxuICAgICAgICAgZGVkdWN0aW9uVG9EZWR1Y3Rpb25KU09OLFxuICAgICAgICAgc2lnbmF0dXJlVG9TaWduYXR1cmVKU09OLFxuICAgICAgICAgaHlwb3RoZXNlc1RvSHlwb3RoZXNlc0pTT04sXG4gICAgICAgICBzdXBwb3NpdGlvbnNUb1N1cHBvc2l0aW9uc0pTT04gfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2pzb25cIjtcblxuY29uc3QgeyByZXZlcnNlIH0gPSBhcnJheVV0aWxpdGllcyxcbiAgICAgIHsgYXN5bmNFeHRyYWN0LCBhc3luY0ZvcndhcmRzRXZlcnksIGFzeW5jQmFja3dhcmRzRXZlcnkgfSA9IGFzeW5jaHJvbm91c1V0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVG9wTGV2ZWxBc3NlcnRpb24gZXh0ZW5kcyBFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBsYWJlbHMsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uLCBwcm9vZiwgc2lnbmF0dXJlLCBoeXBvdGhlc2VzKSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICAgIHRoaXMubGFiZWxzID0gbGFiZWxzO1xuICAgIHRoaXMuc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zO1xuICAgIHRoaXMuZGVkdWN0aW9uID0gZGVkdWN0aW9uO1xuICAgIHRoaXMucHJvb2YgPSBwcm9vZjtcbiAgICB0aGlzLnNpZ25hdHVyZSA9IHNpZ25hdHVyZTtcbiAgICB0aGlzLmh5cG90aGVzZXMgPSBoeXBvdGhlc2VzO1xuICB9XG5cbiAgZ2V0TGFiZWxzKCkge1xuICAgIHJldHVybiB0aGlzLmxhYmVscztcbiAgfVxuXG4gIGdldFN1cHBvc2l0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5zdXBwb3NpdGlvbnM7XG4gIH1cblxuICBnZXREZWR1Y3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZGVkdWN0aW9uO1xuICB9XG5cbiAgZ2V0UHJvb2YoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvb2Y7XG4gIH1cblxuICBnZXRTaWduYXR1cmUoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2lnbmF0dXJlO1xuICB9XG5cbiAgZ2V0SHlwb3RoZXNlcygpIHtcbiAgICByZXR1cm4gdGhpcy5oeXBvdGhlc2VzO1xuICB9XG5cbiAgc2V0SHlwb3RoZXNlcyhoeXBvdGhlc2VzKSB7XG4gICAgdGhpcy5oeXBvdGhlc2VzID0gaHlwb3RoZXNlcztcbiAgfVxuXG4gIGdldFN1cHBvc2l0aW9uKGluZGV4KSB7XG4gICAgY29uc3Qgc3VwcG9zaXRpb24gPSB0aGlzLnN1cHBvc2l0aW9uc1tpbmRleF0gfHwgbnVsbDtcblxuICAgIHJldHVybiBzdXBwb3NpdGlvbjtcbiAgfVxuXG4gIGlzU2F0aXNmaWFibGUoKSB7XG4gICAgY29uc3Qgc2F0aXNmaWFibGUgPSBmYWxzZTtcblxuICAgIHJldHVybiBzYXRpc2ZpYWJsZTtcbiAgfVxuXG4gIGlzSHlwb3RoZXRpY2FsKCkge1xuICAgIGNvbnN0IGh5cG90aGVzZXNMZW5ndGggPSB0aGlzLmh5cG90aGVzZXMubGVuZ3RoLFxuICAgICAgICAgIGh5cG90aGV0aWNhbCA9IChoeXBvdGhlc2VzTGVuZ3RoID4gMCk7XG5cbiAgICByZXR1cm4gaHlwb3RoZXRpY2FsO1xuICB9XG5cbiAgaXNVbmNvbmRpdGlvbmFsKCkge1xuICAgIGNvbnN0IHN1cHBvc2l0aW9uc0xlbmd0aCA9IHRoaXMuc3VwcG9zaXRpb25zLmxlbmd0aCxcbiAgICAgICAgICB1bmNvbmRpdGlvbmFsID0gKHN1cHBvc2l0aW9uc0xlbmd0aCA9PT0gMCk7XG5cbiAgICByZXR1cm4gdW5jb25kaXRpb25hbDtcbiAgfVxuXG4gIG1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgPSB0aGlzLmxhYmVscy5zb21lKChsYWJlbCkgPT4ge1xuICAgICAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgPSBsYWJlbC5tYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgIGlmIChtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcztcbiAgfVxuXG4gIGFzeW5jIHZlcmlmeShjb250ZXh0KSB7XG4gICAgbGV0IHZlcmlmaWVzID0gZmFsc2U7XG5cbiAgICBjb25zdCB0b3BMZXZlbEFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHt0b3BMZXZlbEFzc2VydGlvblN0cmluZ30nIHRvcCBsZXZlbCBhc3NlcnRpb24uLi5gKTtcblxuICAgIGF3YWl0IGVuY2xvc2UoYXN5bmMgKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IGxhYmVsc1ZlcmlmeSA9IHRoaXMudmVyaWZ5TGFiZWxzKGNvbnRleHQpO1xuXG4gICAgICBpZiAobGFiZWxzVmVyaWZ5KSB7XG4gICAgICAgIGNvbnN0IHN1cHBvc2l0aW9uc1ZlcmlmeSA9IGF3YWl0IHRoaXMudmVyaWZ5U3VwcG9zaXRpb25zKGNvbnRleHQpO1xuXG4gICAgICAgIGlmIChzdXBwb3NpdGlvbnNWZXJpZnkpIHtcbiAgICAgICAgICBjb25zdCBkZWR1Y3Rpb25WZXJpZmllcyA9IGF3YWl0IHRoaXMudmVyaWZ5RGVkdWN0aW9uKGNvbnRleHQpO1xuXG4gICAgICAgICAgaWYgKGRlZHVjdGlvblZlcmlmaWVzKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9vZlZlcmlmaWVzID0gYXdhaXQgdGhpcy52ZXJpZnlQcm9vZihjb250ZXh0KTtcblxuICAgICAgICAgICAgaWYgKHByb29mVmVyaWZpZXMpIHtcbiAgICAgICAgICAgICAgdmVyaWZpZXMgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIGNvbnRleHQpO1xuXG4gICAgaWYgKHZlcmlmaWVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7dG9wTGV2ZWxBc3NlcnRpb25TdHJpbmd9JyB0b3AgbGV2ZWwgYXNzZXJ0aW9uLmApO1xuICAgIH1cblxuICAgIHJldHVybiB2ZXJpZmllcztcbiAgfVxuXG4gIHZlcmlmeUxhYmVscyhjb250ZXh0KSB7XG4gICAgbGV0IGxhYmVsc1ZlcmlmeTtcblxuICAgIGNvbnN0IHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHt0b3BMZXZlbEFzc2VydGlvblN0cmluZ30nIHRvcCBsZXZlbCBhc3NlcnRpb24ncyBsYWJlbHMuLi5gKTtcblxuICAgIGxhYmVsc1ZlcmlmeSA9IHRoaXMubGFiZWxzLmV2ZXJ5KChsYWJlbCkgPT4ge1xuICAgICAgY29uc3QgbGFiZWxWZXJpZmllcyA9IHRoaXMudmVyaWZ5TGFiZWwobGFiZWwsIGNvbnRleHQpO1xuXG4gICAgICBpZiAobGFiZWxWZXJpZmllcykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChsYWJlbHNWZXJpZnkpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHt0b3BMZXZlbEFzc2VydGlvblN0cmluZ30nIHRvcCBsZXZlbCBhc3NlcnRpb24ncyBsYWJlbHMuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxhYmVsc1ZlcmlmeTtcbiAgfVxuXG4gIHZlcmlmeUxhYmVsKGxhYmVsLCBjb250ZXh0KSB7XG4gICAgbGV0IGxhYmVsVmVyaWZpZXM7XG5cbiAgICBjb25zdCBsYWJlbFN0cmluZyA9IGxhYmVsLmdldFN0cmluZygpLFxuICAgICAgICAgIHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3RvcExldmVsQXNzZXJ0aW9uU3RyaW5nfScgdG9wIGxldmVsIGFzc2VydGlvbidzICcke2xhYmVsU3RyaW5nfScgbGFiZWwuLi5gKTtcblxuICAgIGxhYmVsVmVyaWZpZXMgPSBsYWJlbC52ZXJpZnkoKTtcblxuICAgIGlmIChsYWJlbFZlcmlmaWVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7dG9wTGV2ZWxBc3NlcnRpb25TdHJpbmd9JyB0b3AgbGV2ZWwgYXNzZXJ0aW9uJ3MgJyR7bGFiZWxTdHJpbmd9JyBsYWJlbC5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGFiZWxWZXJpZmllcztcbiAgfVxuXG4gIGFzeW5jIHZlcmlmeVByb29mKGNvbnRleHQpIHtcbiAgICBsZXQgcHJvb2ZWZXJpZmllcztcblxuICAgIGlmICh0aGlzLnByb29mID09PSBudWxsKSB7XG4gICAgICBwcm9vZlZlcmlmaWVzID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7dG9wTGV2ZWxBc3NlcnRpb25TdHJpbmd9JyB0b3AgbGV2ZWwgYXNzZXJ0aW9uJ3MgcHJvb2YuLi5gKTtcblxuICAgICAgY29uc3Qgc3RhdGVtZW50ID0gdGhpcy5kZWR1Y3Rpb24uZ2V0U3RhdGVtZW50KCk7XG5cbiAgICAgIHByb29mVmVyaWZpZXMgPSBhd2FpdCB0aGlzLnByb29mLnZlcmlmeShzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gICAgICBpZiAocHJvb2ZWZXJpZmllcykge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7dG9wTGV2ZWxBc3NlcnRpb25TdHJpbmd9JyB0b3AgbGV2ZWwgYXNzZXJ0aW9uJ3MgcHJvb2YuYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb29mVmVyaWZpZXM7XG4gIH1cblxuICBhc3luYyB2ZXJpZnlEZWR1Y3Rpb24oY29udGV4dCkge1xuICAgIGxldCBkZWR1Y3Rpb25WZXJpZmllcztcblxuICAgIGNvbnN0IGRlZHVjdGlvblN0cmluZyA9IHRoaXMuZGVkdWN0aW9uLmdldFN0cmluZygpLFxuICAgICAgICAgIHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3RvcExldmVsQXNzZXJ0aW9uU3RyaW5nfScgdG9wIGxldmVsIGFzc2VydGlvbidzICcke2RlZHVjdGlvblN0cmluZ30nIGRlZHVjdGlvbi4uLmApO1xuXG4gICAgZGVkdWN0aW9uVmVyaWZpZXMgPSBhd2FpdCB0aGlzLmRlZHVjdGlvbi52ZXJpZnkoY29udGV4dCk7XG5cbiAgICBpZiAoZGVkdWN0aW9uVmVyaWZpZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHt0b3BMZXZlbEFzc2VydGlvblN0cmluZ30nIHRvcCBsZXZlbCBhc3NlcnRpb24ncyAnJHtkZWR1Y3Rpb25TdHJpbmd9JyBkZWR1Y3Rpb24uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlZHVjdGlvblZlcmlmaWVzO1xuICB9XG5cbiAgYXN5bmMgdmVyaWZ5U3VwcG9zaXRpb24oc3VwcG9zaXRpb24sIGNvbnRleHQpIHtcbiAgICBsZXQgc3VwcG9zaXRpb25WZXJpZmllcztcblxuICAgIGNvbnN0IHN1cHBvc2l0aW9uU3RyaW5nID0gc3VwcG9zaXRpb24uZ2V0U3RyaW5nKCksXG4gICAgICAgICAgdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3RvcExldmVsQXNzZXJ0aW9uU3RyaW5nfScgdG9wIGxldmVsIGFzc2VydGlvbidzICcke3N1cHBvc2l0aW9uU3RyaW5nfScgc3VwcG9zaXRpb24uLi5gKTtcblxuICAgIHN1cHBvc2l0aW9uVmVyaWZpZXMgPSBhd2FpdCBzdXBwb3NpdGlvbi52ZXJpZnkoY29udGV4dClcblxuICAgIGlmIChzdXBwb3NpdGlvblZlcmlmaWVzKSB7XG4gICAgICBjb25zdCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24gPSBzdXBwb3NpdGlvbjsgIC8vLy9cblxuICAgICAgY29udGV4dC5hc3NpZ25Bc3NpZ25tZW50cygpO1xuXG4gICAgICBjb250ZXh0LmFkZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbihzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24pO1xuICAgIH1cblxuICAgIGlmIChzdXBwb3NpdGlvblZlcmlmaWVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7dG9wTGV2ZWxBc3NlcnRpb25TdHJpbmd9JyB0b3AgbGV2ZWwgYXNzZXJ0aW9uJ3MgJyR7c3VwcG9zaXRpb25TdHJpbmd9JyBzdXBwb3NpdGlvbi5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3VwcG9zaXRpb25WZXJpZmllcztcbiAgfVxuXG4gIGFzeW5jIHZlcmlmeVN1cHBvc2l0aW9ucyhjb250ZXh0KSB7XG4gICAgbGV0IHN1cHBvc2l0aW9uc1ZlcmlmeTtcblxuICAgIGNvbnN0IHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHt0b3BMZXZlbEFzc2VydGlvblN0cmluZ30nIHRvcCBsZXZlbCBhc3NlcnRpb24ncyBzdXBwb3NpdGlvbnMuLi5gKTtcblxuICAgIHN1cHBvc2l0aW9uc1ZlcmlmeSA9IGF3YWl0IGFzeW5jRm9yd2FyZHNFdmVyeSh0aGlzLnN1cHBvc2l0aW9ucywgYXN5bmMgKHN1cHBvc2l0aW9uKSA9PiB7XG4gICAgICBjb25zdCBzdXBwb3NpdGlvblZlcmlmaWVzID0gYXdhaXQgdGhpcy52ZXJpZnlTdXBwb3NpdGlvbihzdXBwb3NpdGlvbiwgY29udGV4dCk7XG5cbiAgICAgIGlmIChzdXBwb3NpdGlvblZlcmlmaWVzKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHN1cHBvc2l0aW9uc1ZlcmlmeSkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3RvcExldmVsQXNzZXJ0aW9uU3RyaW5nfScgdG9wIGxldmVsIGFzc2VydGlvbidzIHN1cHBvc2l0aW9ucy5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3VwcG9zaXRpb25zVmVyaWZ5O1xuICB9XG5cbiAgYXN5bmMgdW5pZnlTdGVwV2l0aERlZHVjdGlvbihzdGVwLCBjb250ZXh0KSB7XG4gICAgbGV0IHN0ZXBVbmlmaWVzV2l0aERlZHVjdGlvbiA9IGZhbHNlO1xuXG4gICAgYXdhaXQgdGhpcy5icmVhayhjb250ZXh0KTtcblxuICAgIGNvbnN0IHN0ZXBTdHJpbmcgPSBzdGVwLmdldFN0cmluZygpLFxuICAgICAgICAgIHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgd2l0aCB0aGUgJyR7dG9wTGV2ZWxBc3NlcnRpb25TdHJpbmd9JyB0b3AgbGV2ZWwgYXNzZXJ0aW9uJ3MgZGVkdWN0aW9uLi4uYCk7XG5cbiAgICBjb25zdCBzdGVwVW5pZmllcyA9IHRoaXMuZGVkdWN0aW9uLnVuaWZ5U3RlcChzdGVwLCBjb250ZXh0KTtcblxuICAgIGlmIChzdGVwVW5pZmllcykge1xuICAgICAgc3RlcFVuaWZpZXNXaXRoRGVkdWN0aW9uID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoc3RlcFVuaWZpZXNXaXRoRGVkdWN0aW9uKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCB3aXRoIHRoZSAnJHt0b3BMZXZlbEFzc2VydGlvblN0cmluZ30nIHRvcCBsZXZlbCBhc3NlcnRpb24ncyBkZWR1Y3Rpb24uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0ZXBVbmlmaWVzV2l0aERlZHVjdGlvbjtcbiAgfVxuXG4gIGFzeW5jIHVuaWZ5U3RlcEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMoc3RlcCwgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucywgY29udGV4dCkge1xuICAgIGxldCBzdGVwQW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZ5ID0gZmFsc2U7XG5cbiAgICBjb25zdCBzdGVwVW5pZmllc1dpdGhEZWR1Y3Rpb24gPSBhd2FpdCB0aGlzLnVuaWZ5U3RlcFdpdGhEZWR1Y3Rpb24oc3RlcCwgY29udGV4dCk7XG5cbiAgICBpZiAoc3RlcFVuaWZpZXNXaXRoRGVkdWN0aW9uKSB7XG4gICAgICBjb25zdCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZmllc1dpdGhTdXBwb3NpdGlvbnMgPSBhd2FpdCB0aGlzLnVuaWZ5U3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1dpdGhTdXBwb3NpdGlvbnMoc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucywgY29udGV4dCk7XG5cbiAgICAgIGlmIChzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZmllc1dpdGhTdXBwb3NpdGlvbnMpIHtcbiAgICAgICAgY29uc3QgZGVyaXZlZFN1YnN0aXR1dGlvbnNSZXNvbHZlZCA9IGNvbnRleHQuYXJlRGVyaXZlZFN1YnN0aXR1dGlvbnNSZXNvbHZlZCgpO1xuXG4gICAgICAgIGlmIChkZXJpdmVkU3Vic3RpdHV0aW9uc1Jlc29sdmVkKSB7XG4gICAgICAgICAgc3RlcEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmeSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc3RlcEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmeTtcbiAgfVxuXG4gIGFzeW5jIHVuaWZ5U3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1dpdGhTdXBwb3NpdGlvbihzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zLCBzdXBwb3NpdGlvbiwgY29udGV4dCkge1xuICAgIGxldCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZmllc1dpdGhTdXBwb3NpdGlvbiA9IGZhbHNlO1xuXG4gICAgYXdhaXQgdGhpcy5icmVhayhjb250ZXh0KTtcblxuICAgIGlmICghc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZpZXNXaXRoU3VwcG9zaXRpb24pIHtcbiAgICAgIGNvbnN0IHN1YnByb29mT3JQcm9vZkFzc2VydGlvbiA9IGF3YWl0IGFzeW5jRXh0cmFjdChzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zLCBhc3luYyAoc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IHN1YnByb29mT3JQcm9vZkFzc2VydGlvblVuaWZpZXMgPSBhd2FpdCBzdXBwb3NpdGlvbi51bmlmeVN1YnByb29mT3JQcm9vZkFzc2VydGlvbihzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24sIGNvbnRleHQpO1xuXG4gICAgICAgIGlmIChzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25VbmlmaWVzKSB7XG4gICAgICAgICAgY29udGV4dC5yZXNvbHZlRGVyaXZlZFN1YnN0aXR1dGlvbnMoKTtcblxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KSB8fCBudWxsO1xuXG4gICAgICBpZiAoc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICAgIHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmaWVzV2l0aFN1cHBvc2l0aW9uID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmaWVzV2l0aFN1cHBvc2l0aW9uKSB7XG4gICAgICBjb25zdCBzdXBwb3NpdGlvblVuaWZpZXNJbmRlcGVuZGVudGx5ID0gYXdhaXQgc3VwcG9zaXRpb24udW5pZnlJbmRlcGVuZGVudGx5KGNvbnRleHQpO1xuXG4gICAgICBpZiAoc3VwcG9zaXRpb25VbmlmaWVzSW5kZXBlbmRlbnRseSkge1xuICAgICAgICBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZmllc1dpdGhTdXBwb3NpdGlvbiA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmaWVzV2l0aFN1cHBvc2l0aW9uO1xuICB9XG5cbiAgYXN5bmMgdW5pZnlTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zV2l0aFN1cHBvc2l0aW9ucyhzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zLCBjb250ZXh0KSB7XG4gICAgbGV0IHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmaWVzV2l0aFN1cHBvc2l0aW9ucztcblxuICAgIHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMgPSByZXZlcnNlKHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMpOyAvLy9cblxuICAgIHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmaWVzV2l0aFN1cHBvc2l0aW9ucyA9IGF3YWl0IGFzeW5jQmFja3dhcmRzRXZlcnkodGhpcy5zdXBwb3NpdGlvbnMsIGFzeW5jIChzdXBwb3NpdGlvbikgPT4ge1xuICAgICAgY29uc3Qgc3RlcFVuaWZpZXNXaXRoU3VwcG9zaXRpb24gPSBhd2FpdCB0aGlzLnVuaWZ5U3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1dpdGhTdXBwb3NpdGlvbihzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zLCBzdXBwb3NpdGlvbiwgY29udGV4dCk7XG5cbiAgICAgIGlmIChzdGVwVW5pZmllc1dpdGhTdXBwb3NpdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZmllc1dpdGhTdXBwb3NpdGlvbnM7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgY29uc3QgbGFiZWxzSlNPTiA9IGxhYmVsc1RvTGFiZWxzSlNPTih0aGlzLmxhYmVscyksXG4gICAgICAgICAgZGVkdWN0aW9uSlNPTiA9IGRlZHVjdGlvblRvRGVkdWN0aW9uSlNPTih0aGlzLmRlZHVjdGlvbiksXG4gICAgICAgICAgc3VwcG9zaXRpb25zSlNPTiA9IHN1cHBvc2l0aW9uc1RvU3VwcG9zaXRpb25zSlNPTih0aGlzLnN1cHBvc2l0aW9ucyksXG4gICAgICAgICAgc2lnbmF0dXJlSlNPTiA9IHNpZ25hdHVyZVRvU2lnbmF0dXJlSlNPTih0aGlzLnNpZ25hdHVyZSksXG4gICAgICAgICAgaHlwb3RoZXNlc0pTT04gPSBoeXBvdGhlc2VzVG9IeXBvdGhlc2VzSlNPTih0aGlzLmh5cG90aGVzZXMpLFxuICAgICAgICAgIHN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7XG5cbiAgICBsZXQgYnJlYWtQb2ludDtcblxuICAgIGJyZWFrUG9pbnQgPSB0aGlzLmdldEJyZWFrUG9pbnQoKTtcblxuICAgIGNvbnN0IGJyZWFrUG9pbnRKU09OID0gYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04oYnJlYWtQb2ludCk7XG5cbiAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEpTT047ICAvLy9cblxuICAgIGNvbnN0IGxhYmVscyA9IGxhYmVsc0pTT04sICAvLy9cbiAgICAgICAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25KU09OLCAgLy8vXG4gICAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zSlNPTiwgIC8vL1xuICAgICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUpTT04sICAvLy9cbiAgICAgICAgICBoeXBvdGhlc2VzID0gaHlwb3RoZXNlc0pTT04sICAvLy9cbiAgICAgICAgICBqc29uID0ge1xuICAgICAgICAgICAgc3RyaW5nLFxuICAgICAgICAgICAgYnJlYWtQb2ludCxcbiAgICAgICAgICAgIGxhYmVscyxcbiAgICAgICAgICAgIGRlZHVjdGlvbixcbiAgICAgICAgICAgIHN1cHBvc2l0aW9ucyxcbiAgICAgICAgICAgIHNpZ25hdHVyZSxcbiAgICAgICAgICAgIGh5cG90aGVzZXNcbiAgICAgICAgICB9O1xuXG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBzdGF0aWMgZnJvbUpTT04oQ2xhc3MsIGpzb24sIGNvbnRleHQpIHtcbiAgICBjb25zdCBsYWJlbHMgPSBsYWJlbHNGcm9tSlNPTihqc29uLCBjb250ZXh0KSxcbiAgICAgICAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25Gcm9tSlNPTihqc29uLCBjb250ZXh0KSxcbiAgICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tSlNPTihqc29uLCBjb250ZXh0KSxcbiAgICAgICAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVGcm9tSlNPTihqc29uLCBjb250ZXh0KSxcbiAgICAgICAgICBoeXBvdGhlc2VzID0gaHlwb3RoZXNlc0Zyb21KU09OKGpzb24sIGNvbnRleHQpLFxuICAgICAgICAgIHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nID0gdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxzU2lnbmF0dXJlU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc2lnbmF0dXJlLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiksXG4gICAgICAgICAgc3RyaW5nID0gdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmcsIC8vL1xuICAgICAgICAgIG5vZGUgPSBudWxsLFxuICAgICAgICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50RnJvbUpTT04oanNvbiksXG4gICAgICAgICAgcHJvb2YgPSBudWxsLFxuICAgICAgICAgIHRvcExldmVsQXNzZXJ0aW9uID0gbmV3IENsYXNzKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIHNpZ25hdHVyZSwgaHlwb3RoZXNlcyk7XG5cbiAgICByZXR1cm4gdG9wTGV2ZWxBc3NlcnRpb247XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJUb3BMZXZlbEFzc2VydGlvbiIsInJldmVyc2UiLCJhcnJheVV0aWxpdGllcyIsImFzeW5jRXh0cmFjdCIsImFzeW5jRm9yd2FyZHNFdmVyeSIsImFzeW5jQmFja3dhcmRzRXZlcnkiLCJhc3luY2hyb25vdXNVdGlsaXRpZXMiLCJFbGVtZW50IiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50IiwibGFiZWxzIiwic3VwcG9zaXRpb25zIiwiZGVkdWN0aW9uIiwicHJvb2YiLCJzaWduYXR1cmUiLCJoeXBvdGhlc2VzIiwiZ2V0TGFiZWxzIiwiZ2V0U3VwcG9zaXRpb25zIiwiZ2V0RGVkdWN0aW9uIiwiZ2V0UHJvb2YiLCJnZXRTaWduYXR1cmUiLCJnZXRIeXBvdGhlc2VzIiwic2V0SHlwb3RoZXNlcyIsImdldFN1cHBvc2l0aW9uIiwiaW5kZXgiLCJzdXBwb3NpdGlvbiIsImlzU2F0aXNmaWFibGUiLCJzYXRpc2ZpYWJsZSIsImlzSHlwb3RoZXRpY2FsIiwiaHlwb3RoZXNlc0xlbmd0aCIsImxlbmd0aCIsImh5cG90aGV0aWNhbCIsImlzVW5jb25kaXRpb25hbCIsInN1cHBvc2l0aW9uc0xlbmd0aCIsInVuY29uZGl0aW9uYWwiLCJtYXRjaE1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMiLCJzb21lIiwibGFiZWwiLCJ2ZXJpZnkiLCJ2ZXJpZmllcyIsInRvcExldmVsQXNzZXJ0aW9uU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJlbmNsb3NlIiwibGFiZWxzVmVyaWZ5IiwidmVyaWZ5TGFiZWxzIiwic3VwcG9zaXRpb25zVmVyaWZ5IiwidmVyaWZ5U3VwcG9zaXRpb25zIiwiZGVkdWN0aW9uVmVyaWZpZXMiLCJ2ZXJpZnlEZWR1Y3Rpb24iLCJwcm9vZlZlcmlmaWVzIiwidmVyaWZ5UHJvb2YiLCJkZWJ1ZyIsImV2ZXJ5IiwibGFiZWxWZXJpZmllcyIsInZlcmlmeUxhYmVsIiwibGFiZWxTdHJpbmciLCJzdGF0ZW1lbnQiLCJnZXRTdGF0ZW1lbnQiLCJkZWR1Y3Rpb25TdHJpbmciLCJ2ZXJpZnlTdXBwb3NpdGlvbiIsInN1cHBvc2l0aW9uVmVyaWZpZXMiLCJzdXBwb3NpdGlvblN0cmluZyIsInN1YnByb29mT3JQcm9vZkFzc2VydGlvbiIsImFzc2lnbkFzc2lnbm1lbnRzIiwiYWRkU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uIiwidW5pZnlTdGVwV2l0aERlZHVjdGlvbiIsInN0ZXAiLCJzdGVwVW5pZmllc1dpdGhEZWR1Y3Rpb24iLCJicmVhayIsInN0ZXBTdHJpbmciLCJzdGVwVW5pZmllcyIsInVuaWZ5U3RlcCIsInVuaWZ5U3RlcEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMiLCJzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zIiwic3RlcEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmeSIsInN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmaWVzV2l0aFN1cHBvc2l0aW9ucyIsInVuaWZ5U3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1dpdGhTdXBwb3NpdGlvbnMiLCJkZXJpdmVkU3Vic3RpdHV0aW9uc1Jlc29sdmVkIiwiYXJlRGVyaXZlZFN1YnN0aXR1dGlvbnNSZXNvbHZlZCIsInVuaWZ5U3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1dpdGhTdXBwb3NpdGlvbiIsInN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmaWVzV2l0aFN1cHBvc2l0aW9uIiwic3VicHJvb2ZPclByb29mQXNzZXJ0aW9uVW5pZmllcyIsInVuaWZ5U3VicHJvb2ZPclByb29mQXNzZXJ0aW9uIiwicmVzb2x2ZURlcml2ZWRTdWJzdGl0dXRpb25zIiwic3VwcG9zaXRpb25VbmlmaWVzSW5kZXBlbmRlbnRseSIsInVuaWZ5SW5kZXBlbmRlbnRseSIsInN0ZXBVbmlmaWVzV2l0aFN1cHBvc2l0aW9uIiwidG9KU09OIiwibGFiZWxzSlNPTiIsImxhYmVsc1RvTGFiZWxzSlNPTiIsImRlZHVjdGlvbkpTT04iLCJkZWR1Y3Rpb25Ub0RlZHVjdGlvbkpTT04iLCJzdXBwb3NpdGlvbnNKU09OIiwic3VwcG9zaXRpb25zVG9TdXBwb3NpdGlvbnNKU09OIiwic2lnbmF0dXJlSlNPTiIsInNpZ25hdHVyZVRvU2lnbmF0dXJlSlNPTiIsImh5cG90aGVzZXNKU09OIiwiaHlwb3RoZXNlc1RvSHlwb3RoZXNlc0pTT04iLCJnZXRCcmVha1BvaW50IiwiYnJlYWtQb2ludEpTT04iLCJicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiIsImpzb24iLCJmcm9tSlNPTiIsIkNsYXNzIiwibGFiZWxzRnJvbUpTT04iLCJkZWR1Y3Rpb25Gcm9tSlNPTiIsInN1cHBvc2l0aW9uc0Zyb21KU09OIiwic2lnbmF0dXJlRnJvbUpTT04iLCJoeXBvdGhlc2VzRnJvbUpTT04iLCJ0b3BMZXZlbEFzc2VydGlvblN0cmluZ0Zyb21MYWJlbHNTaWduYXR1cmVTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24iLCJicmVha1BvaW50RnJvbUpTT04iLCJ0b3BMZXZlbEFzc2VydGlvbiJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBc0JBOzs7ZUFBcUJBOzs7MkJBcEJVO2dDQUNnQjt5QkFFdkI7NEJBQ3VDO3dCQUNvQjtzQkFVcEM7QUFFL0MsTUFBTSxFQUFFQyxPQUFPLEVBQUUsR0FBR0MseUJBQWMsRUFDNUIsRUFBRUMsWUFBWSxFQUFFQyxrQkFBa0IsRUFBRUMsbUJBQW1CLEVBQUUsR0FBR0MscUNBQXFCO0FBRXhFLE1BQU1OLDBCQUEwQk8sdUJBQU87SUFDcEQsWUFBWUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsVUFBVSxFQUFFQyxNQUFNLEVBQUVDLFlBQVksRUFBRUMsU0FBUyxFQUFFQyxLQUFLLEVBQUVDLFNBQVMsRUFBRUMsVUFBVSxDQUFFO1FBQzVHLEtBQUssQ0FBQ1QsU0FBU0MsUUFBUUMsTUFBTUM7UUFFN0IsSUFBSSxDQUFDQyxNQUFNLEdBQUdBO1FBQ2QsSUFBSSxDQUFDQyxZQUFZLEdBQUdBO1FBQ3BCLElBQUksQ0FBQ0MsU0FBUyxHQUFHQTtRQUNqQixJQUFJLENBQUNDLEtBQUssR0FBR0E7UUFDYixJQUFJLENBQUNDLFNBQVMsR0FBR0E7UUFDakIsSUFBSSxDQUFDQyxVQUFVLEdBQUdBO0lBQ3BCO0lBRUFDLFlBQVk7UUFDVixPQUFPLElB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
286
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L3RvcExldmVsQXNzZXJ0aW9uLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcbmltcG9ydCB7IEVsZW1lbnQsIGFzeW5jaHJvbm91c1V0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IHsgZW5jbG9zZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGV4dFwiO1xuaW1wb3J0IHsgYnJlYWtQb2ludEZyb21KU09OLCBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiB9IGZyb20gXCIuLi91dGlsaXRpZXMvYnJlYWtQb2ludFwiO1xuaW1wb3J0IHsgdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxzU2lnbmF0dXJlU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9zdHJpbmdcIjtcbmltcG9ydCB7IGxhYmVsc0Zyb21KU09OLFxuICAgICAgICAgZGVkdWN0aW9uRnJvbUpTT04sXG4gICAgICAgICBzaWduYXR1cmVGcm9tSlNPTixcbiAgICAgICAgIGxhYmVsc1RvTGFiZWxzSlNPTixcbiAgICAgICAgIGh5cG90aGVzZXNGcm9tSlNPTixcbiAgICAgICAgIHN1cHBvc2l0aW9uc0Zyb21KU09OLFxuICAgICAgICAgZGVkdWN0aW9uVG9EZWR1Y3Rpb25KU09OLFxuICAgICAgICAgc2lnbmF0dXJlVG9TaWduYXR1cmVKU09OLFxuICAgICAgICAgaHlwb3RoZXNlc1RvSHlwb3RoZXNlc0pTT04sXG4gICAgICAgICBzdXBwb3NpdGlvbnNUb1N1cHBvc2l0aW9uc0pTT04gfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2pzb25cIjtcblxuY29uc3QgeyByZXZlcnNlIH0gPSBhcnJheVV0aWxpdGllcyxcbiAgICAgIHsgYXN5bmNFdmVyeSwgYXN5bmNFeHRyYWN0LCBhc3luY0ZvcndhcmRzRXZlcnksIGFzeW5jQmFja3dhcmRzRXZlcnkgfSA9IGFzeW5jaHJvbm91c1V0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVG9wTGV2ZWxBc3NlcnRpb24gZXh0ZW5kcyBFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBsYWJlbHMsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uLCBwcm9vZiwgc2lnbmF0dXJlLCBoeXBvdGhlc2VzKSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICAgIHRoaXMubGFiZWxzID0gbGFiZWxzO1xuICAgIHRoaXMuc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zO1xuICAgIHRoaXMuZGVkdWN0aW9uID0gZGVkdWN0aW9uO1xuICAgIHRoaXMucHJvb2YgPSBwcm9vZjtcbiAgICB0aGlzLnNpZ25hdHVyZSA9IHNpZ25hdHVyZTtcbiAgICB0aGlzLmh5cG90aGVzZXMgPSBoeXBvdGhlc2VzO1xuICB9XG5cbiAgZ2V0TGFiZWxzKCkge1xuICAgIHJldHVybiB0aGlzLmxhYmVscztcbiAgfVxuXG4gIGdldFN1cHBvc2l0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5zdXBwb3NpdGlvbnM7XG4gIH1cblxuICBnZXREZWR1Y3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZGVkdWN0aW9uO1xuICB9XG5cbiAgZ2V0UHJvb2YoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvb2Y7XG4gIH1cblxuICBnZXRTaWduYXR1cmUoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2lnbmF0dXJlO1xuICB9XG5cbiAgZ2V0SHlwb3RoZXNlcygpIHtcbiAgICByZXR1cm4gdGhpcy5oeXBvdGhlc2VzO1xuICB9XG5cbiAgc2V0SHlwb3RoZXNlcyhoeXBvdGhlc2VzKSB7XG4gICAgdGhpcy5oeXBvdGhlc2VzID0gaHlwb3RoZXNlcztcbiAgfVxuXG4gIGdldFN1cHBvc2l0aW9uKGluZGV4KSB7XG4gICAgY29uc3Qgc3VwcG9zaXRpb24gPSB0aGlzLnN1cHBvc2l0aW9uc1tpbmRleF0gfHwgbnVsbDtcblxuICAgIHJldHVybiBzdXBwb3NpdGlvbjtcbiAgfVxuXG4gIGlzU2F0aXNmaWFibGUoKSB7XG4gICAgY29uc3Qgc2F0aXNmaWFibGUgPSBmYWxzZTtcblxuICAgIHJldHVybiBzYXRpc2ZpYWJsZTtcbiAgfVxuXG4gIGlzSHlwb3RoZXRpY2FsKCkge1xuICAgIGNvbnN0IGh5cG90aGVzZXNMZW5ndGggPSB0aGlzLmh5cG90aGVzZXMubGVuZ3RoLFxuICAgICAgICAgIGh5cG90aGV0aWNhbCA9IChoeXBvdGhlc2VzTGVuZ3RoID4gMCk7XG5cbiAgICByZXR1cm4gaHlwb3RoZXRpY2FsO1xuICB9XG5cbiAgaXNVbmNvbmRpdGlvbmFsKCkge1xuICAgIGNvbnN0IHN1cHBvc2l0aW9uc0xlbmd0aCA9IHRoaXMuc3VwcG9zaXRpb25zLmxlbmd0aCxcbiAgICAgICAgICB1bmNvbmRpdGlvbmFsID0gKHN1cHBvc2l0aW9uc0xlbmd0aCA9PT0gMCk7XG5cbiAgICByZXR1cm4gdW5jb25kaXRpb25hbDtcbiAgfVxuXG4gIG1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgPSB0aGlzLmxhYmVscy5zb21lKChsYWJlbCkgPT4ge1xuICAgICAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgPSBsYWJlbC5tYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgIGlmIChtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcztcbiAgfVxuXG4gIGFzeW5jIHZlcmlmeShjb250ZXh0KSB7XG4gICAgbGV0IHZlcmlmaWVzID0gZmFsc2U7XG5cbiAgICBjb25zdCB0b3BMZXZlbEFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHt0b3BMZXZlbEFzc2VydGlvblN0cmluZ30nIHRvcCBsZXZlbCBhc3NlcnRpb24uLi5gKTtcblxuICAgIGF3YWl0IGVuY2xvc2UoYXN5bmMgKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IGxhYmVsc1ZlcmlmeSA9IHRoaXMudmVyaWZ5TGFiZWxzKGNvbnRleHQpO1xuXG4gICAgICBpZiAobGFiZWxzVmVyaWZ5KSB7XG4gICAgICAgIGNvbnN0IHN1cHBvc2l0aW9uc1ZlcmlmeSA9IGF3YWl0IHRoaXMudmVyaWZ5U3VwcG9zaXRpb25zKGNvbnRleHQpO1xuXG4gICAgICAgIGlmIChzdXBwb3NpdGlvbnNWZXJpZnkpIHtcbiAgICAgICAgICBjb25zdCBkZWR1Y3Rpb25WZXJpZmllcyA9IGF3YWl0IHRoaXMudmVyaWZ5RGVkdWN0aW9uKGNvbnRleHQpO1xuXG4gICAgICAgICAgaWYgKGRlZHVjdGlvblZlcmlmaWVzKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9vZlZlcmlmaWVzID0gYXdhaXQgdGhpcy52ZXJpZnlQcm9vZihjb250ZXh0KTtcblxuICAgICAgICAgICAgaWYgKHByb29mVmVyaWZpZXMpIHtcbiAgICAgICAgICAgICAgdmVyaWZpZXMgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIGNvbnRleHQpO1xuXG4gICAgaWYgKHZlcmlmaWVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7dG9wTGV2ZWxBc3NlcnRpb25TdHJpbmd9JyB0b3AgbGV2ZWwgYXNzZXJ0aW9uLmApO1xuICAgIH1cblxuICAgIHJldHVybiB2ZXJpZmllcztcbiAgfVxuXG4gIHZlcmlmeUxhYmVscyhjb250ZXh0KSB7XG4gICAgbGV0IGxhYmVsc1ZlcmlmeTtcblxuICAgIGNvbnN0IHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHt0b3BMZXZlbEFzc2VydGlvblN0cmluZ30nIHRvcCBsZXZlbCBhc3NlcnRpb24ncyBsYWJlbHMuLi5gKTtcblxuICAgIGxhYmVsc1ZlcmlmeSA9IHRoaXMubGFiZWxzLmV2ZXJ5KChsYWJlbCkgPT4ge1xuICAgICAgY29uc3QgbGFiZWxWZXJpZmllcyA9IHRoaXMudmVyaWZ5TGFiZWwobGFiZWwsIGNvbnRleHQpO1xuXG4gICAgICBpZiAobGFiZWxWZXJpZmllcykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChsYWJlbHNWZXJpZnkpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHt0b3BMZXZlbEFzc2VydGlvblN0cmluZ30nIHRvcCBsZXZlbCBhc3NlcnRpb24ncyBsYWJlbHMuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxhYmVsc1ZlcmlmeTtcbiAgfVxuXG4gIHZlcmlmeUxhYmVsKGxhYmVsLCBjb250ZXh0KSB7XG4gICAgbGV0IGxhYmVsVmVyaWZpZXM7XG5cbiAgICBjb25zdCBsYWJlbFN0cmluZyA9IGxhYmVsLmdldFN0cmluZygpLFxuICAgICAgICAgIHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3RvcExldmVsQXNzZXJ0aW9uU3RyaW5nfScgdG9wIGxldmVsIGFzc2VydGlvbidzICcke2xhYmVsU3RyaW5nfScgbGFiZWwuLi5gKTtcblxuICAgIGxhYmVsVmVyaWZpZXMgPSBsYWJlbC52ZXJpZnkoKTtcblxuICAgIGlmIChsYWJlbFZlcmlmaWVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7dG9wTGV2ZWxBc3NlcnRpb25TdHJpbmd9JyB0b3AgbGV2ZWwgYXNzZXJ0aW9uJ3MgJyR7bGFiZWxTdHJpbmd9JyBsYWJlbC5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGFiZWxWZXJpZmllcztcbiAgfVxuXG4gIGFzeW5jIHZlcmlmeVByb29mKGNvbnRleHQpIHtcbiAgICBsZXQgcHJvb2ZWZXJpZmllcztcblxuICAgIGlmICh0aGlzLnByb29mID09PSBudWxsKSB7XG4gICAgICBwcm9vZlZlcmlmaWVzID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7dG9wTGV2ZWxBc3NlcnRpb25TdHJpbmd9JyB0b3AgbGV2ZWwgYXNzZXJ0aW9uJ3MgcHJvb2YuLi5gKTtcblxuICAgICAgY29uc3Qgc3RhdGVtZW50ID0gdGhpcy5kZWR1Y3Rpb24uZ2V0U3RhdGVtZW50KCk7XG5cbiAgICAgIHByb29mVmVyaWZpZXMgPSBhd2FpdCB0aGlzLnByb29mLnZlcmlmeShzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gICAgICBpZiAocHJvb2ZWZXJpZmllcykge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7dG9wTGV2ZWxBc3NlcnRpb25TdHJpbmd9JyB0b3AgbGV2ZWwgYXNzZXJ0aW9uJ3MgcHJvb2YuYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb29mVmVyaWZpZXM7XG4gIH1cblxuICBhc3luYyB2ZXJpZnlEZWR1Y3Rpb24oY29udGV4dCkge1xuICAgIGxldCBkZWR1Y3Rpb25WZXJpZmllcztcblxuICAgIGNvbnN0IGRlZHVjdGlvblN0cmluZyA9IHRoaXMuZGVkdWN0aW9uLmdldFN0cmluZygpLFxuICAgICAgICAgIHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3RvcExldmVsQXNzZXJ0aW9uU3RyaW5nfScgdG9wIGxldmVsIGFzc2VydGlvbidzICcke2RlZHVjdGlvblN0cmluZ30nIGRlZHVjdGlvbi4uLmApO1xuXG4gICAgZGVkdWN0aW9uVmVyaWZpZXMgPSBhd2FpdCB0aGlzLmRlZHVjdGlvbi52ZXJpZnkoY29udGV4dCk7XG5cbiAgICBpZiAoZGVkdWN0aW9uVmVyaWZpZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHt0b3BMZXZlbEFzc2VydGlvblN0cmluZ30nIHRvcCBsZXZlbCBhc3NlcnRpb24ncyAnJHtkZWR1Y3Rpb25TdHJpbmd9JyBkZWR1Y3Rpb24uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlZHVjdGlvblZlcmlmaWVzO1xuICB9XG5cbiAgYXN5bmMgdmVyaWZ5U3VwcG9zaXRpb24oc3VwcG9zaXRpb24sIGNvbnRleHQpIHtcbiAgICBsZXQgc3VwcG9zaXRpb25WZXJpZmllcztcblxuICAgIGNvbnN0IHN1cHBvc2l0aW9uU3RyaW5nID0gc3VwcG9zaXRpb24uZ2V0U3RyaW5nKCksXG4gICAgICAgICAgdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3RvcExldmVsQXNzZXJ0aW9uU3RyaW5nfScgdG9wIGxldmVsIGFzc2VydGlvbidzICcke3N1cHBvc2l0aW9uU3RyaW5nfScgc3VwcG9zaXRpb24uLi5gKTtcblxuICAgIHN1cHBvc2l0aW9uVmVyaWZpZXMgPSBhd2FpdCBzdXBwb3NpdGlvbi52ZXJpZnkoY29udGV4dClcblxuICAgIGlmIChzdXBwb3NpdGlvblZlcmlmaWVzKSB7XG4gICAgICBjb25zdCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24gPSBzdXBwb3NpdGlvbjsgIC8vLy9cblxuICAgICAgY29udGV4dC5hc3NpZ25Bc3NpZ25tZW50cygpO1xuXG4gICAgICBjb250ZXh0LmFkZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbihzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24pO1xuICAgIH1cblxuICAgIGlmIChzdXBwb3NpdGlvblZlcmlmaWVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7dG9wTGV2ZWxBc3NlcnRpb25TdHJpbmd9JyB0b3AgbGV2ZWwgYXNzZXJ0aW9uJ3MgJyR7c3VwcG9zaXRpb25TdHJpbmd9JyBzdXBwb3NpdGlvbi5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3VwcG9zaXRpb25WZXJpZmllcztcbiAgfVxuXG4gIGFzeW5jIHZlcmlmeVN1cHBvc2l0aW9ucyhjb250ZXh0KSB7XG4gICAgbGV0IHN1cHBvc2l0aW9uc1ZlcmlmeTtcblxuICAgIGNvbnN0IHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHt0b3BMZXZlbEFzc2VydGlvblN0cmluZ30nIHRvcCBsZXZlbCBhc3NlcnRpb24ncyBzdXBwb3NpdGlvbnMuLi5gKTtcblxuICAgIHN1cHBvc2l0aW9uc1ZlcmlmeSA9IGF3YWl0IGFzeW5jRm9yd2FyZHNFdmVyeSh0aGlzLnN1cHBvc2l0aW9ucywgYXN5bmMgKHN1cHBvc2l0aW9uKSA9PiB7XG4gICAgICBjb25zdCBzdXBwb3NpdGlvblZlcmlmaWVzID0gYXdhaXQgdGhpcy52ZXJpZnlTdXBwb3NpdGlvbihzdXBwb3NpdGlvbiwgY29udGV4dCk7XG5cbiAgICAgIGlmIChzdXBwb3NpdGlvblZlcmlmaWVzKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHN1cHBvc2l0aW9uc1ZlcmlmeSkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3RvcExldmVsQXNzZXJ0aW9uU3RyaW5nfScgdG9wIGxldmVsIGFzc2VydGlvbidzIHN1cHBvc2l0aW9ucy5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3VwcG9zaXRpb25zVmVyaWZ5O1xuICB9XG5cbiAgYXN5bmMgZGlzY2hhcmdlSHlwb3RoZXNpcyhoeXBvdGhlc2lzLCBjb250ZXh0KSB7XG4gICAgbGV0IGh5cG90aGVzaXNEaXNjaGFyZ2VkO1xuXG4gICAgYXdhaXQgdGhpcy5icmVhayhjb250ZXh0KTtcblxuICAgIGNvbnN0IGh5cG90aGVzaXNTdHJpbmcgPSBoeXBvdGhlc2lzLmdldFN0cmluZygpLFxuICAgICAgICAgIHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBEaXNjaGFyZGluZyB0aGUgJyR7dG9wTGV2ZWxBc3NlcnRpb25TdHJpbmd9JyB0b3AgbGV2ZWwgYXNzZXJ0aW9uJ3MgJyR7aHlwb3RoZXNpc1N0cmluZ30nIGh5cG90aGVzaXMuLi4gYCk7XG5cbiAgICBoeXBvdGhlc2lzRGlzY2hhcmdlZCA9IGh5cG90aGVzaXMuZGlzY2hhcmdlKGNvbnRleHQpO1xuXG4gICAgaWYgKGh5cG90aGVzaXNEaXNjaGFyZ2VkKSB7XG4gICAgICBjb250ZXh0LnRyYWNlKGAuLi5kaXNjaGFyZ2VkIHRoZSAnJHt0b3BMZXZlbEFzc2VydGlvblN0cmluZ30nIHRvcCBsZXZlbCBhc3NlcnRpb24ncyAnJHtoeXBvdGhlc2lzU3RyaW5nfScgaHlwb3RoZXNpcy4gYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGh5cG90aGVzaXNEaXNjaGFyZ2VkO1xuICB9XG5cbiAgYXN5bmMgZGlzY2hhcmdlSHlwb3RoZXNlcyhjb250ZXh0KSB7XG4gICAgY29uc3QgaHlwb3RoZXNlcyA9IHRoaXMuZ2V0SHlwb3RoZXNlcygpLFxuICAgICAgICAgIGh5cG90aGVzZXNEaXNjaGFyZ2VkID0gYXdhaXQgYXN5bmNFdmVyeShoeXBvdGhlc2VzLCBhc3luYyAoaHlwb3RoZXNpcykgPT4ge1xuICAgICAgICAgICAgY29uc3QgaHlwb3RoZXNpc0Rpc2NoYXJnZWQgPSBhd2FpdCB0aGlzLmRpc2NoYXJnZUh5cG90aGVzaXMoaHlwb3RoZXNpcywgY29udGV4dCk7XG5cbiAgICAgICAgICAgIGlmIChoeXBvdGhlc2lzRGlzY2hhcmdlZCkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgIHJldHVybiBoeXBvdGhlc2VzRGlzY2hhcmdlZDtcbiAgfVxuXG4gIGFzeW5jIHVuaWZ5U3RlcFdpdGhEZWR1Y3Rpb24oc3RlcCwgY29udGV4dCkge1xuICAgIGxldCBzdGVwVW5pZmllc1dpdGhEZWR1Y3Rpb24gPSBmYWxzZTtcblxuICAgIGF3YWl0IHRoaXMuYnJlYWsoY29udGV4dCk7XG5cbiAgICBjb25zdCBzdGVwU3RyaW5nID0gc3RlcC5nZXRTdHJpbmcoKSxcbiAgICAgICAgICB0b3BMZXZlbEFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwIHdpdGggdGhlICcke3RvcExldmVsQXNzZXJ0aW9uU3RyaW5nfScgdG9wIGxldmVsIGFzc2VydGlvbidzIGRlZHVjdGlvbi4uLmApO1xuXG4gICAgY29uc3Qgc3RlcFVuaWZpZXMgPSB0aGlzLmRlZHVjdGlvbi51bmlmeVN0ZXAoc3RlcCwgY29udGV4dCk7XG5cbiAgICBpZiAoc3RlcFVuaWZpZXMpIHtcbiAgICAgIHN0ZXBVbmlmaWVzV2l0aERlZHVjdGlvbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHN0ZXBVbmlmaWVzV2l0aERlZHVjdGlvbikge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgd2l0aCB0aGUgJyR7dG9wTGV2ZWxBc3NlcnRpb25TdHJpbmd9JyB0b3AgbGV2ZWwgYXNzZXJ0aW9uJ3MgZGVkdWN0aW9uLmApO1xuICAgIH1cblxuICAgIHJldHVybiBzdGVwVW5pZmllc1dpdGhEZWR1Y3Rpb247XG4gIH1cblxuICBhc3luYyB1bmlmeVN0ZXBBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKHN0ZXAsIHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMsIGNvbnRleHQpIHtcbiAgICBsZXQgc3RlcEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmeSA9IGZhbHNlO1xuXG4gICAgY29uc3Qgc3RlcFVuaWZpZXNXaXRoRGVkdWN0aW9uID0gYXdhaXQgdGhpcy51bmlmeVN0ZXBXaXRoRGVkdWN0aW9uKHN0ZXAsIGNvbnRleHQpO1xuXG4gICAgaWYgKHN0ZXBVbmlmaWVzV2l0aERlZHVjdGlvbikge1xuICAgICAgY29uc3QgaHlwb3RoZXNlc0Rpc2NoYXJnZWQgPSBhd2FpdCB0aGlzLmRpc2NoYXJnZUh5cG90aGVzZXMoY29udGV4dCk7XG5cbiAgICAgIGlmIChoeXBvdGhlc2VzRGlzY2hhcmdlZCkge1xuICAgICAgICBjb25zdCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZmllc1dpdGhTdXBwb3NpdGlvbnMgPSBhd2FpdCB0aGlzLnVuaWZ5U3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1dpdGhTdXBwb3NpdGlvbnMoc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucywgY29udGV4dCk7XG5cbiAgICAgICAgaWYgKHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmaWVzV2l0aFN1cHBvc2l0aW9ucykge1xuICAgICAgICAgIGNvbnN0IGRlcml2ZWRTdWJzdGl0dXRpb25zUmVzb2x2ZWQgPSBjb250ZXh0LmFyZURlcml2ZWRTdWJzdGl0dXRpb25zUmVzb2x2ZWQoKTtcblxuICAgICAgICAgIGlmIChkZXJpdmVkU3Vic3RpdHV0aW9uc1Jlc29sdmVkKSB7XG4gICAgICAgICAgICBzdGVwQW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZ5ID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc3RlcEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmeTtcbiAgfVxuXG4gIGFzeW5jIHVuaWZ5U3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1dpdGhTdXBwb3NpdGlvbihzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zLCBzdXBwb3NpdGlvbiwgY29udGV4dCkge1xuICAgIGxldCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZmllc1dpdGhTdXBwb3NpdGlvbiA9IGZhbHNlO1xuXG4gICAgYXdhaXQgdGhpcy5icmVhayhjb250ZXh0KTtcblxuICAgIGlmICghc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZpZXNXaXRoU3VwcG9zaXRpb24pIHtcbiAgICAgIGNvbnN0IHN1YnByb29mT3JQcm9vZkFzc2VydGlvbiA9IGF3YWl0IGFzeW5jRXh0cmFjdChzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zLCBhc3luYyAoc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IHN1YnByb29mT3JQcm9vZkFzc2VydGlvblVuaWZpZXMgPSBhd2FpdCBzdXBwb3NpdGlvbi51bmlmeVN1YnByb29mT3JQcm9vZkFzc2VydGlvbihzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24sIGNvbnRleHQpO1xuXG4gICAgICAgIGlmIChzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25VbmlmaWVzKSB7XG4gICAgICAgICAgY29udGV4dC5yZXNvbHZlRGVyaXZlZFN1YnN0aXR1dGlvbnMoKTtcblxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KSB8fCBudWxsO1xuXG4gICAgICBpZiAoc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICAgIHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmaWVzV2l0aFN1cHBvc2l0aW9uID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmaWVzV2l0aFN1cHBvc2l0aW9uKSB7XG4gICAgICBjb25zdCBzdXBwb3NpdGlvblVuaWZpZXNJbmRlcGVuZGVudGx5ID0gYXdhaXQgc3VwcG9zaXRpb24udW5pZnlJbmRlcGVuZGVudGx5KGNvbnRleHQpO1xuXG4gICAgICBpZiAoc3VwcG9zaXRpb25VbmlmaWVzSW5kZXBlbmRlbnRseSkge1xuICAgICAgICBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZmllc1dpdGhTdXBwb3NpdGlvbiA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmaWVzV2l0aFN1cHBvc2l0aW9uO1xuICB9XG5cbiAgYXN5bmMgdW5pZnlTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zV2l0aFN1cHBvc2l0aW9ucyhzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zLCBjb250ZXh0KSB7XG4gICAgbGV0IHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmaWVzV2l0aFN1cHBvc2l0aW9ucztcblxuICAgIHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMgPSByZXZlcnNlKHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMpOyAvLy9cblxuICAgIHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmaWVzV2l0aFN1cHBvc2l0aW9ucyA9IGF3YWl0IGFzeW5jQmFja3dhcmRzRXZlcnkodGhpcy5zdXBwb3NpdGlvbnMsIGFzeW5jIChzdXBwb3NpdGlvbikgPT4ge1xuICAgICAgY29uc3Qgc3RlcFVuaWZpZXNXaXRoU3VwcG9zaXRpb24gPSBhd2FpdCB0aGlzLnVuaWZ5U3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1dpdGhTdXBwb3NpdGlvbihzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zLCBzdXBwb3NpdGlvbiwgY29udGV4dCk7XG5cbiAgICAgIGlmIChzdGVwVW5pZmllc1dpdGhTdXBwb3NpdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZmllc1dpdGhTdXBwb3NpdGlvbnM7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgY29uc3QgbGFiZWxzSlNPTiA9IGxhYmVsc1RvTGFiZWxzSlNPTih0aGlzLmxhYmVscyksXG4gICAgICAgICAgZGVkdWN0aW9uSlNPTiA9IGRlZHVjdGlvblRvRGVkdWN0aW9uSlNPTih0aGlzLmRlZHVjdGlvbiksXG4gICAgICAgICAgc3VwcG9zaXRpb25zSlNPTiA9IHN1cHBvc2l0aW9uc1RvU3VwcG9zaXRpb25zSlNPTih0aGlzLnN1cHBvc2l0aW9ucyksXG4gICAgICAgICAgc2lnbmF0dXJlSlNPTiA9IHNpZ25hdHVyZVRvU2lnbmF0dXJlSlNPTih0aGlzLnNpZ25hdHVyZSksXG4gICAgICAgICAgaHlwb3RoZXNlc0pTT04gPSBoeXBvdGhlc2VzVG9IeXBvdGhlc2VzSlNPTih0aGlzLmh5cG90aGVzZXMpLFxuICAgICAgICAgIHN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7XG5cbiAgICBsZXQgYnJlYWtQb2ludDtcblxuICAgIGJyZWFrUG9pbnQgPSB0aGlzLmdldEJyZWFrUG9pbnQoKTtcblxuICAgIGNvbnN0IGJyZWFrUG9pbnRKU09OID0gYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04oYnJlYWtQb2ludCk7XG5cbiAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEpTT047ICAvLy9cblxuICAgIGNvbnN0IGxhYmVscyA9IGxhYmVsc0pTT04sICAvLy9cbiAgICAgICAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25KU09OLCAgLy8vXG4gICAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zSlNPTiwgIC8vL1xuICAgICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUpTT04sICAvLy9cbiAgICAgICAgICBoeXBvdGhlc2VzID0gaHlwb3RoZXNlc0pTT04sICAvLy9cbiAgICAgICAgICBqc29uID0ge1xuICAgICAgICAgICAgc3RyaW5nLFxuICAgICAgICAgICAgYnJlYWtQb2ludCxcbiAgICAgICAgICAgIGxhYmVscyxcbiAgICAgICAgICAgIGRlZHVjdGlvbixcbiAgICAgICAgICAgIHN1cHBvc2l0aW9ucyxcbiAgICAgICAgICAgIHNpZ25hdHVyZSxcbiAgICAgICAgICAgIGh5cG90aGVzZXNcbiAgICAgICAgICB9O1xuXG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBzdGF0aWMgZnJvbUpTT04oQ2xhc3MsIGpzb24sIGNvbnRleHQpIHtcbiAgICBjb25zdCBsYWJlbHMgPSBsYWJlbHNGcm9tSlNPTihqc29uLCBjb250ZXh0KSxcbiAgICAgICAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25Gcm9tSlNPTihqc29uLCBjb250ZXh0KSxcbiAgICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tSlNPTihqc29uLCBjb250ZXh0KSxcbiAgICAgICAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVGcm9tSlNPTihqc29uLCBjb250ZXh0KSxcbiAgICAgICAgICBoeXBvdGhlc2VzID0gaHlwb3RoZXNlc0Zyb21KU09OKGpzb24sIGNvbnRleHQpLFxuICAgICAgICAgIHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nID0gdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxzU2lnbmF0dXJlU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc2lnbmF0dXJlLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiksXG4gICAgICAgICAgc3RyaW5nID0gdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmcsIC8vL1xuICAgICAgICAgIG5vZGUgPSBudWxsLFxuICAgICAgICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50RnJvbUpTT04oanNvbiksXG4gICAgICAgICAgcHJvb2YgPSBudWxsLFxuICAgICAgICAgIHRvcExldmVsQXNzZXJ0aW9uID0gbmV3IENsYXNzKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIHNpZ25hdHVyZSwgaHlwb3RoZXNlcyk7XG5cbiAgICByZXR1cm4gdG9wTGV2ZWxBc3NlcnRpb247XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJUb3BMZXZlbEFzc2VydGlvbiIsInJldmVyc2UiLCJhcnJheVV0aWxpdGllcyIsImFzeW5jRXZlcnkiLCJhc3luY0V4dHJhY3QiLCJhc3luY0ZvcndhcmRzRXZlcnkiLCJhc3luY0JhY2t3YXJkc0V2ZXJ5IiwiYXN5bmNocm9ub3VzVXRpbGl0aWVzIiwiRWxlbWVudCIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsImxhYmVscyIsInN1cHBvc2l0aW9ucyIsImRlZHVjdGlvbiIsInByb29mIiwic2lnbmF0dXJlIiwiaHlwb3RoZXNlcyIsImdldExhYmVscyIsImdldFN1cHBvc2l0aW9ucyIsImdldERlZHVjdGlvbiIsImdldFByb29mIiwiZ2V0U2lnbmF0dXJlIiwiZ2V0SHlwb3RoZXNlcyIsInNldEh5cG90aGVzZXMiLCJnZXRTdXBwb3NpdGlvbiIsImluZGV4Iiwic3VwcG9zaXRpb24iLCJpc1NhdGlzZmlhYmxlIiwic2F0aXNmaWFibGUiLCJpc0h5cG90aGV0aWNhbCIsImh5cG90aGVzZXNMZW5ndGgiLCJsZW5ndGgiLCJoeXBvdGhldGljYWwiLCJpc1VuY29uZGl0aW9uYWwiLCJzdXBwb3NpdGlvbnNMZW5ndGgiLCJ1bmNvbmRpdGlvbmFsIiwibWF0Y2hNZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzIiwic29tZSIsImxhYmVsIiwidmVyaWZ5IiwidmVyaWZpZXMiLCJ0b3BMZXZlbEFzc2VydGlvblN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwiZW5jbG9zZSIsImxhYmVsc1ZlcmlmeSIsInZlcmlmeUxhYmVscyIsInN1cHBvc2l0aW9uc1ZlcmlmeSIsInZlcmlmeVN1cHBvc2l0aW9ucyIsImRlZHVjdGlvblZlcmlmaWVzIiwidmVyaWZ5RGVkdWN0aW9uIiwicHJvb2ZWZXJpZmllcyIsInZlcmlmeVByb29mIiwiZGVidWciLCJldmVyeSIsImxhYmVsVmVyaWZpZXMiLCJ2ZXJpZnlMYWJlbCIsImxhYmVsU3RyaW5nIiwic3RhdGVtZW50IiwiZ2V0U3RhdGVtZW50IiwiZGVkdWN0aW9uU3RyaW5nIiwidmVyaWZ5U3VwcG9zaXRpb24iLCJzdXBwb3NpdGlvblZlcmlmaWVzIiwic3VwcG9zaXRpb25TdHJpbmciLCJzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24iLCJhc3NpZ25Bc3NpZ25tZW50cyIsImFkZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbiIsImRpc2NoYXJnZUh5cG90aGVzaXMiLCJoeXBvdGhlc2lzIiwiaHlwb3RoZXNpc0Rpc2NoYXJnZWQiLCJicmVhayIsImh5cG90aGVzaXNTdHJpbmciLCJkaXNjaGFyZ2UiLCJkaXNjaGFyZ2VIeXBvdGhlc2VzIiwiaHlwb3RoZXNlc0Rpc2NoYXJnZWQiLCJ1bmlmeVN0ZXBXaXRoRGVkdWN0aW9uIiwic3RlcCIsInN0ZXBVbmlmaWVzV2l0aERlZHVjdGlvbiIsInN0ZXBTdHJpbmciLCJzdGVwVW5pZmllcyIsInVuaWZ5U3RlcCIsInVuaWZ5U3RlcEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMiLCJzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zIiwic3RlcEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmeSIsInN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmaWVzV2l0aFN1cHBvc2l0aW9ucyIsInVuaWZ5U3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1dpdGhTdXBwb3NpdGlvbnMiLCJkZXJpdmVkU3Vic3RpdHV0aW9uc1Jlc29sdmVkIiwiYXJlRGVyaXZlZFN1YnN0aXR1dGlvbnNSZXNvbHZlZCIsInVuaWZ5U3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1dpdGhTdXBwb3NpdGlvbiIsInN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmaWVzV2l0aFN1cHBvc2l0aW9uIiwic3VicHJvb2ZPclByb29mQXNzZXJ0aW9uVW5pZmllcyIsInVuaWZ5U3VicHJvb2ZPclByb29mQXNzZXJ0aW9uIiwicmVzb2x2ZURlcml2ZWRTdWJzdGl0dXRpb25zIiwic3VwcG9zaXRpb25VbmlmaWVzSW5kZXBlbmRlbnRseSIsInVuaWZ5SW5kZXBlbmRlbnRseSIsInN0ZXBVbmlmaWVzV2l0aFN1cHBvc2l0aW9uIiwidG9KU09OIiwibGFiZWxzSlNPTiIsImxhYmVsc1RvTGFiZWxzSlNPTiIsImRlZHVjdGlvbkpTT04iLCJkZWR1Y3Rpb25Ub0RlZHVjdGlvbkpTT04iLCJzdXBwb3NpdGlvbnNKU09OIiwic3VwcG9zaXRpb25zVG9TdXBwb3NpdGlvbnNKU09OIiwic2lnbmF0dXJlSlNPTiIsInNpZ25hdHVyZVRvU2lnbmF0dXJlSlNPTiIsImh5cG90aGVzZXNKU09OIiwiaHlwb3RoZXNlc1RvSHlwb3RoZXNlc0pTT04iLCJnZXRCcmVha1BvaW50IiwiYnJlYWtQb2ludEpTT04iLCJicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiIsImpzb24iLCJmcm9tSlNPTiIsIkNsYXNzIiwibGFiZWxzRnJvbUpTT04iLCJkZWR1Y3Rpb25Gcm9tSlNPTiIsInN1cHBvc2l0aW9uc0Zyb21KU09OIiwic2lnbmF0dXJlRnJvbUpTT04iLCJoeXBvdGhlc2VzRnJvbUpTT04iLCJ0b3BMZXZlbEFzc2VydGlvblN0cmluZ0Zyb21MYWJlbHNTaWduYXR1cmVTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24iLCJicmVha1BvaW50RnJvbUpTT04iLCJ0b3BMZXZlbEFzc2VydGlvbiJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBc0JBOzs7ZUFBcUJBOzs7MkJBcEJVO2dDQUNnQjt5QkFFdkI7NEJBQ3VDO3dCQUNvQjtzQkFVcEM7QUFFL0MsTUFBTSxFQUFFQyxPQUFPLEVBQUUsR0FBR0Ms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
@@ -73,7 +73,7 @@ class TopLevelMetaAssertion extends _occamlanguages.Element {
73
73
  let verifies = false;
74
74
  const topLevelMetaAssertionString = this.getString(); ///
75
75
  context.trace(`Verifying the '${topLevelMetaAssertionString}' top level meta assertion...`);
76
- await (0, _context.enclose)(async (context)=>{
76
+ await (0, _context.encapsulate)(async (context)=>{
77
77
  const labelVerifies = this.verifyLabel(context);
78
78
  if (labelVerifies) {
79
79
  const suppositionsVerify = await this.verifySuppositions(context);
@@ -176,4 +176,4 @@ class TopLevelMetaAssertion extends _occamlanguages.Element {
176
176
  }
177
177
  }
178
178
 
179
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L3RvcExldmVsTWV0YUFzc2VydGlvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgRWxlbWVudCwgYXN5bmNocm9ub3VzVXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgeyBlbmNsb3NlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5pbXBvcnQgeyBicmVha1BvaW50RnJvbUpTT04sIGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9icmVha1BvaW50XCI7XG5pbXBvcnQgeyB0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24gfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N0cmluZ1wiO1xuaW1wb3J0IHsgbGFiZWxGcm9tSlNPTixcbiAgICAgICAgIGxhYmVsVG9MYWJlbEpTT04sXG4gICAgICAgICBkZWR1Y3Rpb25Gcm9tSlNPTixcbiAgICAgICAgIHN1cHBvc2l0aW9uc0Zyb21KU09OLFxuICAgICAgICAgZGVkdWN0aW9uVG9EZWR1Y3Rpb25KU09OLFxuICAgICAgICAgbWV0YUxldmVsQXNzdW1wdGlvbnNGcm9tSlNPTixcbiAgICAgICAgIHN1cHBvc2l0aW9uc1RvU3VwcG9zaXRpb25zSlNPTixcbiAgICAgICAgIG1ldGFMZXZlbEFzc3VtcHRpb25zVG9NZXRhTGV2ZWxBc3N1bXB0aW9uc0pTT04gfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2pzb25cIjtcblxuY29uc3QgeyBhc3luY0ZvcndhcmRzRXZlcnkgfSA9IGFzeW5jaHJvbm91c1V0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uIGV4dGVuZHMgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbGFiZWwsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uLCBwcm9vZiwgbWV0YUxldmVsQXNzdW1wdGlvbnMpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy5sYWJlbCA9IGxhYmVsO1xuICAgIHRoaXMuc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zO1xuICAgIHRoaXMuZGVkdWN0aW9uID0gZGVkdWN0aW9uO1xuICAgIHRoaXMucHJvb2YgPSBwcm9vZjtcbiAgICB0aGlzLm1ldGFMZXZlbEFzc3VtcHRpb25zID0gbWV0YUxldmVsQXNzdW1wdGlvbnM7XG4gIH1cblxuICBnZXRMYWJlbCgpIHtcbiAgICByZXR1cm4gdGhpcy5sYWJlbDtcbiAgfVxuXG4gIGdldFN1cHBvc2l0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5zdXBwb3NpdGlvbnM7XG4gIH1cblxuICBnZXREZWR1Y3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZGVkdWN0aW9uO1xuICB9XG5cbiAgZ2V0UHJvb2YoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvb2Y7XG4gIH1cblxuICBnZXRNZXRhTGV2ZWxBc3N1bXB0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5tZXRhTGV2ZWxBc3N1bXB0aW9ucztcbiAgfVxuXG4gIGdldFN0YXRlbWVudCgpIHtcbiAgICBsZXQgc3RhdGVtZW50ID0gbnVsbDtcblxuICAgIGNvbnN0IHVuY29uZGl0aW9uYWwgPSB0aGlzLmlzVW5jb25kaXRpb25hbCgpO1xuXG4gICAgaWYgKHVuY29uZGl0aW9uYWwpIHtcbiAgICAgIHN0YXRlbWVudCA9IHRoaXMuZGVkdWN0aW9uLmdldFN0YXRlbWVudCgpO1xuICAgIH1cblxuICAgIHJldHVybiBzdGF0ZW1lbnQ7XG4gIH1cblxuICBnZXRTdGF0ZW1lbnRzKCkge1xuICAgIGxldCBzdGF0ZW1lbnRzID0gbnVsbDtcblxuICAgIGNvbnN0IHVuY29uZGl0aW9uYWwgPSB0aGlzLmlzVW5jb25kaXRpb25hbCgpO1xuXG4gICAgaWYgKCF1bmNvbmRpdGlvbmFsKSB7XG4gICAgICBjb25zdCBzdXBwb3NpdGlvblN0YXRlbWVudHMgPSB0aGlzLnN1cHBvc2l0aW9ucy5tYXAoKHN1cHBvc2l0aW9uKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHN1cHBvc2l0aW9uU3RhdGVtZW50ID0gc3VwcG9zaXRpb24uZ2V0U3RhdGVtZW50KCk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHN1cHBvc2l0aW9uU3RhdGVtZW50O1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBkZWR1Y3Rpb25TdGF0ZW1lbnQgPSB0aGlzLmRlZHVjdGlvbi5nZXRTdGF0ZW1lbnQoKTtcblxuICAgICAgc3RhdGVtZW50cyA9IFtcbiAgICAgICAgLi4uc3VwcG9zaXRpb25TdGF0ZW1lbnRzLFxuICAgICAgICBkZWR1Y3Rpb25TdGF0ZW1lbnRcbiAgICAgIF07XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXRlbWVudHM7XG4gIH1cblxuICBpc1VuY29uZGl0aW9uYWwoKSB7XG4gICAgY29uc3Qgc3VwcG9zaXRpb25zTGVuZ3RoID0gdGhpcy5zdXBwb3NpdGlvbnMubGVuZ3RoLFxuICAgICAgICAgIHVuY29uZGl0aW9uYWwgPSAoc3VwcG9zaXRpb25zTGVuZ3RoID09PSAwKTtcblxuICAgIHJldHVybiB1bmNvbmRpdGlvbmFsO1xuICB9XG5cbiAgY29tcGFyZVJlZmVyZW5jZShyZWZlcmVuY2UpIHtcbiAgICBjb25zdCBsYWJlbCA9IHRoaXMuZ2V0TGFiZWwoKSxcbiAgICAgICAgICBsYWJlbENvbXBhcmVzVG9SZWZmZXJlbmNlID0gbGFiZWwuY29tcGFyZVJlZmVyZW5jZShyZWZlcmVuY2UpLFxuICAgICAgICAgIGNvbXBhcmVzVG9SZWZlcmVuY2UgPSBsYWJlbENvbXBhcmVzVG9SZWZmZXJlbmNlOyAgLy8vXG5cbiAgICByZXR1cm4gY29tcGFyZXNUb1JlZmVyZW5jZTtcbiAgfVxuXG4gIGFzeW5jIHZlcmlmeShjb250ZXh0KSB7XG4gICAgbGV0IHZlcmlmaWVzID0gZmFsc2U7XG5cbiAgICBjb25zdCB0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7dG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nfScgdG9wIGxldmVsIG1ldGEgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICBhd2FpdCBlbmNsb3NlKGFzeW5jIChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCBsYWJlbFZlcmlmaWVzID0gdGhpcy52ZXJpZnlMYWJlbChjb250ZXh0KTtcblxuICAgICAgaWYgKGxhYmVsVmVyaWZpZXMpIHtcbiAgICAgICAgY29uc3Qgc3VwcG9zaXRpb25zVmVyaWZ5ID0gYXdhaXQgdGhpcy52ZXJpZnlTdXBwb3NpdGlvbnMoY29udGV4dCk7XG5cbiAgICAgICAgaWYgKHN1cHBvc2l0aW9uc1ZlcmlmeSkge1xuICAgICAgICAgIGNvbnN0IGRlZHVjdGlvblZlcmlmaWVzID0gYXdhaXQgdGhpcy52ZXJpZnlEZWR1Y3Rpb24oY29udGV4dCk7XG5cbiAgICAgICAgICBpZiAoZGVkdWN0aW9uVmVyaWZpZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb29mVmVyaWZpZXMgPSBhd2FpdCB0aGlzLnZlcmlmeVByb29mKGNvbnRleHQpO1xuXG4gICAgICAgICAgICBpZiAocHJvb2ZWZXJpZmllcykge1xuICAgICAgICAgICAgICB2ZXJpZmllcyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgdGhpcy5tZXRhTGV2ZWxBc3N1bXB0aW9ucywgY29udGV4dCk7XG5cbiAgICBpZiAodmVyaWZpZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHt0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmd9JyB0b3AgbGV2ZWwgbWV0YSBhc3NlcnRpb24uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZlcmlmaWVzO1xuICB9XG5cbiAgdmVyaWZ5TGFiZWwoY29udGV4dCkge1xuICAgIGxldCBsYWJlbFZlcmlmaWVzO1xuXG4gICAgY29uc3QgdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKSwgIC8vL1xuICAgICAgICAgIGxhYmVsU3RyaW5nID0gdGhpcy5sYWJlbC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7dG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nfScgdG9wIGxldmVsIG1ldGEtYXNzZXJ0aW9uJ3MgJyR7bGFiZWxTdHJpbmd9JyBsYWJlbC4uLmApO1xuXG4gICAgbGFiZWxWZXJpZmllcyA9IHRoaXMubGFiZWwudmVyaWZ5KCk7XG5cbiAgICBpZiAobGFiZWxWZXJpZmllcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3RvcExldmVsTWV0YUFzc2VydGlvblN0cmluZ30nIHRvcCBsZXZlbCBtZXRhLWFzc2VydGlvbidzICcke2xhYmVsU3RyaW5nfScgbGFiZWwuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxhYmVsVmVyaWZpZXM7XG4gIH1cblxuICBhc3luYyB2ZXJpZnlQcm9vZihjb250ZXh0KSB7XG4gICAgbGV0IHByb29mVmVyaWZpZXM7XG5cbiAgICBjb25zdCB0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3RvcExldmVsTWV0YUFzc2VydGlvblN0cmluZ30nIHRvcCBsZXZlbCBtZXRhLWFzc2VydGlvbidzIHByb29mLi4uYCk7XG5cbiAgICBjb25zdCBzdGF0ZW1lbnQgPSB0aGlzLmRlZHVjdGlvbi5nZXRTdGF0ZW1lbnQoKTtcblxuICAgIHByb29mVmVyaWZpZXMgPSBhd2FpdCB0aGlzLnByb29mLnZlcmlmeShzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gICAgaWYgKHByb29mVmVyaWZpZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHt0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmd9JyB0b3AgbGV2ZWwgbWV0YS1hc3NlcnRpb24ncyBwcm9vZi5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvb2ZWZXJpZmllcztcbiAgfVxuXG4gIGFzeW5jIHZlcmlmeURlZHVjdGlvbihjb250ZXh0KSB7XG4gICAgbGV0IGRlZHVjdGlvblZlcmlmaWVzO1xuXG4gICAgY29uc3QgZGVkdWN0aW9uU3RyaW5nID0gdGhpcy5kZWR1Y3Rpb24uZ2V0U3RyaW5nKCksXG4gICAgICAgICAgdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3RvcExldmVsTWV0YUFzc2VydGlvblN0cmluZ30nIHRvcCBsZXZlbCBtZXRhIGFzc2VydGlvbidzICcke2RlZHVjdGlvblN0cmluZ30nIGRlZHVjdGlvbi4uLmApO1xuXG4gICAgZGVkdWN0aW9uVmVyaWZpZXMgPSBhd2FpdCB0aGlzLmRlZHVjdGlvbi52ZXJpZnkoY29udGV4dCk7XG5cbiAgICBpZiAoZGVkdWN0aW9uVmVyaWZpZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHt0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmd9JyB0b3AgbGV2ZWwgbWV0YSBhc3NlcnRpb24ncyAnJHtkZWR1Y3Rpb25TdHJpbmd9JyBkZWR1Y3Rpb24uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlZHVjdGlvblZlcmlmaWVzO1xuICB9XG5cbiAgYXN5bmMgdmVyaWZ5U3VwcG9zaXRpb24oc3VwcG9zaXRpb24sIGNvbnRleHQpIHtcbiAgICBsZXQgc3VwcG9zaXRpb25WZXJpZmllcztcblxuICAgIGNvbnN0IHN1cHBvc2l0aW9uU3RyaW5nID0gc3VwcG9zaXRpb24uZ2V0U3RyaW5nKCksXG4gICAgICAgICAgdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHt0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmd9JyB0b3AgbGV2ZWwgbWV0YS1hc3NlcnRpb24ncyAnJHtzdXBwb3NpdGlvblN0cmluZ30nIHN1cHBvc2l0aW9uLi4uYCk7XG5cbiAgICBzdXBwb3NpdGlvblZlcmlmaWVzID0gYXdhaXQgc3VwcG9zaXRpb24udmVyaWZ5KGNvbnRleHQpXG5cbiAgICBpZiAoc3VwcG9zaXRpb25WZXJpZmllcykge1xuICAgICAgY29uc3Qgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uID0gc3VwcG9zaXRpb247ICAvLy8vXG5cbiAgICAgIGNvbnRleHQuYXNzaWduQXNzaWdubWVudHMoKTtcblxuICAgICAgY29udGV4dC5hZGRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24oc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uKTtcbiAgICB9XG5cbiAgICBpZiAoc3VwcG9zaXRpb25WZXJpZmllcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3RvcExldmVsTWV0YUFzc2VydGlvblN0cmluZ30nIHRvcCBsZXZlbCBtZXRhLWFzc2VydGlvbidzICcke3N1cHBvc2l0aW9uU3RyaW5nfScgc3VwcG9zaXRpb24uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1cHBvc2l0aW9uVmVyaWZpZXM7XG4gIH1cblxuICBhc3luYyB2ZXJpZnlTdXBwb3NpdGlvbnMoY29udGV4dCkge1xuICAgIGxldCBzdXBwb3NpdGlvbnNWZXJpZnk7XG5cbiAgICBjb25zdCB0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3RvcExldmVsTWV0YUFzc2VydGlvblN0cmluZ30nIHRvcCBsZXZlbCBtZXRhLWFzc2VydGlvbidzIHN1cHBvc2l0aW9ucy4uLmApO1xuXG4gICAgc3VwcG9zaXRpb25zVmVyaWZ5ID0gYXdhaXQgYXN5bmNGb3J3YXJkc0V2ZXJ5KHRoaXMuc3VwcG9zaXRpb25zLCBhc3luYyAoc3VwcG9zaXRpb24pID0+IHtcbiAgICAgIGNvbnN0IHN1cHBvc2l0aW9uVmVyaWZpZXMgPSBhd2FpdCB0aGlzLnZlcmlmeVN1cHBvc2l0aW9uKHN1cHBvc2l0aW9uLCBjb250ZXh0KTtcblxuICAgICAgaWYgKHN1cHBvc2l0aW9uVmVyaWZpZXMpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoc3VwcG9zaXRpb25zVmVyaWZ5KSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7dG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nfScgdG9wIGxldmVsIG1ldGEtYXNzZXJ0aW9uJ3Mgc3VwcG9zaXRpb25zLmApO1xuICAgIH1cblxuICAgIHJldHVybiBzdXBwb3NpdGlvbnNWZXJpZnk7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgY29uc3QgbGFiZWxKU09OID0gbGFiZWxUb0xhYmVsSlNPTih0aGlzLmxhYmVsKSxcbiAgICAgICAgICBkZWR1Y3Rpb25KU09OID0gZGVkdWN0aW9uVG9EZWR1Y3Rpb25KU09OKHRoaXMuZGVkdWN0aW9uKSxcbiAgICAgICAgICBzdXBwb3NpdGlvbnNKU09OID0gc3VwcG9zaXRpb25zVG9TdXBwb3NpdGlvbnNKU09OKHRoaXMuc3VwcG9zaXRpb25zKSxcbiAgICAgICAgICBtZXRhTGV2ZWxBc3N1bXB0aW9uc0pTT04gPSBtZXRhTGV2ZWxBc3N1bXB0aW9uc1RvTWV0YUxldmVsQXNzdW1wdGlvbnNKU09OKHRoaXMubWV0YUxldmVsQXNzdW1wdGlvbnMpLFxuICAgICAgICAgIHN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7XG5cbiAgICBsZXQgYnJlYWtQb2ludDtcblxuICAgIGJyZWFrUG9pbnQgPSB0aGlzLmdldEJyZWFrUG9pbnQoKTtcblxuICAgIGNvbnN0IGJyZWFrUG9pbnRKU09OID0gYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04oYnJlYWtQb2ludCk7XG5cbiAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEpTT047ICAvLy9cblxuICAgIGNvbnN0IGxhYmVsID0gbGFiZWxKU09OLCAgLy8vXG4gICAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uSlNPTiwgIC8vL1xuICAgICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0pTT04sICAvLy9cbiAgICAgICAgICBtZXRhTGV2ZWxBc3N1bXB0aW9ucyA9IG1ldGFMZXZlbEFzc3VtcHRpb25zSlNPTiwgIC8vL1xuICAgICAgICAgIGpzb24gPSB7XG4gICAgICAgICAgICBzdHJpbmcsXG4gICAgICAgICAgICBicmVha1BvaW50LFxuICAgICAgICAgICAgbGFiZWwsXG4gICAgICAgICAgICBkZWR1Y3Rpb24sXG4gICAgICAgICAgICBzdXBwb3NpdGlvbnMsXG4gICAgICAgICAgICBtZXRhTGV2ZWxBc3N1bXB0aW9uc1xuICAgICAgICAgIH07XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tSlNPTihDbGFzcywganNvbiwgY29udGV4dCkge1xuICAgIGNvbnN0IGxhYmVsID0gbGFiZWxGcm9tSlNPTihqc29uLCBjb250ZXh0KSxcbiAgICAgICAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25Gcm9tSlNPTihqc29uLCBjb250ZXh0KSxcbiAgICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tSlNPTihqc29uLCBjb250ZXh0KSxcbiAgICAgICAgICBtZXRhTGV2ZWxBc3N1bXB0aW9ucyA9IG1ldGFMZXZlbEFzc3VtcHRpb25zRnJvbUpTT04oanNvbiwgY29udGV4dCksXG4gICAgICAgICAgc3RyaW5nID0gdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nRnJvbUxhYmVsU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVsLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiksXG4gICAgICAgICAgbm9kZSA9IG51bGwsXG4gICAgICAgICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRGcm9tSlNPTihqc29uKSxcbiAgICAgICAgICBwcm9vZiA9IG51bGwsXG4gICAgICAgICAgdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uID0gbmV3IENsYXNzKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbGFiZWwsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uLCBwcm9vZiwgbWV0YUxldmVsQXNzdW1wdGlvbnMpO1xuXG4gICAgcmV0dXJuIHRvcExldmVsTWV0YUFzc2VydGlvbjtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIlRvcExldmVsTWV0YUFzc2VydGlvbiIsImFzeW5jRm9yd2FyZHNFdmVyeSIsImFzeW5jaHJvbm91c1V0aWxpdGllcyIsIkVsZW1lbnQiLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJsYWJlbCIsInN1cHBvc2l0aW9ucyIsImRlZHVjdGlvbiIsInByb29mIiwibWV0YUxldmVsQXNzdW1wdGlvbnMiLCJnZXRMYWJlbCIsImdldFN1cHBvc2l0aW9ucyIsImdldERlZHVjdGlvbiIsImdldFByb29mIiwiZ2V0TWV0YUxldmVsQXNzdW1wdGlvbnMiLCJnZXRTdGF0ZW1lbnQiLCJzdGF0ZW1lbnQiLCJ1bmNvbmRpdGlvbmFsIiwiaXNVbmNvbmRpdGlvbmFsIiwiZ2V0U3RhdGVtZW50cyIsInN0YXRlbWVudHMiLCJzdXBwb3NpdGlvblN0YXRlbWVudHMiLCJtYXAiLCJzdXBwb3NpdGlvbiIsInN1cHBvc2l0aW9uU3RhdGVtZW50IiwiZGVkdWN0aW9uU3RhdGVtZW50Iiwic3VwcG9zaXRpb25zTGVuZ3RoIiwibGVuZ3RoIiwiY29tcGFyZVJlZmVyZW5jZSIsInJlZmVyZW5jZSIsImxhYmVsQ29tcGFyZXNUb1JlZmZlcmVuY2UiLCJjb21wYXJlc1RvUmVmZXJlbmNlIiwidmVyaWZ5IiwidmVyaWZpZXMiLCJ0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsImVuY2xvc2UiLCJsYWJlbFZlcmlmaWVzIiwidmVyaWZ5TGFiZWwiLCJzdXBwb3NpdGlvbnNWZXJpZnkiLCJ2ZXJpZnlTdXBwb3NpdGlvbnMiLCJkZWR1Y3Rpb25WZXJpZmllcyIsInZlcmlmeURlZHVjdGlvbiIsInByb29mVmVyaWZpZXMiLCJ2ZXJpZnlQcm9vZiIsImRlYnVnIiwibGFiZWxTdHJpbmciLCJkZWR1Y3Rpb25TdHJpbmciLCJ2ZXJpZnlTdXBwb3NpdGlvbiIsInN1cHBvc2l0aW9uVmVyaWZpZXMiLCJzdXBwb3NpdGlvblN0cmluZyIsInN1YnByb29mT3JQcm9vZkFzc2VydGlvbiIsImFzc2lnbkFzc2lnbm1lbnRzIiwiYWRkU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uIiwidG9KU09OIiwibGFiZWxKU09OIiwibGFiZWxUb0xhYmVsSlNPTiIsImRlZHVjdGlvbkpTT04iLCJkZWR1Y3Rpb25Ub0RlZHVjdGlvbkpTT04iLCJzdXBwb3NpdGlvbnNKU09OIiwic3VwcG9zaXRpb25zVG9TdXBwb3NpdGlvbnNKU09OIiwibWV0YUxldmVsQXNzdW1wdGlvbnNKU09OIiwibWV0YUxldmVsQXNzdW1wdGlvbnNUb01ldGFMZXZlbEFzc3VtcHRpb25zSlNPTiIsImdldEJyZWFrUG9pbnQiLCJicmVha1BvaW50SlNPTiIsImJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIiwianNvbiIsImZyb21KU09OIiwiQ2xhc3MiLCJsYWJlbEZyb21KU09OIiwiZGVkdWN0aW9uRnJvbUpTT04iLCJzdXBwb3NpdGlvbnNGcm9tSlNPTiIsIm1ldGFMZXZlbEFzc3VtcHRpb25zRnJvbUpTT04iLCJ0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24i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
179
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L3RvcExldmVsTWV0YUFzc2VydGlvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgRWxlbWVudCwgYXN5bmNocm9ub3VzVXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgeyBlbmNhcHN1bGF0ZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGV4dFwiO1xuaW1wb3J0IHsgYnJlYWtQb2ludEZyb21KU09OLCBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiB9IGZyb20gXCIuLi91dGlsaXRpZXMvYnJlYWtQb2ludFwiO1xuaW1wb3J0IHsgdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nRnJvbUxhYmVsU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9zdHJpbmdcIjtcbmltcG9ydCB7IGxhYmVsRnJvbUpTT04sXG4gICAgICAgICBsYWJlbFRvTGFiZWxKU09OLFxuICAgICAgICAgZGVkdWN0aW9uRnJvbUpTT04sXG4gICAgICAgICBzdXBwb3NpdGlvbnNGcm9tSlNPTixcbiAgICAgICAgIGRlZHVjdGlvblRvRGVkdWN0aW9uSlNPTixcbiAgICAgICAgIG1ldGFMZXZlbEFzc3VtcHRpb25zRnJvbUpTT04sXG4gICAgICAgICBzdXBwb3NpdGlvbnNUb1N1cHBvc2l0aW9uc0pTT04sXG4gICAgICAgICBtZXRhTGV2ZWxBc3N1bXB0aW9uc1RvTWV0YUxldmVsQXNzdW1wdGlvbnNKU09OIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9qc29uXCI7XG5cbmNvbnN0IHsgYXN5bmNGb3J3YXJkc0V2ZXJ5IH0gPSBhc3luY2hyb25vdXNVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRvcExldmVsTWV0YUFzc2VydGlvbiBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxhYmVsLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIG1ldGFMZXZlbEFzc3VtcHRpb25zKSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICAgIHRoaXMubGFiZWwgPSBsYWJlbDtcbiAgICB0aGlzLnN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9ucztcbiAgICB0aGlzLmRlZHVjdGlvbiA9IGRlZHVjdGlvbjtcbiAgICB0aGlzLnByb29mID0gcHJvb2Y7XG4gICAgdGhpcy5tZXRhTGV2ZWxBc3N1bXB0aW9ucyA9IG1ldGFMZXZlbEFzc3VtcHRpb25zO1xuICB9XG5cbiAgZ2V0TGFiZWwoKSB7XG4gICAgcmV0dXJuIHRoaXMubGFiZWw7XG4gIH1cblxuICBnZXRTdXBwb3NpdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3VwcG9zaXRpb25zO1xuICB9XG5cbiAgZ2V0RGVkdWN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmRlZHVjdGlvbjtcbiAgfVxuXG4gIGdldFByb29mKCkge1xuICAgIHJldHVybiB0aGlzLnByb29mO1xuICB9XG5cbiAgZ2V0TWV0YUxldmVsQXNzdW1wdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMubWV0YUxldmVsQXNzdW1wdGlvbnM7XG4gIH1cblxuICBnZXRTdGF0ZW1lbnQoKSB7XG4gICAgbGV0IHN0YXRlbWVudCA9IG51bGw7XG5cbiAgICBjb25zdCB1bmNvbmRpdGlvbmFsID0gdGhpcy5pc1VuY29uZGl0aW9uYWwoKTtcblxuICAgIGlmICh1bmNvbmRpdGlvbmFsKSB7XG4gICAgICBzdGF0ZW1lbnQgPSB0aGlzLmRlZHVjdGlvbi5nZXRTdGF0ZW1lbnQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdGVtZW50O1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50cygpIHtcbiAgICBsZXQgc3RhdGVtZW50cyA9IG51bGw7XG5cbiAgICBjb25zdCB1bmNvbmRpdGlvbmFsID0gdGhpcy5pc1VuY29uZGl0aW9uYWwoKTtcblxuICAgIGlmICghdW5jb25kaXRpb25hbCkge1xuICAgICAgY29uc3Qgc3VwcG9zaXRpb25TdGF0ZW1lbnRzID0gdGhpcy5zdXBwb3NpdGlvbnMubWFwKChzdXBwb3NpdGlvbikgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBzdXBwb3NpdGlvblN0YXRlbWVudCA9IHN1cHBvc2l0aW9uLmdldFN0YXRlbWVudCgpO1xuXG4gICAgICAgICAgICAgIHJldHVybiBzdXBwb3NpdGlvblN0YXRlbWVudDtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgZGVkdWN0aW9uU3RhdGVtZW50ID0gdGhpcy5kZWR1Y3Rpb24uZ2V0U3RhdGVtZW50KCk7XG5cbiAgICAgIHN0YXRlbWVudHMgPSBbXG4gICAgICAgIC4uLnN1cHBvc2l0aW9uU3RhdGVtZW50cyxcbiAgICAgICAgZGVkdWN0aW9uU3RhdGVtZW50XG4gICAgICBdO1xuICAgIH1cblxuICAgIHJldHVybiBzdGF0ZW1lbnRzO1xuICB9XG5cbiAgaXNVbmNvbmRpdGlvbmFsKCkge1xuICAgIGNvbnN0IHN1cHBvc2l0aW9uc0xlbmd0aCA9IHRoaXMuc3VwcG9zaXRpb25zLmxlbmd0aCxcbiAgICAgICAgICB1bmNvbmRpdGlvbmFsID0gKHN1cHBvc2l0aW9uc0xlbmd0aCA9PT0gMCk7XG5cbiAgICByZXR1cm4gdW5jb25kaXRpb25hbDtcbiAgfVxuXG4gIGNvbXBhcmVSZWZlcmVuY2UocmVmZXJlbmNlKSB7XG4gICAgY29uc3QgbGFiZWwgPSB0aGlzLmdldExhYmVsKCksXG4gICAgICAgICAgbGFiZWxDb21wYXJlc1RvUmVmZmVyZW5jZSA9IGxhYmVsLmNvbXBhcmVSZWZlcmVuY2UocmVmZXJlbmNlKSxcbiAgICAgICAgICBjb21wYXJlc1RvUmVmZXJlbmNlID0gbGFiZWxDb21wYXJlc1RvUmVmZmVyZW5jZTsgIC8vL1xuXG4gICAgcmV0dXJuIGNvbXBhcmVzVG9SZWZlcmVuY2U7XG4gIH1cblxuICBhc3luYyB2ZXJpZnkoY29udGV4dCkge1xuICAgIGxldCB2ZXJpZmllcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3RvcExldmVsTWV0YUFzc2VydGlvblN0cmluZ30nIHRvcCBsZXZlbCBtZXRhIGFzc2VydGlvbi4uLmApO1xuXG4gICAgYXdhaXQgZW5jYXBzdWxhdGUoYXN5bmMgKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IGxhYmVsVmVyaWZpZXMgPSB0aGlzLnZlcmlmeUxhYmVsKGNvbnRleHQpO1xuXG4gICAgICBpZiAobGFiZWxWZXJpZmllcykge1xuICAgICAgICBjb25zdCBzdXBwb3NpdGlvbnNWZXJpZnkgPSBhd2FpdCB0aGlzLnZlcmlmeVN1cHBvc2l0aW9ucyhjb250ZXh0KTtcblxuICAgICAgICBpZiAoc3VwcG9zaXRpb25zVmVyaWZ5KSB7XG4gICAgICAgICAgY29uc3QgZGVkdWN0aW9uVmVyaWZpZXMgPSBhd2FpdCB0aGlzLnZlcmlmeURlZHVjdGlvbihjb250ZXh0KTtcblxuICAgICAgICAgIGlmIChkZWR1Y3Rpb25WZXJpZmllcykge1xuICAgICAgICAgICAgY29uc3QgcHJvb2ZWZXJpZmllcyA9IGF3YWl0IHRoaXMudmVyaWZ5UHJvb2YoY29udGV4dCk7XG5cbiAgICAgICAgICAgIGlmIChwcm9vZlZlcmlmaWVzKSB7XG4gICAgICAgICAgICAgIHZlcmlmaWVzID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCB0aGlzLm1ldGFMZXZlbEFzc3VtcHRpb25zLCBjb250ZXh0KTtcblxuICAgIGlmICh2ZXJpZmllcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3RvcExldmVsTWV0YUFzc2VydGlvblN0cmluZ30nIHRvcCBsZXZlbCBtZXRhIGFzc2VydGlvbi5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmVyaWZpZXM7XG4gIH1cblxuICB2ZXJpZnlMYWJlbChjb250ZXh0KSB7XG4gICAgbGV0IGxhYmVsVmVyaWZpZXM7XG5cbiAgICBjb25zdCB0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLCAgLy8vXG4gICAgICAgICAgbGFiZWxTdHJpbmcgPSB0aGlzLmxhYmVsLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHt0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmd9JyB0b3AgbGV2ZWwgbWV0YS1hc3NlcnRpb24ncyAnJHtsYWJlbFN0cmluZ30nIGxhYmVsLi4uYCk7XG5cbiAgICBsYWJlbFZlcmlmaWVzID0gdGhpcy5sYWJlbC52ZXJpZnkoKTtcblxuICAgIGlmIChsYWJlbFZlcmlmaWVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7dG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nfScgdG9wIGxldmVsIG1ldGEtYXNzZXJ0aW9uJ3MgJyR7bGFiZWxTdHJpbmd9JyBsYWJlbC5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGFiZWxWZXJpZmllcztcbiAgfVxuXG4gIGFzeW5jIHZlcmlmeVByb29mKGNvbnRleHQpIHtcbiAgICBsZXQgcHJvb2ZWZXJpZmllcztcblxuICAgIGNvbnN0IHRvcExldmVsTWV0YUFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7dG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nfScgdG9wIGxldmVsIG1ldGEtYXNzZXJ0aW9uJ3MgcHJvb2YuLi5gKTtcblxuICAgIGNvbnN0IHN0YXRlbWVudCA9IHRoaXMuZGVkdWN0aW9uLmdldFN0YXRlbWVudCgpO1xuXG4gICAgcHJvb2ZWZXJpZmllcyA9IGF3YWl0IHRoaXMucHJvb2YudmVyaWZ5KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgICBpZiAocHJvb2ZWZXJpZmllcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3RvcExldmVsTWV0YUFzc2VydGlvblN0cmluZ30nIHRvcCBsZXZlbCBtZXRhLWFzc2VydGlvbidzIHByb29mLmApO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9vZlZlcmlmaWVzO1xuICB9XG5cbiAgYXN5bmMgdmVyaWZ5RGVkdWN0aW9uKGNvbnRleHQpIHtcbiAgICBsZXQgZGVkdWN0aW9uVmVyaWZpZXM7XG5cbiAgICBjb25zdCBkZWR1Y3Rpb25TdHJpbmcgPSB0aGlzLmRlZHVjdGlvbi5nZXRTdHJpbmcoKSxcbiAgICAgICAgICB0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7dG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nfScgdG9wIGxldmVsIG1ldGEgYXNzZXJ0aW9uJ3MgJyR7ZGVkdWN0aW9uU3RyaW5nfScgZGVkdWN0aW9uLi4uYCk7XG5cbiAgICBkZWR1Y3Rpb25WZXJpZmllcyA9IGF3YWl0IHRoaXMuZGVkdWN0aW9uLnZlcmlmeShjb250ZXh0KTtcblxuICAgIGlmIChkZWR1Y3Rpb25WZXJpZmllcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3RvcExldmVsTWV0YUFzc2VydGlvblN0cmluZ30nIHRvcCBsZXZlbCBtZXRhIGFzc2VydGlvbidzICcke2RlZHVjdGlvblN0cmluZ30nIGRlZHVjdGlvbi5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVkdWN0aW9uVmVyaWZpZXM7XG4gIH1cblxuICBhc3luYyB2ZXJpZnlTdXBwb3NpdGlvbihzdXBwb3NpdGlvbiwgY29udGV4dCkge1xuICAgIGxldCBzdXBwb3NpdGlvblZlcmlmaWVzO1xuXG4gICAgY29uc3Qgc3VwcG9zaXRpb25TdHJpbmcgPSBzdXBwb3NpdGlvbi5nZXRTdHJpbmcoKSxcbiAgICAgICAgICB0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3RvcExldmVsTWV0YUFzc2VydGlvblN0cmluZ30nIHRvcCBsZXZlbCBtZXRhLWFzc2VydGlvbidzICcke3N1cHBvc2l0aW9uU3RyaW5nfScgc3VwcG9zaXRpb24uLi5gKTtcblxuICAgIHN1cHBvc2l0aW9uVmVyaWZpZXMgPSBhd2FpdCBzdXBwb3NpdGlvbi52ZXJpZnkoY29udGV4dClcblxuICAgIGlmIChzdXBwb3NpdGlvblZlcmlmaWVzKSB7XG4gICAgICBjb25zdCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24gPSBzdXBwb3NpdGlvbjsgIC8vLy9cblxuICAgICAgY29udGV4dC5hc3NpZ25Bc3NpZ25tZW50cygpO1xuXG4gICAgICBjb250ZXh0LmFkZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbihzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24pO1xuICAgIH1cblxuICAgIGlmIChzdXBwb3NpdGlvblZlcmlmaWVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7dG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nfScgdG9wIGxldmVsIG1ldGEtYXNzZXJ0aW9uJ3MgJyR7c3VwcG9zaXRpb25TdHJpbmd9JyBzdXBwb3NpdGlvbi5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3VwcG9zaXRpb25WZXJpZmllcztcbiAgfVxuXG4gIGFzeW5jIHZlcmlmeVN1cHBvc2l0aW9ucyhjb250ZXh0KSB7XG4gICAgbGV0IHN1cHBvc2l0aW9uc1ZlcmlmeTtcblxuICAgIGNvbnN0IHRvcExldmVsTWV0YUFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7dG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nfScgdG9wIGxldmVsIG1ldGEtYXNzZXJ0aW9uJ3Mgc3VwcG9zaXRpb25zLi4uYCk7XG5cbiAgICBzdXBwb3NpdGlvbnNWZXJpZnkgPSBhd2FpdCBhc3luY0ZvcndhcmRzRXZlcnkodGhpcy5zdXBwb3NpdGlvbnMsIGFzeW5jIChzdXBwb3NpdGlvbikgPT4ge1xuICAgICAgY29uc3Qgc3VwcG9zaXRpb25WZXJpZmllcyA9IGF3YWl0IHRoaXMudmVyaWZ5U3VwcG9zaXRpb24oc3VwcG9zaXRpb24sIGNvbnRleHQpO1xuXG4gICAgICBpZiAoc3VwcG9zaXRpb25WZXJpZmllcykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChzdXBwb3NpdGlvbnNWZXJpZnkpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHt0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmd9JyB0b3AgbGV2ZWwgbWV0YS1hc3NlcnRpb24ncyBzdXBwb3NpdGlvbnMuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1cHBvc2l0aW9uc1ZlcmlmeTtcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICBjb25zdCBsYWJlbEpTT04gPSBsYWJlbFRvTGFiZWxKU09OKHRoaXMubGFiZWwpLFxuICAgICAgICAgIGRlZHVjdGlvbkpTT04gPSBkZWR1Y3Rpb25Ub0RlZHVjdGlvbkpTT04odGhpcy5kZWR1Y3Rpb24pLFxuICAgICAgICAgIHN1cHBvc2l0aW9uc0pTT04gPSBzdXBwb3NpdGlvbnNUb1N1cHBvc2l0aW9uc0pTT04odGhpcy5zdXBwb3NpdGlvbnMpLFxuICAgICAgICAgIG1ldGFMZXZlbEFzc3VtcHRpb25zSlNPTiA9IG1ldGFMZXZlbEFzc3VtcHRpb25zVG9NZXRhTGV2ZWxBc3N1bXB0aW9uc0pTT04odGhpcy5tZXRhTGV2ZWxBc3N1bXB0aW9ucyksXG4gICAgICAgICAgc3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgIGxldCBicmVha1BvaW50O1xuXG4gICAgYnJlYWtQb2ludCA9IHRoaXMuZ2V0QnJlYWtQb2ludCgpO1xuXG4gICAgY29uc3QgYnJlYWtQb2ludEpTT04gPSBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTihicmVha1BvaW50KTtcblxuICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50SlNPTjsgIC8vL1xuXG4gICAgY29uc3QgbGFiZWwgPSBsYWJlbEpTT04sICAvLy9cbiAgICAgICAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25KU09OLCAgLy8vXG4gICAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zSlNPTiwgIC8vL1xuICAgICAgICAgIG1ldGFMZXZlbEFzc3VtcHRpb25zID0gbWV0YUxldmVsQXNzdW1wdGlvbnNKU09OLCAgLy8vXG4gICAgICAgICAganNvbiA9IHtcbiAgICAgICAgICAgIHN0cmluZyxcbiAgICAgICAgICAgIGJyZWFrUG9pbnQsXG4gICAgICAgICAgICBsYWJlbCxcbiAgICAgICAgICAgIGRlZHVjdGlvbixcbiAgICAgICAgICAgIHN1cHBvc2l0aW9ucyxcbiAgICAgICAgICAgIG1ldGFMZXZlbEFzc3VtcHRpb25zXG4gICAgICAgICAgfTtcblxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgc3RhdGljIGZyb21KU09OKENsYXNzLCBqc29uLCBjb250ZXh0KSB7XG4gICAgY29uc3QgbGFiZWwgPSBsYWJlbEZyb21KU09OKGpzb24sIGNvbnRleHQpLFxuICAgICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21KU09OKGpzb24sIGNvbnRleHQpLFxuICAgICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21KU09OKGpzb24sIGNvbnRleHQpLFxuICAgICAgICAgIG1ldGFMZXZlbEFzc3VtcHRpb25zID0gbWV0YUxldmVsQXNzdW1wdGlvbnNGcm9tSlNPTihqc29uLCBjb250ZXh0KSxcbiAgICAgICAgICBzdHJpbmcgPSB0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24obGFiZWwsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uKSxcbiAgICAgICAgICBub2RlID0gbnVsbCxcbiAgICAgICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEZyb21KU09OKGpzb24pLFxuICAgICAgICAgIHByb29mID0gbnVsbCxcbiAgICAgICAgICB0b3BMZXZlbE1ldGFBc3NlcnRpb24gPSBuZXcgQ2xhc3MoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBsYWJlbCwgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24sIHByb29mLCBtZXRhTGV2ZWxBc3N1bXB0aW9ucyk7XG5cbiAgICByZXR1cm4gdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uO1xuICB9XG59XG4iXSwibmFtZXMiOlsiVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uIiwiYXN5bmNGb3J3YXJkc0V2ZXJ5IiwiYXN5bmNocm9ub3VzVXRpbGl0aWVzIiwiRWxlbWVudCIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsImxhYmVsIiwic3VwcG9zaXRpb25zIiwiZGVkdWN0aW9uIiwicHJvb2YiLCJtZXRhTGV2ZWxBc3N1bXB0aW9ucyIsImdldExhYmVsIiwiZ2V0U3VwcG9zaXRpb25zIiwiZ2V0RGVkdWN0aW9uIiwiZ2V0UHJvb2YiLCJnZXRNZXRhTGV2ZWxBc3N1bXB0aW9ucyIsImdldFN0YXRlbWVudCIsInN0YXRlbWVudCIsInVuY29uZGl0aW9uYWwiLCJpc1VuY29uZGl0aW9uYWwiLCJnZXRTdGF0ZW1lbnRzIiwic3RhdGVtZW50cyIsInN1cHBvc2l0aW9uU3RhdGVtZW50cyIsIm1hcCIsInN1cHBvc2l0aW9uIiwic3VwcG9zaXRpb25TdGF0ZW1lbnQiLCJkZWR1Y3Rpb25TdGF0ZW1lbnQiLCJzdXBwb3NpdGlvbnNMZW5ndGgiLCJsZW5ndGgiLCJjb21wYXJlUmVmZXJlbmNlIiwicmVmZXJlbmNlIiwibGFiZWxDb21wYXJlc1RvUmVmZmVyZW5jZSIsImNvbXBhcmVzVG9SZWZlcmVuY2UiLCJ2ZXJpZnkiLCJ2ZXJpZmllcyIsInRvcExldmVsTWV0YUFzc2VydGlvblN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwiZW5jYXBzdWxhdGUiLCJsYWJlbFZlcmlmaWVzIiwidmVyaWZ5TGFiZWwiLCJzdXBwb3NpdGlvbnNWZXJpZnkiLCJ2ZXJpZnlTdXBwb3NpdGlvbnMiLCJkZWR1Y3Rpb25WZXJpZmllcyIsInZlcmlmeURlZHVjdGlvbiIsInByb29mVmVyaWZpZXMiLCJ2ZXJpZnlQcm9vZiIsImRlYnVnIiwibGFiZWxTdHJpbmciLCJkZWR1Y3Rpb25TdHJpbmciLCJ2ZXJpZnlTdXBwb3NpdGlvbiIsInN1cHBvc2l0aW9uVmVyaWZpZXMiLCJzdXBwb3NpdGlvblN0cmluZyIsInN1YnByb29mT3JQcm9vZkFzc2VydGlvbiIsImFzc2lnbkFzc2lnbm1lbnRzIiwiYWRkU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uIiwidG9KU09OIiwibGFiZWxKU09OIiwibGFiZWxUb0xhYmVsSlNPTiIsImRlZHVjdGlvbkpTT04iLCJkZWR1Y3Rpb25Ub0RlZHVjdGlvbkpTT04iLCJzdXBwb3NpdGlvbnNKU09OIiwic3VwcG9zaXRpb25zVG9TdXBwb3NpdGlvbnNKU09OIiwibWV0YUxldmVsQXNzdW1wdGlvbnNKU09OIiwibWV0YUxldmVsQXNzdW1wdGlvbnNUb01ldGFMZXZlbEFzc3VtcHRpb25zSlNPTiIsImdldEJyZWFrUG9pbnQiLCJicmVha1BvaW50SlNPTiIsImJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIiwianNvbiIsImZyb21KU09OIiwiQ2xhc3MiLCJsYWJlbEZyb21KU09OIiwiZGVkdWN0aW9uRnJvbUpTT04iLCJzdXBwb3NpdGlvbnNGcm9tSlNPTiIsIm1ldGFMZXZlbEFzc3VtcHRpb25zRnJvbUpTT04iLCJ0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24iLCJicmVha1BvaW50RnJvbUpTT04iLCJ0b3BMZXZlbE1ldGFBc3NlcnRpb24iXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWtCQTs7O2VBQXFCQTs7O2dDQWhCMEI7eUJBRW5COzRCQUNtQzt3QkFDYztzQkFRZDtBQUUvRCxNQUFNLEVBQUVDLGtCQUFrQixFQUFFLEdBQUdDLHFDQUFxQjtBQUVyQyxNQUFNRiw4QkFBOEJHLHVCQUFPO0lBQ3hELFlBQVlDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLFVBQVUsRUFBRUMsS0FBSyxFQUFFQyxZQUFZLEVBQUVDLFNBQVMsRUFBRUMsS0FBSyxFQUFFQyxvQkFBb0IsQ0FBRTtRQUMxRyxLQUFLLENBQUNSLFNBQVNDLFFBQVFDLE1BQU1DO1FBRTdCLElBQUksQ0FBQ0MsS0FBSyxHQUFHQTtRQUNiLElBQUksQ0FBQ0MsWUFBWSxHQUFHQTtRQUNwQixJQUFJLENBQUNDLFNBQVMsR0FBR0E7UUFDakIsSUFBSSxDQUFDQyxLQUFLLEdBQUdBO1FBQ2IsSUFBSSxDQUFDQyxvQkFBb0IsR0FBR0E7SUFDOUI7SUFFQUMsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDTCxLQUFLO0lBQ25CO0lBRUFNLGtCQUFrQjtRQUNoQixPQUFPLElBQUksQ0FBQ0wsWUFBWTtJQUMxQjtJQUVBTSxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUNMLFNBQVM7SUFDdkI7SUFFQU0sV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDTCxLQUFLO0lBQ25CO0lBRUFNLDBCQUEwQjtRQUN4QixPQUFPLElBQUksQ0FBQ0wsb0JBQW9CO0lBQ2xDO0lBRUFNLGVBQWU7UUFDYixJQUFJQyxZQUFZO1FBRWhCLE1BQU1DLGdCQUFnQixJQUFJLENBQUNDLGVBQWU7UUFFMUMsSUFBSUQsZUFBZTtZQUNqQkQsWUFBWSxJQUFJLENBQUNULFNBQVMsQ0FBQ1EsWUFBWTtRQUN6QztRQUVBLE9BQU9DO0lBQ1Q7SUFFQUcsZ0JBQWdCO1FBQ2QsSUFBSUMsYUFBYTtRQUVqQixNQUFNSCxnQkFB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
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "dischargeStatements", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return dischargeStatements;
9
+ }
10
+ });
11
+ const _elements = /*#__PURE__*/ _interop_require_default(require("../elements"));
12
+ function _interop_require_default(obj) {
13
+ return obj && obj.__esModule ? obj : {
14
+ default: obj
15
+ };
16
+ }
17
+ function dischargeStatementAsTypeAssertion(statement, context) {
18
+ let dischargesStatementAsTypeAssertion = false;
19
+ const { TypeAssertion } = _elements.default;
20
+ const typeAssertion = TypeAssertion.fromStatement(statement, context);
21
+ if (typeAssertion !== null) {
22
+ const statementString = statement.getString();
23
+ context.trace(`Validating the '${statementString}' statement as a type assertion...`);
24
+ const discharges = typeAssertion.discharge(context); ///
25
+ if (discharges !== null) {
26
+ dischargesStatementAsTypeAssertion = true;
27
+ }
28
+ if (dischargesStatementAsTypeAssertion) {
29
+ context.debug(`...discharged the '${statementString}' statement as a type assertion.`);
30
+ }
31
+ }
32
+ return dischargesStatementAsTypeAssertion;
33
+ }
34
+ const dischargeStatements = [
35
+ dischargeStatementAsTypeAssertion
36
+ ];
37
+
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm9jZXNzL2Rpc2NoYXJnZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5mdW5jdGlvbiBkaXNjaGFyZ2VTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24oc3RhdGVtZW50LCBjb250ZXh0KSB7XG4gIGxldCBkaXNjaGFyZ2VzU3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgY29uc3QgeyBUeXBlQXNzZXJ0aW9uIH0gPSBlbGVtZW50cztcblxuICBjb25zdCB0eXBlQXNzZXJ0aW9uID0gVHlwZUFzc2VydGlvbi5mcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKHR5cGVBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSB0eXBlIGFzc2VydGlvbi4uLmApO1xuXG4gICAgY29uc3QgZGlzY2hhcmdlcyA9IHR5cGVBc3NlcnRpb24uZGlzY2hhcmdlKGNvbnRleHQpOyAgLy8vXG5cbiAgICBpZiAoZGlzY2hhcmdlcyAhPT0gbnVsbCkge1xuICAgICAgZGlzY2hhcmdlc1N0YXRlbWVudEFzVHlwZUFzc2VydGlvbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGRpc2NoYXJnZXNTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24pIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLmRpc2NoYXJnZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHR5cGUgYXNzZXJ0aW9uLmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkaXNjaGFyZ2VzU3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgY29uc3QgZGlzY2hhcmdlU3RhdGVtZW50cyA9IFtcbiAgZGlzY2hhcmdlU3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uXG5dO1xuIl0sIm5hbWVzIjpbImRpc2NoYXJnZVN0YXRlbWVudHMiLCJkaXNjaGFyZ2VTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24iLCJzdGF0ZW1lbnQiLCJjb250ZXh0IiwiZGlzY2hhcmdlc1N0YXRlbWVudEFzVHlwZUFzc2VydGlvbiIsIlR5cGVBc3NlcnRpb24iLCJlbGVtZW50cyIsInR5cGVBc3NlcnRpb24iLCJmcm9tU3RhdGVtZW50Iiwic3RhdGVtZW50U3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJkaXNjaGFyZ2VzIiwiZGlzY2hhcmdlIiwiZGVidWciXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQThCYUE7OztlQUFBQTs7O2lFQTVCUTs7Ozs7O0FBRXJCLFNBQVNDLGtDQUFrQ0MsU0FBUyxFQUFFQyxPQUFPO0lBQzNELElBQUlDLHFDQUFxQztJQUV6QyxNQUFNLEVBQUVDLGFBQWEsRUFBRSxHQUFHQyxpQkFBUTtJQUVsQyxNQUFNQyxnQkFBZ0JGLGNBQWNHLGFBQWEsQ0FBQ04sV0FBV0M7SUFFN0QsSUFBSUksa0JBQWtCLE1BQU07UUFDMUIsTUFBTUUsa0JBQWtCUCxVQUFVUSxTQUFTO1FBRTNDUCxRQUFRUSxLQUFLLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRUYsZ0JBQWdCLGtDQUFrQyxDQUFDO1FBRXBGLE1BQU1HLGFBQWFMLGNBQWNNLFNBQVMsQ0FBQ1YsVUFBVyxHQUFHO1FBRXpELElBQUlTLGVBQWUsTUFBTTtZQUN2QlIscUNBQXFDO1FBQ3ZDO1FBRUEsSUFBSUEsb0NBQW9DO1lBQ3RDRCxRQUFRVyxLQUFLLENBQUMsQ0FBQyxtQkFBbUIsRUFBRUwsZ0JBQWdCLGdDQUFnQyxDQUFDO1FBQ3ZGO0lBQ0Y7SUFFQSxPQUFPTDtBQUNUO0FBRU8sTUFBTUosc0JBQXNCO0lBQ2pDQztDQUNEIn0=
@@ -0,0 +1,228 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "unifySteps", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return unifySteps;
9
+ }
10
+ });
11
+ const _elements = /*#__PURE__*/ _interop_require_default(require("../elements"));
12
+ function _interop_require_default(obj) {
13
+ return obj && obj.__esModule ? obj : {
14
+ default: obj
15
+ };
16
+ }
17
+ async function unifyStepWithRule(step, context) {
18
+ let stepUnifiesWithRule = false;
19
+ const reference = step.getReference();
20
+ if (reference !== null) {
21
+ const rule = context.findRuleByReference(reference);
22
+ if (rule !== null) {
23
+ const stepString = step.getString(), ruleString = rule.getString();
24
+ context.trace(`Unifying the '${stepString}' step with the '${ruleString}' rule...`);
25
+ const subproofOrProofAssertions = context.getSubproofOrProofAssertions(), stepAndSubproofOrProofAssertionsUnify = await rule.unifyStepAndSubproofOrProofAssertions(step, subproofOrProofAssertions, context);
26
+ if (stepAndSubproofOrProofAssertionsUnify) {
27
+ stepUnifiesWithRule = true;
28
+ }
29
+ if (stepUnifiesWithRule) {
30
+ context.debug(`...unified the '${stepString}' step with the '${ruleString}' rule.`);
31
+ }
32
+ }
33
+ }
34
+ return stepUnifiesWithRule;
35
+ }
36
+ async function unifyStepWithTopLevelAssertion(step, context) {
37
+ let stepUnifiesWithTopLevelAssertion = false;
38
+ const reference = step.getReference();
39
+ if (reference !== null) {
40
+ const topLevelAssertion = context.findTopLevelAssertionByReference(reference);
41
+ if (topLevelAssertion !== null) {
42
+ const satisfiable = topLevelAssertion.isSatisfiable();
43
+ if (!satisfiable) {
44
+ const stepString = step.getString(), topLevelAssertionString = reference.getString();
45
+ context.trace(`Unifying the '${stepString}' step with the '${topLevelAssertionString}' top level assertion...`);
46
+ const subproofOrProofAssertions = context.getSubproofOrProofAssertions(), stepAndSubproofOrProofAssertionsUnify = await topLevelAssertion.unifyStepAndSubproofOrProofAssertions(step, subproofOrProofAssertions, context);
47
+ if (stepAndSubproofOrProofAssertionsUnify) {
48
+ stepUnifiesWithTopLevelAssertion = true;
49
+ }
50
+ if (stepUnifiesWithTopLevelAssertion) {
51
+ context.debug(`...unified the '${stepString}' step with the '${topLevelAssertionString}' top level assertion.`);
52
+ }
53
+ }
54
+ }
55
+ }
56
+ return stepUnifiesWithTopLevelAssertion;
57
+ }
58
+ async function unifyStepWithSignatureAssertion(step, context) {
59
+ let stepUnifiesWithSignatureAssertion = false;
60
+ const signatureAssertion = step.getSignatureAssertion();
61
+ if (signatureAssertion !== null) {
62
+ const stepString = step.getString(), signatureAssertionString = signatureAssertion.getString();
63
+ context.trace(`Unifying the '${stepString}' step with the '${signatureAssertionString}' signature assertion...`);
64
+ const subproofOrProofAssertions = context.getSubproofOrProofAssertions(), stepAndSubproofOrProofAssertionsUnify = await signatureAssertion.unifyStepAndSubproofOrProofAssertions(step, subproofOrProofAssertions, context);
65
+ if (stepAndSubproofOrProofAssertionsUnify) {
66
+ stepUnifiesWithSignatureAssertion = true;
67
+ }
68
+ if (stepUnifiesWithSignatureAssertion) {
69
+ context.debug(`...unified the '${stepString}' step with the '${signatureAssertionString}' signature assertion.`);
70
+ }
71
+ }
72
+ return stepUnifiesWithSignatureAssertion;
73
+ }
74
+ async function unifyStepAsUnqualifiedEquality(step, context) {
75
+ let stepUnifiesAUnqualifiedEquality = false;
76
+ const unqualified = step.isUnqualified();
77
+ if (unqualified) {
78
+ const { Equality } = _elements.default, statement = step.getStatement(), equality = Equality.fromStatement(statement, context);
79
+ if (equality !== null) {
80
+ const stepString = step.getString();
81
+ context.trace(`Unifying the '${stepString}' step as an unqualified equality...`);
82
+ stepUnifiesAUnqualifiedEquality = true;
83
+ if (stepUnifiesAUnqualifiedEquality) {
84
+ context.debug(`...unified the '${stepString}' step as an unqualified equality.`);
85
+ }
86
+ }
87
+ }
88
+ return stepUnifiesAUnqualifiedEquality;
89
+ }
90
+ async function unifyStepAsUNqualifiedJudgement(step, context) {
91
+ let stepUnifiesAsUnqualifiedJudgement = false;
92
+ const unqualified = step.isUnqualified();
93
+ if (unqualified) {
94
+ const { Judgement } = _elements.default, statement = step.getStatement(), judgement = Judgement.fromStatement(statement, context);
95
+ if (judgement !== null) {
96
+ const stepString = step.getString();
97
+ context.trace(`Unifying the '${stepString}' step as an unqualified judgement...`);
98
+ stepUnifiesAsUnqualifiedJudgement = true;
99
+ if (stepUnifiesAsUnqualifiedJudgement) {
100
+ context.debug(`...unified the '${stepString}' step as an unqualified judgement.`);
101
+ }
102
+ }
103
+ }
104
+ return stepUnifiesAsUnqualifiedJudgement;
105
+ }
106
+ async function unifyStepAsUnqualifiedTypeAssertion(step, context) {
107
+ let stepUnifiesAsUnqualifiedTypeAssertion = false;
108
+ const unqualified = step.isUnqualified();
109
+ if (unqualified) {
110
+ const { TypeAssertion } = _elements.default, statement = step.getStatement(), typeAssertion = TypeAssertion.fromStatement(statement, context);
111
+ if (typeAssertion !== null) {
112
+ const stepString = step.getString();
113
+ context.trace(`Unifying the '${stepString}' step as an unqualified type assertion...`);
114
+ stepUnifiesAsUnqualifiedTypeAssertion = true;
115
+ if (stepUnifiesAsUnqualifiedTypeAssertion) {
116
+ context.debug(`...unified the '${stepString}' step as an unqualified type assertion.`);
117
+ }
118
+ }
119
+ }
120
+ return stepUnifiesAsUnqualifiedTypeAssertion;
121
+ }
122
+ async function unifyStepAsUnqualifiedPropertyAssertion(step, context) {
123
+ let stepUnifiesAsUnqualifiedPropertyAssertion = false;
124
+ const unqualified = step.isUnqualified();
125
+ if (unqualified) {
126
+ const { PropertyAssertion } = _elements.default, statement = step.getStatement(), propertyAssertion = PropertyAssertion.fromStatement(statement, context);
127
+ if (propertyAssertion !== null) {
128
+ const stepString = step.getString();
129
+ context.trace(`Unifying the '${stepString}' step as an unqualified property assertion...`);
130
+ stepUnifiesAsUnqualifiedPropertyAssertion = true;
131
+ if (stepUnifiesAsUnqualifiedPropertyAssertion) {
132
+ context.debug(`...unified the '${stepString}' step as an unqualified property assertion.`);
133
+ }
134
+ }
135
+ }
136
+ return stepUnifiesAsUnqualifiedPropertyAssertion;
137
+ }
138
+ async function unifyStepAsUnqualifiedSignatureAssertion(step, context) {
139
+ let stepUnifiesAsUnqualifiedSignatureAssertion = false;
140
+ const unqualified = step.isUnqualified();
141
+ if (unqualified) {
142
+ const { SignatureAssertion } = _elements.default, statement = step.getStatement(), signatureAssertion = SignatureAssertion.fromStatement(statement, context);
143
+ if (signatureAssertion !== null) {
144
+ const stepString = step.getString();
145
+ context.trace(`Unifying the '${stepString}' step as a signature assertion...`);
146
+ stepUnifiesAsUnqualifiedSignatureAssertion = true;
147
+ if (stepUnifiesAsUnqualifiedSignatureAssertion) {
148
+ context.debug(`...unified the '${stepString}' step as a signature assertion.`);
149
+ }
150
+ }
151
+ }
152
+ return stepUnifiesAsUnqualifiedSignatureAssertion;
153
+ }
154
+ async function unifyStepAsQualifiedMetaLevelAssumption(step, context) {
155
+ let stepUnifiesAsQualifiedMetaLevelAssumption = false;
156
+ const metaLevel = context.isMetaLevel();
157
+ if (metaLevel) {
158
+ const reference = step.getReference();
159
+ if (reference !== null) {
160
+ const stepString = step.getString(), referenceString = reference.getString();
161
+ context.trace(`Unifying the '${stepString}' step as a meta-level assumption with the '${referenceString}' reference...`);
162
+ let metaLevelAssumption;
163
+ const { MetaLevelAssumption } = _elements.default;
164
+ metaLevelAssumption = MetaLevelAssumption.fromStep(step, context);
165
+ metaLevelAssumption = metaLevelAssumption.validate(context); ///
166
+ if (metaLevelAssumption !== null) {
167
+ stepUnifiesAsQualifiedMetaLevelAssumption = true;
168
+ }
169
+ if (stepUnifiesAsQualifiedMetaLevelAssumption) {
170
+ context.debug(`...unified the '${stepString}' step as a meta-level assumption with the '${referenceString}' reference.`);
171
+ }
172
+ }
173
+ }
174
+ return stepUnifiesAsQualifiedMetaLevelAssumption;
175
+ }
176
+ async function unifyStepAsQualifiedSignatureAssertion(step, context) {
177
+ let stepUnifiesAsQualifiedSignatureAssertion = false;
178
+ const reference = step.getReference();
179
+ if (reference !== null) {
180
+ const topLevelAssertion = context.findTopLevelAssertionByReference(reference);
181
+ if (topLevelAssertion !== null) {
182
+ const statementNode = step.getStatementNode(), signatureAssertionNode = statementNode.getSignatureAssertionNode();
183
+ if (signatureAssertionNode !== null) {
184
+ const stepString = step.getString(), referenceString = reference.getString(), signatureAssertion = context.findAssertionByAssertionNode(signatureAssertionNode);
185
+ context.trace(`Unifying the '${stepString}' step as a signature assertion with the '${referenceString}' reference...`);
186
+ const unifyTopLevelAssertion = await signatureAssertion.unifyTopLevelAssertion(topLevelAssertion, context);
187
+ if (unifyTopLevelAssertion) {
188
+ stepUnifiesAsQualifiedSignatureAssertion = true;
189
+ }
190
+ if (stepUnifiesAsQualifiedSignatureAssertion) {
191
+ context.debug(`...unified the '${stepString}' step as a signature assertion with the '${referenceString}' reference.`);
192
+ }
193
+ }
194
+ }
195
+ }
196
+ return stepUnifiesAsQualifiedSignatureAssertion;
197
+ }
198
+ async function compareStepWithSubproofOrProofAssertions(step, context) {
199
+ let stepComparesToSubproofOrProofAssertions = false;
200
+ const unqualified = step.isUnqualified();
201
+ if (unqualified) {
202
+ const stepString = step.getString();
203
+ context.trace(`Comparing the '${stepString}' step with the subproofs or proof asssertions...`);
204
+ const subproofOrProofAssertions = context.getSubproofOrProofAssertions(), comparesToSubproofOrProofAssertions = step.compareSubproofOrProofAssertions(subproofOrProofAssertions, context);
205
+ if (comparesToSubproofOrProofAssertions) {
206
+ stepComparesToSubproofOrProofAssertions = true;
207
+ }
208
+ if (stepComparesToSubproofOrProofAssertions) {
209
+ context.debug(`...compared the '${stepString}' step with the subproofs or proof asssertions.`);
210
+ }
211
+ }
212
+ return stepComparesToSubproofOrProofAssertions;
213
+ }
214
+ const unifySteps = [
215
+ unifyStepWithRule,
216
+ unifyStepWithTopLevelAssertion,
217
+ unifyStepWithSignatureAssertion,
218
+ unifyStepAsUnqualifiedEquality,
219
+ unifyStepAsUNqualifiedJudgement,
220
+ unifyStepAsUnqualifiedTypeAssertion,
221
+ unifyStepAsUnqualifiedPropertyAssertion,
222
+ unifyStepAsUnqualifiedSignatureAssertion,
223
+ unifyStepAsQualifiedMetaLevelAssumption,
224
+ unifyStepAsQualifiedSignatureAssertion,
225
+ compareStepWithSubproofOrProofAssertions
226
+ ];
227
+
228
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm9jZXNzL3VuaWZpY2F0aW9uLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgZWxlbWVudHMgZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5cbmFzeW5jIGZ1bmN0aW9uIHVuaWZ5U3RlcFdpdGhSdWxlKHN0ZXAsIGNvbnRleHQpIHtcbiAgbGV0IHN0ZXBVbmlmaWVzV2l0aFJ1bGUgPSBmYWxzZTtcblxuICBjb25zdCByZWZlcmVuY2UgPSBzdGVwLmdldFJlZmVyZW5jZSgpO1xuXG4gIGlmIChyZWZlcmVuY2UgIT09IG51bGwpIHtcbiAgICBjb25zdCBydWxlID0gY29udGV4dC5maW5kUnVsZUJ5UmVmZXJlbmNlKHJlZmVyZW5jZSk7XG5cbiAgICBpZiAocnVsZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc3RlcFN0cmluZyA9IHN0ZXAuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgICBydWxlU3RyaW5nID0gcnVsZS5nZXRTdHJpbmcoKTtcblxuICAgICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwIHdpdGggdGhlICcke3J1bGVTdHJpbmd9JyBydWxlLi4uYCk7XG5cbiAgICAgIGNvbnN0IHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMgPSBjb250ZXh0LmdldFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMoKSxcbiAgICAgICAgICAgIHN0ZXBBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZnkgPSBhd2FpdCBydWxlLnVuaWZ5U3RlcEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMoc3RlcCwgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucywgY29udGV4dCk7XG5cbiAgICAgIGlmIChzdGVwQW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZ5KSB7XG4gICAgICAgIHN0ZXBVbmlmaWVzV2l0aFJ1bGUgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RlcFVuaWZpZXNXaXRoUnVsZSkge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCB3aXRoIHRoZSAnJHtydWxlU3RyaW5nfScgcnVsZS5gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RlcFVuaWZpZXNXaXRoUnVsZTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdW5pZnlTdGVwV2l0aFRvcExldmVsQXNzZXJ0aW9uKHN0ZXAsIGNvbnRleHQpIHtcbiAgbGV0IHN0ZXBVbmlmaWVzV2l0aFRvcExldmVsQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgY29uc3QgcmVmZXJlbmNlID0gc3RlcC5nZXRSZWZlcmVuY2UoKTtcblxuICBpZiAocmVmZXJlbmNlICE9PSBudWxsKSB7XG4gICAgY29uc3QgdG9wTGV2ZWxBc3NlcnRpb24gPSBjb250ZXh0LmZpbmRUb3BMZXZlbEFzc2VydGlvbkJ5UmVmZXJlbmNlKHJlZmVyZW5jZSk7XG5cbiAgICBpZiAodG9wTGV2ZWxBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHNhdGlzZmlhYmxlID0gdG9wTGV2ZWxBc3NlcnRpb24uaXNTYXRpc2ZpYWJsZSgpO1xuXG4gICAgICBpZiAoIXNhdGlzZmlhYmxlKSB7XG4gICAgICAgIGNvbnN0IHN0ZXBTdHJpbmcgPSBzdGVwLmdldFN0cmluZygpLFxuICAgICAgICAgICAgICB0b3BMZXZlbEFzc2VydGlvblN0cmluZyA9IHJlZmVyZW5jZS5nZXRTdHJpbmcoKTtcblxuICAgICAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgd2l0aCB0aGUgJyR7dG9wTGV2ZWxBc3NlcnRpb25TdHJpbmd9JyB0b3AgbGV2ZWwgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICAgICAgY29uc3Qgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyA9IGNvbnRleHQuZ2V0U3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucygpLFxuICAgICAgICAgICAgICBzdGVwQW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZ5ID0gYXdhaXQgdG9wTGV2ZWxBc3NlcnRpb24udW5pZnlTdGVwQW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyhzdGVwLCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zLCBjb250ZXh0KTtcblxuICAgICAgICBpZiAoc3RlcEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmeSkge1xuICAgICAgICAgIHN0ZXBVbmlmaWVzV2l0aFRvcExldmVsQXNzZXJ0aW9uID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdGVwVW5pZmllc1dpdGhUb3BMZXZlbEFzc2VydGlvbikge1xuICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwIHdpdGggdGhlICcke3RvcExldmVsQXNzZXJ0aW9uU3RyaW5nfScgdG9wIGxldmVsIGFzc2VydGlvbi5gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGVwVW5pZmllc1dpdGhUb3BMZXZlbEFzc2VydGlvbjtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdW5pZnlTdGVwV2l0aFNpZ25hdHVyZUFzc2VydGlvbihzdGVwLCBjb250ZXh0KSB7XG4gIGxldCBzdGVwVW5pZmllc1dpdGhTaWduYXR1cmVBc3NlcnRpb24gPSBmYWxzZTtcblxuICBjb25zdCBzaWduYXR1cmVBc3NlcnRpb24gPSBzdGVwLmdldFNpZ25hdHVyZUFzc2VydGlvbigpO1xuXG4gIGlmIChzaWduYXR1cmVBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGVwU3RyaW5nID0gc3RlcC5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzaWduYXR1cmVBc3NlcnRpb25TdHJpbmcgPSBzaWduYXR1cmVBc3NlcnRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgd2l0aCB0aGUgJyR7c2lnbmF0dXJlQXNzZXJ0aW9uU3RyaW5nfScgc2lnbmF0dXJlIGFzc2VydGlvbi4uLmApO1xuXG4gICAgY29uc3Qgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyA9IGNvbnRleHQuZ2V0U3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucygpLFxuICAgICAgICAgIHN0ZXBBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZnkgPSBhd2FpdCBzaWduYXR1cmVBc3NlcnRpb24udW5pZnlTdGVwQW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyhzdGVwLCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zLCBjb250ZXh0KTtcblxuICAgIGlmIChzdGVwQW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZ5KSB7XG4gICAgICBzdGVwVW5pZmllc1dpdGhTaWduYXR1cmVBc3NlcnRpb24gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChzdGVwVW5pZmllc1dpdGhTaWduYXR1cmVBc3NlcnRpb24pIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwIHdpdGggdGhlICcke3NpZ25hdHVyZUFzc2VydGlvblN0cmluZ30nIHNpZ25hdHVyZSBhc3NlcnRpb24uYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0ZXBVbmlmaWVzV2l0aFNpZ25hdHVyZUFzc2VydGlvbjtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdW5pZnlTdGVwQXNVbnF1YWxpZmllZEVxdWFsaXR5KHN0ZXAsIGNvbnRleHQpIHtcbiAgbGV0IHN0ZXBVbmlmaWVzQVVucXVhbGlmaWVkRXF1YWxpdHkgPSBmYWxzZTtcblxuICBjb25zdCB1bnF1YWxpZmllZCA9IHN0ZXAuaXNVbnF1YWxpZmllZCgpO1xuXG4gIGlmICh1bnF1YWxpZmllZCkge1xuICAgIGNvbnN0IHsgRXF1YWxpdHkgfSA9IGVsZW1lbnRzLFxuICAgICAgICAgIHN0YXRlbWVudCA9IHN0ZXAuZ2V0U3RhdGVtZW50KCksXG4gICAgICAgICAgZXF1YWxpdHkgPSBFcXVhbGl0eS5mcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgICBpZiAoZXF1YWxpdHkgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHN0ZXBTdHJpbmcgPSBzdGVwLmdldFN0cmluZygpO1xuXG4gICAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgYXMgYW4gdW5xdWFsaWZpZWQgZXF1YWxpdHkuLi5gKTtcblxuICAgICAgc3RlcFVuaWZpZXNBVW5xdWFsaWZpZWRFcXVhbGl0eSA9IHRydWU7XG5cbiAgICAgIGlmIChzdGVwVW5pZmllc0FVbnF1YWxpZmllZEVxdWFsaXR5KSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwIGFzIGFuIHVucXVhbGlmaWVkIGVxdWFsaXR5LmApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGVwVW5pZmllc0FVbnF1YWxpZmllZEVxdWFsaXR5O1xufVxuXG5hc3luYyBmdW5jdGlvbiB1bmlmeVN0ZXBBc1VOcXVhbGlmaWVkSnVkZ2VtZW50KHN0ZXAsIGNvbnRleHQpIHtcbiAgbGV0IHN0ZXBVbmlmaWVzQXNVbnF1YWxpZmllZEp1ZGdlbWVudCA9IGZhbHNlO1xuXG4gIGNvbnN0IHVucXVhbGlmaWVkID0gc3RlcC5pc1VucXVhbGlmaWVkKCk7XG5cbiAgaWYgKHVucXVhbGlmaWVkKSB7XG4gICAgY29uc3QgeyBKdWRnZW1lbnQgfSA9IGVsZW1lbnRzLFxuICAgICAgICAgIHN0YXRlbWVudCA9IHN0ZXAuZ2V0U3RhdGVtZW50KCksXG4gICAgICAgICAganVkZ2VtZW50ID0gSnVkZ2VtZW50LmZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICAgIGlmIChqdWRnZW1lbnQgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHN0ZXBTdHJpbmcgPSBzdGVwLmdldFN0cmluZygpO1xuXG4gICAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgYXMgYW4gdW5xdWFsaWZpZWQganVkZ2VtZW50Li4uYCk7XG5cbiAgICAgIHN0ZXBVbmlmaWVzQXNVbnF1YWxpZmllZEp1ZGdlbWVudCA9IHRydWU7XG5cbiAgICAgIGlmIChzdGVwVW5pZmllc0FzVW5xdWFsaWZpZWRKdWRnZW1lbnQpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgYXMgYW4gdW5xdWFsaWZpZWQganVkZ2VtZW50LmApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGVwVW5pZmllc0FzVW5xdWFsaWZpZWRKdWRnZW1lbnQ7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHVuaWZ5U3RlcEFzVW5xdWFsaWZpZWRUeXBlQXNzZXJ0aW9uKHN0ZXAsIGNvbnRleHQpIHtcbiAgbGV0IHN0ZXBVbmlmaWVzQXNVbnF1YWxpZmllZFR5cGVBc3NlcnRpb24gPSBmYWxzZTtcblxuICBjb25zdCB1bnF1YWxpZmllZCA9IHN0ZXAuaXNVbnF1YWxpZmllZCgpO1xuXG4gIGlmICh1bnF1YWxpZmllZCkge1xuICAgIGNvbnN0IHsgVHlwZUFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgc3RhdGVtZW50ID0gc3RlcC5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgICAgICB0eXBlQXNzZXJ0aW9uID0gVHlwZUFzc2VydGlvbi5mcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgICBpZiAodHlwZUFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc3RlcFN0cmluZyA9IHN0ZXAuZ2V0U3RyaW5nKCk7XG5cbiAgICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCBhcyBhbiB1bnF1YWxpZmllZCB0eXBlIGFzc2VydGlvbi4uLmApO1xuXG4gICAgICBzdGVwVW5pZmllc0FzVW5xdWFsaWZpZWRUeXBlQXNzZXJ0aW9uID0gdHJ1ZTtcblxuICAgICAgaWYgKHN0ZXBVbmlmaWVzQXNVbnF1YWxpZmllZFR5cGVBc3NlcnRpb24pIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgYXMgYW4gdW5xdWFsaWZpZWQgdHlwZSBhc3NlcnRpb24uYCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0ZXBVbmlmaWVzQXNVbnF1YWxpZmllZFR5cGVBc3NlcnRpb247XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHVuaWZ5U3RlcEFzVW5xdWFsaWZpZWRQcm9wZXJ0eUFzc2VydGlvbihzdGVwLCBjb250ZXh0KSB7XG4gIGxldCBzdGVwVW5pZmllc0FzVW5xdWFsaWZpZWRQcm9wZXJ0eUFzc2VydGlvbiA9IGZhbHNlO1xuXG4gIGNvbnN0IHVucXVhbGlmaWVkID0gc3RlcC5pc1VucXVhbGlmaWVkKCk7XG5cbiAgaWYgKHVucXVhbGlmaWVkKSB7XG4gICAgY29uc3QgeyBQcm9wZXJ0eUFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgc3RhdGVtZW50ID0gc3RlcC5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgICAgICBwcm9wZXJ0eUFzc2VydGlvbiA9IFByb3BlcnR5QXNzZXJ0aW9uLmZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICAgIGlmIChwcm9wZXJ0eUFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc3RlcFN0cmluZyA9IHN0ZXAuZ2V0U3RyaW5nKCk7XG5cbiAgICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCBhcyBhbiB1bnF1YWxpZmllZCBwcm9wZXJ0eSBhc3NlcnRpb24uLi5gKTtcblxuICAgICAgc3RlcFVuaWZpZXNBc1VucXVhbGlmaWVkUHJvcGVydHlBc3NlcnRpb24gPSB0cnVlO1xuXG4gICAgICBpZiAoc3RlcFVuaWZpZXNBc1VucXVhbGlmaWVkUHJvcGVydHlBc3NlcnRpb24pIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgYXMgYW4gdW5xdWFsaWZpZWQgcHJvcGVydHkgYXNzZXJ0aW9uLmApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGVwVW5pZmllc0FzVW5xdWFsaWZpZWRQcm9wZXJ0eUFzc2VydGlvbjtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdW5pZnlTdGVwQXNVbnF1YWxpZmllZFNpZ25hdHVyZUFzc2VydGlvbihzdGVwLCBjb250ZXh0KSB7XG4gIGxldCBzdGVwVW5pZmllc0FzVW5xdWFsaWZpZWRTaWduYXR1cmVBc3NlcnRpb24gPSBmYWxzZTtcblxuICBjb25zdCB1bnF1YWxpZmllZCA9IHN0ZXAuaXNVbnF1YWxpZmllZCgpO1xuXG4gIGlmICh1bnF1YWxpZmllZCkge1xuICAgIGNvbnN0IHsgU2lnbmF0dXJlQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgICBzdGF0ZW1lbnQgPSBzdGVwLmdldFN0YXRlbWVudCgpLFxuICAgICAgICAgIHNpZ25hdHVyZUFzc2VydGlvbiA9IFNpZ25hdHVyZUFzc2VydGlvbi5mcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgICBpZiAoc2lnbmF0dXJlQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBzdGVwU3RyaW5nID0gc3RlcC5nZXRTdHJpbmcoKTtcblxuICAgICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwIGFzIGEgc2lnbmF0dXJlIGFzc2VydGlvbi4uLmApO1xuXG4gICAgICBzdGVwVW5pZmllc0FzVW5xdWFsaWZpZWRTaWduYXR1cmVBc3NlcnRpb24gPSB0cnVlO1xuXG4gICAgICBpZiAoc3RlcFVuaWZpZXNBc1VucXVhbGlmaWVkU2lnbmF0dXJlQXNzZXJ0aW9uKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwIGFzIGEgc2lnbmF0dXJlIGFzc2VydGlvbi5gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RlcFVuaWZpZXNBc1VucXVhbGlmaWVkU2lnbmF0dXJlQXNzZXJ0aW9uO1xufVxuXG5hc3luYyBmdW5jdGlvbiB1bmlmeVN0ZXBBc1F1YWxpZmllZE1ldGFMZXZlbEFzc3VtcHRpb24oc3RlcCwgY29udGV4dCkge1xuICBsZXQgc3RlcFVuaWZpZXNBc1F1YWxpZmllZE1ldGFMZXZlbEFzc3VtcHRpb24gPSBmYWxzZTtcblxuICBjb25zdCBtZXRhTGV2ZWwgPSBjb250ZXh0LmlzTWV0YUxldmVsKCk7XG5cbiAgaWYgKG1ldGFMZXZlbCkge1xuICAgIGNvbnN0IHJlZmVyZW5jZSA9IHN0ZXAuZ2V0UmVmZXJlbmNlKCk7XG5cbiAgICBpZiAocmVmZXJlbmNlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBzdGVwU3RyaW5nID0gc3RlcC5nZXRTdHJpbmcoKSxcbiAgICAgICAgICAgIHJlZmVyZW5jZVN0cmluZyA9IHJlZmVyZW5jZS5nZXRTdHJpbmcoKTtcblxuICAgICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwIGFzIGEgbWV0YS1sZXZlbCBhc3N1bXB0aW9uIHdpdGggdGhlICcke3JlZmVyZW5jZVN0cmluZ30nIHJlZmVyZW5jZS4uLmApO1xuXG4gICAgICBsZXQgbWV0YUxldmVsQXNzdW1wdGlvbjtcblxuICAgICAgY29uc3QgeyBNZXRhTGV2ZWxBc3N1bXB0aW9uIH0gPSBlbGVtZW50cztcblxuICAgICAgbWV0YUxldmVsQXNzdW1wdGlvbiA9IE1ldGFMZXZlbEFzc3VtcHRpb24uZnJvbVN0ZXAoc3RlcCwgY29udGV4dCk7XG5cbiAgICAgIG1ldGFMZXZlbEFzc3VtcHRpb24gPSBtZXRhTGV2ZWxBc3N1bXB0aW9uLnZhbGlkYXRlKGNvbnRleHQpOyAgLy8vXG5cbiAgICAgIGlmIChtZXRhTGV2ZWxBc3N1bXB0aW9uICE9PSBudWxsKSB7XG4gICAgICAgIHN0ZXBVbmlmaWVzQXNRdWFsaWZpZWRNZXRhTGV2ZWxBc3N1bXB0aW9uID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0ZXBVbmlmaWVzQXNRdWFsaWZpZWRNZXRhTGV2ZWxBc3N1bXB0aW9uKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwIGFzIGEgbWV0YS1sZXZlbCBhc3N1bXB0aW9uIHdpdGggdGhlICcke3JlZmVyZW5jZVN0cmluZ30nIHJlZmVyZW5jZS5gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RlcFVuaWZpZXNBc1F1YWxpZmllZE1ldGFMZXZlbEFzc3VtcHRpb247XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHVuaWZ5U3RlcEFzUXVhbGlmaWVkU2lnbmF0dXJlQXNzZXJ0aW9uKHN0ZXAsIGNvbnRleHQpIHtcbiAgbGV0IHN0ZXBVbmlmaWVzQXNRdWFsaWZpZWRTaWduYXR1cmVBc3NlcnRpb24gPSBmYWxzZTtcblxuICBjb25zdCByZWZlcmVuY2UgPSBzdGVwLmdldFJlZmVyZW5jZSgpO1xuXG4gIGlmIChyZWZlcmVuY2UgIT09IG51bGwpIHtcbiAgICBjb25zdCB0b3BMZXZlbEFzc2VydGlvbiA9IGNvbnRleHQuZmluZFRvcExldmVsQXNzZXJ0aW9uQnlSZWZlcmVuY2UocmVmZXJlbmNlKTtcblxuICAgIGlmICh0b3BMZXZlbEFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN0ZXAuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICAgICAgc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0U2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSgpO1xuXG4gICAgICBpZiAoc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBzdGVwU3RyaW5nID0gc3RlcC5nZXRTdHJpbmcoKSxcbiAgICAgICAgICAgICAgcmVmZXJlbmNlU3RyaW5nID0gcmVmZXJlbmNlLmdldFN0cmluZygpLFxuICAgICAgICAgICAgICBzaWduYXR1cmVBc3NlcnRpb24gPSBjb250ZXh0LmZpbmRBc3NlcnRpb25CeUFzc2VydGlvbk5vZGUoc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSk7XG5cbiAgICAgICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwIGFzIGEgc2lnbmF0dXJlIGFzc2VydGlvbiB3aXRoIHRoZSAnJHtyZWZlcmVuY2VTdHJpbmd9JyByZWZlcmVuY2UuLi5gKTtcblxuICAgICAgICBjb25zdCB1bmlmeVRvcExldmVsQXNzZXJ0aW9uID0gYXdhaXQgc2lnbmF0dXJlQXNzZXJ0aW9uLnVuaWZ5VG9wTGV2ZWxBc3NlcnRpb24odG9wTGV2ZWxBc3NlcnRpb24sIGNvbnRleHQpO1xuXG4gICAgICAgIGlmICh1bmlmeVRvcExldmVsQXNzZXJ0aW9uKSB7XG4gICAgICAgICAgc3RlcFVuaWZpZXNBc1F1YWxpZmllZFNpZ25hdHVyZUFzc2VydGlvbiA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RlcFVuaWZpZXNBc1F1YWxpZmllZFNpZ25hdHVyZUFzc2VydGlvbikge1xuICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwIGFzIGEgc2lnbmF0dXJlIGFzc2VydGlvbiB3aXRoIHRoZSAnJHtyZWZlcmVuY2VTdHJpbmd9JyByZWZlcmVuY2UuYCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RlcFVuaWZpZXNBc1F1YWxpZmllZFNpZ25hdHVyZUFzc2VydGlvbjtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY29tcGFyZVN0ZXBXaXRoU3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyhzdGVwLCBjb250ZXh0KSB7XG4gIGxldCBzdGVwQ29tcGFyZXNUb1N1YnByb29mT3JQcm9vZkFzc2VydGlvbnMgPSBmYWxzZTtcblxuICBjb25zdCB1bnF1YWxpZmllZCA9IHN0ZXAuaXNVbnF1YWxpZmllZCgpO1xuXG4gIGlmICh1bnF1YWxpZmllZCkge1xuICAgIGNvbnN0IHN0ZXBTdHJpbmcgPSBzdGVwLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQ29tcGFyaW5nIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCB3aXRoIHRoZSBzdWJwcm9vZnMgb3IgcHJvb2YgYXNzc2VydGlvbnMuLi5gKTtcblxuICAgIGNvbnN0IHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMgPSBjb250ZXh0LmdldFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMoKSxcbiAgICAgICAgICBjb21wYXJlc1RvU3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyA9IHN0ZXAuY29tcGFyZVN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMoc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucywgY29udGV4dCk7XG5cbiAgICBpZiAoY29tcGFyZXNUb1N1YnByb29mT3JQcm9vZkFzc2VydGlvbnMpIHtcbiAgICAgIHN0ZXBDb21wYXJlc1RvU3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHN0ZXBDb21wYXJlc1RvU3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4uY29tcGFyZWQgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwIHdpdGggdGhlIHN1YnByb29mcyBvciBwcm9vZiBhc3NzZXJ0aW9ucy5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RlcENvbXBhcmVzVG9TdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zO1xufVxuXG5leHBvcnQgY29uc3QgdW5pZnlTdGVwcyA9IFtcbiAgdW5pZnlTdGVwV2l0aFJ1bGUsXG4gIHVuaWZ5U3RlcFdpdGhUb3BMZXZlbEFzc2VydGlvbixcbiAgdW5pZnlTdGVwV2l0aFNpZ25hdHVyZUFzc2VydGlvbixcbiAgdW5pZnlTdGVwQXNVbnF1YWxpZmllZEVxdWFsaXR5LFxuICB1bmlmeVN0ZXBBc1VOcXVhbGlmaWVkSnVkZ2VtZW50LFxuICB1bmlmeVN0ZXBBc1VucXVhbGlmaWVkVHlwZUFzc2VydGlvbixcbiAgdW5pZnlTdGVwQXNVbnF1YWxpZmllZFByb3BlcnR5QXNzZXJ0aW9uLFxuICB1bmlmeVN0ZXBBc1VucXVhbGlmaWVkU2lnbmF0dXJlQXNzZXJ0aW9uLFxuICB1bmlmeVN0ZXBBc1F1YWxpZmllZE1ldGFMZXZlbEFzc3VtcHRpb24sXG4gIHVuaWZ5U3RlcEFzUXVhbGlmaWVkU2lnbmF0dXJlQXNzZXJ0aW9uLFxuICBjb21wYXJlU3RlcFdpdGhTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zXG5dO1xuIl0sIm5hbWVzIjpbInVuaWZ5U3RlcHMiLCJ1bmlmeVN0ZXBXaXRoUnVsZSIsInN0ZXAiLCJjb250ZXh0Iiwic3RlcFVuaWZpZXNXaXRoUnVsZSIsInJlZmVyZW5jZSIsImdldFJlZmVyZW5jZSIsInJ1bGUiLCJmaW5kUnVsZUJ5UmVmZXJlbmNlIiwic3RlcFN0cmluZyIsImdldFN0cmluZyIsInJ1bGVTdHJpbmciLCJ0cmFjZSIsInN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMiLCJnZXRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zIiwic3RlcEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmeSIsInVuaWZ5U3RlcEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMiLCJkZWJ1ZyIsInVuaWZ5U3RlcFdpdGhUb3BMZXZlbEFzc2VydGlvbiIsInN0ZXBVbmlmaWVzV2l0aFRvcExldmVsQXNzZXJ0aW9uIiwidG9wTGV2ZWxBc3NlcnRpb24iLCJmaW5kVG9wTGV2ZWxBc3NlcnRpb25CeVJlZmVyZW5jZSIsInNhdGlzZmlhYmxlIiwiaXNTYXRpc2ZpYWJsZSIsInRvcExldmVsQXNzZXJ0aW9uU3RyaW5nIiwidW5pZnlTdGVwV2l0aFNpZ25hdHVyZUFzc2VydGlvbiIsInN0ZXBVbmlmaWVzV2l0aFNpZ25hdHVyZUFzc2VydGlvbiIsInNpZ25hdHVyZUFzc2VydGlvbiIsImdldFNpZ25hdHVyZUFzc2VydGlvbiIsInNpZ25hdHVyZUFzc2VydGlvblN0cmluZyIsInVuaWZ5U3RlcEFzVW5xdWFsaWZpZWRFcXVhbGl0eSIsInN0ZXBVbmlmaWVzQVVucXVhbGlmaWVkRXF1YWxpdHkiLCJ1bnF1YWxpZmllZCIsImlzVW5xdWFsaWZpZWQiLCJFcXVhbGl0eSIsImVsZW1lbnRzIiwic3RhdGVtZW50IiwiZ2V0U3RhdGVtZW50IiwiZXF1YWxpdHkiLCJmcm9tU3RhdGVtZW50IiwidW5pZnlTdGVwQXNVTnF1YWxpZmllZEp1ZGdlbWVudCIsInN0ZXBVbmlmaWVzQXNVbnF1YWxpZmllZEp1ZGdlbWVudCIsIkp1ZGdlbWVudCIsImp1ZGdlbWVudCIsInVuaWZ5U3RlcEFzVW5xdWFsaWZpZWRUeXBlQXNzZXJ0aW9uIiwic3RlcFVuaWZpZXNBc1VucXVhbGlmaWVkVHlwZUFzc2VydGlvbiIsIlR5cGVBc3NlcnRpb24iLCJ0eXBlQXNzZXJ0aW9uIiwidW5pZnlTdGVwQXNVbnF1YWxpZmllZFByb3BlcnR5QXNzZXJ0aW9uIiwic3RlcFVuaWZpZXNBc1VucXVhbGlmaWVkUHJvcGVydHlBc3NlcnRpb24iLCJQcm9wZXJ0eUFzc2VydGlvbiIsInByb3BlcnR5QXNzZXJ0aW9uIiwidW5pZnlTdGVwQXNVbnF1YWxpZmllZFNpZ25hdHVyZUFzc2VydGlvbiIsInN0ZXBVbmlmaWVzQXNVbnF1YWxpZmllZFNpZ25hdHVyZUFzc2VydGlvbiIsIlNpZ25hdHVyZUFzc2VydGlvbiIsInVuaWZ5U3RlcEFzUXVhbGlmaWVkTWV0YUxldmVsQXNzdW1wdGlvbiIsInN0ZXBVbmlmaWVzQXNRdWFsaWZpZWRNZXRhTGV2ZWxBc3N1bXB0aW9uIiwibWV0YUxldmVsIiwiaXNNZXRhTGV2ZWwiLCJyZWZlcmVuY2VTdHJpbmciLCJtZXRhTGV2ZWxBc3N1bXB0aW9uIiwiTWV0YUxldmVsQXNzdW1wdGlvbiIsImZyb21TdGVwIiwidmFsaWRhdGUiLCJ1bmlmeVN0ZXBBc1F1YWxpZmllZFNpZ25hdHVyZUFzc2VydGlvbiIsInN0ZXBVbmlmaWVzQXNRdWFsaWZpZWRTaWduYXR1cmVBc3NlcnRpb24iLCJzdGF0ZW1lbnROb2RlIiwiZ2V0U3RhdGVtZW50Tm9kZSIsInNpZ25hdHVyZUFzc2VydGlvbk5vZGUiLCJnZXRTaWduYXR1cmVBc3NlcnRpb25Ob2RlIiwiZmluZEFzc2VydGlvbkJ5QXNzZXJ0aW9uTm9kZSIsInVuaWZ5VG9wTGV2ZWxBc3NlcnRpb24iLCJjb21wYXJlU3RlcFdpdGhTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zIiwic3RlcENvbXBhcmVzVG9TdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zIiwiY29tcGFyZXNUb1N1YnByb29mT3JQcm9vZkFzc2VydGlvbnMiLCJjb21wYXJlU3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBK1RhQTs7O2VBQUFBOzs7aUVBN1RROzs7Ozs7QUFFckIsZUFBZUMsa0JBQWtCQyxJQUFJLEVBQUVDLE9BQU87SUFDNUMsSUFBSUMsc0JBQXNCO0lBRTFCLE1BQU1DLFlBQVlILEtBQUtJLFlBQVk7SUFFbkMsSUFBSUQsY0FBYyxNQUFNO1FBQ3RCLE1BQU1FLE9BQU9KLFFBQVFLLG1CQUFtQixDQUFDSDtRQUV6QyxJQUFJRSxTQUFTLE1BQU07WUFDakIsTUFBTUUsYUFBYVAsS0FBS1EsU0FBUyxJQUMzQkMsYUFBYUosS0FBS0csU0FBUztZQUVqQ1AsUUFBUVMsS0FBSyxDQUFDLENBQUMsY0FBYyxFQUFFSCxXQUFXLGlCQUFpQixFQUFFRSxXQUFXLFNBQVMsQ0FBQztZQUVsRixNQUFNRSw0QkFBNEJWLFFBQVFXLDRCQUE0QixJQUNoRUMsd0NBQXdDLE1BQU1SLEtBQUtTLHFDQUFx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