occam-languages 2.2.16 → 2.2.19
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/index.js +1 -5
- package/lib/pass/continuation.js +4 -6
- package/lib/pass/continuationZip.js +4 -6
- package/lib/utilities/continuation.js +165 -95
- package/package.json +1 -1
- package/src/index.js +0 -1
- package/src/pass/continuation.js +4 -5
- package/src/pass/continuationZip.js +6 -7
- package/src/utilities/continuation.js +241 -107
- package/lib/pass/equivalence.js +0 -88
- package/src/pass/equivalence.js +0 -124
|
@@ -60,16 +60,19 @@ _export(exports, {
|
|
|
60
60
|
});
|
|
61
61
|
const _necessary = require("necessary");
|
|
62
62
|
const { filter: arrayFilter } = _necessary.arrayUtilities, { forEach: asynchronousForEach, forwardsForEach: asynchronousForwardsForEach, backwardsForEach: asynchronousBackwardsForEach } = _necessary.asynchronousUtilities;
|
|
63
|
-
function one(array, callback, ...
|
|
64
|
-
let
|
|
65
|
-
const continuation =
|
|
63
|
+
function one(array, callback, ...initialArguments) {
|
|
64
|
+
let success = false;
|
|
65
|
+
const continuation = initialArguments.pop();
|
|
66
|
+
let intermediateArguments = initialArguments; ///
|
|
66
67
|
return asynchronousForEach(array, (element, next, done)=>{
|
|
67
|
-
return callback(element, ...
|
|
68
|
+
return callback(element, ...intermediateArguments, (...callbackArguments)=>{
|
|
69
|
+
const passed = callbackArguments.shift();
|
|
70
|
+
intermediateArguments = callbackArguments; ///
|
|
68
71
|
if (passed) {
|
|
69
|
-
if (!
|
|
70
|
-
|
|
72
|
+
if (!success) {
|
|
73
|
+
success = true;
|
|
71
74
|
} else {
|
|
72
|
-
|
|
75
|
+
success = false;
|
|
73
76
|
done();
|
|
74
77
|
return;
|
|
75
78
|
}
|
|
@@ -77,14 +80,18 @@ function one(array, callback, ...remainingArguments) {
|
|
|
77
80
|
next();
|
|
78
81
|
});
|
|
79
82
|
}, ()=>{
|
|
80
|
-
|
|
83
|
+
const finalArguments = intermediateArguments; ///
|
|
84
|
+
return continuation(success, ...finalArguments);
|
|
81
85
|
});
|
|
82
86
|
}
|
|
83
|
-
function some(array, callback, ...
|
|
87
|
+
function some(array, callback, ...initialArguments) {
|
|
84
88
|
let success = false;
|
|
85
|
-
const continuation =
|
|
89
|
+
const continuation = initialArguments.pop();
|
|
90
|
+
let intermediateArguments = initialArguments; ///
|
|
86
91
|
return asynchronousForEach(array, (element, next, done)=>{
|
|
87
|
-
return callback(element, ...
|
|
92
|
+
return callback(element, ...intermediateArguments, (...callbackArguments)=>{
|
|
93
|
+
const passed = callbackArguments.shift();
|
|
94
|
+
intermediateArguments = callbackArguments; ///
|
|
88
95
|
if (passed) {
|
|
89
96
|
success = true;
|
|
90
97
|
done();
|
|
@@ -93,32 +100,40 @@ function some(array, callback, ...remainingArguments) {
|
|
|
93
100
|
next();
|
|
94
101
|
});
|
|
95
102
|
}, ()=>{
|
|
96
|
-
|
|
103
|
+
const finalArguments = intermediateArguments; ///
|
|
104
|
+
return continuation(success, ...finalArguments);
|
|
97
105
|
});
|
|
98
106
|
}
|
|
99
|
-
function each(array, callback, ...
|
|
100
|
-
let
|
|
101
|
-
const continuation =
|
|
107
|
+
function each(array, callback, ...initialArguments) {
|
|
108
|
+
let success = false;
|
|
109
|
+
const continuation = initialArguments.pop();
|
|
110
|
+
let intermediateArguments = initialArguments; ///
|
|
102
111
|
return asynchronousForEach(array, (element, next, done)=>{
|
|
103
|
-
return callback(element, ...
|
|
112
|
+
return callback(element, ...intermediateArguments, (...callbackArguments)=>{
|
|
113
|
+
const passed = callbackArguments.shift();
|
|
114
|
+
intermediateArguments = callbackArguments; ///
|
|
104
115
|
if (passed) {
|
|
105
|
-
|
|
116
|
+
success = true;
|
|
106
117
|
} else {
|
|
107
|
-
|
|
118
|
+
success = false;
|
|
108
119
|
done();
|
|
109
120
|
return;
|
|
110
121
|
}
|
|
111
122
|
next();
|
|
112
123
|
});
|
|
113
124
|
}, ()=>{
|
|
114
|
-
|
|
125
|
+
const finalArguments = intermediateArguments; ///
|
|
126
|
+
return continuation(success, ...finalArguments);
|
|
115
127
|
});
|
|
116
128
|
}
|
|
117
|
-
function every(array, callback, ...
|
|
129
|
+
function every(array, callback, ...initialArguments) {
|
|
118
130
|
let success = true;
|
|
119
|
-
const continuation =
|
|
131
|
+
const continuation = initialArguments.pop();
|
|
132
|
+
let intermediateArguments = initialArguments; ///
|
|
120
133
|
return asynchronousForEach(array, (element, next, done)=>{
|
|
121
|
-
return callback(element, ...
|
|
134
|
+
return callback(element, ...intermediateArguments, (...callbackArguments)=>{
|
|
135
|
+
const passed = callbackArguments.shift();
|
|
136
|
+
intermediateArguments = callbackArguments; ///
|
|
122
137
|
if (!passed) {
|
|
123
138
|
success = false;
|
|
124
139
|
done();
|
|
@@ -127,52 +142,47 @@ function every(array, callback, ...remainingArguments) {
|
|
|
127
142
|
next();
|
|
128
143
|
});
|
|
129
144
|
}, ()=>{
|
|
130
|
-
|
|
145
|
+
const finalArguments = intermediateArguments; ///
|
|
146
|
+
return continuation(success, ...finalArguments);
|
|
131
147
|
});
|
|
132
148
|
}
|
|
133
|
-
function
|
|
134
|
-
const continuation = remainingArguments.pop(), arrayALength = arrayA.length, arrayBLength = arrayB.length;
|
|
135
|
-
if (arrayALength !== arrayBLength) {
|
|
136
|
-
const matches = false;
|
|
137
|
-
return continuation(matches, ...remainingArguments);
|
|
138
|
-
}
|
|
139
|
-
let index = -1;
|
|
140
|
-
return every(arrayA, (elementA, continuation)=>{
|
|
141
|
-
index++;
|
|
142
|
-
const elementB = arrayB[index];
|
|
143
|
-
return callback(elementA, elementB, ...remainingArguments, continuation);
|
|
144
|
-
}, (success)=>{
|
|
145
|
-
const matches = success; ///
|
|
146
|
-
return continuation(matches, ...remainingArguments);
|
|
147
|
-
});
|
|
148
|
-
}
|
|
149
|
-
function reduce(array, initialValue, callback, ...remainingArguments) {
|
|
149
|
+
function reduce(array, initialValue, callback, ...initialArguments) {
|
|
150
150
|
let value = initialValue; ///
|
|
151
|
-
const continuation =
|
|
151
|
+
const continuation = initialArguments.pop();
|
|
152
|
+
let intermediateArguments = initialArguments; ///
|
|
152
153
|
return asynchronousForEach(array, (element, next, done)=>{
|
|
153
|
-
return callback(value, element, ...
|
|
154
|
+
return callback(value, element, ...intermediateArguments, (...callbackArguments)=>{
|
|
155
|
+
const currentValue = callbackArguments.shift();
|
|
156
|
+
intermediateArguments = callbackArguments; ///
|
|
154
157
|
value = currentValue; ///
|
|
155
158
|
next();
|
|
156
159
|
});
|
|
157
160
|
}, ()=>{
|
|
158
|
-
|
|
161
|
+
const finalArguments = intermediateArguments; ///
|
|
162
|
+
return continuation(value, ...finalArguments);
|
|
159
163
|
});
|
|
160
164
|
}
|
|
161
|
-
function forEach(array, callback, ...
|
|
162
|
-
const continuation =
|
|
165
|
+
function forEach(array, callback, ...initialArguments) {
|
|
166
|
+
const continuation = initialArguments.pop();
|
|
167
|
+
let intermediateArguments = initialArguments; ///
|
|
163
168
|
return asynchronousForEach(array, (element, next, done)=>{
|
|
164
|
-
return callback(element, ...
|
|
169
|
+
return callback(element, ...intermediateArguments, (...callbackArguments)=>{
|
|
170
|
+
intermediateArguments = callbackArguments; ///
|
|
165
171
|
next();
|
|
166
172
|
});
|
|
167
173
|
}, ()=>{
|
|
168
|
-
|
|
174
|
+
const finalArguments = intermediateArguments; ///
|
|
175
|
+
return continuation(...finalArguments);
|
|
169
176
|
});
|
|
170
177
|
}
|
|
171
|
-
function forwardsEvery(array, callback, ...
|
|
178
|
+
function forwardsEvery(array, callback, ...initialArguments) {
|
|
172
179
|
let success = true;
|
|
173
|
-
const continuation =
|
|
180
|
+
const continuation = initialArguments.pop();
|
|
181
|
+
let intermediateArguments = initialArguments; ///
|
|
174
182
|
return asynchronousForwardsForEach(array, (element, next, done)=>{
|
|
175
|
-
return callback(element, ...
|
|
183
|
+
return callback(element, ...intermediateArguments, (...callbackArguments)=>{
|
|
184
|
+
const passed = callbackArguments.shift();
|
|
185
|
+
intermediateArguments = callbackArguments; ///
|
|
176
186
|
if (!passed) {
|
|
177
187
|
success = false;
|
|
178
188
|
done();
|
|
@@ -181,14 +191,18 @@ function forwardsEvery(array, callback, ...remainingArguments) {
|
|
|
181
191
|
next();
|
|
182
192
|
});
|
|
183
193
|
}, ()=>{
|
|
184
|
-
|
|
194
|
+
const finalArguments = intermediateArguments; ///
|
|
195
|
+
return continuation(success, ...finalArguments);
|
|
185
196
|
});
|
|
186
197
|
}
|
|
187
|
-
function backwardsEvery(array, callback, ...
|
|
198
|
+
function backwardsEvery(array, callback, ...initialArguments) {
|
|
188
199
|
let success = true;
|
|
189
|
-
const continuation =
|
|
200
|
+
const continuation = initialArguments.pop();
|
|
201
|
+
let intermediateArguments = initialArguments; ///
|
|
190
202
|
return asynchronousBackwardsForEach(array, (element, next, done)=>{
|
|
191
|
-
return callback(element, ...
|
|
203
|
+
return callback(element, ...intermediateArguments, (...callbackArguments)=>{
|
|
204
|
+
const passed = callbackArguments.shift();
|
|
205
|
+
intermediateArguments = callbackArguments; ///
|
|
192
206
|
if (!passed) {
|
|
193
207
|
success = false;
|
|
194
208
|
done();
|
|
@@ -197,100 +211,154 @@ function backwardsEvery(array, callback, ...remainingArguments) {
|
|
|
197
211
|
next();
|
|
198
212
|
});
|
|
199
213
|
}, ()=>{
|
|
200
|
-
|
|
214
|
+
const finalArguments = intermediateArguments; ///
|
|
215
|
+
return continuation(success, ...finalArguments);
|
|
201
216
|
});
|
|
202
217
|
}
|
|
203
|
-
function forwardsForEach(array, callback, ...
|
|
204
|
-
const continuation =
|
|
218
|
+
function forwardsForEach(array, callback, ...initialArguments) {
|
|
219
|
+
const continuation = initialArguments.pop();
|
|
220
|
+
let intermediateArguments = initialArguments; ///
|
|
205
221
|
return asynchronousForwardsForEach(array, (element, next, done)=>{
|
|
206
|
-
return callback(element, ...
|
|
222
|
+
return callback(element, ...intermediateArguments, (...callbackArguments)=>{
|
|
223
|
+
intermediateArguments = callbackArguments; ///
|
|
207
224
|
next();
|
|
208
225
|
});
|
|
209
226
|
}, ()=>{
|
|
210
|
-
|
|
227
|
+
const finalArguments = intermediateArguments; ///
|
|
228
|
+
return continuation(...finalArguments);
|
|
211
229
|
});
|
|
212
230
|
}
|
|
213
|
-
function backwardsForEach(array, callback, ...
|
|
214
|
-
const continuation =
|
|
231
|
+
function backwardsForEach(array, callback, ...initialArguments) {
|
|
232
|
+
const continuation = initialArguments.pop();
|
|
233
|
+
let intermediateArguments = initialArguments; ///
|
|
215
234
|
return asynchronousBackwardsForEach(array, (element, next, done)=>{
|
|
216
|
-
return callback(element, ...
|
|
235
|
+
return callback(element, ...intermediateArguments, (...callbackArguments)=>{
|
|
236
|
+
intermediateArguments = callbackArguments; ///
|
|
217
237
|
next();
|
|
218
238
|
});
|
|
219
239
|
}, ()=>{
|
|
220
|
-
|
|
240
|
+
const finalArguments = intermediateArguments; ///
|
|
241
|
+
return continuation(...finalArguments);
|
|
221
242
|
});
|
|
222
243
|
}
|
|
223
|
-
function filter(array, callback, ...
|
|
244
|
+
function filter(array, callback, ...initialArguments) {
|
|
224
245
|
const deletedElements = [];
|
|
225
|
-
const continuation =
|
|
246
|
+
const continuation = initialArguments.pop();
|
|
247
|
+
let intermediateArguments = initialArguments; ///
|
|
226
248
|
let index = array.length;
|
|
227
|
-
return
|
|
249
|
+
return asynchronousBackwardsForEach(array, (element, next, done)=>{
|
|
228
250
|
index--;
|
|
229
|
-
return callback(element, ...
|
|
251
|
+
return callback(element, ...intermediateArguments, (...callbackArguments)=>{
|
|
252
|
+
const passed = callbackArguments.shift();
|
|
253
|
+
intermediateArguments = callbackArguments; ///
|
|
230
254
|
if (!passed) {
|
|
231
255
|
const start = index, deleteCount = 1, deletedElement = array.splice(start, deleteCount).pop(); ///
|
|
232
256
|
deletedElements.unshift(deletedElement); ///
|
|
233
257
|
}
|
|
234
|
-
|
|
258
|
+
next();
|
|
235
259
|
});
|
|
236
260
|
}, ()=>{
|
|
237
|
-
|
|
261
|
+
const finalArguments = intermediateArguments; ///
|
|
262
|
+
return continuation(deletedElements, ...finalArguments);
|
|
238
263
|
});
|
|
239
264
|
}
|
|
240
|
-
function prune(array, callback, ...
|
|
265
|
+
function prune(array, callback, ...initialArguments) {
|
|
241
266
|
let deletedElement = undefined; ///
|
|
242
|
-
const continuation =
|
|
267
|
+
const continuation = initialArguments.pop();
|
|
268
|
+
let intermediateArguments = initialArguments; ///
|
|
243
269
|
let index = -1;
|
|
244
|
-
return
|
|
270
|
+
return asynchronousForEach(array, (element, next, done)=>{
|
|
245
271
|
index++;
|
|
246
|
-
return callback(element, ...
|
|
272
|
+
return callback(element, ...intermediateArguments, (...callbackArguments)=>{
|
|
273
|
+
const passed = callbackArguments.shift();
|
|
274
|
+
intermediateArguments = callbackArguments; ///
|
|
247
275
|
if (!passed) {
|
|
248
276
|
const start = index, deleteCount = 1;
|
|
249
277
|
deletedElement = array.splice(start, deleteCount).pop(); ///
|
|
278
|
+
done();
|
|
279
|
+
return;
|
|
250
280
|
}
|
|
251
|
-
|
|
281
|
+
next();
|
|
252
282
|
});
|
|
253
283
|
}, ()=>{
|
|
254
|
-
|
|
284
|
+
const finalArguments = intermediateArguments; ///
|
|
285
|
+
return continuation(deletedElement, ...finalArguments);
|
|
255
286
|
});
|
|
256
287
|
}
|
|
257
|
-
function extract(array, callback, ...
|
|
288
|
+
function extract(array, callback, ...initialArguments) {
|
|
258
289
|
let deletedElement = undefined; ///
|
|
259
|
-
const continuation =
|
|
290
|
+
const continuation = initialArguments.pop();
|
|
291
|
+
let intermediateArguments = initialArguments; ///
|
|
260
292
|
let index = -1;
|
|
261
|
-
return
|
|
293
|
+
return asynchronousForEach(array, (element, next, done)=>{
|
|
262
294
|
index++;
|
|
263
|
-
return callback(element, ...
|
|
295
|
+
return callback(element, ...intermediateArguments, (...callbackArguments)=>{
|
|
296
|
+
const passed = callbackArguments.shift();
|
|
297
|
+
intermediateArguments = callbackArguments; ///
|
|
264
298
|
if (passed) {
|
|
265
299
|
const start = index, deleteCount = 1;
|
|
266
300
|
deletedElement = array.splice(start, deleteCount).pop(); ///
|
|
301
|
+
done();
|
|
302
|
+
return;
|
|
267
303
|
}
|
|
268
|
-
|
|
304
|
+
next();
|
|
269
305
|
});
|
|
270
306
|
}, ()=>{
|
|
271
|
-
|
|
307
|
+
const finalArguments = intermediateArguments; ///
|
|
308
|
+
return continuation(deletedElement, ...finalArguments);
|
|
272
309
|
});
|
|
273
310
|
}
|
|
274
|
-
function
|
|
311
|
+
function match(arrayA, arrayB, callback, ...initialArguments) {
|
|
312
|
+
let success = true;
|
|
313
|
+
const continuation = initialArguments.pop();
|
|
314
|
+
const arrayALength = arrayA.length, arrayBLength = arrayB.length;
|
|
315
|
+
if (arrayALength !== arrayBLength) {
|
|
316
|
+
success = false;
|
|
317
|
+
return continuation(success, ...initialArguments);
|
|
318
|
+
}
|
|
319
|
+
let index = -1;
|
|
320
|
+
let intermediateArguments = initialArguments; ///
|
|
321
|
+
return asynchronousForEach(arrayA, (elementA, next, done)=>{
|
|
322
|
+
index++;
|
|
323
|
+
const elementB = arrayB[index];
|
|
324
|
+
return callback(elementA, elementB, ...intermediateArguments, (...callbackArguments)=>{
|
|
325
|
+
const passed = callbackArguments.shift();
|
|
326
|
+
intermediateArguments = callbackArguments; ///
|
|
327
|
+
if (!passed) {
|
|
328
|
+
success = false;
|
|
329
|
+
done();
|
|
330
|
+
return;
|
|
331
|
+
}
|
|
332
|
+
next();
|
|
333
|
+
});
|
|
334
|
+
}, ()=>{
|
|
335
|
+
const finalArguments = intermediateArguments; ///
|
|
336
|
+
return continuation(success, ...finalArguments);
|
|
337
|
+
});
|
|
338
|
+
}
|
|
339
|
+
function resolve(arrayA, arrayB, callback, ...initialArguments) {
|
|
275
340
|
arrayA = [
|
|
276
341
|
...arrayA
|
|
277
342
|
];
|
|
278
|
-
const continuation =
|
|
343
|
+
const continuation = initialArguments.pop();
|
|
344
|
+
let intermediateArguments = initialArguments; ///
|
|
279
345
|
function nextPass() {
|
|
346
|
+
let success = false;
|
|
280
347
|
const arrayALength = arrayA.length;
|
|
281
348
|
if (arrayALength === 0) {
|
|
282
|
-
|
|
283
|
-
|
|
349
|
+
success = true;
|
|
350
|
+
const finalArguments = intermediateArguments; ///
|
|
351
|
+
return continuation(success, ...finalArguments);
|
|
284
352
|
}
|
|
285
|
-
let
|
|
286
|
-
let count = -1;
|
|
353
|
+
let index = -1;
|
|
287
354
|
function nextElement() {
|
|
288
|
-
|
|
289
|
-
const terminate =
|
|
355
|
+
index++;
|
|
356
|
+
const terminate = index === arrayALength;
|
|
290
357
|
if (terminate) {
|
|
291
358
|
if (!success) {
|
|
292
|
-
|
|
293
|
-
|
|
359
|
+
success = false;
|
|
360
|
+
const finalArguments = intermediateArguments; ///
|
|
361
|
+
return continuation(success, ...finalArguments);
|
|
294
362
|
}
|
|
295
363
|
arrayFilter(arrayA, (elementA)=>{
|
|
296
364
|
const arrayBIncludesElementA = arrayB.includes(elementA);
|
|
@@ -300,8 +368,10 @@ function resolve(arrayA, arrayB, callback, ...remainingArguments) {
|
|
|
300
368
|
});
|
|
301
369
|
nextPass();
|
|
302
370
|
} else {
|
|
303
|
-
const
|
|
304
|
-
return callback(elementA, ...
|
|
371
|
+
const elementA = arrayA[index];
|
|
372
|
+
return callback(elementA, ...intermediateArguments, (...callbackArguments)=>{
|
|
373
|
+
const passed = callbackArguments.shift();
|
|
374
|
+
intermediateArguments = callbackArguments; ///
|
|
305
375
|
if (passed) {
|
|
306
376
|
const elementB = elementA; ///
|
|
307
377
|
arrayB.push(elementB);
|
|
@@ -320,7 +390,6 @@ const _default = {
|
|
|
320
390
|
some,
|
|
321
391
|
each,
|
|
322
392
|
every,
|
|
323
|
-
match,
|
|
324
393
|
reduce,
|
|
325
394
|
forEach,
|
|
326
395
|
forwardsEvery,
|
|
@@ -330,7 +399,8 @@ const _default = {
|
|
|
330
399
|
filter,
|
|
331
400
|
prune,
|
|
332
401
|
extract,
|
|
402
|
+
match,
|
|
333
403
|
resolve
|
|
334
404
|
};
|
|
335
405
|
|
|
336
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvY29udGludWF0aW9uLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcywgYXN5bmNocm9ub3VzVXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5jb25zdCB7IGZpbHRlcjogYXJyYXlGaWx0ZXIgfSA9IGFycmF5VXRpbGl0aWVzLFxuICAgICAgeyBmb3JFYWNoOiBhc3luY2hyb25vdXNGb3JFYWNoLFxuICAgICAgICBmb3J3YXJkc0ZvckVhY2g6IGFzeW5jaHJvbm91c0ZvcndhcmRzRm9yRWFjaCxcbiAgICAgICAgYmFja3dhcmRzRm9yRWFjaDogYXN5bmNocm9ub3VzQmFja3dhcmRzRm9yRWFjaCB9ID0gYXN5bmNocm9ub3VzVXRpbGl0aWVzO1xuXG5leHBvcnQgZnVuY3Rpb24gb25lKGFycmF5LCBjYWxsYmFjaywgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gIGxldCBmb3VuZCA9IGZhbHNlO1xuXG4gIGNvbnN0IGNvbnRpbnVhdGlvbiA9IHJlbWFpbmluZ0FyZ3VtZW50cy5wb3AoKTtcblxuICByZXR1cm4gYXN5bmNocm9ub3VzRm9yRWFjaChhcnJheSwgKGVsZW1lbnQsIG5leHQsIGRvbmUpID0+IHtcbiAgICByZXR1cm4gY2FsbGJhY2soZWxlbWVudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzLCAocGFzc2VkKSA9PiB7XG4gICAgICBpZiAocGFzc2VkKSB7XG4gICAgICAgIGlmICghZm91bmQpIHtcbiAgICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm91bmQgPSBmYWxzZTtcblxuICAgICAgICAgIGRvbmUoKTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBuZXh0KCk7XG4gICAgfSk7XG4gIH0sICgpID0+IHtcbiAgICByZXR1cm4gY29udGludWF0aW9uKGZvdW5kLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNvbWUoYXJyYXksIGNhbGxiYWNrLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICBjb25zdCBjb250aW51YXRpb24gPSByZW1haW5pbmdBcmd1bWVudHMucG9wKCk7XG5cbiAgcmV0dXJuIGFzeW5jaHJvbm91c0ZvckVhY2goYXJyYXksIChlbGVtZW50LCBuZXh0LCBkb25lKSA9PiB7XG4gICAgcmV0dXJuIGNhbGxiYWNrKGVsZW1lbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cywgKHBhc3NlZCkgPT4ge1xuICAgICAgaWYgKHBhc3NlZCkge1xuICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcblxuICAgICAgICBkb25lKCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBuZXh0KCk7XG4gICAgfSk7XG4gIH0sICgpID0+IHtcbiAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZWFjaChhcnJheSwgY2FsbGJhY2ssIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICBsZXQgZm91bmQgPSBmYWxzZTtcblxuICBjb25zdCBjb250aW51YXRpb24gPSByZW1haW5pbmdBcmd1bWVudHMucG9wKCk7XG5cbiAgcmV0dXJuIGFzeW5jaHJvbm91c0ZvckVhY2goYXJyYXksIChlbGVtZW50LCBuZXh0LCBkb25lKSA9PiB7XG4gICAgcmV0dXJuIGNhbGxiYWNrKGVsZW1lbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cywgKHBhc3NlZCkgPT4ge1xuICAgICAgaWYgKHBhc3NlZCkge1xuICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3VuZCA9IGZhbHNlO1xuXG4gICAgICAgIGRvbmUoKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG5leHQoKTtcbiAgICB9KTtcbiAgfSwgKCkgPT4ge1xuICAgIHJldHVybiBjb250aW51YXRpb24oZm91bmQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXZlcnkoYXJyYXksIGNhbGxiYWNrLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgbGV0IHN1Y2Nlc3MgPSB0cnVlO1xuXG4gIGNvbnN0IGNvbnRpbnVhdGlvbiA9IHJlbWFpbmluZ0FyZ3VtZW50cy5wb3AoKTtcblxuICByZXR1cm4gYXN5bmNocm9ub3VzRm9yRWFjaChhcnJheSwgKGVsZW1lbnQsIG5leHQsIGRvbmUpID0+IHtcbiAgICByZXR1cm4gY2FsbGJhY2soZWxlbWVudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzLCAocGFzc2VkKSA9PiB7XG4gICAgICBpZiAoIXBhc3NlZCkge1xuICAgICAgICBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgZG9uZSgpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbmV4dCgpO1xuICAgIH0pO1xuICB9LCAoKSA9PiB7XG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoKGFycmF5QSwgYXJyYXlCLCBjYWxsYmFjaywgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gIGNvbnN0IGNvbnRpbnVhdGlvbiA9IHJlbWFpbmluZ0FyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgYXJyYXlBTGVuZ3RoID0gYXJyYXlBLmxlbmd0aCxcbiAgICAgICAgYXJyYXlCTGVuZ3RoID0gYXJyYXlCLmxlbmd0aDtcblxuICBpZiAoYXJyYXlBTGVuZ3RoICE9PSBhcnJheUJMZW5ndGgpIHtcbiAgICBjb25zdCBtYXRjaGVzID0gZmFsc2U7XG5cbiAgICByZXR1cm4gY29udGludWF0aW9uKG1hdGNoZXMsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG4gIH1cblxuICBsZXQgaW5kZXggPSAtMTtcblxuICByZXR1cm4gZXZlcnkoYXJyYXlBLCAoZWxlbWVudEEsIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgIGluZGV4Kys7XG5cbiAgICBjb25zdCBlbGVtZW50QiA9IGFycmF5QltpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soZWxlbWVudEEsIGVsZW1lbnRCLCAuLi5yZW1haW5pbmdBcmd1bWVudHMsIGNvbnRpbnVhdGlvbik7XG4gIH0sIChzdWNjZXNzKSA9PiB7XG4gICAgY29uc3QgbWF0Y2hlcyA9IHN1Y2Nlc3M7ICAvLy9cblxuICAgIHJldHVybiBjb250aW51YXRpb24obWF0Y2hlcywgLi4ucmVtYWluaW5nQXJndW1lbnRzKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWR1Y2UoYXJyYXksIGluaXRpYWxWYWx1ZSwgY2FsbGJhY2ssIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICBsZXQgdmFsdWUgPSBpbml0aWFsVmFsdWU7IC8vL1xuXG4gIGNvbnN0IGNvbnRpbnVhdGlvbiA9IHJlbWFpbmluZ0FyZ3VtZW50cy5wb3AoKTtcblxuICByZXR1cm4gYXN5bmNocm9ub3VzRm9yRWFjaChhcnJheSwgKGVsZW1lbnQsIG5leHQsIGRvbmUpID0+IHtcbiAgICByZXR1cm4gY2FsbGJhY2sodmFsdWUsIGVsZW1lbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cywgKGN1cnJlbnRWYWx1ZSkgPT4ge1xuICAgICAgdmFsdWUgPSBjdXJyZW50VmFsdWU7ICAvLy9cblxuICAgICAgbmV4dCgpO1xuICAgIH0pO1xuICB9LCAoKSA9PiB7XG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2YWx1ZSwgLi4ucmVtYWluaW5nQXJndW1lbnRzKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JFYWNoKGFycmF5LCBjYWxsYmFjaywgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gIGNvbnN0IGNvbnRpbnVhdGlvbiA9IHJlbWFpbmluZ0FyZ3VtZW50cy5wb3AoKTtcblxuICByZXR1cm4gYXN5bmNocm9ub3VzRm9yRWFjaChhcnJheSwgKGVsZW1lbnQsIG5leHQsIGRvbmUpID0+IHtcbiAgICByZXR1cm4gY2FsbGJhY2soZWxlbWVudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzLCAoKSA9PiB7XG4gICAgICBuZXh0KCk7XG4gICAgfSk7XG4gIH0sICgpID0+IHtcbiAgICByZXR1cm4gY29udGludWF0aW9uKC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNFdmVyeShhcnJheSwgY2FsbGJhY2ssIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICBsZXQgc3VjY2VzcyA9IHRydWU7XG5cbiAgY29uc3QgY29udGludWF0aW9uID0gcmVtYWluaW5nQXJndW1lbnRzLnBvcCgpO1xuXG4gIHJldHVybiBhc3luY2hyb25vdXNGb3J3YXJkc0ZvckVhY2goYXJyYXksIChlbGVtZW50LCBuZXh0LCBkb25lKSA9PiB7XG4gICAgcmV0dXJuIGNhbGxiYWNrKGVsZW1lbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cywgKHBhc3NlZCkgPT4ge1xuICAgICAgaWYgKCFwYXNzZWQpIHtcbiAgICAgICAgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgIGRvbmUoKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG5leHQoKTtcbiAgICB9KTtcbiAgfSwgKCkgPT4ge1xuICAgIHJldHVybiBjb250aW51YXRpb24oc3VjY2VzcywgLi4ucmVtYWluaW5nQXJndW1lbnRzKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNFdmVyeShhcnJheSwgY2FsbGJhY2ssIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICBsZXQgc3VjY2VzcyA9IHRydWU7XG5cbiAgY29uc3QgY29udGludWF0aW9uID0gcmVtYWluaW5nQXJndW1lbnRzLnBvcCgpO1xuXG4gIHJldHVybiBhc3luY2hyb25vdXNCYWNrd2FyZHNGb3JFYWNoKGFycmF5LCAoZWxlbWVudCwgbmV4dCwgZG9uZSkgPT4ge1xuICAgIHJldHVybiBjYWxsYmFjayhlbGVtZW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMsIChwYXNzZWQpID0+IHtcbiAgICAgIGlmICghcGFzc2VkKSB7XG4gICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICBkb25lKCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBuZXh0KCk7XG4gICAgfSk7XG4gIH0sICgpID0+IHtcbiAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNGb3JFYWNoKGFycmF5LCBjYWxsYmFjaywgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gIGNvbnN0IGNvbnRpbnVhdGlvbiA9IHJlbWFpbmluZ0FyZ3VtZW50cy5wb3AoKTtcblxuICByZXR1cm4gYXN5bmNocm9ub3VzRm9yd2FyZHNGb3JFYWNoKGFycmF5LCAoZWxlbWVudCwgbmV4dCwgZG9uZSkgPT4ge1xuICAgIHJldHVybiBjYWxsYmFjayhlbGVtZW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMsICgpID0+IHtcbiAgICAgIG5leHQoKTtcbiAgICB9KTtcbiAgfSwgKCkgPT4ge1xuICAgIHJldHVybiBjb250aW51YXRpb24oLi4ucmVtYWluaW5nQXJndW1lbnRzKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNGb3JFYWNoKGFycmF5LCBjYWxsYmFjaywgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gIGNvbnN0IGNvbnRpbnVhdGlvbiA9IHJlbWFpbmluZ0FyZ3VtZW50cy5wb3AoKTtcblxuICByZXR1cm4gYXN5bmNocm9ub3VzQmFja3dhcmRzRm9yRWFjaChhcnJheSwgKGVsZW1lbnQsIG5leHQsIGRvbmUpID0+IHtcbiAgICByZXR1cm4gY2FsbGJhY2soZWxlbWVudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzLCAoKSA9PiB7XG4gICAgICBuZXh0KCk7XG4gICAgfSk7XG4gIH0sICgpID0+IHtcbiAgICByZXR1cm4gY29udGludWF0aW9uKC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyKGFycmF5LCBjYWxsYmFjaywgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gIGNvbnN0IGRlbGV0ZWRFbGVtZW50cyA9IFtdO1xuXG4gIGNvbnN0IGNvbnRpbnVhdGlvbiA9IHJlbWFpbmluZ0FyZ3VtZW50cy5wb3AoKTtcblxuICBsZXQgaW5kZXggPSBhcnJheS5sZW5ndGg7XG5cbiAgcmV0dXJuIGJhY2t3YXJkc0ZvckVhY2goYXJyYXksIChlbGVtZW50LCBjb250aW51YXRpb24pID0+IHtcbiAgICBpbmRleC0tO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKGVsZW1lbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cywgKHBhc3NlZCkgPT4ge1xuICAgICAgaWYgKCFwYXNzZWQpIHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBpbmRleCwgIC8vL1xuICAgICAgICAgICAgICBkZWxldGVDb3VudCA9IDEsXG4gICAgICAgICAgICAgIGRlbGV0ZWRFbGVtZW50ID0gYXJyYXkuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCkucG9wKCk7ICAvLy9cblxuICAgICAgICBkZWxldGVkRWxlbWVudHMudW5zaGlmdChkZWxldGVkRWxlbWVudCk7ICAvLy9cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbigpO1xuICAgIH0pO1xuICB9LCAoKSA9PiB7XG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbihkZWxldGVkRWxlbWVudHMsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJ1bmUoYXJyYXksIGNhbGxiYWNrLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgbGV0IGRlbGV0ZWRFbGVtZW50ID0gdW5kZWZpbmVkOyAvLy9cblxuICBjb25zdCBjb250aW51YXRpb24gPSByZW1haW5pbmdBcmd1bWVudHMucG9wKCk7XG5cbiAgbGV0IGluZGV4ID0gLTE7XG5cbiAgcmV0dXJuIHNvbWUoYXJyYXksIChlbGVtZW50LCBjb250aW51YXRpb24pID0+IHtcbiAgICBpbmRleCsrO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKGVsZW1lbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cywgKHBhc3NlZCkgPT4ge1xuICAgICAgaWYgKCFwYXNzZWQpIHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBpbmRleCwgIC8vL1xuICAgICAgICAgICAgICBkZWxldGVDb3VudCA9IDE7XG5cbiAgICAgICAgZGVsZXRlZEVsZW1lbnQgPSBhcnJheS5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50KS5wb3AoKSAvLy9cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihwYXNzZWQpO1xuICAgIH0pO1xuICB9LCAoKSA9PiB7XG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbihkZWxldGVkRWxlbWVudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0KGFycmF5LCBjYWxsYmFjaywgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gIGxldCBkZWxldGVkRWxlbWVudCA9IHVuZGVmaW5lZDsgLy8vXG5cbiAgY29uc3QgY29udGludWF0aW9uID0gcmVtYWluaW5nQXJndW1lbnRzLnBvcCgpO1xuXG4gIGxldCBpbmRleCA9IC0xO1xuXG4gIHJldHVybiBzb21lKGFycmF5LCAoZWxlbWVudCwgY29udGludWF0aW9uKSA9PiB7XG4gICAgaW5kZXgrKztcblxuICAgIHJldHVybiBjYWxsYmFjayhlbGVtZW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMsIChwYXNzZWQpID0+IHtcbiAgICAgIGlmIChwYXNzZWQpIHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBpbmRleCwgIC8vL1xuICAgICAgICAgICAgICBkZWxldGVDb3VudCA9IDE7XG5cbiAgICAgICAgZGVsZXRlZEVsZW1lbnQgPSBhcnJheS5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50KS5wb3AoKSAvLy9cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihwYXNzZWQpO1xuICAgIH0pO1xuICB9LCAoKSA9PiB7XG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbihkZWxldGVkRWxlbWVudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlKGFycmF5QSwgYXJyYXlCLCBjYWxsYmFjaywgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gIGFycmF5QSA9IFsgIC8vL1xuICAgIC4uLmFycmF5QVxuICBdO1xuXG4gIGNvbnN0IGNvbnRpbnVhdGlvbiA9IHJlbWFpbmluZ0FyZ3VtZW50cy5wb3AoKTtcblxuICBmdW5jdGlvbiBuZXh0UGFzcygpIHtcbiAgICBjb25zdCBhcnJheUFMZW5ndGggPSBhcnJheUEubGVuZ3RoO1xuXG4gICAgaWYgKGFycmF5QUxlbmd0aCA9PT0gMCkge1xuICAgICAgY29uc3Qgc3VjY2VzcyA9IHRydWU7ICAvLy9cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpO1xuICAgIH1cblxuICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICBsZXQgY291bnQgPSAtMTtcblxuICAgIGZ1bmN0aW9uIG5leHRFbGVtZW50KCkge1xuICAgICAgY291bnQrKztcblxuICAgICAgY29uc3QgdGVybWluYXRlID0gKGNvdW50ID09PSBhcnJheUFMZW5ndGgpO1xuXG4gICAgICBpZiAodGVybWluYXRlKSB7XG4gICAgICAgIGlmICghc3VjY2Vzcykge1xuICAgICAgICAgIGNvbnN0IHN1Y2Nlc3MgPSBmYWxzZTsgLy8vXG5cbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG4gICAgICAgIH1cblxuICAgICAgICBhcnJheUZpbHRlcihhcnJheUEsIChlbGVtZW50QSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGFycmF5QkluY2x1ZGVzRWxlbWVudEEgPSBhcnJheUIuaW5jbHVkZXMoZWxlbWVudEEpO1xuXG4gICAgICAgICAgaWYgKCFhcnJheUJJbmNsdWRlc0VsZW1lbnRBKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIG5leHRQYXNzKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBpbmRleCA9IGNvdW50LCAgLy8vXG4gICAgICAgICAgICAgIGVsZW1lbnRBID0gYXJyYXlBW2luZGV4XTtcblxuICAgICAgICByZXR1cm4gY2FsbGJhY2soZWxlbWVudEEsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cywgKHBhc3NlZCkgPT4ge1xuICAgICAgICAgIGlmIChwYXNzZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRCID0gZWxlbWVudEE7ICAvLy9cblxuICAgICAgICAgICAgYXJyYXlCLnB1c2goZWxlbWVudEIpO1xuXG4gICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBuZXh0RWxlbWVudCgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBuZXh0RWxlbWVudCgpO1xuICB9XG5cbiAgbmV4dFBhc3MoKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBvbmUsXG4gIHNvbWUsXG4gIGVhY2gsXG4gIGV2ZXJ5LFxuICBtYXRjaCxcbiAgcmVkdWNlLFxuICBmb3JFYWNoLFxuICBmb3J3YXJkc0V2ZXJ5LFxuICBiYWNrd2FyZHNFdmVyeSxcbiAgZm9yd2FyZHNGb3JFYWNoLFxuICBiYWNrd2FyZHNGb3JFYWNoLFxuICBmaWx0ZXIsXG4gIHBydW5lLFxuICBleHRyYWN0LFxuICByZXNvbHZlXG59O1xuIl0sIm5hbWVzIjpbImJhY2t3YXJkc0V2ZXJ5IiwiYmFja3dhcmRzRm9yRWFjaCIsImVhY2giLCJldmVyeSIsImV4dHJhY3QiLCJmaWx0ZXIiLCJmb3JFYWNoIiwiZm9yd2FyZHNFdmVyeSIsImZvcndhcmRzRm9yRWFjaCIsIm1hdGNoIiwib25lIiwicHJ1bmUiLCJyZWR1Y2UiLCJyZXNvbHZlIiwic29tZSIsImFycmF5RmlsdGVyIiwiYXJyYXlVdGlsaXRpZXMiLCJhc3luY2hyb25vdXNGb3JFYWNoIiwiYXN5bmNocm9ub3VzRm9yd2FyZHNGb3JFYWNoIiwiYXN5bmNocm9ub3VzQmFja3dhcmRzRm9yRWFjaCIsImFzeW5jaHJvbm91c1V0aWxpdGllcyIsImFycmF5IiwiY2FsbGJhY2siLCJyZW1haW5pbmdBcmd1bWVudHMiLCJmb3VuZCIsImNvbnRpbnVhdGlvbiIsInBvcCIsImVsZW1lbnQiLCJuZXh0IiwiZG9uZSIsInBhc3NlZCIsInN1Y2Nlc3MiLCJhcnJheUEiLCJhcnJheUIiLCJhcnJheUFMZW5ndGgiLCJsZW5ndGgiLCJhcnJheUJMZW5ndGgiLCJtYXRjaGVzIiwiaW5kZXgiLCJlbGVtZW50QSIsImVsZW1lbnRCIiwiaW5pdGlhbFZhbHVlIiwidmFsdWUiLCJjdXJyZW50VmFsdWUiLCJkZWxldGVkRWxlbWVudHMiLCJzdGFydCIsImRlbGV0ZUNvdW50IiwiZGVsZXRlZEVsZW1lbnQiLCJzcGxpY2UiLCJ1bnNoaWZ0IiwidW5kZWZpbmVkIiwibmV4dFBhc3MiLCJjb3VudCIsIm5leHRFbGVtZW50IiwidGVybWluYXRlIiwiYXJyYXlCSW5jbHVkZXNFbGVtZW50QSIsImluY2x1ZGVzIiwicHVzaCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O1FBbUxnQkE7ZUFBQUE7O1FBa0NBQztlQUFBQTs7UUF5SmhCO2VBQUE7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
|
|
406
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvY29udGludWF0aW9uLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcywgYXN5bmNocm9ub3VzVXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5jb25zdCB7IGZpbHRlcjogYXJyYXlGaWx0ZXIgfSA9IGFycmF5VXRpbGl0aWVzLFxuICAgICAgeyBmb3JFYWNoOiBhc3luY2hyb25vdXNGb3JFYWNoLFxuICAgICAgICBmb3J3YXJkc0ZvckVhY2g6IGFzeW5jaHJvbm91c0ZvcndhcmRzRm9yRWFjaCxcbiAgICAgICAgYmFja3dhcmRzRm9yRWFjaDogYXN5bmNocm9ub3VzQmFja3dhcmRzRm9yRWFjaCB9ID0gYXN5bmNocm9ub3VzVXRpbGl0aWVzO1xuXG5leHBvcnQgZnVuY3Rpb24gb25lKGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gIGNvbnN0IGNvbnRpbnVhdGlvbiA9IGluaXRpYWxBcmd1bWVudHMucG9wKCk7XG5cbiAgbGV0IGludGVybWVkaWF0ZUFyZ3VtZW50cyA9IGluaXRpYWxBcmd1bWVudHM7ICAvLy9cblxuICByZXR1cm4gYXN5bmNocm9ub3VzRm9yRWFjaChhcnJheSwgKGVsZW1lbnQsIG5leHQsIGRvbmUpID0+IHtcbiAgICByZXR1cm4gY2FsbGJhY2soZWxlbWVudCwgLi4uaW50ZXJtZWRpYXRlQXJndW1lbnRzLCAoLi4uY2FsbGJhY2tBcmd1bWVudHMpID0+IHtcbiAgICAgIGNvbnN0IHBhc3NlZCA9IGNhbGxiYWNrQXJndW1lbnRzLnNoaWZ0KCk7XG5cbiAgICAgIGludGVybWVkaWF0ZUFyZ3VtZW50cyA9IGNhbGxiYWNrQXJndW1lbnRzOyAgLy8vXG5cbiAgICAgIGlmIChwYXNzZWQpIHtcbiAgICAgICAgaWYgKCFzdWNjZXNzKSB7XG4gICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgICAgZG9uZSgpO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG5leHQoKTtcbiAgICB9KTtcbiAgfSwgKCkgPT4ge1xuICAgIGNvbnN0IGZpbmFsQXJndW1lbnRzID0gaW50ZXJtZWRpYXRlQXJndW1lbnRzOyAvLy9cblxuICAgIHJldHVybiBjb250aW51YXRpb24oc3VjY2VzcywgLi4uZmluYWxBcmd1bWVudHMpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNvbWUoYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgY29uc3QgY29udGludWF0aW9uID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKTtcblxuICBsZXQgaW50ZXJtZWRpYXRlQXJndW1lbnRzID0gaW5pdGlhbEFyZ3VtZW50czsgLy8vXG5cbiAgcmV0dXJuIGFzeW5jaHJvbm91c0ZvckVhY2goYXJyYXksIChlbGVtZW50LCBuZXh0LCBkb25lKSA9PiB7XG4gICAgcmV0dXJuIGNhbGxiYWNrKGVsZW1lbnQsIC4uLmludGVybWVkaWF0ZUFyZ3VtZW50cywgKC4uLmNhbGxiYWNrQXJndW1lbnRzKSA9PiB7XG4gICAgICBjb25zdCBwYXNzZWQgPSBjYWxsYmFja0FyZ3VtZW50cy5zaGlmdCgpO1xuXG4gICAgICBpbnRlcm1lZGlhdGVBcmd1bWVudHMgPSBjYWxsYmFja0FyZ3VtZW50czsgIC8vL1xuXG4gICAgICBpZiAocGFzc2VkKSB7XG4gICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuXG4gICAgICAgIGRvbmUoKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG5leHQoKTtcbiAgICB9KTtcbiAgfSwgKCkgPT4ge1xuICAgIGNvbnN0IGZpbmFsQXJndW1lbnRzID0gaW50ZXJtZWRpYXRlQXJndW1lbnRzOyAvLy9cblxuICAgIHJldHVybiBjb250aW51YXRpb24oc3VjY2VzcywgLi4uZmluYWxBcmd1bWVudHMpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVhY2goYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgY29uc3QgY29udGludWF0aW9uID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKTtcblxuICBsZXQgaW50ZXJtZWRpYXRlQXJndW1lbnRzID0gaW5pdGlhbEFyZ3VtZW50czsgLy8vXG5cbiAgcmV0dXJuIGFzeW5jaHJvbm91c0ZvckVhY2goYXJyYXksIChlbGVtZW50LCBuZXh0LCBkb25lKSA9PiB7XG4gICAgcmV0dXJuIGNhbGxiYWNrKGVsZW1lbnQsIC4uLmludGVybWVkaWF0ZUFyZ3VtZW50cywgKC4uLmNhbGxiYWNrQXJndW1lbnRzKSA9PiB7XG4gICAgICBjb25zdCBwYXNzZWQgPSBjYWxsYmFja0FyZ3VtZW50cy5zaGlmdCgpO1xuXG4gICAgICBpbnRlcm1lZGlhdGVBcmd1bWVudHMgPSBjYWxsYmFja0FyZ3VtZW50czsgIC8vL1xuXG4gICAgICBpZiAocGFzc2VkKSB7XG4gICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgIGRvbmUoKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG5leHQoKTtcbiAgICB9KTtcbiAgfSwgKCkgPT4ge1xuICAgIGNvbnN0IGZpbmFsQXJndW1lbnRzID0gaW50ZXJtZWRpYXRlQXJndW1lbnRzOyAvLy9cblxuICAgIHJldHVybiBjb250aW51YXRpb24oc3VjY2VzcywgLi4uZmluYWxBcmd1bWVudHMpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV2ZXJ5KGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBsZXQgc3VjY2VzcyA9IHRydWU7XG5cbiAgY29uc3QgY29udGludWF0aW9uID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKTtcblxuICBsZXQgaW50ZXJtZWRpYXRlQXJndW1lbnRzID0gaW5pdGlhbEFyZ3VtZW50czsgLy8vXG5cbiAgcmV0dXJuIGFzeW5jaHJvbm91c0ZvckVhY2goYXJyYXksIChlbGVtZW50LCBuZXh0LCBkb25lKSA9PiB7XG4gICAgcmV0dXJuIGNhbGxiYWNrKGVsZW1lbnQsIC4uLmludGVybWVkaWF0ZUFyZ3VtZW50cywgKC4uLmNhbGxiYWNrQXJndW1lbnRzKSA9PiB7XG4gICAgICBjb25zdCBwYXNzZWQgPSBjYWxsYmFja0FyZ3VtZW50cy5zaGlmdCgpO1xuXG4gICAgICBpbnRlcm1lZGlhdGVBcmd1bWVudHMgPSBjYWxsYmFja0FyZ3VtZW50czsgIC8vL1xuXG4gICAgICBpZiAoIXBhc3NlZCkge1xuICAgICAgICBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgZG9uZSgpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbmV4dCgpO1xuICAgIH0pO1xuICB9LCAoKSA9PiB7XG4gICAgY29uc3QgZmluYWxBcmd1bWVudHMgPSBpbnRlcm1lZGlhdGVBcmd1bWVudHM7IC8vL1xuXG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzLCAuLi5maW5hbEFyZ3VtZW50cyk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVkdWNlKGFycmF5LCBpbml0aWFsVmFsdWUsIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGxldCB2YWx1ZSA9IGluaXRpYWxWYWx1ZTsgLy8vXG5cbiAgY29uc3QgY29udGludWF0aW9uID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKTtcblxuICBsZXQgaW50ZXJtZWRpYXRlQXJndW1lbnRzID0gaW5pdGlhbEFyZ3VtZW50czsgLy8vXG5cbiAgcmV0dXJuIGFzeW5jaHJvbm91c0ZvckVhY2goYXJyYXksIChlbGVtZW50LCBuZXh0LCBkb25lKSA9PiB7XG4gICAgcmV0dXJuIGNhbGxiYWNrKHZhbHVlLCBlbGVtZW50LCAuLi5pbnRlcm1lZGlhdGVBcmd1bWVudHMsICguLi5jYWxsYmFja0FyZ3VtZW50cykgPT4ge1xuICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gY2FsbGJhY2tBcmd1bWVudHMuc2hpZnQoKTtcblxuICAgICAgaW50ZXJtZWRpYXRlQXJndW1lbnRzID0gY2FsbGJhY2tBcmd1bWVudHM7ICAvLy9cblxuICAgICAgdmFsdWUgPSBjdXJyZW50VmFsdWU7ICAvLy9cblxuICAgICAgbmV4dCgpO1xuICAgIH0pO1xuICB9LCAoKSA9PiB7XG4gICAgY29uc3QgZmluYWxBcmd1bWVudHMgPSBpbnRlcm1lZGlhdGVBcmd1bWVudHM7IC8vL1xuXG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2YWx1ZSwgLi4uZmluYWxBcmd1bWVudHMpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvckVhY2goYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGNvbnRpbnVhdGlvbiA9IGluaXRpYWxBcmd1bWVudHMucG9wKCk7XG5cbiAgbGV0IGludGVybWVkaWF0ZUFyZ3VtZW50cyA9IGluaXRpYWxBcmd1bWVudHM7IC8vL1xuXG4gIHJldHVybiBhc3luY2hyb25vdXNGb3JFYWNoKGFycmF5LCAoZWxlbWVudCwgbmV4dCwgZG9uZSkgPT4ge1xuICAgIHJldHVybiBjYWxsYmFjayhlbGVtZW50LCAuLi5pbnRlcm1lZGlhdGVBcmd1bWVudHMsICguLi5jYWxsYmFja0FyZ3VtZW50cykgPT4ge1xuICAgICAgaW50ZXJtZWRpYXRlQXJndW1lbnRzID0gY2FsbGJhY2tBcmd1bWVudHM7ICAvLy9cblxuICAgICAgbmV4dCgpO1xuICAgIH0pO1xuICB9LCAoKSA9PiB7XG4gICAgY29uc3QgZmluYWxBcmd1bWVudHMgPSBpbnRlcm1lZGlhdGVBcmd1bWVudHM7IC8vL1xuXG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbiguLi5maW5hbEFyZ3VtZW50cyk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNFdmVyeShhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgbGV0IHN1Y2Nlc3MgPSB0cnVlO1xuXG4gIGNvbnN0IGNvbnRpbnVhdGlvbiA9IGluaXRpYWxBcmd1bWVudHMucG9wKCk7XG5cbiAgbGV0IGludGVybWVkaWF0ZUFyZ3VtZW50cyA9IGluaXRpYWxBcmd1bWVudHM7IC8vL1xuXG4gIHJldHVybiBhc3luY2hyb25vdXNGb3J3YXJkc0ZvckVhY2goYXJyYXksIChlbGVtZW50LCBuZXh0LCBkb25lKSA9PiB7XG4gICAgcmV0dXJuIGNhbGxiYWNrKGVsZW1lbnQsIC4uLmludGVybWVkaWF0ZUFyZ3VtZW50cywgKC4uLmNhbGxiYWNrQXJndW1lbnRzKSA9PiB7XG4gICAgICBjb25zdCBwYXNzZWQgPSBjYWxsYmFja0FyZ3VtZW50cy5zaGlmdCgpO1xuXG4gICAgICBpbnRlcm1lZGlhdGVBcmd1bWVudHMgPSBjYWxsYmFja0FyZ3VtZW50czsgIC8vL1xuXG4gICAgICBpZiAoIXBhc3NlZCkge1xuICAgICAgICBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgZG9uZSgpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbmV4dCgpO1xuICAgIH0pO1xuICB9LCAoKSA9PiB7XG4gICAgY29uc3QgZmluYWxBcmd1bWVudHMgPSBpbnRlcm1lZGlhdGVBcmd1bWVudHM7IC8vL1xuXG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzLCAuLi5maW5hbEFyZ3VtZW50cyk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFja3dhcmRzRXZlcnkoYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGxldCBzdWNjZXNzID0gdHJ1ZTtcblxuICBjb25zdCBjb250aW51YXRpb24gPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpO1xuXG4gIGxldCBpbnRlcm1lZGlhdGVBcmd1bWVudHMgPSBpbml0aWFsQXJndW1lbnRzOyAvLy9cblxuICByZXR1cm4gYXN5bmNocm9ub3VzQmFja3dhcmRzRm9yRWFjaChhcnJheSwgKGVsZW1lbnQsIG5leHQsIGRvbmUpID0+IHtcbiAgICByZXR1cm4gY2FsbGJhY2soZWxlbWVudCwgLi4uaW50ZXJtZWRpYXRlQXJndW1lbnRzLCAoLi4uY2FsbGJhY2tBcmd1bWVudHMpID0+IHtcbiAgICAgIGNvbnN0IHBhc3NlZCA9IGNhbGxiYWNrQXJndW1lbnRzLnNoaWZ0KCk7XG5cbiAgICAgIGludGVybWVkaWF0ZUFyZ3VtZW50cyA9IGNhbGxiYWNrQXJndW1lbnRzOyAgLy8vXG5cbiAgICAgIGlmICghcGFzc2VkKSB7XG4gICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICBkb25lKCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBuZXh0KCk7XG4gICAgfSk7XG4gIH0sICgpID0+IHtcbiAgICBjb25zdCBmaW5hbEFyZ3VtZW50cyA9IGludGVybWVkaWF0ZUFyZ3VtZW50czsgLy8vXG5cbiAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MsIC4uLmZpbmFsQXJndW1lbnRzKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3J3YXJkc0ZvckVhY2goYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGNvbnRpbnVhdGlvbiA9IGluaXRpYWxBcmd1bWVudHMucG9wKCk7XG5cbiAgbGV0IGludGVybWVkaWF0ZUFyZ3VtZW50cyA9IGluaXRpYWxBcmd1bWVudHM7IC8vL1xuXG4gIHJldHVybiBhc3luY2hyb25vdXNGb3J3YXJkc0ZvckVhY2goYXJyYXksIChlbGVtZW50LCBuZXh0LCBkb25lKSA9PiB7XG4gICAgcmV0dXJuIGNhbGxiYWNrKGVsZW1lbnQsIC4uLmludGVybWVkaWF0ZUFyZ3VtZW50cywgKC4uLmNhbGxiYWNrQXJndW1lbnRzKSA9PiB7XG4gICAgICBpbnRlcm1lZGlhdGVBcmd1bWVudHMgPSBjYWxsYmFja0FyZ3VtZW50czsgIC8vL1xuXG4gICAgICBuZXh0KCk7XG4gICAgfSk7XG4gIH0sICgpID0+IHtcbiAgICBjb25zdCBmaW5hbEFyZ3VtZW50cyA9IGludGVybWVkaWF0ZUFyZ3VtZW50czsgLy8vXG5cbiAgICByZXR1cm4gY29udGludWF0aW9uKC4uLmZpbmFsQXJndW1lbnRzKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNGb3JFYWNoKGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBjb250aW51YXRpb24gPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpO1xuXG4gIGxldCBpbnRlcm1lZGlhdGVBcmd1bWVudHMgPSBpbml0aWFsQXJndW1lbnRzOyAvLy9cblxuICByZXR1cm4gYXN5bmNocm9ub3VzQmFja3dhcmRzRm9yRWFjaChhcnJheSwgKGVsZW1lbnQsIG5leHQsIGRvbmUpID0+IHtcbiAgICByZXR1cm4gY2FsbGJhY2soZWxlbWVudCwgLi4uaW50ZXJtZWRpYXRlQXJndW1lbnRzLCAoLi4uY2FsbGJhY2tBcmd1bWVudHMpID0+IHtcbiAgICAgIGludGVybWVkaWF0ZUFyZ3VtZW50cyA9IGNhbGxiYWNrQXJndW1lbnRzOyAgLy8vXG5cbiAgICAgIG5leHQoKTtcbiAgICB9KTtcbiAgfSwgKCkgPT4ge1xuICAgIGNvbnN0IGZpbmFsQXJndW1lbnRzID0gaW50ZXJtZWRpYXRlQXJndW1lbnRzOyAvLy9cblxuICAgIHJldHVybiBjb250aW51YXRpb24oLi4uZmluYWxBcmd1bWVudHMpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlcihhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgZGVsZXRlZEVsZW1lbnRzID0gW107XG5cbiAgY29uc3QgY29udGludWF0aW9uID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKTtcblxuICBsZXQgaW50ZXJtZWRpYXRlQXJndW1lbnRzID0gaW5pdGlhbEFyZ3VtZW50czsgLy8vXG5cbiAgbGV0IGluZGV4ID0gYXJyYXkubGVuZ3RoO1xuXG4gIHJldHVybiBhc3luY2hyb25vdXNCYWNrd2FyZHNGb3JFYWNoKGFycmF5LCAoZWxlbWVudCwgbmV4dCwgZG9uZSkgPT4ge1xuICAgIGluZGV4LS07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soZWxlbWVudCwgLi4uaW50ZXJtZWRpYXRlQXJndW1lbnRzLCAoLi4uY2FsbGJhY2tBcmd1bWVudHMpID0+IHtcbiAgICAgIGNvbnN0IHBhc3NlZCA9IGNhbGxiYWNrQXJndW1lbnRzLnNoaWZ0KCk7XG5cbiAgICAgIGludGVybWVkaWF0ZUFyZ3VtZW50cyA9IGNhbGxiYWNrQXJndW1lbnRzOyAvLy9cblxuICAgICAgaWYgKCFwYXNzZWQpIHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBpbmRleCwgIC8vL1xuICAgICAgICAgICAgICBkZWxldGVDb3VudCA9IDEsXG4gICAgICAgICAgICAgIGRlbGV0ZWRFbGVtZW50ID0gYXJyYXkuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCkucG9wKCk7ICAvLy9cblxuICAgICAgICBkZWxldGVkRWxlbWVudHMudW5zaGlmdChkZWxldGVkRWxlbWVudCk7ICAvLy9cbiAgICAgIH1cblxuICAgICAgbmV4dCgpO1xuICAgIH0pO1xuICB9LCAoKSA9PiB7XG4gICAgY29uc3QgZmluYWxBcmd1bWVudHMgPSBpbnRlcm1lZGlhdGVBcmd1bWVudHM7IC8vL1xuXG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbihkZWxldGVkRWxlbWVudHMsIC4uLmZpbmFsQXJndW1lbnRzKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcnVuZShhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgbGV0IGRlbGV0ZWRFbGVtZW50ID0gdW5kZWZpbmVkOyAvLy9cblxuICBjb25zdCBjb250aW51YXRpb24gPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpO1xuXG4gIGxldCBpbnRlcm1lZGlhdGVBcmd1bWVudHMgPSBpbml0aWFsQXJndW1lbnRzOyAvLy9cblxuICBsZXQgaW5kZXggPSAtMTtcblxuICByZXR1cm4gYXN5bmNocm9ub3VzRm9yRWFjaChhcnJheSwgKGVsZW1lbnQsIG5leHQsIGRvbmUpID0+IHtcbiAgICBpbmRleCsrO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKGVsZW1lbnQsIC4uLmludGVybWVkaWF0ZUFyZ3VtZW50cywgKC4uLmNhbGxiYWNrQXJndW1lbnRzKSA9PiB7XG4gICAgICBjb25zdCBwYXNzZWQgPSBjYWxsYmFja0FyZ3VtZW50cy5zaGlmdCgpO1xuXG4gICAgICBpbnRlcm1lZGlhdGVBcmd1bWVudHMgPSBjYWxsYmFja0FyZ3VtZW50czsgLy8vXG5cbiAgICAgIGlmICghcGFzc2VkKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gaW5kZXgsICAvLy9cbiAgICAgICAgICAgICAgZGVsZXRlQ291bnQgPSAxO1xuXG4gICAgICAgIGRlbGV0ZWRFbGVtZW50ID0gYXJyYXkuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCkucG9wKCk7IC8vL1xuXG4gICAgICAgIGRvbmUoKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG5leHQoKTtcbiAgICB9KTtcbiAgfSwgKCkgPT4ge1xuICAgIGNvbnN0IGZpbmFsQXJndW1lbnRzID0gaW50ZXJtZWRpYXRlQXJndW1lbnRzOyAvLy9cblxuICAgIHJldHVybiBjb250aW51YXRpb24oZGVsZXRlZEVsZW1lbnQsIC4uLmZpbmFsQXJndW1lbnRzKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0KGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBsZXQgZGVsZXRlZEVsZW1lbnQgPSB1bmRlZmluZWQ7IC8vL1xuXG4gIGNvbnN0IGNvbnRpbnVhdGlvbiA9IGluaXRpYWxBcmd1bWVudHMucG9wKCk7XG5cbiAgbGV0IGludGVybWVkaWF0ZUFyZ3VtZW50cyA9IGluaXRpYWxBcmd1bWVudHM7IC8vL1xuXG4gIGxldCBpbmRleCA9IC0xO1xuXG4gIHJldHVybiBhc3luY2hyb25vdXNGb3JFYWNoKGFycmF5LCAoZWxlbWVudCwgbmV4dCwgZG9uZSkgPT4ge1xuICAgIGluZGV4Kys7XG5cbiAgICByZXR1cm4gY2FsbGJhY2soZWxlbWVudCwgLi4uaW50ZXJtZWRpYXRlQXJndW1lbnRzLCAoLi4uY2FsbGJhY2tBcmd1bWVudHMpID0+IHtcbiAgICAgIGNvbnN0IHBhc3NlZCA9IGNhbGxiYWNrQXJndW1lbnRzLnNoaWZ0KCk7XG5cbiAgICAgIGludGVybWVkaWF0ZUFyZ3VtZW50cyA9IGNhbGxiYWNrQXJndW1lbnRzOyAvLy9cblxuICAgICAgaWYgKHBhc3NlZCkge1xuICAgICAgICBjb25zdCBzdGFydCA9IGluZGV4LCAgLy8vXG4gICAgICAgICAgICAgIGRlbGV0ZUNvdW50ID0gMTtcblxuICAgICAgICBkZWxldGVkRWxlbWVudCA9IGFycmF5LnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQpLnBvcCgpOyAvLy9cblxuICAgICAgICBkb25lKCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBuZXh0KCk7XG4gICAgfSk7XG4gIH0sICgpID0+IHtcbiAgICBjb25zdCBmaW5hbEFyZ3VtZW50cyA9IGludGVybWVkaWF0ZUFyZ3VtZW50czsgLy8vXG5cbiAgICByZXR1cm4gY29udGludWF0aW9uKGRlbGV0ZWRFbGVtZW50LCAuLi5maW5hbEFyZ3VtZW50cyk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2goYXJyYXlBLCBhcnJheUIsIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGxldCBzdWNjZXNzID0gdHJ1ZTtcblxuICBjb25zdCBjb250aW51YXRpb24gPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpO1xuXG4gIGNvbnN0IGFycmF5QUxlbmd0aCA9IGFycmF5QS5sZW5ndGgsXG4gICAgICAgIGFycmF5Qkxlbmd0aCA9IGFycmF5Qi5sZW5ndGg7XG5cbiAgaWYgKGFycmF5QUxlbmd0aCAhPT0gYXJyYXlCTGVuZ3RoKSB7XG4gICAgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzLCAuLi5pbml0aWFsQXJndW1lbnRzKTtcbiAgfVxuXG4gIGxldCBpbmRleCA9IC0xO1xuXG4gIGxldCBpbnRlcm1lZGlhdGVBcmd1bWVudHMgPSBpbml0aWFsQXJndW1lbnRzOyAvLy9cblxuICByZXR1cm4gYXN5bmNocm9ub3VzRm9yRWFjaChhcnJheUEsIChlbGVtZW50QSwgbmV4dCwgZG9uZSkgPT4ge1xuICAgIGluZGV4Kys7XG5cbiAgICBjb25zdCBlbGVtZW50QiA9IGFycmF5QltpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soZWxlbWVudEEsIGVsZW1lbnRCLCAuLi5pbnRlcm1lZGlhdGVBcmd1bWVudHMsICguLi5jYWxsYmFja0FyZ3VtZW50cykgPT4ge1xuICAgICAgY29uc3QgcGFzc2VkID0gY2FsbGJhY2tBcmd1bWVudHMuc2hpZnQoKTtcblxuICAgICAgaW50ZXJtZWRpYXRlQXJndW1lbnRzID0gY2FsbGJhY2tBcmd1bWVudHM7ICAvLy9cblxuICAgICAgaWYgKCFwYXNzZWQpIHtcbiAgICAgICAgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgIGRvbmUoKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG5leHQoKTtcbiAgICB9KTtcbiAgfSwgKCkgPT4ge1xuICAgIGNvbnN0IGZpbmFsQXJndW1lbnRzID0gaW50ZXJtZWRpYXRlQXJndW1lbnRzOyAvLy9cblxuICAgIHJldHVybiBjb250aW51YXRpb24oc3VjY2VzcywgLi4uZmluYWxBcmd1bWVudHMpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmUoYXJyYXlBLCBhcnJheUIsIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGFycmF5QSA9IFsgIC8vL1xuICAgIC4uLmFycmF5QVxuICBdO1xuXG4gIGNvbnN0IGNvbnRpbnVhdGlvbiA9IGluaXRpYWxBcmd1bWVudHMucG9wKCk7XG5cbiAgbGV0IGludGVybWVkaWF0ZUFyZ3VtZW50cyA9IGluaXRpYWxBcmd1bWVudHM7IC8vL1xuXG4gIGZ1bmN0aW9uIG5leHRQYXNzKCkge1xuICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICBjb25zdCBhcnJheUFMZW5ndGggPSBhcnJheUEubGVuZ3RoO1xuXG4gICAgaWYgKGFycmF5QUxlbmd0aCA9PT0gMCkge1xuICAgICAgc3VjY2VzcyA9IHRydWU7XG5cbiAgICAgIGNvbnN0IGZpbmFsQXJndW1lbnRzID0gaW50ZXJtZWRpYXRlQXJndW1lbnRzOyAvLy9cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzLCAuLi5maW5hbEFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgbGV0IGluZGV4ID0gLTE7XG5cbiAgICBmdW5jdGlvbiBuZXh0RWxlbWVudCgpIHtcbiAgICAgIGluZGV4Kys7XG5cbiAgICAgIGNvbnN0IHRlcm1pbmF0ZSA9IChpbmRleCA9PT0gYXJyYXlBTGVuZ3RoKTtcblxuICAgICAgaWYgKHRlcm1pbmF0ZSkge1xuICAgICAgICBpZiAoIXN1Y2Nlc3MpIHtcbiAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgICBjb25zdCBmaW5hbEFyZ3VtZW50cyA9IGludGVybWVkaWF0ZUFyZ3VtZW50czsgLy8vXG5cbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MsIC4uLmZpbmFsQXJndW1lbnRzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFycmF5RmlsdGVyKGFycmF5QSwgKGVsZW1lbnRBKSA9PiB7XG4gICAgICAgICAgY29uc3QgYXJyYXlCSW5jbHVkZXNFbGVtZW50QSA9IGFycmF5Qi5pbmNsdWRlcyhlbGVtZW50QSk7XG5cbiAgICAgICAgICBpZiAoIWFycmF5QkluY2x1ZGVzRWxlbWVudEEpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgbmV4dFBhc3MoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRBID0gYXJyYXlBW2luZGV4XTtcblxuICAgICAgICByZXR1cm4gY2FsbGJhY2soZWxlbWVudEEsIC4uLmludGVybWVkaWF0ZUFyZ3VtZW50cywgKC4uLmNhbGxiYWNrQXJndW1lbnRzKSA9PiB7XG4gICAgICAgICAgY29uc3QgcGFzc2VkID0gY2FsbGJhY2tBcmd1bWVudHMuc2hpZnQoKTtcblxuICAgICAgICAgIGludGVybWVkaWF0ZUFyZ3VtZW50cyA9IGNhbGxiYWNrQXJndW1lbnRzOyAgLy8vXG5cbiAgICAgICAgICBpZiAocGFzc2VkKSB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50QiA9IGVsZW1lbnRBOyAgLy8vXG5cbiAgICAgICAgICAgIGFycmF5Qi5wdXNoKGVsZW1lbnRCKTtcblxuICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmV4dEVsZW1lbnQoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbmV4dEVsZW1lbnQoKTtcbiAgfVxuXG4gIG5leHRQYXNzKCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgb25lLFxuICBzb21lLFxuICBlYWNoLFxuICBldmVyeSxcbiAgcmVkdWNlLFxuICBmb3JFYWNoLFxuICBmb3J3YXJkc0V2ZXJ5LFxuICBiYWNrd2FyZHNFdmVyeSxcbiAgZm9yd2FyZHNGb3JFYWNoLFxuICBiYWNrd2FyZHNGb3JFYWNoLFxuICBmaWx0ZXIsXG4gIHBydW5lLFxuICBleHRyYWN0LFxuICBtYXRjaCxcbiAgcmVzb2x2ZVxufTtcbiJdLCJuYW1lcyI6WyJiYWNrd2FyZHNFdmVyeSIsImJhY2t3YXJkc0ZvckVhY2giLCJlYWNoIiwiZXZlcnkiLCJleHRyYWN0IiwiZmlsdGVyIiwiZm9yRWFjaCIsImZvcndhcmRzRXZlcnkiLCJmb3J3YXJkc0ZvckVhY2giLCJtYXRjaCIsIm9uZSIsInBydW5lIiwicmVkdWNlIiwicmVzb2x2ZSIsInNvbWUiLCJhcnJheUZpbHRlciIsImFycmF5VXRpbGl0aWVzIiwiYXN5bmNocm9ub3VzRm9yRWFjaCIsImFzeW5jaHJvbm91c0ZvcndhcmRzRm9yRWFjaCIsImFzeW5jaHJvbm91c0JhY2t3YXJkc0ZvckVhY2giLCJhc3luY2hyb25vdXNVdGlsaXRpZXMiLCJhcnJheSIsImNhbGxiYWNrIiwiaW5pdGlhbEFyZ3VtZW50cyIsInN1Y2Nlc3MiLCJjb250aW51YXRpb24iLCJwb3AiLCJpbnRlcm1lZGlhdGVBcmd1bWVudHMiLCJlbGVtZW50IiwibmV4dCIsImRvbmUiLCJjYWxsYmFja0FyZ3VtZW50cyIsInBhc3NlZCIsInNoaWZ0IiwiZmluYWxBcmd1bWVudHMiLCJpbml0aWFsVmFsdWUiLCJ2YWx1ZSIsImN1cnJlbnRWYWx1ZSIsImRlbGV0ZWRFbGVtZW50cyIsImluZGV4IiwibGVuZ3RoIiwic3RhcnQiLCJkZWxldGVDb3VudCIsImRlbGV0ZWRFbGVtZW50Iiwic3BsaWNlIiwidW5zaGlmdCIsInVuZGVmaW5lZCIsImFycmF5QSIsImFycmF5QiIsImFycmF5QUxlbmd0aCIsImFycmF5Qkxlbmd0aCIsImVsZW1lbnRBIiwiZWxlbWVudEIiLCJuZXh0UGFzcyIsIm5leHRFbGVtZW50IiwidGVybWluYXRlIiwiYXJyYXlCSW5jbHVkZXNFbGVtZW50QSIsImluY2x1ZGVzIiwicHVzaCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O1FBK01nQkE7ZUFBQUE7O1FBZ0RBQztlQUFBQTs7UUFxUGhCO2VBQUE7O1FBM2FnQkM7ZUFBQUE7O1FBZ0NBQztlQUFBQTs7UUErT0FDO2VBQUFBOztRQXZFQUM7ZUFBQUE7O1FBbEhBQztl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
|
package/package.json
CHANGED
package/src/index.js
CHANGED
|
@@ -7,7 +7,6 @@ export { default as BreakPoint } from "./breakPoint";
|
|
|
7
7
|
export { default as FileContext } from "./context/file";
|
|
8
8
|
export { default as ReleaseContext } from "./context/release";
|
|
9
9
|
|
|
10
|
-
export { default as EquivalencePass } from "./pass/equivalence";
|
|
11
10
|
export { default as ContinuationPass } from "./pass/continuation";
|
|
12
11
|
export { default as ContinuationZipPass } from "./pass/continuationZip";
|
|
13
12
|
|
package/src/pass/continuation.js
CHANGED
|
@@ -13,13 +13,12 @@ export default class ContinuationPass {
|
|
|
13
13
|
descend(childNodes, ...remainingArguments) {
|
|
14
14
|
const continuation = remainingArguments.pop();
|
|
15
15
|
|
|
16
|
-
return every(childNodes, (childNode,
|
|
17
|
-
const
|
|
16
|
+
return every(childNodes, (childNode, ...remainingArguments) => {
|
|
17
|
+
const continuation = remainingArguments.pop(),
|
|
18
|
+
node = childNode; ///
|
|
18
19
|
|
|
19
20
|
return this.visitNode(node, ...remainingArguments, continuation);
|
|
20
|
-
},
|
|
21
|
-
return continuation(descended, ...remainingArguments);
|
|
22
|
-
});
|
|
21
|
+
}, ...remainingArguments, continuation);
|
|
23
22
|
}
|
|
24
23
|
|
|
25
24
|
visitNode(node, ...remainingArguments) {
|
|
@@ -22,17 +22,16 @@ export default class ContinuationZipPass {
|
|
|
22
22
|
|
|
23
23
|
let index = -1;
|
|
24
24
|
|
|
25
|
-
return every(generalChildNodes, (generalChildNode,
|
|
25
|
+
return every(generalChildNodes, (generalChildNode, ...remainingArguments) => {
|
|
26
26
|
index++;
|
|
27
27
|
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
generalNode = generalChildNode
|
|
28
|
+
const continuation = remainingArguments.pop(),
|
|
29
|
+
specificChildNode = specificChildNodes[index],
|
|
30
|
+
generalNode = generalChildNode, ///
|
|
31
|
+
specificNode = specificChildNode; ///
|
|
31
32
|
|
|
32
33
|
return this.visitNode(generalNode, specificNode, ...remainingArguments, continuation);
|
|
33
|
-
},
|
|
34
|
-
return continuation(descended, ...remainingArguments);
|
|
35
|
-
});
|
|
34
|
+
}, ...remainingArguments, continuation);
|
|
36
35
|
}
|
|
37
36
|
|
|
38
37
|
visitNode(generalNode, specificNode, ...remainingArguments) {
|