occam-verify-cli 0.0.1066 → 0.0.1068

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 (89) hide show
  1. package/lib/assertion/contained.js +3 -2
  2. package/lib/assertion/defined.js +3 -2
  3. package/lib/assignment/judgement.js +3 -3
  4. package/lib/conclusion.js +8 -4
  5. package/lib/consequent.js +8 -4
  6. package/lib/context/file.js +7 -7
  7. package/lib/context/local.js +12 -25
  8. package/lib/declaration.js +90 -3
  9. package/lib/frame.js +109 -48
  10. package/lib/judgement.js +84 -5
  11. package/lib/metaType.js +24 -3
  12. package/lib/metavariable.js +94 -65
  13. package/lib/mixins/statement/unify.js +1 -1
  14. package/lib/mixins/statement/verify.js +14 -23
  15. package/lib/premise.js +14 -6
  16. package/lib/proofStep.js +22 -13
  17. package/lib/reference.js +11 -9
  18. package/lib/rule.js +9 -2
  19. package/lib/ruleNames.js +5 -1
  20. package/lib/statement/qualified.js +30 -17
  21. package/lib/statement/unqualified.js +30 -6
  22. package/lib/statement.js +20 -9
  23. package/lib/subproof.js +1 -1
  24. package/lib/substitution/frameForMetavariable.js +80 -71
  25. package/lib/substitution/statementForMetavariable.js +118 -56
  26. package/lib/substitution/termForVariable.js +75 -75
  27. package/lib/substitution.js +68 -33
  28. package/lib/substitutions.js +58 -49
  29. package/lib/supposition.js +8 -4
  30. package/lib/unifier/intrinsicLevel.js +4 -4
  31. package/lib/unifier/metaLevel.js +23 -16
  32. package/lib/unifier/statementWithCombinator.js +2 -2
  33. package/lib/utilities/node.js +24 -10
  34. package/lib/utilities/tokens.js +8 -1
  35. package/lib/variable.js +17 -13
  36. package/package.json +2 -2
  37. package/src/assertion/contained.js +3 -1
  38. package/src/assertion/defined.js +3 -1
  39. package/src/assignment/judgement.js +3 -4
  40. package/src/conclusion.js +10 -3
  41. package/src/consequent.js +10 -3
  42. package/src/context/file.js +6 -8
  43. package/src/context/local.js +12 -33
  44. package/src/declaration.js +57 -4
  45. package/src/frame.js +149 -90
  46. package/src/judgement.js +109 -3
  47. package/src/metaType.js +29 -3
  48. package/src/metavariable.js +140 -87
  49. package/src/mixins/statement/unify.js +1 -0
  50. package/src/mixins/statement/verify.js +16 -28
  51. package/src/premise.js +19 -5
  52. package/src/proofStep.js +28 -12
  53. package/src/reference.js +11 -7
  54. package/src/rule.js +13 -1
  55. package/src/ruleNames.js +1 -0
  56. package/src/statement/qualified.js +38 -21
  57. package/src/statement/unqualified.js +35 -5
  58. package/src/statement.js +20 -12
  59. package/src/subproof.js +0 -1
  60. package/src/substitution/frameForMetavariable.js +90 -104
  61. package/src/substitution/statementForMetavariable.js +133 -61
  62. package/src/substitution/termForVariable.js +83 -113
  63. package/src/substitution.js +55 -26
  64. package/src/substitutions.js +59 -47
  65. package/src/supposition.js +10 -3
  66. package/src/unifier/intrinsicLevel.js +4 -3
  67. package/src/unifier/metaLevel.js +42 -24
  68. package/src/unifier/statementWithCombinator.js +1 -1
  69. package/src/utilities/node.js +26 -10
  70. package/src/utilities/tokens.js +7 -0
  71. package/src/variable.js +20 -11
  72. package/lib/resolve/complexSubstitutionAgainstSimpleSubstitution.js +0 -62
  73. package/lib/resolve/substitution.js +0 -27
  74. package/lib/resolve/substitutions.js +0 -37
  75. package/lib/unify/metavariableWithFrame.js +0 -40
  76. package/lib/unify/simpleSubstitutionStatementWithComplexSubstitutionStatement.js +0 -31
  77. package/lib/verify/declaration.js +0 -83
  78. package/lib/verify/frame.js +0 -120
  79. package/lib/verify/judgement.js +0 -88
  80. package/lib/verify/metavariableGivenMetaType.js +0 -44
  81. package/src/resolve/complexSubstitutionAgainstSimpleSubstitution.js +0 -79
  82. package/src/resolve/substitution.js +0 -19
  83. package/src/resolve/substitutions.js +0 -31
  84. package/src/unify/metavariableWithFrame.js +0 -40
  85. package/src/unify/simpleSubstitutionStatementWithComplexSubstitutionStatement.js +0 -27
  86. package/src/verify/declaration.js +0 -113
  87. package/src/verify/frame.js +0 -157
  88. package/src/verify/judgement.js +0 -127
  89. package/src/verify/metavariableGivenMetaType.js +0 -45
@@ -8,7 +8,9 @@ Object.defineProperty(exports, "default", {
8
8
  return Declaration;
9
9
  }
10
10
  });
11
- var _brackets = require("./utilities/brackets");
11
+ var _shim = /*#__PURE__*/ _interop_require_default(require("./shim"));
12
+ var _reference = /*#__PURE__*/ _interop_require_default(require("./reference"));
13
+ var _query = require("./utilities/query");
12
14
  function _class_call_check(instance, Constructor) {
13
15
  if (!(instance instanceof Constructor)) {
14
16
  throw new TypeError("Cannot call a class as a function");
@@ -28,13 +30,26 @@ function _create_class(Constructor, protoProps, staticProps) {
28
30
  if (staticProps) _defineProperties(Constructor, staticProps);
29
31
  return Constructor;
30
32
  }
33
+ function _interop_require_default(obj) {
34
+ return obj && obj.__esModule ? obj : {
35
+ default: obj
36
+ };
37
+ }
38
+ var referenceNodeQuery = (0, _query.nodeQuery)("/declaration/reference"), statementNodeQuery = (0, _query.nodeQuery)("/declaration/statement");
31
39
  var Declaration = /*#__PURE__*/ function() {
32
- function Declaration(reference, statement) {
40
+ function Declaration(string, reference, statement) {
33
41
  _class_call_check(this, Declaration);
42
+ this.string = string;
34
43
  this.reference = reference;
35
44
  this.statement = statement;
36
45
  }
37
46
  _create_class(Declaration, [
47
+ {
48
+ key: "getString",
49
+ value: function getString() {
50
+ return this.string;
51
+ }
52
+ },
38
53
  {
39
54
  key: "getReference",
40
55
  value: function getReference() {
@@ -46,9 +61,81 @@ var Declaration = /*#__PURE__*/ function() {
46
61
  value: function getStatement() {
47
62
  return this.statement;
48
63
  }
64
+ },
65
+ {
66
+ // unifyStatement(statementNode) {
67
+ // statementNode = stripBracketsFromStatement(statementNode); ///
68
+ //
69
+ // const statementNodeMatches = this.statementNode.match(statementNode),
70
+ // statementUnified = statementNodeMatches; ///
71
+ //
72
+ // return statementUnified;
73
+ // }
74
+ //
75
+ // unifySubstitution(substitution) {
76
+ // const statementNode = substitution.getStatementNode(),
77
+ // metavariableNode = substitution.getMetavariableNode(),
78
+ // statementUnified = this.unifyStatement(statementNode),
79
+ // metavariableUnified = this.unifyMetavariable(metavariableNode),
80
+ // substitutionUnified = (metavariableUnified && statementUnified);
81
+ //
82
+ // return substitutionUnified;
83
+ // }
84
+ //
85
+ // unifyMetavariable(metavariable) {
86
+ // const metavariableNodeMatches = this.reference.matchMetavariableNode(metavariable);
87
+ //
88
+ // return metavariableNodeMatches;
89
+ // }
90
+ //
91
+ // unifyMetaLemmaOrMetatheorem(metaLemmaMetatheorem) {
92
+ // const consequent = metaLemmaMetatheorem.getConsequent(),
93
+ // statementNode = consequent.getStatementNode(),
94
+ // statementNodeMatches = this.statementNode.match(statementNode),
95
+ // metaLemmaOrMetaTheoremUnified = statementNodeMatches; ///
96
+ //
97
+ // return metaLemmaOrMetaTheoremUnified;
98
+ // }
99
+ //
100
+ // static fromReferenceAndStatementNode(reference, statementNode) {
101
+ // statementNode = stripBracketsFromStatement(statementNode); ///
102
+ //
103
+ // const declaration = new Declaration(reference, statementNode);
104
+ //
105
+ // return declaration;
106
+ // }
107
+ key: "verify",
108
+ value: function verify(assignments, stated, localContext) {
109
+ var verified;
110
+ var declarationString = this.string; ///
111
+ localContext.trace("Verifying the '".concat(declarationString, "' declaration..."));
112
+ stated = true;
113
+ assignments = null;
114
+ var referenceVerified = this.reference.verify(localContext);
115
+ if (referenceVerified) {
116
+ var statementVerified = this.statement.verify(assignments, stated, localContext);
117
+ verified = statementVerified; ///
118
+ }
119
+ if (verified) {
120
+ localContext.debug("...verified the '".concat(declarationString, "' declaration."));
121
+ }
122
+ return verified;
123
+ }
124
+ }
125
+ ], [
126
+ {
127
+ key: "fromDeclarationNode",
128
+ value: function fromDeclarationNode(declarationNode, localContext) {
129
+ var declaration = null;
130
+ if (declarationNode !== null) {
131
+ var Statement = _shim.default.Statement, referenceNode = referenceNodeQuery(declarationNode), statementNode = statementNodeQuery(declarationNode), reference = _reference.default.fromReferenceNode(referenceNode, localContext), statement = Statement.fromStatementNode(statementNode, localContext), node = declarationNode, string = localContext.nodeAsString(node);
132
+ declaration = new Declaration(string, reference, statement);
133
+ }
134
+ return declaration;
135
+ }
49
136
  }
50
137
  ]);
51
138
  return Declaration;
52
139
  }();
53
140
 
54
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9kZWNsYXJhdGlvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3RyaXBCcmFja2V0c0Zyb21TdGF0ZW1lbnQgfSBmcm9tIFwiLi91dGlsaXRpZXMvYnJhY2tldHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVjbGFyYXRpb24ge1xuICBjb25zdHJ1Y3RvcihyZWZlcmVuY2UsIHN0YXRlbWVudCkge1xuICAgIHRoaXMucmVmZXJlbmNlID0gcmVmZXJlbmNlO1xuICAgIHRoaXMuc3RhdGVtZW50ID0gc3RhdGVtZW50O1xuICB9XG5cbiAgZ2V0UmVmZXJlbmNlKCkge1xuICAgIHJldHVybiB0aGlzLnJlZmVyZW5jZTtcbiAgfVxuXG4gIGdldFN0YXRlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZW1lbnQ7XG4gIH1cblxuICAvLyBnZXRNZXRhdmFyaWFibGVOb2RlKCkgeyByZXR1cm4gdGhpcy5yZWZlcmVuY2UuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpOyB9XG4gIC8vXG4gIC8vIHVuaWZ5U3RhdGVtZW50KHN0YXRlbWVudE5vZGUpIHtcbiAgLy8gICBzdGF0ZW1lbnROb2RlID0gc3RyaXBCcmFja2V0c0Zyb21TdGF0ZW1lbnQoc3RhdGVtZW50Tm9kZSk7IC8vL1xuICAvL1xuICAvLyAgIGNvbnN0IHN0YXRlbWVudE5vZGVNYXRjaGVzID0gdGhpcy5zdGF0ZW1lbnROb2RlLm1hdGNoKHN0YXRlbWVudE5vZGUpLFxuICAvLyAgICAgICAgIHN0YXRlbWVudFVuaWZpZWQgPSBzdGF0ZW1lbnROb2RlTWF0Y2hlczsgIC8vL1xuICAvL1xuICAvLyAgIHJldHVybiBzdGF0ZW1lbnRVbmlmaWVkO1xuICAvLyB9XG4gIC8vXG4gIC8vIHVuaWZ5U3Vic3RpdHV0aW9uKHN1YnN0aXR1dGlvbikge1xuICAvLyAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdWJzdGl0dXRpb24uZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAvLyAgICAgICAgIG1ldGF2YXJpYWJsZU5vZGUgPSBzdWJzdGl0dXRpb24uZ2V0TWV0YXZhcmlhYmxlTm9kZSgpLFxuICAvLyAgICAgICAgIHN0YXRlbWVudFVuaWZpZWQgPSB0aGlzLnVuaWZ5U3RhdGVtZW50KHN0YXRlbWVudE5vZGUpLFxuICAvLyAgICAgICAgIG1ldGF2YXJpYWJsZVVuaWZpZWQgPSB0aGlzLnVuaWZ5TWV0YXZhcmlhYmxlKG1ldGF2YXJpYWJsZU5vZGUpLFxuICAvLyAgICAgICAgIHN1YnN0aXR1dGlvblVuaWZpZWQgPSAobWV0YXZhcmlhYmxlVW5pZmllZCAmJiBzdGF0ZW1lbnRVbmlmaWVkKTtcbiAgLy9cbiAgLy8gICByZXR1cm4gc3Vic3RpdHV0aW9uVW5pZmllZDtcbiAgLy8gfVxuICAvL1xuICAvLyB1bmlmeU1ldGF2YXJpYWJsZShtZXRhdmFyaWFibGUpIHtcbiAgLy8gICBjb25zdCBtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyA9IHRoaXMucmVmZXJlbmNlLm1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGUpO1xuICAvL1xuICAvLyAgIHJldHVybiBtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcztcbiAgLy8gfVxuICAvL1xuICAvLyB1bmlmeU1ldGFMZW1tYU9yTWV0YXRoZW9yZW0obWV0YUxlbW1hTWV0YXRoZW9yZW0pIHtcbiAgLy8gICBjb25zdCBjb25zZXF1ZW50ID0gbWV0YUxlbW1hTWV0YXRoZW9yZW0uZ2V0Q29uc2VxdWVudCgpLFxuICAvLyAgICAgICAgIHN0YXRlbWVudE5vZGUgPSBjb25zZXF1ZW50LmdldFN0YXRlbWVudE5vZGUoKSxcbiAgLy8gICAgICAgICBzdGF0ZW1lbnROb2RlTWF0Y2hlcyA9IHRoaXMuc3RhdGVtZW50Tm9kZS5tYXRjaChzdGF0ZW1lbnROb2RlKSxcbiAgLy8gICAgICAgICBtZXRhTGVtbWFPck1ldGFUaGVvcmVtVW5pZmllZCA9IHN0YXRlbWVudE5vZGVNYXRjaGVzOyAgLy8vXG4gIC8vXG4gIC8vICAgcmV0dXJuIG1ldGFMZW1tYU9yTWV0YVRoZW9yZW1VbmlmaWVkO1xuICAvLyB9XG4gIC8vXG4gIC8vIHN0YXRpYyBmcm9tUmVmZXJlbmNlQW5kU3RhdGVtZW50Tm9kZShyZWZlcmVuY2UsIHN0YXRlbWVudE5vZGUpIHtcbiAgLy8gICBzdGF0ZW1lbnROb2RlID0gc3RyaXBCcmFja2V0c0Zyb21TdGF0ZW1lbnQoc3RhdGVtZW50Tm9kZSk7IC8vL1xuICAvL1xuICAvLyAgIGNvbnN0IGRlY2xhcmF0aW9uID0gbmV3IERlY2xhcmF0aW9uKHJlZmVyZW5jZSwgc3RhdGVtZW50Tm9kZSk7XG4gIC8vXG4gIC8vICAgcmV0dXJuIGRlY2xhcmF0aW9uO1xuICAvLyB9XG59XG4iXSwibmFtZXMiOlsiRGVjbGFyYXRpb24iLCJyZWZlcmVuY2UiLCJzdGF0ZW1lbnQiLCJnZXRSZWZlcmVuY2UiLCJnZXRTdGF0ZW1lbnQiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O2VBSXFCQTs7O3dCQUZzQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFNUIsSUFBQSxBQUFNQSw0QkFBTjthQUFNQSxZQUNQQyxTQUFTLEVBQUVDLFNBQVM7Z0NBRGJGO1FBRWpCLElBQUksQ0FBQ0MsU0FBUyxHQUFHQTtRQUNqQixJQUFJLENBQUNDLFNBQVMsR0FBR0E7O2tCQUhBRjs7WUFNbkJHLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFDRSxPQUFPLElBQUksQ0FBQ0YsU0FBUztZQUN2Qjs7O1lBRUFHLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFDRSxPQUFPLElBQUksQ0FBQ0YsU0FBUztZQUN2Qjs7O1dBWm1CRiJ9
141
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9kZWNsYXJhdGlvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHNoaW0gZnJvbSBcIi4vc2hpbVwiO1xuaW1wb3J0IFJlZmVyZW5jZSBmcm9tIFwiLi9yZWZlcmVuY2VcIjtcblxuaW1wb3J0IHsgbm9kZVF1ZXJ5IH0gZnJvbSBcIi4vdXRpbGl0aWVzL3F1ZXJ5XCI7XG5cbmNvbnN0IHJlZmVyZW5jZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9kZWNsYXJhdGlvbi9yZWZlcmVuY2VcIiksXG4gICAgICBzdGF0ZW1lbnROb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvZGVjbGFyYXRpb24vc3RhdGVtZW50XCIpO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWNsYXJhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHN0cmluZywgcmVmZXJlbmNlLCBzdGF0ZW1lbnQpIHtcbiAgICB0aGlzLnN0cmluZyA9IHN0cmluZztcbiAgICB0aGlzLnJlZmVyZW5jZSA9IHJlZmVyZW5jZTtcbiAgICB0aGlzLnN0YXRlbWVudCA9IHN0YXRlbWVudDtcbiAgfVxuXG4gIGdldFN0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5zdHJpbmc7XG4gIH1cblxuICBnZXRSZWZlcmVuY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVmZXJlbmNlO1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlbWVudDtcbiAgfVxuXG4gIC8vIHVuaWZ5U3RhdGVtZW50KHN0YXRlbWVudE5vZGUpIHtcbiAgLy8gICBzdGF0ZW1lbnROb2RlID0gc3RyaXBCcmFja2V0c0Zyb21TdGF0ZW1lbnQoc3RhdGVtZW50Tm9kZSk7IC8vL1xuICAvL1xuICAvLyAgIGNvbnN0IHN0YXRlbWVudE5vZGVNYXRjaGVzID0gdGhpcy5zdGF0ZW1lbnROb2RlLm1hdGNoKHN0YXRlbWVudE5vZGUpLFxuICAvLyAgICAgICAgIHN0YXRlbWVudFVuaWZpZWQgPSBzdGF0ZW1lbnROb2RlTWF0Y2hlczsgIC8vL1xuICAvL1xuICAvLyAgIHJldHVybiBzdGF0ZW1lbnRVbmlmaWVkO1xuICAvLyB9XG4gIC8vXG4gIC8vIHVuaWZ5U3Vic3RpdHV0aW9uKHN1YnN0aXR1dGlvbikge1xuICAvLyAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdWJzdGl0dXRpb24uZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAvLyAgICAgICAgIG1ldGF2YXJpYWJsZU5vZGUgPSBzdWJzdGl0dXRpb24uZ2V0TWV0YXZhcmlhYmxlTm9kZSgpLFxuICAvLyAgICAgICAgIHN0YXRlbWVudFVuaWZpZWQgPSB0aGlzLnVuaWZ5U3RhdGVtZW50KHN0YXRlbWVudE5vZGUpLFxuICAvLyAgICAgICAgIG1ldGF2YXJpYWJsZVVuaWZpZWQgPSB0aGlzLnVuaWZ5TWV0YXZhcmlhYmxlKG1ldGF2YXJpYWJsZU5vZGUpLFxuICAvLyAgICAgICAgIHN1YnN0aXR1dGlvblVuaWZpZWQgPSAobWV0YXZhcmlhYmxlVW5pZmllZCAmJiBzdGF0ZW1lbnRVbmlmaWVkKTtcbiAgLy9cbiAgLy8gICByZXR1cm4gc3Vic3RpdHV0aW9uVW5pZmllZDtcbiAgLy8gfVxuICAvL1xuICAvLyB1bmlmeU1ldGF2YXJpYWJsZShtZXRhdmFyaWFibGUpIHtcbiAgLy8gICBjb25zdCBtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyA9IHRoaXMucmVmZXJlbmNlLm1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGUpO1xuICAvL1xuICAvLyAgIHJldHVybiBtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcztcbiAgLy8gfVxuICAvL1xuICAvLyB1bmlmeU1ldGFMZW1tYU9yTWV0YXRoZW9yZW0obWV0YUxlbW1hTWV0YXRoZW9yZW0pIHtcbiAgLy8gICBjb25zdCBjb25zZXF1ZW50ID0gbWV0YUxlbW1hTWV0YXRoZW9yZW0uZ2V0Q29uc2VxdWVudCgpLFxuICAvLyAgICAgICAgIHN0YXRlbWVudE5vZGUgPSBjb25zZXF1ZW50LmdldFN0YXRlbWVudE5vZGUoKSxcbiAgLy8gICAgICAgICBzdGF0ZW1lbnROb2RlTWF0Y2hlcyA9IHRoaXMuc3RhdGVtZW50Tm9kZS5tYXRjaChzdGF0ZW1lbnROb2RlKSxcbiAgLy8gICAgICAgICBtZXRhTGVtbWFPck1ldGFUaGVvcmVtVW5pZmllZCA9IHN0YXRlbWVudE5vZGVNYXRjaGVzOyAgLy8vXG4gIC8vXG4gIC8vICAgcmV0dXJuIG1ldGFMZW1tYU9yTWV0YVRoZW9yZW1VbmlmaWVkO1xuICAvLyB9XG4gIC8vXG4gIC8vIHN0YXRpYyBmcm9tUmVmZXJlbmNlQW5kU3RhdGVtZW50Tm9kZShyZWZlcmVuY2UsIHN0YXRlbWVudE5vZGUpIHtcbiAgLy8gICBzdGF0ZW1lbnROb2RlID0gc3RyaXBCcmFja2V0c0Zyb21TdGF0ZW1lbnQoc3RhdGVtZW50Tm9kZSk7IC8vL1xuICAvL1xuICAvLyAgIGNvbnN0IGRlY2xhcmF0aW9uID0gbmV3IERlY2xhcmF0aW9uKHJlZmVyZW5jZSwgc3RhdGVtZW50Tm9kZSk7XG4gIC8vXG4gIC8vICAgcmV0dXJuIGRlY2xhcmF0aW9uO1xuICAvLyB9XG5cbiAgdmVyaWZ5KGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGxvY2FsQ29udGV4dCkge1xuICAgIGxldCB2ZXJpZmllZDtcblxuICAgIGNvbnN0IGRlY2xhcmF0aW9uU3RyaW5nID0gdGhpcy5zdHJpbmc7ICAvLy9cblxuICAgIGxvY2FsQ29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtkZWNsYXJhdGlvblN0cmluZ30nIGRlY2xhcmF0aW9uLi4uYCk7XG5cbiAgICBzdGF0ZWQgPSB0cnVlO1xuXG4gICAgYXNzaWdubWVudHMgPSBudWxsO1xuXG4gICAgY29uc3QgcmVmZXJlbmNlVmVyaWZpZWQgPSB0aGlzLnJlZmVyZW5jZS52ZXJpZnkobG9jYWxDb250ZXh0KTtcblxuICAgIGlmIChyZWZlcmVuY2VWZXJpZmllZCkge1xuICAgICAgY29uc3Qgc3RhdGVtZW50VmVyaWZpZWQgPSB0aGlzLnN0YXRlbWVudC52ZXJpZnkoYXNzaWdubWVudHMsIHN0YXRlZCwgbG9jYWxDb250ZXh0KTtcblxuICAgICAgdmVyaWZpZWQgPSBzdGF0ZW1lbnRWZXJpZmllZDsgLy8vXG4gICAgfVxuXG4gICAgaWYgKHZlcmlmaWVkKSB7XG4gICAgICBsb2NhbENvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtkZWNsYXJhdGlvblN0cmluZ30nIGRlY2xhcmF0aW9uLmApO1xuICAgIH1cblxuICAgIHJldHVybiB2ZXJpZmllZDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tRGVjbGFyYXRpb25Ob2RlKGRlY2xhcmF0aW9uTm9kZSwgbG9jYWxDb250ZXh0KSB7XG4gICAgbGV0IGRlY2xhcmF0aW9uID0gbnVsbDtcblxuICAgIGlmIChkZWNsYXJhdGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHsgU3RhdGVtZW50IH0gPSBzaGltLFxuICAgICAgICAgICAgcmVmZXJlbmNlTm9kZSA9IHJlZmVyZW5jZU5vZGVRdWVyeShkZWNsYXJhdGlvbk5vZGUpLFxuICAgICAgICAgICAgc3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudE5vZGVRdWVyeShkZWNsYXJhdGlvbk5vZGUpLFxuICAgICAgICAgICAgcmVmZXJlbmNlID0gUmVmZXJlbmNlLmZyb21SZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUsIGxvY2FsQ29udGV4dCksXG4gICAgICAgICAgICBzdGF0ZW1lbnQgPSBTdGF0ZW1lbnQuZnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgbG9jYWxDb250ZXh0KSxcbiAgICAgICAgICAgIG5vZGUgPSBkZWNsYXJhdGlvbk5vZGUsICAvLy9cbiAgICAgICAgICAgIHN0cmluZyA9IGxvY2FsQ29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSk7XG5cbiAgICAgIGRlY2xhcmF0aW9uID0gbmV3IERlY2xhcmF0aW9uKHN0cmluZywgcmVmZXJlbmNlLCBzdGF0ZW1lbnQpO1xuICAgIH1cblxuICAgIHJldHVybiBkZWNsYXJhdGlvbjtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIkRlY2xhcmF0aW9uIiwicmVmZXJlbmNlTm9kZVF1ZXJ5Iiwibm9kZVF1ZXJ5Iiwic3RhdGVtZW50Tm9kZVF1ZXJ5Iiwic3RyaW5nIiwicmVmZXJlbmNlIiwic3RhdGVtZW50IiwiZ2V0U3RyaW5nIiwiZ2V0UmVmZXJlbmNlIiwiZ2V0U3RhdGVtZW50IiwidmVyaWZ5IiwiYXNzaWdubWVudHMiLCJzdGF0ZWQiLCJsb2NhbENvbnRleHQiLCJ2ZXJpZmllZCIsImRlY2xhcmF0aW9uU3RyaW5nIiwidHJhY2UiLCJyZWZlcmVuY2VWZXJpZmllZCIsInN0YXRlbWVudFZlcmlmaWVkIiwiZGVidWciLCJmcm9tRGVjbGFyYXRpb25Ob2RlIiwiZGVjbGFyYXRpb25Ob2RlIiwiZGVjbGFyYXRpb24iLCJTdGF0ZW1lbnQiLCJzaGltIiwicmVmZXJlbmNlTm9kZSIsInN0YXRlbWVudE5vZGUiLCJSZWZlcmVuY2UiLCJmcm9tUmVmZXJlbmNlTm9kZSIsImZyb21TdGF0ZW1lbnROb2RlIiwibm9kZSIsIm5vZGVBc1N0cmluZyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7ZUFVcUJBOzs7MkRBUko7Z0VBQ0s7cUJBRUk7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFMUIsSUFBTUMscUJBQXFCQyxJQUFBQSxnQkFBUyxFQUFDLDJCQUMvQkMscUJBQXFCRCxJQUFBQSxnQkFBUyxFQUFDO0FBRXRCLElBQUEsQUFBTUYsNEJBQU47YUFBTUEsWUFDUEksTUFBTSxFQUFFQyxTQUFTLEVBQUVDLFNBQVM7Z0NBRHJCTjtRQUVqQixJQUFJLENBQUNJLE1BQU0sR0FBR0E7UUFDZCxJQUFJLENBQUNDLFNBQVMsR0FBR0E7UUFDakIsSUFBSSxDQUFDQyxTQUFTLEdBQUdBOztrQkFKQU47O1lBT25CTyxLQUFBQTttQkFBQUEsU0FBQUE7Z0JBQ0UsT0FBTyxJQUFJLENBQUNILE1BQU07WUFDcEI7OztZQUVBSSxLQUFBQTttQkFBQUEsU0FBQUE7Z0JBQ0UsT0FBTyxJQUFJLENBQUNILFNBQVM7WUFDdkI7OztZQUVBSSxLQUFBQTttQkFBQUEsU0FBQUE7Z0JBQ0UsT0FBTyxJQUFJLENBQUNILFNBQVM7WUFDdkI7OztZQUVBLGtDQUFrQztZQUNsQyxtRUFBbUU7WUFDbkUsRUFBRTtZQUNGLDBFQUEwRTtZQUMxRSx3REFBd0Q7WUFDeEQsRUFBRTtZQUNGLDZCQUE2QjtZQUM3QixJQUFJO1lBQ0osRUFBRTtZQUNGLG9DQUFvQztZQUNwQywyREFBMkQ7WUFDM0QsaUVBQWlFO1lBQ2pFLGlFQUFpRTtZQUNqRSwwRUFBMEU7WUFDMUUsMkVBQTJFO1lBQzNFLEVBQUU7WUFDRixnQ0FBZ0M7WUFDaEMsSUFBSTtZQUNKLEVBQUU7WUFDRixvQ0FBb0M7WUFDcEMsd0ZBQXdGO1lBQ3hGLEVBQUU7WUFDRixvQ0FBb0M7WUFDcEMsSUFBSTtZQUNKLEVBQUU7WUFDRixzREFBc0Q7WUFDdEQsNkRBQTZEO1lBQzdELHlEQUF5RDtZQUN6RCwwRUFBMEU7WUFDMUUscUVBQXFFO1lBQ3JFLEVBQUU7WUFDRiwwQ0FBMEM7WUFDMUMsSUFBSTtZQUNKLEVBQUU7WUFDRixtRUFBbUU7WUFDbkUsbUVBQW1FO1lBQ25FLEVBQUU7WUFDRixtRUFBbUU7WUFDbkUsRUFBRTtZQUNGLHdCQUF3QjtZQUN4QixJQUFJO1lBRUpJLEtBQUFBO21CQUFBQSxTQUFBQSxPQUFPQyxXQUFXLEVBQUVDLE1BQU0sRUFBRUMsWUFBWTtnQkFDdEMsSUFBSUM7Z0JBRUosSUFBTUMsb0JBQW9CLElBQUksQ0FBQ1gsTUFBTSxFQUFHLEdBQUc7Z0JBRTNDUyxhQUFhRyxLQUFLLENBQUMsQUFBQyxrQkFBbUMsT0FBbEJELG1CQUFrQjtnQkFFdkRILFNBQVM7Z0JBRVRELGNBQWM7Z0JBRWQsSUFBTU0sb0JBQW9CLElBQUksQ0FBQ1osU0FBUyxDQUFDSyxNQUFNLENBQUNHO2dCQUVoRCxJQUFJSSxtQkFBbUI7b0JBQ3JCLElBQU1DLG9CQUFvQixJQUFJLENBQUNaLFNBQVMsQ0FBQ0ksTUFBTSxDQUFDQyxhQUFhQyxRQUFRQztvQkFFckVDLFdBQVdJLG1CQUFtQixHQUFHO2dCQUNuQztnQkFFQSxJQUFJSixVQUFVO29CQUNaRCxhQUFhTSxLQUFLLENBQUMsQUFBQyxvQkFBcUMsT0FBbEJKLG1CQUFrQjtnQkFDM0Q7Z0JBRUEsT0FBT0Q7WUFDVDs7OztZQUVPTSxLQUFBQTttQkFBUCxTQUFPQSxvQkFBb0JDLGVBQWUsRUFBRVIsWUFBWTtnQkFDdEQsSUFBSVMsY0FBYztnQkFFbEIsSUFBSUQsb0JBQW9CLE1BQU07b0JBQzVCLElBQU0sQUFBRUUsWUFBY0MsYUFBSSxDQUFsQkQsV0FDRkUsZ0JBQWdCeEIsbUJBQW1Cb0Isa0JBQ25DSyxnQkFBZ0J2QixtQkFBbUJrQixrQkFDbkNoQixZQUFZc0Isa0JBQVMsQ0FBQ0MsaUJBQWlCLENBQUNILGVBQWVaLGVBQ3ZEUCxZQUFZaUIsVUFBVU0saUJBQWlCLENBQUNILGVBQWViLGVBQ3ZEaUIsT0FBT1QsaUJBQ1BqQixTQUFTUyxhQUFha0IsWUFBWSxDQUFDRDtvQkFFekNSLGNBQWMsSUFuR0N0QixZQW1HZUksUUFBUUMsV0FBV0M7Z0JBQ25EO2dCQUVBLE9BQU9nQjtZQUNUOzs7V0F2R21CdEIifQ==
package/lib/frame.js CHANGED
@@ -8,6 +8,7 @@ Object.defineProperty(exports, "default", {
8
8
  return _default;
9
9
  }
10
10
  });
11
+ var _necessary = require("necessary");
11
12
  var _shim = /*#__PURE__*/ _interop_require_default(require("./shim"));
12
13
  var _declaration = /*#__PURE__*/ _interop_require_default(require("./declaration"));
13
14
  var _metavariable = /*#__PURE__*/ _interop_require_default(require("./metavariable"));
@@ -37,11 +38,13 @@ function _interop_require_default(obj) {
37
38
  default: obj
38
39
  };
39
40
  }
40
- var declarationNodesQuery = (0, _query.nodesQuery)("/frame/declaration"), metavariableNodesQuery = (0, _query.nodesQuery)("/frame/metavariable"), frameMetavariableNodeQuery = (0, _query.nodeQuery)("/*/frame/metavariable!");
41
+ var frameNodeQuery = (0, _query.nodeQuery)("/*/frame"), declarationNodesQuery = (0, _query.nodesQuery)("/frame/declaration"), metavariableNodeQuery = (0, _query.nodeQuery)("/frame/metavariable!"), metavariableNodesQuery = (0, _query.nodesQuery)("/frame/metavariable");
42
+ var first = _necessary.arrayUtilities.first;
41
43
  var Frame = /*#__PURE__*/ function() {
42
- function Frame(string, declarations, metavariables) {
44
+ function Frame(string, node, declarations, metavariables) {
43
45
  _class_call_check(this, Frame);
44
46
  this.string = string;
47
+ this.node = node;
45
48
  this.declarations = declarations;
46
49
  this.metavariables = metavariables;
47
50
  }
@@ -52,6 +55,12 @@ var Frame = /*#__PURE__*/ function() {
52
55
  return this.string;
53
56
  }
54
57
  },
58
+ {
59
+ key: "getNode",
60
+ value: function getNode() {
61
+ return this.node;
62
+ }
63
+ },
55
64
  {
56
65
  key: "getDeclarations",
57
66
  value: function getDeclarations() {
@@ -77,24 +86,21 @@ var Frame = /*#__PURE__*/ function() {
77
86
  }
78
87
  },
79
88
  {
80
- // getMetavariableNode() {
81
- // let metavariableNode = null;
82
- //
83
- // const declarationsLength = this.declarations.length;
84
- //
85
- // if (declarationsLength === 0) {
86
- // const metavariableNodesLength = this.metavariableNodes.length;
87
- //
88
- // if (metavariableNodesLength === 1) {
89
- // const firstMetavariableNode = first(this.metavariableNodes);
90
- //
91
- // metavariableNode = firstMetavariableNode; ///
92
- // }
93
- // }
94
- //
95
- // return metavariableNode;
96
- // }
97
- //
89
+ key: "getMetavariableNode",
90
+ value: function getMetavariableNode() {
91
+ var metavariableNode = null;
92
+ var declarationsLength = this.declarations.length;
93
+ if (declarationsLength === 0) {
94
+ var metavariablesLength = this.metavariables.length;
95
+ if (metavariablesLength === 1) {
96
+ var firstMetavariable = first(this.metavariables), metavariable = firstMetavariable; ///
97
+ metavariableNode = metavariable.getNode();
98
+ }
99
+ }
100
+ return metavariableNode;
101
+ }
102
+ },
103
+ {
98
104
  // matchMetavariableName(metavariableName) {
99
105
  // let metavariableNameMatches = false;
100
106
  //
@@ -139,12 +145,57 @@ var Frame = /*#__PURE__*/ function() {
139
145
  // return metaLemmaOrMetaTheoremUnified;
140
146
  // }
141
147
  key: "verify",
142
- value: function verify(localContext) {
148
+ value: function verify(assignments, stated1, localContext) {
143
149
  var verified;
144
150
  var frameString = this.string; ///
145
151
  localContext.trace("Verifying the '".concat(frameString, "' frame..."));
152
+ var verifiedWhenStated = false, verifiedWhenDerived = false;
153
+ if (stated1) {
154
+ verifiedWhenStated = this.verifyWhenStated(assignments, localContext);
155
+ } else {
156
+ verifiedWhenDerived = this.verifyWhenDerived(assignments, localContext);
157
+ }
158
+ if (verifiedWhenStated || verifiedWhenDerived) {
159
+ verified = true;
160
+ }
161
+ if (verified) {
162
+ localContext.debug("...verified the '".concat(frameString, "' frame."));
163
+ }
164
+ return verified;
165
+ }
166
+ },
167
+ {
168
+ key: "verifyWhenStated",
169
+ value: function verifyWhenStated(assignments, localContext) {
170
+ var verifiedWhenStated = false;
171
+ var frameString = this.string; ///
172
+ localContext.trace("Verifying the '".concat(frameString, "' frame when stated..."));
173
+ var declarationsLength = this.declarations.length;
174
+ if (declarationsLength === 0) {
175
+ var metavariablesLength = this.metavariables.length;
176
+ if (metavariablesLength === 1) {
177
+ var firstMetavariable = first(this.metavariables), metavariable = firstMetavariable, metavariableVerified = metavariable.verify(localContext);
178
+ verifiedWhenStated = metavariableVerified; ///
179
+ } else {
180
+ localContext.trace("The '".concat(frameString, "' stated frame cannot have more than one metavariable."));
181
+ }
182
+ } else {
183
+ localContext.trace("The '".concat(frameString, "' stated frame cannot have declarations."));
184
+ }
185
+ if (verifiedWhenStated) {
186
+ localContext.debug("...verified the '".concat(frameString, "' frame when stated."));
187
+ }
188
+ return verifiedWhenStated;
189
+ }
190
+ },
191
+ {
192
+ key: "verifyWhenDerived",
193
+ value: function verifyWhenDerived(assignments, localContext) {
194
+ var verifiedWhenDerived;
195
+ var frameString = this.string; ///
196
+ localContext.trace("Verifying the '".concat(frameString, "' frame when derived..."));
146
197
  var declarationsVerified = this.declarations.every(function(declaration) {
147
- var declarationVerified = declaration.verify(localContext);
198
+ var declarationVerified = declaration.verify(assignments, stated, localContext);
148
199
  return declarationVerified;
149
200
  });
150
201
  if (declarationsVerified) {
@@ -152,23 +203,23 @@ var Frame = /*#__PURE__*/ function() {
152
203
  var metavariableVerified = metavariable.verify(localContext);
153
204
  return metavariableVerified;
154
205
  });
155
- verified = metavariablesVerified; ///
206
+ verifiedWhenDerived = metavariablesVerified; ///
156
207
  }
157
- if (verified) {
158
- localContext.debug("...verified the '".concat(frameString, "' frame."));
208
+ if (verifiedWhenDerived) {
209
+ localContext.debug("...verified the '".concat(frameString, "' frame when derived."));
159
210
  }
160
- return verified;
211
+ return verifiedWhenDerived;
161
212
  }
162
213
  },
163
214
  {
164
215
  key: "verifyGivenMetaType",
165
- value: function verifyGivenMetaType(metaType, localContext) {
216
+ value: function verifyGivenMetaType(metaType, assignments, stated1, localContext) {
166
217
  var verifiedGivenMetaType = false;
167
218
  var frameString = this.string, metaTypeString = metaType.getString();
168
219
  localContext.trace("Verifying the '".concat(frameString, "' frame given the '").concat(metaTypeString, "' meta-type..."));
169
220
  var metaTypeName = metaType.getName();
170
221
  if (metaTypeName === _metaTypeNames.FRAME_META_TYPE_NAME) {
171
- var verified = this.verify(localContext);
222
+ var verified = this.verify(assignments, stated1, localContext);
172
223
  verifiedGivenMetaType = verified; ///
173
224
  }
174
225
  if (verifiedGivenMetaType) {
@@ -181,13 +232,17 @@ var Frame = /*#__PURE__*/ function() {
181
232
  {
182
233
  key: "fromFrameNode",
183
234
  value: function fromFrameNode(frameNode, localContext) {
184
- var declarationNodes = declarationNodesQuery(frameNode), metavariableNodes = metavariableNodesQuery(frameNode), declarations = declarationNodes.map(function(declarationNode) {
185
- var declaration = _declaration.default.fromDeclarationNode(declarationNode, localContext);
186
- return declaration;
187
- }), metavariables = metavariableNodes.map(function(metavariableNode) {
188
- var metavariable = _metavariable.default.fromMetavariableNode(metavariableNode, localContext);
189
- return metavariable;
190
- }), node = frameNode, string = localContext.nodeAsString(node), frame = new Frame(string, declarations, metavariables);
235
+ var frame = null;
236
+ if (frameNode !== null) {
237
+ var declarationNodes = declarationNodesQuery(frameNode), metavariableNodes = metavariableNodesQuery(frameNode), declarations = declarationNodes.map(function(declarationNode) {
238
+ var declaration = _declaration.default.fromDeclarationNode(declarationNode, localContext);
239
+ return declaration;
240
+ }), metavariables = metavariableNodes.map(function(metavariableNode) {
241
+ var metavariable = _metavariable.default.fromMetavariableNode(metavariableNode, localContext);
242
+ return metavariable;
243
+ }), node = frameNode, string = localContext.nodeAsString(node);
244
+ frame = new Frame(string, node, declarations, metavariables);
245
+ }
191
246
  return frame;
192
247
  }
193
248
  },
@@ -195,12 +250,15 @@ var Frame = /*#__PURE__*/ function() {
195
250
  key: "fromDefinedAssertionNode",
196
251
  value: function fromDefinedAssertionNode(definedAssertionNode, localContext) {
197
252
  var frame = null;
198
- var frameMetavariableNode = frameMetavariableNodeQuery(definedAssertionNode);
199
- if (frameMetavariableNode !== null) {
200
- var metavariableNode = frameMetavariableNode, metavariable = _metavariable.default.fromMetavariableNode(metavariableNode, localContext), declarations = [], metavariables = [
201
- metavariable
202
- ], node = metavariableNode, string = localContext.nodeAsString(node);
203
- frame = new Frame(string, declarations, metavariables);
253
+ var frameNode = frameNodeQuery(definedAssertionNode);
254
+ if (frameNode !== null) {
255
+ var metavariableNode = metavariableNodeQuery(frameNode);
256
+ if (metavariableNode !== null) {
257
+ var metavariable = _metavariable.default.fromMetavariableNode(metavariableNode, localContext), declarations = [], metavariables = [
258
+ metavariable
259
+ ], node = frameNode, string = localContext.nodeAsString(node);
260
+ frame = new Frame(string, node, declarations, metavariables);
261
+ }
204
262
  }
205
263
  return frame;
206
264
  }
@@ -209,12 +267,15 @@ var Frame = /*#__PURE__*/ function() {
209
267
  key: "fromContainedAssertionNode",
210
268
  value: function fromContainedAssertionNode(containedAssertionNode, localContext) {
211
269
  var frame = null;
212
- var frameMetavariableNode = frameMetavariableNodeQuery(containedAssertionNode);
213
- if (frameMetavariableNode !== null) {
214
- var metavariableNode = frameMetavariableNode, metavariable = _metavariable.default.fromMetavariableNode(metavariableNode, localContext), declarations = [], metavariables = [
215
- metavariable
216
- ], node = metavariableNode, string = localContext.nodeAsString(node);
217
- frame = new Frame(string, declarations, metavariables);
270
+ var frameNode = frameNodeQuery(containedAssertionNode);
271
+ if (frameNode !== null) {
272
+ var metavariableNode = metavariableNodeQuery(frameNode);
273
+ if (metavariableNode !== null) {
274
+ var metavariable = _metavariable.default.fromMetavariableNode(metavariableNode, localContext), declarations = [], metavariables = [
275
+ metavariable
276
+ ], node = frameNode, string = localContext.nodeAsString(node);
277
+ frame = new Frame(string, node, declarations, metavariables);
278
+ }
218
279
  }
219
280
  return frame;
220
281
  }
@@ -227,4 +288,4 @@ Object.assign(_shim.default, {
227
288
  });
228
289
  var _default = Frame;
229
290
 
230
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9mcmFtZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHNoaW0gZnJvbSBcIi4vc2hpbVwiO1xuaW1wb3J0IERlY2xhcmF0aW9uIGZyb20gXCIuL2RlY2xhcmF0aW9uXCI7XG5pbXBvcnQgTWV0YXZhcmlhYmxlIGZyb20gXCIuL21ldGF2YXJpYWJsZVwiO1xuXG5pbXBvcnQgeyBGUkFNRV9NRVRBX1RZUEVfTkFNRSB9IGZyb20gXCIuL21ldGFUeXBlTmFtZXNcIjtcbmltcG9ydCB7IG5vZGVRdWVyeSwgbm9kZXNRdWVyeSB9IGZyb20gXCIuL3V0aWxpdGllcy9xdWVyeVwiO1xuXG5jb25zdCBkZWNsYXJhdGlvbk5vZGVzUXVlcnkgPSBub2Rlc1F1ZXJ5KFwiL2ZyYW1lL2RlY2xhcmF0aW9uXCIpLFxuICAgICAgbWV0YXZhcmlhYmxlTm9kZXNRdWVyeSA9IG5vZGVzUXVlcnkoXCIvZnJhbWUvbWV0YXZhcmlhYmxlXCIpLFxuICAgICAgZnJhbWVNZXRhdmFyaWFibGVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvKi9mcmFtZS9tZXRhdmFyaWFibGUhXCIpO1xuXG5jbGFzcyBGcmFtZSB7XG4gIGNvbnN0cnVjdG9yKHN0cmluZywgZGVjbGFyYXRpb25zLCBtZXRhdmFyaWFibGVzKSB7XG4gICAgdGhpcy5zdHJpbmcgPSBzdHJpbmc7XG4gICAgdGhpcy5kZWNsYXJhdGlvbnMgPSBkZWNsYXJhdGlvbnM7XG4gICAgdGhpcy5tZXRhdmFyaWFibGVzID0gbWV0YXZhcmlhYmxlcztcbiAgfVxuXG4gIGdldFN0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5zdHJpbmc7XG4gIH1cblxuICBnZXREZWNsYXJhdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGVjbGFyYXRpb25zO1xuICB9XG5cbiAgZ2V0TWV0YXZhcmlhYmxlcygpIHtcbiAgICByZXR1cm4gdGhpcy5tZXRhdmFyaWFibGVzO1xuICB9XG5cbiAgZ2V0TWV0YXZhcmlhYmxlKCkge1xuICAgIGxldCBtZXRhdmFyaWFibGU7XG5cbiAgICBjb25zdCBtZXRhdmFyaWFibGVzTGVuZ3RoID0gdGhpcy5tZXRhdmFyaWFibGVzLmxlbmd0aDtcblxuICAgIGlmIChtZXRhdmFyaWFibGVzTGVuZ3RoID09PSAxKSB7XG4gICAgICBjb25zdCBmaXJzdE1ldGF2YXJpYWJsZSA9IGZpcnN0KHRoaXMubWV0YXZhcmlhYmxlcyk7XG5cbiAgICAgIG1ldGF2YXJpYWJsZSA9IGZpcnN0TWV0YXZhcmlhYmxlOyAvLy9cbiAgICB9XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlO1xuICB9XG5cbiAgLy8gZ2V0TWV0YXZhcmlhYmxlTm9kZSgpIHtcbiAgLy8gICBsZXQgbWV0YXZhcmlhYmxlTm9kZSA9IG51bGw7XG4gIC8vXG4gIC8vICAgY29uc3QgZGVjbGFyYXRpb25zTGVuZ3RoID0gdGhpcy5kZWNsYXJhdGlvbnMubGVuZ3RoO1xuICAvL1xuICAvLyAgIGlmIChkZWNsYXJhdGlvbnNMZW5ndGggPT09IDApIHtcbiAgLy8gICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGVzTGVuZ3RoID0gdGhpcy5tZXRhdmFyaWFibGVOb2Rlcy5sZW5ndGg7XG4gIC8vXG4gIC8vICAgICBpZiAobWV0YXZhcmlhYmxlTm9kZXNMZW5ndGggPT09IDEpIHtcbiAgLy8gICAgICAgY29uc3QgZmlyc3RNZXRhdmFyaWFibGVOb2RlID0gZmlyc3QodGhpcy5tZXRhdmFyaWFibGVOb2Rlcyk7XG4gIC8vXG4gIC8vICAgICAgIG1ldGF2YXJpYWJsZU5vZGUgPSBmaXJzdE1ldGF2YXJpYWJsZU5vZGU7IC8vL1xuICAvLyAgICAgfVxuICAvLyAgIH1cbiAgLy9cbiAgLy8gICByZXR1cm4gbWV0YXZhcmlhYmxlTm9kZTtcbiAgLy8gfVxuICAvL1xuICAvLyBtYXRjaE1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTmFtZSkge1xuICAvLyAgIGxldCBtZXRhdmFyaWFibGVOYW1lTWF0Y2hlcyA9IGZhbHNlO1xuICAvL1xuICAvLyAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSB0aGlzLmdldE1ldGF2YXJpYWJsZU5vZGUoKTtcbiAgLy9cbiAgLy8gICBpZiAobWV0YXZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAvLyAgICAgY29uc3QgbmFtZSA9IG1ldGF2YXJpYWJsZU5hbWU7ICAvLy9cbiAgLy9cbiAgLy8gICAgIG1ldGF2YXJpYWJsZU5hbWUgPSBtZXRhdmFyaWFibGVOYW1lRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7ICAvLy9cbiAgLy9cbiAgLy8gICAgIGNvbnN0IG5hbWVNYXRjaGVzTWV0YXZhcmlhYmxlTmFtZSA9IChuYW1lID09PSBtZXRhdmFyaWFibGVOYW1lKTtcbiAgLy9cbiAgLy8gICAgIG1ldGF2YXJpYWJsZU5hbWVNYXRjaGVzID0gbmFtZU1hdGNoZXNNZXRhdmFyaWFibGVOYW1lOyAgLy8vXG4gIC8vICAgfVxuICAvL1xuICAvLyAgIHJldHVybiBtZXRhdmFyaWFibGVOYW1lTWF0Y2hlcztcbiAgLy8gfVxuICAvL1xuICAvLyB1bmlmeVN1YnN0aXR1dGlvbihzdWJzdGl0dXRpb24pIHtcbiAgLy8gICBjb25zdCBzdWJzdGl0dXRpb25VbmlmaWVkID0gdGhpcy5kZWNsYXJhdGlvbnMuc29tZSgoZGVjbGFyYXRpb24pID0+IHtcbiAgLy8gICAgIGNvbnN0IHN1YnN0aXR1dGlvblVuaWZpZWRXaXRoRGVjbGFyYXRpb24gPSBkZWNsYXJhdGlvbi51bmlmeVN1YnN0aXR1dGlvbihzdWJzdGl0dXRpb24pO1xuICAvL1xuICAvLyAgICAgaWYgKHN1YnN0aXR1dGlvblVuaWZpZWRXaXRoRGVjbGFyYXRpb24pIHtcbiAgLy8gICAgICAgcmV0dXJuIHRydWU7XG4gIC8vICAgICB9XG4gIC8vICAgfSk7XG4gIC8vXG4gIC8vICAgcmV0dXJuIHN1YnN0aXR1dGlvblVuaWZpZWQ7XG4gIC8vIH1cbiAgLy9cbiAgLy8gdW5pZnlNZXRhTGVtbWFPck1ldGF0aGVvcmVtKG1ldGFMZW1tYU1ldGF0aGVvcmVtKSB7XG4gIC8vICAgY29uc3Qgc3Vic3RpdHV0aW9ucyA9IG1ldGFMZW1tYU1ldGF0aGVvcmVtLmdldFN1YnN0aXR1dGlvbnMoKSxcbiAgLy8gICAgICAgICBzdWJzdGl0dXRpb25zVW5pZmllZCA9IHN1YnN0aXR1dGlvbnMuZXZlcnlTdWJzdGl0dXRpb24oKHN1YnN0aXR1dGlvbikgPT4ge1xuICAvLyAgICAgICAgICAgY29uc3Qgc3Vic3RpdHV0aW9uVW5pZmllZCA9IHRoaXMudW5pZnlTdWJzdGl0dXRpb24oc3Vic3RpdHV0aW9uKTtcbiAgLy9cbiAgLy8gICAgICAgICAgIGlmIChzdWJzdGl0dXRpb25VbmlmaWVkKSB7XG4gIC8vICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAvLyAgICAgICAgICAgfVxuICAvLyAgICAgICAgIH0pLFxuICAvLyAgICAgICAgIG1ldGFMZW1tYU9yTWV0YVRoZW9yZW1VbmlmaWVkID0gc3Vic3RpdHV0aW9uc1VuaWZpZWQ7IC8vL1xuICAvL1xuICAvLyAgIHJldHVybiBtZXRhTGVtbWFPck1ldGFUaGVvcmVtVW5pZmllZDtcbiAgLy8gfVxuXG4gIHZlcmlmeShsb2NhbENvbnRleHQpIHtcbiAgICBsZXQgdmVyaWZpZWQ7XG5cbiAgICBjb25zdCBmcmFtZVN0cmluZyA9IHRoaXMuc3RyaW5nOyAgLy8vXG5cbiAgICBsb2NhbENvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7ZnJhbWVTdHJpbmd9JyBmcmFtZS4uLmApO1xuXG4gICAgY29uc3QgZGVjbGFyYXRpb25zVmVyaWZpZWQgPSB0aGlzLmRlY2xhcmF0aW9ucy5ldmVyeSgoZGVjbGFyYXRpb24pID0+IHtcbiAgICAgIGNvbnN0IGRlY2xhcmF0aW9uVmVyaWZpZWQgPSBkZWNsYXJhdGlvbi52ZXJpZnkobG9jYWxDb250ZXh0KTtcblxuICAgICAgcmV0dXJuIGRlY2xhcmF0aW9uVmVyaWZpZWQ7XG4gICAgfSk7XG5cbiAgICBpZiAoZGVjbGFyYXRpb25zVmVyaWZpZWQpIHtcbiAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZXNWZXJpZmllZCA9IHRoaXMubWV0YXZhcmlhYmxlcy5ldmVyeSgobWV0YXZhcmlhYmxlKSA9PiB7XG4gICAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZVZlcmlmaWVkID0gbWV0YXZhcmlhYmxlLnZlcmlmeShsb2NhbENvbnRleHQpO1xuXG4gICAgICAgIHJldHVybiBtZXRhdmFyaWFibGVWZXJpZmllZDtcbiAgICAgIH0pO1xuXG4gICAgICB2ZXJpZmllZCA9IG1ldGF2YXJpYWJsZXNWZXJpZmllZDsgLy8vXG4gICAgfVxuXG4gICAgaWYgKHZlcmlmaWVkKSB7XG4gICAgICBsb2NhbENvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtmcmFtZVN0cmluZ30nIGZyYW1lLmApO1xuICAgIH1cblxuICAgIHJldHVybiB2ZXJpZmllZDtcbiAgfVxuXG4gIHZlcmlmeUdpdmVuTWV0YVR5cGUobWV0YVR5cGUsIGxvY2FsQ29udGV4dCkge1xuICAgIGxldCB2ZXJpZmllZEdpdmVuTWV0YVR5cGUgPSBmYWxzZTtcblxuICAgIGNvbnN0IGZyYW1lU3RyaW5nID0gdGhpcy5zdHJpbmcsICAvLy9cbiAgICAgICAgICBtZXRhVHlwZVN0cmluZyA9IG1ldGFUeXBlLmdldFN0cmluZygpO1xuXG4gICAgbG9jYWxDb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke2ZyYW1lU3RyaW5nfScgZnJhbWUgZ2l2ZW4gdGhlICcke21ldGFUeXBlU3RyaW5nfScgbWV0YS10eXBlLi4uYCk7XG5cbiAgICBjb25zdCBtZXRhVHlwZU5hbWUgPSBtZXRhVHlwZS5nZXROYW1lKCk7XG5cbiAgICBpZiAobWV0YVR5cGVOYW1lID09PSBGUkFNRV9NRVRBX1RZUEVfTkFNRSkge1xuICAgICAgY29uc3QgdmVyaWZpZWQgPSB0aGlzLnZlcmlmeShsb2NhbENvbnRleHQpXG5cbiAgICAgIHZlcmlmaWVkR2l2ZW5NZXRhVHlwZSA9IHZlcmlmaWVkOyAvLy9cbiAgICB9XG5cbiAgICBpZiAodmVyaWZpZWRHaXZlbk1ldGFUeXBlKSB7XG4gICAgICBsb2NhbENvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtmcmFtZVN0cmluZ30nIGZyYW1lIGdpdmVuIHRoZSAnJHttZXRhVHlwZVN0cmluZ30nIG1ldGEtdHlwZS5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmVyaWZpZWRHaXZlbk1ldGFUeXBlO1xuICB9XG5cbiAgc3RhdGljIGZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBsb2NhbENvbnRleHQpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbk5vZGVzID0gZGVjbGFyYXRpb25Ob2Rlc1F1ZXJ5KGZyYW1lTm9kZSksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlTm9kZXMgPSBtZXRhdmFyaWFibGVOb2Rlc1F1ZXJ5KGZyYW1lTm9kZSksXG4gICAgICAgICAgZGVjbGFyYXRpb25zID0gZGVjbGFyYXRpb25Ob2Rlcy5tYXAoKGRlY2xhcmF0aW9uTm9kZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGVjbGFyYXRpb24gPSBEZWNsYXJhdGlvbi5mcm9tRGVjbGFyYXRpb25Ob2RlKGRlY2xhcmF0aW9uTm9kZSwgbG9jYWxDb250ZXh0KTtcblxuICAgICAgICAgICAgcmV0dXJuIGRlY2xhcmF0aW9uO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZXMgPSBtZXRhdmFyaWFibGVOb2Rlcy5tYXAoKG1ldGF2YXJpYWJsZU5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZSA9IE1ldGF2YXJpYWJsZS5mcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBsb2NhbENvbnRleHQpO1xuXG4gICAgICAgICAgICByZXR1cm4gbWV0YXZhcmlhYmxlO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIG5vZGUgPSBmcmFtZU5vZGUsIC8vL1xuICAgICAgICAgIHN0cmluZyA9IGxvY2FsQ29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgICAgZnJhbWUgPSBuZXcgRnJhbWUoc3RyaW5nLCBkZWNsYXJhdGlvbnMsIG1ldGF2YXJpYWJsZXMpO1xuXG4gICAgcmV0dXJuIGZyYW1lO1xuICB9XG5cbiAgc3RhdGljIGZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgbG9jYWxDb250ZXh0KSB7XG4gICAgbGV0IGZyYW1lID0gbnVsbDtcblxuICAgIGNvbnN0IGZyYW1lTWV0YXZhcmlhYmxlTm9kZSA9IGZyYW1lTWV0YXZhcmlhYmxlTm9kZVF1ZXJ5KGRlZmluZWRBc3NlcnRpb25Ob2RlKTtcblxuICAgIGlmIChmcmFtZU1ldGF2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBmcmFtZU1ldGF2YXJpYWJsZU5vZGUsIC8vL1xuICAgICAgICAgICAgbWV0YXZhcmlhYmxlID0gTWV0YXZhcmlhYmxlLmZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGxvY2FsQ29udGV4dCksXG4gICAgICAgICAgICBkZWNsYXJhdGlvbnMgPSBbXSxcbiAgICAgICAgICAgIG1ldGF2YXJpYWJsZXMgPSBbXG4gICAgICAgICAgICAgIG1ldGF2YXJpYWJsZVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIG5vZGUgPSBtZXRhdmFyaWFibGVOb2RlLCAgLy8vXG4gICAgICAgICAgICBzdHJpbmcgPSBsb2NhbENvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpO1xuXG4gICAgICBmcmFtZSA9IG5ldyBGcmFtZShzdHJpbmcsIGRlY2xhcmF0aW9ucywgbWV0YXZhcmlhYmxlcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZyYW1lO1xuICB9XG5cbiAgc3RhdGljIGZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGxvY2FsQ29udGV4dCkge1xuICAgIGxldCBmcmFtZSA9IG51bGw7XG5cbiAgICBjb25zdCBmcmFtZU1ldGF2YXJpYWJsZU5vZGUgPSBmcmFtZU1ldGF2YXJpYWJsZU5vZGVRdWVyeShjb250YWluZWRBc3NlcnRpb25Ob2RlKTtcblxuICAgIGlmIChmcmFtZU1ldGF2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBmcmFtZU1ldGF2YXJpYWJsZU5vZGUsIC8vL1xuICAgICAgICAgICAgbWV0YXZhcmlhYmxlID0gTWV0YXZhcmlhYmxlLmZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGxvY2FsQ29udGV4dCksXG4gICAgICAgICAgICBkZWNsYXJhdGlvbnMgPSBbXSxcbiAgICAgICAgICAgIG1ldGF2YXJpYWJsZXMgPSBbXG4gICAgICAgICAgICAgIG1ldGF2YXJpYWJsZVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIG5vZGUgPSBtZXRhdmFyaWFibGVOb2RlLCAgLy8vXG4gICAgICAgICAgICBzdHJpbmcgPSBsb2NhbENvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpO1xuXG4gICAgICBmcmFtZSA9IG5ldyBGcmFtZShzdHJpbmcsIGRlY2xhcmF0aW9ucywgbWV0YXZhcmlhYmxlcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZyYW1lO1xuICB9XG5cbiAgLy8gc3RhdGljIGZyb21EZWNsYXJhdGlvbnMoZGVjbGFyYXRpb25zKSB7XG4gIC8vICAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZXMgPSBbXSxcbiAgLy8gICAgICAgICBmcmFtZSA9IG5ldyBGcmFtZShkZWNsYXJhdGlvbnMsIG1ldGF2YXJpYWJsZU5vZGVzKTtcbiAgLy9cbiAgLy8gICByZXR1cm4gZnJhbWU7XG4gIC8vIH1cbiAgLy9cbiAgLy8gc3RhdGljIGZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgLy8gICBjb25zdCBkZWNsYXJhdGlvbnMgPSBbXSxcbiAgLy8gICAgICAgICBtZXRhdmFyaWFibGVOb2RlcyA9IFtcbiAgLy8gICAgICAgICAgIG1ldGF2YXJpYWJsZU5vZGVcbiAgLy8gICAgICAgICBdLFxuICAvLyAgICAgICAgIGZyYW1lID0gbmV3IEZyYW1lKGRlY2xhcmF0aW9ucywgbWV0YXZhcmlhYmxlTm9kZXMpO1xuICAvL1xuICAvLyAgIHJldHVybiBmcmFtZTtcbiAgLy8gfVxuICAvL1xuICAvLyBzdGF0aWMgZnJvbURlY2xhcmF0aW9uc0FuZE1ldGF2YXJpYWJsZU5vZGVzKGRlY2xhcmF0aW9ucywgbWV0YXZhcmlhYmxlTm9kZXMpIHtcbiAgLy8gICBjb25zdCBmcmFtZSA9IG5ldyBGcmFtZShkZWNsYXJhdGlvbnMsIG1ldGF2YXJpYWJsZU5vZGVzKTtcbiAgLy9cbiAgLy8gICByZXR1cm4gZnJhbWU7XG4gIC8vIH1cbn1cblxuT2JqZWN0LmFzc2lnbihzaGltLCB7XG4gIEZyYW1lXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgRnJhbWU7XG4iXSwibmFtZXMiOlsiZGVjbGFyYXRpb25Ob2Rlc1F1ZXJ5Iiwibm9kZXNRdWVyeSIsIm1ldGF2YXJpYWJsZU5vZGVzUXVlcnkiLCJmcmFtZU1ldGF2YXJpYWJsZU5vZGVRdWVyeSIsIm5vZGVRdWVyeSIsIkZyYW1lIiwic3RyaW5nIiwiZGVjbGFyYXRpb25zIiwibWV0YXZhcmlhYmxlcyIsImdldFN0cmluZyIsImdldERlY2xhcmF0aW9ucyIsImdldE1ldGF2YXJpYWJsZXMiLCJnZXRNZXRhdmFyaWFibGUiLCJtZXRhdmFyaWFibGUiLCJtZXRhdmFyaWFibGVzTGVuZ3RoIiwibGVuZ3RoIiwiZmlyc3RNZXRhdmFyaWFibGUiLCJmaXJzdCIsInZlcmlmeSIsImxvY2FsQ29udGV4dCIsInZlcmlmaWVkIiwiZnJhbWVTdHJpbmciLCJ0cmFjZSIsImRlY2xhcmF0aW9uc1ZlcmlmaWVkIiwiZXZlcnkiLCJkZWNsYXJhdGlvbiIsImRlY2xhcmF0aW9uVmVyaWZpZWQiLCJtZXRhdmFyaWFibGVzVmVyaWZpZWQiLCJtZXRhdmFyaWFibGVWZXJpZmllZCIsImRlYnVnIiwidmVyaWZ5R2l2ZW5NZXRhVHlwZSIsIm1ldGFUeXBlIiwidmVyaWZpZWRHaXZlbk1ldGFUeXBlIiwibWV0YVR5cGVTdHJpbmciLCJtZXRhVHlwZU5hbWUiLCJnZXROYW1lIiwiRlJBTUVfTUVUQV9UWVBFX05BTUUiLCJmcm9tRnJhbWVOb2RlIiwiZnJhbWVOb2RlIiwiZGVjbGFyYXRpb25Ob2RlcyIsIm1ldGF2YXJpYWJsZU5vZGVzIiwibWFwIiwiZGVjbGFyYXRpb25Ob2RlIiwiRGVjbGFyYXRpb24iLCJmcm9tRGVjbGFyYXRpb25Ob2RlIiwibWV0YXZhcmlhYmxlTm9kZSIsIk1ldGF2YXJpYWJsZSIsImZyb21NZXRhdmFyaWFibGVOb2RlIiwibm9kZSIsIm5vZGVBc1N0cmluZyIsImZyYW1lIiwiZnJvbURlZmluZWRBc3NlcnRpb25Ob2RlIiwiZGVmaW5lZEFzc2VydGlvbk5vZGUiLCJmcmFtZU1ldGF2YXJpYWJsZU5vZGUiLCJmcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsImNvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJPYmplY3QiLCJhc3NpZ24iLCJzaGltIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkEyUEE7OztlQUFBOzs7MkRBelBpQjtrRUFDTzttRUFDQzs2QkFFWTtxQkFDQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUV0QyxJQUFNQSx3QkFBd0JDLElBQUFBLGlCQUFVLEVBQUMsdUJBQ25DQyx5QkFBeUJELElBQUFBLGlCQUFVLEVBQUMsd0JBQ3BDRSw2QkFBNkJDLElBQUFBLGdCQUFTLEVBQUM7QUFFN0MsSUFBQSxBQUFNQyxzQkFBTjthQUFNQSxNQUNRQyxNQUFNLEVBQUVDLFlBQVksRUFBRUMsYUFBYTtnQ0FEM0NIO1FBRUYsSUFBSSxDQUFDQyxNQUFNLEdBQUdBO1FBQ2QsSUFBSSxDQUFDQyxZQUFZLEdBQUdBO1FBQ3BCLElBQUksQ0FBQ0MsYUFBYSxHQUFHQTs7a0JBSm5CSDs7WUFPSkksS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLE9BQU8sSUFBSSxDQUFDSCxNQUFNO1lBQ3BCOzs7WUFFQUksS0FB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
291
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9mcmFtZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBzaGltIGZyb20gXCIuL3NoaW1cIjtcbmltcG9ydCBEZWNsYXJhdGlvbiBmcm9tIFwiLi9kZWNsYXJhdGlvblwiO1xuaW1wb3J0IE1ldGF2YXJpYWJsZSBmcm9tIFwiLi9tZXRhdmFyaWFibGVcIjtcblxuaW1wb3J0IHsgRlJBTUVfTUVUQV9UWVBFX05BTUUgfSBmcm9tIFwiLi9tZXRhVHlwZU5hbWVzXCI7XG5pbXBvcnQgeyBub2RlUXVlcnksIG5vZGVzUXVlcnkgfSBmcm9tIFwiLi91dGlsaXRpZXMvcXVlcnlcIjtcblxuY29uc3QgZnJhbWVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvKi9mcmFtZVwiKSxcbiAgICAgIGRlY2xhcmF0aW9uTm9kZXNRdWVyeSA9IG5vZGVzUXVlcnkoXCIvZnJhbWUvZGVjbGFyYXRpb25cIiksXG4gICAgICBtZXRhdmFyaWFibGVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvZnJhbWUvbWV0YXZhcmlhYmxlIVwiKSxcbiAgICAgIG1ldGF2YXJpYWJsZU5vZGVzUXVlcnkgPSBub2Rlc1F1ZXJ5KFwiL2ZyYW1lL21ldGF2YXJpYWJsZVwiKTtcblxuY29uc3QgeyBmaXJzdCB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmNsYXNzIEZyYW1lIHtcbiAgY29uc3RydWN0b3Ioc3RyaW5nLCBub2RlLCBkZWNsYXJhdGlvbnMsIG1ldGF2YXJpYWJsZXMpIHtcbiAgICB0aGlzLnN0cmluZyA9IHN0cmluZztcbiAgICB0aGlzLm5vZGUgPSBub2RlO1xuICAgIHRoaXMuZGVjbGFyYXRpb25zID0gZGVjbGFyYXRpb25zO1xuICAgIHRoaXMubWV0YXZhcmlhYmxlcyA9IG1ldGF2YXJpYWJsZXM7XG4gIH1cblxuICBnZXRTdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RyaW5nO1xuICB9XG5cbiAgZ2V0Tm9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5ub2RlO1xuICB9XG5cbiAgZ2V0RGVjbGFyYXRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmRlY2xhcmF0aW9ucztcbiAgfVxuXG4gIGdldE1ldGF2YXJpYWJsZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMubWV0YXZhcmlhYmxlcztcbiAgfVxuXG4gIGdldE1ldGF2YXJpYWJsZSgpIHtcbiAgICBsZXQgbWV0YXZhcmlhYmxlO1xuXG4gICAgY29uc3QgbWV0YXZhcmlhYmxlc0xlbmd0aCA9IHRoaXMubWV0YXZhcmlhYmxlcy5sZW5ndGg7XG5cbiAgICBpZiAobWV0YXZhcmlhYmxlc0xlbmd0aCA9PT0gMSkge1xuICAgICAgY29uc3QgZmlyc3RNZXRhdmFyaWFibGUgPSBmaXJzdCh0aGlzLm1ldGF2YXJpYWJsZXMpO1xuXG4gICAgICBtZXRhdmFyaWFibGUgPSBmaXJzdE1ldGF2YXJpYWJsZTsgLy8vXG4gICAgfVxuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbiAgfVxuXG4gIGdldE1ldGF2YXJpYWJsZU5vZGUoKSB7XG4gICAgbGV0IG1ldGF2YXJpYWJsZU5vZGUgPSBudWxsO1xuXG4gICAgY29uc3QgZGVjbGFyYXRpb25zTGVuZ3RoID0gdGhpcy5kZWNsYXJhdGlvbnMubGVuZ3RoO1xuXG4gICAgaWYgKGRlY2xhcmF0aW9uc0xlbmd0aCA9PT0gMCkge1xuICAgICAgY29uc3QgbWV0YXZhcmlhYmxlc0xlbmd0aCA9IHRoaXMubWV0YXZhcmlhYmxlcy5sZW5ndGg7XG5cbiAgICAgIGlmIChtZXRhdmFyaWFibGVzTGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0TWV0YXZhcmlhYmxlID0gZmlyc3QodGhpcy5tZXRhdmFyaWFibGVzKSxcbiAgICAgICAgICAgICAgbWV0YXZhcmlhYmxlID0gZmlyc3RNZXRhdmFyaWFibGU7IC8vL1xuXG4gICAgICAgIG1ldGF2YXJpYWJsZU5vZGUgPSBtZXRhdmFyaWFibGUuZ2V0Tm9kZSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtZXRhdmFyaWFibGVOb2RlO1xuICB9XG5cbiAgLy8gbWF0Y2hNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpIHtcbiAgLy8gICBsZXQgbWV0YXZhcmlhYmxlTmFtZU1hdGNoZXMgPSBmYWxzZTtcbiAgLy9cbiAgLy8gICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gdGhpcy5nZXRNZXRhdmFyaWFibGVOb2RlKCk7XG4gIC8vXG4gIC8vICAgaWYgKG1ldGF2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgLy8gICAgIGNvbnN0IG5hbWUgPSBtZXRhdmFyaWFibGVOYW1lOyAgLy8vXG4gIC8vXG4gIC8vICAgICBtZXRhdmFyaWFibGVOYW1lID0gbWV0YXZhcmlhYmxlTmFtZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpOyAgLy8vXG4gIC8vXG4gIC8vICAgICBjb25zdCBuYW1lTWF0Y2hlc01ldGF2YXJpYWJsZU5hbWUgPSAobmFtZSA9PT0gbWV0YXZhcmlhYmxlTmFtZSk7XG4gIC8vXG4gIC8vICAgICBtZXRhdmFyaWFibGVOYW1lTWF0Y2hlcyA9IG5hbWVNYXRjaGVzTWV0YXZhcmlhYmxlTmFtZTsgIC8vL1xuICAvLyAgIH1cbiAgLy9cbiAgLy8gICByZXR1cm4gbWV0YXZhcmlhYmxlTmFtZU1hdGNoZXM7XG4gIC8vIH1cbiAgLy9cbiAgLy8gdW5pZnlTdWJzdGl0dXRpb24oc3Vic3RpdHV0aW9uKSB7XG4gIC8vICAgY29uc3Qgc3Vic3RpdHV0aW9uVW5pZmllZCA9IHRoaXMuZGVjbGFyYXRpb25zLnNvbWUoKGRlY2xhcmF0aW9uKSA9PiB7XG4gIC8vICAgICBjb25zdCBzdWJzdGl0dXRpb25VbmlmaWVkV2l0aERlY2xhcmF0aW9uID0gZGVjbGFyYXRpb24udW5pZnlTdWJzdGl0dXRpb24oc3Vic3RpdHV0aW9uKTtcbiAgLy9cbiAgLy8gICAgIGlmIChzdWJzdGl0dXRpb25VbmlmaWVkV2l0aERlY2xhcmF0aW9uKSB7XG4gIC8vICAgICAgIHJldHVybiB0cnVlO1xuICAvLyAgICAgfVxuICAvLyAgIH0pO1xuICAvL1xuICAvLyAgIHJldHVybiBzdWJzdGl0dXRpb25VbmlmaWVkO1xuICAvLyB9XG4gIC8vXG4gIC8vIHVuaWZ5TWV0YUxlbW1hT3JNZXRhdGhlb3JlbShtZXRhTGVtbWFNZXRhdGhlb3JlbSkge1xuICAvLyAgIGNvbnN0IHN1YnN0aXR1dGlvbnMgPSBtZXRhTGVtbWFNZXRhdGhlb3JlbS5nZXRTdWJzdGl0dXRpb25zKCksXG4gIC8vICAgICAgICAgc3Vic3RpdHV0aW9uc1VuaWZpZWQgPSBzdWJzdGl0dXRpb25zLmV2ZXJ5U3Vic3RpdHV0aW9uKChzdWJzdGl0dXRpb24pID0+IHtcbiAgLy8gICAgICAgICAgIGNvbnN0IHN1YnN0aXR1dGlvblVuaWZpZWQgPSB0aGlzLnVuaWZ5U3Vic3RpdHV0aW9uKHN1YnN0aXR1dGlvbik7XG4gIC8vXG4gIC8vICAgICAgICAgICBpZiAoc3Vic3RpdHV0aW9uVW5pZmllZCkge1xuICAvLyAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgLy8gICAgICAgICAgIH1cbiAgLy8gICAgICAgICB9KSxcbiAgLy8gICAgICAgICBtZXRhTGVtbWFPck1ldGFUaGVvcmVtVW5pZmllZCA9IHN1YnN0aXR1dGlvbnNVbmlmaWVkOyAvLy9cbiAgLy9cbiAgLy8gICByZXR1cm4gbWV0YUxlbW1hT3JNZXRhVGhlb3JlbVVuaWZpZWQ7XG4gIC8vIH1cblxuICB2ZXJpZnkoYXNzaWdubWVudHMsIHN0YXRlZCwgbG9jYWxDb250ZXh0KSB7XG4gICAgbGV0IHZlcmlmaWVkO1xuXG4gICAgY29uc3QgZnJhbWVTdHJpbmcgPSB0aGlzLnN0cmluZzsgIC8vL1xuXG4gICAgbG9jYWxDb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke2ZyYW1lU3RyaW5nfScgZnJhbWUuLi5gKTtcblxuICAgIGxldCB2ZXJpZmllZFdoZW5TdGF0ZWQgPSBmYWxzZSxcbiAgICAgICAgdmVyaWZpZWRXaGVuRGVyaXZlZCA9IGZhbHNlO1xuXG4gICAgaWYgKHN0YXRlZCkge1xuICAgICAgdmVyaWZpZWRXaGVuU3RhdGVkID0gdGhpcy52ZXJpZnlXaGVuU3RhdGVkKGFzc2lnbm1lbnRzLCBsb2NhbENvbnRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2ZXJpZmllZFdoZW5EZXJpdmVkID0gdGhpcy52ZXJpZnlXaGVuRGVyaXZlZChhc3NpZ25tZW50cywgbG9jYWxDb250ZXh0KTtcbiAgICB9XG5cbiAgICBpZiAodmVyaWZpZWRXaGVuU3RhdGVkIHx8IHZlcmlmaWVkV2hlbkRlcml2ZWQpIHtcbiAgICAgIHZlcmlmaWVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodmVyaWZpZWQpIHtcbiAgICAgIGxvY2FsQ29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke2ZyYW1lU3RyaW5nfScgZnJhbWUuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZlcmlmaWVkO1xuICB9XG5cbiAgdmVyaWZ5V2hlblN0YXRlZChhc3NpZ25tZW50cywgbG9jYWxDb250ZXh0KSB7XG4gICAgbGV0IHZlcmlmaWVkV2hlblN0YXRlZCA9IGZhbHNlO1xuXG4gICAgY29uc3QgZnJhbWVTdHJpbmcgPSB0aGlzLnN0cmluZzsgIC8vL1xuXG4gICAgbG9jYWxDb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke2ZyYW1lU3RyaW5nfScgZnJhbWUgd2hlbiBzdGF0ZWQuLi5gKTtcblxuICAgIGNvbnN0IGRlY2xhcmF0aW9uc0xlbmd0aCA9IHRoaXMuZGVjbGFyYXRpb25zLmxlbmd0aDtcblxuICAgIGlmIChkZWNsYXJhdGlvbnNMZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZXNMZW5ndGggPSB0aGlzLm1ldGF2YXJpYWJsZXMubGVuZ3RoO1xuXG4gICAgICBpZiAobWV0YXZhcmlhYmxlc0xlbmd0aCA9PT0gMSkge1xuICAgICAgICBjb25zdCBmaXJzdE1ldGF2YXJpYWJsZSA9IGZpcnN0KHRoaXMubWV0YXZhcmlhYmxlcyksXG4gICAgICAgICAgICAgIG1ldGF2YXJpYWJsZSA9IGZpcnN0TWV0YXZhcmlhYmxlLCAvLy9cbiAgICAgICAgICAgICAgbWV0YXZhcmlhYmxlVmVyaWZpZWQgPSBtZXRhdmFyaWFibGUudmVyaWZ5KGxvY2FsQ29udGV4dCk7XG5cbiAgICAgICAgdmVyaWZpZWRXaGVuU3RhdGVkID0gbWV0YXZhcmlhYmxlVmVyaWZpZWQ7ICAvLy9cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvY2FsQ29udGV4dC50cmFjZShgVGhlICcke2ZyYW1lU3RyaW5nfScgc3RhdGVkIGZyYW1lIGNhbm5vdCBoYXZlIG1vcmUgdGhhbiBvbmUgbWV0YXZhcmlhYmxlLmApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBsb2NhbENvbnRleHQudHJhY2UoYFRoZSAnJHtmcmFtZVN0cmluZ30nIHN0YXRlZCBmcmFtZSBjYW5ub3QgaGF2ZSBkZWNsYXJhdGlvbnMuYCk7XG4gICAgfVxuXG5cbiAgICBpZiAodmVyaWZpZWRXaGVuU3RhdGVkKSB7XG4gICAgICBsb2NhbENvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtmcmFtZVN0cmluZ30nIGZyYW1lIHdoZW4gc3RhdGVkLmApO1xuICAgIH1cblxuICAgIHJldHVybiB2ZXJpZmllZFdoZW5TdGF0ZWQ7XG4gIH1cblxuICB2ZXJpZnlXaGVuRGVyaXZlZChhc3NpZ25tZW50cywgbG9jYWxDb250ZXh0KSB7XG4gICAgbGV0IHZlcmlmaWVkV2hlbkRlcml2ZWQ7XG5cbiAgICBjb25zdCBmcmFtZVN0cmluZyA9IHRoaXMuc3RyaW5nOyAgLy8vXG5cbiAgICBsb2NhbENvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7ZnJhbWVTdHJpbmd9JyBmcmFtZSB3aGVuIGRlcml2ZWQuLi5gKTtcblxuICAgIGNvbnN0IGRlY2xhcmF0aW9uc1ZlcmlmaWVkID0gdGhpcy5kZWNsYXJhdGlvbnMuZXZlcnkoKGRlY2xhcmF0aW9uKSA9PiB7XG4gICAgICBjb25zdCBkZWNsYXJhdGlvblZlcmlmaWVkID0gZGVjbGFyYXRpb24udmVyaWZ5KGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGxvY2FsQ29udGV4dCk7XG5cbiAgICAgIHJldHVybiBkZWNsYXJhdGlvblZlcmlmaWVkO1xuICAgIH0pO1xuXG4gICAgaWYgKGRlY2xhcmF0aW9uc1ZlcmlmaWVkKSB7XG4gICAgICBjb25zdCBtZXRhdmFyaWFibGVzVmVyaWZpZWQgPSB0aGlzLm1ldGF2YXJpYWJsZXMuZXZlcnkoKG1ldGF2YXJpYWJsZSkgPT4ge1xuICAgICAgICBjb25zdCBtZXRhdmFyaWFibGVWZXJpZmllZCA9IG1ldGF2YXJpYWJsZS52ZXJpZnkobG9jYWxDb250ZXh0KTtcblxuICAgICAgICByZXR1cm4gbWV0YXZhcmlhYmxlVmVyaWZpZWQ7XG4gICAgICB9KTtcblxuICAgICAgdmVyaWZpZWRXaGVuRGVyaXZlZCA9IG1ldGF2YXJpYWJsZXNWZXJpZmllZDsgLy8vXG4gICAgfVxuXG4gICAgaWYgKHZlcmlmaWVkV2hlbkRlcml2ZWQpIHtcbiAgICAgIGxvY2FsQ29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke2ZyYW1lU3RyaW5nfScgZnJhbWUgd2hlbiBkZXJpdmVkLmApO1xuICAgIH1cblxuICAgIHJldHVybiB2ZXJpZmllZFdoZW5EZXJpdmVkO1xuICB9XG5cbiAgdmVyaWZ5R2l2ZW5NZXRhVHlwZShtZXRhVHlwZSwgYXNzaWdubWVudHMsIHN0YXRlZCwgbG9jYWxDb250ZXh0KSB7XG4gICAgbGV0IHZlcmlmaWVkR2l2ZW5NZXRhVHlwZSA9IGZhbHNlO1xuXG4gICAgY29uc3QgZnJhbWVTdHJpbmcgPSB0aGlzLnN0cmluZywgIC8vL1xuICAgICAgICAgIG1ldGFUeXBlU3RyaW5nID0gbWV0YVR5cGUuZ2V0U3RyaW5nKCk7XG5cbiAgICBsb2NhbENvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7ZnJhbWVTdHJpbmd9JyBmcmFtZSBnaXZlbiB0aGUgJyR7bWV0YVR5cGVTdHJpbmd9JyBtZXRhLXR5cGUuLi5gKTtcblxuICAgIGNvbnN0IG1ldGFUeXBlTmFtZSA9IG1ldGFUeXBlLmdldE5hbWUoKTtcblxuICAgIGlmIChtZXRhVHlwZU5hbWUgPT09IEZSQU1FX01FVEFfVFlQRV9OQU1FKSB7XG4gICAgICBjb25zdCB2ZXJpZmllZCA9IHRoaXMudmVyaWZ5KGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGxvY2FsQ29udGV4dClcblxuICAgICAgdmVyaWZpZWRHaXZlbk1ldGFUeXBlID0gdmVyaWZpZWQ7IC8vL1xuICAgIH1cblxuICAgIGlmICh2ZXJpZmllZEdpdmVuTWV0YVR5cGUpIHtcbiAgICAgIGxvY2FsQ29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke2ZyYW1lU3RyaW5nfScgZnJhbWUgZ2l2ZW4gdGhlICcke21ldGFUeXBlU3RyaW5nfScgbWV0YS10eXBlLmApO1xuICAgIH1cblxuICAgIHJldHVybiB2ZXJpZmllZEdpdmVuTWV0YVR5cGU7XG4gIH1cblxuICBzdGF0aWMgZnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGxvY2FsQ29udGV4dCkge1xuICAgIGxldCBmcmFtZSA9IG51bGw7XG5cbiAgICBpZiAoZnJhbWVOb2RlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBkZWNsYXJhdGlvbk5vZGVzID0gZGVjbGFyYXRpb25Ob2Rlc1F1ZXJ5KGZyYW1lTm9kZSksXG4gICAgICAgICAgICBtZXRhdmFyaWFibGVOb2RlcyA9IG1ldGF2YXJpYWJsZU5vZGVzUXVlcnkoZnJhbWVOb2RlKSxcbiAgICAgICAgICAgIGRlY2xhcmF0aW9ucyA9IGRlY2xhcmF0aW9uTm9kZXMubWFwKChkZWNsYXJhdGlvbk5vZGUpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZGVjbGFyYXRpb24gPSBEZWNsYXJhdGlvbi5mcm9tRGVjbGFyYXRpb25Ob2RlKGRlY2xhcmF0aW9uTm9kZSwgbG9jYWxDb250ZXh0KTtcblxuICAgICAgICAgICAgICByZXR1cm4gZGVjbGFyYXRpb247XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG1ldGF2YXJpYWJsZXMgPSBtZXRhdmFyaWFibGVOb2Rlcy5tYXAoKG1ldGF2YXJpYWJsZU5vZGUpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgbWV0YXZhcmlhYmxlID0gTWV0YXZhcmlhYmxlLmZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGxvY2FsQ29udGV4dCk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbm9kZSA9IGZyYW1lTm9kZSwgLy8vXG4gICAgICAgICAgICBzdHJpbmcgPSBsb2NhbENvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpO1xuXG4gICAgICBmcmFtZSA9IG5ldyBGcmFtZShzdHJpbmcsIG5vZGUsIGRlY2xhcmF0aW9ucywgbWV0YXZhcmlhYmxlcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZyYW1lO1xuICB9XG5cbiAgc3RhdGljIGZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgbG9jYWxDb250ZXh0KSB7XG4gICAgbGV0IGZyYW1lID0gbnVsbDtcblxuICAgIGNvbnN0IGZyYW1lTm9kZSA9IGZyYW1lTm9kZVF1ZXJ5KGRlZmluZWRBc3NlcnRpb25Ob2RlKTtcblxuICAgIGlmIChmcmFtZU5vZGUgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBtZXRhdmFyaWFibGVOb2RlUXVlcnkoZnJhbWVOb2RlKTtcblxuICAgICAgaWYgKG1ldGF2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgbWV0YXZhcmlhYmxlID0gTWV0YXZhcmlhYmxlLmZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGxvY2FsQ29udGV4dCksXG4gICAgICAgICAgICAgIGRlY2xhcmF0aW9ucyA9IFtdLFxuICAgICAgICAgICAgICBtZXRhdmFyaWFibGVzID0gW1xuICAgICAgICAgICAgICAgIG1ldGF2YXJpYWJsZVxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICBub2RlID0gZnJhbWVOb2RlLCAgLy8vXG4gICAgICAgICAgICAgIHN0cmluZyA9IGxvY2FsQ29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSk7XG5cbiAgICAgICAgZnJhbWUgPSBuZXcgRnJhbWUoc3RyaW5nLCBub2RlLCBkZWNsYXJhdGlvbnMsIG1ldGF2YXJpYWJsZXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmcmFtZTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBsb2NhbENvbnRleHQpIHtcbiAgICBsZXQgZnJhbWUgPSBudWxsO1xuXG4gICAgY29uc3QgZnJhbWVOb2RlID0gZnJhbWVOb2RlUXVlcnkoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSk7XG5cbiAgICBpZiAoZnJhbWVOb2RlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gbWV0YXZhcmlhYmxlTm9kZVF1ZXJ5KGZyYW1lTm9kZSk7XG5cbiAgICAgIGlmIChtZXRhdmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZSA9IE1ldGF2YXJpYWJsZS5mcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBsb2NhbENvbnRleHQpLFxuICAgICAgICAgICAgICBkZWNsYXJhdGlvbnMgPSBbXSxcbiAgICAgICAgICAgICAgbWV0YXZhcmlhYmxlcyA9IFtcbiAgICAgICAgICAgICAgICBtZXRhdmFyaWFibGVcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgbm9kZSA9IGZyYW1lTm9kZSwgIC8vL1xuICAgICAgICAgICAgICBzdHJpbmcgPSBsb2NhbENvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpO1xuXG4gICAgICAgIGZyYW1lID0gbmV3IEZyYW1lKHN0cmluZywgbm9kZSwgZGVjbGFyYXRpb25zLCBtZXRhdmFyaWFibGVzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZnJhbWU7XG4gIH1cbn1cblxuT2JqZWN0LmFzc2lnbihzaGltLCB7XG4gIEZyYW1lXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgRnJhbWU7XG4iXSwibmFtZXMiOlsiZnJhbWVOb2RlUXVlcnkiLCJub2RlUXVlcnkiLCJkZWNsYXJhdGlvbk5vZGVzUXVlcnkiLCJub2Rlc1F1ZXJ5IiwibWV0YXZhcmlhYmxlTm9kZVF1ZXJ5IiwibWV0YXZhcmlhYmxlTm9kZXNRdWVyeSIsImZpcnN0IiwiYXJyYXlVdGlsaXRpZXMiLCJGcmFtZSIsInN0cmluZyIsIm5vZGUiLCJkZWNsYXJhdGlvbnMiLCJtZXRhdmFyaWFibGVzIiwiZ2V0U3RyaW5nIiwiZ2V0Tm9kZSIsImdldERlY2xhcmF0aW9ucyIsImdldE1ldGF2YXJpYWJsZXMiLCJnZXRNZXRhdmFyaWFibGUiLCJtZXRhdmFyaWFibGUiLCJtZXRhdmFyaWFibGVzTGVuZ3RoIiwibGVuZ3RoIiwiZmlyc3RNZXRhdmFyaWFibGUiLCJnZXRNZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlTm9kZSIsImRlY2xhcmF0aW9uc0xlbmd0aCIsInZlcmlmeSIsImFzc2lnbm1lbnRzIiwic3RhdGVkIiwibG9jYWxDb250ZXh0IiwidmVyaWZpZWQiLCJmcmFtZVN0cmluZyIsInRyYWNlIiwidmVyaWZpZWRXaGVuU3RhdGVkIiwidmVyaWZpZWRXaGVuRGVyaXZlZCIsInZlcmlmeVdoZW5TdGF0ZWQiLCJ2ZXJpZnlXaGVuRGVyaXZlZCIsImRlYnVnIiwibWV0YXZhcmlhYmxlVmVyaWZpZWQiLCJkZWNsYXJhdGlvbnNWZXJpZmllZCIsImV2ZXJ5IiwiZGVjbGFyYXRpb24iLCJkZWNsYXJhdGlvblZlcmlmaWVkIiwibWV0YXZhcmlhYmxlc1ZlcmlmaWVkIiwidmVyaWZ5R2l2ZW5NZXRhVHlwZSIsIm1ldGFUeXBlIiwidmVyaWZpZWRHaXZlbk1ldGFUeXBlIiwibWV0YVR5cGVTdHJpbmciLCJtZXRhVHlwZU5hbWUiLCJnZXROYW1lIiwiRlJBTUVfTUVUQV9UWVBFX05BTUUiLCJmcm9tRnJhbWVOb2RlIiwiZnJhbWVOb2RlIiwiZnJhbWUiLCJkZWNsYXJhdGlvbk5vZGVzIiwibWV0YXZhcmlhYmxlTm9kZXMiLCJtYXAiLCJkZWNsYXJhdGlvbk5vZGUiLCJEZWNsYXJhdGlvbiIsImZyb21EZWNsYXJhdGlvbk5vZGUiLCJNZXRhdmFyaWFibGUiLCJmcm9tTWV0YXZhcmlhYmxlTm9kZSIsIm5vZGVBc1N0cmluZyIsImZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZSIsImRlZmluZWRBc3NlcnRpb25Ob2RlIiwiZnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJjb250YWluZWRBc3NlcnRpb25Ob2RlIiwiT2JqZWN0IiwiYXNzaWduIiwic2hpbSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBc1RBOzs7ZUFBQTs7O3lCQXBUK0I7MkRBRWQ7a0VBQ087bUVBQ0M7NkJBRVk7cUJBQ0M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFdEMsSUFBTUEsaUJBQWlCQyxJQUFBQSxnQkFBUyxFQUFDLGFBQzNCQyx3QkFBd0JDLElBQUFBLGlCQUFVLEVBQUMsdUJBQ25DQyx3QkFBd0JILElBQUFBLGdCQUFTLEVBQUMseUJBQ2xDSSx5QkFBeUJGLElBQUFBLGlCQUFVLEVBQUM7QUFFMUMsSUFBTSxBQUFFRyxRQUFVQyx5QkFBYyxDQUF4QkQ7QUFFUixJQUFBLEFBQU1FLHNCQUFOO2FBQU1BLE1BQ1FDLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxZQUFZLEVBQUVDLGFBQWE7Z0NBRGpESjtRQUVGLElBQUksQ0FBQ0MsTUFBTSxHQUFHQTtRQUNkLElBQUksQ0FBQ0MsSUFBSSxHQUFHQTtRQUNaLElBQUksQ0FBQ0MsWUFBWSxHQUFHQTtRQUNwQixJQUFJLENBQUNDLGFBQWEsR0FBR0E7O2tCQUxuQko7O1lBUUpLLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFDRSxPQUFPLElBQUksQ0FBQ0osTUFBTTtZQUNwQjs7O1lBRUFLLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFDRSxPQUFPLElBQUksQ0FBQ0osSUFBSTtZQUNsQjs7O1lBRUFLLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFDRSxPQUFPLElBQUksQ0FBQ0osWUFBWTtZQUMxQjs7O1lBRUFLLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFDRSxPQUFPLElBQUksQ0FBQ0osYUFBYTtZQUMzQjs7O1lBRUFLLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFDRSxJQUFJQztnQkFFSixJQUFNQyxzQkFBc0IsSUFBSSxDQUFDUCxhQUFhLENBQUNRLE1BQU07Z0JBRXJELElBQUlELHdCQUF3QixHQUFHO29CQUM3QixJQUFNRSxvQkFBb0JmLE1BQU0sSUFBSSxDQUFDTSxhQUFhO29CQUVsRE0sZUFBZUcsbUJBQW1CLEdBQUc7Z0JBQ3ZDO2dCQUVBLE9BQU9IO1lBQ1Q7OztZQUVBSSxLQUFBQTttQkFBQUEsU0FBQUE7Z0JBQ0UsSUFBSUMsbUJBQW1CO2dCQUV2QixJQUFNQyxxQkFBcUIsSUFBSSxDQUFDYixZQUFZLENBQUNTLE1BQU07Z0JBRW5ELElBQUlJLHVCQUF1QixHQUFHO29CQUM1QixJQUFNTCxzQkFBc0IsSUFBSSxDQUFDUCxhQUFhLENBQUNRLE1BQU07b0JBRXJELElBQUlELHdCQUF3QixHQUFHO3dCQUM3QixJQUFNRSxvQkFBb0JmLE1BQU0sSUFBSSxDQUFDTSxhQUFhLEdBQzVDTSxlQUFlRyxtQkFBbUIsR0FBRzt3QkFFM0NFLG1CQUFtQkwsYUFBYUosT0FBTztvQkFDekM7Z0JBQ0Y7Z0JBRUEsT0FBT1M7WUFDVDs7O1lBRUEsNENBQTRDO1lBQzVDLHlDQUF5QztZQUN6QyxFQUFFO1lBQ0YseURBQXlEO1lBQ3pELEVBQUU7WUFDRixxQ0FBcUM7WUFDckMsMENBQTBDO1lBQzFDLEVBQUU7WUFDRixzRkFBc0Y7WUFDdEYsRUFBRTtZQUNGLHVFQUF1RTtZQUN2RSxFQUFFO1lBQ0Ysa0VBQWtFO1lBQ2xFLE1BQU07WUFDTixFQUFFO1lBQ0Ysb0NBQW9DO1lBQ3BDLElBQUk7WUFDSixFQUFFO1lBQ0Ysb0NBQW9DO1lBQ3BDLDBFQUEwRTtZQUMxRSw4RkFBOEY7WUFDOUYsRUFBRTtZQUNGLGdEQUFnRDtZQUNoRCxxQkFBcUI7WUFDckIsUUFBUTtZQUNSLFFBQVE7WUFDUixFQUFFO1lBQ0YsZ0NBQWdDO1lBQ2hDLElBQUk7WUFDSixFQUFFO1lBQ0Ysc0RBQXNEO1lBQ3RELG1FQUFtRTtZQUNuRSxxRkFBcUY7WUFDckYsOEVBQThFO1lBQzlFLEVBQUU7WUFDRix1Q0FBdUM7WUFDdkMsMkJBQTJCO1lBQzNCLGNBQWM7WUFDZCxjQUFjO1lBQ2Qsb0VBQW9FO1lBQ3BFLEVBQUU7WUFDRiwwQ0FBMEM7WUFDMUMsSUFBSTtZQUVKRSxLQUFBQTttQkFBQUEsU0FBQUEsT0FBT0MsV0FBVyxFQUFFQyxPQUFNLEVBQUVDLFlBQVk7Z0JBQ3RDLElBQUlDO2dCQUVKLElBQU1DLGNBQWMsSUFBSSxDQUFDckIsTUFBTSxFQUFHLEdBQUc7Z0JBRXJDbUIsYUFBYUcsS0FBSyxDQUFDLEFBQUMsa0JBQTZCLE9BQVpELGFBQVk7Z0JBRWpELElBQUlFLHFCQUFxQixPQUNyQkMsc0JBQXNCO2dCQUUxQixJQUFJTixTQUFRO29CQUNWSyxxQkFBcUIsSUFBSSxDQUFDRSxnQkFBZ0IsQ0FBQ1IsYUFBYUU7Z0JBQzFELE9BQU87b0JBQ0xLLHNCQUFzQixJQUFJLENBQUNFLGlCQUFpQixDQUFDVCxhQUFhRTtnQkFDNUQ7Z0JBRUEsSUFBSUksc0JBQXNCQyxxQkFBcUI7b0JBQzdDSixXQUFXO2dCQUNiO2dCQUVBLElBQUlBLFVBQVU7b0JBQ1pELGFBQWFRLEtBQUssQ0FBQyxBQUFDLG9CQUErQixPQUFaTixhQUFZO2dCQUNyRDtnQkFFQSxPQUFPRDtZQUNUOzs7WUFFQUssS0FBQUE7bUJBQUFBLFNBQUFBLGlCQUFpQlIsV0FBVyxFQUFFRSxZQUFZO2dCQUN4QyxJQUFJSSxxQkFBcUI7Z0JBRXpCLElBQU1GLGNBQWMsSUFBSSxDQUFDckIsTUFBTSxFQUFHLEdBQUc7Z0JBRXJDbUIsYUFBYUcsS0FBSyxDQUFDLEFBQUMsa0JBQTZCLE9BQVpELGFBQVk7Z0JBRWpELElBQU1OLHFCQUFxQixJQUFJLENBQUNiLFlBQVksQ0FBQ1MsTUFBTTtnQkFFbkQsSUFBSUksdUJBQXVCLEdBQUc7b0JBQzVCLElBQU1MLHNCQUFzQixJQUFJLENBQUNQLGFBQWEsQ0FBQ1EsTUFBTTtvQkFFckQsSUFBSUQsd0JBQXdCLEdBQUc7d0JBQzdCLElBQU1FLG9CQUFvQmYsTUFBTSxJQUFJLENBQUNNLGFBQWEsR0FDNUNNLGVBQWVHLG1CQUNmZ0IsdUJBQXVCbkIsYUFBYU8sTUFBTSxDQUFDRzt3QkFFakRJLHFCQUFxQkssc0JBQXVCLEdBQUc7b0JBQ2pELE9BQU87d0JBQ0xULGFBQWFHLEtBQUssQ0FBQyxBQUFDLFFBQW1CLE9BQVpELGFBQVk7b0JBQ3pDO2dCQUNGLE9BQU87b0JBQ0xGLGFBQWFHLEtBQUssQ0FBQyxBQUFDLFFBQW1CLE9BQVpELGFBQVk7Z0JBQ3pDO2dCQUdBLElBQUlFLG9CQUFvQjtvQkFDdEJKLGFBQWFRLEtBQUssQ0FBQyxBQUFDLG9CQUErQixPQUFaTixhQUFZO2dCQUNyRDtnQkFFQSxPQUFPRTtZQUNUOzs7WUFFQUcsS0FBQUE7bUJBQUFBLFNBQUFBLGtCQUFrQlQsV0FBVyxFQUFFRSxZQUFZO2dCQUN6QyxJQUFJSztnQkFFSixJQUFNSCxjQUFjLElBQUksQ0FBQ3JCLE1BQU0sRUFBRyxHQUFHO2dCQUVyQ21CLGFBQWFHLEtBQUssQ0FBQyxBQUFDLGtCQUE2QixPQUFaRCxhQUFZO2dCQUVqRCxJQUFNUSx1QkFBdUIsSUFBSSxDQUFDM0IsWUFBWSxDQUFDNEIsS0FBSyxDQUFDLFNBQUNDO29CQUNwRCxJQUFNQyxzQkFBc0JELFlBQVlmLE1BQU0sQ0FBQ0MsYUFBYUMsUUFBUUM7b0JBRXBFLE9BQU9hO2dCQUNUO2dCQUVBLElBQUlILHNCQUFzQjtvQkFDeEIsSUFBTUksd0JBQXdCLElBQUksQ0FBQzlCLGFBQWEsQ0FBQzJCLEtBQUssQ0FBQyxTQUFDckI7d0JBQ3RELElBQU1tQix1QkFBdUJuQixhQUFhTyxNQUFNLENBQUNHO3dCQUVqRCxPQUFPUztvQkFDVDtvQkFFQUosc0JBQXNCUyx1QkFBdUIsR0FBRztnQkFDbEQ7Z0JBRUEsSUFBSVQscUJBQXFCO29CQUN2QkwsYUFBYVEsS0FBSyxDQUFDLEFBQUMsb0JBQStCLE9BQVpOLGFBQVk7Z0JBQ3JEO2dCQUVBLE9BQU9HO1lBQ1Q7OztZQUVBVSxLQUFBQTttQkFBQUEsU0FBQUEsb0JBQW9CQyxRQUFRLEVBQUVsQixXQUFXLEVBQUVDLE9BQU0sRUFBRUMsWUFBWTtnQkFDN0QsSUFBSWlCLHdCQUF3QjtnQkFFNUIsSUFBTWYsY0FBYyxJQUFJLENBQUNyQixNQUFNLEVBQ3pCcUMsaUJBQWlCRixTQUFTL0IsU0FBUztnQkFFekNlLGFBQWFHLEtBQUssQ0FBQyxBQUFDLGtCQUFrRGUsT0FBakNoQixhQUFZLHVCQUFvQyxPQUFmZ0IsZ0JBQWU7Z0JBRXJGLElBQU1DLGVBQWVILFNBQVNJLE9BQU87Z0JBRXJDLElBQUlELGlCQUFpQkUsbUNBQW9CLEVBQUU7b0JBQ3pDLElBQU1wQixXQUFXLElBQUksQ0FBQ0osTUFBTSxDQUFDQyxhQUFhQyxTQUFRQztvQkFFbERpQix3QkFBd0JoQixVQUFVLEdBQUc7Z0JBQ3ZDO2dCQUVBLElBQUlnQix1QkFBdUI7b0JBQ3pCakIsYUFBYVEsS0FBSyxDQUFDLEFBQUMsb0JBQW9EVSxPQUFqQ2hCLGFBQVksdUJBQW9DLE9BQWZnQixnQkFBZTtnQkFDekY7Z0JBRUEsT0FBT0Q7WUFDVDs7OztZQUVPSyxLQUFBQTttQkFBUCxTQUFPQSxjQUFjQyxTQUFTLEVBQUV2QixZQUFZO2dCQUMxQyxJQUFJd0IsUUFBUTtnQkFFWixJQUFJRCxjQUFjLE1BQU07b0JBQ3RCLElBQU1FLG1CQUFtQm5ELHNCQUFzQmlELFlBQ3pDRyxvQkFBb0JqRCx1QkFBdUI4QyxZQUMzQ3hDLGVBQWUwQyxpQkFBaUJFLEdBQUcsQ0FBQyxTQUFDQzt3QkFDbkMsSUFBTWhCLGNBQWNpQixvQkFBVyxDQUFDQyxtQkFBbUIsQ0FBQ0YsaUJBQWlCNUI7d0JBRXJFLE9BQU9ZO29CQUNULElBQ0E1QixnQkFBZ0IwQyxrQkFBa0JDLEdBQUcsQ0FBQyxTQUFDaEM7d0JBQ3JDLElBQU1MLGVBQWV5QyxxQkFBWSxDQUFDQyxvQkFBb0IsQ0FBQ3JDLGtCQUFrQks7d0JBRXpFLE9BQU9WO29CQUNULElBQ0FSLE9BQU95QyxXQUNQMUMsU0FBU21CLGFBQWFpQyxZQUFZLENBQUNuRDtvQkFFekMwQyxRQUFRLElBek9SNUMsTUF5T2tCQyxRQUFRQyxNQUFNQyxjQUFjQztnQkFDaEQ7Z0JBRUEsT0FBT3dDO1lBQ1Q7OztZQUVPVSxLQUFBQTttQkFBUCxTQUFPQSx5QkFBeUJDLG9CQUFvQixFQUFFbkMsWUFBWTtnQkFDaEUsSUFBSXdCLFFBQVE7Z0JBRVosSUFBTUQsWUFBWW5ELGVBQWUrRDtnQkFFakMsSUFBSVosY0FBYyxNQUFNO29CQUN0QixJQUFNNUIsbUJBQW1CbkIsc0JBQXNCK0M7b0JBRS9DLElBQUk1QixxQkFBcUIsTUFBTTt3QkFDN0IsSUFBTUwsZUFBZXlDLHFCQUFZLENBQUNDLG9CQUFvQixDQUFDckMsa0JBQWtCSyxlQUNuRWpCLGVBQWUsRUFBRSxFQUNqQkMsZ0JBQWdCOzRCQUNkTTt5QkFDRCxFQUNEUixPQUFPeUMsV0FDUDFDLFNBQVNtQixhQUFhaUMsWUFBWSxDQUFDbkQ7d0JBRXpDMEMsUUFBUSxJQWhRVjVDLE1BZ1FvQkMsUUFBUUMsTUFBTUMsY0FBY0M7b0JBQ2hEO2dCQUNGO2dCQUVBLE9BQU93QztZQUNUOzs7WUFFT1ksS0FBQUE7bUJBQVAsU0FBT0EsMkJBQTJCQyxzQkFBc0IsRUFBRXJDLFlBQVk7Z0JBQ3BFLElBQUl3QixRQUFRO2dCQUVaLElBQU1ELFlBQVluRCxlQUFlaUU7Z0JBRWpDLElBQUlkLGNBQWMsTUFBTTtvQkFDdEIsSUFBTTVCLG1CQUFtQm5CLHNCQUFzQitDO29CQUUvQyxJQUFJNUIscUJBQXFCLE1BQU07d0JBQzdCLElBQU1MLGVBQWV5QyxxQkFBWSxDQUFDQyxvQkFBb0IsQ0FBQ3JDLGtCQUFrQkssZUFDbkVqQixlQUFlLEVBQUUsRUFDakJDLGdCQUFnQjs0QkFDZE07eUJBQ0QsRUFDRFIsT0FBT3lDLFdBQ1AxQyxTQUFTbUIsYUFBYWlDLFlBQVksQ0FBQ25EO3dCQUV6QzBDLFFBQVEsSUF4UlY1QyxNQXdSb0JDLFFBQVFDLE1BQU1DLGNBQWNDO29CQUNoRDtnQkFDRjtnQkFFQSxPQUFPd0M7WUFDVDs7O1dBN1JJNUM7O0FBZ1NOMEQsT0FBT0MsTUFBTSxDQUFDQyxhQUFJLEVBQUU7SUFDbEI1RCxPQUFBQTtBQUNGO0lBRUEsV0FBZUEifQ==
package/lib/judgement.js CHANGED
@@ -8,6 +8,10 @@ Object.defineProperty(exports, "default", {
8
8
  return Judgement;
9
9
  }
10
10
  });
11
+ var _frame = /*#__PURE__*/ _interop_require_default(require("./frame"));
12
+ var _declaration = /*#__PURE__*/ _interop_require_default(require("./declaration"));
13
+ var _judgement = /*#__PURE__*/ _interop_require_default(require("./assignment/judgement"));
14
+ var _query = require("./utilities/query");
11
15
  function _class_call_check(instance, Constructor) {
12
16
  if (!(instance instanceof Constructor)) {
13
17
  throw new TypeError("Cannot call a class as a function");
@@ -27,13 +31,26 @@ function _create_class(Constructor, protoProps, staticProps) {
27
31
  if (staticProps) _defineProperties(Constructor, staticProps);
28
32
  return Constructor;
29
33
  }
34
+ function _interop_require_default(obj) {
35
+ return obj && obj.__esModule ? obj : {
36
+ default: obj
37
+ };
38
+ }
39
+ var frameNodeQuery = (0, _query.nodeQuery)("/judgement/frame"), declarationNodeQuery = (0, _query.nodeQuery)("/judgement/declaration");
30
40
  var Judgement = /*#__PURE__*/ function() {
31
- function Judgement(frame, declaration) {
41
+ function Judgement(string, frame, declaration) {
32
42
  _class_call_check(this, Judgement);
43
+ this.string = string;
33
44
  this.frame = frame;
34
45
  this.declaration = declaration;
35
46
  }
36
47
  _create_class(Judgement, [
48
+ {
49
+ key: "getString",
50
+ value: function getString() {
51
+ return this.string;
52
+ }
53
+ },
37
54
  {
38
55
  key: "getFrame",
39
56
  value: function getFrame() {
@@ -57,12 +74,74 @@ var Judgement = /*#__PURE__*/ function() {
57
74
  value: function matchMetavariableName(metavariableName) {
58
75
  return this.frame.matchMetavariableName(metavariableName);
59
76
  }
77
+ },
78
+ {
79
+ key: "verify",
80
+ value: function verify(assignments, stated, localContext) {
81
+ var verified;
82
+ var judgementString = this.string; ///
83
+ localContext.trace("Verifying the '".concat(judgementString, "' judgement..."));
84
+ var frameVerified = this.frame.verify(assignments, stated, localContext), declarationVerified = this.declaration.verify(assignments, stated, localContext);
85
+ if (frameVerified && declarationVerified) {
86
+ var verifiedWhenStated = false, verifiedWhenDerived = false;
87
+ if (stated) {
88
+ verifiedWhenStated = this.verifyWhenStated(assignments, localContext);
89
+ } else {
90
+ verifiedWhenDerived = this.verifyWhenDerived(assignments, localContext);
91
+ }
92
+ if (verifiedWhenStated || verifiedWhenDerived) {
93
+ verified = true;
94
+ }
95
+ }
96
+ if (verified) {
97
+ localContext.debug("...verified the '".concat(judgementString, "' judgement."));
98
+ }
99
+ return verified;
100
+ }
101
+ },
102
+ {
103
+ key: "verifyWhenStated",
104
+ value: function verifyWhenStated(assignments, localContext) {
105
+ var verifiedWhenStated;
106
+ var judgementString = this.string; ///
107
+ localContext.trace("Verifying the '".concat(judgementString, "' judgement when stated..."));
108
+ if (assignments !== null) {
109
+ var judgement = this, judgementAssignment = _judgement.default.fromJudgement(judgement), assignment = judgementAssignment;
110
+ assignments.push(assignment);
111
+ }
112
+ verifiedWhenStated = true;
113
+ if (verifiedWhenStated) {
114
+ localContext.debug("...verified the '".concat(judgementString, "' judgement when stated."));
115
+ }
116
+ return verifiedWhenStated;
117
+ }
118
+ },
119
+ {
120
+ key: "verifyWhenDerived",
121
+ value: function verifyWhenDerived(assignments, localContext) {
122
+ var verifiedWhenDerived;
123
+ var judgementString = this.string; ///
124
+ localContext.trace("Verifying the '".concat(judgementString, "' judgement when derived..."));
125
+ var reference = this.declaration.getReference(), metatheorem = localContext.findMetatheoremByReference(reference), metaLemma = localContext.findMetaLemmaByReference(reference), metaLemmaMetatheorem = metaLemma || metatheorem; ///
126
+ if (metaLemmaMetatheorem !== null) {
127
+ var metaLemmaMetatheoremUnified = this.frame.unifyMetaLemmaOrMetatheorem(metaLemmaMetatheorem);
128
+ verifiedWhenDerived = metaLemmaMetatheoremUnified; ///
129
+ }
130
+ if (verifiedWhenDerived) {
131
+ localContext.debug("...verified the '".concat(judgementString, "' judgement when derived."));
132
+ }
133
+ return verifiedWhenDerived;
134
+ }
60
135
  }
61
136
  ], [
62
137
  {
63
- key: "fromJudgementNodeFrameAndDeclaration",
64
- value: function fromJudgementNodeFrameAndDeclaration(judgementNode, frame, declaration) {
65
- var judgement = new Judgement(frame, declaration);
138
+ key: "fromJudgementNode",
139
+ value: function fromJudgementNode(judgementNode, localContext) {
140
+ var judgement = null;
141
+ if (judgementNode !== null) {
142
+ var frameNode = frameNodeQuery(judgementNode), declarationNode = declarationNodeQuery(judgementNode), node = judgementNode, string = localContext.nodeAsString(node), frame = _frame.default.fromFrameNode(frameNode, localContext), declaration = _declaration.default.fromDeclarationNode(declarationNode, localContext);
143
+ judgement = new Judgement(string, frame, declaration);
144
+ }
66
145
  return judgement;
67
146
  }
68
147
  }
@@ -70,4 +149,4 @@ var Judgement = /*#__PURE__*/ function() {
70
149
  return Judgement;
71
150
  }();
72
151
 
73
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9qdWRnZW1lbnQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEp1ZGdlbWVudCB7XG4gIGNvbnN0cnVjdG9yKGZyYW1lLCBkZWNsYXJhdGlvbikge1xuICAgIHRoaXMuZnJhbWUgPSBmcmFtZTtcbiAgICB0aGlzLmRlY2xhcmF0aW9uID0gZGVjbGFyYXRpb247XG4gIH1cblxuICBnZXRGcmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5mcmFtZTtcbiAgfVxuXG4gIGdldERlY2xhcmF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmRlY2xhcmF0aW9uO1xuICB9XG5cbiAgZ2V0TWV0YXZhcmlhYmxlTm9kZSgpIHsgcmV0dXJuIHRoaXMuZnJhbWUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpOyB9XG5cbiAgbWF0Y2hNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpIHsgcmV0dXJuIHRoaXMuZnJhbWUubWF0Y2hNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpOyB9XG5cbiAgc3RhdGljIGZyb21KdWRnZW1lbnROb2RlRnJhbWVBbmREZWNsYXJhdGlvbihqdWRnZW1lbnROb2RlLCBmcmFtZSwgZGVjbGFyYXRpb24pIHtcbiAgICBjb25zdCBqdWRnZW1lbnQgPSBuZXcgSnVkZ2VtZW50KGZyYW1lLCBkZWNsYXJhdGlvbik7XG5cbiAgICByZXR1cm4ganVkZ2VtZW50O1xuICB9XG59XG4iXSwibmFtZXMiOlsiSnVkZ2VtZW50IiwiZnJhbWUiLCJkZWNsYXJhdGlvbiIsImdldEZyYW1lIiwiZ2V0RGVjbGFyYXRpb24iLCJnZXRNZXRhdmFyaWFibGVOb2RlIiwibWF0Y2hNZXRhdmFyaWFibGVOYW1lIiwibWV0YXZhcmlhYmxlTmFtZSIsImZyb21KdWRnZW1lbnROb2RlRnJhbWVBbmREZWNsYXJhdGlvbiIsImp1ZGdlbWVudE5vZGUiLCJqdWRnZW1lbnQiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O2VBRXFCQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFOLElBQUEsQUFBTUEsMEJBQU47YUFBTUEsVUFDUEMsS0FBSyxFQUFFQyxXQUFXO2dDQURYRjtRQUVqQixJQUFJLENBQUNDLEtBQUssR0FBR0E7UUFDYixJQUFJLENBQUNDLFdBQVcsR0FBR0E7O2tCQUhGRjs7WUFNbkJHLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFDRSxPQUFPLElBQUksQ0FBQ0YsS0FBSztZQUNuQjs7O1lBRUFHLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFDRSxPQUFPLElBQUksQ0FBQ0YsV0FBVztZQUN6Qjs7O1lBRUFHLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFBd0IsT0FBTyxJQUFJLENBQUNKLEtBQUssQ0FBQ0ksbUJBQW1CO1lBQUk7OztZQUVqRUMsS0FBQUE7bUJBQUFBLFNBQUFBLHNCQUFzQkMsZ0JBQWdCO2dCQUFJLE9BQU8sSUFBSSxDQUFDTixLQUFLLENBQUNLLHFCQUFxQixDQUFDQztZQUFtQjs7OztZQUU5RkMsS0FBQUE7bUJBQVAsU0FBT0EscUNBQXFDQyxhQUFhLEVBQUVSLEtBQUssRUFBRUMsV0FBVztnQkFDM0UsSUFBTVEsWUFBWSxJQW5CRFYsVUFtQmVDLE9BQU9DO2dCQUV2QyxPQUFPUTtZQUNUOzs7V0F0Qm1CViJ9
152
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9qdWRnZW1lbnQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBGcmFtZSBmcm9tIFwiLi9mcmFtZVwiO1xuaW1wb3J0IERlY2xhcmF0aW9uIGZyb20gXCIuL2RlY2xhcmF0aW9uXCI7XG5pbXBvcnQgSnVkZ2VtZW50QXNzaWdubWVudCBmcm9tIFwiLi9hc3NpZ25tZW50L2p1ZGdlbWVudFwiO1xuXG5pbXBvcnQgeyBub2RlUXVlcnkgfSBmcm9tIFwiLi91dGlsaXRpZXMvcXVlcnlcIjtcblxuY29uc3QgZnJhbWVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvanVkZ2VtZW50L2ZyYW1lXCIpLFxuICAgICAgZGVjbGFyYXRpb25Ob2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvanVkZ2VtZW50L2RlY2xhcmF0aW9uXCIpO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBKdWRnZW1lbnQge1xuICBjb25zdHJ1Y3RvcihzdHJpbmcsIGZyYW1lLCBkZWNsYXJhdGlvbikge1xuICAgIHRoaXMuc3RyaW5nID0gc3RyaW5nO1xuICAgIHRoaXMuZnJhbWUgPSBmcmFtZTtcbiAgICB0aGlzLmRlY2xhcmF0aW9uID0gZGVjbGFyYXRpb247XG4gIH1cblxuICBnZXRTdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RyaW5nO1xuICB9XG5cbiAgZ2V0RnJhbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZnJhbWU7XG4gIH1cblxuICBnZXREZWNsYXJhdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5kZWNsYXJhdGlvbjtcbiAgfVxuXG4gIGdldE1ldGF2YXJpYWJsZU5vZGUoKSB7IHJldHVybiB0aGlzLmZyYW1lLmdldE1ldGF2YXJpYWJsZU5vZGUoKTsgfVxuXG4gIG1hdGNoTWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKSB7IHJldHVybiB0aGlzLmZyYW1lLm1hdGNoTWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKTsgfVxuXG4gIHZlcmlmeShhc3NpZ25tZW50cywgc3RhdGVkLCBsb2NhbENvbnRleHQpIHtcbiAgICBsZXQgdmVyaWZpZWQ7XG5cbiAgICBjb25zdCBqdWRnZW1lbnRTdHJpbmcgPSB0aGlzLnN0cmluZzsgIC8vL1xuXG4gICAgbG9jYWxDb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke2p1ZGdlbWVudFN0cmluZ30nIGp1ZGdlbWVudC4uLmApO1xuXG4gICAgY29uc3QgZnJhbWVWZXJpZmllZCA9IHRoaXMuZnJhbWUudmVyaWZ5KGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGxvY2FsQ29udGV4dCksXG4gICAgICAgICAgZGVjbGFyYXRpb25WZXJpZmllZCA9IHRoaXMuZGVjbGFyYXRpb24udmVyaWZ5KGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGxvY2FsQ29udGV4dCk7XG5cbiAgICBpZiAoZnJhbWVWZXJpZmllZCAmJiBkZWNsYXJhdGlvblZlcmlmaWVkKSB7XG4gICAgICBsZXQgdmVyaWZpZWRXaGVuU3RhdGVkID0gZmFsc2UsXG4gICAgICAgICAgdmVyaWZpZWRXaGVuRGVyaXZlZCA9IGZhbHNlO1xuXG4gICAgICBpZiAoc3RhdGVkKSB7XG4gICAgICAgIHZlcmlmaWVkV2hlblN0YXRlZCA9IHRoaXMudmVyaWZ5V2hlblN0YXRlZChhc3NpZ25tZW50cywgbG9jYWxDb250ZXh0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZlcmlmaWVkV2hlbkRlcml2ZWQgPSB0aGlzLnZlcmlmeVdoZW5EZXJpdmVkKGFzc2lnbm1lbnRzLCBsb2NhbENvbnRleHQpO1xuICAgICAgfVxuXG4gICAgICBpZiAodmVyaWZpZWRXaGVuU3RhdGVkIHx8IHZlcmlmaWVkV2hlbkRlcml2ZWQpIHtcbiAgICAgICAgdmVyaWZpZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2ZXJpZmllZCkge1xuICAgICAgbG9jYWxDb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7anVkZ2VtZW50U3RyaW5nfScganVkZ2VtZW50LmApO1xuICAgIH1cblxuICAgIHJldHVybiB2ZXJpZmllZDtcbiAgfVxuXG4gIHZlcmlmeVdoZW5TdGF0ZWQoYXNzaWdubWVudHMsIGxvY2FsQ29udGV4dCkge1xuICAgIGxldCB2ZXJpZmllZFdoZW5TdGF0ZWQ7XG5cbiAgICBjb25zdCBqdWRnZW1lbnRTdHJpbmcgPSB0aGlzLnN0cmluZzsgIC8vL1xuXG4gICAgbG9jYWxDb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke2p1ZGdlbWVudFN0cmluZ30nIGp1ZGdlbWVudCB3aGVuIHN0YXRlZC4uLmApO1xuXG4gICAgaWYgKGFzc2lnbm1lbnRzICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBqdWRnZW1lbnQgPSB0aGlzLCAvLy9cbiAgICAgICAgICAgIGp1ZGdlbWVudEFzc2lnbm1lbnQgPSBKdWRnZW1lbnRBc3NpZ25tZW50LmZyb21KdWRnZW1lbnQoanVkZ2VtZW50KSxcbiAgICAgICAgICAgIGFzc2lnbm1lbnQgPSBqdWRnZW1lbnRBc3NpZ25tZW50O1xuXG4gICAgICBhc3NpZ25tZW50cy5wdXNoKGFzc2lnbm1lbnQpO1xuICAgIH1cblxuICAgIHZlcmlmaWVkV2hlblN0YXRlZCA9IHRydWU7XG5cbiAgICBpZiAodmVyaWZpZWRXaGVuU3RhdGVkKSB7XG4gICAgICBsb2NhbENvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtqdWRnZW1lbnRTdHJpbmd9JyBqdWRnZW1lbnQgd2hlbiBzdGF0ZWQuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZlcmlmaWVkV2hlblN0YXRlZDtcbiAgfVxuXG4gIHZlcmlmeVdoZW5EZXJpdmVkKGFzc2lnbm1lbnRzLCBsb2NhbENvbnRleHQpIHtcbiAgICBsZXQgdmVyaWZpZWRXaGVuRGVyaXZlZDtcblxuICAgIGNvbnN0IGp1ZGdlbWVudFN0cmluZyA9IHRoaXMuc3RyaW5nOyAgLy8vXG5cbiAgICBsb2NhbENvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7anVkZ2VtZW50U3RyaW5nfScganVkZ2VtZW50IHdoZW4gZGVyaXZlZC4uLmApO1xuXG4gICAgY29uc3QgcmVmZXJlbmNlID0gdGhpcy5kZWNsYXJhdGlvbi5nZXRSZWZlcmVuY2UoKSxcbiAgICAgICAgICBtZXRhdGhlb3JlbSA9IGxvY2FsQ29udGV4dC5maW5kTWV0YXRoZW9yZW1CeVJlZmVyZW5jZShyZWZlcmVuY2UpLFxuICAgICAgICAgIG1ldGFMZW1tYSA9IGxvY2FsQ29udGV4dC5maW5kTWV0YUxlbW1hQnlSZWZlcmVuY2UocmVmZXJlbmNlKSxcbiAgICAgICAgICBtZXRhTGVtbWFNZXRhdGhlb3JlbSA9IChtZXRhTGVtbWEgfHwgbWV0YXRoZW9yZW0pOyAgLy8vXG5cbiAgICBpZiAobWV0YUxlbW1hTWV0YXRoZW9yZW0gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IG1ldGFMZW1tYU1ldGF0aGVvcmVtVW5pZmllZCA9IHRoaXMuZnJhbWUudW5pZnlNZXRhTGVtbWFPck1ldGF0aGVvcmVtKG1ldGFMZW1tYU1ldGF0aGVvcmVtKTtcblxuICAgICAgdmVyaWZpZWRXaGVuRGVyaXZlZCA9IG1ldGFMZW1tYU1ldGF0aGVvcmVtVW5pZmllZDsgLy8vXG4gICAgfVxuXG4gICAgaWYgKHZlcmlmaWVkV2hlbkRlcml2ZWQpIHtcbiAgICAgIGxvY2FsQ29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke2p1ZGdlbWVudFN0cmluZ30nIGp1ZGdlbWVudCB3aGVuIGRlcml2ZWQuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZlcmlmaWVkV2hlbkRlcml2ZWQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbUp1ZGdlbWVudE5vZGUoanVkZ2VtZW50Tm9kZSwgbG9jYWxDb250ZXh0KSB7XG4gICAgbGV0IGp1ZGdlbWVudCA9IG51bGw7XG5cbiAgICBpZiAoanVkZ2VtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgZnJhbWVOb2RlID0gZnJhbWVOb2RlUXVlcnkoanVkZ2VtZW50Tm9kZSksXG4gICAgICAgICAgICBkZWNsYXJhdGlvbk5vZGUgPSBkZWNsYXJhdGlvbk5vZGVRdWVyeShqdWRnZW1lbnROb2RlKSxcbiAgICAgICAgICAgIG5vZGUgPSBqdWRnZW1lbnROb2RlLCAvLy9cbiAgICAgICAgICAgIHN0cmluZyA9IGxvY2FsQ29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgICAgICBmcmFtZSA9IEZyYW1lLmZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBsb2NhbENvbnRleHQpLFxuICAgICAgICAgICAgZGVjbGFyYXRpb24gPSBEZWNsYXJhdGlvbi5mcm9tRGVjbGFyYXRpb25Ob2RlKGRlY2xhcmF0aW9uTm9kZSwgbG9jYWxDb250ZXh0KTtcblxuICAgICAganVkZ2VtZW50ID0gbmV3IEp1ZGdlbWVudChzdHJpbmcsIGZyYW1lLCBkZWNsYXJhdGlvbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGp1ZGdlbWVudDtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIkp1ZGdlbWVudCIsImZyYW1lTm9kZVF1ZXJ5Iiwibm9kZVF1ZXJ5IiwiZGVjbGFyYXRpb25Ob2RlUXVlcnkiLCJzdHJpbmciLCJmcmFtZSIsImRlY2xhcmF0aW9uIiwiZ2V0U3RyaW5nIiwiZ2V0RnJhbWUiLCJnZXREZWNsYXJhdGlvbiIsImdldE1ldGF2YXJpYWJsZU5vZGUiLCJtYXRjaE1ldGF2YXJpYWJsZU5hbWUiLCJtZXRhdmFyaWFibGVOYW1lIiwidmVyaWZ5IiwiYXNzaWdubWVudHMiLCJzdGF0ZWQiLCJsb2NhbENvbnRleHQiLCJ2ZXJpZmllZCIsImp1ZGdlbWVudFN0cmluZyIsInRyYWNlIiwiZnJhbWVWZXJpZmllZCIsImRlY2xhcmF0aW9uVmVyaWZpZWQiLCJ2ZXJpZmllZFdoZW5TdGF0ZWQiLCJ2ZXJpZmllZFdoZW5EZXJpdmVkIiwidmVyaWZ5V2hlblN0YXRlZCIsInZlcmlmeVdoZW5EZXJpdmVkIiwiZGVidWciLCJqdWRnZW1lbnQiLCJqdWRnZW1lbnRBc3NpZ25tZW50IiwiSnVkZ2VtZW50QXNzaWdubWVudCIsImZyb21KdWRnZW1lbnQiLCJhc3NpZ25tZW50IiwicHVzaCIsInJlZmVyZW5jZSIsImdldFJlZmVyZW5jZSIsIm1ldGF0aGVvcmVtIiwiZmluZE1ldGF0aGVvcmVtQnlSZWZlcmVuY2UiLCJtZXRhTGVtbWEiLCJmaW5kTWV0YUxlbW1hQnlSZWZlcmVuY2UiLCJtZXRhTGVtbWFNZXRhdGhlb3JlbSIsIm1ldGFMZW1tYU1ldGF0aGVvcmVtVW5pZmllZCIsInVuaWZ5TWV0YUxlbW1hT3JNZXRhdGhlb3JlbSIsImZyb21KdWRnZW1lbnROb2RlIiwianVkZ2VtZW50Tm9kZSIsImZyYW1lTm9kZSIsImRlY2xhcmF0aW9uTm9kZSIsIm5vZGUiLCJub2RlQXNTdHJpbmciLCJGcmFtZSIsImZyb21GcmFtZU5vZGUiLCJEZWNsYXJhdGlvbiIsImZyb21EZWNsYXJhdGlvbk5vZGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O2VBV3FCQTs7OzREQVRIO2tFQUNNO2dFQUNRO3FCQUVOOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRTFCLElBQU1DLGlCQUFpQkMsSUFBQUEsZ0JBQVMsRUFBQyxxQkFDM0JDLHVCQUF1QkQsSUFBQUEsZ0JBQVMsRUFBQztBQUV4QixJQUFBLEFBQU1GLDBCQUFOO2FBQU1BLFVBQ1BJLE1BQU0sRUFBRUMsS0FBSyxFQUFFQyxXQUFXO2dDQURuQk47UUFFakIsSUFBSSxDQUFDSSxNQUFNLEdBQUdBO1FBQ2QsSUFBSSxDQUFDQyxLQUFLLEdBQUdBO1FBQ2IsSUFBSSxDQUFDQyxXQUFXLEdBQUdBOztrQkFKRk47O1lBT25CTyxLQUFBQTttQkFBQUEsU0FBQUE7Z0JBQ0UsT0FBTyxJQUFJLENBQUNILE1BQU07WUFDcEI7OztZQUVBSSxLQUFBQTttQkFBQUEsU0FBQUE7Z0JBQ0UsT0FBTyxJQUFJLENBQUNILEtBQUs7WUFDbkI7OztZQUVBSSxLQUFBQTttQkFBQUEsU0FBQUE7Z0JBQ0UsT0FBTyxJQUFJLENBQUNILFdBQVc7WUFDekI7OztZQUVBSSxLQUFBQTttQkFBQUEsU0FBQUE7Z0JBQXdCLE9BQU8sSUFBSSxDQUFDTCxLQUFLLENBQUNLLG1CQUFtQjtZQUFJOzs7WUFFakVDLEtBQUFBO21CQUFBQSxTQUFBQSxzQkFBc0JDLGdCQUFnQjtnQkFBSSxPQUFPLElBQUksQ0FBQ1AsS0FBSyxDQUFDTSxxQkFBcUIsQ0FBQ0M7WUFBbUI7OztZQUVyR0MsS0FBQUE7bUJBQUFBLFNBQUFBLE9BQU9DLFdBQVcsRUFBRUMsTUFBTSxFQUFFQyxZQUFZO2dCQUN0QyxJQUFJQztnQkFFSixJQUFNQyxrQkFBa0IsSUFBSSxDQUFDZCxNQUFNLEVBQUcsR0FBRztnQkFFekNZLGFBQWFHLEtBQUssQ0FBQyxBQUFDLGtCQUFpQyxPQUFoQkQsaUJBQWdCO2dCQUVyRCxJQUFNRSxnQkFBZ0IsSUFBSSxDQUFDZixLQUFLLENBQUNRLE1BQU0sQ0FBQ0MsYUFBYUMsUUFBUUMsZUFDdkRLLHNCQUFzQixJQUFJLENBQUNmLFdBQVcsQ0FBQ08sTUFBTSxDQUFDQyxhQUFhQyxRQUFRQztnQkFFekUsSUFBSUksaUJBQWlCQyxxQkFBcUI7b0JBQ3hDLElBQUlDLHFCQUFxQixPQUNyQkMsc0JBQXNCO29CQUUxQixJQUFJUixRQUFRO3dCQUNWTyxxQkFBcUIsSUFBSSxDQUFDRSxnQkFBZ0IsQ0FBQ1YsYUFBYUU7b0JBQzFELE9BQU87d0JBQ0xPLHNCQUFzQixJQUFJLENBQUNFLGlCQUFpQixDQUFDWCxhQUFhRTtvQkFDNUQ7b0JBRUEsSUFBSU0sc0JBQXNCQyxxQkFBcUI7d0JBQzdDTixXQUFXO29CQUNiO2dCQUNGO2dCQUVBLElBQUlBLFVBQVU7b0JBQ1pELGFBQWFVLEtBQUssQ0FBQyxBQUFDLG9CQUFtQyxPQUFoQlIsaUJBQWdCO2dCQUN6RDtnQkFFQSxPQUFPRDtZQUNUOzs7WUFFQU8sS0FBQUE7bUJBQUFBLFNBQUFBLGlCQUFpQlYsV0FBVyxFQUFFRSxZQUFZO2dCQUN4QyxJQUFJTTtnQkFFSixJQUFNSixrQkFBa0IsSUFBSSxDQUFDZCxNQUFNLEVBQUcsR0FBRztnQkFFekNZLGFBQWFHLEtBQUssQ0FBQyxBQUFDLGtCQUFpQyxPQUFoQkQsaUJBQWdCO2dCQUVyRCxJQUFJSixnQkFBZ0IsTUFBTTtvQkFDeEIsSUFBTWEsWUFBWSxJQUFJLEVBQ2hCQyxzQkFBc0JDLGtCQUFtQixDQUFDQyxhQUFhLENBQUNILFlBQ3hESSxhQUFhSDtvQkFFbkJkLFlBQVlrQixJQUFJLENBQUNEO2dCQUNuQjtnQkFFQVQscUJBQXFCO2dCQUVyQixJQUFJQSxvQkFBb0I7b0JBQ3RCTixhQUFhVSxLQUFLLENBQUMsQUFBQyxvQkFBbUMsT0FBaEJSLGlCQUFnQjtnQkFDekQ7Z0JBRUEsT0FBT0k7WUFDVDs7O1lBRUFHLEtBQUFBO21CQUFBQSxTQUFBQSxrQkFBa0JYLFdBQVcsRUFBRUUsWUFBWTtnQkFDekMsSUFBSU87Z0JBRUosSUFBTUwsa0JBQWtCLElBQUksQ0FBQ2QsTUFBTSxFQUFHLEdBQUc7Z0JBRXpDWSxhQUFhRyxLQUFLLENBQUMsQUFBQyxrQkFBaUMsT0FBaEJELGlCQUFnQjtnQkFFckQsSUFBTWUsWUFBWSxJQUFJLENBQUMzQixXQUFXLENBQUM0QixZQUFZLElBQ3pDQyxjQUFjbkIsYUFBYW9CLDBCQUEwQixDQUFDSCxZQUN0REksWUFBWXJCLGFBQWFzQix3QkFBd0IsQ0FBQ0wsWUFDbERNLHVCQUF3QkYsYUFBYUYsYUFBZSxHQUFHO2dCQUU3RCxJQUFJSSx5QkFBeUIsTUFBTTtvQkFDakMsSUFBTUMsOEJBQThCLElBQUksQ0FBQ25DLEtBQUssQ0FBQ29DLDJCQUEyQixDQUFDRjtvQkFFM0VoQixzQkFBc0JpQiw2QkFBNkIsR0FBRztnQkFDeEQ7Z0JBRUEsSUFBSWpCLHFCQUFxQjtvQkFDdkJQLGFBQWFVLEtBQUssQ0FBQyxBQUFDLG9CQUFtQyxPQUFoQlIsaUJBQWdCO2dCQUN6RDtnQkFFQSxPQUFPSztZQUNUOzs7O1lBRU9tQixLQUFBQTttQkFBUCxTQUFPQSxrQkFBa0JDLGFBQWEsRUFBRTNCLFlBQVk7Z0JBQ2xELElBQUlXLFlBQVk7Z0JBRWhCLElBQUlnQixrQkFBa0IsTUFBTTtvQkFDMUIsSUFBTUMsWUFBWTNDLGVBQWUwQyxnQkFDM0JFLGtCQUFrQjFDLHFCQUFxQndDLGdCQUN2Q0csT0FBT0gsZUFDUHZDLFNBQVNZLGFBQWErQixZQUFZLENBQUNELE9BQ25DekMsUUFBUTJDLGNBQUssQ0FBQ0MsYUFBYSxDQUFDTCxXQUFXNUIsZUFDdkNWLGNBQWM0QyxvQkFBVyxDQUFDQyxtQkFBbUIsQ0FBQ04saUJBQWlCN0I7b0JBRXJFVyxZQUFZLElBbkhHM0IsVUFtSFdJLFFBQVFDLE9BQU9DO2dCQUMzQztnQkFFQSxPQUFPcUI7WUFDVDs7O1dBdkhtQjNCIn0=