@cqa-lib/cqa-ui 1.1.528 → 1.1.530
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/esm2020/lib/audit-log-drawer/audit-log-drawer.component.mjs +146 -0
- package/esm2020/lib/audit-log-drawer/audit-log-drawer.models.mjs +2 -0
- package/esm2020/lib/audit-log-drawer/audit-log-drawer.service.mjs +84 -0
- package/esm2020/lib/audit-log-drawer/audit-log-entry-card.component.mjs +30 -0
- package/esm2020/lib/dialog/dialog.component.mjs +15 -3
- package/esm2020/lib/dialog/dialog.models.mjs +1 -1
- package/esm2020/lib/manage-columns-dialog/manage-columns-dialog.component.mjs +133 -0
- package/esm2020/lib/manage-columns-dialog/manage-columns-dialog.models.mjs +2 -0
- package/esm2020/lib/templates/modular-table-template/dialogs/move-to-folder-dialog.component.mjs +38 -13
- package/esm2020/lib/templates/modular-table-template/dialogs/new-folder-dialog.component.mjs +79 -87
- package/esm2020/lib/templates/modular-table-template/folder-sidebar/folder-sidebar.component.mjs +21 -4
- package/esm2020/lib/templates/modular-table-template/modular-table-template.component.mjs +3 -1
- package/esm2020/lib/templates/modular-table-template/modular-table-template.models.mjs +3 -1
- package/esm2020/lib/ui-kit.module.mjs +16 -1
- package/esm2020/public-api.mjs +7 -1
- package/fesm2015/cqa-lib-cqa-ui.mjs +536 -105
- package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -1
- package/fesm2020/cqa-lib-cqa-ui.mjs +531 -103
- package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -1
- package/lib/audit-log-drawer/audit-log-drawer.component.d.ts +34 -0
- package/lib/audit-log-drawer/audit-log-drawer.models.d.ts +43 -0
- package/lib/audit-log-drawer/audit-log-drawer.service.d.ts +13 -0
- package/lib/audit-log-drawer/audit-log-entry-card.component.d.ts +10 -0
- package/lib/dialog/dialog.component.d.ts +1 -0
- package/lib/dialog/dialog.models.d.ts +4 -0
- package/lib/manage-columns-dialog/manage-columns-dialog.component.d.ts +32 -0
- package/lib/manage-columns-dialog/manage-columns-dialog.models.d.ts +11 -0
- package/lib/templates/modular-table-template/dialogs/move-to-folder-dialog.component.d.ts +12 -2
- package/lib/templates/modular-table-template/dialogs/new-folder-dialog.component.d.ts +23 -30
- package/lib/templates/modular-table-template/folder-sidebar/folder-sidebar.component.d.ts +4 -0
- package/lib/templates/modular-table-template/modular-table-template.models.d.ts +2 -0
- package/lib/ui-kit.module.d.ts +92 -89
- package/package.json +1 -1
- package/public-api.d.ts +6 -0
- package/styles.css +1 -1
package/esm2020/lib/templates/modular-table-template/dialogs/new-folder-dialog.component.mjs
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, } from '@angular/core';
|
|
2
|
-
import { FormControl, FormGroup } from '@angular/forms';
|
|
3
2
|
import { DEFAULT_MODULAR_LABELS } from '../modular-table-template.models';
|
|
4
3
|
import * as i0 from "@angular/core";
|
|
5
4
|
import * as i1 from "../../../custom-input/custom-input.component";
|
|
6
|
-
import * as i2 from "
|
|
5
|
+
import * as i2 from "./move-to-folder-dialog.component";
|
|
7
6
|
import * as i3 from "@angular/common";
|
|
8
7
|
export const DEFAULT_FOLDER_COLOR = '#99999E';
|
|
8
|
+
export const FOLDER_NAME_MAX_LENGTH = 20;
|
|
9
9
|
const PRESET_FOLDER_COLORS = [
|
|
10
10
|
DEFAULT_FOLDER_COLOR,
|
|
11
11
|
'#4F46E5',
|
|
@@ -20,8 +20,10 @@ const PRESET_FOLDER_COLORS = [
|
|
|
20
20
|
* Body of the "New Folder" dialog.
|
|
21
21
|
*
|
|
22
22
|
* Uses reusable library components (`cqa-custom-input` for the name field,
|
|
23
|
-
* `cqa-
|
|
24
|
-
* into their own modal shell without worrying
|
|
23
|
+
* `cqa-move-to-folder-dialog` as an embedded tree picker for the parent folder)
|
|
24
|
+
* so hosts can drop this dialog into their own modal shell without worrying
|
|
25
|
+
* about styling drift. The tree picker handles arbitrarily deep nesting via
|
|
26
|
+
* expand/collapse rather than a flat dropdown of "A › B › C ›…" paths.
|
|
25
27
|
*
|
|
26
28
|
* Two integration paths:
|
|
27
29
|
*
|
|
@@ -36,16 +38,19 @@ const PRESET_FOLDER_COLORS = [
|
|
|
36
38
|
export class NewFolderDialogComponent {
|
|
37
39
|
constructor(cdr) {
|
|
38
40
|
this.cdr = cdr;
|
|
39
|
-
// NOTE:
|
|
40
|
-
// because `DialogService.open(...)` assigns the `inputs` map via direct
|
|
41
|
-
//
|
|
42
|
-
//
|
|
43
|
-
//
|
|
44
|
-
// array and the parent-folder dropdown would render empty / appear broken.
|
|
41
|
+
// NOTE: `folders` and `labels` are declared as setters (instead of plain @Input fields)
|
|
42
|
+
// because `DialogService.open(...)` assigns the `inputs` map via direct property
|
|
43
|
+
// assignment *after* `attachComponent` has already run the component's lifecycle
|
|
44
|
+
// hooks — direct assignment bypasses `ngOnChanges`, so setters keep derived state
|
|
45
|
+
// (e.g. `parentPickerLabels`) in sync no matter the assignment order.
|
|
45
46
|
this._folders = [];
|
|
46
47
|
this._labels = { ...DEFAULT_MODULAR_LABELS };
|
|
47
48
|
this.name = '';
|
|
48
|
-
|
|
49
|
+
/** Tracks whether the user has interacted with the name field, so we don't surface
|
|
50
|
+
* the "required" error on first paint when the dialog opens with an empty name. */
|
|
51
|
+
this.nameTouched = false;
|
|
52
|
+
this.maxNameLength = FOLDER_NAME_MAX_LENGTH;
|
|
53
|
+
this.parentId = null;
|
|
49
54
|
this.color = DEFAULT_FOLDER_COLOR;
|
|
50
55
|
this.presetColors = PRESET_FOLDER_COLORS;
|
|
51
56
|
this.rainbowBorder = 'conic-gradient(from 0deg, #ef4444, #f59e0b, #eab308, #10b981, #06b6d4, #4f46e5, #8b5cf6, #ec4899, #ef4444)';
|
|
@@ -54,79 +59,35 @@ export class NewFolderDialogComponent {
|
|
|
54
59
|
this.colorChange = new EventEmitter();
|
|
55
60
|
this.submitted = new EventEmitter();
|
|
56
61
|
this.cancelled = new EventEmitter();
|
|
57
|
-
/**
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
this.
|
|
62
|
+
/** Labels passed to the embedded tree picker. Re-uses the move-dialog surface but
|
|
63
|
+
* rewrites the root row's label so it reads "(no parent)" instead of "Unorganised"
|
|
64
|
+
* for the create-folder context. */
|
|
65
|
+
this.parentPickerLabels = this.buildParentPickerLabels();
|
|
61
66
|
}
|
|
62
67
|
set folders(value) {
|
|
63
68
|
this._folders = value || [];
|
|
64
|
-
this.
|
|
65
|
-
this.rebuildSelectConfig();
|
|
69
|
+
this.cdr.markForCheck();
|
|
66
70
|
}
|
|
67
71
|
get folders() { return this._folders; }
|
|
68
72
|
set labels(value) {
|
|
69
73
|
this._labels = value || { ...DEFAULT_MODULAR_LABELS };
|
|
70
|
-
this.
|
|
71
|
-
}
|
|
72
|
-
get labels() { return this._labels; }
|
|
73
|
-
set parentId(value) {
|
|
74
|
-
this._parentId = value ?? null;
|
|
75
|
-
this.syncParentControl();
|
|
76
|
-
}
|
|
77
|
-
get parentId() { return this._parentId; }
|
|
78
|
-
ngOnInit() {
|
|
79
|
-
// Setters above already rebuilt config once folders/labels were assigned. This
|
|
80
|
-
// just ensures the form control matches the current parentId value in case
|
|
81
|
-
// ordering of input assignment differs.
|
|
82
|
-
this.syncParentControl();
|
|
83
|
-
}
|
|
84
|
-
rebuildSelectConfig() {
|
|
85
|
-
this.parentSelectConfig = {
|
|
86
|
-
key: 'parentId',
|
|
87
|
-
label: this.labels.newFolderDialogParentLabel,
|
|
88
|
-
placeholder: this.labels.newFolderDialogParentNone,
|
|
89
|
-
searchable: false,
|
|
90
|
-
multiple: false,
|
|
91
|
-
closeOnSelect: true,
|
|
92
|
-
options: [
|
|
93
|
-
// `getOptionValue` in cqa-dynamic-select returns `id ?? value`, so using
|
|
94
|
-
// `value: null` (with no id) yields a stable `null` resolved value that
|
|
95
|
-
// matches the FormControl's null state.
|
|
96
|
-
{ value: null, name: this.labels.newFolderDialogParentNone },
|
|
97
|
-
...this.parentOptions.map(o => ({ id: o.id, name: o.label })),
|
|
98
|
-
],
|
|
99
|
-
};
|
|
100
|
-
}
|
|
101
|
-
rebuildOptions() {
|
|
102
|
-
const opts = [];
|
|
103
|
-
const walk = (nodes, trail) => {
|
|
104
|
-
for (const n of nodes || []) {
|
|
105
|
-
const label = [...trail, n.name].join(' › ');
|
|
106
|
-
opts.push({ id: n.id, label });
|
|
107
|
-
if (n.children?.length)
|
|
108
|
-
walk(n.children, [...trail, n.name]);
|
|
109
|
-
}
|
|
110
|
-
};
|
|
111
|
-
walk(this.folders, []);
|
|
112
|
-
this.parentOptions = opts;
|
|
74
|
+
this.parentPickerLabels = this.buildParentPickerLabels();
|
|
113
75
|
this.cdr.markForCheck();
|
|
114
76
|
}
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
this.
|
|
77
|
+
get labels() { return this._labels; }
|
|
78
|
+
buildParentPickerLabels() {
|
|
79
|
+
return { ...this._labels, moveDialogRoot: this._labels.newFolderDialogParentNone };
|
|
118
80
|
}
|
|
119
81
|
onNameChange(value) {
|
|
120
82
|
this.name = value;
|
|
83
|
+
this.nameTouched = true;
|
|
121
84
|
this.nameChange.emit(value);
|
|
122
85
|
}
|
|
123
|
-
|
|
124
|
-
//
|
|
125
|
-
// parent tree are numeric so we coerce defensively.
|
|
126
|
-
const raw = event?.value;
|
|
86
|
+
onParentPicked(id) {
|
|
87
|
+
// The tree picker emits `null` for the "(no parent)" sentinel; numeric otherwise.
|
|
127
88
|
let next = null;
|
|
128
|
-
if (
|
|
129
|
-
const coerced = typeof
|
|
89
|
+
if (id != null) {
|
|
90
|
+
const coerced = typeof id === 'number' ? id : Number(id);
|
|
130
91
|
if (Number.isFinite(coerced))
|
|
131
92
|
next = coerced;
|
|
132
93
|
}
|
|
@@ -153,9 +114,26 @@ export class NewFolderDialogComponent {
|
|
|
153
114
|
if (target)
|
|
154
115
|
this.onColorChange(target.value);
|
|
155
116
|
}
|
|
156
|
-
/**
|
|
117
|
+
/** Errors surfaced under the name field. Only computed once the user has touched
|
|
118
|
+
* the input so the dialog doesn't open with a "required" error already showing. */
|
|
119
|
+
get nameErrors() {
|
|
120
|
+
if (!this.nameTouched)
|
|
121
|
+
return [];
|
|
122
|
+
const trimmed = (this.name || '').trim();
|
|
123
|
+
const errors = [];
|
|
124
|
+
if (!trimmed) {
|
|
125
|
+
errors.push(this.labels.newFolderDialogNameRequiredError);
|
|
126
|
+
}
|
|
127
|
+
else if (trimmed.length > this.maxNameLength) {
|
|
128
|
+
errors.push(this.labels.newFolderDialogNameMaxLengthError);
|
|
129
|
+
}
|
|
130
|
+
return errors;
|
|
131
|
+
}
|
|
132
|
+
/** Returns true when the current state is a valid submission (non-empty trimmed name
|
|
133
|
+
* within the max length). Used by the host to gate the dialog's Create button. */
|
|
157
134
|
get isValid() {
|
|
158
|
-
|
|
135
|
+
const trimmed = (this.name || '').trim();
|
|
136
|
+
return trimmed.length > 0 && trimmed.length <= this.maxNameLength;
|
|
159
137
|
}
|
|
160
138
|
submit() {
|
|
161
139
|
if (!this.isValid)
|
|
@@ -176,18 +154,25 @@ NewFolderDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0
|
|
|
176
154
|
[required]="true"
|
|
177
155
|
[placeholder]="labels.newFolderDialogNamePlaceholder"
|
|
178
156
|
[value]="name"
|
|
157
|
+
[errors]="nameErrors"
|
|
179
158
|
[fullWidth]="true"
|
|
180
159
|
(valueChange)="onNameChange($event)"
|
|
181
160
|
(enterPressed)="submit()"
|
|
182
161
|
></cqa-custom-input>
|
|
183
162
|
|
|
184
|
-
<!-- Parent folder -->
|
|
185
|
-
<cqa-
|
|
186
|
-
class="cqa-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
163
|
+
<!-- Parent folder — tree picker (handles arbitrarily deep nesting via expand/collapse) -->
|
|
164
|
+
<div class="cqa-flex cqa-flex-col cqa-gap-2">
|
|
165
|
+
<label class="cqa-text-sm cqa-font-medium cqa-text-neutral-700">
|
|
166
|
+
{{ labels.newFolderDialogParentLabel }}
|
|
167
|
+
</label>
|
|
168
|
+
<cqa-move-to-folder-dialog
|
|
169
|
+
[folders]="folders"
|
|
170
|
+
[labels]="parentPickerLabels"
|
|
171
|
+
[pickedFolderId]="parentId"
|
|
172
|
+
[pickerHeight]="'240px'"
|
|
173
|
+
(pickedFolderIdChange)="onParentPicked($event)"
|
|
174
|
+
></cqa-move-to-folder-dialog>
|
|
175
|
+
</div>
|
|
191
176
|
|
|
192
177
|
<!-- Folder color (optional) -->
|
|
193
178
|
<div class="cqa-flex cqa-flex-col cqa-gap-2">
|
|
@@ -246,7 +231,7 @@ NewFolderDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0
|
|
|
246
231
|
</div>
|
|
247
232
|
</div>
|
|
248
233
|
</div>
|
|
249
|
-
`, isInline: true, components: [{ type: i1.CustomInputComponent, selector: "cqa-custom-input", inputs: ["inputId", "label", "type", "placeholder", "value", "disabled", "errors", "required", "ariaLabel", "size", "fullWidth", "maxLength", "showCharCount", "inputInlineStyle", "labelInlineStyle"], outputs: ["valueChange", "blurred", "focused", "enterPressed"] }, { type: i2.
|
|
234
|
+
`, isInline: true, components: [{ type: i1.CustomInputComponent, selector: "cqa-custom-input", inputs: ["inputId", "label", "type", "placeholder", "value", "disabled", "errors", "required", "ariaLabel", "size", "fullWidth", "maxLength", "showCharCount", "inputInlineStyle", "labelInlineStyle"], outputs: ["valueChange", "blurred", "focused", "enterPressed"] }, { type: i2.MoveToFolderDialogComponent, selector: "cqa-move-to-folder-dialog", inputs: ["folders", "labels", "currentFolderId", "pickedFolderId", "initialExpandedIds", "rootDisabled", "pickerHeight"], outputs: ["folderPicked", "pickedFolderIdChange"] }], directives: [{ type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
250
235
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: NewFolderDialogComponent, decorators: [{
|
|
251
236
|
type: Component,
|
|
252
237
|
args: [{ selector: 'cqa-new-folder-dialog', template: `
|
|
@@ -257,18 +242,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
257
242
|
[required]="true"
|
|
258
243
|
[placeholder]="labels.newFolderDialogNamePlaceholder"
|
|
259
244
|
[value]="name"
|
|
245
|
+
[errors]="nameErrors"
|
|
260
246
|
[fullWidth]="true"
|
|
261
247
|
(valueChange)="onNameChange($event)"
|
|
262
248
|
(enterPressed)="submit()"
|
|
263
249
|
></cqa-custom-input>
|
|
264
250
|
|
|
265
|
-
<!-- Parent folder -->
|
|
266
|
-
<cqa-
|
|
267
|
-
class="cqa-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
251
|
+
<!-- Parent folder — tree picker (handles arbitrarily deep nesting via expand/collapse) -->
|
|
252
|
+
<div class="cqa-flex cqa-flex-col cqa-gap-2">
|
|
253
|
+
<label class="cqa-text-sm cqa-font-medium cqa-text-neutral-700">
|
|
254
|
+
{{ labels.newFolderDialogParentLabel }}
|
|
255
|
+
</label>
|
|
256
|
+
<cqa-move-to-folder-dialog
|
|
257
|
+
[folders]="folders"
|
|
258
|
+
[labels]="parentPickerLabels"
|
|
259
|
+
[pickedFolderId]="parentId"
|
|
260
|
+
[pickerHeight]="'240px'"
|
|
261
|
+
(pickedFolderIdChange)="onParentPicked($event)"
|
|
262
|
+
></cqa-move-to-folder-dialog>
|
|
263
|
+
</div>
|
|
272
264
|
|
|
273
265
|
<!-- Folder color (optional) -->
|
|
274
266
|
<div class="cqa-flex cqa-flex-col cqa-gap-2">
|
|
@@ -349,4 +341,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
349
341
|
}], cancelled: [{
|
|
350
342
|
type: Output
|
|
351
343
|
}] } });
|
|
352
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV3LWZvbGRlci1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi90ZW1wbGF0ZXMvbW9kdWxhci10YWJsZS10ZW1wbGF0ZS9kaWFsb2dzL25ldy1mb2xkZXItZGlhbG9nLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXhELE9BQU8sRUFBRSxzQkFBc0IsRUFBNkIsTUFBTSxrQ0FBa0MsQ0FBQzs7Ozs7QUFPckcsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsU0FBUyxDQUFDO0FBRTlDLE1BQU0sb0JBQW9CLEdBQWE7SUFDckMsb0JBQW9CO0lBQ3BCLFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztJQUNULFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztJQUNULFNBQVM7Q0FDVixDQUFDO0FBRUY7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFzRkgsTUFBTSxPQUFPLHdCQUF3QjtJQTJEbkMsWUFBb0IsR0FBc0I7UUFBdEIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUExRDFDLDhFQUE4RTtRQUM5RSx3RUFBd0U7UUFDeEUsb0VBQW9FO1FBQ3BFLCtFQUErRTtRQUMvRSwrRUFBK0U7UUFDL0UsMkVBQTJFO1FBRW5FLGFBQVEsR0FBaUIsRUFBRSxDQUFDO1FBUTVCLFlBQU8sR0FBa0IsRUFBRSxHQUFHLHNCQUFzQixFQUFFLENBQUM7UUFPdEQsU0FBSSxHQUFXLEVBQUUsQ0FBQztRQUVuQixjQUFTLEdBQWtCLElBQUksQ0FBQztRQU8vQixVQUFLLEdBQVcsb0JBQW9CLENBQUM7UUFFckMsaUJBQVksR0FBYSxvQkFBb0IsQ0FBQztRQUM5QyxrQkFBYSxHQUNwQiw0R0FBNEcsQ0FBQztRQUVyRyxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUN4QyxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFpQixDQUFDO1FBQ25ELGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUN6QyxjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQTRELENBQUM7UUFDekYsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFFL0MsdUdBQXVHO1FBQ3ZHLGVBQVUsR0FBRyxJQUFJLFNBQVMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFZeEQsa0JBQWEsR0FBbUIsRUFBRSxDQUFDO1FBR3pDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBQUMsbURBQW1EO0lBQ2pGLENBQUM7SUFwREQsSUFBYSxPQUFPLENBQUMsS0FBbUI7UUFDdEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBQ0QsSUFBSSxPQUFPLEtBQW1CLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFHckQsSUFBYSxNQUFNLENBQUMsS0FBb0I7UUFDdEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLElBQUksRUFBRSxHQUFHLHNCQUFzQixFQUFFLENBQUM7UUFDdEQsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUNELElBQUksTUFBTSxLQUFvQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBS3BELElBQWEsUUFBUSxDQUFDLEtBQW9CO1FBQ3hDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxJQUFJLElBQUksQ0FBQztRQUMvQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBQ0QsSUFBSSxRQUFRLEtBQW9CLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFpQ3hELFFBQVE7UUFDTiwrRUFBK0U7UUFDL0UsMkVBQTJFO1FBQzNFLHdDQUF3QztRQUN4QyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRU8sbUJBQW1CO1FBQ3pCLElBQUksQ0FBQyxrQkFBa0IsR0FBRztZQUN4QixHQUFHLEVBQUUsVUFBVTtZQUNmLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLDBCQUEwQjtZQUM3QyxXQUFXLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyx5QkFBeUI7WUFDbEQsVUFBVSxFQUFFLEtBQUs7WUFDakIsUUFBUSxFQUFFLEtBQUs7WUFDZixhQUFhLEVBQUUsSUFBSTtZQUNuQixPQUFPLEVBQUU7Z0JBQ1AseUVBQXlFO2dCQUN6RSx3RUFBd0U7Z0JBQ3hFLHdDQUF3QztnQkFDeEMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLHlCQUF5QixFQUFFO2dCQUM1RCxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQzthQUM5RDtTQUNGLENBQUM7SUFDSixDQUFDO0lBRU8sY0FBYztRQUNwQixNQUFNLElBQUksR0FBbUIsRUFBRSxDQUFDO1FBQ2hDLE1BQU0sSUFBSSxHQUFHLENBQUMsS0FBbUIsRUFBRSxLQUFlLEVBQVEsRUFBRTtZQUMxRCxLQUFLLE1BQU0sQ0FBQyxJQUFJLEtBQUssSUFBSSxFQUFFLEVBQUU7Z0JBQzNCLE1BQU0sS0FBSyxHQUFHLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDN0MsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxNQUFNO29CQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7YUFDOUQ7UUFDSCxDQUFDLENBQUM7UUFDRixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUMxQixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsb0ZBQW9GO1FBQ3BGLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ3pGLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBYTtRQUN4QixJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztRQUNsQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsdUJBQXVCLENBQUMsS0FBa0M7UUFDeEQsMEVBQTBFO1FBQzFFLG9EQUFvRDtRQUNwRCxNQUFNLEdBQUcsR0FBRyxLQUFLLEVBQUUsS0FBSyxDQUFDO1FBQ3pCLElBQUksSUFBSSxHQUFrQixJQUFJLENBQUM7UUFDL0IsSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFO1lBQ2YsTUFBTSxPQUFPLEdBQUcsT0FBTyxHQUFHLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM1RCxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO2dCQUFFLElBQUksR0FBRyxPQUFPLENBQUM7U0FDOUM7UUFDRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNyQixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsT0FBTyxDQUFDLENBQVM7UUFDZixPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN0RSxDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2YsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzNDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFFRCxhQUFhLENBQUMsS0FBYTtRQUN6QixNQUFNLElBQUksR0FBRyxLQUFLLElBQUksb0JBQW9CLENBQUM7UUFDM0MsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUk7WUFBRSxPQUFPO1FBQ2hDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELGlCQUFpQixDQUFDLEtBQVk7UUFDNUIsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQWlDLENBQUM7UUFDdkQsSUFBSSxNQUFNO1lBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELDJGQUEyRjtJQUMzRixJQUFJLE9BQU87UUFDVCxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFPO1FBQzFCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO1lBQ2xCLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFO1lBQzlCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssSUFBSSxvQkFBb0I7U0FDMUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7cUhBL0pVLHdCQUF3Qjt5R0FBeEIsd0JBQXdCLGlXQW5GekI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThFVDsyRkFLVSx3QkFBd0I7a0JBckZwQyxTQUFTOytCQUNFLHVCQUF1QixZQUN2Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBOEVULFFBRUssRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLG1CQUNiLHVCQUF1QixDQUFDLE1BQU07d0dBV2xDLE9BQU87c0JBQW5CLEtBQUs7Z0JBUU8sTUFBTTtzQkFBbEIsS0FBSztnQkFNRyxJQUFJO3NCQUFaLEtBQUs7Z0JBR08sUUFBUTtzQkFBcEIsS0FBSztnQkFNRyxLQUFLO3NCQUFiLEtBQUs7Z0JBTUksVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBEeW5hbWljU2VsZWN0RmllbGRDb25maWcgfSBmcm9tICcuLi8uLi8uLi9keW5hbWljLXNlbGVjdC9keW5hbWljLXNlbGVjdC1maWVsZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgREVGQVVMVF9NT0RVTEFSX0xBQkVMUywgRm9sZGVyTm9kZSwgTW9kdWxhckxhYmVscyB9IGZyb20gJy4uL21vZHVsYXItdGFibGUtdGVtcGxhdGUubW9kZWxzJztcblxuaW50ZXJmYWNlIFBhcmVudE9wdGlvbiB7XG4gIGlkOiBudW1iZXI7XG4gIGxhYmVsOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0ZPTERFUl9DT0xPUiA9ICcjOTk5OTlFJztcblxuY29uc3QgUFJFU0VUX0ZPTERFUl9DT0xPUlM6IHN0cmluZ1tdID0gW1xuICBERUZBVUxUX0ZPTERFUl9DT0xPUixcbiAgJyM0RjQ2RTUnLFxuICAnIzA2QjZENCcsXG4gICcjMTBCOTgxJyxcbiAgJyNGNTlFMEInLFxuICAnI0VGNDQ0NCcsXG4gICcjRUM0ODk5JyxcbiAgJyM4QjVDRjYnLFxuXTtcblxuLyoqXG4gKiBCb2R5IG9mIHRoZSBcIk5ldyBGb2xkZXJcIiBkaWFsb2cuXG4gKlxuICogVXNlcyByZXVzYWJsZSBsaWJyYXJ5IGNvbXBvbmVudHMgKGBjcWEtY3VzdG9tLWlucHV0YCBmb3IgdGhlIG5hbWUgZmllbGQsXG4gKiBgY3FhLWR5bmFtaWMtc2VsZWN0YCBmb3IgdGhlIHBhcmVudCBkcm9wZG93bikgc28gaG9zdHMgY2FuIGRyb3AgdGhpcyBkaWFsb2dcbiAqIGludG8gdGhlaXIgb3duIG1vZGFsIHNoZWxsIHdpdGhvdXQgd29ycnlpbmcgYWJvdXQgc3R5bGluZyBkcmlmdC5cbiAqXG4gKiBUd28gaW50ZWdyYXRpb24gcGF0aHM6XG4gKlxuICogIDEuICoqRnJvbSB3aXRoaW4gdGhpcyBsaWJyYXJ5KiogdmlhIGBEaWFsb2dTZXJ2aWNlLm9wZW4oLi4uKWAuIFRoZSBvdXRlclxuICogICAgIGBjcWEtZGlhbG9nYCBzdXBwbGllcyB0aXRsZS9kZXNjcmlwdGlvbi9DYW5jZWwvQ3JlYXRlLWZvbGRlciBidXR0b25zOyB0aGVcbiAqICAgICBDcmVhdGUgYnV0dG9uIHJlYWRzIGBuYW1lYCArIGBwYXJlbnRJZGAgdmlhIGBnZXRDb21wb25lbnRJbnN0YW5jZSgpYC5cbiAqXG4gKiAgMi4gKipIb3N0LWRyaXZlbioqIOKAlCBob3N0IHJlbmRlcnMgYDxjcWEtbmV3LWZvbGRlci1kaWFsb2c+YCBpbnNpZGUgaXRzIG93blxuICogICAgIG1vZGFsIGFuZCBsaXN0ZW5zIHRvIGAoc3VibWl0dGVkKWAgLyBgKGNhbmNlbGxlZClgIC8gYChuYW1lQ2hhbmdlKWAgL1xuICogICAgIGAocGFyZW50SWRDaGFuZ2UpYC5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLW5ldy1mb2xkZXItZGlhbG9nJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtNSBjcWEtdy1mdWxsXCI+XG4gICAgICA8IS0tIEZvbGRlciBuYW1lIC0tPlxuICAgICAgPGNxYS1jdXN0b20taW5wdXRcbiAgICAgICAgW2xhYmVsXT1cImxhYmVscy5uZXdGb2xkZXJEaWFsb2dOYW1lTGFiZWxcIlxuICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJsYWJlbHMubmV3Rm9sZGVyRGlhbG9nTmFtZVBsYWNlaG9sZGVyXCJcbiAgICAgICAgW3ZhbHVlXT1cIm5hbWVcIlxuICAgICAgICBbZnVsbFdpZHRoXT1cInRydWVcIlxuICAgICAgICAodmFsdWVDaGFuZ2UpPVwib25OYW1lQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAoZW50ZXJQcmVzc2VkKT1cInN1Ym1pdCgpXCJcbiAgICAgID48L2NxYS1jdXN0b20taW5wdXQ+XG5cbiAgICAgIDwhLS0gUGFyZW50IGZvbGRlciAtLT5cbiAgICAgIDxjcWEtZHluYW1pYy1zZWxlY3RcbiAgICAgICAgY2xhc3M9XCJjcWEtYmxvY2sgY3FhLXctZnVsbFwiXG4gICAgICAgIFtmb3JtXT1cInBhcmVudEZvcm1cIlxuICAgICAgICBbY29uZmlnXT1cInBhcmVudFNlbGVjdENvbmZpZ1wiXG4gICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25QYXJlbnRTZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICA+PC9jcWEtZHluYW1pYy1zZWxlY3Q+XG5cbiAgICAgIDwhLS0gRm9sZGVyIGNvbG9yIChvcHRpb25hbCkgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMlwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJjcWEtdGV4dC1zbSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtbmV1dHJhbC03MDBcIj5cbiAgICAgICAgICB7eyBsYWJlbHMubmV3Rm9sZGVyRGlhbG9nQ29sb3JMYWJlbCB9fVxuICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTIuNSBjcWEtZmxleC13cmFwXCI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGMgb2YgcHJlc2V0Q29sb3JzXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJjcWEtcmVsYXRpdmUgY3FhLXctNyBjcWEtaC03IGNxYS1yb3VuZGVkLWZ1bGwgY3FhLWN1cnNvci1wb2ludGVyIGNxYS1ib3JkZXItMCBjcWEtcC0wIGNxYS10cmFuc2l0aW9uLXRyYW5zZm9ybVwiXG4gICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImNcIlxuICAgICAgICAgICAgW3N0eWxlLmJveFNoYWRvd109XCJpc0NvbG9yKGMpID8gKCcwIDAgMCAycHggI2ZmZmZmZiwgMCAwIDAgNHB4ICcgKyBjKSA6ICcwIDAgMCAxcHggcmdiYSgxNSwgMjMsIDQyLCAwLjA4KSdcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ29sb3JDaGFuZ2UoYylcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInU2V0IGZvbGRlciBjb2xvciAnICsgY1wiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLXByZXNzZWRdPVwiaXNDb2xvcihjKVwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiY1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgICAqbmdJZj1cImlzQ29sb3IoYylcIlxuICAgICAgICAgICAgICBjbGFzcz1cImNxYS1hYnNvbHV0ZSBjcWEtaW5zZXQtMCBjcWEtbS1hdXRvXCJcbiAgICAgICAgICAgICAgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjE0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHBhdGggZD1cIk01IDEybDQuNSA0LjVMMTkgN1wiIHN0cm9rZT1cIiNmZmZmZmZcIiBzdHJva2Utd2lkdGg9XCIzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgIGNsYXNzPVwiY3FhLXJlbGF0aXZlIGNxYS1pbmxpbmUtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtdy03IGNxYS1oLTcgY3FhLXJvdW5kZWQtZnVsbCBjcWEtY3Vyc29yLXBvaW50ZXIgY3FhLXRyYW5zaXRpb24tdHJhbnNmb3JtXCJcbiAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kXT1cInJhaW5ib3dCb3JkZXJcIlxuICAgICAgICAgICAgW3RpdGxlXT1cImlzQ3VzdG9tQ29sb3IgPyAoJ0N1c3RvbSBjb2xvciAoJyArIGNvbG9yICsgJyknKSA6ICdQaWNrIGEgY3VzdG9tIGNvbG9yJ1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgY2xhc3M9XCJjcWEtYWJzb2x1dGUgY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1jZW50ZXIgY3FhLXJvdW5kZWQtZnVsbFwiXG4gICAgICAgICAgICAgIFtzdHlsZS50b3AucHhdPVwiMlwiXG4gICAgICAgICAgICAgIFtzdHlsZS5yaWdodC5weF09XCIyXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmJvdHRvbS5weF09XCIyXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmxlZnQucHhdPVwiMlwiXG4gICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiaXNDdXN0b21Db2xvciA/IGNvbG9yIDogJyNmZmZmZmYnXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cIiFpc0N1c3RvbUNvbG9yXCIgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjE0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMiA1djE0TTUgMTJoMTRcIiBzdHJva2U9XCIjNTI1MjU4XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIi8+XG4gICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwiaXNDdXN0b21Db2xvclwiIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNSAxMmw0LjUgNC41TDE5IDdcIiBzdHJva2U9XCIjZmZmZmZmXCIgc3Ryb2tlLXdpZHRoPVwiM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgdHlwZT1cImNvbG9yXCJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cImNvbG9yXCJcbiAgICAgICAgICAgICAgKGlucHV0KT1cIm9uQ29sb3JJbnB1dEV2ZW50KCRldmVudClcIlxuICAgICAgICAgICAgICBjbGFzcz1cImNxYS1hYnNvbHV0ZSBjcWEtaW5zZXQtMCBjcWEtdy1mdWxsIGNxYS1oLWZ1bGwgY3FhLW9wYWNpdHktMCBjcWEtY3Vyc29yLXBvaW50ZXIgY3FhLWJvcmRlci0wIGNxYS1wLTBcIlxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiUGljayBjdXN0b20gZm9sZGVyIGNvbG9yXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVVcmxzOiBbXSxcbiAgaG9zdDogeyBjbGFzczogJ2NxYS11aS1yb290JyB9LFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgTmV3Rm9sZGVyRGlhbG9nQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgLy8gTk9URTogVGhlc2UgaW5wdXRzIGFyZSBkZWNsYXJlZCBhcyBzZXR0ZXJzIChpbnN0ZWFkIG9mIHBsYWluIEBJbnB1dCBmaWVsZHMpXG4gIC8vIGJlY2F1c2UgYERpYWxvZ1NlcnZpY2Uub3BlbiguLi4pYCBhc3NpZ25zIHRoZSBgaW5wdXRzYCBtYXAgdmlhIGRpcmVjdFxuICAvLyBwcm9wZXJ0eSBhc3NpZ25tZW50ICphZnRlciogYGF0dGFjaENvbXBvbmVudGAgaGFzIGFscmVhZHkgcnVuIHRoZVxuICAvLyBjb21wb25lbnQncyBgbmdPbkluaXRgLiBEaXJlY3QgYXNzaWdubWVudCBieXBhc3NlcyBgbmdPbkNoYW5nZXNgLCBzbyB3aXRob3V0XG4gIC8vIHNldHRlcnMgdGhlIGBwYXJlbnRTZWxlY3RDb25maWdgIHdvdWxkIGJlIGJ1aWx0IGZyb20gYSBkZWZhdWx0IGVtcHR5IGZvbGRlcnNcbiAgLy8gYXJyYXkgYW5kIHRoZSBwYXJlbnQtZm9sZGVyIGRyb3Bkb3duIHdvdWxkIHJlbmRlciBlbXB0eSAvIGFwcGVhciBicm9rZW4uXG5cbiAgcHJpdmF0ZSBfZm9sZGVyczogRm9sZGVyTm9kZVtdID0gW107XG4gIEBJbnB1dCgpIHNldCBmb2xkZXJzKHZhbHVlOiBGb2xkZXJOb2RlW10pIHtcbiAgICB0aGlzLl9mb2xkZXJzID0gdmFsdWUgfHwgW107XG4gICAgdGhpcy5yZWJ1aWxkT3B0aW9ucygpO1xuICAgIHRoaXMucmVidWlsZFNlbGVjdENvbmZpZygpO1xuICB9XG4gIGdldCBmb2xkZXJzKCk6IEZvbGRlck5vZGVbXSB7IHJldHVybiB0aGlzLl9mb2xkZXJzOyB9XG5cbiAgcHJpdmF0ZSBfbGFiZWxzOiBNb2R1bGFyTGFiZWxzID0geyAuLi5ERUZBVUxUX01PRFVMQVJfTEFCRUxTIH07XG4gIEBJbnB1dCgpIHNldCBsYWJlbHModmFsdWU6IE1vZHVsYXJMYWJlbHMpIHtcbiAgICB0aGlzLl9sYWJlbHMgPSB2YWx1ZSB8fCB7IC4uLkRFRkFVTFRfTU9EVUxBUl9MQUJFTFMgfTtcbiAgICB0aGlzLnJlYnVpbGRTZWxlY3RDb25maWcoKTtcbiAgfVxuICBnZXQgbGFiZWxzKCk6IE1vZHVsYXJMYWJlbHMgeyByZXR1cm4gdGhpcy5fbGFiZWxzOyB9XG5cbiAgQElucHV0KCkgbmFtZTogc3RyaW5nID0gJyc7XG5cbiAgcHJpdmF0ZSBfcGFyZW50SWQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBzZXQgcGFyZW50SWQodmFsdWU6IG51bWJlciB8IG51bGwpIHtcbiAgICB0aGlzLl9wYXJlbnRJZCA9IHZhbHVlID8/IG51bGw7XG4gICAgdGhpcy5zeW5jUGFyZW50Q29udHJvbCgpO1xuICB9XG4gIGdldCBwYXJlbnRJZCgpOiBudW1iZXIgfCBudWxsIHsgcmV0dXJuIHRoaXMuX3BhcmVudElkOyB9XG5cbiAgQElucHV0KCkgY29sb3I6IHN0cmluZyA9IERFRkFVTFRfRk9MREVSX0NPTE9SO1xuXG4gIHJlYWRvbmx5IHByZXNldENvbG9yczogc3RyaW5nW10gPSBQUkVTRVRfRk9MREVSX0NPTE9SUztcbiAgcmVhZG9ubHkgcmFpbmJvd0JvcmRlcjogc3RyaW5nID1cbiAgICAnY29uaWMtZ3JhZGllbnQoZnJvbSAwZGVnLCAjZWY0NDQ0LCAjZjU5ZTBiLCAjZWFiMzA4LCAjMTBiOTgxLCAjMDZiNmQ0LCAjNGY0NmU1LCAjOGI1Y2Y2LCAjZWM0ODk5LCAjZWY0NDQ0KSc7XG5cbiAgQE91dHB1dCgpIG5hbWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIHBhcmVudElkQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXIgfCBudWxsPigpO1xuICBAT3V0cHV0KCkgY29sb3JDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIHN1Ym1pdHRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBuYW1lOiBzdHJpbmc7IHBhcmVudElkOiBudW1iZXIgfCBudWxsOyBjb2xvcjogc3RyaW5nIH0+KCk7XG4gIEBPdXRwdXQoKSBjYW5jZWxsZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgLyoqIFJlYWN0aXZlIGZvcm0gdXNlZCBieSBjcWEtZHluYW1pYy1zZWxlY3QuIFVudHlwZWQgdG8gbWF0Y2ggdGhlIHByb2plY3QncyBBbmd1bGFyIDEzLjQgZm9ybXMgQVBJLiAqL1xuICBwYXJlbnRGb3JtID0gbmV3IEZvcm1Hcm91cCh7IHBhcmVudElkOiBuZXcgRm9ybUNvbnRyb2wobnVsbCkgfSk7XG5cbiAgLyoqXG4gICAqIENvbmZpZyBwYXNzZWQgdG8gYGNxYS1keW5hbWljLXNlbGVjdGAuIFN0b3JlZCBhcyBhIGZpZWxkIChub3QgYSBnZXR0ZXIpIHNvXG4gICAqIHRoZSBvYmplY3QgcmVmZXJlbmNlIGlzIHN0YWJsZSBhY3Jvc3MgY2hhbmdlLWRldGVjdGlvbiBwYXNzZXMg4oCUIGEgZ2V0dGVyXG4gICAqIHJldHVybnMgYSBmcmVzaCBvYmplY3QgZXZlcnkgQ0QgdGljayBhbmQgY2F1c2VzXG4gICAqIGBFeHByZXNzaW9uQ2hhbmdlZEFmdGVySXRIYXNCZWVuQ2hlY2tlZEVycm9yYCArIHJlcGVhdGVkIGBuZ09uQ2hhbmdlc2Agb25cbiAgICogdGhlIGNoaWxkIHNlbGVjdC4gT3RoZXIgY29uc3VtZXJzIGluIHRoaXMgbGliIChlLmcuIGBsb29wLXN0ZXBgKSBmb2xsb3dcbiAgICogdGhlIHNhbWUgcGF0dGVybi5cbiAgICovXG4gIHBhcmVudFNlbGVjdENvbmZpZyE6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZztcblxuICBwcml2YXRlIHBhcmVudE9wdGlvbnM6IFBhcmVudE9wdGlvbltdID0gW107XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gICAgdGhpcy5yZWJ1aWxkU2VsZWN0Q29uZmlnKCk7IC8vIGVuc3VyZSBjb25maWcgZXhpc3RzIGV2ZW4gYmVmb3JlIGZpcnN0IGlucHV0IHNldFxuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgLy8gU2V0dGVycyBhYm92ZSBhbHJlYWR5IHJlYnVpbHQgY29uZmlnIG9uY2UgZm9sZGVycy9sYWJlbHMgd2VyZSBhc3NpZ25lZC4gVGhpc1xuICAgIC8vIGp1c3QgZW5zdXJlcyB0aGUgZm9ybSBjb250cm9sIG1hdGNoZXMgdGhlIGN1cnJlbnQgcGFyZW50SWQgdmFsdWUgaW4gY2FzZVxuICAgIC8vIG9yZGVyaW5nIG9mIGlucHV0IGFzc2lnbm1lbnQgZGlmZmVycy5cbiAgICB0aGlzLnN5bmNQYXJlbnRDb250cm9sKCk7XG4gIH1cblxuICBwcml2YXRlIHJlYnVpbGRTZWxlY3RDb25maWcoKTogdm9pZCB7XG4gICAgdGhpcy5wYXJlbnRTZWxlY3RDb25maWcgPSB7XG4gICAgICBrZXk6ICdwYXJlbnRJZCcsXG4gICAgICBsYWJlbDogdGhpcy5sYWJlbHMubmV3Rm9sZGVyRGlhbG9nUGFyZW50TGFiZWwsXG4gICAgICBwbGFjZWhvbGRlcjogdGhpcy5sYWJlbHMubmV3Rm9sZGVyRGlhbG9nUGFyZW50Tm9uZSxcbiAgICAgIHNlYXJjaGFibGU6IGZhbHNlLFxuICAgICAgbXVsdGlwbGU6IGZhbHNlLFxuICAgICAgY2xvc2VPblNlbGVjdDogdHJ1ZSxcbiAgICAgIG9wdGlvbnM6IFtcbiAgICAgICAgLy8gYGdldE9wdGlvblZhbHVlYCBpbiBjcWEtZHluYW1pYy1zZWxlY3QgcmV0dXJucyBgaWQgPz8gdmFsdWVgLCBzbyB1c2luZ1xuICAgICAgICAvLyBgdmFsdWU6IG51bGxgICh3aXRoIG5vIGlkKSB5aWVsZHMgYSBzdGFibGUgYG51bGxgIHJlc29sdmVkIHZhbHVlIHRoYXRcbiAgICAgICAgLy8gbWF0Y2hlcyB0aGUgRm9ybUNvbnRyb2wncyBudWxsIHN0YXRlLlxuICAgICAgICB7IHZhbHVlOiBudWxsLCBuYW1lOiB0aGlzLmxhYmVscy5uZXdGb2xkZXJEaWFsb2dQYXJlbnROb25lIH0sXG4gICAgICAgIC4uLnRoaXMucGFyZW50T3B0aW9ucy5tYXAobyA9PiAoeyBpZDogby5pZCwgbmFtZTogby5sYWJlbCB9KSksXG4gICAgICBdLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHJlYnVpbGRPcHRpb25zKCk6IHZvaWQge1xuICAgIGNvbnN0IG9wdHM6IFBhcmVudE9wdGlvbltdID0gW107XG4gICAgY29uc3Qgd2FsayA9IChub2RlczogRm9sZGVyTm9kZVtdLCB0cmFpbDogc3RyaW5nW10pOiB2b2lkID0+IHtcbiAgICAgIGZvciAoY29uc3QgbiBvZiBub2RlcyB8fCBbXSkge1xuICAgICAgICBjb25zdCBsYWJlbCA9IFsuLi50cmFpbCwgbi5uYW1lXS5qb2luKCcg4oC6ICcpO1xuICAgICAgICBvcHRzLnB1c2goeyBpZDogbi5pZCwgbGFiZWwgfSk7XG4gICAgICAgIGlmIChuLmNoaWxkcmVuPy5sZW5ndGgpIHdhbGsobi5jaGlsZHJlbiwgWy4uLnRyYWlsLCBuLm5hbWVdKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHdhbGsodGhpcy5mb2xkZXJzLCBbXSk7XG4gICAgdGhpcy5wYXJlbnRPcHRpb25zID0gb3B0cztcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgc3luY1BhcmVudENvbnRyb2woKTogdm9pZCB7XG4gICAgLy8gS2VlcCB0aGUgcmVhY3RpdmUgZm9ybSBpbiBzeW5jIHdpdGggdGhlIGBwYXJlbnRJZGAgaW5wdXQgd2l0aG91dCBib3VuY2luZyBldmVudHMuXG4gICAgdGhpcy5wYXJlbnRGb3JtLmdldCgncGFyZW50SWQnKT8uc2V0VmFsdWUodGhpcy5wYXJlbnRJZCA/PyBudWxsLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gIH1cblxuICBvbk5hbWVDaGFuZ2UodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMubmFtZSA9IHZhbHVlO1xuICAgIHRoaXMubmFtZUNoYW5nZS5lbWl0KHZhbHVlKTtcbiAgfVxuXG4gIG9uUGFyZW50U2VsZWN0aW9uQ2hhbmdlKGV2ZW50OiB7IGtleTogc3RyaW5nOyB2YWx1ZTogYW55IH0pOiB2b2lkIHtcbiAgICAvLyBjcWEtZHluYW1pYy1zZWxlY3QgcmVzb2x2ZXMgb3B0aW9ucyB0byBgaWQgPz8gdmFsdWVgOyBvcHRpb24gaWRzIGluIHRoZVxuICAgIC8vIHBhcmVudCB0cmVlIGFyZSBudW1lcmljIHNvIHdlIGNvZXJjZSBkZWZlbnNpdmVseS5cbiAgICBjb25zdCByYXcgPSBldmVudD8udmFsdWU7XG4gICAgbGV0IG5leHQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAgIGlmIChyYXcgIT0gbnVsbCkge1xuICAgICAgY29uc3QgY29lcmNlZCA9IHR5cGVvZiByYXcgPT09ICdudW1iZXInID8gcmF3IDogTnVtYmVyKHJhdyk7XG4gICAgICBpZiAoTnVtYmVyLmlzRmluaXRlKGNvZXJjZWQpKSBuZXh0ID0gY29lcmNlZDtcbiAgICB9XG4gICAgdGhpcy5wYXJlbnRJZCA9IG5leHQ7XG4gICAgdGhpcy5wYXJlbnRJZENoYW5nZS5lbWl0KG5leHQpO1xuICB9XG5cbiAgaXNDb2xvcihjOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKHRoaXMuY29sb3IgfHwgJycpLnRvTG93ZXJDYXNlKCkgPT09IChjIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuICB9XG5cbiAgZ2V0IGlzQ3VzdG9tQ29sb3IoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgYyA9ICh0aGlzLmNvbG9yIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiAhIWMgJiYgIXRoaXMucHJlc2V0Q29sb3JzLnNvbWUocCA9PiBwLnRvTG93ZXJDYXNlKCkgPT09IGMpO1xuICB9XG5cbiAgb25Db2xvckNoYW5nZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgbmV4dCA9IHZhbHVlIHx8IERFRkFVTFRfRk9MREVSX0NPTE9SO1xuICAgIGlmICh0aGlzLmNvbG9yID09PSBuZXh0KSByZXR1cm47XG4gICAgdGhpcy5jb2xvciA9IG5leHQ7XG4gICAgdGhpcy5jb2xvckNoYW5nZS5lbWl0KG5leHQpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb25Db2xvcklucHV0RXZlbnQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQgfCBudWxsO1xuICAgIGlmICh0YXJnZXQpIHRoaXMub25Db2xvckNoYW5nZSh0YXJnZXQudmFsdWUpO1xuICB9XG5cbiAgLyoqIFJldHVybnMgdHJ1ZSB3aGVuIHRoZSBjdXJyZW50IHN0YXRlIGlzIGEgdmFsaWQgc3VibWlzc2lvbiAobm9uLWVtcHR5LCB0cmltbWVkIG5hbWUpLiAqL1xuICBnZXQgaXNWYWxpZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISEodGhpcy5uYW1lIHx8ICcnKS50cmltKCk7XG4gIH1cblxuICBzdWJtaXQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybjtcbiAgICB0aGlzLnN1Ym1pdHRlZC5lbWl0KHtcbiAgICAgIG5hbWU6ICh0aGlzLm5hbWUgfHwgJycpLnRyaW0oKSxcbiAgICAgIHBhcmVudElkOiB0aGlzLnBhcmVudElkLFxuICAgICAgY29sb3I6IHRoaXMuY29sb3IgfHwgREVGQVVMVF9GT0xERVJfQ09MT1IsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
344
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV3LWZvbGRlci1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi90ZW1wbGF0ZXMvbW9kdWxhci10YWJsZS10ZW1wbGF0ZS9kaWFsb2dzL25ldy1mb2xkZXItZGlhbG9nLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsc0JBQXNCLEVBQTZCLE1BQU0sa0NBQWtDLENBQUM7Ozs7O0FBRXJHLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLFNBQVMsQ0FBQztBQUU5QyxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxFQUFFLENBQUM7QUFFekMsTUFBTSxvQkFBb0IsR0FBYTtJQUNyQyxvQkFBb0I7SUFDcEIsU0FBUztJQUNULFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztJQUNULFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztDQUNWLENBQUM7QUFFRjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBNkZILE1BQU0sT0FBTyx3QkFBd0I7SUFpRG5DLFlBQW9CLEdBQXNCO1FBQXRCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBaEQxQyx3RkFBd0Y7UUFDeEYsaUZBQWlGO1FBQ2pGLGlGQUFpRjtRQUNqRixrRkFBa0Y7UUFDbEYsc0VBQXNFO1FBRTlELGFBQVEsR0FBaUIsRUFBRSxDQUFDO1FBTzVCLFlBQU8sR0FBa0IsRUFBRSxHQUFHLHNCQUFzQixFQUFFLENBQUM7UUFRdEQsU0FBSSxHQUFXLEVBQUUsQ0FBQztRQUUzQjs0RkFDb0Y7UUFDNUUsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFFbkIsa0JBQWEsR0FBRyxzQkFBc0IsQ0FBQztRQUV2QyxhQUFRLEdBQWtCLElBQUksQ0FBQztR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ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPdXRwdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgREVGQVVMVF9NT0RVTEFSX0xBQkVMUywgRm9sZGVyTm9kZSwgTW9kdWxhckxhYmVscyB9IGZyb20gJy4uL21vZHVsYXItdGFibGUtdGVtcGxhdGUubW9kZWxzJztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfRk9MREVSX0NPTE9SID0gJyM5OTk5OUUnO1xuXG5leHBvcnQgY29uc3QgRk9MREVSX05BTUVfTUFYX0xFTkdUSCA9IDIwO1xuXG5jb25zdCBQUkVTRVRfRk9MREVSX0NPTE9SUzogc3RyaW5nW10gPSBbXG4gIERFRkFVTFRfRk9MREVSX0NPTE9SLFxuICAnIzRGNDZFNScsXG4gICcjMDZCNkQ0JyxcbiAgJyMxMEI5ODEnLFxuICAnI0Y1OUUwQicsXG4gICcjRUY0NDQ0JyxcbiAgJyNFQzQ4OTknLFxuICAnIzhCNUNGNicsXG5dO1xuXG4vKipcbiAqIEJvZHkgb2YgdGhlIFwiTmV3IEZvbGRlclwiIGRpYWxvZy5cbiAqXG4gKiBVc2VzIHJldXNhYmxlIGxpYnJhcnkgY29tcG9uZW50cyAoYGNxYS1jdXN0b20taW5wdXRgIGZvciB0aGUgbmFtZSBmaWVsZCxcbiAqIGBjcWEtbW92ZS10by1mb2xkZXItZGlhbG9nYCBhcyBhbiBlbWJlZGRlZCB0cmVlIHBpY2tlciBmb3IgdGhlIHBhcmVudCBmb2xkZXIpXG4gKiBzbyBob3N0cyBjYW4gZHJvcCB0aGlzIGRpYWxvZyBpbnRvIHRoZWlyIG93biBtb2RhbCBzaGVsbCB3aXRob3V0IHdvcnJ5aW5nXG4gKiBhYm91dCBzdHlsaW5nIGRyaWZ0LiBUaGUgdHJlZSBwaWNrZXIgaGFuZGxlcyBhcmJpdHJhcmlseSBkZWVwIG5lc3RpbmcgdmlhXG4gKiBleHBhbmQvY29sbGFwc2UgcmF0aGVyIHRoYW4gYSBmbGF0IGRyb3Bkb3duIG9mIFwiQSDigLogQiDigLogQyDigLrigKZcIiBwYXRocy5cbiAqXG4gKiBUd28gaW50ZWdyYXRpb24gcGF0aHM6XG4gKlxuICogIDEuICoqRnJvbSB3aXRoaW4gdGhpcyBsaWJyYXJ5KiogdmlhIGBEaWFsb2dTZXJ2aWNlLm9wZW4oLi4uKWAuIFRoZSBvdXRlclxuICogICAgIGBjcWEtZGlhbG9nYCBzdXBwbGllcyB0aXRsZS9kZXNjcmlwdGlvbi9DYW5jZWwvQ3JlYXRlLWZvbGRlciBidXR0b25zOyB0aGVcbiAqICAgICBDcmVhdGUgYnV0dG9uIHJlYWRzIGBuYW1lYCArIGBwYXJlbnRJZGAgdmlhIGBnZXRDb21wb25lbnRJbnN0YW5jZSgpYC5cbiAqXG4gKiAgMi4gKipIb3N0LWRyaXZlbioqIOKAlCBob3N0IHJlbmRlcnMgYDxjcWEtbmV3LWZvbGRlci1kaWFsb2c+YCBpbnNpZGUgaXRzIG93blxuICogICAgIG1vZGFsIGFuZCBsaXN0ZW5zIHRvIGAoc3VibWl0dGVkKWAgLyBgKGNhbmNlbGxlZClgIC8gYChuYW1lQ2hhbmdlKWAgL1xuICogICAgIGAocGFyZW50SWRDaGFuZ2UpYC5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLW5ldy1mb2xkZXItZGlhbG9nJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtNSBjcWEtdy1mdWxsXCI+XG4gICAgICA8IS0tIEZvbGRlciBuYW1lIC0tPlxuICAgICAgPGNxYS1jdXN0b20taW5wdXRcbiAgICAgICAgW2xhYmVsXT1cImxhYmVscy5uZXdGb2xkZXJEaWFsb2dOYW1lTGFiZWxcIlxuICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJsYWJlbHMubmV3Rm9sZGVyRGlhbG9nTmFtZVBsYWNlaG9sZGVyXCJcbiAgICAgICAgW3ZhbHVlXT1cIm5hbWVcIlxuICAgICAgICBbZXJyb3JzXT1cIm5hbWVFcnJvcnNcIlxuICAgICAgICBbZnVsbFdpZHRoXT1cInRydWVcIlxuICAgICAgICAodmFsdWVDaGFuZ2UpPVwib25OYW1lQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAoZW50ZXJQcmVzc2VkKT1cInN1Ym1pdCgpXCJcbiAgICAgID48L2NxYS1jdXN0b20taW5wdXQ+XG5cbiAgICAgIDwhLS0gUGFyZW50IGZvbGRlciDigJQgdHJlZSBwaWNrZXIgKGhhbmRsZXMgYXJiaXRyYXJpbHkgZGVlcCBuZXN0aW5nIHZpYSBleHBhbmQvY29sbGFwc2UpIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTJcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiY3FhLXRleHQtc20gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LW5ldXRyYWwtNzAwXCI+XG4gICAgICAgICAge3sgbGFiZWxzLm5ld0ZvbGRlckRpYWxvZ1BhcmVudExhYmVsIH19XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDxjcWEtbW92ZS10by1mb2xkZXItZGlhbG9nXG4gICAgICAgICAgW2ZvbGRlcnNdPVwiZm9sZGVyc1wiXG4gICAgICAgICAgW2xhYmVsc109XCJwYXJlbnRQaWNrZXJMYWJlbHNcIlxuICAgICAgICAgIFtwaWNrZWRGb2xkZXJJZF09XCJwYXJlbnRJZFwiXG4gICAgICAgICAgW3BpY2tlckhlaWdodF09XCInMjQwcHgnXCJcbiAgICAgICAgICAocGlja2VkRm9sZGVySWRDaGFuZ2UpPVwib25QYXJlbnRQaWNrZWQoJGV2ZW50KVwiXG4gICAgICAgID48L2NxYS1tb3ZlLXRvLWZvbGRlci1kaWFsb2c+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBGb2xkZXIgY29sb3IgKG9wdGlvbmFsKSAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0yXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1uZXV0cmFsLTcwMFwiPlxuICAgICAgICAgIHt7IGxhYmVscy5uZXdGb2xkZXJEaWFsb2dDb2xvckxhYmVsIH19XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMi41IGNxYS1mbGV4LXdyYXBcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgYyBvZiBwcmVzZXRDb2xvcnNcIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cImNxYS1yZWxhdGl2ZSBjcWEtdy03IGNxYS1oLTcgY3FhLXJvdW5kZWQtZnVsbCBjcWEtY3Vyc29yLXBvaW50ZXIgY3FhLWJvcmRlci0wIGNxYS1wLTAgY3FhLXRyYW5zaXRpb24tdHJhbnNmb3JtXCJcbiAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiY1wiXG4gICAgICAgICAgICBbc3R5bGUuYm94U2hhZG93XT1cImlzQ29sb3IoYykgPyAoJzAgMCAwIDJweCAjZmZmZmZmLCAwIDAgMCA0cHggJyArIGMpIDogJzAgMCAwIDFweCByZ2JhKDE1LCAyMywgNDIsIDAuMDgpJ1wiXG4gICAgICAgICAgICAoY2xpY2spPVwib25Db2xvckNoYW5nZShjKVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidTZXQgZm9sZGVyIGNvbG9yICcgKyBjXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtcHJlc3NlZF09XCJpc0NvbG9yKGMpXCJcbiAgICAgICAgICAgIFt0aXRsZV09XCJjXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICAgICpuZ0lmPVwiaXNDb2xvcihjKVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiY3FhLWFic29sdXRlIGNxYS1pbnNldC0wIGNxYS1tLWF1dG9cIlxuICAgICAgICAgICAgICB3aWR0aD1cIjE0XCIgaGVpZ2h0PVwiMTRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8cGF0aCBkPVwiTTUgMTJsNC41IDQuNUwxOSA3XCIgc3Ryb2tlPVwiI2ZmZmZmZlwiIHN0cm9rZS13aWR0aD1cIjNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgY2xhc3M9XCJjcWEtcmVsYXRpdmUgY3FhLWlubGluZS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktY2VudGVyIGNxYS13LTcgY3FhLWgtNyBjcWEtcm91bmRlZC1mdWxsIGNxYS1jdXJzb3ItcG9pbnRlciBjcWEtdHJhbnNpdGlvbi10cmFuc2Zvcm1cIlxuICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwicmFpbmJvd0JvcmRlclwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiaXNDdXN0b21Db2xvciA/ICgnQ3VzdG9tIGNvbG9yICgnICsgY29sb3IgKyAnKScpIDogJ1BpY2sgYSBjdXN0b20gY29sb3InXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICBjbGFzcz1cImNxYS1hYnNvbHV0ZSBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtcm91bmRlZC1mdWxsXCJcbiAgICAgICAgICAgICAgW3N0eWxlLnRvcC5weF09XCIyXCJcbiAgICAgICAgICAgICAgW3N0eWxlLnJpZ2h0LnB4XT1cIjJcIlxuICAgICAgICAgICAgICBbc3R5bGUuYm90dG9tLnB4XT1cIjJcIlxuICAgICAgICAgICAgICBbc3R5bGUubGVmdC5weF09XCIyXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJpc0N1c3RvbUNvbG9yID8gY29sb3IgOiAnI2ZmZmZmZidcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwiIWlzQ3VzdG9tQ29sb3JcIiB3aWR0aD1cIjE0XCIgaGVpZ2h0PVwiMTRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEyIDV2MTRNNSAxMmgxNFwiIHN0cm9rZT1cIiM1MjUyNThcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiLz5cbiAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCJpc0N1c3RvbUNvbG9yXCIgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjE0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk01IDEybDQuNSA0LjVMMTkgN1wiIHN0cm9rZT1cIiNmZmZmZmZcIiBzdHJva2Utd2lkdGg9XCIzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICB0eXBlPVwiY29sb3JcIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwiY29sb3JcIlxuICAgICAgICAgICAgICAoaW5wdXQpPVwib25Db2xvcklucHV0RXZlbnQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiY3FhLWFic29sdXRlIGNxYS1pbnNldC0wIGNxYS13LWZ1bGwgY3FhLWgtZnVsbCBjcWEtb3BhY2l0eS0wIGNxYS1jdXJzb3ItcG9pbnRlciBjcWEtYm9yZGVyLTAgY3FhLXAtMFwiXG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJQaWNrIGN1c3RvbSBmb2xkZXIgY29sb3JcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZVVybHM6IFtdLFxuICBob3N0OiB7IGNsYXNzOiAnY3FhLXVpLXJvb3QnIH0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBOZXdGb2xkZXJEaWFsb2dDb21wb25lbnQge1xuICAvLyBOT1RFOiBgZm9sZGVyc2AgYW5kIGBsYWJlbHNgIGFyZSBkZWNsYXJlZCBhcyBzZXR0ZXJzIChpbnN0ZWFkIG9mIHBsYWluIEBJbnB1dCBmaWVsZHMpXG4gIC8vIGJlY2F1c2UgYERpYWxvZ1NlcnZpY2Uub3BlbiguLi4pYCBhc3NpZ25zIHRoZSBgaW5wdXRzYCBtYXAgdmlhIGRpcmVjdCBwcm9wZXJ0eVxuICAvLyBhc3NpZ25tZW50ICphZnRlciogYGF0dGFjaENvbXBvbmVudGAgaGFzIGFscmVhZHkgcnVuIHRoZSBjb21wb25lbnQncyBsaWZlY3ljbGVcbiAgLy8gaG9va3Mg4oCUIGRpcmVjdCBhc3NpZ25tZW50IGJ5cGFzc2VzIGBuZ09uQ2hhbmdlc2AsIHNvIHNldHRlcnMga2VlcCBkZXJpdmVkIHN0YXRlXG4gIC8vIChlLmcuIGBwYXJlbnRQaWNrZXJMYWJlbHNgKSBpbiBzeW5jIG5vIG1hdHRlciB0aGUgYXNzaWdubWVudCBvcmRlci5cblxuICBwcml2YXRlIF9mb2xkZXJzOiBGb2xkZXJOb2RlW10gPSBbXTtcbiAgQElucHV0KCkgc2V0IGZvbGRlcnModmFsdWU6IEZvbGRlck5vZGVbXSkge1xuICAgIHRoaXMuX2ZvbGRlcnMgPSB2YWx1ZSB8fCBbXTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuICBnZXQgZm9sZGVycygpOiBGb2xkZXJOb2RlW10geyByZXR1cm4gdGhpcy5fZm9sZGVyczsgfVxuXG4gIHByaXZhdGUgX2xhYmVsczogTW9kdWxhckxhYmVscyA9IHsgLi4uREVGQVVMVF9NT0RVTEFSX0xBQkVMUyB9O1xuICBASW5wdXQoKSBzZXQgbGFiZWxzKHZhbHVlOiBNb2R1bGFyTGFiZWxzKSB7XG4gICAgdGhpcy5fbGFiZWxzID0gdmFsdWUgfHwgeyAuLi5ERUZBVUxUX01PRFVMQVJfTEFCRUxTIH07XG4gICAgdGhpcy5wYXJlbnRQaWNrZXJMYWJlbHMgPSB0aGlzLmJ1aWxkUGFyZW50UGlja2VyTGFiZWxzKCk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cbiAgZ2V0IGxhYmVscygpOiBNb2R1bGFyTGFiZWxzIHsgcmV0dXJuIHRoaXMuX2xhYmVsczsgfVxuXG4gIEBJbnB1dCgpIG5hbWU6IHN0cmluZyA9ICcnO1xuXG4gIC8qKiBUcmFja3Mgd2hldGhlciB0aGUgdXNlciBoYXMgaW50ZXJhY3RlZCB3aXRoIHRoZSBuYW1lIGZpZWxkLCBzbyB3ZSBkb24ndCBzdXJmYWNlXG4gICAqICB0aGUgXCJyZXF1aXJlZFwiIGVycm9yIG9uIGZpcnN0IHBhaW50IHdoZW4gdGhlIGRpYWxvZyBvcGVucyB3aXRoIGFuIGVtcHR5IG5hbWUuICovXG4gIHByaXZhdGUgbmFtZVRvdWNoZWQgPSBmYWxzZTtcblxuICByZWFkb25seSBtYXhOYW1lTGVuZ3RoID0gRk9MREVSX05BTUVfTUFYX0xFTkdUSDtcblxuICBASW5wdXQoKSBwYXJlbnRJZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgQElucHV0KCkgY29sb3I6IHN0cmluZyA9IERFRkFVTFRfRk9MREVSX0NPTE9SO1xuXG4gIHJlYWRvbmx5IHByZXNldENvbG9yczogc3RyaW5nW10gPSBQUkVTRVRfRk9MREVSX0NPTE9SUztcbiAgcmVhZG9ubHkgcmFpbmJvd0JvcmRlcjogc3RyaW5nID1cbiAgICAnY29uaWMtZ3JhZGllbnQoZnJvbSAwZGVnLCAjZWY0NDQ0LCAjZjU5ZTBiLCAjZWFiMzA4LCAjMTBiOTgxLCAjMDZiNmQ0LCAjNGY0NmU1LCAjOGI1Y2Y2LCAjZWM0ODk5LCAjZWY0NDQ0KSc7XG5cbiAgQE91dHB1dCgpIG5hbWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIHBhcmVudElkQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXIgfCBudWxsPigpO1xuICBAT3V0cHV0KCkgY29sb3JDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIHN1Ym1pdHRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBuYW1lOiBzdHJpbmc7IHBhcmVudElkOiBudW1iZXIgfCBudWxsOyBjb2xvcjogc3RyaW5nIH0+KCk7XG4gIEBPdXRwdXQoKSBjYW5jZWxsZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgLyoqIExhYmVscyBwYXNzZWQgdG8gdGhlIGVtYmVkZGVkIHRyZWUgcGlja2VyLiBSZS11c2VzIHRoZSBtb3ZlLWRpYWxvZyBzdXJmYWNlIGJ1dFxuICAgKiAgcmV3cml0ZXMgdGhlIHJvb3Qgcm93J3MgbGFiZWwgc28gaXQgcmVhZHMgXCIobm8gcGFyZW50KVwiIGluc3RlYWQgb2YgXCJVbm9yZ2FuaXNlZFwiXG4gICAqICBmb3IgdGhlIGNyZWF0ZS1mb2xkZXIgY29udGV4dC4gKi9cbiAgcGFyZW50UGlja2VyTGFiZWxzOiBNb2R1bGFyTGFiZWxzID0gdGhpcy5idWlsZFBhcmVudFBpY2tlckxhYmVscygpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge31cblxuICBwcml2YXRlIGJ1aWxkUGFyZW50UGlja2VyTGFiZWxzKCk6IE1vZHVsYXJMYWJlbHMge1xuICAgIHJldHVybiB7IC4uLnRoaXMuX2xhYmVscywgbW92ZURpYWxvZ1Jvb3Q6IHRoaXMuX2xhYmVscy5uZXdGb2xkZXJEaWFsb2dQYXJlbnROb25lIH07XG4gIH1cblxuICBvbk5hbWVDaGFuZ2UodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMubmFtZSA9IHZhbHVlO1xuICAgIHRoaXMubmFtZVRvdWNoZWQgPSB0cnVlO1xuICAgIHRoaXMubmFtZUNoYW5nZS5lbWl0KHZhbHVlKTtcbiAgfVxuXG4gIG9uUGFyZW50UGlja2VkKGlkOiBudW1iZXIgfCBudWxsKTogdm9pZCB7XG4gICAgLy8gVGhlIHRyZWUgcGlja2VyIGVtaXRzIGBudWxsYCBmb3IgdGhlIFwiKG5vIHBhcmVudClcIiBzZW50aW5lbDsgbnVtZXJpYyBvdGhlcndpc2UuXG4gICAgbGV0IG5leHQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICBjb25zdCBjb2VyY2VkID0gdHlwZW9mIGlkID09PSAnbnVtYmVyJyA/IGlkIDogTnVtYmVyKGlkKTtcbiAgICAgIGlmIChOdW1iZXIuaXNGaW5pdGUoY29lcmNlZCkpIG5leHQgPSBjb2VyY2VkO1xuICAgIH1cbiAgICB0aGlzLnBhcmVudElkID0gbmV4dDtcbiAgICB0aGlzLnBhcmVudElkQ2hhbmdlLmVtaXQobmV4dCk7XG4gIH1cblxuICBpc0NvbG9yKGM6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAodGhpcy5jb2xvciB8fCAnJykudG9Mb3dlckNhc2UoKSA9PT0gKGMgfHwgJycpLnRvTG93ZXJDYXNlKCk7XG4gIH1cblxuICBnZXQgaXNDdXN0b21Db2xvcigpOiBib29sZWFuIHtcbiAgICBjb25zdCBjID0gKHRoaXMuY29sb3IgfHwgJycpLnRvTG93ZXJDYXNlKCk7XG4gICAgcmV0dXJuICEhYyAmJiAhdGhpcy5wcmVzZXRDb2xvcnMuc29tZShwID0+IHAudG9Mb3dlckNhc2UoKSA9PT0gYyk7XG4gIH1cblxuICBvbkNvbG9yQ2hhbmdlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBuZXh0ID0gdmFsdWUgfHwgREVGQVVMVF9GT0xERVJfQ09MT1I7XG4gICAgaWYgKHRoaXMuY29sb3IgPT09IG5leHQpIHJldHVybjtcbiAgICB0aGlzLmNvbG9yID0gbmV4dDtcbiAgICB0aGlzLmNvbG9yQ2hhbmdlLmVtaXQobmV4dCk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBvbkNvbG9ySW5wdXRFdmVudChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCB8IG51bGw7XG4gICAgaWYgKHRhcmdldCkgdGhpcy5vbkNvbG9yQ2hhbmdlKHRhcmdldC52YWx1ZSk7XG4gIH1cblxuICAvKiogRXJyb3JzIHN1cmZhY2VkIHVuZGVyIHRoZSBuYW1lIGZpZWxkLiBPbmx5IGNvbXB1dGVkIG9uY2UgdGhlIHVzZXIgaGFzIHRvdWNoZWRcbiAgICogIHRoZSBpbnB1dCBzbyB0aGUgZGlhbG9nIGRvZXNuJ3Qgb3BlbiB3aXRoIGEgXCJyZXF1aXJlZFwiIGVycm9yIGFscmVhZHkgc2hvd2luZy4gKi9cbiAgZ2V0IG5hbWVFcnJvcnMoKTogc3RyaW5nW10ge1xuICAgIGlmICghdGhpcy5uYW1lVG91Y2hlZCkgcmV0dXJuIFtdO1xuICAgIGNvbnN0IHRyaW1tZWQgPSAodGhpcy5uYW1lIHx8ICcnKS50cmltKCk7XG4gICAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGlmICghdHJpbW1lZCkge1xuICAgICAgZXJyb3JzLnB1c2godGhpcy5sYWJlbHMubmV3Rm9sZGVyRGlhbG9nTmFtZVJlcXVpcmVkRXJyb3IpO1xuICAgIH0gZWxzZSBpZiAodHJpbW1lZC5sZW5ndGggPiB0aGlzLm1heE5hbWVMZW5ndGgpIHtcbiAgICAgIGVycm9ycy5wdXNoKHRoaXMubGFiZWxzLm5ld0ZvbGRlckRpYWxvZ05hbWVNYXhMZW5ndGhFcnJvcik7XG4gICAgfVxuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICAvKiogUmV0dXJucyB0cnVlIHdoZW4gdGhlIGN1cnJlbnQgc3RhdGUgaXMgYSB2YWxpZCBzdWJtaXNzaW9uIChub24tZW1wdHkgdHJpbW1lZCBuYW1lXG4gICAqICB3aXRoaW4gdGhlIG1heCBsZW5ndGgpLiBVc2VkIGJ5IHRoZSBob3N0IHRvIGdhdGUgdGhlIGRpYWxvZydzIENyZWF0ZSBidXR0b24uICovXG4gIGdldCBpc1ZhbGlkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHRyaW1tZWQgPSAodGhpcy5uYW1lIHx8ICcnKS50cmltKCk7XG4gICAgcmV0dXJuIHRyaW1tZWQubGVuZ3RoID4gMCAmJiB0cmltbWVkLmxlbmd0aCA8PSB0aGlzLm1heE5hbWVMZW5ndGg7XG4gIH1cblxuICBzdWJtaXQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybjtcbiAgICB0aGlzLnN1Ym1pdHRlZC5lbWl0KHtcbiAgICAgIG5hbWU6ICh0aGlzLm5hbWUgfHwgJycpLnRyaW0oKSxcbiAgICAgIHBhcmVudElkOiB0aGlzLnBhcmVudElkLFxuICAgICAgY29sb3I6IHRoaXMuY29sb3IgfHwgREVGQVVMVF9GT0xERVJfQ09MT1IsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|