occam-directed-graphs 3.0.83 → 3.0.85
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/package.json +6 -2
- package/.aiignore +0 -11
- package/.swcrc +0 -8
- package/bin/main.js +0 -15
- package/example.js +0 -3113
- package/index.html +0 -29
- package/test/cirectedGraph.js +0 -589
package/example.js
DELETED
|
@@ -1,3113 +0,0 @@
|
|
|
1
|
-
(() => {
|
|
2
|
-
var __commonJS = (cb, mod) => () => (mod || cb((mod = {exports: {}}).exports, mod), mod.exports);
|
|
3
|
-
|
|
4
|
-
// lib/edge.js
|
|
5
|
-
var require_edge = __commonJS((exports) => {
|
|
6
|
-
"use strict";
|
|
7
|
-
Object.defineProperty(exports, "__esModule", {
|
|
8
|
-
value: true
|
|
9
|
-
});
|
|
10
|
-
Object.defineProperty(exports, "default", {
|
|
11
|
-
enumerable: true,
|
|
12
|
-
get: function() {
|
|
13
|
-
return Edge;
|
|
14
|
-
}
|
|
15
|
-
});
|
|
16
|
-
var Edge = class {
|
|
17
|
-
constructor(sourceVertexName, targetVertexName) {
|
|
18
|
-
this.sourceVertexName = sourceVertexName;
|
|
19
|
-
this.targetVertexName = targetVertexName;
|
|
20
|
-
}
|
|
21
|
-
getSourceVertexName() {
|
|
22
|
-
return this.sourceVertexName;
|
|
23
|
-
}
|
|
24
|
-
getTargetVertexName() {
|
|
25
|
-
return this.targetVertexName;
|
|
26
|
-
}
|
|
27
|
-
match(edge) {
|
|
28
|
-
const sourceVertexName = edge.getSourceVertexName(), targetVertexName = edge.getTargetVertexName(), matches = this.sourceVertexName === sourceVertexName && this.targetVertexName === targetVertexName;
|
|
29
|
-
return matches;
|
|
30
|
-
}
|
|
31
|
-
matchVertexName(vertexName) {
|
|
32
|
-
const matches = this.sourceVertexName === vertexName || this.targetVertexName === vertexName;
|
|
33
|
-
return matches;
|
|
34
|
-
}
|
|
35
|
-
matchSourceVertexName(sourceVertexName) {
|
|
36
|
-
const matches = this.sourceVertexName === sourceVertexName;
|
|
37
|
-
return matches;
|
|
38
|
-
}
|
|
39
|
-
matchTargetVertexName(targetVertexName) {
|
|
40
|
-
const matches = this.targetVertexName === targetVertexName;
|
|
41
|
-
return matches;
|
|
42
|
-
}
|
|
43
|
-
matchVertexNames(sourceVertexName, targetVertexName) {
|
|
44
|
-
const matches = this.sourceVertexName === sourceVertexName && this.targetVertexName === targetVertexName;
|
|
45
|
-
return matches;
|
|
46
|
-
}
|
|
47
|
-
static fromSourceVertexNameAndTargetVertexName(sourceVertexName, targetVertexName) {
|
|
48
|
-
const edge = new Edge(sourceVertexName, targetVertexName);
|
|
49
|
-
return edge;
|
|
50
|
-
}
|
|
51
|
-
};
|
|
52
|
-
});
|
|
53
|
-
|
|
54
|
-
// lib/utilities/vertex.js
|
|
55
|
-
var require_vertex = __commonJS((exports) => {
|
|
56
|
-
"use strict";
|
|
57
|
-
Object.defineProperty(exports, "__esModule", {
|
|
58
|
-
value: true
|
|
59
|
-
});
|
|
60
|
-
function _export(target, all) {
|
|
61
|
-
for (var name in all)
|
|
62
|
-
Object.defineProperty(target, name, {
|
|
63
|
-
enumerable: true,
|
|
64
|
-
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
_export(exports, {
|
|
68
|
-
get orderVertexes() {
|
|
69
|
-
return orderVertexes;
|
|
70
|
-
},
|
|
71
|
-
get vertexNamesFromVertexes() {
|
|
72
|
-
return vertexNamesFromVertexes;
|
|
73
|
-
}
|
|
74
|
-
});
|
|
75
|
-
function orderVertexes(vertexes) {
|
|
76
|
-
vertexes.sort((firstVertex, secondVertex) => {
|
|
77
|
-
const firstVertexIndex = firstVertex.getIndex(), secondVertexIndex = secondVertex.getIndex();
|
|
78
|
-
if (false) {
|
|
79
|
-
} else if (firstVertexIndex < secondVertexIndex) {
|
|
80
|
-
return -1;
|
|
81
|
-
} else if (firstVertexIndex > secondVertexIndex) {
|
|
82
|
-
return 1;
|
|
83
|
-
} else {
|
|
84
|
-
return 0;
|
|
85
|
-
}
|
|
86
|
-
});
|
|
87
|
-
}
|
|
88
|
-
function vertexNamesFromVertexes(vertexes) {
|
|
89
|
-
const vertexNames = vertexes.map((vertex) => {
|
|
90
|
-
const vertexName = vertex.getName();
|
|
91
|
-
return vertexName;
|
|
92
|
-
});
|
|
93
|
-
return vertexNames;
|
|
94
|
-
}
|
|
95
|
-
});
|
|
96
|
-
|
|
97
|
-
// lib/cycle.js
|
|
98
|
-
var require_cycle = __commonJS((exports) => {
|
|
99
|
-
"use strict";
|
|
100
|
-
Object.defineProperty(exports, "__esModule", {
|
|
101
|
-
value: true
|
|
102
|
-
});
|
|
103
|
-
Object.defineProperty(exports, "default", {
|
|
104
|
-
enumerable: true,
|
|
105
|
-
get: function() {
|
|
106
|
-
return Cycle;
|
|
107
|
-
}
|
|
108
|
-
});
|
|
109
|
-
var _vertex = require_vertex();
|
|
110
|
-
var Cycle = class {
|
|
111
|
-
constructor(vertexNames) {
|
|
112
|
-
this.vertexNames = vertexNames;
|
|
113
|
-
}
|
|
114
|
-
getVertexNames() {
|
|
115
|
-
return this.vertexNames;
|
|
116
|
-
}
|
|
117
|
-
static fromSourceVertexAndPredecessorVertexes(sourceVertex, predecessorVertexes) {
|
|
118
|
-
const vertexes = [
|
|
119
|
-
...predecessorVertexes,
|
|
120
|
-
sourceVertex
|
|
121
|
-
], vertexNames = (0, _vertex.vertexNamesFromVertexes)(vertexes), cycle = new Cycle(vertexNames);
|
|
122
|
-
return cycle;
|
|
123
|
-
}
|
|
124
|
-
};
|
|
125
|
-
});
|
|
126
|
-
|
|
127
|
-
// node_modules/necessary/lib/levels.js
|
|
128
|
-
var require_levels = __commonJS((exports) => {
|
|
129
|
-
"use strict";
|
|
130
|
-
Object.defineProperty(exports, "__esModule", {
|
|
131
|
-
value: true
|
|
132
|
-
});
|
|
133
|
-
function _export(target, all) {
|
|
134
|
-
for (var name in all)
|
|
135
|
-
Object.defineProperty(target, name, {
|
|
136
|
-
enumerable: true,
|
|
137
|
-
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
138
|
-
});
|
|
139
|
-
}
|
|
140
|
-
_export(exports, {
|
|
141
|
-
get DEBUG_LEVEL() {
|
|
142
|
-
return DEBUG_LEVEL;
|
|
143
|
-
},
|
|
144
|
-
get ERROR_LEVEL() {
|
|
145
|
-
return ERROR_LEVEL;
|
|
146
|
-
},
|
|
147
|
-
get FATAL_LEVEL() {
|
|
148
|
-
return FATAL_LEVEL;
|
|
149
|
-
},
|
|
150
|
-
get INFO_LEVEL() {
|
|
151
|
-
return INFO_LEVEL;
|
|
152
|
-
},
|
|
153
|
-
get TRACE_LEVEL() {
|
|
154
|
-
return TRACE_LEVEL;
|
|
155
|
-
},
|
|
156
|
-
get WARNING_LEVEL() {
|
|
157
|
-
return WARNING_LEVEL;
|
|
158
|
-
},
|
|
159
|
-
get default() {
|
|
160
|
-
return _default;
|
|
161
|
-
}
|
|
162
|
-
});
|
|
163
|
-
var TRACE_LEVEL = "trace";
|
|
164
|
-
var DEBUG_LEVEL = "debug";
|
|
165
|
-
var INFO_LEVEL = "info";
|
|
166
|
-
var WARNING_LEVEL = "warning";
|
|
167
|
-
var ERROR_LEVEL = "error";
|
|
168
|
-
var FATAL_LEVEL = "fatal";
|
|
169
|
-
var _default = {
|
|
170
|
-
TRACE_LEVEL,
|
|
171
|
-
DEBUG_LEVEL,
|
|
172
|
-
INFO_LEVEL,
|
|
173
|
-
WARNING_LEVEL,
|
|
174
|
-
ERROR_LEVEL,
|
|
175
|
-
FATAL_LEVEL
|
|
176
|
-
};
|
|
177
|
-
});
|
|
178
|
-
|
|
179
|
-
// node_modules/necessary/lib/methods.js
|
|
180
|
-
var require_methods = __commonJS((exports) => {
|
|
181
|
-
"use strict";
|
|
182
|
-
Object.defineProperty(exports, "__esModule", {
|
|
183
|
-
value: true
|
|
184
|
-
});
|
|
185
|
-
function _export(target, all) {
|
|
186
|
-
for (var name in all)
|
|
187
|
-
Object.defineProperty(target, name, {
|
|
188
|
-
enumerable: true,
|
|
189
|
-
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
190
|
-
});
|
|
191
|
-
}
|
|
192
|
-
_export(exports, {
|
|
193
|
-
get DELETE_METHOD() {
|
|
194
|
-
return DELETE_METHOD;
|
|
195
|
-
},
|
|
196
|
-
get GET_METHOD() {
|
|
197
|
-
return GET_METHOD;
|
|
198
|
-
},
|
|
199
|
-
get OPTIONS_METHOD() {
|
|
200
|
-
return OPTIONS_METHOD;
|
|
201
|
-
},
|
|
202
|
-
get PATCH_METHOD() {
|
|
203
|
-
return PATCH_METHOD;
|
|
204
|
-
},
|
|
205
|
-
get POST_METHOD() {
|
|
206
|
-
return POST_METHOD;
|
|
207
|
-
},
|
|
208
|
-
get default() {
|
|
209
|
-
return _default;
|
|
210
|
-
}
|
|
211
|
-
});
|
|
212
|
-
var GET_METHOD = "GET";
|
|
213
|
-
var POST_METHOD = "POST";
|
|
214
|
-
var PATCH_METHOD = "PATCH";
|
|
215
|
-
var DELETE_METHOD = "DELETE";
|
|
216
|
-
var OPTIONS_METHOD = "OPTIONS";
|
|
217
|
-
var _default = {
|
|
218
|
-
GET_METHOD,
|
|
219
|
-
POST_METHOD,
|
|
220
|
-
PATCH_METHOD,
|
|
221
|
-
DELETE_METHOD,
|
|
222
|
-
OPTIONS_METHOD
|
|
223
|
-
};
|
|
224
|
-
});
|
|
225
|
-
|
|
226
|
-
// node_modules/necessary/lib/headers.js
|
|
227
|
-
var require_headers = __commonJS((exports) => {
|
|
228
|
-
"use strict";
|
|
229
|
-
Object.defineProperty(exports, "__esModule", {
|
|
230
|
-
value: true
|
|
231
|
-
});
|
|
232
|
-
function _export(target, all) {
|
|
233
|
-
for (var name in all)
|
|
234
|
-
Object.defineProperty(target, name, {
|
|
235
|
-
enumerable: true,
|
|
236
|
-
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
237
|
-
});
|
|
238
|
-
}
|
|
239
|
-
_export(exports, {
|
|
240
|
-
get ACCEPT_HEADER() {
|
|
241
|
-
return ACCEPT_HEADER;
|
|
242
|
-
},
|
|
243
|
-
get ACCESS_CONTROL_ALLOW_HEADERS_HEADER() {
|
|
244
|
-
return ACCESS_CONTROL_ALLOW_HEADERS_HEADER;
|
|
245
|
-
},
|
|
246
|
-
get ACCESS_CONTROL_ALLOW_METHODS_HEADER() {
|
|
247
|
-
return ACCESS_CONTROL_ALLOW_METHODS_HEADER;
|
|
248
|
-
},
|
|
249
|
-
get ACCESS_CONTROL_ALLOW_ORIGIN_HEADER() {
|
|
250
|
-
return ACCESS_CONTROL_ALLOW_ORIGIN_HEADER;
|
|
251
|
-
},
|
|
252
|
-
get ACCESS_CONTROL_REQUEST_METHOD_HEADER() {
|
|
253
|
-
return ACCESS_CONTROL_REQUEST_METHOD_HEADER;
|
|
254
|
-
},
|
|
255
|
-
get AUTHORIZATION_HEADER() {
|
|
256
|
-
return AUTHORIZATION_HEADER;
|
|
257
|
-
},
|
|
258
|
-
get CACHE_CONTROL_HEADER() {
|
|
259
|
-
return CACHE_CONTROL_HEADER;
|
|
260
|
-
},
|
|
261
|
-
get CONTENT_DISPOSITION_HEADER() {
|
|
262
|
-
return CONTENT_DISPOSITION_HEADER;
|
|
263
|
-
},
|
|
264
|
-
get CONTENT_LENGTH_HEADER() {
|
|
265
|
-
return CONTENT_LENGTH_HEADER;
|
|
266
|
-
},
|
|
267
|
-
get CONTENT_TYPE_HEADER() {
|
|
268
|
-
return CONTENT_TYPE_HEADER;
|
|
269
|
-
},
|
|
270
|
-
get LOCATION_HEADER() {
|
|
271
|
-
return LOCATION_HEADER;
|
|
272
|
-
},
|
|
273
|
-
get PRAGMA_HEADER() {
|
|
274
|
-
return PRAGMA_HEADER;
|
|
275
|
-
},
|
|
276
|
-
get TRANSFER_ENCODING_HEADER() {
|
|
277
|
-
return TRANSFER_ENCODING_HEADER;
|
|
278
|
-
},
|
|
279
|
-
get USER_AGENT_HEADER() {
|
|
280
|
-
return USER_AGENT_HEADER;
|
|
281
|
-
},
|
|
282
|
-
get default() {
|
|
283
|
-
return _default;
|
|
284
|
-
}
|
|
285
|
-
});
|
|
286
|
-
var PRAGMA_HEADER = "pragma";
|
|
287
|
-
var ACCEPT_HEADER = "accept";
|
|
288
|
-
var LOCATION_HEADER = "location";
|
|
289
|
-
var USER_AGENT_HEADER = "user-agent";
|
|
290
|
-
var CONTENT_TYPE_HEADER = "content-type";
|
|
291
|
-
var AUTHORIZATION_HEADER = "authorization";
|
|
292
|
-
var CACHE_CONTROL_HEADER = "cache-control";
|
|
293
|
-
var CONTENT_LENGTH_HEADER = "content-length";
|
|
294
|
-
var TRANSFER_ENCODING_HEADER = "transfer-encoding";
|
|
295
|
-
var CONTENT_DISPOSITION_HEADER = "content-disposition";
|
|
296
|
-
var ACCESS_CONTROL_ALLOW_ORIGIN_HEADER = "access-control-allow-origin";
|
|
297
|
-
var ACCESS_CONTROL_ALLOW_METHODS_HEADER = "access-control-allow-methods";
|
|
298
|
-
var ACCESS_CONTROL_ALLOW_HEADERS_HEADER = "access-control-allow-headers";
|
|
299
|
-
var ACCESS_CONTROL_REQUEST_METHOD_HEADER = "access-control-request-method";
|
|
300
|
-
var _default = {
|
|
301
|
-
PRAGMA_HEADER,
|
|
302
|
-
ACCEPT_HEADER,
|
|
303
|
-
LOCATION_HEADER,
|
|
304
|
-
USER_AGENT_HEADER,
|
|
305
|
-
CONTENT_TYPE_HEADER,
|
|
306
|
-
AUTHORIZATION_HEADER,
|
|
307
|
-
CACHE_CONTROL_HEADER,
|
|
308
|
-
CONTENT_LENGTH_HEADER,
|
|
309
|
-
TRANSFER_ENCODING_HEADER,
|
|
310
|
-
CONTENT_DISPOSITION_HEADER,
|
|
311
|
-
ACCESS_CONTROL_ALLOW_ORIGIN_HEADER,
|
|
312
|
-
ACCESS_CONTROL_ALLOW_METHODS_HEADER,
|
|
313
|
-
ACCESS_CONTROL_ALLOW_HEADERS_HEADER,
|
|
314
|
-
ACCESS_CONTROL_REQUEST_METHOD_HEADER
|
|
315
|
-
};
|
|
316
|
-
});
|
|
317
|
-
|
|
318
|
-
// node_modules/necessary/lib/keyCodes.js
|
|
319
|
-
var require_keyCodes = __commonJS((exports) => {
|
|
320
|
-
"use strict";
|
|
321
|
-
Object.defineProperty(exports, "__esModule", {
|
|
322
|
-
value: true
|
|
323
|
-
});
|
|
324
|
-
function _export(target, all) {
|
|
325
|
-
for (var name in all)
|
|
326
|
-
Object.defineProperty(target, name, {
|
|
327
|
-
enumerable: true,
|
|
328
|
-
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
329
|
-
});
|
|
330
|
-
}
|
|
331
|
-
_export(exports, {
|
|
332
|
-
get ARROW_DOWN_KEY_CODE() {
|
|
333
|
-
return ARROW_DOWN_KEY_CODE;
|
|
334
|
-
},
|
|
335
|
-
get ARROW_LEFT_KEY_CODE() {
|
|
336
|
-
return ARROW_LEFT_KEY_CODE;
|
|
337
|
-
},
|
|
338
|
-
get ARROW_RIGHT_KEY_CODE() {
|
|
339
|
-
return ARROW_RIGHT_KEY_CODE;
|
|
340
|
-
},
|
|
341
|
-
get ARROW_UP_KEY_CODE() {
|
|
342
|
-
return ARROW_UP_KEY_CODE;
|
|
343
|
-
},
|
|
344
|
-
get BACKSPACE_KEY_CODE() {
|
|
345
|
-
return BACKSPACE_KEY_CODE;
|
|
346
|
-
},
|
|
347
|
-
get DELETE_KEY_CODE() {
|
|
348
|
-
return DELETE_KEY_CODE;
|
|
349
|
-
},
|
|
350
|
-
get ENTER_KEY_CODE() {
|
|
351
|
-
return ENTER_KEY_CODE;
|
|
352
|
-
},
|
|
353
|
-
get ESCAPE_KEY_CODE() {
|
|
354
|
-
return ESCAPE_KEY_CODE;
|
|
355
|
-
},
|
|
356
|
-
get SHIFT_KEY_CODE() {
|
|
357
|
-
return SHIFT_KEY_CODE;
|
|
358
|
-
},
|
|
359
|
-
get TAB_KEY_CODE() {
|
|
360
|
-
return TAB_KEY_CODE;
|
|
361
|
-
},
|
|
362
|
-
get default() {
|
|
363
|
-
return _default;
|
|
364
|
-
}
|
|
365
|
-
});
|
|
366
|
-
var TAB_KEY_CODE = 9;
|
|
367
|
-
var SHIFT_KEY_CODE = 16;
|
|
368
|
-
var ENTER_KEY_CODE = 13;
|
|
369
|
-
var ESCAPE_KEY_CODE = 27;
|
|
370
|
-
var DELETE_KEY_CODE = 46;
|
|
371
|
-
var BACKSPACE_KEY_CODE = 8;
|
|
372
|
-
var ARROW_UP_KEY_CODE = 38;
|
|
373
|
-
var ARROW_DOWN_KEY_CODE = 40;
|
|
374
|
-
var ARROW_LEFT_KEY_CODE = 37;
|
|
375
|
-
var ARROW_RIGHT_KEY_CODE = 39;
|
|
376
|
-
var _default = {
|
|
377
|
-
TAB_KEY_CODE,
|
|
378
|
-
SHIFT_KEY_CODE,
|
|
379
|
-
ENTER_KEY_CODE,
|
|
380
|
-
ESCAPE_KEY_CODE,
|
|
381
|
-
DELETE_KEY_CODE,
|
|
382
|
-
BACKSPACE_KEY_CODE,
|
|
383
|
-
ARROW_UP_KEY_CODE,
|
|
384
|
-
ARROW_DOWN_KEY_CODE,
|
|
385
|
-
ARROW_LEFT_KEY_CODE,
|
|
386
|
-
ARROW_RIGHT_KEY_CODE
|
|
387
|
-
};
|
|
388
|
-
});
|
|
389
|
-
|
|
390
|
-
// node_modules/necessary/lib/encodings.js
|
|
391
|
-
var require_encodings = __commonJS((exports) => {
|
|
392
|
-
"use strict";
|
|
393
|
-
Object.defineProperty(exports, "__esModule", {
|
|
394
|
-
value: true
|
|
395
|
-
});
|
|
396
|
-
function _export(target, all) {
|
|
397
|
-
for (var name in all)
|
|
398
|
-
Object.defineProperty(target, name, {
|
|
399
|
-
enumerable: true,
|
|
400
|
-
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
401
|
-
});
|
|
402
|
-
}
|
|
403
|
-
_export(exports, {
|
|
404
|
-
get BASE64_ENCODING() {
|
|
405
|
-
return BASE64_ENCODING;
|
|
406
|
-
},
|
|
407
|
-
get UTF8_ENCODING() {
|
|
408
|
-
return UTF8_ENCODING;
|
|
409
|
-
},
|
|
410
|
-
get UTF_8_ENCODING() {
|
|
411
|
-
return UTF_8_ENCODING;
|
|
412
|
-
},
|
|
413
|
-
get default() {
|
|
414
|
-
return _default;
|
|
415
|
-
}
|
|
416
|
-
});
|
|
417
|
-
var UTF8_ENCODING = "utf8";
|
|
418
|
-
var UTF_8_ENCODING = "utf-8";
|
|
419
|
-
var BASE64_ENCODING = "base64";
|
|
420
|
-
var _default = {
|
|
421
|
-
UTF8_ENCODING,
|
|
422
|
-
UTF_8_ENCODING,
|
|
423
|
-
BASE64_ENCODING
|
|
424
|
-
};
|
|
425
|
-
});
|
|
426
|
-
|
|
427
|
-
// node_modules/necessary/lib/characters.js
|
|
428
|
-
var require_characters = __commonJS((exports) => {
|
|
429
|
-
"use strict";
|
|
430
|
-
Object.defineProperty(exports, "__esModule", {
|
|
431
|
-
value: true
|
|
432
|
-
});
|
|
433
|
-
function _export(target, all) {
|
|
434
|
-
for (var name in all)
|
|
435
|
-
Object.defineProperty(target, name, {
|
|
436
|
-
enumerable: true,
|
|
437
|
-
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
438
|
-
});
|
|
439
|
-
}
|
|
440
|
-
_export(exports, {
|
|
441
|
-
get AMPERSAND_CHARACTER() {
|
|
442
|
-
return AMPERSAND_CHARACTER;
|
|
443
|
-
},
|
|
444
|
-
get ASTERISK_CHARACTER() {
|
|
445
|
-
return ASTERISK_CHARACTER;
|
|
446
|
-
},
|
|
447
|
-
get BACKSLASH_CHARACTER() {
|
|
448
|
-
return BACKSLASH_CHARACTER;
|
|
449
|
-
},
|
|
450
|
-
get BACKSPACE_CHARACTER() {
|
|
451
|
-
return BACKSPACE_CHARACTER;
|
|
452
|
-
},
|
|
453
|
-
get BACKTICK_DELIMITER() {
|
|
454
|
-
return BACKTICK_DELIMITER;
|
|
455
|
-
},
|
|
456
|
-
get BAR_CHARACTER() {
|
|
457
|
-
return BAR_CHARACTER;
|
|
458
|
-
},
|
|
459
|
-
get CARRIAGE_RETURN_CHARACTER() {
|
|
460
|
-
return CARRIAGE_RETURN_CHARACTER;
|
|
461
|
-
},
|
|
462
|
-
get CLOSING_BRACKET_CHARACTER() {
|
|
463
|
-
return CLOSING_BRACKET_CHARACTER;
|
|
464
|
-
},
|
|
465
|
-
get CLOSING_CURLY_BRACKET_CHARACTER() {
|
|
466
|
-
return CLOSING_CURLY_BRACKET_CHARACTER;
|
|
467
|
-
},
|
|
468
|
-
get CLOSING_SQUARE_BRACKET_CHARACTER() {
|
|
469
|
-
return CLOSING_SQUARE_BRACKET_CHARACTER;
|
|
470
|
-
},
|
|
471
|
-
get COLON_CHARACTER() {
|
|
472
|
-
return COLON_CHARACTER;
|
|
473
|
-
},
|
|
474
|
-
get COMMA_CHARACTER() {
|
|
475
|
-
return COMMA_CHARACTER;
|
|
476
|
-
},
|
|
477
|
-
get CTRL_C_CHARACTER() {
|
|
478
|
-
return CTRL_C_CHARACTER;
|
|
479
|
-
},
|
|
480
|
-
get DASH_CHARACTER() {
|
|
481
|
-
return DASH_CHARACTER;
|
|
482
|
-
},
|
|
483
|
-
get DOLLAR_CHARACTER() {
|
|
484
|
-
return DOLLAR_CHARACTER;
|
|
485
|
-
},
|
|
486
|
-
get DOWN_CHARACTER() {
|
|
487
|
-
return DOWN_CHARACTER;
|
|
488
|
-
},
|
|
489
|
-
get ESCAPE_CHARACTER() {
|
|
490
|
-
return ESCAPE_CHARACTER;
|
|
491
|
-
},
|
|
492
|
-
get ETX_CHARACTER() {
|
|
493
|
-
return ETX_CHARACTER;
|
|
494
|
-
},
|
|
495
|
-
get EXCLAMATION_MARK_CHARACTER() {
|
|
496
|
-
return EXCLAMATION_MARK_CHARACTER;
|
|
497
|
-
},
|
|
498
|
-
get FORWARD_SLASH_CHARACTER() {
|
|
499
|
-
return FORWARD_SLASH_CHARACTER;
|
|
500
|
-
},
|
|
501
|
-
get HAT_CHARACTER() {
|
|
502
|
-
return HAT_CHARACTER;
|
|
503
|
-
},
|
|
504
|
-
get LEFT_CHARACTER() {
|
|
505
|
-
return LEFT_CHARACTER;
|
|
506
|
-
},
|
|
507
|
-
get NEW_LINE_CHARACTER() {
|
|
508
|
-
return NEW_LINE_CHARACTER;
|
|
509
|
-
},
|
|
510
|
-
get OPENING_BRACKET_CHARACTER() {
|
|
511
|
-
return OPENING_BRACKET_CHARACTER;
|
|
512
|
-
},
|
|
513
|
-
get OPENING_CURLY_BRACKET_CHARACTER() {
|
|
514
|
-
return OPENING_CURLY_BRACKET_CHARACTER;
|
|
515
|
-
},
|
|
516
|
-
get OPENING_SQUARE_BRACKET_CHARACTER() {
|
|
517
|
-
return OPENING_SQUARE_BRACKET_CHARACTER;
|
|
518
|
-
},
|
|
519
|
-
get PERIOD_CHARACTER() {
|
|
520
|
-
return PERIOD_CHARACTER;
|
|
521
|
-
},
|
|
522
|
-
get PLUS_CHARACTER() {
|
|
523
|
-
return PLUS_CHARACTER;
|
|
524
|
-
},
|
|
525
|
-
get QUESTION_MARK_CHARACTER() {
|
|
526
|
-
return QUESTION_MARK_CHARACTER;
|
|
527
|
-
},
|
|
528
|
-
get RIGHT_CHARACTER() {
|
|
529
|
-
return RIGHT_CHARACTER;
|
|
530
|
-
},
|
|
531
|
-
get SPACE_CHARACTER() {
|
|
532
|
-
return SPACE_CHARACTER;
|
|
533
|
-
},
|
|
534
|
-
get UP_CHARACTER() {
|
|
535
|
-
return UP_CHARACTER;
|
|
536
|
-
},
|
|
537
|
-
get WILDCARD_CHARACTER() {
|
|
538
|
-
return WILDCARD_CHARACTER;
|
|
539
|
-
},
|
|
540
|
-
get default() {
|
|
541
|
-
return _default;
|
|
542
|
-
}
|
|
543
|
-
});
|
|
544
|
-
var UP_CHARACTER = "[A";
|
|
545
|
-
var ETX_CHARACTER = "";
|
|
546
|
-
var BAR_CHARACTER = "|";
|
|
547
|
-
var HAT_CHARACTER = "^";
|
|
548
|
-
var PLUS_CHARACTER = "+";
|
|
549
|
-
var DASH_CHARACTER = "-";
|
|
550
|
-
var DOWN_CHARACTER = "[B";
|
|
551
|
-
var LEFT_CHARACTER = "[D";
|
|
552
|
-
var RIGHT_CHARACTER = "[C";
|
|
553
|
-
var SPACE_CHARACTER = " ";
|
|
554
|
-
var COMMA_CHARACTER = ",";
|
|
555
|
-
var COLON_CHARACTER = ":";
|
|
556
|
-
var PERIOD_CHARACTER = ".";
|
|
557
|
-
var DOLLAR_CHARACTER = "$";
|
|
558
|
-
var CTRL_C_CHARACTER = "^C";
|
|
559
|
-
var ESCAPE_CHARACTER = "";
|
|
560
|
-
var ASTERISK_CHARACTER = "*";
|
|
561
|
-
var WILDCARD_CHARACTER = "*";
|
|
562
|
-
var BACKTICK_DELIMITER = "`";
|
|
563
|
-
var NEW_LINE_CHARACTER = "\n";
|
|
564
|
-
var AMPERSAND_CHARACTER = "&";
|
|
565
|
-
var BACKSLASH_CHARACTER = "\\";
|
|
566
|
-
var BACKSPACE_CHARACTER = String.fromCharCode(127);
|
|
567
|
-
var QUESTION_MARK_CHARACTER = "?";
|
|
568
|
-
var FORWARD_SLASH_CHARACTER = "/";
|
|
569
|
-
var OPENING_BRACKET_CHARACTER = "(";
|
|
570
|
-
var CLOSING_BRACKET_CHARACTER = ")";
|
|
571
|
-
var CARRIAGE_RETURN_CHARACTER = "\r";
|
|
572
|
-
var EXCLAMATION_MARK_CHARACTER = "!";
|
|
573
|
-
var OPENING_CURLY_BRACKET_CHARACTER = "{";
|
|
574
|
-
var CLOSING_CURLY_BRACKET_CHARACTER = "}";
|
|
575
|
-
var OPENING_SQUARE_BRACKET_CHARACTER = "[";
|
|
576
|
-
var CLOSING_SQUARE_BRACKET_CHARACTER = "]";
|
|
577
|
-
var _default = {
|
|
578
|
-
UP_CHARACTER,
|
|
579
|
-
ETX_CHARACTER,
|
|
580
|
-
BAR_CHARACTER,
|
|
581
|
-
HAT_CHARACTER,
|
|
582
|
-
PLUS_CHARACTER,
|
|
583
|
-
DASH_CHARACTER,
|
|
584
|
-
DOWN_CHARACTER,
|
|
585
|
-
LEFT_CHARACTER,
|
|
586
|
-
RIGHT_CHARACTER,
|
|
587
|
-
SPACE_CHARACTER,
|
|
588
|
-
COMMA_CHARACTER,
|
|
589
|
-
COLON_CHARACTER,
|
|
590
|
-
PERIOD_CHARACTER,
|
|
591
|
-
DOLLAR_CHARACTER,
|
|
592
|
-
CTRL_C_CHARACTER,
|
|
593
|
-
ESCAPE_CHARACTER,
|
|
594
|
-
ASTERISK_CHARACTER,
|
|
595
|
-
WILDCARD_CHARACTER,
|
|
596
|
-
BACKTICK_DELIMITER,
|
|
597
|
-
NEW_LINE_CHARACTER,
|
|
598
|
-
AMPERSAND_CHARACTER,
|
|
599
|
-
BACKSLASH_CHARACTER,
|
|
600
|
-
BACKSPACE_CHARACTER,
|
|
601
|
-
QUESTION_MARK_CHARACTER,
|
|
602
|
-
FORWARD_SLASH_CHARACTER,
|
|
603
|
-
OPENING_BRACKET_CHARACTER,
|
|
604
|
-
CLOSING_BRACKET_CHARACTER,
|
|
605
|
-
CARRIAGE_RETURN_CHARACTER,
|
|
606
|
-
EXCLAMATION_MARK_CHARACTER,
|
|
607
|
-
OPENING_CURLY_BRACKET_CHARACTER,
|
|
608
|
-
CLOSING_CURLY_BRACKET_CHARACTER,
|
|
609
|
-
OPENING_SQUARE_BRACKET_CHARACTER,
|
|
610
|
-
CLOSING_SQUARE_BRACKET_CHARACTER
|
|
611
|
-
};
|
|
612
|
-
});
|
|
613
|
-
|
|
614
|
-
// node_modules/necessary/lib/statusCodes.js
|
|
615
|
-
var require_statusCodes = __commonJS((exports) => {
|
|
616
|
-
"use strict";
|
|
617
|
-
Object.defineProperty(exports, "__esModule", {
|
|
618
|
-
value: true
|
|
619
|
-
});
|
|
620
|
-
function _export(target, all) {
|
|
621
|
-
for (var name in all)
|
|
622
|
-
Object.defineProperty(target, name, {
|
|
623
|
-
enumerable: true,
|
|
624
|
-
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
625
|
-
});
|
|
626
|
-
}
|
|
627
|
-
_export(exports, {
|
|
628
|
-
get BAD_GATEWAY_502_STATUS_CODE() {
|
|
629
|
-
return BAD_GATEWAY_502_STATUS_CODE;
|
|
630
|
-
},
|
|
631
|
-
get BAD_REQUEST_400_STATUS_CODE() {
|
|
632
|
-
return BAD_REQUEST_400_STATUS_CODE;
|
|
633
|
-
},
|
|
634
|
-
get CONFLICT_409_STATUS_CODE() {
|
|
635
|
-
return CONFLICT_409_STATUS_CODE;
|
|
636
|
-
},
|
|
637
|
-
get CREATED_201_STATUS_CODE() {
|
|
638
|
-
return CREATED_201_STATUS_CODE;
|
|
639
|
-
},
|
|
640
|
-
get FORBIDDEN_403_STATUS_CODE() {
|
|
641
|
-
return FORBIDDEN_403_STATUS_CODE;
|
|
642
|
-
},
|
|
643
|
-
get FOUND_302_STATUS_CODE() {
|
|
644
|
-
return FOUND_302_STATUS_CODE;
|
|
645
|
-
},
|
|
646
|
-
get INTERNAL_SERVER_ERROR_500_STATUS_CODE() {
|
|
647
|
-
return INTERNAL_SERVER_ERROR_500_STATUS_CODE;
|
|
648
|
-
},
|
|
649
|
-
get METHOD_NOT_ALLOWED_405_STATUS_CODE() {
|
|
650
|
-
return METHOD_NOT_ALLOWED_405_STATUS_CODE;
|
|
651
|
-
},
|
|
652
|
-
get NOT_ACCEPTABLE_406_STATUS_CODE() {
|
|
653
|
-
return NOT_ACCEPTABLE_406_STATUS_CODE;
|
|
654
|
-
},
|
|
655
|
-
get NOT_FOUND_404_STATUS_CODE() {
|
|
656
|
-
return NOT_FOUND_404_STATUS_CODE;
|
|
657
|
-
},
|
|
658
|
-
get NO_CONTENT_204_STATUS_CODE() {
|
|
659
|
-
return NO_CONTENT_204_STATUS_CODE;
|
|
660
|
-
},
|
|
661
|
-
get OK_200_STATUS_CODE() {
|
|
662
|
-
return OK_200_STATUS_CODE;
|
|
663
|
-
},
|
|
664
|
-
get REQUEST_TIMEOUT_408_STATUS_CODE() {
|
|
665
|
-
return REQUEST_TIMEOUT_408_STATUS_CODE;
|
|
666
|
-
},
|
|
667
|
-
get SEE_OTHER_303_STATUS_CODE() {
|
|
668
|
-
return SEE_OTHER_303_STATUS_CODE;
|
|
669
|
-
},
|
|
670
|
-
get SERVICE_UNAVAILABLE_503_STATUS_CODE() {
|
|
671
|
-
return SERVICE_UNAVAILABLE_503_STATUS_CODE;
|
|
672
|
-
},
|
|
673
|
-
get TOO_MANY_REQUESTS_429_STATUS_CODE() {
|
|
674
|
-
return TOO_MANY_REQUESTS_429_STATUS_CODE;
|
|
675
|
-
},
|
|
676
|
-
get UNAUTHORIZED_401_STATUS_CODE() {
|
|
677
|
-
return UNAUTHORIZED_401_STATUS_CODE;
|
|
678
|
-
},
|
|
679
|
-
get UNPROCESSABLE_ENTITY_422_STATUS_CODE() {
|
|
680
|
-
return UNPROCESSABLE_ENTITY_422_STATUS_CODE;
|
|
681
|
-
},
|
|
682
|
-
get ZERO_0_STATUS_CODE() {
|
|
683
|
-
return ZERO_0_STATUS_CODE;
|
|
684
|
-
},
|
|
685
|
-
get default() {
|
|
686
|
-
return _default;
|
|
687
|
-
}
|
|
688
|
-
});
|
|
689
|
-
var ZERO_0_STATUS_CODE = 0;
|
|
690
|
-
var OK_200_STATUS_CODE = 200;
|
|
691
|
-
var FOUND_302_STATUS_CODE = 302;
|
|
692
|
-
var CREATED_201_STATUS_CODE = 201;
|
|
693
|
-
var CONFLICT_409_STATUS_CODE = 409;
|
|
694
|
-
var SEE_OTHER_303_STATUS_CODE = 303;
|
|
695
|
-
var FORBIDDEN_403_STATUS_CODE = 403;
|
|
696
|
-
var NOT_FOUND_404_STATUS_CODE = 404;
|
|
697
|
-
var NO_CONTENT_204_STATUS_CODE = 204;
|
|
698
|
-
var BAD_GATEWAY_502_STATUS_CODE = 502;
|
|
699
|
-
var BAD_REQUEST_400_STATUS_CODE = 400;
|
|
700
|
-
var UNAUTHORIZED_401_STATUS_CODE = 401;
|
|
701
|
-
var NOT_ACCEPTABLE_406_STATUS_CODE = 406;
|
|
702
|
-
var REQUEST_TIMEOUT_408_STATUS_CODE = 408;
|
|
703
|
-
var TOO_MANY_REQUESTS_429_STATUS_CODE = 429;
|
|
704
|
-
var METHOD_NOT_ALLOWED_405_STATUS_CODE = 405;
|
|
705
|
-
var SERVICE_UNAVAILABLE_503_STATUS_CODE = 503;
|
|
706
|
-
var UNPROCESSABLE_ENTITY_422_STATUS_CODE = 422;
|
|
707
|
-
var INTERNAL_SERVER_ERROR_500_STATUS_CODE = 500;
|
|
708
|
-
var _default = {
|
|
709
|
-
ZERO_0_STATUS_CODE,
|
|
710
|
-
OK_200_STATUS_CODE,
|
|
711
|
-
FOUND_302_STATUS_CODE,
|
|
712
|
-
CREATED_201_STATUS_CODE,
|
|
713
|
-
CONFLICT_409_STATUS_CODE,
|
|
714
|
-
SEE_OTHER_303_STATUS_CODE,
|
|
715
|
-
FORBIDDEN_403_STATUS_CODE,
|
|
716
|
-
NOT_FOUND_404_STATUS_CODE,
|
|
717
|
-
NO_CONTENT_204_STATUS_CODE,
|
|
718
|
-
BAD_GATEWAY_502_STATUS_CODE,
|
|
719
|
-
BAD_REQUEST_400_STATUS_CODE,
|
|
720
|
-
UNAUTHORIZED_401_STATUS_CODE,
|
|
721
|
-
NOT_ACCEPTABLE_406_STATUS_CODE,
|
|
722
|
-
REQUEST_TIMEOUT_408_STATUS_CODE,
|
|
723
|
-
TOO_MANY_REQUESTS_429_STATUS_CODE,
|
|
724
|
-
METHOD_NOT_ALLOWED_405_STATUS_CODE,
|
|
725
|
-
SERVICE_UNAVAILABLE_503_STATUS_CODE,
|
|
726
|
-
UNPROCESSABLE_ENTITY_422_STATUS_CODE,
|
|
727
|
-
INTERNAL_SERVER_ERROR_500_STATUS_CODE
|
|
728
|
-
};
|
|
729
|
-
});
|
|
730
|
-
|
|
731
|
-
// node_modules/necessary/lib/contentTypes.js
|
|
732
|
-
var require_contentTypes = __commonJS((exports) => {
|
|
733
|
-
"use strict";
|
|
734
|
-
Object.defineProperty(exports, "__esModule", {
|
|
735
|
-
value: true
|
|
736
|
-
});
|
|
737
|
-
function _export(target, all) {
|
|
738
|
-
for (var name in all)
|
|
739
|
-
Object.defineProperty(target, name, {
|
|
740
|
-
enumerable: true,
|
|
741
|
-
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
742
|
-
});
|
|
743
|
-
}
|
|
744
|
-
_export(exports, {
|
|
745
|
-
get APPLICATION_JSON_CHARSET_UTF_8_CONTENT_TYPE() {
|
|
746
|
-
return APPLICATION_JSON_CHARSET_UTF_8_CONTENT_TYPE;
|
|
747
|
-
},
|
|
748
|
-
get APPLICATION_JSON_CONTENT_TYPE() {
|
|
749
|
-
return APPLICATION_JSON_CONTENT_TYPE;
|
|
750
|
-
},
|
|
751
|
-
get APPLICATION_OCTET_STREAM_CONTENT_TYPE() {
|
|
752
|
-
return APPLICATION_OCTET_STREAM_CONTENT_TYPE;
|
|
753
|
-
},
|
|
754
|
-
get APPLICATION_X_WWW_FORM_ENCODED_CHARSET_UTF_8_CONTENT_TYPE() {
|
|
755
|
-
return APPLICATION_X_WWW_FORM_ENCODED_CHARSET_UTF_8_CONTENT_TYPE;
|
|
756
|
-
},
|
|
757
|
-
get APPLICATION_X_WWW_FORM_ENCODED_CONTENT_TYPE() {
|
|
758
|
-
return APPLICATION_X_WWW_FORM_ENCODED_CONTENT_TYPE;
|
|
759
|
-
},
|
|
760
|
-
get TEXT_HTML_CHARSET_UTF_8_CONTENT_TYPE() {
|
|
761
|
-
return TEXT_HTML_CHARSET_UTF_8_CONTENT_TYPE;
|
|
762
|
-
},
|
|
763
|
-
get TEXT_HTML_CONTENT_TYPE() {
|
|
764
|
-
return TEXT_HTML_CONTENT_TYPE;
|
|
765
|
-
},
|
|
766
|
-
get TEXT_PLAIN_CHARSET_UTF_8_CONTENT_TYPE() {
|
|
767
|
-
return TEXT_PLAIN_CHARSET_UTF_8_CONTENT_TYPE;
|
|
768
|
-
},
|
|
769
|
-
get TEXT_PLAIN_CONTENT_TYPE() {
|
|
770
|
-
return TEXT_PLAIN_CONTENT_TYPE;
|
|
771
|
-
},
|
|
772
|
-
get default() {
|
|
773
|
-
return _default;
|
|
774
|
-
}
|
|
775
|
-
});
|
|
776
|
-
var TEXT_HTML_CONTENT_TYPE = "text/html";
|
|
777
|
-
var TEXT_PLAIN_CONTENT_TYPE = "text/plain";
|
|
778
|
-
var APPLICATION_JSON_CONTENT_TYPE = "application/json";
|
|
779
|
-
var TEXT_HTML_CHARSET_UTF_8_CONTENT_TYPE = "text/html; charset=utf-8";
|
|
780
|
-
var TEXT_PLAIN_CHARSET_UTF_8_CONTENT_TYPE = "text/plain; charset=utf-8";
|
|
781
|
-
var APPLICATION_OCTET_STREAM_CONTENT_TYPE = "application/octet-stream";
|
|
782
|
-
var APPLICATION_X_WWW_FORM_ENCODED_CONTENT_TYPE = "application/x-www-form-urlencoded";
|
|
783
|
-
var APPLICATION_JSON_CHARSET_UTF_8_CONTENT_TYPE = "application/json; charset=utf-8";
|
|
784
|
-
var APPLICATION_X_WWW_FORM_ENCODED_CHARSET_UTF_8_CONTENT_TYPE = "application/x-www-form-urlencoded; charset=utf-8";
|
|
785
|
-
var _default = {
|
|
786
|
-
TEXT_HTML_CONTENT_TYPE,
|
|
787
|
-
TEXT_PLAIN_CONTENT_TYPE,
|
|
788
|
-
APPLICATION_JSON_CONTENT_TYPE,
|
|
789
|
-
TEXT_HTML_CHARSET_UTF_8_CONTENT_TYPE,
|
|
790
|
-
TEXT_PLAIN_CHARSET_UTF_8_CONTENT_TYPE,
|
|
791
|
-
APPLICATION_OCTET_STREAM_CONTENT_TYPE,
|
|
792
|
-
APPLICATION_JSON_CHARSET_UTF_8_CONTENT_TYPE,
|
|
793
|
-
APPLICATION_X_WWW_FORM_ENCODED_CONTENT_TYPE,
|
|
794
|
-
APPLICATION_X_WWW_FORM_ENCODED_CHARSET_UTF_8_CONTENT_TYPE
|
|
795
|
-
};
|
|
796
|
-
});
|
|
797
|
-
|
|
798
|
-
// node_modules/necessary/lib/statusMessages.js
|
|
799
|
-
var require_statusMessages = __commonJS((exports) => {
|
|
800
|
-
"use strict";
|
|
801
|
-
Object.defineProperty(exports, "__esModule", {
|
|
802
|
-
value: true
|
|
803
|
-
});
|
|
804
|
-
function _export(target, all) {
|
|
805
|
-
for (var name in all)
|
|
806
|
-
Object.defineProperty(target, name, {
|
|
807
|
-
enumerable: true,
|
|
808
|
-
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
809
|
-
});
|
|
810
|
-
}
|
|
811
|
-
_export(exports, {
|
|
812
|
-
get BAD_GATEWAY_502_STATUS_MESSAGE() {
|
|
813
|
-
return BAD_GATEWAY_502_STATUS_MESSAGE;
|
|
814
|
-
},
|
|
815
|
-
get BAD_REQUEST_400_STATUS_MESSAGE() {
|
|
816
|
-
return BAD_REQUEST_400_STATUS_MESSAGE;
|
|
817
|
-
},
|
|
818
|
-
get CONFLICT_409_STATUS_MESSAGE() {
|
|
819
|
-
return CONFLICT_409_STATUS_MESSAGE;
|
|
820
|
-
},
|
|
821
|
-
get CREATED_201_STATUS_MESSAGE() {
|
|
822
|
-
return CREATED_201_STATUS_MESSAGE;
|
|
823
|
-
},
|
|
824
|
-
get FORBIDDEN_403_STATUS_MESSAGE() {
|
|
825
|
-
return FORBIDDEN_403_STATUS_MESSAGE;
|
|
826
|
-
},
|
|
827
|
-
get FOUND_302_STATUS_MESSAGE() {
|
|
828
|
-
return FOUND_302_STATUS_MESSAGE;
|
|
829
|
-
},
|
|
830
|
-
get INTERNAL_SERVER_ERROR_500_STATUS_MESSAGE() {
|
|
831
|
-
return INTERNAL_SERVER_ERROR_500_STATUS_MESSAGE;
|
|
832
|
-
},
|
|
833
|
-
get METHOD_NOT_ALLOWED_405_STATUS_MESSAGE() {
|
|
834
|
-
return METHOD_NOT_ALLOWED_405_STATUS_MESSAGE;
|
|
835
|
-
},
|
|
836
|
-
get NOT_ACCEPTABLE_406_STATUS_MESSAGE() {
|
|
837
|
-
return NOT_ACCEPTABLE_406_STATUS_MESSAGE;
|
|
838
|
-
},
|
|
839
|
-
get NOT_FOUND_404_STATUS_MESSAGE() {
|
|
840
|
-
return NOT_FOUND_404_STATUS_MESSAGE;
|
|
841
|
-
},
|
|
842
|
-
get NO_CONTENT_204_STATUS_MESSAGE() {
|
|
843
|
-
return NO_CONTENT_204_STATUS_MESSAGE;
|
|
844
|
-
},
|
|
845
|
-
get OK_200_STATUS_MESSAGE() {
|
|
846
|
-
return OK_200_STATUS_MESSAGE;
|
|
847
|
-
},
|
|
848
|
-
get REQUEST_TIMEOUT_408_STATUS_MESSAGE() {
|
|
849
|
-
return REQUEST_TIMEOUT_408_STATUS_MESSAGE;
|
|
850
|
-
},
|
|
851
|
-
get SEE_OTHER_303_STATUS_MESSAGE() {
|
|
852
|
-
return SEE_OTHER_303_STATUS_MESSAGE;
|
|
853
|
-
},
|
|
854
|
-
get SERVICE_UNAVAILABLE_503_STATUS_MESSAGE() {
|
|
855
|
-
return SERVICE_UNAVAILABLE_503_STATUS_MESSAGE;
|
|
856
|
-
},
|
|
857
|
-
get TOO_MANY_REQUESTS_429_STATUS_MESSAGE() {
|
|
858
|
-
return TOO_MANY_REQUESTS_429_STATUS_MESSAGE;
|
|
859
|
-
},
|
|
860
|
-
get UNAUTHORIZED_401_STATUS_MESSAGE() {
|
|
861
|
-
return UNAUTHORIZED_401_STATUS_MESSAGE;
|
|
862
|
-
},
|
|
863
|
-
get UNPROCESSABLE_ENTITY_422_STATUS_MESSAGE() {
|
|
864
|
-
return UNPROCESSABLE_ENTITY_422_STATUS_MESSAGE;
|
|
865
|
-
},
|
|
866
|
-
get ZERO_0_STATUS_MESSAGE() {
|
|
867
|
-
return ZERO_0_STATUS_MESSAGE;
|
|
868
|
-
},
|
|
869
|
-
get default() {
|
|
870
|
-
return _default;
|
|
871
|
-
}
|
|
872
|
-
});
|
|
873
|
-
var ZERO_0_STATUS_MESSAGE = "";
|
|
874
|
-
var OK_200_STATUS_MESSAGE = "OK";
|
|
875
|
-
var FOUND_302_STATUS_MESSAGE = "Found";
|
|
876
|
-
var CREATED_201_STATUS_MESSAGE = "Created";
|
|
877
|
-
var CONFLICT_409_STATUS_MESSAGE = "Conflict";
|
|
878
|
-
var SEE_OTHER_303_STATUS_MESSAGE = "See other";
|
|
879
|
-
var FORBIDDEN_403_STATUS_MESSAGE = "Forbidden";
|
|
880
|
-
var NOT_FOUND_404_STATUS_MESSAGE = "Not found";
|
|
881
|
-
var NO_CONTENT_204_STATUS_MESSAGE = "No content";
|
|
882
|
-
var BAD_GATEWAY_502_STATUS_MESSAGE = "Bad gateway";
|
|
883
|
-
var BAD_REQUEST_400_STATUS_MESSAGE = "Bad request";
|
|
884
|
-
var UNAUTHORIZED_401_STATUS_MESSAGE = "Unauthorized";
|
|
885
|
-
var NOT_ACCEPTABLE_406_STATUS_MESSAGE = "Not Acceptable";
|
|
886
|
-
var REQUEST_TIMEOUT_408_STATUS_MESSAGE = "Request timeout";
|
|
887
|
-
var TOO_MANY_REQUESTS_429_STATUS_MESSAGE = "Too many requests";
|
|
888
|
-
var METHOD_NOT_ALLOWED_405_STATUS_MESSAGE = "Method not allowed";
|
|
889
|
-
var SERVICE_UNAVAILABLE_503_STATUS_MESSAGE = "Service unavailable";
|
|
890
|
-
var UNPROCESSABLE_ENTITY_422_STATUS_MESSAGE = "Unprocessable Entity";
|
|
891
|
-
var INTERNAL_SERVER_ERROR_500_STATUS_MESSAGE = "Internal server error";
|
|
892
|
-
var _default = {
|
|
893
|
-
ZERO_0_STATUS_MESSAGE,
|
|
894
|
-
OK_200_STATUS_MESSAGE,
|
|
895
|
-
FOUND_302_STATUS_MESSAGE,
|
|
896
|
-
CREATED_201_STATUS_MESSAGE,
|
|
897
|
-
CONFLICT_409_STATUS_MESSAGE,
|
|
898
|
-
SEE_OTHER_303_STATUS_MESSAGE,
|
|
899
|
-
FORBIDDEN_403_STATUS_MESSAGE,
|
|
900
|
-
NOT_FOUND_404_STATUS_MESSAGE,
|
|
901
|
-
NO_CONTENT_204_STATUS_MESSAGE,
|
|
902
|
-
BAD_GATEWAY_502_STATUS_MESSAGE,
|
|
903
|
-
BAD_REQUEST_400_STATUS_MESSAGE,
|
|
904
|
-
UNAUTHORIZED_401_STATUS_MESSAGE,
|
|
905
|
-
NOT_ACCEPTABLE_406_STATUS_MESSAGE,
|
|
906
|
-
REQUEST_TIMEOUT_408_STATUS_MESSAGE,
|
|
907
|
-
TOO_MANY_REQUESTS_429_STATUS_MESSAGE,
|
|
908
|
-
METHOD_NOT_ALLOWED_405_STATUS_MESSAGE,
|
|
909
|
-
SERVICE_UNAVAILABLE_503_STATUS_MESSAGE,
|
|
910
|
-
UNPROCESSABLE_ENTITY_422_STATUS_MESSAGE,
|
|
911
|
-
INTERNAL_SERVER_ERROR_500_STATUS_MESSAGE
|
|
912
|
-
};
|
|
913
|
-
});
|
|
914
|
-
|
|
915
|
-
// node_modules/necessary/lib/constants.js
|
|
916
|
-
var require_constants = __commonJS((exports) => {
|
|
917
|
-
"use strict";
|
|
918
|
-
Object.defineProperty(exports, "__esModule", {
|
|
919
|
-
value: true
|
|
920
|
-
});
|
|
921
|
-
function _export(target, all) {
|
|
922
|
-
for (var name in all)
|
|
923
|
-
Object.defineProperty(target, name, {
|
|
924
|
-
enumerable: true,
|
|
925
|
-
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
926
|
-
});
|
|
927
|
-
}
|
|
928
|
-
_export(exports, {
|
|
929
|
-
get BOOLEAN() {
|
|
930
|
-
return BOOLEAN;
|
|
931
|
-
},
|
|
932
|
-
get DATA() {
|
|
933
|
-
return DATA;
|
|
934
|
-
},
|
|
935
|
-
get DEFAULT() {
|
|
936
|
-
return DEFAULT;
|
|
937
|
-
},
|
|
938
|
-
get DOUBLE_SPACE() {
|
|
939
|
-
return DOUBLE_SPACE;
|
|
940
|
-
},
|
|
941
|
-
get EMPTY_STRING() {
|
|
942
|
-
return EMPTY_STRING;
|
|
943
|
-
},
|
|
944
|
-
get ENVIRONMENT() {
|
|
945
|
-
return ENVIRONMENT;
|
|
946
|
-
},
|
|
947
|
-
get ERROR() {
|
|
948
|
-
return ERROR;
|
|
949
|
-
},
|
|
950
|
-
get FUNCTION() {
|
|
951
|
-
return FUNCTION;
|
|
952
|
-
},
|
|
953
|
-
get NUMBER() {
|
|
954
|
-
return NUMBER;
|
|
955
|
-
},
|
|
956
|
-
get PACKAGE_JSON() {
|
|
957
|
-
return PACKAGE_JSON;
|
|
958
|
-
},
|
|
959
|
-
get STRING() {
|
|
960
|
-
return STRING;
|
|
961
|
-
},
|
|
962
|
-
get ZERO() {
|
|
963
|
-
return ZERO;
|
|
964
|
-
}
|
|
965
|
-
});
|
|
966
|
-
var ZERO = "0";
|
|
967
|
-
var DATA = "data";
|
|
968
|
-
var ERROR = "error";
|
|
969
|
-
var STRING = "string";
|
|
970
|
-
var NUMBER = "number";
|
|
971
|
-
var BOOLEAN = "boolean";
|
|
972
|
-
var DEFAULT = "default";
|
|
973
|
-
var FUNCTION = "function";
|
|
974
|
-
var ENVIRONMENT = "ENVIRONMENT";
|
|
975
|
-
var EMPTY_STRING = "";
|
|
976
|
-
var DOUBLE_SPACE = " ";
|
|
977
|
-
var PACKAGE_JSON = "package.json";
|
|
978
|
-
});
|
|
979
|
-
|
|
980
|
-
// node_modules/necessary/lib/utilities/array.js
|
|
981
|
-
var require_array = __commonJS((exports) => {
|
|
982
|
-
"use strict";
|
|
983
|
-
Object.defineProperty(exports, "__esModule", {
|
|
984
|
-
value: true
|
|
985
|
-
});
|
|
986
|
-
function _export(target, all) {
|
|
987
|
-
for (var name in all)
|
|
988
|
-
Object.defineProperty(target, name, {
|
|
989
|
-
enumerable: true,
|
|
990
|
-
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
991
|
-
});
|
|
992
|
-
}
|
|
993
|
-
_export(exports, {
|
|
994
|
-
get augment() {
|
|
995
|
-
return augment;
|
|
996
|
-
},
|
|
997
|
-
get back() {
|
|
998
|
-
return back;
|
|
999
|
-
},
|
|
1000
|
-
get backwardsEvery() {
|
|
1001
|
-
return backwardsEvery;
|
|
1002
|
-
},
|
|
1003
|
-
get backwardsFind() {
|
|
1004
|
-
return backwardsFind;
|
|
1005
|
-
},
|
|
1006
|
-
get backwardsFindIndex() {
|
|
1007
|
-
return backwardsFindIndex;
|
|
1008
|
-
},
|
|
1009
|
-
get backwardsForEach() {
|
|
1010
|
-
return backwardsForEach;
|
|
1011
|
-
},
|
|
1012
|
-
get backwardsReduce() {
|
|
1013
|
-
return backwardsReduce;
|
|
1014
|
-
},
|
|
1015
|
-
get backwardsSome() {
|
|
1016
|
-
return backwardsSome;
|
|
1017
|
-
},
|
|
1018
|
-
get clear() {
|
|
1019
|
-
return clear;
|
|
1020
|
-
},
|
|
1021
|
-
get combine() {
|
|
1022
|
-
return combine;
|
|
1023
|
-
},
|
|
1024
|
-
get compare() {
|
|
1025
|
-
return compare;
|
|
1026
|
-
},
|
|
1027
|
-
get compress() {
|
|
1028
|
-
return compress;
|
|
1029
|
-
},
|
|
1030
|
-
get concat() {
|
|
1031
|
-
return concat;
|
|
1032
|
-
},
|
|
1033
|
-
get copy() {
|
|
1034
|
-
return copy;
|
|
1035
|
-
},
|
|
1036
|
-
get correlate() {
|
|
1037
|
-
return correlate;
|
|
1038
|
-
},
|
|
1039
|
-
get default() {
|
|
1040
|
-
return _default;
|
|
1041
|
-
},
|
|
1042
|
-
get eighth() {
|
|
1043
|
-
return eighth;
|
|
1044
|
-
},
|
|
1045
|
-
get eighthLast() {
|
|
1046
|
-
return eighthLast;
|
|
1047
|
-
},
|
|
1048
|
-
get extract() {
|
|
1049
|
-
return extract;
|
|
1050
|
-
},
|
|
1051
|
-
get fifth() {
|
|
1052
|
-
return fifth;
|
|
1053
|
-
},
|
|
1054
|
-
get fifthLast() {
|
|
1055
|
-
return fifthLast;
|
|
1056
|
-
},
|
|
1057
|
-
get filter() {
|
|
1058
|
-
return filter;
|
|
1059
|
-
},
|
|
1060
|
-
get find() {
|
|
1061
|
-
return find;
|
|
1062
|
-
},
|
|
1063
|
-
get first() {
|
|
1064
|
-
return first;
|
|
1065
|
-
},
|
|
1066
|
-
get firstLast() {
|
|
1067
|
-
return firstLast;
|
|
1068
|
-
},
|
|
1069
|
-
get forwardsEvery() {
|
|
1070
|
-
return forwardsEvery;
|
|
1071
|
-
},
|
|
1072
|
-
get forwardsFind() {
|
|
1073
|
-
return forwardsFind;
|
|
1074
|
-
},
|
|
1075
|
-
get forwardsFindIndex() {
|
|
1076
|
-
return forwardsFindIndex;
|
|
1077
|
-
},
|
|
1078
|
-
get forwardsForEach() {
|
|
1079
|
-
return forwardsForEach;
|
|
1080
|
-
},
|
|
1081
|
-
get forwardsReduce() {
|
|
1082
|
-
return forwardsReduce;
|
|
1083
|
-
},
|
|
1084
|
-
get forwardsSome() {
|
|
1085
|
-
return forwardsSome;
|
|
1086
|
-
},
|
|
1087
|
-
get fourth() {
|
|
1088
|
-
return fourth;
|
|
1089
|
-
},
|
|
1090
|
-
get fourthLast() {
|
|
1091
|
-
return fourthLast;
|
|
1092
|
-
},
|
|
1093
|
-
get front() {
|
|
1094
|
-
return front;
|
|
1095
|
-
},
|
|
1096
|
-
get head() {
|
|
1097
|
-
return head;
|
|
1098
|
-
},
|
|
1099
|
-
get last() {
|
|
1100
|
-
return last;
|
|
1101
|
-
},
|
|
1102
|
-
get match() {
|
|
1103
|
-
return match;
|
|
1104
|
-
},
|
|
1105
|
-
get merge() {
|
|
1106
|
-
return merge;
|
|
1107
|
-
},
|
|
1108
|
-
get ninth() {
|
|
1109
|
-
return ninth;
|
|
1110
|
-
},
|
|
1111
|
-
get ninthLast() {
|
|
1112
|
-
return ninthLast;
|
|
1113
|
-
},
|
|
1114
|
-
get patch() {
|
|
1115
|
-
return patch;
|
|
1116
|
-
},
|
|
1117
|
-
get prune() {
|
|
1118
|
-
return prune;
|
|
1119
|
-
},
|
|
1120
|
-
get push() {
|
|
1121
|
-
return push;
|
|
1122
|
-
},
|
|
1123
|
-
get replace() {
|
|
1124
|
-
return replace;
|
|
1125
|
-
},
|
|
1126
|
-
get resolve() {
|
|
1127
|
-
return resolve;
|
|
1128
|
-
},
|
|
1129
|
-
get reverse() {
|
|
1130
|
-
return reverse;
|
|
1131
|
-
},
|
|
1132
|
-
get second() {
|
|
1133
|
-
return second;
|
|
1134
|
-
},
|
|
1135
|
-
get secondLast() {
|
|
1136
|
-
return secondLast;
|
|
1137
|
-
},
|
|
1138
|
-
get separate() {
|
|
1139
|
-
return separate;
|
|
1140
|
-
},
|
|
1141
|
-
get seventh() {
|
|
1142
|
-
return seventh;
|
|
1143
|
-
},
|
|
1144
|
-
get seventhLast() {
|
|
1145
|
-
return seventhLast;
|
|
1146
|
-
},
|
|
1147
|
-
get sixth() {
|
|
1148
|
-
return sixth;
|
|
1149
|
-
},
|
|
1150
|
-
get sixthLast() {
|
|
1151
|
-
return sixthLast;
|
|
1152
|
-
},
|
|
1153
|
-
get splice() {
|
|
1154
|
-
return splice;
|
|
1155
|
-
},
|
|
1156
|
-
get tail() {
|
|
1157
|
-
return tail;
|
|
1158
|
-
},
|
|
1159
|
-
get tenth() {
|
|
1160
|
-
return tenth;
|
|
1161
|
-
},
|
|
1162
|
-
get third() {
|
|
1163
|
-
return third;
|
|
1164
|
-
},
|
|
1165
|
-
get thirdLast() {
|
|
1166
|
-
return thirdLast;
|
|
1167
|
-
},
|
|
1168
|
-
get unshift() {
|
|
1169
|
-
return unshift;
|
|
1170
|
-
}
|
|
1171
|
-
});
|
|
1172
|
-
function _array_like_to_array(arr, len) {
|
|
1173
|
-
if (len == null || len > arr.length)
|
|
1174
|
-
len = arr.length;
|
|
1175
|
-
for (var i = 0, arr2 = new Array(len); i < len; i++)
|
|
1176
|
-
arr2[i] = arr[i];
|
|
1177
|
-
return arr2;
|
|
1178
|
-
}
|
|
1179
|
-
function _array_without_holes(arr) {
|
|
1180
|
-
if (Array.isArray(arr))
|
|
1181
|
-
return _array_like_to_array(arr);
|
|
1182
|
-
}
|
|
1183
|
-
function _instanceof(left, right) {
|
|
1184
|
-
if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
|
|
1185
|
-
return !!right[Symbol.hasInstance](left);
|
|
1186
|
-
} else {
|
|
1187
|
-
return left instanceof right;
|
|
1188
|
-
}
|
|
1189
|
-
}
|
|
1190
|
-
function _iterable_to_array(iter) {
|
|
1191
|
-
if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null)
|
|
1192
|
-
return Array.from(iter);
|
|
1193
|
-
}
|
|
1194
|
-
function _non_iterable_spread() {
|
|
1195
|
-
throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
1196
|
-
}
|
|
1197
|
-
function _to_consumable_array(arr) {
|
|
1198
|
-
return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();
|
|
1199
|
-
}
|
|
1200
|
-
function _unsupported_iterable_to_array(o, minLen) {
|
|
1201
|
-
if (!o)
|
|
1202
|
-
return;
|
|
1203
|
-
if (typeof o === "string")
|
|
1204
|
-
return _array_like_to_array(o, minLen);
|
|
1205
|
-
var n = Object.prototype.toString.call(o).slice(8, -1);
|
|
1206
|
-
if (n === "Object" && o.constructor)
|
|
1207
|
-
n = o.constructor.name;
|
|
1208
|
-
if (n === "Map" || n === "Set")
|
|
1209
|
-
return Array.from(n);
|
|
1210
|
-
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))
|
|
1211
|
-
return _array_like_to_array(o, minLen);
|
|
1212
|
-
}
|
|
1213
|
-
function first(array) {
|
|
1214
|
-
return array[0];
|
|
1215
|
-
}
|
|
1216
|
-
function second(array) {
|
|
1217
|
-
return array[1];
|
|
1218
|
-
}
|
|
1219
|
-
function third(array) {
|
|
1220
|
-
return array[2];
|
|
1221
|
-
}
|
|
1222
|
-
function fourth(array) {
|
|
1223
|
-
return array[3];
|
|
1224
|
-
}
|
|
1225
|
-
function fifth(array) {
|
|
1226
|
-
return array[4];
|
|
1227
|
-
}
|
|
1228
|
-
function sixth(array) {
|
|
1229
|
-
return array[5];
|
|
1230
|
-
}
|
|
1231
|
-
function seventh(array) {
|
|
1232
|
-
return array[6];
|
|
1233
|
-
}
|
|
1234
|
-
function eighth(array) {
|
|
1235
|
-
return array[7];
|
|
1236
|
-
}
|
|
1237
|
-
function ninth(array) {
|
|
1238
|
-
return array[8];
|
|
1239
|
-
}
|
|
1240
|
-
function tenth(array) {
|
|
1241
|
-
return array[9];
|
|
1242
|
-
}
|
|
1243
|
-
function firstLast(array) {
|
|
1244
|
-
return array[array.length - 1];
|
|
1245
|
-
}
|
|
1246
|
-
function secondLast(array) {
|
|
1247
|
-
return array[array.length - 2];
|
|
1248
|
-
}
|
|
1249
|
-
function thirdLast(array) {
|
|
1250
|
-
return array[array.length - 3];
|
|
1251
|
-
}
|
|
1252
|
-
function fourthLast(array) {
|
|
1253
|
-
return array[array.length - 4];
|
|
1254
|
-
}
|
|
1255
|
-
function fifthLast(array) {
|
|
1256
|
-
return array[array.length - 5];
|
|
1257
|
-
}
|
|
1258
|
-
function sixthLast(array) {
|
|
1259
|
-
return array[array.length - 6];
|
|
1260
|
-
}
|
|
1261
|
-
function seventhLast(array) {
|
|
1262
|
-
return array[array.length - 7];
|
|
1263
|
-
}
|
|
1264
|
-
function eighthLast(array) {
|
|
1265
|
-
return array[array.length - 8];
|
|
1266
|
-
}
|
|
1267
|
-
function ninthLast(array) {
|
|
1268
|
-
return array[array.length - 9];
|
|
1269
|
-
}
|
|
1270
|
-
function last(array) {
|
|
1271
|
-
return array[array.length - 1];
|
|
1272
|
-
}
|
|
1273
|
-
function head(array) {
|
|
1274
|
-
return array.slice(0, 1);
|
|
1275
|
-
}
|
|
1276
|
-
function tail(array) {
|
|
1277
|
-
return array.slice(1);
|
|
1278
|
-
}
|
|
1279
|
-
function back(array) {
|
|
1280
|
-
return array.slice(array.length - 1);
|
|
1281
|
-
}
|
|
1282
|
-
function front(array) {
|
|
1283
|
-
return array.slice(0, Math.max(1, array.length - 1));
|
|
1284
|
-
}
|
|
1285
|
-
function push(arrayA, arrayB) {
|
|
1286
|
-
Array.prototype.push.apply(arrayA, arrayB);
|
|
1287
|
-
}
|
|
1288
|
-
function unshift(arrayA, arrayB) {
|
|
1289
|
-
Array.prototype.unshift.apply(arrayA, arrayB);
|
|
1290
|
-
}
|
|
1291
|
-
function concat(arrayA, elementOrArray2) {
|
|
1292
|
-
var arrayB = _instanceof(elementOrArray2, Array) ? elementOrArray2 : [
|
|
1293
|
-
elementOrArray2
|
|
1294
|
-
];
|
|
1295
|
-
push(arrayA, arrayB);
|
|
1296
|
-
}
|
|
1297
|
-
function clear(array) {
|
|
1298
|
-
var start = 0;
|
|
1299
|
-
return array.splice(start);
|
|
1300
|
-
}
|
|
1301
|
-
function copy(arrayA, arrayB) {
|
|
1302
|
-
var start = 0, deleteCount = arrayB.length;
|
|
1303
|
-
splice(arrayA, start, deleteCount, arrayB);
|
|
1304
|
-
}
|
|
1305
|
-
function merge(arrayA, arrayB) {
|
|
1306
|
-
Array.prototype.push.apply(arrayA, arrayB);
|
|
1307
|
-
}
|
|
1308
|
-
function match(arrayA, arrayB, callback) {
|
|
1309
|
-
var matches = false;
|
|
1310
|
-
var arrayALength = arrayA.length, arrayBLength = arrayB.length;
|
|
1311
|
-
if (arrayALength === arrayBLength) {
|
|
1312
|
-
matches = arrayA.every(function(elementA, index) {
|
|
1313
|
-
var elementB = arrayB[index], passed = callback(elementA, elementB, index);
|
|
1314
|
-
if (passed) {
|
|
1315
|
-
return true;
|
|
1316
|
-
}
|
|
1317
|
-
});
|
|
1318
|
-
}
|
|
1319
|
-
return matches;
|
|
1320
|
-
}
|
|
1321
|
-
function compare(arrayA, arrayB, callback) {
|
|
1322
|
-
var coupled = false;
|
|
1323
|
-
var arrayALength = arrayA.length, arrayBLength = arrayB.length;
|
|
1324
|
-
if (arrayALength === arrayBLength) {
|
|
1325
|
-
arrayB = _to_consumable_array(arrayB);
|
|
1326
|
-
coupled = arrayA.every(function(elementA, index) {
|
|
1327
|
-
var elementB = extract(arrayB, function(elementB2) {
|
|
1328
|
-
var result = callback(elementA, elementB2);
|
|
1329
|
-
if (result) {
|
|
1330
|
-
return true;
|
|
1331
|
-
}
|
|
1332
|
-
}) || null;
|
|
1333
|
-
if (elementB !== null) {
|
|
1334
|
-
return true;
|
|
1335
|
-
}
|
|
1336
|
-
});
|
|
1337
|
-
}
|
|
1338
|
-
return coupled;
|
|
1339
|
-
}
|
|
1340
|
-
function correlate(arrayA, arrayB, callback) {
|
|
1341
|
-
arrayB = _to_consumable_array(arrayB);
|
|
1342
|
-
var correlates = arrayA.every(function(elementA) {
|
|
1343
|
-
var elementB = extract(arrayB, function(elementB2) {
|
|
1344
|
-
var result = callback(elementA, elementB2);
|
|
1345
|
-
if (result) {
|
|
1346
|
-
return true;
|
|
1347
|
-
}
|
|
1348
|
-
}) || null;
|
|
1349
|
-
if (elementB !== null) {
|
|
1350
|
-
return true;
|
|
1351
|
-
}
|
|
1352
|
-
});
|
|
1353
|
-
return correlates;
|
|
1354
|
-
}
|
|
1355
|
-
function resolve(arrayA, arrayB, callback) {
|
|
1356
|
-
var _loop = function() {
|
|
1357
|
-
var arrayALength2 = arrayA.length;
|
|
1358
|
-
if (arrayALength2 === 0) {
|
|
1359
|
-
return "break";
|
|
1360
|
-
}
|
|
1361
|
-
var resolved2 = false;
|
|
1362
|
-
arrayA.forEach(function(elementA) {
|
|
1363
|
-
var passed = callback(elementA);
|
|
1364
|
-
if (passed) {
|
|
1365
|
-
var elementB = elementA;
|
|
1366
|
-
arrayB.push(elementB);
|
|
1367
|
-
resolved2 = true;
|
|
1368
|
-
}
|
|
1369
|
-
});
|
|
1370
|
-
if (!resolved2) {
|
|
1371
|
-
return "break";
|
|
1372
|
-
}
|
|
1373
|
-
filter(arrayA, function(elementA) {
|
|
1374
|
-
var arrayBIncludesElementA = arrayB.includes(elementA);
|
|
1375
|
-
if (!arrayBIncludesElementA) {
|
|
1376
|
-
return true;
|
|
1377
|
-
}
|
|
1378
|
-
});
|
|
1379
|
-
};
|
|
1380
|
-
var resolved;
|
|
1381
|
-
arrayA = _to_consumable_array(arrayA);
|
|
1382
|
-
for (; ; ) {
|
|
1383
|
-
var _ret = _loop();
|
|
1384
|
-
if (_ret === "break")
|
|
1385
|
-
break;
|
|
1386
|
-
}
|
|
1387
|
-
var arrayALength = arrayA.length;
|
|
1388
|
-
resolved = arrayALength === 0;
|
|
1389
|
-
return resolved;
|
|
1390
|
-
}
|
|
1391
|
-
function find(array, callback) {
|
|
1392
|
-
var elements = [];
|
|
1393
|
-
forwardsForEach(array, function(element, index) {
|
|
1394
|
-
var passed = callback(element, index);
|
|
1395
|
-
if (passed) {
|
|
1396
|
-
elements.push(element);
|
|
1397
|
-
}
|
|
1398
|
-
});
|
|
1399
|
-
return elements;
|
|
1400
|
-
}
|
|
1401
|
-
function replace(array, element, callback) {
|
|
1402
|
-
var start;
|
|
1403
|
-
var found = array.some(function(element2, index) {
|
|
1404
|
-
var passed = callback(element2, index);
|
|
1405
|
-
if (passed) {
|
|
1406
|
-
start = index;
|
|
1407
|
-
return true;
|
|
1408
|
-
}
|
|
1409
|
-
});
|
|
1410
|
-
if (found) {
|
|
1411
|
-
var deleteCount = 1;
|
|
1412
|
-
array.splice(start, deleteCount, element);
|
|
1413
|
-
}
|
|
1414
|
-
return found;
|
|
1415
|
-
}
|
|
1416
|
-
function splice(arrayA, start) {
|
|
1417
|
-
var deleteCount = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : Infinity, arrayB = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : [];
|
|
1418
|
-
var args = [
|
|
1419
|
-
start,
|
|
1420
|
-
deleteCount
|
|
1421
|
-
].concat(_to_consumable_array(arrayB)), deletedElements = Array.prototype.splice.apply(arrayA, args);
|
|
1422
|
-
return deletedElements;
|
|
1423
|
-
}
|
|
1424
|
-
function filter(array, callback) {
|
|
1425
|
-
var deletedElements = [];
|
|
1426
|
-
backwardsForEach(array, function(element, index) {
|
|
1427
|
-
var passed = callback(element, index);
|
|
1428
|
-
if (!passed) {
|
|
1429
|
-
var start = index, deleteCount = 1, deletedElements2 = array.splice(start, deleteCount), firstDeletedElement = first(deletedElements2);
|
|
1430
|
-
deletedElements2.unshift(firstDeletedElement);
|
|
1431
|
-
}
|
|
1432
|
-
});
|
|
1433
|
-
return deletedElements;
|
|
1434
|
-
}
|
|
1435
|
-
function prune(array, callback) {
|
|
1436
|
-
var deletedElement = void 0;
|
|
1437
|
-
array.some(function(element, index) {
|
|
1438
|
-
var passed = callback(element, index);
|
|
1439
|
-
if (!passed) {
|
|
1440
|
-
var start = index, deleteCount = 1, deletedElements = array.splice(start, deleteCount), firstDeletedElement = first(deletedElements);
|
|
1441
|
-
deletedElement = firstDeletedElement;
|
|
1442
|
-
return true;
|
|
1443
|
-
}
|
|
1444
|
-
});
|
|
1445
|
-
return deletedElement;
|
|
1446
|
-
}
|
|
1447
|
-
function extract(array, callback) {
|
|
1448
|
-
var deletedElement = void 0;
|
|
1449
|
-
array.some(function(element, index) {
|
|
1450
|
-
var passed = callback(element, index);
|
|
1451
|
-
if (passed) {
|
|
1452
|
-
var start = index, deleteCount = 1, deletedElements = array.splice(start, deleteCount), firstDeletedElement = first(deletedElements);
|
|
1453
|
-
deletedElement = firstDeletedElement;
|
|
1454
|
-
return true;
|
|
1455
|
-
}
|
|
1456
|
-
});
|
|
1457
|
-
return deletedElement;
|
|
1458
|
-
}
|
|
1459
|
-
function patch(array, element, callback) {
|
|
1460
|
-
var found = array.some(function(element2, index) {
|
|
1461
|
-
var passed = callback(element2, index);
|
|
1462
|
-
if (passed) {
|
|
1463
|
-
return true;
|
|
1464
|
-
}
|
|
1465
|
-
});
|
|
1466
|
-
if (found) {
|
|
1467
|
-
array.push(element);
|
|
1468
|
-
}
|
|
1469
|
-
return found;
|
|
1470
|
-
}
|
|
1471
|
-
function compress(array, callback) {
|
|
1472
|
-
var index1 = 0, length = array.length;
|
|
1473
|
-
while (index1 < length) {
|
|
1474
|
-
var elementB = array[index1];
|
|
1475
|
-
for (var index2 = length - 1; index2 > index1; index2--) {
|
|
1476
|
-
var elementA = array[index2], passed = callback(elementA, elementB);
|
|
1477
|
-
if (!passed) {
|
|
1478
|
-
var start = index2, deleteCount = 1;
|
|
1479
|
-
array.splice(start, deleteCount);
|
|
1480
|
-
}
|
|
1481
|
-
}
|
|
1482
|
-
index1++;
|
|
1483
|
-
length = array.length;
|
|
1484
|
-
}
|
|
1485
|
-
}
|
|
1486
|
-
function combine(arrayA, arrayB, callback) {
|
|
1487
|
-
var array = _to_consumable_array(arrayA).concat(_to_consumable_array(arrayB));
|
|
1488
|
-
compress(array, callback);
|
|
1489
|
-
return array;
|
|
1490
|
-
}
|
|
1491
|
-
function reverse(array) {
|
|
1492
|
-
array = _to_consumable_array(array).reverse();
|
|
1493
|
-
return array;
|
|
1494
|
-
}
|
|
1495
|
-
function augment(arrayA, arrayB, callback) {
|
|
1496
|
-
arrayB.forEach(function(element, index) {
|
|
1497
|
-
var passed = callback(element, index);
|
|
1498
|
-
if (passed) {
|
|
1499
|
-
arrayA.push(element);
|
|
1500
|
-
}
|
|
1501
|
-
});
|
|
1502
|
-
}
|
|
1503
|
-
function separate(array, arrayA, arrayB, callback) {
|
|
1504
|
-
array.forEach(function(element, index) {
|
|
1505
|
-
var passed = callback(element, index);
|
|
1506
|
-
passed ? arrayA.push(element) : arrayB.push(element);
|
|
1507
|
-
});
|
|
1508
|
-
}
|
|
1509
|
-
function forwardsFind(array, callback) {
|
|
1510
|
-
var arrayLength = array.length;
|
|
1511
|
-
for (var index = 0; index < arrayLength; index++) {
|
|
1512
|
-
var element = array[index], passed = callback(element, index);
|
|
1513
|
-
if (passed) {
|
|
1514
|
-
return element;
|
|
1515
|
-
}
|
|
1516
|
-
}
|
|
1517
|
-
return false;
|
|
1518
|
-
}
|
|
1519
|
-
function backwardsFind(array, callback) {
|
|
1520
|
-
var arrayLength = array.length;
|
|
1521
|
-
for (var index = arrayLength - 1; index >= 0; index--) {
|
|
1522
|
-
var element = array[index], passed = callback(element, index);
|
|
1523
|
-
if (passed) {
|
|
1524
|
-
return element;
|
|
1525
|
-
}
|
|
1526
|
-
}
|
|
1527
|
-
return false;
|
|
1528
|
-
}
|
|
1529
|
-
function forwardsSome(array, callback) {
|
|
1530
|
-
var arrayLength = array.length;
|
|
1531
|
-
for (var index = 0; index < arrayLength; index++) {
|
|
1532
|
-
var element = array[index], passed = callback(element, index);
|
|
1533
|
-
if (passed) {
|
|
1534
|
-
return true;
|
|
1535
|
-
}
|
|
1536
|
-
}
|
|
1537
|
-
return false;
|
|
1538
|
-
}
|
|
1539
|
-
function backwardsSome(array, callback) {
|
|
1540
|
-
var arrayLength = array.length;
|
|
1541
|
-
for (var index = arrayLength - 1; index >= 0; index--) {
|
|
1542
|
-
var element = array[index], passed = callback(element, index);
|
|
1543
|
-
if (passed) {
|
|
1544
|
-
return true;
|
|
1545
|
-
}
|
|
1546
|
-
}
|
|
1547
|
-
return false;
|
|
1548
|
-
}
|
|
1549
|
-
function forwardsEvery(array, callback) {
|
|
1550
|
-
var arrayLength = array.length;
|
|
1551
|
-
for (var index = 0; index < arrayLength; index++) {
|
|
1552
|
-
var element = array[index], passed = callback(element, index);
|
|
1553
|
-
if (!passed) {
|
|
1554
|
-
return false;
|
|
1555
|
-
}
|
|
1556
|
-
}
|
|
1557
|
-
return true;
|
|
1558
|
-
}
|
|
1559
|
-
function backwardsEvery(array, callback) {
|
|
1560
|
-
var arrayLength = array.length;
|
|
1561
|
-
for (var index = arrayLength - 1; index >= 0; index--) {
|
|
1562
|
-
var element = array[index], passed = callback(element, index);
|
|
1563
|
-
if (!passed) {
|
|
1564
|
-
return false;
|
|
1565
|
-
}
|
|
1566
|
-
}
|
|
1567
|
-
return true;
|
|
1568
|
-
}
|
|
1569
|
-
function forwardsReduce(array, callback, initialValue) {
|
|
1570
|
-
var value = initialValue;
|
|
1571
|
-
var arrayLength = array.length;
|
|
1572
|
-
for (var index = 0; index < arrayLength; index++) {
|
|
1573
|
-
var element = array[index];
|
|
1574
|
-
value = callback(value, element, index);
|
|
1575
|
-
}
|
|
1576
|
-
return value;
|
|
1577
|
-
}
|
|
1578
|
-
function backwardsReduce(array, callback, initialValue) {
|
|
1579
|
-
var value = initialValue;
|
|
1580
|
-
var arrayLength = array.length;
|
|
1581
|
-
for (var index = arrayLength - 1; index >= 0; index--) {
|
|
1582
|
-
var element = array[index];
|
|
1583
|
-
value = callback(value, element, index);
|
|
1584
|
-
}
|
|
1585
|
-
return value;
|
|
1586
|
-
}
|
|
1587
|
-
function forwardsForEach(array, callback) {
|
|
1588
|
-
var arrayLength = array.length;
|
|
1589
|
-
for (var index = 0; index < arrayLength; index++) {
|
|
1590
|
-
var element = array[index];
|
|
1591
|
-
callback(element, index);
|
|
1592
|
-
}
|
|
1593
|
-
}
|
|
1594
|
-
function backwardsForEach(array, callback) {
|
|
1595
|
-
var arrayLength = array.length;
|
|
1596
|
-
for (var index = arrayLength - 1; index >= 0; index--) {
|
|
1597
|
-
var element = array[index];
|
|
1598
|
-
callback(element, index);
|
|
1599
|
-
}
|
|
1600
|
-
}
|
|
1601
|
-
function forwardsFindIndex(array, callback) {
|
|
1602
|
-
var arrayLength = array.length;
|
|
1603
|
-
for (var index = 0; index < arrayLength; index++) {
|
|
1604
|
-
var element = array[index], passed = callback(element, index);
|
|
1605
|
-
if (passed) {
|
|
1606
|
-
return index;
|
|
1607
|
-
}
|
|
1608
|
-
}
|
|
1609
|
-
return -1;
|
|
1610
|
-
}
|
|
1611
|
-
function backwardsFindIndex(array, callback) {
|
|
1612
|
-
var arrayLength = array.length;
|
|
1613
|
-
for (var index = arrayLength - 1; index >= 0; index--) {
|
|
1614
|
-
var element = array[index], passed = callback(element, index);
|
|
1615
|
-
if (passed) {
|
|
1616
|
-
return index;
|
|
1617
|
-
}
|
|
1618
|
-
}
|
|
1619
|
-
return -1;
|
|
1620
|
-
}
|
|
1621
|
-
var _default = {
|
|
1622
|
-
first,
|
|
1623
|
-
second,
|
|
1624
|
-
third,
|
|
1625
|
-
fourth,
|
|
1626
|
-
fifth,
|
|
1627
|
-
sixth,
|
|
1628
|
-
seventh,
|
|
1629
|
-
eighth,
|
|
1630
|
-
ninth,
|
|
1631
|
-
firstLast,
|
|
1632
|
-
secondLast,
|
|
1633
|
-
thirdLast,
|
|
1634
|
-
fourthLast,
|
|
1635
|
-
fifthLast,
|
|
1636
|
-
sixthLast,
|
|
1637
|
-
seventhLast,
|
|
1638
|
-
eighthLast,
|
|
1639
|
-
ninthLast,
|
|
1640
|
-
last,
|
|
1641
|
-
head,
|
|
1642
|
-
tail,
|
|
1643
|
-
back,
|
|
1644
|
-
front,
|
|
1645
|
-
push,
|
|
1646
|
-
unshift,
|
|
1647
|
-
concat,
|
|
1648
|
-
clear,
|
|
1649
|
-
copy,
|
|
1650
|
-
merge,
|
|
1651
|
-
match,
|
|
1652
|
-
compare,
|
|
1653
|
-
correlate,
|
|
1654
|
-
resolve,
|
|
1655
|
-
find,
|
|
1656
|
-
replace,
|
|
1657
|
-
splice,
|
|
1658
|
-
filter,
|
|
1659
|
-
prune,
|
|
1660
|
-
extract,
|
|
1661
|
-
patch,
|
|
1662
|
-
compress,
|
|
1663
|
-
combine,
|
|
1664
|
-
reverse,
|
|
1665
|
-
augment,
|
|
1666
|
-
separate,
|
|
1667
|
-
forwardsFind,
|
|
1668
|
-
backwardsFind,
|
|
1669
|
-
forwardsSome,
|
|
1670
|
-
backwardsSome,
|
|
1671
|
-
forwardsEvery,
|
|
1672
|
-
backwardsEvery,
|
|
1673
|
-
forwardsReduce,
|
|
1674
|
-
backwardsReduce,
|
|
1675
|
-
forwardsForEach,
|
|
1676
|
-
backwardsForEach,
|
|
1677
|
-
forwardsFindIndex,
|
|
1678
|
-
backwardsFindIndex
|
|
1679
|
-
};
|
|
1680
|
-
});
|
|
1681
|
-
|
|
1682
|
-
// node_modules/necessary/lib/utilities/path.js
|
|
1683
|
-
var require_path = __commonJS((exports) => {
|
|
1684
|
-
"use strict";
|
|
1685
|
-
Object.defineProperty(exports, "__esModule", {
|
|
1686
|
-
value: true
|
|
1687
|
-
});
|
|
1688
|
-
function _export(target, all) {
|
|
1689
|
-
for (var name in all)
|
|
1690
|
-
Object.defineProperty(target, name, {
|
|
1691
|
-
enumerable: true,
|
|
1692
|
-
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
1693
|
-
});
|
|
1694
|
-
}
|
|
1695
|
-
_export(exports, {
|
|
1696
|
-
get bottommostNameFromPath() {
|
|
1697
|
-
return bottommostNameFromPath;
|
|
1698
|
-
},
|
|
1699
|
-
get combinePaths() {
|
|
1700
|
-
return combinePaths;
|
|
1701
|
-
},
|
|
1702
|
-
get concatenatePaths() {
|
|
1703
|
-
return concatenatePaths;
|
|
1704
|
-
},
|
|
1705
|
-
get default() {
|
|
1706
|
-
return _default;
|
|
1707
|
-
},
|
|
1708
|
-
get isPathAbsolutePath() {
|
|
1709
|
-
return isPathAbsolutePath;
|
|
1710
|
-
},
|
|
1711
|
-
get isPathName() {
|
|
1712
|
-
return isPathName;
|
|
1713
|
-
},
|
|
1714
|
-
get isPathRelativePath() {
|
|
1715
|
-
return isPathRelativePath;
|
|
1716
|
-
},
|
|
1717
|
-
get isPathTopmostName() {
|
|
1718
|
-
return isPathTopmostName;
|
|
1719
|
-
},
|
|
1720
|
-
get isTopmostNameInAbsolutePath() {
|
|
1721
|
-
return isTopmostNameInAbsolutePath;
|
|
1722
|
-
},
|
|
1723
|
-
get pathWithoutBottommostNameFromPath() {
|
|
1724
|
-
return pathWithoutBottommostNameFromPath;
|
|
1725
|
-
},
|
|
1726
|
-
get pathWithoutTopmostDirectoryNameFromPath() {
|
|
1727
|
-
return pathWithoutTopmostDirectoryNameFromPath;
|
|
1728
|
-
},
|
|
1729
|
-
get topmostDirectoryNameFromPath() {
|
|
1730
|
-
return topmostDirectoryNameFromPath;
|
|
1731
|
-
},
|
|
1732
|
-
get topmostDirectoryPathFromPath() {
|
|
1733
|
-
return topmostDirectoryPathFromPath;
|
|
1734
|
-
}
|
|
1735
|
-
});
|
|
1736
|
-
var _constants = require_constants();
|
|
1737
|
-
var _array = require_array();
|
|
1738
|
-
function _array_like_to_array(arr, len) {
|
|
1739
|
-
if (len == null || len > arr.length)
|
|
1740
|
-
len = arr.length;
|
|
1741
|
-
for (var i = 0, arr2 = new Array(len); i < len; i++)
|
|
1742
|
-
arr2[i] = arr[i];
|
|
1743
|
-
return arr2;
|
|
1744
|
-
}
|
|
1745
|
-
function _array_without_holes(arr) {
|
|
1746
|
-
if (Array.isArray(arr))
|
|
1747
|
-
return _array_like_to_array(arr);
|
|
1748
|
-
}
|
|
1749
|
-
function _iterable_to_array(iter) {
|
|
1750
|
-
if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null)
|
|
1751
|
-
return Array.from(iter);
|
|
1752
|
-
}
|
|
1753
|
-
function _non_iterable_spread() {
|
|
1754
|
-
throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
1755
|
-
}
|
|
1756
|
-
function _to_consumable_array(arr) {
|
|
1757
|
-
return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();
|
|
1758
|
-
}
|
|
1759
|
-
function _unsupported_iterable_to_array(o, minLen) {
|
|
1760
|
-
if (!o)
|
|
1761
|
-
return;
|
|
1762
|
-
if (typeof o === "string")
|
|
1763
|
-
return _array_like_to_array(o, minLen);
|
|
1764
|
-
var n = Object.prototype.toString.call(o).slice(8, -1);
|
|
1765
|
-
if (n === "Object" && o.constructor)
|
|
1766
|
-
n = o.constructor.name;
|
|
1767
|
-
if (n === "Map" || n === "Set")
|
|
1768
|
-
return Array.from(n);
|
|
1769
|
-
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))
|
|
1770
|
-
return _array_like_to_array(o, minLen);
|
|
1771
|
-
}
|
|
1772
|
-
function isPathName(path) {
|
|
1773
|
-
path = path.replace(/^\//, _constants.EMPTY_STRING).replace(/\/$/, _constants.EMPTY_STRING);
|
|
1774
|
-
var pathName = /\//.test(path) === false;
|
|
1775
|
-
return pathName;
|
|
1776
|
-
}
|
|
1777
|
-
function isPathTopmostName(path) {
|
|
1778
|
-
var pathName = isPathName(path), pathAbsolutePath = isPathAbsolutePath(path), pathTopmostName = pathName && pathAbsolutePath;
|
|
1779
|
-
return pathTopmostName;
|
|
1780
|
-
}
|
|
1781
|
-
function isPathRelativePath(path) {
|
|
1782
|
-
var pathRelativePath = !/^\//.test(path);
|
|
1783
|
-
return pathRelativePath;
|
|
1784
|
-
}
|
|
1785
|
-
function isPathAbsolutePath(path) {
|
|
1786
|
-
var pathAbsolutePath = /^\//.test(path);
|
|
1787
|
-
return pathAbsolutePath;
|
|
1788
|
-
}
|
|
1789
|
-
function isTopmostNameInAbsolutePath(topmostName, absolutePath) {
|
|
1790
|
-
var regExp = new RegExp("^".concat(topmostName, "(?:\\/.+)?$")), topmostNameInAbsolutePath = regExp.test(absolutePath);
|
|
1791
|
-
return topmostNameInAbsolutePath;
|
|
1792
|
-
}
|
|
1793
|
-
function combinePaths(path, relativePath) {
|
|
1794
|
-
var combinedPath = null;
|
|
1795
|
-
var pathNames = path.split(/\//), relativePathNames = relativePath.split(/\//);
|
|
1796
|
-
var lastPathName, firstRelativePathName = (0, _array.first)(relativePathNames);
|
|
1797
|
-
if (firstRelativePathName === ".") {
|
|
1798
|
-
relativePathNames.shift();
|
|
1799
|
-
}
|
|
1800
|
-
firstRelativePathName = (0, _array.first)(relativePathNames);
|
|
1801
|
-
lastPathName = (0, _array.last)(pathNames);
|
|
1802
|
-
while (firstRelativePathName === ".." && lastPathName !== void 0) {
|
|
1803
|
-
relativePathNames.shift();
|
|
1804
|
-
pathNames.pop();
|
|
1805
|
-
firstRelativePathName = (0, _array.first)(relativePathNames);
|
|
1806
|
-
lastPathName = (0, _array.last)(pathNames);
|
|
1807
|
-
}
|
|
1808
|
-
if (lastPathName !== void 0) {
|
|
1809
|
-
var combinedPathNames = [].concat(pathNames).concat(relativePathNames);
|
|
1810
|
-
combinedPath = combinedPathNames.join("/");
|
|
1811
|
-
}
|
|
1812
|
-
return combinedPath;
|
|
1813
|
-
}
|
|
1814
|
-
function concatenatePaths(path, relativePath) {
|
|
1815
|
-
for (var _len = arguments.length, remainingArguments = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
|
|
1816
|
-
remainingArguments[_key - 2] = arguments[_key];
|
|
1817
|
-
}
|
|
1818
|
-
var concatenatedPath;
|
|
1819
|
-
path = path.replace(/\/$/, _constants.EMPTY_STRING);
|
|
1820
|
-
concatenatedPath = "".concat(path, "/").concat(relativePath);
|
|
1821
|
-
var remainingAArgumentsLength = remainingArguments.length;
|
|
1822
|
-
if (remainingAArgumentsLength > 0) {
|
|
1823
|
-
var _$path = concatenatedPath, _$relativePath = remainingArguments.shift();
|
|
1824
|
-
concatenatedPath = concatenatePaths.apply(void 0, [
|
|
1825
|
-
_$path,
|
|
1826
|
-
_$relativePath
|
|
1827
|
-
].concat(_to_consumable_array(remainingArguments)));
|
|
1828
|
-
}
|
|
1829
|
-
return concatenatedPath;
|
|
1830
|
-
}
|
|
1831
|
-
function bottommostNameFromPath(path) {
|
|
1832
|
-
var bottommostName = null;
|
|
1833
|
-
var matches = path.match(/^.*\/([^\/]+\/?)$/);
|
|
1834
|
-
if (matches !== null) {
|
|
1835
|
-
var secondMatch = (0, _array.second)(matches);
|
|
1836
|
-
bottommostName = secondMatch;
|
|
1837
|
-
}
|
|
1838
|
-
return bottommostName;
|
|
1839
|
-
}
|
|
1840
|
-
function topmostDirectoryPathFromPath(path) {
|
|
1841
|
-
var matches = path.match(/^(.+)\/[^\/]+\/?$/), secondMatch = (0, _array.second)(matches), topmostDirectoryPath = secondMatch;
|
|
1842
|
-
return topmostDirectoryPath;
|
|
1843
|
-
}
|
|
1844
|
-
function topmostDirectoryNameFromPath(path) {
|
|
1845
|
-
var topmostDirectoryName = null;
|
|
1846
|
-
var matches = path.match(/^([^\/]+)\/.+$/);
|
|
1847
|
-
if (matches !== null) {
|
|
1848
|
-
var secondMatch = (0, _array.second)(matches);
|
|
1849
|
-
topmostDirectoryName = secondMatch;
|
|
1850
|
-
}
|
|
1851
|
-
return topmostDirectoryName;
|
|
1852
|
-
}
|
|
1853
|
-
function pathWithoutBottommostNameFromPath(path) {
|
|
1854
|
-
var pathWithoutBottommostName = null;
|
|
1855
|
-
var matches = path.match(/^(.*)\/[^\/]+\/?$/);
|
|
1856
|
-
if (matches !== null) {
|
|
1857
|
-
var secondMatch = (0, _array.second)(matches);
|
|
1858
|
-
pathWithoutBottommostName = secondMatch;
|
|
1859
|
-
}
|
|
1860
|
-
return pathWithoutBottommostName;
|
|
1861
|
-
}
|
|
1862
|
-
function pathWithoutTopmostDirectoryNameFromPath(path) {
|
|
1863
|
-
var pathWithoutTopmostDirectoryName = null;
|
|
1864
|
-
var matches = path.match(/^[^\/]+\/(.+)$/);
|
|
1865
|
-
if (matches !== null) {
|
|
1866
|
-
var secondMatch = (0, _array.second)(matches);
|
|
1867
|
-
pathWithoutTopmostDirectoryName = secondMatch;
|
|
1868
|
-
}
|
|
1869
|
-
return pathWithoutTopmostDirectoryName;
|
|
1870
|
-
}
|
|
1871
|
-
var _default = {
|
|
1872
|
-
isPathName,
|
|
1873
|
-
isPathTopmostName,
|
|
1874
|
-
isPathRelativePath,
|
|
1875
|
-
isPathAbsolutePath,
|
|
1876
|
-
isTopmostNameInAbsolutePath,
|
|
1877
|
-
combinePaths,
|
|
1878
|
-
concatenatePaths,
|
|
1879
|
-
bottommostNameFromPath,
|
|
1880
|
-
topmostDirectoryPathFromPath,
|
|
1881
|
-
topmostDirectoryNameFromPath,
|
|
1882
|
-
pathWithoutBottommostNameFromPath,
|
|
1883
|
-
pathWithoutTopmostDirectoryNameFromPath
|
|
1884
|
-
};
|
|
1885
|
-
});
|
|
1886
|
-
|
|
1887
|
-
// node_modules/necessary/lib/utilities/http.js
|
|
1888
|
-
var require_http = __commonJS((exports) => {
|
|
1889
|
-
"use strict";
|
|
1890
|
-
Object.defineProperty(exports, "__esModule", {
|
|
1891
|
-
value: true
|
|
1892
|
-
});
|
|
1893
|
-
function _export(target, all) {
|
|
1894
|
-
for (var name in all)
|
|
1895
|
-
Object.defineProperty(target, name, {
|
|
1896
|
-
enumerable: true,
|
|
1897
|
-
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
1898
|
-
});
|
|
1899
|
-
}
|
|
1900
|
-
_export(exports, {
|
|
1901
|
-
get default() {
|
|
1902
|
-
return _default;
|
|
1903
|
-
},
|
|
1904
|
-
get hostnameFromHost() {
|
|
1905
|
-
return hostnameFromHost;
|
|
1906
|
-
},
|
|
1907
|
-
get overwrite() {
|
|
1908
|
-
return overwrite;
|
|
1909
|
-
},
|
|
1910
|
-
get portFromHost() {
|
|
1911
|
-
return portFromHost;
|
|
1912
|
-
},
|
|
1913
|
-
get queryStringFromQuery() {
|
|
1914
|
-
return queryStringFromQuery;
|
|
1915
|
-
},
|
|
1916
|
-
get secureFromHost() {
|
|
1917
|
-
return secureFromHost;
|
|
1918
|
-
},
|
|
1919
|
-
get underwrite() {
|
|
1920
|
-
return underwrite;
|
|
1921
|
-
},
|
|
1922
|
-
get urlFromHostURIAndQuery() {
|
|
1923
|
-
return urlFromHostURIAndQuery;
|
|
1924
|
-
}
|
|
1925
|
-
});
|
|
1926
|
-
var _array = require_array();
|
|
1927
|
-
var _constants = require_constants();
|
|
1928
|
-
var _characters = require_characters();
|
|
1929
|
-
function overwrite(headers, name, value) {
|
|
1930
|
-
var lowerCaseName = name.toLowerCase(), existingNames = Object.getOwnPropertyNames(headers), existingName = existingNames.find(function(existingName2) {
|
|
1931
|
-
var existingLowerCaseName = existingName2.toLowerCase();
|
|
1932
|
-
if (existingLowerCaseName === lowerCaseName) {
|
|
1933
|
-
return true;
|
|
1934
|
-
}
|
|
1935
|
-
}) || null;
|
|
1936
|
-
if (existingName !== null) {
|
|
1937
|
-
headers[existingName] = value;
|
|
1938
|
-
}
|
|
1939
|
-
}
|
|
1940
|
-
function underwrite(headers, name, value) {
|
|
1941
|
-
var lowerCaseName = name.toLowerCase(), existingNames = Object.getOwnPropertyNames(headers), existingName = existingNames.find(function(existingName2) {
|
|
1942
|
-
var existingLowerCaseName = existingName2.toLowerCase();
|
|
1943
|
-
if (existingLowerCaseName === lowerCaseName) {
|
|
1944
|
-
return true;
|
|
1945
|
-
}
|
|
1946
|
-
}) || null;
|
|
1947
|
-
if (existingName === null) {
|
|
1948
|
-
headers[name] = value;
|
|
1949
|
-
}
|
|
1950
|
-
}
|
|
1951
|
-
function portFromHost(host) {
|
|
1952
|
-
var port;
|
|
1953
|
-
var matches = host.match(/^https?:\/\/([^\/]+)/), secondMatch = (0, _array.second)(matches), index = secondMatch.indexOf(_characters.COLON_CHARACTER);
|
|
1954
|
-
if (index === -1) {
|
|
1955
|
-
var secure = secureFromHost(host);
|
|
1956
|
-
port = secure ? 443 : 80;
|
|
1957
|
-
} else {
|
|
1958
|
-
var start = index + 1, portString = secondMatch.substring(start);
|
|
1959
|
-
port = Number(portString);
|
|
1960
|
-
}
|
|
1961
|
-
return port;
|
|
1962
|
-
}
|
|
1963
|
-
function secureFromHost(host) {
|
|
1964
|
-
var secure = /^https:\/\//.test(host);
|
|
1965
|
-
return secure;
|
|
1966
|
-
}
|
|
1967
|
-
function hostnameFromHost(host) {
|
|
1968
|
-
var matches = host.match(/^https?:\/\/([^:\/]+)/), secondMatch = (0, _array.second)(matches), hostname = secondMatch;
|
|
1969
|
-
return hostname;
|
|
1970
|
-
}
|
|
1971
|
-
function queryStringFromQuery(query) {
|
|
1972
|
-
var names = Object.keys(query), namesLength = names.length, lastIndex = namesLength - 1, queryString = names.reduce(function(queryString2, name, index) {
|
|
1973
|
-
var value = query[name], encodedName = encodeURIComponent(name), encodedValue = encodeURIComponent(value), ampersandOrNothing = index !== lastIndex ? _characters.AMPERSAND_CHARACTER : _constants.EMPTY_STRING;
|
|
1974
|
-
queryString2 += "".concat(encodedName, "=").concat(encodedValue).concat(ampersandOrNothing);
|
|
1975
|
-
return queryString2;
|
|
1976
|
-
}, _constants.EMPTY_STRING);
|
|
1977
|
-
return queryString;
|
|
1978
|
-
}
|
|
1979
|
-
function urlFromHostURIAndQuery(host, uri, query) {
|
|
1980
|
-
var queryString = queryStringFromQuery(query), url = queryString === _constants.EMPTY_STRING ? "".concat(host).concat(uri) : "".concat(host).concat(uri, "?").concat(queryString);
|
|
1981
|
-
return url;
|
|
1982
|
-
}
|
|
1983
|
-
var _default = {
|
|
1984
|
-
overwrite,
|
|
1985
|
-
underwrite,
|
|
1986
|
-
portFromHost,
|
|
1987
|
-
secureFromHost,
|
|
1988
|
-
hostnameFromHost,
|
|
1989
|
-
queryStringFromQuery,
|
|
1990
|
-
urlFromHostURIAndQuery
|
|
1991
|
-
};
|
|
1992
|
-
});
|
|
1993
|
-
|
|
1994
|
-
// node_modules/necessary/lib/utilities/string.js
|
|
1995
|
-
var require_string = __commonJS((exports) => {
|
|
1996
|
-
"use strict";
|
|
1997
|
-
Object.defineProperty(exports, "__esModule", {
|
|
1998
|
-
value: true
|
|
1999
|
-
});
|
|
2000
|
-
function _export(target, all) {
|
|
2001
|
-
for (var name in all)
|
|
2002
|
-
Object.defineProperty(target, name, {
|
|
2003
|
-
enumerable: true,
|
|
2004
|
-
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
2005
|
-
});
|
|
2006
|
-
}
|
|
2007
|
-
_export(exports, {
|
|
2008
|
-
get default() {
|
|
2009
|
-
return _default;
|
|
2010
|
-
},
|
|
2011
|
-
get indexOf() {
|
|
2012
|
-
return indexOf;
|
|
2013
|
-
},
|
|
2014
|
-
get strcmp() {
|
|
2015
|
-
return strcmp;
|
|
2016
|
-
},
|
|
2017
|
-
get strlen() {
|
|
2018
|
-
return strlen;
|
|
2019
|
-
},
|
|
2020
|
-
get substring() {
|
|
2021
|
-
return substring;
|
|
2022
|
-
}
|
|
2023
|
-
});
|
|
2024
|
-
var _constants = require_constants();
|
|
2025
|
-
function strlen(string) {
|
|
2026
|
-
var length = 0;
|
|
2027
|
-
var iterator = string[Symbol.iterator]();
|
|
2028
|
-
var character = iterator.next();
|
|
2029
|
-
while (!character.done) {
|
|
2030
|
-
character = iterator.next();
|
|
2031
|
-
length++;
|
|
2032
|
-
}
|
|
2033
|
-
return length;
|
|
2034
|
-
}
|
|
2035
|
-
function strcmp(stringA, stringB) {
|
|
2036
|
-
var difference;
|
|
2037
|
-
var iteratorA = stringA[Symbol.iterator](), iteratorB = stringB[Symbol.iterator]();
|
|
2038
|
-
var characterA = iteratorA.next(), characterB = iteratorB.next(), codePointA, codePointB;
|
|
2039
|
-
while (true) {
|
|
2040
|
-
codePointA = characterA.value ? characterA.value.codePointAt(0) : 0;
|
|
2041
|
-
codePointB = characterB.value ? characterB.value.codePointAt(0) : 0;
|
|
2042
|
-
difference = codePointB - codePointA;
|
|
2043
|
-
if (difference !== 0) {
|
|
2044
|
-
break;
|
|
2045
|
-
}
|
|
2046
|
-
if (characterA.done || characterB.done) {
|
|
2047
|
-
break;
|
|
2048
|
-
}
|
|
2049
|
-
characterA = iteratorA.next();
|
|
2050
|
-
characterB = iteratorB.next();
|
|
2051
|
-
}
|
|
2052
|
-
return difference;
|
|
2053
|
-
}
|
|
2054
|
-
function indexOf(string, searchString) {
|
|
2055
|
-
var index = -1, found = false;
|
|
2056
|
-
var searchStringLength = strlen(searchString);
|
|
2057
|
-
if (searchStringLength > 0) {
|
|
2058
|
-
var character;
|
|
2059
|
-
var iterator = string[Symbol.iterator](), searchIterator = searchString[Symbol.iterator](), searchCharacter = searchIterator.next();
|
|
2060
|
-
character = iterator.next();
|
|
2061
|
-
index++;
|
|
2062
|
-
while (!character.done) {
|
|
2063
|
-
if (character.value === searchCharacter.value) {
|
|
2064
|
-
var start = index, end = start + searchStringLength, subString = substring(string, start, end), difference = strcmp(subString, searchString);
|
|
2065
|
-
if (difference === 0) {
|
|
2066
|
-
found = true;
|
|
2067
|
-
break;
|
|
2068
|
-
}
|
|
2069
|
-
}
|
|
2070
|
-
character = iterator.next();
|
|
2071
|
-
index++;
|
|
2072
|
-
}
|
|
2073
|
-
}
|
|
2074
|
-
if (!found) {
|
|
2075
|
-
index = -1;
|
|
2076
|
-
}
|
|
2077
|
-
return index;
|
|
2078
|
-
}
|
|
2079
|
-
function substring(string, start) {
|
|
2080
|
-
var end = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : Infinity;
|
|
2081
|
-
var index = 0;
|
|
2082
|
-
var iterator = string[Symbol.iterator](), characters = [];
|
|
2083
|
-
var character = iterator.next();
|
|
2084
|
-
while (!character.done) {
|
|
2085
|
-
if (index === end) {
|
|
2086
|
-
break;
|
|
2087
|
-
}
|
|
2088
|
-
if (index >= start) {
|
|
2089
|
-
characters.push(character.value);
|
|
2090
|
-
}
|
|
2091
|
-
index++;
|
|
2092
|
-
character = iterator.next();
|
|
2093
|
-
}
|
|
2094
|
-
var _$substring = characters.join(_constants.EMPTY_STRING);
|
|
2095
|
-
return _$substring;
|
|
2096
|
-
}
|
|
2097
|
-
var _default = {
|
|
2098
|
-
strcmp,
|
|
2099
|
-
strlen,
|
|
2100
|
-
indexOf,
|
|
2101
|
-
substring
|
|
2102
|
-
};
|
|
2103
|
-
});
|
|
2104
|
-
|
|
2105
|
-
// node_modules/necessary/lib/utilities/version.js
|
|
2106
|
-
var require_version = __commonJS((exports) => {
|
|
2107
|
-
"use strict";
|
|
2108
|
-
Object.defineProperty(exports, "__esModule", {
|
|
2109
|
-
value: true
|
|
2110
|
-
});
|
|
2111
|
-
function _export(target, all) {
|
|
2112
|
-
for (var name in all)
|
|
2113
|
-
Object.defineProperty(target, name, {
|
|
2114
|
-
enumerable: true,
|
|
2115
|
-
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
2116
|
-
});
|
|
2117
|
-
}
|
|
2118
|
-
_export(exports, {
|
|
2119
|
-
get default() {
|
|
2120
|
-
return _default;
|
|
2121
|
-
},
|
|
2122
|
-
get migrate() {
|
|
2123
|
-
return migrate;
|
|
2124
|
-
}
|
|
2125
|
-
});
|
|
2126
|
-
function migrate(json, migrationMap, latestVersion) {
|
|
2127
|
-
var version = json.version;
|
|
2128
|
-
while (version !== latestVersion) {
|
|
2129
|
-
var migrateFunction = migrationMap[version];
|
|
2130
|
-
json = migrateFunction(json);
|
|
2131
|
-
version = json.version;
|
|
2132
|
-
}
|
|
2133
|
-
return json;
|
|
2134
|
-
}
|
|
2135
|
-
var _default = {
|
|
2136
|
-
migrate
|
|
2137
|
-
};
|
|
2138
|
-
});
|
|
2139
|
-
|
|
2140
|
-
// node_modules/necessary/lib/utilities/asynchronous.js
|
|
2141
|
-
var require_asynchronous = __commonJS((exports) => {
|
|
2142
|
-
"use strict";
|
|
2143
|
-
Object.defineProperty(exports, "__esModule", {
|
|
2144
|
-
value: true
|
|
2145
|
-
});
|
|
2146
|
-
function _export(target, all) {
|
|
2147
|
-
for (var name in all)
|
|
2148
|
-
Object.defineProperty(target, name, {
|
|
2149
|
-
enumerable: true,
|
|
2150
|
-
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
2151
|
-
});
|
|
2152
|
-
}
|
|
2153
|
-
_export(exports, {
|
|
2154
|
-
get backwardsForEach() {
|
|
2155
|
-
return backwardsForEach;
|
|
2156
|
-
},
|
|
2157
|
-
get default() {
|
|
2158
|
-
return _default;
|
|
2159
|
-
},
|
|
2160
|
-
get eventually() {
|
|
2161
|
-
return eventually;
|
|
2162
|
-
},
|
|
2163
|
-
get forEach() {
|
|
2164
|
-
return forEach;
|
|
2165
|
-
},
|
|
2166
|
-
get forwardsForEach() {
|
|
2167
|
-
return forwardsForEach;
|
|
2168
|
-
},
|
|
2169
|
-
get repeatedly() {
|
|
2170
|
-
return repeatedly;
|
|
2171
|
-
},
|
|
2172
|
-
get sequence() {
|
|
2173
|
-
return sequence;
|
|
2174
|
-
},
|
|
2175
|
-
get whilst() {
|
|
2176
|
-
return whilst;
|
|
2177
|
-
}
|
|
2178
|
-
});
|
|
2179
|
-
function whilst(operation, done, context) {
|
|
2180
|
-
var count = -1;
|
|
2181
|
-
function next() {
|
|
2182
|
-
count++;
|
|
2183
|
-
var index = count;
|
|
2184
|
-
operation(next, done, context, index);
|
|
2185
|
-
}
|
|
2186
|
-
next();
|
|
2187
|
-
}
|
|
2188
|
-
function forEach(array, operation, done, context) {
|
|
2189
|
-
var length = array.length;
|
|
2190
|
-
var count = -1;
|
|
2191
|
-
function next() {
|
|
2192
|
-
count++;
|
|
2193
|
-
var terminate = count === length;
|
|
2194
|
-
if (terminate) {
|
|
2195
|
-
done();
|
|
2196
|
-
} else {
|
|
2197
|
-
var index = count, element = array[index];
|
|
2198
|
-
operation(element, next, done, context, index);
|
|
2199
|
-
}
|
|
2200
|
-
}
|
|
2201
|
-
next();
|
|
2202
|
-
}
|
|
2203
|
-
function sequence(operations, done, context) {
|
|
2204
|
-
var length = operations.length;
|
|
2205
|
-
var count = -1;
|
|
2206
|
-
function next() {
|
|
2207
|
-
count++;
|
|
2208
|
-
var terminate = count === length;
|
|
2209
|
-
if (terminate) {
|
|
2210
|
-
done();
|
|
2211
|
-
} else {
|
|
2212
|
-
var index = count, operation = operations[index];
|
|
2213
|
-
operation(next, done, context, index);
|
|
2214
|
-
}
|
|
2215
|
-
}
|
|
2216
|
-
next();
|
|
2217
|
-
}
|
|
2218
|
-
function eventually(operations, done, context) {
|
|
2219
|
-
var length = operations.length;
|
|
2220
|
-
if (length === 0) {
|
|
2221
|
-
done();
|
|
2222
|
-
return;
|
|
2223
|
-
}
|
|
2224
|
-
var count = 0;
|
|
2225
|
-
function next() {
|
|
2226
|
-
count++;
|
|
2227
|
-
var terminate = count === length;
|
|
2228
|
-
if (terminate) {
|
|
2229
|
-
done();
|
|
2230
|
-
}
|
|
2231
|
-
}
|
|
2232
|
-
operations.forEach(function(operation, index) {
|
|
2233
|
-
operation(next, done, context, index);
|
|
2234
|
-
});
|
|
2235
|
-
}
|
|
2236
|
-
function repeatedly(operation, length, done, context) {
|
|
2237
|
-
if (length === 0) {
|
|
2238
|
-
done();
|
|
2239
|
-
return;
|
|
2240
|
-
}
|
|
2241
|
-
var count = 0;
|
|
2242
|
-
function next() {
|
|
2243
|
-
count++;
|
|
2244
|
-
var terminate = count === length;
|
|
2245
|
-
if (terminate) {
|
|
2246
|
-
done();
|
|
2247
|
-
}
|
|
2248
|
-
}
|
|
2249
|
-
for (var index = 0; index < length; index++) {
|
|
2250
|
-
operation(next, done, context, index);
|
|
2251
|
-
}
|
|
2252
|
-
}
|
|
2253
|
-
function forwardsForEach(array, operation, done, context) {
|
|
2254
|
-
var length = array.length;
|
|
2255
|
-
var count = -1;
|
|
2256
|
-
function next() {
|
|
2257
|
-
count++;
|
|
2258
|
-
var terminate = count === length;
|
|
2259
|
-
if (terminate) {
|
|
2260
|
-
done();
|
|
2261
|
-
} else {
|
|
2262
|
-
var index = count, element = array[index];
|
|
2263
|
-
operation(element, next, done, context, index);
|
|
2264
|
-
}
|
|
2265
|
-
}
|
|
2266
|
-
next();
|
|
2267
|
-
}
|
|
2268
|
-
function backwardsForEach(array, operation, done, context) {
|
|
2269
|
-
var length = array.length;
|
|
2270
|
-
var count = length;
|
|
2271
|
-
function next() {
|
|
2272
|
-
count--;
|
|
2273
|
-
var terminate = count === -1;
|
|
2274
|
-
if (terminate) {
|
|
2275
|
-
done();
|
|
2276
|
-
} else {
|
|
2277
|
-
var index = count, element = array[index];
|
|
2278
|
-
operation(element, next, done, context, index);
|
|
2279
|
-
}
|
|
2280
|
-
}
|
|
2281
|
-
next();
|
|
2282
|
-
}
|
|
2283
|
-
var _default = {
|
|
2284
|
-
whilst,
|
|
2285
|
-
forEach,
|
|
2286
|
-
sequence,
|
|
2287
|
-
eventually,
|
|
2288
|
-
repeatedly,
|
|
2289
|
-
forwardsForEach,
|
|
2290
|
-
backwardsForEach
|
|
2291
|
-
};
|
|
2292
|
-
});
|
|
2293
|
-
|
|
2294
|
-
// node_modules/necessary/lib/utilities/ajax.js
|
|
2295
|
-
var require_ajax = __commonJS((exports) => {
|
|
2296
|
-
"use strict";
|
|
2297
|
-
Object.defineProperty(exports, "__esModule", {
|
|
2298
|
-
value: true
|
|
2299
|
-
});
|
|
2300
|
-
function _export(target, all) {
|
|
2301
|
-
for (var name in all)
|
|
2302
|
-
Object.defineProperty(target, name, {
|
|
2303
|
-
enumerable: true,
|
|
2304
|
-
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
2305
|
-
});
|
|
2306
|
-
}
|
|
2307
|
-
_export(exports, {
|
|
2308
|
-
get default() {
|
|
2309
|
-
return _default;
|
|
2310
|
-
},
|
|
2311
|
-
get get() {
|
|
2312
|
-
return get;
|
|
2313
|
-
},
|
|
2314
|
-
get post() {
|
|
2315
|
-
return post;
|
|
2316
|
-
},
|
|
2317
|
-
get request() {
|
|
2318
|
-
return request;
|
|
2319
|
-
}
|
|
2320
|
-
});
|
|
2321
|
-
var _constants = require_constants();
|
|
2322
|
-
var _methods = require_methods();
|
|
2323
|
-
var _contentTypes = require_contentTypes();
|
|
2324
|
-
var _headers = require_headers();
|
|
2325
|
-
var _http = require_http();
|
|
2326
|
-
function _type_of(obj) {
|
|
2327
|
-
"@swc/helpers - typeof";
|
|
2328
|
-
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
2329
|
-
}
|
|
2330
|
-
function get(host, uri, query, headers, responseType, callback) {
|
|
2331
|
-
if ((typeof headers === "undefined" ? "undefined" : _type_of(headers)) === _constants.FUNCTION) {
|
|
2332
|
-
callback = headers;
|
|
2333
|
-
responseType = null;
|
|
2334
|
-
headers = {};
|
|
2335
|
-
}
|
|
2336
|
-
if ((typeof responseType === "undefined" ? "undefined" : _type_of(responseType)) === _constants.FUNCTION) {
|
|
2337
|
-
callback = responseType;
|
|
2338
|
-
if ((typeof headers === "undefined" ? "undefined" : _type_of(headers)) === _constants.STRING) {
|
|
2339
|
-
responseType = headers;
|
|
2340
|
-
headers = {};
|
|
2341
|
-
} else {
|
|
2342
|
-
responseType = null;
|
|
2343
|
-
}
|
|
2344
|
-
}
|
|
2345
|
-
var method = _methods.GET_METHOD, accept = _contentTypes.APPLICATION_JSON_CONTENT_TYPE, content = null;
|
|
2346
|
-
underwriteAcceptHeader(headers, accept);
|
|
2347
|
-
request(host, uri, query, method, content, headers, responseType, callback);
|
|
2348
|
-
}
|
|
2349
|
-
function post(host, uri, query, content, headers, responseType, callback) {
|
|
2350
|
-
if ((typeof headers === "undefined" ? "undefined" : _type_of(headers)) === _constants.FUNCTION) {
|
|
2351
|
-
callback = headers;
|
|
2352
|
-
responseType = null;
|
|
2353
|
-
headers = {};
|
|
2354
|
-
}
|
|
2355
|
-
if ((typeof responseType === "undefined" ? "undefined" : _type_of(responseType)) === _constants.FUNCTION) {
|
|
2356
|
-
callback = responseType;
|
|
2357
|
-
if ((typeof headers === "undefined" ? "undefined" : _type_of(headers)) === _constants.STRING) {
|
|
2358
|
-
responseType = headers;
|
|
2359
|
-
headers = {};
|
|
2360
|
-
} else {
|
|
2361
|
-
responseType = null;
|
|
2362
|
-
}
|
|
2363
|
-
}
|
|
2364
|
-
var method = _methods.POST_METHOD, accept = _contentTypes.APPLICATION_JSON_CONTENT_TYPE, contentType = _contentTypes.APPLICATION_JSON_CONTENT_TYPE;
|
|
2365
|
-
underwriteAcceptHeader(headers, accept);
|
|
2366
|
-
underwriteContentTypeHeader(headers, contentType);
|
|
2367
|
-
request(host, uri, query, method, content, headers, responseType, callback);
|
|
2368
|
-
}
|
|
2369
|
-
function request(host, uri, query, method, content, headers, responseType, callback) {
|
|
2370
|
-
var url = (0, _http.urlFromHostURIAndQuery)(host, uri, query), accept = headers[_headers.ACCEPT_HEADER] || null, contentType = headers[_headers.CONTENT_TYPE_HEADER] || null, xmlHttpRequest = new XMLHttpRequest();
|
|
2371
|
-
if (contentType === _contentTypes.APPLICATION_JSON_CONTENT_TYPE) {
|
|
2372
|
-
var json = content, jsonString = JSON.stringify(json);
|
|
2373
|
-
content = jsonString;
|
|
2374
|
-
}
|
|
2375
|
-
if (responseType !== null) {
|
|
2376
|
-
Object.assign(xmlHttpRequest, {
|
|
2377
|
-
responseType
|
|
2378
|
-
});
|
|
2379
|
-
}
|
|
2380
|
-
xmlHttpRequest.onreadystatechange = function() {
|
|
2381
|
-
var readyState = xmlHttpRequest.readyState, status = xmlHttpRequest.status, response = xmlHttpRequest.response, statusCode = status;
|
|
2382
|
-
if (readyState == 4) {
|
|
2383
|
-
var _$content = response;
|
|
2384
|
-
if (accept === _contentTypes.APPLICATION_JSON_CONTENT_TYPE) {
|
|
2385
|
-
try {
|
|
2386
|
-
var jsonString2 = _$content, json2 = JSON.parse(jsonString2);
|
|
2387
|
-
_$content = json2;
|
|
2388
|
-
} catch (error) {
|
|
2389
|
-
_$content = null;
|
|
2390
|
-
}
|
|
2391
|
-
}
|
|
2392
|
-
callback(_$content, statusCode);
|
|
2393
|
-
}
|
|
2394
|
-
};
|
|
2395
|
-
xmlHttpRequest.open(method, url);
|
|
2396
|
-
if (accept !== null) {
|
|
2397
|
-
xmlHttpRequest.setRequestHeader(_headers.ACCEPT_HEADER, accept);
|
|
2398
|
-
}
|
|
2399
|
-
if (contentType !== null) {
|
|
2400
|
-
xmlHttpRequest.setRequestHeader(_headers.CONTENT_TYPE_HEADER, contentType);
|
|
2401
|
-
}
|
|
2402
|
-
content !== null ? xmlHttpRequest.send(content) : xmlHttpRequest.send();
|
|
2403
|
-
}
|
|
2404
|
-
var _default = {
|
|
2405
|
-
get,
|
|
2406
|
-
post,
|
|
2407
|
-
request
|
|
2408
|
-
};
|
|
2409
|
-
function underwriteAcceptHeader(headers, accept) {
|
|
2410
|
-
var name = _headers.ACCEPT_HEADER, value = accept;
|
|
2411
|
-
(0, _http.underwrite)(headers, name, value);
|
|
2412
|
-
}
|
|
2413
|
-
function underwriteContentTypeHeader(headers, contentTYpe) {
|
|
2414
|
-
var name = _headers.CONTENT_TYPE_HEADER, value = contentTYpe;
|
|
2415
|
-
(0, _http.underwrite)(headers, name, value);
|
|
2416
|
-
}
|
|
2417
|
-
});
|
|
2418
|
-
|
|
2419
|
-
// node_modules/necessary/lib/browser.js
|
|
2420
|
-
var require_browser = __commonJS((exports) => {
|
|
2421
|
-
"use strict";
|
|
2422
|
-
Object.defineProperty(exports, "__esModule", {
|
|
2423
|
-
value: true
|
|
2424
|
-
});
|
|
2425
|
-
function _export(target, all) {
|
|
2426
|
-
for (var name in all)
|
|
2427
|
-
Object.defineProperty(target, name, {
|
|
2428
|
-
enumerable: true,
|
|
2429
|
-
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
2430
|
-
});
|
|
2431
|
-
}
|
|
2432
|
-
_export(exports, {
|
|
2433
|
-
get ajaxUtilities() {
|
|
2434
|
-
return _ajax.default;
|
|
2435
|
-
},
|
|
2436
|
-
get arrayUtilities() {
|
|
2437
|
-
return _array.default;
|
|
2438
|
-
},
|
|
2439
|
-
get asynchronousUtilities() {
|
|
2440
|
-
return _asynchronous.default;
|
|
2441
|
-
},
|
|
2442
|
-
get characters() {
|
|
2443
|
-
return _characters.default;
|
|
2444
|
-
},
|
|
2445
|
-
get contentTypes() {
|
|
2446
|
-
return _contentTypes.default;
|
|
2447
|
-
},
|
|
2448
|
-
get encodings() {
|
|
2449
|
-
return _encodings.default;
|
|
2450
|
-
},
|
|
2451
|
-
get headers() {
|
|
2452
|
-
return _headers.default;
|
|
2453
|
-
},
|
|
2454
|
-
get httpUtilities() {
|
|
2455
|
-
return _http.default;
|
|
2456
|
-
},
|
|
2457
|
-
get keyCodes() {
|
|
2458
|
-
return _keyCodes.default;
|
|
2459
|
-
},
|
|
2460
|
-
get levels() {
|
|
2461
|
-
return _levels.default;
|
|
2462
|
-
},
|
|
2463
|
-
get methods() {
|
|
2464
|
-
return _methods.default;
|
|
2465
|
-
},
|
|
2466
|
-
get pathUtilities() {
|
|
2467
|
-
return _path.default;
|
|
2468
|
-
},
|
|
2469
|
-
get statusCodes() {
|
|
2470
|
-
return _statusCodes.default;
|
|
2471
|
-
},
|
|
2472
|
-
get statusMessages() {
|
|
2473
|
-
return _statusMessages.default;
|
|
2474
|
-
},
|
|
2475
|
-
get stringUtilities() {
|
|
2476
|
-
return _string.default;
|
|
2477
|
-
},
|
|
2478
|
-
get versionUtilities() {
|
|
2479
|
-
return _version.default;
|
|
2480
|
-
}
|
|
2481
|
-
});
|
|
2482
|
-
var _levels = /* @__PURE__ */ _interop_require_default(require_levels());
|
|
2483
|
-
var _methods = /* @__PURE__ */ _interop_require_default(require_methods());
|
|
2484
|
-
var _headers = /* @__PURE__ */ _interop_require_default(require_headers());
|
|
2485
|
-
var _keyCodes = /* @__PURE__ */ _interop_require_default(require_keyCodes());
|
|
2486
|
-
var _encodings = /* @__PURE__ */ _interop_require_default(require_encodings());
|
|
2487
|
-
var _characters = /* @__PURE__ */ _interop_require_default(require_characters());
|
|
2488
|
-
var _statusCodes = /* @__PURE__ */ _interop_require_default(require_statusCodes());
|
|
2489
|
-
var _contentTypes = /* @__PURE__ */ _interop_require_default(require_contentTypes());
|
|
2490
|
-
var _statusMessages = /* @__PURE__ */ _interop_require_default(require_statusMessages());
|
|
2491
|
-
var _path = /* @__PURE__ */ _interop_require_default(require_path());
|
|
2492
|
-
var _http = /* @__PURE__ */ _interop_require_default(require_http());
|
|
2493
|
-
var _array = /* @__PURE__ */ _interop_require_default(require_array());
|
|
2494
|
-
var _string = /* @__PURE__ */ _interop_require_default(require_string());
|
|
2495
|
-
var _version = /* @__PURE__ */ _interop_require_default(require_version());
|
|
2496
|
-
var _asynchronous = /* @__PURE__ */ _interop_require_default(require_asynchronous());
|
|
2497
|
-
var _ajax = /* @__PURE__ */ _interop_require_default(require_ajax());
|
|
2498
|
-
function _interop_require_default(obj) {
|
|
2499
|
-
return obj && obj.__esModule ? obj : {
|
|
2500
|
-
default: obj
|
|
2501
|
-
};
|
|
2502
|
-
}
|
|
2503
|
-
});
|
|
2504
|
-
|
|
2505
|
-
// lib/utilities/search.js
|
|
2506
|
-
var require_search = __commonJS((exports) => {
|
|
2507
|
-
"use strict";
|
|
2508
|
-
Object.defineProperty(exports, "__esModule", {
|
|
2509
|
-
value: true
|
|
2510
|
-
});
|
|
2511
|
-
function _export(target, all) {
|
|
2512
|
-
for (var name in all)
|
|
2513
|
-
Object.defineProperty(target, name, {
|
|
2514
|
-
enumerable: true,
|
|
2515
|
-
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
2516
|
-
});
|
|
2517
|
-
}
|
|
2518
|
-
_export(exports, {
|
|
2519
|
-
get backwardsDepthFirstSearch() {
|
|
2520
|
-
return backwardsDepthFirstSearch;
|
|
2521
|
-
},
|
|
2522
|
-
get forwardsDepthFirstSearch() {
|
|
2523
|
-
return forwardsDepthFirstSearch;
|
|
2524
|
-
}
|
|
2525
|
-
});
|
|
2526
|
-
function forwardsDepthFirstSearch(vertex, callback, visitedVertexes, predecessorVertexes = []) {
|
|
2527
|
-
let terminate = false;
|
|
2528
|
-
const visitedVertexesIncludesVertex = visitedVertexes.includes(vertex);
|
|
2529
|
-
if (!visitedVertexesIncludesVertex) {
|
|
2530
|
-
const visitedVertex = vertex;
|
|
2531
|
-
visitedVertexes.push(visitedVertex);
|
|
2532
|
-
terminate = callback(vertex, predecessorVertexes);
|
|
2533
|
-
if (!terminate) {
|
|
2534
|
-
const predecessorVertex = vertex;
|
|
2535
|
-
predecessorVertexes = [
|
|
2536
|
-
...predecessorVertexes,
|
|
2537
|
-
predecessorVertex
|
|
2538
|
-
];
|
|
2539
|
-
terminate = vertex.someImmediateSuccessorVertex((immediateSuccessorVertex) => {
|
|
2540
|
-
const vertex2 = immediateSuccessorVertex, vertexIndex = vertex2.getIndex(), predecessorVertexIndex = predecessorVertex.getIndex();
|
|
2541
|
-
if (vertexIndex > predecessorVertexIndex) {
|
|
2542
|
-
const terminate2 = forwardsDepthFirstSearch(vertex2, callback, visitedVertexes, predecessorVertexes);
|
|
2543
|
-
if (terminate2) {
|
|
2544
|
-
return true;
|
|
2545
|
-
}
|
|
2546
|
-
}
|
|
2547
|
-
});
|
|
2548
|
-
}
|
|
2549
|
-
}
|
|
2550
|
-
return terminate;
|
|
2551
|
-
}
|
|
2552
|
-
function backwardsDepthFirstSearch(vertex, callback, visitedVertexes, successorVertexes = []) {
|
|
2553
|
-
let terminate = false;
|
|
2554
|
-
const visitedVertexesIncludesVertex = visitedVertexes.includes(vertex);
|
|
2555
|
-
if (!visitedVertexesIncludesVertex) {
|
|
2556
|
-
const visitedVertex = vertex;
|
|
2557
|
-
visitedVertexes.push(visitedVertex);
|
|
2558
|
-
terminate = callback(vertex, successorVertexes);
|
|
2559
|
-
if (!terminate) {
|
|
2560
|
-
const successorVertex = vertex;
|
|
2561
|
-
successorVertexes = [
|
|
2562
|
-
...successorVertexes,
|
|
2563
|
-
successorVertex
|
|
2564
|
-
];
|
|
2565
|
-
terminate = vertex.someImmediatePredecessorVertex((immediatePredecessorVertex) => {
|
|
2566
|
-
const vertex2 = immediatePredecessorVertex, vertexIndex = vertex2.getIndex(), successorVertexIndex = successorVertex.getIndex();
|
|
2567
|
-
if (vertexIndex < successorVertexIndex) {
|
|
2568
|
-
const terminate2 = backwardsDepthFirstSearch(vertex2, callback, visitedVertexes, successorVertexes);
|
|
2569
|
-
if (terminate2) {
|
|
2570
|
-
return true;
|
|
2571
|
-
}
|
|
2572
|
-
}
|
|
2573
|
-
});
|
|
2574
|
-
}
|
|
2575
|
-
}
|
|
2576
|
-
return terminate;
|
|
2577
|
-
}
|
|
2578
|
-
});
|
|
2579
|
-
|
|
2580
|
-
// lib/vertex.js
|
|
2581
|
-
var require_vertex2 = __commonJS((exports) => {
|
|
2582
|
-
"use strict";
|
|
2583
|
-
Object.defineProperty(exports, "__esModule", {
|
|
2584
|
-
value: true
|
|
2585
|
-
});
|
|
2586
|
-
Object.defineProperty(exports, "default", {
|
|
2587
|
-
enumerable: true,
|
|
2588
|
-
get: function() {
|
|
2589
|
-
return Vertex;
|
|
2590
|
-
}
|
|
2591
|
-
});
|
|
2592
|
-
var _necessary = require_browser();
|
|
2593
|
-
var _vertex = require_vertex();
|
|
2594
|
-
var _search = require_search();
|
|
2595
|
-
var {last, tail} = _necessary.arrayUtilities;
|
|
2596
|
-
var Vertex = class {
|
|
2597
|
-
constructor(name, index, immediateSuccessorVertexes, immediatePredecessorVertexes) {
|
|
2598
|
-
this.name = name;
|
|
2599
|
-
this.index = index;
|
|
2600
|
-
this.immediateSuccessorVertexes = immediateSuccessorVertexes;
|
|
2601
|
-
this.immediatePredecessorVertexes = immediatePredecessorVertexes;
|
|
2602
|
-
}
|
|
2603
|
-
getName() {
|
|
2604
|
-
return this.name;
|
|
2605
|
-
}
|
|
2606
|
-
getIndex() {
|
|
2607
|
-
return this.index;
|
|
2608
|
-
}
|
|
2609
|
-
getImmediateSuccessorVertexes() {
|
|
2610
|
-
return this.immediateSuccessorVertexes;
|
|
2611
|
-
}
|
|
2612
|
-
getImmediatePredecessorVertexes() {
|
|
2613
|
-
return this.immediatePredecessorVertexes;
|
|
2614
|
-
}
|
|
2615
|
-
isStranded() {
|
|
2616
|
-
const immediateSuccessorVertexesLength = this.immediateSuccessorVertexes.length, immediatePredecessorVertexesLength = this.immediatePredecessorVertexes.length, stranded = immediateSuccessorVertexesLength === 0 && immediatePredecessorVertexesLength === 0;
|
|
2617
|
-
return stranded;
|
|
2618
|
-
}
|
|
2619
|
-
isVertexForwardsReachable(vertex) {
|
|
2620
|
-
const forwardsReachableVertexes = this.retrieveForwardsReachableVertexes(vertex), lastForwardsReachableVertex = last(forwardsReachableVertexes), vertexForwardsReachable = vertex === lastForwardsReachableVertex;
|
|
2621
|
-
return vertexForwardsReachable;
|
|
2622
|
-
}
|
|
2623
|
-
isEdgePresentBySourceVertex(sourceVertex) {
|
|
2624
|
-
const sourceVertexImmediatePredecessorVertex = this.isVertexImmediatePredecessorVertex(sourceVertex), edgePresent = sourceVertexImmediatePredecessorVertex;
|
|
2625
|
-
return edgePresent;
|
|
2626
|
-
}
|
|
2627
|
-
isEdgePresentByTargetVertex(targetVertex) {
|
|
2628
|
-
const targetVertexImmediateSuccessorVertex = this.isVertexImmediateSuccessorVertex(targetVertex), edgePresent = targetVertexImmediateSuccessorVertex;
|
|
2629
|
-
return edgePresent;
|
|
2630
|
-
}
|
|
2631
|
-
retrieveSuccessorVertexNames() {
|
|
2632
|
-
const forwardsReachableVertexes = this.retrieveForwardsReachableVertexes(), forwardsReachableVertexesTail = tail(forwardsReachableVertexes), successorVertexes = forwardsReachableVertexesTail, successorVertexNames = (0, _vertex.vertexNamesFromVertexes)(successorVertexes);
|
|
2633
|
-
return successorVertexNames;
|
|
2634
|
-
}
|
|
2635
|
-
retrievePredecessorVertexNames() {
|
|
2636
|
-
const backwardsReachableVertexes = this.retrieveBackwardsReachableVertexes(), backwardsReachableVertexesTail = tail(backwardsReachableVertexes), predecessorVertexes = backwardsReachableVertexesTail, predecessorVertexNames = (0, _vertex.vertexNamesFromVertexes)(predecessorVertexes);
|
|
2637
|
-
return predecessorVertexNames;
|
|
2638
|
-
}
|
|
2639
|
-
retrieveForwardsReachableVertexes(vertex = null) {
|
|
2640
|
-
const vertexA = vertex, visitedVertexes = this.forwardsDepthFirstSearch((vertex2) => {
|
|
2641
|
-
const vertexB = vertex2, terminate = vertexA === vertexB;
|
|
2642
|
-
if (terminate) {
|
|
2643
|
-
return true;
|
|
2644
|
-
}
|
|
2645
|
-
}), forwardsReachableVertexes = visitedVertexes;
|
|
2646
|
-
return forwardsReachableVertexes;
|
|
2647
|
-
}
|
|
2648
|
-
retrieveBackwardsReachableVertexes(vertex = null) {
|
|
2649
|
-
const vertexA = vertex, visitedVertexes = this.backwardsDepthFirstSearch((vertex2) => {
|
|
2650
|
-
const vertexB = vertex2, terminate = vertexA === vertexB;
|
|
2651
|
-
if (terminate) {
|
|
2652
|
-
return true;
|
|
2653
|
-
}
|
|
2654
|
-
}), backwardsReachableVertexes = visitedVertexes;
|
|
2655
|
-
return backwardsReachableVertexes;
|
|
2656
|
-
}
|
|
2657
|
-
isVertexImmediateSuccessorVertex(vertex) {
|
|
2658
|
-
const vertexImmediateSuccessorVertex = this.immediateSuccessorVertexes.includes(vertex);
|
|
2659
|
-
return vertexImmediateSuccessorVertex;
|
|
2660
|
-
}
|
|
2661
|
-
isVertexImmediatePredecessorVertex(vertex) {
|
|
2662
|
-
const vertexImmediatePredecessorVertex = this.immediatePredecessorVertexes.includes(vertex);
|
|
2663
|
-
return vertexImmediatePredecessorVertex;
|
|
2664
|
-
}
|
|
2665
|
-
getImmediateSuccessorVertexNames() {
|
|
2666
|
-
const immediateSuccessorVertexNames = (0, _vertex.vertexNamesFromVertexes)(this.immediateSuccessorVertexes);
|
|
2667
|
-
return immediateSuccessorVertexNames;
|
|
2668
|
-
}
|
|
2669
|
-
getImmediatePredecessorVertexNames() {
|
|
2670
|
-
const immediatePredecessorVertexNames = (0, _vertex.vertexNamesFromVertexes)(this.immediatePredecessorVertexes);
|
|
2671
|
-
return immediatePredecessorVertexNames;
|
|
2672
|
-
}
|
|
2673
|
-
setName(name) {
|
|
2674
|
-
this.name = name;
|
|
2675
|
-
}
|
|
2676
|
-
setIndex(index) {
|
|
2677
|
-
this.index = index;
|
|
2678
|
-
}
|
|
2679
|
-
setImmediateSuccessorVertexes(immediateSuccessorVertexes) {
|
|
2680
|
-
this.immediateSuccessorVertexes = immediateSuccessorVertexes;
|
|
2681
|
-
}
|
|
2682
|
-
setImmediatePredecessorVertexes(immediatePredecessorVertexes) {
|
|
2683
|
-
this.immediatePredecessorVertexes = immediatePredecessorVertexes;
|
|
2684
|
-
}
|
|
2685
|
-
decrementIndex() {
|
|
2686
|
-
this.index--;
|
|
2687
|
-
}
|
|
2688
|
-
addImmediateSuccessorVertex(immediateSuccessorVertex) {
|
|
2689
|
-
this.immediateSuccessorVertexes.push(immediateSuccessorVertex);
|
|
2690
|
-
}
|
|
2691
|
-
addImmediatePredecessorVertex(immediatePredecessorVertex) {
|
|
2692
|
-
this.immediatePredecessorVertexes.push(immediatePredecessorVertex);
|
|
2693
|
-
}
|
|
2694
|
-
removeImmediateSuccessorVertex(immediateSuccessorVertex) {
|
|
2695
|
-
const index = this.immediateSuccessorVertexes.indexOf(immediateSuccessorVertex), start = index, deleteCount = 1;
|
|
2696
|
-
this.immediateSuccessorVertexes.splice(start, deleteCount);
|
|
2697
|
-
}
|
|
2698
|
-
removeImmediatePredecessorVertex(immediatePredecessorVertex) {
|
|
2699
|
-
const index = this.immediatePredecessorVertexes.indexOf(immediatePredecessorVertex), start = index, deleteCount = 1;
|
|
2700
|
-
this.immediatePredecessorVertexes.splice(start, deleteCount);
|
|
2701
|
-
}
|
|
2702
|
-
forwardsDepthFirstSearch(callback) {
|
|
2703
|
-
const vertex = this, visitedVertexes = [];
|
|
2704
|
-
(0, _search.forwardsDepthFirstSearch)(vertex, callback, visitedVertexes);
|
|
2705
|
-
return visitedVertexes;
|
|
2706
|
-
}
|
|
2707
|
-
backwardsDepthFirstSearch(callback) {
|
|
2708
|
-
const vertex = this, visitedVertexes = [];
|
|
2709
|
-
(0, _search.backwardsDepthFirstSearch)(vertex, callback, visitedVertexes);
|
|
2710
|
-
return visitedVertexes;
|
|
2711
|
-
}
|
|
2712
|
-
someImmediateSuccessorVertex(callback) {
|
|
2713
|
-
return this.immediateSuccessorVertexes.some(callback);
|
|
2714
|
-
}
|
|
2715
|
-
someImmediatePredecessorVertex(callback) {
|
|
2716
|
-
return this.immediatePredecessorVertexes.some(callback);
|
|
2717
|
-
}
|
|
2718
|
-
forEachImmediateSuccessorVertex(callback) {
|
|
2719
|
-
this.immediateSuccessorVertexes.forEach(callback);
|
|
2720
|
-
}
|
|
2721
|
-
forEachImmediatePredecessorVertex(callback) {
|
|
2722
|
-
this.immediatePredecessorVertexes.forEach(callback);
|
|
2723
|
-
}
|
|
2724
|
-
static fromNameAndIndex(name, index) {
|
|
2725
|
-
const immediateSuccessorVertexes = [], immediatePredecessorVertexes = [], dependencyVertex = new Vertex(name, index, immediateSuccessorVertexes, immediatePredecessorVertexes);
|
|
2726
|
-
return dependencyVertex;
|
|
2727
|
-
}
|
|
2728
|
-
};
|
|
2729
|
-
});
|
|
2730
|
-
|
|
2731
|
-
// lib/utilities/index.js
|
|
2732
|
-
var require_utilities = __commonJS((exports) => {
|
|
2733
|
-
"use strict";
|
|
2734
|
-
Object.defineProperty(exports, "__esModule", {
|
|
2735
|
-
value: true
|
|
2736
|
-
});
|
|
2737
|
-
function _export(target, all) {
|
|
2738
|
-
for (var name in all)
|
|
2739
|
-
Object.defineProperty(target, name, {
|
|
2740
|
-
enumerable: true,
|
|
2741
|
-
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
2742
|
-
});
|
|
2743
|
-
}
|
|
2744
|
-
_export(exports, {
|
|
2745
|
-
get indexesFromVertexes() {
|
|
2746
|
-
return indexesFromVertexes;
|
|
2747
|
-
},
|
|
2748
|
-
get orderIndexes() {
|
|
2749
|
-
return orderIndexes;
|
|
2750
|
-
}
|
|
2751
|
-
});
|
|
2752
|
-
function orderIndexes(indexes) {
|
|
2753
|
-
indexes.sort((firstIndex, secondIndex) => {
|
|
2754
|
-
if (false) {
|
|
2755
|
-
} else if (firstIndex < secondIndex) {
|
|
2756
|
-
return -1;
|
|
2757
|
-
} else if (firstIndex > secondIndex) {
|
|
2758
|
-
return 1;
|
|
2759
|
-
} else {
|
|
2760
|
-
return 0;
|
|
2761
|
-
}
|
|
2762
|
-
});
|
|
2763
|
-
}
|
|
2764
|
-
function indexesFromVertexes(vertexes) {
|
|
2765
|
-
const indexes = vertexes.map((vertex) => {
|
|
2766
|
-
const index = vertex.getIndex();
|
|
2767
|
-
return index;
|
|
2768
|
-
});
|
|
2769
|
-
return indexes;
|
|
2770
|
-
}
|
|
2771
|
-
});
|
|
2772
|
-
|
|
2773
|
-
// lib/directedGraph.js
|
|
2774
|
-
var require_directedGraph = __commonJS((exports) => {
|
|
2775
|
-
"use strict";
|
|
2776
|
-
Object.defineProperty(exports, "__esModule", {
|
|
2777
|
-
value: true
|
|
2778
|
-
});
|
|
2779
|
-
Object.defineProperty(exports, "default", {
|
|
2780
|
-
enumerable: true,
|
|
2781
|
-
get: function() {
|
|
2782
|
-
return DirectedGraph;
|
|
2783
|
-
}
|
|
2784
|
-
});
|
|
2785
|
-
var _necessary = require_browser();
|
|
2786
|
-
var _edge = /* @__PURE__ */ _interop_require_default(require_edge());
|
|
2787
|
-
var _cycle = /* @__PURE__ */ _interop_require_default(require_cycle());
|
|
2788
|
-
var _vertex = /* @__PURE__ */ _interop_require_default(require_vertex2());
|
|
2789
|
-
var _index = require_utilities();
|
|
2790
|
-
var _vertex1 = require_vertex();
|
|
2791
|
-
function _interop_require_default(obj) {
|
|
2792
|
-
return obj && obj.__esModule ? obj : {
|
|
2793
|
-
default: obj
|
|
2794
|
-
};
|
|
2795
|
-
}
|
|
2796
|
-
var {first} = _necessary.arrayUtilities;
|
|
2797
|
-
var DirectedGraph = class {
|
|
2798
|
-
constructor(vertexMap) {
|
|
2799
|
-
this.vertexMap = vertexMap;
|
|
2800
|
-
}
|
|
2801
|
-
getVertexNap() {
|
|
2802
|
-
return this.vertexMap;
|
|
2803
|
-
}
|
|
2804
|
-
getVertexes() {
|
|
2805
|
-
const vertexMapValues = Object.values(this.vertexMap), vertexes = vertexMapValues;
|
|
2806
|
-
return vertexes;
|
|
2807
|
-
}
|
|
2808
|
-
getVertexNames() {
|
|
2809
|
-
const vertexMapKeys = Object.keys(this.vertexMap), vertexNames = vertexMapKeys;
|
|
2810
|
-
return vertexNames;
|
|
2811
|
-
}
|
|
2812
|
-
getOrderedVertexNames() {
|
|
2813
|
-
const vertexes = this.getVertexes();
|
|
2814
|
-
(0, _vertex1.orderVertexes)(vertexes);
|
|
2815
|
-
const orderedVertexes = vertexes, orderedVertexNames = (0, _vertex1.vertexNamesFromVertexes)(orderedVertexes);
|
|
2816
|
-
return orderedVertexNames;
|
|
2817
|
-
}
|
|
2818
|
-
getVertexByVertexName(vertexName) {
|
|
2819
|
-
const vertexPresent = this.isVertexPresentByVertexName(vertexName), vertex = vertexPresent ? this.vertexMap[vertexName] : null;
|
|
2820
|
-
return vertex;
|
|
2821
|
-
}
|
|
2822
|
-
getEdgesBySourceVertexName(sourceVertexName) {
|
|
2823
|
-
const edges = [], sourceVertex = this.getVertexByVertexName(sourceVertexName);
|
|
2824
|
-
if (sourceVertex !== null) {
|
|
2825
|
-
const immediateSuccessorVertexes = sourceVertex.getImmediateSuccessorVertexes(), immediateSuccessorVertexNames = (0, _vertex1.vertexNamesFromVertexes)(immediateSuccessorVertexes), targetVertexNames = immediateSuccessorVertexNames;
|
|
2826
|
-
targetVertexNames.forEach((targetVertexName) => {
|
|
2827
|
-
const edge = _edge.default.fromSourceVertexNameAndTargetVertexName(sourceVertexName, targetVertexName);
|
|
2828
|
-
edges.push(edge);
|
|
2829
|
-
});
|
|
2830
|
-
}
|
|
2831
|
-
return edges;
|
|
2832
|
-
}
|
|
2833
|
-
getEdgesByTargetVertexName(targetVertexName) {
|
|
2834
|
-
const edges = [], targetVertex = this.getVertexByVertexName(targetVertexName);
|
|
2835
|
-
if (targetVertex !== null) {
|
|
2836
|
-
const immediatePredecessorVertexes = targetVertex.getImmediatePredecessorVertexes(), immediatePredecessorVertexNames = (0, _vertex1.vertexNamesFromVertexes)(immediatePredecessorVertexes), sourceVertexNames = immediatePredecessorVertexNames;
|
|
2837
|
-
sourceVertexNames.forEach((sourceVertexName) => {
|
|
2838
|
-
const edge = _edge.default.fromSourceVertexNameAndTargetVertexName(sourceVertexName, targetVertexName);
|
|
2839
|
-
edges.push(edge);
|
|
2840
|
-
});
|
|
2841
|
-
}
|
|
2842
|
-
return edges;
|
|
2843
|
-
}
|
|
2844
|
-
getFirstCycle() {
|
|
2845
|
-
let firstCycle = null;
|
|
2846
|
-
const cyclesPresent = this.areCyclesPresent();
|
|
2847
|
-
if (cyclesPresent) {
|
|
2848
|
-
const cyclicEdges = this.getCyclicEdges(), firstCyclicEdge = first(cyclicEdges), sourceVertexName = firstCyclicEdge.getSourceVertexName(), targetVertexName = firstCyclicEdge.getTargetVertexName(), sourceVertex = this.getVertexByVertexName(sourceVertexName), targetVertex = this.getVertexByVertexName(targetVertexName);
|
|
2849
|
-
targetVertex.forwardsDepthFirstSearch((vertex, predecessorVertexes) => {
|
|
2850
|
-
let terminate = false;
|
|
2851
|
-
if (vertex === sourceVertex) {
|
|
2852
|
-
terminate = true;
|
|
2853
|
-
const cycle = _cycle.default.fromSourceVertexAndPredecessorVertexes(sourceVertex, predecessorVertexes);
|
|
2854
|
-
firstCycle = cycle;
|
|
2855
|
-
}
|
|
2856
|
-
return terminate;
|
|
2857
|
-
});
|
|
2858
|
-
}
|
|
2859
|
-
return firstCycle;
|
|
2860
|
-
}
|
|
2861
|
-
getCyclicEdges() {
|
|
2862
|
-
const cyclicEdges = [], vertexes = this.getVertexes();
|
|
2863
|
-
vertexes.forEach((vertex) => {
|
|
2864
|
-
const sourceVertex = vertex, sourceVertexIndex = sourceVertex.getIndex();
|
|
2865
|
-
vertex.forEachImmediateSuccessorVertex((immediateSuccessorVertex) => {
|
|
2866
|
-
const targetVertex = immediateSuccessorVertex, targetVertexIndex = targetVertex.getIndex();
|
|
2867
|
-
if (targetVertexIndex < sourceVertexIndex) {
|
|
2868
|
-
const sourceVertexName = sourceVertex.getName(), targetVertexName = targetVertex.getName(), edge = _edge.default.fromSourceVertexNameAndTargetVertexName(sourceVertexName, targetVertexName), cyclicEdge = edge;
|
|
2869
|
-
cyclicEdges.push(cyclicEdge);
|
|
2870
|
-
}
|
|
2871
|
-
});
|
|
2872
|
-
sourceVertex;
|
|
2873
|
-
});
|
|
2874
|
-
return cyclicEdges;
|
|
2875
|
-
}
|
|
2876
|
-
areCyclesPresent() {
|
|
2877
|
-
const vertexes = this.getVertexes(), cyclesPresent = vertexes.some((vertex) => {
|
|
2878
|
-
const sourceVertex = vertex, sourceVertexIndex = sourceVertex.getIndex(), cyclicEdgePresent = vertex.someImmediateSuccessorVertex((immediateSuccessorVertex) => {
|
|
2879
|
-
const targetVertex = immediateSuccessorVertex, targetVertexIndex = targetVertex.getIndex();
|
|
2880
|
-
if (targetVertexIndex < sourceVertexIndex) {
|
|
2881
|
-
return true;
|
|
2882
|
-
}
|
|
2883
|
-
});
|
|
2884
|
-
if (cyclicEdgePresent) {
|
|
2885
|
-
return true;
|
|
2886
|
-
}
|
|
2887
|
-
});
|
|
2888
|
-
return cyclesPresent;
|
|
2889
|
-
}
|
|
2890
|
-
isEdgePresent(edge) {
|
|
2891
|
-
let edgePresent = false;
|
|
2892
|
-
const sourceVertexName = edge.getSourceVertexName(), sourceVertex = this.getVertexByVertexName(sourceVertexName);
|
|
2893
|
-
if (sourceVertex !== null) {
|
|
2894
|
-
const targetVertexName = edge.getTargetVertexName(), targetVertex = this.getVertexByVertexName(targetVertexName);
|
|
2895
|
-
if (targetVertex !== null) {
|
|
2896
|
-
edgePresent = sourceVertex.isEdgePresentByTargetVertex(targetVertex);
|
|
2897
|
-
}
|
|
2898
|
-
}
|
|
2899
|
-
return edgePresent;
|
|
2900
|
-
}
|
|
2901
|
-
isVertexPresentByVertexName(vertexName) {
|
|
2902
|
-
const vertexNames = this.getVertexNames(), vertexNamesIncludesVertexName = vertexNames.includes(vertexName), vertexPresent = vertexNamesIncludesVertexName;
|
|
2903
|
-
return vertexPresent;
|
|
2904
|
-
}
|
|
2905
|
-
getImmediateSuccessorVertexNamesByVertexName(vertexName) {
|
|
2906
|
-
const vertex = this.getVertexByVertexName(vertexName), immediateSuccessorVertexNames = vertex.getImmediateSuccessorVertexNames();
|
|
2907
|
-
return immediateSuccessorVertexNames;
|
|
2908
|
-
}
|
|
2909
|
-
getImmediatePredecessorVertexNamesByVertexName(vertexName) {
|
|
2910
|
-
const vertex = this.getVertexByVertexName(vertexName), immediatePredecessorVertexNames = vertex.getImmediatePredecessorVertexNames();
|
|
2911
|
-
return immediatePredecessorVertexNames;
|
|
2912
|
-
}
|
|
2913
|
-
isEdgePresentBySourceVertexNameAndTargetVertexName(sourceVertexName, targetVertexName) {
|
|
2914
|
-
const edge = _edge.default.fromSourceVertexNameAndTargetVertexName(sourceVertexName, targetVertexName), edgePresent = this.isEdgePresent(edge);
|
|
2915
|
-
return edgePresent;
|
|
2916
|
-
}
|
|
2917
|
-
addVertexByVertexName(vertexName) {
|
|
2918
|
-
const vertexPresent = this.isVertexPresentByVertexName(vertexName);
|
|
2919
|
-
if (!vertexPresent) {
|
|
2920
|
-
const vertexNames = this.getVertexNames(), vertexNamesLength = vertexNames.length, name = vertexName, index = vertexNamesLength, vertex2 = _vertex.default.fromNameAndIndex(name, index);
|
|
2921
|
-
this.setVertexByVertexName(vertexName, vertex2);
|
|
2922
|
-
}
|
|
2923
|
-
const vertex = this.getVertexByVertexName(vertexName);
|
|
2924
|
-
return vertex;
|
|
2925
|
-
}
|
|
2926
|
-
removeVertexByVertexName(vertexName) {
|
|
2927
|
-
const vertexPresent = this.isVertexPresentByVertexName(vertexName);
|
|
2928
|
-
if (!vertexPresent) {
|
|
2929
|
-
return;
|
|
2930
|
-
}
|
|
2931
|
-
const vertex = this.getVertexByVertexName(vertexName);
|
|
2932
|
-
vertex.forEachImmediateSuccessorVertex((immediateSuccessVertex) => {
|
|
2933
|
-
const immediatePredecessorVertex = vertex;
|
|
2934
|
-
immediateSuccessVertex.removeImmediatePredecessorVertex(immediatePredecessorVertex);
|
|
2935
|
-
});
|
|
2936
|
-
vertex.forEachImmediatePredecessorVertex((immediatePredecessorVertex) => {
|
|
2937
|
-
const immediateSuccessVertex = vertex;
|
|
2938
|
-
immediatePredecessorVertex.removeImmediateSuccessorVertex(immediateSuccessVertex);
|
|
2939
|
-
});
|
|
2940
|
-
this.deleteVertexByVertexName(vertexName);
|
|
2941
|
-
const vertexes = this.getVertexes(), deletedVertex = vertex, deletedVertexIndex = deletedVertex.getIndex();
|
|
2942
|
-
vertexes.forEach((vertex2) => {
|
|
2943
|
-
const vertexIndex = vertex2.getIndex();
|
|
2944
|
-
if (vertexIndex > deletedVertexIndex) {
|
|
2945
|
-
vertex2.decrementIndex();
|
|
2946
|
-
}
|
|
2947
|
-
});
|
|
2948
|
-
this.filterCyclicEdges();
|
|
2949
|
-
}
|
|
2950
|
-
addVertexesByVertexNames(vertexNames) {
|
|
2951
|
-
vertexNames.forEach((vertexName) => {
|
|
2952
|
-
this.addVertexByVertexName(vertexName);
|
|
2953
|
-
});
|
|
2954
|
-
}
|
|
2955
|
-
removeVertexesByVertexNames(vertexNames) {
|
|
2956
|
-
vertexNames.forEach((vertexName) => {
|
|
2957
|
-
this.removeVertexByVertexName(vertexName);
|
|
2958
|
-
});
|
|
2959
|
-
}
|
|
2960
|
-
addEdge(edge) {
|
|
2961
|
-
const sourceVertexName = edge.getSourceVertexName(), targetVertexName = edge.getTargetVertexName();
|
|
2962
|
-
if (sourceVertexName === targetVertexName) {
|
|
2963
|
-
return;
|
|
2964
|
-
}
|
|
2965
|
-
const sourceVertex = this.addVertexByVertexName(sourceVertexName), targetVertex = this.addVertexByVertexName(targetVertexName), edgePresent = sourceVertex.isEdgePresentByTargetVertex(targetVertex);
|
|
2966
|
-
if (edgePresent) {
|
|
2967
|
-
return;
|
|
2968
|
-
}
|
|
2969
|
-
const sourceVertexIndex = sourceVertex.getIndex(), targetVertexIndex = targetVertex.getIndex();
|
|
2970
|
-
if (sourceVertexIndex > targetVertexIndex) {
|
|
2971
|
-
this.reorderVertexesBySourceVertexAndTargetVertex(sourceVertex, targetVertex);
|
|
2972
|
-
}
|
|
2973
|
-
const immediatePredecessorVertex = sourceVertex, immediateSuccessorVertex = targetVertex;
|
|
2974
|
-
immediatePredecessorVertex.addImmediateSuccessorVertex(immediateSuccessorVertex);
|
|
2975
|
-
immediateSuccessorVertex.addImmediatePredecessorVertex(immediatePredecessorVertex);
|
|
2976
|
-
}
|
|
2977
|
-
addEdges(edges) {
|
|
2978
|
-
edges.forEach((edge) => {
|
|
2979
|
-
this.addEdge(edge);
|
|
2980
|
-
});
|
|
2981
|
-
}
|
|
2982
|
-
removeEdge(edge, removeStrandedVertexes) {
|
|
2983
|
-
const sourceVertexName = edge.getSourceVertexName(), targetVertexName = edge.getTargetVertexName(), sourceVertex = this.addVertexByVertexName(sourceVertexName), targetVertex = this.addVertexByVertexName(targetVertexName), edgePresent = sourceVertex.isEdgePresentByTargetVertex(targetVertex);
|
|
2984
|
-
if (!edgePresent) {
|
|
2985
|
-
return;
|
|
2986
|
-
}
|
|
2987
|
-
sourceVertex.removeImmediateSuccessorVertex(targetVertex);
|
|
2988
|
-
targetVertex.removeImmediatePredecessorVertex(sourceVertex);
|
|
2989
|
-
if (removeStrandedVertexes) {
|
|
2990
|
-
const sourceVertexStranded = sourceVertex.isStranded(), targetVertexStranded = targetVertex.isStranded();
|
|
2991
|
-
if (sourceVertexStranded) {
|
|
2992
|
-
this.removeVertexByVertexName(sourceVertexName);
|
|
2993
|
-
}
|
|
2994
|
-
if (targetVertexStranded) {
|
|
2995
|
-
this.removeVertexByVertexName(targetVertexName);
|
|
2996
|
-
}
|
|
2997
|
-
}
|
|
2998
|
-
this.filterCyclicEdges();
|
|
2999
|
-
}
|
|
3000
|
-
removeEdges(edges, removeStrandedVertexes = false) {
|
|
3001
|
-
edges.forEach((edge) => {
|
|
3002
|
-
this.removeEdge(edge, removeStrandedVertexes);
|
|
3003
|
-
});
|
|
3004
|
-
}
|
|
3005
|
-
removeAllEdgesAndVertexes() {
|
|
3006
|
-
this.vertexMap = {};
|
|
3007
|
-
}
|
|
3008
|
-
addEdgeBySourceVertexNameAndTargetVertexName(sourceVertexName, targetVertexName) {
|
|
3009
|
-
const edge = _edge.default.fromSourceVertexNameAndTargetVertexName(sourceVertexName, targetVertexName);
|
|
3010
|
-
this.addEdge(edge);
|
|
3011
|
-
}
|
|
3012
|
-
reorderVertexesBySourceVertexAndTargetVertex(sourceVertex, targetVertex) {
|
|
3013
|
-
const sourceVertexForwardsReachable = targetVertex.isVertexForwardsReachable(sourceVertex);
|
|
3014
|
-
if (sourceVertexForwardsReachable) {
|
|
3015
|
-
return;
|
|
3016
|
-
}
|
|
3017
|
-
const forwardsReachableVertexes = targetVertex.retrieveForwardsReachableVertexes(), backwardsReachableVertexes = sourceVertex.retrieveBackwardsReachableVertexes();
|
|
3018
|
-
(0, _vertex1.orderVertexes)(backwardsReachableVertexes);
|
|
3019
|
-
(0, _vertex1.orderVertexes)(forwardsReachableVertexes);
|
|
3020
|
-
const reachableVertexes = [
|
|
3021
|
-
...backwardsReachableVertexes,
|
|
3022
|
-
...forwardsReachableVertexes
|
|
3023
|
-
], reachableIndexes = (0, _index.indexesFromVertexes)(reachableVertexes);
|
|
3024
|
-
(0, _index.orderIndexes)(reachableIndexes);
|
|
3025
|
-
reachableVertexes.forEach((reachableVertex, index) => {
|
|
3026
|
-
const reachableIndex = reachableIndexes[index];
|
|
3027
|
-
index = reachableIndex;
|
|
3028
|
-
reachableVertex.setIndex(index);
|
|
3029
|
-
});
|
|
3030
|
-
}
|
|
3031
|
-
filterCyclicEdges() {
|
|
3032
|
-
const cyclicEdges = this.getCyclicEdges(), edges = cyclicEdges;
|
|
3033
|
-
edges.forEach((edge) => {
|
|
3034
|
-
const sourceVertexName = edge.getSourceVertexName(), targetVertexName = edge.getTargetVertexName(), sourceVertex = this.getVertexByVertexName(sourceVertexName), targetVertex = this.getVertexByVertexName(targetVertexName), sourceVertexForwardsReachable = targetVertex.isVertexForwardsReachable(sourceVertex);
|
|
3035
|
-
if (!sourceVertexForwardsReachable) {
|
|
3036
|
-
this.reorderVertexesBySourceVertexAndTargetVertex(sourceVertex, targetVertex);
|
|
3037
|
-
}
|
|
3038
|
-
});
|
|
3039
|
-
}
|
|
3040
|
-
setVertexByVertexName(vertexName, vertex) {
|
|
3041
|
-
this.vertexMap[vertexName] = vertex;
|
|
3042
|
-
}
|
|
3043
|
-
deleteVertexByVertexName(vertexName) {
|
|
3044
|
-
delete this.vertexMap[vertexName];
|
|
3045
|
-
}
|
|
3046
|
-
static fromNothing() {
|
|
3047
|
-
const vertexMap = {}, directedGraph = new DirectedGraph(vertexMap);
|
|
3048
|
-
return directedGraph;
|
|
3049
|
-
}
|
|
3050
|
-
};
|
|
3051
|
-
});
|
|
3052
|
-
|
|
3053
|
-
// lib/index.js
|
|
3054
|
-
var require_lib = __commonJS((exports) => {
|
|
3055
|
-
"use strict";
|
|
3056
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3057
|
-
value: true
|
|
3058
|
-
});
|
|
3059
|
-
function _export(target, all) {
|
|
3060
|
-
for (var name in all)
|
|
3061
|
-
Object.defineProperty(target, name, {
|
|
3062
|
-
enumerable: true,
|
|
3063
|
-
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
3064
|
-
});
|
|
3065
|
-
}
|
|
3066
|
-
_export(exports, {
|
|
3067
|
-
get Cycle() {
|
|
3068
|
-
return _cycle.default;
|
|
3069
|
-
},
|
|
3070
|
-
get DirectedGraph() {
|
|
3071
|
-
return _directedGraph.default;
|
|
3072
|
-
},
|
|
3073
|
-
get Edge() {
|
|
3074
|
-
return _edge.default;
|
|
3075
|
-
},
|
|
3076
|
-
get Vertex() {
|
|
3077
|
-
return _vertex.default;
|
|
3078
|
-
}
|
|
3079
|
-
});
|
|
3080
|
-
var _edge = /* @__PURE__ */ _interop_require_default(require_edge());
|
|
3081
|
-
var _cycle = /* @__PURE__ */ _interop_require_default(require_cycle());
|
|
3082
|
-
var _vertex = /* @__PURE__ */ _interop_require_default(require_vertex2());
|
|
3083
|
-
var _directedGraph = /* @__PURE__ */ _interop_require_default(require_directedGraph());
|
|
3084
|
-
function _interop_require_default(obj) {
|
|
3085
|
-
return obj && obj.__esModule ? obj : {
|
|
3086
|
-
default: obj
|
|
3087
|
-
};
|
|
3088
|
-
}
|
|
3089
|
-
});
|
|
3090
|
-
|
|
3091
|
-
// lib/example.js
|
|
3092
|
-
var require_example = __commonJS((exports) => {
|
|
3093
|
-
"use strict";
|
|
3094
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3095
|
-
value: true
|
|
3096
|
-
});
|
|
3097
|
-
var _index = require_lib();
|
|
3098
|
-
var edge1 = _index.Edge.fromSourceVertexNameAndTargetVertexName("./easy-with-style", "./easy-layout");
|
|
3099
|
-
var edge2 = _index.Edge.fromSourceVertexNameAndTargetVertexName("./with-style", "./easy-with-style");
|
|
3100
|
-
var edge3 = _index.Edge.fromSourceVertexNameAndTargetVertexName("./easy-layout", "./occam-lexers");
|
|
3101
|
-
var edge4 = _index.Edge.fromSourceVertexNameAndTargetVertexName("./easy-with-style", "./easy-layout");
|
|
3102
|
-
var edge5 = _index.Edge.fromSourceVertexNameAndTargetVertexName("./occam-lexers", "./with-style");
|
|
3103
|
-
var directedGraph = _index.DirectedGraph.fromNothing();
|
|
3104
|
-
directedGraph.addEdge(edge1);
|
|
3105
|
-
directedGraph.addEdge(edge2);
|
|
3106
|
-
directedGraph.addEdge(edge3);
|
|
3107
|
-
directedGraph.addEdge(edge4);
|
|
3108
|
-
directedGraph.addEdge(edge5);
|
|
3109
|
-
directedGraph.removeVertexByVertexName("./occam-lexers");
|
|
3110
|
-
});
|
|
3111
|
-
require_example();
|
|
3112
|
-
})();
|
|
3113
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL2VkZ2UuanMiLCAic3JjL3V0aWxpdGllcy92ZXJ0ZXguanMiLCAic3JjL2N5Y2xlLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL2xldmVscy5qcyIsICJub2RlX21vZHVsZXMvbmVjZXNzYXJ5L3NyYy9tZXRob2RzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL2hlYWRlcnMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMva2V5Q29kZXMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvZW5jb2RpbmdzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL2NoYXJhY3RlcnMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvc3RhdHVzQ29kZXMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvY29udGVudFR5cGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL3N0YXR1c01lc3NhZ2VzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL2NvbnN0YW50cy5qcyIsICJub2RlX21vZHVsZXMvbmVjZXNzYXJ5L3NyYy91dGlsaXRpZXMvYXJyYXkuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvdXRpbGl0aWVzL3BhdGguanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvdXRpbGl0aWVzL2h0dHAuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvdXRpbGl0aWVzL3N0cmluZy5qcyIsICJub2RlX21vZHVsZXMvbmVjZXNzYXJ5L3NyYy91dGlsaXRpZXMvdmVyc2lvbi5qcyIsICJub2RlX21vZHVsZXMvbmVjZXNzYXJ5L3NyYy91dGlsaXRpZXMvYXN5bmNocm9ub3VzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL3V0aWxpdGllcy9hamF4LmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL2Jyb3dzZXIuanMiLCAic3JjL3V0aWxpdGllcy9zZWFyY2guanMiLCAic3JjL3ZlcnRleC5qcyIsICJzcmMvdXRpbGl0aWVzL2luZGV4LmpzIiwgInNyYy9kaXJlY3RlZEdyYXBoLmpzIiwgInNyYy9pbmRleC5qcyIsICJzcmMvZXhhbXBsZS5qcyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVkZ2Uge1xuICBjb25zdHJ1Y3Rvcihzb3VyY2VWZXJ0ZXhOYW1lLCB0YXJnZXRWZXJ0ZXhOYW1lKSB7XG4gICAgdGhpcy5zb3VyY2VWZXJ0ZXhOYW1lID0gc291cmNlVmVydGV4TmFtZTtcbiAgICB0aGlzLnRhcmdldFZlcnRleE5hbWUgPSB0YXJnZXRWZXJ0ZXhOYW1lO1xuICB9XG4gIFxuICBnZXRTb3VyY2VWZXJ0ZXhOYW1lKCkge1xuICAgIHJldHVybiB0aGlzLnNvdXJjZVZlcnRleE5hbWU7XG4gIH1cbiAgXG4gIGdldFRhcmdldFZlcnRleE5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMudGFyZ2V0VmVydGV4TmFtZTtcbiAgfVxuICBcbiAgbWF0Y2goZWRnZSkge1xuICAgIGNvbnN0IHNvdXJjZVZlcnRleE5hbWUgPSBlZGdlLmdldFNvdXJjZVZlcnRleE5hbWUoKSxcbiAgICAgICAgICB0YXJnZXRWZXJ0ZXhOYW1lID0gZWRnZS5nZXRUYXJnZXRWZXJ0ZXhOYW1lKCksXG4gICAgICAgICAgbWF0Y2hlcyA9ICgodGhpcy5zb3VyY2VWZXJ0ZXhOYW1lID09PSBzb3VyY2VWZXJ0ZXhOYW1lKSAmJiAodGhpcy50YXJnZXRWZXJ0ZXhOYW1lID09PSB0YXJnZXRWZXJ0ZXhOYW1lKSk7XG4gICAgXG4gICAgcmV0dXJuIG1hdGNoZXM7XG4gIH1cblxuICBtYXRjaFZlcnRleE5hbWUodmVydGV4TmFtZSkge1xuICAgIGNvbnN0IG1hdGNoZXMgPSAoKHRoaXMuc291cmNlVmVydGV4TmFtZSA9PT0gdmVydGV4TmFtZSkgfHwgKHRoaXMudGFyZ2V0VmVydGV4TmFtZSA9PT0gdmVydGV4TmFtZSkpO1xuXG4gICAgcmV0dXJuIG1hdGNoZXM7XG4gIH1cblxuICBtYXRjaFNvdXJjZVZlcnRleE5hbWUoc291cmNlVmVydGV4TmFtZSkge1xuICAgIGNvbnN0IG1hdGNoZXMgPSAodGhpcy5zb3VyY2VWZXJ0ZXhOYW1lID09PSBzb3VyY2VWZXJ0ZXhOYW1lKTtcblxuICAgIHJldHVybiBtYXRjaGVzO1xuICB9XG5cbiAgbWF0Y2hUYXJnZXRWZXJ0ZXhOYW1lKHRhcmdldFZlcnRleE5hbWUpIHtcbiAgICBjb25zdCBtYXRjaGVzID0gKHRoaXMudGFyZ2V0VmVydGV4TmFtZSA9PT0gdGFyZ2V0VmVydGV4TmFtZSk7XG5cbiAgICByZXR1cm4gbWF0Y2hlcztcbiAgfVxuXG4gIG1hdGNoVmVydGV4TmFtZXMoc291cmNlVmVydGV4TmFtZSwgdGFyZ2V0VmVydGV4TmFtZSkge1xuICAgIGNvbnN0IG1hdGNoZXMgPSAoKHRoaXMuc291cmNlVmVydGV4TmFtZSA9PT0gc291cmNlVmVydGV4TmFtZSkgJiYgKHRoaXMudGFyZ2V0VmVydGV4TmFtZSA9PT0gdGFyZ2V0VmVydGV4TmFtZSkpO1xuICAgIFxuICAgIHJldHVybiBtYXRjaGVzO1xuICB9XG5cbiAgc3RhdGljIGZyb21Tb3VyY2VWZXJ0ZXhOYW1lQW5kVGFyZ2V0VmVydGV4TmFtZShzb3VyY2VWZXJ0ZXhOYW1lLCB0YXJnZXRWZXJ0ZXhOYW1lKSB7XG4gICAgY29uc3QgZWRnZSA9IG5ldyBFZGdlKHNvdXJjZVZlcnRleE5hbWUsIHRhcmdldFZlcnRleE5hbWUpO1xuXG4gICAgcmV0dXJuIGVkZ2U7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIG9yZGVyVmVydGV4ZXModmVydGV4ZXMpIHsgIC8vL1xuICB2ZXJ0ZXhlcy5zb3J0KChmaXJzdFZlcnRleCwgc2Vjb25kVmVydGV4KSA9PiB7XG4gICAgY29uc3QgZmlyc3RWZXJ0ZXhJbmRleCA9IGZpcnN0VmVydGV4LmdldEluZGV4KCksXG4gICAgICAgICAgc2Vjb25kVmVydGV4SW5kZXggPSBzZWNvbmRWZXJ0ZXguZ2V0SW5kZXgoKTtcblxuICAgIGlmIChmYWxzZSkge1xuICAgICAgLy8vXG4gICAgfSBlbHNlIGlmIChmaXJzdFZlcnRleEluZGV4IDwgc2Vjb25kVmVydGV4SW5kZXgpIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9IGVsc2UgIGlmIChmaXJzdFZlcnRleEluZGV4ID4gc2Vjb25kVmVydGV4SW5kZXgpIHtcbiAgICAgIHJldHVybiArMTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZlcnRleE5hbWVzRnJvbVZlcnRleGVzKHZlcnRleGVzKSB7XG4gIGNvbnN0IHZlcnRleE5hbWVzID0gdmVydGV4ZXMubWFwKCh2ZXJ0ZXgpID0+IHtcbiAgICBjb25zdCB2ZXJ0ZXhOYW1lID0gdmVydGV4LmdldE5hbWUoKTtcblxuICAgIHJldHVybiB2ZXJ0ZXhOYW1lO1xuICB9KTtcblxuICByZXR1cm4gdmVydGV4TmFtZXM7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHZlcnRleE5hbWVzRnJvbVZlcnRleGVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL3ZlcnRleFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDeWNsZSB7XG4gIGNvbnN0cnVjdG9yKHZlcnRleE5hbWVzKSB7XG4gICAgdGhpcy52ZXJ0ZXhOYW1lcyA9IHZlcnRleE5hbWVzO1xuICB9XG5cbiAgZ2V0VmVydGV4TmFtZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMudmVydGV4TmFtZXM7XG4gIH1cblxuICBzdGF0aWMgZnJvbVNvdXJjZVZlcnRleEFuZFByZWRlY2Vzc29yVmVydGV4ZXMoc291cmNlVmVydGV4LCBwcmVkZWNlc3NvclZlcnRleGVzKSB7XG4gICAgY29uc3QgdmVydGV4ZXMgPSBbXG4gICAgICAgICAgICAuLi5wcmVkZWNlc3NvclZlcnRleGVzLFxuICAgICAgICAgICAgc291cmNlVmVydGV4XG4gICAgICAgICAgXSxcbiAgICAgICAgICB2ZXJ0ZXhOYW1lcyA9IHZlcnRleE5hbWVzRnJvbVZlcnRleGVzKHZlcnRleGVzKSxcbiAgICAgICAgICBjeWNsZSA9IG5ldyBDeWNsZSh2ZXJ0ZXhOYW1lcyk7XG5cbiAgICByZXR1cm4gY3ljbGU7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IFRSQUNFX0xFVkVMID0gXCJ0cmFjZVwiO1xuZXhwb3J0IGNvbnN0IERFQlVHX0xFVkVMID0gXCJkZWJ1Z1wiO1xuZXhwb3J0IGNvbnN0IElORk9fTEVWRUwgPSBcImluZm9cIjtcbmV4cG9ydCBjb25zdCBXQVJOSU5HX0xFVkVMID0gXCJ3YXJuaW5nXCI7XG5leHBvcnQgY29uc3QgRVJST1JfTEVWRUwgPSBcImVycm9yXCI7XG5leHBvcnQgY29uc3QgRkFUQUxfTEVWRUwgPSBcImZhdGFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgVFJBQ0VfTEVWRUwsXG4gIERFQlVHX0xFVkVMLFxuICBJTkZPX0xFVkVMLFxuICBXQVJOSU5HX0xFVkVMLFxuICBFUlJPUl9MRVZFTCxcbiAgRkFUQUxfTEVWRUxcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBHRVRfTUVUSE9EID0gXCJHRVRcIjtcbmV4cG9ydCBjb25zdCBQT1NUX01FVEhPRCA9IFwiUE9TVFwiO1xuZXhwb3J0IGNvbnN0IFBBVENIX01FVEhPRCA9IFwiUEFUQ0hcIjtcbmV4cG9ydCBjb25zdCBERUxFVEVfTUVUSE9EID0gXCJERUxFVEVcIjtcbmV4cG9ydCBjb25zdCBPUFRJT05TX01FVEhPRCA9IFwiT1BUSU9OU1wiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIEdFVF9NRVRIT0QsXG4gIFBPU1RfTUVUSE9ELFxuICBQQVRDSF9NRVRIT0QsXG4gIERFTEVURV9NRVRIT0QsXG4gIE9QVElPTlNfTUVUSE9EXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgUFJBR01BX0hFQURFUiA9IFwicHJhZ21hXCI7XG5leHBvcnQgY29uc3QgQUNDRVBUX0hFQURFUiA9IFwiYWNjZXB0XCI7XG5leHBvcnQgY29uc3QgTE9DQVRJT05fSEVBREVSID0gXCJsb2NhdGlvblwiO1xuZXhwb3J0IGNvbnN0IFVTRVJfQUdFTlRfSEVBREVSID0gXCJ1c2VyLWFnZW50XCI7XG5leHBvcnQgY29uc3QgQ09OVEVOVF9UWVBFX0hFQURFUiA9IFwiY29udGVudC10eXBlXCI7XG5leHBvcnQgY29uc3QgQVVUSE9SSVpBVElPTl9IRUFERVIgPSBcImF1dGhvcml6YXRpb25cIjtcbmV4cG9ydCBjb25zdCBDQUNIRV9DT05UUk9MX0hFQURFUiA9IFwiY2FjaGUtY29udHJvbFwiO1xuZXhwb3J0IGNvbnN0IENPTlRFTlRfTEVOR1RIX0hFQURFUiA9IFwiY29udGVudC1sZW5ndGhcIjtcbmV4cG9ydCBjb25zdCBUUkFOU0ZFUl9FTkNPRElOR19IRUFERVIgPSBcInRyYW5zZmVyLWVuY29kaW5nXCI7XG5leHBvcnQgY29uc3QgQ09OVEVOVF9ESVNQT1NJVElPTl9IRUFERVIgPSBcImNvbnRlbnQtZGlzcG9zaXRpb25cIjtcbmV4cG9ydCBjb25zdCBBQ0NFU1NfQ09OVFJPTF9BTExPV19PUklHSU5fSEVBREVSID0gXCJhY2Nlc3MtY29udHJvbC1hbGxvdy1vcmlnaW5cIjtcbmV4cG9ydCBjb25zdCBBQ0NFU1NfQ09OVFJPTF9BTExPV19NRVRIT0RTX0hFQURFUiA9IFwiYWNjZXNzLWNvbnRyb2wtYWxsb3ctbWV0aG9kc1wiO1xuZXhwb3J0IGNvbnN0IEFDQ0VTU19DT05UUk9MX0FMTE9XX0hFQURFUlNfSEVBREVSID0gXCJhY2Nlc3MtY29udHJvbC1hbGxvdy1oZWFkZXJzXCI7XG5leHBvcnQgY29uc3QgQUNDRVNTX0NPTlRST0xfUkVRVUVTVF9NRVRIT0RfSEVBREVSID0gXCJhY2Nlc3MtY29udHJvbC1yZXF1ZXN0LW1ldGhvZFwiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFBSQUdNQV9IRUFERVIsXG4gIEFDQ0VQVF9IRUFERVIsXG4gIExPQ0FUSU9OX0hFQURFUixcbiAgVVNFUl9BR0VOVF9IRUFERVIsXG4gIENPTlRFTlRfVFlQRV9IRUFERVIsXG4gIEFVVEhPUklaQVRJT05fSEVBREVSLFxuICBDQUNIRV9DT05UUk9MX0hFQURFUixcbiAgQ09OVEVOVF9MRU5HVEhfSEVBREVSLFxuICBUUkFOU0ZFUl9FTkNPRElOR19IRUFERVIsXG4gIENPTlRFTlRfRElTUE9TSVRJT05fSEVBREVSLFxuICBBQ0NFU1NfQ09OVFJPTF9BTExPV19PUklHSU5fSEVBREVSLFxuICBBQ0NFU1NfQ09OVFJPTF9BTExPV19NRVRIT0RTX0hFQURFUixcbiAgQUNDRVNTX0NPTlRST0xfQUxMT1dfSEVBREVSU19IRUFERVIsXG4gIEFDQ0VTU19DT05UUk9MX1JFUVVFU1RfTUVUSE9EX0hFQURFUlxufTsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBUQUJfS0VZX0NPREUgPSA5O1xuZXhwb3J0IGNvbnN0IFNISUZUX0tFWV9DT0RFID0gMTY7XG5leHBvcnQgY29uc3QgRU5URVJfS0VZX0NPREUgPSAxMztcbmV4cG9ydCBjb25zdCBFU0NBUEVfS0VZX0NPREUgPSAyNztcbmV4cG9ydCBjb25zdCBERUxFVEVfS0VZX0NPREUgPSA0NjtcbmV4cG9ydCBjb25zdCBCQUNLU1BBQ0VfS0VZX0NPREUgPSA4O1xuZXhwb3J0IGNvbnN0IEFSUk9XX1VQX0tFWV9DT0RFID0gMzg7XG5leHBvcnQgY29uc3QgQVJST1dfRE9XTl9LRVlfQ09ERSA9IDQwO1xuZXhwb3J0IGNvbnN0IEFSUk9XX0xFRlRfS0VZX0NPREUgPSAzNztcbmV4cG9ydCBjb25zdCBBUlJPV19SSUdIVF9LRVlfQ09ERSA9IDM5O1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFRBQl9LRVlfQ09ERSxcbiAgU0hJRlRfS0VZX0NPREUsXG4gIEVOVEVSX0tFWV9DT0RFLFxuICBFU0NBUEVfS0VZX0NPREUsXG4gIERFTEVURV9LRVlfQ09ERSxcbiAgQkFDS1NQQUNFX0tFWV9DT0RFLFxuICBBUlJPV19VUF9LRVlfQ09ERSxcbiAgQVJST1dfRE9XTl9LRVlfQ09ERSxcbiAgQVJST1dfTEVGVF9LRVlfQ09ERSxcbiAgQVJST1dfUklHSFRfS0VZX0NPREVcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBVVEY4X0VOQ09ESU5HID0gXCJ1dGY4XCI7XG5leHBvcnQgY29uc3QgVVRGXzhfRU5DT0RJTkcgPSBcInV0Zi04XCI7XG5leHBvcnQgY29uc3QgQkFTRTY0X0VOQ09ESU5HID0gXCJiYXNlNjRcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBVVEY4X0VOQ09ESU5HLFxuICBVVEZfOF9FTkNPRElORyxcbiAgQkFTRTY0X0VOQ09ESU5HXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgVVBfQ0hBUkFDVEVSID0gXCJcdTAwMWJbQVwiO1xuZXhwb3J0IGNvbnN0IEVUWF9DSEFSQUNURVIgPSBcIlxcdTAwMDNcIjtcbmV4cG9ydCBjb25zdCBCQVJfQ0hBUkFDVEVSID0gXCJ8XCI7XG5leHBvcnQgY29uc3QgSEFUX0NIQVJBQ1RFUiA9IFwiXlwiO1xuZXhwb3J0IGNvbnN0IFBMVVNfQ0hBUkFDVEVSID0gXCIrXCI7XG5leHBvcnQgY29uc3QgREFTSF9DSEFSQUNURVIgPSBcIi1cIjtcbmV4cG9ydCBjb25zdCBET1dOX0NIQVJBQ1RFUiA9IFwiXHUwMDFiW0JcIjtcbmV4cG9ydCBjb25zdCBMRUZUX0NIQVJBQ1RFUiA9IFwiXHUwMDFiW0RcIjtcbmV4cG9ydCBjb25zdCBSSUdIVF9DSEFSQUNURVIgPSBcIlx1MDAxYltDXCI7XG5leHBvcnQgY29uc3QgU1BBQ0VfQ0hBUkFDVEVSID0gXCIgXCI7XG5leHBvcnQgY29uc3QgQ09NTUFfQ0hBUkFDVEVSID0gXCIsXCI7XG5leHBvcnQgY29uc3QgQ09MT05fQ0hBUkFDVEVSID0gXCI6XCI7XG5leHBvcnQgY29uc3QgUEVSSU9EX0NIQVJBQ1RFUiA9IFwiLlwiO1xuZXhwb3J0IGNvbnN0IERPTExBUl9DSEFSQUNURVIgPSBcIiRcIjtcbmV4cG9ydCBjb25zdCBDVFJMX0NfQ0hBUkFDVEVSID0gXCJeQ1wiO1xuZXhwb3J0IGNvbnN0IEVTQ0FQRV9DSEFSQUNURVIgPSBcIlxcdTAwMWJcIjtcbmV4cG9ydCBjb25zdCBBU1RFUklTS19DSEFSQUNURVIgPSBcIipcIjtcbmV4cG9ydCBjb25zdCBXSUxEQ0FSRF9DSEFSQUNURVIgPSBcIipcIjtcbmV4cG9ydCBjb25zdCBCQUNLVElDS19ERUxJTUlURVIgPSBcImBcIjtcbmV4cG9ydCBjb25zdCBORVdfTElORV9DSEFSQUNURVIgPSBcIlxcblwiO1xuZXhwb3J0IGNvbnN0IEFNUEVSU0FORF9DSEFSQUNURVIgPSBcIiZcIjtcbmV4cG9ydCBjb25zdCBCQUNLU0xBU0hfQ0hBUkFDVEVSID0gXCJcXFxcXCI7XG5leHBvcnQgY29uc3QgQkFDS1NQQUNFX0NIQVJBQ1RFUiA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMTI3KTtcbmV4cG9ydCBjb25zdCBRVUVTVElPTl9NQVJLX0NIQVJBQ1RFUiA9IFwiP1wiO1xuZXhwb3J0IGNvbnN0IEZPUldBUkRfU0xBU0hfQ0hBUkFDVEVSID0gXCIvXCI7XG5leHBvcnQgY29uc3QgT1BFTklOR19CUkFDS0VUX0NIQVJBQ1RFUiA9IFwiKFwiO1xuZXhwb3J0IGNvbnN0IENMT1NJTkdfQlJBQ0tFVF9DSEFSQUNURVIgPSBcIilcIjtcbmV4cG9ydCBjb25zdCBDQVJSSUFHRV9SRVRVUk5fQ0hBUkFDVEVSID0gXCJcXHJcIjtcbmV4cG9ydCBjb25zdCBFWENMQU1BVElPTl9NQVJLX0NIQVJBQ1RFUiA9IFwiIVwiO1xuZXhwb3J0IGNvbnN0IE9QRU5JTkdfQ1VSTFlfQlJBQ0tFVF9DSEFSQUNURVIgPSBcIntcIjtcbmV4cG9ydCBjb25zdCBDTE9TSU5HX0NVUkxZX0JSQUNLRVRfQ0hBUkFDVEVSID0gXCJ9XCI7XG5leHBvcnQgY29uc3QgT1BFTklOR19TUVVBUkVfQlJBQ0tFVF9DSEFSQUNURVIgPSBcIltcIjtcbmV4cG9ydCBjb25zdCBDTE9TSU5HX1NRVUFSRV9CUkFDS0VUX0NIQVJBQ1RFUiA9IFwiXVwiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFVQX0NIQVJBQ1RFUixcbiAgRVRYX0NIQVJBQ1RFUixcbiAgQkFSX0NIQVJBQ1RFUixcbiAgSEFUX0NIQVJBQ1RFUixcbiAgUExVU19DSEFSQUNURVIsXG4gIERBU0hfQ0hBUkFDVEVSLFxuICBET1dOX0NIQVJBQ1RFUixcbiAgTEVGVF9DSEFSQUNURVIsXG4gIFJJR0hUX0NIQVJBQ1RFUixcbiAgU1BBQ0VfQ0hBUkFDVEVSLFxuICBDT01NQV9DSEFSQUNURVIsXG4gIENPTE9OX0NIQVJBQ1RFUixcbiAgUEVSSU9EX0NIQVJBQ1RFUixcbiAgRE9MTEFSX0NIQVJBQ1RFUixcbiAgQ1RSTF9DX0NIQVJBQ1RFUixcbiAgRVNDQVBFX0NIQVJBQ1RFUixcbiAgQVNURVJJU0tfQ0hBUkFDVEVSLFxuICBXSUxEQ0FSRF9DSEFSQUNURVIsXG4gIEJBQ0tUSUNLX0RFTElNSVRFUixcbiAgTkVXX0xJTkVfQ0hBUkFDVEVSLFxuICBBTVBFUlNBTkRfQ0hBUkFDVEVSLFxuICBCQUNLU0xBU0hfQ0hBUkFDVEVSLFxuICBCQUNLU1BBQ0VfQ0hBUkFDVEVSLFxuICBRVUVTVElPTl9NQVJLX0NIQVJBQ1RFUixcbiAgRk9SV0FSRF9TTEFTSF9DSEFSQUNURVIsXG4gIE9QRU5JTkdfQlJBQ0tFVF9DSEFSQUNURVIsXG4gIENMT1NJTkdfQlJBQ0tFVF9DSEFSQUNURVIsXG4gIENBUlJJQUdFX1JFVFVSTl9DSEFSQUNURVIsXG4gIEVYQ0xBTUFUSU9OX01BUktfQ0hBUkFDVEVSLFxuICBPUEVOSU5HX0NVUkxZX0JSQUNLRVRfQ0hBUkFDVEVSLFxuICBDTE9TSU5HX0NVUkxZX0JSQUNLRVRfQ0hBUkFDVEVSLFxuICBPUEVOSU5HX1NRVUFSRV9CUkFDS0VUX0NIQVJBQ1RFUixcbiAgQ0xPU0lOR19TUVVBUkVfQlJBQ0tFVF9DSEFSQUNURVJcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBaRVJPXzBfU1RBVFVTX0NPREUgPSAwO1xuZXhwb3J0IGNvbnN0IE9LXzIwMF9TVEFUVVNfQ09ERSA9IDIwMDtcbmV4cG9ydCBjb25zdCBGT1VORF8zMDJfU1RBVFVTX0NPREUgPSAzMDI7XG5leHBvcnQgY29uc3QgQ1JFQVRFRF8yMDFfU1RBVFVTX0NPREUgPSAyMDE7XG5leHBvcnQgY29uc3QgQ09ORkxJQ1RfNDA5X1NUQVRVU19DT0RFID0gNDA5O1xuZXhwb3J0IGNvbnN0IFNFRV9PVEhFUl8zMDNfU1RBVFVTX0NPREUgPSAzMDM7XG5leHBvcnQgY29uc3QgRk9SQklEREVOXzQwM19TVEFUVVNfQ09ERSA9IDQwMztcbmV4cG9ydCBjb25zdCBOT1RfRk9VTkRfNDA0X1NUQVRVU19DT0RFID0gNDA0O1xuZXhwb3J0IGNvbnN0IE5PX0NPTlRFTlRfMjA0X1NUQVRVU19DT0RFID0gMjA0O1xuZXhwb3J0IGNvbnN0IEJBRF9HQVRFV0FZXzUwMl9TVEFUVVNfQ09ERSA9IDUwMjtcbmV4cG9ydCBjb25zdCBCQURfUkVRVUVTVF80MDBfU1RBVFVTX0NPREUgPSA0MDA7XG5leHBvcnQgY29uc3QgVU5BVVRIT1JJWkVEXzQwMV9TVEFUVVNfQ09ERSA9IDQwMTtcbmV4cG9ydCBjb25zdCBOT1RfQUNDRVBUQUJMRV80MDZfU1RBVFVTX0NPREUgPSA0MDY7XG5leHBvcnQgY29uc3QgUkVRVUVTVF9USU1FT1VUXzQwOF9TVEFUVVNfQ09ERSA9IDQwODtcbmV4cG9ydCBjb25zdCBUT09fTUFOWV9SRVFVRVNUU180MjlfU1RBVFVTX0NPREUgPSA0Mjk7XG5leHBvcnQgY29uc3QgTUVUSE9EX05PVF9BTExPV0VEXzQwNV9TVEFUVVNfQ09ERSA9IDQwNTtcbmV4cG9ydCBjb25zdCBTRVJWSUNFX1VOQVZBSUxBQkxFXzUwM19TVEFUVVNfQ09ERSA9IDUwMztcbmV4cG9ydCBjb25zdCBVTlBST0NFU1NBQkxFX0VOVElUWV80MjJfU1RBVFVTX0NPREUgPSA0MjI7XG5leHBvcnQgY29uc3QgSU5URVJOQUxfU0VSVkVSX0VSUk9SXzUwMF9TVEFUVVNfQ09ERSA9IDUwMDtcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFpFUk9fMF9TVEFUVVNfQ09ERSxcbiAgT0tfMjAwX1NUQVRVU19DT0RFLFxuICBGT1VORF8zMDJfU1RBVFVTX0NPREUsXG4gIENSRUFURURfMjAxX1NUQVRVU19DT0RFLFxuICBDT05GTElDVF80MDlfU1RBVFVTX0NPREUsXG4gIFNFRV9PVEhFUl8zMDNfU1RBVFVTX0NPREUsXG4gIEZPUkJJRERFTl80MDNfU1RBVFVTX0NPREUsXG4gIE5PVF9GT1VORF80MDRfU1RBVFVTX0NPREUsXG4gIE5PX0NPTlRFTlRfMjA0X1NUQVRVU19DT0RFLFxuICBCQURfR0FURVdBWV81MDJfU1RBVFVTX0NPREUsXG4gIEJBRF9SRVFVRVNUXzQwMF9TVEFUVVNfQ09ERSxcbiAgVU5BVVRIT1JJWkVEXzQwMV9TVEFUVVNfQ09ERSxcbiAgTk9UX0FDQ0VQVEFCTEVfNDA2X1NUQVRVU19DT0RFLFxuICBSRVFVRVNUX1RJTUVPVVRfNDA4X1NUQVRVU19DT0RFLFxuICBUT09fTUFOWV9SRVFVRVNUU180MjlfU1RBVFVTX0NPREUsXG4gIE1FVEhPRF9OT1RfQUxMT1dFRF80MDVfU1RBVFVTX0NPREUsXG4gIFNFUlZJQ0VfVU5BVkFJTEFCTEVfNTAzX1NUQVRVU19DT0RFLFxuICBVTlBST0NFU1NBQkxFX0VOVElUWV80MjJfU1RBVFVTX0NPREUsXG4gIElOVEVSTkFMX1NFUlZFUl9FUlJPUl81MDBfU1RBVFVTX0NPREVcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBURVhUX0hUTUxfQ09OVEVOVF9UWVBFID0gXCJ0ZXh0L2h0bWxcIjtcbmV4cG9ydCBjb25zdCBURVhUX1BMQUlOX0NPTlRFTlRfVFlQRSA9IFwidGV4dC9wbGFpblwiO1xuZXhwb3J0IGNvbnN0IEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFID0gXCJhcHBsaWNhdGlvbi9qc29uXCI7XG5leHBvcnQgY29uc3QgVEVYVF9IVE1MX0NIQVJTRVRfVVRGXzhfQ09OVEVOVF9UWVBFID0gXCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLThcIjtcbmV4cG9ydCBjb25zdCBURVhUX1BMQUlOX0NIQVJTRVRfVVRGXzhfQ09OVEVOVF9UWVBFID0gXCJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04XCI7XG5leHBvcnQgY29uc3QgQVBQTElDQVRJT05fT0NURVRfU1RSRUFNX0NPTlRFTlRfVFlQRSA9IFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCI7XG5leHBvcnQgY29uc3QgQVBQTElDQVRJT05fWF9XV1dfRk9STV9FTkNPREVEX0NPTlRFTlRfVFlQRSA9IFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCI7XG5leHBvcnQgY29uc3QgQVBQTElDQVRJT05fSlNPTl9DSEFSU0VUX1VURl84X0NPTlRFTlRfVFlQRSA9IFwiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOFwiO1xuZXhwb3J0IGNvbnN0IEFQUExJQ0FUSU9OX1hfV1dXX0ZPUk1fRU5DT0RFRF9DSEFSU0VUX1VURl84X0NPTlRFTlRfVFlQRSA9IFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PXV0Zi04XCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgVEVYVF9IVE1MX0NPTlRFTlRfVFlQRSxcbiAgVEVYVF9QTEFJTl9DT05URU5UX1RZUEUsXG4gIEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFLFxuICBURVhUX0hUTUxfQ0hBUlNFVF9VVEZfOF9DT05URU5UX1RZUEUsXG4gIFRFWFRfUExBSU5fQ0hBUlNFVF9VVEZfOF9DT05URU5UX1RZUEUsXG4gIEFQUExJQ0FUSU9OX09DVEVUX1NUUkVBTV9DT05URU5UX1RZUEUsXG4gIEFQUExJQ0FUSU9OX0pTT05fQ0hBUlNFVF9VVEZfOF9DT05URU5UX1RZUEUsXG4gIEFQUExJQ0FUSU9OX1hfV1dXX0ZPUk1fRU5DT0RFRF9DT05URU5UX1RZUEUsXG4gIEFQUExJQ0FUSU9OX1hfV1dXX0ZPUk1fRU5DT0RFRF9DSEFSU0VUX1VURl84X0NPTlRFTlRfVFlQRVxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IFpFUk9fMF9TVEFUVVNfTUVTU0FHRSA9IFwiXCI7XG5leHBvcnQgY29uc3QgT0tfMjAwX1NUQVRVU19NRVNTQUdFID0gXCJPS1wiO1xuZXhwb3J0IGNvbnN0IEZPVU5EXzMwMl9TVEFUVVNfTUVTU0FHRSA9IFwiRm91bmRcIjtcbmV4cG9ydCBjb25zdCBDUkVBVEVEXzIwMV9TVEFUVVNfTUVTU0FHRSA9IFwiQ3JlYXRlZFwiO1xuZXhwb3J0IGNvbnN0IENPTkZMSUNUXzQwOV9TVEFUVVNfTUVTU0FHRSA9IFwiQ29uZmxpY3RcIjtcbmV4cG9ydCBjb25zdCBTRUVfT1RIRVJfMzAzX1NUQVRVU19NRVNTQUdFID0gXCJTZWUgb3RoZXJcIjtcbmV4cG9ydCBjb25zdCBGT1JCSURERU5fNDAzX1NUQVRVU19NRVNTQUdFID0gXCJGb3JiaWRkZW5cIjtcbmV4cG9ydCBjb25zdCBOT1RfRk9VTkRfNDA0X1NUQVRVU19NRVNTQUdFID0gXCJOb3QgZm91bmRcIjtcbmV4cG9ydCBjb25zdCBOT19DT05URU5UXzIwNF9TVEFUVVNfTUVTU0FHRSA9IFwiTm8gY29udGVudFwiO1xuZXhwb3J0IGNvbnN0IEJBRF9HQVRFV0FZXzUwMl9TVEFUVVNfTUVTU0FHRSA9IFwiQmFkIGdhdGV3YXlcIjtcbmV4cG9ydCBjb25zdCBCQURfUkVRVUVTVF80MDBfU1RBVFVTX01FU1NBR0UgPSBcIkJhZCByZXF1ZXN0XCI7XG5leHBvcnQgY29uc3QgVU5BVVRIT1JJWkVEXzQwMV9TVEFUVVNfTUVTU0FHRSA9IFwiVW5hdXRob3JpemVkXCI7XG5leHBvcnQgY29uc3QgTk9UX0FDQ0VQVEFCTEVfNDA2X1NUQVRVU19NRVNTQUdFID0gXCJOb3QgQWNjZXB0YWJsZVwiO1xuZXhwb3J0IGNvbnN0IFJFUVVFU1RfVElNRU9VVF80MDhfU1RBVFVTX01FU1NBR0UgPSBcIlJlcXVlc3QgdGltZW91dFwiO1xuZXhwb3J0IGNvbnN0IFRPT19NQU5ZX1JFUVVFU1RTXzQyOV9TVEFUVVNfTUVTU0FHRSA9IFwiVG9vIG1hbnkgcmVxdWVzdHNcIjtcbmV4cG9ydCBjb25zdCBNRVRIT0RfTk9UX0FMTE9XRURfNDA1X1NUQVRVU19NRVNTQUdFID0gXCJNZXRob2Qgbm90IGFsbG93ZWRcIjtcbmV4cG9ydCBjb25zdCBTRVJWSUNFX1VOQVZBSUxBQkxFXzUwM19TVEFUVVNfTUVTU0FHRSA9IFwiU2VydmljZSB1bmF2YWlsYWJsZVwiO1xuZXhwb3J0IGNvbnN0IFVOUFJPQ0VTU0FCTEVfRU5USVRZXzQyMl9TVEFUVVNfTUVTU0FHRSA9IFwiVW5wcm9jZXNzYWJsZSBFbnRpdHlcIjtcbmV4cG9ydCBjb25zdCBJTlRFUk5BTF9TRVJWRVJfRVJST1JfNTAwX1NUQVRVU19NRVNTQUdFID0gXCJJbnRlcm5hbCBzZXJ2ZXIgZXJyb3JcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBaRVJPXzBfU1RBVFVTX01FU1NBR0UsXG4gIE9LXzIwMF9TVEFUVVNfTUVTU0FHRSxcbiAgRk9VTkRfMzAyX1NUQVRVU19NRVNTQUdFLFxuICBDUkVBVEVEXzIwMV9TVEFUVVNfTUVTU0FHRSxcbiAgQ09ORkxJQ1RfNDA5X1NUQVRVU19NRVNTQUdFLFxuICBTRUVfT1RIRVJfMzAzX1NUQVRVU19NRVNTQUdFLFxuICBGT1JCSURERU5fNDAzX1NUQVRVU19NRVNTQUdFLFxuICBOT1RfRk9VTkRfNDA0X1NUQVRVU19NRVNTQUdFLFxuICBOT19DT05URU5UXzIwNF9TVEFUVVNfTUVTU0FHRSxcbiAgQkFEX0dBVEVXQVlfNTAyX1NUQVRVU19NRVNTQUdFLFxuICBCQURfUkVRVUVTVF80MDBfU1RBVFVTX01FU1NBR0UsXG4gIFVOQVVUSE9SSVpFRF80MDFfU1RBVFVTX01FU1NBR0UsXG4gIE5PVF9BQ0NFUFRBQkxFXzQwNl9TVEFUVVNfTUVTU0FHRSxcbiAgUkVRVUVTVF9USU1FT1VUXzQwOF9TVEFUVVNfTUVTU0FHRSxcbiAgVE9PX01BTllfUkVRVUVTVFNfNDI5X1NUQVRVU19NRVNTQUdFLFxuICBNRVRIT0RfTk9UX0FMTE9XRURfNDA1X1NUQVRVU19NRVNTQUdFLFxuICBTRVJWSUNFX1VOQVZBSUxBQkxFXzUwM19TVEFUVVNfTUVTU0FHRSxcbiAgVU5QUk9DRVNTQUJMRV9FTlRJVFlfNDIyX1NUQVRVU19NRVNTQUdFLFxuICBJTlRFUk5BTF9TRVJWRVJfRVJST1JfNTAwX1NUQVRVU19NRVNTQUdFXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgWkVSTyA9IFwiMFwiO1xuZXhwb3J0IGNvbnN0IERBVEEgPSBcImRhdGFcIjtcbmV4cG9ydCBjb25zdCBFUlJPUiA9IFwiZXJyb3JcIjtcbmV4cG9ydCBjb25zdCBTVFJJTkcgPSBcInN0cmluZ1wiO1xuZXhwb3J0IGNvbnN0IE5VTUJFUiA9IFwibnVtYmVyXCI7XG5leHBvcnQgY29uc3QgQk9PTEVBTiA9IFwiYm9vbGVhblwiO1xuZXhwb3J0IGNvbnN0IERFRkFVTFQgPSBcImRlZmF1bHRcIjtcbmV4cG9ydCBjb25zdCBGVU5DVElPTiA9IFwiZnVuY3Rpb25cIjtcbmV4cG9ydCBjb25zdCBFTlZJUk9OTUVOVCA9IFwiRU5WSVJPTk1FTlRcIjtcbmV4cG9ydCBjb25zdCBFTVBUWV9TVFJJTkcgPSBcIlwiO1xuZXhwb3J0IGNvbnN0IERPVUJMRV9TUEFDRSA9IFwiICBcIjtcbmV4cG9ydCBjb25zdCBQQUNLQUdFX0pTT04gPSBcInBhY2thZ2UuanNvblwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gZmlyc3QoYXJyYXkpIHsgcmV0dXJuIGFycmF5WzBdO31cblxuZXhwb3J0IGZ1bmN0aW9uIHNlY29uZChhcnJheSkgeyByZXR1cm4gYXJyYXlbMV07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIHRoaXJkKGFycmF5KSB7IHJldHVybiBhcnJheVsyXTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gZm91cnRoKGFycmF5KSB7IHJldHVybiBhcnJheVszXTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gZmlmdGgoYXJyYXkpIHsgcmV0dXJuIGFycmF5WzRdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBzaXh0aChhcnJheSkgeyByZXR1cm4gYXJyYXlbNV07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldmVudGgoYXJyYXkpIHsgcmV0dXJuIGFycmF5WzZdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBlaWdodGgoYXJyYXkpIHsgcmV0dXJuIGFycmF5WzddOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBuaW50aChhcnJheSkgeyByZXR1cm4gYXJyYXlbOF07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlbnRoKGFycmF5KSB7IHJldHVybiBhcnJheVs5XTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gZmlyc3RMYXN0KGFycmF5KSB7IHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSAxXTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gc2Vjb25kTGFzdChhcnJheSkgeyByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gMl07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIHRoaXJkTGFzdChhcnJheSkgeyByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gM107IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvdXJ0aExhc3QoYXJyYXkpIHsgcmV0dXJuIGFycmF5W2FycmF5Lmxlbmd0aCAtIDRdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWZ0aExhc3QoYXJyYXkpIHsgcmV0dXJuIGFycmF5W2FycmF5Lmxlbmd0aCAtIDVdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBzaXh0aExhc3QoYXJyYXkpIHsgcmV0dXJuIGFycmF5W2FycmF5Lmxlbmd0aCAtIDZdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXZlbnRoTGFzdChhcnJheSkgeyByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gN107IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGVpZ2h0aExhc3QoYXJyYXkpIHsgcmV0dXJuIGFycmF5W2FycmF5Lmxlbmd0aCAtIDhdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBuaW50aExhc3QoYXJyYXkpIHsgcmV0dXJuIGFycmF5W2FycmF5Lmxlbmd0aCAtIDldOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBsYXN0KGFycmF5KSB7IHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSAxXTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gaGVhZChhcnJheSkgeyByZXR1cm4gYXJyYXkuc2xpY2UoMCwgMSk7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIHRhaWwoYXJyYXkpIHsgcmV0dXJuIGFycmF5LnNsaWNlKDEpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBiYWNrKGFycmF5KSB7IHJldHVybiBhcnJheS5zbGljZShhcnJheS5sZW5ndGggLSAxKTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gZnJvbnQoYXJyYXkpIHsgcmV0dXJuIGFycmF5LnNsaWNlKDAsIE1hdGgubWF4KDEsIGFycmF5Lmxlbmd0aCAtIDEpKTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gcHVzaChhcnJheUEsIGFycmF5QikgeyBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShhcnJheUEsIGFycmF5Qik7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuc2hpZnQoYXJyYXlBLCBhcnJheUIpIHsgQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuYXBwbHkoYXJyYXlBLCBhcnJheUIpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25jYXQoYXJyYXlBLCBlbGVtZW50T3JBcnJheTIpIHtcbiAgY29uc3QgYXJyYXlCID0gKGVsZW1lbnRPckFycmF5MiBpbnN0YW5jZW9mIEFycmF5KSA/XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRPckFycmF5MiA6XG4gICAgICAgICAgICAgICAgICAgICBbIGVsZW1lbnRPckFycmF5MiBdO1xuICBcbiAgcHVzaChhcnJheUEsIGFycmF5Qik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhcihhcnJheSkge1xuICBjb25zdCBzdGFydCA9IDA7XG4gIFxuICByZXR1cm4gYXJyYXkuc3BsaWNlKHN0YXJ0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvcHkoYXJyYXlBLCBhcnJheUIpIHtcbiAgY29uc3Qgc3RhcnQgPSAwLFxuICAgICAgICBkZWxldGVDb3VudCA9IGFycmF5Qi5sZW5ndGg7ICAvLy9cbiAgXG4gIHNwbGljZShhcnJheUEsIHN0YXJ0LCBkZWxldGVDb3VudCwgYXJyYXlCKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlKGFycmF5QSwgYXJyYXlCKSB7IEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGFycmF5QSwgYXJyYXlCKTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2goYXJyYXlBLCBhcnJheUIsIGNhbGxiYWNrKSB7XG4gIGxldCBtYXRjaGVzID0gZmFsc2U7XG5cbiAgY29uc3QgYXJyYXlBTGVuZ3RoID0gYXJyYXlBLmxlbmd0aCxcbiAgICAgICAgYXJyYXlCTGVuZ3RoID0gYXJyYXlCLmxlbmd0aDtcblxuICBpZiAoYXJyYXlBTGVuZ3RoID09PSBhcnJheUJMZW5ndGgpIHtcbiAgICBtYXRjaGVzID0gYXJyYXlBLmV2ZXJ5KChlbGVtZW50QSwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IGVsZW1lbnRCID0gYXJyYXlCW2luZGV4XSxcbiAgICAgICAgICAgIHBhc3NlZCA9IGNhbGxiYWNrKGVsZW1lbnRBLCBlbGVtZW50QiwgaW5kZXgpO1xuXG4gICAgICBpZiAocGFzc2VkKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG1hdGNoZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wYXJlKGFycmF5QSwgYXJyYXlCLCBjYWxsYmFjaykge1xuICBsZXQgY291cGxlZCA9IGZhbHNlO1xuXG4gIGNvbnN0IGFycmF5QUxlbmd0aCA9IGFycmF5QS5sZW5ndGgsXG4gICAgICAgIGFycmF5Qkxlbmd0aCA9IGFycmF5Qi5sZW5ndGg7XG5cbiAgaWYgKGFycmF5QUxlbmd0aCA9PT0gYXJyYXlCTGVuZ3RoKSB7XG4gICAgYXJyYXlCID0gWyAgLy8vXG4gICAgICAuLi5hcnJheUJcbiAgICBdO1xuXG4gICAgY291cGxlZCA9IGFycmF5QS5ldmVyeSgoZWxlbWVudEEsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBlbGVtZW50QiA9IGV4dHJhY3QoYXJyYXlCLCAoZWxlbWVudEIpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY2FsbGJhY2soZWxlbWVudEEsIGVsZW1lbnRCKTtcblxuICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pIHx8IG51bGw7XG5cbiAgICAgIGlmIChlbGVtZW50QiAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBjb3VwbGVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29ycmVsYXRlKGFycmF5QSwgYXJyYXlCLCBjYWxsYmFjaykge1xuICBhcnJheUIgPSBbICAvLy9cbiAgICAuLi5hcnJheUJcbiAgXTtcblxuICBjb25zdCBjb3JyZWxhdGVzID0gYXJyYXlBLmV2ZXJ5KChlbGVtZW50QSkgPT4ge1xuICAgIGNvbnN0IGVsZW1lbnRCID0gZXh0cmFjdChhcnJheUIsIChlbGVtZW50QikgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gY2FsbGJhY2soZWxlbWVudEEsIGVsZW1lbnRCKTtcblxuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KSB8fCBudWxsO1xuXG4gICAgaWYgKGVsZW1lbnRCICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBjb3JyZWxhdGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZShhcnJheUEsIGFycmF5QiwgY2FsbGJhY2spIHtcbiAgbGV0IHJlc29sdmVkO1xuXG4gIGFycmF5QSA9IFsgIC8vL1xuICAgIC4uLmFycmF5QVxuICBdO1xuXG4gIGZvciAoOzspIHtcbiAgICBjb25zdCBhcnJheUFMZW5ndGggPSBhcnJheUEubGVuZ3RoO1xuXG4gICAgaWYgKGFycmF5QUxlbmd0aCA9PT0gMCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgbGV0IHJlc29sdmVkID0gZmFsc2U7XG5cbiAgICBhcnJheUEuZm9yRWFjaCgoZWxlbWVudEEpID0+IHtcbiAgICAgIGNvbnN0IHBhc3NlZCA9IGNhbGxiYWNrKGVsZW1lbnRBKTtcblxuICAgICAgaWYgKHBhc3NlZCkge1xuICAgICAgICBjb25zdCBlbGVtZW50QiA9IGVsZW1lbnRBOyAgLy8vXG5cbiAgICAgICAgYXJyYXlCLnB1c2goZWxlbWVudEIpO1xuXG4gICAgICAgIHJlc29sdmVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICghcmVzb2x2ZWQpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGZpbHRlcihhcnJheUEsIChlbGVtZW50QSkgPT4ge1xuICAgICAgY29uc3QgYXJyYXlCSW5jbHVkZXNFbGVtZW50QSA9IGFycmF5Qi5pbmNsdWRlcyhlbGVtZW50QSk7XG5cbiAgICAgIGlmICghYXJyYXlCSW5jbHVkZXNFbGVtZW50QSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IGFycmF5QUxlbmd0aCA9IGFycmF5QS5sZW5ndGg7XG5cbiAgcmVzb2x2ZWQgPSAoYXJyYXlBTGVuZ3RoID09PSAwKTtcblxuICByZXR1cm4gcmVzb2x2ZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBlbGVtZW50cyA9IFtdO1xuXG4gIGZvcndhcmRzRm9yRWFjaChhcnJheSwgKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgcGFzc2VkID0gY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHBhc3NlZCkge1xuICAgICAgZWxlbWVudHMucHVzaChlbGVtZW50KTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBlbGVtZW50cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2UoYXJyYXksIGVsZW1lbnQsIGNhbGxiYWNrKSB7XG4gIGxldCBzdGFydDtcbiAgXG4gIGNvbnN0IGZvdW5kID0gYXJyYXkuc29tZSgoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAocGFzc2VkKSB7XG4gICAgICBzdGFydCA9IGluZGV4OyAgLy8vXG4gICAgICBcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG4gIFxuICBpZiAoZm91bmQpIHtcbiAgICBjb25zdCBkZWxldGVDb3VudCA9IDE7XG5cbiAgICBhcnJheS5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50LCBlbGVtZW50KTtcbiAgfVxuXG4gIHJldHVybiBmb3VuZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNwbGljZShhcnJheUEsIHN0YXJ0LCBkZWxldGVDb3VudCA9IEluZmluaXR5LCBhcnJheUIgPSBbXSkge1xuICBjb25zdCBhcmdzID0gWyBzdGFydCwgZGVsZXRlQ291bnQsIC4uLmFycmF5QiBdLFxuICAgICAgICBkZWxldGVkRWxlbWVudHMgPSBBcnJheS5wcm90b3R5cGUuc3BsaWNlLmFwcGx5KGFycmF5QSwgYXJncyk7XG5cbiAgcmV0dXJuIGRlbGV0ZWRFbGVtZW50cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlcihhcnJheSwgY2FsbGJhY2spIHtcbiAgY29uc3QgZGVsZXRlZEVsZW1lbnRzID0gW107XG4gIFxuICBiYWNrd2FyZHNGb3JFYWNoKGFycmF5LCAoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAoIXBhc3NlZCkge1xuICAgICAgY29uc3Qgc3RhcnQgPSBpbmRleCwgIC8vL1xuICAgICAgICAgICAgZGVsZXRlQ291bnQgPSAxLFxuICAgICAgICAgICAgZGVsZXRlZEVsZW1lbnRzID0gYXJyYXkuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCksXG4gICAgICAgICAgICBmaXJzdERlbGV0ZWRFbGVtZW50ID0gZmlyc3QoZGVsZXRlZEVsZW1lbnRzKTtcbiAgICAgIFxuICAgICAgZGVsZXRlZEVsZW1lbnRzLnVuc2hpZnQoZmlyc3REZWxldGVkRWxlbWVudCk7ICAvLy9cbiAgICB9XG4gIH0pO1xuICBcbiAgcmV0dXJuIGRlbGV0ZWRFbGVtZW50cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBydW5lKGFycmF5LCBjYWxsYmFjaykge1xuICBsZXQgZGVsZXRlZEVsZW1lbnQgPSB1bmRlZmluZWQ7XG4gIFxuICBhcnJheS5zb21lKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IGNhbGxiYWNrKGVsZW1lbnQsIGluZGV4KTtcblxuICAgIGlmICghcGFzc2VkKSB7XG4gICAgICBjb25zdCBzdGFydCA9IGluZGV4LCAgLy8vXG4gICAgICAgICAgICBkZWxldGVDb3VudCA9IDEsXG4gICAgICAgICAgICBkZWxldGVkRWxlbWVudHMgPSBhcnJheS5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50KSxcbiAgICAgICAgICAgIGZpcnN0RGVsZXRlZEVsZW1lbnQgPSBmaXJzdChkZWxldGVkRWxlbWVudHMpO1xuICAgICAgXG4gICAgICBkZWxldGVkRWxlbWVudCA9IGZpcnN0RGVsZXRlZEVsZW1lbnQ7ICAvLy9cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcbiAgXG4gIHJldHVybiBkZWxldGVkRWxlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3QoYXJyYXksIGNhbGxiYWNrKSB7XG4gIGxldCBkZWxldGVkRWxlbWVudCA9IHVuZGVmaW5lZDtcblxuICBhcnJheS5zb21lKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IGNhbGxiYWNrKGVsZW1lbnQsIGluZGV4KTtcblxuICAgIGlmIChwYXNzZWQpIHtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gaW5kZXgsICAvLy9cbiAgICAgICAgICAgIGRlbGV0ZUNvdW50ID0gMSxcbiAgICAgICAgICAgIGRlbGV0ZWRFbGVtZW50cyA9IGFycmF5LnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQpLFxuICAgICAgICAgICAgZmlyc3REZWxldGVkRWxlbWVudCA9IGZpcnN0KGRlbGV0ZWRFbGVtZW50cyk7XG5cbiAgICAgIGRlbGV0ZWRFbGVtZW50ID0gZmlyc3REZWxldGVkRWxlbWVudDsgIC8vL1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBkZWxldGVkRWxlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGNoKGFycmF5LCBlbGVtZW50LCBjYWxsYmFjaykge1xuICBjb25zdCBmb3VuZCA9IGFycmF5LnNvbWUoKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgcGFzc2VkID0gY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHBhc3NlZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuXG4gIGlmIChmb3VuZCkge1xuICAgIGFycmF5LnB1c2goZWxlbWVudCk7XG4gIH1cblxuICByZXR1cm4gZm91bmQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wcmVzcyhhcnJheSwgY2FsbGJhY2spIHtcbiAgbGV0IGluZGV4MSA9IDAsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgd2hpbGUgKGluZGV4MSA8IGxlbmd0aCkge1xuICAgIGNvbnN0IGVsZW1lbnRCID0gYXJyYXlbaW5kZXgxXTtcblxuICAgIGZvciAobGV0IGluZGV4MiA9IGxlbmd0aCAtIDE7IGluZGV4MiA+IGluZGV4MTsgaW5kZXgyLS0pIHtcbiAgICAgIGNvbnN0IGVsZW1lbnRBID0gYXJyYXlbaW5kZXgyXSxcbiAgICAgICAgICAgIHBhc3NlZCA9IGNhbGxiYWNrKGVsZW1lbnRBLCBlbGVtZW50Qik7XG5cbiAgICAgIGlmICghcGFzc2VkKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gaW5kZXgyLCAvLy9cbiAgICAgICAgICAgICAgZGVsZXRlQ291bnQgPSAxO1xuXG4gICAgICAgIGFycmF5LnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGluZGV4MSsrO1xuXG4gICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lKGFycmF5QSwgYXJyYXlCLCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheSA9IFtcbiAgICAuLi5hcnJheUEsXG4gICAgLi4uYXJyYXlCXG4gIF07XG5cbiAgY29tcHJlc3MoYXJyYXksIGNhbGxiYWNrKTtcblxuICByZXR1cm4gYXJyYXk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXZlcnNlKGFycmF5KSB7XG4gIGFycmF5ID0gWyAvLy9cbiAgICAuLi5hcnJheVxuICBdLnJldmVyc2UoKTtcblxuICByZXR1cm4gYXJyYXk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhdWdtZW50KGFycmF5QSwgYXJyYXlCLCBjYWxsYmFjaykge1xuICBhcnJheUIuZm9yRWFjaCgoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAocGFzc2VkKSB7XG4gICAgICBhcnJheUEucHVzaChlbGVtZW50KTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VwYXJhdGUoYXJyYXksIGFycmF5QSwgYXJyYXlCLCBjYWxsYmFjaykge1xuICBhcnJheS5mb3JFYWNoKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IGNhbGxiYWNrKGVsZW1lbnQsIGluZGV4KTtcblxuICAgIHBhc3NlZCA/XG4gICAgICBhcnJheUEucHVzaChlbGVtZW50KSA6XG4gICAgICAgIGFycmF5Qi5wdXNoKGVsZW1lbnQpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmRzRmluZChhcnJheSwgY2FsbGJhY2spIHtcbiAgY29uc3QgYXJyYXlMZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFycmF5TGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAocGFzc2VkKSB7XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNGaW5kKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IGFycmF5TGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF0sXG4gICAgICAgICAgcGFzc2VkID0gY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHBhc3NlZCkge1xuICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNTb21lKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlMZW5ndGg7IGluZGV4KyspIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdLFxuICAgICAgICAgIHBhc3NlZCA9IGNhbGxiYWNrKGVsZW1lbnQsIGluZGV4KTtcbiAgICBcbiAgICBpZiAocGFzc2VkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNTb21lKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IGFycmF5TGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF0sXG4gICAgICAgICAgcGFzc2VkID0gY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHBhc3NlZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNFdmVyeShhcnJheSwgY2FsbGJhY2spIHtcbiAgY29uc3QgYXJyYXlMZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFycmF5TGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAoIXBhc3NlZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFja3dhcmRzRXZlcnkoYXJyYXksIGNhbGxiYWNrKSB7XG4gIGNvbnN0IGFycmF5TGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZvciAobGV0IGluZGV4ID0gYXJyYXlMZW5ndGggLSAxOyBpbmRleCA+PSAwOyBpbmRleC0tKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAoIXBhc3NlZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNSZWR1Y2UoYXJyYXksIGNhbGxiYWNrLCBpbml0aWFsVmFsdWUpIHtcbiAgbGV0IHZhbHVlID0gaW5pdGlhbFZhbHVlOyAvLy9cblxuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlMZW5ndGg7IGluZGV4KyspIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgdmFsdWUgPSBjYWxsYmFjayh2YWx1ZSwgZWxlbWVudCwgaW5kZXgpO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFja3dhcmRzUmVkdWNlKGFycmF5LCBjYWxsYmFjaywgaW5pdGlhbFZhbHVlKSB7XG4gIGxldCB2YWx1ZSA9IGluaXRpYWxWYWx1ZTsgLy8vXG5cbiAgY29uc3QgYXJyYXlMZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZm9yIChsZXQgaW5kZXggPSBhcnJheUxlbmd0aCAtIDE7IGluZGV4ID49IDA7IGluZGV4LS0pIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgdmFsdWUgPSBjYWxsYmFjayh2YWx1ZSwgZWxlbWVudCwgaW5kZXgpO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNGb3JFYWNoKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlMZW5ndGg7IGluZGV4KyspIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNGb3JFYWNoKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IGFycmF5TGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmRzRmluZEluZGV4KGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlMZW5ndGg7IGluZGV4KyspIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdLFxuICAgICAgICAgIHBhc3NlZCA9IGNhbGxiYWNrKGVsZW1lbnQsIGluZGV4KTtcblxuICAgIGlmIChwYXNzZWQpIHtcbiAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gLTE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNGaW5kSW5kZXgoYXJyYXksIGNhbGxiYWNrKSB7XG4gIGNvbnN0IGFycmF5TGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZvciAobGV0IGluZGV4ID0gYXJyYXlMZW5ndGggLSAxOyBpbmRleCA+PSAwOyBpbmRleC0tKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAocGFzc2VkKSB7XG4gICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIC0xO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGZpcnN0LFxuICBzZWNvbmQsXG4gIHRoaXJkLFxuICBmb3VydGgsXG4gIGZpZnRoLFxuICBzaXh0aCxcbiAgc2V2ZW50aCxcbiAgZWlnaHRoLFxuICBuaW50aCxcbiAgZmlyc3RMYXN0LFxuICBzZWNvbmRMYXN0LFxuICB0aGlyZExhc3QsXG4gIGZvdXJ0aExhc3QsXG4gIGZpZnRoTGFzdCxcbiAgc2l4dGhMYXN0LFxuICBzZXZlbnRoTGFzdCxcbiAgZWlnaHRoTGFzdCxcbiAgbmludGhMYXN0LFxuICBsYXN0LFxuICBoZWFkLFxuICB0YWlsLFxuICBiYWNrLFxuICBmcm9udCxcbiAgcHVzaCxcbiAgdW5zaGlmdCxcbiAgY29uY2F0LFxuICBjbGVhcixcbiAgY29weSxcbiAgbWVyZ2UsXG4gIG1hdGNoLFxuICBjb21wYXJlLFxuICBjb3JyZWxhdGUsXG4gIHJlc29sdmUsXG4gIGZpbmQsXG4gIHJlcGxhY2UsXG4gIHNwbGljZSxcbiAgZmlsdGVyLFxuICBwcnVuZSxcbiAgZXh0cmFjdCxcbiAgcGF0Y2gsXG4gIGNvbXByZXNzLFxuICBjb21iaW5lLFxuICByZXZlcnNlLFxuICBhdWdtZW50LFxuICBzZXBhcmF0ZSxcbiAgZm9yd2FyZHNGaW5kLFxuICBiYWNrd2FyZHNGaW5kLFxuICBmb3J3YXJkc1NvbWUsXG4gIGJhY2t3YXJkc1NvbWUsXG4gIGZvcndhcmRzRXZlcnksXG4gIGJhY2t3YXJkc0V2ZXJ5LFxuICBmb3J3YXJkc1JlZHVjZSxcbiAgYmFja3dhcmRzUmVkdWNlLFxuICBmb3J3YXJkc0ZvckVhY2gsXG4gIGJhY2t3YXJkc0ZvckVhY2gsXG4gIGZvcndhcmRzRmluZEluZGV4LFxuICBiYWNrd2FyZHNGaW5kSW5kZXhcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGZpcnN0LCBzZWNvbmQsIGxhc3QgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1BhdGhOYW1lKHBhdGgpIHtcbiAgcGF0aCA9IHBhdGgucmVwbGFjZSgvXlxcLy8sIEVNUFRZX1NUUklORykucmVwbGFjZSgvXFwvJC8sIEVNUFRZX1NUUklORyk7IC8vL1xuXG4gIGNvbnN0IHBhdGhOYW1lID0gKC9cXC8vLnRlc3QocGF0aCkgPT09IGZhbHNlKTtcblxuICByZXR1cm4gcGF0aE5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1BhdGhUb3Btb3N0TmFtZShwYXRoKSB7XG4gIGNvbnN0IHBhdGhOYW1lID0gaXNQYXRoTmFtZShwYXRoKSxcbiAgICAgICAgcGF0aEFic29sdXRlUGF0aCA9IGlzUGF0aEFic29sdXRlUGF0aChwYXRoKSxcbiAgICAgICAgcGF0aFRvcG1vc3ROYW1lID0gKHBhdGhOYW1lICYmIHBhdGhBYnNvbHV0ZVBhdGgpO1xuXG4gIHJldHVybiBwYXRoVG9wbW9zdE5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1BhdGhSZWxhdGl2ZVBhdGgocGF0aCkge1xuICBjb25zdCBwYXRoUmVsYXRpdmVQYXRoID0gIS9eXFwvLy50ZXN0KHBhdGgpO1xuXG4gIHJldHVybiBwYXRoUmVsYXRpdmVQYXRoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQYXRoQWJzb2x1dGVQYXRoKHBhdGgpIHtcbiAgY29uc3QgcGF0aEFic29sdXRlUGF0aCA9IC9eXFwvLy50ZXN0KHBhdGgpO1xuXG4gIHJldHVybiBwYXRoQWJzb2x1dGVQYXRoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUb3Btb3N0TmFtZUluQWJzb2x1dGVQYXRoKHRvcG1vc3ROYW1lLCBhYnNvbHV0ZVBhdGgpIHtcbiAgY29uc3QgcmVnRXhwID0gbmV3IFJlZ0V4cChgXiR7dG9wbW9zdE5hbWV9KD86XFxcXC8uKyk/JGApLFxuICAgICAgICB0b3Btb3N0TmFtZUluQWJzb2x1dGVQYXRoID0gcmVnRXhwLnRlc3QoYWJzb2x1dGVQYXRoKTtcblxuICByZXR1cm4gdG9wbW9zdE5hbWVJbkFic29sdXRlUGF0aFxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tYmluZVBhdGhzKHBhdGgsIHJlbGF0aXZlUGF0aCkge1xuICBsZXQgY29tYmluZWRQYXRoID0gbnVsbDtcblxuICBjb25zdCBwYXRoTmFtZXMgPSBwYXRoLnNwbGl0KC9cXC8vKSxcbiAgICAgICAgcmVsYXRpdmVQYXRoTmFtZXMgPSByZWxhdGl2ZVBhdGguc3BsaXQoL1xcLy8pO1xuXG4gIGxldCBsYXN0UGF0aE5hbWUsXG4gICAgICBmaXJzdFJlbGF0aXZlUGF0aE5hbWUgPSBmaXJzdChyZWxhdGl2ZVBhdGhOYW1lcyk7XG5cbiAgaWYgKGZpcnN0UmVsYXRpdmVQYXRoTmFtZSA9PT0gXCIuXCIpIHtcbiAgICByZWxhdGl2ZVBhdGhOYW1lcy5zaGlmdCgpO1xuICB9XG5cbiAgZmlyc3RSZWxhdGl2ZVBhdGhOYW1lID0gZmlyc3QocmVsYXRpdmVQYXRoTmFtZXMpO1xuICBsYXN0UGF0aE5hbWUgPSBsYXN0KHBhdGhOYW1lcyk7XG5cbiAgd2hpbGUgKChmaXJzdFJlbGF0aXZlUGF0aE5hbWUgPT09IFwiLi5cIikgJiYgKGxhc3RQYXRoTmFtZSAhPT0gdW5kZWZpbmVkKSkge1xuICAgIHJlbGF0aXZlUGF0aE5hbWVzLnNoaWZ0KCk7XG4gICAgcGF0aE5hbWVzLnBvcCgpO1xuXG4gICAgZmlyc3RSZWxhdGl2ZVBhdGhOYW1lID0gZmlyc3QocmVsYXRpdmVQYXRoTmFtZXMpO1xuICAgIGxhc3RQYXRoTmFtZSA9IGxhc3QocGF0aE5hbWVzKTtcbiAgfVxuXG4gIGlmIChsYXN0UGF0aE5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IGNvbWJpbmVkUGF0aE5hbWVzID0gW10uY29uY2F0KHBhdGhOYW1lcykuY29uY2F0KHJlbGF0aXZlUGF0aE5hbWVzKTtcblxuICAgIGNvbWJpbmVkUGF0aCA9IGNvbWJpbmVkUGF0aE5hbWVzLmpvaW4oXCIvXCIpO1xuICB9XG5cbiAgcmV0dXJuIGNvbWJpbmVkUGF0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmNhdGVuYXRlUGF0aHMocGF0aCwgcmVsYXRpdmVQYXRoLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgbGV0IGNvbmNhdGVuYXRlZFBhdGg7XG5cbiAgcGF0aCA9IHBhdGgucmVwbGFjZSgvXFwvJC8sIEVNUFRZX1NUUklORyk7ICAvLy9cblxuICBjb25jYXRlbmF0ZWRQYXRoID0gYCR7cGF0aH0vJHtyZWxhdGl2ZVBhdGh9YDtcblxuICBjb25zdCByZW1haW5pbmdBQXJndW1lbnRzTGVuZ3RoID0gcmVtYWluaW5nQXJndW1lbnRzLmxlbmd0aDtcblxuICBpZiAocmVtYWluaW5nQUFyZ3VtZW50c0xlbmd0aCA+IDApIHtcbiAgICBjb25zdCBwYXRoID0gY29uY2F0ZW5hdGVkUGF0aCwgIC8vL1xuICAgICAgICAgIHJlbGF0aXZlUGF0aCA9IHJlbWFpbmluZ0FyZ3VtZW50cy5zaGlmdCgpO1xuXG4gICAgY29uY2F0ZW5hdGVkUGF0aCA9IGNvbmNhdGVuYXRlUGF0aHMocGF0aCwgcmVsYXRpdmVQYXRoLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpO1xuICB9XG5cbiAgcmV0dXJuIGNvbmNhdGVuYXRlZFBhdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBib3R0b21tb3N0TmFtZUZyb21QYXRoKHBhdGgpIHtcbiAgbGV0IGJvdHRvbW1vc3ROYW1lID0gbnVsbDtcblxuICBjb25zdCBtYXRjaGVzID0gcGF0aC5tYXRjaCgvXi4qXFwvKFteXFwvXStcXC8/KSQvKTtcblxuICBpZiAobWF0Y2hlcyAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHNlY29uZE1hdGNoID0gc2Vjb25kKG1hdGNoZXMpO1xuXG4gICAgYm90dG9tbW9zdE5hbWUgPSBzZWNvbmRNYXRjaDsgIC8vL1xuICB9XG5cbiAgcmV0dXJuIGJvdHRvbW1vc3ROYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9wbW9zdERpcmVjdG9yeVBhdGhGcm9tUGF0aChwYXRoKSB7XG4gIGNvbnN0IG1hdGNoZXMgPSBwYXRoLm1hdGNoKC9eKC4rKVxcL1teXFwvXStcXC8/JC8pLFxuICAgICAgICBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKSxcbiAgICAgICAgdG9wbW9zdERpcmVjdG9yeVBhdGggPSBzZWNvbmRNYXRjaDsgLy8vXG5cbiAgcmV0dXJuIHRvcG1vc3REaXJlY3RvcnlQYXRoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9wbW9zdERpcmVjdG9yeU5hbWVGcm9tUGF0aChwYXRoKSB7XG4gIGxldCB0b3Btb3N0RGlyZWN0b3J5TmFtZSA9IG51bGw7XG5cbiAgY29uc3QgbWF0Y2hlcyA9IHBhdGgubWF0Y2goL14oW15cXC9dKylcXC8uKyQvKTtcblxuICBpZiAobWF0Y2hlcyAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHNlY29uZE1hdGNoID0gc2Vjb25kKG1hdGNoZXMpO1xuXG4gICAgdG9wbW9zdERpcmVjdG9yeU5hbWUgPSBzZWNvbmRNYXRjaDsgIC8vL1xuICB9XG5cbiAgcmV0dXJuIHRvcG1vc3REaXJlY3RvcnlOYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0aFdpdGhvdXRCb3R0b21tb3N0TmFtZUZyb21QYXRoKHBhdGgpIHtcbiAgbGV0IHBhdGhXaXRob3V0Qm90dG9tbW9zdE5hbWUgPSBudWxsO1xuXG4gIGNvbnN0IG1hdGNoZXMgPSBwYXRoLm1hdGNoKC9eKC4qKVxcL1teXFwvXStcXC8/JC8pO1xuXG4gIGlmIChtYXRjaGVzICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyk7XG5cbiAgICBwYXRoV2l0aG91dEJvdHRvbW1vc3ROYW1lID0gc2Vjb25kTWF0Y2g7IC8vL1xuICB9XG5cbiAgcmV0dXJuIHBhdGhXaXRob3V0Qm90dG9tbW9zdE5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRoV2l0aG91dFRvcG1vc3REaXJlY3RvcnlOYW1lRnJvbVBhdGgocGF0aCkge1xuICBsZXQgcGF0aFdpdGhvdXRUb3Btb3N0RGlyZWN0b3J5TmFtZSA9IG51bGw7XG5cbiAgY29uc3QgbWF0Y2hlcyA9IHBhdGgubWF0Y2goL15bXlxcL10rXFwvKC4rKSQvKTtcblxuICBpZiAobWF0Y2hlcyAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHNlY29uZE1hdGNoID0gc2Vjb25kKG1hdGNoZXMpO1xuXG4gICAgcGF0aFdpdGhvdXRUb3Btb3N0RGlyZWN0b3J5TmFtZSA9IHNlY29uZE1hdGNoO1xuICB9XG5cbiAgcmV0dXJuIHBhdGhXaXRob3V0VG9wbW9zdERpcmVjdG9yeU5hbWU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgaXNQYXRoTmFtZSxcbiAgaXNQYXRoVG9wbW9zdE5hbWUsXG4gIGlzUGF0aFJlbGF0aXZlUGF0aCxcbiAgaXNQYXRoQWJzb2x1dGVQYXRoLFxuICBpc1RvcG1vc3ROYW1lSW5BYnNvbHV0ZVBhdGgsXG4gIGNvbWJpbmVQYXRocyxcbiAgY29uY2F0ZW5hdGVQYXRocyxcbiAgYm90dG9tbW9zdE5hbWVGcm9tUGF0aCxcbiAgdG9wbW9zdERpcmVjdG9yeVBhdGhGcm9tUGF0aCxcbiAgdG9wbW9zdERpcmVjdG9yeU5hbWVGcm9tUGF0aCxcbiAgcGF0aFdpdGhvdXRCb3R0b21tb3N0TmFtZUZyb21QYXRoLFxuICBwYXRoV2l0aG91dFRvcG1vc3REaXJlY3RvcnlOYW1lRnJvbVBhdGhcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNlY29uZCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IENPTE9OX0NIQVJBQ1RFUiwgQU1QRVJTQU5EX0NIQVJBQ1RFUiB9IGZyb20gXCIuLi9jaGFyYWN0ZXJzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBvdmVyd3JpdGUoaGVhZGVycywgbmFtZSwgdmFsdWUpIHtcbiAgY29uc3QgbG93ZXJDYXNlTmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgZXhpc3RpbmdOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGhlYWRlcnMpLCAgLy8vXG4gICAgICAgIGV4aXN0aW5nTmFtZSA9IGV4aXN0aW5nTmFtZXMuZmluZCgoZXhpc3RpbmdOYW1lKSA9PiB7XG4gICAgICAgICAgY29uc3QgZXhpc3RpbmdMb3dlckNhc2VOYW1lID0gZXhpc3RpbmdOYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgICAgICBpZiAoZXhpc3RpbmdMb3dlckNhc2VOYW1lID09PSBsb3dlckNhc2VOYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pIHx8IG51bGw7XG5cbiAgaWYgKGV4aXN0aW5nTmFtZSAhPT0gbnVsbCkge1xuICAgIGhlYWRlcnNbZXhpc3RpbmdOYW1lXSA9IHZhbHVlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bmRlcndyaXRlKGhlYWRlcnMsIG5hbWUsIHZhbHVlKSB7XG4gIGNvbnN0IGxvd2VyQ2FzZU5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCksXG4gICAgICAgIGV4aXN0aW5nTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhoZWFkZXJzKSwgIC8vL1xuICAgICAgICBleGlzdGluZ05hbWUgPSBleGlzdGluZ05hbWVzLmZpbmQoKGV4aXN0aW5nTmFtZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGV4aXN0aW5nTG93ZXJDYXNlTmFtZSA9IGV4aXN0aW5nTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgICAgaWYgKGV4aXN0aW5nTG93ZXJDYXNlTmFtZSA9PT0gbG93ZXJDYXNlTmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KSB8fCBudWxsO1xuXG4gIGlmIChleGlzdGluZ05hbWUgPT09IG51bGwpIHtcbiAgICBoZWFkZXJzW25hbWVdID0gdmFsdWU7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBvcnRGcm9tSG9zdChob3N0KSB7XG4gIGxldCBwb3J0O1xuXG4gIGNvbnN0IG1hdGNoZXMgPSBob3N0Lm1hdGNoKC9eaHR0cHM/OlxcL1xcLyhbXlxcL10rKS8pLFxuICAgICAgICBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKSxcbiAgICAgICAgaW5kZXggPSBzZWNvbmRNYXRjaC5pbmRleE9mKENPTE9OX0NIQVJBQ1RFUik7XG5cbiAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgIGNvbnN0IHNlY3VyZSA9IHNlY3VyZUZyb21Ib3N0KGhvc3QpO1xuXG4gICAgcG9ydCA9IHNlY3VyZSA/IDQ0MyA6IDgwOyAvLy9cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBzdGFydCA9IGluZGV4ICsgMSxcbiAgICAgICAgICBwb3J0U3RyaW5nID0gc2Vjb25kTWF0Y2guc3Vic3RyaW5nKHN0YXJ0KTtcblxuICAgIHBvcnQgPSBOdW1iZXIocG9ydFN0cmluZyk7XG4gIH1cblxuICByZXR1cm4gcG9ydDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlY3VyZUZyb21Ib3N0KGhvc3QpIHtcbiAgY29uc3Qgc2VjdXJlID0gL15odHRwczpcXC9cXC8vLnRlc3QoaG9zdCk7XG5cbiAgcmV0dXJuIHNlY3VyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhvc3RuYW1lRnJvbUhvc3QoaG9zdCkge1xuICBjb25zdCBtYXRjaGVzID0gaG9zdC5tYXRjaCgvXmh0dHBzPzpcXC9cXC8oW146XFwvXSspLyksXG4gICAgICAgIHNlY29uZE1hdGNoID0gc2Vjb25kKG1hdGNoZXMpLFxuICAgICAgICBob3N0bmFtZSA9IHNlY29uZE1hdGNoOyAvLy9cblxuICByZXR1cm4gaG9zdG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBxdWVyeVN0cmluZ0Zyb21RdWVyeShxdWVyeSkge1xuICBjb25zdCBuYW1lcyA9IE9iamVjdC5rZXlzKHF1ZXJ5KSxcbiAgICAgICAgbmFtZXNMZW5ndGggPSBuYW1lcy5sZW5ndGgsXG4gICAgICAgIGxhc3RJbmRleCA9IG5hbWVzTGVuZ3RoIC0gMSxcbiAgICAgICAgcXVlcnlTdHJpbmcgPSBuYW1lcy5yZWR1Y2UoKHF1ZXJ5U3RyaW5nLCBuYW1lLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gcXVlcnlbbmFtZV0sXG4gICAgICAgICAgICAgICAgZW5jb2RlZE5hbWUgPSBlbmNvZGVVUklDb21wb25lbnQobmFtZSksXG4gICAgICAgICAgICAgICAgZW5jb2RlZFZhbHVlID0gZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKSxcbiAgICAgICAgICAgICAgICBhbXBlcnNhbmRPck5vdGhpbmcgPSAoaW5kZXggIT09IGxhc3RJbmRleCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQU1QRVJTQU5EX0NIQVJBQ1RFUiA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVNUFRZX1NUUklORztcbiAgXG4gICAgICAgICAgcXVlcnlTdHJpbmcgKz0gYCR7ZW5jb2RlZE5hbWV9PSR7ZW5jb2RlZFZhbHVlfSR7YW1wZXJzYW5kT3JOb3RoaW5nfWA7XG4gIFxuICAgICAgICAgIHJldHVybiBxdWVyeVN0cmluZztcbiAgICAgICAgfSwgRU1QVFlfU1RSSU5HKTtcblxuICByZXR1cm4gcXVlcnlTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cmxGcm9tSG9zdFVSSUFuZFF1ZXJ5KGhvc3QsIHVyaSwgcXVlcnkpIHtcbiAgY29uc3QgcXVlcnlTdHJpbmcgPSBxdWVyeVN0cmluZ0Zyb21RdWVyeShxdWVyeSksXG4gICAgICAgIHVybCA9IChxdWVyeVN0cmluZyA9PT0gRU1QVFlfU1RSSU5HKSA/XG4gICAgICAgICAgICAgICAgYCR7aG9zdH0ke3VyaX1gIDpcbiAgICAgICAgICAgICAgICAgIGAke2hvc3R9JHt1cml9PyR7cXVlcnlTdHJpbmd9YDtcblxuICByZXR1cm4gdXJsO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG92ZXJ3cml0ZSxcbiAgdW5kZXJ3cml0ZSxcbiAgcG9ydEZyb21Ib3N0LFxuICBzZWN1cmVGcm9tSG9zdCxcbiAgaG9zdG5hbWVGcm9tSG9zdCxcbiAgcXVlcnlTdHJpbmdGcm9tUXVlcnksXG4gIHVybEZyb21Ib3N0VVJJQW5kUXVlcnlcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmxlbihzdHJpbmcpIHtcbiAgbGV0IGxlbmd0aCA9IDA7XG5cbiAgY29uc3QgaXRlcmF0b3IgPSBzdHJpbmdbU3ltYm9sLml0ZXJhdG9yXSgpO1xuXG4gIGxldCBjaGFyYWN0ZXIgPSBpdGVyYXRvci5uZXh0KCk7XG5cbiAgd2hpbGUgKCFjaGFyYWN0ZXIuZG9uZSkge1xuICAgIGNoYXJhY3RlciA9IGl0ZXJhdG9yLm5leHQoKTtcblxuICAgIGxlbmd0aCsrXG4gIH1cblxuICByZXR1cm4gbGVuZ3RoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RyY21wKHN0cmluZ0EsIHN0cmluZ0IpIHtcbiAgbGV0IGRpZmZlcmVuY2U7XG5cbiAgY29uc3QgaXRlcmF0b3JBID0gc3RyaW5nQVtTeW1ib2wuaXRlcmF0b3JdKCksIC8vL1xuICAgICAgICBpdGVyYXRvckIgPSBzdHJpbmdCW1N5bWJvbC5pdGVyYXRvcl0oKTsgLy8vXG5cbiAgbGV0IGNoYXJhY3RlckEgPSBpdGVyYXRvckEubmV4dCgpLFxuICAgICAgY2hhcmFjdGVyQiA9IGl0ZXJhdG9yQi5uZXh0KCksXG4gICAgICBjb2RlUG9pbnRBLFxuICAgICAgY29kZVBvaW50QjtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNvZGVQb2ludEEgPSBjaGFyYWN0ZXJBLnZhbHVlID8gLy8vXG4gICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyQS52YWx1ZS5jb2RlUG9pbnRBdCgwKSA6XG4gICAgICAgICAgICAgICAgICAgICAwO1xuICAgIGNvZGVQb2ludEIgPSBjaGFyYWN0ZXJCLnZhbHVlID8gLy8vXG4gICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyQi52YWx1ZS5jb2RlUG9pbnRBdCgwKSA6XG4gICAgICAgICAgICAgICAgICAgICAwO1xuXG4gICAgZGlmZmVyZW5jZSA9IGNvZGVQb2ludEIgLSBjb2RlUG9pbnRBO1xuXG4gICAgaWYgKGRpZmZlcmVuY2UgIT09IDApIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChjaGFyYWN0ZXJBLmRvbmUgfHwgY2hhcmFjdGVyQi5kb25lKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjaGFyYWN0ZXJBID0gaXRlcmF0b3JBLm5leHQoKTtcbiAgICBjaGFyYWN0ZXJCID0gaXRlcmF0b3JCLm5leHQoKTtcbiAgfVxuXG4gIHJldHVybiBkaWZmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5kZXhPZihzdHJpbmcsIHNlYXJjaFN0cmluZykge1xuICBsZXQgaW5kZXggPSAtMSxcbiAgICAgIGZvdW5kID0gZmFsc2U7XG5cbiAgY29uc3Qgc2VhcmNoU3RyaW5nTGVuZ3RoID0gc3RybGVuKHNlYXJjaFN0cmluZyk7XG5cbiAgaWYgKHNlYXJjaFN0cmluZ0xlbmd0aCA+IDApIHtcbiAgICBsZXQgY2hhcmFjdGVyO1xuXG4gICAgY29uc3QgaXRlcmF0b3IgPSBzdHJpbmdbU3ltYm9sLml0ZXJhdG9yXSgpLFxuICAgICAgICAgIHNlYXJjaEl0ZXJhdG9yID0gc2VhcmNoU3RyaW5nW1N5bWJvbC5pdGVyYXRvcl0oKSxcbiAgICAgICAgICBzZWFyY2hDaGFyYWN0ZXIgPSBzZWFyY2hJdGVyYXRvci5uZXh0KCk7XG5cbiAgICBjaGFyYWN0ZXIgPSBpdGVyYXRvci5uZXh0KCk7XG5cbiAgICBpbmRleCsrO1xuXG4gICAgd2hpbGUgKCFjaGFyYWN0ZXIuZG9uZSkge1xuICAgICAgaWYgKGNoYXJhY3Rlci52YWx1ZSA9PT0gc2VhcmNoQ2hhcmFjdGVyLnZhbHVlKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gaW5kZXgsICAvLy9cbiAgICAgICAgICAgICAgZW5kID0gc3RhcnQgKyBzZWFyY2hTdHJpbmdMZW5ndGgsXG4gICAgICAgICAgICAgIHN1YlN0cmluZyA9IHN1YnN0cmluZyhzdHJpbmcsIHN0YXJ0LCBlbmQpLFxuICAgICAgICAgICAgICBkaWZmZXJlbmNlID0gc3RyY21wKHN1YlN0cmluZywgc2VhcmNoU3RyaW5nKTtcblxuICAgICAgICBpZiAoZGlmZmVyZW5jZSA9PT0gMCkge1xuICAgICAgICAgIGZvdW5kID0gdHJ1ZTtcblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNoYXJhY3RlciA9IGl0ZXJhdG9yLm5leHQoKTtcblxuICAgICAgaW5kZXgrK1xuICAgIH1cbiAgfVxuXG4gIGlmICghZm91bmQpIHtcbiAgICBpbmRleCA9IC0xO1xuICB9XG5cbiAgcmV0dXJuIGluZGV4O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3Vic3RyaW5nKHN0cmluZywgc3RhcnQsIGVuZCA9IEluZmluaXR5KSB7XG4gIGxldCBpbmRleCA9IDA7XG5cbiAgY29uc3QgaXRlcmF0b3IgPSBzdHJpbmdbU3ltYm9sLml0ZXJhdG9yXSgpLFxuICAgICAgICBjaGFyYWN0ZXJzID0gW107XG5cbiAgbGV0IGNoYXJhY3RlciA9IGl0ZXJhdG9yLm5leHQoKTtcblxuICB3aGlsZSAoIWNoYXJhY3Rlci5kb25lKSB7XG4gICAgaWYgKGluZGV4ID09PSBlbmQpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChpbmRleCA+PSBzdGFydCkge1xuICAgICAgY2hhcmFjdGVycy5wdXNoKGNoYXJhY3Rlci52YWx1ZSk7IC8vL1xuICAgIH1cblxuICAgIGluZGV4KytcblxuICAgIGNoYXJhY3RlciA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgfVxuXG4gIGNvbnN0IHN1YnN0cmluZyA9IGNoYXJhY3RlcnMuam9pbihFTVBUWV9TVFJJTkcpO1xuXG4gIHJldHVybiBzdWJzdHJpbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgc3RyY21wLFxuICBzdHJsZW4sXG4gIGluZGV4T2YsXG4gIHN1YnN0cmluZ1xufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIG1pZ3JhdGUoanNvbiwgbWlncmF0aW9uTWFwLCBsYXRlc3RWZXJzaW9uKSB7XG4gIGxldCB7IHZlcnNpb24gfSA9IGpzb247XG5cbiAgd2hpbGUgKHZlcnNpb24gIT09IGxhdGVzdFZlcnNpb24pIHtcbiAgICBjb25zdCBtaWdyYXRlRnVuY3Rpb24gPSBtaWdyYXRpb25NYXBbdmVyc2lvbl07XG5cbiAgICBqc29uID0gbWlncmF0ZUZ1bmN0aW9uKGpzb24pO1xuXG4gICAgKHsgdmVyc2lvbiB9ID0ganNvbik7XG4gIH1cblxuICByZXR1cm4ganNvbjtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBtaWdyYXRlXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHdoaWxzdChvcGVyYXRpb24sIGRvbmUsIGNvbnRleHQpIHtcclxuICBsZXQgY291bnQgPSAtMTtcclxuXHJcbiAgZnVuY3Rpb24gbmV4dCgpIHtcclxuICAgIGNvdW50Kys7XHJcblxyXG4gICAgY29uc3QgaW5kZXggPSBjb3VudDsgIC8vL1xyXG5cclxuICAgIG9wZXJhdGlvbihuZXh0LCBkb25lLCBjb250ZXh0LCBpbmRleCk7XHJcbiAgfVxyXG5cclxuICBuZXh0KCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmb3JFYWNoKGFycmF5LCBvcGVyYXRpb24sIGRvbmUsIGNvbnRleHQpIHtcclxuICBjb25zdCBsZW5ndGggPSBhcnJheS5sZW5ndGg7ICAvLy9cclxuXHJcbiAgbGV0IGNvdW50ID0gLTE7XHJcblxyXG4gIGZ1bmN0aW9uIG5leHQoKSB7XHJcbiAgICBjb3VudCsrO1xyXG5cclxuICAgIGNvbnN0IHRlcm1pbmF0ZSA9IChjb3VudCA9PT0gbGVuZ3RoKTtcclxuXHJcbiAgICBpZiAodGVybWluYXRlKSB7XHJcbiAgICAgIGRvbmUoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gY291bnQsICAvLy9cclxuICAgICAgICAgICAgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcclxuXHJcbiAgICAgIG9wZXJhdGlvbihlbGVtZW50LCBuZXh0LCBkb25lLCBjb250ZXh0LCBpbmRleCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZXh0KCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXF1ZW5jZShvcGVyYXRpb25zLCBkb25lLCBjb250ZXh0KSB7XHJcbiAgY29uc3QgbGVuZ3RoID0gb3BlcmF0aW9ucy5sZW5ndGg7ICAvLy9cclxuXHJcbiAgbGV0IGNvdW50ID0gLTE7XHJcblxyXG4gIGZ1bmN0aW9uIG5leHQoKSB7XHJcbiAgICBjb3VudCsrO1xyXG5cclxuICAgIGNvbnN0IHRlcm1pbmF0ZSA9IChjb3VudCA9PT0gbGVuZ3RoKTtcclxuXHJcbiAgICBpZiAodGVybWluYXRlKSB7XHJcbiAgICAgIGRvbmUoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gY291bnQsICAvLy9cclxuICAgICAgICAgICAgb3BlcmF0aW9uID0gb3BlcmF0aW9uc1tpbmRleF07XHJcblxyXG4gICAgICBvcGVyYXRpb24obmV4dCwgZG9uZSwgY29udGV4dCwgaW5kZXgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmV4dCgpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZXZlbnR1YWxseShvcGVyYXRpb25zLCBkb25lLCBjb250ZXh0KSB7XHJcbiAgY29uc3QgbGVuZ3RoID0gb3BlcmF0aW9ucy5sZW5ndGg7ICAvLy9cclxuXHJcbiAgaWYgKGxlbmd0aCA9PT0gMCkge1xyXG4gICAgZG9uZSgpO1xyXG5cclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIGxldCBjb3VudCA9IDA7XHJcblxyXG4gIGZ1bmN0aW9uIG5leHQoKSB7XHJcbiAgICBjb3VudCsrO1xyXG5cclxuICAgIGNvbnN0IHRlcm1pbmF0ZSA9IChjb3VudCA9PT0gbGVuZ3RoKTtcclxuXHJcbiAgICBpZiAodGVybWluYXRlKSB7XHJcbiAgICAgIGRvbmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9wZXJhdGlvbnMuZm9yRWFjaCgob3BlcmF0aW9uLCBpbmRleCkgPT4ge1xyXG4gICAgb3BlcmF0aW9uKG5leHQsIGRvbmUsIGNvbnRleHQsIGluZGV4KTtcclxuICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlcGVhdGVkbHkob3BlcmF0aW9uLCBsZW5ndGgsIGRvbmUsIGNvbnRleHQpIHtcclxuICBpZiAobGVuZ3RoID09PSAwKSB7XHJcbiAgICBkb25lKCk7XHJcblxyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgbGV0IGNvdW50ID0gMDtcclxuXHJcbiAgZnVuY3Rpb24gbmV4dCgpIHtcclxuICAgIGNvdW50Kys7XHJcblxyXG4gICAgY29uc3QgdGVybWluYXRlID0gKGNvdW50ID09PSBsZW5ndGgpO1xyXG5cclxuICAgIGlmICh0ZXJtaW5hdGUpIHtcclxuICAgICAgZG9uZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgb3BlcmF0aW9uKG5leHQsIGRvbmUsIGNvbnRleHQsIGluZGV4KTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmb3J3YXJkc0ZvckVhY2goYXJyYXksIG9wZXJhdGlvbiwgZG9uZSwgY29udGV4dCkge1xyXG4gIGNvbnN0IGxlbmd0aCA9IGFycmF5Lmxlbmd0aDsgIC8vL1xyXG5cclxuICBsZXQgY291bnQgPSAtMTtcclxuXHJcbiAgZnVuY3Rpb24gbmV4dCgpIHtcclxuICAgIGNvdW50Kys7XHJcblxyXG4gICAgY29uc3QgdGVybWluYXRlID0gKGNvdW50ID09PSBsZW5ndGgpO1xyXG5cclxuICAgIGlmICh0ZXJtaW5hdGUpIHtcclxuICAgICAgZG9uZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgaW5kZXggPSBjb3VudCwgIC8vL1xyXG4gICAgICAgICAgICBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xyXG5cclxuICAgICAgb3BlcmF0aW9uKGVsZW1lbnQsIG5leHQsIGRvbmUsIGNvbnRleHQsIGluZGV4KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5leHQoKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGJhY2t3YXJkc0ZvckVhY2goYXJyYXksIG9wZXJhdGlvbiwgZG9uZSwgY29udGV4dCkge1xyXG4gIGNvbnN0IGxlbmd0aCA9IGFycmF5Lmxlbmd0aDsgIC8vL1xyXG5cclxuICBsZXQgY291bnQgPSBsZW5ndGg7XHJcblxyXG4gIGZ1bmN0aW9uIG5leHQoKSB7XHJcbiAgICBjb3VudC0tO1xyXG5cclxuICAgIGNvbnN0IHRlcm1pbmF0ZSA9IChjb3VudCA9PT0gLTEpO1xyXG5cclxuICAgIGlmICh0ZXJtaW5hdGUpIHtcclxuICAgICAgZG9uZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgaW5kZXggPSBjb3VudCwgIC8vL1xyXG4gICAgICAgICAgICBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xyXG5cclxuICAgICAgb3BlcmF0aW9uKGVsZW1lbnQsIG5leHQsIGRvbmUsIGNvbnRleHQsIGluZGV4KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5leHQoKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIHdoaWxzdCxcclxuICBmb3JFYWNoLFxyXG4gIHNlcXVlbmNlLFxyXG4gIGV2ZW50dWFsbHksXHJcbiAgcmVwZWF0ZWRseSxcclxuICBmb3J3YXJkc0ZvckVhY2gsXHJcbiAgYmFja3dhcmRzRm9yRWFjaFxyXG59O1xyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFNUUklORywgRlVOQ1RJT04gfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBHRVRfTUVUSE9ELCBQT1NUX01FVEhPRCB9IGZyb20gXCIuLi9tZXRob2RzXCI7XG5pbXBvcnQgeyBBUFBMSUNBVElPTl9KU09OX0NPTlRFTlRfVFlQRSB9IGZyb20gXCIuLi9jb250ZW50VHlwZXNcIjtcbmltcG9ydCB7IEFDQ0VQVF9IRUFERVIsIENPTlRFTlRfVFlQRV9IRUFERVIgfSBmcm9tIFwiLi4vaGVhZGVyc1wiO1xuaW1wb3J0IHsgdW5kZXJ3cml0ZSwgdXJsRnJvbUhvc3RVUklBbmRRdWVyeSB9IGZyb20gXCIuLi91dGlsaXRpZXMvaHR0cFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0KGhvc3QsIHVyaSwgcXVlcnksIGhlYWRlcnMsIHJlc3BvbnNlVHlwZSwgY2FsbGJhY2spIHtcbiAgaWYgKHR5cGVvZiBoZWFkZXJzID09PSBGVU5DVElPTikge1xuICAgIGNhbGxiYWNrID0gaGVhZGVyczsgLy8vXG5cbiAgICByZXNwb25zZVR5cGUgPSBudWxsO1xuXG4gICAgaGVhZGVycyA9IHt9O1xuICB9XG5cbiAgaWYgKHR5cGVvZiByZXNwb25zZVR5cGUgPT09IEZVTkNUSU9OKSB7XG4gICAgY2FsbGJhY2sgPSByZXNwb25zZVR5cGU7ICAvLy9cblxuICAgIGlmICh0eXBlb2YgaGVhZGVycyA9PT0gU1RSSU5HKSB7XG4gICAgICByZXNwb25zZVR5cGUgPSBoZWFkZXJzOyAvLy9cblxuICAgICAgaGVhZGVycyA9IHt9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNwb25zZVR5cGUgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgY29uc3QgbWV0aG9kID0gR0VUX01FVEhPRCxcbiAgICAgICAgYWNjZXB0ID0gQVBQTElDQVRJT05fSlNPTl9DT05URU5UX1RZUEUsXG4gICAgICAgIGNvbnRlbnQgPSBudWxsO1xuXG4gIHVuZGVyd3JpdGVBY2NlcHRIZWFkZXIoaGVhZGVycywgYWNjZXB0KTtcblxuICByZXF1ZXN0KGhvc3QsIHVyaSwgcXVlcnksIG1ldGhvZCwgY29udGVudCwgaGVhZGVycywgcmVzcG9uc2VUeXBlLCBjYWxsYmFjayk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwb3N0KGhvc3QsIHVyaSwgcXVlcnksIGNvbnRlbnQsIGhlYWRlcnMsIHJlc3BvbnNlVHlwZSwgY2FsbGJhY2spIHtcbiAgaWYgKHR5cGVvZiBoZWFkZXJzID09PSBGVU5DVElPTikge1xuICAgIGNhbGxiYWNrID0gaGVhZGVyczsgLy8vXG5cbiAgICByZXNwb25zZVR5cGUgPSBudWxsO1xuXG4gICAgaGVhZGVycyA9IHt9O1xuICB9XG5cbiAgaWYgKHR5cGVvZiByZXNwb25zZVR5cGUgPT09IEZVTkNUSU9OKSB7XG4gICAgY2FsbGJhY2sgPSByZXNwb25zZVR5cGU7ICAvLy9cblxuICAgIGlmICh0eXBlb2YgaGVhZGVycyA9PT0gU1RSSU5HKSB7XG4gICAgICByZXNwb25zZVR5cGUgPSBoZWFkZXJzOyAvLy9cblxuICAgICAgaGVhZGVycyA9IHt9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNwb25zZVR5cGUgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgY29uc3QgbWV0aG9kID0gUE9TVF9NRVRIT0QsXG4gICAgICAgIGFjY2VwdCA9IEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFLFxuICAgICAgICBjb250ZW50VHlwZSA9IEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFO1xuXG4gIHVuZGVyd3JpdGVBY2NlcHRIZWFkZXIoaGVhZGVycywgYWNjZXB0KTtcblxuICB1bmRlcndyaXRlQ29udGVudFR5cGVIZWFkZXIoaGVhZGVycywgY29udGVudFR5cGUpO1xuXG4gIHJlcXVlc3QoaG9zdCwgdXJpLCBxdWVyeSwgbWV0aG9kLCBjb250ZW50LCBoZWFkZXJzLCByZXNwb25zZVR5cGUsIGNhbGxiYWNrKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcXVlc3QoaG9zdCwgdXJpLCBxdWVyeSwgbWV0aG9kLCBjb250ZW50LCBoZWFkZXJzLCByZXNwb25zZVR5cGUsIGNhbGxiYWNrKSB7XG4gIGNvbnN0IHVybCA9IHVybEZyb21Ib3N0VVJJQW5kUXVlcnkoaG9zdCwgdXJpLCBxdWVyeSksXG4gICAgICAgIGFjY2VwdCA9IGhlYWRlcnNbQUNDRVBUX0hFQURFUl0gfHwgbnVsbCxcbiAgICAgICAgY29udGVudFR5cGUgPSBoZWFkZXJzW0NPTlRFTlRfVFlQRV9IRUFERVJdIHx8IG51bGwsXG4gICAgICAgIHhtbEh0dHBSZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgaWYgKGNvbnRlbnRUeXBlID09PSBBUFBMSUNBVElPTl9KU09OX0NPTlRFTlRfVFlQRSkge1xuICAgIGNvbnN0IGpzb24gPSBjb250ZW50LCAgLy8vXG4gICAgICAgICAganNvblN0cmluZyA9IEpTT04uc3RyaW5naWZ5KGpzb24pO1xuXG4gICAgY29udGVudCA9IGpzb25TdHJpbmc7ICAvLy9cbiAgfVxuXG4gIGlmIChyZXNwb25zZVR5cGUgIT09IG51bGwpIHtcbiAgICBPYmplY3QuYXNzaWduKHhtbEh0dHBSZXF1ZXN0LCB7XG4gICAgICByZXNwb25zZVR5cGVcbiAgICB9KTtcbiAgfVxuXG4gIHhtbEh0dHBSZXF1ZXN0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9ICgpID0+IHtcbiAgICBjb25zdCB7IHJlYWR5U3RhdGUsIHN0YXR1cywgcmVzcG9uc2UgfSA9IHhtbEh0dHBSZXF1ZXN0LFxuICAgICAgICAgIHN0YXR1c0NvZGUgPSBzdGF0dXM7XG5cbiAgICBpZiAocmVhZHlTdGF0ZSA9PSA0KSB7XG4gICAgICBsZXQgY29udGVudCA9IHJlc3BvbnNlO1xuXG4gICAgICBpZiAoYWNjZXB0ID09PSBBUFBMSUNBVElPTl9KU09OX0NPTlRFTlRfVFlQRSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGpzb25TdHJpbmcgPSBjb250ZW50LCAgLy8vXG4gICAgICAgICAgICAgICAganNvbiA9IEpTT04ucGFyc2UoanNvblN0cmluZyk7XG5cbiAgICAgICAgICBjb250ZW50ID0ganNvbjsgIC8vL1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnRlbnQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNhbGxiYWNrKGNvbnRlbnQsIHN0YXR1c0NvZGUpO1xuICAgIH1cbiAgfTtcblxuICB4bWxIdHRwUmVxdWVzdC5vcGVuKG1ldGhvZCwgdXJsKTtcblxuICBpZiAoYWNjZXB0ICE9PSBudWxsKSB7XG4gICAgeG1sSHR0cFJlcXVlc3Quc2V0UmVxdWVzdEhlYWRlcihBQ0NFUFRfSEVBREVSLCBhY2NlcHQpO1xuICB9XG5cbiAgaWYgKGNvbnRlbnRUeXBlICE9PSBudWxsKSB7XG4gICAgeG1sSHR0cFJlcXVlc3Quc2V0UmVxdWVzdEhlYWRlcihDT05URU5UX1RZUEVfSEVBREVSLCBjb250ZW50VHlwZSk7XG4gIH1cblxuICAoY29udGVudCAhPT0gbnVsbCkgP1xuICAgIHhtbEh0dHBSZXF1ZXN0LnNlbmQoY29udGVudCkgOlxuICAgICAgeG1sSHR0cFJlcXVlc3Quc2VuZCgpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGdldCxcbiAgcG9zdCxcbiAgcmVxdWVzdFxufVxuXG5mdW5jdGlvbiB1bmRlcndyaXRlQWNjZXB0SGVhZGVyKGhlYWRlcnMsIGFjY2VwdCkge1xuICBjb25zdCBuYW1lID0gQUNDRVBUX0hFQURFUiwgIC8vL1xuICAgICAgICB2YWx1ZSA9IGFjY2VwdDsgLy8vXG5cbiAgdW5kZXJ3cml0ZShoZWFkZXJzLCBuYW1lLCB2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIHVuZGVyd3JpdGVDb250ZW50VHlwZUhlYWRlcihoZWFkZXJzLCBjb250ZW50VFlwZSkge1xuICBjb25zdCBuYW1lID0gQ09OVEVOVF9UWVBFX0hFQURFUiwgIC8vL1xuICAgICAgICB2YWx1ZSA9IGNvbnRlbnRUWXBlOyAvLy9cblxuICB1bmRlcndyaXRlKGhlYWRlcnMsIG5hbWUsIHZhbHVlKTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBsZXZlbHMgfSBmcm9tIFwiLi9sZXZlbHNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgbWV0aG9kcyB9IGZyb20gXCIuL21ldGhvZHNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgaGVhZGVycyB9IGZyb20gXCIuL2hlYWRlcnNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMga2V5Q29kZXMgfSBmcm9tIFwiLi9rZXlDb2Rlc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBlbmNvZGluZ3MgfSBmcm9tIFwiLi9lbmNvZGluZ3NcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgY2hhcmFjdGVycyB9IGZyb20gXCIuL2NoYXJhY3RlcnNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc3RhdHVzQ29kZXMgfSBmcm9tIFwiLi9zdGF0dXNDb2Rlc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjb250ZW50VHlwZXMgfSBmcm9tIFwiLi9jb250ZW50VHlwZXNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc3RhdHVzTWVzc2FnZXMgfSBmcm9tIFwiLi9zdGF0dXNNZXNzYWdlc1wiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIHBhdGhVdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvcGF0aFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBodHRwVXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2h0dHBcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvYXJyYXlcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc3RyaW5nVXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL3N0cmluZ1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB2ZXJzaW9uVXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL3ZlcnNpb25cIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgYXN5bmNocm9ub3VzVXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2FzeW5jaHJvbm91c1wiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIGFqYXhVdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvYWpheFwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNEZXB0aEZpcnN0U2VhcmNoKHZlcnRleCwgY2FsbGJhY2ssIHZpc2l0ZWRWZXJ0ZXhlcywgcHJlZGVjZXNzb3JWZXJ0ZXhlcyA9IFtdKSB7XG4gIGxldCB0ZXJtaW5hdGUgPSBmYWxzZTtcblxuICBjb25zdCB2aXNpdGVkVmVydGV4ZXNJbmNsdWRlc1ZlcnRleCA9IHZpc2l0ZWRWZXJ0ZXhlcy5pbmNsdWRlcyh2ZXJ0ZXgpO1xuXG4gIGlmICghdmlzaXRlZFZlcnRleGVzSW5jbHVkZXNWZXJ0ZXgpIHtcbiAgICBjb25zdCB2aXNpdGVkVmVydGV4ID0gdmVydGV4OyAvLy9cblxuICAgIHZpc2l0ZWRWZXJ0ZXhlcy5wdXNoKHZpc2l0ZWRWZXJ0ZXgpO1xuXG4gICAgdGVybWluYXRlID0gY2FsbGJhY2sodmVydGV4LCBwcmVkZWNlc3NvclZlcnRleGVzKTtcblxuICAgIGlmICghdGVybWluYXRlKSB7XG4gICAgICBjb25zdCBwcmVkZWNlc3NvclZlcnRleCA9IHZlcnRleDsgIC8vL1xuXG4gICAgICBwcmVkZWNlc3NvclZlcnRleGVzID0gWyAvLy9cbiAgICAgICAgLi4ucHJlZGVjZXNzb3JWZXJ0ZXhlcyxcbiAgICAgICAgcHJlZGVjZXNzb3JWZXJ0ZXhcbiAgICAgIF07XG5cbiAgICAgIHRlcm1pbmF0ZSA9IHZlcnRleC5zb21lSW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4KChpbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXgpID0+IHtcbiAgICAgICAgY29uc3QgdmVydGV4ID0gaW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4LCAgLy8vXG4gICAgICAgICAgICAgIHZlcnRleEluZGV4ID0gdmVydGV4LmdldEluZGV4KCksXG4gICAgICAgICAgICAgIHByZWRlY2Vzc29yVmVydGV4SW5kZXggPSBwcmVkZWNlc3NvclZlcnRleC5nZXRJbmRleCgpO1xuXG4gICAgICAgIGlmICh2ZXJ0ZXhJbmRleCA+IHByZWRlY2Vzc29yVmVydGV4SW5kZXgpIHtcbiAgICAgICAgICBjb25zdCB0ZXJtaW5hdGUgPSBmb3J3YXJkc0RlcHRoRmlyc3RTZWFyY2godmVydGV4LCBjYWxsYmFjaywgdmlzaXRlZFZlcnRleGVzLCBwcmVkZWNlc3NvclZlcnRleGVzKTtcblxuICAgICAgICAgIGlmICh0ZXJtaW5hdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRlcm1pbmF0ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJhY2t3YXJkc0RlcHRoRmlyc3RTZWFyY2godmVydGV4LCBjYWxsYmFjaywgdmlzaXRlZFZlcnRleGVzLCBzdWNjZXNzb3JWZXJ0ZXhlcyA9IFtdKSB7XG4gIGxldCB0ZXJtaW5hdGUgPSBmYWxzZTtcblxuICBjb25zdCB2aXNpdGVkVmVydGV4ZXNJbmNsdWRlc1ZlcnRleCA9IHZpc2l0ZWRWZXJ0ZXhlcy5pbmNsdWRlcyh2ZXJ0ZXgpO1xuXG4gIGlmICghdmlzaXRlZFZlcnRleGVzSW5jbHVkZXNWZXJ0ZXgpIHtcbiAgICBjb25zdCB2aXNpdGVkVmVydGV4ID0gdmVydGV4OyAvLy9cblxuICAgIHZpc2l0ZWRWZXJ0ZXhlcy5wdXNoKHZpc2l0ZWRWZXJ0ZXgpO1xuXG4gICAgdGVybWluYXRlID0gY2FsbGJhY2sodmVydGV4LCBzdWNjZXNzb3JWZXJ0ZXhlcyk7XG5cbiAgICBpZiAoIXRlcm1pbmF0ZSkge1xuICAgICAgY29uc3Qgc3VjY2Vzc29yVmVydGV4ID0gdmVydGV4OyAgLy8vXG5cbiAgICAgIHN1Y2Nlc3NvclZlcnRleGVzID0gWyAvLy9cbiAgICAgICAgLi4uc3VjY2Vzc29yVmVydGV4ZXMsXG4gICAgICAgIHN1Y2Nlc3NvclZlcnRleFxuICAgICAgXTtcblxuICAgICAgdGVybWluYXRlID0gdmVydGV4LnNvbWVJbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleCgoaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXgpID0+IHtcbiAgICAgICAgY29uc3QgdmVydGV4ID0gaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXgsICAvLy9cbiAgICAgICAgICAgICAgdmVydGV4SW5kZXggPSB2ZXJ0ZXguZ2V0SW5kZXgoKSxcbiAgICAgICAgICAgICAgc3VjY2Vzc29yVmVydGV4SW5kZXggPSBzdWNjZXNzb3JWZXJ0ZXguZ2V0SW5kZXgoKTtcblxuICAgICAgICBpZiAodmVydGV4SW5kZXggPCBzdWNjZXNzb3JWZXJ0ZXhJbmRleCkge1xuICAgICAgICAgIGNvbnN0IHRlcm1pbmF0ZSA9IGJhY2t3YXJkc0RlcHRoRmlyc3RTZWFyY2godmVydGV4LCBjYWxsYmFjaywgdmlzaXRlZFZlcnRleGVzLCBzdWNjZXNzb3JWZXJ0ZXhlcyk7XG5cbiAgICAgICAgICBpZiAodGVybWluYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0ZXJtaW5hdGU7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgeyB2ZXJ0ZXhOYW1lc0Zyb21WZXJ0ZXhlcyB9IGZyb20gXCIuL3V0aWxpdGllcy92ZXJ0ZXhcIjtcbmltcG9ydCB7IGZvcndhcmRzRGVwdGhGaXJzdFNlYXJjaCwgYmFja3dhcmRzRGVwdGhGaXJzdFNlYXJjaCB9IGZyb20gXCIuL3V0aWxpdGllcy9zZWFyY2hcIjtcblxuY29uc3QgeyBsYXN0LCB0YWlsIH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVydGV4IHtcbiAgY29uc3RydWN0b3IobmFtZSwgaW5kZXgsIGltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleGVzLCBpbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleGVzKSB7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLmluZGV4ID0gaW5kZXg7XG4gICAgdGhpcy5pbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXhlcyA9IGltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleGVzO1xuICAgIHRoaXMuaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXhlcyA9IGltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4ZXM7XG4gIH1cblxuICBnZXROYW1lKCkge1xuICAgIHJldHVybiB0aGlzLm5hbWU7XG4gIH1cblxuICBnZXRJbmRleCgpIHtcbiAgICByZXR1cm4gdGhpcy5pbmRleDtcbiAgfVxuXG4gIGdldEltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleGVzKCkge1xuICAgIHJldHVybiB0aGlzLmltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleGVzO1xuICB9XG5cbiAgZ2V0SW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXhlcygpIHtcbiAgICByZXR1cm4gdGhpcy5pbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleGVzO1xuICB9XG5cbiAgaXNTdHJhbmRlZCgpIHtcbiAgICBjb25zdCBpbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXhlc0xlbmd0aCA9IHRoaXMuaW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4ZXMubGVuZ3RoLFxuICAgICAgICAgIGltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4ZXNMZW5ndGggPSB0aGlzLmltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4ZXMubGVuZ3RoLFxuICAgICAgICAgIHN0cmFuZGVkID0gKChpbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXhlc0xlbmd0aCA9PT0gMCkgJiYgKGltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4ZXNMZW5ndGggPT09IDApKTtcblxuICAgIHJldHVybiBzdHJhbmRlZDtcbiAgfVxuXG4gIGlzVmVydGV4Rm9yd2FyZHNSZWFjaGFibGUodmVydGV4KSB7XG4gICAgY29uc3QgZm9yd2FyZHNSZWFjaGFibGVWZXJ0ZXhlcyA9IHRoaXMucmV0cmlldmVGb3J3YXJkc1JlYWNoYWJsZVZlcnRleGVzKHZlcnRleCksXG4gICAgICAgICAgbGFzdEZvcndhcmRzUmVhY2hhYmxlVmVydGV4ID0gbGFzdChmb3J3YXJkc1JlYWNoYWJsZVZlcnRleGVzKSxcbiAgICAgICAgICB2ZXJ0ZXhGb3J3YXJkc1JlYWNoYWJsZSA9ICh2ZXJ0ZXggPT09IGxhc3RGb3J3YXJkc1JlYWNoYWJsZVZlcnRleCk7XG5cbiAgICByZXR1cm4gdmVydGV4Rm9yd2FyZHNSZWFjaGFibGU7XG4gIH1cblxuICBpc0VkZ2VQcmVzZW50QnlTb3VyY2VWZXJ0ZXgoc291cmNlVmVydGV4KSB7XG4gICAgY29uc3Qgc291cmNlVmVydGV4SW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXggPSB0aGlzLmlzVmVydGV4SW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXgoc291cmNlVmVydGV4KSxcbiAgICAgICAgICBlZGdlUHJlc2VudCA9IHNvdXJjZVZlcnRleEltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4OyAvLy9cblxuICAgIHJldHVybiBlZGdlUHJlc2VudDtcbiAgfVxuXG4gIGlzRWRnZVByZXNlbnRCeVRhcmdldFZlcnRleCh0YXJnZXRWZXJ0ZXgpIHtcbiAgICBjb25zdCB0YXJnZXRWZXJ0ZXhJbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXggPSB0aGlzLmlzVmVydGV4SW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4KHRhcmdldFZlcnRleCksXG4gICAgICAgICAgZWRnZVByZXNlbnQgPSB0YXJnZXRWZXJ0ZXhJbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXg7IC8vL1xuXG4gICAgcmV0dXJuIGVkZ2VQcmVzZW50O1xuICB9XG5cbiAgcmV0cmlldmVTdWNjZXNzb3JWZXJ0ZXhOYW1lcygpIHtcbiAgICBjb25zdCBmb3J3YXJkc1JlYWNoYWJsZVZlcnRleGVzID0gdGhpcy5yZXRyaWV2ZUZvcndhcmRzUmVhY2hhYmxlVmVydGV4ZXMoKSxcbiAgICAgICAgICBmb3J3YXJkc1JlYWNoYWJsZVZlcnRleGVzVGFpbCA9IHRhaWwoZm9yd2FyZHNSZWFjaGFibGVWZXJ0ZXhlcyksXG4gICAgICAgICAgc3VjY2Vzc29yVmVydGV4ZXMgPSBmb3J3YXJkc1JlYWNoYWJsZVZlcnRleGVzVGFpbCxcbiAgICAgICAgICBzdWNjZXNzb3JWZXJ0ZXhOYW1lcyA9IHZlcnRleE5hbWVzRnJvbVZlcnRleGVzKHN1Y2Nlc3NvclZlcnRleGVzKTtcblxuICAgIHJldHVybiBzdWNjZXNzb3JWZXJ0ZXhOYW1lcztcbiAgfVxuXG4gIHJldHJpZXZlUHJlZGVjZXNzb3JWZXJ0ZXhOYW1lcygpIHtcbiAgICBjb25zdCBiYWNrd2FyZHNSZWFjaGFibGVWZXJ0ZXhlcyA9IHRoaXMucmV0cmlldmVCYWNrd2FyZHNSZWFjaGFibGVWZXJ0ZXhlcygpLFxuICAgICAgICAgIGJhY2t3YXJkc1JlYWNoYWJsZVZlcnRleGVzVGFpbCA9IHRhaWwoYmFja3dhcmRzUmVhY2hhYmxlVmVydGV4ZXMpLFxuICAgICAgICAgIHByZWRlY2Vzc29yVmVydGV4ZXMgPSBiYWNrd2FyZHNSZWFjaGFibGVWZXJ0ZXhlc1RhaWwsXG4gICAgICAgICAgcHJlZGVjZXNzb3JWZXJ0ZXhOYW1lcyA9IHZlcnRleE5hbWVzRnJvbVZlcnRleGVzKHByZWRlY2Vzc29yVmVydGV4ZXMpO1xuXG4gICAgcmV0dXJuIHByZWRlY2Vzc29yVmVydGV4TmFtZXM7XG4gIH1cblxuICByZXRyaWV2ZUZvcndhcmRzUmVhY2hhYmxlVmVydGV4ZXModmVydGV4ID0gbnVsbCkge1xuICAgIGNvbnN0IHZlcnRleEEgPSB2ZXJ0ZXgsIC8vL1xuICAgICAgICAgIHZpc2l0ZWRWZXJ0ZXhlcyA9IHRoaXMuZm9yd2FyZHNEZXB0aEZpcnN0U2VhcmNoKCh2ZXJ0ZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZlcnRleEIgPSB2ZXJ0ZXgsIC8vL1xuICAgICAgICAgICAgICAgICAgdGVybWluYXRlID0gKHZlcnRleEEgPT09IHZlcnRleEIpO1xuXG4gICAgICAgICAgICBpZiAodGVybWluYXRlKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIGZvcndhcmRzUmVhY2hhYmxlVmVydGV4ZXMgPSB2aXNpdGVkVmVydGV4ZXM7ICAvLy9cblxuICAgIHJldHVybiBmb3J3YXJkc1JlYWNoYWJsZVZlcnRleGVzO1xuICB9XG5cbiAgcmV0cmlldmVCYWNrd2FyZHNSZWFjaGFibGVWZXJ0ZXhlcyh2ZXJ0ZXggPSBudWxsKSB7XG4gICAgY29uc3QgdmVydGV4QSA9IHZlcnRleCwgLy8vXG4gICAgICAgICAgdmlzaXRlZFZlcnRleGVzID0gdGhpcy5iYWNrd2FyZHNEZXB0aEZpcnN0U2VhcmNoKCh2ZXJ0ZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZlcnRleEIgPSB2ZXJ0ZXgsIC8vL1xuICAgICAgICAgICAgICAgICAgdGVybWluYXRlID0gKHZlcnRleEEgPT09IHZlcnRleEIpO1xuXG4gICAgICAgICAgICBpZiAodGVybWluYXRlKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIGJhY2t3YXJkc1JlYWNoYWJsZVZlcnRleGVzID0gdmlzaXRlZFZlcnRleGVzOyAgLy8vXG5cbiAgICByZXR1cm4gYmFja3dhcmRzUmVhY2hhYmxlVmVydGV4ZXM7XG4gIH1cblxuICBpc1ZlcnRleEltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleCh2ZXJ0ZXgpIHtcbiAgICBjb25zdCB2ZXJ0ZXhJbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXggPSB0aGlzLmltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleGVzLmluY2x1ZGVzKHZlcnRleCk7XG5cbiAgICByZXR1cm4gdmVydGV4SW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4O1xuICB9XG5cbiAgaXNWZXJ0ZXhJbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleCh2ZXJ0ZXgpIHtcbiAgICBjb25zdCB2ZXJ0ZXhJbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleCA9IHRoaXMuaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXhlcy5pbmNsdWRlcyh2ZXJ0ZXgpO1xuXG4gICAgcmV0dXJuIHZlcnRleEltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4O1xuICB9XG5cbiAgZ2V0SW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4TmFtZXMoKSB7XG4gICAgY29uc3QgaW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4TmFtZXMgPSB2ZXJ0ZXhOYW1lc0Zyb21WZXJ0ZXhlcyh0aGlzLmltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleGVzKTtcblxuICAgIHJldHVybiBpbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXhOYW1lcztcbiAgfVxuXG4gIGdldEltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4TmFtZXMoKSB7XG4gICAgY29uc3QgaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXhOYW1lcyA9IHZlcnRleE5hbWVzRnJvbVZlcnRleGVzKHRoaXMuaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXhlcyk7XG5cbiAgICByZXR1cm4gaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXhOYW1lcztcbiAgfVxuXG4gIHNldE5hbWUobmFtZSkge1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gIH1cblxuICBzZXRJbmRleChpbmRleCkge1xuICAgIHRoaXMuaW5kZXggPSBpbmRleDtcbiAgfVxuXG4gIHNldEltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleGVzKGltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleGVzKSB7XG4gICAgdGhpcy5pbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXhlcyA9IGltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleGVzO1xuICB9XG5cbiAgc2V0SW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXhlcyhpbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleGVzKSB7XG4gICAgdGhpcy5pbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleGVzID0gaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXhlcztcbiAgfVxuXG4gIGRlY3JlbWVudEluZGV4KCkge1xuICAgIHRoaXMuaW5kZXgtLTtcbiAgfVxuXG4gIGFkZEltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleChpbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXgpIHtcbiAgICB0aGlzLmltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleGVzLnB1c2goaW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4KTtcbiAgfVxuXG4gIGFkZEltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4KGltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4KSB7XG4gICAgdGhpcy5pbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleGVzLnB1c2goaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXgpO1xuICB9XG5cbiAgcmVtb3ZlSW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4KGltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleCkge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5pbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXhlcy5pbmRleE9mKGltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleCksXG4gICAgICAgICAgc3RhcnQgPSBpbmRleCwgIC8vL1xuICAgICAgICAgIGRlbGV0ZUNvdW50ID0gMTtcblxuICAgIHRoaXMuaW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4ZXMuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCk7XG4gIH1cblxuICByZW1vdmVJbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleChpbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleCkge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5pbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleGVzLmluZGV4T2YoaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXgpLFxuICAgICAgICAgIHN0YXJ0ID0gaW5kZXgsICAvLy9cbiAgICAgICAgICBkZWxldGVDb3VudCA9IDE7XG5cbiAgICB0aGlzLmltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4ZXMuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCk7XG4gIH1cblxuICBmb3J3YXJkc0RlcHRoRmlyc3RTZWFyY2goY2FsbGJhY2spIHtcbiAgICBjb25zdCB2ZXJ0ZXggPSB0aGlzLCAgLy8vXG4gICAgICAgICAgdmlzaXRlZFZlcnRleGVzID0gW107XG5cbiAgICBmb3J3YXJkc0RlcHRoRmlyc3RTZWFyY2godmVydGV4LCBjYWxsYmFjaywgdmlzaXRlZFZlcnRleGVzKTtcblxuICAgIHJldHVybiB2aXNpdGVkVmVydGV4ZXM7XG4gIH1cblxuICBiYWNrd2FyZHNEZXB0aEZpcnN0U2VhcmNoKGNhbGxiYWNrKSB7XG4gICAgY29uc3QgdmVydGV4ID0gdGhpcywgIC8vL1xuICAgICAgICAgIHZpc2l0ZWRWZXJ0ZXhlcyA9IFtdO1xuXG4gICAgYmFja3dhcmRzRGVwdGhGaXJzdFNlYXJjaCh2ZXJ0ZXgsIGNhbGxiYWNrLCB2aXNpdGVkVmVydGV4ZXMpO1xuXG4gICAgcmV0dXJuIHZpc2l0ZWRWZXJ0ZXhlcztcbiAgfVxuXG4gIHNvbWVJbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXgoY2FsbGJhY2spIHtcbiAgICByZXR1cm4gdGhpcy5pbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXhlcy5zb21lKGNhbGxiYWNrKTtcbiAgfVxuXG4gIHNvbWVJbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleChjYWxsYmFjaykge1xuICAgIHJldHVybiB0aGlzLmltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4ZXMuc29tZShjYWxsYmFjayk7XG4gIH1cblxuICBmb3JFYWNoSW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4KGNhbGxiYWNrKSB7XG4gICAgdGhpcy5pbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXhlcy5mb3JFYWNoKGNhbGxiYWNrKTtcbiAgfVxuXG4gIGZvckVhY2hJbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleChjYWxsYmFjaykge1xuICAgIHRoaXMuaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXhlcy5mb3JFYWNoKGNhbGxiYWNrKTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTmFtZUFuZEluZGV4KG5hbWUsIGluZGV4KSB7XG4gICAgY29uc3QgaW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4ZXMgPSBbXSxcbiAgICAgICAgICBpbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleGVzID0gW10sXG4gICAgICAgICAgZGVwZW5kZW5jeVZlcnRleCA9IG5ldyBWZXJ0ZXgobmFtZSwgaW5kZXgsIGltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleGVzLCBpbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleGVzKTtcblxuICAgIHJldHVybiBkZXBlbmRlbmN5VmVydGV4O1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBvcmRlckluZGV4ZXMoaW5kZXhlcykgeyAgLy8vXG4gIGluZGV4ZXMuc29ydCgoZmlyc3RJbmRleCwgc2Vjb25kSW5kZXgpID0+IHtcbiAgICBpZiAoZmFsc2UpIHtcbiAgICAgIC8vL1xuICAgIH0gZWxzZSBpZiAoZmlyc3RJbmRleCA8IHNlY29uZEluZGV4KSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfSBlbHNlICBpZiAoZmlyc3RJbmRleCA+IHNlY29uZEluZGV4KSB7XG4gICAgICByZXR1cm4gKzE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmRleGVzRnJvbVZlcnRleGVzKHZlcnRleGVzKSB7XG4gIGNvbnN0IGluZGV4ZXMgPSB2ZXJ0ZXhlcy5tYXAoKHZlcnRleCkgPT4ge1xuICAgIGNvbnN0IGluZGV4ID0gdmVydGV4LmdldEluZGV4KCk7XG5cbiAgICByZXR1cm4gaW5kZXg7XG4gIH0pO1xuXG4gIHJldHVybiBpbmRleGVzO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IEVkZ2UgZnJvbSBcIi4vZWRnZVwiO1xuaW1wb3J0IEN5Y2xlIGZyb20gXCIuL2N5Y2xlXCI7XG5pbXBvcnQgVmVydGV4IGZyb20gXCIuL3ZlcnRleFwiO1xuXG5pbXBvcnQgeyBvcmRlckluZGV4ZXMsIGluZGV4ZXNGcm9tVmVydGV4ZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvaW5kZXhcIjtcbmltcG9ydCB7IG9yZGVyVmVydGV4ZXMsIHZlcnRleE5hbWVzRnJvbVZlcnRleGVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL3ZlcnRleFwiO1xuXG5jb25zdCB7IGZpcnN0IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlyZWN0ZWRHcmFwaCB7XG4gIGNvbnN0cnVjdG9yKHZlcnRleE1hcCkge1xuICAgIHRoaXMudmVydGV4TWFwID0gdmVydGV4TWFwO1xuICB9XG5cbiAgZ2V0VmVydGV4TmFwKCkge1xuICAgIHJldHVybiB0aGlzLnZlcnRleE1hcDtcbiAgfVxuXG4gIGdldFZlcnRleGVzKCkge1xuICAgIGNvbnN0IHZlcnRleE1hcFZhbHVlcyA9IE9iamVjdC52YWx1ZXModGhpcy52ZXJ0ZXhNYXApLFxuICAgICAgICAgIHZlcnRleGVzID0gdmVydGV4TWFwVmFsdWVzOyAvLy9cblxuICAgIHJldHVybiB2ZXJ0ZXhlcztcbiAgfVxuXG4gIGdldFZlcnRleE5hbWVzKCkge1xuICAgIGNvbnN0IHZlcnRleE1hcEtleXMgPSBPYmplY3Qua2V5cyh0aGlzLnZlcnRleE1hcCksXG4gICAgICAgICAgdmVydGV4TmFtZXMgPSB2ZXJ0ZXhNYXBLZXlzOyAgLy8vXG5cbiAgICByZXR1cm4gdmVydGV4TmFtZXM7XG4gIH1cblxuICBnZXRPcmRlcmVkVmVydGV4TmFtZXMoKSB7XG4gICAgY29uc3QgdmVydGV4ZXMgPSB0aGlzLmdldFZlcnRleGVzKCk7XG5cbiAgICBvcmRlclZlcnRleGVzKHZlcnRleGVzKTtcblxuICAgIGNvbnN0IG9yZGVyZWRWZXJ0ZXhlcyA9IHZlcnRleGVzLCAvLy9cbiAgICAgICAgICBvcmRlcmVkVmVydGV4TmFtZXMgPSB2ZXJ0ZXhOYW1lc0Zyb21WZXJ0ZXhlcyhvcmRlcmVkVmVydGV4ZXMpO1xuXG4gICAgcmV0dXJuIG9yZGVyZWRWZXJ0ZXhOYW1lcztcbiAgfVxuXG4gIGdldFZlcnRleEJ5VmVydGV4TmFtZSh2ZXJ0ZXhOYW1lKSB7XG4gICAgY29uc3QgdmVydGV4UHJlc2VudCA9IHRoaXMuaXNWZXJ0ZXhQcmVzZW50QnlWZXJ0ZXhOYW1lKHZlcnRleE5hbWUpLFxuICAgICAgICAgIHZlcnRleCA9IHZlcnRleFByZXNlbnQgP1xuICAgICAgICAgICAgICAgICAgICAgdGhpcy52ZXJ0ZXhNYXBbdmVydGV4TmFtZV0gOlxuICAgICAgICAgICAgICAgICAgICAgICBudWxsO1xuXG4gICAgcmV0dXJuIHZlcnRleDtcbiAgfVxuXG4gIGdldEVkZ2VzQnlTb3VyY2VWZXJ0ZXhOYW1lKHNvdXJjZVZlcnRleE5hbWUpIHtcbiAgICBjb25zdCBlZGdlcyA9IFtdLFxuICAgICAgICAgIHNvdXJjZVZlcnRleCA9IHRoaXMuZ2V0VmVydGV4QnlWZXJ0ZXhOYW1lKHNvdXJjZVZlcnRleE5hbWUpO1xuXG4gICAgaWYgKHNvdXJjZVZlcnRleCAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgaW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4ZXMgPSBzb3VyY2VWZXJ0ZXguZ2V0SW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4ZXMoKSxcbiAgICAgICAgICAgIGltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleE5hbWVzID0gdmVydGV4TmFtZXNGcm9tVmVydGV4ZXMoaW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4ZXMpLFxuICAgICAgICAgICAgdGFyZ2V0VmVydGV4TmFtZXMgPSBpbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXhOYW1lczsgIC8vL1xuXG4gICAgICB0YXJnZXRWZXJ0ZXhOYW1lcy5mb3JFYWNoKCh0YXJnZXRWZXJ0ZXhOYW1lKSA9PiB7XG4gICAgICAgIGNvbnN0IGVkZ2UgPSBFZGdlLmZyb21Tb3VyY2VWZXJ0ZXhOYW1lQW5kVGFyZ2V0VmVydGV4TmFtZShzb3VyY2VWZXJ0ZXhOYW1lLCB0YXJnZXRWZXJ0ZXhOYW1lKTtcblxuICAgICAgICBlZGdlcy5wdXNoKGVkZ2UpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVkZ2VzO1xuICB9XG5cbiAgZ2V0RWRnZXNCeVRhcmdldFZlcnRleE5hbWUodGFyZ2V0VmVydGV4TmFtZSkge1xuICAgIGNvbnN0IGVkZ2VzID0gW10sXG4gICAgICAgICAgdGFyZ2V0VmVydGV4ID0gdGhpcy5nZXRWZXJ0ZXhCeVZlcnRleE5hbWUodGFyZ2V0VmVydGV4TmFtZSk7XG5cbiAgICBpZiAodGFyZ2V0VmVydGV4ICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBpbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleGVzID0gdGFyZ2V0VmVydGV4LmdldEltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4ZXMoKSxcbiAgICAgICAgICAgIGltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4TmFtZXMgPSB2ZXJ0ZXhOYW1lc0Zyb21WZXJ0ZXhlcyhpbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleGVzKSxcbiAgICAgICAgICAgIHNvdXJjZVZlcnRleE5hbWVzID0gaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXhOYW1lczsgIC8vL1xuXG4gICAgICBzb3VyY2VWZXJ0ZXhOYW1lcy5mb3JFYWNoKChzb3VyY2VWZXJ0ZXhOYW1lKSA9PiB7XG4gICAgICAgIGNvbnN0IGVkZ2UgPSBFZGdlLmZyb21Tb3VyY2VWZXJ0ZXhOYW1lQW5kVGFyZ2V0VmVydGV4TmFtZShzb3VyY2VWZXJ0ZXhOYW1lLCB0YXJnZXRWZXJ0ZXhOYW1lKTtcblxuICAgICAgICBlZGdlcy5wdXNoKGVkZ2UpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVkZ2VzO1xuICB9XG5cbiAgZ2V0Rmlyc3RDeWNsZSgpIHtcbiAgICBsZXQgZmlyc3RDeWNsZSA9IG51bGw7XG5cbiAgICBjb25zdCBjeWNsZXNQcmVzZW50ID0gdGhpcy5hcmVDeWNsZXNQcmVzZW50KCk7XG5cbiAgICBpZiAoY3ljbGVzUHJlc2VudCkge1xuICAgICAgY29uc3QgY3ljbGljRWRnZXMgPSB0aGlzLmdldEN5Y2xpY0VkZ2VzKCksXG4gICAgICAgICAgICBmaXJzdEN5Y2xpY0VkZ2UgPSBmaXJzdChjeWNsaWNFZGdlcyksXG4gICAgICAgICAgICBzb3VyY2VWZXJ0ZXhOYW1lID0gZmlyc3RDeWNsaWNFZGdlLmdldFNvdXJjZVZlcnRleE5hbWUoKSwgLy8vXG4gICAgICAgICAgICB0YXJnZXRWZXJ0ZXhOYW1lID0gZmlyc3RDeWNsaWNFZGdlLmdldFRhcmdldFZlcnRleE5hbWUoKSwgLy8vXG4gICAgICAgICAgICBzb3VyY2VWZXJ0ZXggPSB0aGlzLmdldFZlcnRleEJ5VmVydGV4TmFtZShzb3VyY2VWZXJ0ZXhOYW1lKSxcbiAgICAgICAgICAgIHRhcmdldFZlcnRleCA9IHRoaXMuZ2V0VmVydGV4QnlWZXJ0ZXhOYW1lKHRhcmdldFZlcnRleE5hbWUpO1xuXG4gICAgICB0YXJnZXRWZXJ0ZXguZm9yd2FyZHNEZXB0aEZpcnN0U2VhcmNoKCh2ZXJ0ZXgsIHByZWRlY2Vzc29yVmVydGV4ZXMpID0+IHtcbiAgICAgICAgbGV0IHRlcm1pbmF0ZSA9IGZhbHNlO1xuXG4gICAgICAgIGlmICh2ZXJ0ZXggPT09IHNvdXJjZVZlcnRleCkge1xuICAgICAgICAgIHRlcm1pbmF0ZSA9IHRydWU7XG5cbiAgICAgICAgICBjb25zdCBjeWNsZSA9IEN5Y2xlLmZyb21Tb3VyY2VWZXJ0ZXhBbmRQcmVkZWNlc3NvclZlcnRleGVzKHNvdXJjZVZlcnRleCwgcHJlZGVjZXNzb3JWZXJ0ZXhlcyk7ICAvLy9cblxuICAgICAgICAgIGZpcnN0Q3ljbGUgPSBjeWNsZTsgLy8vXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGVybWluYXRlO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpcnN0Q3ljbGU7XG4gIH1cblxuICBnZXRDeWNsaWNFZGdlcygpIHtcbiAgICBjb25zdCBjeWNsaWNFZGdlcyA9IFtdLFxuICAgICAgICAgIHZlcnRleGVzID0gdGhpcy5nZXRWZXJ0ZXhlcygpO1xuXG4gICAgdmVydGV4ZXMuZm9yRWFjaCgodmVydGV4KSA9PiB7XG4gICAgICBjb25zdCBzb3VyY2VWZXJ0ZXggPSB2ZXJ0ZXgsICAvLy9cbiAgICAgICAgICAgIHNvdXJjZVZlcnRleEluZGV4ID0gc291cmNlVmVydGV4LmdldEluZGV4KCk7XG5cbiAgICAgIHZlcnRleC5mb3JFYWNoSW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4KChpbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXgpID0+IHtcbiAgICAgICAgY29uc3QgdGFyZ2V0VmVydGV4ID0gaW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4LCAgLy8vXG4gICAgICAgICAgICAgIHRhcmdldFZlcnRleEluZGV4ID0gdGFyZ2V0VmVydGV4LmdldEluZGV4KCk7XG5cbiAgICAgICAgaWYgKHRhcmdldFZlcnRleEluZGV4IDwgc291cmNlVmVydGV4SW5kZXgpIHtcbiAgICAgICAgICBjb25zdCBzb3VyY2VWZXJ0ZXhOYW1lID0gc291cmNlVmVydGV4LmdldE5hbWUoKSxcbiAgICAgICAgICAgICAgICB0YXJnZXRWZXJ0ZXhOYW1lID0gdGFyZ2V0VmVydGV4LmdldE5hbWUoKSxcbiAgICAgICAgICAgICAgICBlZGdlID0gRWRnZS5mcm9tU291cmNlVmVydGV4TmFtZUFuZFRhcmdldFZlcnRleE5hbWUoc291cmNlVmVydGV4TmFtZSwgdGFyZ2V0VmVydGV4TmFtZSksXG4gICAgICAgICAgICAgICAgY3ljbGljRWRnZSA9IGVkZ2U7ICAvLy9cblxuICAgICAgICAgIGN5Y2xpY0VkZ2VzLnB1c2goY3ljbGljRWRnZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBzb3VyY2VWZXJ0ZXhcbiAgICB9KTtcblxuICAgIHJldHVybiBjeWNsaWNFZGdlcztcbiAgfVxuXG4gIGFyZUN5Y2xlc1ByZXNlbnQoKSB7XG4gICAgY29uc3QgdmVydGV4ZXMgPSB0aGlzLmdldFZlcnRleGVzKCksXG4gICAgICAgICAgY3ljbGVzUHJlc2VudCA9IHZlcnRleGVzLnNvbWUoKHZlcnRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc291cmNlVmVydGV4ID0gdmVydGV4LCAgLy8vXG4gICAgICAgICAgICAgICAgICBzb3VyY2VWZXJ0ZXhJbmRleCA9IHNvdXJjZVZlcnRleC5nZXRJbmRleCgpLFxuICAgICAgICAgICAgICAgICAgY3ljbGljRWRnZVByZXNlbnQgPSB2ZXJ0ZXguc29tZUltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleCgoaW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldFZlcnRleCA9IGltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleCwgIC8vL1xuICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRWZXJ0ZXhJbmRleCA9IHRhcmdldFZlcnRleC5nZXRJbmRleCgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXRWZXJ0ZXhJbmRleCA8IHNvdXJjZVZlcnRleEluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAoY3ljbGljRWRnZVByZXNlbnQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICByZXR1cm4gY3ljbGVzUHJlc2VudDtcbiAgfVxuXG4gIGlzRWRnZVByZXNlbnQoZWRnZSkge1xuICAgIGxldCBlZGdlUHJlc2VudCA9IGZhbHNlO1xuXG4gICAgY29uc3Qgc291cmNlVmVydGV4TmFtZSA9IGVkZ2UuZ2V0U291cmNlVmVydGV4TmFtZSgpLFxuICAgICAgICAgIHNvdXJjZVZlcnRleCA9IHRoaXMuZ2V0VmVydGV4QnlWZXJ0ZXhOYW1lKHNvdXJjZVZlcnRleE5hbWUpO1xuXG4gICAgaWYgKHNvdXJjZVZlcnRleCAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgdGFyZ2V0VmVydGV4TmFtZSA9IGVkZ2UuZ2V0VGFyZ2V0VmVydGV4TmFtZSgpLFxuICAgICAgICAgICAgdGFyZ2V0VmVydGV4ID0gdGhpcy5nZXRWZXJ0ZXhCeVZlcnRleE5hbWUodGFyZ2V0VmVydGV4TmFtZSk7XG5cbiAgICAgIGlmICh0YXJnZXRWZXJ0ZXggIT09IG51bGwpIHtcbiAgICAgICAgZWRnZVByZXNlbnQgPSBzb3VyY2VWZXJ0ZXguaXNFZGdlUHJlc2VudEJ5VGFyZ2V0VmVydGV4KHRhcmdldFZlcnRleCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGVkZ2VQcmVzZW50O1xuICB9XG5cbiAgaXNWZXJ0ZXhQcmVzZW50QnlWZXJ0ZXhOYW1lKHZlcnRleE5hbWUpIHtcbiAgICBjb25zdCB2ZXJ0ZXhOYW1lcyA9IHRoaXMuZ2V0VmVydGV4TmFtZXMoKSxcbiAgICAgICAgICB2ZXJ0ZXhOYW1lc0luY2x1ZGVzVmVydGV4TmFtZSA9IHZlcnRleE5hbWVzLmluY2x1ZGVzKHZlcnRleE5hbWUpLFxuICAgICAgICAgIHZlcnRleFByZXNlbnQgPSB2ZXJ0ZXhOYW1lc0luY2x1ZGVzVmVydGV4TmFtZTsgIC8vL1xuXG4gICAgcmV0dXJuIHZlcnRleFByZXNlbnQ7XG4gIH1cblxuICBnZXRJbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXhOYW1lc0J5VmVydGV4TmFtZSh2ZXJ0ZXhOYW1lKSB7XG4gICAgY29uc3QgdmVydGV4ID0gdGhpcy5nZXRWZXJ0ZXhCeVZlcnRleE5hbWUodmVydGV4TmFtZSksXG4gICAgICAgICAgaW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4TmFtZXMgPSB2ZXJ0ZXguZ2V0SW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4TmFtZXMoKTtcblxuICAgIHJldHVybiBpbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXhOYW1lcztcbiAgfVxuXG4gIGdldEltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4TmFtZXNCeVZlcnRleE5hbWUodmVydGV4TmFtZSkge1xuICAgIGNvbnN0IHZlcnRleCA9IHRoaXMuZ2V0VmVydGV4QnlWZXJ0ZXhOYW1lKHZlcnRleE5hbWUpLFxuICAgICAgICAgIGltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4TmFtZXMgPSB2ZXJ0ZXguZ2V0SW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXhOYW1lcygpO1xuXG4gICAgcmV0dXJuIGltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4TmFtZXM7XG4gIH1cblxuICBpc0VkZ2VQcmVzZW50QnlTb3VyY2VWZXJ0ZXhOYW1lQW5kVGFyZ2V0VmVydGV4TmFtZShzb3VyY2VWZXJ0ZXhOYW1lLCB0YXJnZXRWZXJ0ZXhOYW1lKSB7XG4gICAgY29uc3QgZWRnZSA9IEVkZ2UuZnJvbVNvdXJjZVZlcnRleE5hbWVBbmRUYXJnZXRWZXJ0ZXhOYW1lKHNvdXJjZVZlcnRleE5hbWUsIHRhcmdldFZlcnRleE5hbWUpLFxuICAgICAgICAgIGVkZ2VQcmVzZW50ID0gdGhpcy5pc0VkZ2VQcmVzZW50KGVkZ2UpO1xuXG4gICAgcmV0dXJuIGVkZ2VQcmVzZW50O1xuICB9XG5cbiAgYWRkVmVydGV4QnlWZXJ0ZXhOYW1lKHZlcnRleE5hbWUpIHtcbiAgICBjb25zdCB2ZXJ0ZXhQcmVzZW50ID0gdGhpcy5pc1ZlcnRleFByZXNlbnRCeVZlcnRleE5hbWUodmVydGV4TmFtZSk7XG5cbiAgICBpZiAoIXZlcnRleFByZXNlbnQpIHtcbiAgICAgIGNvbnN0IHZlcnRleE5hbWVzID0gdGhpcy5nZXRWZXJ0ZXhOYW1lcygpLFxuICAgICAgICAgICAgdmVydGV4TmFtZXNMZW5ndGggPSB2ZXJ0ZXhOYW1lcy5sZW5ndGgsXG4gICAgICAgICAgICBuYW1lID0gdmVydGV4TmFtZSwgIC8vL1xuICAgICAgICAgICAgaW5kZXggPSB2ZXJ0ZXhOYW1lc0xlbmd0aCwgLy8vXG4gICAgICAgICAgICB2ZXJ0ZXggPSBWZXJ0ZXguZnJvbU5hbWVBbmRJbmRleChuYW1lLCBpbmRleCk7XG5cbiAgICAgIHRoaXMuc2V0VmVydGV4QnlWZXJ0ZXhOYW1lKHZlcnRleE5hbWUsIHZlcnRleCk7XG4gICAgfVxuXG4gICAgY29uc3QgdmVydGV4ID0gdGhpcy5nZXRWZXJ0ZXhCeVZlcnRleE5hbWUodmVydGV4TmFtZSk7XG5cbiAgICByZXR1cm4gdmVydGV4O1xuICB9XG5cbiAgcmVtb3ZlVmVydGV4QnlWZXJ0ZXhOYW1lKHZlcnRleE5hbWUpIHtcbiAgICBjb25zdCB2ZXJ0ZXhQcmVzZW50ID0gdGhpcy5pc1ZlcnRleFByZXNlbnRCeVZlcnRleE5hbWUodmVydGV4TmFtZSk7XG5cbiAgICBpZiAoIXZlcnRleFByZXNlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB2ZXJ0ZXggPSB0aGlzLmdldFZlcnRleEJ5VmVydGV4TmFtZSh2ZXJ0ZXhOYW1lKTtcblxuICAgIHZlcnRleC5mb3JFYWNoSW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4KChpbW1lZGlhdGVTdWNjZXNzVmVydGV4KSA9PiB7XG4gICAgICBjb25zdCBpbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleCA9IHZlcnRleDsgIC8vL1xuXG4gICAgICBpbW1lZGlhdGVTdWNjZXNzVmVydGV4LnJlbW92ZUltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4KGltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4KTtcbiAgICB9KTtcblxuICAgIHZlcnRleC5mb3JFYWNoSW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXgoKGltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4KSA9PiB7XG4gICAgICBjb25zdCBpbW1lZGlhdGVTdWNjZXNzVmVydGV4ID0gdmVydGV4OyAgLy8vXG5cbiAgICAgIGltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4LnJlbW92ZUltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleChpbW1lZGlhdGVTdWNjZXNzVmVydGV4KTtcbiAgICB9KTtcblxuICAgIHRoaXMuZGVsZXRlVmVydGV4QnlWZXJ0ZXhOYW1lKHZlcnRleE5hbWUpO1xuXG4gICAgY29uc3QgdmVydGV4ZXMgPSB0aGlzLmdldFZlcnRleGVzKCksXG4gICAgICAgICAgZGVsZXRlZFZlcnRleCA9IHZlcnRleCwgLy8vXG4gICAgICAgICAgZGVsZXRlZFZlcnRleEluZGV4ID0gZGVsZXRlZFZlcnRleC5nZXRJbmRleCgpO1xuXG4gICAgdmVydGV4ZXMuZm9yRWFjaCgodmVydGV4KSA9PiB7XG4gICAgICBjb25zdCB2ZXJ0ZXhJbmRleCA9IHZlcnRleC5nZXRJbmRleCgpO1xuXG4gICAgICBpZiAodmVydGV4SW5kZXggPiBkZWxldGVkVmVydGV4SW5kZXgpIHtcbiAgICAgICAgdmVydGV4LmRlY3JlbWVudEluZGV4KCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmZpbHRlckN5Y2xpY0VkZ2VzKCk7XG4gIH1cblxuICBhZGRWZXJ0ZXhlc0J5VmVydGV4TmFtZXModmVydGV4TmFtZXMpIHtcbiAgICB2ZXJ0ZXhOYW1lcy5mb3JFYWNoKCh2ZXJ0ZXhOYW1lKSA9PiB7XG4gICAgICB0aGlzLmFkZFZlcnRleEJ5VmVydGV4TmFtZSh2ZXJ0ZXhOYW1lKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlbW92ZVZlcnRleGVzQnlWZXJ0ZXhOYW1lcyh2ZXJ0ZXhOYW1lcykge1xuICAgIHZlcnRleE5hbWVzLmZvckVhY2goKHZlcnRleE5hbWUpID0+IHtcbiAgICAgIHRoaXMucmVtb3ZlVmVydGV4QnlWZXJ0ZXhOYW1lKHZlcnRleE5hbWUpO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkRWRnZShlZGdlKSB7XG4gICAgY29uc3Qgc291cmNlVmVydGV4TmFtZSA9IGVkZ2UuZ2V0U291cmNlVmVydGV4TmFtZSgpLFxuICAgICAgICAgIHRhcmdldFZlcnRleE5hbWUgPSBlZGdlLmdldFRhcmdldFZlcnRleE5hbWUoKTtcblxuICAgIGlmIChzb3VyY2VWZXJ0ZXhOYW1lID09PSB0YXJnZXRWZXJ0ZXhOYW1lKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc291cmNlVmVydGV4ID0gdGhpcy5hZGRWZXJ0ZXhCeVZlcnRleE5hbWUoc291cmNlVmVydGV4TmFtZSksXG4gICAgICAgICAgdGFyZ2V0VmVydGV4ID0gdGhpcy5hZGRWZXJ0ZXhCeVZlcnRleE5hbWUodGFyZ2V0VmVydGV4TmFtZSksXG4gICAgICAgICAgZWRnZVByZXNlbnQgPSBzb3VyY2VWZXJ0ZXguaXNFZGdlUHJlc2VudEJ5VGFyZ2V0VmVydGV4KHRhcmdldFZlcnRleCk7XG5cbiAgICBpZiAoZWRnZVByZXNlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzb3VyY2VWZXJ0ZXhJbmRleCA9IHNvdXJjZVZlcnRleC5nZXRJbmRleCgpLFxuICAgICAgICAgIHRhcmdldFZlcnRleEluZGV4ID0gdGFyZ2V0VmVydGV4LmdldEluZGV4KCk7XG5cbiAgICBpZiAoc291cmNlVmVydGV4SW5kZXggPiB0YXJnZXRWZXJ0ZXhJbmRleCkge1xuICAgICAgdGhpcy5yZW9yZGVyVmVydGV4ZXNCeVNvdXJjZVZlcnRleEFuZFRhcmdldFZlcnRleChzb3VyY2VWZXJ0ZXgsIHRhcmdldFZlcnRleCk7XG4gICAgfVxuXG4gICAgY29uc3QgaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXggPSBzb3VyY2VWZXJ0ZXgsIC8vL1xuICAgICAgICAgIGltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleCA9IHRhcmdldFZlcnRleDsgLy8vXG5cbiAgICBpbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleC5hZGRJbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXgoaW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4KTtcblxuICAgIGltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleC5hZGRJbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleChpbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleCk7XG4gIH1cblxuICBhZGRFZGdlcyhlZGdlcykge1xuICAgIGVkZ2VzLmZvckVhY2goKGVkZ2UpID0+IHtcbiAgICAgIHRoaXMuYWRkRWRnZShlZGdlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlbW92ZUVkZ2UoZWRnZSwgcmVtb3ZlU3RyYW5kZWRWZXJ0ZXhlcykge1xuICAgIGNvbnN0IHNvdXJjZVZlcnRleE5hbWUgPSBlZGdlLmdldFNvdXJjZVZlcnRleE5hbWUoKSxcbiAgICAgICAgICB0YXJnZXRWZXJ0ZXhOYW1lID0gZWRnZS5nZXRUYXJnZXRWZXJ0ZXhOYW1lKCksXG4gICAgICAgICAgc291cmNlVmVydGV4ID0gdGhpcy5hZGRWZXJ0ZXhCeVZlcnRleE5hbWUoc291cmNlVmVydGV4TmFtZSksXG4gICAgICAgICAgdGFyZ2V0VmVydGV4ID0gdGhpcy5hZGRWZXJ0ZXhCeVZlcnRleE5hbWUodGFyZ2V0VmVydGV4TmFtZSksXG4gICAgICAgICAgZWRnZVByZXNlbnQgPSBzb3VyY2VWZXJ0ZXguaXNFZGdlUHJlc2VudEJ5VGFyZ2V0VmVydGV4KHRhcmdldFZlcnRleCk7XG5cbiAgICBpZiAoIWVkZ2VQcmVzZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc291cmNlVmVydGV4LnJlbW92ZUltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleCh0YXJnZXRWZXJ0ZXgpO1xuXG4gICAgdGFyZ2V0VmVydGV4LnJlbW92ZUltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4KHNvdXJjZVZlcnRleCk7XG5cbiAgICBpZiAocmVtb3ZlU3RyYW5kZWRWZXJ0ZXhlcykge1xuICAgICAgY29uc3Qgc291cmNlVmVydGV4U3RyYW5kZWQgPSBzb3VyY2VWZXJ0ZXguaXNTdHJhbmRlZCgpLFxuICAgICAgICAgICAgdGFyZ2V0VmVydGV4U3RyYW5kZWQgPSB0YXJnZXRWZXJ0ZXguaXNTdHJhbmRlZCgpO1xuXG4gICAgICBpZiAoc291cmNlVmVydGV4U3RyYW5kZWQpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVWZXJ0ZXhCeVZlcnRleE5hbWUoc291cmNlVmVydGV4TmFtZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0YXJnZXRWZXJ0ZXhTdHJhbmRlZCkge1xuICAgICAgICB0aGlzLnJlbW92ZVZlcnRleEJ5VmVydGV4TmFtZSh0YXJnZXRWZXJ0ZXhOYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmZpbHRlckN5Y2xpY0VkZ2VzKCk7XG4gIH1cblxuICByZW1vdmVFZGdlcyhlZGdlcywgcmVtb3ZlU3RyYW5kZWRWZXJ0ZXhlcyA9IGZhbHNlKSB7XG4gICAgZWRnZXMuZm9yRWFjaCgoZWRnZSkgPT4ge1xuICAgICAgdGhpcy5yZW1vdmVFZGdlKGVkZ2UsIHJlbW92ZVN0cmFuZGVkVmVydGV4ZXMpO1xuICAgIH0pO1xuICB9XG5cbiAgcmVtb3ZlQWxsRWRnZXNBbmRWZXJ0ZXhlcygpIHtcbiAgICB0aGlzLnZlcnRleE1hcCA9IHt9O1xuICB9XG5cbiAgYWRkRWRnZUJ5U291cmNlVmVydGV4TmFtZUFuZFRhcmdldFZlcnRleE5hbWUoc291cmNlVmVydGV4TmFtZSwgdGFyZ2V0VmVydGV4TmFtZSkge1xuICAgIGNvbnN0IGVkZ2UgPSBFZGdlLmZyb21Tb3VyY2VWZXJ0ZXhOYW1lQW5kVGFyZ2V0VmVydGV4TmFtZShzb3VyY2VWZXJ0ZXhOYW1lLCB0YXJnZXRWZXJ0ZXhOYW1lKTtcblxuICAgIHRoaXMuYWRkRWRnZShlZGdlKTtcbiAgfVxuXG4gIHJlb3JkZXJWZXJ0ZXhlc0J5U291cmNlVmVydGV4QW5kVGFyZ2V0VmVydGV4KHNvdXJjZVZlcnRleCwgdGFyZ2V0VmVydGV4KSB7XG4gICAgY29uc3Qgc291cmNlVmVydGV4Rm9yd2FyZHNSZWFjaGFibGUgPSB0YXJnZXRWZXJ0ZXguaXNWZXJ0ZXhGb3J3YXJkc1JlYWNoYWJsZShzb3VyY2VWZXJ0ZXgpO1xuXG4gICAgaWYgKHNvdXJjZVZlcnRleEZvcndhcmRzUmVhY2hhYmxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZm9yd2FyZHNSZWFjaGFibGVWZXJ0ZXhlcyA9IHRhcmdldFZlcnRleC5yZXRyaWV2ZUZvcndhcmRzUmVhY2hhYmxlVmVydGV4ZXMoKSxcbiAgICAgICAgICBiYWNrd2FyZHNSZWFjaGFibGVWZXJ0ZXhlcyA9IHNvdXJjZVZlcnRleC5yZXRyaWV2ZUJhY2t3YXJkc1JlYWNoYWJsZVZlcnRleGVzKCk7XG5cbiAgICBvcmRlclZlcnRleGVzKGJhY2t3YXJkc1JlYWNoYWJsZVZlcnRleGVzKTtcblxuICAgIG9yZGVyVmVydGV4ZXMoZm9yd2FyZHNSZWFjaGFibGVWZXJ0ZXhlcyk7XG5cbiAgICBjb25zdCByZWFjaGFibGVWZXJ0ZXhlcyA9IFtcbiAgICAgICAgICAgIC4uLmJhY2t3YXJkc1JlYWNoYWJsZVZlcnRleGVzLFxuICAgICAgICAgICAgLi4uZm9yd2FyZHNSZWFjaGFibGVWZXJ0ZXhlc1xuICAgICAgICAgIF0sXG4gICAgICAgICAgcmVhY2hhYmxlSW5kZXhlcyA9IGluZGV4ZXNGcm9tVmVydGV4ZXMocmVhY2hhYmxlVmVydGV4ZXMpO1xuXG4gICAgb3JkZXJJbmRleGVzKHJlYWNoYWJsZUluZGV4ZXMpO1xuXG4gICAgcmVhY2hhYmxlVmVydGV4ZXMuZm9yRWFjaCgocmVhY2hhYmxlVmVydGV4LCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgcmVhY2hhYmxlSW5kZXggPSByZWFjaGFibGVJbmRleGVzW2luZGV4XTtcblxuICAgICAgaW5kZXggPSByZWFjaGFibGVJbmRleDsgLy8vXG5cbiAgICAgIHJlYWNoYWJsZVZlcnRleC5zZXRJbmRleChpbmRleCk7XG4gICAgfSk7XG4gIH1cblxuICBmaWx0ZXJDeWNsaWNFZGdlcygpIHtcbiAgICBjb25zdCBjeWNsaWNFZGdlcyA9IHRoaXMuZ2V0Q3ljbGljRWRnZXMoKSxcbiAgICAgICAgICBlZGdlcyA9IGN5Y2xpY0VkZ2VzOyAgLy8vXG5cbiAgICBlZGdlcy5mb3JFYWNoKChlZGdlKSA9PiB7XG4gICAgICBjb25zdCBzb3VyY2VWZXJ0ZXhOYW1lID0gZWRnZS5nZXRTb3VyY2VWZXJ0ZXhOYW1lKCksXG4gICAgICAgICAgICB0YXJnZXRWZXJ0ZXhOYW1lID0gZWRnZS5nZXRUYXJnZXRWZXJ0ZXhOYW1lKCksXG4gICAgICAgICAgICBzb3VyY2VWZXJ0ZXggPSB0aGlzLmdldFZlcnRleEJ5VmVydGV4TmFtZShzb3VyY2VWZXJ0ZXhOYW1lKSxcbiAgICAgICAgICAgIHRhcmdldFZlcnRleCA9IHRoaXMuZ2V0VmVydGV4QnlWZXJ0ZXhOYW1lKHRhcmdldFZlcnRleE5hbWUpLFxuICAgICAgICAgICAgc291cmNlVmVydGV4Rm9yd2FyZHNSZWFjaGFibGUgPSB0YXJnZXRWZXJ0ZXguaXNWZXJ0ZXhGb3J3YXJkc1JlYWNoYWJsZShzb3VyY2VWZXJ0ZXgpO1xuXG4gICAgICBpZiAoIXNvdXJjZVZlcnRleEZvcndhcmRzUmVhY2hhYmxlKSB7XG4gICAgICAgIHRoaXMucmVvcmRlclZlcnRleGVzQnlTb3VyY2VWZXJ0ZXhBbmRUYXJnZXRWZXJ0ZXgoc291cmNlVmVydGV4LCB0YXJnZXRWZXJ0ZXgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc2V0VmVydGV4QnlWZXJ0ZXhOYW1lKHZlcnRleE5hbWUsIHZlcnRleCkge1xuICAgIHRoaXMudmVydGV4TWFwW3ZlcnRleE5hbWVdID0gdmVydGV4O1xuICB9XG5cbiAgZGVsZXRlVmVydGV4QnlWZXJ0ZXhOYW1lKHZlcnRleE5hbWUpIHtcbiAgICBkZWxldGUgdGhpcy52ZXJ0ZXhNYXBbdmVydGV4TmFtZV07XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3QgdmVydGV4TWFwID0ge30sXG4gICAgICAgICAgZGlyZWN0ZWRHcmFwaCA9IG5ldyBEaXJlY3RlZEdyYXBoKHZlcnRleE1hcCk7XG4gICAgXG4gICAgcmV0dXJuIGRpcmVjdGVkR3JhcGg7ICAgIFxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgRWRnZSB9IGZyb20gXCIuL2VkZ2VcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ3ljbGUgfSBmcm9tIFwiLi9jeWNsZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBWZXJ0ZXggfSBmcm9tIFwiLi92ZXJ0ZXhcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRGlyZWN0ZWRHcmFwaCB9IGZyb20gXCIuL2RpcmVjdGVkR3JhcGhcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgRWRnZSwgRGlyZWN0ZWRHcmFwaCB9IGZyb20gXCIuL2luZGV4XCI7ICAvLy9cblxuY29uc3QgZWRnZTEgPSBFZGdlLmZyb21Tb3VyY2VWZXJ0ZXhOYW1lQW5kVGFyZ2V0VmVydGV4TmFtZShcIi4vZWFzeS13aXRoLXN0eWxlXCIsIFwiLi9lYXN5LWxheW91dFwiKSxcbiAgICAgIGVkZ2UyID0gRWRnZS5mcm9tU291cmNlVmVydGV4TmFtZUFuZFRhcmdldFZlcnRleE5hbWUoXCIuL3dpdGgtc3R5bGVcIiwgXCIuL2Vhc3ktd2l0aC1zdHlsZVwiKSxcbiAgICAgIGVkZ2UzID0gRWRnZS5mcm9tU291cmNlVmVydGV4TmFtZUFuZFRhcmdldFZlcnRleE5hbWUoXCIuL2Vhc3ktbGF5b3V0XCIsIFwiLi9vY2NhbS1sZXhlcnNcIiksXG4gICAgICBlZGdlNCA9IEVkZ2UuZnJvbVNvdXJjZVZlcnRleE5hbWVBbmRUYXJnZXRWZXJ0ZXhOYW1lKFwiLi9lYXN5LXdpdGgtc3R5bGVcIiwgXCIuL2Vhc3ktbGF5b3V0XCIpLFxuICAgICAgZWRnZTUgPSBFZGdlLmZyb21Tb3VyY2VWZXJ0ZXhOYW1lQW5kVGFyZ2V0VmVydGV4TmFtZShcIi4vb2NjYW0tbGV4ZXJzXCIsIFwiLi93aXRoLXN0eWxlXCIpO1xuXG5jb25zdCBkaXJlY3RlZEdyYXBoID0gRGlyZWN0ZWRHcmFwaC5mcm9tTm90aGluZygpO1xuXG5kaXJlY3RlZEdyYXBoLmFkZEVkZ2UoZWRnZTEpO1xuZGlyZWN0ZWRHcmFwaC5hZGRFZGdlKGVkZ2UyKTtcbmRpcmVjdGVkR3JhcGguYWRkRWRnZShlZGdlMyk7XG5kaXJlY3RlZEdyYXBoLmFkZEVkZ2UoZWRnZTQpO1xuZGlyZWN0ZWRHcmFwaC5hZGRFZGdlKGVkZ2U1KTtcblxuZGlyZWN0ZWRHcmFwaC5yZW1vdmVWZXJ0ZXhCeVZlcnRleE5hbWUoXCIuL29jY2FtLWxleGVyc1wiKTtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7QUFBQTs7Ozs7bUNBRUEsV0FBQTs7O2VBQXFCOzs7QUFBTixxQkFBTTtNQUNuQixZQUFZLGtCQUFrQixrQkFBa0I7QUFDOUMsYUFBSyxtQkFBbUI7QUFDeEIsYUFBSyxtQkFBbUI7O01BRzFCLHNCQUFzQjtBQUNwQixlQUFPLEtBQUs7O01BR2Qsc0JBQXNCO0FBQ3BCLGVBQU8sS0FBSzs7TUFHZCxNQUFNLE1BQU07QUFDVixjQUFNLG1CQUFtQixLQUFLLHVCQUN4QixtQkFBbUIsS0FBSyx1QkFDeEIsVUFBWSxLQUFLLHFCQUFxQixvQkFBc0IsS0FBSyxxQkFBcUI7QUFFNUYsZUFBTzs7TUFHVCxnQkFBZ0IsWUFBWTtBQUMxQixjQUFNLFVBQVksS0FBSyxxQkFBcUIsY0FBZ0IsS0FBSyxxQkFBcUI7QUFFdEYsZUFBTzs7TUFHVCxzQkFBc0Isa0JBQWtCO0FBQ3RDLGNBQU0sVUFBVyxLQUFLLHFCQUFxQjtBQUUzQyxlQUFPOztNQUdULHNCQUFzQixrQkFBa0I7QUFDdEMsY0FBTSxVQUFXLEtBQUsscUJBQXFCO0FBRTNDLGVBQU87O01BR1QsaUJBQWlCLGtCQUFrQixrQkFBa0I7QUFDbkQsY0FBTSxVQUFZLEtBQUsscUJBQXFCLG9CQUFzQixLQUFLLHFCQUFxQjtBQUU1RixlQUFPOzthQUdGLHdDQUF3QyxrQkFBa0Isa0JBQWtCO0FBQ2pGLGNBQU0sT0FBTyxJQUFJLEtBQUssa0JBQWtCO0FBRXhDLGVBQU87Ozs7OztBQ25EWDs7Ozs7Ozs7Ozs7OztVQUVnQixnQkFBQTtlQUFBOztVQWlCQSwwQkFBQTtlQUFBOzs7QUFqQlQsMkJBQXVCLFVBQVE7QUFDcEMsZUFBUyxLQUFLLENBQUMsYUFBYSxpQkFBQTtBQUMxQixjQUFNLG1CQUFtQixZQUFZLFlBQy9CLG9CQUFvQixhQUFhO0FBRXZDLFlBQUksT0FBTzttQkFFQSxtQkFBbUIsbUJBQW1CO0FBQy9DLGlCQUFP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
|