easy-file-system 5.0.45 → 5.0.49
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/button/toggle.js +42 -164
- package/lib/constants.js +6 -6
- package/lib/customEventTypes.js +9 -9
- package/lib/div/item/entry/drag/directoryName.js +24 -122
- package/lib/div/item/entry/drag/fileName.js +15 -112
- package/lib/div/item/entry/drag.js +19 -120
- package/lib/div/item/entry/marker.js +10 -107
- package/lib/div/item/entry.js +25 -187
- package/lib/entryTypes.js +5 -5
- package/lib/example/preamble.js +2 -2
- package/lib/example/view/button.js +12 -23
- package/lib/example/view/explorer/first.js +20 -120
- package/lib/example/view/explorer/second.js +17 -117
- package/lib/example/view/rubbishBin.js +10 -88
- package/lib/example/view.js +88 -233
- package/lib/example.js +6 -6
- package/lib/explorer.js +393 -740
- package/lib/index.js +17 -17
- package/lib/item/entry/drag/directoryName.js +130 -289
- package/lib/item/entry/drag/fileName.js +61 -182
- package/lib/item/entry/drag.js +179 -375
- package/lib/item/entry/marker/directoryName.js +20 -117
- package/lib/item/entry/marker/fileName.js +21 -118
- package/lib/item/entry/marker.js +13 -110
- package/lib/item/entry.js +54 -249
- package/lib/list/entries.js +464 -808
- package/lib/mixins/dragEntryItem.js +19 -19
- package/lib/mixins/explorer.js +28 -28
- package/lib/mixins/nameSpan.js +12 -12
- package/lib/mixins/rubbishBin.js +8 -8
- package/lib/rubbishBin.js +180 -415
- package/lib/span/name.js +93 -262
- package/lib/styles.js +14 -14
- package/lib/svg/directoryName.js +31 -142
- package/lib/svg/fileName.js +32 -143
- package/lib/svg/marker.js +25 -136
- package/lib/svg/rubbishBin/closed.js +48 -163
- package/lib/svg/rubbishBin/open.js +52 -167
- package/lib/svg/toggle/down.js +29 -145
- package/lib/svg/toggle/up.js +30 -146
- package/lib/svg.js +12 -149
- package/lib/utilities/name.js +12 -12
- package/lib/utilities/path.js +5 -5
- package/lib/utilities/pathMap.js +7 -7
- package/package.json +8 -4
- package/.aiignore +0 -14
- package/.swcrc +0 -11
- package/bin/main.js +0 -15
- package/example.js +0 -41953
- package/index.html +0 -46
package/lib/explorer.js
CHANGED
|
@@ -8,767 +8,420 @@ Object.defineProperty(exports, "default", {
|
|
|
8
8
|
return _default;
|
|
9
9
|
}
|
|
10
10
|
});
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
function _assert_this_initialized(self) {
|
|
28
|
-
if (self === void 0) {
|
|
29
|
-
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
|
|
30
|
-
}
|
|
31
|
-
return self;
|
|
32
|
-
}
|
|
33
|
-
function _call_super(_this, derived, args) {
|
|
34
|
-
derived = _get_prototype_of(derived);
|
|
35
|
-
return _possible_constructor_return(_this, _is_native_reflect_construct() ? Reflect.construct(derived, args || [], _get_prototype_of(_this).constructor) : derived.apply(_this, args));
|
|
36
|
-
}
|
|
37
|
-
function _class_call_check(instance, Constructor) {
|
|
38
|
-
if (!(instance instanceof Constructor)) {
|
|
39
|
-
throw new TypeError("Cannot call a class as a function");
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
function _construct(Parent, args, Class) {
|
|
43
|
-
if (_is_native_reflect_construct()) {
|
|
44
|
-
_construct = Reflect.construct;
|
|
45
|
-
} else {
|
|
46
|
-
_construct = function construct(Parent, args, Class) {
|
|
47
|
-
var a = [
|
|
48
|
-
null
|
|
49
|
-
];
|
|
50
|
-
a.push.apply(a, args);
|
|
51
|
-
var Constructor = Function.bind.apply(Parent, a);
|
|
52
|
-
var instance = new Constructor();
|
|
53
|
-
if (Class) _set_prototype_of(instance, Class.prototype);
|
|
54
|
-
return instance;
|
|
55
|
-
};
|
|
56
|
-
}
|
|
57
|
-
return _construct.apply(null, arguments);
|
|
58
|
-
}
|
|
59
|
-
function _defineProperties(target, props) {
|
|
60
|
-
for(var i = 0; i < props.length; i++){
|
|
61
|
-
var descriptor = props[i];
|
|
62
|
-
descriptor.enumerable = descriptor.enumerable || false;
|
|
63
|
-
descriptor.configurable = true;
|
|
64
|
-
if ("value" in descriptor) descriptor.writable = true;
|
|
65
|
-
Object.defineProperty(target, descriptor.key, descriptor);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
function _create_class(Constructor, protoProps, staticProps) {
|
|
69
|
-
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
|
|
70
|
-
if (staticProps) _defineProperties(Constructor, staticProps);
|
|
71
|
-
return Constructor;
|
|
72
|
-
}
|
|
73
|
-
function _define_property(obj, key, value) {
|
|
74
|
-
if (key in obj) {
|
|
75
|
-
Object.defineProperty(obj, key, {
|
|
76
|
-
value: value,
|
|
77
|
-
enumerable: true,
|
|
78
|
-
configurable: true,
|
|
79
|
-
writable: true
|
|
80
|
-
});
|
|
81
|
-
} else {
|
|
82
|
-
obj[key] = value;
|
|
83
|
-
}
|
|
84
|
-
return obj;
|
|
85
|
-
}
|
|
86
|
-
function _get_prototype_of(o) {
|
|
87
|
-
_get_prototype_of = Object.setPrototypeOf ? Object.getPrototypeOf : function getPrototypeOf(o) {
|
|
88
|
-
return o.__proto__ || Object.getPrototypeOf(o);
|
|
89
|
-
};
|
|
90
|
-
return _get_prototype_of(o);
|
|
91
|
-
}
|
|
92
|
-
function _inherits(subClass, superClass) {
|
|
93
|
-
if (typeof superClass !== "function" && superClass !== null) {
|
|
94
|
-
throw new TypeError("Super expression must either be null or a function");
|
|
95
|
-
}
|
|
96
|
-
subClass.prototype = Object.create(superClass && superClass.prototype, {
|
|
97
|
-
constructor: {
|
|
98
|
-
value: subClass,
|
|
99
|
-
writable: true,
|
|
100
|
-
configurable: true
|
|
101
|
-
}
|
|
102
|
-
});
|
|
103
|
-
if (superClass) _set_prototype_of(subClass, superClass);
|
|
104
|
-
}
|
|
11
|
+
const _easywithstyle = /*#__PURE__*/ _interop_require_default(require("easy-with-style"));
|
|
12
|
+
const _easy = require("easy");
|
|
13
|
+
const _easydraganddrop = require("easy-drag-and-drop");
|
|
14
|
+
const _necessary = require("necessary");
|
|
15
|
+
const _entries = /*#__PURE__*/ _interop_require_default(require("./list/entries"));
|
|
16
|
+
const _explorer = /*#__PURE__*/ _interop_require_default(require("./mixins/explorer"));
|
|
17
|
+
const _dragEntryItem = /*#__PURE__*/ _interop_require_default(require("./mixins/dragEntryItem"));
|
|
18
|
+
const _fileName = /*#__PURE__*/ _interop_require_default(require("./item/entry/drag/fileName"));
|
|
19
|
+
const _fileName1 = /*#__PURE__*/ _interop_require_default(require("./item/entry/marker/fileName"));
|
|
20
|
+
const _directoryName = /*#__PURE__*/ _interop_require_default(require("./item/entry/drag/directoryName"));
|
|
21
|
+
const _directoryName1 = /*#__PURE__*/ _interop_require_default(require("./item/entry/marker/directoryName"));
|
|
22
|
+
const _styles = require("./styles");
|
|
23
|
+
const _constants = require("./constants");
|
|
24
|
+
const _entryTypes = require("./entryTypes");
|
|
25
|
+
const _pathMap = require("./utilities/pathMap");
|
|
26
|
+
const _customEventTypes = require("./customEventTypes");
|
|
105
27
|
function _interop_require_default(obj) {
|
|
106
28
|
return obj && obj.__esModule ? obj : {
|
|
107
29
|
default: obj
|
|
108
30
|
};
|
|
109
31
|
}
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
if (
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
32
|
+
const { first } = _necessary.arrayUtilities, { concatenatePaths, pathWithoutBottommostNameFromPath } = _necessary.pathUtilities;
|
|
33
|
+
class Explorer extends _easy.Element {
|
|
34
|
+
dragOverCustomHandler = (event, element, dragElement)=>{
|
|
35
|
+
const dragEntryItem = dragElement, markerEntryItem = this.retrieveMarkerEntryItem(), dragEntryItemName = dragEntryItem.getName();
|
|
36
|
+
let markerEntryItemPath = markerEntryItem.getPath(), markerEntryItemExplorer = markerEntryItem.getExplorer(), previousMarkerEntryItemPath = markerEntryItemPath, previousMarkerEntryItemExplorer = markerEntryItemExplorer; ///
|
|
37
|
+
markerEntryItemPath = dragEntryItemName; ///
|
|
38
|
+
markerEntryItemExplorer = this; ///
|
|
39
|
+
if (markerEntryItemExplorer !== previousMarkerEntryItemExplorer || markerEntryItemPath !== previousMarkerEntryItemPath) {
|
|
40
|
+
const dragEntryItemType = dragEntryItem.getType();
|
|
41
|
+
previousMarkerEntryItemExplorer.removeMarker();
|
|
42
|
+
markerEntryItemExplorer.addMarker(markerEntryItemPath, dragEntryItemType);
|
|
121
43
|
}
|
|
122
|
-
|
|
123
|
-
|
|
44
|
+
};
|
|
45
|
+
dropCustomHandler = (event, element, dragElement, aborted, done)=>{
|
|
46
|
+
const markerEntryItem = this.retrieveMarkerEntryItem(), markerEntryItemExplorer = markerEntryItem.getExplorer();
|
|
47
|
+
if (aborted) {
|
|
48
|
+
markerEntryItemExplorer.removeMarker();
|
|
49
|
+
done();
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
const dragEntryItem = dragElement; ///
|
|
53
|
+
markerEntryItemExplorer.dropDragEntryItem(event, element, dragEntryItem, done);
|
|
54
|
+
};
|
|
55
|
+
getExplorer() {
|
|
56
|
+
const explorer = this; ///
|
|
57
|
+
return explorer;
|
|
58
|
+
}
|
|
59
|
+
getReference() {
|
|
60
|
+
const { reference = null } = this.properties;
|
|
61
|
+
return reference;
|
|
62
|
+
}
|
|
63
|
+
getReferences() {
|
|
64
|
+
const { references = [] } = this.properties;
|
|
65
|
+
return references;
|
|
66
|
+
}
|
|
67
|
+
getEntriesList() {
|
|
68
|
+
const { EntriesList } = this.constructor;
|
|
69
|
+
return EntriesList;
|
|
70
|
+
}
|
|
71
|
+
getFileNameDragEntryItem(readOnly) {
|
|
72
|
+
const { FileNameDragEntryItem } = this.constructor;
|
|
73
|
+
return FileNameDragEntryItem;
|
|
74
|
+
}
|
|
75
|
+
getFileNameMarkerEntryItem() {
|
|
76
|
+
const { FileNameMarkerEntryItem } = this.constructor;
|
|
77
|
+
return FileNameMarkerEntryItem;
|
|
78
|
+
}
|
|
79
|
+
getDirectoryNameDragEntryItem(readOnly, topmost) {
|
|
80
|
+
const { DirectoryNameDragEntryItem } = this.constructor;
|
|
81
|
+
return DirectoryNameDragEntryItem;
|
|
82
|
+
}
|
|
83
|
+
getDirectoryNameMarkerEntryItem() {
|
|
84
|
+
const { DirectoryNameMarkerEntryItem } = this.constructor;
|
|
85
|
+
return DirectoryNameMarkerEntryItem;
|
|
86
|
+
}
|
|
87
|
+
retrievePaths(type) {
|
|
88
|
+
const dragEntryItems = this.retrieveDragEntryItems(), paths = dragEntryItems.reduce((paths, dragEntryItem)=>{
|
|
89
|
+
const dragEntryItemType = dragEntryItem.getType();
|
|
90
|
+
if (dragEntryItemType === type) {
|
|
91
|
+
const dragEntryItemPath = dragEntryItem.getPath(), path = dragEntryItemPath; ///
|
|
92
|
+
paths.push(path);
|
|
93
|
+
}
|
|
94
|
+
return paths;
|
|
95
|
+
}, []);
|
|
96
|
+
return paths;
|
|
97
|
+
}
|
|
98
|
+
retrieveFilePaths() {
|
|
99
|
+
const type = _entryTypes.FILE_NAME_DRAG_ENTRY_TYPE, paths = this.retrievePaths(type), filePaths = paths; ///
|
|
100
|
+
return filePaths;
|
|
101
|
+
}
|
|
102
|
+
retrieveDirectoryPaths() {
|
|
103
|
+
const type = _entryTypes.DIRECTORY_NAME_DRAG_ENTRY_TYPE, paths = this.retrievePaths(type), directoryPaths = paths; ///
|
|
104
|
+
return directoryPaths;
|
|
105
|
+
}
|
|
106
|
+
collapse() {
|
|
107
|
+
const directoryNameDragEntryItems = this.retrieveDirectoryNameDragEntryItems();
|
|
108
|
+
directoryNameDragEntryItems.forEach((directoryNameDragEntryItem)=>{
|
|
109
|
+
directoryNameDragEntryItem.collapse();
|
|
124
110
|
});
|
|
125
111
|
}
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
112
|
+
createPath() {
|
|
113
|
+
let path;
|
|
114
|
+
const name = _constants.PERIOD, selectedDragEntryItem = this.retrieveSelectedDragEntryItem();
|
|
115
|
+
if (selectedDragEntryItem === null) {
|
|
116
|
+
path = name; ///
|
|
117
|
+
} else {
|
|
118
|
+
const selectedDragEntryItemDirectoryNameDragEntryItem = selectedDragEntryItem.isDirectoryNameDragEntryItem();
|
|
119
|
+
if (selectedDragEntryItemDirectoryNameDragEntryItem) {
|
|
120
|
+
const directoryNameDragEntryItem = selectedDragEntryItem, directoryNameDragEntryItemPath = directoryNameDragEntryItem.getPath();
|
|
121
|
+
path = concatenatePaths(directoryNameDragEntryItemPath, name);
|
|
122
|
+
selectedDragEntryItem.expand();
|
|
123
|
+
} else {
|
|
124
|
+
const fileNameDragEntryItem = selectedDragEntryItem, fileNameDragEntryItemPath = fileNameDragEntryItem.getPath(), fileNameDragEntryItemPathWithoutBottommostName = pathWithoutBottommostNameFromPath(fileNameDragEntryItemPath);
|
|
125
|
+
path = concatenatePaths(fileNameDragEntryItemPathWithoutBottommostName, name);
|
|
126
|
+
}
|
|
136
127
|
}
|
|
137
|
-
|
|
128
|
+
return path;
|
|
138
129
|
}
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
source = source != null ? source : {};
|
|
143
|
-
if (Object.getOwnPropertyDescriptors) {
|
|
144
|
-
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
|
|
145
|
-
} else {
|
|
146
|
-
ownKeys(Object(source)).forEach(function(key) {
|
|
147
|
-
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
|
|
148
|
-
});
|
|
130
|
+
createFilePath() {
|
|
131
|
+
const path = this.createPath(), filePath = path, fileNameDragEntryItem = this.addFilePath(filePath);
|
|
132
|
+
fileNameDragEntryItem.create();
|
|
149
133
|
}
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
if (call && (_type_of(call) === "object" || typeof call === "function")) {
|
|
154
|
-
return call;
|
|
134
|
+
createDirectoryPath() {
|
|
135
|
+
const path = this.createPath(), readOnly = false, collapsed = false, directoryPath = path, directoryNameDragEntryItem = this.addDirectoryPath(directoryPath, readOnly, collapsed);
|
|
136
|
+
directoryNameDragEntryItem.create();
|
|
155
137
|
}
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
return o;
|
|
162
|
-
};
|
|
163
|
-
return _set_prototype_of(o, p);
|
|
164
|
-
}
|
|
165
|
-
function _tagged_template_literal(strings, raw) {
|
|
166
|
-
if (!raw) {
|
|
167
|
-
raw = strings.slice(0);
|
|
138
|
+
renameSelectedPath() {
|
|
139
|
+
const selectedDragEntryItem = this.retrieveSelectedDragEntryItem();
|
|
140
|
+
if (selectedDragEntryItem !== null) {
|
|
141
|
+
selectedDragEntryItem.rename();
|
|
142
|
+
}
|
|
168
143
|
}
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
144
|
+
getSelectedPath() {
|
|
145
|
+
let selectedPath = null;
|
|
146
|
+
const selectedDragEntryItem = this.retrieveSelectedDragEntryItem();
|
|
147
|
+
if (selectedDragEntryItem !== null) {
|
|
148
|
+
const selectedDragEntryItemPath = selectedDragEntryItem.getPath();
|
|
149
|
+
selectedPath = selectedDragEntryItemPath; ///
|
|
172
150
|
}
|
|
173
|
-
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
if (typeof Class !== "function") {
|
|
184
|
-
throw new TypeError("Super expression must either be null or a function");
|
|
151
|
+
return selectedPath;
|
|
152
|
+
}
|
|
153
|
+
clickDragEntryItem(event, element, dragEntryItem) {
|
|
154
|
+
const singleClick = this.isSingleClick();
|
|
155
|
+
if (singleClick) {
|
|
156
|
+
const selected = dragEntryItem.click(event, element);
|
|
157
|
+
if (selected) {
|
|
158
|
+
dragEntryItem.singleClick(event, element);
|
|
159
|
+
}
|
|
160
|
+
return;
|
|
185
161
|
}
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
162
|
+
const clickedDragEntryItem = this.getClickedDragEntryItem();
|
|
163
|
+
if (dragEntryItem !== clickedDragEntryItem) {
|
|
164
|
+
const interval = this.getInterval();
|
|
165
|
+
clearInterval(interval);
|
|
166
|
+
this.clearInterval();
|
|
167
|
+
this.clearClickedDragEntryItem();
|
|
189
168
|
}
|
|
190
|
-
|
|
191
|
-
|
|
169
|
+
const interval = this.getInterval();
|
|
170
|
+
if (interval === null) {
|
|
171
|
+
const delay = _constants.DOUBLE_CLICK_DELAY, interval = setTimeout(()=>{
|
|
172
|
+
this.clearInterval();
|
|
173
|
+
this.clearClickedDragEntryItem();
|
|
174
|
+
dragEntryItem.click(event, element);
|
|
175
|
+
}, delay), clickedDragEntryItem = dragEntryItem; ///
|
|
176
|
+
this.setInterval(interval);
|
|
177
|
+
this.setClickedDragEntryItem(clickedDragEntryItem);
|
|
178
|
+
return;
|
|
192
179
|
}
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
180
|
+
clearInterval(interval);
|
|
181
|
+
this.clearInterval();
|
|
182
|
+
this.clearClickedDragEntryItem();
|
|
183
|
+
dragEntryItem.doubleClick(event, element);
|
|
184
|
+
}
|
|
185
|
+
openFileNameDragEntryItem(event, element, fileNameDragEntryItem) {
|
|
186
|
+
const disabled = this.isDisabled();
|
|
187
|
+
if (disabled) {
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
const fileNameDragEntryItemPath = fileNameDragEntryItem.getPath(), filePath = fileNameDragEntryItemPath, customEventType = _customEventTypes.OPEN_CUSTOM_EVENT_TYPE;
|
|
191
|
+
this.callCustomHandlers(customEventType, event, element, filePath);
|
|
192
|
+
}
|
|
193
|
+
selectOrDeselectDragEntryItem(event, element, dragEntryItem) {
|
|
194
|
+
const disabled = this.isDisabled();
|
|
195
|
+
if (disabled) {
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
let selected = dragEntryItem.isSelected();
|
|
199
|
+
const path = dragEntryItem.getPath();
|
|
200
|
+
if (selected) {
|
|
201
|
+
dragEntryItem.deselect();
|
|
202
|
+
} else {
|
|
203
|
+
this.deselectAllPaths();
|
|
204
|
+
this.selectPath(path);
|
|
205
|
+
}
|
|
206
|
+
selected = !selected; ///
|
|
207
|
+
const readOnly = dragEntryItem.isReadOnly(), customEventType = _customEventTypes.SELECT_CUSTOM_EVENT_TYPE;
|
|
208
|
+
this.callCustomHandlers(customEventType, event, element, path, selected, readOnly);
|
|
209
|
+
return selected;
|
|
210
|
+
}
|
|
211
|
+
createDragEntryItem(event, element, dragEntryItem, done) {
|
|
212
|
+
const sourceEntryPath = (0, _pathMap.sourceEntryPathFromEntryItem)(dragEntryItem), targetEntryPath = (0, _pathMap.targetEntryPathFromEntryItem)(dragEntryItem), pathMaps = dragEntryItem.getPathMaps(sourceEntryPath, targetEntryPath), explorer = this; ///
|
|
213
|
+
this.createDragEntryItems(event, element, pathMaps, explorer, done);
|
|
214
|
+
}
|
|
215
|
+
renameDragEntryItem(event, element, dragEntryItem, done) {
|
|
216
|
+
let sourceEntryPath, targetEntryPath;
|
|
217
|
+
sourceEntryPath = (0, _pathMap.sourceEntryPathFromEntryItem)(dragEntryItem);
|
|
218
|
+
targetEntryPath = (0, _pathMap.targetEntryPathFromEntryItem)(dragEntryItem);
|
|
219
|
+
const pathMaps = dragEntryItem.getPathMaps(sourceEntryPath, targetEntryPath), firstPathMap = first(pathMaps), pathMap = firstPathMap; ///
|
|
220
|
+
({ sourceEntryPath, targetEntryPath } = pathMap);
|
|
221
|
+
if (sourceEntryPath === targetEntryPath) {
|
|
222
|
+
done();
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
const explorer = this; ///
|
|
226
|
+
this.renameDragEntryItems(event, element, pathMaps, explorer, done);
|
|
227
|
+
}
|
|
228
|
+
dropDragEntryItem(event, element, dragEntryItem, done) {
|
|
229
|
+
const dragEntryItemExplorer = dragEntryItem.getExplorer(), markerEntryItem = this.retrieveMarkerEntryItem(), sourceEntryPath = (0, _pathMap.sourceEntryPathFromEntryItem)(dragEntryItem), targetEntryPath = (0, _pathMap.targetEntryPathFromEntryItem)(markerEntryItem);
|
|
230
|
+
if (sourceEntryPath === targetEntryPath && dragEntryItemExplorer === this) {
|
|
231
|
+
this.removeMarker();
|
|
232
|
+
done();
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
const pathMaps = dragEntryItem.getPathMaps(sourceEntryPath, targetEntryPath), explorer = dragEntryItemExplorer; ///
|
|
236
|
+
this.moveDragEntryItems(event, element, pathMaps, explorer, done);
|
|
237
|
+
}
|
|
238
|
+
renameDragEntryItems(event, element, pathMaps, explorer, done) {
|
|
239
|
+
const customEventType = _customEventTypes.RENAME_CUSTOM_EVENT_TYPE;
|
|
240
|
+
this.callCustomHandlersAsync(customEventType, event, element, pathMaps, ()=>{
|
|
241
|
+
pathMaps.forEach((pathMap)=>{
|
|
242
|
+
this.removeDragEntryItem(pathMap, explorer);
|
|
243
|
+
});
|
|
244
|
+
pathMaps.forEach((pathMap)=>{
|
|
245
|
+
this.addDragEntryItem(pathMap, explorer);
|
|
246
|
+
});
|
|
247
|
+
done();
|
|
200
248
|
});
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
249
|
+
}
|
|
250
|
+
moveDragEntryItems(event, element, pathMaps, explorer, done) {
|
|
251
|
+
const customEventType = _customEventTypes.MOVE_CUSTOM_EVENT_TYPE;
|
|
252
|
+
this.callCustomHandlersAsync(customEventType, event, element, pathMaps, ()=>{
|
|
253
|
+
pathMaps.forEach((pathMap)=>{
|
|
254
|
+
this.removeDragEntryItem(pathMap, explorer);
|
|
255
|
+
});
|
|
256
|
+
pathMaps.forEach((pathMap)=>{
|
|
257
|
+
this.addDragEntryItem(pathMap, explorer);
|
|
258
|
+
});
|
|
259
|
+
this.removeMarker();
|
|
260
|
+
done();
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
removeDragEntryItems(event, element, pathMaps, explorer, done) {
|
|
264
|
+
const customEventType = _customEventTypes.REMOVE_CUSTOM_EVENT_TYPE;
|
|
265
|
+
this.callCustomHandlersAsync(customEventType, event, element, pathMaps, ()=>{
|
|
266
|
+
pathMaps.forEach((pathMap)=>{
|
|
267
|
+
this.removeDragEntryItem(pathMap, explorer);
|
|
268
|
+
});
|
|
269
|
+
pathMaps.forEach((pathMap)=>{
|
|
270
|
+
this.addDragEntryItem(pathMap, explorer);
|
|
271
|
+
});
|
|
272
|
+
done();
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
createDragEntryItems(event, element, pathMaps, explorer, done) {
|
|
276
|
+
const customEventType = _customEventTypes.CREATE_CUSTOM_EVENT_TYPE;
|
|
277
|
+
this.callCustomHandlersAsync(customEventType, event, element, pathMaps, ()=>{
|
|
278
|
+
pathMaps.forEach((pathMap)=>{
|
|
279
|
+
this.removeDragEntryItem(pathMap, explorer);
|
|
280
|
+
});
|
|
281
|
+
pathMaps.forEach((pathMap)=>{
|
|
282
|
+
this.addDragEntryItem(pathMap, explorer);
|
|
283
|
+
});
|
|
284
|
+
done();
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
enable() {
|
|
288
|
+
const disabled = false;
|
|
289
|
+
this.setDisabled(disabled);
|
|
290
|
+
this.enableDrag();
|
|
291
|
+
}
|
|
292
|
+
disable() {
|
|
293
|
+
const disabled = true;
|
|
294
|
+
this.setDisabled(disabled);
|
|
295
|
+
this.disableDrag();
|
|
296
|
+
}
|
|
297
|
+
enableDrag() {
|
|
298
|
+
const dragEntryItems = this.retrieveDragEntryItems();
|
|
299
|
+
dragEntryItems.forEach((dragEntryItem)=>{
|
|
300
|
+
dragEntryItem.enableDrag();
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
disableDrag() {
|
|
304
|
+
const dragEntryItems = this.retrieveDragEntryItems();
|
|
305
|
+
dragEntryItems.forEach((dragEntryItem)=>{
|
|
306
|
+
dragEntryItem.disableDrag();
|
|
307
|
+
});
|
|
308
|
+
}
|
|
309
|
+
clearInterval() {
|
|
310
|
+
const interval = null;
|
|
311
|
+
this.setInterval(interval);
|
|
312
|
+
}
|
|
313
|
+
clearClickedDragEntryItem() {
|
|
314
|
+
const clickedDragEntryItem = null;
|
|
315
|
+
this.setClickedDragEntryItem(clickedDragEntryItem);
|
|
316
|
+
}
|
|
317
|
+
isDisabled() {
|
|
318
|
+
const { disabled } = this.getState();
|
|
319
|
+
return disabled;
|
|
320
|
+
}
|
|
321
|
+
isEditable() {
|
|
322
|
+
const editableDragEntryItem = this.retrieveEditableDragEntryItem(), editable = editableDragEntryItem !== null;
|
|
323
|
+
return editable;
|
|
324
|
+
}
|
|
325
|
+
getInterval() {
|
|
326
|
+
const { interval } = this.getState();
|
|
327
|
+
return interval;
|
|
328
|
+
}
|
|
329
|
+
isSingleClick() {
|
|
330
|
+
const { singleClick } = this.getState();
|
|
331
|
+
return singleClick;
|
|
332
|
+
}
|
|
333
|
+
getClickedDragEntryItem() {
|
|
334
|
+
const { clickedDragEntryItem } = this.getState();
|
|
335
|
+
return clickedDragEntryItem;
|
|
336
|
+
}
|
|
337
|
+
setDisabled(disabled) {
|
|
338
|
+
this.updateState({
|
|
339
|
+
disabled
|
|
340
|
+
});
|
|
341
|
+
}
|
|
342
|
+
setInterval(interval) {
|
|
343
|
+
this.updateState({
|
|
344
|
+
interval
|
|
345
|
+
});
|
|
346
|
+
}
|
|
347
|
+
setSingleClick(singleClick) {
|
|
348
|
+
this.updateState({
|
|
349
|
+
singleClick
|
|
350
|
+
});
|
|
351
|
+
}
|
|
352
|
+
setClickedDragEntryItem(clickedDragEntryItem) {
|
|
353
|
+
this.updateState({
|
|
354
|
+
clickedDragEntryItem
|
|
355
|
+
});
|
|
356
|
+
}
|
|
357
|
+
cancelEditableDragEntryItem() {
|
|
358
|
+
const editableDragEntryItem = this.retrieveEditableDragEntryItem(), created = editableDragEntryItem.isCreated();
|
|
359
|
+
editableDragEntryItem.cancel(created);
|
|
360
|
+
}
|
|
361
|
+
setInitialState() {
|
|
362
|
+
const disabled = false, interval = null, singleClick = false, clickedDragEntryItem = null;
|
|
363
|
+
this.setState({
|
|
364
|
+
disabled,
|
|
365
|
+
interval,
|
|
366
|
+
singleClick,
|
|
367
|
+
clickedDragEntryItem
|
|
368
|
+
});
|
|
369
|
+
}
|
|
370
|
+
didMount() {
|
|
371
|
+
const { singleClick = false } = this.properties;
|
|
372
|
+
this.setSingleClick(singleClick);
|
|
373
|
+
this.enableDrop();
|
|
374
|
+
this.onCustomDragOver(this.dragOverCustomHandler);
|
|
375
|
+
this.onCustomDrop(this.dropCustomHandler);
|
|
376
|
+
}
|
|
377
|
+
willUnmount() {
|
|
378
|
+
this.disableDrop();
|
|
379
|
+
this.offCustomDragOver(this.dragOverCustomHandler);
|
|
380
|
+
this.offCustomDrop(this.dropCustomHandler);
|
|
381
|
+
}
|
|
382
|
+
childElements() {
|
|
383
|
+
const explorer = this; ///
|
|
384
|
+
return /*#__PURE__*/ React.createElement(_entries.default, {
|
|
385
|
+
explorer: explorer,
|
|
386
|
+
topmost: true
|
|
387
|
+
});
|
|
388
|
+
}
|
|
389
|
+
parentContext() {
|
|
390
|
+
const context = this.getContext(), collapse = this.collapse.bind(this), getSelectedPath = this.getSelectedPath.bind(this), retrieveFilePaths = this.retrieveFilePaths.bind(this), retrieveDirectoryPaths = this.retrieveDirectoryPaths.bind(this);
|
|
391
|
+
return {
|
|
392
|
+
...context,
|
|
393
|
+
collapse,
|
|
394
|
+
getSelectedPath,
|
|
395
|
+
retrieveFilePaths,
|
|
396
|
+
retrieveDirectoryPaths
|
|
397
|
+
};
|
|
398
|
+
}
|
|
399
|
+
initialise() {
|
|
400
|
+
this.assignContext();
|
|
401
|
+
this.setInitialState();
|
|
402
|
+
}
|
|
403
|
+
static EntriesList = _entries.default;
|
|
404
|
+
static FileNameDragEntryItem = _fileName.default;
|
|
405
|
+
static FileNameMarkerEntryItem = _fileName1.default;
|
|
406
|
+
static DirectoryNameDragEntryItem = _directoryName.default;
|
|
407
|
+
static DirectoryNameMarkerEntryItem = _directoryName1.default;
|
|
408
|
+
static tagName = "div";
|
|
409
|
+
static ignoredProperties = [
|
|
410
|
+
"reference",
|
|
411
|
+
"references",
|
|
412
|
+
"singleClick"
|
|
413
|
+
];
|
|
414
|
+
static defaultProperties = {
|
|
415
|
+
className: "explorer"
|
|
220
416
|
};
|
|
221
|
-
return data;
|
|
222
417
|
}
|
|
223
|
-
var first = _necessary.arrayUtilities.first, concatenatePaths = _necessary.pathUtilities.concatenatePaths, pathWithoutBottommostNameFromPath = _necessary.pathUtilities.pathWithoutBottommostNameFromPath;
|
|
224
|
-
var Explorer = /*#__PURE__*/ function(Element) {
|
|
225
|
-
_inherits(Explorer, Element);
|
|
226
|
-
function Explorer() {
|
|
227
|
-
_class_call_check(this, Explorer);
|
|
228
|
-
var _this;
|
|
229
|
-
_this = _call_super(this, Explorer, arguments), _define_property(_this, "dragOverCustomHandler", function(event, element, dragElement) {
|
|
230
|
-
var dragEntryItem = dragElement, markerEntryItem = _this.retrieveMarkerEntryItem(), dragEntryItemName = dragEntryItem.getName();
|
|
231
|
-
var markerEntryItemPath = markerEntryItem.getPath(), markerEntryItemExplorer = markerEntryItem.getExplorer(), previousMarkerEntryItemPath = markerEntryItemPath, previousMarkerEntryItemExplorer = markerEntryItemExplorer; ///
|
|
232
|
-
markerEntryItemPath = dragEntryItemName; ///
|
|
233
|
-
markerEntryItemExplorer = _this; ///
|
|
234
|
-
if (markerEntryItemExplorer !== previousMarkerEntryItemExplorer || markerEntryItemPath !== previousMarkerEntryItemPath) {
|
|
235
|
-
var dragEntryItemType = dragEntryItem.getType();
|
|
236
|
-
previousMarkerEntryItemExplorer.removeMarker();
|
|
237
|
-
markerEntryItemExplorer.addMarker(markerEntryItemPath, dragEntryItemType);
|
|
238
|
-
}
|
|
239
|
-
}), _define_property(_this, "dropCustomHandler", function(event, element, dragElement, aborted, done) {
|
|
240
|
-
var markerEntryItem = _this.retrieveMarkerEntryItem(), markerEntryItemExplorer = markerEntryItem.getExplorer();
|
|
241
|
-
if (aborted) {
|
|
242
|
-
markerEntryItemExplorer.removeMarker();
|
|
243
|
-
done();
|
|
244
|
-
return;
|
|
245
|
-
}
|
|
246
|
-
var dragEntryItem = dragElement; ///
|
|
247
|
-
markerEntryItemExplorer.dropDragEntryItem(event, element, dragEntryItem, done);
|
|
248
|
-
});
|
|
249
|
-
return _this;
|
|
250
|
-
}
|
|
251
|
-
_create_class(Explorer, [
|
|
252
|
-
{
|
|
253
|
-
key: "getExplorer",
|
|
254
|
-
value: function getExplorer() {
|
|
255
|
-
var explorer = this; ///
|
|
256
|
-
return explorer;
|
|
257
|
-
}
|
|
258
|
-
},
|
|
259
|
-
{
|
|
260
|
-
key: "getReference",
|
|
261
|
-
value: function getReference() {
|
|
262
|
-
var _this_properties = this.properties, _this_properties_reference = _this_properties.reference, reference = _this_properties_reference === void 0 ? null : _this_properties_reference;
|
|
263
|
-
return reference;
|
|
264
|
-
}
|
|
265
|
-
},
|
|
266
|
-
{
|
|
267
|
-
key: "getReferences",
|
|
268
|
-
value: function getReferences() {
|
|
269
|
-
var _this_properties = this.properties, _this_properties_references = _this_properties.references, references = _this_properties_references === void 0 ? [] : _this_properties_references;
|
|
270
|
-
return references;
|
|
271
|
-
}
|
|
272
|
-
},
|
|
273
|
-
{
|
|
274
|
-
key: "getEntriesList",
|
|
275
|
-
value: function getEntriesList() {
|
|
276
|
-
var _$EntriesList = this.constructor.EntriesList;
|
|
277
|
-
return _$EntriesList;
|
|
278
|
-
}
|
|
279
|
-
},
|
|
280
|
-
{
|
|
281
|
-
key: "getFileNameDragEntryItem",
|
|
282
|
-
value: function getFileNameDragEntryItem(readOnly) {
|
|
283
|
-
var _$FileNameDragEntryItem = this.constructor.FileNameDragEntryItem;
|
|
284
|
-
return _$FileNameDragEntryItem;
|
|
285
|
-
}
|
|
286
|
-
},
|
|
287
|
-
{
|
|
288
|
-
key: "getFileNameMarkerEntryItem",
|
|
289
|
-
value: function getFileNameMarkerEntryItem() {
|
|
290
|
-
var _$FileNameMarkerEntryItem = this.constructor.FileNameMarkerEntryItem;
|
|
291
|
-
return _$FileNameMarkerEntryItem;
|
|
292
|
-
}
|
|
293
|
-
},
|
|
294
|
-
{
|
|
295
|
-
key: "getDirectoryNameDragEntryItem",
|
|
296
|
-
value: function getDirectoryNameDragEntryItem(readOnly, topmost) {
|
|
297
|
-
var _$DirectoryNameDragEntryItem = this.constructor.DirectoryNameDragEntryItem;
|
|
298
|
-
return _$DirectoryNameDragEntryItem;
|
|
299
|
-
}
|
|
300
|
-
},
|
|
301
|
-
{
|
|
302
|
-
key: "getDirectoryNameMarkerEntryItem",
|
|
303
|
-
value: function getDirectoryNameMarkerEntryItem() {
|
|
304
|
-
var _$DirectoryNameMarkerEntryItem = this.constructor.DirectoryNameMarkerEntryItem;
|
|
305
|
-
return _$DirectoryNameMarkerEntryItem;
|
|
306
|
-
}
|
|
307
|
-
},
|
|
308
|
-
{
|
|
309
|
-
key: "retrievePaths",
|
|
310
|
-
value: function retrievePaths(type) {
|
|
311
|
-
var dragEntryItems = this.retrieveDragEntryItems(), paths = dragEntryItems.reduce(function(paths, dragEntryItem) {
|
|
312
|
-
var dragEntryItemType = dragEntryItem.getType();
|
|
313
|
-
if (dragEntryItemType === type) {
|
|
314
|
-
var dragEntryItemPath = dragEntryItem.getPath(), path = dragEntryItemPath; ///
|
|
315
|
-
paths.push(path);
|
|
316
|
-
}
|
|
317
|
-
return paths;
|
|
318
|
-
}, []);
|
|
319
|
-
return paths;
|
|
320
|
-
}
|
|
321
|
-
},
|
|
322
|
-
{
|
|
323
|
-
key: "retrieveFilePaths",
|
|
324
|
-
value: function retrieveFilePaths() {
|
|
325
|
-
var type = _entryTypes.FILE_NAME_DRAG_ENTRY_TYPE, paths = this.retrievePaths(type), filePaths = paths; ///
|
|
326
|
-
return filePaths;
|
|
327
|
-
}
|
|
328
|
-
},
|
|
329
|
-
{
|
|
330
|
-
key: "retrieveDirectoryPaths",
|
|
331
|
-
value: function retrieveDirectoryPaths() {
|
|
332
|
-
var type = _entryTypes.DIRECTORY_NAME_DRAG_ENTRY_TYPE, paths = this.retrievePaths(type), directoryPaths = paths; ///
|
|
333
|
-
return directoryPaths;
|
|
334
|
-
}
|
|
335
|
-
},
|
|
336
|
-
{
|
|
337
|
-
key: "collapse",
|
|
338
|
-
value: function collapse() {
|
|
339
|
-
var directoryNameDragEntryItems = this.retrieveDirectoryNameDragEntryItems();
|
|
340
|
-
directoryNameDragEntryItems.forEach(function(directoryNameDragEntryItem) {
|
|
341
|
-
directoryNameDragEntryItem.collapse();
|
|
342
|
-
});
|
|
343
|
-
}
|
|
344
|
-
},
|
|
345
|
-
{
|
|
346
|
-
key: "createPath",
|
|
347
|
-
value: function createPath() {
|
|
348
|
-
var path;
|
|
349
|
-
var name = _constants.PERIOD, selectedDragEntryItem = this.retrieveSelectedDragEntryItem();
|
|
350
|
-
if (selectedDragEntryItem === null) {
|
|
351
|
-
path = name; ///
|
|
352
|
-
} else {
|
|
353
|
-
var selectedDragEntryItemDirectoryNameDragEntryItem = selectedDragEntryItem.isDirectoryNameDragEntryItem();
|
|
354
|
-
if (selectedDragEntryItemDirectoryNameDragEntryItem) {
|
|
355
|
-
var directoryNameDragEntryItem = selectedDragEntryItem, directoryNameDragEntryItemPath = directoryNameDragEntryItem.getPath();
|
|
356
|
-
path = concatenatePaths(directoryNameDragEntryItemPath, name);
|
|
357
|
-
selectedDragEntryItem.expand();
|
|
358
|
-
} else {
|
|
359
|
-
var fileNameDragEntryItem = selectedDragEntryItem, fileNameDragEntryItemPath = fileNameDragEntryItem.getPath(), fileNameDragEntryItemPathWithoutBottommostName = pathWithoutBottommostNameFromPath(fileNameDragEntryItemPath);
|
|
360
|
-
path = concatenatePaths(fileNameDragEntryItemPathWithoutBottommostName, name);
|
|
361
|
-
}
|
|
362
|
-
}
|
|
363
|
-
return path;
|
|
364
|
-
}
|
|
365
|
-
},
|
|
366
|
-
{
|
|
367
|
-
key: "createFilePath",
|
|
368
|
-
value: function createFilePath() {
|
|
369
|
-
var path = this.createPath(), filePath = path, fileNameDragEntryItem = this.addFilePath(filePath);
|
|
370
|
-
fileNameDragEntryItem.create();
|
|
371
|
-
}
|
|
372
|
-
},
|
|
373
|
-
{
|
|
374
|
-
key: "createDirectoryPath",
|
|
375
|
-
value: function createDirectoryPath() {
|
|
376
|
-
var path = this.createPath(), readOnly = false, collapsed = false, directoryPath = path, directoryNameDragEntryItem = this.addDirectoryPath(directoryPath, readOnly, collapsed);
|
|
377
|
-
directoryNameDragEntryItem.create();
|
|
378
|
-
}
|
|
379
|
-
},
|
|
380
|
-
{
|
|
381
|
-
key: "renameSelectedPath",
|
|
382
|
-
value: function renameSelectedPath() {
|
|
383
|
-
var selectedDragEntryItem = this.retrieveSelectedDragEntryItem();
|
|
384
|
-
if (selectedDragEntryItem !== null) {
|
|
385
|
-
selectedDragEntryItem.rename();
|
|
386
|
-
}
|
|
387
|
-
}
|
|
388
|
-
},
|
|
389
|
-
{
|
|
390
|
-
key: "getSelectedPath",
|
|
391
|
-
value: function getSelectedPath() {
|
|
392
|
-
var selectedPath = null;
|
|
393
|
-
var selectedDragEntryItem = this.retrieveSelectedDragEntryItem();
|
|
394
|
-
if (selectedDragEntryItem !== null) {
|
|
395
|
-
var selectedDragEntryItemPath = selectedDragEntryItem.getPath();
|
|
396
|
-
selectedPath = selectedDragEntryItemPath; ///
|
|
397
|
-
}
|
|
398
|
-
return selectedPath;
|
|
399
|
-
}
|
|
400
|
-
},
|
|
401
|
-
{
|
|
402
|
-
key: "clickDragEntryItem",
|
|
403
|
-
value: function clickDragEntryItem(event, element, dragEntryItem) {
|
|
404
|
-
var _this = this;
|
|
405
|
-
var singleClick = this.isSingleClick();
|
|
406
|
-
if (singleClick) {
|
|
407
|
-
var selected = dragEntryItem.click(event, element);
|
|
408
|
-
if (selected) {
|
|
409
|
-
dragEntryItem.singleClick(event, element);
|
|
410
|
-
}
|
|
411
|
-
return;
|
|
412
|
-
}
|
|
413
|
-
var clickedDragEntryItem = this.getClickedDragEntryItem();
|
|
414
|
-
if (dragEntryItem !== clickedDragEntryItem) {
|
|
415
|
-
var interval = this.getInterval();
|
|
416
|
-
clearInterval(interval);
|
|
417
|
-
this.clearInterval();
|
|
418
|
-
this.clearClickedDragEntryItem();
|
|
419
|
-
}
|
|
420
|
-
var interval1 = this.getInterval();
|
|
421
|
-
if (interval1 === null) {
|
|
422
|
-
var delay = _constants.DOUBLE_CLICK_DELAY, interval2 = setTimeout(function() {
|
|
423
|
-
_this.clearInterval();
|
|
424
|
-
_this.clearClickedDragEntryItem();
|
|
425
|
-
dragEntryItem.click(event, element);
|
|
426
|
-
}, delay), clickedDragEntryItem1 = dragEntryItem; ///
|
|
427
|
-
this.setInterval(interval2);
|
|
428
|
-
this.setClickedDragEntryItem(clickedDragEntryItem1);
|
|
429
|
-
return;
|
|
430
|
-
}
|
|
431
|
-
clearInterval(interval1);
|
|
432
|
-
this.clearInterval();
|
|
433
|
-
this.clearClickedDragEntryItem();
|
|
434
|
-
dragEntryItem.doubleClick(event, element);
|
|
435
|
-
}
|
|
436
|
-
},
|
|
437
|
-
{
|
|
438
|
-
key: "openFileNameDragEntryItem",
|
|
439
|
-
value: function openFileNameDragEntryItem(event, element, fileNameDragEntryItem) {
|
|
440
|
-
var disabled = this.isDisabled();
|
|
441
|
-
if (disabled) {
|
|
442
|
-
return;
|
|
443
|
-
}
|
|
444
|
-
var fileNameDragEntryItemPath = fileNameDragEntryItem.getPath(), filePath = fileNameDragEntryItemPath, customEventType = _customEventTypes.OPEN_CUSTOM_EVENT_TYPE;
|
|
445
|
-
this.callCustomHandlers(customEventType, event, element, filePath);
|
|
446
|
-
}
|
|
447
|
-
},
|
|
448
|
-
{
|
|
449
|
-
key: "selectOrDeselectDragEntryItem",
|
|
450
|
-
value: function selectOrDeselectDragEntryItem(event, element, dragEntryItem) {
|
|
451
|
-
var disabled = this.isDisabled();
|
|
452
|
-
if (disabled) {
|
|
453
|
-
return;
|
|
454
|
-
}
|
|
455
|
-
var selected = dragEntryItem.isSelected();
|
|
456
|
-
var path = dragEntryItem.getPath();
|
|
457
|
-
if (selected) {
|
|
458
|
-
dragEntryItem.deselect();
|
|
459
|
-
} else {
|
|
460
|
-
this.deselectAllPaths();
|
|
461
|
-
this.selectPath(path);
|
|
462
|
-
}
|
|
463
|
-
selected = !selected; ///
|
|
464
|
-
var readOnly = dragEntryItem.isReadOnly(), customEventType = _customEventTypes.SELECT_CUSTOM_EVENT_TYPE;
|
|
465
|
-
this.callCustomHandlers(customEventType, event, element, path, selected, readOnly);
|
|
466
|
-
return selected;
|
|
467
|
-
}
|
|
468
|
-
},
|
|
469
|
-
{
|
|
470
|
-
key: "createDragEntryItem",
|
|
471
|
-
value: function createDragEntryItem(event, element, dragEntryItem, done) {
|
|
472
|
-
var sourceEntryPath = (0, _pathMap.sourceEntryPathFromEntryItem)(dragEntryItem), targetEntryPath = (0, _pathMap.targetEntryPathFromEntryItem)(dragEntryItem), pathMaps = dragEntryItem.getPathMaps(sourceEntryPath, targetEntryPath), explorer = this; ///
|
|
473
|
-
this.createDragEntryItems(event, element, pathMaps, explorer, done);
|
|
474
|
-
}
|
|
475
|
-
},
|
|
476
|
-
{
|
|
477
|
-
key: "renameDragEntryItem",
|
|
478
|
-
value: function renameDragEntryItem(event, element, dragEntryItem, done) {
|
|
479
|
-
var sourceEntryPath, targetEntryPath;
|
|
480
|
-
sourceEntryPath = (0, _pathMap.sourceEntryPathFromEntryItem)(dragEntryItem);
|
|
481
|
-
targetEntryPath = (0, _pathMap.targetEntryPathFromEntryItem)(dragEntryItem);
|
|
482
|
-
var pathMaps = dragEntryItem.getPathMaps(sourceEntryPath, targetEntryPath), firstPathMap = first(pathMaps), pathMap = firstPathMap; ///
|
|
483
|
-
var ref;
|
|
484
|
-
ref = pathMap, sourceEntryPath = ref.sourceEntryPath, targetEntryPath = ref.targetEntryPath, ref;
|
|
485
|
-
if (sourceEntryPath === targetEntryPath) {
|
|
486
|
-
done();
|
|
487
|
-
return;
|
|
488
|
-
}
|
|
489
|
-
var explorer = this; ///
|
|
490
|
-
this.renameDragEntryItems(event, element, pathMaps, explorer, done);
|
|
491
|
-
}
|
|
492
|
-
},
|
|
493
|
-
{
|
|
494
|
-
key: "dropDragEntryItem",
|
|
495
|
-
value: function dropDragEntryItem(event, element, dragEntryItem, done) {
|
|
496
|
-
var dragEntryItemExplorer = dragEntryItem.getExplorer(), markerEntryItem = this.retrieveMarkerEntryItem(), sourceEntryPath = (0, _pathMap.sourceEntryPathFromEntryItem)(dragEntryItem), targetEntryPath = (0, _pathMap.targetEntryPathFromEntryItem)(markerEntryItem);
|
|
497
|
-
if (sourceEntryPath === targetEntryPath && dragEntryItemExplorer === this) {
|
|
498
|
-
this.removeMarker();
|
|
499
|
-
done();
|
|
500
|
-
return;
|
|
501
|
-
}
|
|
502
|
-
var pathMaps = dragEntryItem.getPathMaps(sourceEntryPath, targetEntryPath), explorer = dragEntryItemExplorer; ///
|
|
503
|
-
this.moveDragEntryItems(event, element, pathMaps, explorer, done);
|
|
504
|
-
}
|
|
505
|
-
},
|
|
506
|
-
{
|
|
507
|
-
key: "renameDragEntryItems",
|
|
508
|
-
value: function renameDragEntryItems(event, element, pathMaps, explorer, done) {
|
|
509
|
-
var _this = this;
|
|
510
|
-
var customEventType = _customEventTypes.RENAME_CUSTOM_EVENT_TYPE;
|
|
511
|
-
this.callCustomHandlersAsync(customEventType, event, element, pathMaps, function() {
|
|
512
|
-
pathMaps.forEach(function(pathMap) {
|
|
513
|
-
_this.removeDragEntryItem(pathMap, explorer);
|
|
514
|
-
});
|
|
515
|
-
pathMaps.forEach(function(pathMap) {
|
|
516
|
-
_this.addDragEntryItem(pathMap, explorer);
|
|
517
|
-
});
|
|
518
|
-
done();
|
|
519
|
-
});
|
|
520
|
-
}
|
|
521
|
-
},
|
|
522
|
-
{
|
|
523
|
-
key: "moveDragEntryItems",
|
|
524
|
-
value: function moveDragEntryItems(event, element, pathMaps, explorer, done) {
|
|
525
|
-
var _this = this;
|
|
526
|
-
var customEventType = _customEventTypes.MOVE_CUSTOM_EVENT_TYPE;
|
|
527
|
-
this.callCustomHandlersAsync(customEventType, event, element, pathMaps, function() {
|
|
528
|
-
pathMaps.forEach(function(pathMap) {
|
|
529
|
-
_this.removeDragEntryItem(pathMap, explorer);
|
|
530
|
-
});
|
|
531
|
-
pathMaps.forEach(function(pathMap) {
|
|
532
|
-
_this.addDragEntryItem(pathMap, explorer);
|
|
533
|
-
});
|
|
534
|
-
_this.removeMarker();
|
|
535
|
-
done();
|
|
536
|
-
});
|
|
537
|
-
}
|
|
538
|
-
},
|
|
539
|
-
{
|
|
540
|
-
key: "removeDragEntryItems",
|
|
541
|
-
value: function removeDragEntryItems(event, element, pathMaps, explorer, done) {
|
|
542
|
-
var _this = this;
|
|
543
|
-
var customEventType = _customEventTypes.REMOVE_CUSTOM_EVENT_TYPE;
|
|
544
|
-
this.callCustomHandlersAsync(customEventType, event, element, pathMaps, function() {
|
|
545
|
-
pathMaps.forEach(function(pathMap) {
|
|
546
|
-
_this.removeDragEntryItem(pathMap, explorer);
|
|
547
|
-
});
|
|
548
|
-
pathMaps.forEach(function(pathMap) {
|
|
549
|
-
_this.addDragEntryItem(pathMap, explorer);
|
|
550
|
-
});
|
|
551
|
-
done();
|
|
552
|
-
});
|
|
553
|
-
}
|
|
554
|
-
},
|
|
555
|
-
{
|
|
556
|
-
key: "createDragEntryItems",
|
|
557
|
-
value: function createDragEntryItems(event, element, pathMaps, explorer, done) {
|
|
558
|
-
var _this = this;
|
|
559
|
-
var customEventType = _customEventTypes.CREATE_CUSTOM_EVENT_TYPE;
|
|
560
|
-
this.callCustomHandlersAsync(customEventType, event, element, pathMaps, function() {
|
|
561
|
-
pathMaps.forEach(function(pathMap) {
|
|
562
|
-
_this.removeDragEntryItem(pathMap, explorer);
|
|
563
|
-
});
|
|
564
|
-
pathMaps.forEach(function(pathMap) {
|
|
565
|
-
_this.addDragEntryItem(pathMap, explorer);
|
|
566
|
-
});
|
|
567
|
-
done();
|
|
568
|
-
});
|
|
569
|
-
}
|
|
570
|
-
},
|
|
571
|
-
{
|
|
572
|
-
key: "enable",
|
|
573
|
-
value: function enable() {
|
|
574
|
-
var disabled = false;
|
|
575
|
-
this.setDisabled(disabled);
|
|
576
|
-
this.enableDrag();
|
|
577
|
-
}
|
|
578
|
-
},
|
|
579
|
-
{
|
|
580
|
-
key: "disable",
|
|
581
|
-
value: function disable() {
|
|
582
|
-
var disabled = true;
|
|
583
|
-
this.setDisabled(disabled);
|
|
584
|
-
this.disableDrag();
|
|
585
|
-
}
|
|
586
|
-
},
|
|
587
|
-
{
|
|
588
|
-
key: "enableDrag",
|
|
589
|
-
value: function enableDrag() {
|
|
590
|
-
var dragEntryItems = this.retrieveDragEntryItems();
|
|
591
|
-
dragEntryItems.forEach(function(dragEntryItem) {
|
|
592
|
-
dragEntryItem.enableDrag();
|
|
593
|
-
});
|
|
594
|
-
}
|
|
595
|
-
},
|
|
596
|
-
{
|
|
597
|
-
key: "disableDrag",
|
|
598
|
-
value: function disableDrag() {
|
|
599
|
-
var dragEntryItems = this.retrieveDragEntryItems();
|
|
600
|
-
dragEntryItems.forEach(function(dragEntryItem) {
|
|
601
|
-
dragEntryItem.disableDrag();
|
|
602
|
-
});
|
|
603
|
-
}
|
|
604
|
-
},
|
|
605
|
-
{
|
|
606
|
-
key: "clearInterval",
|
|
607
|
-
value: function clearInterval1() {
|
|
608
|
-
var interval = null;
|
|
609
|
-
this.setInterval(interval);
|
|
610
|
-
}
|
|
611
|
-
},
|
|
612
|
-
{
|
|
613
|
-
key: "clearClickedDragEntryItem",
|
|
614
|
-
value: function clearClickedDragEntryItem() {
|
|
615
|
-
var clickedDragEntryItem = null;
|
|
616
|
-
this.setClickedDragEntryItem(clickedDragEntryItem);
|
|
617
|
-
}
|
|
618
|
-
},
|
|
619
|
-
{
|
|
620
|
-
key: "isDisabled",
|
|
621
|
-
value: function isDisabled() {
|
|
622
|
-
var disabled = this.getState().disabled;
|
|
623
|
-
return disabled;
|
|
624
|
-
}
|
|
625
|
-
},
|
|
626
|
-
{
|
|
627
|
-
key: "isEditable",
|
|
628
|
-
value: function isEditable() {
|
|
629
|
-
var editableDragEntryItem = this.retrieveEditableDragEntryItem(), editable = editableDragEntryItem !== null;
|
|
630
|
-
return editable;
|
|
631
|
-
}
|
|
632
|
-
},
|
|
633
|
-
{
|
|
634
|
-
key: "getInterval",
|
|
635
|
-
value: function getInterval() {
|
|
636
|
-
var interval = this.getState().interval;
|
|
637
|
-
return interval;
|
|
638
|
-
}
|
|
639
|
-
},
|
|
640
|
-
{
|
|
641
|
-
key: "isSingleClick",
|
|
642
|
-
value: function isSingleClick() {
|
|
643
|
-
var singleClick = this.getState().singleClick;
|
|
644
|
-
return singleClick;
|
|
645
|
-
}
|
|
646
|
-
},
|
|
647
|
-
{
|
|
648
|
-
key: "getClickedDragEntryItem",
|
|
649
|
-
value: function getClickedDragEntryItem() {
|
|
650
|
-
var clickedDragEntryItem = this.getState().clickedDragEntryItem;
|
|
651
|
-
return clickedDragEntryItem;
|
|
652
|
-
}
|
|
653
|
-
},
|
|
654
|
-
{
|
|
655
|
-
key: "setDisabled",
|
|
656
|
-
value: function setDisabled(disabled) {
|
|
657
|
-
this.updateState({
|
|
658
|
-
disabled: disabled
|
|
659
|
-
});
|
|
660
|
-
}
|
|
661
|
-
},
|
|
662
|
-
{
|
|
663
|
-
key: "setInterval",
|
|
664
|
-
value: function setInterval(interval) {
|
|
665
|
-
this.updateState({
|
|
666
|
-
interval: interval
|
|
667
|
-
});
|
|
668
|
-
}
|
|
669
|
-
},
|
|
670
|
-
{
|
|
671
|
-
key: "setSingleClick",
|
|
672
|
-
value: function setSingleClick(singleClick) {
|
|
673
|
-
this.updateState({
|
|
674
|
-
singleClick: singleClick
|
|
675
|
-
});
|
|
676
|
-
}
|
|
677
|
-
},
|
|
678
|
-
{
|
|
679
|
-
key: "setClickedDragEntryItem",
|
|
680
|
-
value: function setClickedDragEntryItem(clickedDragEntryItem) {
|
|
681
|
-
this.updateState({
|
|
682
|
-
clickedDragEntryItem: clickedDragEntryItem
|
|
683
|
-
});
|
|
684
|
-
}
|
|
685
|
-
},
|
|
686
|
-
{
|
|
687
|
-
key: "cancelEditableDragEntryItem",
|
|
688
|
-
value: function cancelEditableDragEntryItem() {
|
|
689
|
-
var editableDragEntryItem = this.retrieveEditableDragEntryItem(), created = editableDragEntryItem.isCreated();
|
|
690
|
-
editableDragEntryItem.cancel(created);
|
|
691
|
-
}
|
|
692
|
-
},
|
|
693
|
-
{
|
|
694
|
-
key: "setInitialState",
|
|
695
|
-
value: function setInitialState() {
|
|
696
|
-
var disabled = false, interval = null, singleClick = false, clickedDragEntryItem = null;
|
|
697
|
-
this.setState({
|
|
698
|
-
disabled: disabled,
|
|
699
|
-
interval: interval,
|
|
700
|
-
singleClick: singleClick,
|
|
701
|
-
clickedDragEntryItem: clickedDragEntryItem
|
|
702
|
-
});
|
|
703
|
-
}
|
|
704
|
-
},
|
|
705
|
-
{
|
|
706
|
-
key: "didMount",
|
|
707
|
-
value: function didMount() {
|
|
708
|
-
var _this_properties = this.properties, _this_properties_singleClick = _this_properties.singleClick, singleClick = _this_properties_singleClick === void 0 ? false : _this_properties_singleClick;
|
|
709
|
-
this.setSingleClick(singleClick);
|
|
710
|
-
this.enableDrop();
|
|
711
|
-
this.onCustomDragOver(this.dragOverCustomHandler);
|
|
712
|
-
this.onCustomDrop(this.dropCustomHandler);
|
|
713
|
-
}
|
|
714
|
-
},
|
|
715
|
-
{
|
|
716
|
-
key: "willUnmount",
|
|
717
|
-
value: function willUnmount() {
|
|
718
|
-
this.disableDrop();
|
|
719
|
-
this.offCustomDragOver(this.dragOverCustomHandler);
|
|
720
|
-
this.offCustomDrop(this.dropCustomHandler);
|
|
721
|
-
}
|
|
722
|
-
},
|
|
723
|
-
{
|
|
724
|
-
key: "childElements",
|
|
725
|
-
value: function childElements() {
|
|
726
|
-
var explorer = this; ///
|
|
727
|
-
return /*#__PURE__*/ React.createElement(_entries.default, {
|
|
728
|
-
explorer: explorer,
|
|
729
|
-
topmost: true
|
|
730
|
-
});
|
|
731
|
-
}
|
|
732
|
-
},
|
|
733
|
-
{
|
|
734
|
-
key: "parentContext",
|
|
735
|
-
value: function parentContext() {
|
|
736
|
-
var context = this.getContext(), collapse = this.collapse.bind(this), getSelectedPath = this.getSelectedPath.bind(this), retrieveFilePaths = this.retrieveFilePaths.bind(this), retrieveDirectoryPaths = this.retrieveDirectoryPaths.bind(this);
|
|
737
|
-
return _object_spread_props(_object_spread({}, context), {
|
|
738
|
-
collapse: collapse,
|
|
739
|
-
getSelectedPath: getSelectedPath,
|
|
740
|
-
retrieveFilePaths: retrieveFilePaths,
|
|
741
|
-
retrieveDirectoryPaths: retrieveDirectoryPaths
|
|
742
|
-
});
|
|
743
|
-
}
|
|
744
|
-
},
|
|
745
|
-
{
|
|
746
|
-
key: "initialise",
|
|
747
|
-
value: function initialise() {
|
|
748
|
-
this.assignContext();
|
|
749
|
-
this.setInitialState();
|
|
750
|
-
}
|
|
751
|
-
}
|
|
752
|
-
]);
|
|
753
|
-
return Explorer;
|
|
754
|
-
}(_wrap_native_super(_easy.Element));
|
|
755
|
-
_define_property(Explorer, "EntriesList", _entries.default);
|
|
756
|
-
_define_property(Explorer, "FileNameDragEntryItem", _fileName.default);
|
|
757
|
-
_define_property(Explorer, "FileNameMarkerEntryItem", _fileName1.default);
|
|
758
|
-
_define_property(Explorer, "DirectoryNameDragEntryItem", _directoryName.default);
|
|
759
|
-
_define_property(Explorer, "DirectoryNameMarkerEntryItem", _directoryName1.default);
|
|
760
|
-
_define_property(Explorer, "tagName", "div");
|
|
761
|
-
_define_property(Explorer, "ignoredProperties", [
|
|
762
|
-
"reference",
|
|
763
|
-
"references",
|
|
764
|
-
"singleClick"
|
|
765
|
-
]);
|
|
766
|
-
_define_property(Explorer, "defaultProperties", {
|
|
767
|
-
className: "explorer"
|
|
768
|
-
});
|
|
769
418
|
Object.assign(Explorer.prototype, _easydraganddrop.dropMixins);
|
|
770
419
|
Object.assign(Explorer.prototype, _explorer.default);
|
|
771
420
|
Object.assign(Explorer.prototype, _dragEntryItem.default);
|
|
772
|
-
|
|
421
|
+
const _default = (0, _easywithstyle.default)(Explorer)`
|
|
422
|
+
|
|
423
|
+
padding: ${_styles.explorerPadding};
|
|
424
|
+
|
|
425
|
+
`;
|
|
773
426
|
|
|
774
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9leHBsb3Jlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7ICAvLy9cblxuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gXCJlYXN5XCI7XG5pbXBvcnQgeyBkcm9wTWl4aW5zIH0gZnJvbSBcImVhc3ktZHJhZy1hbmQtZHJvcFwiO1xuaW1wb3J0IHsgcGF0aFV0aWxpdGllcywgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBFbnRyaWVzTGlzdCBmcm9tIFwiLi9saXN0L2VudHJpZXNcIjtcbmltcG9ydCBleHBsb3Jlck1peGlucyBmcm9tIFwiLi9taXhpbnMvZXhwbG9yZXJcIjtcbmltcG9ydCBkcmFnRW50cnlJdGVtTWl4aW5zIGZyb20gXCIuL21peGlucy9kcmFnRW50cnlJdGVtXCI7XG5pbXBvcnQgRmlsZU5hbWVEcmFnRW50cnlJdGVtIGZyb20gXCIuL2l0ZW0vZW50cnkvZHJhZy9maWxlTmFtZVwiO1xuaW1wb3J0IEZpbGVOYW1lTWFya2VyRW50cnlJdGVtIGZyb20gXCIuL2l0ZW0vZW50cnkvbWFya2VyL2ZpbGVOYW1lXCI7XG5pbXBvcnQgRGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW0gZnJvbSBcIi4vaXRlbS9lbnRyeS9kcmFnL2RpcmVjdG9yeU5hbWVcIjtcbmltcG9ydCBEaXJlY3RvcnlOYW1lTWFya2VyRW50cnlJdGVtIGZyb20gXCIuL2l0ZW0vZW50cnkvbWFya2VyL2RpcmVjdG9yeU5hbWVcIjtcblxuaW1wb3J0IHsgZXhwbG9yZXJQYWRkaW5nIH0gZnJvbSBcIi4vc3R5bGVzXCI7XG5pbXBvcnQgeyBQRVJJT0QsIERPVUJMRV9DTElDS19ERUxBWSB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgRklMRV9OQU1FX0RSQUdfRU5UUllfVFlQRSwgRElSRUNUT1JZX05BTUVfRFJBR19FTlRSWV9UWVBFIH0gZnJvbSBcIi4vZW50cnlUeXBlc1wiO1xuaW1wb3J0IHsgc291cmNlRW50cnlQYXRoRnJvbUVudHJ5SXRlbSwgdGFyZ2V0RW50cnlQYXRoRnJvbUVudHJ5SXRlbSB9IGZyb20gXCIuL3V0aWxpdGllcy9wYXRoTWFwXCI7XG5pbXBvcnQgeyBNT1ZFX0NVU1RPTV9FVkVOVF9UWVBFLFxuICAgICAgICAgT1BFTl9DVVNUT01fRVZFTlRfVFlQRSxcbiAgICAgICAgIFJFTU9WRV9DVVNUT01fRVZFTlRfVFlQRSxcbiAgICAgICAgIFJFTkFNRV9DVVNUT01fRVZFTlRfVFlQRSxcbiAgICAgICAgIFNFTEVDVF9DVVNUT01fRVZFTlRfVFlQRSxcbiAgICAgICAgIENSRUFURV9DVVNUT01fRVZFTlRfVFlQRSB9IGZyb20gXCIuL2N1c3RvbUV2ZW50VHlwZXNcIjtcblxuY29uc3QgeyBmaXJzdCB9ID0gYXJyYXlVdGlsaXRpZXMsXG4gICAgICB7IGNvbmNhdGVuYXRlUGF0aHMsIHBhdGhXaXRob3V0Qm90dG9tbW9zdE5hbWVGcm9tUGF0aCB9ID0gcGF0aFV0aWxpdGllcztcblxuY2xhc3MgRXhwbG9yZXIgZXh0ZW5kcyBFbGVtZW50IHtcbiAgZHJhZ092ZXJDdXN0b21IYW5kbGVyID0gKGV2ZW50LCBlbGVtZW50LCBkcmFnRWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IGRyYWdFbnRyeUl0ZW0gPSBkcmFnRWxlbWVudCwgIC8vL1xuICAgICAgICAgIG1hcmtlckVudHJ5SXRlbSA9IHRoaXMucmV0cmlldmVNYXJrZXJFbnRyeUl0ZW0oKSxcbiAgICAgICAgICBkcmFnRW50cnlJdGVtTmFtZSA9IGRyYWdFbnRyeUl0ZW0uZ2V0TmFtZSgpO1xuXG4gICAgbGV0IG1hcmtlckVudHJ5SXRlbVBhdGggPSBtYXJrZXJFbnRyeUl0ZW0uZ2V0UGF0aCgpLFxuICAgICAgICBtYXJrZXJFbnRyeUl0ZW1FeHBsb3JlciA9IG1hcmtlckVudHJ5SXRlbS5nZXRFeHBsb3JlcigpLFxuICAgICAgICBwcmV2aW91c01hcmtlckVudHJ5SXRlbVBhdGggPSBtYXJrZXJFbnRyeUl0ZW1QYXRoLCAvLy9cbiAgICAgICAgcHJldmlvdXNNYXJrZXJFbnRyeUl0ZW1FeHBsb3JlciA9IG1hcmtlckVudHJ5SXRlbUV4cGxvcmVyOyAvLy9cblxuICAgIG1hcmtlckVudHJ5SXRlbVBhdGggPSBkcmFnRW50cnlJdGVtTmFtZTsvLy9cblxuICAgIG1hcmtlckVudHJ5SXRlbUV4cGxvcmVyID0gdGhpczsgIC8vL1xuXG4gICAgaWYgKChtYXJrZXJFbnRyeUl0ZW1FeHBsb3JlciAhPT0gcHJldmlvdXNNYXJrZXJFbnRyeUl0ZW1FeHBsb3JlcikgfHwgKG1hcmtlckVudHJ5SXRlbVBhdGggIT09IHByZXZpb3VzTWFya2VyRW50cnlJdGVtUGF0aCkpIHtcbiAgICAgIGNvbnN0IGRyYWdFbnRyeUl0ZW1UeXBlID0gZHJhZ0VudHJ5SXRlbS5nZXRUeXBlKCk7XG5cbiAgICAgIHByZXZpb3VzTWFya2VyRW50cnlJdGVtRXhwbG9yZXIucmVtb3ZlTWFya2VyKCk7XG5cbiAgICAgIG1hcmtlckVudHJ5SXRlbUV4cGxvcmVyLmFkZE1hcmtlcihtYXJrZXJFbnRyeUl0ZW1QYXRoLCBkcmFnRW50cnlJdGVtVHlwZSk7XG4gICAgfVxuICB9XG5cbiAgZHJvcEN1c3RvbUhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQsIGRyYWdFbGVtZW50LCBhYm9ydGVkLCBkb25lKSA9PiB7XG4gICAgY29uc3QgbWFya2VyRW50cnlJdGVtID0gdGhpcy5yZXRyaWV2ZU1hcmtlckVudHJ5SXRlbSgpLFxuICAgICAgICAgIG1hcmtlckVudHJ5SXRlbUV4cGxvcmVyID0gbWFya2VyRW50cnlJdGVtLmdldEV4cGxvcmVyKCk7XG5cbiAgICBpZiAoYWJvcnRlZCkge1xuICAgICAgbWFya2VyRW50cnlJdGVtRXhwbG9yZXIucmVtb3ZlTWFya2VyKCk7XG5cbiAgICAgIGRvbmUoKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGRyYWdFbnRyeUl0ZW0gPSBkcmFnRWxlbWVudDsgIC8vL1xuXG4gICAgbWFya2VyRW50cnlJdGVtRXhwbG9yZXIuZHJvcERyYWdFbnRyeUl0ZW0oZXZlbnQsIGVsZW1lbnQsIGRyYWdFbnRyeUl0ZW0sIGRvbmUpO1xuICB9XG5cbiAgZ2V0RXhwbG9yZXIoKSB7XG4gICAgY29uc3QgZXhwbG9yZXIgPSB0aGlzOyAgLy8vXG5cbiAgICByZXR1cm4gZXhwbG9yZXI7XG4gIH1cblxuICBnZXRSZWZlcmVuY2UoKSB7XG4gICAgY29uc3QgeyByZWZlcmVuY2UgPSBudWxsIH0gPSB0aGlzLnByb3BlcnRpZXM7XG5cbiAgICByZXR1cm4gcmVmZXJlbmNlO1xuICB9XG5cbiAgZ2V0UmVmZXJlbmNlcygpIHtcbiAgICBjb25zdCB7IHJlZmVyZW5jZXMgPSBbXSB9ID0gdGhpcy5wcm9wZXJ0aWVzO1xuXG4gICAgcmV0dXJuIHJlZmVyZW5jZXM7XG4gIH1cblxuICBnZXRFbnRyaWVzTGlzdCgpIHtcbiAgXHRjb25zdCB7IEVudHJpZXNMaXN0IH0gPSB0aGlzLmNvbnN0cnVjdG9yO1xuXG4gIFx0cmV0dXJuIEVudHJpZXNMaXN0O1xuXHR9XG5cbiAgZ2V0RmlsZU5hbWVEcmFnRW50cnlJdGVtKHJlYWRPbmx5KSB7XG5cdFx0Y29uc3QgeyBGaWxlTmFtZURyYWdFbnRyeUl0ZW0gfSA9IHRoaXMuY29uc3RydWN0b3I7XG5cblx0XHRyZXR1cm4gRmlsZU5hbWVEcmFnRW50cnlJdGVtO1xuXHR9XG5cbiAgZ2V0RmlsZU5hbWVNYXJrZXJFbnRyeUl0ZW0oKSB7XG4gICAgY29uc3QgeyBGaWxlTmFtZU1hcmtlckVudHJ5SXRlbSB9ID0gdGhpcy5jb25zdHJ1Y3RvcjtcblxuICAgIHJldHVybiBGaWxlTmFtZU1hcmtlckVudHJ5SXRlbTtcbiAgfVxuXG4gIGdldERpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtKHJlYWRPbmx5LCB0b3Btb3N0KSB7XG5cdFx0Y29uc3QgeyBEaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbSB9ID0gdGhpcy5jb25zdHJ1Y3RvcjtcblxuXHRcdHJldHVybiBEaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbTtcblx0fVxuXG4gIGdldERpcmVjdG9yeU5hbWVNYXJrZXJFbnRyeUl0ZW0oKSB7XG4gICAgY29uc3QgeyBEaXJlY3RvcnlOYW1lTWFya2VyRW50cnlJdGVtIH0gPSB0aGlzLmNvbnN0cnVjdG9yO1xuXG4gICAgcmV0dXJuIERpcmVjdG9yeU5hbWVNYXJrZXJFbnRyeUl0ZW07XG4gIH1cblxuICByZXRyaWV2ZVBhdGhzKHR5cGUpIHtcbiAgICBjb25zdCBkcmFnRW50cnlJdGVtcyA9IHRoaXMucmV0cmlldmVEcmFnRW50cnlJdGVtcygpLFxuICAgICAgICAgIHBhdGhzID0gZHJhZ0VudHJ5SXRlbXMucmVkdWNlKChwYXRocywgZHJhZ0VudHJ5SXRlbSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZHJhZ0VudHJ5SXRlbVR5cGUgPSBkcmFnRW50cnlJdGVtLmdldFR5cGUoKTtcblxuICAgICAgICAgICAgaWYgKGRyYWdFbnRyeUl0ZW1UeXBlID09PSB0eXBlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGRyYWdFbnRyeUl0ZW1QYXRoID0gZHJhZ0VudHJ5SXRlbS5nZXRQYXRoKCksXG4gICAgICAgICAgICAgICAgICAgIHBhdGggPSBkcmFnRW50cnlJdGVtUGF0aDsgLy8vXG5cbiAgICAgICAgICAgICAgcGF0aHMucHVzaChwYXRoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHBhdGhzO1xuICAgICAgICAgIH0sIFtdKTtcblxuICAgIHJldHVybiBwYXRocztcbiAgfVxuXG4gIHJldHJpZXZlRmlsZVBhdGhzKCkge1xuICAgIGNvbnN0IHR5cGUgPSBGSUxFX05BTUVfRFJBR19FTlRSWV9UWVBFLFxuICAgICAgICAgIHBhdGhzID0gdGhpcy5yZXRyaWV2ZVBhdGhzKHR5cGUpLFxuICAgICAgICAgIGZpbGVQYXRocyA9IHBhdGhzOyAvLy9cblxuICAgIHJldHVybiBmaWxlUGF0aHM7XG4gIH1cblxuICByZXRyaWV2ZURpcmVjdG9yeVBhdGhzKCkge1xuICAgIGNvbnN0IHR5cGUgPSBESVJFQ1RPUllfTkFNRV9EUkFHX0VOVFJZX1RZUEUsXG4gICAgICAgICAgcGF0aHMgPSB0aGlzLnJldHJpZXZlUGF0aHModHlwZSksXG4gICAgICAgICAgZGlyZWN0b3J5UGF0aHMgPSBwYXRoczsgLy8vXG5cbiAgICByZXR1cm4gZGlyZWN0b3J5UGF0aHM7XG4gIH1cblxuICBjb2xsYXBzZSgpIHtcbiAgICBjb25zdCBkaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbXMgPSB0aGlzLnJldHJpZXZlRGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW1zKCk7XG5cbiAgICBkaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbXMuZm9yRWFjaCgoZGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW0pID0+IHtcbiAgICAgIGRpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtLmNvbGxhcHNlKCk7XG4gICAgfSk7XG4gIH1cblxuICBjcmVhdGVQYXRoKCkge1xuICAgIGxldCBwYXRoO1xuXG4gICAgY29uc3QgbmFtZSA9IFBFUklPRCwgIC8vL1xuICAgICAgICAgIHNlbGVjdGVkRHJhZ0VudHJ5SXRlbSA9IHRoaXMucmV0cmlldmVTZWxlY3RlZERyYWdFbnRyeUl0ZW0oKTtcblxuICAgIGlmIChzZWxlY3RlZERyYWdFbnRyeUl0ZW0gPT09IG51bGwpIHtcbiAgICAgIHBhdGggPSBuYW1lOyAgLy8vXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkRHJhZ0VudHJ5SXRlbURpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtID0gc2VsZWN0ZWREcmFnRW50cnlJdGVtLmlzRGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW0oKTtcblxuICAgICAgaWYgKHNlbGVjdGVkRHJhZ0VudHJ5SXRlbURpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtKSB7XG4gICAgICAgIGNvbnN0IGRpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtID0gc2VsZWN0ZWREcmFnRW50cnlJdGVtLCAvLy9cbiAgICAgICAgICAgICAgZGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW1QYXRoID0gZGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW0uZ2V0UGF0aCgpO1xuXG4gICAgICAgIHBhdGggPSBjb25jYXRlbmF0ZVBhdGhzKGRpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtUGF0aCwgbmFtZSk7XG5cbiAgICAgICAgc2VsZWN0ZWREcmFnRW50cnlJdGVtLmV4cGFuZCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZmlsZU5hbWVEcmFnRW50cnlJdGVtID0gc2VsZWN0ZWREcmFnRW50cnlJdGVtLCAgLy8vXG4gICAgICAgICAgICAgIGZpbGVOYW1lRHJhZ0VudHJ5SXRlbVBhdGggPSBmaWxlTmFtZURyYWdFbnRyeUl0ZW0uZ2V0UGF0aCgpLFxuICAgICAgICAgICAgICBmaWxlTmFtZURyYWdFbnRyeUl0ZW1QYXRoV2l0aG91dEJvdHRvbW1vc3ROYW1lID0gcGF0aFdpdGhvdXRCb3R0b21tb3N0TmFtZUZyb21QYXRoKGZpbGVOYW1lRHJhZ0VudHJ5SXRlbVBhdGgpO1xuXG4gICAgICAgIHBhdGggPSBjb25jYXRlbmF0ZVBhdGhzKGZpbGVOYW1lRHJhZ0VudHJ5SXRlbVBhdGhXaXRob3V0Qm90dG9tbW9zdE5hbWUsIG5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwYXRoO1xuICB9XG5cbiAgY3JlYXRlRmlsZVBhdGgoKSB7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMuY3JlYXRlUGF0aCgpLFxuICAgICAgICAgIGZpbGVQYXRoID0gcGF0aCwgIC8vL1xuICAgICAgICAgIGZpbGVOYW1lRHJhZ0VudHJ5SXRlbSA9IHRoaXMuYWRkRmlsZVBhdGgoZmlsZVBhdGgpO1xuXG4gICAgZmlsZU5hbWVEcmFnRW50cnlJdGVtLmNyZWF0ZSgpO1xuICB9XG5cbiAgY3JlYXRlRGlyZWN0b3J5UGF0aCgpIHtcbiAgICBjb25zdCBwYXRoID0gdGhpcy5jcmVhdGVQYXRoKCksXG4gICAgICAgICAgcmVhZE9ubHkgPSBmYWxzZSxcbiAgICAgICAgICBjb2xsYXBzZWQgPSBmYWxzZSxcbiAgICAgICAgICBkaXJlY3RvcnlQYXRoID0gcGF0aCwgIC8vL1xuICAgICAgICAgIGRpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtID0gdGhpcy5hZGREaXJlY3RvcnlQYXRoKGRpcmVjdG9yeVBhdGgsIHJlYWRPbmx5LCBjb2xsYXBzZWQpO1xuXG4gICAgZGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW0uY3JlYXRlKCk7XG4gIH1cblxuICByZW5hbWVTZWxlY3RlZFBhdGgoKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWREcmFnRW50cnlJdGVtID0gdGhpcy5yZXRyaWV2ZVNlbGVjdGVkRHJhZ0VudHJ5SXRlbSgpO1xuXG4gICAgaWYgKHNlbGVjdGVkRHJhZ0VudHJ5SXRlbSAhPT0gbnVsbCkge1xuICAgICAgc2VsZWN0ZWREcmFnRW50cnlJdGVtLnJlbmFtZSgpO1xuICAgIH1cbiAgfVxuXG4gIGdldFNlbGVjdGVkUGF0aCgpIHtcbiAgICBsZXQgc2VsZWN0ZWRQYXRoID0gbnVsbDtcblxuICAgIGNvbnN0IHNlbGVjdGVkRHJhZ0VudHJ5SXRlbSA9IHRoaXMucmV0cmlldmVTZWxlY3RlZERyYWdFbnRyeUl0ZW0oKTtcblxuICAgIGlmIChzZWxlY3RlZERyYWdFbnRyeUl0ZW0gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkRHJhZ0VudHJ5SXRlbVBhdGggPSBzZWxlY3RlZERyYWdFbnRyeUl0ZW0uZ2V0UGF0aCgpO1xuXG4gICAgICBzZWxlY3RlZFBhdGggPSBzZWxlY3RlZERyYWdFbnRyeUl0ZW1QYXRoOyAvLy9cbiAgICB9XG5cbiAgICByZXR1cm4gc2VsZWN0ZWRQYXRoO1xuICB9XG5cbiAgY2xpY2tEcmFnRW50cnlJdGVtKGV2ZW50LCBlbGVtZW50LCBkcmFnRW50cnlJdGVtKSB7XG4gICAgY29uc3Qgc2luZ2xlQ2xpY2sgPSB0aGlzLmlzU2luZ2xlQ2xpY2soKTtcblxuICAgIGlmIChzaW5nbGVDbGljaykge1xuICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBkcmFnRW50cnlJdGVtLmNsaWNrKGV2ZW50LCBlbGVtZW50KTtcblxuICAgICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICAgIGRyYWdFbnRyeUl0ZW0uc2luZ2xlQ2xpY2soZXZlbnQsIGVsZW1lbnQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY2xpY2tlZERyYWdFbnRyeUl0ZW0gPSB0aGlzLmdldENsaWNrZWREcmFnRW50cnlJdGVtKCk7XG5cbiAgICBpZiAoZHJhZ0VudHJ5SXRlbSAhPT0gY2xpY2tlZERyYWdFbnRyeUl0ZW0pIHtcbiAgICAgIGNvbnN0IGludGVydmFsID0gdGhpcy5nZXRJbnRlcnZhbCgpO1xuXG4gICAgICBjbGVhckludGVydmFsKGludGVydmFsKTtcblxuICAgICAgdGhpcy5jbGVhckludGVydmFsKCk7XG5cbiAgICAgIHRoaXMuY2xlYXJDbGlja2VkRHJhZ0VudHJ5SXRlbSgpO1xuICAgIH1cblxuICAgIGNvbnN0IGludGVydmFsID0gdGhpcy5nZXRJbnRlcnZhbCgpO1xuXG4gICAgaWYgKGludGVydmFsID09PSBudWxsKSB7XG4gICAgICBjb25zdCBkZWxheSA9IERPVUJMRV9DTElDS19ERUxBWSxcbiAgICAgICAgICAgIGludGVydmFsID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuY2xlYXJJbnRlcnZhbCgpO1xuXG4gICAgICAgICAgICAgIHRoaXMuY2xlYXJDbGlja2VkRHJhZ0VudHJ5SXRlbSgpO1xuXG4gICAgICAgICAgICAgIGRyYWdFbnRyeUl0ZW0uY2xpY2soZXZlbnQsIGVsZW1lbnQpO1xuICAgICAgICAgICAgfSwgZGVsYXkpLFxuICAgICAgICAgICAgY2xpY2tlZERyYWdFbnRyeUl0ZW0gPSBkcmFnRW50cnlJdGVtOyAvLy9cblxuICAgICAgdGhpcy5zZXRJbnRlcnZhbChpbnRlcnZhbCk7XG5cbiAgICAgIHRoaXMuc2V0Q2xpY2tlZERyYWdFbnRyeUl0ZW0oY2xpY2tlZERyYWdFbnRyeUl0ZW0pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7XG5cbiAgICB0aGlzLmNsZWFySW50ZXJ2YWwoKTtcblxuICAgIHRoaXMuY2xlYXJDbGlja2VkRHJhZ0VudHJ5SXRlbSgpO1xuXG4gICAgZHJhZ0VudHJ5SXRlbS5kb3VibGVDbGljayhldmVudCwgZWxlbWVudCk7XG4gIH1cblxuICBvcGVuRmlsZU5hbWVEcmFnRW50cnlJdGVtKGV2ZW50LCBlbGVtZW50LCBmaWxlTmFtZURyYWdFbnRyeUl0ZW0pIHtcbiAgICBjb25zdCBkaXNhYmxlZCA9IHRoaXMuaXNEaXNhYmxlZCgpO1xuXG4gICAgaWYgKGRpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZmlsZU5hbWVEcmFnRW50cnlJdGVtUGF0aCA9IGZpbGVOYW1lRHJhZ0VudHJ5SXRlbS5nZXRQYXRoKCksXG4gICAgICAgICAgZmlsZVBhdGggPSBmaWxlTmFtZURyYWdFbnRyeUl0ZW1QYXRoLCAvLy9cbiAgICAgICAgICBjdXN0b21FdmVudFR5cGUgPSBPUEVOX0NVU1RPTV9FVkVOVF9UWVBFO1xuXG4gICAgdGhpcy5jYWxsQ3VzdG9tSGFuZGxlcnMoY3VzdG9tRXZlbnRUeXBlLCBldmVudCwgZWxlbWVudCwgZmlsZVBhdGgpO1xuICB9XG5cbiAgc2VsZWN0T3JEZXNlbGVjdERyYWdFbnRyeUl0ZW0oZXZlbnQsIGVsZW1lbnQsIGRyYWdFbnRyeUl0ZW0pIHtcbiAgICBjb25zdCBkaXNhYmxlZCA9IHRoaXMuaXNEaXNhYmxlZCgpO1xuXG4gICAgaWYgKGRpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHNlbGVjdGVkID0gZHJhZ0VudHJ5SXRlbS5pc1NlbGVjdGVkKCk7XG5cbiAgICBjb25zdCBwYXRoID0gZHJhZ0VudHJ5SXRlbS5nZXRQYXRoKCk7XG5cbiAgICBpZiAoc2VsZWN0ZWQpIHtcbiAgICAgIGRyYWdFbnRyeUl0ZW0uZGVzZWxlY3QoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kZXNlbGVjdEFsbFBhdGhzKCk7XG5cbiAgICAgIHRoaXMuc2VsZWN0UGF0aChwYXRoKTtcbiAgICB9XG5cbiAgICBzZWxlY3RlZCA9ICFzZWxlY3RlZDsgLy8vXG5cbiAgICBjb25zdCByZWFkT25seSA9IGRyYWdFbnRyeUl0ZW0uaXNSZWFkT25seSgpLFxuICAgICAgICAgIGN1c3RvbUV2ZW50VHlwZSA9IFNFTEVDVF9DVVNUT01fRVZFTlRfVFlQRTtcblxuICAgIHRoaXMuY2FsbEN1c3RvbUhhbmRsZXJzKGN1c3RvbUV2ZW50VHlwZSwgZXZlbnQsIGVsZW1lbnQsIHBhdGgsIHNlbGVjdGVkLCByZWFkT25seSk7XG5cbiAgICByZXR1cm4gc2VsZWN0ZWQ7XG4gIH1cblxuICBjcmVhdGVEcmFnRW50cnlJdGVtKGV2ZW50LCBlbGVtZW50LCBkcmFnRW50cnlJdGVtLCBkb25lKSB7XG4gICAgY29uc3Qgc291cmNlRW50cnlQYXRoID0gc291cmNlRW50cnlQYXRoRnJvbUVudHJ5SXRlbShkcmFnRW50cnlJdGVtKSxcbiAgICAgICAgICB0YXJnZXRFbnRyeVBhdGggPSB0YXJnZXRFbnRyeVBhdGhGcm9tRW50cnlJdGVtKGRyYWdFbnRyeUl0ZW0pLFxuICAgICAgICAgIHBhdGhNYXBzID0gZHJhZ0VudHJ5SXRlbS5nZXRQYXRoTWFwcyhzb3VyY2VFbnRyeVBhdGgsIHRhcmdldEVudHJ5UGF0aCksXG4gICAgICAgICAgZXhwbG9yZXIgPSB0aGlzOyAgLy8vXG5cbiAgICB0aGlzLmNyZWF0ZURyYWdFbnRyeUl0ZW1zKGV2ZW50LCBlbGVtZW50LCBwYXRoTWFwcywgZXhwbG9yZXIsIGRvbmUpO1xuICB9XG5cbiAgcmVuYW1lRHJhZ0VudHJ5SXRlbShldmVudCwgZWxlbWVudCwgZHJhZ0VudHJ5SXRlbSwgZG9uZSkge1xuICAgIGxldCBzb3VyY2VFbnRyeVBhdGgsXG4gICAgICAgIHRhcmdldEVudHJ5UGF0aDtcblxuICAgIHNvdXJjZUVudHJ5UGF0aCA9IHNvdXJjZUVudHJ5UGF0aEZyb21FbnRyeUl0ZW0oZHJhZ0VudHJ5SXRlbSk7XG4gICAgdGFyZ2V0RW50cnlQYXRoID0gdGFyZ2V0RW50cnlQYXRoRnJvbUVudHJ5SXRlbShkcmFnRW50cnlJdGVtKTtcblxuICAgIGNvbnN0IHBhdGhNYXBzID0gZHJhZ0VudHJ5SXRlbS5nZXRQYXRoTWFwcyhzb3VyY2VFbnRyeVBhdGgsIHRhcmdldEVudHJ5UGF0aCksXG4gICAgICAgICAgZmlyc3RQYXRoTWFwID0gZmlyc3QocGF0aE1hcHMpLFxuICAgICAgICAgIHBhdGhNYXAgPSBmaXJzdFBhdGhNYXA7IC8vL1xuXG4gICAgKHsgc291cmNlRW50cnlQYXRoLCB0YXJnZXRFbnRyeVBhdGggfSA9IHBhdGhNYXApO1xuXG4gICAgaWYgKHNvdXJjZUVudHJ5UGF0aCA9PT0gdGFyZ2V0RW50cnlQYXRoKSB7XG4gICAgICBkb25lKCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBleHBsb3JlciA9IHRoaXM7ICAvLy9cblxuICAgIHRoaXMucmVuYW1lRHJhZ0VudHJ5SXRlbXMoZXZlbnQsIGVsZW1lbnQsIHBhdGhNYXBzLCBleHBsb3JlciwgZG9uZSk7XG4gIH1cblxuICBkcm9wRHJhZ0VudHJ5SXRlbShldmVudCwgZWxlbWVudCwgZHJhZ0VudHJ5SXRlbSwgZG9uZSkge1xuICAgIGNvbnN0IGRyYWdFbnRyeUl0ZW1FeHBsb3JlciA9IGRyYWdFbnRyeUl0ZW0uZ2V0RXhwbG9yZXIoKSxcbiAgICAgICAgICBtYXJrZXJFbnRyeUl0ZW0gPSB0aGlzLnJldHJpZXZlTWFya2VyRW50cnlJdGVtKCksXG4gICAgICAgICAgc291cmNlRW50cnlQYXRoID0gc291cmNlRW50cnlQYXRoRnJvbUVudHJ5SXRlbShkcmFnRW50cnlJdGVtKSxcbiAgICAgICAgICB0YXJnZXRFbnRyeVBhdGggPSB0YXJnZXRFbnRyeVBhdGhGcm9tRW50cnlJdGVtKG1hcmtlckVudHJ5SXRlbSk7XG5cbiAgICBpZiAoKHNvdXJjZUVudHJ5UGF0aCA9PT0gdGFyZ2V0RW50cnlQYXRoKSAmJiAoZHJhZ0VudHJ5SXRlbUV4cGxvcmVyID09PSB0aGlzKSkge1xuICAgICAgdGhpcy5yZW1vdmVNYXJrZXIoKTtcblxuICAgICAgZG9uZSgpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGF0aE1hcHMgPSBkcmFnRW50cnlJdGVtLmdldFBhdGhNYXBzKHNvdXJjZUVudHJ5UGF0aCwgdGFyZ2V0RW50cnlQYXRoKSxcbiAgICAgICAgICBleHBsb3JlciA9IGRyYWdFbnRyeUl0ZW1FeHBsb3JlcjsgLy8vXG5cbiAgICB0aGlzLm1vdmVEcmFnRW50cnlJdGVtcyhldmVudCwgZWxlbWVudCwgcGF0aE1hcHMsIGV4cGxvcmVyLCBkb25lKTtcbiAgfVxuXG4gIHJlbmFtZURyYWdFbnRyeUl0ZW1zKGV2ZW50LCBlbGVtZW50LCBwYXRoTWFwcywgZXhwbG9yZXIsIGRvbmUpIHtcbiAgICBjb25zdCBjdXN0b21FdmVudFR5cGUgPSBSRU5BTUVfQ1VTVE9NX0VWRU5UX1RZUEU7XG5cbiAgICB0aGlzLmNhbGxDdXN0b21IYW5kbGVyc0FzeW5jKGN1c3RvbUV2ZW50VHlwZSwgZXZlbnQsIGVsZW1lbnQsIHBhdGhNYXBzLCAoKSA9PiB7XG4gICAgICBwYXRoTWFwcy5mb3JFYWNoKChwYXRoTWFwKSA9PiB7XG4gICAgICAgIHRoaXMucmVtb3ZlRHJhZ0VudHJ5SXRlbShwYXRoTWFwLCBleHBsb3Jlcik7XG4gICAgICB9KTtcblxuICAgICAgcGF0aE1hcHMuZm9yRWFjaCgocGF0aE1hcCkgPT4ge1xuICAgICAgICB0aGlzLmFkZERyYWdFbnRyeUl0ZW0ocGF0aE1hcCwgZXhwbG9yZXIpO1xuICAgICAgfSk7XG5cbiAgICAgIGRvbmUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIG1vdmVEcmFnRW50cnlJdGVtcyhldmVudCwgZWxlbWVudCwgcGF0aE1hcHMsIGV4cGxvcmVyLCBkb25lKSB7XG4gICAgY29uc3QgY3VzdG9tRXZlbnRUeXBlID0gTU9WRV9DVVNUT01fRVZFTlRfVFlQRTtcblxuICAgIHRoaXMuY2FsbEN1c3RvbUhhbmRsZXJzQXN5bmMoY3VzdG9tRXZlbnRUeXBlLCBldmVudCwgZWxlbWVudCwgcGF0aE1hcHMsICgpID0+IHtcbiAgICAgIHBhdGhNYXBzLmZvckVhY2goKHBhdGhNYXApID0+IHtcbiAgICAgICAgdGhpcy5yZW1vdmVEcmFnRW50cnlJdGVtKHBhdGhNYXAsIGV4cGxvcmVyKTtcbiAgICAgIH0pO1xuXG4gICAgICBwYXRoTWFwcy5mb3JFYWNoKChwYXRoTWFwKSA9PiB7XG4gICAgICAgIHRoaXMuYWRkRHJhZ0VudHJ5SXRlbShwYXRoTWFwLCBleHBsb3Jlcik7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5yZW1vdmVNYXJrZXIoKTtcblxuICAgICAgZG9uZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgcmVtb3ZlRHJhZ0VudHJ5SXRlbXMoZXZlbnQsIGVsZW1lbnQsIHBhdGhNYXBzLCBleHBsb3JlciwgZG9uZSkge1xuICAgIGNvbnN0IGN1c3RvbUV2ZW50VHlwZSA9IFJFTU9WRV9DVVNUT01fRVZFTlRfVFlQRTtcblxuICAgIHRoaXMuY2FsbEN1c3RvbUhhbmRsZXJzQXN5bmMoY3VzdG9tRXZlbnRUeXBlLCBldmVudCwgZWxlbWVudCwgcGF0aE1hcHMsICgpID0+IHtcbiAgICAgIHBhdGhNYXBzLmZvckVhY2goKHBhdGhNYXApID0+IHtcbiAgICAgICAgdGhpcy5yZW1vdmVEcmFnRW50cnlJdGVtKHBhdGhNYXAsIGV4cGxvcmVyKTtcbiAgICAgIH0pO1xuXG4gICAgICBwYXRoTWFwcy5mb3JFYWNoKChwYXRoTWFwKSA9PiB7XG4gICAgICAgIHRoaXMuYWRkRHJhZ0VudHJ5SXRlbShwYXRoTWFwLCBleHBsb3Jlcik7XG4gICAgICB9KTtcblxuICAgICAgZG9uZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgY3JlYXRlRHJhZ0VudHJ5SXRlbXMoZXZlbnQsIGVsZW1lbnQsIHBhdGhNYXBzLCBleHBsb3JlciwgZG9uZSkge1xuICAgIGNvbnN0IGN1c3RvbUV2ZW50VHlwZSA9IENSRUFURV9DVVNUT01fRVZFTlRfVFlQRTtcblxuICAgIHRoaXMuY2FsbEN1c3RvbUhhbmRsZXJzQXN5bmMoY3VzdG9tRXZlbnRUeXBlLCBldmVudCwgZWxlbWVudCwgcGF0aE1hcHMsICgpID0+IHtcbiAgICAgIHBhdGhNYXBzLmZvckVhY2goKHBhdGhNYXApID0+IHtcbiAgICAgICAgdGhpcy5yZW1vdmVEcmFnRW50cnlJdGVtKHBhdGhNYXAsIGV4cGxvcmVyKTtcbiAgICAgIH0pO1xuXG4gICAgICBwYXRoTWFwcy5mb3JFYWNoKChwYXRoTWFwKSA9PiB7XG4gICAgICAgIHRoaXMuYWRkRHJhZ0VudHJ5SXRlbShwYXRoTWFwLCBleHBsb3Jlcik7XG4gICAgICB9KTtcblxuICAgICAgZG9uZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgZW5hYmxlKCkge1xuICAgIGNvbnN0IGRpc2FibGVkID0gZmFsc2U7XG5cbiAgICB0aGlzLnNldERpc2FibGVkKGRpc2FibGVkKTtcblxuICAgIHRoaXMuZW5hYmxlRHJhZygpO1xuICB9XG5cbiAgZGlzYWJsZSgpIHtcbiAgICBjb25zdCBkaXNhYmxlZCA9IHRydWU7XG5cbiAgICB0aGlzLnNldERpc2FibGVkKGRpc2FibGVkKTtcblxuICAgIHRoaXMuZGlzYWJsZURyYWcoKTtcbiAgfVxuXG4gIGVuYWJsZURyYWcoKSB7XG4gICAgY29uc3QgZHJhZ0VudHJ5SXRlbXMgPSB0aGlzLnJldHJpZXZlRHJhZ0VudHJ5SXRlbXMoKTtcblxuICAgIGRyYWdFbnRyeUl0ZW1zLmZvckVhY2goKGRyYWdFbnRyeUl0ZW0pID0+IHtcbiAgICAgIGRyYWdFbnRyeUl0ZW0uZW5hYmxlRHJhZygpO1xuICAgIH0pO1xuICB9XG5cbiAgZGlzYWJsZURyYWcoKSB7XG4gICAgY29uc3QgZHJhZ0VudHJ5SXRlbXMgPSB0aGlzLnJldHJpZXZlRHJhZ0VudHJ5SXRlbXMoKTtcblxuICAgIGRyYWdFbnRyeUl0ZW1zLmZvckVhY2goKGRyYWdFbnRyeUl0ZW0pID0+IHtcbiAgICAgIGRyYWdFbnRyeUl0ZW0uZGlzYWJsZURyYWcoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGNsZWFySW50ZXJ2YWwoKSB7XG4gICAgY29uc3QgaW50ZXJ2YWwgPSBudWxsO1xuXG4gICAgdGhpcy5zZXRJbnRlcnZhbChpbnRlcnZhbCk7XG4gIH1cblxuICBjbGVhckNsaWNrZWREcmFnRW50cnlJdGVtKCkge1xuICAgIGNvbnN0IGNsaWNrZWREcmFnRW50cnlJdGVtID0gbnVsbDtcblxuICAgIHRoaXMuc2V0Q2xpY2tlZERyYWdFbnRyeUl0ZW0oY2xpY2tlZERyYWdFbnRyeUl0ZW0pO1xuICB9XG5cbiAgaXNEaXNhYmxlZCgpIHtcbiAgICBjb25zdCB7IGRpc2FibGVkIH0gPSB0aGlzLmdldFN0YXRlKCk7XG5cbiAgICByZXR1cm4gZGlzYWJsZWQ7XG4gIH1cblxuICBpc0VkaXRhYmxlKCkge1xuICAgIGNvbnN0IGVkaXRhYmxlRHJhZ0VudHJ5SXRlbSA9IHRoaXMucmV0cmlldmVFZGl0YWJsZURyYWdFbnRyeUl0ZW0oKSxcbiAgICAgICAgICBlZGl0YWJsZSA9IChlZGl0YWJsZURyYWdFbnRyeUl0ZW0gIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIGVkaXRhYmxlO1xuICB9XG5cbiAgZ2V0SW50ZXJ2YWwoKSB7XG4gICAgY29uc3QgeyBpbnRlcnZhbCB9ID0gdGhpcy5nZXRTdGF0ZSgpO1xuXG4gICAgcmV0dXJuIGludGVydmFsO1xuICB9XG5cbiAgaXNTaW5nbGVDbGljaygpIHtcbiAgICBjb25zdCB7IHNpbmdsZUNsaWNrIH0gPSB0aGlzLmdldFN0YXRlKCk7XG5cbiAgICByZXR1cm4gc2luZ2xlQ2xpY2s7XG4gIH1cblxuICBnZXRDbGlja2VkRHJhZ0VudHJ5SXRlbSgpIHtcbiAgICBjb25zdCB7IGNsaWNrZWREcmFnRW50cnlJdGVtIH0gPSB0aGlzLmdldFN0YXRlKCk7XG5cbiAgICByZXR1cm4gY2xpY2tlZERyYWdFbnRyeUl0ZW07XG4gIH1cblxuICBzZXREaXNhYmxlZChkaXNhYmxlZCkge1xuICAgIHRoaXMudXBkYXRlU3RhdGUoe1xuICAgICAgZGlzYWJsZWRcbiAgICB9KTtcbiAgfVxuXG4gIHNldEludGVydmFsKGludGVydmFsKSB7XG4gICAgdGhpcy51cGRhdGVTdGF0ZSh7XG4gICAgICBpbnRlcnZhbFxuICAgIH0pO1xuICB9XG5cbiAgc2V0U2luZ2xlQ2xpY2soc2luZ2xlQ2xpY2spIHtcbiAgICB0aGlzLnVwZGF0ZVN0YXRlKHtcbiAgICAgIHNpbmdsZUNsaWNrXG4gICAgfSk7XG4gIH1cblxuICBzZXRDbGlja2VkRHJhZ0VudHJ5SXRlbShjbGlja2VkRHJhZ0VudHJ5SXRlbSkge1xuICAgIHRoaXMudXBkYXRlU3RhdGUoe1xuICAgICAgY2xpY2tlZERyYWdFbnRyeUl0ZW1cbiAgICB9KTtcbiAgfVxuXG4gIGNhbmNlbEVkaXRhYmxlRHJhZ0VudHJ5SXRlbSgpIHtcbiAgICBjb25zdCBlZGl0YWJsZURyYWdFbnRyeUl0ZW0gPSB0aGlzLnJldHJpZXZlRWRpdGFibGVEcmFnRW50cnlJdGVtKCksXG4gICAgICAgICAgY3JlYXRlZCA9IGVkaXRhYmxlRHJhZ0VudHJ5SXRlbS5pc0NyZWF0ZWQoKTtcblxuICAgIGVkaXRhYmxlRHJhZ0VudHJ5SXRlbS5jYW5jZWwoY3JlYXRlZCk7XG4gIH1cblxuICBzZXRJbml0aWFsU3RhdGUoKSB7XG4gICAgY29uc3QgZGlzYWJsZWQgPSBmYWxzZSxcbiAgICAgICAgICBpbnRlcnZhbCA9IG51bGwsXG4gICAgICAgICAgc2luZ2xlQ2xpY2sgPSBmYWxzZSxcbiAgICAgICAgICBjbGlja2VkRHJhZ0VudHJ5SXRlbSA9IG51bGw7XG5cbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGRpc2FibGVkLFxuICAgICAgaW50ZXJ2YWwsXG4gICAgICBzaW5nbGVDbGljayxcbiAgICAgIGNsaWNrZWREcmFnRW50cnlJdGVtXG4gICAgfSk7XG4gIH1cblxuICBkaWRNb3VudCgpIHtcbiAgICBjb25zdCB7IHNpbmdsZUNsaWNrID0gZmFsc2UgfSA9IHRoaXMucHJvcGVydGllcztcblxuICAgIHRoaXMuc2V0U2luZ2xlQ2xpY2soc2luZ2xlQ2xpY2spO1xuXG4gICAgdGhpcy5lbmFibGVEcm9wKCk7XG5cbiAgICB0aGlzLm9uQ3VzdG9tRHJhZ092ZXIodGhpcy5kcmFnT3ZlckN1c3RvbUhhbmRsZXIpO1xuXG4gICAgdGhpcy5vbkN1c3RvbURyb3AodGhpcy5kcm9wQ3VzdG9tSGFuZGxlcik7XG4gIH1cblxuICB3aWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLmRpc2FibGVEcm9wKCk7XG5cbiAgICB0aGlzLm9mZkN1c3RvbURyYWdPdmVyKHRoaXMuZHJhZ092ZXJDdXN0b21IYW5kbGVyKTtcblxuICAgIHRoaXMub2ZmQ3VzdG9tRHJvcCh0aGlzLmRyb3BDdXN0b21IYW5kbGVyKTtcbiAgfVxuXG4gIGNoaWxkRWxlbWVudHMoKSB7XG4gIFx0Y29uc3QgZXhwbG9yZXIgPSB0aGlzOyAgLy8vXG5cbiAgXHRyZXR1cm4gKFxuXG4gIFx0XHQ8RW50cmllc0xpc3QgZXhwbG9yZXI9e2V4cGxvcmVyfSB0b3Btb3N0IC8+XG5cblx0XHQpO1xuXHR9XG5cbiAgcGFyZW50Q29udGV4dCgpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgY29sbGFwc2UgPSB0aGlzLmNvbGxhcHNlLmJpbmQodGhpcyksXG4gICAgICAgICAgZ2V0U2VsZWN0ZWRQYXRoID0gdGhpcy5nZXRTZWxlY3RlZFBhdGguYmluZCh0aGlzKSxcbiAgICAgICAgICByZXRyaWV2ZUZpbGVQYXRocyA9IHRoaXMucmV0cmlldmVGaWxlUGF0aHMuYmluZCh0aGlzKSxcbiAgICAgICAgICByZXRyaWV2ZURpcmVjdG9yeVBhdGhzID0gdGhpcy5yZXRyaWV2ZURpcmVjdG9yeVBhdGhzLmJpbmQodGhpcyk7XG5cbiAgICByZXR1cm4gKHtcbiAgICAgIC4uLmNvbnRleHQsXG4gICAgICBjb2xsYXBzZSxcbiAgICAgIGdldFNlbGVjdGVkUGF0aCxcbiAgICAgIHJldHJpZXZlRmlsZVBhdGhzLFxuICAgICAgcmV0cmlldmVEaXJlY3RvcnlQYXRoc1xuICAgIH0pO1xuICB9XG5cbiAgaW5pdGlhbGlzZSgpIHtcbiAgXHR0aGlzLmFzc2lnbkNvbnRleHQoKTtcblxuICAgIHRoaXMuc2V0SW5pdGlhbFN0YXRlKCk7XG5cdH1cblxuXHRzdGF0aWMgRW50cmllc0xpc3QgPSBFbnRyaWVzTGlzdDtcblxuICBzdGF0aWMgRmlsZU5hbWVEcmFnRW50cnlJdGVtID0gRmlsZU5hbWVEcmFnRW50cnlJdGVtO1xuXG4gIHN0YXRpYyBGaWxlTmFtZU1hcmtlckVudHJ5SXRlbSA9IEZpbGVOYW1lTWFya2VyRW50cnlJdGVtO1xuXG4gIHN0YXRpYyBEaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbSA9IERpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtO1xuXG4gIHN0YXRpYyBEaXJlY3RvcnlOYW1lTWFya2VyRW50cnlJdGVtID0gRGlyZWN0b3J5TmFtZU1hcmtlckVudHJ5SXRlbTtcblxuICBzdGF0aWMgdGFnTmFtZSA9IFwiZGl2XCI7XG5cbiAgc3RhdGljIGlnbm9yZWRQcm9wZXJ0aWVzID0gW1xuICAgIFwicmVmZXJlbmNlXCIsXG4gICAgXCJyZWZlcmVuY2VzXCIsXG4gICAgXCJzaW5nbGVDbGlja1wiXG4gIF07XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJleHBsb3JlclwiXG4gIH07XG59XG5cbk9iamVjdC5hc3NpZ24oRXhwbG9yZXIucHJvdG90eXBlLCBkcm9wTWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oRXhwbG9yZXIucHJvdG90eXBlLCBleHBsb3Jlck1peGlucyk7XG5PYmplY3QuYXNzaWduKEV4cGxvcmVyLnByb3RvdHlwZSwgZHJhZ0VudHJ5SXRlbU1peGlucyk7XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZShFeHBsb3JlcilgXG4gIFxuICBwYWRkaW5nOiAke2V4cGxvcmVyUGFkZGluZ307IFxuICBcbmA7XG4iXSwibmFtZXMiOlsiZmlyc3QiLCJhcnJheVV0aWxpdGllcyIsImNvbmNhdGVuYXRlUGF0aHMiLCJwYXRoVXRpbGl0aWVzIiwicGF0aFdpdGhvdXRCb3R0b21tb3N0TmFtZUZyb21QYXRoIiwiRXhwbG9yZXIiLCJkcmFnT3ZlckN1c3RvbUhhbmRsZXIiLCJldmVudCIsImVsZW1lbnQiLCJkcmFnRWxlbWVudCIsImRyYWdFbnRyeUl0ZW0iLCJtYXJrZXJFbnRyeUl0ZW0iLCJyZXRyaWV2ZU1hcmtlckVudHJ5SXRlbSIsImRyYWdFbnRyeUl0ZW1OYW1lIiwiZ2V0TmFtZSIsIm1hcmtlckVudHJ5SXRlbVBhdGgiLCJnZXRQYXRoIiwibWFya2VyRW50cnlJdGVtRXhwbG9yZXIiLCJnZXRFeHBsb3JlciIsInByZXZpb3VzTWFya2VyRW50cnlJdGVtUGF0aCIsInByZXZpb3VzTWFya2VyRW50cnlJdGVtRXhwbG9yZXIiLCJkcmFnRW50cnlJdGVtVHlwZSIsImdldFR5cGUiLCJyZW1vdmVNYXJrZXIiLCJhZGRNYXJrZXIiLCJkcm9wQ3VzdG9tSGFuZGxlciIsImFib3J0ZWQiLCJkb25lIiwiZHJvcERyYWdFbnRyeUl0ZW0iLCJleHBsb3JlciIsImdldFJlZmVyZW5jZSIsInByb3BlcnRpZXMiLCJyZWZlcmVuY2UiLCJnZXRSZWZlcmVuY2VzIiwicmVmZXJlbmNlcyIsImdldEVudHJpZXNMaXN0IiwiRW50cmllc0xpc3QiLCJnZXRGaWxlTmFtZURyYWdFbnRyeUl0ZW0iLCJyZWFkT25seSIsIkZpbGVOYW1lRHJhZ0VudHJ5SXRlbSIsImdldEZpbGVOYW1lTWFya2VyRW50cnlJdGVtIiwiRmlsZU5hbWVNYXJrZXJFbnRyeUl0ZW0iLCJnZXREaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbSIsInRvcG1vc3QiLCJEaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbSIsImdldERpcmVjdG9yeU5hbWVNYXJrZXJFbnRyeUl0ZW0iLCJEaXJlY3RvcnlOYW1lTWFya2VyRW50cnlJdGVtIiwicmV0cmlldmVQYXRocyIsInR5cGUiLCJkcmFnRW50cnlJdGVtcyIsInJldHJpZXZlRHJhZ0VudHJ5SXRlbXMiLCJwYXRocyIsInJlZHVjZSIsImRyYWdFbnRyeUl0ZW1QYXRoIiwicGF0aCIsInB1c2giLCJyZXRyaWV2ZUZpbGVQYXRocyIsIkZJTEVfTkFNRV9EUkFHX0VOVFJZX1RZUEUiLCJmaWxlUGF0aHMiLCJyZXRyaWV2ZURpcmVjdG9yeVBhdGhzIiwiRElSRUNUT1JZX05BTUVfRFJBR19FTlRSWV9UWVBFIiwiZGlyZWN0b3J5UGF0aHMiLCJjb2xsYXBzZSIsImRpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtcyIsInJldHJpZXZlRGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW1zIiwiZm9yRWFjaCIsImRpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtIiwiY3JlYXRlUGF0aCIsIm5hbWUiLCJQRVJJT0QiLCJzZWxlY3RlZERyYWdFbnRyeUl0ZW0iLCJyZXRyaWV2ZVNlbGVjdGVkRHJhZ0VudHJ5SXRlbSIsInNlbGVjdGVkRHJhZ0VudHJ5SXRlbURpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtIiwiaXNEaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbSIsImRpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtUGF0aCIsImV4cGFuZCIsImZpbGVOYW1lRHJhZ0VudHJ5SXRlbSIsImZpbGVOYW1lRHJhZ0VudHJ5SXRlbVBhdGgiLCJmaWxlTmFtZURyYWdFbnRyeUl0ZW1QYXRoV2l0aG91dEJvdHRvbW1vc3ROYW1lIiwiY3JlYXRlRmlsZVBhdGgiLCJmaWxlUGF0aCIsImFkZEZpbGVQYXRoIiwiY3JlYXRlIiwiY3JlYXRlRGlyZWN0b3J5UGF0aCIsImNvbGxhcHNlZCIsImRpcmVjdG9yeVBhdGgiLCJhZGREaXJlY3RvcnlQYXRoIiwicmVuYW1lU2VsZWN0ZWRQYXRoIiwicmVuYW1lIiwiZ2V0U2VsZWN0ZWRQYXRoIiwic2VsZWN0ZWRQYXRoIiwic2VsZWN0ZWREcmFnRW50cnlJdGVtUGF0aCIsImNsaWNrRHJhZ0VudHJ5SXRlbSIsInNpbmdsZUNsaWNrIiwiaXNTaW5nbGVDbGljayIsInNlbGVjdGVkIiwiY2xpY2siLCJjbGlja2VkRHJhZ0VudHJ5SXRlbSIsImdldENsaWNrZWREcmFnRW50cnlJdGVtIiwiaW50ZXJ2YWwiLCJnZXRJbnRlcnZhbCIsImNsZWFySW50ZXJ2YWwiLCJjbGVhckNsaWNrZWREcmFnRW50cnlJdGVtIiwiZGVsYXkiLCJET1VCTEVfQ0xJQ0tfREVMQVkiLCJzZXRUaW1lb3V0Iiwic2V0SW50ZXJ2YWwiLCJzZXRDbGlja2VkRHJhZ0VudHJ5SXRlbSIsImRvdWJsZUNsaWNrIiwib3BlbkZpbGVOYW1lRHJhZ0VudHJ5SXRlbSIsImRpc2FibGVkIiwiaXNEaXNhYmxlZCIsImN1c3RvbUV2ZW50VHlwZSIsIk9QRU5fQ1VTVE9NX0VWRU5UX1RZUEUiLCJjYWxsQ3VzdG9tSGFuZGxlcnMiLCJzZWxlY3RPckRlc2VsZWN0RHJhZ0VudHJ5SXRlbSIsImlzU2VsZWN0ZWQiLCJkZXNlbGVjdCIsImRlc2VsZWN0QWxsUGF0aHMiLCJzZWxlY3RQYXRoIiwiaXNSZWFkT25seSIsIlNFTEVDVF9DVVNUT01fRVZFTlRfVFlQRSIsImNyZWF0ZURyYWdFbnRyeUl0ZW0iLCJzb3VyY2VFbnRyeVBhdGgiLCJzb3VyY2VFbnRyeVBhdGhGcm9tRW50cnlJdGVtIiwidGFyZ2V0RW50cnlQYXRoIiwidGFyZ2V0RW50cnlQYXRoRnJvbUVudHJ5SXRlbSIsInBhdGhNYXBzIiwiZ2V0UGF0aE1hcHMiLCJjcmVhdGVEcmFnRW50cnlJdGVtcyIsInJlbmFtZURyYWdFbnRyeUl0ZW0iLCJmaXJzdFBhdGhNYXAiLCJwYXRoTWFwIiwicmVuYW1lRHJhZ0VudHJ5SXRlbXMiLCJkcmFnRW50cnlJdGVtRXhwbG9yZXIiLCJtb3ZlRHJhZ0VudHJ5SXRlbXMiLCJSRU5BTUVfQ1VTVE9NX0VWRU5UX1RZUEUiLCJjYWxsQ3VzdG9tSGFuZGxlcnNBc3luYyIsInJlbW92ZURyYWdFbnRyeUl0ZW0iLCJhZGREcmFnRW50cnlJdGVtIiwiTU9WRV9DVVNUT01fRVZFTlRfVFlQRSIsInJlbW92ZURyYWdFbnRyeUl0ZW1zIiwiUkVNT1ZFX0NVU1RPTV9FVkVOVF9UWVBFIiwiQ1JFQVRFX0NVU1RPTV9FVkVOVF9UWVBFIiwiZW5hYmxlIiwic2V0RGlzYWJsZWQiLCJlbmFibGVEcmFnIiwiZGlzYWJsZSIsImRpc2FibGVEcmFnIiwiZ2V0U3RhdGUiLCJpc0VkaXRhYmxlIiwiZWRpdGFibGVEcmFnRW50cnlJdGVtIiwicmV0cmlldmVFZGl0YWJsZURyYWdFbnRyeUl0ZW0iLCJlZGl0YWJsZSIsInVwZGF0ZVN0YXRlIiwic2V0U2luZ2xlQ2xpY2siLCJjYW5jZWxFZGl0YWJsZURyYWdFbnRyeUl0ZW0iLCJjcmVhdGVkIiwiaXNDcmVhdGVkIiwiY2FuY2VsIiwic2V0SW5pdGlhbFN0YXRlIiwic2V0U3RhdGUiLCJkaWRNb3VudCIsImVuYWJsZURyb3AiLCJvbkN1c3RvbURyYWdPdmVyIiwib25DdXN0b21Ecm9wIiwid2lsbFVubW91bnQiLCJkaXNhYmxlRHJvcCIsIm9mZkN1c3RvbURyYWdPdmVyIiwib2ZmQ3VzdG9tRHJvcCIsImNoaWxkRWxlbWVudHMiLCJwYXJlbnRDb250ZXh0IiwiY29udGV4dCIsImdldENvbnRleHQiLCJiaW5kIiwiaW5pdGlhbGlzZSIsImFzc2lnbkNvbnRleHQiLCJFbGVtZW50IiwidGFnTmFtZSIsImlnbm9yZWRQcm9wZXJ0aWVzIiwiZGVmYXVsdFByb3BlcnRpZXMiLCJjbGFzc05hbWUiLCJPYmplY3QiLCJhc3NpZ24iLCJwcm90b3R5cGUiLCJkcm9wTWl4aW5zIiwiZXhwbG9yZXJNaXhpbnMiLCJkcmFnRW50cnlJdGVtTWl4aW5zIiwid2l0aFN0eWxlIiwiZXhwbG9yZXJQYWRkaW5nIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFzb0JBOzs7ZUFBQTs7O29FQXBvQnNCO29CQUVFOytCQUNHO3lCQUNtQjs4REFFdEI7K0RBQ0c7b0VBQ0s7K0RBQ0U7Z0VBQ0U7b0VBQ0c7cUVBQ0U7c0JB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
|
|
427
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9leHBsb3Jlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7ICAvLy9cblxuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gXCJlYXN5XCI7XG5pbXBvcnQgeyBkcm9wTWl4aW5zIH0gZnJvbSBcImVhc3ktZHJhZy1hbmQtZHJvcFwiO1xuaW1wb3J0IHsgcGF0aFV0aWxpdGllcywgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBFbnRyaWVzTGlzdCBmcm9tIFwiLi9saXN0L2VudHJpZXNcIjtcbmltcG9ydCBleHBsb3Jlck1peGlucyBmcm9tIFwiLi9taXhpbnMvZXhwbG9yZXJcIjtcbmltcG9ydCBkcmFnRW50cnlJdGVtTWl4aW5zIGZyb20gXCIuL21peGlucy9kcmFnRW50cnlJdGVtXCI7XG5pbXBvcnQgRmlsZU5hbWVEcmFnRW50cnlJdGVtIGZyb20gXCIuL2l0ZW0vZW50cnkvZHJhZy9maWxlTmFtZVwiO1xuaW1wb3J0IEZpbGVOYW1lTWFya2VyRW50cnlJdGVtIGZyb20gXCIuL2l0ZW0vZW50cnkvbWFya2VyL2ZpbGVOYW1lXCI7XG5pbXBvcnQgRGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW0gZnJvbSBcIi4vaXRlbS9lbnRyeS9kcmFnL2RpcmVjdG9yeU5hbWVcIjtcbmltcG9ydCBEaXJlY3RvcnlOYW1lTWFya2VyRW50cnlJdGVtIGZyb20gXCIuL2l0ZW0vZW50cnkvbWFya2VyL2RpcmVjdG9yeU5hbWVcIjtcblxuaW1wb3J0IHsgZXhwbG9yZXJQYWRkaW5nIH0gZnJvbSBcIi4vc3R5bGVzXCI7XG5pbXBvcnQgeyBQRVJJT0QsIERPVUJMRV9DTElDS19ERUxBWSB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgRklMRV9OQU1FX0RSQUdfRU5UUllfVFlQRSwgRElSRUNUT1JZX05BTUVfRFJBR19FTlRSWV9UWVBFIH0gZnJvbSBcIi4vZW50cnlUeXBlc1wiO1xuaW1wb3J0IHsgc291cmNlRW50cnlQYXRoRnJvbUVudHJ5SXRlbSwgdGFyZ2V0RW50cnlQYXRoRnJvbUVudHJ5SXRlbSB9IGZyb20gXCIuL3V0aWxpdGllcy9wYXRoTWFwXCI7XG5pbXBvcnQgeyBNT1ZFX0NVU1RPTV9FVkVOVF9UWVBFLFxuICAgICAgICAgT1BFTl9DVVNUT01fRVZFTlRfVFlQRSxcbiAgICAgICAgIFJFTU9WRV9DVVNUT01fRVZFTlRfVFlQRSxcbiAgICAgICAgIFJFTkFNRV9DVVNUT01fRVZFTlRfVFlQRSxcbiAgICAgICAgIFNFTEVDVF9DVVNUT01fRVZFTlRfVFlQRSxcbiAgICAgICAgIENSRUFURV9DVVNUT01fRVZFTlRfVFlQRSB9IGZyb20gXCIuL2N1c3RvbUV2ZW50VHlwZXNcIjtcblxuY29uc3QgeyBmaXJzdCB9ID0gYXJyYXlVdGlsaXRpZXMsXG4gICAgICB7IGNvbmNhdGVuYXRlUGF0aHMsIHBhdGhXaXRob3V0Qm90dG9tbW9zdE5hbWVGcm9tUGF0aCB9ID0gcGF0aFV0aWxpdGllcztcblxuY2xhc3MgRXhwbG9yZXIgZXh0ZW5kcyBFbGVtZW50IHtcbiAgZHJhZ092ZXJDdXN0b21IYW5kbGVyID0gKGV2ZW50LCBlbGVtZW50LCBkcmFnRWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IGRyYWdFbnRyeUl0ZW0gPSBkcmFnRWxlbWVudCwgIC8vL1xuICAgICAgICAgIG1hcmtlckVudHJ5SXRlbSA9IHRoaXMucmV0cmlldmVNYXJrZXJFbnRyeUl0ZW0oKSxcbiAgICAgICAgICBkcmFnRW50cnlJdGVtTmFtZSA9IGRyYWdFbnRyeUl0ZW0uZ2V0TmFtZSgpO1xuXG4gICAgbGV0IG1hcmtlckVudHJ5SXRlbVBhdGggPSBtYXJrZXJFbnRyeUl0ZW0uZ2V0UGF0aCgpLFxuICAgICAgICBtYXJrZXJFbnRyeUl0ZW1FeHBsb3JlciA9IG1hcmtlckVudHJ5SXRlbS5nZXRFeHBsb3JlcigpLFxuICAgICAgICBwcmV2aW91c01hcmtlckVudHJ5SXRlbVBhdGggPSBtYXJrZXJFbnRyeUl0ZW1QYXRoLCAvLy9cbiAgICAgICAgcHJldmlvdXNNYXJrZXJFbnRyeUl0ZW1FeHBsb3JlciA9IG1hcmtlckVudHJ5SXRlbUV4cGxvcmVyOyAvLy9cblxuICAgIG1hcmtlckVudHJ5SXRlbVBhdGggPSBkcmFnRW50cnlJdGVtTmFtZTsvLy9cblxuICAgIG1hcmtlckVudHJ5SXRlbUV4cGxvcmVyID0gdGhpczsgIC8vL1xuXG4gICAgaWYgKChtYXJrZXJFbnRyeUl0ZW1FeHBsb3JlciAhPT0gcHJldmlvdXNNYXJrZXJFbnRyeUl0ZW1FeHBsb3JlcikgfHwgKG1hcmtlckVudHJ5SXRlbVBhdGggIT09IHByZXZpb3VzTWFya2VyRW50cnlJdGVtUGF0aCkpIHtcbiAgICAgIGNvbnN0IGRyYWdFbnRyeUl0ZW1UeXBlID0gZHJhZ0VudHJ5SXRlbS5nZXRUeXBlKCk7XG5cbiAgICAgIHByZXZpb3VzTWFya2VyRW50cnlJdGVtRXhwbG9yZXIucmVtb3ZlTWFya2VyKCk7XG5cbiAgICAgIG1hcmtlckVudHJ5SXRlbUV4cGxvcmVyLmFkZE1hcmtlcihtYXJrZXJFbnRyeUl0ZW1QYXRoLCBkcmFnRW50cnlJdGVtVHlwZSk7XG4gICAgfVxuICB9XG5cbiAgZHJvcEN1c3RvbUhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQsIGRyYWdFbGVtZW50LCBhYm9ydGVkLCBkb25lKSA9PiB7XG4gICAgY29uc3QgbWFya2VyRW50cnlJdGVtID0gdGhpcy5yZXRyaWV2ZU1hcmtlckVudHJ5SXRlbSgpLFxuICAgICAgICAgIG1hcmtlckVudHJ5SXRlbUV4cGxvcmVyID0gbWFya2VyRW50cnlJdGVtLmdldEV4cGxvcmVyKCk7XG5cbiAgICBpZiAoYWJvcnRlZCkge1xuICAgICAgbWFya2VyRW50cnlJdGVtRXhwbG9yZXIucmVtb3ZlTWFya2VyKCk7XG5cbiAgICAgIGRvbmUoKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGRyYWdFbnRyeUl0ZW0gPSBkcmFnRWxlbWVudDsgIC8vL1xuXG4gICAgbWFya2VyRW50cnlJdGVtRXhwbG9yZXIuZHJvcERyYWdFbnRyeUl0ZW0oZXZlbnQsIGVsZW1lbnQsIGRyYWdFbnRyeUl0ZW0sIGRvbmUpO1xuICB9XG5cbiAgZ2V0RXhwbG9yZXIoKSB7XG4gICAgY29uc3QgZXhwbG9yZXIgPSB0aGlzOyAgLy8vXG5cbiAgICByZXR1cm4gZXhwbG9yZXI7XG4gIH1cblxuICBnZXRSZWZlcmVuY2UoKSB7XG4gICAgY29uc3QgeyByZWZlcmVuY2UgPSBudWxsIH0gPSB0aGlzLnByb3BlcnRpZXM7XG5cbiAgICByZXR1cm4gcmVmZXJlbmNlO1xuICB9XG5cbiAgZ2V0UmVmZXJlbmNlcygpIHtcbiAgICBjb25zdCB7IHJlZmVyZW5jZXMgPSBbXSB9ID0gdGhpcy5wcm9wZXJ0aWVzO1xuXG4gICAgcmV0dXJuIHJlZmVyZW5jZXM7XG4gIH1cblxuICBnZXRFbnRyaWVzTGlzdCgpIHtcbiAgXHRjb25zdCB7IEVudHJpZXNMaXN0IH0gPSB0aGlzLmNvbnN0cnVjdG9yO1xuXG4gIFx0cmV0dXJuIEVudHJpZXNMaXN0O1xuXHR9XG5cbiAgZ2V0RmlsZU5hbWVEcmFnRW50cnlJdGVtKHJlYWRPbmx5KSB7XG5cdFx0Y29uc3QgeyBGaWxlTmFtZURyYWdFbnRyeUl0ZW0gfSA9IHRoaXMuY29uc3RydWN0b3I7XG5cblx0XHRyZXR1cm4gRmlsZU5hbWVEcmFnRW50cnlJdGVtO1xuXHR9XG5cbiAgZ2V0RmlsZU5hbWVNYXJrZXJFbnRyeUl0ZW0oKSB7XG4gICAgY29uc3QgeyBGaWxlTmFtZU1hcmtlckVudHJ5SXRlbSB9ID0gdGhpcy5jb25zdHJ1Y3RvcjtcblxuICAgIHJldHVybiBGaWxlTmFtZU1hcmtlckVudHJ5SXRlbTtcbiAgfVxuXG4gIGdldERpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtKHJlYWRPbmx5LCB0b3Btb3N0KSB7XG5cdFx0Y29uc3QgeyBEaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbSB9ID0gdGhpcy5jb25zdHJ1Y3RvcjtcblxuXHRcdHJldHVybiBEaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbTtcblx0fVxuXG4gIGdldERpcmVjdG9yeU5hbWVNYXJrZXJFbnRyeUl0ZW0oKSB7XG4gICAgY29uc3QgeyBEaXJlY3RvcnlOYW1lTWFya2VyRW50cnlJdGVtIH0gPSB0aGlzLmNvbnN0cnVjdG9yO1xuXG4gICAgcmV0dXJuIERpcmVjdG9yeU5hbWVNYXJrZXJFbnRyeUl0ZW07XG4gIH1cblxuICByZXRyaWV2ZVBhdGhzKHR5cGUpIHtcbiAgICBjb25zdCBkcmFnRW50cnlJdGVtcyA9IHRoaXMucmV0cmlldmVEcmFnRW50cnlJdGVtcygpLFxuICAgICAgICAgIHBhdGhzID0gZHJhZ0VudHJ5SXRlbXMucmVkdWNlKChwYXRocywgZHJhZ0VudHJ5SXRlbSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZHJhZ0VudHJ5SXRlbVR5cGUgPSBkcmFnRW50cnlJdGVtLmdldFR5cGUoKTtcblxuICAgICAgICAgICAgaWYgKGRyYWdFbnRyeUl0ZW1UeXBlID09PSB0eXBlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGRyYWdFbnRyeUl0ZW1QYXRoID0gZHJhZ0VudHJ5SXRlbS5nZXRQYXRoKCksXG4gICAgICAgICAgICAgICAgICAgIHBhdGggPSBkcmFnRW50cnlJdGVtUGF0aDsgLy8vXG5cbiAgICAgICAgICAgICAgcGF0aHMucHVzaChwYXRoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHBhdGhzO1xuICAgICAgICAgIH0sIFtdKTtcblxuICAgIHJldHVybiBwYXRocztcbiAgfVxuXG4gIHJldHJpZXZlRmlsZVBhdGhzKCkge1xuICAgIGNvbnN0IHR5cGUgPSBGSUxFX05BTUVfRFJBR19FTlRSWV9UWVBFLFxuICAgICAgICAgIHBhdGhzID0gdGhpcy5yZXRyaWV2ZVBhdGhzKHR5cGUpLFxuICAgICAgICAgIGZpbGVQYXRocyA9IHBhdGhzOyAvLy9cblxuICAgIHJldHVybiBmaWxlUGF0aHM7XG4gIH1cblxuICByZXRyaWV2ZURpcmVjdG9yeVBhdGhzKCkge1xuICAgIGNvbnN0IHR5cGUgPSBESVJFQ1RPUllfTkFNRV9EUkFHX0VOVFJZX1RZUEUsXG4gICAgICAgICAgcGF0aHMgPSB0aGlzLnJldHJpZXZlUGF0aHModHlwZSksXG4gICAgICAgICAgZGlyZWN0b3J5UGF0aHMgPSBwYXRoczsgLy8vXG5cbiAgICByZXR1cm4gZGlyZWN0b3J5UGF0aHM7XG4gIH1cblxuICBjb2xsYXBzZSgpIHtcbiAgICBjb25zdCBkaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbXMgPSB0aGlzLnJldHJpZXZlRGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW1zKCk7XG5cbiAgICBkaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbXMuZm9yRWFjaCgoZGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW0pID0+IHtcbiAgICAgIGRpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtLmNvbGxhcHNlKCk7XG4gICAgfSk7XG4gIH1cblxuICBjcmVhdGVQYXRoKCkge1xuICAgIGxldCBwYXRoO1xuXG4gICAgY29uc3QgbmFtZSA9IFBFUklPRCwgIC8vL1xuICAgICAgICAgIHNlbGVjdGVkRHJhZ0VudHJ5SXRlbSA9IHRoaXMucmV0cmlldmVTZWxlY3RlZERyYWdFbnRyeUl0ZW0oKTtcblxuICAgIGlmIChzZWxlY3RlZERyYWdFbnRyeUl0ZW0gPT09IG51bGwpIHtcbiAgICAgIHBhdGggPSBuYW1lOyAgLy8vXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkRHJhZ0VudHJ5SXRlbURpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtID0gc2VsZWN0ZWREcmFnRW50cnlJdGVtLmlzRGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW0oKTtcblxuICAgICAgaWYgKHNlbGVjdGVkRHJhZ0VudHJ5SXRlbURpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtKSB7XG4gICAgICAgIGNvbnN0IGRpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtID0gc2VsZWN0ZWREcmFnRW50cnlJdGVtLCAvLy9cbiAgICAgICAgICAgICAgZGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW1QYXRoID0gZGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW0uZ2V0UGF0aCgpO1xuXG4gICAgICAgIHBhdGggPSBjb25jYXRlbmF0ZVBhdGhzKGRpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtUGF0aCwgbmFtZSk7XG5cbiAgICAgICAgc2VsZWN0ZWREcmFnRW50cnlJdGVtLmV4cGFuZCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZmlsZU5hbWVEcmFnRW50cnlJdGVtID0gc2VsZWN0ZWREcmFnRW50cnlJdGVtLCAgLy8vXG4gICAgICAgICAgICAgIGZpbGVOYW1lRHJhZ0VudHJ5SXRlbVBhdGggPSBmaWxlTmFtZURyYWdFbnRyeUl0ZW0uZ2V0UGF0aCgpLFxuICAgICAgICAgICAgICBmaWxlTmFtZURyYWdFbnRyeUl0ZW1QYXRoV2l0aG91dEJvdHRvbW1vc3ROYW1lID0gcGF0aFdpdGhvdXRCb3R0b21tb3N0TmFtZUZyb21QYXRoKGZpbGVOYW1lRHJhZ0VudHJ5SXRlbVBhdGgpO1xuXG4gICAgICAgIHBhdGggPSBjb25jYXRlbmF0ZVBhdGhzKGZpbGVOYW1lRHJhZ0VudHJ5SXRlbVBhdGhXaXRob3V0Qm90dG9tbW9zdE5hbWUsIG5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwYXRoO1xuICB9XG5cbiAgY3JlYXRlRmlsZVBhdGgoKSB7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMuY3JlYXRlUGF0aCgpLFxuICAgICAgICAgIGZpbGVQYXRoID0gcGF0aCwgIC8vL1xuICAgICAgICAgIGZpbGVOYW1lRHJhZ0VudHJ5SXRlbSA9IHRoaXMuYWRkRmlsZVBhdGgoZmlsZVBhdGgpO1xuXG4gICAgZmlsZU5hbWVEcmFnRW50cnlJdGVtLmNyZWF0ZSgpO1xuICB9XG5cbiAgY3JlYXRlRGlyZWN0b3J5UGF0aCgpIHtcbiAgICBjb25zdCBwYXRoID0gdGhpcy5jcmVhdGVQYXRoKCksXG4gICAgICAgICAgcmVhZE9ubHkgPSBmYWxzZSxcbiAgICAgICAgICBjb2xsYXBzZWQgPSBmYWxzZSxcbiAgICAgICAgICBkaXJlY3RvcnlQYXRoID0gcGF0aCwgIC8vL1xuICAgICAgICAgIGRpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtID0gdGhpcy5hZGREaXJlY3RvcnlQYXRoKGRpcmVjdG9yeVBhdGgsIHJlYWRPbmx5LCBjb2xsYXBzZWQpO1xuXG4gICAgZGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW0uY3JlYXRlKCk7XG4gIH1cblxuICByZW5hbWVTZWxlY3RlZFBhdGgoKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWREcmFnRW50cnlJdGVtID0gdGhpcy5yZXRyaWV2ZVNlbGVjdGVkRHJhZ0VudHJ5SXRlbSgpO1xuXG4gICAgaWYgKHNlbGVjdGVkRHJhZ0VudHJ5SXRlbSAhPT0gbnVsbCkge1xuICAgICAgc2VsZWN0ZWREcmFnRW50cnlJdGVtLnJlbmFtZSgpO1xuICAgIH1cbiAgfVxuXG4gIGdldFNlbGVjdGVkUGF0aCgpIHtcbiAgICBsZXQgc2VsZWN0ZWRQYXRoID0gbnVsbDtcblxuICAgIGNvbnN0IHNlbGVjdGVkRHJhZ0VudHJ5SXRlbSA9IHRoaXMucmV0cmlldmVTZWxlY3RlZERyYWdFbnRyeUl0ZW0oKTtcblxuICAgIGlmIChzZWxlY3RlZERyYWdFbnRyeUl0ZW0gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkRHJhZ0VudHJ5SXRlbVBhdGggPSBzZWxlY3RlZERyYWdFbnRyeUl0ZW0uZ2V0UGF0aCgpO1xuXG4gICAgICBzZWxlY3RlZFBhdGggPSBzZWxlY3RlZERyYWdFbnRyeUl0ZW1QYXRoOyAvLy9cbiAgICB9XG5cbiAgICByZXR1cm4gc2VsZWN0ZWRQYXRoO1xuICB9XG5cbiAgY2xpY2tEcmFnRW50cnlJdGVtKGV2ZW50LCBlbGVtZW50LCBkcmFnRW50cnlJdGVtKSB7XG4gICAgY29uc3Qgc2luZ2xlQ2xpY2sgPSB0aGlzLmlzU2luZ2xlQ2xpY2soKTtcblxuICAgIGlmIChzaW5nbGVDbGljaykge1xuICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBkcmFnRW50cnlJdGVtLmNsaWNrKGV2ZW50LCBlbGVtZW50KTtcblxuICAgICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICAgIGRyYWdFbnRyeUl0ZW0uc2luZ2xlQ2xpY2soZXZlbnQsIGVsZW1lbnQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY2xpY2tlZERyYWdFbnRyeUl0ZW0gPSB0aGlzLmdldENsaWNrZWREcmFnRW50cnlJdGVtKCk7XG5cbiAgICBpZiAoZHJhZ0VudHJ5SXRlbSAhPT0gY2xpY2tlZERyYWdFbnRyeUl0ZW0pIHtcbiAgICAgIGNvbnN0IGludGVydmFsID0gdGhpcy5nZXRJbnRlcnZhbCgpO1xuXG4gICAgICBjbGVhckludGVydmFsKGludGVydmFsKTtcblxuICAgICAgdGhpcy5jbGVhckludGVydmFsKCk7XG5cbiAgICAgIHRoaXMuY2xlYXJDbGlja2VkRHJhZ0VudHJ5SXRlbSgpO1xuICAgIH1cblxuICAgIGNvbnN0IGludGVydmFsID0gdGhpcy5nZXRJbnRlcnZhbCgpO1xuXG4gICAgaWYgKGludGVydmFsID09PSBudWxsKSB7XG4gICAgICBjb25zdCBkZWxheSA9IERPVUJMRV9DTElDS19ERUxBWSxcbiAgICAgICAgICAgIGludGVydmFsID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuY2xlYXJJbnRlcnZhbCgpO1xuXG4gICAgICAgICAgICAgIHRoaXMuY2xlYXJDbGlja2VkRHJhZ0VudHJ5SXRlbSgpO1xuXG4gICAgICAgICAgICAgIGRyYWdFbnRyeUl0ZW0uY2xpY2soZXZlbnQsIGVsZW1lbnQpO1xuICAgICAgICAgICAgfSwgZGVsYXkpLFxuICAgICAgICAgICAgY2xpY2tlZERyYWdFbnRyeUl0ZW0gPSBkcmFnRW50cnlJdGVtOyAvLy9cblxuICAgICAgdGhpcy5zZXRJbnRlcnZhbChpbnRlcnZhbCk7XG5cbiAgICAgIHRoaXMuc2V0Q2xpY2tlZERyYWdFbnRyeUl0ZW0oY2xpY2tlZERyYWdFbnRyeUl0ZW0pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7XG5cbiAgICB0aGlzLmNsZWFySW50ZXJ2YWwoKTtcblxuICAgIHRoaXMuY2xlYXJDbGlja2VkRHJhZ0VudHJ5SXRlbSgpO1xuXG4gICAgZHJhZ0VudHJ5SXRlbS5kb3VibGVDbGljayhldmVudCwgZWxlbWVudCk7XG4gIH1cblxuICBvcGVuRmlsZU5hbWVEcmFnRW50cnlJdGVtKGV2ZW50LCBlbGVtZW50LCBmaWxlTmFtZURyYWdFbnRyeUl0ZW0pIHtcbiAgICBjb25zdCBkaXNhYmxlZCA9IHRoaXMuaXNEaXNhYmxlZCgpO1xuXG4gICAgaWYgKGRpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZmlsZU5hbWVEcmFnRW50cnlJdGVtUGF0aCA9IGZpbGVOYW1lRHJhZ0VudHJ5SXRlbS5nZXRQYXRoKCksXG4gICAgICAgICAgZmlsZVBhdGggPSBmaWxlTmFtZURyYWdFbnRyeUl0ZW1QYXRoLCAvLy9cbiAgICAgICAgICBjdXN0b21FdmVudFR5cGUgPSBPUEVOX0NVU1RPTV9FVkVOVF9UWVBFO1xuXG4gICAgdGhpcy5jYWxsQ3VzdG9tSGFuZGxlcnMoY3VzdG9tRXZlbnRUeXBlLCBldmVudCwgZWxlbWVudCwgZmlsZVBhdGgpO1xuICB9XG5cbiAgc2VsZWN0T3JEZXNlbGVjdERyYWdFbnRyeUl0ZW0oZXZlbnQsIGVsZW1lbnQsIGRyYWdFbnRyeUl0ZW0pIHtcbiAgICBjb25zdCBkaXNhYmxlZCA9IHRoaXMuaXNEaXNhYmxlZCgpO1xuXG4gICAgaWYgKGRpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHNlbGVjdGVkID0gZHJhZ0VudHJ5SXRlbS5pc1NlbGVjdGVkKCk7XG5cbiAgICBjb25zdCBwYXRoID0gZHJhZ0VudHJ5SXRlbS5nZXRQYXRoKCk7XG5cbiAgICBpZiAoc2VsZWN0ZWQpIHtcbiAgICAgIGRyYWdFbnRyeUl0ZW0uZGVzZWxlY3QoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kZXNlbGVjdEFsbFBhdGhzKCk7XG5cbiAgICAgIHRoaXMuc2VsZWN0UGF0aChwYXRoKTtcbiAgICB9XG5cbiAgICBzZWxlY3RlZCA9ICFzZWxlY3RlZDsgLy8vXG5cbiAgICBjb25zdCByZWFkT25seSA9IGRyYWdFbnRyeUl0ZW0uaXNSZWFkT25seSgpLFxuICAgICAgICAgIGN1c3RvbUV2ZW50VHlwZSA9IFNFTEVDVF9DVVNUT01fRVZFTlRfVFlQRTtcblxuICAgIHRoaXMuY2FsbEN1c3RvbUhhbmRsZXJzKGN1c3RvbUV2ZW50VHlwZSwgZXZlbnQsIGVsZW1lbnQsIHBhdGgsIHNlbGVjdGVkLCByZWFkT25seSk7XG5cbiAgICByZXR1cm4gc2VsZWN0ZWQ7XG4gIH1cblxuICBjcmVhdGVEcmFnRW50cnlJdGVtKGV2ZW50LCBlbGVtZW50LCBkcmFnRW50cnlJdGVtLCBkb25lKSB7XG4gICAgY29uc3Qgc291cmNlRW50cnlQYXRoID0gc291cmNlRW50cnlQYXRoRnJvbUVudHJ5SXRlbShkcmFnRW50cnlJdGVtKSxcbiAgICAgICAgICB0YXJnZXRFbnRyeVBhdGggPSB0YXJnZXRFbnRyeVBhdGhGcm9tRW50cnlJdGVtKGRyYWdFbnRyeUl0ZW0pLFxuICAgICAgICAgIHBhdGhNYXBzID0gZHJhZ0VudHJ5SXRlbS5nZXRQYXRoTWFwcyhzb3VyY2VFbnRyeVBhdGgsIHRhcmdldEVudHJ5UGF0aCksXG4gICAgICAgICAgZXhwbG9yZXIgPSB0aGlzOyAgLy8vXG5cbiAgICB0aGlzLmNyZWF0ZURyYWdFbnRyeUl0ZW1zKGV2ZW50LCBlbGVtZW50LCBwYXRoTWFwcywgZXhwbG9yZXIsIGRvbmUpO1xuICB9XG5cbiAgcmVuYW1lRHJhZ0VudHJ5SXRlbShldmVudCwgZWxlbWVudCwgZHJhZ0VudHJ5SXRlbSwgZG9uZSkge1xuICAgIGxldCBzb3VyY2VFbnRyeVBhdGgsXG4gICAgICAgIHRhcmdldEVudHJ5UGF0aDtcblxuICAgIHNvdXJjZUVudHJ5UGF0aCA9IHNvdXJjZUVudHJ5UGF0aEZyb21FbnRyeUl0ZW0oZHJhZ0VudHJ5SXRlbSk7XG4gICAgdGFyZ2V0RW50cnlQYXRoID0gdGFyZ2V0RW50cnlQYXRoRnJvbUVudHJ5SXRlbShkcmFnRW50cnlJdGVtKTtcblxuICAgIGNvbnN0IHBhdGhNYXBzID0gZHJhZ0VudHJ5SXRlbS5nZXRQYXRoTWFwcyhzb3VyY2VFbnRyeVBhdGgsIHRhcmdldEVudHJ5UGF0aCksXG4gICAgICAgICAgZmlyc3RQYXRoTWFwID0gZmlyc3QocGF0aE1hcHMpLFxuICAgICAgICAgIHBhdGhNYXAgPSBmaXJzdFBhdGhNYXA7IC8vL1xuXG4gICAgKHsgc291cmNlRW50cnlQYXRoLCB0YXJnZXRFbnRyeVBhdGggfSA9IHBhdGhNYXApO1xuXG4gICAgaWYgKHNvdXJjZUVudHJ5UGF0aCA9PT0gdGFyZ2V0RW50cnlQYXRoKSB7XG4gICAgICBkb25lKCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBleHBsb3JlciA9IHRoaXM7ICAvLy9cblxuICAgIHRoaXMucmVuYW1lRHJhZ0VudHJ5SXRlbXMoZXZlbnQsIGVsZW1lbnQsIHBhdGhNYXBzLCBleHBsb3JlciwgZG9uZSk7XG4gIH1cblxuICBkcm9wRHJhZ0VudHJ5SXRlbShldmVudCwgZWxlbWVudCwgZHJhZ0VudHJ5SXRlbSwgZG9uZSkge1xuICAgIGNvbnN0IGRyYWdFbnRyeUl0ZW1FeHBsb3JlciA9IGRyYWdFbnRyeUl0ZW0uZ2V0RXhwbG9yZXIoKSxcbiAgICAgICAgICBtYXJrZXJFbnRyeUl0ZW0gPSB0aGlzLnJldHJpZXZlTWFya2VyRW50cnlJdGVtKCksXG4gICAgICAgICAgc291cmNlRW50cnlQYXRoID0gc291cmNlRW50cnlQYXRoRnJvbUVudHJ5SXRlbShkcmFnRW50cnlJdGVtKSxcbiAgICAgICAgICB0YXJnZXRFbnRyeVBhdGggPSB0YXJnZXRFbnRyeVBhdGhGcm9tRW50cnlJdGVtKG1hcmtlckVudHJ5SXRlbSk7XG5cbiAgICBpZiAoKHNvdXJjZUVudHJ5UGF0aCA9PT0gdGFyZ2V0RW50cnlQYXRoKSAmJiAoZHJhZ0VudHJ5SXRlbUV4cGxvcmVyID09PSB0aGlzKSkge1xuICAgICAgdGhpcy5yZW1vdmVNYXJrZXIoKTtcblxuICAgICAgZG9uZSgpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGF0aE1hcHMgPSBkcmFnRW50cnlJdGVtLmdldFBhdGhNYXBzKHNvdXJjZUVudHJ5UGF0aCwgdGFyZ2V0RW50cnlQYXRoKSxcbiAgICAgICAgICBleHBsb3JlciA9IGRyYWdFbnRyeUl0ZW1FeHBsb3JlcjsgLy8vXG5cbiAgICB0aGlzLm1vdmVEcmFnRW50cnlJdGVtcyhldmVudCwgZWxlbWVudCwgcGF0aE1hcHMsIGV4cGxvcmVyLCBkb25lKTtcbiAgfVxuXG4gIHJlbmFtZURyYWdFbnRyeUl0ZW1zKGV2ZW50LCBlbGVtZW50LCBwYXRoTWFwcywgZXhwbG9yZXIsIGRvbmUpIHtcbiAgICBjb25zdCBjdXN0b21FdmVudFR5cGUgPSBSRU5BTUVfQ1VTVE9NX0VWRU5UX1RZUEU7XG5cbiAgICB0aGlzLmNhbGxDdXN0b21IYW5kbGVyc0FzeW5jKGN1c3RvbUV2ZW50VHlwZSwgZXZlbnQsIGVsZW1lbnQsIHBhdGhNYXBzLCAoKSA9PiB7XG4gICAgICBwYXRoTWFwcy5mb3JFYWNoKChwYXRoTWFwKSA9PiB7XG4gICAgICAgIHRoaXMucmVtb3ZlRHJhZ0VudHJ5SXRlbShwYXRoTWFwLCBleHBsb3Jlcik7XG4gICAgICB9KTtcblxuICAgICAgcGF0aE1hcHMuZm9yRWFjaCgocGF0aE1hcCkgPT4ge1xuICAgICAgICB0aGlzLmFkZERyYWdFbnRyeUl0ZW0ocGF0aE1hcCwgZXhwbG9yZXIpO1xuICAgICAgfSk7XG5cbiAgICAgIGRvbmUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIG1vdmVEcmFnRW50cnlJdGVtcyhldmVudCwgZWxlbWVudCwgcGF0aE1hcHMsIGV4cGxvcmVyLCBkb25lKSB7XG4gICAgY29uc3QgY3VzdG9tRXZlbnRUeXBlID0gTU9WRV9DVVNUT01fRVZFTlRfVFlQRTtcblxuICAgIHRoaXMuY2FsbEN1c3RvbUhhbmRsZXJzQXN5bmMoY3VzdG9tRXZlbnRUeXBlLCBldmVudCwgZWxlbWVudCwgcGF0aE1hcHMsICgpID0+IHtcbiAgICAgIHBhdGhNYXBzLmZvckVhY2goKHBhdGhNYXApID0+IHtcbiAgICAgICAgdGhpcy5yZW1vdmVEcmFnRW50cnlJdGVtKHBhdGhNYXAsIGV4cGxvcmVyKTtcbiAgICAgIH0pO1xuXG4gICAgICBwYXRoTWFwcy5mb3JFYWNoKChwYXRoTWFwKSA9PiB7XG4gICAgICAgIHRoaXMuYWRkRHJhZ0VudHJ5SXRlbShwYXRoTWFwLCBleHBsb3Jlcik7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5yZW1vdmVNYXJrZXIoKTtcblxuICAgICAgZG9uZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgcmVtb3ZlRHJhZ0VudHJ5SXRlbXMoZXZlbnQsIGVsZW1lbnQsIHBhdGhNYXBzLCBleHBsb3JlciwgZG9uZSkge1xuICAgIGNvbnN0IGN1c3RvbUV2ZW50VHlwZSA9IFJFTU9WRV9DVVNUT01fRVZFTlRfVFlQRTtcblxuICAgIHRoaXMuY2FsbEN1c3RvbUhhbmRsZXJzQXN5bmMoY3VzdG9tRXZlbnRUeXBlLCBldmVudCwgZWxlbWVudCwgcGF0aE1hcHMsICgpID0+IHtcbiAgICAgIHBhdGhNYXBzLmZvckVhY2goKHBhdGhNYXApID0+IHtcbiAgICAgICAgdGhpcy5yZW1vdmVEcmFnRW50cnlJdGVtKHBhdGhNYXAsIGV4cGxvcmVyKTtcbiAgICAgIH0pO1xuXG4gICAgICBwYXRoTWFwcy5mb3JFYWNoKChwYXRoTWFwKSA9PiB7XG4gICAgICAgIHRoaXMuYWRkRHJhZ0VudHJ5SXRlbShwYXRoTWFwLCBleHBsb3Jlcik7XG4gICAgICB9KTtcblxuICAgICAgZG9uZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgY3JlYXRlRHJhZ0VudHJ5SXRlbXMoZXZlbnQsIGVsZW1lbnQsIHBhdGhNYXBzLCBleHBsb3JlciwgZG9uZSkge1xuICAgIGNvbnN0IGN1c3RvbUV2ZW50VHlwZSA9IENSRUFURV9DVVNUT01fRVZFTlRfVFlQRTtcblxuICAgIHRoaXMuY2FsbEN1c3RvbUhhbmRsZXJzQXN5bmMoY3VzdG9tRXZlbnRUeXBlLCBldmVudCwgZWxlbWVudCwgcGF0aE1hcHMsICgpID0+IHtcbiAgICAgIHBhdGhNYXBzLmZvckVhY2goKHBhdGhNYXApID0+IHtcbiAgICAgICAgdGhpcy5yZW1vdmVEcmFnRW50cnlJdGVtKHBhdGhNYXAsIGV4cGxvcmVyKTtcbiAgICAgIH0pO1xuXG4gICAgICBwYXRoTWFwcy5mb3JFYWNoKChwYXRoTWFwKSA9PiB7XG4gICAgICAgIHRoaXMuYWRkRHJhZ0VudHJ5SXRlbShwYXRoTWFwLCBleHBsb3Jlcik7XG4gICAgICB9KTtcblxuICAgICAgZG9uZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgZW5hYmxlKCkge1xuICAgIGNvbnN0IGRpc2FibGVkID0gZmFsc2U7XG5cbiAgICB0aGlzLnNldERpc2FibGVkKGRpc2FibGVkKTtcblxuICAgIHRoaXMuZW5hYmxlRHJhZygpO1xuICB9XG5cbiAgZGlzYWJsZSgpIHtcbiAgICBjb25zdCBkaXNhYmxlZCA9IHRydWU7XG5cbiAgICB0aGlzLnNldERpc2FibGVkKGRpc2FibGVkKTtcblxuICAgIHRoaXMuZGlzYWJsZURyYWcoKTtcbiAgfVxuXG4gIGVuYWJsZURyYWcoKSB7XG4gICAgY29uc3QgZHJhZ0VudHJ5SXRlbXMgPSB0aGlzLnJldHJpZXZlRHJhZ0VudHJ5SXRlbXMoKTtcblxuICAgIGRyYWdFbnRyeUl0ZW1zLmZvckVhY2goKGRyYWdFbnRyeUl0ZW0pID0+IHtcbiAgICAgIGRyYWdFbnRyeUl0ZW0uZW5hYmxlRHJhZygpO1xuICAgIH0pO1xuICB9XG5cbiAgZGlzYWJsZURyYWcoKSB7XG4gICAgY29uc3QgZHJhZ0VudHJ5SXRlbXMgPSB0aGlzLnJldHJpZXZlRHJhZ0VudHJ5SXRlbXMoKTtcblxuICAgIGRyYWdFbnRyeUl0ZW1zLmZvckVhY2goKGRyYWdFbnRyeUl0ZW0pID0+IHtcbiAgICAgIGRyYWdFbnRyeUl0ZW0uZGlzYWJsZURyYWcoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGNsZWFySW50ZXJ2YWwoKSB7XG4gICAgY29uc3QgaW50ZXJ2YWwgPSBudWxsO1xuXG4gICAgdGhpcy5zZXRJbnRlcnZhbChpbnRlcnZhbCk7XG4gIH1cblxuICBjbGVhckNsaWNrZWREcmFnRW50cnlJdGVtKCkge1xuICAgIGNvbnN0IGNsaWNrZWREcmFnRW50cnlJdGVtID0gbnVsbDtcblxuICAgIHRoaXMuc2V0Q2xpY2tlZERyYWdFbnRyeUl0ZW0oY2xpY2tlZERyYWdFbnRyeUl0ZW0pO1xuICB9XG5cbiAgaXNEaXNhYmxlZCgpIHtcbiAgICBjb25zdCB7IGRpc2FibGVkIH0gPSB0aGlzLmdldFN0YXRlKCk7XG5cbiAgICByZXR1cm4gZGlzYWJsZWQ7XG4gIH1cblxuICBpc0VkaXRhYmxlKCkge1xuICAgIGNvbnN0IGVkaXRhYmxlRHJhZ0VudHJ5SXRlbSA9IHRoaXMucmV0cmlldmVFZGl0YWJsZURyYWdFbnRyeUl0ZW0oKSxcbiAgICAgICAgICBlZGl0YWJsZSA9IChlZGl0YWJsZURyYWdFbnRyeUl0ZW0gIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIGVkaXRhYmxlO1xuICB9XG5cbiAgZ2V0SW50ZXJ2YWwoKSB7XG4gICAgY29uc3QgeyBpbnRlcnZhbCB9ID0gdGhpcy5nZXRTdGF0ZSgpO1xuXG4gICAgcmV0dXJuIGludGVydmFsO1xuICB9XG5cbiAgaXNTaW5nbGVDbGljaygpIHtcbiAgICBjb25zdCB7IHNpbmdsZUNsaWNrIH0gPSB0aGlzLmdldFN0YXRlKCk7XG5cbiAgICByZXR1cm4gc2luZ2xlQ2xpY2s7XG4gIH1cblxuICBnZXRDbGlja2VkRHJhZ0VudHJ5SXRlbSgpIHtcbiAgICBjb25zdCB7IGNsaWNrZWREcmFnRW50cnlJdGVtIH0gPSB0aGlzLmdldFN0YXRlKCk7XG5cbiAgICByZXR1cm4gY2xpY2tlZERyYWdFbnRyeUl0ZW07XG4gIH1cblxuICBzZXREaXNhYmxlZChkaXNhYmxlZCkge1xuICAgIHRoaXMudXBkYXRlU3RhdGUoe1xuICAgICAgZGlzYWJsZWRcbiAgICB9KTtcbiAgfVxuXG4gIHNldEludGVydmFsKGludGVydmFsKSB7XG4gICAgdGhpcy51cGRhdGVTdGF0ZSh7XG4gICAgICBpbnRlcnZhbFxuICAgIH0pO1xuICB9XG5cbiAgc2V0U2luZ2xlQ2xpY2soc2luZ2xlQ2xpY2spIHtcbiAgICB0aGlzLnVwZGF0ZVN0YXRlKHtcbiAgICAgIHNpbmdsZUNsaWNrXG4gICAgfSk7XG4gIH1cblxuICBzZXRDbGlja2VkRHJhZ0VudHJ5SXRlbShjbGlja2VkRHJhZ0VudHJ5SXRlbSkge1xuICAgIHRoaXMudXBkYXRlU3RhdGUoe1xuICAgICAgY2xpY2tlZERyYWdFbnRyeUl0ZW1cbiAgICB9KTtcbiAgfVxuXG4gIGNhbmNlbEVkaXRhYmxlRHJhZ0VudHJ5SXRlbSgpIHtcbiAgICBjb25zdCBlZGl0YWJsZURyYWdFbnRyeUl0ZW0gPSB0aGlzLnJldHJpZXZlRWRpdGFibGVEcmFnRW50cnlJdGVtKCksXG4gICAgICAgICAgY3JlYXRlZCA9IGVkaXRhYmxlRHJhZ0VudHJ5SXRlbS5pc0NyZWF0ZWQoKTtcblxuICAgIGVkaXRhYmxlRHJhZ0VudHJ5SXRlbS5jYW5jZWwoY3JlYXRlZCk7XG4gIH1cblxuICBzZXRJbml0aWFsU3RhdGUoKSB7XG4gICAgY29uc3QgZGlzYWJsZWQgPSBmYWxzZSxcbiAgICAgICAgICBpbnRlcnZhbCA9IG51bGwsXG4gICAgICAgICAgc2luZ2xlQ2xpY2sgPSBmYWxzZSxcbiAgICAgICAgICBjbGlja2VkRHJhZ0VudHJ5SXRlbSA9IG51bGw7XG5cbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGRpc2FibGVkLFxuICAgICAgaW50ZXJ2YWwsXG4gICAgICBzaW5nbGVDbGljayxcbiAgICAgIGNsaWNrZWREcmFnRW50cnlJdGVtXG4gICAgfSk7XG4gIH1cblxuICBkaWRNb3VudCgpIHtcbiAgICBjb25zdCB7IHNpbmdsZUNsaWNrID0gZmFsc2UgfSA9IHRoaXMucHJvcGVydGllcztcblxuICAgIHRoaXMuc2V0U2luZ2xlQ2xpY2soc2luZ2xlQ2xpY2spO1xuXG4gICAgdGhpcy5lbmFibGVEcm9wKCk7XG5cbiAgICB0aGlzLm9uQ3VzdG9tRHJhZ092ZXIodGhpcy5kcmFnT3ZlckN1c3RvbUhhbmRsZXIpO1xuXG4gICAgdGhpcy5vbkN1c3RvbURyb3AodGhpcy5kcm9wQ3VzdG9tSGFuZGxlcik7XG4gIH1cblxuICB3aWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLmRpc2FibGVEcm9wKCk7XG5cbiAgICB0aGlzLm9mZkN1c3RvbURyYWdPdmVyKHRoaXMuZHJhZ092ZXJDdXN0b21IYW5kbGVyKTtcblxuICAgIHRoaXMub2ZmQ3VzdG9tRHJvcCh0aGlzLmRyb3BDdXN0b21IYW5kbGVyKTtcbiAgfVxuXG4gIGNoaWxkRWxlbWVudHMoKSB7XG4gIFx0Y29uc3QgZXhwbG9yZXIgPSB0aGlzOyAgLy8vXG5cbiAgXHRyZXR1cm4gKFxuXG4gIFx0XHQ8RW50cmllc0xpc3QgZXhwbG9yZXI9e2V4cGxvcmVyfSB0b3Btb3N0IC8+XG5cblx0XHQpO1xuXHR9XG5cbiAgcGFyZW50Q29udGV4dCgpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgY29sbGFwc2UgPSB0aGlzLmNvbGxhcHNlLmJpbmQodGhpcyksXG4gICAgICAgICAgZ2V0U2VsZWN0ZWRQYXRoID0gdGhpcy5nZXRTZWxlY3RlZFBhdGguYmluZCh0aGlzKSxcbiAgICAgICAgICByZXRyaWV2ZUZpbGVQYXRocyA9IHRoaXMucmV0cmlldmVGaWxlUGF0aHMuYmluZCh0aGlzKSxcbiAgICAgICAgICByZXRyaWV2ZURpcmVjdG9yeVBhdGhzID0gdGhpcy5yZXRyaWV2ZURpcmVjdG9yeVBhdGhzLmJpbmQodGhpcyk7XG5cbiAgICByZXR1cm4gKHtcbiAgICAgIC4uLmNvbnRleHQsXG4gICAgICBjb2xsYXBzZSxcbiAgICAgIGdldFNlbGVjdGVkUGF0aCxcbiAgICAgIHJldHJpZXZlRmlsZVBhdGhzLFxuICAgICAgcmV0cmlldmVEaXJlY3RvcnlQYXRoc1xuICAgIH0pO1xuICB9XG5cbiAgaW5pdGlhbGlzZSgpIHtcbiAgXHR0aGlzLmFzc2lnbkNvbnRleHQoKTtcblxuICAgIHRoaXMuc2V0SW5pdGlhbFN0YXRlKCk7XG5cdH1cblxuXHRzdGF0aWMgRW50cmllc0xpc3QgPSBFbnRyaWVzTGlzdDtcblxuICBzdGF0aWMgRmlsZU5hbWVEcmFnRW50cnlJdGVtID0gRmlsZU5hbWVEcmFnRW50cnlJdGVtO1xuXG4gIHN0YXRpYyBGaWxlTmFtZU1hcmtlckVudHJ5SXRlbSA9IEZpbGVOYW1lTWFya2VyRW50cnlJdGVtO1xuXG4gIHN0YXRpYyBEaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbSA9IERpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtO1xuXG4gIHN0YXRpYyBEaXJlY3RvcnlOYW1lTWFya2VyRW50cnlJdGVtID0gRGlyZWN0b3J5TmFtZU1hcmtlckVudHJ5SXRlbTtcblxuICBzdGF0aWMgdGFnTmFtZSA9IFwiZGl2XCI7XG5cbiAgc3RhdGljIGlnbm9yZWRQcm9wZXJ0aWVzID0gW1xuICAgIFwicmVmZXJlbmNlXCIsXG4gICAgXCJyZWZlcmVuY2VzXCIsXG4gICAgXCJzaW5nbGVDbGlja1wiXG4gIF07XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJleHBsb3JlclwiXG4gIH07XG59XG5cbk9iamVjdC5hc3NpZ24oRXhwbG9yZXIucHJvdG90eXBlLCBkcm9wTWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oRXhwbG9yZXIucHJvdG90eXBlLCBleHBsb3Jlck1peGlucyk7XG5PYmplY3QuYXNzaWduKEV4cGxvcmVyLnByb3RvdHlwZSwgZHJhZ0VudHJ5SXRlbU1peGlucyk7XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZShFeHBsb3JlcilgXG4gIFxuICBwYWRkaW5nOiAke2V4cGxvcmVyUGFkZGluZ307IFxuICBcbmA7XG4iXSwibmFtZXMiOlsiZmlyc3QiLCJhcnJheVV0aWxpdGllcyIsImNvbmNhdGVuYXRlUGF0aHMiLCJwYXRoV2l0aG91dEJvdHRvbW1vc3ROYW1lRnJvbVBhdGgiLCJwYXRoVXRpbGl0aWVzIiwiRXhwbG9yZXIiLCJFbGVtZW50IiwiZHJhZ092ZXJDdXN0b21IYW5kbGVyIiwiZXZlbnQiLCJlbGVtZW50IiwiZHJhZ0VsZW1lbnQiLCJkcmFnRW50cnlJdGVtIiwibWFya2VyRW50cnlJdGVtIiwicmV0cmlldmVNYXJrZXJFbnRyeUl0ZW0iLCJkcmFnRW50cnlJdGVtTmFtZSIsImdldE5hbWUiLCJtYXJrZXJFbnRyeUl0ZW1QYXRoIiwiZ2V0UGF0aCIsIm1hcmtlckVudHJ5SXRlbUV4cGxvcmVyIiwiZ2V0RXhwbG9yZXIiLCJwcmV2aW91c01hcmtlckVudHJ5SXRlbVBhdGgiLCJwcmV2aW91c01hcmtlckVudHJ5SXRlbUV4cGxvcmVyIiwiZHJhZ0VudHJ5SXRlbVR5cGUiLCJnZXRUeXBlIiwicmVtb3ZlTWFya2VyIiwiYWRkTWFya2VyIiwiZHJvcEN1c3RvbUhhbmRsZXIiLCJhYm9ydGVkIiwiZG9uZSIsImRyb3BEcmFnRW50cnlJdGVtIiwiZXhwbG9yZXIiLCJnZXRSZWZlcmVuY2UiLCJyZWZlcmVuY2UiLCJwcm9wZXJ0aWVzIiwiZ2V0UmVmZXJlbmNlcyIsInJlZmVyZW5jZXMiLCJnZXRFbnRyaWVzTGlzdCIsIkVudHJpZXNMaXN0IiwiZ2V0RmlsZU5hbWVEcmFnRW50cnlJdGVtIiwicmVhZE9ubHkiLCJGaWxlTmFtZURyYWdFbnRyeUl0ZW0iLCJnZXRGaWxlTmFtZU1hcmtlckVudHJ5SXRlbSIsIkZpbGVOYW1lTWFya2VyRW50cnlJdGVtIiwiZ2V0RGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW0iLCJ0b3Btb3N0IiwiRGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW0iLCJnZXREaXJlY3RvcnlOYW1lTWFya2VyRW50cnlJdGVtIiwiRGlyZWN0b3J5TmFtZU1hcmtlckVudHJ5SXRlbSIsInJldHJpZXZlUGF0aHMiLCJ0eXBlIiwiZHJhZ0VudHJ5SXRlbXMiLCJyZXRyaWV2ZURyYWdFbnRyeUl0ZW1zIiwicGF0aHMiLCJyZWR1Y2UiLCJkcmFnRW50cnlJdGVtUGF0aCIsInBhdGgiLCJwdXNoIiwicmV0cmlldmVGaWxlUGF0aHMiLCJGSUxFX05BTUVfRFJBR19FTlRSWV9UWVBFIiwiZmlsZVBhdGhzIiwicmV0cmlldmVEaXJlY3RvcnlQYXRocyIsIkRJUkVDVE9SWV9OQU1FX0RSQUdfRU5UUllfVFlQRSIsImRpcmVjdG9yeVBhdGhzIiwiY29sbGFwc2UiLCJkaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbXMiLCJyZXRyaWV2ZURpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtcyIsImZvckVhY2giLCJkaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbSIsImNyZWF0ZVBhdGgiLCJuYW1lIiwiUEVSSU9EIiwic2VsZWN0ZWREcmFnRW50cnlJdGVtIiwicmV0cmlldmVTZWxlY3RlZERyYWdFbnRyeUl0ZW0iLCJzZWxlY3RlZERyYWdFbnRyeUl0ZW1EaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbSIsImlzRGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW0iLCJkaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbVBhdGgiLCJleHBhbmQiLCJmaWxlTmFtZURyYWdFbnRyeUl0ZW0iLCJmaWxlTmFtZURyYWdFbnRyeUl0ZW1QYXRoIiwiZmlsZU5hbWVEcmFnRW50cnlJdGVtUGF0aFdpdGhvdXRCb3R0b21tb3N0TmFtZSIsImNyZWF0ZUZpbGVQYXRoIiwiZmlsZVBhdGgiLCJhZGRGaWxlUGF0aCIsImNyZWF0ZSIsImNyZWF0ZURpcmVjdG9yeVBhdGgiLCJjb2xsYXBzZWQiLCJkaXJlY3RvcnlQYXRoIiwiYWRkRGlyZWN0b3J5UGF0aCIsInJlbmFtZVNlbGVjdGVkUGF0aCIsInJlbmFtZSIsImdldFNlbGVjdGVkUGF0aCIsInNlbGVjdGVkUGF0aCIsInNlbGVjdGVkRHJhZ0VudHJ5SXRlbVBhdGgiLCJjbGlja0RyYWdFbnRyeUl0ZW0iLCJzaW5nbGVDbGljayIsImlzU2luZ2xlQ2xpY2siLCJzZWxlY3RlZCIsImNsaWNrIiwiY2xpY2tlZERyYWdFbnRyeUl0ZW0iLCJnZXRDbGlja2VkRHJhZ0VudHJ5SXRlbSIsImludGVydmFsIiwiZ2V0SW50ZXJ2YWwiLCJjbGVhckludGVydmFsIiwiY2xlYXJDbGlja2VkRHJhZ0VudHJ5SXRlbSIsImRlbGF5IiwiRE9VQkxFX0NMSUNLX0RFTEFZIiwic2V0VGltZW91dCIsInNldEludGVydmFsIiwic2V0Q2xpY2tlZERyYWdFbnRyeUl0ZW0iLCJkb3VibGVDbGljayIsIm9wZW5GaWxlTmFtZURyYWdFbnRyeUl0ZW0iLCJkaXNhYmxlZCIsImlzRGlzYWJsZWQiLCJjdXN0b21FdmVudFR5cGUiLCJPUEVOX0NVU1RPTV9FVkVOVF9UWVBFIiwiY2FsbEN1c3RvbUhhbmRsZXJzIiwic2VsZWN0T3JEZXNlbGVjdERyYWdFbnRyeUl0ZW0iLCJpc1NlbGVjdGVkIiwiZGVzZWxlY3QiLCJkZXNlbGVjdEFsbFBhdGhzIiwic2VsZWN0UGF0aCIsImlzUmVhZE9ubHkiLCJTRUxFQ1RfQ1VTVE9NX0VWRU5UX1RZUEUiLCJjcmVhdGVEcmFnRW50cnlJdGVtIiwic291cmNlRW50cnlQYXRoIiwic291cmNlRW50cnlQYXRoRnJvbUVudHJ5SXRlbSIsInRhcmdldEVudHJ5UGF0aCIsInRhcmdldEVudHJ5UGF0aEZyb21FbnRyeUl0ZW0iLCJwYXRoTWFwcyIsImdldFBhdGhNYXBzIiwiY3JlYXRlRHJhZ0VudHJ5SXRlbXMiLCJyZW5hbWVEcmFnRW50cnlJdGVtIiwiZmlyc3RQYXRoTWFwIiwicGF0aE1hcCIsInJlbmFtZURyYWdFbnRyeUl0ZW1zIiwiZHJhZ0VudHJ5SXRlbUV4cGxvcmVyIiwibW92ZURyYWdFbnRyeUl0ZW1zIiwiUkVOQU1FX0NVU1RPTV9FVkVOVF9UWVBFIiwiY2FsbEN1c3RvbUhhbmRsZXJzQXN5bmMiLCJyZW1vdmVEcmFnRW50cnlJdGVtIiwiYWRkRHJhZ0VudHJ5SXRlbSIsIk1PVkVfQ1VTVE9NX0VWRU5UX1RZUEUiLCJyZW1vdmVEcmFnRW50cnlJdGVtcyIsIlJFTU9WRV9DVVNUT01fRVZFTlRfVFlQRSIsIkNSRUFURV9DVVNUT01fRVZFTlRfVFlQRSIsImVuYWJsZSIsInNldERpc2FibGVkIiwiZW5hYmxlRHJhZyIsImRpc2FibGUiLCJkaXNhYmxlRHJhZyIsImdldFN0YXRlIiwiaXNFZGl0YWJsZSIsImVkaXRhYmxlRHJhZ0VudHJ5SXRlbSIsInJldHJpZXZlRWRpdGFibGVEcmFnRW50cnlJdGVtIiwiZWRpdGFibGUiLCJ1cGRhdGVTdGF0ZSIsInNldFNpbmdsZUNsaWNrIiwiY2FuY2VsRWRpdGFibGVEcmFnRW50cnlJdGVtIiwiY3JlYXRlZCIsImlzQ3JlYXRlZCIsImNhbmNlbCIsInNldEluaXRpYWxTdGF0ZSIsInNldFN0YXRlIiwiZGlkTW91bnQiLCJlbmFibGVEcm9wIiwib25DdXN0b21EcmFnT3ZlciIsIm9uQ3VzdG9tRHJvcCIsIndpbGxVbm1vdW50IiwiZGlzYWJsZURyb3AiLCJvZmZDdXN0b21EcmFnT3ZlciIsIm9mZkN1c3RvbURyb3AiLCJjaGlsZEVsZW1lbnRzIiwicGFyZW50Q29udGV4dCIsImNvbnRleHQiLCJnZXRDb250ZXh0IiwiYmluZCIsImluaXRpYWxpc2UiLCJhc3NpZ25Db250ZXh0IiwidGFnTmFtZSIsImlnbm9yZWRQcm9wZXJ0aWVzIiwiZGVmYXVsdFByb3BlcnRpZXMiLCJjbGFzc05hbWUiLCJPYmplY3QiLCJhc3NpZ24iLCJwcm90b3R5cGUiLCJkcm9wTWl4aW5zIiwiZXhwbG9yZXJNaXhpbnMiLCJkcmFnRW50cnlJdGVtTWl4aW5zIiwid2l0aFN0eWxlIiwiZXhwbG9yZXJQYWRkaW5nIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFzb0JBOzs7ZUFBQTs7O3NFQXBvQnNCO3NCQUVFO2lDQUNHOzJCQUNtQjtnRUFFdEI7aUVBQ0c7c0VBQ0s7aUVBQ0U7a0VBQ0U7c0VBQ0c7dUVBQ0U7d0JB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
|