occam-furtle 2.0.280 → 2.0.283
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/README.md +0 -11
- package/lib/constants.js +29 -1
- package/lib/context/block.js +15 -1
- package/lib/context/file.js +129 -52
- package/lib/element/assignment/array.js +186 -0
- package/lib/element/assignment/object.js +244 -0
- package/lib/element/assignment/variable.js +144 -0
- package/lib/element/assignments/variable.js +158 -0
- package/lib/element/block/return.js +198 -0
- package/lib/element/comparison.js +179 -0
- package/lib/element/declaration/procedure.js +139 -0
- package/lib/{dom → element}/error.js +12 -4
- package/lib/element/every.js +179 -0
- package/lib/element/expression/bitwise.js +186 -0
- package/lib/element/expression/bracketed.js +149 -0
- package/lib/element/expression/negated.js +166 -0
- package/lib/element/expression.js +578 -0
- package/lib/element/expressions.js +210 -0
- package/lib/{dom → element}/label.js +4 -4
- package/lib/element/parameter/named.js +198 -0
- package/lib/element/parameter.js +165 -0
- package/lib/element/parameters/named.js +220 -0
- package/lib/element/parameters.js +198 -0
- package/lib/element/procedure/anonymous.js +181 -0
- package/lib/element/procedure.js +212 -0
- package/lib/element/procedureCall.js +166 -0
- package/lib/element/query/node.js +186 -0
- package/lib/element/query/nodes.js +179 -0
- package/lib/element/reduce.js +181 -0
- package/lib/element/reference.js +138 -0
- package/lib/element/some.js +179 -0
- package/lib/element/statement/return.js +138 -0
- package/lib/element/step.js +154 -0
- package/lib/element/ternary.js +171 -0
- package/lib/element/variable.js +279 -0
- package/lib/elements.js +27 -0
- package/lib/index.js +13 -5
- package/lib/log.js +202 -0
- package/lib/preamble.js +32 -32
- package/lib/process/verify.js +289 -0
- package/lib/utilities/context.js +46 -5
- package/lib/utilities/element.js +3 -0
- package/lib/utilities/node.js +71 -0
- package/package.json +3 -1
- package/src/constants.js +16 -0
- package/src/context/block.js +10 -0
- package/src/context/file.js +97 -55
- package/src/{dom → element}/assignment/array.js +6 -6
- package/src/{dom → element}/assignment/object.js +8 -8
- package/src/{dom → element}/assignment/variable.js +4 -4
- package/src/{dom → element}/assignments/variable.js +5 -5
- package/src/{dom → element}/block/return.js +5 -5
- package/src/{dom → element}/comparison.js +5 -5
- package/src/{dom → element}/declaration/procedure.js +22 -4
- package/src/{dom → element}/error.js +13 -4
- package/src/{dom → element}/every.js +6 -6
- package/src/{dom → element}/expression/bitwise.js +5 -5
- package/src/{dom → element}/expression/bracketed.js +4 -4
- package/src/{dom → element}/expression/negated.js +5 -5
- package/src/{dom → element}/expression.js +4 -4
- package/src/{dom → element}/expressions.js +6 -6
- package/src/{dom → element}/label.js +4 -4
- package/src/{dom → element}/parameter/named.js +4 -4
- package/src/{dom → element}/parameter.js +4 -4
- package/src/{dom → element}/parameters/named.js +5 -5
- package/src/{dom → element}/parameters.js +5 -5
- package/src/{dom → element}/procedure/anonymous.js +4 -4
- package/src/{dom → element}/procedure.js +5 -5
- package/src/{dom → element}/procedureCall.js +4 -4
- package/src/{dom → element}/query/node.js +5 -5
- package/src/{dom → element}/query/nodes.js +5 -5
- package/src/{dom → element}/reduce.js +5 -5
- package/src/{dom → element}/reference.js +4 -4
- package/src/{dom → element}/some.js +6 -6
- package/src/{dom → element}/statement/return.js +4 -4
- package/src/{dom → element}/step.js +4 -4
- package/src/{dom → element}/ternary.js +4 -4
- package/src/{dom → element}/variable.js +5 -5
- package/src/elements.js +13 -0
- package/src/index.js +6 -2
- package/src/log.js +139 -0
- package/src/preamble.js +31 -31
- package/src/process/verify.js +157 -0
- package/src/utilities/context.js +45 -2
- package/src/utilities/element.js +0 -0
- package/src/utilities/{string.js → node.js} +9 -14
- package/test/Free and bound variables.ftl +112 -0
- package/test/context/file.js +127 -0
- package/{src/example → test}/context/release.js +60 -12
- package/test/helpers/constants.js +17 -0
- package/{src/example/utilities → test/helpers}/expressions.js +8 -4
- package/{src/example/utilities → test/helpers}/furtle.js +8 -4
- package/{src/example/utilities → test/helpers}/grammar.js +8 -4
- package/{src/example/utilities → test/helpers}/nominal.js +10 -5
- package/{src/example/utilities → test/helpers}/procedure.js +6 -2
- package/test/main.js +55 -0
- package/example/Free and bound variables.ftl +0 -75
- package/lib/dom/assignment/array.js +0 -186
- package/lib/dom/assignment/object.js +0 -244
- package/lib/dom/assignment/variable.js +0 -144
- package/lib/dom/assignments/variable.js +0 -158
- package/lib/dom/block/return.js +0 -198
- package/lib/dom/comparison.js +0 -179
- package/lib/dom/declaration/procedure.js +0 -125
- package/lib/dom/every.js +0 -179
- package/lib/dom/expression/bitwise.js +0 -186
- package/lib/dom/expression/bracketed.js +0 -149
- package/lib/dom/expression/negated.js +0 -166
- package/lib/dom/expression.js +0 -578
- package/lib/dom/expressions.js +0 -210
- package/lib/dom/parameter/named.js +0 -198
- package/lib/dom/parameter.js +0 -165
- package/lib/dom/parameters/named.js +0 -220
- package/lib/dom/parameters.js +0 -198
- package/lib/dom/procedure/anonymous.js +0 -181
- package/lib/dom/procedure.js +0 -212
- package/lib/dom/procedureCall.js +0 -166
- package/lib/dom/query/node.js +0 -186
- package/lib/dom/query/nodes.js +0 -179
- package/lib/dom/reduce.js +0 -181
- package/lib/dom/reference.js +0 -138
- package/lib/dom/some.js +0 -179
- package/lib/dom/statement/return.js +0 -138
- package/lib/dom/step.js +0 -154
- package/lib/dom/ternary.js +0 -171
- package/lib/dom/variable.js +0 -279
- package/lib/dom.js +0 -27
- package/lib/example/context/file.js +0 -130
- package/lib/example/context/release.js +0 -160
- package/lib/example/utilities/expressions.js +0 -29
- package/lib/example/utilities/furtle.js +0 -19
- package/lib/example/utilities/grammar.js +0 -26
- package/lib/example/utilities/nominal.js +0 -25
- package/lib/example/utilities/procedure.js +0 -18
- package/lib/utilities/string.js +0 -78
- package/src/dom.js +0 -13
- package/src/example/context/file.js +0 -69
- /package/{example → test}/customGrammars.json +0 -0
|
@@ -1,166 +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 _dom = /*#__PURE__*/ _interop_require_wildcard(require("../../dom"));
|
|
12
|
-
var _exception = /*#__PURE__*/ _interop_require_default(require("../../exception"));
|
|
13
|
-
var _query = require("../../utilities/query");
|
|
14
|
-
var _types = require("../../types");
|
|
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 _NegatedExpression;
|
|
94
|
-
var expressionNodeQuery = (0, _query.nodeQuery)("/negatedExpression/expression"), expressionNegatedExpressionNodeQuery = (0, _query.nodeQuery)("/expression/negatedExpression");
|
|
95
|
-
var _default = (0, _dom.domAssigned)((_NegatedExpression = /*#__PURE__*/ function() {
|
|
96
|
-
function NegatedExpression(string, type, expression) {
|
|
97
|
-
_class_call_check(this, NegatedExpression);
|
|
98
|
-
this.string = string;
|
|
99
|
-
this.type = type;
|
|
100
|
-
this.expression = expression;
|
|
101
|
-
}
|
|
102
|
-
_create_class(NegatedExpression, [
|
|
103
|
-
{
|
|
104
|
-
key: "getString",
|
|
105
|
-
value: function getString() {
|
|
106
|
-
return this.string;
|
|
107
|
-
}
|
|
108
|
-
},
|
|
109
|
-
{
|
|
110
|
-
key: "getType",
|
|
111
|
-
value: function getType() {
|
|
112
|
-
return this.type;
|
|
113
|
-
}
|
|
114
|
-
},
|
|
115
|
-
{
|
|
116
|
-
key: "getExpression",
|
|
117
|
-
value: function getExpression() {
|
|
118
|
-
return this.expression;
|
|
119
|
-
}
|
|
120
|
-
},
|
|
121
|
-
{
|
|
122
|
-
key: "evaluate",
|
|
123
|
-
value: function evaluate(context) {
|
|
124
|
-
var expression;
|
|
125
|
-
var negatedExpressionString = this.string; ///
|
|
126
|
-
context.trace("Evaluating the '".concat(negatedExpressionString, "' negated expression..."));
|
|
127
|
-
expression = this.expression.evaluate(context);
|
|
128
|
-
var expressionType = expression.getType();
|
|
129
|
-
if (expressionType !== _types.BOOLEAN_TYPE) {
|
|
130
|
-
var expressionString = expression.asString(context), message = "The ".concat(expressionString, " left expression's type is '").concat(expressionType, "' when it should be of type '").concat(_types.BOOLEAN_TYPE, "'."), exception = _exception.default.fromMessage(message);
|
|
131
|
-
throw exception;
|
|
132
|
-
}
|
|
133
|
-
var boolean = expression.getBoolean();
|
|
134
|
-
boolean = !boolean;
|
|
135
|
-
var Expression = _dom.default.Expression;
|
|
136
|
-
expression = Expression.fromBoolean(boolean, context); ///
|
|
137
|
-
context.debug("...evaluated the '".concat(negatedExpressionString, "' negated expression."));
|
|
138
|
-
return expression;
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
], [
|
|
142
|
-
{
|
|
143
|
-
key: "fromExpressionNode",
|
|
144
|
-
value: function fromExpressionNode(expressionNode, context) {
|
|
145
|
-
var negatedExpression = null;
|
|
146
|
-
var expressionNegatedExpressionNode = expressionNegatedExpressionNodeQuery(expressionNode);
|
|
147
|
-
if (expressionNegatedExpressionNode !== null) {
|
|
148
|
-
var negatedExpressionNode = expressionNegatedExpressionNode; ///
|
|
149
|
-
negatedExpression = negatedExpressionFromNegatedExpressionNode(negatedExpressionNode, context);
|
|
150
|
-
}
|
|
151
|
-
return negatedExpression;
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
]);
|
|
155
|
-
return NegatedExpression;
|
|
156
|
-
}(), _define_property(_NegatedExpression, "name", "NegatedExpression"), _NegatedExpression));
|
|
157
|
-
function negatedExpressionFromNegatedExpressionNode(negatedExpressionNode, context) {
|
|
158
|
-
var Expression = _dom.default.Expression, NegatedExpression = _dom.default.NegatedExpression, expressionNode = expressionNodeQuery(negatedExpressionNode), expression = Expression.fromExpressionNode(expressionNode, context), type = _types.BOOLEAN_TYPE, string = stringFromExpression(expression, context), negatedExpression = new NegatedExpression(string, type, expression);
|
|
159
|
-
return negatedExpression;
|
|
160
|
-
}
|
|
161
|
-
function stringFromExpression(expression, context) {
|
|
162
|
-
var expressionString = expression.asString(context), string = "!".concat(expressionString);
|
|
163
|
-
return string;
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kb20vZXhwcmVzc2lvbi9uZWdhdGVkLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgZG9tIGZyb20gXCIuLi8uLi9kb21cIjtcbmltcG9ydCBFeGNlcHRpb24gZnJvbSBcIi4uLy4uL2V4Y2VwdGlvblwiO1xuXG5pbXBvcnQgeyBub2RlUXVlcnkgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL3F1ZXJ5XCI7XG5pbXBvcnQgeyBkb21Bc3NpZ25lZCB9IGZyb20gXCIuLi8uLi9kb21cIjtcbmltcG9ydCB7IEJPT0xFQU5fVFlQRSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG5jb25zdCBleHByZXNzaW9uTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL25lZ2F0ZWRFeHByZXNzaW9uL2V4cHJlc3Npb25cIiksXG4gICAgICBleHByZXNzaW9uTmVnYXRlZEV4cHJlc3Npb25Ob2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvZXhwcmVzc2lvbi9uZWdhdGVkRXhwcmVzc2lvblwiKTtcblxuZXhwb3J0IGRlZmF1bHQgZG9tQXNzaWduZWQoY2xhc3MgTmVnYXRlZEV4cHJlc3Npb24ge1xuICBjb25zdHJ1Y3RvcihzdHJpbmcsIHR5cGUsIGV4cHJlc3Npb24pIHtcbiAgICB0aGlzLnN0cmluZyA9IHN0cmluZztcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIHRoaXMuZXhwcmVzc2lvbiA9IGV4cHJlc3Npb247XG4gIH1cblxuICBnZXRTdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RyaW5nO1xuICB9XG5cbiAgZ2V0VHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy50eXBlO1xuICB9XG5cbiAgZ2V0RXhwcmVzc2lvbigpIHtcbiAgICByZXR1cm4gdGhpcy5leHByZXNzaW9uO1xuICB9XG5cbiAgZXZhbHVhdGUoY29udGV4dCkge1xuICAgIGxldCBleHByZXNzaW9uO1xuXG4gICAgY29uc3QgbmVnYXRlZEV4cHJlc3Npb25TdHJpbmcgPSB0aGlzLnN0cmluZzsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBFdmFsdWF0aW5nIHRoZSAnJHtuZWdhdGVkRXhwcmVzc2lvblN0cmluZ30nIG5lZ2F0ZWQgZXhwcmVzc2lvbi4uLmApO1xuXG4gICAgZXhwcmVzc2lvbiA9IHRoaXMuZXhwcmVzc2lvbi5ldmFsdWF0ZShjb250ZXh0KTtcblxuICAgIGNvbnN0IGV4cHJlc3Npb25UeXBlID0gZXhwcmVzc2lvbi5nZXRUeXBlKCk7XG5cbiAgICBpZiAoZXhwcmVzc2lvblR5cGUgIT09IEJPT0xFQU5fVFlQRSkge1xuICAgICAgY29uc3QgZXhwcmVzc2lvblN0cmluZyA9IGV4cHJlc3Npb24uYXNTdHJpbmcoY29udGV4dCksXG4gICAgICAgICAgICBtZXNzYWdlID0gYFRoZSAke2V4cHJlc3Npb25TdHJpbmd9IGxlZnQgZXhwcmVzc2lvbidzIHR5cGUgaXMgJyR7ZXhwcmVzc2lvblR5cGV9JyB3aGVuIGl0IHNob3VsZCBiZSBvZiB0eXBlICcke0JPT0xFQU5fVFlQRX0nLmAsXG4gICAgICAgICAgICBleGNlcHRpb24gPSBFeGNlcHRpb24uZnJvbU1lc3NhZ2UobWVzc2FnZSk7XG5cbiAgICAgIHRocm93IGV4Y2VwdGlvbjtcbiAgICB9XG5cbiAgICBsZXQgYm9vbGVhbiA9IGV4cHJlc3Npb24uZ2V0Qm9vbGVhbigpO1xuXG4gICAgYm9vbGVhbiA9ICFib29sZWFuO1xuXG4gICAgY29uc3QgeyBFeHByZXNzaW9uIH0gPSBkb207XG5cbiAgICBleHByZXNzaW9uID0gRXhwcmVzc2lvbi5mcm9tQm9vbGVhbihib29sZWFuLCBjb250ZXh0KTsgIC8vL1xuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uZXZhbHVhdGVkIHRoZSAnJHtuZWdhdGVkRXhwcmVzc2lvblN0cmluZ30nIG5lZ2F0ZWQgZXhwcmVzc2lvbi5gKTtcblxuICAgIHJldHVybiBleHByZXNzaW9uO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIk5lZ2F0ZWRFeHByZXNzaW9uXCI7XG5cbiAgc3RhdGljIGZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICAgIGxldCBuZWdhdGVkRXhwcmVzc2lvbiA9IG51bGw7XG5cbiAgICBjb25zdCBleHByZXNzaW9uTmVnYXRlZEV4cHJlc3Npb25Ob2RlID0gZXhwcmVzc2lvbk5lZ2F0ZWRFeHByZXNzaW9uTm9kZVF1ZXJ5KGV4cHJlc3Npb25Ob2RlKTtcblxuICAgIGlmIChleHByZXNzaW9uTmVnYXRlZEV4cHJlc3Npb25Ob2RlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBuZWdhdGVkRXhwcmVzc2lvbk5vZGUgPSBleHByZXNzaW9uTmVnYXRlZEV4cHJlc3Npb25Ob2RlOyAvLy9cblxuICAgICAgbmVnYXRlZEV4cHJlc3Npb24gPSBuZWdhdGVkRXhwcmVzc2lvbkZyb21OZWdhdGVkRXhwcmVzc2lvbk5vZGUobmVnYXRlZEV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmVnYXRlZEV4cHJlc3Npb247XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiBuZWdhdGVkRXhwcmVzc2lvbkZyb21OZWdhdGVkRXhwcmVzc2lvbk5vZGUobmVnYXRlZEV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRXhwcmVzc2lvbiwgTmVnYXRlZEV4cHJlc3Npb24gfSA9IGRvbSxcbiAgICAgICAgZXhwcmVzc2lvbk5vZGUgPSBleHByZXNzaW9uTm9kZVF1ZXJ5KG5lZ2F0ZWRFeHByZXNzaW9uTm9kZSksXG4gICAgICAgIGV4cHJlc3Npb24gPSBFeHByZXNzaW9uLmZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHR5cGUgPSBCT09MRUFOX1RZUEUsXG4gICAgICAgIHN0cmluZyA9IHN0cmluZ0Zyb21FeHByZXNzaW9uKGV4cHJlc3Npb24sIGNvbnRleHQpLFxuICAgICAgICBuZWdhdGVkRXhwcmVzc2lvbiA9IG5ldyBOZWdhdGVkRXhwcmVzc2lvbihzdHJpbmcsIHR5cGUsIGV4cHJlc3Npb24pO1xuXG4gIHJldHVybiBuZWdhdGVkRXhwcmVzc2lvbjtcbn1cblxuZnVuY3Rpb24gc3RyaW5nRnJvbUV4cHJlc3Npb24oZXhwcmVzc2lvbiwgY29udGV4dCkge1xuICBjb25zdCBleHByZXNzaW9uU3RyaW5nID0gZXhwcmVzc2lvbi5hc1N0cmluZyhjb250ZXh0KSxcbiAgICAgICAgc3RyaW5nID0gYCEke2V4cHJlc3Npb25TdHJpbmd9YDtcblxuICByZXR1cm4gc3RyaW5nO1xufVxuIl0sIm5hbWVzIjpbImV4cHJlc3Npb25Ob2RlUXVlcnkiLCJub2RlUXVlcnkiLCJleHByZXNzaW9uTmVnYXRlZEV4cHJlc3Npb25Ob2RlUXVlcnkiLCJkb21Bc3NpZ25lZCIsIk5lZ2F0ZWRFeHByZXNzaW9uIiwic3RyaW5nIiwidHlwZSIsImV4cHJlc3Npb24iLCJnZXRTdHJpbmciLCJnZXRUeXBlIiwiZ2V0RXhwcmVzc2lvbiIsImV2YWx1YXRlIiwiY29udGV4dCIsIm5lZ2F0ZWRFeHByZXNzaW9uU3RyaW5nIiwidHJhY2UiLCJleHByZXNzaW9uVHlwZSIsIkJPT0xFQU5fVFlQRSIsImV4cHJlc3Npb25TdHJpbmciLCJhc1N0cmluZyIsIm1lc3NhZ2UiLCJleGNlcHRpb24iLCJFeGNlcHRpb24iLCJmcm9tTWVzc2FnZSIsImJvb2xlYW4iLCJnZXRCb29sZWFuIiwiRXhwcmVzc2lvbiIsImRvbSIsImZyb21Cb29sZWFuIiwiZGVidWciLCJmcm9tRXhwcmVzc2lvbk5vZGUiLCJleHByZXNzaW9uTm9kZSIsIm5lZ2F0ZWRFeHByZXNzaW9uIiwiZXhwcmVzc2lvbk5lZ2F0ZWRFeHByZXNzaW9uTm9kZSIsIm5lZ2F0ZWRFeHByZXNzaW9uTm9kZSIsIm5lZ2F0ZWRFeHByZXNzaW9uRnJvbU5lZ2F0ZWRFeHByZXNzaW9uTm9kZSIsIm5hbWUiLCJzdHJpbmdGcm9tRXhwcmVzc2lvbiJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBWUE7OztlQUFB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
|