occam-languages 3.0.129 → 3.0.130
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.
|
@@ -8,19 +8,19 @@ Object.defineProperty(exports, "default", {
|
|
|
8
8
|
return _default;
|
|
9
9
|
}
|
|
10
10
|
});
|
|
11
|
-
const
|
|
11
|
+
const _occamparsers = require("occam-parsers");
|
|
12
12
|
const _node = /*#__PURE__*/ _interop_require_default(require("../../mixins/node"));
|
|
13
13
|
function _interop_require_default(obj) {
|
|
14
14
|
return obj && obj.__esModule ? obj : {
|
|
15
15
|
default: obj
|
|
16
16
|
};
|
|
17
17
|
}
|
|
18
|
-
class STatementNode extends
|
|
18
|
+
class STatementNode extends _occamparsers.NonTerminalNode {
|
|
19
19
|
static fromRuleNameChildNodesPrecedenceAndOpacity(ruleName, childNodes, precedence, opacity) {
|
|
20
|
-
return
|
|
20
|
+
return _occamparsers.NonTerminalNode.fromRuleNameChildNodesPrecedenceAndOpacity(STatementNode, ruleName, childNodes, precedence, opacity);
|
|
21
21
|
}
|
|
22
22
|
}
|
|
23
23
|
Object.assign(STatementNode.prototype, _node.default);
|
|
24
24
|
const _default = STatementNode;
|
|
25
25
|
|
|
26
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ub21pbmFsL25vZGUvc3RhdGVtZW50LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBOb25UZXJtaW5hbE5vZGUgfSBmcm9tIFwib2NjYW0tcGFyc2Vyc1wiO1xuXG5pbXBvcnQgbm9kZU1peGlucyBmcm9tIFwiLi4vLi4vbWl4aW5zL25vZGVcIjtcblxuY2xhc3MgU1RhdGVtZW50Tm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVDaGlsZE5vZGVzUHJlY2VkZW5jZUFuZE9wYWNpdHkocnVsZU5hbWUsIGNoaWxkTm9kZXMsIHByZWNlZGVuY2UsIG9wYWNpdHkpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVDaGlsZE5vZGVzUHJlY2VkZW5jZUFuZE9wYWNpdHkoU1RhdGVtZW50Tm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMsIHByZWNlZGVuY2UsIG9wYWNpdHkpOyB9XG59XG5cbk9iamVjdC5hc3NpZ24oU1RhdGVtZW50Tm9kZS5wcm90b3R5cGUsIG5vZGVNaXhpbnMpO1xuXG5leHBvcnQgZGVmYXVsdCBTVGF0ZW1lbnROb2RlO1xuIl0sIm5hbWVzIjpbIlNUYXRlbWVudE5vZGUiLCJOb25UZXJtaW5hbE5vZGUiLCJmcm9tUnVsZU5hbWVDaGlsZE5vZGVzUHJlY2VkZW5jZUFuZE9wYWNpdHkiLCJydWxlTmFtZSIsImNoaWxkTm9kZXMiLCJwcmVjZWRlbmNlIiwib3BhY2l0eSIsIk9iamVjdCIsImFzc2lnbiIsInByb3RvdHlwZSIsIm5vZGVNaXhpbnMiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQVlBOzs7ZUFBQTs7OzhCQVZnQzs2REFFVDs7Ozs7O0FBRXZCLE1BQU1BLHNCQUFzQkMsNkJBQWU7SUFDekMsT0FBT0MsMkNBQTJDQyxRQUFRLEVBQUVDLFVBQVUsRUFBRUMsVUFBVSxFQUFFQyxPQUFPLEVBQUU7UUFBRSxPQUFPTCw2QkFBZSxDQUFDQywwQ0FBMEMsQ0FBQ0YsZUFBZUcsVUFBVUMsWUFBWUMsWUFBWUM7SUFBVTtBQUM5TjtBQUVBQyxPQUFPQyxNQUFNLENBQUNSLGNBQWNTLFNBQVMsRUFBRUMsYUFBVTtNQUVqRCxXQUFlViJ9
|
package/lib/nominal/node/term.js
CHANGED
|
@@ -8,19 +8,19 @@ Object.defineProperty(exports, "default", {
|
|
|
8
8
|
return _default;
|
|
9
9
|
}
|
|
10
10
|
});
|
|
11
|
-
const
|
|
11
|
+
const _occamparsers = require("occam-parsers");
|
|
12
12
|
const _node = /*#__PURE__*/ _interop_require_default(require("../../mixins/node"));
|
|
13
13
|
function _interop_require_default(obj) {
|
|
14
14
|
return obj && obj.__esModule ? obj : {
|
|
15
15
|
default: obj
|
|
16
16
|
};
|
|
17
17
|
}
|
|
18
|
-
class TermNode extends
|
|
18
|
+
class TermNode extends _occamparsers.NonTerminalNode {
|
|
19
19
|
static fromRuleNameChildNodesPrecedenceAndOpacity(ruleName, childNodes, precedence, opacity) {
|
|
20
|
-
return
|
|
20
|
+
return _occamparsers.NonTerminalNode.fromRuleNameChildNodesPrecedenceAndOpacity(TermNode, ruleName, childNodes, precedence, opacity);
|
|
21
21
|
}
|
|
22
22
|
}
|
|
23
23
|
Object.assign(TermNode.prototype, _node.default);
|
|
24
24
|
const _default = TermNode;
|
|
25
25
|
|
|
26
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ub21pbmFsL25vZGUvdGVybS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgTm9uVGVybWluYWxOb2RlIH0gZnJvbSBcIm9jY2FtLXBhcnNlcnNcIjtcblxuaW1wb3J0IG5vZGVNaXhpbnMgZnJvbSBcIi4uLy4uL21peGlucy9ub2RlXCI7XG5cbmNsYXNzIFRlcm1Ob2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgc3RhdGljIGZyb21SdWxlTmFtZUNoaWxkTm9kZXNQcmVjZWRlbmNlQW5kT3BhY2l0eShydWxlTmFtZSwgY2hpbGROb2RlcywgcHJlY2VkZW5jZSwgb3BhY2l0eSkgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUNoaWxkTm9kZXNQcmVjZWRlbmNlQW5kT3BhY2l0eShUZXJtTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMsIHByZWNlZGVuY2UsIG9wYWNpdHkpOyB9XG59XG5cbk9iamVjdC5hc3NpZ24oVGVybU5vZGUucHJvdG90eXBlLCBub2RlTWl4aW5zKTtcblxuZXhwb3J0IGRlZmF1bHQgVGVybU5vZGU7XG4iXSwibmFtZXMiOlsiVGVybU5vZGUiLCJOb25UZXJtaW5hbE5vZGUiLCJmcm9tUnVsZU5hbWVDaGlsZE5vZGVzUHJlY2VkZW5jZUFuZE9wYWNpdHkiLCJydWxlTmFtZSIsImNoaWxkTm9kZXMiLCJwcmVjZWRlbmNlIiwib3BhY2l0eSIsIk9iamVjdCIsImFzc2lnbiIsInByb3RvdHlwZSIsIm5vZGVNaXhpbnMiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQVlBOzs7ZUFBQTs7OzhCQVZnQzs2REFFVDs7Ozs7O0FBRXZCLE1BQU1BLGlCQUFpQkMsNkJBQWU7SUFDcEMsT0FBT0MsMkNBQTJDQyxRQUFRLEVBQUVDLFVBQVUsRUFBRUMsVUFBVSxFQUFFQyxPQUFPLEVBQUU7UUFBRSxPQUFPTCw2QkFBZSxDQUFDQywwQ0FBMEMsQ0FBQ0YsVUFBVUcsVUFBVUMsWUFBWUMsWUFBWUM7SUFBVTtBQUN6TjtBQUVBQyxPQUFPQyxNQUFNLENBQUNSLFNBQVNTLFNBQVMsRUFBRUMsYUFBVTtNQUU1QyxXQUFlViJ9
|
|
@@ -145,7 +145,8 @@ function each(array, callback, ...initialArguments) {
|
|
|
145
145
|
}
|
|
146
146
|
const element = array[index];
|
|
147
147
|
return callback(element, ...nextArguments, (...forwardArguments)=>{
|
|
148
|
-
|
|
148
|
+
const back = forwardArguments.pop();
|
|
149
|
+
return next(index + 1, count + 1, ...forwardArguments, back);
|
|
149
150
|
}, back, index);
|
|
150
151
|
}
|
|
151
152
|
const index = 0, count = 0;
|
|
@@ -160,7 +161,8 @@ function every(array, callback, ...initialArguments) {
|
|
|
160
161
|
}
|
|
161
162
|
const element = array[index];
|
|
162
163
|
return callback(element, ...nextArguments, (...forwardArguments)=>{
|
|
163
|
-
|
|
164
|
+
const back = forwardArguments.pop();
|
|
165
|
+
return next(index + 1, ...forwardArguments, back);
|
|
164
166
|
}, back, index);
|
|
165
167
|
}
|
|
166
168
|
const index = 0;
|
|
@@ -175,10 +177,11 @@ function map(array, callback, ...initialArguments) {
|
|
|
175
177
|
}
|
|
176
178
|
const elementA = arrayA[index];
|
|
177
179
|
return callback(elementA, ...nextArguments, (elementB, ...forwardArguments)=>{
|
|
180
|
+
const back = forwardArguments.pop();
|
|
178
181
|
return next(index + 1, [
|
|
179
182
|
...arrayB,
|
|
180
183
|
elementB
|
|
181
|
-
], ...forwardArguments);
|
|
184
|
+
], ...forwardArguments, back);
|
|
182
185
|
}, back, index);
|
|
183
186
|
}
|
|
184
187
|
const index = 0, arrayB = [];
|
|
@@ -193,7 +196,8 @@ function reduce(array, initialValue, callback, ...initialArguments) {
|
|
|
193
196
|
}
|
|
194
197
|
const element = array[index];
|
|
195
198
|
return callback(element, value, ...nextArguments, (value, ...forwardArguments)=>{
|
|
196
|
-
|
|
199
|
+
const back = forwardArguments.pop();
|
|
200
|
+
return next(index + 1, value, ...forwardArguments, back);
|
|
197
201
|
}, back, index);
|
|
198
202
|
}
|
|
199
203
|
const index = 0;
|
|
@@ -208,7 +212,8 @@ function forEach(array, callback, ...initialArguments) {
|
|
|
208
212
|
}
|
|
209
213
|
const element = array[index];
|
|
210
214
|
return callback(element, ...nextArguments, (...forwardArguments)=>{
|
|
211
|
-
|
|
215
|
+
const back = forwardArguments.pop();
|
|
216
|
+
return next(index + 1, ...forwardArguments, back);
|
|
212
217
|
}, back, index);
|
|
213
218
|
}
|
|
214
219
|
const index = 0;
|
|
@@ -223,7 +228,8 @@ function filter(array, callback, ...initialArguments) {
|
|
|
223
228
|
}
|
|
224
229
|
const element = array[index];
|
|
225
230
|
return callback(element, ...nextArguments, (...forwardArguments)=>{
|
|
226
|
-
|
|
231
|
+
const back = forwardArguments.pop();
|
|
232
|
+
return next(index - 1, array, deletedElements, ...forwardArguments, back);
|
|
227
233
|
}, (exception)=>{
|
|
228
234
|
if (exception) {
|
|
229
235
|
return back(exception);
|
|
@@ -250,10 +256,11 @@ function find(array, callback, ...initialArguments) {
|
|
|
250
256
|
}
|
|
251
257
|
const element = array[index];
|
|
252
258
|
return callback(element, ...nextArguments, (...forwardArguments)=>{
|
|
259
|
+
const back = forwardArguments.pop();
|
|
253
260
|
return next(index + 1, [
|
|
254
261
|
...elements,
|
|
255
262
|
element
|
|
256
|
-
], ...forwardArguments);
|
|
263
|
+
], ...forwardArguments, back);
|
|
257
264
|
}, (exception)=>{
|
|
258
265
|
if (exception) {
|
|
259
266
|
return back(exception);
|
|
@@ -273,7 +280,8 @@ function prune(array, callback, ...initialArguments) {
|
|
|
273
280
|
}
|
|
274
281
|
const element = array[index];
|
|
275
282
|
return callback(element, ...nextArguments, (...forwardArguments)=>{
|
|
276
|
-
|
|
283
|
+
const back = forwardArguments.pop();
|
|
284
|
+
return next(index + 1, array, ...forwardArguments, back);
|
|
277
285
|
}, (exception)=>{
|
|
278
286
|
if (exception) {
|
|
279
287
|
return back(exception);
|
|
@@ -346,7 +354,8 @@ function match(arrayA, arrayB, callback, ...initialArguments) {
|
|
|
346
354
|
}
|
|
347
355
|
const elementA = arrayA[index], elementB = arrayB[index];
|
|
348
356
|
return callback(elementA, elementB, ...nextArguments, (...forwardArguments)=>{
|
|
349
|
-
|
|
357
|
+
const back = forwardArguments.pop();
|
|
358
|
+
return next(index + 1, ...forwardArguments, back);
|
|
350
359
|
}, back, index);
|
|
351
360
|
}
|
|
352
361
|
const index = 0;
|
|
@@ -361,7 +370,8 @@ function forwardsEvery(array, callback, ...initialArguments) {
|
|
|
361
370
|
}
|
|
362
371
|
const element = array[index];
|
|
363
372
|
return callback(element, ...nextArguments, (...forwardArguments)=>{
|
|
364
|
-
|
|
373
|
+
const back = forwardArguments.pop();
|
|
374
|
+
return next(index + 1, ...forwardArguments, back);
|
|
365
375
|
}, back, index);
|
|
366
376
|
}
|
|
367
377
|
const index = 0;
|
|
@@ -376,7 +386,8 @@ function backwardsEvery(array, callback, ...initialArguments) {
|
|
|
376
386
|
}
|
|
377
387
|
const element = array[index];
|
|
378
388
|
return callback(element, ...nextArguments, (...forwardArguments)=>{
|
|
379
|
-
|
|
389
|
+
const back = forwardArguments.pop();
|
|
390
|
+
return next(index - 1, ...forwardArguments, back);
|
|
380
391
|
}, back, index);
|
|
381
392
|
}
|
|
382
393
|
const index = length - 1;
|
|
@@ -391,7 +402,8 @@ function forwardsForEach(array, callback, ...initialArguments) {
|
|
|
391
402
|
}
|
|
392
403
|
const element = array[index];
|
|
393
404
|
return callback(element, ...nextArguments, (...forwardArguments)=>{
|
|
394
|
-
|
|
405
|
+
const back = forwardArguments.pop();
|
|
406
|
+
return next(index + 1, ...forwardArguments, back);
|
|
395
407
|
}, back, index);
|
|
396
408
|
}
|
|
397
409
|
const index = 0;
|
|
@@ -406,7 +418,8 @@ function backwardsForEach(array, callback, ...initialArguments) {
|
|
|
406
418
|
}
|
|
407
419
|
const element = array[index];
|
|
408
420
|
return callback(element, ...nextArguments, (...forwardArguments)=>{
|
|
409
|
-
|
|
421
|
+
const back = forwardArguments.pop();
|
|
422
|
+
return next(index - 1, ...forwardArguments, back);
|
|
410
423
|
}, back, index);
|
|
411
424
|
}
|
|
412
425
|
const index = length - 1;
|
|
@@ -446,4 +459,4 @@ const _default = {
|
|
|
446
459
|
exists
|
|
447
460
|
};
|
|
448
461
|
|
|
449
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvY29udGludWF0aW9uLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gY3V0KC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgYmFjayA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGZvcndhcmQgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpO1xuXG4gIHJldHVybiAoLi4uZm9yd2FyZEFyZ3VtZW50cykgPT4ge1xuICAgIGZvcndhcmRBcmd1bWVudHMucG9wKCk7IC8vL1xuXG4gICAgcmV0dXJuIGZvcndhcmQoLi4uZm9yd2FyZEFyZ3VtZW50cywgYmFjayk7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc29sYXRlKGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKTtcblxuICByZXR1cm4gY2FsbGJhY2soLi4uaW5pdGlhbEFyZ3VtZW50cywgKC4uLmNhbGxiYWNrQXJndW1lbnRzKSA9PiB7XG4gICAgY29uc3QgYmFjayA9IGNhbGxiYWNrQXJndW1lbnRzLnBvcCgpO1xuXG4gICAgcmV0dXJuIGZvcndhcmQoLi4uaW5pdGlhbEFyZ3VtZW50cywgYmFjayk7XG4gIH0sIGJhY2spO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb25lKGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBiYWNrID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgZm9yd2FyZCA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCBjb3VudCwgLi4ubmV4dEFyZ3VtZW50cykge1xuICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICBpZiAoY291bnQgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGJhY2soKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZvcndhcmQoLi4ubmV4dEFyZ3VtZW50cywgYmFjayk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhcbiAgICAgIGVsZW1lbnQsXG4gICAgICAuLi5pbml0aWFsQXJndW1lbnRzLFxuICAgICAgKC4uLmZvcndhcmRBcmd1bWVudHMpID0+IHtcbiAgICAgICAgaWYgKGNvdW50ID09PSAxKSB7XG4gICAgICAgICAgcmV0dXJuIGJhY2soKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvcndhcmRBcmd1bWVudHMucG9wKCk7IC8vL1xuXG4gICAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgY291bnQgKyAxLCAuLi5mb3J3YXJkQXJndW1lbnRzKTtcbiAgICAgIH0sXG4gICAgICAoZXhjZXB0aW9uKSA9PiB7XG4gICAgICAgIGlmIChleGNlcHRpb24pIHtcbiAgICAgICAgICByZXR1cm4gYmFjayhleGNlcHRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5leHQoaW5kZXggKyAxLCBjb3VudCwgLi4ubmV4dEFyZ3VtZW50cyk7XG4gICAgICB9LFxuICAgICAgaW5kZXhcbiAgICApO1xuICB9XG5cbiAgY29uc3QgaW5kZXggPSAwLFxuICAgICAgICBjb3VudCA9IDA7XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIGNvdW50KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNvbWUoYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgpIHtcbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgcmV0dXJuIGJhY2soKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKFxuICAgICAgZWxlbWVudCxcbiAgICAgIC4uLmluaXRpYWxBcmd1bWVudHMsXG4gICAgICBmb3J3YXJkLFxuICAgICAgKGV4Y2VwdGlvbikgPT4ge1xuICAgICAgICBpZiAoZXhjZXB0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIGJhY2soZXhjZXB0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSk7XG4gICAgICB9LFxuICAgICAgaW5kZXhcbiAgICApO1xuICB9XG5cbiAgY29uc3QgaW5kZXggPSAwO1xuXG4gIHJldHVybiBuZXh0KGluZGV4KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVhY2goYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIGNvdW50LCAuLi5uZXh0QXJndW1lbnRzKSB7XG4gICAgY29uc3QgYmFjayA9IG5leHRBcmd1bWVudHMucG9wKCk7XG5cbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgaWYgKGNvdW50ID09PSAwKSB7XG4gICAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKC4uLm5leHRBcmd1bWVudHMsIGJhY2spO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soXG4gICAgICBlbGVtZW50LFxuICAgICAgLi4ubmV4dEFyZ3VtZW50cyxcbiAgICAgICguLi5mb3J3YXJkQXJndW1lbnRzKSA9PiB7XG4gICAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgY291bnQgKyAxLCAuLi5mb3J3YXJkQXJndW1lbnRzKTtcbiAgICAgIH0sXG4gICAgICBiYWNrLFxuICAgICAgaW5kZXhcbiAgICApO1xuICB9XG5cbiAgY29uc3QgaW5kZXggPSAwLFxuICAgICAgICBjb3VudCA9IDA7XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIGNvdW50LCAuLi5pbml0aWFsQXJndW1lbnRzLCBiYWNrKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV2ZXJ5KGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBiYWNrID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgZm9yd2FyZCA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCAuLi5uZXh0QXJndW1lbnRzKSB7XG4gICAgY29uc3QgYmFjayA9IG5leHRBcmd1bWVudHMucG9wKCk7XG5cbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZvcndhcmQoLi4ubmV4dEFyZ3VtZW50cywgYmFjayk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhcbiAgICAgIGVsZW1lbnQsXG4gICAgICAuLi5uZXh0QXJndW1lbnRzLFxuICAgICAgKC4uLmZvcndhcmRBcmd1bWVudHMpID0+IHtcbiAgICAgICAgcmV0dXJuIG5leHQoaW5kZXggKyAxLCAuLi5mb3J3YXJkQXJndW1lbnRzKTtcbiAgICAgIH0sXG4gICAgICBiYWNrLFxuICAgICAgaW5kZXhcbiAgICApO1xuICB9XG5cbiAgY29uc3QgaW5kZXggPSAwO1xuXG4gIHJldHVybiBuZXh0KGluZGV4LCAuLi5pbml0aWFsQXJndW1lbnRzLCBiYWNrKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hcChhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgYmFjayA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGZvcndhcmQgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBhcnJheUEgPSBhcnJheSwgLy8vXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCBhcnJheUIsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBjb25zdCBiYWNrID0gbmV4dEFyZ3VtZW50cy5wb3AoKTtcblxuICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZChhcnJheUIsIC4uLm5leHRBcmd1bWVudHMsIGJhY2spO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnRBID0gYXJyYXlBW2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhcbiAgICAgIGVsZW1lbnRBLFxuICAgICAgLi4ubmV4dEFyZ3VtZW50cyxcbiAgICAgIChlbGVtZW50QiwgLi4uZm9yd2FyZEFyZ3VtZW50cykgPT4ge1xuICAgICAgICByZXR1cm4gbmV4dChpbmRleCArIDEsIFsgLi4uYXJyYXlCLCBlbGVtZW50QiBdLCAuLi5mb3J3YXJkQXJndW1lbnRzKTtcbiAgICAgIH0sXG4gICAgICBiYWNrLFxuICAgICAgaW5kZXhcbiAgICApO1xuICB9XG5cbiAgY29uc3QgaW5kZXggPSAwLFxuICAgICAgICBhcnJheUIgPSBbXTtcblxuICByZXR1cm4gbmV4dChpbmRleCwgYXJyYXlCLCAuLi5pbml0aWFsQXJndW1lbnRzLCBiYWNrKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZHVjZShhcnJheSwgaW5pdGlhbFZhbHVlLCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBiYWNrID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgZm9yd2FyZCA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCB2YWx1ZSwgLi4ubmV4dEFyZ3VtZW50cykge1xuICAgIGNvbnN0IGJhY2sgPSBuZXh0QXJndW1lbnRzLnBvcCgpO1xuXG4gICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgIHJldHVybiBmb3J3YXJkKHZhbHVlLCAuLi5uZXh0QXJndW1lbnRzLCBiYWNrKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKFxuICAgICAgZWxlbWVudCxcbiAgICAgIHZhbHVlLFxuICAgICAgLi4ubmV4dEFyZ3VtZW50cyxcbiAgICAgICh2YWx1ZSwgLi4uZm9yd2FyZEFyZ3VtZW50cykgPT4ge1xuICAgICAgICByZXR1cm4gbmV4dChpbmRleCArIDEsIHZhbHVlLCAuLi5mb3J3YXJkQXJndW1lbnRzKTtcbiAgICAgIH0sXG4gICAgICBiYWNrLFxuICAgICAgaW5kZXhcbiAgICApO1xuICB9XG5cbiAgY29uc3QgaW5kZXggPSAwO1xuXG4gIHJldHVybiBuZXh0KGluZGV4LCBpbml0aWFsVmFsdWUsIC4uLmluaXRpYWxBcmd1bWVudHMsIGJhY2spO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yRWFjaChhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgYmFjayA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGZvcndhcmQgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZnVuY3Rpb24gbmV4dChpbmRleCwgLi4ubmV4dEFyZ3VtZW50cykge1xuICAgIGNvbnN0IGJhY2sgPSBuZXh0QXJndW1lbnRzLnBvcCgpO1xuXG4gICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgIHJldHVybiBmb3J3YXJkKC4uLm5leHRBcmd1bWVudHMsIGJhY2spO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soXG4gICAgICBlbGVtZW50LFxuICAgICAgLi4ubmV4dEFyZ3VtZW50cyxcbiAgICAgICguLi5mb3J3YXJkQXJndW1lbnRzKSA9PiB7XG4gICAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgLi4uZm9yd2FyZEFyZ3VtZW50cyk7XG4gICAgICB9LFxuICAgICAgYmFjayxcbiAgICAgIGluZGV4XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ID0gMDtcblxuICByZXR1cm4gbmV4dChpbmRleCwgLi4uaW5pdGlhbEFyZ3VtZW50cywgYmFjayk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXIoYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIGFycmF5LCBkZWxldGVkRWxlbWVudHMsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBjb25zdCBiYWNrID0gbmV4dEFyZ3VtZW50cy5wb3AoKTtcblxuICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgIHJldHVybiBmb3J3YXJkKGFycmF5LCBkZWxldGVkRWxlbWVudHMsIC4uLm5leHRBcmd1bWVudHMsIGJhY2spO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soXG4gICAgICBlbGVtZW50LFxuICAgICAgLi4ubmV4dEFyZ3VtZW50cyxcbiAgICAgICguLi5mb3J3YXJkQXJndW1lbnRzKSA9PiB7XG4gICAgICAgIHJldHVybiBuZXh0KGluZGV4IC0gMSwgYXJyYXksIGRlbGV0ZWRFbGVtZW50cywgLi4uZm9yd2FyZEFyZ3VtZW50cyk7XG4gICAgICB9LFxuICAgICAgKGV4Y2VwdGlvbikgPT4ge1xuICAgICAgICBpZiAoZXhjZXB0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIGJhY2soZXhjZXB0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRlbGV0ZWRFbGVtZW50ID0gZWxlbWVudDsgLy8vXG5cbiAgICAgICAgcmV0dXJuIG5leHQoXG4gICAgICAgICAgaW5kZXggLSAxLFxuICAgICAgICAgIFsgLi4uYXJyYXkuc2xpY2UoMCwgaW5kZXgpLCAuLi5hcnJheS5zbGljZShpbmRleCArIDEpIF0sXG4gICAgICAgICAgWyBkZWxldGVkRWxlbWVudCwgLi4uZGVsZXRlZEVsZW1lbnRzIF0sXG4gICAgICAgICAgLi4ubmV4dEFyZ3VtZW50cyxcbiAgICAgICAgICBiYWNrXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgaW5kZXhcbiAgICApO1xuICB9XG5cbiAgY29uc3QgaW5kZXggPSBsZW5ndGggLSAxLFxuICAgICAgICBkZWxldGVkRWxlbWVudHMgPSBbXTtcblxuICByZXR1cm4gbmV4dChpbmRleCwgYXJyYXksIGRlbGV0ZWRFbGVtZW50cywgLi4uaW5pdGlhbEFyZ3VtZW50cywgYmFjayk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kKGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBiYWNrID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgZm9yd2FyZCA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCBlbGVtZW50cywgLi4ubmV4dEFyZ3VtZW50cykge1xuICAgIGNvbnN0IGJhY2sgPSBuZXh0QXJndW1lbnRzLnBvcCgpO1xuXG4gICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgIHJldHVybiBmb3J3YXJkKGVsZW1lbnRzLCAuLi5uZXh0QXJndW1lbnRzLCBiYWNrKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKFxuICAgICAgZWxlbWVudCxcbiAgICAgIC4uLm5leHRBcmd1bWVudHMsXG4gICAgICAoLi4uZm9yd2FyZEFyZ3VtZW50cykgPT4ge1xuICAgICAgICByZXR1cm4gbmV4dChpbmRleCArIDEsIFsgLi4uZWxlbWVudHMsIGVsZW1lbnQgXSwgLi4uZm9yd2FyZEFyZ3VtZW50cyk7XG4gICAgICB9LFxuICAgICAgKGV4Y2VwdGlvbikgPT4ge1xuICAgICAgICBpZiAoZXhjZXB0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIGJhY2soZXhjZXB0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgZWxlbWVudHMsIC4uLm5leHRBcmd1bWVudHMsIGJhY2spO1xuICAgICAgfSxcbiAgICAgIGluZGV4XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ID0gMCxcbiAgICAgICAgZWxlbWVudHMgPSBbXTtcblxuICByZXR1cm4gbmV4dChpbmRleCwgZWxlbWVudHMsIC4uLmluaXRpYWxBcmd1bWVudHMsIGJhY2spO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJ1bmUoYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIGFycmF5LCAuLi5uZXh0QXJndW1lbnRzKSB7XG4gICAgY29uc3QgYmFjayA9IG5leHRBcmd1bWVudHMucG9wKCk7XG5cbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgcmV0dXJuIGJhY2soKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKFxuICAgICAgZWxlbWVudCxcbiAgICAgIC4uLm5leHRBcmd1bWVudHMsXG4gICAgICAoLi4uZm9yd2FyZEFyZ3VtZW50cykgPT4ge1xuICAgICAgICByZXR1cm4gbmV4dChpbmRleCArIDEsIGFycmF5LCAuLi5mb3J3YXJkQXJndW1lbnRzKTtcbiAgICAgIH0sXG4gICAgICAoZXhjZXB0aW9uKSA9PiB7XG4gICAgICAgIGlmIChleGNlcHRpb24pIHtcbiAgICAgICAgICByZXR1cm4gYmFjayhleGNlcHRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGVsZXRlZEVsZW1lbnQgPSBlbGVtZW50OyAvLy9cblxuICAgICAgICByZXR1cm4gZm9yd2FyZChcbiAgICAgICAgICBbIC4uLmFycmF5LnNsaWNlKDAsIGluZGV4KSwgLi4uYXJyYXkuc2xpY2UoaW5kZXggKyAxKSBdLFxuICAgICAgICAgIGRlbGV0ZWRFbGVtZW50LFxuICAgICAgICAgIC4uLm5leHRBcmd1bWVudHMsXG4gICAgICAgICAgYmFja1xuICAgICAgICApO1xuICAgICAgfSxcbiAgICAgIGluZGV4XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ID0gMDtcblxuICByZXR1cm4gbmV4dChpbmRleCwgYXJyYXksIC4uLmluaXRpYWxBcmd1bWVudHMsIGJhY2spO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdChhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgYmFjayA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGZvcndhcmQgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZnVuY3Rpb24gbmV4dChpbmRleCwgYXJyYXksIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBjb25zdCBiYWNrID0gbmV4dEFyZ3VtZW50cy5wb3AoKTtcblxuICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICByZXR1cm4gYmFjaygpO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soXG4gICAgICBlbGVtZW50LFxuICAgICAgLi4ubmV4dEFyZ3VtZW50cyxcbiAgICAgICguLi5mb3J3YXJkQXJndW1lbnRzKSA9PiB7XG4gICAgICAgIGNvbnN0IGRlbGV0ZWRFbGVtZW50ID0gZWxlbWVudDsgLy8vXG5cbiAgICAgICAgcmV0dXJuIGZvcndhcmQoXG4gICAgICAgICAgWyAuLi5hcnJheS5zbGljZSgwLCBpbmRleCksIC4uLmFycmF5LnNsaWNlKGluZGV4ICsgMSkgXSxcbiAgICAgICAgICBkZWxldGVkRWxlbWVudCxcbiAgICAgICAgICAuLi5mb3J3YXJkQXJndW1lbnRzXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgKGV4Y2VwdGlvbikgPT4ge1xuICAgICAgICBpZiAoZXhjZXB0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIGJhY2soZXhjZXB0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgYXJyYXksIC4uLm5leHRBcmd1bWVudHMsIGJhY2spO1xuICAgICAgfSxcbiAgICAgIGluZGV4XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ID0gMDtcblxuICByZXR1cm4gbmV4dChpbmRleCwgYXJyYXksIC4uLmluaXRpYWxBcmd1bWVudHMsIGJhY2spO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZShhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgYmFjayA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGZvcndhcmQgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpO1xuXG4gIGZ1bmN0aW9uIG5leHQoYXJyYXlBLCBhcnJheUIsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBjb25zdCBsZW5ndGggPSBhcnJheUEubGVuZ3RoO1xuXG4gICAgaWYgKGxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGZvcndhcmQoYXJyYXlCLCAuLi5uZXh0QXJndW1lbnRzLCBiYWNrKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmluZChcbiAgICAgIGFycmF5QSxcbiAgICAgIGNhbGxiYWNrLFxuICAgICAgLi4ubmV4dEFyZ3VtZW50cyxcbiAgICAgIChlbGVtZW50cywgLi4uZm9yd2FyZEFyZ3VtZW50cykgPT4ge1xuICAgICAgICBjb25zdCBlbGVtZW50c0xlbmd0aCA9IGVsZW1lbnRzLmxlbmd0aDtcblxuICAgICAgICBpZiAoZWxlbWVudHNMZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gYmFjaygpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yd2FyZEFyZ3VtZW50cy5wb3AoKTsgLy8vXG5cbiAgICAgICAgcmV0dXJuIG5leHQoXG4gICAgICAgICAgYXJyYXlBLmZpbHRlcigoZWxlbWVudCkgPT4gIWVsZW1lbnRzLmluY2x1ZGVzKGVsZW1lbnQpKSxcbiAgICAgICAgICBbIC4uLmFycmF5QiwgLi4uZWxlbWVudHMgXSxcbiAgICAgICAgICAuLi5mb3J3YXJkQXJndW1lbnRzXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgYmFja1xuICAgICk7XG4gIH1cblxuICBjb25zdCBhcnJheUEgPSBhcnJheSwgLy8vXG4gICAgICAgIGFycmF5QiA9IFtdO1xuXG4gIHJldHVybiBuZXh0KGFycmF5QSwgYXJyYXlCLCAuLi5pbml0aWFsQXJndW1lbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoKGFycmF5QSwgYXJyYXlCLCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBiYWNrID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgZm9yd2FyZCA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGFycmF5QUxlbmd0aCA9IGFycmF5QS5sZW5ndGgsXG4gICAgICAgIGFycmF5Qkxlbmd0aCA9IGFycmF5Qi5sZW5ndGgsXG4gICAgICAgIGxlbmd0aCA9IGFycmF5QUxlbmd0aDsgIC8vL1xuXG4gIGlmIChhcnJheUFMZW5ndGggIT09IGFycmF5Qkxlbmd0aCkge1xuICAgIHJldHVybiBiYWNrKCk7XG4gIH1cblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCAuLi5uZXh0QXJndW1lbnRzKSB7XG4gICAgY29uc3QgYmFjayA9IG5leHRBcmd1bWVudHMucG9wKCk7XG5cbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZvcndhcmQoLi4ubmV4dEFyZ3VtZW50cywgYmFjayk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudEEgPSBhcnJheUFbaW5kZXhdLFxuICAgICAgICAgIGVsZW1lbnRCID0gYXJyYXlCW2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhcbiAgICAgIGVsZW1lbnRBLFxuICAgICAgZWxlbWVudEIsXG4gICAgICAuLi5uZXh0QXJndW1lbnRzLFxuICAgICAgKC4uLmZvcndhcmRBcmd1bWVudHMpID0+IHtcbiAgICAgICAgcmV0dXJuIG5leHQoaW5kZXggKyAxLCAuLi5mb3J3YXJkQXJndW1lbnRzKTtcbiAgICAgIH0sXG4gICAgICBiYWNrLFxuICAgICAgaW5kZXhcbiAgICApO1xuICB9XG5cbiAgY29uc3QgaW5kZXggPSAwO1xuXG4gIHJldHVybiBuZXh0KGluZGV4LCAuLi5pbml0aWFsQXJndW1lbnRzLCBiYWNrKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmRzRXZlcnkoYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBjb25zdCBiYWNrID0gbmV4dEFyZ3VtZW50cy5wb3AoKTtcblxuICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZCguLi5uZXh0QXJndW1lbnRzLCBiYWNrKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKFxuICAgICAgZWxlbWVudCxcbiAgICAgIC4uLm5leHRBcmd1bWVudHMsXG4gICAgICAoLi4uZm9yd2FyZEFyZ3VtZW50cykgPT4ge1xuICAgICAgICByZXR1cm4gbmV4dChpbmRleCArIDEsIC4uLmZvcndhcmRBcmd1bWVudHMpO1xuICAgICAgfSxcbiAgICAgIGJhY2ssXG4gICAgICBpbmRleFxuICAgICk7XG4gIH1cblxuICBjb25zdCBpbmRleCA9IDA7XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIC4uLmluaXRpYWxBcmd1bWVudHMsIGJhY2spO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFja3dhcmRzRXZlcnkoYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBjb25zdCBiYWNrID0gbmV4dEFyZ3VtZW50cy5wb3AoKTtcblxuICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgIHJldHVybiBmb3J3YXJkKC4uLm5leHRBcmd1bWVudHMsIGJhY2spO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soXG4gICAgICBlbGVtZW50LFxuICAgICAgLi4ubmV4dEFyZ3VtZW50cyxcbiAgICAgICguLi5mb3J3YXJkQXJndW1lbnRzKSA9PiB7XG4gICAgICAgIHJldHVybiBuZXh0KGluZGV4IC0gMSwgLi4uZm9yd2FyZEFyZ3VtZW50cyk7XG4gICAgICB9LFxuICAgICAgYmFjayxcbiAgICAgIGluZGV4XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ID0gbGVuZ3RoIC0gMTtcblxuICByZXR1cm4gbmV4dChpbmRleCwgLi4uaW5pdGlhbEFyZ3VtZW50cywgYmFjayk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3J3YXJkc0ZvckVhY2goYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBjb25zdCBiYWNrID0gbmV4dEFyZ3VtZW50cy5wb3AoKTtcblxuICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZCguLi5uZXh0QXJndW1lbnRzLCBiYWNrKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKFxuICAgICAgZWxlbWVudCxcbiAgICAgIC4uLm5leHRBcmd1bWVudHMsXG4gICAgICAoLi4uZm9yd2FyZEFyZ3VtZW50cykgPT4ge1xuICAgICAgICByZXR1cm4gbmV4dChpbmRleCArIDEsIC4uLmZvcndhcmRBcmd1bWVudHMpO1xuICAgICAgfSxcbiAgICAgIGJhY2ssXG4gICAgICBpbmRleFxuICAgICk7XG4gIH1cblxuICBjb25zdCBpbmRleCA9IDA7XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIC4uLmluaXRpYWxBcmd1bWVudHMsIGJhY2spO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFja3dhcmRzRm9yRWFjaChhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgYmFjayA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGZvcndhcmQgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZnVuY3Rpb24gbmV4dChpbmRleCwgLi4ubmV4dEFyZ3VtZW50cykge1xuICAgIGNvbnN0IGJhY2sgPSBuZXh0QXJndW1lbnRzLnBvcCgpO1xuXG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgcmV0dXJuIGZvcndhcmQoLi4ubmV4dEFyZ3VtZW50cywgYmFjayk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhcbiAgICAgIGVsZW1lbnQsXG4gICAgICAuLi5uZXh0QXJndW1lbnRzLFxuICAgICAgKC4uLmZvcndhcmRBcmd1bWVudHMpID0+IHtcbiAgICAgICAgcmV0dXJuIG5leHQoaW5kZXggLSAxLCAuLi5mb3J3YXJkQXJndW1lbnRzKTtcbiAgICAgIH0sXG4gICAgICBiYWNrLFxuICAgICAgaW5kZXhcbiAgICApO1xuICB9XG5cbiAgY29uc3QgaW5kZXggPSBsZW5ndGggLSAxO1xuXG4gIHJldHVybiBuZXh0KGluZGV4LCAuLi5pbml0aWFsQXJndW1lbnRzLCBiYWNrKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFsbChjYWxsYmFja3MsIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgcmV0dXJuIGV2ZXJ5KGNhbGxiYWNrcywgKGNhbGxiYWNrLCAuLi5jYWxsYmFja0FyZ3VtZW50cykgPT4ge1xuICAgIHJldHVybiBjYWxsYmFjayguLi5jYWxsYmFja0FyZ3VtZW50cyk7XG4gIH0sIC4uLmluaXRpYWxBcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhpc3RzKGNhbGxiYWNrcywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICByZXR1cm4gc29tZShjYWxsYmFja3MsIChjYWxsYmFjaywgLi4uY2FsbGJhY2tBcmd1bWVudHMpID0+IHtcbiAgICByZXR1cm4gY2FsbGJhY2soLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xuICB9LCAuLi5pbml0aWFsQXJndW1lbnRzKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBjdXQsXG4gIGlzb2xhdGUsXG4gIG9uZSxcbiAgc29tZSxcbiAgZWFjaCxcbiAgZXZlcnksXG4gIG1hcCxcbiAgcmVkdWNlLFxuICBmb3JFYWNoLFxuICBmaWx0ZXIsXG4gIGZpbmQsXG4gIHBydW5lLFxuICBleHRyYWN0LFxuICByZXNvbHZlLFxuICBtYXRjaCxcbiAgZm9yd2FyZHNFdmVyeSxcbiAgYmFja3dhcmRzRXZlcnksXG4gIGZvcndhcmRzRm9yRWFjaCxcbiAgYmFja3dhcmRzRm9yRWFjaCxcbiAgYWxsLFxuICBleGlzdHNcbn07XG4iXSwibmFtZXMiOlsiYWxsIiwiYmFja3dhcmRzRXZlcnkiLCJiYWNrd2FyZHNGb3JFYWNoIiwiY3V0IiwiZWFjaCIsImV2ZXJ5IiwiZXhpc3RzIiwiZXh0cmFjdCIsImZpbHRlciIsImZpbmQiLCJmb3JFYWNoIiwiZm9yd2FyZHNFdmVyeSIsImZvcndhcmRzRm9yRWFjaCIsImlzb2xhdGUiLCJtYXAiLCJtYXRjaCIsIm9uZSIsInBydW5lIiwicmVkdWNlIiwicmVzb2x2ZSIsInNvbWUiLCJpbml0aWFsQXJndW1lbnRzIiwiYmFjayIsInBvcCIsImZvcndhcmQiLCJmb3J3YXJkQXJndW1lbnRzIiwiY2FsbGJhY2siLCJjYWxsYmFja0FyZ3VtZW50cyIsImFycmF5IiwibGVuZ3RoIiwibmV4dCIsImluZGV4IiwiY291bnQiLCJuZXh0QXJndW1lbnRzIiwiZWxlbWVudCIsImV4Y2VwdGlvbiIsImFycmF5QSIsImFycmF5QiIsImVsZW1lbnRBIiwiZWxlbWVudEIiLCJpbml0aWFsVmFsdWUiLCJ2YWx1ZSIsImRlbGV0ZWRFbGVtZW50cyIsImRlbGV0ZWRFbGVtZW50Iiwic2xpY2UiLCJlbGVtZW50cyIsImVsZW1lbnRzTGVuZ3RoIiwiaW5jbHVkZXMiLCJhcnJheUFMZW5ndGgiLCJhcnJheUJMZW5ndGgiLCJjYWxsYmFja3MiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQWduQmdCQTtlQUFBQTs7UUExRkFDO2VBQUFBOztRQTREQUM7ZUFBQUE7O1FBaGxCQUM7ZUFBQUE7O1FBMG5CaEI7ZUFBQTs7UUF2aEJnQkM7ZUFBQUE7O1FBbUNBQztlQUFBQTs7UUE4ZUFDO2VBQUFBOztRQXRQQUM7ZUFBQUE7O1FBN0hBQztlQUFBQTs7UUE2Q0FDO2VBQUFBOztRQTNFQUM7ZUFBQUE7O1FBbVJBQztlQUFBQTs7UUE0REFDO2VBQUFBOztRQXZpQkFDO2VBQUFBOztRQXlKQUM7ZUFBQUE7O1FBNFNBQztlQUFBQTs7UUExYkFDO2VBQUFBOztRQTZUQUM7ZUFBQUE7O1FBL0lBQztlQUFBQTs7UUFvT0FDO2VBQUFBOztRQXJXQUM7ZUFBQUE7OztBQW5FVCxTQUFTakIsSUFBSSxHQUFHa0IsZ0JBQWdCO0lBQ3JDLE1BQU1DLE9BQU9ELGlCQUFpQkUsR0FBRyxJQUMzQkMsVUFBVUgsaUJBQWlCRSxHQUFHO0lBRXBDLE9BQU8sQ0FBQyxHQUFHRTtRQUNUQSxpQkFBaUJGLEdBQUcsSUFBSSxHQUFHO1FBRTNCLE9BQU9DLFdBQVdDLGtCQUFrQkg7SUFDdEM7QUFDRjtBQUVPLFNBQVNULFFBQVFhLFFBQVEs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
|
|
462
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvY29udGludWF0aW9uLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gY3V0KC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgYmFjayA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGZvcndhcmQgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpO1xuXG4gIHJldHVybiAoLi4uZm9yd2FyZEFyZ3VtZW50cykgPT4ge1xuICAgIGZvcndhcmRBcmd1bWVudHMucG9wKCk7IC8vL1xuXG4gICAgcmV0dXJuIGZvcndhcmQoLi4uZm9yd2FyZEFyZ3VtZW50cywgYmFjayk7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc29sYXRlKGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKTtcblxuICByZXR1cm4gY2FsbGJhY2soLi4uaW5pdGlhbEFyZ3VtZW50cywgKC4uLmNhbGxiYWNrQXJndW1lbnRzKSA9PiB7XG4gICAgY29uc3QgYmFjayA9IGNhbGxiYWNrQXJndW1lbnRzLnBvcCgpO1xuXG4gICAgcmV0dXJuIGZvcndhcmQoLi4uaW5pdGlhbEFyZ3VtZW50cywgYmFjayk7XG4gIH0sIGJhY2spO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb25lKGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBiYWNrID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgZm9yd2FyZCA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCBjb3VudCwgLi4ubmV4dEFyZ3VtZW50cykge1xuICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICBpZiAoY291bnQgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGJhY2soKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZvcndhcmQoLi4ubmV4dEFyZ3VtZW50cywgYmFjayk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhcbiAgICAgIGVsZW1lbnQsXG4gICAgICAuLi5pbml0aWFsQXJndW1lbnRzLFxuICAgICAgKC4uLmZvcndhcmRBcmd1bWVudHMpID0+IHtcbiAgICAgICAgaWYgKGNvdW50ID09PSAxKSB7XG4gICAgICAgICAgcmV0dXJuIGJhY2soKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvcndhcmRBcmd1bWVudHMucG9wKCk7IC8vL1xuXG4gICAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgY291bnQgKyAxLCAuLi5mb3J3YXJkQXJndW1lbnRzKTtcbiAgICAgIH0sXG4gICAgICAoZXhjZXB0aW9uKSA9PiB7XG4gICAgICAgIGlmIChleGNlcHRpb24pIHtcbiAgICAgICAgICByZXR1cm4gYmFjayhleGNlcHRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5leHQoaW5kZXggKyAxLCBjb3VudCwgLi4ubmV4dEFyZ3VtZW50cyk7XG4gICAgICB9LFxuICAgICAgaW5kZXhcbiAgICApO1xuICB9XG5cbiAgY29uc3QgaW5kZXggPSAwLFxuICAgICAgICBjb3VudCA9IDA7XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIGNvdW50KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNvbWUoYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgpIHtcbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgcmV0dXJuIGJhY2soKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKFxuICAgICAgZWxlbWVudCxcbiAgICAgIC4uLmluaXRpYWxBcmd1bWVudHMsXG4gICAgICBmb3J3YXJkLFxuICAgICAgKGV4Y2VwdGlvbikgPT4ge1xuICAgICAgICBpZiAoZXhjZXB0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIGJhY2soZXhjZXB0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSk7XG4gICAgICB9LFxuICAgICAgaW5kZXhcbiAgICApO1xuICB9XG5cbiAgY29uc3QgaW5kZXggPSAwO1xuXG4gIHJldHVybiBuZXh0KGluZGV4KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVhY2goYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIGNvdW50LCAuLi5uZXh0QXJndW1lbnRzKSB7XG4gICAgY29uc3QgYmFjayA9IG5leHRBcmd1bWVudHMucG9wKCk7XG5cbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgaWYgKGNvdW50ID09PSAwKSB7XG4gICAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKC4uLm5leHRBcmd1bWVudHMsIGJhY2spO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soXG4gICAgICBlbGVtZW50LFxuICAgICAgLi4ubmV4dEFyZ3VtZW50cyxcbiAgICAgICguLi5mb3J3YXJkQXJndW1lbnRzKSA9PiB7XG4gICAgICAgIGNvbnN0IGJhY2sgPSBmb3J3YXJkQXJndW1lbnRzLnBvcCgpO1xuXG4gICAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgY291bnQgKyAxLCAuLi5mb3J3YXJkQXJndW1lbnRzLCBiYWNrKTtcbiAgICAgIH0sXG4gICAgICBiYWNrLFxuICAgICAgaW5kZXhcbiAgICApO1xuICB9XG5cbiAgY29uc3QgaW5kZXggPSAwLFxuICAgICAgICBjb3VudCA9IDA7XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIGNvdW50LCAuLi5pbml0aWFsQXJndW1lbnRzLCBiYWNrKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV2ZXJ5KGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBiYWNrID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgZm9yd2FyZCA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCAuLi5uZXh0QXJndW1lbnRzKSB7XG4gICAgY29uc3QgYmFjayA9IG5leHRBcmd1bWVudHMucG9wKCk7XG5cbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZvcndhcmQoLi4ubmV4dEFyZ3VtZW50cywgYmFjayk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhcbiAgICAgIGVsZW1lbnQsXG4gICAgICAuLi5uZXh0QXJndW1lbnRzLFxuICAgICAgKC4uLmZvcndhcmRBcmd1bWVudHMpID0+IHtcbiAgICAgICAgY29uc3QgYmFjayA9IGZvcndhcmRBcmd1bWVudHMucG9wKCk7XG5cbiAgICAgICAgcmV0dXJuIG5leHQoaW5kZXggKyAxLCAuLi5mb3J3YXJkQXJndW1lbnRzLCBiYWNrKTtcbiAgICAgIH0sXG4gICAgICBiYWNrLFxuICAgICAgaW5kZXhcbiAgICApO1xuICB9XG5cbiAgY29uc3QgaW5kZXggPSAwO1xuXG4gIHJldHVybiBuZXh0KGluZGV4LCAuLi5pbml0aWFsQXJndW1lbnRzLCBiYWNrKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hcChhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgYmFjayA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGZvcndhcmQgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBhcnJheUEgPSBhcnJheSwgLy8vXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCBhcnJheUIsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBjb25zdCBiYWNrID0gbmV4dEFyZ3VtZW50cy5wb3AoKTtcblxuICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZChhcnJheUIsIC4uLm5leHRBcmd1bWVudHMsIGJhY2spO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnRBID0gYXJyYXlBW2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhcbiAgICAgIGVsZW1lbnRBLFxuICAgICAgLi4ubmV4dEFyZ3VtZW50cyxcbiAgICAgIChlbGVtZW50QiwgLi4uZm9yd2FyZEFyZ3VtZW50cykgPT4ge1xuICAgICAgICBjb25zdCBiYWNrID0gZm9yd2FyZEFyZ3VtZW50cy5wb3AoKTtcblxuICAgICAgICByZXR1cm4gbmV4dChpbmRleCArIDEsIFsgLi4uYXJyYXlCLCBlbGVtZW50QiBdLCAuLi5mb3J3YXJkQXJndW1lbnRzLCBiYWNrKTtcbiAgICAgIH0sXG4gICAgICBiYWNrLFxuICAgICAgaW5kZXhcbiAgICApO1xuICB9XG5cbiAgY29uc3QgaW5kZXggPSAwLFxuICAgICAgICBhcnJheUIgPSBbXTtcblxuICByZXR1cm4gbmV4dChpbmRleCwgYXJyYXlCLCAuLi5pbml0aWFsQXJndW1lbnRzLCBiYWNrKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZHVjZShhcnJheSwgaW5pdGlhbFZhbHVlLCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBiYWNrID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgZm9yd2FyZCA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCB2YWx1ZSwgLi4ubmV4dEFyZ3VtZW50cykge1xuICAgIGNvbnN0IGJhY2sgPSBuZXh0QXJndW1lbnRzLnBvcCgpO1xuXG4gICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgIHJldHVybiBmb3J3YXJkKHZhbHVlLCAuLi5uZXh0QXJndW1lbnRzLCBiYWNrKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKFxuICAgICAgZWxlbWVudCxcbiAgICAgIHZhbHVlLFxuICAgICAgLi4ubmV4dEFyZ3VtZW50cyxcbiAgICAgICh2YWx1ZSwgLi4uZm9yd2FyZEFyZ3VtZW50cykgPT4ge1xuICAgICAgICBjb25zdCBiYWNrID0gZm9yd2FyZEFyZ3VtZW50cy5wb3AoKTtcblxuICAgICAgICByZXR1cm4gbmV4dChpbmRleCArIDEsIHZhbHVlLCAuLi5mb3J3YXJkQXJndW1lbnRzLCBiYWNrKTtcbiAgICAgIH0sXG4gICAgICBiYWNrLFxuICAgICAgaW5kZXhcbiAgICApO1xuICB9XG5cbiAgY29uc3QgaW5kZXggPSAwO1xuXG4gIHJldHVybiBuZXh0KGluZGV4LCBpbml0aWFsVmFsdWUsIC4uLmluaXRpYWxBcmd1bWVudHMsIGJhY2spO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yRWFjaChhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgYmFjayA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGZvcndhcmQgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZnVuY3Rpb24gbmV4dChpbmRleCwgLi4ubmV4dEFyZ3VtZW50cykge1xuICAgIGNvbnN0IGJhY2sgPSBuZXh0QXJndW1lbnRzLnBvcCgpO1xuXG4gICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgIHJldHVybiBmb3J3YXJkKC4uLm5leHRBcmd1bWVudHMsIGJhY2spO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soXG4gICAgICBlbGVtZW50LFxuICAgICAgLi4ubmV4dEFyZ3VtZW50cyxcbiAgICAgICguLi5mb3J3YXJkQXJndW1lbnRzKSA9PiB7XG4gICAgICAgIGNvbnN0IGJhY2sgPSBmb3J3YXJkQXJndW1lbnRzLnBvcCgpO1xuXG4gICAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgLi4uZm9yd2FyZEFyZ3VtZW50cywgYmFjayk7XG4gICAgICB9LFxuICAgICAgYmFjayxcbiAgICAgIGluZGV4XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ID0gMDtcblxuICByZXR1cm4gbmV4dChpbmRleCwgLi4uaW5pdGlhbEFyZ3VtZW50cywgYmFjayk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXIoYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIGFycmF5LCBkZWxldGVkRWxlbWVudHMsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBjb25zdCBiYWNrID0gbmV4dEFyZ3VtZW50cy5wb3AoKTtcblxuICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgIHJldHVybiBmb3J3YXJkKGFycmF5LCBkZWxldGVkRWxlbWVudHMsIC4uLm5leHRBcmd1bWVudHMsIGJhY2spO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soXG4gICAgICBlbGVtZW50LFxuICAgICAgLi4ubmV4dEFyZ3VtZW50cyxcbiAgICAgICguLi5mb3J3YXJkQXJndW1lbnRzKSA9PiB7XG4gICAgICAgIGNvbnN0IGJhY2sgPSBmb3J3YXJkQXJndW1lbnRzLnBvcCgpO1xuXG4gICAgICAgIHJldHVybiBuZXh0KGluZGV4IC0gMSwgYXJyYXksIGRlbGV0ZWRFbGVtZW50cywgLi4uZm9yd2FyZEFyZ3VtZW50cywgYmFjayk7XG4gICAgICB9LFxuICAgICAgKGV4Y2VwdGlvbikgPT4ge1xuICAgICAgICBpZiAoZXhjZXB0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIGJhY2soZXhjZXB0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRlbGV0ZWRFbGVtZW50ID0gZWxlbWVudDsgLy8vXG5cbiAgICAgICAgcmV0dXJuIG5leHQoXG4gICAgICAgICAgaW5kZXggLSAxLFxuICAgICAgICAgIFsgLi4uYXJyYXkuc2xpY2UoMCwgaW5kZXgpLCAuLi5hcnJheS5zbGljZShpbmRleCArIDEpIF0sXG4gICAgICAgICAgWyBkZWxldGVkRWxlbWVudCwgLi4uZGVsZXRlZEVsZW1lbnRzIF0sXG4gICAgICAgICAgLi4ubmV4dEFyZ3VtZW50cyxcbiAgICAgICAgICBiYWNrXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgaW5kZXhcbiAgICApO1xuICB9XG5cbiAgY29uc3QgaW5kZXggPSBsZW5ndGggLSAxLFxuICAgICAgICBkZWxldGVkRWxlbWVudHMgPSBbXTtcblxuICByZXR1cm4gbmV4dChpbmRleCwgYXJyYXksIGRlbGV0ZWRFbGVtZW50cywgLi4uaW5pdGlhbEFyZ3VtZW50cywgYmFjayk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kKGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBiYWNrID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgZm9yd2FyZCA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCBlbGVtZW50cywgLi4ubmV4dEFyZ3VtZW50cykge1xuICAgIGNvbnN0IGJhY2sgPSBuZXh0QXJndW1lbnRzLnBvcCgpO1xuXG4gICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgIHJldHVybiBmb3J3YXJkKGVsZW1lbnRzLCAuLi5uZXh0QXJndW1lbnRzLCBiYWNrKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKFxuICAgICAgZWxlbWVudCxcbiAgICAgIC4uLm5leHRBcmd1bWVudHMsXG4gICAgICAoLi4uZm9yd2FyZEFyZ3VtZW50cykgPT4ge1xuICAgICAgICBjb25zdCBiYWNrID0gZm9yd2FyZEFyZ3VtZW50cy5wb3AoKTtcblxuICAgICAgICByZXR1cm4gbmV4dChpbmRleCArIDEsIFsgLi4uZWxlbWVudHMsIGVsZW1lbnQgXSwgLi4uZm9yd2FyZEFyZ3VtZW50cywgYmFjayk7XG4gICAgICB9LFxuICAgICAgKGV4Y2VwdGlvbikgPT4ge1xuICAgICAgICBpZiAoZXhjZXB0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIGJhY2soZXhjZXB0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgZWxlbWVudHMsIC4uLm5leHRBcmd1bWVudHMsIGJhY2spO1xuICAgICAgfSxcbiAgICAgIGluZGV4XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ID0gMCxcbiAgICAgICAgZWxlbWVudHMgPSBbXTtcblxuICByZXR1cm4gbmV4dChpbmRleCwgZWxlbWVudHMsIC4uLmluaXRpYWxBcmd1bWVudHMsIGJhY2spO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJ1bmUoYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIGFycmF5LCAuLi5uZXh0QXJndW1lbnRzKSB7XG4gICAgY29uc3QgYmFjayA9IG5leHRBcmd1bWVudHMucG9wKCk7XG5cbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgcmV0dXJuIGJhY2soKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKFxuICAgICAgZWxlbWVudCxcbiAgICAgIC4uLm5leHRBcmd1bWVudHMsXG4gICAgICAoLi4uZm9yd2FyZEFyZ3VtZW50cykgPT4ge1xuICAgICAgICBjb25zdCBiYWNrID0gZm9yd2FyZEFyZ3VtZW50cy5wb3AoKTtcblxuICAgICAgICByZXR1cm4gbmV4dChpbmRleCArIDEsIGFycmF5LCAuLi5mb3J3YXJkQXJndW1lbnRzLCBiYWNrKTtcbiAgICAgIH0sXG4gICAgICAoZXhjZXB0aW9uKSA9PiB7XG4gICAgICAgIGlmIChleGNlcHRpb24pIHtcbiAgICAgICAgICByZXR1cm4gYmFjayhleGNlcHRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGVsZXRlZEVsZW1lbnQgPSBlbGVtZW50OyAvLy9cblxuICAgICAgICByZXR1cm4gZm9yd2FyZChcbiAgICAgICAgICBbIC4uLmFycmF5LnNsaWNlKDAsIGluZGV4KSwgLi4uYXJyYXkuc2xpY2UoaW5kZXggKyAxKSBdLFxuICAgICAgICAgIGRlbGV0ZWRFbGVtZW50LFxuICAgICAgICAgIC4uLm5leHRBcmd1bWVudHMsXG4gICAgICAgICAgYmFja1xuICAgICAgICApO1xuICAgICAgfSxcbiAgICAgIGluZGV4XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ID0gMDtcblxuICByZXR1cm4gbmV4dChpbmRleCwgYXJyYXksIC4uLmluaXRpYWxBcmd1bWVudHMsIGJhY2spO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdChhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgYmFjayA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGZvcndhcmQgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZnVuY3Rpb24gbmV4dChpbmRleCwgYXJyYXksIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBjb25zdCBiYWNrID0gbmV4dEFyZ3VtZW50cy5wb3AoKTtcblxuICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICByZXR1cm4gYmFjaygpO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soXG4gICAgICBlbGVtZW50LFxuICAgICAgLi4ubmV4dEFyZ3VtZW50cyxcbiAgICAgICguLi5mb3J3YXJkQXJndW1lbnRzKSA9PiB7XG4gICAgICAgIGNvbnN0IGRlbGV0ZWRFbGVtZW50ID0gZWxlbWVudDsgLy8vXG5cbiAgICAgICAgcmV0dXJuIGZvcndhcmQoXG4gICAgICAgICAgWyAuLi5hcnJheS5zbGljZSgwLCBpbmRleCksIC4uLmFycmF5LnNsaWNlKGluZGV4ICsgMSkgXSxcbiAgICAgICAgICBkZWxldGVkRWxlbWVudCxcbiAgICAgICAgICAuLi5mb3J3YXJkQXJndW1lbnRzXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgKGV4Y2VwdGlvbikgPT4ge1xuICAgICAgICBpZiAoZXhjZXB0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIGJhY2soZXhjZXB0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgYXJyYXksIC4uLm5leHRBcmd1bWVudHMsIGJhY2spO1xuICAgICAgfSxcbiAgICAgIGluZGV4XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ID0gMDtcblxuICByZXR1cm4gbmV4dChpbmRleCwgYXJyYXksIC4uLmluaXRpYWxBcmd1bWVudHMsIGJhY2spO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZShhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgYmFjayA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGZvcndhcmQgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpO1xuXG4gIGZ1bmN0aW9uIG5leHQoYXJyYXlBLCBhcnJheUIsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBjb25zdCBsZW5ndGggPSBhcnJheUEubGVuZ3RoO1xuXG4gICAgaWYgKGxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGZvcndhcmQoYXJyYXlCLCAuLi5uZXh0QXJndW1lbnRzLCBiYWNrKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmluZChcbiAgICAgIGFycmF5QSxcbiAgICAgIGNhbGxiYWNrLFxuICAgICAgLi4ubmV4dEFyZ3VtZW50cyxcbiAgICAgIChlbGVtZW50cywgLi4uZm9yd2FyZEFyZ3VtZW50cykgPT4ge1xuICAgICAgICBjb25zdCBlbGVtZW50c0xlbmd0aCA9IGVsZW1lbnRzLmxlbmd0aDtcblxuICAgICAgICBpZiAoZWxlbWVudHNMZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gYmFjaygpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yd2FyZEFyZ3VtZW50cy5wb3AoKTsgLy8vXG5cbiAgICAgICAgcmV0dXJuIG5leHQoXG4gICAgICAgICAgYXJyYXlBLmZpbHRlcigoZWxlbWVudCkgPT4gIWVsZW1lbnRzLmluY2x1ZGVzKGVsZW1lbnQpKSxcbiAgICAgICAgICBbIC4uLmFycmF5QiwgLi4uZWxlbWVudHMgXSxcbiAgICAgICAgICAuLi5mb3J3YXJkQXJndW1lbnRzXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgYmFja1xuICAgICk7XG4gIH1cblxuICBjb25zdCBhcnJheUEgPSBhcnJheSwgLy8vXG4gICAgICAgIGFycmF5QiA9IFtdO1xuXG4gIHJldHVybiBuZXh0KGFycmF5QSwgYXJyYXlCLCAuLi5pbml0aWFsQXJndW1lbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoKGFycmF5QSwgYXJyYXlCLCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBiYWNrID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgZm9yd2FyZCA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGFycmF5QUxlbmd0aCA9IGFycmF5QS5sZW5ndGgsXG4gICAgICAgIGFycmF5Qkxlbmd0aCA9IGFycmF5Qi5sZW5ndGgsXG4gICAgICAgIGxlbmd0aCA9IGFycmF5QUxlbmd0aDsgIC8vL1xuXG4gIGlmIChhcnJheUFMZW5ndGggIT09IGFycmF5Qkxlbmd0aCkge1xuICAgIHJldHVybiBiYWNrKCk7XG4gIH1cblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCAuLi5uZXh0QXJndW1lbnRzKSB7XG4gICAgY29uc3QgYmFjayA9IG5leHRBcmd1bWVudHMucG9wKCk7XG5cbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZvcndhcmQoLi4ubmV4dEFyZ3VtZW50cywgYmFjayk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudEEgPSBhcnJheUFbaW5kZXhdLFxuICAgICAgICAgIGVsZW1lbnRCID0gYXJyYXlCW2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhcbiAgICAgIGVsZW1lbnRBLFxuICAgICAgZWxlbWVudEIsXG4gICAgICAuLi5uZXh0QXJndW1lbnRzLFxuICAgICAgKC4uLmZvcndhcmRBcmd1bWVudHMpID0+IHtcbiAgICAgICAgY29uc3QgYmFjayA9IGZvcndhcmRBcmd1bWVudHMucG9wKCk7XG5cbiAgICAgICAgcmV0dXJuIG5leHQoaW5kZXggKyAxLCAuLi5mb3J3YXJkQXJndW1lbnRzLCBiYWNrKTtcbiAgICAgIH0sXG4gICAgICBiYWNrLFxuICAgICAgaW5kZXhcbiAgICApO1xuICB9XG5cbiAgY29uc3QgaW5kZXggPSAwO1xuXG4gIHJldHVybiBuZXh0KGluZGV4LCAuLi5pbml0aWFsQXJndW1lbnRzLCBiYWNrKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmRzRXZlcnkoYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBjb25zdCBiYWNrID0gbmV4dEFyZ3VtZW50cy5wb3AoKTtcblxuICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZCguLi5uZXh0QXJndW1lbnRzLCBiYWNrKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKFxuICAgICAgZWxlbWVudCxcbiAgICAgIC4uLm5leHRBcmd1bWVudHMsXG4gICAgICAoLi4uZm9yd2FyZEFyZ3VtZW50cykgPT4ge1xuICAgICAgICBjb25zdCBiYWNrID0gZm9yd2FyZEFyZ3VtZW50cy5wb3AoKTtcblxuICAgICAgICByZXR1cm4gbmV4dChpbmRleCArIDEsIC4uLmZvcndhcmRBcmd1bWVudHMsIGJhY2spO1xuICAgICAgfSxcbiAgICAgIGJhY2ssXG4gICAgICBpbmRleFxuICAgICk7XG4gIH1cblxuICBjb25zdCBpbmRleCA9IDA7XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIC4uLmluaXRpYWxBcmd1bWVudHMsIGJhY2spO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFja3dhcmRzRXZlcnkoYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBjb25zdCBiYWNrID0gbmV4dEFyZ3VtZW50cy5wb3AoKTtcblxuICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgIHJldHVybiBmb3J3YXJkKC4uLm5leHRBcmd1bWVudHMsIGJhY2spO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soXG4gICAgICBlbGVtZW50LFxuICAgICAgLi4ubmV4dEFyZ3VtZW50cyxcbiAgICAgICguLi5mb3J3YXJkQXJndW1lbnRzKSA9PiB7XG4gICAgICAgIGNvbnN0IGJhY2sgPSBmb3J3YXJkQXJndW1lbnRzLnBvcCgpO1xuXG4gICAgICAgIHJldHVybiBuZXh0KGluZGV4IC0gMSwgLi4uZm9yd2FyZEFyZ3VtZW50cywgYmFjayk7XG4gICAgICB9LFxuICAgICAgYmFjayxcbiAgICAgIGluZGV4XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ID0gbGVuZ3RoIC0gMTtcblxuICByZXR1cm4gbmV4dChpbmRleCwgLi4uaW5pdGlhbEFyZ3VtZW50cywgYmFjayk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3J3YXJkc0ZvckVhY2goYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBjb25zdCBiYWNrID0gbmV4dEFyZ3VtZW50cy5wb3AoKTtcblxuICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZCguLi5uZXh0QXJndW1lbnRzLCBiYWNrKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKFxuICAgICAgZWxlbWVudCxcbiAgICAgIC4uLm5leHRBcmd1bWVudHMsXG4gICAgICAoLi4uZm9yd2FyZEFyZ3VtZW50cykgPT4ge1xuICAgICAgICBjb25zdCBiYWNrID0gZm9yd2FyZEFyZ3VtZW50cy5wb3AoKTtcblxuICAgICAgICByZXR1cm4gbmV4dChpbmRleCArIDEsIC4uLmZvcndhcmRBcmd1bWVudHMsIGJhY2spO1xuICAgICAgfSxcbiAgICAgIGJhY2ssXG4gICAgICBpbmRleFxuICAgICk7XG4gIH1cblxuICBjb25zdCBpbmRleCA9IDA7XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIC4uLmluaXRpYWxBcmd1bWVudHMsIGJhY2spO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFja3dhcmRzRm9yRWFjaChhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgYmFjayA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGZvcndhcmQgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZnVuY3Rpb24gbmV4dChpbmRleCwgLi4ubmV4dEFyZ3VtZW50cykge1xuICAgIGNvbnN0IGJhY2sgPSBuZXh0QXJndW1lbnRzLnBvcCgpO1xuXG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgcmV0dXJuIGZvcndhcmQoLi4ubmV4dEFyZ3VtZW50cywgYmFjayk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhcbiAgICAgIGVsZW1lbnQsXG4gICAgICAuLi5uZXh0QXJndW1lbnRzLFxuICAgICAgKC4uLmZvcndhcmRBcmd1bWVudHMpID0+IHtcbiAgICAgICAgY29uc3QgYmFjayA9IGZvcndhcmRBcmd1bWVudHMucG9wKCk7XG5cbiAgICAgICAgcmV0dXJuIG5leHQoaW5kZXggLSAxLCAuLi5mb3J3YXJkQXJndW1lbnRzLCBiYWNrKTtcbiAgICAgIH0sXG4gICAgICBiYWNrLFxuICAgICAgaW5kZXhcbiAgICApO1xuICB9XG5cbiAgY29uc3QgaW5kZXggPSBsZW5ndGggLSAxO1xuXG4gIHJldHVybiBuZXh0KGluZGV4LCAuLi5pbml0aWFsQXJndW1lbnRzLCBiYWNrKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFsbChjYWxsYmFja3MsIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgcmV0dXJuIGV2ZXJ5KGNhbGxiYWNrcywgKGNhbGxiYWNrLCAuLi5jYWxsYmFja0FyZ3VtZW50cykgPT4ge1xuICAgIHJldHVybiBjYWxsYmFjayguLi5jYWxsYmFja0FyZ3VtZW50cyk7XG4gIH0sIC4uLmluaXRpYWxBcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhpc3RzKGNhbGxiYWNrcywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICByZXR1cm4gc29tZShjYWxsYmFja3MsIChjYWxsYmFjaywgLi4uY2FsbGJhY2tBcmd1bWVudHMpID0+IHtcbiAgICByZXR1cm4gY2FsbGJhY2soLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xuICB9LCAuLi5pbml0aWFsQXJndW1lbnRzKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBjdXQsXG4gIGlzb2xhdGUsXG4gIG9uZSxcbiAgc29tZSxcbiAgZWFjaCxcbiAgZXZlcnksXG4gIG1hcCxcbiAgcmVkdWNlLFxuICBmb3JFYWNoLFxuICBmaWx0ZXIsXG4gIGZpbmQsXG4gIHBydW5lLFxuICBleHRyYWN0LFxuICByZXNvbHZlLFxuICBtYXRjaCxcbiAgZm9yd2FyZHNFdmVyeSxcbiAgYmFja3dhcmRzRXZlcnksXG4gIGZvcndhcmRzRm9yRWFjaCxcbiAgYmFja3dhcmRzRm9yRWFjaCxcbiAgYWxsLFxuICBleGlzdHNcbn07XG4iXSwibmFtZXMiOlsiYWxsIiwiYmFja3dhcmRzRXZlcnkiLCJiYWNrd2FyZHNGb3JFYWNoIiwiY3V0IiwiZWFjaCIsImV2ZXJ5IiwiZXhpc3RzIiwiZXh0cmFjdCIsImZpbHRlciIsImZpbmQiLCJmb3JFYWNoIiwiZm9yd2FyZHNFdmVyeSIsImZvcndhcmRzRm9yRWFjaCIsImlzb2xhdGUiLCJtYXAiLCJtYXRjaCIsIm9uZSIsInBydW5lIiwicmVkdWNlIiwicmVzb2x2ZSIsInNvbWUiLCJpbml0aWFsQXJndW1lbnRzIiwiYmFjayIsInBvcCIsImZvcndhcmQiLCJmb3J3YXJkQXJndW1lbnRzIiwiY2FsbGJhY2siLCJjYWxsYmFja0FyZ3VtZW50cyIsImFycmF5IiwibGVuZ3RoIiwibmV4dCIsImluZGV4IiwiY291bnQiLCJuZXh0QXJndW1lbnRzIiwiZWxlbWVudCIsImV4Y2VwdGlvbiIsImFycmF5QSIsImFycmF5QiIsImVsZW1lbnRBIiwiZWxlbWVudEIiLCJpbml0aWFsVmFsdWUiLCJ2YWx1ZSIsImRlbGV0ZWRFbGVtZW50cyIsImRlbGV0ZWRFbGVtZW50Iiwic2xpY2UiLCJlbGVtZW50cyIsImVsZW1lbnRzTGVuZ3RoIiwiaW5jbHVkZXMiLCJhcnJheUFMZW5ndGgiLCJhcnJheUJMZW5ndGgiLCJjYWxsYmFja3MiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQTBvQmdCQTtlQUFBQTs7UUFoR0FDO2VBQUFBOztRQWdFQUM7ZUFBQUE7O1FBeG1CQUM7ZUFBQUE7O1FBb3BCaEI7ZUFBQTs7UUFqakJnQkM7ZUFBQUE7O1FBcUNBQztlQUFBQTs7UUFzZ0JBQztlQUFBQTs7UUFoUUFDO2VBQUFBOztRQW5JQUM7ZUFBQUE7O1FBK0NBQztlQUFBQTs7UUEvRUFDO2VBQUFBOztRQTZSQUM7ZUFBQUE7O1FBZ0VBQztlQUFBQTs7UUE3akJBQztlQUFBQTs7UUE2SkFDO2VBQUFBOztRQXdUQUM7ZUFBQUE7O1FBMWNBQztlQUFBQTs7UUEyVUFDO2VBQUFBOztRQXZKQUM7ZUFBQUE7O1FBOE9BQztlQUFBQTs7UUFyWEFDO2VBQUFBOzs7QUFuRVQsU0FBU2pCLElBQUksR0FBR2tCLGdCQUFnQjtJQUNyQyxNQUFNQyxPQUFPRCxpQkFBaUJFLEdBQUcsSUFDM0JDLFVBQVVILGlCQUFpQkUsR0FBRztJQUVwQyxPQUFPLENBQUMsR0FBR0U7UUFDVEEsaUJBQWlCRixHQUFHLElBQUksR0FBRztRQUUzQixPQUFPQyxXQUFXQyxrQkFBa0JIO0lBQ3RDO0FBQ0Y7QUFFTyxTQUFTVCxRQUFRYSxRQUFRLEVBQUUsR0FBR0wsZ0JBQWdCO0lBQ25ELE1BQU1DLE9BQU9ELGlCQUFpQkUsR0FBRyxJQUMzQkMsVUFBVUgsaUJBQWlCRSxHQUFHO0lBRXBDLE9BQU9HLFlBQVlMLGtCQUFrQixDQUFDLEdBQUdNO1FBQ3ZDLE1BQU1MLE9BQU9LLGtCQUFrQkosR0FBRztRQUVsQyxPQUFPQyxXQUFXSCxrQkFBa0JDO0lBQ3RDLEdBQUdBO0FBQ0w7QUFFTyxTQUFTTixJ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
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "occam-languages",
|
|
3
3
|
"author": "James Smith",
|
|
4
|
-
"version": "3.0.
|
|
4
|
+
"version": "3.0.130",
|
|
5
5
|
"license": "MIT, Anti-996",
|
|
6
6
|
"homepage": "https://github.com/djalbat/occam-languages",
|
|
7
7
|
"description": "Occam's common language functionality.",
|
|
@@ -11,13 +11,13 @@
|
|
|
11
11
|
},
|
|
12
12
|
"dependencies": {
|
|
13
13
|
"necessary": "^17.7.2",
|
|
14
|
-
"occam-custom-grammars": "^6.1.
|
|
15
|
-
"occam-grammar-utilities": "^8.1.
|
|
16
|
-
"occam-grammars": "^1.3.
|
|
17
|
-
"occam-lexers": "^
|
|
18
|
-
"occam-model": "^1.0.
|
|
19
|
-
"occam-parsers": "^
|
|
20
|
-
"occam-query": "^4.1.
|
|
14
|
+
"occam-custom-grammars": "^6.1.81",
|
|
15
|
+
"occam-grammar-utilities": "^8.1.149",
|
|
16
|
+
"occam-grammars": "^1.3.742",
|
|
17
|
+
"occam-lexers": "^24.0.1",
|
|
18
|
+
"occam-model": "^1.0.621",
|
|
19
|
+
"occam-parsers": "^24.0.1",
|
|
20
|
+
"occam-query": "^4.1.243"
|
|
21
21
|
},
|
|
22
22
|
"devDependencies": {
|
|
23
23
|
"@swc/core": "1.13.20",
|
package/src/nominal/node/term.js
CHANGED
|
@@ -121,7 +121,9 @@ export function each(array, callback, ...initialArguments) {
|
|
|
121
121
|
element,
|
|
122
122
|
...nextArguments,
|
|
123
123
|
(...forwardArguments) => {
|
|
124
|
-
|
|
124
|
+
const back = forwardArguments.pop();
|
|
125
|
+
|
|
126
|
+
return next(index + 1, count + 1, ...forwardArguments, back);
|
|
125
127
|
},
|
|
126
128
|
back,
|
|
127
129
|
index
|
|
@@ -152,7 +154,9 @@ export function every(array, callback, ...initialArguments) {
|
|
|
152
154
|
element,
|
|
153
155
|
...nextArguments,
|
|
154
156
|
(...forwardArguments) => {
|
|
155
|
-
|
|
157
|
+
const back = forwardArguments.pop();
|
|
158
|
+
|
|
159
|
+
return next(index + 1, ...forwardArguments, back);
|
|
156
160
|
},
|
|
157
161
|
back,
|
|
158
162
|
index
|
|
@@ -183,7 +187,9 @@ export function map(array, callback, ...initialArguments) {
|
|
|
183
187
|
elementA,
|
|
184
188
|
...nextArguments,
|
|
185
189
|
(elementB, ...forwardArguments) => {
|
|
186
|
-
|
|
190
|
+
const back = forwardArguments.pop();
|
|
191
|
+
|
|
192
|
+
return next(index + 1, [ ...arrayB, elementB ], ...forwardArguments, back);
|
|
187
193
|
},
|
|
188
194
|
back,
|
|
189
195
|
index
|
|
@@ -215,7 +221,9 @@ export function reduce(array, initialValue, callback, ...initialArguments) {
|
|
|
215
221
|
value,
|
|
216
222
|
...nextArguments,
|
|
217
223
|
(value, ...forwardArguments) => {
|
|
218
|
-
|
|
224
|
+
const back = forwardArguments.pop();
|
|
225
|
+
|
|
226
|
+
return next(index + 1, value, ...forwardArguments, back);
|
|
219
227
|
},
|
|
220
228
|
back,
|
|
221
229
|
index
|
|
@@ -245,7 +253,9 @@ export function forEach(array, callback, ...initialArguments) {
|
|
|
245
253
|
element,
|
|
246
254
|
...nextArguments,
|
|
247
255
|
(...forwardArguments) => {
|
|
248
|
-
|
|
256
|
+
const back = forwardArguments.pop();
|
|
257
|
+
|
|
258
|
+
return next(index + 1, ...forwardArguments, back);
|
|
249
259
|
},
|
|
250
260
|
back,
|
|
251
261
|
index
|
|
@@ -275,7 +285,9 @@ export function filter(array, callback, ...initialArguments) {
|
|
|
275
285
|
element,
|
|
276
286
|
...nextArguments,
|
|
277
287
|
(...forwardArguments) => {
|
|
278
|
-
|
|
288
|
+
const back = forwardArguments.pop();
|
|
289
|
+
|
|
290
|
+
return next(index - 1, array, deletedElements, ...forwardArguments, back);
|
|
279
291
|
},
|
|
280
292
|
(exception) => {
|
|
281
293
|
if (exception) {
|
|
@@ -320,7 +332,9 @@ export function find(array, callback, ...initialArguments) {
|
|
|
320
332
|
element,
|
|
321
333
|
...nextArguments,
|
|
322
334
|
(...forwardArguments) => {
|
|
323
|
-
|
|
335
|
+
const back = forwardArguments.pop();
|
|
336
|
+
|
|
337
|
+
return next(index + 1, [ ...elements, element ], ...forwardArguments, back);
|
|
324
338
|
},
|
|
325
339
|
(exception) => {
|
|
326
340
|
if (exception) {
|
|
@@ -357,7 +371,9 @@ export function prune(array, callback, ...initialArguments) {
|
|
|
357
371
|
element,
|
|
358
372
|
...nextArguments,
|
|
359
373
|
(...forwardArguments) => {
|
|
360
|
-
|
|
374
|
+
const back = forwardArguments.pop();
|
|
375
|
+
|
|
376
|
+
return next(index + 1, array, ...forwardArguments, back);
|
|
361
377
|
},
|
|
362
378
|
(exception) => {
|
|
363
379
|
if (exception) {
|
|
@@ -490,7 +506,9 @@ export function match(arrayA, arrayB, callback, ...initialArguments) {
|
|
|
490
506
|
elementB,
|
|
491
507
|
...nextArguments,
|
|
492
508
|
(...forwardArguments) => {
|
|
493
|
-
|
|
509
|
+
const back = forwardArguments.pop();
|
|
510
|
+
|
|
511
|
+
return next(index + 1, ...forwardArguments, back);
|
|
494
512
|
},
|
|
495
513
|
back,
|
|
496
514
|
index
|
|
@@ -520,7 +538,9 @@ export function forwardsEvery(array, callback, ...initialArguments) {
|
|
|
520
538
|
element,
|
|
521
539
|
...nextArguments,
|
|
522
540
|
(...forwardArguments) => {
|
|
523
|
-
|
|
541
|
+
const back = forwardArguments.pop();
|
|
542
|
+
|
|
543
|
+
return next(index + 1, ...forwardArguments, back);
|
|
524
544
|
},
|
|
525
545
|
back,
|
|
526
546
|
index
|
|
@@ -550,7 +570,9 @@ export function backwardsEvery(array, callback, ...initialArguments) {
|
|
|
550
570
|
element,
|
|
551
571
|
...nextArguments,
|
|
552
572
|
(...forwardArguments) => {
|
|
553
|
-
|
|
573
|
+
const back = forwardArguments.pop();
|
|
574
|
+
|
|
575
|
+
return next(index - 1, ...forwardArguments, back);
|
|
554
576
|
},
|
|
555
577
|
back,
|
|
556
578
|
index
|
|
@@ -580,7 +602,9 @@ export function forwardsForEach(array, callback, ...initialArguments) {
|
|
|
580
602
|
element,
|
|
581
603
|
...nextArguments,
|
|
582
604
|
(...forwardArguments) => {
|
|
583
|
-
|
|
605
|
+
const back = forwardArguments.pop();
|
|
606
|
+
|
|
607
|
+
return next(index + 1, ...forwardArguments, back);
|
|
584
608
|
},
|
|
585
609
|
back,
|
|
586
610
|
index
|
|
@@ -610,7 +634,9 @@ export function backwardsForEach(array, callback, ...initialArguments) {
|
|
|
610
634
|
element,
|
|
611
635
|
...nextArguments,
|
|
612
636
|
(...forwardArguments) => {
|
|
613
|
-
|
|
637
|
+
const back = forwardArguments.pop();
|
|
638
|
+
|
|
639
|
+
return next(index - 1, ...forwardArguments, back);
|
|
614
640
|
},
|
|
615
641
|
back,
|
|
616
642
|
index
|