occam-verify-cli 1.0.396 → 1.0.405

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 (251) hide show
  1. package/lib/assignment/equality.js +2 -2
  2. package/lib/context/file.js +4 -5
  3. package/lib/context/local.js +17 -6
  4. package/lib/context/partial.js +10 -10
  5. package/lib/context/temporary.js +102 -52
  6. package/lib/mixins/step/unify.js +5 -6
  7. package/lib/node/argument.js +4 -4
  8. package/lib/node/assertion/contained.js +6 -6
  9. package/lib/node/assertion/defined.js +6 -6
  10. package/lib/node/assertion/property.js +6 -6
  11. package/lib/node/assertion/satisfies.js +6 -6
  12. package/lib/node/assertion/subproof.js +6 -6
  13. package/lib/node/assertion/type.js +6 -6
  14. package/lib/node/assertion.js +107 -0
  15. package/lib/node/assumption.js +134 -0
  16. package/lib/node/axiom.js +6 -6
  17. package/lib/node/{topLevelAssertion.js → axiomLemmaTheoremConjecture.js} +12 -12
  18. package/lib/node/body.js +4 -5
  19. package/lib/node/combinator.js +4 -4
  20. package/lib/node/conclusion.js +4 -4
  21. package/lib/node/conjecture.js +6 -6
  22. package/lib/node/constructor.js +4 -4
  23. package/lib/node/declaration/combinator.js +6 -6
  24. package/lib/node/declaration/complexType.js +6 -6
  25. package/lib/node/declaration/constructor.js +6 -6
  26. package/lib/node/declaration/metavariable.js +6 -6
  27. package/lib/node/declaration/property.js +6 -6
  28. package/lib/node/declaration/simpleType.js +6 -6
  29. package/lib/node/declaration/typePrefix.js +6 -6
  30. package/lib/node/declaration/variable.js +6 -6
  31. package/lib/node/declaration.js +6 -22
  32. package/lib/node/deduction.js +4 -4
  33. package/lib/node/derivation.js +4 -4
  34. package/lib/node/document.js +107 -0
  35. package/lib/node/equality.js +4 -4
  36. package/lib/node/error.js +4 -4
  37. package/lib/node/frame.js +25 -14
  38. package/lib/node/header.js +4 -4
  39. package/lib/node/hypothesis.js +4 -4
  40. package/lib/node/judgement.js +8 -8
  41. package/lib/node/label.js +4 -4
  42. package/lib/node/labels.js +4 -4
  43. package/lib/node/lemma.js +6 -6
  44. package/lib/node/metaArgument.js +4 -4
  45. package/lib/node/metaLemma.js +6 -6
  46. package/lib/node/{topLevelMetaAssertion.js → metaLemmaMetaTheorem.js} +12 -12
  47. package/lib/node/metaType.js +4 -4
  48. package/lib/node/metatheorem.js +6 -6
  49. package/lib/node/metavariable.js +4 -4
  50. package/lib/node/nonsense.js +4 -4
  51. package/lib/node/parameter.js +4 -4
  52. package/lib/node/parenthesisedLabel.js +4 -4
  53. package/lib/node/parenthesisedLabels.js +4 -4
  54. package/lib/node/placeholder.js +107 -0
  55. package/lib/node/premise.js +4 -4
  56. package/lib/node/procedureCall.js +4 -4
  57. package/lib/node/procedureReference.js +4 -4
  58. package/lib/node/proof.js +4 -4
  59. package/lib/node/property.js +4 -4
  60. package/lib/node/propertyRelation.js +4 -4
  61. package/lib/node/qualification.js +4 -4
  62. package/lib/node/reference.js +4 -4
  63. package/lib/node/rule.js +4 -4
  64. package/lib/node/section.js +4 -4
  65. package/lib/node/signature.js +4 -4
  66. package/lib/node/statement.js +15 -4
  67. package/lib/node/step.js +4 -4
  68. package/lib/node/subDerivation.js +4 -4
  69. package/lib/node/subproof.js +4 -4
  70. package/lib/node/substitution/frame.js +6 -6
  71. package/lib/node/substitution/statement.js +6 -6
  72. package/lib/node/substitution/term.js +6 -6
  73. package/lib/node/substitution.js +107 -0
  74. package/lib/node/supposition.js +4 -4
  75. package/lib/node/term.js +27 -4
  76. package/lib/node/theorem.js +6 -6
  77. package/lib/node/type.js +4 -4
  78. package/lib/node/typePrefix.js +4 -4
  79. package/lib/node/types.js +4 -4
  80. package/lib/node/variable.js +4 -4
  81. package/lib/nominal/parser.js +3 -3
  82. package/lib/nonTerminalNode.js +222 -0
  83. package/lib/nonTerminalNodeMap.js +5 -3
  84. package/lib/ontology/assertion/contained.js +8 -9
  85. package/lib/ontology/assertion/defined.js +9 -10
  86. package/lib/ontology/assertion/satisfies.js +4 -4
  87. package/lib/ontology/assumption.js +379 -0
  88. package/lib/ontology/declaration/combinator.js +75 -33
  89. package/lib/ontology/declaration/complexType.js +110 -63
  90. package/lib/ontology/declaration/constructor.js +81 -38
  91. package/lib/ontology/declaration/metavariable.js +87 -39
  92. package/lib/ontology/declaration/simpleType.js +95 -48
  93. package/lib/ontology/declaration/typePrefix.js +87 -40
  94. package/lib/ontology/declaration/variable.js +87 -39
  95. package/lib/ontology/declaration.js +13 -338
  96. package/lib/ontology/equivalence.js +295 -0
  97. package/lib/ontology/equivalences.js +264 -0
  98. package/lib/ontology/frame.js +49 -54
  99. package/lib/ontology/judgement.js +8 -8
  100. package/lib/ontology/metavariable.js +4 -4
  101. package/lib/ontology/premise.js +14 -5
  102. package/lib/ontology/reference.js +3 -9
  103. package/lib/ontology/rule.js +3 -4
  104. package/lib/ontology/statement.js +28 -24
  105. package/lib/ontology/step.js +2 -3
  106. package/lib/ontology/subproof.js +2 -3
  107. package/lib/ontology/substitution/statement.js +77 -36
  108. package/lib/ontology/substitution/term.js +14 -34
  109. package/lib/ontology/substitution.js +18 -19
  110. package/lib/ontology/substitutions.js +425 -0
  111. package/lib/ontology/supposition.js +14 -5
  112. package/lib/ontology/term.js +33 -36
  113. package/lib/ontology/topLevelAssertion.js +2 -3
  114. package/lib/ontology/topLevelMetaAssertion.js +2 -3
  115. package/lib/ontology/variable.js +1 -34
  116. package/lib/preamble.js +7 -4
  117. package/lib/ruleNames.js +20 -12
  118. package/lib/unifier/intrinsicLevel.js +4 -12
  119. package/lib/unifier/metaLevel.js +14 -22
  120. package/lib/utilities/frame.js +18 -0
  121. package/lib/utilities/statement.js +18 -0
  122. package/lib/utilities/substitutions.js +43 -30
  123. package/lib/utilities/variable.js +5 -17
  124. package/package.json +10 -10
  125. package/src/assignment/equality.js +1 -1
  126. package/src/context/file.js +5 -4
  127. package/src/context/local.js +28 -5
  128. package/src/context/partial.js +9 -14
  129. package/src/context/temporary.js +120 -51
  130. package/src/mixins/step/unify.js +4 -4
  131. package/src/node/argument.js +1 -1
  132. package/src/node/assertion/contained.js +3 -3
  133. package/src/node/assertion/defined.js +3 -3
  134. package/src/node/assertion/property.js +3 -3
  135. package/src/node/assertion/satisfies.js +3 -3
  136. package/src/node/assertion/subproof.js +3 -3
  137. package/src/node/assertion/type.js +3 -3
  138. package/src/node/assertion.js +7 -0
  139. package/src/node/assumption.js +35 -0
  140. package/src/node/axiom.js +3 -3
  141. package/src/node/{topLevelAssertion.js → axiomLemmaTheoremConjecture.js} +2 -2
  142. package/src/node/body.js +1 -3
  143. package/src/node/combinator.js +1 -1
  144. package/src/node/conclusion.js +1 -1
  145. package/src/node/conjecture.js +3 -3
  146. package/src/node/constructor.js +1 -1
  147. package/src/node/declaration/combinator.js +3 -3
  148. package/src/node/declaration/complexType.js +3 -3
  149. package/src/node/declaration/constructor.js +3 -3
  150. package/src/node/declaration/metavariable.js +3 -3
  151. package/src/node/declaration/property.js +3 -3
  152. package/src/node/declaration/simpleType.js +3 -3
  153. package/src/node/declaration/typePrefix.js +3 -3
  154. package/src/node/declaration/variable.js +3 -3
  155. package/src/node/declaration.js +2 -18
  156. package/src/node/deduction.js +1 -1
  157. package/src/node/derivation.js +1 -1
  158. package/src/node/document.js +7 -0
  159. package/src/node/equality.js +1 -1
  160. package/src/node/error.js +1 -1
  161. package/src/node/frame.js +23 -11
  162. package/src/node/header.js +1 -1
  163. package/src/node/hypothesis.js +1 -1
  164. package/src/node/judgement.js +6 -6
  165. package/src/node/label.js +1 -1
  166. package/src/node/labels.js +1 -1
  167. package/src/node/lemma.js +3 -3
  168. package/src/node/metaArgument.js +1 -1
  169. package/src/node/metaLemma.js +3 -3
  170. package/src/node/{topLevelMetaAssertion.js → metaLemmaMetaTheorem.js} +2 -2
  171. package/src/node/metaType.js +1 -1
  172. package/src/node/metatheorem.js +3 -3
  173. package/src/node/metavariable.js +1 -1
  174. package/src/node/nonsense.js +1 -1
  175. package/src/node/parameter.js +1 -1
  176. package/src/node/parenthesisedLabel.js +1 -1
  177. package/src/node/parenthesisedLabels.js +1 -1
  178. package/src/node/placeholder.js +7 -0
  179. package/src/node/premise.js +1 -1
  180. package/src/node/procedureCall.js +1 -1
  181. package/src/node/procedureReference.js +1 -1
  182. package/src/node/proof.js +1 -1
  183. package/src/node/property.js +1 -1
  184. package/src/node/propertyRelation.js +1 -1
  185. package/src/node/qualification.js +1 -1
  186. package/src/node/reference.js +1 -1
  187. package/src/node/rule.js +2 -2
  188. package/src/node/section.js +1 -1
  189. package/src/node/signature.js +1 -1
  190. package/src/node/statement.js +13 -1
  191. package/src/node/step.js +1 -1
  192. package/src/node/subDerivation.js +1 -1
  193. package/src/node/subproof.js +1 -1
  194. package/src/node/substitution/frame.js +3 -3
  195. package/src/node/substitution/statement.js +3 -3
  196. package/src/node/substitution/term.js +3 -3
  197. package/src/node/substitution.js +7 -0
  198. package/src/node/supposition.js +1 -1
  199. package/src/node/term.js +27 -1
  200. package/src/node/theorem.js +3 -3
  201. package/src/node/type.js +1 -1
  202. package/src/node/typePrefix.js +1 -1
  203. package/src/node/types.js +1 -1
  204. package/src/node/variable.js +1 -1
  205. package/src/nominal/parser.js +2 -2
  206. package/src/{node/nonTerminal.js → nonTerminalNode.js} +31 -25
  207. package/src/nonTerminalNodeMap.js +10 -5
  208. package/src/ontology/assertion/contained.js +14 -14
  209. package/src/ontology/assertion/defined.js +13 -13
  210. package/src/ontology/assertion/satisfies.js +2 -1
  211. package/src/ontology/assumption.js +385 -0
  212. package/src/ontology/declaration/combinator.js +15 -24
  213. package/src/ontology/declaration/complexType.js +57 -53
  214. package/src/ontology/declaration/constructor.js +25 -31
  215. package/src/ontology/declaration/metavariable.js +25 -30
  216. package/src/ontology/declaration/simpleType.js +34 -38
  217. package/src/ontology/declaration/typePrefix.js +23 -31
  218. package/src/ontology/declaration/variable.js +26 -31
  219. package/src/ontology/declaration.js +8 -372
  220. package/src/{equivalence.js → ontology/equivalence.js} +4 -3
  221. package/src/{equivalences.js → ontology/equivalences.js} +14 -12
  222. package/src/ontology/frame.js +53 -63
  223. package/src/ontology/judgement.js +8 -8
  224. package/src/ontology/metavariable.js +2 -2
  225. package/src/ontology/premise.js +18 -4
  226. package/src/ontology/reference.js +4 -3
  227. package/src/ontology/rule.js +4 -3
  228. package/src/ontology/statement.js +31 -27
  229. package/src/ontology/step.js +2 -2
  230. package/src/ontology/subproof.js +2 -2
  231. package/src/ontology/substitution/statement.js +56 -53
  232. package/src/ontology/substitution/term.js +9 -35
  233. package/src/ontology/substitution.js +11 -15
  234. package/src/{substitutions.js → ontology/substitutions.js} +4 -3
  235. package/src/ontology/supposition.js +18 -4
  236. package/src/ontology/term.js +27 -39
  237. package/src/ontology/topLevelAssertion.js +2 -2
  238. package/src/ontology/topLevelMetaAssertion.js +2 -2
  239. package/src/ontology/variable.js +0 -54
  240. package/src/preamble.js +6 -3
  241. package/src/ruleNames.js +10 -8
  242. package/src/unifier/intrinsicLevel.js +3 -14
  243. package/src/unifier/metaLevel.js +14 -25
  244. package/src/utilities/frame.js +13 -0
  245. package/src/utilities/statement.js +13 -0
  246. package/src/utilities/substitutions.js +59 -31
  247. package/src/utilities/variable.js +1 -10
  248. package/lib/equivalence.js +0 -294
  249. package/lib/equivalences.js +0 -263
  250. package/lib/node/nonTerminal.js +0 -218
  251. package/lib/substitutions.js +0 -424
@@ -1,424 +0,0 @@
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 Substitutions;
9
- }
10
- });
11
- var _necessary = require("necessary");
12
- var _constants = require("./constants");
13
- function _array_like_to_array(arr, len) {
14
- if (len == null || len > arr.length) len = arr.length;
15
- for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
16
- return arr2;
17
- }
18
- function _array_without_holes(arr) {
19
- if (Array.isArray(arr)) return _array_like_to_array(arr);
20
- }
21
- function _class_call_check(instance, Constructor) {
22
- if (!(instance instanceof Constructor)) {
23
- throw new TypeError("Cannot call a class as a function");
24
- }
25
- }
26
- function _defineProperties(target, props) {
27
- for(var i = 0; i < props.length; i++){
28
- var descriptor = props[i];
29
- descriptor.enumerable = descriptor.enumerable || false;
30
- descriptor.configurable = true;
31
- if ("value" in descriptor) descriptor.writable = true;
32
- Object.defineProperty(target, descriptor.key, descriptor);
33
- }
34
- }
35
- function _create_class(Constructor, protoProps, staticProps) {
36
- if (protoProps) _defineProperties(Constructor.prototype, protoProps);
37
- if (staticProps) _defineProperties(Constructor, staticProps);
38
- return Constructor;
39
- }
40
- function _iterable_to_array(iter) {
41
- if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
42
- }
43
- function _non_iterable_spread() {
44
- throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
45
- }
46
- function _to_consumable_array(arr) {
47
- return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();
48
- }
49
- function _unsupported_iterable_to_array(o, minLen) {
50
- if (!o) return;
51
- if (typeof o === "string") return _array_like_to_array(o, minLen);
52
- var n = Object.prototype.toString.call(o).slice(8, -1);
53
- if (n === "Object" && o.constructor) n = o.constructor.name;
54
- if (n === "Map" || n === "Set") return Array.from(n);
55
- if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
56
- }
57
- var find = _necessary.arrayUtilities.find, first = _necessary.arrayUtilities.first, clear = _necessary.arrayUtilities.clear, prune = _necessary.arrayUtilities.prune, filter = _necessary.arrayUtilities.filter, compress = _necessary.arrayUtilities.compress, correlate = _necessary.arrayUtilities.correlate;
58
- var Substitutions = /*#__PURE__*/ function() {
59
- function Substitutions(array, savedArray) {
60
- _class_call_check(this, Substitutions);
61
- this.array = array;
62
- this.savedArray = savedArray;
63
- }
64
- _create_class(Substitutions, [
65
- {
66
- key: "getArray",
67
- value: function getArray() {
68
- return this.array;
69
- }
70
- },
71
- {
72
- key: "getSavedArray",
73
- value: function getSavedArray() {
74
- return this.savedArray;
75
- }
76
- },
77
- {
78
- key: "getLength",
79
- value: function getLength() {
80
- return this.array.length;
81
- }
82
- },
83
- {
84
- key: "getMetavariables",
85
- value: function getMetavariables() {
86
- var metavariables = [];
87
- this.forEachSubstitution(function(substitution) {
88
- var metavariable = substitution.getMetavariable();
89
- if (metavariable !== null) {
90
- metavariables.push(metavariable);
91
- }
92
- });
93
- compress(metavariables, function(metavariableA, metavariableB) {
94
- var metavariableAEqualToMetavariableB = metavariableB.isEqualTo(metavariableA);
95
- if (metavariableAEqualToMetavariableB) {
96
- return true;
97
- }
98
- });
99
- return metavariables;
100
- }
101
- },
102
- {
103
- key: "getNonTrivialLength",
104
- value: function getNonTrivialLength() {
105
- var nonTrivialLength = this.reduceSubstitution(function(nonTrivialLength, substitution) {
106
- var substitutionTrivial = substitution.isTrivial();
107
- if (!substitutionTrivial) {
108
- nonTrivialLength += 1;
109
- }
110
- return nonTrivialLength;
111
- }, 0);
112
- return nonTrivialLength;
113
- }
114
- },
115
- {
116
- key: "getFirstSubstitution",
117
- value: function getFirstSubstitution() {
118
- var firstSubstitution = null;
119
- var length = this.getLength();
120
- if (length > 0) {
121
- firstSubstitution = first(this.array);
122
- }
123
- return firstSubstitution;
124
- }
125
- },
126
- {
127
- key: "mapSubstitution",
128
- value: function mapSubstitution(callback) {
129
- return this.array.map(callback);
130
- }
131
- },
132
- {
133
- key: "findSubstitution",
134
- value: function findSubstitution(callback) {
135
- return this.array.find(callback) || null;
136
- } ///
137
- },
138
- {
139
- key: "someSubstitution",
140
- value: function someSubstitution(callback) {
141
- return this.array.some(callback);
142
- }
143
- },
144
- {
145
- key: "everySubstitution",
146
- value: function everySubstitution(callback) {
147
- return this.array.every(callback);
148
- }
149
- },
150
- {
151
- key: "reduceSubstitution",
152
- value: function reduceSubstitution(callback, initialValue) {
153
- return this.array.reduce(callback, initialValue);
154
- }
155
- },
156
- {
157
- key: "forEachSubstitution",
158
- value: function forEachSubstitution(callback) {
159
- this.array.forEach(callback);
160
- }
161
- },
162
- {
163
- key: "findSubstitutions",
164
- value: function findSubstitutions(callback) {
165
- var array = find(this.array, callback), substitutions = Substitutions.fromArray(array);
166
- return substitutions;
167
- }
168
- },
169
- {
170
- key: "findSubstitutionByVariable",
171
- value: function findSubstitutionByVariable(variable) {
172
- var substitution = this.findSubstitution(function(substitution) {
173
- var substitutionVariable = substitution.getVariable();
174
- if (substitutionVariable !== null) {
175
- var substitutionVariableEqualToVariable = substitutionVariable.isEqualTo(variable);
176
- if (substitutionVariableEqualToVariable) {
177
- return true;
178
- }
179
- }
180
- });
181
- return substitution;
182
- }
183
- },
184
- {
185
- key: "findSubstitutionsByMetavariable",
186
- value: function findSubstitutionsByMetavariable(metavariable) {
187
- var substitutions = this.findSubstitutions(function(substitution) {
188
- var substitutionMetavariableEqualToMetavariable = substitution.isMetavariableEqualToMetavariable(metavariable);
189
- if (substitutionMetavariableEqualToMetavariable) {
190
- return true;
191
- }
192
- });
193
- return substitutions;
194
- }
195
- },
196
- {
197
- key: "findSimpleSubstitutionByMetavariable",
198
- value: function findSimpleSubstitutionByMetavariable(metavariable) {
199
- var simpleSubstitution = this.findSubstitution(function(substitution) {
200
- var substitutionSimple = substitution.isSimple();
201
- if (substitutionSimple) {
202
- var simpleSubstitution = substitution, simpleSubstitutionMetavariableEqualToMetavariable = simpleSubstitution.isMetavariableEqualToMetavariable(metavariable);
203
- if (simpleSubstitutionMetavariableEqualToMetavariable) {
204
- return true;
205
- }
206
- }
207
- });
208
- return simpleSubstitution;
209
- }
210
- },
211
- {
212
- key: "findComplexSubstitutionsByMetavariable",
213
- value: function findComplexSubstitutionsByMetavariable(metavariable) {
214
- var complexSubstitutions = this.findSubstitutions(function(substitution) {
215
- var substitutionComplex = substitution.isComplex();
216
- if (substitutionComplex) {
217
- var complexSubstitution = substitution, complexSubstitutionMetavariableEqualToMetavariable = complexSubstitution.isMetavariableEqualToMetavariable(metavariable);
218
- if (complexSubstitutionMetavariableEqualToMetavariable) {
219
- return true;
220
- }
221
- }
222
- });
223
- return complexSubstitutions;
224
- }
225
- },
226
- {
227
- key: "findSubstitutionByMetavariableAndSubstitution",
228
- value: function findSubstitutionByMetavariableAndSubstitution(metavariable, substitution) {
229
- var substitutionA = substitution; ///
230
- substitution = this.findSubstitution(function(substitution) {
231
- var substitutionMetavariableEqualToMetavariable = substitution.isMetavariableEqualToMetavariable(metavariable);
232
- if (substitutionMetavariableEqualToMetavariable) {
233
- var substitutionB = substitution, substitutionBSubstitutionEqualToSubstitutionA = substitutionB.isSubstitutionEqualToSubstitution(substitutionA);
234
- if (substitutionBSubstitutionEqualToSubstitutionA) {
235
- return true;
236
- }
237
- }
238
- });
239
- return substitution;
240
- }
241
- },
242
- {
243
- key: "isSubstitutionPresentByVariable",
244
- value: function isSubstitutionPresentByVariable(variable) {
245
- var substitution = this.findSubstitutionByVariable(variable), substitutionPresent = substitution !== null;
246
- return substitutionPresent;
247
- }
248
- },
249
- {
250
- key: "isSimpleSubstitutionPresentByMetavariable",
251
- value: function isSimpleSubstitutionPresentByMetavariable(metavariable) {
252
- var simpleSubstitution = this.findSimpleSubstitutionByMetavariable(metavariable), simpleSubstitutionPresent = simpleSubstitution !== null;
253
- return simpleSubstitutionPresent;
254
- }
255
- },
256
- {
257
- key: "isSubstitutionPresentByMetavariableAndSubstitution",
258
- value: function isSubstitutionPresentByMetavariableAndSubstitution(metavariable, substitution) {
259
- substitution = this.findSubstitutionByMetavariableAndSubstitution(metavariable, substitution); ///
260
- var substitutionPresent = substitution !== null;
261
- return substitutionPresent;
262
- }
263
- },
264
- {
265
- key: "addSubstitution",
266
- value: function addSubstitution(substitution, context) {
267
- this.array.push(substitution);
268
- var substitutionString = substitution.getString();
269
- context.trace("Added the ".concat(substitutionString, " substitution."));
270
- }
271
- },
272
- {
273
- key: "removeSubstitution",
274
- value: function removeSubstitution(substitution, context) {
275
- var substitutionA = substitution; ///
276
- prune(this.array, function(substitution) {
277
- var substitutionB = substitution; ///
278
- if (substitutionA !== substitutionB) {
279
- return true;
280
- }
281
- });
282
- var substitutionString = substitution.getString();
283
- context.trace("Removed the ".concat(substitutionString, " substitution."));
284
- }
285
- },
286
- {
287
- key: "correlateSubstitutions",
288
- value: function correlateSubstitutions(substitutions) {
289
- var array = substitutions.getArray(), arrayA = array, arrayB = this.array, correlates = correlate(arrayA, arrayB, function(substitutionA, substitutionB) {
290
- var substitutionAIsEQualToSubstitutionB = substitutionA.isEqualTo(substitutionB);
291
- if (substitutionAIsEQualToSubstitutionB) {
292
- return true;
293
- }
294
- });
295
- return correlates;
296
- }
297
- },
298
- {
299
- key: "removeTrivialSubstitutions",
300
- value: function removeTrivialSubstitutions() {
301
- filter(this.array, function(substitution) {
302
- var trivial = substitution.isTrivial();
303
- if (!trivial) {
304
- return true;
305
- }
306
- });
307
- }
308
- },
309
- {
310
- key: "clear",
311
- value: function clear1() {
312
- clear(this.array);
313
- this.savedArray = null;
314
- }
315
- },
316
- {
317
- key: "resolve",
318
- value: function resolve(context) {
319
- var _this = this;
320
- var metavariables = this.getMetavariables();
321
- metavariables.forEach(function(metavariable) {
322
- var complexSubstitutions = _this.findComplexSubstitutionsByMetavariable(metavariable), complexSubstitutionsResolved = complexSubstitutions.everySubstitution(function(complexSubstitution) {
323
- var resolved;
324
- var substitutions = _this, substitution = complexSubstitution; ///
325
- resolved = substitution.isResolved();
326
- if (!resolved) {
327
- substitution.resolve(substitutions, context);
328
- }
329
- });
330
- if (complexSubstitutionsResolved) {
331
- return true;
332
- }
333
- });
334
- }
335
- },
336
- {
337
- key: "areResolved",
338
- value: function areResolved() {
339
- var _this = this;
340
- var metavariables = this.getMetavariables(), resolved = metavariables.every(function(metavariable) {
341
- var complexSubstitutions = _this.findComplexSubstitutionsByMetavariable(metavariable), complexSubstitutionsResolved = complexSubstitutions.everySubstitution(function(complexSubstitution) {
342
- var complexSubstitutionResolved = complexSubstitution.isResolved();
343
- if (complexSubstitutionResolved) {
344
- return true;
345
- }
346
- });
347
- if (complexSubstitutionsResolved) {
348
- return true;
349
- }
350
- });
351
- return resolved;
352
- }
353
- },
354
- {
355
- key: "snapshot",
356
- value: function snapshot() {
357
- this.savedArray = _to_consumable_array(this.array);
358
- }
359
- },
360
- {
361
- key: "rollback",
362
- value: function rollback(context) {
363
- var _this = this;
364
- var array = _to_consumable_array(this.array);
365
- leftDifference(array, this.savedArray);
366
- array.forEach(function(substitution) {
367
- _this.removeSubstitution(substitution, context);
368
- });
369
- this.array = _to_consumable_array(this.savedArray);
370
- this.savedArray = null;
371
- }
372
- },
373
- {
374
- key: "continue",
375
- value: function _continue() {
376
- this.savedArray = null;
377
- }
378
- },
379
- {
380
- key: "asString",
381
- value: function asString() {
382
- var string;
383
- var length = this.getLength();
384
- if (length === 0) {
385
- string = _constants.EMPTY_STRING;
386
- } else {
387
- var substitutionsString = this.array.reduce(function(substitutionsString, substitution) {
388
- var substitutionString = substitution.getString();
389
- substitutionsString = substitutionsString === null ? substitutionString : "".concat(substitutionsString, ", ").concat(substitutionString);
390
- return substitutionsString;
391
- }, null);
392
- string = substitutionsString; ///
393
- }
394
- return string;
395
- }
396
- }
397
- ], [
398
- {
399
- key: "fromArray",
400
- value: function fromArray(array) {
401
- var savedArray = [], substitutions = new Substitutions(array, savedArray);
402
- return substitutions;
403
- }
404
- },
405
- {
406
- key: "fromNothing",
407
- value: function fromNothing() {
408
- var array = [], savedArray = null, substitutions = new Substitutions(array, savedArray);
409
- return substitutions;
410
- }
411
- }
412
- ]);
413
- return Substitutions;
414
- }();
415
- function leftDifference(arrayA, arrayB) {
416
- filter(arrayA, function(elementA) {
417
- var arrayBIncludesElementA = arrayB.includes(elementA);
418
- if (!arrayBIncludesElementA) {
419
- return true;
420
- }
421
- });
422
- }
423
-
424
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9zdWJzdGl0dXRpb25zLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IHsgZmluZCwgZmlyc3QsIGNsZWFyLCBwcnVuZSwgZmlsdGVyLCBjb21wcmVzcywgY29ycmVsYXRlIH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3Vic3RpdHV0aW9ucyB7XG4gIGNvbnN0cnVjdG9yKGFycmF5LCBzYXZlZEFycmF5KSB7XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xuICAgIHRoaXMuc2F2ZWRBcnJheSA9IHNhdmVkQXJyYXk7XG4gIH1cblxuICBnZXRBcnJheSgpIHtcbiAgICByZXR1cm4gdGhpcy5hcnJheTtcbiAgfVxuXG4gIGdldFNhdmVkQXJyYXkoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2F2ZWRBcnJheTtcbiAgfVxuXG4gIGdldExlbmd0aCgpIHsgcmV0dXJuIHRoaXMuYXJyYXkubGVuZ3RoOyB9XG5cbiAgZ2V0TWV0YXZhcmlhYmxlcygpIHtcbiAgICBjb25zdCBtZXRhdmFyaWFibGVzID0gW107XG5cbiAgICB0aGlzLmZvckVhY2hTdWJzdGl0dXRpb24oKHN1YnN0aXR1dGlvbikgPT4ge1xuICAgICAgY29uc3QgbWV0YXZhcmlhYmxlID0gc3Vic3RpdHV0aW9uLmdldE1ldGF2YXJpYWJsZSgpO1xuXG4gICAgICBpZiAobWV0YXZhcmlhYmxlICE9PSBudWxsKSB7XG4gICAgICAgIG1ldGF2YXJpYWJsZXMucHVzaChtZXRhdmFyaWFibGUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29tcHJlc3MobWV0YXZhcmlhYmxlcywgKG1ldGF2YXJpYWJsZUEsIG1ldGF2YXJpYWJsZUIpID0+IHtcbiAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZUFFcXVhbFRvTWV0YXZhcmlhYmxlQiA9IG1ldGF2YXJpYWJsZUIuaXNFcXVhbFRvKG1ldGF2YXJpYWJsZUEpO1xuXG4gICAgICBpZiAobWV0YXZhcmlhYmxlQUVxdWFsVG9NZXRhdmFyaWFibGVCKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZXM7XG4gIH1cblxuICBnZXROb25Ucml2aWFsTGVuZ3RoKCkge1xuICAgIGNvbnN0IG5vblRyaXZpYWxMZW5ndGggPSB0aGlzLnJlZHVjZVN1YnN0aXR1dGlvbigobm9uVHJpdmlhbExlbmd0aCwgc3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICBjb25zdCBzdWJzdGl0dXRpb25Ucml2aWFsID0gc3Vic3RpdHV0aW9uLmlzVHJpdmlhbCgpO1xuXG4gICAgICBpZiAoIXN1YnN0aXR1dGlvblRyaXZpYWwpIHtcbiAgICAgICAgbm9uVHJpdmlhbExlbmd0aCArPSAxO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbm9uVHJpdmlhbExlbmd0aDtcbiAgICB9LCAwKTtcblxuICAgIHJldHVybiBub25Ucml2aWFsTGVuZ3RoO1xuICB9XG5cbiAgZ2V0Rmlyc3RTdWJzdGl0dXRpb24oKSB7XG4gICAgbGV0IGZpcnN0U3Vic3RpdHV0aW9uID0gbnVsbDtcblxuICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMuZ2V0TGVuZ3RoKCk7XG5cbiAgICBpZiAobGVuZ3RoID4gMCkge1xuICAgICAgZmlyc3RTdWJzdGl0dXRpb24gPSBmaXJzdCh0aGlzLmFycmF5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmlyc3RTdWJzdGl0dXRpb247XG4gIH1cblxuICBtYXBTdWJzdGl0dXRpb24oY2FsbGJhY2spIHsgcmV0dXJuIHRoaXMuYXJyYXkubWFwKGNhbGxiYWNrKTsgfVxuXG4gIGZpbmRTdWJzdGl0dXRpb24oY2FsbGJhY2spIHsgcmV0dXJuIHRoaXMuYXJyYXkuZmluZChjYWxsYmFjaykgfHwgbnVsbDsgfSAgLy8vXG5cbiAgc29tZVN1YnN0aXR1dGlvbihjYWxsYmFjaykgeyByZXR1cm4gdGhpcy5hcnJheS5zb21lKGNhbGxiYWNrKTsgfVxuXG4gIGV2ZXJ5U3Vic3RpdHV0aW9uKGNhbGxiYWNrKSB7IHJldHVybiB0aGlzLmFycmF5LmV2ZXJ5KGNhbGxiYWNrKTsgfVxuXG4gIHJlZHVjZVN1YnN0aXR1dGlvbihjYWxsYmFjaywgaW5pdGlhbFZhbHVlKSB7IHJldHVybiB0aGlzLmFycmF5LnJlZHVjZShjYWxsYmFjaywgaW5pdGlhbFZhbHVlKTsgfVxuXG4gIGZvckVhY2hTdWJzdGl0dXRpb24oY2FsbGJhY2spIHsgdGhpcy5hcnJheS5mb3JFYWNoKGNhbGxiYWNrKTsgfVxuXG4gIGZpbmRTdWJzdGl0dXRpb25zKGNhbGxiYWNrKSB7XG4gICAgY29uc3QgYXJyYXkgPSBmaW5kKHRoaXMuYXJyYXksIGNhbGxiYWNrKSxcbiAgICAgICAgICBzdWJzdGl0dXRpb25zID0gU3Vic3RpdHV0aW9ucy5mcm9tQXJyYXkoYXJyYXkpO1xuXG4gICAgcmV0dXJuIHN1YnN0aXR1dGlvbnM7XG4gIH1cblxuICBmaW5kU3Vic3RpdHV0aW9uQnlWYXJpYWJsZSh2YXJpYWJsZSkge1xuICAgIGNvbnN0IHN1YnN0aXR1dGlvbiA9IHRoaXMuZmluZFN1YnN0aXR1dGlvbigoc3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICBjb25zdCBzdWJzdGl0dXRpb25WYXJpYWJsZSA9IHN1YnN0aXR1dGlvbi5nZXRWYXJpYWJsZSgpO1xuXG4gICAgICBpZiAoc3Vic3RpdHV0aW9uVmFyaWFibGUgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3Qgc3Vic3RpdHV0aW9uVmFyaWFibGVFcXVhbFRvVmFyaWFibGUgPSBzdWJzdGl0dXRpb25WYXJpYWJsZS5pc0VxdWFsVG8odmFyaWFibGUpO1xuXG4gICAgICAgIGlmIChzdWJzdGl0dXRpb25WYXJpYWJsZUVxdWFsVG9WYXJpYWJsZSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gc3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgZmluZFN1YnN0aXR1dGlvbnNCeU1ldGF2YXJpYWJsZShtZXRhdmFyaWFibGUpIHtcbiAgICBjb25zdCBzdWJzdGl0dXRpb25zID0gdGhpcy5maW5kU3Vic3RpdHV0aW9ucygoc3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICBjb25zdCBzdWJzdGl0dXRpb25NZXRhdmFyaWFibGVFcXVhbFRvTWV0YXZhcmlhYmxlID0gc3Vic3RpdHV0aW9uLmlzTWV0YXZhcmlhYmxlRXF1YWxUb01ldGF2YXJpYWJsZShtZXRhdmFyaWFibGUpO1xuXG4gICAgICBpZiAoc3Vic3RpdHV0aW9uTWV0YXZhcmlhYmxlRXF1YWxUb01ldGF2YXJpYWJsZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBzdWJzdGl0dXRpb25zO1xuICB9XG5cbiAgZmluZFNpbXBsZVN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlKG1ldGF2YXJpYWJsZSkge1xuICAgIGNvbnN0IHNpbXBsZVN1YnN0aXR1dGlvbiA9IHRoaXMuZmluZFN1YnN0aXR1dGlvbigoc3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICBjb25zdCBzdWJzdGl0dXRpb25TaW1wbGUgPSBzdWJzdGl0dXRpb24uaXNTaW1wbGUoKTtcblxuICAgICAgaWYgKHN1YnN0aXR1dGlvblNpbXBsZSkge1xuICAgICAgICBjb25zdCBzaW1wbGVTdWJzdGl0dXRpb24gPSBzdWJzdGl0dXRpb24sICAvLy9cbiAgICAgICAgICAgICAgc2ltcGxlU3Vic3RpdHV0aW9uTWV0YXZhcmlhYmxlRXF1YWxUb01ldGF2YXJpYWJsZSA9IHNpbXBsZVN1YnN0aXR1dGlvbi5pc01ldGF2YXJpYWJsZUVxdWFsVG9NZXRhdmFyaWFibGUobWV0YXZhcmlhYmxlKTtcblxuICAgICAgICBpZiAoc2ltcGxlU3Vic3RpdHV0aW9uTWV0YXZhcmlhYmxlRXF1YWxUb01ldGF2YXJpYWJsZSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gc2ltcGxlU3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgZmluZENvbXBsZXhTdWJzdGl0dXRpb25zQnlNZXRhdmFyaWFibGUobWV0YXZhcmlhYmxlKSB7XG4gICAgY29uc3QgY29tcGxleFN1YnN0aXR1dGlvbnMgPSB0aGlzLmZpbmRTdWJzdGl0dXRpb25zKChzdWJzdGl0dXRpb24pID0+IHtcbiAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbkNvbXBsZXggPSBzdWJzdGl0dXRpb24uaXNDb21wbGV4KCk7XG5cbiAgICAgIGlmIChzdWJzdGl0dXRpb25Db21wbGV4KSB7XG4gICAgICAgIGNvbnN0IGNvbXBsZXhTdWJzdGl0dXRpb24gPSBzdWJzdGl0dXRpb24sIC8vL1xuICAgICAgICAgICAgICBjb21wbGV4U3Vic3RpdHV0aW9uTWV0YXZhcmlhYmxlRXF1YWxUb01ldGF2YXJpYWJsZSA9IGNvbXBsZXhTdWJzdGl0dXRpb24uaXNNZXRhdmFyaWFibGVFcXVhbFRvTWV0YXZhcmlhYmxlKG1ldGF2YXJpYWJsZSk7XG5cbiAgICAgICAgaWYgKGNvbXBsZXhTdWJzdGl0dXRpb25NZXRhdmFyaWFibGVFcXVhbFRvTWV0YXZhcmlhYmxlKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBjb21wbGV4U3Vic3RpdHV0aW9ucztcbiAgfVxuXG4gIGZpbmRTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZUFuZFN1YnN0aXR1dGlvbihtZXRhdmFyaWFibGUsIHN1YnN0aXR1dGlvbikge1xuICAgIGNvbnN0IHN1YnN0aXR1dGlvbkEgPSBzdWJzdGl0dXRpb247IC8vL1xuXG4gICAgc3Vic3RpdHV0aW9uID0gdGhpcy5maW5kU3Vic3RpdHV0aW9uKChzdWJzdGl0dXRpb24pID0+IHsgIC8vL1xuICAgICAgY29uc3Qgc3Vic3RpdHV0aW9uTWV0YXZhcmlhYmxlRXF1YWxUb01ldGF2YXJpYWJsZSA9IHN1YnN0aXR1dGlvbi5pc01ldGF2YXJpYWJsZUVxdWFsVG9NZXRhdmFyaWFibGUobWV0YXZhcmlhYmxlKTtcblxuICAgICAgaWYgKHN1YnN0aXR1dGlvbk1ldGF2YXJpYWJsZUVxdWFsVG9NZXRhdmFyaWFibGUpIHtcbiAgICAgICAgY29uc3Qgc3Vic3RpdHV0aW9uQiA9IHN1YnN0aXR1dGlvbiwgLy8vXG4gICAgICAgICAgICAgIHN1YnN0aXR1dGlvbkJTdWJzdGl0dXRpb25FcXVhbFRvU3Vic3RpdHV0aW9uQSA9IHN1YnN0aXR1dGlvbkIuaXNTdWJzdGl0dXRpb25FcXVhbFRvU3Vic3RpdHV0aW9uKHN1YnN0aXR1dGlvbkEpO1xuXG4gICAgICAgIGlmIChzdWJzdGl0dXRpb25CU3Vic3RpdHV0aW9uRXF1YWxUb1N1YnN0aXR1dGlvbkEpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIGlzU3Vic3RpdHV0aW9uUHJlc2VudEJ5VmFyaWFibGUodmFyaWFibGUpIHtcbiAgICBjb25zdCBzdWJzdGl0dXRpb24gPSB0aGlzLmZpbmRTdWJzdGl0dXRpb25CeVZhcmlhYmxlKHZhcmlhYmxlKSxcbiAgICAgICAgICBzdWJzdGl0dXRpb25QcmVzZW50ID0gKHN1YnN0aXR1dGlvbiAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gc3Vic3RpdHV0aW9uUHJlc2VudDtcbiAgfVxuXG4gIGlzU2ltcGxlU3Vic3RpdHV0aW9uUHJlc2VudEJ5TWV0YXZhcmlhYmxlKG1ldGF2YXJpYWJsZSkge1xuICAgIGNvbnN0IHNpbXBsZVN1YnN0aXR1dGlvbiA9IHRoaXMuZmluZFNpbXBsZVN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlKG1ldGF2YXJpYWJsZSksXG4gICAgICAgICAgc2ltcGxlU3Vic3RpdHV0aW9uUHJlc2VudCA9IChzaW1wbGVTdWJzdGl0dXRpb24gIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIHNpbXBsZVN1YnN0aXR1dGlvblByZXNlbnQ7XG4gIH1cblxuICBpc1N1YnN0aXR1dGlvblByZXNlbnRCeU1ldGF2YXJpYWJsZUFuZFN1YnN0aXR1dGlvbihtZXRhdmFyaWFibGUsIHN1YnN0aXR1dGlvbikge1xuICAgIHN1YnN0aXR1dGlvbiA9IHRoaXMuZmluZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlQW5kU3Vic3RpdHV0aW9uKG1ldGF2YXJpYWJsZSwgc3Vic3RpdHV0aW9uKTsgIC8vL1xuXG4gICAgY29uc3Qgc3Vic3RpdHV0aW9uUHJlc2VudCA9IChzdWJzdGl0dXRpb24gIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIHN1YnN0aXR1dGlvblByZXNlbnQ7XG4gIH1cblxuICBhZGRTdWJzdGl0dXRpb24oc3Vic3RpdHV0aW9uLCBjb250ZXh0KSB7XG4gICAgdGhpcy5hcnJheS5wdXNoKHN1YnN0aXR1dGlvbik7XG5cbiAgICBjb25zdCBzdWJzdGl0dXRpb25TdHJpbmcgPSBzdWJzdGl0dXRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRlZCB0aGUgJHtzdWJzdGl0dXRpb25TdHJpbmd9IHN1YnN0aXR1dGlvbi5gKTtcbiAgfVxuXG4gIHJlbW92ZVN1YnN0aXR1dGlvbihzdWJzdGl0dXRpb24sIGNvbnRleHQpIHtcbiAgICBjb25zdCBzdWJzdGl0dXRpb25BID0gc3Vic3RpdHV0aW9uOyAvLy9cblxuICAgIHBydW5lKHRoaXMuYXJyYXksIChzdWJzdGl0dXRpb24pID0+IHtcbiAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbkIgPSBzdWJzdGl0dXRpb247IC8vL1xuXG4gICAgICBpZiAoc3Vic3RpdHV0aW9uQSAhPT0gc3Vic3RpdHV0aW9uQikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IHN1YnN0aXR1dGlvblN0cmluZyA9IHN1YnN0aXR1dGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFJlbW92ZWQgdGhlICR7c3Vic3RpdHV0aW9uU3RyaW5nfSBzdWJzdGl0dXRpb24uYCk7XG4gIH1cblxuICBjb3JyZWxhdGVTdWJzdGl0dXRpb25zKHN1YnN0aXR1dGlvbnMpIHtcbiAgICBjb25zdCBhcnJheSA9IHN1YnN0aXR1dGlvbnMuZ2V0QXJyYXkoKSxcbiAgICAgICAgICBhcnJheUEgPSBhcnJheSwgLy8vXG4gICAgICAgICAgYXJyYXlCID0gdGhpcy5hcnJheSwgIC8vL1xuICAgICAgICAgIGNvcnJlbGF0ZXMgPSBjb3JyZWxhdGUoYXJyYXlBLCBhcnJheUIsIChzdWJzdGl0dXRpb25BLCBzdWJzdGl0dXRpb25CKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdWJzdGl0dXRpb25BSXNFUXVhbFRvU3Vic3RpdHV0aW9uQiA9IHN1YnN0aXR1dGlvbkEuaXNFcXVhbFRvKHN1YnN0aXR1dGlvbkIpO1xuXG4gICAgICAgICAgICBpZiAoc3Vic3RpdHV0aW9uQUlzRVF1YWxUb1N1YnN0aXR1dGlvbkIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICByZXR1cm4gY29ycmVsYXRlcztcbiAgfVxuXG4gIHJlbW92ZVRyaXZpYWxTdWJzdGl0dXRpb25zKCkgIHtcbiAgICBmaWx0ZXIodGhpcy5hcnJheSwgKHN1YnN0aXR1dGlvbikgPT4ge1xuICAgICAgY29uc3QgdHJpdmlhbCA9IHN1YnN0aXR1dGlvbi5pc1RyaXZpYWwoKTtcblxuICAgICAgaWYgKCF0cml2aWFsKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY2xlYXIoKSB7XG4gICAgY2xlYXIodGhpcy5hcnJheSk7XG5cbiAgICB0aGlzLnNhdmVkQXJyYXkgPSBudWxsO1xuICB9XG5cbiAgcmVzb2x2ZShjb250ZXh0KSB7XG4gICAgY29uc3QgbWV0YXZhcmlhYmxlcyA9IHRoaXMuZ2V0TWV0YXZhcmlhYmxlcygpO1xuXG4gICAgbWV0YXZhcmlhYmxlcy5mb3JFYWNoKChtZXRhdmFyaWFibGUpID0+IHtcbiAgICAgIGNvbnN0IGNvbXBsZXhTdWJzdGl0dXRpb25zID0gdGhpcy5maW5kQ29tcGxleFN1YnN0aXR1dGlvbnNCeU1ldGF2YXJpYWJsZShtZXRhdmFyaWFibGUpLFxuICAgICAgICAgICAgY29tcGxleFN1YnN0aXR1dGlvbnNSZXNvbHZlZCA9IGNvbXBsZXhTdWJzdGl0dXRpb25zLmV2ZXJ5U3Vic3RpdHV0aW9uKChjb21wbGV4U3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICAgICAgICAgIGxldCByZXNvbHZlZDtcblxuICAgICAgICAgICAgICBjb25zdCBzdWJzdGl0dXRpb25zID0gdGhpcywgLy8vXG4gICAgICAgICAgICAgICAgICAgIHN1YnN0aXR1dGlvbiA9IGNvbXBsZXhTdWJzdGl0dXRpb247IC8vL1xuXG4gICAgICAgICAgICAgIHJlc29sdmVkID0gc3Vic3RpdHV0aW9uLmlzUmVzb2x2ZWQoKTtcblxuICAgICAgICAgICAgICBpZiAoIXJlc29sdmVkKSB7XG4gICAgICAgICAgICAgICAgc3Vic3RpdHV0aW9uLnJlc29sdmUoc3Vic3RpdHV0aW9ucywgY29udGV4dCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICBpZiAoY29tcGxleFN1YnN0aXR1dGlvbnNSZXNvbHZlZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFyZVJlc29sdmVkKCkge1xuICAgIGNvbnN0IG1ldGF2YXJpYWJsZXMgPSB0aGlzLmdldE1ldGF2YXJpYWJsZXMoKSxcbiAgICAgICAgICByZXNvbHZlZCA9IG1ldGF2YXJpYWJsZXMuZXZlcnkoKG1ldGF2YXJpYWJsZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29tcGxleFN1YnN0aXR1dGlvbnMgPSB0aGlzLmZpbmRDb21wbGV4U3Vic3RpdHV0aW9uc0J5TWV0YXZhcmlhYmxlKG1ldGF2YXJpYWJsZSksXG4gICAgICAgICAgICAgICAgICBjb21wbGV4U3Vic3RpdHV0aW9uc1Jlc29sdmVkID0gY29tcGxleFN1YnN0aXR1dGlvbnMuZXZlcnlTdWJzdGl0dXRpb24oKGNvbXBsZXhTdWJzdGl0dXRpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBsZXhTdWJzdGl0dXRpb25SZXNvbHZlZCA9IGNvbXBsZXhTdWJzdGl0dXRpb24uaXNSZXNvbHZlZCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tcGxleFN1YnN0aXR1dGlvblJlc29sdmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21wbGV4U3Vic3RpdHV0aW9uc1Jlc29sdmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc29sdmVkO1xuICB9XG5cbiAgc25hcHNob3QoKSB7XG4gICAgdGhpcy5zYXZlZEFycmF5ID0gW1xuICAgICAgLi4udGhpcy5hcnJheVxuICAgIF07XG4gIH1cblxuICByb2xsYmFjayhjb250ZXh0KSB7XG4gICAgY29uc3QgYXJyYXkgPSBbXG4gICAgICAuLi50aGlzLmFycmF5XG4gICAgXTtcblxuICAgIGxlZnREaWZmZXJlbmNlKGFycmF5LCB0aGlzLnNhdmVkQXJyYXkpO1xuXG4gICAgYXJyYXkuZm9yRWFjaCgoc3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICB0aGlzLnJlbW92ZVN1YnN0aXR1dGlvbihzdWJzdGl0dXRpb24sIGNvbnRleHQpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5hcnJheSA9IFtcbiAgICAgIC4uLnRoaXMuc2F2ZWRBcnJheVxuICAgIF07XG5cbiAgICB0aGlzLnNhdmVkQXJyYXkgPSBudWxsO1xuICB9XG5cbiAgY29udGludWUoKSB7XG4gICAgdGhpcy5zYXZlZEFycmF5ID0gbnVsbDtcbiAgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGxldCBzdHJpbmc7XG5cbiAgICBjb25zdCBsZW5ndGggPSB0aGlzLmdldExlbmd0aCgpO1xuXG4gICAgaWYgKGxlbmd0aCA9PT0gMCkge1xuICAgICAgc3RyaW5nID0gRU1QVFlfU1RSSU5HO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzdWJzdGl0dXRpb25zU3RyaW5nID0gdGhpcy5hcnJheS5yZWR1Y2UoKHN1YnN0aXR1dGlvbnNTdHJpbmcsIHN1YnN0aXR1dGlvbikgPT4ge1xuICAgICAgICBjb25zdCBzdWJzdGl0dXRpb25TdHJpbmcgPSBzdWJzdGl0dXRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICAgICAgc3Vic3RpdHV0aW9uc1N0cmluZyA9IChzdWJzdGl0dXRpb25zU3RyaW5nID09PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzdGl0dXRpb25TdHJpbmcgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke3N1YnN0aXR1dGlvbnNTdHJpbmd9LCAke3N1YnN0aXR1dGlvblN0cmluZ31gO1xuXG4gICAgICAgIHJldHVybiBzdWJzdGl0dXRpb25zU3RyaW5nO1xuICAgICAgfSwgbnVsbCk7XG5cbiAgICAgIHN0cmluZyA9IHN1YnN0aXR1dGlvbnNTdHJpbmc7IC8vL1xuICAgIH1cblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBzdGF0aWMgZnJvbUFycmF5KGFycmF5KSB7XG4gICAgY29uc3Qgc2F2ZWRBcnJheSA9IFtdLFxuICAgICAgICAgIHN1YnN0aXR1dGlvbnMgPSBuZXcgU3Vic3RpdHV0aW9ucyhhcnJheSwgc2F2ZWRBcnJheSk7XG5cbiAgICByZXR1cm4gc3Vic3RpdHV0aW9ucztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBhcnJheSA9IFtdLFxuICAgICAgICAgIHNhdmVkQXJyYXkgPSBudWxsLFxuICAgICAgICAgIHN1YnN0aXR1dGlvbnMgPSBuZXcgU3Vic3RpdHV0aW9ucyhhcnJheSwgc2F2ZWRBcnJheSk7XG5cbiAgICByZXR1cm4gc3Vic3RpdHV0aW9ucztcbiAgfVxufVxuXG5mdW5jdGlvbiBsZWZ0RGlmZmVyZW5jZShhcnJheUEsIGFycmF5Qikge1xuICBmaWx0ZXIoYXJyYXlBLCAoZWxlbWVudEEpID0+IHtcbiAgICBjb25zdCBhcnJheUJJbmNsdWRlc0VsZW1lbnRBID0gYXJyYXlCLmluY2x1ZGVzKGVsZW1lbnRBKTtcblxuICAgIGlmICghYXJyYXlCSW5jbHVkZXNFbGVtZW50QSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcbn1cbiJdLCJuYW1lcyI6WyJTdWJzdGl0dXRpb25zIiwiZmluZCIsImFycmF5VXRpbGl0aWVzIiwiZmlyc3QiLCJjbGVhciIsInBydW5lIiwiZmlsdGVyIiwiY29tcHJlc3MiLCJjb3JyZWxhdGUiLCJhcnJheSIsInNhdmVkQXJyYXkiLCJnZXRBcnJheSIsImdldFNhdmVkQXJyYXkiLCJnZXRMZW5ndGgiLCJsZW5ndGgiLCJnZXRNZXRhdmFyaWFibGVzIiwibWV0YXZhcmlhYmxlcyIsImZvckVhY2hTdWJzdGl0dXRpb24iLCJzdWJzdGl0dXRpb24iLCJtZXRhdmFyaWFibGUiLCJnZXRNZXRhdmFyaWFibGUiLCJwdXNoIiwibWV0YXZhcmlhYmxlQSIsIm1ldGF2YXJpYWJsZUIiLCJtZXRhdmFyaWFibGVBRXF1YWxUb01ldGF2YXJpYWJsZUIiLCJpc0VxdWFsVG8iLCJnZXROb25Ucml2aWFsTGVuZ3RoIiwibm9uVHJpdmlhbExlbmd0aCIsInJlZHVjZVN1YnN0aXR1dGlvbiIsInN1YnN0aXR1dGlvblRyaXZpYWwiLCJpc1RyaXZpYWwiLCJnZXRGaXJzdFN1YnN0aXR1dGlvbiIsImZpcnN0U3Vic3RpdHV0aW9uIiwibWFwU3Vic3RpdHV0aW9uIiwiY2FsbGJhY2siLCJtYXAiLCJmaW5kU3Vic3RpdHV0aW9uIiwic29tZVN1YnN0aXR1dGlvbiIsInNvbWUiLCJldmVyeVN1YnN0aXR1dGlvbiIsImV2ZXJ5IiwiaW5pdGlhbFZhbHVlIiwicmVkdWNlIiwiZm9yRWFjaCIsImZpbmRTdWJzdGl0dXRpb25zIiwic3Vic3RpdHV0aW9ucyIsImZyb21BcnJheSIsImZpbmRTdWJzdGl0dXRpb25CeVZhcmlhYmxlIiwidmFyaWFibGUiLCJzdWJzdGl0dXRpb25WYXJpYWJsZSIsImdldFZhcmlhYmxlIiwic3Vic3RpdHV0aW9uVmFyaWFibGVFcXVhbFRvVmFyaWFibGUiLCJmaW5kU3Vic3RpdHV0aW9uc0J5TWV0YXZhcmlhYmxlIiwic3Vic3RpdHV0aW9uTWV0YXZhcmlhYmxlRXF1YWxUb01ldGF2YXJpYWJsZSIsImlzTWV0YXZhcmlhYmxlRXF1YWxUb01ldGF2YXJpYWJsZSIsImZpbmRTaW1wbGVTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZSIsInNpbXBsZVN1YnN0aXR1dGlvbiIsInN1YnN0aXR1dGlvblNpbXBsZSIsImlzU2ltcGxlIiwic2ltcGxlU3Vic3RpdHV0aW9uTWV0YXZhcmlhYmxlRXF1YWxUb01ldGF2YXJpYWJsZSIsImZpbmRDb21wbGV4U3Vic3RpdHV0aW9uc0J5TWV0YXZhcmlhYmxlIiwiY29tcGxleFN1YnN0aXR1dGlvbnMiLCJzdWJzdGl0dXRpb25Db21wbGV4IiwiaXNDb21wbGV4IiwiY29tcGxleFN1YnN0aXR1dGlvbiIsImNvbXBsZXhTdWJzdGl0dXRpb25NZXRhdmFyaWFibGVFcXVhbFRvTWV0YXZhcmlhYmxlIiwiZmluZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlQW5kU3Vic3RpdHV0aW9uIiwic3Vic3RpdHV0aW9uQSIsInN1YnN0aXR1dGlvbkIiLCJzdWJzdGl0dXRpb25CU3Vic3RpdHV0aW9uRXF1YWxUb1N1YnN0aXR1dGlvbkEiLCJpc1N1YnN0aXR1dGlvbkVxdWFsVG9TdWJzdGl0dXRpb24iLCJpc1N1YnN0aXR1dGlvblByZXNlbnRCeVZhcmlhYmxlIiwic3Vic3RpdHV0aW9uUHJlc2VudCIsImlzU2ltcGxlU3Vic3RpdHV0aW9uUHJlc2VudEJ5TWV0YXZhcmlhYmxlIiwic2ltcGxlU3Vic3RpdHV0aW9uUHJlc2VudCIsImlzU3Vic3RpdHV0aW9uUHJlc2VudEJ5TWV0YXZhcmlhYmxlQW5kU3Vic3RpdHV0aW9uIiwiYWRkU3Vic3RpdHV0aW9uIiwiY29udGV4dCIsInN1YnN0aXR1dGlvblN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwicmVtb3ZlU3Vic3RpdHV0aW9uIiwiY29ycmVsYXRlU3Vic3RpdHV0aW9ucyIsImFycmF5QSIsImFycmF5QiIsImNvcnJlbGF0ZXMiLCJzdWJzdGl0dXRpb25BSXNFUXVhbFRvU3Vic3RpdHV0aW9uQiIsInJlbW92ZVRyaXZpYWxTdWJzdGl0dXRpb25zIiwidHJpdmlhbCIsInJlc29sdmUiLCJjb21wbGV4U3Vic3RpdHV0aW9uc1Jlc29sdmVkIiwicmVzb2x2ZWQiLCJpc1Jlc29sdmVkIiwiYXJlUmVzb2x2ZWQiLCJjb21wbGV4U3Vic3RpdHV0aW9uUmVzb2x2ZWQiLCJzbmFwc2hvdCIsInJvbGxiYWNrIiwibGVmdERpZmZlcmVuY2UiLCJjb250aW51ZSIsImFzU3RyaW5nIiwic3RyaW5nIiwiRU1QVFlfU1RSSU5HIiwic3Vic3RpdHV0aW9uc1N0cmluZyIsImZyb21Ob3RoaW5nIiwiZWxlbWVudEEiLCJhcnJheUJJbmNsdWRlc0VsZW1lbnRBIiwiaW5jbHVkZXMiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O2VBUXFCQTs7O3lCQU5VO3lCQUVGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFN0IsSUFBUUMsT0FBMkRDLHlCQUFjLENBQXpFRCxNQUFNRSxRQUFxREQseUJBQWMsQ0FBbkVDLE9BQU9DLFFBQThDRix5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