@eo-sdk/client 11.7.0-beta.1 → 11.7.0-beta.2
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/app/eo-framework/actions/actions/workflow-action/simple-workflow-action.component.d.ts.map +1 -1
- package/app/eo-framework/app-shell/app-bar/app-search/app-search.component.d.ts +1 -1
- package/app/eo-framework/app-shell/app-bar/app-search/app-search.component.d.ts.map +1 -1
- package/app/eo-framework/form-elements/organization/organization.component.d.ts +1 -0
- package/app/eo-framework/form-elements/organization/organization.component.d.ts.map +1 -1
- package/app/eo-framework/grid/grid.component.d.ts +7 -0
- package/app/eo-framework/grid/grid.component.d.ts.map +1 -1
- package/app/eo-framework/object-details/object-details.component.d.ts +1 -0
- package/app/eo-framework/object-details/object-details.component.d.ts.map +1 -1
- package/app/eo-framework/object-details/object-history/object-history.component.d.ts +3 -2
- package/app/eo-framework/object-details/object-history/object-history.component.d.ts.map +1 -1
- package/app/eo-framework/result-list/result-list.component.d.ts.map +1 -1
- package/app/eo-framework/ui/indexdata-summary/indexdata-summary.component.d.ts +50 -0
- package/app/eo-framework/ui/indexdata-summary/indexdata-summary.component.d.ts.map +1 -1
- package/app/eo-framework/ui/indexdata-summary/indexdata-summary.interface.d.ts +10 -0
- package/app/eo-framework/ui/indexdata-summary/indexdata-summary.interface.d.ts.map +1 -0
- package/app/eo-framework-core/search/app-search.service.d.ts +12 -1
- package/app/eo-framework-core/search/app-search.service.d.ts.map +1 -1
- package/assets/_default/i18n/de.json +5 -3
- package/assets/_default/i18n/en.json +1132 -1130
- package/esm2022/app/eo-client/about-state/about-state.component.mjs +3 -3
- package/esm2022/app/eo-framework/actions/actions/workflow-action/simple-workflow-action.component.mjs +2 -2
- package/esm2022/app/eo-framework/app-shell/app-bar/app-search/app-search.component.mjs +18 -4
- package/esm2022/app/eo-framework/form-elements/organization/organization.component.mjs +25 -16
- package/esm2022/app/eo-framework/grid/extensions/filter/text/text-filter.component.mjs +3 -3
- package/esm2022/app/eo-framework/grid/grid.component.mjs +32 -6
- package/esm2022/app/eo-framework/object-details/object-details.component.mjs +8 -6
- package/esm2022/app/eo-framework/object-details/object-history/object-history.component.mjs +11 -6
- package/esm2022/app/eo-framework/result-list/result-list.component.mjs +7 -2
- package/esm2022/app/eo-framework/ui/indexdata-summary/indexdata-summary-entry/indexdata-summary-entry.component.mjs +2 -2
- package/esm2022/app/eo-framework/ui/indexdata-summary/indexdata-summary.component.mjs +138 -5
- package/esm2022/app/eo-framework/ui/indexdata-summary/indexdata-summary.interface.mjs +2 -0
- package/esm2022/app/eo-framework-core/search/app-search.service.mjs +25 -4
- package/fesm2022/eo-sdk-client.mjs +264 -725
- package/fesm2022/eo-sdk-client.mjs.map +1 -1
- package/misc/scripts/copy-client-assets.js +1 -1
- package/package.json +3 -3
- package/proxy.config.js +13 -0
- package/app/eo-framework/grid/row-grouping/batchRemover.d.ts +0 -13
- package/app/eo-framework/grid/row-grouping/batchRemover.d.ts.map +0 -1
- package/app/eo-framework/grid/row-grouping/group-stage.d.ts +0 -45
- package/app/eo-framework/grid/row-grouping/group-stage.d.ts.map +0 -1
- package/app/eo-framework/grid/row-grouping/row-grouping.module.d.ts +0 -8
- package/app/eo-framework/grid/row-grouping/row-grouping.module.d.ts.map +0 -1
- package/esm2022/app/eo-framework/grid/row-grouping/batchRemover.mjs +0 -50
- package/esm2022/app/eo-framework/grid/row-grouping/group-stage.mjs +0 -623
- package/esm2022/app/eo-framework/grid/row-grouping/row-grouping.module.mjs +0 -8
- package/proxy.config.json +0 -97
|
@@ -43,10 +43,9 @@ let IndexdataSummaryComponent = class IndexdataSummaryComponent {
|
|
|
43
43
|
const coreValues = this.processIndexData(indexdata, 0, true)
|
|
44
44
|
.map(({ label, _value, qname, reference }) => ({ label, reference, _value: diffValue(_value, coreValues2[qname]._value) }))
|
|
45
45
|
.filter(v => v._value);
|
|
46
|
-
const
|
|
47
|
-
const
|
|
48
|
-
|
|
49
|
-
.filter(v => v._value);
|
|
46
|
+
const indexDataArrayDetails = this.getIndexDataArrayDetails(indexdata);
|
|
47
|
+
const indexData2ArrayDetails = this.getIndexDataArrayDetails(indexdata2);
|
|
48
|
+
const dataValues = this.extractDataValuesWithDifferences(indexDataArrayDetails, indexData2ArrayDetails);
|
|
50
49
|
this.coreValues = coreValues;
|
|
51
50
|
this.dataValues = dataValues;
|
|
52
51
|
this.moreInfoAcc = !!dataValues.length;
|
|
@@ -88,6 +87,140 @@ let IndexdataSummaryComponent = class IndexdataSummaryComponent {
|
|
|
88
87
|
this.emptyState = false;
|
|
89
88
|
this.enableVersions = true;
|
|
90
89
|
this.isChangesTab = false;
|
|
90
|
+
/**
|
|
91
|
+
* Compares two values deeply to determine if they are equivalent.
|
|
92
|
+
*
|
|
93
|
+
* This function performs a deep comparison between two values to determine if they are equivalent.
|
|
94
|
+
* It compares objects recursively, including their enumerable properties.
|
|
95
|
+
*
|
|
96
|
+
* @param {any} val1 - The first value to compare.
|
|
97
|
+
* @param {any} val2 - The second value to compare.
|
|
98
|
+
* @returns {boolean} - Returns `true` if the values are deeply equal, otherwise `false`.
|
|
99
|
+
*/
|
|
100
|
+
this.compareContentValueEquality = (val1, val2) => {
|
|
101
|
+
if (val1 === val2)
|
|
102
|
+
return true;
|
|
103
|
+
if (typeof val1 !== 'object' || typeof val2 !== 'object' || val1 == null || val2 == null)
|
|
104
|
+
return false;
|
|
105
|
+
const val1keys = Object.keys(val1);
|
|
106
|
+
const val2keys = Object.keys(val2);
|
|
107
|
+
if (val1keys.length !== val2keys.length)
|
|
108
|
+
return false;
|
|
109
|
+
for (const key of val1keys) {
|
|
110
|
+
if (!val2keys.includes(key) || !this.compareContentValueEquality(val1[key], val2[key]))
|
|
111
|
+
return false;
|
|
112
|
+
}
|
|
113
|
+
return true;
|
|
114
|
+
};
|
|
115
|
+
/**
|
|
116
|
+
* Compares two values and returns a summary of their differences.
|
|
117
|
+
* If the values are arrays, it compares their lengths and, if equal, their contents.
|
|
118
|
+
* For non-array values, it checks for equality or if either is considered "empty" by a utility function.
|
|
119
|
+
*
|
|
120
|
+
* @param val1 The first value to compare.
|
|
121
|
+
* @param val2 The second value to compare.
|
|
122
|
+
* @returns An object with `val1` and `val2` properties representing the differences, or `null` if no differences are found.
|
|
123
|
+
* For arrays, the differences are the count of differing items or the difference in lengths.
|
|
124
|
+
* For other values, it returns the values themselves if they differ, or an empty string for "empty" values.
|
|
125
|
+
* Returns `null` if the values are equal or both "empty".
|
|
126
|
+
*/
|
|
127
|
+
this.getDataValueDifferences = (val1, val2) => {
|
|
128
|
+
if (Array.isArray(val1) && Array.isArray(val2)) {
|
|
129
|
+
const length1 = val1.length;
|
|
130
|
+
const length2 = val2.length;
|
|
131
|
+
if (length1 !== length2) {
|
|
132
|
+
return { val1: length1.toString(), val2: length2.toString() };
|
|
133
|
+
}
|
|
134
|
+
// Count content differences when lengths are the same
|
|
135
|
+
let differences = 0;
|
|
136
|
+
for (let i = 0; i < length1; i++) {
|
|
137
|
+
if (!this.compareContentValueEquality(val1[i], val2[i])) {
|
|
138
|
+
differences++;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
if (differences > 0) {
|
|
142
|
+
return { val1: differences.toString(), val2: differences.toString() };
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
return null;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
const isEmptyVal1 = UtilitiesService.isEmpty(val1);
|
|
149
|
+
const isEmptyVal2 = UtilitiesService.isEmpty(val2);
|
|
150
|
+
if (isEmptyVal1 && isEmptyVal2) {
|
|
151
|
+
return null;
|
|
152
|
+
}
|
|
153
|
+
if (val1 !== val2 || isEmptyVal1 || isEmptyVal2) {
|
|
154
|
+
return { val1: isEmptyVal1 ? "" : val1, val2: isEmptyVal2 ? "" : val2 };
|
|
155
|
+
}
|
|
156
|
+
return null;
|
|
157
|
+
};
|
|
158
|
+
/**
|
|
159
|
+
* Extracts properties from an object that are arrays and returns their details.
|
|
160
|
+
*
|
|
161
|
+
* @param {Object} data - The object to analyze.
|
|
162
|
+
* @returns {Array} An array of objects, each representing a property of the input object
|
|
163
|
+
* that is an array. Each object includes the property name (`label`), the number of elements
|
|
164
|
+
* in the array (`length`), the array content itself (`content`), and the type of the array (`type`).
|
|
165
|
+
*/
|
|
166
|
+
this.getIndexDataArrayDetails = (indexData) => {
|
|
167
|
+
const data = indexData.data;
|
|
168
|
+
const formElements = indexData.form.elements;
|
|
169
|
+
// Helper function to find the type of an element by its label
|
|
170
|
+
const findTypeAndLabelByName = (elements, label) => {
|
|
171
|
+
for (const element of elements) {
|
|
172
|
+
if (element.name === label) {
|
|
173
|
+
return { type: element.type, label: element.label };
|
|
174
|
+
}
|
|
175
|
+
if (element.elements && element.elements.length > 0) {
|
|
176
|
+
const typeLabelInfo = findTypeAndLabelByName(element.elements, label);
|
|
177
|
+
if (typeLabelInfo) {
|
|
178
|
+
return typeLabelInfo;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
return null;
|
|
183
|
+
};
|
|
184
|
+
return Object.keys(data)
|
|
185
|
+
.filter((key) => Array.isArray(data[key]))
|
|
186
|
+
.map((key) => {
|
|
187
|
+
const { type, label } = findTypeAndLabelByName(formElements, key);
|
|
188
|
+
return {
|
|
189
|
+
label,
|
|
190
|
+
length: data[key].length,
|
|
191
|
+
content: data[key],
|
|
192
|
+
type,
|
|
193
|
+
};
|
|
194
|
+
});
|
|
195
|
+
};
|
|
196
|
+
/**
|
|
197
|
+
* Compares the content of two sets of index data array details and extracts the differences.
|
|
198
|
+
*
|
|
199
|
+
* This function maps through the first set of index data array details, finds the matching
|
|
200
|
+
* content from the second set by label, and then calculates the differences between them.
|
|
201
|
+
* It returns an array of objects with labels and the calculated differences, filtering out
|
|
202
|
+
* any entries without a difference.
|
|
203
|
+
*
|
|
204
|
+
* @param {IndexDataArrayDetail[]} indexDataArrayDetails - The first set of index data array details.
|
|
205
|
+
* @param {IndexDataArrayDetail[]} indexData2ArrayDetails - The second set of index data array details.
|
|
206
|
+
* @returns {Array<{label: string, _value: any}>} An array of objects containing labels and their differences.
|
|
207
|
+
*/
|
|
208
|
+
this.extractDataValuesWithDifferences = (indexDataArrayDetails, indexData2ArrayDetails) => {
|
|
209
|
+
return indexDataArrayDetails.map(({ label, type, content }) => {
|
|
210
|
+
const matchingProp = indexData2ArrayDetails.find(prop => prop.label === label);
|
|
211
|
+
const content2 = matchingProp ? matchingProp.content : [];
|
|
212
|
+
const newValue = this.getDataValueDifferences(content, content2);
|
|
213
|
+
if (type === "TABLE" && newValue && newValue.val1 && newValue.val2) {
|
|
214
|
+
newValue.val1 = "";
|
|
215
|
+
newValue.val2 = this.translate.instant('eo.indexdata.summary.table.change');
|
|
216
|
+
}
|
|
217
|
+
return {
|
|
218
|
+
label,
|
|
219
|
+
type,
|
|
220
|
+
_value: newValue,
|
|
221
|
+
};
|
|
222
|
+
}).filter((v) => v._value);
|
|
223
|
+
};
|
|
91
224
|
}
|
|
92
225
|
onValueClick(event, item = {}) {
|
|
93
226
|
if (item.reference || item.version) {
|
|
@@ -160,4 +293,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImpor
|
|
|
160
293
|
}], diff: [{
|
|
161
294
|
type: Input
|
|
162
295
|
}] } });
|
|
163
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXhkYXRhLXN1bW1hcnkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9lby1mcmFtZXdvcmsvdWkvaW5kZXhkYXRhLXN1bW1hcnkvaW5kZXhkYXRhLXN1bW1hcnkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9lby1mcmFtZXdvcmsvdWkvaW5kZXhkYXRhLXN1bW1hcnkvaW5kZXhkYXRhLXN1bW1hcnkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSx5Q0FBeUMsQ0FBQztBQUN6RSxPQUFPLEVBQUMsdUJBQXVCLEVBQXFCLFNBQVMsRUFBRSxLQUFLLEVBQVMsTUFBTSxlQUFlLENBQUM7QUFDbkcsT0FBTyxFQUF3RixLQUFLLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFFMUgsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRTFDLE9BQU8sRUFBQyxZQUFZLEVBQUUsY0FBYyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7Ozs7Ozs7Ozs7QUFTNUQsSUFBTSx5QkFBeUIsR0FBL0IsTUFBTSx5QkFBeUI7O0lBc0JwQyxJQUNJLFNBQVMsQ0FBQyxFQUFhO1FBQ3pCLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDOUYsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2pELENB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LFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUdGLFNBQVM7c0JBRFosS0FBSztnQkFRRixTQUFTO3NCQURaLEtBQUs7Z0JBV08sSUFBSTtzQkFBaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7VXRpbGl0aWVzU2VydmljZX0gZnJvbSAnLi8uLi8uLi91dGlsL3NlcnZpY2VzL3V0aWxpdGllcy5zZXJ2aWNlJztcclxuaW1wb3J0IHtDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7QmFzZVBhcmFtcywgRG1zT2JqZWN0LCBEbXNTZXJ2aWNlLCBMb2NhbFN0b3JhZ2VTZXJ2aWNlLCBUcmFuc2xhdGVTZXJ2aWNlLCBVc2VyU2VydmljZSwgVXRpbHN9IGZyb20gJ0Blby1zZGsvY29yZSc7XHJcbmltcG9ydCB7R3JpZFNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2VvLWZyYW1ld29yay1jb3JlL2FwaS9ncmlkLnNlcnZpY2UnO1xyXG5pbXBvcnQge2NhdGNoRXJyb3J9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHtJU3VtbWFyeUVudHJ5RGlmZlZhbHVlfSBmcm9tICcuL2luZGV4ZGF0YS1zdW1tYXJ5LWVudHJ5LmludGVyZmFjZSc7XHJcbmltcG9ydCB7VW50aWxEZXN0cm95LCB1bnRpbERlc3Ryb3llZH0gZnJvbSAnQG5nbmVhdC91bnRpbC1kZXN0cm95JztcclxuXHJcbkBVbnRpbERlc3Ryb3koKVxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2VvLWluZGV4ZGF0YS1zdW1tYXJ5JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vaW5kZXhkYXRhLXN1bW1hcnkuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2luZGV4ZGF0YS1zdW1tYXJ5LmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuZXhwb3J0IGNsYXNzIEluZGV4ZGF0YVN1bW1hcnlDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBpc1VzZXJBbGxvd2VkVG9TaG93U3RvcmFnZVNlY3Rpb246IGJvb2xlYW47XHJcbiAgcHJpdmF0ZSBfaW5kZXhEYXRhOiBJbmRleERhdGE7XHJcblxyXG4gIGNvcmVWYWx1ZXM6IGFueVtdO1xyXG4gIGRhdGFWYWx1ZXM6IGFueVtdO1xyXG4gIGRhdGFWYWx1ZXMyOiBhbnlbXTtcclxuICBzdG9yYWdlSW5mb3M6IGFueVtdO1xyXG4gIGl0ZW06IERtc09iamVjdDtcclxuICBtb3JlSW5mb0FjYyA9IGZhbHNlO1xyXG4gIGRhdGFJbmZvQWNjID0gZmFsc2U7XHJcbiAgaW5mb0ZvbGRlckFjYyA9IGZhbHNlO1xyXG4gIHByaXZhdGUgY2FjaGVLZXkgPSAnYWNjb3JkaW9uLnN0YXRlLS0nO1xyXG4gIGRpZmZBY3RpdmUgPSBmYWxzZTtcclxuICBlbXB0eVN0YXRlID0gZmFsc2U7XHJcblxyXG5cclxuICBASW5wdXQoKSBiYXNlcGFyYW1zOiBCYXNlUGFyYW1zO1xyXG4gIEBJbnB1dCgpIGVuYWJsZVZlcnNpb25zID0gdHJ1ZTtcclxuICBASW5wdXQoKSBpc0NoYW5nZXNUYWIgPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgaW5kZXhkYXRhKGlkOiBJbmRleERhdGEpIHtcclxuICAgIHRoaXMuX2luZGV4RGF0YSA9IGlkO1xyXG4gICAgdGhpcy5jb3JlVmFsdWVzID0gdGhpcy5wcm9jZXNzSW5kZXhEYXRhKGlkLCAwKS5maWx0ZXIodmFsdWUgPT4gIXZhbHVlLm5hbWUuc3RhcnRzV2l0aCgneXV2JykpO1xyXG4gICAgdGhpcy5kYXRhVmFsdWVzID0gdGhpcy5wcm9jZXNzSW5kZXhEYXRhKGlkLCAxKTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGRtc09iamVjdChpdGVtOiBEbXNPYmplY3QpIHtcclxuICAgIHRoaXMuaXRlbSA9IGl0ZW07XHJcbiAgICB0aGlzLmdldEZvbGRlckluZm9zKGl0ZW0pO1xyXG4gICAgdGhpcy5zdG9yYWdlSW5mb3MgPSBudWxsO1xyXG4gICAgaWYgKGl0ZW0pIHtcclxuICAgICAgdGhpcy5nZXRTdG9yYWdlSW5mb3MoKTtcclxuICAgIH1cclxuICAgIHRoaXMuZ2V0Q2FjaGVkQWNjb3JkaW9uU3RhdGUoKTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIHNldCBkaWZmKHtpbmRleGRhdGEsIGluZGV4ZGF0YTIsIGJhc2VwYXJhbXMsIGJhc2VwYXJhbXMyfSkge1xyXG4gICAgdGhpcy5kaWZmQWN0aXZlID0gdHJ1ZTtcclxuXHJcbiAgICBjb25zdCBkaWZmVmFsdWUgPSAodmFsMSwgdmFsMik6IElTdW1tYXJ5RW50cnlEaWZmVmFsdWUgPT4gIShVdGlsaXRpZXNTZXJ2aWNlLmlzRW1wdHkodmFsMSkgJiYgVXRpbGl0aWVzU2VydmljZS5pc0VtcHR5KHZhbDIpKSAmJiB2YWwxICE9PSB2YWwyID8ge3ZhbDEsIHZhbDJ9IDogbnVsbDtcclxuXHJcbiAgICBpZiAoYmFzZXBhcmFtcyAmJiBiYXNlcGFyYW1zMikge1xyXG4gICAgICB0aGlzLmJhc2VwYXJhbXMgPSB7fSBhcyBCYXNlUGFyYW1zO1xyXG4gICAgICBbJ2NvbnRlbnRGaWxlTmFtZScsICdjb250ZW50RmlsZVNpemUnLCAnbWltZUdyb3VwJ11cclxuICAgICAgICAuZm9yRWFjaChrID0+IGRpZmZWYWx1ZShiYXNlcGFyYW1zW2tdLCBiYXNlcGFyYW1zMltrXSkgJiYgKHRoaXMuYmFzZXBhcmFtc1trXSA9IGRpZmZWYWx1ZShiYXNlcGFyYW1zW2tdLCBiYXNlcGFyYW1zMltrXSkpKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaW5kZXhkYXRhICYmIGluZGV4ZGF0YTIpIHtcclxuICAgICAgY29uc3QgY29yZVZhbHVlczIgPSB0aGlzLnByb2Nlc3NJbmRleERhdGEoaW5kZXhkYXRhMiwgMCwgdHJ1ZSkucmVkdWNlKChhY2MsIGN1cikgPT4gKGFjY1tjdXIucW5hbWVdID0gY3VyLCBhY2MpLCB7fSk7XHJcbiAgICAgIGNvbnN0IGNvcmVWYWx1ZXMgPSB0aGlzLnByb2Nlc3NJbmRleERhdGEoaW5kZXhkYXRhLCAwLCB0cnVlKVxyXG4gICAgICAgIC5tYXAoKHtsYWJlbCwgX3ZhbHVlLCBxbmFtZSwgcmVmZXJlbmNlfSkgPT4gKHtsYWJlbCwgcmVmZXJlbmNlLCBfdmFsdWU6IGRpZmZWYWx1ZShfdmFsdWUsIGNvcmVWYWx1ZXMyW3FuYW1lXS5fdmFsdWUpfSkpXHJcbiAgICAgICAgLmZpbHRlcih2ID0+IHYuX3ZhbHVlKTtcclxuXHJcbiAgICAgIGNvbnN0IGRhdGFWYWx1ZXMyID0gdGhpcy5wcm9jZXNzSW5kZXhEYXRhKGluZGV4ZGF0YTIsIDEsIHRydWUpLnJlZHVjZSgoYWNjLCBjdXIpID0+IChhY2NbY3VyLnFuYW1lXSA9IGN1ciwgYWNjKSwge30pO1xyXG4gICAgICBjb25zdCBkYXRhVmFsdWVzID0gdGhpcy5wcm9jZXNzSW5kZXhEYXRhKGluZGV4ZGF0YSwgMSwgdHJ1ZSlcclxuICAgICAgICAubWFwKCh7bGFiZWwsIF92YWx1ZSwgcW5hbWUsIHJlZmVyZW5jZX0pID0+ICh7bGFiZWwsIHJlZmVyZW5jZSwgX3ZhbHVlOiBkaWZmVmFsdWUoX3ZhbHVlLCBkYXRhVmFsdWVzMltxbmFtZV0uX3ZhbHVlKX0pKVxyXG4gICAgICAgIC5maWx0ZXIodiA9PiB2Ll92YWx1ZSk7XHJcblxyXG4gICAgICB0aGlzLmNvcmVWYWx1ZXMgPSBjb3JlVmFsdWVzO1xyXG4gICAgICB0aGlzLmRhdGFWYWx1ZXMgPSBkYXRhVmFsdWVzO1xyXG4gICAgICB0aGlzLm1vcmVJbmZvQWNjID0gISFkYXRhVmFsdWVzLmxlbmd0aDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmVtcHR5U3RhdGUgPSBVdGlsaXRpZXNTZXJ2aWNlLmlzRW1wdHkodGhpcy5jb3JlVmFsdWVzKSAmJiBVdGlsaXRpZXNTZXJ2aWNlLmlzRW1wdHkodGhpcy5kYXRhVmFsdWVzKSAmJiBVdGlsaXRpZXNTZXJ2aWNlLmlzRW1wdHkoT2JqZWN0LmtleXModGhpcy5iYXNlcGFyYW1zIHx8IHt9KSk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgY29sbGVjdChkYXRhOiB7fSwgZWxlbWVudHM6IGFueVtdID0gW10sIGNvbGxlY3Rpb246IGFueVtdLCBmb3JjZSA9IGZhbHNlKSB7XHJcbiAgICBlbGVtZW50cy5mb3JFYWNoKGVsID0+IHtcclxuICAgICAgaWYgKGVsLnR5cGUgIT09ICdUQUJMRScpIHtcclxuICAgICAgICBpZiAoZWwuZWxlbWVudHMpIHtcclxuICAgICAgICAgIGNvbGxlY3Rpb24uY29uY2F0KEluZGV4ZGF0YVN1bW1hcnlDb21wb25lbnQuY29sbGVjdChkYXRhLCBlbC5lbGVtZW50cywgY29sbGVjdGlvbiwgZm9yY2UpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbGV0IGtleSA9IGVsLm5hbWU7XHJcbiAgICAgICAgICBpZiAoZm9yY2UgfHwgKGRhdGEuaGFzT3duUHJvcGVydHkoa2V5KSAmJiAoQXJyYXkuaXNBcnJheShkYXRhW2tleV0pID8gZGF0YVtrZXldLmxlbmd0aCA6IHRydWUpKSkge1xyXG4gICAgICAgICAgICAvLyBvbmx5IGFkZCBhcnJheXMgd2hlbiB0aGV5IGNvbnRhaW4gYW55IHZhbHVlc1xyXG4gICAgICAgICAgICBjb2xsZWN0aW9uLnB1c2goT2JqZWN0LmFzc2lnbih7fSwgZWwsIHtcclxuICAgICAgICAgICAgICB2YWx1ZTogZGF0YVtrZXldLFxyXG4gICAgICAgICAgICAgIG1ldGE6IGRhdGFba2V5ICsgJ19tZXRhJ11cclxuICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gY29sbGVjdGlvbjtcclxuICB9XHJcblxyXG5cclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgcHVibGljIGdyaWRBcGk6IEdyaWRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBkbXNTZXJ2aWNlOiBEbXNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB1c2VyU2VydmljZTogVXNlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgc3RvcmFnZVNlcnZpY2U6IExvY2FsU3RvcmFnZVNlcnZpY2UpIHtcclxuXHJcbiAgfVxyXG5cclxuICBvblZhbHVlQ2xpY2soZXZlbnQ6IGFueSwgaXRlbTogYW55ID0ge30pIHtcclxuICAgIGlmIChpdGVtLnJlZmVyZW5jZSB8fCBpdGVtLnZlcnNpb24pIHtcclxuICAgICAgdGhpcy5ncmlkQXBpLm9wZW5Sb3V0ZXJMaW5rKGV2ZW50LCAnZW50cnknKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFZlcnNpb25MaW5rKHZlcnNpb246IG51bWJlcikge1xyXG4gICAgY29uc3QgbGluayA9IGB2ZXJzaW9ucy8ke3RoaXMuaXRlbS5pZH0/dHlwZT0ke3RoaXMuaXRlbS50eXBlTmFtZX0mdmVyc2lvbj0ke3ZlcnNpb259YDtcclxuICAgIHJldHVybiBgPGEgY2xhc3M9XCJsaW5rIHJvdXRlci1saW5rXCIgaHJlZj1cIiR7bGlua31cIiB0YXJnZXQ9XCJfYmxhbmtcIiBvbmNsaWNrPVwicmV0dXJuIGZhbHNlO1wiPiR7dmVyc2lvbn08L2E+YDtcclxuICB9XHJcblxyXG4gIHByb2Nlc3NJbmRleERhdGEoaWQ6IEluZGV4RGF0YSwgaW5kZXggPSAwLCBmb3JjZSA9IGZhbHNlKSB7XHJcbiAgICByZXR1cm4gaWQgJiYgaWQuZm9ybSAmJiBpZC5kYXRhID8gdGhpcy5ncmlkQXBpLmdldFJlc29sdmVkRGVmcyhJbmRleGRhdGFTdW1tYXJ5Q29tcG9uZW50LmNvbGxlY3QoaWQuZGF0YSwgaWQuZm9ybS5lbGVtZW50c1tpbmRleF0uZWxlbWVudHMsIFtdLCBmb3JjZSkpIDogW107XHJcbiAgfVxyXG5cclxuICBvbk1vcmVJbmZvVG9nZ2xlKGluZm86IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0SXRlbSh0aGlzLmNhY2hlS2V5ICsgJ21vcmUtaW5mbycsIEpTT04uc3RyaW5naWZ5KGluZm8pKTtcclxuICB9XHJcblxyXG4gIG9uQ29udGV4dGZvbGRlclRvZ2dsZShpbmZvOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldEl0ZW0odGhpcy5jYWNoZUtleSArICdjb250ZXh0Zm9sZGVyJywgSlNPTi5zdHJpbmdpZnkoaW5mbykpO1xyXG4gIH1cclxuXHJcbiAgb25TdG9yYWdlSW5mb1RvZ2dsZShpbmZvOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldEl0ZW0odGhpcy5jYWNoZUtleSArICdzdG9yYWdlLWluZm8nLCBKU09OLnN0cmluZ2lmeShpbmZvKSk7XHJcbiAgfVxyXG5cclxuICB0cmFja0J5SW5kZXgoaW5kZXgsIGl0ZW0pIHtcclxuICAgIHJldHVybiBpbmRleDtcclxuICB9XHJcblxyXG4gIGdldFN0b3JhZ2VJbmZvcygpIHtcclxuICAgIHRoaXMuZG1zU2VydmljZS5nZXREbXNPYmplY3RCeVBhcmFtcyh7aWQ6IHRoaXMuaXRlbS5pZCwgdHlwZTogdGhpcy5pdGVtLnR5cGVOYW1lLCB2ZXJzaW9uOiB0aGlzLml0ZW0udmVyc2lvbiwgcmVjeWNsZWJpbjogdHJ1ZSwgd2l0aFN0b3JhZ2VJbmZvOiB0cnVlfSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdW50aWxEZXN0cm95ZWQodGhpcyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcihVdGlscy5jYXRjaFNraXAoZXJyID0+IGVyci5zdGF0dXMgPT09IDQwNCkpXHJcbiAgICAgICkuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgICAgdGhpcy5zdG9yYWdlSW5mb3MgPSByZXMuc3RvcmFnZUluZm87XHJcbiAgICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRGb2xkZXJJbmZvcyhpdGVtOiBEbXNPYmplY3QpIHtcclxuICAgIHRoaXMuZGF0YVZhbHVlczIgPSBpdGVtLmNvbnRleHRGb2xkZXI/LnR5cGU/LmVsZW1lbnRzLmZpbHRlcihpdGVtcyA9PiBpdGVtcy5zZWxlY3RlZGZvcmVucmljaG1lbnQpLm1hcChpdGVtcyA9PiB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgLi4uaXRlbXMsXHJcbiAgICAgICAgZGF0YTogaXRlbS5jb250ZXh0Rm9sZGVyLmRhdGFbaXRlbXMubmFtZV1cclxuICAgICAgfTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRDYWNoZWRBY2NvcmRpb25TdGF0ZSgpIHtcclxuICAgIHRoaXMubW9yZUluZm9BY2MgPSBKU09OLnBhcnNlKHRoaXMuc3RvcmFnZVNlcnZpY2UuZ2V0SXRlbSh0aGlzLmNhY2hlS2V5ICsgJ21vcmUtaW5mbycpKTtcclxuICAgIHRoaXMuaW5mb0ZvbGRlckFjYyA9IEpTT04ucGFyc2UodGhpcy5zdG9yYWdlU2VydmljZS5nZXRJdGVtKHRoaXMuY2FjaGVLZXkgKyAnY29udGV4dGZvbGRlcicpKTtcclxuICAgIHRoaXMuZGF0YUluZm9BY2MgPSBKU09OLnBhcnNlKHRoaXMuc3RvcmFnZVNlcnZpY2UuZ2V0SXRlbSh0aGlzLmNhY2hlS2V5ICsgJ3N0b3JhZ2UtaW5mbycpKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5pc1VzZXJBbGxvd2VkVG9TaG93U3RvcmFnZVNlY3Rpb24gPSB0aGlzLnVzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCkuaGFzUHJpdmlsZWdlKCdNQU5BR0VfU1RPUkFHRVMnKTtcclxuICAgIHRoaXMuZ2V0Q2FjaGVkQWNjb3JkaW9uU3RhdGUoKTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSW5kZXhEYXRhIHtcclxuICBmb3JtOiBhbnk7XHJcbiAgZGF0YTogYW55O1xyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJlbXB0eS1jb250YWluZXJcIiAqbmdJZj1cImVtcHR5U3RhdGVcIj57eydlby5pbmRleGRhdGEuc3VtbWFyeS5uby5jaGFuZ2UnIHwgdHJhbnNsYXRlfX08L2Rpdj5cclxuPGRpdiBjbGFzcz1cImluZGV4ZGF0YS1zdW1tYXJ5XCI+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJjb3JlLXNlY3Rpb25cIiAqbmdJZj1cImNvcmVWYWx1ZXM/Lmxlbmd0aFwiPlxyXG5cclxuICAgIDxlby1pbmRleGRhdGEtc3VtbWFyeS1lbnRyeSAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjb3JlVmFsdWVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiaXRlbS5sYWJlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIml0ZW0uX3ZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25WYWx1ZUNsaWNrZWQpPVwib25WYWx1ZUNsaWNrKCRldmVudCwgaXRlbSlcIj5cclxuICAgIDwvZW8taW5kZXhkYXRhLXN1bW1hcnktZW50cnk+XHJcblxyXG4gICAgQGlmIChpdGVtPy5jb250ZXh0Rm9sZGVyKSB7XHJcbiAgICAgIDxlby1zaW1wbGUtYWNjb3JkaW9uIFtoZWFkZXJdPVwiaXRlbS5jb250ZXh0Rm9sZGVyPy50eXBlPy5sYWJlbCArICc6J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpdGVtXT1cIml0ZW1cIiBbc2VsZWN0ZWRdPVwiaW5mb0ZvbGRlckFjY1wiIChzZWxlY3RDaGFuZ2UpPVwib25Db250ZXh0Zm9sZGVyVG9nZ2xlKCRldmVudClcIj5cclxuICAgICAgICA8ZW8taW5kZXhkYXRhLXN1bW1hcnktZW50cnkgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZGF0YVZhbHVlczJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiaXRlbS5sYWJlbFwiIFt2YWx1ZV09XCJpdGVtLmRhdGFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25WYWx1ZUNsaWNrZWQpPVwib25WYWx1ZUNsaWNrKCRldmVudCwgaXRlbSlcIj5cclxuICAgICAgICA8L2VvLWluZGV4ZGF0YS1zdW1tYXJ5LWVudHJ5PlxyXG4gICAgICA8L2VvLXNpbXBsZS1hY2NvcmRpb24+XHJcbiAgICB9XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cImRhdGEtc2VjdGlvblwiICpuZ0lmPVwiZGF0YVZhbHVlcyAmJiBkYXRhVmFsdWVzLmxlbmd0aFwiPlxyXG4gICAgPGVvLXNpbXBsZS1hY2NvcmRpb24gI2RhdGFBY2NvcmRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtoZWFkZXJdPVwiKCdlby5pbmRleGRhdGEuc3VtbWFyeS5tb3JlJyB8IHRyYW5zbGF0ZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkXT1cIm1vcmVJbmZvQWNjXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3RDaGFuZ2UpPVwib25Nb3JlSW5mb1RvZ2dsZSgkZXZlbnQpXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkYXRhXCI+XHJcblxyXG4gICAgICAgIDxlby1pbmRleGRhdGEtc3VtbWFyeS1lbnRyeSAqbmdGb3I9XCJsZXQgaXRlbSBvZiBkYXRhVmFsdWVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIml0ZW0ubGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiaXRlbS5fdmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25WYWx1ZUNsaWNrZWQpPVwib25WYWx1ZUNsaWNrKCRldmVudCwgaXRlbSlcIj5cclxuICAgICAgICA8L2VvLWluZGV4ZGF0YS1zdW1tYXJ5LWVudHJ5PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZW8tc2ltcGxlLWFjY29yZGlvbj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImJhc2VwYXJhbXMtc2VjdGlvblwiICpuZ0lmPVwiYmFzZXBhcmFtc1wiPlxyXG5cclxuICAgIDxlby1pbmRleGRhdGEtc3VtbWFyeS1lbnRyeSAqbmdJZj1cImJhc2VwYXJhbXMubW9kaWZpZWRPbiAmJiAhZGlmZkFjdGl2ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzTmFtZV09XCInYmFzZXBhcmFtcy1zZWN0aW9uJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidlby5nbG9iYWwuYmFzZXBhcmFtLm1vZGlmaWVkJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImJhc2VwYXJhbXMubW9kaWZpZWRPbiB8IGxvY2FsZURhdGVcIj5cclxuICAgIDwvZW8taW5kZXhkYXRhLXN1bW1hcnktZW50cnk+XHJcblxyXG4gICAgPGVvLWluZGV4ZGF0YS1zdW1tYXJ5LWVudHJ5ICpuZ0lmPVwiIWRpZmZBY3RpdmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc05hbWVdPVwiJ2Jhc2VwYXJhbXMtc2VjdGlvbidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInZW8uZ2xvYmFsLmJhc2VwYXJhbS5tb2RpZmllcicgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJiYXNlcGFyYW1zLm1vZGlmaWVkQnlcIj5cclxuICAgIDwvZW8taW5kZXhkYXRhLXN1bW1hcnktZW50cnk+XHJcblxyXG4gICAgPGVvLWluZGV4ZGF0YS1zdW1tYXJ5LWVudHJ5ICpuZ0lmPVwiYmFzZXBhcmFtcy5jcmVhdGVkT24gJiYgIWRpZmZBY3RpdmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc05hbWVdPVwiJ2Jhc2VwYXJhbXMtc2VjdGlvbidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInZW8uZ2xvYmFsLmJhc2VwYXJhbS5jcmVhdGVkJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImJhc2VwYXJhbXMuY3JlYXRlZE9uIHwgbG9jYWxlRGF0ZVwiPlxyXG4gICAgPC9lby1pbmRleGRhdGEtc3VtbWFyeS1lbnRyeT5cclxuXHJcbiAgICA8ZW8taW5kZXhkYXRhLXN1bW1hcnktZW50cnkgKm5nSWY9XCIhZGlmZkFjdGl2ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzTmFtZV09XCInYmFzZXBhcmFtcy1zZWN0aW9uJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidlby5nbG9iYWwuYmFzZXBhcmFtLmNyZWF0b3InIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiYmFzZXBhcmFtcy5jcmVhdGVkQnlcIj5cclxuICAgIDwvZW8taW5kZXhkYXRhLXN1bW1hcnktZW50cnk+XHJcblxyXG4gICAgPGVvLWluZGV4ZGF0YS1zdW1tYXJ5LWVudHJ5ICpuZ0lmPVwiIWRpZmZBY3RpdmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc05hbWVdPVwiJ2Jhc2VwYXJhbXMtc2VjdGlvbidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInZW8ub2JqZWN0LnN1bW1hcnkudmVyc2lvbicgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJnZXRWZXJzaW9uTGluayhiYXNlcGFyYW1zLnZlcnNpb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25WYWx1ZUNsaWNrZWQpPVwib25WYWx1ZUNsaWNrKCRldmVudCwge3ZlcnNpb246IGJhc2VwYXJhbXMudmVyc2lvbn0pXCI+XHJcbiAgICA8L2VvLWluZGV4ZGF0YS1zdW1tYXJ5LWVudHJ5PlxyXG5cclxuXHJcbiAgICA8ZW8taW5kZXhkYXRhLXN1bW1hcnktZW50cnkgW2NsYXNzTmFtZV09XCInYmFzZXBhcmFtcy1zZWN0aW9uJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidlby5nbG9iYWwuYmFzZXBhcmFtLmZpbGVuYW1lJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImJhc2VwYXJhbXMuY29udGVudEZpbGVOYW1lXCI+XHJcbiAgICA8L2VvLWluZGV4ZGF0YS1zdW1tYXJ5LWVudHJ5PlxyXG5cclxuICAgIDxlby1pbmRleGRhdGEtc3VtbWFyeS1lbnRyeSAqbmdJZj1cImJhc2VwYXJhbXMuY29udGVudEZpbGVTaXplXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NOYW1lXT1cIidiYXNlcGFyYW1zLXNlY3Rpb24nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2VvLmdsb2JhbC5iYXNlcGFyYW0uZmlsZXNpemUnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZGlmZkFjdGl2ZSA/IHt2YWwxOiBiYXNlcGFyYW1zLmNvbnRlbnRGaWxlU2l6ZVsndmFsMSddIHwgZmlsZVNpemUsIHZhbDI6IGJhc2VwYXJhbXMuY29udGVudEZpbGVTaXplWyd2YWwyJ10gfCBmaWxlU2l6ZX0gOiAoYmFzZXBhcmFtcy5jb250ZW50RmlsZVNpemUgfCBmaWxlU2l6ZSlcIj5cclxuICAgIDwvZW8taW5kZXhkYXRhLXN1bW1hcnktZW50cnk+XHJcblxyXG4gICAgPGVvLWluZGV4ZGF0YS1zdW1tYXJ5LWVudHJ5IFtjbGFzc05hbWVdPVwiJ2Jhc2VwYXJhbXMtc2VjdGlvbidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInZW8uZ2xvYmFsLmJhc2VwYXJhbS5taW1ldHlwZWdyb3VwJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImJhc2VwYXJhbXMubWltZUdyb3VwXCI+XHJcbiAgICA8L2VvLWluZGV4ZGF0YS1zdW1tYXJ5LWVudHJ5PlxyXG5cclxuICAgIDxlby1pbmRleGRhdGEtc3VtbWFyeS1lbnRyeSBbY2xhc3NOYW1lXT1cIidiYXNlcGFyYW1zLXNlY3Rpb24nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2VvLmdsb2JhbC5iYXNlcGFyYW0ubWltZXR5cGUnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiYmFzZXBhcmFtcy5taW1lVHlwZVwiPlxyXG4gICAgPC9lby1pbmRleGRhdGEtc3VtbWFyeS1lbnRyeT5cclxuXHJcbiAgICA8ZW8taW5kZXhkYXRhLXN1bW1hcnktZW50cnkgKm5nSWY9XCIhZGlmZkFjdGl2ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzTmFtZV09XCInYmFzZXBhcmFtcy1zZWN0aW9uJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidlby5nbG9iYWwuYmFzZXBhcmFtLmlkJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImJhc2VwYXJhbXMuaWRcIj5cclxuICAgIDwvZW8taW5kZXhkYXRhLXN1bW1hcnktZW50cnk+XHJcblxyXG4gICAgPGVvLWluZGV4ZGF0YS1zdW1tYXJ5LWVudHJ5ICpuZ0lmPVwiYmFzZXBhcmFtcy5jb250ZW50SWQgIT09IGJhc2VwYXJhbXMuaWQgJiYgIWRpZmZBY3RpdmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc05hbWVdPVwiJ2Jhc2VwYXJhbXMtc2VjdGlvbidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInZW8uZ2xvYmFsLmJhc2VwYXJhbS5jb250ZW50SWQnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiYmFzZXBhcmFtcy5jb250ZW50SWRcIj5cclxuICAgIDwvZW8taW5kZXhkYXRhLXN1bW1hcnktZW50cnk+XHJcbiAgPC9kaXY+XHJcblxyXG4gIEBpZihzdG9yYWdlSW5mb3M/Lmxlbmd0aCAmJiBpc1VzZXJBbGxvd2VkVG9TaG93U3RvcmFnZVNlY3Rpb24gJiYgIWlzQ2hhbmdlc1RhYikge1xyXG4gICAgPGRpdiBjbGFzcz1cInN0b3JhZ2VpbmZvXCI+XHJcbiAgICAgIDxlby1zaW1wbGUtYWNjb3JkaW9uIFtoZWFkZXJdPVwiKCdlby5zdGF0ZS5zZXR0aW5ncy5zdG9yYWdlaW5mbycgfCB0cmFuc2xhdGUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkXT1cImRhdGFJbmZvQWNjXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdENoYW5nZSk9XCJvblN0b3JhZ2VJbmZvVG9nZ2xlKCRldmVudClcIj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0b3JhZ2VpbmZvLWVudHJ5IGJhc2VwYXJhbXMtc2VjdGlvblwiPlxyXG4gICAgICAgICAgPGVvLWluZGV4ZGF0YS1zdW1tYXJ5LWVudHJ5IFtjbGFzc05hbWVdPVwiJ3N0b3JhZ2VpbmZvLXN1YmVudHJ5J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidlby5nbG9iYWwuYmFzZXBhcmFtLmRpZ2VzdCcgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJiYXNlcGFyYW1zLmRpZ2VzdFwiPlxyXG4gICAgICAgICAgPC9lby1pbmRleGRhdGEtc3VtbWFyeS1lbnRyeT5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0b3JhZ2VpbmZvLWVudHJ5IGJhc2VwYXJhbXMtc2VjdGlvblwiICpuZ0Zvcj1cImxldCBzdEluZm8gb2Ygc3RvcmFnZUluZm9zOyB0cmFja0J5OiB0cmFja0J5SW5kZXhcIj5cclxuICAgICAgICAgIDxlby1pbmRleGRhdGEtc3VtbWFyeS1lbnRyeSBbY2xhc3NOYW1lXT1cIidzdG9yYWdlaW5mby1zdWJlbnRyeSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInZW8ub2JqZWN0LnN0b3JhZ2VpbmZvLnJldGVudGlvbicgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJzdEluZm8ucmV0ZW50aW9uIHwgbG9jYWxlRGF0ZSA6ICdlb1Nob3J0RGF0ZSdcIj5cclxuICAgICAgICAgIDwvZW8taW5kZXhkYXRhLXN1bW1hcnktZW50cnk+XHJcblxyXG4gICAgICAgICAgPGVvLWluZGV4ZGF0YS1zdW1tYXJ5LWVudHJ5IFtjbGFzc05hbWVdPVwiJ3N0b3JhZ2VpbmZvLXN1YmVudHJ5J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidlby5vYmplY3Quc3RvcmFnZWluZm8ucGVybWFuZW5jZScgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJzdEluZm8ucGVybWFuZW5jZVwiPlxyXG4gICAgICAgICAgPC9lby1pbmRleGRhdGEtc3VtbWFyeS1lbnRyeT5cclxuXHJcbiAgICAgICAgICA8ZW8taW5kZXhkYXRhLXN1bW1hcnktZW50cnkgW2NsYXNzTmFtZV09XCInc3RvcmFnZWluZm8tc3ViZW50cnknXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2VvLm9iamVjdC5zdG9yYWdlaW5mby5zZXRuYW1lJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInN0SW5mby5zZXRuYW1lXCI+XHJcbiAgICAgICAgICA8L2VvLWluZGV4ZGF0YS1zdW1tYXJ5LWVudHJ5PlxyXG5cclxuICAgICAgICAgIDxlby1pbmRleGRhdGEtc3VtbWFyeS1lbnRyeSBbY2xhc3NOYW1lXT1cIidzdG9yYWdlaW5mby1zdWJlbnRyeSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInZW8ub2JqZWN0LnN0b3JhZ2VpbmZvLnN0b3JhZ2VuYW1lJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInN0SW5mby5zdG9yYWdlbmFtZVwiPlxyXG4gICAgICAgICAgPC9lby1pbmRleGRhdGEtc3VtbWFyeS1lbnRyeT5cclxuXHJcbiAgICAgICAgICA8ZW8taW5kZXhkYXRhLXN1bW1hcnktZW50cnkgW2NsYXNzTmFtZV09XCInc3RvcmFnZWluZm8tc3ViZW50cnknXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2VvLm9iamVjdC5zdG9yYWdlaW5mby5sb2NhdGlvbicgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJzdEluZm8ubG9jYXRpb25cIj5cclxuICAgICAgICAgIDwvZW8taW5kZXhkYXRhLXN1bW1hcnktZW50cnk+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZW8tc2ltcGxlLWFjY29yZGlvbj5cclxuICAgIDwvZGl2PlxyXG4gIH1cclxuXHJcbjwvZGl2PlxyXG4iXX0=
|
|
296
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXhkYXRhLXN1bW1hcnkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9lby1mcmFtZXdvcmsvdWkvaW5kZXhkYXRhLXN1bW1hcnkvaW5kZXhkYXRhLXN1bW1hcnkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9lby1mcmFtZXdvcmsvdWkvaW5kZXhkYXRhLXN1bW1hcnkvaW5kZXhkYXRhLXN1bW1hcnkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSx5Q0FBeUMsQ0FBQztBQUN6RSxPQUFPLEVBQUMsdUJBQXVCLEVBQXFCLFNBQVMsRUFBRSxLQUFLLEVBQVMsTUFBTSxlQUFlLENBQUM7QUFDbkcsT0FBTyxFQUF3RixLQUFLLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFFMUgsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRTFDLE9BQU8sRUFBQyxZQUFZLEVBQUUsY0FBYyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7Ozs7Ozs7Ozs7QUFVNUQsSUFBTSx5QkFBeUIsR0FBL0IsTUFBTSx5QkFBeUI7O0lBc0JwQyxJQUNJLFNBQVMsQ0FBQyxFQUFhO1FBQ3pCLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDOUYsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2pELENB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ZX0gZnJvbSAnLi8uLi8uLi91dGlsL3NlcnZpY2VzL3V0aWxpdGllcy5zZXJ2aWNlJztcclxuaW1wb3J0IHtDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7QmFzZVBhcmFtcywgRG1zT2JqZWN0LCBEbXNTZXJ2aWNlLCBMb2NhbFN0b3JhZ2VTZXJ2aWNlLCBUcmFuc2xhdGVTZXJ2aWNlLCBVc2VyU2VydmljZSwgVXRpbHN9IGZyb20gJ0Blby1zZGsvY29yZSc7XHJcbmltcG9ydCB7R3JpZFNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2VvLWZyYW1ld29yay1jb3JlL2FwaS9ncmlkLnNlcnZpY2UnO1xyXG5pbXBvcnQge2NhdGNoRXJyb3J9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHtJU3VtbWFyeUVudHJ5RGlmZlZhbHVlfSBmcm9tICcuL2luZGV4ZGF0YS1zdW1tYXJ5LWVudHJ5LmludGVyZmFjZSc7XHJcbmltcG9ydCB7VW50aWxEZXN0cm95LCB1bnRpbERlc3Ryb3llZH0gZnJvbSAnQG5nbmVhdC91bnRpbC1kZXN0cm95JztcclxuaW1wb3J0IHtEYXRhVmFsdWVEaWZmZXJlbmNlLCBJbmRleERhdGFBcnJheURldGFpbHN9IGZyb20gJy4vaW5kZXhkYXRhLXN1bW1hcnkuaW50ZXJmYWNlJztcclxuXHJcbkBVbnRpbERlc3Ryb3koKVxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2VvLWluZGV4ZGF0YS1zdW1tYXJ5JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vaW5kZXhkYXRhLXN1bW1hcnkuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2luZGV4ZGF0YS1zdW1tYXJ5LmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuZXhwb3J0IGNsYXNzIEluZGV4ZGF0YVN1bW1hcnlDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBpc1VzZXJBbGxvd2VkVG9TaG93U3RvcmFnZVNlY3Rpb246IGJvb2xlYW47XHJcbiAgcHJpdmF0ZSBfaW5kZXhEYXRhOiBJbmRleERhdGE7XHJcblxyXG4gIGNvcmVWYWx1ZXM6IGFueVtdO1xyXG4gIGRhdGFWYWx1ZXM6IGFueVtdO1xyXG4gIGRhdGFWYWx1ZXMyOiBhbnlbXTtcclxuICBzdG9yYWdlSW5mb3M6IGFueVtdO1xyXG4gIGl0ZW06IERtc09iamVjdDtcclxuICBtb3JlSW5mb0FjYyA9IGZhbHNlO1xyXG4gIGRhdGFJbmZvQWNjID0gZmFsc2U7XHJcbiAgaW5mb0ZvbGRlckFjYyA9IGZhbHNlO1xyXG4gIHByaXZhdGUgY2FjaGVLZXkgPSAnYWNjb3JkaW9uLnN0YXRlLS0nO1xyXG4gIGRpZmZBY3RpdmUgPSBmYWxzZTtcclxuICBlbXB0eVN0YXRlID0gZmFsc2U7XHJcblxyXG5cclxuICBASW5wdXQoKSBiYXNlcGFyYW1zOiBCYXNlUGFyYW1zO1xyXG4gIEBJbnB1dCgpIGVuYWJsZVZlcnNpb25zID0gdHJ1ZTtcclxuICBASW5wdXQoKSBpc0NoYW5nZXNUYWIgPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgaW5kZXhkYXRhKGlkOiBJbmRleERhdGEpIHtcclxuICAgIHRoaXMuX2luZGV4RGF0YSA9IGlkO1xyXG4gICAgdGhpcy5jb3JlVmFsdWVzID0gdGhpcy5wcm9jZXNzSW5kZXhEYXRhKGlkLCAwKS5maWx0ZXIodmFsdWUgPT4gIXZhbHVlLm5hbWUuc3RhcnRzV2l0aCgneXV2JykpO1xyXG4gICAgdGhpcy5kYXRhVmFsdWVzID0gdGhpcy5wcm9jZXNzSW5kZXhEYXRhKGlkLCAxKTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGRtc09iamVjdChpdGVtOiBEbXNPYmplY3QpIHtcclxuICAgIHRoaXMuaXRlbSA9IGl0ZW07XHJcbiAgICB0aGlzLmdldEZvbGRlckluZm9zKGl0ZW0pO1xyXG4gICAgdGhpcy5zdG9yYWdlSW5mb3MgPSBudWxsO1xyXG4gICAgaWYgKGl0ZW0pIHtcclxuICAgICAgdGhpcy5nZXRTdG9yYWdlSW5mb3MoKTtcclxuICAgIH1cclxuICAgIHRoaXMuZ2V0Q2FjaGVkQWNjb3JkaW9uU3RhdGUoKTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIHNldCBkaWZmKHtpbmRleGRhdGEsIGluZGV4ZGF0YTIsIGJhc2VwYXJhbXMsIGJhc2VwYXJhbXMyfSkge1xyXG4gICAgdGhpcy5kaWZmQWN0aXZlID0gdHJ1ZTtcclxuXHJcbiAgICBjb25zdCBkaWZmVmFsdWUgPSAodmFsMSwgdmFsMik6IElTdW1tYXJ5RW50cnlEaWZmVmFsdWUgPT4gIShVdGlsaXRpZXNTZXJ2aWNlLmlzRW1wdHkodmFsMSkgJiYgVXRpbGl0aWVzU2VydmljZS5pc0VtcHR5KHZhbDIpKSAmJiB2YWwxICE9PSB2YWwyID8ge3ZhbDEsIHZhbDJ9IDogbnVsbDtcclxuXHJcbiAgICBpZiAoYmFzZXBhcmFtcyAmJiBiYXNlcGFyYW1zMikge1xyXG4gICAgICB0aGlzLmJhc2VwYXJhbXMgPSB7fSBhcyBCYXNlUGFyYW1zO1xyXG4gICAgICBbJ2NvbnRlbnRGaWxlTmFtZScsICdjb250ZW50RmlsZVNpemUnLCAnbWltZUdyb3VwJ11cclxuICAgICAgICAuZm9yRWFjaChrID0+IGRpZmZWYWx1ZShiYXNlcGFyYW1zW2tdLCBiYXNlcGFyYW1zMltrXSkgJiYgKHRoaXMuYmFzZXBhcmFtc1trXSA9IGRpZmZWYWx1ZShiYXNlcGFyYW1zW2tdLCBiYXNlcGFyYW1zMltrXSkpKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaW5kZXhkYXRhICYmIGluZGV4ZGF0YTIpIHtcclxuICAgICAgY29uc3QgY29yZVZhbHVlczIgPSB0aGlzLnByb2Nlc3NJbmRleERhdGEoaW5kZXhkYXRhMiwgMCwgdHJ1ZSkucmVkdWNlKChhY2MsIGN1cikgPT4gKGFjY1tjdXIucW5hbWVdID0gY3VyLCBhY2MpLCB7fSk7XHJcbiAgICAgIGNvbnN0IGNvcmVWYWx1ZXMgPSB0aGlzLnByb2Nlc3NJbmRleERhdGEoaW5kZXhkYXRhLCAwLCB0cnVlKVxyXG4gICAgICAgIC5tYXAoKHtsYWJlbCwgX3ZhbHVlLCBxbmFtZSwgcmVmZXJlbmNlfSkgPT4gKHtsYWJlbCwgcmVmZXJlbmNlLCBfdmFsdWU6IGRpZmZWYWx1ZShfdmFsdWUsIGNvcmVWYWx1ZXMyW3FuYW1lXS5fdmFsdWUpfSkpXHJcbiAgICAgICAgLmZpbHRlcih2ID0+IHYuX3ZhbHVlKTtcclxuXHJcbiAgICAgIGNvbnN0IGluZGV4RGF0YUFycmF5RGV0YWlsczogSW5kZXhEYXRhQXJyYXlEZXRhaWxzW10gPSB0aGlzLmdldEluZGV4RGF0YUFycmF5RGV0YWlscyhpbmRleGRhdGEpO1xyXG4gICAgICBjb25zdCBpbmRleERhdGEyQXJyYXlEZXRhaWxzOiBJbmRleERhdGFBcnJheURldGFpbHNbXSA9IHRoaXMuZ2V0SW5kZXhEYXRhQXJyYXlEZXRhaWxzKGluZGV4ZGF0YTIpO1xyXG4gICAgICBjb25zdCBkYXRhVmFsdWVzOiBEYXRhVmFsdWVEaWZmZXJlbmNlW10gPSB0aGlzLmV4dHJhY3REYXRhVmFsdWVzV2l0aERpZmZlcmVuY2VzKGluZGV4RGF0YUFycmF5RGV0YWlscywgaW5kZXhEYXRhMkFycmF5RGV0YWlscyk7XHJcblxyXG4gICAgICB0aGlzLmNvcmVWYWx1ZXMgPSBjb3JlVmFsdWVzO1xyXG4gICAgICB0aGlzLmRhdGFWYWx1ZXMgPSBkYXRhVmFsdWVzO1xyXG4gICAgICB0aGlzLm1vcmVJbmZvQWNjID0gISFkYXRhVmFsdWVzLmxlbmd0aDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmVtcHR5U3RhdGUgPSBVdGlsaXRpZXNTZXJ2aWNlLmlzRW1wdHkodGhpcy5jb3JlVmFsdWVzKSAmJiBVdGlsaXRpZXNTZXJ2aWNlLmlzRW1wdHkodGhpcy5kYXRhVmFsdWVzKSAmJiBVdGlsaXRpZXNTZXJ2aWNlLmlzRW1wdHkoT2JqZWN0LmtleXModGhpcy5iYXNlcGFyYW1zIHx8IHt9KSk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgY29sbGVjdChkYXRhOiB7fSwgZWxlbWVudHM6IGFueVtdID0gW10sIGNvbGxlY3Rpb246IGFueVtdLCBmb3JjZSA9IGZhbHNlKSB7XHJcbiAgICBlbGVtZW50cy5mb3JFYWNoKGVsID0+IHtcclxuICAgICAgaWYgKGVsLnR5cGUgIT09ICdUQUJMRScpIHtcclxuICAgICAgICBpZiAoZWwuZWxlbWVudHMpIHtcclxuICAgICAgICAgIGNvbGxlY3Rpb24uY29uY2F0KEluZGV4ZGF0YVN1bW1hcnlDb21wb25lbnQuY29sbGVjdChkYXRhLCBlbC5lbGVtZW50cywgY29sbGVjdGlvbiwgZm9yY2UpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbGV0IGtleSA9IGVsLm5hbWU7XHJcbiAgICAgICAgICBpZiAoZm9yY2UgfHwgKGRhdGEuaGFzT3duUHJvcGVydHkoa2V5KSAmJiAoQXJyYXkuaXNBcnJheShkYXRhW2tleV0pID8gZGF0YVtrZXldLmxlbmd0aCA6IHRydWUpKSkge1xyXG4gICAgICAgICAgICAvLyBvbmx5IGFkZCBhcnJheXMgd2hlbiB0aGV5IGNvbnRhaW4gYW55IHZhbHVlc1xyXG4gICAgICAgICAgICBjb2xsZWN0aW9uLnB1c2goT2JqZWN0LmFzc2lnbih7fSwgZWwsIHtcclxuICAgICAgICAgICAgICB2YWx1ZTogZGF0YVtrZXldLFxyXG4gICAgICAgICAgICAgIG1ldGE6IGRhdGFba2V5ICsgJ19tZXRhJ11cclxuICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gY29sbGVjdGlvbjtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICBwdWJsaWMgZ3JpZEFwaTogR3JpZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGRtc1NlcnZpY2U6IERtc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcclxuICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBzdG9yYWdlU2VydmljZTogTG9jYWxTdG9yYWdlU2VydmljZSkge1xyXG5cclxuICB9XHJcblxyXG4gIG9uVmFsdWVDbGljayhldmVudDogYW55LCBpdGVtOiBhbnkgPSB7fSkge1xyXG4gICAgaWYgKGl0ZW0ucmVmZXJlbmNlIHx8IGl0ZW0udmVyc2lvbikge1xyXG4gICAgICB0aGlzLmdyaWRBcGkub3BlblJvdXRlckxpbmsoZXZlbnQsICdlbnRyeScpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0VmVyc2lvbkxpbmsodmVyc2lvbjogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBsaW5rID0gYHZlcnNpb25zLyR7dGhpcy5pdGVtLmlkfT90eXBlPSR7dGhpcy5pdGVtLnR5cGVOYW1lfSZ2ZXJzaW9uPSR7dmVyc2lvbn1gO1xyXG4gICAgcmV0dXJuIGA8YSBjbGFzcz1cImxpbmsgcm91dGVyLWxpbmtcIiBocmVmPVwiJHtsaW5rfVwiIHRhcmdldD1cIl9ibGFua1wiIG9uY2xpY2s9XCJyZXR1cm4gZmFsc2U7XCI+JHt2ZXJzaW9ufTwvYT5gO1xyXG4gIH1cclxuXHJcbiAgcHJvY2Vzc0luZGV4RGF0YShpZDogSW5kZXhEYXRhLCBpbmRleCA9IDAsIGZvcmNlID0gZmFsc2UpIHtcclxuICAgIHJldHVybiBpZCAmJiBpZC5mb3JtICYmIGlkLmRhdGEgPyB0aGlzLmdyaWRBcGkuZ2V0UmVzb2x2ZWREZWZzKEluZGV4ZGF0YVN1bW1hcnlDb21wb25lbnQuY29sbGVjdChpZC5kYXRhLCBpZC5mb3JtLmVsZW1lbnRzW2luZGV4XS5lbGVtZW50cywgW10sIGZvcmNlKSkgOiBbXTtcclxuICB9XHJcblxyXG4gIG9uTW9yZUluZm9Ub2dnbGUoaW5mbzogYm9vbGVhbikge1xyXG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRJdGVtKHRoaXMuY2FjaGVLZXkgKyAnbW9yZS1pbmZvJywgSlNPTi5zdHJpbmdpZnkoaW5mbykpO1xyXG4gIH1cclxuXHJcbiAgb25Db250ZXh0Zm9sZGVyVG9nZ2xlKGluZm86IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0SXRlbSh0aGlzLmNhY2hlS2V5ICsgJ2NvbnRleHRmb2xkZXInLCBKU09OLnN0cmluZ2lmeShpbmZvKSk7XHJcbiAgfVxyXG5cclxuICBvblN0b3JhZ2VJbmZvVG9nZ2xlKGluZm86IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0SXRlbSh0aGlzLmNhY2hlS2V5ICsgJ3N0b3JhZ2UtaW5mbycsIEpTT04uc3RyaW5naWZ5KGluZm8pKTtcclxuICB9XHJcblxyXG4gIHRyYWNrQnlJbmRleChpbmRleCwgaXRlbSkge1xyXG4gICAgcmV0dXJuIGluZGV4O1xyXG4gIH1cclxuXHJcbiAgZ2V0U3RvcmFnZUluZm9zKCkge1xyXG4gICAgdGhpcy5kbXNTZXJ2aWNlLmdldERtc09iamVjdEJ5UGFyYW1zKHtpZDogdGhpcy5pdGVtLmlkLCB0eXBlOiB0aGlzLml0ZW0udHlwZU5hbWUsIHZlcnNpb246IHRoaXMuaXRlbS52ZXJzaW9uLCByZWN5Y2xlYmluOiB0cnVlLCB3aXRoU3RvcmFnZUluZm86IHRydWV9KVxyXG4gICAgICAucGlwZShcclxuICAgICAgICB1bnRpbERlc3Ryb3llZCh0aGlzKSxcclxuICAgICAgICBjYXRjaEVycm9yKFV0aWxzLmNhdGNoU2tpcChlcnIgPT4gZXJyLnN0YXR1cyA9PT0gNDA0KSlcclxuICAgICAgKS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgICB0aGlzLnN0b3JhZ2VJbmZvcyA9IHJlcy5zdG9yYWdlSW5mbztcclxuICAgICAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldEZvbGRlckluZm9zKGl0ZW06IERtc09iamVjdCkge1xyXG4gICAgdGhpcy5kYXRhVmFsdWVzMiA9IGl0ZW0uY29udGV4dEZvbGRlcj8udHlwZT8uZWxlbWVudHMuZmlsdGVyKGl0ZW1zID0+IGl0ZW1zLnNlbGVjdGVkZm9yZW5yaWNobWVudCkubWFwKGl0ZW1zID0+IHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICAuLi5pdGVtcyxcclxuICAgICAgICBkYXRhOiBpdGVtLmNvbnRleHRGb2xkZXIuZGF0YVtpdGVtcy5uYW1lXVxyXG4gICAgICB9O1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldENhY2hlZEFjY29yZGlvblN0YXRlKCkge1xyXG4gICAgdGhpcy5tb3JlSW5mb0FjYyA9IEpTT04ucGFyc2UodGhpcy5zdG9yYWdlU2VydmljZS5nZXRJdGVtKHRoaXMuY2FjaGVLZXkgKyAnbW9yZS1pbmZvJykpO1xyXG4gICAgdGhpcy5pbmZvRm9sZGVyQWNjID0gSlNPTi5wYXJzZSh0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0odGhpcy5jYWNoZUtleSArICdjb250ZXh0Zm9sZGVyJykpO1xyXG4gICAgdGhpcy5kYXRhSW5mb0FjYyA9IEpTT04ucGFyc2UodGhpcy5zdG9yYWdlU2VydmljZS5nZXRJdGVtKHRoaXMuY2FjaGVLZXkgKyAnc3RvcmFnZS1pbmZvJykpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29tcGFyZXMgdHdvIHZhbHVlcyBkZWVwbHkgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgYXJlIGVxdWl2YWxlbnQuXHJcbiAgICpcclxuICAgKiBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIGEgZGVlcCBjb21wYXJpc29uIGJldHdlZW4gdHdvIHZhbHVlcyB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmUgZXF1aXZhbGVudC5cclxuICAgKiBJdCBjb21wYXJlcyBvYmplY3RzIHJlY3Vyc2l2ZWx5LCBpbmNsdWRpbmcgdGhlaXIgZW51bWVyYWJsZSBwcm9wZXJ0aWVzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHthbnl9IHZhbDEgLSBUaGUgZmlyc3QgdmFsdWUgdG8gY29tcGFyZS5cclxuICAgKiBAcGFyYW0ge2FueX0gdmFsMiAtIFRoZSBzZWNvbmQgdmFsdWUgdG8gY29tcGFyZS5cclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBkZWVwbHkgZXF1YWwsIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gICAqL1xyXG4gIGNvbXBhcmVDb250ZW50VmFsdWVFcXVhbGl0eSA9ICh2YWwxOiBhbnksIHZhbDI6IGFueSk6IGJvb2xlYW4gPT4ge1xyXG4gICAgaWYgKHZhbDEgPT09IHZhbDIpIHJldHVybiB0cnVlO1xyXG5cclxuICAgIGlmICh0eXBlb2YgdmFsMSAhPT0gJ29iamVjdCcgfHwgdHlwZW9mIHZhbDIgIT09ICdvYmplY3QnIHx8IHZhbDEgPT0gbnVsbCB8fCB2YWwyID09IG51bGwpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBjb25zdCB2YWwxa2V5cyA9IE9iamVjdC5rZXlzKHZhbDEpO1xyXG4gICAgY29uc3QgdmFsMmtleXMgPSBPYmplY3Qua2V5cyh2YWwyKTtcclxuXHJcbiAgICBpZiAodmFsMWtleXMubGVuZ3RoICE9PSB2YWwya2V5cy5sZW5ndGgpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGtleSBvZiB2YWwxa2V5cykge1xyXG4gICAgICBpZiAoIXZhbDJrZXlzLmluY2x1ZGVzKGtleSkgfHwgIXRoaXMuY29tcGFyZUNvbnRlbnRWYWx1ZUVxdWFsaXR5KHZhbDFba2V5XSwgdmFsMltrZXldKSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbXBhcmVzIHR3byB2YWx1ZXMgYW5kIHJldHVybnMgYSBzdW1tYXJ5IG9mIHRoZWlyIGRpZmZlcmVuY2VzLlxyXG4gICAqIElmIHRoZSB2YWx1ZXMgYXJlIGFycmF5cywgaXQgY29tcGFyZXMgdGhlaXIgbGVuZ3RocyBhbmQsIGlmIGVxdWFsLCB0aGVpciBjb250ZW50cy5cclxuICAgKiBGb3Igbm9uLWFycmF5IHZhbHVlcywgaXQgY2hlY2tzIGZvciBlcXVhbGl0eSBvciBpZiBlaXRoZXIgaXMgY29uc2lkZXJlZCBcImVtcHR5XCIgYnkgYSB1dGlsaXR5IGZ1bmN0aW9uLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHZhbDEgVGhlIGZpcnN0IHZhbHVlIHRvIGNvbXBhcmUuXHJcbiAgICogQHBhcmFtIHZhbDIgVGhlIHNlY29uZCB2YWx1ZSB0byBjb21wYXJlLlxyXG4gICAqIEByZXR1cm5zIEFuIG9iamVjdCB3aXRoIGB2YWwxYCBhbmQgYHZhbDJgIHByb3BlcnRpZXMgcmVwcmVzZW50aW5nIHRoZSBkaWZmZXJlbmNlcywgb3IgYG51bGxgIGlmIG5vIGRpZmZlcmVuY2VzIGFyZSBmb3VuZC5cclxuICAgKiAgICAgICAgICBGb3IgYXJyYXlzLCB0aGUgZGlmZmVyZW5jZXMgYXJlIHRoZSBjb3VudCBvZiBkaWZmZXJpbmcgaXRlbXMgb3IgdGhlIGRpZmZlcmVuY2UgaW4gbGVuZ3Rocy5cclxuICAgKiAgICAgICAgICBGb3Igb3RoZXIgdmFsdWVzLCBpdCByZXR1cm5zIHRoZSB2YWx1ZXMgdGhlbXNlbHZlcyBpZiB0aGV5IGRpZmZlciwgb3IgYW4gZW1wdHkgc3RyaW5nIGZvciBcImVtcHR5XCIgdmFsdWVzLlxyXG4gICAqICAgICAgICAgIFJldHVybnMgYG51bGxgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWFsIG9yIGJvdGggXCJlbXB0eVwiLlxyXG4gICAqL1xyXG4gIGdldERhdGFWYWx1ZURpZmZlcmVuY2VzID0gKHZhbDE6IGFueSwgdmFsMjogYW55KTogSVN1bW1hcnlFbnRyeURpZmZWYWx1ZSA9PiB7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwxKSAmJiBBcnJheS5pc0FycmF5KHZhbDIpKSB7XHJcbiAgICAgIGNvbnN0IGxlbmd0aDEgPSB2YWwxLmxlbmd0aDtcclxuICAgICAgY29uc3QgbGVuZ3RoMiA9IHZhbDIubGVuZ3RoO1xyXG5cclxuICAgICAgaWYgKGxlbmd0aDEgIT09IGxlbmd0aDIpIHtcclxuICAgICAgICByZXR1cm4ge3ZhbDE6IGxlbmd0aDEudG9TdHJpbmcoKSwgdmFsMjogbGVuZ3RoMi50b1N0cmluZygpfTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gQ291bnQgY29udGVudCBkaWZmZXJlbmNlcyB3aGVuIGxlbmd0aHMgYXJlIHRoZSBzYW1lXHJcbiAgICAgIGxldCBkaWZmZXJlbmNlcyA9IDA7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoMTsgaSsrKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNvbXBhcmVDb250ZW50VmFsdWVFcXVhbGl0eSh2YWwxW2ldLCB2YWwyW2ldKSkge1xyXG4gICAgICAgICAgZGlmZmVyZW5jZXMrKztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChkaWZmZXJlbmNlcyA+IDApIHtcclxuICAgICAgICByZXR1cm4ge3ZhbDE6IGRpZmZlcmVuY2VzLnRvU3RyaW5nKCksIHZhbDI6IGRpZmZlcmVuY2VzLnRvU3RyaW5nKCl9O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgaXNFbXB0eVZhbDEgPSBVdGlsaXRpZXNTZXJ2aWNlLmlzRW1wdHkodmFsMSk7XHJcbiAgICBjb25zdCBpc0VtcHR5VmFsMiA9IFV0aWxpdGllc1NlcnZpY2UuaXNFbXB0eSh2YWwyKTtcclxuXHJcbiAgICBpZiAoaXNFbXB0eVZhbDEgJiYgaXNFbXB0eVZhbDIpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHZhbDEgIT09IHZhbDIgfHwgaXNFbXB0eVZhbDEgfHwgaXNFbXB0eVZhbDIpIHtcclxuICAgICAgcmV0dXJuIHt2YWwxOiBpc0VtcHR5VmFsMSA/IFwiXCIgOiB2YWwxLCB2YWwyOiBpc0VtcHR5VmFsMiA/IFwiXCIgOiB2YWwyfTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBFeHRyYWN0cyBwcm9wZXJ0aWVzIGZyb20gYW4gb2JqZWN0IHRoYXQgYXJlIGFycmF5cyBhbmQgcmV0dXJucyB0aGVpciBkZXRhaWxzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IGRhdGEgLSBUaGUgb2JqZWN0IHRvIGFuYWx5emUuXHJcbiAgICogQHJldHVybnMge0FycmF5fSBBbiBhcnJheSBvZiBvYmplY3RzLCBlYWNoIHJlcHJlc2VudGluZyBhIHByb3BlcnR5IG9mIHRoZSBpbnB1dCBvYmplY3RcclxuICAgKiB0aGF0IGlzIGFuIGFycmF5LiBFYWNoIG9iamVjdCBpbmNsdWRlcyB0aGUgcHJvcGVydHkgbmFtZSAoYGxhYmVsYCksIHRoZSBudW1iZXIgb2YgZWxlbWVudHNcclxuICAgKiBpbiB0aGUgYXJyYXkgKGBsZW5ndGhgKSwgdGhlIGFycmF5IGNvbnRlbnQgaXRzZWxmIChgY29udGVudGApLCBhbmQgdGhlIHR5cGUgb2YgdGhlIGFycmF5IChgdHlwZWApLlxyXG4gICAqL1xyXG4gIGdldEluZGV4RGF0YUFycmF5RGV0YWlscyA9IChpbmRleERhdGE6IHtba2V5OiBzdHJpbmddOiBhbnl9KTogSW5kZXhEYXRhQXJyYXlEZXRhaWxzW10gPT4ge1xyXG4gICAgY29uc3QgZGF0YSA9IGluZGV4RGF0YS5kYXRhO1xyXG4gICAgY29uc3QgZm9ybUVsZW1lbnRzID0gaW5kZXhEYXRhLmZvcm0uZWxlbWVudHM7XHJcblxyXG4gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGZpbmQgdGhlIHR5cGUgb2YgYW4gZWxlbWVudCBieSBpdHMgbGFiZWxcclxuICAgIGNvbnN0IGZpbmRUeXBlQW5kTGFiZWxCeU5hbWUgPSAoZWxlbWVudHMsIGxhYmVsKSA9PiB7XHJcbiAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBlbGVtZW50cykge1xyXG4gICAgICAgIGlmIChlbGVtZW50Lm5hbWUgPT09IGxhYmVsKSB7XHJcbiAgICAgICAgICByZXR1cm4ge3R5cGU6IGVsZW1lbnQudHlwZSwgbGFiZWw6IGVsZW1lbnQubGFiZWx9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZWxlbWVudC5lbGVtZW50cyAmJiBlbGVtZW50LmVsZW1lbnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGNvbnN0IHR5cGVMYWJlbEluZm8gPSBmaW5kVHlwZUFuZExhYmVsQnlOYW1lKGVsZW1lbnQuZWxlbWVudHMsIGxhYmVsKTtcclxuICAgICAgICAgIGlmICh0eXBlTGFiZWxJbmZvKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0eXBlTGFiZWxJbmZvO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGRhdGEpXHJcbiAgICAgIC5maWx0ZXIoKGtleSkgPT4gQXJyYXkuaXNBcnJheShkYXRhW2tleV0pKVxyXG4gICAgICAubWFwKChrZXkpID0+IHtcclxuICAgICAgICBjb25zdCB7dHlwZSwgbGFiZWx9ID0gZmluZFR5cGVBbmRMYWJlbEJ5TmFtZShmb3JtRWxlbWVudHMsIGtleSk7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIGxhYmVsLFxyXG4gICAgICAgICAgbGVuZ3RoOiBkYXRhW2tleV0ubGVuZ3RoLFxyXG4gICAgICAgICAgY29udGVudDogZGF0YVtrZXldLFxyXG4gICAgICAgICAgdHlwZSxcclxuICAgICAgICB9O1xyXG4gICAgICB9KTtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBDb21wYXJlcyB0aGUgY29udGVudCBvZiB0d28gc2V0cyBvZiBpbmRleCBkYXRhIGFycmF5IGRldGFpbHMgYW5kIGV4dHJhY3RzIHRoZSBkaWZmZXJlbmNlcy5cclxuICAgKlxyXG4gICAqIFRoaXMgZnVuY3Rpb24gbWFwcyB0aHJvdWdoIHRoZSBmaXJzdCBzZXQgb2YgaW5kZXggZGF0YSBhcnJheSBkZXRhaWxzLCBmaW5kcyB0aGUgbWF0Y2hpbmdcclxuICAgKiBjb250ZW50IGZyb20gdGhlIHNlY29uZCBzZXQgYnkgbGFiZWwsIGFuZCB0aGVuIGNhbGN1bGF0ZXMgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlbS5cclxuICAgKiBJdCByZXR1cm5zIGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCBsYWJlbHMgYW5kIHRoZSBjYWxjdWxhdGVkIGRpZmZlcmVuY2VzLCBmaWx0ZXJpbmcgb3V0XHJcbiAgICogYW55IGVudHJpZXMgd2l0aG91dCBhIGRpZmZlcmVuY2UuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0luZGV4RGF0YUFycmF5RGV0YWlsW119IGluZGV4RGF0YUFycmF5RGV0YWlscyAtIFRoZSBmaXJzdCBzZXQgb2YgaW5kZXggZGF0YSBhcnJheSBkZXRhaWxzLlxyXG4gICAqIEBwYXJhbSB7SW5kZXhEYXRhQXJyYXlEZXRhaWxbXX0gaW5kZXhEYXRhMkFycmF5RGV0YWlscyAtIFRoZSBzZWNvbmQgc2V0IG9mIGluZGV4IGRhdGEgYXJyYXkgZGV0YWlscy5cclxuICAgKiBAcmV0dXJucyB7QXJyYXk8e2xhYmVsOiBzdHJpbmcsIF92YWx1ZTogYW55fT59IEFuIGFycmF5IG9mIG9iamVjdHMgY29udGFpbmluZyBsYWJlbHMgYW5kIHRoZWlyIGRpZmZlcmVuY2VzLlxyXG4gICAqL1xyXG4gIGV4dHJhY3REYXRhVmFsdWVzV2l0aERpZmZlcmVuY2VzID0gKGluZGV4RGF0YUFycmF5RGV0YWlscywgaW5kZXhEYXRhMkFycmF5RGV0YWlscyk6IERhdGFWYWx1ZURpZmZlcmVuY2VbXSA9PiB7XHJcbiAgICByZXR1cm4gaW5kZXhEYXRhQXJyYXlEZXRhaWxzLm1hcCgoe2xhYmVsLCB0eXBlLCBjb250ZW50fSkgPT4ge1xyXG4gICAgICBjb25zdCBtYXRjaGluZ1Byb3AgPSBpbmRleERhdGEyQXJyYXlEZXRhaWxzLmZpbmQocHJvcCA9PiBwcm9wLmxhYmVsID09PSBsYWJlbCk7XHJcbiAgICAgIGNvbnN0IGNvbnRlbnQyID0gbWF0Y2hpbmdQcm9wID8gbWF0Y2hpbmdQcm9wLmNvbnRlbnQgOiBbXTtcclxuICAgICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLmdldERhdGFWYWx1ZURpZmZlcmVuY2VzKGNvbnRlbnQsIGNvbnRlbnQyKTtcclxuICAgICAgaWYgKHR5cGUgPT09IFwiVEFCTEVcIiAmJiBuZXdWYWx1ZSAmJiBuZXdWYWx1ZS52YWwxICYmIG5ld1ZhbHVlLnZhbDIpIHtcclxuICAgICAgICBuZXdWYWx1ZS52YWwxID0gXCJcIjtcclxuICAgICAgICBuZXdWYWx1ZS52YWwyID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8uaW5kZXhkYXRhLnN1bW1hcnkudGFibGUuY2hhbmdlJyk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBsYWJlbCxcclxuICAgICAgICB0eXBlLFxyXG4gICAgICAgIF92YWx1ZTogbmV3VmFsdWUsXHJcbiAgICAgIH07XHJcbiAgICB9KS5maWx0ZXIoKHY6IHtfdmFsdWU6IGFueTt9KSA9PiB2Ll92YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuaXNVc2VyQWxsb3dlZFRvU2hvd1N0b3JhZ2VTZWN0aW9uID0gdGhpcy51c2VyU2VydmljZS5nZXRDdXJyZW50VXNlcigpLmhhc1ByaXZpbGVnZSgnTUFOQUdFX1NUT1JBR0VTJyk7XHJcbiAgICB0aGlzLmdldENhY2hlZEFjY29yZGlvblN0YXRlKCk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEluZGV4RGF0YSB7XHJcbiAgZm9ybTogYW55O1xyXG4gIGRhdGE6IGFueTtcclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiZW1wdHktY29udGFpbmVyXCIgKm5nSWY9XCJlbXB0eVN0YXRlXCI+e3snZW8uaW5kZXhkYXRhLnN1bW1hcnkubm8uY2hhbmdlJyB8IHRyYW5zbGF0ZX19PC9kaXY+XHJcbjxkaXYgY2xhc3M9XCJpbmRleGRhdGEtc3VtbWFyeVwiPlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiY29yZS1zZWN0aW9uXCIgKm5nSWY9XCJjb3JlVmFsdWVzPy5sZW5ndGhcIj5cclxuXHJcbiAgICA8ZW8taW5kZXhkYXRhLXN1bW1hcnktZW50cnkgKm5nRm9yPVwibGV0IGl0ZW0gb2YgY29yZVZhbHVlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIml0ZW0ubGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJpdGVtLl92YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uVmFsdWVDbGlja2VkKT1cIm9uVmFsdWVDbGljaygkZXZlbnQsIGl0ZW0pXCI+XHJcbiAgICA8L2VvLWluZGV4ZGF0YS1zdW1tYXJ5LWVudHJ5PlxyXG5cclxuICAgIEBpZiAoaXRlbT8uY29udGV4dEZvbGRlcikge1xyXG4gICAgICA8ZW8tc2ltcGxlLWFjY29yZGlvbiBbaGVhZGVyXT1cIml0ZW0uY29udGV4dEZvbGRlcj8udHlwZT8ubGFiZWwgKyAnOidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbaXRlbV09XCJpdGVtXCIgW3NlbGVjdGVkXT1cImluZm9Gb2xkZXJBY2NcIiAoc2VsZWN0Q2hhbmdlKT1cIm9uQ29udGV4dGZvbGRlclRvZ2dsZSgkZXZlbnQpXCI+XHJcbiAgICAgICAgPGVvLWluZGV4ZGF0YS1zdW1tYXJ5LWVudHJ5ICpuZ0Zvcj1cImxldCBpdGVtIG9mIGRhdGFWYWx1ZXMyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIml0ZW0ubGFiZWxcIiBbdmFsdWVdPVwiaXRlbS5kYXRhXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uVmFsdWVDbGlja2VkKT1cIm9uVmFsdWVDbGljaygkZXZlbnQsIGl0ZW0pXCI+XHJcbiAgICAgICAgPC9lby1pbmRleGRhdGEtc3VtbWFyeS1lbnRyeT5cclxuICAgICAgPC9lby1zaW1wbGUtYWNjb3JkaW9uPlxyXG4gICAgfVxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJkYXRhLXNlY3Rpb25cIiAqbmdJZj1cImRhdGFWYWx1ZXMgJiYgZGF0YVZhbHVlcy5sZW5ndGhcIj5cclxuICAgIDxlby1zaW1wbGUtYWNjb3JkaW9uICNkYXRhQWNjb3JkaW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbaGVhZGVyXT1cIignZW8uaW5kZXhkYXRhLnN1bW1hcnkubW9yZScgfCB0cmFuc2xhdGUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZF09XCJtb3JlSW5mb0FjY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0Q2hhbmdlKT1cIm9uTW9yZUluZm9Ub2dnbGUoJGV2ZW50KVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZGF0YVwiPlxyXG5cclxuICAgICAgICA8ZW8taW5kZXhkYXRhLXN1bW1hcnktZW50cnkgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZGF0YVZhbHVlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJpdGVtLmxhYmVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIml0ZW0uX3ZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uVmFsdWVDbGlja2VkKT1cIm9uVmFsdWVDbGljaygkZXZlbnQsIGl0ZW0pXCI+XHJcbiAgICAgICAgPC9lby1pbmRleGRhdGEtc3VtbWFyeS1lbnRyeT5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2VvLXNpbXBsZS1hY2NvcmRpb24+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJiYXNlcGFyYW1zLXNlY3Rpb25cIiAqbmdJZj1cImJhc2VwYXJhbXNcIj5cclxuXHJcbiAgICA8ZW8taW5kZXhkYXRhLXN1bW1hcnktZW50cnkgKm5nSWY9XCJiYXNlcGFyYW1zLm1vZGlmaWVkT24gJiYgIWRpZmZBY3RpdmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc05hbWVdPVwiJ2Jhc2VwYXJhbXMtc2VjdGlvbidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInZW8uZ2xvYmFsLmJhc2VwYXJhbS5tb2RpZmllZCcgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJiYXNlcGFyYW1zLm1vZGlmaWVkT24gfCBsb2NhbGVEYXRlXCI+XHJcbiAgICA8L2VvLWluZGV4ZGF0YS1zdW1tYXJ5LWVudHJ5PlxyXG5cclxuICAgIDxlby1pbmRleGRhdGEtc3VtbWFyeS1lbnRyeSAqbmdJZj1cIiFkaWZmQWN0aXZlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NOYW1lXT1cIidiYXNlcGFyYW1zLXNlY3Rpb24nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2VvLmdsb2JhbC5iYXNlcGFyYW0ubW9kaWZpZXInIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiYmFzZXBhcmFtcy5tb2RpZmllZEJ5XCI+XHJcbiAgICA8L2VvLWluZGV4ZGF0YS1zdW1tYXJ5LWVudHJ5PlxyXG5cclxuICAgIDxlby1pbmRleGRhdGEtc3VtbWFyeS1lbnRyeSAqbmdJZj1cImJhc2VwYXJhbXMuY3JlYXRlZE9uICYmICFkaWZmQWN0aXZlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NOYW1lXT1cIidiYXNlcGFyYW1zLXNlY3Rpb24nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2VvLmdsb2JhbC5iYXNlcGFyYW0uY3JlYXRlZCcgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJiYXNlcGFyYW1zLmNyZWF0ZWRPbiB8IGxvY2FsZURhdGVcIj5cclxuICAgIDwvZW8taW5kZXhkYXRhLXN1bW1hcnktZW50cnk+XHJcblxyXG4gICAgPGVvLWluZGV4ZGF0YS1zdW1tYXJ5LWVudHJ5ICpuZ0lmPVwiIWRpZmZBY3RpdmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc05hbWVdPVwiJ2Jhc2VwYXJhbXMtc2VjdGlvbidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInZW8uZ2xvYmFsLmJhc2VwYXJhbS5jcmVhdG9yJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImJhc2VwYXJhbXMuY3JlYXRlZEJ5XCI+XHJcbiAgICA8L2VvLWluZGV4ZGF0YS1zdW1tYXJ5LWVudHJ5PlxyXG5cclxuICAgIDxlby1pbmRleGRhdGEtc3VtbWFyeS1lbnRyeSAqbmdJZj1cIiFkaWZmQWN0aXZlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NOYW1lXT1cIidiYXNlcGFyYW1zLXNlY3Rpb24nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2VvLm9iamVjdC5zdW1tYXJ5LnZlcnNpb24nIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZ2V0VmVyc2lvbkxpbmsoYmFzZXBhcmFtcy52ZXJzaW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uVmFsdWVDbGlja2VkKT1cIm9uVmFsdWVDbGljaygkZXZlbnQsIHt2ZXJzaW9uOiBiYXNlcGFyYW1zLnZlcnNpb259KVwiPlxyXG4gICAgPC9lby1pbmRleGRhdGEtc3VtbWFyeS1lbnRyeT5cclxuXHJcblxyXG4gICAgPGVvLWluZGV4ZGF0YS1zdW1tYXJ5LWVudHJ5IFtjbGFzc05hbWVdPVwiJ2Jhc2VwYXJhbXMtc2VjdGlvbidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInZW8uZ2xvYmFsLmJhc2VwYXJhbS5maWxlbmFtZScgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJiYXNlcGFyYW1zLmNvbnRlbnRGaWxlTmFtZVwiPlxyXG4gICAgPC9lby1pbmRleGRhdGEtc3VtbWFyeS1lbnRyeT5cclxuXHJcbiAgICA8ZW8taW5kZXhkYXRhLXN1bW1hcnktZW50cnkgKm5nSWY9XCJiYXNlcGFyYW1zLmNvbnRlbnRGaWxlU2l6ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzTmFtZV09XCInYmFzZXBhcmFtcy1zZWN0aW9uJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidlby5nbG9iYWwuYmFzZXBhcmFtLmZpbGVzaXplJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImRpZmZBY3RpdmUgPyB7dmFsMTogYmFzZXBhcmFtcy5jb250ZW50RmlsZVNpemVbJ3ZhbDEnXSB8IGZpbGVTaXplLCB2YWwyOiBiYXNlcGFyYW1zLmNvbnRlbnRGaWxlU2l6ZVsndmFsMiddIHwgZmlsZVNpemV9IDogKGJhc2VwYXJhbXMuY29udGVudEZpbGVTaXplIHwgZmlsZVNpemUpXCI+XHJcbiAgICA8L2VvLWluZGV4ZGF0YS1zdW1tYXJ5LWVudHJ5PlxyXG5cclxuICAgIDxlby1pbmRleGRhdGEtc3VtbWFyeS1lbnRyeSBbY2xhc3NOYW1lXT1cIidiYXNlcGFyYW1zLXNlY3Rpb24nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2VvLmdsb2JhbC5iYXNlcGFyYW0ubWltZXR5cGVncm91cCcgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJiYXNlcGFyYW1zLm1pbWVHcm91cFwiPlxyXG4gICAgPC9lby1pbmRleGRhdGEtc3VtbWFyeS1lbnRyeT5cclxuXHJcbiAgICA8ZW8taW5kZXhkYXRhLXN1bW1hcnktZW50cnkgW2NsYXNzTmFtZV09XCInYmFzZXBhcmFtcy1zZWN0aW9uJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidlby5nbG9iYWwuYmFzZXBhcmFtLm1pbWV0eXBlJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImJhc2VwYXJhbXMubWltZVR5cGVcIj5cclxuICAgIDwvZW8taW5kZXhkYXRhLXN1bW1hcnktZW50cnk+XHJcblxyXG4gICAgPGVvLWluZGV4ZGF0YS1zdW1tYXJ5LWVudHJ5ICpuZ0lmPVwiIWRpZmZBY3RpdmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc05hbWVdPVwiJ2Jhc2VwYXJhbXMtc2VjdGlvbidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInZW8uZ2xvYmFsLmJhc2VwYXJhbS5pZCcgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJiYXNlcGFyYW1zLmlkXCI+XHJcbiAgICA8L2VvLWluZGV4ZGF0YS1zdW1tYXJ5LWVudHJ5PlxyXG5cclxuICAgIDxlby1pbmRleGRhdGEtc3VtbWFyeS1lbnRyeSAqbmdJZj1cImJhc2VwYXJhbXMuY29udGVudElkICE9PSBiYXNlcGFyYW1zLmlkICYmICFkaWZmQWN0aXZlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NOYW1lXT1cIidiYXNlcGFyYW1zLXNlY3Rpb24nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2VvLmdsb2JhbC5iYXNlcGFyYW0uY29udGVudElkJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImJhc2VwYXJhbXMuY29udGVudElkXCI+XHJcbiAgICA8L2VvLWluZGV4ZGF0YS1zdW1tYXJ5LWVudHJ5PlxyXG4gIDwvZGl2PlxyXG5cclxuICBAaWYoc3RvcmFnZUluZm9zPy5sZW5ndGggJiYgaXNVc2VyQWxsb3dlZFRvU2hvd1N0b3JhZ2VTZWN0aW9uICYmICFpc0NoYW5nZXNUYWIpIHtcclxuICAgIDxkaXYgY2xhc3M9XCJzdG9yYWdlaW5mb1wiPlxyXG4gICAgICA8ZW8tc2ltcGxlLWFjY29yZGlvbiBbaGVhZGVyXT1cIignZW8uc3RhdGUuc2V0dGluZ3Muc3RvcmFnZWluZm8nIHwgdHJhbnNsYXRlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZF09XCJkYXRhSW5mb0FjY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3RDaGFuZ2UpPVwib25TdG9yYWdlSW5mb1RvZ2dsZSgkZXZlbnQpXCI+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdG9yYWdlaW5mby1lbnRyeSBiYXNlcGFyYW1zLXNlY3Rpb25cIj5cclxuICAgICAgICAgIDxlby1pbmRleGRhdGEtc3VtbWFyeS1lbnRyeSBbY2xhc3NOYW1lXT1cIidzdG9yYWdlaW5mby1zdWJlbnRyeSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInZW8uZ2xvYmFsLmJhc2VwYXJhbS5kaWdlc3QnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiYmFzZXBhcmFtcy5kaWdlc3RcIj5cclxuICAgICAgICAgIDwvZW8taW5kZXhkYXRhLXN1bW1hcnktZW50cnk+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdG9yYWdlaW5mby1lbnRyeSBiYXNlcGFyYW1zLXNlY3Rpb25cIiAqbmdGb3I9XCJsZXQgc3RJbmZvIG9mIHN0b3JhZ2VJbmZvczsgdHJhY2tCeTogdHJhY2tCeUluZGV4XCI+XHJcbiAgICAgICAgICA8ZW8taW5kZXhkYXRhLXN1bW1hcnktZW50cnkgW2NsYXNzTmFtZV09XCInc3RvcmFnZWluZm8tc3ViZW50cnknXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2VvLm9iamVjdC5zdG9yYWdlaW5mby5yZXRlbnRpb24nIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwic3RJbmZvLnJldGVudGlvbiB8IGxvY2FsZURhdGUgOiAnZW9TaG9ydERhdGUnXCI+XHJcbiAgICAgICAgICA8L2VvLWluZGV4ZGF0YS1zdW1tYXJ5LWVudHJ5PlxyXG5cclxuICAgICAgICAgIDxlby1pbmRleGRhdGEtc3VtbWFyeS1lbnRyeSBbY2xhc3NOYW1lXT1cIidzdG9yYWdlaW5mby1zdWJlbnRyeSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInZW8ub2JqZWN0LnN0b3JhZ2VpbmZvLnBlcm1hbmVuY2UnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwic3RJbmZvLnBlcm1hbmVuY2VcIj5cclxuICAgICAgICAgIDwvZW8taW5kZXhkYXRhLXN1bW1hcnktZW50cnk+XHJcblxyXG4gICAgICAgICAgPGVvLWluZGV4ZGF0YS1zdW1tYXJ5LWVudHJ5IFtjbGFzc05hbWVdPVwiJ3N0b3JhZ2VpbmZvLXN1YmVudHJ5J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidlby5vYmplY3Quc3RvcmFnZWluZm8uc2V0bmFtZScgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJzdEluZm8uc2V0bmFtZVwiPlxyXG4gICAgICAgICAgPC9lby1pbmRleGRhdGEtc3VtbWFyeS1lbnRyeT5cclxuXHJcbiAgICAgICAgICA8ZW8taW5kZXhkYXRhLXN1bW1hcnktZW50cnkgW2NsYXNzTmFtZV09XCInc3RvcmFnZWluZm8tc3ViZW50cnknXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2VvLm9iamVjdC5zdG9yYWdlaW5mby5zdG9yYWdlbmFtZScgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJzdEluZm8uc3RvcmFnZW5hbWVcIj5cclxuICAgICAgICAgIDwvZW8taW5kZXhkYXRhLXN1bW1hcnktZW50cnk+XHJcblxyXG4gICAgICAgICAgPGVvLWluZGV4ZGF0YS1zdW1tYXJ5LWVudHJ5IFtjbGFzc05hbWVdPVwiJ3N0b3JhZ2VpbmZvLXN1YmVudHJ5J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidlby5vYmplY3Quc3RvcmFnZWluZm8ubG9jYXRpb24nIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwic3RJbmZvLmxvY2F0aW9uXCI+XHJcbiAgICAgICAgICA8L2VvLWluZGV4ZGF0YS1zdW1tYXJ5LWVudHJ5PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2VvLXNpbXBsZS1hY2NvcmRpb24+XHJcbiAgICA8L2Rpdj5cclxuICB9XHJcblxyXG48L2Rpdj5cclxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXhkYXRhLXN1bW1hcnkuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9lby1mcmFtZXdvcmsvdWkvaW5kZXhkYXRhLXN1bW1hcnkvaW5kZXhkYXRhLXN1bW1hcnkuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIEluZGV4RGF0YUFycmF5RGV0YWlscyB7XHJcbiAgbGFiZWw6IHN0cmluZztcclxuICBsZW5ndGg6IG51bWJlcjtcclxuICBjb250ZW50OiBhbnlbXTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBEYXRhVmFsdWVEaWZmZXJlbmNlIHtcclxuICBsYWJlbDogc3RyaW5nO1xyXG4gIF92YWx1ZTogYW55O1xyXG59XHJcbiJdfQ==
|
|
@@ -4,16 +4,18 @@ import { Injectable } from '@angular/core';
|
|
|
4
4
|
import { SearchQuery, SearchState, EnaioEvent, Utils } from '@eo-sdk/core';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
6
|
import * as i1 from "@eo-sdk/core";
|
|
7
|
+
import * as i2 from "@ngx-translate/core";
|
|
7
8
|
/**
|
|
8
9
|
* AppSearchService is the apps main entry point for searching (used by the appBarSearch component).
|
|
9
10
|
* It provides an `query$` observable components can subscribe to, to
|
|
10
11
|
* stay in touch with updates to the query.
|
|
11
12
|
*/
|
|
12
13
|
export class AppSearchService {
|
|
13
|
-
constructor(searchService, eventService, system) {
|
|
14
|
+
constructor(searchService, eventService, system, translate) {
|
|
14
15
|
this.searchService = searchService;
|
|
15
16
|
this.eventService = eventService;
|
|
16
17
|
this.system = system;
|
|
18
|
+
this.translate = translate;
|
|
17
19
|
this.query = new SearchQuery();
|
|
18
20
|
this.lastQuery = new SearchQuery();
|
|
19
21
|
this.queryState = new SearchState();
|
|
@@ -42,6 +44,8 @@ export class AppSearchService {
|
|
|
42
44
|
// These groups are provided through the services `objectTypeGroups` property.
|
|
43
45
|
this.system.system$.subscribe((systemDefinition) => {
|
|
44
46
|
this.typesAllowedUnderSysroot = systemDefinition.types.filter(type => type.parenttypes.includes('sysroot'));
|
|
47
|
+
// translates labels for 'sysdmscontenttemplate' object types.
|
|
48
|
+
this.typesAllowedUnderSysroot = this.updateSysDmsContentTemplateLabel(systemDefinition.types);
|
|
45
49
|
let groups = [];
|
|
46
50
|
observableFrom(systemDefinition.types)
|
|
47
51
|
.pipe(groupBy((type) => type.group || '0'), mergeMap(g => g.pipe(reduce((acc, curr) => [...acc, curr], []))))
|
|
@@ -378,10 +382,27 @@ export class AppSearchService {
|
|
|
378
382
|
}
|
|
379
383
|
return match;
|
|
380
384
|
}
|
|
381
|
-
|
|
385
|
+
/**
|
|
386
|
+
* Updates the label of `sysdmscontenttemplate` object types using translations.
|
|
387
|
+
*
|
|
388
|
+
* This method is useful for ensuring that the displayed labels for these object types are localized.
|
|
389
|
+
*
|
|
390
|
+
* @param {ObjectType[]} types - An array of object types to update.
|
|
391
|
+
* @returns {ObjectType[]} The updated array of object types with translated labels for `sysdmscontenttemplate` types.
|
|
392
|
+
*/
|
|
393
|
+
updateSysDmsContentTemplateLabel(types) {
|
|
394
|
+
return types.map((type) => {
|
|
395
|
+
if (type.qname === 'sysdmscontenttemplate') {
|
|
396
|
+
type.actualLabel = type.actualLabel || type.label;
|
|
397
|
+
type.label = this.translate.instant(`eo.type.label.${type.actualLabel.toLowerCase()}`);
|
|
398
|
+
}
|
|
399
|
+
return type;
|
|
400
|
+
});
|
|
401
|
+
}
|
|
402
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: AppSearchService, deps: [{ token: i1.SearchService }, { token: i1.EventService }, { token: i1.SystemService }, { token: i2.TranslateService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
382
403
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: AppSearchService }); }
|
|
383
404
|
}
|
|
384
405
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: AppSearchService, decorators: [{
|
|
385
406
|
type: Injectable
|
|
386
|
-
}], ctorParameters: () => [{ type: i1.SearchService }, { type: i1.EventService }, { type: i1.SystemService }] });
|
|
387
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLXNlYXJjaC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9lby1mcmFtZXdvcmstY29yZS9zZWFyY2gvYXBwLXNlYXJjaC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxJQUFJLElBQUksY0FBYyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQWEsTUFBTSxNQUFNLENBQUM7QUFDeEYsT0FBTyxFQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDekQsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQ1MsV0FBVyxFQUFFLFdBQVcsRUFDRyxVQUFVLEVBQUUsS0FBSyxFQUMzRCxNQUFNLGNBQWMsQ0FBQzs7O0FBRXRCOzs7O0dBSUc7QUFFSCxNQUFNLE9BQU8sZ0JBQWdCO0lBMkIzQixZQUFvQixhQUE0QixFQUN0QyxZQUEwQixFQUMxQixNQUFxQjtRQUZYLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQ3RDLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLFdBQU0sR0FBTixNQUFNLENBQWU7UUEzQnZCLFVBQUssR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBRTFCLGNBQVMsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQzlCLGVBQVUsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBS3ZDLHlFQUF5RTtRQUN6RSxxSkFBcUo7UUFDckosb0dBQW9HO1FBQzVGLGdCQUFXLEdBQUcsSUFBSSxhQUFhLENBQWMsQ0FBQyxDQUFDLENBQUM7UUFDaEQscUJBQWdCLEdBQUcsSUFBSSxlQUFlLENBQWMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRTdFLHlGQUF5RjtRQUN6Riw2RkFBNkY7UUFDN0YsdUJBQXVCO1FBQ2hCLFdBQU0sR0FBNEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN6RSx1RkFBdUY7UUFDdkYsOEZBQThGO1FBQzlGLDRGQUE0RjtRQUNyRixnQkFBVyxHQUE0QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDNUUscUJBQWdCLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLDZCQUF3QixHQUFHLEVBQUUsQ0FBQztRQU1uQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNwQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDZixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25CLENBQUMsQ0FBQyxDQUFDO1FBRUwsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWxDLG9FQUFvRTtRQUNwRSw4RUFBOEU7UUFDOUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsZ0JBQWdCLEVBQUUsRUFBRTtZQUVqRCxJQUFJLENBQUMsd0JBQXdCLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFFNUcsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO1lBQ2hCLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7aUJBQ25DLElBQUksQ0FDSCxPQUFPLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDLEVBQ3pDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQ2pFO2lCQUNBLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDZixNQUFNLENBQUMsSUFBSSxDQUFDO29CQUNWLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLEdBQUc7b0JBQzFCLEtBQUssRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDO2lCQUNyQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUNMLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUNqRSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxTQUFTO1FBQ1AsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7SUFDcEMsQ0FBQztJQUVPLGNBQWM7UUFDcEIsSUFBSSxDQUFDLElBQUksR0FBRztZQUNWLElBQUksRUFBRSxFQUFFO1NBQ1QsQ0FBQztJQUNKLENBQUM7SUFFRCxnRUFBZ0U7SUFDeEQsbUJBQW1CLENBQUMsS0FBSztRQUMvQixPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFFekIsSUFBSSxDQUFDLENBQUMsZUFBZSxJQUFJLENBQUMsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUM1QyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ1osQ0FBQztZQUNELElBQUksQ0FBQyxDQUFDLENBQUMsZUFBZSxJQUFJLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDNUMsT0FBTyxDQUFDLENBQUM7WUFDWCxDQUFDO1lBQ0QsSUFBSSxDQUFDLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUM5QixPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ1osQ0FBQztZQUNELElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDOUIsT0FBTyxDQUFDLENBQUM7WUFDWCxDQUFDO1lBQ0QsSUFBSSxDQUFDLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDN0IsT0FBTyxLQUFLLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3BELENBQUM7WUFDRCxPQUFPLEtBQUssQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDcEQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQscUVBQXFFO0lBQ3JFLDZCQUE2QjtJQUN0QixrQkFBa0I7UUFFdkIsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ1YsS0FBSyxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUN4QyxJQUFJLENBQUMsR0FBRztnQkFDTixFQUFFLEVBQUUsQ0FBQyxFQUFFO2dCQUNQLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSztnQkFDbEIsSUFBSSxFQUFFLEVBQUU7YUFDVCxDQUFDO1lBQ0YsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ2YsS0FBSyxJQUFJLFVBQVUsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBRW5DLElBQUksQ0FBQyxHQUFHO29CQUNOLEVBQUUsRUFBRSxVQUFVLENBQUMsRUFBRTtvQkFDakIsS0FBSyxFQUFFLFVBQVUsQ0FBQyxLQUFLO29CQUN2QixRQUFRLEVBQUUsRUFBRTtpQkFDYixDQUFDO2dCQUNGLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQztnQkFDbEIsS0FBSyxJQUFJLEVBQUUsSUFBSSxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ25DLFFBQVEsQ0FBQyxJQUFJLENBQUM7d0JBQ1osS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLO3dCQUNmLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSTt3QkFDYixJQUFJLEVBQUUsRUFBRSxDQUFDLEtBQUs7cUJBQ2YsQ0FBQyxDQUFDO2dCQUNMLENBQUM7Z0JBQ0QsZ0JBQWdCO2dCQUNoQixDQUFDLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2dCQUN0RCxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hCLENBQUM7WUFDRCxDQUFDLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBRy9DLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEIsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLFFBQVEsQ0FBQyxLQUFrQjtRQUNoQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7WUFDbkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxVQUFVO1FBQ2YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVPLFVBQVUsQ0FBQyxLQUFrQjtRQUNuQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7SUFDNUYsQ0FBQztJQUVEOztPQUVHO0lBQ0ksZ0JBQWdCO1FBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztZQUM1QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUMvQixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUM5QixDQUFDO1FBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUcsV0FBVyxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQztRQUN2RSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBRW5CLENBQUM7SUFFTSxPQUFPLENBQUMsSUFBWTtRQUN6QixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDdkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUcsV0FBVyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUM7UUFDN0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRU0sYUFBYSxDQUFDLEtBQWlCO1FBQ3BDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUN6QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFRCw0RUFBNEU7SUFDckUsT0FBTyxDQUFDLElBQVMsRUFBRSxNQUFNLEdBQUcsS0FBSztRQUN0QyxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLEVBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3RELENBQUM7SUFFRDs7O09BR0c7SUFDSSxlQUFlLENBQUMsSUFBZ0I7UUFDckMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUcsV0FBVyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUM7UUFDakUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxhQUFhLENBQUMsS0FBbUIsRUFBRSxNQUFnQjtRQUN4RCxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDekIsSUFBSSxDQUFDLElBQUksR0FBRztZQUNWLElBQUksRUFBRTtnQkFDSixHQUFHLEVBQUU7b0JBQ0gsaUJBQWlCLEVBQUUsRUFBRTtpQkFDdEI7YUFDRjtTQUNGLENBQUM7UUFDRixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsR0FBRyxXQUFXLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQztRQUM5RCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ1osSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ25CLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxjQUFjLENBQUMsSUFBZ0IsRUFBRSxNQUFnQjtRQUV0RCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbEQsdUJBQXVCO1lBQ3ZCLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QyxDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDdkcsNERBQTREO1lBQzVELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QyxDQUFDO2FBQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDakQsd0JBQXdCO1lBQ3hCLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QyxDQUFDO1FBQ0QsOEVBQThFO0lBQ2hGLENBQUM7SUFFTyx3QkFBd0IsQ0FBQyxJQUFJLEVBQUUsTUFBZ0I7UUFDckQsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN4RCxPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJLEdBQUc7WUFDVixJQUFJLEVBQUU7Z0JBQ0osR0FBRyxFQUFFO29CQUNILGlCQUFpQixFQUFFLEVBQUU7aUJBQ3RCO2FBQ0Y7U0FDRixDQUFDO1FBQ0YsSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNuRCxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsR0FBRyxXQUFXLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDO1FBQ3ZFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDWixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDbkIsQ0FBQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSSxpQkFBaUIsQ0FBQyxNQUFvQixFQUFFLFFBQWtCO1FBQy9ELElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsR0FBRyxXQUFXLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQztRQUNuRSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVEOzs7T0FHRztJQUNJLGtCQUFrQixDQUFDLE9BQXVCLEVBQUUsUUFBa0I7UUFDbkUsSUFBSSxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ25CLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDdkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQzFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxHQUFHLFdBQVcsQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDO1lBQ25FLFNBQVMsSUFBSSxNQUFNLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRDs7O09BR0c7SUFDSSxjQUFjLENBQUMsTUFBb0I7UUFDeEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUcsV0FBVyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUM7UUFDakUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7O09BR0c7SUFDSSxpQkFBaUIsQ0FBQyxNQUFvQjtRQUMzQyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUcsV0FBVyxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUM7UUFDbkUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSwwQkFBMEIsQ0FBQyxPQUF1QixFQUFFLE1BQWdCO1FBRXpFLHVFQUF1RTtRQUN2RSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pGLEtBQUssSUFBSSxDQUFDLElBQUksT0FBTyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUIsQ0FBQztRQUNELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNaLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNuQixDQUFDO0lBQ0gsQ0FBQztJQUVNLDBCQUEwQixDQUFDLEtBQW1CO1FBQ25ELElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQzVCLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxpQkFBaUIsQ0FBQyxNQUFvQjtRQUMzQyxxRkFBcUY7UUFDckYsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEtBQUssV0FBVyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2xILENBQUM7SUFFRDs7T0FFRztJQUNJLFNBQVMsQ0FBQyxTQUFTLEdBQUcsRUFBRTtRQUU3QixNQUFNLFFBQVEsR0FBRyxFQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsRUFBQyxDQUFDO1FBQ2pFLG9EQUFvRDtRQUNwRCxJQUFJLElBQUksQ0FBQyxxQkFBcUIsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDNUQsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDdEQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUM7aUJBQzFCLFNBQVMsQ0FBQyxDQUFDLFVBQXVCLEVBQUUsRUFBRTtnQkFDckMsVUFBVSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO2dCQUM3QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUM5QyxDQUFDLENBQUMsQ0FBQztZQUNMLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLE1BQWdCO1FBQzNCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNaLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNuQixDQUFDO0lBQ0gsQ0FBQztJQUVELG1CQUFtQjtRQUNqQixJQUFJLENBQUMsMEJBQTBCLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxjQUFjLENBQUMsU0FBYztRQUNsQyxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFTSxZQUFZLENBQUMsSUFBWTtRQUM5QixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSwwQkFBMEIsQ0FBQyxlQUF1QjtRQUN2RCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDVixJQUFJLEtBQUssQ0FBQztRQUNWLE9BQU8sQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzdDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxLQUFLLGVBQWUsQ0FBQyxDQUFDO1lBQzFGLENBQUMsRUFBRSxDQUFDO1FBQ04sQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQzs4R0FsYVUsZ0JBQWdCO2tIQUFoQixnQkFBZ0I7OzJGQUFoQixnQkFBZ0I7a0JBRDVCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2Zyb20gYXMgb2JzZXJ2YWJsZUZyb20sIEJlaGF2aW9yU3ViamVjdCwgUmVwbGF5U3ViamVjdCwgT2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7Z3JvdXBCeSwgcmVkdWNlLCBtZXJnZU1hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIFNlYXJjaEZpbHRlciwgU2VhcmNoUXVlcnksIFNlYXJjaFN0YXRlLCBTeXN0ZW1TZXJ2aWNlLFxyXG4gIE9iamVjdFR5cGUsIFNlYXJjaFNlcnZpY2UsIEV2ZW50U2VydmljZSwgRW5haW9FdmVudCwgVXRpbHMsIFF1ZXJ5U2NvcGVcclxufSBmcm9tICdAZW8tc2RrL2NvcmUnO1xyXG5cclxuLyoqXHJcbiAqIEFwcFNlYXJjaFNlcnZpY2UgaXMgdGhlIGFwcHMgbWFpbiBlbnRyeSBwb2ludCBmb3Igc2VhcmNoaW5nICh1c2VkIGJ5IHRoZSBhcHBCYXJTZWFyY2ggY29tcG9uZW50KS5cclxuICogSXQgcHJvdmlkZXMgYW4gYHF1ZXJ5JGAgb2JzZXJ2YWJsZSBjb21wb25lbnRzIGNhbiBzdWJzY3JpYmUgdG8sIHRvXHJcbiAqIHN0YXkgaW4gdG91Y2ggd2l0aCB1cGRhdGVzIHRvIHRoZSBxdWVyeS5cclxuICovXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEFwcFNlYXJjaFNlcnZpY2Uge1xyXG5cclxuICBwcml2YXRlIHF1ZXJ5ID0gbmV3IFNlYXJjaFF1ZXJ5KCk7XHJcbiAgcHJpdmF0ZSBhZ2dzOiBhbnk7XHJcbiAgcHJpdmF0ZSBsYXN0UXVlcnkgPSBuZXcgU2VhcmNoUXVlcnkoKTtcclxuICBwcml2YXRlIHF1ZXJ5U3RhdGUgPSBuZXcgU2VhcmNoU3RhdGUoKTtcclxuICAvLyBIb2xkcyB0aGUgbGFzdCBhZ2dyZWdhdGlvbiBwcm9wZXJ0aWVzIHNlbnQgdG8gdGhlIHNlcnZlclxyXG4gIC8vIFVzZWQgZm9yIHByZXZlbnRpbmcgcmVkdW5kYW50IGNhbGxzXHJcbiAgcHJpdmF0ZSBsYXN0QWdnQ2FsbENvbXBhcmF0b3I6IHN0cmluZztcclxuXHJcbiAgLy8gU3ViamVjdCBob2xkaW5nIHRoZSBjdXJyZW50IHF1ZXJ5IChpbml0aWFsIHZhbHVlIGlzIGEgbmV3IFNlYXJjaFF1ZXJ5KVxyXG4gIC8vIEBzZWU6IGh0dHA6Ly9ibG9nLmFuZ3VsYXItdW5pdmVyc2l0eS5pby9ob3ctdG8tYnVpbGQtYW5ndWxhcjItYXBwcy11c2luZy1yeGpzLW9ic2VydmFibGUtZGF0YS1zZXJ2aWNlcy1waXRmYWxscy10by1hdm9pZC8jcnhqc3N1YmplY3RhbmRob3d0b3VzZWl0XHJcbiAgLy8gdG9kbzogbWF5YmUgYWRkIHN1cHBvcnQgZm9yIGhvbGRpbmcgYSBxdWVyeSBoaXN0b3J5LCBzbyB0aGUgdXNlciBjYW4gcmVsb2FkIG9sZGVyIHF1ZXJpZXMgYXMgd2VsbFxyXG4gIHByaXZhdGUgcXVlcnlTb3VyY2UgPSBuZXcgUmVwbGF5U3ViamVjdDxTZWFyY2hRdWVyeT4oMSk7XHJcbiAgcHJpdmF0ZSBxdWVyeVN0YXRlU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTZWFyY2hTdGF0ZT4odGhpcy5xdWVyeVN0YXRlKTtcclxuXHJcbiAgLy8gRXhwb3NlIGFuIG9ic2VydmFibGUgaW5zdGVhZCBvZiB0aGUgc3ViamVjdCBpdHNlbGYgdG8gcHJldmVudCB0aGUgc2VydmljZSBjbGllbnRzIGZyb21cclxuICAvLyB0aGVtc2VsdmVzIGVtaXR0aW5nIHN0b3JlIHZhbHVlcyBkaXJlY3RseSBpbnN0ZWFkIG9mIGNhbGxpbmcgYWN0aW9uIG1ldGhvZHMsIGFuZCB0aGVyZWZvcmVcclxuICAvLyBieXBhc3NpbmcgdGhlIHN0b3JlLlxyXG4gIHB1YmxpYyBxdWVyeSQ6IE9ic2VydmFibGU8U2VhcmNoUXVlcnk+ID0gdGhpcy5xdWVyeVNvdXJjZS5hc09ic2VydmFibGUoKTtcclxuICAvLyBTZWFyY2ggc2VydmljZSBhbHNvIGV4cG9zZXMgYW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSBzdGF0ZSBvZiB0aGUgY3VycmVudCBxdWVyeS5cclxuICAvLyBXZSBzZXBhcmF0ZSB0aGUgc3RhdGUgb2YgdGhlIHF1ZXJ5IGZyb20gdGhlIHF1ZXJ5IGl0c2VsZiBhcyBvdGhlcndpc2UgY2hhbmdoaW5nIHRoZSBxdWVyaWVzXHJcbiAgLy8gc3RhdGUgd2lsbCB0cmlnZ2VyIGFsbCBzdWJzY3JpYmVycyBvZiB0aGUgcXVlcnkgb2JzZXJ2YWxlIGFuZCBsZWFkIHRvIHVuZGVzaXJlZCBiZWhhdmlvdXJcclxuICBwdWJsaWMgcXVlcnlTdGF0ZSQ6IE9ic2VydmFibGU8U2VhcmNoU3RhdGU+ID0gdGhpcy5xdWVyeVN0YXRlU291cmNlLmFzT2JzZXJ2YWJsZSgpO1xyXG4gIHB1YmxpYyBvYmplY3RUeXBlR3JvdXBzID0gW107XHJcbiAgcHVibGljIHR5cGVzQWxsb3dlZFVuZGVyU3lzcm9vdCA9IFtdO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNlYXJjaFNlcnZpY2U6IFNlYXJjaFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGV2ZW50U2VydmljZTogRXZlbnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzeXN0ZW06IFN5c3RlbVNlcnZpY2UpIHtcclxuXHJcbiAgICB0aGlzLnNldERlZmF1bHRBZ2dzKCk7XHJcbiAgICB0aGlzLmV2ZW50U2VydmljZS5vbihFbmFpb0V2ZW50LkxPR09VVClcclxuICAgICAgLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICAgIHRoaXMucmVzZXQodHJ1ZSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMucXVlcnlTb3VyY2UubmV4dCh0aGlzLnF1ZXJ5KTtcclxuXHJcbiAgICAvLyBGZXRjaCBvYmplY3QgdHlwZXMgYW5kIGdyb3VwcyB0aGF0IHNlcnZlIGFzIHNlYXJjaCBmaWx0ZXIgcGFyYW1zLlxyXG4gICAgLy8gVGhlc2UgZ3JvdXBzIGFyZSBwcm92aWRlZCB0aHJvdWdoIHRoZSBzZXJ2aWNlcyBgb2JqZWN0VHlwZUdyb3Vwc2AgcHJvcGVydHkuXHJcbiAgICB0aGlzLnN5c3RlbS5zeXN0ZW0kLnN1YnNjcmliZSgoc3lzdGVtRGVmaW5pdGlvbikgPT4ge1xyXG5cclxuICAgICAgdGhpcy50eXBlc0FsbG93ZWRVbmRlclN5c3Jvb3QgPSBzeXN0ZW1EZWZpbml0aW9uLnR5cGVzLmZpbHRlcih0eXBlID0+IHR5cGUucGFyZW50dHlwZXMuaW5jbHVkZXMoJ3N5c3Jvb3QnKSk7XHJcblxyXG4gICAgICBsZXQgZ3JvdXBzID0gW107XHJcbiAgICAgIG9ic2VydmFibGVGcm9tKHN5c3RlbURlZmluaXRpb24udHlwZXMpXHJcbiAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICBncm91cEJ5KCh0eXBlOiBhbnkpID0+IHR5cGUuZ3JvdXAgfHwgJzAnKSxcclxuICAgICAgICAgIG1lcmdlTWFwKGcgPT4gZy5waXBlKHJlZHVjZSgoYWNjLCBjdXJyKSA9PiBbLi4uYWNjLCBjdXJyXSwgW10pKSlcclxuICAgICAgICApXHJcbiAgICAgICAgLnN1YnNjcmliZShvdGcgPT4ge1xyXG4gICAgICAgICAgZ3JvdXBzLnB1c2goe1xyXG4gICAgICAgICAgICBsYWJlbDogb3RnWzBdLmdyb3VwIHx8ICcwJyxcclxuICAgICAgICAgICAgdHlwZXM6IHRoaXMuc29ydE9iamVjdFR5cGVHcm91cChvdGcpXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgdGhpcy5vYmplY3RUeXBlR3JvdXBzID0gZ3JvdXBzLnNvcnQoVXRpbHMuc29ydFZhbHVlcygnbGFiZWwnKSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHJlc2V0QWdncygpIHtcclxuICAgIHRoaXMuc2V0RGVmYXVsdEFnZ3MoKTtcclxuICAgIHRoaXMubGFzdEFnZ0NhbGxDb21wYXJhdG9yID0gbnVsbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0RGVmYXVsdEFnZ3MoKSB7XHJcbiAgICB0aGlzLmFnZ3MgPSB7XHJcbiAgICAgIHR5cGU6IHt9XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLy8gaGVscGVyIG1ldGhvZCBmb3Igc29ydGluZyB0aGUgZW50cmllcyBvZiBhbiBvYmplY3QgdHlwZSBncm91cFxyXG4gIHByaXZhdGUgc29ydE9iamVjdFR5cGVHcm91cCh0eXBlcykge1xyXG4gICAgcmV0dXJuIHR5cGVzLnNvcnQoKGEsIGIpID0+IHtcclxuXHJcbiAgICAgIGlmIChhLmlzQ29udGV4dEZvbGRlciAmJiAhYi5pc0NvbnRleHRGb2xkZXIpIHtcclxuICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFhLmlzQ29udGV4dEZvbGRlciAmJiBiLmlzQ29udGV4dEZvbGRlcikge1xyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChhLmlzRm9sZGVyICYmICFiLmlzRm9sZGVyKSB7XHJcbiAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghYS5pc0ZvbGRlciAmJiBiLmlzRm9sZGVyKSB7XHJcbiAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGEuaXNGb2xkZXIgJiYgYi5pc0ZvbGRlcikge1xyXG4gICAgICAgIHJldHVybiBVdGlscy5zb3J0VmFsdWVzKCdsYWJlbCcpLmNhbGwodGhpcywgYSwgYik7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIFV0aWxzLnNvcnRWYWx1ZXMoJ2xhYmVsJykuY2FsbCh0aGlzLCBhLCBiKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gRXh0ZW5kcyB0aGUgb2JqZWN0VHlwZXNHcm91cHMgYnkgdGhlIGVsZW1lbnRzIGZvciBlYWNoIG9iamVjdCB0eXBlXHJcbiAgLy8gVXNlZCBpbiBleHBlcnQgc2VhcmNoIG1vZGVcclxuICBwdWJsaWMgYnVpbGRUeXBlR3JvdXBUcmVlKCkge1xyXG5cclxuICAgIGxldCBnVHJlZSA9IFtdO1xyXG4gICAgbGV0IGkgPSAwO1xyXG4gICAgZm9yIChsZXQgZ3JvdXAgb2YgdGhpcy5vYmplY3RUeXBlR3JvdXBzKSB7XHJcbiAgICAgIGxldCBnID0ge1xyXG4gICAgICAgIGlkOiBpKyssXHJcbiAgICAgICAgbGFiZWw6IGdyb3VwLmxhYmVsLFxyXG4gICAgICAgIHRyZWU6IFtdXHJcbiAgICAgIH07XHJcbiAgICAgIGxldCB0eXBlcyA9IFtdO1xyXG4gICAgICBmb3IgKGxldCBvYmplY3RUeXBlIG9mIGdyb3VwLnR5cGVzKSB7XHJcblxyXG4gICAgICAgIGxldCB0ID0ge1xyXG4gICAgICAgICAgaWQ6IG9iamVjdFR5cGUuaWQsXHJcbiAgICAgICAgICBsYWJlbDogb2JqZWN0VHlwZS5sYWJlbCxcclxuICAgICAgICAgIGNoaWxkcmVuOiBbXVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgbGV0IGNoaWxkcmVuID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgZWwgb2Ygb2JqZWN0VHlwZS5lbGVtZW50cykge1xyXG4gICAgICAgICAgY2hpbGRyZW4ucHVzaCh7XHJcbiAgICAgICAgICAgIGxhYmVsOiBlbC5sYWJlbCxcclxuICAgICAgICAgICAgdHlwZTogZWwudHlwZSxcclxuICAgICAgICAgICAgZGF0YTogZWwucW5hbWVcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBzb3J0IGJ5IGxhYmVsXHJcbiAgICAgICAgdC5jaGlsZHJlbiA9IGNoaWxkcmVuLnNvcnQoVXRpbHMuc29ydFZhbHVlcygnbGFiZWwnKSk7XHJcbiAgICAgICAgdHlwZXMucHVzaCh0KTtcclxuICAgICAgfVxyXG4gICAgICBnLnRyZWUgPSB0eXBlcy5zb3J0KFV0aWxzLnNvcnRWYWx1ZXMoJ2xhYmVsJykpO1xyXG5cclxuXHJcbiAgICAgIGdUcmVlLnB1c2goZyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZ1RyZWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPdmVycmlkZSB0aGUgY3VycmVudCBxdWVyeSBieSBhIGRpZmZlcmVudCBvbmUuXHJcbiAgICogVGhpcyBjb3VsZCBiZSBkb25lIGJ5IGZvciBleGFtcGxlIGxvYWRpbmcgYSBzdG9yZWQgcXVlcnkuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gcXVlcnkgLSB0aGUgcXVlcnkgdGhhdCBzaG91bGQgcmVwbGFjZSB0aGUgY3VycmVudCBxdWVyeSwgdGhpcyBtYXkgYmUgZWl0aGVyIGEgU2VhcmNoUXVlcnkgaW5zdGFuY2UsXHJcbiAgICogYSBKU09OIHN0cmluZyBvZiBhbiBvYmplY3QgbWF0Y2hpbmcgdGhlIHNlYXJjaCBhcGlcclxuICAgKi9cclxuICBwdWJsaWMgc2V0UXVlcnkocXVlcnk6IFNlYXJjaFF1ZXJ5KSB7XHJcbiAgICBpZiAodGhpcy5pc05ld1F1ZXJ5KHF1ZXJ5KSkge1xyXG4gICAgICB0aGlzLnNldERlZmF1bHRBZ2dzKCk7XHJcbiAgICAgIHRoaXMucXVlcnkgPSBxdWVyeTtcclxuICAgICAgdGhpcy5xdWVyeVNvdXJjZS5uZXh0KHRoaXMucXVlcnkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVzZXRzIHRoZSBjdXJyZW50IHF1ZXJ5LlxyXG4gICAqL1xyXG4gIHB1YmxpYyBjbGVhclF1ZXJ5KCkge1xyXG4gICAgdGhpcy5zZXRRdWVyeShuZXcgU2VhcmNoUXVlcnkoKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzTmV3UXVlcnkocXVlcnk6IFNlYXJjaFF1ZXJ5KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkocXVlcnkuZ2V0UXVlcnlKc29uKCkpICE9PSBKU09OLnN0cmluZ2lmeSh0aGlzLnF1ZXJ5LmdldFF1ZXJ5SnNvbigpKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIHRvZ2dsZXMgdGhlIHNlYXJjaG1vZGUgZnJvbSByZWd1bGFyIHNlYXJjaCB0byBleHBlcnQgc2VhcmNoIGFuZCB2aWNlIHZlcnNhXHJcbiAgICovXHJcbiAgcHVibGljIHRvZ2dsZUV4cGVydE1vZGUoKSB7XHJcbiAgICBpZiAoIXRoaXMucXVlcnkuZXhwZXJ0TW9kZSkge1xyXG4gICAgICB0aGlzLmxhc3RRdWVyeSA9IHRoaXMucXVlcnk7XHJcbiAgICAgIHRoaXMuc2V0RGVmYXVsdEFnZ3MoKTtcclxuICAgICAgdGhpcy5xdWVyeSA9IG5ldyBTZWFyY2hRdWVyeSgpO1xyXG4gICAgICB0aGlzLnF1ZXJ5LmV4cGVydE1vZGUgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5xdWVyeSA9IHRoaXMubGFzdFF1ZXJ5O1xyXG4gICAgfVxyXG4gICAgdGhpcy5xdWVyeS5fX3VwZGF0ZUNhdXNlID0gU2VhcmNoUXVlcnkuVVBEQVRFX0NBVVNFLlRPR0dMRURfRVhQRVJUTU9ERTtcclxuICAgIHRoaXMucXVlcnlTb3VyY2UubmV4dCh0aGlzLnF1ZXJ5KTtcclxuICAgIHRoaXMuYWdncmVnYXRlKCk7XHJcblxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldFRlcm0odGVybTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnF1ZXJ5LnRlcm0gPSB0ZXJtO1xyXG4gICAgdGhpcy5xdWVyeS5fX3VwZGF0ZUNhdXNlID0gU2VhcmNoUXVlcnkuVVBEQVRFX0NBVVNFLlRFUk1fU0VUO1xyXG4gICAgdGhpcy5xdWVyeVNvdXJjZS5uZXh0KHRoaXMucXVlcnkpO1xyXG4gICAgdGhpcy5hZ2dyZWdhdGUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRRdWVyeVNjb3BlKHNjb3BlOiBRdWVyeVNjb3BlKSB7XHJcbiAgICB0aGlzLnF1ZXJ5LnNjb3BlID0gc2NvcGU7XHJcbiAgICB0aGlzLnF1ZXJ5U291cmNlLm5leHQodGhpcy5xdWVyeSk7XHJcbiAgICB0aGlzLmFnZ3JlZ2F0ZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8gc2V0IGFnZ3JlZ2F0aW9uIHByb3BlcnRpZXMgdG8gYmUgYXBwbGllZCB0byBPTkxZIGFnZ3JlZ2F0ZSBzZWFyY2ggcXVlcmllc1xyXG4gIHB1YmxpYyBzZXRBZ2dzKGFnZ3M6IGFueSwgZXh0ZW5kID0gZmFsc2UpIHtcclxuICAgIHRoaXMuYWdncyA9IGV4dGVuZCA/IHsuLi50aGlzLmFnZ3MsIC4uLmFnZ3N9IDogYWdncztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRvZ2dsZXMgYSB0eXBlIGZpbHRlci5cclxuICAgKiBAcGFyYW0gdHlwZSAtIG9iamVjdCB0eXBlXHJcbiAgICovXHJcbiAgcHVibGljIHRvZ2dsZVF1ZXJ5VHlwZSh0eXBlOiBPYmplY3RUeXBlKSB7XHJcbiAgICB0aGlzLnF1ZXJ5LnRvZ2dsZVR5cGUodHlwZSk7XHJcbiAgICB0aGlzLnF1ZXJ5Ll9fdXBkYXRlQ2F1c2UgPSBTZWFyY2hRdWVyeS5VUERBVEVfQ0FVU0UuVE9HR0xFRF9UWVBFO1xyXG4gICAgdGhpcy5xdWVyeVNvdXJjZS5uZXh0KHRoaXMucXVlcnkpO1xyXG4gICAgdGhpcy5hZ2dyZWdhdGUoU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVMuVFlQRSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBxdWVyaWVzIHRhcmdldCB0eXBlcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB0eXBlcyAtIGFycmF5IG9mIE9iamVjdFR5cGVzXHJcbiAgICogQHBhcmFtIHNpbGVudCBJZiBzZXQgdG8gdHJ1ZSBhZ2dyZWdhdGUgd29uJ3QgYmUgY2FsbGVkXHJcbiAgICovXHJcbiAgcHVibGljIHNldFF1ZXJ5VHlwZXModHlwZXM6IE9iamVjdFR5cGVbXSwgc2lsZW50PzogYm9vbGVhbikge1xyXG4gICAgdGhpcy5xdWVyeS50eXBlcyA9IHR5cGVzO1xyXG4gICAgdGhpcy5hZ2dzID0ge1xyXG4gICAgICB0eXBlOiB7XHJcbiAgICAgICAgc3ViOiB7XHJcbiAgICAgICAgICBjb250ZXh0Zm9sZGVydHlwZToge31cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgICB0aGlzLnF1ZXJ5Ll9fdXBkYXRlQ2F1c2UgPSBTZWFyY2hRdWVyeS5VUERBVEVfQ0FVU0UuVFlQRVNfU0VUO1xyXG4gICAgdGhpcy5xdWVyeVNvdXJjZS5uZXh0KHRoaXMucXVlcnkpO1xyXG4gICAgaWYgKCFzaWxlbnQpIHtcclxuICAgICAgdGhpcy5hZ2dyZWdhdGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIHF1ZXJpZXMgdGFyZ2V0IGNvbnRleHQgdHlwZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB0eXBlIFRoZSBjb250ZXh0IHR5cGUgdG8gYmUgc2V0IG9yIG51bGwgZm9yIHJlc2V0dGluZ1xyXG4gICAqIEBwYXJhbSBzaWxlbnQgSWYgc2V0IHRvIHRydWUgYWdncmVnYXRlIHdvbid0IGJlIGNhbGxlZFxyXG4gICAqL1xyXG4gIHB1YmxpYyBzZXRDb250ZXh0VHlwZSh0eXBlOiBPYmplY3RUeXBlLCBzaWxlbnQ/OiBib29sZWFuKSB7XHJcblxyXG4gICAgaWYgKHRoaXMucXVlcnkuY29udGV4dEZvbGRlclR5cGVzLmxlbmd0aCAmJiAhdHlwZSkge1xyXG4gICAgICAvLyBjbGVhciBjb250ZXh0IGZvbGRlclxyXG4gICAgICB0aGlzLmVtaXROZXdDb250ZXh0Rm9sZGVyVHlwZShudWxsKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5xdWVyeS5jb250ZXh0Rm9sZGVyVHlwZXMubGVuZ3RoICYmIHR5cGUubmFtZSAhPT0gdGhpcy5xdWVyeS5jb250ZXh0Rm9sZGVyVHlwZXNbMF0ubmFtZSkge1xyXG4gICAgICAvLyBnb3QgYSB0eXBlIHRvIGJlIHNldCB1cCB0aGF0IGRpZmZlcnMgZnJvbSB0aGUgY3VycmVudCBvbmVcclxuICAgICAgdGhpcy5lbWl0TmV3Q29udGV4dEZvbGRlclR5cGUodHlwZSk7XHJcbiAgICB9IGVsc2UgaWYgKCF0aGlzLnF1ZXJ5LmNvbnRleHRGb2xkZXJUeXBlcy5sZW5ndGgpIHtcclxuICAgICAgLy8gbm90aGluZyBzZXQgdXAgc28gZmFyXHJcbiAgICAgIHRoaXMuZW1pdE5ld0NvbnRleHRGb2xkZXJUeXBlKHR5cGUpO1xyXG4gICAgfVxyXG4gICAgLy8gdHJ5aW5nIHRvIHNldHVwIHRoZSBzYW1lIHR5cGUgYXMgdGhlIGN1cnJlbnQgb24gc2hvdWxkIG5vdCBlbWl0IGEgbmV3IHZhbHVlXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGVtaXROZXdDb250ZXh0Rm9sZGVyVHlwZSh0eXBlLCBzaWxlbnQ/OiBib29sZWFuKSB7XHJcbiAgICBpZiAoIXR5cGUgJiYgdGhpcy5xdWVyeS5jb250ZXh0Rm9sZGVyVHlwZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuYWdncyA9IHtcclxuICAgICAgdHlwZToge1xyXG4gICAgICAgIHN1Yjoge1xyXG4gICAgICAgICAgY29udGV4dGZvbGRlcnR5cGU6IHt9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gICAgdGhpcy5xdWVyeS5jb250ZXh0Rm9sZGVyVHlwZXMgPSB0eXBlID8gW3R5cGVdIDogW107XHJcbiAgICB0aGlzLnF1ZXJ5Ll9fdXBkYXRlQ2F1c2UgPSBTZWFyY2hRdWVyeS5VUERBVEVfQ0FVU0UuQ09OVEVYVF9GT0xERVJfU0VUO1xyXG4gICAgdGhpcy5xdWVyeVNvdXJjZS5uZXh0KHRoaXMucXVlcnkpO1xyXG4gICAgaWYgKCFzaWxlbnQpIHtcclxuICAgICAgdGhpcy5hZ2dyZWdhdGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRvZ2dsZXMgYSBjcmVhdGVkIGZpbHRlci5cclxuICAgKiBAcGFyYW0gZmlsdGVyIC0gdGhlIGZpbHRlciB0byBiZSB0b2dnbGVkXHJcbiAgICovXHJcbiAgcHVibGljIHRvZ2dsZVF1ZXJ5RmlsdGVyKGZpbHRlcjogU2VhcmNoRmlsdGVyLCBvdmVycmlkZT86IGJvb2xlYW4pIHtcclxuICAgIHRoaXMucXVlcnkudG9nZ2xlRmlsdGVyKGZpbHRlciwgb3ZlcnJpZGUpO1xyXG4gICAgdGhpcy5xdWVyeS5fX3VwZGF0ZUNhdXNlID0gU2VhcmNoUXVlcnkuVVBEQVRFX0NBVVNFLlRPR0dMRURfRklMVEVSO1xyXG4gICAgdGhpcy5xdWVyeVNvdXJjZS5uZXh0KHRoaXMucXVlcnkpO1xyXG4gICAgdGhpcy5hZ2dyZWdhdGUoZmlsdGVyLnByb3BlcnR5KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRvZ2dsZXMgY3JlYXRlZCBmaWx0ZXJzIGFuZCBhZ2dyZWdhdGVzIHRoZW0gdG9nZXRoZXIuXHJcbiAgICogQHBhcmFtIGZpbHRlcnMgLSB0aGUgZmlsdGVycyB0byBiZSB0b2dnbGVkXHJcbiAgICovXHJcbiAgcHVibGljIHRvZ2dsZVF1ZXJ5RmlsdGVycyhmaWx0ZXJzOiBTZWFyY2hGaWx0ZXJbXSwgb3ZlcnJpZGU/OiBib29sZWFuKSB7XHJcbiAgICBsZXQgYmFzZVBhcmFtID0gJyc7XHJcbiAgICBmaWx0ZXJzLmZvckVhY2goZmlsdGVyID0+IHtcclxuICAgICAgdGhpcy5xdWVyeS50b2dnbGVGaWx0ZXIoZmlsdGVyLCBvdmVycmlkZSk7XHJcbiAgICAgIHRoaXMucXVlcnkuX191cGRhdGVDYXVzZSA9IFNlYXJjaFF1ZXJ5LlVQREFURV9DQVVTRS5UT0dHTEVEX0ZJTFRFUjtcclxuICAgICAgYmFzZVBhcmFtICs9IGZpbHRlci5wcm9wZXJ0eSArICcgJztcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMucXVlcnlTb3VyY2UubmV4dCh0aGlzLnF1ZXJ5KTtcclxuICAgIHRoaXMuYWdncmVnYXRlKGJhc2VQYXJhbS50cmltKCkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkcyBhIGZpbHRlciB0byB0aGUgcXVlcnkuXHJcbiAgICogQHBhcmFtIGZpbHRlciAtIHRoZSBmaWx0ZXIgdG8gYmUgYWRkZWRcclxuICAgKi9cclxuICBwdWJsaWMgYWRkUXVlcnlGaWx0ZXIoZmlsdGVyOiBTZWFyY2hGaWx0ZXIpIHtcclxuICAgIHRoaXMucXVlcnkuYWRkRmlsdGVyKGZpbHRlcik7XHJcbiAgICB0aGlzLnF1ZXJ5Ll9fdXBkYXRlQ2F1c2UgPSBTZWFyY2hRdWVyeS5VUERBVEVfQ0FVU0UuQURERURfRklMVEVSO1xyXG4gICAgdGhpcy5xdWVyeVNvdXJjZS5uZXh0KHRoaXMucXVlcnkpO1xyXG4gICAgdGhpcy5hZ2dyZWdhdGUoZmlsdGVyLnByb3BlcnR5KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbW92ZXMgYSBmaWx0ZXIgdG8gdGhlIHF1ZXJ5LlxyXG4gICAqIEBwYXJhbSBmaWx0ZXIgLSB0aGUgZmlsdGVyIHRvIGJlIHJlbW92ZWRcclxuICAgKi9cclxuICBwdWJsaWMgcmVtb3ZlUXVlcnlGaWx0ZXIoZmlsdGVyOiBTZWFyY2hGaWx0ZXIpIHtcclxuICAgIHRoaXMucXVlcnkucmVtb3ZlRmlsdGVyKGZpbHRlci5wcm9wZXJ0eSk7XHJcbiAgICB0aGlzLnF1ZXJ5Ll9fdXBkYXRlQ2F1c2UgPSBTZWFyY2hRdWVyeS5VUERBVEVfQ0FVU0UuUkVNT1ZFRF9GSUxURVI7XHJcbiAgICB0aGlzLnF1ZXJ5U291cmNlLm5leHQodGhpcy5xdWVyeSk7XHJcbiAgICB0aGlzLmFnZ3JlZ2F0ZShmaWx0ZXIucHJvcGVydHkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgZmlsdGVycyBmb3IgYW4gaW5kZXhkYXRhIHNlYXJjaC5cclxuICAgKiBTZXR0aW5nIHRoZW0gd2lsbCBhbHNvIHJlbW92ZSBhbGwgaW5kZXhkYXRhIGZpbHRlcnMgc2V0IGJlZm9yZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBmaWx0ZXJzIC0gdGhlIGZpbHRlcnMgdG8gYmUgc2V0XHJcbiAgICogQHBhcmFtIHNpbGVudCBJZiBzZXQgdG8gdHJ1ZSBhZ2dyZWdhdGUgd29uJ3QgYmUgY2FsbGVkXHJcbiAgICovXHJcbiAgcHVibGljIHNldEluZGV4U2VhcmNoUXVlcnlGaWx0ZXJzKGZpbHRlcnM6IFNlYXJjaEZpbHRlcltdLCBzaWxlbnQ/OiBib29sZWFuKSB7XHJcblxyXG4gICAgLy8gcmVtb3ZlIHByZXZpb3VzIGZpbHRlcnMgKGFsbCBmaWx0ZXJzIHRoYXQgYXJlIG5vdCBiYXNlcGFyYW0gZmlsdGVycylcclxuICAgIHRoaXMucXVlcnkuZmlsdGVycyA9IHRoaXMucXVlcnkuZmlsdGVycy5maWx0ZXIoKGYpID0+IHRoaXMuaXNCYXNlUGFyYW1GaWx0ZXIoZikpO1xyXG4gICAgZm9yIChsZXQgZiBvZiBmaWx0ZXJzKSB7XHJcbiAgICAgIHRoaXMucXVlcnkuYWRkRmlsdGVyKGYpO1xyXG4gICAgfVxyXG4gICAgaWYgKCFzaWxlbnQpIHtcclxuICAgICAgdGhpcy5hZ2dyZWdhdGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRJbmRleFNlYXJjaFF1ZXJ5RmlsdGVycyhxdWVyeT86IFNlYXJjaFF1ZXJ5KTogU2VhcmNoRmlsdGVyW10ge1xyXG4gICAgbGV0IHEgPSBxdWVyeSB8fCB0aGlzLnF1ZXJ5O1xyXG4gICAgcmV0dXJuIHEuZmlsdGVycy5maWx0ZXIoKGYpID0+ICF0aGlzLmlzQmFzZVBhcmFtRmlsdGVyKGYpKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERldGVybWluZXMgd2hldGhlciBvciBub3QgdGhlIHByb3ZpZGVkIHNlYXJjaCBmaWx0ZXIgYmVsb25ncyB0byBhIGJhc2UgcGFyYW0uXHJcbiAgICpcclxuICAgKiBAcGFyYW0gZmlsdGVyIC0gdGhlIGZpbHRlciB0byBiZSBjaGVja2VkXHJcbiAgICovXHJcbiAgcHVibGljIGlzQmFzZVBhcmFtRmlsdGVyKGZpbHRlcjogU2VhcmNoRmlsdGVyKTogYm9vbGVhbiB7XHJcbiAgICAvL3JldHVybiBPYmplY3QudmFsdWVzKFNlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TKS5zb21lKChicCkgPT4gZmlsdGVyLnByb3BlcnR5ID09PSBicCk7XHJcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVMpLnNvbWUoKGJwS2V5KSA9PiBmaWx0ZXIucHJvcGVydHkgPT09IFNlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TW2JwS2V5XSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFeGVjdXRlcyB0aGUgY3VycmVudCBxdWVyeSBhcyBhZ2dyZWdhdGUgc2VhcmNoXHJcbiAgICovXHJcbiAgcHVibGljIGFnZ3JlZ2F0ZShiYXNlUGFyYW0gPSAnJykge1xyXG5cclxuICAgIGNvbnN0IGFnZ1F1ZXJ5ID0ge2FnZ3M6IHRoaXMuYWdncywgLi4udGhpcy5xdWVyeS5nZXRRdWVyeUpzb24oKX07XHJcbiAgICAvLyBjb21wYXJlIHRoZSBjYWxsIHRvIGJlIG1hZGUgd2l0aCBhIGZvcm1lciByZXF1ZXN0XHJcbiAgICBpZiAodGhpcy5sYXN0QWdnQ2FsbENvbXBhcmF0b3IgIT09IEpTT04uc3RyaW5naWZ5KGFnZ1F1ZXJ5KSkge1xyXG4gICAgICB0aGlzLmxhc3RBZ2dDYWxsQ29tcGFyYXRvciA9IEpTT04uc3RyaW5naWZ5KGFnZ1F1ZXJ5KTtcclxuICAgICAgdGhpcy5nZXRTZWFyY2hTdGF0ZShhZ2dRdWVyeSlcclxuICAgICAgICAuc3Vic2NyaWJlKChxdWVyeVN0YXRlOiBTZWFyY2hTdGF0ZSkgPT4ge1xyXG4gICAgICAgICAgcXVlcnlTdGF0ZS5sYXN0Q2hhbmdlID0gYmFzZVBhcmFtO1xyXG4gICAgICAgICAgdGhpcy5xdWVyeVN0YXRlID0gcXVlcnlTdGF0ZTtcclxuICAgICAgICAgIHRoaXMucXVlcnlTdGF0ZVNvdXJjZS5uZXh0KHRoaXMucXVlcnlTdGF0ZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVzZXQgdGhlIHF1ZXJ5XHJcbiAgICovXHJcbiAgcHVibGljIHJlc2V0KHNpbGVudD86IGJvb2xlYW4pIHtcclxuICAgIHRoaXMucXVlcnkgPSBuZXcgU2VhcmNoUXVlcnkoKTtcclxuICAgIHRoaXMuc2V0RGVmYXVsdEFnZ3MoKTtcclxuICAgIHRoaXMucXVlcnlTb3VyY2UubmV4dCh0aGlzLnF1ZXJ5KTtcclxuICAgIGlmICghc2lsZW50KSB7XHJcbiAgICAgIHRoaXMuYWdncmVnYXRlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBleGl0SW5kZXhkYXRhU2VhcmNoKCkge1xyXG4gICAgdGhpcy5zZXRJbmRleFNlYXJjaFF1ZXJ5RmlsdGVycyhbXSwgdHJ1ZSk7XHJcbiAgICB0aGlzLnNldFF1ZXJ5VHlwZXMoW10sIHRydWUpO1xyXG4gICAgdGhpcy5zZXRDb250ZXh0VHlwZShudWxsLCB0cnVlKTtcclxuICAgIHRoaXMuYWdncmVnYXRlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFeGVjdXRlcyB0aGUgY3VycmVudCBxdWVyeSBhcyBhZ2dyZWdhdGUgc2VhcmNoXHJcbiAgICovXHJcbiAgcHVibGljIGdldFNlYXJjaFN0YXRlKHF1ZXJ5SnNvbjogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5zZWFyY2hTZXJ2aWNlLmdldFNlYXJjaFN0YXRlKHF1ZXJ5SnNvbik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXV0b2NvbXBsZXRlKHRlcm06IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VhcmNoU2VydmljZS5hdXRvY29tcGxldGUodGVybSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGaW5kcyB0aGUgb2JqZWN0IHR5cGUgZWxlbWVudCBpbnNpZGUgb2YgdGhlIHF1ZXJpZXMgdGFyZ2V0IHR5cGVzXHJcbiAgICogZm9yIGEgZm9ybSBlbGVtZW50cyBuYW1lLiBVc2VkIGUuZy4gZm9yIHRoZSBzZWFyY2ggc3VtbWFyeSBwYW5lbC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBmb3JtRWxlbWVudE5hbWUgLSB0aGUgbmFtZSBvZiB0aGUgZm9ybSBlbGVtZW50XHJcbiAgICogQHJldHVybiB0aGUgb2JqZWN0IHR5cGUgZWxlbWVudCBtYXRjaGluZyB0aGUgZm9ybSBlbGVtZW50cyBuYW1lXHJcbiAgICovXHJcbiAgcHVibGljIGdldFRhcmdldFR5cGVFbGVtZW50QnlOYW1lKGZvcm1FbGVtZW50TmFtZTogc3RyaW5nKTogYW55IHtcclxuICAgIGxldCBpID0gMDtcclxuICAgIGxldCBtYXRjaDtcclxuICAgIHdoaWxlICghbWF0Y2ggJiYgaSA8IHRoaXMucXVlcnkudHlwZXMubGVuZ3RoKSB7XHJcbiAgICAgIG1hdGNoID0gdGhpcy5xdWVyeS50eXBlc1tpXS5lbGVtZW50cy5maW5kKChlbGVtZW50KSA9PiBlbGVtZW50LnFuYW1lID09PSBmb3JtRWxlbWVudE5hbWUpO1xyXG4gICAgICBpKys7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbWF0Y2g7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
407
|
+
}], ctorParameters: () => [{ type: i1.SearchService }, { type: i1.EventService }, { type: i1.SystemService }, { type: i2.TranslateService }] });
|
|
408
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLXNlYXJjaC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9lby1mcmFtZXdvcmstY29yZS9zZWFyY2gvYXBwLXNlYXJjaC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxJQUFJLElBQUksY0FBYyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQWEsTUFBTSxNQUFNLENBQUM7QUFDeEYsT0FBTyxFQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDekQsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQ1MsV0FBVyxFQUFFLFdBQVcsRUFDRyxVQUFVLEVBQUUsS0FBSyxFQUMzRCxNQUFNLGNBQWMsQ0FBQzs7OztBQUd0Qjs7OztHQUlHO0FBRUgsTUFBTSxPQUFPLGdCQUFnQjtJQTJCM0IsWUFBb0IsYUFBNEIsRUFDdEMsWUFBMEIsRUFDMUIsTUFBcUIsRUFDckIsU0FBMkI7UUFIakIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDdEMsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUNyQixjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQTVCN0IsVUFBSyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7UUFFMUIsY0FBUyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7UUFDOUIsZUFBVSxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7UUFLdkMseUVBQXlFO1FBQ3pFLHFKQUFxSjtRQUNySixvR0FBb0c7UUFDNUYsZ0JBQVcsR0FBRyxJQUFJLGFBQWEsQ0FBYyxDQUFDLENBQUMsQ0FBQztRQUNoRCxxQkFBZ0IsR0FBRyxJQUFJLGVBQWUsQ0FBYyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFN0UseUZBQXlGO1FBQ3pGLDZGQUE2RjtRQUM3Rix1QkFBdUI7UUFDaEIsV0FBTSxHQUE0QixJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3pFLHVGQUF1RjtRQUN2Riw4RkFBOEY7UUFDOUYsNEZBQTRGO1FBQ3JGLGdCQUFXLEdBQTRCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUM1RSxxQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFDdEIsNkJBQXdCLEdBQUcsRUFBRSxDQUFDO1FBT25DLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO2FBQ3BDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNmLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkIsQ0FBQyxDQUFDLENBQUM7UUFFTCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFbEMsb0VBQW9FO1FBQ3BFLDhFQUE4RTtRQUM5RSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFO1lBRWpELElBQUksQ0FBQyx3QkFBd0IsR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUU1Ryw4REFBOEQ7WUFDOUQsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUU5RixJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7WUFDaEIsY0FBYyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQztpQkFDbkMsSUFBSSxDQUNILE9BQU8sQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsRUFDekMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FDakU7aUJBQ0EsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNmLE1BQU0sQ0FBQyxJQUFJLENBQUM7b0JBQ1YsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksR0FBRztvQkFDMUIsS0FBSyxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUM7aUJBQ3JDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1lBQ0wsSUFBSSxDQUFDLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ2pFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFNBQVM7UUFDUCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQztJQUNwQyxDQUFDO0lBRU8sY0FBYztRQUNwQixJQUFJLENBQUMsSUFBSSxHQUFHO1lBQ1YsSUFBSSxFQUFFLEVBQUU7U0FDVCxDQUFDO0lBQ0osQ0FBQztJQUVELGdFQUFnRTtJQUN4RCxtQkFBbUIsQ0FBQyxLQUFLO1FBQy9CLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUV6QixJQUFJLENBQUMsQ0FBQyxlQUFlLElBQUksQ0FBQyxDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQzVDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDWixDQUFDO1lBQ0QsSUFBSSxDQUFDLENBQUMsQ0FBQyxlQUFlLElBQUksQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUM1QyxPQUFPLENBQUMsQ0FBQztZQUNYLENBQUM7WUFDRCxJQUFJLENBQUMsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQzlCLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDWixDQUFDO1lBQ0QsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUM5QixPQUFPLENBQUMsQ0FBQztZQUNYLENBQUM7WUFDRCxJQUFJLENBQUMsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUM3QixPQUFPLEtBQUssQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDcEQsQ0FBQztZQUNELE9BQU8sS0FBSyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNwRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxxRUFBcUU7SUFDckUsNkJBQTZCO0lBQ3RCLGtCQUFrQjtRQUV2QixJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDZixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDVixLQUFLLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxHQUFHO2dCQUNOLEVBQUUsRUFBRSxDQUFDLEVBQUU7Z0JBQ1AsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLO2dCQUNsQixJQUFJLEVBQUUsRUFBRTthQUNULENBQUM7WUFDRixJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDZixLQUFLLElBQUksVUFBVSxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFFbkMsSUFBSSxDQUFDLEdBQUc7b0JBQ04sRUFBRSxFQUFFLFVBQVUsQ0FBQyxFQUFFO29CQUNqQixLQUFLLEVBQUUsVUFBVSxDQUFDLEtBQUs7b0JBQ3ZCLFFBQVEsRUFBRSxFQUFFO2lCQUNiLENBQUM7Z0JBQ0YsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDO2dCQUNsQixLQUFLLElBQUksRUFBRSxJQUFJLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDbkMsUUFBUSxDQUFDLElBQUksQ0FBQzt3QkFDWixLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUs7d0JBQ2YsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJO3dCQUNiLElBQUksRUFBRSxFQUFFLENBQUMsS0FBSztxQkFDZixDQUFDLENBQUM7Z0JBQ0wsQ0FBQztnQkFDRCxnQkFBZ0I7Z0JBQ2hCLENBQUMsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7Z0JBQ3RELEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEIsQ0FBQztZQUNELENBQUMsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFHL0MsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoQixDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksUUFBUSxDQUFDLEtBQWtCO1FBQ2hDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztZQUNuQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEMsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNJLFVBQVU7UUFDZixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksV0FBVyxFQUFFLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRU8sVUFBVSxDQUFDLEtBQWtCO1FBQ25DLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUMsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztJQUM1RixDQUFDO0lBRUQ7O09BRUc7SUFDSSxnQkFBZ0I7UUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQzVCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQy9CLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQzlCLENBQUM7UUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsR0FBRyxXQUFXLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDO1FBQ3ZFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFFbkIsQ0FBQztJQUVNLE9BQU8sQ0FBQyxJQUFZO1FBQ3pCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUN2QixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsR0FBRyxXQUFXLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQztRQUM3RCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFTSxhQUFhLENBQUMsS0FBaUI7UUFDcEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVELDRFQUE0RTtJQUNyRSxPQUFPLENBQUMsSUFBUyxFQUFFLE1BQU0sR0FBRyxLQUFLO1FBQ3RDLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksRUFBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDdEQsQ0FBQztJQUVEOzs7T0FHRztJQUNJLGVBQWUsQ0FBQyxJQUFnQjtRQUNyQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsR0FBRyxXQUFXLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQztRQUNqRSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLGFBQWEsQ0FBQyxLQUFtQixFQUFFLE1BQWdCO1FBQ3hELElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUN6QixJQUFJLENBQUMsSUFBSSxHQUFHO1lBQ1YsSUFBSSxFQUFFO2dCQUNKLEdBQUcsRUFBRTtvQkFDSCxpQkFBaUIsRUFBRSxFQUFFO2lCQUN0QjthQUNGO1NBQ0YsQ0FBQztRQUNGLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxHQUFHLFdBQVcsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDO1FBQzlELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDWixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDbkIsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLGNBQWMsQ0FBQyxJQUFnQixFQUFFLE1BQWdCO1FBRXRELElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNsRCx1QkFBdUI7WUFDdkIsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RDLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN2Ryw0REFBNEQ7WUFDNUQsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RDLENBQUM7YUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNqRCx3QkFBd0I7WUFDeEIsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RDLENBQUM7UUFDRCw4RUFBOEU7SUFDaEYsQ0FBQztJQUVPLHdCQUF3QixDQUFDLElBQUksRUFBRSxNQUFnQjtRQUNyRCxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3hELE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLElBQUksR0FBRztZQUNWLElBQUksRUFBRTtnQkFDSixHQUFHLEVBQUU7b0JBQ0gsaUJBQWlCLEVBQUUsRUFBRTtpQkFDdEI7YUFDRjtTQUNGLENBQUM7UUFDRixJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ25ELElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxHQUFHLFdBQVcsQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUM7UUFDdkUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNaLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNuQixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNJLGlCQUFpQixDQUFDLE1BQW9CLEVBQUUsUUFBa0I7UUFDL0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxHQUFHLFdBQVcsQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDO1FBQ25FLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksa0JBQWtCLENBQUMsT0FBdUIsRUFBRSxRQUFrQjtRQUNuRSxJQUFJLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFDbkIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUN2QixJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDMUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUcsV0FBVyxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUM7WUFDbkUsU0FBUyxJQUFJLE1BQU0sQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDO1FBQ3JDLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVEOzs7T0FHRztJQUNJLGNBQWMsQ0FBQyxNQUFvQjtRQUN4QyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3QixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsR0FBRyxXQUFXLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQztRQUNqRSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVEOzs7T0FHRztJQUNJLGlCQUFpQixDQUFDLE1BQW9CO1FBQzNDLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsR0FBRyxXQUFXLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQztRQUNuRSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLDBCQUEwQixDQUFDLE9BQXVCLEVBQUUsTUFBZ0I7UUFFekUsdUVBQXVFO1FBQ3ZFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakYsS0FBSyxJQUFJLENBQUMsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQixDQUFDO1FBQ0QsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ1osSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ25CLENBQUM7SUFDSCxDQUFDO0lBRU0sMEJBQTBCLENBQUMsS0FBbUI7UUFDbkQsSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDNUIsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLGlCQUFpQixDQUFDLE1BQW9CO1FBQzNDLHFGQUFxRjtRQUNyRixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsS0FBSyxXQUFXLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDbEgsQ0FBQztJQUVEOztPQUVHO0lBQ0ksU0FBUyxDQUFDLFNBQVMsR0FBRyxFQUFFO1FBRTdCLE1BQU0sUUFBUSxHQUFHLEVBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxFQUFDLENBQUM7UUFDakUsb0RBQW9EO1FBQ3BELElBQUksSUFBSSxDQUFDLHFCQUFxQixLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUM1RCxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN0RCxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQztpQkFDMUIsU0FBUyxDQUFDLENBQUMsVUFBdUIsRUFBRSxFQUFFO2dCQUNyQyxVQUFVLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztnQkFDbEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzlDLENBQUMsQ0FBQyxDQUFDO1lBQ0wsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsTUFBZ0I7UUFDM0IsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ1osSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ25CLENBQUM7SUFDSCxDQUFDO0lBRUQsbUJBQW1CO1FBQ2pCLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFRDs7T0FFRztJQUNJLGNBQWMsQ0FBQyxTQUFjO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVNLFlBQVksQ0FBQyxJQUFZO1FBQzlCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLDBCQUEwQixDQUFDLGVBQXVCO1FBQ3ZELElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNWLElBQUksS0FBSyxDQUFDO1FBQ1YsT0FBTyxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDN0MsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEtBQUssZUFBZSxDQUFDLENBQUM7WUFDMUYsQ0FBQyxFQUFFLENBQUM7UUFDTixDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNLLGdDQUFnQyxDQUFDLEtBQW1CO1FBQzFELE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQWdCLEVBQUUsRUFBRTtZQUNwQyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssdUJBQXVCLEVBQUUsQ0FBQztnQkFDM0MsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUM7Z0JBQ2xELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3pGLENBQUM7WUFDRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs4R0F4YlUsZ0JBQWdCO2tIQUFoQixnQkFBZ0I7OzJGQUFoQixnQkFBZ0I7a0JBRDVCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2Zyb20gYXMgb2JzZXJ2YWJsZUZyb20sIEJlaGF2aW9yU3ViamVjdCwgUmVwbGF5U3ViamVjdCwgT2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7Z3JvdXBCeSwgcmVkdWNlLCBtZXJnZU1hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIFNlYXJjaEZpbHRlciwgU2VhcmNoUXVlcnksIFNlYXJjaFN0YXRlLCBTeXN0ZW1TZXJ2aWNlLFxyXG4gIE9iamVjdFR5cGUsIFNlYXJjaFNlcnZpY2UsIEV2ZW50U2VydmljZSwgRW5haW9FdmVudCwgVXRpbHMsIFF1ZXJ5U2NvcGVcclxufSBmcm9tICdAZW8tc2RrL2NvcmUnO1xyXG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gXCJAbmd4LXRyYW5zbGF0ZS9jb3JlXCI7XHJcblxyXG4vKipcclxuICogQXBwU2VhcmNoU2VydmljZSBpcyB0aGUgYXBwcyBtYWluIGVudHJ5IHBvaW50IGZvciBzZWFyY2hpbmcgKHVzZWQgYnkgdGhlIGFwcEJhclNlYXJjaCBjb21wb25lbnQpLlxyXG4gKiBJdCBwcm92aWRlcyBhbiBgcXVlcnkkYCBvYnNlcnZhYmxlIGNvbXBvbmVudHMgY2FuIHN1YnNjcmliZSB0bywgdG9cclxuICogc3RheSBpbiB0b3VjaCB3aXRoIHVwZGF0ZXMgdG8gdGhlIHF1ZXJ5LlxyXG4gKi9cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgQXBwU2VhcmNoU2VydmljZSB7XHJcblxyXG4gIHByaXZhdGUgcXVlcnkgPSBuZXcgU2VhcmNoUXVlcnkoKTtcclxuICBwcml2YXRlIGFnZ3M6IGFueTtcclxuICBwcml2YXRlIGxhc3RRdWVyeSA9IG5ldyBTZWFyY2hRdWVyeSgpO1xyXG4gIHByaXZhdGUgcXVlcnlTdGF0ZSA9IG5ldyBTZWFyY2hTdGF0ZSgpO1xyXG4gIC8vIEhvbGRzIHRoZSBsYXN0IGFnZ3JlZ2F0aW9uIHByb3BlcnRpZXMgc2VudCB0byB0aGUgc2VydmVyXHJcbiAgLy8gVXNlZCBmb3IgcHJldmVudGluZyByZWR1bmRhbnQgY2FsbHNcclxuICBwcml2YXRlIGxhc3RBZ2dDYWxsQ29tcGFyYXRvcjogc3RyaW5nO1xyXG5cclxuICAvLyBTdWJqZWN0IGhvbGRpbmcgdGhlIGN1cnJlbnQgcXVlcnkgKGluaXRpYWwgdmFsdWUgaXMgYSBuZXcgU2VhcmNoUXVlcnkpXHJcbiAgLy8gQHNlZTogaHR0cDovL2Jsb2cuYW5ndWxhci11bml2ZXJzaXR5LmlvL2hvdy10by1idWlsZC1hbmd1bGFyMi1hcHBzLXVzaW5nLXJ4anMtb2JzZXJ2YWJsZS1kYXRhLXNlcnZpY2VzLXBpdGZhbGxzLXRvLWF2b2lkLyNyeGpzc3ViamVjdGFuZGhvd3RvdXNlaXRcclxuICAvLyB0b2RvOiBtYXliZSBhZGQgc3VwcG9ydCBmb3IgaG9sZGluZyBhIHF1ZXJ5IGhpc3RvcnksIHNvIHRoZSB1c2VyIGNhbiByZWxvYWQgb2xkZXIgcXVlcmllcyBhcyB3ZWxsXHJcbiAgcHJpdmF0ZSBxdWVyeVNvdXJjZSA9IG5ldyBSZXBsYXlTdWJqZWN0PFNlYXJjaFF1ZXJ5PigxKTtcclxuICBwcml2YXRlIHF1ZXJ5U3RhdGVTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNlYXJjaFN0YXRlPih0aGlzLnF1ZXJ5U3RhdGUpO1xyXG5cclxuICAvLyBFeHBvc2UgYW4gb2JzZXJ2YWJsZSBpbnN0ZWFkIG9mIHRoZSBzdWJqZWN0IGl0c2VsZiB0byBwcmV2ZW50IHRoZSBzZXJ2aWNlIGNsaWVudHMgZnJvbVxyXG4gIC8vIHRoZW1zZWx2ZXMgZW1pdHRpbmcgc3RvcmUgdmFsdWVzIGRpcmVjdGx5IGluc3RlYWQgb2YgY2FsbGluZyBhY3Rpb24gbWV0aG9kcywgYW5kIHRoZXJlZm9yZVxyXG4gIC8vIGJ5cGFzc2luZyB0aGUgc3RvcmUuXHJcbiAgcHVibGljIHF1ZXJ5JDogT2JzZXJ2YWJsZTxTZWFyY2hRdWVyeT4gPSB0aGlzLnF1ZXJ5U291cmNlLmFzT2JzZXJ2YWJsZSgpO1xyXG4gIC8vIFNlYXJjaCBzZXJ2aWNlIGFsc28gZXhwb3NlcyBhbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHN0YXRlIG9mIHRoZSBjdXJyZW50IHF1ZXJ5LlxyXG4gIC8vIFdlIHNlcGFyYXRlIHRoZSBzdGF0ZSBvZiB0aGUgcXVlcnkgZnJvbSB0aGUgcXVlcnkgaXRzZWxmIGFzIG90aGVyd2lzZSBjaGFuZ2hpbmcgdGhlIHF1ZXJpZXNcclxuICAvLyBzdGF0ZSB3aWxsIHRyaWdnZXIgYWxsIHN1YnNjcmliZXJzIG9mIHRoZSBxdWVyeSBvYnNlcnZhbGUgYW5kIGxlYWQgdG8gdW5kZXNpcmVkIGJlaGF2aW91clxyXG4gIHB1YmxpYyBxdWVyeVN0YXRlJDogT2JzZXJ2YWJsZTxTZWFyY2hTdGF0ZT4gPSB0aGlzLnF1ZXJ5U3RhdGVTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XHJcbiAgcHVibGljIG9iamVjdFR5cGVHcm91cHMgPSBbXTtcclxuICBwdWJsaWMgdHlwZXNBbGxvd2VkVW5kZXJTeXNyb290ID0gW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc2VhcmNoU2VydmljZTogU2VhcmNoU2VydmljZSxcclxuICAgIHByaXZhdGUgZXZlbnRTZXJ2aWNlOiBFdmVudFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHN5c3RlbTogU3lzdGVtU2VydmljZSxcclxuICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlKSB7XHJcblxyXG4gICAgdGhpcy5zZXREZWZhdWx0QWdncygpO1xyXG4gICAgdGhpcy5ldmVudFNlcnZpY2Uub24oRW5haW9FdmVudC5MT0dPVVQpXHJcbiAgICAgIC5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgICB0aGlzLnJlc2V0KHRydWUpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLnF1ZXJ5U291cmNlLm5leHQodGhpcy5xdWVyeSk7XHJcblxyXG4gICAgLy8gRmV0Y2ggb2JqZWN0IHR5cGVzIGFuZCBncm91cHMgdGhhdCBzZXJ2ZSBhcyBzZWFyY2ggZmlsdGVyIHBhcmFtcy5cclxuICAgIC8vIFRoZXNlIGdyb3VwcyBhcmUgcHJvdmlkZWQgdGhyb3VnaCB0aGUgc2VydmljZXMgYG9iamVjdFR5cGVHcm91cHNgIHByb3BlcnR5LlxyXG4gICAgdGhpcy5zeXN0ZW0uc3lzdGVtJC5zdWJzY3JpYmUoKHN5c3RlbURlZmluaXRpb24pID0+IHtcclxuXHJcbiAgICAgIHRoaXMudHlwZXNBbGxvd2VkVW5kZXJTeXNyb290ID0gc3lzdGVtRGVmaW5pdGlvbi50eXBlcy5maWx0ZXIodHlwZSA9PiB0eXBlLnBhcmVudHR5cGVzLmluY2x1ZGVzKCdzeXNyb290JykpO1xyXG5cclxuICAgICAgLy8gdHJhbnNsYXRlcyBsYWJlbHMgZm9yICdzeXNkbXNjb250ZW50dGVtcGxhdGUnIG9iamVjdCB0eXBlcy5cclxuICAgICAgdGhpcy50eXBlc0FsbG93ZWRVbmRlclN5c3Jvb3QgPSB0aGlzLnVwZGF0ZVN5c0Rtc0NvbnRlbnRUZW1wbGF0ZUxhYmVsKHN5c3RlbURlZmluaXRpb24udHlwZXMpO1xyXG5cclxuICAgICAgbGV0IGdyb3VwcyA9IFtdO1xyXG4gICAgICBvYnNlcnZhYmxlRnJvbShzeXN0ZW1EZWZpbml0aW9uLnR5cGVzKVxyXG4gICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgZ3JvdXBCeSgodHlwZTogYW55KSA9PiB0eXBlLmdyb3VwIHx8ICcwJyksXHJcbiAgICAgICAgICBtZXJnZU1hcChnID0+IGcucGlwZShyZWR1Y2UoKGFjYywgY3VycikgPT4gWy4uLmFjYywgY3Vycl0sIFtdKSkpXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5zdWJzY3JpYmUob3RnID0+IHtcclxuICAgICAgICAgIGdyb3Vwcy5wdXNoKHtcclxuICAgICAgICAgICAgbGFiZWw6IG90Z1swXS5ncm91cCB8fCAnMCcsXHJcbiAgICAgICAgICAgIHR5cGVzOiB0aGlzLnNvcnRPYmplY3RUeXBlR3JvdXAob3RnKVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIHRoaXMub2JqZWN0VHlwZUdyb3VwcyA9IGdyb3Vwcy5zb3J0KFV0aWxzLnNvcnRWYWx1ZXMoJ2xhYmVsJykpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICByZXNldEFnZ3MoKSB7XHJcbiAgICB0aGlzLnNldERlZmF1bHRBZ2dzKCk7XHJcbiAgICB0aGlzLmxhc3RBZ2dDYWxsQ29tcGFyYXRvciA9IG51bGw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldERlZmF1bHRBZ2dzKCkge1xyXG4gICAgdGhpcy5hZ2dzID0ge1xyXG4gICAgICB0eXBlOiB7fVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8vIGhlbHBlciBtZXRob2QgZm9yIHNvcnRpbmcgdGhlIGVudHJpZXMgb2YgYW4gb2JqZWN0IHR5cGUgZ3JvdXBcclxuICBwcml2YXRlIHNvcnRPYmplY3RUeXBlR3JvdXAodHlwZXMpIHtcclxuICAgIHJldHVybiB0eXBlcy5zb3J0KChhLCBiKSA9PiB7XHJcblxyXG4gICAgICBpZiAoYS5pc0NvbnRleHRGb2xkZXIgJiYgIWIuaXNDb250ZXh0Rm9sZGVyKSB7XHJcbiAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghYS5pc0NvbnRleHRGb2xkZXIgJiYgYi5pc0NvbnRleHRGb2xkZXIpIHtcclxuICAgICAgICByZXR1cm4gMTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoYS5pc0ZvbGRlciAmJiAhYi5pc0ZvbGRlcikge1xyXG4gICAgICAgIHJldHVybiAtMTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIWEuaXNGb2xkZXIgJiYgYi5pc0ZvbGRlcikge1xyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChhLmlzRm9sZGVyICYmIGIuaXNGb2xkZXIpIHtcclxuICAgICAgICByZXR1cm4gVXRpbHMuc29ydFZhbHVlcygnbGFiZWwnKS5jYWxsKHRoaXMsIGEsIGIpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBVdGlscy5zb3J0VmFsdWVzKCdsYWJlbCcpLmNhbGwodGhpcywgYSwgYik7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vIEV4dGVuZHMgdGhlIG9iamVjdFR5cGVzR3JvdXBzIGJ5IHRoZSBlbGVtZW50cyBmb3IgZWFjaCBvYmplY3QgdHlwZVxyXG4gIC8vIFVzZWQgaW4gZXhwZXJ0IHNlYXJjaCBtb2RlXHJcbiAgcHVibGljIGJ1aWxkVHlwZUdyb3VwVHJlZSgpIHtcclxuXHJcbiAgICBsZXQgZ1RyZWUgPSBbXTtcclxuICAgIGxldCBpID0gMDtcclxuICAgIGZvciAobGV0IGdyb3VwIG9mIHRoaXMub2JqZWN0VHlwZUdyb3Vwcykge1xyXG4gICAgICBsZXQgZyA9IHtcclxuICAgICAgICBpZDogaSsrLFxyXG4gICAgICAgIGxhYmVsOiBncm91cC5sYWJlbCxcclxuICAgICAgICB0cmVlOiBbXVxyXG4gICAgICB9O1xyXG4gICAgICBsZXQgdHlwZXMgPSBbXTtcclxuICAgICAgZm9yIChsZXQgb2JqZWN0VHlwZSBvZiBncm91cC50eXBlcykge1xyXG5cclxuICAgICAgICBsZXQgdCA9IHtcclxuICAgICAgICAgIGlkOiBvYmplY3RUeXBlLmlkLFxyXG4gICAgICAgICAgbGFiZWw6IG9iamVjdFR5cGUubGFiZWwsXHJcbiAgICAgICAgICBjaGlsZHJlbjogW11cclxuICAgICAgICB9O1xyXG4gICAgICAgIGxldCBjaGlsZHJlbiA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IGVsIG9mIG9iamVjdFR5cGUuZWxlbWVudHMpIHtcclxuICAgICAgICAgIGNoaWxkcmVuLnB1c2goe1xyXG4gICAgICAgICAgICBsYWJlbDogZWwubGFiZWwsXHJcbiAgICAgICAgICAgIHR5cGU6IGVsLnR5cGUsXHJcbiAgICAgICAgICAgIGRhdGE6IGVsLnFuYW1lXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gc29ydCBieSBsYWJlbFxyXG4gICAgICAgIHQuY2hpbGRyZW4gPSBjaGlsZHJlbi5zb3J0KFV0aWxzLnNvcnRWYWx1ZXMoJ2xhYmVsJykpO1xyXG4gICAgICAgIHR5cGVzLnB1c2godCk7XHJcbiAgICAgIH1cclxuICAgICAgZy50cmVlID0gdHlwZXMuc29ydChVdGlscy5zb3J0VmFsdWVzKCdsYWJlbCcpKTtcclxuXHJcblxyXG4gICAgICBnVHJlZS5wdXNoKGcpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGdUcmVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT3ZlcnJpZGUgdGhlIGN1cnJlbnQgcXVlcnkgYnkgYSBkaWZmZXJlbnQgb25lLlxyXG4gICAqIFRoaXMgY291bGQgYmUgZG9uZSBieSBmb3IgZXhhbXBsZSBsb2FkaW5nIGEgc3RvcmVkIHF1ZXJ5LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHF1ZXJ5IC0gdGhlIHF1ZXJ5IHRoYXQgc2hvdWxkIHJlcGxhY2UgdGhlIGN1cnJlbnQgcXVlcnksIHRoaXMgbWF5IGJlIGVpdGhlciBhIFNlYXJjaFF1ZXJ5IGluc3RhbmNlLFxyXG4gICAqIGEgSlNPTiBzdHJpbmcgb2YgYW4gb2JqZWN0IG1hdGNoaW5nIHRoZSBzZWFyY2ggYXBpXHJcbiAgICovXHJcbiAgcHVibGljIHNldFF1ZXJ5KHF1ZXJ5OiBTZWFyY2hRdWVyeSkge1xyXG4gICAgaWYgKHRoaXMuaXNOZXdRdWVyeShxdWVyeSkpIHtcclxuICAgICAgdGhpcy5zZXREZWZhdWx0QWdncygpO1xyXG4gICAgICB0aGlzLnF1ZXJ5ID0gcXVlcnk7XHJcbiAgICAgIHRoaXMucXVlcnlTb3VyY2UubmV4dCh0aGlzLnF1ZXJ5KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlc2V0cyB0aGUgY3VycmVudCBxdWVyeS5cclxuICAgKi9cclxuICBwdWJsaWMgY2xlYXJRdWVyeSgpIHtcclxuICAgIHRoaXMuc2V0UXVlcnkobmV3IFNlYXJjaFF1ZXJ5KCkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc05ld1F1ZXJ5KHF1ZXJ5OiBTZWFyY2hRdWVyeSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHF1ZXJ5LmdldFF1ZXJ5SnNvbigpKSAhPT0gSlNPTi5zdHJpbmdpZnkodGhpcy5xdWVyeS5nZXRRdWVyeUpzb24oKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiB0b2dnbGVzIHRoZSBzZWFyY2htb2RlIGZyb20gcmVndWxhciBzZWFyY2ggdG8gZXhwZXJ0IHNlYXJjaCBhbmQgdmljZSB2ZXJzYVxyXG4gICAqL1xyXG4gIHB1YmxpYyB0b2dnbGVFeHBlcnRNb2RlKCkge1xyXG4gICAgaWYgKCF0aGlzLnF1ZXJ5LmV4cGVydE1vZGUpIHtcclxuICAgICAgdGhpcy5sYXN0UXVlcnkgPSB0aGlzLnF1ZXJ5O1xyXG4gICAgICB0aGlzLnNldERlZmF1bHRBZ2dzKCk7XHJcbiAgICAgIHRoaXMucXVlcnkgPSBuZXcgU2VhcmNoUXVlcnkoKTtcclxuICAgICAgdGhpcy5xdWVyeS5leHBlcnRNb2RlID0gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucXVlcnkgPSB0aGlzLmxhc3RRdWVyeTtcclxuICAgIH1cclxuICAgIHRoaXMucXVlcnkuX191cGRhdGVDYXVzZSA9IFNlYXJjaFF1ZXJ5LlVQREFURV9DQVVTRS5UT0dHTEVEX0VYUEVSVE1PREU7XHJcbiAgICB0aGlzLnF1ZXJ5U291cmNlLm5leHQodGhpcy5xdWVyeSk7XHJcbiAgICB0aGlzLmFnZ3JlZ2F0ZSgpO1xyXG5cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRUZXJtKHRlcm06IHN0cmluZykge1xyXG4gICAgdGhpcy5xdWVyeS50ZXJtID0gdGVybTtcclxuICAgIHRoaXMucXVlcnkuX191cGRhdGVDYXVzZSA9IFNlYXJjaFF1ZXJ5LlVQREFURV9DQVVTRS5URVJNX1NFVDtcclxuICAgIHRoaXMucXVlcnlTb3VyY2UubmV4dCh0aGlzLnF1ZXJ5KTtcclxuICAgIHRoaXMuYWdncmVnYXRlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0UXVlcnlTY29wZShzY29wZTogUXVlcnlTY29wZSkge1xyXG4gICAgdGhpcy5xdWVyeS5zY29wZSA9IHNjb3BlO1xyXG4gICAgdGhpcy5xdWVyeVNvdXJjZS5uZXh0KHRoaXMucXVlcnkpO1xyXG4gICAgdGhpcy5hZ2dyZWdhdGUoKTtcclxuICB9XHJcblxyXG4gIC8vIHNldCBhZ2dyZWdhdGlvbiBwcm9wZXJ0aWVzIHRvIGJlIGFwcGxpZWQgdG8gT05MWSBhZ2dyZWdhdGUgc2VhcmNoIHF1ZXJpZXNcclxuICBwdWJsaWMgc2V0QWdncyhhZ2dzOiBhbnksIGV4dGVuZCA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLmFnZ3MgPSBleHRlbmQgPyB7Li4udGhpcy5hZ2dzLCAuLi5hZ2dzfSA6IGFnZ3M7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUb2dnbGVzIGEgdHlwZSBmaWx0ZXIuXHJcbiAgICogQHBhcmFtIHR5cGUgLSBvYmplY3QgdHlwZVxyXG4gICAqL1xyXG4gIHB1YmxpYyB0b2dnbGVRdWVyeVR5cGUodHlwZTogT2JqZWN0VHlwZSkge1xyXG4gICAgdGhpcy5xdWVyeS50b2dnbGVUeXBlKHR5cGUpO1xyXG4gICAgdGhpcy5xdWVyeS5fX3VwZGF0ZUNhdXNlID0gU2VhcmNoUXVlcnkuVVBEQVRFX0NBVVNFLlRPR0dMRURfVFlQRTtcclxuICAgIHRoaXMucXVlcnlTb3VyY2UubmV4dCh0aGlzLnF1ZXJ5KTtcclxuICAgIHRoaXMuYWdncmVnYXRlKFNlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TLlRZUEUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgcXVlcmllcyB0YXJnZXQgdHlwZXMuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gdHlwZXMgLSBhcnJheSBvZiBPYmplY3RUeXBlc1xyXG4gICAqIEBwYXJhbSBzaWxlbnQgSWYgc2V0IHRvIHRydWUgYWdncmVnYXRlIHdvbid0IGJlIGNhbGxlZFxyXG4gICAqL1xyXG4gIHB1YmxpYyBzZXRRdWVyeVR5cGVzKHR5cGVzOiBPYmplY3RUeXBlW10sIHNpbGVudD86IGJvb2xlYW4pIHtcclxuICAgIHRoaXMucXVlcnkudHlwZXMgPSB0eXBlcztcclxuICAgIHRoaXMuYWdncyA9IHtcclxuICAgICAgdHlwZToge1xyXG4gICAgICAgIHN1Yjoge1xyXG4gICAgICAgICAgY29udGV4dGZvbGRlcnR5cGU6IHt9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gICAgdGhpcy5xdWVyeS5fX3VwZGF0ZUNhdXNlID0gU2VhcmNoUXVlcnkuVVBEQVRFX0NBVVNFLlRZUEVTX1NFVDtcclxuICAgIHRoaXMucXVlcnlTb3VyY2UubmV4dCh0aGlzLnF1ZXJ5KTtcclxuICAgIGlmICghc2lsZW50KSB7XHJcbiAgICAgIHRoaXMuYWdncmVnYXRlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBxdWVyaWVzIHRhcmdldCBjb250ZXh0IHR5cGUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gdHlwZSBUaGUgY29udGV4dCB0eXBlIHRvIGJlIHNldCBvciBudWxsIGZvciByZXNldHRpbmdcclxuICAgKiBAcGFyYW0gc2lsZW50IElmIHNldCB0byB0cnVlIGFnZ3JlZ2F0ZSB3b24ndCBiZSBjYWxsZWRcclxuICAgKi9cclxuICBwdWJsaWMgc2V0Q29udGV4dFR5cGUodHlwZTogT2JqZWN0VHlwZSwgc2lsZW50PzogYm9vbGVhbikge1xyXG5cclxuICAgIGlmICh0aGlzLnF1ZXJ5LmNvbnRleHRGb2xkZXJUeXBlcy5sZW5ndGggJiYgIXR5cGUpIHtcclxuICAgICAgLy8gY2xlYXIgY29udGV4dCBmb2xkZXJcclxuICAgICAgdGhpcy5lbWl0TmV3Q29udGV4dEZvbGRlclR5cGUobnVsbCk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMucXVlcnkuY29udGV4dEZvbGRlclR5cGVzLmxlbmd0aCAmJiB0eXBlLm5hbWUgIT09IHRoaXMucXVlcnkuY29udGV4dEZvbGRlclR5cGVzWzBdLm5hbWUpIHtcclxuICAgICAgLy8gZ290IGEgdHlwZSB0byBiZSBzZXQgdXAgdGhhdCBkaWZmZXJzIGZyb20gdGhlIGN1cnJlbnQgb25lXHJcbiAgICAgIHRoaXMuZW1pdE5ld0NvbnRleHRGb2xkZXJUeXBlKHR5cGUpO1xyXG4gICAgfSBlbHNlIGlmICghdGhpcy5xdWVyeS5jb250ZXh0Rm9sZGVyVHlwZXMubGVuZ3RoKSB7XHJcbiAgICAgIC8vIG5vdGhpbmcgc2V0IHVwIHNvIGZhclxyXG4gICAgICB0aGlzLmVtaXROZXdDb250ZXh0Rm9sZGVyVHlwZSh0eXBlKTtcclxuICAgIH1cclxuICAgIC8vIHRyeWluZyB0byBzZXR1cCB0aGUgc2FtZSB0eXBlIGFzIHRoZSBjdXJyZW50IG9uIHNob3VsZCBub3QgZW1pdCBhIG5ldyB2YWx1ZVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBlbWl0TmV3Q29udGV4dEZvbGRlclR5cGUodHlwZSwgc2lsZW50PzogYm9vbGVhbikge1xyXG4gICAgaWYgKCF0eXBlICYmIHRoaXMucXVlcnkuY29udGV4dEZvbGRlclR5cGVzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmFnZ3MgPSB7XHJcbiAgICAgIHR5cGU6IHtcclxuICAgICAgICBzdWI6IHtcclxuICAgICAgICAgIGNvbnRleHRmb2xkZXJ0eXBlOiB7fVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfTtcclxuICAgIHRoaXMucXVlcnkuY29udGV4dEZvbGRlclR5cGVzID0gdHlwZSA/IFt0eXBlXSA6IFtdO1xyXG4gICAgdGhpcy5xdWVyeS5fX3VwZGF0ZUNhdXNlID0gU2VhcmNoUXVlcnkuVVBEQVRFX0NBVVNFLkNPTlRFWFRfRk9MREVSX1NFVDtcclxuICAgIHRoaXMucXVlcnlTb3VyY2UubmV4dCh0aGlzLnF1ZXJ5KTtcclxuICAgIGlmICghc2lsZW50KSB7XHJcbiAgICAgIHRoaXMuYWdncmVnYXRlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUb2dnbGVzIGEgY3JlYXRlZCBmaWx0ZXIuXHJcbiAgICogQHBhcmFtIGZpbHRlciAtIHRoZSBmaWx0ZXIgdG8gYmUgdG9nZ2xlZFxyXG4gICAqL1xyXG4gIHB1YmxpYyB0b2dnbGVRdWVyeUZpbHRlcihmaWx0ZXI6IFNlYXJjaEZpbHRlciwgb3ZlcnJpZGU/OiBib29sZWFuKSB7XHJcbiAgICB0aGlzLnF1ZXJ5LnRvZ2dsZUZpbHRlcihmaWx0ZXIsIG92ZXJyaWRlKTtcclxuICAgIHRoaXMucXVlcnkuX191cGRhdGVDYXVzZSA9IFNlYXJjaFF1ZXJ5LlVQREFURV9DQVVTRS5UT0dHTEVEX0ZJTFRFUjtcclxuICAgIHRoaXMucXVlcnlTb3VyY2UubmV4dCh0aGlzLnF1ZXJ5KTtcclxuICAgIHRoaXMuYWdncmVnYXRlKGZpbHRlci5wcm9wZXJ0eSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUb2dnbGVzIGNyZWF0ZWQgZmlsdGVycyBhbmQgYWdncmVnYXRlcyB0aGVtIHRvZ2V0aGVyLlxyXG4gICAqIEBwYXJhbSBmaWx0ZXJzIC0gdGhlIGZpbHRlcnMgdG8gYmUgdG9nZ2xlZFxyXG4gICAqL1xyXG4gIHB1YmxpYyB0b2dnbGVRdWVyeUZpbHRlcnMoZmlsdGVyczogU2VhcmNoRmlsdGVyW10sIG92ZXJyaWRlPzogYm9vbGVhbikge1xyXG4gICAgbGV0IGJhc2VQYXJhbSA9ICcnO1xyXG4gICAgZmlsdGVycy5mb3JFYWNoKGZpbHRlciA9PiB7XHJcbiAgICAgIHRoaXMucXVlcnkudG9nZ2xlRmlsdGVyKGZpbHRlciwgb3ZlcnJpZGUpO1xyXG4gICAgICB0aGlzLnF1ZXJ5Ll9fdXBkYXRlQ2F1c2UgPSBTZWFyY2hRdWVyeS5VUERBVEVfQ0FVU0UuVE9HR0xFRF9GSUxURVI7XHJcbiAgICAgIGJhc2VQYXJhbSArPSBmaWx0ZXIucHJvcGVydHkgKyAnICc7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnF1ZXJ5U291cmNlLm5leHQodGhpcy5xdWVyeSk7XHJcbiAgICB0aGlzLmFnZ3JlZ2F0ZShiYXNlUGFyYW0udHJpbSgpKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZHMgYSBmaWx0ZXIgdG8gdGhlIHF1ZXJ5LlxyXG4gICAqIEBwYXJhbSBmaWx0ZXIgLSB0aGUgZmlsdGVyIHRvIGJlIGFkZGVkXHJcbiAgICovXHJcbiAgcHVibGljIGFkZFF1ZXJ5RmlsdGVyKGZpbHRlcjogU2VhcmNoRmlsdGVyKSB7XHJcbiAgICB0aGlzLnF1ZXJ5LmFkZEZpbHRlcihmaWx0ZXIpO1xyXG4gICAgdGhpcy5xdWVyeS5fX3VwZGF0ZUNhdXNlID0gU2VhcmNoUXVlcnkuVVBEQVRFX0NBVVNFLkFEREVEX0ZJTFRFUjtcclxuICAgIHRoaXMucXVlcnlTb3VyY2UubmV4dCh0aGlzLnF1ZXJ5KTtcclxuICAgIHRoaXMuYWdncmVnYXRlKGZpbHRlci5wcm9wZXJ0eSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZW1vdmVzIGEgZmlsdGVyIHRvIHRoZSBxdWVyeS5cclxuICAgKiBAcGFyYW0gZmlsdGVyIC0gdGhlIGZpbHRlciB0byBiZSByZW1vdmVkXHJcbiAgICovXHJcbiAgcHVibGljIHJlbW92ZVF1ZXJ5RmlsdGVyKGZpbHRlcjogU2VhcmNoRmlsdGVyKSB7XHJcbiAgICB0aGlzLnF1ZXJ5LnJlbW92ZUZpbHRlcihmaWx0ZXIucHJvcGVydHkpO1xyXG4gICAgdGhpcy5xdWVyeS5fX3VwZGF0ZUNhdXNlID0gU2VhcmNoUXVlcnkuVVBEQVRFX0NBVVNFLlJFTU9WRURfRklMVEVSO1xyXG4gICAgdGhpcy5xdWVyeVNvdXJjZS5uZXh0KHRoaXMucXVlcnkpO1xyXG4gICAgdGhpcy5hZ2dyZWdhdGUoZmlsdGVyLnByb3BlcnR5KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIGZpbHRlcnMgZm9yIGFuIGluZGV4ZGF0YSBzZWFyY2guXHJcbiAgICogU2V0dGluZyB0aGVtIHdpbGwgYWxzbyByZW1vdmUgYWxsIGluZGV4ZGF0YSBmaWx0ZXJzIHNldCBiZWZvcmUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gZmlsdGVycyAtIHRoZSBmaWx0ZXJzIHRvIGJlIHNldFxyXG4gICAqIEBwYXJhbSBzaWxlbnQgSWYgc2V0IHRvIHRydWUgYWdncmVnYXRlIHdvbid0IGJlIGNhbGxlZFxyXG4gICAqL1xyXG4gIHB1YmxpYyBzZXRJbmRleFNlYXJjaFF1ZXJ5RmlsdGVycyhmaWx0ZXJzOiBTZWFyY2hGaWx0ZXJbXSwgc2lsZW50PzogYm9vbGVhbikge1xyXG5cclxuICAgIC8vIHJlbW92ZSBwcmV2aW91cyBmaWx0ZXJzIChhbGwgZmlsdGVycyB0aGF0IGFyZSBub3QgYmFzZXBhcmFtIGZpbHRlcnMpXHJcbiAgICB0aGlzLnF1ZXJ5LmZpbHRlcnMgPSB0aGlzLnF1ZXJ5LmZpbHRlcnMuZmlsdGVyKChmKSA9PiB0aGlzLmlzQmFzZVBhcmFtRmlsdGVyKGYpKTtcclxuICAgIGZvciAobGV0IGYgb2YgZmlsdGVycykge1xyXG4gICAgICB0aGlzLnF1ZXJ5LmFkZEZpbHRlcihmKTtcclxuICAgIH1cclxuICAgIGlmICghc2lsZW50KSB7XHJcbiAgICAgIHRoaXMuYWdncmVnYXRlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0SW5kZXhTZWFyY2hRdWVyeUZpbHRlcnMocXVlcnk/OiBTZWFyY2hRdWVyeSk6IFNlYXJjaEZpbHRlcltdIHtcclxuICAgIGxldCBxID0gcXVlcnkgfHwgdGhpcy5xdWVyeTtcclxuICAgIHJldHVybiBxLmZpbHRlcnMuZmlsdGVyKChmKSA9PiAhdGhpcy5pc0Jhc2VQYXJhbUZpbHRlcihmKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IHRoZSBwcm92aWRlZCBzZWFyY2ggZmlsdGVyIGJlbG9uZ3MgdG8gYSBiYXNlIHBhcmFtLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGZpbHRlciAtIHRoZSBmaWx0ZXIgdG8gYmUgY2hlY2tlZFxyXG4gICAqL1xyXG4gIHB1YmxpYyBpc0Jhc2VQYXJhbUZpbHRlcihmaWx0ZXI6IFNlYXJjaEZpbHRlcik6IGJvb2xlYW4ge1xyXG4gICAgLy9yZXR1cm4gT2JqZWN0LnZhbHVlcyhTZWFyY2hRdWVyeS5CQVNFX1BBUkFNUykuc29tZSgoYnApID0+IGZpbHRlci5wcm9wZXJ0eSA9PT0gYnApO1xyXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKFNlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TKS5zb21lKChicEtleSkgPT4gZmlsdGVyLnByb3BlcnR5ID09PSBTZWFyY2hRdWVyeS5CQVNFX1BBUkFNU1ticEtleV0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRXhlY3V0ZXMgdGhlIGN1cnJlbnQgcXVlcnkgYXMgYWdncmVnYXRlIHNlYXJjaFxyXG4gICAqL1xyXG4gIHB1YmxpYyBhZ2dyZWdhdGUoYmFzZVBhcmFtID0gJycpIHtcclxuXHJcbiAgICBjb25zdCBhZ2dRdWVyeSA9IHthZ2dzOiB0aGlzLmFnZ3MsIC4uLnRoaXMucXVlcnkuZ2V0UXVlcnlKc29uKCl9O1xyXG4gICAgLy8gY29tcGFyZSB0aGUgY2FsbCB0byBiZSBtYWRlIHdpdGggYSBmb3JtZXIgcmVxdWVzdFxyXG4gICAgaWYgKHRoaXMubGFzdEFnZ0NhbGxDb21wYXJhdG9yICE9PSBKU09OLnN0cmluZ2lmeShhZ2dRdWVyeSkpIHtcclxuICAgICAgdGhpcy5sYXN0QWdnQ2FsbENvbXBhcmF0b3IgPSBKU09OLnN0cmluZ2lmeShhZ2dRdWVyeSk7XHJcbiAgICAgIHRoaXMuZ2V0U2VhcmNoU3RhdGUoYWdnUXVlcnkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgocXVlcnlTdGF0ZTogU2VhcmNoU3RhdGUpID0+IHtcclxuICAgICAgICAgIHF1ZXJ5U3RhdGUubGFzdENoYW5nZSA9IGJhc2VQYXJhbTtcclxuICAgICAgICAgIHRoaXMucXVlcnlTdGF0ZSA9IHF1ZXJ5U3RhdGU7XHJcbiAgICAgICAgICB0aGlzLnF1ZXJ5U3RhdGVTb3VyY2UubmV4dCh0aGlzLnF1ZXJ5U3RhdGUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlc2V0IHRoZSBxdWVyeVxyXG4gICAqL1xyXG4gIHB1YmxpYyByZXNldChzaWxlbnQ/OiBib29sZWFuKSB7XHJcbiAgICB0aGlzLnF1ZXJ5ID0gbmV3IFNlYXJjaFF1ZXJ5KCk7XHJcbiAgICB0aGlzLnNldERlZmF1bHRBZ2dzKCk7XHJcbiAgICB0aGlzLnF1ZXJ5U291cmNlLm5leHQodGhpcy5xdWVyeSk7XHJcbiAgICBpZiAoIXNpbGVudCkge1xyXG4gICAgICB0aGlzLmFnZ3JlZ2F0ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZXhpdEluZGV4ZGF0YVNlYXJjaCgpIHtcclxuICAgIHRoaXMuc2V0SW5kZXhTZWFyY2hRdWVyeUZpbHRlcnMoW10sIHRydWUpO1xyXG4gICAgdGhpcy5zZXRRdWVyeVR5cGVzKFtdLCB0cnVlKTtcclxuICAgIHRoaXMuc2V0Q29udGV4dFR5cGUobnVsbCwgdHJ1ZSk7XHJcbiAgICB0aGlzLmFnZ3JlZ2F0ZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRXhlY3V0ZXMgdGhlIGN1cnJlbnQgcXVlcnkgYXMgYWdncmVnYXRlIHNlYXJjaFxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXRTZWFyY2hTdGF0ZShxdWVyeUpzb246IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VhcmNoU2VydmljZS5nZXRTZWFyY2hTdGF0ZShxdWVyeUpzb24pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGF1dG9jb21wbGV0ZSh0ZXJtOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLnNlYXJjaFNlcnZpY2UuYXV0b2NvbXBsZXRlKHRlcm0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRmluZHMgdGhlIG9iamVjdCB0eXBlIGVsZW1lbnQgaW5zaWRlIG9mIHRoZSBxdWVyaWVzIHRhcmdldCB0eXBlc1xyXG4gICAqIGZvciBhIGZvcm0gZWxlbWVudHMgbmFtZS4gVXNlZCBlLmcuIGZvciB0aGUgc2VhcmNoIHN1bW1hcnkgcGFuZWwuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gZm9ybUVsZW1lbnROYW1lIC0gdGhlIG5hbWUgb2YgdGhlIGZvcm0gZWxlbWVudFxyXG4gICAqIEByZXR1cm4gdGhlIG9iamVjdCB0eXBlIGVsZW1lbnQgbWF0Y2hpbmcgdGhlIGZvcm0gZWxlbWVudHMgbmFtZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXRUYXJnZXRUeXBlRWxlbWVudEJ5TmFtZShmb3JtRWxlbWVudE5hbWU6IHN0cmluZyk6IGFueSB7XHJcbiAgICBsZXQgaSA9IDA7XHJcbiAgICBsZXQgbWF0Y2g7XHJcbiAgICB3aGlsZSAoIW1hdGNoICYmIGkgPCB0aGlzLnF1ZXJ5LnR5cGVzLmxlbmd0aCkge1xyXG4gICAgICBtYXRjaCA9IHRoaXMucXVlcnkudHlwZXNbaV0uZWxlbWVudHMuZmluZCgoZWxlbWVudCkgPT4gZWxlbWVudC5xbmFtZSA9PT0gZm9ybUVsZW1lbnROYW1lKTtcclxuICAgICAgaSsrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG1hdGNoO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlcyB0aGUgbGFiZWwgb2YgYHN5c2Rtc2NvbnRlbnR0ZW1wbGF0ZWAgb2JqZWN0IHR5cGVzIHVzaW5nIHRyYW5zbGF0aW9ucy5cclxuICAgKlxyXG4gICAqIFRoaXMgbWV0aG9kIGlzIHVzZWZ1bCBmb3IgZW5zdXJpbmcgdGhhdCB0aGUgZGlzcGxheWVkIGxhYmVscyBmb3IgdGhlc2Ugb2JqZWN0IHR5cGVzIGFyZSBsb2NhbGl6ZWQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09iamVjdFR5cGVbXX0gdHlwZXMgLSBBbiBhcnJheSBvZiBvYmplY3QgdHlwZXMgdG8gdXBkYXRlLlxyXG4gICAqIEByZXR1cm5zIHtPYmplY3RUeXBlW119IFRoZSB1cGRhdGVkIGFycmF5IG9mIG9iamVjdCB0eXBlcyB3aXRoIHRyYW5zbGF0ZWQgbGFiZWxzIGZvciBgc3lzZG1zY29udGVudHRlbXBsYXRlYCB0eXBlcy5cclxuICAgKi9cclxuICBwcml2YXRlIHVwZGF0ZVN5c0Rtc0NvbnRlbnRUZW1wbGF0ZUxhYmVsKHR5cGVzOiBPYmplY3RUeXBlW10pOiBPYmplY3RUeXBlW10ge1xyXG4gICAgcmV0dXJuIHR5cGVzLm1hcCgodHlwZTogT2JqZWN0VHlwZSkgPT4ge1xyXG4gICAgICBpZiAodHlwZS5xbmFtZSA9PT0gJ3N5c2Rtc2NvbnRlbnR0ZW1wbGF0ZScpIHtcclxuICAgICAgICB0eXBlLmFjdHVhbExhYmVsID0gdHlwZS5hY3R1YWxMYWJlbCB8fCB0eXBlLmxhYmVsO1xyXG4gICAgICAgIHR5cGUubGFiZWwgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGBlby50eXBlLmxhYmVsLiR7dHlwZS5hY3R1YWxMYWJlbC50b0xvd2VyQ2FzZSgpfWApO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0eXBlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|