occam-languages 2.2.26 → 2.2.27
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/utilities/continuation.js +288 -227
- package/package.json +1 -1
- package/src/utilities/continuation.js +379 -239
|
@@ -59,305 +59,366 @@ _export(exports, {
|
|
|
59
59
|
}
|
|
60
60
|
});
|
|
61
61
|
const _necessary = require("necessary");
|
|
62
|
-
const { filter: arrayFilter } = _necessary.arrayUtilities
|
|
62
|
+
const { filter: arrayFilter } = _necessary.arrayUtilities;
|
|
63
63
|
function one(array, callback, ...initialArguments) {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
let
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
if (
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
64
|
+
const continuation = initialArguments.pop(), length = array.length;
|
|
65
|
+
let count = 0, index = -1;
|
|
66
|
+
let finalArguments;
|
|
67
|
+
function next(...callbackArguments) {
|
|
68
|
+
index++;
|
|
69
|
+
if (index === length) {
|
|
70
|
+
const success = count === 1;
|
|
71
|
+
if (!success) {
|
|
72
|
+
finalArguments = initialArguments; ///
|
|
73
|
+
}
|
|
74
|
+
return continuation(success, ...finalArguments);
|
|
75
|
+
}
|
|
76
|
+
const element = array[index];
|
|
77
|
+
return callback(element, ...callbackArguments, (success, ...intermediateArguments)=>{
|
|
78
|
+
if (success) {
|
|
79
|
+
if (count === 1) {
|
|
80
|
+
const success = false;
|
|
81
|
+
finalArguments = initialArguments; ///
|
|
82
|
+
return continuation(success, ...finalArguments);
|
|
78
83
|
}
|
|
84
|
+
finalArguments = intermediateArguments; ///
|
|
85
|
+
count++;
|
|
79
86
|
}
|
|
80
|
-
|
|
87
|
+
const callbackArguments = initialArguments; ///
|
|
88
|
+
return next(...callbackArguments);
|
|
81
89
|
});
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
});
|
|
90
|
+
}
|
|
91
|
+
const callbackArguments = initialArguments; ///
|
|
92
|
+
return next(...callbackArguments);
|
|
86
93
|
}
|
|
87
94
|
function some(array, callback, ...initialArguments) {
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
let
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
95
|
+
const continuation = initialArguments.pop(), length = array.length;
|
|
96
|
+
let index = -1;
|
|
97
|
+
let finalArguments;
|
|
98
|
+
function next(...callbackArguments) {
|
|
99
|
+
index++;
|
|
100
|
+
if (index === length) {
|
|
101
|
+
const success = false;
|
|
102
|
+
finalArguments = initialArguments; ///
|
|
103
|
+
return continuation(success, ...finalArguments);
|
|
104
|
+
}
|
|
105
|
+
const element = array[index];
|
|
106
|
+
return callback(element, ...callbackArguments, (success, ...intermediateArguments)=>{
|
|
107
|
+
if (success) {
|
|
108
|
+
finalArguments = intermediateArguments; ///
|
|
109
|
+
return continuation(success, ...finalArguments);
|
|
99
110
|
}
|
|
100
|
-
|
|
111
|
+
const callbackArguments = initialArguments; ///
|
|
112
|
+
return next(...callbackArguments);
|
|
101
113
|
});
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
});
|
|
114
|
+
}
|
|
115
|
+
const callbackArguments = initialArguments; ///
|
|
116
|
+
return next(...callbackArguments);
|
|
106
117
|
}
|
|
107
118
|
function each(array, callback, ...initialArguments) {
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
let
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
119
|
+
const continuation = initialArguments.pop(), length = array.length;
|
|
120
|
+
let count = 0, index = -1;
|
|
121
|
+
let finalArguments;
|
|
122
|
+
function next(...callbackArguments) {
|
|
123
|
+
index++;
|
|
124
|
+
if (index === length) {
|
|
125
|
+
const success = count > 0;
|
|
126
|
+
finalArguments = callbackArguments; ///
|
|
127
|
+
return continuation(success, ...finalArguments);
|
|
128
|
+
}
|
|
129
|
+
const element = array[index];
|
|
130
|
+
return callback(element, ...callbackArguments, (success, ...intermediateArguments)=>{
|
|
131
|
+
if (!success) {
|
|
132
|
+
finalArguments = initialArguments; ///
|
|
133
|
+
return continuation(success, ...finalArguments);
|
|
121
134
|
}
|
|
122
|
-
|
|
135
|
+
count++;
|
|
136
|
+
const callbackArguments = intermediateArguments; ///
|
|
137
|
+
return next(...callbackArguments);
|
|
123
138
|
});
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
});
|
|
139
|
+
}
|
|
140
|
+
const callbackArguments = initialArguments; ///
|
|
141
|
+
return next(...callbackArguments);
|
|
128
142
|
}
|
|
129
143
|
function every(array, callback, ...initialArguments) {
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
let
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
144
|
+
const continuation = initialArguments.pop(), length = array.length;
|
|
145
|
+
let index = -1;
|
|
146
|
+
let finalArguments;
|
|
147
|
+
function next(...callbackArguments) {
|
|
148
|
+
index++;
|
|
149
|
+
if (index === length) {
|
|
150
|
+
const success = true;
|
|
151
|
+
finalArguments = callbackArguments; ///
|
|
152
|
+
return continuation(success, ...finalArguments);
|
|
153
|
+
}
|
|
154
|
+
const element = array[index];
|
|
155
|
+
return callback(element, ...callbackArguments, (success, ...intermediateArguments)=>{
|
|
156
|
+
if (!success) {
|
|
157
|
+
finalArguments = initialArguments; ///
|
|
158
|
+
return continuation(success, ...finalArguments);
|
|
141
159
|
}
|
|
142
|
-
|
|
160
|
+
const callbackArguments = intermediateArguments; ///
|
|
161
|
+
return next(...callbackArguments);
|
|
143
162
|
});
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
});
|
|
163
|
+
}
|
|
164
|
+
const callbackArguments = initialArguments; ///
|
|
165
|
+
return next(...callbackArguments);
|
|
148
166
|
}
|
|
149
167
|
function reduce(array, initialValue, callback, ...initialArguments) {
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
let
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
value
|
|
158
|
-
|
|
168
|
+
const continuation = initialArguments.pop(), length = array.length;
|
|
169
|
+
let index = -1;
|
|
170
|
+
let finalArguments;
|
|
171
|
+
function next(value, ...callbackArguments) {
|
|
172
|
+
index++;
|
|
173
|
+
if (index === length) {
|
|
174
|
+
finalArguments = callbackArguments; ///
|
|
175
|
+
return continuation(value, ...finalArguments);
|
|
176
|
+
}
|
|
177
|
+
const element = array[index];
|
|
178
|
+
return callback(element, value, ...callbackArguments, (value, ...intermediateArguments)=>{
|
|
179
|
+
const callbackArguments = intermediateArguments; ///
|
|
180
|
+
return next(value, ...callbackArguments);
|
|
159
181
|
});
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
});
|
|
182
|
+
}
|
|
183
|
+
const value = initialValue, callbackArguments = initialArguments; ///
|
|
184
|
+
return next(value, ...callbackArguments);
|
|
164
185
|
}
|
|
165
186
|
function forEach(array, callback, ...initialArguments) {
|
|
166
|
-
const continuation = initialArguments.pop();
|
|
167
|
-
let
|
|
168
|
-
|
|
187
|
+
const continuation = initialArguments.pop(), length = array.length;
|
|
188
|
+
let index = -1;
|
|
189
|
+
let finalArguments;
|
|
190
|
+
function next(...callbackArguments) {
|
|
191
|
+
index++;
|
|
192
|
+
if (index === length) {
|
|
193
|
+
finalArguments = callbackArguments; ///
|
|
194
|
+
return continuation(...finalArguments);
|
|
195
|
+
}
|
|
196
|
+
const element = array[index];
|
|
169
197
|
return callback(element, ...callbackArguments, (...intermediateArguments)=>{
|
|
170
|
-
callbackArguments = intermediateArguments; ///
|
|
171
|
-
next();
|
|
198
|
+
const callbackArguments = intermediateArguments; ///
|
|
199
|
+
return next(...callbackArguments);
|
|
172
200
|
});
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
});
|
|
201
|
+
}
|
|
202
|
+
const callbackArguments = initialArguments; ///
|
|
203
|
+
return next(...callbackArguments);
|
|
177
204
|
}
|
|
178
205
|
function forwardsEvery(array, callback, ...initialArguments) {
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
let
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
206
|
+
const continuation = initialArguments.pop(), length = array.length;
|
|
207
|
+
let index = -1;
|
|
208
|
+
let finalArguments;
|
|
209
|
+
function next(...callbackArguments) {
|
|
210
|
+
index++;
|
|
211
|
+
if (index === length) {
|
|
212
|
+
const success = true;
|
|
213
|
+
finalArguments = callbackArguments; ///
|
|
214
|
+
return continuation(success, ...finalArguments);
|
|
215
|
+
}
|
|
216
|
+
const element = array[index];
|
|
217
|
+
return callback(element, ...callbackArguments, (success, ...intermediateArguments)=>{
|
|
218
|
+
if (!success) {
|
|
219
|
+
finalArguments = initialArguments; ///
|
|
220
|
+
return continuation(success, ...finalArguments);
|
|
190
221
|
}
|
|
191
|
-
|
|
222
|
+
const callbackArguments = intermediateArguments; ///
|
|
223
|
+
return next(...callbackArguments);
|
|
192
224
|
});
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
});
|
|
225
|
+
}
|
|
226
|
+
const callbackArguments = initialArguments; ///
|
|
227
|
+
return next(...callbackArguments);
|
|
197
228
|
}
|
|
198
229
|
function backwardsEvery(array, callback, ...initialArguments) {
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
let
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
230
|
+
const continuation = initialArguments.pop(), length = array.length;
|
|
231
|
+
let index = length;
|
|
232
|
+
let finalArguments;
|
|
233
|
+
function next(...callbackArguments) {
|
|
234
|
+
index--;
|
|
235
|
+
if (index === -1) {
|
|
236
|
+
const success = true;
|
|
237
|
+
finalArguments = callbackArguments; ///
|
|
238
|
+
return continuation(success, ...finalArguments);
|
|
239
|
+
}
|
|
240
|
+
const element = array[index];
|
|
241
|
+
return callback(element, ...callbackArguments, (success, ...intermediateArguments)=>{
|
|
242
|
+
if (!success) {
|
|
243
|
+
finalArguments = initialArguments; ///
|
|
244
|
+
return continuation(success, ...finalArguments);
|
|
210
245
|
}
|
|
211
|
-
|
|
246
|
+
const callbackArguments = intermediateArguments; ///
|
|
247
|
+
return next(...callbackArguments);
|
|
212
248
|
});
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
});
|
|
249
|
+
}
|
|
250
|
+
const callbackArguments = initialArguments; ///
|
|
251
|
+
return next(...callbackArguments);
|
|
217
252
|
}
|
|
218
253
|
function forwardsForEach(array, callback, ...initialArguments) {
|
|
219
|
-
const continuation = initialArguments.pop();
|
|
220
|
-
let
|
|
221
|
-
|
|
254
|
+
const continuation = initialArguments.pop(), length = array.length;
|
|
255
|
+
let index = -1;
|
|
256
|
+
let finalArguments;
|
|
257
|
+
function next(...callbackArguments) {
|
|
258
|
+
index++;
|
|
259
|
+
if (index === length) {
|
|
260
|
+
finalArguments = callbackArguments; ///
|
|
261
|
+
return continuation(...finalArguments);
|
|
262
|
+
}
|
|
263
|
+
const element = array[index];
|
|
222
264
|
return callback(element, ...callbackArguments, (...intermediateArguments)=>{
|
|
223
|
-
callbackArguments = intermediateArguments; ///
|
|
224
|
-
next();
|
|
265
|
+
const callbackArguments = intermediateArguments; ///
|
|
266
|
+
return next(...callbackArguments);
|
|
225
267
|
});
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
});
|
|
268
|
+
}
|
|
269
|
+
const callbackArguments = initialArguments; ///
|
|
270
|
+
return next(...callbackArguments);
|
|
230
271
|
}
|
|
231
272
|
function backwardsForEach(array, callback, ...initialArguments) {
|
|
232
|
-
const continuation = initialArguments.pop();
|
|
233
|
-
let
|
|
234
|
-
|
|
273
|
+
const continuation = initialArguments.pop(), length = array.length;
|
|
274
|
+
let index = length;
|
|
275
|
+
let finalArguments;
|
|
276
|
+
function next(...callbackArguments) {
|
|
277
|
+
index--;
|
|
278
|
+
if (index === -1) {
|
|
279
|
+
finalArguments = callbackArguments; ///
|
|
280
|
+
return continuation(...finalArguments);
|
|
281
|
+
}
|
|
282
|
+
const element = array[index];
|
|
235
283
|
return callback(element, ...callbackArguments, (...intermediateArguments)=>{
|
|
236
|
-
callbackArguments = intermediateArguments; ///
|
|
237
|
-
next();
|
|
284
|
+
const callbackArguments = intermediateArguments; ///
|
|
285
|
+
return next(...callbackArguments);
|
|
238
286
|
});
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
});
|
|
287
|
+
}
|
|
288
|
+
const callbackArguments = initialArguments; ///
|
|
289
|
+
return next(...callbackArguments);
|
|
243
290
|
}
|
|
244
291
|
function filter(array, callback, ...initialArguments) {
|
|
292
|
+
const continuation = initialArguments.pop(), length = array.length;
|
|
245
293
|
const deletedElements = [];
|
|
246
|
-
|
|
247
|
-
let
|
|
248
|
-
|
|
249
|
-
return asynchronousBackwardsForEach(array, (element, next, done)=>{
|
|
294
|
+
let index = length;
|
|
295
|
+
let finalArguments;
|
|
296
|
+
function next(...callbackArguments) {
|
|
250
297
|
index--;
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
298
|
+
if (index === -1) {
|
|
299
|
+
finalArguments = callbackArguments; ///
|
|
300
|
+
return continuation(deletedElements, ...finalArguments);
|
|
301
|
+
}
|
|
302
|
+
const element = array[index];
|
|
303
|
+
return callback(element, ...callbackArguments, (passed, ...intermediateArguments)=>{
|
|
254
304
|
if (!passed) {
|
|
255
|
-
const
|
|
256
|
-
|
|
305
|
+
const startIndex = index, deleteCount = 1, deletedElement = element; ///
|
|
306
|
+
array.splice(startIndex, deleteCount);
|
|
307
|
+
deletedElements.unshift(deletedElement);
|
|
257
308
|
}
|
|
258
|
-
|
|
309
|
+
const callbackArguments = intermediateArguments; ///
|
|
310
|
+
return next(...callbackArguments);
|
|
259
311
|
});
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
});
|
|
312
|
+
}
|
|
313
|
+
const callbackArguments = initialArguments; ///
|
|
314
|
+
return next(...callbackArguments);
|
|
264
315
|
}
|
|
265
316
|
function prune(array, callback, ...initialArguments) {
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
let
|
|
269
|
-
let
|
|
270
|
-
|
|
271
|
-
index
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
317
|
+
const continuation = initialArguments.pop(), length = array.length;
|
|
318
|
+
let deletedElement;
|
|
319
|
+
let index = length;
|
|
320
|
+
let finalArguments;
|
|
321
|
+
function next(...callbackArguments) {
|
|
322
|
+
index--;
|
|
323
|
+
if (index === -1) {
|
|
324
|
+
deletedElement = undefined;
|
|
325
|
+
finalArguments = initialArguments; ///
|
|
326
|
+
return continuation(deletedElement, ...finalArguments);
|
|
327
|
+
}
|
|
328
|
+
const element = array[index];
|
|
329
|
+
return callback(element, ...callbackArguments, (passed, ...intermediateArguments)=>{
|
|
275
330
|
if (!passed) {
|
|
276
|
-
const
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
return;
|
|
331
|
+
const startIndex = index, deleteCount = 1, deletedElement = element; ///
|
|
332
|
+
array.splice(startIndex, deleteCount);
|
|
333
|
+
finalArguments = intermediateArguments; ///
|
|
334
|
+
return continuation(deletedElement, ...finalArguments);
|
|
280
335
|
}
|
|
281
|
-
|
|
336
|
+
const callbackArguments = initialArguments; ///
|
|
337
|
+
return next(...callbackArguments);
|
|
282
338
|
});
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
});
|
|
339
|
+
}
|
|
340
|
+
const callbackArguments = initialArguments; ///
|
|
341
|
+
return next(...callbackArguments);
|
|
287
342
|
}
|
|
288
343
|
function extract(array, callback, ...initialArguments) {
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
let
|
|
292
|
-
let
|
|
293
|
-
|
|
294
|
-
index
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
344
|
+
const continuation = initialArguments.pop(), length = array.length;
|
|
345
|
+
let deletedElement;
|
|
346
|
+
let index = length;
|
|
347
|
+
let finalArguments;
|
|
348
|
+
function next(...callbackArguments) {
|
|
349
|
+
index--;
|
|
350
|
+
if (index === -1) {
|
|
351
|
+
deletedElement = undefined;
|
|
352
|
+
finalArguments = initialArguments; ///
|
|
353
|
+
return continuation(deletedElement, ...finalArguments);
|
|
354
|
+
}
|
|
355
|
+
const element = array[index];
|
|
356
|
+
return callback(element, ...callbackArguments, (passed, ...intermediateArguments)=>{
|
|
298
357
|
if (passed) {
|
|
299
|
-
const
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
return;
|
|
358
|
+
const startIndex = index, deleteCount = 1, deletedElement = element; ///
|
|
359
|
+
array.splice(startIndex, deleteCount);
|
|
360
|
+
finalArguments = intermediateArguments; ///
|
|
361
|
+
return continuation(deletedElement, ...finalArguments);
|
|
303
362
|
}
|
|
304
|
-
|
|
363
|
+
const callbackArguments = initialArguments; ///
|
|
364
|
+
return next(...callbackArguments);
|
|
305
365
|
});
|
|
306
|
-
}
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
});
|
|
366
|
+
}
|
|
367
|
+
const callbackArguments = initialArguments; ///
|
|
368
|
+
return next(...callbackArguments);
|
|
310
369
|
}
|
|
311
370
|
function match(arrayA, arrayB, callback, ...initialArguments) {
|
|
312
|
-
let success = true;
|
|
313
371
|
const continuation = initialArguments.pop();
|
|
314
372
|
const arrayALength = arrayA.length, arrayBLength = arrayB.length;
|
|
373
|
+
let finalArguments;
|
|
315
374
|
if (arrayALength !== arrayBLength) {
|
|
316
|
-
success = false;
|
|
317
|
-
|
|
375
|
+
const success = false;
|
|
376
|
+
finalArguments = initialArguments; ///
|
|
377
|
+
return continuation(success, ...finalArguments);
|
|
318
378
|
}
|
|
379
|
+
const length = arrayALength; ///
|
|
319
380
|
let index = -1;
|
|
320
|
-
|
|
321
|
-
return asynchronousForEach(arrayA, (elementA, next, done)=>{
|
|
381
|
+
function next(...callbackArguments) {
|
|
322
382
|
index++;
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
383
|
+
if (index === length) {
|
|
384
|
+
const success = true;
|
|
385
|
+
finalArguments = callbackArguments; ///
|
|
386
|
+
return continuation(success, ...finalArguments);
|
|
387
|
+
}
|
|
388
|
+
const elementA = arrayA[index], elementB = arrayB[index];
|
|
389
|
+
return callback(elementA, elementB, ...callbackArguments, (success, ...intermediateArguments)=>{
|
|
390
|
+
if (!success) {
|
|
391
|
+
finalArguments = initialArguments; ///
|
|
392
|
+
return continuation(success, ...finalArguments);
|
|
331
393
|
}
|
|
332
|
-
|
|
394
|
+
const callbackArguments = intermediateArguments; ///
|
|
395
|
+
return next(...callbackArguments);
|
|
333
396
|
});
|
|
334
|
-
}
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
});
|
|
397
|
+
}
|
|
398
|
+
const callbackArguments = initialArguments; ///
|
|
399
|
+
return next(...callbackArguments);
|
|
338
400
|
}
|
|
339
401
|
function resolve(arrayA, arrayB, callback, ...initialArguments) {
|
|
340
402
|
arrayA = [
|
|
341
403
|
...arrayA
|
|
342
404
|
];
|
|
343
405
|
const continuation = initialArguments.pop();
|
|
344
|
-
let
|
|
345
|
-
function nextPass() {
|
|
406
|
+
let finalArguments;
|
|
407
|
+
function nextPass(...callbackArguments) {
|
|
346
408
|
let success = false;
|
|
347
|
-
const
|
|
348
|
-
if (
|
|
409
|
+
const length = arrayA.length; ///
|
|
410
|
+
if (length === 0) {
|
|
349
411
|
success = true;
|
|
350
|
-
|
|
412
|
+
finalArguments = callbackArguments; ///
|
|
351
413
|
return continuation(success, ...finalArguments);
|
|
352
414
|
}
|
|
353
415
|
let index = -1;
|
|
354
|
-
function nextElement() {
|
|
416
|
+
function nextElement(...callbackArguments) {
|
|
355
417
|
index++;
|
|
356
|
-
|
|
357
|
-
if (terminate) {
|
|
418
|
+
if (index === length) {
|
|
358
419
|
if (!success) {
|
|
359
420
|
success = false;
|
|
360
|
-
const finalArguments =
|
|
421
|
+
const finalArguments = initialArguments; ///
|
|
361
422
|
return continuation(success, ...finalArguments);
|
|
362
423
|
}
|
|
363
424
|
arrayFilter(arrayA, (elementA)=>{
|
|
@@ -366,24 +427,24 @@ function resolve(arrayA, arrayB, callback, ...initialArguments) {
|
|
|
366
427
|
return true;
|
|
367
428
|
}
|
|
368
429
|
});
|
|
369
|
-
nextPass();
|
|
430
|
+
return nextPass(...callbackArguments);
|
|
370
431
|
} else {
|
|
371
432
|
const elementA = arrayA[index];
|
|
372
|
-
return callback(elementA, ...callbackArguments, (...intermediateArguments)=>{
|
|
373
|
-
const passed = intermediateArguments.shift();
|
|
374
|
-
callbackArguments = intermediateArguments; ///
|
|
433
|
+
return callback(elementA, ...callbackArguments, (passed, ...intermediateArguments)=>{
|
|
375
434
|
if (passed) {
|
|
435
|
+
callbackArguments = intermediateArguments; ///
|
|
376
436
|
const elementB = elementA; ///
|
|
377
437
|
arrayB.push(elementB);
|
|
378
438
|
success = true;
|
|
379
439
|
}
|
|
380
|
-
nextElement();
|
|
440
|
+
return nextElement(...callbackArguments);
|
|
381
441
|
});
|
|
382
442
|
}
|
|
383
443
|
}
|
|
384
|
-
nextElement();
|
|
444
|
+
return nextElement(...callbackArguments);
|
|
385
445
|
}
|
|
386
|
-
|
|
446
|
+
const callbackArguments = initialArguments; ///
|
|
447
|
+
return nextPass(...callbackArguments);
|
|
387
448
|
}
|
|
388
449
|
const _default = {
|
|
389
450
|
one,
|
|
@@ -403,4 +464,4 @@ const _default = {
|
|
|
403
464
|
resolve
|
|
404
465
|
};
|
|
405
466
|
|
|
406
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvY29udGludWF0aW9uLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcywgYXN5bmNocm9ub3VzVXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5jb25zdCB7IGZpbHRlcjogYXJyYXlGaWx0ZXIgfSA9IGFycmF5VXRpbGl0aWVzLFxuICAgICAgeyBmb3JFYWNoOiBhc3luY2hyb25vdXNGb3JFYWNoLFxuICAgICAgICBmb3J3YXJkc0ZvckVhY2g6IGFzeW5jaHJvbm91c0ZvcndhcmRzRm9yRWFjaCxcbiAgICAgICAgYmFja3dhcmRzRm9yRWFjaDogYXN5bmNocm9ub3VzQmFja3dhcmRzRm9yRWFjaCB9ID0gYXN5bmNocm9ub3VzVXRpbGl0aWVzO1xuXG5leHBvcnQgZnVuY3Rpb24gb25lKGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gIGNvbnN0IGNvbnRpbnVhdGlvbiA9IGluaXRpYWxBcmd1bWVudHMucG9wKCk7XG5cbiAgbGV0IGNhbGxiYWNrQXJndW1lbnRzID0gaW5pdGlhbEFyZ3VtZW50czsgIC8vL1xuXG4gIHJldHVybiBhc3luY2hyb25vdXNGb3JFYWNoKGFycmF5LCAoZWxlbWVudCwgbmV4dCwgZG9uZSkgPT4ge1xuICAgIHJldHVybiBjYWxsYmFjayhlbGVtZW50LCAuLi5jYWxsYmFja0FyZ3VtZW50cywgKC4uLmludGVybWVkaWF0ZUFyZ3VtZW50cykgPT4ge1xuICAgICAgY29uc3QgcGFzc2VkID0gaW50ZXJtZWRpYXRlQXJndW1lbnRzLnNoaWZ0KCk7XG5cbiAgICAgIGNhbGxiYWNrQXJndW1lbnRzID0gaW50ZXJtZWRpYXRlQXJndW1lbnRzOyAgLy8vXG5cbiAgICAgIGlmIChwYXNzZWQpIHtcbiAgICAgICAgaWYgKCFzdWNjZXNzKSB7XG4gICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgICAgZG9uZSgpO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG5leHQoKTtcbiAgICB9KTtcbiAgfSwgKCkgPT4ge1xuICAgIGNvbnN0IGZpbmFsQXJndW1lbnRzID0gY2FsbGJhY2tBcmd1bWVudHM7IC8vL1xuXG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzLCAuLi5maW5hbEFyZ3VtZW50cyk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc29tZShhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICBjb25zdCBjb250aW51YXRpb24gPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpO1xuXG4gIGxldCBjYWxsYmFja0FyZ3VtZW50cyA9IGluaXRpYWxBcmd1bWVudHM7IC8vL1xuXG4gIHJldHVybiBhc3luY2hyb25vdXNGb3JFYWNoKGFycmF5LCAoZWxlbWVudCwgbmV4dCwgZG9uZSkgPT4ge1xuICAgIHJldHVybiBjYWxsYmFjayhlbGVtZW50LCAuLi5jYWxsYmFja0FyZ3VtZW50cywgKC4uLmludGVybWVkaWF0ZUFyZ3VtZW50cykgPT4ge1xuICAgICAgY29uc3QgcGFzc2VkID0gaW50ZXJtZWRpYXRlQXJndW1lbnRzLnNoaWZ0KCk7XG5cbiAgICAgIGNhbGxiYWNrQXJndW1lbnRzID0gaW50ZXJtZWRpYXRlQXJndW1lbnRzOyAgLy8vXG5cbiAgICAgIGlmIChwYXNzZWQpIHtcbiAgICAgICAgc3VjY2VzcyA9IHRydWU7XG5cbiAgICAgICAgZG9uZSgpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbmV4dCgpO1xuICAgIH0pO1xuICB9LCAoKSA9PiB7XG4gICAgY29uc3QgZmluYWxBcmd1bWVudHMgPSBjYWxsYmFja0FyZ3VtZW50czsgLy8vXG5cbiAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MsIC4uLmZpbmFsQXJndW1lbnRzKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlYWNoKGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gIGNvbnN0IGNvbnRpbnVhdGlvbiA9IGluaXRpYWxBcmd1bWVudHMucG9wKCk7XG5cbiAgbGV0IGNhbGxiYWNrQXJndW1lbnRzID0gaW5pdGlhbEFyZ3VtZW50czsgLy8vXG5cbiAgcmV0dXJuIGFzeW5jaHJvbm91c0ZvckVhY2goYXJyYXksIChlbGVtZW50LCBuZXh0LCBkb25lKSA9PiB7XG4gICAgcmV0dXJuIGNhbGxiYWNrKGVsZW1lbnQsIC4uLmNhbGxiYWNrQXJndW1lbnRzLCAoLi4uaW50ZXJtZWRpYXRlQXJndW1lbnRzKSA9PiB7XG4gICAgICBjb25zdCBwYXNzZWQgPSBpbnRlcm1lZGlhdGVBcmd1bWVudHMuc2hpZnQoKTtcblxuICAgICAgY2FsbGJhY2tBcmd1bWVudHMgPSBpbnRlcm1lZGlhdGVBcmd1bWVudHM7ICAvLy9cblxuICAgICAgaWYgKHBhc3NlZCkge1xuICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICBkb25lKCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBuZXh0KCk7XG4gICAgfSk7XG4gIH0sICgpID0+IHtcbiAgICBjb25zdCBmaW5hbEFyZ3VtZW50cyA9IGNhbGxiYWNrQXJndW1lbnRzOyAvLy9cblxuICAgIHJldHVybiBjb250aW51YXRpb24oc3VjY2VzcywgLi4uZmluYWxBcmd1bWVudHMpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV2ZXJ5KGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBsZXQgc3VjY2VzcyA9IHRydWU7XG5cbiAgY29uc3QgY29udGludWF0aW9uID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKTtcblxuICBsZXQgY2FsbGJhY2tBcmd1bWVudHMgPSBpbml0aWFsQXJndW1lbnRzOyAvLy9cblxuICByZXR1cm4gYXN5bmNocm9ub3VzRm9yRWFjaChhcnJheSwgKGVsZW1lbnQsIG5leHQsIGRvbmUpID0+IHtcbiAgICByZXR1cm4gY2FsbGJhY2soZWxlbWVudCwgLi4uY2FsbGJhY2tBcmd1bWVudHMsICguLi5pbnRlcm1lZGlhdGVBcmd1bWVudHMpID0+IHtcbiAgICAgIGNvbnN0IHBhc3NlZCA9IGludGVybWVkaWF0ZUFyZ3VtZW50cy5zaGlmdCgpO1xuXG4gICAgICBjYWxsYmFja0FyZ3VtZW50cyA9IGludGVybWVkaWF0ZUFyZ3VtZW50czsgIC8vL1xuXG4gICAgICBpZiAoIXBhc3NlZCkge1xuICAgICAgICBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgZG9uZSgpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbmV4dCgpO1xuICAgIH0pO1xuICB9LCAoKSA9PiB7XG4gICAgY29uc3QgZmluYWxBcmd1bWVudHMgPSBjYWxsYmFja0FyZ3VtZW50czsgLy8vXG5cbiAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MsIC4uLmZpbmFsQXJndW1lbnRzKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWR1Y2UoYXJyYXksIGluaXRpYWxWYWx1ZSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgbGV0IHZhbHVlID0gaW5pdGlhbFZhbHVlOyAvLy9cblxuICBjb25zdCBjb250aW51YXRpb24gPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpO1xuXG4gIGxldCBjYWxsYmFja0FyZ3VtZW50cyA9IGluaXRpYWxBcmd1bWVudHM7IC8vL1xuXG4gIHJldHVybiBhc3luY2hyb25vdXNGb3JFYWNoKGFycmF5LCAoZWxlbWVudCwgbmV4dCwgZG9uZSkgPT4ge1xuICAgIHJldHVybiBjYWxsYmFjayh2YWx1ZSwgZWxlbWVudCwgLi4uY2FsbGJhY2tBcmd1bWVudHMsICguLi5pbnRlcm1lZGlhdGVBcmd1bWVudHMpID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGludGVybWVkaWF0ZUFyZ3VtZW50cy5zaGlmdCgpO1xuXG4gICAgICBjYWxsYmFja0FyZ3VtZW50cyA9IGludGVybWVkaWF0ZUFyZ3VtZW50czsgIC8vL1xuXG4gICAgICB2YWx1ZSA9IGN1cnJlbnRWYWx1ZTsgIC8vL1xuXG4gICAgICBuZXh0KCk7XG4gICAgfSk7XG4gIH0sICgpID0+IHtcbiAgICBjb25zdCBmaW5hbEFyZ3VtZW50cyA9IGNhbGxiYWNrQXJndW1lbnRzOyAvLy9cblxuICAgIHJldHVybiBjb250aW51YXRpb24odmFsdWUsIC4uLmZpbmFsQXJndW1lbnRzKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JFYWNoKGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBjb250aW51YXRpb24gPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpO1xuXG4gIGxldCBjYWxsYmFja0FyZ3VtZW50cyA9IGluaXRpYWxBcmd1bWVudHM7IC8vL1xuXG4gIHJldHVybiBhc3luY2hyb25vdXNGb3JFYWNoKGFycmF5LCAoZWxlbWVudCwgbmV4dCwgZG9uZSkgPT4ge1xuICAgIHJldHVybiBjYWxsYmFjayhlbGVtZW50LCAuLi5jYWxsYmFja0FyZ3VtZW50cywgKC4uLmludGVybWVkaWF0ZUFyZ3VtZW50cykgPT4ge1xuICAgICAgY2FsbGJhY2tBcmd1bWVudHMgPSBpbnRlcm1lZGlhdGVBcmd1bWVudHM7ICAvLy9cblxuICAgICAgbmV4dCgpO1xuICAgIH0pO1xuICB9LCAoKSA9PiB7XG4gICAgY29uc3QgZmluYWxBcmd1bWVudHMgPSBjYWxsYmFja0FyZ3VtZW50czsgLy8vXG5cbiAgICByZXR1cm4gY29udGludWF0aW9uKC4uLmZpbmFsQXJndW1lbnRzKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3J3YXJkc0V2ZXJ5KGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBsZXQgc3VjY2VzcyA9IHRydWU7XG5cbiAgY29uc3QgY29udGludWF0aW9uID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKTtcblxuICBsZXQgY2FsbGJhY2tBcmd1bWVudHMgPSBpbml0aWFsQXJndW1lbnRzOyAvLy9cblxuICByZXR1cm4gYXN5bmNocm9ub3VzRm9yd2FyZHNGb3JFYWNoKGFycmF5LCAoZWxlbWVudCwgbmV4dCwgZG9uZSkgPT4ge1xuICAgIHJldHVybiBjYWxsYmFjayhlbGVtZW50LCAuLi5jYWxsYmFja0FyZ3VtZW50cywgKC4uLmludGVybWVkaWF0ZUFyZ3VtZW50cykgPT4ge1xuICAgICAgY29uc3QgcGFzc2VkID0gaW50ZXJtZWRpYXRlQXJndW1lbnRzLnNoaWZ0KCk7XG5cbiAgICAgIGNhbGxiYWNrQXJndW1lbnRzID0gaW50ZXJtZWRpYXRlQXJndW1lbnRzOyAgLy8vXG5cbiAgICAgIGlmICghcGFzc2VkKSB7XG4gICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICBkb25lKCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBuZXh0KCk7XG4gICAgfSk7XG4gIH0sICgpID0+IHtcbiAgICBjb25zdCBmaW5hbEFyZ3VtZW50cyA9IGNhbGxiYWNrQXJndW1lbnRzOyAvLy9cblxuICAgIHJldHVybiBjb250aW51YXRpb24oc3VjY2VzcywgLi4uZmluYWxBcmd1bWVudHMpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJhY2t3YXJkc0V2ZXJ5KGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBsZXQgc3VjY2VzcyA9IHRydWU7XG5cbiAgY29uc3QgY29udGludWF0aW9uID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKTtcblxuICBsZXQgY2FsbGJhY2tBcmd1bWVudHMgPSBpbml0aWFsQXJndW1lbnRzOyAvLy9cblxuICByZXR1cm4gYXN5bmNocm9ub3VzQmFja3dhcmRzRm9yRWFjaChhcnJheSwgKGVsZW1lbnQsIG5leHQsIGRvbmUpID0+IHtcbiAgICByZXR1cm4gY2FsbGJhY2soZWxlbWVudCwgLi4uY2FsbGJhY2tBcmd1bWVudHMsICguLi5pbnRlcm1lZGlhdGVBcmd1bWVudHMpID0+IHtcbiAgICAgIGNvbnN0IHBhc3NlZCA9IGludGVybWVkaWF0ZUFyZ3VtZW50cy5zaGlmdCgpO1xuXG4gICAgICBjYWxsYmFja0FyZ3VtZW50cyA9IGludGVybWVkaWF0ZUFyZ3VtZW50czsgIC8vL1xuXG4gICAgICBpZiAoIXBhc3NlZCkge1xuICAgICAgICBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgZG9uZSgpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbmV4dCgpO1xuICAgIH0pO1xuICB9LCAoKSA9PiB7XG4gICAgY29uc3QgZmluYWxBcmd1bWVudHMgPSBjYWxsYmFja0FyZ3VtZW50czsgLy8vXG5cbiAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MsIC4uLmZpbmFsQXJndW1lbnRzKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3J3YXJkc0ZvckVhY2goYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGNvbnRpbnVhdGlvbiA9IGluaXRpYWxBcmd1bWVudHMucG9wKCk7XG5cbiAgbGV0IGNhbGxiYWNrQXJndW1lbnRzID0gaW5pdGlhbEFyZ3VtZW50czsgLy8vXG5cbiAgcmV0dXJuIGFzeW5jaHJvbm91c0ZvcndhcmRzRm9yRWFjaChhcnJheSwgKGVsZW1lbnQsIG5leHQsIGRvbmUpID0+IHtcbiAgICByZXR1cm4gY2FsbGJhY2soZWxlbWVudCwgLi4uY2FsbGJhY2tBcmd1bWVudHMsICguLi5pbnRlcm1lZGlhdGVBcmd1bWVudHMpID0+IHtcbiAgICAgIGNhbGxiYWNrQXJndW1lbnRzID0gaW50ZXJtZWRpYXRlQXJndW1lbnRzOyAgLy8vXG5cbiAgICAgIG5leHQoKTtcbiAgICB9KTtcbiAgfSwgKCkgPT4ge1xuICAgIGNvbnN0IGZpbmFsQXJndW1lbnRzID0gY2FsbGJhY2tBcmd1bWVudHM7IC8vL1xuXG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbiguLi5maW5hbEFyZ3VtZW50cyk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFja3dhcmRzRm9yRWFjaChhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgY29udGludWF0aW9uID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKTtcblxuICBsZXQgY2FsbGJhY2tBcmd1bWVudHMgPSBpbml0aWFsQXJndW1lbnRzOyAvLy9cblxuICByZXR1cm4gYXN5bmNocm9ub3VzQmFja3dhcmRzRm9yRWFjaChhcnJheSwgKGVsZW1lbnQsIG5leHQsIGRvbmUpID0+IHtcbiAgICByZXR1cm4gY2FsbGJhY2soZWxlbWVudCwgLi4uY2FsbGJhY2tBcmd1bWVudHMsICguLi5pbnRlcm1lZGlhdGVBcmd1bWVudHMpID0+IHtcbiAgICAgIGNhbGxiYWNrQXJndW1lbnRzID0gaW50ZXJtZWRpYXRlQXJndW1lbnRzOyAgLy8vXG5cbiAgICAgIG5leHQoKTtcbiAgICB9KTtcbiAgfSwgKCkgPT4ge1xuICAgIGNvbnN0IGZpbmFsQXJndW1lbnRzID0gY2FsbGJhY2tBcmd1bWVudHM7IC8vL1xuXG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbiguLi5maW5hbEFyZ3VtZW50cyk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyKGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBkZWxldGVkRWxlbWVudHMgPSBbXTtcblxuICBjb25zdCBjb250aW51YXRpb24gPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpO1xuXG4gIGxldCBjYWxsYmFja0FyZ3VtZW50cyA9IGluaXRpYWxBcmd1bWVudHM7IC8vL1xuXG4gIGxldCBpbmRleCA9IGFycmF5Lmxlbmd0aDtcblxuICByZXR1cm4gYXN5bmNocm9ub3VzQmFja3dhcmRzRm9yRWFjaChhcnJheSwgKGVsZW1lbnQsIG5leHQsIGRvbmUpID0+IHtcbiAgICBpbmRleC0tO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKGVsZW1lbnQsIC4uLmNhbGxiYWNrQXJndW1lbnRzLCAoLi4uaW50ZXJtZWRpYXRlQXJndW1lbnRzKSA9PiB7XG4gICAgICBjb25zdCBwYXNzZWQgPSBpbnRlcm1lZGlhdGVBcmd1bWVudHMuc2hpZnQoKTtcblxuICAgICAgY2FsbGJhY2tBcmd1bWVudHMgPSBpbnRlcm1lZGlhdGVBcmd1bWVudHM7IC8vL1xuXG4gICAgICBpZiAoIXBhc3NlZCkge1xuICAgICAgICBjb25zdCBzdGFydCA9IGluZGV4LCAgLy8vXG4gICAgICAgICAgICAgIGRlbGV0ZUNvdW50ID0gMSxcbiAgICAgICAgICAgICAgZGVsZXRlZEVsZW1lbnQgPSBhcnJheS5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50KS5wb3AoKTsgIC8vL1xuXG4gICAgICAgIGRlbGV0ZWRFbGVtZW50cy51bnNoaWZ0KGRlbGV0ZWRFbGVtZW50KTsgIC8vL1xuICAgICAgfVxuXG4gICAgICBuZXh0KCk7XG4gICAgfSk7XG4gIH0sICgpID0+IHtcbiAgICBjb25zdCBmaW5hbEFyZ3VtZW50cyA9IGNhbGxiYWNrQXJndW1lbnRzOyAvLy9cblxuICAgIHJldHVybiBjb250aW51YXRpb24oZGVsZXRlZEVsZW1lbnRzLCAuLi5maW5hbEFyZ3VtZW50cyk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJ1bmUoYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGxldCBkZWxldGVkRWxlbWVudCA9IHVuZGVmaW5lZDsgLy8vXG5cbiAgY29uc3QgY29udGludWF0aW9uID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKTtcblxuICBsZXQgY2FsbGJhY2tBcmd1bWVudHMgPSBpbml0aWFsQXJndW1lbnRzOyAvLy9cblxuICBsZXQgaW5kZXggPSAtMTtcblxuICByZXR1cm4gYXN5bmNocm9ub3VzRm9yRWFjaChhcnJheSwgKGVsZW1lbnQsIG5leHQsIGRvbmUpID0+IHtcbiAgICBpbmRleCsrO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKGVsZW1lbnQsIC4uLmNhbGxiYWNrQXJndW1lbnRzLCAoLi4uaW50ZXJtZWRpYXRlQXJndW1lbnRzKSA9PiB7XG4gICAgICBjb25zdCBwYXNzZWQgPSBpbnRlcm1lZGlhdGVBcmd1bWVudHMuc2hpZnQoKTtcblxuICAgICAgY2FsbGJhY2tBcmd1bWVudHMgPSBpbnRlcm1lZGlhdGVBcmd1bWVudHM7IC8vL1xuXG4gICAgICBpZiAoIXBhc3NlZCkge1xuICAgICAgICBjb25zdCBzdGFydCA9IGluZGV4LCAgLy8vXG4gICAgICAgICAgICAgIGRlbGV0ZUNvdW50ID0gMTtcblxuICAgICAgICBkZWxldGVkRWxlbWVudCA9IGFycmF5LnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQpLnBvcCgpOyAvLy9cblxuICAgICAgICBkb25lKCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBuZXh0KCk7XG4gICAgfSk7XG4gIH0sICgpID0+IHtcbiAgICBjb25zdCBmaW5hbEFyZ3VtZW50cyA9IGNhbGxiYWNrQXJndW1lbnRzOyAvLy9cblxuICAgIHJldHVybiBjb250aW51YXRpb24oZGVsZXRlZEVsZW1lbnQsIC4uLmZpbmFsQXJndW1lbnRzKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0KGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBsZXQgZGVsZXRlZEVsZW1lbnQgPSB1bmRlZmluZWQ7IC8vL1xuXG4gIGNvbnN0IGNvbnRpbnVhdGlvbiA9IGluaXRpYWxBcmd1bWVudHMucG9wKCk7XG5cbiAgbGV0IGNhbGxiYWNrQXJndW1lbnRzID0gaW5pdGlhbEFyZ3VtZW50czsgLy8vXG5cbiAgbGV0IGluZGV4ID0gLTE7XG5cbiAgcmV0dXJuIGFzeW5jaHJvbm91c0ZvckVhY2goYXJyYXksIChlbGVtZW50LCBuZXh0LCBkb25lKSA9PiB7XG4gICAgaW5kZXgrKztcblxuICAgIHJldHVybiBjYWxsYmFjayhlbGVtZW50LCAuLi5jYWxsYmFja0FyZ3VtZW50cywgKC4uLmludGVybWVkaWF0ZUFyZ3VtZW50cykgPT4ge1xuICAgICAgY29uc3QgcGFzc2VkID0gaW50ZXJtZWRpYXRlQXJndW1lbnRzLnNoaWZ0KCk7XG5cbiAgICAgIGNhbGxiYWNrQXJndW1lbnRzID0gaW50ZXJtZWRpYXRlQXJndW1lbnRzOyAvLy9cblxuICAgICAgaWYgKHBhc3NlZCkge1xuICAgICAgICBjb25zdCBzdGFydCA9IGluZGV4LCAgLy8vXG4gICAgICAgICAgICAgIGRlbGV0ZUNvdW50ID0gMTtcblxuICAgICAgICBkZWxldGVkRWxlbWVudCA9IGFycmF5LnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQpLnBvcCgpOyAvLy9cblxuICAgICAgICBkb25lKCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBuZXh0KCk7XG4gICAgfSk7XG4gIH0sICgpID0+IHtcbiAgICBjb25zdCBmaW5hbEFyZ3VtZW50cyA9IGNhbGxiYWNrQXJndW1lbnRzOyAvLy9cblxuICAgIHJldHVybiBjb250aW51YXRpb24oZGVsZXRlZEVsZW1lbnQsIC4uLmZpbmFsQXJndW1lbnRzKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXRjaChhcnJheUEsIGFycmF5QiwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgbGV0IHN1Y2Nlc3MgPSB0cnVlO1xuXG4gIGNvbnN0IGNvbnRpbnVhdGlvbiA9IGluaXRpYWxBcmd1bWVudHMucG9wKCk7XG5cbiAgY29uc3QgYXJyYXlBTGVuZ3RoID0gYXJyYXlBLmxlbmd0aCxcbiAgICAgICAgYXJyYXlCTGVuZ3RoID0gYXJyYXlCLmxlbmd0aDtcblxuICBpZiAoYXJyYXlBTGVuZ3RoICE9PSBhcnJheUJMZW5ndGgpIHtcbiAgICBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MsIC4uLmluaXRpYWxBcmd1bWVudHMpO1xuICB9XG5cbiAgbGV0IGluZGV4ID0gLTE7XG5cbiAgbGV0IGNhbGxiYWNrQXJndW1lbnRzID0gaW5pdGlhbEFyZ3VtZW50czsgLy8vXG5cbiAgcmV0dXJuIGFzeW5jaHJvbm91c0ZvckVhY2goYXJyYXlBLCAoZWxlbWVudEEsIG5leHQsIGRvbmUpID0+IHtcbiAgICBpbmRleCsrO1xuXG4gICAgY29uc3QgZWxlbWVudEIgPSBhcnJheUJbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKGVsZW1lbnRBLCBlbGVtZW50QiwgLi4uY2FsbGJhY2tBcmd1bWVudHMsICguLi5pbnRlcm1lZGlhdGVBcmd1bWVudHMpID0+IHtcbiAgICAgIGNvbnN0IHBhc3NlZCA9IGludGVybWVkaWF0ZUFyZ3VtZW50cy5zaGlmdCgpO1xuXG4gICAgICBjYWxsYmFja0FyZ3VtZW50cyA9IGludGVybWVkaWF0ZUFyZ3VtZW50czsgIC8vL1xuXG4gICAgICBpZiAoIXBhc3NlZCkge1xuICAgICAgICBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgZG9uZSgpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbmV4dCgpO1xuICAgIH0pO1xuICB9LCAoKSA9PiB7XG4gICAgY29uc3QgZmluYWxBcmd1bWVudHMgPSBjYWxsYmFja0FyZ3VtZW50czsgLy8vXG5cbiAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MsIC4uLmZpbmFsQXJndW1lbnRzKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlKGFycmF5QSwgYXJyYXlCLCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBhcnJheUEgPSBbICAvLy9cbiAgICAuLi5hcnJheUFcbiAgXTtcblxuICBjb25zdCBjb250aW51YXRpb24gPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpO1xuXG4gIGxldCBjYWxsYmFja0FyZ3VtZW50cyA9IGluaXRpYWxBcmd1bWVudHM7IC8vL1xuXG4gIGZ1bmN0aW9uIG5leHRQYXNzKCkge1xuICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICBjb25zdCBhcnJheUFMZW5ndGggPSBhcnJheUEubGVuZ3RoO1xuXG4gICAgaWYgKGFycmF5QUxlbmd0aCA9PT0gMCkge1xuICAgICAgc3VjY2VzcyA9IHRydWU7XG5cbiAgICAgIGNvbnN0IGZpbmFsQXJndW1lbnRzID0gY2FsbGJhY2tBcmd1bWVudHM7IC8vL1xuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MsIC4uLmZpbmFsQXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICBsZXQgaW5kZXggPSAtMTtcblxuICAgIGZ1bmN0aW9uIG5leHRFbGVtZW50KCkge1xuICAgICAgaW5kZXgrKztcblxuICAgICAgY29uc3QgdGVybWluYXRlID0gKGluZGV4ID09PSBhcnJheUFMZW5ndGgpO1xuXG4gICAgICBpZiAodGVybWluYXRlKSB7XG4gICAgICAgIGlmICghc3VjY2Vzcykge1xuICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICAgIGNvbnN0IGZpbmFsQXJndW1lbnRzID0gY2FsbGJhY2tBcmd1bWVudHM7IC8vL1xuXG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzLCAuLi5maW5hbEFyZ3VtZW50cyk7XG4gICAgICAgIH1cblxuICAgICAgICBhcnJheUZpbHRlcihhcnJheUEsIChlbGVtZW50QSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGFycmF5QkluY2x1ZGVzRWxlbWVudEEgPSBhcnJheUIuaW5jbHVkZXMoZWxlbWVudEEpO1xuXG4gICAgICAgICAgaWYgKCFhcnJheUJJbmNsdWRlc0VsZW1lbnRBKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIG5leHRQYXNzKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBlbGVtZW50QSA9IGFycmF5QVtpbmRleF07XG5cbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVsZW1lbnRBLCAuLi5jYWxsYmFja0FyZ3VtZW50cywgKC4uLmludGVybWVkaWF0ZUFyZ3VtZW50cykgPT4ge1xuICAgICAgICAgIGNvbnN0IHBhc3NlZCA9IGludGVybWVkaWF0ZUFyZ3VtZW50cy5zaGlmdCgpO1xuXG4gICAgICAgICAgY2FsbGJhY2tBcmd1bWVudHMgPSBpbnRlcm1lZGlhdGVBcmd1bWVudHM7ICAvLy9cblxuICAgICAgICAgIGlmIChwYXNzZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRCID0gZWxlbWVudEE7ICAvLy9cblxuICAgICAgICAgICAgYXJyYXlCLnB1c2goZWxlbWVudEIpO1xuXG4gICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBuZXh0RWxlbWVudCgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBuZXh0RWxlbWVudCgpO1xuICB9XG5cbiAgbmV4dFBhc3MoKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBvbmUsXG4gIHNvbWUsXG4gIGVhY2gsXG4gIGV2ZXJ5LFxuICByZWR1Y2UsXG4gIGZvckVhY2gsXG4gIGZvcndhcmRzRXZlcnksXG4gIGJhY2t3YXJkc0V2ZXJ5LFxuICBmb3J3YXJkc0ZvckVhY2gsXG4gIGJhY2t3YXJkc0ZvckVhY2gsXG4gIGZpbHRlcixcbiAgcHJ1bmUsXG4gIGV4dHJhY3QsXG4gIG1hdGNoLFxuICByZXNvbHZlXG59O1xuIl0sIm5hbWVzIjpbImJhY2t3YXJkc0V2ZXJ5IiwiYmFja3dhcmRzRm9yRWFjaCIsImVhY2giLCJldmVyeSIsImV4dHJhY3QiLCJmaWx0ZXIiLCJmb3JFYWNoIiwiZm9yd2FyZHNFdmVyeSIsImZvcndhcmRzRm9yRWFjaCIsIm1hdGNoIiwib25lIiwicHJ1bmUiLCJyZWR1Y2UiLCJyZXNvbHZlIiwic29tZSIsImFycmF5RmlsdGVyIiwiYXJyYXlVdGlsaXRpZXMiLCJhc3luY2hyb25vdXNGb3JFYWNoIiwiYXN5bmNocm9ub3VzRm9yd2FyZHNGb3JFYWNoIiwiYXN5bmNocm9ub3VzQmFja3dhcmRzRm9yRWFjaCIsImFzeW5jaHJvbm91c1V0aWxpdGllcyIsImFycmF5IiwiY2FsbGJhY2siLCJpbml0aWFsQXJndW1lbnRzIiwic3VjY2VzcyIsImNvbnRpbnVhdGlvbiIsInBvcCIsImNhbGxiYWNrQXJndW1lbnRzIiwiZWxlbWVudCIsIm5leHQiLCJkb25lIiwiaW50ZXJtZWRpYXRlQXJndW1lbnRzIiwicGFzc2VkIiwic2hpZnQiLCJmaW5hbEFyZ3VtZW50cyIsImluaXRpYWxWYWx1ZSIsInZhbHVlIiwiY3VycmVudFZhbHVlIiwiZGVsZXRlZEVsZW1lbnRzIiwiaW5kZXgiLCJsZW5ndGgiLCJzdGFydCIsImRlbGV0ZUNvdW50IiwiZGVsZXRlZEVsZW1lbnQiLCJzcGxpY2UiLCJ1bnNoaWZ0IiwidW5kZWZpbmVkIiwiYXJyYXlBIiwiYXJyYXlCIiwiYXJyYXlBTGVuZ3RoIiwiYXJyYXlCTGVuZ3RoIiwiZWxlbWVudEEiLCJlbGVtZW50QiIsIm5leHRQYXNzIiwibmV4dEVsZW1lbnQiLCJ0ZXJtaW5hdGUiLCJhcnJheUJJbmNsdWRlc0VsZW1lbnRBIiwiaW5jbHVkZXMiLCJwdXNoIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7UUErTWdCQTtlQUFBQTs7UUFnREFDO2VBQUFBOztRQXFQaEI7ZUFBQTs7UUEzYWdCQztlQUFBQTs7UUFnQ0FDO2VBQUFBOztRQStPQUM7ZUFBQUE7O1FBdkVBQztlQUFBQTs7UUFsSEFDO2VBQUFBOztRQWtCQUM7ZUFBQUE7O1FBNERBQztlQUFBQTs7UUFnSkFDO2VBQUFBOztRQXBYQUM7ZUFBQUE7O1FBMFNBQztlQUFBQTs7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
|
|
467
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvY29udGludWF0aW9uLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuY29uc3QgeyBmaWx0ZXI6IGFycmF5RmlsdGVyIH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGZ1bmN0aW9uIG9uZShhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgY29udGludWF0aW9uID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGxldCBjb3VudCA9IDAsXG4gICAgICBpbmRleCA9IC0xO1xuXG4gIGxldCBmaW5hbEFyZ3VtZW50cztcblxuICBmdW5jdGlvbiBuZXh0KC4uLmNhbGxiYWNrQXJndW1lbnRzKSB7XG4gICAgaW5kZXgrKztcblxuICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICBjb25zdCBzdWNjZXNzID0gKGNvdW50ID09PSAxKTtcblxuICAgICAgaWYgKCFzdWNjZXNzKSB7XG4gICAgICAgIGZpbmFsQXJndW1lbnRzID0gaW5pdGlhbEFyZ3VtZW50czsgLy8vXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VjY2VzcywgLi4uZmluYWxBcmd1bWVudHMpO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soZWxlbWVudCwgLi4uY2FsbGJhY2tBcmd1bWVudHMsIChzdWNjZXNzLCAuLi5pbnRlcm1lZGlhdGVBcmd1bWVudHMpID0+IHtcbiAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgIGlmIChjb3VudCA9PT0gMSkge1xuICAgICAgICAgIGNvbnN0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICAgIGZpbmFsQXJndW1lbnRzID0gaW5pdGlhbEFyZ3VtZW50czsgLy8vXG5cbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MsIC4uLmZpbmFsQXJndW1lbnRzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZpbmFsQXJndW1lbnRzID0gaW50ZXJtZWRpYXRlQXJndW1lbnRzOyAvLy9cblxuICAgICAgICBjb3VudCsrO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjYWxsYmFja0FyZ3VtZW50cyA9IGluaXRpYWxBcmd1bWVudHM7IC8vL1xuXG4gICAgICByZXR1cm4gbmV4dCguLi5jYWxsYmFja0FyZ3VtZW50cyk7XG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBjYWxsYmFja0FyZ3VtZW50cyA9IGluaXRpYWxBcmd1bWVudHM7IC8vL1xuXG4gIHJldHVybiBuZXh0KC4uLmNhbGxiYWNrQXJndW1lbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNvbWUoYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGNvbnRpbnVhdGlvbiA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBsZXQgaW5kZXggPSAtMTtcblxuICBsZXQgZmluYWxBcmd1bWVudHM7XG5cbiAgZnVuY3Rpb24gbmV4dCguLi5jYWxsYmFja0FyZ3VtZW50cykge1xuICAgIGluZGV4Kys7XG5cbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgY29uc3Qgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICBmaW5hbEFyZ3VtZW50cyA9IGluaXRpYWxBcmd1bWVudHM7IC8vL1xuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MsIC4uLmZpbmFsQXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKGVsZW1lbnQsIC4uLmNhbGxiYWNrQXJndW1lbnRzLCAoc3VjY2VzcywgLi4uaW50ZXJtZWRpYXRlQXJndW1lbnRzKSA9PiB7XG4gICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICBmaW5hbEFyZ3VtZW50cyA9IGludGVybWVkaWF0ZUFyZ3VtZW50czsgLy8vXG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzLCAuLi5maW5hbEFyZ3VtZW50cyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNhbGxiYWNrQXJndW1lbnRzID0gaW5pdGlhbEFyZ3VtZW50czsgLy8vXG5cbiAgICAgIHJldHVybiBuZXh0KC4uLmNhbGxiYWNrQXJndW1lbnRzKTtcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IGNhbGxiYWNrQXJndW1lbnRzID0gaW5pdGlhbEFyZ3VtZW50czsgLy8vXG5cbiAgcmV0dXJuIG5leHQoLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZWFjaChhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgY29udGludWF0aW9uID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGxldCBjb3VudCA9IDAsXG4gICAgICBpbmRleCA9IC0xO1xuXG4gIGxldCBmaW5hbEFyZ3VtZW50cztcblxuICBmdW5jdGlvbiBuZXh0KC4uLmNhbGxiYWNrQXJndW1lbnRzKSB7XG4gICAgaW5kZXgrKztcblxuICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICBjb25zdCBzdWNjZXNzID0gKGNvdW50ID4gMCk7XG5cbiAgICAgIGZpbmFsQXJndW1lbnRzID0gY2FsbGJhY2tBcmd1bWVudHM7IC8vL1xuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MsIC4uLmZpbmFsQXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKGVsZW1lbnQsIC4uLmNhbGxiYWNrQXJndW1lbnRzLCAoc3VjY2VzcywgLi4uaW50ZXJtZWRpYXRlQXJndW1lbnRzKSA9PiB7XG4gICAgICBpZiAoIXN1Y2Nlc3MpIHtcbiAgICAgICAgZmluYWxBcmd1bWVudHMgPSBpbml0aWFsQXJndW1lbnRzOyAvLy9cblxuICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MsIC4uLmZpbmFsQXJndW1lbnRzKTtcbiAgICAgIH1cblxuICAgICAgY291bnQrKztcblxuICAgICAgY29uc3QgY2FsbGJhY2tBcmd1bWVudHMgPSBpbnRlcm1lZGlhdGVBcmd1bWVudHM7IC8vL1xuXG4gICAgICByZXR1cm4gbmV4dCguLi5jYWxsYmFja0FyZ3VtZW50cyk7XG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBjYWxsYmFja0FyZ3VtZW50cyA9IGluaXRpYWxBcmd1bWVudHM7IC8vL1xuXG4gIHJldHVybiBuZXh0KC4uLmNhbGxiYWNrQXJndW1lbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV2ZXJ5KGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBjb250aW51YXRpb24gPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgbGV0IGluZGV4ID0gLTE7XG5cbiAgbGV0IGZpbmFsQXJndW1lbnRzO1xuXG4gIGZ1bmN0aW9uIG5leHQoLi4uY2FsbGJhY2tBcmd1bWVudHMpIHtcbiAgICBpbmRleCsrO1xuXG4gICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgIGNvbnN0IHN1Y2Nlc3MgPSB0cnVlO1xuXG4gICAgICBmaW5hbEFyZ3VtZW50cyA9IGNhbGxiYWNrQXJndW1lbnRzOyAvLy9cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzLCAuLi5maW5hbEFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhlbGVtZW50LCAuLi5jYWxsYmFja0FyZ3VtZW50cywgKHN1Y2Nlc3MsIC4uLmludGVybWVkaWF0ZUFyZ3VtZW50cykgPT4ge1xuICAgICAgaWYgKCFzdWNjZXNzKSB7XG4gICAgICAgIGZpbmFsQXJndW1lbnRzID0gaW5pdGlhbEFyZ3VtZW50czsgLy8vXG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzLCAuLi5maW5hbEFyZ3VtZW50cyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNhbGxiYWNrQXJndW1lbnRzID0gaW50ZXJtZWRpYXRlQXJndW1lbnRzOyAvLy9cblxuICAgICAgcmV0dXJuIG5leHQoLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgY2FsbGJhY2tBcmd1bWVudHMgPSBpbml0aWFsQXJndW1lbnRzOyAvLy9cblxuICByZXR1cm4gbmV4dCguLi5jYWxsYmFja0FyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWR1Y2UoYXJyYXksIGluaXRpYWxWYWx1ZSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgY29udGludWF0aW9uID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGxldCBpbmRleCA9IC0xO1xuXG4gIGxldCBmaW5hbEFyZ3VtZW50cztcblxuICBmdW5jdGlvbiBuZXh0KHZhbHVlLCAuLi5jYWxsYmFja0FyZ3VtZW50cykge1xuICAgIGluZGV4Kys7XG5cbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgZmluYWxBcmd1bWVudHMgPSBjYWxsYmFja0FyZ3VtZW50czsgLy8vXG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24odmFsdWUsIC4uLmZpbmFsQXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKGVsZW1lbnQsIHZhbHVlLCAuLi5jYWxsYmFja0FyZ3VtZW50cywgKHZhbHVlLCAuLi5pbnRlcm1lZGlhdGVBcmd1bWVudHMpID0+IHtcbiAgICAgIGNvbnN0IGNhbGxiYWNrQXJndW1lbnRzID0gaW50ZXJtZWRpYXRlQXJndW1lbnRzOyAvLy9cblxuICAgICAgcmV0dXJuIG5leHQodmFsdWUsIC4uLmNhbGxiYWNrQXJndW1lbnRzKTtcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IHZhbHVlID0gaW5pdGlhbFZhbHVlLCAvLy9cbiAgICAgICAgY2FsbGJhY2tBcmd1bWVudHMgPSBpbml0aWFsQXJndW1lbnRzOyAvLy9cblxuICByZXR1cm4gbmV4dCh2YWx1ZSwgLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yRWFjaChhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgY29udGludWF0aW9uID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGxldCBpbmRleCA9IC0xO1xuXG4gIGxldCBmaW5hbEFyZ3VtZW50cztcblxuICBmdW5jdGlvbiBuZXh0KC4uLmNhbGxiYWNrQXJndW1lbnRzKSB7XG4gICAgaW5kZXgrKztcblxuICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICBmaW5hbEFyZ3VtZW50cyA9IGNhbGxiYWNrQXJndW1lbnRzOyAvLy9cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbiguLi5maW5hbEFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhlbGVtZW50LCAuLi5jYWxsYmFja0FyZ3VtZW50cywgKC4uLmludGVybWVkaWF0ZUFyZ3VtZW50cykgPT4ge1xuICAgICAgY29uc3QgY2FsbGJhY2tBcmd1bWVudHMgPSBpbnRlcm1lZGlhdGVBcmd1bWVudHM7IC8vL1xuXG4gICAgICByZXR1cm4gbmV4dCguLi5jYWxsYmFja0FyZ3VtZW50cyk7XG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBjYWxsYmFja0FyZ3VtZW50cyA9IGluaXRpYWxBcmd1bWVudHM7IC8vL1xuXG4gIHJldHVybiBuZXh0KC4uLmNhbGxiYWNrQXJndW1lbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmRzRXZlcnkoYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGNvbnRpbnVhdGlvbiA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBsZXQgaW5kZXggPSAtMTtcblxuICBsZXQgZmluYWxBcmd1bWVudHM7XG5cbiAgZnVuY3Rpb24gbmV4dCguLi5jYWxsYmFja0FyZ3VtZW50cykge1xuICAgIGluZGV4Kys7XG5cbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgY29uc3Qgc3VjY2VzcyA9IHRydWU7XG5cbiAgICAgIGZpbmFsQXJndW1lbnRzID0gY2FsbGJhY2tBcmd1bWVudHM7IC8vL1xuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MsIC4uLmZpbmFsQXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKGVsZW1lbnQsIC4uLmNhbGxiYWNrQXJndW1lbnRzLCAoc3VjY2VzcywgLi4uaW50ZXJtZWRpYXRlQXJndW1lbnRzKSA9PiB7XG4gICAgICBpZiAoIXN1Y2Nlc3MpIHtcbiAgICAgICAgZmluYWxBcmd1bWVudHMgPSBpbml0aWFsQXJndW1lbnRzOyAvLy9cblxuICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MsIC4uLmZpbmFsQXJndW1lbnRzKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2FsbGJhY2tBcmd1bWVudHMgPSBpbnRlcm1lZGlhdGVBcmd1bWVudHM7IC8vL1xuXG4gICAgICByZXR1cm4gbmV4dCguLi5jYWxsYmFja0FyZ3VtZW50cyk7XG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBjYWxsYmFja0FyZ3VtZW50cyA9IGluaXRpYWxBcmd1bWVudHM7IC8vL1xuXG4gIHJldHVybiBuZXh0KC4uLmNhbGxiYWNrQXJndW1lbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJhY2t3YXJkc0V2ZXJ5KGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBjb250aW51YXRpb24gPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgbGV0IGluZGV4ID0gbGVuZ3RoO1xuXG4gIGxldCBmaW5hbEFyZ3VtZW50cztcblxuICBmdW5jdGlvbiBuZXh0KC4uLmNhbGxiYWNrQXJndW1lbnRzKSB7XG4gICAgaW5kZXgtLTtcblxuICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgIGNvbnN0IHN1Y2Nlc3MgPSB0cnVlO1xuXG4gICAgICBmaW5hbEFyZ3VtZW50cyA9IGNhbGxiYWNrQXJndW1lbnRzOyAvLy9cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzLCAuLi5maW5hbEFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhlbGVtZW50LCAuLi5jYWxsYmFja0FyZ3VtZW50cywgKHN1Y2Nlc3MsIC4uLmludGVybWVkaWF0ZUFyZ3VtZW50cykgPT4ge1xuICAgICAgaWYgKCFzdWNjZXNzKSB7XG4gICAgICAgIGZpbmFsQXJndW1lbnRzID0gaW5pdGlhbEFyZ3VtZW50czsgLy8vXG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzLCAuLi5maW5hbEFyZ3VtZW50cyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNhbGxiYWNrQXJndW1lbnRzID0gaW50ZXJtZWRpYXRlQXJndW1lbnRzOyAvLy9cblxuICAgICAgcmV0dXJuIG5leHQoLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgY2FsbGJhY2tBcmd1bWVudHMgPSBpbml0aWFsQXJndW1lbnRzOyAvLy9cblxuICByZXR1cm4gbmV4dCguLi5jYWxsYmFja0FyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3J3YXJkc0ZvckVhY2goYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGNvbnRpbnVhdGlvbiA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGxldCBpbmRleCA9IC0xO1xuXG4gIGxldCBmaW5hbEFyZ3VtZW50cztcblxuICBmdW5jdGlvbiBuZXh0KC4uLmNhbGxiYWNrQXJndW1lbnRzKSB7XG4gICAgaW5kZXgrKztcblxuICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICBmaW5hbEFyZ3VtZW50cyA9IGNhbGxiYWNrQXJndW1lbnRzOyAvLy9cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbiguLi5maW5hbEFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhlbGVtZW50LCAuLi5jYWxsYmFja0FyZ3VtZW50cywgKC4uLmludGVybWVkaWF0ZUFyZ3VtZW50cykgPT4ge1xuICAgICAgY29uc3QgY2FsbGJhY2tBcmd1bWVudHMgPSBpbnRlcm1lZGlhdGVBcmd1bWVudHM7IC8vL1xuXG4gICAgICByZXR1cm4gbmV4dCguLi5jYWxsYmFja0FyZ3VtZW50cyk7XG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBjYWxsYmFja0FyZ3VtZW50cyA9IGluaXRpYWxBcmd1bWVudHM7IC8vL1xuXG4gIHJldHVybiBuZXh0KC4uLmNhbGxiYWNrQXJndW1lbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJhY2t3YXJkc0ZvckVhY2goYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGNvbnRpbnVhdGlvbiA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBsZXQgaW5kZXggPSBsZW5ndGg7XG5cbiAgbGV0IGZpbmFsQXJndW1lbnRzO1xuXG4gIGZ1bmN0aW9uIG5leHQoLi4uY2FsbGJhY2tBcmd1bWVudHMpIHtcbiAgICBpbmRleC0tO1xuXG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgZmluYWxBcmd1bWVudHMgPSBjYWxsYmFja0FyZ3VtZW50czsgLy8vXG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oLi4uZmluYWxBcmd1bWVudHMpO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soZWxlbWVudCwgLi4uY2FsbGJhY2tBcmd1bWVudHMsICguLi5pbnRlcm1lZGlhdGVBcmd1bWVudHMpID0+IHtcbiAgICAgIGNvbnN0IGNhbGxiYWNrQXJndW1lbnRzID0gaW50ZXJtZWRpYXRlQXJndW1lbnRzOyAvLy9cblxuICAgICAgcmV0dXJuIG5leHQoLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgY2FsbGJhY2tBcmd1bWVudHMgPSBpbml0aWFsQXJndW1lbnRzOyAvLy9cblxuICByZXR1cm4gbmV4dCguLi5jYWxsYmFja0FyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXIoYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGNvbnRpbnVhdGlvbiA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBjb25zdCBkZWxldGVkRWxlbWVudHMgPSBbXTtcblxuICBsZXQgaW5kZXggPSBsZW5ndGg7XG5cbiAgbGV0IGZpbmFsQXJndW1lbnRzO1xuXG4gIGZ1bmN0aW9uIG5leHQoLi4uY2FsbGJhY2tBcmd1bWVudHMpIHtcbiAgICBpbmRleC0tO1xuXG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgZmluYWxBcmd1bWVudHMgPSBjYWxsYmFja0FyZ3VtZW50czsgLy8vXG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oZGVsZXRlZEVsZW1lbnRzLCAuLi5maW5hbEFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhlbGVtZW50LCAuLi5jYWxsYmFja0FyZ3VtZW50cywgKHBhc3NlZCwgLi4uaW50ZXJtZWRpYXRlQXJndW1lbnRzKSA9PiB7XG4gICAgICBpZiAoIXBhc3NlZCkge1xuICAgICAgICBjb25zdCBzdGFydEluZGV4ID0gaW5kZXgsIC8vL1xuICAgICAgICAgICAgICBkZWxldGVDb3VudCA9IDEsXG4gICAgICAgICAgICAgIGRlbGV0ZWRFbGVtZW50ID0gZWxlbWVudDsgLy8vXG5cbiAgICAgICAgYXJyYXkuc3BsaWNlKHN0YXJ0SW5kZXgsIGRlbGV0ZUNvdW50KTtcblxuICAgICAgICBkZWxldGVkRWxlbWVudHMudW5zaGlmdChkZWxldGVkRWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNhbGxiYWNrQXJndW1lbnRzID0gaW50ZXJtZWRpYXRlQXJndW1lbnRzOyAvLy9cblxuICAgICAgcmV0dXJuIG5leHQoLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgY2FsbGJhY2tBcmd1bWVudHMgPSBpbml0aWFsQXJndW1lbnRzOyAvLy9cblxuICByZXR1cm4gbmV4dCguLi5jYWxsYmFja0FyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcnVuZShhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgY29udGludWF0aW9uID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGxldCBkZWxldGVkRWxlbWVudDtcblxuICBsZXQgaW5kZXggPSBsZW5ndGg7XG5cbiAgbGV0IGZpbmFsQXJndW1lbnRzO1xuXG4gIGZ1bmN0aW9uIG5leHQoLi4uY2FsbGJhY2tBcmd1bWVudHMpIHtcbiAgICBpbmRleC0tO1xuXG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgZGVsZXRlZEVsZW1lbnQgPSB1bmRlZmluZWQ7XG5cbiAgICAgIGZpbmFsQXJndW1lbnRzID0gaW5pdGlhbEFyZ3VtZW50czsgLy8vXG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oZGVsZXRlZEVsZW1lbnQsIC4uLmZpbmFsQXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKGVsZW1lbnQsIC4uLmNhbGxiYWNrQXJndW1lbnRzLCAocGFzc2VkLCAuLi5pbnRlcm1lZGlhdGVBcmd1bWVudHMpID0+IHtcbiAgICAgIGlmICghcGFzc2VkKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBpbmRleCwgLy8vXG4gICAgICAgICAgICAgIGRlbGV0ZUNvdW50ID0gMSxcbiAgICAgICAgICAgICAgZGVsZXRlZEVsZW1lbnQgPSBlbGVtZW50OyAvLy9cblxuICAgICAgICBhcnJheS5zcGxpY2Uoc3RhcnRJbmRleCwgZGVsZXRlQ291bnQpO1xuXG4gICAgICAgIGZpbmFsQXJndW1lbnRzID0gaW50ZXJtZWRpYXRlQXJndW1lbnRzOyAvLy9cblxuICAgICAgICByZXR1cm4gY29udGludWF0aW9uKGRlbGV0ZWRFbGVtZW50LCAuLi5maW5hbEFyZ3VtZW50cyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNhbGxiYWNrQXJndW1lbnRzID0gaW5pdGlhbEFyZ3VtZW50czsgLy8vXG5cbiAgICAgIHJldHVybiBuZXh0KC4uLmNhbGxiYWNrQXJndW1lbnRzKTtcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IGNhbGxiYWNrQXJndW1lbnRzID0gaW5pdGlhbEFyZ3VtZW50czsgLy8vXG5cbiAgcmV0dXJuIG5leHQoLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdChhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgY29udGludWF0aW9uID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGxldCBkZWxldGVkRWxlbWVudDtcblxuICBsZXQgaW5kZXggPSBsZW5ndGg7XG5cbiAgbGV0IGZpbmFsQXJndW1lbnRzO1xuXG4gIGZ1bmN0aW9uIG5leHQoLi4uY2FsbGJhY2tBcmd1bWVudHMpIHtcbiAgICBpbmRleC0tO1xuXG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgZGVsZXRlZEVsZW1lbnQgPSB1bmRlZmluZWQ7XG5cbiAgICAgIGZpbmFsQXJndW1lbnRzID0gaW5pdGlhbEFyZ3VtZW50czsgLy8vXG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oZGVsZXRlZEVsZW1lbnQsIC4uLmZpbmFsQXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKGVsZW1lbnQsIC4uLmNhbGxiYWNrQXJndW1lbnRzLCAocGFzc2VkLCAuLi5pbnRlcm1lZGlhdGVBcmd1bWVudHMpID0+IHtcbiAgICAgIGlmIChwYXNzZWQpIHtcbiAgICAgICAgY29uc3Qgc3RhcnRJbmRleCA9IGluZGV4LCAvLy9cbiAgICAgICAgICAgICAgZGVsZXRlQ291bnQgPSAxLFxuICAgICAgICAgICAgICBkZWxldGVkRWxlbWVudCA9IGVsZW1lbnQ7IC8vL1xuXG4gICAgICAgIGFycmF5LnNwbGljZShzdGFydEluZGV4LCBkZWxldGVDb3VudCk7XG5cbiAgICAgICAgZmluYWxBcmd1bWVudHMgPSBpbnRlcm1lZGlhdGVBcmd1bWVudHM7IC8vL1xuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24oZGVsZXRlZEVsZW1lbnQsIC4uLmZpbmFsQXJndW1lbnRzKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2FsbGJhY2tBcmd1bWVudHMgPSBpbml0aWFsQXJndW1lbnRzOyAvLy9cblxuICAgICAgcmV0dXJuIG5leHQoLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgY2FsbGJhY2tBcmd1bWVudHMgPSBpbml0aWFsQXJndW1lbnRzOyAvLy9cblxuICByZXR1cm4gbmV4dCguLi5jYWxsYmFja0FyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXRjaChhcnJheUEsIGFycmF5QiwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgY29udGludWF0aW9uID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKTtcblxuICBjb25zdCBhcnJheUFMZW5ndGggPSBhcnJheUEubGVuZ3RoLFxuICAgICAgICBhcnJheUJMZW5ndGggPSBhcnJheUIubGVuZ3RoO1xuXG4gIGxldCBmaW5hbEFyZ3VtZW50cztcblxuICBpZiAoYXJyYXlBTGVuZ3RoICE9PSBhcnJheUJMZW5ndGgpIHtcbiAgICBjb25zdCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICBmaW5hbEFyZ3VtZW50cyA9IGluaXRpYWxBcmd1bWVudHM7IC8vL1xuXG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzLCAuLi5maW5hbEFyZ3VtZW50cyk7XG4gIH1cblxuICBjb25zdCBsZW5ndGggPSBhcnJheUFMZW5ndGg7ICAvLy9cblxuICBsZXQgaW5kZXggPSAtMTtcblxuICBmdW5jdGlvbiBuZXh0KC4uLmNhbGxiYWNrQXJndW1lbnRzKSB7XG4gICAgaW5kZXgrKztcblxuICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICBjb25zdCBzdWNjZXNzID0gdHJ1ZTtcblxuICAgICAgZmluYWxBcmd1bWVudHMgPSBjYWxsYmFja0FyZ3VtZW50czsgLy8vXG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VjY2VzcywgLi4uZmluYWxBcmd1bWVudHMpO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnRBID0gYXJyYXlBW2luZGV4XSxcbiAgICAgICAgICBlbGVtZW50QiA9IGFycmF5QltpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soZWxlbWVudEEsIGVsZW1lbnRCLCAuLi5jYWxsYmFja0FyZ3VtZW50cywgKHN1Y2Nlc3MsIC4uLmludGVybWVkaWF0ZUFyZ3VtZW50cykgPT4ge1xuICAgICAgaWYgKCFzdWNjZXNzKSB7XG4gICAgICAgIGZpbmFsQXJndW1lbnRzID0gaW5pdGlhbEFyZ3VtZW50czsgLy8vXG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzLCAuLi5maW5hbEFyZ3VtZW50cyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNhbGxiYWNrQXJndW1lbnRzID0gaW50ZXJtZWRpYXRlQXJndW1lbnRzOyAvLy9cblxuICAgICAgcmV0dXJuIG5leHQoLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgY2FsbGJhY2tBcmd1bWVudHMgPSBpbml0aWFsQXJndW1lbnRzOyAvLy9cblxuICByZXR1cm4gbmV4dCguLi5jYWxsYmFja0FyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlKGFycmF5QSwgYXJyYXlCLCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBhcnJheUEgPSBbICAvLy9cbiAgICAuLi5hcnJheUFcbiAgXTtcblxuICBjb25zdCBjb250aW51YXRpb24gPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpO1xuXG4gIGxldCBmaW5hbEFyZ3VtZW50cztcblxuICBmdW5jdGlvbiBuZXh0UGFzcyguLi5jYWxsYmFja0FyZ3VtZW50cykge1xuICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICBjb25zdCBsZW5ndGggPSBhcnJheUEubGVuZ3RoOyAvLy9cblxuICAgIGlmIChsZW5ndGggPT09IDApIHtcbiAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuXG4gICAgICBmaW5hbEFyZ3VtZW50cyA9IGNhbGxiYWNrQXJndW1lbnRzOyAvLy9cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzLCAuLi5maW5hbEFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgbGV0IGluZGV4ID0gLTE7XG5cbiAgICBmdW5jdGlvbiBuZXh0RWxlbWVudCguLi5jYWxsYmFja0FyZ3VtZW50cykge1xuICAgICAgaW5kZXgrKztcblxuICAgICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgICAgaWYgKCFzdWNjZXNzKSB7XG4gICAgICAgICAgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgICAgY29uc3QgZmluYWxBcmd1bWVudHMgPSBpbml0aWFsQXJndW1lbnRzOyAvLy9cblxuICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VjY2VzcywgLi4uZmluYWxBcmd1bWVudHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXJyYXlGaWx0ZXIoYXJyYXlBLCAoZWxlbWVudEEpID0+IHtcbiAgICAgICAgICBjb25zdCBhcnJheUJJbmNsdWRlc0VsZW1lbnRBID0gYXJyYXlCLmluY2x1ZGVzKGVsZW1lbnRBKTtcblxuICAgICAgICAgIGlmICghYXJyYXlCSW5jbHVkZXNFbGVtZW50QSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gbmV4dFBhc3MoLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZWxlbWVudEEgPSBhcnJheUFbaW5kZXhdO1xuXG4gICAgICAgIHJldHVybiBjYWxsYmFjayhlbGVtZW50QSwgLi4uY2FsbGJhY2tBcmd1bWVudHMsIChwYXNzZWQsIC4uLmludGVybWVkaWF0ZUFyZ3VtZW50cykgPT4ge1xuICAgICAgICAgIGlmIChwYXNzZWQpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrQXJndW1lbnRzID0gaW50ZXJtZWRpYXRlQXJndW1lbnRzOyAgLy8vXG5cbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRCID0gZWxlbWVudEE7ICAvLy9cblxuICAgICAgICAgICAgYXJyYXlCLnB1c2goZWxlbWVudEIpO1xuXG4gICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gbmV4dEVsZW1lbnQoLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV4dEVsZW1lbnQoLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xuICB9XG5cbiAgY29uc3QgY2FsbGJhY2tBcmd1bWVudHMgPSBpbml0aWFsQXJndW1lbnRzOyAvLy9cblxuICByZXR1cm4gbmV4dFBhc3MoLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG9uZSxcbiAgc29tZSxcbiAgZWFjaCxcbiAgZXZlcnksXG4gIHJlZHVjZSxcbiAgZm9yRWFjaCxcbiAgZm9yd2FyZHNFdmVyeSxcbiAgYmFja3dhcmRzRXZlcnksXG4gIGZvcndhcmRzRm9yRWFjaCxcbiAgYmFja3dhcmRzRm9yRWFjaCxcbiAgZmlsdGVyLFxuICBwcnVuZSxcbiAgZXh0cmFjdCxcbiAgbWF0Y2gsXG4gIHJlc29sdmVcbn07XG4iXSwibmFtZXMiOlsiYmFja3dhcmRzRXZlcnkiLCJiYWNrd2FyZHNGb3JFYWNoIiwiZWFjaCIsImV2ZXJ5IiwiZXh0cmFjdCIsImZpbHRlciIsImZvckVhY2giLCJmb3J3YXJkc0V2ZXJ5IiwiZm9yd2FyZHNGb3JFYWNoIiwibWF0Y2giLCJvbmUiLCJwcnVuZSIsInJlZHVjZSIsInJlc29sdmUiLCJzb21lIiwiYXJyYXlGaWx0ZXIiLCJhcnJheVV0aWxpdGllcyIsImFycmF5IiwiY2FsbGJhY2siLCJpbml0aWFsQXJndW1lbnRzIiwiY29udGludWF0aW9uIiwicG9wIiwibGVuZ3RoIiwiY291bnQiLCJpbmRleCIsImZpbmFsQXJndW1lbnRzIiwibmV4dCIsImNhbGxiYWNrQXJndW1lbnRzIiwic3VjY2VzcyIsImVsZW1lbnQiLCJpbnRlcm1lZGlhdGVBcmd1bWVudHMiLCJpbml0aWFsVmFsdWUiLCJ2YWx1ZSIsImRlbGV0ZWRFbGVtZW50cyIsInBhc3NlZCIsInN0YXJ0SW5kZXgiLCJkZWxldGVDb3VudCIsImRlbGV0ZWRFbGVtZW50Iiwic3BsaWNlIiwidW5zaGlmdCIsInVuZGVmaW5lZCIsImFycmF5QSIsImFycmF5QiIsImFycmF5QUxlbmd0aCIsImFycmF5Qkxlbmd0aCIsImVsZW1lbnRBIiwiZWxlbWVudEIiLCJuZXh0UGFzcyIsIm5leHRFbGVtZW50IiwiYXJyYXlCSW5jbHVkZXNFbGVtZW50QSIsImluY2x1ZGVzIiwicHVzaCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O1FBc1JnQkE7ZUFBQUE7O1FBc0VBQztlQUFBQTs7UUFvU2hCO2VBQUE7O1FBamlCZ0JDO2VBQUFBOztRQTBDQUM7ZUFBQUE7O1FBNFVBQztlQUFBQTs7UUExRkFDO2VBQUFBOztRQTNLQUM7ZUFBQUE7O1FBK0JBQztlQUFBQTs7UUE4RUFDO2VBQUFBOztRQXVNQUM7ZUFBQUE7O1FBOWZBQztlQUFBQTs7UUFnYUFDO2VBQUFBOztRQXRQQUM7ZUFBQUE7O1FBd1lBQztlQUFBQTs7UUFoZ0JBQztlQUFBQTs7OzJCQXREZTtBQUUvQixNQUFNLEVBQUVULFFBQVFV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
|