occam-verify-cli 1.0.800 → 1.0.806

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 (73) hide show
  1. package/lib/context/branching.js +2 -2
  2. package/lib/context/ephemeral.js +186 -69
  3. package/lib/context/file/nominal.js +87 -52
  4. package/lib/context/liminal.js +2 -2
  5. package/lib/context/proof.js +55 -55
  6. package/lib/context/synthetic.js +151 -74
  7. package/lib/context.js +57 -17
  8. package/lib/element/assertion/defined.js +3 -3
  9. package/lib/element/assumption/metaLevel.js +6 -4
  10. package/lib/element/combinator.js +4 -2
  11. package/lib/element/conclusion.js +4 -2
  12. package/lib/element/constructor.js +4 -2
  13. package/lib/element/declaration/metavariable.js +10 -9
  14. package/lib/element/declaration/variable.js +7 -7
  15. package/lib/element/deduction.js +4 -2
  16. package/lib/element/label.js +9 -5
  17. package/lib/element/metavariable.js +34 -34
  18. package/lib/element/proofAssertion/premise.js +4 -3
  19. package/lib/element/proofAssertion/step.js +4 -2
  20. package/lib/element/reference.js +6 -4
  21. package/lib/element/statement.js +9 -1
  22. package/lib/element/substitution/frame.js +43 -29
  23. package/lib/element/substitution/reference.js +38 -28
  24. package/lib/element/substitution/statement.js +46 -38
  25. package/lib/element/substitution/term.js +49 -35
  26. package/lib/element/variable.js +6 -7
  27. package/lib/preamble.js +1 -2
  28. package/lib/process/assign.js +11 -10
  29. package/lib/process/equate.js +3 -2
  30. package/lib/process/unify.js +7 -7
  31. package/lib/utilities/context.js +13 -5
  32. package/lib/utilities/element.js +1 -1
  33. package/lib/utilities/equivalences.js +131 -0
  34. package/lib/utilities/json.js +59 -1
  35. package/lib/utilities/validation.js +4 -3
  36. package/package.json +2 -2
  37. package/src/context/branching.js +2 -2
  38. package/src/context/ephemeral.js +421 -237
  39. package/src/context/file/nominal.js +127 -77
  40. package/src/context/liminal.js +2 -2
  41. package/src/context/proof.js +81 -82
  42. package/src/context/synthetic.js +198 -88
  43. package/src/context.js +81 -20
  44. package/src/element/assertion/defined.js +4 -4
  45. package/src/element/assumption/metaLevel.js +8 -6
  46. package/src/element/combinator.js +4 -2
  47. package/src/element/conclusion.js +4 -2
  48. package/src/element/constructor.js +4 -2
  49. package/src/element/declaration/metavariable.js +10 -8
  50. package/src/element/declaration/variable.js +8 -7
  51. package/src/element/deduction.js +4 -2
  52. package/src/element/label.js +11 -7
  53. package/src/element/metavariable.js +11 -11
  54. package/src/element/proofAssertion/premise.js +4 -4
  55. package/src/element/proofAssertion/step.js +4 -2
  56. package/src/element/reference.js +7 -5
  57. package/src/element/statement.js +14 -0
  58. package/src/element/substitution/frame.js +47 -32
  59. package/src/element/substitution/reference.js +44 -34
  60. package/src/element/substitution/statement.js +63 -54
  61. package/src/element/substitution/term.js +53 -38
  62. package/src/element/variable.js +6 -7
  63. package/src/preamble.js +0 -1
  64. package/src/process/assign.js +17 -14
  65. package/src/process/equate.js +3 -1
  66. package/src/process/unify.js +10 -13
  67. package/src/utilities/context.js +13 -6
  68. package/src/utilities/element.js +1 -0
  69. package/src/utilities/equivalences.js +158 -0
  70. package/src/utilities/json.js +66 -0
  71. package/src/utilities/validation.js +6 -5
  72. package/lib/element/equivalences.js +0 -173
  73. package/src/element/equivalences.js +0 -237
@@ -1,173 +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 _default;
9
- }
10
- });
11
- const _occamlanguages = require("occam-languages");
12
- const _necessary = require("necessary");
13
- const _elements = require("../elements");
14
- const _constants = require("../constants");
15
- const _equivalence = require("../utilities/equivalence");
16
- const { push, separate } = _necessary.arrayUtilities;
17
- const _default = (0, _elements.define)(class Equivalences extends _occamlanguages.Element {
18
- constructor(context, string, node, array){
19
- super(context, string, node);
20
- this.array = array;
21
- }
22
- getArray() {
23
- return this.array;
24
- }
25
- getEquivalencesNode() {
26
- const node = this.getNode(), equivalencesNode = node; ///
27
- return equivalencesNode;
28
- }
29
- getLength() {
30
- return this.array.length;
31
- }
32
- getTypes() {
33
- const types = this.array.map((equivalence)=>{
34
- const type = equivalence.getType();
35
- return type;
36
- });
37
- return types;
38
- }
39
- addEquivalence(equivalence) {
40
- this.array.push(equivalence);
41
- }
42
- addEquivalences(equivalences) {
43
- const array = equivalences.getArray();
44
- push(this.array, array);
45
- }
46
- someEquivalence(callback) {
47
- return this.array.some(callback);
48
- }
49
- everyEquivalence(callback) {
50
- return this.array.every(callback);
51
- }
52
- forEachEquivalence(callback) {
53
- this.array.forEach(callback);
54
- }
55
- findEquivalenceByTerm(term) {
56
- const equivalence = this.array.find((equivalence)=>{
57
- const equivalenceComparesToTerm = equivalence.compareTerm(term);
58
- if (equivalenceComparesToTerm) {
59
- return true;
60
- }
61
- }) || null;
62
- return equivalence;
63
- }
64
- findEquivalenceByTermNodes(termNodes) {
65
- const equivalence = this.array.find((equivalence)=>{
66
- const termNodeMatches = equivalence.matchTermNodes(termNodes);
67
- if (termNodeMatches) {
68
- return true;
69
- }
70
- }) || null;
71
- return equivalence;
72
- }
73
- mergedWith(equivalences, context) {
74
- let mergedEquivalences = this.clone(context); ///
75
- equivalences.forEachEquivalence((equivalence)=>{
76
- mergedEquivalences = mergedEquivalences.mergedWithEquivalence(equivalence, context);
77
- });
78
- return mergedEquivalences;
79
- }
80
- mergedWithEquivalence(equivalence, context) {
81
- const equivalences = Equivalences.fromNothing(context);
82
- let mergedEquivalence = equivalence; ///
83
- this.forEachEquivalence((equivalence)=>{
84
- const mergedEquivalenceDisjointFromEquivalence = mergedEquivalence.isDisjointFrom(equivalence);
85
- if (mergedEquivalenceDisjointFromEquivalence) {
86
- equivalences.addEquivalence(equivalence);
87
- } else {
88
- mergedEquivalence = mergedEquivalence.mergedWith(equivalence, context);
89
- }
90
- });
91
- equivalence = mergedEquivalence; ///
92
- equivalences.addEquivalence(equivalence);
93
- return equivalences;
94
- }
95
- separateEquivalences(equivalencesA, equivalencesB, callback) {
96
- const equivalencesAArray = equivalencesA.getArray(), equivalencesBArray = equivalencesB.getArray();
97
- separate(this.array, equivalencesAArray, equivalencesBArray, callback);
98
- }
99
- separateInitiallyGroundedEquivalences(remainingEquivalences, initiallyGroundedEquivalences, context) {
100
- this.separateEquivalences(remainingEquivalences, initiallyGroundedEquivalences, (equivalence)=>{
101
- const equivalenceInitiallyGrounded = equivalence.isInitiallyGrounded(context);
102
- if (!equivalenceInitiallyGrounded) {
103
- return true;
104
- }
105
- });
106
- }
107
- separateImplicitlyGroundedEquivalences(remainingEquivalences, implicitlyGroundedEquivalences, definedVariables, context) {
108
- this.separateEquivalences(remainingEquivalences, implicitlyGroundedEquivalences, (equivalence)=>{
109
- const equivalenceImplicitlyGrounded = equivalence.isImplicitlyGrounded(definedVariables, context);
110
- if (!equivalenceImplicitlyGrounded) {
111
- return true;
112
- }
113
- });
114
- }
115
- separateGroundedTermsAndDefinedVariables(groundedTerms, definedVariables, context) {
116
- let equivalences = this, groundedEquivalences, remainingEquivalences, initiallyGroundedEquivalences, implicitlyGroundedEquivalences;
117
- remainingEquivalences = Equivalences.fromNothing(context);
118
- initiallyGroundedEquivalences = Equivalences.fromNothing(context);
119
- equivalences.separateInitiallyGroundedEquivalences(remainingEquivalences, initiallyGroundedEquivalences, context);
120
- const initiallyGroundedEquivalencesLength = initiallyGroundedEquivalences.getLength();
121
- if (initiallyGroundedEquivalencesLength > 0) {
122
- groundedEquivalences = initiallyGroundedEquivalences; ///
123
- let implicitlyGroundedEquivalencesLength = 1;
124
- while(implicitlyGroundedEquivalencesLength > 0){
125
- let definedVariablesLength = 0, previousDefinedVariablesLength = -1;
126
- while(definedVariablesLength > previousDefinedVariablesLength){
127
- previousDefinedVariablesLength = definedVariablesLength; ///
128
- groundedTermsFromGroundedEquivalencesAndDefinedVariables(groundedEquivalences, definedVariables, groundedTerms, context);
129
- definedVariablesFromGroundedTerms(groundedTerms, definedVariables, context);
130
- definedVariablesLength = definedVariables.length;
131
- }
132
- equivalences = remainingEquivalences; ///
133
- remainingEquivalences = [];
134
- implicitlyGroundedEquivalences = [];
135
- equivalences.separateImplicitlyGroundedEquivalences(remainingEquivalences, implicitlyGroundedEquivalences, definedVariables, context);
136
- groundedEquivalences.addEquivalences(implicitlyGroundedEquivalences);
137
- implicitlyGroundedEquivalencesLength = implicitlyGroundedEquivalences.getLength(); ///
138
- }
139
- }
140
- }
141
- clone(context) {
142
- const string = _constants.EMPTY_STRING, node = null, array = [
143
- ...this.array
144
- ], equivalences = new Equivalences(context, string, node, array);
145
- return equivalences;
146
- }
147
- static name = "Equivalences";
148
- static fromNothing(context) {
149
- const string = _constants.EMPTY_STRING, node = null, array = [];
150
- context = null;
151
- const equivalences = new Equivalences(context, string, node, array);
152
- return equivalences;
153
- }
154
- });
155
- function definedVariablesFromGroundedTerms(groundedTerms, definedVariables, context) {
156
- groundedTerms.forEach((groundedTerm)=>{
157
- const term = groundedTerm, variables = (0, _equivalence.variablesFromTerm)(term, context);
158
- variables.forEach((variable)=>{
159
- const definedVariablesIncludesTermVariable = definedVariables.includes(variable);
160
- if (!definedVariablesIncludesTermVariable) {
161
- const definedVariable = variable; ///
162
- definedVariables.push(definedVariable);
163
- }
164
- });
165
- });
166
- }
167
- function groundedTermsFromGroundedEquivalencesAndDefinedVariables(groundedEquivalences, definedVariables, groundedTerms, context) {
168
- groundedEquivalences.forEachEquivalence((groundedEquivalence)=>{
169
- groundedEquivalence.getGroundedTerms(definedVariables, groundedTerms, context);
170
- });
171
- }
172
-
173
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2VxdWl2YWxlbmNlcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IHZhcmlhYmxlc0Zyb21UZXJtIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9lcXVpdmFsZW5jZVwiO1xuXG5jb25zdCB7IHB1c2gsIHNlcGFyYXRlIH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIEVxdWl2YWxlbmNlcyBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGFycmF5KSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlKTtcblxuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbiAgfVxuXG4gIGdldEFycmF5KCkge1xuICAgIHJldHVybiB0aGlzLmFycmF5O1xuICB9XG5cbiAgZ2V0RXF1aXZhbGVuY2VzTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgZXF1aXZhbGVuY2VzTm9kZSA9IG5vZGU7ICAvLy9cblxuICAgIHJldHVybiBlcXVpdmFsZW5jZXNOb2RlO1xuICB9XG5cbiAgZ2V0TGVuZ3RoKCkgeyByZXR1cm4gdGhpcy5hcnJheS5sZW5ndGg7IH1cblxuICBnZXRUeXBlcygpIHtcbiAgICBjb25zdCB0eXBlcyA9IHRoaXMuYXJyYXkubWFwKChlcXVpdmFsZW5jZSkgPT4ge1xuICAgICAgY29uc3QgdHlwZSA9IGVxdWl2YWxlbmNlLmdldFR5cGUoKTtcblxuICAgICAgcmV0dXJuIHR5cGU7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdHlwZXM7XG4gIH1cblxuICBhZGRFcXVpdmFsZW5jZShlcXVpdmFsZW5jZSkge1xuICAgIHRoaXMuYXJyYXkucHVzaChlcXVpdmFsZW5jZSk7XG4gIH1cblxuICBhZGRFcXVpdmFsZW5jZXMoZXF1aXZhbGVuY2VzKSB7XG4gICAgY29uc3QgYXJyYXkgPSBlcXVpdmFsZW5jZXMuZ2V0QXJyYXkoKTtcblxuICAgIHB1c2godGhpcy5hcnJheSwgYXJyYXkpO1xuICB9XG5cbiAgc29tZUVxdWl2YWxlbmNlKGNhbGxiYWNrKSB7IHJldHVybiB0aGlzLmFycmF5LnNvbWUoY2FsbGJhY2spOyB9XG5cbiAgZXZlcnlFcXVpdmFsZW5jZShjYWxsYmFjaykgeyByZXR1cm4gdGhpcy5hcnJheS5ldmVyeShjYWxsYmFjayk7IH1cblxuICBmb3JFYWNoRXF1aXZhbGVuY2UoY2FsbGJhY2spIHsgdGhpcy5hcnJheS5mb3JFYWNoKGNhbGxiYWNrKTsgfVxuXG4gIGZpbmRFcXVpdmFsZW5jZUJ5VGVybSh0ZXJtKSB7XG4gICAgY29uc3QgZXF1aXZhbGVuY2UgPSB0aGlzLmFycmF5LmZpbmQoKGVxdWl2YWxlbmNlKSA9PiB7XG4gICAgICBjb25zdCBlcXVpdmFsZW5jZUNvbXBhcmVzVG9UZXJtID0gZXF1aXZhbGVuY2UuY29tcGFyZVRlcm0odGVybSk7XG5cbiAgICAgIGlmIChlcXVpdmFsZW5jZUNvbXBhcmVzVG9UZXJtKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gZXF1aXZhbGVuY2U7XG4gIH1cblxuICBmaW5kRXF1aXZhbGVuY2VCeVRlcm1Ob2Rlcyh0ZXJtTm9kZXMpIHtcbiAgICBjb25zdCBlcXVpdmFsZW5jZSA9IHRoaXMuYXJyYXkuZmluZCgoZXF1aXZhbGVuY2UpID0+IHtcbiAgICAgIGNvbnN0IHRlcm1Ob2RlTWF0Y2hlcyA9IGVxdWl2YWxlbmNlLm1hdGNoVGVybU5vZGVzKHRlcm1Ob2Rlcyk7XG5cbiAgICAgIGlmICh0ZXJtTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBlcXVpdmFsZW5jZTtcbiAgfVxuXG4gIG1lcmdlZFdpdGgoZXF1aXZhbGVuY2VzLCBjb250ZXh0KSB7XG4gICAgbGV0ICBtZXJnZWRFcXVpdmFsZW5jZXMgPSB0aGlzLmNsb25lKGNvbnRleHQpOyAvLy9cblxuICAgIGVxdWl2YWxlbmNlcy5mb3JFYWNoRXF1aXZhbGVuY2UoKGVxdWl2YWxlbmNlKSA9PiB7XG4gICAgICBtZXJnZWRFcXVpdmFsZW5jZXMgPSBtZXJnZWRFcXVpdmFsZW5jZXMubWVyZ2VkV2l0aEVxdWl2YWxlbmNlKGVxdWl2YWxlbmNlLCBjb250ZXh0KTtcbiAgICB9KTtcblxuICAgIHJldHVybiBtZXJnZWRFcXVpdmFsZW5jZXM7XG4gIH1cblxuICBtZXJnZWRXaXRoRXF1aXZhbGVuY2UoZXF1aXZhbGVuY2UsIGNvbnRleHQpIHtcbiAgICBjb25zdCBlcXVpdmFsZW5jZXMgPSBFcXVpdmFsZW5jZXMuZnJvbU5vdGhpbmcoY29udGV4dCk7XG5cbiAgICBsZXQgbWVyZ2VkRXF1aXZhbGVuY2UgPSBlcXVpdmFsZW5jZTsgLy8vXG5cbiAgICB0aGlzLmZvckVhY2hFcXVpdmFsZW5jZSgoZXF1aXZhbGVuY2UpID0+IHtcbiAgICAgIGNvbnN0IG1lcmdlZEVxdWl2YWxlbmNlRGlzam9pbnRGcm9tRXF1aXZhbGVuY2UgPSBtZXJnZWRFcXVpdmFsZW5jZS5pc0Rpc2pvaW50RnJvbShlcXVpdmFsZW5jZSk7XG5cbiAgICAgIGlmIChtZXJnZWRFcXVpdmFsZW5jZURpc2pvaW50RnJvbUVxdWl2YWxlbmNlKSB7XG4gICAgICAgIGVxdWl2YWxlbmNlcy5hZGRFcXVpdmFsZW5jZShlcXVpdmFsZW5jZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtZXJnZWRFcXVpdmFsZW5jZSA9IG1lcmdlZEVxdWl2YWxlbmNlLm1lcmdlZFdpdGgoZXF1aXZhbGVuY2UsIGNvbnRleHQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZXF1aXZhbGVuY2UgPSBtZXJnZWRFcXVpdmFsZW5jZTsgIC8vL1xuXG4gICAgZXF1aXZhbGVuY2VzLmFkZEVxdWl2YWxlbmNlKGVxdWl2YWxlbmNlKTtcblxuICAgIHJldHVybiBlcXVpdmFsZW5jZXM7XG4gIH1cblxuICBzZXBhcmF0ZUVxdWl2YWxlbmNlcyhlcXVpdmFsZW5jZXNBLCBlcXVpdmFsZW5jZXNCLCBjYWxsYmFjaykge1xuICAgIGNvbnN0IGVxdWl2YWxlbmNlc0FBcnJheSA9IGVxdWl2YWxlbmNlc0EuZ2V0QXJyYXkoKSxcbiAgICAgICAgICBlcXVpdmFsZW5jZXNCQXJyYXkgPSBlcXVpdmFsZW5jZXNCLmdldEFycmF5KCk7XG5cbiAgICBzZXBhcmF0ZSh0aGlzLmFycmF5LCBlcXVpdmFsZW5jZXNBQXJyYXksIGVxdWl2YWxlbmNlc0JBcnJheSwgY2FsbGJhY2spO1xuICB9XG5cbiAgc2VwYXJhdGVJbml0aWFsbHlHcm91bmRlZEVxdWl2YWxlbmNlcyhyZW1haW5pbmdFcXVpdmFsZW5jZXMsIGluaXRpYWxseUdyb3VuZGVkRXF1aXZhbGVuY2VzLCBjb250ZXh0KSB7XG4gICAgdGhpcy5zZXBhcmF0ZUVxdWl2YWxlbmNlcyhyZW1haW5pbmdFcXVpdmFsZW5jZXMsIGluaXRpYWxseUdyb3VuZGVkRXF1aXZhbGVuY2VzLCAoZXF1aXZhbGVuY2UpID0+IHtcbiAgICAgIGNvbnN0IGVxdWl2YWxlbmNlSW5pdGlhbGx5R3JvdW5kZWQgPSBlcXVpdmFsZW5jZS5pc0luaXRpYWxseUdyb3VuZGVkKGNvbnRleHQpO1xuXG4gICAgICBpZiAoIWVxdWl2YWxlbmNlSW5pdGlhbGx5R3JvdW5kZWQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzZXBhcmF0ZUltcGxpY2l0bHlHcm91bmRlZEVxdWl2YWxlbmNlcyhyZW1haW5pbmdFcXVpdmFsZW5jZXMsIGltcGxpY2l0bHlHcm91bmRlZEVxdWl2YWxlbmNlcywgZGVmaW5lZFZhcmlhYmxlcywgY29udGV4dCkge1xuICAgIHRoaXMuc2VwYXJhdGVFcXVpdmFsZW5jZXMocmVtYWluaW5nRXF1aXZhbGVuY2VzLCBpbXBsaWNpdGx5R3JvdW5kZWRFcXVpdmFsZW5jZXMsIChlcXVpdmFsZW5jZSkgPT4ge1xuICAgICAgY29uc3QgZXF1aXZhbGVuY2VJbXBsaWNpdGx5R3JvdW5kZWQgPSBlcXVpdmFsZW5jZS5pc0ltcGxpY2l0bHlHcm91bmRlZChkZWZpbmVkVmFyaWFibGVzLCBjb250ZXh0KTtcblxuICAgICAgaWYgKCFlcXVpdmFsZW5jZUltcGxpY2l0bHlHcm91bmRlZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHNlcGFyYXRlR3JvdW5kZWRUZXJtc0FuZERlZmluZWRWYXJpYWJsZXMoZ3JvdW5kZWRUZXJtcywgZGVmaW5lZFZhcmlhYmxlcywgY29udGV4dCkge1xuICAgIGxldCBlcXVpdmFsZW5jZXMgPSB0aGlzLCAgLy8vXG4gICAgICAgIGdyb3VuZGVkRXF1aXZhbGVuY2VzLFxuICAgICAgICByZW1haW5pbmdFcXVpdmFsZW5jZXMsXG4gICAgICAgIGluaXRpYWxseUdyb3VuZGVkRXF1aXZhbGVuY2VzLFxuICAgICAgICBpbXBsaWNpdGx5R3JvdW5kZWRFcXVpdmFsZW5jZXM7XG5cbiAgICByZW1haW5pbmdFcXVpdmFsZW5jZXMgPUVxdWl2YWxlbmNlcy5mcm9tTm90aGluZyhjb250ZXh0KTtcblxuICAgIGluaXRpYWxseUdyb3VuZGVkRXF1aXZhbGVuY2VzID0gRXF1aXZhbGVuY2VzLmZyb21Ob3RoaW5nKGNvbnRleHQpO1xuXG4gICAgZXF1aXZhbGVuY2VzLnNlcGFyYXRlSW5pdGlhbGx5R3JvdW5kZWRFcXVpdmFsZW5jZXMocmVtYWluaW5nRXF1aXZhbGVuY2VzLCBpbml0aWFsbHlHcm91bmRlZEVxdWl2YWxlbmNlcywgY29udGV4dCk7XG5cbiAgICBjb25zdCBpbml0aWFsbHlHcm91bmRlZEVxdWl2YWxlbmNlc0xlbmd0aCA9IGluaXRpYWxseUdyb3VuZGVkRXF1aXZhbGVuY2VzLmdldExlbmd0aCgpO1xuXG4gICAgaWYgKGluaXRpYWxseUdyb3VuZGVkRXF1aXZhbGVuY2VzTGVuZ3RoID4gMCkge1xuICAgICAgZ3JvdW5kZWRFcXVpdmFsZW5jZXMgPSBpbml0aWFsbHlHcm91bmRlZEVxdWl2YWxlbmNlczsgLy8vXG5cbiAgICAgIGxldCBpbXBsaWNpdGx5R3JvdW5kZWRFcXVpdmFsZW5jZXNMZW5ndGggPSAxO1xuXG4gICAgICB3aGlsZSAoaW1wbGljaXRseUdyb3VuZGVkRXF1aXZhbGVuY2VzTGVuZ3RoID4gMCkge1xuICAgICAgICBsZXQgZGVmaW5lZFZhcmlhYmxlc0xlbmd0aCA9IDAsXG4gICAgICAgICAgICBwcmV2aW91c0RlZmluZWRWYXJpYWJsZXNMZW5ndGggPSAtMTtcblxuICAgICAgICB3aGlsZSAoZGVmaW5lZFZhcmlhYmxlc0xlbmd0aCA+IHByZXZpb3VzRGVmaW5lZFZhcmlhYmxlc0xlbmd0aCkge1xuICAgICAgICAgIHByZXZpb3VzRGVmaW5lZFZhcmlhYmxlc0xlbmd0aCA9IGRlZmluZWRWYXJpYWJsZXNMZW5ndGg7ICAvLy9cblxuICAgICAgICAgIGdyb3VuZGVkVGVybXNGcm9tR3JvdW5kZWRFcXVpdmFsZW5jZXNBbmREZWZpbmVkVmFyaWFibGVzKGdyb3VuZGVkRXF1aXZhbGVuY2VzLCBkZWZpbmVkVmFyaWFibGVzLCBncm91bmRlZFRlcm1zLCBjb250ZXh0KTtcblxuICAgICAgICAgIGRlZmluZWRWYXJpYWJsZXNGcm9tR3JvdW5kZWRUZXJtcyhncm91bmRlZFRlcm1zLCBkZWZpbmVkVmFyaWFibGVzLCBjb250ZXh0KTtcblxuICAgICAgICAgIGRlZmluZWRWYXJpYWJsZXNMZW5ndGggPSBkZWZpbmVkVmFyaWFibGVzLmxlbmd0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIGVxdWl2YWxlbmNlcyA9IHJlbWFpbmluZ0VxdWl2YWxlbmNlczsgLy8vXG5cbiAgICAgICAgcmVtYWluaW5nRXF1aXZhbGVuY2VzID0gW107XG5cbiAgICAgICAgaW1wbGljaXRseUdyb3VuZGVkRXF1aXZhbGVuY2VzID0gW107XG5cbiAgICAgICAgZXF1aXZhbGVuY2VzLnNlcGFyYXRlSW1wbGljaXRseUdyb3VuZGVkRXF1aXZhbGVuY2VzKHJlbWFpbmluZ0VxdWl2YWxlbmNlcywgaW1wbGljaXRseUdyb3VuZGVkRXF1aXZhbGVuY2VzLCBkZWZpbmVkVmFyaWFibGVzLCBjb250ZXh0KTtcblxuICAgICAgICBncm91bmRlZEVxdWl2YWxlbmNlcy5hZGRFcXVpdmFsZW5jZXMoaW1wbGljaXRseUdyb3VuZGVkRXF1aXZhbGVuY2VzKTtcblxuICAgICAgICBpbXBsaWNpdGx5R3JvdW5kZWRFcXVpdmFsZW5jZXNMZW5ndGggPSBpbXBsaWNpdGx5R3JvdW5kZWRFcXVpdmFsZW5jZXMuZ2V0TGVuZ3RoKCk7ICAvLy9cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjbG9uZShjb250ZXh0KSB7XG4gICAgY29uc3Qgc3RyaW5nID0gRU1QVFlfU1RSSU5HLFxuICAgICAgICAgIG5vZGUgPSBudWxsLFxuICAgICAgICAgIGFycmF5ID0gW1xuICAgICAgICAgICAgLi4udGhpcy5hcnJheVxuICAgICAgICAgIF0sXG4gICAgICAgICAgZXF1aXZhbGVuY2VzID0gbmV3IEVxdWl2YWxlbmNlcyhjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGFycmF5KTtcblxuICAgIHJldHVybiBlcXVpdmFsZW5jZXM7XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiRXF1aXZhbGVuY2VzXCI7XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKGNvbnRleHQpIHtcbiAgICBjb25zdCBzdHJpbmcgPSBFTVBUWV9TVFJJTkcsXG4gICAgICAgICAgbm9kZSA9IG51bGwsXG4gICAgICAgICAgYXJyYXkgPSBbXTtcblxuICAgIGNvbnRleHQgPSBudWxsO1xuXG4gICAgY29uc3QgZXF1aXZhbGVuY2VzID0gbmV3IEVxdWl2YWxlbmNlcyhjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGFycmF5KTtcblxuICAgIHJldHVybiBlcXVpdmFsZW5jZXM7XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiBkZWZpbmVkVmFyaWFibGVzRnJvbUdyb3VuZGVkVGVybXMoZ3JvdW5kZWRUZXJtcywgZGVmaW5lZFZhcmlhYmxlcywgY29udGV4dCkge1xuICBncm91bmRlZFRlcm1zLmZvckVhY2goKGdyb3VuZGVkVGVybSkgPT4ge1xuICAgIGNvbnN0IHRlcm0gPSBncm91bmRlZFRlcm0sICAvLy9cbiAgICAgICAgICB2YXJpYWJsZXMgPSB2YXJpYWJsZXNGcm9tVGVybSh0ZXJtLCBjb250ZXh0KTtcblxuICAgIHZhcmlhYmxlcy5mb3JFYWNoKCh2YXJpYWJsZSkgPT4ge1xuICAgICAgY29uc3QgZGVmaW5lZFZhcmlhYmxlc0luY2x1ZGVzVGVybVZhcmlhYmxlID0gZGVmaW5lZFZhcmlhYmxlcy5pbmNsdWRlcyh2YXJpYWJsZSk7XG5cbiAgICAgIGlmICghZGVmaW5lZFZhcmlhYmxlc0luY2x1ZGVzVGVybVZhcmlhYmxlKSB7XG4gICAgICAgIGNvbnN0IGRlZmluZWRWYXJpYWJsZSA9IHZhcmlhYmxlOyAgLy8vXG5cbiAgICAgICAgZGVmaW5lZFZhcmlhYmxlcy5wdXNoKGRlZmluZWRWYXJpYWJsZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBncm91bmRlZFRlcm1zRnJvbUdyb3VuZGVkRXF1aXZhbGVuY2VzQW5kRGVmaW5lZFZhcmlhYmxlcyhncm91bmRlZEVxdWl2YWxlbmNlcywgZGVmaW5lZFZhcmlhYmxlcywgZ3JvdW5kZWRUZXJtcywgY29udGV4dCkge1xuICBncm91bmRlZEVxdWl2YWxlbmNlcy5mb3JFYWNoRXF1aXZhbGVuY2UoKGdyb3VuZGVkRXF1aXZhbGVuY2UpID0+IHtcbiAgICBncm91bmRlZEVxdWl2YWxlbmNlLmdldEdyb3VuZGVkVGVybXMoZGVmaW5lZFZhcmlhYmxlcywgZ3JvdW5kZWRUZXJtcywgY29udGV4dCk7XG4gIH0pO1xufVxuIl0sIm5hbWVzIjpbInB1c2giLCJzZXBhcmF0ZSIsImFycmF5VXRpbGl0aWVzIiwiZGVmaW5lIiwiRXF1aXZhbGVuY2VzIiwiRWxlbWVudCIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYXJyYXkiLCJnZXRBcnJheSIsImdldEVxdWl2YWxlbmNlc05vZGUiLCJnZXROb2RlIiwiZXF1aXZhbGVuY2VzTm9kZSIsImdldExlbmd0aCIsImxlbmd0aCIsImdldFR5cGVzIiwidHlwZXMiLCJtYXAiLCJlcXVpdmFsZW5jZSIsInR5cGUiLCJnZXRUeXBlIiwiYWRkRXF1aXZhbGVuY2UiLCJhZGRFcXVpdmFsZW5jZXMiLCJlcXVpdmFsZW5jZXMiLCJzb21lRXF1aXZhbGVuY2UiLCJjYWxsYmFjayIsInNvbWUiLCJldmVyeUVxdWl2YWxlbmNlIiwiZXZlcnkiLCJmb3JFYWNoRXF1aXZhbGVuY2UiLCJmb3JFYWNoIiwiZmluZEVxdWl2YWxlbmNlQnlUZXJtIiwidGVybSIsImZpbmQiLCJlcXVpdmFsZW5jZUNvbXBhcmVzVG9UZXJtIiwiY29tcGFyZVRlcm0iLCJmaW5kRXF1aXZhbGVuY2VCeVRlcm1Ob2RlcyIsInRlcm1Ob2RlcyIsInRlcm1Ob2RlTWF0Y2hlcyIsIm1hdGNoVGVybU5vZGVzIiwibWVyZ2VkV2l0aCIsIm1lcmdlZEVxdWl2YWxlbmNlcyIsImNsb25lIiwibWVyZ2VkV2l0aEVxdWl2YWxlbmNlIiwiZnJvbU5vdGhpbmciLCJtZXJnZWRFcXVpdmFsZW5jZSIsIm1lcmdlZEVxdWl2YWxlbmNlRGlzam9pbnRGcm9tRXF1aXZhbGVuY2UiLCJpc0Rpc2pvaW50RnJvbSIsInNlcGFyYXRlRXF1aXZhbGVuY2VzIiwiZXF1aXZhbGVuY2VzQSIsImVxdWl2YWxlbmNlc0IiLCJlcXVpdmFsZW5jZXNBQXJyYXkiLCJlcXVpdmFsZW5jZXNCQXJyYXkiLCJzZXBhcmF0ZUluaXRpYWxseUdyb3VuZGVkRXF1aXZhbGVuY2VzIiwicmVtYWluaW5nRXF1aXZhbGVuY2VzIiwiaW5pdGlhbGx5R3JvdW5kZWRFcXVpdmFsZW5jZXMiLCJlcXVpdmFsZW5jZUluaXRpYWxseUdyb3VuZGVkIiwiaXNJbml0aWFsbHlHcm91bmRlZCIsInNlcGFyYXRlSW1wbGljaXRseUdyb3VuZGVkRXF1aXZhbGVuY2VzIiwiaW1wbGljaXRseUdyb3VuZGVkRXF1aXZhbGVuY2VzIiwiZGVmaW5lZFZhcmlhYmxlcyIsImVxdWl2YWxlbmNlSW1wbGljaXRseUdyb3VuZGVkIiwiaXNJbXBsaWNpdGx5R3JvdW5kZWQiLCJzZXBhcmF0ZUdyb3VuZGVkVGVybXNBbmREZWZpbmVkVmFyaWFibGVzIiwiZ3JvdW5kZWRUZXJtcyIsImdyb3VuZGVkRXF1aXZhbGVuY2VzIiwiaW5pdGlhbGx5R3JvdW5kZWRFcXVpdmFsZW5jZXNMZW5ndGgiLCJpbXBsaWNpdGx5R3JvdW5kZWRFcXVpdmFsZW5jZXNMZW5ndGgiLCJkZWZpbmVkVmFyaWFibGVzTGVuZ3RoIiwicHJldmlvdXNEZWZpbmVkVmFyaWFibGVzTGVuZ3RoIiwiZ3JvdW5kZWRUZXJtc0Zyb21Hcm91bmRlZEVxdWl2YWxlbmNlc0FuZERlZmluZWRWYXJpYWJsZXMiLCJkZWZpbmVkVmFyaWFibGVzRnJvbUdyb3VuZGVkVGVybXMiLCJFTVBUWV9TVFJJTkciLCJuYW1lIiwiZ3JvdW5kZWRUZXJtIiwidmFyaWFibGVzIiwidmFyaWFibGVzRnJvbVRlcm0iLCJ2YXJpYWJsZSIsImRlZmluZWRWYXJpYWJsZXNJbmNsdWRlc1Rlcm1WYXJpYWJsZSIsImluY2x1ZGVzIiwiZGVmaW5lZFZhcmlhYmxlIiwiZ3JvdW5kZWRFcXVpdmFsZW5jZSIsImdldEdyb3VuZGVkVGVybXMiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQVdBOzs7ZUFBQTs7O2dDQVR3QjsyQkFDTzswQkFFUjsyQkFDTTs2QkFDSztBQUVsQyxNQUFNLEVBQUVBLElBQUksRUFBRUMsUUFBUSxFQUFFLEdBQUdDLHlCQUFjO01BRXpDLFdBQWVDLElBQUFBLGdCQUFNLEVBQUMsTUFBTUMscUJBQXFCQyx1QkFBTztJQUN0RCxZQUFZQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxLQUFLLENBQUU7UUFDeEMsS0FBSyxDQUFDSCxTQUFTQyxRQUFRQztRQUV2QixJQUFJLENBQUNDLEtBQUssR0FBR0E7SUFDZjtJQUVBQyxXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUNELEtBQUs7SUFDbkI7SUFFQUUsc0JBQXNCO1FBQ3BCLE1BQU1ILE9BQU8sSUFBSSxDQUFDSSxPQUFPLElBQ25CQyxtQkFBbUJMLE1BQU8sR0FBRztRQUVuQyxPQUFPSztJQUNUO0lBRUFDLFlBQVk7UUFBRSxPQUFPLElBQUksQ0FBQ0wsS0FBSyxDQUFDTSxNQUFNO0lBQUU7SUFFeENDLFdBQVc7UUFDVCxNQUFNQyxRQUFRLElBQUksQ0FBQ1IsS0FBSyxDQUFDUyxHQUFHLENBQUMsQ0FBQ0M7WUFDNUIsTUFBTUMsT0FBT0QsWUFBWUUsT0FBTztZQUVoQyxPQUFPRDtRQUNUO1FBRUEsT0FBT0g7SUFDVDtJQUVBSyxlQUFlSCxXQUFXLEVBQUU7UUFDMUIsSUFBSSxDQUFDVixLQUFLLENBQUNULElBQUksQ0FBQ21CO0lBQ2xCO0lBRUFJLGdCQUFnQkMsWUFBWSxFQUFFO1FBQzVCLE1BQU1mLFFBQVFlLGFBQWFkLFFBQVE7UUFFbkNWLEtBQUssSUFBSSxDQUFDUyxLQUFLLEVBQUVBO0lBQ25CO0lBRUFnQixnQkFBZ0JDLFFBQVEsRUFBRTtRQUFFLE9BQU8sSUFBSSxDQUFDakIsS0FBSyxDQUFDa0IsSUFBSSxDQUFDRDtJQUFXO0lBRTlERSxpQkFBaUJGLFFBQVEsRUFBRTtRQUFFLE9BQU8sSUFBSSxDQUFDakIsS0FBSyxDQUFDb0IsS0FBSyxDQUFDSDtJQUFXO0lBRWhFSSxtQkFBbUJKLFFBQVEsRUFBRTtRQUFFLElBQUksQ0FBQ2pCLEtBQUssQ0FBQ3NCLE9BQU8sQ0FBQ0w7SUFBVztJQUU3RE0sc0JBQXNCQyxJQUFJLEVBQUU7UUFDMUIsTUFBTWQsY0FBYyxJQUFJLENBQUNWLEtBQUssQ0FBQ3lCLElBQUksQ0FBQyxDQUFDZjtZQUNuQyxNQUFNZ0IsNEJBQTRCaEIsWUFBWWlCLFdBQVcsQ0FBQ0g7WUFFMUQsSUFBSUUsMkJBQTJCO2dCQUM3QixPQUFPO1lBQ1Q7UUFDRixNQUFNO1FBRU4sT0FBT2hCO0lBQ1Q7SUFFQWtCLDJCQUEyQkMsU0FBUyxFQUFFO1FBQ3BDLE1BQU1uQixjQUFjLElBQUksQ0FBQ1YsS0FBSyxDQUFDeUIsSUFBSSxDQUFDLENBQUNmO1lBQ25DLE1BQU1vQixrQkFBa0JwQixZQUFZcUIsY0FBYyxDQUFDRjtZQUVuRCxJQUFJQyxpQkFBaUI7Z0JBQ25CLE9BQU87WUFDVDtRQUNGLE1BQU07UUFFTixPQUFPcEI7SUFDVDtJQUVBc0IsV0FBV2pCLFlBQVksRUFBRWxCLE9BQU8sRUFBRTtRQUNoQyxJQUFLb0MscUJBQXFCLElBQUksQ0FBQ0MsS0FBSyxDQUFDckMsVUFBVSxHQUFHO1FBRWxEa0IsYUFBYU0sa0JBQWtCLENBQUMsQ0FBQ1g7WUFDL0J1QixxQkFBcUJBLG1CQUFtQkUscUJBQXFCLENBQUN6QixhQUFhYjtRQUM3RTtRQUVBLE9BQU9vQztJQUNUO0lBRUFFLHNCQUFzQnpCLFdBQVcsRUFBRWIsT0FBTyxFQUFFO1FBQzFDLE1BQU1rQixlQUFlcEIsYUFBYXlDLFdBQVcsQ0FBQ3ZDO1FBRTlDLElBQUl3QyxvQkFBb0IzQixhQUFhLEdBQUc7UUFFeEMsSUFBSSxDQUFDVyxrQkFBa0IsQ0FBQyxDQUFDWDtZQUN2QixNQUFNNEIsMkNBQTJDRCxrQkFBa0JFLGNBQWMsQ0FBQzdCO1lBRWxGLElBQUk0QiwwQ0FBMEM7Z0JBQzVDdkIsYUFBYUYsY0FBYyxDQUFDSDtZQUM5QixPQUFPO2dCQUNMMkIsb0JBQW9CQSxrQkFBa0JMLFVBQVUsQ0FBQ3RCLGFBQWFiO1lBQ2hFO1FBQ0Y7UUFFQWEsY0FBYzJCLG1CQUFvQixHQUFHO1FBRXJDdEIsYUFBYUYsY0FBYyxDQUFDSDtRQUU1QixPQUFPSztJQUNUO0lBRUF5QixxQkFBcUJDLGFBQWEsRUFBRUMsYUFBYSxFQUFFekIsUUFBUSxFQUFFO1FBQzNELE1BQU0wQixxQkFBcUJGLGNBQWN4QyxRQUFRLElBQzNDMkMscUJBQXFCRixjQUFjekMsUUFBUTtRQUVqRFQsU0FBUyxJQUFJLENBQUNRLEtBQUssRUFBRTJDLG9CQUFvQkMsb0JBQW9CM0I7SUFDL0Q7SUFFQTRCLHNDQUFzQ0MscUJBQXFCLEVBQUVDLDZCQUE2QixFQUFFbEQsT0FBTyxFQUFFO1FBQ25HLElBQUksQ0FBQzJDLG9CQUFvQixDQUFDTSx1QkFBdUJDLCtCQUErQixDQUFDckM7WUFDL0UsTUFBTXNDLCtCQUErQnRDLFlBQVl1QyxtQkFBbUIsQ0FBQ3BEO1lBRXJFLElBQUksQ0FBQ21ELDhCQUE4QjtnQkFDakMsT0FBTztZQUNUO1FBQ0Y7SUFDRjtJQUVBRSx1Q0FBdUNKLHFCQUFxQixFQUFFSyw4QkFBOEIsRUFBRUMsZ0JBQWdCLEVBQUV2RCxPQUFPLEVBQUU7UUFDdkgsSUFBSSxDQUFDMkMsb0JBQW9CLENBQUNNLHVCQUF1QkssZ0NBQWdDLENBQUN6QztZQUNoRixNQUFNMkMsZ0NBQWdDM0MsWUFBWTRDLG9CQUFvQixDQUFDRixrQkFBa0J2RDtZQUV6RixJQUFJLENBQUN3RCwrQkFBK0I7Z0JBQ2xDLE9BQU87WUFDVDtRQUNGO0lBQ0Y7SUFFQUUseUNBQXlDQyxhQUFhLEVBQUVKLGdCQUFnQixFQUFFdkQsT0FBTyxFQUFFO1FBQ2pGLElBQUlrQixlQUFlLElBQUksRUFDbkIwQyxzQkFDQVgsdUJBQ0FDLCtCQUNBSTtRQUVKTCx3QkFBdUJuRCxhQUFheUMsV0FBVyxDQUFDdkM7UUFFaERrRCxnQ0FBZ0NwRCxhQUFheUMsV0FBVyxDQUFDdkM7UUFFekRrQixhQUFhOEIscUNBQXFDLENBQUNDLHVCQUF1QkMsK0JBQStCbEQ7UUFFekcsTUFBTTZELHNDQUFzQ1gsOEJBQThCMUMsU0FBUztRQUVuRixJQUFJcUQsc0NBQXNDLEdBQUc7WUFDM0NELHVCQUF1QlYsK0JBQStCLEdBQUc7WUFFekQsSUFBSVksdUNBQXVDO1lBRTNDLE1BQU9BLHVDQUF1QyxFQUFHO2dCQUMvQyxJQUFJQyx5QkFBeUIsR0FDekJDLGlDQUFpQyxDQUFDO2dCQUV0QyxNQUFPRCx5QkFBeUJDLCtCQUFnQztvQkFDOURBLGlDQUFpQ0Qsd0JBQXlCLEdBQUc7b0JBRTdERSx5REFBeURMLHNCQUFzQkwsa0JBQWtCSSxlQUFlM0Q7b0JBRWhIa0Usa0NBQWtDUCxlQUFlSixrQkFBa0J2RDtvQkFFbkUrRCx5QkFBeUJSLGlCQUFpQjlDLE1BQU07Z0JBQ2xEO2dCQUVBUyxlQUFlK0IsdUJBQXVCLEdBQUc7Z0JBRXpDQSx3QkFBd0IsRUFBRTtnQkFFMUJLLGlDQUFpQyxFQUFFO2dCQUVuQ3BDLGFBQWFtQyxzQ0FBc0MsQ0FBQ0osdUJBQXVCSyxnQ0FBZ0NDLGtCQUFrQnZEO2dCQUU3SDRELHFCQUFxQjNDLGVBQWUsQ0FBQ3FDO2dCQUVyQ1EsdUNBQXVDUiwrQkFBK0I5QyxTQUFTLElBQUssR0FBRztZQUN6RjtRQUNGO0lBQ0Y7SUFFQTZCLE1BQU1yQyxPQUFPLEVBQUU7UUFDYixNQUFNQyxTQUFTa0UsdUJBQVksRUFDckJqRSxPQUFPLE1BQ1BDLFFBQVE7ZUFDSCxJQUFJLENBQUNBLEtBQUs7U0FDZCxFQUNEZSxlQUFlLElBQUlwQixhQUFhRSxTQUFTQyxRQUFRQyxNQUFNQztRQUU3RCxPQUFPZTtJQUNUO0lBRUEsT0FBT2tELE9BQU8sZUFBZTtJQUU3QixPQUFPN0IsWUFBWXZDLE9BQU8sRUFBRTtRQUMxQixNQUFNQyxTQUFTa0UsdUJBQVksRUFDckJqRSxPQUFPLE1BQ1BDLFFBQVEsRUFBRTtRQUVoQkgsVUFBVTtRQUVWLE1BQU1rQixlQUFlLElBQUlwQixhQUFhRSxTQUFTQyxRQUFRQyxNQUFNQztRQUU3RCxPQUFPZTtJQUNUO0FBQ0Y7QUFFQSxTQUFTZ0Qsa0NBQWtDUCxhQUFhLEVBQUVKLGdCQUFnQixFQUFFdkQsT0FBTztJQUNqRjJELGNBQWNsQyxPQUFPLENBQUMsQ0FBQzRDO1FBQ3JCLE1BQU0xQyxPQUFPMEMsY0FDUEMsWUFBWUMsSUFBQUEsOEJBQWlCLEVBQUM1QyxNQUFNM0I7UUFFMUNzRSxVQUFVN0MsT0FBTyxDQUFDLENBQUMrQztZQUNqQixNQUFNQyx1Q0FBdUNsQixpQkFBaUJtQixRQUFRLENBQUNGO1lBRXZFLElBQUksQ0FBQ0Msc0NBQXNDO2dCQUN6QyxNQUFNRSxrQkFBa0JILFVBQVcsR0FBRztnQkFFdENqQixpQkFBaUI3RCxJQUFJLENBQUNpRjtZQUN4QjtRQUNGO0lBQ0Y7QUFDRjtBQUVBLFNBQVNWLHlEQUF5REwsb0JBQW9CLEVBQUVMLGdCQUFnQixFQUFFSSxhQUFhLEVBQUUzRCxPQUFPO0lBQzlINEQscUJBQXFCcEMsa0JBQWtCLENBQUMsQ0FBQ29EO1FBQ3ZDQSxvQkFBb0JDLGdCQUFnQixDQUFDdEIsa0JBQWtCSSxlQUFlM0Q7SUFDeEU7QUFDRiJ9
@@ -1,237 +0,0 @@
1
- "use strict";
2
-
3
- import { Element } from "occam-languages";
4
- import { arrayUtilities } from "necessary";
5
-
6
- import { define } from "../elements";
7
- import { EMPTY_STRING } from "../constants";
8
- import { variablesFromTerm } from "../utilities/equivalence";
9
-
10
- const { push, separate } = arrayUtilities;
11
-
12
- export default define(class Equivalences extends Element {
13
- constructor(context, string, node, array) {
14
- super(context, string, node);
15
-
16
- this.array = array;
17
- }
18
-
19
- getArray() {
20
- return this.array;
21
- }
22
-
23
- getEquivalencesNode() {
24
- const node = this.getNode(),
25
- equivalencesNode = node; ///
26
-
27
- return equivalencesNode;
28
- }
29
-
30
- getLength() { return this.array.length; }
31
-
32
- getTypes() {
33
- const types = this.array.map((equivalence) => {
34
- const type = equivalence.getType();
35
-
36
- return type;
37
- });
38
-
39
- return types;
40
- }
41
-
42
- addEquivalence(equivalence) {
43
- this.array.push(equivalence);
44
- }
45
-
46
- addEquivalences(equivalences) {
47
- const array = equivalences.getArray();
48
-
49
- push(this.array, array);
50
- }
51
-
52
- someEquivalence(callback) { return this.array.some(callback); }
53
-
54
- everyEquivalence(callback) { return this.array.every(callback); }
55
-
56
- forEachEquivalence(callback) { this.array.forEach(callback); }
57
-
58
- findEquivalenceByTerm(term) {
59
- const equivalence = this.array.find((equivalence) => {
60
- const equivalenceComparesToTerm = equivalence.compareTerm(term);
61
-
62
- if (equivalenceComparesToTerm) {
63
- return true;
64
- }
65
- }) || null;
66
-
67
- return equivalence;
68
- }
69
-
70
- findEquivalenceByTermNodes(termNodes) {
71
- const equivalence = this.array.find((equivalence) => {
72
- const termNodeMatches = equivalence.matchTermNodes(termNodes);
73
-
74
- if (termNodeMatches) {
75
- return true;
76
- }
77
- }) || null;
78
-
79
- return equivalence;
80
- }
81
-
82
- mergedWith(equivalences, context) {
83
- let mergedEquivalences = this.clone(context); ///
84
-
85
- equivalences.forEachEquivalence((equivalence) => {
86
- mergedEquivalences = mergedEquivalences.mergedWithEquivalence(equivalence, context);
87
- });
88
-
89
- return mergedEquivalences;
90
- }
91
-
92
- mergedWithEquivalence(equivalence, context) {
93
- const equivalences = Equivalences.fromNothing(context);
94
-
95
- let mergedEquivalence = equivalence; ///
96
-
97
- this.forEachEquivalence((equivalence) => {
98
- const mergedEquivalenceDisjointFromEquivalence = mergedEquivalence.isDisjointFrom(equivalence);
99
-
100
- if (mergedEquivalenceDisjointFromEquivalence) {
101
- equivalences.addEquivalence(equivalence);
102
- } else {
103
- mergedEquivalence = mergedEquivalence.mergedWith(equivalence, context);
104
- }
105
- });
106
-
107
- equivalence = mergedEquivalence; ///
108
-
109
- equivalences.addEquivalence(equivalence);
110
-
111
- return equivalences;
112
- }
113
-
114
- separateEquivalences(equivalencesA, equivalencesB, callback) {
115
- const equivalencesAArray = equivalencesA.getArray(),
116
- equivalencesBArray = equivalencesB.getArray();
117
-
118
- separate(this.array, equivalencesAArray, equivalencesBArray, callback);
119
- }
120
-
121
- separateInitiallyGroundedEquivalences(remainingEquivalences, initiallyGroundedEquivalences, context) {
122
- this.separateEquivalences(remainingEquivalences, initiallyGroundedEquivalences, (equivalence) => {
123
- const equivalenceInitiallyGrounded = equivalence.isInitiallyGrounded(context);
124
-
125
- if (!equivalenceInitiallyGrounded) {
126
- return true;
127
- }
128
- });
129
- }
130
-
131
- separateImplicitlyGroundedEquivalences(remainingEquivalences, implicitlyGroundedEquivalences, definedVariables, context) {
132
- this.separateEquivalences(remainingEquivalences, implicitlyGroundedEquivalences, (equivalence) => {
133
- const equivalenceImplicitlyGrounded = equivalence.isImplicitlyGrounded(definedVariables, context);
134
-
135
- if (!equivalenceImplicitlyGrounded) {
136
- return true;
137
- }
138
- });
139
- }
140
-
141
- separateGroundedTermsAndDefinedVariables(groundedTerms, definedVariables, context) {
142
- let equivalences = this, ///
143
- groundedEquivalences,
144
- remainingEquivalences,
145
- initiallyGroundedEquivalences,
146
- implicitlyGroundedEquivalences;
147
-
148
- remainingEquivalences =Equivalences.fromNothing(context);
149
-
150
- initiallyGroundedEquivalences = Equivalences.fromNothing(context);
151
-
152
- equivalences.separateInitiallyGroundedEquivalences(remainingEquivalences, initiallyGroundedEquivalences, context);
153
-
154
- const initiallyGroundedEquivalencesLength = initiallyGroundedEquivalences.getLength();
155
-
156
- if (initiallyGroundedEquivalencesLength > 0) {
157
- groundedEquivalences = initiallyGroundedEquivalences; ///
158
-
159
- let implicitlyGroundedEquivalencesLength = 1;
160
-
161
- while (implicitlyGroundedEquivalencesLength > 0) {
162
- let definedVariablesLength = 0,
163
- previousDefinedVariablesLength = -1;
164
-
165
- while (definedVariablesLength > previousDefinedVariablesLength) {
166
- previousDefinedVariablesLength = definedVariablesLength; ///
167
-
168
- groundedTermsFromGroundedEquivalencesAndDefinedVariables(groundedEquivalences, definedVariables, groundedTerms, context);
169
-
170
- definedVariablesFromGroundedTerms(groundedTerms, definedVariables, context);
171
-
172
- definedVariablesLength = definedVariables.length;
173
- }
174
-
175
- equivalences = remainingEquivalences; ///
176
-
177
- remainingEquivalences = [];
178
-
179
- implicitlyGroundedEquivalences = [];
180
-
181
- equivalences.separateImplicitlyGroundedEquivalences(remainingEquivalences, implicitlyGroundedEquivalences, definedVariables, context);
182
-
183
- groundedEquivalences.addEquivalences(implicitlyGroundedEquivalences);
184
-
185
- implicitlyGroundedEquivalencesLength = implicitlyGroundedEquivalences.getLength(); ///
186
- }
187
- }
188
- }
189
-
190
- clone(context) {
191
- const string = EMPTY_STRING,
192
- node = null,
193
- array = [
194
- ...this.array
195
- ],
196
- equivalences = new Equivalences(context, string, node, array);
197
-
198
- return equivalences;
199
- }
200
-
201
- static name = "Equivalences";
202
-
203
- static fromNothing(context) {
204
- const string = EMPTY_STRING,
205
- node = null,
206
- array = [];
207
-
208
- context = null;
209
-
210
- const equivalences = new Equivalences(context, string, node, array);
211
-
212
- return equivalences;
213
- }
214
- });
215
-
216
- function definedVariablesFromGroundedTerms(groundedTerms, definedVariables, context) {
217
- groundedTerms.forEach((groundedTerm) => {
218
- const term = groundedTerm, ///
219
- variables = variablesFromTerm(term, context);
220
-
221
- variables.forEach((variable) => {
222
- const definedVariablesIncludesTermVariable = definedVariables.includes(variable);
223
-
224
- if (!definedVariablesIncludesTermVariable) {
225
- const definedVariable = variable; ///
226
-
227
- definedVariables.push(definedVariable);
228
- }
229
- });
230
- });
231
- }
232
-
233
- function groundedTermsFromGroundedEquivalencesAndDefinedVariables(groundedEquivalences, definedVariables, groundedTerms, context) {
234
- groundedEquivalences.forEachEquivalence((groundedEquivalence) => {
235
- groundedEquivalence.getGroundedTerms(definedVariables, groundedTerms, context);
236
- });
237
- }