occam-verify-cli 1.0.800 → 1.0.809

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 (92) hide show
  1. package/lib/context/bounded.js +242 -0
  2. package/lib/context/branching.js +2 -2
  3. package/lib/context/ephemeral.js +186 -69
  4. package/lib/context/file/nominal.js +87 -52
  5. package/lib/context/liminal.js +2 -2
  6. package/lib/context/synoptic.js +212 -0
  7. package/lib/context.js +57 -17
  8. package/lib/element/assertion/defined.js +3 -3
  9. package/lib/element/assumption/metaLevel.js +6 -4
  10. package/lib/element/combinator.js +4 -2
  11. package/lib/element/conclusion.js +4 -2
  12. package/lib/element/constructor.js +4 -2
  13. package/lib/element/declaration/metavariable.js +10 -9
  14. package/lib/element/declaration/variable.js +7 -7
  15. package/lib/element/deduction.js +4 -2
  16. package/lib/element/derivation.js +1 -7
  17. package/lib/element/label.js +9 -5
  18. package/lib/element/metavariable.js +34 -34
  19. package/lib/element/procedureCall.js +2 -2
  20. package/lib/element/proof.js +2 -2
  21. package/lib/element/proofAssertion/premise.js +4 -3
  22. package/lib/element/proofAssertion/step.js +5 -3
  23. package/lib/element/reference.js +6 -4
  24. package/lib/element/rule.js +2 -2
  25. package/lib/element/statement.js +9 -1
  26. package/lib/element/subproof.js +2 -2
  27. package/lib/element/substitution/frame.js +43 -29
  28. package/lib/element/substitution/reference.js +38 -28
  29. package/lib/element/substitution/statement.js +52 -42
  30. package/lib/element/substitution/term.js +49 -35
  31. package/lib/element/topLevelAssertion.js +2 -2
  32. package/lib/element/topLevelMetaAssertion.js +2 -2
  33. package/lib/element/variable.js +6 -7
  34. package/lib/preamble.js +1 -2
  35. package/lib/process/assign.js +11 -10
  36. package/lib/process/equate.js +3 -2
  37. package/lib/process/unify.js +7 -7
  38. package/lib/utilities/context.js +51 -44
  39. package/lib/utilities/element.js +1 -1
  40. package/lib/utilities/equivalences.js +131 -0
  41. package/lib/utilities/instance.js +3 -3
  42. package/lib/utilities/json.js +59 -1
  43. package/lib/utilities/validation.js +4 -3
  44. package/package.json +4 -4
  45. package/src/context/{proof.js → bounded.js} +84 -85
  46. package/src/context/branching.js +2 -2
  47. package/src/context/ephemeral.js +421 -237
  48. package/src/context/file/nominal.js +127 -77
  49. package/src/context/liminal.js +2 -2
  50. package/src/context/synoptic.js +290 -0
  51. package/src/context.js +81 -20
  52. package/src/element/assertion/defined.js +4 -4
  53. package/src/element/assumption/metaLevel.js +8 -6
  54. package/src/element/combinator.js +4 -2
  55. package/src/element/conclusion.js +4 -2
  56. package/src/element/constructor.js +4 -2
  57. package/src/element/declaration/metavariable.js +10 -8
  58. package/src/element/declaration/variable.js +8 -7
  59. package/src/element/deduction.js +4 -2
  60. package/src/element/derivation.js +0 -2
  61. package/src/element/label.js +11 -7
  62. package/src/element/metavariable.js +11 -11
  63. package/src/element/procedureCall.js +2 -2
  64. package/src/element/proof.js +2 -2
  65. package/src/element/proofAssertion/premise.js +4 -4
  66. package/src/element/proofAssertion/step.js +6 -4
  67. package/src/element/reference.js +7 -5
  68. package/src/element/rule.js +2 -2
  69. package/src/element/statement.js +14 -0
  70. package/src/element/subproof.js +2 -2
  71. package/src/element/substitution/frame.js +47 -32
  72. package/src/element/substitution/reference.js +44 -34
  73. package/src/element/substitution/statement.js +69 -58
  74. package/src/element/substitution/term.js +53 -38
  75. package/src/element/topLevelAssertion.js +2 -2
  76. package/src/element/topLevelMetaAssertion.js +2 -2
  77. package/src/element/variable.js +6 -7
  78. package/src/preamble.js +0 -1
  79. package/src/process/assign.js +17 -14
  80. package/src/process/equate.js +3 -1
  81. package/src/process/unify.js +10 -13
  82. package/src/utilities/context.js +54 -49
  83. package/src/utilities/element.js +1 -0
  84. package/src/utilities/equivalences.js +158 -0
  85. package/src/utilities/instance.js +3 -3
  86. package/src/utilities/json.js +66 -0
  87. package/src/utilities/validation.js +6 -5
  88. package/lib/context/proof.js +0 -242
  89. package/lib/context/synthetic.js +0 -135
  90. package/lib/element/equivalences.js +0 -173
  91. package/src/context/synthetic.js +0 -180
  92. package/src/element/equivalences.js +0 -237
@@ -70,8 +70,8 @@ class LiminalContext extends _context.default {
70
70
  context.debug(`The '${substitutionString}' substitution has already been added to the liminal context.`);
71
71
  } else {
72
72
  this.substitutions.push(substitution);
73
- context.debug(`...added the '${substitutionString}' substitution to the liminal context.`);
74
73
  }
74
+ context.debug(`...added the '${substitutionString}' substitution to the liminal context.`);
75
75
  }
76
76
  addSubstitutions(substitutions) {
77
77
  substitutions.forEach((substitution)=>{
@@ -210,4 +210,4 @@ class LiminalContext extends _context.default {
210
210
  }
211
211
  }
212
212
 
213
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L2xpbWluYWwuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuaW1wb3J0IHsgbWV0YXZhcmlhYmxlTmFtZXNGcm9tU3Vic3RpdHV0aW9ucyB9IGZyb20gXCIuLi91dGlsaXRpZXMvc3Vic3RpdHV0aW9uc1wiO1xuXG5pbXBvcnQgQ29udGV4dCBmcm9tIFwiLi4vY29udGV4dFwiO1xuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5jb25zdCB7IGZpbmQsIGZpcnN0IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGltaW5hbENvbnRleHQgZXh0ZW5kcyBDb250ZXh0IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgc3Vic3RpdHV0aW9ucykge1xuICAgIHN1cGVyKGNvbnRleHQpO1xuXG4gICAgdGhpcy5zdWJzdGl0dXRpb25zID0gc3Vic3RpdHV0aW9ucztcbiAgfVxuXG4gIGdldFN1YnN0aXR1dGlvbnMobmVzdGVkID0gdHJ1ZSkge1xuICAgIGxldCBzdWJzdGl0dXRpb25zO1xuXG4gICAgaWYgKG5lc3RlZCkge1xuICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgICBzdWJzdGl0dXRpb25zID0gY29udGV4dC5nZXRTdWJzdGl0dXRpb25zKCk7XG5cbiAgICAgIHN1YnN0aXR1dGlvbnMgPSBbIC8vL1xuICAgICAgICAuLi50aGlzLnN1YnN0aXR1dGlvbnMsXG4gICAgICAgIC4uLnN1YnN0aXR1dGlvbnNcbiAgICAgIF1cbiAgICB9IGVsc2Uge1xuICAgICAgc3Vic3RpdHV0aW9ucyA9IHRoaXMuc3Vic3RpdHV0aW9ucztcbiAgICB9XG5cbiAgICByZXR1cm4gc3Vic3RpdHV0aW9ucztcbiAgfVxuXG4gIGdldFNvbGVTdWJzdGl0dXRpb24obmVzdGVkID0gdHJ1ZSkge1xuICAgIGxldCBzb2xlU3Vic3RpdHV0aW9uID0gbnVsbDtcblxuICAgIGNvbnN0IHN1YnN0aXR1dGlvbnMgPSB0aGlzLmdldFN1YnN0aXR1dGlvbnMobmVzdGVkKSxcbiAgICAgICAgICBzdWJzdGl0dXRpb25zTGVuZ3RoID0gc3Vic3RpdHV0aW9ucy5sZW5ndGg7XG5cbiAgICBpZiAoc3Vic3RpdHV0aW9uc0xlbmd0aCA9PT0gMSkge1xuICAgICAgY29uc3QgZmlyc3RTdWJzdGl0dXRpb24gPSBmaXJzdChzdWJzdGl0dXRpb25zKTtcblxuICAgICAgc29sZVN1YnN0aXR1dGlvbiA9IGZpcnN0U3Vic3RpdHV0aW9uOyAvLy9cbiAgICB9XG5cbiAgICByZXR1cm4gc29sZVN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIGdldFNvbGVOb25Ucml2aWFsU3Vic3RpdHV0aW9uKG5lc3RlZCA9IHRydWUpIHtcbiAgICBsZXQgc29sZU5vblRyaXZpYWxTdWJzdGl0dXRpb24gPSBudWxsO1xuXG4gICAgY29uc3Qgc29sZVN1YnN0aXR1dGlvbiA9IHRoaXMuZ2V0U29sZVN1YnN0aXR1dGlvbihuZXN0ZWQpO1xuXG4gICAgaWYgKHNvbGVTdWJzdGl0dXRpb24gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHNvbGVTdWJzdGl0dXRpb25Ob25Ucml2aWFsID0gc29sZVN1YnN0aXR1dGlvbi5pc05vblRyaXZpYWwoKTtcblxuICAgICAgaWYgKHNvbGVTdWJzdGl0dXRpb25Ob25Ucml2aWFsKSB7XG4gICAgICAgIHNvbGVOb25Ucml2aWFsU3Vic3RpdHV0aW9uID0gc29sZVN1YnN0aXR1dGlvbjsgIC8vL1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzb2xlTm9uVHJpdmlhbFN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIGFkZFN1YnN0aXR1dGlvbihzdWJzdGl0dXRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgc3Vic3RpdHV0aW9uQSA9IHN1YnN0aXR1dGlvbiwgLy8vXG4gICAgICAgICAgc3Vic3RpdHV0aW9uU3RyaW5nID0gc3Vic3RpdHV0aW9uLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHtzdWJzdGl0dXRpb25TdHJpbmd9JyBzdWJzdGl0dXRpb24gdG8gdGhlIGxpbWluYWwgY29udGV4dC4uLmApO1xuXG4gICAgY29uc3Qgc3Vic3RpdHV0aW9uQiA9IHRoaXMuc3Vic3RpdHV0aW9ucy5maW5kKChzdWJzdGl0dXRpb24pID0+IHtcbiAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbkIgPSBzdWJzdGl0dXRpb24sIC8vL1xuICAgICAgICAgICAgc3Vic3RpdHV0aW9uQUVxdWFsVG9TdWJzdGl0dXRpb25CID0gc3Vic3RpdHV0aW9uQS5pc0VxdWFsVG8oc3Vic3RpdHV0aW9uQik7XG5cbiAgICAgIGlmIChzdWJzdGl0dXRpb25BRXF1YWxUb1N1YnN0aXR1dGlvbkIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSkgfHwgbnVsbDtcblxuICAgIGlmIChzdWJzdGl0dXRpb25CICE9PSBudWxsKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7c3Vic3RpdHV0aW9uU3RyaW5nfScgc3Vic3RpdHV0aW9uIGhhcyBhbHJlYWR5IGJlZW4gYWRkZWQgdG8gdGhlIGxpbWluYWwgY29udGV4dC5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdWJzdGl0dXRpb25zLnB1c2goc3Vic3RpdHV0aW9uKTtcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke3N1YnN0aXR1dGlvblN0cmluZ30nIHN1YnN0aXR1dGlvbiB0byB0aGUgbGltaW5hbCBjb250ZXh0LmApO1xuICAgIH1cbiAgfVxuXG4gIGFkZFN1YnN0aXR1dGlvbnMoc3Vic3RpdHV0aW9ucykge1xuICAgIHN1YnN0aXR1dGlvbnMuZm9yRWFjaCgoc3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICB0aGlzLmFkZFN1YnN0aXR1dGlvbihzdWJzdGl0dXRpb24pO1xuICAgIH0pO1xuICB9XG5cbiAgcmVzb2x2ZVN1YnN0aXR1dGlvbnMoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkge1xuICAgIGNvbnN0IHN1YnN0aXR1dGlvbnMgPSB0aGlzLmdldFN1YnN0aXR1dGlvbnMoKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVOYW1lcyA9IG1ldGF2YXJpYWJsZU5hbWVzRnJvbVN1YnN0aXR1dGlvbnMoc3Vic3RpdHV0aW9ucyk7XG5cbiAgICBtZXRhdmFyaWFibGVOYW1lcy5mb3JFYWNoKChtZXRhdmFyaWFibGVOYW1lKSA9PiB7XG4gICAgICBjb25zdCBjb21wbGV4U3Vic3RpdHV0aW9ucyA9IHRoaXMuZmluZENvbXBsZXhTdWJzdGl0dXRpb25zQnlNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpO1xuXG4gICAgICBjb21wbGV4U3Vic3RpdHV0aW9ucy5mb3JFYWNoKChjb21wbGV4U3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbiA9IGNvbXBsZXhTdWJzdGl0dXRpb24sIC8vL1xuICAgICAgICAgICAgICByZXNvbHZlZCA9IHN1YnN0aXR1dGlvbi5pc1Jlc29sdmVkKCk7XG5cbiAgICAgICAgaWYgKCFyZXNvbHZlZCkge1xuICAgICAgICAgIHN1YnN0aXR1dGlvbi5yZXNvbHZlKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGFyZVN1YnN0aXR1dGlvbnNSZXNvbHZlZCgpIHtcbiAgICBjb25zdCBzdWJzdGl0dXRpb25zID0gdGhpcy5nZXRTdWJzdGl0dXRpb25zKCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlTmFtZXMgPSBtZXRhdmFyaWFibGVOYW1lc0Zyb21TdWJzdGl0dXRpb25zKHN1YnN0aXR1dGlvbnMpLFxuICAgICAgICAgIHJlc29sdmVkID0gbWV0YXZhcmlhYmxlTmFtZXMuZXZlcnkoKG1ldGF2YXJpYWJsZU5hbWUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBsZXhTdWJzdGl0dXRpb25zID0gdGhpcy5maW5kQ29tcGxleFN1YnN0aXR1dGlvbnNCeU1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTmFtZSksXG4gICAgICAgICAgICAgICAgICBjb21wbGV4U3Vic3RpdHV0aW9uc1Jlc29sdmVkID0gY29tcGxleFN1YnN0aXR1dGlvbnMuZXZlcnkoKGNvbXBsZXhTdWJzdGl0dXRpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29tcGxleFN1YnN0aXR1dGlvblJlc29sdmVkID0gY29tcGxleFN1YnN0aXR1dGlvbi5pc1Jlc29sdmVkKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBsZXhTdWJzdGl0dXRpb25SZXNvbHZlZCkge1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKGNvbXBsZXhTdWJzdGl0dXRpb25zUmVzb2x2ZWQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICByZXR1cm4gcmVzb2x2ZWQ7XG4gIH1cblxuICBpc0VtcHR5KCkge1xuICAgIGNvbnN0IHN1YnN0aXR1dGlvbnNMZW5ndGggPSB0aGlzLnN1YnN0aXR1dGlvbnMubGVuZ3RoLFxuICAgICAgICAgIGVtcHR5ID0gKHN1YnN0aXR1dGlvbnNMZW5ndGggPT09IDApO1xuXG4gICAgcmV0dXJuIGVtcHR5O1xuICB9XG5cbiAgcXVhbGlmeShhc3N1bXB0aW9uLCBtZXRhTGV2ZWxBc3N1bXB0aW9uKSB7XG4gICAgbGV0IHF1YWxpZmllcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgZW1wdHkgPSB0aGlzLmlzRW1wdHkoKTtcblxuICAgIGlmIChlbXB0eSkge1xuICAgICAgcXVhbGlmaWVzID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbmVzdGVkID0gZmFsc2UsXG4gICAgICAgICAgICBzb2xlU3Vic3RpdHV0aW9uID0gdGhpcy5nZXRTb2xlU3Vic3RpdHV0aW9uKG5lc3RlZCk7XG5cbiAgICAgIGlmIChzb2xlU3Vic3RpdHV0aW9uICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHsgUmVmZXJlbmNlU3Vic3RpdHV0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgICAgICAgY29udGV4dCA9IHRoaXMsXG4gICAgICAgICAgICAgIHJlZmVyZW5jZVN1YnN0aXR1dGlvbiA9IFJlZmVyZW5jZVN1YnN0aXR1dGlvbi5mcm9tQXNzdW1wdGlvbkFuZE1ldGFMZXZlbEFzc3VtcHRpb24oYXNzdW1wdGlvbiwgbWV0YUxldmVsQXNzdW1wdGlvbiwgY29udGV4dCksXG4gICAgICAgICAgICAgIHNvbGVTdWJzdGl0dXRpb25Db21wYXJlcyA9IHJlZmVyZW5jZVN1YnN0aXR1dGlvbi5jb21wYXJlU3Vic3RpdHV0aW9uKHNvbGVTdWJzdGl0dXRpb24pO1xuXG4gICAgICAgIGlmIChzb2xlU3Vic3RpdHV0aW9uQ29tcGFyZXMpIHtcbiAgICAgICAgICBxdWFsaWZpZXMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHF1YWxpZmllcztcbiAgfVxuXG4gIGNvbW1pdChjb250ZXh0KSB7XG4gICAgaWYgKGNvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuICAgIH1cblxuICAgIGNvbnRleHQuZGVidWcoYENvbW1pdHRpbmcgdGhlIGxpbWlpbmFsIGNvbnRleHRgKTtcblxuICAgIGNvbnRleHQuYWRkU3Vic3RpdHV0aW9ucyh0aGlzLnN1YnN0aXR1dGlvbnMpO1xuICB9XG5cbiAgZmluZFN1YnN0aXR1dGlvbihjYWxsYmFjaykge1xuICAgIGNvbnN0IHN1YnN0aXR1dGlvbnMgPSB0aGlzLmdldFN1YnN0aXR1dGlvbnMoKSxcbiAgICAgICAgICBzdWJzdGl0dXRpb24gPSBzdWJzdGl0dXRpb25zLmZpbmQoY2FsbGJhY2spO1xuXG4gICAgcmV0dXJuIHN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIGZpbmRTdWJzdGl0dXRpb25zKGNhbGxiYWNrLCBuZXN0ZWQgPSB0cnVlKSB7XG4gICAgbGV0IHN1YnN0aXR1dGlvbnM7XG5cbiAgICBzdWJzdGl0dXRpb25zID0gdGhpcy5nZXRTdWJzdGl0dXRpb25zKG5lc3RlZCk7XG5cbiAgICBzdWJzdGl0dXRpb25zID0gZmluZChzdWJzdGl0dXRpb25zLCBjYWxsYmFjayk7ICAvLy9cblxuICAgIHJldHVybiBzdWJzdGl0dXRpb25zO1xuICB9XG5cbiAgZmluZFN1YnN0aXR1dGlvbkJ5VmFyaWFibGVJZGVudGlmaWVyKHZhcmlhYmxlSWRlbnRpZmllcikge1xuICAgIGNvbnN0IHN1YnN0aXR1dGlvbiA9IHRoaXMuZmluZFN1YnN0aXR1dGlvbigoc3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICBjb25zdCBzdWJzdGl0dXRpb25Db21wYXJlc1RvVmFyaWFibGVJZGVudGlmaWVyID0gc3Vic3RpdHV0aW9uLmNvbXBhcmVWYXJpYWJsZUlkZW50aWZpZXIodmFyaWFibGVJZGVudGlmaWVyKTtcblxuICAgICAgaWYgKHN1YnN0aXR1dGlvbkNvbXBhcmVzVG9WYXJpYWJsZUlkZW50aWZpZXIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBzdWJzdGl0dXRpb247XG4gIH1cblxuICBmaW5kU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpIHtcbiAgICBjb25zdCBzaW1wbGVTdWJzdGl0dXRpb24gPSB0aGlzLmZpbmRTaW1wbGVTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTmFtZSksXG4gICAgICAgICAgc3Vic3RpdHV0aW9uID0gc2ltcGxlU3Vic3RpdHV0aW9uOyAgLy8vXG5cbiAgICByZXR1cm4gc3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgZmluZFNpbXBsZVN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKSB7XG4gICAgY29uc3Qgc2ltcGxlU3Vic3RpdHV0aW9uID0gdGhpcy5maW5kU3Vic3RpdHV0aW9uKChzdWJzdGl0dXRpb24pID0+IHtcbiAgICAgIGNvbnN0IHN1YnN0aXR1dGlvblNpbXBsZSA9IHN1YnN0aXR1dGlvbi5pc1NpbXBsZSgpO1xuXG4gICAgICBpZiAoc3Vic3RpdHV0aW9uU2ltcGxlKSB7XG4gICAgICAgIGNvbnN0IHNpbXBsZVN1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbiwgIC8vL1xuICAgICAgICAgICAgICBzaW1wbGVTdWJzdGl0dXRpb25Db21wYXJlc1RvTWV0YXZhcmlhYmxlTmFtZSA9IHNpbXBsZVN1YnN0aXR1dGlvbi5jb21wYXJlTWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKTtcblxuICAgICAgICBpZiAoc2ltcGxlU3Vic3RpdHV0aW9uQ29tcGFyZXNUb01ldGF2YXJpYWJsZU5hbWUpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gc2ltcGxlU3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgZmluZENvbXBsZXhTdWJzdGl0dXRpb25zQnlNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpIHtcbiAgICBjb25zdCBjb21wbGV4U3Vic3RpdHV0aW9uID0gdGhpcy5maW5kU3Vic3RpdHV0aW9ucygoc3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICBjb25zdCBzdWJzdGl0dXRpb25Db21wbGV4ID0gc3Vic3RpdHV0aW9uLmlzQ29tcGxleCgpO1xuXG4gICAgICBpZiAoc3Vic3RpdHV0aW9uQ29tcGxleCkge1xuICAgICAgICBjb25zdCBjb21wbGV4U3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9uLCAgLy8vXG4gICAgICAgICAgICAgIGNvbXBsZXhTdWJzdGl0dXRpb25Db21wYXJlc1RvTWV0YXZhcmlhYmxlTmFtZSA9IGNvbXBsZXhTdWJzdGl0dXRpb24uY29tcGFyZU1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTmFtZSk7XG5cbiAgICAgICAgaWYgKGNvbXBsZXhTdWJzdGl0dXRpb25Db21wYXJlc1RvTWV0YXZhcmlhYmxlTmFtZSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBjb21wbGV4U3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgZmluZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTmFtZUFuZFN1YnN0aXR1dGlvbihtZXRhdmFyaWFibGVOYW1lLCBzdWJzdGl0dXRpb24pIHtcbiAgICBjb25zdCBzdWJzdGl0dXRpb25BID0gc3Vic3RpdHV0aW9uOyAvLy9cblxuICAgIHN1YnN0aXR1dGlvbiA9IHRoaXMuZmluZFN1YnN0aXR1dGlvbigoc3Vic3RpdHV0aW9uKSA9PiB7ICAvLy9cbiAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbkNvbXBhcmVzVG9NZXRhdmFyaWFibGVOYW1lID0gc3Vic3RpdHV0aW9uLmNvbXBhcmVNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpO1xuXG4gICAgICBpZiAoc3Vic3RpdHV0aW9uQ29tcGFyZXNUb01ldGF2YXJpYWJsZU5hbWUpIHtcbiAgICAgICAgY29uc3Qgc3Vic3RpdHV0aW9uQiA9IHN1YnN0aXR1dGlvbiwgLy8vXG4gICAgICAgICAgICAgIHN1YnN0aXR1dGlvbkJFcXVhbFRvU3Vic3RpdHV0aW9uQSA9IHN1YnN0aXR1dGlvbkIuaXNFcXVhbFRvKHN1YnN0aXR1dGlvbkEpO1xuXG4gICAgICAgIGlmIChzdWJzdGl0dXRpb25CRXF1YWxUb1N1YnN0aXR1dGlvbkEpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gc3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgaXNTdWJzdGl0dXRpb25QcmVzZW50QnlNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpIHtcbiAgICBjb25zdCBzdWJzdGl0dXRpb24gPSB0aGlzLmZpbmRTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTmFtZSksXG4gICAgICAgICAgc3Vic3RpdHV0aW9uUHJlc2VudCA9IChzdWJzdGl0dXRpb24gIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIHN1YnN0aXR1dGlvblByZXNlbnQ7XG4gIH1cblxuICBpc1NpbXBsZVN1YnN0aXR1dGlvblByZXNlbnRCeU1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTmFtZSkge1xuICAgIGNvbnN0IHNpbXBsZVN1YnN0aXR1dGlvbiA9IHRoaXMuZmluZFNpbXBsZVN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKSxcbiAgICAgICAgICBzaW1wbGVTdWJzdGl0dXRpb25QcmVzZW50ID0gKHNpbXBsZVN1YnN0aXR1dGlvbiAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gc2ltcGxlU3Vic3RpdHV0aW9uUHJlc2VudDtcbiAgfVxuXG4gIGlzU3Vic3RpdHV0aW9uUHJlc2VudEJ5TWV0YXZhcmlhYmxlTmFtZUFuZFN1YnN0aXR1dGlvbihtZXRhdmFyaWFibGVOYW1lLCBzdWJzdGl0dXRpb24pIHtcbiAgICBzdWJzdGl0dXRpb24gPSB0aGlzLmZpbmRTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5hbWVBbmRTdWJzdGl0dXRpb24obWV0YXZhcmlhYmxlTmFtZSwgc3Vic3RpdHV0aW9uKTsgIC8vL1xuXG4gICAgY29uc3Qgc3Vic3RpdHV0aW9uUHJlc2VudCA9IChzdWJzdGl0dXRpb24gIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIHN1YnN0aXR1dGlvblByZXNlbnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoY29udGV4dCkge1xuICAgIGNvbnN0IHN1YnN0aXR1dGlvbnMgPSBbXSxcbiAgICAgICAgICBsaW1pbmFsQ29udGV4dCA9IG5ldyBMaW1pbmFsQ29udGV4dChjb250ZXh0LCBzdWJzdGl0dXRpb25zKTtcblxuICAgIHJldHVybiBsaW1pbmFsQ29udGV4dDtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIkxpbWluYWxDb250ZXh0IiwiZmluZCIsImZpcnN0IiwiYXJyYXlVdGlsaXRpZXMiLCJDb250ZXh0IiwiY29udGV4dCIsInN1YnN0aXR1dGlvbnMiLCJnZXRTdWJzdGl0dXRpb25zIiwibmVzdGVkIiwiZ2V0Q29udGV4dCIsImdldFNvbGVTdWJzdGl0dXRpb24iLCJzb2xlU3Vic3RpdHV0aW9uIiwic3Vic3RpdHV0aW9uc0xlbmd0aCIsImxlbmd0aCIsImZpcnN0U3Vic3RpdHV0aW9uIiwiZ2V0U29sZU5vblRyaXZpYWxTdWJzdGl0dXRpb24iLCJzb2xlTm9uVHJpdmlhbFN1YnN0aXR1dGlvbiIsInNvbGVTdWJzdGl0dXRpb25Ob25Ucml2aWFsIiwiaXNOb25Ucml2aWFsIiwiYWRkU3Vic3RpdHV0aW9uIiwic3Vic3RpdHV0aW9uIiwic3Vic3RpdHV0aW9uQSIsInN1YnN0aXR1dGlvblN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwic3Vic3RpdHV0aW9uQiIsInN1YnN0aXR1dGlvbkFFcXVhbFRvU3Vic3RpdHV0aW9uQiIsImlzRXF1YWxUbyIsImRlYnVnIiwicHVzaCIsImFkZFN1YnN0aXR1dGlvbnMiLCJmb3JFYWNoIiwicmVzb2x2ZVN1YnN0aXR1dGlvbnMiLCJnZW5lcmFsQ29udGV4dCIsInNwZWNpZmljQ29udGV4dCIsIm1ldGF2YXJpYWJsZU5hbWVzIiwibWV0YXZhcmlhYmxlTmFtZXNGcm9tU3Vic3RpdHV0aW9ucyIsIm1ldGF2YXJpYWJsZU5hbWUiLCJjb21wbGV4U3Vic3RpdHV0aW9ucyIsImZpbmRDb21wbGV4U3Vic3RpdHV0aW9uc0J5TWV0YXZhcmlhYmxlTmFtZSIsImNvbXBsZXhTdWJzdGl0dXRpb24iLCJyZXNvbHZlZCIsImlzUmVzb2x2ZWQiLCJyZXNvbHZlIiwiYXJlU3Vic3RpdHV0aW9uc1Jlc29sdmVkIiwiZXZlcnkiLCJjb21wbGV4U3Vic3RpdHV0aW9uc1Jlc29sdmVkIiwiY29tcGxleFN1YnN0aXR1dGlvblJlc29sdmVkIiwiaXNFbXB0eSIsImVtcHR5IiwicXVhbGlmeSIsImFzc3VtcHRpb24iLCJtZXRhTGV2ZWxBc3N1bXB0aW9uIiwicXVhbGlmaWVzIiwiUmVmZXJlbmNlU3Vic3RpdHV0aW9uIiwiZWxlbWVudHMiLCJyZWZlcmVuY2VTdWJzdGl0dXRpb24iLCJmcm9tQXNzdW1wdGlvbkFuZE1ldGFMZXZlbEFzc3VtcHRpb24iLCJzb2xlU3Vic3RpdHV0aW9uQ29tcGFyZXMiLCJjb21wYXJlU3Vic3RpdHV0aW9uIiwiY29tbWl0IiwidW5kZWZpbmVkIiwiZmluZFN1YnN0aXR1dGlvbiIsImNhbGxiYWNrIiwiZmluZFN1YnN0aXR1dGlvbnMiLCJmaW5kU3Vic3RpdHV0aW9uQnlWYXJpYWJsZUlkZW50aWZpZXIiLCJ2YXJpYWJsZUlkZW50aWZpZXIiLCJzdWJzdGl0dXRpb25Db21wYXJlc1RvVmFyaWFibGVJZGVudGlmaWVyIiwiY29tcGFyZVZhcmlhYmxlSWRlbnRpZmllciIsImZpbmRTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5hbWUiLCJzaW1wbGVTdWJzdGl0dXRpb24iLCJmaW5kU2ltcGxlU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOYW1lIiwic3Vic3RpdHV0aW9uU2ltcGxlIiwiaXNTaW1wbGUiLCJzaW1wbGVTdWJzdGl0dXRpb25Db21wYXJlc1RvTWV0YXZhcmlhYmxlTmFtZSIsImNvbXBhcmVNZXRhdmFyaWFibGVOYW1lIiwic3Vic3RpdHV0aW9uQ29tcGxleCIsImlzQ29tcGxleCIsImNvbXBsZXhTdWJzdGl0dXRpb25Db21wYXJlc1RvTWV0YXZhcmlhYmxlTmFtZSIsImZpbmRTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5hbWVBbmRTdWJzdGl0dXRpb24iLCJzdWJzdGl0dXRpb25Db21wYXJlc1RvTWV0YXZhcmlhYmxlTmFtZSIsInN1YnN0aXR1dGlvbkJFcXVhbFRvU3Vic3RpdHV0aW9uQSIsImlzU3Vic3RpdHV0aW9uUHJlc2VudEJ5TWV0YXZhcmlhYmxlTmFtZSIsInN1YnN0aXR1dGlvblByZXNlbnQiLCJpc1NpbXBsZVN1YnN0aXR1dGlvblByZXNlbnRCeU1ldGF2YXJpYWJsZU5hbWUiLCJzaW1wbGVTdWJzdGl0dXRpb25QcmVzZW50IiwiaXNTdWJzdGl0dXRpb25QcmVzZW50QnlNZXRhdmFyaWFibGVOYW1lQW5kU3Vic3RpdHV0aW9uIiwiZnJvbU5vdGhpbmciLCJsaW1pbmFsQ29udGV4dCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBVUE7OztlQUFxQkE7OzsyQkFSVTsrQkFDb0I7Z0VBRS9CO2lFQUNDOzs7Ozs7QUFFckIsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLEtBQUssRUFBRSxHQUFHQyx5QkFBYztBQUV2QixNQUFNSCx1QkFBdUJJLGdCQUFPO0lBQ2pELFlBQVlDLE9BQU8sRUFBRUMsYUFBYSxDQUFFO1FBQ2xDLEtBQUssQ0FBQ0Q7UUFFTixJQUFJLENBQUNDLGFBQWEsR0FBR0E7SUFDdkI7SUFFQUMsaUJBQWlCQyxTQUFTLElBQUksRUFBRTtRQUM5QixJQUFJRjtRQUVKLElBQUlFLFFBQVE7WUFDVixNQUFNSCxVQUFVLElBQUksQ0FBQ0ksVUFBVTtZQUUvQkgsZ0JBQWdCRCxRQUFRRSxnQkFBZ0I7WUFFeENELGdCQUFnQjttQkFDWCxJQUFJLENBQUNBLGFBQWE7bUJBQ2xCQTthQUNKO1FBQ0gsT0FBTztZQUNMQSxnQkFBZ0IsSUFBSSxDQUFDQSxhQUFhO1FBQ3BDO1FBRUEsT0FBT0E7SUFDVDtJQUVBSSxvQkFBb0JGLFNBQVMsSUFBSSxFQUFFO1FBQ2pDLElBQUlHLG1CQUFtQjtRQUV2QixNQUFNTCxnQkFBZ0IsSUFBSSxDQUFDQyxnQkFBZ0IsQ0FBQ0MsU0FDdENJLHNCQUFzQk4sY0FBY08sTUFBTTtRQUVoRCxJQUFJRCx3QkFBd0IsR0FBRztZQUM3QixNQUFNRSxvQkFBb0JaLE1BQU1JO1lBRWhDSyxtQkFBbUJHLG1CQUFtQixHQUFHO1FBQzNDO1FBRUEsT0FBT0g7SUFDVDtJQUVBSSw4QkFBOEJQLFNBQVMsSUFBSSxFQUFFO1FBQzNDLElBQUlRLDZCQUE2QjtRQUVqQyxNQUFNTCxtQkFBbUIsSUFBSSxDQUFDRCxtQkFBbUIsQ0FBQ0Y7UUFFbEQsSUFBSUcscUJBQXFCLE1BQU07WUFDN0IsTUFBTU0sNkJBQTZCTixpQkFBaUJPLFlBQVk7WUFFaEUsSUFBSUQsNEJBQTRCO2dCQUM5QkQsNkJBQTZCTCxrQkFBbUIsR0FBRztZQUNyRDtRQUNGO1FBRUEsT0FBT0s7SUFDVDtJQUVBRyxnQkFBZ0JDLFlBQVksRUFBRTtRQUM1QixNQUFNZixVQUFVLElBQUksRUFDZGdCLGdCQUFnQkQsY0FDaEJFLHFCQUFxQkYsYUFBYUcsU0FBUztRQUVqRGxCLFFBQVFtQixLQUFLLENBQUMsQ0FBQyxZQUFZLEVBQUVGLG1CQUFtQix3Q0FBd0MsQ0FBQztRQUV6RixNQUFNRyxnQkFBZ0IsSUFBSSxDQUFDbkIsYUFBYSxDQUFDTCxJQUFJLENBQUMsQ0FBQ21CO1lBQzdDLE1BQU1LLGdCQUFnQkwsY0FDaEJNLG9DQUFvQ0wsY0FBY00sU0FBUyxDQUFDRjtZQUVsRSxJQUFJQyxtQ0FBbUM7Z0JBQ3JDLE9BQU87WUFDVDtRQUNGLE1BQU07UUFFTixJQUFJRCxrQkFBa0IsTUFBTTtZQUMxQnBCLFFBQVF1QixLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUVOLG1CQUFtQiw2REFBNkQsQ0FBQztRQUN6RyxPQUFPO1lBQ0wsSUFBSSxDQUFDaEIsYUFBYSxDQUFDdUIsSUFBSSxDQUFDVDtZQUV4QmYsUUFBUXVCLEtBQUssQ0FBQyxDQUFDLGNBQWMsRUFBRU4sbUJBQW1CLHNDQUFzQyxDQUFDO1FBQzNGO0lBQ0Y7SUFFQVEsaUJBQWlCeEIsYUFBYSxFQUFFO1FBQzlCQSxjQUFjeUIsT0FBTyxDQUFDLENBQUNYO1lBQ3JCLElBQUksQ0FBQ0QsZUFBZSxDQUFDQztRQUN2QjtJQUNGO0lBRUFZLHFCQUFxQkMsY0FBYyxFQUFFQyxlQUFlLEVBQUU7UUFDcEQsTUFBTTVCLGdCQUFnQixJQUFJLENBQUNDLGdCQUFnQixJQUNyQzRCLG9CQUFvQkMsSUFBQUEsaURBQWtDLEVBQUM5QjtRQUU3RDZCLGtCQUFrQkosT0FBTyxDQUFDLENBQUNNO1lBQ3pCLE1BQU1DLHVCQUF1QixJQUFJLENBQUNDLDBDQUEwQyxDQUFDRjtZQUU3RUMscUJBQXFCUCxPQUFPLENBQUMsQ0FBQ1M7Z0JBQzVCLE1BQU1wQixlQUFlb0IscUJBQ2ZDLFdBQVdyQixhQUFhc0IsVUFBVTtnQkFFeEMsSUFBSSxDQUFDRCxVQUFVO29CQUNickIsYUFBYXVCLE9BQU8sQ0FBQ1YsZ0JBQWdCQztnQkFDdkM7WUFDRjtRQUNGO0lBQ0Y7SUFFQVUsMkJBQTJCO1FBQ3pCLE1BQU10QyxnQkFBZ0IsSUFBSSxDQUFDQyxnQkFBZ0IsSUFDckM0QixvQkFBb0JDLElBQUFBLGlEQUFrQyxFQUFDOUIsZ0JBQ3ZEbUMsV0FBV04sa0JBQWtCVSxLQUFLLENBQUMsQ0FBQ1I7WUFDbEMsTUFBTUMsdUJBQXVCLElBQUksQ0FBQ0MsMENBQTBDLENBQUNGLG1CQUN2RVMsK0JBQStCUixxQkFBcUJPLEtBQUssQ0FBQyxDQUFDTDtnQkFDekQsTUFBTU8sOEJBQThCUCxvQkFBb0JFLFVBQVU7Z0JBRWxFLElBQUlLLDZCQUE2QjtvQkFDL0IsT0FBTztnQkFDVDtZQUNGO1lBRU4sSUFBSUQsOEJBQThCO2dCQUNoQyxPQUFPO1lBQ1Q7UUFDRjtRQUVOLE9BQU9MO0lBQ1Q7SUFFQU8sVUFBVTtRQUNSLE1BQU1wQyxzQkFBc0IsSUFBSSxDQUFDTixhQUFhLENBQUNPLE1BQU0sRUFDL0NvQyxRQUFTckMsd0JBQXdCO1FBRXZDLE9BQU9xQztJQUNUO0lBRUFDLFFBQVFDLFVBQVUsRUFBRUMsbUJBQW1CLEVBQUU7UUFDdkMsSUFBSUMsWUFBWTtRQUVoQixNQUFNSixRQUFRLElBQUksQ0FBQ0QsT0FBTztRQUUxQixJQUFJQyxPQUFPO1lBQ1RJLFlBQVk7UUFDZCxPQUFPO1lBQ0wsTUFBTTdDLFNBQVMsT0FDVEcsbUJBQW1CLElBQUksQ0FBQ0QsbUJBQW1CLENBQUNGO1lBRWxELElBQUlHLHFCQUFxQixNQUFNO2dCQUM3QixNQUFNLEVBQUUyQyxxQkFBcUIsRUFBRSxHQUFHQyxpQkFBUSxFQUNwQ2xELFVBQVUsSUFBSSxFQUNkbUQsd0JBQXdCRixzQkFBc0JHLG9DQUFvQyxDQUFDTixZQUFZQyxxQkFBcUIvQyxVQUNwSHFELDJCQUEyQkYsc0JBQXNCRyxtQkFBbUIsQ0FBQ2hEO2dCQUUzRSxJQUFJK0MsMEJBQTBCO29CQUM1QkwsWUFBWTtnQkFDZDtZQUNGO1FBQ0Y7UUFFQSxPQUFPQTtJQUNUO0lBRUFPLE9BQU92RCxPQUFPLEVBQUU7UUFDZCxJQUFJQSxZQUFZd0QsV0FBVztZQUN6QnhELFVBQVUsSUFBSSxDQUFDSSxVQUFVO1FBQzNCO1FBRUFKLFFBQVF1QixLQUFLLENBQUMsQ0FBQywrQkFBK0IsQ0FBQztRQUUvQ3ZCLFFBQVF5QixnQkFBZ0IsQ0FBQyxJQUFJLENBQUN4QixhQUFhO0lBQzdDO0lBRUF3RCxpQkFBaUJDLFFBQVEsRUFBRTtRQUN6QixNQUFNekQsZ0JBQWdCLElBQUksQ0FBQ0MsZ0JBQWdCLElBQ3JDYSxlQUFlZCxjQUFjTCxJQUFJLENBQUM4RDtRQUV4QyxPQUFPM0M7SUFDVDtJQUVBNEMsa0JBQWtCRCxRQUFRLEVBQUV2RCxTQUFTLElBQUksRUFBRTtRQUN6QyxJQUFJRjtRQUVKQSxnQkFBZ0IsSUFBSSxDQUFDQyxnQkFBZ0IsQ0FBQ0M7UUFFdENGLGdCQUFnQkwsS0FBS0ssZUFBZXlELFdBQVksR0FBRztRQUVuRCxPQUFPekQ7SUFDVDtJQUVBMkQscUNBQXFDQyxrQkFBa0IsRUFBRTtRQUN2RCxNQUFNOUMsZUFBZSxJQUFJLENBQUMwQyxnQkFBZ0IsQ0FBQyxDQUFDMUM7WUFDMUMsTUFBTStDLDJDQUEyQy9DLGFBQWFnRCx5QkFBeUIsQ0FBQ0Y7WUFFeEYsSUFBSUMsMENBQTBDO2dCQUM1QyxPQUFPO1lBQ1Q7UUFDRixNQUFNO1FBRU4sT0FBTy9DO0lBQ1Q7SUFFQWlELG1DQUFtQ2hDLGdCQUFnQixFQUFFO1FBQ25ELE1BQU1pQyxxQkFBcUIsSUFBSSxDQUFDQyx3Q0FBd0MsQ0FBQ2xDLG1CQUNuRWpCLGVBQWVrRCxvQkFBcUIsR0FBRztRQUU3QyxPQUFPbEQ7SUFDVDtJQUVBbUQseUNBQXlDbEMsZ0JBQWdCLEVBQUU7UUFDekQsTUFBTWlDLHFCQUFxQixJQUFJLENBQUNSLGdCQUFnQixDQUFDLENBQUMxQztZQUNoRCxNQUFNb0QscUJBQXFCcEQsYUFBYXFELFFBQVE7WUFFaEQsSUFBSUQsb0JBQW9CO2dCQUN0QixNQUFNRixxQkFBcUJsRCxjQUNyQnNELCtDQUErQ0osbUJBQW1CSyx1QkFBdUIsQ0FBQ3RDO2dCQUVoRyxJQUFJcUMsOENBQThDO29CQUNoRCxPQUFPO2dCQUNUO1lBQ0Y7UUFDRixNQUFNO1FBRU4sT0FBT0o7SUFDVDtJQUVBL0IsMkNBQTJDRixnQkFBZ0IsRUFBRTtRQUMzRCxNQUFNRyxzQkFBc0IsSUFBSSxDQUFDd0IsaUJBQWlCLENBQUMsQ0FBQzVDO1lBQ2xELE1BQU13RCxzQkFBc0J4RCxhQUFheUQsU0FBUztZQUVsRCxJQUFJRCxxQkFBcUI7Z0JBQ3ZCLE1BQU1wQyxzQkFBc0JwQixjQUN0QjBELGdEQUFnRHRDLG9CQUFvQm1DLHVCQUF1QixDQUFDdEM7Z0JBRWxHLElBQUl5QywrQ0FBK0M7b0JBQ2pELE9BQU87Z0JBQ1Q7WUFDRjtRQUNGLE1BQU07UUFFTixPQUFPdEM7SUFDVDtJQUVBdUMsa0RBQWtEMUMsZ0JBQWdCLEVBQUVqQixZQUFZLEVBQUU7UUFDaEYsTUFBTUMsZ0JBQWdCRCxjQUFjLEdBQUc7UUFFdkNBLGVBQWUsSUFBSSxDQUFDMEMsZ0JBQWdCLENBQUMsQ0FBQzFDO1lBQ3BDLE1BQU00RCx5Q0FBeUM1RCxhQUFhdUQsdUJBQXVCLENBQUN0QztZQUVwRixJQUFJMkMsd0NBQXdDO2dCQUMxQyxNQUFNdkQsZ0JBQWdCTCxjQUNoQjZELG9DQUFvQ3hELGNBQWNFLFNBQVMsQ0FBQ047Z0JBRWxFLElBQUk0RCxtQ0FBbUM7b0JBQ3JDLE9BQU87Z0JBQ1Q7WUFDRjtRQUNGLE1BQU07UUFFTixPQUFPN0Q7SUFDVDtJQUVBOEQsd0NBQXdDN0MsZ0JBQWdCLEVBQUU7UUFDeEQsTUFBTWpCLGVBQWUsSUFBSSxDQUFDaUQsa0NBQWtDLENBQUNoQyxtQkFDdkQ4QyxzQkFBdUIvRCxpQkFBaUI7UUFFOUMsT0FBTytEO0lBQ1Q7SUFFQUMsOENBQThDL0MsZ0JBQWdCLEVBQUU7UUFDOUQsTUFBTWlDLHFCQUFxQixJQUFJLENBQUNDLHdDQUF3QyxDQUFDbEMsbUJBQ25FZ0QsNEJBQTZCZix1QkFBdUI7UUFFMUQsT0FBT2U7SUFDVDtJQUVBQyx1REFBdURqRCxnQkFBZ0IsRUFBRWpCLFlBQVksRUFBRTtRQUNyRkEsZUFBZSxJQUFJLENBQUMyRCxpREFBaUQsQ0FBQzFDLGtCQUFrQmpCLGVBQWdCLEdBQUc7UUFFM0csTUFBTStELHNCQUF1Qi9ELGlCQUFpQjtRQUU5QyxPQUFPK0Q7SUFDVDtJQUVBLE9BQU9JLFlBQVlsRixPQUFPLEVBQUU7UUFDMUIsTUFBTUMsZ0JBQWdCLEVBQUUsRUFDbEJrRixpQkFBaUIsSUFBSXhGLGVBQWVLLFNBQVNDO1FBRW5ELE9BQU9rRjtJQUNUO0FBQ0YifQ==
213
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L2xpbWluYWwuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuaW1wb3J0IHsgbWV0YXZhcmlhYmxlTmFtZXNGcm9tU3Vic3RpdHV0aW9ucyB9IGZyb20gXCIuLi91dGlsaXRpZXMvc3Vic3RpdHV0aW9uc1wiO1xuXG5pbXBvcnQgQ29udGV4dCBmcm9tIFwiLi4vY29udGV4dFwiO1xuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5jb25zdCB7IGZpbmQsIGZpcnN0IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGltaW5hbENvbnRleHQgZXh0ZW5kcyBDb250ZXh0IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgc3Vic3RpdHV0aW9ucykge1xuICAgIHN1cGVyKGNvbnRleHQpO1xuXG4gICAgdGhpcy5zdWJzdGl0dXRpb25zID0gc3Vic3RpdHV0aW9ucztcbiAgfVxuXG4gIGdldFN1YnN0aXR1dGlvbnMobmVzdGVkID0gdHJ1ZSkge1xuICAgIGxldCBzdWJzdGl0dXRpb25zO1xuXG4gICAgaWYgKG5lc3RlZCkge1xuICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgICBzdWJzdGl0dXRpb25zID0gY29udGV4dC5nZXRTdWJzdGl0dXRpb25zKCk7XG5cbiAgICAgIHN1YnN0aXR1dGlvbnMgPSBbIC8vL1xuICAgICAgICAuLi50aGlzLnN1YnN0aXR1dGlvbnMsXG4gICAgICAgIC4uLnN1YnN0aXR1dGlvbnNcbiAgICAgIF1cbiAgICB9IGVsc2Uge1xuICAgICAgc3Vic3RpdHV0aW9ucyA9IHRoaXMuc3Vic3RpdHV0aW9ucztcbiAgICB9XG5cbiAgICByZXR1cm4gc3Vic3RpdHV0aW9ucztcbiAgfVxuXG4gIGdldFNvbGVTdWJzdGl0dXRpb24obmVzdGVkID0gdHJ1ZSkge1xuICAgIGxldCBzb2xlU3Vic3RpdHV0aW9uID0gbnVsbDtcblxuICAgIGNvbnN0IHN1YnN0aXR1dGlvbnMgPSB0aGlzLmdldFN1YnN0aXR1dGlvbnMobmVzdGVkKSxcbiAgICAgICAgICBzdWJzdGl0dXRpb25zTGVuZ3RoID0gc3Vic3RpdHV0aW9ucy5sZW5ndGg7XG5cbiAgICBpZiAoc3Vic3RpdHV0aW9uc0xlbmd0aCA9PT0gMSkge1xuICAgICAgY29uc3QgZmlyc3RTdWJzdGl0dXRpb24gPSBmaXJzdChzdWJzdGl0dXRpb25zKTtcblxuICAgICAgc29sZVN1YnN0aXR1dGlvbiA9IGZpcnN0U3Vic3RpdHV0aW9uOyAvLy9cbiAgICB9XG5cbiAgICByZXR1cm4gc29sZVN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIGdldFNvbGVOb25Ucml2aWFsU3Vic3RpdHV0aW9uKG5lc3RlZCA9IHRydWUpIHtcbiAgICBsZXQgc29sZU5vblRyaXZpYWxTdWJzdGl0dXRpb24gPSBudWxsO1xuXG4gICAgY29uc3Qgc29sZVN1YnN0aXR1dGlvbiA9IHRoaXMuZ2V0U29sZVN1YnN0aXR1dGlvbihuZXN0ZWQpO1xuXG4gICAgaWYgKHNvbGVTdWJzdGl0dXRpb24gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHNvbGVTdWJzdGl0dXRpb25Ob25Ucml2aWFsID0gc29sZVN1YnN0aXR1dGlvbi5pc05vblRyaXZpYWwoKTtcblxuICAgICAgaWYgKHNvbGVTdWJzdGl0dXRpb25Ob25Ucml2aWFsKSB7XG4gICAgICAgIHNvbGVOb25Ucml2aWFsU3Vic3RpdHV0aW9uID0gc29sZVN1YnN0aXR1dGlvbjsgIC8vL1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzb2xlTm9uVHJpdmlhbFN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIGFkZFN1YnN0aXR1dGlvbihzdWJzdGl0dXRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgc3Vic3RpdHV0aW9uQSA9IHN1YnN0aXR1dGlvbiwgLy8vXG4gICAgICAgICAgc3Vic3RpdHV0aW9uU3RyaW5nID0gc3Vic3RpdHV0aW9uLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHtzdWJzdGl0dXRpb25TdHJpbmd9JyBzdWJzdGl0dXRpb24gdG8gdGhlIGxpbWluYWwgY29udGV4dC4uLmApO1xuXG4gICAgY29uc3Qgc3Vic3RpdHV0aW9uQiA9IHRoaXMuc3Vic3RpdHV0aW9ucy5maW5kKChzdWJzdGl0dXRpb24pID0+IHtcbiAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbkIgPSBzdWJzdGl0dXRpb24sIC8vL1xuICAgICAgICAgICAgc3Vic3RpdHV0aW9uQUVxdWFsVG9TdWJzdGl0dXRpb25CID0gc3Vic3RpdHV0aW9uQS5pc0VxdWFsVG8oc3Vic3RpdHV0aW9uQik7XG5cbiAgICAgIGlmIChzdWJzdGl0dXRpb25BRXF1YWxUb1N1YnN0aXR1dGlvbkIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSkgfHwgbnVsbDtcblxuICAgIGlmIChzdWJzdGl0dXRpb25CICE9PSBudWxsKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7c3Vic3RpdHV0aW9uU3RyaW5nfScgc3Vic3RpdHV0aW9uIGhhcyBhbHJlYWR5IGJlZW4gYWRkZWQgdG8gdGhlIGxpbWluYWwgY29udGV4dC5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdWJzdGl0dXRpb25zLnB1c2goc3Vic3RpdHV0aW9uKTtcbiAgICB9XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7c3Vic3RpdHV0aW9uU3RyaW5nfScgc3Vic3RpdHV0aW9uIHRvIHRoZSBsaW1pbmFsIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRTdWJzdGl0dXRpb25zKHN1YnN0aXR1dGlvbnMpIHtcbiAgICBzdWJzdGl0dXRpb25zLmZvckVhY2goKHN1YnN0aXR1dGlvbikgPT4ge1xuICAgICAgdGhpcy5hZGRTdWJzdGl0dXRpb24oc3Vic3RpdHV0aW9uKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlc29sdmVTdWJzdGl0dXRpb25zKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgICBjb25zdCBzdWJzdGl0dXRpb25zID0gdGhpcy5nZXRTdWJzdGl0dXRpb25zKCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlTmFtZXMgPSBtZXRhdmFyaWFibGVOYW1lc0Zyb21TdWJzdGl0dXRpb25zKHN1YnN0aXR1dGlvbnMpO1xuXG4gICAgbWV0YXZhcmlhYmxlTmFtZXMuZm9yRWFjaCgobWV0YXZhcmlhYmxlTmFtZSkgPT4ge1xuICAgICAgY29uc3QgY29tcGxleFN1YnN0aXR1dGlvbnMgPSB0aGlzLmZpbmRDb21wbGV4U3Vic3RpdHV0aW9uc0J5TWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKTtcblxuICAgICAgY29tcGxleFN1YnN0aXR1dGlvbnMuZm9yRWFjaCgoY29tcGxleFN1YnN0aXR1dGlvbikgPT4ge1xuICAgICAgICBjb25zdCBzdWJzdGl0dXRpb24gPSBjb21wbGV4U3Vic3RpdHV0aW9uLCAvLy9cbiAgICAgICAgICAgICAgcmVzb2x2ZWQgPSBzdWJzdGl0dXRpb24uaXNSZXNvbHZlZCgpO1xuXG4gICAgICAgIGlmICghcmVzb2x2ZWQpIHtcbiAgICAgICAgICBzdWJzdGl0dXRpb24ucmVzb2x2ZShnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBhcmVTdWJzdGl0dXRpb25zUmVzb2x2ZWQoKSB7XG4gICAgY29uc3Qgc3Vic3RpdHV0aW9ucyA9IHRoaXMuZ2V0U3Vic3RpdHV0aW9ucygpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZU5hbWVzID0gbWV0YXZhcmlhYmxlTmFtZXNGcm9tU3Vic3RpdHV0aW9ucyhzdWJzdGl0dXRpb25zKSxcbiAgICAgICAgICByZXNvbHZlZCA9IG1ldGF2YXJpYWJsZU5hbWVzLmV2ZXJ5KChtZXRhdmFyaWFibGVOYW1lKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb21wbGV4U3Vic3RpdHV0aW9ucyA9IHRoaXMuZmluZENvbXBsZXhTdWJzdGl0dXRpb25zQnlNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpLFxuICAgICAgICAgICAgICAgICAgY29tcGxleFN1YnN0aXR1dGlvbnNSZXNvbHZlZCA9IGNvbXBsZXhTdWJzdGl0dXRpb25zLmV2ZXJ5KChjb21wbGV4U3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBsZXhTdWJzdGl0dXRpb25SZXNvbHZlZCA9IGNvbXBsZXhTdWJzdGl0dXRpb24uaXNSZXNvbHZlZCgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21wbGV4U3Vic3RpdHV0aW9uUmVzb2x2ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChjb21wbGV4U3Vic3RpdHV0aW9uc1Jlc29sdmVkKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc29sdmVkO1xuICB9XG5cbiAgaXNFbXB0eSgpIHtcbiAgICBjb25zdCBzdWJzdGl0dXRpb25zTGVuZ3RoID0gdGhpcy5zdWJzdGl0dXRpb25zLmxlbmd0aCxcbiAgICAgICAgICBlbXB0eSA9IChzdWJzdGl0dXRpb25zTGVuZ3RoID09PSAwKTtcblxuICAgIHJldHVybiBlbXB0eTtcbiAgfVxuXG4gIHF1YWxpZnkoYXNzdW1wdGlvbiwgbWV0YUxldmVsQXNzdW1wdGlvbikge1xuICAgIGxldCBxdWFsaWZpZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IGVtcHR5ID0gdGhpcy5pc0VtcHR5KCk7XG5cbiAgICBpZiAoZW1wdHkpIHtcbiAgICAgIHF1YWxpZmllcyA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG5lc3RlZCA9IGZhbHNlLFxuICAgICAgICAgICAgc29sZVN1YnN0aXR1dGlvbiA9IHRoaXMuZ2V0U29sZVN1YnN0aXR1dGlvbihuZXN0ZWQpO1xuXG4gICAgICBpZiAoc29sZVN1YnN0aXR1dGlvbiAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCB7IFJlZmVyZW5jZVN1YnN0aXR1dGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgICAgIGNvbnRleHQgPSB0aGlzLFxuICAgICAgICAgICAgICByZWZlcmVuY2VTdWJzdGl0dXRpb24gPSBSZWZlcmVuY2VTdWJzdGl0dXRpb24uZnJvbUFzc3VtcHRpb25BbmRNZXRhTGV2ZWxBc3N1bXB0aW9uKGFzc3VtcHRpb24sIG1ldGFMZXZlbEFzc3VtcHRpb24sIGNvbnRleHQpLFxuICAgICAgICAgICAgICBzb2xlU3Vic3RpdHV0aW9uQ29tcGFyZXMgPSByZWZlcmVuY2VTdWJzdGl0dXRpb24uY29tcGFyZVN1YnN0aXR1dGlvbihzb2xlU3Vic3RpdHV0aW9uKTtcblxuICAgICAgICBpZiAoc29sZVN1YnN0aXR1dGlvbkNvbXBhcmVzKSB7XG4gICAgICAgICAgcXVhbGlmaWVzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBxdWFsaWZpZXM7XG4gIH1cblxuICBjb21taXQoY29udGV4dCkge1xuICAgIGlmIChjb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcbiAgICB9XG5cbiAgICBjb250ZXh0LmRlYnVnKGBDb21taXR0aW5nIHRoZSBsaW1paW5hbCBjb250ZXh0YCk7XG5cbiAgICBjb250ZXh0LmFkZFN1YnN0aXR1dGlvbnModGhpcy5zdWJzdGl0dXRpb25zKTtcbiAgfVxuXG4gIGZpbmRTdWJzdGl0dXRpb24oY2FsbGJhY2spIHtcbiAgICBjb25zdCBzdWJzdGl0dXRpb25zID0gdGhpcy5nZXRTdWJzdGl0dXRpb25zKCksXG4gICAgICAgICAgc3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9ucy5maW5kKGNhbGxiYWNrKTtcblxuICAgIHJldHVybiBzdWJzdGl0dXRpb247XG4gIH1cblxuICBmaW5kU3Vic3RpdHV0aW9ucyhjYWxsYmFjaywgbmVzdGVkID0gdHJ1ZSkge1xuICAgIGxldCBzdWJzdGl0dXRpb25zO1xuXG4gICAgc3Vic3RpdHV0aW9ucyA9IHRoaXMuZ2V0U3Vic3RpdHV0aW9ucyhuZXN0ZWQpO1xuXG4gICAgc3Vic3RpdHV0aW9ucyA9IGZpbmQoc3Vic3RpdHV0aW9ucywgY2FsbGJhY2spOyAgLy8vXG5cbiAgICByZXR1cm4gc3Vic3RpdHV0aW9ucztcbiAgfVxuXG4gIGZpbmRTdWJzdGl0dXRpb25CeVZhcmlhYmxlSWRlbnRpZmllcih2YXJpYWJsZUlkZW50aWZpZXIpIHtcbiAgICBjb25zdCBzdWJzdGl0dXRpb24gPSB0aGlzLmZpbmRTdWJzdGl0dXRpb24oKHN1YnN0aXR1dGlvbikgPT4ge1xuICAgICAgY29uc3Qgc3Vic3RpdHV0aW9uQ29tcGFyZXNUb1ZhcmlhYmxlSWRlbnRpZmllciA9IHN1YnN0aXR1dGlvbi5jb21wYXJlVmFyaWFibGVJZGVudGlmaWVyKHZhcmlhYmxlSWRlbnRpZmllcik7XG5cbiAgICAgIGlmIChzdWJzdGl0dXRpb25Db21wYXJlc1RvVmFyaWFibGVJZGVudGlmaWVyKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gc3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgZmluZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKSB7XG4gICAgY29uc3Qgc2ltcGxlU3Vic3RpdHV0aW9uID0gdGhpcy5maW5kU2ltcGxlU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpLFxuICAgICAgICAgIHN1YnN0aXR1dGlvbiA9IHNpbXBsZVN1YnN0aXR1dGlvbjsgIC8vL1xuXG4gICAgcmV0dXJuIHN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIGZpbmRTaW1wbGVTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTmFtZSkge1xuICAgIGNvbnN0IHNpbXBsZVN1YnN0aXR1dGlvbiA9IHRoaXMuZmluZFN1YnN0aXR1dGlvbigoc3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICBjb25zdCBzdWJzdGl0dXRpb25TaW1wbGUgPSBzdWJzdGl0dXRpb24uaXNTaW1wbGUoKTtcblxuICAgICAgaWYgKHN1YnN0aXR1dGlvblNpbXBsZSkge1xuICAgICAgICBjb25zdCBzaW1wbGVTdWJzdGl0dXRpb24gPSBzdWJzdGl0dXRpb24sICAvLy9cbiAgICAgICAgICAgICAgc2ltcGxlU3Vic3RpdHV0aW9uQ29tcGFyZXNUb01ldGF2YXJpYWJsZU5hbWUgPSBzaW1wbGVTdWJzdGl0dXRpb24uY29tcGFyZU1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTmFtZSk7XG5cbiAgICAgICAgaWYgKHNpbXBsZVN1YnN0aXR1dGlvbkNvbXBhcmVzVG9NZXRhdmFyaWFibGVOYW1lKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHNpbXBsZVN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIGZpbmRDb21wbGV4U3Vic3RpdHV0aW9uc0J5TWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKSB7XG4gICAgY29uc3QgY29tcGxleFN1YnN0aXR1dGlvbiA9IHRoaXMuZmluZFN1YnN0aXR1dGlvbnMoKHN1YnN0aXR1dGlvbikgPT4ge1xuICAgICAgY29uc3Qgc3Vic3RpdHV0aW9uQ29tcGxleCA9IHN1YnN0aXR1dGlvbi5pc0NvbXBsZXgoKTtcblxuICAgICAgaWYgKHN1YnN0aXR1dGlvbkNvbXBsZXgpIHtcbiAgICAgICAgY29uc3QgY29tcGxleFN1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbiwgIC8vL1xuICAgICAgICAgICAgICBjb21wbGV4U3Vic3RpdHV0aW9uQ29tcGFyZXNUb01ldGF2YXJpYWJsZU5hbWUgPSBjb21wbGV4U3Vic3RpdHV0aW9uLmNvbXBhcmVNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpO1xuXG4gICAgICAgIGlmIChjb21wbGV4U3Vic3RpdHV0aW9uQ29tcGFyZXNUb01ldGF2YXJpYWJsZU5hbWUpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gY29tcGxleFN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIGZpbmRTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5hbWVBbmRTdWJzdGl0dXRpb24obWV0YXZhcmlhYmxlTmFtZSwgc3Vic3RpdHV0aW9uKSB7XG4gICAgY29uc3Qgc3Vic3RpdHV0aW9uQSA9IHN1YnN0aXR1dGlvbjsgLy8vXG5cbiAgICBzdWJzdGl0dXRpb24gPSB0aGlzLmZpbmRTdWJzdGl0dXRpb24oKHN1YnN0aXR1dGlvbikgPT4geyAgLy8vXG4gICAgICBjb25zdCBzdWJzdGl0dXRpb25Db21wYXJlc1RvTWV0YXZhcmlhYmxlTmFtZSA9IHN1YnN0aXR1dGlvbi5jb21wYXJlTWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKTtcblxuICAgICAgaWYgKHN1YnN0aXR1dGlvbkNvbXBhcmVzVG9NZXRhdmFyaWFibGVOYW1lKSB7XG4gICAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbkIgPSBzdWJzdGl0dXRpb24sIC8vL1xuICAgICAgICAgICAgICBzdWJzdGl0dXRpb25CRXF1YWxUb1N1YnN0aXR1dGlvbkEgPSBzdWJzdGl0dXRpb25CLmlzRXF1YWxUbyhzdWJzdGl0dXRpb25BKTtcblxuICAgICAgICBpZiAoc3Vic3RpdHV0aW9uQkVxdWFsVG9TdWJzdGl0dXRpb25BKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIGlzU3Vic3RpdHV0aW9uUHJlc2VudEJ5TWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKSB7XG4gICAgY29uc3Qgc3Vic3RpdHV0aW9uID0gdGhpcy5maW5kU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpLFxuICAgICAgICAgIHN1YnN0aXR1dGlvblByZXNlbnQgPSAoc3Vic3RpdHV0aW9uICE9PSBudWxsKTtcblxuICAgIHJldHVybiBzdWJzdGl0dXRpb25QcmVzZW50O1xuICB9XG5cbiAgaXNTaW1wbGVTdWJzdGl0dXRpb25QcmVzZW50QnlNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpIHtcbiAgICBjb25zdCBzaW1wbGVTdWJzdGl0dXRpb24gPSB0aGlzLmZpbmRTaW1wbGVTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTmFtZSksXG4gICAgICAgICAgc2ltcGxlU3Vic3RpdHV0aW9uUHJlc2VudCA9IChzaW1wbGVTdWJzdGl0dXRpb24gIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIHNpbXBsZVN1YnN0aXR1dGlvblByZXNlbnQ7XG4gIH1cblxuICBpc1N1YnN0aXR1dGlvblByZXNlbnRCeU1ldGF2YXJpYWJsZU5hbWVBbmRTdWJzdGl0dXRpb24obWV0YXZhcmlhYmxlTmFtZSwgc3Vic3RpdHV0aW9uKSB7XG4gICAgc3Vic3RpdHV0aW9uID0gdGhpcy5maW5kU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOYW1lQW5kU3Vic3RpdHV0aW9uKG1ldGF2YXJpYWJsZU5hbWUsIHN1YnN0aXR1dGlvbik7ICAvLy9cblxuICAgIGNvbnN0IHN1YnN0aXR1dGlvblByZXNlbnQgPSAoc3Vic3RpdHV0aW9uICE9PSBudWxsKTtcblxuICAgIHJldHVybiBzdWJzdGl0dXRpb25QcmVzZW50O1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKGNvbnRleHQpIHtcbiAgICBjb25zdCBzdWJzdGl0dXRpb25zID0gW10sXG4gICAgICAgICAgbGltaW5hbENvbnRleHQgPSBuZXcgTGltaW5hbENvbnRleHQoY29udGV4dCwgc3Vic3RpdHV0aW9ucyk7XG5cbiAgICByZXR1cm4gbGltaW5hbENvbnRleHQ7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJMaW1pbmFsQ29udGV4dCIsImZpbmQiLCJmaXJzdCIsImFycmF5VXRpbGl0aWVzIiwiQ29udGV4dCIsImNvbnRleHQiLCJzdWJzdGl0dXRpb25zIiwiZ2V0U3Vic3RpdHV0aW9ucyIsIm5lc3RlZCIsImdldENvbnRleHQiLCJnZXRTb2xlU3Vic3RpdHV0aW9uIiwic29sZVN1YnN0aXR1dGlvbiIsInN1YnN0aXR1dGlvbnNMZW5ndGgiLCJsZW5ndGgiLCJmaXJzdFN1YnN0aXR1dGlvbiIsImdldFNvbGVOb25Ucml2aWFsU3Vic3RpdHV0aW9uIiwic29sZU5vblRyaXZpYWxTdWJzdGl0dXRpb24iLCJzb2xlU3Vic3RpdHV0aW9uTm9uVHJpdmlhbCIsImlzTm9uVHJpdmlhbCIsImFkZFN1YnN0aXR1dGlvbiIsInN1YnN0aXR1dGlvbiIsInN1YnN0aXR1dGlvbkEiLCJzdWJzdGl0dXRpb25TdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsInN1YnN0aXR1dGlvbkIiLCJzdWJzdGl0dXRpb25BRXF1YWxUb1N1YnN0aXR1dGlvbkIiLCJpc0VxdWFsVG8iLCJkZWJ1ZyIsInB1c2giLCJhZGRTdWJzdGl0dXRpb25zIiwiZm9yRWFjaCIsInJlc29sdmVTdWJzdGl0dXRpb25zIiwiZ2VuZXJhbENvbnRleHQiLCJzcGVjaWZpY0NvbnRleHQiLCJtZXRhdmFyaWFibGVOYW1lcyIsIm1ldGF2YXJpYWJsZU5hbWVzRnJvbVN1YnN0aXR1dGlvbnMiLCJtZXRhdmFyaWFibGVOYW1lIiwiY29tcGxleFN1YnN0aXR1dGlvbnMiLCJmaW5kQ29tcGxleFN1YnN0aXR1dGlvbnNCeU1ldGF2YXJpYWJsZU5hbWUiLCJjb21wbGV4U3Vic3RpdHV0aW9uIiwicmVzb2x2ZWQiLCJpc1Jlc29sdmVkIiwicmVzb2x2ZSIsImFyZVN1YnN0aXR1dGlvbnNSZXNvbHZlZCIsImV2ZXJ5IiwiY29tcGxleFN1YnN0aXR1dGlvbnNSZXNvbHZlZCIsImNvbXBsZXhTdWJzdGl0dXRpb25SZXNvbHZlZCIsImlzRW1wdHkiLCJlbXB0eSIsInF1YWxpZnkiLCJhc3N1bXB0aW9uIiwibWV0YUxldmVsQXNzdW1wdGlvbiIsInF1YWxpZmllcyIsIlJlZmVyZW5jZVN1YnN0aXR1dGlvbiIsImVsZW1lbnRzIiwicmVmZXJlbmNlU3Vic3RpdHV0aW9uIiwiZnJvbUFzc3VtcHRpb25BbmRNZXRhTGV2ZWxBc3N1bXB0aW9uIiwic29sZVN1YnN0aXR1dGlvbkNvbXBhcmVzIiwiY29tcGFyZVN1YnN0aXR1dGlvbiIsImNvbW1pdCIsInVuZGVmaW5lZCIsImZpbmRTdWJzdGl0dXRpb24iLCJjYWxsYmFjayIsImZpbmRTdWJzdGl0dXRpb25zIiwiZmluZFN1YnN0aXR1dGlvbkJ5VmFyaWFibGVJZGVudGlmaWVyIiwidmFyaWFibGVJZGVudGlmaWVyIiwic3Vic3RpdHV0aW9uQ29tcGFyZXNUb1ZhcmlhYmxlSWRlbnRpZmllciIsImNvbXBhcmVWYXJpYWJsZUlkZW50aWZpZXIiLCJmaW5kU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOYW1lIiwic2ltcGxlU3Vic3RpdHV0aW9uIiwiZmluZFNpbXBsZVN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTmFtZSIsInN1YnN0aXR1dGlvblNpbXBsZSIsImlzU2ltcGxlIiwic2ltcGxlU3Vic3RpdHV0aW9uQ29tcGFyZXNUb01ldGF2YXJpYWJsZU5hbWUiLCJjb21wYXJlTWV0YXZhcmlhYmxlTmFtZSIsInN1YnN0aXR1dGlvbkNvbXBsZXgiLCJpc0NvbXBsZXgiLCJjb21wbGV4U3Vic3RpdHV0aW9uQ29tcGFyZXNUb01ldGF2YXJpYWJsZU5hbWUiLCJmaW5kU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOYW1lQW5kU3Vic3RpdHV0aW9uIiwic3Vic3RpdHV0aW9uQ29tcGFyZXNUb01ldGF2YXJpYWJsZU5hbWUiLCJzdWJzdGl0dXRpb25CRXF1YWxUb1N1YnN0aXR1dGlvbkEiLCJpc1N1YnN0aXR1dGlvblByZXNlbnRCeU1ldGF2YXJpYWJsZU5hbWUiLCJzdWJzdGl0dXRpb25QcmVzZW50IiwiaXNTaW1wbGVTdWJzdGl0dXRpb25QcmVzZW50QnlNZXRhdmFyaWFibGVOYW1lIiwic2ltcGxlU3Vic3RpdHV0aW9uUHJlc2VudCIsImlzU3Vic3RpdHV0aW9uUHJlc2VudEJ5TWV0YXZhcmlhYmxlTmFtZUFuZFN1YnN0aXR1dGlvbiIsImZyb21Ob3RoaW5nIiwibGltaW5hbENvbnRleHQiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQVVBOzs7ZUFBcUJBOzs7MkJBUlU7K0JBQ29CO2dFQUUvQjtpRUFDQzs7Ozs7O0FBRXJCLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxLQUFLLEVBQUUsR0FBR0MseUJBQWM7QUFFdkIsTUFBTUgsdUJBQXVCSSxnQkFBTztJQUNqRCxZQUFZQyxPQUFPLEVBQUVDLGFBQWEsQ0FBRTtRQUNsQyxLQUFLLENBQUNEO1FBRU4sSUFBSSxDQUFDQyxhQUFhLEdBQUdBO0lBQ3ZCO0lBRUFDLGlCQUFpQkMsU0FBUyxJQUFJLEVBQUU7UUFDOUIsSUFBSUY7UUFFSixJQUFJRSxRQUFRO1lBQ1YsTUFBTUgsVUFBVSxJQUFJLENBQUNJLFVBQVU7WUFFL0JILGdCQUFnQkQsUUFBUUUsZ0JBQWdCO1lBRXhDRCxnQkFBZ0I7bUJBQ1gsSUFBSSxDQUFDQSxhQUFhO21CQUNsQkE7YUFDSjtRQUNILE9BQU87WUFDTEEsZ0JBQWdCLElBQUksQ0FBQ0EsYUFBYTtRQUNwQztRQUVBLE9BQU9BO0lBQ1Q7SUFFQUksb0JBQW9CRixTQUFTLElBQUksRUFBRTtRQUNqQyxJQUFJRyxtQkFBbUI7UUFFdkIsTUFBTUwsZ0JBQWdCLElB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
@@ -0,0 +1,212 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "default", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return SynopticContext;
9
+ }
10
+ });
11
+ const _necessary = require("necessary");
12
+ const _context = /*#__PURE__*/ _interop_require_default(require("../context"));
13
+ function _interop_require_default(obj) {
14
+ return obj && obj.__esModule ? obj : {
15
+ default: obj
16
+ };
17
+ }
18
+ const { push, last } = _necessary.arrayUtilities;
19
+ class SynopticContext extends _context.default {
20
+ constructor(context, contexts){
21
+ super(context);
22
+ this.contexts = contexts;
23
+ }
24
+ getContexts() {
25
+ return this.contexts;
26
+ }
27
+ getTerms() {
28
+ const terms = [];
29
+ this.contexts.forEach((context)=>{
30
+ const contextTerms = context.getTerms();
31
+ push(terms, contextTerms);
32
+ });
33
+ return terms;
34
+ }
35
+ getFrames() {
36
+ const frames = [];
37
+ this.contexts.forEach((context)=>{
38
+ const contextFrames = context.getFrames();
39
+ push(frames, contextFrames);
40
+ });
41
+ return frames;
42
+ }
43
+ getEqualities() {
44
+ const equalities = [];
45
+ this.contexts.forEach((context)=>{
46
+ const contextEqualities = context.getEqualities();
47
+ push(equalities, contextEqualities);
48
+ });
49
+ return equalities;
50
+ }
51
+ getJudgements() {
52
+ const judgements = [];
53
+ this.contexts.forEach((context)=>{
54
+ const contextJudgements = context.getJudgements();
55
+ push(judgements, contextJudgements);
56
+ });
57
+ return judgements;
58
+ }
59
+ getStatements() {
60
+ const statements = [];
61
+ this.contexts.forEach((context)=>{
62
+ const contextStatements = context.getStatements();
63
+ push(statements, contextStatements);
64
+ });
65
+ return statements;
66
+ }
67
+ getAssertions() {
68
+ const assertions = [];
69
+ this.contexts.forEach((context)=>{
70
+ const contextAssertions = context.getAssertions();
71
+ push(assertions, contextAssertions);
72
+ });
73
+ return assertions;
74
+ }
75
+ getReferences() {
76
+ const references = [];
77
+ this.contexts.forEach((context)=>{
78
+ const contextReferences = context.getReferences();
79
+ push(references, contextReferences);
80
+ });
81
+ return references;
82
+ }
83
+ getAssumptions() {
84
+ const assumptions = [];
85
+ this.contexts.forEach((context)=>{
86
+ const contextAssumptions = context.getAssumptions();
87
+ push(assumptions, contextAssumptions);
88
+ });
89
+ return assumptions;
90
+ }
91
+ getMetavariables() {
92
+ const metavariables = [];
93
+ this.contexts.forEach((context)=>{
94
+ const contextMetavariables = context.getMetavariables();
95
+ push(metavariables, contextMetavariables);
96
+ });
97
+ return metavariables;
98
+ }
99
+ getSubstitutions() {
100
+ const substitutions = [];
101
+ this.contexts.forEach((context)=>{
102
+ const contextSubstitutions = context.getSubstitutions();
103
+ push(substitutions, contextSubstitutions);
104
+ });
105
+ return substitutions;
106
+ }
107
+ findTermByTermNode(termNode) {
108
+ const terms = this.getTerms(), term = terms.find((term)=>{
109
+ const termNodeMatches = term.matchTermNode(termNode);
110
+ if (termNodeMatches) {
111
+ return true;
112
+ }
113
+ }) || null;
114
+ return term;
115
+ }
116
+ findFrameByFrameNode(frameNode) {
117
+ const frames = this.getFrames(), frame = frames.find((frame)=>{
118
+ const frameNodeMatches = frame.matchFrameNode(frameNode);
119
+ if (frameNodeMatches) {
120
+ return true;
121
+ }
122
+ }) || null;
123
+ return frame;
124
+ }
125
+ findEqualityByEqualityNode(equalityNode) {
126
+ const equalities = this.getEqualities(), equality = equalities.find((equality)=>{
127
+ const equalityNodeMatches = equality.matchEqualityNode(equalityNode);
128
+ if (equalityNodeMatches) {
129
+ return true;
130
+ }
131
+ }) || null;
132
+ return equality;
133
+ }
134
+ findJudgementByJudgementNode(judgementNode) {
135
+ const judgements = this.getJudgements(), judgement = judgements.find((judgement)=>{
136
+ const judgementNodeMatches = judgement.matchJudgementNode(judgementNode);
137
+ if (judgementNodeMatches) {
138
+ return true;
139
+ }
140
+ }) || null;
141
+ return judgement;
142
+ }
143
+ findStatementByStatementNode(statementNode) {
144
+ const statements = this.getStatements(), statement = statements.find((statement)=>{
145
+ const statementNodeMatches = statement.matchStatementNode(statementNode);
146
+ if (statementNodeMatches) {
147
+ return true;
148
+ }
149
+ }) || null;
150
+ return statement;
151
+ }
152
+ findReferenceByReferenceNode(referenceNode) {
153
+ const references = this.getReferences(), reference = references.find((reference)=>{
154
+ const referenceMatcheReferenceNode = reference.matchReferenceNode(referenceNode);
155
+ if (referenceMatcheReferenceNode) {
156
+ return true;
157
+ }
158
+ }) || null;
159
+ return reference;
160
+ }
161
+ findAssertionByAssertionNode(assertionNode) {
162
+ const assertions = this.getAssertions(), assertion = assertions.find((assertion)=>{
163
+ const assertionNodeMatches = assertion.matchAssertionNode(assertionNode);
164
+ if (assertionNodeMatches) {
165
+ return true;
166
+ }
167
+ }) || null;
168
+ return assertion;
169
+ }
170
+ findAssumptionByAssumptionNode(assumptionNode) {
171
+ const assumptions = this.getAssumptions(), assumption = assumptions.find((assumption)=>{
172
+ const assumptionNodeMatches = assumption.matchAssumptionNode(assumptionNode);
173
+ if (assumptionNodeMatches) {
174
+ return true;
175
+ }
176
+ }) || null;
177
+ return assumption;
178
+ }
179
+ findReferenceByMetavariableNode(metavariableNode) {
180
+ const references = this.getReferences(), reference = references.find((reference)=>{
181
+ const referenceMatcheMetavariableNode = reference.matchMetavariableNode(metavariableNode);
182
+ if (referenceMatcheMetavariableNode) {
183
+ return true;
184
+ }
185
+ }) || null;
186
+ return reference;
187
+ }
188
+ findMetavariableByMetavariableNode(metavariableNode) {
189
+ const metavariables = this.getMetavariables(), metavariable = metavariables.find((metavariable)=>{
190
+ const metavariableNodeMatches = metavariable.matchMetavariableNode(metavariableNode);
191
+ if (metavariableNodeMatches) {
192
+ return true;
193
+ }
194
+ }) || null;
195
+ return metavariable;
196
+ }
197
+ findSubstitutionBySubstitutionNode(substitutionNode) {
198
+ const substitutions = this.getSubstitutions(), substitution = substitutions.find((substitution)=>{
199
+ const substitutionNodeMatches = substitution.matchSubstitutionNode(substitutionNode);
200
+ if (substitutionNodeMatches) {
201
+ return true;
202
+ }
203
+ }) || null;
204
+ return substitution;
205
+ }
206
+ static fromContexts(...contexts) {
207
+ const lastContext = last(contexts), context = lastContext, synopticContext = new SynopticContext(context, contexts);
208
+ return synopticContext;
209
+ }
210
+ }
211
+
212
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L3N5bm9wdGljLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IENvbnRleHQgZnJvbSBcIi4uL2NvbnRleHRcIjtcblxuY29uc3QgeyBwdXNoLCBsYXN0IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3lub3B0aWNDb250ZXh0IGV4dGVuZHMgQ29udGV4dCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIGNvbnRleHRzKSB7XG4gICAgc3VwZXIoY29udGV4dCk7XG5cbiAgICB0aGlzLmNvbnRleHRzID0gY29udGV4dHM7XG4gIH1cblxuICBnZXRDb250ZXh0cygpIHtcbiAgICByZXR1cm4gdGhpcy5jb250ZXh0cztcbiAgfVxuXG4gIGdldFRlcm1zKCkge1xuICAgIGNvbnN0IHRlcm1zID0gW107XG5cbiAgICB0aGlzLmNvbnRleHRzLmZvckVhY2goKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IGNvbnRleHRUZXJtcyA9IGNvbnRleHQuZ2V0VGVybXMoKTtcblxuICAgICAgcHVzaCh0ZXJtcywgY29udGV4dFRlcm1zKTtcbiAgICB9KTtcblxuICAgIHJldHVybiB0ZXJtcztcbiAgfVxuXG4gIGdldEZyYW1lcygpIHtcbiAgICBjb25zdCBmcmFtZXMgPSBbXTtcblxuICAgIHRoaXMuY29udGV4dHMuZm9yRWFjaCgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgY29udGV4dEZyYW1lcyA9IGNvbnRleHQuZ2V0RnJhbWVzKCk7XG5cbiAgICAgIHB1c2goZnJhbWVzLCBjb250ZXh0RnJhbWVzKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBmcmFtZXM7XG4gIH1cblxuICBnZXRFcXVhbGl0aWVzKCkge1xuICAgIGNvbnN0IGVxdWFsaXRpZXMgPSBbXTtcblxuICAgIHRoaXMuY29udGV4dHMuZm9yRWFjaCgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgY29udGV4dEVxdWFsaXRpZXMgPSBjb250ZXh0LmdldEVxdWFsaXRpZXMoKTtcblxuICAgICAgcHVzaChlcXVhbGl0aWVzLCBjb250ZXh0RXF1YWxpdGllcyk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZXF1YWxpdGllcztcbiAgfVxuXG4gIGdldEp1ZGdlbWVudHMoKSB7XG4gICAgY29uc3QganVkZ2VtZW50cyA9IFtdO1xuXG4gICAgdGhpcy5jb250ZXh0cy5mb3JFYWNoKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCBjb250ZXh0SnVkZ2VtZW50cyA9IGNvbnRleHQuZ2V0SnVkZ2VtZW50cygpO1xuXG4gICAgICBwdXNoKGp1ZGdlbWVudHMsIGNvbnRleHRKdWRnZW1lbnRzKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBqdWRnZW1lbnRzO1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50cygpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRzID0gW107XG5cbiAgICB0aGlzLmNvbnRleHRzLmZvckVhY2goKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IGNvbnRleHRTdGF0ZW1lbnRzID0gY29udGV4dC5nZXRTdGF0ZW1lbnRzKCk7XG5cbiAgICAgIHB1c2goc3RhdGVtZW50cywgY29udGV4dFN0YXRlbWVudHMpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHN0YXRlbWVudHM7XG4gIH1cblxuICBnZXRBc3NlcnRpb25zKCkge1xuICAgIGNvbnN0IGFzc2VydGlvbnMgPSBbXTtcblxuICAgIHRoaXMuY29udGV4dHMuZm9yRWFjaCgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgY29udGV4dEFzc2VydGlvbnMgPSBjb250ZXh0LmdldEFzc2VydGlvbnMoKTtcblxuICAgICAgcHVzaChhc3NlcnRpb25zLCBjb250ZXh0QXNzZXJ0aW9ucyk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gYXNzZXJ0aW9ucztcbiAgfVxuXG4gIGdldFJlZmVyZW5jZXMoKSB7XG4gICAgY29uc3QgcmVmZXJlbmNlcyA9IFtdO1xuXG4gICAgdGhpcy5jb250ZXh0cy5mb3JFYWNoKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCBjb250ZXh0UmVmZXJlbmNlcyA9IGNvbnRleHQuZ2V0UmVmZXJlbmNlcygpO1xuXG4gICAgICBwdXNoKHJlZmVyZW5jZXMsIGNvbnRleHRSZWZlcmVuY2VzKTtcbiAgICB9KTtcblxuICAgIHJldHVybiByZWZlcmVuY2VzO1xuICB9XG5cbiAgZ2V0QXNzdW1wdGlvbnMoKSB7XG4gICAgY29uc3QgYXNzdW1wdGlvbnMgPSBbXTtcblxuICAgIHRoaXMuY29udGV4dHMuZm9yRWFjaCgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgY29udGV4dEFzc3VtcHRpb25zID0gY29udGV4dC5nZXRBc3N1bXB0aW9ucygpO1xuXG4gICAgICBwdXNoKGFzc3VtcHRpb25zLCBjb250ZXh0QXNzdW1wdGlvbnMpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb25zO1xuICB9XG5cbiAgZ2V0TWV0YXZhcmlhYmxlcygpIHtcbiAgICBjb25zdCBtZXRhdmFyaWFibGVzID0gW107XG5cbiAgICB0aGlzLmNvbnRleHRzLmZvckVhY2goKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IGNvbnRleHRNZXRhdmFyaWFibGVzID0gY29udGV4dC5nZXRNZXRhdmFyaWFibGVzKCk7XG5cbiAgICAgIHB1c2gobWV0YXZhcmlhYmxlcywgY29udGV4dE1ldGF2YXJpYWJsZXMpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZXM7XG4gIH1cblxuICBnZXRTdWJzdGl0dXRpb25zKCkge1xuICAgIGNvbnN0IHN1YnN0aXR1dGlvbnMgPSBbXTtcblxuICAgIHRoaXMuY29udGV4dHMuZm9yRWFjaCgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgY29udGV4dFN1YnN0aXR1dGlvbnMgPSBjb250ZXh0LmdldFN1YnN0aXR1dGlvbnMoKTtcblxuICAgICAgcHVzaChzdWJzdGl0dXRpb25zLCBjb250ZXh0U3Vic3RpdHV0aW9ucyk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gc3Vic3RpdHV0aW9ucztcbiAgfVxuXG4gIGZpbmRUZXJtQnlUZXJtTm9kZSh0ZXJtTm9kZSkge1xuICAgIGNvbnN0IHRlcm1zID0gdGhpcy5nZXRUZXJtcygpLFxuICAgICAgICAgIHRlcm0gPSB0ZXJtcy5maW5kKCh0ZXJtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0ZXJtTm9kZU1hdGNoZXMgPSB0ZXJtLm1hdGNoVGVybU5vZGUodGVybU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAodGVybU5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gdGVybTtcbiAgfVxuXG4gIGZpbmRGcmFtZUJ5RnJhbWVOb2RlKGZyYW1lTm9kZSkge1xuICAgIGNvbnN0IGZyYW1lcyA9IHRoaXMuZ2V0RnJhbWVzKCksXG4gICAgICAgICAgZnJhbWUgPSBmcmFtZXMuZmluZCgoZnJhbWUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZyYW1lTm9kZU1hdGNoZXMgPSBmcmFtZS5tYXRjaEZyYW1lTm9kZShmcmFtZU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAoZnJhbWVOb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGZyYW1lO1xuICB9XG5cbiAgZmluZEVxdWFsaXR5QnlFcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlKSB7XG4gICAgY29uc3QgZXF1YWxpdGllcyA9IHRoaXMuZ2V0RXF1YWxpdGllcygpLFxuICAgICAgICAgIGVxdWFsaXR5ID0gZXF1YWxpdGllcy5maW5kKChlcXVhbGl0eSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZXF1YWxpdHlOb2RlTWF0Y2hlcyA9IGVxdWFsaXR5Lm1hdGNoRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChlcXVhbGl0eU5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gZXF1YWxpdHk7XG4gIH1cblxuICBmaW5kSnVkZ2VtZW50QnlKdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUpIHtcbiAgICBjb25zdCBqdWRnZW1lbnRzID0gdGhpcy5nZXRKdWRnZW1lbnRzKCksXG4gICAgICAgICAganVkZ2VtZW50ID0ganVkZ2VtZW50cy5maW5kKChqdWRnZW1lbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGp1ZGdlbWVudE5vZGVNYXRjaGVzID0ganVkZ2VtZW50Lm1hdGNoSnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlKTtcblxuICAgICAgICAgICAgaWYgKGp1ZGdlbWVudE5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4ganVkZ2VtZW50O1xuICB9XG5cbiAgZmluZFN0YXRlbWVudEJ5U3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50cyA9IHRoaXMuZ2V0U3RhdGVtZW50cygpLFxuICAgICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudHMuZmluZCgoc3RhdGVtZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdGF0ZW1lbnROb2RlTWF0Y2hlcyA9IHN0YXRlbWVudC5tYXRjaFN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChzdGF0ZW1lbnROb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHN0YXRlbWVudDtcbiAgfVxuXG4gIGZpbmRSZWZlcmVuY2VCeVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSkge1xuICAgIGNvbnN0IHJlZmVyZW5jZXMgPSB0aGlzLmdldFJlZmVyZW5jZXMoKSxcbiAgICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VzLmZpbmQoKHJlZmVyZW5jZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVmZXJlbmNlTWF0Y2hlUmVmZXJlbmNlTm9kZSA9IHJlZmVyZW5jZS5tYXRjaFJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChyZWZlcmVuY2VNYXRjaGVSZWZlcmVuY2VOb2RlKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gcmVmZXJlbmNlO1xuICB9XG5cbiAgZmluZEFzc2VydGlvbkJ5QXNzZXJ0aW9uTm9kZShhc3NlcnRpb25Ob2RlKSB7XG4gICAgY29uc3QgYXNzZXJ0aW9ucyA9IHRoaXMuZ2V0QXNzZXJ0aW9ucygpLFxuICAgICAgICAgIGFzc2VydGlvbiA9IGFzc2VydGlvbnMuZmluZCgoYXNzZXJ0aW9uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhc3NlcnRpb25Ob2RlTWF0Y2hlcyA9IGFzc2VydGlvbi5tYXRjaEFzc2VydGlvbk5vZGUoYXNzZXJ0aW9uTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChhc3NlcnRpb25Ob2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGFzc2VydGlvbjtcbiAgfVxuXG4gIGZpbmRBc3N1bXB0aW9uQnlBc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSkge1xuICAgIGNvbnN0IGFzc3VtcHRpb25zID0gdGhpcy5nZXRBc3N1bXB0aW9ucygpLFxuICAgICAgICAgIGFzc3VtcHRpb24gPSBhc3N1bXB0aW9ucy5maW5kKChhc3N1bXB0aW9uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhc3N1bXB0aW9uTm9kZU1hdGNoZXMgPSBhc3N1bXB0aW9uLm1hdGNoQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUpO1xuXG4gICAgICAgICAgICBpZiAoYXNzdW1wdGlvbk5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gYXNzdW1wdGlvbjtcbiAgfVxuXG4gIGZpbmRSZWZlcmVuY2VCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IHJlZmVyZW5jZXMgPSB0aGlzLmdldFJlZmVyZW5jZXMoKSxcbiAgICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VzLmZpbmQoKHJlZmVyZW5jZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVmZXJlbmNlTWF0Y2hlTWV0YXZhcmlhYmxlTm9kZSA9IHJlZmVyZW5jZS5tYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChyZWZlcmVuY2VNYXRjaGVNZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gcmVmZXJlbmNlO1xuICB9XG5cbiAgZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgbWV0YXZhcmlhYmxlcyA9IHRoaXMuZ2V0TWV0YXZhcmlhYmxlcygpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZXMuZmluZCgobWV0YXZhcmlhYmxlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyA9IG1ldGF2YXJpYWJsZS5tYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbiAgfVxuXG4gIGZpbmRTdWJzdGl0dXRpb25CeVN1YnN0aXR1dGlvbk5vZGUoc3Vic3RpdHV0aW9uTm9kZSkge1xuICAgIGNvbnN0IHN1YnN0aXR1dGlvbnMgPSB0aGlzLmdldFN1YnN0aXR1dGlvbnMoKSxcbiAgICAgICAgICBzdWJzdGl0dXRpb24gPSBzdWJzdGl0dXRpb25zLmZpbmQoKHN1YnN0aXR1dGlvbikgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3Vic3RpdHV0aW9uTm9kZU1hdGNoZXMgPSBzdWJzdGl0dXRpb24ubWF0Y2hTdWJzdGl0dXRpb25Ob2RlKHN1YnN0aXR1dGlvbk5vZGUpO1xuXG4gICAgICAgICAgICBpZiAoc3Vic3RpdHV0aW9uTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBzdWJzdGl0dXRpb247XG4gIH1cblxuICBzdGF0aWMgZnJvbUNvbnRleHRzKC4uLmNvbnRleHRzKSB7XG4gICAgY29uc3QgbGFzdENvbnRleHQgPSBsYXN0KGNvbnRleHRzKSxcbiAgICAgICAgICBjb250ZXh0ID0gbGFzdENvbnRleHQsICAvLy9cbiAgICAgICAgICBzeW5vcHRpY0NvbnRleHQgPSBuZXcgU3lub3B0aWNDb250ZXh0KGNvbnRleHQsIGNvbnRleHRzKTtcblxuICAgIHJldHVybiBzeW5vcHRpY0NvbnRleHQ7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJTeW5vcHRpY0NvbnRleHQiLCJwdXNoIiwibGFzdCIsImFycmF5VXRpbGl0aWVzIiwiQ29udGV4dCIsImNvbnRleHQiLCJjb250ZXh0cyIsImdldENvbnRleHRzIiwiZ2V0VGVybXMiLCJ0ZXJtcyIsImZvckVhY2giLCJjb250ZXh0VGVybXMiLCJnZXRGcmFtZXMiLCJmcmFtZXMiLCJjb250ZXh0RnJhbWVzIiwiZ2V0RXF1YWxpdGllcyIsImVxdWFsaXRpZXMiLCJjb250ZXh0RXF1YWxpdGllcyIsImdldEp1ZGdlbWVudHMiLCJqdWRnZW1lbnRzIiwiY29udGV4dEp1ZGdlbWVudHMiLCJnZXRTdGF0ZW1lbnRzIiwic3RhdGVtZW50cyIsImNvbnRleHRTdGF0ZW1lbnRzIiwiZ2V0QXNzZXJ0aW9ucyIsImFzc2VydGlvbnMiLCJjb250ZXh0QXNzZXJ0aW9ucyIsImdldFJlZmVyZW5jZXMiLCJyZWZlcmVuY2VzIiwiY29udGV4dFJlZmVyZW5jZXMiLCJnZXRBc3N1bXB0aW9ucyIsImFzc3VtcHRpb25zIiwiY29udGV4dEFzc3VtcHRpb25zIiwiZ2V0TWV0YXZhcmlhYmxlcyIsIm1ldGF2YXJpYWJsZXMiLCJjb250ZXh0TWV0YXZhcmlhYmxlcyIsImdldFN1YnN0aXR1dGlvbnMiLCJzdWJzdGl0dXRpb25zIiwiY29udGV4dFN1YnN0aXR1dGlvbnMiLCJmaW5kVGVybUJ5VGVybU5vZGUiLCJ0ZXJtTm9kZSIsInRlcm0iLCJmaW5kIiwidGVybU5vZGVNYXRjaGVzIiwibWF0Y2hUZXJtTm9kZSIsImZpbmRGcmFtZUJ5RnJhbWVOb2RlIiwiZnJhbWVOb2RlIiwiZnJhbWUiLCJmcmFtZU5vZGVNYXRjaGVzIiwibWF0Y2hGcmFtZU5vZGUiLCJmaW5kRXF1YWxpdHlCeUVxdWFsaXR5Tm9kZSIsImVxdWFsaXR5Tm9kZSIsImVxdWFsaXR5IiwiZXF1YWxpdHlOb2RlTWF0Y2hlcyIsIm1hdGNoRXF1YWxpdHlOb2RlIiwiZmluZEp1ZGdlbWVudEJ5SnVkZ2VtZW50Tm9kZSIsImp1ZGdlbWVudE5vZGUiLCJqdWRnZW1lbnQiLCJqdWRnZW1lbnROb2RlTWF0Y2hlcyIsIm1hdGNoSnVkZ2VtZW50Tm9kZSIsImZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50Iiwic3RhdGVtZW50Tm9kZU1hdGNoZXMiLCJtYXRjaFN0YXRlbWVudE5vZGUiLCJmaW5kUmVmZXJlbmNlQnlSZWZlcmVuY2VOb2RlIiwicmVmZXJlbmNlTm9kZSIsInJlZmVyZW5jZSIsInJlZmVyZW5jZU1hdGNoZVJlZmVyZW5jZU5vZGUiLCJtYXRjaFJlZmVyZW5jZU5vZGUiLCJmaW5kQXNzZXJ0aW9uQnlBc3NlcnRpb25Ob2RlIiwiYXNzZXJ0aW9uTm9kZSIsImFzc2VydGlvbiIsImFzc2VydGlvbk5vZGVNYXRjaGVzIiwibWF0Y2hBc3NlcnRpb25Ob2RlIiwiZmluZEFzc3VtcHRpb25CeUFzc3VtcHRpb25Ob2RlIiwiYXNzdW1wdGlvbk5vZGUiLCJhc3N1bXB0aW9uIiwiYXNzdW1wdGlvbk5vZGVNYXRjaGVzIiwibWF0Y2hBc3N1bXB0aW9uTm9kZSIsImZpbmRSZWZlcmVuY2VCeU1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGVOb2RlIiwicmVmZXJlbmNlTWF0Y2hlTWV0YXZhcmlhYmxlTm9kZSIsIm1hdGNoTWV0YXZhcmlhYmxlTm9kZSIsImZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGUiLCJtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyIsImZpbmRTdWJzdGl0dXRpb25CeVN1YnN0aXR1dGlvbk5vZGUiLCJzdWJzdGl0dXRpb25Ob2RlIiwic3Vic3RpdHV0aW9uIiwic3Vic3RpdHV0aW9uTm9kZU1hdGNoZXMiLCJtYXRjaFN1YnN0aXR1dGlvbk5vZGUiLCJmcm9tQ29udGV4dHMiLCJsYXN0Q29udGV4dCIsInN5bm9wdGljQ29udGV4dCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBUUE7OztlQUFxQkE7OzsyQkFOVTtn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