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
|
@@ -7,18 +7,24 @@ const { filter: arrayFilter } = arrayUtilities,
|
|
|
7
7
|
forwardsForEach: asynchronousForwardsForEach,
|
|
8
8
|
backwardsForEach: asynchronousBackwardsForEach } = asynchronousUtilities;
|
|
9
9
|
|
|
10
|
-
export function one(array, callback, ...
|
|
11
|
-
let
|
|
10
|
+
export function one(array, callback, ...initialArguments) {
|
|
11
|
+
let success = false;
|
|
12
|
+
|
|
13
|
+
const continuation = initialArguments.pop();
|
|
12
14
|
|
|
13
|
-
|
|
15
|
+
let intermediateArguments = initialArguments; ///
|
|
14
16
|
|
|
15
17
|
return asynchronousForEach(array, (element, next, done) => {
|
|
16
|
-
return callback(element, ...
|
|
18
|
+
return callback(element, ...intermediateArguments, (...callbackArguments) => {
|
|
19
|
+
const passed = callbackArguments.shift();
|
|
20
|
+
|
|
21
|
+
intermediateArguments = callbackArguments; ///
|
|
22
|
+
|
|
17
23
|
if (passed) {
|
|
18
|
-
if (!
|
|
19
|
-
|
|
24
|
+
if (!success) {
|
|
25
|
+
success = true;
|
|
20
26
|
} else {
|
|
21
|
-
|
|
27
|
+
success = false;
|
|
22
28
|
|
|
23
29
|
done();
|
|
24
30
|
|
|
@@ -29,17 +35,25 @@ export function one(array, callback, ...remainingArguments) {
|
|
|
29
35
|
next();
|
|
30
36
|
});
|
|
31
37
|
}, () => {
|
|
32
|
-
|
|
38
|
+
const finalArguments = intermediateArguments; ///
|
|
39
|
+
|
|
40
|
+
return continuation(success, ...finalArguments);
|
|
33
41
|
});
|
|
34
42
|
}
|
|
35
43
|
|
|
36
|
-
export function some(array, callback, ...
|
|
44
|
+
export function some(array, callback, ...initialArguments) {
|
|
37
45
|
let success = false;
|
|
38
46
|
|
|
39
|
-
const continuation =
|
|
47
|
+
const continuation = initialArguments.pop();
|
|
48
|
+
|
|
49
|
+
let intermediateArguments = initialArguments; ///
|
|
40
50
|
|
|
41
51
|
return asynchronousForEach(array, (element, next, done) => {
|
|
42
|
-
return callback(element, ...
|
|
52
|
+
return callback(element, ...intermediateArguments, (...callbackArguments) => {
|
|
53
|
+
const passed = callbackArguments.shift();
|
|
54
|
+
|
|
55
|
+
intermediateArguments = callbackArguments; ///
|
|
56
|
+
|
|
43
57
|
if (passed) {
|
|
44
58
|
success = true;
|
|
45
59
|
|
|
@@ -51,21 +65,29 @@ export function some(array, callback, ...remainingArguments) {
|
|
|
51
65
|
next();
|
|
52
66
|
});
|
|
53
67
|
}, () => {
|
|
54
|
-
|
|
68
|
+
const finalArguments = intermediateArguments; ///
|
|
69
|
+
|
|
70
|
+
return continuation(success, ...finalArguments);
|
|
55
71
|
});
|
|
56
72
|
}
|
|
57
73
|
|
|
58
|
-
export function each(array, callback, ...
|
|
59
|
-
let
|
|
74
|
+
export function each(array, callback, ...initialArguments) {
|
|
75
|
+
let success = false;
|
|
76
|
+
|
|
77
|
+
const continuation = initialArguments.pop();
|
|
60
78
|
|
|
61
|
-
|
|
79
|
+
let intermediateArguments = initialArguments; ///
|
|
62
80
|
|
|
63
81
|
return asynchronousForEach(array, (element, next, done) => {
|
|
64
|
-
return callback(element, ...
|
|
82
|
+
return callback(element, ...intermediateArguments, (...callbackArguments) => {
|
|
83
|
+
const passed = callbackArguments.shift();
|
|
84
|
+
|
|
85
|
+
intermediateArguments = callbackArguments; ///
|
|
86
|
+
|
|
65
87
|
if (passed) {
|
|
66
|
-
|
|
88
|
+
success = true;
|
|
67
89
|
} else {
|
|
68
|
-
|
|
90
|
+
success = false;
|
|
69
91
|
|
|
70
92
|
done();
|
|
71
93
|
|
|
@@ -75,17 +97,25 @@ export function each(array, callback, ...remainingArguments) {
|
|
|
75
97
|
next();
|
|
76
98
|
});
|
|
77
99
|
}, () => {
|
|
78
|
-
|
|
100
|
+
const finalArguments = intermediateArguments; ///
|
|
101
|
+
|
|
102
|
+
return continuation(success, ...finalArguments);
|
|
79
103
|
});
|
|
80
104
|
}
|
|
81
105
|
|
|
82
|
-
export function every(array, callback, ...
|
|
106
|
+
export function every(array, callback, ...initialArguments) {
|
|
83
107
|
let success = true;
|
|
84
108
|
|
|
85
|
-
const continuation =
|
|
109
|
+
const continuation = initialArguments.pop();
|
|
110
|
+
|
|
111
|
+
let intermediateArguments = initialArguments; ///
|
|
86
112
|
|
|
87
113
|
return asynchronousForEach(array, (element, next, done) => {
|
|
88
|
-
return callback(element, ...
|
|
114
|
+
return callback(element, ...intermediateArguments, (...callbackArguments) => {
|
|
115
|
+
const passed = callbackArguments.shift();
|
|
116
|
+
|
|
117
|
+
intermediateArguments = callbackArguments; ///
|
|
118
|
+
|
|
89
119
|
if (!passed) {
|
|
90
120
|
success = false;
|
|
91
121
|
|
|
@@ -97,71 +127,67 @@ export function every(array, callback, ...remainingArguments) {
|
|
|
97
127
|
next();
|
|
98
128
|
});
|
|
99
129
|
}, () => {
|
|
100
|
-
|
|
101
|
-
});
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
export function match(arrayA, arrayB, callback, ...remainingArguments) {
|
|
105
|
-
const continuation = remainingArguments.pop(),
|
|
106
|
-
arrayALength = arrayA.length,
|
|
107
|
-
arrayBLength = arrayB.length;
|
|
108
|
-
|
|
109
|
-
if (arrayALength !== arrayBLength) {
|
|
110
|
-
const matches = false;
|
|
111
|
-
|
|
112
|
-
return continuation(matches, ...remainingArguments);
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
let index = -1;
|
|
116
|
-
|
|
117
|
-
return every(arrayA, (elementA, continuation) => {
|
|
118
|
-
index++;
|
|
130
|
+
const finalArguments = intermediateArguments; ///
|
|
119
131
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
return callback(elementA, elementB, ...remainingArguments, continuation);
|
|
123
|
-
}, (success) => {
|
|
124
|
-
const matches = success; ///
|
|
125
|
-
|
|
126
|
-
return continuation(matches, ...remainingArguments);
|
|
132
|
+
return continuation(success, ...finalArguments);
|
|
127
133
|
});
|
|
128
134
|
}
|
|
129
135
|
|
|
130
|
-
export function reduce(array, initialValue, callback, ...
|
|
136
|
+
export function reduce(array, initialValue, callback, ...initialArguments) {
|
|
131
137
|
let value = initialValue; ///
|
|
132
138
|
|
|
133
|
-
const continuation =
|
|
139
|
+
const continuation = initialArguments.pop();
|
|
140
|
+
|
|
141
|
+
let intermediateArguments = initialArguments; ///
|
|
134
142
|
|
|
135
143
|
return asynchronousForEach(array, (element, next, done) => {
|
|
136
|
-
return callback(value, element, ...
|
|
144
|
+
return callback(value, element, ...intermediateArguments, (...callbackArguments) => {
|
|
145
|
+
const currentValue = callbackArguments.shift();
|
|
146
|
+
|
|
147
|
+
intermediateArguments = callbackArguments; ///
|
|
148
|
+
|
|
137
149
|
value = currentValue; ///
|
|
138
150
|
|
|
139
151
|
next();
|
|
140
152
|
});
|
|
141
153
|
}, () => {
|
|
142
|
-
|
|
154
|
+
const finalArguments = intermediateArguments; ///
|
|
155
|
+
|
|
156
|
+
return continuation(value, ...finalArguments);
|
|
143
157
|
});
|
|
144
158
|
}
|
|
145
159
|
|
|
146
|
-
export function forEach(array, callback, ...
|
|
147
|
-
const continuation =
|
|
160
|
+
export function forEach(array, callback, ...initialArguments) {
|
|
161
|
+
const continuation = initialArguments.pop();
|
|
162
|
+
|
|
163
|
+
let intermediateArguments = initialArguments; ///
|
|
148
164
|
|
|
149
165
|
return asynchronousForEach(array, (element, next, done) => {
|
|
150
|
-
return callback(element, ...
|
|
166
|
+
return callback(element, ...intermediateArguments, (...callbackArguments) => {
|
|
167
|
+
intermediateArguments = callbackArguments; ///
|
|
168
|
+
|
|
151
169
|
next();
|
|
152
170
|
});
|
|
153
171
|
}, () => {
|
|
154
|
-
|
|
172
|
+
const finalArguments = intermediateArguments; ///
|
|
173
|
+
|
|
174
|
+
return continuation(...finalArguments);
|
|
155
175
|
});
|
|
156
176
|
}
|
|
157
177
|
|
|
158
|
-
export function forwardsEvery(array, callback, ...
|
|
178
|
+
export function forwardsEvery(array, callback, ...initialArguments) {
|
|
159
179
|
let success = true;
|
|
160
180
|
|
|
161
|
-
const continuation =
|
|
181
|
+
const continuation = initialArguments.pop();
|
|
182
|
+
|
|
183
|
+
let intermediateArguments = initialArguments; ///
|
|
162
184
|
|
|
163
185
|
return asynchronousForwardsForEach(array, (element, next, done) => {
|
|
164
|
-
return callback(element, ...
|
|
186
|
+
return callback(element, ...intermediateArguments, (...callbackArguments) => {
|
|
187
|
+
const passed = callbackArguments.shift();
|
|
188
|
+
|
|
189
|
+
intermediateArguments = callbackArguments; ///
|
|
190
|
+
|
|
165
191
|
if (!passed) {
|
|
166
192
|
success = false;
|
|
167
193
|
|
|
@@ -173,17 +199,25 @@ export function forwardsEvery(array, callback, ...remainingArguments) {
|
|
|
173
199
|
next();
|
|
174
200
|
});
|
|
175
201
|
}, () => {
|
|
176
|
-
|
|
202
|
+
const finalArguments = intermediateArguments; ///
|
|
203
|
+
|
|
204
|
+
return continuation(success, ...finalArguments);
|
|
177
205
|
});
|
|
178
206
|
}
|
|
179
207
|
|
|
180
|
-
export function backwardsEvery(array, callback, ...
|
|
208
|
+
export function backwardsEvery(array, callback, ...initialArguments) {
|
|
181
209
|
let success = true;
|
|
182
210
|
|
|
183
|
-
const continuation =
|
|
211
|
+
const continuation = initialArguments.pop();
|
|
212
|
+
|
|
213
|
+
let intermediateArguments = initialArguments; ///
|
|
184
214
|
|
|
185
215
|
return asynchronousBackwardsForEach(array, (element, next, done) => {
|
|
186
|
-
return callback(element, ...
|
|
216
|
+
return callback(element, ...intermediateArguments, (...callbackArguments) => {
|
|
217
|
+
const passed = callbackArguments.shift();
|
|
218
|
+
|
|
219
|
+
intermediateArguments = callbackArguments; ///
|
|
220
|
+
|
|
187
221
|
if (!passed) {
|
|
188
222
|
success = false;
|
|
189
223
|
|
|
@@ -195,45 +229,65 @@ export function backwardsEvery(array, callback, ...remainingArguments) {
|
|
|
195
229
|
next();
|
|
196
230
|
});
|
|
197
231
|
}, () => {
|
|
198
|
-
|
|
232
|
+
const finalArguments = intermediateArguments; ///
|
|
233
|
+
|
|
234
|
+
return continuation(success, ...finalArguments);
|
|
199
235
|
});
|
|
200
236
|
}
|
|
201
237
|
|
|
202
|
-
export function forwardsForEach(array, callback, ...
|
|
203
|
-
const continuation =
|
|
238
|
+
export function forwardsForEach(array, callback, ...initialArguments) {
|
|
239
|
+
const continuation = initialArguments.pop();
|
|
240
|
+
|
|
241
|
+
let intermediateArguments = initialArguments; ///
|
|
204
242
|
|
|
205
243
|
return asynchronousForwardsForEach(array, (element, next, done) => {
|
|
206
|
-
return callback(element, ...
|
|
244
|
+
return callback(element, ...intermediateArguments, (...callbackArguments) => {
|
|
245
|
+
intermediateArguments = callbackArguments; ///
|
|
246
|
+
|
|
207
247
|
next();
|
|
208
248
|
});
|
|
209
249
|
}, () => {
|
|
210
|
-
|
|
250
|
+
const finalArguments = intermediateArguments; ///
|
|
251
|
+
|
|
252
|
+
return continuation(...finalArguments);
|
|
211
253
|
});
|
|
212
254
|
}
|
|
213
255
|
|
|
214
|
-
export function backwardsForEach(array, callback, ...
|
|
215
|
-
const continuation =
|
|
256
|
+
export function backwardsForEach(array, callback, ...initialArguments) {
|
|
257
|
+
const continuation = initialArguments.pop();
|
|
258
|
+
|
|
259
|
+
let intermediateArguments = initialArguments; ///
|
|
216
260
|
|
|
217
261
|
return asynchronousBackwardsForEach(array, (element, next, done) => {
|
|
218
|
-
return callback(element, ...
|
|
262
|
+
return callback(element, ...intermediateArguments, (...callbackArguments) => {
|
|
263
|
+
intermediateArguments = callbackArguments; ///
|
|
264
|
+
|
|
219
265
|
next();
|
|
220
266
|
});
|
|
221
267
|
}, () => {
|
|
222
|
-
|
|
268
|
+
const finalArguments = intermediateArguments; ///
|
|
269
|
+
|
|
270
|
+
return continuation(...finalArguments);
|
|
223
271
|
});
|
|
224
272
|
}
|
|
225
273
|
|
|
226
|
-
export function filter(array, callback, ...
|
|
274
|
+
export function filter(array, callback, ...initialArguments) {
|
|
227
275
|
const deletedElements = [];
|
|
228
276
|
|
|
229
|
-
const continuation =
|
|
277
|
+
const continuation = initialArguments.pop();
|
|
278
|
+
|
|
279
|
+
let intermediateArguments = initialArguments; ///
|
|
230
280
|
|
|
231
281
|
let index = array.length;
|
|
232
282
|
|
|
233
|
-
return
|
|
283
|
+
return asynchronousBackwardsForEach(array, (element, next, done) => {
|
|
234
284
|
index--;
|
|
235
285
|
|
|
236
|
-
return callback(element, ...
|
|
286
|
+
return callback(element, ...intermediateArguments, (...callbackArguments) => {
|
|
287
|
+
const passed = callbackArguments.shift();
|
|
288
|
+
|
|
289
|
+
intermediateArguments = callbackArguments; ///
|
|
290
|
+
|
|
237
291
|
if (!passed) {
|
|
238
292
|
const start = index, ///
|
|
239
293
|
deleteCount = 1,
|
|
@@ -242,93 +296,170 @@ export function filter(array, callback, ...remainingArguments) {
|
|
|
242
296
|
deletedElements.unshift(deletedElement); ///
|
|
243
297
|
}
|
|
244
298
|
|
|
245
|
-
|
|
299
|
+
next();
|
|
246
300
|
});
|
|
247
301
|
}, () => {
|
|
248
|
-
|
|
302
|
+
const finalArguments = intermediateArguments; ///
|
|
303
|
+
|
|
304
|
+
return continuation(deletedElements, ...finalArguments);
|
|
249
305
|
});
|
|
250
306
|
}
|
|
251
307
|
|
|
252
|
-
export function prune(array, callback, ...
|
|
308
|
+
export function prune(array, callback, ...initialArguments) {
|
|
253
309
|
let deletedElement = undefined; ///
|
|
254
310
|
|
|
255
|
-
const continuation =
|
|
311
|
+
const continuation = initialArguments.pop();
|
|
312
|
+
|
|
313
|
+
let intermediateArguments = initialArguments; ///
|
|
256
314
|
|
|
257
315
|
let index = -1;
|
|
258
316
|
|
|
259
|
-
return
|
|
317
|
+
return asynchronousForEach(array, (element, next, done) => {
|
|
260
318
|
index++;
|
|
261
319
|
|
|
262
|
-
return callback(element, ...
|
|
320
|
+
return callback(element, ...intermediateArguments, (...callbackArguments) => {
|
|
321
|
+
const passed = callbackArguments.shift();
|
|
322
|
+
|
|
323
|
+
intermediateArguments = callbackArguments; ///
|
|
324
|
+
|
|
263
325
|
if (!passed) {
|
|
264
326
|
const start = index, ///
|
|
265
327
|
deleteCount = 1;
|
|
266
328
|
|
|
267
|
-
deletedElement = array.splice(start, deleteCount).pop() ///
|
|
329
|
+
deletedElement = array.splice(start, deleteCount).pop(); ///
|
|
330
|
+
|
|
331
|
+
done();
|
|
332
|
+
|
|
333
|
+
return;
|
|
268
334
|
}
|
|
269
335
|
|
|
270
|
-
|
|
336
|
+
next();
|
|
271
337
|
});
|
|
272
338
|
}, () => {
|
|
273
|
-
|
|
339
|
+
const finalArguments = intermediateArguments; ///
|
|
340
|
+
|
|
341
|
+
return continuation(deletedElement, ...finalArguments);
|
|
274
342
|
});
|
|
275
343
|
}
|
|
276
344
|
|
|
277
|
-
export function extract(array, callback, ...
|
|
345
|
+
export function extract(array, callback, ...initialArguments) {
|
|
278
346
|
let deletedElement = undefined; ///
|
|
279
347
|
|
|
280
|
-
const continuation =
|
|
348
|
+
const continuation = initialArguments.pop();
|
|
349
|
+
|
|
350
|
+
let intermediateArguments = initialArguments; ///
|
|
281
351
|
|
|
282
352
|
let index = -1;
|
|
283
353
|
|
|
284
|
-
return
|
|
354
|
+
return asynchronousForEach(array, (element, next, done) => {
|
|
285
355
|
index++;
|
|
286
356
|
|
|
287
|
-
return callback(element, ...
|
|
357
|
+
return callback(element, ...intermediateArguments, (...callbackArguments) => {
|
|
358
|
+
const passed = callbackArguments.shift();
|
|
359
|
+
|
|
360
|
+
intermediateArguments = callbackArguments; ///
|
|
361
|
+
|
|
288
362
|
if (passed) {
|
|
289
363
|
const start = index, ///
|
|
290
364
|
deleteCount = 1;
|
|
291
365
|
|
|
292
|
-
deletedElement = array.splice(start, deleteCount).pop() ///
|
|
366
|
+
deletedElement = array.splice(start, deleteCount).pop(); ///
|
|
367
|
+
|
|
368
|
+
done();
|
|
369
|
+
|
|
370
|
+
return;
|
|
293
371
|
}
|
|
294
372
|
|
|
295
|
-
|
|
373
|
+
next();
|
|
296
374
|
});
|
|
297
375
|
}, () => {
|
|
298
|
-
|
|
376
|
+
const finalArguments = intermediateArguments; ///
|
|
377
|
+
|
|
378
|
+
return continuation(deletedElement, ...finalArguments);
|
|
299
379
|
});
|
|
300
380
|
}
|
|
301
381
|
|
|
302
|
-
export function
|
|
382
|
+
export function match(arrayA, arrayB, callback, ...initialArguments) {
|
|
383
|
+
let success = true;
|
|
384
|
+
|
|
385
|
+
const continuation = initialArguments.pop();
|
|
386
|
+
|
|
387
|
+
const arrayALength = arrayA.length,
|
|
388
|
+
arrayBLength = arrayB.length;
|
|
389
|
+
|
|
390
|
+
if (arrayALength !== arrayBLength) {
|
|
391
|
+
success = false;
|
|
392
|
+
|
|
393
|
+
return continuation(success, ...initialArguments);
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
let index = -1;
|
|
397
|
+
|
|
398
|
+
let intermediateArguments = initialArguments; ///
|
|
399
|
+
|
|
400
|
+
return asynchronousForEach(arrayA, (elementA, next, done) => {
|
|
401
|
+
index++;
|
|
402
|
+
|
|
403
|
+
const elementB = arrayB[index];
|
|
404
|
+
|
|
405
|
+
return callback(elementA, elementB, ...intermediateArguments, (...callbackArguments) => {
|
|
406
|
+
const passed = callbackArguments.shift();
|
|
407
|
+
|
|
408
|
+
intermediateArguments = callbackArguments; ///
|
|
409
|
+
|
|
410
|
+
if (!passed) {
|
|
411
|
+
success = false;
|
|
412
|
+
|
|
413
|
+
done();
|
|
414
|
+
|
|
415
|
+
return;
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
next();
|
|
419
|
+
});
|
|
420
|
+
}, () => {
|
|
421
|
+
const finalArguments = intermediateArguments; ///
|
|
422
|
+
|
|
423
|
+
return continuation(success, ...finalArguments);
|
|
424
|
+
});
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
export function resolve(arrayA, arrayB, callback, ...initialArguments) {
|
|
303
428
|
arrayA = [ ///
|
|
304
429
|
...arrayA
|
|
305
430
|
];
|
|
306
431
|
|
|
307
|
-
const continuation =
|
|
432
|
+
const continuation = initialArguments.pop();
|
|
433
|
+
|
|
434
|
+
let intermediateArguments = initialArguments; ///
|
|
308
435
|
|
|
309
436
|
function nextPass() {
|
|
437
|
+
let success = false;
|
|
438
|
+
|
|
310
439
|
const arrayALength = arrayA.length;
|
|
311
440
|
|
|
312
441
|
if (arrayALength === 0) {
|
|
313
|
-
|
|
442
|
+
success = true;
|
|
314
443
|
|
|
315
|
-
|
|
316
|
-
}
|
|
444
|
+
const finalArguments = intermediateArguments; ///
|
|
317
445
|
|
|
318
|
-
|
|
446
|
+
return continuation(success, ...finalArguments);
|
|
447
|
+
}
|
|
319
448
|
|
|
320
|
-
let
|
|
449
|
+
let index = -1;
|
|
321
450
|
|
|
322
451
|
function nextElement() {
|
|
323
|
-
|
|
452
|
+
index++;
|
|
324
453
|
|
|
325
|
-
const terminate = (
|
|
454
|
+
const terminate = (index === arrayALength);
|
|
326
455
|
|
|
327
456
|
if (terminate) {
|
|
328
457
|
if (!success) {
|
|
329
|
-
|
|
458
|
+
success = false;
|
|
330
459
|
|
|
331
|
-
|
|
460
|
+
const finalArguments = intermediateArguments; ///
|
|
461
|
+
|
|
462
|
+
return continuation(success, ...finalArguments);
|
|
332
463
|
}
|
|
333
464
|
|
|
334
465
|
arrayFilter(arrayA, (elementA) => {
|
|
@@ -341,10 +472,13 @@ export function resolve(arrayA, arrayB, callback, ...remainingArguments) {
|
|
|
341
472
|
|
|
342
473
|
nextPass();
|
|
343
474
|
} else {
|
|
344
|
-
const
|
|
345
|
-
|
|
475
|
+
const elementA = arrayA[index];
|
|
476
|
+
|
|
477
|
+
return callback(elementA, ...intermediateArguments, (...callbackArguments) => {
|
|
478
|
+
const passed = callbackArguments.shift();
|
|
479
|
+
|
|
480
|
+
intermediateArguments = callbackArguments; ///
|
|
346
481
|
|
|
347
|
-
return callback(elementA, ...remainingArguments, (passed) => {
|
|
348
482
|
if (passed) {
|
|
349
483
|
const elementB = elementA; ///
|
|
350
484
|
|
|
@@ -369,7 +503,6 @@ export default {
|
|
|
369
503
|
some,
|
|
370
504
|
each,
|
|
371
505
|
every,
|
|
372
|
-
match,
|
|
373
506
|
reduce,
|
|
374
507
|
forEach,
|
|
375
508
|
forwardsEvery,
|
|
@@ -379,5 +512,6 @@ export default {
|
|
|
379
512
|
filter,
|
|
380
513
|
prune,
|
|
381
514
|
extract,
|
|
515
|
+
match,
|
|
382
516
|
resolve
|
|
383
517
|
};
|
package/lib/pass/equivalence.js
DELETED
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "default", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return EquivalencePass;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
const _pass = require("../utilities/pass");
|
|
12
|
-
class EquivalencePass {
|
|
13
|
-
run(leftNode, rightNode, ...remainingArguments) {
|
|
14
|
-
let success;
|
|
15
|
-
const visited = this.visitNode(leftNode, rightNode, ...remainingArguments);
|
|
16
|
-
success = visited; ///
|
|
17
|
-
return success;
|
|
18
|
-
}
|
|
19
|
-
descend(leftChildNodes, rightChildNodes, ...remainingArguments) {
|
|
20
|
-
let descended = false;
|
|
21
|
-
const childNodesCongruent = (0, _pass.areChildNodesCongruent)(leftChildNodes, rightChildNodes);
|
|
22
|
-
if (childNodesCongruent) {
|
|
23
|
-
const visited = leftChildNodes.every((leftChildNode, index)=>{
|
|
24
|
-
const rightChildNode = rightChildNodes[index], leftNode = leftChildNode, rightNode = rightChildNode, visited = this.visitNode(leftNode, rightNode, ...remainingArguments);
|
|
25
|
-
if (visited) {
|
|
26
|
-
return true;
|
|
27
|
-
}
|
|
28
|
-
});
|
|
29
|
-
if (visited) {
|
|
30
|
-
descended = true;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
return descended;
|
|
34
|
-
}
|
|
35
|
-
visitNode(leftNode, rightNode, ...remainingArguments) {
|
|
36
|
-
let visited = false;
|
|
37
|
-
const leftNodeTerminalNode = leftNode.isTerminalNode(), rightNodeTerminalNode = rightNode.isTerminalNode(), leftNodeNonTerminalNode = leftNode.isNonTerminalNode(), rightNodeNonTerminalNode = rightNode.isNonTerminalNode();
|
|
38
|
-
if (false) {
|
|
39
|
-
///
|
|
40
|
-
} else if (leftNodeTerminalNode && rightNodeTerminalNode) {
|
|
41
|
-
const leftTerminalNode = leftNode, rightTerminalNode = rightNode; ///
|
|
42
|
-
visited = this.visitTerminalNode(leftTerminalNode, rightTerminalNode, ...remainingArguments);
|
|
43
|
-
} else if (leftNodeNonTerminalNode && rightNodeNonTerminalNode) {
|
|
44
|
-
const leftNonTerminalNode = leftNode, rightNonTerminalNode = rightNode; ///
|
|
45
|
-
visited = this.visitNonTerminalNode(leftNonTerminalNode, rightNonTerminalNode, ...remainingArguments);
|
|
46
|
-
}
|
|
47
|
-
return visited;
|
|
48
|
-
}
|
|
49
|
-
visitTerminalNode(leftTerminalNode, rightTerminalNode, ...remainingArguments) {
|
|
50
|
-
let visited;
|
|
51
|
-
visited = true;
|
|
52
|
-
return visited;
|
|
53
|
-
}
|
|
54
|
-
visitNonTerminalNode(leftNonTerminalNode, rightNonTerminalNode, ...remainingArguments) {
|
|
55
|
-
let visited = false;
|
|
56
|
-
let { maps } = this.constructor;
|
|
57
|
-
maps = [
|
|
58
|
-
...maps,
|
|
59
|
-
{
|
|
60
|
-
leftNodeQuery: _pass.nonTerminalNodeQuery,
|
|
61
|
-
rightNodeQuery: _pass.nonTerminalNodeQuery,
|
|
62
|
-
run: (leftNode, rightNode, ...remainingArguments)=>{
|
|
63
|
-
let visited = false;
|
|
64
|
-
const leftNonTerminalNodeRuleName = leftNonTerminalNode.getRuleName(), rightNonTerminalNodeRuleName = rightNonTerminalNode.getRuleName(); ///
|
|
65
|
-
if (leftNonTerminalNodeRuleName === rightNonTerminalNodeRuleName) {
|
|
66
|
-
const leftNonTerminalNodeChildNodes = leftNonTerminalNode.getChildNodes(), rightNonTerminalNodeChildNodes = rightNonTerminalNode.getChildNodes(), leftChildNodes = leftNonTerminalNodeChildNodes, rightChildNodes = rightNonTerminalNodeChildNodes, descended = this.descend(leftChildNodes, rightChildNodes, ...remainingArguments);
|
|
67
|
-
if (descended) {
|
|
68
|
-
visited = true;
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
return visited;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
];
|
|
75
|
-
maps.some((map)=>{
|
|
76
|
-
const { leftNodeQuery, rightNodeQuery, run } = map;
|
|
77
|
-
const leftNode = leftNodeQuery(leftNonTerminalNode), rightNode = rightNodeQuery(rightNonTerminalNode); ///
|
|
78
|
-
if (leftNode !== null && rightNode !== null) {
|
|
79
|
-
const success = run(leftNode, rightNode, ...remainingArguments);
|
|
80
|
-
visited = success; ///
|
|
81
|
-
return true;
|
|
82
|
-
}
|
|
83
|
-
});
|
|
84
|
-
return visited;
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wYXNzL2VxdWl2YWxlbmNlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBub25UZXJtaW5hbE5vZGVRdWVyeSwgYXJlQ2hpbGROb2Rlc0NvbmdydWVudCB9IGZyb20gXCIuLi91dGlsaXRpZXMvcGFzc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFcXVpdmFsZW5jZVBhc3Mge1xuICBydW4obGVmdE5vZGUsIHJpZ2h0Tm9kZSwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgbGV0IHN1Y2Nlc3M7XG5cbiAgICBjb25zdCB2aXNpdGVkID0gdGhpcy52aXNpdE5vZGUobGVmdE5vZGUsIHJpZ2h0Tm9kZSwgLi4ucmVtYWluaW5nQXJndW1lbnRzKTtcblxuICAgIHN1Y2Nlc3MgPSB2aXNpdGVkOyAgLy8vXG5cbiAgICByZXR1cm4gc3VjY2VzcztcbiAgfVxuXG4gIGRlc2NlbmQobGVmdENoaWxkTm9kZXMsIHJpZ2h0Q2hpbGROb2RlcywgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgbGV0IGRlc2NlbmRlZCA9IGZhbHNlO1xuXG4gICAgY29uc3QgY2hpbGROb2Rlc0NvbmdydWVudCA9IGFyZUNoaWxkTm9kZXNDb25ncnVlbnQobGVmdENoaWxkTm9kZXMsIHJpZ2h0Q2hpbGROb2Rlcyk7XG5cbiAgICBpZiAoY2hpbGROb2Rlc0NvbmdydWVudCkge1xuICAgICAgY29uc3QgdmlzaXRlZCA9IGxlZnRDaGlsZE5vZGVzLmV2ZXJ5KChsZWZ0Q2hpbGROb2RlLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCByaWdodENoaWxkTm9kZSA9IHJpZ2h0Q2hpbGROb2Rlc1tpbmRleF0sXG4gICAgICAgICAgICAgIGxlZnROb2RlID0gbGVmdENoaWxkTm9kZSwgLy8vXG4gICAgICAgICAgICAgIHJpZ2h0Tm9kZSA9IHJpZ2h0Q2hpbGROb2RlLCAvLy9cbiAgICAgICAgICAgICAgdmlzaXRlZCA9IHRoaXMudmlzaXROb2RlKGxlZnROb2RlLCByaWdodE5vZGUsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG5cbiAgICAgICAgaWYgKHZpc2l0ZWQpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmICh2aXNpdGVkKSB7XG4gICAgICAgIGRlc2NlbmRlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlc2NlbmRlZDtcbiAgfVxuXG4gIHZpc2l0Tm9kZShsZWZ0Tm9kZSwgcmlnaHROb2RlLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICBsZXQgdmlzaXRlZCA9IGZhbHNlO1xuXG4gICAgY29uc3QgbGVmdE5vZGVUZXJtaW5hbE5vZGUgPSBsZWZ0Tm9kZS5pc1Rlcm1pbmFsTm9kZSgpLFxuICAgICAgICAgIHJpZ2h0Tm9kZVRlcm1pbmFsTm9kZSA9IHJpZ2h0Tm9kZS5pc1Rlcm1pbmFsTm9kZSgpLFxuICAgICAgICAgIGxlZnROb2RlTm9uVGVybWluYWxOb2RlID0gbGVmdE5vZGUuaXNOb25UZXJtaW5hbE5vZGUoKSxcbiAgICAgICAgICByaWdodE5vZGVOb25UZXJtaW5hbE5vZGUgPSByaWdodE5vZGUuaXNOb25UZXJtaW5hbE5vZGUoKTtcblxuICAgIGlmIChmYWxzZSkge1xuICAgICAgLy8vXG4gICAgfSBlbHNlIGlmIChsZWZ0Tm9kZVRlcm1pbmFsTm9kZSAmJiByaWdodE5vZGVUZXJtaW5hbE5vZGUpIHtcbiAgICAgIGNvbnN0IGxlZnRUZXJtaW5hbE5vZGUgPSBsZWZ0Tm9kZSwgIC8vL1xuICAgICAgICAgICAgcmlnaHRUZXJtaW5hbE5vZGUgPSByaWdodE5vZGU7ICAvLy9cblxuICAgICAgdmlzaXRlZCA9IHRoaXMudmlzaXRUZXJtaW5hbE5vZGUobGVmdFRlcm1pbmFsTm9kZSwgcmlnaHRUZXJtaW5hbE5vZGUsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG4gICAgfSBlbHNlIGlmIChsZWZ0Tm9kZU5vblRlcm1pbmFsTm9kZSAmJiByaWdodE5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICAgIGNvbnN0IGxlZnROb25UZXJtaW5hbE5vZGUgPSBsZWZ0Tm9kZSwgIC8vL1xuICAgICAgICAgICAgcmlnaHROb25UZXJtaW5hbE5vZGUgPSByaWdodE5vZGU7IC8vL1xuXG4gICAgICB2aXNpdGVkID0gdGhpcy52aXNpdE5vblRlcm1pbmFsTm9kZShsZWZ0Tm9uVGVybWluYWxOb2RlLCByaWdodE5vblRlcm1pbmFsTm9kZSwgLi4ucmVtYWluaW5nQXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmlzaXRlZDtcbiAgfVxuXG4gIHZpc2l0VGVybWluYWxOb2RlKGxlZnRUZXJtaW5hbE5vZGUsIHJpZ2h0VGVybWluYWxOb2RlLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHsgLy8vXG4gICAgbGV0IHZpc2l0ZWQ7XG5cbiAgICB2aXNpdGVkID0gdHJ1ZTtcblxuICAgIHJldHVybiB2aXNpdGVkO1xuICB9XG5cbiAgdmlzaXROb25UZXJtaW5hbE5vZGUobGVmdE5vblRlcm1pbmFsTm9kZSwgcmlnaHROb25UZXJtaW5hbE5vZGUsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICAgIGxldCB2aXNpdGVkID0gZmFsc2U7XG5cbiAgICBsZXQgeyBtYXBzIH0gPSB0aGlzLmNvbnN0cnVjdG9yO1xuXG4gICAgbWFwcyA9IFsgLy8vXG4gICAgICAuLi5tYXBzLFxuICAgICAge1xuICAgICAgICBsZWZ0Tm9kZVF1ZXJ5OiBub25UZXJtaW5hbE5vZGVRdWVyeSxcbiAgICAgICAgcmlnaHROb2RlUXVlcnk6IG5vblRlcm1pbmFsTm9kZVF1ZXJ5LFxuICAgICAgICBydW46IChsZWZ0Tm9kZSwgcmlnaHROb2RlLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpID0+IHtcbiAgICAgICAgICBsZXQgdmlzaXRlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgY29uc3QgbGVmdE5vblRlcm1pbmFsTm9kZVJ1bGVOYW1lID0gbGVmdE5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpLCAvLy9cbiAgICAgICAgICAgICAgICByaWdodE5vblRlcm1pbmFsTm9kZVJ1bGVOYW1lID0gcmlnaHROb25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKTsgLy8vXG5cbiAgICAgICAgICBpZiAobGVmdE5vblRlcm1pbmFsTm9kZVJ1bGVOYW1lID09PSByaWdodE5vblRlcm1pbmFsTm9kZVJ1bGVOYW1lKSB7XG4gICAgICAgICAgICBjb25zdCBsZWZ0Tm9uVGVybWluYWxOb2RlQ2hpbGROb2RlcyA9IGxlZnROb25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgICAgICAgICAgcmlnaHROb25UZXJtaW5hbE5vZGVDaGlsZE5vZGVzID0gcmlnaHROb25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgICAgICAgICAgbGVmdENoaWxkTm9kZXMgPSBsZWZ0Tm9uVGVybWluYWxOb2RlQ2hpbGROb2RlcywgLy8vXG4gICAgICAgICAgICAgICAgICByaWdodENoaWxkTm9kZXMgPSByaWdodE5vblRlcm1pbmFsTm9kZUNoaWxkTm9kZXMsIC8vL1xuICAgICAgICAgICAgICAgICAgZGVzY2VuZGVkID0gdGhpcy5kZXNjZW5kKGxlZnRDaGlsZE5vZGVzLCByaWdodENoaWxkTm9kZXMsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG5cbiAgICAgICAgICAgIGlmIChkZXNjZW5kZWQpIHtcbiAgICAgICAgICAgICAgdmlzaXRlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHZpc2l0ZWQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdXG5cbiAgICBtYXBzLnNvbWUoKG1hcCkgPT4ge1xuICAgICAgY29uc3QgeyBsZWZ0Tm9kZVF1ZXJ5LCByaWdodE5vZGVRdWVyeSwgcnVuIH0gPSBtYXA7XG5cbiAgICAgIGNvbnN0IGxlZnROb2RlID0gbGVmdE5vZGVRdWVyeShsZWZ0Tm9uVGVybWluYWxOb2RlKSwgIC8vL1xuICAgICAgICAgICAgcmlnaHROb2RlID0gcmlnaHROb2RlUXVlcnkocmlnaHROb25UZXJtaW5hbE5vZGUpOyAgLy8vXG5cbiAgICAgIGlmICgobGVmdE5vZGUgIT09IG51bGwpICYmIChyaWdodE5vZGUgIT09IG51bGwpKSB7XG4gICAgICAgIGNvbnN0IHN1Y2Nlc3MgPSBydW4obGVmdE5vZGUsIHJpZ2h0Tm9kZSwgLi4ucmVtYWluaW5nQXJndW1lbnRzKTtcblxuICAgICAgICB2aXNpdGVkID0gc3VjY2VzczsgIC8vL1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHZpc2l0ZWQ7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJFcXVpdmFsZW5jZVBhc3MiLCJydW4iLCJsZWZ0Tm9kZSIsInJpZ2h0Tm9kZSIsInJlbWFpbmluZ0FyZ3VtZW50cyIsInN1Y2Nlc3MiLCJ2aXNpdGVkIiwidmlzaXROb2RlIiwiZGVzY2VuZCIsImxlZnRDaGlsZE5vZGVzIiwicmlnaHRDaGlsZE5vZGVzIiwiZGVzY2VuZGVkIiwiY2hpbGROb2Rlc0NvbmdydWVudCIsImFyZUNoaWxkTm9kZXNDb25ncnVlbnQiLCJldmVyeSIsImxlZnRDaGlsZE5vZGUiLCJpbmRleCIsInJpZ2h0Q2hpbGROb2RlIiwibGVmdE5vZGVUZXJtaW5hbE5vZGUiLCJpc1Rlcm1pbmFsTm9kZSIsInJpZ2h0Tm9kZVRlcm1pbmFsTm9kZSIsImxlZnROb2RlTm9uVGVybWluYWxOb2RlIiwiaXNOb25UZXJtaW5hbE5vZGUiLCJyaWdodE5vZGVOb25UZXJtaW5hbE5vZGUiLCJsZWZ0VGVybWluYWxOb2RlIiwicmlnaHRUZXJtaW5hbE5vZGUiLCJ2aXNpdFRlcm1pbmFsTm9kZSIsImxlZnROb25UZXJtaW5hbE5vZGUiLCJyaWdodE5vblRlcm1pbmFsTm9kZSIsInZpc2l0Tm9uVGVybWluYWxOb2RlIiwibWFwcyIsImxlZnROb2RlUXVlcnkiLCJub25UZXJtaW5hbE5vZGVRdWVyeSIsInJpZ2h0Tm9kZVF1ZXJ5IiwibGVmdE5vblRlcm1pbmFsTm9kZVJ1bGVOYW1lIiwiZ2V0UnVsZU5hbWUiLCJyaWdodE5vblRlcm1pbmFsTm9kZVJ1bGVOYW1lIiwibGVmdE5vblRlcm1pbmFsTm9kZUNoaWxkTm9kZXMiLCJnZXRDaGlsZE5vZGVzIiwicmlnaHROb25UZXJtaW5hbE5vZGVDaGlsZE5vZGVzIiwic29tZSIsIm1hcCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBSUE7OztlQUFxQkE7OztzQkFGd0M7QUFFOUMsTUFBTUE7SUFDbkJDLElBQUlDLFFBQVEsRUFBRUMsU0FBUyxFQUFFLEdBQUdDLGtCQUFrQixFQUFFO1FBQzlDLElBQUlDO1FBRUosTUFBTUMsVUFBVSxJQUFJLENBQUNDLFNBQVMsQ0FBQ0wsVUFBVUMsY0FBY0M7UUFFdkRDLFVBQVVDLFNBQVUsR0FBRztRQUV2QixPQUFPRDtJQUNUO0lBRUFHLFFBQVFDLGNBQWMsRUFBRUMsZUFBZSxFQUFFLEdBQUdOLGtCQUFrQixFQUFFO1FBQzlELElBQUlPLFlBQVk7UUFFaEIsTUFBTUMsc0JBQXNCQyxJQUFBQSw0QkFBc0IsRUFBQ0osZ0JBQWdCQztRQUVuRSxJQUFJRSxxQkFBcUI7WUFDdkIsTUFBTU4sVUFBVUcsZUFBZUssS0FBSyxDQUFDLENBQUNDLGVBQWVDO2dCQUNuRCxNQUFNQyxpQkFBaUJQLGVBQWUsQ0FBQ00sTUFBTSxFQUN2Q2QsV0FBV2EsZUFDWFosWUFBWWMsZ0JBQ1pYLFVBQVUsSUFBSSxDQUFDQyxTQUFTLENBQUNMLFVBQVVDLGNBQWNDO2dCQUV2RCxJQUFJRSxTQUFTO29CQUNYLE9BQU87Z0JBQ1Q7WUFDRjtZQUVBLElBQUlBLFNBQVM7Z0JBQ1hLLFlBQVk7WUFDZDtRQUNGO1FBRUEsT0FBT0E7SUFDVDtJQUVBSixVQUFVTCxRQUFRLEVBQUVDLFNBQVMsRUFBRSxHQUFHQyxrQkFBa0IsRUFBRTtRQUNwRCxJQUFJRSxVQUFVO1FBRWQsTUFBTVksdUJBQXVCaEIsU0FBU2lCLGNBQWMsSUFDOUNDLHdCQUF3QmpCLFVBQVVnQixjQUFjLElBQ2hERSwwQkFBMEJuQixTQUFTb0IsaUJBQWlCLElBQ3BEQywyQkFBMkJwQixVQUFVbUIsaUJBQWlCO1FBRTVELElBQUksT0FBTztRQUNULEdBQUc7UUFDTCxPQUFPLElBQUlKLHdCQUF3QkUsdUJBQXVCO1lBQ3hELE1BQU1JLG1CQUFtQnRCLFVBQ25CdUIsb0JBQW9CdEIsV0FBWSxHQUFHO1lBRXpDRyxVQUFVLElBQUksQ0FBQ29CLGlCQUFpQixDQUFDRixrQkFBa0JDLHNCQUFzQnJCO1FBQzNFLE9BQU8sSUFBSWlCLDJCQUEyQkUsMEJBQTBCO1lBQzlELE1BQU1JLHNCQUFzQnpCLFVBQ3RCMEIsdUJBQXVCekIsV0FBVyxHQUFHO1lBRTNDRyxVQUFVLElBQUksQ0FBQ3VCLG9CQUFvQixDQUFDRixxQkFBcUJDLHlCQUF5QnhCO1FBQ3BGO1FBRUEsT0FBT0U7SUFDVDtJQUVBb0Isa0JBQWtCRixnQkFBZ0IsRUFBRUMsaUJBQWlCLEVBQUUsR0FBR3JCLGtCQUFrQixFQUFFO1FBQzVFLElBQUlFO1FBRUpBLFVBQVU7UUFFVixPQUFPQTtJQUNUO0lBRUF1QixxQkFBcUJGLG1CQUFtQixFQUFFQyxvQkFBb0IsRUFBRSxHQUFHeEIsa0JBQWtCLEVBQUU7UUFDckYsSUFBSUUsVUFBVTtRQUVkLElBQUksRUFBRXdCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxXQUFXO1FBRS9CQSxPQUFPO2VBQ0ZBO1lBQ0g7Z0JBQ0VDLGVBQWVDLDBCQUFvQjtnQkFDbkNDLGdCQUFnQkQsMEJBQW9CO2dCQUNwQy9CLEtBQUssQ0FBQ0MsVUFBVUMsV0FBVyxHQUFHQztvQkFDNUIsSUFBSUUsVUFBVTtvQkFFZCxNQUFNNEIsOEJBQThCUCxvQkFBb0JRLFdBQVcsSUFDN0RDLCtCQUErQlIscUJBQXFCTyxXQUFXLElBQUksR0FBRztvQkFFNUUsSUFBSUQsZ0NBQWdDRSw4QkFBOEI7d0JBQ2hFLE1BQU1DLGdDQUFnQ1Ysb0JBQW9CVyxhQUFhLElBQ2pFQyxpQ0FBaUNYLHFCQUFxQlUsYUFBYSxJQUNuRTdCLGlCQUFpQjRCLCtCQUNqQjNCLGtCQUFrQjZCLGdDQUNsQjVCLFlBQVksSUFBSSxDQUFDSCxPQUFPLENBQUNDLGdCQUFnQkMsb0JBQW9CTjt3QkFFbkUsSUFBSU8sV0FBVzs0QkFDYkwsVUFBVTt3QkFDWjtvQkFDRjtvQkFFQSxPQUFPQTtnQkFDVDtZQUNGO1NBQ0Q7UUFFRHdCLEtBQUtVLElBQUksQ0FBQyxDQUFDQztZQUNULE1BQU0sRUFBRVYsYUFBYSxFQUFFRSxjQUFjLEVBQUVoQyxHQUFHLEVBQUUsR0FBR3dDO1lBRS9DLE1BQU12QyxXQUFXNkIsY0FBY0osc0JBQ3pCeEIsWUFBWThCLGVBQWVMLHVCQUF3QixHQUFHO1lBRTVELElBQUksQUFBQzFCLGFBQWEsUUFBVUMsY0FBYyxNQUFPO2dCQUMvQyxNQUFNRSxVQUFVSixJQUFJQyxVQUFVQyxjQUFjQztnQkFFNUNFLFVBQVVELFNBQVUsR0FBRztnQkFFdkIsT0FBTztZQUNUO1FBQ0Y7UUFFQSxPQUFPQztJQUNUO0FBQ0YifQ==
|