easy-file-system 5.0.71 → 5.0.73

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.
Files changed (46) hide show
  1. package/package.json +3 -3
  2. package/src/example/view.js +25 -9
  3. package/lib/button/toggle.js +0 -60
  4. package/lib/constants.js +0 -34
  5. package/lib/customEventTypes.js +0 -46
  6. package/lib/div/item/entry/drag/directoryName.js +0 -42
  7. package/lib/div/item/entry/drag/fileName.js +0 -33
  8. package/lib/div/item/entry/drag.js +0 -37
  9. package/lib/div/item/entry/marker.js +0 -29
  10. package/lib/div/item/entry.js +0 -43
  11. package/lib/entryTypes.js +0 -30
  12. package/lib/example/preamble.js +0 -10
  13. package/lib/example/view/button.js +0 -28
  14. package/lib/example/view/explorer/first.js +0 -33
  15. package/lib/example/view/explorer/second.js +0 -30
  16. package/lib/example/view/rubbishBin.js +0 -22
  17. package/lib/example/view.js +0 -107
  18. package/lib/example.js +0 -19
  19. package/lib/explorer.js +0 -427
  20. package/lib/index.js +0 -83
  21. package/lib/item/entry/drag/directoryName.js +0 -152
  22. package/lib/item/entry/drag/fileName.js +0 -80
  23. package/lib/item/entry/drag.js +0 -207
  24. package/lib/item/entry/marker/directoryName.js +0 -39
  25. package/lib/item/entry/marker/fileName.js +0 -40
  26. package/lib/item/entry/marker.js +0 -32
  27. package/lib/item/entry.js +0 -76
  28. package/lib/list/entries.js +0 -510
  29. package/lib/mixins/dragEntryItem.js +0 -63
  30. package/lib/mixins/explorer.js +0 -76
  31. package/lib/mixins/nameSpan.js +0 -36
  32. package/lib/mixins/rubbishBin.js +0 -26
  33. package/lib/rubbishBin.js +0 -206
  34. package/lib/span/name.js +0 -117
  35. package/lib/styles.js +0 -66
  36. package/lib/svg/directoryName.js +0 -49
  37. package/lib/svg/fileName.js +0 -50
  38. package/lib/svg/marker.js +0 -43
  39. package/lib/svg/rubbishBin/closed.js +0 -68
  40. package/lib/svg/rubbishBin/open.js +0 -72
  41. package/lib/svg/toggle/down.js +0 -47
  42. package/lib/svg/toggle/up.js +0 -48
  43. package/lib/svg.js +0 -29
  44. package/lib/utilities/name.js +0 -66
  45. package/lib/utilities/path.js +0 -19
  46. package/lib/utilities/pathMap.js +0 -62
@@ -1,510 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "default", {
6
- enumerable: true,
7
- get: function() {
8
- return _default;
9
- }
10
- });
11
- const _easywithstyle = /*#__PURE__*/ _interop_require_default(require("easy-with-style"));
12
- const _easy = require("easy");
13
- const _necessary = require("necessary");
14
- const _styles = require("../styles");
15
- const _entryTypes = require("../entryTypes");
16
- function _interop_require_default(obj) {
17
- return obj && obj.__esModule ? obj : {
18
- default: obj
19
- };
20
- }
21
- const { filter } = _necessary.arrayUtilities, { topmostDirectoryNameFromPath, pathWithoutTopmostDirectoryNameFromPath } = _necessary.pathUtilities;
22
- function getMarkerEntryItem() {
23
- const { markerEntryItem } = globalThis;
24
- return markerEntryItem;
25
- }
26
- function setMarkerEntryItem(markerEntryItem) {
27
- Object.assign(globalThis, {
28
- markerEntryItem
29
- });
30
- }
31
- function resetMarkerEntryItem() {
32
- const markerEntryItem = null;
33
- setMarkerEntryItem(markerEntryItem);
34
- }
35
- Object.assign(globalThis, {
36
- getMarkerEntryItem,
37
- setMarkerEntryItem,
38
- resetMarkerEntryItem
39
- });
40
- resetMarkerEntryItem();
41
- class EntriesList extends _easy.Element {
42
- isTopmost() {
43
- const { topmost = false } = this.properties;
44
- return topmost;
45
- }
46
- getExplorer() {
47
- const { explorer } = this.properties;
48
- return explorer;
49
- }
50
- getEntryItems() {
51
- const childEntryItemElements = this.getChildElements("li.entry"), entryItems = childEntryItemElements; ///
52
- return entryItems;
53
- }
54
- getEntryItemsLength() {
55
- const entryItems = this.getEntryItems(), entryItemsLength = entryItems.length;
56
- return entryItemsLength;
57
- }
58
- isCollapsed() {
59
- const collapsed = this.hasClass("collapsed");
60
- return collapsed;
61
- }
62
- isEmpty() {
63
- const entryItems = this.getEntryItems(), entryItemsLength = entryItems.length, empty = entryItemsLength === 0;
64
- return empty;
65
- }
66
- addMarker(markerEntryItemPath, dragEntryItemType) {
67
- const topmostDirectoryName = topmostDirectoryNameFromPath(markerEntryItemPath);
68
- if (topmostDirectoryName === null) {
69
- const markerEntryItemName = markerEntryItemPath; ///
70
- this.addMarkerEntryItem(markerEntryItemName, dragEntryItemType);
71
- } else {
72
- const topmostDirectoryNameDragEntryItem = this.findDirectoryNameDragEntryItem(topmostDirectoryName), markerEntryItemPathWithoutTopmostDirectoryName = pathWithoutTopmostDirectoryNameFromPath(markerEntryItemPath);
73
- markerEntryItemPath = markerEntryItemPathWithoutTopmostDirectoryName; ///
74
- topmostDirectoryNameDragEntryItem.addMarker(markerEntryItemPath, dragEntryItemType);
75
- }
76
- }
77
- removeMarker() {
78
- this.removeMarkerEntryItem();
79
- }
80
- selectPath(path) {
81
- let dragEntryItem = null;
82
- const topmostDirectoryName = topmostDirectoryNameFromPath(path);
83
- if (topmostDirectoryName === null) {
84
- const name = path; ///
85
- dragEntryItem = this.findDragEntryItem(name);
86
- if (dragEntryItem !== null) {
87
- dragEntryItem.select();
88
- }
89
- } else {
90
- let topmostDirectoryNameDragEntryItem = this.findDirectoryNameDragEntryItem(topmostDirectoryName);
91
- if (topmostDirectoryNameDragEntryItem !== null) {
92
- const filePathWithoutTopmostDirectoryName = pathWithoutTopmostDirectoryNameFromPath(path);
93
- path = filePathWithoutTopmostDirectoryName; ///
94
- topmostDirectoryNameDragEntryItem.expand();
95
- dragEntryItem = topmostDirectoryNameDragEntryItem.selectPath(path);
96
- }
97
- }
98
- return dragEntryItem;
99
- }
100
- deselectPath(path) {
101
- let dragEntryItem = null;
102
- const topmostDirectoryName = topmostDirectoryNameFromPath(path);
103
- if (topmostDirectoryName === null) {
104
- const name = path; ///
105
- dragEntryItem = this.findDragEntryItem(name);
106
- if (dragEntryItem !== null) {
107
- dragEntryItem.deselect();
108
- }
109
- } else {
110
- let topmostDirectoryNameDragEntryItem = this.findDirectoryNameDragEntryItem(topmostDirectoryName);
111
- if (topmostDirectoryNameDragEntryItem !== null) {
112
- const filePathWithoutTopmostDirectoryName = pathWithoutTopmostDirectoryNameFromPath(path);
113
- path = filePathWithoutTopmostDirectoryName; ///
114
- dragEntryItem = topmostDirectoryNameDragEntryItem.deselectPath(path);
115
- }
116
- }
117
- return dragEntryItem;
118
- }
119
- addFilePath(filePath, readOnly = false) {
120
- let fileNameDragEntryItem;
121
- const topmostDirectoryName = topmostDirectoryNameFromPath(filePath);
122
- if (topmostDirectoryName === null) {
123
- const fileName = filePath; ///
124
- fileNameDragEntryItem = this.findFileNameDragEntryItem(fileName);
125
- if (fileNameDragEntryItem === null) {
126
- fileNameDragEntryItem = this.createFileNameDragEntryItem(fileName, readOnly);
127
- this.addEntryItem(fileNameDragEntryItem);
128
- }
129
- } else {
130
- let topmostDirectoryNameDragEntryItem = this.findDirectoryNameDragEntryItem(topmostDirectoryName);
131
- if (topmostDirectoryNameDragEntryItem === null) {
132
- const collapsed = true;
133
- topmostDirectoryNameDragEntryItem = this.createDirectoryNameDragEntryItem(topmostDirectoryName, readOnly, collapsed);
134
- this.addEntryItem(topmostDirectoryNameDragEntryItem);
135
- }
136
- const filePathWithoutTopmostDirectoryName = pathWithoutTopmostDirectoryNameFromPath(filePath);
137
- filePath = filePathWithoutTopmostDirectoryName; ///
138
- fileNameDragEntryItem = topmostDirectoryNameDragEntryItem.addFilePath(filePath, readOnly);
139
- }
140
- return fileNameDragEntryItem;
141
- }
142
- removeFilePath(filePath, removeEmptyParentDirectories = false) {
143
- const topmostDirectoryName = topmostDirectoryNameFromPath(filePath);
144
- if (topmostDirectoryName === null) {
145
- const fileName = filePath, fileNameDragEntryItem = this.findFileNameDragEntryItem(fileName);
146
- if (fileNameDragEntryItem !== null) {
147
- this.removeEntryItem(fileNameDragEntryItem);
148
- }
149
- } else {
150
- const topmostDirectoryNameDragEntryItem = this.findDirectoryNameDragEntryItem(topmostDirectoryName);
151
- if (topmostDirectoryNameDragEntryItem !== null) {
152
- const filePathWithoutTopmostDirectoryName = pathWithoutTopmostDirectoryNameFromPath(filePath);
153
- filePath = filePathWithoutTopmostDirectoryName; ///
154
- topmostDirectoryNameDragEntryItem.removeFilePath(filePath, removeEmptyParentDirectories);
155
- if (removeEmptyParentDirectories) {
156
- const topmostDirectoryNameDragEntryItemEmpty = topmostDirectoryNameDragEntryItem.isEmpty();
157
- if (topmostDirectoryNameDragEntryItemEmpty) {
158
- this.removeEntryItem(topmostDirectoryNameDragEntryItem);
159
- }
160
- }
161
- }
162
- }
163
- }
164
- removeAllPaths() {
165
- this.removeEntryItems();
166
- }
167
- deselectAllPaths() {
168
- const dragEntryItems = this.retrieveDragEntryItems();
169
- dragEntryItems.forEach((dragEntryItem)=>{
170
- dragEntryItem.deselect();
171
- });
172
- }
173
- addDirectoryPath(directoryPath, readOnly = false, collapsed = true) {
174
- let directoryNameDragEntryItem;
175
- const topmostDirectoryName = topmostDirectoryNameFromPath(directoryPath);
176
- if (topmostDirectoryName === null) {
177
- const directoryName = directoryPath; ///
178
- directoryNameDragEntryItem = this.findDirectoryNameDragEntryItem(directoryName);
179
- if (directoryNameDragEntryItem === null) {
180
- directoryNameDragEntryItem = this.createDirectoryNameDragEntryItem(directoryName, readOnly, collapsed);
181
- this.addEntryItem(directoryNameDragEntryItem);
182
- } else {
183
- collapsed ? directoryNameDragEntryItem.collapse() : directoryNameDragEntryItem.expand();
184
- }
185
- } else {
186
- let topmostDirectoryNameDragEntryItem = this.findDirectoryNameDragEntryItem(topmostDirectoryName);
187
- if (topmostDirectoryNameDragEntryItem === null) {
188
- topmostDirectoryNameDragEntryItem = this.createDirectoryNameDragEntryItem(topmostDirectoryName, readOnly, collapsed);
189
- this.addEntryItem(topmostDirectoryNameDragEntryItem);
190
- }
191
- const directoryPathWithoutTopmostDirectoryName = pathWithoutTopmostDirectoryNameFromPath(directoryPath);
192
- directoryPath = directoryPathWithoutTopmostDirectoryName; ///
193
- directoryNameDragEntryItem = topmostDirectoryNameDragEntryItem.addDirectoryPath(directoryPath, readOnly, collapsed);
194
- }
195
- return directoryNameDragEntryItem;
196
- }
197
- removeDirectoryPath(directoryPath, removeEmptyParentDirectories = false) {
198
- const topmostDirectoryName = topmostDirectoryNameFromPath(directoryPath);
199
- if (topmostDirectoryName === null) {
200
- const directoryName = directoryPath, directoryNameDragEntryItem = this.findDirectoryNameDragEntryItem(directoryName);
201
- if (directoryNameDragEntryItem !== null) {
202
- this.removeEntryItem(directoryNameDragEntryItem);
203
- }
204
- } else {
205
- const topmostDirectoryNameDragEntryItem = this.findDirectoryNameDragEntryItem(topmostDirectoryName);
206
- if (topmostDirectoryNameDragEntryItem !== null) {
207
- const directoryPathWithoutTopmostDirectoryName = pathWithoutTopmostDirectoryNameFromPath(directoryPath);
208
- directoryPath = directoryPathWithoutTopmostDirectoryName; ///
209
- topmostDirectoryNameDragEntryItem.removeDirectoryPath(directoryPath, removeEmptyParentDirectories);
210
- if (removeEmptyParentDirectories) {
211
- const topmostDirectoryNameDragEntryItemEmpty = topmostDirectoryNameDragEntryItem.isEmpty();
212
- if (topmostDirectoryNameDragEntryItemEmpty) {
213
- this.removeEntryItem(topmostDirectoryNameDragEntryItem);
214
- }
215
- }
216
- }
217
- }
218
- }
219
- addEntryItem(entryItem) {
220
- const nextEntryItem = entryItem, previousEntryItem = this.findEntryItem((entryItem)=>{
221
- const nextEntryBeforeEntryItem = nextEntryItem.isBefore(entryItem);
222
- if (nextEntryBeforeEntryItem) {
223
- return true;
224
- }
225
- });
226
- if (previousEntryItem === null) {
227
- this.mount(entryItem);
228
- } else {
229
- entryItem.mountBefore(previousEntryItem);
230
- }
231
- }
232
- removeEntryItem(entryItem) {
233
- this.unmount(entryItem);
234
- }
235
- removeEntryItems() {
236
- const entryItems = this.getEntryItems();
237
- entryItems.forEach((entryItem)=>{
238
- this.removeEntryItem(entryItem);
239
- });
240
- }
241
- addMarkerEntryItem(markerEntryItemName, dragEntryItemType) {
242
- let markerEntryItem;
243
- const name = markerEntryItemName, type = dragEntryItemType; ///
244
- switch(type){
245
- case _entryTypes.FILE_NAME_DRAG_ENTRY_TYPE:
246
- {
247
- const explorer = this.getExplorer(), FileNameMarkerEntryItem = explorer.getFileNameMarkerEntryItem(), fileNameMarkerEntryItem = /*#__PURE__*/ React.createElement(FileNameMarkerEntryItem, {
248
- name: name,
249
- explorer: explorer
250
- });
251
- markerEntryItem = fileNameMarkerEntryItem; ///
252
- break;
253
- }
254
- case _entryTypes.DIRECTORY_NAME_DRAG_ENTRY_TYPE:
255
- {
256
- const explorer = this.getExplorer(), DirectoryNameMarkerEntryItem = explorer.getDirectoryNameMarkerEntryItem(), directoryNameMarkerEntryItem = /*#__PURE__*/ React.createElement(DirectoryNameMarkerEntryItem, {
257
- name: name,
258
- explorer: explorer
259
- });
260
- markerEntryItem = directoryNameMarkerEntryItem; ///
261
- break;
262
- }
263
- }
264
- const entryItem = markerEntryItem; ///
265
- this.addEntryItem(entryItem);
266
- setMarkerEntryItem(markerEntryItem);
267
- }
268
- removeMarkerEntryItem() {
269
- const markerEntryItem = this.retrieveMarkerEntryItem();
270
- markerEntryItem.remove();
271
- resetMarkerEntryItem();
272
- resetDropElement();
273
- }
274
- createFileNameDragEntryItem(fileName, readOnly) {
275
- const name = fileName, explorer = this.getExplorer(), FileNameDragEntryItem = explorer.getFileNameDragEntryItem(readOnly), fileNameDragEntryItem = /*#__PURE__*/ React.createElement(FileNameDragEntryItem, {
276
- name: name,
277
- readOnly: readOnly,
278
- explorer: explorer
279
- });
280
- return fileNameDragEntryItem;
281
- }
282
- createDirectoryNameDragEntryItem(directoryName, readOnly, collapsed) {
283
- const name = directoryName, topmost = this.isTopmost(), explorer = this.getExplorer(), DirectoryNameDragEntryItem = explorer.getDirectoryNameDragEntryItem(readOnly, topmost), directoryNameDragEntryItem = /*#__PURE__*/ React.createElement(DirectoryNameDragEntryItem, {
284
- name: name,
285
- explorer: explorer,
286
- readOnly: readOnly,
287
- topmost: topmost,
288
- collapsed: collapsed
289
- });
290
- return directoryNameDragEntryItem;
291
- }
292
- isFileNameDragEntryItemPresent(fileName) {
293
- const fileNameDragEntryItem = this.findFileNameDragEntryItem(fileName), fileNameDragEntryItemPresent = fileNameDragEntryItem !== null;
294
- return fileNameDragEntryItemPresent;
295
- }
296
- isDirectoryNameDragEntryItemPresent(directoryName) {
297
- const directoryNameDragEntryItem = this.findDirectoryNameDragEntryItem(directoryName), directoryNameDragEntryItemPresent = directoryNameDragEntryItem !== null;
298
- return directoryNameDragEntryItemPresent;
299
- }
300
- forEachEntryItemByTypes(callback, ...types) {
301
- const entryItems = this.getEntryItems();
302
- entryItems.forEach((entryItem)=>{
303
- const entryItemType = entryItem.getType(), typesIncludesEntryItemType = types.includes(entryItemType);
304
- if (typesIncludesEntryItemType) {
305
- callback(entryItem);
306
- }
307
- });
308
- }
309
- forEachDragEntryItem(callback) {
310
- this.forEachEntryItemByTypes(callback, _entryTypes.FILE_NAME_DRAG_ENTRY_TYPE, _entryTypes.DIRECTORY_NAME_DRAG_ENTRY_TYPE);
311
- }
312
- forEachFileNameDragEntryItem(callback) {
313
- this.forEachEntryItemByTypes(callback, _entryTypes.FILE_NAME_DRAG_ENTRY_TYPE);
314
- }
315
- forEachDirectoryNameDragEntryItem(callback) {
316
- this.forEachEntryItemByTypes(callback, _entryTypes.DIRECTORY_NAME_DRAG_ENTRY_TYPE);
317
- }
318
- findEntryItem(callback) {
319
- const entryItems = this.getEntryItems(), entryItem = entryItems.find(callback) || null; ///
320
- return entryItem;
321
- }
322
- findEntryItemByTypes(callback, ...types) {
323
- const entryItems = this.getEntryItems(), entryItem = entryItems.find((entryItem)=>{
324
- const entryItemType = entryItem.getType(), typesIncludesEntryItemType = types.includes(entryItemType);
325
- if (typesIncludesEntryItemType) {
326
- const result = callback(entryItem);
327
- if (result) {
328
- return true;
329
- }
330
- }
331
- }) || null; ///;
332
- return entryItem;
333
- }
334
- findEntryItemsByTypes(...types) {
335
- const entryItems = this.getEntryItems();
336
- filter(entryItems, (entryItem)=>{
337
- const entryItemType = entryItem.getType(), typesIncludesEntryItemType = types.includes(entryItemType);
338
- if (typesIncludesEntryItemType) {
339
- return true;
340
- }
341
- });
342
- return entryItems;
343
- }
344
- findEntryItemByNameAndTypes(name, ...types) {
345
- const entryItem = this.findEntryItemByTypes((entryItem)=>{
346
- const entryItemName = entryItem.getName();
347
- if (entryItemName === name) {
348
- return true;
349
- }
350
- }, ...types) || null;
351
- return entryItem;
352
- }
353
- findDragEntryItem(name) {
354
- const entryItem = this.findEntryItemByNameAndTypes(name, _entryTypes.FILE_NAME_DRAG_ENTRY_TYPE, _entryTypes.DIRECTORY_NAME_DRAG_ENTRY_TYPE), dragEntryItem = entryItem; ///
355
- return dragEntryItem;
356
- }
357
- findDragEntryItems() {
358
- const entryItems = this.findEntryItemsByTypes(_entryTypes.FILE_NAME_DRAG_ENTRY_TYPE, _entryTypes.DIRECTORY_NAME_DRAG_ENTRY_TYPE), dragEntryItems = entryItems; ///
359
- return dragEntryItems;
360
- }
361
- findFileNameDragEntryItem(fileName) {
362
- const name = fileName, entryItem = this.findEntryItemByNameAndTypes(name, _entryTypes.FILE_NAME_DRAG_ENTRY_TYPE), fileNameDragEntryItem = entryItem; ///
363
- return fileNameDragEntryItem;
364
- }
365
- findDirectoryNameDragEntryItem(directoryName) {
366
- const entryItem = this.findEntryItemByNameAndTypes(directoryName, _entryTypes.DIRECTORY_NAME_DRAG_ENTRY_TYPE), directoryNameDragEntryItem = entryItem; ///
367
- return directoryNameDragEntryItem;
368
- }
369
- retrieveDragEntryItems(dragEntryItems = []) {
370
- this.forEachDirectoryNameDragEntryItem((directoryNameDragEntryItem)=>{
371
- const dragEntryItem = directoryNameDragEntryItem; ///
372
- directoryNameDragEntryItem.retrieveDragEntryItems(dragEntryItems);
373
- dragEntryItems.push(dragEntryItem);
374
- });
375
- this.forEachFileNameDragEntryItem((fileNameDragEntryItem)=>{
376
- const dragEntryItem = fileNameDragEntryItem; ///
377
- dragEntryItems.push(dragEntryItem);
378
- });
379
- return dragEntryItems;
380
- }
381
- retrieveFileNameDragEntryItems(fileNameDragEntryItems = []) {
382
- this.forEachDragEntryItem((dragEntryItem)=>{
383
- const dragEntryItemDirectoryNameDragEntryItem = dragEntryItem.isDirectoryNameDragEntryItem();
384
- if (dragEntryItemDirectoryNameDragEntryItem) {
385
- const directoryNameDragEntryItem = dragEntryItem; ///
386
- directoryNameDragEntryItem.retrieveFileNameDragEntryItems(fileNameDragEntryItems);
387
- } else {
388
- const fileNameDragEntryItem = dragEntryItem; ///
389
- fileNameDragEntryItems.push(fileNameDragEntryItem);
390
- }
391
- });
392
- return fileNameDragEntryItems;
393
- }
394
- retrieveDirectoryNameDragEntryItems(directoryNameDragEntryItems = []) {
395
- this.forEachDirectoryNameDragEntryItem((directoryNameDragEntryItem)=>{
396
- directoryNameDragEntryItem.retrieveDirectoryNameDragEntryItems(directoryNameDragEntryItems);
397
- directoryNameDragEntryItems.push(directoryNameDragEntryItem);
398
- });
399
- return directoryNameDragEntryItems;
400
- }
401
- retrieveMarkerEntryItem() {
402
- const markerEntryItem = getMarkerEntryItem();
403
- return markerEntryItem;
404
- }
405
- retrieveEditableDragEntryItem() {
406
- const dragEntryItems = this.retrieveDragEntryItems(), editableDragEntryItem = dragEntryItems.find((dragEntryItem)=>{
407
- const dragEntryItemEditable = dragEntryItem.isEditable();
408
- if (dragEntryItemEditable) {
409
- return true;
410
- }
411
- }) || null;
412
- return editableDragEntryItem;
413
- }
414
- retrieveSelectedDragEntryItem() {
415
- const dragEntryItems = this.retrieveDragEntryItems(), selectedDragEntryItem = dragEntryItems.find((dragEntryItem)=>{
416
- const selected = dragEntryItem.isSelected();
417
- if (selected) {
418
- return true;
419
- }
420
- }) || null;
421
- return selectedDragEntryItem;
422
- }
423
- retrieveFileNameDragEntryItem(filePath) {
424
- const fileNameDragEntryItems = this.retrieveFileNameDragEntryItems(), fileNameDragEntryItem = fileNameDragEntryItems.find((fileNameDragEntryItem)=>{
425
- const fileNameDragEntryItemPath = fileNameDragEntryItem.getPath();
426
- if (fileNameDragEntryItemPath === filePath) {
427
- return true;
428
- }
429
- }) || null; ///
430
- return fileNameDragEntryItem;
431
- }
432
- retrieveDirectoryNameDragEntryItem(directoryPath) {
433
- const directoryNameDragEntryItems = this.retrieveDirectoryNameDragEntryItems(), directoryNameDragEntryItem = directoryNameDragEntryItems.find((directoryNameDragEntryItem)=>{
434
- const directoryNameDragEntryItemPath = directoryNameDragEntryItem.getPath();
435
- if (directoryNameDragEntryItemPath === directoryPath) {
436
- return true;
437
- }
438
- }) || null; ///
439
- return directoryNameDragEntryItem;
440
- }
441
- collapse() {
442
- this.addClass("collapsed");
443
- }
444
- expand() {
445
- this.removeClass("collapsed");
446
- }
447
- didMount() {
448
- const topmost = this.isTopmost();
449
- if (topmost) {
450
- this.addClass("topmost");
451
- }
452
- }
453
- willUnmount() {
454
- ///
455
- }
456
- parentContext() {
457
- const expandEntriesList = this.expand.bind(this), collapseEntriesList = this.collapse.bind(this), isEntriesListCollapsed = this.isCollapsed.bind(this), isEmpty = this.isEmpty.bind(this), addMarker = this.addMarker.bind(this), selectPath = this.selectPath.bind(this), addFilePath = this.addFilePath.bind(this), deselectPath = this.deselectPath.bind(this), removeMarker = this.removeMarker.bind(this), addEntryItem = this.addEntryItem.bind(this), removeFilePath = this.removeFilePath.bind(this), removeAllPaths = this.removeAllPaths.bind(this), removeEntryItem = this.removeEntryItem.bind(this), deselectAllPaths = this.deselectAllPaths.bind(this), addDirectoryPath = this.addDirectoryPath.bind(this), removeDirectoryPath = this.removeDirectoryPath.bind(this), forEachDragEntryItem = this.forEachDragEntryItem.bind(this), retrieveDragEntryItems = this.retrieveDragEntryItems.bind(this), retrieveMarkerEntryItem = this.retrieveMarkerEntryItem.bind(this), retrieveSelectedDragEntryItem = this.retrieveSelectedDragEntryItem.bind(this), retrieveEditableDragEntryItem = this.retrieveEditableDragEntryItem.bind(this), retrieveFileNameDragEntryItem = this.retrieveFileNameDragEntryItem.bind(this), retrieveFileNameDragEntryItems = this.retrieveFileNameDragEntryItems.bind(this), retrieveDirectoryNameDragEntryItem = this.retrieveDirectoryNameDragEntryItem.bind(this), retrieveDirectoryNameDragEntryItems = this.retrieveDirectoryNameDragEntryItems.bind(this);
458
- return {
459
- expandEntriesList,
460
- collapseEntriesList,
461
- isEntriesListCollapsed,
462
- isEmpty,
463
- addMarker,
464
- selectPath,
465
- addFilePath,
466
- deselectPath,
467
- removeMarker,
468
- addEntryItem,
469
- removeFilePath,
470
- removeAllPaths,
471
- removeEntryItem,
472
- deselectAllPaths,
473
- addDirectoryPath,
474
- removeDirectoryPath,
475
- forEachDragEntryItem,
476
- retrieveDragEntryItems,
477
- retrieveMarkerEntryItem,
478
- retrieveSelectedDragEntryItem,
479
- retrieveEditableDragEntryItem,
480
- retrieveFileNameDragEntryItem,
481
- retrieveFileNameDragEntryItems,
482
- retrieveDirectoryNameDragEntryItem,
483
- retrieveDirectoryNameDragEntryItems
484
- };
485
- }
486
- static tagName = "ul";
487
- static ignoredProperties = [
488
- "topmost",
489
- "explorer"
490
- ];
491
- static defaultProperties = {
492
- className: "entries"
493
- };
494
- }
495
- const _default = (0, _easywithstyle.default)(EntriesList)`
496
-
497
- list-style: none;
498
- padding-left: ${_styles.entriesListPaddingLeft};
499
-
500
- .topmost {
501
- padding-left: 0;
502
- }
503
-
504
- .collapsed {
505
- display: none;
506
- }
507
-
508
- `;
509
-
510
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saXN0L2VudHJpZXMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiOyAgLy8vXG5cbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tIFwiZWFzeVwiO1xuaW1wb3J0IHsgcGF0aFV0aWxpdGllcywgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCB7IGVudHJpZXNMaXN0UGFkZGluZ0xlZnQgfSBmcm9tIFwiLi4vc3R5bGVzXCI7XG5pbXBvcnQgeyBGSUxFX05BTUVfRFJBR19FTlRSWV9UWVBFLCBESVJFQ1RPUllfTkFNRV9EUkFHX0VOVFJZX1RZUEUgfSBmcm9tIFwiLi4vZW50cnlUeXBlc1wiO1xuXG5jb25zdCB7IGZpbHRlciB9ID0gYXJyYXlVdGlsaXRpZXMsXG4gICAgICB7IHRvcG1vc3REaXJlY3RvcnlOYW1lRnJvbVBhdGgsIHBhdGhXaXRob3V0VG9wbW9zdERpcmVjdG9yeU5hbWVGcm9tUGF0aCB9ID0gcGF0aFV0aWxpdGllcztcblxuZnVuY3Rpb24gZ2V0TWFya2VyRW50cnlJdGVtKCkge1xuICBjb25zdCB7IG1hcmtlckVudHJ5SXRlbSB9ID0gZ2xvYmFsVGhpcztcblxuICByZXR1cm4gbWFya2VyRW50cnlJdGVtO1xufVxuXG5mdW5jdGlvbiBzZXRNYXJrZXJFbnRyeUl0ZW0obWFya2VyRW50cnlJdGVtKSB7XG4gIE9iamVjdC5hc3NpZ24oZ2xvYmFsVGhpcywge1xuICAgIG1hcmtlckVudHJ5SXRlbVxuICB9KTtcbn1cblxuZnVuY3Rpb24gcmVzZXRNYXJrZXJFbnRyeUl0ZW0oKSB7XG4gIGNvbnN0IG1hcmtlckVudHJ5SXRlbSA9IG51bGw7XG5cbiAgc2V0TWFya2VyRW50cnlJdGVtKG1hcmtlckVudHJ5SXRlbSk7XG59XG5cbk9iamVjdC5hc3NpZ24oZ2xvYmFsVGhpcywge1xuICBnZXRNYXJrZXJFbnRyeUl0ZW0sXG4gIHNldE1hcmtlckVudHJ5SXRlbSxcbiAgcmVzZXRNYXJrZXJFbnRyeUl0ZW1cbn0pO1xuXG5yZXNldE1hcmtlckVudHJ5SXRlbSgpO1xuXG5jbGFzcyBFbnRyaWVzTGlzdCBleHRlbmRzIEVsZW1lbnQge1xuICBpc1RvcG1vc3QoKSB7XG4gICAgY29uc3QgeyB0b3Btb3N0ID0gZmFsc2UgfSA9IHRoaXMucHJvcGVydGllcztcblxuICAgIHJldHVybiB0b3Btb3N0O1xuICB9XG5cbiAgZ2V0RXhwbG9yZXIoKSB7XG5cdFx0Y29uc3QgeyBleHBsb3JlciB9ID0gdGhpcy5wcm9wZXJ0aWVzO1xuXG5cdFx0cmV0dXJuIGV4cGxvcmVyO1xuXHR9XG5cblx0Z2V0RW50cnlJdGVtcygpIHtcblx0XHRjb25zdCBjaGlsZEVudHJ5SXRlbUVsZW1lbnRzID0gdGhpcy5nZXRDaGlsZEVsZW1lbnRzKFwibGkuZW50cnlcIiksXG5cdFx0XHRcdFx0ZW50cnlJdGVtcyA9IGNoaWxkRW50cnlJdGVtRWxlbWVudHM7ICAvLy9cblxuXHRcdHJldHVybiBlbnRyeUl0ZW1zO1xuXHR9XG5cblx0Z2V0RW50cnlJdGVtc0xlbmd0aCgpIHtcbiAgICBjb25zdCBlbnRyeUl0ZW1zID0gdGhpcy5nZXRFbnRyeUl0ZW1zKCksXG4gICAgICAgICAgZW50cnlJdGVtc0xlbmd0aCA9IGVudHJ5SXRlbXMubGVuZ3RoO1xuXG4gICAgcmV0dXJuIGVudHJ5SXRlbXNMZW5ndGg7XG4gIH1cblxuICBpc0NvbGxhcHNlZCgpIHtcbiAgICBjb25zdCBjb2xsYXBzZWQgPSB0aGlzLmhhc0NsYXNzKFwiY29sbGFwc2VkXCIpO1xuXG4gICAgcmV0dXJuIGNvbGxhcHNlZDtcbiAgfVxuXG4gIGlzRW1wdHkoKSB7XG4gICAgY29uc3QgZW50cnlJdGVtcyA9IHRoaXMuZ2V0RW50cnlJdGVtcygpLFxuICAgICAgICAgIGVudHJ5SXRlbXNMZW5ndGggPSBlbnRyeUl0ZW1zLmxlbmd0aCxcbiAgICAgICAgICBlbXB0eSA9IChlbnRyeUl0ZW1zTGVuZ3RoID09PSAwKTtcblxuICAgIHJldHVybiBlbXB0eTtcbiAgfVxuXG4gIGFkZE1hcmtlcihtYXJrZXJFbnRyeUl0ZW1QYXRoLCBkcmFnRW50cnlJdGVtVHlwZSkge1xuICAgIGNvbnN0IHRvcG1vc3REaXJlY3RvcnlOYW1lID0gdG9wbW9zdERpcmVjdG9yeU5hbWVGcm9tUGF0aChtYXJrZXJFbnRyeUl0ZW1QYXRoKTtcblxuICAgIGlmICh0b3Btb3N0RGlyZWN0b3J5TmFtZSA9PT0gbnVsbCkge1xuICAgICAgY29uc3QgbWFya2VyRW50cnlJdGVtTmFtZSA9IG1hcmtlckVudHJ5SXRlbVBhdGg7ICAvLy9cblxuICAgICAgdGhpcy5hZGRNYXJrZXJFbnRyeUl0ZW0obWFya2VyRW50cnlJdGVtTmFtZSwgZHJhZ0VudHJ5SXRlbVR5cGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB0b3Btb3N0RGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW0gPSB0aGlzLmZpbmREaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbSh0b3Btb3N0RGlyZWN0b3J5TmFtZSksXG4gICAgICAgICAgICBtYXJrZXJFbnRyeUl0ZW1QYXRoV2l0aG91dFRvcG1vc3REaXJlY3RvcnlOYW1lID0gcGF0aFdpdGhvdXRUb3Btb3N0RGlyZWN0b3J5TmFtZUZyb21QYXRoKG1hcmtlckVudHJ5SXRlbVBhdGgpO1xuXG4gICAgICBtYXJrZXJFbnRyeUl0ZW1QYXRoID0gbWFya2VyRW50cnlJdGVtUGF0aFdpdGhvdXRUb3Btb3N0RGlyZWN0b3J5TmFtZTsgLy8vXG5cbiAgICAgIHRvcG1vc3REaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbS5hZGRNYXJrZXIobWFya2VyRW50cnlJdGVtUGF0aCwgZHJhZ0VudHJ5SXRlbVR5cGUpO1xuICAgIH1cbiAgfVxuXG4gIHJlbW92ZU1hcmtlcigpIHtcbiAgICB0aGlzLnJlbW92ZU1hcmtlckVudHJ5SXRlbSgpO1xuICB9XG5cbiAgc2VsZWN0UGF0aChwYXRoKSB7XG4gICAgbGV0IGRyYWdFbnRyeUl0ZW0gPSBudWxsO1xuXG4gICAgY29uc3QgdG9wbW9zdERpcmVjdG9yeU5hbWUgPSB0b3Btb3N0RGlyZWN0b3J5TmFtZUZyb21QYXRoKHBhdGgpO1xuXG4gICAgaWYgKHRvcG1vc3REaXJlY3RvcnlOYW1lID09PSBudWxsKSB7XG4gICAgICBjb25zdCBuYW1lID0gcGF0aDsgIC8vL1xuXG4gICAgICBkcmFnRW50cnlJdGVtID0gdGhpcy5maW5kRHJhZ0VudHJ5SXRlbShuYW1lKTtcblxuICAgICAgaWYgKGRyYWdFbnRyeUl0ZW0gIT09IG51bGwpIHtcbiAgICAgICAgZHJhZ0VudHJ5SXRlbS5zZWxlY3QoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IHRvcG1vc3REaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbSA9IHRoaXMuZmluZERpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtKHRvcG1vc3REaXJlY3RvcnlOYW1lKTtcblxuICAgICAgaWYgKHRvcG1vc3REaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbSAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBmaWxlUGF0aFdpdGhvdXRUb3Btb3N0RGlyZWN0b3J5TmFtZSA9IHBhdGhXaXRob3V0VG9wbW9zdERpcmVjdG9yeU5hbWVGcm9tUGF0aChwYXRoKTtcblxuICAgICAgICBwYXRoID0gZmlsZVBhdGhXaXRob3V0VG9wbW9zdERpcmVjdG9yeU5hbWU7IC8vL1xuXG4gICAgICAgIHRvcG1vc3REaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbS5leHBhbmQoKTtcblxuICAgICAgICBkcmFnRW50cnlJdGVtID0gdG9wbW9zdERpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtLnNlbGVjdFBhdGgocGF0aCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRyYWdFbnRyeUl0ZW07XG4gIH1cblxuICBkZXNlbGVjdFBhdGgocGF0aCkge1xuICAgIGxldCBkcmFnRW50cnlJdGVtID0gbnVsbDtcblxuICAgIGNvbnN0IHRvcG1vc3REaXJlY3RvcnlOYW1lID0gdG9wbW9zdERpcmVjdG9yeU5hbWVGcm9tUGF0aChwYXRoKTtcblxuICAgIGlmICh0b3Btb3N0RGlyZWN0b3J5TmFtZSA9PT0gbnVsbCkge1xuICAgICAgY29uc3QgbmFtZSA9IHBhdGg7ICAvLy9cblxuICAgICAgZHJhZ0VudHJ5SXRlbSA9IHRoaXMuZmluZERyYWdFbnRyeUl0ZW0obmFtZSk7XG5cbiAgICAgIGlmIChkcmFnRW50cnlJdGVtICE9PSBudWxsKSB7XG4gICAgICAgIGRyYWdFbnRyeUl0ZW0uZGVzZWxlY3QoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IHRvcG1vc3REaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbSA9IHRoaXMuZmluZERpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtKHRvcG1vc3REaXJlY3RvcnlOYW1lKTtcblxuICAgICAgaWYgKHRvcG1vc3REaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbSAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBmaWxlUGF0aFdpdGhvdXRUb3Btb3N0RGlyZWN0b3J5TmFtZSA9IHBhdGhXaXRob3V0VG9wbW9zdERpcmVjdG9yeU5hbWVGcm9tUGF0aChwYXRoKTtcblxuICAgICAgICBwYXRoID0gZmlsZVBhdGhXaXRob3V0VG9wbW9zdERpcmVjdG9yeU5hbWU7IC8vL1xuXG4gICAgICAgIGRyYWdFbnRyeUl0ZW0gPSB0b3Btb3N0RGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW0uZGVzZWxlY3RQYXRoKHBhdGgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkcmFnRW50cnlJdGVtO1xuICB9XG5cbiAgYWRkRmlsZVBhdGgoZmlsZVBhdGgsIHJlYWRPbmx5ID0gZmFsc2UpIHtcblx0XHRsZXQgZmlsZU5hbWVEcmFnRW50cnlJdGVtO1xuXG4gICAgY29uc3QgdG9wbW9zdERpcmVjdG9yeU5hbWUgPSB0b3Btb3N0RGlyZWN0b3J5TmFtZUZyb21QYXRoKGZpbGVQYXRoKTtcblxuICAgIGlmICh0b3Btb3N0RGlyZWN0b3J5TmFtZSA9PT0gbnVsbCkge1xuICAgICAgY29uc3QgZmlsZU5hbWUgPSBmaWxlUGF0aDsgIC8vL1xuXG4gICAgICBmaWxlTmFtZURyYWdFbnRyeUl0ZW0gPSB0aGlzLmZpbmRGaWxlTmFtZURyYWdFbnRyeUl0ZW0oZmlsZU5hbWUpO1xuXG4gICAgICBpZiAoZmlsZU5hbWVEcmFnRW50cnlJdGVtID09PSBudWxsKSB7XG4gICAgICAgIGZpbGVOYW1lRHJhZ0VudHJ5SXRlbSA9IHRoaXMuY3JlYXRlRmlsZU5hbWVEcmFnRW50cnlJdGVtKGZpbGVOYW1lLCByZWFkT25seSk7XG5cbiAgICAgICAgdGhpcy5hZGRFbnRyeUl0ZW0oZmlsZU5hbWVEcmFnRW50cnlJdGVtKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IHRvcG1vc3REaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbSA9IHRoaXMuZmluZERpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtKHRvcG1vc3REaXJlY3RvcnlOYW1lKTtcblxuICAgICAgaWYgKHRvcG1vc3REaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbSA9PT0gbnVsbCkge1xuICAgICAgICBjb25zdCBjb2xsYXBzZWQgPSB0cnVlO1xuXG4gICAgICAgIHRvcG1vc3REaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbSA9IHRoaXMuY3JlYXRlRGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW0odG9wbW9zdERpcmVjdG9yeU5hbWUsIHJlYWRPbmx5LCBjb2xsYXBzZWQpO1xuXG4gICAgICAgIHRoaXMuYWRkRW50cnlJdGVtKHRvcG1vc3REaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZpbGVQYXRoV2l0aG91dFRvcG1vc3REaXJlY3RvcnlOYW1lID0gcGF0aFdpdGhvdXRUb3Btb3N0RGlyZWN0b3J5TmFtZUZyb21QYXRoKGZpbGVQYXRoKTtcblxuICAgICAgZmlsZVBhdGggPSBmaWxlUGF0aFdpdGhvdXRUb3Btb3N0RGlyZWN0b3J5TmFtZTsgLy8vXG5cbiAgICAgIGZpbGVOYW1lRHJhZ0VudHJ5SXRlbSA9IHRvcG1vc3REaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbS5hZGRGaWxlUGF0aChmaWxlUGF0aCwgcmVhZE9ubHkpO1xuICAgIH1cblxuXHRcdHJldHVybiBmaWxlTmFtZURyYWdFbnRyeUl0ZW07XG5cdH1cblxuICByZW1vdmVGaWxlUGF0aChmaWxlUGF0aCwgcmVtb3ZlRW1wdHlQYXJlbnREaXJlY3RvcmllcyA9IGZhbHNlKSB7XG4gICAgY29uc3QgdG9wbW9zdERpcmVjdG9yeU5hbWUgPSB0b3Btb3N0RGlyZWN0b3J5TmFtZUZyb21QYXRoKGZpbGVQYXRoKTtcblxuICAgIGlmICh0b3Btb3N0RGlyZWN0b3J5TmFtZSA9PT0gbnVsbCkge1xuICAgICAgY29uc3QgZmlsZU5hbWUgPSBmaWxlUGF0aCwgIC8vL1xuICAgICAgICAgICAgZmlsZU5hbWVEcmFnRW50cnlJdGVtID0gdGhpcy5maW5kRmlsZU5hbWVEcmFnRW50cnlJdGVtKGZpbGVOYW1lKTtcblxuICAgICAgaWYgKGZpbGVOYW1lRHJhZ0VudHJ5SXRlbSAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLnJlbW92ZUVudHJ5SXRlbShmaWxlTmFtZURyYWdFbnRyeUl0ZW0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB0b3Btb3N0RGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW0gPSB0aGlzLmZpbmREaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbSh0b3Btb3N0RGlyZWN0b3J5TmFtZSk7XG5cbiAgICAgIGlmICh0b3Btb3N0RGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW0gIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgZmlsZVBhdGhXaXRob3V0VG9wbW9zdERpcmVjdG9yeU5hbWUgPSBwYXRoV2l0aG91dFRvcG1vc3REaXJlY3RvcnlOYW1lRnJvbVBhdGgoZmlsZVBhdGgpO1xuXG4gICAgICAgIGZpbGVQYXRoID0gZmlsZVBhdGhXaXRob3V0VG9wbW9zdERpcmVjdG9yeU5hbWU7IC8vL1xuXG4gICAgICAgIHRvcG1vc3REaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbS5yZW1vdmVGaWxlUGF0aChmaWxlUGF0aCwgcmVtb3ZlRW1wdHlQYXJlbnREaXJlY3Rvcmllcyk7XG5cbiAgICAgICAgaWYgKHJlbW92ZUVtcHR5UGFyZW50RGlyZWN0b3JpZXMpIHtcbiAgICAgICAgICBjb25zdCB0b3Btb3N0RGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW1FbXB0eSA9IHRvcG1vc3REaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbS5pc0VtcHR5KCk7XG5cbiAgICAgICAgICBpZiAodG9wbW9zdERpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtRW1wdHkpIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlRW50cnlJdGVtKHRvcG1vc3REaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlQWxsUGF0aHMoKSB7XG4gICAgdGhpcy5yZW1vdmVFbnRyeUl0ZW1zKCk7XG4gIH1cblxuICBkZXNlbGVjdEFsbFBhdGhzKCkge1xuICAgIGNvbnN0IGRyYWdFbnRyeUl0ZW1zID0gdGhpcy5yZXRyaWV2ZURyYWdFbnRyeUl0ZW1zKCk7XG5cbiAgICBkcmFnRW50cnlJdGVtcy5mb3JFYWNoKChkcmFnRW50cnlJdGVtKSA9PiB7XG4gICAgICBkcmFnRW50cnlJdGVtLmRlc2VsZWN0KCk7XG4gICAgfSk7XG4gIH1cblxuICBhZGREaXJlY3RvcnlQYXRoKGRpcmVjdG9yeVBhdGgsIHJlYWRPbmx5ID0gZmFsc2UsIGNvbGxhcHNlZCA9IHRydWUpIHtcbiAgICBsZXQgZGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW07XG5cbiAgICBjb25zdCB0b3Btb3N0RGlyZWN0b3J5TmFtZSA9IHRvcG1vc3REaXJlY3RvcnlOYW1lRnJvbVBhdGgoZGlyZWN0b3J5UGF0aCk7XG5cbiAgICBpZiAodG9wbW9zdERpcmVjdG9yeU5hbWUgPT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGRpcmVjdG9yeU5hbWUgPSBkaXJlY3RvcnlQYXRoOyAgLy8vXG5cbiAgICAgIGRpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtID0gdGhpcy5maW5kRGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW0oZGlyZWN0b3J5TmFtZSk7XG5cbiAgICAgIGlmIChkaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbSA9PT0gbnVsbCkge1xuICAgICAgICBkaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbSA9IHRoaXMuY3JlYXRlRGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW0oZGlyZWN0b3J5TmFtZSwgcmVhZE9ubHksIGNvbGxhcHNlZCk7XG5cbiAgICAgICAgdGhpcy5hZGRFbnRyeUl0ZW0oZGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29sbGFwc2VkID9cbiAgICAgICAgICBkaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbS5jb2xsYXBzZSgpIDpcbiAgICAgICAgICAgIGRpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtLmV4cGFuZCgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgdG9wbW9zdERpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtID0gdGhpcy5maW5kRGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW0odG9wbW9zdERpcmVjdG9yeU5hbWUpO1xuXG4gICAgICBpZiAodG9wbW9zdERpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtID09PSBudWxsKSB7XG4gICAgICAgIHRvcG1vc3REaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbSA9IHRoaXMuY3JlYXRlRGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW0odG9wbW9zdERpcmVjdG9yeU5hbWUsIHJlYWRPbmx5LCBjb2xsYXBzZWQpO1xuXG4gICAgICAgIHRoaXMuYWRkRW50cnlJdGVtKHRvcG1vc3REaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRpcmVjdG9yeVBhdGhXaXRob3V0VG9wbW9zdERpcmVjdG9yeU5hbWUgPSBwYXRoV2l0aG91dFRvcG1vc3REaXJlY3RvcnlOYW1lRnJvbVBhdGgoZGlyZWN0b3J5UGF0aCk7XG5cbiAgICAgIGRpcmVjdG9yeVBhdGggPSBkaXJlY3RvcnlQYXRoV2l0aG91dFRvcG1vc3REaXJlY3RvcnlOYW1lOyAvLy9cblxuICAgICAgZGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW0gPSB0b3Btb3N0RGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW0uYWRkRGlyZWN0b3J5UGF0aChkaXJlY3RvcnlQYXRoLCByZWFkT25seSwgY29sbGFwc2VkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW07XG4gIH1cblxuICByZW1vdmVEaXJlY3RvcnlQYXRoKGRpcmVjdG9yeVBhdGgsIHJlbW92ZUVtcHR5UGFyZW50RGlyZWN0b3JpZXMgPSBmYWxzZSkge1xuICAgIGNvbnN0IHRvcG1vc3REaXJlY3RvcnlOYW1lID0gdG9wbW9zdERpcmVjdG9yeU5hbWVGcm9tUGF0aChkaXJlY3RvcnlQYXRoKTtcblxuICAgIGlmICh0b3Btb3N0RGlyZWN0b3J5TmFtZSA9PT0gbnVsbCkge1xuICAgICAgY29uc3QgZGlyZWN0b3J5TmFtZSA9IGRpcmVjdG9yeVBhdGgsICAvLy9cbiAgICAgICAgICAgIGRpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtID0gdGhpcy5maW5kRGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW0oZGlyZWN0b3J5TmFtZSk7XG5cbiAgICAgIGlmIChkaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbSAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLnJlbW92ZUVudHJ5SXRlbShkaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHRvcG1vc3REaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbSA9IHRoaXMuZmluZERpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtKHRvcG1vc3REaXJlY3RvcnlOYW1lKTtcblxuICAgICAgaWYgKHRvcG1vc3REaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbSAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBkaXJlY3RvcnlQYXRoV2l0aG91dFRvcG1vc3REaXJlY3RvcnlOYW1lID0gcGF0aFdpdGhvdXRUb3Btb3N0RGlyZWN0b3J5TmFtZUZyb21QYXRoKGRpcmVjdG9yeVBhdGgpO1xuXG4gICAgICAgIGRpcmVjdG9yeVBhdGggPSBkaXJlY3RvcnlQYXRoV2l0aG91dFRvcG1vc3REaXJlY3RvcnlOYW1lOyAvLy9cblxuICAgICAgICB0b3Btb3N0RGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW0ucmVtb3ZlRGlyZWN0b3J5UGF0aChkaXJlY3RvcnlQYXRoLCByZW1vdmVFbXB0eVBhcmVudERpcmVjdG9yaWVzKTtcblxuICAgICAgICBpZiAocmVtb3ZlRW1wdHlQYXJlbnREaXJlY3Rvcmllcykge1xuICAgICAgICAgIGNvbnN0IHRvcG1vc3REaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbUVtcHR5ID0gdG9wbW9zdERpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtLmlzRW1wdHkoKTtcblxuICAgICAgICAgIGlmICh0b3Btb3N0RGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW1FbXB0eSkge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVFbnRyeUl0ZW0odG9wbW9zdERpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhZGRFbnRyeUl0ZW0oZW50cnlJdGVtKSB7XG4gICAgY29uc3QgbmV4dEVudHJ5SXRlbSA9IGVudHJ5SXRlbSwgIC8vL1xuICAgICAgICAgIHByZXZpb3VzRW50cnlJdGVtID0gdGhpcy5maW5kRW50cnlJdGVtKChlbnRyeUl0ZW0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5leHRFbnRyeUJlZm9yZUVudHJ5SXRlbSA9IG5leHRFbnRyeUl0ZW0uaXNCZWZvcmUoZW50cnlJdGVtKTtcblxuICAgICAgICAgICAgaWYgKG5leHRFbnRyeUJlZm9yZUVudHJ5SXRlbSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgIGlmIChwcmV2aW91c0VudHJ5SXRlbSA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5tb3VudChlbnRyeUl0ZW0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbnRyeUl0ZW0ubW91bnRCZWZvcmUocHJldmlvdXNFbnRyeUl0ZW0pO1xuICAgIH1cbiAgfVxuXG4gIHJlbW92ZUVudHJ5SXRlbShlbnRyeUl0ZW0pIHtcbiAgICB0aGlzLnVubW91bnQoZW50cnlJdGVtKTtcbiAgfVxuXG4gIHJlbW92ZUVudHJ5SXRlbXMoKSB7XG4gICAgY29uc3QgZW50cnlJdGVtcyA9IHRoaXMuZ2V0RW50cnlJdGVtcygpO1xuXG4gICAgZW50cnlJdGVtcy5mb3JFYWNoKChlbnRyeUl0ZW0pID0+IHtcbiAgICAgIHRoaXMucmVtb3ZlRW50cnlJdGVtKGVudHJ5SXRlbSk7XG4gICAgfSk7XG4gIH1cblxuICBhZGRNYXJrZXJFbnRyeUl0ZW0obWFya2VyRW50cnlJdGVtTmFtZSwgZHJhZ0VudHJ5SXRlbVR5cGUpIHtcbiAgICBsZXQgbWFya2VyRW50cnlJdGVtO1xuXG4gICAgY29uc3QgbmFtZSA9IG1hcmtlckVudHJ5SXRlbU5hbWUsIC8vL1xuICAgICAgICAgIHR5cGUgPSBkcmFnRW50cnlJdGVtVHlwZTsgIC8vL1xuXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIEZJTEVfTkFNRV9EUkFHX0VOVFJZX1RZUEUgOiB7XG4gICAgICAgIGNvbnN0IGV4cGxvcmVyID0gdGhpcy5nZXRFeHBsb3JlcigpLFxuICAgICAgICAgICAgICBGaWxlTmFtZU1hcmtlckVudHJ5SXRlbSA9IGV4cGxvcmVyLmdldEZpbGVOYW1lTWFya2VyRW50cnlJdGVtKCksXG4gICAgICAgICAgICAgIGZpbGVOYW1lTWFya2VyRW50cnlJdGVtID1cblxuICAgICAgICAgICAgICAgIDxGaWxlTmFtZU1hcmtlckVudHJ5SXRlbSBuYW1lPXtuYW1lfSBleHBsb3Jlcj17ZXhwbG9yZXJ9IC8+XG5cbiAgICAgICAgICAgICAgO1xuXG4gICAgICAgIG1hcmtlckVudHJ5SXRlbSA9IGZpbGVOYW1lTWFya2VyRW50cnlJdGVtOyAgLy8vXG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgRElSRUNUT1JZX05BTUVfRFJBR19FTlRSWV9UWVBFIDoge1xuICAgICAgICBjb25zdCBleHBsb3JlciA9IHRoaXMuZ2V0RXhwbG9yZXIoKSxcbiAgICAgICAgICAgICAgRGlyZWN0b3J5TmFtZU1hcmtlckVudHJ5SXRlbSA9IGV4cGxvcmVyLmdldERpcmVjdG9yeU5hbWVNYXJrZXJFbnRyeUl0ZW0oKSxcbiAgICAgICAgICAgICAgZGlyZWN0b3J5TmFtZU1hcmtlckVudHJ5SXRlbSA9XG5cbiAgICAgICAgICAgICAgICA8RGlyZWN0b3J5TmFtZU1hcmtlckVudHJ5SXRlbSBuYW1lPXtuYW1lfSBleHBsb3Jlcj17ZXhwbG9yZXJ9IC8+XG5cbiAgICAgICAgICAgICAgO1xuXG4gICAgICAgIG1hcmtlckVudHJ5SXRlbSA9IGRpcmVjdG9yeU5hbWVNYXJrZXJFbnRyeUl0ZW07IC8vL1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGVudHJ5SXRlbSA9IG1hcmtlckVudHJ5SXRlbTsgLy8vXG5cbiAgICB0aGlzLmFkZEVudHJ5SXRlbShlbnRyeUl0ZW0pO1xuXG4gICAgc2V0TWFya2VyRW50cnlJdGVtKG1hcmtlckVudHJ5SXRlbSk7XG4gIH1cblxuICByZW1vdmVNYXJrZXJFbnRyeUl0ZW0oKSB7XG4gICAgY29uc3QgbWFya2VyRW50cnlJdGVtID0gdGhpcy5yZXRyaWV2ZU1hcmtlckVudHJ5SXRlbSgpO1xuXG4gICAgbWFya2VyRW50cnlJdGVtLnJlbW92ZSgpO1xuXG4gICAgcmVzZXRNYXJrZXJFbnRyeUl0ZW0oKTtcblxuICAgIHJlc2V0RHJvcEVsZW1lbnQoKTtcbiAgfVxuXG4gIGNyZWF0ZUZpbGVOYW1lRHJhZ0VudHJ5SXRlbShmaWxlTmFtZSwgcmVhZE9ubHkpIHtcblx0XHRjb25zdCBuYW1lID0gZmlsZU5hbWUsXHQvLy9cblx0XHRcdFx0XHRleHBsb3JlciA9IHRoaXMuZ2V0RXhwbG9yZXIoKSxcblx0XHRcdFx0XHRGaWxlTmFtZURyYWdFbnRyeUl0ZW0gPSBleHBsb3Jlci5nZXRGaWxlTmFtZURyYWdFbnRyeUl0ZW0ocmVhZE9ubHkpLFxuXHRcdFx0XHRcdGZpbGVOYW1lRHJhZ0VudHJ5SXRlbSA9XG5cblx0XHRcdFx0XHRcdDxGaWxlTmFtZURyYWdFbnRyeUl0ZW0gbmFtZT17bmFtZX0gcmVhZE9ubHk9e3JlYWRPbmx5fSBleHBsb3Jlcj17ZXhwbG9yZXJ9IC8+XG5cblx0XHRcdFx0XHQ7XG5cblx0XHRyZXR1cm4gZmlsZU5hbWVEcmFnRW50cnlJdGVtO1xuXHR9XG5cblx0Y3JlYXRlRGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW0oZGlyZWN0b3J5TmFtZSwgcmVhZE9ubHksIGNvbGxhcHNlZCkge1xuXHRcdGNvbnN0IG5hbWUgPSBkaXJlY3RvcnlOYW1lLFx0Ly8vXG4gICAgICAgICAgdG9wbW9zdCA9IHRoaXMuaXNUb3Btb3N0KCksXG5cdFx0XHRcdFx0ZXhwbG9yZXIgPSB0aGlzLmdldEV4cGxvcmVyKCksXG5cdFx0XHRcdFx0RGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW0gPSBleHBsb3Jlci5nZXREaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbShyZWFkT25seSwgdG9wbW9zdCksXG5cdFx0XHRcdFx0ZGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW0gPVxuXG5cdFx0XHRcdFx0XHQ8RGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW0gbmFtZT17bmFtZX0gZXhwbG9yZXI9e2V4cGxvcmVyfSByZWFkT25seT17cmVhZE9ubHl9IHRvcG1vc3Q9e3RvcG1vc3R9IGNvbGxhcHNlZD17Y29sbGFwc2VkfSAvPlxuXG5cdFx0XHRcdFx0O1xuXG5cdFx0cmV0dXJuIGRpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtO1xuXHR9XG5cblx0aXNGaWxlTmFtZURyYWdFbnRyeUl0ZW1QcmVzZW50KGZpbGVOYW1lKSB7XG5cdFx0Y29uc3QgZmlsZU5hbWVEcmFnRW50cnlJdGVtID0gdGhpcy5maW5kRmlsZU5hbWVEcmFnRW50cnlJdGVtKGZpbGVOYW1lKSxcblx0XHRcdFx0XHRmaWxlTmFtZURyYWdFbnRyeUl0ZW1QcmVzZW50ID0gKGZpbGVOYW1lRHJhZ0VudHJ5SXRlbSAhPT0gbnVsbCk7XG5cblx0XHRyZXR1cm4gZmlsZU5hbWVEcmFnRW50cnlJdGVtUHJlc2VudDtcblx0fVxuXG5cdGlzRGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW1QcmVzZW50KGRpcmVjdG9yeU5hbWUpIHtcblx0XHRjb25zdCBkaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbSA9IHRoaXMuZmluZERpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtKGRpcmVjdG9yeU5hbWUpLFxuXHRcdFx0XHRcdGRpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtUHJlc2VudCA9IChkaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbSAhPT0gbnVsbCk7XG5cblx0XHRyZXR1cm4gZGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW1QcmVzZW50O1xuXHR9XG5cbiAgZm9yRWFjaEVudHJ5SXRlbUJ5VHlwZXMoY2FsbGJhY2ssIC4uLnR5cGVzKSB7XG4gICAgY29uc3QgZW50cnlJdGVtcyA9IHRoaXMuZ2V0RW50cnlJdGVtcygpO1xuXG4gICAgZW50cnlJdGVtcy5mb3JFYWNoKChlbnRyeUl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IGVudHJ5SXRlbVR5cGUgPSBlbnRyeUl0ZW0uZ2V0VHlwZSgpLFxuICAgICAgICAgIHR5cGVzSW5jbHVkZXNFbnRyeUl0ZW1UeXBlID0gdHlwZXMuaW5jbHVkZXMoZW50cnlJdGVtVHlwZSk7XG5cbiAgICAgIGlmICh0eXBlc0luY2x1ZGVzRW50cnlJdGVtVHlwZSkge1xuICAgICAgICBjYWxsYmFjayhlbnRyeUl0ZW0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZm9yRWFjaERyYWdFbnRyeUl0ZW0oY2FsbGJhY2spIHsgdGhpcy5mb3JFYWNoRW50cnlJdGVtQnlUeXBlcyhjYWxsYmFjaywgRklMRV9OQU1FX0RSQUdfRU5UUllfVFlQRSwgRElSRUNUT1JZX05BTUVfRFJBR19FTlRSWV9UWVBFKTsgfVxuXG4gIGZvckVhY2hGaWxlTmFtZURyYWdFbnRyeUl0ZW0oY2FsbGJhY2spIHsgdGhpcy5mb3JFYWNoRW50cnlJdGVtQnlUeXBlcyhjYWxsYmFjaywgRklMRV9OQU1FX0RSQUdfRU5UUllfVFlQRSk7IH1cblxuICBmb3JFYWNoRGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW0oY2FsbGJhY2spIHsgdGhpcy5mb3JFYWNoRW50cnlJdGVtQnlUeXBlcyhjYWxsYmFjaywgRElSRUNUT1JZX05BTUVfRFJBR19FTlRSWV9UWVBFKTsgfVxuXG4gIGZpbmRFbnRyeUl0ZW0oY2FsbGJhY2spIHtcbiAgICBjb25zdCBlbnRyeUl0ZW1zID0gdGhpcy5nZXRFbnRyeUl0ZW1zKCksXG4gICAgICAgICAgZW50cnlJdGVtID0gZW50cnlJdGVtcy5maW5kKGNhbGxiYWNrKSB8fCBudWxsOyAvLy9cblxuICAgIHJldHVybiBlbnRyeUl0ZW07XG4gIH1cblxuICBmaW5kRW50cnlJdGVtQnlUeXBlcyhjYWxsYmFjaywgLi4udHlwZXMpIHtcbiAgICBjb25zdCBlbnRyeUl0ZW1zID0gdGhpcy5nZXRFbnRyeUl0ZW1zKCksXG4gICAgICAgICAgZW50cnlJdGVtID0gZW50cnlJdGVtcy5maW5kKChlbnRyeUl0ZW0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVudHJ5SXRlbVR5cGUgPSBlbnRyeUl0ZW0uZ2V0VHlwZSgpLFxuICAgICAgICAgICAgICAgIHR5cGVzSW5jbHVkZXNFbnRyeUl0ZW1UeXBlID0gdHlwZXMuaW5jbHVkZXMoZW50cnlJdGVtVHlwZSk7XG5cbiAgICAgICAgICAgIGlmICh0eXBlc0luY2x1ZGVzRW50cnlJdGVtVHlwZSkge1xuICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBjYWxsYmFjayhlbnRyeUl0ZW0pO1xuXG4gICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7IC8vLztcblxuICAgIHJldHVybiBlbnRyeUl0ZW07XG4gIH1cblxuICBmaW5kRW50cnlJdGVtc0J5VHlwZXMoLi4udHlwZXMpIHtcbiAgICBjb25zdCBlbnRyeUl0ZW1zID0gdGhpcy5nZXRFbnRyeUl0ZW1zKCk7XG5cbiAgICBmaWx0ZXIoZW50cnlJdGVtcywgKGVudHJ5SXRlbSkgPT4ge1xuICAgICAgY29uc3QgZW50cnlJdGVtVHlwZSA9IGVudHJ5SXRlbS5nZXRUeXBlKCksXG4gICAgICAgICAgICB0eXBlc0luY2x1ZGVzRW50cnlJdGVtVHlwZSA9IHR5cGVzLmluY2x1ZGVzKGVudHJ5SXRlbVR5cGUpO1xuXG4gICAgICBpZiAodHlwZXNJbmNsdWRlc0VudHJ5SXRlbVR5cGUpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZW50cnlJdGVtcztcbiAgfVxuXG4gIGZpbmRFbnRyeUl0ZW1CeU5hbWVBbmRUeXBlcyhuYW1lLCAuLi50eXBlcykge1xuICAgIGNvbnN0IGVudHJ5SXRlbSA9IHRoaXMuZmluZEVudHJ5SXRlbUJ5VHlwZXMoKGVudHJ5SXRlbSkgPT4ge1xuICAgICAgY29uc3QgZW50cnlJdGVtTmFtZSA9IGVudHJ5SXRlbS5nZXROYW1lKCk7XG5cbiAgICAgIGlmIChlbnRyeUl0ZW1OYW1lID09PSBuYW1lKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0sIC4uLnR5cGVzKSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGVudHJ5SXRlbTtcbiAgfVxuXG4gIGZpbmREcmFnRW50cnlJdGVtKG5hbWUpIHtcbiAgICBjb25zdCBlbnRyeUl0ZW0gPSB0aGlzLmZpbmRFbnRyeUl0ZW1CeU5hbWVBbmRUeXBlcyhuYW1lLCBGSUxFX05BTUVfRFJBR19FTlRSWV9UWVBFLCBESVJFQ1RPUllfTkFNRV9EUkFHX0VOVFJZX1RZUEUpLFxuICAgICAgICAgIGRyYWdFbnRyeUl0ZW0gPSBlbnRyeUl0ZW07ICAvLy9cblxuICAgIHJldHVybiBkcmFnRW50cnlJdGVtO1xuICB9XG5cbiAgZmluZERyYWdFbnRyeUl0ZW1zKCkge1xuICAgIGNvbnN0IGVudHJ5SXRlbXMgPSB0aGlzLmZpbmRFbnRyeUl0ZW1zQnlUeXBlcyhGSUxFX05BTUVfRFJBR19FTlRSWV9UWVBFLCBESVJFQ1RPUllfTkFNRV9EUkFHX0VOVFJZX1RZUEUpLFxuICAgICAgICAgIGRyYWdFbnRyeUl0ZW1zID0gZW50cnlJdGVtczsgIC8vL1xuXG4gICAgcmV0dXJuIGRyYWdFbnRyeUl0ZW1zO1xuICB9XG5cbiAgZmluZEZpbGVOYW1lRHJhZ0VudHJ5SXRlbShmaWxlTmFtZSkge1xuICAgIGNvbnN0IG5hbWUgPSBmaWxlTmFtZSwgIC8vL1xuICAgICAgICAgIGVudHJ5SXRlbSA9IHRoaXMuZmluZEVudHJ5SXRlbUJ5TmFtZUFuZFR5cGVzKG5hbWUsIEZJTEVfTkFNRV9EUkFHX0VOVFJZX1RZUEUpLFxuICAgICAgICAgIGZpbGVOYW1lRHJhZ0VudHJ5SXRlbSA9IGVudHJ5SXRlbTsgIC8vL1xuXG4gICAgcmV0dXJuIGZpbGVOYW1lRHJhZ0VudHJ5SXRlbTtcbiAgfVxuXG4gIGZpbmREaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbShkaXJlY3RvcnlOYW1lKSB7XG4gICAgY29uc3QgZW50cnlJdGVtID0gdGhpcy5maW5kRW50cnlJdGVtQnlOYW1lQW5kVHlwZXMoZGlyZWN0b3J5TmFtZSwgRElSRUNUT1JZX05BTUVfRFJBR19FTlRSWV9UWVBFKSxcbiAgICAgICAgICBkaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbSA9IGVudHJ5SXRlbTsgLy8vXG5cbiAgICByZXR1cm4gZGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW07XG4gIH1cblxuICByZXRyaWV2ZURyYWdFbnRyeUl0ZW1zKGRyYWdFbnRyeUl0ZW1zID0gW10pIHtcbiAgICB0aGlzLmZvckVhY2hEaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbSgoZGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IGRyYWdFbnRyeUl0ZW0gPSBkaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbTsgLy8vXG5cbiAgICAgIGRpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtLnJldHJpZXZlRHJhZ0VudHJ5SXRlbXMoZHJhZ0VudHJ5SXRlbXMpO1xuXG4gICAgICBkcmFnRW50cnlJdGVtcy5wdXNoKGRyYWdFbnRyeUl0ZW0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5mb3JFYWNoRmlsZU5hbWVEcmFnRW50cnlJdGVtKChmaWxlTmFtZURyYWdFbnRyeUl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IGRyYWdFbnRyeUl0ZW0gPSBmaWxlTmFtZURyYWdFbnRyeUl0ZW07ICAvLy9cblxuICAgICAgZHJhZ0VudHJ5SXRlbXMucHVzaChkcmFnRW50cnlJdGVtKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBkcmFnRW50cnlJdGVtcztcbiAgfVxuXG4gIHJldHJpZXZlRmlsZU5hbWVEcmFnRW50cnlJdGVtcyhmaWxlTmFtZURyYWdFbnRyeUl0ZW1zID0gW10pIHtcbiAgICB0aGlzLmZvckVhY2hEcmFnRW50cnlJdGVtKChkcmFnRW50cnlJdGVtKSA9PiB7XG4gICAgICBjb25zdCBkcmFnRW50cnlJdGVtRGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW0gPSBkcmFnRW50cnlJdGVtLmlzRGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW0oKTtcblxuICAgICAgaWYgKGRyYWdFbnRyeUl0ZW1EaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbSkge1xuICAgICAgICBjb25zdCBkaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbSA9IGRyYWdFbnRyeUl0ZW07IC8vL1xuXG4gICAgICAgIGRpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtLnJldHJpZXZlRmlsZU5hbWVEcmFnRW50cnlJdGVtcyhmaWxlTmFtZURyYWdFbnRyeUl0ZW1zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGZpbGVOYW1lRHJhZ0VudHJ5SXRlbSA9IGRyYWdFbnRyeUl0ZW07ICAvLy9cblxuICAgICAgICBmaWxlTmFtZURyYWdFbnRyeUl0ZW1zLnB1c2goZmlsZU5hbWVEcmFnRW50cnlJdGVtKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBmaWxlTmFtZURyYWdFbnRyeUl0ZW1zO1xuICB9XG5cbiAgcmV0cmlldmVEaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbXMoZGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW1zID0gW10pIHtcbiAgICB0aGlzLmZvckVhY2hEaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbSgoZGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW0pID0+IHtcbiAgICAgIGRpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtLnJldHJpZXZlRGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW1zKGRpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtcyk7XG5cbiAgICAgIGRpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtcy5wdXNoKGRpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBkaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbXM7XG4gIH1cblxuICByZXRyaWV2ZU1hcmtlckVudHJ5SXRlbSgpIHtcbiAgICBjb25zdCBtYXJrZXJFbnRyeUl0ZW0gPSBnZXRNYXJrZXJFbnRyeUl0ZW0oKTtcblxuICAgIHJldHVybiBtYXJrZXJFbnRyeUl0ZW07XG4gIH1cblxuICByZXRyaWV2ZUVkaXRhYmxlRHJhZ0VudHJ5SXRlbSgpIHtcbiAgICBjb25zdCBkcmFnRW50cnlJdGVtcyA9IHRoaXMucmV0cmlldmVEcmFnRW50cnlJdGVtcygpLFxuICAgICAgICAgIGVkaXRhYmxlRHJhZ0VudHJ5SXRlbSA9IGRyYWdFbnRyeUl0ZW1zLmZpbmQoKGRyYWdFbnRyeUl0ZW0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRyYWdFbnRyeUl0ZW1FZGl0YWJsZSA9IGRyYWdFbnRyeUl0ZW0uaXNFZGl0YWJsZSgpO1xuXG4gICAgICAgICAgICBpZiAoZHJhZ0VudHJ5SXRlbUVkaXRhYmxlKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gZWRpdGFibGVEcmFnRW50cnlJdGVtO1xuICB9XG5cbiAgcmV0cmlldmVTZWxlY3RlZERyYWdFbnRyeUl0ZW0oKSB7XG4gICAgY29uc3QgZHJhZ0VudHJ5SXRlbXMgPSB0aGlzLnJldHJpZXZlRHJhZ0VudHJ5SXRlbXMoKSxcbiAgICAgICAgICBzZWxlY3RlZERyYWdFbnRyeUl0ZW0gPSBkcmFnRW50cnlJdGVtcy5maW5kKChkcmFnRW50cnlJdGVtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZCA9IGRyYWdFbnRyeUl0ZW0uaXNTZWxlY3RlZCgpO1xuXG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBzZWxlY3RlZERyYWdFbnRyeUl0ZW07XG4gIH1cblxuICByZXRyaWV2ZUZpbGVOYW1lRHJhZ0VudHJ5SXRlbShmaWxlUGF0aCkge1xuICAgIGNvbnN0IGZpbGVOYW1lRHJhZ0VudHJ5SXRlbXMgPSB0aGlzLnJldHJpZXZlRmlsZU5hbWVEcmFnRW50cnlJdGVtcygpLFxuICAgICAgICAgIGZpbGVOYW1lRHJhZ0VudHJ5SXRlbSA9IGZpbGVOYW1lRHJhZ0VudHJ5SXRlbXMuZmluZCgoZmlsZU5hbWVEcmFnRW50cnlJdGVtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmaWxlTmFtZURyYWdFbnRyeUl0ZW1QYXRoID0gZmlsZU5hbWVEcmFnRW50cnlJdGVtLmdldFBhdGgoKTtcblxuICAgICAgICAgICAgaWYgKGZpbGVOYW1lRHJhZ0VudHJ5SXRlbVBhdGggPT09IGZpbGVQYXRoKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7IC8vL1xuXG4gICAgcmV0dXJuIGZpbGVOYW1lRHJhZ0VudHJ5SXRlbTtcbiAgfVxuXG4gIHJldHJpZXZlRGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW0oZGlyZWN0b3J5UGF0aCkge1xuICAgIGNvbnN0IGRpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtcyA9IHRoaXMucmV0cmlldmVEaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbXMoKSxcbiAgICAgICAgICBkaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbSA9IGRpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtcy5maW5kKChkaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW1QYXRoID0gZGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW0uZ2V0UGF0aCgpO1xuXG4gICAgICAgICAgICBpZiAoZGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW1QYXRoID09PSBkaXJlY3RvcnlQYXRoKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7IC8vL1xuXG4gICAgcmV0dXJuIGRpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtO1xuICB9XG5cbiAgY29sbGFwc2UoKSB7XG5cdCAgdGhpcy5hZGRDbGFzcyhcImNvbGxhcHNlZFwiKTtcbiAgfVxuXG5cdGV4cGFuZCgpIHtcblx0ICB0aGlzLnJlbW92ZUNsYXNzKFwiY29sbGFwc2VkXCIpO1xuICB9XG5cbiAgZGlkTW91bnQoKSB7XG4gICAgY29uc3QgdG9wbW9zdCA9IHRoaXMuaXNUb3Btb3N0KCk7XG5cbiAgICBpZiAodG9wbW9zdCkge1xuICAgICAgdGhpcy5hZGRDbGFzcyhcInRvcG1vc3RcIik7XG4gICAgfVxuICB9XG5cbiAgd2lsbFVubW91bnQoKSB7XG4gICAgLy8vXG4gIH1cblxuICBwYXJlbnRDb250ZXh0KCkge1xuXHRcdGNvbnN0IGV4cGFuZEVudHJpZXNMaXN0ID0gdGhpcy5leHBhbmQuYmluZCh0aGlzKSwgIC8vL1xuICAgICAgICAgIGNvbGxhcHNlRW50cmllc0xpc3QgPSB0aGlzLmNvbGxhcHNlLmJpbmQodGhpcyksICAvLy9cbiAgICAgICAgICBpc0VudHJpZXNMaXN0Q29sbGFwc2VkID0gdGhpcy5pc0NvbGxhcHNlZC5iaW5kKHRoaXMpLCAvLy9cbiAgICAgICAgICBpc0VtcHR5ID0gdGhpcy5pc0VtcHR5LmJpbmQodGhpcyksXG4gICAgICAgICAgYWRkTWFya2VyID0gdGhpcy5hZGRNYXJrZXIuYmluZCh0aGlzKSxcbiAgICAgICAgICBzZWxlY3RQYXRoID0gdGhpcy5zZWxlY3RQYXRoLmJpbmQodGhpcyksXG4gICAgICAgICAgYWRkRmlsZVBhdGggPSB0aGlzLmFkZEZpbGVQYXRoLmJpbmQodGhpcyksXG4gICAgICAgICAgZGVzZWxlY3RQYXRoID0gdGhpcy5kZXNlbGVjdFBhdGguYmluZCh0aGlzKSxcbiAgICAgICAgICByZW1vdmVNYXJrZXIgPSB0aGlzLnJlbW92ZU1hcmtlci5iaW5kKHRoaXMpLFxuICAgICAgICAgIGFkZEVudHJ5SXRlbSA9IHRoaXMuYWRkRW50cnlJdGVtLmJpbmQodGhpcyksXG4gICAgICAgICAgcmVtb3ZlRmlsZVBhdGggPSB0aGlzLnJlbW92ZUZpbGVQYXRoLmJpbmQodGhpcyksXG4gICAgICAgICAgcmVtb3ZlQWxsUGF0aHMgPSB0aGlzLnJlbW92ZUFsbFBhdGhzLmJpbmQodGhpcyksXG4gICAgICAgICAgcmVtb3ZlRW50cnlJdGVtID0gdGhpcy5yZW1vdmVFbnRyeUl0ZW0uYmluZCh0aGlzKSxcbiAgICAgICAgICBkZXNlbGVjdEFsbFBhdGhzID0gdGhpcy5kZXNlbGVjdEFsbFBhdGhzLmJpbmQodGhpcyksXG4gICAgICAgICAgYWRkRGlyZWN0b3J5UGF0aCA9IHRoaXMuYWRkRGlyZWN0b3J5UGF0aC5iaW5kKHRoaXMpLFxuICAgICAgICAgIHJlbW92ZURpcmVjdG9yeVBhdGggPSB0aGlzLnJlbW92ZURpcmVjdG9yeVBhdGguYmluZCh0aGlzKSxcbiAgICAgICAgICBmb3JFYWNoRHJhZ0VudHJ5SXRlbSA9IHRoaXMuZm9yRWFjaERyYWdFbnRyeUl0ZW0uYmluZCh0aGlzKSxcbiAgICAgICAgICByZXRyaWV2ZURyYWdFbnRyeUl0ZW1zID0gdGhpcy5yZXRyaWV2ZURyYWdFbnRyeUl0ZW1zLmJpbmQodGhpcyksXG4gICAgICAgICAgcmV0cmlldmVNYXJrZXJFbnRyeUl0ZW0gPSB0aGlzLnJldHJpZXZlTWFya2VyRW50cnlJdGVtLmJpbmQodGhpcyksXG4gICAgICAgICAgcmV0cmlldmVTZWxlY3RlZERyYWdFbnRyeUl0ZW0gPSB0aGlzLnJldHJpZXZlU2VsZWN0ZWREcmFnRW50cnlJdGVtLmJpbmQodGhpcyksXG4gICAgICAgICAgcmV0cmlldmVFZGl0YWJsZURyYWdFbnRyeUl0ZW0gPSB0aGlzLnJldHJpZXZlRWRpdGFibGVEcmFnRW50cnlJdGVtLmJpbmQodGhpcyksXG4gICAgICAgICAgcmV0cmlldmVGaWxlTmFtZURyYWdFbnRyeUl0ZW0gPSB0aGlzLnJldHJpZXZlRmlsZU5hbWVEcmFnRW50cnlJdGVtLmJpbmQodGhpcyksXG4gICAgICAgICAgcmV0cmlldmVGaWxlTmFtZURyYWdFbnRyeUl0ZW1zID0gdGhpcy5yZXRyaWV2ZUZpbGVOYW1lRHJhZ0VudHJ5SXRlbXMuYmluZCh0aGlzKSxcbiAgICAgICAgICByZXRyaWV2ZURpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtID0gdGhpcy5yZXRyaWV2ZURpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtLmJpbmQodGhpcyksXG4gICAgICAgICAgcmV0cmlldmVEaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbXMgPSB0aGlzLnJldHJpZXZlRGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW1zLmJpbmQodGhpcyk7XG5cblx0XHRyZXR1cm4gKHtcbiAgICAgIGV4cGFuZEVudHJpZXNMaXN0LFxuICAgICAgY29sbGFwc2VFbnRyaWVzTGlzdCxcbiAgICAgIGlzRW50cmllc0xpc3RDb2xsYXBzZWQsXG4gICAgICBpc0VtcHR5LFxuICAgICAgYWRkTWFya2VyLFxuICAgICAgc2VsZWN0UGF0aCxcblx0XHRcdGFkZEZpbGVQYXRoLFxuICAgICAgZGVzZWxlY3RQYXRoLFxuICAgICAgcmVtb3ZlTWFya2VyLFxuICAgICAgYWRkRW50cnlJdGVtLFxuICAgICAgcmVtb3ZlRmlsZVBhdGgsXG4gICAgICByZW1vdmVBbGxQYXRocyxcbiAgICAgIHJlbW92ZUVudHJ5SXRlbSxcbiAgICAgIGRlc2VsZWN0QWxsUGF0aHMsXG4gICAgICBhZGREaXJlY3RvcnlQYXRoLFxuICAgICAgcmVtb3ZlRGlyZWN0b3J5UGF0aCxcbiAgICAgIGZvckVhY2hEcmFnRW50cnlJdGVtLFxuICAgICAgcmV0cmlldmVEcmFnRW50cnlJdGVtcyxcbiAgICAgIHJldHJpZXZlTWFya2VyRW50cnlJdGVtLFxuICAgICAgcmV0cmlldmVTZWxlY3RlZERyYWdFbnRyeUl0ZW0sXG4gICAgICByZXRyaWV2ZUVkaXRhYmxlRHJhZ0VudHJ5SXRlbSxcbiAgICAgIHJldHJpZXZlRmlsZU5hbWVEcmFnRW50cnlJdGVtLFxuICAgICAgcmV0cmlldmVGaWxlTmFtZURyYWdFbnRyeUl0ZW1zLFxuICAgICAgcmV0cmlldmVEaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbSxcbiAgICAgIHJldHJpZXZlRGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW1zXG5cdFx0fSk7XG5cdH1cblxuXHRzdGF0aWMgdGFnTmFtZSA9IFwidWxcIjtcblxuICBzdGF0aWMgaWdub3JlZFByb3BlcnRpZXMgPSBbXG4gICAgXCJ0b3Btb3N0XCIsXG4gICAgXCJleHBsb3JlclwiXG4gIF07XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJlbnRyaWVzXCJcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlKEVudHJpZXNMaXN0KWBcblxuICBsaXN0LXN0eWxlOiBub25lO1xuICBwYWRkaW5nLWxlZnQ6ICR7ZW50cmllc0xpc3RQYWRkaW5nTGVmdH07XG4gIFxuICAudG9wbW9zdCB7XG4gICAgcGFkZGluZy1sZWZ0OiAwO1xuICB9XG4gIFxuICAuY29sbGFwc2VkIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG4gICAgICBcbmA7XG4iXSwibmFtZXMiOlsiZmlsdGVyIiwiYXJyYXlVdGlsaXRpZXMiLCJ0b3Btb3N0RGlyZWN0b3J5TmFtZUZyb21QYXRoIiwicGF0aFdpdGhvdXRUb3Btb3N0RGlyZWN0b3J5TmFtZUZyb21QYXRoIiwicGF0aFV0aWxpdGllcyIsImdldE1hcmtlckVudHJ5SXRlbSIsIm1hcmtlckVudHJ5SXRlbSIsImdsb2JhbFRoaXMiLCJzZXRNYXJrZXJFbnRyeUl0ZW0iLCJPYmplY3QiLCJhc3NpZ24iLCJyZXNldE1hcmtlckVudHJ5SXRlbSIsIkVudHJpZXNMaXN0IiwiRWxlbWVudCIsImlzVG9wbW9zdCIsInRvcG1vc3QiLCJwcm9wZXJ0aWVzIiwiZ2V0RXhwbG9yZXIiLCJleHBsb3JlciIsImdldEVudHJ5SXRlbXMiLCJjaGlsZEVudHJ5SXRlbUVsZW1lbnRzIiwiZ2V0Q2hpbGRFbGVtZW50cyIsImVudHJ5SXRlbXMiLCJnZXRFbnRyeUl0ZW1zTGVuZ3RoIiwiZW50cnlJdGVtc0xlbmd0aCIsImxlbmd0aCIsImlzQ29sbGFwc2VkIiwiY29sbGFwc2VkIiwiaGFzQ2xhc3MiLCJpc0VtcHR5IiwiZW1wdHkiLCJhZGRNYXJrZXIiLCJtYXJrZXJFbnRyeUl0ZW1QYXRoIiwiZHJhZ0VudHJ5SXRlbVR5cGUiLCJ0b3Btb3N0RGlyZWN0b3J5TmFtZSIsIm1hcmtlckVudHJ5SXRlbU5hbWUiLCJhZGRNYXJrZXJFbnRyeUl0ZW0iLCJ0b3Btb3N0RGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW0iLCJmaW5kRGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW0iLCJtYXJrZXJFbnRyeUl0ZW1QYXRoV2l0aG91dFRvcG1vc3REaXJlY3RvcnlOYW1lIiwicmVtb3ZlTWFya2VyIiwicmVtb3ZlTWFya2VyRW50cnlJdGVtIiwic2VsZWN0UGF0aCIsInBhdGgiLCJkcmFnRW50cnlJdGVtIiwibmFtZSIsImZpbmREcmFnRW50cnlJdGVtIiwic2VsZWN0IiwiZmlsZVBhdGhXaXRob3V0VG9wbW9zdERpcmVjdG9yeU5hbWUiLCJleHBhbmQiLCJkZXNlbGVjdFBhdGgiLCJkZXNlbGVjdCIsImFkZEZpbGVQYXRoIiwiZmlsZVBhdGgiLCJyZWFkT25seSIsImZpbGVOYW1lRHJhZ0VudHJ5SXRlbSIsImZpbGVOYW1lIiwiZmluZEZpbGVOYW1lRHJhZ0VudHJ5SXRlbSIsImNyZWF0ZUZpbGVOYW1lRHJhZ0VudHJ5SXRlbSIsImFkZEVudHJ5SXRlbSIsImNyZWF0ZURpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtIiwicmVtb3ZlRmlsZVBhdGgiLCJyZW1vdmVFbXB0eVBhcmVudERpcmVjdG9yaWVzIiwicmVtb3ZlRW50cnlJdGVtIiwidG9wbW9zdERpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtRW1wdHkiLCJyZW1vdmVBbGxQYXRocyIsInJlbW92ZUVudHJ5SXRlbXMiLCJkZXNlbGVjdEFsbFBhdGhzIiwiZHJhZ0VudHJ5SXRlbXMiLCJyZXRyaWV2ZURyYWdFbnRyeUl0ZW1zIiwiZm9yRWFjaCIsImFkZERpcmVjdG9yeVBhdGgiLCJkaXJlY3RvcnlQYXRoIiwiZGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW0iLCJkaXJlY3RvcnlOYW1lIiwiY29sbGFwc2UiLCJkaXJlY3RvcnlQYXRoV2l0aG91dFRvcG1vc3REaXJlY3RvcnlOYW1lIiwicmVtb3ZlRGlyZWN0b3J5UGF0aCIsImVudHJ5SXRlbSIsIm5leHRFbnRyeUl0ZW0iLCJwcmV2aW91c0VudHJ5SXRlbSIsImZpbmRFbnRyeUl0ZW0iLCJuZXh0RW50cnlCZWZvcmVFbnRyeUl0ZW0iLCJpc0JlZm9yZSIsIm1vdW50IiwibW91bnRCZWZvcmUiLCJ1bm1vdW50IiwidHlwZSIsIkZJTEVfTkFNRV9EUkFHX0VOVFJZX1RZUEUiLCJGaWxlTmFtZU1hcmtlckVudHJ5SXRlbSIsImdldEZpbGVOYW1lTWFya2VyRW50cnlJdGVtIiwiZmlsZU5hbWVNYXJrZXJFbnRyeUl0ZW0iLCJESVJFQ1RPUllfTkFNRV9EUkFHX0VOVFJZX1RZUEUiLCJEaXJlY3RvcnlOYW1lTWFya2VyRW50cnlJdGVtIiwiZ2V0RGlyZWN0b3J5TmFtZU1hcmtlckVudHJ5SXRlbSIsImRpcmVjdG9yeU5hbWVNYXJrZXJFbnRyeUl0ZW0iLCJyZXRyaWV2ZU1hcmtlckVudHJ5SXRlbSIsInJlbW92ZSIsInJlc2V0RHJvcEVsZW1lbnQiLCJGaWxlTmFtZURyYWdFbnRyeUl0ZW0iLCJnZXRGaWxlTmFtZURyYWdFbnRyeUl0ZW0iLCJEaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbSIsImdldERpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtIiwiaXNGaWxlTmFtZURyYWdFbnRyeUl0ZW1QcmVzZW50IiwiZmlsZU5hbWVEcmFnRW50cnlJdGVtUHJlc2VudCIsImlzRGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW1QcmVzZW50IiwiZGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW1QcmVzZW50IiwiZm9yRWFjaEVudHJ5SXRlbUJ5VHlwZXMiLCJjYWxsYmFjayIsInR5cGVzIiwiZW50cnlJdGVtVHlwZSIsImdldFR5cGUiLCJ0eXBlc0luY2x1ZGVzRW50cnlJdGVtVHlwZSIsImluY2x1ZGVzIiwiZm9yRWFjaERyYWdFbnRyeUl0ZW0iLCJmb3JFYWNoRmlsZU5hbWVEcmFnRW50cnlJdGVtIiwiZm9yRWFjaERpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtIiwiZmluZCIsImZpbmRFbnRyeUl0ZW1CeVR5cGVzIiwicmVzdWx0IiwiZmluZEVudHJ5SXRlbXNCeVR5cGVzIiwiZmluZEVudHJ5SXRlbUJ5TmFtZUFuZFR5cGVzIiwiZW50cnlJdGVtTmFtZSIsImdldE5hbWUiLCJmaW5kRHJhZ0VudHJ5SXRlbXMiLCJwdXNoIiwicmV0cmlldmVGaWxlTmFtZURyYWdFbnRyeUl0ZW1zIiwiZmlsZU5hbWVEcmFnRW50cnlJdGVtcyIsImRyYWdFbnRyeUl0ZW1EaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbSIsImlzRGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW0iLCJyZXRyaWV2ZURpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtcyIsImRpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtcyIsInJldHJpZXZlRWRpdGFibGVEcmFnRW50cnlJdGVtIiwiZWRpdGFibGVEcmFnRW50cnlJdGVtIiwiZHJhZ0VudHJ5SXRlbUVkaXRhYmxlIiwiaXNFZGl0YWJsZSIsInJldHJpZXZlU2VsZWN0ZWREcmFnRW50cnlJdGVtIiwic2VsZWN0ZWREcmFnRW50cnlJdGVtIiwic2VsZWN0ZWQiLCJpc1NlbGVjdGVkIiwicmV0cmlldmVGaWxlTmFtZURyYWdFbnRyeUl0ZW0iLCJmaWxlTmFtZURyYWdFbnRyeUl0ZW1QYXRoIiwiZ2V0UGF0aCIsInJldHJpZXZlRGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW0iLCJkaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbVBhdGgiLCJhZGRDbGFzcyIsInJlbW92ZUNsYXNzIiwiZGlkTW91bnQiLCJ3aWxsVW5tb3VudCIsInBhcmVudENvbnRleHQiLCJleHBhbmRFbnRyaWVzTGlzdCIsImJpbmQiLCJjb2xsYXBzZUVudHJpZXNMaXN0IiwiaXNFbnRyaWVzTGlzdENvbGxhcHNlZCIsInRhZ05hbWUiLCJpZ25vcmVkUHJvcGVydGllcyIsImRlZmF1bHRQcm9wZXJ0aWVzIiwiY2xhc3NOYW1lIiwid2l0aFN0eWxlIiwiZW50cmllc0xpc3RQYWRkaW5nTGVmdCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBa3RCQTs7O2VBQUE7OztzRUFodEJzQjtzQkFFRTsyQkFDc0I7d0JBRVA7NEJBQ21DOzs7Ozs7QUFFMUUsTUFBTSxFQUFFQSxNQUFNLEVBQUUsR0FBR0MseUJBQWMsRUFDM0IsRUFBRUMsNEJBQTRCLEVBQUVDLHVDQUF1QyxFQUFFLEdBQUdDLHdCQUFhO0FBRS9GLFNBQVNDO0lBQ1AsTUFBTSxFQUFFQyxlQUFlLEVBQUUsR0FBR0M7SUFFNUIsT0FBT0Q7QUFDVDtBQUVBLFNBQVNFLG1CQUFtQkYsZUFBZTtJQUN6Q0csT0FBT0MsTUFBTSxDQUFDSCxZQUFZO1FBQ3hCRDtJQUNGO0FBQ0Y7QUFFQSxTQUFTSztJQUNQLE1BQU1MLGtCQUFrQjtJQUV4QkUsbUJBQW1CRjtBQUNyQjtBQUVBRyxPQUFPQyxNQUFNLENBQUNILFlBQVk7SUFDeEJGO0lBQ0FHO0lBQ0FHO0FBQ0Y7QUFFQUE7QUFFQSxNQUFNQyxvQkFBb0JDLGFBQU87SUFDL0JDLFlBQVk7UUFDVixNQUFNLEVBQUVDLFVBQVUsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDQyxVQUFVO1FBRTNDLE9BQU9EO0lBQ1Q7SUFFQUUsY0FBYztRQUNkLE1BQU0sRUFBRUMsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDRixVQUFVO1FBRXBDLE9BQU9FO0lBQ1I7SUFFQUMsZ0JBQWdCO1FBQ2YsTUFBTUMseUJBQXlCLElBQUksQ0FBQ0MsZ0JBQWdCLENBQUMsYUFDbERDLGFBQWFGLHdCQUF5QixHQUFHO1FBRTVDLE9BQU9FO0lBQ1I7SUFFQUMsc0JBQXNCO1FBQ25CLE1BQU1ELGFBQWEsSUFBSSxDQUFDSCxhQUFhLElBQy9CSyxtQkFBbUJGLFdBQVdHLE1BQU07UUFFMUMsT0FBT0Q7SUFDVDtJQUVBRSxjQUFjO1FBQ1osTUFBTUMsWUFBWSxJ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