occam-furtle 2.0.330 → 2.0.331
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/lib/element/expression/comparison.js +110 -0
- package/lib/element/expression.js +13 -13
- package/lib/element/term/bracketed.js +85 -0
- package/lib/element/term/comparison.js +110 -0
- package/lib/element/term/logical.js +118 -0
- package/lib/element/term/negated.js +102 -0
- package/lib/element/term.js +54 -3
- package/lib/element/ternary.js +7 -7
- package/lib/node/expression/comparison.js +163 -0
- package/lib/node/expression.js +8 -8
- package/lib/node/term/bracketed.js +116 -0
- package/lib/node/term/comparison.js +163 -0
- package/lib/node/term/logical.js +175 -0
- package/lib/node/term/negated.js +116 -0
- package/lib/node/term.js +39 -3
- package/lib/node/ternary.js +11 -18
- package/lib/nonTerminalNodeMap.js +10 -6
- package/lib/preamble.js +9 -5
- package/lib/ruleNames.js +21 -5
- package/lib/utilities/element.js +30 -30
- package/package.json +1 -1
- package/src/element/{comparison.js → expression/comparison.js} +8 -8
- package/src/element/expression.js +10 -10
- package/src/element/term/bracketed.js +36 -0
- package/src/element/term/comparison.js +69 -0
- package/src/element/term/logical.js +80 -0
- package/src/element/term/negated.js +59 -0
- package/src/element/term.js +46 -3
- package/src/element/ternary.js +5 -5
- package/src/node/{comparison.js → expression/comparison.js} +7 -7
- package/src/node/expression.js +9 -9
- package/src/node/term/bracketed.js +16 -0
- package/src/node/term/comparison.js +68 -0
- package/src/node/term/logical.js +80 -0
- package/src/node/term/negated.js +16 -0
- package/src/node/term.js +51 -2
- package/src/node/ternary.js +13 -20
- package/src/nonTerminalNodeMap.js +17 -5
- package/src/preamble.js +6 -2
- package/src/ruleNames.js +7 -2
- package/src/utilities/element.js +42 -42
- package/lib/element/comparison.js +0 -110
- package/lib/node/comparison.js +0 -163
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { arrayUtilities } from "necessary";
|
|
4
|
+
|
|
5
|
+
import TermNode from "../../node/term";
|
|
6
|
+
|
|
7
|
+
import { TERM_RULE_NAME } from "../../ruleNames";
|
|
8
|
+
import { SPECIAL_TOKEN_TYPE } from "../../tokenTypes";
|
|
9
|
+
import { CONJUNCTION_OPERATOR, DISJUNCTION_OPERATOR } from "../../constants";
|
|
10
|
+
|
|
11
|
+
const { first, last } = arrayUtilities;
|
|
12
|
+
|
|
13
|
+
export default class LogicalTermNode extends TermNode {
|
|
14
|
+
getOperator() {
|
|
15
|
+
let operator = null;
|
|
16
|
+
|
|
17
|
+
const tokenType = SPECIAL_TOKEN_TYPE;
|
|
18
|
+
|
|
19
|
+
this.someTerminalNode((terminalNode) => {
|
|
20
|
+
const content = terminalNode.getContent();
|
|
21
|
+
|
|
22
|
+
operator = content; ///
|
|
23
|
+
|
|
24
|
+
return true;
|
|
25
|
+
}, tokenType);
|
|
26
|
+
|
|
27
|
+
return operator;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
isConjection() {
|
|
31
|
+
const operator = this.getOperator(),
|
|
32
|
+
conjection = (operator === CONJUNCTION_OPERATOR);
|
|
33
|
+
|
|
34
|
+
return conjection;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
isDisjunction() {
|
|
38
|
+
const operator = this.getOperator(),
|
|
39
|
+
disjunction = (operator === DISJUNCTION_OPERATOR);
|
|
40
|
+
|
|
41
|
+
return disjunction;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
getTermNodes() {
|
|
45
|
+
const ruleName = TERM_RULE_NAME,
|
|
46
|
+
termNodes = this.getNodesByRuleName(ruleName);
|
|
47
|
+
|
|
48
|
+
return termNodes;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
getLeftTermNode() {
|
|
52
|
+
const firstExpresionNode = this.getFirstTermNode(),
|
|
53
|
+
leftTermNode = firstExpresionNode; ///
|
|
54
|
+
|
|
55
|
+
return leftTermNode;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
getRightTermNode() {
|
|
59
|
+
const lastTermNode = this.getLastTermNode(),
|
|
60
|
+
rightTermNode = lastTermNode; ///
|
|
61
|
+
|
|
62
|
+
return rightTermNode;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
getLastTermNode() {
|
|
66
|
+
const termNodes = this.getTermNodes(),
|
|
67
|
+
lastTermNode = last(termNodes);
|
|
68
|
+
|
|
69
|
+
return lastTermNode;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
getFirstTermNode() {
|
|
73
|
+
const termNodes = this.getTermNodes(),
|
|
74
|
+
firstTermNode = first(termNodes);
|
|
75
|
+
|
|
76
|
+
return firstTermNode;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return TermNode.fromRuleNameChildNodesOpacityAndPrecedence(LogicalTermNode, ruleName, childNodes, opacity, precedence); }
|
|
80
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import TermNode from "../../node/term";
|
|
4
|
+
|
|
5
|
+
import { TERM_RULE_NAME } from "../../ruleNames";
|
|
6
|
+
|
|
7
|
+
export default class NegatedTermNode extends TermNode {
|
|
8
|
+
getTermNode() {
|
|
9
|
+
const ruleName = TERM_RULE_NAME,
|
|
10
|
+
termNode = this.getNodeByRuleName(ruleName);
|
|
11
|
+
|
|
12
|
+
return termNode;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return TermNode.fromRuleNameChildNodesOpacityAndPrecedence(NegatedTermNode, ruleName, childNodes, opacity, precedence); }
|
|
16
|
+
}
|
package/src/node/term.js
CHANGED
|
@@ -2,7 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
import NonTerminalNode from "../nonTerminalNode";
|
|
4
4
|
|
|
5
|
-
import { VARIABLE_RULE_NAME,
|
|
5
|
+
import { VARIABLE_RULE_NAME,
|
|
6
|
+
PRIMITIVE_RULE_NAME,
|
|
7
|
+
NEGATED_TERM_RULE_NAME,
|
|
8
|
+
LOGICAL_TERM_RULE_NAME,
|
|
9
|
+
BRACKETED_TERM_RULE_NAME,
|
|
10
|
+
COMPARISON_TERM_RULE_NAME } from "../ruleNames";
|
|
6
11
|
|
|
7
12
|
export default class TermNode extends NonTerminalNode {
|
|
8
13
|
getVariableNode() {
|
|
@@ -19,5 +24,49 @@ export default class TermNode extends NonTerminalNode {
|
|
|
19
24
|
return primitiveNode;
|
|
20
25
|
}
|
|
21
26
|
|
|
22
|
-
|
|
27
|
+
getNegatedTermNode() {
|
|
28
|
+
const ruleName = NEGATED_TERM_RULE_NAME,
|
|
29
|
+
negatedTermNode = this.getNodeByRuleName(ruleName);
|
|
30
|
+
|
|
31
|
+
return negatedTermNode;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
getLogicalTermNode() {
|
|
35
|
+
const ruleName = LOGICAL_TERM_RULE_NAME,
|
|
36
|
+
logicalTermRuleName = this.getNodeByRuleName(ruleName);
|
|
37
|
+
|
|
38
|
+
return logicalTermRuleName;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
getBracketedTermNode() {
|
|
42
|
+
const ruleName = BRACKETED_TERM_RULE_NAME,
|
|
43
|
+
bracketedTermRuleName = this.getNodeByRuleName(ruleName);
|
|
44
|
+
|
|
45
|
+
return bracketedTermRuleName;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
getComparisonTermNode() {
|
|
49
|
+
const ruleName = COMPARISON_TERM_RULE_NAME,
|
|
50
|
+
comparisonNode = this.getNodeByRuleName(ruleName);
|
|
51
|
+
|
|
52
|
+
return comparisonNode;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
static fromRuleNameChildNodesOpacityAndPrecedence(Class, ruleName, childNodes, opacity, precedence) {
|
|
56
|
+
if (precedence === undefined) {
|
|
57
|
+
precedence = opacity; ///
|
|
58
|
+
|
|
59
|
+
opacity = childNodes; ///
|
|
60
|
+
|
|
61
|
+
childNodes = ruleName; ///
|
|
62
|
+
|
|
63
|
+
ruleName = Class; ///
|
|
64
|
+
|
|
65
|
+
Class = TermNode;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
const termNode = NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(Class, ruleName, childNodes, opacity, precedence);
|
|
69
|
+
|
|
70
|
+
return termNode;
|
|
71
|
+
}
|
|
23
72
|
}
|
package/src/node/ternary.js
CHANGED
|
@@ -4,11 +4,18 @@ import { arrayUtilities } from "necessary";
|
|
|
4
4
|
|
|
5
5
|
import NonTerminalNode from "../nonTerminalNode";
|
|
6
6
|
|
|
7
|
-
import { EXPRESSION_RULE_NAME } from "../ruleNames";
|
|
7
|
+
import { TERM_RULE_NAME, EXPRESSION_RULE_NAME } from "../ruleNames";
|
|
8
8
|
|
|
9
|
-
const { first, second
|
|
9
|
+
const { first, second } = arrayUtilities;
|
|
10
10
|
|
|
11
11
|
export default class TernaryNode extends NonTerminalNode {
|
|
12
|
+
getTermNode() {
|
|
13
|
+
const ruleName = TERM_RULE_NAME,
|
|
14
|
+
termNode = this.getNodeByRuleName(ruleName);
|
|
15
|
+
|
|
16
|
+
return termNode;
|
|
17
|
+
}
|
|
18
|
+
|
|
12
19
|
getExpressionNodes() {
|
|
13
20
|
const ruleName = EXPRESSION_RULE_NAME,
|
|
14
21
|
expressionNodes = this.getNodesByRuleName(ruleName);
|
|
@@ -16,23 +23,16 @@ export default class TernaryNode extends NonTerminalNode {
|
|
|
16
23
|
return expressionNodes;
|
|
17
24
|
}
|
|
18
25
|
|
|
19
|
-
getExpressionNode() {
|
|
20
|
-
const firstExpressionNode = this.getFirstExpressionNode(),
|
|
21
|
-
expressionNode = firstExpressionNode; ///
|
|
22
|
-
|
|
23
|
-
return expressionNode;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
26
|
getIfExpressionNode() {
|
|
27
|
-
const
|
|
28
|
-
ifExpressionNode =
|
|
27
|
+
const firstExpressionNode = this.getFirstExpressionNode(),
|
|
28
|
+
ifExpressionNode = firstExpressionNode; ///
|
|
29
29
|
|
|
30
30
|
return ifExpressionNode;
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
getElseExpressionNode() {
|
|
34
|
-
const
|
|
35
|
-
elseExpressionNode =
|
|
34
|
+
const secondExpressionNode = this.getSecondExpressionNode(),
|
|
35
|
+
elseExpressionNode = secondExpressionNode; ///
|
|
36
36
|
|
|
37
37
|
return elseExpressionNode;
|
|
38
38
|
}
|
|
@@ -51,12 +51,5 @@ export default class TernaryNode extends NonTerminalNode {
|
|
|
51
51
|
return secondExpressionNode;
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
-
getThirdExpressionNode() {
|
|
55
|
-
const expressionNodes = this.getExpressionNodes(),
|
|
56
|
-
thirdExpressionNode = third(expressionNodes);
|
|
57
|
-
|
|
58
|
-
return thirdExpressionNode;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
54
|
static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(TernaryNode, ruleName, childNodes, opacity, precedence); }
|
|
62
55
|
}
|
|
@@ -16,22 +16,26 @@ import ReferenceNode from "./node/reference";
|
|
|
16
16
|
import ParameterNode from "./node/parameter";
|
|
17
17
|
import NodeQueryNode from "./node/nodeQuery";
|
|
18
18
|
import ExpressionNode from "./node/expression";
|
|
19
|
-
import ComparisonNode from "./node/comparison";
|
|
20
19
|
import ParametersNode from "./node/parameters";
|
|
21
20
|
import NodesQueryNode from "./node/nodesQuery";
|
|
22
21
|
import ReturnBlockNode from "./node/returnBlock";
|
|
22
|
+
import LogicalTermNode from "./node/term/logical";
|
|
23
|
+
import NegatedTermNode from "./node/term/negated";
|
|
24
|
+
import BracketedTermNode from "./node/term/bracketed";
|
|
25
|
+
import ComparisonTermNode from "./node/term/comparison";
|
|
23
26
|
import ProcedureCallNode from "./node/procedureCall";
|
|
24
27
|
import NamedParameterNode from "./node/parameter/named";
|
|
25
28
|
import NamedParametersNode from "./node/parameters/named";
|
|
26
29
|
import ReturnStatementNode from "./node/statement/return";
|
|
27
30
|
import ArrayAssignmentNode from "./node/assignment/array";
|
|
28
31
|
import ObjectAssignmentNode from "./node/assignment/object";
|
|
29
|
-
import
|
|
32
|
+
import LogicalExpressionNode from "./node/expression/logical";
|
|
30
33
|
import NegatedExpressionNode from "./node/expression/negated";
|
|
31
34
|
import AnonymousProcedureNode from "./node/procedure/anoymous";
|
|
32
35
|
import VariableAssignmentNode from "./node/assignment/variable";
|
|
33
36
|
import VariableAssignmentsNode from "./node/assignments/variable";
|
|
34
37
|
import BracketedExpressionNode from "./node/expression/bracketed";
|
|
38
|
+
import ComparisonExpressionNode from "./node/expression/comparison";
|
|
35
39
|
import ProcedureDeclarationNode from "./node/declaration/procedure";
|
|
36
40
|
|
|
37
41
|
import { STEP_RULE_NAME,
|
|
@@ -50,11 +54,14 @@ import { STEP_RULE_NAME,
|
|
|
50
54
|
PARAMETER_RULE_NAME,
|
|
51
55
|
NODE_QUERY_RULE_NAME,
|
|
52
56
|
EXPRESSION_RULE_NAME,
|
|
53
|
-
COMPARISON_RULE_NAME,
|
|
54
57
|
PARAMETERS_RULE_NAME,
|
|
55
58
|
NODES_QUERY_RULE_NAME,
|
|
56
59
|
RETURN_BLOCK_RULE_NAME,
|
|
60
|
+
LOGICAL_TERM_RULE_NAME,
|
|
61
|
+
NEGATED_TERM_RULE_NAME,
|
|
62
|
+
BRACKETED_TERM_RULE_NAME,
|
|
57
63
|
PROCEDURE_CALL_RULE_NAME,
|
|
64
|
+
COMPARISON_TERM_RULE_NAME,
|
|
58
65
|
NAMED_PARAMETER_RULE_NAME,
|
|
59
66
|
NAMED_PARAMETERS_RULE_NAME,
|
|
60
67
|
RETURN_STATEMENT_RULE_NAME,
|
|
@@ -66,6 +73,7 @@ import { STEP_RULE_NAME,
|
|
|
66
73
|
ANONYMOUS_PROCEDURE_RULE_NAME,
|
|
67
74
|
VARIABLE_ASSIGNMENTS_RULE_NAME,
|
|
68
75
|
BRACKETED_EXPRESSION_RULE_NAME,
|
|
76
|
+
COMPARISON_EXPRESSION_RULE_NAME,
|
|
69
77
|
PROCEDURE_DECLARATION_RULE_NAME } from "./ruleNames";
|
|
70
78
|
|
|
71
79
|
const NonTerminalNodeMap = {
|
|
@@ -85,22 +93,26 @@ const NonTerminalNodeMap = {
|
|
|
85
93
|
[PARAMETER_RULE_NAME]: ParameterNode,
|
|
86
94
|
[NODE_QUERY_RULE_NAME]: NodeQueryNode,
|
|
87
95
|
[EXPRESSION_RULE_NAME]: ExpressionNode,
|
|
88
|
-
[COMPARISON_RULE_NAME]: ComparisonNode,
|
|
89
96
|
[PARAMETERS_RULE_NAME]: ParametersNode,
|
|
90
97
|
[NODES_QUERY_RULE_NAME]: NodesQueryNode,
|
|
91
98
|
[RETURN_BLOCK_RULE_NAME]: ReturnBlockNode,
|
|
99
|
+
[LOGICAL_TERM_RULE_NAME]: LogicalTermNode,
|
|
100
|
+
[NEGATED_TERM_RULE_NAME]: NegatedTermNode,
|
|
92
101
|
[PROCEDURE_CALL_RULE_NAME]: ProcedureCallNode,
|
|
102
|
+
[BRACKETED_TERM_RULE_NAME]: BracketedTermNode,
|
|
103
|
+
[COMPARISON_TERM_RULE_NAME]: ComparisonTermNode,
|
|
93
104
|
[NAMED_PARAMETER_RULE_NAME]: NamedParameterNode,
|
|
94
105
|
[NAMED_PARAMETERS_RULE_NAME]: NamedParametersNode,
|
|
95
106
|
[RETURN_STATEMENT_RULE_NAME]: ReturnStatementNode,
|
|
96
107
|
[ARRAY_ASSIGNMENT_RULE_NAME]: ArrayAssignmentNode,
|
|
97
108
|
[OBJECT_ASSIGNMENT_RULE_NAME]: ObjectAssignmentNode,
|
|
98
|
-
[LOGICAL_EXPRESSION_RULE_NAME]:
|
|
109
|
+
[LOGICAL_EXPRESSION_RULE_NAME]: LogicalExpressionNode,
|
|
99
110
|
[NEGATED_EXPRESSION_RULE_NAME]: NegatedExpressionNode,
|
|
100
111
|
[ANONYMOUS_PROCEDURE_RULE_NAME]: AnonymousProcedureNode,
|
|
101
112
|
[VARIABLE_ASSIGNMENT_RULE_NAME]: VariableAssignmentNode,
|
|
102
113
|
[VARIABLE_ASSIGNMENTS_RULE_NAME]: VariableAssignmentsNode,
|
|
103
114
|
[BRACKETED_EXPRESSION_RULE_NAME]: BracketedExpressionNode,
|
|
115
|
+
[COMPARISON_EXPRESSION_RULE_NAME]: ComparisonExpressionNode,
|
|
104
116
|
[PROCEDURE_DECLARATION_RULE_NAME]: ProcedureDeclarationNode
|
|
105
117
|
};
|
|
106
118
|
|
package/src/preamble.js
CHANGED
|
@@ -17,10 +17,13 @@ import NodeQuery from "./element/nodeQuery";
|
|
|
17
17
|
import Parameter from "./element/parameter";
|
|
18
18
|
import Parameters from "./element/parameters";
|
|
19
19
|
import NodesQuery from "./element/nodesQuery";
|
|
20
|
-
import Comparison from "./element/comparison";
|
|
21
20
|
import Expression from "./element/expression";
|
|
22
21
|
import ReturnBlock from "./element/returnBlock";
|
|
22
|
+
import NegatedTerm from "./element/term/negated";
|
|
23
|
+
import LogicalTerm from "./element/term/logical";
|
|
24
|
+
import BracketedTerm from "./element/term/bracketed";
|
|
23
25
|
import ProcedureCall from "./element/procedureCall";
|
|
26
|
+
import ComparisonTerm from "./element/term/comparison";
|
|
24
27
|
import NamedParameter from "./element/parameter/named";
|
|
25
28
|
import ArrayAssigment from "./element/assignment/array";
|
|
26
29
|
import ReturnStatement from "./element/statement/return";
|
|
@@ -30,6 +33,7 @@ import NegatedExpression from "./element/expression/negated";
|
|
|
30
33
|
import LogicalExpression from "./element/expression/logical";
|
|
31
34
|
import AnonymousProcedure from "./element/procedure/anonymous";
|
|
32
35
|
import VariableAssignment from "./element/assignment/variable";
|
|
33
|
-
import BracketedExpression from "./element/expression/bracketed";
|
|
34
36
|
import VariableAssignments from "./element/assignments/variable";
|
|
37
|
+
import BracketedExpression from "./element/expression/bracketed";
|
|
38
|
+
import ComparisonExpression from "./element/expression/comparison";
|
|
35
39
|
import ProcedureDeclaration from "./element/declaration/procedure";
|
package/src/ruleNames.js
CHANGED
|
@@ -16,11 +16,14 @@ export const REFERENCE_RULE_NAME = "reference";
|
|
|
16
16
|
export const PARAMETER_RULE_NAME = "parameter";
|
|
17
17
|
export const NODE_QUERY_RULE_NAME = "nodeQuery";
|
|
18
18
|
export const EXPRESSION_RULE_NAME = "expression";
|
|
19
|
-
export const COMPARISON_RULE_NAME = "comparison";
|
|
20
19
|
export const PARAMETERS_RULE_NAME = "parameters";
|
|
21
20
|
export const NODES_QUERY_RULE_NAME = "nodesQuery";
|
|
22
21
|
export const RETURN_BLOCK_RULE_NAME = "returnBlock";
|
|
22
|
+
export const LOGICAL_TERM_RULE_NAME = "logicalTerm";
|
|
23
|
+
export const NEGATED_TERM_RULE_NAME = "negatedTerm";
|
|
24
|
+
export const BRACKETED_TERM_RULE_NAME = "bracketedTerm";
|
|
23
25
|
export const PROCEDURE_CALL_RULE_NAME = "procedureCall";
|
|
26
|
+
export const COMPARISON_TERM_RULE_NAME = "comparisonTerm";
|
|
24
27
|
export const NAMED_PARAMETER_RULE_NAME = "namedParameter";
|
|
25
28
|
export const NAMED_PARAMETERS_RULE_NAME = "namedParameters";
|
|
26
29
|
export const RETURN_STATEMENT_RULE_NAME = "returnStatement";
|
|
@@ -30,6 +33,8 @@ export const LOGICAL_EXPRESSION_RULE_NAME = "logicalExpression";
|
|
|
30
33
|
export const NEGATED_EXPRESSION_RULE_NAME = "negatedExpression";
|
|
31
34
|
export const VARIABLE_ASSIGNMENT_RULE_NAME = "variableAssignment";
|
|
32
35
|
export const ANONYMOUS_PROCEDURE_RULE_NAME = "anonymousProcedure";
|
|
33
|
-
export const VARIABLE_ASSIGNMENTS_RULE_NAME = "variableAssignments";
|
|
34
36
|
export const BRACKETED_EXPRESSION_RULE_NAME = "bracketedExpression";
|
|
37
|
+
export const VARIABLE_ASSIGNMENTS_RULE_NAME = "variableAssignments";
|
|
35
38
|
export const PROCEDURE_DECLARATION_RULE_NAME = "procedureDeclaration";
|
|
39
|
+
export const COMPARISON_EXPRESSION_RULE_NAME = "comparisonExpression";
|
|
40
|
+
|
package/src/utilities/element.js
CHANGED
|
@@ -31,11 +31,11 @@ export function stepFromStepNode(stepNode, context) {
|
|
|
31
31
|
|
|
32
32
|
export function someFromSomeNode(someNode, context) {
|
|
33
33
|
const { Some } = elements,
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
34
|
+
variable = variableFromSomeNode(someNode, context),
|
|
35
|
+
anonymousProcedure = anonymousProcedureFromSomeNode(someNode, context),
|
|
36
|
+
someString = someStringFromVariableAndAnonymousProcedure(variable, anonymousProcedure),
|
|
37
|
+
string = someString, ///
|
|
38
|
+
some = new Some(string, variable, anonymousProcedure);
|
|
39
39
|
|
|
40
40
|
return some;
|
|
41
41
|
}
|
|
@@ -192,18 +192,6 @@ export function nodesQueryFromNodesQueryNode(nodesQueryNode, context) {
|
|
|
192
192
|
return nodesQuery;
|
|
193
193
|
}
|
|
194
194
|
|
|
195
|
-
export function comparisonFromComparisonNode(comparisonNode, context) {
|
|
196
|
-
const { Comparison } = elements,
|
|
197
|
-
node = comparisonNode, ///
|
|
198
|
-
string = context.nodeAsString(node),
|
|
199
|
-
negated = negatedFromComparisonNode(comparisonNode, context),
|
|
200
|
-
leftExpression = leftExpressionFromCompzrisonNode(comparisonNode, context),
|
|
201
|
-
rightExpression = rightExpressionFromCompzrisonNode(comparisonNode, context),
|
|
202
|
-
comparison = new Comparison(string, negated, leftExpression, rightExpression);
|
|
203
|
-
|
|
204
|
-
return comparison;
|
|
205
|
-
}
|
|
206
|
-
|
|
207
195
|
export function parametersFromParametersNode(parametersNode, context) {
|
|
208
196
|
const { Parameters } = elements,
|
|
209
197
|
node = parametersNode, ///
|
|
@@ -225,12 +213,12 @@ export function expressionFromExpressionNode(expressionNode, context) {
|
|
|
225
213
|
ternary = ternaryFromExpressionNode(expressionNode, context),
|
|
226
214
|
nodeQuery = nodeQueryFromExpressionNode(expressionNode, context),
|
|
227
215
|
nodesQuery = nodesQueryFromExpressionNode(expressionNode, context),
|
|
228
|
-
comparison = comparisonFromExpressionNode(expressionNode, context),
|
|
229
216
|
returnBlock = returnBlockFromExpressionNode(expressionNode, context),
|
|
230
217
|
procedureCall = procedureCallFromExpressionNode(expressionNode, context),
|
|
231
218
|
negatedExpression = negatedExpressionFromExpressionNode(expressionNode, context),
|
|
232
219
|
logicalExpression = logicalExpressionFromExpressionNode(expressionNode, context),
|
|
233
220
|
bracketedExpression = bracketedExpressionFromExpressionNode(expressionNode, context),
|
|
221
|
+
comparisonExpression = comparisonExpressionFromExpressionNode(expressionNode, context),
|
|
234
222
|
properties = [
|
|
235
223
|
some,
|
|
236
224
|
every,
|
|
@@ -239,7 +227,7 @@ export function expressionFromExpressionNode(expressionNode, context) {
|
|
|
239
227
|
variable,
|
|
240
228
|
nodeQuery,
|
|
241
229
|
nodesQuery,
|
|
242
|
-
|
|
230
|
+
comparisonExpression,
|
|
243
231
|
returnBlock,
|
|
244
232
|
procedureCall,
|
|
245
233
|
negatedExpression,
|
|
@@ -248,7 +236,7 @@ export function expressionFromExpressionNode(expressionNode, context) {
|
|
|
248
236
|
],
|
|
249
237
|
expressionString = expressionStringFromPrimitiveAndProperties(primitive, properties, context),
|
|
250
238
|
string = expressionString, ///
|
|
251
|
-
expression = new Expression(string, variable, primitive, some, every, reduce, ternary, nodeQuery, nodesQuery,
|
|
239
|
+
expression = new Expression(string, variable, primitive, some, every, reduce, ternary, nodeQuery, nodesQuery, returnBlock, procedureCall, negatedExpression, logicalExpression, bracketedExpression, comparisonExpression);
|
|
252
240
|
|
|
253
241
|
return expression;
|
|
254
242
|
}
|
|
@@ -394,6 +382,18 @@ export function procedureDeclarationFromProcedureDeclarationNode(procedureDeclar
|
|
|
394
382
|
return procedureDeclaration;
|
|
395
383
|
}
|
|
396
384
|
|
|
385
|
+
export function comparisonExpressionFromComparisonExpressionNode(comparisonExpressionNode, context) {
|
|
386
|
+
const { ComparisonExpression } = elements,
|
|
387
|
+
node = comparisonExpressionNode, ///
|
|
388
|
+
string = context.nodeAsString(node),
|
|
389
|
+
negated = negatedFromComparisonExpressionNode(comparisonExpressionNode, context),
|
|
390
|
+
leftExpression = leftExpressionFromCompzrisonNode(comparisonExpressionNode, context),
|
|
391
|
+
rightExpression = rightExpressionFromCompzrisonNode(comparisonExpressionNode, context),
|
|
392
|
+
comparisonExpression = new ComparisonExpression(string, negated, leftExpression, rightExpression);
|
|
393
|
+
|
|
394
|
+
return comparisonExpression;
|
|
395
|
+
}
|
|
396
|
+
|
|
397
397
|
export function nameFromLabelNode(labelNode, context) {
|
|
398
398
|
const name = labelNode.getName();
|
|
399
399
|
|
|
@@ -595,12 +595,6 @@ export function ternaryFromExpressionNode(expressionNode, context) {
|
|
|
595
595
|
return ternary;
|
|
596
596
|
}
|
|
597
597
|
|
|
598
|
-
export function negatedFromComparisonNode(comparisonNode, context) {
|
|
599
|
-
const negated = comparisonNode.isNegated();
|
|
600
|
-
|
|
601
|
-
return negated;
|
|
602
|
-
}
|
|
603
|
-
|
|
604
598
|
export function expressionFromVariableNode(variableNode, context) {
|
|
605
599
|
const expression = null;
|
|
606
600
|
|
|
@@ -725,18 +719,6 @@ export function nodesQueryFromExpressionNode(expressionNode, context) {
|
|
|
725
719
|
return nodesQuery;
|
|
726
720
|
}
|
|
727
721
|
|
|
728
|
-
export function comparisonFromExpressionNode(expressionNOde, context) {
|
|
729
|
-
let comparison = null;
|
|
730
|
-
|
|
731
|
-
const comparisonNode = expressionNOde.getComparisonNode();
|
|
732
|
-
|
|
733
|
-
if (comparisonNode !== null) {
|
|
734
|
-
comparison = comparisonFromComparisonNode(comparisonNode, context);
|
|
735
|
-
}
|
|
736
|
-
|
|
737
|
-
return comparison;
|
|
738
|
-
}
|
|
739
|
-
|
|
740
722
|
export function elseExpressionFromTernaryNode(ternaryNode, context) {
|
|
741
723
|
const elseExpressionNode = ternaryNode.getElseExpressionNode(),
|
|
742
724
|
elseExpression = expressionFromExpressionNode(elseExpressionNode, context);
|
|
@@ -857,8 +839,8 @@ export function anonymousProcedureFromReduceNode(reduceNode, context) {
|
|
|
857
839
|
return anonymousProcedure;
|
|
858
840
|
}
|
|
859
841
|
|
|
860
|
-
export function leftExpressionFromCompzrisonNode(
|
|
861
|
-
const leftExpressionNode =
|
|
842
|
+
export function leftExpressionFromCompzrisonNode(comparisonExpressionNode, context) {
|
|
843
|
+
const leftExpressionNode = comparisonExpressionNode.getLeftExpressionNode(),
|
|
862
844
|
leftExpression = expressionFromExpressionNode(leftExpressionNode, context);
|
|
863
845
|
|
|
864
846
|
return leftExpression;
|
|
@@ -883,8 +865,8 @@ export function expressionFromTypeAndVariableNode(type, variableNode, context) {
|
|
|
883
865
|
return expression;
|
|
884
866
|
}
|
|
885
867
|
|
|
886
|
-
export function rightExpressionFromCompzrisonNode(
|
|
887
|
-
const rightExpressionNode =
|
|
868
|
+
export function rightExpressionFromCompzrisonNode(comparisonExpressionNode, context) {
|
|
869
|
+
const rightExpressionNode = comparisonExpressionNode.getLeftExpressionNode(),
|
|
888
870
|
rightExpression = expressionFromExpressionNode(rightExpressionNode, context);
|
|
889
871
|
|
|
890
872
|
return rightExpression;
|
|
@@ -935,6 +917,12 @@ export function logicalExpressionFromExpressionNode(expressionNode, context) {
|
|
|
935
917
|
return logicalExpression;
|
|
936
918
|
}
|
|
937
919
|
|
|
920
|
+
export function negatedFromComparisonExpressionNode(comparisonExpressionNode, context) {
|
|
921
|
+
const negated = comparisonExpressionNode.isNegated();
|
|
922
|
+
|
|
923
|
+
return negated;
|
|
924
|
+
}
|
|
925
|
+
|
|
938
926
|
export function expressionFromNegatedExpressionNode(negatedExpressionNode, context) {
|
|
939
927
|
const expressionNode = negatedExpressionNode.getExpressionNode(),
|
|
940
928
|
expression = expressionFromExpressionNode(expressionNode, context);
|
|
@@ -1001,6 +989,18 @@ export function procedureFromProcedureDeclarationNode(procedureDeclarationNode,
|
|
|
1001
989
|
return procedure;
|
|
1002
990
|
}
|
|
1003
991
|
|
|
992
|
+
export function comparisonExpressionFromExpressionNode(expressionNOde, context) {
|
|
993
|
+
let comparisonExpression = null;
|
|
994
|
+
|
|
995
|
+
const comparisonExpressionNode = expressionNOde.getComparisonExpressionNode();
|
|
996
|
+
|
|
997
|
+
if (comparisonExpressionNode !== null) {
|
|
998
|
+
comparisonExpression = comparisonExpressionFromComparisonExpressionNode(comparisonExpressionNode, context);
|
|
999
|
+
}
|
|
1000
|
+
|
|
1001
|
+
return comparisonExpression;
|
|
1002
|
+
}
|
|
1003
|
+
|
|
1004
1004
|
export function parametersFromProcedureDeclarationNode(procedureDeclarationNode, context) {
|
|
1005
1005
|
const parametersNode = procedureDeclarationNode.getParametersNode(),
|
|
1006
1006
|
parameters = parametersFromParametersNode(parametersNode, context);
|
|
@@ -1,110 +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
|
-
var _exception = /*#__PURE__*/ _interop_require_default(require("../exception"));
|
|
12
|
-
var _elements = require("../elements");
|
|
13
|
-
var _term = require("../utilities/term");
|
|
14
|
-
function _class_call_check(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 _create_class(Constructor, protoProps, staticProps) {
|
|
29
|
-
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
|
|
30
|
-
if (staticProps) _defineProperties(Constructor, staticProps);
|
|
31
|
-
return Constructor;
|
|
32
|
-
}
|
|
33
|
-
function _define_property(obj, key, value) {
|
|
34
|
-
if (key in obj) {
|
|
35
|
-
Object.defineProperty(obj, key, {
|
|
36
|
-
value: value,
|
|
37
|
-
enumerable: true,
|
|
38
|
-
configurable: true,
|
|
39
|
-
writable: true
|
|
40
|
-
});
|
|
41
|
-
} else {
|
|
42
|
-
obj[key] = value;
|
|
43
|
-
}
|
|
44
|
-
return obj;
|
|
45
|
-
}
|
|
46
|
-
function _interop_require_default(obj) {
|
|
47
|
-
return obj && obj.__esModule ? obj : {
|
|
48
|
-
default: obj
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
var _Comparison;
|
|
52
|
-
var _default = (0, _elements.define)((_Comparison = /*#__PURE__*/ function() {
|
|
53
|
-
function Comparison(string, negated, leftExpression, rightExpression) {
|
|
54
|
-
_class_call_check(this, Comparison);
|
|
55
|
-
this.string = string;
|
|
56
|
-
this.negated = negated;
|
|
57
|
-
this.leftExpression = leftExpression;
|
|
58
|
-
this.rightExpression = rightExpression;
|
|
59
|
-
}
|
|
60
|
-
_create_class(Comparison, [
|
|
61
|
-
{
|
|
62
|
-
key: "getString",
|
|
63
|
-
value: function getString() {
|
|
64
|
-
return this.string;
|
|
65
|
-
}
|
|
66
|
-
},
|
|
67
|
-
{
|
|
68
|
-
key: "isNegated",
|
|
69
|
-
value: function isNegated() {
|
|
70
|
-
return this.negated;
|
|
71
|
-
}
|
|
72
|
-
},
|
|
73
|
-
{
|
|
74
|
-
key: "getLeftExpression",
|
|
75
|
-
value: function getLeftExpression() {
|
|
76
|
-
return this.leftExpression;
|
|
77
|
-
}
|
|
78
|
-
},
|
|
79
|
-
{
|
|
80
|
-
key: "getRightExpression",
|
|
81
|
-
value: function getRightExpression() {
|
|
82
|
-
return this.rightExpression;
|
|
83
|
-
}
|
|
84
|
-
},
|
|
85
|
-
{
|
|
86
|
-
key: "evaluate",
|
|
87
|
-
value: function evaluate(context) {
|
|
88
|
-
var term;
|
|
89
|
-
var comparisonString = this.string; ///
|
|
90
|
-
context.trace("Evaluating the '".concat(comparisonString, "' comparison..."));
|
|
91
|
-
var leftTerm = this.leftExpression.evaluate(context), rightTerm = this.rightExpression.evaluate(context), leftTermType = leftTerm.getType(), rightTermType = rightTerm.getType();
|
|
92
|
-
if (leftTermType !== rightTermType) {
|
|
93
|
-
var leftTermString = leftTerm.getString(), rightTermString = rightTerm.getString(), message = "The '".concat(leftTermString, "' left expression's type is '").concat(leftTermType, "' whereas the '").concat(rightTermString, "' right expression's type is '").concat(rightTermType, "'."), exception = _exception.default.fromMessage(message);
|
|
94
|
-
throw exception;
|
|
95
|
-
}
|
|
96
|
-
var leftTermEqualToRightTerm = leftTerm.isEqualTo(rightTerm);
|
|
97
|
-
var boolean = leftTermEqualToRightTerm; ///
|
|
98
|
-
if (this.negated) {
|
|
99
|
-
boolean = !boolean; ///
|
|
100
|
-
}
|
|
101
|
-
term = (0, _term.termFromBoolean)(boolean, context);
|
|
102
|
-
context.debug("...evaluated the '".concat(comparisonString, "' comparison."));
|
|
103
|
-
return term;
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
]);
|
|
107
|
-
return Comparison;
|
|
108
|
-
}(), _define_property(_Comparison, "name", "Comparison"), _Comparison));
|
|
109
|
-
|
|
110
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2NvbXBhcmlzb24uanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBFeGNlcHRpb24gZnJvbSBcIi4uL2V4Y2VwdGlvblwiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IHRlcm1Gcm9tQm9vbGVhbiB9IGZyb20gXCIuLi91dGlsaXRpZXMvdGVybVwiO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgQ29tcGFyaXNvbiB7XG4gIGNvbnN0cnVjdG9yKHN0cmluZywgbmVnYXRlZCwgbGVmdEV4cHJlc3Npb24sIHJpZ2h0RXhwcmVzc2lvbikge1xuICAgIHRoaXMuc3RyaW5nID0gc3RyaW5nO1xuICAgIHRoaXMubmVnYXRlZCA9IG5lZ2F0ZWQ7XG4gICAgdGhpcy5sZWZ0RXhwcmVzc2lvbiA9IGxlZnRFeHByZXNzaW9uO1xuICAgIHRoaXMucmlnaHRFeHByZXNzaW9uID0gcmlnaHRFeHByZXNzaW9uO1xuICB9XG5cbiAgZ2V0U3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLnN0cmluZztcbiAgfVxuXG4gIGlzTmVnYXRlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5uZWdhdGVkO1xuICB9XG5cbiAgZ2V0TGVmdEV4cHJlc3Npb24oKSB7XG4gICAgcmV0dXJuIHRoaXMubGVmdEV4cHJlc3Npb247XG4gIH1cblxuICBnZXRSaWdodEV4cHJlc3Npb24oKSB7XG4gICAgcmV0dXJuIHRoaXMucmlnaHRFeHByZXNzaW9uO1xuICB9XG5cbiAgZXZhbHVhdGUoY29udGV4dCkge1xuICAgIGxldCB0ZXJtO1xuXG4gICAgY29uc3QgY29tcGFyaXNvblN0cmluZyA9IHRoaXMuc3RyaW5nOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYEV2YWx1YXRpbmcgdGhlICcke2NvbXBhcmlzb25TdHJpbmd9JyBjb21wYXJpc29uLi4uYCk7XG5cbiAgICBjb25zdCBsZWZ0VGVybSA9IHRoaXMubGVmdEV4cHJlc3Npb24uZXZhbHVhdGUoY29udGV4dCksXG4gICAgICAgICAgcmlnaHRUZXJtID0gdGhpcy5yaWdodEV4cHJlc3Npb24uZXZhbHVhdGUoY29udGV4dCksXG4gICAgICAgICAgbGVmdFRlcm1UeXBlID0gbGVmdFRlcm0uZ2V0VHlwZSgpLFxuICAgICAgICAgIHJpZ2h0VGVybVR5cGUgPSByaWdodFRlcm0uZ2V0VHlwZSgpO1xuXG4gICAgaWYgKGxlZnRUZXJtVHlwZSAhPT0gcmlnaHRUZXJtVHlwZSkge1xuICAgICAgY29uc3QgbGVmdFRlcm1TdHJpbmcgPSBsZWZ0VGVybS5nZXRTdHJpbmcoKSxcbiAgICAgICAgICAgIHJpZ2h0VGVybVN0cmluZyA9IHJpZ2h0VGVybS5nZXRTdHJpbmcoKSxcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBgVGhlICcke2xlZnRUZXJtU3RyaW5nfScgbGVmdCBleHByZXNzaW9uJ3MgdHlwZSBpcyAnJHtsZWZ0VGVybVR5cGV9JyB3aGVyZWFzIHRoZSAnJHtyaWdodFRlcm1TdHJpbmd9JyByaWdodCBleHByZXNzaW9uJ3MgdHlwZSBpcyAnJHtyaWdodFRlcm1UeXBlfScuYCxcbiAgICAgICAgICAgIGV4Y2VwdGlvbiA9IEV4Y2VwdGlvbi5mcm9tTWVzc2FnZShtZXNzYWdlKTtcblxuICAgICAgdGhyb3cgZXhjZXB0aW9uO1xuICAgIH1cblxuICAgIGNvbnN0IGxlZnRUZXJtRXF1YWxUb1JpZ2h0VGVybSA9IGxlZnRUZXJtLmlzRXF1YWxUbyhyaWdodFRlcm0pO1xuXG4gICAgbGV0IGJvb2xlYW4gPSBsZWZ0VGVybUVxdWFsVG9SaWdodFRlcm07IC8vL1xuXG4gICAgaWYgKHRoaXMubmVnYXRlZCkge1xuICAgICAgYm9vbGVhbiA9ICFib29sZWFuOyAvLy9cbiAgICB9XG5cbiAgICB0ZXJtID0gdGVybUZyb21Cb29sZWFuKGJvb2xlYW4sIGNvbnRleHQpO1xuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uZXZhbHVhdGVkIHRoZSAnJHtjb21wYXJpc29uU3RyaW5nfScgY29tcGFyaXNvbi5gKTtcblxuICAgIHJldHVybiB0ZXJtO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIkNvbXBhcmlzb25cIjtcbn0pO1xuIl0sIm5hbWVzIjpbImRlZmluZSIsIkNvbXBhcmlzb24iLCJzdHJpbmciLCJuZWdhdGVkIiwibGVmdEV4cHJlc3Npb24iLCJyaWdodEV4cHJlc3Npb24iLCJnZXRTdHJpbmciLCJpc05lZ2F0ZWQiLCJnZXRMZWZ0RXhwcmVzc2lvbiIsImdldFJpZ2h0RXhwcmVzc2lvbiIsImV2YWx1YXRlIiwiY29udGV4dCIsInRlcm0iLCJjb21wYXJpc29uU3RyaW5nIiwidHJhY2UiLCJsZWZ0VGVybSIsInJpZ2h0VGVybSIsImxlZnRUZXJtVHlwZSIsImdldFR5cGUiLCJyaWdodFRlcm1UeXBlIiwibGVmdFRlcm1TdHJpbmciLCJyaWdodFRlcm1TdHJpbmciLCJtZXNzYWdlIiwiZXhjZXB0aW9uIiwiRXhjZXB0aW9uIiwiZnJvbU1lc3NhZ2UiLCJsZWZ0VGVybUVxdWFsVG9SaWdodFRlcm0iLCJpc0VxdWFsVG8iLCJib29sZWFuIiwidGVybUZyb21Cb29sZWFuIiwiZGVidWciLCJuYW1lIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFPQTs7O2VBQUE7OztnRUFMc0I7d0JBRUM7b0JBQ1M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQUVoQyxXQUFlQSxJQUFBQSxnQkFBTSwrQkFBQzthQUFNQyxXQUNkQyxNQUFNLEVBQUVDLE9BQU8sRUFBRUMsY0FBYyxFQUFFQyxlQUFlO2dDQURsQ0o7UUFFeEIsSUFBSSxDQUFDQyxNQUFNLEdBQUdBO1FBQ2QsSUFBSSxDQUFDQyxPQUFPLEdBQUdBO1FBQ2YsSUFBSSxDQUFDQyxjQUFjLEdBQUdBO1FBQ3RCLElBQUksQ0FBQ0MsZUFBZSxHQUFHQTs7OztZQUd6QkMsS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLE9BQU8sSUFBSSxDQUFDSixNQUFNO1lBQ3BCOzs7WUFFQUssS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLE9BQU8sSUFBSSxDQUFDSixPQUFPO1lBQ3JCOzs7WUFFQUssS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLE9BQU8sSUFBSSxDQUFDSixjQUFjO1lBQzVCOzs7WUFFQUssS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLE9BQU8sSUFBSSxDQUFDSixlQUFlO1lBQzdCOzs7WUFFQUssS0FBQUE7bUJBQUFBLFNBQUFBLFNBQVNDLE9BQU87Z0JBQ2QsSUFBSUM7Z0JBRUosSUFBTUMsbUJBQW1CLElBQUksQ0FBQ1gsTUFBTSxFQUFFLEdBQUc7Z0JBRXpDUyxRQUFRRyxLQUFLLENBQUMsQUFBQyxtQkFBbUMsT0FBakJELGtCQUFpQjtnQkFFbEQsSUFBTUUsV0FBVyxJQUFJLENBQUNYLGNBQWMsQ0FBQ00sUUFBUSxDQUFDQyxVQUN4Q0ssWUFBWSxJQUFJLENBQUNYLGVBQWUsQ0FBQ0ssUUFBUSxDQUFDQyxVQUMxQ00sZUFBZUYsU0FBU0csT0FBTyxJQUMvQkMsZ0JBQWdCSCxVQUFVRSxPQUFPO2dCQUV2QyxJQUFJRCxpQkFBaUJFLGVBQWU7b0JBQ2xDLElBQU1DLGlCQUFpQkwsU0FBU1QsU0FBUyxJQUNuQ2Usa0JBQWtCTCxVQUFVVixTQUFTLElBQ3JDZ0IsVUFBVSxBQUFDLFFBQXFETCxPQUE5Q0csZ0JBQWUsaUNBQTZEQyxPQUE5QkosY0FBYSxtQkFBaUVFLE9BQWhERSxpQkFBZ0Isa0NBQThDLE9BQWRGLGVBQWMsT0FDNUpJLFlBQVlDLGtCQUFTLENBQUNDLFdBQVcsQ0FBQ0g7b0JBRXhDLE1BQU1DO2dCQUNSO2dCQUVBLElBQU1HLDJCQUEyQlgsU0FBU1ksU0FBUyxDQUFDWDtnQkFFcEQsSUFBSVksVUFBVUYsMEJBQTBCLEdBQUc7Z0JBRTNDLElBQUksSUFBSSxDQUFDdkIsT0FBTyxFQUFFO29CQUNoQnlCLFVBQVUsQ0FBQ0EsU0FBUyxHQUFHO2dCQUN6QjtnQkFFQWhCLE9BQU9pQixJQUFBQSxxQkFBZSxFQUFDRCxTQUFTakI7Z0JBRWhDQSxRQUFRbUIsS0FBSyxDQUFDLEFBQUMscUJBQXFDLE9BQWpCakIsa0JBQWlCO2dCQUVwRCxPQUFPRDtZQUNUOzs7O0tBRUEsOEJBQU9tQixRQUFPIn0=
|