occam-furtle 2.0.292 → 2.0.293
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/returnBlock.js +198 -0
- package/lib/node/assignment/array.js +2 -2
- package/lib/node/assignment/object.js +2 -2
- package/lib/node/assignment/variable.js +2 -2
- package/lib/node/assignment.js +9 -4
- package/lib/node/assignments/variable.js +4 -4
- package/lib/node/assignments.js +9 -4
- package/lib/node/comparison.js +9 -4
- package/lib/node/declaration.js +9 -4
- package/lib/node/error.js +107 -0
- package/lib/node/every.js +9 -4
- package/lib/node/expression.js +9 -4
- package/lib/node/expressions.js +9 -4
- package/lib/node/label.js +9 -4
- package/lib/node/parameter.js +9 -4
- package/lib/node/parameters.js +9 -4
- package/lib/node/procedure.js +9 -4
- package/lib/node/procedureCall.js +9 -4
- package/lib/node/query.js +9 -4
- package/lib/node/reduce.js +9 -4
- package/lib/node/reference.js +9 -4
- package/lib/node/returnBlock.js +9 -4
- package/lib/node/some.js +107 -0
- package/lib/node/statement.js +9 -4
- package/lib/node/step.js +9 -4
- package/lib/node/ternary.js +9 -4
- package/lib/node/variable.js +9 -4
- package/lib/nonTerminalNodeMap.js +2 -3
- package/lib/preamble.js +3 -3
- package/lib/ruleNames.js +1 -5
- package/lib/utilities/furtle.js +5 -5
- package/lib/utilities/lexers.js +7 -7
- package/package.json +3 -1
- package/src/element/{block/return.js → returnBlock.js} +5 -5
- package/src/node/assignment/array.js +1 -1
- package/src/node/assignment/object.js +1 -1
- package/src/node/assignment/variable.js +1 -1
- package/src/node/assignment.js +1 -1
- package/src/node/assignments/variable.js +3 -3
- package/src/node/assignments.js +1 -1
- package/src/node/comparison.js +1 -1
- package/src/node/declaration.js +1 -1
- package/src/node/error.js +7 -0
- package/src/node/every.js +1 -1
- package/src/node/expression.js +1 -1
- package/src/node/expressions.js +1 -1
- package/src/node/label.js +1 -1
- package/src/node/parameter.js +1 -1
- package/src/node/parameters.js +1 -1
- package/src/node/procedure.js +1 -1
- package/src/node/procedureCall.js +1 -1
- package/src/node/query.js +1 -1
- package/src/node/reduce.js +1 -1
- package/src/node/reference.js +1 -1
- package/src/node/returnBlock.js +1 -1
- package/src/node/some.js +7 -0
- package/src/node/statement.js +1 -1
- package/src/node/step.js +1 -1
- package/src/node/ternary.js +1 -1
- package/src/node/variable.js +1 -1
- package/src/nonTerminalNodeMap.js +0 -3
- package/src/preamble.js +1 -1
- package/src/ruleNames.js +0 -1
- package/src/utilities/furtle.js +2 -4
- package/src/utilities/lexers.js +8 -8
- package/test/main.js +1 -1
- package/lib/element/block/return.js +0 -198
package/src/utilities/furtle.js
CHANGED
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import { lexersUtilities, parsersUtilities } from "occam-grammars";
|
|
4
|
-
|
|
5
3
|
import FurtleLexer from "../furtle/Lexer";
|
|
6
4
|
import FurtleParser from "../furtle/Parser";
|
|
7
5
|
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
import { furtleLexerFromNothing } from "../utilities/lexers";
|
|
7
|
+
import { furtleParserFromNothing } from "../utilities/parsers";
|
|
10
8
|
|
|
11
9
|
export const furtleLexer = furtleLexerFromNothing(FurtleLexer);
|
|
12
10
|
|
package/src/utilities/lexers.js
CHANGED
|
@@ -6,13 +6,13 @@ import FurtleLexer from "../furtle/lexer";
|
|
|
6
6
|
|
|
7
7
|
const { lexerFromRules, rulesFromEntries } = lexerUtilities;
|
|
8
8
|
|
|
9
|
-
export function
|
|
10
|
-
if (
|
|
11
|
-
entries = Class; ///
|
|
12
|
-
|
|
9
|
+
export function furtleLexerFromNothing(Class) {
|
|
10
|
+
if (Class === undefined) {
|
|
13
11
|
Class = FurtleLexer; ///
|
|
14
12
|
}
|
|
15
13
|
|
|
14
|
+
const { entries } = FurtleLexer;
|
|
15
|
+
|
|
16
16
|
let rules;
|
|
17
17
|
|
|
18
18
|
rules = rulesFromEntries(entries);
|
|
@@ -22,13 +22,13 @@ export function furtleLexerFromEntries(Class, entries) {
|
|
|
22
22
|
return furtleLexer;
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
-
export function
|
|
26
|
-
if (
|
|
25
|
+
export function furtleLexerFromEntries(Class, entries) {
|
|
26
|
+
if (entries === undefined) {
|
|
27
|
+
entries = Class; ///
|
|
28
|
+
|
|
27
29
|
Class = FurtleLexer; ///
|
|
28
30
|
}
|
|
29
31
|
|
|
30
|
-
const { entries } = FurtleLexer;
|
|
31
|
-
|
|
32
32
|
let rules;
|
|
33
33
|
|
|
34
34
|
rules = rulesFromEntries(entries);
|
package/test/main.js
CHANGED
|
@@ -9,7 +9,7 @@ const { furtleFileFromNothing } = require("./helpers/furtle"),
|
|
|
9
9
|
{ procedureFromReleaseContext } = require("./helpers/procedure"),
|
|
10
10
|
{ nominalFileContextFromReleaseContext } = require("./helpers/nominal");
|
|
11
11
|
|
|
12
|
-
describe("src/
|
|
12
|
+
describe("src/main", () => {
|
|
13
13
|
let fileContext,
|
|
14
14
|
releaseContext;
|
|
15
15
|
|
|
@@ -1,198 +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 _elements = /*#__PURE__*/ _interop_require_wildcard(require("../../elements"));
|
|
12
|
-
var _exception = /*#__PURE__*/ _interop_require_default(require("../../exception"));
|
|
13
|
-
var _block = /*#__PURE__*/ _interop_require_default(require("../../context/block"));
|
|
14
|
-
var _query = require("../../utilities/query");
|
|
15
|
-
function _class_call_check(instance, Constructor) {
|
|
16
|
-
if (!(instance instanceof Constructor)) {
|
|
17
|
-
throw new TypeError("Cannot call a class as a function");
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
function _defineProperties(target, props) {
|
|
21
|
-
for(var i = 0; i < props.length; i++){
|
|
22
|
-
var descriptor = props[i];
|
|
23
|
-
descriptor.enumerable = descriptor.enumerable || false;
|
|
24
|
-
descriptor.configurable = true;
|
|
25
|
-
if ("value" in descriptor) descriptor.writable = true;
|
|
26
|
-
Object.defineProperty(target, descriptor.key, descriptor);
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
function _create_class(Constructor, protoProps, staticProps) {
|
|
30
|
-
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
|
|
31
|
-
if (staticProps) _defineProperties(Constructor, staticProps);
|
|
32
|
-
return Constructor;
|
|
33
|
-
}
|
|
34
|
-
function _define_property(obj, key, value) {
|
|
35
|
-
if (key in obj) {
|
|
36
|
-
Object.defineProperty(obj, key, {
|
|
37
|
-
value: value,
|
|
38
|
-
enumerable: true,
|
|
39
|
-
configurable: true,
|
|
40
|
-
writable: true
|
|
41
|
-
});
|
|
42
|
-
} else {
|
|
43
|
-
obj[key] = value;
|
|
44
|
-
}
|
|
45
|
-
return obj;
|
|
46
|
-
}
|
|
47
|
-
function _interop_require_default(obj) {
|
|
48
|
-
return obj && obj.__esModule ? obj : {
|
|
49
|
-
default: obj
|
|
50
|
-
};
|
|
51
|
-
}
|
|
52
|
-
function _getRequireWildcardCache(nodeInterop) {
|
|
53
|
-
if (typeof WeakMap !== "function") return null;
|
|
54
|
-
var cacheBabelInterop = new WeakMap();
|
|
55
|
-
var cacheNodeInterop = new WeakMap();
|
|
56
|
-
return (_getRequireWildcardCache = function(nodeInterop) {
|
|
57
|
-
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
|
58
|
-
})(nodeInterop);
|
|
59
|
-
}
|
|
60
|
-
function _interop_require_wildcard(obj, nodeInterop) {
|
|
61
|
-
if (!nodeInterop && obj && obj.__esModule) {
|
|
62
|
-
return obj;
|
|
63
|
-
}
|
|
64
|
-
if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
|
|
65
|
-
return {
|
|
66
|
-
default: obj
|
|
67
|
-
};
|
|
68
|
-
}
|
|
69
|
-
var cache = _getRequireWildcardCache(nodeInterop);
|
|
70
|
-
if (cache && cache.has(obj)) {
|
|
71
|
-
return cache.get(obj);
|
|
72
|
-
}
|
|
73
|
-
var newObj = {
|
|
74
|
-
__proto__: null
|
|
75
|
-
};
|
|
76
|
-
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
77
|
-
for(var key in obj){
|
|
78
|
-
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
79
|
-
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
|
|
80
|
-
if (desc && (desc.get || desc.set)) {
|
|
81
|
-
Object.defineProperty(newObj, key, desc);
|
|
82
|
-
} else {
|
|
83
|
-
newObj[key] = obj[key];
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
newObj.default = obj;
|
|
88
|
-
if (cache) {
|
|
89
|
-
cache.set(obj, newObj);
|
|
90
|
-
}
|
|
91
|
-
return newObj;
|
|
92
|
-
}
|
|
93
|
-
var _ReturnBlock;
|
|
94
|
-
var stepNodesQuery = (0, _query.nodesQuery)("/returnBlock/step"), nonsenseNodesQuery = (0, _query.nodesQuery)("/returnBlock/nonsense"), expressionReturnBlockNodeQuery = (0, _query.nodeQuery)("/expression/returnBlock"), anonymousProcedureReturnBlockNodeQuery = (0, _query.nodeQuery)("/anonymousProcedure/returnBlock"), procedureDeclarationReturnBlockNodeQuery = (0, _query.nodeQuery)("/procedureDeclaration/returnBlock");
|
|
95
|
-
var _default = (0, _elements.define)((_ReturnBlock = /*#__PURE__*/ function() {
|
|
96
|
-
function ReturnBlock(string, steps, nonsensical, returnStatement) {
|
|
97
|
-
_class_call_check(this, ReturnBlock);
|
|
98
|
-
this.string = string;
|
|
99
|
-
this.steps = steps;
|
|
100
|
-
this.nonsensical = nonsensical;
|
|
101
|
-
this.returnStatement = returnStatement;
|
|
102
|
-
}
|
|
103
|
-
_create_class(ReturnBlock, [
|
|
104
|
-
{
|
|
105
|
-
key: "getString",
|
|
106
|
-
value: function getString() {
|
|
107
|
-
return this.string;
|
|
108
|
-
}
|
|
109
|
-
},
|
|
110
|
-
{
|
|
111
|
-
key: "getSteps",
|
|
112
|
-
value: function getSteps() {
|
|
113
|
-
return this.steps;
|
|
114
|
-
}
|
|
115
|
-
},
|
|
116
|
-
{
|
|
117
|
-
key: "isNonsensical",
|
|
118
|
-
value: function isNonsensical() {
|
|
119
|
-
return this.nonsensical;
|
|
120
|
-
}
|
|
121
|
-
},
|
|
122
|
-
{
|
|
123
|
-
key: "getReturnStatement",
|
|
124
|
-
value: function getReturnStatement() {
|
|
125
|
-
return this.returnStatement;
|
|
126
|
-
}
|
|
127
|
-
},
|
|
128
|
-
{
|
|
129
|
-
key: "evaluate",
|
|
130
|
-
value: function evaluate(variables, context) {
|
|
131
|
-
if (context === undefined) {
|
|
132
|
-
context = variables; ///
|
|
133
|
-
variables = [];
|
|
134
|
-
}
|
|
135
|
-
if (this.nonsensical) {
|
|
136
|
-
var message = "The return block is nonsensical.", exception = _exception.default.fromMessage(message);
|
|
137
|
-
throw exception;
|
|
138
|
-
}
|
|
139
|
-
var blockContext = _block.default.fromVariables(variables, context);
|
|
140
|
-
context = blockContext; ///
|
|
141
|
-
this.steps.forEach(function(step) {
|
|
142
|
-
step.evaluate(context);
|
|
143
|
-
});
|
|
144
|
-
var expression = this.returnStatement.evaluate(context);
|
|
145
|
-
return expression;
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
], [
|
|
149
|
-
{
|
|
150
|
-
key: "fromExpressionNode",
|
|
151
|
-
value: function fromExpressionNode(expressionNode, context) {
|
|
152
|
-
var returnBlock = null;
|
|
153
|
-
var expressionReturnBlockNode = expressionReturnBlockNodeQuery(expressionNode);
|
|
154
|
-
if (expressionReturnBlockNode !== null) {
|
|
155
|
-
var returnBlockNode = expressionReturnBlockNode; ///
|
|
156
|
-
returnBlock = returnBlockFromReturnBlockNode(returnBlockNode, context);
|
|
157
|
-
}
|
|
158
|
-
return returnBlock;
|
|
159
|
-
}
|
|
160
|
-
},
|
|
161
|
-
{
|
|
162
|
-
key: "fromAnonymousProcedureNode",
|
|
163
|
-
value: function fromAnonymousProcedureNode(anonymousProcedureNode, context) {
|
|
164
|
-
var anonymousProcedureReturnBlockNode = anonymousProcedureReturnBlockNodeQuery(anonymousProcedureNode), returnBlockNode = anonymousProcedureReturnBlockNode, returnBlock = returnBlockFromReturnBlockNode(returnBlockNode, context);
|
|
165
|
-
return returnBlock;
|
|
166
|
-
}
|
|
167
|
-
},
|
|
168
|
-
{
|
|
169
|
-
key: "fromProcedureDeclarationNode",
|
|
170
|
-
value: function fromProcedureDeclarationNode(procedureDeclarationNode, context) {
|
|
171
|
-
var procedureDeclarationReturnBlockNode = procedureDeclarationReturnBlockNodeQuery(procedureDeclarationNode), returnBlockNode = procedureDeclarationReturnBlockNode, returnBlock = returnBlockFromReturnBlockNode(returnBlockNode, context);
|
|
172
|
-
return returnBlock;
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
]);
|
|
176
|
-
return ReturnBlock;
|
|
177
|
-
}(), _define_property(_ReturnBlock, "name", "ReturnBlock"), _ReturnBlock));
|
|
178
|
-
function stringFromReturnStatement(returnStatement, context) {
|
|
179
|
-
var returnStatementString = returnStatement.getString(), string = "{ ... ".concat(returnStatementString, " }");
|
|
180
|
-
return string;
|
|
181
|
-
}
|
|
182
|
-
function stepsFromReturnBlockNode(returnBlockNode, context) {
|
|
183
|
-
var Step = _elements.default.Step, stepNodes = stepNodesQuery(returnBlockNode), steps = stepNodes.map(function(stepNode) {
|
|
184
|
-
var step = Step.fromStepNode(stepNode, context);
|
|
185
|
-
return step;
|
|
186
|
-
});
|
|
187
|
-
return steps;
|
|
188
|
-
}
|
|
189
|
-
function returnBlockFromReturnBlockNode(returnBlockNode, context) {
|
|
190
|
-
var ReturnBlock = _elements.default.ReturnBlock, ReturnStatement = _elements.default.ReturnStatement, returnStatement = ReturnStatement.fromReturnBlockNode(returnBlockNode, context), nonsensical = nonsensicalFromReturnBlockNode(returnBlockNode, context), steps = stepsFromReturnBlockNode(returnBlockNode, context), string = stringFromReturnStatement(returnStatement, context), returnBlock = new ReturnBlock(string, steps, nonsensical, returnStatement);
|
|
191
|
-
return returnBlock;
|
|
192
|
-
}
|
|
193
|
-
function nonsensicalFromReturnBlockNode(returnBlockNode, context) {
|
|
194
|
-
var nonsenseNodes = nonsenseNodesQuery(returnBlockNode), nonsenseNodesLength = nonsenseNodes.length, nonsensical = nonsenseNodesLength > 0;
|
|
195
|
-
return nonsensical;
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2Jsb2NrL3JldHVybi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi8uLi9lbGVtZW50c1wiO1xuaW1wb3J0IEV4Y2VwdGlvbiBmcm9tIFwiLi4vLi4vZXhjZXB0aW9uXCI7XG5pbXBvcnQgQmxvY2tDb250ZXh0IGZyb20gXCIuLi8uLi9jb250ZXh0L2Jsb2NrXCI7XG5cbmltcG9ydCB7IGRlZmluZSB9IGZyb20gXCIuLi8uLi9lbGVtZW50c1wiO1xuaW1wb3J0IHsgbm9kZVF1ZXJ5LCBub2Rlc1F1ZXJ5IH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9xdWVyeVwiO1xuXG5jb25zdCBzdGVwTm9kZXNRdWVyeSA9IG5vZGVzUXVlcnkoXCIvcmV0dXJuQmxvY2svc3RlcFwiKSxcbiAgICAgIG5vbnNlbnNlTm9kZXNRdWVyeSA9IG5vZGVzUXVlcnkoXCIvcmV0dXJuQmxvY2svbm9uc2Vuc2VcIiksXG4gICAgICBleHByZXNzaW9uUmV0dXJuQmxvY2tOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvZXhwcmVzc2lvbi9yZXR1cm5CbG9ja1wiKSxcbiAgICAgIGFub255bW91c1Byb2NlZHVyZVJldHVybkJsb2NrTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL2Fub255bW91c1Byb2NlZHVyZS9yZXR1cm5CbG9ja1wiKSxcbiAgICAgIHByb2NlZHVyZURlY2xhcmF0aW9uUmV0dXJuQmxvY2tOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvcHJvY2VkdXJlRGVjbGFyYXRpb24vcmV0dXJuQmxvY2tcIik7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBSZXR1cm5CbG9jayB7XG4gIGNvbnN0cnVjdG9yKHN0cmluZywgc3RlcHMsIG5vbnNlbnNpY2FsLCByZXR1cm5TdGF0ZW1lbnQpIHtcbiAgICB0aGlzLnN0cmluZyA9IHN0cmluZztcbiAgICB0aGlzLnN0ZXBzID0gc3RlcHM7XG4gICAgdGhpcy5ub25zZW5zaWNhbCA9IG5vbnNlbnNpY2FsO1xuICAgIHRoaXMucmV0dXJuU3RhdGVtZW50ID0gcmV0dXJuU3RhdGVtZW50O1xuICB9XG5cbiAgZ2V0U3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLnN0cmluZztcbiAgfVxuXG4gIGdldFN0ZXBzKCkge1xuICAgIHJldHVybiB0aGlzLnN0ZXBzO1xuICB9XG5cbiAgaXNOb25zZW5zaWNhbCgpIHtcbiAgICByZXR1cm4gdGhpcy5ub25zZW5zaWNhbDtcbiAgfVxuXG4gIGdldFJldHVyblN0YXRlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5yZXR1cm5TdGF0ZW1lbnQ7XG4gIH1cblxuICBldmFsdWF0ZSh2YXJpYWJsZXMsIGNvbnRleHQpIHtcbiAgICBpZiAoY29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb250ZXh0ID0gdmFyaWFibGVzOyAgLy8vXG5cbiAgICAgIHZhcmlhYmxlcyA9IFtdO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm5vbnNlbnNpY2FsKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gYFRoZSByZXR1cm4gYmxvY2sgaXMgbm9uc2Vuc2ljYWwuYCxcbiAgICAgICAgICAgIGV4Y2VwdGlvbiA9IEV4Y2VwdGlvbi5mcm9tTWVzc2FnZShtZXNzYWdlKTtcblxuICAgICAgdGhyb3cgZXhjZXB0aW9uO1xuICAgIH1cblxuICAgIGNvbnN0IGJsb2NrQ29udGV4dCA9IEJsb2NrQ29udGV4dC5mcm9tVmFyaWFibGVzKHZhcmlhYmxlcywgY29udGV4dCk7XG5cbiAgICBjb250ZXh0ID0gYmxvY2tDb250ZXh0OyAvLy9cblxuICAgIHRoaXMuc3RlcHMuZm9yRWFjaCgoc3RlcCkgPT4ge1xuICAgICAgc3RlcC5ldmFsdWF0ZShjb250ZXh0KTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGV4cHJlc3Npb24gPSB0aGlzLnJldHVyblN0YXRlbWVudC5ldmFsdWF0ZShjb250ZXh0KTtcblxuICAgIHJldHVybiBleHByZXNzaW9uO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIlJldHVybkJsb2NrXCI7XG5cbiAgc3RhdGljIGZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICAgIGxldCByZXR1cm5CbG9jayA9IG51bGw7XG5cbiAgICBjb25zdCBleHByZXNzaW9uUmV0dXJuQmxvY2tOb2RlID0gZXhwcmVzc2lvblJldHVybkJsb2NrTm9kZVF1ZXJ5KGV4cHJlc3Npb25Ob2RlKTtcblxuICAgIGlmIChleHByZXNzaW9uUmV0dXJuQmxvY2tOb2RlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCByZXR1cm5CbG9ja05vZGUgPSBleHByZXNzaW9uUmV0dXJuQmxvY2tOb2RlOyAgLy8vXG5cbiAgICAgIHJldHVybkJsb2NrID0gcmV0dXJuQmxvY2tGcm9tUmV0dXJuQmxvY2tOb2RlKHJldHVybkJsb2NrTm9kZSwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldHVybkJsb2NrO1xuICB9XG5cbiAgc3RhdGljIGZyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlKGFub255bW91c1Byb2NlZHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgICBjb25zdCBhbm9ueW1vdXNQcm9jZWR1cmVSZXR1cm5CbG9ja05vZGUgPSBhbm9ueW1vdXNQcm9jZWR1cmVSZXR1cm5CbG9ja05vZGVRdWVyeShhbm9ueW1vdXNQcm9jZWR1cmVOb2RlKSxcbiAgICAgICAgICByZXR1cm5CbG9ja05vZGUgPSBhbm9ueW1vdXNQcm9jZWR1cmVSZXR1cm5CbG9ja05vZGUsICAvLy9cbiAgICAgICAgICByZXR1cm5CbG9jayA9IHJldHVybkJsb2NrRnJvbVJldHVybkJsb2NrTm9kZShyZXR1cm5CbG9ja05vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHJldHVybkJsb2NrO1xuICB9XG5cbiAgc3RhdGljIGZyb21Qcm9jZWR1cmVEZWNsYXJhdGlvbk5vZGUocHJvY2VkdXJlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gICAgY29uc3QgcHJvY2VkdXJlRGVjbGFyYXRpb25SZXR1cm5CbG9ja05vZGUgPSBwcm9jZWR1cmVEZWNsYXJhdGlvblJldHVybkJsb2NrTm9kZVF1ZXJ5KHByb2NlZHVyZURlY2xhcmF0aW9uTm9kZSksXG4gICAgICAgICAgcmV0dXJuQmxvY2tOb2RlID0gcHJvY2VkdXJlRGVjbGFyYXRpb25SZXR1cm5CbG9ja05vZGUsICAvLy9cbiAgICAgICAgICByZXR1cm5CbG9jayA9IHJldHVybkJsb2NrRnJvbVJldHVybkJsb2NrTm9kZShyZXR1cm5CbG9ja05vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHJldHVybkJsb2NrO1xuICB9XG59KTtcblxuZnVuY3Rpb24gc3RyaW5nRnJvbVJldHVyblN0YXRlbWVudChyZXR1cm5TdGF0ZW1lbnQsIGNvbnRleHQpIHtcbiAgY29uc3QgcmV0dXJuU3RhdGVtZW50U3RyaW5nID0gcmV0dXJuU3RhdGVtZW50LmdldFN0cmluZygpLFxuICAgICAgICBzdHJpbmcgPSBgeyAuLi4gJHtyZXR1cm5TdGF0ZW1lbnRTdHJpbmd9IH1gO1xuXG4gIHJldHVybiBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIHN0ZXBzRnJvbVJldHVybkJsb2NrTm9kZShyZXR1cm5CbG9ja05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTdGVwIH0gPSBlbGVtZW50cyxcbiAgICAgICAgc3RlcE5vZGVzID0gc3RlcE5vZGVzUXVlcnkocmV0dXJuQmxvY2tOb2RlKSxcbiAgICAgICAgc3RlcHMgPSBzdGVwTm9kZXMubWFwKChzdGVwTm9kZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHN0ZXAgPSBTdGVwLmZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gc3RlcDtcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIHN0ZXBzO1xufVxuXG5mdW5jdGlvbiByZXR1cm5CbG9ja0Zyb21SZXR1cm5CbG9ja05vZGUocmV0dXJuQmxvY2tOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUmV0dXJuQmxvY2ssIFJldHVyblN0YXRlbWVudCB9ID0gZWxlbWVudHMsXG4gICAgICAgIHJldHVyblN0YXRlbWVudCA9IFJldHVyblN0YXRlbWVudC5mcm9tUmV0dXJuQmxvY2tOb2RlKHJldHVybkJsb2NrTm9kZSwgY29udGV4dCksXG4gICAgICAgIG5vbnNlbnNpY2FsID0gbm9uc2Vuc2ljYWxGcm9tUmV0dXJuQmxvY2tOb2RlKHJldHVybkJsb2NrTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN0ZXBzID0gc3RlcHNGcm9tUmV0dXJuQmxvY2tOb2RlKHJldHVybkJsb2NrTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN0cmluZyA9IHN0cmluZ0Zyb21SZXR1cm5TdGF0ZW1lbnQocmV0dXJuU3RhdGVtZW50LCBjb250ZXh0KSxcbiAgICAgICAgcmV0dXJuQmxvY2sgPSBuZXcgUmV0dXJuQmxvY2soc3RyaW5nLCBzdGVwcywgbm9uc2Vuc2ljYWwsIHJldHVyblN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIHJldHVybkJsb2NrO1xufVxuXG5mdW5jdGlvbiBub25zZW5zaWNhbEZyb21SZXR1cm5CbG9ja05vZGUocmV0dXJuQmxvY2tOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5vbnNlbnNlTm9kZXMgPSBub25zZW5zZU5vZGVzUXVlcnkocmV0dXJuQmxvY2tOb2RlKSxcbiAgICAgICAgbm9uc2Vuc2VOb2Rlc0xlbmd0aCA9IG5vbnNlbnNlTm9kZXMubGVuZ3RoLFxuICAgICAgICBub25zZW5zaWNhbCA9IChub25zZW5zZU5vZGVzTGVuZ3RoID4gMCk7XG5cbiAgcmV0dXJuIG5vbnNlbnNpY2FsO1xufVxuIl0sIm5hbWVzIjpbInN0ZXBOb2Rlc1F1ZXJ5Iiwibm9kZXNRdWVyeSIsIm5vbnNlbnNlTm9kZXNRdWVyeSIsImV4cHJlc3Npb25SZXR1cm5CbG9ja05vZGVRdWVyeSIsIm5vZGVRdWVyeSIsImFub255bW91c1Byb2NlZHVyZVJldHVybkJsb2NrTm9kZVF1ZXJ5IiwicHJvY2VkdXJlRGVjbGFyYXRpb25SZXR1cm5CbG9ja05vZGVRdWVyeSIsImRlZmluZSIsIlJldHVybkJsb2NrIiwic3RyaW5nIiwic3RlcHMiLCJub25zZW5zaWNhbCIsInJldHVyblN0YXRlbWVudCIsImdldFN0cmluZyIsImdldFN0ZXBzIiwiaXNOb25zZW5zaWNhbCIsImdldFJldHVyblN0YXRlbWVudCIsImV2YWx1YXRlIiwidmFyaWFibGVzIiwiY29udGV4dCIsInVuZGVmaW5lZCIsIm1lc3NhZ2UiLCJleGNlcHRpb24iLCJFeGNlcHRpb24iLCJmcm9tTWVzc2FnZSIsImJsb2NrQ29udGV4dCIsIkJsb2NrQ29udGV4dCIsImZyb21WYXJpYWJsZXMiLCJmb3JFYWNoIiwic3RlcCIsImV4cHJlc3Npb24iLCJmcm9tRXhwcmVzc2lvbk5vZGUiLCJleHByZXNzaW9uTm9kZSIsInJldHVybkJsb2NrIiwiZXhwcmVzc2lvblJldHVybkJsb2NrTm9kZSIsInJldHVybkJsb2NrTm9kZSIsInJldHVybkJsb2NrRnJvbVJldHVybkJsb2NrTm9kZSIsImZyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlIiwiYW5vbnltb3VzUHJvY2VkdXJlTm9kZSIsImFub255bW91c1Byb2NlZHVyZVJldHVybkJsb2NrTm9kZSIsImZyb21Qcm9jZWR1cmVEZWNsYXJhdGlvbk5vZGUiLCJwcm9jZWR1cmVEZWNsYXJhdGlvbk5vZGUiLCJwcm9jZWR1cmVEZWNsYXJhdGlvblJldHVybkJsb2NrTm9kZSIsIm5hbWUiLCJzdHJpbmdGcm9tUmV0dXJuU3RhdGVtZW50IiwicmV0dXJuU3RhdGVtZW50U3RyaW5nIiwic3RlcHNGcm9tUmV0dXJuQmxvY2tOb2RlIiwiU3RlcCIsImVsZW1lbnRzIiwic3RlcE5vZGVzIiwibWFwIiwic3RlcE5vZGUiLCJmcm9tU3RlcE5vZGUiLCJSZXR1cm5TdGF0ZW1lbnQiLCJmcm9tUmV0dXJuQmxvY2tOb2RlIiwibm9uc2Vuc2ljYWxGcm9tUmV0dXJuQmxvY2tOb2RlIiwibm9uc2Vuc2VO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
|