occam-verify-cli 0.0.272 → 0.0.274
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.
- package/.swcrc +5 -0
- package/bin/abbreviations.js +4 -2
- package/bin/context/{package → release}/fileSystem.js +38 -25
- package/bin/fileNames.js +7 -7
- package/bin/loadReleaseContexts.js +52 -0
- package/bin/main.js +8 -9
- package/bin/options.js +2 -2
- package/bin/utilities/fileSystem.js +13 -15
- package/lib/assertion.js +140 -0
- package/lib/axiom.js +90 -0
- package/lib/browser.js +27 -0
- package/lib/combinator.js +58 -0
- package/lib/conclusion.js +140 -0
- package/lib/constants.js +42 -0
- package/lib/constructor.js +76 -0
- package/lib/context/file.js +342 -0
- package/lib/context/metaproof.js +232 -0
- package/lib/context/proof.js +211 -0
- package/lib/context/release.js +303 -0
- package/lib/main.js +27 -0
- package/lib/metaAssertion.js +200 -0
- package/lib/metaSubstitution.js +123 -0
- package/lib/permutationsMatrix.js +466136 -0
- package/lib/premise.js +168 -0
- package/lib/rule.js +139 -0
- package/lib/ruleNames.js +46 -0
- package/lib/type.js +153 -0
- package/lib/utilities/array.js +99 -0
- package/lib/utilities/metastatement.js +45 -0
- package/lib/utilities/permutations.js +114 -0
- package/lib/utilities/query.js +81 -0
- package/lib/utilities/string.js +54 -0
- package/lib/variable.js +94 -0
- package/lib/verify/IndicativeConditional.js +29 -0
- package/lib/verify/assertion/type.js +52 -0
- package/lib/verify/axiom.js +52 -0
- package/lib/verify/conclusion.js +34 -0
- package/lib/verify/conditinalInference.js +30 -0
- package/lib/verify/declaration/combinator.js +24 -0
- package/lib/verify/declaration/constructor.js +24 -0
- package/lib/verify/declaration/topLevel.js +51 -0
- package/lib/verify/declaration/type.js +24 -0
- package/lib/verify/declaration/variable.js +24 -0
- package/lib/verify/equality.js +45 -0
- package/lib/verify/file.js +39 -0
- package/lib/verify/files.js +48 -0
- package/lib/verify/label.js +24 -0
- package/lib/verify/labels.js +27 -0
- package/lib/verify/metaDerivation.js +94 -0
- package/lib/verify/metaproof.js +81 -0
- package/lib/verify/metastatement/qualified.js +31 -0
- package/lib/verify/metastatement/unqualified.js +39 -0
- package/lib/verify/premiseOrPremises.js +39 -0
- package/lib/verify/release.js +61 -0
- package/lib/verify/rule.js +61 -0
- package/lib/verify/statement/qualified.js +24 -0
- package/lib/verify/statement/unqualified.js +32 -0
- package/lib/verify/statement.js +43 -0
- package/lib/verify/statementAsCombinator.js +102 -0
- package/lib/verify/supposition.js +29 -0
- package/lib/verify/term.js +121 -0
- package/lib/verify/termAsConstructor.js +126 -0
- package/lib/verify/termAsVariable.js +31 -0
- package/lib/verify/type.js +45 -0
- package/lib/verify/unconditionalInference.js +31 -0
- package/lib/verify/variable.js +48 -0
- package/package.json +21 -5
- package/{bin → src}/assertion.js +2 -4
- package/src/axiom.js +49 -0
- package/src/browser.js +4 -0
- package/{bin → src}/combinator.js +2 -4
- package/{bin → src}/conclusion.js +4 -6
- package/src/constants.js +9 -0
- package/{bin → src}/constructor.js +2 -4
- package/{bin → src}/context/file.js +34 -24
- package/{bin → src}/context/metaproof.js +13 -3
- package/{bin → src}/context/proof.js +13 -3
- package/src/context/release.js +219 -0
- package/src/main.js +4 -0
- package/{bin → src}/metaAssertion.js +4 -6
- package/{bin → src}/metaSubstitution.js +11 -4
- package/{bin → src}/permutationsMatrix.js +1 -1
- package/{bin → src}/premise.js +6 -8
- package/{bin → src}/rule.js +24 -15
- package/src/ruleNames.js +10 -0
- package/{bin → src}/type.js +1 -3
- package/{bin → src}/utilities/array.js +19 -24
- package/{bin → src}/utilities/metastatement.js +18 -12
- package/{bin → src}/utilities/permutations.js +4 -4
- package/{bin → src}/utilities/query.js +8 -18
- package/{bin → src}/utilities/string.js +4 -10
- package/{bin → src}/variable.js +1 -3
- package/src/verify/IndicativeConditional.js +20 -0
- package/{bin → src}/verify/assertion/type.js +8 -14
- package/src/verify/axiom.js +68 -0
- package/{bin → src}/verify/conclusion.js +4 -6
- package/src/verify/conditinalInference.js +25 -0
- package/{bin → src}/verify/declaration/combinator.js +3 -5
- package/{bin → src}/verify/declaration/constructor.js +3 -5
- package/{bin → src}/verify/declaration/topLevel.js +8 -10
- package/{bin → src}/verify/declaration/type.js +3 -5
- package/{bin → src}/verify/declaration/variable.js +3 -5
- package/{bin → src}/verify/equality.js +4 -6
- package/{bin → src}/verify/file.js +9 -15
- package/{bin → src}/verify/files.js +5 -7
- package/{bin → src}/verify/label.js +3 -9
- package/{bin → src}/verify/labels.js +2 -4
- package/{bin → src}/verify/metaDerivation.js +25 -19
- package/{bin → src}/verify/metaproof.js +6 -7
- package/{bin → src}/verify/metastatement/qualified.js +4 -10
- package/{bin → src}/verify/metastatement/unqualified.js +5 -11
- package/{bin → src}/verify/premiseOrPremises.js +9 -10
- package/src/verify/release.js +70 -0
- package/{bin → src}/verify/rule.js +17 -20
- package/{bin → src}/verify/statement/qualified.js +3 -5
- package/{bin → src}/verify/statement/unqualified.js +3 -5
- package/{bin → src}/verify/statement.js +7 -13
- package/{bin → src}/verify/statementAsCombinator.js +8 -14
- package/{bin → src}/verify/supposition.js +4 -6
- package/{bin → src}/verify/term.js +7 -13
- package/{bin → src}/verify/termAsConstructor.js +13 -19
- package/{bin → src}/verify/termAsVariable.js +3 -9
- package/{bin → src}/verify/type.js +7 -13
- package/{bin → src}/verify/unconditionalInference.js +4 -11
- package/{bin → src}/verify/variable.js +6 -12
- package/bin/axiom.js +0 -52
- package/bin/consequent.js +0 -19
- package/bin/constants.js +0 -19
- package/bin/context/package.js +0 -221
- package/bin/loadPackageContexts.js +0 -53
- package/bin/permutations.js +0 -3
- package/bin/ruleNames.js +0 -23
- package/bin/verify/axiom/IndicativeConditional.js +0 -54
- package/bin/verify/axiom/unqualifiedStatement.js +0 -40
- package/bin/verify/axiom.js +0 -37
- package/bin/verify/conditinalInference.js +0 -42
- package/bin/verify/consequent.js +0 -32
- package/bin/verify/metaConsequent.js +0 -23
- package/bin/verify/metaSupposition.js +0 -24
- package/bin/verify/package.js +0 -81
- package/index.js +0 -9
|
@@ -0,0 +1,200 @@
|
|
|
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 MetaAssertion;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
var _array = require("./utilities/array");
|
|
12
|
+
var _query = require("./utilities/query");
|
|
13
|
+
var _metastatement = require("./utilities/metastatement");
|
|
14
|
+
function _classCallCheck(instance, Constructor) {
|
|
15
|
+
if (!(instance instanceof Constructor)) {
|
|
16
|
+
throw new TypeError("Cannot call a class as a function");
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
function _defineProperties(target, props) {
|
|
20
|
+
for(var i = 0; i < props.length; i++){
|
|
21
|
+
var descriptor = props[i];
|
|
22
|
+
descriptor.enumerable = descriptor.enumerable || false;
|
|
23
|
+
descriptor.configurable = true;
|
|
24
|
+
if ("value" in descriptor) descriptor.writable = true;
|
|
25
|
+
Object.defineProperty(target, descriptor.key, descriptor);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
function _createClass(Constructor, protoProps, staticProps) {
|
|
29
|
+
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
|
|
30
|
+
if (staticProps) _defineProperties(Constructor, staticProps);
|
|
31
|
+
return Constructor;
|
|
32
|
+
}
|
|
33
|
+
var metastatementNodeQuery = (0, _query.nodeQuery)("/*/metastatement!"), metastatementNodesQuery = (0, _query.nodesQuery)("/metaSubproofAssertion/metastatement"), metaSubproofAssertionNodeQuery = (0, _query.nodeQuery)("/metastatement/metaSubproofAssertion"), qualifiedOrUnqualifiedMetastatementMetastatementNodesQuery = (0, _query.nodesQuery)("/metaSubproof/qualifiedMetastatement|unqualifiedMetastatement/metastatement!");
|
|
34
|
+
var MetaAssertion = /*#__PURE__*/ function() {
|
|
35
|
+
function MetaAssertion(metaSubproofNode, metastatementNode) {
|
|
36
|
+
_classCallCheck(this, MetaAssertion);
|
|
37
|
+
this.metaSubproofNode = metaSubproofNode;
|
|
38
|
+
this.metastatementNode = metastatementNode;
|
|
39
|
+
}
|
|
40
|
+
_createClass(MetaAssertion, [
|
|
41
|
+
{
|
|
42
|
+
key: "getMetaSubproofNode",
|
|
43
|
+
value: function getMetaSubproofNode() {
|
|
44
|
+
return this.metaSubproofNode;
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
key: "getMetastatementNode",
|
|
49
|
+
value: function getMetastatementNode() {
|
|
50
|
+
return this.metastatementNode;
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
key: "match",
|
|
55
|
+
value: function match(metaAssertion) {
|
|
56
|
+
var matches = false;
|
|
57
|
+
var metastatementNode = metaAssertion.getMetastatementNode();
|
|
58
|
+
if (metastatementNode !== null) {
|
|
59
|
+
var metaSubproofAssertionNode = metaSubproofAssertionNodeQuery(metastatementNode);
|
|
60
|
+
if (metaSubproofAssertionNode === null) {
|
|
61
|
+
var metastatementNodeMatches = this.matchMetastatementNode(metastatementNode);
|
|
62
|
+
matches = metastatementNodeMatches; ///
|
|
63
|
+
} else {
|
|
64
|
+
var metaSubproofAssertionNodeMatches = this.matchMetaSubproofAssertionNode(metaSubproofAssertionNode);
|
|
65
|
+
matches = metaSubproofAssertionNodeMatches; ///
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return matches;
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
key: "matchMetastatementNode",
|
|
73
|
+
value: function matchMetastatementNode(metastatementNode) {
|
|
74
|
+
var metastatementNodeMatches = false;
|
|
75
|
+
if (this.metastatementNode !== null) {
|
|
76
|
+
var topmostMetastatementNode = metastatementNode, topmostMetaAssertionMetastatementNode = this.metastatementNode, topmostMetaAssertionMetastatementNodeMatches = matchTopmostMetaAssertionMetastatementNode(topmostMetaAssertionMetastatementNode, topmostMetastatementNode);
|
|
77
|
+
metastatementNodeMatches = topmostMetaAssertionMetastatementNodeMatches; ///
|
|
78
|
+
}
|
|
79
|
+
return metastatementNodeMatches;
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
key: "matchMetaSubproofAssertionNode",
|
|
84
|
+
value: function matchMetaSubproofAssertionNode(metaSubproofAssertionNode) {
|
|
85
|
+
var metaSubproofAssertionNodeMatches = false;
|
|
86
|
+
if (this.metaSubproofNode !== null) {
|
|
87
|
+
var metaSubproofAssertionMetastatementNodes = metastatementNodesQuery(metaSubproofAssertionNode), firstMetaSubproofAssertionMetastatementNode = (0, _array.first)(metaSubproofAssertionMetastatementNodes), qualifiedOrUnqualifiedMetastatementMetastatementNodes = qualifiedOrUnqualifiedMetastatementMetastatementNodesQuery(this.metaSubproofNode), firstQualifiedOrUnqualifiedMetastatementMetastatementNode = (0, _array.first)(qualifiedOrUnqualifiedMetastatementMetastatementNodes);
|
|
88
|
+
var topmostMetastatementNode = firstMetaSubproofAssertionMetastatementNode, topmostMetaAssertionMetastatementNode = firstQualifiedOrUnqualifiedMetastatementMetastatementNode, topmostMetaAssertionMetastatementNodeMatches = matchTopmostMetaAssertionMetastatementNode(topmostMetaAssertionMetastatementNode, topmostMetastatementNode);
|
|
89
|
+
if (topmostMetaAssertionMetastatementNodeMatches) {
|
|
90
|
+
var secondMetaSubproofAssertionMetastatementNode = (0, _array.second)(metaSubproofAssertionMetastatementNodes), secondQualifiedOrUnqualifiedMetastatementMetastatementNode = (0, _array.second)(qualifiedOrUnqualifiedMetastatementMetastatementNodes);
|
|
91
|
+
var topmostMetastatementNode1 = secondMetaSubproofAssertionMetastatementNode, topmostMetaAssertionMetastatementNode1 = secondQualifiedOrUnqualifiedMetastatementMetastatementNode, topmostMetaAssertionMetastatementNodeMatches1 = matchTopmostMetaAssertionMetastatementNode(topmostMetaAssertionMetastatementNode1, topmostMetastatementNode1);
|
|
92
|
+
metaSubproofAssertionNodeMatches = topmostMetaAssertionMetastatementNodeMatches1; ///
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return metaSubproofAssertionNodeMatches;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
], [
|
|
99
|
+
{
|
|
100
|
+
key: "fromMetaSubproofNode",
|
|
101
|
+
value: function fromMetaSubproofNode(metaSubproofNode) {
|
|
102
|
+
var metastatementNode = null, metaAssertion = new MetaAssertion(metaSubproofNode, metastatementNode);
|
|
103
|
+
return metaAssertion;
|
|
104
|
+
}
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
key: "fromMetastatementNode",
|
|
108
|
+
value: function fromMetastatementNode(metastatementNode) {
|
|
109
|
+
var metaSubproofNode = null, metaAssertion = new MetaAssertion(metaSubproofNode, metastatementNode);
|
|
110
|
+
return metaAssertion;
|
|
111
|
+
}
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
key: "fromQualifiedMetastatementNode",
|
|
115
|
+
value: function fromQualifiedMetastatementNode(qualifiedMetastatementNode) {
|
|
116
|
+
var metaSubproofNode = null, metastatementNode = metastatementNodeQuery(qualifiedMetastatementNode), metaAssertion = new MetaAssertion(metaSubproofNode, metastatementNode);
|
|
117
|
+
return metaAssertion;
|
|
118
|
+
}
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
key: "fromUnqualifiedMetastatementNode",
|
|
122
|
+
value: function fromUnqualifiedMetastatementNode(unqualifiedMetastatementNode) {
|
|
123
|
+
var metaSubproofNode = null, metastatementNode = metastatementNodeQuery(unqualifiedMetastatementNode), metaAssertion = new MetaAssertion(metaSubproofNode, metastatementNode);
|
|
124
|
+
return metaAssertion;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
]);
|
|
128
|
+
return MetaAssertion;
|
|
129
|
+
}();
|
|
130
|
+
function matchMetaAssertionNode(metaAssertionNode, node) {
|
|
131
|
+
var metaAssertionNodeMatches = false;
|
|
132
|
+
var nodeTerminalNode = node.isTerminalNode(), ruleNodeTerminalNode = metaAssertionNode.isTerminalNode();
|
|
133
|
+
if (nodeTerminalNode === ruleNodeTerminalNode) {
|
|
134
|
+
if (nodeTerminalNode) {
|
|
135
|
+
var terminalNode = node, metaAssertionTerminalNode = metaAssertionNode, metaAssertionTerminalNodeMatches = matchMetaAssertionTerminalNode(metaAssertionTerminalNode, terminalNode);
|
|
136
|
+
metaAssertionNodeMatches = metaAssertionTerminalNodeMatches; ///
|
|
137
|
+
} else {
|
|
138
|
+
var nonTerminalNode = node, metaAssertionNonTerminalNode = metaAssertionNode, metaAssertionNonTerminalNodeMatches = matchMetaAssertionNonTerminalNode(metaAssertionNonTerminalNode, nonTerminalNode);
|
|
139
|
+
metaAssertionNodeMatches = metaAssertionNonTerminalNodeMatches; ///
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return metaAssertionNodeMatches;
|
|
143
|
+
}
|
|
144
|
+
function matchMetaAssertionNodes(metaAssertionNodes, nodes) {
|
|
145
|
+
var metaAssertionNodesMatches = false;
|
|
146
|
+
var nodesLength = nodes.length, metaAssertionNodesLength = metaAssertionNodes.length;
|
|
147
|
+
if (nodesLength === metaAssertionNodesLength) {
|
|
148
|
+
metaAssertionNodesMatches = nodes.every(function(node, index) {
|
|
149
|
+
var metaAssertionNode = metaAssertionNodes[index], metaAssertionNodeMatches = matchMetaAssertionNode(metaAssertionNode, node);
|
|
150
|
+
if (metaAssertionNodeMatches) {
|
|
151
|
+
return true;
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
return metaAssertionNodesMatches;
|
|
156
|
+
}
|
|
157
|
+
function matchMetaAssertionTerminalNode(metaAssertionTerminalNode, terminalNode) {
|
|
158
|
+
var metaAssertionTerminalNodeMatches = false;
|
|
159
|
+
var matches = metaAssertionTerminalNode.match(terminalNode);
|
|
160
|
+
if (matches) {
|
|
161
|
+
metaAssertionTerminalNodeMatches = true;
|
|
162
|
+
}
|
|
163
|
+
return metaAssertionTerminalNodeMatches;
|
|
164
|
+
}
|
|
165
|
+
function matchMetaAssertionNonTerminalNode(metaAssertionNonTerminalNode, nonTerminalNode) {
|
|
166
|
+
var metaAssertionNonTerminalNodeMatches = false;
|
|
167
|
+
var ruleName = nonTerminalNode.getRuleName(), metaAssertionRuleName = metaAssertionNonTerminalNode.getRuleName(); ///
|
|
168
|
+
if (ruleName === metaAssertionRuleName) {
|
|
169
|
+
var childNodes = nonTerminalNode.getChildNodes(), nodes = childNodes, metaAssertionChildNodes = metaAssertionNonTerminalNode.getChildNodes(), metaAssertionNodes = metaAssertionChildNodes, metaAssertionNodesMatches = matchMetaAssertionNodes(metaAssertionNodes, nodes);
|
|
170
|
+
metaAssertionNonTerminalNodeMatches = metaAssertionNodesMatches; ///
|
|
171
|
+
}
|
|
172
|
+
return metaAssertionNonTerminalNodeMatches;
|
|
173
|
+
}
|
|
174
|
+
function matchMetaAssertionMetastatementNode(metaAssertionMetastatementNode, metastatementNode) {
|
|
175
|
+
var nonTerminalNode = metastatementNode, metaAssertionNonTerminalNode = metaAssertionMetastatementNode, metaAssertionNonTerminalNodeMatches = matchMetaAssertionNonTerminalNode(metaAssertionNonTerminalNode, nonTerminalNode), metaAssertionMetastatementNodeNatches = metaAssertionNonTerminalNodeMatches; ///
|
|
176
|
+
return metaAssertionMetastatementNodeNatches;
|
|
177
|
+
}
|
|
178
|
+
function matchTopmostMetaAssertionMetastatementNode(topmostMetaAssertionMetastatementNode, topmostMetastatementNode) {
|
|
179
|
+
var metaAssertionMetastatementNodeMatches;
|
|
180
|
+
var metastatementNode = topmostMetastatementNode, metaAssertionMetastatementNode = topmostMetaAssertionMetastatementNode; ///
|
|
181
|
+
metaAssertionMetastatementNodeMatches = matchMetaAssertionMetastatementNode(metaAssertionMetastatementNode, metastatementNode);
|
|
182
|
+
if (!metaAssertionMetastatementNodeMatches) {
|
|
183
|
+
var nonTerminalNode = metastatementNode, childNodes = nonTerminalNode, bracketedMetastatementChildNodeMatches = (0, _metastatement.matchBracketedMetastatementChildNode)(childNodes, function(bracketedMetastatementChildNode) {
|
|
184
|
+
var metastatementNode = bracketedMetastatementChildNode, metaAssertionMetastatementNodeMatches = matchMetaAssertionMetastatementNode(metaAssertionMetastatementNode, metastatementNode), bracketedMetastatementChildNodeMatches = metaAssertionMetastatementNodeMatches;
|
|
185
|
+
return bracketedMetastatementChildNodeMatches;
|
|
186
|
+
});
|
|
187
|
+
metaAssertionMetastatementNodeMatches = bracketedMetastatementChildNodeMatches; ///
|
|
188
|
+
}
|
|
189
|
+
if (!metaAssertionMetastatementNodeMatches) {
|
|
190
|
+
var metaAssertionNonTerminalNode = metaAssertionMetastatementNode, metaAssertionChildNodes = metaAssertionNonTerminalNode.getChildNodes(), bracketedMetaAssertionMetastatementChildNodeMatches = (0, _metastatement.matchBracketedMetastatementChildNode)(metaAssertionChildNodes, function(bracketedMetaAssertionMetastatementChildNode) {
|
|
191
|
+
var metaAssertionMetastatementNode = bracketedMetaAssertionMetastatementChildNode, metaAssertionMetastatementNodeMatches = matchMetaAssertionMetastatementNode(metaAssertionMetastatementNode, metastatementNode), bracketedMetaAssertionMetastatementChildNodeMatches = metaAssertionMetastatementNodeMatches;
|
|
192
|
+
return bracketedMetaAssertionMetastatementChildNodeMatches;
|
|
193
|
+
});
|
|
194
|
+
metaAssertionMetastatementNodeMatches = bracketedMetaAssertionMetastatementChildNodeMatches; ///
|
|
195
|
+
}
|
|
196
|
+
var topmostMetaAssertionMetastatementNodeMatches = metaAssertionMetastatementNodeMatches; ///
|
|
197
|
+
return topmostMetaAssertionMetastatementNodeMatches;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9tZXRhQXNzZXJ0aW9uLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBmaXJzdCwgc2Vjb25kIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBub2RlUXVlcnksIG5vZGVzUXVlcnkgfSBmcm9tIFwiLi91dGlsaXRpZXMvcXVlcnlcIjtcbmltcG9ydCB7IG1hdGNoQnJhY2tldGVkTWV0YXN0YXRlbWVudENoaWxkTm9kZSB9IGZyb20gXCIuL3V0aWxpdGllcy9tZXRhc3RhdGVtZW50XCI7XG5cbmNvbnN0IG1ldGFzdGF0ZW1lbnROb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvKi9tZXRhc3RhdGVtZW50IVwiKSxcbiAgICAgIG1ldGFzdGF0ZW1lbnROb2Rlc1F1ZXJ5ID0gbm9kZXNRdWVyeShcIi9tZXRhU3VicHJvb2ZBc3NlcnRpb24vbWV0YXN0YXRlbWVudFwiKSxcbiAgICAgIG1ldGFTdWJwcm9vZkFzc2VydGlvbk5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9tZXRhc3RhdGVtZW50L21ldGFTdWJwcm9vZkFzc2VydGlvblwiKSxcbiAgICAgIHF1YWxpZmllZE9yVW5xdWFsaWZpZWRNZXRhc3RhdGVtZW50TWV0YXN0YXRlbWVudE5vZGVzUXVlcnkgPSBub2Rlc1F1ZXJ5KFwiL21ldGFTdWJwcm9vZi9xdWFsaWZpZWRNZXRhc3RhdGVtZW50fHVucXVhbGlmaWVkTWV0YXN0YXRlbWVudC9tZXRhc3RhdGVtZW50IVwiKTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0YUFzc2VydGlvbiB7XG4gIGNvbnN0cnVjdG9yKG1ldGFTdWJwcm9vZk5vZGUsIG1ldGFzdGF0ZW1lbnROb2RlKSB7XG4gICAgdGhpcy5tZXRhU3VicHJvb2ZOb2RlID0gbWV0YVN1YnByb29mTm9kZTtcbiAgICB0aGlzLm1ldGFzdGF0ZW1lbnROb2RlID0gbWV0YXN0YXRlbWVudE5vZGU7XG4gIH1cblxuICBnZXRNZXRhU3VicHJvb2ZOb2RlKCkge1xuICAgIHJldHVybiB0aGlzLm1ldGFTdWJwcm9vZk5vZGU7XG4gIH1cblxuICBnZXRNZXRhc3RhdGVtZW50Tm9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5tZXRhc3RhdGVtZW50Tm9kZTtcbiAgfVxuXG4gIG1hdGNoKG1ldGFBc3NlcnRpb24pIHtcbiAgICBsZXQgbWF0Y2hlcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgbWV0YXN0YXRlbWVudE5vZGUgPSBtZXRhQXNzZXJ0aW9uLmdldE1ldGFzdGF0ZW1lbnROb2RlKCk7XG5cbiAgICBpZiAobWV0YXN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IG1ldGFTdWJwcm9vZkFzc2VydGlvbk5vZGUgPSBtZXRhU3VicHJvb2ZBc3NlcnRpb25Ob2RlUXVlcnkobWV0YXN0YXRlbWVudE5vZGUpO1xuXG4gICAgICBpZiAobWV0YVN1YnByb29mQXNzZXJ0aW9uTm9kZSA9PT0gbnVsbCkge1xuICAgICAgICBjb25zdCBtZXRhc3RhdGVtZW50Tm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoTWV0YXN0YXRlbWVudE5vZGUobWV0YXN0YXRlbWVudE5vZGUpO1xuXG4gICAgICAgIG1hdGNoZXMgPSBtZXRhc3RhdGVtZW50Tm9kZU1hdGNoZXM7ICAvLy9cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG1ldGFTdWJwcm9vZkFzc2VydGlvbk5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaE1ldGFTdWJwcm9vZkFzc2VydGlvbk5vZGUobWV0YVN1YnByb29mQXNzZXJ0aW9uTm9kZSk7XG5cbiAgICAgICAgbWF0Y2hlcyA9IG1ldGFTdWJwcm9vZkFzc2VydGlvbk5vZGVNYXRjaGVzOyAvLy9cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWF0Y2hlcztcbiAgfVxuXG4gIG1hdGNoTWV0YXN0YXRlbWVudE5vZGUobWV0YXN0YXRlbWVudE5vZGUpIHtcbiAgICBsZXQgbWV0YXN0YXRlbWVudE5vZGVNYXRjaGVzID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5tZXRhc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgdG9wbW9zdE1ldGFzdGF0ZW1lbnROb2RlID0gbWV0YXN0YXRlbWVudE5vZGUsIC8vL1xuICAgICAgICAgICAgdG9wbW9zdE1ldGFBc3NlcnRpb25NZXRhc3RhdGVtZW50Tm9kZSA9IHRoaXMubWV0YXN0YXRlbWVudE5vZGUsICAvLy9cbiAgICAgICAgICAgIHRvcG1vc3RNZXRhQXNzZXJ0aW9uTWV0YXN0YXRlbWVudE5vZGVNYXRjaGVzID0gbWF0Y2hUb3Btb3N0TWV0YUFzc2VydGlvbk1ldGFzdGF0ZW1lbnROb2RlKHRvcG1vc3RNZXRhQXNzZXJ0aW9uTWV0YXN0YXRlbWVudE5vZGUsIHRvcG1vc3RNZXRhc3RhdGVtZW50Tm9kZSk7XG5cbiAgICAgIG1ldGFzdGF0ZW1lbnROb2RlTWF0Y2hlcyA9IHRvcG1vc3RNZXRhQXNzZXJ0aW9uTWV0YXN0YXRlbWVudE5vZGVNYXRjaGVzOyAgLy8vXG4gICAgfVxuXG4gICAgcmV0dXJuIG1ldGFzdGF0ZW1lbnROb2RlTWF0Y2hlcztcbiAgfVxuXG4gIG1hdGNoTWV0YVN1YnByb29mQXNzZXJ0aW9uTm9kZShtZXRhU3VicHJvb2ZBc3NlcnRpb25Ob2RlKSB7XG4gICAgbGV0IG1ldGFTdWJwcm9vZkFzc2VydGlvbk5vZGVNYXRjaGVzID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5tZXRhU3VicHJvb2ZOb2RlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBtZXRhU3VicHJvb2ZBc3NlcnRpb25NZXRhc3RhdGVtZW50Tm9kZXMgPSBtZXRhc3RhdGVtZW50Tm9kZXNRdWVyeShtZXRhU3VicHJvb2ZBc3NlcnRpb25Ob2RlKSxcbiAgICAgICAgICAgIGZpcnN0TWV0YVN1YnByb29mQXNzZXJ0aW9uTWV0YXN0YXRlbWVudE5vZGUgPSBmaXJzdChtZXRhU3VicHJvb2ZBc3NlcnRpb25NZXRhc3RhdGVtZW50Tm9kZXMpLFxuICAgICAgICAgICAgcXVhbGlmaWVkT3JVbnF1YWxpZmllZE1ldGFzdGF0ZW1lbnRNZXRhc3RhdGVtZW50Tm9kZXMgPSBxdWFsaWZpZWRPclVucXVhbGlmaWVkTWV0YXN0YXRlbWVudE1ldGFzdGF0ZW1lbnROb2Rlc1F1ZXJ5KHRoaXMubWV0YVN1YnByb29mTm9kZSksXG4gICAgICAgICAgICBmaXJzdFF1YWxpZmllZE9yVW5xdWFsaWZpZWRNZXRhc3RhdGVtZW50TWV0YXN0YXRlbWVudE5vZGUgPSBmaXJzdChxdWFsaWZpZWRPclVucXVhbGlmaWVkTWV0YXN0YXRlbWVudE1ldGFzdGF0ZW1lbnROb2Rlcyk7XG5cbiAgICAgIGNvbnN0IHRvcG1vc3RNZXRhc3RhdGVtZW50Tm9kZSA9IGZpcnN0TWV0YVN1YnByb29mQXNzZXJ0aW9uTWV0YXN0YXRlbWVudE5vZGUsICAvLy9cbiAgICAgICAgICAgIHRvcG1vc3RNZXRhQXNzZXJ0aW9uTWV0YXN0YXRlbWVudE5vZGUgPSBmaXJzdFF1YWxpZmllZE9yVW5xdWFsaWZpZWRNZXRhc3RhdGVtZW50TWV0YXN0YXRlbWVudE5vZGUsIC8vL1xuICAgICAgICAgICAgdG9wbW9zdE1ldGFBc3NlcnRpb25NZXRhc3RhdGVtZW50Tm9kZU1hdGNoZXMgPSBtYXRjaFRvcG1vc3RNZXRhQXNzZXJ0aW9uTWV0YXN0YXRlbWVudE5vZGUodG9wbW9zdE1ldGFBc3NlcnRpb25NZXRhc3RhdGVtZW50Tm9kZSwgdG9wbW9zdE1ldGFzdGF0ZW1lbnROb2RlKTtcblxuICAgICAgaWYgKHRvcG1vc3RNZXRhQXNzZXJ0aW9uTWV0YXN0YXRlbWVudE5vZGVNYXRjaGVzKSB7XG4gICAgICAgIGNvbnN0IHNlY29uZE1ldGFTdWJwcm9vZkFzc2VydGlvbk1ldGFzdGF0ZW1lbnROb2RlID0gc2Vjb25kKG1ldGFTdWJwcm9vZkFzc2VydGlvbk1ldGFzdGF0ZW1lbnROb2RlcyksXG4gICAgICAgICAgICAgIHNlY29uZFF1YWxpZmllZE9yVW5xdWFsaWZpZWRNZXRhc3RhdGVtZW50TWV0YXN0YXRlbWVudE5vZGUgPSBzZWNvbmQocXVhbGlmaWVkT3JVbnF1YWxpZmllZE1ldGFzdGF0ZW1lbnRNZXRhc3RhdGVtZW50Tm9kZXMpO1xuXG4gICAgICAgIGNvbnN0IHRvcG1vc3RNZXRhc3RhdGVtZW50Tm9kZSA9IHNlY29uZE1ldGFTdWJwcm9vZkFzc2VydGlvbk1ldGFzdGF0ZW1lbnROb2RlLCAvLy9cbiAgICAgICAgICAgICAgdG9wbW9zdE1ldGFBc3NlcnRpb25NZXRhc3RhdGVtZW50Tm9kZSA9IHNlY29uZFF1YWxpZmllZE9yVW5xdWFsaWZpZWRNZXRhc3RhdGVtZW50TWV0YXN0YXRlbWVudE5vZGUsIC8vL1xuICAgICAgICAgICAgICB0b3Btb3N0TWV0YUFzc2VydGlvbk1ldGFzdGF0ZW1lbnROb2RlTWF0Y2hlcyA9IG1hdGNoVG9wbW9zdE1ldGFBc3NlcnRpb25NZXRhc3RhdGVtZW50Tm9kZSh0b3Btb3N0TWV0YUFzc2VydGlvbk1ldGFzdGF0ZW1lbnROb2RlLCB0b3Btb3N0TWV0YXN0YXRlbWVudE5vZGUpO1xuXG4gICAgICAgIG1ldGFTdWJwcm9vZkFzc2VydGlvbk5vZGVNYXRjaGVzID0gdG9wbW9zdE1ldGFBc3NlcnRpb25NZXRhc3RhdGVtZW50Tm9kZU1hdGNoZXM7IC8vL1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtZXRhU3VicHJvb2ZBc3NlcnRpb25Ob2RlTWF0Y2hlcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTWV0YVN1YnByb29mTm9kZShtZXRhU3VicHJvb2ZOb2RlKSB7XG4gICAgY29uc3QgbWV0YXN0YXRlbWVudE5vZGUgPSBudWxsLFxuICAgICAgICAgIG1ldGFBc3NlcnRpb24gPSBuZXcgTWV0YUFzc2VydGlvbihtZXRhU3VicHJvb2ZOb2RlLCBtZXRhc3RhdGVtZW50Tm9kZSk7XG5cbiAgICByZXR1cm4gbWV0YUFzc2VydGlvbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTWV0YXN0YXRlbWVudE5vZGUobWV0YXN0YXRlbWVudE5vZGUpIHtcbiAgICBjb25zdCBtZXRhU3VicHJvb2ZOb2RlID0gbnVsbCxcbiAgICAgICAgICBtZXRhQXNzZXJ0aW9uID0gbmV3IE1ldGFBc3NlcnRpb24obWV0YVN1YnByb29mTm9kZSwgbWV0YXN0YXRlbWVudE5vZGUpO1xuXG4gICAgcmV0dXJuIG1ldGFBc3NlcnRpb247XG4gIH1cblxuICBzdGF0aWMgZnJvbVF1YWxpZmllZE1ldGFzdGF0ZW1lbnROb2RlKHF1YWxpZmllZE1ldGFzdGF0ZW1lbnROb2RlKSB7XG4gICAgY29uc3QgbWV0YVN1YnByb29mTm9kZSA9IG51bGwsXG4gICAgICAgICAgbWV0YXN0YXRlbWVudE5vZGUgPSBtZXRhc3RhdGVtZW50Tm9kZVF1ZXJ5KHF1YWxpZmllZE1ldGFzdGF0ZW1lbnROb2RlKSxcbiAgICAgICAgICBtZXRhQXNzZXJ0aW9uID0gbmV3IE1ldGFBc3NlcnRpb24obWV0YVN1YnByb29mTm9kZSwgbWV0YXN0YXRlbWVudE5vZGUpO1xuXG4gICAgcmV0dXJuIG1ldGFBc3NlcnRpb247XG4gIH1cblxuICBzdGF0aWMgZnJvbVVucXVhbGlmaWVkTWV0YXN0YXRlbWVudE5vZGUodW5xdWFsaWZpZWRNZXRhc3RhdGVtZW50Tm9kZSkge1xuICAgIGNvbnN0IG1ldGFTdWJwcm9vZk5vZGUgPSBudWxsLFxuICAgICAgICAgIG1ldGFzdGF0ZW1lbnROb2RlID0gbWV0YXN0YXRlbWVudE5vZGVRdWVyeSh1bnF1YWxpZmllZE1ldGFzdGF0ZW1lbnROb2RlKSxcbiAgICAgICAgICBtZXRhQXNzZXJ0aW9uID0gbmV3IE1ldGFBc3NlcnRpb24obWV0YVN1YnByb29mTm9kZSwgbWV0YXN0YXRlbWVudE5vZGUpO1xuXG4gICAgcmV0dXJuIG1ldGFBc3NlcnRpb247XG4gIH1cbn1cblxuZnVuY3Rpb24gbWF0Y2hNZXRhQXNzZXJ0aW9uTm9kZShtZXRhQXNzZXJ0aW9uTm9kZSwgbm9kZSkge1xuICBsZXQgbWV0YUFzc2VydGlvbk5vZGVNYXRjaGVzID0gZmFsc2U7XG5cbiAgY29uc3Qgbm9kZVRlcm1pbmFsTm9kZSA9IG5vZGUuaXNUZXJtaW5hbE5vZGUoKSxcbiAgICAgICAgcnVsZU5vZGVUZXJtaW5hbE5vZGUgPSBtZXRhQXNzZXJ0aW9uTm9kZS5pc1Rlcm1pbmFsTm9kZSgpO1xuXG4gIGlmIChub2RlVGVybWluYWxOb2RlID09PSBydWxlTm9kZVRlcm1pbmFsTm9kZSkge1xuICAgIGlmIChub2RlVGVybWluYWxOb2RlKSB7XG4gICAgICBjb25zdCB0ZXJtaW5hbE5vZGUgPSBub2RlLCAgLy8vXG4gICAgICAgICAgICBtZXRhQXNzZXJ0aW9uVGVybWluYWxOb2RlID0gbWV0YUFzc2VydGlvbk5vZGUsICAvLy9cbiAgICAgICAgICAgIG1ldGFBc3NlcnRpb25UZXJtaW5hbE5vZGVNYXRjaGVzID0gbWF0Y2hNZXRhQXNzZXJ0aW9uVGVybWluYWxOb2RlKG1ldGFBc3NlcnRpb25UZXJtaW5hbE5vZGUsIHRlcm1pbmFsTm9kZSk7XG5cbiAgICAgIG1ldGFBc3NlcnRpb25Ob2RlTWF0Y2hlcyA9IG1ldGFBc3NlcnRpb25UZXJtaW5hbE5vZGVNYXRjaGVzOyAgLy8vXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IG5vZGUsIC8vL1xuICAgICAgICAgICAgbWV0YUFzc2VydGlvbk5vblRlcm1pbmFsTm9kZSA9IG1ldGFBc3NlcnRpb25Ob2RlLCAgLy8vXG4gICAgICAgICAgICBtZXRhQXNzZXJ0aW9uTm9uVGVybWluYWxOb2RlTWF0Y2hlcyA9IG1hdGNoTWV0YUFzc2VydGlvbk5vblRlcm1pbmFsTm9kZShtZXRhQXNzZXJ0aW9uTm9uVGVybWluYWxOb2RlLCBub25UZXJtaW5hbE5vZGUpO1xuXG4gICAgICBtZXRhQXNzZXJ0aW9uTm9kZU1hdGNoZXMgPSBtZXRhQXNzZXJ0aW9uTm9uVGVybWluYWxOb2RlTWF0Y2hlczsgLy8vXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1ldGFBc3NlcnRpb25Ob2RlTWF0Y2hlcztcbn1cblxuZnVuY3Rpb24gbWF0Y2hNZXRhQXNzZXJ0aW9uTm9kZXMobWV0YUFzc2VydGlvbk5vZGVzLCBub2Rlcykge1xuICBsZXQgbWV0YUFzc2VydGlvbk5vZGVzTWF0Y2hlcyA9IGZhbHNlO1xuXG4gIGNvbnN0IG5vZGVzTGVuZ3RoID0gbm9kZXMubGVuZ3RoLFxuICAgICAgICBtZXRhQXNzZXJ0aW9uTm9kZXNMZW5ndGggPSBtZXRhQXNzZXJ0aW9uTm9kZXMubGVuZ3RoO1xuXG4gIGlmIChub2Rlc0xlbmd0aCA9PT0gbWV0YUFzc2VydGlvbk5vZGVzTGVuZ3RoKSB7XG4gICAgbWV0YUFzc2VydGlvbk5vZGVzTWF0Y2hlcyA9IG5vZGVzLmV2ZXJ5KChub2RlLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgbWV0YUFzc2VydGlvbk5vZGUgPSBtZXRhQXNzZXJ0aW9uTm9kZXNbaW5kZXhdLFxuICAgICAgICAgICAgbWV0YUFzc2VydGlvbk5vZGVNYXRjaGVzID0gbWF0Y2hNZXRhQXNzZXJ0aW9uTm9kZShtZXRhQXNzZXJ0aW9uTm9kZSwgbm9kZSk7XG5cbiAgICAgIGlmIChtZXRhQXNzZXJ0aW9uTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbWV0YUFzc2VydGlvbk5vZGVzTWF0Y2hlcztcbn1cblxuZnVuY3Rpb24gbWF0Y2hNZXRhQXNzZXJ0aW9uVGVybWluYWxOb2RlKG1ldGFBc3NlcnRpb25UZXJtaW5hbE5vZGUsIHRlcm1pbmFsTm9kZSkge1xuICBsZXQgbWV0YUFzc2VydGlvblRlcm1pbmFsTm9kZU1hdGNoZXMgPSBmYWxzZTtcblxuICBjb25zdCBtYXRjaGVzID0gbWV0YUFzc2VydGlvblRlcm1pbmFsTm9kZS5tYXRjaCh0ZXJtaW5hbE5vZGUpO1xuXG4gIGlmIChtYXRjaGVzKSB7XG4gICAgbWV0YUFzc2VydGlvblRlcm1pbmFsTm9kZU1hdGNoZXMgPSB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIG1ldGFBc3NlcnRpb25UZXJtaW5hbE5vZGVNYXRjaGVzO1xufVxuXG5mdW5jdGlvbiBtYXRjaE1ldGFBc3NlcnRpb25Ob25UZXJtaW5hbE5vZGUobWV0YUFzc2VydGlvbk5vblRlcm1pbmFsTm9kZSwgbm9uVGVybWluYWxOb2RlKSB7XG4gIGxldCBtZXRhQXNzZXJ0aW9uTm9uVGVybWluYWxOb2RlTWF0Y2hlcyA9IGZhbHNlO1xuXG4gIGNvbnN0IHJ1bGVOYW1lID0gbm9uVGVybWluYWxOb2RlLmdldFJ1bGVOYW1lKCksXG4gICAgICAgIG1ldGFBc3NlcnRpb25SdWxlTmFtZSA9IG1ldGFBc3NlcnRpb25Ob25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKTsgLy8vXG5cbiAgaWYgKHJ1bGVOYW1lID09PSBtZXRhQXNzZXJ0aW9uUnVsZU5hbWUpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gbm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBub2RlcyA9IGNoaWxkTm9kZXMsIC8vL1xuICAgICAgICAgIG1ldGFBc3NlcnRpb25DaGlsZE5vZGVzID0gbWV0YUFzc2VydGlvbk5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgbWV0YUFzc2VydGlvbk5vZGVzID0gbWV0YUFzc2VydGlvbkNoaWxkTm9kZXMsIC8vL1xuICAgICAgICAgIG1ldGFBc3NlcnRpb25Ob2Rlc01hdGNoZXMgPSBtYXRjaE1ldGFBc3NlcnRpb25Ob2RlcyhtZXRhQXNzZXJ0aW9uTm9kZXMsIG5vZGVzKTtcblxuICAgIG1ldGFBc3NlcnRpb25Ob25UZXJtaW5hbE5vZGVNYXRjaGVzID0gbWV0YUFzc2VydGlvbk5vZGVzTWF0Y2hlczsgIC8vL1xuICB9XG5cbiAgcmV0dXJuIG1ldGFBc3NlcnRpb25Ob25UZXJtaW5hbE5vZGVNYXRjaGVzO1xufVxuXG5mdW5jdGlvbiBtYXRjaE1ldGFBc3NlcnRpb25NZXRhc3RhdGVtZW50Tm9kZShtZXRhQXNzZXJ0aW9uTWV0YXN0YXRlbWVudE5vZGUsIG1ldGFzdGF0ZW1lbnROb2RlKSB7XG4gIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IG1ldGFzdGF0ZW1lbnROb2RlLCAgLy8vXG4gICAgICAgIG1ldGFBc3NlcnRpb25Ob25UZXJtaW5hbE5vZGUgPSBtZXRhQXNzZXJ0aW9uTWV0YXN0YXRlbWVudE5vZGUsICAvLy9cbiAgICAgICAgbWV0YUFzc2VydGlvbk5vblRlcm1pbmFsTm9kZU1hdGNoZXMgPSBtYXRjaE1ldGFBc3NlcnRpb25Ob25UZXJtaW5hbE5vZGUobWV0YUFzc2VydGlvbk5vblRlcm1pbmFsTm9kZSwgbm9uVGVybWluYWxOb2RlKSxcbiAgICAgICAgbWV0YUFzc2VydGlvbk1ldGFzdGF0ZW1lbnROb2RlTmF0Y2hlcyA9IG1ldGFBc3NlcnRpb25Ob25UZXJtaW5hbE5vZGVNYXRjaGVzOyAgLy8vXG5cbiAgcmV0dXJuIG1ldGFBc3NlcnRpb25NZXRhc3RhdGVtZW50Tm9kZU5hdGNoZXM7XG59XG5cbmZ1bmN0aW9uIG1hdGNoVG9wbW9zdE1ldGFBc3NlcnRpb25NZXRhc3RhdGVtZW50Tm9kZSh0b3Btb3N0TWV0YUFzc2VydGlvbk1ldGFzdGF0ZW1lbnROb2RlLCB0b3Btb3N0TWV0YXN0YXRlbWVudE5vZGUpIHtcbiAgbGV0IG1ldGFBc3NlcnRpb25NZXRhc3RhdGVtZW50Tm9kZU1hdGNoZXM7XG5cbiAgY29uc3QgbWV0YXN0YXRlbWVudE5vZGUgPSB0b3Btb3N0TWV0YXN0YXRlbWVudE5vZGUsIC8vL1xuICAgICAgICBtZXRhQXNzZXJ0aW9uTWV0YXN0YXRlbWVudE5vZGUgPSB0b3Btb3N0TWV0YUFzc2VydGlvbk1ldGFzdGF0ZW1lbnROb2RlOyAgLy8vXG5cbiAgbWV0YUFzc2VydGlvbk1ldGFzdGF0ZW1lbnROb2RlTWF0Y2hlcyA9IG1hdGNoTWV0YUFzc2VydGlvbk1ldGFzdGF0ZW1lbnROb2RlKG1ldGFBc3NlcnRpb25NZXRhc3RhdGVtZW50Tm9kZSwgbWV0YXN0YXRlbWVudE5vZGUpO1xuXG4gIGlmICghbWV0YUFzc2VydGlvbk1ldGFzdGF0ZW1lbnROb2RlTWF0Y2hlcykge1xuICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IG1ldGFzdGF0ZW1lbnROb2RlLCAgLy8vXG4gICAgICAgICAgY2hpbGROb2RlcyA9IG5vblRlcm1pbmFsTm9kZSwgLy8vXG4gICAgICAgICAgYnJhY2tldGVkTWV0YXN0YXRlbWVudENoaWxkTm9kZU1hdGNoZXMgPSBtYXRjaEJyYWNrZXRlZE1ldGFzdGF0ZW1lbnRDaGlsZE5vZGUoY2hpbGROb2RlcywgKGJyYWNrZXRlZE1ldGFzdGF0ZW1lbnRDaGlsZE5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1ldGFzdGF0ZW1lbnROb2RlID0gYnJhY2tldGVkTWV0YXN0YXRlbWVudENoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgICAgICAgICAgbWV0YUFzc2VydGlvbk1ldGFzdGF0ZW1lbnROb2RlTWF0Y2hlcyA9IG1hdGNoTWV0YUFzc2VydGlvbk1ldGFzdGF0ZW1lbnROb2RlKG1ldGFBc3NlcnRpb25NZXRhc3RhdGVtZW50Tm9kZSwgbWV0YXN0YXRlbWVudE5vZGUpLFxuICAgICAgICAgICAgICAgICAgYnJhY2tldGVkTWV0YXN0YXRlbWVudENoaWxkTm9kZU1hdGNoZXMgPSBtZXRhQXNzZXJ0aW9uTWV0YXN0YXRlbWVudE5vZGVNYXRjaGVzO1xuXG4gICAgICAgICAgICByZXR1cm4gYnJhY2tldGVkTWV0YXN0YXRlbWVudENoaWxkTm9kZU1hdGNoZXM7XG4gICAgICAgICAgfSk7XG5cbiAgICBtZXRhQXNzZXJ0aW9uTWV0YXN0YXRlbWVudE5vZGVNYXRjaGVzID0gYnJhY2tldGVkTWV0YXN0YXRlbWVudENoaWxkTm9kZU1hdGNoZXM7ICAvLy9cbiAgfVxuXG4gIGlmICghbWV0YUFzc2VydGlvbk1ldGFzdGF0ZW1lbnROb2RlTWF0Y2hlcykge1xuICAgIGNvbnN0IG1ldGFBc3NlcnRpb25Ob25UZXJtaW5hbE5vZGUgPSBtZXRhQXNzZXJ0aW9uTWV0YXN0YXRlbWVudE5vZGUsICAvLy9cbiAgICAgICAgICBtZXRhQXNzZXJ0aW9uQ2hpbGROb2RlcyA9IG1ldGFBc3NlcnRpb25Ob25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIGJyYWNrZXRlZE1ldGFBc3NlcnRpb25NZXRhc3RhdGVtZW50Q2hpbGROb2RlTWF0Y2hlcyA9IG1hdGNoQnJhY2tldGVkTWV0YXN0YXRlbWVudENoaWxkTm9kZShtZXRhQXNzZXJ0aW9uQ2hpbGROb2RlcywgKGJyYWNrZXRlZE1ldGFBc3NlcnRpb25NZXRhc3RhdGVtZW50Q2hpbGROb2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtZXRhQXNzZXJ0aW9uTWV0YXN0YXRlbWVudE5vZGUgPSBicmFja2V0ZWRNZXRhQXNzZXJ0aW9uTWV0YXN0YXRlbWVudENoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgICAgICAgICAgbWV0YUFzc2VydGlvbk1ldGFzdGF0ZW1lbnROb2RlTWF0Y2hlcyA9IG1hdGNoTWV0YUFzc2VydGlvbk1ldGFzdGF0ZW1lbnROb2RlKG1ldGFBc3NlcnRpb25NZXRhc3RhdGVtZW50Tm9kZSwgbWV0YXN0YXRlbWVudE5vZGUpLFxuICAgICAgICAgICAgICAgICAgYnJhY2tldGVkTWV0YUFzc2VydGlvbk1ldGFzdGF0ZW1lbnRDaGlsZE5vZGVNYXRjaGVzID0gbWV0YUFzc2VydGlvbk1ldGFzdGF0ZW1lbnROb2RlTWF0Y2hlcztcblxuICAgICAgICAgICAgcmV0dXJuIGJyYWNrZXRlZE1ldGFBc3NlcnRpb25NZXRhc3RhdGVtZW50Q2hpbGROb2RlTWF0Y2hlcztcbiAgICAgICAgICB9KTtcblxuICAgIG1ldGFBc3NlcnRpb25NZXRhc3RhdGVtZW50Tm9kZU1hdGNoZXMgPSBicmFja2V0ZWRNZXRhQXNzZXJ0aW9uTWV0YXN0YXRlbWVudENoaWxkTm9kZU1hdGNoZXM7ICAvLy9cbiAgfVxuXG4gIGNvbnN0IHRvcG1vc3RNZXRhQXNzZXJ0aW9uTWV0YXN0YXRlbWVudE5vZGVNYXRjaGVzID0gbWV0YUFzc2VydGlvbk1ldGFzdGF0ZW1lbnROb2RlTWF0Y2hlczsgIC8vL1xuXG4gIHJldHVybiB0b3Btb3N0TWV0YUFzc2VydGlvbk1ldGFzdGF0ZW1lbnROb2RlTWF0Y2hlcztcbn1cbiJdLCJuYW1lcyI6WyJNZXRhQXNzZXJ0aW9uIiwibWV0YXN0YXRlbWVudE5vZGVRdWVyeSIsIm5vZGVRdWVyeSIsIm1ldGFzdGF0ZW1lbnROb2Rlc1F1ZXJ5Iiwibm9kZXNRdWVyeSIsIm1ldGFTdWJwcm9vZkFzc2VydGlvbk5vZGVRdWVyeSIsInF1YWxpZmllZE9yVW5xdWFsaWZpZWRNZXRhc3RhdGVtZW50TWV0YXN0YXRlbWVudE5vZGVzUXVlcnkiLCJtZXRhU3VicHJvb2ZOb2RlIiwibWV0YXN0YXRlbWVudE5vZGUiLCJnZXRNZXRhU3VicHJvb2ZOb2RlIiwiZ2V0TWV0YXN0YXRlbWVudE5vZGUiLCJtYXRjaCIsIm1ldGFBc3NlcnRpb24iLCJtYXRjaGVzIiwibWV0YVN1YnByb29mQXNzZXJ0aW9uTm9kZSIsIm1ldGFzdGF0ZW1lbnROb2RlTWF0Y2hlcyIsIm1hdGNoTWV0YXN0YXRlbWVudE5vZGUiLCJtZXRhU3VicHJvb2ZBc3NlcnRpb25Ob2RlTWF0Y2hlcyIsIm1hdGNoTWV0YVN1YnByb29mQXNzZXJ0aW9uTm9kZSIsInRvcG1vc3RNZXRhc3RhdGVtZW50Tm9kZSIsInRvcG1vc3RNZXRhQXNzZXJ0aW9uTWV0YXN0YXRlbWVudE5vZGUiLCJ0b3Btb3N0TWV0YUFzc2VydGlvbk1ldGFzdGF0ZW1lbnROb2RlTWF0Y2hlcyIsIm1hdGNoVG9wbW9zdE1ldGFBc3NlcnRpb25NZXRhc3RhdGVtZW50Tm9kZSIsIm1ldGFTdWJwcm9vZkFzc2VydGlvbk1ldGFzdGF0ZW1lbnROb2RlcyIsImZpcnN0TWV0YVN1YnByb29mQXNzZXJ0aW9uTWV0YXN0YXRlbWVudE5vZGUiLCJmaXJzdCIsInF1YWxpZmllZE9yVW5xdWFsaWZpZWRNZXRhc3RhdGVtZW50TWV0YXN0YXRlbWVudE5vZGVzIiwiZmlyc3RRdWFsaWZpZWRPclVucXVhbGlmaWVkTWV0YXN0YXRlbWVudE1ldGFzdGF0ZW1lbnROb2RlIiwic2Vjb25kTWV0YVN1YnByb29mQXNzZXJ0aW9uTWV0YXN0YXRlbWVudE5vZGUiLCJzZWNvbmQiLCJzZWNvbmRRdWFsaWZpZWRPclVucXVhbGlmaWVkTWV0YXN0YXRlbWVudE1ldGFzdGF0ZW1lbnROb2RlIiwiZnJvbU1ldGFTdWJwcm9vZk5vZGUiLCJmcm9tTWV0YXN0YXRlbWVudE5vZGUiLCJmcm9tUXVhbGlmaWVkTWV0YXN0YXRlbWVudE5vZGUiLCJxdWFsaWZpZWRNZXRhc3RhdGVtZW50Tm9kZSIsImZyb21VbnF1YWxpZmllZE1ldGFzdGF0ZW1lbnROb2RlIiwidW5xdWFsaWZpZWRNZXRhc3RhdGVtZW50Tm9kZSIsIm1hdGNoTWV0YUFzc2VydGlvbk5vZGUiLCJtZXRhQXNzZXJ0aW9uTm9kZSIsIm5vZGUiLCJtZXRhQXNzZXJ0aW9uTm9kZU1hdGNoZXMiLCJub2RlVGVybWluYWxOb2RlIiwiaXNUZXJtaW5hbE5vZGUiLCJydWxlTm9kZVRlcm1pbmFsTm9kZSIsInRlcm1pbmFsTm9kZSIsIm1ldGFBc3NlcnRpb25UZXJtaW5hbE5vZGUiLCJtZXRhQXNzZXJ0aW9uVGVybWluYWxOb2RlTWF0Y2hlcyIsIm1hdGNoTWV0YUFzc2VydGlvblRlcm1pbmFsTm9kZSIsIm5vblRlcm1pbmFsTm9kZSIsIm1ldGFBc3NlcnRpb25Ob25UZXJtaW5hbE5vZGUiLCJtZXRhQXNzZXJ0aW9uTm9uVGVybWluYWxOb2RlTWF0Y2hlcyIsIm1hdGNoTWV0YUFzc2VydGlvbk5vblRlcm1pbmFsTm9kZSIsIm1hdGNoTWV0YUFzc2VydGlvbk5vZGVzIiwibWV0YUFzc2VydGlvbk5vZGVzIiwibm9kZXMiLCJtZXRhQXNzZXJ0aW9uTm9kZXNNYXRjaGVzIiwibm9kZXNMZW5ndGgiLCJsZW5ndGgiLCJtZXRhQXNzZXJ0aW9uTm9kZXNMZW5ndGgiLCJldmVyeSIsImluZGV4IiwicnVsZU5hbWUiLCJnZXRSdWxlTmFtZSIsIm1ldGFBc3NlcnRpb25SdWxlTmFtZSIsImNoaWxkTm9kZXMiLCJnZXRDaGlsZE5vZGVzIiwibWV0YUFzc2VydGlvbkNoaWxkTm9kZXMiLCJtYXRjaE1ldGFBc3NlcnRpb25NZXRhc3RhdGVtZW50Tm9kZSIsIm1ldGFBc3NlcnRpb25NZXRhc3RhdGVtZW50Tm9kZSIsIm1ldGFBc3NlcnRpb25NZXRhc3RhdGVtZW50Tm9kZU5hdGNoZXMiLCJtZXRhQXNzZXJ0aW9uTWV0YXN0YXRlbWVudE5vZGVNYXRjaGVzIiwiYnJhY2tldGVkTWV0YXN0YXRlbWVudENoaWxkTm9kZU1hdGNoZXMiLCJtYXRjaEJyYWNrZXRlZE1ldGFzdGF0ZW1lbnRDaGlsZE5vZGUiLCJicmFja2V0ZWRNZXRhc3RhdGVtZW50Q2hpbGROb2RlIiwiYnJhY2tldGVkTWV0YUFzc2VydGlvbk1ldGFzdGF0ZW1lbnRDaGlsZE5vZGVNYXRjaGVzIiwiYnJhY2tldGVkTWV0YUFzc2VydGlvbk1ldGFzdGF0ZW1lbnRDaGlsZE5vZGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O2VBV3FCQTs7O3FCQVRTO3FCQUNROzZCQUNlOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVyRCxJQUFNQyx5QkFBeUJDLElBQUFBLGdCQUFTLEVBQUMsc0JBQ25DQywwQkFBMEJDLElBQUFBLGlCQUFVLEVBQUMseUNBQ3JDQyxpQ0FBaUNILElBQUFBLGdCQUFTLEVBQUMseUNBQzNDSSw2REFBNkRGLElBQUFBLGlCQUFVLEVBQUM7QUFFL0QsSUFBQSxBQUFNSiw4QkE2R2xCLEFBN0dZO2FBQU1BLGNBQ1BPLGdCQUFnQixFQUFFQyxpQkFBaUI7OEJBRDVCUjtRQUVqQixJQUFJLENBQUNPLGdCQUFnQixHQUFHQTtRQUN4QixJQUFJLENBQUNDLGlCQUFpQixHQUFHQTs7aUJBSFJSOztZQU1uQlMsS0FBQUE7bUJBQUFBLFNBQUFBLHNCQUFzQjtnQkFDcEIsT0FBTyxJQUFJLENBQUNGLGdCQUFnQjtZQUM5Qjs7O1lBRUFHLEtBQUFBO21CQUFBQSxTQUFBQSx1QkFBdUI7Z0JBQ3JCLE9BQU8sSUFBSSxDQUFDRixpQkFBaUI7WUFDL0I7OztZQUVBRyxLQUFBQTttQkFBQUEsU0FBQUEsTUFBTUMsYUFBYSxFQUFFO2dCQUNuQixJQUFJQyxVQUFVLEtBQUs7Z0JBRW5CLElBQU1MLG9CQUFv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
|
|
@@ -0,0 +1,123 @@
|
|
|
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 MetaSubstitution;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
var _metastatement = require("./utilities/metastatement");
|
|
12
|
+
function _classCallCheck(instance, Constructor) {
|
|
13
|
+
if (!(instance instanceof Constructor)) {
|
|
14
|
+
throw new TypeError("Cannot call a class as a function");
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
function _defineProperties(target, props) {
|
|
18
|
+
for(var i = 0; i < props.length; i++){
|
|
19
|
+
var descriptor = props[i];
|
|
20
|
+
descriptor.enumerable = descriptor.enumerable || false;
|
|
21
|
+
descriptor.configurable = true;
|
|
22
|
+
if ("value" in descriptor) descriptor.writable = true;
|
|
23
|
+
Object.defineProperty(target, descriptor.key, descriptor);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function _createClass(Constructor, protoProps, staticProps) {
|
|
27
|
+
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
|
|
28
|
+
if (staticProps) _defineProperties(Constructor, staticProps);
|
|
29
|
+
return Constructor;
|
|
30
|
+
}
|
|
31
|
+
var MetaSubstitution = /*#__PURE__*/ function() {
|
|
32
|
+
function MetaSubstitution(metavariableName, nodes) {
|
|
33
|
+
_classCallCheck(this, MetaSubstitution);
|
|
34
|
+
this.metavariableName = metavariableName;
|
|
35
|
+
this.nodes = nodes;
|
|
36
|
+
}
|
|
37
|
+
_createClass(MetaSubstitution, [
|
|
38
|
+
{
|
|
39
|
+
key: "getMetavariableName",
|
|
40
|
+
value: function getMetavariableName() {
|
|
41
|
+
return this.metavariableName;
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
key: "getNodes",
|
|
46
|
+
value: function getNodes() {
|
|
47
|
+
return this.nodes;
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
key: "matchNodes",
|
|
52
|
+
value: function matchNodes(nodes) {
|
|
53
|
+
var matches;
|
|
54
|
+
var metaSubstitutionNodes = this.nodes, metaSubstitutionNonTerminalNodeMatches = matchMetaSubstitutionNodes(metaSubstitutionNodes, nodes);
|
|
55
|
+
matches = metaSubstitutionNonTerminalNodeMatches; ///
|
|
56
|
+
if (!matches) {
|
|
57
|
+
var childNodes = nodes, bracketedMetastatementChildNodeMatches = (0, _metastatement.matchBracketedMetastatementChildNode)(childNodes, function(bracketedMetastatementChildNode) {
|
|
58
|
+
var nonTerminalNode = bracketedMetastatementChildNode, childNodes = nonTerminalNode.getChildNodes(), _$nodes = childNodes, metaAssertionNonTerminalNodeMatches = matchMetaSubstitutionNodes(metaSubstitutionNodes, _$nodes), bracketedMetastatementChildNodeMatches = metaAssertionNonTerminalNodeMatches; ///
|
|
59
|
+
return bracketedMetastatementChildNodeMatches;
|
|
60
|
+
});
|
|
61
|
+
matches = bracketedMetastatementChildNodeMatches; ///
|
|
62
|
+
}
|
|
63
|
+
return matches;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
], [
|
|
67
|
+
{
|
|
68
|
+
key: "fromMetavariableNameAndNodes",
|
|
69
|
+
value: function fromMetavariableNameAndNodes(metavariableName, nodes) {
|
|
70
|
+
var bracketedMetastatementChildNode = (0, _metastatement.bracketedMetastatementChildNodeFromChildNodes)(nodes);
|
|
71
|
+
if (bracketedMetastatementChildNode !== null) {
|
|
72
|
+
var nonTerminalNode = bracketedMetastatementChildNode, childNodes = nonTerminalNode.getChildNodes();
|
|
73
|
+
nodes = childNodes; ///
|
|
74
|
+
}
|
|
75
|
+
var metaSubstitution = new MetaSubstitution(metavariableName, nodes);
|
|
76
|
+
return metaSubstitution;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
]);
|
|
80
|
+
return MetaSubstitution;
|
|
81
|
+
}();
|
|
82
|
+
function matchMetaSubstitutionNode(metaSubstitutionNode, node) {
|
|
83
|
+
var metaSubstitutionNodeMatches = false;
|
|
84
|
+
var nodeTerminalNode = node.isTerminalNode(), ruleNodeTerminalNode = metaSubstitutionNode.isTerminalNode();
|
|
85
|
+
if (nodeTerminalNode === ruleNodeTerminalNode) {
|
|
86
|
+
if (nodeTerminalNode) {
|
|
87
|
+
var terminalNode = node, metaSubstitutionTerminalNode = metaSubstitutionNode, metaSubstitutionTerminalNodeMatches = matchMetaSubstitutionTerminalNode(metaSubstitutionTerminalNode, terminalNode);
|
|
88
|
+
metaSubstitutionNodeMatches = metaSubstitutionTerminalNodeMatches; ///
|
|
89
|
+
} else {
|
|
90
|
+
var nonTerminalNode = node, metaSubstitutionNonTerminalNode = metaSubstitutionNode, metaSubstitutionNonTerminalNodeMatches = matchMetaSubstitutionNonTerminalNode(metaSubstitutionNonTerminalNode, nonTerminalNode);
|
|
91
|
+
metaSubstitutionNodeMatches = metaSubstitutionNonTerminalNodeMatches; ///
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return metaSubstitutionNodeMatches;
|
|
95
|
+
}
|
|
96
|
+
function matchMetaSubstitutionNodes(metaSubstitutionNodes, nodes) {
|
|
97
|
+
var metaSubstitutionNodesMatches = false;
|
|
98
|
+
var nodesLength = nodes.length, metaSubstitutionNodesLength = metaSubstitutionNodes.length;
|
|
99
|
+
if (nodesLength === metaSubstitutionNodesLength) {
|
|
100
|
+
metaSubstitutionNodesMatches = nodes.every(function(node, index) {
|
|
101
|
+
var metaSubstitutionNode = metaSubstitutionNodes[index], metaSubstitutionNodeMatches = matchMetaSubstitutionNode(metaSubstitutionNode, node);
|
|
102
|
+
if (metaSubstitutionNodeMatches) {
|
|
103
|
+
return true;
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
return metaSubstitutionNodesMatches;
|
|
108
|
+
}
|
|
109
|
+
function matchMetaSubstitutionTerminalNode(metaSubstitutionTerminalNode, terminalNode) {
|
|
110
|
+
var matches = metaSubstitutionTerminalNode.match(terminalNode), metaSubstitutionTerminalNodeMatches = matches; ///
|
|
111
|
+
return metaSubstitutionTerminalNodeMatches;
|
|
112
|
+
}
|
|
113
|
+
function matchMetaSubstitutionNonTerminalNode(metaSubstitutionNonTerminalNode, nonTerminalNode) {
|
|
114
|
+
var metaSubstitutionNonTerminalNodeMatches = false;
|
|
115
|
+
var ruleName = nonTerminalNode.getRuleName(), metaSubstitutionRuleName = metaSubstitutionNonTerminalNode.getRuleName(); ///
|
|
116
|
+
if (ruleName === metaSubstitutionRuleName) {
|
|
117
|
+
var childNodes = nonTerminalNode.getChildNodes(), metaSubstitutionChildNodes = metaSubstitutionNonTerminalNode.getChildNodes(), nodes = childNodes, metaSubstitutionNodes = metaSubstitutionChildNodes, metaSubstitutionNodesMatches = matchMetaSubstitutionNodes(metaSubstitutionNodes, nodes);
|
|
118
|
+
metaSubstitutionNonTerminalNodeMatches = metaSubstitutionNodesMatches; ///
|
|
119
|
+
}
|
|
120
|
+
return metaSubstitutionNonTerminalNodeMatches;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9tZXRhU3Vic3RpdHV0aW9uLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBtYXRjaEJyYWNrZXRlZE1ldGFzdGF0ZW1lbnRDaGlsZE5vZGUsIGJyYWNrZXRlZE1ldGFzdGF0ZW1lbnRDaGlsZE5vZGVGcm9tQ2hpbGROb2RlcyB9IGZyb20gXCIuL3V0aWxpdGllcy9tZXRhc3RhdGVtZW50XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1ldGFTdWJzdGl0dXRpb24ge1xuICBjb25zdHJ1Y3RvcihtZXRhdmFyaWFibGVOYW1lLCBub2Rlcykge1xuICAgIHRoaXMubWV0YXZhcmlhYmxlTmFtZSA9IG1ldGF2YXJpYWJsZU5hbWU7XG4gICAgdGhpcy5ub2RlcyA9IG5vZGVzO1xuICB9XG5cbiAgZ2V0TWV0YXZhcmlhYmxlTmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5tZXRhdmFyaWFibGVOYW1lO1xuICB9XG5cbiAgZ2V0Tm9kZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMubm9kZXM7XG4gIH1cblxuICBtYXRjaE5vZGVzKG5vZGVzKSB7XG4gICAgbGV0IG1hdGNoZXM7XG5cbiAgICBjb25zdCBtZXRhU3Vic3RpdHV0aW9uTm9kZXMgPSB0aGlzLm5vZGVzLCAgLy8vXG4gICAgICAgICAgbWV0YVN1YnN0aXR1dGlvbk5vblRlcm1pbmFsTm9kZU1hdGNoZXMgPSBtYXRjaE1ldGFTdWJzdGl0dXRpb25Ob2RlcyhtZXRhU3Vic3RpdHV0aW9uTm9kZXMsIG5vZGVzKTtcblxuICAgIG1hdGNoZXMgPSBtZXRhU3Vic3RpdHV0aW9uTm9uVGVybWluYWxOb2RlTWF0Y2hlczsgIC8vL1xuXG4gICAgaWYgKCFtYXRjaGVzKSB7XG4gICAgICBjb25zdCBjaGlsZE5vZGVzID0gbm9kZXMsIC8vL1xuICAgICAgICAgICAgYnJhY2tldGVkTWV0YXN0YXRlbWVudENoaWxkTm9kZU1hdGNoZXMgPSBtYXRjaEJyYWNrZXRlZE1ldGFzdGF0ZW1lbnRDaGlsZE5vZGUoY2hpbGROb2RlcywgKGJyYWNrZXRlZE1ldGFzdGF0ZW1lbnRDaGlsZE5vZGUpID0+IHtcbiAgICAgICAgICAgICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gYnJhY2tldGVkTWV0YXN0YXRlbWVudENoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgICAgICAgICAgICBjaGlsZE5vZGVzID0gbm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICAgICAgICAgICAgbm9kZXMgPSBjaGlsZE5vZGVzLCAvLy9cbiAgICAgICAgICAgICAgICAgICAgbWV0YUFzc2VydGlvbk5vblRlcm1pbmFsTm9kZU1hdGNoZXMgPSBtYXRjaE1ldGFTdWJzdGl0dXRpb25Ob2RlcyhtZXRhU3Vic3RpdHV0aW9uTm9kZXMsIG5vZGVzKSxcbiAgICAgICAgICAgICAgICAgICAgYnJhY2tldGVkTWV0YXN0YXRlbWVudENoaWxkTm9kZU1hdGNoZXMgPSBtZXRhQXNzZXJ0aW9uTm9uVGVybWluYWxOb2RlTWF0Y2hlczsgLy8vXG5cbiAgICAgICAgICAgICAgcmV0dXJuIGJyYWNrZXRlZE1ldGFzdGF0ZW1lbnRDaGlsZE5vZGVNYXRjaGVzO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgIG1hdGNoZXMgPSBicmFja2V0ZWRNZXRhc3RhdGVtZW50Q2hpbGROb2RlTWF0Y2hlczsgLy8vXG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdGNoZXM7XG4gIH1cblxuICBzdGF0aWMgZnJvbU1ldGF2YXJpYWJsZU5hbWVBbmROb2RlcyhtZXRhdmFyaWFibGVOYW1lLCBub2Rlcykge1xuICAgIGNvbnN0IGJyYWNrZXRlZE1ldGFzdGF0ZW1lbnRDaGlsZE5vZGUgPSBicmFja2V0ZWRNZXRhc3RhdGVtZW50Q2hpbGROb2RlRnJvbUNoaWxkTm9kZXMobm9kZXMpO1xuXG4gICAgaWYgKGJyYWNrZXRlZE1ldGFzdGF0ZW1lbnRDaGlsZE5vZGUgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IGJyYWNrZXRlZE1ldGFzdGF0ZW1lbnRDaGlsZE5vZGUsICAvLy9cbiAgICAgICAgICAgIGNoaWxkTm9kZXMgPSBub25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpO1xuXG4gICAgICBub2RlcyA9IGNoaWxkTm9kZXM7IC8vL1xuICAgIH1cblxuICAgIGNvbnN0IG1ldGFTdWJzdGl0dXRpb24gPSBuZXcgTWV0YVN1YnN0aXR1dGlvbihtZXRhdmFyaWFibGVOYW1lLCBub2Rlcyk7XG5cbiAgICByZXR1cm4gbWV0YVN1YnN0aXR1dGlvbjtcbiAgfVxufVxuXG5mdW5jdGlvbiBtYXRjaE1ldGFTdWJzdGl0dXRpb25Ob2RlKG1ldGFTdWJzdGl0dXRpb25Ob2RlLCBub2RlKSB7XG4gIGxldCBtZXRhU3Vic3RpdHV0aW9uTm9kZU1hdGNoZXMgPSBmYWxzZTtcblxuICBjb25zdCBub2RlVGVybWluYWxOb2RlID0gbm9kZS5pc1Rlcm1pbmFsTm9kZSgpLFxuICAgICAgICBydWxlTm9kZVRlcm1pbmFsTm9kZSA9IG1ldGFTdWJzdGl0dXRpb25Ob2RlLmlzVGVybWluYWxOb2RlKCk7XG5cbiAgaWYgKG5vZGVUZXJtaW5hbE5vZGUgPT09IHJ1bGVOb2RlVGVybWluYWxOb2RlKSB7XG4gICAgaWYgKG5vZGVUZXJtaW5hbE5vZGUpIHtcbiAgICAgIGNvbnN0IHRlcm1pbmFsTm9kZSA9IG5vZGUsICAvLy9cbiAgICAgICAgICAgIG1ldGFTdWJzdGl0dXRpb25UZXJtaW5hbE5vZGUgPSBtZXRhU3Vic3RpdHV0aW9uTm9kZSwgIC8vL1xuICAgICAgICAgICAgbWV0YVN1YnN0aXR1dGlvblRlcm1pbmFsTm9kZU1hdGNoZXMgPSBtYXRjaE1ldGFTdWJzdGl0dXRpb25UZXJtaW5hbE5vZGUobWV0YVN1YnN0aXR1dGlvblRlcm1pbmFsTm9kZSwgdGVybWluYWxOb2RlKTtcblxuICAgICAgbWV0YVN1YnN0aXR1dGlvbk5vZGVNYXRjaGVzID0gbWV0YVN1YnN0aXR1dGlvblRlcm1pbmFsTm9kZU1hdGNoZXM7ICAvLy9cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gbm9kZSwgLy8vXG4gICAgICAgICAgICBtZXRhU3Vic3RpdHV0aW9uTm9uVGVybWluYWxOb2RlID0gbWV0YVN1YnN0aXR1dGlvbk5vZGUsICAvLy9cbiAgICAgICAgICAgIG1ldGFTdWJzdGl0dXRpb25Ob25UZXJtaW5hbE5vZGVNYXRjaGVzID0gbWF0Y2hNZXRhU3Vic3RpdHV0aW9uTm9uVGVybWluYWxOb2RlKG1ldGFTdWJzdGl0dXRpb25Ob25UZXJtaW5hbE5vZGUsIG5vblRlcm1pbmFsTm9kZSk7XG5cbiAgICAgIG1ldGFTdWJzdGl0dXRpb25Ob2RlTWF0Y2hlcyA9IG1ldGFTdWJzdGl0dXRpb25Ob25UZXJtaW5hbE5vZGVNYXRjaGVzOyAvLy9cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWV0YVN1YnN0aXR1dGlvbk5vZGVNYXRjaGVzO1xufVxuXG5mdW5jdGlvbiBtYXRjaE1ldGFTdWJzdGl0dXRpb25Ob2RlcyhtZXRhU3Vic3RpdHV0aW9uTm9kZXMsIG5vZGVzKSB7XG4gIGxldCBtZXRhU3Vic3RpdHV0aW9uTm9kZXNNYXRjaGVzID0gZmFsc2U7XG5cbiAgY29uc3Qgbm9kZXNMZW5ndGggPSBub2Rlcy5sZW5ndGgsXG4gICAgICAgIG1ldGFTdWJzdGl0dXRpb25Ob2Rlc0xlbmd0aCA9IG1ldGFTdWJzdGl0dXRpb25Ob2Rlcy5sZW5ndGg7XG5cbiAgaWYgKG5vZGVzTGVuZ3RoID09PSBtZXRhU3Vic3RpdHV0aW9uTm9kZXNMZW5ndGgpIHtcbiAgICBtZXRhU3Vic3RpdHV0aW9uTm9kZXNNYXRjaGVzID0gbm9kZXMuZXZlcnkoKG5vZGUsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBtZXRhU3Vic3RpdHV0aW9uTm9kZSA9IG1ldGFTdWJzdGl0dXRpb25Ob2Rlc1tpbmRleF0sXG4gICAgICAgICAgICBtZXRhU3Vic3RpdHV0aW9uTm9kZU1hdGNoZXMgPSBtYXRjaE1ldGFTdWJzdGl0dXRpb25Ob2RlKG1ldGFTdWJzdGl0dXRpb25Ob2RlLCBub2RlKTtcblxuICAgICAgaWYgKG1ldGFTdWJzdGl0dXRpb25Ob2RlTWF0Y2hlcykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgcmV0dXJuIG1ldGFTdWJzdGl0dXRpb25Ob2Rlc01hdGNoZXM7XG59XG5cbmZ1bmN0aW9uIG1hdGNoTWV0YVN1YnN0aXR1dGlvblRlcm1pbmFsTm9kZShtZXRhU3Vic3RpdHV0aW9uVGVybWluYWxOb2RlLCB0ZXJtaW5hbE5vZGUpIHtcbiAgY29uc3QgbWF0Y2hlcyA9IG1ldGFTdWJzdGl0dXRpb25UZXJtaW5hbE5vZGUubWF0Y2godGVybWluYWxOb2RlKSxcbiAgICAgICAgbWV0YVN1YnN0aXR1dGlvblRlcm1pbmFsTm9kZU1hdGNoZXMgPSBtYXRjaGVzOyAgLy8vXG5cbiAgcmV0dXJuIG1ldGFTdWJzdGl0dXRpb25UZXJtaW5hbE5vZGVNYXRjaGVzO1xufVxuXG5mdW5jdGlvbiBtYXRjaE1ldGFTdWJzdGl0dXRpb25Ob25UZXJtaW5hbE5vZGUobWV0YVN1YnN0aXR1dGlvbk5vblRlcm1pbmFsTm9kZSwgbm9uVGVybWluYWxOb2RlKSB7XG4gIGxldCBtZXRhU3Vic3RpdHV0aW9uTm9uVGVybWluYWxOb2RlTWF0Y2hlcyA9IGZhbHNlO1xuXG4gIGNvbnN0IHJ1bGVOYW1lID0gbm9uVGVybWluYWxOb2RlLmdldFJ1bGVOYW1lKCksXG4gICAgICAgIG1ldGFTdWJzdGl0dXRpb25SdWxlTmFtZSA9IG1ldGFTdWJzdGl0dXRpb25Ob25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKTsgLy8vXG5cbiAgaWYgKHJ1bGVOYW1lID09PSBtZXRhU3Vic3RpdHV0aW9uUnVsZU5hbWUpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gbm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBtZXRhU3Vic3RpdHV0aW9uQ2hpbGROb2RlcyA9IG1ldGFTdWJzdGl0dXRpb25Ob25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIG5vZGVzID0gY2hpbGROb2RlcywgLy8vXG4gICAgICAgICAgbWV0YVN1YnN0aXR1dGlvbk5vZGVzID0gbWV0YVN1YnN0aXR1dGlvbkNoaWxkTm9kZXMsIC8vL1xuICAgICAgICAgIG1ldGFTdWJzdGl0dXRpb25Ob2Rlc01hdGNoZXMgPSBtYXRjaE1ldGFTdWJzdGl0dXRpb25Ob2RlcyhtZXRhU3Vic3RpdHV0aW9uTm9kZXMsIG5vZGVzKTtcblxuICAgIG1ldGFTdWJzdGl0dXRpb25Ob25UZXJtaW5hbE5vZGVNYXRjaGVzID0gbWV0YVN1YnN0aXR1dGlvbk5vZGVzTWF0Y2hlczsgLy8vXG4gIH1cblxuICByZXR1cm4gbWV0YVN1YnN0aXR1dGlvbk5vblRlcm1pbmFsTm9kZU1hdGNoZXM7XG59XG4iXSwibmFtZXMiOlsiTWV0YVN1YnN0aXR1dGlvbiIsIm1ldGF2YXJpYWJsZU5hbWUiLCJub2RlcyIsImdldE1ldGF2YXJpYWJsZU5hbWUiLCJnZXROb2RlcyIsIm1hdGNoTm9kZXMiLCJtYXRjaGVzIiwibWV0YVN1YnN0aXR1dGlvbk5vZGVzIiwibWV0YVN1YnN0aXR1dGlvbk5vblRlcm1pbmFsTm9kZU1hdGNoZXMiLCJtYXRjaE1ldGFTdWJzdGl0dXRpb25Ob2RlcyIsImNoaWxkTm9kZXMiLCJicmFja2V0ZWRNZXRhc3RhdGVtZW50Q2hpbGROb2RlTWF0Y2hlcyIsIm1hdGNoQnJhY2tldGVkTWV0YXN0YXRlbWVudENoaWxkTm9kZSIsImJyYWNrZXRlZE1ldGFzdGF0ZW1lbnRDaGlsZE5vZGUiLCJub25UZXJtaW5hbE5vZGUiLCJnZXRDaGlsZE5vZGVzIiwibWV0YUFzc2VydGlvbk5vblRlcm1pbmFsTm9kZU1hdGNoZXMiLCJmcm9tTWV0YXZhcmlhYmxlTmFtZUFuZE5vZGVzIiwiYnJhY2tldGVkTWV0YXN0YXRlbWVudENoaWxkTm9kZUZyb21DaGlsZE5vZGVzIiwibWV0YVN1YnN0aXR1dGlvbiIsIm1hdGNoTWV0YVN1YnN0aXR1dGlvbk5vZGUiLCJtZXRhU3Vic3RpdHV0aW9uTm9kZSIsIm5vZGUiLCJtZXRhU3Vic3RpdHV0aW9uTm9kZU1hdGNoZXMiLCJub2RlVGVybWluYWxOb2RlIiwiaXNUZXJtaW5hbE5vZGUiLCJydWxlTm9kZVRlcm1pbmFsTm9kZSIsInRlcm1pbmFsTm9kZSIsIm1ldGFTdWJzdGl0dXRpb25UZXJtaW5hbE5vZGUiLCJtZXRhU3Vic3RpdHV0aW9uVGVybWluYWxOb2RlTWF0Y2hlcyIsIm1hdGNoTWV0YVN1YnN0aXR1dGlvblRlcm1pbmFsTm9kZSIsIm1ldGFTdWJzdGl0dXRpb25Ob25UZXJtaW5hbE5vZGUiLCJtYXRjaE1ldGFTdWJzdGl0dXRpb25Ob25UZXJtaW5hbE5vZGUiLCJtZXRhU3Vic3RpdHV0aW9uTm9kZXNNYXRjaGVzIiwibm9kZXNMZW5ndGgiLCJsZW5ndGgiLCJtZXRhU3Vic3RpdHV0aW9uTm9kZXNMZW5ndGgiLCJldmVyeSIsImluZGV4IiwibWF0Y2giLCJydWxlTmFtZSIsImdldFJ1bGVOYW1lIiwibWV0YVN1YnN0aXR1dGlvblJ1bGVOYW1lIiwibWV0YVN1YnN0aXR1dGlvbkNoaWxkTm9kZXMiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O2VBSXFCQTs7OzZCQUYrRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFckYsSUFBQSxBQUFNQSxpQ0F3RGxCLEFBeERZO2FBQU1BLGlCQUNQQyxnQkFBZ0IsRUFBRUMsS0FBSzs4QkFEaEJGO1FBRWpCLElBQUksQ0FBQ0MsZ0JBQWdCLEdBQUdBO1FBQ3hCLElBQUksQ0FBQ0MsS0FBSyxHQUFHQTs7aUJBSElGOztZQU1uQkcsS0FBQUE7bUJBQUFBLFNBQUFBLHNCQUFzQjtnQkFDcEIsT0FBTyxJQUFJLENBQUNGLGdCQUFnQjtZQUM5Qjs7O1lBRUFHLEtBQUFBO21CQUFBQSxTQUFBQSxXQUFXO2dCQUNULE9BQU8sSUFBSSxDQUFDRixLQUFLO1lBQ25COzs7WUFFQUcsS0FBQUE7bUJBQUFBLFNBQUFBLFdBQVdILEtBQUssRUFBRTtnQkFDaEIsSUFBSUk7Z0JBRUos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
|