@ecodev/natural 56.0.3 → 57.0.0
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/esm2022/lib/classes/abstract-detail.mjs +73 -32
- package/esm2022/lib/classes/cumulative-changes.mjs +50 -0
- package/esm2022/lib/classes/rxjs.mjs +3 -4
- package/esm2022/lib/classes/utility.mjs +2 -26
- package/esm2022/lib/modules/alert/confirm.component.mjs +1 -1
- package/esm2022/lib/modules/columns-picker/columns-picker.component.mjs +1 -1
- package/esm2022/lib/modules/common/services/seo.service.mjs +26 -19
- package/esm2022/lib/modules/detail-header/detail-header.component.mjs +1 -1
- package/esm2022/lib/modules/dropdown-components/type-date/type-date.component.mjs +1 -1
- package/esm2022/lib/modules/dropdown-components/type-number/type-number.component.mjs +1 -1
- package/esm2022/lib/modules/dropdown-components/type-text/type-text.component.mjs +1 -1
- package/esm2022/lib/modules/file/component/file.component.mjs +1 -1
- package/esm2022/lib/modules/fixed-button/fixed-button.component.mjs +1 -1
- package/esm2022/lib/modules/fixed-button-detail/fixed-button-detail.component.mjs +1 -1
- package/esm2022/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.component.mjs +1 -1
- package/esm2022/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.component.mjs +1 -1
- package/esm2022/lib/modules/panels/abstract-panel.mjs +18 -3
- package/esm2022/lib/modules/panels/panels.service.mjs +3 -6
- package/esm2022/lib/modules/relations/relations.component.mjs +1 -1
- package/esm2022/lib/modules/search/dropdown-container/dropdown-container.component.mjs +1 -1
- package/esm2022/lib/modules/search/facet-selector/facet-selector.component.mjs +1 -1
- package/esm2022/lib/modules/search/group/group.component.mjs +1 -1
- package/esm2022/lib/modules/search/input/input.component.mjs +1 -1
- package/esm2022/lib/modules/search/search/search.component.mjs +1 -1
- package/esm2022/lib/modules/select/select/select.component.mjs +3 -3
- package/esm2022/lib/modules/select/select-enum/select-enum.component.mjs +1 -1
- package/esm2022/lib/modules/select/select-hierarchic/select-hierarchic.component.mjs +1 -1
- package/esm2022/lib/modules/sidenav/sidenav-container/sidenav-container.component.mjs +1 -1
- package/esm2022/lib/modules/sidenav/sidenav-content/sidenav-content.component.mjs +1 -1
- package/esm2022/lib/modules/sidenav/sidenav.service.mjs +2 -2
- package/esm2022/lib/modules/table-button/table-button.component.mjs +1 -1
- package/esm2022/lib/services/abstract-model.service.mjs +56 -49
- package/esm2022/lib/services/debounce.service.mjs +31 -27
- package/esm2022/lib/types/types.mjs +1 -1
- package/esm2022/public-api.mjs +2 -2
- package/fesm2022/ecodev-natural.mjs +393 -299
- package/fesm2022/ecodev-natural.mjs.map +1 -1
- package/lib/classes/abstract-detail.d.ts +18 -9
- package/lib/classes/cumulative-changes.d.ts +27 -0
- package/lib/classes/rxjs.d.ts +1 -1
- package/lib/classes/utility.d.ts +1 -10
- package/lib/modules/common/services/seo.service.d.ts +3 -3
- package/lib/modules/panels/abstract-panel.d.ts +1 -1
- package/lib/modules/sidenav/sidenav.service.d.ts +1 -1
- package/lib/services/abstract-model.service.d.ts +29 -19
- package/lib/services/debounce.service.d.ts +13 -15
- package/lib/types/types.d.ts +21 -1
- package/package.json +2 -2
- package/public-api.d.ts +2 -2
- package/src/lib/_natural.theme.scss +4 -0
|
@@ -1,28 +1,43 @@
|
|
|
1
1
|
import { Directive, inject } from '@angular/core';
|
|
2
2
|
import { UntypedFormGroup } from '@angular/forms';
|
|
3
3
|
import { ActivatedRoute, Router } from '@angular/router';
|
|
4
|
-
import { kebabCase
|
|
4
|
+
import { kebabCase } from 'lodash-es';
|
|
5
5
|
import { NaturalAlertService } from '../modules/alert/alert.service';
|
|
6
6
|
import { NaturalAbstractPanel } from '../modules/panels/abstract-panel';
|
|
7
|
-
import { finalize } from 'rxjs
|
|
7
|
+
import { EMPTY, endWith, finalize, last, Observable, switchMap, tap } from 'rxjs';
|
|
8
8
|
import { ifValid, validateAllFormControls } from './validators';
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
9
|
+
import { CumulativeChanges } from './cumulative-changes';
|
|
10
|
+
import { MAT_DIALOG_DATA } from '@angular/material/dialog';
|
|
11
11
|
import * as i0 from "@angular/core";
|
|
12
|
+
function isNaturalDialogTriggerProvidedData(dialogData) {
|
|
13
|
+
return (!!dialogData &&
|
|
14
|
+
typeof dialogData === 'object' &&
|
|
15
|
+
'activatedRoute' in dialogData &&
|
|
16
|
+
dialogData.activatedRoute instanceof ActivatedRoute);
|
|
17
|
+
}
|
|
12
18
|
// @dynamic
|
|
13
19
|
export class NaturalAbstractDetail extends NaturalAbstractPanel {
|
|
20
|
+
#dialogData;
|
|
14
21
|
/**
|
|
15
22
|
* Once set, this must not change anymore, especially not right after the creation mutation,
|
|
16
23
|
* so the form does not switch from creation mode to update mode without an actual reload of
|
|
17
24
|
* model from DB (by navigating to update page).
|
|
18
25
|
*/
|
|
19
26
|
#isUpdatePage;
|
|
27
|
+
#changes;
|
|
20
28
|
constructor(key, service) {
|
|
21
29
|
super();
|
|
22
30
|
this.key = key;
|
|
23
31
|
this.service = service;
|
|
24
32
|
/**
|
|
25
|
-
*
|
|
33
|
+
* Data retrieved by the server via route resolvers.
|
|
34
|
+
*
|
|
35
|
+
* The key `model` is special. It is readonly and represents the model being updated
|
|
36
|
+
* as it exists on server. The value is kept up to date when Apollo mutates it on server.
|
|
37
|
+
*
|
|
38
|
+
* The only time when `model` is not readonly is during creation. Only then can we modify the model values directly.
|
|
39
|
+
*
|
|
40
|
+
* Other keys, if present, are whatever is returned from route resolvers as-is.
|
|
26
41
|
*/
|
|
27
42
|
this.data = {
|
|
28
43
|
model: this.service.getDefaultForServer(),
|
|
@@ -48,28 +63,50 @@ export class NaturalAbstractDetail extends NaturalAbstractPanel {
|
|
|
48
63
|
* Injected service
|
|
49
64
|
*/
|
|
50
65
|
this.route = inject(ActivatedRoute);
|
|
66
|
+
this.#dialogData = inject(MAT_DIALOG_DATA, { optional: true });
|
|
51
67
|
/**
|
|
52
68
|
* Once set, this must not change anymore, especially not right after the creation mutation,
|
|
53
69
|
* so the form does not switch from creation mode to update mode without an actual reload of
|
|
54
70
|
* model from DB (by navigating to update page).
|
|
55
71
|
*/
|
|
56
72
|
this.#isUpdatePage = false;
|
|
73
|
+
this.#changes = new CumulativeChanges();
|
|
57
74
|
}
|
|
58
75
|
ngOnInit() {
|
|
59
|
-
if (
|
|
60
|
-
this.
|
|
61
|
-
this.data = merge({ model: this.service.getDefaultForServer() }, data[this.key]);
|
|
62
|
-
this.data = merge(this.data, omit(data, [this.key]));
|
|
63
|
-
this.initForm();
|
|
64
|
-
});
|
|
76
|
+
if (this.isPanel) {
|
|
77
|
+
this.initForm();
|
|
65
78
|
}
|
|
66
79
|
else {
|
|
67
|
-
this
|
|
80
|
+
const route = isNaturalDialogTriggerProvidedData(this.#dialogData)
|
|
81
|
+
? this.#dialogData.activatedRoute
|
|
82
|
+
: this.route;
|
|
83
|
+
this.#subscribeToModelFromResolvedData(route);
|
|
68
84
|
}
|
|
69
85
|
}
|
|
70
86
|
changeTab(index) {
|
|
71
87
|
this.showFabButton = index === 0;
|
|
72
88
|
}
|
|
89
|
+
#subscribeToModelFromResolvedData(route) {
|
|
90
|
+
let firstTime = true;
|
|
91
|
+
route.data
|
|
92
|
+
.pipe(switchMap(data => {
|
|
93
|
+
if (!(data.model instanceof Observable)) {
|
|
94
|
+
throw new Error('Resolved data must include the key `model`, and it must be an observable (usually one from Apollo).');
|
|
95
|
+
}
|
|
96
|
+
// Subscribe to model to know when Apollo cache is changed, so we can reflect it into `data.model`
|
|
97
|
+
return data.model.pipe(tap((model) => {
|
|
98
|
+
this.data = {
|
|
99
|
+
...data,
|
|
100
|
+
model: model,
|
|
101
|
+
};
|
|
102
|
+
if (firstTime) {
|
|
103
|
+
firstTime = false;
|
|
104
|
+
this.initForm();
|
|
105
|
+
}
|
|
106
|
+
}));
|
|
107
|
+
}))
|
|
108
|
+
.subscribe();
|
|
109
|
+
}
|
|
73
110
|
/**
|
|
74
111
|
* Returns whether `data.model` was fetched from DB, so we are on an update page, or if it is a new object
|
|
75
112
|
* with (only) default values, so we are on a creation page.
|
|
@@ -79,24 +116,33 @@ export class NaturalAbstractDetail extends NaturalAbstractPanel {
|
|
|
79
116
|
isUpdatePage() {
|
|
80
117
|
return this.#isUpdatePage;
|
|
81
118
|
}
|
|
82
|
-
|
|
119
|
+
/**
|
|
120
|
+
* Update the object on the server with the values from the form fields that were modified since
|
|
121
|
+
* the initialization, or since the previous successful update.
|
|
122
|
+
*
|
|
123
|
+
* Form fields that are never modified are **not** sent to the server, unless if you specify `submitAllFields`.
|
|
124
|
+
*/
|
|
125
|
+
update(now = false, submitAllFields = false) {
|
|
83
126
|
if (!this.isUpdatePage()) {
|
|
84
127
|
return;
|
|
85
128
|
}
|
|
86
129
|
validateAllFormControls(this.form);
|
|
87
130
|
ifValid(this.form).subscribe(() => {
|
|
88
|
-
this.
|
|
89
|
-
|
|
131
|
+
const newValues = this.form.getRawValue();
|
|
132
|
+
if (submitAllFields) {
|
|
133
|
+
this.#changes.initialize({});
|
|
134
|
+
}
|
|
135
|
+
const toSubmit = {
|
|
136
|
+
id: this.data.model.id,
|
|
137
|
+
...this.#changes.differences(newValues),
|
|
138
|
+
};
|
|
139
|
+
const update = now ? this.service.updateNow(toSubmit) : this.service.update(toSubmit);
|
|
140
|
+
update.subscribe(model => {
|
|
141
|
+
this.#changes.commit(newValues);
|
|
90
142
|
this.alertService.info($localize `Mis à jour`);
|
|
91
143
|
this.form.patchValue(model);
|
|
92
144
|
this.postUpdate(model);
|
|
93
|
-
};
|
|
94
|
-
if (now) {
|
|
95
|
-
this.service.updateNow(this.data.model).subscribe(postUpdate);
|
|
96
|
-
}
|
|
97
|
-
else {
|
|
98
|
-
this.service.update(this.data.model).subscribe(postUpdate);
|
|
99
|
-
}
|
|
145
|
+
});
|
|
100
146
|
});
|
|
101
147
|
}
|
|
102
148
|
create(redirect = true) {
|
|
@@ -104,10 +150,10 @@ export class NaturalAbstractDetail extends NaturalAbstractPanel {
|
|
|
104
150
|
if (!this.form.valid) {
|
|
105
151
|
return;
|
|
106
152
|
}
|
|
107
|
-
this.
|
|
153
|
+
const newValues = this.form.getRawValue();
|
|
108
154
|
this.form.disable();
|
|
109
155
|
this.service
|
|
110
|
-
.create(
|
|
156
|
+
.create(newValues)
|
|
111
157
|
.pipe(switchMap(model => {
|
|
112
158
|
this.alertService.info($localize `Créé`);
|
|
113
159
|
this.form.patchValue(model);
|
|
@@ -136,7 +182,7 @@ export class NaturalAbstractDetail extends NaturalAbstractPanel {
|
|
|
136
182
|
(confirmer ??
|
|
137
183
|
this.alertService.confirm($localize `Suppression`, $localize `Voulez-vous supprimer définitivement cet élément ?`, $localize `Supprimer définitivement`))
|
|
138
184
|
.pipe(switchMap(confirmed => {
|
|
139
|
-
if (!confirmed) {
|
|
185
|
+
if (!confirmed || !this.isUpdatePage()) {
|
|
140
186
|
return EMPTY;
|
|
141
187
|
}
|
|
142
188
|
this.preDelete(this.data.model);
|
|
@@ -175,12 +221,7 @@ export class NaturalAbstractDetail extends NaturalAbstractPanel {
|
|
|
175
221
|
initForm() {
|
|
176
222
|
this.#isUpdatePage = !!this.data.model.id;
|
|
177
223
|
this.form = this.service.getFormGroup(this.data.model);
|
|
178
|
-
|
|
179
|
-
/**
|
|
180
|
-
* Merge values of form into `this.data.model`.
|
|
181
|
-
*/
|
|
182
|
-
formToData() {
|
|
183
|
-
mergeWith(this.data.model, this.form.value, mergeOverrideArray);
|
|
224
|
+
this.#changes.initialize(this.form.getRawValue());
|
|
184
225
|
}
|
|
185
226
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: NaturalAbstractDetail, deps: "invalid", target: i0.ɵɵFactoryTarget.Directive }); }
|
|
186
227
|
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.2.2", type: NaturalAbstractDetail, usesInheritance: true, ngImport: i0 }); }
|
|
@@ -188,4 +229,4 @@ export class NaturalAbstractDetail extends NaturalAbstractPanel {
|
|
|
188
229
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: NaturalAbstractDetail, decorators: [{
|
|
189
230
|
type: Directive
|
|
190
231
|
}], ctorParameters: () => [{ type: undefined }, { type: undefined }] });
|
|
191
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtZGV0YWlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmF0dXJhbC9zcmMvbGliL2NsYXNzZXMvYWJzdHJhY3QtZGV0YWlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsTUFBTSxFQUFTLE1BQU0sZUFBZSxDQUFDO0FBQ3hELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBQyxjQUFjLEVBQUUsTUFBTSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDdkQsT0FBTyxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUM1RCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNuRSxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUd0RSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEMsT0FBTyxFQUFDLE9BQU8sRUFBRSx1QkFBdUIsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUM5RCxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFHN0MsT0FBTyxFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFjLFNBQVMsRUFBQyxNQUFNLE1BQU0sQ0FBQzs7QUFRakUsV0FBVztBQUVYLE1BQU0sT0FBTyxxQkFlVCxTQUFRLG9CQUFvQjtJQW9DNUI7Ozs7T0FJRztJQUNILGFBQWEsQ0FBUztJQUV0QixZQUN1QixHQUFXLEVBQ2QsT0FBaUI7UUFFakMsS0FBSyxFQUFFLENBQUM7UUFIVyxRQUFHLEdBQUgsR0FBRyxDQUFRO1FBQ2QsWUFBTyxHQUFQLE9BQU8sQ0FBVTtRQTFDckM7O1dBRUc7UUFDYSxTQUFJLEdBQWlDO1lBQ2pELEtBQUssRUFBRSxJ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QUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLGtCQUFrQixDQUFDLENBQUM7SUFDcEUsQ0FBQzs4R0FqT1EscUJBQXFCO2tHQUFyQixxQkFBcUI7OzJGQUFyQixxQkFBcUI7a0JBRGpDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RpcmVjdGl2ZSwgaW5qZWN0LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtVbnR5cGVkRm9ybUdyb3VwfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge2tlYmFiQ2FzZSwgbWVyZ2UsIG1lcmdlV2l0aCwgb21pdH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7TmF0dXJhbEFsZXJ0U2VydmljZX0gZnJvbSAnLi4vbW9kdWxlcy9hbGVydC9hbGVydC5zZXJ2aWNlJztcbmltcG9ydCB7TmF0dXJhbEFic3RyYWN0UGFuZWx9IGZyb20gJy4uL21vZHVsZXMvcGFuZWxzL2Fic3RyYWN0LXBhbmVsJztcbmltcG9ydCB7TmF0dXJhbEFic3RyYWN0TW9kZWxTZXJ2aWNlfSBmcm9tICcuLi9zZXJ2aWNlcy9hYnN0cmFjdC1tb2RlbC5zZXJ2aWNlJztcbmltcG9ydCB7RXh0cmFjdFJlc29sdmUsIEV4dHJhY3RUY3JlYXRlLCBFeHRyYWN0VG9uZSwgRXh0cmFjdFR1cGRhdGUsIExpdGVyYWx9IGZyb20gJy4uL3R5cGVzL3R5cGVzJztcbmltcG9ydCB7ZmluYWxpemV9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7aWZWYWxpZCwgdmFsaWRhdGVBbGxGb3JtQ29udHJvbHN9IGZyb20gJy4vdmFsaWRhdG9ycyc7XG5pbXBvcnQge21lcmdlT3ZlcnJpZGVBcnJheX0gZnJvbSAnLi91dGlsaXR5JztcbmltcG9ydCB7UGFnaW5hdGVkRGF0YX0gZnJvbSAnLi9kYXRhLXNvdXJjZSc7XG5pbXBvcnQge1F1ZXJ5VmFyaWFibGVzfSBmcm9tICcuL3F1ZXJ5LXZhcmlhYmxlLW1hbmFnZXInO1xuaW1wb3J0IHtFTVBUWSwgZW5kV2l0aCwgbGFzdCwgT2JzZXJ2YWJsZSwgc3dpdGNoTWFwfSBmcm9tICdyeGpzJztcblxuLyoqXG4gKiBgRGF0YWAgY29udGFpbnMgaW4gYG1vZGVsYCBlaXRoZXIgdGhlIG1vZGVsIGZldGNoZWQgZnJvbSBEQiBvciBkZWZhdWx0IHZhbHVlcyAod2l0aG91dCBJRCkuIEFuZCBiZXNpZGVzIGBtb2RlbGAsXG4gKiBhbnkgb3RoZXIgZXh0cmEga2V5cyBkZWZpbmVkIGJ5IEV4dHJhLlxuICovXG50eXBlIERhdGE8VFNlcnZpY2UsIEV4dHJhPiA9IHttb2RlbDoge2lkPzogc3RyaW5nfX0gJiBFeHRyYWN0UmVzb2x2ZTxUU2VydmljZT4gJiBFeHRyYTtcblxuLy8gQGR5bmFtaWNcbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGNsYXNzIE5hdHVyYWxBYnN0cmFjdERldGFpbDxcbiAgICAgICAgVFNlcnZpY2UgZXh0ZW5kcyBOYXR1cmFsQWJzdHJhY3RNb2RlbFNlcnZpY2U8XG4gICAgICAgICAgICB7aWQ6IHN0cmluZ30sXG4gICAgICAgICAgICBhbnksXG4gICAgICAgICAgICBQYWdpbmF0ZWREYXRhPExpdGVyYWw+LFxuICAgICAgICAgICAgUXVlcnlWYXJpYWJsZXMsXG4gICAgICAgICAgICBhbnksXG4gICAgICAgICAgICBhbnksXG4gICAgICAgICAgICBhbnksXG4gICAgICAgICAgICBhbnksXG4gICAgICAgICAgICB1bmtub3duLFxuICAgICAgICAgICAgYW55XG4gICAgICAgID4sXG4gICAgICAgIEV4dHJhUmVzb2x2ZSBleHRlbmRzIExpdGVyYWwgPSBSZWNvcmQ8bmV2ZXIsIG5ldmVyPixcbiAgICA+XG4gICAgZXh0ZW5kcyBOYXR1cmFsQWJzdHJhY3RQYW5lbFxuICAgIGltcGxlbWVudHMgT25Jbml0XG57XG4gICAgLyoqXG4gICAgICogRW1wdHkgcGxhY2Vob2xkZXIgZm9yIGRhdGEgcmV0cmlldmVkIGJ5IHRoZSBzZXJ2ZXJcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZGF0YTogRGF0YTxUU2VydmljZSwgRXh0cmFSZXNvbHZlPiA9IHtcbiAgICAgICAgbW9kZWw6IHRoaXMuc2VydmljZS5nZXREZWZhdWx0Rm9yU2VydmVyKCksXG4gICAgfSBhcyBEYXRhPFRTZXJ2aWNlLCBFeHRyYVJlc29sdmU+O1xuXG4gICAgLyoqXG4gICAgICogRm9ybSB0aGF0IG1hbmFnZXMgdGhlIGRhdGEgZnJvbSB0aGUgY29udHJvbGxlclxuICAgICAqL1xuICAgIHB1YmxpYyBmb3JtOiBVbnR5cGVkRm9ybUdyb3VwID0gbmV3IFVudHlwZWRGb3JtR3JvdXAoe30pO1xuXG4gICAgLyoqXG4gICAgICogU2hvdyAvIGhpZGVzIHRoZSBib3R0b20gZmFiIGJ1dHRvbiAobW9zdGx5IHRvIGhpZGUgaXQgd2hlbiB3ZSBhcmUgb24gb3RoZXIgdGFicyB3aGVyZSBzZW1hbnRpYyBvZiBidXR0b24gY2FuIGNvbmZsaWN0IHdpdGggLi4uXG4gICAgICogc2VtYW50aWMgb2YgZGF0YSBvbiBvdGhlciB0YWIsIGxpa2UgcmVsYXRpb25zIHRoYXQgbGlzdCBvdGhlciBvYmplY3RzKVxuICAgICAqL1xuICAgIHB1YmxpYyBzaG93RmFiQnV0dG9uID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEluamVjdGVkIHNlcnZpY2VcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgYWxlcnRTZXJ2aWNlID0gaW5qZWN0KE5hdHVyYWxBbGVydFNlcnZpY2UpO1xuXG4gICAgLyoqXG4gICAgICogSW5qZWN0ZWQgc2VydmljZVxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcblxuICAgIC8qKlxuICAgICAqIEluamVjdGVkIHNlcnZpY2VcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgcm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xuXG4gICAgLyoqXG4gICAgICogT25jZSBzZXQsIHRoaXMgbXVzdCBub3QgY2hhbmdlIGFueW1vcmUsIGVzcGVjaWFsbHkgbm90IHJpZ2h0IGFmdGVyIHRoZSBjcmVhdGlvbiBtdXRhdGlvbixcbiAgICAgKiBzbyB0aGUgZm9ybSBkb2VzIG5vdCBzd2l0Y2ggZnJvbSBjcmVhdGlvbiBtb2RlIHRvIHVwZGF0ZSBtb2RlIHdpdGhvdXQgYW4gYWN0dWFsIHJlbG9hZCBvZlxuICAgICAqIG1vZGVsIGZyb20gREIgKGJ5IG5hdmlnYXRpbmcgdG8gdXBkYXRlIHBhZ2UpLlxuICAgICAqL1xuICAgICNpc1VwZGF0ZVBhZ2UgPSBmYWxzZTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJvdGVjdGVkIHJlYWRvbmx5IGtleTogc3RyaW5nLFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgc2VydmljZTogVFNlcnZpY2UsXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaXNQYW5lbCkge1xuICAgICAgICAgICAgdGhpcy5yb3V0ZS5kYXRhLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBtZXJnZSh7bW9kZWw6IHRoaXMuc2VydmljZS5nZXREZWZhdWx0Rm9yU2VydmVyKCl9LCBkYXRhW3RoaXMua2V5XSk7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gbWVyZ2UodGhpcy5kYXRhLCBvbWl0KGRhdGEsIFt0aGlzLmtleV0pKTtcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRGb3JtKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdEZvcm0oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBjaGFuZ2VUYWIoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLnNob3dGYWJCdXR0b24gPSBpbmRleCA9PT0gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHdoZXRoZXIgYGRhdGEubW9kZWxgIHdhcyBmZXRjaGVkIGZyb20gREIsIHNvIHdlIGFyZSBvbiBhbiB1cGRhdGUgcGFnZSwgb3IgaWYgaXQgaXMgYSBuZXcgb2JqZWN0XG4gICAgICogd2l0aCAob25seSkgZGVmYXVsdCB2YWx1ZXMsIHNvIHdlIGFyZSBvbiBhIGNyZWF0aW9uIHBhZ2UuXG4gICAgICpcbiAgICAgKiBUaGlzIHNob3VsZCBiZSB1c2VkIGluc3RlYWQgb2YgY2hlY2tpbmcgYGRhdGEubW9kZWwuaWRgIGRpcmVjdGx5LCBpbiBvcmRlciB0byB0eXBlIGd1YXJkIGFuZCBnZXQgcHJvcGVyIHR5cGluZ1xuICAgICAqL1xuICAgIHByb3RlY3RlZCBpc1VwZGF0ZVBhZ2UoKTogdGhpcyBpcyB7ZGF0YToge21vZGVsOiBFeHRyYWN0VG9uZTxUU2VydmljZT59fSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNpc1VwZGF0ZVBhZ2U7XG4gICAgfVxuXG4gICAgcHVibGljIHVwZGF0ZShub3cgPSBmYWxzZSk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaXNVcGRhdGVQYWdlKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhbGlkYXRlQWxsRm9ybUNvbnRyb2xzKHRoaXMuZm9ybSk7XG5cbiAgICAgICAgaWZWYWxpZCh0aGlzLmZvcm0pLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZvcm1Ub0RhdGEoKTtcbiAgICAgICAgICAgIGNvbnN0IHBvc3RVcGRhdGUgPSAobW9kZWw6IEV4dHJhY3RUdXBkYXRlPFRTZXJ2aWNlPik6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmluZm8oJGxvY2FsaXplYE1pcyDDoCBqb3VyYCk7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUobW9kZWwpO1xuICAgICAgICAgICAgICAgIHRoaXMucG9zdFVwZGF0ZShtb2RlbCk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAobm93KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXJ2aWNlLnVwZGF0ZU5vdyh0aGlzLmRhdGEubW9kZWwpLnN1YnNjcmliZShwb3N0VXBkYXRlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXJ2aWNlLnVwZGF0ZSh0aGlzLmRhdGEubW9kZWwpLnN1YnNjcmliZShwb3N0VXBkYXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZShyZWRpcmVjdCA9IHRydWUpOiB2b2lkIHtcbiAgICAgICAgdmFsaWRhdGVBbGxGb3JtQ29udHJvbHModGhpcy5mb3JtKTtcblxuICAgICAgICBpZiAoIXRoaXMuZm9ybS52YWxpZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5mb3JtVG9EYXRhKCk7XG4gICAgICAgIHRoaXMuZm9ybS5kaXNhYmxlKCk7XG5cbiAgICAgICAgdGhpcy5zZXJ2aWNlXG4gICAgICAgICAgICAuY3JlYXRlKHRoaXMuZGF0YS5tb2RlbClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcChtb2RlbCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmluZm8oJGxvY2FsaXplYENyw6nDqWApO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZShtb2RlbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zdENyZWF0ZShtb2RlbCkucGlwZShlbmRXaXRoKG1vZGVsKSwgbGFzdCgpKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAobW9kZWwgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVkaXJlY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzUGFuZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvbGRVcmwgPSB0aGlzLnJvdXRlci51cmw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dFVybCA9IHRoaXMucGFuZWxEYXRhPy5jb25maWcucGFyYW1zLm5leHRSb3V0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdVcmwgPSBvbGRVcmwucmVwbGFjZSgnL25ldycsICcvJyArIG1vZGVsLmlkKSArIChuZXh0VXJsID8gJy8nICsgbmV4dFVybCA6ICcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChuZXdVcmwpOyAvLyByZXBsYWNlIC9uZXcgYnkgLzEyM1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuLicsIG1vZGVsLmlkXSwge3JlbGF0aXZlVG86IHRoaXMucm91dGV9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBFTVBUWTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLmZvcm0uZW5hYmxlKCkpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGBjb25maXJtZXJgIGNhbiBiZSB1c2VkIHRvIG9wZW4gYSBjdXN0b20gZGlhbG9nLCBvciBhbnl0aGluZyBlbHNlLCB0byBjb25maXJtIHRoZSBkZWxldGlvbiwgaW5zdGVhZCBvZiB0aGUgc3RhbmRhcmQgZGlhbG9nXG4gICAgICovXG4gICAgcHVibGljIGRlbGV0ZShyZWRpcmVjdGlvblJvdXRlPzogdW5rbm93bltdLCBjb25maXJtZXI/OiBPYnNlcnZhYmxlPGJvb2xlYW4gfCB1bmRlZmluZWQ+KTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybS5kaXNhYmxlKCk7XG5cbiAgICAgICAgKFxuICAgICAgICAgICAgY29uZmlybWVyID8/XG4gICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5jb25maXJtKFxuICAgICAgICAgICAgICAgICRsb2NhbGl6ZWBTdXBwcmVzc2lvbmAsXG4gICAgICAgICAgICAgICAgJGxvY2FsaXplYFZvdWxlei12b3VzIHN1cHByaW1lciBkw6lmaW5pdGl2ZW1lbnQgY2V0IMOpbMOpbWVudCA/YCxcbiAgICAgICAgICAgICAgICAkbG9jYWxpemVgU3VwcHJpbWVyIGTDqWZpbml0aXZlbWVudGAsXG4gICAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcChjb25maXJtZWQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbmZpcm1lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmVEZWxldGUodGhpcy5kYXRhLm1vZGVsKTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlLmRlbGV0ZShbdGhpcy5kYXRhLm1vZGVsXSkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuaW5mbygkbG9jYWxpemVgU3VwcHJpbcOpYCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1BhbmVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFuZWxTZXJ2aWNlPy5nb1RvUGVudWx0aW1hdGVQYW5lbCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBFTVBUWTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWZhdWx0Um91dGUgPSBbJy4uLy4uLycgKyBrZWJhYkNhc2UodGhpcy5rZXkpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucm91dGVyLm5hdmlnYXRlKHJlZGlyZWN0aW9uUm91dGUgPyByZWRpcmVjdGlvblJvdXRlIDogZGVmYXVsdFJvdXRlLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLmZvcm0uZW5hYmxlKCkpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBwcm90ZWN0ZWQgcG9zdFVwZGF0ZShtb2RlbDogRXh0cmFjdFR1cGRhdGU8VFNlcnZpY2U+KTogdm9pZCB7XG4gICAgICAgIC8vIG5vb3BcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIG9ic2VydmFibGUgdGhhdCB3aWxsIGJlIHN1YnNjcmliZWQgdG8gaW1tZWRpYXRlbHkgYW5kIHRoZVxuICAgICAqIHJlZGlyZWN0IG5hdmlnYXRpb24gd2lsbCBvbmx5IGhhcHBlbiBhZnRlciB0aGUgb2JzZXJ2YWJsZSBjb21wbGV0ZXMuXG4gICAgICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIHByb3RlY3RlZCBwb3N0Q3JlYXRlKG1vZGVsOiBFeHRyYWN0VGNyZWF0ZTxUU2VydmljZT4pOiBPYnNlcnZhYmxlPHVua25vd24+IHtcbiAgICAgICAgcmV0dXJuIEVNUFRZO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBwcm90ZWN0ZWQgcHJlRGVsZXRlKG1vZGVsOiBFeHRyYWN0VG9uZTxUU2VydmljZT4pOiB2b2lkIHtcbiAgICAgICAgLy8gbm9vcFxuICAgIH1cblxuICAgIHByb3RlY3RlZCBpbml0Rm9ybSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy4jaXNVcGRhdGVQYWdlID0gISF0aGlzLmRhdGEubW9kZWwuaWQ7XG4gICAgICAgIHRoaXMuZm9ybSA9IHRoaXMuc2VydmljZS5nZXRGb3JtR3JvdXAodGhpcy5kYXRhLm1vZGVsKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNZXJnZSB2YWx1ZXMgb2YgZm9ybSBpbnRvIGB0aGlzLmRhdGEubW9kZWxgLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBmb3JtVG9EYXRhKCk6IHZvaWQge1xuICAgICAgICBtZXJnZVdpdGgodGhpcy5kYXRhLm1vZGVsLCB0aGlzLmZvcm0udmFsdWUsIG1lcmdlT3ZlcnJpZGVBcnJheSk7XG4gICAgfVxufVxuIl19
|
|
232
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtZGV0YWlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmF0dXJhbC9zcmMvbGliL2NsYXNzZXMvYWJzdHJhY3QtZGV0YWlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsTUFBTSxFQUFTLE1BQU0sZUFBZSxDQUFDO0FBQ3hELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBQyxjQUFjLEVBQUUsTUFBTSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDdkQsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNuRSxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUd0RSxPQUFPLEVBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ2hGLE9BQU8sRUFBQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFHOUQsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDdkQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDBCQUEwQixDQUFDOztBQVN6RCxTQUFTLGtDQUFrQyxDQUN2QyxVQUFtQjtJQUVuQixPQUFPLENBQ0gsQ0FBQyxDQUFDLFVBQVU7UUFDWixPQUFPLFVBQVUsS0FBSyxRQUFRO1FBQzlCLGdCQUFnQixJQUFJLFVBQVU7UUFDOUIsVUFBVSxDQUFDLGNBQWMsWUFBWSxjQUFjLENBQ3RELENBQUM7QUFDTixDQUFDO0FBRUQsV0FBVztBQUVYLE1BQU0sT0FBTyxxQkFlVCxTQUFRLG9CQUFvQjtJQTJDNUIsV0FBVyxD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LElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUN0RCxDQUFDOzhHQTdRUSxxQkFBcUI7a0dBQXJCLHFCQUFxQjs7MkZBQXJCLHFCQUFxQjtrQkFEakMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGlyZWN0aXZlLCBpbmplY3QsIE9uSW5pdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1VudHlwZWRGb3JtR3JvdXB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGUsIFJvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7a2ViYWJDYXNlfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHtOYXR1cmFsQWxlcnRTZXJ2aWNlfSBmcm9tICcuLi9tb2R1bGVzL2FsZXJ0L2FsZXJ0LnNlcnZpY2UnO1xuaW1wb3J0IHtOYXR1cmFsQWJzdHJhY3RQYW5lbH0gZnJvbSAnLi4vbW9kdWxlcy9wYW5lbHMvYWJzdHJhY3QtcGFuZWwnO1xuaW1wb3J0IHtOYXR1cmFsQWJzdHJhY3RNb2RlbFNlcnZpY2V9IGZyb20gJy4uL3NlcnZpY2VzL2Fic3RyYWN0LW1vZGVsLnNlcnZpY2UnO1xuaW1wb3J0IHtFeHRyYWN0UmVzb2x2ZSwgRXh0cmFjdFRjcmVhdGUsIEV4dHJhY3RUb25lLCBFeHRyYWN0VHVwZGF0ZSwgTGl0ZXJhbH0gZnJvbSAnLi4vdHlwZXMvdHlwZXMnO1xuaW1wb3J0IHtFTVBUWSwgZW5kV2l0aCwgZmluYWxpemUsIGxhc3QsIE9ic2VydmFibGUsIHN3aXRjaE1hcCwgdGFwfSBmcm9tICdyeGpzJztcbmltcG9ydCB7aWZWYWxpZCwgdmFsaWRhdGVBbGxGb3JtQ29udHJvbHN9IGZyb20gJy4vdmFsaWRhdG9ycyc7XG5pbXBvcnQge1BhZ2luYXRlZERhdGF9IGZyb20gJy4vZGF0YS1zb3VyY2UnO1xuaW1wb3J0IHtRdWVyeVZhcmlhYmxlc30gZnJvbSAnLi9xdWVyeS12YXJpYWJsZS1tYW5hZ2VyJztcbmltcG9ydCB7Q3VtdWxhdGl2ZUNoYW5nZXN9IGZyb20gJy4vY3VtdWxhdGl2ZS1jaGFuZ2VzJztcbmltcG9ydCB7TUFUX0RJQUxPR19EQVRBfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHtOYXR1cmFsRGlhbG9nVHJpZ2dlclByb3ZpZGVkRGF0YX0gZnJvbSAnLi4vbW9kdWxlcy9kaWFsb2ctdHJpZ2dlci9kaWFsb2ctdHJpZ2dlci5jb21wb25lbnQnO1xuXG4vKipcbiAqIGBEYXRhYCBjb250YWlucyBpbiBgbW9kZWxgIGVpdGhlciB0aGUgbW9kZWwgZmV0Y2hlZCBmcm9tIERCIG9yIGRlZmF1bHQgdmFsdWVzICh3aXRob3V0IElEKS4gQW5kIGJlc2lkZXMgYG1vZGVsYCxcbiAqIGFueSBvdGhlciBleHRyYSBrZXlzIGRlZmluZWQgYnkgRXh0cmEuXG4gKi9cbnR5cGUgRGF0YTxUU2VydmljZSwgRXh0cmE+ID0ge21vZGVsOiB7aWQ/OiBzdHJpbmd9ICYgRXh0cmFjdFJlc29sdmU8VFNlcnZpY2U+fSAmIEV4dHJhO1xuXG5mdW5jdGlvbiBpc05hdHVyYWxEaWFsb2dUcmlnZ2VyUHJvdmlkZWREYXRhKFxuICAgIGRpYWxvZ0RhdGE6IHVua25vd24sXG4pOiBkaWFsb2dEYXRhIGlzIE5hdHVyYWxEaWFsb2dUcmlnZ2VyUHJvdmlkZWREYXRhPG5ldmVyPiB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgISFkaWFsb2dEYXRhICYmXG4gICAgICAgIHR5cGVvZiBkaWFsb2dEYXRhID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAnYWN0aXZhdGVkUm91dGUnIGluIGRpYWxvZ0RhdGEgJiZcbiAgICAgICAgZGlhbG9nRGF0YS5hY3RpdmF0ZWRSb3V0ZSBpbnN0YW5jZW9mIEFjdGl2YXRlZFJvdXRlXG4gICAgKTtcbn1cblxuLy8gQGR5bmFtaWNcbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGNsYXNzIE5hdHVyYWxBYnN0cmFjdERldGFpbDxcbiAgICAgICAgVFNlcnZpY2UgZXh0ZW5kcyBOYXR1cmFsQWJzdHJhY3RNb2RlbFNlcnZpY2U8XG4gICAgICAgICAgICB7aWQ6IHN0cmluZ30sXG4gICAgICAgICAgICBhbnksXG4gICAgICAgICAgICBQYWdpbmF0ZWREYXRhPExpdGVyYWw+LFxuICAgICAgICAgICAgUXVlcnlWYXJpYWJsZXMsXG4gICAgICAgICAgICBhbnksXG4gICAgICAgICAgICBhbnksXG4gICAgICAgICAgICBhbnksXG4gICAgICAgICAgICBhbnksXG4gICAgICAgICAgICB1bmtub3duLFxuICAgICAgICAgICAgYW55XG4gICAgICAgID4sXG4gICAgICAgIEV4dHJhUmVzb2x2ZSBleHRlbmRzIExpdGVyYWwgPSBSZWNvcmQ8bmV2ZXIsIG5ldmVyPixcbiAgICA+XG4gICAgZXh0ZW5kcyBOYXR1cmFsQWJzdHJhY3RQYW5lbFxuICAgIGltcGxlbWVudHMgT25Jbml0XG57XG4gICAgLyoqXG4gICAgICogRGF0YSByZXRyaWV2ZWQgYnkgdGhlIHNlcnZlciB2aWEgcm91dGUgcmVzb2x2ZXJzLlxuICAgICAqXG4gICAgICogVGhlIGtleSBgbW9kZWxgIGlzIHNwZWNpYWwuIEl0IGlzIHJlYWRvbmx5IGFuZCByZXByZXNlbnRzIHRoZSBtb2RlbCBiZWluZyB1cGRhdGVkXG4gICAgICogYXMgaXQgZXhpc3RzIG9uIHNlcnZlci4gVGhlIHZhbHVlIGlzIGtlcHQgdXAgdG8gZGF0ZSB3aGVuIEFwb2xsbyBtdXRhdGVzIGl0IG9uIHNlcnZlci5cbiAgICAgKlxuICAgICAqIFRoZSBvbmx5IHRpbWUgd2hlbiBgbW9kZWxgIGlzIG5vdCByZWFkb25seSBpcyBkdXJpbmcgY3JlYXRpb24uIE9ubHkgdGhlbiBjYW4gd2UgbW9kaWZ5IHRoZSBtb2RlbCB2YWx1ZXMgZGlyZWN0bHkuXG4gICAgICpcbiAgICAgKiBPdGhlciBrZXlzLCBpZiBwcmVzZW50LCBhcmUgd2hhdGV2ZXIgaXMgcmV0dXJuZWQgZnJvbSByb3V0ZSByZXNvbHZlcnMgYXMtaXMuXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGRhdGE6IERhdGE8VFNlcnZpY2UsIEV4dHJhUmVzb2x2ZT4gPSB7XG4gICAgICAgIG1vZGVsOiB0aGlzLnNlcnZpY2UuZ2V0RGVmYXVsdEZvclNlcnZlcigpLFxuICAgIH0gYXMgRGF0YTxUU2VydmljZSwgRXh0cmFSZXNvbHZlPjtcblxuICAgIC8qKlxuICAgICAqIEZvcm0gdGhhdCBtYW5hZ2VzIHRoZSBkYXRhIGZyb20gdGhlIGNvbnRyb2xsZXJcbiAgICAgKi9cbiAgICBwdWJsaWMgZm9ybTogVW50eXBlZEZvcm1Hcm91cCA9IG5ldyBVbnR5cGVkRm9ybUdyb3VwKHt9KTtcblxuICAgIC8qKlxuICAgICAqIFNob3cgLyBoaWRlcyB0aGUgYm90dG9tIGZhYiBidXR0b24gKG1vc3RseSB0byBoaWRlIGl0IHdoZW4gd2UgYXJlIG9uIG90aGVyIHRhYnMgd2hlcmUgc2VtYW50aWMgb2YgYnV0dG9uIGNhbiBjb25mbGljdCB3aXRoIC4uLlxuICAgICAqIHNlbWFudGljIG9mIGRhdGEgb24gb3RoZXIgdGFiLCBsaWtlIHJlbGF0aW9ucyB0aGF0IGxpc3Qgb3RoZXIgb2JqZWN0cylcbiAgICAgKi9cbiAgICBwdWJsaWMgc2hvd0ZhYkJ1dHRvbiA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBJbmplY3RlZCBzZXJ2aWNlXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGFsZXJ0U2VydmljZSA9IGluamVjdChOYXR1cmFsQWxlcnRTZXJ2aWNlKTtcblxuICAgIC8qKlxuICAgICAqIEluamVjdGVkIHNlcnZpY2VcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG5cbiAgICAvKipcbiAgICAgKiBJbmplY3RlZCBzZXJ2aWNlXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcblxuICAgICNkaWFsb2dEYXRhOiB1bmtub3duID0gaW5qZWN0KE1BVF9ESUFMT0dfREFUQSwge29wdGlvbmFsOiB0cnVlfSk7XG5cbiAgICAvKipcbiAgICAgKiBPbmNlIHNldCwgdGhpcyBtdXN0IG5vdCBjaGFuZ2UgYW55bW9yZSwgZXNwZWNpYWxseSBub3QgcmlnaHQgYWZ0ZXIgdGhlIGNyZWF0aW9uIG11dGF0aW9uLFxuICAgICAqIHNvIHRoZSBmb3JtIGRvZXMgbm90IHN3aXRjaCBmcm9tIGNyZWF0aW9uIG1vZGUgdG8gdXBkYXRlIG1vZGUgd2l0aG91dCBhbiBhY3R1YWwgcmVsb2FkIG9mXG4gICAgICogbW9kZWwgZnJvbSBEQiAoYnkgbmF2aWdhdGluZyB0byB1cGRhdGUgcGFnZSkuXG4gICAgICovXG4gICAgI2lzVXBkYXRlUGFnZSA9IGZhbHNlO1xuICAgIHJlYWRvbmx5ICNjaGFuZ2VzID0gbmV3IEN1bXVsYXRpdmVDaGFuZ2VzPHR5cGVvZiB0aGlzLmZvcm0uZ2V0UmF3VmFsdWU+KCk7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIHByb3RlY3RlZCByZWFkb25seSBrZXk6IHN0cmluZyxcbiAgICAgICAgcHVibGljIHJlYWRvbmx5IHNlcnZpY2U6IFRTZXJ2aWNlLFxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNQYW5lbCkge1xuICAgICAgICAgICAgdGhpcy5pbml0Rm9ybSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgcm91dGUgPSBpc05hdHVyYWxEaWFsb2dUcmlnZ2VyUHJvdmlkZWREYXRhKHRoaXMuI2RpYWxvZ0RhdGEpXG4gICAgICAgICAgICAgICAgPyB0aGlzLiNkaWFsb2dEYXRhLmFjdGl2YXRlZFJvdXRlXG4gICAgICAgICAgICAgICAgOiB0aGlzLnJvdXRlO1xuICAgICAgICAgICAgdGhpcy4jc3Vic2NyaWJlVG9Nb2RlbEZyb21SZXNvbHZlZERhdGEocm91dGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGNoYW5nZVRhYihpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2hvd0ZhYkJ1dHRvbiA9IGluZGV4ID09PSAwO1xuICAgIH1cblxuICAgICNzdWJzY3JpYmVUb01vZGVsRnJvbVJlc29sdmVkRGF0YShyb3V0ZTogQWN0aXZhdGVkUm91dGUpOiB2b2lkIHtcbiAgICAgICAgbGV0IGZpcnN0VGltZSA9IHRydWU7XG4gICAgICAgIHJvdXRlLmRhdGFcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcChkYXRhID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoZGF0YS5tb2RlbCBpbnN0YW5jZW9mIE9ic2VydmFibGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Jlc29sdmVkIGRhdGEgbXVzdCBpbmNsdWRlIHRoZSBrZXkgYG1vZGVsYCwgYW5kIGl0IG11c3QgYmUgYW4gb2JzZXJ2YWJsZSAodXN1YWxseSBvbmUgZnJvbSBBcG9sbG8pLicsXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gU3Vic2NyaWJlIHRvIG1vZGVsIHRvIGtub3cgd2hlbiBBcG9sbG8gY2FjaGUgaXMgY2hhbmdlZCwgc28gd2UgY2FuIHJlZmxlY3QgaXQgaW50byBgZGF0YS5tb2RlbGBcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEubW9kZWwucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcCgobW9kZWw6IEV4dHJhY3RSZXNvbHZlPFRTZXJ2aWNlPikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWw6IG1vZGVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gYXMgRGF0YTxUU2VydmljZSwgRXh0cmFSZXNvbHZlPjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaXJzdFRpbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RUaW1lID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdEZvcm0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHdoZXRoZXIgYGRhdGEubW9kZWxgIHdhcyBmZXRjaGVkIGZyb20gREIsIHNvIHdlIGFyZSBvbiBhbiB1cGRhdGUgcGFnZSwgb3IgaWYgaXQgaXMgYSBuZXcgb2JqZWN0XG4gICAgICogd2l0aCAob25seSkgZGVmYXVsdCB2YWx1ZXMsIHNvIHdlIGFyZSBvbiBhIGNyZWF0aW9uIHBhZ2UuXG4gICAgICpcbiAgICAgKiBUaGlzIHNob3VsZCBiZSB1c2VkIGluc3RlYWQgb2YgY2hlY2tpbmcgYGRhdGEubW9kZWwuaWRgIGRpcmVjdGx5LCBpbiBvcmRlciB0byB0eXBlIGd1YXJkIGFuZCBnZXQgcHJvcGVyIHR5cGluZ1xuICAgICAqL1xuICAgIHByb3RlY3RlZCBpc1VwZGF0ZVBhZ2UoKTogdGhpcyBpcyB7ZGF0YToge21vZGVsOiBFeHRyYWN0VG9uZTxUU2VydmljZT59fSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNpc1VwZGF0ZVBhZ2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlIHRoZSBvYmplY3Qgb24gdGhlIHNlcnZlciB3aXRoIHRoZSB2YWx1ZXMgZnJvbSB0aGUgZm9ybSBmaWVsZHMgdGhhdCB3ZXJlIG1vZGlmaWVkIHNpbmNlXG4gICAgICogdGhlIGluaXRpYWxpemF0aW9uLCBvciBzaW5jZSB0aGUgcHJldmlvdXMgc3VjY2Vzc2Z1bCB1cGRhdGUuXG4gICAgICpcbiAgICAgKiBGb3JtIGZpZWxkcyB0aGF0IGFyZSBuZXZlciBtb2RpZmllZCBhcmUgKipub3QqKiBzZW50IHRvIHRoZSBzZXJ2ZXIsIHVubGVzcyBpZiB5b3Ugc3BlY2lmeSBgc3VibWl0QWxsRmllbGRzYC5cbiAgICAgKi9cbiAgICBwdWJsaWMgdXBkYXRlKG5vdyA9IGZhbHNlLCBzdWJtaXRBbGxGaWVsZHMgPSBmYWxzZSk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaXNVcGRhdGVQYWdlKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhbGlkYXRlQWxsRm9ybUNvbnRyb2xzKHRoaXMuZm9ybSk7XG5cbiAgICAgICAgaWZWYWxpZCh0aGlzLmZvcm0pLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuZXdWYWx1ZXMgPSB0aGlzLmZvcm0uZ2V0UmF3VmFsdWUoKTtcbiAgICAgICAgICAgIGlmIChzdWJtaXRBbGxGaWVsZHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiNjaGFuZ2VzLmluaXRpYWxpemUoe30pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB0b1N1Ym1pdCA9IHtcbiAgICAgICAgICAgICAgICBpZDogdGhpcy5kYXRhLm1vZGVsLmlkLFxuICAgICAgICAgICAgICAgIC4uLnRoaXMuI2NoYW5nZXMuZGlmZmVyZW5jZXMobmV3VmFsdWVzKSxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZSA9IG5vdyA/IHRoaXMuc2VydmljZS51cGRhdGVOb3codG9TdWJtaXQpIDogdGhpcy5zZXJ2aWNlLnVwZGF0ZSh0b1N1Ym1pdCk7XG4gICAgICAgICAgICB1cGRhdGUuc3Vic2NyaWJlKG1vZGVsID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLiNjaGFuZ2VzLmNvbW1pdChuZXdWYWx1ZXMpO1xuICAgICAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmluZm8oJGxvY2FsaXplYE1pcyDDoCBqb3VyYCk7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUobW9kZWwpO1xuICAgICAgICAgICAgICAgIHRoaXMucG9zdFVwZGF0ZShtb2RlbCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZShyZWRpcmVjdCA9IHRydWUpOiB2b2lkIHtcbiAgICAgICAgdmFsaWRhdGVBbGxGb3JtQ29udHJvbHModGhpcy5mb3JtKTtcblxuICAgICAgICBpZiAoIXRoaXMuZm9ybS52YWxpZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbmV3VmFsdWVzID0gdGhpcy5mb3JtLmdldFJhd1ZhbHVlKCk7XG4gICAgICAgIHRoaXMuZm9ybS5kaXNhYmxlKCk7XG5cbiAgICAgICAgdGhpcy5zZXJ2aWNlXG4gICAgICAgICAgICAuY3JlYXRlKG5ld1ZhbHVlcylcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcChtb2RlbCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmluZm8oJGxvY2FsaXplYENyw6nDqWApO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZShtb2RlbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zdENyZWF0ZShtb2RlbCkucGlwZShlbmRXaXRoKG1vZGVsKSwgbGFzdCgpKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAobW9kZWwgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVkaXJlY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzUGFuZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvbGRVcmwgPSB0aGlzLnJvdXRlci51cmw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dFVybCA9IHRoaXMucGFuZWxEYXRhPy5jb25maWcucGFyYW1zLm5leHRSb3V0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdVcmwgPSBvbGRVcmwucmVwbGFjZSgnL25ldycsICcvJyArIG1vZGVsLmlkKSArIChuZXh0VXJsID8gJy8nICsgbmV4dFVybCA6ICcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChuZXdVcmwpOyAvLyByZXBsYWNlIC9uZXcgYnkgLzEyM1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuLicsIG1vZGVsLmlkXSwge3JlbGF0aXZlVG86IHRoaXMucm91dGV9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBFTVBUWTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLmZvcm0uZW5hYmxlKCkpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGBjb25maXJtZXJgIGNhbiBiZSB1c2VkIHRvIG9wZW4gYSBjdXN0b20gZGlhbG9nLCBvciBhbnl0aGluZyBlbHNlLCB0byBjb25maXJtIHRoZSBkZWxldGlvbiwgaW5zdGVhZCBvZiB0aGUgc3RhbmRhcmQgZGlhbG9nXG4gICAgICovXG4gICAgcHVibGljIGRlbGV0ZShyZWRpcmVjdGlvblJvdXRlPzogdW5rbm93bltdLCBjb25maXJtZXI/OiBPYnNlcnZhYmxlPGJvb2xlYW4gfCB1bmRlZmluZWQ+KTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybS5kaXNhYmxlKCk7XG5cbiAgICAgICAgKFxuICAgICAgICAgICAgY29uZmlybWVyID8/XG4gICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5jb25maXJtKFxuICAgICAgICAgICAgICAgICRsb2NhbGl6ZWBTdXBwcmVzc2lvbmAsXG4gICAgICAgICAgICAgICAgJGxvY2FsaXplYFZvdWxlei12b3VzIHN1cHByaW1lciBkw6lmaW5pdGl2ZW1lbnQgY2V0IMOpbMOpbWVudCA/YCxcbiAgICAgICAgICAgICAgICAkbG9jYWxpemVgU3VwcHJpbWVyIGTDqWZpbml0aXZlbWVudGAsXG4gICAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcChjb25maXJtZWQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbmZpcm1lZCB8fCAhdGhpcy5pc1VwZGF0ZVBhZ2UoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmVEZWxldGUodGhpcy5kYXRhLm1vZGVsKTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlLmRlbGV0ZShbdGhpcy5kYXRhLm1vZGVsXSkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuaW5mbygkbG9jYWxpemVgU3VwcHJpbcOpYCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1BhbmVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFuZWxTZXJ2aWNlPy5nb1RvUGVudWx0aW1hdGVQYW5lbCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBFTVBUWTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWZhdWx0Um91dGUgPSBbJy4uLy4uLycgKyBrZWJhYkNhc2UodGhpcy5rZXkpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucm91dGVyLm5hdmlnYXRlKHJlZGlyZWN0aW9uUm91dGUgPyByZWRpcmVjdGlvblJvdXRlIDogZGVmYXVsdFJvdXRlLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLmZvcm0uZW5hYmxlKCkpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBwcm90ZWN0ZWQgcG9zdFVwZGF0ZShtb2RlbDogRXh0cmFjdFR1cGRhdGU8VFNlcnZpY2U+KTogdm9pZCB7XG4gICAgICAgIC8vIG5vb3BcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIG9ic2VydmFibGUgdGhhdCB3aWxsIGJlIHN1YnNjcmliZWQgdG8gaW1tZWRpYXRlbHkgYW5kIHRoZVxuICAgICAqIHJlZGlyZWN0IG5hdmlnYXRpb24gd2lsbCBvbmx5IGhhcHBlbiBhZnRlciB0aGUgb2JzZXJ2YWJsZSBjb21wbGV0ZXMuXG4gICAgICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIHByb3RlY3RlZCBwb3N0Q3JlYXRlKG1vZGVsOiBFeHRyYWN0VGNyZWF0ZTxUU2VydmljZT4pOiBPYnNlcnZhYmxlPHVua25vd24+IHtcbiAgICAgICAgcmV0dXJuIEVNUFRZO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBwcm90ZWN0ZWQgcHJlRGVsZXRlKG1vZGVsOiBFeHRyYWN0VG9uZTxUU2VydmljZT4pOiB2b2lkIHtcbiAgICAgICAgLy8gbm9vcFxuICAgIH1cblxuICAgIHByb3RlY3RlZCBpbml0Rm9ybSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy4jaXNVcGRhdGVQYWdlID0gISF0aGlzLmRhdGEubW9kZWwuaWQ7XG4gICAgICAgIHRoaXMuZm9ybSA9IHRoaXMuc2VydmljZS5nZXRGb3JtR3JvdXAodGhpcy5kYXRhLm1vZGVsKTtcbiAgICAgICAgdGhpcy4jY2hhbmdlcy5pbml0aWFsaXplKHRoaXMuZm9ybS5nZXRSYXdWYWx1ZSgpKTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { cloneDeep, isEqual } from 'lodash-es';
|
|
2
|
+
/**
|
|
3
|
+
* Cumulate all changes made to an object over time
|
|
4
|
+
*/
|
|
5
|
+
export class CumulativeChanges {
|
|
6
|
+
#original = {};
|
|
7
|
+
#diff = {};
|
|
8
|
+
/**
|
|
9
|
+
* Initialize the original values, should be called exactly one time per instance
|
|
10
|
+
*/
|
|
11
|
+
initialize(originalValues) {
|
|
12
|
+
this.#original = cloneDeep(originalValues);
|
|
13
|
+
this.#diff = {};
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Returns a literal that contains only the keys whose values have been changed by this call or any previous calls.
|
|
17
|
+
*
|
|
18
|
+
* Eg:
|
|
19
|
+
*
|
|
20
|
+
* ```ts
|
|
21
|
+
* changes.initialize({a: 1, b: 2});
|
|
22
|
+
* changes.differences({a: 1, b: 3}); // => {b: 3}
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
differences(newValues) {
|
|
26
|
+
Object.keys(newValues).forEach(key => {
|
|
27
|
+
if (key in this.#diff ||
|
|
28
|
+
(newValues[key] !== undefined &&
|
|
29
|
+
(!(key in this.#original) || !isEqual(this.#original[key], newValues[key])))) {
|
|
30
|
+
this.#diff[key] = newValues[key];
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
return Object.keys(this.#diff).length ? this.#diff : null;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Commit the given new values, so they are not treated as differences anymore.
|
|
37
|
+
*/
|
|
38
|
+
commit(newValues) {
|
|
39
|
+
this.#original = {
|
|
40
|
+
...this.#original,
|
|
41
|
+
...cloneDeep(newValues),
|
|
42
|
+
};
|
|
43
|
+
Object.keys(newValues).forEach(key => {
|
|
44
|
+
if (key in this.#diff && isEqual(this.#diff[key], newValues[key])) {
|
|
45
|
+
delete this.#diff[key];
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VtdWxhdGl2ZS1jaGFuZ2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmF0dXJhbC9zcmMvbGliL2NsYXNzZXMvY3VtdWxhdGl2ZS1jaGFuZ2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsT0FBTyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBSTdDOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGlCQUFpQjtJQUMxQixTQUFTLEdBQU0sRUFBTyxDQUFDO0lBQ3ZCLEtBQUssR0FBZSxFQUFFLENBQUM7SUFFdkI7O09BRUc7SUFDSSxVQUFVLENBQUMsY0FBMkI7UUFDekMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNJLFdBQVcsQ0FBQyxTQUEwQjtRQUN6QyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNqQyxJQUNJLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSztnQkFDakIsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssU0FBUztvQkFDekIsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDbEYsQ0FBQztnQkFDRSxJQUFJLENBQUMsS0FBYSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM5QyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQzlELENBQUM7SUFFRDs7T0FFRztJQUNJLE1BQU0sQ0FBQyxTQUEwQjtRQUNwQyxJQUFJLENBQUMsU0FBUyxHQUFHO1lBQ2IsR0FBRyxJQUFJLENBQUMsU0FBUztZQUNqQixHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUM7U0FDMUIsQ0FBQztRQUVGLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2pDLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDaEUsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzNCLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Y2xvbmVEZWVwLCBpc0VxdWFsfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHtMaXRlcmFsfSBmcm9tICcuLi90eXBlcy90eXBlcyc7XG5pbXBvcnQge1JlYWRvbmx5RGVlcH0gZnJvbSAndHlwZS1mZXN0JztcblxuLyoqXG4gKiBDdW11bGF0ZSBhbGwgY2hhbmdlcyBtYWRlIHRvIGFuIG9iamVjdCBvdmVyIHRpbWVcbiAqL1xuZXhwb3J0IGNsYXNzIEN1bXVsYXRpdmVDaGFuZ2VzPFQgZXh0ZW5kcyBMaXRlcmFsPiB7XG4gICAgI29yaWdpbmFsOiBUID0ge30gYXMgVDtcbiAgICAjZGlmZjogUGFydGlhbDxUPiA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZSB0aGUgb3JpZ2luYWwgdmFsdWVzLCBzaG91bGQgYmUgY2FsbGVkIGV4YWN0bHkgb25lIHRpbWUgcGVyIGluc3RhbmNlXG4gICAgICovXG4gICAgcHVibGljIGluaXRpYWxpemUob3JpZ2luYWxWYWx1ZXM6IFJlYWRvbmx5PFQ+KTogdm9pZCB7XG4gICAgICAgIHRoaXMuI29yaWdpbmFsID0gY2xvbmVEZWVwKG9yaWdpbmFsVmFsdWVzKTtcbiAgICAgICAgdGhpcy4jZGlmZiA9IHt9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBsaXRlcmFsIHRoYXQgY29udGFpbnMgb25seSB0aGUga2V5cyB3aG9zZSB2YWx1ZXMgaGF2ZSBiZWVuIGNoYW5nZWQgYnkgdGhpcyBjYWxsIG9yIGFueSBwcmV2aW91cyBjYWxscy5cbiAgICAgKlxuICAgICAqIEVnOlxuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBjaGFuZ2VzLmluaXRpYWxpemUoe2E6IDEsIGI6IDJ9KTtcbiAgICAgKiBjaGFuZ2VzLmRpZmZlcmVuY2VzKHthOiAxLCBiOiAzfSk7IC8vID0+IHtiOiAzfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBkaWZmZXJlbmNlcyhuZXdWYWx1ZXM6IFJlYWRvbmx5RGVlcDxUPik6IFBhcnRpYWw8VD4gfCBudWxsIHtcbiAgICAgICAgT2JqZWN0LmtleXMobmV3VmFsdWVzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAga2V5IGluIHRoaXMuI2RpZmYgfHxcbiAgICAgICAgICAgICAgICAobmV3VmFsdWVzW2tleV0gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICAgICAoIShrZXkgaW4gdGhpcy4jb3JpZ2luYWwpIHx8ICFpc0VxdWFsKHRoaXMuI29yaWdpbmFsW2tleV0sIG5ld1ZhbHVlc1trZXldKSkpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAodGhpcy4jZGlmZiBhcyBhbnkpW2tleV0gPSBuZXdWYWx1ZXNba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuI2RpZmYpLmxlbmd0aCA/IHRoaXMuI2RpZmYgOiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbW1pdCB0aGUgZ2l2ZW4gbmV3IHZhbHVlcywgc28gdGhleSBhcmUgbm90IHRyZWF0ZWQgYXMgZGlmZmVyZW5jZXMgYW55bW9yZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgY29tbWl0KG5ld1ZhbHVlczogUmVhZG9ubHlEZWVwPFQ+KTogdm9pZCB7XG4gICAgICAgIHRoaXMuI29yaWdpbmFsID0ge1xuICAgICAgICAgICAgLi4udGhpcy4jb3JpZ2luYWwsXG4gICAgICAgICAgICAuLi5jbG9uZURlZXAobmV3VmFsdWVzKSxcbiAgICAgICAgfTtcblxuICAgICAgICBPYmplY3Qua2V5cyhuZXdWYWx1ZXMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIGlmIChrZXkgaW4gdGhpcy4jZGlmZiAmJiBpc0VxdWFsKHRoaXMuI2RpZmZba2V5XSwgbmV3VmFsdWVzW2tleV0pKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuI2RpZmZba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
|
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import { timer } from 'rxjs';
|
|
2
|
-
import { map, take, takeUntil, tap } from 'rxjs/operators';
|
|
1
|
+
import { map, take, takeUntil, tap, timer } from 'rxjs';
|
|
3
2
|
/**
|
|
4
3
|
* Behave like setTimeout(), but with a mandatory cancel mechanism.
|
|
5
4
|
*
|
|
6
5
|
* This is typically useful to replace setTimeout() in components where the callback
|
|
7
6
|
* would crash if executed after the component destruction. That can easily happen
|
|
8
|
-
* when the user
|
|
7
|
+
* when the user navigates quickly between pages.
|
|
9
8
|
*
|
|
10
9
|
* Typical usage in a component would be:
|
|
11
10
|
*
|
|
@@ -46,4 +45,4 @@ export function debug(debugName) {
|
|
|
46
45
|
complete: () => console.log('COMPLETE', debugName),
|
|
47
46
|
});
|
|
48
47
|
}
|
|
49
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnhqcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9jbGFzc2VzL3J4anMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLEdBQUcsRUFBd0MsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRTVGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EyQkc7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsU0FBOEIsRUFBRSxZQUFZLEdBQUcsQ0FBQztJQUMvRSxPQUFPLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQzNCLElBQUksQ0FBQyxDQUFDLENBQUMsRUFDUCxTQUFTLENBQUMsU0FBUyxDQUFDLEVBQ3BCLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDTCxPQUFPO0lBQ1gsQ0FBQyxDQUFDLENBQ0wsQ0FBQztBQUNOLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsS0FBSyxDQUFJLFNBQWlCO0lBQ3RDLE9BQU8sR0FBRyxDQUFJO1FBQ1YsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQztRQUNwRCxXQUFXLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsU0FBUyxDQUFDO1FBQ3hELElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUM7UUFDcEQsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQztRQUN0RCxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDO0tBQ3JELENBQUMsQ0FBQztBQUNQLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge21hcCwgTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uLCBPYnNlcnZhYmxlLCB0YWtlLCB0YWtlVW50aWwsIHRhcCwgdGltZXJ9IGZyb20gJ3J4anMnO1xuXG4vKipcbiAqIEJlaGF2ZSBsaWtlIHNldFRpbWVvdXQoKSwgYnV0IHdpdGggYSBtYW5kYXRvcnkgY2FuY2VsIG1lY2hhbmlzbS5cbiAqXG4gKiBUaGlzIGlzIHR5cGljYWxseSB1c2VmdWwgdG8gcmVwbGFjZSBzZXRUaW1lb3V0KCkgaW4gY29tcG9uZW50cyB3aGVyZSB0aGUgY2FsbGJhY2tcbiAqIHdvdWxkIGNyYXNoIGlmIGV4ZWN1dGVkIGFmdGVyIHRoZSBjb21wb25lbnQgZGVzdHJ1Y3Rpb24uIFRoYXQgY2FuIGVhc2lseSBoYXBwZW5cbiAqIHdoZW4gdGhlIHVzZXIgbmF2aWdhdGVzIHF1aWNrbHkgYmV0d2VlbiBwYWdlcy5cbiAqXG4gKiBUeXBpY2FsIHVzYWdlIGluIGEgY29tcG9uZW50IHdvdWxkIGJlOlxuICpcbiAqIGBgYHRzXG4gKiBjYW5jZWxsYWJsZVRpbWVvdXQodGhpcy5uZ1Vuc3Vic2NyaWJlKS5zdWJzY3JpYmUobXlDYWxsYmFjayk7XG4gKiBgYGBcbiAqXG4gKiBJbnN0ZWFkIG9mIHRoZSBtb3JlIGVycm9yIHByb25lOlxuICpcbiAqIGBgYHRzXG4gKiBwdWJsaWMgZm9vKCk6IHZvaWQge1xuICogICAgIHRoaXMudGltZW91dCA9IHNldFRpbWVvdXQobXlDYWxsQmFjayk7XG4gKiB9XG4gKlxuICogcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICogICAgIGlmICh0aGlzLnRpbWVvdXQpIHtcbiAqICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7XG4gKiAgICAgICAgIHRoaXMudGltZW91dCA9IG51bGw7XG4gKiAgICAgIH1cbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FuY2VsbGFibGVUaW1lb3V0KGNhbmNlbGxlcjogT2JzZXJ2YWJsZTx1bmtub3duPiwgbWlsbGlTZWNvbmRzID0gMCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aW1lcihtaWxsaVNlY29uZHMpLnBpcGUoXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIHRha2VVbnRpbChjYW5jZWxsZXIpLFxuICAgICAgICBtYXAoKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9KSxcbiAgICApO1xufVxuXG4vKipcbiAqIEZvciBkZWJ1Z2dpbmcgcHVycG9zZSBvbmx5LCB3aWxsIGR1bXAgaW4gY29uc29sZSBldmVyeXRoaW5nIHRoYXQgaGFwcGVuIHRvXG4gKiB0aGUgb2JzZXJ2YWJsZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVidWc8VD4oZGVidWdOYW1lOiBzdHJpbmcpOiBNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb248VD4ge1xuICAgIHJldHVybiB0YXA8VD4oe1xuICAgICAgICBzdWJzY3JpYmU6ICgpID0+IGNvbnNvbGUubG9nKCdTVUJTQ1JJQkUnLCBkZWJ1Z05hbWUpLFxuICAgICAgICB1bnN1YnNjcmliZTogKCkgPT4gY29uc29sZS5sb2coJ1VOU1VCU0NSSUJFJywgZGVidWdOYW1lKSxcbiAgICAgICAgbmV4dDogdmFsdWUgPT4gY29uc29sZS5sb2coJ05FWFQnLCBkZWJ1Z05hbWUsIHZhbHVlKSxcbiAgICAgICAgZXJyb3I6IGVycm9yID0+IGNvbnNvbGUubG9nKCdFUlJPUicsIGRlYnVnTmFtZSwgZXJyb3IpLFxuICAgICAgICBjb21wbGV0ZTogKCkgPT4gY29uc29sZS5sb2coJ0NPTVBMRVRFJywgZGVidWdOYW1lKSxcbiAgICB9KTtcbn1cbiJdfQ==
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { isArray,
|
|
1
|
+
import { isArray, pickBy } from 'lodash-es';
|
|
2
2
|
import { SortingOrder } from './query-variable-manager';
|
|
3
3
|
export function formatIsoDate(date) {
|
|
4
4
|
if (!date) {
|
|
@@ -66,24 +66,6 @@ export function relationsToIds(object) {
|
|
|
66
66
|
function hasId(value) {
|
|
67
67
|
return !!value && typeof value === 'object' && 'id' in value && !!value.id;
|
|
68
68
|
}
|
|
69
|
-
/**
|
|
70
|
-
* Remove from source object the attributes with same value as modified
|
|
71
|
-
* Does not consider arrays
|
|
72
|
-
*/
|
|
73
|
-
export function cleanSameValues(source, modified) {
|
|
74
|
-
Object.keys(source).forEach(key => {
|
|
75
|
-
if (source[key] instanceof Object) {
|
|
76
|
-
cleanSameValues(source[key], modified[key]);
|
|
77
|
-
if (isEmpty(source[key])) {
|
|
78
|
-
delete source[key];
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
else if (modified && source[key] === modified[key]) {
|
|
82
|
-
delete source[key];
|
|
83
|
-
}
|
|
84
|
-
});
|
|
85
|
-
return source;
|
|
86
|
-
}
|
|
87
69
|
/**
|
|
88
70
|
* Returns the plural form of the given name
|
|
89
71
|
*
|
|
@@ -107,12 +89,6 @@ export function makePlural(name) {
|
|
|
107
89
|
export function upperCaseFirstLetter(term) {
|
|
108
90
|
return term.charAt(0).toUpperCase() + term.slice(1);
|
|
109
91
|
}
|
|
110
|
-
/**
|
|
111
|
-
* Returns the string with the first letter as lower case
|
|
112
|
-
*/
|
|
113
|
-
export function lowerCaseFirstLetter(term) {
|
|
114
|
-
return term.charAt(0).toLowerCase() + term.slice(1);
|
|
115
|
-
}
|
|
116
92
|
/**
|
|
117
93
|
* Replace all attributes of first object with the ones provided by the second, but keeps the reference
|
|
118
94
|
*/
|
|
@@ -241,4 +217,4 @@ export function validateColumns(data) {
|
|
|
241
217
|
}
|
|
242
218
|
return data.split(',').filter(string => string);
|
|
243
219
|
}
|
|
244
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9jbGFzc2VzL3V0aWxpdHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBR25ELE9BQU8sRUFBMkIsWUFBWSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFVaEYsTUFBTSxVQUFVLGFBQWEsQ0FBQyxJQUFpQjtJQUMzQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDUixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzdCLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDOUIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBRXpCLE9BQU8sQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzdFLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxJQUFVO0lBQ3hDLE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDekQsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsdUJBQXVCLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyx1QkFBdUI7SUFDaEcsTUFBTSxJQUFJ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Q0FBQztJQUNoQixDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3BELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2lzQXJyYXksIGlzRW1wdHksIHBpY2tCeX0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7TGl0ZXJhbH0gZnJvbSAnLi4vdHlwZXMvdHlwZXMnO1xuaW1wb3J0IHR5cGUge1JlYWRvbmx5RGVlcH0gZnJvbSAndHlwZS1mZXN0JztcbmltcG9ydCB7UGFnaW5hdGlvbklucHV0LCBTb3J0aW5nLCBTb3J0aW5nT3JkZXJ9IGZyb20gJy4vcXVlcnktdmFyaWFibGUtbWFuYWdlcic7XG5cbi8qKlxuICogVmVyeSBiYXNpYyBmb3JtYXR0aW5nIHRvIGdldCBvbmx5IGRhdGUsIHdpdGhvdXQgdGltZSBhbmQgaWdub3JpbmcgZW50aXJlbHkgdGhlIHRpbWV6b25lXG4gKlxuICogU28gc29tZXRoaW5nIGxpa2U6IFwiMjAyMS0wOS0yM1wiXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRJc29EYXRlKGRhdGU6IG51bGwpOiBudWxsO1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdElzb0RhdGUoZGF0ZTogRGF0ZSk6IHN0cmluZztcbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRJc29EYXRlKGRhdGU6IERhdGUgfCBudWxsKTogc3RyaW5nIHwgbnVsbDtcbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRJc29EYXRlKGRhdGU6IERhdGUgfCBudWxsKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKCFkYXRlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHkgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgY29uc3QgbSA9IGRhdGUuZ2V0TW9udGgoKSArIDE7XG4gICAgY29uc3QgZCA9IGRhdGUuZ2V0RGF0ZSgpO1xuXG4gICAgcmV0dXJuIHkgKyAnLScgKyAobSA8IDEwID8gJzAnIDogJycpICsgbSArICctJyArIChkIDwgMTAgPyAnMCcgOiAnJykgKyBkO1xufVxuXG4vKipcbiAqIEZvcm1hdCBhIGRhdGUgYW5kIHRpbWUgaW4gYSB3YXkgdGhhdCB3aWxsIHByZXNlcnZlIHRoZSBsb2NhbCB0aW1lIHpvbmUuXG4gKiBUaGlzIGFsbG93cyB0aGUgc2VydmVyIHNpZGUgdG8ga25vdyB0aGUgZGF5ICh3aXRob3V0IHRpbWUpIHRoYXQgd2FzIHNlbGVjdGVkIG9uIGNsaWVudCBzaWRlLlxuICpcbiAqIFNvIHNvbWV0aGluZyBsaWtlOiBcIjIwMjEtMDktMjNUMTc6NTc6MTYrMDk6MDBcIlxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0SXNvRGF0ZVRpbWUoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgY29uc3QgdGltZXpvbmVPZmZzZXRJbk1pbnV0ZXMgPSBkYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgY29uc3QgdGltZXpvbmVPZmZzZXRJbkhvdXJzID0gLU1hdGgudHJ1bmModGltZXpvbmVPZmZzZXRJbk1pbnV0ZXMgLyA2MCk7IC8vIFVUQyBtaW51cyBsb2NhbCB0aW1lXG4gICAgY29uc3Qgc2lnbiA9IHRpbWV6b25lT2Zmc2V0SW5Ib3VycyA+PSAwID8gJysnIDogJy0nO1xuICAgIGNvbnN0IGhvdXJzTGVhZGluZ1plcm8gPSBNYXRoLmFicyh0aW1lem9uZU9mZnNldEluSG91cnMpIDwgMTAgPyAnMCcgOiAnJztcbiAgICBjb25zdCByZW1haW5kZXJNaW51dGVzID0gLSh0aW1lem9uZU9mZnNldEluTWludXRlcyAlIDYwKTtcbiAgICBjb25zdCBtaW51dGVzTGVhZGluZ1plcm8gPSBNYXRoLmFicyhyZW1haW5kZXJNaW51dGVzKSA8IDEwID8gJzAnIDogJyc7XG5cbiAgICAvLyBJdCdzIGEgYml0IHVuZm9ydHVuYXRlIHRoYXQgd2UgbmVlZCB0byBjb25zdHJ1Y3QgYSBuZXcgRGF0ZSBpbnN0YW5jZSxcbiAgICAvLyBidXQgd2UgZG9uJ3Qgd2FudCB0aGUgb3JpZ2luYWwgRGF0ZSBpbnN0YW5jZSB0byBiZSBtb2RpZmllZFxuICAgIGNvbnN0IGNvcnJlY3RlZERhdGUgPSBuZXcgRGF0ZShcbiAgICAgICAgZGF0ZS5nZXRGdWxsWWVhcigpLFxuICAgICAgICBkYXRlLmdldE1vbnRoKCksXG4gICAgICAgIGRhdGUuZ2V0RGF0ZSgpLFxuICAgICAgICBkYXRlLmdldEhvdXJzKCksXG4gICAgICAgIGRhdGUuZ2V0TWludXRlcygpLFxuICAgICAgICBkYXRlLmdldFNlY29uZHMoKSxcbiAgICAgICAgZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSxcbiAgICApO1xuICAgIGNvcnJlY3RlZERhdGUuc2V0SG91cnMoZGF0ZS5nZXRIb3VycygpICsgdGltZXpvbmVPZmZzZXRJbkhvdXJzKTtcblxuICAgIGNvbnN0IGlzbyA9IGNvcnJlY3RlZERhdGVcbiAgICAgICAgLnRvSVNPU3RyaW5nKClcbiAgICAgICAgLnJlcGxhY2UoL1xcLlxcZHszfVovLCAnJylcbiAgICAgICAgLnJlcGxhY2UoJ1onLCAnJyk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICBpc28gK1xuICAgICAgICBzaWduICtcbiAgICAgICAgaG91cnNMZWFkaW5nWmVybyArXG4gICAgICAgIE1hdGguYWJzKHRpbWV6b25lT2Zmc2V0SW5Ib3VycykudG9TdHJpbmcoKSArXG4gICAgICAgICc6JyArXG4gICAgICAgIG1pbnV0ZXNMZWFkaW5nWmVybyArXG4gICAgICAgIHJlbWFpbmRlck1pbnV0ZXNcbiAgICApO1xufVxuXG4vKipcbiAqIFJlbGF0aW9ucyB0byBmdWxsIG9iamVjdHMgYXJlIGNvbnZlcnRlZCB0byB0aGVpciBJRHMgb25seS5cbiAqXG4gKiBTbyB7dXNlcjoge2lkOiAxMjN9fSBiZWNvbWVzIHt1c2VyOiAxMjN9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWxhdGlvbnNUb0lkcyhvYmplY3Q6IExpdGVyYWwpOiBMaXRlcmFsIHtcbiAgICBjb25zdCBuZXdPYmo6IExpdGVyYWwgPSB7fTtcbiAgICBPYmplY3Qua2V5cyhvYmplY3QpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgbGV0IHZhbHVlOiB1bmtub3duID0gb2JqZWN0W2tleV07XG5cbiAgICAgICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIG5vb3BcbiAgICAgICAgfSBlbHNlIGlmIChoYXNJZCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuaWQ7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUubWFwKChpOiB1bmtub3duKSA9PiAoaGFzSWQoaSkgPyBpLmlkIDogaSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgISh2YWx1ZSBpbnN0YW5jZW9mIEZpbGUpICYmICEodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSkge1xuICAgICAgICAgICAgdmFsdWUgPSBwaWNrQnkodmFsdWUsICh2LCBrKSA9PiBrICE9PSAnX190eXBlbmFtZScpOyAvLyBvbWl0KHZhbHVlLCBbJ19fdHlwZW5hbWUnXSkgP1xuICAgICAgICB9XG5cbiAgICAgICAgbmV3T2JqW2tleV0gPSB2YWx1ZTtcbiAgICB9KTtcblxuICAgIHJldHVybiBuZXdPYmo7XG59XG5cbmZ1bmN0aW9uIGhhc0lkKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMge2lkOiB1bmtub3dufSB7XG4gICAgcmV0dXJuICEhdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAnaWQnIGluIHZhbHVlICYmICEhdmFsdWUuaWQ7XG59XG5cbi8qKlxuICogUmVtb3ZlIGZyb20gc291cmNlIG9iamVjdCB0aGUgYXR0cmlidXRlcyB3aXRoIHNhbWUgdmFsdWUgYXMgbW9kaWZpZWRcbiAqIERvZXMgbm90IGNvbnNpZGVyIGFycmF5c1xuICovXG5leHBvcnQgZnVuY3Rpb24gY2xlYW5TYW1lVmFsdWVzKHNvdXJjZTogTGl0ZXJhbCwgbW9kaWZpZWQ6IExpdGVyYWwpOiBMaXRlcmFsIHtcbiAgICBPYmplY3Qua2V5cyhzb3VyY2UpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgaWYgKHNvdXJjZVtrZXldIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICAgICAgICBjbGVhblNhbWVWYWx1ZXMoc291cmNlW2tleV0sIG1vZGlmaWVkW2tleV0pO1xuICAgICAgICAgICAgaWYgKGlzRW1wdHkoc291cmNlW2tleV0pKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHNvdXJjZVtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKG1vZGlmaWVkICYmIHNvdXJjZVtrZXldID09PSBtb2RpZmllZFtrZXldKSB7XG4gICAgICAgICAgICBkZWxldGUgc291cmNlW2tleV07XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBzb3VyY2U7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgcGx1cmFsIGZvcm0gb2YgdGhlIGdpdmVuIG5hbWVcbiAqXG4gKiBUaGlzIGlzICoqbm90KiogbmVjZXNzYXJpbHkgdmFsaWQgZW5nbGlzaCBncmFtbWFyLiBJdHMgb25seSBwdXJwb3NlIGlzIGZvciBpbnRlcm5hbCB1c2FnZSwgbm90IGZvciBodW1hbnMuXG4gKlxuICogVGhpcyAqKk1VU1QqKiBiZSBrZXB0IGluIHN5bmMgd2l0aCBgXFxFY29kZXZcXEZlbGl4XFxBcGlcXFBsdXJhbDptYWtlKClgLlxuICpcbiAqIFRoaXMgaXMgYSBiaXQgcGVyZm9ybWFuY2Utc2Vuc2l0aXZlLCBzbyB3ZSBzaG91bGQga2VlcCBpdCBmYXN0IGFuZCBvbmx5IGNvdmVyIGNhc2VzIHRoYXQgd2UgYWN0dWFsbHkgbmVlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1ha2VQbHVyYWwobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBXb3JkcyBlbmRpbmcgaW4gYSB5IHByZWNlZGVkIGJ5IGEgdm93ZWwgZm9ybSB0aGVpciBwbHVyYWxzIGJ5IGFkZGluZyAtczpcbiAgICBpZiAobmFtZS5tYXRjaCgvW2FlaW91XXkkLykpIHtcbiAgICAgICAgcmV0dXJuIG5hbWUgKyAncyc7XG4gICAgfVxuXG4gICAgY29uc3QgcGx1cmFsID0gbmFtZSArICdzJztcblxuICAgIHJldHVybiBwbHVyYWwucmVwbGFjZSgveXMkLywgJ2llcycpLnJlcGxhY2UoL3NzJC8sICdzZXMnKS5yZXBsYWNlKC94cyQvLCAneGVzJyk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgc3RyaW5nIHdpdGggdGhlIGZpcnN0IGxldHRlciBhcyBjYXBpdGFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cHBlckNhc2VGaXJzdExldHRlcih0ZXJtOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0ZXJtLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdGVybS5zbGljZSgxKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBzdHJpbmcgd2l0aCB0aGUgZmlyc3QgbGV0dGVyIGFzIGxvd2VyIGNhc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvd2VyQ2FzZUZpcnN0TGV0dGVyKHRlcm06IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRlcm0uY2hhckF0KDApLnRvTG93ZXJDYXNlKCkgKyB0ZXJtLnNsaWNlKDEpO1xufVxuXG4vKipcbiAqIFJlcGxhY2UgYWxsIGF0dHJpYnV0ZXMgb2YgZmlyc3Qgb2JqZWN0IHdpdGggdGhlIG9uZXMgcHJvdmlkZWQgYnkgdGhlIHNlY29uZCwgYnV0IGtlZXBzIHRoZSByZWZlcmVuY2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VPYmplY3RLZWVwaW5nUmVmZXJlbmNlKG9iajogTGl0ZXJhbCB8IG51bGwsIG5ld09iajogTGl0ZXJhbCB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAoIW9iaiB8fCAhbmV3T2JqKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgZGVsZXRlIG9ialtrZXldO1xuICAgIH0pO1xuXG4gICAgT2JqZWN0LmtleXMobmV3T2JqKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIG9ialtrZXldID0gbmV3T2JqW2tleV07XG4gICAgfSk7XG59XG5cbi8qKlxuICogR2V0IGNvbnRyYXN0ZWQgY29sb3IgZm9yIHRleHQgaW4gdGhlIHNsaWRlciB0aHVtYlxuICogQHBhcmFtIGhleEJnQ29sb3Igc3RyaW5nIGluIGhleGFkZWNpbWFscyByZXByZXNlbnRpbmcgdGhlIGJhY2tncm91bmQgY29sb3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcmVncm91bmRDb2xvcihoZXhCZ0NvbG9yOiBzdHJpbmcpOiAnYmxhY2snIHwgJ3doaXRlJyB7XG4gICAgY29uc3QgcmdiID0gaGV4VG9SZ2IoaGV4QmdDb2xvci5zbGljZSgwLCA3KSk7IC8vIHNwbGljZSByZW1vdmUgYWxwaGEgYW5kIGNvbnNpZGVyIG9ubHkgXCJ2aXNpYmxlXCIgY29sb3IgYXQgMTAwJSBhbHBoYVxuICAgIGNvbnN0IG8gPSBNYXRoLnJvdW5kKChyZ2IuciAqIDI5OSArIHJnYi5nICogNTg3ICsgcmdiLmIgKiAxMTQpIC8gMTAwMCk7XG5cbiAgICByZXR1cm4gbyA+IDEyNSA/ICdibGFjaycgOiAnd2hpdGUnO1xufVxuXG5mdW5jdGlvbiBoZXhUb1JnYihoZXg6IHN0cmluZyk6IHtyOiBudW1iZXI7IGc6IG51bWJlcjsgYjogbnVtYmVyfSB7XG4gICAgLy8gRXhwYW5kIHNob3J0aGFuZCBmb3JtIChlLmcuIFwiMDNGXCIpIHRvIGZ1bGwgZm9ybSAoZS5nLiBcIjAwMzNGRlwiKVxuICAgIGNvbnN0IHNob3J0aGFuZFJlZ2V4ID0gL14jPyhbYS1mXFxkXSkoW2EtZlxcZF0pKFthLWZcXGRdKSQvaTtcbiAgICBoZXggPSBoZXgucmVwbGFjZShzaG9ydGhhbmRSZWdleCwgKG0sIHIsIGcsIGIpID0+IHtcbiAgICAgICAgcmV0dXJuIHIgKyByICsgZyArIGcgKyBiICsgYjtcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IC9eIz8oW2EtZlxcZF17Mn0pKFthLWZcXGRdezJ9KShbYS1mXFxkXXsyfSkkL2kuZXhlYyhoZXgpO1xuICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAgIHI6IHBhcnNlSW50KHJlc3VsdFsxXSwgMTYpLFxuICAgICAgICAgICAgICBnOiBwYXJzZUludChyZXN1bHRbMl0sIDE2KSxcbiAgICAgICAgICAgICAgYjogcGFyc2VJbnQocmVzdWx0WzNdLCAxNiksXG4gICAgICAgICAgfVxuICAgICAgICA6IHtcbiAgICAgICAgICAgICAgcjogMCxcbiAgICAgICAgICAgICAgZzogMCxcbiAgICAgICAgICAgICAgYjogMCxcbiAgICAgICAgICB9O1xufVxuXG4vKipcbiAqIER1cmluZyBsb2Rhc2gubWVyZ2VXaXRoLCBvdmVycmlkZXMgYXJyYXlzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZU92ZXJyaWRlQXJyYXkoZGVzdFZhbHVlOiBhbnksIHNvdXJjZTogYW55KTogYW55IHtcbiAgICBpZiAoaXNBcnJheShzb3VyY2UpKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2U7XG4gICAgfVxufVxuXG4vKipcbiAqIENvcHkgdGV4dCB0byBjbGlwYm9hcmQuXG4gKiBBY2NlcHRzIGxpbmUgYnJlYWtzIGBcXG5gIGFzIHRleHRhcmVhIGRvLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29weVRvQ2xpcGJvYXJkKGRvY3VtZW50OiBEb2N1bWVudCwgdGV4dDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZXh0YXJlYScpO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kKGlucHV0KTtcbiAgICBpbnB1dC52YWx1ZSA9IHRleHQ7XG4gICAgaW5wdXQuc2VsZWN0KCk7XG4gICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2NvcHknKTtcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGlucHV0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZXBGcmVlemU8VCBleHRlbmRzIExpdGVyYWw+KG86IFQpOiBSZWFkb25seURlZXA8VD4ge1xuICAgIE9iamVjdC52YWx1ZXMobykuZm9yRWFjaCh2ID0+IE9iamVjdC5pc0Zyb3plbih2KSB8fCBkZWVwRnJlZXplKHYpKTtcblxuICAgIHJldHVybiBPYmplY3QuZnJlZXplKG8pIGFzIFJlYWRvbmx5RGVlcDxUPjtcbn1cblxuLyoqXG4gKiBSZXR1cm4gYSB2YWxpZCBQYWdpbmF0aW9uSW5wdXQgZnJvbSB3aGF0ZXZlciBpcyBhdmFpbGFibGUgZnJvbSBkYXRhLiBJbnZhbGlkIHByb3BlcnRpZXMvdHlwZXMgd2lsbCBiZSBkcm9wcGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVQYWdpbmF0aW9uKGRhdGE6IHVua25vd24pOiBQYWdpbmF0aW9uSW5wdXQgfCBudWxsIHtcbiAgICBpZiAoIWRhdGEgfHwgdHlwZW9mIGRhdGEgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcGFnaW5hdGlvbjogUGFnaW5hdGlvbklucHV0ID0ge307XG5cbiAgICBpZiAoJ29mZnNldCcgaW4gZGF0YSAmJiAoZGF0YS5vZmZzZXQgPT09IG51bGwgfHwgdHlwZW9mIGRhdGEub2Zmc2V0ID09PSAnbnVtYmVyJykpIHtcbiAgICAgICAgcGFnaW5hdGlvbi5vZmZzZXQgPSBkYXRhLm9mZnNldDtcbiAgICB9XG5cbiAgICBpZiAoJ3BhZ2VJbmRleCcgaW4gZGF0YSAmJiAoZGF0YS5wYWdlSW5kZXggPT09IG51bGwgfHwgdHlwZW9mIGRhdGEucGFnZUluZGV4ID09PSAnbnVtYmVyJykpIHtcbiAgICAgICAgcGFnaW5hdGlvbi5wYWdlSW5kZXggPSBkYXRhLnBhZ2VJbmRleDtcbiAgICB9XG5cbiAgICBpZiAoJ3BhZ2VTaXplJyBpbiBkYXRhICYmIChkYXRhLnBhZ2VTaXplID09PSBudWxsIHx8IHR5cGVvZiBkYXRhLnBhZ2VTaXplID09PSAnbnVtYmVyJykpIHtcbiAgICAgICAgcGFnaW5hdGlvbi5wYWdlU2l6ZSA9IGRhdGEucGFnZVNpemU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhZ2luYXRpb247XG59XG5cbi8qKlxuICogUmV0dXJuIGEgdmFsaWQgU29ydGluZ3MgZnJvbSB3aGF0ZXZlciBpcyBhdmFpbGFibGUgZnJvbSBkYXRhLiBJbnZhbGlkIHByb3BlcnRpZXMvdHlwZXMgd2lsbCBiZSBkcm9wcGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVTb3J0aW5nKGRhdGE6IHVua25vd24pOiBTb3J0aW5nW10gfCBudWxsIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdDogU29ydGluZ1tdID0gW107XG4gICAgZGF0YS5mb3JFYWNoKHMgPT4ge1xuICAgICAgICBjb25zdCByID0gdmFsaWRhdGVPbmVTb3J0aW5nKHMpO1xuICAgICAgICBpZiAocikge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2gocik7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlT25lU29ydGluZyhkYXRhOiB1bmtub3duKTogU29ydGluZyB8IG51bGwge1xuICAgIGlmICghZGF0YSB8fCB0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcgfHwgISgnZmllbGQnIGluIGRhdGEpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHNvcnRpbmc6IFNvcnRpbmcgPSB7ZmllbGQ6IGRhdGEuZmllbGR9O1xuXG4gICAgaWYgKFxuICAgICAgICAnb3JkZXInIGluIGRhdGEgJiZcbiAgICAgICAgKGRhdGEub3JkZXIgPT09IFNvcnRpbmdPcmRlci5BU0MgfHwgZGF0YS5vcmRlciA9PT0gU29ydGluZ09yZGVyLkRFU0MgfHwgZGF0YS5vcmRlciA9PT0gbnVsbClcbiAgICApIHtcbiAgICAgICAgc29ydGluZy5vcmRlciA9IGRhdGEub3JkZXI7XG4gICAgfVxuXG4gICAgaWYgKCdudWxsQXNIaWdoZXN0JyBpbiBkYXRhICYmIChkYXRhLm51bGxBc0hpZ2hlc3QgPT09IG51bGwgfHwgdHlwZW9mIGRhdGEubnVsbEFzSGlnaGVzdCA9PT0gJ2Jvb2xlYW4nKSkge1xuICAgICAgICBzb3J0aW5nLm51bGxBc0hpZ2hlc3QgPSBkYXRhLm51bGxBc0hpZ2hlc3Q7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgICAnZW1wdHlTdHJpbmdBc0hpZ2hlc3QnIGluIGRhdGEgJiZcbiAgICAgICAgKGRhdGEuZW1wdHlTdHJpbmdBc0hpZ2hlc3QgPT09IG51bGwgfHwgdHlwZW9mIGRhdGEuZW1wdHlTdHJpbmdBc0hpZ2hlc3QgPT09ICdib29sZWFuJylcbiAgICApIHtcbiAgICAgICAgc29ydGluZy5lbXB0eVN0cmluZ0FzSGlnaGVzdCA9IGRhdGEuZW1wdHlTdHJpbmdBc0hpZ2hlc3Q7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNvcnRpbmc7XG59XG5cbi8qKlxuICogUmV0dXJuIHZhbGlkIGNvbHVtbnMgZnJvbSB3aGF0ZXZlciBpcyBhdmFpbGFibGUgZnJvbSBkYXRhLiBJbnZhbGlkIHByb3BlcnRpZXMvdHlwZXMgd2lsbCBiZSBkcm9wcGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVDb2x1bW5zKGRhdGE6IHVua25vd24pOiBzdHJpbmdbXSB8IG51bGwge1xuICAgIGlmICh0eXBlb2YgZGF0YSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGEuc3BsaXQoJywnKS5maWx0ZXIoc3RyaW5nID0+IHN0cmluZyk7XG59XG4iXX0=
|
|
220
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9jbGFzc2VzL3V0aWxpdHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFHMUMsT0FBTyxFQUEyQixZQUFZLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQVVoRixNQUFNLFVBQVUsYUFBYSxDQUFDLElBQWlCO0lBQzNDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNSLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDN0IsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUM5QixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFFekIsT0FBTyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0UsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLGlCQUFpQixDQUFDLElBQVU7SUFDeEMsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUN6RCxNQUFNLHFCQUFxQixHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLHVCQUF1QjtJQUNoRyxNQUFNLElBQUksR0FBRyxxQkFB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QUssU0FBUyxDQUFDLEVBQ3hGLENBQUM7UUFDQyxPQUFPLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDO0lBQzdELENBQUM7SUFFRCxPQUFPLE9BQU8sQ0FBQztBQUNuQixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUFDLElBQWE7SUFDekMsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUMzQixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3BELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2lzQXJyYXksIHBpY2tCeX0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7TGl0ZXJhbH0gZnJvbSAnLi4vdHlwZXMvdHlwZXMnO1xuaW1wb3J0IHR5cGUge1JlYWRvbmx5RGVlcH0gZnJvbSAndHlwZS1mZXN0JztcbmltcG9ydCB7UGFnaW5hdGlvbklucHV0LCBTb3J0aW5nLCBTb3J0aW5nT3JkZXJ9IGZyb20gJy4vcXVlcnktdmFyaWFibGUtbWFuYWdlcic7XG5cbi8qKlxuICogVmVyeSBiYXNpYyBmb3JtYXR0aW5nIHRvIGdldCBvbmx5IGRhdGUsIHdpdGhvdXQgdGltZSBhbmQgaWdub3JpbmcgZW50aXJlbHkgdGhlIHRpbWV6b25lXG4gKlxuICogU28gc29tZXRoaW5nIGxpa2U6IFwiMjAyMS0wOS0yM1wiXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRJc29EYXRlKGRhdGU6IG51bGwpOiBudWxsO1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdElzb0RhdGUoZGF0ZTogRGF0ZSk6IHN0cmluZztcbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRJc29EYXRlKGRhdGU6IERhdGUgfCBudWxsKTogc3RyaW5nIHwgbnVsbDtcbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRJc29EYXRlKGRhdGU6IERhdGUgfCBudWxsKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKCFkYXRlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHkgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgY29uc3QgbSA9IGRhdGUuZ2V0TW9udGgoKSArIDE7XG4gICAgY29uc3QgZCA9IGRhdGUuZ2V0RGF0ZSgpO1xuXG4gICAgcmV0dXJuIHkgKyAnLScgKyAobSA8IDEwID8gJzAnIDogJycpICsgbSArICctJyArIChkIDwgMTAgPyAnMCcgOiAnJykgKyBkO1xufVxuXG4vKipcbiAqIEZvcm1hdCBhIGRhdGUgYW5kIHRpbWUgaW4gYSB3YXkgdGhhdCB3aWxsIHByZXNlcnZlIHRoZSBsb2NhbCB0aW1lIHpvbmUuXG4gKiBUaGlzIGFsbG93cyB0aGUgc2VydmVyIHNpZGUgdG8ga25vdyB0aGUgZGF5ICh3aXRob3V0IHRpbWUpIHRoYXQgd2FzIHNlbGVjdGVkIG9uIGNsaWVudCBzaWRlLlxuICpcbiAqIFNvIHNvbWV0aGluZyBsaWtlOiBcIjIwMjEtMDktMjNUMTc6NTc6MTYrMDk6MDBcIlxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0SXNvRGF0ZVRpbWUoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgY29uc3QgdGltZXpvbmVPZmZzZXRJbk1pbnV0ZXMgPSBkYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgY29uc3QgdGltZXpvbmVPZmZzZXRJbkhvdXJzID0gLU1hdGgudHJ1bmModGltZXpvbmVPZmZzZXRJbk1pbnV0ZXMgLyA2MCk7IC8vIFVUQyBtaW51cyBsb2NhbCB0aW1lXG4gICAgY29uc3Qgc2lnbiA9IHRpbWV6b25lT2Zmc2V0SW5Ib3VycyA+PSAwID8gJysnIDogJy0nO1xuICAgIGNvbnN0IGhvdXJzTGVhZGluZ1plcm8gPSBNYXRoLmFicyh0aW1lem9uZU9mZnNldEluSG91cnMpIDwgMTAgPyAnMCcgOiAnJztcbiAgICBjb25zdCByZW1haW5kZXJNaW51dGVzID0gLSh0aW1lem9uZU9mZnNldEluTWludXRlcyAlIDYwKTtcbiAgICBjb25zdCBtaW51dGVzTGVhZGluZ1plcm8gPSBNYXRoLmFicyhyZW1haW5kZXJNaW51dGVzKSA8IDEwID8gJzAnIDogJyc7XG5cbiAgICAvLyBJdCdzIGEgYml0IHVuZm9ydHVuYXRlIHRoYXQgd2UgbmVlZCB0byBjb25zdHJ1Y3QgYSBuZXcgRGF0ZSBpbnN0YW5jZSxcbiAgICAvLyBidXQgd2UgZG9uJ3Qgd2FudCB0aGUgb3JpZ2luYWwgRGF0ZSBpbnN0YW5jZSB0byBiZSBtb2RpZmllZFxuICAgIGNvbnN0IGNvcnJlY3RlZERhdGUgPSBuZXcgRGF0ZShcbiAgICAgICAgZGF0ZS5nZXRGdWxsWWVhcigpLFxuICAgICAgICBkYXRlLmdldE1vbnRoKCksXG4gICAgICAgIGRhdGUuZ2V0RGF0ZSgpLFxuICAgICAgICBkYXRlLmdldEhvdXJzKCksXG4gICAgICAgIGRhdGUuZ2V0TWludXRlcygpLFxuICAgICAgICBkYXRlLmdldFNlY29uZHMoKSxcbiAgICAgICAgZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSxcbiAgICApO1xuICAgIGNvcnJlY3RlZERhdGUuc2V0SG91cnMoZGF0ZS5nZXRIb3VycygpICsgdGltZXpvbmVPZmZzZXRJbkhvdXJzKTtcblxuICAgIGNvbnN0IGlzbyA9IGNvcnJlY3RlZERhdGVcbiAgICAgICAgLnRvSVNPU3RyaW5nKClcbiAgICAgICAgLnJlcGxhY2UoL1xcLlxcZHszfVovLCAnJylcbiAgICAgICAgLnJlcGxhY2UoJ1onLCAnJyk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICBpc28gK1xuICAgICAgICBzaWduICtcbiAgICAgICAgaG91cnNMZWFkaW5nWmVybyArXG4gICAgICAgIE1hdGguYWJzKHRpbWV6b25lT2Zmc2V0SW5Ib3VycykudG9TdHJpbmcoKSArXG4gICAgICAgICc6JyArXG4gICAgICAgIG1pbnV0ZXNMZWFkaW5nWmVybyArXG4gICAgICAgIHJlbWFpbmRlck1pbnV0ZXNcbiAgICApO1xufVxuXG4vKipcbiAqIFJlbGF0aW9ucyB0byBmdWxsIG9iamVjdHMgYXJlIGNvbnZlcnRlZCB0byB0aGVpciBJRHMgb25seS5cbiAqXG4gKiBTbyB7dXNlcjoge2lkOiAxMjN9fSBiZWNvbWVzIHt1c2VyOiAxMjN9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWxhdGlvbnNUb0lkcyhvYmplY3Q6IExpdGVyYWwpOiBMaXRlcmFsIHtcbiAgICBjb25zdCBuZXdPYmo6IExpdGVyYWwgPSB7fTtcbiAgICBPYmplY3Qua2V5cyhvYmplY3QpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgbGV0IHZhbHVlOiB1bmtub3duID0gb2JqZWN0W2tleV07XG5cbiAgICAgICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIG5vb3BcbiAgICAgICAgfSBlbHNlIGlmIChoYXNJZCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuaWQ7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUubWFwKChpOiB1bmtub3duKSA9PiAoaGFzSWQoaSkgPyBpLmlkIDogaSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgISh2YWx1ZSBpbnN0YW5jZW9mIEZpbGUpICYmICEodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSkge1xuICAgICAgICAgICAgdmFsdWUgPSBwaWNrQnkodmFsdWUsICh2LCBrKSA9PiBrICE9PSAnX190eXBlbmFtZScpOyAvLyBvbWl0KHZhbHVlLCBbJ19fdHlwZW5hbWUnXSkgP1xuICAgICAgICB9XG5cbiAgICAgICAgbmV3T2JqW2tleV0gPSB2YWx1ZTtcbiAgICB9KTtcblxuICAgIHJldHVybiBuZXdPYmo7XG59XG5cbmZ1bmN0aW9uIGhhc0lkKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMge2lkOiB1bmtub3dufSB7XG4gICAgcmV0dXJuICEhdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAnaWQnIGluIHZhbHVlICYmICEhdmFsdWUuaWQ7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgcGx1cmFsIGZvcm0gb2YgdGhlIGdpdmVuIG5hbWVcbiAqXG4gKiBUaGlzIGlzICoqbm90KiogbmVjZXNzYXJpbHkgdmFsaWQgZW5nbGlzaCBncmFtbWFyLiBJdHMgb25seSBwdXJwb3NlIGlzIGZvciBpbnRlcm5hbCB1c2FnZSwgbm90IGZvciBodW1hbnMuXG4gKlxuICogVGhpcyAqKk1VU1QqKiBiZSBrZXB0IGluIHN5bmMgd2l0aCBgXFxFY29kZXZcXEZlbGl4XFxBcGlcXFBsdXJhbDptYWtlKClgLlxuICpcbiAqIFRoaXMgaXMgYSBiaXQgcGVyZm9ybWFuY2Utc2Vuc2l0aXZlLCBzbyB3ZSBzaG91bGQga2VlcCBpdCBmYXN0IGFuZCBvbmx5IGNvdmVyIGNhc2VzIHRoYXQgd2UgYWN0dWFsbHkgbmVlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1ha2VQbHVyYWwobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBXb3JkcyBlbmRpbmcgaW4gYSB5IHByZWNlZGVkIGJ5IGEgdm93ZWwgZm9ybSB0aGVpciBwbHVyYWxzIGJ5IGFkZGluZyAtczpcbiAgICBpZiAobmFtZS5tYXRjaCgvW2FlaW91XXkkLykpIHtcbiAgICAgICAgcmV0dXJuIG5hbWUgKyAncyc7XG4gICAgfVxuXG4gICAgY29uc3QgcGx1cmFsID0gbmFtZSArICdzJztcblxuICAgIHJldHVybiBwbHVyYWwucmVwbGFjZSgveXMkLywgJ2llcycpLnJlcGxhY2UoL3NzJC8sICdzZXMnKS5yZXBsYWNlKC94cyQvLCAneGVzJyk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgc3RyaW5nIHdpdGggdGhlIGZpcnN0IGxldHRlciBhcyBjYXBpdGFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cHBlckNhc2VGaXJzdExldHRlcih0ZXJtOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0ZXJtLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdGVybS5zbGljZSgxKTtcbn1cblxuLyoqXG4gKiBSZXBsYWNlIGFsbCBhdHRyaWJ1dGVzIG9mIGZpcnN0IG9iamVjdCB3aXRoIHRoZSBvbmVzIHByb3ZpZGVkIGJ5IHRoZSBzZWNvbmQsIGJ1dCBrZWVwcyB0aGUgcmVmZXJlbmNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlT2JqZWN0S2VlcGluZ1JlZmVyZW5jZShvYmo6IExpdGVyYWwgfCBudWxsLCBuZXdPYmo6IExpdGVyYWwgfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKCFvYmogfHwgIW5ld09iaikge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIGRlbGV0ZSBvYmpba2V5XTtcbiAgICB9KTtcblxuICAgIE9iamVjdC5rZXlzKG5ld09iaikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICBvYmpba2V5XSA9IG5ld09ialtrZXldO1xuICAgIH0pO1xufVxuXG4vKipcbiAqIEdldCBjb250cmFzdGVkIGNvbG9yIGZvciB0ZXh0IGluIHRoZSBzbGlkZXIgdGh1bWJcbiAqIEBwYXJhbSBoZXhCZ0NvbG9yIHN0cmluZyBpbiBoZXhhZGVjaW1hbHMgcmVwcmVzZW50aW5nIHRoZSBiYWNrZ3JvdW5kIGNvbG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JlZ3JvdW5kQ29sb3IoaGV4QmdDb2xvcjogc3RyaW5nKTogJ2JsYWNrJyB8ICd3aGl0ZScge1xuICAgIGNvbnN0IHJnYiA9IGhleFRvUmdiKGhleEJnQ29sb3Iuc2xpY2UoMCwgNykpOyAvLyBzcGxpY2UgcmVtb3ZlIGFscGhhIGFuZCBjb25zaWRlciBvbmx5IFwidmlzaWJsZVwiIGNvbG9yIGF0IDEwMCUgYWxwaGFcbiAgICBjb25zdCBvID0gTWF0aC5yb3VuZCgocmdiLnIgKiAyOTkgKyByZ2IuZyAqIDU4NyArIHJnYi5iICogMTE0KSAvIDEwMDApO1xuXG4gICAgcmV0dXJuIG8gPiAxMjUgPyAnYmxhY2snIDogJ3doaXRlJztcbn1cblxuZnVuY3Rpb24gaGV4VG9SZ2IoaGV4OiBzdHJpbmcpOiB7cjogbnVtYmVyOyBnOiBudW1iZXI7IGI6IG51bWJlcn0ge1xuICAgIC8vIEV4cGFuZCBzaG9ydGhhbmQgZm9ybSAoZS5nLiBcIjAzRlwiKSB0byBmdWxsIGZvcm0gKGUuZy4gXCIwMDMzRkZcIilcbiAgICBjb25zdCBzaG9ydGhhbmRSZWdleCA9IC9eIz8oW2EtZlxcZF0pKFthLWZcXGRdKShbYS1mXFxkXSkkL2k7XG4gICAgaGV4ID0gaGV4LnJlcGxhY2Uoc2hvcnRoYW5kUmVnZXgsIChtLCByLCBnLCBiKSA9PiB7XG4gICAgICAgIHJldHVybiByICsgciArIGcgKyBnICsgYiArIGI7XG4gICAgfSk7XG5cbiAgICBjb25zdCByZXN1bHQgPSAvXiM/KFthLWZcXGRdezJ9KShbYS1mXFxkXXsyfSkoW2EtZlxcZF17Mn0pJC9pLmV4ZWMoaGV4KTtcbiAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgID8ge1xuICAgICAgICAgICAgICByOiBwYXJzZUludChyZXN1bHRbMV0sIDE2KSxcbiAgICAgICAgICAgICAgZzogcGFyc2VJbnQocmVzdWx0WzJdLCAxNiksXG4gICAgICAgICAgICAgIGI6IHBhcnNlSW50KHJlc3VsdFszXSwgMTYpLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB7XG4gICAgICAgICAgICAgIHI6IDAsXG4gICAgICAgICAgICAgIGc6IDAsXG4gICAgICAgICAgICAgIGI6IDAsXG4gICAgICAgICAgfTtcbn1cblxuLyoqXG4gKiBEdXJpbmcgbG9kYXNoLm1lcmdlV2l0aCwgb3ZlcnJpZGVzIGFycmF5c1xuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VPdmVycmlkZUFycmF5KGRlc3RWYWx1ZTogdW5rbm93biwgc291cmNlOiB1bmtub3duKTogdW5rbm93biB7XG4gICAgaWYgKGlzQXJyYXkoc291cmNlKSkge1xuICAgICAgICByZXR1cm4gc291cmNlO1xuICAgIH1cbn1cblxuLyoqXG4gKiBDb3B5IHRleHQgdG8gY2xpcGJvYXJkLlxuICogQWNjZXB0cyBsaW5lIGJyZWFrcyBgXFxuYCBhcyB0ZXh0YXJlYSBkby5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvcHlUb0NsaXBib2FyZChkb2N1bWVudDogRG9jdW1lbnQsIHRleHQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKTtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZChpbnB1dCk7XG4gICAgaW5wdXQudmFsdWUgPSB0ZXh0O1xuICAgIGlucHV0LnNlbGVjdCgpO1xuICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5Jyk7XG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChpbnB1dCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWVwRnJlZXplPFQgZXh0ZW5kcyBMaXRlcmFsPihvOiBUKTogUmVhZG9ubHlEZWVwPFQ+IHtcbiAgICBPYmplY3QudmFsdWVzKG8pLmZvckVhY2godiA9PiBPYmplY3QuaXNGcm96ZW4odikgfHwgZGVlcEZyZWV6ZSh2KSk7XG5cbiAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZShvKSBhcyBSZWFkb25seURlZXA8VD47XG59XG5cbi8qKlxuICogUmV0dXJuIGEgdmFsaWQgUGFnaW5hdGlvbklucHV0IGZyb20gd2hhdGV2ZXIgaXMgYXZhaWxhYmxlIGZyb20gZGF0YS4gSW52YWxpZCBwcm9wZXJ0aWVzL3R5cGVzIHdpbGwgYmUgZHJvcHBlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlUGFnaW5hdGlvbihkYXRhOiB1bmtub3duKTogUGFnaW5hdGlvbklucHV0IHwgbnVsbCB7XG4gICAgaWYgKCFkYXRhIHx8IHR5cGVvZiBkYXRhICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHBhZ2luYXRpb246IFBhZ2luYXRpb25JbnB1dCA9IHt9O1xuXG4gICAgaWYgKCdvZmZzZXQnIGluIGRhdGEgJiYgKGRhdGEub2Zmc2V0ID09PSBudWxsIHx8IHR5cGVvZiBkYXRhLm9mZnNldCA9PT0gJ251bWJlcicpKSB7XG4gICAgICAgIHBhZ2luYXRpb24ub2Zmc2V0ID0gZGF0YS5vZmZzZXQ7XG4gICAgfVxuXG4gICAgaWYgKCdwYWdlSW5kZXgnIGluIGRhdGEgJiYgKGRhdGEucGFnZUluZGV4ID09PSBudWxsIHx8IHR5cGVvZiBkYXRhLnBhZ2VJbmRleCA9PT0gJ251bWJlcicpKSB7XG4gICAgICAgIHBhZ2luYXRpb24ucGFnZUluZGV4ID0gZGF0YS5wYWdlSW5kZXg7XG4gICAgfVxuXG4gICAgaWYgKCdwYWdlU2l6ZScgaW4gZGF0YSAmJiAoZGF0YS5wYWdlU2l6ZSA9PT0gbnVsbCB8fCB0eXBlb2YgZGF0YS5wYWdlU2l6ZSA9PT0gJ251bWJlcicpKSB7XG4gICAgICAgIHBhZ2luYXRpb24ucGFnZVNpemUgPSBkYXRhLnBhZ2VTaXplO1xuICAgIH1cblxuICAgIHJldHVybiBwYWdpbmF0aW9uO1xufVxuXG4vKipcbiAqIFJldHVybiBhIHZhbGlkIFNvcnRpbmdzIGZyb20gd2hhdGV2ZXIgaXMgYXZhaWxhYmxlIGZyb20gZGF0YS4gSW52YWxpZCBwcm9wZXJ0aWVzL3R5cGVzIHdpbGwgYmUgZHJvcHBlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlU29ydGluZyhkYXRhOiB1bmtub3duKTogU29ydGluZ1tdIHwgbnVsbCB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQ6IFNvcnRpbmdbXSA9IFtdO1xuICAgIGRhdGEuZm9yRWFjaChzID0+IHtcbiAgICAgICAgY29uc3QgciA9IHZhbGlkYXRlT25lU29ydGluZyhzKTtcbiAgICAgICAgaWYgKHIpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHIpO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZU9uZVNvcnRpbmcoZGF0YTogdW5rbm93bik6IFNvcnRpbmcgfCBudWxsIHtcbiAgICBpZiAoIWRhdGEgfHwgdHlwZW9mIGRhdGEgIT09ICdvYmplY3QnIHx8ICEoJ2ZpZWxkJyBpbiBkYXRhKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBzb3J0aW5nOiBTb3J0aW5nID0ge2ZpZWxkOiBkYXRhLmZpZWxkfTtcblxuICAgIGlmIChcbiAgICAgICAgJ29yZGVyJyBpbiBkYXRhICYmXG4gICAgICAgIChkYXRhLm9yZGVyID09PSBTb3J0aW5nT3JkZXIuQVNDIHx8IGRhdGEub3JkZXIgPT09IFNvcnRpbmdPcmRlci5ERVNDIHx8IGRhdGEub3JkZXIgPT09IG51bGwpXG4gICAgKSB7XG4gICAgICAgIHNvcnRpbmcub3JkZXIgPSBkYXRhLm9yZGVyO1xuICAgIH1cblxuICAgIGlmICgnbnVsbEFzSGlnaGVzdCcgaW4gZGF0YSAmJiAoZGF0YS5udWxsQXNIaWdoZXN0ID09PSBudWxsIHx8IHR5cGVvZiBkYXRhLm51bGxBc0hpZ2hlc3QgPT09ICdib29sZWFuJykpIHtcbiAgICAgICAgc29ydGluZy5udWxsQXNIaWdoZXN0ID0gZGF0YS5udWxsQXNIaWdoZXN0O1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgICAgJ2VtcHR5U3RyaW5nQXNIaWdoZXN0JyBpbiBkYXRhICYmXG4gICAgICAgIChkYXRhLmVtcHR5U3RyaW5nQXNIaWdoZXN0ID09PSBudWxsIHx8IHR5cGVvZiBkYXRhLmVtcHR5U3RyaW5nQXNIaWdoZXN0ID09PSAnYm9vbGVhbicpXG4gICAgKSB7XG4gICAgICAgIHNvcnRpbmcuZW1wdHlTdHJpbmdBc0hpZ2hlc3QgPSBkYXRhLmVtcHR5U3RyaW5nQXNIaWdoZXN0O1xuICAgIH1cblxuICAgIHJldHVybiBzb3J0aW5nO1xufVxuXG4vKipcbiAqIFJldHVybiB2YWxpZCBjb2x1bW5zIGZyb20gd2hhdGV2ZXIgaXMgYXZhaWxhYmxlIGZyb20gZGF0YS4gSW52YWxpZCBwcm9wZXJ0aWVzL3R5cGVzIHdpbGwgYmUgZHJvcHBlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlQ29sdW1ucyhkYXRhOiB1bmtub3duKTogc3RyaW5nW10gfCBudWxsIHtcbiAgICBpZiAodHlwZW9mIGRhdGEgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBkYXRhLnNwbGl0KCcsJykuZmlsdGVyKHN0cmluZyA9PiBzdHJpbmcpO1xufVxuIl19
|
|
@@ -18,4 +18,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.2", ngImpor
|
|
|
18
18
|
type: Inject,
|
|
19
19
|
args: [MAT_DIALOG_DATA]
|
|
20
20
|
}] }] });
|
|
21
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsL3NyYy9saWIvbW9kdWxlcy9hbGVydC9jb25maXJtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9tb2R1bGVzL2FsZXJ0L2NvbmZpcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDaEQsT0FBTyxFQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7Ozs7QUFlekQsTUFBTSxPQUFPLHVCQUF1QjtJQUNoQyxZQUFtRCxJQUF3QjtRQUF4QixTQUFJLEdBQUosSUFBSSxDQUFvQjtJQUFHLENBQUM7OEdBRHRFLHVCQUF1QixrQkFDTCxlQUFlO2tHQURqQyx1QkFBdUIsd0VDakJwQyx3WUFRQSw2RkRPYyxlQUFlLCtuQkFBRSxlQUFlOzsyRkFFakMsdUJBQXVCO2tCQU5uQyxTQUFTO2lDQUdNLElBQUksV0FDUCxDQUFDLGVBQWUsRUFBRSxlQUFlLENBQUM7OzBCQUd2QixNQUFNOzJCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgSW5qZWN0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2dNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQge01hdEJ1dHRvbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcblxuZXhwb3J0IHR5cGUgTmF0dXJhbENvbmZpcm1EYXRhID0ge1xuICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgbWVzc2FnZTogc3RyaW5nO1xuICAgIGNvbmZpcm1UZXh0OiBzdHJpbmc7XG4gICAgY2FuY2VsVGV4dDogc3RyaW5nO1xufTtcblxuQENvbXBvbmVudCh7XG4gICAgdGVtcGxhdGVVcmw6ICcuL2NvbmZpcm0uY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsOiAnLi9jb25maXJtLmNvbXBvbmVudC5zY3NzJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtNYXREaWFsb2dNb2R1bGUsIE1hdEJ1dHRvbk1vZHVsZV0sXG59KVxuZXhwb3J0IGNsYXNzIE5hdHVyYWxDb25maXJtQ29tcG9uZW50IHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhOiBOYXR1cmFsQ29uZmlybURhdGEpIHt9XG59XG4iLCI8aDIgbWF0LWRpYWxvZy10aXRsZT57eyBkYXRhLnRpdGxlIH19PC9oMj5cbjxtYXQtZGlhbG9nLWNvbnRlbnRcbiAgICA+PHAgY2xhc3M9XCJtYXQtYm9keVwiPnt7IGRhdGEubWVzc2FnZSB9fTwvcD48L21hdC1kaWFsb2ctY29udGVudFxuPlxuPG1hdC1kaWFsb2ctYWN0aW9ucyBhbGlnbj1cImVuZFwiPlxuICAgIDxidXR0b24gW21hdC1kaWFsb2ctY2xvc2VdPVwiZmFsc2VcIiBtYXQtYnV0dG9uPnt7IGRhdGEuY2FuY2VsVGV4dCB9fTwvYnV0dG9uPlxuICAgIDxidXR0b24gW21hdC1kaWFsb2ctY2xvc2VdPVwidHJ1ZVwiIG1hdC1zdHJva2VkLWJ1dHRvbiBjZGtGb2N1c0luaXRpYWw+e3sgZGF0YS5jb25maXJtVGV4dCB9fTwvYnV0dG9uPlxuPC9tYXQtZGlhbG9nLWFjdGlvbnM+XG4iXX0=
|