mmhglobal-dynamicform 2.0.0-beta.76 → 2.0.0-beta.77
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/README.md +7 -0
- package/esm2020/lib/components/inputfieldbase.component.mjs +58 -44
- package/esm2020/lib/services/zcomponent.debug.service.mjs +8 -2
- package/esm2020/lib/zudf/zudf.component.mjs +24 -2
- package/fesm2015/mmhglobal-dynamicform.mjs +89 -46
- package/fesm2015/mmhglobal-dynamicform.mjs.map +1 -1
- package/fesm2020/mmhglobal-dynamicform.mjs +87 -45
- package/fesm2020/mmhglobal-dynamicform.mjs.map +1 -1
- package/lib/components/inputfieldbase.component.d.ts +1 -0
- package/lib/zudf/zudf.component.d.ts +6 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -3,6 +3,13 @@
|
|
|
3
3
|
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 11.2.13.
|
|
4
4
|
|
|
5
5
|
## Changelog
|
|
6
|
+
`2.77beta`<br/>
|
|
7
|
+
[debugger] - handle extra watch list item.<br/>
|
|
8
|
+
[zudf] - add zudf zmodel to the console watch list dropdown.<br/>
|
|
9
|
+
[zudf] - added clearZModel function and also trigger clearZModel when render field element.<br/>
|
|
10
|
+
[zudf] - reset validator for component after added data to grid for multivaluegroup.<br/>
|
|
11
|
+
[inputfieldbase] - zudf field handle nested cascading dropdown and also auto select for required field.
|
|
12
|
+
|
|
6
13
|
`2.76beta`<br/>
|
|
7
14
|
[zudf] - remove underscore for zudf scope prefix.
|
|
8
15
|
|
|
@@ -72,50 +72,14 @@ export class InputFieldBase extends FieldBase {
|
|
|
72
72
|
}
|
|
73
73
|
handleZudfChange(event, fieldValue) {
|
|
74
74
|
const zudfFieldValue = this.getFieldValue(event, fieldValue);
|
|
75
|
-
const
|
|
76
|
-
if (!
|
|
75
|
+
const zudfScope = ZComponentHelper.getZudfScope(this.group, this.data.Value);
|
|
76
|
+
if (!zudfScope) {
|
|
77
77
|
console.log('zudf scope is null for field onchange.');
|
|
78
78
|
}
|
|
79
|
-
|
|
79
|
+
zudfScope.zModel[this.data.Value] = zudfFieldValue;
|
|
80
80
|
of({}).pipe(tap(res => {
|
|
81
|
-
if (
|
|
82
|
-
|
|
83
|
-
// #1 check is the onchange component linked to other component.
|
|
84
|
-
// #2 if linked to other component(lets call it child component),
|
|
85
|
-
// base on the linkedComponentScope value, find the child component.
|
|
86
|
-
// #3 keep the original SelectOptions in the component.
|
|
87
|
-
// #4 clear the child zmodel and filter the child component options.
|
|
88
|
-
linkedComponentScope.forEach(item => {
|
|
89
|
-
const dataValueSegments = this.data.Value.split('_');
|
|
90
|
-
const linkedComponentSegments = item.linkedComponent.split('_');
|
|
91
|
-
let isLinkedComponent = false;
|
|
92
|
-
// check is it linkedcomponent
|
|
93
|
-
if (linkedComponentSegments.length > 1 && dataValueSegments.length > 3) {
|
|
94
|
-
const lastTwoSegments = dataValueSegments.slice(-2).join('_');
|
|
95
|
-
if (linkedComponentSegments.join('_') === lastTwoSegments) {
|
|
96
|
-
isLinkedComponent = true;
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
else if (linkedComponentSegments.length === 1) {
|
|
100
|
-
const lastSegment = dataValueSegments[dataValueSegments.length - 1];
|
|
101
|
-
if (linkedComponentSegments[0] === lastSegment) {
|
|
102
|
-
isLinkedComponent = true;
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
if (isLinkedComponent) {
|
|
106
|
-
const childComponent = ZComponentHelper.getComponentByValue(this.group, item.value);
|
|
107
|
-
const originalSelectOptions = childComponent.data['originalSelectOptions'] ?? Object.assign([], childComponent.data.SelectOptions);
|
|
108
|
-
const filteredSelectionOptions = originalSelectOptions.filter(option => option.parentExpression == fieldValue);
|
|
109
|
-
//childComponent.clearData(); //unable to use clearData. not handled for zudf type
|
|
110
|
-
// manuall patch the component formcontrol value
|
|
111
|
-
getZudfScope.zModel[item.value] = null;
|
|
112
|
-
const zudfForm = getZudfScope.form;
|
|
113
|
-
const componentFormControl = zudfForm.controls[item.value];
|
|
114
|
-
componentFormControl.patchValue(getZudfScope.zModel[item.value]);
|
|
115
|
-
childComponent.data['originalSelectOptions'] = originalSelectOptions;
|
|
116
|
-
childComponent.setSelectOption(filteredSelectionOptions);
|
|
117
|
-
}
|
|
118
|
-
});
|
|
81
|
+
if (zudfScope.linkedComponent) {
|
|
82
|
+
this.cascadingHandling(zudfScope, this.data.Value, fieldValue);
|
|
119
83
|
}
|
|
120
84
|
}), tap(res => {
|
|
121
85
|
if (this.data['AutoPopulateChildFieldValue']) {
|
|
@@ -136,12 +100,12 @@ export class InputFieldBase extends FieldBase {
|
|
|
136
100
|
}
|
|
137
101
|
}
|
|
138
102
|
// set to all related zMode of the dropdown
|
|
139
|
-
let fg =
|
|
103
|
+
let fg = zudfScope.form;
|
|
140
104
|
childFields.forEach(childField => {
|
|
141
105
|
// remove symbol.
|
|
142
106
|
let childFieldName = encodeURI(childField.replace(/[^a-z0-9]/gi, ""));
|
|
143
107
|
const fieldModelName = this.data.Name + childFieldName;
|
|
144
|
-
const zModels =
|
|
108
|
+
const zModels = zudfScope.zModel;
|
|
145
109
|
const childComponent = ZComponentHelper.getComponent(this.group, 'text_' + fieldModelName);
|
|
146
110
|
if (childComponent['data']['ReadOnly'] && !fieldValue) {
|
|
147
111
|
// clear child field if only readonly is true.
|
|
@@ -168,6 +132,56 @@ export class InputFieldBase extends FieldBase {
|
|
|
168
132
|
this.triggerEvent("inputfield-onChange", this.data.OnChange, event, fieldValue);
|
|
169
133
|
});
|
|
170
134
|
}
|
|
135
|
+
cascadingHandling(zudfScope, fieldName, fieldValue) {
|
|
136
|
+
const linkedComponentScope = zudfScope.linkedComponent;
|
|
137
|
+
// #1 check is the onchange component linked to other component.
|
|
138
|
+
// #2 if linked to other component(lets call it child component),
|
|
139
|
+
// base on the linkedComponentScope value, find the child component.
|
|
140
|
+
// #3 keep the original SelectOptions in the component.
|
|
141
|
+
// #4 clear the child zmodel and filter the child component options.
|
|
142
|
+
// #5 auto select default zmodel if only have 1 option and is required.
|
|
143
|
+
// #6 handle child nested linked component.
|
|
144
|
+
linkedComponentScope.forEach(item => {
|
|
145
|
+
const dataValueSegments = fieldName.split('_');
|
|
146
|
+
const linkedComponentSegments = item.linkedComponent.split('_');
|
|
147
|
+
let isLinkedComponent = false;
|
|
148
|
+
// check is it linkedcomponent
|
|
149
|
+
if (linkedComponentSegments.length > 1 && dataValueSegments.length > 3) {
|
|
150
|
+
const lastTwoSegments = dataValueSegments.slice(-2).join('_');
|
|
151
|
+
if (linkedComponentSegments.join('_') === lastTwoSegments) {
|
|
152
|
+
isLinkedComponent = true;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
else if (linkedComponentSegments.length === 1) {
|
|
156
|
+
const lastSegment = dataValueSegments[dataValueSegments.length - 1];
|
|
157
|
+
if (linkedComponentSegments[0] === lastSegment) {
|
|
158
|
+
isLinkedComponent = true;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
if (isLinkedComponent) {
|
|
162
|
+
const childComponent = ZComponentHelper.getComponentByValue(this.group, item.value);
|
|
163
|
+
const originalSelectOptions = childComponent.data['originalSelectOptions'] ?? Object.assign([], childComponent.data.SelectOptions);
|
|
164
|
+
const filteredSelectionOptions = originalSelectOptions.filter(option => option.parentExpression == fieldValue);
|
|
165
|
+
//childComponent.clearData(); //unable to use clearData. not handled for zudf type
|
|
166
|
+
// manuall patch the component formcontrol value
|
|
167
|
+
const zudfForm = zudfScope.form;
|
|
168
|
+
const componentFormControl = zudfForm.controls[item.value];
|
|
169
|
+
zudfScope.zModel[item.value] = null;
|
|
170
|
+
componentFormControl.patchValue(zudfScope.zModel[item.value]);
|
|
171
|
+
childComponent.data['originalSelectOptions'] = originalSelectOptions;
|
|
172
|
+
childComponent.setSelectOption(filteredSelectionOptions);
|
|
173
|
+
// set dropdown selected value if only 1 option.
|
|
174
|
+
const childComponentType = childComponent.data.Type;
|
|
175
|
+
if (filteredSelectionOptions.length === 1 && childComponent.data.IsRequired && (childComponentType === 'zuiselectmultiple' || childComponentType === 'zselectmultiple')) {
|
|
176
|
+
zudfScope.zModel[item.value] = filteredSelectionOptions[0][childComponent.itemValueField];
|
|
177
|
+
componentFormControl.patchValue(zudfScope.zModel[item.value]);
|
|
178
|
+
}
|
|
179
|
+
// loop children incase of nested child.
|
|
180
|
+
const childComponentValueSegments = childComponent.data.Value.split('_');
|
|
181
|
+
this.cascadingHandling(zudfScope, childComponentValueSegments[childComponentValueSegments.length - 1], zudfScope.zModel[item.value]);
|
|
182
|
+
}
|
|
183
|
+
});
|
|
184
|
+
}
|
|
171
185
|
}
|
|
172
186
|
InputFieldBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: InputFieldBase, deps: [{ token: i1.ZComponentService }], target: i0.ɵɵFactoryTarget.Component });
|
|
173
187
|
InputFieldBase.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: InputFieldBase, selector: "ng-component", outputs: { triggerContainerEvent: "triggerContainerEvent" }, usesInheritance: true, ngImport: i0, template: ``, isInline: true });
|
|
@@ -180,4 +194,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
|
|
|
180
194
|
type: Output,
|
|
181
195
|
args: ['triggerContainerEvent']
|
|
182
196
|
}] } });
|
|
183
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXRmaWVsZGJhc2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvY29tcG9uZW50cy9pbnB1dGZpZWxkYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBeUIsTUFBTSxpQkFBaUIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFbEQsT0FBTyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7QUFPMUMsMklBQTJJO0FBQzNJLE1BQU0sT0FBTyxjQUFlLFNBQVEsU0FBUztJQUUzQyxZQUFZLFdBQThCO1FBQ3hDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUZZLDBCQUFxQixHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO0lBRy9GLENBQUM7SUFFTSxPQUFPLENBQUMsS0FBVSxFQUFFLFVBQWdCO1FBQ3pDLElBQUksQ0FBQyxZQUFZLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUNwRyxDQUFDO0lBRU0sVUFBVSxDQUFDLEtBQVUsRUFBRSxVQUFnQjtRQUM1QyxnQkFBZ0IsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0RyxJQUFJLENBQUMsWUFBWSxDQUFDLHVCQUF1QixFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztJQUN0RixDQUFDO0lBRU0sUUFBUSxDQUFDLEtBQVUsRUFBRSxVQUFnQjtRQUMxQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxLQUFLLE1BQU0sRUFBRTtZQUNyRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1NBQzFDO2FBQU07WUFDTCxnQkFBZ0IsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0RyxJQUFJLENBQUMsWUFBWSxDQUFDLHFCQUFxQixFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztTQUNqRjtJQUNILENBQUM7SUFFTSxXQUFXLENBQUMsS0FBVSxFQUFFLFVBQWdCO1FBQzdDLElBQUksQ0FBQyxZQUFZLENBQUMsd0JBQXdCLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ3hGLENBQUM7SUFFTSxXQUFXLENBQUMsZUFBdUI7UUFDeEMsSUFBSSxDQUFDLFlBQVksQ0FBQyx3QkFBd0IsRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUN6RyxDQUFDO0lBRU0sZ0JBQWdCO1FBQ3JCLE1BQU0sYUFBYSxHQUFHLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN4RixJQUFJLE9BQU8sYUFBYSxLQUFLLFVBQVUsRUFBRTtZQUN2QyxNQUFNLFFBQVEsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDMUQsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzdCO1FBQ0QsT0FBTyxhQUFhLENBQUM7SUFDdkIsQ0FBQztJQUVNLGtCQUFrQjtRQUN2QixNQUFNLGVBQWUsR0FBRyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDNUYsSUFBSSxPQUFPLGVBQWUsS0FBSyxVQUFVLEVBQUU7WUFDekMsTUFBTSxRQUFRLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzVELE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUU3QjtRQUNELE9BQU8sZUFBZSxDQUFDO0lBQ3pCLENBQUM7SUFFTSxRQUFRLENBQUMsS0FBYTtRQUMzQixnQkFBZ0IsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVNLGFBQWEsQ0FBQyxNQUFZO1FBQy9CLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFUyxZQUFZLENBQUMsSUFBWSxFQUFFLE1BQVcsRUFBRSxLQUFVLEVBQUUsVUFBZ0I7UUFDNUUsSUFBSSxNQUFNLEVBQUU7WUFDVixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7Z0JBQ3RCLElBQUksRUFBRSxJQUFJO2dCQUNWLE1BQU0sRUFBRSxNQUFNO2dCQUNkLEtBQUs7Z0JBQ0wsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7YUFDNUQsQ0FBQyxDQUFDO1NBQzdCO0lBQ0gsQ0FBQztJQUVPLGFBQWEsQ0FBQyxLQUFVLEVBQUUsVUFBZ0I7UUFDaEQsSUFBSSxVQUFVLElBQUksSUFBSSxJQUFJLFVBQVUsSUFBSSxTQUFTLEVBQUU7WUFDakQsT0FBTyxLQUFLLEVBQUUsS0FBSyxJQUFJLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFBO1NBQzVDO1FBQ0QsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVPLGdCQUFnQixDQUFDLEtBQVUsRUFBRSxVQUFnQjtRQUNuRCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztRQUM3RCxNQUFNLFlBQVksR0FBRyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWhGLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDakIsT0FBTyxDQUFDLEdBQUcsQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO1NBQ3ZEO1FBRUQsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLGNBQWMsQ0FBQztRQUN0RCxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUNULEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNSLElBQUksWUFBWSxDQUFDLGVBQWUsRUFBRTtnQkFDaEMsTUFBTSxvQkFBb0IsR0FBRyxZQUFZLENBQUMsZUFBZSxDQUFDO2dCQUMxRCxnRUFBZ0U7Z0JBQ2hFLGlFQUFpRTtnQkFDakUsdUVBQXVFO2dCQUN2RSx1REFBdUQ7Z0JBQ3ZELG9FQUFvRTtnQkFDcEUsb0JBQW9CLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO29CQUNsQyxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDckQsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDaEUsSUFBSSxpQkFBaUIsR0FBRyxLQUFLLENBQUM7b0JBRTlCLDhCQUE4QjtvQkFDOUIsSUFBSSx1QkFBdUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLGlCQUFpQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7d0JBQ3RFLE1BQU0sZUFBZSxHQUFHLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQzt3QkFDOUQsSUFBSSx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssZUFBZSxFQUFFOzRCQUN6RCxpQkFBaUIsR0FBRyxJQUFJLENBQUM7eUJBQzFCO3FCQUNGO3lCQUNJLElBQUksdUJBQXVCLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTt3QkFDN0MsTUFBTSxXQUFXLEdBQUcsaUJBQWlCLENBQUMsaUJBQWlCLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO3dCQUNwRSxJQUFJLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxLQUFLLFdBQVcsRUFBRTs0QkFDOUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO3lCQUMxQjtxQkFDRjtvQkFFRCxJQUFJLGlCQUFpQixFQUFFO3dCQUNyQixNQUFNLGNBQWMsR0FBRyxnQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFDcEYsTUFBTSxxQkFBcUIsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsY0FBYyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQzt3QkFDbkksTUFBTSx3QkFBd0IsR0FBRyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLElBQUksVUFBVSxDQUFDLENBQUM7d0JBRS9HLGtGQUFrRjt3QkFDbEYsZ0RBQWdEO3dCQUNoRCxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUM7d0JBQ3ZDLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxJQUFpQixDQUFDO3dCQUNoRCxNQUFNLG9CQUFvQixHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBZ0IsQ0FBQzt3QkFDMUUsb0JBQW9CLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7d0JBRWpFLGNBQWMsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsR0FBRyxxQkFBcUIsQ0FBQzt3QkFDckUsY0FBYyxDQUFDLGVBQWUsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO3FCQUMxRDtnQkFDSCxDQUFDLENBQUMsQ0FBQTthQUNIO1FBQ0gsQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ1IsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLDZCQUE2QixDQUFDLEVBQUU7Z0JBQzVDLHdDQUF3QztnQkFDeEMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDN0MsSUFBSSxXQUFXLEVBQUU7b0JBQ2YsSUFBSSxrQkFBa0IsR0FBRyxJQUFJLENBQUM7b0JBQzlCLElBQUksVUFBVSxFQUFFO3dCQUNkLG1DQUFtQzt3QkFDbkMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7d0JBRWxFLElBQUksVUFBVSxFQUFFOzRCQUNkLFVBQVUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0NBQzFCLElBQUksTUFBTSxDQUFDLEVBQUUsS0FBSyxVQUFVLEVBQUU7b0NBQzVCLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO29DQUMvQyxPQUFPO2lDQUNSOzRCQUNILENBQUMsQ0FBQyxDQUFDO3lCQUNKO3FCQUNGO29CQUVELDJDQUEyQztvQkFDM0MsSUFBSSxFQUFFLEdBQWMsWUFBWSxDQUFDLElBQWlCLENBQUM7b0JBQ25ELFdBQVcsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUU7d0JBQy9CLGtCQUFrQjt3QkFDbEIsSUFBSSxjQUFjLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQ3RFLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLGNBQWMsQ0FBQzt3QkFDdkQsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQzt3QkFFcEMsTUFBTSxjQUFjLEdBQUcsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxHQUFHLGNBQWMsQ0FBQyxDQUFDO3dCQUMzRixJQUFJLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTs0QkFDckQsK0NBQStDOzRCQUMvQyxPQUFPLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7eUJBQy9HOzZCQUNJOzRCQUNILElBQUksa0JBQWtCLEVBQUU7Z0NBQ3RCLE9BQU8sQ0FBQyxjQUFjLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsQ0FBQzs2QkFDOUQ7eUJBQ0Y7d0JBQ0QsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDekIsQ0FBQyxDQUFDLENBQUM7aUJBQ0o7YUFDRjtRQUNILENBQUMsQ0FBQyxFQUNGLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNkLE1BQU0sU0FBUyxHQUFHLG1CQUFtQixDQUFDO1lBQ3RDLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDZCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUU7b0JBQ3pCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztpQkFDN0Q7YUFDRjtZQUNELE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUNILENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2hCLElBQUksQ0FBQyxZQUFZLENBQUMscUJBQXFCLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ2xGLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7NEdBM0xVLGNBQWM7Z0dBQWQsY0FBYyx3SUFKZixFQUFFOzRGQUlELGNBQWM7a0JBTDFCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLEVBQUU7aUJBQ2I7d0dBSWtDLHFCQUFxQjtzQkFBckQsTUFBTTt1QkFBQyx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgT3V0cHV0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgWkNvbXBvbmVudEhlbHBlciwgWkNvbXBvbmVudE91dHB1dEV2ZW50IH0gZnJvbSBcIm1taGdsb2JhbC16Y29yZVwiO1xyXG5pbXBvcnQgeyBGaWVsZEJhc2UgfSBmcm9tIFwiLi9maWVsZGJhc2UuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IFpDb21wb25lbnRTZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL3pjb21wb25lbnQuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBvZiwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICB0ZW1wbGF0ZTogYGAsXHJcbn0pXHJcblxyXG4vLyBGb3I6IHpjaGVja2JveCwgemNoaXAsIHpkYXRldGltZSwgemltZywgemlucHV0LWNvbnRhaW5lciwgemxhYmVsLCB6bnVtZXJpYywgenBvc3RzZWxlY3RpbnB1dCwgenNlbGVjdG11bHRpcGxlLCB6dGV4dCwgenRleHRhcmVhLCB6dXBsb2FkXHJcbmV4cG9ydCBjbGFzcyBJbnB1dEZpZWxkQmFzZSBleHRlbmRzIEZpZWxkQmFzZSB7XHJcbiAgQE91dHB1dCgndHJpZ2dlckNvbnRhaW5lckV2ZW50JykgdHJpZ2dlckNvbnRhaW5lckV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBjb25zdHJ1Y3Rvcihjb21wU2VydmljZTogWkNvbXBvbmVudFNlcnZpY2UpIHtcclxuICAgIHN1cGVyKGNvbXBTZXJ2aWNlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkNsaWNrKGV2ZW50OiBhbnksIGZpZWxkVmFsdWU/OiBhbnkpIHtcclxuICAgIHRoaXMudHJpZ2dlckV2ZW50KFwiaW5wdXRmaWVsZC1vbkNsaWNrXCIsIHRoaXMuZGF0YS5PbkNsaWNrLCBldmVudCwgZmllbGRWYWx1ZSB8fCBldmVudFsnT25DbGljayddKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkNoYW5nZUNDKGV2ZW50OiBhbnksIGZpZWxkVmFsdWU/OiBhbnkpIHtcclxuICAgIFpDb21wb25lbnRIZWxwZXIuc2V0Q29tcG9uZW50TW9kZWxWYWx1ZSh0aGlzLmRhdGEsIHRoaXMuZ2V0RmllbGRWYWx1ZShldmVudCwgZmllbGRWYWx1ZSksIHRoaXMuZ3JvdXApO1xyXG4gICAgdGhpcy50cmlnZ2VyRXZlbnQoXCJpbnB1dGZpZWxkLW9uQ2hhbmdlQ0NcIiwgdGhpcy5kYXRhLkNDT25DaGFuZ2UsIGV2ZW50LCBmaWVsZFZhbHVlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkNoYW5nZShldmVudDogYW55LCBmaWVsZFZhbHVlPzogYW55KSB7XHJcbiAgICBpZiAodGhpcy5kYXRhLlN1YlR5cGUgJiYgdGhpcy5kYXRhLlN1YlR5cGUgPT09ICd6dWRmJykge1xyXG4gICAgICB0aGlzLmhhbmRsZVp1ZGZDaGFuZ2UoZXZlbnQsIGZpZWxkVmFsdWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgWkNvbXBvbmVudEhlbHBlci5zZXRDb21wb25lbnRNb2RlbFZhbHVlKHRoaXMuZGF0YSwgdGhpcy5nZXRGaWVsZFZhbHVlKGV2ZW50LCBmaWVsZFZhbHVlKSwgdGhpcy5ncm91cCk7XHJcbiAgICAgIHRoaXMudHJpZ2dlckV2ZW50KFwiaW5wdXRmaWVsZC1vbkNoYW5nZVwiLCB0aGlzLmRhdGEuT25DaGFuZ2UsIGV2ZW50LCBmaWVsZFZhbHVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkl0ZW1DbGljayhldmVudDogYW55LCBmaWVsZFZhbHVlPzogYW55KSB7XHJcbiAgICB0aGlzLnRyaWdnZXJFdmVudChcImlucHV0ZmllbGQtb25JdGVtQ2xpY2tcIiwgdGhpcy5kYXRhLk9uSXRlbUNsaWNrLCBldmVudCwgZmllbGRWYWx1ZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25JY29uQ2xpY2soY2xpY2tBY3Rpb25FeHByOiBzdHJpbmcpIHtcclxuICAgIHRoaXMudHJpZ2dlckV2ZW50KFwiaW5wdXRmaWVsZC1vbkljb25DbGlja1wiLCBjbGlja0FjdGlvbkV4cHIsIG51bGwsIHRoaXMuZ3JvdXAuek1vZGVsW3RoaXMuZGF0YS5WYWx1ZV0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFJlYWRPbmx5VmFsdWUoKSB7XHJcbiAgICBjb25zdCByZWFkT25seVZhbHVlID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKHRoaXMsIHRoaXMuZGF0YS5SZWFkT25seSk7XHJcbiAgICBpZiAodHlwZW9mIHJlYWRPbmx5VmFsdWUgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgY29uc3QgY2FsbEZ1bmMgPSByZWFkT25seVZhbHVlLmJpbmQodGhpcy5ncm91cC5jdHJsU2NvcGUpO1xyXG4gICAgICByZXR1cm4gY2FsbEZ1bmModGhpcy5ncm91cCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVhZE9ubHlWYWx1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRJc1JlcXVpcmVkVmFsdWUoKSB7XHJcbiAgICBjb25zdCBJc1JlcXVpcmVkVmFsdWUgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgdGhpcy5kYXRhLklzUmVxdWlyZWQpO1xyXG4gICAgaWYgKHR5cGVvZiBJc1JlcXVpcmVkVmFsdWUgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgY29uc3QgY2FsbEZ1bmMgPSBJc1JlcXVpcmVkVmFsdWUuYmluZCh0aGlzLmdyb3VwLmN0cmxTY29wZSk7XHJcbiAgICAgIHJldHVybiBjYWxsRnVuYyh0aGlzLmdyb3VwKTtcclxuXHJcbiAgICB9XHJcbiAgICByZXR1cm4gSXNSZXF1aXJlZFZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldFZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIFpDb21wb25lbnRIZWxwZXIuc2V0Q29tcG9uZW50TW9kZWxWYWx1ZSh0aGlzLmRhdGEsIHZhbHVlLCB0aGlzLmdyb3VwKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRBZGRPblZhbHVlKGFkZE9ucz86IGFueSkge1xyXG4gICAgdGhpcy50cmlnZ2VyQ29udGFpbmVyRXZlbnQuZW1pdCh7IHR5cGU6ICdzZXRBZGRPblZhbHVlJywgZGF0YTogYWRkT25zIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHRyaWdnZXJFdmVudCh0eXBlOiBzdHJpbmcsIHRhcmdldDogYW55LCBldmVudDogYW55LCBmaWVsZFZhbHVlPzogYW55KSB7XHJcbiAgICBpZiAodGFyZ2V0KSB7XHJcbiAgICAgIHRoaXMuZ3JvdXAuc3ViamVjdC5uZXh0KHtcclxuICAgICAgICB0eXBlOiB0eXBlLFxyXG4gICAgICAgIHRhcmdldDogdGFyZ2V0LFxyXG4gICAgICAgIGV2ZW50LFxyXG4gICAgICAgIGRhdGE6IHsgdmFsdWU6IHRoaXMuZ2V0RmllbGRWYWx1ZShldmVudCwgZmllbGRWYWx1ZSksIGZpZWxkOiB0aGlzLmRhdGEsIGNvbXA6IHRoaXMgfVxyXG4gICAgICB9IGFzIFpDb21wb25lbnRPdXRwdXRFdmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEZpZWxkVmFsdWUoZXZlbnQ6IGFueSwgZmllbGRWYWx1ZT86IGFueSkge1xyXG4gICAgaWYgKGZpZWxkVmFsdWUgPT0gbnVsbCB8fCBmaWVsZFZhbHVlID09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gZXZlbnQ/LnZhbHVlIHx8IGV2ZW50Py50YXJnZXQ/LnZhbHVlXHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmllbGRWYWx1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlWnVkZkNoYW5nZShldmVudDogYW55LCBmaWVsZFZhbHVlPzogYW55KSB7XHJcbiAgICBjb25zdCB6dWRmRmllbGRWYWx1ZSA9IHRoaXMuZ2V0RmllbGRWYWx1ZShldmVudCwgZmllbGRWYWx1ZSk7XHJcbiAgICBjb25zdCBnZXRadWRmU2NvcGUgPSBaQ29tcG9uZW50SGVscGVyLmdldFp1ZGZTY29wZSh0aGlzLmdyb3VwLCB0aGlzLmRhdGEuVmFsdWUpO1xyXG5cclxuICAgIGlmICghZ2V0WnVkZlNjb3BlKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCd6dWRmIHNjb3BlIGlzIG51bGwgZm9yIGZpZWxkIG9uY2hhbmdlLicpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFp1ZGZTY29wZS56TW9kZWxbdGhpcy5kYXRhLlZhbHVlXSA9IHp1ZGZGaWVsZFZhbHVlO1xyXG4gICAgb2Yoe30pLnBpcGUoXHJcbiAgICAgIHRhcChyZXMgPT4ge1xyXG4gICAgICAgIGlmIChnZXRadWRmU2NvcGUubGlua2VkQ29tcG9uZW50KSB7XHJcbiAgICAgICAgICBjb25zdCBsaW5rZWRDb21wb25lbnRTY29wZSA9IGdldFp1ZGZTY29wZS5saW5rZWRDb21wb25lbnQ7XHJcbiAgICAgICAgICAvLyAjMSBjaGVjayBpcyB0aGUgb25jaGFuZ2UgY29tcG9uZW50IGxpbmtlZCB0byBvdGhlciBjb21wb25lbnQuXHJcbiAgICAgICAgICAvLyAjMiBpZiBsaW5rZWQgdG8gb3RoZXIgY29tcG9uZW50KGxldHMgY2FsbCBpdCBjaGlsZCBjb21wb25lbnQpLFxyXG4gICAgICAgICAgLy8gICAgYmFzZSBvbiB0aGUgbGlua2VkQ29tcG9uZW50U2NvcGUgdmFsdWUsIGZpbmQgdGhlIGNoaWxkIGNvbXBvbmVudC5cclxuICAgICAgICAgIC8vICMzIGtlZXAgdGhlIG9yaWdpbmFsIFNlbGVjdE9wdGlvbnMgaW4gdGhlIGNvbXBvbmVudC5cclxuICAgICAgICAgIC8vICM0IGNsZWFyIHRoZSBjaGlsZCB6bW9kZWwgYW5kIGZpbHRlciB0aGUgY2hpbGQgY29tcG9uZW50IG9wdGlvbnMuXHJcbiAgICAgICAgICBsaW5rZWRDb21wb25lbnRTY29wZS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBkYXRhVmFsdWVTZWdtZW50cyA9IHRoaXMuZGF0YS5WYWx1ZS5zcGxpdCgnXycpO1xyXG4gICAgICAgICAgICBjb25zdCBsaW5rZWRDb21wb25lbnRTZWdtZW50cyA9IGl0ZW0ubGlua2VkQ29tcG9uZW50LnNwbGl0KCdfJyk7XHJcbiAgICAgICAgICAgIGxldCBpc0xpbmtlZENvbXBvbmVudCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgLy8gY2hlY2sgaXMgaXQgbGlua2VkY29tcG9uZW50XHJcbiAgICAgICAgICAgIGlmIChsaW5rZWRDb21wb25lbnRTZWdtZW50cy5sZW5ndGggPiAxICYmIGRhdGFWYWx1ZVNlZ21lbnRzLmxlbmd0aCA+IDMpIHtcclxuICAgICAgICAgICAgICBjb25zdCBsYXN0VHdvU2VnbWVudHMgPSBkYXRhVmFsdWVTZWdtZW50cy5zbGljZSgtMikuam9pbignXycpO1xyXG4gICAgICAgICAgICAgIGlmIChsaW5rZWRDb21wb25lbnRTZWdtZW50cy5qb2luKCdfJykgPT09IGxhc3RUd29TZWdtZW50cykge1xyXG4gICAgICAgICAgICAgICAgaXNMaW5rZWRDb21wb25lbnQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChsaW5rZWRDb21wb25lbnRTZWdtZW50cy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgICAgICBjb25zdCBsYXN0U2VnbWVudCA9IGRhdGFWYWx1ZVNlZ21lbnRzW2RhdGFWYWx1ZVNlZ21lbnRzLmxlbmd0aCAtIDFdO1xyXG4gICAgICAgICAgICAgIGlmIChsaW5rZWRDb21wb25lbnRTZWdtZW50c1swXSA9PT0gbGFzdFNlZ21lbnQpIHtcclxuICAgICAgICAgICAgICAgIGlzTGlua2VkQ29tcG9uZW50ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChpc0xpbmtlZENvbXBvbmVudCkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGNoaWxkQ29tcG9uZW50ID0gWkNvbXBvbmVudEhlbHBlci5nZXRDb21wb25lbnRCeVZhbHVlKHRoaXMuZ3JvdXAsIGl0ZW0udmFsdWUpO1xyXG4gICAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsU2VsZWN0T3B0aW9ucyA9IGNoaWxkQ29tcG9uZW50LmRhdGFbJ29yaWdpbmFsU2VsZWN0T3B0aW9ucyddID8/IE9iamVjdC5hc3NpZ24oW10sIGNoaWxkQ29tcG9uZW50LmRhdGEuU2VsZWN0T3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRTZWxlY3Rpb25PcHRpb25zID0gb3JpZ2luYWxTZWxlY3RPcHRpb25zLmZpbHRlcihvcHRpb24gPT4gb3B0aW9uLnBhcmVudEV4cHJlc3Npb24gPT0gZmllbGRWYWx1ZSk7XHJcblxyXG4gICAgICAgICAgICAgIC8vY2hpbGRDb21wb25lbnQuY2xlYXJEYXRhKCk7IC8vdW5hYmxlIHRvIHVzZSBjbGVhckRhdGEuIG5vdCBoYW5kbGVkIGZvciB6dWRmIHR5cGVcclxuICAgICAgICAgICAgICAvLyBtYW51YWxsIHBhdGNoIHRoZSBjb21wb25lbnQgZm9ybWNvbnRyb2wgdmFsdWVcclxuICAgICAgICAgICAgICBnZXRadWRmU2NvcGUuek1vZGVsW2l0ZW0udmFsdWVdID0gbnVsbDtcclxuICAgICAgICAgICAgICBjb25zdCB6dWRmRm9ybSA9IGdldFp1ZGZTY29wZS5mb3JtIGFzIEZvcm1Hcm91cDtcclxuICAgICAgICAgICAgICBjb25zdCBjb21wb25lbnRGb3JtQ29udHJvbCA9IHp1ZGZGb3JtLmNvbnRyb2xzW2l0ZW0udmFsdWVdIGFzIEZvcm1Db250cm9sO1xyXG4gICAgICAgICAgICAgIGNvbXBvbmVudEZvcm1Db250cm9sLnBhdGNoVmFsdWUoZ2V0WnVkZlNjb3BlLnpNb2RlbFtpdGVtLnZhbHVlXSk7XHJcblxyXG4gICAgICAgICAgICAgIGNoaWxkQ29tcG9uZW50LmRhdGFbJ29yaWdpbmFsU2VsZWN0T3B0aW9ucyddID0gb3JpZ2luYWxTZWxlY3RPcHRpb25zO1xyXG4gICAgICAgICAgICAgIGNoaWxkQ29tcG9uZW50LnNldFNlbGVjdE9wdGlvbihmaWx0ZXJlZFNlbGVjdGlvbk9wdGlvbnMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICAgIHRhcChyZXMgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmRhdGFbJ0F1dG9Qb3B1bGF0ZUNoaWxkRmllbGRWYWx1ZSddKSB7XHJcbiAgICAgICAgICAvLyBaVURGLiBBdXRvIFBvcHVsYXRlIGNoaWxkIGZpZWxkIHZhbHVlXHJcbiAgICAgICAgICBjb25zdCBjaGlsZEZpZWxkcyA9IHRoaXMuZGF0YVsnQ2hpbGRGaWVsZHMnXTtcclxuICAgICAgICAgIGlmIChjaGlsZEZpZWxkcykge1xyXG4gICAgICAgICAgICBsZXQgc2VsZWN0ZWREYXRhT3B0aW9uID0gbnVsbDtcclxuICAgICAgICAgICAgaWYgKGZpZWxkVmFsdWUpIHtcclxuICAgICAgICAgICAgICAvLyBnZXQgdGhlIHNlbGVjdGVkIGRhdGEgZnVsbCBpbmZvIFxyXG4gICAgICAgICAgICAgIGNvbnN0IGRhdGFPcHRpb24gPSB0aGlzLmdyb3VwLnpEYXRhW3RoaXMuZGF0YVsnWkRhdGFPcHRpb25OYW1lJ11dO1xyXG5cclxuICAgICAgICAgICAgICBpZiAoZGF0YU9wdGlvbikge1xyXG4gICAgICAgICAgICAgICAgZGF0YU9wdGlvbi5mb3JFYWNoKG9wdGlvbiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChvcHRpb24uSWQgPT09IGZpZWxkVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZERhdGFPcHRpb24gPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBzZXQgdG8gYWxsIHJlbGF0ZWQgek1vZGUgb2YgdGhlIGRyb3Bkb3duXHJcbiAgICAgICAgICAgIGxldCBmZzogRm9ybUdyb3VwID0gZ2V0WnVkZlNjb3BlLmZvcm0gYXMgRm9ybUdyb3VwO1xyXG4gICAgICAgICAgICBjaGlsZEZpZWxkcy5mb3JFYWNoKGNoaWxkRmllbGQgPT4ge1xyXG4gICAgICAgICAgICAgIC8vIHJlbW92ZSBzeW1ib2wuIFxyXG4gICAgICAgICAgICAgIGxldCBjaGlsZEZpZWxkTmFtZSA9IGVuY29kZVVSSShjaGlsZEZpZWxkLnJlcGxhY2UoL1teYS16MC05XS9naSwgXCJcIikpO1xyXG4gICAgICAgICAgICAgIGNvbnN0IGZpZWxkTW9kZWxOYW1lID0gdGhpcy5kYXRhLk5hbWUgKyBjaGlsZEZpZWxkTmFtZTtcclxuICAgICAgICAgICAgICBjb25zdCB6TW9kZWxzID0gZ2V0WnVkZlNjb3BlLnpNb2RlbDtcclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgY2hpbGRDb21wb25lbnQgPSBaQ29tcG9uZW50SGVscGVyLmdldENvbXBvbmVudCh0aGlzLmdyb3VwLCAndGV4dF8nICsgZmllbGRNb2RlbE5hbWUpO1xyXG4gICAgICAgICAgICAgIGlmIChjaGlsZENvbXBvbmVudFsnZGF0YSddWydSZWFkT25seSddICYmICFmaWVsZFZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBjbGVhciBjaGlsZCBmaWVsZCBpZiBvbmx5IHJlYWRvbmx5IGlzIHRydWUuIFxyXG4gICAgICAgICAgICAgICAgek1vZGVsc1tmaWVsZE1vZGVsTmFtZV0gPSAhZmllbGRWYWx1ZSA/IG51bGwgOiBzZWxlY3RlZERhdGFPcHRpb24gPyBzZWxlY3RlZERhdGFPcHRpb25bY2hpbGRGaWVsZE5hbWVdIDogbnVsbDtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWREYXRhT3B0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgIHpNb2RlbHNbZmllbGRNb2RlbE5hbWVdID0gc2VsZWN0ZWREYXRhT3B0aW9uW2NoaWxkRmllbGROYW1lXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZmcucGF0Y2hWYWx1ZSh6TW9kZWxzKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICAgc3dpdGNoTWFwKHJlcyA9PiB7XHJcbiAgICAgICAgY29uc3QgZXZlbnROYW1lID0gJ3RyaWdnZXJWYWxpZGF0aW9uJztcclxuICAgICAgICBpZiAodGhpcy5ncm91cCkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuZ3JvdXBbZXZlbnROYW1lXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ncm91cFtldmVudE5hbWVdKHRoaXMuZ3JvdXAsIGV2ZW50LCBmaWVsZFZhbHVlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9mKHt9KTtcclxuICAgICAgfSlcclxuICAgICkuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgIHRoaXMudHJpZ2dlckV2ZW50KFwiaW5wdXRmaWVsZC1vbkNoYW5nZVwiLCB0aGlzLmRhdGEuT25DaGFuZ2UsIGV2ZW50LCBmaWVsZFZhbHVlKTtcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
197
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXRmaWVsZGJhc2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvY29tcG9uZW50cy9pbnB1dGZpZWxkYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBeUIsTUFBTSxpQkFBaUIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFbEQsT0FBTyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7QUFPMUMsMklBQTJJO0FBQzNJLE1BQU0sT0FBTyxjQUFlLFNBQVEsU0FBUztJQUUzQyxZQUFZLFdBQThCO1FBQ3hDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUZZLDBCQUFxQixHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO0lBRy9GLENBQUM7SUFFTSxPQUFPLENBQUMsS0FBVSxFQUFFLFVBQWdCO1FBQ3pDLElBQUksQ0FBQyxZQUFZLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUNwRyxDQUFDO0lBRU0sVUFBVSxDQUFDLEtBQVUsRUFBRSxVQUFnQjtRQUM1QyxnQkFBZ0IsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0RyxJQUFJLENBQUMsWUFBWSxDQUFDLHVCQUF1QixFQUFFLElB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Q0FBQyxLQUFLLENBQUMsR0FBRyx3QkFBd0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLENBQUM7b0JBQzFGLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2lCQUMvRDtnQkFFRCx3Q0FBd0M7Z0JBQ3hDLE1BQU0sMkJBQTJCLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN6RSxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxFQUFFLDJCQUEyQixDQUFDLDJCQUEyQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2FBQ3RJO1FBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDOzs0R0E1TVUsY0FBYztnR0FBZCxjQUFjLHdJQUpmLEVBQUU7NEZBSUQsY0FBYztrQkFMMUIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsRUFBRTtpQkFDYjt3R0FJa0MscUJBQXFCO3NCQUFyRCxNQUFNO3VCQUFDLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBPdXRwdXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBaQ29tcG9uZW50SGVscGVyLCBaQ29tcG9uZW50T3V0cHV0RXZlbnQgfSBmcm9tIFwibW1oZ2xvYmFsLXpjb3JlXCI7XHJcbmltcG9ydCB7IEZpZWxkQmFzZSB9IGZyb20gXCIuL2ZpZWxkYmFzZS5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgWkNvbXBvbmVudFNlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvemNvbXBvbmVudC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IG9mLCBzd2l0Y2hNYXAsIHRhcCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHRlbXBsYXRlOiBgYCxcclxufSlcclxuXHJcbi8vIEZvcjogemNoZWNrYm94LCB6Y2hpcCwgemRhdGV0aW1lLCB6aW1nLCB6aW5wdXQtY29udGFpbmVyLCB6bGFiZWwsIHpudW1lcmljLCB6cG9zdHNlbGVjdGlucHV0LCB6c2VsZWN0bXVsdGlwbGUsIHp0ZXh0LCB6dGV4dGFyZWEsIHp1cGxvYWRcclxuZXhwb3J0IGNsYXNzIElucHV0RmllbGRCYXNlIGV4dGVuZHMgRmllbGRCYXNlIHtcclxuICBAT3V0cHV0KCd0cmlnZ2VyQ29udGFpbmVyRXZlbnQnKSB0cmlnZ2VyQ29udGFpbmVyRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIGNvbnN0cnVjdG9yKGNvbXBTZXJ2aWNlOiBaQ29tcG9uZW50U2VydmljZSkge1xyXG4gICAgc3VwZXIoY29tcFNlcnZpY2UpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uQ2xpY2soZXZlbnQ6IGFueSwgZmllbGRWYWx1ZT86IGFueSkge1xyXG4gICAgdGhpcy50cmlnZ2VyRXZlbnQoXCJpbnB1dGZpZWxkLW9uQ2xpY2tcIiwgdGhpcy5kYXRhLk9uQ2xpY2ssIGV2ZW50LCBmaWVsZFZhbHVlIHx8IGV2ZW50WydPbkNsaWNrJ10pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uQ2hhbmdlQ0MoZXZlbnQ6IGFueSwgZmllbGRWYWx1ZT86IGFueSkge1xyXG4gICAgWkNvbXBvbmVudEhlbHBlci5zZXRDb21wb25lbnRNb2RlbFZhbHVlKHRoaXMuZGF0YSwgdGhpcy5nZXRGaWVsZFZhbHVlKGV2ZW50LCBmaWVsZFZhbHVlKSwgdGhpcy5ncm91cCk7XHJcbiAgICB0aGlzLnRyaWdnZXJFdmVudChcImlucHV0ZmllbGQtb25DaGFuZ2VDQ1wiLCB0aGlzLmRhdGEuQ0NPbkNoYW5nZSwgZXZlbnQsIGZpZWxkVmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uQ2hhbmdlKGV2ZW50OiBhbnksIGZpZWxkVmFsdWU/OiBhbnkpIHtcclxuICAgIGlmICh0aGlzLmRhdGEuU3ViVHlwZSAmJiB0aGlzLmRhdGEuU3ViVHlwZSA9PT0gJ3p1ZGYnKSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlWnVkZkNoYW5nZShldmVudCwgZmllbGRWYWx1ZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBaQ29tcG9uZW50SGVscGVyLnNldENvbXBvbmVudE1vZGVsVmFsdWUodGhpcy5kYXRhLCB0aGlzLmdldEZpZWxkVmFsdWUoZXZlbnQsIGZpZWxkVmFsdWUpLCB0aGlzLmdyb3VwKTtcclxuICAgICAgdGhpcy50cmlnZ2VyRXZlbnQoXCJpbnB1dGZpZWxkLW9uQ2hhbmdlXCIsIHRoaXMuZGF0YS5PbkNoYW5nZSwgZXZlbnQsIGZpZWxkVmFsdWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uSXRlbUNsaWNrKGV2ZW50OiBhbnksIGZpZWxkVmFsdWU/OiBhbnkpIHtcclxuICAgIHRoaXMudHJpZ2dlckV2ZW50KFwiaW5wdXRmaWVsZC1vbkl0ZW1DbGlja1wiLCB0aGlzLmRhdGEuT25JdGVtQ2xpY2ssIGV2ZW50LCBmaWVsZFZhbHVlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkljb25DbGljayhjbGlja0FjdGlvbkV4cHI6IHN0cmluZykge1xyXG4gICAgdGhpcy50cmlnZ2VyRXZlbnQoXCJpbnB1dGZpZWxkLW9uSWNvbkNsaWNrXCIsIGNsaWNrQWN0aW9uRXhwciwgbnVsbCwgdGhpcy5ncm91cC56TW9kZWxbdGhpcy5kYXRhLlZhbHVlXSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0UmVhZE9ubHlWYWx1ZSgpIHtcclxuICAgIGNvbnN0IHJlYWRPbmx5VmFsdWUgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgdGhpcy5kYXRhLlJlYWRPbmx5KTtcclxuICAgIGlmICh0eXBlb2YgcmVhZE9ubHlWYWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICBjb25zdCBjYWxsRnVuYyA9IHJlYWRPbmx5VmFsdWUuYmluZCh0aGlzLmdyb3VwLmN0cmxTY29wZSk7XHJcbiAgICAgIHJldHVybiBjYWxsRnVuYyh0aGlzLmdyb3VwKTtcclxuICAgIH1cclxuICAgIHJldHVybiByZWFkT25seVZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldElzUmVxdWlyZWRWYWx1ZSgpIHtcclxuICAgIGNvbnN0IElzUmVxdWlyZWRWYWx1ZSA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbCh0aGlzLCB0aGlzLmRhdGEuSXNSZXF1aXJlZCk7XHJcbiAgICBpZiAodHlwZW9mIElzUmVxdWlyZWRWYWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICBjb25zdCBjYWxsRnVuYyA9IElzUmVxdWlyZWRWYWx1ZS5iaW5kKHRoaXMuZ3JvdXAuY3RybFNjb3BlKTtcclxuICAgICAgcmV0dXJuIGNhbGxGdW5jKHRoaXMuZ3JvdXApO1xyXG5cclxuICAgIH1cclxuICAgIHJldHVybiBJc1JlcXVpcmVkVmFsdWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0VmFsdWUodmFsdWU6IHN0cmluZykge1xyXG4gICAgWkNvbXBvbmVudEhlbHBlci5zZXRDb21wb25lbnRNb2RlbFZhbHVlKHRoaXMuZGF0YSwgdmFsdWUsIHRoaXMuZ3JvdXApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldEFkZE9uVmFsdWUoYWRkT25zPzogYW55KSB7XHJcbiAgICB0aGlzLnRyaWdnZXJDb250YWluZXJFdmVudC5lbWl0KHsgdHlwZTogJ3NldEFkZE9uVmFsdWUnLCBkYXRhOiBhZGRPbnMgfSk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgdHJpZ2dlckV2ZW50KHR5cGU6IHN0cmluZywgdGFyZ2V0OiBhbnksIGV2ZW50OiBhbnksIGZpZWxkVmFsdWU/OiBhbnkpIHtcclxuICAgIGlmICh0YXJnZXQpIHtcclxuICAgICAgdGhpcy5ncm91cC5zdWJqZWN0Lm5leHQoe1xyXG4gICAgICAgIHR5cGU6IHR5cGUsXHJcbiAgICAgICAgdGFyZ2V0OiB0YXJnZXQsXHJcbiAgICAgICAgZXZlbnQsXHJcbiAgICAgICAgZGF0YTogeyB2YWx1ZTogdGhpcy5nZXRGaWVsZFZhbHVlKGV2ZW50LCBmaWVsZFZhbHVlKSwgZmllbGQ6IHRoaXMuZGF0YSwgY29tcDogdGhpcyB9XHJcbiAgICAgIH0gYXMgWkNvbXBvbmVudE91dHB1dEV2ZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RmllbGRWYWx1ZShldmVudDogYW55LCBmaWVsZFZhbHVlPzogYW55KSB7XHJcbiAgICBpZiAoZmllbGRWYWx1ZSA9PSBudWxsIHx8IGZpZWxkVmFsdWUgPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiBldmVudD8udmFsdWUgfHwgZXZlbnQ/LnRhcmdldD8udmFsdWVcclxuICAgIH1cclxuICAgIHJldHVybiBmaWVsZFZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVadWRmQ2hhbmdlKGV2ZW50OiBhbnksIGZpZWxkVmFsdWU/OiBhbnkpIHtcclxuICAgIGNvbnN0IHp1ZGZGaWVsZFZhbHVlID0gdGhpcy5nZXRGaWVsZFZhbHVlKGV2ZW50LCBmaWVsZFZhbHVlKTtcclxuICAgIGNvbnN0IHp1ZGZTY29wZSA9IFpDb21wb25lbnRIZWxwZXIuZ2V0WnVkZlNjb3BlKHRoaXMuZ3JvdXAsIHRoaXMuZGF0YS5WYWx1ZSk7XHJcblxyXG4gICAgaWYgKCF6dWRmU2NvcGUpIHtcclxuICAgICAgY29uc29sZS5sb2coJ3p1ZGYgc2NvcGUgaXMgbnVsbCBmb3IgZmllbGQgb25jaGFuZ2UuJyk7XHJcbiAgICB9XHJcblxyXG4gICAgenVkZlNjb3BlLnpNb2RlbFt0aGlzLmRhdGEuVmFsdWVdID0genVkZkZpZWxkVmFsdWU7XHJcbiAgICBvZih7fSkucGlwZShcclxuICAgICAgdGFwKHJlcyA9PiB7XHJcbiAgICAgICAgaWYgKHp1ZGZTY29wZS5saW5rZWRDb21wb25lbnQpIHtcclxuICAgICAgICAgIHRoaXMuY2FzY2FkaW5nSGFuZGxpbmcoenVkZlNjb3BlLCB0aGlzLmRhdGEuVmFsdWUsIGZpZWxkVmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICAgIHRhcChyZXMgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmRhdGFbJ0F1dG9Qb3B1bGF0ZUNoaWxkRmllbGRWYWx1ZSddKSB7XHJcbiAgICAgICAgICAvLyBaVURGLiBBdXRvIFBvcHVsYXRlIGNoaWxkIGZpZWxkIHZhbHVlXHJcbiAgICAgICAgICBjb25zdCBjaGlsZEZpZWxkcyA9IHRoaXMuZGF0YVsnQ2hpbGRGaWVsZHMnXTtcclxuICAgICAgICAgIGlmIChjaGlsZEZpZWxkcykge1xyXG4gICAgICAgICAgICBsZXQgc2VsZWN0ZWREYXRhT3B0aW9uID0gbnVsbDtcclxuICAgICAgICAgICAgaWYgKGZpZWxkVmFsdWUpIHtcclxuICAgICAgICAgICAgICAvLyBnZXQgdGhlIHNlbGVjdGVkIGRhdGEgZnVsbCBpbmZvIFxyXG4gICAgICAgICAgICAgIGNvbnN0IGRhdGFPcHRpb24gPSB0aGlzLmdyb3VwLnpEYXRhW3RoaXMuZGF0YVsnWkRhdGFPcHRpb25OYW1lJ11dO1xyXG5cclxuICAgICAgICAgICAgICBpZiAoZGF0YU9wdGlvbikge1xyXG4gICAgICAgICAgICAgICAgZGF0YU9wdGlvbi5mb3JFYWNoKG9wdGlvbiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChvcHRpb24uSWQgPT09IGZpZWxkVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZERhdGFPcHRpb24gPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBzZXQgdG8gYWxsIHJlbGF0ZWQgek1vZGUgb2YgdGhlIGRyb3Bkb3duXHJcbiAgICAgICAgICAgIGxldCBmZzogRm9ybUdyb3VwID0genVkZlNjb3BlLmZvcm0gYXMgRm9ybUdyb3VwO1xyXG4gICAgICAgICAgICBjaGlsZEZpZWxkcy5mb3JFYWNoKGNoaWxkRmllbGQgPT4ge1xyXG4gICAgICAgICAgICAgIC8vIHJlbW92ZSBzeW1ib2wuIFxyXG4gICAgICAgICAgICAgIGxldCBjaGlsZEZpZWxkTmFtZSA9IGVuY29kZVVSSShjaGlsZEZpZWxkLnJlcGxhY2UoL1teYS16MC05XS9naSwgXCJcIikpO1xyXG4gICAgICAgICAgICAgIGNvbnN0IGZpZWxkTW9kZWxOYW1lID0gdGhpcy5kYXRhLk5hbWUgKyBjaGlsZEZpZWxkTmFtZTtcclxuICAgICAgICAgICAgICBjb25zdCB6TW9kZWxzID0genVkZlNjb3BlLnpNb2RlbDtcclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgY2hpbGRDb21wb25lbnQgPSBaQ29tcG9uZW50SGVscGVyLmdldENvbXBvbmVudCh0aGlzLmdyb3VwLCAndGV4dF8nICsgZmllbGRNb2RlbE5hbWUpO1xyXG4gICAgICAgICAgICAgIGlmIChjaGlsZENvbXBvbmVudFsnZGF0YSddWydSZWFkT25seSddICYmICFmaWVsZFZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBjbGVhciBjaGlsZCBmaWVsZCBpZiBvbmx5IHJlYWRvbmx5IGlzIHRydWUuIFxyXG4gICAgICAgICAgICAgICAgek1vZGVsc1tmaWVsZE1vZGVsTmFtZV0gPSAhZmllbGRWYWx1ZSA/IG51bGwgOiBzZWxlY3RlZERhdGFPcHRpb24gPyBzZWxlY3RlZERhdGFPcHRpb25bY2hpbGRGaWVsZE5hbWVdIDogbnVsbDtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWREYXRhT3B0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgIHpNb2RlbHNbZmllbGRNb2RlbE5hbWVdID0gc2VsZWN0ZWREYXRhT3B0aW9uW2NoaWxkRmllbGROYW1lXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZmcucGF0Y2hWYWx1ZSh6TW9kZWxzKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICAgc3dpdGNoTWFwKHJlcyA9PiB7XHJcbiAgICAgICAgY29uc3QgZXZlbnROYW1lID0gJ3RyaWdnZXJWYWxpZGF0aW9uJztcclxuICAgICAgICBpZiAodGhpcy5ncm91cCkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuZ3JvdXBbZXZlbnROYW1lXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ncm91cFtldmVudE5hbWVdKHRoaXMuZ3JvdXAsIGV2ZW50LCBmaWVsZFZhbHVlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9mKHt9KTtcclxuICAgICAgfSlcclxuICAgICkuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgIHRoaXMudHJpZ2dlckV2ZW50KFwiaW5wdXRmaWVsZC1vbkNoYW5nZVwiLCB0aGlzLmRhdGEuT25DaGFuZ2UsIGV2ZW50LCBmaWVsZFZhbHVlKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjYXNjYWRpbmdIYW5kbGluZyh6dWRmU2NvcGU6IGFueSwgZmllbGROYW1lOiBhbnksIGZpZWxkVmFsdWU/OiBhbnkpIHtcclxuICAgIGNvbnN0IGxpbmtlZENvbXBvbmVudFNjb3BlID0genVkZlNjb3BlLmxpbmtlZENvbXBvbmVudDtcclxuICAgIC8vICMxIGNoZWNrIGlzIHRoZSBvbmNoYW5nZSBjb21wb25lbnQgbGlua2VkIHRvIG90aGVyIGNvbXBvbmVudC5cclxuICAgIC8vICMyIGlmIGxpbmtlZCB0byBvdGhlciBjb21wb25lbnQobGV0cyBjYWxsIGl0IGNoaWxkIGNvbXBvbmVudCksXHJcbiAgICAvLyAgICBiYXNlIG9uIHRoZSBsaW5rZWRDb21wb25lbnRTY29wZSB2YWx1ZSwgZmluZCB0aGUgY2hpbGQgY29tcG9uZW50LlxyXG4gICAgLy8gIzMga2VlcCB0aGUgb3JpZ2luYWwgU2VsZWN0T3B0aW9ucyBpbiB0aGUgY29tcG9uZW50LlxyXG4gICAgLy8gIzQgY2xlYXIgdGhlIGNoaWxkIHptb2RlbCBhbmQgZmlsdGVyIHRoZSBjaGlsZCBjb21wb25lbnQgb3B0aW9ucy5cclxuICAgIC8vICM1IGF1dG8gc2VsZWN0IGRlZmF1bHQgem1vZGVsIGlmIG9ubHkgaGF2ZSAxIG9wdGlvbiBhbmQgaXMgcmVxdWlyZWQuXHJcbiAgICAvLyAjNiBoYW5kbGUgY2hpbGQgbmVzdGVkIGxpbmtlZCBjb21wb25lbnQuXHJcbiAgICBsaW5rZWRDb21wb25lbnRTY29wZS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICBjb25zdCBkYXRhVmFsdWVTZWdtZW50cyA9IGZpZWxkTmFtZS5zcGxpdCgnXycpO1xyXG4gICAgICBjb25zdCBsaW5rZWRDb21wb25lbnRTZWdtZW50cyA9IGl0ZW0ubGlua2VkQ29tcG9uZW50LnNwbGl0KCdfJyk7XHJcbiAgICAgIGxldCBpc0xpbmtlZENvbXBvbmVudCA9IGZhbHNlO1xyXG5cclxuICAgICAgLy8gY2hlY2sgaXMgaXQgbGlua2VkY29tcG9uZW50XHJcbiAgICAgIGlmIChsaW5rZWRDb21wb25lbnRTZWdtZW50cy5sZW5ndGggPiAxICYmIGRhdGFWYWx1ZVNlZ21lbnRzLmxlbmd0aCA+IDMpIHtcclxuICAgICAgICBjb25zdCBsYXN0VHdvU2VnbWVudHMgPSBkYXRhVmFsdWVTZWdtZW50cy5zbGljZSgtMikuam9pbignXycpO1xyXG4gICAgICAgIGlmIChsaW5rZWRDb21wb25lbnRTZWdtZW50cy5qb2luKCdfJykgPT09IGxhc3RUd29TZWdtZW50cykge1xyXG4gICAgICAgICAgaXNMaW5rZWRDb21wb25lbnQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChsaW5rZWRDb21wb25lbnRTZWdtZW50cy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICBjb25zdCBsYXN0U2VnbWVudCA9IGRhdGFWYWx1ZVNlZ21lbnRzW2RhdGFWYWx1ZVNlZ21lbnRzLmxlbmd0aCAtIDFdO1xyXG4gICAgICAgIGlmIChsaW5rZWRDb21wb25lbnRTZWdtZW50c1swXSA9PT0gbGFzdFNlZ21lbnQpIHtcclxuICAgICAgICAgIGlzTGlua2VkQ29tcG9uZW50ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChpc0xpbmtlZENvbXBvbmVudCkge1xyXG4gICAgICAgIGNvbnN0IGNoaWxkQ29tcG9uZW50ID0gWkNvbXBvbmVudEhlbHBlci5nZXRDb21wb25lbnRCeVZhbHVlKHRoaXMuZ3JvdXAsIGl0ZW0udmFsdWUpO1xyXG4gICAgICAgIGNvbnN0IG9yaWdpbmFsU2VsZWN0T3B0aW9ucyA9IGNoaWxkQ29tcG9uZW50LmRhdGFbJ29yaWdpbmFsU2VsZWN0T3B0aW9ucyddID8/IE9iamVjdC5hc3NpZ24oW10sIGNoaWxkQ29tcG9uZW50LmRhdGEuU2VsZWN0T3B0aW9ucyk7XHJcbiAgICAgICAgY29uc3QgZmlsdGVyZWRTZWxlY3Rpb25PcHRpb25zID0gb3JpZ2luYWxTZWxlY3RPcHRpb25zLmZpbHRlcihvcHRpb24gPT4gb3B0aW9uLnBhcmVudEV4cHJlc3Npb24gPT0gZmllbGRWYWx1ZSk7XHJcblxyXG4gICAgICAgIC8vY2hpbGRDb21wb25lbnQuY2xlYXJEYXRhKCk7IC8vdW5hYmxlIHRvIHVzZSBjbGVhckRhdGEuIG5vdCBoYW5kbGVkIGZvciB6dWRmIHR5cGVcclxuICAgICAgICAvLyBtYW51YWxsIHBhdGNoIHRoZSBjb21wb25lbnQgZm9ybWNvbnRyb2wgdmFsdWVcclxuICAgICAgICBjb25zdCB6dWRmRm9ybSA9IHp1ZGZTY29wZS5mb3JtIGFzIEZvcm1Hcm91cDtcclxuICAgICAgICBjb25zdCBjb21wb25lbnRGb3JtQ29udHJvbCA9IHp1ZGZGb3JtLmNvbnRyb2xzW2l0ZW0udmFsdWVdIGFzIEZvcm1Db250cm9sO1xyXG4gICAgICAgIHp1ZGZTY29wZS56TW9kZWxbaXRlbS52YWx1ZV0gPSBudWxsO1xyXG4gICAgICAgIGNvbXBvbmVudEZvcm1Db250cm9sLnBhdGNoVmFsdWUoenVkZlNjb3BlLnpNb2RlbFtpdGVtLnZhbHVlXSk7XHJcblxyXG4gICAgICAgIGNoaWxkQ29tcG9uZW50LmRhdGFbJ29yaWdpbmFsU2VsZWN0T3B0aW9ucyddID0gb3JpZ2luYWxTZWxlY3RPcHRpb25zO1xyXG4gICAgICAgIGNoaWxkQ29tcG9uZW50LnNldFNlbGVjdE9wdGlvbihmaWx0ZXJlZFNlbGVjdGlvbk9wdGlvbnMpO1xyXG5cclxuICAgICAgICAvLyBzZXQgZHJvcGRvd24gc2VsZWN0ZWQgdmFsdWUgaWYgb25seSAxIG9wdGlvbi5cclxuICAgICAgICBjb25zdCBjaGlsZENvbXBvbmVudFR5cGUgPSBjaGlsZENvbXBvbmVudC5kYXRhLlR5cGU7XHJcbiAgICAgICAgaWYgKGZpbHRlcmVkU2VsZWN0aW9uT3B0aW9ucy5sZW5ndGggPT09IDEgJiYgY2hpbGRDb21wb25lbnQuZGF0YS5Jc1JlcXVpcmVkICYmIChjaGlsZENvbXBvbmVudFR5cGUgPT09ICd6dWlzZWxlY3RtdWx0aXBsZScgfHwgY2hpbGRDb21wb25lbnRUeXBlID09PSAnenNlbGVjdG11bHRpcGxlJykpIHtcclxuICAgICAgICAgIHp1ZGZTY29wZS56TW9kZWxbaXRlbS52YWx1ZV0gPSBmaWx0ZXJlZFNlbGVjdGlvbk9wdGlvbnNbMF1bY2hpbGRDb21wb25lbnQuaXRlbVZhbHVlRmllbGRdO1xyXG4gICAgICAgICAgY29tcG9uZW50Rm9ybUNvbnRyb2wucGF0Y2hWYWx1ZSh6dWRmU2NvcGUuek1vZGVsW2l0ZW0udmFsdWVdKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGxvb3AgY2hpbGRyZW4gaW5jYXNlIG9mIG5lc3RlZCBjaGlsZC5cclxuICAgICAgICBjb25zdCBjaGlsZENvbXBvbmVudFZhbHVlU2VnbWVudHMgPSBjaGlsZENvbXBvbmVudC5kYXRhLlZhbHVlLnNwbGl0KCdfJyk7XHJcbiAgICAgICAgdGhpcy5jYXNjYWRpbmdIYW5kbGluZyh6dWRmU2NvcGUsIGNoaWxkQ29tcG9uZW50VmFsdWVTZWdtZW50c1tjaGlsZENvbXBvbmVudFZhbHVlU2VnbWVudHMubGVuZ3RoIC0gMV0sIHp1ZGZTY29wZS56TW9kZWxbaXRlbS52YWx1ZV0pO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -72,7 +72,7 @@ export class ZComponentDebugService {
|
|
|
72
72
|
addNode: this.addNode,
|
|
73
73
|
refreshActivityLogData: this.LoadGridData.bind(this),
|
|
74
74
|
GoToFieldElement: this.gotoFieldElement.bind(this),
|
|
75
|
-
ListWatchName: this.listWatchName,
|
|
75
|
+
ListWatchName: this.listWatchName.bind(this),
|
|
76
76
|
onChangeWatchName: this.onChangeWatchName.bind(this),
|
|
77
77
|
getWatchName: this.getWatchName.bind(this),
|
|
78
78
|
fieldElementonEditorCodeChange: this.fieldElementonEditorCodeChange.bind(this),
|
|
@@ -273,6 +273,12 @@ export class ZComponentDebugService {
|
|
|
273
273
|
// { Name: '_debug.zData' },
|
|
274
274
|
// { Name: '_debug.zData.collectedActivities' },
|
|
275
275
|
];
|
|
276
|
+
const additionalWatchList = this.scope?.group?.additionalWatchList;
|
|
277
|
+
if (additionalWatchList) {
|
|
278
|
+
additionalWatchList.forEach(item => {
|
|
279
|
+
watchList.push({ Name: item });
|
|
280
|
+
});
|
|
281
|
+
}
|
|
276
282
|
let results;
|
|
277
283
|
if (searchText) {
|
|
278
284
|
results = watchList.filter((s) => s.Name.toLowerCase().indexOf(searchText.toLowerCase()) !== -1);
|
|
@@ -627,4 +633,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
|
|
|
627
633
|
providedIn: 'root'
|
|
628
634
|
}]
|
|
629
635
|
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.AlertService }, { type: i2.AuthService }, { type: i2.FieldService }, { type: i2.ResourceApiService }, { type: i3.ComponentErrorHandlerService }, { type: i2.ToastService }, { type: i4.ModalService }, { type: i2.WebApiService }]; } });
|
|
630
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemNvbXBvbmVudC5kZWJ1Zy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvc2VydmljZXMvemNvbXBvbmVudC5kZWJ1Zy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUtsRCw4QkFBOEI7QUFDOUIsT0FBTyxFQUFFLGVBQWUsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXJELDJDQUEyQztBQUMzQyxPQUFPLEVBQ2lELFdBQVcsRUFDaEIsZ0JBQWdCLEVBQ3pELE1BQU0sRUFDZixNQUFNLGlCQUFpQixDQUFDOzs7Ozs7QUFPekIsTUFBTSxPQUFPLHNCQUFzQjtJQUNqQyxZQUNVLE1BQWMsRUFDZCxZQUEwQixFQUMxQixXQUF3QixFQUN4QixZQUEwQixFQUMxQixrQkFBc0MsRUFDdEMscUJBQW1ELEVBQ25ELFlBQTBCLEVBQzFCLFlBQTBCLEVBQzFCLGFBQTRCO1FBUjVCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBOEI7UUFDbkQsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsa0JBQWEsR0FBYixhQUFhLENBQWU7SUFDbEMsQ0FBQztJQUlMLElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO0lBQzFCLENBQUM7SUFFTSxjQUFjLENBQUMsS0FBYTtRQUNqQyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hDLEtBQUssQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQzFCLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHO1lBQ25CLG1CQUFtQixFQUFFLEVBQUU7WUFDdkIsYUFBYSxFQUFFLENBQUM7WUFDaEIsd0JBQXdCLEVBQUUsRUFBRTtZQUM1QixtQkFBbUIsRUFBRSxDQUFDO1NBQ3ZCLENBQUM7UUFDRixLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDOUIsS0FBSyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDM0IsQ0FBQztJQUdNLGVBQWUsQ0FBQyxhQUE0QixFQUFFLEVBQU87UUFDMUQsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDaEIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFO1lBQ3BCLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztTQUN0QjtRQUVELE1BQU0sQ0FBQyxHQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBQ2xDLEVBQUUsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN4QyxDQUFDLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7UUFDakIsSUFBSSxFQUFFLENBQUMsWUFBWSxFQUFFO1lBQ25CLEVBQUUsQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDL0I7UUFFRCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRTtZQUNmLHdEQUF3RDtZQUN4RCxNQUFNLEVBQUUsRUFBRTtZQUNWLE9BQU8sRUFBRSxJQUFJLGVBQWUsQ0FBd0IsSUFBSSxDQUFDO1lBQ3pELE1BQU0sRUFBRSxJQUFJO1lBQ1osS0FBSyxFQUFFLEtBQUs7WUFDWixNQUFNLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNO1lBQ3ZCLE1BQU0sRUFBRSxFQUFFLENBQUMsS0FBSztZQUNoQixXQUFXLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7WUFDcEQsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtZQUN2QyxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7WUFDN0IsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtZQUN2QyxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7WUFDekIsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZO1lBQy9CLGtCQUFrQixFQUFFLElBQUksQ0FBQyxrQkFBa0I7WUFDM0Msb0JBQW9CLEVBQUUsSUFBSSxDQUFDLG9CQUFvQjtZQUMvQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO1lBQ3ZDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNyQixzQkFBc0IsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDcEQsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDbEQsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhO1lBQ2pDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ3BELFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDMUMsOEJBQThCLEVBQUUsSUFBSSxDQUFDLDhCQUE4QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDOUUsMkJBQTJCLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FDN0Qsa0JBQWtCLEVBQ2xCLFdBQVcsRUFDWCxJQUFJLENBQUMsS0FBSyxFQUNWLHVCQUF1QixDQUN4QjtZQUNELDBCQUEwQixFQUFFLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ3RFLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDeEMseUJBQXlCLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDM0QsOEJBQThCLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FDaEUscUJBQXFCLEVBQ3JCLFdBQVcsRUFDWCxJQUFJLENBQUMsS0FBSyxFQUNWLDBCQUEwQixDQUMzQjtZQUNELDZCQUE2QixFQUFFLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1NBQzdFLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFO1lBQ1osQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLG1CQUFtQixFQUFFLEVBQUUsRUFBRSxhQUFhLEVBQUUsQ0FBQyxFQUFFLENBQUM7U0FDekQ7UUFFRCxFQUFFLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBNEIsRUFBRSxFQUFFLENBQ3JFLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FDbEMsQ0FBQztRQUVGLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN4QyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVPLG1CQUFtQixDQUFDLGFBQTRCO1FBQ3RELGFBQWEsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEVBQUU7WUFDbkMsSUFBSSxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNuRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNyQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQzlDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sZUFBZSxDQUFDLEVBQU87UUFDN0IsTUFBTSxDQUFDLEdBQVcsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFFbEMsTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7UUFFdkMsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDO1FBQ2pFLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO1FBQ3JDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQzdELFlBQVksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFL0IsT0FBTyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVPLFlBQVk7UUFDbEIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUNyQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzFELE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDdkYsQ0FBQztJQUVPLGNBQWMsQ0FBQyxJQUFZLEVBQUUsWUFBb0I7UUFDdkQsSUFBSSxJQUFJLEtBQUssV0FBVyxFQUFFO1lBQ3hCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQzlDO2FBQU07WUFDTCxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUM5QztJQUNILENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxZQUFvQjtRQUM3QyxNQUFNLENBQUMsR0FBVyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQzdCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDcEQsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDckYsR0FBRyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7WUFDcEIsdUNBQXVDO1lBQ3ZDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztZQUNsQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDNUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN4QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDekMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUU7Z0JBQ2YsU0FBUyxFQUFFLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQzthQUNyRCxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVPLGtCQUFrQixDQUFDLFlBQW9CO1FBQzdDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDckIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUM1RCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JELE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUNsRSxTQUFTLENBQUMsQ0FBQyxZQUFpQixFQUFFLEVBQUU7WUFDOUIsK0NBQStDO1lBQy9DLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLFlBQVksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLENBQUM7UUFDdEYsQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7WUFDcEIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ2xDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM1QixDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3hCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN6QyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRTtnQkFDZixTQUFTLEVBQUUsZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDO2FBQ3JELENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUNILENBQUE7SUFDSCxDQUFDO0lBR08sWUFBWSxDQUFDLEtBQTRCLEVBQUUsS0FBYSxFQUFFLEVBQU87UUFDdkUsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLEVBQUU7WUFDckUsT0FBTztTQUNSO1FBQ0QsaURBQWlEO1FBQ2pELElBQUksUUFBUSxDQUFDO1FBRWIsSUFBSTtZQUNGLFFBQVEsR0FBRyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQ2hELEVBQUUsRUFDRixLQUFLLENBQUMsTUFBTSxDQUNiLENBQUM7WUFDRix1REFBdUQ7U0FDeEQ7UUFBQyxPQUFPLEtBQUssRUFBRTtZQUNkLE9BQU8sQ0FBQyxJQUFJLENBQ1YsNEJBQTRCLEVBQzVCLEtBQUssQ0FBQyxNQUFNLEVBQ1osWUFBWSxFQUNaLEtBQUssQ0FDTixDQUFDO1NBQ0g7UUFFRCxtQkFBbUI7UUFDbkIsSUFBSSxPQUFPLFFBQVEsS0FBSyxVQUFVLEVBQUU7WUFDbEMsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNsQyxPQUFPLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztTQUMzQjthQUFNLElBQUksT0FBTyxRQUFRLEtBQUssUUFBUSxFQUFFO1lBQ3ZDLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLEVBQUU7Z0JBQ3ZDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUM1RCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQzdCLE9BQU87YUFDUjtZQUVELElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxpQkFBaUIsRUFBRTtnQkFDcEMsbURBQW1EO2dCQUNuRCxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNoQyxZQUFZO2dCQUNaLCtDQUErQztnQkFDL0MsMENBQTBDO2dCQUMxQywyQ0FBMkM7Z0JBQzNDLG9EQUFvRDtnQkFDcEQsMENBQTBDO2dCQUUxQyx1Q0FBdUM7Z0JBQ3ZDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLElBQUksS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU87YUFDeEc7U0FDRjthQUFNLElBQUksT0FBTyxRQUFRLEtBQUssUUFBUSxFQUFFO1lBQ3ZDLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxpQkFBaUIsRUFBRTtnQkFDcEMsSUFBSSxRQUFRLENBQUMsV0FBVyxFQUFFO29CQUN4QixNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDL0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO29CQUM1QixPQUFPO2lCQUNSO2dCQUVELCtDQUErQztnQkFDL0Msc0RBQXNEO2dCQUN0RCwyQ0FBMkM7Z0JBQzNDLG9EQUFvRDtnQkFDcEQsMENBQTBDO2dCQUMxQyxvREFBb0Q7Z0JBRXBELElBQUksUUFBUSxDQUFDLFVBQVUsRUFBRTtvQkFDdkIsdUNBQXVDO29CQUV2QyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxJQUFJLFFBQVEsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDNUgsT0FBTztpQkFDUjtnQkFDRCxPQUFPLENBQUMsSUFBSSxDQUNWLHlCQUF5QixFQUN6QixRQUFRLEVBQ1IsaUJBQWlCLEVBQ2pCLEtBQUssQ0FBQyxNQUFNLENBQ2IsQ0FBQzthQUNIO1lBQ0QsK0RBQStEO1NBQ2hFO2FBQU07WUFDTCxPQUFPLENBQUMsSUFBSSxDQUNWLHFDQUFxQyxFQUNyQyxLQUFLLENBQUMsTUFBTSxFQUNaLFdBQVcsRUFDWCxLQUFLLENBQ04sQ0FBQztTQUNIO0lBQ0gsQ0FBQztJQUVPLDBCQUEwQixDQUFDLEtBQVU7UUFDM0Msc0RBQXNEO1FBQ3RELE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7UUFDM0IsUUFBUSxHQUFHLENBQUMsSUFBSSxFQUFFO1lBQ2hCLEtBQUssV0FBVyxDQUFDO1lBQ2pCLEtBQUssV0FBVztnQkFDZCxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7b0JBQzdELElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BCLENBQUMsQ0FBQyxDQUFDO2dCQUNILE1BQU07WUFDUixLQUFLLG1CQUFtQjtnQkFDdEIsTUFBTSxjQUFjLEdBQUcsbUNBQW1DLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLGFBQWEsQ0FBQztnQkFDN0YsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUN2QyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNsQixNQUFNO1lBQ1IsS0FBSyxVQUFVLENBQUM7WUFDaEIsS0FBSyxXQUFXLENBQUM7WUFDakIsS0FBSyxVQUFVLENBQUM7WUFDaEIsS0FBSyxhQUFhO2dCQUNoQixJQUFJLENBQUMsaUJBQWlCLENBQUMsbUNBQW1DLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO2dCQUNwRixJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNsQixNQUFNO1lBQ1I7Z0JBQ0UsTUFBTTtTQUNUO0lBQ0gsQ0FBQztJQUVPLFNBQVMsQ0FBQyxLQUFhO1FBQzdCLFlBQVk7UUFDWixrRkFBa0Y7UUFDbEYscUdBQXFHO1FBQ3JHLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLG1CQUFtQixDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xGLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxRQUFnQjtRQUN4QyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLFFBQVEsQ0FBQztRQUMvQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFTSxZQUFZO1FBQ2pCLE1BQU0sZUFBZSxHQUFHLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLHVCQUF1QixDQUFDLENBQUM7UUFDM0YsSUFBSSxlQUFlLEVBQUU7WUFDbkIsZUFBZSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1NBQy9EO0lBQ0gsQ0FBQztJQUVPLGFBQWEsQ0FBQyxTQUFtQyxFQUFFLFVBQWtCLEVBQUUsTUFBYyxFQUMzRixFQUFPLEVBQUUsUUFBYSxFQUFFLFFBQWlCO1FBRXpDLE1BQU0sU0FBUyxHQUFHO1lBQ2hCLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRTtZQUN4QixFQUFFLElBQUksRUFBRSxhQUFhLEVBQUU7WUFDdkIsRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFO1lBQ3hCLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFFO1lBQzVCLEVBQUUsSUFBSSxFQUFFLDBCQUEwQixFQUFFO1lBQ3BDLEVBQUUsSUFBSSxFQUFFLDRCQUE0QixFQUFFO1lBQ3RDLEVBQUUsSUFBSSxFQUFFLHlCQUF5QixFQUFFO1lBQ25DLEVBQUUsSUFBSSxFQUFFLGdDQUFnQyxFQUFFO1lBQzFDLEVBQUUsSUFBSSxFQUFFLG1DQUFtQyxFQUFFO1lBQzdDLCtDQUErQztZQUMvQyw2QkFBNkI7WUFDN0IsNEJBQTRCO1lBQzVCLGdEQUFnRDtTQUNqRCxDQUFDO1FBRUYsSUFBSSxPQUFPLENBQUM7UUFDWixJQUFJLFVBQVUsRUFBRTtZQUNkLE9BQU8sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2xHO1FBRUQsSUFBSSxNQUFNLEtBQUssQ0FBQyxJQUFJLFVBQVUsRUFBRTtZQUM5QixPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1NBQ2pDO2FBQU0sSUFBSSxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3ZCLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7U0FDbkM7YUFBTTtZQUNMLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDNUI7SUFDSCxDQUFDO0lBRU8sWUFBWTtRQUNsQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQztJQUMxQyxDQUFDO0lBRU8saUJBQWlCLENBQUMsS0FBVSxFQUFFLEtBQWEsRUFBRSxFQUFPO1FBQzFELHdEQUF3RDtRQUN4RCxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUNsQyxJQUFJLFFBQVEsRUFBRTtZQUNaLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDM0U7SUFDSCxDQUFDO0lBRU8sOEJBQThCLENBQUMsRUFBeUI7UUFDOUQsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUdPLGtCQUFrQjtRQUN4QixJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3pELENBQUM7SUFFTyxvQkFBb0I7UUFDMUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUMzRCxDQUFDO0lBRU8sZ0JBQWdCO1FBQ3RCLElBQUk7WUFDRixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzdDLDJCQUEyQjtZQUMzQixpREFBaUQ7WUFDakQsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNoRTtRQUFDLE1BQU07WUFDTixRQUFRLENBQUM7U0FDVjtJQUNILENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxFQUF1QjtRQUM5QyxNQUFNLGFBQWEsR0FBRyxDQUFDLElBQVMsRUFBRSxFQUFFO1lBQ2xDLElBQUksT0FBTyxJQUFJLENBQUMsVUFBVSxLQUFLLFFBQVEsRUFBRTtnQkFDdkMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO2FBQ3hCO1lBQ0QsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDLENBQUM7UUFDRixPQUFPLENBQ0wsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJO1lBQ2hCLE1BQU07WUFDTixFQUFFLENBQUMsUUFBUSxDQUFDLElBQUk7WUFDaEIsTUFBTTtZQUNOLGFBQWEsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQzNCLENBQUM7SUFDSixDQUFDO0lBRUQsS0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUE0QjtRQUM1QyxZQUFZO1FBQ1osT0FBTyxDQUFDLEdBQUcsQ0FBQyw2QkFBNkIsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNsRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUNwRCxxQkFBcUIsRUFDckIsV0FBVyxFQUNYLElBQUksRUFDSixJQUFJLENBQ0wsQ0FBQztRQUNGLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvQyxRQUFRLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUM7UUFDckMsT0FBTyxRQUFRLENBQUMsVUFBVSxDQUFDO1FBQzNCLE1BQU0sTUFBTSxHQUFHO1lBQ2IsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7U0FDN0MsQ0FBQztRQUNGLE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLG9CQUFvQixFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDckgsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQXdCLEVBQUUsRUFBRTtZQUMzQyxJQUFJLFNBQVMsQ0FBQyxZQUFZLEtBQUssUUFBUSxFQUFFO2dCQUN2QyxPQUFPO2FBQ1I7WUFDRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDckQsSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFO2dCQUNqQixPQUFPLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7Z0JBQ25DLE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO2FBQ3RCO1lBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbkUsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pFLE1BQU0sYUFBYSxHQUFHLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNyRSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDdkQsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNuQixrREFBa0Q7UUFDcEQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sY0FBYyxDQUFDLE9BQVksRUFBRSxTQUFjLEVBQUUsS0FBYTtRQUNoRSxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25DLElBQUksU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDeEIsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDOUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1NBQ3hFO2FBQU07WUFDTCxJQUFJLFNBQVMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRTtnQkFDbEMsT0FBTyxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7YUFDaEQ7WUFDRCxTQUFTLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUM7U0FDcEM7SUFDSCxDQUFDO0lBSU8sY0FBYyxDQUFDLE9BQVksRUFBRSxTQUFjLEVBQUUsS0FBYTtRQUNoRSxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25DLElBQUksU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDeEIsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDOUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1NBQ3hFO2FBQU07WUFDTCxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDaEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUU7b0JBQ2xELFNBQVMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7aUJBQ3JDO2dCQUNELFNBQVMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDOUM7aUJBQU07Z0JBQ0wsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUN6QjtTQUNGO0lBQ0gsQ0FBQztJQUVPLGNBQWMsQ0FBQyxTQUFjLEVBQUUsS0FBYTtRQUNsRCxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25DLElBQUksU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDeEIsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDOUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDL0Q7YUFBTTtZQUNMLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDcEM7SUFDSCxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsRUFBeUI7UUFDaEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN0QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVPLE9BQU87UUFDYixNQUFNLEVBQUUsR0FBMEI7WUFDaEMsSUFBSSxFQUFFLEVBQUU7WUFDUixPQUFPLEVBQUUsRUFBRTtZQUNYLEtBQUssRUFBRSxFQUFFO1lBQ1QsTUFBTSxFQUFFLEVBQUU7WUFDVixJQUFJLEVBQUUsRUFBRTtZQUNSLGFBQWEsRUFBRSxJQUFJO1NBQ3BCLENBQUM7UUFDRixJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3JCLENBQUM7SUFFTyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQXlCO1FBQy9DLE9BQU8sQ0FBQyxHQUFHLENBQUMscUJBQXFCLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDdkMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FDcEQscUJBQXFCLEVBQ3JCLFdBQVcsRUFDWCxJQUFJLEVBQ0osSUFBSSxDQUNMLENBQUM7UUFDRiwrQ0FBK0M7UUFDL0Msd0NBQXdDO1FBQ3hDLDhCQUE4QjtRQUM5QixNQUFNLFlBQVksR0FBRztZQUNuQixJQUFJLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTTtZQUM5RCxjQUFjLEVBQUUsSUFBSTtZQUNwQixLQUFLLEVBQUUsR0FBRztZQUNWLFFBQVEsRUFBRSxHQUFHO1lBQ2IsZUFBZSxFQUFFLElBQUk7WUFDckIsYUFBYSxFQUFFLElBQUk7WUFDbkIsVUFBVSxFQUFFLEtBQUs7WUFDakIsV0FBVyxFQUFFLE1BQU07WUFDbkIsVUFBVSxFQUFFLEtBQUs7WUFDakIsU0FBUyxFQUFFLENBQUM7WUFDWixTQUFTLEVBQUUsRUFBRTtZQUNiLEtBQUssRUFBRSxPQUFPO1lBQ2QsUUFBUSxFQUFFLHNDQUFzQztZQUNoRCxRQUFRLEVBQUUsS0FBSztZQUNmLFNBQVMsRUFBRSxJQUFJO1lBQ2YsT0FBTyxFQUFFLElBQUk7WUFDYixxQkFBcUI7WUFDckIsaUJBQWlCO1lBQ2pCLDRCQUE0QjtZQUM1QixzQkFBc0I7WUFDdEIscUJBQXFCO1lBQ3JCLHFCQUFxQjtZQUNyQiwyQkFBMkI7U0FDNUIsQ0FBQztRQUNGLE1BQU0sTUFBTSxHQUFHO1lBQ2IsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7U0FDakQsQ0FBQztRQUVGLDRGQUE0RjtRQUM1RixNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLHdCQUF3QixFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFbEgsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQXdCLEVBQUUsRUFBRTtZQUMzQyxJQUFJLFNBQVMsQ0FBQyxZQUFZLEtBQUssUUFBUSxFQUFFO2dCQUN2QyxPQUFPO2FBQ1I7WUFDRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDckQsSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFO2dCQUNqQixPQUFPLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7Z0JBQ25DLE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO2FBQ3RCO1lBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEUsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pFLE1BQU0sYUFBYSxHQUFHLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNyRSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDdkQsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNuQixrREFBa0Q7UUFDcEQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sWUFBWSxDQUFDLEVBQXlCO1FBQzVDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxlQUFlLEVBQ25EO1lBQ0UsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQWlCO1lBQ3BELEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFpQjtTQUNwRCxDQUFDO2FBQ0QsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2pCLElBQUksS0FBSyxLQUFLLEtBQUssRUFBRTtnQkFDbkIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3ZELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDekUsTUFBTSxhQUFhLEdBQUcsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUNyRSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZELGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUM3RDtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLGdCQUFnQjtRQUN0QixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVPLFdBQVc7UUFDakIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUN6QixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQWlCLENBQUM7UUFDeEMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUU7WUFDYixPQUFPLENBQUMsSUFBSSxDQUFDLG1EQUFtRCxDQUFDLENBQUM7WUFDbEUsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUU7WUFDYixJQUFJLENBQUMscUJBQXFCLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNyRSxPQUFPO1NBQ1I7UUFFRCxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQzthQUNiLElBQUk7UUFDSCx3QkFBd0I7UUFDeEIsbURBQW1EO1FBQ25ELDBDQUEwQztRQUMxQyxNQUFNO1FBQ04sR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNQLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEMsQ0FBQyxDQUFDLEVBQ0YsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNiLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQ2hDLEtBQUssQ0FBQyxXQUFXLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUN6QyxLQUFLLENBQUMsTUFBTSxDQUNiO2lCQUNFLElBQUksQ0FDSCxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxpQ0FBaUMsQ0FBQyxDQUFDLENBQ3ZFLENBQUM7UUFDTixDQUFDLENBQUMsRUFDRixTQUFTLENBQUMsQ0FBQyxNQUFXLEVBQUUsRUFBRTtZQUN4QixPQUFPLENBQUMsR0FBRyxDQUFDLG1DQUFtQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ3pELElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUU7Z0JBQ3pCLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3pDLEVBQUUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQzVCO1lBQ0QsRUFBRSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3BCLGtDQUFrQztZQUNsQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoQixDQUFDLENBQUMsQ0FBQzthQUNKLFNBQVMsRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFHRCw0REFBNEQ7SUFDckQsZ0JBQWdCO1FBQ3JCLE1BQU0sd0JBQXdCLEdBQUcsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsMEJBQTBCLENBQUMsQ0FBQztRQUN2RyxJQUFJLHdCQUF3QixFQUFFO1lBQzVCLHdCQUF3QixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1NBQzdFO0lBQ0gsQ0FBQztJQUVPLDZCQUE2QixDQUFDLEtBQVU7UUFDOUMsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25ELE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUM7UUFDaEMsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLFlBQVksQ0FBQztRQUV4QyxrQkFBa0I7UUFDbEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxVQUFVLEVBQUU7YUFDNUIsR0FBRyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxrQ0FBa0MsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FDM0csR0FBRyxDQUFDLEtBQUssRUFBQyxHQUFHLEVBQUMsRUFBRTtZQUNkLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQztZQUNsQixJQUFJLFVBQVUsR0FBRyxFQUFFLENBQUM7WUFDcEIsSUFBSSxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7WUFFMUIsSUFBSSxHQUFHLENBQUMsY0FBYyxFQUFFO2dCQUN0QixRQUFRLEdBQUcsR0FBRyxDQUFDLGNBQWMsQ0FBQzthQUMvQjtZQUVELElBQUksR0FBRyxDQUFDLGdCQUFnQixFQUFFO2dCQUN4QixHQUFHLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBWSxFQUFFLEVBQUU7b0JBQzVDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztnQkFDNUQsQ0FBQyxDQUFDLENBQUM7YUFDSjtZQUVELElBQUksR0FBRyxDQUFDLHNCQUFzQixFQUFFO2dCQUM5QixHQUFHLENBQUMsc0JBQXNCLENBQUMsT0FBTyxDQUFDLENBQUMsYUFBa0IsRUFBRSxFQUFFO29CQUN4RCxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksR0FBRyxJQUFJLEdBQUcsYUFBYSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztnQkFDOUUsQ0FBQyxDQUFDLENBQUM7YUFDSjtZQUVELE1BQU0sV0FBVyxHQUFHO2dCQUNsQixnQkFBZ0IsRUFBRSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNO2dCQUN6RCxrQkFBa0IsRUFBRSxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFNO2dCQUMvRCx3QkFBd0IsRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsTUFBTTthQUNsRixDQUFDO1lBRUYsOEJBQThCO1lBQzlCLE1BQU0sV0FBVyxHQUFHO2dCQUNsQixZQUFZLEVBQUUsS0FBSyxDQUFDLFVBQVU7Z0JBQzlCLFVBQVUsRUFBRSxLQUFLLENBQUMsRUFBRTtnQkFDcEIsWUFBWSxFQUFFLEtBQUssQ0FBQyxJQUFJO2dCQUN4QixZQUFZLEVBQUUsS0FBSyxDQUFDLElBQUk7Z0JBQ3hCLGNBQWMsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQzdCLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSTtnQkFDakMsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJO2dCQUNqQyxlQUFlLEVBQUUsU0FBUyxDQUFDLE9BQU87Z0JBQ2xDLGtCQUFrQixFQUFFLFNBQVMsQ0FBQyxVQUFVO2dCQUN4QyxXQUFXLEVBQUUsU0FBUyxDQUFDLEdBQUc7Z0JBQzFCLFlBQVksRUFBRSxTQUFTLENBQUMsSUFBSTthQUM3QixDQUFDO1lBRUYsSUFBSSxlQUFlLEdBQUc7Z0JBQ3BCLGNBQWMsRUFBRSxNQUFNO2dCQUN0QixnQkFBZ0IsRUFBRSxNQUFNO2dCQUN4QixnQkFBZ0IsRUFBRSxNQUFNO2FBQ3pCLENBQUM7WUFFRixJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUU7Z0JBQ2hCLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUE7Z0JBQ2hDLGVBQWUsR0FBRztvQkFDaEIsY0FBYyxFQUFFLFdBQVcsQ0FBQyxFQUFFO29CQUM5QixnQkFBZ0IsRUFBRSxXQUFXLENBQUMsSUFBSTtvQkFDbEMsZ0JBQWdCLEVBQUUsV0FBVyxDQUFDLElBQUk7aUJBQ25DLENBQUE7YUFDRjtZQUVELE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLGVBQWUsRUFBRSxXQUFXLENBQUMsQ0FBQztZQUVqRixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUNwRCwyQkFBMkIsRUFDM0IsV0FBVyxFQUNYLElBQUksRUFDSixJQUFJLENBQ0wsQ0FBQztZQUNGLE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLHNCQUFzQixFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsZUFBZSxDQUFDLENBQUM7WUFDaEksS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQXdCLEVBQUUsRUFBRTtnQkFDM0MsSUFBSSxTQUFTLENBQUMsWUFBWSxLQUFLLFFBQVEsRUFBRTtvQkFDdkMsT0FBTztpQkFDUjtZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBR0QsYUFBYSxDQUFDLEdBQW1CLEVBQUUsVUFBa0I7UUFDbkQsSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFO1lBQ2YsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDcEM7YUFBTSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssU0FBUyxJQUFJLEdBQUcsQ0FBQyxnQkFBZ0IsS0FBSyxTQUFTLEVBQUU7WUFDdkUsSUFBSSxHQUFHLENBQUMsZ0JBQWdCLEtBQUssSUFBSSxFQUFFO2dCQUNqQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO29CQUMzQixHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsdUJBQXVCLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFDOUUsR0FBRyxVQUFVLE1BQU0sQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7aUJBQzNDO3FCQUFNO29CQUNMLElBQUksQ0FBQyxhQUFhLENBQUMsdUJBQXVCLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7aUJBQ25GO2FBQ0Y7U0FDRjthQUFNO1lBQ0wsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDcEM7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRCxXQUFXLENBQUMsR0FBUTtRQUNsQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzdDLENBQUM7O29IQTV0QlUsc0JBQXNCO3dIQUF0QixzQkFBc0IsY0FGckIsTUFBTTs0RkFFUCxzQkFBc0I7a0JBSGxDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKiogQW5ndWxhciAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBIdHRwUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5cclxuLyoqKioqKioqKiogSW9uaWMgKioqKioqKioqKi9cclxuaW1wb3J0IHsgSW9uaWNTZWxlY3RhYmxlQ29tcG9uZW50IH0gZnJvbSAnaW9uaWMtc2VsZWN0YWJsZSc7XHJcblxyXG4vKioqKioqKioqKiBQbHVnaW4gKioqKioqKioqKi9cclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBvZiwgZm9ya0pvaW4sIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgdGFwLCBzd2l0Y2hNYXAsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbi8qKioqKioqKioqIENvbXBvbmVudCAmIFNlcnZpY2UgKioqKioqKioqKi9cclxuaW1wb3J0IHtcclxuICBBbGVydEJ1dHRvbiwgQWxlcnRTZXJ2aWNlLCBBdXRoU2VydmljZSwgRmllbGRTZXJ2aWNlLCBNRVNTQUdFVFlQRSxcclxuICBSZXNvdXJjZUFwaVNlcnZpY2UsIFRvYXN0U2VydmljZSwgV2ViQXBpU2VydmljZSwgWkNvbXBvbmVudEhlbHBlciwgWkNvbXBvbmVudE91dHB1dEV2ZW50LFxyXG4gIFpGaWVsZCwgWkdyb3VwLCBaVHJlZVRlbXBsYXRlUGFyYW1zXHJcbn0gZnJvbSBcIm1taGdsb2JhbC16Y29yZVwiO1xyXG5pbXBvcnQgeyBNb2RhbFJlc3BvbnNlLCBNb2RhbFNlcnZpY2UgfSBmcm9tICdtbWhnbG9iYWwtem1vZGFsJztcclxuaW1wb3J0IHsgQ29tcG9uZW50RXJyb3JIYW5kbGVyU2VydmljZSB9IGZyb20gXCIuL2NvbXBvbmVudC1lcnJvci1oYW5kbGVyLnNlcnZpY2VcIjtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFpDb21wb25lbnREZWJ1Z1NlcnZpY2Uge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcclxuICAgIHByaXZhdGUgZmllbGRTZXJ2aWNlOiBGaWVsZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlc291cmNlQXBpU2VydmljZTogUmVzb3VyY2VBcGlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb21wb25lbnRFcnJvckhhbmRsZXI6IENvbXBvbmVudEVycm9ySGFuZGxlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRvYXN0U2VydmljZTogVG9hc3RTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZSxcclxuICAgIHByaXZhdGUgd2ViQXBpU2VydmljZTogV2ViQXBpU2VydmljZVxyXG4gICkgeyB9XHJcblxyXG4gIHByaXZhdGUgc2NvcGU6IGFueTtcclxuXHJcbiAgZ2V0IGRlYnVnKCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5zY29wZS5ncm91cC5fZGVidWc7XHJcbiAgfVxyXG5cclxuICBnZXQgZ3JvdXAoKTogWkdyb3VwIHtcclxuICAgIHJldHVybiB0aGlzLnNjb3BlLmdyb3VwO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uSW5pdERlYnVnZ2VyKGdyb3VwOiBaR3JvdXApIHtcclxuICAgIGdyb3VwLl9kZWJ1ZyA9IG5ldyBaR3JvdXAodHJ1ZSk7XHJcbiAgICBncm91cC5faXNEZWJ1Z2dpbmcgPSB0cnVlO1xyXG4gICAgZ3JvdXAuX2RlYnVnLnpEYXRhID0ge1xyXG4gICAgICBjb2xsZWN0ZWRBY3Rpdml0aWVzOiBbXSxcclxuICAgICAgYWN0aXZpdHlDb3VudDogMCxcclxuICAgICAgY29sbGVjdGVkV29ya2Zsb3dCdXR0b25zOiBbXSxcclxuICAgICAgd29ya2Zsb3dCdXR0b25Db3VudDogMFxyXG4gICAgfTtcclxuICAgIGdyb3VwLl9kZWJ1Zy56Q29tcG9uZW50cyA9IHt9O1xyXG4gICAgZ3JvdXAuaXNMaXN0Rm9ybSA9IGZhbHNlO1xyXG4gIH1cclxuXHJcblxyXG4gIHB1YmxpYyBvblN0YXJ0RGVidWdnZXIoZmllbGRFbGVtZW50czogQXJyYXk8WkZpZWxkPiwgbWU6IGFueSkge1xyXG4gICAgdGhpcy5zY29wZSA9IG1lO1xyXG4gICAgaWYgKCFtZS5ncm91cC5fZGVidWcpIHtcclxuICAgICAgbWUuZ3JvdXAuX2RlYnVnID0ge307XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZDogWkdyb3VwID0gbWUuZ3JvdXAuX2RlYnVnO1xyXG4gICAgbWUuZm9ybSA9IG1lLnRvRm9ybUdyb3VwKGZpZWxkRWxlbWVudHMpO1xyXG4gICAgZC5mb3JtID0gbWUuZm9ybTtcclxuICAgIGlmIChtZS5zdWJzY3JpcHRpb24pIHtcclxuICAgICAgbWUuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgT2JqZWN0LmFzc2lnbihkLCB7XHJcbiAgICAgIC8vIHpEYXRhOiB7IGNvbGxlY3RlZEFjdGl2aXRpZXM6IFtdLCBhY3Rpdml0eUNvdW50OiAwIH0sXHJcbiAgICAgIHpNb2RlbDoge30sXHJcbiAgICAgIHN1YmplY3Q6IG5ldyBCZWhhdmlvclN1YmplY3Q8WkNvbXBvbmVudE91dHB1dEV2ZW50PihudWxsKSxcclxuICAgICAgaXNFZGl0OiB0cnVlLFxyXG4gICAgICBpc05ldzogZmFsc2UsXHJcbiAgICAgIF9kZWJ1ZzogbWUuZ3JvdXAuX2RlYnVnLFxyXG4gICAgICBfZ3JvdXA6IG1lLmdyb3VwLFxyXG4gICAgICByZXNvdXJjZVVSTDogdGhpcy5yZXNvdXJjZUFwaVNlcnZpY2UuZ2V0VVJMKCdmaWVsZCcpLFxyXG4gICAgICB0cmVlSXRlbVRlbXBsYXRlOiB0aGlzLnRyZWVJdGVtVGVtcGxhdGUsXHJcbiAgICAgIG9uSXRlbUNsaWNrOiB0aGlzLm9uSXRlbUNsaWNrLFxyXG4gICAgICBvblRyZWVOb2RlQ2hhbmdlOiB0aGlzLm9uVHJlZU5vZGVDaGFuZ2UsXHJcbiAgICAgIG9uQWRkTm9kZTogdGhpcy5vbkFkZE5vZGUsXHJcbiAgICAgIG9uUmVtb3ZlTm9kZTogdGhpcy5vblJlbW92ZU5vZGUsXHJcbiAgICAgIHRyZWVOb2Rlc0V4cGFuZEFsbDogdGhpcy50cmVlTm9kZXNFeHBhbmRBbGwsXHJcbiAgICAgIHRyZWVOb2Rlc0NvbGxhcHNlQWxsOiB0aGlzLnRyZWVOb2Rlc0NvbGxhcHNlQWxsLFxyXG4gICAgICByZWZyZXNoVHJlZU1vZGVsOiB0aGlzLnJlZnJlc2hUcmVlTW9kZWwsXHJcbiAgICAgIGFkZE5vZGU6IHRoaXMuYWRkTm9kZSxcclxuICAgICAgcmVmcmVzaEFjdGl2aXR5TG9nRGF0YTogdGhpcy5Mb2FkR3JpZERhdGEuYmluZCh0aGlzKSxcclxuICAgICAgR29Ub0ZpZWxkRWxlbWVudDogdGhpcy5nb3RvRmllbGRFbGVtZW50LmJpbmQodGhpcyksXHJcbiAgICAgIExpc3RXYXRjaE5hbWU6IHRoaXMubGlzdFdhdGNoTmFtZSxcclxuICAgICAgb25DaGFuZ2VXYXRjaE5hbWU6IHRoaXMub25DaGFuZ2VXYXRjaE5hbWUuYmluZCh0aGlzKSxcclxuICAgICAgZ2V0V2F0Y2hOYW1lOiB0aGlzLmdldFdhdGNoTmFtZS5iaW5kKHRoaXMpLFxyXG4gICAgICBmaWVsZEVsZW1lbnRvbkVkaXRvckNvZGVDaGFuZ2U6IHRoaXMuZmllbGRFbGVtZW50b25FZGl0b3JDb2RlQ2hhbmdlLmJpbmQodGhpcyksXHJcbiAgICAgIGdyaWRBY3Rpdml0eUxvZ0NvbHVtbkZpZWxkczogdGhpcy5maWVsZFNlcnZpY2UuZ2V0Rm9ybUZpZWxkQ29kZShcclxuICAgICAgICAnZGVidWdBY3Rpdml0eUxvZycsXHJcbiAgICAgICAgXCJGb3JtRmllbGRcIixcclxuICAgICAgICB0aGlzLmdyb3VwLFxyXG4gICAgICAgIFwiZGVidWdBY3Rpdml0eUxvZ0ZpZWxkXCJcclxuICAgICAgKSxcclxuICAgICAgZ3JpZEFjdGl2aXR5TG9nT25JdGVtQ2xpY2s6IHRoaXMuZ3JpZEFjdGl2aXR5TG9nT25JdGVtQ2xpY2suYmluZCh0aGlzKSxcclxuICAgICAgdXBkYXRlTW9kZWw6IHRoaXMudXBkYXRlTW9kZWwuYmluZCh0aGlzKSxcclxuICAgICAgcmVmcmVzaFdvcmtmbG93QnV0dG9uRGF0YTogdGhpcy5sb2FkV29ya2Zsb3dEYXRhLmJpbmQodGhpcyksXHJcbiAgICAgIGdyaWRXb3JrZmxvd0J1dHRvbkNvbHVtbkZpZWxkczogdGhpcy5maWVsZFNlcnZpY2UuZ2V0Rm9ybUZpZWxkQ29kZShcclxuICAgICAgICAnZGVidWdXb3JrZmxvd0J1dHRvbicsXHJcbiAgICAgICAgJ0Zvcm1GaWVsZCcsXHJcbiAgICAgICAgdGhpcy5ncm91cCxcclxuICAgICAgICBcImRlYnVnV29ya2Zsb3dCdXR0b25GaWVsZFwiXHJcbiAgICAgICksXHJcbiAgICAgIGdyaWRXb3JrZmxvd0J1dHRvbk9uSXRlbUNsaWNrOiB0aGlzLmdyaWRXb3JrZmxvd0J1dHRvbk9uSXRlbUNsaWNrLmJpbmQodGhpcylcclxuICAgIH0pO1xyXG4gICAgaWYgKCFkLnpEYXRhKSB7XHJcbiAgICAgIGQuekRhdGEgPSB7IGNvbGxlY3RlZEFjdGl2aXRpZXM6IFtdLCBhY3Rpdml0eUNvdW50OiAwIH07XHJcbiAgICB9XHJcblxyXG4gICAgbWUuc3Vic2NyaXB0aW9uID0gZC5zdWJqZWN0LnN1YnNjcmliZSgoZXZlbnQ6IFpDb21wb25lbnRPdXRwdXRFdmVudCkgPT5cclxuICAgICAgdGhpcy5zdWJqZWN0RXZlbnQoZXZlbnQsIGQsIHRoaXMpXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMucGF0Y2hGaWVsZHNQcm9wZXJ0eShmaWVsZEVsZW1lbnRzKTtcclxuICAgIHJldHVybiB0aGlzLmxvYWREZWJ1Z1pNb2RlbChtZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHBhdGNoRmllbGRzUHJvcGVydHkoZmllbGRFbGVtZW50czogQXJyYXk8WkZpZWxkPikge1xyXG4gICAgZmllbGRFbGVtZW50cy5mb3JFYWNoKGZpZWxkRWxlbWVudCA9PiB7XHJcbiAgICAgIHRoaXMuZmllbGRTZXJ2aWNlLnBhdGNoRmllbGRQcm9wZXJ0eShmaWVsZEVsZW1lbnQpO1xyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShmaWVsZEVsZW1lbnQuVmFsdWUpKSB7XHJcbiAgICAgICAgdGhpcy5wYXRjaEZpZWxkc1Byb3BlcnR5KGZpZWxkRWxlbWVudC5WYWx1ZSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsb2FkRGVidWdaTW9kZWwobWU6IGFueSkge1xyXG4gICAgY29uc3QgZDogWkdyb3VwID0gbWUuZ3JvdXAuX2RlYnVnO1xyXG5cclxuICAgIGNvbnN0IGRvd25sb2FkTGlzdCA9IFtdO1xyXG4gICAgZG93bmxvYWRMaXN0LnB1c2godGhpcy5nZXRQcm9qZWN0SWQoKSk7XHJcblxyXG4gICAgY29uc3QgZm9ybVR5cGUgPSBtZS5ncm91cC5pc0xpc3RGb3JtID8gJ0xpc3RGaWVsZCcgOiAnRm9ybUZpZWxkJztcclxuICAgIGNvbnN0IGZpZWxkTmFtZSA9IG1lLmdyb3VwLmZpZWxkTmFtZTtcclxuICAgIGNvbnN0IGZpZWxkek1vZGVsID0gdGhpcy5nZXRGaWVsZHpNb2RlbChmb3JtVHlwZSwgZmllbGROYW1lKTtcclxuICAgIGRvd25sb2FkTGlzdC5wdXNoKGZpZWxkek1vZGVsKTtcclxuXHJcbiAgICByZXR1cm4gZm9ya0pvaW4oZG93bmxvYWRMaXN0KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0UHJvamVjdElkKCkge1xyXG4gICAgY29uc3QgZCA9IHRoaXMuZGVidWc7XHJcbiAgICBjb25zdCB1cmwgPSB0aGlzLnJlc291cmNlQXBpU2VydmljZS5nZXRVUkwoJ3Byb2plY3RzVVJMJyk7XHJcbiAgICByZXR1cm4gdGhpcy53ZWJBcGlTZXJ2aWNlLmdldEFwaSh1cmwsIHt9LCBkLnpEYXRhLCAnUHJvamVjdE9wdGlvbnMnLCBudWxsLCBkLCBmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEZpZWxkek1vZGVsKHR5cGU6IHN0cmluZywgYWN0aXZpdHlOYW1lOiBzdHJpbmcpIHtcclxuICAgIGlmICh0eXBlID09PSAnRm9ybUZpZWxkJykge1xyXG4gICAgICByZXR1cm4gdGhpcy5nZXRGb3JtRmllbGR6TW9kZWwoYWN0aXZpdHlOYW1lKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmdldExpc3RGaWVsZHpNb2RlbChhY3Rpdml0eU5hbWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRGb3JtRmllbGR6TW9kZWwoYWN0aXZpdHlOYW1lOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGQ6IFpHcm91cCA9IHRoaXMuZGVidWc7XHJcbiAgICBjb25zdCB1cmwgPSB0aGlzLnJlc291cmNlQXBpU2VydmljZS5nZXRVUkwoJ2ZpZWxkJyk7XHJcbiAgICByZXR1cm4gdGhpcy53ZWJBcGlTZXJ2aWNlLmh0dHBHZXQkKHVybCwgeyBuYW1lOiBhY3Rpdml0eU5hbWUsIHR5cGU6ICdGb3JtRmllbGQnIH0pLnBpcGUoXHJcbiAgICAgIHRhcCgocmVzcERhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdyZXNwRGF0YTogJywgcmVzcERhdGEpO1xyXG4gICAgICAgIE9iamVjdC5hc3NpZ24oZC56TW9kZWwsIHJlc3BEYXRhKTtcclxuICAgICAgICBkLmZvcm0ucGF0Y2hWYWx1ZShkLnpNb2RlbCk7XHJcbiAgICAgICAgZC5mb3JtLm1hcmtBc1ByaXN0aW5lKCk7XHJcbiAgICAgICAgY29uc3QgZmllbGRzID0gSlNPTi5wYXJzZShkLnpNb2RlbC5Db2RlKTtcclxuICAgICAgICBPYmplY3QuYXNzaWduKGQsIHtcclxuICAgICAgICAgIHRyZWVNb2RlbDogWkNvbXBvbmVudEhlbHBlci5jb252ZXJ0VHJlZU1vZGVsKGZpZWxkcylcclxuICAgICAgICB9KTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldExpc3RGaWVsZHpNb2RlbChhY3Rpdml0eU5hbWU6IHN0cmluZykge1xyXG4gICAgY29uc3QgZCA9IHRoaXMuZGVidWc7XHJcbiAgICBjb25zdCB1cmwgPSB0aGlzLnJlc291cmNlQXBpU2VydmljZS5nZXRVUkwoJ2ZpZWxkc01hcHBpbmcnKTtcclxuICAgIGNvbnN0IHVybDIgPSB0aGlzLnJlc291cmNlQXBpU2VydmljZS5nZXRVUkwoJ2ZpZWxkJyk7XHJcbiAgICByZXR1cm4gdGhpcy53ZWJBcGlTZXJ2aWNlLmh0dHBHZXQkKHVybCwgeyBuYW1lOiBhY3Rpdml0eU5hbWUgfSkucGlwZShcclxuICAgICAgc3dpdGNoTWFwKChmaWVsZE1hcHBpbmc6IGFueSkgPT4ge1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdmaWVsZE1hcHBpbmc6ICcsIGZpZWxkTWFwcGluZyk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMud2ViQXBpU2VydmljZS5odHRwR2V0JCh1cmwyLCB7IGlkOiBmaWVsZE1hcHBpbmcuRmllbGRFbGVtZW50TWFzdGVySWQgfSk7XHJcbiAgICAgIH0pLFxyXG4gICAgICB0YXAoKHJlc3BEYXRhOiBhbnkpID0+IHtcclxuICAgICAgICBPYmplY3QuYXNzaWduKGQuek1vZGVsLCByZXNwRGF0YSk7XHJcbiAgICAgICAgZC5mb3JtLnBhdGNoVmFsdWUoZC56TW9kZWwpO1xyXG4gICAgICAgIGQuZm9ybS5tYXJrQXNQcmlzdGluZSgpO1xyXG4gICAgICAgIGNvbnN0IGZpZWxkcyA9IEpTT04ucGFyc2UoZC56TW9kZWwuQ29kZSk7XHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbihkLCB7XHJcbiAgICAgICAgICB0cmVlTW9kZWw6IFpDb21wb25lbnRIZWxwZXIuY29udmVydFRyZWVNb2RlbChmaWVsZHMpXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pXHJcbiAgICApXHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBzdWJqZWN0RXZlbnQoZXZlbnQ6IFpDb21wb25lbnRPdXRwdXRFdmVudCwgZ3JvdXA6IFpHcm91cCwgbWU6IGFueSkge1xyXG4gICAgaWYgKCFldmVudCB8fCAhZXZlbnQudGFyZ2V0IHx8IGV2ZW50LnRhcmdldC5zdGFydHNXaXRoKFwibW9kYWxHcm91cC5cIikpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLy8gY29uc29sZS5sb2coXCIqKiBEZWJ1ZyAtIFN1YmplY3RFdmVudFwiLCBldmVudCk7XHJcbiAgICBsZXQgY2FsbEZ1bmM7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgY2FsbEZ1bmMgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwoXHJcbiAgICAgICAgbWUsXHJcbiAgICAgICAgZXZlbnQudGFyZ2V0XHJcbiAgICAgICk7XHJcbiAgICAgIC8vIFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZShldmVudC5UYXJnZXQsIGdyb3VwKTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICBcIkVycm9yIHdoZW4gZ2V0R3JvdXBWYWx1ZTogXCIsXHJcbiAgICAgICAgZXZlbnQudGFyZ2V0LFxyXG4gICAgICAgIFwiID4gRXJyb3I6IFwiLFxyXG4gICAgICAgIGVycm9yXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gY2FsbEZ1bmMoZXZlbnQpO1xyXG4gICAgaWYgKHR5cGVvZiBjYWxsRnVuYyA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgIGNvbnN0IG5ld0Z1bmMgPSBjYWxsRnVuYy5iaW5kKG1lKTtcclxuICAgICAgbmV3RnVuYyhldmVudCwgZ3JvdXAsIG1lKTtcclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGNhbGxGdW5jID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgIGlmIChldmVudC50eXBlLmVuZHNXaXRoKFwib25OYXZpZ2F0ZVRvXCIpKSB7XHJcbiAgICAgICAgY29uc3QgblVybCA9IGV2ZW50LnRhcmdldC5yZXBsYWNlKFwiLzppZFwiLCBcIi9cIiArIGV2ZW50LmRhdGEpO1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtuVXJsXSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJ6Z3JpZC1jZWxsQ2xpY2tcIikge1xyXG4gICAgICAgIC8vIChjYWxsRnVuYy5zdGFydHNXaXRoKCdlZGl0JykpIHsgIHpncmlkLWNlbGxDbGlja1xyXG4gICAgICAgIGNvbnN0IGNOYW1lID0gY2FsbEZ1bmMuc2xpY2UoNCk7XHJcbiAgICAgICAgLy8gZGVidWdnZXI7XHJcbiAgICAgICAgLy8gY29uc3QgbW9kYWxHcm91cFBhcmFtOiBNb2RhbFBhZ2VQYXJhbXMgPSB7fTtcclxuICAgICAgICAvLyBtb2RhbEdyb3VwUGFyYW0uY29udHJvbGxlck5hbWUgPSBjTmFtZTtcclxuICAgICAgICAvLyBtb2RhbEdyb3VwUGFyYW0ucmVmZXJJZCA9IGV2ZW50LmRhdGEuSWQ7XHJcbiAgICAgICAgLy8gbW9kYWxHcm91cFBhcmFtLmNvbEZpZWxkcyQgPSBldmVudC5jb2x1bW5GaWVsZHMkO1xyXG4gICAgICAgIC8vIG1vZGFsR3JvdXBQYXJhbS5wYXJlbnRHcm91cCA9IG1lLmdyb3VwO1xyXG5cclxuICAgICAgICAvLyB0aGlzLm9wZW5Nb2RhbEZvcm0obW9kYWxHcm91cFBhcmFtKTtcclxuICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5zaG93KGV2ZW50LmNvbHVtbkZpZWxkcyQgfHwgY05hbWUsIGdyb3VwLCAnJywgbnVsbCwgbnVsbCwge30sIGV2ZW50LmRhdGEuSWQpOyAvLyBUT0RPXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGNhbGxGdW5jID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgIGlmIChldmVudC50eXBlID09PSBcInpncmlkLWNlbGxDbGlja1wiKSB7XHJcbiAgICAgICAgaWYgKGNhbGxGdW5jLm5hdmlnYXRlVXJsKSB7XHJcbiAgICAgICAgICBjb25zdCB1cmwgPSBjYWxsRnVuYy5uYXZpZ2F0ZVVybC5yZXBsYWNlKFwiOmlkXCIsIGV2ZW50LmRhdGEuSWQpO1xyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3VybF0pO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gY29uc3QgbW9kYWxHcm91cFBhcmFtOiBNb2RhbFBhZ2VQYXJhbXMgPSB7fTtcclxuICAgICAgICAvLyBtb2RhbEdyb3VwUGFyYW0uY29udHJvbGxlck5hbWUgPSBjYWxsRnVuYy5jdHJsTmFtZTtcclxuICAgICAgICAvLyBtb2RhbEdyb3VwUGFyYW0ucmVmZXJJZCA9IGV2ZW50LmRhdGEuSWQ7XHJcbiAgICAgICAgLy8gbW9kYWxHcm91cFBhcmFtLmNvbEZpZWxkcyQgPSBldmVudC5jb2x1bW5GaWVsZHMkO1xyXG4gICAgICAgIC8vIG1vZGFsR3JvdXBQYXJhbS5wYXJlbnRHcm91cCA9IG1lLmdyb3VwO1xyXG4gICAgICAgIC8vIG1vZGFsR3JvdXBQYXJhbS5mb3JtSGVhZGVyID0gY2FsbEZ1bmMuZm9ybUhlYWRlcjtcclxuXHJcbiAgICAgICAgaWYgKGNhbGxGdW5jLmZvcm1IZWFkZXIpIHtcclxuICAgICAgICAgIC8vIHRoaXMub3Blbk1vZGFsRm9ybShtb2RhbEdyb3VwUGFyYW0pO1xyXG5cclxuICAgICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLnNob3coZXZlbnQuY29sdW1uRmllbGRzJCB8fCBjYWxsRnVuYy5jdHJsTmFtZSwgZ3JvdXAsIGNhbGxGdW5jLmZvcm1IZWFkZXIsIG51bGwsIG51bGwsIHt9LCBldmVudC5kYXRhLklkKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICAgXCJJbnZhbGlkIGNhbGxGdW5jIHR5cGU6IFwiLFxyXG4gICAgICAgICAgY2FsbEZ1bmMsXHJcbiAgICAgICAgICBcIiBldmVudC5UYXJnZXQ6IFwiLFxyXG4gICAgICAgICAgZXZlbnQudGFyZ2V0XHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgICAvLyB0aGlzLm9wZW5Nb2RhbEZvcm1CeUNvbXBvbmVudChjYWxsRnVuYy50eXBlLCBldmVudC5EYXRhLklkKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICBcIkZ1bmN0aW9uIG5vdCBkZWZpbmVkIGluIGdyb3VwIGZvcjogXCIsXHJcbiAgICAgICAgZXZlbnQudGFyZ2V0LFxyXG4gICAgICAgIFwiLCBFdmVudDogXCIsXHJcbiAgICAgICAgZXZlbnRcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ3JpZEFjdGl2aXR5TG9nT25JdGVtQ2xpY2soZXZlbnQ6IGFueSkge1xyXG4gICAgLy8gY29uc29sZS5sb2coJ2dyaWRBY3Rpdml0eUxvZ09uSXRlbUNsaWNrOiAnLCBldmVudCk7XHJcbiAgICBjb25zdCByZWMgPSBldmVudC5kYXRhSXRlbTtcclxuICAgIHN3aXRjaCAocmVjLnR5cGUpIHtcclxuICAgICAgY2FzZSAnTGlzdEZpZWxkJzpcclxuICAgICAgY2FzZSAnRm9ybUZpZWxkJzpcclxuICAgICAgICB0aGlzLmdldEZpZWxkek1vZGVsKHJlYy50eXBlLCByZWMuYWN0aXZpdHlOYW1lKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RUYWIoMCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ1Jlc291cmNlU2VydmVyQVBJJzpcclxuICAgICAgICBjb25zdCB3YXRjaE5hbWVWYWx1ZSA9ICdfZGVidWcuekRhdGEuY29sbGVjdGVkQWN0aXZpdGllc1snICsgKHJlYy5pbmRleCAtIDEpICsgJ10ucmVmZXJlbmNlJztcclxuICAgICAgICB0aGlzLnNldFdhdGNoTmFtZVZhbHVlKHdhdGNoTmFtZVZhbHVlKTtcclxuICAgICAgICB0aGlzLnNlbGVjdFRhYigxKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnSHR0cEdldCQnOlxyXG4gICAgICBjYXNlICdIdHRwUG9zdCQnOlxyXG4gICAgICBjYXNlICdIdHRwUHV0JCc6XHJcbiAgICAgIGNhc2UgJ0h0dHBEZWxldGUkJzpcclxuICAgICAgICB0aGlzLnNldFdhdGNoTmFtZVZhbHVlKCdfZGVidWcuekRhdGEuY29sbGVjdGVkQWN0aXZpdGllc1snICsgKHJlYy5pbmRleCAtIDEpICsgJ10nKTtcclxuICAgICAgICB0aGlzLnNlbGVjdFRhYigxKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2VsZWN0VGFiKGluZGV4OiBudW1iZXIpIHtcclxuICAgIC8vIGRlYnVnZ2VyO1xyXG4gICAgLy8gdGhpcy5kZWJ1Zy56Q29tcG9uZW50c1tcInp0YWJfZGVidWdnZXJUYWJzXCJdLnN0YXRlLmxhc3RTZWxlY3RlZFRhYkluZGV4ID0gaW5kZXg7XHJcbiAgICAvLyBaQ29tcG9uZW50SGVscGVyLmdldENvbXBvbmVudCh0aGlzLmRlYnVnLCAnenRhYl9kZWJ1Z2dlclRhYnMnKS5zdGF0ZS5sYXN0U2VsZWN0ZWRUYWJJbmRleCA9IGluZGV4O1xyXG4gICAgWkNvbXBvbmVudEhlbHBlci5nZXRDb21wb25lbnQodGhpcy5kZWJ1ZywgJ3p0YWJfZGVidWdnZXJUYWJzJykuc2VsZWN0VGFiKGluZGV4KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0V2F0Y2hOYW1lVmFsdWUobmV3VmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5kZWJ1Zy56TW9kZWxbJ0RlYnVnV2F0Y2hOYW1lJ10gPSBuZXdWYWx1ZTtcclxuICAgIFpDb21wb25lbnRIZWxwZXIuc2V0TW9kZWxWYWx1ZSgnV2F0Y2hOYW1lJywgbmV3VmFsdWUsIHRoaXMuZGVidWcsIHRydWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIExvYWRHcmlkRGF0YSgpIHtcclxuICAgIGNvbnN0IGFjdGl2aXR5TG9nR3JpZCA9IFpDb21wb25lbnRIZWxwZXIuZ2V0Q29tcG9uZW50KHRoaXMuZGVidWcsICd6Z3JpZF9BY3Rpdml0eUxvZ0dyaWQnKTtcclxuICAgIGlmIChhY3Rpdml0eUxvZ0dyaWQpIHtcclxuICAgICAgYWN0aXZpdHlMb2dHcmlkLnNldERhdGEodGhpcy5kZWJ1Zy56RGF0YS5jb2xsZWN0ZWRBY3Rpdml0aWVzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgbGlzdFdhdGNoTmFtZShjb21wb25lbnQ6IElvbmljU2VsZWN0YWJsZUNvbXBvbmVudCwgc2VhcmNoVGV4dDogc3RyaW5nLCBwYWdlTm86IG51bWJlcixcclxuICAgIG1lOiBhbnksIGRhdGFJdGVtOiBhbnksIHJlY29yZElkPzogc3RyaW5nKSB7XHJcblxyXG4gICAgY29uc3Qgd2F0Y2hMaXN0ID0gW1xyXG4gICAgICB7IE5hbWU6ICdncm91cC56TW9kZWwnIH0sXHJcbiAgICAgIHsgTmFtZTogJ2dyb3VwLnpEYXRhJyB9LFxyXG4gICAgICB7IE5hbWU6ICdncm91cC5maWVsZHMnIH0sXHJcbiAgICAgIHsgTmFtZTogJ2dyb3VwLmZvcm0udmFsdWUnIH0sXHJcbiAgICAgIHsgTmFtZTogJ2dyb3VwLmJhY2tOYXZpZ2F0aW9uUGFnZScgfSxcclxuICAgICAgeyBOYW1lOiAnZ3JvdXAucGFyZW50UmVmZXJlbmNlRmllbGQnIH0sXHJcbiAgICAgIHsgTmFtZTogJ2dyb3VwLnBhcmVudFJlZmVyZW5jZUlkJyB9LFxyXG4gICAgICB7IE5hbWU6ICdPYmplY3Qua2V5cyhncm91cC56Q29tcG9uZW50cyknIH0sXHJcbiAgICAgIHsgTmFtZTogJ2dyb3VwLmdyaWRPcHRpb25zLnpncmlkLmdyaWQuZGF0YScgfVxyXG4gICAgICAvLyB7IE5hbWU6ICdPYmplY3Qua2V5cyhfZGVidWcuekNvbXBvbmVudHMpJyB9LFxyXG4gICAgICAvLyB7IE5hbWU6ICdfZGVidWcuek1vZGVsJyB9LFxyXG4gICAgICAvLyB7IE5hbWU6ICdfZGVidWcuekRhdGEnIH0sXHJcbiAgICAgIC8vIHsgTmFtZTogJ19kZWJ1Zy56RGF0YS5jb2xsZWN0ZWRBY3Rpdml0aWVzJyB9LFxyXG4gICAgXTtcclxuXHJcbiAgICBsZXQgcmVzdWx0cztcclxuICAgIGlmIChzZWFyY2hUZXh0KSB7XHJcbiAgICAgIHJlc3VsdHMgPSB3YXRjaExpc3QuZmlsdGVyKChzKSA9PiBzLk5hbWUudG9Mb3dlckNhc2UoKS5pbmRleE9mKHNlYXJjaFRleHQudG9Mb3dlckNhc2UoKSkgIT09IC0xKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAocGFnZU5vID09PSAwICYmIHNlYXJjaFRleHQpIHtcclxuICAgICAgcmV0dXJuIG9mKHsgZGF0YVNldDogcmVzdWx0cyB9KTtcclxuICAgIH0gZWxzZSBpZiAocGFnZU5vID09PSAwKSB7XHJcbiAgICAgIHJldHVybiBvZih7IGRhdGFTZXQ6IHdhdGNoTGlzdCB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBvZih7IGRhdGFTZXQ6IFtdIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRXYXRjaE5hbWUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5kZWJ1Zy56TW9kZWwuRGVidWdXYXRjaE5hbWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uQ2hhbmdlV2F0Y2hOYW1lKGV2ZW50OiBhbnksIGdyb3VwOiBaR3JvdXAsIG1lOiBhbnkpIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKCdvbkNoYW5nZVdhdGNoTmFtZTogJywgZXZlbnQuZGF0YS52YWx1ZSk7XHJcbiAgICBjb25zdCBuZXdWYWx1ZSA9IGV2ZW50LmRhdGEudmFsdWU7XHJcbiAgICBpZiAobmV3VmFsdWUpIHtcclxuICAgICAgdGhpcy5kZWJ1Zy56TW9kZWxbJ0RlYnVnV2F0Y2hOYW1lJ10gPSBuZXdWYWx1ZS5yZXBsYWNlKCdncm91cCcsICdfZ3JvdXAnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmllbGRFbGVtZW50b25FZGl0b3JDb2RlQ2hhbmdlKGVsOiBaQ29tcG9uZW50T3V0cHV0RXZlbnQpIHtcclxuICAgIHRoaXMucmVmcmVzaFRyZWVNb2RlbCgpO1xyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgdHJlZU5vZGVzRXhwYW5kQWxsKCkge1xyXG4gICAgdGhpcy5kZWJ1Zy56Q29tcG9uZW50c1snenRyZWVfZGVidWdaVHJlZSddLmV4cGFuZEFsbCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB0cmVlTm9kZXNDb2xsYXBzZUFsbCgpIHtcclxuICAgIHRoaXMuZGVidWcuekNvbXBvbmVudHNbJ3p0cmVlX2RlYnVnWlRyZWUnXS5jb2xsYXBzZUFsbCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWZyZXNoVHJlZU1vZGVsKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgZCA9IEpTT04ucGFyc2UodGhpcy5kZWJ1Zy56TW9kZWwuQ29kZSk7XHJcbiAgICAgIC8vIHRoaXMuX2FkZE5vZGVzVG9UcmVlKGQpO1xyXG4gICAgICAvLyBncm91cFsndHJlZU1vZGVsJ10gPSB0aGlzLmNvbnZlcnRUcmVlTW9kZWwoZCk7XHJcbiAgICAgIHRoaXMuZGVidWdbJ3RyZWVNb2RlbCddID0gWkNvbXBvbmVudEhlbHBlci5jb252ZXJ0VHJlZU1vZGVsKGQpO1xyXG4gICAgfSBjYXRjaCB7XHJcbiAgICAgIGRlYnVnZ2VyO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB0cmVlSXRlbVRlbXBsYXRlKGVsOiBaVHJlZVRlbXBsYXRlUGFyYW1zKSB7XHJcbiAgICBjb25zdCBnZXRGaWVsZFZhbHVlID0gKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICBpZiAodHlwZW9mIGl0ZW0uX0RhdGFWYWx1ZSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgIHJldHVybiBpdGVtLl9EYXRhVmFsdWU7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIFwiLi4uXCI7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgZWwuZGF0YUl0ZW0uTmFtZSArXHJcbiAgICAgIFwiIC0gW1wiICtcclxuICAgICAgZWwuZGF0YUl0ZW0uVHlwZSArXHJcbiAgICAgIFwiXSA9IFwiICtcclxuICAgICAgZ2V0RmllbGRWYWx1ZShlbC5kYXRhSXRlbSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBvbkl0ZW1DbGljayhldmVudDogWkNvbXBvbmVudE91dHB1dEV2ZW50KSB7XHJcbiAgICAvLyBkZWJ1Z2dlcjtcclxuICAgIGNvbnNvbGUubG9nKFwib25JdGVtQ2xpY2sgZGF0YSByZWNlaXZlZDogXCIsIGV2ZW50KTtcclxuICAgIGNvbnN0IG1vZGFsRmllbGRzID0gdGhpcy5maWVsZFNlcnZpY2UuZ2V0Rm9ybUZpZWxkQ29kZShcclxuICAgICAgXCJtdkVkaXRGaWVsZE5vZGVGb3JtXCIsXHJcbiAgICAgIFwiRm9ybUZpZWxkXCIsXHJcbiAgICAgIG51bGwsXHJcbiAgICAgIG51bGxcclxuICAgICk7XHJcbiAgICBjb25zdCBkYXRhSXRlbSA9IE9iamVjdC5hc3NpZ24oe30sIGV2ZW50LmRhdGEpO1xyXG4gICAgZGF0YUl0ZW0uVmFsdWUgPSBkYXRhSXRlbS5fRGF0YVZhbHVlO1xyXG4gICAgZGVsZXRlIGRhdGFJdGVtLl9EYXRhVmFsdWU7XHJcbiAgICBjb25zdCB6bW9kZWwgPSB7XHJcbiAgICAgIG5vZGVNb2RlbDogSlNPTi5zdHJpbmdpZnkoZGF0YUl0ZW0sIG51bGwsIDIpXHJcbiAgICB9O1xyXG4gICAgY29uc3QgbW9kYWwgPSBhd2FpdCB0aGlzLm1vZGFsU2VydmljZS5zaG93KG1vZGFsRmllbGRzLCB0aGlzLmRlYnVnLl9ncm91cCwgJ0ZpZWxkIEVsZW1lbnQgSW5mbycsIG51bGwsIG51bGwsIHptb2RlbCk7XHJcbiAgICBtb2RhbC5zdWJzY3JpYmUoKG1vZGFsRGF0YTogTW9kYWxSZXNwb25zZSkgPT4ge1xyXG4gICAgICBpZiAobW9kYWxEYXRhLnJlc3BvbnNlVHlwZSA9PT0gXCJjYW5jZWxcIikge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBuZXdEYXRhID0gSlNPTi5wYXJzZShtb2RhbERhdGEuZGF0YS5ub2RlTW9kZWwpO1xyXG4gICAgICBpZiAobmV3RGF0YS5WYWx1ZSkge1xyXG4gICAgICAgIG5ld0RhdGEuX0RhdGFWYWx1ZSA9IG5ld0RhdGEuVmFsdWU7XHJcbiAgICAgICAgbmV3RGF0YS5WYWx1ZSA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy51cGRhdGVUcmVlTm9kZShuZXdEYXRhLCB0aGlzLmRlYnVnWyd0cmVlTW9kZWwnXSwgZXZlbnQuZXZlbnQpO1xyXG4gICAgICBjb25zdCBuZXdUcmVlTW9kZWwgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuZGVidWdbJ3RyZWVNb2RlbCddKSk7XHJcbiAgICAgIGNvbnN0IHJldmVydGVkTW9kZWwgPSBaQ29tcG9uZW50SGVscGVyLnJldmVydFRyZWVNb2RlbChuZXdUcmVlTW9kZWwpO1xyXG4gICAgICBjb25zdCBuZXdDb2RlID0gSlNPTi5zdHJpbmdpZnkocmV2ZXJ0ZWRNb2RlbCwgbnVsbCwgMik7XHJcbiAgICAgIFpDb21wb25lbnRIZWxwZXIuc2V0TW9kZWxWYWx1ZShcIkNvZGVcIiwgbmV3Q29kZSwgdGhpcy5kZWJ1Zyk7XHJcbiAgICAgIHRoaXMudXBkYXRlTW9kZWwoKTtcclxuICAgICAgLy8gdGhpcy5tYWluU2VydmljZS51cGRhdGVNb2RlbChudWxsLCB0aGlzLmRlYnVnKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVUcmVlTm9kZShuZXdOb2RlOiBhbnksIHRyZWVNb2RlbDogYW55LCBpbmRleDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCB0cmVlSW5kZXggPSBpbmRleC5zcGxpdChcIl9cIik7XHJcbiAgICBpZiAodHJlZUluZGV4Lmxlbmd0aCA+IDEpIHtcclxuICAgICAgY29uc3QgbmV3SW5kZXggPSB0cmVlSW5kZXguc2xpY2UoMSkuam9pbihcIl9cIik7XHJcbiAgICAgIHRoaXMudXBkYXRlVHJlZU5vZGUobmV3Tm9kZSwgdHJlZU1vZGVsWyt0cmVlSW5kZXhbMF1dLlZhbHVlLCBuZXdJbmRleCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodHJlZU1vZGVsWyt0cmVlSW5kZXhbMF1dLlZhbHVlKSB7XHJcbiAgICAgICAgbmV3Tm9kZS5WYWx1ZSA9IHRyZWVNb2RlbFsrdHJlZUluZGV4WzBdXS5WYWx1ZTtcclxuICAgICAgfVxyXG4gICAgICB0cmVlTW9kZWxbK3RyZWVJbmRleFswXV0gPSBuZXdOb2RlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG5cclxuICBwcml2YXRlIGluc2VydFRyZWVOb2RlKG5ld05vZGU6IGFueSwgdHJlZU1vZGVsOiBhbnksIGluZGV4OiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IHRyZWVJbmRleCA9IGluZGV4LnNwbGl0KFwiX1wiKTtcclxuICAgIGlmICh0cmVlSW5kZXgubGVuZ3RoID4gMSkge1xyXG4gICAgICBjb25zdCBuZXdJbmRleCA9IHRyZWVJbmRleC5zbGljZSgxKS5qb2luKFwiX1wiKTtcclxuICAgICAgdGhpcy5pbnNlcnRUcmVlTm9kZShuZXdOb2RlLCB0cmVlTW9kZWxbK3RyZWVJbmRleFswXV0uVmFsdWUsIG5ld0luZGV4KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0cmVlSW5kZXhbMF0pIHtcclxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodHJlZU1vZGVsWyt0cmVlSW5kZXhbMF1dLlZhbHVlKSkge1xyXG4gICAgICAgICAgdHJlZU1vZGVsWyt0cmVlSW5kZXhbMF1dLlZhbHVlID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRyZWVNb2RlbFsrdHJlZUluZGV4WzBdXS5WYWx1ZS5wdXNoKG5ld05vZGUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRyZWVNb2RlbC5wdXNoKG5ld05vZGUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbW92ZVRyZWVOb2RlKHRyZWVNb2RlbDogYW55LCBpbmRleDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCB0cmVlSW5kZXggPSBpbmRleC5zcGxpdChcIl9cIik7XHJcbiAgICBpZiAodHJlZUluZGV4Lmxlbmd0aCA+IDEpIHtcclxuICAgICAgY29uc3QgbmV3SW5kZXggPSB0cmVlSW5kZXguc2xpY2UoMSkuam9pbihcIl9cIik7XHJcbiAgICAgIHRoaXMucmVtb3ZlVHJlZU5vZGUodHJlZU1vZGVsWyt0cmVlSW5kZXhbMF1dLlZhbHVlLCBuZXdJbmRleCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0cmVlTW9kZWwuc3BsaWNlKCt0cmVlSW5kZXhbMF0sIDEpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvblRyZWVOb2RlQ2hhbmdlKGVsOiBaQ29tcG9uZW50T3V0cHV0RXZlbnQpIHtcclxuICAgIGNvbnNvbGUubG9nKFwib25UcmVlTm9kZUNoYW5nZTogXCIsIGVsKTtcclxuICAgIGNvbnN0IGNvZGVEYXRhID0gSlNPTi5zdHJpbmdpZnkoZWwuZGF0YSk7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLnNldE1vZGVsVmFsdWUoXCJDb2RlXCIsIGNvZGVEYXRhLCB0aGlzLmRlYnVnKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWRkTm9kZSgpIHtcclxuICAgIGNvbnN0IGVsOiBaQ29tcG9uZW50T3V0cHV0RXZlbnQgPSB7XHJcbiAgICAgIGRhdGE6IHt9LFxyXG4gICAgICByb3dEYXRhOiB7fSxcclxuICAgICAgZXZlbnQ6IFwiXCIsXHJcbiAgICAgIHRhcmdldDogXCJcIixcclxuICAgICAgdHlwZTogXCJcIixcclxuICAgICAgY29sdW1uRmllbGRzJDogbnVsbFxyXG4gICAgfTtcclxuICAgIHRoaXMub25BZGROb2RlKGVsKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgb25BZGROb2RlKGVsOiBaQ29tcG9uZW50T3V0cHV0RXZlbnQpIHtcclxuICAgIGNvbnNvbGUubG9nKCdvbkFkZE5vZGUgaXMgY2FsbGVkJywgZWwpO1xyXG4gICAgY29uc3QgbW9kYWxGaWVsZHMgPSB0aGlzLmZpZWxkU2VydmljZS5nZXRGb3JtRmllbGRDb2RlKFxyXG4gICAgICBcIm12RWRpdEZpZWxkTm9kZUZvcm1cIixcclxuICAgICAgXCJGb3JtRmllbGRcIixcclxuICAgICAgbnVsbCxcclxuICAgICAgbnVsbFxyXG4gICAgKTtcclxuICAgIC8vIGNvbnN0IGRhdGFJdGVtID0gT2JqZWN0LmFzc2lnbih7fSwgZWwuZGF0YSk7XHJcbiAgICAvLyBkYXRhSXRlbS5WYWx1ZSA9IGRhdGFJdGVtLl9EYXRhVmFsdWU7XHJcbiAgICAvLyBkZWxldGUgZGF0YUl0ZW0uX0RhdGFWYWx1ZTtcclxuICAgIGNvbnN0IGluaXRpYWxNb2RlbCA9IHtcclxuICAgICAgTmFtZTogJ05hbWUnLCBEaXNwbGF5TmFtZTogJ05hbWUnLCBWYWx1ZTogJ05hbWUnLCBUeXBlOiAndGV4dCcsXHJcbiAgICAgIGdyaWRDb2xWaXNpYmxlOiB0cnVlLFxyXG4gICAgICB3aWR0aDogMTUwLFxyXG4gICAgICBtaW5XaWR0aDogMTAwLFxyXG4gICAgICBlbmFibGVGaWx0ZXJpbmc6IHRydWUsXHJcbiAgICAgIGVuYWJsZVNvcnRpbmc6IHRydWUsXHJcbiAgICAgIHBpbm5lZExlZnQ6IGZhbHNlLFxyXG4gICAgICBQbGFjZUhvbGRlcjogXCJOYW1lXCIsXHJcbiAgICAgIElzUmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBNaW5MZW5ndGg6IDIsXHJcbiAgICAgIE1heExlbmd0aDogNTAsXHJcbiAgICAgIExhYmVsOiBcIk5hbWU6XCIsXHJcbiAgICAgIERpdkNsYXNzOiBcImNvbC14cy0xMiBjb2wtc20tNiBjb2wtbWQtNiBjb2wtbGctM1wiLFxyXG4gICAgICBSZWFkT25seTogZmFsc2UsXHJcbiAgICAgIFNob3dMYWJlbDogdHJ1ZSxcclxuICAgICAgVmlzaWJsZTogdHJ1ZSxcclxuICAgICAgLy9FbmFibGVIaWRpbmc6IHRydWUsXHJcbiAgICAgIC8vY2VsbEZpbHRlcjogXCJcIixcclxuICAgICAgLy9maWx0ZXJDZWxsRmlsdGVyZWQ6IGZhbHNlLFxyXG4gICAgICAvL2VuYWJsZVBpbm5pbmc6IHRydWUsXHJcbiAgICAgIC8vcGlubmVkUmlnaHQ6IGZhbHNlLFxyXG4gICAgICAvL1VwZGF0ZU9uQmx1cjogdHJ1ZSxcclxuICAgICAgLy9BcHBlbmREaXZDbGVhckZpeDogZmFsc2UsXHJcbiAgICB9O1xyXG4gICAgY29uc3Qgem1vZGVsID0ge1xyXG4gICAgICBub2RlTW9kZWw6IEpTT04uc3RyaW5naWZ5KGluaXRpYWxNb2RlbCwgbnVsbCwgMilcclxuICAgIH07XHJcblxyXG4gICAgLy8gY29uc3QgbW9kYWw6IEhUTUxJb25Nb2RhbEVsZW1lbnQgPSBhd2FpdCB0aGlzLm1haW5TZXJ2aWNlLm9wZW5Nb2RhbEZvcm0obW9kYWxHcm91cFBhcmFtKTtcclxuICAgIGNvbnN0IG1vZGFsID0gYXdhaXQgdGhpcy5tb2RhbFNlcnZpY2Uuc2hvdyhtb2RhbEZpZWxkcywgdGhpcy5kZWJ1ZywgJ0FkZCBGaWVsZCBFbGVtZW50IEl0ZW0nLCBudWxsLCBudWxsLCB6bW9kZWwpO1xyXG5cclxuICAgIG1vZGFsLnN1YnNjcmliZSgobW9kYWxEYXRhOiBNb2RhbFJlc3BvbnNlKSA9PiB7XHJcbiAgICAgIGlmIChtb2RhbERhdGEucmVzcG9uc2VUeXBlID09PSBcImNhbmNlbFwiKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IG5ld0RhdGEgPSBKU09OLnBhcnNlKG1vZGFsRGF0YS5kYXRhLm5vZGVNb2RlbCk7XHJcbiAgICAgIGlmIChuZXdEYXRhLlZhbHVlKSB7XHJcbiAgICAgICAgbmV3RGF0YS5fRGF0YVZhbHVlID0gbmV3RGF0YS5WYWx1ZTtcclxuICAgICAgICBuZXdEYXRhLlZhbHVlID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmluc2VydFRyZWVOb2RlKG5ld0RhdGEsIHRoaXMuZGVidWdbXCJ0cmVlTW9kZWxcIl0sIGVsLmV2ZW50KTtcclxuICAgICAgY29uc3QgbmV3VHJlZU1vZGVsID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmRlYnVnWyd0cmVlTW9kZWwnXSkpO1xyXG4gICAgICBjb25zdCByZXZlcnRlZE1vZGVsID0gWkNvbXBvbmVudEhlbHBlci5yZXZlcnRUcmVlTW9kZWwobmV3VHJlZU1vZGVsKTtcclxuICAgICAgY29uc3QgbmV3Q29kZSA9IEpTT04uc3RyaW5naWZ5KHJldmVydGVkTW9kZWwsIG51bGwsIDIpO1xyXG4gICAgICBaQ29tcG9uZW50SGVscGVyLnNldE1vZGVsVmFsdWUoXCJDb2RlXCIsIG5ld0NvZGUsIHRoaXMuZGVidWcpO1xyXG4gICAgICB0aGlzLnVwZGF0ZU1vZGVsKCk7XHJcbiAgICAgIC8vIHRoaXMubWFpblNlcnZpY2UudXBkYXRlTW9kZWwobnVsbCwgdGhpcy5kZWJ1Zyk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25SZW1vdmVOb2RlKGVsOiBaQ29tcG9uZW50T3V0cHV0RXZlbnQpIHtcclxuICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnNob3coJ1JlbW92ZSBOb2RlJywgJ0FyZSB5b3Ugc3VyZT8nLFxyXG4gICAgICBbXHJcbiAgICAgICAgeyB0ZXh0OiBcIk5vXCIsIGNzc0NsYXNzOiBcInNlY29uZGFyeVwiIH0gYXMgQWxlcnRCdXR0b24sXHJcbiAgICAgICAgeyB0ZXh0OiBcIlllc1wiLCBjc3NDbGFzczogXCJwcmltYXJ5XCIgfSBhcyBBbGVydEJ1dHRvblxyXG4gICAgICBdKVxyXG4gICAgICAuc3Vic2NyaWJlKHJlcGx5ID0+IHtcclxuICAgICAgICBpZiAocmVwbHkgPT09ICdZZXMnKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnUmVtb3ZlIE5vZGUnLCBlbCk7XHJcbiAgICAgICAgICB0aGlzLnJlbW92ZVRyZWVOb2RlKHRoaXMuZGVidWdbXCJ0cmVlTW9kZWxcIl0sIGVsLmV2ZW50KTtcclxuICAgICAgICAgIGNvbnN0IG5ld1RyZWVNb2RlbCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5kZWJ1Z1sndHJlZU1vZGVsJ10pKTtcclxuICAgICAgICAgIGNvbnN0IHJldmVydGVkTW9kZWwgPSBaQ29tcG9uZW50SGVscGVyLnJldmVydFRyZWVNb2RlbChuZXdUcmVlTW9kZWwpO1xyXG4gICAgICAgICAgY29uc3QgbmV3Q29kZSA9IEpTT04uc3RyaW5naWZ5KHJldmVydGVkTW9kZWwsIG51bGwsIDIpO1xyXG4gICAgICAgICAgWkNvbXBvbmVudEhlbHBlci5zZXRNb2RlbFZhbHVlKFwiQ29kZVwiLCBuZXdDb2RlLCB0aGlzLmRlYnVnKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnb3RvRmllbGRFbGVtZW50KCkge1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWydhZG1pbi9maWVsZCddKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlTW9kZWwoKSB7XHJcbiAgICBjb25zdCBkZWJ1ZyA9IHRoaXMuZGVidWc7XHJcbiAgICBjb25zdCBmZyA9IHRoaXMuZGVidWcuZm9ybSBhcyBGb3JtR3JvdXA7XHJcbiAgICBpZiAoIWZnLmRpcnR5KSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcIkRlYnVnIEZvcm0gaXMgbm90IGRpcnR5IGhlbmNlIHJlY29yZCBpcyBub3Qgc2F2ZS5cIik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWZnLnZhbGlkKSB7XHJcbiAgICAgIHRoaXMuY29tcG9uZW50RXJyb3JIYW5kbGVyLnNob3dGb3JtR3JvdXBFcnJvck1lc3NhZ2UodGhpcy5ncm91cCwgZmcpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgb2YoZGVidWcuek1vZGVsKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICAvLyBzd2l0Y2hNYXAoem1vZGVsID0+IHtcclxuICAgICAgICAvLyAgIGNvbnNvbGUubG9nKFwiQmVmb3JlIHVwZGF0ZSwgek1vZGVsOlwiLCB6bW9kZWwpO1xyXG4gICAgICAgIC8vICAgcmV0dXJuIHRoaXMuYmVmb3JlVXBkYXRlTW9kZWwoZ3JvdXApO1xyXG4gICAgICAgIC8vIH0pLFxyXG4gICAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgICBPYmplY3QuYXNzaWduKGRlYnVnLnpNb2RlbCwgZmcudmFsdWUpO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy53ZWJBcGlTZXJ2aWNlLmh0dHBQdXQkKFxyXG4gICAgICAgICAgICBkZWJ1Zy5yZXNvdXJjZVVSTCArIFwiL1wiICsgZGVidWcuek1vZGVsLklkLFxyXG4gICAgICAgICAgICBkZWJ1Zy56TW9kZWxcclxuICAgICAgICAgIClcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgbWFwKHJlcyA9PiB0aGlzLmhhbmRsZVN1Y2Nlc3MocmVzLCBcIlJlY29yZCBpcyB1cGRhdGVkIHN1Y2Nlc3NmdWxseS5cIikpLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHN3aXRjaE1hcCgoem1vZGVsOiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiQWZ0ZXIgRGVidWcgRm9ybSB1cGRhdGVkLCB6TW9kZWw6XCIsIHptb2RlbCk7XHJcbiAgICAgICAgICBpZiAoem1vZGVsICYmIHptb2RlbC5EYXRhKSB7XHJcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oZGVidWcuek1vZGVsLCB6bW9kZWwuRGF0YSk7XHJcbiAgICAgICAgICAgIGZnLnBhdGNoVmFsdWUoem1vZGVsLkRhdGEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZmcubWFya0FzUHJpc3RpbmUoKTtcclxuICAgICAgICAgIC8vICAgdGhpcy5hZnRlclVwZGF0ZU1vZGVsKGdyb3VwKTtcclxuICAgICAgICAgIHJldHVybiBvZihbXSk7XHJcbiAgICAgICAgfSkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG5cclxuICAvLyAqKioqKioqKioqKioqKioqKioqKiBXb3JrZmxvdyBCdXR0b24gKioqKioqKioqKioqKioqKioqKipcclxuICBwdWJsaWMgbG9hZFdvcmtmbG93RGF0YSgpIHtcclxuICAgIGNvbnN0IHpncmlkX1dvcmtmbG93QnV0dG9uR3JpZCA9IFpDb21wb25lbnRIZWxwZXIuZ2V0Q29tcG9uZW50KHRoaXMuZGVidWcsICd6Z3JpZF9Xb3JrZmxvd0J1dHRvbkdyaWQnKTtcclxuICAgIGlmICh6Z3JpZF9Xb3JrZmxvd0J1dHRvbkdyaWQpIHtcclxuICAgICAgemdyaWRfV29ya2Zsb3dCdXR0b25HcmlkLnNldERhdGEodGhpcy5kZWJ1Zy56RGF0YS5jb2xsZWN0ZWRXb3JrZmxvd0J1dHRvbnMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBncmlkV29ya2Zsb3dCdXR0b25Pbkl0ZW1DbGljayhldmVudDogYW55KSB7XHJcbiAgICBjb25zdCBkYXRhSXRlbSA9IE9iamVjdC5hc3NpZ24oe30sIGV2ZW50LmRhdGFJdGVtKTtcclxuICAgIGNvbnN0IGZpZWxkID0gZGF0YUl0ZW0ucmVmRmllbGQ7XHJcbiAgICBjb25zdCBhdHRyaWJ1dGUgPSBkYXRhSXRlbS5yZWZBdHRyaWJ1dGU7XHJcblxyXG4gICAgLy8gR2V0IE1hcHBlZCBJbmZvXHJcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpXHJcbiAgICAgIC5zZXQoXCJCdXR0b25JZFwiLCBmaWVsZC5JZCk7XHJcbiAgICB0aGlzLndlYkFwaVNlcnZpY2UuaHR0cFBvc3QkKHRoaXMucmVzb3VyY2VBcGlTZXJ2aWNlLmdldFVSTChcImUxd2ZzX3dmY19nZXRtYXBwZWRCdXR0b25JbmZvVVJMXCIpLCBwYXJhbXMpLnBpcGUoXHJcbiAgICAgIG1hcChhc3luYyByZXMgPT4ge1xyXG4gICAgICAgIGxldCByb2xlSW5mbyA9IFtdO1xyXG4gICAgICAgIGxldCBzdGF0dXNJbmZvID0gW107XHJcbiAgICAgICAgbGV0IHBhcmVudFN0YXR1c0luZm8gPSBbXTtcclxuXHJcbiAgICAgICAgaWYgKHJlcy5NYXBwZWRSb2xlTGlzdCkge1xyXG4gICAgICAgICAgcm9sZUluZm8gPSByZXMuTWFwcGVkUm9sZUxpc3Q7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocmVzLk1hcHBlZFN0YXR1c0xpc3QpIHtcclxuICAgICAgICAgIHJlcy5NYXBwZWRTdGF0dXNMaXN0LmZvckVhY2goKF9zdGF0dXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBzdGF0dXNJbmZvLnB1c2goX3N0YXR1cy5OYW1lICsgJyAoJyArIF9zdGF0dXMuQ29kZSArICcpJyk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChyZXMuTWFwcGVkUGFyZW50U3RhdHVzTGlzdCkge1xyXG4gICAgICAgICAgcmVzLk1hcHBlZFBhcmVudFN0YXR1c0xpc3QuZm9yRWFjaCgoX3BhcmVudFN0YXR1czogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHBhcmVudFN0YXR1c0luZm8ucHVzaChfcGFyZW50U3RhdHVzLk5hbWUgKyAnICgnICsgX3BhcmVudFN0YXR1cy5Db2RlICsgJyknKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgX21hcHBlZEluZm8gPSB7XHJcbiAgICAgICAgICAnbWFwcGVkUm9sZUluZm8nOiByb2xlSW5mby5sZW5ndGggPiAwID8gcm9sZUluZm8gOiAnTi5BLicsXHJcbiAgICAgICAgICAnbWFwcGVkU3RhdHVzSW5mbyc6IHN0YXR1c0luZm8ubGVuZ3RoID4gMCA/IHN0YXR1c0luZm8gOiAnTi5BLicsXHJcbiAgICAgICAgICAnbWFwcGVkUGFyZW50U3RhdHVzSW5mbyc6IHBhcmVudFN0YXR1c0luZm8ubGVuZ3RoID4gMCA/IHBhcmVudFN0YXR1c0luZm8gOiAnTi5BLidcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAvLyByZXRyZWl2ZSBhbGwgaW1wb3J0YW50IGluZm9cclxuICAgICAgICBjb25zdCBfYnV0dG9uSW5mbyA9IHtcclxuICAgICAgICAgICdXb3JrZmxvd0lkJzogZmllbGQuV29ya2Zsb3dJZCxcclxuICAgICAgICAgICdCdXR0b25JZCc6IGZpZWxkLklkLFxyXG4gICAgICAgICAgJ0J1dHRvbk5hbWUnOiBmaWVsZC5OYW1lLFxyXG4gICAgICAgICAgJ0J1dHRvbkNvZGUnOiBmaWVsZC5Db2RlLFxyXG4gICAgICAgICAgJ0J1dHRvblR5cGVJZCc6IGZpZWxkLlR5cGUuSWQsXHJcbiAgICAgICAgICAnQnV0dG9uVHlwZU5hbWUnOiBmaWVsZC5UeXBlLk5hbWUsXHJcbiAgICAgICAgICAnQnV0dG9uVHlwZUNvZGUnOiBmaWVsZC5UeXBlLkNvZGUsXHJcbiAgICAgICAgICAnQnV0dG9uVmlzaWJsZSc6IGF0dHJpYnV0ZS5WaXNpYmxlLFxyXG4gICAgICAgICAgJ0J1dHRvbkNsaWNrRXZlbnQnOiBhdHRyaWJ1dGUuQ2xpY2tFdmVudCxcclxuICAgICAgICAgICdCdXR0b25VUkwnOiBhdHRyaWJ1dGUuVVJMLFxyXG4gICAgICAgICAgJ0J1dHRvbkljb24nOiBhdHRyaWJ1dGUuSWNvblxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGxldCBfZ290b1N0YXR1c0luZm8gPSB7XHJcbiAgICAgICAgICAnR290b1N0YXR1c0lkJzogJ04uQS4nLFxyXG4gICAgICAgICAgJ0dvdG9TdGF0dXNOYW1lJzogJ04uQS4nLFxyXG4gICAgICAgICAgJ0dvdG9TdGF0dXNDb2RlJzogJ04uQS4nXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgaWYgKGZpZWxkLlN0YXR1cykge1xyXG4gICAgICAgICAgY29uc3QgX2dvdG9TdGF0dXMgPSBmaWVsZC5TdGF0dXNcclxuICAgICAgICAgIF9nb3RvU3RhdHVzSW5mbyA9IHtcclxuICAgICAgICAgICAgJ0dvdG9TdGF0dXNJZCc6IF9nb3RvU3RhdHVzLklkLFxyXG4gICAgICAgICAgICAnR290b1N0YXR1c05hbWUnOiBfZ290b1N0YXR1cy5OYW1lLFxyXG4gICAgICAgICAgICAnR290b1N0YXR1c0NvZGUnOiBfZ290b1N0YXR1cy5Db2RlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBwcm9wZXJ0aWVzTW9kZWwgPSBPYmplY3QuYXNzaWduKF9idXR0b25JbmZvLCBfZ290b1N0YXR1c0luZm8sIF9tYXBwZWRJbmZvKTtcclxuXHJcbiAgICAgICAgY29uc3QgbW9kYWxGaWVsZHMgPSB0aGlzLmZpZWxkU2VydmljZS5nZXRGb3JtRmllbGRDb2RlKFxyXG4gICAgICAgICAgXCJtdldvcmtmbG93QnV0dG9uRGVidWdGb3JtXCIsXHJcbiAgICAgICAgICBcIkZvcm1GaWVsZFwiLFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgIG51bGxcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IG1vZGFsID0gYXdhaXQgdGhpcy5tb2RhbFNlcnZpY2Uuc2hvdyhtb2RhbEZpZWxkcywgdGhpcy5kZWJ1Zy5fZ3JvdXAsICdXb3JrZmxvdyBCdXR0b24gSW5mbycsIG51bGwsIG51bGwsIHByb3BlcnRpZXNNb2RlbCk7XHJcbiAgICAgICAgbW9kYWwuc3Vic2NyaWJlKChtb2RhbERhdGE6IE1vZGFsUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIGlmIChtb2RhbERhdGEucmVzcG9uc2VUeXBlID09PSBcImNhbmNlbFwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSlcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgaGFuZGxlU3VjY2VzcyhyZXM6IFJlc3BvbnNlIHwgYW55LCBzdWNjZXNzTXNnOiBzdHJpbmcpOiBSZXNwb25zZSB7XHJcbiAgICBpZiAocmVzID09IG51bGwpIHtcclxuICAgICAgdGhpcy50b2FzdFNlcnZpY2Uuc2hvdyhzdWNjZXNzTXNnKTtcclxuICAgIH0gZWxzZSBpZiAocmVzLkRhdGEgIT09IHVuZGVmaW5lZCAmJiByZXMuUHJvY2Vzc2luZ1N0YXR1cyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGlmIChyZXMuUHJvY2Vzc2luZ1N0YXR1cyA9PT0gdHJ1ZSkge1xyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlcy5EYXRhKSkge1xyXG4gICAgICAgICAgcmVzLkRhdGEubWFwKHMgPT4gdGhpcy53ZWJBcGlTZXJ2aWNlLnNob3dIdHRwUmVzcG9uc2VNZXNzYWdlKE1FU1NBR0VUWVBFLlN1Y2Nlc3MsXHJcbiAgICAgICAgICAgIGAke3N1Y2Nlc3NNc2d9IDogJHtzLkNvc3RDb2RlfWAsIG51bGwpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy53ZWJBcGlTZXJ2aWNlLnNob3dIdHRwUmVzcG9uc2VNZXNzYWdlKE1FU1NBR0VUWVBFLlN1Y2Nlc3MsIHN1Y2Nlc3NNc2csIG51bGwpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy50b2FzdFNlcnZpY2Uuc2hvdyhzdWNjZXNzTXNnKTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXM7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVFcnJvcihyZXM6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy53ZWJBcGlTZXJ2aWNlLmhhbmRsZUVycm9yKHJlcyk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
636
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemNvbXBvbmVudC5kZWJ1Zy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvc2VydmljZXMvemNvbXBvbmVudC5kZWJ1Zy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUtsRCw4QkFBOEI7QUFDOUIsT0FBTyxFQUFFLGVBQWUsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXJELDJDQUEyQztBQUMzQyxPQUFPLEVBQ2lELFdBQVcsRUFDaEIsZ0JBQWdCLEVBQ3pELE1BQU0sRUFDZixNQUFNLGlCQUFpQixDQUFDOzs7Ozs7QUFPekIsTUFBTSxPQUFPLHNCQUFzQjtJQUNqQyxZQUNVLE1BQWMsRUFDZCxZQUEwQixFQUMxQixXQUF3QixFQUN4QixZQUEwQixFQUMxQixrQkFBc0MsRUFDdEMscUJBQW1ELEVBQ25ELFlBQTBCLEVBQzFCLFlBQTBCLEVBQzFCLGFBQTRCO1FBUjVCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBOEI7UUFDbkQsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsa0JBQWEsR0FBYixhQUFhLENBQWU7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VUFBVSxDQUFDLENBQUM7U0FDcEM7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRCxXQUFXLENBQUMsR0FBUTtRQUNsQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzdDLENBQUM7O29IQW51QlUsc0JBQXNCO3dIQUF0QixzQkFBc0IsY0FGckIsTUFBTTs0RkFFUCxzQkFBc0I7a0JBSGxDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKiogQW5ndWxhciAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBIdHRwUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5cclxuLyoqKioqKioqKiogSW9uaWMgKioqKioqKioqKi9cclxuaW1wb3J0IHsgSW9uaWNTZWxlY3RhYmxlQ29tcG9uZW50IH0gZnJvbSAnaW9uaWMtc2VsZWN0YWJsZSc7XHJcblxyXG4vKioqKioqKioqKiBQbHVnaW4gKioqKioqKioqKi9cclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBvZiwgZm9ya0pvaW4sIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgdGFwLCBzd2l0Y2hNYXAsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbi8qKioqKioqKioqIENvbXBvbmVudCAmIFNlcnZpY2UgKioqKioqKioqKi9cclxuaW1wb3J0IHtcclxuICBBbGVydEJ1dHRvbiwgQWxlcnRTZXJ2aWNlLCBBdXRoU2VydmljZSwgRmllbGRTZXJ2aWNlLCBNRVNTQUdFVFlQRSxcclxuICBSZXNvdXJjZUFwaVNlcnZpY2UsIFRvYXN0U2VydmljZSwgV2ViQXBpU2VydmljZSwgWkNvbXBvbmVudEhlbHBlciwgWkNvbXBvbmVudE91dHB1dEV2ZW50LFxyXG4gIFpGaWVsZCwgWkdyb3VwLCBaVHJlZVRlbXBsYXRlUGFyYW1zXHJcbn0gZnJvbSBcIm1taGdsb2JhbC16Y29yZVwiO1xyXG5pbXBvcnQgeyBNb2RhbFJlc3BvbnNlLCBNb2RhbFNlcnZpY2UgfSBmcm9tICdtbWhnbG9iYWwtem1vZGFsJztcclxuaW1wb3J0IHsgQ29tcG9uZW50RXJyb3JIYW5kbGVyU2VydmljZSB9IGZyb20gXCIuL2NvbXBvbmVudC1lcnJvci1oYW5kbGVyLnNlcnZpY2VcIjtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFpDb21wb25lbnREZWJ1Z1NlcnZpY2Uge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcclxuICAgIHByaXZhdGUgZmllbGRTZXJ2aWNlOiBGaWVsZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlc291cmNlQXBpU2VydmljZTogUmVzb3VyY2VBcGlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb21wb25lbnRFcnJvckhhbmRsZXI6IENvbXBvbmVudEVycm9ySGFuZGxlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRvYXN0U2VydmljZTogVG9hc3RTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZSxcclxuICAgIHByaXZhdGUgd2ViQXBpU2VydmljZTogV2ViQXBpU2VydmljZVxyXG4gICkgeyB9XHJcblxyXG4gIHByaXZhdGUgc2NvcGU6IGFueTtcclxuXHJcbiAgZ2V0IGRlYnVnKCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5zY29wZS5ncm91cC5fZGVidWc7XHJcbiAgfVxyXG5cclxuICBnZXQgZ3JvdXAoKTogWkdyb3VwIHtcclxuICAgIHJldHVybiB0aGlzLnNjb3BlLmdyb3VwO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uSW5pdERlYnVnZ2VyKGdyb3VwOiBaR3JvdXApIHtcclxuICAgIGdyb3VwLl9kZWJ1ZyA9IG5ldyBaR3JvdXAodHJ1ZSk7XHJcbiAgICBncm91cC5faXNEZWJ1Z2dpbmcgPSB0cnVlO1xyXG4gICAgZ3JvdXAuX2RlYnVnLnpEYXRhID0ge1xyXG4gICAgICBjb2xsZWN0ZWRBY3Rpdml0aWVzOiBbXSxcclxuICAgICAgYWN0aXZpdHlDb3VudDogMCxcclxuICAgICAgY29sbGVjdGVkV29ya2Zsb3dCdXR0b25zOiBbXSxcclxuICAgICAgd29ya2Zsb3dCdXR0b25Db3VudDogMFxyXG4gICAgfTtcclxuICAgIGdyb3VwLl9kZWJ1Zy56Q29tcG9uZW50cyA9IHt9O1xyXG4gICAgZ3JvdXAuaXNMaXN0Rm9ybSA9IGZhbHNlO1xyXG4gIH1cclxuXHJcblxyXG4gIHB1YmxpYyBvblN0YXJ0RGVidWdnZXIoZmllbGRFbGVtZW50czogQXJyYXk8WkZpZWxkPiwgbWU6IGFueSkge1xyXG4gICAgdGhpcy5zY29wZSA9IG1lO1xyXG4gICAgaWYgKCFtZS5ncm91cC5fZGVidWcpIHtcclxuICAgICAgbWUuZ3JvdXAuX2RlYnVnID0ge307XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZDogWkdyb3VwID0gbWUuZ3JvdXAuX2RlYnVnO1xyXG4gICAgbWUuZm9ybSA9IG1lLnRvRm9ybUdyb3VwKGZpZWxkRWxlbWVudHMpO1xyXG4gICAgZC5mb3JtID0gbWUuZm9ybTtcclxuICAgIGlmIChtZS5zdWJzY3JpcHRpb24pIHtcclxuICAgICAgbWUuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgT2JqZWN0LmFzc2lnbihkLCB7XHJcbiAgICAgIC8vIHpEYXRhOiB7IGNvbGxlY3RlZEFjdGl2aXRpZXM6IFtdLCBhY3Rpdml0eUNvdW50OiAwIH0sXHJcbiAgICAgIHpNb2RlbDoge30sXHJcbiAgICAgIHN1YmplY3Q6IG5ldyBCZWhhdmlvclN1YmplY3Q8WkNvbXBvbmVudE91dHB1dEV2ZW50PihudWxsKSxcclxuICAgICAgaXNFZGl0OiB0cnVlLFxyXG4gICAgICBpc05ldzogZmFsc2UsXHJcbiAgICAgIF9kZWJ1ZzogbWUuZ3JvdXAuX2RlYnVnLFxyXG4gICAgICBfZ3JvdXA6IG1lLmdyb3VwLFxyXG4gICAgICByZXNvdXJjZVVSTDogdGhpcy5yZXNvdXJjZUFwaVNlcnZpY2UuZ2V0VVJMKCdmaWVsZCcpLFxyXG4gICAgICB0cmVlSXRlbVRlbXBsYXRlOiB0aGlzLnRyZWVJdGVtVGVtcGxhdGUsXHJcbiAgICAgIG9uSXRlbUNsaWNrOiB0aGlzLm9uSXRlbUNsaWNrLFxyXG4gICAgICBvblRyZWVOb2RlQ2hhbmdlOiB0aGlzLm9uVHJlZU5vZGVDaGFuZ2UsXHJcbiAgICAgIG9uQWRkTm9kZTogdGhpcy5vbkFkZE5vZGUsXHJcbiAgICAgIG9uUmVtb3ZlTm9kZTogdGhpcy5vblJlbW92ZU5vZGUsXHJcbiAgICAgIHRyZWVOb2Rlc0V4cGFuZEFsbDogdGhpcy50cmVlTm9kZXNFeHBhbmRBbGwsXHJcbiAgICAgIHRyZWVOb2Rlc0NvbGxhcHNlQWxsOiB0aGlzLnRyZWVOb2Rlc0NvbGxhcHNlQWxsLFxyXG4gICAgICByZWZyZXNoVHJlZU1vZGVsOiB0aGlzLnJlZnJlc2hUcmVlTW9kZWwsXHJcbiAgICAgIGFkZE5vZGU6IHRoaXMuYWRkTm9kZSxcclxuICAgICAgcmVmcmVzaEFjdGl2aXR5TG9nRGF0YTogdGhpcy5Mb2FkR3JpZERhdGEuYmluZCh0aGlzKSxcclxuICAgICAgR29Ub0ZpZWxkRWxlbWVudDogdGhpcy5nb3RvRmllbGRFbGVtZW50LmJpbmQodGhpcyksXHJcbiAgICAgIExpc3RXYXRjaE5hbWU6IHRoaXMubGlzdFdhdGNoTmFtZS5iaW5kKHRoaXMpLFxyXG4gICAgICBvbkNoYW5nZVdhdGNoTmFtZTogdGhpcy5vbkNoYW5nZVdhdGNoTmFtZS5iaW5kKHRoaXMpLFxyXG4gICAgICBnZXRXYXRjaE5hbWU6IHRoaXMuZ2V0V2F0Y2hOYW1lLmJpbmQodGhpcyksXHJcbiAgICAgIGZpZWxkRWxlbWVudG9uRWRpdG9yQ29kZUNoYW5nZTogdGhpcy5maWVsZEVsZW1lbnRvbkVkaXRvckNvZGVDaGFuZ2UuYmluZCh0aGlzKSxcclxuICAgICAgZ3JpZEFjdGl2aXR5TG9nQ29sdW1uRmllbGRzOiB0aGlzLmZpZWxkU2VydmljZS5nZXRGb3JtRmllbGRDb2RlKFxyXG4gICAgICAgICdkZWJ1Z0FjdGl2aXR5TG9nJyxcclxuICAgICAgICBcIkZvcm1GaWVsZFwiLFxyXG4gICAgICAgIHRoaXMuZ3JvdXAsXHJcbiAgICAgICAgXCJkZWJ1Z0FjdGl2aXR5TG9nRmllbGRcIlxyXG4gICAgICApLFxyXG4gICAgICBncmlkQWN0aXZpdHlMb2dPbkl0ZW1DbGljazogdGhpcy5ncmlkQWN0aXZpdHlMb2dPbkl0ZW1DbGljay5iaW5kKHRoaXMpLFxyXG4gICAgICB1cGRhdGVNb2RlbDogdGhpcy51cGRhdGVNb2RlbC5iaW5kKHRoaXMpLFxyXG4gICAgICByZWZyZXNoV29ya2Zsb3dCdXR0b25EYXRhOiB0aGlzLmxvYWRXb3JrZmxvd0RhdGEuYmluZCh0aGlzKSxcclxuICAgICAgZ3JpZFdvcmtmbG93QnV0dG9uQ29sdW1uRmllbGRzOiB0aGlzLmZpZWxkU2VydmljZS5nZXRGb3JtRmllbGRDb2RlKFxyXG4gICAgICAgICdkZWJ1Z1dvcmtmbG93QnV0dG9uJyxcclxuICAgICAgICAnRm9ybUZpZWxkJyxcclxuICAgICAgICB0aGlzLmdyb3VwLFxyXG4gICAgICAgIFwiZGVidWdXb3JrZmxvd0J1dHRvbkZpZWxkXCJcclxuICAgICAgKSxcclxuICAgICAgZ3JpZFdvcmtmbG93QnV0dG9uT25JdGVtQ2xpY2s6IHRoaXMuZ3JpZFdvcmtmbG93QnV0dG9uT25JdGVtQ2xpY2suYmluZCh0aGlzKVxyXG4gICAgfSk7XHJcbiAgICBpZiAoIWQuekRhdGEpIHtcclxuICAgICAgZC56RGF0YSA9IHsgY29sbGVjdGVkQWN0aXZpdGllczogW10sIGFjdGl2aXR5Q291bnQ6IDAgfTtcclxuICAgIH1cclxuXHJcbiAgICBtZS5zdWJzY3JpcHRpb24gPSBkLnN1YmplY3Quc3Vic2NyaWJlKChldmVudDogWkNvbXBvbmVudE91dHB1dEV2ZW50KSA9PlxyXG4gICAgICB0aGlzLnN1YmplY3RFdmVudChldmVudCwgZCwgdGhpcylcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5wYXRjaEZpZWxkc1Byb3BlcnR5KGZpZWxkRWxlbWVudHMpO1xyXG4gICAgcmV0dXJuIHRoaXMubG9hZERlYnVnWk1vZGVsKG1lKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcGF0Y2hGaWVsZHNQcm9wZXJ0eShmaWVsZEVsZW1lbnRzOiBBcnJheTxaRmllbGQ+KSB7XHJcbiAgICBmaWVsZEVsZW1lbnRzLmZvckVhY2goZmllbGRFbGVtZW50ID0+IHtcclxuICAgICAgdGhpcy5maWVsZFNlcnZpY2UucGF0Y2hGaWVsZFByb3BlcnR5KGZpZWxkRWxlbWVudCk7XHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGZpZWxkRWxlbWVudC5WYWx1ZSkpIHtcclxuICAgICAgICB0aGlzLnBhdGNoRmllbGRzUHJvcGVydHkoZmllbGRFbGVtZW50LlZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvYWREZWJ1Z1pNb2RlbChtZTogYW55KSB7XHJcbiAgICBjb25zdCBkOiBaR3JvdXAgPSBtZS5ncm91cC5fZGVidWc7XHJcblxyXG4gICAgY29uc3QgZG93bmxvYWRMaXN0ID0gW107XHJcbiAgICBkb3dubG9hZExpc3QucHVzaCh0aGlzLmdldFByb2plY3RJZCgpKTtcclxuXHJcbiAgICBjb25zdCBmb3JtVHlwZSA9IG1lLmdyb3VwLmlzTGlzdEZvcm0gPyAnTGlzdEZpZWxkJyA6ICdGb3JtRmllbGQnO1xyXG4gICAgY29uc3QgZmllbGROYW1lID0gbWUuZ3JvdXAuZmllbGROYW1lO1xyXG4gICAgY29uc3QgZmllbGR6TW9kZWwgPSB0aGlzLmdldEZpZWxkek1vZGVsKGZvcm1UeXBlLCBmaWVsZE5hbWUpO1xyXG4gICAgZG93bmxvYWRMaXN0LnB1c2goZmllbGR6TW9kZWwpO1xyXG5cclxuICAgIHJldHVybiBmb3JrSm9pbihkb3dubG9hZExpc3QpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRQcm9qZWN0SWQoKSB7XHJcbiAgICBjb25zdCBkID0gdGhpcy5kZWJ1ZztcclxuICAgIGNvbnN0IHVybCA9IHRoaXMucmVzb3VyY2VBcGlTZXJ2aWNlLmdldFVSTCgncHJvamVjdHNVUkwnKTtcclxuICAgIHJldHVybiB0aGlzLndlYkFwaVNlcnZpY2UuZ2V0QXBpKHVybCwge30sIGQuekRhdGEsICdQcm9qZWN0T3B0aW9ucycsIG51bGwsIGQsIGZhbHNlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RmllbGR6TW9kZWwodHlwZTogc3RyaW5nLCBhY3Rpdml0eU5hbWU6IHN0cmluZykge1xyXG4gICAgaWYgKHR5cGUgPT09ICdGb3JtRmllbGQnKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmdldEZvcm1GaWVsZHpNb2RlbChhY3Rpdml0eU5hbWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0TGlzdEZpZWxkek1vZGVsKGFjdGl2aXR5TmFtZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEZvcm1GaWVsZHpNb2RlbChhY3Rpdml0eU5hbWU6IHN0cmluZykge1xyXG4gICAgY29uc3QgZDogWkdyb3VwID0gdGhpcy5kZWJ1ZztcclxuICAgIGNvbnN0IHVybCA9IHRoaXMucmVzb3VyY2VBcGlTZXJ2aWNlLmdldFVSTCgnZmllbGQnKTtcclxuICAgIHJldHVybiB0aGlzLndlYkFwaVNlcnZpY2UuaHR0cEdldCQodXJsLCB7IG5hbWU6IGFjdGl2aXR5TmFtZSwgdHlwZTogJ0Zvcm1GaWVsZCcgfSkucGlwZShcclxuICAgICAgdGFwKChyZXNwRGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ3Jlc3BEYXRhOiAnLCByZXNwRGF0YSk7XHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbihkLnpNb2RlbCwgcmVzcERhdGEpO1xyXG4gICAgICAgIGQuZm9ybS5wYXRjaFZhbHVlKGQuek1vZGVsKTtcclxuICAgICAgICBkLmZvcm0ubWFya0FzUHJpc3RpbmUoKTtcclxuICAgICAgICBjb25zdCBmaWVsZHMgPSBKU09OLnBhcnNlKGQuek1vZGVsLkNvZGUpO1xyXG4gICAgICAgIE9iamVjdC5hc3NpZ24oZCwge1xyXG4gICAgICAgICAgdHJlZU1vZGVsOiBaQ29tcG9uZW50SGVscGVyLmNvbnZlcnRUcmVlTW9kZWwoZmllbGRzKVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0TGlzdEZpZWxkek1vZGVsKGFjdGl2aXR5TmFtZTogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBkID0gdGhpcy5kZWJ1ZztcclxuICAgIGNvbnN0IHVybCA9IHRoaXMucmVzb3VyY2VBcGlTZXJ2aWNlLmdldFVSTCgnZmllbGRzTWFwcGluZycpO1xyXG4gICAgY29uc3QgdXJsMiA9IHRoaXMucmVzb3VyY2VBcGlTZXJ2aWNlLmdldFVSTCgnZmllbGQnKTtcclxuICAgIHJldHVybiB0aGlzLndlYkFwaVNlcnZpY2UuaHR0cEdldCQodXJsLCB7IG5hbWU6IGFjdGl2aXR5TmFtZSB9KS5waXBlKFxyXG4gICAgICBzd2l0Y2hNYXAoKGZpZWxkTWFwcGluZzogYW55KSA9PiB7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ2ZpZWxkTWFwcGluZzogJywgZmllbGRNYXBwaW5nKTtcclxuICAgICAgICByZXR1cm4gdGhpcy53ZWJBcGlTZXJ2aWNlLmh0dHBHZXQkKHVybDIsIHsgaWQ6IGZpZWxkTWFwcGluZy5GaWVsZEVsZW1lbnRNYXN0ZXJJZCB9KTtcclxuICAgICAgfSksXHJcbiAgICAgIHRhcCgocmVzcERhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgIE9iamVjdC5hc3NpZ24oZC56TW9kZWwsIHJlc3BEYXRhKTtcclxuICAgICAgICBkLmZvcm0ucGF0Y2hWYWx1ZShkLnpNb2RlbCk7XHJcbiAgICAgICAgZC5mb3JtLm1hcmtBc1ByaXN0aW5lKCk7XHJcbiAgICAgICAgY29uc3QgZmllbGRzID0gSlNPTi5wYXJzZShkLnpNb2RlbC5Db2RlKTtcclxuICAgICAgICBPYmplY3QuYXNzaWduKGQsIHtcclxuICAgICAgICAgIHRyZWVNb2RlbDogWkNvbXBvbmVudEhlbHBlci5jb252ZXJ0VHJlZU1vZGVsKGZpZWxkcylcclxuICAgICAgICB9KTtcclxuICAgICAgfSlcclxuICAgIClcclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIHN1YmplY3RFdmVudChldmVudDogWkNvbXBvbmVudE91dHB1dEV2ZW50LCBncm91cDogWkdyb3VwLCBtZTogYW55KSB7XHJcbiAgICBpZiAoIWV2ZW50IHx8ICFldmVudC50YXJnZXQgfHwgZXZlbnQudGFyZ2V0LnN0YXJ0c1dpdGgoXCJtb2RhbEdyb3VwLlwiKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvLyBjb25zb2xlLmxvZyhcIioqIERlYnVnIC0gU3ViamVjdEV2ZW50XCIsIGV2ZW50KTtcclxuICAgIGxldCBjYWxsRnVuYztcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBjYWxsRnVuYyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbChcclxuICAgICAgICBtZSxcclxuICAgICAgICBldmVudC50YXJnZXRcclxuICAgICAgKTtcclxuICAgICAgLy8gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cFZhbHVlKGV2ZW50LlRhcmdldCwgZ3JvdXApO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgIFwiRXJyb3Igd2hlbiBnZXRHcm91cFZhbHVlOiBcIixcclxuICAgICAgICBldmVudC50YXJnZXQsXHJcbiAgICAgICAgXCIgPiBFcnJvcjogXCIsXHJcbiAgICAgICAgZXJyb3JcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBjYWxsRnVuYyhldmVudCk7XHJcbiAgICBpZiAodHlwZW9mIGNhbGxGdW5jID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgY29uc3QgbmV3RnVuYyA9IGNhbGxGdW5jLmJpbmQobWUpO1xyXG4gICAgICBuZXdGdW5jKGV2ZW50LCBncm91cCwgbWUpO1xyXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgY2FsbEZ1bmMgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgaWYgKGV2ZW50LnR5cGUuZW5kc1dpdGgoXCJvbk5hdmlnYXRlVG9cIikpIHtcclxuICAgICAgICBjb25zdCBuVXJsID0gZXZlbnQudGFyZ2V0LnJlcGxhY2UoXCIvOmlkXCIsIFwiL1wiICsgZXZlbnQuZGF0YSk7XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW25VcmxdKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChldmVudC50eXBlID09PSBcInpncmlkLWNlbGxDbGlja1wiKSB7XHJcbiAgICAgICAgLy8gKGNhbGxGdW5jLnN0YXJ0c1dpdGgoJ2VkaXQnKSkgeyAgemdyaWQtY2VsbENsaWNrXHJcbiAgICAgICAgY29uc3QgY05hbWUgPSBjYWxsRnVuYy5zbGljZSg0KTtcclxuICAgICAgICAvLyBkZWJ1Z2dlcjtcclxuICAgICAgICAvLyBjb25zdCBtb2RhbEdyb3VwUGFyYW06IE1vZGFsUGFnZVBhcmFtcyA9IHt9O1xyXG4gICAgICAgIC8vIG1vZGFsR3JvdXBQYXJhbS5jb250cm9sbGVyTmFtZSA9IGNOYW1lO1xyXG4gICAgICAgIC8vIG1vZGFsR3JvdXBQYXJhbS5yZWZlcklkID0gZXZlbnQuZGF0YS5JZDtcclxuICAgICAgICAvLyBtb2RhbEdyb3VwUGFyYW0uY29sRmllbGRzJCA9IGV2ZW50LmNvbHVtbkZpZWxkcyQ7XHJcbiAgICAgICAgLy8gbW9kYWxHcm91cFBhcmFtLnBhcmVudEdyb3VwID0gbWUuZ3JvdXA7XHJcblxyXG4gICAgICAgIC8vIHRoaXMub3Blbk1vZGFsRm9ybShtb2RhbEdyb3VwUGFyYW0pO1xyXG4gICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLnNob3coZXZlbnQuY29sdW1uRmllbGRzJCB8fCBjTmFtZSwgZ3JvdXAsICcnLCBudWxsLCBudWxsLCB7fSwgZXZlbnQuZGF0YS5JZCk7IC8vIFRPRE9cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgY2FsbEZ1bmMgPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiemdyaWQtY2VsbENsaWNrXCIpIHtcclxuICAgICAgICBpZiAoY2FsbEZ1bmMubmF2aWdhdGVVcmwpIHtcclxuICAgICAgICAgIGNvbnN0IHVybCA9IGNhbGxGdW5jLm5hdmlnYXRlVXJsLnJlcGxhY2UoXCI6aWRcIiwgZXZlbnQuZGF0YS5JZCk7XHJcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdXJsXSk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBjb25zdCBtb2RhbEdyb3VwUGFyYW06IE1vZGFsUGFnZVBhcmFtcyA9IHt9O1xyXG4gICAgICAgIC8vIG1vZGFsR3JvdXBQYXJhbS5jb250cm9sbGVyTmFtZSA9IGNhbGxGdW5jLmN0cmxOYW1lO1xyXG4gICAgICAgIC8vIG1vZGFsR3JvdXBQYXJhbS5yZWZlcklkID0gZXZlbnQuZGF0YS5JZDtcclxuICAgICAgICAvLyBtb2RhbEdyb3VwUGFyYW0uY29sRmllbGRzJCA9IGV2ZW50LmNvbHVtbkZpZWxkcyQ7XHJcbiAgICAgICAgLy8gbW9kYWxHcm91cFBhcmFtLnBhcmVudEdyb3VwID0gbWUuZ3JvdXA7XHJcbiAgICAgICAgLy8gbW9kYWxHcm91cFBhcmFtLmZvcm1IZWFkZXIgPSBjYWxsRnVuYy5mb3JtSGVhZGVyO1xyXG5cclxuICAgICAgICBpZiAoY2FsbEZ1bmMuZm9ybUhlYWRlcikge1xyXG4gICAgICAgICAgLy8gdGhpcy5vcGVuTW9kYWxGb3JtKG1vZGFsR3JvdXBQYXJhbSk7XHJcblxyXG4gICAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uuc2hvdyhldmVudC5jb2x1bW5GaWVsZHMkIHx8IGNhbGxGdW5jLmN0cmxOYW1lLCBncm91cCwgY2FsbEZ1bmMuZm9ybUhlYWRlciwgbnVsbCwgbnVsbCwge30sIGV2ZW50LmRhdGEuSWQpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgICBcIkludmFsaWQgY2FsbEZ1bmMgdHlwZTogXCIsXHJcbiAgICAgICAgICBjYWxsRnVuYyxcclxuICAgICAgICAgIFwiIGV2ZW50LlRhcmdldDogXCIsXHJcbiAgICAgICAgICBldmVudC50YXJnZXRcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIHRoaXMub3Blbk1vZGFsRm9ybUJ5Q29tcG9uZW50KGNhbGxGdW5jLnR5cGUsIGV2ZW50LkRhdGEuSWQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgIFwiRnVuY3Rpb24gbm90IGRlZmluZWQgaW4gZ3JvdXAgZm9yOiBcIixcclxuICAgICAgICBldmVudC50YXJnZXQsXHJcbiAgICAgICAgXCIsIEV2ZW50OiBcIixcclxuICAgICAgICBldmVudFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBncmlkQWN0aXZpdHlMb2dPbkl0ZW1DbGljayhldmVudDogYW55KSB7XHJcbiAgICAvLyBjb25zb2xlLmxvZygnZ3JpZEFjdGl2aXR5TG9nT25JdGVtQ2xpY2s6ICcsIGV2ZW50KTtcclxuICAgIGNvbnN0IHJlYyA9IGV2ZW50LmRhdGFJdGVtO1xyXG4gICAgc3dpdGNoIChyZWMudHlwZSkge1xyXG4gICAgICBjYXNlICdMaXN0RmllbGQnOlxyXG4gICAgICBjYXNlICdGb3JtRmllbGQnOlxyXG4gICAgICAgIHRoaXMuZ2V0RmllbGR6TW9kZWwocmVjLnR5cGUsIHJlYy5hY3Rpdml0eU5hbWUpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdFRhYigwKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnUmVzb3VyY2VTZXJ2ZXJBUEknOlxyXG4gICAgICAgIGNvbnN0IHdhdGNoTmFtZVZhbHVlID0gJ19kZWJ1Zy56RGF0YS5jb2xsZWN0ZWRBY3Rpdml0aWVzWycgKyAocmVjLmluZGV4IC0gMSkgKyAnXS5yZWZlcmVuY2UnO1xyXG4gICAgICAgIHRoaXMuc2V0V2F0Y2hOYW1lVmFsdWUod2F0Y2hOYW1lVmFsdWUpO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0VGFiKDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdIdHRwR2V0JCc6XHJcbiAgICAgIGNhc2UgJ0h0dHBQb3N0JCc6XHJcbiAgICAgIGNhc2UgJ0h0dHBQdXQkJzpcclxuICAgICAgY2FzZSAnSHR0cERlbGV0ZSQnOlxyXG4gICAgICAgIHRoaXMuc2V0V2F0Y2hOYW1lVmFsdWUoJ19kZWJ1Zy56RGF0YS5jb2xsZWN0ZWRBY3Rpdml0aWVzWycgKyAocmVjLmluZGV4IC0gMSkgKyAnXScpO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0VGFiKDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZWxlY3RUYWIoaW5kZXg6IG51bWJlcikge1xyXG4gICAgLy8gZGVidWdnZXI7XHJcbiAgICAvLyB0aGlzLmRlYnVnLnpDb21wb25lbnRzW1wienRhYl9kZWJ1Z2dlclRhYnNcIl0uc3RhdGUubGFzdFNlbGVjdGVkVGFiSW5kZXggPSBpbmRleDtcclxuICAgIC8vIFpDb21wb25lbnRIZWxwZXIuZ2V0Q29tcG9uZW50KHRoaXMuZGVidWcsICd6dGFiX2RlYnVnZ2VyVGFicycpLnN0YXRlLmxhc3RTZWxlY3RlZFRhYkluZGV4ID0gaW5kZXg7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLmdldENvbXBvbmVudCh0aGlzLmRlYnVnLCAnenRhYl9kZWJ1Z2dlclRhYnMnKS5zZWxlY3RUYWIoaW5kZXgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRXYXRjaE5hbWVWYWx1ZShuZXdWYWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmRlYnVnLnpNb2RlbFsnRGVidWdXYXRjaE5hbWUnXSA9IG5ld1ZhbHVlO1xyXG4gICAgWkNvbXBvbmVudEhlbHBlci5zZXRNb2RlbFZhbHVlKCdXYXRjaE5hbWUnLCBuZXdWYWx1ZSwgdGhpcy5kZWJ1ZywgdHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgTG9hZEdyaWREYXRhKCkge1xyXG4gICAgY29uc3QgYWN0aXZpdHlMb2dHcmlkID0gWkNvbXBvbmVudEhlbHBlci5nZXRDb21wb25lbnQodGhpcy5kZWJ1ZywgJ3pncmlkX0FjdGl2aXR5TG9nR3JpZCcpO1xyXG4gICAgaWYgKGFjdGl2aXR5TG9nR3JpZCkge1xyXG4gICAgICBhY3Rpdml0eUxvZ0dyaWQuc2V0RGF0YSh0aGlzLmRlYnVnLnpEYXRhLmNvbGxlY3RlZEFjdGl2aXRpZXMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsaXN0V2F0Y2hOYW1lKGNvbXBvbmVudDogSW9uaWNTZWxlY3RhYmxlQ29tcG9uZW50LCBzZWFyY2hUZXh0OiBzdHJpbmcsIHBhZ2VObzogbnVtYmVyLFxyXG4gICAgbWU6IGFueSwgZGF0YUl0ZW06IGFueSwgcmVjb3JkSWQ/OiBzdHJpbmcpIHtcclxuXHJcbiAgICBjb25zdCB3YXRjaExpc3QgPSBbXHJcbiAgICAgIHsgTmFtZTogJ2dyb3VwLnpNb2RlbCcgfSxcclxuICAgICAgeyBOYW1lOiAnZ3JvdXAuekRhdGEnIH0sXHJcbiAgICAgIHsgTmFtZTogJ2dyb3VwLmZpZWxkcycgfSxcclxuICAgICAgeyBOYW1lOiAnZ3JvdXAuZm9ybS52YWx1ZScgfSxcclxuICAgICAgeyBOYW1lOiAnZ3JvdXAuYmFja05hdmlnYXRpb25QYWdlJyB9LFxyXG4gICAgICB7IE5hbWU6ICdncm91cC5wYXJlbnRSZWZlcmVuY2VGaWVsZCcgfSxcclxuICAgICAgeyBOYW1lOiAnZ3JvdXAucGFyZW50UmVmZXJlbmNlSWQnIH0sXHJcbiAgICAgIHsgTmFtZTogJ09iamVjdC5rZXlzKGdyb3VwLnpDb21wb25lbnRzKScgfSxcclxuICAgICAgeyBOYW1lOiAnZ3JvdXAuZ3JpZE9wdGlvbnMuemdyaWQuZ3JpZC5kYXRhJyB9XHJcbiAgICAgIC8vIHsgTmFtZTogJ09iamVjdC5rZXlzKF9kZWJ1Zy56Q29tcG9uZW50cyknIH0sXHJcbiAgICAgIC8vIHsgTmFtZTogJ19kZWJ1Zy56TW9kZWwnIH0sXHJcbiAgICAgIC8vIHsgTmFtZTogJ19kZWJ1Zy56RGF0YScgfSxcclxuICAgICAgLy8geyBOYW1lOiAnX2RlYnVnLnpEYXRhLmNvbGxlY3RlZEFjdGl2aXRpZXMnIH0sXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0IGFkZGl0aW9uYWxXYXRjaExpc3QgPSB0aGlzLnNjb3BlPy5ncm91cD8uYWRkaXRpb25hbFdhdGNoTGlzdDtcclxuICAgIGlmIChhZGRpdGlvbmFsV2F0Y2hMaXN0KSB7XHJcbiAgICAgIGFkZGl0aW9uYWxXYXRjaExpc3QuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICB3YXRjaExpc3QucHVzaCh7IE5hbWU6IGl0ZW0gfSk7XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHJlc3VsdHM7XHJcbiAgICBpZiAoc2VhcmNoVGV4dCkge1xyXG4gICAgICByZXN1bHRzID0gd2F0Y2hMaXN0LmZpbHRlcigocykgPT4gcy5OYW1lLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihzZWFyY2hUZXh0LnRvTG93ZXJDYXNlKCkpICE9PSAtMSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHBhZ2VObyA9PT0gMCAmJiBzZWFyY2hUZXh0KSB7XHJcbiAgICAgIHJldHVybiBvZih7IGRhdGFTZXQ6IHJlc3VsdHMgfSk7XHJcbiAgICB9IGVsc2UgaWYgKHBhZ2VObyA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gb2YoeyBkYXRhU2V0OiB3YXRjaExpc3QgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gb2YoeyBkYXRhU2V0OiBbXSB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0V2F0Y2hOYW1lKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZGVidWcuek1vZGVsLkRlYnVnV2F0Y2hOYW1lO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvbkNoYW5nZVdhdGNoTmFtZShldmVudDogYW55LCBncm91cDogWkdyb3VwLCBtZTogYW55KSB7XHJcbiAgICAvLyBjb25zb2xlLmxvZygnb25DaGFuZ2VXYXRjaE5hbWU6ICcsIGV2ZW50LmRhdGEudmFsdWUpO1xyXG4gICAgY29uc3QgbmV3VmFsdWUgPSBldmVudC5kYXRhLnZhbHVlO1xyXG4gICAgaWYgKG5ld1ZhbHVlKSB7XHJcbiAgICAgIHRoaXMuZGVidWcuek1vZGVsWydEZWJ1Z1dhdGNoTmFtZSddID0gbmV3VmFsdWUucmVwbGFjZSgnZ3JvdXAnLCAnX2dyb3VwJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZpZWxkRWxlbWVudG9uRWRpdG9yQ29kZUNoYW5nZShlbDogWkNvbXBvbmVudE91dHB1dEV2ZW50KSB7XHJcbiAgICB0aGlzLnJlZnJlc2hUcmVlTW9kZWwoKTtcclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIHRyZWVOb2Rlc0V4cGFuZEFsbCgpIHtcclxuICAgIHRoaXMuZGVidWcuekNvbXBvbmVudHNbJ3p0cmVlX2RlYnVnWlRyZWUnXS5leHBhbmRBbGwoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdHJlZU5vZGVzQ29sbGFwc2VBbGwoKSB7XHJcbiAgICB0aGlzLmRlYnVnLnpDb21wb25lbnRzWyd6dHJlZV9kZWJ1Z1pUcmVlJ10uY29sbGFwc2VBbGwoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVmcmVzaFRyZWVNb2RlbCgpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IGQgPSBKU09OLnBhcnNlKHRoaXMuZGVidWcuek1vZGVsLkNvZGUpO1xyXG4gICAgICAvLyB0aGlzLl9hZGROb2Rlc1RvVHJlZShkKTtcclxuICAgICAgLy8gZ3JvdXBbJ3RyZWVNb2RlbCddID0gdGhpcy5jb252ZXJ0VHJlZU1vZGVsKGQpO1xyXG4gICAgICB0aGlzLmRlYnVnWyd0cmVlTW9kZWwnXSA9IFpDb21wb25lbnRIZWxwZXIuY29udmVydFRyZWVNb2RlbChkKTtcclxuICAgIH0gY2F0Y2gge1xyXG4gICAgICBkZWJ1Z2dlcjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdHJlZUl0ZW1UZW1wbGF0ZShlbDogWlRyZWVUZW1wbGF0ZVBhcmFtcykge1xyXG4gICAgY29uc3QgZ2V0RmllbGRWYWx1ZSA9IChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHR5cGVvZiBpdGVtLl9EYXRhVmFsdWUgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICByZXR1cm4gaXRlbS5fRGF0YVZhbHVlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBcIi4uLlwiO1xyXG4gICAgfTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIGVsLmRhdGFJdGVtLk5hbWUgK1xyXG4gICAgICBcIiAtIFtcIiArXHJcbiAgICAgIGVsLmRhdGFJdGVtLlR5cGUgK1xyXG4gICAgICBcIl0gPSBcIiArXHJcbiAgICAgIGdldEZpZWxkVmFsdWUoZWwuZGF0YUl0ZW0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgb25JdGVtQ2xpY2soZXZlbnQ6IFpDb21wb25lbnRPdXRwdXRFdmVudCkge1xyXG4gICAgLy8gZGVidWdnZXI7XHJcbiAgICBjb25zb2xlLmxvZyhcIm9uSXRlbUNsaWNrIGRhdGEgcmVjZWl2ZWQ6IFwiLCBldmVudCk7XHJcbiAgICBjb25zdCBtb2RhbEZpZWxkcyA9IHRoaXMuZmllbGRTZXJ2aWNlLmdldEZvcm1GaWVsZENvZGUoXHJcbiAgICAgIFwibXZFZGl0RmllbGROb2RlRm9ybVwiLFxyXG4gICAgICBcIkZvcm1GaWVsZFwiLFxyXG4gICAgICBudWxsLFxyXG4gICAgICBudWxsXHJcbiAgICApO1xyXG4gICAgY29uc3QgZGF0YUl0ZW0gPSBPYmplY3QuYXNzaWduKHt9LCBldmVudC5kYXRhKTtcclxuICAgIGRhdGFJdGVtLlZhbHVlID0gZGF0YUl0ZW0uX0RhdGFWYWx1ZTtcclxuICAgIGRlbGV0ZSBkYXRhSXRlbS5fRGF0YVZhbHVlO1xyXG4gICAgY29uc3Qgem1vZGVsID0ge1xyXG4gICAgICBub2RlTW9kZWw6IEpTT04uc3RyaW5naWZ5KGRhdGFJdGVtLCBudWxsLCAyKVxyXG4gICAgfTtcclxuICAgIGNvbnN0IG1vZGFsID0gYXdhaXQgdGhpcy5tb2RhbFNlcnZpY2Uuc2hvdyhtb2RhbEZpZWxkcywgdGhpcy5kZWJ1Zy5fZ3JvdXAsICdGaWVsZCBFbGVtZW50IEluZm8nLCBudWxsLCBudWxsLCB6bW9kZWwpO1xyXG4gICAgbW9kYWwuc3Vic2NyaWJlKChtb2RhbERhdGE6IE1vZGFsUmVzcG9uc2UpID0+IHtcclxuICAgICAgaWYgKG1vZGFsRGF0YS5yZXNwb25zZVR5cGUgPT09IFwiY2FuY2VsXCIpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgbmV3RGF0YSA9IEpTT04ucGFyc2UobW9kYWxEYXRhLmRhdGEubm9kZU1vZGVsKTtcclxuICAgICAgaWYgKG5ld0RhdGEuVmFsdWUpIHtcclxuICAgICAgICBuZXdEYXRhLl9EYXRhVmFsdWUgPSBuZXdEYXRhLlZhbHVlO1xyXG4gICAgICAgIG5ld0RhdGEuVmFsdWUgPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudXBkYXRlVHJlZU5vZGUobmV3RGF0YSwgdGhpcy5kZWJ1Z1sndHJlZU1vZGVsJ10sIGV2ZW50LmV2ZW50KTtcclxuICAgICAgY29uc3QgbmV3VHJlZU1vZGVsID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmRlYnVnWyd0cmVlTW9kZWwnXSkpO1xyXG4gICAgICBjb25zdCByZXZlcnRlZE1vZGVsID0gWkNvbXBvbmVudEhlbHBlci5yZXZlcnRUcmVlTW9kZWwobmV3VHJlZU1vZGVsKTtcclxuICAgICAgY29uc3QgbmV3Q29kZSA9IEpTT04uc3RyaW5naWZ5KHJldmVydGVkTW9kZWwsIG51bGwsIDIpO1xyXG4gICAgICBaQ29tcG9uZW50SGVscGVyLnNldE1vZGVsVmFsdWUoXCJDb2RlXCIsIG5ld0NvZGUsIHRoaXMuZGVidWcpO1xyXG4gICAgICB0aGlzLnVwZGF0ZU1vZGVsKCk7XHJcbiAgICAgIC8vIHRoaXMubWFpblNlcnZpY2UudXBkYXRlTW9kZWwobnVsbCwgdGhpcy5kZWJ1Zyk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlVHJlZU5vZGUobmV3Tm9kZTogYW55LCB0cmVlTW9kZWw6IGFueSwgaW5kZXg6IHN0cmluZykge1xyXG4gICAgY29uc3QgdHJlZUluZGV4ID0gaW5kZXguc3BsaXQoXCJfXCIpO1xyXG4gICAgaWYgKHRyZWVJbmRleC5sZW5ndGggPiAxKSB7XHJcbiAgICAgIGNvbnN0IG5ld0luZGV4ID0gdHJlZUluZGV4LnNsaWNlKDEpLmpvaW4oXCJfXCIpO1xyXG4gICAgICB0aGlzLnVwZGF0ZVRyZWVOb2RlKG5ld05vZGUsIHRyZWVNb2RlbFsrdHJlZUluZGV4WzBdXS5WYWx1ZSwgbmV3SW5kZXgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRyZWVNb2RlbFsrdHJlZUluZGV4WzBdXS5WYWx1ZSkge1xyXG4gICAgICAgIG5ld05vZGUuVmFsdWUgPSB0cmVlTW9kZWxbK3RyZWVJbmRleFswXV0uVmFsdWU7XHJcbiAgICAgIH1cclxuICAgICAgdHJlZU1vZGVsWyt0cmVlSW5kZXhbMF1dID0gbmV3Tm9kZTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuXHJcbiAgcHJpdmF0ZSBpbnNlcnRUcmVlTm9kZShuZXdOb2RlOiBhbnksIHRyZWVNb2RlbDogYW55LCBpbmRleDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCB0cmVlSW5kZXggPSBpbmRleC5zcGxpdChcIl9cIik7XHJcbiAgICBpZiAodHJlZUluZGV4Lmxlbmd0aCA+IDEpIHtcclxuICAgICAgY29uc3QgbmV3SW5kZXggPSB0cmVlSW5kZXguc2xpY2UoMSkuam9pbihcIl9cIik7XHJcbiAgICAgIHRoaXMuaW5zZXJ0VHJlZU5vZGUobmV3Tm9kZSwgdHJlZU1vZGVsWyt0cmVlSW5kZXhbMF1dLlZhbHVlLCBuZXdJbmRleCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodHJlZUluZGV4WzBdKSB7XHJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRyZWVNb2RlbFsrdHJlZUluZGV4WzBdXS5WYWx1ZSkpIHtcclxuICAgICAgICAgIHRyZWVNb2RlbFsrdHJlZUluZGV4WzBdXS5WYWx1ZSA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0cmVlTW9kZWxbK3RyZWVJbmRleFswXV0uVmFsdWUucHVzaChuZXdOb2RlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0cmVlTW9kZWwucHVzaChuZXdOb2RlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW1vdmVUcmVlTm9kZSh0cmVlTW9kZWw6IGFueSwgaW5kZXg6IHN0cmluZykge1xyXG4gICAgY29uc3QgdHJlZUluZGV4ID0gaW5kZXguc3BsaXQoXCJfXCIpO1xyXG4gICAgaWYgKHRyZWVJbmRleC5sZW5ndGggPiAxKSB7XHJcbiAgICAgIGNvbnN0IG5ld0luZGV4ID0gdHJlZUluZGV4LnNsaWNlKDEpLmpvaW4oXCJfXCIpO1xyXG4gICAgICB0aGlzLnJlbW92ZVRyZWVOb2RlKHRyZWVNb2RlbFsrdHJlZUluZGV4WzBdXS5WYWx1ZSwgbmV3SW5kZXgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdHJlZU1vZGVsLnNwbGljZSgrdHJlZUluZGV4WzBdLCAxKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25UcmVlTm9kZUNoYW5nZShlbDogWkNvbXBvbmVudE91dHB1dEV2ZW50KSB7XHJcbiAgICBjb25zb2xlLmxvZyhcIm9uVHJlZU5vZGVDaGFuZ2U6IFwiLCBlbCk7XHJcbiAgICBjb25zdCBjb2RlRGF0YSA9IEpTT04uc3RyaW5naWZ5KGVsLmRhdGEpO1xyXG4gICAgWkNvbXBvbmVudEhlbHBlci5zZXRNb2RlbFZhbHVlKFwiQ29kZVwiLCBjb2RlRGF0YSwgdGhpcy5kZWJ1Zyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFkZE5vZGUoKSB7XHJcbiAgICBjb25zdCBlbDogWkNvbXBvbmVudE91dHB1dEV2ZW50ID0ge1xyXG4gICAgICBkYXRhOiB7fSxcclxuICAgICAgcm93RGF0YToge30sXHJcbiAgICAgIGV2ZW50OiBcIlwiLFxyXG4gICAgICB0YXJnZXQ6IFwiXCIsXHJcbiAgICAgIHR5cGU6IFwiXCIsXHJcbiAgICAgIGNvbHVtbkZpZWxkcyQ6IG51bGxcclxuICAgIH07XHJcbiAgICB0aGlzLm9uQWRkTm9kZShlbCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIG9uQWRkTm9kZShlbDogWkNvbXBvbmVudE91dHB1dEV2ZW50KSB7XHJcbiAgICBjb25zb2xlLmxvZygnb25BZGROb2RlIGlzIGNhbGxlZCcsIGVsKTtcclxuICAgIGNvbnN0IG1vZGFsRmllbGRzID0gdGhpcy5maWVsZFNlcnZpY2UuZ2V0Rm9ybUZpZWxkQ29kZShcclxuICAgICAgXCJtdkVkaXRGaWVsZE5vZGVGb3JtXCIsXHJcbiAgICAgIFwiRm9ybUZpZWxkXCIsXHJcbiAgICAgIG51bGwsXHJcbiAgICAgIG51bGxcclxuICAgICk7XHJcbiAgICAvLyBjb25zdCBkYXRhSXRlbSA9IE9iamVjdC5hc3NpZ24oe30sIGVsLmRhdGEpO1xyXG4gICAgLy8gZGF0YUl0ZW0uVmFsdWUgPSBkYXRhSXRlbS5fRGF0YVZhbHVlO1xyXG4gICAgLy8gZGVsZXRlIGRhdGFJdGVtLl9EYXRhVmFsdWU7XHJcbiAgICBjb25zdCBpbml0aWFsTW9kZWwgPSB7XHJcbiAgICAgIE5hbWU6ICdOYW1lJywgRGlzcGxheU5hbWU6ICdOYW1lJywgVmFsdWU6ICdOYW1lJywgVHlwZTogJ3RleHQnLFxyXG4gICAgICBncmlkQ29sVmlzaWJsZTogdHJ1ZSxcclxuICAgICAgd2lkdGg6IDE1MCxcclxuICAgICAgbWluV2lkdGg6IDEwMCxcclxuICAgICAgZW5hYmxlRmlsdGVyaW5nOiB0cnVlLFxyXG4gICAgICBlbmFibGVTb3J0aW5nOiB0cnVlLFxyXG4gICAgICBwaW5uZWRMZWZ0OiBmYWxzZSxcclxuICAgICAgUGxhY2VIb2xkZXI6IFwiTmFtZVwiLFxyXG4gICAgICBJc1JlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgTWluTGVuZ3RoOiAyLFxyXG4gICAgICBNYXhMZW5ndGg6IDUwLFxyXG4gICAgICBMYWJlbDogXCJOYW1lOlwiLFxyXG4gICAgICBEaXZDbGFzczogXCJjb2wteHMtMTIgY29sLXNtLTYgY29sLW1kLTYgY29sLWxnLTNcIixcclxuICAgICAgUmVhZE9ubHk6IGZhbHNlLFxyXG4gICAgICBTaG93TGFiZWw6IHRydWUsXHJcbiAgICAgIFZpc2libGU6IHRydWUsXHJcbiAgICAgIC8vRW5hYmxlSGlkaW5nOiB0cnVlLFxyXG4gICAgICAvL2NlbGxGaWx0ZXI6IFwiXCIsXHJcbiAgICAgIC8vZmlsdGVyQ2VsbEZpbHRlcmVkOiBmYWxzZSxcclxuICAgICAgLy9lbmFibGVQaW5uaW5nOiB0cnVlLFxyXG4gICAgICAvL3Bpbm5lZFJpZ2h0OiBmYWxzZSxcclxuICAgICAgLy9VcGRhdGVPbkJsdXI6IHRydWUsXHJcbiAgICAgIC8vQXBwZW5kRGl2Q2xlYXJGaXg6IGZhbHNlLFxyXG4gICAgfTtcclxuICAgIGNvbnN0IHptb2RlbCA9IHtcclxuICAgICAgbm9kZU1vZGVsOiBKU09OLnN0cmluZ2lmeShpbml0aWFsTW9kZWwsIG51bGwsIDIpXHJcbiAgICB9O1xyXG5cclxuICAgIC8vIGNvbnN0IG1vZGFsOiBIVE1MSW9uTW9kYWxFbGVtZW50ID0gYXdhaXQgdGhpcy5tYWluU2VydmljZS5vcGVuTW9kYWxGb3JtKG1vZGFsR3JvdXBQYXJhbSk7XHJcbiAgICBjb25zdCBtb2RhbCA9IGF3YWl0IHRoaXMubW9kYWxTZXJ2aWNlLnNob3cobW9kYWxGaWVsZHMsIHRoaXMuZGVidWcsICdBZGQgRmllbGQgRWxlbWVudCBJdGVtJywgbnVsbCwgbnVsbCwgem1vZGVsKTtcclxuXHJcbiAgICBtb2RhbC5zdWJzY3JpYmUoKG1vZGFsRGF0YTogTW9kYWxSZXNwb25zZSkgPT4ge1xyXG4gICAgICBpZiAobW9kYWxEYXRhLnJlc3BvbnNlVHlwZSA9PT0gXCJjYW5jZWxcIikge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBuZXdEYXRhID0gSlNPTi5wYXJzZShtb2RhbERhdGEuZGF0YS5ub2RlTW9kZWwpO1xyXG4gICAgICBpZiAobmV3RGF0YS5WYWx1ZSkge1xyXG4gICAgICAgIG5ld0RhdGEuX0RhdGFWYWx1ZSA9IG5ld0RhdGEuVmFsdWU7XHJcbiAgICAgICAgbmV3RGF0YS5WYWx1ZSA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5pbnNlcnRUcmVlTm9kZShuZXdEYXRhLCB0aGlzLmRlYnVnW1widHJlZU1vZGVsXCJdLCBlbC5ldmVudCk7XHJcbiAgICAgIGNvbnN0IG5ld1RyZWVNb2RlbCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5kZWJ1Z1sndHJlZU1vZGVsJ10pKTtcclxuICAgICAgY29uc3QgcmV2ZXJ0ZWRNb2RlbCA9IFpDb21wb25lbnRIZWxwZXIucmV2ZXJ0VHJlZU1vZGVsKG5ld1RyZWVNb2RlbCk7XHJcbiAgICAgIGNvbnN0IG5ld0NvZGUgPSBKU09OLnN0cmluZ2lmeShyZXZlcnRlZE1vZGVsLCBudWxsLCAyKTtcclxuICAgICAgWkNvbXBvbmVudEhlbHBlci5zZXRNb2RlbFZhbHVlKFwiQ29kZVwiLCBuZXdDb2RlLCB0aGlzLmRlYnVnKTtcclxuICAgICAgdGhpcy51cGRhdGVNb2RlbCgpO1xyXG4gICAgICAvLyB0aGlzLm1haW5TZXJ2aWNlLnVwZGF0ZU1vZGVsKG51bGwsIHRoaXMuZGVidWcpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uUmVtb3ZlTm9kZShlbDogWkNvbXBvbmVudE91dHB1dEV2ZW50KSB7XHJcbiAgICB0aGlzLmFsZXJ0U2VydmljZS5zaG93KCdSZW1vdmUgTm9kZScsICdBcmUgeW91IHN1cmU/JyxcclxuICAgICAgW1xyXG4gICAgICAgIHsgdGV4dDogXCJOb1wiLCBjc3NDbGFzczogXCJzZWNvbmRhcnlcIiB9IGFzIEFsZXJ0QnV0dG9uLFxyXG4gICAgICAgIHsgdGV4dDogXCJZZXNcIiwgY3NzQ2xhc3M6IFwicHJpbWFyeVwiIH0gYXMgQWxlcnRCdXR0b25cclxuICAgICAgXSlcclxuICAgICAgLnN1YnNjcmliZShyZXBseSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcGx5ID09PSAnWWVzJykge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ1JlbW92ZSBOb2RlJywgZWwpO1xyXG4gICAgICAgICAgdGhpcy5yZW1vdmVUcmVlTm9kZSh0aGlzLmRlYnVnW1widHJlZU1vZGVsXCJdLCBlbC5ldmVudCk7XHJcbiAgICAgICAgICBjb25zdCBuZXdUcmVlTW9kZWwgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuZGVidWdbJ3RyZWVNb2RlbCddKSk7XHJcbiAgICAgICAgICBjb25zdCByZXZlcnRlZE1vZGVsID0gWkNvbXBvbmVudEhlbHBlci5yZXZlcnRUcmVlTW9kZWwobmV3VHJlZU1vZGVsKTtcclxuICAgICAgICAgIGNvbnN0IG5ld0NvZGUgPSBKU09OLnN0cmluZ2lmeShyZXZlcnRlZE1vZGVsLCBudWxsLCAyKTtcclxuICAgICAgICAgIFpDb21wb25lbnRIZWxwZXIuc2V0TW9kZWxWYWx1ZShcIkNvZGVcIiwgbmV3Q29kZSwgdGhpcy5kZWJ1Zyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ290b0ZpZWxkRWxlbWVudCgpIHtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnYWRtaW4vZmllbGQnXSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZU1vZGVsKCkge1xyXG4gICAgY29uc3QgZGVidWcgPSB0aGlzLmRlYnVnO1xyXG4gICAgY29uc3QgZmcgPSB0aGlzLmRlYnVnLmZvcm0gYXMgRm9ybUdyb3VwO1xyXG4gICAgaWYgKCFmZy5kaXJ0eSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXCJEZWJ1ZyBGb3JtIGlzIG5vdCBkaXJ0eSBoZW5jZSByZWNvcmQgaXMgbm90IHNhdmUuXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFmZy52YWxpZCkge1xyXG4gICAgICB0aGlzLmNvbXBvbmVudEVycm9ySGFuZGxlci5zaG93Rm9ybUdyb3VwRXJyb3JNZXNzYWdlKHRoaXMuZ3JvdXAsIGZnKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIG9mKGRlYnVnLnpNb2RlbClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgLy8gc3dpdGNoTWFwKHptb2RlbCA9PiB7XHJcbiAgICAgICAgLy8gICBjb25zb2xlLmxvZyhcIkJlZm9yZSB1cGRhdGUsIHpNb2RlbDpcIiwgem1vZGVsKTtcclxuICAgICAgICAvLyAgIHJldHVybiB0aGlzLmJlZm9yZVVwZGF0ZU1vZGVsKGdyb3VwKTtcclxuICAgICAgICAvLyB9KSxcclxuICAgICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgICAgT2JqZWN0LmFzc2lnbihkZWJ1Zy56TW9kZWwsIGZnLnZhbHVlKTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMud2ViQXBpU2VydmljZS5odHRwUHV0JChcclxuICAgICAgICAgICAgZGVidWcucmVzb3VyY2VVUkwgKyBcIi9cIiArIGRlYnVnLnpNb2RlbC5JZCxcclxuICAgICAgICAgICAgZGVidWcuek1vZGVsXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgIG1hcChyZXMgPT4gdGhpcy5oYW5kbGVTdWNjZXNzKHJlcywgXCJSZWNvcmQgaXMgdXBkYXRlZCBzdWNjZXNzZnVsbHkuXCIpKSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBzd2l0Y2hNYXAoKHptb2RlbDogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkFmdGVyIERlYnVnIEZvcm0gdXBkYXRlZCwgek1vZGVsOlwiLCB6bW9kZWwpO1xyXG4gICAgICAgICAgaWYgKHptb2RlbCAmJiB6bW9kZWwuRGF0YSkge1xyXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGRlYnVnLnpNb2RlbCwgem1vZGVsLkRhdGEpO1xyXG4gICAgICAgICAgICBmZy5wYXRjaFZhbHVlKHptb2RlbC5EYXRhKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGZnLm1hcmtBc1ByaXN0aW5lKCk7XHJcbiAgICAgICAgICAvLyAgIHRoaXMuYWZ0ZXJVcGRhdGVNb2RlbChncm91cCk7XHJcbiAgICAgICAgICByZXR1cm4gb2YoW10pO1xyXG4gICAgICAgIH0pKVxyXG4gICAgICAuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gKioqKioqKioqKioqKioqKioqKiogV29ya2Zsb3cgQnV0dG9uICoqKioqKioqKioqKioqKioqKioqXHJcbiAgcHVibGljIGxvYWRXb3JrZmxvd0RhdGEoKSB7XHJcbiAgICBjb25zdCB6Z3JpZF9Xb3JrZmxvd0J1dHRvbkdyaWQgPSBaQ29tcG9uZW50SGVscGVyLmdldENvbXBvbmVudCh0aGlzLmRlYnVnLCAnemdyaWRfV29ya2Zsb3dCdXR0b25HcmlkJyk7XHJcbiAgICBpZiAoemdyaWRfV29ya2Zsb3dCdXR0b25HcmlkKSB7XHJcbiAgICAgIHpncmlkX1dvcmtmbG93QnV0dG9uR3JpZC5zZXREYXRhKHRoaXMuZGVidWcuekRhdGEuY29sbGVjdGVkV29ya2Zsb3dCdXR0b25zKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ3JpZFdvcmtmbG93QnV0dG9uT25JdGVtQ2xpY2soZXZlbnQ6IGFueSkge1xyXG4gICAgY29uc3QgZGF0YUl0ZW0gPSBPYmplY3QuYXNzaWduKHt9LCBldmVudC5kYXRhSXRlbSk7XHJcbiAgICBjb25zdCBmaWVsZCA9IGRhdGFJdGVtLnJlZkZpZWxkO1xyXG4gICAgY29uc3QgYXR0cmlidXRlID0gZGF0YUl0ZW0ucmVmQXR0cmlidXRlO1xyXG5cclxuICAgIC8vIEdldCBNYXBwZWQgSW5mb1xyXG4gICAgY29uc3QgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKVxyXG4gICAgICAuc2V0KFwiQnV0dG9uSWRcIiwgZmllbGQuSWQpO1xyXG4gICAgdGhpcy53ZWJBcGlTZXJ2aWNlLmh0dHBQb3N0JCh0aGlzLnJlc291cmNlQXBpU2VydmljZS5nZXRVUkwoXCJlMXdmc193ZmNfZ2V0bWFwcGVkQnV0dG9uSW5mb1VSTFwiKSwgcGFyYW1zKS5waXBlKFxyXG4gICAgICBtYXAoYXN5bmMgcmVzID0+IHtcclxuICAgICAgICBsZXQgcm9sZUluZm8gPSBbXTtcclxuICAgICAgICBsZXQgc3RhdHVzSW5mbyA9IFtdO1xyXG4gICAgICAgIGxldCBwYXJlbnRTdGF0dXNJbmZvID0gW107XHJcblxyXG4gICAgICAgIGlmIChyZXMuTWFwcGVkUm9sZUxpc3QpIHtcclxuICAgICAgICAgIHJvbGVJbmZvID0gcmVzLk1hcHBlZFJvbGVMaXN0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHJlcy5NYXBwZWRTdGF0dXNMaXN0KSB7XHJcbiAgICAgICAgICByZXMuTWFwcGVkU3RhdHVzTGlzdC5mb3JFYWNoKChfc3RhdHVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgc3RhdHVzSW5mby5wdXNoKF9zdGF0dXMuTmFtZSArICcgKCcgKyBfc3RhdHVzLkNvZGUgKyAnKScpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocmVzLk1hcHBlZFBhcmVudFN0YXR1c0xpc3QpIHtcclxuICAgICAgICAgIHJlcy5NYXBwZWRQYXJlbnRTdGF0dXNMaXN0LmZvckVhY2goKF9wYXJlbnRTdGF0dXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBwYXJlbnRTdGF0dXNJbmZvLnB1c2goX3BhcmVudFN0YXR1cy5OYW1lICsgJyAoJyArIF9wYXJlbnRTdGF0dXMuQ29kZSArICcpJyk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IF9tYXBwZWRJbmZvID0ge1xyXG4gICAgICAgICAgJ21hcHBlZFJvbGVJbmZvJzogcm9sZUluZm8ubGVuZ3RoID4gMCA/IHJvbGVJbmZvIDogJ04uQS4nLFxyXG4gICAgICAgICAgJ21hcHBlZFN0YXR1c0luZm8nOiBzdGF0dXNJbmZvLmxlbmd0aCA+IDAgPyBzdGF0dXNJbmZvIDogJ04uQS4nLFxyXG4gICAgICAgICAgJ21hcHBlZFBhcmVudFN0YXR1c0luZm8nOiBwYXJlbnRTdGF0dXNJbmZvLmxlbmd0aCA+IDAgPyBwYXJlbnRTdGF0dXNJbmZvIDogJ04uQS4nXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgLy8gcmV0cmVpdmUgYWxsIGltcG9ydGFudCBpbmZvXHJcbiAgICAgICAgY29uc3QgX2J1dHRvbkluZm8gPSB7XHJcbiAgICAgICAgICAnV29ya2Zsb3dJZCc6IGZpZWxkLldvcmtmbG93SWQsXHJcbiAgICAgICAgICAnQnV0dG9uSWQnOiBmaWVsZC5JZCxcclxuICAgICAgICAgICdCdXR0b25OYW1lJzogZmllbGQuTmFtZSxcclxuICAgICAgICAgICdCdXR0b25Db2RlJzogZmllbGQuQ29kZSxcclxuICAgICAgICAgICdCdXR0b25UeXBlSWQnOiBmaWVsZC5UeXBlLklkLFxyXG4gICAgICAgICAgJ0J1dHRvblR5cGVOYW1lJzogZmllbGQuVHlwZS5OYW1lLFxyXG4gICAgICAgICAgJ0J1dHRvblR5cGVDb2RlJzogZmllbGQuVHlwZS5Db2RlLFxyXG4gICAgICAgICAgJ0J1dHRvblZpc2libGUnOiBhdHRyaWJ1dGUuVmlzaWJsZSxcclxuICAgICAgICAgICdCdXR0b25DbGlja0V2ZW50JzogYXR0cmlidXRlLkNsaWNrRXZlbnQsXHJcbiAgICAgICAgICAnQnV0dG9uVVJMJzogYXR0cmlidXRlLlVSTCxcclxuICAgICAgICAgICdCdXR0b25JY29uJzogYXR0cmlidXRlLkljb25cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBsZXQgX2dvdG9TdGF0dXNJbmZvID0ge1xyXG4gICAgICAgICAgJ0dvdG9TdGF0dXNJZCc6ICdOLkEuJyxcclxuICAgICAgICAgICdHb3RvU3RhdHVzTmFtZSc6ICdOLkEuJyxcclxuICAgICAgICAgICdHb3RvU3RhdHVzQ29kZSc6ICdOLkEuJ1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGlmIChmaWVsZC5TdGF0dXMpIHtcclxuICAgICAgICAgIGNvbnN0IF9nb3RvU3RhdHVzID0gZmllbGQuU3RhdHVzXHJcbiAgICAgICAgICBfZ290b1N0YXR1c0luZm8gPSB7XHJcbiAgICAgICAgICAgICdHb3RvU3RhdHVzSWQnOiBfZ290b1N0YXR1cy5JZCxcclxuICAgICAgICAgICAgJ0dvdG9TdGF0dXNOYW1lJzogX2dvdG9TdGF0dXMuTmFtZSxcclxuICAgICAgICAgICAgJ0dvdG9TdGF0dXNDb2RlJzogX2dvdG9TdGF0dXMuQ29kZVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcHJvcGVydGllc01vZGVsID0gT2JqZWN0LmFzc2lnbihfYnV0dG9uSW5mbywgX2dvdG9TdGF0dXNJbmZvLCBfbWFwcGVkSW5mbyk7XHJcblxyXG4gICAgICAgIGNvbnN0IG1vZGFsRmllbGRzID0gdGhpcy5maWVsZFNlcnZpY2UuZ2V0Rm9ybUZpZWxkQ29kZShcclxuICAgICAgICAgIFwibXZXb3JrZmxvd0J1dHRvbkRlYnVnRm9ybVwiLFxyXG4gICAgICAgICAgXCJGb3JtRmllbGRcIixcclxuICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICBudWxsXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBtb2RhbCA9IGF3YWl0IHRoaXMubW9kYWxTZXJ2aWNlLnNob3cobW9kYWxGaWVsZHMsIHRoaXMuZGVidWcuX2dyb3VwLCAnV29ya2Zsb3cgQnV0dG9uIEluZm8nLCBudWxsLCBudWxsLCBwcm9wZXJ0aWVzTW9kZWwpO1xyXG4gICAgICAgIG1vZGFsLnN1YnNjcmliZSgobW9kYWxEYXRhOiBNb2RhbFJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICBpZiAobW9kYWxEYXRhLnJlc3BvbnNlVHlwZSA9PT0gXCJjYW5jZWxcIikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcblxyXG4gIGhhbmRsZVN1Y2Nlc3MocmVzOiBSZXNwb25zZSB8IGFueSwgc3VjY2Vzc01zZzogc3RyaW5nKTogUmVzcG9uc2Uge1xyXG4gICAgaWYgKHJlcyA9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLnNob3coc3VjY2Vzc01zZyk7XHJcbiAgICB9IGVsc2UgaWYgKHJlcy5EYXRhICE9PSB1bmRlZmluZWQgJiYgcmVzLlByb2Nlc3NpbmdTdGF0dXMgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBpZiAocmVzLlByb2Nlc3NpbmdTdGF0dXMgPT09IHRydWUpIHtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXMuRGF0YSkpIHtcclxuICAgICAgICAgIHJlcy5EYXRhLm1hcChzID0+IHRoaXMud2ViQXBpU2VydmljZS5zaG93SHR0cFJlc3BvbnNlTWVzc2FnZShNRVNTQUdFVFlQRS5TdWNjZXNzLFxyXG4gICAgICAgICAgICBgJHtzdWNjZXNzTXNnfSA6ICR7cy5Db3N0Q29kZX1gLCBudWxsKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMud2ViQXBpU2VydmljZS5zaG93SHR0cFJlc3BvbnNlTWVzc2FnZShNRVNTQUdFVFlQRS5TdWNjZXNzLCBzdWNjZXNzTXNnLCBudWxsKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLnNob3coc3VjY2Vzc01zZyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlRXJyb3IocmVzOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMud2ViQXBpU2VydmljZS5oYW5kbGVFcnJvcihyZXMpO1xyXG4gIH1cclxufVxyXG4iXX0=
|